diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 7de329e48..6cb1406db 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -34,13 +34,25 @@ jobs: matrix: board: - fqbn: arduino:mbed:nano33ble + id: nano33ble - fqbn: arduino:mbed:envie_m7 + id: envie_m7 + - fqbn: arduino:mbed:envie_m7:target_core=cm4 + id: envie_m7_core_cm4 - fqbn: arduino:mbed:nanorp2040connect + id: nanorp2040connect - fqbn: arduino:mbed:nicla_sense + id: nicla_sense - fqbn: arduino:mbed:nicla_vision + id: nicla_vision - fqbn: arduino:mbed:opta + id: opta - fqbn: arduino:mbed:giga + id: giga - fqbn: arduino:mbed:nicla_voice + id: nicla_voice + - fqbn: arduino:mbed:edge_control + id: edge_control # compile only the examples compatible with each board include: @@ -70,6 +82,8 @@ jobs: - name: ArduinoBLE - name: ArduinoGraphics - name: Arduino_GigaDisplayTouch + - name: emWin + - name: Arduino_DebugUtils additional-sketch-paths: | - libraries/PDM - libraries/doom @@ -141,6 +155,7 @@ jobs: - name: ArduinoGraphics - name: Arduino_GigaDisplayTouch - name: arducam_dvp + - name: emWin additional-sketch-paths: | - libraries/PDM - libraries/MCUboot @@ -156,7 +171,6 @@ jobs: - libraries/USBHOST - libraries/USBMSD/examples/AccessFlashAsUSBDisk - libraries/WiFi - - libraries/GSM - ~/Arduino/libraries/ArduinoBLE - board: fqbn: arduino:mbed:nicla_voice @@ -171,14 +185,24 @@ jobs: version: v0.9.6 - name: arduino-libg722 source-url: https://github.com/pschatzmann/arduino-libg722.git + - board: + fqbn: arduino:mbed:edge_control + additional-libraries: | + - name: MicroNMEA + - name: Arduino_DebugUtils + additional-sketch-paths: | + - libraries/GSM + - libraries/USBHID + - libraries/USBMSD/examples/Nano33BLE_FlashMassStorage + - libraries/ThreadDebug steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 # The source files are in a subfolder of the ArduinoCore-API repository, so it's not possible to clone it directly to the final destination in the core - name: Checkout ArduinoCore-API - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: repository: arduino/ArduinoCore-API path: ArduinoCore-API @@ -213,7 +237,7 @@ jobs: - name: Save memory usage change report as artifact if: github.event_name == 'pull_request' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: path: ${{ env.SKETCHES_REPORTS_PATH }} - name: ${{ env.SKETCHES_REPORTS_PATH }} + name: ${{ env.SKETCHES_REPORTS_PATH }}-${{ matrix.board.id }} diff --git a/README.md b/README.md index 0d46f40fb..6b94a0f4a 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ To install ARM build tools, use the `Boards Manager` option in the Arduino IDE t ## mbed-os-to-arduino script -The backbone of the packaging process is the https://github.com/arduino/ArduinoCore-mbed/blob/master/mbed-os-to-arduino script. It basically compiles a blank Mbed OS project for any supported target board, recovering the files that will be needed at compile time and copying them to the right location. This script is not compatible with MacOS, it must be run on Linux. +The backbone of the packaging process is the https://github.com/arduino/ArduinoCore-mbed/blob/master/mbed-os-to-arduino script. It basically compiles a blank Mbed OS project for any supported target board, recovering the files that will be needed at compile time and copying them to the right location. This script is compatible only with Linux. If you are using macOS, use the https://github.com/arduino/ArduinoCore-mbed/blob/master/mbed-os-to-arduino-macos script. It can be used for a variety of tasks including: diff --git a/boards.txt b/boards.txt index 6a067f06c..ee8018487 100644 --- a/boards.txt +++ b/boards.txt @@ -47,6 +47,11 @@ edge_control.bootloader.config=-f target/nrf52.cfg edge_control.bootloader.programmer=-f interface/cmsis-dap.cfg edge_control.bootloader.file=EDGE_CONTROL/bootloader.hex +edge_control.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +edge_control.debug.server.openocd.scripts.1={programmer.transport_script} +edge_control.debug.server.openocd.scripts.2=target/nrf52.cfg +edge_control.debug.svd_file={runtime.platform.path}/svd/nrf52840.svd + ############################################################## menu.split=Flash split @@ -74,7 +79,7 @@ envie_m7.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16 envie_m7.menu.target_core.cm7.build.architecture=cortex-m7 envie_m7.menu.target_core.cm7.compiler.mbed.arch.define= -envie_m7.menu.target_core.cm4.build.variant=PORTENTA_H7_M4 +envie_m7.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4 envie_m7.menu.target_core.cm4.build.mcu=cortex-m4 envie_m7.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16 envie_m7.menu.target_core.cm4.build.architecture=cortex-m4 @@ -99,7 +104,7 @@ envie_m7.compiler.mbed.defines={build.variant.path}/defines.txt envie_m7.compiler.mbed.ldflags={build.variant.path}/ldflags.txt envie_m7.compiler.mbed.cflags={build.variant.path}/cflags.txt envie_m7.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt -envie_m7.compiler.mbed.includes={build.variant.path}/includes.txt +envie_m7.compiler.mbed.includes={build.variant.path}/../PORTENTA_H7_M7/includes.txt envie_m7.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys envie_m7.compiler.mbed="{build.variant.path}/libs/libmbed.a" envie_m7.vid.0=0x2341 @@ -158,7 +163,14 @@ envie_m7.bootloader.tool.default=openocd envie_m7.bootloader.config=-f target/stm32h7x_dual_bank.cfg envie_m7.bootloader.programmer=-f interface/stlink.cfg envie_m7.bootloader.extra_action.preflash=stm32h7x option_write 0 0x01c 0xb86aaf0 -envie_m7.bootloader.file=PORTENTA_H7/portentah7_bootloader_mbed_hs_v2.elf +envie_m7.bootloader.file=PORTENTA_H7/portentah7_bootloader_mbed_hs_v2.hex + +envie_m7.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +envie_m7.debug.server.openocd.scripts.1={programmer.transport_script} +envie_m7.debug.server.openocd.scripts.2=target/stm32h7x_dual_bank.cfg +envie_m7.debug.cortex-debug.custom.request=attach +envie_m7.menu.target_core.cm7.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM7.svd +envie_m7.menu.target_core.cm4.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM4.svd envie_m7_thread_debug.name=Arduino Portenta H7 (ThreadDebug) envie_m7_thread_debug.vid.0=0x2341 @@ -277,6 +289,11 @@ nano33ble.bootloader.config=-f target/nrf52.cfg nano33ble.bootloader.programmer=-f interface/cmsis-dap.cfg nano33ble.bootloader.file=nano33ble/bootloader.hex +nano33ble.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +nano33ble.debug.server.openocd.scripts.1={programmer.transport_script} +nano33ble.debug.server.openocd.scripts.2=target/nrf52.cfg +nano33ble.debug.svd_file={runtime.platform.path}/svd/nrf52840.svd + ############################################################## nanorp2040connect.name=Arduino Nano RP2040 Connect @@ -333,6 +350,11 @@ nanorp2040connect.bootloader.tool.default=openocd nanorp2040connect.bootloader.config=-f target/rp2040.cfg nanorp2040connect.bootloader.programmer=-f interface/cmsis-dap.cfg +nanorp2040connect.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +nanorp2040connect.debug.server.openocd.scripts.1={programmer.transport_script} +nanorp2040connect.debug.server.openocd.scripts.2=target/rp2040-core0.cfg +nanorp2040connect.debug.svd_file={runtime.platform.path}/svd/rp2040.svd + ############################################################## pico.name=Raspberry Pi Pico @@ -377,6 +399,11 @@ pico.bootloader.tool.default=openocd pico.bootloader.config=-f target/rp2040.cfg pico.bootloader.programmer=-f interface/cmsis-dap.cfg +pico.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +pico.debug.server.openocd.scripts.1={programmer.transport_script} +pico.debug.server.openocd.scripts.2=target/rp2040-core0.cfg +pico.debug.svd_file={runtime.platform.path}/svd/rp2040.svd + ############################################################## nicla_sense.name=Arduino Nicla Sense ME @@ -416,6 +443,8 @@ nicla_sense.upload.wait_for_upload_port=true nicla_sense.upload.native_usb=true nicla_sense.upload.maximum_size=527616 nicla_sense.upload.maximum_data_size=64288 +nicla_sense.programmer.protocol=cmsis-dap +nicla_sense.programmer.transport_script={runtime.platform.path}/debugger/select_swd.cfg nicla_sense.bootloader.tool=openocd nicla_sense.bootloader.tool.default=openocd @@ -424,6 +453,11 @@ nicla_sense.bootloader.config=-f target/nrf52.cfg nicla_sense.bootloader.programmer=-f interface/cmsis-dap.cfg nicla_sense.bootloader.file=NICLA/bootloader.hex +nicla_sense.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +nicla_sense.debug.server.openocd.scripts.1={programmer.transport_script} +nicla_sense.debug.server.openocd.scripts.2=target/nrf52.cfg +nicla_sense.debug.svd_file={runtime.platform.path}/svd/nrf52833.svd + ############################################################## nicla_voice.name=Arduino Nicla Voice @@ -464,6 +498,8 @@ nicla_voice.upload.wait_for_upload_port=true nicla_voice.upload.native_usb=true nicla_voice.upload.maximum_size=527616 nicla_voice.upload.maximum_data_size=64288 +nicla_voice.programmer.protocol=cmsis-dap +nicla_voice.programmer.transport_script={runtime.platform.path}/debugger/select_swd.cfg nicla_voice.bootloader.tool=openocd nicla_voice.bootloader.tool.default=openocd @@ -472,6 +508,11 @@ nicla_voice.bootloader.config=-f target/nrf52.cfg nicla_voice.bootloader.programmer=-f interface/cmsis-dap.cfg nicla_voice.bootloader.file=NICLA_VOICE/bootloader_application.hex +nicla_voice.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +nicla_voice.debug.server.openocd.scripts.1={programmer.transport_script} +nicla_voice.debug.server.openocd.scripts.2=target/nrf52.cfg +nicla_voice.debug.svd_file={runtime.platform.path}/svd/nrf52833.svd + ############################################################## nicla_vision.name=Arduino Nicla Vision @@ -492,7 +533,7 @@ nicla_vision.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16 nicla_vision.menu.target_core.cm7.build.architecture=cortex-m7 nicla_vision.menu.target_core.cm7.compiler.mbed.arch.define= -nicla_vision.menu.target_core.cm4.build.variant=PORTENTA_H7_M4 +nicla_vision.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4 nicla_vision.menu.target_core.cm4.build.mcu=cortex-m4 nicla_vision.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16 nicla_vision.menu.target_core.cm4.build.architecture=cortex-m4 @@ -510,7 +551,7 @@ nicla_vision.compiler.mbed.defines={build.variant.path}/defines.txt nicla_vision.compiler.mbed.ldflags={build.variant.path}/ldflags.txt nicla_vision.compiler.mbed.cflags={build.variant.path}/cflags.txt nicla_vision.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt -nicla_vision.compiler.mbed.includes={build.variant.path}/includes.txt +nicla_vision.compiler.mbed.includes={build.variant.path}/../NICLA_VISION/includes.txt nicla_vision.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys nicla_vision.compiler.mbed="{build.variant.path}/libs/libmbed.a" nicla_vision.vid.0=0x2341 @@ -562,10 +603,18 @@ nicla_vision.menu.target_core.cm4.upload.maximum_data_size=294248 nicla_vision.debug.tool=gdb nicla_vision.bootloader.tool=openocd +nicla_vision.bootloader.tool.default=openocd nicla_vision.bootloader.config=-f target/stm32h7x_dual_bank.cfg nicla_vision.bootloader.programmer=-f interface/stlink.cfg nicla_vision.bootloader.extra_action.preflash=stm32h7x option_write 0 0x01c 0xb86aaf0 -nicla_vision.bootloader.file=NICLA_VISION/bootloader.elf +nicla_vision.bootloader.file=NICLA_VISION/bootloader.hex + +nicla_vision.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +nicla_vision.debug.server.openocd.scripts.1={programmer.transport_script} +nicla_vision.debug.server.openocd.scripts.2=target/stm32h7x_dual_bank.cfg +nicla_vision.debug.cortex-debug.custom.request=attach +nicla_vision.menu.target_core.cm7.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM7.svd +nicla_vision.menu.target_core.cm4.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM4.svd ############################################################## @@ -590,7 +639,7 @@ opta.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16 opta.menu.target_core.cm7.build.architecture=cortex-m7 opta.menu.target_core.cm7.compiler.mbed.arch.define= -opta.menu.target_core.cm4.build.variant=PORTENTA_H7_M4 +opta.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4 opta.menu.target_core.cm4.build.mcu=cortex-m4 opta.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16 opta.menu.target_core.cm4.build.architecture=cortex-m4 @@ -617,7 +666,7 @@ opta.compiler.mbed.defines={build.variant.path}/defines.txt opta.compiler.mbed.ldflags={build.variant.path}/ldflags.txt opta.compiler.mbed.cflags={build.variant.path}/cflags.txt opta.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt -opta.compiler.mbed.includes={build.variant.path}/includes.txt +opta.compiler.mbed.includes={build.variant.path}/../OPTA/includes.txt opta.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys opta.compiler.mbed="{build.variant.path}/libs/libmbed.a" opta.vid.0=0x2341 @@ -691,10 +740,18 @@ opta.menu.target_core.cm4.upload.maximum_data_size=294248 opta.debug.tool=gdb opta.bootloader.tool=openocd +opta.bootloader.tool.default=openocd opta.bootloader.config=-f target/stm32h7x_dual_bank.cfg opta.bootloader.programmer=-f interface/stlink.cfg opta.bootloader.extra_action.preflash=stm32h7x option_write 0 0x01c 0xb86aaf0 -opta.bootloader.file=OPTA/bootloader.elf +opta.bootloader.file=OPTA/bootloader.hex + +opta.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +opta.debug.server.openocd.scripts.1={programmer.transport_script} +opta.debug.server.openocd.scripts.2=target/stm32h7x_dual_bank.cfg +opta.debug.cortex-debug.custom.request=attach +opta.menu.target_core.cm7.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM7.svd +opta.menu.target_core.cm4.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM4.svd ############################################################## @@ -716,7 +773,7 @@ giga.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16 giga.menu.target_core.cm7.build.architecture=cortex-m7 giga.menu.target_core.cm7.compiler.mbed.arch.define= -giga.menu.target_core.cm4.build.variant=PORTENTA_H7_M4 +giga.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4 giga.menu.target_core.cm4.build.mcu=cortex-m4 giga.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16 giga.menu.target_core.cm4.build.architecture=cortex-m4 @@ -739,7 +796,7 @@ giga.compiler.mbed.defines={build.variant.path}/defines.txt giga.compiler.mbed.ldflags={build.variant.path}/ldflags.txt giga.compiler.mbed.cflags={build.variant.path}/cflags.txt giga.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt -giga.compiler.mbed.includes={build.variant.path}/includes.txt +giga.compiler.mbed.includes={build.variant.path}/../GIGA/includes.txt giga.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys giga.compiler.mbed="{build.variant.path}/libs/libmbed.a" giga.vid.0=0x2341 @@ -787,7 +844,15 @@ giga.menu.target_core.cm4.upload.maximum_data_size=294248 giga.debug.tool=gdb giga.bootloader.tool=openocd +giga.bootloader.tool.default=openocd giga.bootloader.config=-f target/stm32h7x_dual_bank.cfg giga.bootloader.programmer=-f interface/stlink.cfg giga.bootloader.extra_action.preflash=stm32h7x option_write 0 0x01c 0xb86aaf0 -giga.bootloader.file=GIGA/bootloader.elf +giga.bootloader.file=GIGA/bootloader.hex + +giga.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg +giga.debug.server.openocd.scripts.1={programmer.transport_script} +giga.debug.server.openocd.scripts.2=target/stm32h7x_dual_bank.cfg +giga.debug.cortex-debug.custom.request=attach +giga.menu.target_core.cm7.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM7.svd +giga.menu.target_core.cm4.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM4.svd \ No newline at end of file diff --git a/bootloaders/GIGA/bootloader.bin b/bootloaders/GIGA/bootloader.bin index fe6455c4c..3f8cd581e 100644 Binary files a/bootloaders/GIGA/bootloader.bin and b/bootloaders/GIGA/bootloader.bin differ diff --git a/bootloaders/GIGA/bootloader.elf b/bootloaders/GIGA/bootloader.elf index 680bcaff0..d99da4575 100755 Binary files a/bootloaders/GIGA/bootloader.elf and b/bootloaders/GIGA/bootloader.elf differ diff --git a/bootloaders/GIGA/bootloader.hex b/bootloaders/GIGA/bootloader.hex new file mode 100644 index 000000000..be299777f --- /dev/null +++ b/bootloaders/GIGA/bootloader.hex @@ -0,0 +1,8008 @@ +:020000040800F2 +:10000000000008247D060008C9060008C90600088B +:10001000C9060008C9060008C9060008000000005B +:10002000000000000000000000000000B50500080E +:10003000C9060008000000004F0600085F0600081F +:10004000C9060008C9060008C9060008C906000854 +:10005000C9060008C9060008C9060008C906000844 +:10006000C9060008C9060008C9060008C906000834 +:10007000C9060008C9060008C9060008C906000824 +:10008000C9060008C9060008C9060008C906000814 +:10009000C9060008C9060008C9060008C906000804 +:1000A000C9060008C9060008C9060008C9060008F4 +:1000B000C9060008C9060008C9060008C9060008E4 +:1000C000C9060008C9060008C9060008C9060008D4 +:1000D000C9060008C9060008C9060008C9060008C4 +:1000E000C9060008C906000800000000C90600088B +:1000F000C9060008C9060008C9060008C9060008A4 +:10010000C9060008C9060008C9060008C906000893 +:10011000C9060008C9060008C9060008C906000883 +:10012000C9060008C9060008C9060008C906000873 +:10013000C9060008C9060008C9060008C906000863 +:10014000C9060008C9060008000000000000000001 +:10015000C9060008C9060008C9060008C906000843 +:10016000C9060008C9060008C9060008C906000833 +:10017000C9060008C9060008C906000800000000FA +:10018000C9060008C9060008C9060008C906000813 +:10019000C9060008C9060008C9060008C906000803 +:1001A000C9060008C9060008C9060008C9060008F3 +:1001B000C9060008C9060008C9060008C9060008E3 +:1001C000C9060008C9060008C9060008C9060008D3 +:1001D000C9060008C9060008C9060008C9060008C3 +:1001E000C9060008C9060008C9060008C9060008B3 +:1001F000C9060008C9060008C9060008C9060008A3 +:10020000C9060008C9060008C9060008C906000892 +:10021000C9060008C9060008C9060008C906000882 +:10022000C9060008C9060008C9060008C906000872 +:10023000C90600087D5B0008C9060008C906000859 +:10024000C9060008C9060008C9060008C906000852 +:10025000C9060008C9060008C9060008C906000842 +:10026000C9060008C9060008C9060008C906000832 +:10027000C9060008C9060008C9060008C906000822 +:10028000C9060008C9060008C906000800000000E9 +:10029000C9060008C90600080000000000000000B0 +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F0004D4355626F6F742041726475696E6F0073 +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:10041000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:10042000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:10043000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B5054C237833B9044B13B10448AFF34D +:1005100000800123237010BD20040024000000008F +:100520003CC1010808B5034B1BB103490348AFF3B5 +:10053000008008BD00000000240400243CC1010824 +:10054000154B002B08BF134B9D46A3F5803A0021A5 +:100550008B460F461348144A121A18F097F90F4B9E +:10056000002B00D098470E4B002B00D0984700205E +:10057000002104000D000D48002802D00C480CF0AA +:100580005BFF17F07BFF2000290014F057F80DF0F7 +:1005900021F900BF0000080000000824000000004E +:1005A000C14701082004002458A5022439D40008BA +:1005B000000000001EF0040F0CBFEFF30880EFF303 +:1005C0000980816911F8021C002932D101B590E837 +:1005D0000F10E047BDE800508CE80300244B93E87F +:1005E0000600914208BF70471A6041B91EF0100F13 +:1005F00010D1204B186820F0010018600AE02CE9A7 +:10060000F00F1EF0100F08BF2CED108A81F822E0C9 +:10061000C1F838C0906B92F8221061F0FF0E1EF006 +:10062000100F08BFB0EC108AB0E8F00F80F3098813 +:100630007047114A13689942FAD801B552F821C09F +:100640000FC8E047BDE80050CCF80000704701B586 +:1006500014F0EEFABDE80140EFF3098CBEE701B5F6 +:1006600014F028FBBDE80140EFF3098CB6E7000069 +:100670002C01002434EF00E0ACBE0108DFF830D0DC +:1006800005F0AEFA002103E00A4B5B5843500431F9 +:1006900009480A4B42189A42F6D3094A02E000235D +:1006A00042F8043B074B9A42F9D3FFF749FF7047E2 +:1006B0000000082414F0010800000024180400249D +:1006C0002004002458A50224FEE70000264B022245 +:1006D00083F83E201B681A6A22F001021A621A6A25 +:1006E00042F001021A62214A934219D002F5806257 +:1006F000934215D002F57052934211D002F58062F8 +:1007000093420DD002F58062934209D0B3F1804F3D +:100710000ED19968164A0A40062A21D10020704756 +:100720005A6C42F400425A64104A9342EED1F0E708 +:10073000104A9342EDD002F580629342E9D002F56F +:1007400080629342E5D002F578429342E1D0A2F56F +:100750006C429342DDD01A6842F001021A60DDE774 +:10076000B2F5803FF7D1D9E76405002400000140CD +:10077000070001000004004008B5044B027853F85C +:10078000220003685B6B9847C0B208BD00000024DC +:1007900073B50E4600781146064A002452F8200030 +:1007A0000268CDE90034234695693246A84702B075 +:1007B00070BD00BF0000002410B5846802EB011278 +:1007C00001312023A03C0C32A4EB4111FFF7E0FFE4 +:1007D000003818BF012010BD024B6FF002021B68E9 +:1007E0001A61704764050024034B1A68D36823F02C +:1007F0000203D360704700BF64050024064B6FF00E +:1008000002021B681A615A6942F002025A61DA68F0 +:1008100042F00202DA60704764050024054B6FF075 +:1008200002021B6858631A61DA6842F00202DA6059 +:10083000704700BF64050024014B586A704700BF31 +:10084000000C0040064A1168CB6823F00203CB601D +:1008500092F83E30012B01D1FFF738BF704700BF3F +:1008600064050024074B084A13601A69910708D5EC +:10087000DA68920705D56FF0020204481A610CF09D +:1008800097BE7047000C004064050024A4AC01082A +:100890000048704754AC01086AB101F00301074BEE +:1008A0000329596808D000F47060B0F5706F03D167 +:1008B00021EA02025A6070470A43FBE7000400582D +:1008C00030B5114B114DD5F894409C42FBD14943B2 +:1008D000012A01EB41034FEA41046FEA030304D00C +:1008E000022A0BD0C26813400BE0C26813401943C0 +:1008F000C160064B4FF440725A6130BDC26813406C +:100900002343C360F5E700BF000300800064025882 +:100910002DE9F04191F800E04B7874464E69012BC7 +:10092000354F4FEA4414DFF8D4C044D100F51065C8 +:100930002B19B6B91E6937401F611E6946F400269F +:100940001E611E6906EA0C06012A1E6122D10A698F +:1009500002B15A612B5943F004432B510020BDE8EA +:10096000F081D3F8108008EA0C0CC3F810C0D3F85B +:1009700010C00CEA07071F618F68BE421E6946F46B +:10098000002688BF4F611E614E691F69C6F31206BB +:100990003E43D9E72B5943F004432B514B69002BBD +:1009A000DCD00EF00F020123D0F8341893400B4333 +:1009B000C0F83438D2E700F5306003191D6905EA44 +:1009C0000C051D611D693D401D618D6806B14D61BD +:1009D0001E69C5F31205012A46F400261E611E6930 +:1009E00045EA06051D6102D1CA6802B15A61035980 +:1009F00043F004430351B1E7FFFF07E00000F8FFB5 +:100A00004E4A70B5946A966AD36A16F07C7FC6F334 +:100A10000551556C00F08D8007EE901AC3F300234A +:100A2000C5F3CC0104F00304F8EEE76A4B43012C54 +:100A3000B7EE006A07EE903AFAEEE97A6BD0022C34 +:100A40005BD0002C67D113689B0646D51168136CE8 +:100A5000C1F3C1013A4AC3F30803CA4007EE102AA2 +:100A6000F8EEC75A85EEA67A06EE903AF8EEE66AF8 +:100A700076EEA77A77EE867A304A67EE877A136C3D +:100A8000C3F3462307EE103AB8EEC77A37EE067A7C +:100A9000C7EE876AFCEEE66AC0ED006A136CC3F32A +:100AA000064307EE103AB8EEC77A37EE067AC7EE7D +:100AB000876AFCEEE66AC0ED016A136CC3F3066355 +:100AC00007EE103AB8EEC77A37EE066A87EE867AF6 +:100AD000BCEEC77A80ED027A70BD136CDFED195A57 +:100AE000C3F3080307EE103AB8EEC77A77EE277A19 +:100AF00077EE867A85EEA67ABEE7136CDFED125AA2 +:100B0000C3F3080307EE103AB8EEC77A77EE277AF8 +:100B100077EE867AEEE7136CDFED0C5AC3F3080329 +:100B200007EE103AB8EEC77A77EE277A77EE867A34 +:100B3000E0E7C0E900118160CEE700BF0044025841 +:100B40000090D0030024744C0024744B0024744A99 +:100B50004E4A70B5946A966AD36A16F47C3FC6F31F +:100B60000531D56B00F08D8007EE901AC3F30013AA +:100B7000C5F3CC0104F00304F8EEE76A4B43012C03 +:100B8000B7EE006A07EE903AFAEEE97A6BD0022CE3 +:100B90005BD0002C67D113689B0646D51168936B18 +:100BA000C1F3C1013A4AC3F30803CA4007EE102A51 +:100BB000F8EEC75A85EEA67A06EE903AF8EEE66AA7 +:100BC00076EEA77A77EE867A304A67EE877A936B6D +:100BD000C3F3462307EE103AB8EEC77A37EE067A2B +:100BE000C7EE876AFCEEE66AC0ED006A936BC3F35A +:100BF000064307EE103AB8EEC77A37EE067AC7EE2C +:100C0000876AFCEEE66AC0ED016A936BC3F3066384 +:100C100007EE103AB8EEC77A37EE066A87EE867AA4 +:100C2000BCEEC77A80ED027A70BD936BDFED195A86 +:100C3000C3F3080307EE103AB8EEC77A77EE277AC7 +:100C400077EE867A85EEA67ABEE7936BDFED125AD1 +:100C5000C3F3080307EE103AB8EEC77A77EE277AA7 +:100C600077EE867AEEE7936BDFED0C5AC3F3080359 +:100C700007EE103AB8EEC77A77EE277A77EE867AE3 +:100C8000E0E7C0E900118160CEE700BF00440258F0 +:100C90000090D0030024744C0024744B0024744A48 +:100CA000002070476FF0570070476FF05700704793 +:100CB000036810B49C6C0023A4461A465DF8044BEC +:100CC00060476FF05700704743680A46196810B4D0 +:100CD0008C6D8168184623465DF8044B18474368BD +:100CE00081681A681846526D1047436881681A680F +:100CF0001846126D1047436881681A681846D26C0E +:100D0000104730B4446813462268956C0A468168DF +:100D10002046AC4630BC6047436881681A68184674 +:100D2000526C1047436881681A681846126C104765 +:100D300030B4446813462268D56B0A468168204661 +:100D4000AC4630BC604730B4446813462268956BAB +:100D50000A4681682046AC4630BC604710B5044660 +:100D6000406830B10368A1685B6B984700236360FB +:100D700010BD6FF01500FBE738B50446FFF7EEFF36 +:100D80000546236820465B689847284638BD70B5FD +:100D90000D464168044641B929680E6B00F108010F +:100DA0002846B04700B9656070BD6FF01500FBE7DD +:100DB000044B10B50360044643680BB1FFF7CEFF48 +:100DC000204610BD28AB0108034B10B50446036054 +:100DD000FFF7EEFF204610BDB4AB01084368816801 +:100DE0001A681846526F1047436881681A68184697 +:100DF000126F1047436881681A681846D26E104710 +:100E000043680A46196810B48C6E816818462346F8 +:100E10005DF8044B184710B50446406830B10368CC +:100E2000A1681B6E98470023636010BD6FF015002A +:100E3000FBE738B50446FFF7EEFF0546236820467A +:100E40005B689847284638BD38B5436804460D4668 +:100E500043B90B6800F108012846DB6D984700B9DB +:100E6000656038BD6FF01500FBE70000044B10B55E +:100E70000360044643680BB1FFF7CDFF204610BD69 +:100E8000FCAA0108034B10B504460360FFF7EEFF10 +:100E9000204610BD88AB01080368013303600020C1 +:100EA0007047F7B5089F0E4604681946C0690023CD +:100EB000256800970027E0FB0623204601976D690F +:100EC000A84703B0F0BDF7B5089F0E460468194661 +:100ED000C0690023256800970027E0FB0623204611 +:100EE0000197AD69A84703B0F0BD37B50468C36981 +:100EF00000202268009301902046D569A1FB0323BE +:100F0000A84703B030BD006803681B691847002874 +:100F100007DC10F1160F04DA10F1340F08BF6FF080 +:100F2000890070470B4640F20112002170B504465B +:100F3000184617F0ABFC03466068A1680268556E5E +:100F40001A462B46BDE870401847000038B50C4BD8 +:100F500004460C4D03600023C0E9013101230373F3 +:100F6000284610F00BFF09F06FFD074B28461A6862 +:100F70001C60626010F002FF09F046FD204638BD9B +:100F800008AC0108D8060024D406002413B50C468A +:100F9000A430019009F058FDA469019809F034FDCE +:100FA000204602B0BDE81040FFF7B1BF37B50D468F +:100FB000A430019009F048FDEB696C6913F4003F1F +:100FC000019803D02B6A9C4238BF1C4609F01CFDD7 +:100FD000204603B0BDE83040FFF799BF13B50C467B +:100FE000A430019009F030FD246A019809F00CFD4D +:100FF000204602B0BDE81040FFF789BF10B5044697 +:10100000FFF7E2FE204617F0D7FB204610BD10B5D3 +:101010000446FFF737FF204617F0CEFB204610BDF1 +:1010200010B50446FFF7C4FE204617F0C5FB204666 +:1010300010BD10B50446FFF719FF204617F0BCFBA2 +:10104000204610BD37B50546A4300C46019009F086 +:10105000FBFC05F124026B6A01981BB19C420DD187 +:101060002368136009F0D0FC14B1204617F0A4FBEC +:10107000002003B0BDE83040FFF749BF1A461B68A7 +:10108000EBE700002DE9F04FE9B0054693460F4627 +:101090004422002115A8984617F0F8FBEA6D42F2A9 +:1010A00010735946073215A82393D2080DF0D6FFC6 +:1010B0000446002840F0D18105F1340108F10C000C +:1010C0000DF03CFF002840F0A38005F128014046C8 +:1010D0000DF034FFB0FA80F35B090593EB6DB3F5C7 +:1010E000C07F2CBF052204220392059A12B1039AF5 +:1010F00001320392039A934298BF0222013B02F10C +:10110000FF390392012202FA09F206929DF8182093 +:101110000492039A1344B3FBF2F30293059B13B1B9 +:101120006E6F002E5ED12421069818F053FE0646FD +:10113000002800F0958100244FF0240A0AFB046087 +:1011400001340DF0C7FE049AE3B29A42F6D8414644 +:1011500030460EF017FB044600286ED1029B8046F5 +:1011600003FB09FA4FF00109D04553D10DF198095D +:1011700000220123484603EBC30101325B0006EB6A +:101180008101DBB240F8041B04999942F3D826A9E7 +:10119000284610F041F8044600284ED14FF00108CF +:1011A00008EBC803C24606EB830352460AF1FF3A36 +:1011B000002A6BD14FEA4808049B5FFA88F8434540 +:1011C000EED824230132069991426DD14A1E284659 +:1011D00026A910F021F8044678BB059B13B1069BA5 +:1011E0006E67AB67002405F14C0801230DF124095B +:1011F000214640460E94C9F80840C9E90034CDE9BB +:101200000C340EF004F8012853D0A4F59F4414E0E8 +:10121000059463E7029BB8FBF3F009FA00F124237D +:10122000C9B203FB0162029B03FB1080E8B11146C7 +:1012300028460FF05DFB044628B315A80DF078FD95 +:10124000442115A80CF0FAFF42F2107323936B6F40 +:10125000B34202D0002E40F0128114B138460EF095 +:101260001EF9204669B0BDE8F08F49081046079284 +:1012700001EBC10106EB81010EF084FA079A0446E6 +:101280000028D4D0D9E708F101086DE724222846C8 +:10129000079302FB0AF1721819440FF06FFC079BC9 +:1012A0000446002881D0C8E703FB026149F8041B0B +:1012B00088E7214658460DF0AAFFB0FA80FA594651 +:1012C00048460EF033FA04464FEA5A1A00BB5A4613 +:1012D00041460CA80EF0E7FE0446C8B952460CA9D8 +:1012E00048460EF085F8044690B9029B0DF1980827 +:1012F000014626A85A1CA34617F0C8FA4346029A8C +:101300005A454FD14FF0000E4FF0010CE34565D226 +:101310000CA80EF0A3F809A80EF0A0F8002C8CD1B0 +:101320000CA80DF198080DF0D5FD029B3246394608 +:1013300018F8033028460093049B0EF0FBFE044689 +:1013400088B9012107F118000DF0B2FF044650B929 +:1013500015AB4D4A394628460FF060FA044610B9DD +:10136000029B002B5BD10CA80EF08BF8002C7FF4B5 +:1013700064AF5246394628460EF0B8FE04460028AF +:101380007FF45BAF15AB404A394628460FF046FA6A +:10139000044600287FF451AF394628460FF0EEFE90 +:1013A00004464AE75946002248460591CDE90632EF +:1013B0000DF02DFF079A069B9040029993F800C00C +:1013C00001324CEA00001870084605990144039860 +:1013D0009042E9D80BF1010B013390E798F8010036 +:1013E0000CF1010C98F8002080EA0E0300EA0E00D0 +:1013F000D9435BB201F0010112FB01F252B203EAE0 +:101400000209534008F8013F49EA000E18F8013C70 +:101410005FFA8EFE43EAC11108F8011C76E7029BD1 +:101420003A4639462846013B02930FF061FA90B9DB +:10143000029B32460CA9284613F808300093049BFF +:101440000EF078FE38B90CAB3A46394628460FF014 +:1014500095FB002884D0044685E700260496ECE638 +:101460000A4CEAE608FB056001350EF018F8EBB20D +:10147000049A9A42F6D8304617F09EF9EDE6002518 +:101480004FF02408F3E700BF41EE000880B2FFFFF1 +:101490002DE9F04F2DED028BBBB004460E46914670 +:1014A00008EE103A0DF040FD022840F09D814422E4 +:1014B000002129A820AD17F0E9F942F2107328465F +:1014C000012737930DF006FDE26D0023494629A858 +:1014D00007320493D208CDE902730DF0BFFD034635 +:1014E000002862D118EE101A02A80EF01FF9034668 +:1014F00000285AD118EE101A28460EF043F9034678 +:10150000002852D1394630460DF0D2FE034600285D +:101510004BD106F11807014638460DF0C9FE0346C7 +:10152000002842D104F1040B06F10C000DF096FFE7 +:10153000594628460DF002FD00282EDA29ABB34AA1 +:10154000294620460FF020F9034670BB48464FF06D +:1015500001080DF0B7FD431E0093009B01333FD1FE +:1015600029ABAA4A314620460FF00EF90346E0B9EE +:101570005A46394638460FF02DFC0346A8B93B467B +:101580003246314620460FF003F8034668B9012180 +:1015900038460DF08DFE034607E05A462946284698 +:1015A0000EF04DFA03460028C2D029A800930DF092 +:1015B000BFFB442129A80CF041FE42F2107220A882 +:1015C00037920DF05EFF02A80DF048FF009B002B44 +:1015D00000F00B8118463BB0BDEC028BBDE8F08FEC +:1015E000009948460DF013FE29465FFA80FA30460E +:1015F00052460DF0BFFE03460028D6D1524626A91A +:1016000038460DF0B7FE03460028CED13B461F906A +:10161000324605A9CDE90580CDE90708CDE90900E5 +:10162000CDE90B80CDE90D08CDE90F00CDE91180A2 +:10163000CDE91308CDE91500CDE91780CDE91908EA +:10164000CDE91B00CDE91D8020460EF0C9FD034603 +:10165000002840F0938005AB08A920461A460EF0FA +:1016600097FF0346002840F089803B4632460BA98D +:1016700020460EF0C5FD034600287FD10BAB0EA916 +:1016800020461A460EF084FF0346002876D10EABA2 +:1016900008AA11A920460EF0B3FD034600286DD11B +:1016A00026AB2A4614A920460EF09AFD03460028D0 +:1016B00064D126AB2A4617A920460EF0A1FD0346A9 +:1016C00000285BD105AB17AA1AA920460EF060FFCF +:1016D0000346002852D10BAB14AA1DA920460EF0D8 +:1016E00057FF0346002849D11DAB1AAA29462046B8 +:1016F0000EF076FD0346002840D12B462A462946A7 +:1017000020460EF045FF0346002837D11DAB1AAA2C +:1017100026A920460EF074FD034678BB26AB204672 +:101720001A4619460EF034FF034638BB26AB02AA10 +:10173000204619460EF02CFF0346F8B90EAB08AA56 +:10174000314620460EF024FF0346B8B911AB04F130 +:101750001002394620460EF01BFF034670B93B4687 +:101760000EAA394620460EF03BFD034630B93B46F3 +:1017700011AA394620460EF00BFF034605A8019337 +:101780000DF06CFE08A80DF069FE0BA80DF066FECA +:101790000EA80DF063FE11A80DF060FE14A80DF068 +:1017A0005DFE17A80DF05AFE1AA80DF057FE1DA8F1 +:1017B0000DF054FE019B002B7FF4F7AE52462946F4 +:1017C00030460DF0D7FD034600287FF4EEAE5246BA +:1017D00026A938460DF0CEFD009B013B0093034641 +:1017E00000283FF4BAAEE0E6094B204600930DF026 +:1017F0009BFB0128009B7FF4EDAE18EE103A4A46A1 +:1018000031462046FFF73EFC0346E3E641EE000882 +:1018100080B0FFFFF7B505460C461046012116467D +:101820001F460DF0CEFB30B93946204603B0BDE867 +:10183000F0400DF0A7BF4FF0FF3130460DF0C1FB77 +:10184000A0B9394620460DF09DFF10BB04F10C02F3 +:101850000146104601920DF0B4FB019AC8B1291D52 +:10186000104603B0BDE8F0400EF01DBC31462846DE +:101870000DF0DEFC68B9394628460EF0D5FE40B9B9 +:101880003B4632462146284603B0BDE8F040FFF70C +:10189000FFBD03B0F0BD30B58FB00C461946139DA7 +:1018A000FBB10023CDE906330893130F8DF82430E4 +:1018B000130D8DF82530130B12098DF826308DF895 +:1018C00027204FF48E72237802FB0300129B05AA97 +:1018D00005930AAB0430009306ABCDE901550FF038 +:1018E000E1FD0FB030BD37B50223154601AA04460D +:1018F0000FF066FD18B9019B1BB96FF0630003B0D0 +:1019000030BD236893F90030002BF6DB019B3BB11F +:1019100022681178A1B1042BEFD801D10B06ECD4C9 +:1019200000232B60019B5A1E0192002BE7D02368F5 +:10193000296813F8012B42EA01222A602360F1E7AB +:101940000132013B22600193E0E70000F8B50A2371 +:10195000684E05460C46036033681BB90FF0A2FFC2 +:101960000123336005F108032A46214604F11000E3 +:1019700042F8043F8B78043111F8034C1B0443EA0E +:10198000042311F8044C234311F8014C884243EA24 +:10199000046342F8043FEDD12B680C2B2ED00E2BA4 +:1019A0005DD00A2B28D128465349544D00F1A0069A +:1019B0004269103055F8044B50F8087CC2F30723F5 +:1019C0007C40CB5C6340140E0C5D83EA0443D4B2CC +:1019D0000C5D83EA0463C2F307440C5D83EA0423CD +:1019E00050F8044C836063400468C3606340036143 +:1019F000534043618642DBD10020F8BD28463F4C6E +:101A0000C0353D49C269183054F8046B50F8107C59 +:101A1000C2F307237E40CB5C7340160E8E5D83EAD3 +:101A20000643D6B28E5D83EA0663C2F307468E5D37 +:101A300083EA062350F80C6C8360734050F8086CFE +:101A4000C360734050F8046C0361734006684361DF +:101A5000734083615340C3618542D3D1CCE72846AC +:101A60002549264D00F1E006446A203055F8042B44 +:101A700050F8187CC4F307237A40CB5C50F8087CFC +:101A80005340220E8A5C83EA0243E2B28A5C83EA14 +:101A90000263C4F307428A5C83EA022350F8142CE1 +:101AA0008360534050F8102CC360534050F80C2C06 +:101AB00003615340DAB243618A5C7A401F0ECF5D06 +:101AC00082EA0762C3F30727C3F30743CF5DCB5C0A +:101AD00082EA072282EA034350F8042C83615340D0 +:101AE0000268C36153400362634043628642BBD1D4 +:101AF00082E700BF000700243C0400243C050024CA +:101B0000F8B5037890F801C0012B057F0279077BB7 +:101B1000866844792ED0022B2FD0002B30D14FF481 +:101B200080738B610023C1F800C04D614B63C1E934 +:101B30000B333FB3CB61CB60037C012B45D0022B31 +:101B400048D0002B4BD14FF480430B620123027E1F +:101B5000002A47D000230B620B61437F012B6AD020 +:101B6000022B6BD0002B6CD14FF0807300204B62A6 +:101B70008862F8BD4FF40073D3E74FF44073D0E7A9 +:101B80000023CEE7012A4E600BD0022A0CD072B996 +:101B90004FF48063CB61032C09D8DFE804F00B0D10 +:101BA00010134FF40063F5E74FF44063F2E7274862 +:101BB0000BF036FE0023BEE74FF48053BBE74FF433 +:101BC0000053B8E74FF44053B5E74FF400430B62BE +:101BD0000223BCE74FF440430B620423B7E7002322 +:101BE0000B62B4E77BB3427CB2FBF3F403FB142437 +:101BF00014F0FF0F27D1561EF610741C042C22DCA3 +:101C0000C2EBC40212F0FF0210D0B2FBF3F39D420C +:101C100019D3EB1A4B61436903FA02F28A60032E6F +:101C200007D82404A4F580340C6196E743698B60DF +:101C3000F5E70748BCE74FF0007397E74FF04073B4 +:101C400094E7002392E74FF0FF3092E7B4A6010833 +:101C5000DDA6010870B500F1A4060C460546304625 +:101C600008F0F2FE04F11002214605F1140006F01E +:101C700049FD38B9236963606369A3600E23A361DA +:101C80001023E3603046BDE8704008F0BDBE2DE98A +:101C9000F041064600F1A4070C46154614363846B6 +:101CA00008F0D2FE04F110022146304606F02AFD6B +:101CB000D0B9236904F12408A56163606369A36056 +:101CC0001023E360216A21F000439D4201D8E560C2 +:101CD0000AE00029A5EB030506DA42462146304614 +:101CE00006F010FD0028EDD03846BDE8F04108F0C0 +:101CF0008BBE00002DE9F04100F1A408C8B00E46EB +:101D000005464046174608F09FFE4FF484720021B6 +:101D100006A816F0BBFDB36914350E2B22D1222381 +:101D2000364908A88DF8183017F09CFB0F230124C2 +:101D3000B361404608F068FE012C0DD19DF81830C3 +:101D4000112B59D0222B14BF0023032308A9384696 +:101D500087F8003117F086FB204648B0BDE8F04117 +:101D6000FFF7D5B80F2B08D12223254908A88DF8F5 +:101D7000183017F077FB1023D9E702AA314628461E +:101D800007F094F8044618B1821C08BF0024D0E77D +:101D90009DF80C3003F07F02112A01D0222AECD1E9 +:101DA0001B060CD504A9284607F0F0F8041EC0DB7A +:101DB000E3D19DF80C3003F07F038DF80C309DF8D3 +:101DC0000C302846029A112B8DF8183002F10402CB +:101DD0009DF80E1004BF059B07939DF80D301A4423 +:101DE0009DF80F300A440093716808AB06F07DFC43 +:101DF000041E08BF01249CE70523A7E7F5A60108F8 +:101E0000F4A6010830B500F1A40585B004462846C3 +:101E10000193CDE9022108F017FE039904F11400A3 +:101E2000DDE9013206F080FE0446284608F0ECFDAC +:101E3000204605B0BDE83040FFF769B82DE9F04114 +:101E400000F1A40805460E46144640461F4608F019 +:101E5000FBFD05F11400314606F0FCFD054670B9A6 +:101E60003FB1012F336A01D11C4402E0022F0ED092 +:101E70001C46002CAABF25466FF01505346240466B +:101E800008F0C2FD2846BDE8F041FFF740B873698D +:101E9000EAE737B500F1A40504460191284608F0A9 +:101EA000D3FD019904F1140007F012FB0446284603 +:101EB00008F0AAFD204603B0BDE83040FFF727B880 +:101EC000F8B500F1A40705460C46384608F0BCFDFD +:101ED000214605F1140007F0FBFA05F12002064641 +:101EE0002B6A1BB19C4216D123681360A3690BB106 +:101EF0001B682BB96B695B6B13B9606B16F05CFCEC +:101F0000384608F081FD204616F056FC3046BDE804 +:101F1000F840FEF7FCBF1A461B68E2E730B500F157 +:101F2000A40585B0044628460193CDE9022108F0B6 +:101F30008BFD039904F11400DDE9013206F027FF5F +:101F40000446284608F060FD204605B0BDE8304054 +:101F5000FEF7DDBF2DE9F341064614460021282295 +:101F600006F1A4072046002516F090FC384606F13D +:101F70001408019508F068FD06F1180006F0ABFBA7 +:101F800028B901AA0D49404606F022FC054638460C +:101F900008F03AFD6DB9736F019AC4E90033B36F6D +:101FA000C4E902359B1AC4E90435C4E90635FF23A8 +:101FB0006362284602B0BDE8F08100BF990E0008B8 +:101FC0002DE9F041804600F1A406D4B00C4608F19A +:101FD00014073046154608F037FD02AB03AA07A9DF +:101FE0003846029407F0AEFA0446C0B901464FF4F1 +:101FF000847212A816F04AFC9DF8103008F11801FE +:1020000005A8112B8DF8483004BF069B139306F0EA +:1020100051FB0446C0B9174914A817F023FA3046FB +:1020200008F0F2FC139B2B619DF84830112B1DD05A +:10203000222B44F2FF1318BF002320466B6054B0DC +:10204000BDE8F041FEF763BF039B38469DF81110D1 +:1020500004339DF8122019449DF813300A4400936C +:10206000089914AB06F041FB0446D8E748F2FF1389 +:10207000E3E700BFF7A60108F0B500F1A4060546A6 +:102080009FB00C46304605F1140708F0DDFC95F8CA +:1020900054300394002B43D003AB04AA08A938465C +:1020A00007F050FA831C044649D12F21039818F0F9 +:1020B00013F800283AD16B6913A938461B6AEB6400 +:1020C00007F0F0FA0446002830D1119B024613A90C +:1020D0001C93129B1D930346384607F020F80446D4 +:1020E00020BB40F622038DF81600ADF81430039B98 +:1020F0001846019317F0BEF91499159A8DF8170038 +:10210000384606910792019BCDE9111204AA08A94D +:1021100007F0F4FA044648B96B691B6AEB6405E002 +:10212000384606F06BFF04460028B5D0304608F06C +:102130006BFC20461FB0BDE8F040FEF7E8BE00286B +:1021400008BF6FF01004F1E7F0B500F1A4050446F4 +:102150009DB00F46284604F1140608F075FC94F86B +:102160005430019783B101AB02AA06A9304607F0AB +:10217000E9F9044678B1284608F046FC20461DB02F +:10218000BDE8F040FEF7C3BE304606F037FF044618 +:102190000028E8D0EFE79DF80C30222B1ED002AAD1 +:1021A00006A9304607F007F904460028E3D19DF858 +:1021B0000C30222BDFD106AA12A9304606F04BFEC6 +:1021C000041ED8DB1A9B06A930460F931B9B109365 +:1021D00000231A4606F0A3FF0446CCE704AA11A97F +:1021E000304606F08FFA04460028C4D1199B142B00 +:1021F000D5D06FF02604BEE72DE9F04300F1A40529 +:102200008046B3B00F462846144608F01DFC98F8E7 +:10221000543008F11406CDE90274002B4DD0029B16 +:1022200005AA11A93046049304AB07F08BF90446C4 +:10223000002848D19DF8183005AA11A963F07F0342 +:102240008DF818300346304607F029F90446002877 +:1022500039D10DF1240903AB1CA930464A4607F0D9 +:1022600071F90746002837D0821C40F085802F2165 +:10227000039817F031FF00287ED10DAC99E80F00CC +:1022800084E80F0006AA0EAB07CA83E807009DF892 +:10229000383003F07F038DF83830039B18460193E4 +:1022A00017F0E8F8BB1C8DF83B00019B2CD12246AF +:1022B0001CA9304607F022FA2BE0304606F09EFEBD +:1022C00004460028ABD0284608F09EFB204633B0D9 +:1022D000BDE8F043FEF71BBE9DF818309DF828209E +:1022E00003F07F039A4249D1222AC6D10BAA27A91B +:1022F000304606F007FA04460028E4D12F9B142B41 +:10230000BBD06FF02604DEE722461CA9304607F05A +:10231000C6F804460028D6D1012305AA11A93046E3 +:1023200088F8553002AB07F00DF904460028CAD1F1 +:1023300088F85500814605AA11A9304607F03BF8F8 +:1023400004460028BFD10237BDD09DF82830222B8B +:10235000B9D11CAA28A9304606F07DFD041EB2DBC7 +:10236000309B4A461CA930462593319B26934B4609 +:1023700006F0D5FE0446A6E73C46A4E76FF0140439 +:10238000A1E700002DE9F04F00F1A4080646C3B014 +:102390000D46404608F058FBD6F8903063B1002D4A +:1023A00008BF1D46336830469B6A9847044668B1AB +:1023B000404608F029FB05E045B96FF0120440469D +:1023C00008F022FB204643B0BDE8F08F2B6828467A +:1023D0009B68D6E925BAD6E927979847044600288E +:1023E000E6D12422014628A816F050FA6A4B284666 +:1023F00023952493694B2593694B2693694B279327 +:102400002B685B6A98472B6858452CBF2890CDF8FD +:10241000A0B028469B6A98472B6850452CBF29904E +:10242000CDF8A4A02846DB6A98472B6848452CBF06 +:102430002A90CDF8A89028469B6B984723462A9A65 +:1024400018F000F92B901F3023A920F01F00B8428C +:1024500094BF2C902C9731A806F0F1F80446002880 +:1024600040F08680319B014640985A6AD20816F0A7 +:102470000DFA319A0DA931A83C94D2E90832CDE980 +:102480003E439A4294BF3D923D9307F00BF90446B8 +:10249000002869D118A931A807F004F904460028DA +:1024A00062D10346024618A931A806F038FE044658 +:1024B000002859D141F22E438DF816001A9F4FF093 +:1024C0001009ADF814300823DDF864C08DF817301A +:1024D000319B3397DA691B6A089209934FF0011315 +:1024E000314A0A930BAB106851686A46CDF8C8C0F0 +:1024F000CDF81090CDF8009003C334230DA931A876 +:1025000015932023CDE906C7CDE916C705AF019382 +:10251000CDE90273012306F002FE4B4620B110F113 +:10252000340F02D004461FE00124009320236A46A2 +:102530000DA9039331A8CDE90137012306F0EFFD82 +:1025400020B110F1340FEDD1002CEBD0002201238B +:102550000DA931A8CDE900236A4606F0D3F8044658 +:1025600010B9319B1B6A3F9331A806F051F86CB14A +:102570002046FEF7CCFC044600287FF419AF3368F0 +:10258000294630465B6A9847044611E72B6828467F +:10259000DB689847EFE700BFA30E0008C70E0008EE +:1025A000EB0E0008070F0008F9A6010870B500F14E +:1025B000A4060546304608F047FAD5F8904064B1C5 +:1025C00005F1140006F024F8D5F890000368DB68E4 +:1025D000984700230446C5F89030304608F014FAB6 +:1025E000204670BD2DE9F04300F1A4070D460446D6 +:1025F00099B0384608F028FAC4F890502B6828465D +:102600009B689847064648B10023C4F89030384686 +:1026100008F0FAF9304619B0BDE8F08324220146EB +:1026200004F16C0004F1580916F030F9404BA5652F +:102630002846E36504F114083E4B23663E4B63666F +:102640003E4BA3662B685B6A9847D4F8943083426C +:102650002CBFE366E06628462B689B6A9847D4F84F +:10266000983083422CBF2367206728462B68DB6A9B +:102670009847D4F89C3083422CBF63676067284634 +:102680002B689B6B9847626F334617F0DBFFA067A0 +:102690001F30D4F8A030494620F01F00834294BF79 +:1026A000E367E067404605F0CAFF0546002833D1DE +:1026B000636902AA0DA940461B6AA664E36401236C +:1026C00002960393C4E9106606F01CF8054600BBA9 +:1026D000202310220E994046009305AB06F005F822 +:1026E0000546B0B9069B082215490BA8A361079BB4 +:1026F000E36117F025FC064648B90A9B1A0C012A2B +:1027000002D19BB2012B82D96FF0150501E06FF069 +:102710003305404605F07CFF00233846C4F890306E +:1027200008F072F9284619B0BDE8F043FEF7EFBB98 +:10273000A30E0008C70E0008EB0E0008070F0008E4 +:10274000F9A601080C4B03F10802883310B50446C2 +:1027500002604360FFF72AFFD4F8A40012F086FB62 +:10276000064B204603F108023433226040F8043F50 +:102770000FF0FCFB204610BD64AA0108FCA901086B +:10278000A0F10400FFF7DEBF10B50446FFF7DAFF43 +:10279000204616F011F8204610BDA0F10400FFF706 +:1027A000F3BF0000F0B57D4D85B015F0D5F97C4B39 +:1027B000002128607B4800247B4A83F820401A606F +:1027C0005C62C3E904014FF4F0100021C3E9014445 +:1027D000C3E9060113F058FE68B9744C23781BB99D +:1027E00014F0A2FE01232370714B93F82520002AD8 +:1027F00000F0B8805C6B6F4B14202A68C3E9012499 +:102800000AF0D4FD4FF6FF71831E00F1120223F887 +:10281000021F9342FBD1684B0025684C00261860CC +:10282000002767480BF080FC8C21664803F07AF99A +:102830009D21654803F076F94321644803F072F95D +:102840006348644BA0612360C4E90267C4E904558E +:102850000BF0F6FA0AF01CFE5F4A604B1A600AF0B1 +:1028600003FE0123656384F838305D4BC4E90867D3 +:10287000236013F023FE5B4B5B4C186015F06CF982 +:102880005A4B256118605A4B236004F144030293AC +:102890001023CDE900550393EFF30583002B63D09C +:1028A0000020544B0025544E00931C23206468469E +:1028B00003930B2365670193029612F01BFB4422DE +:1028C0006065294606F1200015F0E0FF0123202273 +:1028D0002946A387A6F13C00656115F0D7FF4FF4A8 +:1028E000805328214FF4D060C4E90B31434BA361DE +:1028F000434CA56515F058FF064670B3C21C22F084 +:102900000302131A2846E260C3F5D06323F00303E1 +:102910001946C4E904556F1C002931D100B1256165 +:1029200000252262C4E9065325600BF05DFB0FF021 +:1029300067F8344B60600093334B2581029310237A +:10294000A57284F8245001950393C4E90A55EFF366 +:102950000583CBB10020206366612C480BF0E4FBBB +:1029600005B0F0BD9C6B46E711F06AFE01460028F9 +:1029700096D14FF6FF706A46DFF894C000DF90E70B +:1029800049083D460120C6E711F05AFE0028E1D172 +:102990006846DFF880C000DFDDE700BF480B022497 +:1029A000A80600240000020808A90108A0060024C7 +:1029B000B005002400000024D0060024B00B02243F +:1029C00060060024740B0224280B02240407002450 +:1029D000A4AC01085CA9010871CB0008F00A02242C +:1029E0007CAB0108700B022480130224E80A022445 +:1029F00018AC010802A70108D81302241CA701087B +:102A00002413022437A701085813022420060024A7 +:102A10005D3201081D34010808B57246064B0125D8 +:102A2000D3E84F4FC3E8465FE4B2002EF8D10CB9AB +:102A30000AF08CFD0AF0D4FE440B02240B4B10B5B7 +:102A4000044640F8043BFEF781FA094B002104F1EB +:102A5000140003F10802943322603822636015F0F9 +:102A600015FF4FF0FF332046236510BD40AA010833 +:102A700060A90108144B10B5044640F8043BFEF76A +:102A800065FA124B002104F1140003F108028833A7 +:102A900022604422636015F0F9FE0021382204F11F +:102AA000580015F0F3FE0022402304F1A400C4E90D +:102AB0002423C4F898304FF40073C4E9273308F096 +:102AC000B7F9204610BD00BF40AA010864AA01085A +:102AD00010B50446802112F0B4FA00212046BDE86A +:102AE000104012F0AEBA08B5026500220B4600F1A4 +:102AF0003C0142654FF48072836482870269012A37 +:102B0000D2B208BFC3640068FDF702FF002008BD11 +:102B100008B5C0F8102200220B4600F5FE71C0F87F +:102B20001422A0F8FC210269C0F80832012AD2B2AE +:102B300008BFC0F80C320068FDF7EAFE002008BDAF +:102B40000F4B00F16040DB6800F56140C3F30223E6 +:102B500010B5C3F107041A1D042C28BF0424062A4B +:102B60004FF0FF328CBF033B0023A24021EA020159 +:102B700001FA03F31B01DBB280F8003310BD00BF84 +:102B800000ED00E02DE9F04F4FF00A0C0024012584 +:102B900003260F274FF0020E0A6832FA04F301D120 +:102BA000BDE8F08F05FA04F313422FD04FEA440832 +:102BB000826806FA08F922EA090ACA6802FA08F2E3 +:102BC00042EA0A024FEAD40A826000EB8A0A4268AB +:102BD00022EA03034360C36823EA0903C36004F0E5 +:102BE0000703DAF820209B0007FA03FB22EA0B0B0D +:102BF0000CFA03F242EA0B02CAF82020036823EA27 +:102C000009090EFA08F343EA090303600134C3E734 +:102C10000D4B19884FF6FD734A1E92B29A4297BF28 +:102C20000A4B4FF0026303EA812303F100638342FE +:102C300007D9B0F1006F34BF4FF0FF304FF40030D0 +:102C400070474FF0FF30704780E8F11F00FC3F00F5 +:102C5000064B4FF6FD711A88531E9BB28B429ABFEA +:102C6000034800EA82204FF40010704780E8F11F0B +:102C700000FC3F0038B50C460546012120460CF00B +:102C800075FA28B921462846BDE838400DF09FB9AD +:102C900038BD000070B505460E4609B9114870BD33 +:102CA0000028FBD000240160C0E901440B79053BFA +:102CB000012BF3D86C21012017F08CF8686060B10B +:102CC0006C22214615F0E2FDB179022017F082F85E +:102CD000A86020B928460CF02BF80348DFE720460F +:102CE000DDE700BF00AFFFFF80AEFFFF38B50D4648 +:102CF00006490446FFF7CEFF30B929462046202278 +:102D0000BDE838400BF0B4BF38BD00BF9CAC010833 +:102D1000034653E8000F013843E80002002AF8D1C7 +:102D2000704770B5056BE0B00446B5F5C07F1DD89F +:102D30004FF4C0720021684615F0A8FDE36B2A46E7 +:102D40006946206C9847A0B9266B694620463246F2 +:102D50000CF011F8054608B90123E3621EB13146B3 +:102D600068460BF06BFA284660B070BD6FF0040542 +:102D7000F9E76FF00805F6E7074B5A6890235343CD +:102D8000064AD358DA69120701D508221A62D869AF +:102D9000C0F34010704700BF900B0224F40C0224D3 +:102DA00010B586B004466846039180E80C0006A87A +:102DB00000E90C0010E90700034B84E807002046F7 +:102DC000E36006B010BD00BFDB78000870B50023DB +:102DD00085680446066803619DB93378022B01D9E2 +:102DE000B36A6BB933890BB9022070BDB36AA361B2 +:102DF000A3696561002BF7D0736B0020E361F4E7F2 +:102E00001D467389B2895A430CD12946206806F0C1 +:102E10002CFD431C05460BD00128E5D9B369984227 +:102E2000F3D3E1E72946304606F0D5FCA061DFE7A1 +:102E30000120DAE738B5044605680420A169F9B134 +:102E4000284606F0FAFCC0B9E3691A78DAB1DB7AF1 +:102E5000E52A03F03F03A37109D02E2A07D00F2BD8 +:102E600005D023F02003082B01D0002038BD00211D +:102E7000204607F00BFB0028E0D00023A361F5E714 +:102E80000028F2D0F9E70420F7E72DE9F04F87B0EA +:102E900006468B4617464FF001090DF1170ADDE98A +:102EA00010452544A3EB0408AC4201D1012011E0F8 +:102EB00008EB040300225946304600933B46CDE917 +:102EC00001A905F0D3FA28B914F8013B9DF81720A1 +:102ED0009A42E9D007B0BDE8F08F2DE9F04F89B0F4 +:102EE00006468846DDF84C9005924BB94FF0FF320C +:102EF000C9F80020149A0020136009B0BDE8F08FD3 +:102F0000013B07A900684FF0040A079305F0E6F9B2 +:102F100012A9054630680DF1140B05F0DFF90746DC +:102F2000AF42059B03D3C9F80030129BE2E7EC1BCC +:102F300095FAA5F241463046B4FA84F4B2FA82F228 +:102F4000C4F11F04944228BF1446A200CDE901BA7F +:102F50000092002205F08AFA0028CED1012303FA5C +:102F600004F42D1BDCE72DE9F04700F1A4060D4623 +:102F7000814686B03046904607F066FDEA6909F161 +:102F8000140902F00303012B5AD092036B6903D595 +:102F90002A6A934238BF1346984524D229464846A8 +:102FA00005F058FD0446A8B905AB059005F12C01C4 +:102FB0004846029305F11003CDE90083D5E90423C7 +:102FC000FFF78BFF044628B9EB69C5F8148043F47A +:102FD0008033EB61304607F017FD204606B0BDE8B0 +:102FE000F047FDF794BF2ED92F6ABB4209D029467E +:102FF000484605F02FFD041E15D16B69002B24DB1C +:103000002B624FF0000A2B6A98450ED82946484695 +:1030100005F020FD20B9381EB4BF6FF015002862FE +:1030200000EAE074D6E7D5DBEBE7012305AA2946E1 +:1030300048468DF814A005F077FD041EE3DAC9E7D1 +:103040006FF00804C6E70024C4E76FF01504C1E779 +:10305000184B2DE9F74353F8206000230C46174620 +:103060001D4698460B6033683046D3F83C905B6A47 +:1030700098472A464346CDE900013046C847A8B1E3 +:1030800023682A46304647F833503368196B434665 +:10309000884723682D1807EBC30348EB01085860E5 +:1030A00021680131B1F5707F2160DCD3002003B0CD +:1030B000BDE8F0830000002408B5044B027853F803 +:1030C000220003689B6A9847C0B208BD0000002434 +:1030D0002DE9F0431D4689B006460F466C1E90460A +:1030E000FFF7EAFF044440420440E4B2202C1AD81F +:1030F0003046FDF741FB81462A464146684615F0B9 +:10310000B7FB621B49460DEB050015F0BFFB2346DC +:103110006A4639463046FDF73BFB003818BF0120B0 +:1031200009B0BDE8F0834FF0FF30F9E707B58DF83F +:103130000710012381680DF107028039FFF7C8FFEE +:1031400003B05DF804FB07B58168012301AA40398B +:103150008DF80430FFF7BCFF03B05DF804FB0000FE +:1031600013B5064B007853F8200000230468CDE91E +:1031700000230A46E469A04702B010BD0000002405 +:103180002DE9F843037807460BB1012B20D1114AF2 +:103190002C214FF434664FF0000801FB0323926E9C +:1031A0009D6A56431C46013DE036636A384603EB90 +:1031B000C50253F835101B68013DD2F80490C91AB6 +:1031C000C8444A46FFF7CCFFB045EED3BDE8F883CC +:1031D0000120FBE7200700242DE9F04385B01E46BF +:1031E0001B4B4FF000080392074602780D4653F838 +:1031F00022400A4623682046CDE90068D3F83C9077 +:103200004346C847039958B9124B1B782BB1334634 +:103210002A463978104807F031FE4FF0FF3413E0AA +:10322000236820462A46CDE90068D3F81490434627 +:10323000C847044640B1074B1B782BB133462A469A +:103240003978064807F01AFE204605B0BDE8F0833D +:1032500000000024E40A02243EA701086DA701082B +:103260002DE9F7430446174699460E4629B94FF013 +:10327000FF38404603B0BDE8F083002AF7D00B6961 +:1032800038468D681D44042329460DEB0302FFF7E1 +:10329000A3FF80460028EAD1BDF8041046F60812C4 +:1032A000F368914222D1BDF806109942DFD1042380 +:1032B000294438460DEB0302FFF78EFF0028D6D1D4 +:1032C000BDF8042046F607139A42D0D10023BDF87A +:1032D0000620A4F80890A372F3682B440435E36039 +:1032E000134425616361C4E90067C2E7002BE7D09E +:1032F000BDE700002DE9F04FDFF830B10746884602 +:103300000026DFF820910BF16C0A2DED028B85B0C1 +:10331000CDE90223109BB34201D8002011E0109B9D +:103320003846404A9D1B029BB5F5003F06EB03045F +:1033300028BF4FF4003521462B46FFF74DFF28B13B +:10334000012005B0BDEC028BBDE8F08F3B78022B6D +:10335000039B334408EE103A48D19BF8A432002B6B +:103360003CD198F80030012B25D1039C5846436985 +:1033700013F00C0F1FD0344481688C4205EB040E0F +:1033800049D28E4517D9AEEB0103A1EB040C002204 +:1033900000690844864503D9844234BF031B0023D7 +:1033A000641A09EB0C015046CDE9002104EB0C0234 +:1033B0003946FEF770FA98F80030022B1DD19BF8C1 +:1033C000A432D3B1002318EE102A41465046009390 +:1033D0002B46CDF80490FEF75EFA0EE0CDE9000929 +:1033E0002B46224639465046FEF755FA3B78012BCC +:1033F000B7D198F80030012B0AD12B464A4618EE77 +:10340000101A4046FDF7C4F9002899D12E4481E7EF +:10341000029C0548ABE7621A2B464FF0000C02F005 +:103420000F02B5E7E40A00244C070024200700241B +:103430002DE9F74304460F4690461E464FF6FF79A6 +:10344000D4E904239A4215D22368DB6823B1E368E8 +:10345000934204BF043323610423216960680DEBA8 +:103460000302FFF7B9FE18BBA37A256933B1E368FD +:10347000AB4203D8012003B0BDE8F0832189BDF839 +:103480000630494503F1040203D0BDF804C08C4561 +:103490000BD116B1BDF80410318004353D60A8F899 +:1034A0000030236913442361E5E715442561C7E72C +:1034B0004FF0FF30DFE700002DE9F04FADF5557D0F +:1034C00017780D46144604934FF48E737B43C65C05 +:1034D00000EB030C002E40F00F824FF48C7231464B +:1034E0000CF1040015F0D2F932232246294611A826 +:1034F000FFF7B6FE10B14FF0FF3009E1119B002B32 +:10350000F9D0129B002BF6D033460DF11A0207A911 +:1035100011A8FFF78DFF002840F0FA80BDF81A309F +:10352000712BE8D143AA07992046FFF755FE0028E2 +:10353000E1D1A64C30232FAA08A808948A3421464A +:103540000DF03EFF0028D6D108992F9B1944A142C7 +:1035500040F0FA8037AA08A83796FEF7C4F9379BDF +:10356000034340F0EE808EAB60AA214608A80DF020 +:103570003BFF002840F0E280619A072A40F0DB80A0 +:103580009349629816F0DCFC002840F0D4808F9AB2 +:10359000082A40F0CD808F49909816F0D1FC002881 +:1035A00040F0C68004232FAA214608A80DF008FF8A +:1035B000002840F0BA8030232FAA214608A80DF039 +:1035C000FFFE002840F0AE80379037AA214608A8B9 +:1035D000FEF789F9002840F0A280379B012B40F0CC +:1035E0009E8004232FAA214608A80DF0E9FE00289A +:1035F00040F09280DDF8BC80B8F1200F40F086806A +:10360000089B1FAC03F120051868083353F8041C0D +:103610002246AB4203C21446F6D10023012260A821 +:10362000CDE98823CDE98A32CDE98C330BF05EFCFD +:103630007FA80BF04FFC60A80BF035FF60A80BF0E3 +:1036400055FC032360A88DF880310BF057FD28B19D +:1036500060A80BF028FF7FA80BF013FF412343AABB +:103660007FA960A80BF0BCFF002870D060A84FF0C5 +:10367000FF340BF018FF7FA80BF003FF8BA80BF0B3 +:10368000EDFE88A80BF0EAFE60A80BF00CFF7FA807 +:103690000BF0F7FE002C7FF42EAF0DF19C092146B4 +:1036A00020220F944846CDE90D4415F0EFF8494625 +:1036B0000DA8FFF71BFB28BB202217A90DA80BF0B4 +:1036C000C7FAF8B92FA90DA80BF098FAD0B90123C1 +:1036D0003025A246DFF804B18DF828302FA90DA8B7 +:1036E0000593CDF83CA0CDE90DAAFFF7FFFA48B944 +:1036F000059B002B62D0102259460DA80BF0A8FAAA +:1037000000286DD00DA80BF013FBF4E66FF00B0052 +:103710000DF5557DBDE8F08F6FF00A00F8E76FF00A +:103720000900F5E76FF00800F2E76FF00700EFE738 +:103730006FF00600ECE76FF00500E9E76FF00400BA +:10374000E6E76FF00200E3E76FF00100E0E77FA932 +:1037500060A80CF069FF002888D120221FA98BA83F +:103760000BF008FF8EA80BF0B5FB8BA960A80BF03F +:103770005FFD0446B8B97FA960A80CF055FF044668 +:1037800088B97FAB8BAA8EA960A8FDF781FE04469D +:1037900048B9014694A80BF014FC68B18EA988A81A +:1037A0000BF0C4FF04468EA80BF06BFE202217A975 +:1037B00088A80BF01BFC61E7074CF4E720228EA9D8 +:1037C0000DA80BF045FA002895D09BE700040008EF +:1037D00030AC010840AC010880B0FFFF9BA7010896 +:1037E00001220AA90DA80BF033FA00288AD18EA96C +:1037F0000DA80BF003FA0346002883D137AA202D29 +:1038000002EB040028D90DF50E7C03460DF5167E5B +:103810006246083303CA724543F8080C43F8041C97 +:103820009446F5D1203DADB29DF8283020340133C7 +:10383000A4B28DF828300023002D7FF44FAF0DA8DF +:103840000BF076FA3BA90AA80C95CDE90A55FFF7CB +:103850004DFA48B10AA856E72A468EA9059315F0F5 +:1038600007F8059B1D46DFE70DF26D1410220AA82C +:1038700021460BF0EDF90028ECD12FA90AA80BF096 +:10388000BDF90028E6D12FAB53A913F8012BB8F1ED +:10389000010811F8010F82EA000246EA0206F4D19B +:1038A000002ED7D10AA80BF043FA31464FF48C72A0 +:1038B0008EA814F0EBFF37A98EA8FEF747F8002872 +:1038C0007FF419AE102531460DA82A4614F0DEFF0C +:1038D000049B09AA294605FB07378EA80DABCDF836 +:1038E00000900C370996CDE901470DF0DBFD00385B +:1038F00018BF012040420BE7012009E72DE9F04FF6 +:103900001378ADF50F7D82460D46012B93460DD100 +:103910004B6913F00C0F09D090F81C3133B94FF0FC +:10392000FF3108460DF50F7DBDE8F08F40220021E4 +:103930006DA8DFF8A88214F0A9FFA14AA14B0024CA +:10394000AF682E69DFF898923E44DFF898E2DFF81E +:1039500098C29D489D497D94CDE96B23EB68F3188F +:10396000CDE96598CDE90239CDE9048E954BDFF8B4 +:1039700064820A93CDE96344CDE967ECCDE969013E +:10398000CDE906C0CDE90812029BA34242D829A97D +:1039900063A80BF039F829464FF6FF735A4623A85F +:1039A000FFF75EFC01460028BBD14FF0FF35884E83 +:1039B0000746DFF838922C4606F15B08239B002B64 +:1039C000ADD0249B002BAAD00DA90DF132030CAA77 +:1039D00023A8FFF72DFD011EA3DB40F05682BDF8A2 +:1039E0003230102B59D1BDF83070202F97D10D995E +:1039F0003B4643AA5846FFF7EFFB0146002890D10B +:103A000043A93A4629A816F09BFA0146002888D116 +:103A10000127D3E7029BA3EB0409B9F5807F28BFF8 +:103A20004FF48079A74205D904EB09039F4238BFC0 +:103A3000A7EB0409A64205D904EB09039E4238BF4F +:103A4000A6EB040921464B46624A5846FFF7C4FBE1 +:103A5000014600287FF465AF9BF80030012B12D19E +:103A60006B6913F00C0F0ED0A7420CD8A6420AD9EE +:103A7000E21B59465046CDF8048002F00F03009334 +:103A80004B46FDF708FFB9F1000F04D04A46414606 +:103A900063A80AF053FF4C4476E7012B3DD1BDF8F3 +:103AA0003030202B3FF63BAF0D9943AA5846FFF725 +:103AB00093FB014600287FF434AF9DF83050202D51 +:103AC0007BD8402202906DA814F0E0FE039B02997F +:103AD0005B22659363A8049B7D916693059B679326 +:103AE000069B6893079B6993089B6A93099B6B935A +:103AF0000A9BCDE9631131466C930AF01FFF3AA986 +:103B000063A80AF081FF2A4643A93AA816F018FADA +:103B1000003818BF0120454250E7222B7FF44EAFFA +:103B2000002D7FF44BAFBDF83030802B3FF6F7AE61 +:103B300043AC0D9958462246FFF74EFB014600283C +:103B40007FF4EFAE302331AA41460EA8BDF830A075 +:103B50000E960DF035FC70BB319B3AAA0E9D0EA857 +:103B60001D4463AB29460DF03FFC20BB3B9A072A5E +:103B700021D149463C9816F0E3F9E0B9649A082A45 +:103B800019D11549659816F0DBF9A0B9032331AABC +:103B900029460EA80DF014FC68B9319A5AB1511E8D +:103BA0000E9B3191187830B9581C13449D420E90E9 +:103BB00001D141291CD04FF0FF344FF0FF35FDE615 +:103BC000ABD9831F19CDE05B7F520E518C68059BEA +:103BD00000030008F00B022449AC010885AE67BB66 +:103BE00067E6096A72F36E3C3AF54FA538AC0108F6 +:103BF00063A801250BF07AF9002385A88493CDE909 +:103C000082530BF067F90E99A24B63A80B915B1AD4 +:103C100002930BF048FC63A80BF068F9032263A839 +:103C20008DF88C210BF06AFA029B0B9958B14FF07A +:103C3000FF3463A80BF037FC82A80BF00FFC85A8BB +:103C40000BF01FFCB9E70A4663A885A90BF0C8FC76 +:103C50000028ECD185A963A80CF0E6FC0028E6D189 +:103C6000A244302310AA0F945146CDE91150CDE95A +:103C70001305CDE915000FA80DF0A2FB60B1A0F56A +:103C80009F4411A80BF0EAFB14A80BF0E7FB201EE1 +:103C900018BF01204442CCE7DDE90F3213449A45B6 +:103CA00040F0F18011AA51460FA80DF0E8FB044640 +:103CB00030B914AA51460FA80DF0E1FB044610B12B +:103CC000A4F59F44DDE731A80BF004F99DF88C3191 +:103CD000092BCDE91754CDE91945CDE91B44CDE9B0 +:103CE0001D54CDE91F45CDE9214401D16A4CC8E7F7 +:103CF000789B002BFAD0012111A80BF062F9002863 +:103D000017DA664C31A80BF0BCFB17A80BF0A6FB2A +:103D10001AA80BF0A3FB1DA80BF0A0FB20A80BF02A +:103D20009DFB002CADD10F9A5D4B924518BF1C46F0 +:103D3000A7E776A911A80BF001F90028E1DA012123 +:103D400014A80BF03EF90028DBDB76A914A80BF0D1 +:103D5000F5F80028D5DA7A9D29A917A80735ED08C6 +:103D6000202D28BF20252A460BF004FC04460028FD +:103D7000C8D17A9BE900B3EBC50F3DD376A917A84C +:103D80000BF0DCF8002807DB17A976AA08460CF030 +:103D90008AF904460028B5D176AA14A91AA80DF00C +:103DA00019F804460028ADD11AAA17A91DA80BF0CE +:103DB000FFFC04460028A5D11DA976AA08460CF0F0 +:103DC0003CFA044600289DD11AAA11A920A80BF09C +:103DD000EFFC0446002895D120A976AA08460CF0ED +:103DE0002CFA044600288DD163A80BF09DF8012819 +:103DF0000AD0A4F59D4485E7C91A17A80BF080FAEC +:103E000004460028BAD07DE73AA80BF063F86DAB02 +:103E10001DAA3AA963A8FDF7FDFC0446A0B985AB2D +:103E200020AA31A963A8FDF7F5FC044660B931ABBF +:103E30003AAA63A819460CF0A1FE044620B931A99C +:103E400063A80DF09BF904463AA80BF01AFB002C6E +:103E50007FF458AF214637A80BF0B3F800283FF4A1 +:103E600050AF31A976AA08460CF0E7F904460028BD +:103E70007FF448AF11A931A80BF060F80446002880 +:103E80003FF440AF3DE7074CFBE6002F14BF21464F +:103E9000012146E55B03000880B0FFFF00B2FFFF91 +:103EA00000B4FFFF1AB0FFFF0278074951F8223033 +:103EB0004BB1013B41F822302BB9044B53F822009F +:103EC0000368DB6818477047F005002400000024F1 +:103ED000224B00EB4002012803EB82022DE9F04166 +:103EE00004460A6025D0022826D048BB1C4A5A60E6 +:103EF0001C4F002557F82420013247F824200C22BB +:103F0000624303EB02089C54174B88F8015053F8A6 +:103F10002460336830469B6B984757F82430C8F8C4 +:103F20000800012B17D1336830469B68BDE8F0418B +:103F3000184700221A61DBE74FF01062DA61D7E719 +:103F40000A4B1B781BB10146094806F097FF4FF05A +:103F5000FF30BDE8F0812846FBE700BFFC050024E8 +:103F600000000208F005002400000024E40A0224F6 +:103F7000ACA7010873B5044601A9C0B2FFF7A8FFBA +:103F8000054620B14FF0FF35284602B070BD0198BC +:103F9000FCF7F2FB06460198FFF786FF2C23064844 +:103FA00003FB0404631E0334A342EDD013F8012F76 +:103FB000B242F9D0E6E700BF2007002413B5002085 +:103FC00001A9FFF785FF014610BB2023134A019882 +:103FD000FFF702F9041E18BF01240198FFF764FFE0 +:103FE000D4B901A90120FFF773FF98B92146202316 +:103FF0000B4A0198FFF7F0F8041E18BF012401983E +:10400000FFF752FF0CB184F00104204602B010BD4E +:104010000124E2E70124F2E70024F4E7200700246A +:104020004C07002413B5002001A9FFF751FF90B9F8 +:10403000019801236A4681688DF80030403921F0EB +:104040001F012039FFF744F804460198FFF72CFFC1 +:10405000204602B010BD0124FAE70000F7B504467F +:104060000F46C0B26946FFF733FF30B10125009813 +:10407000FFF71AFF284603B0F0BD1B482C2303FBB3 +:10408000040400982369A6681E44042331460DEBFE +:104090000302FFF7A1F805460028E7D1BDF8042088 +:1040A00046F60813E4689A421AD1BDF806309C42DD +:1040B00001D00325DBE70423311900980DEB03023F +:1040C000FFF78AF80028D1D1BDF8042046F607137F +:1040D0009A42EED1BDF80630234433443B60C6E734 +:1040E000002CF1D0E5E700BF200700242DE9F041C6 +:1040F00086B002230546002601AFDFF85880ADF8F0 +:104100000430294617F8010BFFF7E2FE044658B9C0 +:104110002868102302AA81682039FFF75DF8044659 +:1041200040B12868FFF7C0FE204606B0BDE8F08128 +:104130000126E6E71022414602A815F001FF0446D9 +:104140000028F1D02868FFF7AFFE002EF0D04FF026 +:10415000FF34E9E720AC010838B54FF48E7405460A +:104160004C4302EB011120440C310430FDF7EEFB0F +:104170000028034613BF0022012203464FF0FF33FD +:104180002A55184638BD00002DE9F74304460F466E +:10419000C0B201A9FFF79CFE002863D12046FFF7BB +:1041A000E9FE30B1314E2C2505FB04656B69DA065A +:1041B0000DD50CB9012503E025460198FEF7E0FF77 +:1041C0000198FFF771FE284603B0BDE8F083DDF8E3 +:1041D000048098F80090B9F1010F2AD024482946AC +:1041E0004246FFF78BFB05462C2301986343F158A9 +:1041F000F218204B99420AD113699268D1438B423D +:1042000005D813448268934201D2002DD8D01CB146 +:1042100082680021FEF7A4FF174B1B78002BC9D042 +:10422000164B17491748002C18BF194606F026FEF2 +:10423000C0E713F00C0FD1D03B464246294606F1A9 +:104240006C00FFF739F9002802DA4FF0FF35CBE7B1 +:10425000C4D13A46494606F16C00FFF77DFF0028BD +:10426000BCD0F2E74FF0FF35ADE700BF20070024D8 +:104270008C0700243DB8F396E40A0224D6A701086F +:10428000CEA70108E0A7010838B50C461546FCF793 +:1042900073FA2544214611F8013B984203D1A94203 +:1042A000F9D1012038BD0020FCE738B50C460123C8 +:1042B000114605462246FEF78FFF002810DB4CB161 +:1042C000012221462846FFF7DFFF18B10323002013 +:1042D000237038BD2378012B0CBF01230223F6E79E +:1042E0000120F6E78168F0B589B0A1F12006054606 +:1042F000FCF742FA0B4B07466C460FCB84E80F00E5 +:10430000102239460DEB020014F0C0FA2023224699 +:1043100031462846FCF73CFA003818BF012009B0A6 +:10432000F0BD00BF20AC010830B5002387B00D46BA +:104330008168059302AA20390446CDE90333FF239F +:1043400002931023FEF748FF002811DB102202A978 +:104350002046FFF799FF68B103232B700DF1070288 +:10436000A168012320468039FEF736FF00280BDACA +:1043700001202CE01022174902A815F0E1FD0028C9 +:1043800014BF02230123E8E79DF807300DF1070170 +:10439000204603F00F021B096A7001222B71FFF700 +:1043A00073FF10B96B78042B03D901236B700023C2 +:1043B0002B71A268A91C2046603AFFF776FF0028FF +:1043C000D6D1A268E91C2046403AFFF76EFF07B03D +:1043D00030BD00BF20AC01081FB5002001A9FFF7C8 +:1043E00077FDA8B902A90198FFF79EFF044668B9B6 +:1043F0009DF80B30032B03D10198FEF7A4FE044671 +:104400000198FFF751FD204604B010BD0124F7E7E5 +:104410000124F8E713B50C46C0B201A9FFF758FD17 +:1044200050B921460198FFF77FFF04460198FFF736 +:104430003BFD204602B010BD0124FAE730B585B03F +:104440000D460446012002A9FFF7E4FFE97901299E +:1044500002D02046FEF76AFE9DF80B30012B02D1F8 +:104460002046FEF770FEAB682046A1680193042346 +:10447000A0390DEB0302FEF72BFE2A460021204651 +:10448000FCF79AF92A4601212046FCF795F92046C7 +:10449000FFF728FF002005B030BD042809D005280B +:1044A00003D1481E18BF01207047431A5842584193 +:1044B00070470120704710B50446FEF7FDFD4FF42C +:1044C0003462A368E03B02FB103010BD30B5837945 +:1044D0008DB00546002B03A914BF02200020FFF772 +:1044E000F7FC60BB0398FFF7E6FF164B29799A6E3D +:1044F00001392B6802EB4204013B4A4304FB0323CE +:104500001C180398FEF7D8FD01900398FCF734F9C6 +:104510002022014604A814F0B9F92A792146019B0A +:104520008DF8102004AA0398FCF732F9041E18BF76 +:1045300001240398FFF7B8FC20460DB030BD0124DC +:10454000F7E700BF200700242DE9F04F04468DB0A7 +:1045500000206379012BCDE9040040F093812368AA +:10456000012B40F08F812379012B40F08B81B94DD5 +:10457000B94E2A68B24202D105A9FFF76FFD6B69F7 +:1045800013F00C0F00F0B981B24923462A6A01F1F9 +:104590006C00FEF791FF014618B92246AF48FFF7BD +:1045A000DBFDEB6AB34203D104A90120FFF756FDFE +:1045B0002B6C13F00C0F00F0A781A9492346EA6C7D +:1045C00001F14000FEF778FF20B922460121A348FF +:1045D000FFF7C2FD95F88831ABB104F12C0204F16C +:1045E0001C03114653F8040B934241F8040BF9D114 +:1045F0004FF48C7200219B4814F048F922460221A6 +:104600009648FFF7A9FDDDE90432934288BF059380 +:10461000059BA3608F4D002305996E6A1A462F6D86 +:1046200018469A46A846914201D89A4205D206EB0E +:10463000CA050AF1010A6D682A44994202D89342D8 +:1046400080F08D8107EBC005914200F101006D689B +:104650002B44ECD89942E6D89A42E4D1D1464FF0A7 +:10466000000B814B5D460BF1010B1B782BB10AF15E +:10467000010259467D4806F001FCD8F85830D8F8B8 +:10468000242099680023101D1F4650F839303B4400 +:10469000994203D3B9F10109F6D21F4621684B1E96 +:1046A000AB4200F24A8109F101001368D8F8685062 +:1046B00052F83060D8F82800F61A013807EB060CDB +:1046C00052F83020D31A9C4540F225814FF43463D0 +:1046D0006FF0DF02012903FB15253D4440F01C81EA +:1046E0007B1B18BF0123A37106A90020FFF7F0FB75 +:1046F00007A90120FFF7ECFB08A90220FFF7E8FB60 +:104700002379012B40F00A81089800218268FEF786 +:1047100027FD2368012B13D121460898FFF78EFE51 +:10472000A3796BB906980393FEF72AFD21460698F4 +:10473000FFF784FE0898039B82681946FEF710FD78 +:10474000002332460095DDE90701FEF7D3FD204640 +:10475000FFF7BCFE0223237118B1454A13680133E9 +:1047600013603A4631460798FEF7FAFC3346324664 +:104770000095DDE90601FEF7BDFD2368012B04D19C +:10478000A37913B90798FEF7FBFC2046FFF79EFEBE +:104790000323237118B1364A1368013313603A4674 +:1047A00031460698FEF7DCFC33460022069908984D +:1047B0000095FEF79FFDA379002B39D00898FFF7ED +:1047C0007AFED8F86830024606995B000898009394 +:1047D0007319FEF78FFD18B1254A13680133136072 +:1047E0000AA90898FFF7A0FD9DF82B30012B02D1F4 +:1047F0000698FEF7A8FC9DF82910012902D006981A +:10480000FEF794FC069809AAA3688168099304231B +:10481000A039FEF75DFC224600210698FBF7CCFF8D +:10482000224601210698FBF7C7FF0698FFF75AFDBD +:104830000023A5792046A371FFF748FE23680133C2 +:10484000236001232371A8B1094A1368013313605F +:1048500010E000BF200700243DB8F3968C07002429 +:104860004C070024C8090024E40A022406A8010811 +:10487000E00A0024002D57D03A4600210898FEF7A0 +:104880006FFC51E00AA8FFF731FC50B90A980423E5 +:1048900004F108028168A039FEF79EFC0A98FFF730 +:1048A00003FB04F11C05A3680026394FA94604F157 +:1048B0002C0805930AA85FFA86FAA5F1100BFFF7FA +:1048C00015FC68B90A9810235A468168A1F1A00C1A +:1048D000711CACEB4111FEF77FFC0A98FFF7E4FA7C +:1048E0005A4612F8013BFF2B3DD19542F9D11035C4 +:1048F000002E7FF48FAE0126DCE71022FF2104F1A9 +:104900000C0013F0C3FF4CE61022FF2104F11C0041 +:1049100013F0BCFF77E63D460023E4E6022B3FF4AC +:1049200020AF032B3FF43BAF0698FFF7BDFA079883 +:10493000FFF7BAFA0898FFF7B7FAB9F1FF3F7FF42B +:1049400090AE144B1968002905DD134B1B7813B189 +:10495000124806F093FA00200DB0BDE8F08F9142A6 +:104960007FF67AAE63E6224651463846FFF7F4FBFF +:10497000002EBCD04B46424653F8041B434542F838 +:10498000041BF9D1224602213846FFF7E5FBAEE7CA +:104990008C070024E00A0024E40A02241EA801086F +:1049A00010B508F075FD134B1348144A596A146882 +:1049B000038811601B1B0B440146B3F5803F16D3DF +:1049C0004FF47A71B3FBF1F201FB1233038006E07E +:1049D0000132A3F57A73B3F57A7FF9D20B80084CD4 +:1049E00023681A44226008F03FFD206810BD0022B1 +:1049F000F1E700BF000C0040680B02246C0B02249E +:104A0000F00C02242DE9F8430546294F3C69FFF7D5 +:104A1000C7FF022D0646274B26D1D7F81041264F57 +:104A20001C4044F00044DFF888804CF25039042FD9 +:104A30001DD1D8F81000C0F3800070B934F00041E7 +:104A400022D01E4A002C936943EA04039361184B59 +:104A500017DB5C610120BDE8F883FFF7A1FF801B35 +:104A60004845E4D90320F6E71C400427DBE7D8F8E3 +:104A7000103127EA030313F0040F0CBF01200020BC +:104A8000DBE7C3F81411E5E7012D094B06D11A69DC +:104A9000D103E0D54FF480325A61DCE7D3F810211E +:104AA000D203D8D54FF48032C3F81421D3E700BF26 +:104AB000002000520000EE17040000804C0B02247E +:104AC00070B504460D4616462368DB6935EA0303D4 +:104AD00001D1002017E0FFF763FF801B2368B0F1CE +:104AE000007F1A6810D322F4D0721A609A6822F0FC +:104AF00001029A602023C4F88430C4F8883000236F +:104B0000032084F8803070BD5107DDD5DA691205C5 +:104B1000DAD54FF400621A621A6822F4D0721A6071 +:104B20009A6822F001029A602023C4F88430C4F805 +:104B30008830C4F88C30E2E7F8B53E4C06460D46A6 +:104B4000A36A03F00303032B71D0236823F080537F +:104B50002360FFF725FF074623689A005AD4A36A0B +:104B6000012D326823F07C7343EA0253A362B368D9 +:104B7000F26803F1FF3302F1FF324FEA43234FEAB9 +:104B800002429BB202F4FE0243EA0203726802F19F +:104B9000FF32C2F3080243EA0203326902F1FF3234 +:104BA0004FEA026202F0FE4243EA02032364E36A30 +:104BB000726923F4406343EA0203E362E36AB26981 +:104BC00023F4007343EA0203E362E36A23F480738D +:104BD000E362636CF26923F47F4323F0F80343EA52 +:104BE000C2036364E36A43F48073E362E36A0CBF65 +:104BF00043F4000343F08073E3620E4C236843F0F8 +:104C000080532360FFF7CCFE054623689B0008D540 +:104C1000002005E0FFF7C4FEC01B02289CD903203A +:104C2000F8BDFFF7BDFE401B0228EED9F7E70120D3 +:104C3000F6E700BF00440258F8B53E4C06460D4664 +:104C4000A36A03F00303032B71D0236823F080636E +:104C50002360FFF7A5FE074623681A015AD4A36A0A +:104C6000012D326823F47C3343EA0233A362B36834 +:104C7000F26803F1FF3302F1FF324FEA43234FEAB8 +:104C800002429BB202F4FE0243EA0203726802F19E +:104C9000FF32C2F3080243EA0203326902F1FF3233 +:104CA0004FEA026202F0FE4243EA0203A363E36AB0 +:104CB000726923F0C00343EA0203E362E36AB26964 +:104CC00023F0200343EA0203E362E36A23F01003C4 +:104CD000E362E36BF26923F47F4323F0F80343EAD2 +:104CE000C203E363E36A43F01003E362E36A0CBFC9 +:104CF00043F4801343F40013E3620E4C236843F043 +:104D000080632360FFF74CFE054623681B0108D52E +:104D1000002005E0FFF744FEC01B02289CD90320B9 +:104D2000F8BDFFF73DFE401B0228EED9F7E7012052 +:104D3000F6E700BF00440258F8B503680446D807F8 +:104D40005FD42368990700F1B1802368DA0628D57B +:104D5000AC4B1A69996A02F03802082A07D0182A5F +:104D600040F0118101F00302012A40F00C811B6820 +:104D7000DB0502D5E369802B56D1A34B216A1A6863 +:104D800041F20303B3EB124F9E4BC0F0F5805A681B +:104D9000202922F0F8420CBF42F0804242EA8162B0 +:104DA0005A602368190700F1338123689A0600F1DD +:104DB000548123685D071ED5944D2B6843F480739E +:104DC0002B60FFF7EDFD06462B68DA0540F16A819E +:104DD000A3688C4D012B40F06C812B6F43F00103D5 +:104DE0002B6741F28837FFF7DBFD864E0546336FB0 +:104DF0009B0740F18481606A002840F08781002091 +:104E00002AE0804B1A69996A02F03802102A05D00C +:104E1000182A0BD101F00302022A07D11B689A035A +:104E20008FD56368002B8CD1012015E06268B2F544 +:104E3000803F12D11A6842F480321A60FFF7B0FD49 +:104E4000704E054633689B033FF57BAFFFF7A8FD27 +:104E5000401B6428F6D90320F8BD6A4D2B689AB927 +:104E600023F480332B602B6823F480232B60FFF71F +:104E700097FD06462B689F037FF563AFFFF790FD14 +:104E8000801B6428F6D9E6E7B2F5A02F07D143F4DA +:104E900080232B602B6843F480332B60CEE723F410 +:104EA00080332B602B6823F48023F6E7554B1A6977 +:104EB000996A12F0380203D0182A20D18E071ED129 +:104EC0001B685D0702D5E368002BADD04E4B21690E +:104ED0001A6841F20303B3EB124F4A4B5A6809D3E5 +:104EE00022F47C3240290CBF42F4003242EA013203 +:104EF0005A602AE722F0FE4242EA0162F8E7E168DE +:104F00001A6841B322F019023E4D0A431A60FFF7B6 +:104F100047FD06462B68580712D53B4B2269196896 +:104F200041F20303B3EB114F6B680FD323F47C33CF +:104F3000402A0CBF43F4003343EA02336B6004E7BA +:104F4000FFF72EFD801B0228E4D984E723F0FE43FF +:104F500043EA0263F2E722F001022A4E1A60FFF7E9 +:104F60001FFD0546336859077FF5EFAEFFF718FDC3 +:104F7000401B0228F6D96EE7DA6822F07C5242EA3A +:104F80000162DA600DE7E26952B31A681D4D42F022 +:104F900080021A60FFF704FD06462B68DF0512D574 +:104FA000194B226A196841F20303B3EB114F10D376 +:104FB0006B68202A23F0F8430CBF43F0804343EA98 +:104FC00082636B60EDE6FFF7EBFC801B0228E4D9FF +:104FD00041E7EB6823F07C5343EA0263EB60E0E6D1 +:104FE0001A68084E22F080021A60FFF7D9FC0546C5 +:104FF0003368D8057FF5D5AEFFF7D2FC401B0228F9 +:10500000F6D928E7004402580010005C0048025816 +:105010006369964D83B16B6F43F001036B67FFF7D4 +:10502000BFFC06466B6F9B073FF5BFAEFFF7B8FCB2 +:10503000801B0228F6D90EE76B6F23F001036B6724 +:10504000FFF7AEFC06466B6F9F077FF5AEAEFFF72E +:10505000A7FC801B0228F6D9FDE6A369834D83B126 +:105060002B6843F480532B60FFF79AFC06462B68AD +:1050700098043FF59EAEFFF793FC801B0228F6D9FB +:10508000E9E62B6823F480532B60FFF789FC064682 +:105090002B6899047FF58DAEFFF782FC801B0228F8 +:1050A000F6D9D8E6FFF77CFC801B64287FF68CAE2F +:1050B000D1E6B3B92B6F41F2883723F001032B6798 +:1050C0002B6F23F004032B67FFF76AFC06462B6F58 +:1050D00098077FF590AEFFF763FC801BB842F6D9C6 +:1050E000B9E6052B2B6F03D143F004032B6774E65D +:1050F00023F001032B672B6F23F0040370E6FFF707 +:105100004FFC401BB8427FF672AEA4E6574D2B69A8 +:1051100003F03803182B7AD02B68022823F0807311 +:105120002B6067D1FFF73CFC06462B6899015BD4E6 +:10513000AB6AA26A23F47C7323F003031343E26A8D +:1051400043EA0213AB62636BA26B013B013A5B0261 +:1051500012049BB202F4FE021343226B013AC2F323 +:1051600008021343E26B013A120602F0FE421343B7 +:105170002B63EB6A23F00103EB626B6BA26C23F4ED +:105180007F4323F0F80343EAC2036B63EB6A226CAC +:1051900023F00C031343EB62EB6A626C23F002030F +:1051A0001343EB62EB6A43F48033EB62EB6A43F444 +:1051B0000033EB62EB6A43F48023EB62EB6A43F06B +:1051C0000103EB622B6843F080732B60FFF7E8FB71 +:1051D000264D04462B689A013FF511AEFFF7E0FB20 +:1051E000001B0228F6D936E6FFF7DAFB801B0228FF +:1051F0009BD930E6FFF7D4FB04462B689B017FF573 +:10520000FEADFFF7CDFB001B0228F6D923E60128EF +:10521000AA6A2B6B3FF420AE02F00301A06A814220 +:105220007FF402AEC2F30512E16A8A427FF4FCAD5C +:10523000226BC3F30801013A91427FF4F5AD626B32 +:10524000C3F34621013A91427FF4EEADA26BC3F362 +:105250000641013A91427FF4E7ADE06BC3F3066388 +:105260000138181A18BF0120F6E500BF00440258A3 +:105270002DE9F041DDF8188004460E4615461F461C +:1052800022689368334214BF01230023AB4201D14B +:10529000002012E0B8F1FF3FF3D0FFF781FBC01B05 +:1052A000404502D8B8F1000FEAD10423012084F868 +:1052B0004130636C43F001036364BDE8F0812DE984 +:1052C000F04F054685B00C46FFF76AFB95F8402085 +:1052D00007EE900A012A00F0E1800122022085F801 +:1052E000402095F84120012A40F0BE80002241F282 +:1052F000883117EE903ACDED037A6A64009120214F +:1053000085F841002846FFF7B3FFDDED037A00285A +:1053100040F0AA80D4F824C0BCF1000F03D0A26AE8 +:105320002968013A0A61D4F818A0D4E90727BAF12C +:10533000000F50D063694CEA0A0AD5F800E02668ED +:105340004FEA834BD4F83480D4E90B1967B3A368D0 +:1053500047EA0A0A2769CEF81C30BAB13243114332 +:10536000E26841EA090949EA080848EA07071743D9 +:1053700047EA0B0747EA0A07CEF814706268CEF8CE +:105380001820BCF1000F40F0818062E0314341EA17 +:10539000090949EA080848EA070747EA0B0747EA04 +:1053A0000A07CEF81470ECE752B142EA06070F4341 +:1053B00047EA090747EA0808E76848EA0707D7E71E +:1053C00046EA010747EA090747EA080747EA0B0BDD +:1053D0004BEA0A07E5E737B3A1684CEA0707D5F8B7 +:1053E00000E02669CEF81C106169D4F83480890485 +:1053F000D4E90BA96AB13243E36842EA0A0A4AEAED +:10540000090949EA080848EA030848EA01010F4384 +:10541000B2E746EA0A0646EA090949EA080848EAFC +:1054200001010F43BDE78AB1E16A4CEA02020A4377 +:10543000216B0A43616B0A43E1680A43616942EAEE +:10544000814229684A6162688A619AE7BCF1000F6B +:1054500010D141F2883217EE903A0221284600928C +:105460000122FFF705FFA8B1002385F8403005B001 +:10547000BDE8F08FE36A226B4CEA03031343626BCF +:105480001343626943EA82432A685361012385F822 +:105490004130E9E72B680222DA60F7E70220E6E70D +:1054A000F0B593B004460846164604A91D46FCF71D +:1054B00027FB48B92B6804A920460E93FFF7FFFE8F +:1054C000074618B14FF0FF3013B0F0BDFFF768FA90 +:1054D00025680346A96994F84020012AF2D00122E8 +:1054E00084F8402094F84120012AD0B246D1676464 +:1054F000002E3ED0222284F841202A690132A26384 +:105500002A69266341F28836013262636A6922F0B1 +:10551000406242F080626A61A961A26BA2B9012275 +:10552000022120460096FFF7A3FE10B9236802224D +:10553000DA60012384F841300023C01A84F8403037 +:1055400018BF01204042BFE70122062120460096F5 +:105550000393FFF78DFE0028EBD195F82010226B06 +:10556000039B1170226B01322263A26B013AA2638A +:10557000D3E7636C43F008036364DDE70220DBE7F5 +:10558000F7B50093054690F8943014460191DDE993 +:105590000867F3B1D6B13B68DBB10CF043FD23469D +:1055A0002846DDE9002108F00BFE3B46324605F1B6 +:1055B0006801281DFFF774FF041E284618BF012448 +:1055C00064420CF025FD204603B0F0BD6FF00104ED +:1055D000F9E74FF0FF34F6E7F0B593B0044608461C +:1055E000164604A91D46FCF78BFA48B92B6804A996 +:1055F00020460E93FFF763FE074618B14FF0FF30C9 +:1056000013B0F0BDFFF7CCF994F8402003462568AD +:10561000012AF3D0012284F8402094F84120012A85 +:10562000D0B243D16764002E3BD0122284F84120CF +:105630002A690132E2622A69666241F288360132E1 +:10564000A2626A6922F040626A61E26AA2B901223A +:10565000022120460096FFF70BFE10B923680222B4 +:10566000DA60012384F841300023C01A84F8403006 +:1056700018BF01204042C3E70122042120460096C2 +:105680000393FFF7F5FD0028EBD1626A039B1278C4 +:1056900085F82020626A01326262E26A013AE262BF +:1056A000D3E7636C43F008036364DDE70220DBE7C4 +:1056B0002DE9F0471C4690B090F894300546DDF88F +:1056C0006890DDE918A8CDE9002163B30CF0AAFCCD +:1056D0004FF0FF3328462E1D05F16807DDE9002154 +:1056E00008F06EFD14B1BAF1000F23D1B8F1000F2C +:1056F00002D0B9F1000F19D102A93846FCF700FA1F +:10570000044638B9012302A9CDE90B033046FFF75F +:10571000D6FD08B14FF0FF3428460CF079FC204646 +:1057200010B0BDE8F0874FF0FF34F8E79CB1BAF154 +:10573000000F10D0224602AB39463046CDF808A003 +:10574000FFF74AFF04460028E4D1B8F1000FE3D088 +:10575000B9F1000FE0D002AB424639463046CDF8F1 +:105760000890FFF79DFE041E18BF01246442D3E792 +:1057700000B5564B8DB00A2800F2A480DFE800F097 +:1057800006162432404E5C6A78869400D3F8E020F6 +:105790004F4842F00102C3F8E020D3F8E03003F0B4 +:1057A00001030193019B0DB05DF804FBD3F8E020E9 +:1057B000484842F00202C3F8E020D3F8E03003F09A +:1057C00002030293029BEEE7D3F8E020424842F046 +:1057D0000402C3F8E020D3F8E03003F0040303939D +:1057E000039BE0E7D3F8E0203C4842F00802C3F80E +:1057F000E020D3F8E03003F008030493049BD2E7E1 +:10580000D3F8E020364842F01002C3F8E020D3F885 +:10581000E03003F010030593059BC4E7D3F8E020C4 +:10582000304842F02002C3F8E020D3F8E03003F023 +:1058300020030693069BB6E7D3F8E0202A4842F0FF +:105840004002C3F8E020D3F8E03003F040030793B0 +:10585000079BA8E7D3F8E020244842F08002C3F871 +:10586000E020D3F8E03003F080030893089B9AE728 +:10587000D3F8E0201E4842F48072C3F8E020D3F849 +:10588000E03003F480730993099B8CE7D3F8E020A0 +:10589000184842F40072C3F8E020D3F8E03003F473 +:1058A00000730A930A9B7EE7D3F8E020124842F483 +:1058B0008062C3F8E020D3F8E03003F480630B93F8 +:1058C0000B9B70E70D4807F0ABFF00BF0044025888 +:1058D000000002580004025800080258000C025848 +:1058E000001002580014025800180258001C0258F8 +:1058F0000020025800240258002802584BA8010832 +:1059000038B5431C0D4628D000F00F02134BC0F3EE +:10591000031053F82240FFF72BFF1149114BD1F828 +:1059200094209A42FBD104FB04F2016802EB42038B +:105930000B40B3FBF2F3013B012B03D8436823EA8E +:1059400004034360012D21460CBF2A460022FAF7CA +:10595000B7FF034B4FF440725A6138BD5CAC01088D +:10596000006402580003008038B5044607F0C8FE02 +:105970000C490D4BD1F894209A42FBD1D4E9050390 +:105980005B43026803EB430522EA0502134303600D +:105990004FF44073B4F910004B610021BDE838406A +:1059A000FFF7AEBF00640258000300802DE9F84302 +:1059B000461C05460C4600F09C801FFA80F9554AAB +:1059C00040F47061B2F90030581C4BD10026524BA4 +:1059D00009F00F02C5F3031053F82270FFF7C8FE59 +:1059E0004E494F4BD1F894209A42FBD107FB07FC5C +:1059F000C4F3831283680CEB4C0E0F2A6FEA0E017E +:105A000014BF02FB0CF243EA0E034FF4407E1CBFAE +:105A10000B40134304F007028360022A3F4BC3F894 +:105A200014E036D10EF1004ED3F89480F045FBD14E +:105A300019F0080FC4F383285DD03B0AD0F824E0A6 +:105A40005B435B43C3EB031903FB08F32EEA090E28 +:105A50004EEA03034362314B4FF4407EC3F814E037 +:105A600002231EE043F470638B4210D104F0030361 +:105A70005668032BABD109F47063B3F5706FA6D1F0 +:105A8000324621462846BDE8F843FAF705BF0832FA +:105A900098E7032A3CD002F1FF3EDEF1000343EB1E +:105AA0000E03DFF87890DFF878E0D9F89480F045BD +:105AB000FBD1D0F800E003FB0CFC013A01EA0E0137 +:105AC000012A41EA0C01016005D8436822074CBF56 +:105AD0003B43BB434360C4F301123946FAF7F0FE7F +:105AE000324621462846FAF7D7FE0C4B4FF4407257 +:105AF0005A61BDE8F8830CFB0CF9036AC9EB091E77 +:105B000023EA0E0E09FB08F34EEA03030362A2E741 +:105B10001346C6E7C0A801085CAC0108006402583F +:105B20000003008070B504460D461C22002112F0CF +:105B3000ADFE25822809FFF71BFE4FF47071064663 +:105B40002846FFF733FF238A0B4A012103F00F0396 +:105B500005F00F056661204652F8233001FA05F57D +:105B6000A36106F11003183625606360C4E902667C +:105B7000FFF7FAFE204670BD5CAC0108034BD96804 +:105B80001A6822EA01021A605960704700650258DB +:105B9000124B1A69194602F03802102A1AD004D89A +:105BA000BAB1082A16D00B6814E0182AFBD19A6AF9 +:105BB000996AD86A11F47C7F586B0BD002F003020B +:105BC000012A02D0022A00D01A681B6B034B1B6B00 +:105BD00000E01B68014B9A699B69704700440258BA +:105BE0002B4BD3F8882042F47002C3F888201A693E +:105BF00042F010021A61274A136803F00F03062BC4 +:105C000005D8136823F00F0343F007031360224BFA +:105C10001A6842F001021A6000221A611F4A1968CC +:105C20000A401C491A600A68120705D50A6822F062 +:105C30000F0242F007020A60002219499A61DA61F4 +:105C40001A6299621749D962174919635A639963AD +:105C5000DA6319645A64196821F4802119601A669C +:105C6000124A536A43F480435362114B1B681B0C66 +:105C70001B04B3F1005F02D20E4B01221A600E4BDF +:105C800043F2D2021A600D4A014B9A60704700BF7E +:105C900000ED00E000200052004402587FEDF6EADB +:105CA000000202020000FF0180020101C000005852 +:105CB0000010005C08810051004000520000000804 +:105CC0000A4B013B0FD00269002AFADA0369074A3E +:105CD00043F001030361013A05D0036913F00103A6 +:105CE000F9D1184670470320704700BF410D0300EB +:105CF00030B5056C00F530630F4CA54203D9D0F8E0 +:105D0000004B002C16DB002401291C611C6944F4A3 +:105D100000241C611C6944F018041C611C6944F0D7 +:105D2000C0441C6106D15A61D0F8003B43F0802387 +:105D3000C0F8003B002030BD0A30544FD0F8003E80 +:105D400023F00303C0F8003ED0F8043843F0020308 +:105D5000C0F804380020704770B50023940800F59F +:105D6000805502F00302A34214D301EB84017AB1FF +:105D700000F5805000230468D80024FA00F0C854CD +:105D8000013398B28242F7D1013A92B20132114402 +:105D9000084670BD2E6841F823600133E3E770B513 +:105DA0000E78012500F5006206F00F0374019D4096 +:105DB0004B78012BD36917D11D4300F51060D561D5 +:105DC00003591A040ED48A680559C2F30A03CA7823 +:105DD0002B4343EA824343EA865343F0805343F420 +:105DE00000430351002070BD43EA054500F53060D3 +:105DF000D56103591B04F5D48B680259C3F30A0318 +:105E00001343CA7843EA8243E7E700002DE9F843E9 +:105E10000668054616F0007607D0836C202B1FD04D +:105E20000DD873B1102B15D001262B68D90173D56D +:105E30006B6C032B6FD8DFE803F0201B2220302B84 +:105E4000F2D1734A0026A96CD36C23F030030B43C4 +:105E5000D364EAE76E4AD36A43F40033D362F0E7CF +:105E600002210430FEF7E8FE06460028DDD1E8E70F +:105E7000674AD36A43F40033D362344604E0022114 +:105E8000281DFEF7D9FE0446002C47D1604A696CF4 +:105E9000D36C23F003030B43D3642B685A0247D51A +:105EA0005C4F3B6843F480733B60FEF779FD8046AE +:105EB0003B68DB0534D5002C66D1554BD5F8B400D2 +:105EC0001A6F424012F4407F0BD01A6F196F22F400 +:105ED000407241F480311967196F21F480311967DC +:105EE0001A67B0F5807F3AD0D5F8B430484903F44A +:105EF0004072B2F5407F43D10869474A20F47C5094 +:105F000002EA131202430A61C3F30B03404A116F02 +:105F10000B4313670CE001263446BEE72646BCE778 +:105F2000FEF73EFDA0EB08006428C1D903263446E5 +:105F30002B68D90708D5EB6F102B3CD026D85BB364 +:105F4000082B32D0012634462B689A0748D5AB6F10 +:105F5000052B58D8DFE803F03C37513C3C3CFEF7BA +:105F60001FFDDFF8AC80074641F28839D8F8703061 +:105F70009807B9D4FEF714FDC01B4845F6D9D5E7FC +:105F80000A6922F47C52BEE72646D1E723F00802D4 +:105F9000202A01D0182BD5D19CB91D4AE96F536D29 +:105FA00023F038030B435365CEE70121281DFEF78C +:105FB00043FE0446F0E7012105F12400FEF7BCFD95 +:105FC000F7E72646C0E70121281DFEF735FE044607 +:105FD000E4B90F4AA96F536D23F007030B435365D0 +:105FE0002B685B072AD5D5F89430052B00F29E80EC +:105FF000DFE803F0191496191919012105F124009D +:10600000FEF79AFDE3E701263446E9E72646E7E78F +:106010000044025800480258CFFFFF000121281D0C +:10602000FEF70AFE0446002C40F08380534AD5F860 +:106030009410936D23F007030B4393652B681F07A0 +:1060400014D5D5F88430B3F5805F07D1022105F16E +:106050002400FEF771FD002818BF0126474AD5F835 +:106060008410536D23F440530B4353652B68D806BB +:1060700014D5D5F89830B3F5807F07D1022105F10A +:106080002400FEF759FD002818BF01263B4AD5F829 +:106090009810936D23F440730B4393652B68590359 +:1060A00019D5D5F88830B3F5001F44D0B3F5401F9B +:1060B00007D0B3F5801F45D1304AD36A43F400338B +:1060C000D362002C41D12D4AD5F88810536D23F4AA +:1060D00040130B4353652B68DA0306D52B6D002B59 +:1060E00035D0B3F5803F40D0012629684B0009D553 +:1060F000224B1A6922F400421A611A69D5F8BC00D1 +:1061000002431A61002906DA1C4A696DD36C23F038 +:1061100040530B43D364301E18BF0120BDE8F88301 +:10612000012105F12400FEF707FD7BE70126344637 +:1061300084E7264682E7012105F12400FEF7FCFCF6 +:106140000446BEE701263446C5E72646C3E70B4AA8 +:10615000D36A43F40033D3626CB9084A296DD36C17 +:1061600023F480330B43D364BFE70221281DFEF7DD +:1061700063FD0446F0E72646B7E700BF0044025837 +:10618000484B1A6902F03802102A30B500F08680B8 +:10619000182A0CD0002A40F083801A68424812F076 +:1061A000200F03D01B68C3F3C103D84030BD996AE8 +:1061B0009D6ADA6A15F47C7FC5F305105C6BF5D037 +:1061C000C4F3CC0402F0010207EE900A01F00301CF +:1061D0006243B7EE006AF8EEE76A012907EE902AFB +:1061E000FAEEE97A4CD002293CD0002948D11A684D +:1061F000920627D519682C4AC1F3C1011B6BCA400E +:10620000C3F3080307EE102AF8EEC75A85EEA67A04 +:1062100006EE903AF8EEE66A76EEA77A77EE867AA0 +:10622000204B67EE877A1B6BC3F34623013307EEDF +:10623000103AF8EEC76A87EEA67AFCEEC77A17EE38 +:10624000900AB3E71B6BC3F3080307EE103AB8EEEE +:10625000C77A77EE277A77EE867A9FED146A86EE14 +:10626000267ADDE71B6BC3F3080307EE103AB8EE9E +:10627000C77A77EE277A77EE867A9FED0D6AEEE79A +:106280001B6BC3F3080307EE103AB8EEC77A77EE3C +:10629000277A77EE867A9FED076AE0E7064885E77A +:1062A000064883E7004402580090D0030024744C51 +:1062B0000024744B0024744A0024F40000093D00BB +:1062C00008B5FFF75DFF084B08499A699B69C2F35F +:1062D000032203F00F038A5CCB5C02F01F0203F081 +:1062E0001F03D040D84008BD00440258AFA80108A1 +:1062F00073B50E460446FFF7E3FFB0FBF6F5FF2D3E +:1063000047DCFFF7DDFFB0FBF6F101FB160606B92F +:10631000013D6560FEF744FB94F84120034612B945 +:1063200041F28832A2642068A1680268013922F42F +:10633000706242EA0122202102602046A26C009293 +:106340000022FEF795FF30BB2268E569E36811681B +:106350002B43256A21F07F412B43656821F0D00152 +:1063600043EA05630B4313605568D4E905310B43D9 +:10637000216943EA0143094929400B4353601368EB +:1063800043F0010313600123606484F8413002B0DC +:1063900070BDFF25BDE74FF0FF30F8E7FEF8E0FFE6 +:1063A00008B5FFF78DFF054B054ADB69C3F30223F0 +:1063B000D35C03F01F03D84008BD00BF004402585F +:1063C000AFA8010808B5FFF77BFF054B054ADB695D +:1063D000C3F30213D35C03F01F03D84008BD00BF12 +:1063E00000440258AFA80108DFF86CC290212DE9E3 +:1063F000F043DCE90035834C89B06943DCF8088060 +:10640000DCF80C006218B8F5965F63504FF000019D +:1064100038BF0726DCF8107028BF0E46A2F85610C9 +:10642000A2F85410A2F85E10A2F85C101162516636 +:10643000DCF814E0C2F804809060D760C2F810E085 +:10644000C2E90611C2E90961BCF91A1001315DD136 +:10645000082151616C4A934210D19022B8F5165F21 +:1064600002FB054292F8801057D8012906D019681E +:1064700041F002011960002182F88010902202FB95 +:106480000541D1F884C0BCF1000F01D181F880C072 +:1064900002FB0542242140EA0E00C2F8841019686C +:1064A000526921F001011043584A196019680A40E5 +:1064B000104318605A6822F4405217435F609A688C +:1064C00022F06E4222F430629A60DA6A22F00F0201 +:1064D00016434F4A9342DE6225D14E4B5B6D03F06B +:1064E0003803282B00F284804B4AD35C082B00F23F +:1064F000BB81082B7CD8DFE813F0E001E6017B00CC +:106500007B00E9017B007B007B00EE01BCF91810E9 +:1065100001310CBF04210C219BE70129AED0196881 +:1065200021F00201A6E73D4A934207D1394B5B6D4A +:1065300003F00703052B5BD8394AD6E7394A934263 +:1065400007D1344B5B6D03F00703052B50D8364A57 +:10655000CBE7364A934207D12E4B5B6D03F007031E +:10656000052B45D8324AC0E7324A934207D1294B1E +:106570005B6D03F00703052B3AD82F4AB5E72F4A86 +:10658000934207D1234B5B6D03F03803282B2FD8A0 +:106590002B4AAAE72B4A934207D11E4B5B6D03F0AF +:1065A0000703052B24D8284A9FE7284A934207D19E +:1065B000184B5B6D03F00703052B19D8244A94E7A9 +:1065C000114A934214D102F50E32936D03F0070382 +:1065D000052B0DD81F49CB5C102B00F0088109D882 +:1065E000042B00F0FA80082B00F0FC80022B35D041 +:1065F000012642E0202B00F03581402BF8D14FF4EA +:106600000040FDE0F40C0224000C0058F369FFCFB9 +:1066100000100140004402587AA8010800440040DC +:10662000A3A8010800480040A3A80108004C0040AE +:10663000A3A8010800500040A3A8010800140140CD +:106640007AA8010800780040A3A80108007C004057 +:10665000A3A80108A9A80108900B0224FFF730FEA7 +:10666000A94BAA4A1B6AC3F30213D35C03F01F03AE +:10667000D840002840F0C480002690224FF001133B +:10668000012E02FB05F204EB02018B664FF00003C2 +:10669000C1E91C3300F034818B6A002B66D0D80727 +:1066A00006D5A058C96A426822F400320A43426003 +:1066B0009A0709D590226A43A158A0184A68006B2E +:1066C00022F4803202434A605F0709D590226A4370 +:1066D000A158A0184A68406B22F4802202434A6005 +:1066E000180709D590226A43A158A0184A68806B00 +:1066F00022F4004202434A60D90609D590226A4337 +:10670000A158A0188A68C06B22F4805202438A60A4 +:106710009A0609D590226A43A158A0188A68006C8D +:1067200022F4005202438A605F0613D590226A4326 +:10673000A158A0184A68476C22F48012B7F5801F50 +:1067400042EA07024A6005D14A68806C22F4C0021E +:1067500002434A60180609D590236B43E258E118BA +:106760005368C96C23F400230B43536090276F4395 +:10677000E35904EB07085A6822F490425A609A6879 +:1067800022F02A029A601A6842F001021A6000237D +:10679000C8F88C30FEF704F9E35902461B68190764 +:1067A00000F1A38090236B43E3581B685B0707D578 +:1067B0004FF480014046FEF783F9002840F09F80A7 +:1067C000902303FB05442023C4F88430C4F88830A8 +:1067D0000023E36684F8803092E002A8FAF7B8F963 +:1067E000039846E705A8FAF70BF9069841E71368FE +:1067F000474813F0200F03D01368C3F3C103D840F8 +:106800004FF09009434B09FB05F904EB09014A6A73 +:10681000D1F8048033F8122008EB4801B0FBF2F302 +:106820008B42FFF4E5AEB3EB083F3FF6E1AE002349 +:10683000002113F007FF42460F020023060247EA39 +:1068400010674FEA5800301847F1000113F0FAFEC4 +:10685000314BA0F540729A423FF6CAAE54F8093067 +:10686000D86009E72D48CBE7202B39D0402B39D011 +:10687000102B7FF4BDAE244B25481A6812F0200F70 +:1068800003D01B68C3F3C103D84090236B43E118C6 +:106890004A684E6A1F4931F81610B0FBF1F000EB60 +:1068A0005200B0FBF2F080B24FF6EF72A0F110018F +:1068B00091423FF69DAEE358D2E7FFF783FD0028F3 +:1068C0003FF4DAAEE1E7FFF76BFDF8E702A8FAF76D +:1068D0003FF90398F3E705A8FAF792F80698EEE770 +:1068E0000E48D2E74FF40040CFE701904FF400117B +:1068F0004046FEF7E5F8019A00283FF453AF03261F +:10690000304609B0BDE8F08300440258AFA8010842 +:106910000090D003E8A80108FFFC0F0000093D002B +:10692000294B4FF4E13210B59A60C4B01A68274B76 +:106930009A4245D10021BC2215A811F0A7FF0423DB +:106940001493234B196811F0040116D1482202A8B0 +:1069500011F09CFF02231F4C0193012304930A931F +:10696000402305931C4BD4F88C209A42FBD101A8FC +:10697000FEF7E2F94FF44073E360154B1B685B07C9 +:1069800010D50323134C3993134BD4F88C209A421F +:10699000FBD114A8FFF73AFA4FF44073E360FFF716 +:1069A00023FD78B100230B4C39930B4BD4F88C208A +:1069B0009A42FBD114A8FFF729FA4FF44073E36021 +:1069C000FFF712FD44B010BD900B0224000C0058DC +:1069D00000440258006402580003008037B5444C5C +:1069E0002369A369A369A369E569E369236A05F0DB +:1069F0007005404B1B68FFF7E5FCD4F8E8303E4AD1 +:106A000043F00803C4F8E830D4F8E83003F0080392 +:106A10000193019B394BD2F88C109942FBD1D4F8E9 +:106A2000903043F00803C4F89030D4F8903023F04D +:106A30000803C4F890304FF44073314CD360314BAD +:106A400023604FF0FF33E3602F4B002D4DD1B0FB9F +:106A5000F3F0002301382361A3606060C4E90533CB +:106A600094F83D3003F0FF020BB984F83C20254A2E +:106A7000022384F83D30136823F47C7313604FF0D5 +:106A8000FF33D36201239062536184F8483084F865 +:106A90003E3084F83F3084F8403084F8413084F848 +:106AA000423084F8433084F8443084F8453084F828 +:106AB000463084F8473084F83D30144B144A9B68C4 +:106AC000C3F80821BFF34F8F124B4FF480225A6056 +:106AD00094F83E30012B01D1F9F7F8FD2268D36814 +:106AE00023F00203D36003B030BD4000AFE700BF26 +:106AF0000044025800200052006402580003008045 +:106B000064050024000C004040420F0000ED00E04E +:106B10006508000800E100E070B5002396B001931D +:106B2000874BDA6A22F00102DA62DB6A03F00103C2 +:106B30000193844B9A6942F440429A619A6902F443 +:106B400040420192019A9A699604FCD501223323AE +:106B50008021082003930023069204931493CDE927 +:106B6000092102227821CDE90C230C2310921393E2 +:106B70004023CDE90E0107931021202303A8CDE97E +:106B800011120B93FEF7D8F810B1002016B070BDAB +:106B90006D4A136813F00C0F00F0A4806B4B9A69D8 +:106BA00002F070023F2A40F2AA80DA6902F0700215 +:106BB0003F2A05D8DA6922F0700242F04002DA6119 +:106BC000624BDA6902F4E062B2F5806F05D2DA69ED +:106BD00022F4E06242F48062DA611A6A02F0700222 +:106BE0003F2A05D81A6A22F0700242F040021A6267 +:106BF000564B9A69110705D49A6922F00F0242F0A8 +:106C000008029A619A6922F470629A611A68920184 +:106C1000BBD51A6941F288364C4C22F0070242F08B +:106C200003021A61FDF7BCFE0546236903F0380331 +:106C3000182B6BD1A36903F00F03082B05D9A369A7 +:106C400023F00F0343F00803A3613F4A136803F0E6 +:106C50000F03042B60D83D4B9A6902F07002402A62 +:106C600067D8DA6902F07002402A05D9DA6922F0A1 +:106C7000700242F04002DA61344BDA6902F4E062F9 +:106C8000B2F5806F05D9DA6922F4E06242F48062DD +:106C9000DA611A6A02F07002402A05D91A6A22F0F3 +:106CA000700242F040021A62284CFFF769FAA369A9 +:106CB000A369FFF793FE23680120214A43F0800374 +:106CC0002360D4F8F43043F00203C4F8F430D4F86D +:106CD000F43003F002030293029B136A43F00103B2 +:106CE000136253E7136823F00F0343F004031360A8 +:106CF000136803F00F03042B7FF447AF4EE79A6944 +:106D000022F0700242F040029A614EE7FDF748FE21 +:106D1000401BB04289D938E7136823F00F0343F0D2 +:106D200004031360136803F00F03042B7FF42DAFEB +:106D300091E79A6922F0700242F040029A6190E76E +:106D40000004005800480258002000520044025835 +:106D500090F8BC230368012A21D0012280F8BC23CB +:106D6000826A012A06D18269012A03D09A6B42F411 +:106D700080329A639A6842F001029A60D3F8002E3A +:106D800022F00302C3F8002ED3F8042822F00202F6 +:106D9000C3F80428002380F8BC331846704702204B +:106DA000704700000A4BDA6842F00102DA60DA68E4 +:106DB000D2070BD5D3F80C2142F00102C3F80C2105 +:106DC000D3F80C01C04300F0010070470120704768 +:106DD00000200052104BDA68D20706D40E4BD3F8CD +:106DE0000C0110F001000AD170470C4A5A6002F100 +:106DF00088325A60DB68DB07F0D501207047074A0C +:106E0000C3F8042102F18832C3F80421D3F80C013D +:106E100000F00100704700BF0020005223016745C9 +:106E200038B50446FDF7BCFD05460134FDF7B8FD55 +:106E3000431BA342FAD338BD73B505460C200E465A +:106E4000019206F0B3FA00232946019A0446C0E9EC +:106E50000133074B0360F9F7F7FF054630B12368AC +:106E600020465B689847284602B070BD3460FAE758 +:106E700088AB010873B505460C200E46CDE90032FB +:106E800006F094FA00210446C0E901110849DDE941 +:106E9000003201602946F9F77AFF054630B12368D0 +:106EA00020465B689847284602B070BD3460FAE718 +:106EB000B4AB010803682DE9F041DB6E04460D46D2 +:106EC0009847804640F2011006F070FA23680027C8 +:106ED00006461B6F294620469847236832462946B6 +:106EE00020465B6E9847002801DD0137F5E72368EF +:106EF0004246294620469B6E9847304611F05CFC7E +:106F00003846BDE8F0812DE9F043064687B02C20D5 +:106F1000154606F1A4080F4606F048FA0446404616 +:106F200006F1140903F090FDB36902AA21466360DB +:106F30004846F3690195A36001AB02F003FB0546E7 +:106F4000A8B99DF80C30222B1CD104AA2146484632 +:106F500001F0D8FB054650B963682361A3686361FB +:106F60000E23A3611023E360736A746223604046BA +:106F700003F04AFD4DB93C60284607B0BDE8F04338 +:106F8000F9F7C5BF6FF01305F1E7204611F014FCC7 +:106F9000F2E72DE9F04F07469B4693B0382007F102 +:106FA000A4098846164606F001FA0446484603F04E +:106FB0004BFD1BF0030C07F1140A00F0C580BCF177 +:106FC000010F4FF0000000F0C180BCF1020F8446B9 +:106FD00001D0002100E003214FEA6B0202964FEA44 +:106FE000AB0502F4807205F400752A430BF480654A +:106FF0002A434FEA0B2505F40065154345EA0C05C5 +:1070000005430D4305F00303012B11D102AB03AA85 +:1070100007A9504602F096FA064600BB9DF81030CC +:10702000222B00F08A80A9053FD56FF0100609E0F9 +:1070300097F85430002BE9D1504601F0DFFF0646A7 +:107040000028E3D0484603F0DFFC002E78D1C8F8D2 +:107050000040304613B0BDE8F04FF9F758BF821C2E +:10706000F0D1029B2F211846019313F035F8834687 +:107070000028E7D1EB05E5D5019B40F611028DF81C +:1070800012001846ADF8102012F0F4F94FF0FF325C +:107090008DF8130007A9019B5046CDE9052B03AAE3 +:1070A00002F02CFB06460028CCD1089B0022680584 +:1070B0006360099BA261A360039BE360059B23615E +:1070C000069BC4E9075263610AD44FF0FF337D6920 +:1070D000E3626B6BF3B13A6A62B16FF00B06B1E732 +:1070E00013B145F48035E5614FF0FF320023C4E968 +:1070F0000423EAE76363E36903F00303012B04D08D +:1071000004F12C01284601F006F93B6A00263C6296 +:10711000236097E7E36903F00303012B06D1686955 +:1071200011F042FB60630028EFD1D6E7A86911F0A7 +:107130003BFB60630028E3D1CFE76FF0140681E7E3 +:10714000204611F039FB84E7012042E74FF0020CA2 +:107150003FE7000010B50446EFF3058313B16FF06D +:10716000050010BD0DF06CFA0028F8D120464FF054 +:10717000FF31DFF808C000DFF3E700BFD92B0108BB +:1071800070B50A440E4E036893FAA3F393FAA3F37F +:107190000360914212D011F8014B84EA030505F017 +:1071A0000F0556F8255085EA131383EA141404F0EA +:1071B0000F0456F8244084EA1313EAE7036070BD15 +:1071C00094AD0108437982790433C079134418449B +:1071D000704703681A6AC36AD31A1944B1FBF2F301 +:1071E00002FB1311036B8B4210B50BD94C09C26B18 +:1071F000012301F01F0103FA01F152F824300B437F +:1072000042F82430002010BD03680846184703697F +:1072100010B5044613B150F8041B9847204610BD22 +:1072200038B5036804460D469B6F984723682D695F +:107230002046DB6F9847284638BD38B503680446BA +:107240000D469B6F98472368ED682046DB6F984793 +:10725000284638BD38B5036804460D469B6F9847ED +:1072600023686D692046DB6F9847284638BD036860 +:107270000122D3F88030184708B5064B53F8200098 +:107280000368DB6A984780B2B0F5007F38BF4FF4DF +:10729000007008BDF41402242DE9FF4716461C4671 +:1072A0008046DFF844900391FFF7E6FFA0FB0667F6 +:1072B000A0FB044559F8280032460368CDE9004593 +:1072C000D3F81CA03B46D04750B959F828003246A5 +:1072D00003990368CDE900459C693B46A04700B18E +:1072E000042004B0BDE8F087F41402247FB51646EC +:1072F00005461C460391FFF7BFFF0A4A0346039960 +:1073000052F82500A3FB04450268CDE90045546905 +:10731000A3FB0623A047002814BF0420002004B0CC +:1073200070BD00BFF414022413289ABF014B1856F5 +:1073300040427047FFAC010813128A76CB7603787F +:10734000032B01BF120C0A7512124A7570470328ED +:10735000CA7E8B7E08BF487D43EA022302BF0A7DB6 +:1073600042EA002243EA02431846704760B10368CC +:107370005BB11A785AB18088DA88904216BF09202A +:10738000002000230B60704703460920FAE709201C +:107390001346F7E7026810B504465AB1114611F8D2 +:1073A000013B202B11D93A2BF9D11378303BD8B2BD +:1073B000092802D94FF0FF3006E002329142F9D19C +:1073C000032B1846F6DC216010BD0020FCE738B521 +:1073D000C378044613B90025284638BDD0E90C21EE +:1073E00001234078FFF758FF054680B9216B636A97 +:1073F000E269CB1AE0709342EDD2A378022BEAD176 +:107400000A440123616B6078FFF746FFE4E701253A +:10741000E2E70B0A017043700B0C090E8370C17018 +:10742000704742884378007843EA022340EA032009 +:107430007047002370B51C462E26C5692A5D0134AD +:10744000202A0AD0052A08BFE522092C02BFCD1840 +:1074500001336E72CD1801336A720B2CEDD10B44DF +:1074600000225A72C369DB7A03F03F030B72C469CE +:1074700004F11C00FFF7D5FF0860E27DA37D43EA1D +:107480000223CB80627E237E43EA02238B8070BD81 +:10749000406803689B6C1847D0E9043110B5D0E907 +:1074A0000824D01A64EB010110BD406803685B6BCF +:1074B0001847416830B4D0E904400D6812192D6BAB +:1074C00040EB03030846294630BC084741680B6877 +:1074D00010B41C6BD0E90423084621465DF8044B28 +:1074E0000847406803689B6A1847406803685B6AFE +:1074F00018472DE9F3470546144698464068D5E9F4 +:1075000004230168A218DDE90AA948EB0303CDE9C9 +:1075100000A9496C884780B114EB0A04D5E904320C +:1075200048EB0908E61848EB0207D5E90823BB42F7 +:1075300008BFB2422CBF0120002002B0BDE8F08796 +:107540002DE9F3470546144698464068D5E90423DB +:107550000168A218DDE90AA948EB0303CDE900A9F7 +:10756000096C884780B114EB0A04D5E9043248EB72 +:107570000908E61848EB0207D5E90823BB4208BF13 +:10758000B2422CBF0120002002B0BDE8F0872DE9F7 +:10759000F3470546144698464068D5E90423016838 +:1075A000A218DDE90AA948EB0303CDE900A9C96BDC +:1075B000884780B114EB0A04D5E9043248EB090886 +:1075C000E61848EB0207D5E90823BB4208BFB242E0 +:1075D0002CBF0120002002B0BDE8F0872DE9F34167 +:1075E000DDE908670168044615469846CDE900675D +:1075F000496C884768B16068D4E904230168AA1817 +:10760000CDE9086748EB0303C96902B0BDE8F04162 +:1076100008476FF47A6002B0BDE8F0812DE9F043CD +:1076200085B00446154698460391DDE90C67CDE91F +:1076300000670168D1F84090C84778B16068039945 +:10764000D4E904230468AA18CDE90C67A46948EBBF +:107650000303A44605B0BDE8F04360476FF47A60C9 +:1076600005B0BDE8F0832DE9F04385B0044615462A +:1076700098460391DDE90C67CDE900670168D1F810 +:107680003C90C84778B160680399D4E90423046842 +:10769000AA18CDE90C67646948EB0303A44605B05A +:1076A000BDE8F04360476FF47A6005B0BDE8F08351 +:1076B000406803681B69184740680368DB6818471F +:1076C00073B50446406803689B689847054658BBF5 +:1076D000606803689B6B9847237A3BB12572D4E9B5 +:1076E0000432C31A61EB0202C4E90432237E43B1BF +:1076F0000026D4E908322676C31A61EB0201C4E9F8 +:107700000831D4E90416D4E9083220685B1A62EB28 +:107710000602CDE900320022416C00232046884752 +:10772000002808BF6FF47A65284602B070BD406833 +:1077300010B103689B6C18477047407E7047007E0D +:107740007047D0E9042110B5D0E90234981844EB11 +:10775000010110BDD0E902017047D0E90401704772 +:1077600090F820301BB1406803685B6B18476FF4DA +:107770007A60704790F8201030B459B1D0E9011404 +:10778000C0680D6812192D6B40EB030308462946AB +:1077900030BC08470020002130BC704790F82030F2 +:1077A0001BB140680368DB6A18470020002170475E +:1077B00090F820301BB1406803689B6A184700208E +:1077C0000021704790F820301BB1406803685B6A65 +:1077D00018470020002170472DE9F34190F8201050 +:1077E000044615469846DDE9086799B10168CDE978 +:1077F0000067496C884768B1E368D4E90102016811 +:10780000AA18CDE9086748EB0303C96902B0BDE8CF +:10781000F04108476FF47A6002B0BDE8F0812DE9CD +:10782000F04390F820C085B0044615469846039171 +:10783000DDE90C67BCF1000F16D0CDE900670168E7 +:10784000D1F84090C84778B1E3680399D4E90102C0 +:107850000468AA18CDE90C67A46948EB0303A446A1 +:1078600005B0BDE8F04360476FF47A6005B0BDE84D +:10787000F0832DE9F04390F820C085B0044615460A +:1078800098460391DDE90C67BCF1000F16D0CDE9F5 +:1078900000670168D1F83C90C84778B1E368039964 +:1078A000D4E901020468AA18CDE90C67646948EBC1 +:1078B0000303A44605B0BDE8F04360476FF47A6067 +:1078C00005B0BDE8F08390F820301BB14068036834 +:1078D0001B6918476FF47A6070472DE9F047D0E9CB +:1078E000011405684FEA640A9DF820C005EB6400A6 +:1078F000E4079DF824E048BF55F80A409DF8288029 +:10790000DDF82C9048BF6158DDE90C67CDE90A89A4 +:10791000CDE90C67CDE908CEBDE8F047084730B4A3 +:107920009DF808109DF80C409DF810500291CDE98B +:10793000034530BCC1680847FF207047D0E94401C7 +:107940007047F0B51F46D0F81831164601332DD1D7 +:10795000D0F86021D0E94445AF4208BFA6421CD20E +:10796000D0F82811C9B101290CD000F5B47C00234E +:10797000994212DDFCE80245BD4208BFB44202D282 +:107980000133F5E700230344012193F85441002318 +:107990000C4205D0723350F823201046D117F0BDA9 +:1079A00001334900042B49B2F2D1F6E74FF480507D +:1079B0000021F4E700487047D0AC0108D0F860011E +:1079C0000021704701200021704701682DE9F04730 +:1079D00017469846096B0646DDE9089A884702462D +:1079E0000B463846414612F02DFE134302D00020CC +:1079F000BDE8F08717EB09043368304648EB0A0509 +:107A000014F1FF32196B45F1FF33884702460B46EC +:107A10002046294612F016FE1343E8D1336830465B +:107A20009B6B9847A94208BFA0422CBF01200020B1 +:107A3000DEE72DE9F74F1646016802690546009317 +:107A40000192896B4769DDE90CAB16EB0A0843EB41 +:107A50000B098847494508BF4045DDE9003203D29C +:107A6000002003B0BDE8F08F16F17844284643F1BA +:107A7000FF31A4182A6841EB0707116B324688478B +:107A800002460B462046394612F0DCFD1343E7D18F +:107A900014EB0A042B68284647EB0B0718F1FF325A +:107AA000196B49F1FF33884702460B462046394699 +:107AB00012F0C8FD13430CBF01200020D1E70000E5 +:107AC00000487047D6AC0108D0E90601704790F82D +:107AD0002030002B0CBF4FF0FF30FF20704790F894 +:107AE000203013B12020002170470020FBE72DE952 +:107AF000F0471E460368154604469B6ADDE9087A8E +:107B0000984702460B462846314612F09BFD134328 +:107B100002D00020BDE8F087236820469B6A984782 +:107B200002460B463846514612F08CFD1343F0D105 +:107B300015EB07082368204646EB0A099B6B98471C +:107B4000494508BF40452CBF01200020E2E72DE950 +:107B5000F0471E460368154604465B6ADDE9087A6D +:107B6000984702460B462846314612F06BFD1343F8 +:107B700002D00020BDE8F087236820465B6A984762 +:107B800002460B463846514612F05CFD1343F0D1D5 +:107B900015EB07082368204646EB0A099B6B9847BC +:107BA000494508BF40452CBF01200020E2E70020E6 +:107BB0007047036873B50C469B6F0646984701A94A +:107BC0002046FFF7D3FB054600B9206033683046F6 +:107BD000DB6F984714B1204610F0EEFD284602B046 +:107BE000BDE87040FFF7A0BB08B110F0E5BD7047DD +:107BF00010B5044610F0E0FD204610BD10B5044657 +:107C000010F0DAFD204610BD70B50446FFF7DFFB2B +:107C1000054600283FD12378032B35D12679012E44 +:107C200032D10146A289606B10F030FE636B5522A1 +:107C30004121722083F8FE21AA2283F8FF215223DA +:107C4000626B137053706123D1709370626B82F812 +:107C5000E73182F8E40182F8E50182F8E611606B11 +:107C6000616900F5F470FFF7D4FB606B216900F5E2 +:107C7000F670FFF7CEFB226A3346616B0132607803 +:107C80002263FFF709FB25716278034B53F822004A +:107C9000B0FA80F0400970BDF414022490F820304E +:107CA00010B504465BB11C30FBF732F838B984F8E4 +:107CB000200060680368BDE81040DB6818470020BA +:107CC00010BD2DE9F04F89B09046994605469DF8C4 +:107CD0004820C3469DF8503090F8FA71DDE91561EF +:107CE0000591032A57D8DFE802F01B021903022787 +:107CF0000F2B4FF0000205F1040A08BF95F8FD3183 +:107D000011465046009203933B46CDE901220AF00A +:107D100093F9044638B109B0BDE8F08F0327E7E7CF +:107D20004FF0FF3BE4E7059B4FF0FF329DF84C100E +:107D30005046079307ABCDE900635B46FDF720FC97 +:107D40003B468346224621465046CDE90244CDE9D2 +:107D500000440AF071F90028DDD1BBF1000F01D019 +:107D60005846D8E795F801010028D4D0B9F1000FA2 +:107D700008BFB8F1040F04D1337843F00A0333701D +:107D8000EEE7B9F1000F08BFB8F1020FE8D1337880 +:107D900023F00403F3E74FF0FF30BCE708B590F899 +:107DA00020302BB100691044FAF732FF002108BDE2 +:107DB0001846FBE708B590F8203023B10069FAF7C0 +:107DC00027FF002108BD1846FBE7F7B590F8201003 +:107DD00004461546DDE9086771B10168CDE9006721 +:107DE000496C884740B121693246201D294403B0BF +:107DF000BDE8F0400AF0B6B96FF47A6003B0F0BDA8 +:107E0000F0B590F8207085B0044615460391DDE981 +:107E10000A6C7FB10768CDE9006C3F6CB84748B188 +:107E2000226933460399201D2A4405B0BDE8F0407D +:107E30000AF0E4BA6FF47A6005B0F0BD90F8203033 +:107E400010B5044613B94362002010BD2430FAF780 +:107E50005FFF0028F8D184F82000201DBDE8104005 +:107E60000AF010BC90F820302DE9F04F814685B023 +:107E700003B9436209F1240656E8000F013046E8D1 +:107E80000003002BF8D1012843D109F104000AF0C6 +:107E900015FC804630B13046FAF73AFF404605B04F +:107EA000BDE8F08FD9E906ABD9E904451AEB040324 +:107EB00000934BEB05030193FAF7CAFE002300F190 +:107EC000006C8646DDE900018B4208BF844505D27F +:107ED00030466FF47A68FAF71BFFDFE7002D08BF22 +:107EE000B4F1006FF4D35AEA0B030ED14FF00061E6 +:107EF0000B1B029365EB45030393DDE9026716EB69 +:107F00000E0647F10007C9E90667012189F820102C +:107F1000C4E79846C2E770B514466FF00046126891 +:107F200005460498B24207D238B10146184611F00E +:107F300091FF431C05D1206070BD15B18A4238BF46 +:107F4000AB54236801332360F6E700002DE9F04FBE +:107F500089B0002405469DF850A09DF84800A24530 +:107F6000DDF85480079414BF4FF0300B4FF0200B16 +:107F70000128CDE905443FD1A3423DDA5B42814669 +:107F8000841E00270DF1140C4FF00A0EE4B2029487 +:107F9000029C012C56D8022803F00F044FEA131359 +:107FA0000CBF334E334E345D0CF807407C1C002B65 +:107FB00046D1B9F1000F27D0BAF1000F09D02D2317 +:107FC0002846CDF80080CDE90212FFF7A4FFDDE9D5 +:107FD0000212BC1C139B9C421BDBBAF1000F09D19F +:107FE0002D232846CDF80080CDE90212FFF793FF3C +:107FF000DDE90212013C1EE013B14FF00009BFE7BA +:10800000302301248DF81430139B9C4213DA4FF077 +:1080100000095B462846CDF80080CDE90212FFF743 +:108020007AFF139B013BA3421393DDE90212F0DCBC +:10803000B9F1000FD1D105AE6CB909B0BDE8F08F30 +:108040002746A5E7B3FBFEF40EFB143330330CF8E0 +:1080500007302346AAE7013CCDF800802846335D6F +:10806000CDE90212FFF757FFDDE90212E4E700BF96 +:10807000D4AD0108E4AD01082DE9F04F1C4689B0EC +:1080800000238946129E15460793B2B1994214DB2C +:108090000CBF012301F1FF394FF0000B049315F8D9 +:1080A0000B3073B948B1049B3BB9079B4B4595BF57 +:1080B000049A049BC25400F80930079809B0BDE83F +:1080C000F08F252B40F002810BF1010815F80830E4 +:1080D000203BDBB20D2B07D842F6090222FA03F34C +:1080E000DB0748BF0BF1020815F808302A2B1DD119 +:1080F000002108F1010204348E46AF5CAB182E2F2C +:1081000051D15F782A2F2CD04FF0000AC5F1010C15 +:108110000CEB030213F8017F303F5FFA87F8B8F1E8 +:10812000090F21D80A2202FB0A7AF1E7302B15D178 +:1081300008F1010815F80830302BF9D04FF0010E86 +:10814000A8440021A8EB050218F8013B303BDFB240 +:10815000092FD2D80A2202FB0131F3E74FF0000EBB +:10816000EEE7023254F804ABAB5C682B1ED1AB18BF +:108170005B78682B0CBF7223112303F00308904433 +:1081800015F80870642F01D0692F3FD1822B27D1B9 +:10819000252307AA494600960590252F18BFD846E3 +:1081A000FFF7B9FE2EE06FF0004ADDE76C2B06D139 +:1081B000AB185B786C2B0CBF82232123DDE76A2B85 +:1081C00008D07A2B08D0742B08D04C2B14BF002376 +:1081D0006123D2E73123D0E74123CEE75123CCE717 +:1081E000112B54F8042B0FD0722B00D152B2012363 +:1081F0000191CDE902E600934946134607AA05908E +:10820000FFF7A4FE059838E012B2F0E7752F03D00F +:1082100007F0DF02582A16D1822BB9D0112B54F85F +:10822000042B09D0722B00D1D2B2752F0191CDE968 +:1082300002E603D10023DEE792B2F6E7582F0CBF27 +:1082400003230223D7E7632F09D154F8043B07AA7D +:1082500049460096DBB20590FFF75DFED2E7732F2B +:1082600016D154F804BB0BF1FF3717F8013F23B1C7 +:10827000AAEB07021BEB020F02D108F1010B0EE77C +:1082800007AA494600960590FFF745FE0598ECE7DA +:10829000702F7FF47DAF54F8047B302307AA494642 +:1082A00000960590FFF737FE782307AA4946059800 +:1082B0000096FFF730FE002307AA4946059803966B +:1082C000CDE90133032300933B4699E707AA4946CA +:1082D0000096D8460590FFF71EFE93E7F8B5C569EE +:1082E0000F460E68083DAE4213D3B6FBF5F00138D9 +:1082F00012F0C0F9841CA6EB8404B4FBF5F420460C +:1083000012F0B8F9A6EB800004FB150520463D608D +:10831000F8BD0020FCE710B50C468269FF21A0687B +:1083200010F0B4FA4FF0FF33236010BDF7B50C46E0 +:108330000968064617464B1C21D0006883690093E4 +:108340008568D4E90123A847054620B937B92146F5 +:108350003068FFF7E0FF284603B0F0BD33683946C8 +:1083600030469B690193A3680093D4E90023FAF790 +:108370008CFD002805DBEAD16FF03305EBE7002523 +:10838000E9E70546E7E72DE9F74F0C9C07460D4660 +:1083900091469846DDF838A0BAF1000F03D1504657 +:1083A00003B0BDE8F08F2B6838684345826928D157 +:1083B0006B68A34225D803EB020BA34521D9ABEB95 +:1083C000040BE01AAB68D3450D99184428BFD34677 +:1083D0005A465C4410F04CFA0D9B5B44AAEB0B0B25 +:1083E0000D933B689A69B4FBF2F302FB134333B974 +:1083F0004A4629463846FFF799FF0028D0D1DA4689 +:10840000CAE7B4FBF2F302FB13434BBB924527D3FD +:108410004146BAFBF2F302FB13AB2246AAEB0B0A6E +:10842000CDF800A083681E460D9BB0470028B7D149 +:10843000B9F1000F04D10D9B544453440D93DEE772 +:108440000D9B42464946384600932346CDF804A08A +:10845000FAF71BFD0028A3DBEDD16FF033009FE797 +:10846000E31AD346C5F800806B60C8E72DE9F04FEA +:1084700085B00F4691469846109D0390DDE90E4663 +:108480000DB9284659E0039B1868B9F1000F1ED0BA +:10849000D9F8003043451AD1D9F80410A14216D8B2 +:1084A000826901EB020A544511D2AAEB040A611A4F +:1084B000D9F80830AA4528BFAA4630465246194482 +:1084C00056445444A5EB0A0510F0D2F9D8E73A68AF +:1084D000436990450ED179688C420BD301EB030AB6 +:1084E000544507D2AAEB040A611ABB68AA4528BF03 +:1084F000AA46E2E7B4FBF3F203FB1242D0F804B061 +:108500008AB99D420FD322464146B5FBF3FA03FBDD +:108510001A5A3346A5EB0A050095D84768B92E4488 +:108520002C445546ACE7A21A00934146BB68C7F8F5 +:1085300000807A60D8470028A2D005B0BDE8F08F4F +:108540002DE9F04F8BB0914607468846149A07A94B +:1085500000680DF1200B013A0593DDF858A0079251 +:10856000FFF7BCFE059B0546194605935046159B33 +:108570009847024618BB15B305F001064A4600901D +:108580003846C6F10204059BA100CDE901B1414680 +:10859000FFF76CFF024690B9013C944207DC0AAB3E +:1085A000023E03EB8404354454F8083CDCE70899A8 +:1085B0005046159B984701220028EED002461046EF +:1085C0000BB0BDE8F08F2DE9F04786B005460F46A9 +:1085D000144600F11409D6184FF0010A0DF11708DE +:1085E000B44203D1002006B0BDE8F08700943B46BA +:1085F0000022494628460134CDE9018AFFF736FFBB +:108600000028F0D1012241460E98FEF7B9FDE7E7B8 +:1086100003689B6A10B5044613B9C06910F0CCF822 +:108620002368DB6A13B9A06A10F0C6F823681B6BD5 +:1086300023B9E06BBDE8104010F0BEB810BD38B5EE +:108640008B6A04460D460160CBB1C361EB6A13B37C +:10865000A36204F120012846FFF75DFE4FF0FF33CF +:10866000636123681A6BEAB1E26300204FF0FF33C5 +:10867000C4E90300C4E90133A4F8400038BD4869E7 +:1086800010F092F8E0610028E0D12046FFF7C0FF2B +:108690006FF00B00F2E7A86910F086F8A0620028DE +:1086A000D7D1F2E7586AC00810F07EF8E0630028DE +:1086B000DBD1EAE70B6810B504689C4209D040683A +:1086C0004A68904205D0944203D0181A18BF01207E +:1086D00010BD0020FCE70368013304D04068431C50 +:1086E000584258417047012070471FB5069C0092C0 +:1086F0000022CDE901340B4600F11401FFF7B6FE6C +:1087000004B010BD2DE9F04F13688BB0002607466A +:1087100004930C465368B0460DF1100B06AD4FF0B4 +:10872000100A05935BF826902B46002238464946EE +:10873000CDF800A0FFF7D9FF70B110F1340F06D1CA +:1087400046B1B8F1000F14BF00206FF033000BB03A +:10875000BDE8F08F0126E5E7B8F1000F04D0E2692B +:10876000069B9B1A002BEBDB079B23F00043132B8C +:10877000E6D93A68D2699342E2D84FF0FF3303A8B2 +:10878000102229460393FEF7FBFC079B1022009062 +:10879000494623F000433846103BFFF714FF0028FA +:1087A000CBD1039B002BCBD10AAA86F0010304F1A5 +:1087B0001C0CC4F8049002EB83034FF0010853F83B +:1087C000183CC4E9023A95E80F008CE80F00B7E7BF +:1087D0002DE9F043012397B00F460646002190464D +:1087E000CDE9051305994046B847044610BB0699E4 +:1087F0004046B8470446E8B905AA0BA93046FFF73A +:1088000081FF0446B0B90C25139B0E9A23F0004358 +:1088100002F10C01043B994210D9149B05A8059361 +:10882000159B0693FFF757FF0028DBD0F56806F18C +:1088300014094DBB204617B0BDE8F0830C9908AB76 +:1088400030460095FFF751FF0146002842D107A8A6 +:10885000FEF7B8FC0E9B18449DF8203003F070031F +:108860000E90102BD0D10A9B002BCCD00A4600933F +:1088700006F11401099B3046CDE90178FFF760FE4F +:108880000028C0D00446D5E7EB69DA0312D4EB69BF +:108890009B030DD52B6A5BB1009305F12C02494671 +:1088A0003046CDE901786B6AFFF74AFE0028E9D12E +:1088B0002D68BEE76B69002BE9D0009305F12C020F +:1088C00049463046CDE901782B69FFF739FE00288B +:1088D000DDD0D7E70446ADE72DE9F04104460D466B +:1088E0000127304E4FF00008226BD4E90D1391425E +:1088F00024D1002B52D02068E16AD0F820C00A446D +:10890000B2FBFCF10CFB11220021E262426AE06B37 +:10891000934294BF23632263D208C4F834800FF0DB +:10892000B5FF201DFFF7D7FE0028DDD122463146D6 +:108930002046FFF74DFF0028D4D025E0481C013B1E +:10894000D4F83CC060634809A36301F01F035CF8DE +:10895000200007FA03F30342C7D1E36A19442368EE +:108960001A6AB1FBF2F302FB131129600121256B96 +:10897000636BAB4210D05A0903F01F005CF8222051 +:1089800001FA00F0104001D1BDE8F08101336363CA +:10899000A36B013BA363EBE70020F5E76FF01B003F +:1089A000F2E700BFD37100082DE9F04F044687B00D +:1089B0000E4600F1140A05A92046FFF78DFF054673 +:1089C00048B920680599C3689847054600283BD0F8 +:1089D00010F1340FEFD0284607B0BDE8F08F0DF14D +:1089E0001307736A5A4651462046CDF80890CDE9E0 +:1089F0000087FFF73BFD70B9059B524604F120014B +:108A00002046CDF80080CDE90179FFF7BCFC20B10C +:108A100010F1340FCFD00546DDE708F10108B36A45 +:108A20004345DCD82368A16A9A69706B0FF020FF78 +:108A3000236A04F120012068F362636A3363FFF75D +:108A40006AFC059B7362C6E7804606F12C0B4FF06B +:108A50000109E4E7CB695A0344BF23F480234FF0B4 +:108A6000FF322DE9F04148BFCB610546CB6990B09C +:108A700048BFCA620C4613F400302CD00F6A2C2277 +:108A8000002102A80FF002FF236905F114060693E6 +:108A900063690793012396E80700CDE9093710AB16 +:108AA00003E907004FF0FF3398466B61226A636960 +:108AB0009A4213D304F12C08324641462846FFF768 +:108AC00035FC28B310F1340F05D121462846FFF7B5 +:108AD0006BFF0028F0D010B0BDE8F08101230DF14C +:108AE000070202A9284600F052F90028F3DB01230F +:108AF0000DF107022146284600F016F80028EADBAF +:108B00006B6901331CBFCDF83480C5F81480CDE704 +:108B1000636A2361236A6361E36923F4003343F4E6 +:108B20008033C4E90737D6E72DE9F04F9B468DB077 +:108B3000CB69054604920C4603F00302012A00F0BB +:108B400020815E0314D4E66932051AD4276A17EB34 +:108B50000B0F00F1198116F4003618D0D946E369DD +:108B6000B9F1000F25D123F400235A46E36104E054 +:108B7000FFF770FF02460028E5D010460DB0BDE8B3 +:108B8000F08F6269216A8A4288BF2262DEE76369E8 +:108B90009F42E3D923620BAA0123214628468DF880 +:108BA0002C60FFF7C1FF021EE7DB236A9F42F2D869 +:108BB000D4E79B0304F12C0620D52B68A26ADB695D +:108BC0009A4242D12B6805F1140A1B6AAB63D4E9BF +:108BD0000832CDE909230BA92846FFF77DFE02469E +:108BE000F8B928680B99C3689847024618B312F180 +:108BF000340F16D14FF0FF332B62ECE7236A002BC2 +:108C0000E0D004F12802013B31462846029204F1EB +:108C1000240200930192D4E90423FAF75EF9024694 +:108C200020B1E36943F40023E361A6E731462868F5 +:108C3000FFF771FBC6E70A9B286843BB0B9A626289 +:108C4000A362E36943F40033E361A84658F8143B98 +:108C5000DF69A36AFF1A4F4528BF4F46049B42466F +:108C6000314628460193A36A02970093636AFFF78F +:108C70008AFB0246002875D010F1340FD1D121466D +:108C80002846FFF791FE02460028E7D0C9E7013BDE +:108C90000AA905920A93FFF721FB0A9B2968013371 +:108CA000059AC9690A938B424AD10130904609AFAF +:108CB00090FAA0F3B3FA83F30593013306934FEAD6 +:108CC000880352463146284607930423CDE90173B1 +:108CD000079B00930B9BFFF756FB0246002886D1AB +:108CE000059B434530D108F10108069B4345E6D872 +:108CF0000B9B6362069B9B00A2E701230022514667 +:108D00002846CDF80080CDE90173099BFFF7AEFB43 +:108D10000246002885D10123524631462846CDF827 +:108D20000080CDE901730B9BFFF72DFB0246002865 +:108D30007FF45DAF08F101080A9B9845DDD37DE71C +:108D400090460DF12307F7E7042351462846CDE965 +:108D50000173079B0093099BFFF788FB02460028DD +:108D6000C1D05EE7236AA9EB07093B442362A36AEB +:108D70003B44A362049B3B4404932B681B6AAB6394 +:108D8000EDE66FF00802F8E66FF01A02F5E62DE95D +:108D9000F04F1D46CB69904687B003F003020746AB +:108DA0000C46022A54D09A0305D4266A6269964278 +:108DB00008D3002003E0FFF74DFE0028F5D007B0F0 +:108DC000BDE8F08F961B04F12C0104F1280A04F190 +:108DD000240BAE4228BF2E46B146B9F1000F01D197 +:108DE0003046ECE7E3695B0304D53B68A26ADB69C4 +:108DF0009A4210D1236A384605910093CDE901BA11 +:108E0000D4E90423FAF769F80028D8D1E369059971 +:108E100043F48023E3613A683846A36AD5690022A7 +:108E20000093ED1A636A05914D4528BF4D46CDE983 +:108E30000185FFF71BFB0028C1D1236AA844A9EBD9 +:108E4000050905992B442362A36A2B44A362C4E756 +:108E50006FF00800B3E7F7B5044604300E46154638 +:108E6000FFF739FC10B1002003B0F0BD01230090E2 +:108E70006A46294620460193FFF744FC0028F3D1B7 +:108E800005F124073846FFF726FC0028EBD13146D0 +:108E90003846FFF70FFC38B13A4629462046FFF71F +:108EA00031FC0028EED0DFE70120DDE72DE9F341BA +:108EB00006460C46154601F124081027226AE1688F +:108EC00022F0004301F10C00043B984217D80C2318 +:108ED0000A463046616800932B1DFFF706FC0146E9 +:108EE00090B9E66828462E60FEF76CF93044E060E1 +:108EF0002846FEF767F9A3691844A06104E0002A38 +:108F000006DB29606FF00101084602B0BDE8F08180 +:108F1000214642463046FFF7F5FB01460028F3D1D3 +:108F2000A369E7601433A361C8E72DE9F843144649 +:108F30001D460022012306460F4604F1240805F1D0 +:108F40000809C4E909234046FFF7C5FB08B1002022 +:108F50000DE0424621463046FFF7D4FB38B92A4699 +:108F600021463046FFF7A2FF18B1831CEBD0BDE8C5 +:108F7000F8832B7903F07003202BF0D13946484653 +:108F8000FFF798FB0028EAD10120F0E770B505460D +:108F900092B004300E46FFF79EFB68BB01230190A0 +:108FA00001AA07A928460293FFF7ACFB044618B9AB +:108FB00010A8FFF790FB10B1204612B070BD10AAA8 +:108FC00007A92846FFF79EFB38B903AA07A9284638 +:108FD000FFF76CFF18B1831CEAD00446ECE79DF95B +:108FE0001030002BF1DB0822314605A810F0A8FF55 +:108FF0000028EAD10124DFE70024DDE7F0B50127EE +:10900000061DA7B0044680F840703046FFF763FBAA +:109010000546002840F0818001462C2205A80FF06B +:1090200035FC4FF000432822294610A80D930FF07D +:109030002DFC1A9723681B6A9D4202D36FF0330000 +:109040001BE019A8FFF747FB002866D119AA10A951 +:109050002046FFF757FB80B90D9B002B38DB3046CD +:10906000FFF739FB58B1199B0E931A9B0F930023FE +:1090700005A920461A4600F052F827B0F0BD01AB12 +:109080001BAA0EA92046FFF750FF0028F5DBEAD007 +:10909000039A0E99049B8A420F9801D1984217D0E7 +:1090A000824201D1994213D00E92DFE79DF97030D0 +:1090B000002B0DDA1DA92046FFF768FF0028DCDB36 +:1090C0001ED01BAA10A9204600F075F90028D4D1A3 +:1090D0001BAA10A92046FFF7E9FE0028E6D0831C52 +:1090E000CBD10DF1400C05AF0135BCE80F000FC727 +:1090F000BCE80F000FC79CE8070087E8070099E766 +:109100009DF870301BAA10A903F07F038DF8703012 +:109110000346204600F0C3F9D8E70020ADE72DE96B +:10912000F04F2DED028B9BB006460D460793CB69A1 +:1091300007980133059202EB0017CB610B1DD1E9B3 +:10914000011408EE103A1346C5E901419F420FD1C0 +:109150000023CDE90941069330686968C3689847E0 +:10916000044670B114F1340F00F0F4802046FFE0A3 +:10917000D86810332A6A024453F80C0C121A2A6277 +:10918000E4E705F11C080DF12C094FF0FF3306F15F +:10919000200A10271022414648460B93FDF7F0FFA6 +:1091A000224600946B6851463046CDE90187FFF7AF +:1091B000EAF804460028D5D18346B84608EE909ACE +:1091C0002AE0079B9B4580F2A080059A4FEA0B138B +:1091D000D35802EB0B19434540F0978018EE900AE4 +:1091E000D9E90212FDF7CCFFD9F80C300022514624 +:1091F00002933046D9F80830CDE900736B68FFF769 +:10920000C2F804460028ADD1D9F804300BF1010BA7 +:109210009844D9F80C301F442B6A23F00043043BD8 +:10922000BB42CED804230DF12C08002251460293F4 +:1092300030466B68CDE90078FFF7A5F804460028B2 +:1092400090D14FF0FF330246514630467361FFF72D +:109250006DF80446002885D13068036998470446B4 +:1092600000287FF47FAF4FF0FF330FAF02466968ED +:109270000F9330462B6A009723F00043043BFFF71F +:10928000A2F9044600287FF471AF0F9A0B9B9A4213 +:1092900060D1069B4BB306F104094846FFF71BFA61 +:1092A000002875D143463A4609A93046FFF73DFEEE +:1092B00000285DDB6CD06B684246394630460D9322 +:1092C000AB680E93002300F0EAF8002850D149461D +:1092D00009A8FFF7EFF918B96B687360AB68B36062 +:1092E0003046FFF78BFE002842D13469002C3FF452 +:1092F0003DAF18EE101A201DFFF7DCF918B96B68A6 +:109300006360AB68A3602468F0E7012342460A99D2 +:10931000304600930FABFFF7E8F9044600287FF4CE +:1093200025AF01220FA918EE900AFDF729FF0123AE +:109330002246514602930FAB3046CDE900736B686D +:10934000FFF721F8044600287FF40CAF08F101086C +:10935000013761E74FF0FF3300220FA909A83362FC +:109360000123CDE90F23FFF7A5F930B96FF03300E2 +:109370001BB0BDEC028BBDE8F08F18EE101A304622 +:10938000FFF7AAFA0123069300283FF4E5AEEFE7C2 +:109390003A4609A93046FFF75EFD0028E8DBA4D075 +:1093A0006B68394630461893AB68199300231A4608 +:1093B000FFF7B5FE97E72DE9F04780468CB01046E1 +:1093C0000C461646FDF7FEFE0B6A143023F00043F0 +:1093D00083421DD101AA04314046FFF73CFD051E22 +:1093E00012DB099A002A13DA236A01A9404663F0C6 +:1093F000004313400993636A0A93A36A0B93002303 +:109400001A46FFF78CFE054628460CB0BDE8F087EB +:10941000336830460193FDF7D5FE0023029001AA80 +:1094200021464046CDE903330123FFF778FE054688 +:109430000028E9D1D8F80C70211D4FF0FF3ACFB9C0 +:10944000D8F81070211D002FDED0381DFFF732F93B +:1094500070B9FC6833689C420AD93046FDF7B2FE09 +:10946000201AF8603046FDF7ADFEBB69181AB861E6 +:109470003F68E8E7381DFFF71DF930B9D7F80C90C1 +:109480003368994503D1C7E901AA3F68D7E7FCD9FA +:109490003046FDF797FEA9EB0000F860F5E770B5E0 +:1094A000154688B00C26D27955F8044B002B07924C +:1094B0000094344403960494CDE9052314BF022399 +:1094C00001236A46CDE90165FFF729FE08B070BDAA +:1094D00070B592B006460D46FFF7BCFA044670BB65 +:1094E000EB6903F41023B3F5803F28D12A1D104601 +:1094F000FFF7F1F818BB07A93046FFF703F9044658 +:10950000E8B90C23EA680690009304AB089903922B +:10951000CDE904003046FFF7E8F8044678B92B6936 +:1095200003AA07A905936B69069303463046FFF724 +:10953000B6FF044618B9EB6923F48033EB6120468B +:1095400012B070BD2DE9F04F2DED028B85B01F6874 +:10955000054608EE101A029340F622031446DFF87F +:1095600040915360436893608368D36049463846AE +:1095700010F0E3FD07EB000883464946404610F033 +:10958000B8FD0128064608EB000A05D117F80B3094 +:109590002E2B0AD15746E9E7022806D102463F4959 +:1095A000404610F0CDFC0028F4D057464FF0010B98 +:1095B0004946504610F0C1FD82444946504610F0DD +:1095C00098FD024690B102280CD1039050463349D1 +:1095D00010F0B6FC039A28B9BBF1010B04D10AF1D3 +:1095E0000207C3E70BF1010B9244E1E798F8000092 +:1095F000002846D0029BC3F800802379222B4AD151 +:1096000004F1080A18EE101A28465246FFF77AF8B5 +:10961000002836D105F1140B224618EE101A284600 +:10962000FFF744FC68BB237903F07F03112B01D0C3 +:10963000222BF1D1E379B342EED123685946627906 +:10964000284604331344A279134418EE102ACDE9B6 +:1096500000865268F9F719FC002812DBDCD095F877 +:109660004130002B82D194F90430002BBFF67EAF3D +:1096700051462846FFF78AFC002807D001DB6FF02F +:10968000010005B0BDEC028BBDE8F08F237903F03B +:109690007F0323716AE76FF01300F2E7F4A6010875 +:1096A000F7A6010873B50C4604310646FFF714F916 +:1096B0000546F0B904F108013046FFF70DF90546FB +:1096C000B8B90423024661683046009304F11C03D4 +:1096D000FFF70BF810B110F1340F0DD1E36914222C +:1096E0000133E3614FF0FF33C4E90823A362102381 +:1096F000E360284602B070BD0546FAE72DE9F04365 +:10970000074695B00E469046994601F1240440461E +:10971000316AFDF757FD3B680844DB69984218D869 +:1097200004394346002243F8041B0991CDE90A237A +:109730000C23CDE90C3198F807303146CDE90E29DC +:10974000109309AA02233846FFF7E9FC15B0BDE8DB +:10975000F083002937DB354609AC0FCD0FC40FCDA0 +:109760000FC495E8070084E8070031463846FFF744 +:1097700099FF0028EAD1129B424631467362139B3F +:10978000B362336A043B42F8043B03920C22CDE9F6 +:109790000130CDE9042398F8073001AACDE9060984 +:1097A000089338460223FFF7BAFC0028CED1119B5C +:1097B000024609A943F00043119373681293B368FA +:1097C00013930346BFE7224631463846FEF79AFF19 +:1097D00000289CD0BAE783690239023B8B4283BFE1 +:1097E0004389C06A01FB030000207047F7B50546B6 +:1097F0000191FDF7ECFD0446E8B901992846FFF711 +:10980000EAFFAA89286306462146686B0FF03EF8F6 +:109810006F6B6B89A34208D90123321939466878E6 +:10982000FDF73AFD08B90134F3E76889001B18BF5A +:10983000012003B0F0BD0120FBE738B5036B0546FE +:109840000C468B420FD0FDF7C2FD58B922460123CA +:10985000696B6878FDF74AFD00281CBF4FF0FF34A4 +:1098600001202C6338BD0020FCE70129F8B504462F +:109870000E4664D98369994261D20378022B30D0B5 +:10988000032B45D0012B5AD101EB51058389416A45 +:10989000B5FBF3F31944FFF7D0FF10B14FF0FF30E1 +:1098A000F8BDA1896F1C2046B5FBF1F301FB1355F0 +:1098B000636BB7FBF1F15D5D636A1944FFF7BDFFB0 +:1098C0000028EBD1A289B7FBF2F302FB1373626BA2 +:1098D000D05CF30745EA00204CBF0009C0F30B0041 +:1098E000DEE783895B08B1FBF3F3416A1944FFF7B4 +:1098F000A4FF0028D2D1A2897600B6FBF2F302FBC6 +:109900001366636B9A19985D527840EA0220C7E7A4 +:1099100083899B08B1FBF3F3416A1944FFF78DFF7C +:109920000028BBD1A189B600B6FBF1F001FB10669F +:10993000606B3044FDF775FD20F07040B0E701200A +:10994000AEE72DE9F04F1E46036885B00C469B6FCD +:1099500082469146984703A92046FDF707FD054634 +:109960000746002840F0A380657C0DBB237C13F0E4 +:109970000103009300F09D80E3682F4662699B1A03 +:109980009E4228BF1E469EB1039862698389B2FB3E +:10999000F3F103FB1123002B69D14389013B0B40F9 +:1099A00001931ED18AB9A068012813D802256574D5 +:1099B000DAF800305046DB6F9847002D7CD02846FF +:1099C00005B0BDE8F04FFDF7AFBCA1692068FFF717 +:1099D0004CFFE9E7431C03D10123009D6374E7E7D3 +:1099E000A061DDF80CB0A1695846FFF7F4FE00282D +:1099F000DCD0019B03EB0008BBF80C309E4234D353 +:109A00000199BBF80A209BF80100B6FBF3F3194457 +:109A10009142494684BF019BD31A42460193FDF708 +:109A200065FC019B0028D7D1DDF80CB09BF8032022 +:109A30007AB1DBF83000A0EB0800834209D9BBF80B +:109A40000C20DBF8341000FB029001930EF010FFA5 +:109A5000019BBBF80C8003FB08F86369A6EB0806C2 +:109A60004744C144434463618DE7C4F81C800398B4 +:109A700062698389E169B2FBF3F803FB1828A3EB61 +:109A80000803B34228BF33469846FFF7D6FE0028A6 +:109A9000A2D1039A60699189B0FBF1F301FB130332 +:109AA000516B4846424619440EF0E2FED5E70027C6 +:109AB0007EE72F4607257BE7384605B0BDE8F08FE7 +:109AC00038B500230446C3704FF0FF330363FFF73C +:109AD000B4FE002851D1646B237894F8FF5194F8B8 +:109AE000FE01EB2B40EA052503D01833DBB2012B36 +:109AF0003CD84AF655239D4207D10822214904F15A +:109B0000520010F01DFA002836D0227BE37A43EA97 +:109B10000223A3F50072B2F5606F27D8607B28B3EB +:109B2000591E421E0B40024013431FD1E27BA37B10 +:109B300053EA02231AD0237C013B012B16D8A27CC6 +:109B4000637C53EA022311D0227DE37C43EA0223A3 +:109B50007F2B06D804F12000FDF763FCB0F5803FB1 +:109B600004D3E27DA37D53EA022308D14AF65520AF +:109B700085420CBF0220032038BD0420FCE70020F2 +:109B8000FAE700BFDFAC01082DE9F04F002687B0EF +:109B90000D4617460E60FDF7FDFB0028C0F251810F +:109BA000B04B53F82040002C00F04D812C602378FE +:109BB000BBB96070C0B2AC4D55F8200003689B681B +:109BC000984710F00106C3B240F03F8117F0FE0F36 +:109BD00002D05B0700F13B81607855F8203023B953 +:109BE0000126304607B0BDE8F08FFDF745FBA0F534 +:109BF0000072A081B2F5606FF2D8421E0242EFD12E +:109C0000636B002B00F0F28000212046FFF758FF25 +:109C1000022840F0FD80656B02AF05F5E371B846A0 +:109C200005F206250846FDF7FCFB103148F8040B49 +:109C30008D42F7D1002557F8041B002900F0DE8083 +:109C40002046FFF73DFF012800F2D980656BB4F88C +:109C50000C902A7BEB7A43EA0223994540F0D680A8 +:109C6000E87DA97D51EA002104D105F12400FDF72A +:109C7000D8FB0146E16195F810A0D4F830B00AF1A4 +:109C8000FF3384F802A0012B00F2C0806B7B63815C +:109C9000002B00F0BB805A1E1A4240F0B780AA7C0D +:109CA00095F8118048EA02280FFA88F2A4F8088093 +:109CB00000924FEA5912B8FBF2F702FB178292B2F8 +:109CC000002A40F0A3802A7DE87C50EA022005D1DA +:109CD00005F120000193FDF7A4FB019B95F80FC04F +:109CE000AA7B52EA0C2200F0918001FB0AFC174487 +:109CF00007EB0C0E7045C0F08980A0EB0E00984277 +:109D0000B0FBF3F7C0F08280584B9F427ED84FF6ED +:109D1000F5739F4240F29D804FF0030A02375A4488 +:109D20000BEB0E03BAF1030FA761C4F820B0626217 +:109D3000E36274D195F82B2095F82A3043EA022388 +:109D4000009A1A4313B2002B60D1BF0005F12C001A +:109D5000FDF767FBA06209F1FF331F44B7FBF9F978 +:109D6000894553D84FF0FF33BAF1030FC4E90433E8 +:109D70004FF08003237130D195F8312095F83030C1 +:109D800043EA0223012B28D10BF101012046FFF702 +:109D900054FD10BB616B207191F8FF2191F8FE31E9 +:109DA00043EA02234AF65522934216D10846FDF7AC +:109DB00038FB2F4B984210D101F5F270FDF731FBC3 +:109DC0002C4B984209D101F5F470FDF72AFB606134 +:109DD00001F5F670FDF725FB2061274A84F800A005 +:109DE000138801339BB21380E380FAE60EF0DCFCAB +:109DF000606300287FF408AF1126F2E603200135E6 +:109E0000042D7FF418AF04283FF4EAAE0D26E8E6EF +:109E100004283FF4E5AE01287FF618AFF6E7B8F165 +:109E2000000FF3D0BAF1020F4FEA470362441ABFA2 +:109E3000DB1907F001071F46A26218BF07EB5307A3 +:109E400089E70B26CDE60C26CBE60326C9E60A26D3 +:109E5000C7E640F6F57A57458CBF4FF0020A4FF03F +:109E6000010A5BE740140224F4140224F5FFFF0FFB +:109E700052526141727241613C1402242DE9F74F44 +:109E8000154680462822002128460EF0FFFCD8F80F +:109E9000003040469B6F984708F14C03002201A90F +:109EA00068460093FFF770FE0646044600286ED110 +:109EB000DDF80490D9E9057AAAF102039F421CD982 +:109EC00099F80060012E35D14FF0020A074651463D +:109ED0004846FFF7CAFC431C59D0012856D000B9A8 +:109EE0000137019B0AF1010A9B699A45EFD3019B57 +:109EF0001A795F6142F001021A71B9F80C3000243E +:109F0000D9F818204046C5E90033023AB9F80A30BA +:109F10005A435F430C236B62D8F80030C5E9022432 +:109F2000DB6FC5E90474C5E906749847204603B0A1 +:109F3000BDE8F08FD9F8241007463CB9019801F12B +:109F4000010BFFF77AFC064608BB5946019E3278A2 +:109F5000736B022A03EB04000FD11B5D02344278BD +:109F600053EA022308BF0137B389BAF1010AB4FBEF +:109F7000F3F203FB1244E0D1B9E7FDF752FA30F0F7 +:109F8000704304F1040408BF0137EDE70226D8F856 +:109F900000304046DB6F9847304603B0BDE8F04FD5 +:109FA000FDF7C2B97FB5CDE9001003A814460391AF +:109FB000FDF7F0F9051E19DB0D4E56F8252022B1EC +:109FC0000023506B13700EF0F7FB019B13B10022BE +:109FD0001A705A6346F825302CB1002201A9684650 +:109FE000FFF7D2FD0446204604B070BD0B24FAE70B +:109FF00040140224F8B5036804469B6F9847236D0C +:10A00000013307D123686FF015052046DB6F9847B1 +:10A010002846F8BD002204F14C01104F1046FFF70E +:10A02000C1FF236D064657F823000368DB68984795 +:10A030002368054618B1DB6F20469847E8E7226D94 +:10A04000DB6F47F822004FF0FF3220462265984729 +:10A050003046BDE8F840FDF767B900BFF4140224AC +:10A06000084B10B503608C3304464360FFF7C2FF12 +:10A07000054B204623602C3340F8043F07F076FF61 +:10A08000204610BD68A9010804AA0108A0F1040037 +:10A09000FFF7E6BF10B50446FFF7E2FF20460EF0DB +:10A0A0008BFB204610BDA0F10400FFF7F3BF0000BA +:10A0B000036873B504469B6F01920D469847236D64 +:10A0C000019A013307D023682046DB6F98476FF071 +:10A0D000150002B070BD16480023064650F8041B58 +:10A0E000D9B946F8235004F114002365303384F8BD +:10A0F0004E1004F14C0184F84C303A2384F84D3072 +:10A10000FFF750FF236805462046DB6F9847284637 +:10A1100002B0BDE87040FDF707B90133042BDDD173 +:10A1200023682046DB6F98476FF00B00D1E700BF34 +:10A13000F414022401292DE9F84304460E4617467B +:10A1400040F2838083698B427FD90378022B45D00C +:10A15000032B5AD0012B78D101EB51098389416A35 +:10A16000B9FBF3F31944FFF768FB054660BBA3890D +:10A1700016F00106606B09F10108B9FBF3F203FB6D +:10A1800012920FBFFBB2835C03F00F013B011CBFB7 +:10A1900003F0F0030B4383540123616A2046E3700C +:10A1A000A389B8FBF3F31944FFF747FB054658B9F9 +:10A1B000A389616BB8FBF3F003FB10803EB1C7F3DA +:10A1C00007170F540123E3702846BDE8F8830B5CA2 +:10A1D000C7F3032723F00F031F43F2E783895B08CC +:10A1E000B1FBF3F3416A1944FFF727FB054600284A +:10A1F000EAD1A2897600B6FBF2F302FB1366636B29 +:10A200009F5598193F124770DCE783899B08B1FB83 +:10A21000F3F3416A1944FFF710FB05460028D3D138 +:10A22000A389B60027F07047B6FBF3F103FB116179 +:10A23000666B0E443046FDF7F4F800F0704047EAD4 +:10A2400000013046FDF7E5F8BCE70225BCE72DE943 +:10A25000F041804605680F4649B92E69C6B1AB6921 +:10A26000B34298BF01266B69A3B9002406E02846D3 +:10A27000FFF7FBFA0128044603D801242046BDE875 +:10A28000F081421C51D0AB698342F7D83E46EAE7E1 +:10A290000126E8E7BE4215D1AB69741CD8F800006E +:10A2A000A34298BF02242146FFF7DFFA0128E4D039 +:10A2B000431C3AD0D8B12B69012B03D9AA69934228 +:10A2C00038BF1E4634460134AB69A34202D8012E82 +:10A2D000CBD902242146D8F80000FFF7C6FA40B1D6 +:10A2E0000128CAD0013020D0B442ECD1BDE7002C07 +:10A2F000E8D04FF0FF3221462846FFF71BFF90B908 +:10A3000057B92C61D5E90532023A934210D92B791D +:10A3100043F001032B71B1E7224639462846FFF787 +:10A3200009FF0028EDD00128A7D14FF0FF34A5E7A1 +:10A33000013B6B61EBE72DE9F3410D4601A90446B2 +:10A34000FDF714F80646002863D1667C002E60D124 +:10A35000E368AB4204D2227C12F0020F08BF1D4614 +:10A36000002263696261B5B90020E26863699342C3 +:10A3700081BF227CE36042F040022274019A9189FD +:10A38000B3FBF1F201FB1233002B42D0E3698342AD +:10A3900018BFE0613DE0019A518997894F4373B33B +:10A3A000013B6A1EB3FBF7F1B2FBF7F28A4226D3F8 +:10A3B0007A42A1691340ED1A63610029D4D0BD42ED +:10A3C00063690CD93B44A5EB07086361237C9A07BA +:10A3D0002AD52046FFF73BFF054648BB0146636987 +:10A3E00001982B4463618389B5FBF3F203FB12559B +:10A3F000002DB9D0FFF7EFF948B11044B5E7A168D7 +:10A4000081B92046FFF723FF0128014605D1022626 +:10A410006674304602B0BDE8F081481C01D10126C7 +:10A42000F6E7A160A161C8E72068FFF71EFA0546BC +:10A430006B1CF4D0012DEAD9019B9B69AB42E6D994 +:10A440002946A5614546BAE7F8B51F4603680646A2 +:10A450000D469B6F14469847022F11D1EB681C44A0 +:10A4600021462846FFF767FF336804463046DB6F16 +:10A470006D69984744B12046BDE8F840FCF754BFE9 +:10A48000012FEDD16B69EAE72846F8BD2DE9F041CF +:10A4900007690446884606682037B7F5001F24BFC1 +:10A4A00000238361836983B1B289B7FBF2F002FBB9 +:10A4B0001072002A38D101336169A36139B9338937 +:10A4C000B3EB571F30D80023A36104200AE073893F +:10A4D000013B034228D13046FFF7C7F90128054662 +:10A4E00002D80220BDE8F081421C01D10120F9E729 +:10A4F000B369834212D8B8F1000FE4D061692046F5 +:10A50000FFF7A5FE0546D0B10128EAD0431CEDD0E7 +:10A5100001463046FFF76AF90028E7D12946304660 +:10A520006561FFF758F9A061B28900202761B7FB88 +:10A53000F2F302FB1373776B1F44E761D2E7072046 +:10A54000D0E737B50D4601A90446FCF70FFF18B94F +:10A5500020461DB9F8F73AFC03B030BDF8F76AFCA5 +:10A5600010F0FB03F8D16B72A3691BB1294620469A +:10A57000FCF75FFF00212046FFF788FF042808BF93 +:10A580000020E9E7036870B50D4604469B6F9847C5 +:10A5900028460021FFF7D5FF23682046DB6FBDE882 +:10A5A000704018470368F0B516460F6987B09B6F77 +:10A5B00005460C469847B74209DD00212046FFF7C3 +:10A5C000C0FF2B682846DB6F984707B0F0BDB74245 +:10A5D000F7DA69462046FFF7B4FF27690028F0D173 +:10A5E0009DF80930002BF2D1EBE7036870B50E46F9 +:10A5F00086B004469B6F1546984730466946FFF77C +:10A60000A0FF236806462046DB6F98472EB13046F0 +:10A6100006B0BDE87040FCF787BE9DF8090078B130 +:10A620009DF808300C220DF10901284613F0100F97 +:10A6300014BF0323052385F800310FF06BFD0120C3 +:10A6400006B070BD2DE9F74F0446D0F800900D46D6 +:10A6500011F8013B2F2BFAD05C2BF8D00023A3601C +:10A660002B781F2B25D904F120074FF0203BC5F193 +:10A67000020305F1FF3A00264FF008080093514A03 +:10A68000514BC7F804B0C7F800B0C7F807B000993D +:10A6900001EB0A001AF8011F20292ED92F2901D019 +:10A6A0005C290FD12B5C2F2B01D05C2B25D10130E5 +:10A6B000F8E78023204684F82B3003B0BDE8F04F44 +:10A6C000F8F784BB2E2976D0B04572D90806184613 +:10A6D00044BF01F07F01515C01910FF0FDFC0028A7 +:10A6E00067D10199384BA1F16100364A19289CBF06 +:10A6F0002039C9B2B9550136C9E70544002E58D0F2 +:10A7000094F82030E52B04BF052384F8203020295D +:10A7100028D92B78212B34BF04230023204684F82A +:10A720002B30D4F80080F8F751FB0646E8B9A16950 +:10A730004046FFF782F80646B8B9E06903789BB156 +:10A74000C37A03F03F03A371C67A16F0080604D15A +:10A750000B2239460FF0F4FB38B100212046FFF7F9 +:10A7600095FEE2E70423D9E7042694F82B304EB196 +:10A77000042E03D113F0040F08BF0526304603B0A2 +:10A78000BDE8F08F5A07F9D4A379DB060FD5B9F8E5 +:10A790000C10226999F80000B2FBF1F301FB1323BE +:10A7A000D9F834101944FCF7D2FDA0605FE7052604 +:10A7B000E4E70626E2E7B8F10B0FFAD008264FF0DF +:10A7C0000B0864E713AD0108E8AC010870B5054655 +:10A7D0000668F8F7FBFA044648BBA9693046FFF75C +:10A7E0002CF8044618BBEB691B78E52B18D1A96936 +:10A7F0003046FFF722F8044680B920220146E86976 +:10A800000EF044F8EB6955F8202F1A606A685A6018 +:10A810002A891A81AA7A9A720123F370204670BDA0 +:10A82000002BE4D001212846FFF730FED3E7042CAB +:10A8300008BF0724F2E700002DE9F74F0C468046D9 +:10A8400011460568012C5AD9AB69A34257D962B9A0 +:10A850002746DFF8B4902146D8F800002646FFF7D7 +:10A8600004F8044658B9002006E04FF0FF322846AD +:10A87000FFF760FC0028EBD003B0BDE8F08F0128A3 +:10A880003DD0431C3DD0002231462846FFF752FC04 +:10A890000028F1D1D5E90532023A934205D20133BD +:10A8A0006B612B7943F001032B71731CA34222D0FF +:10A8B00095F801B059F82B30E3B139462846FEF738 +:10A8C0008AFF314682462846FEF785FF6F89064695 +:10A8D0005846FCF7D1FC02463E4459F82B00A6EB43 +:10A8E0000A060368A6FB0267CDE90067196AA2FBA6 +:10A8F0000A2388472746AB69A342ACD8B3E70220B6 +:10A90000BAE70120B8E700BFF41402242DE9FF41A3 +:10A9100003680C46019206469B6F984701992046B2 +:10A920006769FFF708FD054648B133683046DB6FBD +:10A930009847284604B0BDE8F041FCF7F5BC03A9F0 +:10A940002046FCF713FD05460028EED1657C002D5E +:10A95000EBD1237C9A0701D40725E6E7D4F81480CD +:10A96000E368984508D320463946FFF7E4FC0446DF +:10A9700070BB04B0BDE8F081B8F1000F11D12A46D8 +:10A98000A1682046FFF758FF0546C4F808806369B0 +:10A99000E360237C43F040032374002DE3D065740F +:10A9A000C3E7A1692068FEF760FF431C01460BD096 +:10A9B00001280BD0039B9B699842E8D2A2692046EC +:10A9C000FFF73AFF0546E2E70125E0E70225DEE76B +:10A9D00033683046DB6F98472046ABE770477047D7 +:10A9E000034B10B504460360FDF728FA204610BD5E +:10A9F00008A9010810B50446FFF7F2FF20460DF044 +:10AA0000DBFE204610BD000008B5036A013B03626F +:10AA100000680AF05BFA014630B1044B1B78DBB2E8 +:10AA200013B90348F7F7F8FF08BD00BF440B022431 +:10AA30001701028008B5034807F0A0F9BDE80840F7 +:10AA4000FFF7E2BFCC14022410B504460068FCF7FF +:10AA500081FB014618B9236A0133236210BD044B00 +:10AA60001B78DBB2002BF9D10248F7F7D5FF00BF06 +:10AA7000440B02241501028008B5034807F07EF953 +:10AA8000BDE80840FFF7E0BFCC14022413B5154C15 +:10AA9000204607F073F9FFF7D7FF204607F06EF95D +:10AAA000FFF7B2FF4FF0FF324FF0FF336846CDE9BA +:10AAB00000230DF007FDD0E90232DB0243EA024336 +:10AAC000426843EA4213026802EBD27243EA62032D +:10AAD00042690069503A013043EA426343EA405018 +:10AAE00002B010BD50140224F7B501A90546FCF7C9 +:10AAF0003DFC044660BB2C7C14F0400428D0FFF7DA +:10AB0000C5FF296A07460198FEF797FE0446F8B983 +:10AB10006E6AF37A314643F02003F372AA6828681C +:10AB2000FCF70AFCE96806F11C00FCF772FC3946E8 +:10AB300006F11600FCF76DFC01230198B474F4745F +:10AB4000C370FDF761F82B7C044623F040032B749F +:10AB5000204603B0F0BD38B503680D4604469B6F30 +:10AB600098472846FFF7C0FF236805462046DB6F5D +:10AB700098472846BDE83840FCF7D6BB2DE9F04F92 +:10AB80001E46036885B00D469B6F824691469847E6 +:10AB900003A92846FCF7EAFB04460746002840F0D4 +:10ABA000D6806C7C5CBB2B7C9A0740F1D2806B69B1 +:10ABB0000027DE42009728BFDE43002E00F0BB8056 +:10ABC00003986A698389B2FBF3F103FB1123002B1D +:10ABD00040F08D80B0F80A8008F1FF3818EA0108CB +:10ABE00025D1D2B9A86830B901462846FFF72FFB16 +:10ABF000002800F0A080012811D102246C74DAF83A +:10AC000000305046DB6F9847002C00F0A5802046AE +:10AC100005B0BDE8F04FFCF787BBA969E5E7431C29 +:10AC200001D10124EAE7AB68A86103B9A8600398E1 +:10AC3000EB69026B9A4247D0DDF80CB0A96958461F +:10AC4000FEF7C9FD0028D8D0BBF80C3008EB000295 +:10AC50009E423ED3BBF80A10B6FBF3F308EB0300A9 +:10AC600088429BF8010088BFA1EB08034946CDE963 +:10AC70000023FCF711FB8046DDE900230028D0D13A +:10AC80000398016B891A8B420AD98289406B02FBB7 +:10AC9000019100930DF0ECFD039A009B82F8038074 +:10ACA000039AB2F80C8003FB08F8012300936B6948 +:10ACB000A6EB0806EA6847444344C1446B619A42E4 +:10ACC0002CBFEA60EB6078E7FCF781FB0028B3D08B +:10ACD000A7E76969EB68994208D358460192FCF7E7 +:10ACE00076FB019A00289CD1039B1A63EA610398C2 +:10ACF0006B69B0F80C80E969B3FBF8F208FB12321B +:10AD0000A8EB0208B04528BFB046FEF796FD002824 +:10AD100087D1039A69699089B1FBF0F300FB1313A3 +:10AD2000506B4946424618440DF0A2FD039B4FF07C +:10AD30000102DA70BBE72B7C43F040032B74009BCD +:10AD4000002B3FF45CAF2846FFF7CEFE57E7002705 +:10AD500055E72746072452E7384605B0BDE8F08F8F +:10AD6000036873B50D469B6F064698472846FFF764 +:10AD7000BBFE044630B901A92846FCF7F7FA0446A1 +:10AD800000B9286033683046DB6F984715B1284614 +:10AD90000DF012FD204602B0BDE87040FCF7C4BAC9 +:10ADA000F0B50E4685B090F8201005461446DDE952 +:10ADB0000A7C19B96FF47A6005B0F0BD0168CDE97D +:10ADC000007CC96B88470028F4D029690D486118B8 +:10ADD000039106F0D3FFFFF737FE02F0A7FB02F066 +:10ADE00081FB3A46039930460DF042FD02F068FBC4 +:10ADF00002F08AFB034806F0C1FFFFF705FE0020C2 +:10AE0000DAE700BFA414022410B5044604300AF0A7 +:10AE100014F904F15400FFF717FE0023206C63615E +:10AE2000012384F83D30BDE8104009F089BF0000DF +:10AE30001FB5002304460362074B0093031D6846B9 +:10AE400002931C2303930B2301930AF053F8206011 +:10AE5000204604B010BD00BF02A701080CB41FB506 +:10AE600006AB002453F8042B00940393FDF704F978 +:10AE700004B0BDE8104002B0704700000FB41FB529 +:10AE8000084906AB0020096853F8042B896803932E +:10AE900000916FF00041FDF7EFF805B05DF804EBAD +:10AEA00004B070473C030024F0B50C468BB0064656 +:10AEB00024B93260046130460BB0F0BD10460192F7 +:10AEC0000EF0D8FA043002F071FA3A233034054615 +:10AED00043702F230470033000F8013C374601997A +:10AEE00006AC0EF0BFFA084B002247F8045B05934E +:10AEF000064B029302ABCDE903220FCB84E80F008F +:10AF000087E80F00D7E700BF09720008E97B000857 +:10AF1000F0B506468BB02C200F46019202F046FA9F +:10AF2000019A0546316D05A8FFF7BEFF336830462C +:10AF30009B6F9847059B0393002D3DD0002204A9E9 +:10AF400003A8FEF721FE044680B9049B2846039916 +:10AF50002B60FFF777FB0446002831D195F92B30A1 +:10AF6000002B0CDBAB79DB0603D4052400232B601C +:10AF700010E0049BE9691878FCF7E9F9A860049BE4 +:10AF80002846DB88AB80F7F721FF04280446ECD085 +:10AF90000028EBD133683046DB6F984774B1284600 +:10AFA0000DF00AFC2046FCF7BFF9044605A8FCF7A3 +:10AFB0002EF920460BB0F0BD0924EBE73D60F5E724 +:10AFC0000428D2D0D2E72DE9F047054694B01C46BC +:10AFD00028200E46019202F0E9F9019A296D0746F0 +:10AFE00004A8FFF761FFA10756BF04F001084FF066 +:10AFF000030808F10108A20505D563054CBF48F018 +:10B00000080848F010082B68200728469B6F48BFA7 +:10B0100048F030089847049B029397B909242B689D +:10B020002846DB6F984738460DF0C6FB2046FCF7F4 +:10B030007BF9044604A8FCF7EAF8204614B0BDE802 +:10B04000F087424603A902A8FEF79EFD04460028A9 +:10B0500055D1039B09A802990993FFF7F3FA044617 +:10B0600020B99DF94F30002BB8BF062418F01C0FF3 +:10B0700000F09880002C45D0042C40D109A8FFF79F +:10B08000A5FB044600283AD148F00808FFF7FEFC6B +:10B090000146019010980E30FCF7BBF91098019909 +:10B0A0001630FCF7B6F9039C10992078FCF74FF99D +:10B0B000202300228146CB7220461099FCF73CF9F0 +:10B0C000109B002201211A775A779A77DA77039B2F +:10B0D000D970B9F1000F70D0494609A8D3F830A053 +:10B0E000FFF7AAFB044650B951460398FEF7A5FBAB +:10B0F00009F1FF33039A0446136100285DD0002351 +:10B100003B608CE79DF82A3013F0110F61D118F0E5 +:10B11000080FBBD1039CDDF84090236B4946C7F86C +:10B1200024903B622078FCF712F90146B86009F1DF +:10B130001C00FCF776F9E38818F0200F8146BB80ED +:10B140004FF00003F8603C6087F810807B74FB616F +:10B150007B6120D0F8B16389A48978615C434C4558 +:10B1600031D23868A9EB0409FEF77FFB01280146BC +:10B170002BD9431CF3D10124B961002CBFD1039812 +:10B180008389B9FBF3F203FB129323B1FEF723FB90 +:10B1900008B31044F8612B6828460024DB6F9847F9 +:10B1A000376047E7002CAAD19DF82A30D9060ED483 +:10B1B00018F0020F01D0DA070BD418F0080F18BFEF +:10B1C00048F04008A6E70024D6E70224D4E7042488 +:10B1D00095E7072493E7022491E770B598B00546F8 +:10B1E00016460A46016D02A8FFF75EFE2B68284648 +:10B1F0009B6F98471822002107A80DF047FB029B80 +:10B2000000220DA901A80193FEF7BEFC044650B927 +:10B2100001990DA8FFF716FA044620B99DF95F3091 +:10B22000002B0EDA06242B682846DB6F9847204651 +:10B23000FCF77AF8044602A8FBF7E9FF204618B0AD +:10B2400070BD139B8DF825001BB107A90DA8FCF755 +:10B25000F0F89DF8242040F2FF11079B284612F0D9 +:10B26000100F4FF00004336114BF4FF480434FF4CC +:10B27000004312F0010F40F26D1208BF0A4613435B +:10B2800073602B68DB6F9847D5E7F0B597B005463C +:10B290000A46016D06A8FFF707FE2B6828469B6F3C +:10B2A0009847069B022201A968460093FEF76CFCB2 +:10B2B0000446064600286AD1019B0BA800990B930F +:10B2C000FFF7C0F90446002879D004285FD1019B1C +:10B2D000314602A80293FEF7BAFF0446002864D064 +:10B2E000012864D0431C5F425F41FFF7CFFB064655 +:10B2F000002F5ED121460198FEF778FA002858D138 +:10B30000019B4FF0203210215B6B1A605A60C3F82A +:10B3100007202E22019B5B6B1A70019B5A6BD17226 +:10B320003146586B1630FCF774F801982246416B91 +:10B33000FCF702F80198436B03F12002114653F821 +:10B34000047B934241F8047BF9D1436B2E22012701 +:10B3500083F82120416B0D9A2031FBF7EDFF019B13 +:10B360000BA8DF70FFF732FA18BB1298314616307F +:10B37000FCF74FF8224601981299FBF7DDFF129B6C +:10B3800010220198DA72C770FCF73EFC04462B6865 +:10B390002846DB6F98472046FBF7C6FF044606A801 +:10B3A000FBF735FF204617B0F0BD07279DE70227C2 +:10B3B0009BE70022214602A8FFF73EFAE6E70824B1 +:10B3C000E5E770B5ACB0054614460A46016D09A81C +:10B3D000FFF76AFD2246296D04A8FFF765FD2B687B +:10B3E00028469B6F9847099B02A80193049B0293F0 +:10B3F000FBF7D0FF0028C0F2A680022203A901A813 +:10B40000FEF7C2FB0446002840F08C80039B16A880 +:10B4100001991693FFF716F90446002840F0828040 +:10B420009DF8833013F0A00F40F08F801D9B0EAC71 +:10B4300003F120061868083353F8041C2246B3426F +:10B4400003C21446F6D116AC21AE0FCC0FC60FCCFA +:10B450000FC694E8070086E80700029921A8FFF7C5 +:10B46000F1F8044648B9239A189B9A4203D1259AC9 +:10B470001A9B9A4203D0082454E0042852D121A8F0 +:10B48000FFF7A4F9044600284CD128990DF1450393 +:10B490000DF1550001F10D0253F8044B834242F8BF +:10B4A000044BF9D11888012610809B7893709DF881 +:10B4B0004330039CDA0658BF43F02003CB72E6709A +:10B4C000CB7ADB061ED5189A239B9A421AD0207895 +:10B4D000FBF73DFF01462046FEF77DF901460028B7 +:10B4E00035D02046FEF7A9F90446D8B90398416B38 +:10B4F00091F821302E2B05D1239A2031FBF71CFF28 +:10B50000039BDE70169E1C993046FEF796F90446A2 +:10B5100040B91D9BE5221A700123F3700398FCF7D4 +:10B5200073FB04462B682846DB6F98472046FBF7E1 +:10B53000FBFE044604A8FBF76AFE09A8FBF767FEBA +:10B5400020462CB070BD0B24ECE70624EAE7022469 +:10B55000E8E7F0B59FB005460A46016D03A8FFF77E +:10B56000A3FC2B6828469B6F9847039B022202A9E5 +:10B5700001A80193FEF708FB044680B9029B08A8C6 +:10B5800001990893FFF75EF8044640B99DF94B30E6 +:10B59000002B49DB9DF82670FA0710D507242B688D +:10B5A0002846DB6F9847072C40D02046FBF7BCFEAF +:10B5B000044603A8FBF72BFE20461FB0F0BD029CFB +:10B5C0000F992078FBF7C3FEFB06064612D4089FAE +:10B5D0000E993846FEF731F904460028DFD10F9B5B +:10B5E000E5221A700123FB70AEB90298FCF70CFB40 +:10B5F0000446D4E7159013A81394F7F7E7FB044625 +:10B600000028CCD113A8F7F715FC04460028C5D0B4 +:10B610000428C4D1DBE70246314608A8FFF70CF93D +:10B6200004460028BBD1E0E70624B8E76FF05904D0 +:10B63000BFE700002DE9F34D00F11C03074653E876 +:10B64000002F013243E80026002EF8D1012A40F0F5 +:10B650008680786803689B689847064668BB786868 +:10B6600003685B6A9847422838BF4220044601F0CD +:10B670009DFE80467868C4F5007203684146CDE9B6 +:10B6800000465D693346A847064698B9A4F14203CF +:10B6900008EB030595F84030552B64D195F84130FF +:10B6A000AA2B60D17B7E05EB031313F8102C5206F6 +:10B6B00008D02E4E40460DF07FF8002387F820304A +:10B6C000FB614CE013F80C2C0F2A04D848F221033C +:10B6D000D340DB07EDD478684FF0000A0368DB6ADB +:10B6E00098477B7EB0F5007F03F1FF3338BF4FF4FE +:10B6F000007005EB03131A793A7653F8081F0A0A0B +:10B7000061F3070A62F30F2A0A0C090E62F3174A63 +:10B71000002261F31F6AA0FB0AABC7E902AB5B68BA +:10B72000190A63F3070261F30F22190C1B0E61F370 +:10B73000174263F31F62A0FB024578685246036814 +:10B74000C7E90445CDE90045596C5B4688470028A8 +:10B75000AFD00123404687F820300DF02DF8304659 +:10B7600002B0BDE8F08D024EA4E700BFE2F3FFFF98 +:10B77000E3F3FFFF70B51D4B0546044645F8543B07 +:10B780002846FFF761F9206C666909F0D9FA0023B1 +:10B79000636194F83D306BB9012384F83D304EB1BC +:10B7A000EFF3058333B908F04BFF18B93046DFF8E3 +:10B7B00040C000DF2846FFF727F994F83C302BB152 +:10B7C000A06A08B10CF0F8FF0023A362606D09F0D5 +:10B7D0004DFB256CEFF3058333B908F031FF18B941 +:10B7E0002846DFF810C000DF204670BD18AC010805 +:10B7F000652E0108352F010810B50446FFF7BAFF82 +:10B8000020460CF0D9FF204610BD00002DE9F0477E +:10B8100000238AB0814642F21078DFF85CA0012450 +:10B820000025002600278DF82730EFF305832BB97C +:10B8300008F006FF10B90120D44600DF0DF1270300 +:10B840004FF0FF320521484604930023CDE9064519 +:10B8500000934FF0FF33CDE9026700F084F89DF8C4 +:10B86000273013F0010002D0B8F10108DDD180F0DB +:10B8700001000AB0BDE8F08785340108F0B5002565 +:10B880008BB004468DF82750FFF7C0FF18B94FF072 +:10B89000FF300BB0F0BD0026002704954FF0FF32BB +:10B8A00000954FF0FF3306212046CDE90667CDE92C +:10B8B000026700F058F805460028E8D12046FFF757 +:10B8C000A5FF0028E3D00122002305212046009592 +:10B8D000CDE906230DF127034FF0FF3204934FF01B +:10B8E000FF33CDE9026700F03EF80028CFD19DF884 +:10B8F000270080F0020040F34000CAE770B51D4603 +:10B90000D0F8F43086B00646013317D0140E8DF807 +:10B910001740FFF7B3FF70B901234FF0FF32D6F89D +:10B92000F41000930DF11703CDE90100301DF9F774 +:10B93000BFFE06B070BD4FF0FF30FAE790F8FA3165 +:10B94000032B0ED06B1C08BFB2F1FF3F09D0002DB6 +:10B9500008BFB2F1807F2CBF4FF0FF30002040B213 +:10B96000E7E70020E5E72DE9F7430A9E0446154680 +:10B970000C9FDDF83880DDF840900191FFF7BEFFA5 +:10B9800058B933462A460199201D0A97CDE90B89FB +:10B9900003B0BDE8F043F9F78BBE03B0BDE8F08318 +:10B9A000D0F8E83001332DE9F047054688B08A46E3 +:10B9B0001DD1FFF763FF28B14FF0FF34204608B0D8 +:10B9C000BDE8F0870022002301210490CDF800A0FB +:10B9D000CDE90623D5F8E4304FF0FF32CDE902304F +:10B9E0004FF0FF332846FFF7BEFF0446E6E7FFF7B8 +:10B9F00045FF0028E0D14FF000084FF00009012674 +:10BA0000002704904FF0FF324FF0FF33012128460A +:10BA1000CDF800A0CDE90689CDE90267FFF7A3FFC5 +:10BA200004460028CAD12846FFF728FF0028C3D1C2 +:10BA30000AF101014FF0FF324FF0FF3304940091FF +:10BA4000D5F8E810CDE90689CDE90267CAE7F0B577 +:10BA5000012289B00023002600270C46049105210D +:10BA60000546CDE9062300234FF0FF3200934FF047 +:10BA7000FF33CDE90267FFF776FF98B9D5F8E430D8 +:10BA8000013B0FD0013400904FF0FF32D5F8EC109D +:10BA90000494CDE90630CDE902674FF0FF33284624 +:10BAA000FFF761FF09B0F0BDF0B500F1BC07044637 +:10BAB00089B03846FEF7C8FF94F804522DB93846CD +:10BAC000C4F80052FEF7A0FF09E0D4F80062013E7E +:10BAD000C4F8006236B100253846FEF795FF2846C7 +:10BAE00009B0F0BD002200230421204604960096F0 +:10BAF000CDE90623CDE902234FF0FF334FF0FF32AB +:10BB0000FFF731FF002884F8046238460CBF002597 +:10BB10006FF47A65FEF778FFD4F8B430002BDED1ED +:10BB20001048B4F9B84006F029F9FEF78DFF0E4B26 +:10BB30001B6803F114011A460233B2F90000A04257 +:10BB40000CD14FF6FF731380084A1368002B01DDF8 +:10BB5000013B1360034806F011F9B3E78B42EAD1C9 +:10BB6000F8E700BF78140224D0060024A0140224B1 +:10BB70002DE9F04700F1BC0788B004461546109E39 +:10BB8000384605938946FEF75FFF2A46059B204607 +:10BB9000D4F8E0A00796FFF7B1FEA0BB94F8FD3102 +:10BBA00004F1040894F8F9210393404694F8FE3117 +:10BBB000029394F8FB31CDE9002394F8FA3194F81C +:10BBC000F81106F039FA0646E8B994F8FB0107AB1C +:10BBD0005146B0FA80F04009CDE9009342422B462D +:10BBE0004046F9F7CDFC0546324631464046CDE9A0 +:10BBF0000266CDE9006694F8FA3106F01DFA45EACE +:10BC0000000464B20CB16FF47A643846FEF7FCFEAF +:10BC1000204608B0BDE8F0872DE9F04F92469B46DC +:10BC20008DB00446D0E944239B4508BF924528D2F5 +:10BC3000D0F828C1BCF1000F23D0BCF1010F0CD00B +:10BC400000F5B47E0025AC451BDDFEE80201594538 +:10BC500008BF504502D20135F5E70025611991F87A +:10BC60005411059116991AEB010617994BEB010730 +:10BC7000BB4208BFB24207D2614C20460DB0BDE8BE +:10BC8000F08F4FF0FF35E9E7236852462046196BE5 +:10BC90005B46884702460B46504659460EF0D2FC9A +:10BCA0001343E9D116F1FF3223682046196B47F19F +:10BCB000FF33884702460B46304639460EF0C2FC39 +:10BCC0001343D9D104F5E4730993DDE91623134333 +:10BCD00000F09480D4F81891B9F1FF3F59D11AF1CE +:10BCE000FF334FF008074FF003060A934BF1FF3381 +:10BCF0000B9305F1090304EBC3030893059B3B4237 +:10BD000024D0099B4FF000095046594653F826307D +:10BD10001A4698464B460EF095FC134316D1DDE9C2 +:10BD200016234B4508BF424510D30A9B13EB08036B +:10BD300006930B9B43EB09030793089BDDE9060180 +:10BD4000D3E948238B4208BF824203D2013E4FEA27 +:10BD50005707D3D204EB8606D6F8B891D6F8C86157 +:10BD600004F1BC074FF000083846FEF76DFE204690 +:10BD7000FFF784FD00283DD15B4652462046FFF781 +:10BD8000BDFD034640B16FF47A643846FEF73CFED1 +:10BD900073E74FF48056E3E7CDE901000090524687 +:10BDA0004946201DF9F784FC0028ECD11AEB060A5D +:10BDB000169B4BEB080B9B1B1693179B63EB08031F +:10BDC0001793DDE9162313430CD004EBC503D3E925 +:10BDD0005A235B4508BF52453FBF0135631993F8AD +:10BDE000543105932046FFF711FD28B13846FEF780 +:10BDF0000BFE6AE7034CC8E7034CC6E700243CE7A8 +:10BE00005BF0FFFF5CF0FFFF5DF0FFFF2DE9F04FFF +:10BE10001F4600F1080304460E46154600F1BC0813 +:10BE200000F104092DED028B08EE103A87B0DDE930 +:10BE3000122313437CD0D4F8F0314FF0000B284686 +:10BE400039469A461A4602935B460EF0FBFB12995E +:10BE50005118009113994B410193DDE900015945B7 +:10BE60004FF0000B08BF504540462ABF029B129B73 +:10BE70009B1A0293029B9A46CDE904ABFEF7E4FDC0 +:10BE80002046FFF7FBFC00284ED12A463B462046C1 +:10BE9000FFF734FD50B16FF47A644046FEF7B4FD0D +:10BEA000204607B0BDEC028BBDE8F08F94F89830C7 +:10BEB000002BF0D0002EEED0049B002BEBD0484698 +:10BEC00006F0B0F84FF0FF332A460221484602F050 +:10BED00077F904AB324604F16C0118EE100AF9F759 +:10BEE0007BFB0390484606F093F8039B002BD2D1CE +:10BEF000DDE904239B4508BF9245CCD1029B15EB9D +:10BF00000A0520461E44129B47EB0B07B3EB0A03BE +:10BF10001293139B63EB0B031393FFF777FC28B18A +:10BF20004046FEF771FD82E7024CB6E7024CB4E7EB +:10BF30000024B5E75CF0FFFF5DF0FFFF2DE9F04F57 +:10BF4000D0F8B4A005462DED028BB5B0BAF1000FC4 +:10BF50000CD0CB4ACB4BBAF1FF3F0CBF92469A466E +:10BF6000504635B0BDEC028BBDE8F08F00F1BC034C +:10BF7000184608EE903AFEF767FD2B1D52465146D3 +:10BF800008EE103A95F8FA3118EE100ACDE902AA37 +:10BF9000CDE900AA06F050F830B16FF47A6A18EED5 +:10BFA000900AFEF731FDDBE795F804320BB9C5F8CE +:10BFB00000A2D5F800420134012CC5F80042EED1B0 +:10BFC0000023D5F8F46185F8FB3185F8FD3195F84B +:10BFD0009830002BE1D018EE100A06F023F818EE86 +:10BFE000103A3146C5F89060181DFAF781F90646F7 +:10BFF00018EE100A06F00CF8002ECED12846FFF7F6 +:10C0000005FC002800F02C859F4F03220DF1800BCA +:10C010009F213B782846CDF810B08DF88030002362 +:10C020000096ADF88160CDE9062300220023CDE91A +:10C0300002234FF0FF324FF0FF33FFF794FC0997D4 +:10C040000028AAD19DF880309D2B00F0D98000F205 +:10C05000BE80012B00F0D7801F2B00F0E280002370 +:10C0600010ACDFF82CA229462046082600274FF006 +:10C070005A08B146C5E94233C5E94833CDE920A3A2 +:10C080009BE80C00F6F78CFE94E80F001CAC8BE8E4 +:10C090000F0001230022584603940296CDE9003890 +:10C0A000CDE904670023FBF73AFCB842CDF828A09D +:10C0B000C0F28A800422754920460DF041FF824675 +:10C0C000002840F081809DF87530012B7CD19DF8CF +:10C0D000763032460B933B4637461E460120CDF85C +:10C0E000048000905846CDE90476CDE90294CDE96C +:10C0F0000C32FBF714FC002866DB9DF87230012B34 +:10C10000089361D11D984FEA106CBCF1FF0FDDE977 +:10C110000C3214D19DF87010812900F09080842990 +:10C1200000F0978059B920F07F40C5F808019DF8CC +:10C13000730080005028A8BF5020C5F80C010832B9 +:10C140000B990AF1010043F10003514575DC0A9B8C +:10C1500014AE4FF00008294620933046CDF8848075 +:10C160009BE80C00F6F71CFE96E80F0084E80F0031 +:10C1700095F80231D5F80821002B74D02420002135 +:10C180005A274FF0080901264346CDF80CB0009617 +:10C19000CDE90401CDE901792046FBF7C0FB98B950 +:10C1A0000C220023CDE904232CAB6022CDE90293BD +:10C1B0000023CDE900672046FBF7B1FB824618B9A2 +:10C1C0009DF98730002B67DADFF8C8A0E7E6BF2BC0 +:10C1D00013D0C22B7FF443AF9DF88130202B1FBFBB +:10C1E000012385F800310323C5F8E4301523C5F891 +:10C1F000EC30002385F8F03031E785F803012EE7B5 +:10C20000C5F8E4402BE79DF88130022B7FF427AF7F +:10C210009DF88230202B7FF422AF012385F8013175 +:10C220001DE79DF88130892B7FF419AF3123C5F8C4 +:10C23000E830012385F8023111E782464EE720F00D +:10C240007F40C5F820019DF873008000C5F82401E7 +:10C2500075E720F07F40C5F8D8019DF87300800095 +:10C26000C5F8DC016BE7D5F80C110820CDF80CB04F +:10C27000CDE904135A21CDE90110012100919AE77B +:10C280005AF0FFFF59F0FFFFFCAC0108F7AC0108C2 +:10C29000C37C00085EF0FFFF219B95F8021101337B +:10C2A000DB08C5E94430D5F80C31282B89BF9DF84F +:10C2B000A8304FF480731A11012388BF9340C5F84A +:10C2C000F031002969D09DF8B43013F0080267D02E +:10C2D00000294FF000034FF000014FF000000493DD +:10C2E0004FF0FF3200934FF0FF33CDE90601CDE967 +:10C2F00002010CBFF02199212846FFF734FB0028EA +:10C300007FF462AF2846FFF781FA044600283FF425 +:10C310005BAFD5F80C011C2864D9012305F5DC714D +:10C3200005F5E4774FF0FF3C9E469BF81C2041F852 +:10C3300004CB0EFA02F2012ACA600FD99BF81D60E5 +:10C3400041F8046CD5F86061B24200D30EB9C5F86B +:10C35000602195F854211A4385F854215B008F42DF +:10C360000BF1020BDBB2E0D19DF882309F0640D585 +:10C370009DF88930C5F8E0309DF8883003F01F0241 +:10C380005B119B0085F8FD2185F8FB31022385F8C0 +:10C39000F931002485F8FE3144E09DF8BD3094E782 +:10C3A000DB067FF511AF0026002704924FF0FF3324 +:10C3B000009266214FF0FF322846CDE90667CDE9AD +:10C3C0000267FFF7D0FA00287FF4FEAE4FF0FF328D +:10C3D0004FF0FF33992104900090CDE90667CDE935 +:10C3E000026789E79DF88130FF2BC5F81831BBD172 +:10C3F000EAE610286BDD9DF89020D60667D59DF8FB +:10C400009B30C5F8E0309DF89A3003F01F025B11B5 +:10C410009B0085F8FD2185F8FB31022385F8F93171 +:10C4200085F8FE3195F8003193B3099B002218EE90 +:10C43000100A1B781146ADF861208DF86030022398 +:10C44000CDE90222CDE9002205F0F6FD00BB18A9D6 +:10C450002846FFF7FCFAD8B99DF86230284643F029 +:10C4600002038DF86230FFF709FA88B918A9284647 +:10C47000FFF796FA064658B92846FFF7C7F938B1CC +:10C4800018A92846ADF860608DF86260FFF7DFFA02 +:10C49000099B1A780023ADF83D30ADF8613095F86E +:10C4A00002318DF83C208DF86020002B40F0C080D8 +:10C4B0009DF8BA30C3F30213013B042B00F2FE8057 +:10C4C000DFE813F0B60022012701B600B6005806D7 +:10C4D0000ED59DF88B30C5F8E0309DF88A3003F01A +:10C4E0001F025B1185F8FD2185F8FB31022350E71F +:10C4F0009DF89020D1077DD59DF89730C5F8E030A4 +:10C500009DF8963003F01F025B115B0085F8FD215A +:10C5100085F8FB31012385F8F93185F8FE3195F86E +:10C52000F030BBB1D5F80C313F2B13DD9DF8BF3097 +:10C5300013F0400200F05F8103234FF0000B85F8F9 +:10C54000FA3195F8FA31032B00F0E281BBF1000FCC +:10C550007FF43AAE2846FFF759F900283FF434AE8D +:10C560000A9B18AE4FF0000B0DF18008294620936E +:10C57000CDF884B030461CAC98E80C00F6F710FCFF +:10C58000D5F8209196E80F0084E80F00B9F1000F6C +:10C5900004D0D5F82461002E40F0C8810123C5F8ED +:10C5A0002831D5E94432C5F82C3113F1FF3342F17B +:10C5B000FF32C5E95A32D24B28461B788DF88030BD +:10C5C0000023ADF88130FFF721F900283FF4FCADDE +:10C5D00095F80341002C00F00C82012C00F024821D +:10C5E0002846FFF713F900283FF4EEAD012385F844 +:10C5F0000432D4E4DA0606D59DF88F30C5F8E03071 +:10C600009DF88E307EE7DB070ED59DF88D30C5F89E +:10C61000E0309DF88C3003F01F025B1185F8FD219E +:10C6200085F8FB31012378E70323C5F8E03076E78E +:10C630000123C5F8F830C5F8FC30D5F8F8305F1C98 +:10C6400009D0D5F8FC104E1C05D034AA13440122A1 +:10C650008A4003F8942C18A92846FFF7F8F99DF8AA +:10C6600062309DF83E202846BDF83C101343BDF8CB +:10C6700060209DF83C700A4318A99DF83D60ADF814 +:10C6800060208DF86230FFF78BF92846FFF7BEF87F +:10C6900000283FF499AD002318A92846ADF8603072 +:10C6A0008DF86230FFF7D3F99DF860301F409DF898 +:10C6B00061301E4057EA06033FF486AD002C3FF47C +:10C6C0002EAF9DF8B9309DF8B8201B0103F0100380 +:10C6D00043EA1213082B67D038DC022B24DC002B32 +:10C6E0003FF41DAF0021002300204FF0FF320493E0 +:10C6F00000934FF0FF33CDE90601CDE90201382167 +:10C700002846FFF730F90AE70023C5F8F83006237A +:10C7100091E707234FF0000C4FF03E0EC5E93EC3F2 +:10C720003F23C5E93AE388E7042B7FF4F8AE002104 +:10C73000002300204FF0FF32049300934FF0FF33AB +:10C74000CDE90601CDE902013521D9E7102B7FF4AF +:10C75000E6AE0126002718AC4FF000084FF00009A4 +:10C760004FF0000B4FF0FF324FF0FF3365212846AA +:10C770000494CDF800B0CDE90667CDE90289FFF752 +:10C78000F2F89DF860304FF0FF32612103F07F0333 +:10C790000494CDF800B08DF860304FF0FF33CDE950 +:10C7A0000667CDE90289ABE70126002718AC4FF0F8 +:10C7B00000084FF000094FF0000B524A002365219A +:10C7C00028460494CDF800B0CDE90667CDE902898A +:10C7D000FFF7C9F89DF860304A4A712143F04003E1 +:10C7E0000494CDF800B08DF860300023CDE90667E1 +:10C7F000CDE9028984E7D80711D5002000210492F1 +:10C800000092CDE90601CDE902014FF0FF324FF071 +:10C81000FF33B7212846FFF7A6F860BB8CE613F07C +:10C8200002020DD02846FFF729F8002865D1002222 +:10C83000002304900090CDE90623CDE90223E4E72C +:10C8400013F0100139D00126002718AC4FF0000872 +:10C850004FF000098DF8602000924FF0FF334FF049 +:10C86000FF32B52128460494CDE90667CDE9028957 +:10C87000FFF779F810B1DFF890B062E69DF860300C +:10C88000284643F001038DF86030FEF7F7FF83463A +:10C8900098BB04904FF0FF324FF0FF33B121284690 +:10C8A0000094CDE90689CDE90267FFF75CF800281E +:10C8B000E1D1032385F8FA3143E613F0080013D0E1 +:10C8C00080230022049117218DF860300023CDE9E8 +:10C8D000062301220023CDE9022318AB4FF0FF32DB +:10C8E00000934FF0FF3395E713F0040B4FF0020372 +:10C8F000E0D0C522C5F8F4201FE6DFF810B020E62E +:10C90000FCAC0108030080005EF0FFFF5CF0FFFF5D +:10C91000002218EE100A1146CDE90222CDE90022CC +:10C9200005F08AFB00283FF411AE4DE430460BF0D1 +:10C930003BFF074600283FF447AC5A2308210390E9 +:10C940004A462046CDE901310123CDE9046B00932D +:10C950005B46FAF7E4FF002840DB3E78D5F82491E7 +:10C9600016F0020694E80F0088E80F0040F0BD8042 +:10C97000B9443C460FA90834A1452FD314F8063C0E +:10C980004FF0000C14F8052C4FF0010B03F00F00D2 +:10C990009B09099254F8042C03910290CDE904BC40 +:10C9A00014F8070C0093002301904046FAF7B7FFF4 +:10C9B000002813DB9DF83C307600099A0FA9F6B2E7 +:10C9C0001A4214F8082C237818BF46F00106D20743 +:10C9D00003F0020300F18B80002BCCD04FF0FF342A +:10C9E0007CE0089901334900042BC9B208916AD14F +:10C9F00074E02846FEF742FF00287FF4E5AB0022F2 +:10CA000000230490982100902846CDE90623CDE923 +:10CA100002234FF0FF324FF0FF33FEF7A4FF002850 +:10CA20003FF4DEADFFF7D0BB20A92846FFF70FF893 +:10CA300000287FF4C9ABD5F8F8307BB9D5F8FC30C5 +:10CA40009C4044F00304E4B29DF8803020A92846BD +:10CA50001C408DF88040FEF7A3FFE0E70324F3E7D6 +:10CA6000DFF8C4A0FFF79BBA0CF101030A2BC5F84D +:10CA70002831B3DC6FF4AA79043405F5967805F50E +:10CA8000AA7605F5B47E00210F22A9EB05092368DB +:10CA900014F8040B23F0FF0300F00F0003F580737C +:10CAA000024048F8043B013B06F8010B0B44D91740 +:10CAB0001846EEE80201591C09EB06039C45E6DC2A +:10CAC0000023C5F86031089911EA020489D005EB0A +:10CAD00083030024D3F8C831C5F8603138460BF021 +:10CAE0006BFE01343FF470AB65E53C465E46D5F81D +:10CAF00024213A44217888077FF570AF04F10803B8 +:10CB00009A42FFF46BAF94F802C00CF1020304EBFD +:10CB100083039A42FFF462AF6078B042A4D0C907A1 +:10CB20003FF55CAF1C46E5E75DF0FFFF7047000096 +:10CB3000094B0A485B6870B590248D1804FB030309 +:10CB40008D4207D011F8014B1868C6693606FCD52E +:10CB50008462F5E7104670BD900B0224F40C0224A9 +:10CB6000012070476FF0150070476FF01C00704790 +:10CB700003681B6818476FF0150070471120704755 +:10CB8000BFF35F8F012208498A6001320B69042AD2 +:10CB900023F0010343EA00030B61F5D1BFF34F8F8C +:10CBA000BFF36F8F704700BF90ED00E0BFF35F8F62 +:10CBB000064A00239360136923F0010318431061B0 +:10CBC000BFF34F8FBFF36F8F704700BF90ED00E052 +:10CBD00070472DE9F047466896F8327087BB0368C6 +:10CBE0005B689847346A84422AD03369041B96F9FB +:10CBF00034201C40B3683062A4FB0345CAB1736A99 +:10CC000014EB030845F10009002A1BDBC2F12001E7 +:10CC1000A2F1200328FA02F429FA02F509FA01F137 +:10CC200029FA03F30C431C4304FA02F2A8EB0202B4 +:10CC30007262D6E90A321B1945EB0202C6E90A32D2 +:10CC4000BDE8F087D6F80CA03B4640464946524620 +:10CC50000DF0F8FC04460D460AFB1082E8E72DE9CA +:10CC6000F14F46680546376B27F07F4727F0FF07EF +:10CC7000002F57D1FFF7ADFF7368002B60D0D5F8B8 +:10CC800000A0D3E90001D6E90A238B4208BF824203 +:10CC900005D3DAF8143001B0BDE8F04F18476C68DE +:10CCA000D4E90A32D4F814B0B0EB030861EB0209FE +:10CCB000D4E906234B4508BF424520D3E36894F9E5 +:10CCC00033C0A3FB080103FB0911BCF1000F13D013 +:10CCD000A268531EC01841F10001BCF1000F24DB13 +:10CCE000CCF12002ACF1200320FA0CF001FA02F2A0 +:10CCF00021FA03F310431843834528BF8346236A70 +:10CD00009B4423690BEA030BDAF810305846984726 +:10CD10002B685B689847336A5B450AD258450CD24A +:10CD200083420AD801B0BDE8F08F3B460DF08AFC83 +:10CD3000E2E78342F6D95845F4D32B685B69AAE74A +:10CD40007369306A326918442B6810401B6901B05E +:10CD5000BDE8F04F1847B1F900305A1C01D1184610 +:10CD60007047834201D1886870470C31F3E784B083 +:10CD700001A804B080E80E00704701207047002928 +:10CD80000CBF6FF01800002070476FF0150070475F +:10CD9000036800221B69114618470368012200211D +:10CDA0001B69184730B1036823B11B79052B03D0E9 +:10CDB000062B24D02048704743680020DFF8A4C029 +:10CDC0001E4A1F49C3E902C202F17942DFF898C046 +:10CDD00002F5740202F501621A611A4AC3E90512EA +:10CDE00002F1D14202F5C01202F51E62DA61164A62 +:10CDF000C3E908C20122C3E900009A66704743688C +:10CE000000201249124ADFF864C09866C3E9021292 +:10CE1000104A1149C3E904C2104AC3E90612104A74 +:10CE20001A6202F17452A2F52302A2F69242C3E9F9 +:10CE300000005A62704700BF00AFFFFF07D57C3685 +:10CE400039590EF7310BC0FFA44FFABE67E6096AE5 +:10CE500085AE67BB3AF54FA57F520E518C68059B96 +:10CE6000ABD9831FD89E05C1A78FF96472F36E3CBE +:10CE7000137810B504688C4238BF013B1370036807 +:10CE8000591A016010BD03685918016028BF0123B9 +:10CE9000117838BF00230B4413707047436830B5D6 +:10CEA0002BB94A6862B9181E18BF012028E08268B1 +:10CEB00002EB830252F8042C002AF2D1013BEFE787 +:10CEC0008C6804EB820555F8045C85B9013AE9E702 +:10CED000826852F8231054F82320914205D803F1B8 +:10CEE000FF330AD24FF0FF300AE0012008E00BB117 +:10CEF0009342FAD89342F5D3013B5A1CE8D1002063 +:10CF000030BD0021F0B50A464568954202D10024A3 +:10CF10002046F0BD836853F82260002326FA03F709 +:10CF2000CC18FF07F4D40133202B01EB0304F5D117 +:10CF300001322146E9E7036870B5CD1A002D0DDDF9 +:10CF400093F900601C78002E0BDB5C1C04601B78DE +:10CF500013600368C91A13688B4234D96FF05F00FD +:10CF600070BD04F07F04013C032C29D8DFE804F0F5 +:10CF700002091220012DF1D05C78023314600360A5 +:10CF8000E7E7022DEADDB3F80140033364BAA4B247 +:10CF90001460F4E7032DE1DD9C78043313F8035C9F +:10CFA000240244EA054413F8015C2C431460E6E7CC +:10CFB000042DD3DDD3F80140053324BA1460DEE735 +:10CFC0006FF06300CCE70020CAE70000024B987ABC +:10CFD000003818BF012070471801002408B504F07C +:10CFE00043FDFCE710B504460BF0E6FB204610BD00 +:10CFF00008B5431C03D10346184608BD0C31B1F9EE +:10D0000000305A1C04D09842F8D14B68591CF3D117 +:10D0100001460148F5F700FD30010180884208B55E +:10D0200007D0431C05D00131014602D00248F5F774 +:10D03000F3FC084608BD00BF30010180024B1868B0 +:10D0400008B107F043BF704788270224024B1868D5 +:10D0500008B1FAF77FB8704788270224012008B585 +:10D0600000F0B8FB11F0010010B58CB204D0F5F758 +:10D0700083FE003818BF0120E2060AD5054B5A6826 +:10D0800090235343044AD358DB691B0648BF40F042 +:10D09000100010BD900B0224F40C0224F8B50D46CC +:10D0A00082B3194B194C5F68902303FB07439A68BE +:10D0B000B2F5805F16D11A69BAB940F2FF12A3F82F +:10D0C0006020902202FB0742B2F86060F5F754FE40 +:10D0D0000028FBD0902301207B43E3585B6A1E406D +:10D0E0002E70F8BD1AB91A6932B9FF22E7E7B2F11A +:10D0F000805F05D11A690AB97F22E0E73F22DEE7A7 +:10D100000022DCE71046ECE7900B0224F40C02242A +:10D11000436B30B5054685B053B100F128036C462A +:10D120000FCB84E80F00002320466B6307F085FFD8 +:10D1300005B030BDD0F890302DE9F04F012B0446FA +:10D140002DED088B87B0029307D9002084F8940056 +:10D1500007B0BDEC088BBDE8F08F031DB0F99670E9 +:10D16000B0F9986008EE103AD0F88C30B0F99A50C7 +:10D17000B0F99CA008EE903AB0F99EB0B0F9A0804A +:10D1800038467249FFF734FF714903903046FFF784 +:10D190002FFF704901902846FFF72AFF6E4909EEDC +:10D1A000100A5046FFF724FF6C4909EE900A5846D2 +:10D1B000FFF71EFF6A490AEE100A4046FFF718FF04 +:10D1C000019A039B814611461846FFF727FF19EE87 +:10D1D000901A019019EE100AFFF720FF49460390BC +:10D1E0001AEE100AFFF71AFF019B1A46039B9A4298 +:10D1F000ABD1019B8342A8D154493846FFF7ABFD20 +:10D20000534903903046FFF7A6FD524909EE100A34 +:10D210002846FFF7A0FD504909EE900A5046FFF757 +:10D220009AFD4E490AEE100A5846FFF794FD4C4904 +:10D230000AEE900A4046FFF78EFD4A4A0BEE100AAE +:10D24000039BD2F8D410484841F48041C2F8D4106E +:10D25000D2F8D41001F48041059105994349D0F8E2 +:10D260008CC08C45FBD1D16F4FF0000941F4804157 +:10D27000D167D16F21F48041D1674FF44072012111 +:10D28000C26000223846A4F8547084F84520226118 +:10D2900084F844204FF0004292FAA2F2B2FA82F2ED +:10D2A000013A62614FF48062A261029AE261019ADE +:10D2B000C4E9021162601946C4E90899F8F776FBDF +:10D2C00049463846F8F71CFB19EE101A3046A4F808 +:10D2D0005660F8F76BFB49463046F8F711FB19EE3C +:10D2E000901A2846A4F85850F8F760FB494628469B +:10D2F000F8F706FB1AEE101A5046A4F85AA0F8F7F1 +:10D3000055FB49465046F8F7FBFA1AEE901A584674 +:10D31000A4F85CB0F8F74AFB49465846F8F7F0FA2B +:10D320001BEE101A4046A4F85E80F8F73FFB494612 +:10D330004046F8F7E5FA18EE901A18EE100AF8F7DA +:10D34000D7FFB0FA80F0400900E700BF10AF010836 +:10D3500040AF010870AF010894AF0108C4AF0108E5 +:10D36000E8AF01080044025800640258000300803E +:10D3700039B101F18041013900EB8101814203465D +:10D3800000D270471B680A681BBA12BA40F8042B17 +:10D3900041F80439F2E70000034B596A5A6A521AFD +:10D3A0008242FBD3704700BF000C004007B50190DC +:10D3B0000BF0FAF9019910B90248F5F72DFB03B00B +:10D3C0005DF804FB1F010180037823F0030343F0A1 +:10D3D00001030370FFF732BE10B50446037803F073 +:10D3E0000303012B08D0FFF731FE237803F003027B +:10D3F000012A03D1FFF722FE002003E043F00203DD +:10D400002370012010BD0000014B186807F05EBDBD +:10D4100040270224014B1868F9F79CBE40270224DC +:10D42000014B186807F052BD80270224014B186891 +:10D43000F9F790BE8027022401207047074A084967 +:10D4400013681844884283BF064B0C224FF0FF300C +:10D4500010608CBF1A601846704700BF0C01002492 +:10D4600000FC072454A50224064A136843B1013B7B +:10D4700013602BB9044A1370044B1B7803B162B6D6 +:10D48000704700BF3C2702248C270224382702243F +:10D49000EFF3108372B6074A117831B9DB430649BE +:10D4A00003F001030B7001231370044A1368013366 +:10D4B000136070478C270224382702243C2702245B +:10D4C00008B5FFF7E5FF064A1388013B9BB21380BE +:10D4D00013B90120FFF76AFBBDE80840FFF7C4BF9E +:10D4E0008427022410B5074CFFF7D2FF218811B919 +:10D4F0000846FFF75BFB01312180BDE81040FFF7D4 +:10D50000B3BF00BF8427022408B5FFF7C1FF064A56 +:10D510001388013B9BB2138013B90120FFF730FB46 +:10D52000BDE80840FFF7A0BF8627022410B5064CCF +:10D53000FFF7AEFF208808B9FFF722FB01302080FB +:10D54000BDE81040FFF790BF86270224F0B58FB0EA +:10D5500007460E4615460021142209A801AC0BF01F +:10D5600095F9104B08945B690197DA6B0493059267 +:10D570005A6B1B6B06920793CDE90256FFF788FFA3 +:10D58000094A0A4D1368013313600FCC0FC50FCC45 +:10D590000FC50FCC0FC523682B60FFF765FF002078 +:10D5A0000FB0F0BD18010024442702244C270224A8 +:10D5B000F8B50546FFF76CFFD0E90034DB68984703 +:10D5C00094F832301BB1BDE8F840FFF74DBF01239E +:10D5D00084F831306368ABB12846FFF7FAFA616826 +:10D5E000D4E90A67D1E900239F4208BF964209D3D4 +:10D5F0006B685A68CB6863602368002BEAD0906838 +:10D600009847E7E70023284684F83130FFF727FBE7 +:10D61000D9E72DE9F743044600F1080580699046F3 +:10D6200099460190FFF734FF0198FFF7D2FA01986D +:10D630000021426824615368C4E902892BB96361FF +:10D6400061B95560FFF70BFB0FE0D3E90067B945FF +:10D6500008BFB045F3D31946DB68EFE7D2E90A23E8 +:10D66000CD604B4508BF4245ECD203B0BDE8F04366 +:10D67000FFF7FABE90F83C3030B453B1002380F885 +:10D680003C3090F83E3013B9012380F83D3030BC77 +:10D69000704790F83F30002BF9D0836B4FF08062D9 +:10D6A000013383630B4B5A60D0E90C32013342F1F2 +:10D6B0000002C0E90C32D0E90A2312F57A7543F171 +:10D6C000000412F5FA62C0E90A5443F1000330BCC9 +:10D6D000FFF79FBF00ED00E038B5D0E90825D0E99D +:10D6E00002130446521845EB0303FFF792FF636BE6 +:10D6F0002BB104F12800BDE8384007F09EBC38BDCE +:10D70000094B30B51A46094CD3F89450A542FBD1C9 +:10D71000036829B181680B604FF44073536130BDD9 +:10D72000C1681B04F7E700BF0064025800030080D3 +:10D7300000B58C2589B0FFF7ABFE0820ADF814507A +:10D74000F8F716F84FF47071044628461E4DF8F7A6 +:10D750002DF94FF480531D4A0021019301A8BDF813 +:10D760001430069403F00F0352F82330079304F1AA +:10D77000100318340293CDE90344F8F7F5F80424B4 +:10D78000012101A8FFF7BCFF2846FFF705FE002195 +:10D7900001A8FFF7B5FF2846FFF7FEFD013CEFD1DA +:10D7A00004240B4E012101A8FFF7AAFF3046FFF722 +:10D7B000F3FD002101A8FFF7A3FF3046FFF7ECFDC2 +:10D7C000013CEFD1DBE700BFF04902005CAC01088F +:10D7D000801A060008B508B1FFF7AAFFFEE70000AF +:10D7E00008B50E4B0121D3E84F2FC3E8401FD2B23A +:10D7F0000028F8D12AB1FFF74BFEBFF34F8F20BFAF +:10D80000FDE7EFF305831BB9EFF31083DB0701D5C9 +:10D81000FFF78EFF0120FFF7DDFF00BF482702243E +:10D820000FB4724608B5074B0120D3E84F1FC3E879 +:10D83000440FC9B2002CF8D111B90348FFF786FE96 +:10D84000FFF7CEFF440B02240001FF803F282DE9A3 +:10D85000F04F06468BB000F32B81964F57F820000F +:10D86000411C40F00981022E00F306819248DFF846 +:10D870008C920378BFF35B8F13F0010F40F0F980B7 +:10D88000FFF7AAFD002800F0F4808C4BC9F80030A7 +:10D890008B4B1A689846002A40F0E8808949092095 +:10D8A000FFF7A6FB044688491720FFF7A1FB0146B6 +:10D8B0002046864DFFF7B2FB824904460920FFF758 +:10D8C0004AFA814983461720FFF745FA804B824682 +:10D8D0002C609C4221D17F4AD2F8F01041F0100117 +:10D8E000C2F8F010D2F8F02002F010020992099A62 +:10D8F000794A94424AD1774BD3F8F02042F0200283 +:10D90000C3F8F020D3F8F03003F020030493049B15 +:10D91000724B9C424AD1012487E0704A94421AD04B +:10D9200002F58062944224D06D4A94425CD06D4AE4 +:10D930009442DDD1674AD2F8E81041F48011C2F870 +:10D94000E810D2F8E82002F480120592059A9C4271 +:10D95000DED1002469E05F4AD2F8E81041F40031DA +:10D96000C2F8E810D2F8E82002F400320892089ACF +:10D97000BEE7584AD2F8E81041F48021C2F8E81016 +:10D98000D2F8E82002F480220792079A564A94427D +:10D9900037D1504BD3F8E82042F08042C3F8E8205A +:10D9A000D3F8E83003F080430393039B4F4B9C4232 +:10D9B00074D003F580639C4272D003F580639C426F +:10D9C00070D003F544439C426ED0A3F51C439C42A7 +:10D9D0006CD003F580639C425ED04548844214BFFE +:10D9E0004FF0FF34082420E03A4AD2F8E81041F41E +:10D9F0000021C2F8E810D2F8E82002F400220692D2 +:10DA0000069A3C4A94423AD0394A94429FD1314BCB +:10DA10000824D3F8F42042F00802C3F8F420D3F825 +:10DA2000F43003F008030193019B594609206C6010 +:10DA3000F7F7BCFF01210920F7F762FF51461720D5 +:10DA4000F7F7B4FF01211720F7F75AFF00234FF42F +:10DA5000E132C5E90433C5E90223274BAB61F8F78E +:10DA6000C3FC0123C8F80030F8F75AFF1248FFF74B +:10DA7000ABFC224847F826900BB0BDE8F08F154B61 +:10DA8000D3F8E82042F00042C3F8E820D3F8E830A9 +:10DA900003F000430293029B0724C6E70224C4E775 +:10DAA0000324C2E70424C0E70524BEE70624BCE73C +:10DAB0000020E1E70C00002404260224CCB2010877 +:10DAC0009027022474B1010818B00108900B0224B9 +:10DAD000001001400044025800140140004400407E +:10DAE000004C0040005000400078004000480040DA +:10DAF000000C0058007C0040090017002C2702246D +:10DB000038B50D46FFF7A2FE044630B90AF03CF8DE +:10DB1000092303604FF0FF3038BD0368DB69984785 +:10DB20000028204614BF4FF400534FF400436B60AD +:10DB300023689B6A984728610020EDE713B5CDE97B +:10DB40000021FFF783FEDDE9002140B90AF01CF84F +:10DB5000092303604FF0FF34204602B010BD036874 +:10DB60001B699847041EF7DA64420AF00DF8046056 +:10DB7000F0E710B5FFF76AFE044628B90AF004F88A +:10DB800009230360204610BD0368DB699847041E23 +:10DB9000F8DA644209F0F8FF04600024F2E7FFF7C6 +:10DBA000E8BF13B5CDE90021FFF750FEDDE9002104 +:10DBB00040B909F0E9FF092303604FF0FF34204624 +:10DBC00002B010BD03689B689847041EF7DA6442F0 +:10DBD00009F0DAFF0460F0E77FB5002A04460D463D +:10DBE00006DA09F0D1FF162303604FF0FF3019E089 +:10DBF0000192FFF7BEFF019AE8B1114E01220DF12B +:10DC00000F012046FFF7CDFF0028EEDB0AD09DF87C +:10DC10000F300D2B08D1325D0A2A3355EED00A237E +:10DC200001202B7004B070BD0A2B02D1325D0D2A89 +:10DC3000F3E73355F4E729462046FFF7B2FFF1E753 +:10DC40000826022413B5CDE90021FFF7FFFDDDE929 +:10DC5000002140B909F098FF092303604FF0FF3419 +:10DC6000204602B010BD0368DB689847041EF7DA4F +:10DC7000644209F089FF0460F0E700002DE9F74FE6 +:10DC8000B2F1000805460E4609DA09F07DFF1623B9 +:10DC900003604FF0FF34204603B0BDE8F08FFFF77C +:10DCA00068FF044660B31F4A0027DFF87CA04FF0EE +:10DCB0000D0B535D3C469146B84521DDF25D0A2AC5 +:10DCC0001BD10D2B019318D0BC420CDA3A1B311931 +:10DCD0002846FFF7B7FF0028019BDADB0444A74280 +:10DCE000D9DC09F80530012251462846FFF7AAFF82 +:10DCF0000028CEDBCFD009F805B0F35D0137DBE7B4 +:10DD0000A045C8DDA8EB040231192846FFF79AFFA9 +:10DD10000028BEDB24181FBF3619024B16F8012C51 +:10DD20005A55B8E748260224F8AD010838B505462B +:10DD30000024FFF78BFD0B4B43F8254030B909F069 +:10DD400023FF092303604FF0FF3038BD03685B6990 +:10DD50009847051E04DA6D4209F016FF0560F2E7E8 +:10DD60002046F2E70C000024F0B572B60023264AE4 +:10DD70004FF0FF36254F13604FF0E0221D465168EB +:10DD800001F00F0101319A004FEAC30C02F1604229 +:10DD900002F56142C2F88060C2F88061002202EBA5 +:10DDA0000C0401323C44082A84F80053F7D10133B3 +:10DDB0009942E8DC164B4FF020625A6040F2FA526A +:10DDC0009860DA6000221D6111469C1801320C2A0D +:10DDD0002176FAD14FF0FF3259629A620D4ADA6227 +:10DDE0001F221A63BFF35F8F0B4B5960BFF34F8F36 +:10DDF000BFF36F8FD0E90031002282F314889D4673 +:10DE000082F310880847F0BD10E000E000E100E078 +:10DE100000ED00E0020000C090ED00E00AF03EBD21 +:10DE20000AF04CBD0AF0F4BD0AF098BD406828B174 +:10DE3000037B012B01D1043870470020704700009C +:10DE4000436893F830202DE9F0470646002A74D144 +:10DE500093F83230002B70D103681B689847336801 +:10DE6000DB699847364B0268002A08BF1A461146FC +:10DE70001C46B1FBF3F304FB13132146002BF7D12F +:10DE80002F4B01257768B3FBF4F11F23B960013BE9 +:10DE900003D305FA03FC6145F9D1B2FBF4F287F82C +:10DEA000333001241F23FA6004FA03F5AA4201D09B +:10DEB000013BF9D287F834304468231F1B2B93BFF2 +:10DEC00001234FF0FF332024A340A4F1040498BFA2 +:10DED00003F1FF3312F1FF303B614FF0070303FA08 +:10DEE00004F44FF000034FEAE4797C61A4FB0145A0 +:10DEF0009A4601FB095543F1FF31201845EB01011A +:10DF00000CF0A0FB3368C7E906015B68C7E900AA0B +:10DF1000984773683862002100200122C3F824A0CA +:10DF200083F832A01A86C3E90A013046FEF751FE93 +:10DF30003046BDE8F047FEF792BEBDE8F08700BF6F +:10DF400040420F0010B50446FFF77AFFFFF7A0FA32 +:10DF50002046FEF73EFE6368D3E90A01FFF784FA24 +:10DF600010BD2DE9F8430C4680468869FFF7EAFFAB +:10DF7000D4E90A59461B61EB0907002F08BFB6F523 +:10DF80007A7F2AD3002F08BFB6F5FA6F28D3002E68 +:10DF90004FF47A72304677F101034FF00003B4BFBB +:10DFA000002139460CF04EFB4FF47A760023A36330 +:10DFB000A0FB0623551906FB013343EB0903C4E913 +:10DFC0000A53D4E90C32C318404642EB0101C4E9BC +:10DFD0000C31C8E90031BDE8F88300200146E3E7D1 +:10DFE00001200021E0E700002DE97043154E35685F +:10DFF0002DBB154C4FF0000814484FF00009144B8E +:10E00000A0612360C4E90289C4E90455FFF718FF41 +:10E01000FFF73EFA0F4B104A1A60FFF725FA0F4B35 +:10E02000A0692360FFF78EFF84F840503460C4E994 +:10E030000801C4E90A01C4E90C89C4E90E55306835 +:10E04000BDE8708328270224E0260224A4AC01083E +:10E050005CA90108F00A022471CB000840B3010852 +:10E06000F8B54B6915460C469B1A002BACBFD3186C +:10E07000131C4B6103898B80FFF70AFA0246036881 +:10E080006BB35E696169771A002F24DB8E4226D15B +:10E090009B68A36013B104F108011961136821465C +:10E0A000002641F80C3F9E6019611460836A22616A +:10E0B0006BB190F8242052B10268A24207D1E26805 +:10E0C0002AB96169C06A491B21EAE1719847BDE834 +:10E0D000F840FFF7C9B903F108029B68D0E7A360D5 +:10E0E00013B104F1080119610023E360DDE738B5DD +:10E0F000856900F10804FFF7CBF96A6853689C4210 +:10E1000009D1436928465360FEF7A9FDBDE83840B0 +:10E11000FFF7AAB91346002BF8D0DA689442F9D178 +:10E120004269DA60F2E70000F8B50F4B00260027DD +:10E13000002504460360C0E90267C0E904550B48A6 +:10E14000A061FFF77DFEFFF7A3F9094B094A1A60AA +:10E15000FFF78AF901232046656384F83830064BBF +:10E16000C4E908672360F8BD5CA90108A4AC0108F4 +:10E17000F00A022471CB000834B3010884B0F8B56A +:10E18000044607A8DDE90C6704F1280580E80E00C5 +:10E19000FFF77EF90FC885E80F002046FFF7A7FFBD +:10E1A000A069C4E90867FFF7CDFE8219204641EB5C +:10E1B0000703FFF72EFABDE8F84004B0FFF754B9A3 +:10E1C000F8B504460E4615460021202268301F4649 +:10E1D0000AF05CFB94F86030721C84F8683016BF5B +:10E1E0000023012384F8696084F86A3094F8613070 +:10E1F00084F86C3094F8623084F86D306B1C16BF74 +:10E20000002301232567013784F8743094F86330C4 +:10E2100084F8783094F8643084F8793016BF00239D +:10E220000123E36784F88030D4F8883084F88430A0 +:10E2300094F8653084F88530F8BD0000024B0A463A +:10E2400000211B68184700BF100100242DE9F04F82 +:10E2500000F10803D3B004934AAB059300F12803FF +:10E260000693DDE9043253F8040B42F8040B0698D8 +:10E270009842F8D10AAA01F140004B78043111F814 +:10E28000044C1B0443EA046311F8014C234311F8C6 +:10E29000024C884243EA042342F8043BEDD1509BF0 +:10E2A0000DF1200BA2480093DE46DDF844C1814603 +:10E2B000DDF838A14F9E0190DDE94A72DDE94C316D +:10E2C0004FEAFA25DEF80840D9F800000EF1200EDA +:10E2D00085EABA1509F120092044009C85EA7A658F +:10E2E00005440098704000EA0A00604047EA0204D2 +:10E2F00005444FEA77301C40AC4480EAB70007EA97 +:10E30000020580EAB75061442C4359F81C5C044470 +:10E310005EF8140CA44405448AEA060400980CEA4A +:10E32000070805440C404FEAF120744080EAB11020 +:10E3300025444CEA070480EA7160144028444FEAFF +:10E340007C3544EA080485EABC05034485EABC55EB +:10E35000254459F8184C05445EF8100C04444CEA66 +:10E360000500264481EA0A0438401C4084EA0A0871 +:10E3700006EB08044FEAF3260CEA050886EAB31612 +:10E3800040EA080086EA736626444FEA753484EA58 +:10E39000B504324484EAB554044459F8140C3444A6 +:10E3A0005EF80C6C304445EA0406824481EA0300BE +:10E3B00006EA0C06104080EA01080AEB08004FEA62 +:10E3C000F22A8AEAB21A8AEA726A82444FEA7430FE +:10E3D0000AEB070880EAB40005EA040780EAB450B3 +:10E3E0003E435EF8087C304459F8106C50443E447B +:10E3F00083EA020A31444FEAF8260AEA080A44EAA4 +:10E40000000786EAB8168AEA030A2F4086EA786689 +:10E41000514404EA000A0E444FEA703147EA0A0701 +:10E4200082EA080A81EAB001B44481EAB0510AEAFA +:10E430000C0A39445EF8047C8AEA020A314459F82D +:10E440000C6C3E4400EA010733444FEAFC2686EA9E +:10E45000BC16534486EA7C661E44AB1940EA0105AB +:10E4600000934FEA7133254083EAB1033D4383EAC9 +:10E47000B1532B4459F8085C3344DEF8006035444E +:10E48000009E154488EA0C02324082EA0807EA1925 +:10E490004FEAF62501EA030785EAB61585EA7665AF +:10E4A00015444FEA7332661941EA030482EAB30263 +:10E4B000044082EAB3523C43224459F8044C2A44B3 +:10E4C000DEF804502C444FEA7235A044009C85EAE3 +:10E4D000B2058CEA0404344084EA0C0708EB070414 +:10E4E0004FEAF62843EA020788EAB6180F4088EA9E +:10E4F0007668444485EAB25803EA020500EB040A50 +:10E5000018A83D437045454404EB05077FF4D8AE99 +:10E510000098CDF844C1CDF838A1CDE94F6038A8B6 +:10E52000CDE94A72CDE94C31CDE90845079001E0CB +:10E5300010AE0108DBF840000BF1200B5BF8145C17 +:10E540004FEAF04E5BF8184C4FEAB5488EEA704E31 +:10E5500088EAF5188EEA902EDBF80C0088EAD508D8 +:10E5600020444FEAFA24864484EABA140EEB0800E9 +:10E5700084EA7A6E009C03907440009804EA0A04CE +:10E58000444001987444006C8AEA060E2044039CBF +:10E590002044CBF8284007EA0204844447EA0200FA +:10E5A00001EB0C084FEA7731184081EAB7010EEA17 +:10E5B000080E20435BF8104C81EAB7518EEA060E34 +:10E5C0008AEA08090844DBF8241084444FEAF14041 +:10E5D00080EA714080EA9120DBF8101029444FEA6C +:10E5E000B44585EAF4150144019885EAD405406CE8 +:10E5F0002944009D28444FEAF825CBF82C10084404 +:10E6000085EAB815864485EA786505EB0E004FEA81 +:10E610007C3507EA0C0E034485EABC05009347EA03 +:10E620000C0385EABC55134043EA0E035BF80CEC7F +:10E630001D44039B05444FEAF34080EA734080EA9F +:10E640009320DBF8143023444FEABE44034400987F +:10E6500084EAFE1409EA0009019884EADE04806C69 +:10E6600089EA0A09234430444FEA7536CBF8303042 +:10E67000184486EAB5068144009886EAB5564FEA02 +:10E68000F02484EAB01484EA706404EB09004CEAD4 +:10E69000050402443C4002920CEA050214435BF874 +:10E6A000082C344404444FEAF14080EA714080EA87 +:10E6B0009121DBF818008644029871444FEAB24E6B +:10E6C0008EEAF21E8EEAD20E8E44009988EA01018B +:10E6D00001400198CBF834E0C66C81EA0801029849 +:10E6E00056444FEA743A4FEAF02076448AEAB40A74 +:10E6F0003144029E8AEAB45A80EAB61080EA766013 +:10E70000461845EA040005EA040100EA0C0007EB9C +:10E71000060908434FEAF34181EA7341504481EA14 +:10E720009323DBF81C1030445BF8046C0A44029914 +:10E7300013444FEAB64282EAF61282EAD6021A443B +:10E74000009B83EA01074FEAF921CBF8382007EA5A +:10E75000090781EAB9115F40019B81EA79611B6D6C +:10E760001344434404EA00081F44CB1944EA000759 +:10E770004FEA70312F409C4481EAB00147EA080714 +:10E78000DBF8008081EAB05139444FEAFE47194472 +:10E7900087EA7E47DBF8203087EA9E2E9F194FEAF2 +:10E7A000B843009E83EAF813774483EAD8031F44F2 +:10E7B000029B83EA090ECBF83C700EEA0C0E8EEA3F +:10E7C000030E019B5B6D3B4433449E444FEAFC23A4 +:10E7D00083EABC1383EA7C6303EB0E0600EA010EB6 +:10E7E000AB1940EA010500934FEA7133254083EAF3 +:10E7F000B10345EA0E05DBF804E083EAB1532B448C +:10E80000DBF8245033444FEAF24686EA724686EA41 +:10E81000922205EB080689EA0C0816444FEABE422C +:10E8200082EAFE1282EADE021644009A08EA020830 +:10E83000019ACBF84060956D88EA0908029A354440 +:10E84000009E1544009A4FEAF222454401EA03086B +:10E8500082EAB61282EA766215444FEA733266198A +:10E8600041EA030482EAB302044082EAB35244EA72 +:10E87000080422444FEAF74484EA77442A44DBF848 +:10E88000085084EA9727039CA6444FEAB54484EADB +:10E89000F514774484EAD505009C8CEA040E019CAB +:10E8A0003D44E76D0EEA060E4FEAF624CBF84450DD +:10E8B0002F448EEA0C0E84EAB6144F444FEA7235A8 +:10E8C00084EA7664774485EAB2053C4443EA020769 +:10E8D00085EAB25E03EA020500EB040A01980F40E4 +:10E8E00020303D43019007987544584504EB0507D7 +:10E8F0007FF420AE0098CDF844C1CDF838A1CDE921 +:10E900004F60CDE94A72CDE94C31CDE90845049B11 +:10E9100005991B6851F8042B1344049A059142F899 +:10E92000043B069B04929342F1D108A84FF49471E2 +:10E93000FFF784FC002053B0BDE8F08F2DE9F843C9 +:10E94000036805460E46144603F03F079B18036014 +:10E9500022BF4368013343609FB1C7F1400991452D +:10E960000FD800F128084A4608EB070009F080FF9D +:10E9700041462846FFF76AFCB0B9403C4E443C444F +:10E980000746264404E02846FFF760FC60B9403C97 +:10E990003F2CA6EB0401F6D844B105F1280022462D +:10E9A000384409F065FF0020BDE8F8832046FBE706 +:10E9B00010B458B104684CB12479053C012C05D839 +:10E9C00042B140685DF8044BFFF7B8BF02485DF8FC +:10E9D000044B70471046FAE700AFFFFF38B50368F5 +:10E9E000044663B1856855B1FEF7DCF940B9236888 +:10E9F000294620469A79BDE83840FFF7D9BF01483B +:10EA000038BD00BF00AFFFFF036803F03F035A1C8F +:10EA1000034470B5382A0D4600F128064FF08001F6 +:10EA2000044683F8281006EB020061D8C2F13802D0 +:10EA3000002109F02BFF2046D4E900315A0FDB00FA +:10EA400042EAC10231461BBA12BA63662266FFF778 +:10EA5000FDFB00284BD1E37A2B7063896B70A368B0 +:10EA60001B0AAB70A368EB70E37B2B71E3896B71BE +:10EA7000E3681B0AAB71E368EB71E37C2B72638A7A +:10EA80006B7223691B0AAB722369EB72E37D2B73F4 +:10EA9000E38A6B7363691B0AAB736369EB73E37E91 +:10EAA0002B74638B6B74A3691B0AAB74A369EB743F +:10EAB000E37F2B75E38B6B75E3691B0AAB75E36929 +:10EAC000EB7594F823302B76638C6B76236A1B0AE4 +:10EAD000AB76236AEB76A36E4BB994F827302B778D +:10EAE000E38C6B77636A1B0AAB77636AEB7770BD65 +:10EAF0000021C2F1400209F0C9FE31462046FFF76D +:10EB0000A5FB0028F3D101463822304691E70000EA +:10EB100040B1036833B11B79053B012B02D8406833 +:10EB2000FFF772BF0048704700AFFFFF42F210735B +:10EB300099422DE9F04104460D4603D96FF00F00CC +:10EB4000BDE8F08146688E421AD2042128460BF0B7 +:10EB500041F907460028F1D0D4F80880B8F1000F39 +:10EB60000CD0B6004146324609F082FE1EB1314655 +:10EB70004046FFF763FBA06809F01EFEC4E9015799 +:10EB80000020DDE742F2107399422DE9F04105467D +:10EB90000C4603D96FF00F00BDE8F08146688E4245 +:10EBA00003D8BDE8F041FFF7C1BF731EFBB90133C5 +:10EBB00004219C4238BF1C4620460BF00BF9074647 +:10EBC0000028E7D0D5F80880B8F1000F0BD04146F7 +:10EBD000A20009F04DFEB10002D04046FFF72EFB27 +:10EBE000A86809F0E9FD0020C5E90147D4E7AA6853 +:10EBF00052F82320002ADAD1013BD7E70368F0B5A9 +:10EC0000044689B00D46F3B18668E6B169469F793E +:10EC1000FFF77EFFA8B92046FEF7C4F888B923683D +:10EC2000F11920469A79FFF7C3FE50B92368694667 +:10EC300020465A79FFF7BCFE18B929462046FFF74F +:10EC400067FF09B0F0BD0148FBE700BF00AFFFFF61 +:10EC500010B404682CB183681BB15DF8044BFFF756 +:10EC6000A7BE02485DF8044B704700BF00AFFFFF2E +:10EC70002DE9F0410E4688B017460546002852D0CF +:10EC80000368002B4FD08268002A4CD09B79BB428E +:10EC900013D2FEF787F8044688BB3A463146284629 +:10ECA000FFF786FE044650BB69462846FFF730FF53 +:10ECB000044620BB2B686E465F792B683621D5F859 +:10ECC0000880013E9A794046474408EB020409F067 +:10ECD000DDFD2B685C2120469A7909F0D7FD43467B +:10ECE000601E9F4213D12846FEF75CF8044630B9F7 +:10ECF0002B68414628469A79FFF75AFE04462021A0 +:10ED00006846FFF79BFA204608B0BDE8F08116F888 +:10ED1000011F1A784A4003F8012B10F8012F3178AF +:10ED20004A400270DDE7014CEDE700BF00AFFFFF96 +:10ED300010B50446F0B10368E3B1406848B11B79EF +:10ED4000053B012B02D86C21FFF778FA606809F0C7 +:10ED500033FDA06840B123689B7959000BB1FFF7E0 +:10ED60006DFAA06809F028FD20460C21BDE810408E +:10ED7000FFF764BA10BD2DE9F04705688AB08246F6 +:10ED80000E46174605B16D7976B3002F14BF4FF0CC +:10ED900002084FF0010800230AF10C098DF8043035 +:10EDA0005046FFF71BFE0446B0B92A464946504676 +:10EDB000FFF74EFF044678B9012201A95046FFF73C +:10EDC00047FF044640B9B8F1020F10D002A95046DF +:10EDD000FFF714FF044698B102A82021FFF72EFA8E +:10EDE00020460AB0BDE8F0874FF00108D3E73A4665 +:10EDF00031465046FFF72CFF04460028E6D0EBE7EB +:10EE00002A4602A95046FFF733FF04460028E3D103 +:10EE10002A4649465046FFF71BFF04460028DBD12F +:10EE200049465046FFF7EAFE04460028D4D19DF833 +:10EE300004300133DBB243458DF80430B0D3CBE767 +:10EE40002DE9F843066804460F46154606B1767963 +:10EE5000B5F5806F3BD8E36B63B904F10C09BDB91C +:10EE60002A4629462046FFF786FF78B9E36A013330 +:10EE7000E3620BE0636B012B03D0E26AA36B9A425F +:10EE8000EBDD2046F3F74DFF0028E6D0BDE8F88320 +:10EE9000AE422046B04628BFA846FFF79FFD002897 +:10EEA000F4D1324649462046FFF7D2FE0028EDD184 +:10EEB00049462046FFF7A2FE0028E7D138464246E1 +:10EEC00049464744A5EB080509F0D2FCC7E76FF0B7 +:10EED0000200DBE700230122C0E90433C0E900237C +:10EEE000C0E90232C0E906230362704738B5002446 +:10EEF0000125014604704462C0E90154C0E903459C +:10EF0000C0E90544C0E907542830FFF7E3FFC1E931 +:10EF10001354C1E91544C1E91744C1E91944C1E9D1 +:10EF20001B44C1E91D4438BD036B2BB1C36B002BDF +:10EF30000CBF022001207047184670470246436804 +:10EF400030B523B9486858B9002B38D131E0906802 +:10EF500000EB830050F8040C0028F3D1013BF0E7EC +:10EF60008C6804EB800555F8045C25BB0138EAE7A2 +:10EF70008342096801D2484222E01068002803DD7C +:10EF8000002913DA01201BE000290FDD70B14FF0DA +:10EF9000FF3015E0916851F8235054F823108D424A +:10EFA0000ED803F1FF3302D2404209E0013B591C65 +:10EFB000F0D1002004E0002BDAD08342D8D91068C9 +:10EFC00030BD1FB581EAE173CDF80CD0A3EBE1733E +:10EFD00000934B1C4FF0010318BF012102930191D4 +:10EFE00001A9FFF7ABFF05B05DF804FBF8B50446D7 +:10EFF00008466368B2EB830F4FEA83051CD9521BA6 +:10F000008E18002109F042FC2A4630468118002360 +:10F010009A4213D10020F8BD03F0030123F0030C42 +:10F02000A768CE0057F80C10F14011F0FF0F11D176 +:10F030000133AB42F0D1E9E71346FAE703F00300EE +:10F0400023F00306A7680133C500B859E84001F86A +:10F05000010DDDE76FF00700DDE70000422AF0B5A3 +:10F06000064693B00846154626D801A9FFF7BEFF0D +:10F070000446C8B911493046F3F70CFE044698B966 +:10F0800006F10C07202230463946FFF7F1FD044611 +:10F0900050B920220121384609F0F8FB2A4601A97F +:10F0A0003046FFF768FE04461DB1294601A8FFF768 +:10F0B000C5F8204613B0F0BD014CF6E79CAC010842 +:10F0C00000B3FFFF0246406880B1431E926873B9E7 +:10F0D00052F8231000204FF00042114203D10130BA +:10F0E00052082028F9D10133C0EB4310704752F881 +:10F0F00023100029ECD1013BE9E7000038B5144AA0 +:10F100000125144B0446C26043660823124A8363F8 +:10F110004262124A45644265114AC0E90153C0E99E +:10F120000753C0E91353C0E90A530E4BC0E90F352A +:10F130000D4BC0E90C2583640430FFF7C3FFA065C5 +:10F1400004F14C00FFF7BEFFC4E91705002038BDED +:10F15000DCB3010809FB00085CB30108BCB301087B +:10F160007CB301089CB3010814010024F8B50446DF +:10F170000E464D0901F01F07FFF7A4FF63683044F6 +:10F18000B0EB431F05D81F2E0FD8002F3BD1002016 +:10F190000AE010F01F0118BF012101EB50112046B9 +:10F1A000FFF7C4FC0028EED0F8BD63686FF00300E1 +:10F1B0009A0068431946A942A2F104020BD8AB4257 +:10F1C0004FF0000228BF2B469B00043B191DDCD0EA +:10F1D000A168CA50F9E7A668013906EB020C5CF891 +:10F1E00000C046F802C0E6E7A06850F8251001FA12 +:10F1F00007F3134321FA06F240F82530013563681E +:10F20000AB42F1D8C3E70022C7F12006F7E7436815 +:10F21000B1EB431F3FBF4A09836801F01F0153F858 +:10F2200022003ABF20FA01F101F0010000207047EE +:10F23000F8B507460D46FFF777FE022806461DD1B2 +:10F2400000212846FFF7E3FF60BB01212846FFF7B6 +:10F25000DEFF044630BB2846FFF734FFFB6D013864 +:10F2600098421FD1FE2807D131462846FFF7CFFF2D +:10F270000D4B041E18BF1C462046F8BD01280FD1B7 +:10F2800001462846FFF79DFE00280BDB07F14C01E5 +:10F290002846FFF753FE0028034CB8BF0024EBE7D5 +:10F2A000024CE9E7004CE7E780B3FFFF80B0FFFFC7 +:10F2B00070B50E4601210446FFF738FC054648B9F3 +:10F2C00062680146A068920009F0E0FAA3681E6037 +:10F2D00001232360284670BD10B501210446FFF7C5 +:10F2E000E7FF60B9012104F10C00FFF7E1FF30B93D +:10F2F000014604F11800BDE81040FFF7D9BF10BD6A +:10F30000F0B443684E0901F01F04B34201D304D1A5 +:10F310005CB30021F0BCFFF7CBBF1F2927D804BB8B +:10F320000020F0BC704782685759043542F82170BC +:10F3300001319A1B8A42F6D800219342EFD98568A1 +:10F3400045F822100132F8E7866856F8235025FA6E +:10F3500004F20A4305FA07F146F82320013BF3D2F1 +:10F36000DEE70021C4F12007F8E71F29D8D9B5004E +:10F370000021DEE78842F8B506460D46144601D165 +:10F380000020F8BD4968FFF7D1FB0028F9D171686A +:10F390002846FFF7CBFB0028F3D1624231682243B5 +:10F3A0002C68C2F3C012C2F1010303FB01F7514301 +:10F3B00004FB027434602C6804FB0311296071683B +:10F3C0008842DDD2D6F808C0AF685CF8201057F844 +:10F3D000204003FB01FE514304FB02E44CF82040B3 +:10F3E00057F8204004FB031147F820100130E6E7EE +:10F3F0002DE9F0410D46496806461446FFF796FB95 +:10F40000B8B96242296833682243D5F804E0D5F8D8 +:10F410000880C2F3C0125143C2F1010C03FB0C136C +:10F42000B168336003469E4505D16B6872689A42A5 +:10F430000CD8BDE8F08158F8237051F823405743A9 +:10F4400004FB0C7441F823400133ECE751F823200E +:10F450000CFB02F241F823200133E7E710B5044624 +:10F4600070B1806838B16168890001D0FEF7E6FEAE +:10F47000A06809F0A1F900230122A360C4E90023D8 +:10F4800010BD10B50446FFF7E9FF04F10C00FFF7CB +:10F49000E5FF04F11800BDE81040FFF7DFBF08B139 +:10F4A000FFF7EFBF704770B5044660B3036E012BE2 +:10F4B00012D00430FFF7D2FF04F11000FFF7CEFFA7 +:10F4C00004F11C00FFF7CAFF04F12800FFF7E7FF73 +:10F4D00004F14C00FFF7C2FF636F8BB920467C211B +:10F4E000BDE87040FEF7AABE06FB05000135FFF738 +:10F4F000D6FFD4E91D03AB42F6D809F05DF9EDE77C +:10F5000000252426F5E770BD2DE9F84311F0030628 +:10F5100099464368054618BF01260F46904606EBFC +:10F520009106B34208D100212846FFF7C1FE0446E8 +:10F5300088B12046BDE8F883FFF790FF0023012241 +:10F5400031462846AB60C5E90023FFF7EFFA0446D1 +:10F550000028E8D0EDE7C7EB8603A9683A4648469D +:10F560001944C04704460028E3D13146A868FDF796 +:10F57000FFFEDEE72DE9F04112F003064368044682 +:10F58000884618BF0126174606EB9206B34208D1FB +:10F5900000212046FFF78CFE054688B12846BDE8CD +:10F5A000F081FFF75BFF0023012231462046A36074 +:10F5B000C4E90023FFF7BAFA05460028E8D0EDE7D2 +:10F5C000B8F1000FEAD0A368C7EB860041463A467F +:10F5D000184409F04DF93146A068FDF7C9FEDDE792 +:10F5E0002DE9F84381460D4690461E461BB94D4C09 +:10F5F0002046BDE8F8830430FFF764FDC41D48468B +:10F60000FFF792FC02284FEAD40765D1BE42EED143 +:10F6100016F003016B6818BF012101EB54149C42E2 +:10F620004AD100212846FFF743FE04460028DFD1D7 +:10F63000A968E20018F8043024F00300013402F055 +:10F640001802A74203FA02F20B5843EA02030B50D6 +:10F65000EFD805F10C00FFF701FF99F80030092BF6 +:10F6600012D1FB006A68013BB3EB421F0CD2580970 +:10F67000A968012203F01F0302FA03F351F82020C6 +:10F6800022EA030241F82020012105F11800FFF7CA +:10F690000FFE04460028ABD14846FFF745FC012881 +:10F6A0008146A5D198F80030C3B9012E9FD12846D4 +:10F6B000BDE8F843FFF710BE2846FFF7CFFE002352 +:10F6C000012221462846AB60C5E90023FFF72EFA48 +:10F6D00004460028A5D08BE7134CDDE7042B1FD18F +:10F6E0007B000133B34282D13A4608F1010128463A +:10F6F000FFF740FF044600287FF47AAF791C3A46B2 +:10F7000005F10C004144FFF735FF044600287FF463 +:10F710006FAF494605F11800BDE8F843FFF7C8BDD3 +:10F72000014C65E780B0FFFF80B1FFFF884270B5F4 +:10F7300005460E4603D04C683CB9FFF78FFE00200B +:10F7400011E0B36853F8243013B9013C002CF8D110 +:10F7500001346A683368A2422B6005D221462846EC +:10F76000FFF7E4F940B170BD121BA86800219200B8 +:10F7700000EB840009F08AF8A200B168A86809F0DB +:10F7800077F8DCE738B504460D46FFF7CFFF70B9D0 +:10F7900005F10C0104F10C00FFF7C8FF38B905F1C1 +:10F7A000180104F11800BDE83840FFF7BFBF38BDAD +:10F7B0002DE9F04F002389B0174688424FF001022F +:10F7C0008146884607930493CDE90523CDE90223BA +:10F7D00006D105A8FFF7AAFF064690BB0DF1140855 +:10F7E000B94506D1494602A8FFF7A0FF064640BB2F +:10F7F00002AFD8F804A0BAF1000F2CD17C68ACBBE2 +:10F800000AEB04014846FFF791F90646C8B90146DC +:10F810004846FFF74DFD064698B96FF00F034FEAD3 +:10F820001A1B04F1FF3C03FB0BABABF10803019384 +:10F83000BCF1FF3F23D1D8F800203B685343C9F8FF +:10F84000003002A8FFF70AFE05A8FFF707FE3046C2 +:10F8500009B0BDE8F08FD8F8083003EB8A0353F8FD +:10F86000043C002BCAD10AF1FF3AC4E7BB6803EBA2 +:10F87000840353F8043C002BC2D1013CBFE7BA68B3 +:10F880000024D9F8083052F82CE05246D8F8085035 +:10F8900003EB8C030F2A48D8BBF1070F40F2B78067 +:10F8A00055F8040B1968EEFB601443F8041B55F877 +:10F8B000040B1968EEFB601443F8041B55F8040BA5 +:10F8C0001968EEFB601443F8041B55F8040B196823 +:10F8D000EEFB601443F8041B55F8040B1968EEFBAB +:10F8E000601443F8041B55F8040B1968EEFB601410 +:10F8F00043F8041B55F8040B1968EEFB601443F839 +:10F90000041B55F8040B1968EEFB601443F8041B44 +:10F91000019A002A7DD11A68141943F8044B4FF05C +:10F920000104F8D20CF1FF3C82E7103A55F8040BC1 +:10F930001968EEFB601443F8041B55F8040B1968B2 +:10F94000EEFB601443F8041B55F8040B1968EEFB3A +:10F95000601443F8041B55F8040B1968EEFB60149F +:10F9600043F8041B55F8040B1968EEFB601443F8C8 +:10F97000041B55F8040B1968EEFB601443F8041BD4 +:10F9800055F8040B1968EEFB601443F8041B55F896 +:10F99000040B1968EEFB601443F8041B55F8040BC4 +:10F9A0001968EEFB601443F8041B55F8040B196842 +:10F9B000EEFB601443F8041B55F8040B1968EEFBCA +:10F9C000601443F8041B55F8040B1968EEFB60142F +:10F9D00043F8041B55F8040B1968EEFB601443F858 +:10F9E000041B55F8040B1968EEFB601443F8041B64 +:10F9F00055F8040B1968EEFB601443F8041B55F826 +:10FA0000040B1968EEFB601443F8041B42E75A46E6 +:10FA10007FE7013A55F8040B1968EEFB601443F8D0 +:10FA2000041B76E71FB50123009201AACDF80CD084 +:10FA3000CDE90133FFF7BCFE05B05DF804FB2DE90D +:10FA4000FF411646002301220546B0420F460393AC +:10FA5000CDE9012306D1014601A8FFF767FE044660 +:10FA600020BB01AEBD421AD101232B60D6E901377C +:10FA70001BBBAA680024161F2046984225D1ACB1B2 +:10FA80004FF0FF30696899423AD952F8231099B380 +:10FA900052F823100024013942F8231006E03946B9 +:10FAA0002846FFF743FE04460028DDD001A8FFF7F3 +:10FAB000D5FC204604B0BDE8F08107EB830252F884 +:10FAC000042C002AD5D1013BD2E756F804EFAEEB67 +:10FAD0000401316057F820C001306145A1EB0C01F1 +:10FAE0002CBF4FF000084FF001083160A6452CBF35 +:10FAF000444608F10104C0E742F823000133C1E79E +:10FB0000C6D16FF00904D1E730B58FB009230122C7 +:10FB10000021044605A88DF803100490CDE90223C6 +:10FB2000242208F0B3FE10212046FEF7FFFF054611 +:10FB3000002840F02982A36801A81A68196A019276 +:10FB40000DF10302FDF79FF9A3680DF1030201A86F +:10FB5000596AFDF798F9A3680DF1030201A8D96A63 +:10FB6000FDF786F9A3680DF1030201A8196BFDF7F3 +:10FB70007FF9A3680DF1030201A8596BFDF778F92D +:10FB8000A3680DF1030201A8996BFDF771F9019AC1 +:10FB9000A3681A600DF103029DF903105B68002948 +:10FBA0008DF80350019380F2F281494201A8FDF7DC +:10FBB0005FF9A3680DF1030201A8596AFDF763F923 +:10FBC000A3680DF1030201A8996AFDF75CF9A36827 +:10FBD0000DF1030201A8196BFDF74AF9A3680DF1B5 +:10FBE000030201A8596BFDF743F9A3680DF1030265 +:10FBF00001A8996BFDF73CF9A3680DF1030201A878 +:10FC0000D96BFDF735F9019AA3689DF903105A6085 +:10FC10000DF103029B680193002399428DF8033094 +:10FC200080F2B981494201A8FDF722F9A3680DF1DC +:10FC3000030201A8996AFDF726F9A3680DF10302F2 +:10FC400001A8D96AFDF71FF9A3680DF1030201A805 +:10FC5000596BFDF70DF9A3680DF1030201A8996B2B +:10FC6000FDF706F9A3680DF1030201A8D96BFDF7B2 +:10FC7000FFF8019AA3689DF903109A600DF1030241 +:10FC8000DB680193002399428DF8033080F287816D +:10FC9000494201A8FDF7ECF8A3680DF1030201A8A1 +:10FCA000D96AFDF7F0F8A3680DF1030201A8D96A3B +:10FCB000FDF7E9F8A3680DF1030201A8196BFDF740 +:10FCC000E2F8A3680DF1030201A8196BFDF7DBF858 +:10FCD000A3680DF1030201A8596BFDF7D4F8A368DE +:10FCE0000DF1030201A8D96BFDF7C2F8A3680DF16D +:10FCF000030201A8196AFDF7BBF8A3680DF103021E +:10FD000001A8596AFDF7B4F8019AA3689DF9031098 +:10FD1000DA600DF103021B690193002399428DF80B +:10FD2000033080F24081494201A8FDF7A1F8A368A1 +:10FD30000DF1030201A8196BFDF7A5F8A3680DF1F9 +:10FD4000030201A8196BFDF79EF8A3680DF10302E9 +:10FD500001A8596BFDF797F8A3680DF1030201A8FC +:10FD6000596BFDF790F8A3680DF1030201A8996B98 +:10FD7000FDF789F8A3680DF1030201A8596AFDF7A0 +:10FD800077F8A3680DF1030201A8996AFDF770F8EE +:10FD9000019AA3689DF903101A610DF103025B69D2 +:10FDA0000193002399428DF8033080F2008149428B +:10FDB00001A8FDF75DF8A3680DF1030201A8596BD6 +:10FDC000FDF761F8A3680DF1030201A8596BFDF777 +:10FDD0005AF8A3680DF1030201A8996BFDF753F8D7 +:10FDE000A3680DF1030201A8996BFDF74CF8A36815 +:10FDF0000DF1030201A8D96BFDF745F8A3680DF1D9 +:10FE0000030201A8996AFDF733F8A3680DF1030214 +:10FE100001A8D96AFDF72CF8019AA3689DF903108F +:10FE20005A610DF103029B690193002399428DF8F9 +:10FE3000033080F2C080494201A8FDF719F8A36899 +:10FE40000DF1030201A8996BFDF71DF8A3680DF1F0 +:10FE5000030201A8996BFDF716F8A3680DF10302E0 +:10FE600001A8D96BFDF70FF8A3680DF1030201A8F3 +:10FE7000D96BFDF708F8A3680DF1030201A8996B8F +:10FE8000FDF701F8A3680DF1030201A8596BFCF717 +:10FE9000FAFFA3680DF1030201A8196AFCF7E8FF55 +:10FEA000A3680DF1030201A8596AFCF7E1FF019A6A +:10FEB000A3689DF903109A610DF10302DB690193B8 +:10FEC000002399428DF8033079DA494201A8FCF702 +:10FED000CFFFA3680DF1030201A8D96BFCF7D3FF94 +:10FEE000A3680DF1030201A8D96BFCF7CCFFA3684E +:10FEF0000DF1030201A8D96BFCF7C5FFA3680DF152 +:10FF0000030201A8196AFCF7BEFFA3680DF1030202 +:10FF100001A8996AFCF7ACFFA3680DF1030201A8E0 +:10FF2000D96AFCF7A5FFA3680DF1030201A8196BBC +:10FF3000FCF79EFFA3680DF1030201A8596BFCF7C3 +:10FF400097FF019BA1689DF90320CB6122EAE27330 +:10FF50000B6200230193082301336068984232D872 +:10FF6000002A11DA039B52420499204603F1804390 +:10FF7000013B41F82320224602A9FFF760FD054618 +:10FF800010B94FF0FF33236028460FB030BD01A8F1 +:10FF9000FCF779FF0DE601A8FCF775FF46E601A81E +:10FFA000FCF771FF78E601A8FCF76DFFBFE601A83A +:10FFB000FCF769FFFFE601A8FCF765FF3FE701A832 +:10FFC000FCF761FF85E7019841F82300C4E738B5E5 +:10FFD0000C46051D29462046FEF7B0FF002801DA31 +:10FFE000002006E02A4621462046FFF728FD00288B +:10FFF000F0D038BD90422DE9F04107460D46164637 +:020000040801F1 +:1000000002D0884229D1354601236E683B6066BB29 +:1000100031463846FEF78AFD044618BBA9680546F6 +:10002000BB6886422AD103EB8603DDB17A6806F10C +:100030000108B24208D841463846FEF777FD00284D +:100040002FD1BB6803EB86031A684646551943F85F +:10005000045B2CBF01250025E7E7FFF767FB04469B +:100060000028D0D02046BDE8F081AB6803EB8603C2 +:1000700053F8043C002BCBD1013EC8E753F82020B5 +:1000800012EB050C51F820202CBF012500251CEB9C +:10009000020243F820202CBF012200220130154427 +:1000A000BFE70446DEE7F8B50D68044613680F465F +:1000B00016466B43002B16DD11463846FCF7EEFE64 +:1000C000002806DB324639462046FFF7B8FC40B12F +:1000D000F8BD3A4631462046FFF7B1FC0028F7D17B +:1000E0006D422560F4E7FFF785FFF0E77FB5002359 +:1000F00001F10C0516460122011D01A80393CDE96B +:1001000001232A46FFF7CFFF044668B90146284677 +:10011000FEF757FF01A900280CBF002206F00102DC +:100120002846FFF765F9044601A8FFF797F920462E +:1001300004B070BD2DE9F74F9DF8308006460D469E +:100140001F46C8F3450902F10C044FF0000B01F102 +:100150000C0ABB4508D14FEAD8122946304603B0F5 +:10016000BDE8F04FFFF7C2BF5FFA8BF2A4F10C01BC +:100170002846A2EB09035A425A410192FFF738F987 +:1001800048B92146019A50460BF1010B2434FFF780 +:100190002FF90028DDD003B0BDE8F08FF8B50D6869 +:1001A000044613680F4616466B4316D5114638466B +:1001B000FCF774FE002806DB324639462046FFF77E +:1001C0003EFC40B1F8BD3A4631462046FFF737FCC9 +:1001D0000028F7D16D422560F4E7FFF70BFFF0E749 +:1001E00038B50C46054611461A462046FFF7D6FF9D +:1001F00028B921462846BDE83840FFF7E8BE38BD9B +:1002000070B50C46064611461A462046FFF74BFFCE +:10021000054680B904362368002B0CDA00212046FD +:10022000FEF7CFFE30B1324621462046FFF7B6FF3B +:100230000028F0D00546284670BD2DE9F04F06464F +:100240009BB08946104600219046FEF7BAFE002872 +:10025000C0F29B8105D16FF00B0420461BB0BDE8B6 +:10026000F08F00230125414648461495CDE90853F7 +:10027000CDE90A35CDE90C33CDE90E53CDE9103582 +:10028000CDE912330323159317AB1693FCF706FE43 +:10029000002817DA36B149463046FFF747FA0446D8 +:1002A000002846D100213046FEF78BFE0028C0F220 +:1002B0005B8141463046FEF741FE002880F25B81BB +:1002C0000024CAE7494608A8FFF730FA044680BB75 +:1002D00041460BA8FFF72AFA044650BBD9F8041090 +:1002E0000EA80B9502310895FEF720FC044600BBD2 +:1002F00001460EA8FEF7DCFF0446D0B9022111A882 +:10030000FEF714FC0446A0B90BA8FEF7DBFE00F0D4 +:100310001F001F2820D0C0F11F0708A83946FEF78C +:1003200025FF044628B939460BA8FEF71FFF0446EF +:1003300098B108A8FFF792F80BA8FFF78FF80EA85E +:10034000FFF78CF811A8FFF789F80C2117A8FDF723 +:1003500075FF002CA6D080E72746099D0BA8DDF885 +:1003600030B0A5EB0B034FEA431A01935146FEF759 +:10037000FDFE04460028DCD1019B9B000BA908A8C8 +:100380000193FEF7DBFD0028019B36DA51460BA8EE +:10039000FEF7B6FF04460028CBD10BF1FF3305F181 +:1003A000FF3A05F1804501939B00013D03930BF15A +:1003B0008043A5EB0B05023BAD009B000793019B1F +:1003C000534529D3002EB4D0394608A8FEF798FF2C +:1003D00088B9D9F8003008A930460893FFF7A6F984 +:1003E0000146002840F0BE803046FEF7EAFD0028B6 +:1003F0009FD10123336004469BE710990193CA58AB +:100400000132CA5008A90BAA0846FFF74CFE019B0F +:1004100004460028B2D08CE7DDF828B04FEA8A0302 +:10042000039A04930BEB8A035BF82A1006930D9B47 +:100430009A58049B9142A3F104030593109B03EB8C +:100440000500029075D34FF0FF325A51BAF1010FF7 +:10045000029A16BF069B002353F8083C1793059B8E +:100460005BF803301893049B5BF803301993029BED +:100470001B6801331360109A002111A85359013BE6 +:100480005351FEF715FF0028B5D1019B0D9A002BA3 +:1004900066D0079BD158139B19600399525811A934 +:1004A0005A600846109B5A59FFF7BCFA0028A2D19F +:1004B00014A911A8FEF742FD0028DCDC109B0BA953 +:1004C00011A85A59FFF7AEFA002894D14FEAC50B8C +:1004D00011A85946FEF74AFE00288CD108A911AA96 +:1004E0000846FFF7E0FD014600283BD108A8FEF7CB +:1004F00068FD002819DA0BA911A8FFF717F90028E1 +:100500007FF479AF594611A8FEF730FE00287FF43A +:1005100072AF08A911AA0846FFF740FE00287FF431 +:100520006AAF109A5359013B53510AF1FF3A043D07 +:1005300045E7059B5BF803007AB100230AF082F8D7 +:100540000B46002102464FF0FF30994208BF90420F +:1005500000D20246029B1A6078E74FF0FF32F9E7BB +:10056000019998E70C46E4E6424631463046FFF7EB +:1005700015FE0446EDE6424631463046FFF793FD50 +:10058000044600283FF495AE67E66FF0090464E680 +:10059000F8B50C46064611461A462046FFF708F9FC +:1005A000054650BB776E37B9321D21462046BDE85F +:1005B000F840FFF742BE2368002B04DA01462046CC +:1005C000FEF7FFFC60BB2046FEF77CFDB36DB0EB91 +:1005D000430F25D82046B847054670B9043623682E +:1005E000002B04DA00212046FEF7EBFC38B9314637 +:1005F0002046FEF7A3FC00280ADA2846F8BD32465A +:1006000021462046FFF7CAFD0028E8D00546F4E75A +:10061000324621462046FFF712FA0028E7D0F5E7D8 +:10062000004DEAE780B0FFFF2DE9F0430E468BB0A6 +:100630000546012106F11800FEF7C3FC0446002818 +:1006400040F099802846FEF76FFC022807460FD13C +:100650003046FEF737FDEB6D07300733C008B0EBCF +:10066000D30F474B88BF1C4620460BB0BDE8F08334 +:10067000012840F0828021463046FEF7A2FC002887 +:1006800079DB06F10C0921464846FEF79AFC002862 +:1006900071DB05F1040830464146FEF74FFC0028A7 +:1006A00069DA41464846FEF749FC002863DA4B46C2 +:1006B0004A4601A92846CDE90174CDE90347CDE9B1 +:1006C0000544FFF765FF044600284DD13346324606 +:1006D00004A92846FFF75CFF0446002844D1AB6913 +:1006E000002B37D1032304A907AACDF824D0009307 +:1006F00001230846CDE90733FFF7D5FC044600285F +:1007000032D1049B002B19DB04AA3346284611463C +:10071000FFF73EFF044638BB04AA05F11C03284638 +:100720001146FFF75DFD0446F0B904A901A8FEF7E4 +:1007300005FC134B041E18BF1C4615E0002104A83D +:10074000FEF73FFC0028DFD004A942460846FFF729 +:1007500025FDD3E704AA05F1100328461146FFF74B +:100760003FFD04460028CFD001A8FEF777FE04A87D +:10077000FEF774FE78E7024C76E7024C74E700BFA0 +:1007800080B3FFFF80B0FFFF2DE9F04F876D85B08C +:1007900091469A4607370023012206460D46FF0878 +:1007A0004FF00C0800F1040B0393CDE901235346ED +:1007B0004A46394601A8FEF7A7FE0446F0B9594655 +:1007C00001A8FEF7BBFB00281FDAB8F1010821D011 +:1007D000012101A8FEF7F5FB0028E8DD01AB2A4660 +:1007E00029463046FFF7D4FE044638B905F1180211 +:1007F00001AB30461146FFF7CBFE044601A8FEF7D9 +:100800002DFE204605B0BDE8F08F012101A8FEF7BE +:1008100077FDD2E7004CF1E700B3FFFF2DE9F04F81 +:10082000876D87B091469A46073700230122054617 +:100830000E46FF084FF00C0800F1040B05930293DD +:10084000CDE90323CDE9002353464A46394603A8A0 +:10085000FEF75AFE0446B8BB594603A8FEF76EFBE6 +:1008600000283BDAB8F101083DD0012103A8FEF7CA +:10087000A8FB0028E8DD06F1180203AB2846114664 +:10088000FFF786FE0446F8B903AB694628461A46C8 +:10089000FFF77EFE0446B8B96B463246314628461D +:1008A000FFF776FE044678B903AB6A4669462846E8 +:1008B000FFF76EFE044638B906F10C026B46284677 +:1008C0001146FFF765FE044603A8FEF7C7FD68461C +:1008D000FEF7C4FD204607B0BDE8F08F012103A854 +:1008E000FEF70EFDB6E7014CEEE700BF00B3FFFFD9 +:1008F0002DE9F04100238CB00D4601210B930646F3 +:100900000893174605930293CDE90913CDE9061321 +:10091000CDE90313CDE900138369002B40F0DD809E +:1009200002F1180306A91A46FFF732FE0446002812 +:1009300040F0C38006AB3A4603A93046FFF750FCAF +:100940000446002840F0B98006AB3A466946304676 +:10095000FFF756FC0446002840F0AF806B4603AA20 +:1009600006A93046FFF714FE0446002840F0A58093 +:10097000032206A909A8FFF755F80446002840F00D +:100980009C8006F10408414609A8FEF7D7FA002822 +:1009900080F28A8007F10C0803A93046434642469C +:1009A000FFF7F6FD0446002840F0878003A9304693 +:1009B000F2F760F9044600287FD103AB3A4606A956 +:1009C0003046FFF7E5FD0446002876D106A93046FB +:1009D000F2F750F9044600286FD103AB6946304660 +:1009E0001A46FFF7D5FD0446002866D16946304611 +:1009F000F2F740F9044600285FD109AB03A930465D +:100A00001A46FFF7C5FD0446002856D103AA06ABD7 +:100A100030461146FFF7F4FB044600284DD103AAE7 +:100A200006AB30461146FFF7EBFB0446002844D1E5 +:100A300006AA03AB30461146FFF7E2FB0446002846 +:100A40003BD106AA09AB30461146FFF7A1FD04468B +:100A500098BB06AA6B4630461146FFF7D1FB044609 +:100A600058BB07F11803424669463046FFF790FD30 +:100A7000044610BB69463046F2F7FCF80446E0B97C +:100A800003A92846FEF752FE0446B0B906A905F1AF +:100A90000C00FEF74BFE044678B9694605F11800D4 +:100AA000FEF744FE044608E009A942460846FEF760 +:100AB000C6FF044600283FF466AF09A8FEF7CEFC47 +:100AC00006A8FEF7CBFC03A8FEF7C8FC6846FEF7B5 +:100AD000C5FC20460CB0BDE8F081134606A9FFF71F +:100AE00057FD04460028E8D1032206A909A8FEF70D +:100AF00099FF04460028E0D106F10408414609A800 +:100B0000FEF71CFA00282FDA06F1100800214046F3 +:100B1000FEF757FA00283FF43DAF07F1180306A986 +:100B200030461A46FFF734FD04460028C5D106AB0F +:100B300003A930461A46FFF72BFD04460028BCD116 +:100B4000434603AA06A93046FFF722FD04460028C3 +:100B5000B3D109AA06AB30461146FFF741FB044664 +:100B600000283FF417AFA8E709A942460846FEF758 +:100B700066FF04460028C1D09FE700002DE9F0433E +:100B800002F1180997B006460D46484600219046E6 +:100B90001F46FEF716FA40B939462846FEF7F2FD21 +:100BA0000446204617B0BDE8F0833B6A7BB107F1ED +:100BB000180400212046FEF704FA08B94146ECE784 +:100BC00001212046FEF7FDF9002840F0FF800023B8 +:100BD000012213A93046159312930F930C93099396 +:100BE00006930393CDE91323CDE91023CDE90D231B +:100BF000CDE90A23CDE90723CDE90423CDE901237B +:100C00004B464A46FFF7C4FC044600283AD14B46FF +:100C100013AA10A93046FFF7BBFC044690BB13AAE9 +:100C20003B4630461146FFF7B3FC044650BB10AAC2 +:100C300007F10C0330461146FFF7AAFC044608BB37 +:100C400013AA434630461146FFF7DAFA0446C8B9FC +:100C500010AA08F10C0730463B461146FFF7D0FAC0 +:100C6000044678B9014613A8FEF7ABF920BB21462C +:100C700010A8FEF7A6F9D8B9424629463046FFF734 +:100C800037FE044613A8FEF7E9FB10A8FEF7E6FBC3 +:100C90000DA8FEF7E3FB0AA8FEF7E0FB07A8FEF7A6 +:100CA000DDFB04A8FEF7DAFB01A8FEF7D7FB78E727 +:100CB0002846FEF711FBE4E713AB4A4601A930468C +:100CC000FFF766FC04460028DCD113AB0DA93046C3 +:100CD0001A46FFF75DFC04460028D3D113AB0DAADA +:100CE0000AA93046FFF754FC04460028CAD10DAAD1 +:100CF000434630461146FFF74BFC04460028C1D15D +:100D00000DA913A8FEF712FD04460028BAD113A9B5 +:100D10003046F1F7AFFF04460028B3D110AB07A966 +:100D200030461A46FFF734FC04460028AAD107AA29 +:100D300013AB30461146FFF763FA04460028A1D1F1 +:100D400007AA0AAB30461146FFF75AFA04460028B4 +:100D500098D10DAA07AB30461146FFF751FA044669 +:100D600000288FD10DAA10AB30461146FFF710FCBA +:100D70000446002886D10AAA3B4630461146FFF7B2 +:100D800007FC044600287FF47DAF0AAB0DAA04A936 +:100D90003046FFF735FA044600287FF473AF07A901 +:100DA0002846FEF7C3FC044600287FF46BAF04A975 +:100DB00005F10C00FEF7BAFC044600287FF462AF90 +:100DC00001A905F11800FEF7B1FC5AE7004CE8E66E +:100DD00080B0FFFF2DE9F0430646A3B00F46104652 +:100DE00001211546FEF7EDF8002840F3C4810023E9 +:100DF0004FF0010939461CA81893159312930F93CD +:100E00001B930C93099306930393CDE91693CDE9B5 +:100E10001393CDE91093CDE90D93CDE91993CDE965 +:100E20000A93CDE90793CDE90493CDE90193CDE988 +:100E30001C93CDE91E39CDE92033FEF777FC04463B +:100E400000285AD129461FA8FEF770FC0446002846 +:100E500053D11CA8FCF755F880461FA8FCF751F8A1 +:100E6000804528BF80461CA84146FEF749FA044643 +:100E7000002842D141461FA8FEF742FA0446002846 +:100E80003BD1CDF87C90CDF8709000211CA8FEF7E6 +:100E900098F858B941461FA8FEF768F9044660BBA8 +:100EA0001FA919A8FEF742FC044626E01CA8FCF77F +:100EB00028F801461CA8FEF723FA0446E8B91FA843 +:100EC000FCF71FF801461FA8FEF71AFA0446A0B95E +:100ED0001FA91CA8FEF732F80028C0F29C801CA9AC +:100EE0001FAA0846FEF7ABFD044630B901211CA835 +:100EF000FEF706FA04460028C7D01CA8FEF7AEFA93 +:100F00001FA8FEF7ABFA002C40F0A680012119A81B +:100F1000FEF757F8002840F02B812A46394616A8DC +:100F2000FFF78BF90446002840F0968016A913A815 +:100F3000FEF7FCFB0446002840F08E8029460AA8F4 +:100F4000FEF7F4FB0446002840F08680294607A8F7 +:100F5000FEF7ECFB044600287ED1012110A8FEF725 +:100F6000A7F90446002877D101460DA8FEF7A0F99D +:100F70000446002870D1014604A8FEF799F90446FA +:100F8000002869D1012101A8FEF792F90446002842 +:100F900062D1159B1B68D80749D5099B1B68DB07E5 +:100FA00040F18F8007A913A8FDF7C8FF0028C0F201 +:100FB000B88013A907AA0846FFF775F80446002869 +:100FC0004AD110A904AA0846FFF76DF80446002884 +:100FD00042D101AA0DA90846FFF765F8044600288A +:100FE0003AD1002113A8FDF7ECFF0028D1D1002150 +:100FF00004A8FDF7E6FF0028C0F2A680294604A851 +:10100000FDF79CFF002880F2A98004A93046FEF776 +:101010008DFB044620E01FA91CAA0846FEF70FFD21 +:10102000044600287FF469AF01211FA860E7012171 +:1010300013A8FEF765F9044670B9129B1B68DF0719 +:1010400029D40F9B1B68DC0725D4012110A8FEF7CB +:1010500057F9044600282FD016A8FEF7FFF913A869 +:10106000FEF7FCF910A8FEF7F9F90DA8FEF7F6F95E +:1010700019A8FEF7F3F90AA8FEF7F0F907A8FEF79A +:10108000EDF904A8FEF7EAF901A8FEF7E7F9204612 +:1010900023B0BDE8F08310A90AAA0846FFF77EF83E +:1010A00004460028D8D10DA916AA0846FEF7FBFF72 +:1010B00004460028C9D0CFE701210DA8FEF720F98A +:1010C00064E7012107A8FEF71BF904460028C3D1F5 +:1010D000069B1B68D90713D4039B1B68DA070FD440 +:1010E000012104A8FEF70CF904460028B4D101211F +:1010F00001A8FEF705F9044600283FF44EAFABE720 +:1011000004A90AAA0846FFF749F804460028A3D113 +:1011100001A916AA0846FEF7C6FF04460028DFD03C +:101120009AE707A913AA0846FEF7BDFF0446002860 +:1011300092D104A910AA0846FEF7B5FF044600287C +:101140008AD10DAA01A946E704A92A460846FFF755 +:1011500025F8044600283FF44AAF7DE704A92A4653 +:101160000846FEF7A0FF044600283FF447AF73E7A8 +:101170006FF00D0470E76FF0030488E72DE9F0418C +:1011800001F1180588B00746884628460021FDF77A +:1011900018FF044600283BD0002301263A1D2946AB +:1011A00005A807930493CDE90563CDE90263FFF732 +:1011B00011FE044630BB05AB02A938461A46FFF7BC +:1011C000E7F90446F0B902AB424641463846FFF71C +:1011D000DFF90446B0B908F10C0202AB38461146FB +:1011E0000192FFF7D5F9044660B9019A05AB38467C +:1011F0001146FFF7CDF9044620B931462846FEF7DF +:1012000057F8044605A8FEF729F902A8FEF726F9C3 +:10121000204608B0BDE8F081012A2DE9F04F0646CE +:101220008DB00C46154607D80968FFF7A7FF824620 +:1012300050460DB0BDE8F08F0C21104608F0CAFDF5 +:101240000746002800F0B7804FF00C0881460246A0 +:10125000012108FB05F800EB0803009300239360CD +:101260000098C2E900130C329042F8D138460B9333 +:1012700008930593CDE90913CDE90613CDE90313CE +:1012800021681831FEF752FA824690BB04F1040B34 +:1012900007F10C0104EB85045BF8043BA1F10C029F +:1012A000304601911833FFF773F9824608BB019964 +:1012B0005C4501F10C01EFD1A8F10C01321D09A828 +:1012C0003944FFF787FD824698B9013D4FF00C087D +:1012D000A7F10C0B15BB09A906A8FEF727FA824651 +:1012E00038B906AB03A930461A46FFF751F98246D2 +:1012F00038B309A8FEF7B2F806A8FEF7AFF803A8BE +:10130000FEF7ACF8484609F10C09FEF7A7F8009B78 +:101310004B45F7D1384607F04FFA89E708FB05B38C +:1013200009AA06A93046FFF733F982460028E0D122 +:1013300054F8043C09AA304618331146FFF728F93F +:10134000CDE754F8042C03AB30461146FFF720F9E3 +:1013500082460028CDD154F8042C03AB30460C3221 +:101360001146FFF715F982460028C2D154F8042C23 +:1013700006AB30460C321146FFF70AF982460028C8 +:10138000B7D1B16854F8040CFDF7FCFB8246002885 +:10139000AFD154F8040CB1680C30FDF7F3FB824672 +:1013A0000028A6D154F8040D1830FEF757F8002D88 +:1013B0009FD0013D8EE7DFF804A039E780B2FFFF40 +:1013C00070B404680E1B002E07DD26789E4208D1FB +:1013D0000134046070BCFBF7AEBD6FF05F0070BC01 +:1013E00070476FF06100FAE72DE9F74390461F461A +:1013F00001AA302305468946FFF7E2FF0446F8B903 +:101400002E68A9EB0609B9F1000F35DD01994246B6 +:10141000337828460E4442F8043B06233146FFF752 +:10142000CFFF044660B92A68D8F80410C8F808202D +:101430005318B3422B6007D10C213846FCF7FEFE4F +:10144000204603B0BDE8F083515C01333A4628469C +:1014500042F8041B31462B60FBF76DFD0446002863 +:10146000EED12B687A68BB601344B3422B600CBF8B +:1014700004466FF06504E3E76FF05F04E0E737B51B +:101480000223154601AA0446FFF79AFF40B9019AC4 +:1014900028462168FEF76EF82368019A13442360FA +:1014A00003B030BD2DE9F04F97B002931368209C34 +:1014B0000F2B0193CDE90A0200F2F181219BB54D7A +:1014C0000B44B54EB54F0C93219B0C9A934207D118 +:1014D0000B9B00201A46019B136017B0BDE8F08FEC +:1014E000019B83B1019B2199E35C11F8012B5340CF +:1014F000229A219102F8013B019B2292013303F0D1 +:101500000F030193E0E70A9BDFF898C25A68029B39 +:1015100019680E9113684B400E93029B59680F9106 +:1015200053684B400F93029B9968109193684B400E +:101530001093029BD96802F11003303211910D9380 +:1015400052F8243C4B4011930A9B1B685B10049398 +:10155000013B059303932032DDE90E9ADDE9108308 +:101560005FFA89F0190E55F820005FFA83FE56F8ED +:1015700021105FFA88FB55F82EE04840CAF3072196 +:1015800055F82BB057F821104840C8F307415CF8D4 +:101590002110484052F8401C4140C8B20690080E45 +:1015A0000790C1F307400890C1F3072009904FEA64 +:1015B0001860C8F3072856F820008EEA000EC9F319 +:1015C000072057F820008EEA000ECAF307405CF8A7 +:1015D00020008EEA000E4FEA1A605FFA8AFA56F887 +:1015E000200055F82AA08BEA0000C3F3072BC3F3B1 +:1015F000074357F82BB05CF8233080EA0B00C9F39F +:10160000074B4FEA19695CF82BB056F8299080EA2D +:101610000B008AEA090A57F828908AEA090A8AEA36 +:10162000030A039B002B00F3BF80059B12914FEA36 +:10163000431C049B002B0D9BD8BF4FF0000C634450 +:101640005A689C468AEA020ACDF84CA09968414043 +:1016500053481491DA688EEA020E4FEA1E62CDF802 +:1016600054E010F80290069A10F802801A6988EA8D +:10167000020282EA0968CAF30722825C88EA022829 +:10168000C1F30742825C88EA0248079A10F802B068 +:101690005A69CDF8388082EA0B6B5FFA8AF2825C75 +:1016A0008BEA020BC1F30722825C8BEA022BCEF39A +:1016B0000742825C8BEA024B089A10F802909A6902 +:1016C000099B82EA0942CDF83CB05FFA81F9090E24 +:1016D00010F8099082EA09024FEA1A6910F8099095 +:1016E00082EA0962CEF307295FFA8EFE10F80990AC +:1016F00082EA0922109210F80390CAF30743DCF83B +:101700001CC0C35C8CEA092910F80EC089EA0C09D8 +:1017100010F801C04FEA1821227289EA0C6984F896 +:10172000008061704FEA184189EA034384F804B0ED +:10173000A1704FEA1B214FEA1369237361714FEACD +:101740001B414FEA18680EA8A171110A4FEA1B6BE2 +:1017500084F803806172110C120E84F807B0A17234 +:101760002021E2721A0A84F80F9062731A0C119306 +:10177000A273FCF763FD029B03F1100212F8013D16 +:101780000133DBB21370002B7FF4ACAE029B9A42A4 +:10179000F4D1A7E60415022404210224041902242A +:1017A0003C040024041D0224129152F83C3C8AEAB5 +:1017B0000309069BCDF84C9052F8381C4140149117 +:1017C00052F8340C8EEA000055F823E015904FEAE9 +:1017D000106852F8303C56F8288083EA0E0E079BBA +:1017E0008EEA080EC9F3072857F828808EEA080EFB +:1017F000C1F307485CF828808EEA080E5FFA89F882 +:10180000CDF838E056F823E052F82C3C55F8288003 +:1018100083EA0E0E089B8EEA080EC1F3072857F8DC +:1018200028808EEA080EC0F307485CF828808EEA0C +:10183000080E5CF82380CDF83CE05FFA81FE52F898 +:10184000283C090E55F82EE08EEA080E4FEA19687A +:101850008EEA030E56F82880099B8EEA080EC0F324 +:101860000728C0B257F828808EEA080ECDF840E06D +:1018700055F820E057F82300C9F307438EEA000E1D +:1018800052F8240C56F821108EEA000048405CF80B +:101890002310039B4840013B119003935BE66FF0DC +:1018A00020001AE6F0B5ADF6040D012300220DF577 +:1018B0008060054613F080014DF8232040F8043B7A +:1018C00002F1010218BF1B2183EA4303B2F5807FB6 +:1018D00083EA0103DBB2EDD136480123002213F085 +:1018E000800102F1010240F8043B18BF1B210A2AC3 +:1018F00081EA4303DBB2F2D163232F4C2F4801214D +:101900002370002380F863305DF82130C3F1FF03BA +:1019100055F823E04FEAEE1242EA4E025FFA82FCEB +:10192000C2F3C01242EA4C02D7B2C2F3C01242EA7A +:101930004702D6B2C2F3C01242EA4602D3B283EAE9 +:101940000E0383EA0C037B40734083F0630363540C +:10195000C1540131B1F5807FD6D1DFF85CC0184F9A +:10196000184E194D194C1CF8012B12F0800F4FEA3C +:10197000024314BF1B20002043EA0223013980EAFE +:101980004200C0B282EA000283EA000343EA026333 +:101990004FEA336247F8043B46F8042B4FEA3342E0 +:1019A0004FEA332345F8042B44F8043BDBD10DF612 +:1019B000040DF0BD3C0500243C0400240425022451 +:1019C0000415022404190224041D02240421022403 +:1019D00010B5FCF709FB012380F83F30836B1BB186 +:1019E000064B4FF080625A60D0E90A23BDE81040F0 +:1019F00012F57A7243F10003FBF70BBE00ED00E035 +:101A000008B5EFF3058353B1124B1B689869FCF7D7 +:101A100099FA4FF47A72002308F060FC08BDFBF7D6 +:101A200037FDEFF305836BB10B4BD8680B4B1A688E +:101A30001860824281BF0A490A6801320A60FBF7D6 +:101A400013FDEBE702F0FCFD0028EDD1DFF814C038 +:101A500000DFEBE7282702241801002434270224A2 +:101A600030270224753301082DE9F04F85B0EFF3DC +:101A70000583002B42D00020DFF848A1DAF80040AF +:101A8000FBF706FDD4E90C89FBF7EEFCA36BB8EB82 +:101A9000030869EBE37918EB000449F10005FCF752 +:101AA000A3FA4FF47A73A4FB036703FB05770020C6 +:101AB000FBF78CFA002855D1DAF8003093F83D3066 +:101AC000002B4FD16FF000434FF0FF329D4208BF13 +:101AD0009442ECD0DAF800B09BF83C30002BE6D111 +:101AE000594602A8FCF73DFADDE90223AB4208BFE4 +:101AF000A2420BD301238BF83D30D8E702F0A0FDC2 +:101B00000028B8D1DFF8C0C000DFB5E7FBF7C0FCA4 +:101B1000DBE90C01FBF7A8FC231A4FF0010000934E +:101B200065EB01039BF840100193ABF83C00DBE947 +:101B3000082316EB020C47EB030339B9DBF8182036 +:101B4000116891F8201069BB8BF840004FF000023B +:101B50009BF840008BF83E2010B901208BF8400024 +:101B600062462BE0DAF800402046FCF7C0FA00237A +:101B700094F84020A3870AB184F84030DAF80010C6 +:101B800002A8FCF7EEF9029CEFF305833BB902F0E3 +:101B900057FD20B9A4EB0800DFF830C000DF05B026 +:101BA000BDE8F08FDDE90012002A08BF0529CDD37A +:101BB000BCF57A628BF83E0043F1FF335846FBF7E1 +:101BC00028FD74E7282702243D3C0108D13701088D +:101BD0002DE9F34705460026674FFFF711FF85F80B +:101BE0002460FBF755FC6B6801A91B1A002B2B68BE +:101BF000D8BF686001931BB15A69121A002A3BDDF5 +:101C00002B6003B11D610E60019911B12B89013365 +:101C10002B81FBF729FC01A8002931D1019C05F19A +:101C200018094FF0010A002C37D1FFF7E9FEFBF746 +:101C30002FFC2B68002B7ED05C69241A24EAE47404 +:101C4000FBF712FCD5F83080EFF30583002B75D03D +:101C5000B8F1000F7DD1AB7A002B00F08A80FBF742 +:101C600017FCAB7A002B00F082800023AB7202B02D +:101C7000BDE8F047FBF7F8BB03F108019B68BAE742 +:101C80008C680B4600229A601A46DB68002BFAD15A +:101C9000026001F108002146BEE7236AD4F80880FB +:101CA00013B104F124009847A269002A0BDB636991 +:101CB00013446361FFF7A4FE214602462846FCF761 +:101CC000CFF94446AFE7EB6873B1A3420CD82B6A57 +:101CD000A34209D3A3792A690133DBB213FA02F2D2 +:101CE00014BFA37184F806A0E36913B104F12400C2 +:101CF0009847EB6823B1A34202D82B6AA34201D2D2 +:101D0000A671DEE7FBF7C4FB4846AB6983B11968EF +:101D10002268914208D30BD1E36003689B68A360FB +:101D20000460FBF7A1FBCCE703F108009B68EDE73B +:101D3000E6600368F3E74FF0FF3481E702F080FCD0 +:101D40000246002884D1404601212346BC4600DFDC +:101D500081E798F80030F32B7FF47DAF002C7FF4FF +:101D60007AAF22460121404603F0D6F873E7FBF72D +:101D70007BFBFFF745FE34E7554F010838B50546B4 +:101D8000046854B9FBF762F92C6824B92C1D20466D +:101D9000F9F74EF82C60FBF751F9204638BD0000EA +:101DA0002DE9F0418846002504462349C0E9005545 +:101DB000404608F0C2F98044C4F8008023681A78CD +:101DC0002F2A1CD1013323601C48FFF7D7FFF8F7F7 +:101DD0003BFE1B4B1E68D6B1B768B7B1384607F05B +:101DE00049FB854211D12A464146384608F0A8F8F9 +:101DF00058B91248FFF7C2FFF8F706FE17E0002AAD +:101E0000E2D0013301352360D8E77668E3E7072D98 +:101E1000EFD12A4641460B4808F092F80028E8D155 +:101E20000648FFF7ABFFF8F7EFFD074B1E682046AB +:101E30006660BDE8F08100BFF7A60108D80600245F +:101E4000D4060024FAAD0108D82602242DE9FF4764 +:101E50008A463F49054607F0FBFA044628B9FBF7D6 +:101E6000F5FC204604B0BDE8F0873A49284607F063 +:101E7000EFFA20B901200124FBF7E8FCF1E736492D +:101E8000284607F0E5FA20B902200224FBF7DEFC21 +:101E9000E7E72B78402B02D1D5F80140E1E72F4E40 +:101EA00003242F48B046FFF769FFF8F7CDFD56F839 +:101EB0002490B9F1000F2AD00134402CF7D105F05D +:101EC00063FE182303602648FFF758FFF8F79CFDD0 +:101ED0000AE002A8FBF7AAFF054640B905F054FE48 +:101EE0001323036046F824504FF0FF34B9E703682A +:101EF00001A9029A9D682AF48033A8470546E8B1F3 +:101F00006D4205F041FE056046F82490ECE74FF085 +:101F1000FF37134846F82470FFF730FFF8F774FDD9 +:101F2000294602A8CDF80490FFF73AFF039D002D43 +:101F3000D4D02B7B002BCCD1043D0195019B094AC9 +:101F400048F8243000231355074A135589E700BF8A +:101F50004CB3010853B3010844B301080C0000243A +:101F60008826022408260224482602241D4B70B528 +:101F7000036004461C48FFF701FFF8F765FDA368FE +:101F80002BB11A4962680B68A34224D10A60184B2E +:101F900015481A68A24204BF00221A60FFF7EEFE3D +:101FA000F8F732FD257BA5B91248261FFFF7E6FE9C +:101FB000F8F74AFD104A402352F8041B8E4208BF2E +:101FC00042F8045C013BF7D10A48FFF7D7FEF8F767 +:101FD0001BFD204670BD19465B68A342FBD14A60D9 +:101FE000D5E700BF08AC0108D8060024D4060024B9 +:101FF000D8260224882602240C00002410B50446AA +:10200000FFF7B4FF204606F0D7FB204610BD0000C6 +:1020100008B50348FFF7B2FEBDE80840F8F7F4BC86 +:10202000B026022408B50348FFF7A8FEBDE8084023 +:10203000F8F70ABDB02602242DE9F0479DF820707C +:10204000054689469246022F98469DF8246022D87C +:10205000124BDB5DFBB1B6FBF3F403FB146414F02D +:10206000FF0418D1FFF7DEFF9DF82830284685F8D9 +:10207000609085F865300B9B85F861A085F86280DB +:1020800085F8637085F86460C5F88830FFF7C0FF95 +:102090002046BDE8F0874FF0FF30FAE70DAE0108AB +:1020A000274B10B504460360FFF7BCFF2549626863 +:1020B000136823F0010313600023A36484F8453000 +:1020C000214BD1F88C209A42FBD1204BB4F954001B +:1020D000DA6F42F48042DA67DA6F22F48042DA671C +:1020E0004FF44072CA6040F2C331D3F8D42022F4D6 +:1020F0008042C3F8D420F3F759FCB4F9560040F2FB +:10210000C331F3F753FCB4F9580040F2C331F3F78D +:102110004DFCB4F95A0040F2C331F3F747FCB4F96F +:102120005C0040F2C331F3F741FC40F2C331B4F933 +:102130005E00F3F73BFC2046FFF76AFF204610BD28 +:102140001CB30108006402580003008000440258D8 +:1021500010B50446FFF7A4FF204606F02DFB2046ED +:1021600010BD00002DE9F04F0D46164685B0F0F782 +:102170006FFDAC1900F10060A042C0F01E8109D9CA +:102180002046F0F745FDB4FBF0F303FB10400028B8 +:1021900040F0138190484FF00009DFF858B2FFF784 +:1021A000EDFDF8F751FC002E00F0FE80B9F1000FB4 +:1021B00040F0F88005F17843B5F1016F4FF0100A57 +:1021C0004FEA5343019334BF01230223012B03F051 +:1021D000010803F002070CBF4FF000634FF00163EA +:1021E0000293FBF7A3F9FBF77DF9BBF800304FF63C +:1021F000FD715A1E92B28A4297BF784A4FF002632D +:1022000002EA832303F100639D420ED2B5F1006F11 +:102210000BD3734C734BD4F888209A42FBD1F4F75C +:10222000D9FD60B14FF44073A360FBF749F9FBF7A8 +:102230006BF9BAF1010AD4D14FF0FF396BE0FBF72B +:1022400027F9BBF800204FF6FD71DFF8AC91531E63 +:102250009BB28B4299F8143097BF634C4FF00164E6 +:1022600004EA422404F10064A5422ABF2C1B019C0D +:10227000640C012B00F093800120002389F81400E6 +:10228000C9F81830B8F1000F00F09D80F2F7BAFBE2 +:10229000031E18BF0123002F00F099800220039332 +:1022A000F2F7B0FB039B00283BD001200023C01AAB +:1022B00089F8143018BF0120C0F10009029B03EB1C +:1022C0004444BFF34F8F494B04F50032C3F87042CA +:1022D00020349442FAD1BFF34F8FBFF36F8FBFF317 +:1022E0004F8FBFF36F8F0022C3F85022BFF34F8F81 +:1022F000BFF36F8FFBF7B8F8F4F754FD002894D1C3 +:10230000374B4FF440729A60B9F1000F8DD1FBF753 +:10231000D7F8FBF7F9F82846F0F77AFC361A0544A7 +:1023200041E7002BC1D1B8F1000F0AD0304AD36881 +:1023300023F4E663D360D36843EA042343F0A403A1 +:10234000D36077B12A4AD2F80C3123F4E663C2F89D +:102350000C31D2F80C3143EA042343F0A403C2F851 +:102360000C31B8F1000F2BD00120F2F74BFB204AC3 +:10237000D36823F4E06323F00403D3605FB1022049 +:10238000F2F740FB1A4AD2F80C3123F4E06323F051 +:102390000403C2F80C31002888D1002086E74FF0F2 +:1023A000FF398BE74FF0FF390B48FFF7E7FCF8F7F1 +:1023B0002BFB484605B0BDE8F08F4FF0FF39F8E73A +:1023C000002FEAD0DBE7002FE7D0434666E700287E +:1023D0007FF46BAFAAE700BFA414022400FC3F0007 +:1023E000006402580003008000FE1F0000ED00E0C2 +:1023F0000020005280E8F11F4C0B02242DE9F04F21 +:1024000012F01F0487B082460F461646994640F0E8 +:102410002681002900F02381F0F71AFC09EB06035E +:1024200000F10060834200F21A818E48DFF850B25A +:10243000FFF7A4FCF8F708FBB9F1000F00F00681E4 +:10244000002C40F001813046F0F7E2FBB6FBF0F5DE +:1024500000FB1565451B4D4528BF4D46BB0701D107 +:102460001F2D4BD8202DA8463946DAF8040028BF86 +:102470004FF02008424606F0FBF91F2D07D8DAF886 +:102480000400C8F12002FF21404406F0FFF9DAF809 +:1024900004302025039310230293FBF747F8FBF742 +:1024A00021F8714B19884FF6FD734A1E92B29A4279 +:1024B00097BF6E4B4FF0026303EA812303F1006381 +:1024C0009E4210D2B6F1006F0DD3694C694BD4F81F +:1024D00088209A42FBD1F4F77DFC002800F0AC8004 +:1024E0004FF44073A360FAF7EBFFFBF70DF8029B84 +:1024F000013B0293D1D14FF0FF3487E025F01F0557 +:102500000397A846C7E7012B00F09B8002F17840B3 +:102510000123B0F5801F8BF8143006D3A2F10163BC +:10252000B3F5801F80F0858002230020059204937C +:10253000CBF818001846F2F765FA059A20BB049B01 +:102540004D48012B67D1C16841F00201C160BFF362 +:102550006F8FBFF34F8F002001990958115004303D +:102560002028F9D10592BFF36F8FBFF34F8F184624 +:102570000493F2F747FA049B059A012B3E4B51D185 +:10258000D96821F00201D96000238BF814300028AB +:102590004FD1019B2032203301939BF814307019E6 +:1025A000824203D2002CAED04FF0FF34002D11DD5B +:1025B00006F01F032B44BFF34F8F3048324633449D +:1025C000C0F870222032991A0029F9DCBFF34F8F2E +:1025D000BFF36F8FBFF34F8FBFF36F8F274B002277 +:1025E000C3F85022BFF34F8FBFF36F8FF4F7DAFBBE +:1025F00000287FF478AF1E4B4FF440729A60002C95 +:102600007FF471AFFAF75CFFFAF77EFFA9EB0809D8 +:102610004644474410E7D0F80C1141F00201C0F8DD +:102620000C1194E7D3F80C1121F00201C3F80C113E +:10263000AAE74FF0FF34B0E7039B0446324601930C +:10264000ABE74FF0FF34ABE74FF0FF340548FFF73F +:1026500095FBF8F7D9F9204607B0BDE8F08F4FF0A9 +:10266000FF34F8E7A414022480E8F11F00FC3F00C7 +:1026700000640258000300800020005200ED00E0DA +:102680004C0B022410B504460B48FFF777FBF8F714 +:10269000DBF9FAF74BFFFAF725FFFAF711FFFAF724 +:1026A00033FF606808B106F087F80348FFF766FB60 +:1026B000F8F7AAF9002010BDA414022410B50446AE +:1026C0001248FFF75BFBF8F7BFF9FAF72FFFFAF7AD +:1026D00009FF0F4B0F4AD3F888109142FBD14FF4FA +:1026E0008E010D4A51614FF440729A60FAF7E8FE8C +:1026F000FAF70AFF2020FAF759FE60600348FFF757 +:102700003DFBF8F781F9002010BD00BFA41402249E +:10271000006402580003008000200052014B5869F9 +:10272000704700BF1801002401230A4A90F92010C5 +:1027300043701C32936810B51BB193F920408C4252 +:1027400005DCC0E90232906003B1D86010BD1A46C2 +:102750009B68F1E71801002490F82230826B13F097 +:10276000100F0CBF602020201044704710B5C469C2 +:10277000621CD0E904310CD103B1596142691AB12C +:1027800013610023436101E0074A13630023C3611F +:1027900010BD1BB1DA6959612244DA614269002A2D +:1027A000EED1014AD362F1E718010024C2682AB1D0 +:1027B0008368936003B1DA600023C36070470378D5 +:1027C000F12B00D07047C068F9E783689A6882608F +:1027D00002B1D06000221846DA60704738B51F4C4D +:1027E000237A022B35D1636A002B34D063694A1CEB +:1027F000587016D1226B002172B94FF0FF30C3E937 +:102800000421D86159B10B611548FFF7DEFF02239F +:102810004370A061012038BD11461269ECE72363C3 +:10282000F2E7E26A002012B1D569A9420BD2D96160 +:10283000C3E9042058B10361002AE5D0D06953618F +:10284000411AD161E0E71046491B1269EBE7E362E8 +:10285000F2E70020DFE71846DDE700BF180100249B +:102860003401002491F92020836810B51BB193F93D +:102870002040944205DAC1E90230816003B1D96099 +:1028800010BD18469B68F1E70123014643700148DB +:10289000FFF7E8BF3401002470B5124D04462E7ACC +:1028A000696990B9022E0FD16C6A6CB194F920203D +:1028B00091F920309A4207DD2046FFF777FF08465E +:1028C000FFF732FF6670AC6170BD022E05D190F942 +:1028D000202091F920309A42F1DC2046BDE870407A +:1028E000FFF7D2BF1801002438B504461546FFF79C +:1028F00033FF01602046FFF739FF1DB1BDE83840C6 +:10290000FFF7CABFBDE83840FFF7BEBF10B50446A9 +:10291000806918B100221146FFF7E6FF6378232B88 +:1029200002BFA36800229A6110BD10B5014604469B +:1029300064B12378F12B07D00846FFF737FF204614 +:10294000BDE81040FFF78EBFE468F1E710BD00005E +:1029500038B5254DEC6A002C45D0E369013BE361B5 +:10296000002B40D16378732B06D009D8532B0BD0A2 +:1029700003F0DF03432B29D12046FFF720FF25E09A +:1029800003F0EF03832BF6E72046FFF718FFC37829 +:102990009B071BD5C06890F92120C36AD9788907A5 +:1029A00009D599688C4208BFA16821B191F920101E +:1029B0008A42B8BF0A465B69002BEFD190F92030FC +:1029C000934203D080F82020FFF7AFFF2046FFF7A7 +:1029D000EDFEFFF759FF246924B1E369002BC1D054 +:1029E00000236361EC6238BD1801002410B5034672 +:1029F00053E8000F084203D1BFF32F8F002005E0FA +:102A000020EA010243E8002404B1F1E710BD10B54B +:102A1000034653E8000F00EA01028A4203D0BFF3E5 +:102A20002F8F002005E020EA010243E8002404B1D2 +:102A3000EFE710BD10B543780446332B15D190F85D +:102A40002330416A03F001029B0708D428301AB1F1 +:102A5000FFF7DDFF48B10BE0FFF7C8FFFAE7806A38 +:102A600001EA000312B19942F4D010BD002BFCD052 +:102A7000014600222046BDE81040FFF735BFD0E8F0 +:102A80005F3F13B9BFF32F8F04E05A1EC0E8512FE8 +:102A900001B1F4E798B2704710B5D0E85F3F5A1C17 +:102AA000914200D80022C0E8542F04B1F5E798B253 +:102AB00010BD10B5D0E85F3F994202D8BFF32F8F09 +:102AC00004E05A1CC0E8542F04B1F3E798B210BDDB +:102AD00010B50446B8B10378F62B14D183683BB126 +:102AE000FFF773FE01220021FFF7FEFE002010BD5C +:102AF000C1890C30FFF7DDFFE38983428CBF0020E2 +:102B00006FF00200F3E76FF00300F0E7836810B5A1 +:102B1000044663B10C30FFF7B2FF40B12046FFF727 +:102B200054FE0022BDE810401146FFF7DDBE10BD87 +:102B3000284B5A6970B50446002A41D0002842D07B +:102B40000378F52B3FD1037E002B3FD0C168914223 +:102B50003CD1013BDBB2037613BB43690BB1016986 +:102B600019612169F1B14B6192F92130D56ADDB962 +:102B700082F82030A36883B12046FFF726FE064680 +:102B80002A462946FFF7B0FEF36AC4E9036563618C +:102B900003B11C610123F46223760020FFF77CFE61 +:102BA00000200FE0D362DFE7E978890706D5A9683E +:102BB00021B191F920108B42B8BF0B466D69D6E761 +:102BC0004FF0FF3070BD6FF00300FBE76FF00200C5 +:102BD000F8E700BF18010024224B70B55D69044678 +:102BE0000E46002D35D0002836D00378F52B33D192 +:102BF000037E53B9C0E90353EB6A436103B1186123 +:102C00000123EC620020237670BDC278D10706D57F +:102C1000C168A94203D1FF2B21D00133F2E7F6B1FD +:102C200093070AD5E06895F9203090F920209A4260 +:102C300003DA80F82030FFF778FE31465320FFF7A3 +:102C4000CDFD18B129462046FFF70CFE6FF00100BC +:102C5000DAE74FF0FF30D7E76FF00300D4E76FF00B +:102C60000200D1E7180100242DE9F04104460026B6 +:102C700001270CB9BDE8F081E378D4F814801B0774 +:102C800012D5A36826767BB12046FFF79EFD002271 +:102C900005461146FFF728FEEB6AC4E90356636157 +:102CA00003B11C61EC6227764446E2E7034653E831 +:102CB000000F421C43E8002101B1F8E77047036BA5 +:102CC00030B4BBB1CD780024DA78AA420AD31A46D0 +:102CD000C1E9012462B191607CB16160283030BCEF +:102CE000FFF7E4BF5A681C46002AF1D01346EBE711 +:102CF000C162F1E7C1E90133C1620163EEE730B5BA +:102D0000F0B1C3688B421BD803698B4218D900F11C +:102D100014031A680A60BFF35F8F53E8002F0C6832 +:102D20009442F6D143E8001505B1F2E7043050E8CB +:102D3000003F5A1E40E8002101B1F8E7002030BDF5 +:102D40006FF00300FBE710B590B100F1140353E8F6 +:102D5000004F14B9BFF32F8F04E0226843E800212D +:102D600001B1F4E714B10430FFF7A0FF204610BD15 +:102D70000446FBE730B5C0B189B1C2B1CBB1002484 +:102D80000160C3604361C0E9014202FB01F41D1907 +:102D900005611846013904D1A21A9950012108464B +:102DA00030BD851805602846F4E70146F7E711466F +:102DB000F5E71946F3E730B580B1C9B1A1F10805CF +:102DC00000F108040022A54209D16B6823F0030436 +:102DD00043681B1B43603AB96A60012030BD236819 +:102DE00022463BB11C46EEE751F8083C1360F4E77D +:102DF0000846F3E71846F1E710B5C378044613F028 +:102E0000010322D1038083789A0708D513F0100FAD +:102E1000016B134B0FD0D3F88400FFF770FFA3783A +:102E2000DB071CD50E4B2146D3F8880038B1BDE82E +:102E30001040FFF764BF586FFFF7BDFFEFE7D3F80F +:102E40008000BDE81040FFF7B6BF042343700023A5 +:102E5000C360034B5A6B826002B1D0605C6310BDEB +:102E60001801002410B5044600283AD00378F12B4D +:102E700037D1437803F00F03022B06D0032B27D062 +:102E8000012B22D06FF002001EE0174B1A7A022AA3 +:102E9000F8D15B6A002BF5D0E06AFFF7E5FE20462B +:102EA000FFF734FD6178022917D11048FFF78DFC38 +:102EB0000D4B41709861EFF30982A26300225A61C1 +:102EC0002046FFF799FF002010BDFFF76FFCE3E7F6 +:102ED000FFF76CFCFFF74AFCDEE70020FFF7DCFCA5 +:102EE000EEE76FF00300EFE718010024340100243F +:102EF00070B50F4C267A022E18D1636AB3B165699A +:102F0000E86AFFF7B1FE2846FFF700FD04F11C0058 +:102F1000FFF75BFC4670A061EFF30983AB6300230E +:102F200028466361BDE87040FFF766BF70BD00BF13 +:102F30001801002470B5054638B30378F62B24D168 +:102F4000836863B12846FFF740FC00226FF002015E +:102F5000FFF7CAFCA8680028F4D1FFF79DFCAB7806 +:102F6000002613F001032E7012D00A4B2946D3F825 +:102F7000984024B12046FFF7C2FE304670BDD3F81A +:102F80008000FFF718FF2046F8E76FF00300F5E731 +:102F90001846F3E71801002470B50446002849D00C +:102FA0000378F52B46D1037EBBB16369C0680BB1D2 +:102FB00022691A61226902B3536190F92120C36A20 +:102FC000EBB990F92030934203D080F82020FFF72E +:102FD000ACFCA068F8B9FFF75FFCA078002610F001 +:102FE0000100267008D0154B2146D3F89450DDB16E +:102FF0002846FFF784FE304670BDC362DDE7D9780E +:10300000890706D5996821B191F920108A42B8BF85 +:103010000A465B69D4E72046FFF7D7FB00226FF032 +:103020000201FFF761FCD4E7D3F88000FFF7C3FE8D +:103030002846E1E76FF00300DEE700BF1801002437 +:10304000F0B568B381B10F3100F1080621F0070730 +:10305000334636685C68F11A24F00304091B8F427A +:1030600004D931680029F3D10846F0BD45683A43D8 +:1030700004683D444560204450F8041C08388D42E3 +:1030800088BF4560586818B903F108015A60EBE73A +:1030900020F0030019181E504A6019600831E3E758 +:1030A0000146E1E72DE9F04F85B08146029120B954 +:1030B0000024204605B0BDE8F08F002A00F086808D +:1030C0009468B4B1A007F3D1D368432BF0D99769C2 +:1030D000D2E904658EB17107EAD1002DE8D077B945 +:1030E00018276B07E4D1A5F14801574B99420BD93A +:1030F000DEE7D368002BEAD0DAE7002F64D07B1E2E +:10310000372BD5D8002DECD1D2E900A30193002CA8 +:1031100069D14E4BD3F8880000285DD0FFF713FE2D +:1031200004460028C4D04FF00108A6B9DFF81CB14E +:10313000002D71D1DBF88400002857D0FFF703FE83 +:10314000002870D048F0100806464FF4805548F02B +:103150000208002CACD040F2F113FD226563403D23 +:1031600023807FB2019B35446284E3700023384A98 +:1031700084F80280C4F804A084F8207084F82170D8 +:10318000C4E90E59C4E90233C4E90433C4E906337F +:10319000C4E90933C4E90B363260A26B114602F16F +:1031A000340042F8043B8242FBD12A4B20462A4A93 +:1031B000C1E90D394FF08073CB63029B0B62234B47 +:1031C0001A66FFF769FB74E718279BE792461646D5 +:1031D0001827154601929CE701224421D3F880006C +:1031E000FFF72EFF9CE74FF000089EE72A464FF4BA +:1031F00080554FF48051DBF87400FFF721FFF8B9D8 +:10320000B8F1000F1ED0DBF888207AB121461046B5 +:103210000024FFF774FD9AE732462946DBF8740074 +:10322000FFF70EFFEBE74FF48055E9E72146DBF8A7 +:1032300080000392FFF7BFFD039A1446164686E707 +:10324000064684E7444682E7B7FFFF7F1801002463 +:10325000A52E5AE259460108352A010870B54FF6E5 +:10326000FE731446421E05460E469A4201D90020BE +:1032700070BD8842FBD3CCB1A068226890B110F039 +:103280000303F4D1E1680F29F1D91446F6228370C3 +:1032900000234460027083600D4A0E4B8681C58115 +:1032A0009A66E5E7E368002BE1D11446094BD3F8B1 +:1032B000980028B1FFF747FD0028D8D00123E5E7A3 +:1032C00001221021D3F88000FFF7BAFEF4E700BF17 +:1032D0000D2B01081801002438B5034660B3D0E96E +:1032E00000458068A0B110F0030201D0002038BD75 +:1032F000DB681B2BFAD91346F52283700023C570B7 +:10330000027044600376C0E90233C0E90433EEE79B +:10331000DB68002BEAD10A4BD3F8940030B90122C4 +:103320001C21D3F88000FFF78BFE01E0FFF70BFDB7 +:103330000028DBD00123DFE704460546EBE700BFAA +:103340001801002410B598B140EA010313F00703F7 +:103350000ED117290AD90160083910220C184260D1 +:1033600084600B5081684A60C3600123184610BD19 +:103370000023FBE7014BD868704700BF1801002409 +:1033800038B51C4C257A012D28D07DBB1A4B294617 +:103390002846E3651023A4F8543005232364FFF77F +:1033A000D1FF08B1C4F8805000210846FFF7CAFFDA +:1033B000B0B9D4F88030002163670846FFF7C2FF38 +:1033C00080B9D4F880300021A3670846FFF7BAFF20 +:1033D00050B9D4F88030E36701232372002038BD50 +:1033E0000023E8E70023EEE70023F4E74FF0FF3087 +:1033F000F5E700BF1801002468430224064BDA6A8F +:103400003AB1D0695B6C1BB11B69984228BF184662 +:1034100070474FF0FF30F5E71801002410B504465F +:10342000D0B10268806898B110F0030301D0002089 +:1034300010BDE1680F29FAD91446F32283700023E6 +:10344000446002700D4AC0E902330D4B5A66EFE743 +:10345000E368002BEBD11446094BD3F8900028B158 +:10346000FFF771FC0028E2D00123E6E701221021DA +:10347000D3F88000FFF7E4FDF4E700BF0F50010828 +:1034800018010024014608B538B11320FFF7A6F94A +:1034900080F00100C0B2404208BD6FF00300FBE7BE +:1034A00000F07B43B3F1005F0ED000F07743B3F13F +:1034B000405F09D000F07F40B0F1805F14BF4FF053 +:1034C000FF304FF00160704700487047000004086B +:1034D000BFF34F8F0549064BCA6802F4E0621343FD +:1034E000CB60BFF34F8F00BFFDE700BF00ED00E0F2 +:1034F0000400FA0503681847094B30B51A46094C11 +:10350000D3F89450A542FBD1036829B181680B60C0 +:103510004FF44073536130BDC1681B04F7E700BF2F +:1035200000640258000300800B4808B543681A681D +:1035300003681A420CBF01210021FFF7DDFF074895 +:1035400043681A6803681A42BDE808400CBF0121AD +:103550000021FFF7D1BF00BF04070024740B022431 +:1035600000487047FCB30108D0E904017047D0E976 +:103570000A017047D0E90A017047D0E90801704795 +:10358000D0E90601704730B503995418049A43EB0B +:103590000205D0E90423AB4208BFA2422CBF0120A0 +:1035A000002030BD00207047704700207047D0E9F0 +:1035B00000301847D0E90132016810B401EB620015 +:1035C0005410D20748BF0A595DF8044B48BFD3587E +:1035D00018477047002050709070D07070470000FE +:1035E000B0F1204F73B504460D460DD3114B18684A +:1035F00038B106680023CDE9002304F1C0427669A2 +:10360000B047284602B070BDB0F1104F08D24B1E33 +:1036100002449442F5D014F8011B03F8011FF8E7A7 +:10362000054B186800230668CDE9002304F1E04249 +:103630007669E5E7E80A0224700B022430B5A1F1AF +:103640001004002500F00F02CD7302390009D3B237 +:10365000092ACCBF373330330B748C42F2D130BDE2 +:10366000322310B50A4C0B800A4BA11C1868FFF7D7 +:10367000E5FF094B04F112011868FFF7DFFF074B64 +:1036800004F122011868FFF7D9FF204610BD00BFE2 +:103690008402002400E8F11F04E8F11F08E8F11F8C +:1036A000042301480B807047800200241223014844 +:1036B0000B8070476C02002430B5013800252B4682 +:1036C0000135445D002CFAD1DBB201335B0013807D +:1036D0000B7003234B70022310F8015F05B930BD56 +:1036E0005A1CCD540233D2B2DBB28C54F4E7000042 +:1036F0000A460349034808B5FFF7DEFF084608BD40 +:10370000AC2A022403B401080A460349034808B559 +:10371000FFF7D2FF084608BDAC2A022411B4010805 +:103720000A460349034808B5FFF7C6FF084608BD27 +:10373000AC2A02241CB401080A460349034808B510 +:10374000FFF7BAFF084608BDAC2A022427B40108D7 +:1037500008B5D0F8B4325B689847002008BD08B5BA +:10376000D0F8B4320BB9022008BD1B689847002876 +:10377000FAD0F8E7D0E9003018470000092908B569 +:103780000AD8D0F8BC32063953F8210010B10349E9 +:10379000FFF792FF014800E0002008BDB82B02248B +:1037A0000A2303800048704730030024002070473C +:1037B00000207047002070470020704700207047AD +:1037C000002070477823038000487047B802002427 +:1037D00038B51E4C0546237A042B35D1FFF70EFE73 +:1037E000E26AA842034694BF00F1FF332B4612B1B0 +:1037F000D069C01AD061626C12B11069C01A106130 +:10380000E06803440544E360E368AB4213D102235C +:1038100000202372FFF740F800236372BFF34F8F3D +:10382000A27A22B1A3724FF08052094B5A60BDE8D0 +:103830003840FEF7CDB80133E360FFF789F8236D18 +:10384000002BE1D09847DFE738BD00BF1801002406 +:1038500000ED00E038B50F4C0546B4F8541004F103 +:103860005600FFF726F9814203D802210A48EFF7F4 +:10387000D3F804F15800FFF70FF9E36D43F8205037 +:10388000637A23B9054B4FF080525A6038BD01234B +:10389000A372FBE7180100242601028000ED00E07E +:1038A000F8B59C460D4617460446002872D00278AB +:1038B000FA2A6FD100296DD000F1280252E8001FCA +:1038C00011B9BFF32F8F04E0481E42E8000606B18D +:1038D000F4E711B1E66A01229EB9BCF1000F5CD099 +:1038E00061468320FEF77AFF40B1304B204659698C +:1038F000FEF7B8FFEFF30983C3E902576FF0010049 +:1039000023E0B11CD1E84F0FC1E8432F03B1F9E721 +:1039100010F0FF0F44D0B668DEE79A60B268AAB133 +:103920005360626A06F10C01284604F0A1FF0FB152 +:10393000F3783B70002504F10C07314638463570AA +:10394000FFF7DDF9A3681BB90020F8BD2363E8E7A2 +:103950003846FFF7F8F906460028F5D02046FEF76E +:1039600034FF074629460122FEF7BEFF3846FEF720 +:10397000F3FE626A0746816806F10C0004F078FFE6 +:10398000F923B570314633702046FB68F370FFF7BA +:1039900096F9D9E76FF00300D7E76FF00200D4E79C +:1039A000D6E90132002BB8D1E262B7E71801002452 +:1039B000F8B5817804468568002938D04368C66820 +:1039C0008BB39D60A26882B35360002706F10C059B +:1039D000214628462770FFF792F9B368002B4CD098 +:1039E0002846FFF7B0F90446002846D03046FEF7D7 +:1039F000ECFE05463A463946FEF776FF2846FEF7C6 +:103A0000ABFE726A8168054604F10C0004F030FFD9 +:103A1000F923A770214623703046EB68E370BDE8B8 +:103A2000F840FFF74CB9F562CCE73363CDE7AB68FC +:103A300003B35B78832B1DD12846FEF7C6FE0646EE +:103A40000A46FEF751FF3046FEF786FE06466A6AD2 +:103A500004F10C01806804F00BFFF3680BB1E2780D +:103A60001A700023214605F10C002370BDE8F840D0 +:103A7000FFF745B921462846D1E7F8BD2DE9F041C9 +:103A80000C46174698460546002848D00378FA2B7E +:103A900045D1002943D08368C3B15B78832B15D10E +:103AA000FEF793FE064601220021FEF71DFF304679 +:103AB000FEF752FE06466A6A2146806804F0D8FE88 +:103AC000F06808B107700020BDE8F08105F10C0036 +:103AD000FFF739F9064670B121466A6A0C300024B6 +:103AE00004F0C6FEF923314628463370B470F770EF +:103AF000FFF7E5F8E7E7B8F1000F13D04146932050 +:103B0000FEF76CFE40B1094B28465969FEF7AAFE44 +:103B1000EFF30983C3E902476FF00100D4E76FF0C8 +:103B20000300D1E76FF00200CEE700BF18010024C8 +:103B300038B5274C237A012B03D04FF0FF352846A8 +:103B400038BD244A00212448FFF7ACFAA06200F0F7 +:103B50004FF805460028F0D1204AE16C2048FFF7D5 +:103B6000A1FAA0640028E8D01E4AFF2382F8223080 +:103B700092F82230D26863F0FF03C2F30222DB43E3 +:103B800014BFB3FA83F32023C3F12003934298BFF9 +:103B9000531CFE2202FA03F3124ADBB2D377F0235E +:103BA00082F823309368104ADA63BFF34F8F4FF0E7 +:103BB000FF332361FDF70CFF0C48FEF706FE0223DE +:103BC0004370A06183F31488BFF36F8F2372B6E74D +:103BD00018010024B0BE0108DDCF0008ECBE0108CA +:103BE0009546010800ED00E05F060008340100245E +:103BF00038B50D4CFA230025142223700823042124 +:103C000004F10C00A570C4E90935084BC4E901555D +:103C1000C4E90B55FFF7AEF8054B064A2846DC64AD +:103C20001A67054A1A6538BDA8430224DC430224FA +:103C300018010024B1390108C946010838B5114CF2 +:103C4000237A022B1CD1104B1D682846FAF74FFA35 +:103C500000234FF0007285F83F300C4B5A60012270 +:103C60006272BFF34F8F5968C90003D54FF00061EE +:103C70005960A27204232372BDE83840FFF7BEBB2F +:103C8000002038BD180100242827022400ED00E0A0 +:103C900008B5094B1B6833B1084B1B68503343F818 +:103CA0002010002008BD064B1B7813B1054806F014 +:103CB0000BFA4FF0FF30F5E7F8680224C42702241E +:103CC000E40A02242CB4010808B5094B1B682BB187 +:103CD000084B1B68503353F8200008BD064B1B7877 +:103CE00013B1064806F0F0F94FF0FF30F5E700BFDA +:103CF000F8680224C4270224E40A022440B401081C +:103D000038B5044641F21C0004F04EFDC4F8B80278 +:103D1000E0B1022241F2180300F580510C4DC2526D +:103D200000230B6041F20401435041F20801455069 +:103D300041F20C01435041F21001435041F214038F +:103D4000C252D4F8BC321B69984700B1022038BD7A +:103D5000000004082DE9F0410546406888461146F8 +:103D6000DDE9066738B9104806F0AEF96FF47A64F9 +:103D70002046BDE8F081002204F00AFA044608B1AA +:103D80000A48F1E76B6832460121404604F0F0F939 +:103D900000230246BB4208BFB042E9D0696804482C +:103DA000F7F76CF8E2E700BF54B401086AB4010801 +:103DB00077B40108B0F1204F7FB5044614D3154BFA +:103DC0001D681DB32B6800F1C042DE69196B2846DF +:103DD000002303928847039A0023CDE90001284677 +:103DE000B04780B204B070BDB0F1104F06D30A4B9B +:103DF00000F1E0421D682B68DE69E7E7EEF708FF97 +:103E0000214602460548FEF7ADF9EAE74FF6FF7096 +:103E1000E8E700BFE80A0224700B0224283F0224CE +:103E200010B50224C0E90722C0F89442D0F8C002BD +:103E3000EEF759FE002010BD08B5002204231146FC +:103E4000C0F89432D0F8C002EEF74DFE002008BD55 +:103E5000F0B541F21802D0F8B84289B00746A35C29 +:103E6000042B65D104F5805641F204033168002922 +:103E70004FD12278AAB9E358012B41D1002541F254 +:103E8000040341F21802E55003233560A35441F2C4 +:103E90001102A55441F21202A55241F21402A35498 +:103EA0002BE0212A10D1E358052B29D1E378A27801 +:103EB0001B0403EB022362781344227903EB0263B1 +:103EC00041F20802A350D9E7412A19D1E358052B42 +:103ED00016D1E378A0781B0403EB00236078034439 +:103EE000207903EB006041F20803E050D7F8BC32C0 +:103EF0009B6998470028C1D00225284609B0F0BD2B +:103F0000002341F204023846A3503360EEF7E0FD8F +:103F1000B4E70129B2D941F208020239A058D7F812 +:103F2000BC2200EB01312046D569E258A847E1E701 +:103F3000072B4FF0000313D141F2190163541849C4 +:103F400091F82F5041F2110115F004050AD0062016 +:103F5000A05441F212026354A35241F21402A0543D +:103F60001D46CAE70823A35441F212026554A55224 +:103F700041F21402A354D0F8BC325B699847094B54 +:103F8000094A00210948079206950092CDE90437B5 +:103F900004ABCDE9020106480ECBFAF7EFF8ACE727 +:103FA000B80200241D40010875370108400D0300C8 +:103FB0002006002438B5D0F8B432044601795B6895 +:103FC0009847D4F8C04294F8BC33012B21D025681F +:103FD000012384F8BC332846AB6823F00103AB60AF +:103FE000F1F7ACFE4FF48463226813610A4B013B86 +:103FF00002D011698906FAD4A36A012B06D1A369FC +:10400000012B03D0AB6B23F48033AB63002384F824 +:10401000BC33002038BD00BF410D030008B5FFF7D9 +:10402000C9FFFFF755FA00002DE9F7430D7800238B +:104030000646D0F8B84215F06005ADF8063000F03D +:104040007C81202D40F08F8191F80180B8F1060F1E +:1040500000F28981DFE818F0440107004300B40052 +:104060000B012201270141F21803CA88E05C02B368 +:10407000022801D0052818D1498804F58053196019 +:1040800041F2040341F21801E2500323635441F268 +:10409000140163542146D6F8C002C6F89432C6E92A +:1040A0005722EEF735FD002515E03046EEF710FDFE +:1040B000F9E7052801D00228F7D14FF483720025D3 +:1040C000E25241F211030622E55441F21203E55295 +:1040D00041F21403E254284603B0BDE8F083CA88D5 +:1040E00041F21800002A5FD0205C04F580530228BA +:1040F00001D0092852D14F8841F204091F6041F2D2 +:10410000180344F80920DFB9032A21464FF00302BF +:1041100098BF4FF0090804F8038041F21103E754F7 +:1041200041F21203E75241F2140304F803804FF402 +:10413000045323804123A3703046FFF771FEB2E79A +:10414000012F41F211011BD009200025023FE0544C +:1041500041F2120365542146E55241F21403E05442 +:1041600041F20803E058D6F8BC3200EB07301B6A76 +:10417000984734F8092001463046FFF751FEAAE778 +:104180000F220025E25441F212036554E55241F238 +:104190001403E2543046EEF79BFC9CE7002541F205 +:1041A0000402A5501D60F5E7022341F211012354DA +:1041B000625441F21201625241F21401635472E7F7 +:1041C00041F2180204F58055A35C1035032B04D08E +:1041D000062B2DD006222946AEE741F2040341F218 +:1041E0001100E358EBB1042341F21201A354002261 +:1041F0002254625241F21402A35441F20803E058DF +:1042000004F580531968D6F8BC3231B92278412AB6 +:1042100003D15B6A2A469847DCE75B6A2A4601219C +:10422000F9E70521A154235441F21202A3520DE0F3 +:1042300041F21903E35C012B0CD10721A15441F297 +:104240001102A35441F212030022E25241F214037C +:10425000E154BFE7002BBDD1564991F82F10490713 +:10426000B8D50221A15441F21102A354DCE741F276 +:10427000180341F21001E25C0A2A07D1022200254C +:10428000E25441F214036550E25224E70A22E25458 +:104290000E23635041F21403E25204E704F5805107 +:1042A0000122183148E741F21802A35C092B3FF6BE +:1042B000FAAE4FF41B75DD40ED4315F001057FF4B8 +:1042C000F2AE0223A35441F21002A55041F21402AF +:1042D000A35204F580531D6041F20403E550FAE651 +:1042E00041F21800225C092A14D84FF41B73D34002 +:1042F000DB4313F001030DD10222225441F21000DE +:10430000235041F21400225204F58052136041F20E +:104310000402A350274B93F8305015F0100508D035 +:1043200030464546FFF746FED6F8C002F2F710FDCC +:10433000D1E64888F2F774FDCDE64F780B2F12D8FE +:10434000DFE807F006111111111116111111232CBC +:1043500090F89C32032B06D102220DF106013D4656 +:10436000FFF75EFDB7E630460225EEF7B1FBB2E699 +:104370004B881B12212B05D1CA880F49092A28BF57 +:104380000922F9E600221146F6E690F89C32032B4A +:10439000E9D104F5805101220C31EDE68B78032B35 +:1043A000E1D890F89C22032ADDD141F20C02A350FF +:1043B00091E600BFB8020024E502002410B50C4CC1 +:1043C000F9F766F82046F9F792FE00236363F9F7E0 +:1043D0004BF801210748FFF78FF801210648FFF746 +:1043E0008BF801210548BDE81040FFF785B800BFF4 +:1043F000B00B0224740B0224280B022404070024AF +:1044000043682DE9F347DDE90A45804691461BB92B +:104410001B4805F059FE23E0002600274FF0FF0A55 +:10442000AF42D8F8040008BFA64222D0002209EB10 +:10443000060103F0ADFE08B11248EAE70122D8F800 +:1044400004300DF107008DF807A0114605F06AFD54 +:104450000128024609D0D8F804100B48F6F70EFDE3 +:104460006FF47A6002B0BDE8F087013647F10007CB +:10447000D6E703F0C5FC0028F4D00448C9E700BF24 +:1044800095B40108ACB40108BAB40108D9B4010864 +:1044900070B5044640680D46049E114618B9104890 +:1044A00005F012FE12E0002203F072FE08B10D4882 +:1044B000F6E7012263683146284605F033FD0128FE +:1044C000024606D061680848F6F7D8FC6FF47A60B7 +:1044D00070BD606803F094FC0028F9D00348DFE762 +:1044E000E7B4010800B5010810B5010831B50108AD +:1044F00008B5406803F0BAFB002008BDF7B50446D4 +:10450000D0E9020103F0B8FD606048B9D4E90212B5 +:104510001348F6F7B3FC6FF47A65284603B0F0BD94 +:104520000222002103F034FE054618B10D4805F0C3 +:10453000CBFDF0E76068002703F0E8FED4E9042330 +:104540009F4208BF904206D0A168CDE900230246F1 +:104550000548F6F793FC012384F83030DDE700BF0F +:1045600041B5010868B5010875B5010810B50446E4 +:1045700004F022F9204610BD10B504460168D0E9C8 +:1045800001230548FDF73AFF206804F015F920469D +:10459000BDE8104004F010B9283F022438B5D0F827 +:1045A000B832002541F21801044603F58052156027 +:1045B00041F204029D5002225A5441F210015D540E +:1045C00041F214015A54D0F8B80218B104F0F4F8CA +:1045D000C4F8B852002038BD1FB51648FEF752F88F +:1045E000154B1868F0B10368DB68984701A90120F2 +:1045F000EFF76EFCB0B902A90198EFF795FE0146FE +:1046000068B99DF808300198022B0FD0032B06D112 +:10461000EFF768FE18B902210198EEF787FD0198BF +:10462000EFF742FC002005B05DF804FB8268EEF76E +:1046300097FDF4E7283F0224E80A022401F0FCBFBA +:10464000EFF310832BB9EFF31180003818BF01206E +:10465000704701207047000008B5EFF305834BB1A8 +:10466000084B5869084B1B6803B19847DFF81CC01A +:1046700000DFFEE7FFF7E4FF0028F1D1DFF810C00C +:1046800000DFEFE718010024F4AD0108F12E010866 +:104690001D27010804460B4D07B5EFF30583002BDA +:1046A000FBD1FFF7CDFF02460028F6D12046694630 +:1046B0004FF0FF33AC4600DF0028EED1DDE90030DB +:1046C0009847EAE7A13801082DE9F74F394D6C6C9E +:1046D000002C63D023694FF00008DFF8E0904FF022 +:1046E000F90A013B6F6923612369002B55D1E36807 +:1046F0000BB1A2689A60D5F84CB004F118016B6454 +:10470000EFF3058343B1BBF1000F13D1AB69032174 +:1047100029486B61EEF780F90191FFF791FF01994C +:1047200002460028EFD158461346CC4600DF002849 +:10473000ECD11BE09BF800300191FA2BE6D10BF194 +:104740000C00FEF700FB06460028DFD001990C3074 +:10475000DBF8242004F08CF80199304686F800A09C +:10476000A6F80280C6E9011BFFF774F8E378012B75 +:104770001DD16B6C0021626913B11869824210D29D +:104780002261C4E902131BB118699C60821A1A6184 +:1047900059B1CC606C6C002CA6D16F6103B0BDE840 +:1047A000F08F1946121ADB68E6E76C64F2E7012322 +:1047B0006370EFE718010024270102807D3A0108A9 +:1047C00007B5BFF35F8F7E4B0022196810465A6011 +:1047D000C1F30721914240F0A5801022DA60794AA6 +:1047E0001A611322DA60784A1A611122DA60774A74 +:1047F0001A61774ADA60774A1A6107225A60BFF372 +:104800004F8FBFF36F8F744B744998684FF000530C +:104810001A1802F16042126843F8042B8B42F7D158 +:104820006D4B4FF000529A605A69920315D45A6941 +:1048300012F4003211D1BFF34F8FBFF36F8FC3F863 +:104840005022BFF34F8FBFF36F8F5A6942F400328B +:104850005A61BFF34F8FBFF36F8F5F4B5A69D60317 +:1048600027D45A6912F4803223D1C3F88420BFF3CD +:104870004F8FD3F8802043F6E074C2F3C900C2F32F +:104880004E32520102EA0406014646EA81750139B8 +:10489000C3F86052F9D2203A12F1200FF2D1BFF3DF +:1048A0004F8F5A6942F480325A61BFF34F8FBFF382 +:1048B0006F8F4B4CD4F8E03043F00073C4F8E03015 +:1048C000D4F8E03003F000730193019BF1F760F935 +:1048D0004149444BCA6822F4E0621204120C1343AB +:1048E000CB60F1F74DFCA369A369F2F777F8236F6A +:1048F0009D070AD43C4A136843F4807313603B4B12 +:104900001B68236F23F018032367374CE36803F019 +:104910000703062BE36809D0F2F7FEF8C0B9344864 +:10492000F8F77EFF9A600132186153E723F03F03E6 +:1049300043F00203E360F0F733F805466368980438 +:10494000EAD4F0F72DF8401BB0F57A7FF6D9E3E70B +:10495000F1F71EF9EBF776FFEFF305832BB9FFF7BD +:104960006FFE10B9DFF8A4C000DF224A224B1361AA +:104970004FF4805353614423D360204B936018233A +:1049800093611F4B1360EFF305831BB119491D4859 +:10499000EEF742F8FFF754FE01460028F6D11A4818 +:1049A000DFF86CC000DF0028F0D0EFF305832BB9EF +:1049B000FFF746FE10B9DFF85CC000DF0021E6E734 +:1049C00090ED00E039F00206390702133FF50B13B2 +:1049D000120000803900021300ED00E09802002070 +:1049E000004402580003FA05004802580010005C19 +:1049F000C3B50108D03E0224D02E02242C44022448 +:104A0000D7B501081D010180B17401088133010887 +:104A1000A5300108313B0108B1F1204F2DE9F043E9 +:104A200006468BB00D4614461CD3794F38680028D3 +:104A300000F0EA8003684FF0000990460022196BED +:104A400000238847894505F1C04508BF84423DD30E +:104A500038682A460368CDE900899C6900233146FD +:104A6000A04761E0B1F1104F62D2104603F09CFE06 +:104A700022463146074603F0FBFE0C2003F094FE6D +:104A8000644B00228460059306AE634B0492CDE92B +:104A9000023002ABC0E900750FCB604D86E80F0015 +:104AA000F8F7F6FC2B4653F8184F002C5DD1EB6954 +:104AB000332B40F29F802C6A343B04F13402EB61CB +:104AC00034232A6223600123A37157E0386800224F +:104AD0000368196B0023884703F066FE22463146BF +:104AE000804603F0C5FE386808EB040903685B6B79 +:104AF00098470646386800220368196B00238847E8 +:104B00003146021B484603F0C1FE3C680022236880 +:104B100020469E69196B002388472A460023CDE969 +:104B2000000141462046B04780B20BB0BDE8F0839B +:104B30003B4F01F1E045002238680368196B002300 +:104B4000884700238B4208BF844206D2386800227F +:104B50000368196B002388470446386800230268FD +:104B6000CDE9004394692A4679E72268332A3DD982 +:104B7000E268002A37D01A60A3689360F8F774FCE3 +:104B800000224FF0FF3304F12407C4E9052396E81F +:104B90000F0087E80F00234BE361FCF731FF224B46 +:104BA000024621462362636903441C486361F9F7A6 +:104BB00057FA2A6BEFF3058313B9FFF741FDE8B10C +:104BC000D2B11378F32B17D102F10C03012153E872 +:104BD000004F44EA010043E8000505B1F7E710463D +:104BE000FEF738FE08E0A2681A60C7E704F1080380 +:104BF000A4685AE7F8F738FC002096E71046012130 +:104C0000DFF828C000DFF7E74FF6FF708DE700BF41 +:104C1000E80A0224AF35010879450108241302246B +:104C2000700B0224D33501083F500108A54F01083D +:104C300073B51F4C04F1560504F15A06B4F854102C +:104C400028460191FDF71BFF58B301993046FDF747 +:104C500023FFE36D53F8200018B30378F13B082BD2 +:104C6000ECD801A252F823F08D4C01083D4C01080C +:104C7000934C01083D4C01083D4C0108974C01083C +:104C80009B4C01083D4C01089F4C0108236E98473E +:104C9000D4E7636EFBE7A36EF9E7E36EF7E7236FF4 +:104CA000F5E7002002B0BDE87040FDF7F5BD00BF9C +:104CB000180100241F4B186870B53830EEF728F83B +:104CC00018B11D4B4FF080625A601C4CE3680133F1 +:104CD000E360FDF73DFE0020FDF7DEFD236D03B12F +:104CE0009847226C2AB3A369E16B994203D0D96932 +:104CF000E36301B9DA61DA69BAB9267A022E18D10A +:104D0000656AB5B1E36B95F9202093F920309A429A +:104D10000FD12846FDF74AFDE06BFDF7B5FD6E703B +:104D2000236CE563A561EB6103E0013ADA61002AD7 +:104D3000E3D070BD2827022400ED00E01801002414 +:104D400010B50446EFF305831BB15CB96FF00300A7 +:104D500017E0FFF775FC0028F7D12046DFF82CC0DC +:104D600000DF0EE02378F62BF0D1E18904F10C008E +:104D7000FDF79FFEE389834204D92046FEF76AFDD2 +:104D8000002010BD6FF00200FBE700BFD12A010830 +:104D900010B52C4C2C48F5F757FE636913B994F8FD +:104DA0003D3023B12848F5F72FFE002010BDA36A3F +:104DB00053B1A26A00232549E06AB3EB900F11D2E8 +:104DC00042F823100133F7E7E06A214B984294BF81 +:104DD00020F003004FF0FF3003F0E6FCA062002853 +:104DE000E7D1DFE744231B4A63621B4B2262636007 +:104DF0001A4BA3600023E360194B2361EFF3058393 +:104E00008BB10023636194F83C302BB1A06A08B1E8 +:104E100003F0D2FC0023A3620B48F5F7F5FD206CEC +:104E2000FFF78EFFC1E7FFF70BFC0028E9D1A2F1E5 +:104E300078010C48603ADFF830C000DF606100287C +:104E4000B0D1E0E780130224D4130224A52E5AE245 +:104E5000FBFFFF7FF813022424130224D11B010857 +:104E6000B535010809AE0008A5300108024608B5AD +:104E7000EFF3058313B16FF0050008BDFFF7E0FB0A +:104E80000028F8D11046DFF808C000DFF5E700BFC2 +:104E9000992F0108074B10B504460360F6F704FE8E +:104EA000D4F8BC00FFF7E2FF201DFDF7F9F820461B +:104EB00010BD00BF30BD010810B50446FFF7EAFF82 +:104EC000204603F079FC204610BD0000024608B5DC +:104ED000EFF3058313B16FF0050008BDFFF7B0FBDA +:104EE0000028F8D11046DFF808C000DFF5E700BF62 +:104EF000312B0108024608B5EFF305830BB1002002 +:104F000008BDFFF79DFB0028F9D11046DFF804C06B +:104F100000DFF5E7D932010810B402F0010492076E +:104F200009D40C301CB15DF8044BFDF770BD5DF881 +:104F3000044BFDF75BBDC06801EA00022CB1914251 +:104F400018BF00205DF8044B7047002A08BF0020FE +:104F5000F8E70000F8B50D4617461E460446C0B1F6 +:104F60000378F32B15D1002913DBFFF7D5FF90B998 +:104F700096B131464320FDF731FC38B1084B20464D +:104F80005969FDF76FFC4D6281F823706FF00100E5 +:104F900001E06FF00300F8BD6FF00200FBE700BF17 +:104FA00018010024F8B5064670B30378F32B2BD113 +:104FB000002929DB00F10C0353E8002F42EA010429 +:104FC00043E8004000B1F7E7B56825B92846FDF78A +:104FD00063FC2046F8BD696A304695F82320AF6827 +:104FE000FFF79AFF014668B195F823309B0756BF3B +:104FF0006C6A044620EA04042846FDF7D7FB002229 +:10500000FDF772FC3D46E0E76FF00304E1E770B5A1 +:105010000546846804B970BD616A284694F8232067 +:10502000A668FFF779FF014628B12046FDF7BEFBD1 +:105030000022FDF759FC3446ECE7C3681847FFF738 +:10504000FCBF38B5D0F8C04201F00F0563689D423F +:1050500037D811F0800F4FF01C0234D002FB05430B +:1050600002FB054101223C3381F83D2001221D70E5 +:105070009A7094F8BC13914223D084F8BC231A7818 +:105080005B782068012B4FF020030CBF00F5106106 +:1050900000F5306113FB02131968002904DB1AB113 +:1050A0001A6822F080421A601A6842F400121A60EC +:1050B00025B904F57172217CF0F71AFE002384F8FB +:1050C000BC33002038BD02FB014302FB014100223A +:1050D00003F5FE7381F8FD21C8E770B50446164656 +:1050E0000D4651BBD0F89432032B1FD1D0E9581292 +:1050F00091420ED9891A8A42C0F86011D0F8C002D4 +:1051000088BF8AB2314698BF92B2EDF701FD2846BA +:1051100070BDD0F8B4321B6923B190F89C22032AE9 +:1051200000D198472046FEF787FEF0E7052BEED129 +:10513000C4F89412FFF785FFE9E7D0F8B4329B6911 +:1051400033B190F89C22032A02D100259847DEE76C +:105150000225DCE700212DE980480846BDB0FEF7B6 +:1051600097FDF1F7D9FCF0F713FDFFF727F9AE48EB +:10517000FDF7A4FAAD4B186803689B689847AC4BE1 +:105180001868002800F06E8303689B68984719230D +:10519000A84A3021A848F5F761FEA84ED6F8B432E7 +:1051A00013B10023C6F8B432A54B0622A54CDFF894 +:1051B000A8C2C6F8B0320123C4F8046486F89C3251 +:1051C0000023C6F8C042337023632362E362636244 +:1051D000C4E900C20222C4E9062394F8BD33E260A8 +:1051E00003F0FF07002B48D1974D032084F8BC73D0 +:1051F00007A9D5F8E03043F00103C5F8E030D5F851 +:10520000E030099703F001030693069B4FF4C05367 +:10521000CDE907320A23CDE90A038C48EDF7B2FC49 +:10522000BC2239460DA803F031FB4FF480230CA8B3 +:105230000C934FF440132E93F0F7E8FDE8B9844A3D +:1052400005216520D36843F08073D360D5F8D8304A +:1052500043F00063C5F8D830D5F8D83003F00063C8 +:105260000593059BD5F8003123F00063C5F80031A4 +:10527000EDF766FC774B2022DA600323276884F879 +:10528000BD33754BDB6B13F4807308BF2361BB68C0 +:10529000D4F8108023F00103BB60A369012B40F018 +:1052A000EC82BB6B626B23F48033012ABB63FB6827 +:1052B00023F4840323F04003FB60FB6823F44013D2 +:1052C000FB6003D1FB6843F48013FB603846F0F7C2 +:1052D000F7FC0546B8F1010F10D1FB6D9BB2FB65E1 +:1052E000FB6D43F07B7343F40033FB65BB6843F015 +:1052F0000603BB60BB6843F02003BB60002D00F0D9 +:10530000D182022384F8BD332368A022D6F8C002DC +:105310005A625A6A42F420029A62504BC6F8B4327A +:105320004F4BC6F8BC32F1F713FD4A4B4FF4005215 +:10533000C3F88820BFF34F8FBFF36F8F2022C3F8CD +:105340008C20BFF34F8FBFF36F8F434B5A699B691C +:105350001A4200F01B823B4F3C68B946636913F068 +:105360000103039340F012826269A3691A4200F0BC +:105370000D826369A26913409B0703D5636903F03B +:10538000020363616369A2691340DE0629D5A3693C +:1053900023F01003A361266AC6F3434306F00F050A +:1053A000022B40F09E8347F6F0731E4214D01C235C +:1053B000C6F30A18204603FB05954246D5F80812A5 +:1053C000F0F7CAFCD5F808324344C5F80832D5F8DE +:1053D00014324344C5F814323A68936943F0100319 +:1053E00093613B685A6999690A40150300F19E83ED +:1053F000144E3368B1465A6999690A4012F4802FF5 +:1054000030D0D3F8182803F50063374604F5106B45 +:10541000DB6913409BB2029300230193029B002B94 +:1054200040F0C2861EE000BF283F0224700B022419 +:10543000E80A0224DCB5010894270224E8270224A4 +:10544000BC010024343F02240044025800000258EA +:105450000048025800E100E0000008400802002473 +:10546000440200243068426983691A4210D5D4F896 +:10547000043823F00103C4F8043896F8F433012B00 +:1054800004BF002386F8F433436903F0004343610B +:105490004369826913401A0510D5D4F80838DB0730 +:1054A00008D5D6F8043493F89C2283F89D22042270 +:1054B00083F89C22436903F4006343614369826972 +:1054C00013401F0111D5436903F000634361BA4BD8 +:1054D00093F8F423002A40F08287012283F8F42312 +:1054E000426DC2F38302C3F8F82343698269134013 +:1054F000DD043ED5D4F8043804F5006223F001033E +:1055000053604FF484630361AC4B013B02D00169EB +:105510008906FAD404F51063DFF89CC24FF67F3792 +:10552000DCF804100D460399A942C0F06387D369E3 +:1055300043F00113D361DCF83030002B00F07B879F +:10554000D2F8843043F00B03C2F88430536C43F03C +:105550000B035364D4F80038994A23F4FE63317C7A +:10556000C4F80038F0F7C4FB3268536903F4805381 +:10557000536134686369A26913409F0440F1BE809F +:10558000D4F8003923F4FF6323F00703C4F800398B +:10559000D4F8042842F48072C4F80428D4F8082807 +:1055A00012F0060304D012F0020F14BF02230F23DF +:1055B000F360F0F785FEF768FBB2022B40F05987E5 +:1055C000804B814A0344934240F241877F4B804A9B +:1055D0000344934240F23E87A0F574037D4AA3F54D +:1055E0001053934240F23987A0F183737A4AA3F5AE +:1055F000E7439342C0F03487784B794A034493429F +:1056000040F23187774B784A03449342C0F02E87AB +:10561000764B774A03449342C0F02B87A0F1B773CF +:10562000744AA3F558539342C0F02687724B734ACD +:105630000344934234BF07230623E268003F4FF040 +:10564000000822F4705218BF0127E260E26842EAC3 +:105650008323E3604023D6F80444D4F8C052C5F84D +:10566000043205F5FE7195F8BC33A5F8FC81012BD9 +:1056700085F8FF8107D00123286885F8BC33F0F74F +:105680008EFB85F8BC83D4F8C052402201234FF032 +:105690000008C4F864214FF48070C4F8583105F153 +:1056A0003C016A6495F8BC23A8879A4285F83F803C +:1056B000A5F8428006D0286885F8BC33F0F76FFB68 +:1056C00085F8BC83012300214022A36184F89C3229 +:1056D000D4F8B8326262C4F894126160C4F8A412BB +:1056E00023B1D4F8B43220465B689847D6F8043426 +:1056F00032681F74536903F400535361326853696D +:10570000926913401D070FD5D6F8040490F89C3217 +:10571000032B04D1D0F8B432DB6903B19847326867 +:10572000536903F00803536133685A6999690A4061 +:10573000D40203D55A6902F480125A615A699969F0 +:105740000A40900203D55A6902F400125A615A695C +:1057500099690A40510003D55A6902F080425A61A2 +:105760005A6999690A40520710D55C68630709D5E0 +:10577000D6F80404012380F89C32D0F8B4320179C1 +:105780005B68984733685A6814435C601C4B1A681E +:10579000511C1960282192FBF1F301FB1323002B0C +:1057A0007FF4D3AD174E184D3478002C3CD1174AF6 +:1057B0002B7812782CE000BF343F0224410D030007 +:1057C000F8420224405327FFFF340C00401E1BFF09 +:1057D0003F420F007F4F120020D6130060B6E5FE57 +:1057E0005FE3160000D3CEFE40771B00C05BB3FE24 +:1057F000C091210020753800E05459FEE09C410022 +:10580000B82C0224B72C02243B0300243A030024C2 +:10581000BD4813442B7043681A6803681A420CBFD2 +:1058200001210021FDF768FE2B780134A3F10A0263 +:10583000E4B2D2B23470F02A05D9B4490A785042A1 +:105840009B1A08702B702B78A3427FF47EADAE4874 +:1058500043681A6803681A420CBF01210021FDF752 +:105860004BFE72E51923AA4A3021AA48F5F7F6FA49 +:10587000A949AA4803F0F6FD8FE4FB683846D4F83E +:10588000289043F04003FB60F0F71AFABB6B054623 +:10589000B9F1000F03D143F48033BB631AE523F45D +:1058A0008033FAE723683220DA6822F0C042DA60F7 +:1058B000DA6842F08042DA60F1F7B2FA67682B46A4 +:1058C0004FF01C0C4FF0010E2846D9B25A1C8F42E3 +:1058D00000F2B28000234FF01C0C1946D8B20133FD +:1058E000874200F2B8802368D4F82CC0D4E90312B0 +:1058F0000292D4E906E201920022904602F14000B1 +:10590000013203EB80000F2AC0F80480F6D103F5C2 +:105910000060BCF1000F40F0AB80426842F0020230 +:1059200042609A6B22F400129A631A6842F04002B5 +:105930001A601A6842F080021A600022BEF1010F5C +:10594000C3F8002ED3F80028C3F80028D3F80028A5 +:1059500040F09680002940F09080C3F800284FF472 +:1059600084621A616E4A013A00F08D8019698906D5 +:10597000F9D410221A616A4A013A00F08680196946 +:10598000C906F9D4002203F510614FF090484FF09A +:10599000006996464FF67F3A02614261C2619742C2 +:1059A00075D1002703F530614FF090484FF0006942 +:1059B000BE464FF67F3ABA427ED1026922F4807227 +:1059C000026100229A616FF080425A61029A1AB90C +:1059D0009A6942F010029A619969524A0A439A619F +:1059E000019A1AB19A6942F008029A61BCF1010F5A +:1059F00005D19A6942F0804242F004029A61002D7A +:105A00007FF47FAC012284F8385084F8BD23626AA9 +:105A1000012A0DD184F8F453C4F8FC239A6942F0AA +:105A200000629A615A6D42F0805242F003025A6558 +:105A30001846F0F783F967E40CFB014383F83DE077 +:105A400083F83C10A3F8421083F83F001865C3E9BF +:105A50001100134639E70CFB004282F8FD1182F871 +:105A6000FC0182F8FF11C2F81012C2E9811135E77A +:105A70009A6B42F400129A635FE742F001026CE70E +:105A800042F0030269E7012573E701257AE7D1F8BF +:105A900000B0BBF1000F0CDA42B9C1F80090C1F8B8 +:105AA00010E00132C1F808A0203178E7C1F8008089 +:105AB000F5E7C1F800E0F2E7D1F800B0BBF1000F64 +:105AC0000CDA47B9C1F80090C1F810E00137C1F80D +:105AD00008A020316FE7C1F80080F5E7C1F800E0C9 +:105AE000F2E7062B7FF478AC08220F492046C6F374 +:105AF0000A16F0F731F91C2303FB0595D5F814328B +:105B00001E44C5F8146267E4280B02243A030024FB +:105B100007B601089427022432B60108D8010024F0 +:105B2000410D030000383C80F8420224D3F8187875 +:105B300003F5006304F53069DFF8A0B2DB694FF0CC +:105B400000081F403F0C002F3FF452ACF80740F113 +:105B50007B81A24D5FFA88F6286800F5306C0CEB6B +:105B600046139A68D0F8143802EA030A2B461AF052 +:105B7000010F1BD0296901220CEB481C0129C9F82F +:105B80000820D0F840E0DCF8082040F09E801107A3 +:105B900007D5934B9E4509D9100407D54FF4004310 +:105BA00002E0910670D52023CCF808301AF0080FD7 +:105BB00000F037812B680822C9F808201A6C03F519 +:105BC0003063019203EB481301999A6808468449AF +:105BD000884204D9110402D54FF400429A607F4AEA +:105BE000D2F8045492F8C40305F52A7185F8A80286 +:105BF00092F8C5C385F8A9C292F8C73392F8C66374 +:105C000006EB0326B6B2A5F8AA6292F8C9E392F8A9 +:105C1000C83303EB0E239BB2A5F8AC3292F8CBE36A +:105C200092F8CA2302EB0E224FF0010E92B2C5E9A0 +:105C3000A5E200F01F0EA5F8AE22BEF1010F00F0A4 +:105C4000AF81BEF1020F00F0CA81BEF1000F40F03B +:105C5000A88200F06000202800F0F781402800F0C2 +:105C6000F481002840F08780BCF1090F00F28380A6 +:105C7000DFE81CF06F018901810083018100F200DF +:105C80004900810058011E0112F0280F8ED154499D +:105C90008E4501D9120481D4DCF81020DBF80412FF +:105CA000C2F312028A1ACBF81422DBF8082211443C +:105CB000D5F8102258EA0202CBF8081210D1494A4E +:105CC0000121F0F715F8454B0AE047498E4512D1FE +:105CD00011043FF563AF900602D52022CCF80820CE +:105CE0001C223146D5F8040402FB0633D3F80822FF +:105CF000FFF7F3F95AE7D5F8101258EA0101EFD18E +:105D000005F57172DDE70023ADF83030330A013B51 +:105D1000062B30D8DFE803F00416222F2F4E570051 +:105D2000D5F8B0321B680CA9287C9847BDF8302004 +:105D3000002A64D0B5F8AE32002B57D12846FEF7C2 +:105D40007BF860E02A7CD5F8B4322AB99B6A0CA8AB +:105D5000984702234370E9E7DB6AF8E7F1B20529C7 +:105D60001FD8DFE801F0030A0E12161AD5F8B03278 +:105D70005B68002BD7D12846BDE0D5F8B0329B68D0 +:105D8000F7E7D5F8B032DB68F3E7D5F8B0321B6936 +:105D9000EFE7D5F8B0325B69EBE7D5F8B0329B6935 +:105DA000E7E7D5F8B4329B6B002BE4D00CAA284669 +:105DB0009847BBE72B7C002BDDD1D5F8B4320CA87B +:105DC0005B6B9847B2E72B7C002BD4D1D5F8B4326B +:105DD0000CA81B6B98470723BCE700BF343F022485 +:105DE0000A30544FF84202240A31544F9A42014675 +:105DF000284628BF1A46ADF83020FEF711F8B5F84E +:105E0000AE32002B9AD0019B1A46CC4B9A4208D94D +:105E1000CB4B1969012904D103F571721868EFF7AA +:105E200067FF1AF0100F02D01023C9F808301AF0DB +:105E3000200F02D02023C9F808301AF4005F03D0E5 +:105E40004FF40053C9F8083008F101087F0809F140 +:105E500020090BF11C0B76E61A438CD17F2E8AD8D1 +:105E600095F89C32032B86D0F3B2D5F8C01285F892 +:105E70009E3291F8BC03012810D0086881F83830B0 +:105E8000D0F8003823F4FE63C0F80038D0F80038AA +:105E900043EA0613C0F8003881F8BC232846FDF712 +:105EA000CBFF1EB1022385F89C32ACE70123FAE751 +:105EB000F1B2A44E012931703FF65DAF95F89C32E6 +:105EC000022B09D0032B19D02846ECF701FE3178BC +:105ED0002846FDF73DFC96E700293FF42FAF01214E +:105EE0000323696085F89C322846FDF738FC0228B8 +:105EF00028467FF424AFECF7EBFD84E739B90223A1 +:105F00002846696085F89C32FDF722FC16E769682F +:105F100001293FF413AFC9B22846FDF719FC3178C7 +:105F20006960E1E7012A7FF426AF95F89C32022BE5 +:105F30000AD8002B3FF41FAF2946002341F8083F41 +:105F40002846FDF76DFF5EE7032B7FF414AF291D94 +:105F5000F6E795F89C32013B022B3FF60CAF022A84 +:105F60007FF409AF0123EB60D5F8A4320BB1032312 +:105F7000EB60022205F10C01E2E7012E7FF443AF52 +:105F8000C5F8A462DAE695F89C32013B022B3FF695 +:105F9000F2AE012E7FF437AF0023C5F8A432CDE670 +:105FA00000F06002402A02D042063FF5E4AE95F8C8 +:105FB0009C22013A022A3FF6DEAEDBB2022B3FF60C +:105FC000DAAED5F8B43228469B689847B5F8AE32B9 +:105FD000002B7FF418AF00287FF415AFAEE600F079 +:105FE0006000202831D040282FD000287FF4C3AE95 +:105FF000BCF1010FD9B240D0BCF1030F2BD0BCF1E2 +:10600000000F7FF4B8AE95F89C22022A00F09C8025 +:10601000032A7FF4B0AE5BB201F00F001426002B10 +:1060200006FB005080F29F808269002A3FF4A3AEF5 +:1060300001F07F0202FB06662E4411F07F0240F061 +:106040009E803260022231467AE7D5F8B432284683 +:106050009B689847D7E695F89C32022B5AD0032BC1 +:106060007FF489AE4B063FF469AE56EA02037FF433 +:1060700065AE2846FEF7E5FF60E695F89C22022A09 +:1060800048D0032A7FF477AE002E7FF4BCAE4A06D8 +:106090003FF454AED5F8C02201F00F0150688142A0 +:1060A0003FF64CAEC1EBC10013F0800F4FF01C0364 +:1060B0004FEA800039D03C3003FB01230126104415 +:1060C00083F83D6000230170837092F8BC33012B8C +:1060D0003FF434AE012311684FF0200C82F8BC333A +:1060E00043780678012B0CBF01F5106301F530638E +:1060F0001CFB0633196821F400111960C1780239BC +:10610000012903D8196841F080511960002382F8F1 +:10611000BC3313E64E0628463FF4EDAEFEF791FF82 +:1061200080212846FEF78DFF6DE600F5FE7003FB2B +:1061300001230026104483F8FD61C3E70A30544F61 +:10614000343F0224F83E02244E067FF414AE1806B3 +:106150004FF000034FF002024CBF05F1140105F5AA +:10616000AA710B60ECE6D0F85821002A3FF403AE88 +:1061700001F07F0206FB025606F5AA765DE7002BCA +:10618000D5F8C0024FF01C03B5BF03FB020103FBAF +:10619000010391F83E3093F8FE3103B101233360DF +:1061A00050E700F08001BCE7029BD90740F10C8169 +:1061B000D9F800009DF804A0D0F8101800F510627E +:1061C000D0F834580AF00F0802EB4A1225FA08F802 +:1061D00092684FEAC8185FFA88F848EA010808EAA6 +:1061E000020818F0010F42D0019BD4F8342803F0C4 +:1061F0000F01012303FA01F122EA0102D9F810107C +:106200009942C4F83428CBF808300BD1019BD7E968 +:1062100011522A44BA64D9F85020134302D1984A43 +:10622000EFF766FD974BD3F80454BAF1000F40F036 +:106230009B80D5F89422022A40F08E80D5E9082070 +:10624000824260D9121A996CD5F8C0022A6292B2C1 +:10625000ECF749FC52465146D5F8C002ECF758FC21 +:1062600095F8A022012A02D1002285F8A02218F078 +:10627000080F02D00822CBF8082018F0100F02D027 +:106280001022CBF8082018F0400F02D04022CBF8A3 +:10629000082018F0020F02D00222CBF8082018F0D4 +:1062A000800F00F09180D7E91421914200F28C8098 +:1062B000521A796CD9F800508A42019B05F5106C8E +:1062C00028BF0A4605F580510CEB431C033201EB55 +:1062D0000A339208DCF818E01FFA8EFE9645D7E9DB +:1062E00014016FD3884201D900284CD1019A0121B1 +:1062F000D5F8343802F00F0201FA02F223EA020361 +:10630000C5F8343860E0E969B1FBF0F200FB121225 +:1063100072B988420CD8D5F89822914208D25246D8 +:106320005146D5F8C002ECF7DEFBC5F898A291E71C +:10633000D5F8B422D2682AB195F89C12032901D16C +:106340002846904780212846FEF77BFE0522C5F8A7 +:106350009422002211467FE732F0040380D180218D +:106360002846FEF76EFE7BE7D5F8B4225269002A74 +:106370003FF47DAF95F89C1203297FF478AF514626 +:106380002846904773E7411A7A6C99F810009142B9 +:1063900028BF1146CA1C920830B1B86C0844B864D2 +:1063A000786D0144796595E788B2D7F848E0033005 +:1063B00080080EEB80007045EFD05EF8048BC3F8C8 +:1063C0000080F8E7884291D9019B1C370BF1200B24 +:1063D00001330193029B5B080293FFF71FB8D3F8C8 +:1063E000043493F89C2283F89D22042283F89C2293 +:1063F000FFF77BB89F60203353F8201C21F4001175 +:1064000043F8201C53F8201C41F0006143F8201C85 +:10641000C3F8E871D3F8E01121F40011C3F8E011DA +:10642000D3F8E01141F00061C3F8E01103990131A4 +:106430000391FFF775B8536943F4005343F02B03FE +:106440005361136943F00B031361FFF783B80F2304 +:10645000FFF7F3B80E23FFF7F0B80D23FFF7EDB801 +:106460000C23FFF7EAB80B23FFF7E7B80A23FFF77F +:10647000E4B80923FFF7E1B80823FFF7DEB800BF4F +:10648000F8420224343F0224094B0A4A1978FF29B2 +:106490000BD101339342F9D1074A1978FF2904D16E +:1064A00001339342F9D1012070470020704700BFAB +:1064B0000003000800040008000500085248F8B571 +:1064C0000578BFF35B8F15F0010540F09280F6F779 +:1064D00083FF002800F08D804C4C5C224C4B2946F9 +:1064E00004F108004B4E236001274B4B636002F020 +:1064F000CDF93B23201DC4F8A850A4F89A30474B8F +:10650000A4F86850C4F88C5084F89850C4E9276304 +:106510004FF4003366266366414BA4F8A460C4E9D7 +:106520002437404BC4E92B35F6F704FE04F1BC00D8 +:10653000A4F8B860F4F77CFC3B4B3C48C4F8F43159 +:10654000C4F8005284F80452FBF718FCF4F77CFA04 +:10655000374A1568092D51DC364B1B68981E1946C1 +:1065600003F1120630F9027F662F4AD0B042F9D10A +:10657000143308460231B0F9006001363BD166237E +:1065800003800135156000252848FBF7F7FBF4F779 +:106590003BFA0020002100224FF0FF33C4F8B45032 +:1065A000C4F8602184F8542184F8FD2184F8FE2188 +:1065B0000222C4F81831C4F8E830C4F8FC30C4E949 +:1065C00044014FF400300121C4F8F8010320C4F85D +:1065D000281184F8F010C4E93802C4E93D333522AB +:1065E0004FF080730848C4F8EC20C4F80031F6F787 +:1065F000EBFE0648F8BD9942BBD1C2E76FF001053A +:10660000C2E74FF0FF35BFE7AC2B0224C02C0224B9 +:1066100030BD01083C0042001CB3010856005A007E +:1066200040420F0035D10008005A6202781402245B +:10663000A0140224D00600242DE98048744AA7B093 +:10664000136804AF53B9734B7349196001F50231F4 +:106650000B6843F480730B60012313600720DFF89D +:10666000E8B1FDF731FB10F0010000F0C580012317 +:106670006A488BF8003003F027FD0020684EFDF7D4 +:1066800023FB054667480478BFF35B8F14F00104D1 +:1066900030D1F6F7A1FE68B3634BD3F8D020510098 +:1066A00000F1AD80D3F8D020002AC0F2A880D3F842 +:1066B000D020D20000F1A580D3F8D020500100F105 +:1066C000A080D3F8D020D10100F19D80D3F8D02054 +:1066D00012020BD4D3F8D020900200F19680D3F8A8 +:1066E000D03013F4800F0CBF0B2401244D483470BC +:1066F000F6F76AFE4D4C2378BFF35B8FD9070BD4B6 +:106700002046F6F769FE38B1474B2046D3F8D02033 +:10671000474B1A60F6F758FE434A0820D2F8D030AB +:1067200043F48033C2F8D03034782146FDF7B0FA14 +:10673000012C08D14DF659710020FDF7A9FA4FF44C +:10674000FA70F0F76DFBF0F745FB0A20F0F768FBF5 +:106750004DF659739D4200F02082FFF795FE0446E6 +:10676000002800F03B829BF8003013B1314803F061 +:10677000ABFC40F2AA739D4240F041810120FDF73D +:10678000A3FA0546C4B20220FDF79EFA8046032014 +:10679000FDF79AFA9BF8003078612BB10346424628 +:1067A00021462548F4F76AFB2448FBF787FF14F0DD +:1067B000020F234E61D014F0600A4FF02800DFF87A +:1067C0008C9045D0F6F7F2FD002308F10062C8F581 +:1067D0000011C0F8009080F820304362C0E9042323 +:1067E0000132C0E90133C0E9061301D0002943D1C9 +:1067F00000211448ECF710F98BF800003DE706245F +:1068000074E7042472E7032470E702246EE700BFF4 +:10681000F8680224C4270224004000588DB60108FD +:10682000C82E0224B02B022400440258B42B0224A8 +:10683000CC2E0224ABB60108C8B60108283F0224BA +:10684000F43E02240101FF80E40A022408A90108A1 +:10685000F6F7ACFD4FF000620023C0F808A080F806 +:1068600020A0C0F824A0C0E904234FF400120023A4 +:10687000C0E9009AC0E906233060620702D5FFF73D +:106880001DFE3060230705D59BF8003013B1C448C6 +:1068900003F01AFC280614D528203568F6F786FD83 +:1068A000C04B002280F819803060C0E90035002319 +:1068B000C0E90223C0E9042300230376C36180F802 +:1068C000203014F0400FB84D08D0C820F6F76EFD08 +:1068D0008146B649ECF7CEF8C5F80090A10607D579 +:1068E0005420F6F763FD0446B049ECF7A7F82C6096 +:1068F00028683168002800F0AB8003685B6A98471D +:106900000646002840F0A180A949AA4801F0B4FB3E +:10691000804600286ED003460422012107F12000A2 +:1069200001F026FC32463146404601F031FC386A1F +:10693000FCF7B6FD421C044600F01E819D4907F19C +:106940001800FBF72DFA07F11800F7F76FFA054664 +:1069500000283ED101F018F913237D610360204621 +:106960004FF00009ECF754F9B0F5804F924D28BF75 +:106970004FF48040064601F017FF82467B69994537 +:1069800080F0D480434632460121504601F0F0FBAE +:1069900004EB090120463961ECF73AF939690246FE +:1069A000B1FBF0F300FB13133BB92846FBF7DAFB0E +:1069B00042F21070F6F7F0FC39690A463346514648 +:1069C0002846FBF71BFD4FF47A70B144F6F7E4FC60 +:1069D000D4E7036807F13002B9699B699847051E3F +:1069E00005DA6D4201F0D0F87E610560B7E73B6CD7 +:1069F0007B61B4E76FF002010020FDF749F96F4BAE +:106A00009BF800101A6802F07F42B2F1005F00F0BC +:106A1000B8801A6802F07F42B2F1105F00F0B180D6 +:106A20001A6802F07F42B2F1405F00F0AA801B6852 +:106A300003F07F43B3F1605F00F0A380002900F012 +:106A4000AC805F4803F040FBA7E06FF00101D3E7A3 +:106A500000296BD06B46084608EE903A0B689B689D +:106A600098470546002840F08980306803689B6A93 +:106A70009847102802463068B8BF1022016893007A +:106A8000073323F00703ADEB030DD3170DF1100906 +:106A9000CDE900232B464C6942464946A047D9F828 +:106AA0000000FCF7FDFC431C044662D0ECF7B0F894 +:106AB000B0F5804F28BF4FF48040814601F074FE4E +:106AC00008EE100A7B69AB422DD93068002218EE1F +:106AD000101A0368019208EB0502CDF80090D3F874 +:106AE00014A00023D04704EB050A2046ECF790F8E9 +:106AF0000246BAFBF0F300FB13A33BB951462E4804 +:106B0000FBF730FB42F21070F6F746FC4B4652465C +:106B100018EE101A2848FBF771FC4FF47A704D44B8 +:106B2000F6F73AFCCEE718EE903A9D462248FBF77E +:106B3000A9FD244B00222448FB630021234BC7E915 +:106B40000D223B6307F13003CDE90201FA6B2048C7 +:106B500000920ECBF7F712FB9BF8003013B11D48E3 +:106B600003F0B2FA00210846FDF792F8F0F71AF99F +:106B7000FEE718EE903A9D4621463DE76FF003018F +:106B80003AE719B10D491448F4F778F9002108469D +:106B9000FDF77EF80948F7F7E7F8FEF7DBFA00BFE4 +:106BA000E4B6010884BD0108303F0224FFA60108B5 +:106BB000F9B60108FCB60108283F022400000408C9 +:106BC00037B70108F5340108400D0300D13401083E +:106BD000600600240BB701081CB70108834B07F1BE +:106BE0003005834AFB63834B3B630023C7E90D00F9 +:106BF000CDE90223FB6B8048009395E80E00F7F780 +:106C0000BDFA21462046FDF743F89BF8003013B14A +:106C10007A4803F059FA7A4C4FF4707600213246E4 +:106C2000204601F033FE774B04F12001002063621F +:106C3000A146754B2365754BE365EDF749F904F102 +:106C40004C010120EDF744F904F158010220EDF761 +:106C50003FF9626A7861294600203E63ECF7F8F953 +:106C600088BB3B6B2946226D0120A3623E63ECF793 +:106C7000EFF9F8B109249BF8003023B14FF470719B +:106C80006348F4F7FBF801239C4289F864302CD167 +:106C90005B4C604E94F86430042B87F8373000F278 +:106CA0000483012B00F2078300F09783FF2384F80D +:106CB000643092E33B6B2946E26D022063653E63DC +:106CC000ECF7C6F908B10124D5E73B6B206A2366CF +:106CD000ECF7F2F90446D9F85800ECF7EDF9A042C8 +:106CE0002CBFC9F86800C9F868400020EDF766F9C4 +:106CF000824658B19BF800301BB100214648F4F79A +:106D0000BDF83F4B012283F86420C1E7D9F828E0A1 +:106D1000BEF5707F04D8D9F854C0BCF5707F07D990 +:106D20009BF80030002BECD03C4803F0CDF9E8E7AD +:106D3000D9F858300446D9F824B002469B68014679 +:106D4000064638617B60D9F85030FB6003468E45BB +:106D50000ED894450CD88E452E4C04D1944502D1C2 +:106D60003B699E4262D02378002BCAD02C48DCE7D6 +:106D700083421BD10BEBC108FD680131D8F80480B8 +:106D8000434405EBC2080132D8F8048040448342F2 +:106D9000DDD138691E44184438617868984221D2A0 +:106DA0001C4B1B78002BACD01E48BEE70FD20BEB60 +:106DB000C108022CD8F80480434405D1154B1B7838 +:106DC000002B9ED01848B0E701310124DFE7FD68B1 +:106DD000012C05EBC208D8F804804044EED0013203 +:106DE0000224D4E7002420462346B0E7F534010806 +:106DF00090D0030029350108B00B022449B70108DF +:106E000020070024F84A0224FC860224FC6802249D +:106E10005CB70108E40A02249CB70108C6B7010860 +:106E20005BB8010826B80108F2B701082022FF214B +:106E300007F13C0001F02AFD0123002007F12001A9 +:106E40003B6303F10123F865C7E90D30EDF7E2FA82 +:106E500007F118010220EDF7DDFA23783BB397F82C +:106E60002030012B61D0A74AA749032B18BF0A463F +:106E700097F8231097F82130019197F82210A34832 +:106E80000091A349F3F7FAFF237883B13B7E012BEE +:106E90004DD09C4A9C49032B18BF0A46F97E7B7E45 +:106EA0000191B97E994800919A49F3F7E7FF97F865 +:106EB00022304FF0000B97F820503E7EDFF85882CA +:106EC0003B61294698F80000EDF7E7FA002834D036 +:106ED000314698F80100EDF7E0FA70B398F8022017 +:106EE000042A02D03B699A4227D18B4B03EB8B03D8 +:106EF000DD78237853B1E5B1012D1CD08749884B4B +:106F0000022D18BF19468748F3F7B8FF012DFD651C +:106F100000F0B080022D00F0AF80E5B12378002BA7 +:106F20003FF4EFAE00218048E9E6804AA0E77F4ABF +:106F3000B4E77F49E7E77F49E5E70BF1010B08F18B +:106F40000408BBF1040FBCD123781BB17A4803F0CD +:106F5000BBF80023FB6597F83530012B40F02A8100 +:106F60003B6B012B40F0268197F83400012840F05C +:106F7000218197F83760012E40F08A8107F11801CE +:106F80000020EDF747FA0546002840F0458107F15B +:106F900020013046EDF73EFA012840F03A8123788F +:106FA0001BB129466548F3F769FF654B3B62002337 +:106FB00087F82430FB7E4FF000083D7E3B6197F858 +:106FC000206097F8233097F81AA0DFF880B1FB60B3 +:106FD00029469BF80000EDF760FA002800F02281B6 +:106FE00031469BF80100EDF758FA002800F01A81AD +:106FF0009BF80220042A03D03B699A4240F0128198 +:107000009BF80320042A03D0FB689A4240F00A81CF +:107010009BF80420042A02D0524540F003812378D3 +:107020007BB19BF80530022B00F0F880032B00F0B9 +:10703000F78044493A4A042B18BF11464248F3F7F7 +:107040001DFF9BF80540A31E022B00F2E580022CD9 +:1070500003D0042C0CBF04240324012007F13001C9 +:10706000EDF792F8002800F0EB8001280CBF012416 +:107070000524E5E04FF0020A07F120015FFA8AF0EB +:10708000ECF726FF064600287FF448AFD7F820B07B +:107090005846EDF710FA9BF800303861022B06D005 +:1070A000012B2BD90725386AECF7FEFE35E74FF0A8 +:1070B000030A0025A84638690123D9F8681007F1AA +:1070C000180201FB08015846ECF786F800286FDB30 +:1070D000012207F118015846EDF7D6F8002837D0FD +:1070E00016B1002D08BF454608F10108C245E2D19E +:1070F000002E40D0002D08BF554631E04FF4346AD1 +:10710000D7E700BF60B6010866B6010894B8010869 +:1071100086B80108D3B8010888BE0108E1B90108A2 +:107120006AB60108DBB8010822B901085BB601089C +:10713000FDB8010853B80108EEB8010853B90108B9 +:10714000030103037CB601089CB9010898BE01083D +:1071500066B3002DC8D0237813B1A74802F0B4FF5E +:107160000323B5FBF3F35A1C03EB4303ED1A3A6315 +:10717000013587F83450386A012307F11802816815 +:107180008039ECF729F8054600287FF4C7AE0122C4 +:1071900007F11801386AEDF777F808B101233B765B +:1071A0003B7E03F00F0387F837307CE701269BE72F +:1071B000012578E707F13000904DEDF7C5F997F814 +:1071C000373085F86430033B012B05D8EDF704F91F +:1071D00010B1FF2385F8643097F83730023B022B5B +:1071E0000BD8ECF71FFF40B1FF2385F864302378FC +:1071F0003BB1834802F068FF03E095F86430FF2B51 +:10720000F5D007F13000ECF7D9FE012385F86430A2 +:107210003EE500283FF4CEAEFF2411E079490DE7AA +:1072200079490BE708F101080BF1060BB8F1030FE0 +:107230007FF4CEAE237813B1744802F045FF0124E9 +:107240006E4B83F864406D4B93F86430012B7FF4F0 +:107250001FAD0020ECF78EFE0446002007F1300140 +:10726000ECF792FF14B100283FF412ADD9F82C408E +:10727000012007F13001ECF787FF654B9C427FF45A +:1072800007AD00287FF404AD042389F86430FFE4DF +:1072900007F13001ECF778FF584B08B1052232E5D1 +:1072A00097F8372083F86420CDE7052B7FF4FEACF8 +:1072B000EDF792F87CE00020ECF75CFE054600203C +:1072C00007F13001ECF760FF0DB100287DD0337875 +:1072D0003BB1504802F0F8FE337813B14E4802F04B +:1072E000F3FE07F1180100200025ECF7F1FD07F18E +:1072F00020010120ECF7ECFDA846D4F828B0C345E6 +:107300002ED1236C13F00C0F39D133781BB12946E1 +:107310004248F3F7B3FD00230095B9691A46386A6D +:10732000EBF7E8FF7861002835D1D9F850300146F5 +:10733000386A5A68EBF714FFD9E91423013B52F875 +:10734000331002EBC30013684268C91A386AEBF7BE +:1073500007FFB869ECF7A8FD386AECF7A5FD1AE05D +:10736000D9F824302946B86903EBC80308F10108AD +:10737000D3F804A052465544EBF7F2FEBFE7284984 +:1073800007F130033A6A01F14000ECF795F8002864 +:1073900011DA03237B6194F86430DA1E012A1AD8CB +:1073A000EDF71AF8786100287FF480ACECF73AFE2C +:1073B000786190B17AE4A8D107F13002012119482F +:1073C000ECF7CAFE0028A0D0E3E707F13000EDF7A4 +:1073D000BBF87861DFE7022BE8D094F86430FF2B2C +:1073E00025D1337803BB07F13000ECF7E7FD786176 +:1073F00008B34FF0FF352DE002B901082007002443 +:107400004AB9010883B6010888B60108ADB9010878 +:107410003DB8F396BFB90108EEB9010809BA0108F1 +:107420004C0700248C0700241E4802F04DFE94F8FF +:107430006430012BD7D100210846ECF7A5FE0546A4 +:1074400040B930220146B81801F020FA236A7D6164 +:107450005B68BB60A06DECF727FDE06CECF724FDEA +:10746000206AECF721FD7B69002B08BF2B461D46E7 +:107470004BB13378002B3FF490AB29460A48F3F721 +:10748000FDFCFFF78ABBFCF799FFA468BB682344A7 +:107490001C4633781BB121460448F3F7EFFC204625 +:1074A000F6F762FC4AB9010848BA010877BA010840 +:1074B0001FB5134B6C460B250FCB84E80F002046FD +:1074C0001C24FDF717FD0F4B18600F480F4B45604C +:1074D00003600F4BC4608360FDF70CFD0D4B18601B +:1074E0000D480E4BC460C0E900350D4B8360FDF7BD +:1074F00001FD0C4B186000F0C1FFFFF79DF800BFC5 +:1075000070BC0108882702243C430224AABA01085F +:107510004C43022480270224FC3E0224B7BA01080F +:107520000C3F0224402702248A4A2DE9F84F1368B1 +:1075300053B9894B8949196001F502310B6843F44D +:1075400080730B60012313600020854CFCF7BCFBAB +:1075500040F2AA73834D984263D10120FCF7B4FB3B +:10756000C0B220600120FCF7AFFB00F007002071E3 +:107570000120FCF7A9FBC0F3001060710120FCF7AB +:10758000A3FBC0F3C010A0710220FCF79DFBA0601C +:107590000320FCF799FBE0600420FCF795FBC0B2E8 +:1075A00020620420FCF790FB00F0070084F8240020 +:1075B0000420FCF789FBC0F3001084F825000420A8 +:1075C000FCF782FBC0F3C01084F826000520FCF70E +:1075D0007BFBA0620620FCF777FB2B78E0628BB187 +:1075E000614802F071FD2B7863B1227921685F4810 +:1075F000F3F744FC2B782BB194F82420216A5C48E3 +:10760000F3F73CFC237994F8242003F002019A421A +:1076100040F01481F9B12B784BB3564802F054FD79 +:1076200025E002204FF4F013A4210422A06221607F +:10763000A2802162A284C4E9020301234FF4003036 +:10764000A37184F826302B78E062002BDAD04A4808 +:1076500002F03AFDD6E7130703D52B783BB1474834 +:10766000DCE7570714D5FEF729FF20612063637913 +:10767000002B3AD023799E070FD52B7833B13D48A4 +:1076800002F022FD6379002B00F08980BDE8F88FBD +:107690002B78002BEBD03A48C0E713F0080604D053 +:1076A0002B78002BF2D03548EAE7580718D5282068 +:1076B000344FF5F77BFE216906720676D4E9022382 +:1076C000C0E90071C0E90426C0E908362BB90123DE +:1076D000002203760023C0E9082360616063D1E7DC +:1076E0002B78002BD2D02648CAE7A379002B53D0A1 +:1076F000226A23689A4204D02B7813B1224802F000 +:10770000E3FCA268A36A9A4204D02B7813B11F4805 +:1077100002F0DAFC28201E4EF5F748FE2269002709 +:10772000A168606141766063C0E9006200220026C2 +:107730000276C26180F82020C0E90267C0E90467D0 +:10774000F3F778FF00289DD02B78002B9AD01148B2 +:1077500096E700BFF8680224C427022400400058BE +:10776000B0050024E40A0224C1BA0108D3BA010812 +:10777000EABA010812BB0108FFBA01081DBB0108E3 +:1077800025BB01083CBE01082EBB010837BB010820 +:1077900084BD010841BB01082369636163632368F9 +:1077A000590643D5C820F5F701FE73490646EBF7A5 +:1077B00061F9E661E06961690368E0635B6A9847C3 +:1077C00020B12B7813B16D4802F07EFC38200126E1 +:1077D000F5F7ECFD0027E3680025694A4FF480586F +:1077E000DFF8C4B14FF00009DFF8C0A18260C0F833 +:1077F00000B04561A061C0E903A3C0E90667C0E924 +:107800000867C0E90A893820F5F7D0FDE36A5D4AC8 +:10781000C0F800B0C0E9022AC0E90435C0E9066733 +:10782000C0E90867C0E90A89A0632FE75420F5F78B +:10783000BDFD51490646EBF701F9BAE729B12B78AE +:1078400073B1514802F040FC0AE01A0703D52B78C7 +:1078500033B14E48F6E75F070CD5FEF72FFE2061E7 +:1078600094F824309E070AD52B789BB1484802F043 +:107870002BFC0FE02B78002BF2D04648E2E71807EC +:1078800003D52B7833B14148F1E759070ED5FEF700 +:1078900015FE20636679002E42D023799A070AD517 +:1078A0002B7843B3384802F00FFC24E02B78002BF0 +:1078B000F0D03948DBE713F0080603D02B78D3B1BA +:1078C0003248F0E75F0726D52820344FF5F76EFDE4 +:1078D000216906720676D4E90223C0E90071C0E985 +:1078E0000426C0E908362BB90123002203760023C1 +:1078F000C0E90823606194F82560002E00F0DD8067 +:1079000094F8243098072FD52B78002B69D0204885 +:1079100002F0DAFB65E02B78002BECD01D48C2E7C3 +:10792000A379F3B128204FF00008F5F73FFD4FF0A1 +:1079300000092169A2681A4F06764276C66180F86E +:1079400020606061C0E90071C0E90289C0E9048972 +:10795000F3F770FE0028CED02B78002BCBD0114847 +:10796000A1E723696361C6E713F0080620D02B78EE +:10797000002B36D00548CBE7FFA6010848BB01081D +:1079800050BB010863BB010812BB01081DBB010805 +:107990007EBB010873BB010889BB01083CBE01081E +:1079A00084BD010894BB0108E8BD01085FBB010864 +:1079B00059077DD528205C4FF5F7F8FC216B06723E +:1079C0000676D4E90A23C0E90071C0E90426C0E9BB +:1079D00008362BB90123002203760023C0E90823CF +:1079E00060636379002B2FD123685A0640F18C80A5 +:1079F000C820F5F7DBFC4D490646EBF73BF8E6619E +:107A0000E069616903685B6A984720B12B7813B11C +:107A1000474802F059FB3820F5F7C8FC454AE368AF +:107A20000260454AA0618260444AC0E90323002302 +:107A3000012243610023C0E90623C0E908234FF473 +:107A400080520023C0E90A2394F82530002B7FF4EC +:107A50001DAE236A5B065FD5C820F5F7A7FC384941 +:107A60000646EBF707F8E663E06B616B03685B6A59 +:107A7000984720B12B7813B1324802F025FB38200B +:107A8000F5F794FC2B4AE36A02602F4A82602B4A86 +:107A9000C0E903230023012243610023C0E9062338 +:107AA000C0E908234FF480520023C0E90A23BBE653 +:107AB0002B78002B95D025482AE794F8263003B37D +:107AC00028204FF00008F5F771FC4FF00009216BFA +:107AD000A26A1F4F06764276C66180F82060606316 +:107AE000C0E90071C0E90289C0E90489F3F7A2FD89 +:107AF00000283FF476AF2B78002B3FF472AF154887 +:107B000006E7236B63636CE75420F5F74FFC0749E6 +:107B10000646EAF793FF72E75420F5F747FC084959 +:107B20000646EAF78BFF9EE73CBE0108AEBB0108A4 +:107B3000B2BB0108E8BD0108C3BB01085FBB010877 +:107B4000D3BB0108D7BB0108E8BB010889BB01080A +:107B500084BD0108A1BB010810B5FEF795FC68B90A +:107B6000074C23781BB9FFF7DFFC01232370054B7B +:107B70005A790AB1586910BD9869FCE70020FAE704 +:107B8000A0060024B0050024014B1868704700BF10 +:107B90003C03002470B505460C4611B9002630465A +:107BA00070BD18B183690BB900F094F92C4B9C425D +:107BB00014D16C68636ED80705D4A389990502D4E3 +:107BC000A06D00F08AFDB4F90C308BB9666E16F02A +:107BD0000106E3D1A06D00F082FDE0E7214B9C425D +:107BE00001D1AC68E6E7204B9C4208BFEC68E1E7B6 +:107BF0002146284600F042F8236B064633B1216A3D +:107C0000284698470028B8BF4FF0FF36A3891A06C8 +:107C100003D521692846F6F703F9616B41B104F1F8 +:107C20004403994202D02846F6F7FAF8002363632A +:107C3000A16C21B12846F6F7F3F80023A36400F005 +:107C400031F90023A381636EDB0702D4A06D00F03D +:107C500046FDA06D00F03FFD00F02AF99FE700BF50 +:107C600030BF010850BF010810BF0108024B014698 +:107C70001868FFF78FBF00BF3C0300248A892DE9F5 +:107C8000F041054610070C4658D44B68002B05DC24 +:107C90000B6C002B02DC0020BDE8F081E66A002EB0 +:107CA000F9D0002312F480522F682B6032D0606D1F +:107CB000A3895A0705D56368C01A636B0BB1236C9F +:107CC000C01A00230246E66A216A2846B047431CD0 +:107CD000A38906D129681D292CD82A4ACA40D6076B +:107CE00028D500226260D9042269226004D5421C92 +:107CF00001D12B6803B96065616B2F600029CAD080 +:107D000004F14403994202D02846F6F789F800208E +:107D10006063C1E7216A01232846B047411CC7D1EF +:107D20002B68002BC4D01D2B01D0162B01D12F6046 +:107D3000B1E7A38943F04003A381ADE70F69002FAA +:107D4000A9D093070E6808BF4B690F6018BF0023C6 +:107D5000A6EB07088B60B8F1000F9CDD216AA66ACC +:107D600043463A462846B047002806DCA38943F03C +:107D70004003A3814FF0FF308EE70744A8EB0008D3 +:107D8000E9E700BF0100402038B50B6905460C4605 +:107D900013B90025284638BD18B183690BB900F026 +:107DA00099F8144B9C421BD16C68B4F90C30002B31 +:107DB000EFD0626ED00704D4990502D4A06D00F014 +:107DC0008CFC28462146FFF759FF636EDA0705460B +:107DD000E0D4A3899B05DDD4A06D00F080FCD9E739 +:107DE000054B9C4201D1AC68DFE7044B9C4208BFC5 +:107DF000EC68DAE730BF010850BF010810BF010886 +:107E0000014620B9044B0549186800F018BB044B23 +:107E10001868FFF7B9BF00BF70BF0108897D01086E +:107E20003C030024002310B50446C0E90033C0E938 +:107E30000433836081814366C281836119460822CD +:107E40005C3000F023FD054B6362054BA362054BDC +:107E5000E362054B2462236310BD00BFC98B010898 +:107E6000EF8B0108278C01084B8C0108014900F0B9 +:107E7000E6BA00BF897D010870B54A1E68255543E2 +:107E80000E4605F17401F5F7CFFF044640B100211D +:107E9000C0E900160C30A06005F1680200F0F6FCA5 +:107EA000204670BD014800F018BC00BF4CA502245C +:107EB000014800F014BC00BF4CA50224014800F0AA +:107EC0000CBC00BF4BA50224014800F008BC00BF59 +:107ED0004BA5022410B50446FFF7F0FFA3691BB1C0 +:107EE000BDE81040FFF7F0BFC4E912332365134B20 +:107EF000134A1B68A262A34204BF0123A361204668 +:107F000000F020F86060204600F01CF8A0602046D9 +:107F100000F018F80022E06004216068FFF782FF9B +:107F2000A06801220921FFF77DFFE06802221221EB +:107F3000FFF778FF0123A361D2E700BF70BF0108FC +:107F40006D7E0108F8B50746FFF7ACFF1E4B1E68B3 +:107F5000B36913B93046FFF7BDFF4836D6E901349F +:107F6000013B03D533680BB33668F7E7B4F90C501F +:107F7000D5B9164BE36004F15800656600F0AAFB22 +:107F8000FFF796FFC4E90155C4E904552560A561D2 +:107F90000822294604F15C0000F078FCC4E90D5584 +:107FA000C4E912552046F8BD6834D9E704213846A3 +:107FB000FFF762FF044630600028D5D1FFF778FF55 +:107FC0000C233B60EEE700BF70BF01080100FFFF1C +:107FD000F7B50F46114601AA054601F093F806468B +:107FE00018B90024204603B0F0BD2846FFF7AAFFC9 +:107FF00004460028F5D03946019A4FF4DB73284631 +:1080000000F02CFD071E09DA0025FFF74BFFA06DDD +:10801000A58100F060FBFFF74BFFE2E7636EDB0733 +:1080200005D4A389980502D4A06D00F056FB0E4B31 +:1080300063620E4BA3620E4BE362F1050D4BE781C9 +:10804000A6812462236305D5022300222146284607 +:1080500000F09CF8636EDA07C4D4A3899B05C1D4F1 +:10806000A06D00F03CFBBDE7C98B0108EF8B010858 +:10807000278C01084B8C0108024B0A460146186800 +:10808000FFF7A6BF3C0300242DE9F74F1F46134618 +:108090007B430C9C06468A4691469B465FD018B1AE +:1080A00083690BB9FFF716FF2E4B9C4228D17468E9 +:1080B000636EDB0705D4A3899D0502D4A06D00F093 +:1080C0000CFB6368002B01DA00236360D846D4E917 +:1080D000001545451ED34246504600F0C9FB606876 +:1080E0002168636EA0EB08004144DA0760602160FC +:1080F0002FD4A3899B052CD4A06D00F0F0FA28E0C2 +:10810000194B9C4201D1B468D2E7184B9C4208BF7E +:10811000F468CDE72A46504600F0AAFB23682B44BA +:1081200023602146A8EB05033046019300F0B2FC22 +:10813000AA44019B88B1636ED80705D4A389990529 +:1081400002D4A06D00F0CBFA5D44A5EB0803B3FBAD +:10815000F9F7384603B0BDE8F08F9846B7E71F46F9 +:10816000F7E700BF30BF010850BF010810BF01088A +:1081700007B5009313460A46014603480068FFF717 +:1081800083FF03B05DF804FB3C03002400F00AB851 +:1081900013460A4601460248006800F003B800BFD3 +:1081A0003C0300242DE9F0410C4617461D460646C7 +:1081B00018B183690BB9FFF78DFE514B9C4222D158 +:1081C0007468636ED90705D4A3899A0502D4A06D9B +:1081D00000F083FAA38903F48473B3F5847F03D199 +:1081E00021463046FFF7D0FDD4F82C80B8F1000FBF +:1081F00013D11D233360636ED90778D54FF0FF3557 +:108200002846BDE8F0813F4B9C4201D1B468D8E7D5 +:108210003D4B9C4208BFF468D3E7012D36D035F0C2 +:10822000020362D123691BB92146304600F07CFA73 +:1082300021463046FFF7A8FD0028DCD1216A2B46F5 +:108240003A463046C0470130D5D0616B41B104F1A8 +:108250004403994202D03046F5F7E2FD0023636300 +:1082600023692360A389002623F402636660A38147 +:108270000822314604F15C0000F008FB656E15F041 +:1082800001053BD1A3899B05BAD421E021463046A4 +:10829000FFF77AFDA28912F480520CD0656DA38994 +:1082A0005A0719D56368ED1A636B0BB1236CED1A8D +:1082B0002F440025B6E72B46216A3046C047431CB1 +:1082C0000546ECD1636ED80798D4A389990595D457 +:1082D000A06D00F004FA93E71807E9D52368226936 +:1082E000002BE5D09B1A1D44E2E7162382E7A38901 +:1082F0009A0583D4A06D00F0F2F97FE735467FE759 +:1083000030BF010850BF010810BF0108024B0146F1 +:10831000186800F003B800BF3C03002470B50C4699 +:10832000054618B183690BB9FFF7D4FD324B9C4267 +:1083300014D16C68636EDA0705D4A3899B0502D457 +:10834000A06D00F0CAF9E66ACEB91D232B60636EFA +:10835000DE070DD54FF0FF35284670BD274B9C42F8 +:1083600001D1AC68E6E7264B9C4208BFEC68E1E728 +:10837000A3899D05EED4A06D00F0B1F9EAE7A289CA +:1083800002F00C03082B19D12368BBB121695B1AD9 +:10839000002B13DDD00511D502230022216A2846C7 +:1083A000B047411C05460DD1636EDA07D2D4A389CC +:1083B0009B05CFD4A06D00F092F9CDE712F4805266 +:1083C0000FD0656DA28956070DD56368ED1A636BF2 +:1083D0000BB1236CED1A636ED907BDD49305BBD4E2 +:1083E000E8E70123DAE71007F5D52368002BF2D080 +:1083F00021695B1A1D44EEE730BF010850BF010838 +:1084000010BF01082DE9F0410F4600F14804002695 +:10841000D4E90185B8F1010805D52468002CF7D10D +:108420003046BDE8F081AB89012B06D9B5F90E3095 +:10843000013302D02846B84706436835EAE72DE9FC +:10844000F8430646884600F148040027D4E9019520 +:10845000B9F1010905D52468002CF7D13846BDE8EB +:10846000F883AB89012B07D9B5F90E30013303D05E +:1084700029463046C04707436835E9E770B50D4DDA +:108480000D4C641BA4100026A64209D10B4D0C4CC8 +:1084900002F004F9641BA4100026A64205D170BDA9 +:1084A00055F8043B98470136EEE755F8043B9847EA +:1084B0000136F2E70804002408040024080400241C +:1084C0001004002438B5074B1D68EB6B04461BB93C +:1084D000242000F069F9E863E96B2046BDE83840E4 +:1084E00000F002B83C0300242DE9F3410746019156 +:1084F00000F092FE01998046384600F091FE4369F3 +:108500009A07044603F26C7605D1642296FBF2F3D7 +:1085100002FB13637BBB4FF4C87396FBF3F503FBBD +:108520001565B5FA85F56D09684B302202FB0535F6 +:1085300000F038FC00F042FC654B1B6853B3D8F8E0 +:108540000430B34219D1D8F80010D7E90067D8E950 +:108550000823D1B9964277EB030323DAD8E9122333 +:10856000964277EB0303B4BF0123002323621BDB96 +:10857000D8F828101AE00125D6E7304600F06AFB4B +:108580000028E0D14FF0FF3304E0964277EB03037D +:1085900002DA00232362EBE7D8E91223964277EB55 +:1085A0000303F6DA01232362D8F850104FF4616315 +:1085B0003C2091FBF3F603FB1613616893FBF0F28A +:1085C00000FB12302368891AA26861601B1A921B93 +:1085D0003B2B2360A26035DD013161603C3B2360B1 +:1085E00063683B2B34DD0132A2603C3B6360A368CF +:1085F000172B33DDE2690132E261A2690132062AFA +:10860000C8BF0022A261E268183B0132A36023695F +:10861000E26055F823108A420EDD0B2BA2EB01021B +:10862000E26003F1010209BF6369226100220133A4 +:1086300002BF22616361E26100F0BAFB204602B032 +:10864000BDE8F081002BCBDA013961603C33C6E72D +:10865000002BCCDA013AA2603C33C7E7002BEBDAFF +:10866000E269013AE261A269013A48BF0622A261C9 +:10867000E2681833013AE260A360002ADCD1236982 +:10868000013B05D42361236955F82330E360D3E728 +:108690000B23236163695A1E626103F26B729307B5 +:1086A00005D1642192FBF1F301FB132363B94FF46D +:1086B000C87192FBF1F301FB1323B3FA83F35B0957 +:1086C00003F5B673E361DEE70123F9E774BF010840 +:1086D0003CA5022470477047704770477047704749 +:1086E00070B50E46B1F90E10002996B014461D461D +:1086F00007DA00232B60B3891A0610D44FF4806385 +:108700000EE06A4600F034FD0028F2DB019A02F424 +:108710007042A2F500535A425A412A60EEE74023C4 +:108720000020236016B070BD8B8973B59D07064687 +:108730000C4607D504F147032360236101236361DD +:1087400002B070BD01AB6A46FFF7CAFF009905464B +:108750003046F5F769FB48B9B4F90C309A05EFD407 +:1087600023F0030343F00203A381E3E70D4BB3625D +:10877000A389206043F08003A381009B6361019B78 +:1087800020615BB1B4F90E10304600F0F9FD28B15C +:10879000A38923F0030343F00103A381A0890543C8 +:1087A000A581CDE76D7E0108024B01461868F5F7FB +:1087B0003BBB00BF3C030024024B01461868F5F7A1 +:1087C0002FBB00BF3C03002400000000000000009D +:1087D00001F0FF01102A2BDB10F0070F08D010F872 +:1087E000013B013A8B422DD010F0070F42B3F6D176 +:1087F000F0B441EA012141EA014122F007047FF08F +:1088000000070023F0E80256083C85EA010586EAE5 +:10881000010685FA47F5A3FA87F586FA47F6A5FA21 +:1088200087F68EB9EED1F0BC01F0FF0102F007022D +:1088300032B110F8013B013A83EA010313B1F8D1D8 +:108840000020704701387047002D06BF35460338B9 +:10885000073815F0010F07D1013015F4807F02BFF2 +:10886000013015F4C03F0130F0BC0138704700BF43 +:108870000A44914200F1FF3300D1704710B511F85E +:10888000014B03F8014F9142F9D110BD0244034658 +:10889000934200D1704703F8011BF9E713B54A432F +:1088A00011460192F5F7C0FA044618B1019A002169 +:1088B000FFF7ECFF204602B010BD000037B50029DD +:1088C00048D051F8043C0190002BA1F10404B8BF3A +:1088D000E418F4F7ABFD204A01981368154633B944 +:1088E0006360146003B0BDE83040F4F799BDA34263 +:1088F0000BD921686218934204BF1A685B686360F1 +:1089000004BF521822602C60ECE71A465B680BB17A +:10891000A342FAD911685518A5420BD12468214405 +:108920005418A3421160DDD11C685B685360214478 +:108930001160D7E702D90C230360D3E725686119DA +:108940008B4204BF19685B68636004BF49192160EA +:108950005460C7E703B030BD18A50224F8B5CD1C9C +:1089600025F0030508350C2D38BF0C25002D0646D3 +:1089700001DBA94203D90C2333600020F8BDF4F7D2 +:1089800055FD21490A6814469CB9204F3B6823B91C +:108990002146304600F008F938602946304600F09C +:1089A00003F9431C23D10C2333603046F4F738FD20 +:1089B000E3E723685B1B17D40B2B03D923601C440C +:1089C000256004E06368A2420CBF0B605360304630 +:1089D000F4F726FD04F10B00231D20F00700C21A56 +:1089E000CCD01B1AA350C9E722466468CCE7C41C4C +:1089F00024F00304A042E3D0211A304600F0D4F85A +:108A00000130DDD1CFE700BF18A502241CA5022448 +:108A1000F8B5074614460E4621B9BDE8F8401146A0 +:108A2000F5F702BA22B9F5F7FBF925462846F8BD55 +:108A300000F0C8FCA0420FD221463846F5F7F4F901 +:108A400005460028F2D031462246FFF711FF314695 +:108A50003846F5F7E5F9E9E73546E7E738B5074D74 +:108A600004460846114600222A601A46F9F7EEF934 +:108A7000431C02D12B6803B1236038BD54A50224E6 +:108A8000838903F00903092B01D1FFF7B9B900204D +:108A900070470000F8B50C46054618B183690BB95C +:108AA000FFF718FA3B4B9C420AD16C68B4F90C20D2 +:108AB00000236360A3899E060CD54FF0FF3066E06B +:108AC000354B9C4201D1AC68F0E7344B9C4208BF67 +:108AD000EC68EBE7580748D4D90605D409232B6086 +:108AE00042F04003A381E8E71A070BD52146284648 +:108AF000FFF74AF90028E0D1A389A06023F008031A +:108B0000A381A061A38943F00403A38123691BB956 +:108B100021462846FFF708FEA689B4F90C70B30772 +:108B20000FD00123A3811E4B1E49186806F00906C9 +:108B3000FFF768FC092EA78103D121462846FFF7DD +:108B40009DF82269666A6369216A22602846B047F7 +:108B5000002860601CDCB4F90C3017BF002243F021 +:108B60002003626043F04003BCE7616B0029CDD075 +:108B700004F14403994202D02846F5F751F9236CD9 +:108B8000636000206063002BC0D0E36B2360F8BDFE +:108B90000020FCE730BF010850BF010810BF0108EA +:108BA00070BF0108818A010838B5064D00230446CC +:108BB00008462B60F4F742FC431C02D12B6803B13A +:108BC000236038BD54A5022410B50C46B1F90E102F +:108BD00000F000FC0028ABBF636DA3891B1823F4D1 +:108BE0008053ACBF6365A38110BD002070472DE9A1 +:108BF000F0411F468B89DB0505460C46164605D518 +:108C0000B1F90E100223002200F0CAFBA389B4F9C7 +:108C10000E1023F48053A38132463B462846BDE81C +:108C2000F04100F04DBA10B50C46B1F90E1000F04D +:108C3000B7FB431CA38915BF606523F4805343F43D +:108C40008053A38118BFA38110BDB1F90E1000F0AD +:108C500049BA00002DE9F74F804600F0DDFA40F2F6 +:108C6000B173984540F398806FF4F66343449B10CA +:108C700040F26D12A8F2B27502FB05356FF0630287 +:108C8000A8F26D7393FBF2F31D444FF4C8736FF4B5 +:108C9000C86298FBF3F703FB17874244B7FA87FCD7 +:108CA000B2FBF3F208F0030315446422C0F8048019 +:108CB00098FBF2F64FEA5C1C02FB1686044600F1B4 +:108CC000500B00934FF0070E227A63694A2A28D18D +:108CD0000099EA1801B906B90FBB3B2BD4BF00239A +:108CE000012313445A1EA3692C4901FB0232A36AD3 +:108CF00013441A46DB17C4E908232834A345E3D1FB +:108D0000D0E90845D0E91223944275EB0303B4BFC0 +:108D1000012300230360012003B0BDE8F08F00238E +:108D2000DFE7442A01D1EA18DDE7009A72BB002E82 +:108D30000CBFE0464FF001081949E26801924FF07C +:108D4000300A0AFB08182A464FF00009A8F1040867 +:108D5000019909F10109494558F829A018DC02F1E7 +:108D6000040898FBFEF9C9EBC909A8EB0909B3EBA4 +:108D70000909236903F1FF3348BF09F10709C3EB70 +:108D8000C3034B44534505DA1A44ACE7E046D3E746 +:108D90005244DDE7073BF5E70020BDE780510100C5 +:108DA00074BF01080148FFF797BC00BF4FA502241C +:108DB0000148FFF793BC00BF4FA50224014B186880 +:108DC00000F002B83C0300242DE9F04F8DB00746B7 +:108DD00000F022FAAE49AF4E0546384600F014FACC +:108DE000044670B9AC4BAD4A1860AD4B1860AD4B42 +:108DF0003068C3E90022FFF7DFFC34600DB0BDE846 +:108E0000F08F316800295FD13068FFF7D5FC20462C +:108E100000F030FB411C3846F5F706F830600028BA +:108E200057D12378A04AA1493A2B08BF01340AAE92 +:108E30003346204600F0E0FA0028DFDD0A9BE71801 +:108E4000E35C2D2B49D101374FF0FF340DF1200A9F +:108E50000DF11E0B4FF00008CDE9016A944903960D +:108E6000CDF800B0334607AA3846ADF81E80ADF8FD +:108E7000208000F0C1FA4045C0DDBDF81E30BDF8CD +:108E80002020DFF838923C2101FB0322BDF81C3082 +:108E90004FF4616101FB03235C43AC62814C824B64 +:108EA00023600A9B81491F444A463346384600F0F6 +:108EB000A3FA404516DC23686360774BAA6A1A6000 +:108EC000774BC3F8008099E700F0C2FA00289BD1E5 +:108ED00094E7214600F0C6FAA3E72B2B08BF013721 +:108EE0000124B3E70A9BC4F80490FC18FB5C2D2B0B +:108EF00040F08B8001344FF0FF370023ADF81C3079 +:108F0000ADF81E30ADF820300A93CDE902A6CDE9C8 +:108F100000B66749334607AA204600F06DFA0028DC +:108F200078DCAF6AA7F561670A9B2F651C442F4662 +:108F30004FF0000923782C2B08BF013494F80080EF +:108F4000B8F14D0F78D10DF12603CDE9016309ABDE +:108F500000935849039633460DF12202204600F053 +:108F60004BFA03287FF44AAFBDF822104B1E0B2B9F +:108F70003FF644AFBDF82420531E042B3FF63EAF0E +:108F8000BDF82630062B3FF639AFC7E9031287F844 +:108F900008807B610A9B04EB03080223ADF81C30B8 +:108FA0000023ADF81E30ADF820300A9398F8003059 +:108FB0002F2B09D1CDE902A6CDE900B63E493346B3 +:108FC00007AA404600F018FABDF81E30BDF8202070 +:108FD0003C2101FB0322BDF81C304FF4616101FB11 +:108FE0000323BB610A9C28374444B9F1000F20D009 +:108FF0006868FFF72FFE284BAA6A1A602B6D9B1A30 +:10900000274A18BF01231360F8E62B2B08BF013451 +:10901000012772E7BDF81E30BDF820203C2101FB7E +:109020000322BDF81C304FF4616101FB03235F4351 +:109030007AE74FF001097DE7B8F14A0F06BF013426 +:10904000434644230A220BA92046059300F0AAFABE +:10905000DDF82C80059BADF82600A04514D14D23EA +:10906000B9F1000F07D12B7203210223C5E90313C5 +:10907000C5F8149091E785F830300B220123C5E93B +:109080000D230023EB6388E780B23B72786184E7AD +:10909000D4BF010838A5022440A50224D7BF010887 +:1090A0003CA50224A00300242BA50224DBBF010859 +:1090B000FEBF0108EABF0108FDBF010820A5022488 +:1090C00038B5074D04460846114600222A601A4664 +:1090D000F4F7D4FD431C02D12B6803B1236038BDE3 +:1090E00054A5022438B5064D0023044608462B60DB +:1090F000F4F71CFE431C02D12B6803B1236038BD7A +:1091000054A502240B78722B30B522D0772B24D0B3 +:10911000612B27D016230360002030BD622D12D0B2 +:10912000782D13D02B2D07D120F01C0023F0030342 +:1091300040F0100043F0020311F8015F002DEDD163 +:1091400023431360E9E743F48033F5E743F4006316 +:10915000F2E7002423460420EEE74FF4C064012325 +:109160000820E9E74FF4027401234FF48470E3E729 +:1091700038B5074D00230446084611462B60F4F726 +:10918000BFFC431C02D12B6803B1236038BD00BF74 +:1091900054A502242DE9F84F074689461646F4F7F0 +:1091A00039F9184B1C689A4634B14B46984613F867 +:1091B000011B39B13D29F9D13846F4F725F90020D2 +:1091C000BDE8F88FA8EB0908A34654F8040B002863 +:1091D000F2D04246494600F055F90028F4D154F83F +:1091E000043C03EB080513F808303D2BECD1DAF80A +:1091F0000030ABEB03039B1038463360F4F704F9FF +:10920000681CDDE70004002407B501AAFFF7C2FFD0 +:1092100003B05DF804FB000000487047A803002479 +:109220002DE9F041D0E900670C46514A0023304651 +:10923000394601F053F8394605464D4A3046002379 +:1092400001F04CF8002ABCBF02F5A83202F5C0724A +:109250004FF4616105F52F20B2FBF1F301FB1322FE +:109260004FF03C01ACBF00F66C2000F66B20A36011 +:10927000B2FBF1F301FB132263602260C31C0722DF +:1092800093FBF2F2C2EBC2029B1A48BF07330028DD +:10929000A361B8BFA0F50E333649AEBF90FBF1F124 +:1092A000A3F52C7393FBF1F1334B03FB010048F65C +:1092B000AC62B0FBF2F2024440F2B45CB0FBFCF3EF +:1092C000D21A40F26D172D4BB0FBF3F36426D31A7C +:1092D000B3FBF7F5B3FBFCF3B5FBF6F2D31A03448B +:1092E00007FB1533992003EB830C0CF1020C03F1FF +:1092F000010EBCFBF0F7784302304FF00508B0FBDD +:10930000F8F0AEEB000040F2F95EF44594BF4FF088 +:10931000020C6FF0090C67444FF4C87C0CFB015140 +:10932000012F98BF0131B3F5997F0CD3A3F5997341 +:10933000E361A1F26C710023E060C4E9047123626F +:109340002046BDE8F08115F0030F02D106FB125252 +:109350005AB94FF4C876B5FBF6F206FB1252B2FAD0 +:1093600082F252093B331344E2E70122FAE700BFDD +:1093700080510100B13A02004FC5FDFFB03A020032 +:1093800038B5064D0023044608462B60F4F707FC69 +:10939000431C02D12B6803B1236038BD54A50224BD +:1093A00038B5074D04460846114600222A601A4681 +:1093B000F4F7C4FB431C02D12B6803B1236038BD12 +:1093C00054A5022451F8043C181F002BBCBF0B58B5 +:1093D000C018704738B5074D0446084611460022AC +:1093E0002A601A46F4F7F8FB431C02D12B6803B13C +:1093F000236038BD54A502240EB410B59FB021AC33 +:109400004FF4017154F8042B0192ADF81C10049034 +:10941000089000F02FF80C4B059009900D930B4825 +:10942000019A006803940023119316934FF6FF737B +:10943000ADF81E3004A9234600F018F91FB0BDE8AE +:10944000104003B0704700BFEB8B01083C030024C1 +:1094500010F8012B11F8013B012A28BF9A42F7D0DE +:10946000D01A7047034611F8012B03F8012B002A8C +:10947000F9D17047034613F8012B002AFBD1181AC3 +:109480000138704710B56AB10139841810F8013BF2 +:1094900011F8012F934203D1A04201D0002BF5D146 +:1094A000981A10BD1046FCE72DE9F0433B4E864666 +:1094B0008C4660461CF8014BA55D15F00805F8D1F7 +:1094C0002D2C34D19CF800404FF0010800F1020C23 +:1094D000002B5ED0102B0CD1302C0AD19CF8000050 +:1094E00000F0DF0058284FD19CF8014010230CF108 +:1094F000020C4FF0FF370025B7FBF3F703FB07F92A +:109500006FEA09092846A4F13006092E18D8344616 +:10951000A34224DD002D1FDB87421DD301D1A145CD +:109520001ADB00FB034001251CF8014BEBE72B2C59 +:1095300008BF9CF80040A84608BF00F1020CC7E72E +:10954000A4F14106192E01D8373CE1E7A4F16106E8 +:10955000192E04D8573CDBE74FF0FF35E4E7002D28 +:1095600007DA2223CEF800304FF0FF3042B9BDE8D1 +:10957000F083B8F1000F00D04042002AF7D00DB1BF +:109580000CF1FF311160F2E73024002BB1D1082338 +:10959000AFE7302CA2D00A23ABE700BF11C001080F +:1095A000FFF782BF13460A46014602480068FFF7EC +:1095B0007BBF00BF3C03002438B54B1C144603D1CD +:1095C0004FF0FF35284638BD938923F0200393815F +:1095D000636B5268CDB28BB1A36B934208DD2368F5 +:1095E0005A1E226003F8015C636801336360E9E797 +:1095F000214600F0B5FB0028F1D0E1E7216923689E +:1096000051B1994208D213F8011CA94204D1013B7F +:10961000013223606260D5E7C4E90F3204F14403EC +:1096200063630323A363234603F8465F2360012398 +:10963000DCE710B50C46496B69B104F1440399426B +:1096400001D0F4F7EDFB236C63600020606313B17D +:10965000E36B236010BD2369236000236360A3894B +:1096600043F02003A3814FF0FF30F3E72DE9F04FE3 +:109670000C46ADF5237D0021CDE94411B249A091FE +:109680000DF10408B149B24FDFF8C892CDF8188146 +:109690000646A191009392F800A0BAF1000F00F0E5 +:1096A00051811AF8073013F0080302F1010519D0AF +:1096B0006368002B0FDD23681A78BA5C120701D4A7 +:1096C0002A46E8E7459A0132459262680133013A39 +:1096D00062602360ECE7A19B214630469847002852 +:1096E000E9D0EDE7BAF1250F40F083804193439331 +:1096F00053782A2B02BF1023951C41930A22AB46B4 +:109700001BF8011BA1F13003092B1DD9914803223D +:10971000FFF75EF840B10123A0EB090003FA00F067 +:10972000419B184341905D4615F8013B782B06D8C4 +:10973000572B10D8252B5CD056D8002B74D0032380 +:1097400047930A23429381E0439B02FB0313303B80 +:1097500043935D46D3E7A3F15802202AEFD801A135 +:1097600051F822F0379801083F9701083F97010808 +:10977000959801083F9701083F9701083F97010816 +:109780003F9701083F9701083F9701083F9701085D +:10979000AB98010881980108EF970108EF9701083D +:1097A000EF9701083F970108859801083F97010846 +:1097B0003F9701083F9701083F970108BB980108B0 +:1097C0008D9801082F9801083F9701083F970108DD +:1097D000B79801083F970108819801083F97010851 +:1097E0003F97010837980108453B022BA7D805236E +:1097F0002BE06368002B0DDD23681A78524540F09A +:10980000A180013362682360459B013A01336260A5 +:10981000459355E7A19B2146304698470028EBD059 +:109820004498002840F084804FF0FF3086E0419A51 +:1098300042F020024192419A42F400724192102279 +:109840006F2B429234BF0323042347936368002B9A +:1098500041DD419B590604D423681A78BA5C12078B +:1098600040D4479B022B4FDC6B46224641A9304631 +:1098700000F074F8012865D002287FF421AFCFE70B +:109880000A22DDE7002342930323DEE70823429305 +:109890000423DAE72946404600F0ACF9419B43F047 +:1098A0004003419305460123CFE7419B43F040032A +:1098B00041930023C9E70223C7E74198C3063FF558 +:1098C000FFAE009B459A191D00911B68C0074CBF55 +:1098D0001A801A60F4E6A19B21463046984700287A +:1098E000B7D09DE7459A013245926268013A002A55 +:1098F000626002DD01332360AEE7A19B2146304662 +:1099000098470028A8D08BE7042B06DC6B4622463C +:1099100041A9304600F07AF8ACE70F4B002B3FF43A +:10992000CFAE6B46224641A93046AFF30080A1E797 +:10993000A38913F0400F18BF4FF0FF300DF5237DC2 +:10994000BDE8F08F4498F9E7B9950108339601080E +:1099500011C0010811C10108000000002DE9F84301 +:1099600015468A6880460C4632B98A69002A0CBFBF +:1099700001224FF0FF328A602268DFF88C90D10616 +:109980005FBF1A68111D196016680027A06988B1A9 +:10999000012807D12B681A7863699B5C53B927BBF0 +:1099A000BDE8F883022820D12B681B7813F8093012 +:1099B0001B071AD42368DA065EBF2B681B7806F8EB +:1099C000013B2A686B6801322A60A268013B013AB8 +:1099D0006B600137A26042B1002BD7DCD4F8803134 +:1099E0002946404698470028D0D0236813F010033A +:1099F00005D1E2680132E260A26902B133702369E5 +:109A00001F4427610020CBE711C001082DE9F04F6A +:109A10009846744B0C468246164693E8070087B07A +:109A200003AB83E80700704BA169704A032918BF94 +:109A30001A46A36801925A1EB2F5AE7F88BF6FF432 +:109A4000AE75274682BF03EB050940F25D13A360A4 +:109A500057F81C3B43F4506398BF4FF00009236054 +:109A60003D464FF0000B316803AB097853F82B00EB +:109A70000222FEF7ADFE28B3BBF1010F59D1626897 +:109A80002AB92268082342F40072636022602268C7 +:109A900022F4A0622260A268511EA16092B13268D5 +:109AA000511C3160127805F8012B7268013A002AC6 +:109AB000726007DCD4F88021314650469047002878 +:109AC00040F085800BF1010BBBF1030FCBD1636834 +:109AD0000BB90A236360636845496069C91A00F0DD +:109AE00089F84FF0000BA3682268002B3DD0316845 +:109AF000606991F800C010F80C00002835D0BCF166 +:109B0000300F24D1100522D50BF1010BB9F1000F54 +:109B100003D0013309F1FF39A3607368013B002BC7 +:109B200073601BDD336801333360A368013BA360BE +:109B3000D9E7BBF1020FAED1226802F4C061B1F5E2 +:109B4000007FBFD11023636042F48072A2E722F449 +:109B5000106222600B7805F8013BDEE7D4F8803113 +:109B60003146504698470028DFD02368D9050DD5E7 +:109B7000BD4209D915F8011CD4F87C313246504653 +:109B8000984705F1FF394D46BD4228D0226812F0B2 +:109B9000100213D12A706368019E39465046B047BF +:109BA000D8F8003021681A1DC8F8002011F0200FE5 +:109BB0001B680FD01860E3680133E360ED1BAB4412 +:109BC00025695D442561002007B0BDE8F08F4FF0A6 +:109BD000000BCAE7CA074CBF18801860EBE70120EA +:109BE000F2E700BF30C10108A19501085D9D0108A1 +:109BF0002EC1010870B50B7804465E2B0BBF4B7865 +:109C0000481C881C002208BF0122611E04F1FF05C8 +:109C100001F8012FA942FBD10BB9013870BD82F0C8 +:109C20000101E154421C12F8015C2D2D02F1FF36B6 +:109C3000104606D05D2DF1D00DB93046EEE72B462B +:109C4000EFE716785D2EFAD0B342F8DC1846013003 +:109C500086422154FBDCD84330445D1CB342A8BF8C +:109C600000202B180232DEE72DE9F0473A4E8646F7 +:109C70008C4660461CF8014BA55D15F00805F8D12F +:109C80002D2C33D19CF800404FF0010800F1020C5C +:109C9000002B5CD0102B0CD1302C0AD19CF800008A +:109CA00000F0DF0058284DD19CF8014010230CF142 +:109CB000020C08F10047013F0026B7FBF3F93046DC +:109CC00003FB197AA4F13005092D18D82C46A342BC +:109CD00024DD751C07D081451DD301D1A2451ADBB7 +:109CE00000FB034001261CF8014BEBE72B2C08BFBF +:109CF0009CF80040A84608BF00F1020CC8E7A4F198 +:109D00004105192D01D8373CE1E7A4F16105192D72 +:109D100004D8573CDBE74FF0FF36E4E7731C06D16D +:109D20002223CEF80030384642B9BDE8F087B8F1BA +:109D3000000F00D04042002AF7D00EB10CF1FF31E5 +:109D40001160F2E73024002BB3D10823B1E7302CA7 +:109D5000A4D00A23ADE700BF11C00108FFF784BFFC +:109D60002DE9F0410C46496B04F1440399421DD1A1 +:109D70004FF48061F4F758F818B94FF0FF30BDE8A0 +:109D8000F0814FF48063A36394F84630606380F8F9 +:109D9000FF3394F8453080F8FE3394F8443080F86F +:109DA000FD3300F2FD3020600020E8E7A66B77006D +:109DB0003A46F4F737F805460028DED000EB0608EF +:109DC000014632464046FEF753FDC4E90D57C4F83C +:109DD0000080E9E7024B0A4601461868F4F71EB80E +:109DE0003C03002470B50E461446054618B183693D +:109DF0000BB9FEF76FF8144B9C421AD16C68636E76 +:109E0000D80705D4A389990502D4A06DFEF765FC97 +:109E100022462846314600F0A1F8636EDA0705466F +:109E200005D4A3899B0502D4A06DFEF758FC2846F3 +:109E300070BD064B9C4201D1AC68E0E7044B9C42EC +:109E400008BFEC68DBE700BF30BF010850BF010866 +:109E500010BF0108024B0A4601461868FFF7C2BF4F +:109E60003C0300242DE9F843089C8946174602FB71 +:109E700003F8054618B183690BB9FEF72BF8264B9A +:109E80009C4223D16C68636EDE0705D4A3899805D4 +:109E900002D4A06DFEF721FCA389190720D5236900 +:109EA000F3B10026464529D0A06819F806100138FC +:109EB0000028A06004DAA369984219DB0A2917D0A8 +:109EC00023685A1C226019700136EBE7134B9C4241 +:109ED00001D1AC68D7E7124B9C4208BFEC68D2E7CF +:109EE0002146284600F08CF90028DAD0002605E04B +:109EF0002246284600F032F90130E5D1636EDA07D8 +:109F000005D4A3899B0502D4A06DFEF7E8FBB6FB40 +:109F1000F7F0BDE8F88300BF30BF010850BF01086B +:109F200010BF010807B5009313460A4601460348CF +:109F30000068FFF797FF03B05DF804FB3C030024C3 +:109F400030B501390024A24201D1002005E0035DB3 +:109F500001340D5DAB42F6D0581B30BD70B50D46D7 +:109F60001446064618B183690BB9FDF7B3FF1C4BC5 +:109F70009C4224D17468636ED80705D4A3899905DF +:109F800002D4A06DFEF7A9FBA368013B002BA360E0 +:109F900005DAA26993421CDBEBB20A2B19D02368C5 +:109FA0005A1C22601D70EDB2636EDA0705D4A389D6 +:109FB0009B0502D4A06DFEF792FB284670BD094BAD +:109FC0009C4201D1B468D6E7074B9C4208BFF468B5 +:109FD000D1E729462246304600F0C0F80546E3E7BF +:109FE00030BF010850BF010810BF010870B50E4610 +:109FF000054618B183690BB9FDF76CFFAB69AC6816 +:10A0000013B92846FDF766FF2C4B9C4220D16C68A3 +:10A01000636EDB0705D4A389980502D4A06DFEF713 +:10A020005CFBA38919071DD52369DBB1013EA36839 +:10A0300016F8011F013BA36039BB002B38DA22461A +:10A040000A21284600F08AF8013011D00A2511E0D3 +:10A050001B4B9C4201D1AC68DAE71A4B9C4208BF0B +:10A06000EC68D5E72146284600F0CAF80028DDD084 +:10A070004FF0FF35636EDA0705D4A3899B0502D440 +:10A08000A06DFEF72CFB284670BD002B04DAA269F8 +:10A090009A4206DC0A2904D023685A1C22601970EF +:10A0A000C5E72246284600F059F80130BFD1DFE766 +:10A0B00023680A255A1C22601D70DBE730BF0108A7 +:10A0C00050BF010810BF0108024B01461868FFF796 +:10A0D0008DBF00BF3C030024C9B2034610F8012B1A +:10A0E0001AB18A42F9D118467047002918BF0023D7 +:10A0F000F9E770B503461E4613F8014B44B14A1EFA +:10A1000001E0A54204D012F8015F002DF9D1F2E779 +:10A11000301A70BD10B50139034632B111F8014F44 +:10A1200003F8014B013A002CF7D11A440021934265 +:10A1300000D110BD03F8011BF9E770B503461E46B8 +:10A1400013F8014B3CB14A1E01E0A542F7D012F8CA +:10A15000015F002DF9D1301A70BD0000F8B50E4630 +:10A160001446054618B183690BB9FDF7B3FE214BC0 +:10A170009C422BD16C68A369A360A3891A072FD5D1 +:10A1800023696BB323692068C01A6369F6B28342FE +:10A19000374604DC21462846FDF7F6FD30BBA368B0 +:10A1A000013BA36023685A1C22601E706369013062 +:10A1B000834204D0A389DB0706D50A2E04D12146A9 +:10A1C0002846FDF7E1FD88B93846F8BD0A4B9C42A8 +:10A1D00001D1AC68CFE7094B9C4208BFEC68CAE7E5 +:10A1E0002146284600F00CF80028CBD04FF0FF376E +:10A1F000EAE700BF30BF010850BF010810BF0108E7 +:10A20000324B70B51D6806460C4625B1AB6913B9D3 +:10A210002846FDF75FFE2E4B9C420FD16C68A38948 +:10A22000B4F90C2019072CD4DD0611D409233360AE +:10A2300042F04003A3814FF0FF303EE0254B9C42AB +:10A2400001D1AC68EBE7244B9C4208BFEC68E6E721 +:10A25000580712D5616B41B104F14403994202D011 +:10A260003046F3F7DDFD00236363A38923F0240365 +:10A27000A3810023636023692360A38943F008035B +:10A28000A38123694BB9A38903F42073B3F5007F3D +:10A2900003D021463046FEF747FAA089B4F90C20D6 +:10A2A00010F001030AD00023A36063695B42A3613D +:10A2B000236943B910F08000BAD170BD810758BF3F +:10A2C0006369A360F4E70020F7E700BF3C030024C4 +:10A2D00030BF010850BF010810BF01087BB972B937 +:10A2E0000029BEBF00204FF0004106E008BF002853 +:10A2F0001CBF6FF000414FF0FF3000F0A1B9ADF18D +:10A30000080C6DE904CE002909DB002B1ADB00F0F4 +:10A3100035F8DDF804E0DDE9022304B0704740427F +:10A3200061EB4101002B1BDB00F028F8DDF804E0B5 +:10A33000DDE9022304B0404261EB4101524263EB8C +:10A3400043037047524263EB430300F017F8DDF814 +:10A3500004E0DDE9022304B0404261EB41017047B3 +:10A36000524263EB430300F009F8DDF804E0DDE955 +:10A37000022304B0524263EB430370472DE9F047D8 +:10A38000089D04468C46002B40F083808A42174685 +:10A3900047D9B2FA82F242B1C2F1200024FA00F0A9 +:10A3A0009140974040EA010C94404FEA1748230C33 +:10A3B000BCFBF8F61FFA87FE08FB16C143EA01430F +:10A3C00006FB0EF1994209D9FB1806F1FF3080F027 +:10A3D0001981994240F21681023E3B445B1AA4B2B5 +:10A3E000B3FBF8F008FB103344EA034400FB0EFE15 +:10A3F000A64509D93C1900F1FF3380F00581A64537 +:10A4000040F2028102383C4440EA0640A4EB0E04CC +:10A4100000261DB1D4400023C5E900433146BDE804 +:10A42000F08702B9FFDEB2FA82F2002A50D1CB1BCC +:10A430004FEA174E1FFA87F80126B3FBFEFC210CEA +:10A440000EFB1C3341EA034108FB0CF38B4207D996 +:10A4500079180CF1FF3002D28B4200F2E980844679 +:10A46000C91AA3B2B1FBFEF00EFB101143EA01447E +:10A4700008FB00F8A04507D93C1900F1FF3302D2D0 +:10A48000A04500F2D9801846A4EB080440EA0C402D +:10A49000BFE78B4209D9002D00F0B1800026C5E945 +:10A4A000000130463146BDE8F087B3FA83F6002E4E +:10A4B0004AD18B4202D3824200F2B880841A61EB07 +:10A4C000030101208C46002DA8D0C5E9004CA5E76A +:10A4D000C2F1200320FA03F6974001FA02F04FEA96 +:10A4E000174ED9403043030CB1FBFEF61FFA87F834 +:10A4F0000EFB161143EA014306FB08F1994204FAE8 +:10A5000002F409D9FB1806F1FF3C80F08D809942D6 +:10A5100040F28A80023E3B445B1A81B2B3FBFEF0FC +:10A520000EFB103341EA034100FB08F38B4207D9CD +:10A53000791800F1FF3C73D28B4271D9023839444B +:10A54000CB1A40EA064678E7C6F1200C03FA06F477 +:10A5500022FA0CF31C4320FA0CF701FA06F34FEA37 +:10A56000144E21FA0CF11F433B0CB1FBFEF91FFA0C +:10A5700084F80EFB191143EA014109FB08FA8A45E8 +:10A5800002FA06F200FA06F308D9611809F1FF3061 +:10A5900048D28A4546D9A9F102092144A1EB0A0112 +:10A5A000BFB2B1FBFEF00EFB101147EA014700FB02 +:10A5B00008F8B84507D9E71900F1FF312ED2B845A0 +:10A5C0002CD90238274440EA0940A7EB0807A0FB32 +:10A5D00002894F45C64649461AD317D05DB1B3EB41 +:10A5E0000E0267EB010707FA0CFCF2404CEA02028C +:10A5F000F740C5E9002700263146BDE8F0872E4622 +:10A6000028460BE70646E9E61846FDE64345E5D24F +:10A61000B8EB020E69EB04010138DFE70846D2E728 +:10A6200060468DE78146B9E7664675E730464AE7FA +:10A63000ACF1020C394413E702383C4424E700BF74 +:10A64000704700BF53B94AB9002908BF00281CBF92 +:10A650004FF0FF314FF0FF30FFF7F2BFADF1080CC4 +:10A660006DE904CEFFF78AFEDDF804E0DDE90223A0 +:10A6700004B07047430803F05533C01A830803F051 +:10A68000333300F03330184400EB101000F00F307B +:10A6900000EB002000EB0040000E7047F8B500BF53 +:10A6A000F8BC08BC9E467047F8B500BFF8BC08BCB3 +:10A6B0009E467047436F6D6D616E6420706172617C +:10A6C0006D206572726F723A2077726F6E672061CB +:10A6D0006464726573732073697A650A00496E76E3 +:10A6E000616C696420616C74206279746573207395 +:10A6F000697A65002E2E002F006C6974746C656693 +:10A7000073006170706C69636174696F6E5F756E00 +:10A710006E616D65645F6D75746578006170706CF5 +:10A7200069636174696F6E5F756E6E616D65645F9C +:10A730007468726561640065717565756500452DA5 +:10A74000496E76616C696420726561643A20666165 +:10A750005F6964202564206F6666736574203078B5 +:10A760002578206C656E20307825780A00452D52BA +:10A77000656164206661696C65643A2066615F6941 +:10A7800064202564206F66667365742030782578B0 +:10A79000206C656E20307825780A004D4355426F55 +:10A7A0006F745F45434945535F763100452D666CB4 +:10A7B0006173685F617265615F6F70656E2C207593 +:10A7C0006E6B6E6F776E2069642025640A0070726C +:10A7D000696D617279007365636F6E64617279008F +:10A7E000452D496D61676520696E20746865202577 +:10A7F0007320736C6F74206973206E6F74207661A0 +:10A800006C6964210A00492D537761702073656378 +:10A81000746F72202564206F662025640A00572D0E +:10A820002564207374617475732077726974652070 +:10A830006661696C7320706572666F726D696E67B0 +:10A840002074686520737761700A0050696E6D61CD +:10A8500070206572726F723A2077726F6E67207027 +:10A860006F7274206E756D6265722E0053484132AE +:10A870003536005348413232340001808080808078 +:10A8800080800480808080808080088080808080BC +:10A890008080108080808080808020808080808088 +:10A8A000808040000408102040020408102040006E +:10A8B0000000000102030401020304060708090066 +:10A8C0000000000000000001010000000000000284 +:10A8D0002200000000000004230000000000000827 +:10A8E000FFFF00000000000001000200040006005D +:10A8F00008000A000C001000200040008000000149 +:10A900000000000000000000E1A90008F5A900080F +:10A91000657E00083D7E0008AF7B0008A1AD000801 +:10A92000017E0008CB7D0008AB350108C579000821 +:10A93000DF7A0008B57D00089D7D0008CF7A000809 +:10A94000C97A00084F7B0008EF7A0008337A0008C4 +:10A95000C17A000800000000000000005DD000087F +:10A96000000000000000000061A0000895A00008A1 +:10A97000756E0008396E000853B50008C3B30008AF +:10A98000DBB100088BB200087D9E00086F720008E2 +:10A99000F59F0008AB0C0008C7AF000861AD0008C8 +:10A9A000439900087DAB000857AB0008A10C0008D4 +:10A9B00049A4000855720008B10C00083B72000859 +:10A9C0000DA9000811AF0008B37B0008EBA5000833 +:10A9D000A5A500082172000885A50008B56E00082D +:10A9E00079AA000835AA0008B1A00008FCFFFFFF03 +:10A9F000000000008DA00008A7A0000800000000D3 +:10AA00000000000000000000000000005DD0000811 +:10AA1000A50C0008AB0C0008A50C0008A50C00084C +:10AA2000C30C0008A50C0008FCFFFFFF000000009D +:10AA30000000000000000000000000000000000016 +:10AA400000000000000000005DD00008A50C000818 +:10AA5000AB0C0008A50C0008A50C0008C30C0008EE +:10AA6000A50C0008000000000000000045270008B9 +:10AA700089270008756E0008396E00084921000812 +:10AA8000F9210008C11F000879200008551F00089F +:10AA9000E5250008AD25000885230008936F000810 +:10AAA000C11E00081D1F0008051E0008931E000897 +:10AAB000A10C00083D1E0008DD0F0008B10C0008C5 +:10AAC000AD0F0008672F0008076F00084510000849 +:10AAD000F51C00088F1C00088D0F0008551C00088D +:10AAE000B56E0008FCFFFFFF000000008127000892 +:10AAF0009B27000800000000000000006D0E000809 +:10AB000033100008250F0008170E0008010E00087A +:10AB1000F50D0008E90D0008DD0D0008490E0008DC +:10AB20000000000000000000B10D00082110000826 +:10AB3000470D0008310D0008030D00085D0D0008E9 +:10AB4000250D0008190D0008F70C0008EB0C000893 +:10AB5000DF0C0008C90C00087FCD00087BCD000881 +:10AB600077CB000877CB00087DCB00086FCD0008BD +:10AB70008F0D00080000000000000000D9D600087A +:10AB80000000000000000000850E00080F10000803 +:10AB9000250F0008330E0008010E0008F50D00080F +:10ABA000E90D0008DD0D0008490E00080000000056 +:10ABB00000000000C90D0008FD0F0008470D000847 +:10ABC000310D0008030D0008790D0008250D00085F +:10ABD000190D0008F70C0008EB0C0008DF0C00084A +:10ABE000C90C00087FCD00087BCD000877CB00089A +:10ABF00077CB00087DCB00086FCD00088F0D0008D3 +:10AC000000000000000000006D1F0108FD1F01088A +:10AC1000000000000000000075B70008F9B7000848 +:10AC200077C295F360D2EF7F3552500F2CB6798002 +:10AC30002A8648CE3D0201002A8648CE3D02010008 +:10AC40002A8648CE3D030107002A8648CE3D0301EF +:10AC50000700000040420F0020000000010000003B +:10AC600002000000040000000800000010000000C6 +:10AC700020000000400000008000000000010000F3 +:10AC800000020000000400000008000000100000A6 +:10AC90000020000000400000008000006CA80108B7 +:10ACA00006204000ACAC0108F00A02244508000868 +:10ACB00039080008E9070008D90700081D0800083E +:10ACC000FD070008D1CB0008910800080000000033 +:10ACD000515350494600464C415348494150004663 +:10ACE00041543332202020002A2B2C3A3B3C3D3E5D +:10ACF0005B5D7C223F7F0053464450000000000013 +:10AD0000FBFFFBFEECEAF3EFF7F3EDEDEAFB8CF073 +:10AD1000F4E9EA809A45418E418F8045454549498D +:10AD2000498E8F9092924F994F555559999A9B9C65 +:10AD30009D9E9F41494F55A5A5A6A7A8A9AAABAC22 +:10AD4000ADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBB +:10AD5000BDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCAB +:10AD6000CDCECFD0D1D2D3D4D5D6D7D8D9DADBDC9B +:10AD7000DDDEDFE0E1E2E3E4E5E6E7E8E9EAEBEC8B +:10AD8000EDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFC7B +:10AD9000FDFEFF00000000006410B71DC8206E3BE0 +:10ADA000AC30D9269041DC76F4516B6B5861B24DD2 +:10ADB0003C7105502083B8ED44930FF0E8A3D6D63C +:10ADC0008CB361CBB0C2649BD4D2D38678E20AA0A4 +:10ADD0001CF2BDBD3031323334353637383961621B +:10ADE0006364656630313233343536373839414241 +:10ADF00043444546000000000D0064656661756CC3 +:10AE000074005254582056352E352E33000102045A +:10AE1000982F8A4291443771CFFBC0B5A5DBB5E9C5 +:10AE20005BC25639F111F159A4823F92D55E1CAB39 +:10AE300098AA07D8015B8312BE853124C37D0C55C7 +:10AE4000745DBE72FEB1DE80A706DC9B74F19BC10F +:10AE5000C1699BE48647BEEFC69DC10FCCA10C24FF +:10AE60006F2CE92DAA84744ADCA9B05CDA88F976E3 +:10AE700052513E986DC631A8C82703B0C77F59BF4D +:10AE8000F30BE0C64791A7D55163CA066729291479 +:10AE9000850AB72738211B2EFC6D2C4D130D385316 +:10AEA00054730A65BB0A6A762EC9C281852C7292D8 +:10AEB000A1E8BFA24B661AA8708B4BC2A3516CC706 +:10AEC00019E892D1240699D685350EF470A06A103F +:10AED00016C1A419086C371E4C774827B5BCB0348E +:10AEE000B30C1C394AAAD84E4FCA9C5BF36F2E682C +:10AEF000EE828F746F63A5781478C8840802C78CBB +:10AF0000FAFFBE90EB6C50A4F7A3F9BEF27871C6BD +:10AF10002900000000500052D22700003B00000032 +:10AF200000500052D227000058000000005000528C +:10AF3000D22B0000FFFF0000FFFFFFFF000000001A +:10AF40002A00000000500052D22700003C00000000 +:10AF500000500052D227000059000000005000525B +:10AF6000D22B0000FFFF0000FFFFFFFF00000000EA +:10AF70004200000000500052D2270000570000009D +:10AF800000500052D2270000FFFF0000FFFFFFFF2C +:10AF9000000000000100000000500052D227000015 +:10AFA0003D00000000500052D22700005600000073 +:10AFB00000500052D2270000FFFF0000FFFFFFFFFC +:10AFC000000000001200000000500052D2270000D4 +:10AFD0005A00000000500052D2270000FFFF00007E +:10AFE000FFFFFFFF000000001600000000500052AD +:10AFF000D22B00001A00000000500052D22700009F +:10B000006600000000500052D22B0000FFFF00003D +:10B01000FFFFFFFF0000000001000000004C0040A7 +:10B02000D22300000300000000440040D21F0000B3 +:10B030000800000000780040D22F00000A00000045 +:10B0400000100140D21F00000A010000000C00584F +:10B05000D20F00000B000000004C0040D21B00008B +:10B060001300000000780040D22F000015000000FF +:10B0700000500040D23B00001700000000100140CB +:10B08000D21F000017010000000C0058D22300005E +:10B0900018000000004C0040D22300001B000000FC +:10B0A00000480040D21F00001C000000005000407B +:10B0B000D23B00001F00000000100140D21300002E +:10B0C0002700000000140140D21F00002B000000E8 +:10B0D00000480040D21F00002B010000004C00403F +:10B0E000D223000030000000004C0040D2230000BA +:10B0F0003200000000500040D22300003600000063 +:10B1000000440040D21F0000390000000048004009 +:10B11000D21F000040000000007C0040D22300004D +:10B120004700000000780040D21F000056000000D9 +:10B1300000780040D21F00006900000000140140A8 +:10B14000D21F00007E000000004C0040D22300000F +:10B1500089000000004C0040D2230000990000004C +:10B16000007C0040D2230000FFFF0000FFFFFFFF34 +:10B170000000000000000000004C0040D22300004E +:10B180000200000000440040D21F0000090000003F +:10B1900000100140D21F000009010000000C0058FF +:10B1A000D20F00000C000000004C0040D21B000039 +:10B1B0000F00000000780040D22F000014000000B3 +:10B1C00000780040D22F000016000000001001405F +:10B1D000D21F00001601000000500040D23B0000CA +:10B1E00016020000000C0058D223000019000000D5 +:10B1F000004C0040D22300001A000000004800402C +:10B20000D21F00001D00000000500040D23B000093 +:10B210001E00000000100140D213000026000000B4 +:10B2200000140140D21F00002A0000000048004026 +:10B23000D21F00002A010000004C0040D223000071 +:10B240002C00000000500040D2230000310000001C +:10B25000004C0040D22300003500000000440040B4 +:10B26000D21F00003800000000480040D21F00003C +:10B2700041000000007C0040D22300004800000094 +:10B2800000780040D21F0000570000000078004006 +:10B29000D21F00006E00000000140140D21F000009 +:10B2A0007D000000004C0040D22300009800000008 +:10B2B000007C0040D2230000FFFF0000FFFFFFFFE3 +:10B2C0000000000000000000000000002DCB00087E +:10B2D000E5CF00089DD0000831CB00086BCB0008FB +:10B2E000AF7B0008AF7B000861CB00089BCD000856 +:10B2F00091CD000865CB00088BCD00087FCD0008FC +:10B300007BCD000877CB000877CB000865D000081C +:10B310006FCD00080000000000000000A12001081F +:10B32000512101082520010811200108000000001A +:10B330000000000011D10008000000000000000023 +:10B3400075D600082F737464657272002F7374646D +:10B35000696E002F7374646F757400004B60D227A0 +:10B360003E3CCE3BF6B053CCB0061D65BC8698760D +:10B3700055BDEBB3E7933AAAD835C65A96C298D8CA +:10B380004539A1F4A033EB2D817D0377F240A4630E +:10B39000E5E6BCF847422CE1F2D1176BF551BF3717 +:10B3A0006840B6CBCE5E316B5733CE2B169E0F7CEA +:10B3B0004AEBE78E9B7F1AFEE242E34F512563FC86 +:10B3C000C2CAB9F3849E17A7ADFAE6BCFFFFFFFF20 +:10B3D000FFFFFFFF00000000FFFFFFFFFFFFFFFF79 +:10B3E000FFFFFFFFFFFFFFFF000000000000000065 +:10B3F0000000000001000000FFFFFFFF46494C4530 +:10B4000042440044465520496E7465726661636526 +:10B410000044465520436F6E66696700417264754B +:10B42000696E6F205341004769676100452D525492 +:10B4300043536574424B505265676973746572007B +:10B44000452D525443476574424B505265676973AA +:10B4500074657200452D526561643A696E76616C5F +:10B4600069642068616E646C6500452D5265616495 +:10B470003A667365656B00452D526561643A686193 +:10B480006E646C6520256420636F756E742030785F +:10B49000257A780A00452D45726173653A696E76A2 +:10B4A000616C69642068616E646C6500452D45724D +:10B4B0006173653A667365656B00452D457261730E +:10B4C000653A68616E646C6520256420636F756EF3 +:10B4D00074203078257A780A00452D4572617365AD +:10B4E0003A666C75736800452D50726F6772616DB6 +:10B4F0003A696E76616C69642068616E646C65009F +:10B50000452D50726F6772616D3A667365656B00A9 +:10B51000452D50726F6772616D3A68616E646C653B +:10B5200020256420636F756E74203078257A780A40 +:10B5300000452D50726F6772616D3A666C75736865 +:10B5400000452D43616E6E6F74206F70656E2066CE +:10B55000696C6520626C6F636B20646576696365F6 +:10B560002025732025730A00452D496E69743A66BB +:10B570007365656B00572D46696C652025732073D4 +:10B58000697A6520283078257A78292073686F7564 +:10B590006C64206265207468652073616D65206F3E +:10B5A0006620756E6465726C79696E6720626C6F77 +:10B5B000636B2064657669636520283078257A7826 +:10B5C000290A00536574537973436C6F636B20666B +:10B5D00061696C65640A006D61696E00404D435598 +:10B5E000626F6F742020202020202020762E2530AE +:10B5F00032642020202F30783030303030303030FE +:10B600002F302A344B67004041726475696E6F2099 +:10B6100020626F6F742020762E2530326420202027 +:10B620002F307830303030303030302F302A344BBB +:10B630006700404578742046696C6520466C6173EC +:10B64000682020304D422020202F3078303030309C +:10B65000303030302F302A344B6700676F6F640012 +:10B66000756E73657400626164004255473B2063E8 +:10B67000616E27742068617070656E007265766512 +:10B6800072740074657374007065726D00492D5397 +:10B6900074617274696E672041726475696E6F209F +:10B6A000626F6F746C6F6164657200492D536563DE +:10B6B000757265206B657973206E6F7420636F6E91 +:10B6C0006669677572656400492D537461727420F0 +:10B6D0004F54412030782558203078255820307834 +:10B6E00025580A00452D20205344204E4F54205306 +:10B6F0005550504F52544544007262002F66732FCC +:10B700005550444154452E42494E00492D536B65D6 +:10B71000746368207570646174656400492D426FBC +:10B720006F74696E6720736B657463682061742041 +:10B73000307825780A0A00492D4E6F20736B6574A6 +:10B74000636820666F756E6400492D53746172746E +:10B75000696E67204D4355626F6F7400572D4661C7 +:10B76000696C65642072656164696E6720736563E6 +:10B77000746F72733B20424F4F545F4D41585F4985 +:10B780004D475F534543544F52533D2564202D2070 +:10B79000746F6F20736D616C6C3F0A00572D4661AA +:10B7A000696C65642072656164696E6720696D61AA +:10B7B000676520686561646572733B20496D6167E8 +:10B7C000653D25750A00572D43616E6E6F742075B7 +:10B7D0007067726164653A206D6F7265207365638E +:10B7E000746F7273207468616E20616C6C6F776522 +:10B7F0006400572D43616E6E6F74207570677261BF +:10B8000064653A20736C6F74732068617665206E8E +:10B810006F6E2D636F6D70617469626C6520736506 +:10B8200063746F727300572D43616E6E6F74207571 +:10B830007067726164653A206E6F7420616C6C2071 +:10B84000736563746F72732066697420696E7369BF +:10B850006465207363726174636800572D43616E81 +:10B860006E6F7420757067726164653A20736C6FD7 +:10B87000747320617265206E6F7420636F6D7061E8 +:10B880007469626C65005072696D61727920696DCE +:10B8900061676500492D25733A206D616769633DD5 +:10B8A00025732C20737761705F747970653D3078F3 +:10B8B00025782C20636F70795F646F6E653D3078FA +:10B8C00025782C20696D6167655F6F6B3D30782549 +:10B8D000780A005363726174636800492D426F6F88 +:10B8E0007420736F757263653A2025730A00492DC1 +:10B8F000426F6F7420736F757263653A206E6F6E5E +:10B900006500452D446574656374656420696E63E4 +:10B910006F6E73697374656E74207374617475737C +:10B920002100572D4661696C656420726561646908 +:10B930006E6720626F6F74207374617475733B203F +:10B94000496D6167653D25750A00452D70616E6919 +:10B95000632100492D5365636F6E646172792069BC +:10B960006D616765206F6620696D61676520706134 +:10B970006972202825642E2920697320756E7265EE +:10B9800061636861626C652E205472656174206920 +:10B990007420617320656D7074790A00492D5377A6 +:10B9A000617020747970653A2025730A00492D531F +:10B9B00077617020747970653A206E6F6E6500490A +:10B9C0002D496D61676520757067726164652073CC +:10B9D00065636F6E6461727920736C6F74202D3EA5 +:10B9E000207072696D61727920736C6F7400492DDB +:10B9F00045726173696E6720746865207072696D45 +:10BA000061727920736C6F7400492D436F7079698E +:10BA10006E6720746865207365636F6E6461727908 +:10BA200020736C6F7420746F207468652070726965 +:10BA30006D61727920736C6F743A203078257A7852 +:10BA40002062797465730A00452D4661696C6564EE +:10BA500020746F206C6F63617465206669726D7706 +:10BA600061726520696D6167652C206572726F7205 +:10BA70003A2025640A0A00492D426F6F74696E6787 +:10BA8000206669726D7761726520696D61676520F6 +:10BA9000617420307825780A0A0073696E676C65D6 +:10BAA000746F6E5F6D75746578006D616C6C6F633B +:10BAB0005F6D7574657800656E765F6D7574657819 +:10BAC00000492D437573746F6D204F54412064619C +:10BAD000746100492D5365636F6E64617279205BF8 +:10BAE00025645D205B25645D0A00492D5363726106 +:10BAF000746368205B25645D205B25645D0A0049F2 +:10BB00002D44656661756C74204F544120646174E6 +:10BB10006100452D55206F6E2049415000452D5341 +:10BB2000444D4D4300452D436F6E66696700452DBA +:10BB300042442055215300452D4D4252205521535A +:10BB400000452D496E697400452D4D6F756E74006A +:10BB50002F66732F7570646174652E62696E007252 +:10BB6000622B002F66732F736372617463682E6299 +:10BB7000696E00452D5520636F6E66696700452D1F +:10BB800053206F6E2049415000452D5320636F6E46 +:10BB900066696700452D496E69742055204D4252F3 +:10BBA00000452D496E69742053204D425200736543 +:10BBB0006300452D4D6F756E742055206F6E204CBF +:10BBC0004F47002F7365632F7570646174652E6233 +:10BBD000696E0073637200452D4D6F756E7420534E +:10BBE000206F6E204C4F47002F7363722F73637268 +:10BBF000617463682E62696E007274785F74696D37 +:10BC00006572007274785F69646C650040496E7497 +:10BC100065726E616C20466C6173682020324D4203 +:10BC20002020202F307830383030303030302F30F6 +:10BC3000312A3132384B612C31352A3132384B6759 +:10BC40000040457874205241572020466C6173684B +:10BC50002031364D422020202F307839303030309E +:10BC60003030302F343039362A344B670000000032 +:10BC70009ABA01080B000000FCA402241C0000007A +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB000000000000000000001000000E803000098 +:10BCC000050000006843022410000000000000008E +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000010000023 +:10BD1000B0BE0108ECBE010895460108F13B0108E0 +:10BD2000D4BE010804000000000000000000000074 +:10BD3000954E0108B94E01083DBF0008A9BA000898 +:10BD4000AF7B000871BB00080DBE000819BC0008DD +:10BD5000AB350108C5790008C5790008BD79000830 +:10BD600043790008397900083D7900084F7B0008C5 +:10BD7000EF7A0008CB790008B579000800000000D0 +:10BD800000000000DFA90008FD7B000835B60008B0 +:10BD90009D7C0008C7780008737800081F780008A9 +:10BDA000D9770008AB350108C5770008B1770008DE +:10BDB0009D77000875770008617700085B770008B9 +:10BDC0004F7B0008EF7A0008CB7900082F77000836 +:10BDD00055770008437700083F7700083B77000855 +:10BDE0000000000000000000A93501086D450108B1 +:10BDF000FD440108F1440108A5350108553D01083D +:10BE00009144010801440108AB350108813501085E +:10BE10007B350108753501086F350108397900084F +:10BE2000693501088735010887350108873501081C +:10BE3000613501080000000000000000DDA90008D5 +:10BE4000F17B0008C1760008B9760008B1760008D9 +:10BE5000677600081D760008DD750008AB3501081F +:10BE6000EB740008E3740008CD740008B374000894 +:10BE7000AB740008997400088F75000841750008BC +:10BE8000F374000891740008010501000105030224 +:10BE90000401040103040302040104030402040175 +:10BEA0000401040301030304010400000000000076 +:10BEB00003BC010800000000B44402244400000058 +:10BEC000F84402240003000001000000010000000B +:10BED000000000000000000000000000A843022451 +:10BEE00034000000DC43022450000000F9BB0108CC +:10BEF000000000007044022444000000F8470224BF +:10BF00000003000028000000010000000000000005 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF7000400300241F0000001C0000001F00000000 +:10BF80001E0000001F0000001E0000001F00000037 +:10BF90001F0000001E0000001F0000001E00000027 +:10BFA0001F0000001F0000001D0000001F00000017 +:10BFB0001E0000001F0000001E0000001F00000007 +:10BFC0001F0000001E0000001F0000001E000000F7 +:10BFD0001F000000545A00474D54002531305B5E6D +:10BFE000302D392C2B2D5D256E004D256875256E65 +:10BFF0002E256875256E2E256875256E002F2568FF +:10C0000075256E3A256875256E3A256875256E008A +:10C010000020202020202020202028282828282018 +:10C020002020202020202020202020202020202010 +:10C030002088101010101010101010101010101078 +:10C040001004040404040404040404101010101068 +:10C050001010414141414141010101010101010132 +:10C060000101010101010101010101011010101084 +:10C070001010424242424242020202020202020204 +:10C080000202020202020202020202021010101058 +:10C090002000000000000000000000000000000080 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C1100000686C4C002B2D00303000785800412D09 +:10C1200046612D66383930313233343536375D006B +:10C1300015C1010818C101081BC101080000000059 +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C4800000000000000000000000000000000000AC +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:0BF00000A0190202000108100001101E +:08F00C003415FE7F0100000035 +:10F01400A80600240000000000000000FFFFFFFF1E +:10F02400FFFFFFFFFFFFFFFF0000000000000000E4 +:10F0340000000000000000000000000000000000CC +:10F0440000000000000000000000000000000000BC +:10F0540000000000000000000000000000000000AC +:10F06400000000000000000000000000000000009C +:10F07400000000000000000000000000000000008C +:10F08400000000000000000000000000000000007C +:10F09400000000000000000000000000000000006C +:10F0A400000000000000000000000000000000005C +:10F0B400000000000000000000000000000000004C +:10F0C400000000000000000000000000000000003C +:10F0D400000000000000000000000000000000002C +:10F0E400000000000000000000000000000000001C +:10F0F400000000000000000000000000000000000C +:10F1040000000000000000000000000000000000FB +:10F1140000000000000000000000000058A50224C8 +:10F124008D8801080100000002AE0108D3B3FB0280 +:10F1340000000000000000000000000000000000CB +:10F1440000000000000000000000000000000000BB +:10F1540000000000000000000000000000000000AB +:10F16400000000000000000000000000000000009B +:10F17400000000000000000000000000000000008B +:10F18400000000000000000000000000000000007B +:10F19400000000000000000000000000000000006B +:10F1A400000000000000000000000000000000005B +:10F1B400000000000000000000000000000000004B +:10F1C400000000000000000000000000AD3601084F +:10F1D400A1360108213701083937010861360108D1 +:10F1E40009370108F1360108404578742046696CF6 +:10F1F4006520466C6173682031364D422020202FF3 +:10F20400307841303030303030302F343039362A95 +:10F21400344B670000000000013D01089D450108D2 +:10F2240029400108513E0108BD370108AD370108E6 +:10F23400B1370108C1370108B9370108B5370108EA +:10F24400C5370108C5370108C5370108A1370108CA +:10F254007D3701080CBC010841BC0108D801002419 +:10F2640094270224914D0108D9450108B53D0108B0 +:10F27400194A0108E1350108D535010812010002D7 +:10F284000000004041236603000201020301000064 +:10F294000403090432030000000000000000000021 +:10F2A400000000000000000000000000000000005A +:10F2B400000000000000000000000000000000004A +:10F2C400000000000000000009027800030102C0F1 +:10F2D400FA0904000000FE0102060904000100FE10 +:10F2E4000102070904000200FE01020809040003E8 +:10F2F40000FE01020909210BFF0000101A01080B8E +:10F3040001020202010009040100010202010005D8 +:10F31400240010010524010002042402020524062D +:10F3240001020705830308000909040200020A0018 +:10F3340000000705020240000007058202400000A9 +:10F344000A060002000000400100011440030024EA +:10F354000000000030BF010850BF010810BF0108C1 +:10F364000000000000000000000000000000000099 +:10F374000000000000000000000000000000000089 +:10F384000000000000000000000000000000000079 +:10F394000000000000000000000000000000000069 +:10F3A4000000000000000000000000000000000059 +:10F3B400D7BF0108D7BF010801000000000000000A +:10F3C4004A000000000000000000000000000000EF +:10F3D4000000000000000000000000000000000029 +:10F3E40000000000000000004A00000000000000CF +:10F3F4000000000000000000000000000000000009 +:10F4040000000000000000000000000000000000F8 +:10F4140044A502240000000025050008A5270008D3 +:08F424000105000800000000D2 +:040000050800067D6C +:00000001FF diff --git a/bootloaders/NICLA_VISION/bootloader.hex b/bootloaders/NICLA_VISION/bootloader.hex new file mode 100644 index 000000000..e5908250a --- /dev/null +++ b/bootloaders/NICLA_VISION/bootloader.hex @@ -0,0 +1,8008 @@ +:020000040800F2 +:10000000000008241573010861730108D565000814 +:10001000DB650008E1650008E765000800000000F6 +:10002000000000000000000000000000AD250008F6 +:1000300061730108000000004726000857260008E9 +:10004000617301086173010861730108617301083C +:10005000617301086173010861730108617301082C +:10006000617301086173010861730108617301081C +:10007000617301086173010861730108617301080C +:1000800061730108617301086173010861730108FC +:1000900061730108617301086173010861730108EC +:1000A00061730108617301086173010861730108DC +:1000B00061730108617301086173010861730108CC +:1000C00061730108617301086173010861730108BC +:1000D00061730108617301086173010861730108AC +:1000E0006173010861730108000000006173010879 +:1000F000617301086173010861730108617301088C +:10010000617301086173010861730108617301087B +:10011000617301086173010861730108617301086B +:10012000617301086173010861730108617301085B +:10013000617301086173010861730108617301084B +:1001400061730108617301080000000000000000F5 +:10015000617301086173010861730108617301082B +:10016000617301086173010861730108617301081B +:1001700061730108617301086173010800000000E8 +:1001800061730108617301086173010861730108FB +:1001900061730108617301086173010861730108EB +:1001A00061730108617301086173010861730108DB +:1001B00061730108617301086173010861730108CB +:1001C00061730108617301086173010861730108BB +:1001D00061730108617301086173010861730108AB +:1001E000617301086173010861730108617301089B +:1001F000617301086173010861730108617301088B +:10020000617301086173010861730108617301087A +:10021000617301086173010861730108617301086A +:10022000617301086173010861730108617301085A +:100230005505000811730108617301086173010815 +:10024000617301086173010861730108617301083A +:10025000617301086173010861730108617301082A +:10026000617301086173010861730108617301081A +:10027000617301086173010861730108617301080A +:1002800061730108617301086173010800000000D7 +:10029000617301086173010810B5054C237833B907 +:1002A000044B13B10448AFF300800123237010BD49 +:1002B0002004002400000000F4DD010808B5034B11 +:1002C0001BB103490348AFF3008008BD00000000E4 +:1002D00024040024F4DD0108154B002B08BF134B48 +:1002E0009D46A3F5803A00218B460F461348144AD9 +:1002F000121A1AF039FA0F4B002B00D098470E4B08 +:10030000002B00D098470020002104000D000D486C +:10031000002802D00C4806F0ADFE1AF00FF82000BD +:10032000290004F093F907F061F800BF000008000D +:100330000000082400000000A94500082004002453 +:10034000483F0024757000080000000007B50093C6 +:1003500013460A460146044814F054FA003818BF00 +:10036000012003B05DF804FB1422002407B50093BC +:1003700013460A460146044814F026FB003818BF0D +:10038000012003B05DF804FB142200240A46014654 +:10039000034808B514F0ECFB003818BF012008BD75 +:1003A00014220024F0B5304C8BB008270126D4F875 +:1003B000E0300022032505A943F040032B48C4F890 +:1003C000E030D4F8E03003F040030193019BCDE925 +:1003D0000725CDE9057610F0F7F8002239462348C5 +:1003E00010F0D8F9D4F8DC3005A9214843F40073A3 +:1003F000C4F8DC30D4F8DC3003F400730293029BC1 +:10040000D4F8E03043F00203C4F8E030D4F8E03030 +:1004100003F002030393039BD4F8E0303B43C4F89A +:10042000E030D4F8E03008953B400493049B02236D +:10043000CDE90636092309934CF21803059310F011 +:10044000C3F8C02305A90B4805930B23099310F0AB +:10045000BBF8002205217C200FF0A8FD7C200FF0C6 +:10046000D7FD0BB0F0BD00BF004402580018025881 +:1004700000040258000C025808B57C200FF0D6FD8D +:10048000034AD2F8DC3023F40073C2F8DC3008BD34 +:100490000044025837B5124B0025124C2946236000 +:1004A00004232046256163614FF48043C4E901556C +:1004B000E360FFF777FF01238DF807309DF80730E1 +:1004C000012B06D020462946FFF7D6FF022003B0B5 +:1004D00030BD204614F01AFF003818BF0120F6E79F +:1004E000002402481422002470B5084C084E20460F +:1004F000266014F073F90546002120462660FFF7B8 +:10050000BBFF281E18BF012070BD00BF14220024AD +:1005100000240248014814F051BF00BF14220024F7 +:1005200008B5034814F0DEFE043818BF012008BDEA +:10053000142200240146014814F0F8BD14220024BE +:10054000704708B5FFF7FCFF08BD704708B5FFF717 +:10055000FCFF08BDFFF7DEBF00207047002070479A +:100560000368DB6A18474FF0FF307047D0E902019B +:100570007047D0E904017047D0E906017047D0E91F +:100580000931C26A006A424301FB0323A0FB010157 +:100590001944704700487047F8C201085C3007F002 +:1005A00055BB5C3007F06EBB38B503680546DB6CA5 +:1005B0009847FFF799FF044685F8540038B92B682F +:1005C00085F8800028461B6D9847204638BD0148B5 +:1005D000FCE700BF78ECFFFF074B10B50360044653 +:1005E00090F880300BB1FFF7DFFF04F15C0007F0FB +:1005F00061FB204610BD00BF08C3010810B50446CA +:10060000FFF7EAFF8821204606F02AFF204610BDAA +:100610002DE9F74FDDE90CAB0D460168044617469E +:100620001E46CDE900ABC96B8847002831D023684E +:100630002046DB6C984794F8803043B92368204605 +:10064000154D1B6D9847284603B0BDE8F08FD4E9DF +:1006500008895046594642464B461BF0B1FC82463B +:1006600042464B46384631461BF0AAFCA36D014674 +:1006700052462846094DFFF769FE002808BF0025AD +:10068000FFF74EFF0028FBD1236820461B6D9847DB +:10069000D9E7034DD7E700BF74ECFFFF6DECFFFF18 +:1006A00075ECFFFF2DE9F74FDDE90CAB0D46016856 +:1006B000044617461E46CDE900AB096C8847002862 +:1006C00031D023682046DB6C984794F8803043B9DA +:1006D00023682046154D1B6D9847284603B0BDE89A +:1006E000F08FD4E908895046594642464B461BF0E4 +:1006F00067FC824642464B46384631461BF060FC5A +:10070000A36D014652462846094DFFF72FFE0028EB +:1007100008BF0025FFF704FF0028FBD1236820460F +:100720001B6D9847D9E7034DD7E700BF74ECFFFF77 +:100730006CECFFFF75ECFFFFF0B585B00168044677 +:1007400016460A9D0B9F00950197496C884770B328 +:1007500023682046DB6C984794F880303BB92368C7 +:100760002046144D1B6D9847284605B0F0BDD4E9CE +:1007700008230021A81A3044CDE902321BF020FCE6 +:10078000054600213046DDE902321BF019FC2946FE +:10079000FFF7FCFD0028084D08BF0025FFF7C0FE4D +:1007A0000028FBD1236820461B6D9847DCE7034DEA +:1007B000DAE700BF74ECFFFF6EECFFFF75ECFFFFA4 +:1007C0002DE9F0471E460368154604465B6ADDE9DD +:1007D000087A984702460B46284631461BF0F0FB44 +:1007E000134302D00020BDE8F087236820465B6AEF +:1007F000984702460B46384651461BF0E1FB13432F +:10080000F0D115EB07082368204646EB0A099B6BDD +:100810009847494508BF40452CBF01200020E2E72A +:1008200001682DE9F04717469846096B0646DDE951 +:10083000089A884702460B46384641461BF0C0FBE3 +:10084000134302D00020BDE8F08717EB090433689A +:10085000304648EB0A0514F1FF32196B45F1FF33BE +:10086000884702460B46204629461BF0A9FB134346 +:10087000E8D1336830469B6B9847A94208BFA04235 +:100880002CBF01200020DEE738B503680446DB6C8E +:100890009847FFF7FFFD054684F8540050B12368E0 +:1008A000022D20461B6D02D19847104838BD98474D +:1008B0000F48FBE704F13000FFF73CFE236B2046B6 +:1008C0002371636CC4E90235C4E90435C4E9063513 +:1008D000C4E90835236CC4E90A35012384F8803063 +:1008E00023681B6D98472846E0E700BF73ECFFFFC5 +:1008F00074ECFFFF2DE9F0471E46036815460446D9 +:100900009B6ADDE9087A984702460B46284631463D +:100910001BF056FB134302D00020BDE8F08723688C +:1009200020469B6A984702460B46384651461BF0C4 +:1009300047FB1343F0D115EB07082368204646EB2D +:100940000A099B6B9847494508BF40452CBF0120C9 +:100950000020E2E70D4B4FF4007210B50360002356 +:1009600004465C3040E9152340E9132340E9112394 +:1009700040E90F230022002340E90D2307F05EF930 +:100980004FF47A732046A36510BD00BF08C3010869 +:100990006F23038000487047400000240020704708 +:1009A000002070470A23038000487047B0000024ED +:1009B000BFF34F8F0549064BCA6802F4E062134348 +:1009C000CB60BFF34F8F00BFFDE700BF00ED00E03D +:1009D0000400FA05F0B541F21802D0F8B84289B027 +:1009E0000746A35C042B6BD104F5805641F2040347 +:1009F0003168002955D12278AAB9E358012B41D199 +:100A0000002541F2040341F21802E550032335604A +:100A1000A35441F21102A55441F21202A55241F22F +:100A20001402A3542BE0212A10D1E358052B29D11D +:100A3000E378A2781B0403EB022362781344227943 +:100A400003EB026341F20802A350D9E7412A19D10E +:100A5000E358052B16D1E378A0781B0403EB0023A1 +:100A600060780344207903EB006041F20803E05012 +:100A7000D7F8BC325B6998470028C1D002252846C8 +:100A800009B0F0BD002341F2040204A93846A35086 +:100A900033608DF810300123ADF8163000F0F2FD10 +:100AA000AEE70129ACD941F208020239A058D7F8C3 +:100AB000BC2200EB013120469569E258A847DBE7EC +:100AC000072B4FF0000313D141F219016354184969 +:100AD00091F8265041F2110115F004050AD00620C4 +:100AE000A05441F212026354A35241F21402A054E2 +:100AF0001D46C4E70823A35441F212026554A552CF +:100B000041F21402A354D0F8BC321B699847094B38 +:100B1000094A00210948079206950092CDE9043759 +:100B200004ABCDE9020106480ECB04F060FCA6E759 +:100B300040000024B10900089D0F0008400D03008B +:100B40004004002438B5D0F8B832002541F218012D +:100B5000044603F58052156041F204029D500222C2 +:100B60005A5441F210015D5441F214015A54D0F824 +:100B7000B80218B119F080FDC4F8B852002038BD91 +:100B800038B5044641F21C0019F06EFDC4F8B802F5 +:100B9000E0B1022241F2180300F580510C4DC2521F +:100BA00000230B6041F20401435041F2080145501B +:100BB00041F20C01435041F21001435041F2140341 +:100BC000C252D4F8BC32DB68984700B1022038BD6D +:100BD00000000408054B10B50446036004F0DEFB7A +:100BE000204604F089FC204610BD00BF18C601084D +:100BF000082908B509D88B1FD0F8BC02044950F861 +:100C0000230000F04AFD024808BD0020FCE700BFB9 +:100C1000800400242DE9F7430D7800230646D0F820 +:100C2000B84215F06005ADF8063000F07681202D51 +:100C300040F0898191F80180B8F1060F00F28381BC +:100C4000DFE818F03F0107003E00AF0006011D017C +:100C5000220141F21803CA88E05CDAB1022801D00F +:100C6000052813D1498804F580533046196041F2B4 +:100C7000040341F21801E2500323635441F21401CA +:100C80006354214600F03AFD002515E0304600F09F +:100C9000F9FCF9E7052801D00228F7D14FF4837257 +:100CA0000025E25241F211030622E55441F21203FB +:100CB000E55241F21403E254284603B0BDE8F08344 +:100CC000CA8841F21800002A5FD0205C04F58053E6 +:100CD000022801D0092852D14F8841F204091F602F +:100CE00041F2180344F80920DFB9032A21464FF0E6 +:100CF000030298BF4FF0090804F8038041F2110382 +:100D0000E75441F21203E75241F2140304F803805E +:100D10004FF4045323804123A370304600F0D9FCE4 +:100D2000B2E7012F41F211001BD009210025023F3B +:100D3000E15441F212032554E55241F21403E15407 +:100D400041F208032146E058D6F8BC3200EB0730E8 +:100D5000DB69984734F809200146304600F0B9FCB9 +:100D6000AAE70F220025E25441F212032554E5526E +:100D700041F21403E254304600F084FC9CE7002565 +:100D800041F20402A5501D60F5E7022341F2110172 +:100D90002354625441F21201625241F2140163542D +:100DA00072E741F2180204F58055A35C1035032B5D +:100DB00004D0062B2DD006222946AEE741F20403CB +:100DC00041F21100E358EBB1042341F21201A354A4 +:100DD00000222254625241F21402A35441F2080349 +:100DE000E05804F580531968D6F8BC3231B922783E +:100DF000412A03D11B6A2A469847DCE71B6A2A4628 +:100E00000121F9E70521A154235441F21202A35212 +:100E10000DE041F21903E35C012B0CD10721A15431 +:100E200041F21102A35441F212030022E25241F2B4 +:100E30001403E154BFE7002BBDD1564991F82610A9 +:100E40004907B8D50221A15441F21102A354DCE7AD +:100E500041F2180341F21001E25C0A2A07D1022292 +:100E60000025E25441F214036550E25224E70A22BD +:100E7000E2540E23635041F21403E25204E704F5F6 +:100E800080510122183148E741F21802A35C092B76 +:100E90003FF6FAAE4FF41B75DD40ED4315F001054A +:100EA0007FF4F2AE0223A35441F21002A55041F2A6 +:100EB0001402A35204F580531D6041F20403E5506F +:100EC000FAE641F21800225C092A14D84FF41B7389 +:100ED000D340DB4313F001030DD10222225441F22F +:100EE0001000235041F21400225204F58052136086 +:100EF00041F20402A350274B93F8275015F0100538 +:100F000007D03046454600F08CF8304600F084F8B3 +:100F1000D2E648880EF0B4FFCEE64F780B2F12D8F9 +:100F2000DFE807F006111111111116111111232C10 +:100F300090F89C32032B06D102220DF106013D46AA +:100F400000F0C7FBB8E63046022500F09BFBB3E695 +:100F50004B881B12212B05D1CA880F49092A28BFAB +:100F60000922FAE600221146F7E690F89C32032B9C +:100F7000E9D104F5805101220C31EEE68B78022B89 +:100F8000E1D890F89C22032ADDD141F20C02A35053 +:100F900092E600BF4000002464000024D0E9003045 +:100FA000184700207047002070470020704700203D +:100FB000704709B1C0F8BC120020704710B5054C4D +:100FC000204604F05FFA2046034A0449BDE8104079 +:100FD00006F04EB84004002400000024D50B0008A1 +:100FE00008B580B1D0F8B43213B10023C0F8B432E0 +:100FF00009B1C0F8B0120123027080F89C3201F0F0 +:1010000061F8002008BD0220FCE719B1C0F8B41255 +:10101000002070470220704708B501F07BF80020DF +:1010200008BDD0F8B43201795B6810B50446984722 +:10103000204601F076F8002010BD08B5D0F8B43293 +:101040000BB9022008BD1B6898470028FAD0F8E7C2 +:1010500008B5D0F8B4325B689847002008BD38B5B1 +:1010600000F52A750446284600F0F8FA012394F8A2 +:10107000A812C4F89432B4F8AE32C4F8983201F031 +:101080001F03012B08D0022B0BD07BB92946204629 +:1010900000F004F9002038BD2946204600F030FA5F +:1010A000F8E72946204600F04FFAF3E701F0800107 +:1010B000204601F047F8EDE770B5044616460D46A8 +:1010C00041BBD0F89432032B1DD1D0E95812914284 +:1010D0000CD9891A8A42C0F8601188BF8AB2314699 +:1010E00098BF92B200F017FB284670BDD0F8B4321A +:1010F0001B6923B190F89C22032A00D1984720460F +:1011000000F011FBF0E7052BEED1C4F8941201F0CA +:1011100019F8E9E7D0F8B4329B6933B190F89C2212 +:10112000032A02D100259847DEE70225DCE7F8B55F +:10113000044617460D46002947D1D0F89432022BB9 +:101140003CD1D0E908639E4214D9F31A39469AB2C9 +:10115000036200F0CBFA2B462A462946204601F0CE +:1011600020F894F8A032012B02D1002384F8A03299 +:101170002846F8BDC269B2FBF3F603FB16265EB93A +:10118000934209D8D0F898329A4205D20A4600F024 +:10119000ADFAC4F89852DEE7D4F8B432DB682BB16C +:1011A00094F89C22032A01D12046984780212046AA +:1011B00000F0C8FF204600F0C1FAD2E733F0040384 +:1011C000CFD1802100F0BEFFCBE7D0F8B4325B690D +:1011D00033B190F89C22032A02D100259847C7E733 +:1011E0000225C5E70022402370B5044601254026AC +:1011F000114600F09DFF8021334600222046C4F8AE +:101200005851C4F8646100F093FF0021D4F8B8325B +:10121000A561666284F89C52C4F894126160C4F8B7 +:10122000A41223B1D4F8B43220465B68984700205A +:1012300070BD01740020704790F89C3280F89D3298 +:10124000042380F89C320020704708B590F89C2257 +:10125000032A04D1D0F8B432DB6903B198470020E7 +:1012600008BD002070470020704700207047012211 +:10127000017908B580F89C22D0F8B42252689047D2 +:10128000002008BD10B50446802100F05BFF00215E +:101290002046BDE8104000F055BF000037B50B7880 +:1012A00004460D4603F06003202B12D0402B10D0D3 +:1012B000002B51D14B78092B4ED8DFE813F0F70003 +:1012C00013014D000C014D00900013004D00DF0094 +:1012D000AC00D4F8B432294620469B6898470020D9 +:1012E00003B030BD00234988ADF806300B0A013B3E +:1012F000062B31D8DFE803F00416233030515B00B1 +:10130000D0F8B0321B680DF10601207C9847BDF87B +:101310000620002A5FD0EB88002B53D1204600F036 +:1013200002FADCE7027CD0F8B43232B99B6A0DF1E4 +:101330000600984702234370E9E7DB6AF7E7C9B282 +:10134000052921D8DFE801F0030C1014181CD0F88F +:10135000B0325B68002BD6D12046FFF793FFBEE783 +:10136000D0F8B0329B68F5E7D0F8B032DB68F1E72F +:10137000D0F8B0321B69EDE7D0F8B0325B69E9E72D +:10138000D0F8B0329B69E5E7D0F8B4329B6B002B04 +:10139000E2D00DF106029847B9E7037C002BDBD1C0 +:1013A000D0F8B4320DF106005B6B9847AFE7037CD1 +:1013B000002BD1D1D0F8B4320DF106001B6B984749 +:1013C0000723B8E79A420146204628BF1A46ADF8DF +:1013D000062000F07EF9EB88002B80D19EE78B88F9 +:1013E000002BB9D1CB88002BB6D14D887F2DB3D837 +:1013F00090F89C32032BAFD0E9B280F89E1200F037 +:10140000C2FE204600F08FF91DB1022384F89C3201 +:1014100065E70123FAE78978384D012929709BD8BF +:1014200090F89C32022B08D0032B15D0FFF72AFF2F +:1014300029782046FFF70CFE51E700293FF46EAFF4 +:1014400001210323416080F89C322046FFF7F5FD1F +:1014500002287FF463AF7FE731B90223416080F84F +:101460009C32FFF7F5FD59E7416801293FF456AF7B +:10147000C9B2FFF7EDFD29786160E6E7CA88012A65 +:101480007FF46AAF90F89C32022B0AD8002B3FF40D +:1014900063AF0146002341F8083F204600F019F9E8 +:1014A0001DE7032B7FF458AF011DF6E790F89C323F +:1014B000013B022B3FF650AFCB88022B7FF44CAFA1 +:1014C0000123C360D0F8A4320BB10323C36002220E +:1014D00004F10C01E1E74B88012B7FF400AFC4F865 +:1014E000A4321BE790F89C32013B022B3FF634AF4D +:1014F0004B88012B7FF4F3AE0023F0E77F05002437 +:1015000038B50B7804460D4603F06002402A01D03E +:101510005B0615D494F89C32013B022B10D82B7932 +:10152000022B0DD8D4F8B432294620469B68984740 +:10153000EB881BB910B9204600F0F5F8002038BD43 +:101540002046FFF79FFEF9E738B50A7804460B46B8 +:1015500002F06002202A27D0402A25D092BB5A7878 +:101560008D88012A09793DD0032A25D052BB90F8F5 +:101570009C32022B4DD0032B24D101F00F031422F7 +:1015800015F0800F02FB030354D09B69D3B101F027 +:101590007F05142305FB0333C51811F07F0355D1D4 +:1015A0002B600222294641E0D4F8B4221946204695 +:1015B00092689047002038BD90F89C22022A1FD0E4 +:1015C000032A03D02046FFF75DFEF3E75A882AB9C5 +:1015D0004A0603D0DB880BB900F0B4FD204600F0CA +:1015E000A2F8E7E790F89C22022A09D0032AE9D161 +:1015F0005B88002BDED14D06F0D000F0AAFDEDE7B0 +:101600004B06DFD000F09EFD8021204600F09AFDC1 +:10161000D0E74A06D6D12B064FF002024FF0000366 +:101620004CBF00F1140100F5AA710B60204600F0D8 +:1016300050F8BFE7D3F85831002BC3D001F07F0535 +:10164000142303FB050505F5AA75A6E7204600F05F +:1016500087FD08B10123A3E72860A2E70B78037098 +:101660004B784370CA788B7803EB022343804A7926 +:101670000B7903EB02238380CA798B7903EB022376 +:10168000C380704710B50446802100F05BFD002147 +:101690002046BDE8104000F055BD30B588B10025AA +:1016A00001382B460135445D002CFAD1DBB2013301 +:1016B0005B0013800B7003234B70022310F8015F53 +:1016C00005B930BD5A1CCD540233D2B2DBB28C54B2 +:1016D000F4E710B502241346C0F89442C0E907228B +:1016E0000A46002100F056FD002010BD08B5134643 +:1016F0000A46002100F04EFD002008BD10B503246D +:101700001346C0F89442C0E957220A46002100F06F +:1017100048FD002010BD08B513460A46002100F020 +:1017200040FD002008BD08B50423C0F89432002312 +:101730001A46194600F02EFD002008BD08B5052305 +:10174000C0F8943200231A46194600F02AFD002002 +:1017500008BD0000094B30B51A46094CD3F8945027 +:10176000A542FBD1036829B181680B604FF4407337 +:10177000536130BDC1681B04F7E700BF0064025825 +:1017800000030080024B034A1A6010F0EDBC00BF5A +:1017900080050024004000582DE9F043EBB0FFF72E +:1017A000F1FF0021B84812F090FF054603F0B0FDAC +:1017B000012809D1B4484DF65972002112F080FF7A +:1017C0004FF4FA700EF05CFB1C22002103A818F005 +:1017D000CBFF0022022103A804F071F91C22002192 +:1017E0000AA818F0C1FF00220123962100920AA83E +:1017F00004F07EF90B9B1A680A9B1A4206D00AA8CD +:1018000003F0BDF801210AA8FFF7A4FF1C22002164 +:1018100011A8002418F0A8FF2D2111A804F065F9E3 +:1018200018A803F007FE0EF0D9FC5122502129A878 +:1018300003F048FB48F29C0302AA1021ADF80830DF +:1018400029A80223009403F09FFA42F29E0302AA01 +:101850001021ADF8083029A80223009403F094FA6F +:101860000A200EF00DFB40F2422302AA1021ADF82F +:10187000083029A80223009403F086FA0A200EF00B +:10188000FFFA4AF2940302AA1021ADF8083029A801 +:101890000223009403F078FA0A200EF0F1FA0121F5 +:1018A00003A8FFF757FF0A200EF0EAFA214603A823 +:1018B000FFF750FF0A200EF0E3FA012103A8FFF71B +:1018C00049FF0A200EF0DCFA40F2AA739D421FD1B4 +:1018D00001216D4812F0F9FE022106466A4812F015 +:1018E000F4FE07460321684812F0EFFE394602462F +:1018F000F0B200F01DF9024630B90146624812F01C +:10190000DFFE0EF091FCFEE721465F4812F0D8FEA4 +:101910005E4B1A6802F07F42B2F1005F11D01A6884 +:1019200002F07F42B2F1105F0BD01A6802F07F42E2 +:10193000B2F1405F05D01B6803F07F43B3F1605FF5 +:1019400019D14DF659739D4215D040F2AA739D42AC +:1019500011D000224D4C4C48114612F0B1FE0EF051 +:1019600063FC204604F036FF236883F30888484B65 +:1019700001201B6898470021012015F0EDFB454F21 +:1019800015F044FB444E00F085FD002243493D46DE +:101990004348FFF725FB43494148FFF736FB4249DF +:1019A0003F48FFF706FB3E48FFF736FB4D200EF0A1 +:1019B0003DFB65200EF03AFBDFF8F890DFF8F88089 +:1019C0007269B3691A4202D048460FF0C7FFD8F8CF +:1019D0000020282192FBF1F4531C01FB1424C8F8C9 +:1019E0000030002CECD115F0CFFFB0F5FA7F13D901 +:1019F000DFF8C88098F8003073B12146224812F011 +:101A000064FE4DF65973984206D1224621461E487F +:101A100012F056FE88F800403B78244C83B9244BE2 +:101A200011A81B78227842FA83F3DBB22370129B51 +:101A30001A68119B1A420CBF01210021FFF78AFE90 +:101A40002B780133DBB22B702378FA2B02D8237862 +:101A5000092B0AD8164A13785B425BB213701378CD +:101A6000227842FA83F3DBB223702A7823789A42F1 +:101A7000A2D1129B11A81A68119B1A420CBF012116 +:101A80000021FFF767FE97E78005002400000408A7 +:101A9000040004086C08002400000440C000002476 +:101AA000A40500240400002428010024BC00002414 +:101AB000BB0000249022002468080024BA000024FF +:101AC000BFF34F8F0549064BCA6802F4E062134327 +:101AD000CB60BFF34F8F00BFFDE700BF00ED00E01C +:101AE0000400FA050368184700F07B43B3F1005F78 +:101AF0000ED000F07743B3F1405F09D000F07F4093 +:101B0000B0F1805F14BF4FF0FF304FF001607047BD +:101B1000004870470000040800B597B0694605F01A +:101B200067FA18B9049817B05DF804FB0020FAE7CB +:101B30002DE9F04F2DED028B8BB00446AE48884660 +:101B400004AFAE4E7A6002F04DFF14F0020F0FD0DA +:101B500014F0600F4FF0280000F0A78005F06AFC39 +:101B6000C8F50012054608F1006106F057FB356024 +:101B7000630744BFA24B3360250706D5882005F0D4 +:101B800059FC0546FEF7E6FE356020060AD53168A9 +:101B90002820396005F04EFC05464246396807F0BA +:101BA0006FFE356014F0400F964D0FD0C82005F041 +:101BB00041FC4FF40073814600229349CDE9013383 +:101BC000402300930DF072FEC5F80090A10608D5E1 +:101BD0005C2005F02FFC044600228B490BF01AF91B +:101BE0002C6028683168002873D003685B6A9847C6 +:101BF0000546002861D18549854818F0D9F9804605 +:101C0000002863D003460422012107F1080018F0E0 +:101C10008BFA2A462946404618F096FAB868FFF72C +:101C200063FF421C04464AD07948FFF775FF2146FE +:101C30007860714802F0CDFEB0F5804FDFF8B891C2 +:101C400028BF4FF48040064618F00EFD82467B68A0 +:101C50009D4280F0B38043463246012105EB040BE0 +:101C6000504618F061FA2146484602F0B2FEBBFB2E +:101C7000F0F303FB10B060B92146484602F0A9FE1C +:101C800059460246484602F0B3FF42F2107005F092 +:101C900021FD33465A465146484602F013FF4FF4A1 +:101CA0007A70354405F016FDD1E705F0C3FB4FF41B +:101CB000001205464FF0006157E76FF0010420461F +:101CC0001C37BD46BDEC028BBDE8F08F6FF00204FF +:101CD000F5E7002972D06B46084608EE103A0B680B +:101CE0009B689847054600287FD1306803689B6A47 +:101CF0009847102802463068B8BF10220168930048 +:101D0000073323F00703ADEB030DD31704ACCDE984 +:101D100000232B46D1F8149042462146C84720683C +:101D2000FFF7E2FE431C044661D00146324802F050 +:101D300050FEB0F5804FDFF8C0A028BF4FF48040C0 +:101D4000814618F091FC08EE900A7B689D4232D2E1 +:101D50003068002218EE901A0368019205EB080221 +:101D6000CDF80090D3F814B00023D84705EB040B4E +:101D70002146504602F02DFEBBFBF0F303FB10B0F2 +:101D800060B92146504602F024FE594602465046AC +:101D900002F02EFF42F2107005F09CFC4B465A46B2 +:101DA00018EE901A504602F08DFE4FF47A704D44B2 +:101DB00005F090FCC9E718EE103A9D460E48002445 +:101DC00002F038FE134B144800217B61134BC7E926 +:101DD0000344BB6007F10803CDE902017A691048AA +:101DE00000920ECB03F003FB69E76FF0030418EEDB +:101DF000103A9D4663E700BFEC080024B0080024B9 +:101E0000F8080024B4080024C5D001085CC3010808 +:101E10005FC30108E51A0008400D0300C11A00085D +:101E20007008002410B5054C204603F02BFB20461B +:101E3000034A0449BDE8104005F01AB970080024AF +:101E400000000024D50B00080368774A93422DE96F +:101E5000F043BFB04AD1754C4FF4C05201217448D1 +:101E6000D4F8E03043F00103C4F8E030D4F8E030B7 +:101E700003F001030193019B0223CDE9092303230E +:101E8000CDE90B130A2309A90D930EF09DFBBC228B +:101E900000210FA818F068FC4FF480230EA80E93C1 +:101EA0004FF44013309311F075FA0546D8B910F08D +:101EB000EFF9D4F8D83065202A4643F000630521B5 +:101EC000C4F8D830D4F8D83003F000630293029BF2 +:101ED000D4F8003123F00063C4F800310EF066F846 +:101EE00065200EF095F83FB0BDE8F083514A93426B +:101EF000F9D14E4C002502270A26D4F8E0304FF0E5 +:101F0000030809A94A4843F001034FF00809C4F83F +:101F1000E030D4F8E03003F001030393039BD4F8DE +:101F2000E03043F00203C4F8E030D4F8E03003F0CE +:101F300002030493049BD4F8E03043F00403C4F894 +:101F4000E030D4F8E03003F004030593059BD4F8A7 +:101F5000E03043F08003C4F8E030D4F8E03003F020 +:101F600080030693069BD4F8E03043F48073C4F8F2 +:101F7000E030D4F8E0300D9603F480730793079BAC +:101F80002023CDE90B58CDE909370EF01DFB09A937 +:101F900027480D96CDE90B58CDE909970EF014FBB3 +:101FA00043F6234309A924484FF001080B950D96E9 +:101FB000CDE909370EF008FB09A920480B950D96CD +:101FC000CDE909870EF000FB09A91C480B950D9679 +:101FD000CDE909970EF0F8FA042309A917480B95E3 +:101FE0000D96CDE909370EF0EFFAD4F8D8304D2030 +:101FF0002A4643F080634146C4F8D830D4F8D8303C +:1020000003F080630893089BD4F8D83043F0007342 +:10201000C4F8D830D4F8D83003F000730E930E9B78 +:102020000DF0C4FF4D205CE700000840004402585A +:102030000000025800000440000402580008025842 +:1020400000F57171D0F80404FFF709B81C2303FBF5 +:102050000103D0F80404D3F80822FFF72DB81C239D +:1020600003FB0103D0F804049A6CFFF760B8D0F8C2 +:102070000404FFF7EAB813B5C1680446D0F80404B5 +:10208000003918BF01210191FFF7ACF80199D4F88C +:10209000040402B0BDE81040FFF7CBB8D0F8040448 +:1020A000FFF7CAB8D0F80404FFF7DDB8D0F804048D +:1020B000FFF7D7B8D0F80404FFF7D7B8D0F8040476 +:1020C000FFF7D5B838B5114A0623114C0025C4E9ED +:1020D00000230123C4F80404C0F8C042204625634D +:1020E0002561E560E562C4E90635C4E908550FF0ED +:1020F00067FB4FF40071204610F01EF84FF4007299 +:10210000294620460FF0F8FF284638BD000004405D +:102110009022002408B5D0F8C0020FF0DAFB0020AE +:1021200008BD08B5D0F8C0020FF0F2FB002008BDD2 +:1021300010B51446D0F8C0021A4623460FF0F2FE3E +:10214000002010BD08B5D0F8C0020FF067FF0020D6 +:1021500008BD08B5D0F8C0020FF098FF002008BDF8 +:1021600011F0800FD0F8C0324FF01C0217BF01F001 +:102170007F0102FB013102FB013191F83E0008BFF3 +:1021800091F8FE01704708B5D0F8C0020FF0B6FE16 +:10219000002008BD08B5D0F8C0020FF01FFF0020D6 +:1021A00008BD08B5D0F8C0020FF0F4FE002008BD4D +:1021B000122301480B807047DC00002404230148EF +:1021C0000B807047F000002430B5A1F11004002509 +:1021D00000F00F02CD7302390009D3B2092ACCBF37 +:1021E000373330330B748C42F2D130BD10B5044C10 +:1021F0000A4604482146FFF750FA204610BD00BFAA +:10220000982600246EC3010810B5044C0A46044801 +:102210002146FFF742FA204610BD00BF9826002451 +:1022200079C3010810B5044C0A4604482146FFF75B +:1022300034FA204610BD00BF9826002491C301083F +:1022400010B5044C0A4604482146FFF726FA2046FA +:1022500010BD00BF982600249CC3010810B5044699 +:102260000DF026FE2146FFF7AFFF0DF027FE04F12B +:102270001001FFF7A9FF0DF027FE04F12001FFF781 +:10228000A3FF302010BD0000322310B5034C0B809B +:10229000A01CFFF7E3FF204610BD00BFF4000024A0 +:1022A000002050709070D07070477047C368184716 +:1022B0000A4B01220A4810B51A7086B0094B002457 +:1022C0000293094B04940393084B009302AB0ECB8B +:1022D00005F076FD204606B010BD00BFE8080024DA +:1022E0005C0B0024000B00246755000871240008D3 +:1022F00008B5044802F09EFB034807F0EFF8002001 +:1023000008BD00BFEC080024F808002410B50446FE +:102310000168D0E90123054802F0D4FB206818F0D9 +:10232000ABF92046BDE8104018F0A6B9EC0800242F +:10233000B0F1104F1FB5044610D300F1E042002366 +:102340000B48039206F006F8039A0023CDE900013A +:10235000074806F07BFA80B204B010BD014605487C +:1023600002F037FB21460246024802F041FCF2E748 +:10237000F8080024EC080024B0F1104F13B50C4607 +:1023800008D24B1E024490420CD010F8011B03F8F7 +:10239000011FF8E70023CDE9002300F1E0420348E4 +:1023A00006F09DF9204602B010BD00BFF8080024D9 +:1023B000B1F1104FF0B506468BB00D4614461CD354 +:1023C00000230022244801F1E04505F0C3FF00236B +:1023D0008B4208BF844205D2002200231E4805F02C +:1023E000B9FF044600232A4631461B48CDE9004385 +:1023F00006F0C4F980B20BB0F0BD104618F034F905 +:1024000022463146074618F0A1F90C2018F02CF9A5 +:10241000124B002284600593114B0492CDE90230E7 +:1024200002ABC0E900750FCB06AD85E80F001021A7 +:102430000C4803F013F9044660B195E80F0084E8F6 +:102440000F000949204603F0ACFA22460749054827 +:1024500003F0C4F90020CEE7F80800248F24000818 +:102460000D230008000B0024AB220008AD22000859 +:1024700010B40168D0E90132541001EB6200D207B8 +:1024800048BF0A595DF8044B48BFD3581847D0E9F4 +:102490000030184710B5074802F0A4FA064806F0C5 +:1024A000BDFE1823054A30210548BDE8104005F05F +:1024B00046BB00BFEC080024F8080024AAC30108AA +:1024C000B808002470B5012386B0204A6621204C4C +:1024D0000025204E2046CDE903325A235922CDE96A +:1024E00001313D233B210093422306F073FF324626 +:1024F0001949204604F0BCFD184C194B29462561AA +:1025000004F14000236005F0ECFB04F1540005F0F9 +:1025100095FB2B4620464FF480522821009505F06C +:1025200043FC20460F4C32460F4904F0A1FD2A46D9 +:102530004FF4D061204603F001F832460B492046A3 +:1025400006B0BDE8704004F093BD00BF005A6202BF +:10255000F808002400000024712500085C0B00240A +:10256000ECC90108000B0024DD7E00085B55000863 +:1025700038B5074B0546044645F8BC3B06F0AEFFB0 +:10258000284605F097FB201D02F034FD204638BD9B +:1025900068CA010810B50446FFF7EAFF4FF402715C +:1025A000204604F05DFF204610BD00001EF0040F21 +:1025B0000CBFEFF30880EFF30980816911F8021C6A +:1025C000002932D101B590E80F10E047BDE8005076 +:1025D0008CE80300244B93E80600914208BF704743 +:1025E0001A6041B91EF0100F10D1204B186820F06E +:1025F000010018600AE02CE9F00F1EF0100F08BF70 +:102600002CED108A81F822E0C1F838C0906B92F866 +:10261000221061F0FF0E1EF0100F08BFB0EC108A00 +:10262000B0E8F00F80F309887047114A13689942A7 +:10263000FAD801B552F821C00FC8E047BDE80050F4 +:10264000CCF80000704701B501F000FBBDE8014087 +:10265000EFF3098CBEE701B501F0BCFABDE801401B +:10266000EFF3098CB6E700006001002434EF00E0CE +:10267000F0C40108014608B530B96FF0030000F05E +:10268000F0F96FF0030008BD132001F07FFE30B9B0 +:102690004FF0FF3000F0E5F94FF0FF30F3E7002096 +:1026A000F1E7000008B5EFF305832BB9EFF31083D2 +:1026B00013B9EFF3118333B16FF0050000F0D1F9D6 +:1026C0006FF0050008BDDFF808C000DFFAE700BFC3 +:1026D00075260008EFF310832BB9EFF31180003853 +:1026E00018BF0120704701207047000038B505462B +:1026F000A0B1846802686CB114F0030302D1C16810 +:102700000F2926D800246FF00801002000F0AAF954 +:10271000204638BDC368002BF4D11546104BD3F8C2 +:10272000900078B100F01BFC0446A0B10123F32215 +:10273000A3700023656022700A4AC4E90233084B83 +:102740005A66E5E701221021D3F8800000F08EFBE5 +:10275000EAE71546EBE76FF0040100F083F9D7E7ED +:102760004C010024D1270008930710B502F00104A2 +:1027700022D400F10C0384B153E8000F00EA0102F7 +:102780008A4203D0BFF32F8F002005E020EA010228 +:1027900043E8002404B1EFE710BD53E8000F0842FE +:1027A00003D1BFF32F8F002005E020EA010243E8A8 +:1027B000002404B1F1E7EFE7C06801EA00031CB1AF +:1027C000994218BF0020E7E7002B08BF0020E3E78D +:1027D000F8B50546846804B9F8BD94F82320284666 +:1027E000616AA768FFF7C0FF064638B1204601F0CE +:1027F000A6FB00223146204601F020FD3C46EAE7D8 +:10280000F8B50D4617461E46044620B10378F32B53 +:1028100001D1002907DA20466FF0030100F022F908 +:102820006FF00300F8BDFFF79FFF0028FAD186B1D3 +:102830003146432001F0AAFD40B1074B20465E69B6 +:10284000314601F061FB756286F823706FF001007C +:10285000E8E76FF00200E5E74C01002470B505469B +:1028600010B10378F32B07D028466FF0030100F076 +:10287000F9F86FF0030070BD836863B1284601F07A +:1028800055FB00226FF0020101F0D8FCA868002877 +:10289000F4D101F0B9FBAB78002613F001032E70E0 +:1028A0000FD0094B2946D3F8904024B1204600F0C0 +:1028B00070FB3046DFE7D3F8800000F00CFB2046C9 +:1028C000D9E71846D7E700BF4C0100242DE9F041B5 +:1028D000064620B10378F32B01D1002909DA6FF005 +:1028E00003056FF00301304600F0BCF82846BDE850 +:1028F000F08100F10C0353E8002F42EA010543E8A0 +:10290000005000B1F7E7B4681CB9204601F07CFB29 +:10291000ECE794F823203046616AD4F80880FFF78A +:1029200023FF074678B194F823309B0756BF656AAA +:10293000054620EA0505204601F001FB0022394644 +:10294000204601F07BFC4446DEE70000024608B565 +:10295000EFF3058333B100206FF0050100F082F83A +:10296000002008BDFFF7B6FE0028F4D11046DFF8BE +:1029700008C000DFF5E700BFED260008024638B5C5 +:10298000EFF305834BB192B96FF003046FF00301CD +:10299000104600F067F8204638BDFFF79BFE002880 +:1029A000F1D11046DFF82CC000DF0446F3E71378BE +:1029B000F32BE9D10029E7DB02F10C0353E8000F08 +:1029C00040EA010443E8004505B1F7E7104601F08D +:1029D00085F9E0E7CD28000838B504461D46EFF339 +:1029E000058343B18CB920466FF0030100F03AF83B +:1029F0006FF0030038BDFFF76DFE0028F2D12046CE +:102A00002B46DFF824C000DFF4E72378F32BEAD16C +:102A1000002DE8D10029E6DB2046FFF7A5FE0028BF +:102A200008BF6FF00200E5E701280008024608B57C +:102A3000EFF305833BB110466FF0050100F012F88B +:102A40006FF0050008BDFFF745FE0028F3D11046E2 +:102A5000DFF804C000DFF5E75D2800087047704725 +:102A6000704770477047704770477047EFF31083A7 +:102A70002BB9EFF31180003818BF012070470120F7 +:102A800070470000064BDA6A3AB1D0695B6C1BB143 +:102A90001B69984228BF184670474FF0FF30F5E792 +:102AA0004C010024014BD868704700BF4C01002442 +:102AB00070B5464C237A012B00F0858033B14FF07E +:102AC000FF30FFF7CBFF4FF0FF3070BD404DEB689C +:102AD000E3652B8AD5E90B61A4F85430AB68304626 +:102AE000236400F0ABF908B1C4F88060D5E9056152 +:102AF000304600F0A3F908B9D4F880606667D5E9DC +:102B00000761304600F09AF908B9D4F88060A667EA +:102B1000D5E90961304600F091F908B9D4F8806030 +:102B2000E6676E6B3EB131683046D6E9022300F0AD +:102B3000F5F9C4F88460AE6B3EB131683046D6E931 +:102B4000022300F0EBF9C4F88860EE6B3EB1316807 +:102B50003046D6E9022300F0E1F9C4F88C602E6C0F +:102B60003EB131683046D6E9022300F0D7F9C4F807 +:102B700090606E6C3EB131683046D6E9022300F0B9 +:102B8000CDF9C4F89460AE6C3EB131683046D6E9F8 +:102B9000022300F0C3F9C4F89860EE6C3EB13168CE +:102BA0003046D6E9022300F0B9F9C4F89C602D6DD7 +:102BB0003DB129682846D5E9022300F0AFF9C4F8F1 +:102BC000A0500123237200207FE700BF4C010024A6 +:102BD00080C4010870B5254D2B7A012B07D06FF00A +:102BE00006004FF0FF34FFF739FF204670BD01F0BB +:102BF00001FC10B94FF0FF30F3E71D4AFF231D4ED3 +:102C000082F8223092F82230D26863F0FF031A492A +:102C1000C2F302227068DB4314BFB3FA83F32023AC +:102C2000C3F12003934298BF531CFE2202FA03F320 +:102C30000F4ADBB2D37701F0FBFD04460028D9D15F +:102C400001F038FE286101F021FE0C4801F06EF918 +:102C500001F0D2F93368DB074CBF0223032383F36F +:102C60001488BFF36F8F02232B72BEE74C01002440 +:102C700000ED00E080C40108572600086801002428 +:102C800010B50F4C237A022B13D101F007FE01235C +:102C90006372BFF34F8F0B4A5168C90003D54FF0E1 +:102CA00000615160A37204232372BDE81040FFF756 +:102CB000E9BE6FF00700FFF7D1FE002010BD00BF96 +:102CC0004C01002400ED00E038B51E4C0546237A87 +:102CD000042B35D1FFF7D6FEE26AA842034694BF23 +:102CE00000F1FF332B4612B1D069C01AD061626C7B +:102CF00012B11069C01A1061E06803440544E36032 +:102D0000E368AB4213D102230020237201F07CF967 +:102D100000236372BFF34F8FA27A22B1A3724FF0E8 +:102D20008052094B5A60BDE8384001F0AFBD013315 +:102D3000E36001F027F9236D002BE1D09847DFE72E +:102D400038BD00BF4C01002400ED00E0704738B5ED +:102D500004460D46FFF783FE29462046BDE838406D +:102D600001F00ABD08B5FFF7F1FFEFF3058333B1BA +:102D70006FF00500FFF772FE6FF0050008BDFFF76A +:102D800075FE0028F4D1DFF808C000DFF6E700BFC9 +:102D9000B12A000808B5EFF3058333B16FF00500E1 +:102DA000FFF75CFE6FF0050008BDFFF75FFE00282F +:102DB000F4D1DFF808C000DFF6E700BFD52B00082C +:102DC00008B5EFF305832BB16FF00500FFF746FE62 +:102DD000002008BDFFF74AFE0028F5D1DFF804C047 +:102DE00000DFF6E7812C0008024608B5EFF3058303 +:102DF0002BB16FF00500BDE80840FFF72FBEFFF7CD +:102E000035FE0028F5D11046DFF804C000DF08BD0C +:102E1000C92C000808B5EFF3058313B1054BD8683A +:102E200008BDFFF723FE0028F8D1DFF80CC000DF53 +:102E3000F6E700BF4C010024A52A000810B598B1A0 +:102E400040EA010313F007030ED117290AD90160E4 +:102E5000083910220C18426084600B5081684A6067 +:102E6000C3600123184610BD0023FBE7F0B580B313 +:102E700099B132F003032CD10F3100F1080521F094 +:102E800007072B462D685C68E91A24F00304091B28 +:102E90008F4204D929680029F3D10846F0BD46685D +:102EA0003A4304683E444660204450F8041C083805 +:102EB0008E4288BF4660586818B903F108015A600D +:102EC000EBE720F0030019181D504A601960083123 +:102ED000E3E70021E1E730B590B1D9B1A1F10805F0 +:102EE00000F108040022AC420BD151F8043C23F05D +:102EF000030443681B1B436042B941F8042C0120C2 +:102F000030BD236822463BB11C46ECE751F8083C33 +:102F10001360F4E70846F3E71846F1E730B5C0B1AF +:102F200089B1C2B1CBB100240160C3604361C0E983 +:102F3000014202FB01F41D1905611846013904D153 +:102F4000A21A99500121084630BD8518056028460F +:102F5000F4E70146F7E71146F5E71946F3E70346BC +:102F600010B5A8B100F1140252E8000F10B9BFF378 +:102F70002F8F04E0016842E8001404B1F4E738B18F +:102F8000043353E8002F511C43E8001404B1F8E760 +:102F900010BD30B5F0B1C3688B421BD803698B42BA +:102FA00018D900F114031A680A60BFF35F8F53E861 +:102FB000002F0C689442F6D143E8001505B1F2E702 +:102FC000043050E8003F5A1E40E8002101B1F8E704 +:102FD000002030BD6FF00300FBE7EFF310832BB947 +:102FE000EFF31180003818BF0120704701207047AF +:102FF000036B30B5E3B1CD780024DA78AA420FD361 +:103000001A46C1E901248AB19160A4B161602830F7 +:1030100050E8003F5A1C40E8002101B1F8E730BDFC +:103020005A681C46002AECD01346E6E7C162ECE77A +:10303000C1E90133C1620163E9E7D1E9013223B19A +:103040009A608A681AB153607047C262F9E70363F5 +:103050007047F8B5877804468FB3C56800270146E6 +:1030600005F10C062846FFF7E8FF27703046FFF70A +:1030700090FFAB68002B48D03046FFF770FF044646 +:10308000002842D0284600F051FF06463A4639460D +:1030900001F0D4F8304600F0A5FF6A6A0646816860 +:1030A00004F10C0017F052FBF923A7702370F368AA +:1030B000E37021462846BDE8F840FFF799BF8568D0 +:1030C000AB68002BF5D05B78832BF2D1284600F05B +:1030D0002DFF06463A46394601F0B0F8304600F07A +:1030E00081FF06466A6A04F10C01806817F02EFB26 +:1030F000F3680BB1E2781A700023214605F10C0049 +:103100002370BDE8F840FFF744BFF8BD2DE9F0415A +:103110000C4617469846054618B10378FA2B00D19D +:1031200041B928466FF00301FFF79FFC6FF00300E1 +:10313000BDE8F0818368C3B15B78832B15D100F0C3 +:10314000F5FE06460122002101F078F8304600F035 +:1031500049FF06466A6A2146806817F0F7FAF06868 +:103160000028E5D007700020E2E705F10C00FFF72A +:10317000F6FE064670B121466A6A0C30002417F04C +:10318000E5FAF923314628463370B470F770FFF73B +:103190002FFFE8E7B8F1000F10D04146932001F06F +:1031A000F5F840B1074B2846596900F0ADFEEFF342 +:1031B0000983C3E902476FF00100B9E76FF002002D +:1031C000B6E700BF4C0100242DE9F84F88460746BA +:1031D00038B131B1B0FA80F3B1FA81F10B441F2B51 +:1031E00006DC6FF0030100200024FFF73EFC70E0D6 +:1031F00008F1030626F003060C3606FB00F9F2B1CF +:1032000094683CB1A30702D1D368332B05D86FF083 +:103210000801E8E7D368002BF9D1D2F800A0D2E981 +:1032200004533DB115F0030B01D1994554D96FF00A +:103230000901D8E7002BFAD11CB19B460CE092465D +:103240001546274BD3F8A000D8B1FFF788FE0446F7 +:10325000A0B14FF0010B35BB214B00224946D86F7E +:10326000FFF704FE0546C0B9BBF1000F06D01C4BAA +:103270002146D3F8A00058B1FFF78BFE6FF0040190 +:10328000B1E701223421D3F88000FFF7EFFDDEE73C +:10329000D3F88000FFF71FFEF0E74BF0020B4A4621 +:1032A000002117F061FAFA233246394604F10C0086 +:1032B0002370002384F802B0A360C4F804A0C4E91A +:1032C0000983C4E90B332B46FFF728FE044B054A5C +:1032D0001A672046BDE8F88F002CE4D1B1E700BFA3 +:1032E0004C0100245330000800F1280310B553E8C6 +:1032F000002F12B9BFF32F8F04E0511E43E80014D2 +:1033000004B1F4E70AB9002010BDC06A0123002807 +:10331000F9D0821CD2E84F1FC2E8443F04B1F9E75C +:1033200011F0FF0FF0D08068F1E700002DE9F041C7 +:103330000F4615469846044618B10378FA2B00D17B +:1033400041B920466FF00301FFF78FFB6FF00300D8 +:10335000BDE8F081FFF7C8FF064600283AD00146D5 +:103360002046FFF76AFE626A06F10C01384617F044 +:10337000EDF90DB1F3782B70002504F10C073146FF +:1033800038463570FFF705FEA3680BB90020DFE76C +:103390003846FFF7E4FD06460028F7D0204600F047 +:1033A000C5FD07462946012200F048FF384600F0D7 +:1033B00019FE626A0746816806F10C0017F0C6F92B +:1033C000F923B570314633702046FB68F370FFF780 +:1033D0000FFEDBE7B8F1000F10D04146832000F06C +:1033E000D5FF40B1074B2046596900F08DFDEFF342 +:1033F0000983C3E902756FF00100A9E76FF00200CD +:10340000A6E700BF4C01002408B5064B08219A6EC0 +:10341000D86EFFF7D9FE044BD864B0FA80F04009AB +:10342000404208BD80C401084C0100242DE9F04150 +:1034300006460F4690461C46EFF305834BB196B9FE +:1034400030466FF00301FFF710FB6FF00300BDE89B +:10345000F081FFF7C2FD0028F1D130462346DFF8A6 +:1034600048C000DFF3E73378FA2BE9D1002FE7D02B +:10347000002CE5D106F10C00FFF771FD054680B187 +:10348000726A39460C3017F061F9F9232846AC709E +:103490002B7085F80380C5E9017600F01FFC2046FB +:1034A000D5E76FF00200D2E70D310008F8B5044609 +:1034B0000F4616461D46EFF3058343B18CB92046EF +:1034C0006FF00301FFF7D1FA6FF00300F8BDFFF7CB +:1034D00084FD0028F2D120462B46DFF844C000DFEF +:1034E000F4E72378FA2BEAD1002FE8D0002DE6D1BB +:1034F0002046FFF7F9FE054670B100F10C01626A43 +:10350000384617F023F90EB1EB7833702846EC609B +:1035100000F0E4FB0020D9E76FF00200D6E700BF1F +:103520002D330008EFF310832BB9EFF3118000382F +:1035300018BF0120704701207047000070B5A8B384 +:103540008468D0E900566CB114F0030302D1C2685C +:103550001B2A1AD800246FF008010020FFF783FA15 +:10356000204670BDC368002BF4D1124BD3F89400F1 +:1035700030B901221C21D3F88000FFF777FC01E06D +:10358000FFF7EDFC044660B10123F522A370002390 +:10359000E670227065602376C4E90233C4E904331F +:1035A000DEE76FF00401FFF75EFAD9E7054606464D +:1035B000DBE700BF4C010024284B70B55D69044671 +:1035C0000E4635B96FF00701FFF74DFA4FF0FF30A7 +:1035D00070BD10B10378F52B07D020466FF00301C2 +:1035E000FFF741FA6FF00300F2E7037E53B9C0E939 +:1035F0000353EB6A436103B118610123EC620020BD +:103600002376E5E7C278D1070DD5C168A9420AD172 +:10361000FF2B06D16FF00F01FFF725FA6FF00200C4 +:10362000D6E70133EBE7002EF8D093070AD5E06820 +:1036300095F9203090F920209A4203DA80F8203062 +:1036400000F086FC3146532000F0A0FE18B1294658 +:10365000204600F059FC6FF00100B9E74C0100244E +:103660002E4B5A6970B5044632B96FF00701FFF767 +:10367000FAF94FF0FF3070BD10B10378F52B07D089 +:1036800020466FF00301FFF7EEF96FF00300F2E759 +:10369000037E33B96FF00E01FFF7E5F96FF002001A +:1036A000E9E7C168914202D06FF00D01F4E7013BF8 +:1036B000DBB2037613BB43690BB101691961216960 +:1036C000F1B14B6192F92130D56ADDB982F8203031 +:1036D000A36883B1204600F029FC06462A46294605 +:1036E00000F0ACFDF36AC4E90365636103B11C61DA +:1036F0000123F4622376002000F086FC0020BAE764 +:10370000D362DFE7E978890706D5A96821B191F985 +:1037100020108B42B8BF0B466D69D6E74C010024E0 +:1037200070B5044610B10378F52B07D020466FF032 +:103730000301FFF798F96FF0030070BD037EBBB182 +:103740006369C0680BB122691A61226902B35361CF +:1037500090F92120C36AEBB990F92030934203D04D +:1037600080F8202000F0F4FBA068F8B900F04CFCD1 +:10377000A078002610F001002670DED0134B214601 +:10378000D3F89450DDB12846FFF703FC3046D4E768 +:10379000C362DDE7D978890706D5996821B191F927 +:1037A00020108A42B8BF0A465B69D4E7204600F081 +:1037B000BDFB00226FF0020100F040FDD4E7D3F81A +:1037C0008000FFF788FB2846B7E700BF4C010024C4 +:1037D0002DE9F0410446002601270CB9BDE8F0812F +:1037E000E378D4F814801B0712D5A36826767BB142 +:1037F000204600F09BFB00220546114600F01EFD0E +:10380000EB6AC4E90356636103B11C61EC6227767D +:103810004446E2E710B4C3789B071DD5C06890F911 +:103820002120C36ADC78A40709D59C688C4208BFB4 +:103830008C6824B194F92040A242B8BF22465B694B +:10384000002BEFD190F92030934205D080F8202052 +:103850005DF8044B00F07CBB5DF8044B7047000042 +:10386000024608B5EFF3058333B100206FF0050180 +:10387000FFF7F9F8002008BDFFF754FE0028F4D147 +:103880001046DFF808C000DFF5E700BF3D3500084F +:10389000024608B5EFF305833BB110466FF0050112 +:1038A000FFF7E1F86FF0050008BDFFF73BFE0028C9 +:1038B000F3D11046DFF804C000DFF5E7B9350008A2 +:1038C000024608B5EFF305833BB110466FF00501E2 +:1038D000FFF7C9F86FF0050008BDFFF723FE0028C9 +:1038E000F3D11046DFF804C000DFF5E761360008C9 +:1038F000024608B5EFF305833BB110466FF00501B2 +:10390000FFF7B1F86FF0050008BDFFF70BFE0028C8 +:10391000F3D11046DFF804C000DFF5E721370008D7 +:10392000EFF310832BB9EFF31180003818BF01209B +:103930007047012070470C30D0E85F3F13B9BFF3E8 +:103940002F8F04E05A1EC0E8512F01B1F4E798B25E +:10395000003818BF0120704730B500F10C02C18952 +:10396000D2E85F3F994202D8BFF32F8F04E05C1C7E +:10397000C2E8554F05B1F3E7C0899BB2984294BFA6 +:103980000020012030BD0000F8B515464FF6FE734B +:10399000421E06460F469A4201D8884207D26FF06F +:1039A000030100240020FFF75FF82046F8BD7DB139 +:1039B000AC682A6844B114F0030302D1E9680F2906 +:1039C00022D86FF00801ECE7EB68002BF9D115461F +:1039D000114BD3F8980080B1FFF7C1FA0446A8B1A3 +:1039E0000123F622A370002365602270A3600B4AB6 +:1039F000094BA781E6819A66D7E701221021D3F807 +:103A00008000FFF733FAE9E71546EAE76FF00401B3 +:103A1000FFF72AF8C9E700BF4C010024213A00084B +:103A2000836810B504465BB1FFF785FF40B12046BF +:103A300000F07CFA0022BDE81040114600F0FEBB09 +:103A400010BD38B5054610B10378F62B07D02846CF +:103A50006FF00301FFF708F86FF0030038BD8468CA +:103A60003CB100F063FA0122002100F0E7FB0020E6 +:103A7000F4E7FFF771FF38B928466FF01001FEF741 +:103A8000F3FF6FF00200E9E72046E7E770B505466F +:103A900010B10378F62B07D028466FF00301FEF72C +:103AA000E3FF6FF0030070BD836863B1284600F048 +:103AB0003DFA00226FF0020100F0C0FBA868002868 +:103AC000F4D100F0A1FAAB78002613F001032E70B8 +:103AD0000FD0094B2946D3F8984024B12046FFF770 +:103AE00058FA3046DFE7D3F88000FFF7F4F92046B4 +:103AF000D9E71846D7E700BF4C01002410B50446AB +:103B0000EFF3058333B100206FF00501FEF7ACFF42 +:103B1000002010BDFFF704FF0028F4D12046DFF895 +:103B200008C000DFF5E700BF8939000810B504467A +:103B3000EFF3058343B184B920466FF00301FEF72C +:103B400093FF6FF0030010BDFFF7EAFE0028F2D1EB +:103B50002046DFF830C000DFF5E72378F62BEBD105 +:103B60002046FFF7F9FE20B1204600F0B7F800200C +:103B7000E9E720466FF01001FEF776FF6FF00200D4 +:103B8000E1E700BF433A0008024608B5EFF30583BA +:103B90003BB110466FF00501FEF766FF6FF00500C0 +:103BA00008BDFFF7BDFE0028F3D11046DFF804C0C2 +:103BB00000DFF5E78D3A000810B5D0E85F3F5A1CEA +:103BC000914200D80022C0E8542F04B1F5E798B222 +:103BD00010BD000038B51C4C00F066FEE3680133F0 +:103BE000E36000F0CFF9002000F00EFA236D03B17E +:103BF0009847226C32B3A369E16B994203D0D9692B +:103C0000E36301B9DA61DA69C2B9237A022B19D107 +:103C1000656ABDB1E36B95F9202093F920309A4293 +:103C200010D1284600F08BF9E06B00F0A3F928468C +:103C300000F0E2F9236CE563EB6103E0013ADA613D +:103C4000002AE2D038BD00BF4C01002470B5224CE0 +:103C500004F1560504F15A06B4F85410D5E85F3F54 +:103C600013B9BFF32F8F04E05A1EC5E8502F00B1DF +:103C7000F4E79BB25BB33046FFF79EFFE36D53F86A +:103C8000200020B30378F13B082BE5D801A252F8BD +:103C900023F000BFB93C0008593C0008BF3C0008B5 +:103CA000593C0008593C0008C33C0008C73C0008C8 +:103CB000593C0008CB3C0008236E9847CCE7636E64 +:103CC000FBE7A36EF9E7E36EF7E7236FF5E7002064 +:103CD000BDE8704000F098B94C01002470B5164C56 +:103CE0000546B4F8541004F15602D2E85F3F9942F9 +:103CF00002D8BFF32F8F04E0581CC2E8560F06B15C +:103D0000F3E79BB2994205D829460220BDE87040EE +:103D1000FFF71DB804F15800FFF74EFFE36D43F8BD +:103D20002050637A23B9054B4FF080525A6070BD22 +:103D30000123A372FBE700BF4C01002400ED00E06B +:103D4000EFF310832BB9EFF31180003818BF012077 +:103D50007047012070470378F12B00D07047C0688E +:103D6000F9E7000010B5C469621CD0E904310CD138 +:103D700003B1596142691AB113610023436101E043 +:103D8000074A13630023C36110BD1BB1DA6959618F +:103D90002244DA614269002AEED1014AD362F1E796 +:103DA0004C01002401230A4A90F9201043701C3270 +:103DB000936810B51BB193F920408C4205DCC0E933 +:103DC0000232906003B1D86010BD1A469B68F1E7DB +:103DD0004C010024014B5869704700BF4C0100247E +:103DE00008B500F0FBFCDFF810C000DF4FF0FF313A +:103DF0000020FEF735FEFEE7A5420008930710B548 +:103E000002F0010422D400F1280384B153E8000F2A +:103E100000EA01028A4203D0BFF32F8F002005E0A1 +:103E200020EA010243E8002404B1EFE710BD53E8A3 +:103E3000000F084203D1BFF32F8F002005E020EAD6 +:103E4000010243E8002404B1F1E7EFE7806A01EAE8 +:103E500000031CB1994218BF0020E7E7002B08BF00 +:103E60000020E3E7084A0021136B10B53BB94FF07F +:103E7000FF34C0E90431C46121B1086110BD1946A5 +:103E80001B69F3E71063F9E74C010024002310B528 +:103E90000380044683789A0708D513F0100F016B4E +:103EA0000E4B0FD0D3F88400FFF773F8A378DB072D +:103EB00012D50A4B2146D3F8880038B1BDE810402E +:103EC000FFF767B8586FFFF706F8EFE7D3F8800001 +:103ED000BDE81040FEF7FFBF10BD00BF4C0100243D +:103EE000C2780346D20701D4FFF7D0BF0422427044 +:103EF0000022C260034A516B816001B1C860536304 +:103F0000704700BF4C01002491F92020836810B550 +:103F10001BB193F92040944205DAC1E90230816077 +:103F200003B1D96010BD18469B68F1E783689A68B1 +:103F3000826002B1D06000221846DA607047C26821 +:103F40002AB18368936003B1DA600023C3607047CD +:103F500010B50146044664B12378F12B07D008461A +:103F6000FFF7EDFF2046BDE81040FFF7CDBFE46846 +:103F7000F1E710BD0123014643700148FFF7C4BFBC +:103F80006801002438B5164DEC6A44B3E369013B7F +:103F9000E36123BB6378732B06D009D8532B0BD076 +:103FA00003F0DF03432B0DD12046FFF7D4FE09E0D9 +:103FB00003F0EF03832BF6E72046FFF7CCFE214604 +:103FC000FFF728FC2046FFF7BAFFFFF7D3FF24696D +:103FD00024B1E369002BDDD000236361EC6238BDBE +:103FE0004C01002490F82230826B13F0100F0CBFAC +:103FF000602020201044704702234370014B9861D9 +:10400000704700BF4C01002470B5124D04462E7A53 +:10401000696990B9022E0FD16C6A6CB194F92020B5 +:1040200091F920309A4207DD2046FFF788FF0846C5 +:10403000FFF7B8FE6670AC6170BD022E05D190F935 +:10404000202091F920309A42F1DC2046BDE87040F2 +:10405000FFF790BF4C0100242DE9F04F85B0814659 +:10406000029128B96FF003010024FEF7F9FCBCE0CF +:10407000002A45D0966846B1B40702D1D368432BD5 +:1040800006D86FF008010020EEE7D368002BF8D1C6 +:104090009769D2E904453CB1600702D1002D40F098 +:1040A000B2806FF00A01EEE72FB17B1E372B03D9E8 +:1040B0006FF00B01E7E71827002D40F0A880D2E948 +:1040C00000A301934EBB574BD3F88800F0B1FEF725 +:1040D00046FF064600283AD04FF00108002C44D194 +:1040E000DFF840B1E5B9504ADBF88400556DB8B14E +:1040F000FEF735FF0246E0B148F01008344623E0F1 +:1041000092461446182715460192DCE70122442105 +:10411000D3F88000FEF7AAFEDBE74FF00008DDE7EA +:1041200022462946DBF87400FEF7A0FE024600286E +:10413000E4D1B8F1000F16D0DBF8882052B1104658 +:104140003146FEF726FF002248F002087CB96FF0E6 +:10415000040198E73146DBF880000392FEF7BBFECE +:10416000039A1446F0E74246EEE72246344640F210 +:10417000F1137FB2FD2184F802802380019BC4F8F3 +:1041800004A0E370002384F8207084F82170618417 +:104190006563C4E90233C4E90433C4E90633C4E9FE +:1041A0000933C4E90B32A5F140031344C4E90E39C5 +:1041B0001E4B13601C4B1B685B071AD4A36B0020BB +:1041C0001A4603F1340143F8040B9942FBD1184B12 +:1041D0002046C2E90D394FF08073D363029B13620E +:1041E000104B144A1A66FFF70FFF204605B0BDE8D2 +:1041F000F08FAD084FF0CC33113D002DDED0013DE6 +:1042000042F8043FF9E7002F7FF44FAF1827690702 +:104210007FF447AFA5F14801074B99427FF64FAFB6 +:104220003FE700BF4C01002480C40108A52E5AE2DC +:10423000E13D000861420008B7FFFF7F38B5044642 +:104240001546FFF7CFFE01602046FFF78BFD1DB13D +:10425000BDE83840FFF7D8BEBDE83840FFF78ABE5A +:1042600010B543780446332B0CD1416A90F82320D3 +:10427000FFF7C4FD014628B120460022BDE81040EA +:10428000FFF7DCBF10BD10B50446806918B10022ED +:104290001146FFF7D3FF6378232B02BFA3680022E8 +:1042A0009A6110BD70B50F4C267A022E18D1636A40 +:1042B000B3B16569E86AFFF78BFA2846FFF7E3FFB9 +:1042C00004F11C00FFF732FE4670A061EFF3098392 +:1042D000AB63002328466361BDE87040FFF700BE72 +:1042E00070BD00BF4C01002410B5044610B1037826 +:1042F000F12B07D020466FF00301FEF7B1FB6FF002 +:10430000030010BD437803F00F03022B1ED0032BD4 +:104310002BD0012B2ED1FFF712FEE06AFFF758FADF +:104320002046FFF7B0FF6178022926D11548FFF734 +:10433000FDFD154B41709861EFF30982A2630022E5 +:104340005A612046FFF7CCFD0020DAE70E4B1A7ABF +:10435000022A02D15B6A002BDFD16FF002012046F6 +:10436000FEF77EFB6FF00200CBE7FFF7E8FDFFF7FB +:10437000F9FCD2E76FF00201F2E70020FFF744FEFC +:10438000DFE700BF680100244C01002438B5174C5A +:104390000246237A022B27D1606A60B160694B1C08 +:1043A000427009D1FFF75EFD1148FFF7BFFD022300 +:1043B0004370A061012038BDE36A002213B1DD69BA +:1043C000A9420BD2C161C0E904325AB11061002B7D +:1043D000EAD0DA695861511AD961E5E71A46491BF2 +:1043E0001B69EBE7E062F2E70020E4E74C01002400 +:1043F0006801002438B50D4C00210D48A26DFFF76F +:104400002BFE0C4D636EA8625BB1984758B9E26D04 +:10441000E96C206EFFF720FEA864003818BF012069 +:1044200038BD0120FCE70020FAE700BF80C4010886 +:10443000714700084C01002410B50446EFF30583D2 +:1044400033B100206FF00501FEF70AFB002010BD1C +:10445000FFF776FC0028F4D12046DFF808C000DF23 +:10446000F5E700BF5940000808B5EFF3058313B125 +:10447000054B586908BDFFF763FC0028F8D1DFF849 +:104480000CC000DFF6E700BF4C010024D53D00085A +:1044900010B5044600F0AEF9EFF305833BB12046BA +:1044A0006FF00501FEF7DCFA6FF0050010BDFFF7B5 +:1044B00047FC0028F3D12046DFF804C000DFF5E711 +:1044C000E94200080C4A30B5536C002413B11D6951 +:1044D0008D420AD90161C0E902431BB11D69986090 +:1044E000691A19612CB1E06030BD1C46491BDB68BC +:1044F000ECE75064F8E700BF4C0100242DE9F041DF +:10450000184D6C6C54B3236901276E69013B23611C +:10451000236913BBE3680BB1A2689A606B64002344 +:1045200004F11801E86C1A46FEF780FF58B12146E5 +:104530000320D5E905836B61FEF709FC6B6913B9AC +:10454000B04508BF0026E378012B09D161692046F8 +:10455000FFF7B8FF6C6C002CDAD16E61BDE8F0811A +:104560006770F7E74C01002408B5FEF74DFF18B956 +:10457000034B044A1A6508BD4FF0FF30FBE700BF4C +:104580004C010024FD440008044607B54FF0FF33FA +:10459000002269462046FEF789FF0028F6D1DDE9B2 +:1045A00000309847F2E7000008B5094A094B1A6045 +:1045B000094B9B1A094A1360094A0A4B1A600A4BB5 +:1045C0009B1A0A4A136000F05FF800F091F800BFF0 +:1045D00000FC0724CC13002400000824C813002486 +:1045E000483F0024CC16002400FC0724C8160024F1 +:1045F00038B50E480B250E4B1C24456003600D4B4F +:10460000C4608360FFF72CF90B4B18600B480C4B10 +:10461000C460C0E900350B4B8360FFF721F90A4BFA +:104620001860BDE8384015F089BE00BF981300241B +:1046300054C50108AC130024A813002468130024F7 +:1046400061C501087C13002478130024FDF7A4B889 +:10465000024B4FF0FF311868FFF71AB9A813002476 +:10466000014B1868FFF72CB9A8130024024B4FF038 +:10467000FF311868FFF70CB978130024014B186854 +:10468000FFF71EB97813002408B501F0D3FC0C4BDA +:104690000C4998684FF00053C21802F1604212684A +:1046A00043F8042B8B42F7D1054B4FF000529A6030 +:1046B00014F0B6F815F006FABDE8084000F015B899 +:1046C00000ED00E0980200207047704708B500F048 +:1046D0003DF8FFF7F9FFFFF78BFFFFF7F6FF02F05A +:1046E00011FABDE80840FFF7B1BFFEF73BBB000081 +:1046F000104C114B23614FF4805363614423E360FA +:104700000E4BA3601823A3610D4B07B52246002171 +:104710000C482360FFF790FE034628B9224600901C +:104720001946094802F0F6F9FEF734FB00231A4651 +:104730000093F5E7A0370024A0270024D01300241D +:104740007BC50108CD4600081D0101801FB5064B41 +:104750006C460FCB84E80F002046FFF781F8034B2F +:10476000186004B010BD00BF80C501089827002460 +:1047700008B500F0A3F80000002307B5421E00931F +:104780000023042A19D8DFE802F003080C101400F3 +:10479000012219460B4802F0BDF9022219460A48C7 +:1047A000F9E7032219460948F5E7042219460848A3 +:1047B000F1E7052219460748EDE702461946064883 +:1047C000E9E700BF2501028026010280270102805F +:1047D000280102802A0102800001028010B5FFF743 +:1047E00043FE034B1B6813B1BDE81040184710BDD2 +:1047F00014140024024B1B6803B11847704700BF14 +:1048000014140024024B987A003818BF0120704716 +:104810004C01002408B5FEF7D3FA0022034902F048 +:1048200009FBBDE80840FEF7DFBA00BF05480008F5 +:1048300010B50C4601F08CFD0028124A1ADB00F17D +:104840006043F02103F5614383F80013936800F19E +:10485000100243F82240BFF34F8F002808DB0123EA +:10486000420900F01F0003FA00F0074B43F8220052 +:10487000002010BD00F00F03F021043B1344197613 +:10488000E4E700BF00ED00E000E100E008B502F061 +:1048900059FABDE8084001F05EBE0000014B1868FF +:1048A00001F08EBE10160024014B186801F04ABEBC +:1048B0001016002408B501F04BFD08BD024C08B5E8 +:1048C00023689847FCE700BFF001002403680BB1A0 +:1048D0000846184770470000044B0022C3E9012234 +:1048E0001A611A60024ADA60704700BF1814002487 +:1048F000CD48000810B50022034600F1110403F86A +:10490000012B03F8012B9C42FBD1418210BD00001A +:1049100042F60211024808B5FFF7ECFF08BD00BFE0 +:104920002C140024034B186818B14FF0FF31FEF728 +:10493000AFBF70479827002438B5054604686CB9A6 +:10494000FFF7F0FF2C6824B92C1D204603F076F900 +:104950002C60034B186808B1FEF7B2FF204638BD43 +:10496000982700240368012200211B691847036867 +:1049700000221B69114618476FF01500704707B5F4 +:10498000019002F015F80121019812F0D9FF03B04F +:104990005DF804EB02F016B807B5019002F008F8D4 +:1049A0000021019812F0CCFF03B05DF804EB02F097 +:1049B00009B807B5CDE9001001F0FAFFDDE90010F4 +:1049C00012F0BAFF03B05DF804EB01F0FBBF12F088 +:1049D00009BE12F0E7BD12F007BE12F009BE12F0D8 +:1049E00019BE000070B504461148FFF7A5FF03F09B +:1049F0002DF902F05FF902F081F9204612F0B2FCC5 +:104A0000061E054618BF0126764202F089F902F01B +:104A100063F92DB9204612F0E5FD02F01DFD60603E +:104A20000348FFF789FF03F02DF9304670BD00BF42 +:104A30004014002438B505460F48FFF77DFF03F00A +:104A400005F902F037F902F059F9284612F0A0FCF6 +:104A5000041E18BF012402F063F902F03DF96868F2 +:104A6000644208B102F0FEFC0348FFF765FF03F063 +:104A700009F9204638BD00BF4014002473B5104E1C +:104A80000D4604463046CDE90032FFF755FF03F0EE +:104A9000DDF802F00FF902F031F9009B2A46019986 +:104AA000204600F0D9FF044602F03AF902F014F96A +:104AB0003046FFF741FF03F0E5F8204602B070BD35 +:104AC000401400242DE9F04F0746154699468846C4 +:104AD0002DED028B83B012F085FD0646384612F0AC +:104AE00087FD8246384612F07FFD8346384612F035 +:104AF00091FD08EE100AB5FBF6F306FB1354002CEB +:104B000071D1B8F1000F6ED009EB05030AEB0B0071 +:104B1000834268D83548FFF70FFF03F097F8234624 +:104B2000B9F1000F52D0002B4ED12946384612F071 +:104B300039FDB5FBF0F400FB1454041B4C4528BFB1 +:104B40004C4618F0030F01D1A6422BD9B44241467E +:104B5000786828BF3446224615F0F8FDA64206D9EB +:104B60007868321B18EE101A204415F0FDFDD7F8B6 +:104B700004B0B2461023019302F09CF802F0BEF894 +:104B800053465A462946384612F096FC88B102F040 +:104B9000C7F802F0A1F8019B013B0193ECD14FF063 +:104BA000FF330CE0B4FBF6F406FB04FAC3465446AC +:104BB000E0E7019002F0B4F802F08EF8019BA9EB57 +:104BC00004092544A044ABE74FF0FF3307480193A5 +:104BD000FFF7B2FE03F056F8019B184603B0BDEC98 +:104BE000028BBDE8F08F4FF0FF33F6E7401400244E +:104BF0002DE9F04107460D46164612F0F9FC044631 +:104C0000384612F0F1FC2044AC19A04204D24FF017 +:104C1000FF342046BDE8F0811DD81E480024FFF770 +:104C20008BFE03F013F876B35CBB4FF0100802F074 +:104C300041F802F063F82946384612F0ABFB04460F +:104C4000A0B102F06DF802F047F8B8F10108EED11A +:104C50004FF0FF340EE02146384612F0A3FCB4FBBF +:104C6000F0F101FB10400028D1D1D6E702F058F84E +:104C700002F032F82946384612F094FC361A054400 +:104C8000D1E74FF0FF340348FFF756FE02F0FAFF7A +:104C9000BFE700BF40140024094B30B51A46094C49 +:104CA000D3F89450A542FBD1036829B181680B6009 +:104CB0004FF44073536130BDC1681B04F7E700BF78 +:104CC00000640258000300804168034630B471B1AB +:104CD000D0E9032000F0010402B944B1451001EB12 +:104CE00060000CB149598A58996830BC104730BCF3 +:104CF00070470000044B10B504460360806A08B199 +:104D000001F004FA204610BD98C5010810B504460C +:104D1000FFF7F0FF4FF48271204602F0A1FB20461E +:104D200010BD000070B50A4E0546306818B14FF04E +:104D3000FF31FEF7ADFD2C6824B92C1D204602F092 +:104D40007DFF2C60306808B1FEF7BAFD204670BDCB +:104D50009827002408B50346D0F8D80018B903F105 +:104D6000D800FFF7DFFFBDE8084002F08BBF08B5B1 +:104D70000346D0F8D80018B903F1D800FFF7D2FFE6 +:104D8000BDE8084002F062BF7FB506461D460446F6 +:104D900056F8303BCDE902211B6898479DF820303A +:104DA000304683F00103DDE9022100932B4613F026 +:104DB0009FFA2368064620465B689847A81B18BFE1 +:104DC000012004B070BD70B590B00D4614460021AE +:104DD0001C2202A815F0C8FC01260023294602A8BF +:104DE00000961A4600F084FE1C22002109A815F046 +:104DF000BBFC0023214609A81A46009600F078FE65 +:104E00000A9B1A68099B1A4203D16FF0010010B087 +:104E100070BD039B1968029B194046D109A80A245A +:104E2000FFF7C7FD09A8FFF7AAFD002109A8FFF7B2 +:104E3000C0FD002109A8FFF72FFF052002F04AFC62 +:104E4000012109A8FFF7B5FD012109A8FFF724FFFB +:104E5000052002F03FFC013CE7D102A8FFF78FFDDF +:104E6000214602A8FFF718FF052002F033FC0121BC +:104E700009A8FFF711FF052002F02CFC012102A870 +:104E8000FFF70AFF052002F025FC02A8FFF784FDCA +:104E900009A8FFF781FD0A9B1A68099B1A42B4D042 +:104EA000039B1A68029B1A42AFD00020AFE7002292 +:104EB000034600F1280143F8042B03F8012B994223 +:104EC000FBD17047F8B51A4B0D4600F130070021B1 +:104ED00003600446174B16460161A4228185436195 +:104EE0008061C0E90711C0E90911384615F03CFCA2 +:104EF000114B04F1D800C4F8D430FFF7D8FF204696 +:104F0000FFF735FF324629462046A4F80051A4F8A1 +:104F10000261FFF758FFB4F90221B4F900113846D5 +:104F200013F0ACF92046FFF715FF2046F8BD00BF8F +:104F300098C50108C94C0008A0860100D0F890303F +:104F4000012B10B5044686B004D9002084F89400E3 +:104F500006B010BDDBB204300493D0F88830039360 +:104F6000B0F99C300293B0F99A300193B0F99830BF +:104F70000093B0F99630B0F99420B0F9921013F084 +:104F8000DBFEB0FA80F04009E0E7000070B50A4EA1 +:104F90000546306818B14FF0FF31FEF779FC2C68F8 +:104FA00024B92C1D204602F049FE2C60306808B15F +:104FB000FEF786FC204670BD9827002408B5054BF7 +:104FC000186810B91846FFF7E1FFBDE8084002F085 +:104FD0003DBE00BF6814002408B5054B186810B921 +:104FE0001846FFF7D3FFBDE8084002F04BBE00BFF4 +:104FF0006814002438B5074B0546044645F8043BC1 +:10500000FFF7DCFF284613F02DFE2046FFF7E4FFF4 +:10501000204638BDF4C5010810B50446FFF7EAFF85 +:10502000B021204602F01CFA204610BDF8B51D46FE +:105030001A4B04460F46164600215C2240F8043BFA +:1050400015F092FBBDF918304FF400322046A4F859 +:105050009C302266BDF91C30099AA4F89E30C4F831 +:105060009020BDF920300E4AA4F8A0300023C4F8E7 +:105070008C200C4AA4F89670A4F89860A4F89A5072 +:10508000C4F8A430A4F86430C4F8883084F89430AC +:10509000C4E92A23FFF752FF2046F8BDF4C50108F2 +:1050A00040420F003D4F00082DE9F0479DF8207069 +:1050B000044689469246022F98469DF8246024D8DB +:1050C000134BDB5D0BB3B6FBF3F503FB156515F076 +:1050D000FF051AD103689B6898479DF82830204641 +:1050E00084F8646084F865300B9B84F86090C4F8A1 +:1050F0008830236884F861A0DB6884F8628084F8D3 +:10510000637098472846BDE8F0874FF0FF30FAE714 +:10511000E8C5010838B590F8943004460D4693B1BF +:1051200003689B6898472946C4F88C50201D13F0EB +:10513000E7FD0038236818BF0120DB6845422046A0 +:105140009847284638BD4FF0FF35FAE7F8B50446D2 +:105150000F4616460021202268301D4615F004FB3C +:1051600094F86030791C84F8683016BF002301235E +:1051700084F86970721C84F86A3094F8613018BF42 +:10518000266784F86C3094F8623084F86D3014BF70 +:105190000023012384F8743094F8633084F8783065 +:1051A00094F8643084F879306B1C16BF0023012317 +:1051B000E56784F88030D4F8883084F8843094F837 +:1051C000653084F88530F8BDF7B50093054690F852 +:1051D000943016460191DDE908740BB3ECB1E7B1E8 +:1051E0002368EBB103689B68984733462846DDE99E +:1051F0000021FFF7ABFF23463A4605F16801281D61 +:1052000013F0D4FE041E2B68284618BF0124DB6867 +:1052100064429847204603B0F0BD6FF00104F9E7FF +:105220004FF0FF34F6E7F7B50093054690F8943059 +:1052300016460191DDE908740BB3ECB1E7B12368C0 +:10524000EBB103689B68984733462846DDE90021A7 +:10525000FFF77CFF23463A4605F16801281D13F04D +:1052600083FE041E2B68284618BF0124DB686442B5 +:105270009847204603B0F0BD6FF00104F9E74FF006 +:10528000FF34F6E730B51D4685B090F894300446FB +:10529000CDE90221FBB103689B6898474FF0FF33CB +:1052A0002046DDE90221FFF751FF0A9B2A4604F15F +:1052B00068010193201D099B0093089B13F098FE41 +:1052C0000038236818BF0120DB6845422046984714 +:1052D000284605B030BD4FF0FF35F9E738B50A4C28 +:1052E0000A4D2378BFF35B8F13F0010F09D12046DD +:1052F00001F0D2FE28B113F0E9FE2860204601F04B +:10530000E2FE286838BD00BF941400249C140024D9 +:1053100038B50C4C0C4D2378BFF35B8F13F0010FA5 +:1053200009D1204601F0B8FE28B113F09FFE287085 +:10533000204601F0C8FEFFF7D1FF13F0CDFE28781C +:1053400038BD00BF9014002498140024D0E9021343 +:1053500070B5D0E908250446521845EB030300F068 +:10536000BBF8636B23B104F12800BDE87040184717 +:1053700070BD000038B50446154600F097F8064B9E +:10538000002220462360002384F83850C4E9082313 +:105390000023636338BD00BF18C6010813B5044677 +:1053A00001A800F0BBFE204600F0A0F8636B23B11B +:1053B00094F838300BB101F073FD002301A863634A +:1053C00000F0B4FE02B010BD70B5044615461E468E +:1053D00000F08CF8A069C4E9085600F00AFE2A180B +:1053E000204646EB0103BDE8704000F075B884B07C +:1053F00073B5054607AC01A884E80E0000F08EFEE8 +:105400006B6B23B995F838300BB101F035FD05F120 +:10541000280694E80F0086E80F00DDE90C232846F3 +:10542000FFF7D2FF01A800F081FE02B0BDE8704096 +:1054300004B0704710B5044600F0EEFD01220146AD +:105440002046FFF797FF024B2046236010BD00BFA8 +:105450000CC60108436B30B5044685B07BB100F142 +:1054600028036D460FCB85E80F000023636394F893 +:1054700038300BB101F014FD2846039B984705B066 +:1054800030BD000010B5044600F0C6FD0122014603 +:105490002046FFF76FFF024B2046236010BD00BF80 +:1054A00024C6010803681B681847000010B5084BA4 +:1054B00004460022084623600023A1610549C4E98F +:1054C00002230023C4E9043300F022FD204610BD6E +:1054D00030C60108A554000807B500F10801009086 +:1054E000806900F053FD03B05DF804FB00F1080192 +:1054F000806900F063BD0000034B10B504460360F3 +:10550000FFF7F4FF204610BD30C6010800207047A9 +:1055100000290CBF6FF01800002070470120704771 +:1055200084B001A804B080E80E0070476FF0150049 +:1055300070476FF0150070471120704738B5002391 +:105540000446836519B90A4600F011F803E0002A01 +:10555000FAD100F045F8204638BD10B5044600F0F9 +:1055600052F8204610BD4FF0FF3100F058B9032922 +:1055700038B5044607D9D31C23F003039A1A8A1AB4 +:1055800022F003011A4600230D46E260C4E9043309 +:105590000DBB22622560C4E9065100F005FA00F057 +:1055A00005FA2581606004F13000A57284F824506A +:1055B000C4E90A5500F01AFA00280BDB04F1440094 +:1055C00000F00CFA002805DB04F1480000F006FAB0 +:1055D00000EAE07038BD23696D0801332361D7E725 +:1055E00037B505460846019115F03EF8044638B136 +:1055F000024601992846FFF7BAFF6C6103B030BD3F +:105600004FF0FF30FAE770B504460568B5B9A36AF4 +:105610001BB14FF0FF31E06A984704F1480000F0F9 +:10562000DFF904F1440000F0DBF904F1300000F090 +:10563000E5F96069BDE8704015F01EB8EE6836B94E +:10564000EB6913B105F124009847AD68DEE7F36913 +:1056500013B106F124009847F668F0E773B50646E3 +:105660002731483021F00305019000F0BAF906F126 +:105670001803B46901985CB9F3699D4223D8346A70 +:105680005B1B6219F361012332622560A37107E09D +:105690002268954213D8E26872B11A60A3689360D9 +:1056A00000F0A1F900234FF0FF32E361C4E90532B5 +:1056B0002434204602B070BDA2681A60F0E704F1FD +:1056C0000803A468D7E700F08EF9F2E751F8083C28 +:1056D00073B505460C460BB108469847EB6833B1E5 +:1056E000A4F12406B34202D82B6AB34204D20023A9 +:1056F00004F81E3C02B070BD05F14800019000F0B6 +:1057000070F905F11802AB690198ABB11D6854F846 +:10571000241C8D420CD30FD144F8183C13689B68AD +:1057200044F81C3C166002B0BDE8704000F05BB964 +:1057300003F108029B68E8E7002344F8183C13686B +:10574000EEE7F8B54B6900F1440705460C469B1A95 +:105750001646002BACBFD318131C4B610389384687 +:105760008B8000F03EF9284603687BB35969626973 +:10577000A1EB020CBCF1000F25DB914226D19B6806 +:10578000A36013B104F108021A61036822460021E4 +:1057900042F80C3F99601A61AB6A046020616BB1FA +:1057A00095F8242052B12A68A24207D1E2682AB9AA +:1057B0006169E86A891B21EAE17198473846BDE8CA +:1057C000F84000F010B903F10800CDE7A36013B171 +:1057D00004F108021A610023E360DDE7F8B514461E +:1057E00005460F46A2F1240600F0E0F854F8103CFC +:1057F00002463146034444F8047C284644F8103CF1 +:10580000FFF79FFF296914F81E4C05F130008C400A +:10581000E968761A00F0F4F834432046F8BD2DE923 +:10582000F74F04460F464FF0000800F0BFF804F1B0 +:105830004406054607EB000984F82480304600F052 +:10584000D0F8636801A95B1B002B2368D8BF656093 +:1058500001931BB15A69521B002A37DD236003B143 +:105860001C61C1F80080019D15B12389013323819A +:10587000304600F0B8F801A965BB019D4FF0010A60 +:10588000002D34D100F092F8002F82465CDBA9EBAA +:105890000005002D5ADCA36A9BB1304600F0A1F848 +:1058A000A36A43B1226832B15169E06AA1EB0A01EF +:1058B00021EAE17198470123304684F8243000F052 +:1058C00092F80023A37203B0BDE8F08F03F1080142 +:1058D0009B68BEE7A8682B4600229A601A46DB68E0 +:1058E000002BFAD10A6005F108010546C4E72B6ACE +:1058F000D5F808B013B105F124009847AA69002A29 +:105900000BDB6B6913446B6100F050F829460246CB +:105910002046FFF716FF5D46B2E7E36873B1AB427E +:105920000CD8236AAB4209D3AB7922690133DBB2CD +:1059300013FA02F214BFAB7185F806A005F1240139 +:105940002046FFF7C3FEE6E74FF0FF35304600F094 +:1059500048F823683BB15969A1EB0A0121EAE171DA +:105960008D4228BF0D46304600F03DF8294604F12F +:10597000300000F048F8A37A7BB1304600F031F8EF +:10598000A37A3BB100233046A37203B0BDE8F04FC9 +:1059900000F029B8304600F026F800F007F8054678 +:1059A0004CE740F8081C704701F0CCB907B500F08F +:1059B000F8FF70B1084B6846196800F0E6FC4FF438 +:1059C0007A720023DDE9000116F0AAFA03B05DF84F +:1059D00004FB02F0FFF8F9E71016002400207047DE +:1059E000704700F0E5BF00F0EDBF0000024908B5C8 +:1059F00002F0CAF8002008BD34C6010802F0CDB894 +:105A0000012102F0C7B808B5012341EAE172194645 +:105A100002F0DEF8431E5842584108BDEFF31083F0 +:105A200072B6054A117831B9DB43044903F001032A +:105A30000B70012313707047A1140024A0140024DC +:105A4000034B00221A70034B1B7803B162B67047F8 +:105A5000A1140024A014002410461A4608B514F01E +:105A600075FE002008BD0000094B30B51A46094CF0 +:105A7000D3F89450A542FBD1036829B181680B602B +:105A80004FF44073536130BDC1681B04F7E700BF9A +:105A9000006402580003008070B50E4604461546A7 +:105AA00011F02AFF013609D02046002111F048FFED +:105AB00029462046BDE8704011F03EBF70BD70B56C +:105AC0000E460446154611F017FF01360CD020464D +:105AD0002946FFF7C9FF012111F032FF20460021BE +:105AE000BDE8704011F028BF70BD0022FFF7E7BF8E +:105AF000F8B5069F04460E461D4652B91A46FFF7F2 +:105B0000CBFF013616D039462046BDE8F840FFF7F6 +:105B1000ABBF11F0F1FE01360CD020463946FFF73D +:105B2000A3FF012111F00CFF29462046BDE8F840F3 +:105B300011F002BFF8BD0000004870473CC60108E4 +:105B4000024B1B680BB1024818477047F401002450 +:105B50003CC601081FB5431C10D105B05DF804FB1D +:105B600083420AD18968039012F0FAFE002103985B +:105B700005B05DF804EB12F083BF0C31B1F90030D1 +:105B80005A1CEDD10023024602481946009300F04A +:105B9000C1FF00BF30010180884207B502460AD02C +:105BA000431C08D0013105D0002305481946009355 +:105BB00000F0B0FF0146084603B05DF804FB00BFEB +:105BC00030010180B1F900305A1C01D118467047EC +:105BD000834201D1486870470C31F3E7421C13B58A +:105BE00004460AD0FFF7EEFF431C06D100232246ED +:105BF00003481946009300F08DFF02B010BD00BFAE +:105C000030010180B1F900305A1C01D118467047AB +:105C1000834201D1886870470C31F3E72DE9F047E2 +:105C2000466896F8327087BB03685B689847346AA9 +:105C300084422AD03369041B96F934201C40B3688F +:105C40003062A4FB0345CAB1736A14EB030845F143 +:105C50000009002A1BDBC2F12001A2F1200328FA6F +:105C600002F429FA02F509FA01F129FA03F30C43C7 +:105C70001C4304FA02F2A8EB02027262D6E90A326D +:105C80001B1945EB0202C6E90A32BDE8F087D6F8D7 +:105C90000CA03B4640464946524616F091F9044650 +:105CA0000D460AFB1082E8E7824206D98A420BD9E8 +:105CB000884294BF002001207047884206D98A425A +:105CC0008CBF0020012070470120704700207047E2 +:105CD0002DE9F74F456806462F6B27F07F4727F0E1 +:105CE000FF07002F69D1FFF799FF6B68D6F800A076 +:105CF000002B57D0D3E90001D5E90A238B4208BF16 +:105D0000824205D3DAF8143003B0BDE8F04F1847EB +:105D10007468D4E90A32D4F814B0B0EB030861EB2C +:105D20000209D4E906234B4508BF424520D3E36866 +:105D300094F933C0A3FB080103FB0911BCF1000F68 +:105D400013D0A268531EC01841F10001BCF1000F2E +:105D500024DBCCF12002ACF1200320FA0CF001FA94 +:105D600002F221FA03F310431843834528BF834608 +:105D7000226ADAF81030934422690BEA02021046D4 +:105D80000192984733685B689847019A0146286AF0 +:105D9000FFF78AFF88B133685B69B5E73B4616F0C9 +:105DA0000FF9E2E76B69286A2A691844DAF81030BB +:105DB000104003B0BDE8F04F184703B0BDE8F08FC6 +:105DC000436893F830202DE9F0470646002A74D145 +:105DD00093F83230002B70D103681B689847336802 +:105DE000DB699847364B0268002A08BF1A461146FD +:105DF0001C46B1FBF3F304FB13132146002BF7D130 +:105E00002F4B01257768B3FBF4F11F23B960013BE9 +:105E100003D305FA03FC6145F9D1B2FBF4F287F82C +:105E2000333001241F23FA6004FA03F5AA4201D09B +:105E3000013BF9D287F834304468231F1B2B93BFF2 +:105E400001234FF0FF332024A340A4F1040498BFA2 +:105E500003F1FF3312F1FF303B614FF0070303FA08 +:105E600004F44FF000034FEAE4797C61A4FB0145A0 +:105E70009A4601FB095543F1FF31201845EB01011A +:105E800016F09EF83368C7E906015B68C7E900AA07 +:105E9000984773683862002100200122C3F824A0CB +:105EA00083F832A01A86C3E90A013046FFF7B6FE2E +:105EB0003046BDE8F047FFF70BBFBDE8F08700BFF5 +:105EC00040420F002DE9D00316461F4642680024C9 +:105ED000059B8B605368C1E9006733B9CB606CB92F +:105EE0005160BDE8D003FFF7F3BED3E900894F4509 +:105EF00008BF4645F2D31C46DB68EEE7D2E90A2329 +:105F0000E160BB4208BFB242EBD2BDE8D0037047AC +:105F100038B505460C46FFF753FF00F049FD6B68A6 +:105F20001C60BDE8384000F04DBDF8B5054600F0F6 +:105F30003FFDD5E90034DB68984794F832301BB157 +:105F4000BDE8F84000F03EBD012384F831306368BD +:105F5000ABB12846FFF762FE6168D4E90A67D1E970 +:105F600000239F4208BF964209D36B685A68CB68EA +:105F700063602368002BEAD090689847E7E7002326 +:105F8000284684F83130FFF7A3FED9E710B586B074 +:105F9000CDE904210393089C029000F009FD0298CA +:105FA000FFF73CFE059902980094DDE90332FFF704 +:105FB00089FF06B0BDE8104000F004BD38B50546C5 +:105FC0000C4600F0F5FC6A685368A34209D1DB680F +:105FD00028465360FFF77CFEBDE8384000F0F2BC75 +:105FE0001346002BF8D0DA68A242F9D1E268DA60F1 +:105FF000F2E738B50446FFF7E3FE00F0D9FC20468F +:10600000FFF70CFE6368D3E90A4500F0DBFC20468D +:10601000294638BD704700000048704768C601082F +:10602000024B1B680BB1024818477047F801002467 +:1060300068C60108BFF35F8F114B00221968104634 +:106040005A60C1F307218A4216D11022DA600D4A44 +:106050001A611322DA600C4A1A611122DA600B4AC3 +:106060001A610B4ADA600B4A1A6107225A60BFF3C1 +:106070004F8FBFF36F8F70479A6001321861E2E76C +:1060800090ED00E039F00206390702133FF50B13DB +:106090001200008039000213BFF35F8F034B002210 +:1060A0005A60BFF34F8FBFF36F8F704790ED00E0E2 +:1060B000BFF35F8F064A00239360136923F0010347 +:1060C00018431061BFF34F8FBFF36F8F704700BF4E +:1060D00090ED00E0BFF35F8F012208498A60013232 +:1060E0000B69042A23F0010343EA00030B61F5D195 +:1060F000BFF34F8FBFF36F8F704700BF90ED00E08D +:10610000B1F90C20B1F9041013F034BA024B1B683A +:1061100003B11847704700BF1815002407B5019058 +:1061200000F046FC019803B05DF804FB07B5019050 +:1061300000F048FC019803B05DF804FB80687047EC +:10614000007B704738B50D4B0D4602730446036063 +:106150000023C0E901310A48FEF7EEFB01F076FDAD +:1061600055B1084B1A681C6062600548FEF7E4FBF5 +:1061700001F088FD204638BD6560F6E7A4C6010839 +:10618000201500241C150024144B10B50360044690 +:106190001348FEF7D1FB01F059FDA3682BB111495B +:1061A00062680B68A34212D10A600F4B0C481A6850 +:1061B000A24204BF00221A60FEF7BEFB01F062FD9E +:1061C000237B13B9201F01F04FF9204610BD19465B +:1061D0005B68A342FBD14A60E7E700BFA4C60108A1 +:1061E000201500241C1500244815002410B5044671 +:1061F000FFF7CAFF1021204601F032F9204610BDFA +:10620000F8B5064617480D46FEF796FB01F01EFD51 +:10621000154B1C68A4B1A76887B1384614F0A1FEDD +:10622000A8420BD12A463146384614F081FA28B9E3 +:106230000C48FEF781FB01F025FD11E06468E9E7F9 +:10624000072DF5D12A463146084814F071FA002886 +:10625000EED10448FEF770FB01F014FD044B1C68FE +:106260002046F8BD201500241C15002494C6010802 +:106270004815002470B50D46002604460C49C0E9B7 +:106280000066284614F09AFE3146284420602368B0 +:106290001A782F2A06D101332360FFF7B1FF60601F +:1062A000204670BD002AF8D0013301312360EEE7AB +:1062B000ACC6010800687047406808B520B1FFF718 +:1062C0003FFF431E5842584108BD10B50446FFF732 +:1062D000F3FF10B1606800B1043810BD406808B524 +:1062E00020B1FFF72DFFB0FA80F0400908BD10B5CE +:1062F0000446FFF7F3FF10B1606800B1043810BD29 +:106300004068003818BF012070476FF05700704791 +:106310006FF0570070476FF05700704710B5044694 +:10632000FFF7C4F8094BA0692360FFF762FE002263 +:106330000023C4E90C230023C4E90801C4E90A01CD +:10634000C4E90E33204684F8403010BDE4C601088D +:106350004FF0FF30704710B50446FFF7C7F8002331 +:1063600094F84020A3872AB184F84030BDE810405B +:1063700000F096BD10BD10B5044601F1300000F0EC +:10638000ABFAC4E90001204610BD10B50446886987 +:10639000FFF72FFEC4E90001204610BDD0E90C3202 +:1063A000013342F10002C0E90C32D0E90A3213F5A0 +:1063B0007A7342F10002C0E90A327047D0E90A2339 +:1063C00012F57A7243F10003FFF786B8F8B50D466F +:1063D00004468869FFF70DFED5E90A32C61A61EB5B +:1063E0000207002F08BFB6F57A7F05D200220023EE +:1063F000C4E900232046F8BD002F08BFB6F5FA6FA8 +:1064000001D20122F3E7002E4FF47A72304677F181 +:1064100001034FF00003B4BF0021394615F0D0FD51 +:10642000C4E90001E6E7F7B5054668460C46FFF704 +:10643000CDFF0021DDE90032A1634FF47A71A3FBA7 +:10644000016701FB0277D4E90A10891947EB0000C4 +:10645000C4E90A10D4E90C105B1840EB020228468C +:10646000C4E90C32C5E9003203B0F0BD2DE9F743B1 +:1064700099460446904690F83C3063B90146684618 +:10648000FFF7D1FFDDE900234B4508BF424505D3A7 +:10649000012384F83D3003B0BDE8F083214668460F +:1064A000FFF769FF009B4FF47A71B8EB0306019B7D +:1064B00069EB0307A8FB012301FB0933D4E9085169 +:1064C000551994F8402043EB01080123A38762B9D2 +:1064D000A269126892F8202032BB84F8403000F0A4 +:1064E000CBFC002F08BF052E0DD2002384F83E30D0 +:1064F00094F8403023B9012384F8403000F0BCFC0C +:106500002A4643460AE094F84030002BEDD101239F +:10651000B5F57A6284F83E3048F1FF33204603B087 +:10652000BDE8F043FEF7D8BF002F08BF052EDCD32F +:10653000EDE70000024B4FF080625A60704700BFE9 +:1065400000ED00E008B50121383000F0B3F908B1E2 +:10655000FFF7F0FF08BD012310B580F83F30044677 +:10656000836B0BB1FFF7E6FF2046FFF727FF10BD57 +:1065700090F83C3010B504464BB1002380F83C3015 +:1065800090F83E3013B9012380F83D3010BD90F8EB +:106590003F30002BFAD0836B01338363FFF7CAFFD0 +:1065A0002046FFF7FBFE2046FFF708FFEEE700005E +:1065B000024B4FF000725A60704700BF00ED00E0E0 +:1065C00010B50446FEF792FF002384F83F30FFF732 +:1065D000EFFF10BD102300F007B8202300F004B82F +:1065E000302300F001B840239C46F0B404AE754659 +:1065F000E80801D3EFF309860E4F0FCE0FC70FBC8B +:106600000FC74046494652465B460FC71DCE310074 +:10661000A60A00D304316E0900D248311FC7EFF338 +:1066200009806946EFF3148663C76046014900F0AC +:1066300079F800BFE0370024F0B52C4E85B0002477 +:106640002B4F35462146013456F8042B384600F0CE +:1066500095F90D2CF6D1AB6C264C02936B6C264849 +:1066600001932B6C0093696BD5E90E2300F086F93A +:106670002168224800F082F9E16AA26AA36AA06A4E +:10668000D2B2266BC3F30723E76B000CCDE9016799 +:1066900000901B4800F072F9A36A1E0603D5616BD7 +:1066A000184800F06BF9A36A180403D5A16B1648CB +:1066B00000F064F9EB6C190712D5144800F05EF98C +:1066C0002B6DDA070FD5124800F058F9EB6C5B0719 +:1066D0004CBF1048104805B0BDE8F04000F04EB97E +:1066E0000E4800F04BF90E48EEE700BFE0370024FB +:1066F000E8C6010800ED00E0F6C6010845C701083C +:1067000053C70108A2C70108B0C70108BEC70108E6 +:10671000CDC70108FDC7010809C80108EDC7010878 +:10672000DAC7010807B504460D461A48012100F0F2 +:10673000CAF868BB184800F021F9302C19D0402C59 +:106740001CD0202C1FD1154C154800F017F9154806 +:1067500000F014F9FFF770FF134800F00FF90D4B2C +:1067600000221A7000232A4610492046009300F0A8 +:10677000D1F90F480F4C00F001F9E8E70E480F4C33 +:1067800000F0FCF8E3E70E480E4C00F0F7F8DEE707 +:106790000024E7E73438002415C801083E01FF80D3 +:1067A0003EC801086BC8010876C8010895C80108F1 +:1067B0004DC801083F01FF8056C801084001FF8015 +:1067C00061C801083D01FF8014F026B814F07EB8BE +:1067D00013F0D2BFF8B5044672B60023234A4FF037 +:1067E000FF36234F13604FF0E0221D46516801F041 +:1067F0000F0101319A004FEAC30C02F1604202F529 +:106800006142C2F88060C2F88061002202EB0C0095 +:1068100001323844082A80F80053F7D101339942F5 +:10682000E8DC144B4FF020625A6040F2FA529C6050 +:10683000DA6000221D611146981801320C2A017697 +:10684000FAD14FF0FF3259629A620B4ADA621F2284 +:106850001A63FFF721FCD4E90031002282F3148887 +:106860009D4682F310880847F8BD00BF10E000E0A5 +:1068700000E100E000ED00E0020000C0034601225C +:10688000D3E84F0FC3E8412FC0B20029F8D17047B9 +:10689000D0E85F3F5B18C0E8523F002AF8D198B2B9 +:1068A0007047D0E85F3F5B1AC0E8523F002AF8D13A +:1068B00098B27047034653E8000F401A43E80002BD +:1068C000002AF8D170470346D3E84F0FC3E8421FB0 +:1068D000C0B2002AF8D1704738B5044600F068F815 +:1068E000D4E9004500F06EF82046294638BD08B5C9 +:1068F00000F05EF8FEE773B5002201460446022070 +:1069000000F04CFC0D2600F053F80022254614F848 +:10691000013B1BB900F056F802B070BD0A2B09D13B +:106920000D2A07D001220DF1070102208DF8076022 +:1069300000F034FC01222946022000F02FFC14F85C +:10694000012CE3E700B5A3B002460B46842101A861 +:1069500001F004F9832806D9074B1A681B79CDF892 +:1069600083208DF88730002802DD01A8FFF7C3FFE0 +:1069700023B05DF804FB00BFA5C801080FB407B53C +:1069800004A951F8040B0191FFF7DCFF03B05DF897 +:1069900004EB04B07047EFF31080C04300F0010037 +:1069A0007047EFF30580003818BF012070470000E2 +:1069B00008B5FFF733F8024A13680133136008BDC6 +:1069C0004C150024044A136823B1013B13600BB932 +:1069D000FFF736B8704700BF4C15002408B50B48C8 +:1069E000FFF74CFF28B1FFF7E3FFBFF34F8F20BF46 +:1069F000FDE7FFF7D6FF08B1FFF779FFFFF7CBFF01 +:106A00000028F9D0012000F0F1FC00BF8C15002413 +:106A100070470000F0B5294D8FB00E46174635EA95 +:106A2000200528BF05463022002102A813F09CFE55 +:106A3000234B01AC01952B440396012B05D9214B27 +:106A40009D4202D0033B9D4232D1F36B0293736BA4 +:106A500008931D4B5B69DA6B049305925A6B1B6BB1 +:106A600006920793FFF7A4FF184A13680133012B1E +:106A7000136009D12646164D0FCE0FC50FCE0FC598 +:106A80000FCE0FC533682B60124D0FCC0FC50FCC46 +:106A90000FC50FCC0FC52368A5F130002B600E4B3E +:106AA0001B6843B19847FFF78DFF00200FB0F0BD82 +:106AB00002970894CDE7FFF7ABFFF4E70101FF80F1 +:106AC000C2FE007F4001FF804C01002450150024CD +:106AD0005815002490150024541500240FB407B550 +:106AE00001210648CDF804E0FFF7EDFE019A0146CA +:106AF00010B90348FFF78EFFFFF770FF343800240A +:106B00000001FF8000207047014B1878C0B2704729 +:106B1000343800240446012106487646154608B557 +:106B2000FFF7D1FE20B9324629462046FFF772FF13 +:106B3000FFF754FF3438002409B9C82805D010F0F5 +:106B4000030F0CBF0120002070470846704700006B +:106B50002DE9F04180460C4641B338B34569A5F1B3 +:106B60004607882F22D88168D0E900364FF461604B +:106B700041433C2000FB06161B4928461E44D8F81A +:106B80000C30013B01FB03631146FFF7D5FF0C26D8 +:106B9000D8F81010CE2D06FB0010144951F8201023 +:106BA0000B4409D122B912498B4207D3002019E0C6 +:106BB000012A03D10F49F7E7462D0FD0691E89102E +:106BC000A1F111001AB9C82DC8BFA1F1120040F2FD +:106BD0006D1202FB0707044A02FB07332360012002 +:106BE00000236360BDE8F08180510100ACC801085A +:106BF0008022310000D12F00194670B5002A52D0F2 +:106C00003C24B0FBF4F304FB13001060B3FBF4F07E +:106C100004FB103418235460B0FBF3F403FB14039B +:106C200007209360231DB3FBF0F0C0EBC000181ADF +:106C300046239061536155692846FFF77DFF38B1BF +:106C4000B4F5B77F0DD30135A4F5B7745561F2E7FC +:106C5000B4F5B67F05D901356FF4B67355611C44A0 +:106C6000E9E7124B30251249D4615C430B2305FB45 +:106C700000151361002355F8046BA6420FD9013BA0 +:106C8000136113690C2505FB003051F820300120F9 +:106C9000E41A064BB4FBF3F40134D46070BD013345 +:106CA0000C2BE8D1EDE71046F8E700BF805101005A +:106CB000ACC8010810B5074CFFF77AFE208808B968 +:106CC000FFF708FA238801332380BDE81040FFF75F +:106CD00079BE00BFC615002408B5FFF769FE064A55 +:106CE0001388013B9BB2138013B90120FFF7F2F91F +:106CF000BDE80840FFF766BEC615002410B5074C76 +:106D0000FFF756FE208808B9FFF7D2F92388013330 +:106D10002380BDE81040FFF755BE00BFC415002416 +:106D200008B5FFF745FE064A1388013B9BB2138066 +:106D300013B90120FFF7BCF9BDE80840FFF742BED8 +:106D4000C415002438B5064C23683BB9054DFEF741 +:106D5000F3FE01462846FFF7E1FA2560206838BDBA +:106D600010160024C815002408B5836823B9054B04 +:106D70001B6893F83D0008BDC06898470028F6D00E +:106D8000F9E700BF10160024F7B504464FF0FF36B0 +:106D90006FF00047164D2046FFF7E6FF30BBD4E901 +:106DA0000023BB4208BFB24202D02868FFF75EFB57 +:106DB00001A8FFF7B3F92046FFF7D6FF98B9D4E949 +:106DC0000023BB4208BFB24207D100F08BF801A8F4 +:106DD000FFF7ACF9BFF36F8FDDE72B6893F83C301A +:106DE000002BF2D1F3E701A8FFF7A0F903B0F0BD43 +:106DF0001016002430B587B00D4D0446CDE90223AE +:106E00000A9B04930B9B0593FFF79CFF02A8FFF7D7 +:106E1000BBFF2868FFF79FFA68462968FFF703FB66 +:106E20002046DDE90023C4E9002307B030BD00BFE0 +:106E3000101600242DE9F0410E4D86B006460F468F +:106E400004A829689046FFF796FA2B68DDE904014B +:106E50009B6BC41A02A861EBE375A219CDE9007817 +:106E600045F10003FFF7C6FF0298001B06B0BDE81E +:106E7000F08100BF1016002413B5074C01212046F5 +:106E8000FFF706FD034628B9014600902288034813 +:106E9000FFF740FE02B010BD141600242301048049 +:106EA00013B5094C01212046FFF7FBFC4FF6FF7399 +:106EB000984206D100232288044819460093FFF720 +:106EC00029FE02B010BD00BF141600242401048066 +:106ED000034B188880B2B0FA80F04009704700BFB9 +:106EE0001416002408B5FFF763FDFFF7F1FF28B182 +:106EF00012F0D8FCBDE80840FFF764BD12F0C0FCFA +:106F0000F8E76FF01C0070476FF015007047012024 +:106F10007047002070477047034B186818B14FF056 +:106F2000FF31FCF7B5BC704798270024024B186866 +:106F300008B1FCF7C5BC704798270024F8B5154682 +:106F40000C468F18054EBC4205D014F8011B304684 +:106F500010F0EAFBF7E72846F8BD00BFBC3E00246E +:106F600038B511F001048DB205D0084812F006FAC8 +:106F7000041E18BF0124EB0605D5044812F00EFAD2 +:106F800008B144F01004204638BD00BFBC3E0024C8 +:106F900010B5044613F070FB204610BD10B50C462A +:106FA0002AB1044810F08CFB2070012010BD10465F +:106FB000FCE700BFBC3E002438B5084B044615462C +:106FC0000360074B1B6833B90648FFF799F8294659 +:106FD000044812F039FA204638BD00BF18C901082C +:106FE000E0210024BC3E00240020704700207047B0 +:106FF00073B50D4601466846FFF73CF96846FFF752 +:1070000064F9044638B912F0CFFD132303604FF042 +:10701000FF3002B070BD036868469E69FFF74AF909 +:107020002A4601462046B047041E04DA644212F0A4 +:10703000BBFD0460EBE70020EBE7012008B500F0A2 +:10704000D5F90000074A084913681844884283BFED +:10705000064B0C224FF0FF3010608CBF1A601846B0 +:10706000704700BFFC02002400FC0724443F0024BA +:10707000012070470120704708B5FDF7E9FA08BD07 +:1070800008B5FDF7EDFA08BD08B5FDF7EFFA08BD44 +:1070900008B5FDF7F3FA08BD10B50446037803F010 +:1070A0000303012B08D0FFF737FF237803F0030217 +:1070B000012A03D1FFF73AFF002003E043F0020367 +:1070C0002370012010BD037823F0030343F0010374 +:1070D0000370FFF72BBF00003F2870B504462EDC7D +:1070E000184D55F820305A1C13D1022811DCFFF737 +:1070F0007DFF034658B92046FFF776FF034630B9B7 +:10710000114E3378BFF35B8FDB0704D50F4B45F887 +:107110002430184670BD3046FFF7BEFF0028F5D07A +:107120004FF416520A490948FFF746FF3046FFF769 +:10713000CAFF084A08490548FFF79AFFE6E7002317 +:10714000E7E700BFFC01002418160024C416002441 +:1071500060C9010800000024176F000838B5054613 +:107160000024FFF7B9FF0B4B43F8254030B912F06C +:107170001BFD092303604FF0FF3038BD03685B69D6 +:107180009847051E04DA6D4212F00EFD0560F2E725 +:107190002046F2E7FC010024FFF7E0BF13B5CDE97C +:1071A0000021FFF799FFDDE9002140B912F0FCFC56 +:1071B000092303604FF0FF34204602B010BD03687E +:1071C000DB689847041EF7DA644212F0EDFC0460B5 +:1071D000F0E713B5CDE90021FFF77EFFDDE90021DF +:1071E00040B912F0E1FC092303604FF0FF34204660 +:1071F00002B010BD03689B689847041EF7DA64422A +:1072000012F0D2FC0460F0E710B5FFF765FF04460A +:1072100028B912F0C9FC09230360204610BD036899 +:10722000DB699847041EF8DA644212F0BDFC046082 +:107230000024F2E72DE9F74FB2F1000805460E46AB +:1072400009DA12F0B1FC162303604FF0FF34204638 +:1072500003B0BDE8F08FFFF7D7FF044660B31F4AC5 +:107260000027DFF87CA04FF00D0B535D3C469146A4 +:10727000B84521DDF25D0A2A1BD10D2B019318D0F0 +:10728000BC420CDA3A1B31192846FFF787FF002869 +:10729000019BDADB0444A742D9DC09F8053001225E +:1072A00051462846FFF77AFF0028CEDBCFD009F8F9 +:1072B00005B0F35D0137DBE7A045C8DDA8EB0402AC +:1072C00031192846FFF76AFF0028BEDB24181FBFCC +:1072D0003619024B16F8012C5A55B8E75C160024F3 +:1072E0000CC90108FFF790BF7FB5002A04460D4680 +:1072F00006DA12F059FC162303604FF0FF3019E054 +:107300000192FFF781FF019AE8B1114E01220DF1C0 +:107310000F012046FFF75DFF0028EEDB0AD09DF845 +:107320000F300D2B08D1325D0A2A3355EED00A23D7 +:1073300001202B7004B070BD0A2B02D1325D0D2AE2 +:10734000F3E73355F4E729462046FFF742FFF1E71C +:107350001C16002413B5CDE90021FFF7BDFEDDE9C1 +:10736000002140B912F020FC092303604FF0FF34E4 +:10737000204602B010BD03681B699847041EF7DA67 +:10738000644212F011FC0460F0E7FFF7E3BF10B5B0 +:10739000FFF7A2FE30B912F007FC092303604FF09B +:1073A000FF3010BD03689B699847041E04DA6442ED +:1073B00012F0FAFB0460F2E70020F2E70A4D0446FF +:1073C00008B52B68986812F0B7FC2B68D86812F0E3 +:1073D000B3FC0120FFF7DBFF0220FFF7D8FF0CB161 +:1073E000FFF785FAFEE700BF2403002408B5FFF786 +:1073F000E5FF38B50D46FFF76FFE044630B912F0D1 +:10740000D3FB092303604FF0FF3038BD0368DB690D +:1074100098470028204614BF4FF400534FF4004310 +:107420006B6023689B6A984728610020EDE7FFF7AF +:10743000E0BF00001FB5039013F016F9039A03464E +:1074400020B9014600900348FFF764FB05B05DF8E2 +:1074500004FB00BF1F010180FFF7ECBF13F004B96C +:1074600013F00AB913F008B910B504460B48FDF73C +:1074700063FA00F0EBFB0A4A4023002152F8040BA8 +:10748000A04208BF42F8041C013BF7D10348FDF7B6 +:1074900053FABDE8104000F0F5BB00BF9C16002475 +:1074A000FC01002410B512480324FDF745FA00F052 +:1074B000CDFB104B53F824207AB10134402CF9D184 +:1074C00012F072FB18234FF0FF3403600848FDF7F9 +:1074D00033FA00F0D7FB204610BD4FF0FF320448CE +:1074E00043F82420FDF728FA00F0CCFBF3E700BFB7 +:1074F0009C160024FC0100240EB42DE9F04187B055 +:107500000190FFF7CFFF041E13DB0023019904A8AD +:10751000214E0393FEF7AEFE04A8FEF7F1FE0546EA +:1075200068B912F041FB1323036046F824504FF072 +:10753000FF34204607B0BDE8F04103B0704704A80F +:10754000FEF7CCFE074604A85FB1FEF7D0FE03901D +:10755000039B124A46F8243000231355104A135552 +:10756000E7E7FEF7B2FE05460028DAD0036804A874 +:10757000D3F80880FEF79EFE0D9B024603A928461D +:10758000C04705460028E3D06D4212F00DFB0560B0 +:1075900046F82470CBE700BFFC0100241C16002431 +:1075A0005C16002470B50E461549054613F0B6FC6E +:1075B000044618B9FFF790FD204670BD11492846D2 +:1075C00013F0ACFC20B901200124FFF785FDF3E79F +:1075D0000D49284613F0A2FC20B902200224FFF72F +:1075E0007BFDE9E72B78402B02D1D5F80140E3E79A +:1075F00026F480312846BDE87040FFF77DBF00BF0C +:1076000080C9010887C9010878C9010810B5044676 +:107610000A48FDF791F900F019FB094B1B6803B10B +:107620009847084B1B6813B1D4E9000198470348F9 +:10763000FDF782F900F026FB002010BDD0160024D3 +:1076400008030024000300241FB502460B46002156 +:107650006846CDE90211CDE90023FFF7D7FF05B059 +:107660005DF804FB38B504461048FDF765F900F0F5 +:10767000EDFA0F4B1B682BB1984718B90020002179 +:10768000FFF7E2FF0B4B1B685BB198470025C4E98D +:107690000001A5600548FDF74FF900F0F3FA284610 +:1076A00038BD4FF0FF300146F0E700BFD016002490 +:1076B000040300240C0300241FB50446002168467F +:1076C000FFF7D0FFDDE900010CB1C4E9000104B00F +:1076D00010BD0000034B596A5A6A521A8242FBD30A +:1076E000704700BF000C004070B514466FF00046B4 +:1076F000126805460498B24207D238B101461846CE +:1077000012F096FC431C05D1206070BD15B18A4271 +:1077100038BFAB54236801332360F6E72DE9F04FFF +:107720002DED028B8DB00E46002105469DF8703080 +:10773000174607A814229DF8689004930691DDE986 +:1077400018AB13F011F8049B002B14BF3023202337 +:10775000B9F1010F08EE103A48D1BAF1000F7BF1F0 +:10776000000343DADAF1000ACDF80C906BEB4B0B17 +:10777000A9F102034FF00008DBB20593059B012B32 +:107780005ED8B9F1020F0AF00F030CBF3B4A3C4A26 +:10779000D35C06AA02F808304FEA1A134FEA1B120C +:1077A00043EA0B7393469A465AEA0B0308F1010425 +:1077B00044D1039B23B3049B3BB11D9B3A46314606 +:1077C000284600932D23FFF78FFF08F102041B9B2F +:1077D0009C421ADB049B3BB91D9B3A463146284626 +:1077E00000932D23FFF780FF013C1FE05AEA0B03B3 +:1077F00002D000230393BBE7302301248DF8183017 +:107800001B9B9C4212DA002303931D9B3A46314690 +:107810002846009318EE103AFFF766FF1B9B013BCA +:10782000A3421B93F1DC039B002BD3D10DF118086D +:10783000CCB90DB0BDEC028BBDE8F08FA0469DE742 +:10784000504659460A22002314F0BAFB06AB3032E8 +:107850005046594603F808200A22002314F0B0FBD2 +:1078600082468B46A0E71D9B013C3A463146009379 +:10787000284618F80430FFF737FFD9E78FC9010809 +:107880009FC901082DE9F04F1C468BB00023064626 +:107890000D46DDF8508017460993AAB1994213DBD3 +:1078A0000CBF012301F1FF354FF0000B079317F8D0 +:1078B0000B306BB946B1079B33B9099BAB4295BFFF +:1078C000079A079BF254735509980BB0BDE8F08FE7 +:1078D000252B40F02B810BF1010A17F80A30203BD1 +:1078E000DBB20D2B07D842F6090222FA03F3DB07BD +:1078F00048BF0BF1020A17F80A302A2B46D10021A3 +:107900000AF101020434084617F802C0BB18BCF1A2 +:107910002E0F62D193F801C0BCF12A0F51D0002282 +:10792000C7F10109069209EB030213F801CFACF18C +:10793000300C5FFA8CFEBEF1090F47D9BB5C682B97 +:107940004ED1BB185B78682B0CBF7223112303F058 +:10795000030A924417F80A90B9F1640F02D0B9F102 +:10796000690F62D1822B55D1073424F00704F4E863 +:10797000022303910121CDE90408029129463046F2 +:10798000CDE9002309AAFFF7C9FE87E0302B16D105 +:107990000AF1010A17F80A30302BF9D00120BA4455 +:1079A0000021AAEB07021AF8013B303B5FFA83FC87 +:1079B000BCF1090FA8D80A2202FB0131F1E700202F +:1079C000EDE7023254F8043B0693B7E7069A4FF00E +:1079D0000A0E0EFB02C20692A5E76FF00043F3E722 +:1079E0006C2B06D1BB185B786C2B0CBF8223212338 +:1079F000ADE76A2B08D07A2B08D0742B08D04C2B1B +:107A000014BF00236123A2E73123A0E741239EE7AF +:107A100051239CE7112B54F8042B04D0722B08BF80 +:107A200052B2D317A5E712B2FBE7B9F1750F03D035 +:107A300009F0DF02582A24D1822B0CD1073424F01C +:107A40000704F4E80223B9F1750F0391CDE90408A6 +:107A500011D1002191E7512B54F8042B09D0722B3E +:107A600003D0112B03D00023EDE7D2B2FBE792B293 +:107A7000F9E7D317E7E7B9F1580F0CBF032102214B +:107A80007BE7B9F1630F0CD154F8043B09AA2946EE +:107A90003046DBB2CDF80080FFF726FE0AF1010B7D +:107AA00005E7B9F1730F15D154F804BB0BF1FF3999 +:107AB00019F8013F002BF1D0069AA2EB09021BEB4B +:107AC000020FEBD009AA29463046CDF80080FFF717 +:107AD0000BFEEDE7B9F1700F1BD154F8049B302376 +:107AE00009AA29463046CDF80080FFF7FDFD78232E +:107AF00009AA29463046CDF80080FFF7F5FD00239E +:107B00004A46CDF81480CDE9033303230293D317FB +:107B100034E7252309AA29463046CDF80080B9F17B +:107B2000250F18BFDA46FFF7DFFDB7E709AA294698 +:107B30003046CDF80080DA46FFF7D6FDAEE70CB44C +:107B40001FB506AB002453F8042B00940393FFF7F2 +:107B500099FE04B0BDE8104002B0704713B5002490 +:107B60000094FFF78FFE02B010BD1FB5002304463E +:107B7000CDE90013031D6846029310230393FAF71F +:107B8000E5FE206004B010BD10B50446FFF7EDFF20 +:107B9000204610BD0068FAF7F1BE10B50446006833 +:107BA000FAF744FF204610BD10B49DF804400CB90C +:107BB00042F0020200685DF8044BFAF70DBF07B50A +:107BC000009313460022FFF7EFFF03B05DF804FBBC +:107BD000FFF7F5BF13B5FEF7EBFEFBF71BF9094BFB +:107BE00004461A6818608242074A82BF1168013150 +:107BF000116011680191FEF7E5FE2046019902B07F +:107C000010BD00BFFC160024F81600241FB5002389 +:107C100004460362084B002908BF1946031D684645 +:107C200002931C23009103930B230193FBF718FE8F +:107C3000206004B010BD00BFAFC9010810B50446F4 +:107C40000021FFF7E3FF204610BD000037B50446D2 +:107C50004FF0FF310068FBF71BFE054620B9236A91 +:107C60000133236203B030BDFEF74EFF0346002808 +:107C7000F8D12A46194602480093FEF74BFF00BF91 +:107C800015010280036A013B13B503620068FBF72C +:107C900017FE044648B1FEF737FF034628B90146F0 +:107CA000009022460248FEF735FF02B010BD00BF2B +:107CB0001701028010B504460068FBF719FE204644 +:107CC00010BD1FB50446002310466A46CDE90033B7 +:107CD000231D029310230393FBF710FF206004B0D1 +:107CE00010BD10B504464FF6FF72FFF7EAFF2046BD +:107CF00010BD0068FBF71ABF10B504460068FBF71B +:107D000043FF204610BD08B1FAF7CCBC704710B550 +:107D1000044603690430984704F15400FFF796FFC6 +:107D2000002304F140006361012384F83D30BDE885 +:107D30001040FFF7DEBF00002DE9F047DDE90857EE +:107D4000994604466B07884692464FF0000118BFDB +:107D500025F007064FF0440200F178000CBF2E46D4 +:107D6000083612F001FDB5FA85F300214D442022BA +:107D70005B0904F11C006161AD1B84F83C3084F8A0 +:107D80003D1025F0070512F0EFFC064BC4F830A0BB +:107D9000002F08BF1F46E562A662A761C4F83480C1 +:107DA000BDE8F087C9C9010813B5049CCDE90034CA +:107DB00013460A460021FFF7BFFF02B010BD0000C6 +:107DC00084B0F8B500F15407044607AD384685E89D +:107DD0000E00FFF73BFF636913B994F83D3043B1E0 +:107DE0003846FFF74FFF6FF00300BDE8F84004B0DE +:107DF0007047A36A53B100232349E26AB3EB920FA1 +:107E000018D2A26A42F823100133F6E7E06A1F4B4A +:107E10001F49984294BF20F003004FF0FF30FFF756 +:107E20001DFBA0620028E6D13846FFF72BFF6FF05C +:107E30000400DAE74423261D636204F17803236219 +:107E400095E80F0086E80F0004F11802214611485A +:107E5000FCF7F2FA606190B994F83C302BB1A06A5B +:107E600008B1FFF7FFFA0023A3623846FFF70AFFC5 +:107E700004F14000FFF73DFF6FF00200B5E7384620 +:107E8000FFF700FF0020B0E7A52E5AE2FBFFFF7FBF +:107E9000C4DB01080F7D000870B500F154050446ED +:107EA0002846FFF7D3FE04F140006669FFF721FF83 +:107EB0000023636194F83D302BB100242846FFF77E +:107EC000E1FE204670BD012384F83D30002EF4D041 +:107ED0003046FCF7DDFA0446F0E700000C4B10B525 +:107EE00004460360FFF7D8FF94F83C302BB1A06A3A +:107EF00008B1FFF7B7FA0023A36204F15400FFF7BB +:107F0000D9FE04F14000FFF7F7FE204610BD00BF88 +:107F1000ECC9010810B50446FFF7E0FFBC2120467C +:107F2000FFF79EFA204610BD012000217047D0E9DE +:107F30000601704700487047F4C901082DE9F04F69 +:107F400085B0154604461F46DDE90E6AD0E904896E +:107F50000430FCF740FDAB1983462046009347EB05 +:107F60000A03019323689B6B9847DDE9002399423C +:107F700008BF904203D2002005B0BDE8F08F18EB97 +:107F800005032A462046029349EB0703039323681F +:107F9000DDE90289196B3B46B8EB0B0869F1000972 +:107FA000884702460B464046494614F009F81343F9 +:107FB000E1D1236818EB06062046196B49EB0A0A43 +:107FC000009B13F1FF32019B43F1FF3388470246C8 +:107FD0000B463046514613F0F3FF13430CBF01200C +:107FE0000020C9E7F0B590F8207085B0044615462A +:107FF0000391DDE90A6C7FB10768CDE9006CFF6B86 +:10800000B84748B1226933460399201D2A4405B078 +:10801000BDE8F040FCF732BD6FF47A6005B0F0BD0A +:10802000F0B590F8207085B0044615460391DDE95F +:108030000A6C7FB10768CDE9006C3F6CB84748B166 +:10804000226933460399201D2A4405B0BDE8F0405B +:10805000FCF738BD6FF47A6005B0F0BDF7B590F865 +:10806000201004461546DDE9086771B10168CDE9C5 +:108070000067496C884740B121693246201D294478 +:1080800003B0BDE8F040FCF7B3BD6FF47A6003B015 +:10809000F0BD08B590F8203023B10430FCF797FC10 +:1080A000002108BD1846FBE708B590F820301BB149 +:1080B0000430FCF794FC08BD4FF0FF30FBE708B537 +:1080C00090F820302BB101690430FCF782FC0021CC +:1080D00008BD1846FBE708B590F8203033B10169B8 +:1080E00004301144FCF775FC002108BD1846FBE77D +:1080F00090F820302DE9F347044603B9436204F1B8 +:10810000240959E8001F013149E80015002DF8D174 +:1081100001290BD104F1040801914046FCF762FCEF +:108120000199054630B14846FEF7C4FB284602B027 +:10813000BDE8F087D4E90420A36901919E18E369A2 +:1081400043EB00074046FCF748FC82464046FCF7FC +:1081500042FC002350440199BB4208BFB04205D203 +:1081600048466FF47A65FEF7A5FBDFE740460191CC +:10817000D4E90467FCF72FFC002301999F4208BF54 +:108180008642EDD3D4E90423134304D14046FCF7DF +:1081900022FCC4E90405D4E90623134311D1404667 +:1081A000FCF71BFC06464046FCF715FC0023821931 +:1081B000D4E9041043F10003511A63EB0000C4E951 +:1081C0000610012384F82030B0E790F8203010B575 +:1081D000044613B94362002010BD01212430FEF78C +:1081E00069FB0028F7D184F82000201DBDE810406D +:1081F000FCF720BC034B10B504460360FFF7E5FF16 +:10820000204610BD08CA010810B50446FFF7F2FF6A +:1082100028212046FFF724F9204610BD13B50C4C49 +:1082200004600024C0E90414013180F82040446255 +:10823000C0E90144C0E9062400D032B90023054852 +:1082400000941A461946FEF765FC02B010BD00BF47 +:1082500008CA01080101FF80012000217047D0F801 +:1082600060010021704700000048704754CA0108AF +:10827000D0E944017047FF2070472DE9F04F89B0E5 +:108280009046994605469DF84820C3469DF85030D3 +:1082900090F8FA71DDE915610591032A57D8DFE8F6 +:1082A00002F01B02190302270F2B4FF0000205F109 +:1082B000040A08BF95F8FD31114650460092039319 +:1082C0003B46CDE90122FCF7EFFE044638B109B088 +:1082D000BDE8F08F0327E7E74FF0FF3BE4E7059B9E +:1082E0004FF0FF329DF84C105046079307ABCDE995 +:1082F00000635B46FCF768FF3B4683462246214607 +:108300005046CDE90244CDE90044FCF7CDFE0028FB +:10831000DDD1BBF1000F01D05846D8E795F8010137 +:108320000028D4D0B9F1000F08BFB8F1040F04D170 +:10833000337843F00A033370EEE7B9F1000F08BF5A +:10834000B8F1020FE8D1337823F00403F3E74FF0DC +:10835000FF30BCE710B5044619461046D4F8183172 +:1083600001331AD104F5847201F03AFC431CD4F8AD +:10837000602109D020440121002390F854010842D3 +:1083800005D0723354F823201046D11710BD0133A5 +:108390004900042B49B2F2D1F6E74FF48050002196 +:1083A000F4E72DE9F04705689DF820C09DF824E02A +:1083B0009DF82880DDF82C90D0E90114DDE90C67E8 +:1083C0004FEA640A05EB6400E40744BF55F80A402D +:1083D0006158CDE90C67CDE90A89CDE908CEBDE841 +:1083E000F047084730B5039D00241C702C708C7832 +:1083F00014F0200F15D04A7AC0F8E02001221A703C +:108400000B7A03F01F0380F8FD310B7A5B119B00A0 +:1084100080F8FB31022380F8F93180F8FE3100202A +:1084200030BD102A0FDD0A7CD2060CD5CA7EC0F8FA +:10843000E02001221A702A708B7E03F01F0380F85F +:10844000FD318B7EE2E762060FD5CA7AC0F8E020E4 +:1084500001221A708B7A03F01F0380F8FD318B7AAA +:108460005B1180F8FB310223D7E70B7CDD070ED5CB +:10847000CB7DC0F8E0308B7D03F01F0380F8FD3129 +:108480008B7D5B115B0080F8FB310123C3E7E206C3 +:1084900009D5CB7BC0F8E0308B7B03F01F0380F85D +:1084A000FD318B7BEDE7E3070DD54B7BC0F8E0306A +:1084B0000B7B03F01F0380F8FD310B7B5B1180F811 +:1084C000FB310123A9E70323C0F8E030A7E72DE93A +:1084D000F7430A9E044615460C9FDDF83880DDF808 +:1084E0004090019100F07EF858B933462A46019930 +:1084F000201D0A97CDE90B8903B0BDE8F043FCF7D6 +:10850000C1BE03B0BDE8F0832DE9F04300238BB07A +:10851000814642F2107801240025002600278DF8BC +:1085200027300120FFF7EFFB0DF127034FF0FF325B +:10853000052104930023484600934FF0FF33CDE913 +:108540000645CDE90267FFF7C2FF9DF8273013F01B +:10855000010302D0B8F10108E3D183F001000BB0B0 +:10856000BDE8F083F0B500258BB004468DF82750A8 +:10857000FFF7CAFF18B94FF0FF300BB0F0BD00266F +:10858000002704954FF0FF3200954FF0FF3306218E +:108590002046CDE90667CDE90267FFF798FF05465B +:1085A0000028E8D12046FFF7AFFF0028E3D00122E2 +:1085B0000023052120460095CDE906230DF1270370 +:1085C0004FF0FF3204934FF0FF33CDE90267FFF71E +:1085D0007EFF0028CFD19DF8270080F0020040F3F5 +:1085E0004000CAE770B51D46D0F8F43086B00646A4 +:1085F000013317D0140E8DF81740FFF7B3FF70B991 +:1086000001234FF0FF32D6F8F41000930DF1170359 +:10861000CDE90100301DFCF735FE06B070BD4FF00E +:10862000FF30FAE790F8FA31032B0ED06B1C08BF2D +:10863000B2F1FF3F09D0002D08BFB2F1807F2CBFFF +:108640004FF0FF30002040B2E7E70020E5E72DE9DA +:10865000F04786B0904605460F46109BDDF83890EF +:1086600005934A460F9BFFF7BDFF044698BB95F85C +:10867000FD312E1D95F8F9210393304695F8FE3112 +:1086800095F8F811029395F8FB31CDE9002395F8A0 +:10869000FA31FCF709FD04468246E0B995F8FB2162 +:1086A00005AB39463046B2FA82F25209CDE9008371 +:1086B00052424B46FCF788FD044695F8FA31524683 +:1086C00051463046CDE902AACDE900AAFCF7ECFC00 +:1086D000002818BF0446204606B0BDE8F0872DE903 +:1086E000FF4100F1BC0804460D46174640461E46B1 +:1086F000FFF7ACFA2046DDE90A23CDE90076CDE9A3 +:1087000002232A46D4F8E010FFF7A1FF00284046D4 +:108710000CBF00246FF47A64FFF7B4FA204604B06B +:10872000BDE8F081F7B5089E1546099B0446324620 +:108730000A9F0191FFF756FF58B933464FF0FF32B9 +:108740000199201DCDE9085703B0BDE8F040FCF7C2 +:108750006ABD03B0F0BD30B587B00446154605913B +:10876000FFF740FF40B9034600902A460599CDE93E +:108770000100201DFCF786FD07B030BD2DE9F04F4C +:10878000054689B0884614461E4600F1BC09DDE95D +:108790001223134353D0D5F8F0714FF0000B20464D +:1087A00031463A465B4613F00BFC1299511804917E +:1087B00013994B410593DDE9040159454FF0000B36 +:1087C00008BFB84248462CBFBF1A129FBA46CDE92F +:1087D00006ABFFF73BFA2846FFF7C4FE10BB06AB1B +:1087E0004246022128460293CDE90046FFF79AFF50 +:1087F00000BBDDE906239B4508BF97421AD1E41967 +:10880000129B2846B84446EB0B06DB1B1293139BC6 +:1088100063EB0B031393FFF777FE70B14846FFF746 +:1088200031FAB4E7074C4846FFF72CFA204609B066 +:10883000BDE8F08F6FF47A64F5E7034CF3E70024AA +:10884000F4E700BF5CF0FFFF5DF0FFFF2DE9F04FA4 +:10885000164689B0044600F58472194630461F4614 +:10886000DDE912AB01F0BCF9231816EB0A08054646 +:1088700093F8543147EB0B090593D4E944234B4556 +:1088800008BF424504D2414C204609B0BDE8F08FF4 +:10889000236832462046196B3B46884702460B4602 +:1088A0003046394613F08CFB1343ECD118F1FF32FC +:1088B00023682046196B49F1FF33884702460B466F +:1088C0004046494613F07CFB1343DCD104F590731A +:1088D00004F1BC0906935AEA0B0354D0D4F81811DA +:1088E0004B1C43D1069B52460598CDE90253CDE976 +:1088F00000675B4601F092F904EB8000D0F8B811F4 +:10890000D0F8C831484698460791FFF79FF92046AE +:10891000FFF728FE68BB32463B4607992046CDE963 +:1089200000ABFFF718FF48BB16EB08064FF000033B +:1089300047F10007BAEB080A6BEB030B5AEA0B038B +:108940000CD004EBC503D3E95A23BB4208BFB242A3 +:108950003FBF0135631993F8543105932046FFF763 +:10896000D3FD70B14846FFF78DF9B4E74FF480535B +:10897000C8E7074C4846FFF785F985E76FF47A6446 +:10898000F8E7044CF6E700247EE700BF5BF0FFFF4A +:108990005CF0FFFF5DF0FFFF2DE9F04F91F83930FB +:1089A0008BB091F8382007461B0103F0100343EA0F +:1089B0001213082B54D019DC022B11DC93B10023C5 +:1089C000002400254FF0FF320493382100934FF02C +:1089D000FF33CDE90645CDE90245FFF778FD01E01B +:1089E000042B2ED000200BB0BDE8F08F102BF9D156 +:1089F0004FF001084FF0000909AC4FF0000A4FF0AA +:108A0000000B00254FF0FF324FF0FF336521049437 +:108A10000095CDE90689CDE902ABFFF758FD9DF839 +:108A200024304FF0FF32612103F07F03049400955E +:108A30008DF824304FF0FF33CDE90689CDE902AB44 +:108A400033E00023002400254FF0FF32049335214A +:108A500000934FF0FF33CDE90645CDE90245BCE771 +:108A60004FF001084FF0000909AE002400254FF037 +:108A7000000A0F4A002365210496CDF800A0CDE935 +:108A80000689CDE90245FFF722FD9DF82430084A0A +:108A9000712143F040030496CDF800A08DF82430F6 +:108AA0000023CDE90689CDE90245384695E700BFA8 +:108AB000030080002E4B9F21D0B51B788AB003267F +:108AC000002709AA8DF824300023044604924FF0B1 +:108AD000FF32ADF8253000934FF0FF33CDE9066744 +:108AE00000260027CDE90267FFF7F1FC00283CD102 +:108AF0009DF824309D2B1ED005D8012B1FD01F2B95 +:108B000028D00AB0D0BDBF2B12D0C22BF9D19DF80E +:108B100025300020202B84F8F0001FBF012384F8AB +:108B200000310323C4F8E4301523C4F8EC30E8E73F +:108B300084F80301E5E70123C4F8E430E1E79DF898 +:108B40002520022ADDD19DF82620202AD9D184F8BB +:108B50000131D6E79DF82530892BD2D13123C4F8D5 +:108B6000E830012384F80231CBE74FF0FF30C8E74B +:108B70005ACA01083F2A2DE9F04782468AB040F3DD +:108B8000A78091F83F3013F0400219D0032300254D +:108B90008AF8FA319AF8FA31032B0DD100220AF142 +:108BA00004001146CDE90222CDE90022FCF77CFA4F +:108BB000002818BF6FF47A6528460AB0BDE8F08730 +:108BC000D90710D50024002504924FF0FF330092FE +:108BD000B7214FF0FF32CDE90645CDE90245FFF759 +:108BE00076FC88BBD2E713F0020212D0FFF7BAFC82 +:108BF00000286BD1002200230490B721009050463A +:108C0000CDE90623CDE902234FF0FF324FF0FF33C9 +:108C1000E5E713F0100138D0012600270DF12704F5 +:108C20004FF000084FF000098DF8272000924FF018 +:108C3000FF334FF0FF32B5210494CDE90667CDE94B +:108C40000289FFF744FC08B1224DA3E79DF82730C5 +:108C5000504643F001038DF82730FFF783FC0546AB +:108C6000A0BB04904FF0FF324FF0FF33B1215046CC +:108C70000094CDE90689CDE90267FFF728FC0028BA +:108C8000E2D103238AF8FA3184E713F0080214D002 +:108C900080230022049117218DF827300023CDE98D +:108CA000062301220023CDE902230DF127034FF013 +:108CB000FF3200934FF0FF3391E713F004054FF0BC +:108CC0000203DFD0C521C0F8F41060E7024D61E770 +:108CD000002571E75EF0FFFF5CF0FFFFD0B50446B2 +:108CE00090F8020188B0F0B191F8343013F0080226 +:108CF00024D0002100284FF000034FF000004FF077 +:108D0000FF32049300934FF0FF33CDE90601CDE924 +:108D100002010CBFF02199212046FFF7D8FB28B1B2 +:108D2000164808B0D0BD91F83D30DFE72046FFF788 +:108D3000EBFB0028124818BF0020F2E7DB06EFD556 +:108D40000026002704924FF0FF33009266214FF077 +:108D5000FF322046CDE90667CDE90267FFF7B7FB92 +:108D60000028DDD14FF0FF324FF0FF3399210490FE +:108D70000090CDE90667CDE90267CDE75EF0FFFF21 +:108D80005DF0FFFFF0B5012289B000230026002727 +:108D90000C46049105210546CDE9062300234FF03A +:108DA000FF3200934FF0FF33CDE90267FFF78FFBEF +:108DB00098B9D5F8E430013B0FD0013400904FF062 +:108DC000FF32D5F8EC100494CDE90630CDE9026706 +:108DD0004FF0FF332846FFF77AFB09B0F0BDD0F81B +:108DE000E83001332DE9F047054688B08A461DD1A9 +:108DF000FFF7B8FB28B14FF0FF34204608B0BDE8BC +:108E0000F0870022002301210490CDF800A0CDE9D5 +:108E10000623D5F8E4304FF0FF32CDE902304FF0B1 +:108E2000FF332846FFF753FB0446E6E7FFF79AFBBC +:108E30000028E0D14FF000084FF00009012600277C +:108E400004904FF0FF324FF0FF3301212846CDF858 +:108E500000A0CDE90689CDE90267FFF738FB04469B +:108E60000028CAD12846FFF77DFB0028C3D10AF1AC +:108E700001014FF0FF324FF0FF3304940091D5F819 +:108E8000E810CDE90689CDE90267CAE73B4B1A78BD +:108E9000002373B5ADF801300446ADF8053090F805 +:108EA00002318DF800208DF804205BB991F83A303A +:108EB000C3F30213013B042B5AD8DFE803F0034B42 +:108EC000500303000123C4F8F830C4F8FC30D4F890 +:108ED000F830591C09D0D4F8FC104A1C05D002AA5D +:108EE000134401228A4003F8082C01A92046FFF709 +:108EF00049FF9DF806309DF802202046BDF800107D +:108F00001343BDF804209DF800600A4301A99DF8B1 +:108F10000150ADF804208DF80630FFF760FF2046C1 +:108F2000FFF7F2FA30B3002301A92046ADF8043070 +:108F30008DF80630FFF726FF9DF804301E409DF89F +:108F400005301D4056EA05030CBF4FF0FF300020EE +:108F500002B070BD0023C0F8F8300623B5E7072340 +:108F600000203E25C4E93E033F23C4E93A53AEE75F +:108F70000020EDE74FF0FF30EAE700BF5ACA0108D2 +:108F8000284B30B51B788BB005468DF82430002374 +:108F9000ADF82530FFF7B8FA18B94FF0FF300BB035 +:108FA00030BD95F803414CB1012C1FD02846FFF786 +:108FB000ABFA80F00100C0B24042F0E72846FFF76C +:108FC000D1FA0028E9D100220023049098210090D2 +:108FD0002846CDE90623CDE902234FF0FF324FF0BA +:108FE000FF33FFF774FA0028E0D0D6E709A9284636 +:108FF000FFF7C8FE0028D0D1D5F8F8307BB9D5F8F6 +:10900000FC309C4044F00304E4B29DF8243009A9EC +:1090100028461C408DF82440FFF7E1FEE3E70324D7 +:10902000F3E700BF5ACA0108204B002230B51B7875 +:1090300087B0044611468DF8143004300223ADF891 +:109040001520CDE90222CDE90022FCF72DF818B158 +:109050004FF0FF3007B030BD05A92046FFF792FE64 +:109060000028F5D19DF81630204643F002038DF814 +:109070001630FFF777FA0028EAD105A92046FFF756 +:10908000AEFE05460028E3D12046FFF73DFA002852 +:10909000DED005A92046ADF814508DF81650FFF724 +:1090A00071FE003818BF01204042D3E75ACA0108B8 +:1090B00084B02DE9F0439DB0044625AD299E85E896 +:1090C0000E0090F8023132682899002B7AD04FF0C8 +:1090D00024084FF0000908AB01272846039300231A +:1090E0000097CDE904894FF05A084FF00809CDE9FF +:1090F0000189884730B14FF0FF301DB0BDE8F04323 +:1091000004B070470C22002328462899CDE9042397 +:1091100014AB6022CDE902930023CDE900788847A3 +:1091200005460028E7D104F5847708A8394600F001 +:10913000BFFD0028DFDB394608A800F0B2FD00289B +:10914000D9DB716808A800F00FFD08A9C4F8F00188 +:109150002046FFF7C3FD0028CDD1394608A88DF879 +:109160001E508DF81F5000F00AFD0028C3DB0DF1E2 +:109170001F0308A9204600930DF11E037268FFF734 +:1091800031F99DF81E3093B194F8003113B12046A7 +:10919000FFF74AFF08A92046FFF778FE0028AAD16A +:1091A0009DF81F301BB108A92046FFF7F5FB94F886 +:1091B000F030A3B92046FFF7A7F980F00100C0B254 +:1091C00040429AE770680827CDE9040308A8039095 +:1091D0005A20CDE901070120009028469FE77268D8 +:1091E00008A92046FFF7C6FC0028E3D083E700006B +:1091F00010B586B004466846039180E80C0006A8C6 +:1092000000E90C0010E90700034B84E80700204642 +:10921000E36006B010BD00BFA38300082DE9F04F46 +:10922000D0F8B45093B0044655B1494A494BB5F112 +:10923000FF3F0CBF15461D46284613B0BDE8F08F12 +:1092400000F1BC09261D4846FEF700FD94F8FA31EE +:109250002A4629463046CDE90255CDE90055FBF7AF +:1092600023FF28B16FF47A654846FEF70BFDE3E76C +:1092700094F804320BB9C4F80052D4F800720137E4 +:10928000012FC4F80072EFD10023D4F8F411304656 +:1092900084F8FB3184F8FD31FBF73CFF05460028DC +:1092A000E0D12046FFF730F900284FD02046FFF7E5 +:1092B00001FC0028D6DB0DF11808DFF8A4B00EAED3 +:1092C00004F5847A21464046CDE90EB5C4E94255FD +:1092D00096E80C00C4E94855FFF78AFFCDF800A0D6 +:1092E00098E80F0000F01DFB002801DA1A4DBBE7DB +:1092F0000DF128082146CDE90EB5404696E80C0050 +:10930000FFF776FF0D9BCDF804A02046009398E868 +:109310000E00FFF7CDFE0028E8DB2B465A4621461B +:109320003046CDE904B5FFF763FFCDF800A096E81D +:109330000F0000F043FB0028D8DB2046FFF720FE9B +:1093400005460028D2D184F804728DE7034D8BE7DF +:109350005AF0FFFF59F0FFFF5EF0FFFF5DF0FFFFE7 +:109360007B820008F8B518480D46FBF7E5FAFEF7D2 +:109370006DFC164A1068092820DC154B1B68991EE5 +:109380001C4603F1120631F9027FAF4219D0B142F7 +:10939000F9D1143321460234B1F9006001360AD103 +:1093A0000D800130002410600748FBF7C5FAFEF776 +:1093B00069FC2046F8BD9C42ECD1F2E76FF0010455 +:1093C000F2E74FF0FF34EFE7001700242C170024DA +:1093D000281700247FB5294D0446BDF9286040F8C0 +:1093E000045B0B9DCDE90265BDF924500195BDF9E3 +:1093F000205000950025FBF719FE04F1BC00A4F8ED +:10940000B860FEF71BFC0C9B31462046C4F8F431D3 +:10941000C4F8005284F80452FFF7A4FF0021C4F8F6 +:10942000B40000204FF0FF330122C4F86051C4F8AB +:109430001831C4F8E830C4F8FC30C4F8282184F8A6 +:10944000545184F8FD5184F8FE5184F8F020C4E9A9 +:1094500044014FF400310320C4F8F8110221C4E99B +:109460003D33C4E938014FF0807335212046C4F8FC +:10947000EC10C4F8003104B070BD00BF68CA010828 +:1094800010B513480C46FBF757FAFEF7DFFB114BFC +:109490001B6803F114011A460233B2F90000A0421E +:1094A0000AD14FF6FF7313800B4A1368002B01DDBE +:1094B000013B1360002403E08B42ECD14FF0FF34FA +:1094C0000348FBF739FAFEF7DDFB204610BD00BF6D +:1094D00000170024281700242C170024F0B500F1F1 +:1094E000BC07044689B03846FEF7B0FB94F8045236 +:1094F0003DB93846C4F80052FEF7C4FB284609B00F +:10950000F0BDD4F80062013EC4F8006226B13846CE +:109510000025FEF7B7FBF1E70022002304212046D7 +:1095200004960096CDE90623CDE902234FF0FF33E0 +:109530004FF0FF32FEF7CBFF002884F80462384674 +:109540000CBF00256FF47A65FEF79CFBD4F8B430AD +:10955000002BD3D1B4F9B8102046FFF791FFCDE727 +:1095600008B51420FDF778FF4FF6FF71831E00F158 +:10957000120223F8021F9342FBD1014B186008BD71 +:10958000281700247047704790F820301BB14068BE +:1095900003681B6918476FF47A6070472DE9F04340 +:1095A00090F820C085B00446154698460391DDE941 +:1095B0000C67BCF1000F16D0CDE900670168D1F847 +:1095C0003C90C84778B1E3680399D4E90102046884 +:1095D000AA18CDE90C67646948EB0303A44605B0FB +:1095E000BDE8F04360476FF47A6005B0BDE8F083F2 +:1095F0002DE9F04390F820C085B004461546984602 +:109600000391DDE90C67BCF1000F16D0CDE90067CE +:109610000168D1F84090C84778B1E3680399D4E96C +:1096200001020468AA18CDE90C67A46948EB03039A +:10963000A44605B0BDE8F04360476FF47A6005B01A +:10964000BDE8F0832DE9F34190F82010044615465B +:109650009846DDE9086799B10168CDE90067496C72 +:10966000884768B1E368D4E901020168AA18CDE926 +:10967000086748EB0303C96902B0BDE8F041084739 +:109680006FF47A6002B0BDE8F08190F820301BB131 +:10969000406803685B6B18476FF47A607047D0E9E5 +:1096A00004017047D0E902017047D0E9042110B5E8 +:1096B000D0E90234981844EB010110BD007E7047D8 +:1096C000407E7047406810B103689B6C1847704734 +:1096D00010B504462821FDF7C3FE204610BD90F8C2 +:1096E00020301BB1406803685B6A184700200021E6 +:1096F000704790F820301BB1406803689B6A184798 +:1097000000200021704790F820301BB140680368AA +:10971000DB6A184700200021704790F8201030B411 +:1097200059B1D0E90114C0680D6812192D6B40EBD6 +:1097300003030846294630BC08470020002130BCFE +:10974000704790F820307BB100F11C0353E8002FE4 +:10975000013A43E800210029F8D12AB980F82020F5 +:1097600040680368DB681847002070472DE9F7431D +:1097700000F11C03064653E8002F013243E80025A0 +:10978000002DF8D1012A70D1706803689B68984752 +:10979000054660BB706803685B6A9847422838BF1B +:1097A00042200446FDF758FE07467068C4F5007273 +:1097B00003683946CDE90045D3F814802B46C047ED +:1097C000054688B9423C3C4494F84030552B50D172 +:1097D00094F84130AA2B4CD1737E04EB031313F899 +:1097E000102C520608D0244D3846FDF73BFE0023CE +:1097F00086F82030F36138E013F80C2C0F2A04D8D7 +:1098000048F22103D340DB07EDD470680368DB6ABC +:109810009847737EB0F5007F024603F1FF3338BFEF +:109820004FF4007204EB03131979317653F8080FE3 +:10983000FFF7A9FEA2FB0089C6E902895868FFF775 +:10984000A2FEA2FB002370680168C6E90423CDE9EB +:1098500000234246496C4B4688470028C3D0012369 +:10986000384686F82030FDF7FDFD284603B0BDE8F8 +:10987000F083024DB8E700BFE2F3FFFFE3F3FFFF21 +:1098800030B5084C00254276C0E900410021002493 +:109890000176C16180F82010C0E90245C0E90445A5 +:1098A00030BD00BFBCCA010810B5042206490446F9 +:1098B00010F03EFF28B96379012B02D1A079013065 +:1098C00010BD4FF0FF30FBE718CB01088378012B68 +:1098D00024D14268130EFF2B0ED10378812B0DD0BB +:1098E000842B12D043B922F07F420A60C2789200E2 +:1098F000502AA8BF50224A600020704722F07F42C1 +:109900008A61C3789B00CB61F6E722F07F42C1F801 +:10991000D020C3789B00C1F8D430EDE74FF0FF3082 +:1099200070472DE9F04F8FB0082400254FF05A09F9 +:1099300008AFA34687E80F000CAB002238460B990E +:10994000039301230294CDE90039CDE904450023B6 +:109950008847A84226DB0CA8FFF7A6FF061E23DBDC +:10996000A846AA460794B04522D0079B224638460F +:109970000B99CDF80490CDE9043A0CABCDE902B3D4 +:10998000012300932B468847002813DB18990CA865 +:10999000FFF79CFF002808DB083408F1010845F1B7 +:1099A0000005E0E74FF0FF3630460FB0BDE8F08F1E +:1099B0000020FAE74FF0FF30F7E700002DE9F04F05 +:1099C00091B006AC1A9D84E80F00AB690BB1E86951 +:1099D00078B9012300242B62D5E902326B6213F1BE +:1099E000FF3342F1FF32C5E91832204611B0BDE81D +:1099F000F08F5C49FDF732FD074600285AD0EB692D +:109A00004FF0000A082103902046CDE9043A5A237A +:109A1000CDE901310123099900935346AA6988478A +:109A200050453EDB3E780DF13008D5F81C9016F01D +:109A3000020694E80F0088E80F007AD1B9443C464A +:109A40000DF12F0A22460834A1452AD314F8063C0A +:109A50000120002114F805BC5268CDF80CA0CDE916 +:109A6000040103F00F019B094046029114F8071C02 +:109A70000093002301910F998847002811DB9DF87E +:109A80002F30760014F8082C1BEA030FF6B2237867 +:109A900018BF46F00106D20703F002034BD4002B97 +:109AA000D0D04FF0FF3440E001335200042BD2B24B +:109AB00033D13AE04FF0FF3497E7431C0A2B2B6277 +:109AC000EFDC6FF04C0A043405F1240E05F14C066E +:109AD00005F1600C0F210023AAEB050A226814F897 +:109AE000048B22F0FF0208F00F0802F5807201EAF1 +:109AF00008014EF8042B013A06F8018B13440AEBD7 +:109B0000060298464FEAE379904203F10103ECE83C +:109B10000289E3DC00230122AB6512EA0104C3D011 +:109B20003033002455F82330AB653846FDF79AFCF6 +:109B30005BE73C465646EA693A4421788807B0D547 +:109B400004F108039A42ACD3A078831C04EB83038E +:109B50009A42A6D394F801C0B445AED0C907A0D4A8 +:109B60001C46EAE7C4DB0108282981BF90F82800D9 +:109B700003110120984098BF4FF4807070474B68E4 +:109B80001C2BF0B524D9012301F1B00401F1C0066A +:109B90004FF0FF379C4644F8047B027F0CFA02F238 +:109BA000012AE2600CD9457F44F8045C8D6DAA421D +:109BB00000D305B98A6591F84C201A4381F84C20EE +:109BC0005B00B44200F10200DBB2E4D1002006E009 +:109BD0004078FF2808614FF0FF3018BF0020F0BD2B +:109BE000F0B504460D46D2E902018D4208BF844219 +:109BF00011D2136A7BB1012B0BD06032002083425B +:109C000009DDF2E80267AF4208BFA64202D2013086 +:109C1000F5E70020F0BD4FF0FF30FBE72DE9F04FF6 +:109C200089B003264FF00809159F059007F1A80B8E +:109C3000DDE9128ACDE9002318F1FF3306934AF1DA +:109C4000FF330793149B093307EBC307059B13EA04 +:109C5000090F1ED05BF8264000254046514622469B +:109C60002B4612F0ADF9134313D1DDE90023AB42CB +:109C700008BFA2420DD3069B1B190293079B6B41A1 +:109C80000393DDE90201D7E900238B4208BF82423A +:109C900003D2013E4FEA5909D8D2304609B0BDE897 +:109CA000F08F436800200133DB08C1E902307047C0 +:109CB00090F90700C017704742884378007843EA5C +:109CC000022340EA032070470B0A017043700B0C1B +:109CD000090E8370C1707047036A0239023B8B42E0 +:109CE00083BF4389406B01FB03000020704702469D +:109CF00000F10B01002012F8013B03EBC0138A4274 +:109D000003EB500303F0FF00F5D17047026810B574 +:109D100004465AB1114611F8013B1F2B11D93A2BB9 +:109D2000F9D11378303BD8B2092802D94FF0FF306F +:109D300006E002329142F9D1032B1846F6DC21608D +:109D400010BD014B1878FBE74417002438B50D46C9 +:109D5000044618B9092000232B6038BD0368002B86 +:109D6000F8D01A78002AF5D08188DA889142F1D1AA +:109D7000587802F0A5FF10F00100EBD12368EBE763 +:109D80000328CA7E8B7E08BF487D43EA022302BFB8 +:109D90000A7D42EA002243EA024318467047131242 +:109DA0008A76CB760378032B01BF120C0A75121248 +:109DB0004A75704738B5C378044613B9002528465C +:109DC00038BDD0E90E210123407802F0A5FF0546F9 +:109DD00080B9A16BE36A626ACB1AE0709342EDD25C +:109DE000A378022BEAD10A440123E16B607802F0E8 +:109DF00093FFE4E70125E2E738B5836B05460C469F +:109E00008B420FD0FFF7D6FF58B922460123E96BEA +:109E1000687802F063FF00281CBF4FF0FF34012078 +:109E2000AC6338BD0020FCE738B500230446C3709E +:109E30004FF0FF338363FFF7DFFF002851D1E46B5E +:109E4000237894F8FF5194F8FE01EB2B40EA0525A6 +:109E500003D01833DBB2012B3CD84AF655239D4280 +:109E600007D10822214904F1520010F061FC0028BA +:109E700036D0227BE37A43EA0223A3F50072B2F5DF +:109E8000606F27D8607B28B3591E421E0B400240EA +:109E900013431FD1E27BA37B53EA02231AD0237C16 +:109EA000013B012B16D8A27C637C53EA022311D01C +:109EB000227DE37C43EA02237F2B06D804F12000B5 +:109EC000FFF7FAFEB0F5803F04D3E27DA37D53EAAD +:109ED000022308D14AF6552085420CBF02200320F8 +:109EE00038BD0420FCE70020FAE700BF44CB01089E +:109EF00001292DE9F84304460E46174640F28380B7 +:109F0000036A8B427FD90378022B45D0032B5AD0AA +:109F1000012B78D101EB51098389C16AB9FBF3F3B5 +:109F20001944FFF769FF054660BBA38916F00106D7 +:109F3000E06B09F10108B9FBF3F203FB12920FBFCA +:109F4000FBB2835C03F00F013B011CBF03F0F00385 +:109F50000B4383540123E16A2046E370A389B8FBD5 +:109F6000F3F31944FFF748FF054658B9A389E16B9D +:109F7000B8FBF3F003FB10803EB1C7F307170F5493 +:109F80000123E3702846BDE8F8830B5CC7F3032781 +:109F900023F00F031F43F2E783895B08B1FBF3F360 +:109FA000C16A1944FFF728FF05460028EAD1A289B3 +:109FB0007600B6FBF2F302FB1366E36B9F5598192C +:109FC0003F124770DCE783899B08B1FBF3F3C16A5A +:109FD0001944FFF711FF05460028D3D1A389B60025 +:109FE00027F07047B6FBF3F103FB1161E66B0E44FB +:109FF0003046FFF761FE00F0704047EA000130464E +:10A00000FFF762FEBCE70225BCE70129F8B504466C +:10A010000E4664D9036A994261D20378022B30D08C +:10A02000032B45D0012B5AD101EB51058389C16A1D +:10A03000B5FBF3F31944FFF7DFFE10B14FF0FF302B +:10A04000F8BDA1896F1C2046B5FBF1F301FB135548 +:10A05000E36BB7FBF1F15D5DE36A1944FFF7CCFEFA +:10A060000028EBD1A289B7FBF2F302FB1373E26B7A +:10A07000D05CF30745EA00204CBF0009C0F30B0099 +:10A08000DEE783895B08B1FBF3F3C16A1944FFF78C +:10A09000B3FE0028D2D1A2897600B6FBF2F302FB10 +:10A0A0001366E36B9A19985D527840EA0220C7E77D +:10A0B00083899B08B1FBF3F3C16A1944FFF79CFE47 +:10A0C0000028BBD1A189B600B6FBF1F001FB1066F8 +:10A0D000E06B3044FFF7F0FD20F07040B0E7012066 +:10A0E000AEE7B1F5001FF8B504460D4601D30220D6 +:10A0F000F8BDCA06FBD1826806680161DAB9337817 +:10A10000022B01D9336BABB93389B3EB551FEED9B1 +:10A11000336BA361A3696261002BE8D0B289002090 +:10A12000B5FBF2F10B4402FB1151F56BA36129441D +:10A13000E161DDE71A467389B7895F43BD42114685 +:10A140000CD32068FFF761FF431C02460BD00128A7 +:10A15000CDD9336A8342CAD9ED1BEFE73046FFF70A +:10A16000BBFDA061D6E70120C2E72DE9F0418046A2 +:10A1700005680F4649B96E69C6B12B6AB34298BFEC +:10A180000126AB69A3B9002406E02846FFF73DFF8E +:10A190000128044603D801242046BDE8F081421C72 +:10A1A00051D02B6A8342F7D83E46EAE70126E8E71A +:10A1B000BE4215D12B6A741CD8F80000A34298BF88 +:10A1C00002242146FFF721FF0128E4D0431C3AD0A6 +:10A1D000D8B16B69012B03D92A6A934238BF1E4656 +:10A1E000344601342B6AA34202D8012ECBD9022473 +:10A1F0002146D8F80000FFF708FF40B10128CAD077 +:10A20000013020D0B442ECD1BDE7002CE8D04FF0B3 +:10A21000FF3221462846FFF76BFE90B957B92A6AEC +:10A22000AB69023A6C61934210D92B7943F0010378 +:10A230002B71B1E7224639462846FFF759FE002820 +:10A24000EDD00128A7D14FF0FF34A5E7013BAB616A +:10A25000EBE72DE9F3410C46064611460568012C53 +:10A2600047D92B6AA34244D94AB9A046214630684F +:10A270002746FFF7CAFE044658B9002006E04FF013 +:10A28000FF322846FFF734FE0028EED002B0BDE8CA +:10A29000F08101282DD0431C2DD0002239462846BC +:10A2A000FFF726FE0028F1D12A6AAB69023A9342F1 +:10A2B00005D20133AB612B7943F001032B717B1C79 +:10A2C000A34212D041462846FFF706FD39460090CA +:10A2D0002846FFF701FD6B89A0466A46013B042131 +:10A2E00018440190687802F041FD2B6AA342BDD862 +:10A2F000C3E70220CAE70120C8E770B50446FFF7AC +:10A3000059FD0546002840D12378032B35D1267905 +:10A31000012E32D10146A289E06B10F025FAE36BE1 +:10A3200055224121722083F8FE21AA2283F8FF21C1 +:10A330005223E26B137053706123D1709370E26B00 +:10A3400082F8E73182F8E40182F8E50182F8E6114B +:10A35000E06BA16900F5F470FFF7B6FCE06B616992 +:10A3600000F5F670FFF7B0FCA26A3346E16B0132EC +:10A370006078A26302F0D0FC25710022607811465B +:10A3800002F0F4FC003818BF012070BD2DE9F04741 +:10A390000027D0F8009006460C468F758369002B85 +:10A3A00000F09C80C36A013327D100232E251A4672 +:10A3B00043E002378046D9F81030D85B48B3B8F193 +:10A3C000000F05D100F520539BB2B3F5006FF0D319 +:10A3D00040F2B51140EA084002F018F9FF28C5F133 +:10A3E000FF0A0DD9BAF1010F12D963190212D875FB +:10A3F0009A7502231D440020DBE7B8463D46DAE7A4 +:10A4000030B1BAF1000F0DD0631998750123F1E74F +:10A410000025B8F1000F4FF0000318BF00252544B8 +:10A42000AB75C2E75546F4E70B2B03D81A46531C0D +:10A43000224451720B2814D00246F169501C895CE9 +:10A440002029F7D0052908BFE5210928ECD10B2BDD +:10A45000F2D804EB030703F101027D72E7D1134642 +:10A46000EAE7E21800215172A27D12BBBBB16FF086 +:10A47000080504F1090208202D1BAB1812F8011B76 +:10A4800081B12E298BB22BD0A3F14101192904D817 +:10A49000F169097B084200D020331373EDE73F23B5 +:10A4A000A3750123234400229A75F3691B7B03B92A +:10A4B0006372F369DB7A03F03F032372F16901F100 +:10A4C0001C00FFF7F9FB2060CA7D8B7D43EA022365 +:10A4D000E3804A7E0B7E43EA0223A380BDE8F08737 +:10A4E0001020DAE700232DE9F04F0B6087B00F460C +:10A4F0001646FFF70BFC051EC0F25B81B44B53F808 +:10A500002540002C00F057813C6006F0FE062378C1 +:10A510006BB1607802F0D4FBC10708D41EB110F013 +:10A52000040600D00A26304607B0BDE8F08F0023AD +:10A53000E8B22370607002F0C5FBC20700F13D81F4 +:10A540000EB14307EED404F10C020221607802F050 +:10A550000DFC064608B10126E5E7A089A0F50073C9 +:10A56000B3F5606FF7D8431E0342F4D1E36B002BC1 +:10A5700000F0F58000212046FFF756FC022840F04D +:10A58000FE80E56B02AF05F5E371B84605F20625DE +:10A590000846FFF791FB103148F8040B8D42F7D1C4 +:10A5A000002557F8041B002900F0E1802046FFF742 +:10A5B0003BFC012800F2DC80E56BB4F80C902A7BB0 +:10A5C000EB7A43EA0223994540F0DF80E87DA97DDC +:10A5D00051EA002104D105F12400FFF76DFB01468B +:10A5E000616295F810A0D4F838B00AF1FF3384F80E +:10A5F00002A0012B00F2C9806B7B6381002B00F06D +:10A60000C4805A1E1A4240F0C080AA7C95F811807E +:10A6100048EA02280FFA88F2A4F8088000924FEA6C +:10A620005912B8FBF2F702FB178292B2002A40F0EF +:10A63000AC802A7DE87C50EA022005D105F120009B +:10A640000193FFF739FB019B95F80FC0AA7B52EAF3 +:10A650000C2200F09A8001FB0AFC174407EB0C0E59 +:10A660007045C0F09280A0EB0E009842B0FBF3F76B +:10A67000C0F08B80574B9F4200F287804FF6F573F6 +:10A680009F4240F29C804FF0030A02375A440BEB82 +:10A690000E03BAF1030F2762C4F828B0E2626363C5 +:10A6A00075D195F82B2095F82A3043EA0223009AB9 +:10A6B0001A4313B2002B68D1BF0005F12C00FFF73D +:10A6C000FBFA206309F1FF331F44B7FBF9F9894511 +:10A6D0005BD84FF0FF33BAF1030FC4E905334FF0F5 +:10A6E0008003237130D195F8312095F8303043EA5A +:10A6F0000223012B28D10BF101012046FFF77CFB3F +:10A7000010BBE16B207191F8FF2191F8FE3143EA13 +:10A7100002234AF65522934216D10846FFF7CCFA97 +:10A720002D4B984210D101F5F270FFF7C5FA2B4B73 +:10A73000984209D101F5F470FFF7BEFAA06101F566 +:10A74000F670FFF7B9FA6061254A84F800A0138813 +:10A7500001339BB21380E3800023E361E3E602F060 +:10A76000ABFAE06300287FF405AF1126DBE6032097 +:10A770000135042D7FF415AF042806D1EBE604283B +:10A780003FF4E9AE01287FF617AF0D26CBE6B8F10E +:10A79000000FFAD0BAF1020F4FEA470362441ABF22 +:10A7A000DB1907F001071F46226318BF07EB5307A9 +:10A7B00088E70B26B7E60C26B5E60326B3E640F697 +:10A7C000F57A57458CBF4FF0020A4FF0010A5CE75B +:10A7D00034170024F5FFFF0F52526141727241613C +:10A7E000301700242DE9F34104460191FFF7E2FA06 +:10A7F000054600284DD101992046FFF76DFAA28940 +:10A800002946A0630746E06B0FF0AEFF6289A58979 +:10A810005543B5F5004F28BF4FF40045A389AB421F +:10A8200028D2284602F048FA804608B96D08F5E7B4 +:10A83000A3899D421ED92A4600210FF095FFA389C6 +:10A840000026B5FBF3F56389B34209D8404602F010 +:10A8500035FA6089801B18BF012002B0BDE8F08185 +:10A860002B46BA194146607802F056FA0028EDD11D +:10A870002E44E8E7E56B00266389B342E9D901235A +:10A88000BA192946607802F047FA0028E1D101366A +:10A89000F2E70120E1E72DE9F04107690446884627 +:10A8A00006682037B7F5001F24BF00238361836942 +:10A8B00083B1B289B7FBF2F002FB1072002A38D1E3 +:10A8C00001336169A36139B93389B3EB571F30D8BC +:10A8D0000023A36104200AE07389013B034228D1CD +:10A8E0003046FFF792FB0128054602D80220BDE85A +:10A8F000F081421C01D10120F9E7336A834212D86A +:10A90000B8F1000FE4D061692046FFF72EFC054640 +:10A91000D0B10128EAD0431CEDD001463046FFF704 +:10A9200061FF0028E7D1294630466561FFF7D4F979 +:10A93000A061B28900202761B7FBF2F302FB137319 +:10A94000F76B1F44E761D2E70720D0E7C16A4B1CD1 +:10A950002DE9F04104460568066918D1E5274FF056 +:10A960000108A1692846FFF747FA60B9E3691F703B +:10A9700085F803802369B3420DD201462046FFF7D4 +:10A980008AFF0028EDD0042808BF022003E0FFF76B +:10A99000A8FB0028E2D0BDE8F08100002DE9F04FCF +:10A9A000002185B00446D0F800A0FFF79AFB0746C7 +:10A9B000002840F092804FF0FF094FF0FF33C84667 +:10A9C000E3620093A1695046FFF716FA0746002894 +:10A9D00040F08380E5692E78002E00F08280EA7ACC +:10A9E000E52E02F03F03A37103D0100704D50F2B0F +:10A9F00004D0009BE36253E00F2B59D194F82B3025 +:10AA0000590643D4720649D5236906F0BF0695F866 +:10AA10000D90E3626B7B4B4542D1EA7EAB7E53EAFD +:10AA200002233DD12F780122DAF810B007F03F075A +:10AA30007B1E0D275F432C4B13F8011B681815F87C +:10AA40000180407848EA00286AB3FF2F039327D893 +:10AA5000404601F00FFE791C02903BF8170001916F +:10AA600001F008FE029A82421AD101994246039BE4 +:10AA70000F461E499942DFD12B785B0603D512B1F0 +:10AA80003BF8173063B9013E5FFA86F80021204693 +:10AA9000FFF701FF0746002894D01EE0B045B9D06B +:10AAA0004FF0FF08F2E74FF6FF718845E1D0F7E776 +:10AAB000B8F1000F04D12846FFF719F948450CD02A +:10AAC00094F82B7017F0010793D10B2204F12001A9 +:10AAD00028460FF02DFE00288BD1384605B0BDE882 +:10AAE000F08F0427F9E700BFE1CB0108EECB0108A6 +:10AAF0002DE9F04F036885B00646894600930B7830 +:10AB00002F2B01D05C2B09D14A4613789146013294 +:10AB10002F2BFAD05C2BF8D0002301E0009BDB69DF +:10AB2000B36099F800301F2B00F2138180230021BD +:10AB3000304686F82B3005B0BDE8F04FFFF7D1BAAC +:10AB40002F2811D05C280FD07F2806D80146A348B3 +:10AB500010F0D7F9002840F03D81FF2F00F03A8136 +:10AB60002BF817400137F8E049460B788946013148 +:10AB70002F2BFAD05C2BF8D01F2B8CBF0024042481 +:10AB8000F8E0022F04D1BBF802302E2B00F0F58044 +:10AB9000ABF102013FB131F81730202B01D02E2B41 +:10ABA00001D1013FF6E700232BF81730002F00F00A +:10ABB00011813BF81300194601332028F9D009B957 +:10ABC0002E2801D144F00304ABF1020333F817003F +:10ABD0002E2801D0013FF9D14FF020334FF0000A69 +:10ABE0007362D0463362C6F8273008233BF8115011 +:10ABF0004A1CADB1202D03D02E2D05D1BA4207D06D +:10AC000044F003041146F1E79A4504D2BA423AD11E +:10AC10000B2B2FD101E00B2B27D144F003040B2386 +:10AC200096F82020E52A04BF052286F82020082B6C +:10AC300004BF4FEA88085FFA88F808F00C030C2B71 +:10AC400003D008F00303032B01D144F00204A00752 +:10AC500000F1A88018F0010F18BF44F0100418F09C +:10AC6000040F18BF44F008049CE0BA4202D044F03C +:10AC70000304D5D84FEA88083A460B234FF0080A58 +:10AC80005FFA88F8BEE77F2D15D9284640F2B51146 +:10AC9000CDE9022344F00203019301F0B7FC10F068 +:10ACA000800F0546DDE9022316D000F07F054C49F0 +:10ACB0004D5D019C45B329464A48CDE9012310F07A +:10ACC00020F9DDE90123F8B9A5F1410189B219297B +:10ACD0001ED848F0020810E0FF28EAD9591E8A451C +:10ACE00003D344F003049A468CE706EB0A010012F2 +:10ACF0000AF1010A019C81F8200006EB0A010AF121 +:10AD0000010A81F820507DE744F003045F25F4E751 +:10AD1000A5F1610189B219299EBF203D48F00108C3 +:10AD2000ADB2EAE7002A08BF052050E05A074ED42A +:10AD3000B379DB0650D5009B32699989B2FBF1F3F8 +:10AD400001FB1323009AD16B10781944FFF718F810 +:10AD5000B06033680027D3F810B019F8010B40B188 +:10AD600040F2B51101F072FC044698B31F283FF67B +:10AD7000E7AE0424012F7FF404AFBBF800302E2B84 +:10AD80007FF406AF002306F120022BF817309F4214 +:10AD90008CBF2E21202101330B2B02F8011BF6D191 +:10ADA00044F02004304686F82B40FFF7F7FD96F874 +:10ADB0002B300028BAD0042809D1990603F00402E8 +:10ADC000B0D5002AC5D08023002086F82B3005B0EE +:10ADD000BDE8F08F0620FAE70520F8E71DCB010853 +:10ADE00061CB010826CB01082DE9F04F90F82BB07C +:10ADF00089B004461BF0A00540F0928007683B69CB +:10AE000033F815200AB10135FAE704F120060DF1F7 +:10AE1000140A1BF0010F96E807008AE8070000F00B +:10AE2000868040234FF0010884F82B30B4463B69FC +:10AE3000B8F1050F9AE80700ACE803002CF8022BE4 +:10AE40004FEA12428CF8002015D9991E424631F87B +:10AE5000020F88B14FF0100C00F0010E40080EEB0D +:10AE60004202D30344BF82F4883282F02102BCF153 +:10AE7000010CF1D1EBE742460DF1130C072102F072 +:10AE80000F0E914612090EF13000392888BF0EF1DD +:10AE9000370001390CF8010902D0B9F10F0FEED8D3 +:10AEA00008AB7E205A1802F8140C04F11F0000228F +:10AEB0008446914206D01CF801EF02F10109BEF16F +:10AEC000200F20D1072902F1010297BF08AB4FF0F4 +:10AED000200C03EB010C013198BF1CF814CC072A9D +:10AEE00000F802C0EED92046FFF758FD8146D0B9E0 +:10AEF00008F10108B8F1640F98D14FF007094846EE +:10AF000009B0BDE8F08F4A46D3E7804601212046CC +:10AF1000FFF7C1FC8146F8B1B9F1040FEDD0EEE7BF +:10AF20004FF00609EBE70428E9D184F82BB01BF0B9 +:10AF3000020F4FF000012046D4F800A01BBF0C35D3 +:10AF40000D230125B5FBF3F518BF0135FFF7C9F84F +:10AF500081460028E0D18046A1695046FEF74CFFAB +:10AF600081460028D8D1E3691B78E52B01D0002B5E +:10AF7000CBD108F101084545C8D1013D55D0216923 +:10AF80002046A1EB4511FFF7ACF881460028B6D169 +:10AF90004FF6FF783046FEF7AAFE0190A1693846C9 +:10AFA000FEF72AFF81460028A9D1E369E9B2019A98 +:10AFB0004FF00D0CD7F810E05A734FF00F02DFF886 +:10AFC000A8A0DA724A1E18730CFB02F28446987627 +:10AFD000D87640451AF8019B0CF1010C18BF3EF8D9 +:10AFE000120003EB090B18BF013203F809004FEA06 +:10AFF0002029002808BF4046BCF10D0F8BF80190B6 +:10B00000E7D1404502D03EF812200AB941F0400194 +:10B010001970012300212046FB70FFF73CFC81469C +:10B0200000287FF46CAF013DB8D1A1693846FEF726 +:10B03000E3FE814600287FF462AF20224946E069A2 +:10B040000FF092FBE36903CE18605960B278318843 +:10B050009A72198194F82B30E26903F01803137384 +:10B060000123FB704BE700BFE1CB01082DE9F84F4E +:10B07000FF270646D0F8008004253C464FF6FF79AE +:10B08000B169002972D04046FEF7B6FE0546002899 +:10B0900055D1F0690378002B6BD0C27AE52B02F012 +:10B0A0003F02B27150D02E2B4ED022F02001082941 +:10B0B0004AD00F2A4DD1590644D503F0BF04336955 +:10B0C000477BF362437BBB423ED1C27E837E43EA31 +:10B0D00002230FFA83FCBBBB03780D22D8F8105073 +:10B0E000012123F04003DFF890E0013B53431EF8B9 +:10B0F00001AB00EB0A0292F801B010F80A2042EA14 +:10B100000B2219B3FF2B1FD825F81320114601334A +:10B110000CF1010CBCF10D0FE9D10278520605D5F6 +:10B1200021B1FF2B10D8002225F81320013CE4B2F6 +:10B1300000213046FFF7AFFB05460028A0D00023D2 +:10B14000B3610CE0A342BDD0FF24F1E74A45DFD054 +:10B15000FAE73CB9FEF7CBFDB84203D100252846FB +:10B16000BDE8F88F4FF0FF33F362F8E7002DF5D01C +:10B17000E5E70425E3E700BFE1CB01087FB5CDE9B2 +:10B18000001003A814460391FEF7C0FD051E19DB4D +:10B190000D4E56F8252022B10023D06B137001F01C +:10B1A0008DFD019B13B100221A70DA6346F8253039 +:10B1B0002CB1002201A96846FFF794F90446204605 +:10B1C00004B070BD0B24FAE7341700242DE9F043D6 +:10B1D00091B0164605460191002800F0D58002F096 +:10B1E0003F0703A901A83A46FFF77CF9002840F081 +:10B1F000C980039B4FF40070049301F05DFD80460D +:10B20000002800F0C380039B0199186104A8FFF790 +:10B210006FFC044620B99DF93B30002BB8BF0624D3 +:10B2200016F01C0F75D0002C48D0042C3CD104A87B +:10B23000FFF7DAFD0446002836D147F0080701F091 +:10B240001CFD014600900B980E30FEF73DFD0B985B +:10B2500000991630FEF738FD039C0B992078FEF715 +:10B260008FFD202300220646CB7220460B99FEF765 +:10B2700096FD0B9B002201211A775A779A77DA778D +:10B28000039BD9701EB3314604A8D3F83890FEF75B +:10B29000E0FF044640B949460398FEF7ADFD013E84 +:10B2A000039B04465E6190B1404601F007FD0CB17E +:10B2B00000232B60204611B0BDE8F0839DF81630C6 +:10B2C00013F0110F2FD1700756D43107B7D4039C58 +:10B2D00039070B9EA36B48BF47F0400731466E62AB +:10B2E0002B622078FEF74CFD0146A86006F11C0099 +:10B2F000FEF7E2FCE388BA060646AB804FF0000397 +:10B30000E8602C602F746B74EB616B610DD40024CA +:10B31000CAE7002CC8D19DF81630DA062ED4B4073F +:10B32000D5D5D807D3D50724BEE70028EFD0638949 +:10B33000A48968615C43B4421AD22868361BFEF7C0 +:10B3400064FE0128014615D9431CF4D10124A961EA +:10B35000002CA9D103988389B6FBF3F203FB126694 +:10B36000002ED4D0FEF7B8FC50B11044E8619BE742 +:10B370000024ECE70224EAE7082495E7042493E795 +:10B38000022491E7044693E7092493E7112491E707 +:10B390002DE9F04F994685B00023884603A904465D +:10B3A000C9F800301746FEF7D1FC064618BB667C8C +:10B3B0000EBB94F810A01AF00103019300F08D80E9 +:10B3C000E2686369D21A974228BF17469FB1039873 +:10B3D00062698389B2FBF3F103FB1123002B5ED179 +:10B3E0004389013B0B40009315D142B9A068012865 +:10B3F0000AD802266674304605B0BDE8F08FA16910 +:10B400002068FEF702FEF2E7431C03D10123019EF0 +:10B410006374F0E7A061DDF80CB0A1695846FEF74F +:10B420005BFC0028E5D0009B1D18BBF80C30BB422C +:10B4300034D8BBF80A209BF80100B7FBF3FA009B55 +:10B4400003EB0A019142414688BFA2EB030A2A4658 +:10B45000534601F043FC0028D8D1DDF80CB09BF82E +:10B46000032062B1DBF83800401B504507D2BBF81F +:10B470000C20DBF83C1002FB00800FF067F9BBF8F2 +:10B480000C500AFB05F5D9F800307F1BA8442B446B +:10B49000C9F8003063692B44636197E7E56103985D +:10B4A00063698589E169B3FBF5F205FB1232AD1AD8 +:10B4B000BD4228BF3D46FEF79FFC0028A6D1039A57 +:10B4C00060699189B0FBF1F301FB1303D16B404636 +:10B4D0002A4619440FF03AF9D5E707268BE7F7B566 +:10B4E00001A90546FEF732FC044660BB2C7C14F033 +:10B4F000400428D001F0C1FB296A07460198FEF7F5 +:10B500007BFC0446F8B96E6AF37A314643F02003B7 +:10B51000F372AA682868FEF742FCE96806F11C008D +:10B52000FEF7D2FB394606F11600FEF7CDFB0123EC +:10B530000198B474F474C370FEF7DFFE2B7C0446EC +:10B5400023F040032B74204603B0F0BD2DE9F04FEB +:10B55000994685B00023884603A90446C9F80030FF +:10B560001646FEF7F3FB054648BB657C3DBB237CD6 +:10B570009A0740F1BD8063694FF0000BF34228BF8A +:10B58000DE43002E00F0A880039862698389B2FB35 +:10B59000F3F103FB1123002B7CD14789013F0F40BE +:10B5A0001BD182B9A06830B901462046FEF7DDFD07 +:10B5B000002800F09180012807D1022565742846F3 +:10B5C00005B0BDE8F08FA169EFE7431C01D101256B +:10B5D000F4E7A368A06103B9A0600398E369826BF4 +:10B5E0009A4244D0DDF80CA0A1695046FEF774FBE6 +:10B5F0000028E2D0BAF80C303A18B3423CD89AF896 +:10B6000001000192B6FBF3FBBAF80A3007EB0B011D +:10B610009942414688BFA3EB070B5B4601F07CFBD8 +:10B6200007460028D3D1039B019A996B891A594583 +:10B6300007D29A89D86B02FB01810FF087F8039B30 +:10B64000DF70039B9F890BFB07F74FF0010BD9F8C5 +:10B650000030F61B6269B8443B441744C9F8003017 +:10B66000E3686761BB422CBFE360E76089E7FEF7F0 +:10B67000A1FB0028B6D0AAE76169E368994208D324 +:10B6800050460192FEF796FB0028A0D1039B019A39 +:10B690009A63E261039863698789E169B3FBF7F212 +:10B6A00007FB1232BF1AB74228BF3746FEF7A4FB8A +:10B6B00000288CD1039A61699089B1FBF0F300FBFB +:10B6C0001313D06B41463A4618440FF03FF8039BE2 +:10B6D0004FF00102DA70BAE7237C43F04003237491 +:10B6E000BBF1000F3FF46BAF2046FFF7F8FE66E7B3 +:10B6F000072564E713B50446FFF7F1FE28B901A951 +:10B700002046FEF723FB00B9206002B010BD2DE9F2 +:10B71000F3410D4601A90446FEF718FB0646002832 +:10B7200063D1667C002E60D1E368AB4204D2227CF8 +:10B7300012F0020F08BF1D46002263696261B5B9AD +:10B740000020E2686369934281BF227CE36042F09B +:10B7500040022274019A9189B3FBF1F201FB12338A +:10B76000002B42D0E369834218BFE0613DE0019ABB +:10B77000518997894F4373B3013B6A1EB3FBF7F1BD +:10B78000B2FBF7F28A4226D37A42A1691340ED1A3E +:10B7900063610029D4D0BD4263690CD93B44A5EB59 +:10B7A00007086361237C9A072AD52046FEF7DDFC53 +:10B7B000054648BB0146636901982B446361838950 +:10B7C000B5FBF3F203FB1255002DB9D0FEF784FA56 +:10B7D00048B11044B5E7A16881B92046FEF7C5FC21 +:10B7E0000128014605D102266674304602B0BDE844 +:10B7F000F081481C01D10126F6E7A160A161C8E7EC +:10B800002068FEF702FC05466B1CF4D0012DEAD936 +:10B81000019B1B6AAB42E6D92946A5614546BAE7BA +:10B820007FB50546019100283AD0002203A901A85E +:10B83000FEF758FE044650BB039B4FF400702B608C +:10B8400001F03AFA064668B3039B0199186128464D +:10B85000FFF74EF90446A0B995F92B30002B08DB11 +:10B86000AB79DB0618D5039BE9691878FEF788FAEF +:10B87000A860039B00212846DB88AB80FEF731FCE3 +:10B880000446304601F01AFA042C07D00CB100230C +:10B890002B60204604B070BD0524F2E70524F6E7CE +:10B8A0000924F6E71124F4E713B501A90446FEF7CD +:10B8B0004DFA00B9206002B010BD2DE9F3410F46EA +:10B8C00001A90546FEF742FA044628B947B90146E0 +:10B8D0002846FEF706FC0446204602B0BDE8F0818B +:10B8E0004FF4007001F0E8F90646C0B1019B186101 +:10B8F0002846FFF7BBFB10F0FB0804460BD1394686 +:10B900002846FEF743FD41462846FEF7C4FF0428BB +:10B9100014BF04460024304601F0D0F9DCE71124BE +:10B92000DAE770B58EB00E460022019002A901A898 +:10B93000FEF7D8FD0446C8B94FF4007001F0BCF919 +:10B940000546C0B1029B0199186102A8FFF7D0F823 +:10B95000044640B99DF93330002B0ADB1EB1314655 +:10B9600002A8FEF713FD284601F0A8F920460EB004 +:10B9700070BD0624F7E71124F8E72DE9F04385B000 +:10B980000F4616460022019003A901A8FEF7AAFD62 +:10B99000044648B9039DD5F82080AB69A8F102029E +:10B9A0003560934204D83B60204605B0BDE8F08383 +:10B9B0002B78012B1AD14FF0020806464146284643 +:10B9C000FEF723FB431C40D0012840D000B90136CC +:10B9D000039B08F101081B6A4345EFD8039B3E60B7 +:10B9E0001A799E6142F001021A71DDE7E96A0646A2 +:10B9F000054635B9039801F10109FEF7FDF940BB91 +:10BA00004946DDF80C9099F80020D9F83C30022A1C +:10BA100003EB050010D15B5D0235427853EA022347 +:10BA200008BF0136B9F80C30B8F10108B5FBF3F2E4 +:10BA300003FB1255DDD1D1E7FEF73EF930F070433C +:10BA400005F1040508BF0136ECE70124ACE7022448 +:10BA5000AAE70446A8E773B501A90646FEF776F9FA +:10BA60000446C0B9747CB4B9337C9A072DD5756986 +:10BA7000F3689D420FD28DB92246B1683046FEF779 +:10BA8000E8FB0446B5607369F360337C43F0400320 +:10BA9000337404B17474204602B070BDB16930686B +:10BAA000FEF7B3FA431C01460BD001280BD0019BD3 +:10BAB0001B6A8342E7D9B2693046FEF7CAFB0446E7 +:10BAC000E1E70124DFE70224DDE70724E3E72DE9CE +:10BAD000F0419CB00222019003A901A8FEF702FDEB +:10BAE0000446F8B9039B4FF40070049301F0E4F8A6 +:10BAF000054600284FD0039B0199186104A8FEF762 +:10BB0000F7FF044658B99DF83B309A0641D41B060E +:10BB10003FD49DF8168018F0010F07D0072428465F +:10BB200001F0CCF820461CB0BDE8F081039F0B99D2 +:10BB30003878FEF725F918F0100F06460BD104A847 +:10BB4000FEF704FF04460028E9D1CEB90398FEF7BA +:10BB5000D4FB0446E3E7FB698342DFD02146129021 +:10BB600010A81097FEF7BDFA04460028D7D110A8F8 +:10BB7000FFF77CFA04460028D0D00428CFD1DEE7B6 +:10BB80000246314604A8FEF764FB04460028C6D1ED +:10BB9000DCE70624C3E71124C4E7F0B595B0022220 +:10BBA000019003A901A8FEF79DFC044600287BD163 +:10BBB000039B4FF40070089301F07EF805460028BF +:10BBC00000F08380039B0199186108A8FEF790FF9D +:10BBD0000446002875D0042863D19DF84B1011F05D +:10BBE000200170D1039B04A80493FEF7BEFA04461B +:10BBF00000285CD001285CD0431C5F425F4101F00B +:10BC00003CF80646002F56D121460398FEF7EAFD80 +:10BC1000002850D1039B4FF020321021DB6B1A60BB +:10BC20005A60C3F807202E22039BDB6B1A70039B1C +:10BC3000DA6BD1723146D86B1630FEF745F80398AF +:10BC40002246C16BFEF7ABF80398C36B03F12002E9 +:10BC5000114653F8047B934241F8047BF9D1C36B3E +:10BC60002E22012783F82120C16B0A9A2031FEF78A +:10BC700096F8039B08A8DF70FFF7B6F8D8B90F98BD +:10BC800031461630FEF720F8224603980F99FEF74A +:10BC900086F80F9B10220398DA72C770FEF72DFB0F +:10BCA0000446284601F00AF8204615B0F0BD0727E3 +:10BCB000A5E70227A3E70022214604A8FEF7C9FA58 +:10BCC000EEE70824EDE70624EBE71124ECE770B576 +:10BCD000A4B0CDE900106846FEF718F80028C0F2BD +:10BCE0009F80022203A901A8FEF7FCFB044600285E +:10BCF00040F08F80039B4FF400700C9300F0DCFF4A +:10BD00000546002800F08E80039B019918610CA85D +:10BD1000FEF7EEFE0446002878D19DF85B3013F064 +:10BD2000A00F79D1139B04AC03F1200618680833E7 +:10BD300053F8041C2246B34203C21446F6D10CAE9B +:10BD400018AC0FCE0FC40FCE0FC496E80F0084E8D6 +:10BD50000F00009918A8FEF7CBFE044648B91A9ABE +:10BD60000E9B9A4203D11C9A109B9A4203D008243E +:10BD70004CE004284AD118A8FFF736F804460028FA +:10BD800044D11F990DF11D030DF12D0001F10D029C +:10BD900053F8044B834242F8044BF9D1188801262A +:10BDA00010809B7893709DF81B30039CDA0658BF77 +:10BDB00043F02003CB72E670CB7ADB061DD50E9ADA +:10BDC0001A9B9A4219D02078FDF7DAFF01462046E7 +:10BDD000FDF782FF014608B32046FEF70DF8044642 +:10BDE000A0B90398C16B91F821302E2B05D11A9A76 +:10BDF0002031FDF7D4FF039BDE700CA8FEF7A6FDF3 +:10BE0000044618B90398FEF778FA0446284600F06D +:10BE100055FF204624B070BD0624F7E70224F5E75D +:10BE20000B24F6E71124F4E72DE9F04F2DED028BFA +:10BE300091B00C461F46099009A80092FDF766FFD5 +:10BE40000028C0F26983974B53F820300BB10022D1 +:10BE50001A70C5B2944B2846002C08BF1C4600F04F +:10BE600031FFC20700F15A83430700F15983636829 +:10BE70000B933BB90BAA0321284600F077FF08B1CA +:10BE800001230B930B9A531EB3F5004F01D21A42B4 +:10BE900001D001230B930DF12A020221284600F064 +:10BEA00065FF08B1012532E0BDF82A90A9F50073BD +:10BEB000B3F5606FF6D809F1FF3313EA090FF1D13A +:10BEC0006378D4F808800293013B012B029B88BF62 +:10BED0000123029308F1FF33B3F5004F1DD24FEA5F +:10BEE0005912B8FBF2F302FB1383002B18BF4FF477 +:10BEF0000078E668B6F1807F12D8731E334218BF0F +:10BF00000026B945B7FBF9F306930BD9112528464E +:10BF100011B0BDEC028BBDE8F08F4FF40078E8E77C +:10BF20000026EEE7009B94F800A0B3B9069B03FB44 +:10BF300009F000F0C1FE04460028E7D000230CAA57 +:10BF4000012128460C9300F011FF40B1009B002B0B +:10BF5000A8D1204600F0B2FEA4E7009CEEE71AF05C +:10BF6000080307930FD10C9B3F2B0ED93F3B3F2774 +:10BF70000C930C9B7F2B0AD8009B13B9204600F032 +:10BF80009DFE0E25C3E70746F3E7079FF1E7B6FBE3 +:10BF9000F9F3802B0AF0010628BF80231AF0020271 +:10BFA00019D0C6F10306F6B20392019300F065FEC4 +:10BFB000032EDDF83090019B039A089055D1A3B968 +:10BFC0004FEA59463949012331F8020B70B1B042AA +:10BFD00025D85B00F8E736B9009B13B9204600F07E +:10BFE0006DFE132593E70226DEE71846BDF82AC04A +:10BFF000B9FBF3F10CEB8106A1F57F410736F63969 +:10C00000B6FBFCF603962A4EB142B5D800211E4677 +:10C010004FF0200A03464FF0030B0591ABE20020DE +:10C02000E4E70298B1FBF0FC00FB1C1CBCF1000F24 +:10C0300005D0019801390AF1010A013001900298F6 +:10C04000B1FBF0F1039808440390B3E2BBF1020F97 +:10C0500032D14FF6F5710498884217D9002B40F081 +:10C06000CF827300402B00F25D82002B40F0608293 +:10C070004FEA193C0F49012631F8020B002800F065 +:10C080005882604500F255827600F5E740F6F5717A +:10C090000498884218D8002B7FF46EAF7300802B71 +:10C0A000E3D969E7341700240CCC0108FCCB010864 +:10C0B000FFFFFE0FEECB010840F6F573049A9A429B +:10C0C0003FF65AAF4FF0010B09F1FF330EAA0421DE +:10C0D00028463B440E970F9300F048FEBDF82A20F7 +:10C0E000002120460EF040FBBD4BBBF1030F84F84E +:10C0F0000EA01A684FEA2A2A08BF4FF0000866739C +:10C1000022605A680C9962601A89B1F5803F9B7A67 +:10C1100084F811804FEA2828A372BDF82A302281C2 +:10C12000E3724FEA232384F80FA02373029B84F861 +:10C130001280237480F0C181E17409122175089B7B +:10C140000022394604F11C004B446276E27699469F +:10C15000F82363753F232376FF23A376FDF7B4FD11 +:10C16000BBF1030F494640F0AD8104F14300FDF7F8 +:10C17000ABFD039904F12400FDF7A6FD022384F82A +:10C180002D2084F82C30012384F82E2084F83030C0 +:10C19000062384F82F2084F83230802384F831205D +:10C1A00084F84030292384F8332004F1470284F8CE +:10C1B00042308C4B03F1100153F8040B8B4242F8D0 +:10C1C000040BF9D119884FF0550A9B784FF0AA0952 +:10C1D000118028469370214601233A4684F8FEA137 +:10C1E00084F8FF9100F098FD804600287FF4AEAE01 +:10C1F000BBF1030F3AD10123BA1D2146284600F0B6 +:10C200008BFDBDF82A20414620460EF0ADFA5223A0 +:10C2100041227221237004F5F47063706123E2708F +:10C22000A37084F8E731049B84F8E41184F8E511E5 +:10C23000591E84F8E621FDF747FD0223FA1D214629 +:10C2400084F8EC312846012384F8ED8184F8EE81EE +:10C2500084F8EF8184F8FEA184F8FF9100F05CFD82 +:10C26000012321462846FA1800F056FD069B0021BE +:10C27000BDF82A2020464FF0000AFF275A430EF04F +:10C2800073FABBF1010F584B18BF6FF0070308EEAC +:10C29000103ABBF1030F40F02F816FF00703677076 +:10C2A000A77023704FF00F03E77027716771A771B4 +:10C2B000E77127726772A772E372DDF80C80069B44 +:10C2C0002146019A2846434528BF4346994600F037 +:10C2D00023FD014600287FF439AEBDF82A20204610 +:10C2E0000EF042FA019BB8EB09084B440193E6D1EA +:10C2F0000AF10103029A4FF0010A9A42C9D8059B3C +:10C30000BBF1030F18BF1E46069B2146019A284623 +:10C31000B34228BF33461F4600F0FEFC00287FF4DE +:10C3200015AE019BF61B3B440193EDD1BBF1030F0E +:10C3300000F0E8800C9BB3F5803F80F0E680BBF115 +:10C34000020F0CBF4FF0040A4FF0010A079B002BAD +:10C3500040F0A2800C9B0DAA012128460E93079B5A +:10C360000F9300F003FD00287FF4F0ADDDF834906A +:10C3700005234FF008084FF63E42B9FBF8F1914211 +:10C3800007D94FEA4808013B5FFA88F8F5D14FF02A +:10C39000FF084FF480520021204604F5E3760EF0AA +:10C3A000E3F9642304F5FB72B9FBF3F302923F2235 +:10C3B00001930EAB93464A455FD253F8047B642F3A +:10C3C00003D816BF01994F464F43D0192CBF012106 +:10C3D000002181450AD3002900F09A8006E000BFC1 +:10C3E0002DCB010839CB0108F8FFFF00A9EB0207AC +:10C3F000114630460393FDF767FC3946301DFDF7C3 +:10C4000063FC029B06F804ACB342039BB2FBFBF156 +:10C41000B1FBF8F008FB101CC1EB811106F8050C0C +:10C42000A2EB010106F807CC4FEA900C3A4401F167 +:10C4300001012CF03F0C41EA0C0106F8061C02F148 +:10C44000FF31B1FBFBF7B7FBF8F008FB107CC7EB43 +:10C45000871706F8010CA1EB07014FEA900706F8D1 +:10C4600003CC01F1010127F03F0741EA070106F87B +:10C47000021C02D01036002A9DD1552300222146ED +:10C48000284684F8FE31AA2384F8FF31012300F006 +:10C4900043FC00287FF45AAD00222846114600F0E4 +:10C4A00065FC009B054600287FF451AD002B7FF40E +:10C4B0002EAD204600F002FC29E504F12000FDF736 +:10C4C00003FC3CE604F12700FDF7FEFB039B04F1AF +:10C4D0002B02A3751B12E375802384F824302923D3 +:10C4E00084F82630484B03F1100153F8040B8B42BB +:10C4F00042F8040BF9D165E618EE101A2046FDF754 +:10C50000E3FBDAE64FF00C0A20E74FF0060A1DE7DE +:10C51000002F7FF46DAFB0E70B25F8E40325F6E4B8 +:10C520000A25F4E4002A7FF44BAD802B3FF624ADBE +:10C530001E4640F6F5704FF0010AB9FBF6F1814254 +:10C54000BDF82A0094BF01EB4101023100F1FF3C2C +:10C550008BBF4FF0020B013149004FF0010B9CBF24 +:10C56000490803316144B1FBF0F103914FEA4811EE +:10C57000B1FBF0F105910AEB0701BBF1030F01914B +:10C5800003998C46DDE9011000FB0C100599DDF8DC +:10C590002CC000EB010E0CF1FF31CCF1000C71440A +:10C5A00001EA0C01A1EB0E017FF43BAD01988A4436 +:10C5B00008440190C7EB06110EEB01008145FFF422 +:10C5C000DBAC0599BBF1030F0398A9EB010184468D +:10C5D0000298A1EB0A0100FB1C11B1FBF6F10491DA +:10C5E0007FF434AD4FF6F571049888423FF66CAD98 +:10C5F000002B7FF4C1AC012E7FF6BEAC7308DEE4E5 +:10C60000002A7FF4DCACB7E44DCB01087F2810B5DD +:10C6100001D880B210BDB0F5803F12D240F2B51300 +:10C6200099420ED10849002231F8024B93B284425C +:10C6300003D00132802AF7D1134603F18000C0B243 +:10C64000E8E70020E6E700BF1CCC01087F280DD9F1 +:10C6500040F2B513994208D1FF2806D800F10040F6 +:10C66000034B803833F8100070470020704700BF3C +:10C670001CCC0108B0F5803FF0B522D21F4A83B22E +:10C680001F49B0F5805F28BF0A46141D34F8042CFA +:10C690002146AAB1934213D334F8025C2E12EFB2B2 +:10C6A00052FA85F5A84222DA082E09D8DFE806F00A +:10C6B000050A10121416181A1C00801A34F81030CB +:10C6C0001846F0BD981A00F001001B1A9BB2F7E75C +:10C6D000103BFBE7203BF9E7303BF7E71A3BF5E778 +:10C6E0000833F3E7503BF1E7A3F5E353EEE70434F7 +:10C6F000002ECBD101EB4702C7E700BF1CCD0108DC +:10C700000ECF0108036800229B6F184713289ABFB9 +:10C71000014B18564042704708D0010808B5064B37 +:10C7200053F820000368DB6A984780B2B0F5007FB9 +:10C7300038BF4FF4007008BD701700240368012251 +:10C74000D3F88430184738B5036804460D46DB6FCC +:10C75000984723686D692046D3F88030984728466B +:10C7600038BD38B5036804460D46DB6F984723682B +:10C77000ED682046D3F880309847284638BD38B554 +:10C78000036804460D46DB6F984723682D692046F1 +:10C79000D3F880309847284638BD0000F8B50368C4 +:10C7A0000446DB6F9847A36D013308D123686FF00F +:10C7B00015052046D3F8803098472846F8BD00225A +:10C7C00004F15401104F1046FEF7D8FCA36D064645 +:10C7D00057F823000368DB6898472368054620B1B3 +:10C7E000D3F8803020469847E7E7A26DD3F8803031 +:10C7F00047F822004FF0FF322046A26598473046A6 +:10C80000BDE8F840FFF782BF7017002408B1FAF7BF +:10C8100029BE704773B514460646282200212046DB +:10C820000DF0A2FF33683046DB6F984701A96A46D6 +:10C8300006F15400FFF7A1F83168054648B13046CB +:10C84000D1F880309847284602B0BDE87040FFF725 +:10C850005DBF009A93895089C4E90033136A023B93 +:10C860004343C4E90235019B43433046C4E90435E0 +:10C87000C4E90635FF236362D1F880309847284623 +:10C8800002B070BD036870B50C460546DB6F984773 +:10C890002046FEF72FFF2B6806462846D3F8803047 +:10C8A00098471CB128212046FAF7DAFD3046BDE84A +:10C8B0007040FFF72BBF30B585B00D46044600939E +:10C8C00003680192DB6F984703AB2846DDE900213E +:10C8D000FEF75EFD236805462046D3F88030984772 +:10C8E0002DB1284605B0BDE83040FFF70FBF0398D3 +:10C8F00005B030BD30B585B00D46044600930368E1 +:10C900000192DB6F984703AB2846DDE90021FEF773 +:10C910001DFE236805462046D3F8803098472DB188 +:10C92000284605B0BDE83040FFF7F0BE039805B0DB +:10C9300030BD38B503680D460446DB6F984728467E +:10C94000FEF7CDFD236805462046D3F88030984792 +:10C950002846BDE83840FFF7D9BEF8B51F46036842 +:10C9600006460D46DB6F14469847022F12D1EB683E +:10C970001C4421462846FEF7CAFE3368044630466A +:10C98000D3F880306D69984744B12046BDE8F8403F +:10C99000FFF7BCBE012FECD16B69E9E72846F8BD73 +:10C9A0000368F7B50D46DB6F01920446984701997D +:10C9B00028466F69FEF7ABFE064650B12368204655 +:10C9C000D3F880309847304603B0BDE8F040FFF719 +:10C9D0009DBE2846FFF73FF806460028EED12846C0 +:10C9E0003946FEF794FE054630B123682046D3F859 +:10C9F000803098472846E7E703B0F0BD036870B57C +:10CA00000C460546DB6F98472046FEF74DFF2B6826 +:10CA100006462846D3F8803098471CB1302120467E +:10CA2000FAF71EFD3046BDE87040FFF76FBE0368A1 +:10CA3000F0B516460F69C7B0DB6F05460C46984740 +:10CA4000B7420ADD00212046FEF737FF2B68284653 +:10CA5000D3F88030984747B0F0BDB742F6DA694660 +:10CA60002046FEF72AFF27690028EFD19DF81630EF +:10CA7000002BF2D1EAE7036870B50D460446DB6F80 +:10CA8000984728460021FEF718FF23682046D3F870 +:10CA90008030BDE870401847036870B50E46C6B0D8 +:10CAA0000546DB6F1446984730466946FEF705FF9A +:10CAB0002B6806462846D3F8803098472EB130467A +:10CAC00046B0BDE87040FFF721BE9DF8160088B162 +:10CAD0009DF8083013F0100F14BF0323052384F8CA +:10CAE000003123782BB9FF220DF1160120460EF0FC +:10CAF00052FA012046B070BD036870B50446DB6F82 +:10CB00000D4616469847A36D013307D0236820468B +:10CB1000D3F8803098476FF0150070BD1848002397 +:10CB2000014650F8042BFAB941F82350201DA365A3 +:10CB3000303384F8562084F854303A2384F8553042 +:10CB4000F9F7FCFA324604F1540104F11400FEF73F +:10CB500015FB236805462046D3F8803098472846C1 +:10CB6000BDE87040FFF7D2BD0133042BD9D1236853 +:10CB70002046D3F8803098476FF00B00CDE700BF18 +:10CB8000701700240368084618470000F0B50C46EB +:10CB90008BB0064624B93260046130460BB0F0BD5C +:10CBA000104601920EF0DDF90430FAF755FC3A23F5 +:10CBB0003034054643702F230470033000F8013CE5 +:10CBC0003746019906AC0EF0B3F9084B002247F83E +:10CBD000045B0593064B029302ABCDE903220FCB16 +:10CBE00084E80F0087E80F00D7E700BF85CB000877 +:10CBF0000DC80008054B10B503602C33044640F8FF +:10CC0000043FF9F7C1FA204610BD00BFD4CF010898 +:10CC1000A0F10400EEE700BF074B03F108029833D0 +:10CC200010B5044602604360FFF7B8FD2046FFF7E9 +:10CC3000E1FF204610BD00BF1CD00108A0F1040098 +:10CC4000FFF7EABF10B50446FFF7E6FF5C21204678 +:10CC5000FAF706FC204610BDA0F10400FFF7F2BF72 +:10CC600010B50446FFF7C6FF14212046FAF7F8FB7B +:10CC7000204610BDA0F10400F2E707B56846FAF7B8 +:10CC80001BFD68460DF07EFBD0E90232DB0243EA71 +:10CC90000243426843EA4213026802EBD27243EA5B +:10CCA000620342690069503A013043EA426343EA51 +:10CCB000405003B05DF804FB0DF0D6BC0DF0DCBCB9 +:10CCC0000020704708B5044B53F8200003689B68A8 +:10CCD0009847C0B208BD00BF701700247FB5164644 +:10CCE00005461C460391FFF719FD0A4A03460399BE +:10CCF00052F82500A3FB04450268CDE900455469BC +:10CD0000A3FB0623A047002814BF0420002004B082 +:10CD100070BD00BF701700242DE9FF4716461C4662 +:10CD20008046DFF844900391FFF7F8FCA0FB06670C +:10CD3000A0FB044559F8280032460368CDE90045B8 +:10CD4000D3F81CA03B46D04750B959F828003246CA +:10CD500003990368CDE900459C693B46A04700B1B3 +:10CD6000042004B0BDE8F08770170024F0B5054634 +:10CD700085B00C461646042946D8DFE801F0030CBE +:10CD800021292C00224B53F82030002B3ED00024C8 +:10CD9000204605B0F0BD1E4B53F82000002835D0CA +:10CDA00003689B6B9847044628460391FFF7B6FC3F +:10CDB00000230246039920460FF002F93060E6E7AF +:10CDC000134B53F820300BB3FFF7A8FC3080DEE79D +:10CDD00001231360DBE70E4F57F82030B3B1FFF7A4 +:10CDE0009DFC3268766857F8251001360B68B61A34 +:10CDF000A6FB0067CDE900671D6AA0FB0223084679 +:10CE0000A8470028C3D0C3E70424C1E70324BFE731 +:10CE10007017002438B50446154602F0D7FF0A4BB8 +:10CE2000402200212360903304F1140063600DF070 +:10CE30009BFC4FF0FF33A3651DB129462046FFF749 +:10CE40007DFC204638BD00BF24D00108036910B521 +:10CE5000044613B150F8041B9847204610BD30B566 +:10CE600087B004460A46816D01A8FFF78FFE23684C +:10CE70002046DB6F98470198FEF729FE2368054698 +:10CE80002046D3F880309847072D09D02846FFF771 +:10CE90003DFC044601A8FFF7D9FF204607B030BD8E +:10CEA0006FF05904F6E730B58BB0044615460A46D4 +:10CEB000816D6846FFF76AFE2A46A16D05A8FFF757 +:10CEC00065FE23682046DB6F984705990098FEF7BA +:10CED000FEFE236805462046D3F880309847284652 +:10CEE000FFF714FC044605A8FFF7B0FF6846FFF7FC +:10CEF000ADFF20460BB030BD30B587B004460A46C2 +:10CF0000816D01A8FFF742FE23682046DB6F98473A +:10CF10000198FEF742FE236805462046D3F880308C +:10CF200098472846FFF7F2FB044601A8FFF78EFF5B +:10CF3000204607B030BD70B5CCB0054616460A464F +:10CF4000816D01A8FFF722FE2B682846DB6F98470A +:10CF50004FF48C72002106A80DF006FC06A901987A +:10CF6000FEF7DFFC2968044668B1D1F88030284616 +:10CF700098472046FFF7CAFB044601A8FFF766FF63 +:10CF800020464CB070BD9DF8202040F2FF10069B5B +:10CF900012F0100F336114BF4FF480434FF400437D +:10CFA00012F0010F40F26D1208BF024628461343EB +:10CFB0007360D1F880309847DFE72DE9F04188B001 +:10CFC000054604301E460F460192F9F7B7F82820AF +:10CFD000FAF730FAA96D8046019A03A8FFF7D6FD4B +:10CFE000B00756BF06F0010403240134B10505D58E +:10CFF00072054CBF44F0080444F0100433072B685A +:10D00000284648BF44F03004DB6F98470399224616 +:10D010004046FEF7DBF82B6804462846D3F88030FC +:10D020007CB1984728214046FAF71AFA2046FFF7C4 +:10D030006DFB044603A8FFF709FF204608B0BDE8D2 +:10D04000F0819847C7F80080F4E7F0B5054689B04D +:10D0500030200F460192FAF7EDF9019A0646A96DC4 +:10D0600003A8FFF793FD2B682846DB6F98470399C9 +:10D070003046FEF7D5FB2B6804462846D3F88030AF +:10D0800098476CB130213046FAF7EAF92046FFF7AD +:10D090003DFB044603A8FFF7D9FE204609B0F0BDCA +:10D0A0003E60F7E708B50348F7F746FCBDE80840DF +:10D0B000FAF7CCBD4817002408B50348F7F73CFC45 +:10D0C000BDE80840FAF7DEBD4817002408B503485C +:10D0D000F7F732FCBDE80840FAF7D4BD4817002442 +:10D0E0002DE9F04F9246A1B00022044609A811464E +:10D0F000FFF790FE09A8FFF7D5FF236820469B683D +:10D100009847834610B1FFF7E1FF30E023682046DF +:10D11000DB6A984703182046029341EB010303930F +:10D120002368DDE90212CDE900120022D96900234B +:10D1300088472368834618B1DB6820469847E2E7B2 +:10D140005B6B2046984700283CDA236820469B6AA0 +:10D150009847054689460DF087FA804670B92368DE +:10D160006FF00B0B2046DB689847FFF7AFFF09A86D +:10D17000FFF752FD584621B0BDE8F08F002600278A +:10D180002A46FF210DF0F0FA2368DDE902129742EA +:10D1900008BF8E4213D2324641462046CDE900599F +:10D1A000D3F818B03B46D847834620B140460DF02F +:10D1B00063FA2368C0E7761947EB0907E4E74046BE +:10D1C0000DF05AFA236820461D6A9B6B984700238E +:10D1D0000022CDE900012046A84723688346204667 +:10D1E000DB68BBF1000FA9D19847834600288AD19C +:10D1F0000246214609A8FFF77FFC8346002882D11A +:10D200000F23024605A9CDF820A0ADF814304FF445 +:10D210008053CDE906001EA8FEF706FE044609A8C5 +:10D2200044B1FFF7BBFAFFF751FF2046FFF76EFA54 +:10D2300083469CE7FFF7B2FA834664E7F8B50368D4 +:10D24000044617460E46DB6F9847A36D5A1C0BD059 +:10D2500016B9144A52F82360236820469B6A9847FF +:10D26000054608B1236811E046B923686FF012053E +:10D270002046D3F8803098472846F8BDFB173A4639 +:10D280003046FFF72DFF2368054620B1D3F88030E4 +:10D2900020469847F0E75B6A3146204698470546A6 +:10D2A000E0E700BF7017002403681A6AC36AD31A44 +:10D2B0001944B1FBF2F302FB1311036B8B4210B55F +:10D2C0000BD94C09C26B012301F01F0103FA01F1D4 +:10D2D00052F824300B4342F82430002010BD03687C +:10D2E000013304D04068431C584258417047012024 +:10D2F00070470B6810B504689C4209D040684A68C2 +:10D30000904205D0944203D0181A18BF012010BDD6 +:10D310000020FCE7437982790433C0791344184430 +:10D32000704703689B6A10B5044613B9C0690DF0D5 +:10D33000A3F92368DB6A13B9A06A0DF09DF923688D +:10D340001B6B23B9E06BBDE810400DF095B910BD23 +:10D350002DE9F04F85B00F4691469846109D0390F9 +:10D36000DDE90E460DB9284659E0039B1868B9F16E +:10D37000000F1ED0D9F8003043451AD1D9F8041057 +:10D38000A14216D8826901EB020A544511D2AAEBD8 +:10D39000040A611AD9F80830AA4528BFAA463046BF +:10D3A0005246194456445444A5EB0A050DF0CEF9F3 +:10D3B000D8E73A68436990450ED179688C420BD31F +:10D3C00001EB030A544507D2AAEB040A611ABB68B1 +:10D3D000AA4528BFAA46E2E7B4FBF3F203FB1242D8 +:10D3E000D0F804B08AB99D420FD322464146B5FB1E +:10D3F000F3FA03FB1A5A3346A5EB0A050095D84702 +:10D4000068B92E442C445546ACE7A21A0093414615 +:10D41000BB68C7F800807A60D8470028A2D005B062 +:10D42000BDE8F08F1FB5069C00920022CDE90134C3 +:10D430000B4600F11401FFF78BFF04B010BD10B5CF +:10D440000C468269FF21A0680DF08EF94FF0FF3382 +:10D45000236010BD38B58B6A04460D460160CBB120 +:10D46000C361EB6A13B3A36204F120012846FFF7FE +:10D47000E6FF4FF0FF33636123681A6BEAB1E263A2 +:10D4800000204FF0FF33C4E90300C4E90133A4F8DE +:10D49000400038BD48690DF0E7F8E0610028E0D1B0 +:10D4A0002046FFF73EFF6FF00B00F2E7A8690DF092 +:10D4B000DBF8A0620028D7D1F2E7586AC0080DF067 +:10D4C000D3F8E0630028DBD1EAE7F8B5C5690F4679 +:10D4D0000E68083DAE4213D3B6FBF5F001380EF0EE +:10D4E00087FD841CA6EB8404B4FBF5F420460EF003 +:10D4F0007FFDA6EB800004FB150520463D60F8BDCE +:10D500000020FCE72DE9F04F8BB091460746884696 +:10D51000149A07A900680DF1200B013A0593DDF874 +:10D5200058A00792FFF7D1FF059B054619460593C2 +:10D530005046159B9847024618BB15B305F00106E7 +:10D540004A4600903846C6F10204059BA100CDE989 +:10D5500001B14146FFF7FCFE024690B9013C9442FE +:10D5600007DC0AAB023E03EB8404354454F8083C64 +:10D57000DCE708995046159B984701220028EED019 +:10D58000024610460BB0BDE8F08F2DE9F04F89B090 +:10D5900006468846DDF84C9005924BB94FF0FF32B5 +:10D5A000C9F80020149A0020136009B0BDE8F08F7C +:10D5B000013B07A900684FF0040A0793FFF785FFB6 +:10D5C00012A9054630680DF1140BFFF77EFF0746E0 +:10D5D000AF42059B03D3C9F80030129BE2E7EC1B76 +:10D5E00095FAA5F241463046B4FA84F4B2FA82F2D2 +:10D5F000C4F11F04944228BF1446A200CDE901BA29 +:10D6000000920022FFF7A4FE0028CED1012303FAE6 +:10D6100004F42D1BDCE72DE9F04786B005460F46E4 +:10D62000144600F11409D6184FF0010A0DF117083D +:10D63000A64203D1002006B0BDE8F08700943B4627 +:10D640000022494628460134CDE9018AFFF780FED1 +:10D650000028F0D1012241460E9802F005F9E7E7D3 +:10D660002DE9F04F13688BB00026074604930C4653 +:10D670005368B0460DF1100B06AD4FF0100A05933C +:10D680005BF826902B46002238464946CDF800A08C +:10D69000FFF7C8FE70B110F1340F06D146B1B8F1F2 +:10D6A000000F14BF00206FF033000BB0BDE8F08F07 +:10D6B0000126E5E7B8F1000F04D0E269069B9B1A4A +:10D6C000002BEBDB079B23F00043132BE6D93A68D2 +:10D6D000D2699342E2D84FF0FF3303A810222946C3 +:10D6E000039302F0C1F8079B03A81022494623F0D8 +:10D6F000004300903846103BFFF78DFF0028CAD149 +:10D70000039B002BCAD10AAA86F0010304F11C0C6A +:10D71000C4F8049002EB83034FF0010853F8183C5F +:10D72000C4E9023A95E80F008CE80F00B6E72DE94E +:10D73000F34106460C46154601F124081027226ADB +:10D74000E16822F0004301F10C00043B984217D835 +:10D750000C230A463046616800932B1DFFF762FEDA +:10D76000014690B9E66828462E60FFF7D3FD3044A5 +:10D77000E0602846FFF7CEFDA3691844A06104E0ED +:10D78000002A06DB29606FF00101084602B0BDE8FF +:10D79000F081214642463046FFF762FF01460028ED +:10D7A000F3D1A369E7601433A361C8E770B50546F8 +:10D7B00092B004300E46FFF792FD68BB0123019042 +:10D7C00001AA07A928460293FFF74AFF044618B9A1 +:10D7D00010A8FFF784FD10B1204612B070BD10AA4A +:10D7E00007A92846FFF73CFF38B903AA07A928462E +:10D7F000FFF79DFF18B1831CEAD00446ECE79DF9C2 +:10D800001030002BF1DB0822314605A80CF090FF08 +:10D810000028EAD10124DFE70024DDE72DE9F84301 +:10D8200014461D460022012306460F4604F1240833 +:10D8300005F10809C4E909234046FFF750FD08B186 +:10D8400000200DE0424621463046FFF709FF38B977 +:10D850002A4621463046FFF76AFF18B1831CEBD0F9 +:10D86000BDE8F8832B7903F07003202BF0D1394603 +:10D870004846FFF73EFD0028EAD10120F0E7F7B562 +:10D88000044604300E461546FFF729FD10B100206E +:10D8900003B0F0BD012300906A462946204601935B +:10D8A000FFF7DEFE0028F3D105F124073846FFF725 +:10D8B00016FD0028EBD131463846FFF71AFD38B186 +:10D8C0003A4629462046FFF7CBFE0028EED0DFE798 +:10D8D0000120DDE72DE9F04F87B006468B4617465D +:10D8E0004FF001090DF1170ADDE910452544A3EBBE +:10D8F0000408AC4201D1012011E008EB040300222E +:10D900005946304600933B46CDE901A9FFF720FD7B +:10D9100028B914F8013B9DF817209A42E9D007B0C6 +:10D92000BDE8F08FF7B50C460968064617464B1C54 +:10D9300021D00068836900938568D4E90123A84752 +:10D94000054620B937B921463068FFF778FD2846EB +:10D9500003B0F0BD3368394630469B690193A36834 +:10D960000093D4E90023FFF7B5FF002805DBEAD1D7 +:10D970006FF03305EBE70025E9E70546E7E72DE91A +:10D98000F04F85B080460E4692469946109CDDE9E0 +:10D990000E570CB920462CE03368D8F800004B45F0 +:10D9A000816929D17368AB4226D803EB010BAB45E3 +:10D9B00022D9ABEB050BE81AB3683946A3451844E6 +:10D9C00028BFA3465A465D440CF0C0FED8F800308C +:10D9D0005F44A4EB0B049A69B5FBF2F302FB13530B +:10D9E000002BD6D1524631464046FFF79BFF002818 +:10D9F000CFD005B0BDE8F08FB5FBF1F301FB1353B9 +:10DA000043BB8C4226D32A46B4FBF1F301FB134BF4 +:10DA10004946A4EB0B030393009383681C463B46E3 +:10DA2000A0470028E5D1BAF1000F04D1039B5C4662 +:10DA30001F441D44ADE7039B4A4651464046CDE98D +:10DA400000732B46FFF746FF0028D2DBEED16FF0C4 +:10DA50003300CEE7EB1AC6F80090736099E7000038 +:10DA60002DE9F04F2DED028B85B01F68054608EEBD +:10DA7000101A029340F622031446DFF840915360D7 +:10DA8000436893608368D360494638460DF096FA40 +:10DA900007EB00088346494640460DF051FA01283D +:10DAA000064608EB000A05D117F80B302E2B0AD1D9 +:10DAB0005746E9E7022806D102463F4940460CF0A6 +:10DAC00037FE0028F4D057464FF0010B4946504628 +:10DAD0000DF074FA8244494650460DF031FA024680 +:10DAE00090B102280CD10390504633490CF020FE2F +:10DAF000039A28B9BBF1010B04D10AF10207C3E76D +:10DB00000BF1010B9244E1E798F80000002846D0A1 +:10DB1000029BC3F800802379222B4AD104F1080A22 +:10DB200018EE101A28465246FFF79AFD002836D103 +:10DB300005F1140B224618EE101A2846FFF7F7FDE0 +:10DB400068BB237903F07F03112B01D0222BF1D185 +:10DB5000E379B342EED1236859466279284604330B +:10DB60001344A279134418EE102ACDE900865268B6 +:10DB7000FFF7B0FE002812DBDCD095F84130002B17 +:10DB800082D194F90430002BBFF67EAF514628466F +:10DB9000FFF70CFE002807D001DB6FF0010005B095 +:10DBA000BDEC028BBDE8F08F237903F07F03237176 +:10DBB0006AE76FF01300F2E7BCD00108ACC60108B9 +:10DBC000436830B54B6087B083680546019202AA6E +:10DBD0008B6001AB0C46FFF743FFA0B99DF80C30FA +:10DBE000222B12D104AA21462846FFF739FD50B94D +:10DBF00063682361A36863610E23A3611023E3605C +:10DC00002B6923602C6107B030BD6FF01300FAE779 +:10DC100000F1100203691BB18B4203D11B68136032 +:10DC2000002070471A461B68F5E7000070B51446DF +:10DC30000D4686B006464FF48472002120460CF053 +:10DC400093FDAB690E2B0CD120462223284900F806 +:10DC5000083B0DF06DF9AB6901200133AB6106B0F3 +:10DC600070BD0F2B05D120462223224900F8083B26 +:10DC7000EFE702AA29463046FFF759FD18B1821C8A +:10DC800008BF0020EBE79DF80C3003F07F02112A5B +:10DC900001D0222AEDD11B060CD504A93046FFF78E +:10DCA00085FD0028DBDBE4D19DF80C3003F07F0319 +:10DCB0008DF80C309DF80C303046029A112B2370F1 +:10DCC00002F104029DF80E1004BF059B63609DF8ED +:10DCD0000D301A449DF80F300A440093696804F12E +:10DCE0000803FFF79FFB002808BF0120B7E700BF2C +:10DCF000BDD00108BCD001088869704710B501F19A +:10DD000010020C46FFF7ACFC38B923696360636905 +:10DD1000A3600E23A3611023E36010BD2DE9F04141 +:10DD200007460C461546FFF7E9FF064640B904F1E1 +:10DD30002408A561216A21F00043AB4203D3E560CA +:10DD40003046BDE8F0810029A5EB030508DA42461C +:10DD500021463846FFF784FC0028EBD00646EFE763 +:10DD60006FF01506ECE7086A7047CB6948699B03BA +:10DD700003D50B6A984238BF1846704770B594B007 +:10DD800015460646039103AB05AA09A9FFF768FEED +:10DD90000446C0B901464FF4847228460CF0E4FCF6 +:10DDA0009DF81830311D07A8112B2B7004BF089B5C +:10DDB0006B60FFF79EFA05F10803044630B90C4981 +:10DDC00018460DF0B5F8204614B070BD059A9DF8C0 +:10DDD000191004329DF81B000A449DF81A10009097 +:10DDE00030460A440A99FFF71DFB0446EBE700BFE3 +:10DDF000ACC6010830B599B00546FFF72BFB0446C9 +:10DE000058BB2B6802AA68630DA91B6A0290AB631A +:10DE10000123C5E90B0028460393FFF721FC0446C4 +:10DE200000BB202310220E992846009305ABFFF774 +:10DE3000F9FA0446B0B9069B08220E490BA86B609C +:10DE4000079BAB600CF074FC044648B90A9B1A0CA3 +:10DE5000012A0BD19BB2012B08D8204619B030BD46 +:10DE60006FF033042846FFF75CFAF6E76FF015040D +:10DE7000F8E700BFBFD0010808B5FFF752FA00204D +:10DE800008BD2DE9F043064697B004300F46904692 +:10DE9000FFF725FA00287CD1012305900693059908 +:10DEA0004046B847044610BB06994046B84704466A +:10DEB000E8B905AA0BA93046FFF7D2FB0446B0B972 +:10DEC0000C25139B0E9A23F0004302F10C01043B36 +:10DED000994210D9149B05A80593159B0693FFF74B +:10DEE000FEF90028DBD0F56806F114094DBB204689 +:10DEF00017B0BDE8F0830C9908AB30460095FFF7EA +:10DF000091FA0146002842D107A8FFF703FA0E9BB9 +:10DF100018449DF8203003F070030E90102BD0D1E0 +:10DF20000A9B002BCCD00A46009306F11401099BF2 +:10DF30003046CDE90178FFF7E5FA0028C0D0044665 +:10DF4000D5E7EB69DA0312D4EB699B030DD52B6A95 +:10DF50005BB1009305F12C0249463046CDE90178CA +:10DF60006B6AFFF7CFFA0028E9D12D68BEE76B692D +:10DF7000002BE9D0009305F12C0249463046CDE94B +:10DF800001782B69FFF7BEFA0028DDD0D7E70446F9 +:10DF9000ADE70024ABE70000F8B504460D460127C5 +:10DFA0002B4E226BD4E90D1391421ED1002B4BD086 +:10DFB0002068E16AD0F820C00A44B2FBFCF10CFBF7 +:10DFC00011220021E262426A61639A4294BF226395 +:10DFD0002363D208E06B0CF0C7FB22463146204693 +:10DFE000FFF74FFF0028DCD025E0481C013BD4F8A8 +:10DFF0003CC060634809A36301F01F035CF8200084 +:10E0000007FA03F30342CDD1E36A194423681A6A7D +:10E01000B1FBF2F302FB131129600121256B636B45 +:10E02000AB420FD05A0903F01F005CF8222001FA1E +:10E0300000F0104000D1F8BD01336363A36B013BD6 +:10E04000A363ECE70020F6E76FF01B00F3E700BFE7 +:10E05000A9D2000873B50C4604310646FFF79CFFB1 +:10E060000546F0B904F108013046FFF795FF054673 +:10E07000B8B90423024661683046009304F11C03DA +:10E08000FFF7D0F910B110F1340F0DD1E36914226C +:10E090000133E3614FF0FF33C4E90823A362102387 +:10E0A000E360284602B070BD0546FAE72DE9F04F5F +:10E0B000044687B00E4600F1140A05A92046FFF772 +:10E0C0006BFF054648B920680599C368984705461F +:10E0D00000283BD010F1340FEFD0284607B0BDE840 +:10E0E000F08F0DF11307736A5A4651462046CDF85A +:10E0F0000890CDE90087FFF72BF970B9059B5246D0 +:10E1000004F120012046CDF80080CDE90179FFF728 +:10E1100036FC20B110F1340FCFD00546DDE708F111 +:10E120000108B36A4345DCD82368A16A9A69706B19 +:10E130000CF00CFB236A04F120012068F362636A8F +:10E140003363FFF77CF9059B7362C6E7804606F1EF +:10E150002C0B4FF00109E4E72DE9F04F9B468DB001 +:10E16000CB69054604920C4603F00302012A00F035 +:10E1700020815E0314D4E66932051AD4276A17EBAE +:10E180000B0F00F1198116F4003618D0D946E36957 +:10E19000B9F1000F25D123F400235A46E36104E0CE +:10E1A00000F00DF902460028E5D010460DB0BDE89C +:10E1B000F08F6269216A8A4288BF2262DEE7636962 +:10E1C0009F42E3D923620BAA0123214628468DF8FA +:10E1D0002C60FFF7C1FF021EE7DB236A9F42F2D8E3 +:10E1E000D4E79B0304F12C0620D52B68A26ADB69D7 +:10E1F0009A4242D12B6805F1140A1B6AAB63D4E939 +:10E200000832CDE909230BA92846FFF7C5FE0246CF +:10E21000F8B928680B99C3689847024618B312F1F9 +:10E22000340F16D14FF0FF332B62ECE7236A002B3B +:10E23000E0D004F12802013B31462846029204F165 +:10E24000240200930192D4E90423FFF79EF90246C9 +:10E2500020B1E36943F40023E361A6E7314628686F +:10E26000FFF7EDF8C6E70A9B286843BB0B9A62628A +:10E27000A362E36943F40033E361A84658F8143B12 +:10E28000DF69A36AFF1A4F4528BF4F46049B4246E9 +:10E29000314628460193A36A02970093636AFFF709 +:10E2A0006EFB0246002875D010F1340FD1D1214603 +:10E2B0002846FFF7FBFE02460028E7D0C9E7013BEE +:10E2C0000AA905920A93FFF700F90A9B296801330E +:10E2D000059AC9690A938B424AD10130904609AF29 +:10E2E00090FAA0F3B3FA83F30593013306934FEA50 +:10E2F000880352463146284607930423CDE901732B +:10E30000079B00930B9BFFF73AFB0246002886D140 +:10E31000059B434530D108F10108069B4345E6D8EB +:10E320000B9B6362069B9B00A2E7012300225146E0 +:10E330002846CDF80080CDE90173099BFFF708F866 +:10E340000246002885D10123524631462846CDF8A1 +:10E350000080CDE901730B9BFFF711FB02460028FB +:10E360007FF45DAF08F101080A9B9845DDD37DE796 +:10E3700090460DF12307F7E7042351462846CDE9DF +:10E380000173079B0093099BFEF7E2FF02460028FA +:10E39000C1D05EE7236AA9EB07093B442362A36A65 +:10E3A0003B44A362049B3B4404932B681B6AAB630E +:10E3B000EDE66FF00802F8E66FF01A02F5E6CB69B9 +:10E3C0005A0344BF23F480234FF0FF322DE9F0417C +:10E3D00048BFCB610546CB6990B048BFCA620C46C6 +:10E3E00013F400302CD00F6A2C22002102A80CF06C +:10E3F000BBF9236905F114060693636907930123AA +:10E4000096E80700CDE9093710AB03E907004FF0A4 +:10E41000FF3398466B61226A63699A4213D304F111 +:10E420002C08324641462846FFF77CFA28B310F103 +:10E43000340F05D121462846FFF738FE0028F0D0DA +:10E4400010B0BDE8F08101230DF1070202A92846B2 +:10E4500000F01FF80028F3DB01230DF1070221462D +:10E460002846FFF779FE0028EADB6B6901331CBF01 +:10E47000CDF83480C5F81480CDE7636A2361236A40 +:10E480006361E36923F4003343F48033C4E907375D +:10E49000D6E72DE9F04F1D46CB69904687B003F0D3 +:10E4A000030207460C46022A54D09A0305D4266A72 +:10E4B0006269964208D3002003E0FFF780FF00283E +:10E4C000F5D007B0BDE8F08F961B04F12C0104F1E4 +:10E4D000280A04F1240BAE4228BF2E46B146B9F1FA +:10E4E000000F01D13046ECE7E3695B0304D53B68DC +:10E4F000A26ADB699A4210D1236A384605910093DB +:10E50000CDE901BAD4E90423FFF73FF80028D8D1B8 +:10E51000E369059943F48023E3613A683846A36AC6 +:10E52000D56900220093ED1A636A05914D4528BF15 +:10E530004D46CDE90185FEF70BFF0028C1D1236AC6 +:10E54000A844A9EB050905992B442362A36A2B442F +:10E55000A362C4E76FF00800B3E770B50D46144638 +:10E560001E46FFF72CFF70B93EB1012E2B6A01D178 +:10E570001C4402E0022E07D01C46002CAABF2046F5 +:10E580006FF015002C6270BD6B69F1E7CB6903F089 +:10E590000303012B2DE9F041054686B00C461646D3 +:10E5A00043D0FFF7E2FB90421AD92846FFF707FF56 +:10E5B00098B905AB059004F12C012846029304F1AB +:10E5C0001003CDE90063D4E90423FEF7DEFF20B990 +:10E5D000E369666143F48033E36106B0BDE8F0812E +:10E5E00026D20F6AB8420DD14FF00008236AB34219 +:10E5F00010D300233A4621462846FFF7AEFF00EA33 +:10E60000E070EAE7022300222846FFF7A6FF002871 +:10E61000EADAE2E7012305AA214628468DF81480AC +:10E62000FFF79AFD0028E1DAD7E76FF00800D4E79A +:10E630000020D2E7F0B50127061DA7B0044680F8F8 +:10E6400040703046FEF74BFE0546002840F08180C2 +:10E6500001462C2205A80CF087F84FF00043282231 +:10E66000294610A80D930CF07FF81A9723681B6AAF +:10E670009D4202D36FF033001BE019A8FEF72FFE76 +:10E68000002866D119AA10A92046FEF7E9FF80B933 +:10E690000D9B002B38DB3046FEF721FE58B1199B4D +:10E6A0000E931A9B0F93002305A920461A4600F0EB +:10E6B00052F827B0F0BD01AB1BAA0EA92046FFF708 +:10E6C000ADF80028F5DBEAD0039A0E99049B8A4244 +:10E6D0000F9801D1984217D0824201D1994213D0AC +:10E6E0000E92DFE79DF97030002B0DDA1DA9204650 +:10E6F000FFF75CF80028DCDB1ED01BAA10A920461F +:10E7000000F052FA0028D4D11BAA10A92046FFF726 +:10E710000EF80028E6D0831CCBD10DF1400C05AFDC +:10E720000135BCE80F000FC7BCE80F000FC79CE81D +:10E73000070087E8070099E79DF870301BAA10A929 +:10E7400003F07F038DF870300346204600F04FF948 +:10E75000D8E70020ADE72DE9F04F2DED028B9BB0FF +:10E7600006460D460793CB6907980133059202EBE5 +:10E770000017CB610B1DD1E9011408EE103A1346C6 +:10E78000C5E901419F420FD10023CDE9094106931C +:10E7900030686968C3689847044670B114F1340F53 +:10E7A00000F0F4802046FFE0D86810332A6A024463 +:10E7B00053F80C0C121A2A62E4E705F11C080DF15B +:10E7C0002C094FF0FF3306F1200A10271022414692 +:10E7D00048460B9301F048F8224600946B68514676 +:10E7E0003046CDE90187FFF7CAF804460028D5D1A5 +:10E7F0008346B84608EE909A2AE0079B9B4580F234 +:10E80000A080059A4FEA0B13D35802EB0B1943452E +:10E8100040F0978018EE900AD9E9021201F024F82E +:10E82000D9F80C300022514602933046D9F808300E +:10E83000CDE900736B68FFF7A2F804460028ADD15C +:10E84000D9F804300BF1010B9844D9F80C301F446F +:10E850002B6A23F00043043BBB42CED804230DF1C6 +:10E860002C0800225146029330466B68CDE90078AF +:10E87000FFF785F80446002890D14FF0FF33024699 +:10E88000514630467361FFF74DF80446002885D1A4 +:10E89000306803699847044600287FF47FAF4FF043 +:10E8A000FF330FAF024669680F9330462B6A00971B +:10E8B00023F00043043BFEF7AEFE044600287FF43D +:10E8C00071AF0F9A0B9B9A4260D1069B4BB306F136 +:10E8D00004094846FEF703FD002875D143463A4631 +:10E8E00009A93046FEF79AFF00285DDB6CD06B6803 +:10E8F0004246394630460D93AB680E93002300F034 +:10E9000076F8002850D1494609A8FEF7F2FC18B95C +:10E910006B687360AB68B3603046FFF78BFE00280E +:10E9200042D13469002C3FF43DAF18EE101A201D7F +:10E93000FEF7DFFC18B96B686360AB68A3602468FE +:10E94000F0E7012342460A99304600930FABFEF7E9 +:10E9500069FD044600287FF425AF01220FA918EEB7 +:10E96000900A00F081FF01232246514602930FAB2B +:10E970003046CDE900736B68FFF701F804460028C4 +:10E980007FF40CAF08F10108013761E74FF0FF3366 +:10E9900000220FA909A833620123CDE90F23FEF756 +:10E9A000A8FC30B96FF033001BB0BDEC028BBDE8A2 +:10E9B000F08F18EE101A3046FFF7EEFA0123069397 +:10E9C00000283FF4E5AEEFE73A4609A93046FEF7E6 +:10E9D00056FF0028E8DBA4D06B6839463046189310 +:10E9E000AB68199300231A46FFF7B5FE97E770B599 +:10E9F000154688B00C26D27955F8044B002B0792A7 +:10EA00000094344403960494CDE9052314BF0223F3 +:10EA100001236A46CDE90165FFF79DFE08B070BD90 +:10EA200070B592B006460D46FFF7C9FC044670BBB0 +:10EA3000EB6903F41023B3F5803F28D12A1D10465B +:10EA4000FEF74DFC18BB07A93046FEF709FE044649 +:10EA5000E8B90C23EA680690009304AB0899039286 +:10EA6000CDE904003046FEF7DDFC044678B92B6999 +:10EA700003AA07A905936B69069303463046FFF77F +:10EA8000B6FF044618B9EB6923F48033EB612046E6 +:10EA900012B070BD70B505460C46FFF7C1FF0646C3 +:10EAA00005F10C02EB681BB1A3420DD12368136082 +:10EAB000A3690BB11B682BB92B685B6B13B9606B37 +:10EAC0000BF0DAFD304670BD1A461B68EBE72DE906 +:10EAD000F043074695B00E469046994601F124044E +:10EAE0004046316AFEF716FC3B680844DB699842F1 +:10EAF00018D804394346002243F8041B0991CDE994 +:10EB00000A230C23CDE90C3198F807303146CDE9C2 +:10EB10000E29109309AA02233846FFF71CFE15B0F0 +:10EB2000BDE8F083002937DB354609AC0FCD0FC4B3 +:10EB30000FCD0FC495E8070084E80700314638463A +:10EB4000FFF788FA0028EAD1129B424631467362E9 +:10EB5000139BB362336A043B42F8043B03920C22DA +:10EB6000CDE90130CDE9042398F8073001AACDE9B9 +:10EB70000609089338460223FFF7EDFD0028CED1A1 +:10EB8000119B024609A943F0004311937368129345 +:10EB9000B36813930346BFE7224631463846FEF773 +:10EBA0005FFD00289CD0BAE72DE9F04780468CB085 +:10EBB00010460C461646FEF7ADFB0B6A143023F0E8 +:10EBC000004383421DD101AA04314046FEF757FE9F +:10EBD000051E12DB099A002A13DA236A01A94046AE +:10EBE00063F0004313400993636A0A93A36A0B938B +:10EBF00000231A46FFF7AFFD054628460CB0BDE8D6 +:10EC0000F087336830460193FEF784FB00230290BF +:10EC100001AA21464046CDE903330123FFF79BFDBE +:10EC200005460028E9D1D8F80C70211D4FF0FF3AB5 +:10EC3000CFB9D8F81070211D002FDED0381DFEF797 +:10EC400058FB70B9FC6833689C420AD93046FEF71D +:10EC500061FB201AF8603046FEF75CFBBB69181AAE +:10EC6000B8613F68E8E7381DFEF743FB30B9D7F8D5 +:10EC70000C903368994503D1C7E901AA3F68D7E7EB +:10EC8000FCD93046FEF746FBA9EB0000F860F5E73B +:10EC9000F0B5A5B00546FEF7DDFB044600287ED1A1 +:10ECA0002B680146E86B5A6AD2080BF05DFD2A68B2 +:10ECB000EC620EA92846D2E90832C5E90D439A4212 +:10ECC00094BF2A632B63FFF7C5F90446002863D17C +:10ECD00019A92846FFF7BEF9044600285CD103466F +:10ECE000024619A92846FFF736FD0446002853D1ED +:10ECF00041F22E438DF81A001A9E1027ADF81830F5 +:10ED000008231B9A8DF81B302B686E60D9691B6A2B +:10ED100009910A934FF0011322490B930CAB086839 +:10ED20004968AA600597019703C334230EA92846B2 +:10ED300016932023CDE90762CDE9176206AE029350 +:10ED400001AACDE903630123FFF705FD20B110F10E +:10ED5000340F02D004461FE00124202301AA0EA98B +:10ED6000284604930197CDE902360123FFF7F3FC0F +:10ED700020B110F1340FEDD1002CEBD00022012393 +:10ED80000EA92846CDE9012301AAFEF769FC044635 +:10ED900010B92B681B6AAB632846FEF7C2FA2046FF +:10EDA00025B0F0BDBFD0010830B590F840309DB01F +:10EDB00005460191002B43D001AB02AA06A92846C3 +:10EDC000FEF74EFE831C044642D12F2101980CF021 +:10EDD00098F8002839D12B6811A928461B6AAB6323 +:10EDE000FFF738F9044600282FD10F9B024611A9DE +:10EDF0001A93109B1B9303462846FFF7ACFC04466E +:10EE000018BB40F622038DF80E00ADF80C30019BC4 +:10EE1000184600930CF0A5F81299139A8DF80F007C +:10EE2000284604910592009BCDE90F1202AA06A97B +:10EE3000FFF74DFE044640B92B681B6AAB6304E044 +:10EE4000FFF7F8FB04460028B6D020461DB030BDC1 +:10EE5000002808BF6FF01004F7E72DE9F0471F46C0 +:10EE600003F0030392B00646012B0C46DDF86880E0 +:10EE7000019211D101AB03AA07A93046FEF7F0FDBC +:10EE80000546B0B99DF81030222B00F08880B905F6 +:10EE900034D56FF0100508E090F84030002BE9D130 +:10EEA000FFF7C8FB05460028E4D0284612B0BDE8AD +:10EEB000F087821CF9D1DDF804A02F2150460CF018 +:10EEC00020F881460028F0D1FB05EED540F611036D +:10EED0008DF812005046ADF810300CF042F84FF0AB +:10EEE000FF338DF8130003AA07A93046CDE9053991 +:10EEF0005346FFF7ECFD05460028D6D1089B0022BB +:10EF00007805C4F818806360099BE761A360039BE0 +:10EF10002262E360059B2361069B63610FD44FF07F +:10EF2000FF33E362B8F1000F13D0D8F8003083B19B +:10EF30006363E36903F00303012B1FD029E013B1DE +:10EF400047F48037E7614FF0FF320023C4E9042320 +:10EF5000E5E733685A6B32B1F36813B16FF00B0514 +:10EF6000A3E76263E5E7E26902F00302012A0AD13E +:10EF700058690BF079FB60630028EFD0F368002537 +:10EF80002360F46091E798690BF06EFB60630028E2 +:10EF9000E4D004F12C013068FEF751FAEEE76FF08F +:10EFA000140582E713B500240094FFF756FF02B062 +:10EFB00010BD10B590F840309CB00446019143B1AB +:10EFC00001AB02AA06A92046FEF74AFD30B11CB0EB +:10EFD00010BDFFF72FFB0028F2D0F8E79DF80C30AA +:10EFE000222B1CD002AA06A92046FFF7DDFD00282F +:10EFF000EDD19DF80C30222BE9D106AA12A92046AA +:10F00000FEF73DFC0028E2DB1A9B06A920460F9381 +:10F010001B9B109300231A46FFF79DFBD7E704AA1A +:10F0200011A92046FEF71CFB0028D0D1199B142BF8 +:10F03000D8D06FF02600CAE7F0B590F84030B3B0F2 +:10F040000446CDE90221002B48D0039B05AA11A953 +:10F050002046049304ABFEF703FD002842D19DF83F +:10F06000183005AA11A963F07F038DF81830034604 +:10F070002046FFF7BCFC002834D109AF02AB1CA925 +:10F0800020463A46FEF7ECFC054668B3821C76D172 +:10F090002F2102980BF035FF002870D10DAE97E8B4 +:10F0A0000F0086E80F0006AA0EAB07CA83E8070028 +:10F0B0009DF8383003F07F038DF83830029B1846F6 +:10F0C00001930BF04EFFAB1C8DF83B00019B22D14E +:10F0D00032461CA92046FFF7FAFC21E0FFF7AAFA06 +:10F0E0000028B2D033B0F0BD9DF818309DF828202C +:10F0F00003F07F039A4244D1222ACFD10BAA27A939 +:10F100002046FEF7ADFA0028ECD12F9B142BC5D07A +:10F110006FF02600E6E732461CA92046FFF767FCA1 +:10F120000028DFD1012305AA11A9204684F8413027 +:10F1300003ABFEF795FC0028D4D1064684F84100C5 +:10F1400005AA11A92046FFF72FFD0028CAD10235D4 +:10F15000C8D09DF82830222BC4D11CAA28A920464B +:10F16000FEF78DFB0028BDDB309B32461CA92046F4 +:10F170002593319B26933346FFF7EDFAB2E72846F5 +:10F18000B0E76FF01400ADE7002807DC10F1160FB0 +:10F1900004DA10F1340F08BF6FF089007047F7B53B +:10F1A000089F0E4604681946C06900232568009729 +:10F1B0000027E0FB0623204601976D69A84703B0AE +:10F1C000F0BDF7B5089F0E4604681946C0690023D4 +:10F1D000256800970027E0FB062320460197AD69CC +:10F1E000A84703B0F0BD37B50468C36900202268A2 +:10F1F000009301902046D569A1FB0323A84703B0E3 +:10F2000030BD006803681B69184703680133036059 +:10F21000002070472DE9F04100F1A4070D46044697 +:10F220003846F8F713FD2B682846C4F890509B68C1 +:10F230009847064640B10023C4F890303846F8F7A6 +:10F2400021FD3046BDE8F0812422014604F16C0026 +:10F2500004F158080BF088FA254BA5652846E365AC +:10F26000244B2366244B6366244BA3662B685B6A9E +:10F270009847D4F8943083422CBFE366E066284672 +:10F280002B689B6A9847D4F8983083422CBF236739 +:10F29000206728462B68DB6A9847D4F89C30834265 +:10F2A0002CBF6367606728462B689B6B9847334683 +:10F2B000626F0CF085FEA0671F30D4F8A030414685 +:10F2C00020F01F00834294BFE367E06704F114005D +:10F2D000FEF790FD06460028B0D000233846C4F85B +:10F2E0009030F8F7CFFC3046BDE8F041FFF74CBF57 +:10F2F0009FF10008C3F10008E7F1000803F20008DD +:10F3000070B500F1A40605463046F8F79FFCD5F825 +:10F310009040A4B105F11400FEF7AEFD044610B113 +:10F32000FFF732FF0446D5F890000368DB68984782 +:10F3300010B1002C08BF04460023C5F890303046B9 +:10F34000F8F7A0FC204670BD37B500F1A4050446CF +:10F3500001912846F8F77AFC019904F11400FFF7AF +:10F3600028FE04462846F8F78DFC204603B0BDE889 +:10F370003040FFF709BF37B500F1A4050446284621 +:10F38000CDE90021F8F762FC04F11400DDE9002169 +:10F39000FFF752FE04462846F8F774FC204603B0F7 +:10F3A000BDE83040FFF7F0BE37B500F1A4050446D4 +:10F3B00001912846F8F74AFC019904F11400FFF77F +:10F3C000F3FC04462846F8F75DFC204603B0BDE890 +:10F3D0003040FFF7D9BE70B500F1A406C4B00546B1 +:10F3E000144630460191F8F731FC02AA019905F163 +:10F3F0001400FEF7C3FC05463046F8F743FC039BB8 +:10F4000023619DF80830112B0BD0222B44F2FF13FF +:10F4100018BF00232846636044B0BDE87040FFF782 +:10F42000B3BE48F2FF13F5E7F7B5064614460021D0 +:10F43000282206F1A40720460BF096F9002338464F +:10F440000193F8F703FC01AA0D4906F11400FEF739 +:10F4500018FD05463846F8F715FC6DB9736F019A2B +:10F46000C4E90033B36FC4E902359B1AC4E904351B +:10F47000C4E90635FF236362284603B0F0BD00BF30 +:10F480000BF200082DE9F743814698463820019297 +:10F4900009F1A4070E46F7F7CDFF05463846F8F701 +:10F4A000D5FB18F0030C09F11400019A37D0BCF118 +:10F4B000010F4FF0000334D0BCF1020F9C4601D085 +:10F4C000002100E003214FEA68044FEAA80E04F48B +:10F4D00080740EF4007E44EA0E0408F4806E4FEA55 +:10F4E000082844EA0E0408F4006844EA080444EAE0 +:10F4F0000C0423430B432946FFF754FD04463846CA +:10F50000F8F7C0FB34B93560204603B0BDE8F043DE +:10F51000FFF73ABE38212846F7F7A2FFF4E70123A8 +:10F52000CEE74FF0020CCBE770B500F1A40605461C +:10F530000C463046F8F78AFB05F114002146FFF728 +:10F54000A9FA05463046F8F79DFB1CB13821204644 +:10F55000F7F786FF2846BDE87040FFF715BE30B5C7 +:10F5600000F1A40585B0044628460193CDE90221A7 +:10F57000F8F76CFB039904F11400DDE90132FEF7A2 +:10F5800088FF04462846F8F77DFB204605B0BDE815 +:10F590003040FFF7F9BD30B500F1A40585B0044651 +:10F5A00028460193CDE90221F8F750FB039904F1B5 +:10F5B0001400DDE90132FEF7CFFD04462846F8F7D6 +:10F5C00061FB204605B0BDE83040FFF7DDBD37B533 +:10F5D00000F1A405044601912846F8F737FB01998C +:10F5E00004F11400FFF71CFA04462846F8F74AFB1A +:10F5F000204603B0BDE83040FFF7C6BD30B500F18E +:10F60000A40585B0044628460193CDE90221F8F708 +:10F610001DFB039904F11400DDE90132FEF79DFFA3 +:10F6200004462846F8F72EFB204605B0BDE83040DA +:10F63000FFF7AABD37B500F1A4050446019128469D +:10F64000F8F704FB019904F11400FEF78CFB044663 +:10F650002846F8F717FB204603B0BDE83040FFF717 +:10F6600093BD37B500F1A405044601912846F8F78B +:10F67000EDFA019904F11400FEF777FB04462846E1 +:10F68000F8F700FB204603B0BDE83040FFF77CBD33 +:10F6900037B500F1A40504462846CDE90021F8F766 +:10F6A000D5FA04F11400DDE90021FEF76FFF0446EE +:10F6B0002846F8F7E7FA204603B0BDE83040FFF7E8 +:10F6C00063BDF7B505462C200E46019205F1A4074F +:10F6D000F7F7B0FE04463846F8F7B8FA05F114001B +:10F6E000019A2146FEF76CFA05463846F8F7CAFA41 +:10F6F00035B93460284603B0BDE8F040FFF744BD9B +:10F700002C212046F7F7ACFEF4E770B500F1A40613 +:10F7100005460C463046F8F799FA05F114002146E3 +:10F72000FEF776FA05463046F8F7ACFA1CB12C2104 +:10F730002046F7F795FE2846BDE87040FFF724BD48 +:10F7400070B500F1A406C4B00446154630460191D8 +:10F75000F8F77CFA02AA019904F11400FEF766FAA0 +:10F7600004463046F8F78EFA012C0DD19DF808308A +:10F77000112B0FD0222B14BF0023032304A92846EA +:10F7800085F800310BF0D4FB204644B0BDE8704052 +:10F79000FFF7FABC0523F1E737B500F1A4050446ED +:10F7A0002846CDE90021F8F751FA04F11400DDE90B +:10F7B0000021FEF7B3FA284603B0BDE83040F8F761 +:10F7C00061BA37B500F1A405044601912846F8F75F +:10F7D0003DFA019904F11400FEF78EFA044628461A +:10F7E000F8F750FA204603B0BDE83040FFF7CCBC34 +:10F7F00037B500F1A405044601912846F8F726FA2A +:10F80000019904F11400FEF779FA284603B0BDE827 +:10F810003040F8F737BA0000094B03F1080288338B +:10F8200010B5044602604360FFF76AFD04F1A400CE +:10F83000F8F740FA2046FDF7DDF9204610BD00BF7D +:10F84000C8D00108A0F10400FFF7E6BF10B50446D8 +:10F85000FFF7E2FFC8212046F7F702FE204610BD61 +:10F86000A0F10400FFF7F2BF70B50A440E4E036822 +:10F8700093FAA3F393FAA3F30360914212D011F821 +:10F88000014B84EA030505F00F0556F8255085EA7B +:10F89000131383EA141404F00F0456F8244084EA86 +:10F8A0001313EAE7036070BDA8C5010870B50446EC +:10F8B0001E46154600F08AFA134A002104F114008E +:10F8C00022608032626044220AF04EFF382200211A +:10F8D00004F158000AF048FF002304F1A400C4E931 +:10F8E0002436049BC4F89830059BC4F89C30069BD2 +:10F8F000C4F8A030F8F7A2F91DB129462046FFF759 +:10F9000089FC204670BD00BFD0D001082DE9F04130 +:10F910001D460368A2B004469B6888461746289E89 +:10F9200098470346002846D101462422019008A8A2 +:10F930000AF01AFF224A204603940492214A0592B3 +:10F94000214A0692214A07922268526A9047226809 +:10F9500040452CBF0890CDF820802046926A904701 +:10F960002268B8422CBF099009972046D26A904776 +:10F970002268A8422CBF0A900A952046926B9047B5 +:10F980000A9A019B0CF01CFB0B901F3003A920F07E +:10F990001F00B04294BF0C900C9611A8FFF778F9A5 +:10F9A00020B122B0BDE8F041FFF7EEBB236820464E +:10F9B000DB6898470346184622B0BDE8F08100BFD7 +:10F9C0009FF10008C3F10008E7F1000803F2000806 +:10F9D000F7B500F1A40705460E463846F8F736F9A4 +:10F9E000D5F8903063B1002E08BF1E462B6828461C +:10F9F0009B6A9847044660B13846F8F743F905E03A +:10FA00003EB96FF012043846F8F73CF9204603B0CF +:10FA1000F0BDD5F8A0303046D5F894100093D5E964 +:10FA20002623FFF773FF04460028E5D12B683146F3 +:10FA300028465B6A98470446DEE738B543680446C3 +:10FA40000D4643B90B6800F108012846DB6D984765 +:10FA500000B9656038BD6FF01500FBE710B50446CE +:10FA6000406830B10368A1681B6E9847002363604B +:10FA700010BD6FF01500FBE7044B10B503600446A2 +:10FA800043680BB1FFF7EAFF204610BD60D10108C3 +:10FA900043680A46196810B48C6E8168184623467C +:10FAA0005DF8044B1847436881681A681846D26E9F +:10FAB0001047436881681A681846126F10474368F8 +:10FAC00081681A681846526F104710B50446FFF750 +:10FAD000D3FF0C212046F7F7C3FC204610BD0B4690 +:10FAE00040F20112002170B5044618460AF03CFEAF +:10FAF00003466068A1680268556E1A462B46BDE849 +:10FB000070401847024A02600022C0E90122704793 +:10FB100060D1010870B50D464168044641B92968B5 +:10FB20000E6B00F108012846B04700B9656070BD52 +:10FB30006FF01500FBE710B50446406830B103686C +:10FB4000A1685B6B98470023636010BD6FF01500E0 +:10FB5000FBE70000044B10B50360044643680BB19B +:10FB6000FFF7E9FF204610BD8CD1010830B444688E +:10FB700013462268956B0A4681682046AC4630BC25 +:10FB8000604730B4446813462268D56B0A468168E2 +:10FB90002046AC4630BC6047436881681A68184606 +:10FBA000126C1047436881681A681846526C1047F7 +:10FBB00030B4446813462268956C0A468168204632 +:10FBC000AC4630BC6047436881681A681846D26CFE +:10FBD0001047436881681A681846126D10474368D9 +:10FBE00081681A681846526D104743680A461968BA +:10FBF00010B48C6D8168184623465DF8044B184795 +:10FC000010B50446FFF7A6FF0C212046F7F728FCA5 +:10FC1000204610BD024A02600022C0E9012270475E +:10FC20008CD101086FF0570070476FF05700704794 +:10FC30006FF057007047002070470368002210B42F +:10FC40009C6C0123A4465DF8044B6047036810B424 +:10FC50009C6C0023A4461A465DF8044B6047036879 +:10FC60002DE9F0410446DB6C0D46984723680746B2 +:10FC7000294600229E6C20460223B0472368064690 +:10FC80003A46D3F84880294600232046C0473046EC +:10FC9000BDE8F0816FF05700704770470020704753 +:10FCA000036800229B6E184703682DE9F041DB6E64 +:10FCB00004460D469847804640F20110F7F7BAFB1C +:10FCC0002368002706461B6F29462046984723686D +:10FCD0003246294620465B6E9847002801DD0137F1 +:10FCE000F5E723684246294620469B6E98473046F2 +:10FCF00040F20111F7F7B4FB3846BDE8F08100008F +:10FD0000034B10B504460360FFF724FF204610BDE7 +:10FD1000E0D1010810B50446FFF7F2FF0C212046A0 +:10FD2000F7F79EFB204610BD73B505460C200E4626 +:10FD3000CDE90032F7F77EFB0446FFF76BFF094978 +:10FD4000204621602946DDE90032FFF7E3FE054643 +:10FD500030B1236820465B689847284602B070BDE2 +:10FD60003460FAE7E0D10108034B10B504460360A4 +:10FD7000FFF782FE204610BD34D2010810B50446BC +:10FD8000FFF7F2FF0C212046F7F76AFB204610BD73 +:10FD900073B505460C200E460192F7F74BFB04465F +:10FDA000FFF7B0FE084B2946019A20462360FFF773 +:10FDB00044FE054630B1236820465B6898472846D4 +:10FDC00002B070BD3460FAE734D20108074B01225B +:10FDD00010B5044640F8043BF6F7B4F9044B20464E +:10FDE00003F1080288332260636010BDB8C60108C1 +:10FDF00058D2010838B50446FFF79DFE0546236832 +:10FE000020465B689847284638BD38B50446FFF75A +:10FE100025FE0546236820465B689847284638BD7E +:10FE20007047000010B5032000F0AEF802F010FF9C +:10FE30000F49104A8B69C3F30323D35C03F01F03FC +:10FE4000D8408B6903F00F03D35C0B4A03F01F0308 +:10FE500020FA03F31360094B18600F2007F08EFDA2 +:10FE6000044618B9FFF7DCFF204610BD0124FBE76C +:10FE70000044025836D301081C0300241803002450 +:10FE800038B5044607F080FD0546631C1EBF044BD1 +:10FE90001B78E41807F078FD431BA342FAD338BD62 +:10FEA00010030024014B1868000C70470010005C20 +:10FEB000014B1868704700BF00E8F11F014B18683C +:10FEC000704700BF04E8F11F014B1868704700BF7E +:10FED00008E8F11F024A136A43F0010313627047F6 +:10FEE0000004005830B5CC030DD5430900F01F05C0 +:10FEF000012403F1B063AC4008331B011D68A2B9B3 +:10FF000025EA04041C608B030ED500F01F01400994 +:10FF1000012300018B4000F1B04042B9D0F88420A9 +:10FF200022EA0303C0F8843030BD2C43EAE7D0F85E +:10FF300084201343F6E730B5CC030DD5430900F018 +:10FF40001F05012403F1B063AC400C331B011D6895 +:10FF5000A2B925EA04041C608B030ED500F01F0132 +:10FF60004009012300018B4000F1B04042B9D0F8B4 +:10FF7000C42022EA0303C0F8C43030BD2C43EAE7B2 +:10FF8000D0F8C4201343F6E707490302CA6803F414 +:10FF9000E06322F4E0621204120C134343F0BF63E7 +:10FFA00043F40033CB60704700ED00E0164B30B5F2 +:10FFB000DC68C4F30224C4F10705231D042D28BF07 +:10FFC0000425062B4FF0FF338CBF033C002403FABB +:10FFD00005F5002803FA04F321EA050122EA0302E9 +:10FFE00001FA04F141EA02034FEA0313DBB206DB34 +:10FFF00000F1604000F5614080F8003330BD00F052 +:020000040801F1 +:100000000F00024A1354F9E700ED00E014ED00E0A0 +:10001000002808DB0123420900F01F0003FA00F06A +:10002000014B43F82200704700E100E000280DDB9F +:100030004309012200F01F00203302FA00F0044AB5 +:1000400042F82300BFF34F8FBFF36F8F704700BF9D +:1000500000E100E0044B1B68C3F30313072B0CBF44 +:1000600003200120704700BF00ED00E010B528B16B +:1000700090F83530022B03D08023436501207FE0C8 +:100080000368504A934252D04F498B424FD01831A7 +:100090008B424CD018318B4249D018318B4246D01C +:1000A00018318B4243D018318B4240D018318B42EB +:1000B0003DD001F556718B4239D018318B4236D084 +:1000C00018318B4233D018318B4230D018318B42EB +:1000D0002DD018318B422AD018318B4227D01831BD +:1000E0008B4224D01A6822F00E021A601A6822F09D +:1000F00001021A60354A934243D1026E136823F419 +:1001000080731360D0E9161303F01F02012393409C +:100110004B60D0E919325A60C36E002B46D01A6882 +:1001200022F480721A60D0E91C325A603EE0042149 +:10013000934280F835101ED0234A93421BD01832C8 +:10014000934218D01832934215D01832934212D0ED +:10015000183293420FD0183293420CD01832934287 +:1001600009D002F55672934205D01832934202D05C +:1001700018329342FFD01A6822F001021A60002060 +:1001800010BD134A9342B8D014329342B5D0143202 +:100190009342B2D014329342AFD014329342ACD0D7 +:1001A00014329342A9D014329342A6D001230024E2 +:1001B00080F83530036D80F834400BB19847DEE7A6 +:1001C0001846DDE71000024028000240085402589B +:1001D0001C54025890F8350070470000104BDA6844 +:1001E000D20706D40E4BD3F80C0110F001000AD14F +:1001F00070470C4A5A6002F188325A60DB68DB07AC +:10020000F0D501207047074AC3F8042102F1883273 +:10021000C3F80421D3F80C0100F00100704700BFBF +:1002200000200052230167450A4BDA6842F00102C0 +:10023000DA60DA68D2070BD5D3F80C2142F001025C +:10024000C3F80C21D3F80C01C04300F00100704743 +:1002500001207047002000522DE9F8430E462D4C36 +:100260000546D4F8108007F08FFB022E07462A4B74 +:100270002AD1D4F81041DFF8A8801C4044F0004493 +:10028000DFF89090B8F1040F23D1D9F81000C0F333 +:10029000800070B934F0004128D0204A002C9369C6 +:1002A00043EA040393611B4B1DDB5C610120BDE845 +:1002B000F8836B1CE6D007F067FBC01BA84201D88F +:1002C000002DDFD10320F2E708EA03044FF0040811 +:1002D000D6E7D9F8103128EA030313F0040F0CBF56 +:1002E00001200020D5E7C3F81411DFE7012E094BE8 +:1002F00006D11A69D103DAD54FF480325A61D6E7B4 +:10030000D3F81021D203D2D54FF48032C3F8142190 +:10031000CDE700BF002000520000EE17383800245F +:1003200004000080F8B5284C0E461746237D012BAB +:1003300048D001F178430120B3F5801F207531D3F7 +:10034000A1F10163B3F5801F2BD2022500232946BA +:100350004CF25030A361FFF77FFF00BB012D1B4B18 +:1003600022D1DA6842F00202DA60BFF36F8FBFF386 +:100370004F8F0023FA58F2500433202BFAD1BFF3E9 +:100380006F8FBFF34F8F4CF250302946FFF764FF59 +:10039000012D0E4B0FD1DA6822F00202DA60002341 +:1003A0002375F8BD0546D1E7D3F80C2142F00202CF +:1003B000C3F80C21D9E7D3F80C2122F00202C3F8CC +:1003C0000C21ECE70220ECE7383800240020005232 +:1003D00001F00303032B17D11D4BDA6822F0300222 +:1003E000DA60D3F80C2122F03002C3F80C21DA686D +:1003F0000243DA60D3F80C211043C3F80C019A6968 +:1004000042F010029A617047CA070BD5104BDA68A8 +:1004100022F03002DA60DA680243DA60DA6842F029 +:100420008802DA608B0711D5094BD3F80C2122F032 +:100430003002C3F80C21D3F80C211043C3F80C018F +:10044000D3F80C2142F08802C3F80C21704700BF9A +:100450000020005210B5CC070BD50F4CE36823F4F5 +:10046000E663E360E36843EA0023134343F0840355 +:10047000E3608B070FD50849D1F80C3123F4E6630C +:10048000C1F80C31D1F80C3143EA0020024342F0AC +:100490008402C1F80C2110BD002000522DE9F04764 +:1004A000464E05460F46337D012B00F08480012126 +:1004B000002331754468B3610C4006D04CF25030D3 +:1004C000FFF7CAFE041E18BF01246B68980706D404 +:1004D0006CB10124002333752046BDE8F08702216A +:1004E0004CF25030FFF7B8FE0028F1D0F1E7D5F814 +:1004F0000080B8F1010F26D169682869FFF768FF0D +:100500006B68D9070CD541464CF25030FFF7A4FE7A +:100510002B4A041ED36818BF012423F00803D360BC +:100520006B689A07D6D502214CF25030FFF794FE43 +:10053000234A0028D2F80C3118BF012423F0080305 +:10054000C2F80C31C6E74FF0FF33DFF87480DFF8F4 +:1005500074903B60D5F808A0D5E9022313445345B5 +:10056000B8D950462A696968FFF774FF686810F0C7 +:1005700001000AD001214CF25030FFF76DFED8F88F +:100580000C3003EA0903C8F80C306B689B070AD5E6 +:1005900002214CF25030FFF75FFED8F80C3103EA2D +:1005A0000903C8F80C3118B10446C7F800A091E758 +:1005B0000AF1010AD0E702248EE700BF3838002490 +:1005C00000200052FBF8FFFF2DE9F74F0023DFF872 +:1005D000BC81DFF8BCC14FF0B0490A6832FA03F4BD +:1005E00002D103B0BDE8F08F01279F403A4000F0F0 +:1005F000B6804C684FEA430E032524F0100A05FA32 +:100600000EF50AF1FF36ED43012E10D8866806EA92 +:10061000050BCE6806FA0EF646EA0B0686604668BB +:1006200026EA0707C4F300169E4037434760C768B1 +:10063000BAF1020F8E6807EA050706FA0EF646EAD7 +:100640000706C66014D14FEAD30A03F0070B0F2741 +:1006500000EB8A0A4FEA8B0BDAF8206007FA0BF7F7 +:1006600026EA07070E6906FA0BF63E43CAF8206031 +:100670000668354004F0030606FA0EFE4EEA05054C +:100680000560E5006BD5D8F8F45023F0030603F0BD +:1006900003074FF00F0E45F0020506F1B046BF000C +:1006A000C8F8F45006F58066D8F8F45005F0020555 +:1006B0000195019D0EFA07F5D6F808A02AEA050E65 +:1006C000314DA8424DD005F58065A8424BD005F5C7 +:1006D0008065A84249D005F58065A84247D005F558 +:1006E0008065A84245D005F58065A84243D005F550 +:1006F0008065A84241D005F58065A8423FD005F548 +:100700008065A8423DD005F58065A8420CBF09254B +:100710000A25BD40E70345EA0E05B5606FEA02060B +:10072000DCF8005054BF35401543A703CCF8005007 +:10073000DCF8045054BF35401543E7024FF0B04792 +:10074000CCF80450D9F8005054BF35401543A402EA +:100750003D607D6854BF35401543C9F804500133EE +:100760003BE70025D5E70125D3E70225D1E703259F +:10077000CFE70425CDE70525CBE70625C9E7072503 +:10078000C7E70825C5E700BF00000258004402582B +:10079000800000580AB1816170470904FBE7704787 +:1007A00008B5054BD8681A6822EA00021A6058603A +:1007B000FFF7F5FF08BD00BF0065025803689A699E +:1007C000910701D500229A629A69D20703D49A69E7 +:1007D00042F001029A61704730B5039DC1F30901EF +:1007E000046845EA024260681A43044B43EA5553E1 +:1007F0000A4320EA03000243626030BDFF63FF0347 +:10080000426B0BB210B5164CA24202D0154CA2425C +:1008100011D1002B0DDB10291ED020291ED0002362 +:10082000402901D143F0400301680A6813430B607B +:1008300010BDB823F4E7002BACBF0023B823CC07CE +:1008400048BF43F0F2038A0748BF43F0F40320296E +:10085000EAD143F02003E7E79023E5E76023E3E7ED +:1008600079140108ED12010811F0010307D090F886 +:10087000413003F02803282B0CBF4223F2238A07C0 +:1008800009D590F8412002F02802282A0CBF43F035 +:10089000440343F0F4030A04016848BF43F0B8037B +:1008A0000A6822EA03030B607047C36AAA2B02D1CD +:1008B0000023C3627047C36AB3F52A4FFAD14FF0E1 +:1008C0000073F6E7704710B5044600284AD090F848 +:1008D000413003F0FF021BB980F84020FFF7F2FF20 +:1008E000242384F8413023681A6822F001021A6038 +:1008F000626822F070621A619A6822F400429A607B +:10090000D4E90221012924D142F400429A605A68B4 +:10091000002042F0007242F400425A60DA6822F489 +:100920000042DA60D4E904210A43A16942EA0122C3 +:10093000DA60D4E907210A431A601A6842F001021A +:100940001A602023606484F84130206384F84200F8 +:1009500010BD42F4044202299A60D8D14FF40062DB +:100960005A60D4E70120F3E737B50446069894F8B7 +:100970004150202D43D194F84050012D3FD0012506 +:10098000626284F84050212584F84150102584F893 +:1009900042500025656463851A4BE0626363638D92 +:1009A0009BB2FF2B15D9FF234FF080722385236B59 +:1009B000112B04D1AA2802D0B0F52A4F0DD1204620 +:1009C000FFF773FF638D9BB2FF2B00D8E26A0E4BDB +:1009D00004E0638DE26A2385E9E7002300252046D1 +:1009E0000093134694F82820FFF7F6FE20460121D5 +:1009F00084F84050FFF704FF284603B030BD0220C2 +:100A0000FBE700BFCB1101080020008037B504468A +:100A1000069894F84150202D43D194F84050012D70 +:100A20003FD00125626284F84050222584F841506D +:100A3000102584F842500025656463851A4BE062F6 +:100A40006363638D9BB2FF2B15D9FF234FF0807238 +:100A50002385236B122B04D1AA2802D0B0F52A4F8C +:100A60000DD12046FFF721FF638D9BB2FF2B00D8ED +:100A7000E26A0E4B04E0638DE26A2385E9E7002316 +:100A8000002520460093134694F82820FFF7A4FE83 +:100A90002046022184F84050FFF7B2FE284603B0FA +:100AA00030BD0220FBE700BFCB110108002400800D +:100AB0002DE9F041984690F8413004460F4603F086 +:100AC00028031646282B04D101B122B94FF4007334 +:100AD0006364012044E048F20201FFF7C5FE90F88C +:100AE0004030012B3ED090F841300121292B80F875 +:100AF000401013D1FFF7B8FE03681A6852040DD5F1 +:100B00001A68806B22F480421A6038B1164B036574 +:100B1000FFF7ACFA10B1A06B036D98472A23256844 +:100B2000002084F84130202384F8423060646B68F0 +:100B300023F400436B606685638DC4F82C802385A5 +:100B40000A4B67626363AB69DB0301D40823EB6183 +:100B500084F8400048F202012046FFF751FE0020D1 +:100B6000BDE8F0810220FBE7DF150108C90F01088D +:100B700008B590F84120202A0AD128224FF40041DC +:100B800080F84120034A4263FFF73AFE002008BD87 +:100B90000220FCE7C90F01080268436B91691268E3 +:100BA00003B11847704738B5002580F8425090F8D7 +:100BB0004130212B4FF0200380F841300AD111231E +:100BC000012145630363FFF74FFE80F8405007F0B3 +:100BD0002DF838BD1223022145630363FFF744FE5D +:100BE00080F8405007F041F8F3E708B503680021AA +:100BF0001A6880F84210510415D51A6822F4804210 +:100C00001A6090F84130292B13D12823012180F854 +:100C1000413021230363FFF727FE002380F8403093 +:100C200007F044F808BD1204EBD51A6822F400421C +:100C3000E6E790F841302A2BF4D12823022180F8EE +:100C4000413022230363FFF70FFE002380F840307A +:100C500007F030F8E6E7F8B590F84120044603685D +:100C600002F02802282A37D19E69C2689D69C6F31E +:100C70000046022A99684FEA1545DF6805F0FE052F +:100C800021D185EAD115C1F3090215F006050ED16F +:100C9000816C01318164816C022907D1082185644E +:100CA000D961314680F8405006F0F6FFF8BD4FF4A8 +:100CB0000041FFF7D9FD002307F0FE0280F8403025 +:100CC00031462046F0E74FF40041FFF7CDFD002309 +:100CD0002A4680F84030F3E70822DA61002380F8E2 +:100CE0004030E3E708B5164B2022C36200230363BC +:100CF000436380F8412080F842304B0712D50368E7 +:100D00005A6A436A1A70436A01334362038D4BB1D6 +:100D1000013B0385438D013B9BB24385436C43F00C +:100D20000403436448F20301FFF79EFD10220368A9 +:100D3000DA61002380F8403006F0E2FF08BD00BF12 +:100D40000000FFFF7047704790F84120602A4FF085 +:100D5000000208B508D1202180F8402080F8411019 +:100D6000026306F0D6FF08BD026380F8402007F05A +:100D700011FBF8E770B5354A002590F8413004467C +:100D800080F84250283BC2624585426C022B41EA02 +:100D90000201416429D80321FFF766FD282380F86A +:100DA00041302B4BA06B6363236B80B3112B01D0BD +:100DB000212B2CD123681A68510403D51A6822F418 +:100DC00080421A60FFF706FA01281BD0214BA06B66 +:100DD0000365002384F84030FFF748F9002834D039 +:100DE000A06B036DBDE87040184748F20301FFF7A0 +:100DF0003BFD90F84130602B02D0202380F8413039 +:100E00000023CFE72046BDE87040FFF79DBFE06BB1 +:100E10000028F7D0122B01D0222BF3D123681A68B7 +:100E2000120403D51A6822F400421A60FFF7D2F9BF +:100E30000128E7D0074BE06B0365002384F84030BE +:100E4000FFF714F908B1E06BCBE770BD0000FFFFBE +:100E5000C90F0108DF150108F8B503682022044610 +:100E60000E461F6890F84150DA6105F0F705212D14 +:100E700073D148F20101FFF7F7FC25632368204690 +:100E80005A6842F400425A605A6822F0FF7222F413 +:100E90008B3222F4FF7222F001025A60FFF78EFCBF +:100EA00079045FD52268136823F480431360A36B31 +:100EB0002BB31B68424A93421ED0183293421BD078 +:100EC0001832934218D01832934215D018329342F8 +:100ED00012D0183293420FD0183293420CD01832ED +:100EE000934209D002F55672934205D018329342CC +:100EF00002D018329342FFD05B689BB263857307C0 +:100F000010D5236826F004065A6A636A1A70636A69 +:100F100001336362238D2BB1013B2385638D013B3C +:100F20009BB26385638D9BB21BB1636C43F004037A +:100F30006364002384F84230656C6363DDB1616CE7 +:100F40002046FFF717FF94F84130282B25D1314672 +:100F50002046BDE8F840FFF7C5BE222D8ED148F2ED +:100F6000020188E73A04CAD52268136823F40043D3 +:100F70001360E36B9CE7E36A13F5803F0ED02046D5 +:100F8000FFF733FE0F4B204684F84050E3622023E6 +:100F900084F84130256306F0B3FEF8BD94F8413083 +:100FA000204684F84050222B4FF0200384F8413033 +:100FB000256302D106F07EFEEFE706F077FEECE750 +:100FC000100002400000FFFFF8B590F840300446E2 +:100FD0000D461646012BC76A7DD001238A0680F88C +:100FE000403003D5B30601D5FFF736FFE80634D508 +:100FF000F10632D5638D9BB203BB94F84130282BA8 +:101000000AD1B7F1007F07D129462046FFF76AFED3 +:10101000002084F84000F8BD94F841202368292A74 +:101020004FF01002DA61F3D117F5803FF0D020467F +:10103000FFF7C4FB2046FFF7D8FDE9E7236810223D +:10104000DA61636C43F00403636437F08073DFD1CB +:10105000616C2046FFF78EFEDAE76A071AD5730740 +:1010600018D5638D9BB26BB123685A6A636A1A7094 +:10107000636A01336362238D013B2385638D013BEA +:101080009BB26385638D9BB2002BC1D117F5803F66 +:10109000BED0CFE7280705D5310703D52046FFF797 +:1010A000DAFDB5E7AA07B3D5B307B1D5638D9BB217 +:1010B0006BB1636A226813F8011B91626362638DEE +:1010C000013B9BB26385238D013B2385A0E737F06D +:1010D0008073AFD09CE702209DE737B503682022DC +:1010E00004460D46DA6190F84130212B37D10121B9 +:1010F000FFF7BAFB112323632368E9065A6822F03D +:10110000FF7222F48B3222F4FF7222F001025A6045 +:101110004FF000026263A2F58032E26205D5102230 +:10112000DA61626C42F00402626494F84120602A41 +:1011300005D16A0703D55B6ADBB20193019B2046A8 +:10114000FFF73CFB636C94F84120602A00D07BB130 +:10115000616C204603B0BDE83040FFF70BBE90F84D +:101160004130222BC8D10221FFF77EFB1223C2E7B8 +:1011700094F84120212A12D1202284F8403084F8AA +:101180004120236394F8422084F84230402A03D15E +:10119000FFF7D8FD03B030BD06F048FDFAE794F83C +:1011A0004120222AF6D1202284F8403084F84120C0 +:1011B000236394F8422084F84230402A02D1FFF79A +:1011C000C2FDE7E706F051FDE4E773B590F8403063 +:1011D00004460D461646012B00F086800123CA0600 +:1011E00080F8403017D5F30615D503681022DA6170 +:1011F000436C43F004034364FFF7E0FAAA0605D505 +:10120000B30603D529462046FFF767FF002084F880 +:10121000400002B070BD680712D5710710D5236871 +:1012200025F004055A6A636A1A70636A01336362BF +:10123000238D013B2385638D013B9BB26385DDE7F5 +:10124000AA0707D5B30705D5636A226813F8011BFF +:101250009162ECE7280632D5710630D5638D22689D +:101260009BB203B3208DF0B95168638DC1F30901BE +:101270009BB2FF2B08D9FF224FF08073009022858C +:101280002046FFF7A9FAB9E7628DE36A92B213F537 +:10129000803F2285D2B202D0E36A0090F0E74FF09F +:1012A00000730090ECE753689A0103D42046FFF7DF +:1012B0007AFCA3E740212046FFF75CFD9EE76B0622 +:1012C0009CD570069AD5638D9BB2002BF2D1236812 +:1012D0005A68910192D4E26A12F5803FE6D15A68C9 +:1012E00042F480425A6089E7022092E7F8B590F80C +:1012F000403004460E461546012BC76A00F0B78001 +:1013000001238A0680F8403003D5AB0601D5FFF7EC +:10131000A3FDF20640F1A380EB0640F1A080E90BAB +:10132000A80B41EA9535ED0740F19580E26B52B389 +:1013300011F0010326D013684E4A93421ED0183292 +:1013400093421BD01832934218D01832934215D0D2 +:101350001832934212D0183293420FD0183293426F +:101360000CD01832934209D002F55672934205D040 +:101370001832934202D018329342FFD05B68B3FA1E +:1013800083F35B091A46A36B4BB3C10727D51B68D0 +:1013900038498B421ED018318B421BD018318B42FA +:1013A00018D018318B4215D018318B4212D0183119 +:1013B0008B420FD018318B420CD018318B4209D0A0 +:1013C00001F556718B4205D018318B4202D018318D +:1013D0008B42FFD05B68B3FA83F35B090BB9012A38 +:1013E0001FD194F84130282B0AD1B7F1007F07D1E3 +:1013F00031462046FFF776FC002084F84000F8BD17 +:1014000094F841202368292A4FF01002DA61F3D1C1 +:1014100017F5803FF0D02046FFF7D0F9FFF7E5FB46 +:10142000EAE723681022DA6137F08072636C43F0D8 +:101430000403636494F84130DBB2DDD103F0F703B9 +:10144000212B01D1236301E0222BFBD0616C2046CC +:10145000FFF790FCD0E723681022DA61CCE732076F +:10146000CAD52B07C8D52046FFF7F5FBC4E70220F5 +:10147000C5E700BF1000024013B590F840300446A5 +:10148000012B7AD0012380F84030CB0612D5D30649 +:1014900010D5036810222021DA61436C43F0040365 +:1014A0004364FFF7ADF9FFF789F9002084F84000A5 +:1014B00002B010BD0B0643D5500641D523681A680B +:1014C00022F040021A60628D92B26AB35968638D4D +:1014D000C1F309019BB2FF2B1BD9FF2323854FF0DA +:1014E000807300222046009294F82820FFF774F9B8 +:1014F000638D228D9B1A9BB2638594F84130222B19 +:1015000023681A680CBF42F4004242F480421A6019 +:10151000CBE7638D2385E36A13F5803F01D0E36A4F +:10152000DFE74FF00073DCE75B689A0103D42046E5 +:10153000FFF739FBB9E740212046FFF71BFCB4E772 +:101540004B0612D5500610D5638D9BB2002BF2D1FD +:1015500023685A689201A8D4E26A12F5803FE6D166 +:101560005A6842F480425A609FE788069DD59306E8 +:101570009BD52046FFF7B1FD97E7022098E7036867 +:1015800099691A6810B4CC0508D5140606D5446CC0 +:1015900044F0010444644FF48074DC614C0508D5C8 +:1015A000140606D5446C44F0080444644FF4806487 +:1015B000DC61890508D5120606D5426C42F00202AC +:1015C00042644FF40072DA61416C11F00B0F03D0EA +:1015D0005DF8044BFFF7CEBB5DF8044B7047806BA2 +:1015E000836B0BB100221A65C36B0BB100221A6525 +:1015F000FFF7AABB10B590F84130202BDCB21DD10B +:1016000090F84030012B19D0242380F84130036832 +:101610001A6822F001021A601A6822F480521A60D5 +:101620001A68114319601A6842F001021A60002317 +:1016300080F8414080F84030184610BD0220FCE799 +:10164000094A82B0D2F8F41041F00201C2F8F41055 +:10165000D2F8F42002F002020192044A019B53687E +:101660001843506002B0704700440258000400580C +:101670000A4B44F620621B68B3FBF2F24FF47A7314 +:1016800053430268002010B5013B146808BF0320D3 +:1016900031EA040401D0002BF6D110BD1803002458 +:1016A00070470000F8B50446002858D090F836304E +:1016B00003F0FF021BB980F83520FFF7F1FF6568E2 +:1016C00002232268012D84F83630A66AD06802D041 +:1016D000B6F5000F01D120F01E004FF6FF736169CF +:1016E000204F994245EA06031CBF20F4604020F0D9 +:1016F000C0000740A0680343206A0343606A0343B5 +:101700003B4305BBE069256928430343B6F5000F59 +:101710001BD04FF6FF70814204D0A0690143E069FD +:1017200001430B43D360104B9A4203D003F1C053E3 +:101730009A420FD1D4E90B310B43536201230020AD +:1017400084F83630F8BD012DE0D1D4E903052843F3 +:101750000343DEE7054B9A42F0D1E36AEDE701204F +:10176000F0E700BFFEF119FF0024004000280058F8 +:10177000022310B580F836300446D0E90032012A41 +:1017800007D0826AB2F5000F03D1DA6822F46062F2 +:10179000DA601A69204642F001021A6110225A608A +:1017A00099611146FFF764FF032808D022680020E2 +:1017B000136943F004031361012384F8363010BD2C +:1017C000F0B504468BB060B390F8BD33056803F004 +:1017D000FF021BB980F8BC23F0F736FB03236E46EB +:1017E000271D84F8BD33EB6B254613F4807355F841 +:1017F000100B08BF236104F0CBFF0FCD0FC60FCD38 +:101800000FC695E80300254686E8030097E80E001A +:1018100055F8100B04F0FCFE064620B1022384F8B4 +:10182000BD33012552E00146206804F0B7FF304681 +:10183000D4F804C01C264FF0010E0146C2B201309C +:1018400094451BD800231C261946D8B20133844581 +:1018500022D86E460FCD0FC60FCD0FC695E80300F8 +:1018600086E8030097E80E00206804F0D9FF012302 +:101870000546F0B1022284F8BD23D2E706FB0243FD +:1018800083F83DE083F83C20A3F8422083F83F1022 +:101890001965C3E91111D1E706FB004282F8FD1179 +:1018A00082F8FC0182F8FF11C2F81012C2E981111E +:1018B000CBE784F8380084F8BD33636A012B02D18A +:1018C000204600F03DFC206805F0B9FA28460BB030 +:1018D000F0BD10B50446006894F8BC33012B15D058 +:1018E000012384F8BC33A36A012B06D1A369012B21 +:1018F00003D0836B43F48033836304F043FF206899 +:1019000005F08FFA002084F8BC0310BD0220FCE72C +:1019100038B590F8BC330446012B1BD00123056871 +:1019200080F8BC33284604F033FF206805F087FABE +:101930001021206804F04AFFA36A012B06D1A36995 +:10194000012B03D0AB6B23F48033AB63002084F80E +:10195000BC0338BD0220FCE7704700002DE9F04FC2 +:10196000066887B00446304605F0A6FA02900028C3 +:1019700040F03C81206805F070FA002800F03681C4 +:10198000206805F06AFA820704D52268536903F0DB +:1019900002035361206805F060FAC3062AD5226865 +:1019A000936923F010039361376AC7F3434307F049 +:1019B0000F05022B40F01D8147F6F0731F4214D033 +:1019C0001C23C7F30A18304603FB05454246D5F8E9 +:1019D000081205F09FF9D5F80822D5F814324244D0 +:1019E0004344C5F80822C5F814322268936943F0CD +:1019F00010039361206805F030FA070300F10D81B0 +:101A0000206805F02AFA45030CD5254606F510692D +:101A10004FF00008206805F02CFA0390039B002B80 +:101A200040F0A481206805F018FA002815DAD6F8ED +:101A3000043823F00103C6F8043894F8F433012B7A +:101A400040F025820021204684F8F41300F08BFB3F +:101A50002268536903F000435361206805F0FDF9E3 +:101A600000050BD5D6F80838D90702D52046F0F77F +:101A700015FB2268536903F400635361206805F085 +:101A8000ECF9020114D523685A6902F000625A6128 +:101A900094F8F423002A40F0FE810121204684F8C6 +:101AA000F4135B6DC3F38303C4F8F83300F05BFBFE +:101AB000206805F0D2F9C30436D5D6F804381021D1 +:101AC000206806F5006523F001036B6004F07EFEDC +:101AD00006F510634FF67F3162680298824200F289 +:101AE000DE81EB6943F00113EB61236B002B00F007 +:101AF000F681D5F8843043F00B03C5F884306B6C65 +:101B000043F00B036B64D6F8003804F57172217C46 +:101B100023F4FE632068C6F8003805F0E1F9226876 +:101B2000536903F480535361206805F096F98704E4 +:101B300016D5206805F0C4F9206804F027FF256851 +:101B4000E06001F04BFA227B0146284604F0AAFD32 +:101B50002046F0F790FA2268536903F4005353616A +:101B6000206805F07AF9060707D52046F0F77FFAD6 +:101B70002268536903F008035361206805F06DF98A +:101B8000C50208D500212046F0F790FA2268536973 +:101B900003F480135361206805F05FF9800208D5D3 +:101BA00000212046F0F77EFA2268536903F40013FF +:101BB0005361206805F051F9410007D52046F0F740 +:101BC00079FA2268536903F080435361206805F075 +:101BD00044F942070AD523685D686B0702D52046A1 +:101BE000F0F76CFA226853682B43536007B0BDE8E6 +:101BF000F08F062B7FF4F9AE082204F571713046A0 +:101C0000C7F30A1705F086F81C2303FB0545D5F832 +:101C100014321F44C5F81472E7E606F5306704F580 +:101C2000017A0025DFF8D0B2206805F01AF9039098 +:101C3000039B002B3FF4E4AE039BD80756D55FFA15 +:101C400085F92068494605F01CF910F0010F80461F +:101C50001AD020680122216900F5306CBA60012990 +:101C6000036C0CEB451CDCF8082066D1110706D587 +:101C70005B4509D9100407D54FF4004302E09106F3 +:101C80003CD52023CCF8083018F0080F1ED023686C +:101C90000822BA601A6C03F530635A4503EB45130A +:101CA000996804D9090402D54FF40041996020468F +:101CB0000492F0F7C5F9049A5A4507D92169012918 +:101CC00004D104F57172206805F00AF918F0100FBC +:101CD00001D01023BB6018F0200F01D02023BB607F +:101CE00018F4005F02D04FF40053BB60039B013532 +:101CF00020370AF11C0A5B08039399E712F0280FBA +:101D0000C2D15B4501D91204B6D4DCF81020DAF850 +:101D10000010C2F312028A1ACAF81020DAF804205E +:101D20001144CAF8041095B9D4F810227AB904F510 +:101D30007172012105F0D4F809E06E498B420BD194 +:101D4000130499D4900602D52022CCF808204946E5 +:101D50002046F0F77BF997E7002DF8D1D4F8102250 +:101D6000002AF4D104F571722946E3E7039BDA07F0 +:101D700040F184805FFA88FB2068594605F08AF8B4 +:101D8000C307074621D5012008F00F02D6F83438E2 +:101D900000FA02F2216923EA02038142C6F83438CC +:101DA000C9F808000DD1D5E911231344AB64B8F18B +:101DB000000F06D1236D23B904F57172206805F078 +:101DC0008FF859462046F0F74AF9380702D508231C +:101DD000C9F80830F90602D51023C9F808307A0688 +:101DE00002D54023C9F80830BB0702D50223C9F841 +:101DF00008303F0642D5D5E914329A423ED89B1AA4 +:101E00006A6CD4F800A0934228BF134603339B08A2 +:101E100004930AF5106303EB48130593059B04999B +:101E20009A6992B28A42D5E9147325D39F4200D9A8 +:101E30005FB908F00F020121DAF8343801FA02F232 +:101E400023EA0203CAF8343818E0FF1A6B6C5A46CA +:101E500050469F4228BF1F46FB1C9B080493237CCF +:101E60000093BBB2A96C04F055FEAB6C3B44AB6471 +:101E70006B6D1F446F65D1E79F42DAD9039B08F170 +:101E800001081C3509F120095B080393C6E52046CB +:101E9000FFF762FDDCE52046F0F700F908E69960FF +:101EA000203353F8202C22F4001243F8202C53F84E +:101EB000202C42F0006243F8202CC3F8E811D3F83C +:101EC000E02122F40012C3F8E021D3F8E02142F02F +:101ED0000062C3F8E021029A01320292FCE56B69CC +:101EE00043F4005343F02B036B612B6943F00B0366 +:101EF0002B6108E60A31544F0A30544F10B590F860 +:101F0000BC230446012A0BD0012280F8381080F847 +:101F1000BC23006804F075FF002084F8BC0310BDEA +:101F20000220FCE770B501F00F0611F0800F0546A6 +:101F30004FF01C00C6EBC6044FEA84041FD004F126 +:101F40003C0100FB06500124294480F83D408A6092 +:101F50004A780E70CB7002B1CE80022B04BF0023F2 +:101F60000B7195F8BC33012B12D00123286885F83A +:101F7000BC3304F016FD002085F8BC0370BD04F5E9 +:101F8000FE7100FB06500024294480F8FD41DEE785 +:101F90000220F3E738B501F00F051C2404FB05010E +:101FA00004FB050401F5FE71C4F810320023C4F8E7 +:101FB0000822C4F8143284F8FD3184F8FC51036916 +:101FC0000068012B08BFC4F80C22DAB21DB904F076 +:101FD00027FD002038BD04F0B1FDFAE738B501F067 +:101FE0000F051C2404FB050104FB05043C3123659B +:101FF0000023A2646365012384F83C5084F83D30DB +:1020000003690068012B08BFE264DAB21DB904F06D +:1020100007FD002038BD04F091FDFAE738B501F066 +:102020000F05436804469D422CD811F0800F4FF0F5 +:102030001C001ED000FB0541012300FB05423C3182 +:1020400082F83D3001230D708B7094F8BC239A42C6 +:102050001AD0206884F8BC3304F07FFE2DB904F553 +:102060007172217C206804F03BFF002084F8BC03DF +:1020700038BD00FB01431A4603F5FE71002382F8C8 +:10208000FD31DFE70120F3E70220F1E738B501F089 +:102090000F02436804469A422AD8C2EBC20311F0E9 +:1020A000800F4FF01C004FEA830318D003F13C016E +:1020B00000FB02400123214480F83D3000250A70D6 +:1020C0008D7094F8BC33012B14D00123206884F860 +:1020D000BC3304F06DFE284684F8BC5338BD03F5CC +:1020E000FE7100FB02400023214480F8FD31E5E74A +:1020F0000120F3E70220F1E70068120470B5446A9A +:1021000019B922438262002070BD836A4D1E04EB20 +:10211000134400235E1CDBB29D4205D83F312243AD +:1021200000EB81004260EEE7403300EB83035B6825 +:1021300004EB13443346EDE703680020596270470F +:1021400002680021012380F8F413C0F8FC3308462C +:10215000936943F000639361536D43F0805343F000 +:102160000303536570477047024A136843F4807352 +:102170001360704700480258054A0129136923F08B +:102180000403136101D130BF704720BF704700BF07 +:1021900000ED00E070B51C4D0446EB6803F007034A +:1021A000062B06D0E86800F03F00001B18BF012096 +:1021B00070BDEB6823F03F030343EB6005F0E4FBE5 +:1021C00006466B689A0408D5A4F11D03012B0CD9AF +:1021D0002D3C012C09D90020EAE705F0D5FB801B36 +:1021E000B0F57A7FEDD90120E2E705F0CDFB064D91 +:1021F0000446EB68DB03EED405F0C6FB001BB0F52C +:102200007A7FF6D9EFE700BF0048025838B51E4C78 +:102210000D46236823F0010318432060C2B9FDF77F +:1022200019FF032813D1236923F001032361174BFE +:102230001A6942F004021A61BFF34F8FBFF36F8F28 +:10224000012D10D130BF1A6922F004021A6138BD85 +:10225000012A0AD1FDF7FEFE0128F8D1636923F0B7 +:1022600002036361E3E720BFEDE7FDF7F3FE032818 +:1022700004D1236923F004032361E8E7636923F0B1 +:1022800004036361E3E700BF0048025800ED00E08B +:10229000024AD36843F08073D36070470048025805 +:1022A0002DE9F0474E6A36B1B2F1406F03D08B6A28 +:1022B0000468013B2361D1F818A0D1E9077CBAF189 +:1022C000000F4ED04B6946EA0A0A0568D1F8008033 +:1022D0004FEA834E486B4AEA020AD1E90B49BCF146 +:1022E000000F26D08B684CEA0A0C0E69EB61A7B18F +:1022F00048EA0703234343EA09030343C868334317 +:10230000034343EA0E0343EA0C03B2F1406F6B61EF +:1023100001D04B68AB61BDE8F08748EA040343EAAB +:1023200009030343334343EA0E0343EA0C036B619F +:10233000F1E767B148EA0703234343EA090303438C +:10234000C868034343EA0E0343EA0A03DDE748EAA9 +:10235000040343EA0903034343EA0E0343EA0A037F +:10236000E5E7BCF1000F2CD004688B680869E361D5 +:1023700046EA0C034E6943EA0205D1F834C0B604BC +:10238000D1E90B83A7B13843B2F1406F40EA0800AE +:1023900043EA0003C86843EA0C0343EA000343EA44 +:1023A000060343EA05036361B5D04B68A361B2E756 +:1023B00040EA0800034343EA0C0333432B436361C1 +:1023C000A9E7D7B146EA0703CC6A0068B2F1406FCB +:1023D00043EA020343EA04030C6B43EA04034C6B35 +:1023E00043EA0403CC6843EA04034C6943EA8443A8 +:1023F000436190D04B6883618DE7002E8BD0CB6A10 +:10240000006833430E6B1A434B6932434E6B3243C1 +:1024100042EA834242617EE72DE9F041DDF818800F +:1024200004460E4615461F4622689368334214BF81 +:1024300001230023AB4201D1002012E0B8F1FF3F9D +:10244000F3D005F0A1FAC01B404502D8B8F1000F47 +:10245000EAD10423012084F84130636C43F0010386 +:102460006364BDE8F081704730B5044685B005F07F +:102470008BFA0346002C40D094F841203AB90390DF +:102480002046FFF7F0FF41F28832039BA2642068E8 +:10249000A1680268013922F4706242EA0122202117 +:1024A00002602046A26C00920022FFF7B5FF10BB2D +:1024B0002268E569E36811682B43256A21F07F41B2 +:1024C0002B43656821F0D00143EA05630B43136099 +:1024D0005568D4E905310B43216943EA01430849B2 +:1024E00029400B435360136843F001031360012339 +:1024F000606484F8413005B030BD0120FBE700BFC7 +:10250000FEF8E0FF704710B5044658B10268136842 +:1025100023F001031360FFF7F5FF0020606484F8E7 +:10252000410010BD0120FCE72DE9F043044685B0D1 +:102530001746894605F028FA94F840200346012AF8 +:1025400033D00122022684F8402094F84120012A49 +:102550005FFA82F827D1002203902021204662648E +:10256000009784F84160FFF757FF0546A0B902467F +:1025700049462046FFF794FED9F82420039B4AB928 +:102580004246314620460097FFF746FF054618B9F8 +:102590002368DE6084F84180002384F840302846B8 +:1025A00005B0BDE8F0833546F6E70225F7E7F0B55C +:1025B000044685B016460F4605F0E6F994F840202B +:1025C00003462568012A49D0012284F8402094F866 +:1025D0004120012AD0B23FD100226264002F36D0C0 +:1025E000122284F841202A690132E2622A69676274 +:1025F0000132A2626A6922F040626A61E26A8AB9C3 +:102600000122022120460096FFF706FF10B9236839 +:102610000222DA60012384F84130002384F840303C +:1026200005B0F0BD01220421204600960393FFF778 +:10263000F3FE0028EED1626A039B127885F8202011 +:10264000626A01326262E26A013AE262D6E7636C70 +:1026500043F008036364E0E70220DEE70220DFE7DF +:10266000F0B5044685B016460F4605F08DF925688D +:102670000346D5F818C094F84020012A4DD0012215 +:1026800084F8402094F84120012AD0B243D100229E +:102690006264002F3AD0222284F841202A69013254 +:1026A000A2632A69276301326263696921F040618C +:1026B00041F080616961C5F818C0A26B8AB9012236 +:1026C000022120460096FFF7A7FE10B923680222D8 +:1026D000DA60012384F84130002384F8403005B0EB +:1026E000F0BD01220621204600960393FFF794FED9 +:1026F0000028EED195F82010226B039B1170226BFD +:1027000001322263A26B013AA263D6E7636C43F005 +:1027100008036364E0E70220DEE70220DFE7000051 +:10272000F8B50446002874D00368D8075ED423683F +:10273000990700F1B0802368DA0627D5AA4B1A69F9 +:10274000996A02F03802082A07D0182A40F00E8150 +:1027500001F00302012A40F009811B68DB0502D564 +:10276000E369802B55D1FDF79DFB41F20303216AFC +:1027700098429D4B00F2F3805A68202922F0F842DB +:102780000CBF42F0804242EA81625A602368190716 +:1027900000F12E8123689A0600F14F8123685D07BE +:1027A0001ED5924D2B6843F480732B6005F0ECF836 +:1027B00006462B68DA0540F16581A3688A4D012B36 +:1027C00040F067812B6F43F001032B6741F288379C +:1027D00005F0DAF8844E0546336F9B0740F17F81A0 +:1027E000616A002940F0828100202AE07E4B1A694C +:1027F000996A02F03802102A05D0182A0BD101F08C +:102800000302022A07D11B689A0390D56368002B44 +:102810008DD1012015E06268B2F5803F12D11A68AF +:1028200042F480321A6005F0AFF86F4E0546336807 +:102830009B033FF57CAF05F0A7F8401B6428F6D951 +:102840000320F8BD684D2B689AB923F480332B60C0 +:102850002B6823F480232B6005F096F806462B683E +:102860009F037FF564AF05F08FF8801B6428F6D9CD +:10287000E6E7B2F5A02F07D143F480232B602B6845 +:1028800043F480332B60CEE723F480332B602B6836 +:1028900023F48023F6E7544B1A69996A12F0380240 +:1028A00003D0182A1FD18E071DD11B685D0702D5E2 +:1028B000E368002BADD0FDF7F5FA41F2030321697F +:1028C0009842494B5A6809D822F47C3240290CBFFF +:1028D00042F4003242EA01325A602CE722F0FE4212 +:1028E00042EA0162F8E7E1681A6839B322F0190296 +:1028F0003D4D0A431A6005F047F806462B68580715 +:1029000011D5FDF7CFFA41F20303226998426B68B3 +:102910000FD823F47C33402A0CBF43F4003343EA3E +:1029200002336B6007E705F02FF8801B0228E5D91A +:1029300086E723F0FE4343EA0263F2E722F0010256 +:10294000294E1A6005F020F80546336859077FF5CF +:10295000F2AE05F019F8401B0228F6D970E7DA68E4 +:1029600022F07C5242EA0162DA600FE7E2694AB380 +:102970001A681D4D42F080021A6005F005F80646FF +:102980002B68DF0511D5FDF78DFA41F20303226AAA +:10299000984210D86B68202A23F0F8430CBF43F00C +:1029A000804343EA82636B60F0E604F0EDFF801B36 +:1029B0000228E5D944E7EB6823F07C5343EA02633D +:1029C000EB60E3E61A68084E22F080021A6004F019 +:1029D000DBFF05463368D8057FF5D8AE04F0D4FF99 +:1029E000401B0228F6D92BE7004402580048025841 +:1029F0006369964D83B16B6F43F001036B6704F01D +:102A0000C3FF06466B6F9B073FF5C4AE04F0BCFFE7 +:102A1000801B0228F6D913E76B6F23F001036B6765 +:102A200004F0B2FF06466B6F9F077FF5B3AE04F06C +:102A3000ABFF801B0228F6D902E7A369834D83B15F +:102A40002B6843F480532B6004F09EFF06462B68EE +:102A500098043FF5A3AE04F097FF801B0228F6D937 +:102A6000EEE62B6823F480532B6004F08DFF0646BE +:102A70002B6899047FF592AE04F086FF801B022834 +:102A8000F6D9DDE604F080FF801B64287FF691AE66 +:102A9000D6E6B3B92B6F41F2883723F001032B67D9 +:102AA0002B6F23F004032B6704F06EFF06462B6F99 +:102AB00098077FF595AE04F067FF801BB842F6D902 +:102AC000BEE6052B2B6F03D143F004032B6779E699 +:102AD00023F001032B672B6F23F0040375E604F04A +:102AE00053FF401BB8427FF677AEA9E6574D2B69DE +:102AF00003F03803182B7AD02B68022923F0807357 +:102B00002B6067D104F040FF06462B6899015BD427 +:102B1000AB6AA26A23F47C7323F003031343E26AD3 +:102B200043EA0213AB62636BA26B013B013A5B02A7 +:102B300012049BB202F4FE021343226B013AC2F369 +:102B400008021343E26B013A120602F0FE421343FD +:102B50002B63EB6A23F00103EB626B6BA26C23F433 +:102B60007F4323F0F80343EAC2036B63EB6A226CF2 +:102B700023F00C031343EB62EB6A626C23F0020355 +:102B80001343EB62EB6A43F48033EB62EB6A43F48A +:102B90000033EB62EB6A43F48023EB62EB6A43F0B1 +:102BA0000103EB622B6843F080732B6004F0ECFEB2 +:102BB000264D04462B689A013FF516AE04F0E4FE5C +:102BC000001B0228F6D93BE604F0DEFE801B02283B +:102BD0009BD935E604F0D8FE04462B689B017FF5AF +:102BE00003AE04F0D1FE001B0228F6D928E6012925 +:102BF000AA6A2B6B3FF40DAE02F00301A06A81427A +:102C00007FF407AEC2F30512E16A8A427FF401AE97 +:102C1000226BC3F30801013A91427FF4FAAD626B73 +:102C2000C3F34621013A91427FF4F3ADA26BC3F3A3 +:102C30000641013A91427FF4ECADE26BC3F30663C7 +:102C4000013A93423FF4D0ADE3E500BF004402589F +:102C5000484B1A6902F03802102A30B500F086801D +:102C6000182A0CD0002A40F083801A68424812F0DB +:102C7000200F03D01B68C3F3C103D84030BD996A4D +:102C80009D6ADA6A15F47C7FC5F305105C6BF5D09C +:102C9000C4F3CC0402F0010207EE900A01F0030134 +:102CA0006243B7EE006AF8EEE76A012907EE902A60 +:102CB000FAEEE97A4CD002293CD0002948D11A68B2 +:102CC000920627D519682C4AC1F3C1011B6BCA4073 +:102CD000C3F3080307EE102AF8EEC75A85EEA67A6A +:102CE00006EE903AF8EEE66A76EEA77A77EE867A06 +:102CF000204B67EE877A1B6BC3F34623013307EE45 +:102D0000103AF8EEC76A87EEA67AFCEEC77A17EE9D +:102D1000900AB3E71B6BC3F3080307EE103AB8EE53 +:102D2000C77A77EE277A77EE867A9FED146A86EE79 +:102D3000267ADDE71B6BC3F3080307EE103AB8EE03 +:102D4000C77A77EE277A77EE867A9FED0D6AEEE7FF +:102D50001B6BC3F3080307EE103AB8EEC77A77EEA1 +:102D6000277A77EE867A9FED076AE0E7064885E7DF +:102D7000064883E7004402580090D0030024744CB6 +:102D800020BCBE4B0024744A40787D0100093D0000 +:102D90002DE9F0410D46044610B90120BDE8F0814F +:102DA000884A136803F00F038B42C0F093802368B6 +:102DB0005F0700F19B801E070BD583496669C869D0 +:102DC00000F07000864204D9CA6922F070023243D2 +:102DD000CA61D8060BD57C49A669C86900F4E060D1 +:102DE000864204D9CA6922F4E0623243CA61990674 +:102DF0000BD57549E669086A00F07000864204D96F +:102E00000A6A22F0700232430A629A070BD56E49B1 +:102E1000E668886900F00F00864204D98A6922F0CA +:102E20000F0232438A61DF076ED423689E0700F1E8 +:102E3000A18064490A6802F00F02AA4200F2A88049 +:102E4000580700F1B18019070BD55F496569C8695A +:102E500000F07000854204D2CA6922F070022A4351 +:102E6000CA61DA060BD55849A569C86900F4E06063 +:102E7000854204D2CA6922F4E0622A43CA619B06F1 +:102E80000BD5514AE069116A01F07001884204D201 +:102E9000136A23F0700303431362FFF7D9FE4A4914 +:102EA0004A4A8B69C3F30323D35C03F01F03D84062 +:102EB0008B6903F00F03D35C454A03F01F0320FA2C +:102EC00003F31360434B1860434BBDE8F0411868AF +:102ED00004F054BD136823F00F030B431360136811 +:102EE00003F00F038B427FF458AF60E73649266941 +:102EF000886900F0700086427FF65DAF8A6922F033 +:102F0000700232438A6156E72F4BA1689A6922F416 +:102F100070620A439A6162681B68022A1DD113F429 +:102F2000003F3FF43AAF284E41F28838336923F02E +:102F300007031343336104F027FD074633696268D2 +:102F400003F03803B3EBC20F3FF46FAF04F01CFD86 +:102F5000C01B4045F2D9032020E7032A02D113F019 +:102F6000007FDEE7012A02D113F4807FD9E713F056 +:102F7000040FD6E71449E668886900F00F0086421E +:102F8000BFF457AF8A6922F00F0232438A6150E7DB +:102F90000A6822F00F022A430A600A6802F00F0250 +:102FA000AA427FF4FAAE4BE707492569886900F029 +:102FB00070008542BFF447AF8A6922F070022A434D +:102FC0008A6140E7002000520044025836D30108CD +:102FD0001C030024180300241403002410B50C4C17 +:102FE000FFF736FE0B49A369C3F30323CA5CA36949 +:102FF00002F01F0203F00F0320FA02F2CB5C03F091 +:103000001F0322FA03F0044B1860044B1A6010BD32 +:103010000044025836D301081C030024180300247E +:1030200008B5FFF7DBFF054B054ADB69C3F3021365 +:10303000D35C03F01F03D84008BD00BF0044025812 +:1030400036D3010808B5FFF7C9FF054B054ADB6910 +:10305000C3F30223D35C03F01F03D84008BD00BFB5 +:103060000044025836D3010838B53F2304460360B4 +:103070003A4B1A68510360D54FF4A02262601B6876 +:10308000364D03F08003E361FCF70CFF41F20303CC +:10309000984259D86B68C3F3846323622B6803F0AA +:1030A0000103E360FCF7FEFE41F2030398426B6804 +:1030B00094BFC3F30533C3F306632361274B1A6F31 +:1030C000520745D50522A2605A6F02F001026261E3 +:1030D0001A68C2F30032A2611B6813F0807F14BF2C +:1030E0000223012363621D4B9A6A02F00302A2626B +:1030F0009A6AC2F30512E2621A6BC2F30802013245 +:1031000022631A6BC2F306620132E2631A6BC2F3E6 +:103110004622013262631A6BC2F306420132A26395 +:10312000DA6A02F00C022264DA6AC2F340026264D4 +:103130005B6BC3F3CC03A36438BD1A6812F480320E +:1031400018BF4FF4803299E7EB68C3F30563A4E737 +:103150001A6F12F0010218BF0122B4E700440258AE +:103160003F230360114B1A6902F0070242609A691B +:1031700002F4706282609A6902F00F02C2609A697A +:1031800002F070020261DA6902F070024261DA69EB +:1031900002F4E06282611B6A03F07003C361044BB6 +:1031A0001B6803F00F030B60704700BF0044025818 +:1031B00000200052F8B53A4C06460D46A36A03F0CB +:1031C0000303032B69D0236823F08063236004F09A +:1031D000DBFB074623681A014BD4A36A326823F449 +:1031E0007C3343EA0233A362B368F268013B013ADD +:1031F0005B0212049BB202F4FE0213437268013AAE +:10320000C2F3080213433269013A120602F0FE4289 +:103210001343A363E36A726923F0C0031343E362B9 +:10322000E36AB26923F020031343E362E36A23F005 +:103230001003E362E36BF26923F47F4323F0F803A6 +:1032400043EAC203E363E36A43F01003E362E36A21 +:10325000B5B943F40023E362114C236843F0806363 +:10326000236004F091FB054623681B010FD5002065 +:1032700005E004F089FBC01B0228ABD90320F8BD90 +:10328000012D0CBF43F4801343F40013E3E704F073 +:103290007BFB401B0228E7D9F0E70120EFE700BFE6 +:1032A00000440258F8B53A4C06460D46A36A03F0AE +:1032B0000303032B69D0236823F08053236004F0B9 +:1032C00063FB074623689A004BD4A36A326823F055 +:1032D0007C7343EA0253A362B368F268013B013A8C +:1032E0005B0212049BB202F4FE0213437268013ABD +:1032F000C2F3080213433269013A120602F0FE4299 +:1033000013432364E36A726923F440631343E36263 +:10331000E36AB26923F400731343E362E36A23F4BC +:103320008073E362636CF26923F47F4323F0F80354 +:1033300043EAC2036364E36A43F48073E362E36ACB +:10334000B5B943F48003E362114C236843F0805322 +:10335000236004F019FB054623689B000FD500206D +:1033600005E004F011FBC01B0228ABD90320F8BD17 +:10337000012D0CBF43F4000343F08073E3E704F036 +:1033800003FB401B0228E7D9F0E70120EFE700BF6D +:10339000004402582DE9F8430668054616F0006619 +:1033A00009D0836EB3F5001F2ED013D8F3B1B3F557 +:1033B000801F21D001262B68DB0540F10281AB6D17 +:1033C000042B00F2FD80DFE813F024002B00F50051 +:1033D00029002900B3F5401FECD1B84A0026A96E98 +:1033E000136D23F440130B431365E4E7B34AD36A28 +:1033F00043F40033D362F0E702210430FFF7DAFE32 +:1034000006460028D7D1E8E702212430FFF74AFF1B +:10341000F6E7AA4AD36A43F40033D362344604E0A1 +:103420000021281DFFF7C6FE0446002C40F0CB808B +:10343000A24AA96D136D23F007030B4313652B6894 +:103440009F050DD5EB6D802B00F0DA8000F2BD807A +:10345000002B00F0C980402B00F0CC8001263446C0 +:103460002B68580510D5D5F8A830B3F5800F00F0BB +:10347000EC8000F2CD80002B00F0DB80B3F5001F64 +:1034800000F0DD80012634462B68190510D5D5F8EB +:10349000AC30B3F1007F00F0FD8000F2DE80002B45 +:1034A00000F0EC80B3F1807F00F0EE80012634461E +:1034B0002B689A010DD5AB6C202B00F0078100F230 +:1034C000F180002B00F0F180102B00F0F980012634 +:1034D00034462B68DB040FD52B6EB3F5005F00F08C +:1034E000198100F2FB80002B00F00881B3F5805FAA +:1034F00000F00A81012634462B689F040FD56B6EBD +:10350000B3F5003F00F0268100F20C81002B00F0A3 +:103510001281B3F5803F00F01781012634462B68F5 +:10352000580410D5D5F8B030B3F1005F00F0338106 +:1035300000F21881002B00F01E81B3F1805F00F0D3 +:103540002481012634462B68590114D5EB6C43B114 +:10355000B3F5807F40F027810121281DFFF72AFE67 +:103560000446002C40F02281544AE96CD36C23F4C9 +:1035700080730B43D3642B681A040DD52B6FB3F102 +:10358000805F00F01581B3F1005F00F01F81002B18 +:1035900000F01381012634462B68DB0140F12C81B9 +:1035A0006B6C032B00F26C81DFE813F01D01180136 +:1035B00064011D01002105F12400FFF773FE33E7CC +:1035C000012634463BE7264639E7C02B03D0B3F546 +:1035D000807F7FF443AFCCB9384AE96D136D23F493 +:1035E000E0730B4313653BE7344AD36A43F400337B +:1035F000D362F0E70021281DFFF7DCFD0446EAE76F +:10360000002105F12400FFF74DFEF7E7264627E7E6 +:10361000B3F5C00F03D0B3F5000F7FF433AFD4B9C7 +:10362000264AD5F8A810936D23F460030B439365E5 +:103630002AE7224AD36A43F40033D362EFE700213A +:10364000281DFFF7B7FD0446E9E7002105F1240036 +:10365000FFF728FEF7E7264616E7B3F1407F03D0D1 +:10366000B3F1806F7FF422AFD4B9144AD5F8AC100F +:10367000936D23F0E0630B43936519E70F4AD36A18 +:1036800043F40033D362EFE70021281DFFF792FDDA +:103690000446E9E7002105F12400FFF703FEF7E700 +:1036A000264605E7302B7FF412AFACB9034AA96C6C +:1036B000D36C23F030030B43D3640AE70044025871 +:1036C0009B4AD36A43F40033D362EEE70221281DFC +:1036D000FFF770FD0446E8E72646FAE6B3F5405FDB +:1036E00003D0B3F5804F7FF405AFCCB9904A296E73 +:1036F000136D23F4E0430B431365FDE68C4AD36A54 +:1037000043F40033D362F0E70021281DFFF752FD98 +:103710000446EAE7002105F12400FFF7C3FDF7E7BF +:103720002646E9E623F48032B2F5802F03D0B3F5C4 +:10373000403F7FF4F2AE9CB97D4A696E136D23F46D +:10374000E0230B431365EAE60121281DFFF732FD54 +:103750000446F0E7012105F12400FFF7A3FDF7E798 +:103760002646DCE623F08052B2F1804F03D0B3F15D +:10377000405F7FF4E6AEA4B96D4AD5F8B010936D02 +:1037800023F0E0430B439365DDE60121281DFFF79D +:1037900011FD0446EFE7012105F12400FFF782FD4A +:1037A000F7E72646CFE601263446E4E62646E2E67B +:1037B0005F4AD36A43F40033D3626CB95C4A296F21 +:1037C000136D23F040530B431365E5E60121281DDB +:1037D000FFF7F0FC0446F0E72646DDE6544AD36ADC +:1037E00043F40033D362002C4DD1514A696CD36C41 +:1037F00023F003030B43D3642B685F024DD54D4F79 +:103800003B6843F480733B6004F0BEF880463B683D +:10381000D8053AD5002C6CD1454BD5F8B4001A6FB9 +:10382000424012F4407F0BD01A6F196F22F440729D +:1038300041F480311967196F21F4803119671A67D3 +:10384000B0F5807F40D0D5F8B430394903F44072E8 +:10385000B2F5407F49D10869374A20F47C5002EA2A +:10386000131202430A61C3F30B03314A116F0B4376 +:10387000136712E00221281DFFF79CFC0446B2E703 +:1038800001263446B8E72646B6E704F07DF8A0EBFB +:1038900008006428BBD9032634462B68DA0708D50C +:1038A000EB6F102B3CD026D85BB3082B32D001260F +:1038B00034462B689B074ED5AB6F052B61D8DFE8EC +:1038C00003F0423D5A42424204F05EF8DFF8608065 +:1038D000074641F28839D8F870309907B3D404F01C +:1038E00053F8C01B4845F6D9D5E70A6922F47C5243 +:1038F000B8E72646D1E723F00802202A01D0182B8A +:10390000D5D19CB90A4AE96F536D23F038030B43B4 +:103910005365CEE70121281DFFF74CFC0446F0E774 +:10392000012105F12400FFF7BDFCF7E72646C0E7BB +:103930000044025800480258CFFFFF000121281D13 +:10394000FFF738FC0446FCB9B74AA96F536D23F062 +:1039500007030B4353652B685F0727D5D5F89430D1 +:10396000052B00F23A81DFE813F016001100320156 +:10397000160016001600012105F12400FFF792FC45 +:10398000E0E701263446E6E72646E4E70121281D64 +:10399000FFF710FC0446002C40F02281A24AD5F823 +:1039A0009410936D23F007030B4393652B689806DF +:1039B00010D5D5F89030B3F1005F00F02C8100F203 +:1039C0001181002B00F01781B3F1805F00F01D81A1 +:1039D000012634462B68590610D5D5F89C30B3F52E +:1039E000006F00F03C8100F22181002B00F0278164 +:1039F000B3F5806F00F02D81012634462B681A063E +:103A000010D5D5F8A030B3F5804F00F0498100F211 +:103A10002E81002B00F03481B3F5005F00F03A8175 +:103A2000012634462B681B0714D5D5F88430B3F52E +:103A3000805F07D1022105F12400FFF733FC002845 +:103A400018BF0126784AD5F88410536D23F44053EB +:103A50000B4353652B68DF0614D5D5F89830B3F5C2 +:103A6000807F07D1022105F12400FFF71BFC00280D +:103A700018BF01266C4AD5F89810936D23F4407353 +:103A80000B4393652B6818031AD5D5F8A410B1F52C +:103A9000803F00F00D81B1F5003F06D0002940F0D5 +:103AA0000D81281DFFF786FB0446002C40F009819C +:103AB0005D4AD5F8A410936D23F440330B4393650E +:103AC0002B6859031CD5D5F88830B3F5001F00F0DA +:103AD000FA80B3F5401F08D0B3F5801F40F0FA809C +:103AE000514AD36A43F40033D362002C40F0F5808E +:103AF0004D4AD5F88810536D23F440130B4353659A +:103B00002B68DA0309D52B6D002B00F0E880B3F5A4 +:103B1000803F00F0F280012634462B689B0007D5D9 +:103B2000022105F12400FFF7BDFB002818BF012684 +:103B30002B689F030BD5D5F88010B1F5807F00F07E +:103B4000F28000F2E280002900F0E5800126DC022C +:103B500006D53549686F0A6D22F0004202430A65B6 +:103B6000D80007D53049D5F8B8000A6922F4804258 +:103B700002430A61990206D52B49E86E0A6D22F0CC +:103B8000807202430A655A0009D5274A116921F457 +:103B9000004111611169D5F8BC0001431161002B8E +:103BA00006DA2149686DCA6C22F040520243CA64A9 +:103BB0001B0207D51C4AD5F88C10536D23F4400323 +:103BC0000B435365301E18BF0120BDE8F883012167 +:103BD00005F12400FFF766FBDCE601263446E5E646 +:103BE0002646E3E623F08052B2F1804F03D0B3F1D2 +:103BF000405F7FF4EDAEA4B90B4AD5F89010536D39 +:103C000023F0E0430B435365E4E60021281DFFF752 +:103C1000D1FA0446EFE7022105F12400FFF742FB49 +:103C2000F7E72646D6E600BF0044025823F4806238 +:103C3000B2F5805F03D0B3F5406F7FF4DDAEA4B979 +:103C40003D4AD5F89C10936D23F4E0530B439365E4 +:103C5000D4E60021281DFFF7ADFA0446EFE7022164 +:103C600005F12400FFF71EFBF7E72646C6E623F41E +:103C70000052B2F5004F03D0B3F5C04F7FF4D0AE81 +:103C8000A4B92D4AD5F8A010936D23F460430B43DB +:103C90009365C7E60021281DFFF78CFA0446EFE77D +:103CA000022105F12400FFF7FDFAF7E72646B9E601 +:103CB000022105F12400FFF7F5FAF5E60126344666 +:103CC000FEE62646FCE6012105F12400FFF7EAFAAC +:103CD00004460AE70126344612E7264610E7164A4C +:103CE000D36A43F40033D3626CB9134A296DD36CA1 +:103CF00023F480330B43D3640FE70221281DFFF721 +:103D000059FA0446F0E7264607E721F48072B2F537 +:103D1000007F7FF41BAF64B90748426D22F4407204 +:103D20000A43426513E70448C26A42F40032C262A1 +:103D3000F1E726460BE700BF0044025808B5FFF73D +:103D40004DF9054B054A1B6AC3F30213D35C03F01C +:103D50001F03D84008BD00BF0044025836D30108F5 +:103D60004E4A70B5946A966AD36A16F47C3FC6F3DD +:103D70000531D56B00F08D8007EE901AC3F3001368 +:103D8000C5F3CC0104F00304F8EEE76A4B43012CC1 +:103D9000B7EE006A07EE903AFAEEE97A6BD0022CA1 +:103DA0005BD0002C67D113689B0646D51168936BD6 +:103DB000C1F3C1013A4AC3F30803CA4007EE102A0F +:103DC000F8EEC75A85EEA67A06EE903AF8EEE66A65 +:103DD00076EEA77A77EE867A304A67EE877A936B2B +:103DE000C3F3462307EE103AB8EEC77A37EE067AE9 +:103DF000C7EE876AFCEEE66AC0ED006A936BC3F318 +:103E0000064307EE103AB8EEC77A37EE067AC7EEE9 +:103E1000876AFCEEE66AC0ED016A936BC3F3066342 +:103E200007EE103AB8EEC77A37EE066A87EE867A62 +:103E3000BCEEC77A80ED027A70BD936BDFED195A44 +:103E4000C3F3080307EE103AB8EEC77A77EE277A85 +:103E500077EE867A85EEA67ABEE7936BDFED125A8F +:103E6000C3F3080307EE103AB8EEC77A77EE277A65 +:103E700077EE867AEEE7936BDFED0C5AC3F3080317 +:103E800007EE103AB8EEC77A77EE277A77EE867AA1 +:103E9000E0E7C0E900118160CEE700BF00440258AE +:103EA0000090D0030024744C20BCBE4B0024744A04 +:103EB0004E4A70B5946A966AD36A16F07C7FC6F350 +:103EC0000551556C00F08D8007EE901AC3F3002366 +:103ED000C5F3CC0104F00304F8EEE76A4B43012C70 +:103EE000B7EE006A07EE903AFAEEE97A6BD0022C50 +:103EF0005BD0002C67D113689B0646D51168136C04 +:103F0000C1F3C1013A4AC3F30803CA4007EE102ABD +:103F1000F8EEC75A85EEA67A06EE903AF8EEE66A13 +:103F200076EEA77A77EE867A304A67EE877A136C58 +:103F3000C3F3462307EE103AB8EEC77A37EE067A97 +:103F4000C7EE876AFCEEE66AC0ED006A136CC3F345 +:103F5000064307EE103AB8EEC77A37EE067AC7EE98 +:103F6000876AFCEEE66AC0ED016A136CC3F3066370 +:103F700007EE103AB8EEC77A37EE066A87EE867A11 +:103F8000BCEEC77A80ED027A70BD136CDFED195A72 +:103F9000C3F3080307EE103AB8EEC77A77EE277A34 +:103FA00077EE867A85EEA67ABEE7136CDFED125ABD +:103FB000C3F3080307EE103AB8EEC77A77EE277A14 +:103FC00077EE867AEEE7136CDFED0C5AC3F3080345 +:103FD00007EE103AB8EEC77A77EE277A77EE867A50 +:103FE000E0E7C0E900118160CEE700BF004402585D +:103FF0000090D0030024744C20BCBE4B0024744AB3 +:104000004E4A70B5946A966AD36A16F47C7FC6F3FA +:104010000511556B00F08D8007EE901A03F0010337 +:10402000C5F3CC0104F00304F8EEE76A4B43012C1E +:10403000B7EE006A07EE903AFAEEE97A4DD0022C1C +:104040005BD0002C67D113689B0664D51168136B95 +:10405000C1F3C1013A4AC3F30803CA4007EE102A6C +:10406000F8EEC75A85EEA67A06EE903AF8EEE66AC2 +:1040700076EEA77A77EE867A304A67EE877A136B08 +:10408000C3F3462307EE103AB8EEC77A37EE067A46 +:10409000C7EE876AFCEEE66AC0ED006A136BC3F3F5 +:1040A000064307EE103AB8EEC77A37EE067AC7EE47 +:1040B000876AFCEEE66AC0ED016A136BC3F3066320 +:1040C00007EE103AB8EEC77A37EE066A87EE867AC0 +:1040D000BCEEC77A80ED027A70BD136BDFED195A22 +:1040E000C3F3080307EE103AB8EEC77A77EE277AE3 +:1040F00077EE867A85EEA67ABEE7136BDFED125A6D +:10410000C3F3080307EE103AB8EEC77A77EE277AC2 +:1041100077EE867AEEE7136BDFED0C5AC3F30803F4 +:1041200007EE103AB8EEC77A77EE277A77EE867AFE +:10413000E0E7C0E900118160CEE700BF004402580B +:104140000090D0030024744A20BCBE4B0024744C61 +:10415000B0F5807F1FB531D19E4B1A6D02F007027A +:10416000042A4BD8DFE812F0CC00390005003301F7 +:104170000D00186810F0005037D001A8FFF798FE26 +:1041800032E0DA6C196802F040521B68490705D525 +:1041900022B9C3F3C1039048D84026E0D80502D520 +:1041A000B2F1805F53D08B4B186810F400301CD0F4 +:1041B000B2F1005F894818BF002016E0B0F5007F1B +:1041C00027D1844B1A6D02F4E072802AD1D00FD827 +:1041D000002A00F09580402A10D1186810F0006085 +:1041E00003D001A8FFF7BCFD019805B05DF804FB02 +:1041F000C02A00F0EC80B2F5807F01D00020F4E707 +:10420000DA6C196802F04052490719D5C2B91B6827 +:10421000BFE7B0F5806F1CD16E4B9A6D02F460025F +:10422000B2F5800FA5D004D8002A69D0B2F5001FDE +:10423000D2E7B2F5C00F00F0CA80B2F5000FDCE79C +:10424000644B1968C905AFD5B2F1805FACD1644841 +:10425000CBE7B0F5006F1CD15E4B9A6D02F0E062C7 +:10426000B2F1007F85D004D8002A49D0B2F1807F16 +:10427000B2E7B2F1407F00F0AA80B2F1806FBDD109 +:10428000DA6C196802F040524807DAD5002AD8D112 +:10429000BDE7B0F5805F13D14E4B1A6D02F4E042DA +:1042A000B2F5005F3FF465AF03D84AB3B2F5805F63 +:1042B00092E7B2F5405F00F08A80B2F5804FDEE70A +:1042C000B0F5002F15D1434B9A6D02F44032B2F590 +:1042D000803F05D0B2F5003FD2D0002A8ED17CE7D6 +:1042E000186810F0005080D001A8FFF7E1FD039896 +:1042F0007BE7B0F5803F16D1364BDA6CD20309D498 +:10430000186810F000703FF470AF01A8FFF778FE56 +:1043100002986AE7186810F000603FF466AF01A8E1 +:10432000FFF71EFDE3E7B0F5804F3ED1294B9A6DB4 +:1043300002F0E042B2F1405F2AD00BD8B2F1805FC8 +:1043400014D0B2F1005F1AD0002A7FF457AFFFF704 +:10435000F5FC4AE7B2F1804F20D0B2F1A04F7FF4D4 +:104360004DAF18681D4B10F400301BE0186810F0BA +:1043700000603FF43AAF01A8FFF7F2FCC8E7186805 +:1043800010F000503FF431AF01A8FFF791FDBFE7F7 +:10439000186810F004003FF428AF38E71868104B95 +:1043A00010F4807018BF18461FE7B0F5004F7FF477 +:1043B00025AF084B1A6D02F04052B2F1805F9FD0DA +:1043C000B2F1005FD2D0002A7FF418AFC9E70548E8 +:1043D0000BE700BF004402580090D00340787D01F5 +:1043E00000093D000080BB007047026838B5D36803 +:1043F000044623F0A003D36003F0C6FA0546236801 +:10440000DB689B0601D5002038BD03F0BDFA401BD8 +:10441000B0F57A7FF3D90320F6E7F8B503680546CF +:10442000DC6814F0400416D14FF0FF320327DA6045 +:1044300003F0AAFA06462B68DB685B0601D5204626 +:10444000F8BD03F0A1FA801BB0F57A7FF3D90324FD +:1044500085F82170EFE70024F1E70000104BDA68DF +:1044600022F0400210B5DA6004469A68920606D43B +:10447000FFF7BBFF10B1032084F8210010BD9A683C +:1044800022F020029A60FFF7B0FF10B1032084F8F9 +:104490002100034A936843F020039360EEE700BFD6 +:1044A0000040005838B5044600283FD090F821302D +:1044B00003F0FF021BB980F82020FFF795FF0223CD +:1044C000CA22204684F8213023685A6253225A6255 +:1044D000FFF7A3FF10BB22682069936823F4E00371 +:1044E00023F040039360636891680343A06903432A +:1044F00020460B439360D4E9021343EA014313615E +:10450000FFF7ACFF50B922686569D36C23F0030351 +:10451000D364E369D16C2B430B43D3642368FF223C +:104520005A6210B9012384F8213038BD0120FCE71C +:104530000023092803D840EA0310C0B270470A38A4 +:104540000133C0B2F5E72DE9F04190F8203006467E +:104550000F469046012B4FF0020354D0012280F801 +:104560002130036880F82020CA225A6253225A62FE +:10457000FFF753FF70BB316838787C78BD788A6864 +:10458000B8F1000F32D112F0400208BFFA70FFF705 +:10459000CFFF02462046FFF7CBFF04462846FFF731 +:1045A000C7FFFD7840EA855545EA024242EA042306 +:1045B00003F07F3323F0FE430B608B6823F48023EA +:1045C0008B608A68D7E903300343304613438B601E +:1045D000FFF744FF3368FF225A6210B9012386F8BF +:1045E0002130002386F82030BDE8F081240212F04B +:1045F000400244EA004408BFFA70F87844EA050330 +:1046000043EA8053D4E71846EEE72DE9F04190F8ED +:1046100020300646012B4FF002033FD0012086F8E0 +:10462000213086F820000D78C8784C786D0391F819 +:104630000280AABBE30603D524F010040A344C70B0 +:10464000FFF776FF07464878FFF772FF04464046BB +:10465000FFF76EFF40EA050242EA074545EA0424F7 +:104660003368CA2230465A6253225A62FFF7D5FE97 +:1046700040B924F07F443268304624F0C0045460CE +:10468000FFF7ECFE3368FF225A6210B9012386F867 +:104690002130002386F82030BDE8F0811846FBE782 +:1046A00045EA004545EA080343EA0424D8E703093C +:1046B00000F00F0003EB830300EB4300C0B2704730 +:1046C0000368503343F8212070470368503353F890 +:1046D0002100704790F82030012B4FF0020312D0D8 +:1046E00080F82130CA2203685A6253225A629A68BB +:1046F00042F020029A60FF225A62012380F82130A2 +:10470000002380F820301846704700002DE9F0475C +:10471000054686B0884603F037F9082181462868A7 +:1047200001F0A8FC044648BB696C2868090401F044 +:10473000ACFD044610BB4FF0FF300823302669461D +:104740000494CDE9000302232868CDE90263012324 +:10475000059301F0C0FB286801F0C9FD044668B963 +:104760000746064640F22A5A2868426B12EA0A0FA8 +:10477000426B07D0120719D508248463204606B07F +:10478000BDE8F087110308D43CB901F075FB06467B +:104790002868012401F070FB074603F0F5F8A0EB50 +:1047A00009000130E0D14FF00044E7E7426B930786 +:1047B00001D50224E1E7446B14F0200401D0202449 +:1047C000DBE7044A3FBA36BA8263C8F80070C8F81B +:1047D0000460D3E73A0F00187047704710B50446DD +:1047E00068B1032380F83030006801F053FB2046A5 +:1047F000FFF7F3FF0020606384F8300010BD012054 +:10480000FCE700002DE9F04F0E4687B004469246C3 +:104810001F4603F0B9F8814636B9636B43F0006375 +:104820004FF00108636311E094F83030012B5FFA18 +:1048300083F840F0C1800AEB0703226D0021934208 +:10484000616307D9636B43F000736363404607B04D +:10485000BDE8F08F03230225206884F83030A36B75 +:10486000C1626946012B4FF0FF3300934FEA4723A3 +:1048700018BF4FEA4A2A01939023CDE9023500235D +:10488000CDE9043301F027FB2068012FC36843F012 +:104890004003C36010D95146E56201F01DFC88B1A8 +:1048A0002368474A9A63636B18436063012384F863 +:1048B00030300023E362C9E701235146E36201F08F +:1048C000F2FBECE7019D2068436B13F4957F1BD04E +:1048D000C36823F04003C360436BDB0508D5012F99 +:1048E00006D9A36B032B03D001F08CFC0028D7D191 +:1048F0002368586B10F0080039D0314A9A63636B13 +:1049000043F008036363D1E7436B1A0419D51F2DE5 +:1049100017D906F1040A06F1240B20680AF1040AEB +:1049200001F0AAFA0AF8080C020A0AF8072C020C8D +:104930000AF8062C020E0AF8052CDA45EDD12036CD +:10494000203D03F021F8109BA0EB09009842BAD358 +:1049500023684FF003081A4A9A63636B43F00043DD +:104960006363012384F830300023E3626EE7596B00 +:1049700011F002010AD0124A9A63636B43F00203FA +:104980006363012384F83030E0625FE75A6B12F012 +:1049900020020AD00A4A9A63636B43F020036363E0 +:1049A000012384F83030E16250E70649904699636C +:1049B000012384F8303049E7636B43F000532FE75D +:1049C000FF0FE01F3A0F00182DE9F04F0D4689B098 +:1049D000044692461F4602F0D7FF814635B9636B05 +:1049E00043F000634FF00108636311E094F8303046 +:1049F000012B5FFA83F840F0B3800AEB0703226DC6 +:104A000000219342616307D9636B43F000736363D2 +:104A1000404609B0BDE8F08F0323206884F83030A9 +:104A2000A36BC1629021012B4FF0FF3302934FEA39 +:104A3000472318BF4FEA4A2A03930023CDE9041302 +:104A400002A9CDE9063301F046FA2068012FC368B8 +:104A500043F04003C36011D920235146E36201F0C3 +:104A60006DFB88B12368404A9A63636B18436063A7 +:104A7000012384F830300023E362C9E71023514654 +:104A8000E36201F042FBECE7039E2068436B13F402 +:104A90008D7F1BD0C36823F04003C360436BDB05ED +:104AA00008D5012F06D9A36B032B03D001F0AAFB75 +:104AB0000028D7D12368586B10F008002BD02A4A61 +:104AC0009A63636B43F008036363D1E7436B5A0453 +:104AD0000DD51F2E0BD905F1200B55F8043B01A96C +:104AE0002068019301F0CBF9AB45F6D1203E02F0EE +:104AF0004BFF129BA0EB09009842C6D323684FF0EE +:104B00000308194A9A63636B6363012384F83030A6 +:104B10000023E3627CE7596B11F002010AD0124ACC +:104B20009A63636B43F002036363012384F83030BC +:104B3000E0626DE75A6B12F010020AD00A4A9A63DB +:104B4000636B43F010036363012384F83030E16248 +:104B50005EE7064990469963012384F8303057E7B1 +:104B6000636B43F000533DE7FF0FE01F3A0F00185F +:104B7000F8B590F8303004460E461546012BDFB2EA +:104B800052D100219642416305D9436B43F0006343 +:104B900063633846F8BD036D934203D2436B43F021 +:104BA0000073F5E7032380F83030236C00689A0621 +:104BB00008D41E4B8363636B43F08063636384F8A4 +:104BC0003070E6E701F084F9830106D52368174ABF +:104BD0009A63636B43F40063F0E7A36B012B03D08C +:104BE000032B16D076026D023146206801F0BFFA21 +:104BF00048B123680D4A9A63636B184301236063CD +:104C000084F83030C5E72946206801F0C9FA002849 +:104C1000EFD10021206801F0DCFA0028E9D101235E +:104C2000074684F83030B4E70227B2E7FF0FE01FF1 +:104C300070470000C36D9A0F0A70C3F383624A7015 +:104C4000C3F301628A70C3F30742CA70C3F3072239 +:104C5000DBB20A714B71036E1A0DCA80C3F30342B3 +:104C60000A72C3F3C0324A72C3F380328A72C3F34A +:104C70004032CA72C3F300320A7300224A73826B55 +:104C800010B5002A6BD140F6FC74426E04EA83032F +:104C900043EA92730B61C2F3C2630B75C2F3026302 +:104CA0004B75C2F342538B75C2F38243C2F3C232D7 +:104CB000CB750A760B690A7E013302F007020232D5 +:104CC000934083640A7A02F00F040122A240C26476 +:104CD000520A534303654FF400734365436EC3F3B5 +:104CE00080324A76C3F3C61203F07F038A76CB760E +:104CF000836E0020DA0F0A77C3F341724A77C3F359 +:104D000082628A77C3F38352CA77C3F3405281F831 +:104D10002020C3F3004281F8210081F82220C3F350 +:104D2000C03281F82320C3F3803281F82420C3F3FA +:104D3000403281F82520C3F3003281F82620C3F3E6 +:104D4000812281F82720C3F30122C3F3460381F8AF +:104D5000282081F82930012381F82A3010BD012A4A +:104D60000FD11B04B0F8662003F47C1313430B61CE +:104D70000B6901339B02836403654FF40073C364C2 +:104D8000ABE70368054A9A63436B43F08053436380 +:104D9000012380F830301846E0E700BFFF0FE01F26 +:104DA0002DE9F041002794B004464FF48030CDE95E +:104DB0000477CDE90677FFF7CBF9054648B9012519 +:104DC0004FF0006384F830506363284614B0BDE8A8 +:104DD000F081734E04ABB0FBF6F6079831460896A7 +:104DE00076008DE8030020680ECB01F02BF82068D8 +:104DF00001F04AF86B48B5FBF6F5B0FBF5F0013071 +:104E0000FBF73EF82068039701F078F8064698B95A +:104E1000206801F0CDFB30B12068E66301F06EF848 +:104E200088B1064608E00123E3630021206801F011 +:104E30002CFA58B14FF08056012584F83050606B41 +:104E400006436663C1E7E36B012BEED04FF6FE75B8 +:104E50000021DFF858812F46039BAB4200D8B9B13F +:104E6000039BBB422AD816F0804F4FF0010300D0BD +:104E7000A3632068ADF80A3001F012F808BB4FF0C8 +:104E80008060012584F83050616B084360639CE7C3 +:104E9000206801F0FAF906460028CDD14146206885 +:104EA00001F0E8FA0028C5D13146206801F010F879 +:104EB000039B0646C10F01330393CDE74FF0807685 +:104EC000BAE7A36B032B42D0206801F083FA0028D5 +:104ED000D7D10146206800F0FBFF0421E06620687E +:104EE00000F0F6FF08212067206800F0F1FF0C2198 +:104EF0006067206800F0ECFFA36BA067032B26D04F +:104F00000DF10A01206801F00FFB0028B9D1A36B55 +:104F10002068032B1BD0BDF80A106164090401F05E +:104F20006FFA0028ADD10146206800F0D1FF0421BE +:104F3000E065206800F0CCFF08212066206800F0C2 +:104F4000C7FF0C216066206800F0C2FFA066042144 +:104F5000206800F0BDFF09A9000D20642046FFF77E +:104F600069FE054610B14FF080508AE7616C2068F9 +:104F7000090401F071F9002883D14FF40071206811 +:104F800001F078F800283FF420AF23680125064A95 +:104F90009A63636B1843606384F8305015E700BF71 +:104FA00000350C0010210100FF0FE01F000010C1B0 +:104FB0002DE9F041044696B00D4602F0E5FC0021D3 +:104FC0000646206800F084FF83010BD54FF4006093 +:104FD00023680125534A9A63636B1843606384F81E +:104FE00030508AE04021206801F044F810B1636B32 +:104FF0006363EDE7616C2068090401F046F900285D +:10500000F5D140234FF0FF374FF0600C0490694614 +:105010002068CDE900730223CDE902C30123059383 +:1050200000F059FF206801F094F90028DFD106AFA5 +:1050300023685A6B12F4957F0AD05A6B11076FD40C +:105040005A6B92076AD45B6B9B061ED52020BFE784 +:105050005B6B180408D507F12008206800F00CFFEE +:1050600047F8040BB845F8D102F08EFC801B0130E4 +:10507000DED14FF00040ABE700F0FEFE47F8040B36 +:1050800002F082FC801B0130F3D02068436B13F4E4 +:105090008053F1D10699244A8263C1F381122A70A8 +:1050A000C1F340126A700A0A22F0FF0242EA11625A +:1050B00092B26A80079A12BA6A60089AD1B22972CB +:1050C000C2F307216972C2F30351120CA972099944 +:1050D00022F0FF02C8B20243AA81C1F38522AA735B +:1050E000C1F30122EA73C1F3031201F00F012A7424 +:1050F0009DF82B206974AA741D464FF40071206836 +:1051000000F0B8FF30B123680125064A9A63606356 +:1051100084F83050284616B0BDE8F081022057E7E9 +:10512000082055E7FF0FE01F3A0F0018836B0B6054 +:10513000C36B4B60036C8B60436CCB60836C0B6107 +:10514000C36C4B61036D8B61436D0020CB61704775 +:10515000032330B580F8303089B0836B04460D46A8 +:10516000032B02D0B1F5004F03D1636B43F08053A2 +:1051700053E0B1F5804F2AD100210068CDE9031139 +:1051800000F0A6FE80011CD403A92046FFF7BEFA5A +:1051900060B9049B590317D5616C2068090401F0BC +:1051A00074F818B90221206801F088F8636B18437D +:1051B0006063636B002B32D02368464A9A630125F3 +:1051C0005BE04FF40060F1E74FF08060EEE709BB71 +:1051D0000068CDE9031100F07BFE820114D403A91D +:1051E0002046FFF793FA60B9049BDB030FD5616C8F +:1051F0002068090401F049F818B90146206801F057 +:105200005DF8616B0843D3E74FF40060F9E74FF0B6 +:105210008060F6E7436B43F000636363C9E74FF4D4 +:105220008030FEF795FF00284FD063682A4903932A +:10523000A368B0FBF1F2CDE90435236906936369F5 +:10524000934201D307930DE0A56DB5F5007FF9D02A +:10525000B5F5807F2CD12BBB884221D91F4BB0FBE9 +:10526000F3F0079008AB002513E9030003AB8DE8CA +:10527000030020680ECB00F0E5FD4FF400712068BC +:1052800000F0F8FE30B123680125124A9A63636B7F +:10529000184360630123284684F8303009B030BDDC +:1052A0000023CFE75A00B0FBF2F28A42CAD9D5E711 +:1052B0000B491BB98842F3D90792D3E75D00B0FBD5 +:1052C000F5F0884288BF1346BCE7636B43F0006388 +:1052D000636374E7FF0FE01F80F0FA0200E1F50559 +:1052E00040787D01416C10B509040446006801F066 +:1052F00017F830B90146206800F0EAFDC0F34320FA +:1053000010BD616B084360630020F7E770B5044689 +:1053100086B018B90125284606B070BD90F8303027 +:1053200003F0FF0213B90276FFF756FA0323204673 +:1053300084F83030FFF734FD0028EBD101A9204676 +:10534000FFF736FE0028E5D1A16B9DF81420012956 +:105350009DF81530D2B2DBB21CD1134314BF4FF409 +:1053600000734FF48073A365E1682046FFF7F0FEF9 +:1053700005460028CED102F007FB06462046FFF77F +:10538000B1FF042808D100236363E362012384F89A +:105390003030C0E7A065E7E702F0F6FA801B013085 +:1053A000ECD14FF0004303256363012384F83030D0 +:1053B000B1E770477047704770470000F7B5C56A9E +:1053C00004460068436B1B0420D52F071ED5A36A33 +:1053D0001F2B19D9666A351D06F12407206804358C +:1053E00000F04AFD05F8080C030A05F8073C030C19 +:1053F000000E05F8063C05F8050CBD42EED1A36A87 +:105400002036203B6662A36203B0F0BD436BDE052D +:1054100053D54FF480738363C36B23F4414323F06C +:105420003A03C363C36B23F08053C363C36823F0A1 +:105430004003C36015F008031FD015F0220F08D0F9 +:1054400000F0E0FE28B1636B184360632046FFF76D +:10545000EFFB2368A907694A9A634FF0010384F8B8 +:1054600030304FF00003E36203D02046EBF76EF8D4 +:10547000CAE72046EBF765F8C6E72A06C4D515F05B +:10548000220F8362C362036508D000F0BBFE28B11F +:10549000636B184360632046FFF7CAFB012315F0D6 +:1054A000300F84F830304FF00003E36202D0204622 +:1054B000EBF747F8AF07A7D0D7E7436B5E0427D5D4 +:1054C000290725D5236A1F2B9ED9E669351D06F1CC +:1054D000240715F8043C043501A92068019315F848 +:1054E000072C43EA0223019315F8062C43EA0243F2 +:1054F000019315F8052C43EA0263019300F0BFFC09 +:10550000AF42E6D1236A2036203BE66123627BE787 +:10551000436B13F03A0F436B56D09A0703D5636B76 +:1055200043F002036363436B1B0703D5636B43F0D4 +:1055300008036363436B9F0603D5636B43F020034B +:105540006363436BDE0603D5636B43F01003636351 +:105550002A4B8363C36B23F49D73C363C36823F037 +:105560004003C360C36A43F40053C362C36843F09B +:105570008003C36000F046FE636B15F0080140EA4B +:10558000030023686063DA6822F08002DA604FF477 +:1055900000629A6308D0012384F830300023E3626C +:1055A0002046FFF745FB2FE728067FF52DAF626BFE +:1055B000002A3FF429AFDA6B22F08052DA631965D2 +:1055C000012384F83030EBE7DA007FF51DAF4FF0B0 +:1055D000805305F020058363036D20465B0706D4E6 +:1055E00015B1FFF7E9FE0FE7FFF7E4FE0CE715B191 +:1055F000FFF7E1FE08E7FFF7DCFE05E73A0F0018CA +:1056000070470000304A0368904212D0B0F1804FDA +:105610000FD0A2F57C4290420BD002F580629042FE +:1056200007D002F58062904203D002F578429042A2 +:1056300019D14A6823F070031343234A90421DD0C6 +:10564000B0F1804F1AD0A2F57C42904216D002F5FC +:105650008062904212D002F5806290420ED002F534 +:10566000784290420AD0194A904207D002F58062EF +:10567000904203D002F58062904203D123F440733C +:10568000CA6813434A6923F08003134303608B689D +:10569000C3620B6883620C4B98420FD003F58063A2 +:1056A00098420BD003F57053984207D003F58063FE +:1056B000984203D003F58063984201D10B690363DC +:1056C00001234361704700BF0000014000400140DA +:1056D00010B5044650B390F83D3003F0FF021BB9FB +:1056E00080F83C20FFF78CFF02232068211D84F8FE +:1056F0003D30FFF787FF0123002084F8483084F80D +:105700003E3084F83F3084F8403084F8413084F8EB +:10571000423084F8433084F8443084F8453084F8CB +:10572000463084F8473084F83D3010BD0120FCE756 +:1057300001F01F01036A10B501248A408C4023EA5E +:1057400004030362036A1A43026210BD10B50446E3 +:1057500029B990F83E30012B31D0012010BD042929 +:1057600007D190F83F30012BF7D1022380F83F306A +:1057700028E0082907D190F84030012BEDD1022311 +:1057800080F840301EE00C2907D190F84130012B01 +:10579000E3D1022380F8413014E0102907D190F8BA +:1057A0004230012BD9D1022380F842300AE090F830 +:1057B0004330012BD1D1022380F8433002E0022391 +:1057C00080F83E3001222068FFF7B2FF2368204AAC +:1057D000934219D002F58062934215D002F57052BF +:1057E000934211D002F5806293420DD002F580629F +:1057F000934209D0B3F1804F0ED19968154A0A40FF +:10580000062A21D10020A9E75A6C42F400425A64CA +:105810000F4A9342EED1F0E70F4A9342EDD002F5E2 +:1058200080629342E9D002F580629342E5D002F5AE +:1058300078429342E1D0A2F56C429342DDD01A68DF +:1058400042F001021A60DDE7B2F5803FF7D1D9E7F7 +:105850000000014007000100000400407047000004 +:10586000F0B504460368C06987B02169A2681D6865 +:105870000A4361690A43A449024329400A43E16893 +:105880001A605A6822F440520A43A1695A609F4A3A +:1058900093421CBF226A11439A6822F06E4222F49E +:1058A00030620A43616A9A60DA6A22F00F020A43A0 +:1058B000DA62974A93421BD1964B5B6D03F0380333 +:1058C000282B6CD8944AB0F5004FD35C40F002818D +:1058D000082B00F2BF80082B61D8DFE813F0E70047 +:1058E000EC0060006000EF00600060006000F40009 +:1058F0008A4A934207D1874B5B6D03F00703052B60 +:105900004DD8874ADFE7874A934207D1814B5B6DC9 +:1059100003F00703052B42D8834AD4E7834A934216 +:1059200007D17C4B5B6D03F00703052B37D8804A0A +:10593000C9E7804A934207D1764B5B6D03F00703BA +:10594000052B2CD87C4ABEE77C4A934207D1714B89 +:105950005B6D03F03803282B21D8794AB3E7794AE5 +:10596000934207D16B4B5B6D03F00703052B16D8F1 +:10597000754AA8E7754A934207D1664B5B6D03F001 +:105980000703052B0BD8724A9DE7604A934206D164 +:1059900002F50E32936D03F00703052B01D90120A8 +:1059A0000EE06C49CB5C102B23D011D8042B16D001 +:1059B000082B19D0022BF2D1FEF7C0F910BB002042 +:1059C0004FF00113A3660023C4E91C3307B0F0BDF8 +:1059D000202B3DD0402BE2D14FF4004012E068462E +:1059E000FEF7BEF90198E9E703A8FEF761FA04980B +:1059F000E4E71368584813F0200F03D01368C3F38B +:105A0000C103D840554B626A656833F8122005EB34 +:105A10004501B0FBF2F39942C1D8B3EB053FBED8C4 +:105A20000023002106F0CCFA2A460F0200230602CA +:105A300047EA10676808301847F1000106F0C0FA1D +:105A4000474BA0F540729A42A9D82368D860B6E7C0 +:105A50004448D7E7202B3BD0402B0BD0102B9ED1B6 +:105A60002C4B3D481A6812F0200F03D01B68C3F37B +:105A7000C103D840616A394B626833F81130B0FB1A +:105A8000F3F3500800EB4300B0FBF2F083B24FF6A3 +:105A9000EF72A3F11001914281D820F00F00C3F3FF +:105AA0004203226880B21843D06088E7FDF7B8FA55 +:105AB000002884D0DEE7FDF7C5FAF9E76846FEF76F +:105AC0004FF90198F4E703A8FEF7F2F90498EFE71D +:105AD0002448CFE7082B47D8082B3FF660AF01A238 +:105AE00052F823F0B95B0108C55B01089F59010812 +:105AF0009F590108CB5B01089F5901089F59010874 +:105B00009F590108D55B0108F369FFCF000C0058CD +:105B10000010014000440258E8D20108004400404F +:105B200011D301080048004011D30108004C004087 +:105B300011D301080050004011D3010800140140A6 +:105B4000E8D201080078004011D30108007C004031 +:105B500011D3010817D301080090D0031ED3010808 +:105B6000FFFC0F0000093D00202B38D0402B38D01F +:105B7000102B7FF414AF1D4A136813F0200F1C4B39 +:105B800032D01068C0F3C10023FA00F0616A194BEB +:105B9000626833F81130B0FBF3F303EB5203B3FB4D +:105BA000F2F39BB24FF6EF72A3F1100191423FF670 +:105BB000F6AE2268D36002E7FDF732FA00283FF420 +:105BC000FEAEE3E7FDF73EFAF8E76846FEF7C8F8F1 +:105BD0000198F3E703A8FEF76BF90498EEE706488F +:105BE000D4E74FF40040D1E71846CFE7004402580D +:105BF0000090D0031ED3010800093D00836ADA0734 +:105C000010B506D50168C46A4A6822F400322243FE +:105C10004A609C0706D50168046B4A6822F480320A +:105C200022434A60590706D50168446B4A6822F44A +:105C3000802222434A601A0706D50168846B4A68AD +:105C400022F4004222434A60DC0606D50168C46B98 +:105C50008A6822F4805222438A60990606D5016838 +:105C6000046C8A6822F4005222438A605A0610D5D6 +:105C70000168446C4A68B4F5801F22F4801242EA3D +:105C800004024A6005D14A68846C22F4C0022243AF +:105C90004A601B0606D50268C16C536823F40023D2 +:105CA0000B43536010BD2DE9F041DDF81880044628 +:105CB0000E4615461F462268D36936EA03030CBF19 +:105CC00001230023AB4201D000201CE0B8F1FF3FCC +:105CD000F2D001F059FEC01B40452068036802D88D +:105CE000B8F1000F11D123F4D0730360836823F05F +:105CF000010383602023C4F88430C4F88830002373 +:105D0000032084F88030BDE8F0815A07D3D5C369F9 +:105D10001B05D0D54FF400630362036823F4D073EE +:105D20000360836823F0010383602023C4F8843078 +:105D3000C4F88830C4F88C30E1E730B5002504465B +:105D400085B0C0F88C5001F01FFE2268034612682F +:105D5000110717D422681268520709D56FF07E42E6 +:105D60004FF48001204600920022FFF79CFFB0B95B +:105D700020230020C4F8843084F88000C4F88830E0 +:105D8000E0660DE06FF07E4203904FF40011204674 +:105D900000922A46FFF787FF039B0028DAD00320F2 +:105DA00005B030BD10B5044650B3D0F884301BB9EF +:105DB00080F88030FFF752FD226824232046C4F883 +:105DC0008430136823F001031360FFF749FD0128B5 +:105DD00016D0A36A13B12046FFF710FF23682046B0 +:105DE0005A6822F490425A609A6822F02A029A6015 +:105DF0001A6842F00102BDE810401A60FFF79DBF2B +:105E0000012010BD90F88030012B09D00268136882 +:105E100043F002031360002380F880301846704777 +:105E20000220704790F88030012B09D00268136877 +:105E300023F002031360002380F880301846704777 +:105E40000220704784B010B503AC84E80E00DDE991 +:105E5000033241681343059A1343069A1343079A82 +:105E60001343044A0A40BDE81040134304B04360A2 +:105E700000207047002CC0FFD0F8800070470B68EE +:105E8000C0F8803000207047036843F003030360CC +:105E900000207047036823F003030360002070476D +:105EA000006800F0030070470B6810B58360C46899 +:105EB000D1E901321343CA6813430A691343034A01 +:105EC00022401343C360002010BD00BFC0E0FEFFAE +:105ED0001430405870470B6810B543624B688362BA +:105EE000C26AD1E9023422F0FF0223430C694969F6 +:105EF00023430B431343C362002010BD10B500239E +:105F000086B0044601A9CDE90133CDE903334FF44E +:105F100080530593FFF7C8FF0A4B4FF4FA521B68F2 +:105F2000B3FBF2F241F288335343013B07D3626B78 +:105F30001206FAD5044B0020A36306B010BD4FF043 +:105F40000040FAE718030024C5002000454B10B5B7 +:105F50001B6804464FF4FA50B3FBF0F342485A432F +:105F6000002A48D0636B034207D09B0405D4636BBF +:105F7000580704D50420A06310BD013AF0E7606B18 +:105F800010F0010002D00123A363F5E7374BA363B0 +:105F90002369DBB2994231D1636935481840002842 +:105FA000EAD0002B2CDB5A002DD49C002DD4D90034 +:105FB0002DD41A012ED45C012FD4D90130D41A0269 +:105FC00031D45C0232D4990233D4DA0234D45C0383 +:105FD00035D4990336D4DA0337D41C0438D45904A1 +:105FE00039D49A043AD413F0080F14BF4FF40000C8 +:105FF0004FF48030C0E74FF00040BDE70120BBE721 +:106000004FF00070B8E74020B6E78020B4E74FF4C7 +:106010008070B1E74FF40070AEE74FF48060ABE7FB +:106020004FF40060A8E74FF48050A5E74FF400500C +:10603000A2E74FF480409FE74FF400409CE74FF405 +:10604000003099E74FF4802096E74FF4002093E763 +:106050004FF4801090E74FF400108DE74FF480006C +:106060008AE700BF1803002445002000C500200077 +:1060700008E0FFFD30B54FF4807387B01025002293 +:106080000446019101A9CDE902534FF48053CDE9B3 +:106090000423FFF709FF41F2883229462046FFF723 +:1060A00055FF07B030BD30B54FF4807387B0112570 +:1060B00000220446019101A9CDE902534FF4805317 +:1060C000CDE90423FFF7F0FE41F28832294620464D +:1060D000FFF73CFF07B030BD30B54FF4807387B099 +:1060E000122500220446019101A9CDE902534FF483 +:1060F0008053CDE90423FFF7D7FE41F288322946C9 +:106100002046FFF723FF07B030BD30B54FF4807352 +:1061100087B0182500220446019101A9CDE9025358 +:106120004FF48053CDE90423FFF7BEFE41F28832DD +:1061300029462046FFF70AFF07B030BD30B54FF4BF +:10614000807387B0192500220446019101A9CDE989 +:1061500002534FF48053CDE90423FFF7A5FE41F22B +:10616000883229462046FFF7F1FE07B030BD30B532 +:106170004FF4807387B0202500220446019101A9C5 +:10618000CDE902534FF48053CDE90423FFF78CFE91 +:1061900041F2883229462046FFF7D8FE07B030BDCD +:1061A00030B54FF4807387B0212500220446019159 +:1061B00001A9CDE902534FF48053CDE90423FFF741 +:1061C00073FE41F2883229462046FFF7BFFE07B032 +:1061D00030BD30B54FF4807387B0262500220446C9 +:1061E000019101A9CDE902534FF48053CDE9042375 +:1061F000FFF75AFE4FF2186229462046FFF7A6FE27 +:1062000007B030BD30B5002387B00C254FF4807245 +:10621000044601A9CDE90323CDE901354FF48053AC +:106220000593C36843F08003C360C36823F0400351 +:10623000C360FFF739FE074A29462046FFF786FE6E +:10624000E368B0F1007F08BF002023F08003E36023 +:1062500007B030BD00E1F50530B54FF4807387B06D +:10626000072500220446019101A9CDE902534FF40C +:106270008053CDE90423FFF717FE41F28832294607 +:106280002046FFF763FE07B030BD30B54FF4807392 +:1062900087B0372500220446019101A9CDE90253B8 +:1062A0004FF48053CDE90423FFF7FEFD41F288321D +:1062B00029462046FFF74AFE07B030BD30B54FF4FF +:1062C000807387B0062500220446019101A9CDE91B +:1062D00002534FF48053CDE90423FFF7E5FD41F26B +:1062E000883229462046FFF731FE07B030BD30B571 +:1062F000002387B033254FF48072044601A9CDE90D +:106300000323CDE901354FF480530593FFF7CCFD0E +:1063100041F2883229462046FFF718FE07B030BD0B +:1063200030B54FF4807387B00D25002204460191EB +:1063300001A9CDE902534FF48053CDE90423FFF7BF +:10634000B3FD41F2883229462046FFF7FFFD07B032 +:1063500030BD30B5002387B00D254FF48072044660 +:1063600001A9CDE90323CDE901354FF4805305930D +:10637000FFF79AFD41F2883229462046FFF7E6FDF5 +:1063800007B030BD114B4FF4FA5102461B68B3FB06 +:10639000F1F141F288334B43013B13D3516B11F0C0 +:1063A000450FF9D08904F7D4536B5B0702D504205D +:1063B00090637047506B10F0010014BF0123044B31 +:1063C000936370474FF00040704700BF18030024EC +:1063D000C500200010B5002386B00222044601A9A2 +:1063E000CDE901324FF44072CDE903234FF48053DD +:1063F0000593FFF759FD2046FFF7C4FF06B010BD17 +:1064000010B5092286B04FF4407304460191002173 +:10641000CDE902234FF48053CDE9041301A9FFF71E +:1064200043FD2046FFF7AEFF06B010BD0F4B4FF403 +:10643000FA5102461B68B3FBF1F141F288334B433A +:10644000013B0FD3516B11F0450FF9D08904F7D4FC +:10645000506B10F0040002D0042090637047044B8E +:10646000936370474FF00040704700BF180300244B +:10647000C500200010B5292286B04FF48073044671 +:1064800001910021CDE902234FF48053CDE904139B +:1064900001A9FFF709FD2046FFF7C8FF06B010BDB0 +:1064A0001F4B10B51B6804464FF4FA50B3FBF0F0D5 +:1064B00041F288334343013B29D3606B10F0450F11 +:1064C000F9D08004F7D4636B580702D50420A06389 +:1064D00010BD606B10F0010002D00123A363F7E749 +:1064E0002369DBB2994215D10E4BA363636913F4A0 +:1064F000604002D11B0C1380EAE75A040CD413F459 +:10650000004F14BF4FF480504FF48030E0E74FF05D +:106510000040DDE70120DBE74FF40050D8E700BF83 +:1065200018030024C500200030B589B000230325DE +:10653000044601914FF48071CDE90335CDE905138F +:106540004FF4805303A90793FFF7AEFC019A294645 +:106550002046FFF7A5FF09B030BD0000134B4FF4F4 +:10656000FA5102461B68B3FBF1F141F288334B4309 +:10657000013B17D3516B11F0450FF9D08804F7D4C4 +:10658000536B590702D5042090637047506B10F08D +:10659000010002D0012393637047536B5B0603D560 +:1065A0004023F8E74FF00040704700BF1803002475 +:1065B00010B54FF4D57286B008234FF480710446AD +:1065C000CDE901230023CDE903134FF4805301A942 +:1065D0000593FFF769FC2046FFF7C0FF06B010BD2A +:1065E0000A4B013B0FD00269002AFADA0369074A15 +:1065F00043F001030361013A05D0036913F001037D +:10660000F9D1184670470320704700BF410D0300C1 +:1066100084B038B505AD044685E80E000A9B012B11 +:106620002FD1836B23F480338363C36823F4840303 +:1066300023F04003C360C36823F44013C360119B7D +:10664000012B03D1C36843F48013C3602046FFF7D6 +:10665000C7FF089B012B10D1E36D9BB2E365E36D8F +:1066600043F07B7343F40033E365A36843F0060310 +:10667000A360A36843F02003A360BDE8384004B0E2 +:106680007047C36843F04003C360FFF7A9FF0E9B48 +:1066900023B9A36B43F48033A363DAE7A36B23F43A +:1066A0008033F9E7022A4AD1274B284A0B44934208 +:1066B00039D9274B274A0B44934236D9A1F57403A5 +:1066C000254AA3F51053934231D9A1F18373234A8C +:1066D000A3F5E74393422CD3214B224A0B44934228 +:1066E00029D9214B214A0B44934226D3204B214ADE +:1066F0000B44934223D3A1F1B7731F4AA3F5585318 +:1067000093421ED31D4B1E4A0B44934234BF0723B2 +:106710000623C26822F47052C260C26842EA832330 +:10672000C360002070470F23F3E70E23F1E70D232A +:10673000EFE70C23EDE70B23EBE70A23E9E7092357 +:10674000E7E70823E5E700BF405327FFFF340C00CD +:10675000401E1BFF3F420F007F4F120020D6130048 +:1067600060B6E5FE5FE3160000D3CEFE40771B0067 +:10677000C05BB3FEC091210020753800E05459FE83 +:10678000E09C4100836843F0010383600020704770 +:10679000836823F0010383600020704708B5C36855 +:1067A000012923F0C043C36008D1C36843F00053FC +:1067B000C3603220F9F764FB002008BD19B9C36833 +:1067C00043F08043F4E70120F7E700008901074A1E +:1067D00041F020010161013A05D0036913F0200363 +:1067E000F9D1184670470320704700BF410D0300E0 +:1067F0001023064A0361013A05D0036913F0100320 +:10680000F9D1184670470320704700BF410D0300BF +:10681000D0F800381943C0F8001800207047000075 +:1068200084B02DE9F843044609A80E4680E80E001E +:106830000023139D194603F14002013304EB820249 +:106840000F2B5160F7D104F50067002D6CD17B68E8 +:1068500043F002037B60A36B23F40013A36323685C +:1068600043F040032360236843F080032360002348 +:10687000C4F8003ED4F80038C4F800380E9B012B51 +:1068800059D10B99002954D120464FF67F38FFF794 +:10689000BFFF10212046FFF799FF01462046FFF772 +:1068A000A7FF0843002304F51062C0B24FF0904CDC +:1068B00019464FF0006E00383B617B6118BF012024 +:1068C000FB61B34239D1002204F530634FF0904CA4 +:1068D0004FF0006E11464FF67F38B24240D13B690F +:1068E00023F480733B610023A3616FF080436361F5 +:1068F0000C9B1BB9A36943F01003A361A269224B4F +:106900001343A3610F9B1BB1A36943F00803A36169 +:10691000012D05D1A36943F0804343F00403A36133 +:10692000BDE8F84304B07047A36B43F40013A363BE +:106930009DE71946A8E70321A6E7D2F80090B9F130 +:10694000000F0BDA3BB9C2F800E011610133C2F865 +:1069500008802032B5E7C2F800C0F6E71160F4E71E +:10696000D3F80090B9F1000F0BDA3AB9C3F800E0A0 +:1069700019610132C3F808802033AEE7C3F800C0C4 +:10698000F6E71960F4E700BF00383C80D0F808381B +:1069900013F0060004D013F0020F14BF02200F20E2 +:1069A000704730B50D78012400F5006205F00F0343 +:1069B00000EB45109C404B78012BD36918D11C4348 +:1069C000D461D0F800391A0410D48A68D0F800498C +:1069D000C2F30A03CA78234343EA824343EA855356 +:1069E00043F0805343F40043C0F80039002030BD29 +:1069F00043EA0444D461D0F8003B1B04F6D48B680E +:106A0000D0F8002BC3F30A031343CA7843EA824346 +:106A100043F0805343F40043C0F8003BE6E7000036 +:106A20004B78DFF8ECC0012BF0B50E784D6900EB28 +:106A30004614364F46D104F51063BDB91D692F4089 +:106A40001F611D6945F400251D611D6905EA0C05DE +:106A5000012A1D6123D10A6902B15A61D4F80039B3 +:106A600043F00443C4F800390020F0BDD3F810E02F +:106A70000EEA0C0CC3F810C0D3F810C00CEA0707DC +:106A80001F618F68AF421D6945F4002538BF4F6113 +:106A90001D614D691F69C5F312053D43D8E7D4F860 +:106AA000003943F00443C4F800394B69002BDBD0B4 +:106AB00006F00F060123D0F83428B3401343C0F882 +:106AC0003438D1E7D4F8100B04F5306300EA0C0039 +:106AD0001861186938401861886805B148611D69F6 +:106AE000C0F31200012A45F400251D611D6940EA2A +:106AF0000500186102D1CA6802B15A61D4F8003B9E +:106B000043F00443C4F8003BAEE700BFFFFF07E0DB +:106B10000000F8FF10B59DF8084044B90333013276 +:106B20009B0800EB023001EB83038B4201D1002074 +:106B300010BD51F8042B0260F7E700002DE9F34186 +:106B40004D780F78012D4B6900EB4714CE78DFF8B4 +:106B5000B8C1DFF8B8E140F08E8004F51065D5F8D3 +:106B600010806BBB08EA0C0CC5F810C0D5F810C03B +:106B70004CF4002CC5F810C0D5F810C00CEA0E0E6D +:106B8000C5F810E0012A4ED10B6903B16B61012EEB +:106B90000CD1D0F8083813F4807FD4F800390CBF3A +:106BA00043F0005343F08053C4F80039D4F800395F +:106BB00043F00443C4F80039002002B0BDE8F0817E +:106BC00008EA0E0E012EC5F810E0D5F810E00EEA26 +:106BD0000C0CD1F808E0C5F810C00EEB030CD5F88A +:106BE00010800CF1FF3CBCFBFEFEDFF824C10CEA78 +:106BF000CE4C4CEA080CC5F810C0C3F3120CD5F803 +:106C000010E04CEA0E0CC5F810C0BBD1D5F810C08E +:106C10002CF0C04CC5F810C0D5F810C04CF0005C8A +:106C2000C5F810C0AEE7D4F80059012E45F0044570 +:106C3000C4F800590BD0002BBED007F00F0201277B +:106C4000D0F8343897401F43C0F83478B4E7D0F810 +:106C500008589BB215F4807FD4F800590CBF45F05A +:106C6000005545F08055C4F8005900923A46C9686D +:106C7000FFF750FFA0E7D4F8105B04F5306705EA92 +:106C80000E053D613D6905EA0C053D618D681BBB44 +:106C90003B69C5F312051D433D613B6943F4002385 +:106CA000012A3B6102D1CB6803B17B61012E0CD17B +:106CB000D0F8083813F4807FD4F8003B0CBF43F0C1 +:106CC000005343F08053C4F8003BD4F8003B43F03A +:106CD0000443C4F8003B6FE72B44DFF834C0D7F817 +:106CE00010E0013BB3FBF5F30CEAC34C9BB24CEA5A +:106CF0000E0C6B43C7F810C0D7F810C0C3F31203D3 +:106D000043EA0C03CCE700BFFFFF07E00000F8FFF9 +:106D10000000F81F70B50023940800F5805502F0BC +:106D20000302A34214D301EB84017AB100F5805031 +:106D300000230468D80024FA00F0C854013398B244 +:106D40008242F7D1013A92B201321144084670BD35 +:106D50002E6841F823600133E3E74A780B78012A73 +:106D600000EB431012D1D0F80029002A06DB2BB12A +:106D7000D0F8003923F08043C0F80039D0F800394A +:106D800043F40013C0F8003900207047D0F8002BFE +:106D9000002A06DB2BB1D0F8003B23F08043C0F87B +:106DA000003BD0F8003B43F40013C0F8003BEBE796 +:106DB0000B784A7800EB4310CB78012AA3F1020349 +:106DC000DBB20FD1D0F80029012B22F40012C0F859 +:106DD000002905D8D0F8003943F08053C0F80039B5 +:106DE00000207047D0F8002B012B22F40012C0F8CD +:106DF000002BF5D8D0F8003B43F08053C0F8003B9F +:106E0000EEE7D0F80038090123F4FE6301F4FE61D7 +:106E1000C0F80038D0F800381943C0F80018002036 +:106E20007047D0F8003E23F00303C0F8003ED0F8CE +:106E3000043823F00203C0F8043800207047D0F86B +:106E4000003E23F00303C0F8003ED0F8043843F0BE +:106E50000203C0F80438002070474269806910407E +:106E60007047D0F8183800F50060C0691840000C71 +:106E70007047D0F8183800F50060C069184080B23B +:106E8000704700EB411100F50060D1F8082B406914 +:106E90001040704710B5D0F81048D0F8343800EBE7 +:106EA000411001F00F0100F51060CB408068DB015C +:106EB000DBB22343184010BD406900F00100704769 +:106EC000D0F8003923F4FF6323F00703C0F800393A +:106ED000D0F8043843F48073C0F8043800207047B9 +:106EE00030B5056C00F530630F4CA54203D9D0F8DE +:106EF000004B002C16DB002401291C611C6944F4A2 +:106F000000241C611C6944F018041C611C6944F0D5 +:106F1000C0441C6106D15A61D0F8003B43F0802385 +:106F2000C0F8003B002030BD0A30544F2B4BD3F843 +:106F3000882042F47002C3F888201A6942F01002D7 +:106F40001A61274A136803F00F03062B05D813684C +:106F500023F00F0343F007031360224B1A6842F03B +:106F600001021A6000221A611F4A19680A401C496E +:106F70001A600A68120705D50A6822F00F0242F06B +:106F800007020A60002219499A61DA611A6299625D +:106F90001749D962174919635A639963DA63196407 +:106FA0005A64196821F4802119601A66124A536ADA +:106FB00043F480435362114B1B681B0C1B04B3F159 +:106FC000005F02D20E4B01221A600E4B43F2D20236 +:106FD0001A600D4A014B9A60704700BF00ED00E057 +:106FE00000200052004402587FEDF6EA000202023F +:106FF0000000FF0180020101C00000580010005C89 +:10700000088100510040005200000008494A1369FD +:10701000114603F03803102B30B500F0878006D8F6 +:10702000002B5FD0082B00F083800A685BE0182BF0 +:10703000FBD1906A956AD16A15F47C7FC5F305137C +:10704000546B3BD007EE903AC4F3CC0401F001033B +:1070500000F00300F8EEE76A63430128F7EE005AF8 +:1070600007EE903AFAEEE97A42D0022850D0116841 +:10707000314BC1F3C101126BCB40C2F3080207EEE2 +:10708000103AB8EEC76A86EE267A06EE902AF8EE37 +:10709000E66A76EEA77A77EEA57A264B67EE877AD0 +:1070A0001B6BC3F34623013307EE103AF8EEC76AB1 +:1070B00087EEA67AFCEEC77A17EE903A1D481F4974 +:1070C0008269C2F303228A5CD340826902F00F0214 +:1070D0008A5C1B4902F01F0223FA02F20A60194A75 +:1070E000136030BD1268C2F3C102134BD340E5E711 +:1070F000136B9FED156AC3F3080307EE103AB8EE61 +:10710000C77A77EE277A77EEA57A86EE267AC4E7F5 +:10711000136B9FED0E6AC3F3080307EE103AB8EE47 +:10712000C77A77EE277A77EEA57AEEE7084BC5E7C0 +:10713000084BC3E7004402580090D00336D301083F +:107140001C030024180300240024744A20BCBE4BF6 +:1071500040787D0100093D002DE9F041A4B02022D6 +:1071600005460C4609A8002103F0FEFA4C22002136 +:1071700011A803F0F9FA5C4B9B6A03F00303022B9E +:107180003AD0594B022601274FF00008D3F8E020EF +:1071900004A9564842F08002C3F8E020D3F8E0305A +:1071A000069703F08003CDF81C800093009BCDE987 +:1071B0000467F9F709FA0A20F8F762FE3A46314601 +:1071C0004A48F9F7E7FA3046FAF7E4FF484BFCB9CA +:1071D0000294DA6A22F00102DA62DB6A03F0010348 +:1071E0000293444B9A6942F440429A619B6903F4CA +:1071F00040430293029B21E0012109A8CDE9091136 +:10720000FBF7C6FD0028BCD0002024B0BDE8F0810B +:10721000CDF80480DA6A22F00102DA62DB6A354ACC +:1072200003F001030193936923F4404343F4804343 +:107230009361936903F440430193019B2D4A936941 +:107240009804FCD52123002D4FF005024FF00805CE +:10725000119314BF4FF4A0234FF48033002C1C92E1 +:1072600011A812934FF001030CBFA02228221793FC +:1072700002231D9200221E93209323922292219595 +:10728000CDE91A330A231F93FBF74AFA0146002877 +:10729000BAD13F220323CDE9092340234FF4806272 +:1072A000CDE90B05CDE90E320D931093CCB109A8B1 +:1072B000FBF76EFD0028A7D10B4B1A6842F0800245 +:1072C0001A60D3F8F42042F00202C3F8F420D3F895 +:1072D000F43003F002030393039BF8F7FBFD012056 +:1072E00093E70421E3E700BF00440258001C025862 +:1072F0000004005800480258012108B50846FFF76D +:107300002BFF10B90148EFF7E9FB08BD34D801089D +:10731000F9F746BADFF830D0FFF708FE002103E0A6 +:107320000A4B5B584350043109480A4B42189A42B1 +:10733000F6D3094A02E0002342F8043B074B9A4285 +:10734000F9D3E8F7C9FF70470000082414F00108DA +:10735000000000241804002420040024483F0024D6 +:10736000FEE70000074B084AD3F888109142FBD192 +:10737000064A4FF48E01002051614FF440729A602A +:10738000704700BF006402580003008000200052D4 +:1073900000207047F0B5424D0C46002387B0298885 +:1073A00000934FF6FD734A1E92B29A4297BF3D4B2F +:1073B0004FF0026303EA812303F10063A34204D880 +:1073C0004FF0FF34204607B0F0BDB4F1006FF7D3A3 +:1073D000354F364BD7F888209A42FBD1F8F7FEFE9E +:1073E000064618B14FF44073BB60E9E7EFF7E0FAE7 +:1073F0002988202301A84A1E019605934FF6FD73A4 +:1074000092B29A4296BF2A4B4FF0016303EA41239E +:10741000694698BF03F100639C4234BF04F178438E +:10742000E31AB4F1016F4FEA534303934FF00103A2 +:10743000049328BF02230293F9F730F8029B003827 +:10744000039A18BF0120012B0CBF4FF000634FF0CF +:107450000163444203EB4243BFF34F8F154A03F5E8 +:107460000031C2F8703220338B42FAD1BFF34F8F14 +:10747000BFF36F8FBFF34F8FBFF36F8F0023C2F83F +:107480005032BFF34F8FBFF36F8FEFF79BFAF8F7D0 +:10749000CBFE002894D1044B4FF440729A6091E7E0 +:1074A00080E8F11F00FC3F000064025800030080E8 +:1074B00000FE1F0000ED00E02DE9F8431F46344BAD +:1074C00090460C461A884FF6FD71531E9BB28B42B4 +:1074D00097BF30494FF0026101EA822101F100615A +:1074E000A14204D84FF0FF352846BDE8F883B4F137 +:1074F000006FF7D3284D294BD5F888209A42FBD14D +:10750000F8F76CFE00283DD04FF44073AB60E9E71C +:10751000424631460120F8F705FF80BB203608F1CE +:107520002008B14503D9002DF2D04FF0FF35002FD0 +:1075300010DD04F01F02D319BFF34F8F1849234405 +:10754000C1F8704220341A1B002AF9DCBFF34F8FB8 +:10755000BFF36F8FBFF34F8FBFF36F8F104B0022BE +:10756000C3F85022BFF34F8FBFF36F8FF8F75CFE65 +:107570000028B7D1084B4FF440729A60B4E74FF03F +:10758000FF35CEE72646054607EB0409C9E700BFED +:1075900080E8F11F00FC3F000064025800030080F7 +:1075A00000ED00E00D4B18884FF6FD73421E92B2BD +:1075B0009A4297BF0A4B4FF0026303EA802303F11C +:1075C00000638B4207D9B1F1006F34BF4FF0FF3039 +:1075D0004FF4003070474FF0FF30704780E8F11FE4 +:1075E00000FC3F00202070474FF000607047000013 +:1075F000064B4FF6FD711A88531E9BB28B429ABF01 +:10760000034800EA82204FF40010704780E8F11F21 +:1076100000FC3F00FF2070471FB5204B20F40062A4 +:107620009A421F4B02D01F4A90421CD15B6D03F45B +:107630004053B3F5005F2FD006D853B1B3F5805F48 +:107640000CD01948EFF74AFAB3F5405FF9D1174863 +:1076500001E0FBF7E5FC05B05DF804FB01A8FCF7D1 +:1076600027FC0398F7E7124A904213D19B6D03F46D +:107670004073B3F5007F0FD005D843B1B3F5807FD9 +:10768000ECD00C48DEE7B3F5407FE0D0F9E7FCF73B +:1076900055FBE0E70848D5E70848DCE70054004020 +:1076A000004402580058004048D8010800093D0035 +:1076B000001C005865D8010880D801080090D0034C +:1076C000F8B546689023174C054603FB06439A68B5 +:1076D000B2F5805F15D11A69B2B940F2FF12A3F872 +:1076E0006020902202FB0642B2F86070284601F04A +:1076F00045FE0028FAD090237343E358586A384077 +:10770000F8BD1AB91A6932B9FF22E8E7B2F1805F11 +:1077100005D11A690AB97F22E1E73F22DFE700229B +:10772000DDE700BF5438002470B505460C464668B6 +:10773000284601F033FE0028FAD09023034AC4F310 +:1077400008047343D3589C6270BD00BF54380024B2 +:1077500000B5564B8DB00A2800F2A480DFE800F097 +:1077600006162432404E5C6A78869400D3F8E020F6 +:107770004F4842F00102C3F8E020D3F8E03003F0B4 +:1077800001030193019B0DB05DF804FBD3F8E020E9 +:10779000484842F00202C3F8E020D3F8E03003F09A +:1077A00002030293029BEEE7D3F8E020424842F046 +:1077B0000402C3F8E020D3F8E03003F0040303939D +:1077C000039BE0E7D3F8E0203C4842F00802C3F80E +:1077D000E020D3F8E03003F008030493049BD2E7E1 +:1077E000D3F8E020364842F01002C3F8E020D3F886 +:1077F000E03003F010030593059BC4E7D3F8E020C5 +:10780000304842F02002C3F8E020D3F8E03003F023 +:1078100020030693069BB6E7D3F8E0202A4842F0FF +:107820004002C3F8E020D3F8E03003F040030793B0 +:10783000079BA8E7D3F8E020244842F08002C3F871 +:10784000E020D3F8E03003F080030893089B9AE728 +:10785000D3F8E0201E4842F48072C3F8E020D3F849 +:10786000E03003F480730993099B8CE7D3F8E020A0 +:10787000184842F40072C3F8E020D3F8E03003F473 +:1078800000730A930A9B7EE7D3F8E020124842F483 +:107890008062C3F8E020D3F8E03003F480630B93F8 +:1078A0000B9B70E70D48EFF719F900BF0044025831 +:1078B000000002580004025800080258000C025848 +:1078C000001002580014025800180258001C0258F8 +:1078D00000200258002402580028025896D80108B7 +:1078E00010B504464FF4707101F03AF8012004F02D +:1078F0000F04A04010BD00004B1C70B504460E469E +:10790000018216D0C1F30310FFF722FF054630466F +:10791000FFF7E6FF238A074A03F00F036561206043 +:1079200052F82330A36105F1100318356360C4E9F0 +:10793000025570BDC4D90108B0F9100001F0A0B81B +:1079400010B50C4B0C4CD4F894209A42FBD1D0E9E2 +:107950000542524302EB4203DB4339B9226813402C +:1079600023604FF44072044B5A6110BD21680B40F4 +:107970001343F5E7000300800064025808B502F0E5 +:1079800037F8002008BD000010B5EFF711F8134BD1 +:107990001348144A596A1468038811601B1B0B446E +:1079A0000146B3F5803F16D34FF47A71B3FBF1F281 +:1079B00001FB1233038006E00132A3F57A73B3F5BD +:1079C0007A7FF9D20B80084C23681A442260EEF7C4 +:1079D000F9FF206810BD0022F1E700BF000C004055 +:1079E000801700248417002488170024054B07B54E +:1079F000D8680190F9F7D0F8019803B05DF804EB6E +:107A0000F9F7BDBD90210024054B07B5986801909A +:107A1000F9F7C2F8019803B05DF804EBF9F7AFBDD0 +:107A200090210024054B07B558680190F9F7B4F888 +:107A3000019803B05DF804EBF9F7A1BD9021002493 +:107A4000054B07B518680190F9F7A6F8019803B03F +:107A50005DF804EBF9F793BD9021002470B5B0F9FF +:107A60005C30254C03F11006B0F95E20A56845F89E +:107A70002610BFF34F8FA56802F1100645F82610B7 +:107A8000BFF34F8F90F87010002914BF10212021F0 +:107A9000002B19DB03F1604000F5614080F8001312 +:107AA000002A17DB02F16040002B00F5614080F8EE +:107AB000001315DA0123510902F01F0203FA02F242 +:107AC0000E4B43F8212070BD03F00F00043804442E +:107AD0002176E5E702F00F040948002B0155F2DB9F +:107AE000580903F01F0101238B40044941F820305D +:107AF000002ADFDAE7E700BF00ED00E000E100E088 +:107B000014ED00E010B5B0F95E40B0F95C00F8F794 +:107B10008DFA2046BDE81040F8F788BA90F850304A +:107B2000011D032B0ED8DFE803F00207090B0648FE +:107B3000064A42F8231070470548F9E70548F7E779 +:107B40000548F5E70020F3E7417A01089021002479 +:107B5000257A0108097A0108ED7901082C4A416D5E +:107B600012680368B2FBF1F1142243604A43996939 +:107B7000090401D5013AFAD12648274AD0F88C10D9 +:107B80009142FBD1254A934211D1254BD3F8902045 +:107B900042F40012C3F89020D3F8902022F400128F +:107BA000C3F890201B4B4FF44072DA6070471D4AB7 +:107BB000934214D002F5806293421CD01A4A934239 +:107BC000F0D1174BD3F89C2042F08002C3F89C20E0 +:107BD000D3F89C2022F08002C3F89C20E2E7104BEF +:107BE000D3F8902042F48002C3F89020D3F890207C +:107BF00022F48002D4E70A4BD3F8902042F400022A +:107C0000C3F89020D3F8902022F40002C8E700BF08 +:107C10001803002400640258000300800054004050 +:107C20000044025800580040001C0058D0F884302E +:107C300007B50146ABB1D0F8943093B190F87C20F1 +:107C40009BB2002A14BF4FF000720022C26500925E +:107C5000D0F89020B0F87810F8F7D8FE03B05DF8AF +:107C600004FB082381F86030F8E7082380F86030CF +:107C7000704738B5051D0446C2602846F8F723FE54 +:107C80002046FFF74BFF01462046FFF7E7FE284658 +:107C9000BDE83840F8F76CBF012902D180F86D10BB +:107CA000704711B9012380F86E307047002380F8C7 +:107CB0006D30704710B490F86C200346022A19D139 +:107CC000B0F87620013292B2A0F87620B0F87610A3 +:107CD000B0F8742089B292B291420BD2B0F87640DB +:107CE0004FF08073016F012211FA84F15DF8044BAB +:107CF000F8F7DEBE002283F86E205DF8044B704773 +:107D000090F86C30022B02D1002380F86E30F8F727 +:107D10002FBF10B5044650F80429136823F0FE0362 +:107D20001360FFF7EFFE022384F8603010BD0000FF +:107D30002DE9F04F444C8DB0444A4FF0000C04EB59 +:107D40005003434D4FF0FF3BB3FBF0F02C2359435E +:107D50005318525804EB5201B1FBF2FA59689A6A6F +:107D6000CDF804A04243B4FBF1F107919968B4FB4C +:107D7000F1F1089137490968059102EB4001C2F120 +:107D8000FF22323102F57F020291CE320B92059A28 +:107D9000624503D158460DB0BDE8F08F99694FF0A8 +:107DA000000E2A68049102FB0002029911440E465B +:107DB00003910299AAEB0101891A0A910499CDF85D +:107DC00024E00EF1010EB14235D20B993144B0EBF3 +:107DD000910F30D20A9F4FF00008D3E908410C44BC +:107DE000A1190091009C0399A7EB04092144089F65 +:107DF000CDF8188008F101088F4216D8079F8F42EE +:107E000013D3009C0F1BDC69BC420ED8B8420CD2C5 +:107E1000B1EB0A07019C48BF4F46A74205D2099C17 +:107E2000E34601972C61069CEC60B8F5807F114415 +:107E3000A9EB0209DBD1BEF5807F1644BED10CF15F +:107E4000010C1435A3E700BF00CA9A3BE0D8010833 +:107E50008C1700248C210024304B2C2203EB500380 +:107E6000B3FBF0F02E4B02FB01312DE9F04F4A6AD3 +:107E700085B08B6A4FF01008CC684FF0140A0E6A78 +:107E8000033314440A694343DFF89C90323C921B4D +:107E9000E41AA2F582720344D31A4A690146B21861 +:107EA00023EAE37B1F4B029224EAE47201921A68F0 +:107EB00000239E468C460025029C039501356445AF +:107EC0001ED800242746019EA64215D8A34513D3E9 +:107ED000984511D00AFB02F80132039E09EB080E07 +:107EE0007F2A49F80830CEE9016702D90D4B1A60A4 +:107EF00010E098464FF0010E01370C44102FE2D1EC +:107F0000102D8C44D8D101330144102BD2D1BEF1B5 +:107F1000000FEBD105B0BDE8F08F00BF00CA9A3B5F +:107F2000E0D801088C2100248C17002413B5214BC4 +:107F300000241C6010B9002002B010BD0029FAD046 +:107F4000A1F59C3349F64042803B93420ED9A1F5FE +:107F50009C23194AA3F50073934228D9A1F5432124 +:107F6000164BA1F5A0619942E5D802242146019063 +:107F7000FFF772FF21460198FFF7DAFE7F28DAD873 +:107F800014230F4958430A180B58107C40EA037019 +:107F900053681B0503F47003184393681B0403F430 +:107FA00070231843D3681B029BB21843C4E7012413 +:107FB000DCE700BF8C21002400710200801A06005B +:107FC0008C17002470B50C4616461D46FFF724FB9F +:107FD0000CB1AE420DD00C4B98420CD10B4B9D42D4 +:107FE0000ED00B4B9D420DD00A490B4C8D4218BF51 +:107FF0000024204670BD2946BDE87040FFF796BFBB +:10800000064CF6E7064CF4E7000E2707801A060038 +:1080100040420F00A08601007656E1403414C12092 +:108020003615C300364B426D1B68B3FBF2F21423C6 +:1080300070B5534304460D46061D42689169090414 +:1080400001D5013BFAD12F4B9D421BD122682E4B0B +:108050009A4202D10120F9F7F3FA22682B4B9A4297 +:1080600002D10220F9F7ECFA2268294B9A4202D198 +:108070000420F9F7E5FA2268264B9A4202D108203B +:10808000F9F7DEFA2449254BD1F88C209A42FBD12E +:1080900023681D4A934205D1214A536D23F440536E +:1080A000536509E0194A9342F6D002F58062934283 +:1080B000F2D0184A93421DD0174B4FF44072002162 +:1080C0003046DA60F9F796FA2B46E26EA16820682E +:1080D000FFF778FF00230122A060E5663046E360E9 +:1080E000C4E90423C4E90833C4E90633F8F7EBFB19 +:1080F000656570BD0A4A936D23F440739365DBE7B1 +:108100001803002440420F00005400400058004073 +:10811000005C0040001C005800640258000300800E +:10812000004402581FB500230446C366836039B17A +:108130008B88A0F858308B89A0F85A300B68036000 +:108140002368434A934212D1002384F85030414BB4 +:10815000D3F8E82042F40012C3F8E820D3F8E8305E +:1081600003F400130093009B3B4BE36509E03B4A9B +:10817000934236D002F58062934244D0384A93420B +:1081800053D03849B4F95800EDF7E4FC3649B4F956 +:108190005A00EDF7DFFC0421B4F9580000F070FC40 +:1081A0000421B4F95A0000F06BFC636D0BB92F4B3E +:1081B00063652046FFF7D2FC616D2046FFF732FF72 +:1081C000636D4FF00072E3660023226684F871301D +:1081D00084F8703084F8723084F86430A36604B098 +:1081E00010BD012384F850301A4BD3F8E82042F434 +:1081F0008002C3F8E820D3F8E83003F48003019349 +:10820000019B1B4BB1E7022384F85030114BD3F88C +:10821000E82042F40002C3F8E820D3F8E83003F481 +:1082200000030293029B134B9FE7032384F8503013 +:10823000084BD3F8F42042F08002C3F8F420D3F8BE +:10824000F43003F080030393039B0B4B8DE700BFD7 +:1082500000540040004402581F0020000058004015 +:10826000001C0058E4D3010848D30108A08601008F +:1082700021002200480049005F0060002DE9F0471E +:108280000D46DFF864A086B0144606465146DFF876 +:108290005C902846EDF7A2FC074649462046EDF7DC +:1082A0009DFC01463846EDF777FC5146804628464E +:1082B000EDF7A8FC494607462046EDF7A3FCA422AB +:1082C000059000213046CDF80480ADF808500397A2 +:1082D000ADF8104002F048FA01A93046FFF722FF3E +:1082E00006B0BDE8F08700BFE4D3010848D3010819 +:1082F000F0B51D46036E85B0044633F000730E469C +:1083000000F1040703921CD10A99002918BF4FF00D +:1083100000730366002380F86430FFF7FFFB01461B +:108320002046FFF79BFB236E039AB1B200933846B9 +:10833000ABB2F8F719FB38B16FF00105284605B06C +:10834000F0BD1248EEF7CAFB114B1E68636DB6FB19 +:10835000F3F605FB06631E265E4394F8643013F0C3 +:108360001E0F01D1013E0CD12046FFF7CBFB1EB101 +:1083700094F86430082BE1D000212046FFF7D2FEAC +:10838000DAE70120EFF7A6F9E7E700BFB7D8010861 +:108390001803002473B50546043895F86C6006B1DF +:1083A000AE686C6C0021019014F0040418BF142412 +:1083B000FFF7B8FE01983EB10223324685F86C30D3 +:1083C00000231946FFF755FC44F00204E4B285F897 +:1083D000604002B070BD0000044B054A1878054BA0 +:1083E000002814BF10461846704700BF2003002421 +:1083F000B4D90108BCD90108024BD869DA698242B4 +:10840000FBD17047002C005808B5EEF7D1FA084BA5 +:1084100001221A700022074B1A704FF48052064B4B +:10842000C3F810211A61BDE80840EEF7CBBA00BFCF +:10843000A9210024B021002400E100E010B5EEF7EE +:10844000B7FA134B1A7842B9124A12681168090731 +:10845000FCD50821516001221A700F4C23781BB102 +:10846000EEF71EFD0023237000230C4A13700C4A04 +:1084700013704FF480520B4BC3F89020BFF34F8F13 +:10848000BFF36F8FBDE81040C3F89021EEF79ABAA2 +:10849000AA210024843E0024B2210024B02100241B +:1084A000A921002400E100E05D4B70B51C68C4B058 +:1084B0001CB1FFF7C3FF44B070BD0125C0222146A7 +:1084C00014A8584E1D6002F04FF94C22214601A815 +:1084D00002F04AF9337833B304230A940193052355 +:1084E0000393802314934FF4C0433C934E494F4B66 +:1084F000D1F88C209A42FBD101A8FAF711F9D8B132 +:108500000023082201A833700A93802301920122DC +:1085100014934FF4004306923C93FAF701F958B1D3 +:108520004348EEF7DBFA08220A938023069501926E +:1085300014934FF40043D8E714A8FAF72BFF05462D +:1085400008B13C48EDE73C4B4FF4803134203B4CC4 +:10855000D3F8F4204FF6FF7642F40062C3F8F4201B +:10856000D3F8F42002F400620092009AD3F89C2021 +:1085700042F40062C3F89C20D3F89C2022F40062ED +:10858000C3F89C20D3F8A82042F40062C3F8A820C6 +:108590000122F7F7A7FC2A464FF480313420F7F781 +:1085A000CAFC214B4FF440722046DA60A3F50E332B +:1085B00084F8365023604FF48023E5612563C4E9D5 +:1085C0000155C4E90355C4E90855C4E90A55C4E98D +:1085D0000563F9F767F8054608B11948A1E7194B93 +:1085E000194A9B68C3F87022BFF34F8F2368314646 +:1085F00020469A6842F001029A609A6842F00802A6 +:108600009A60F9F7B5F8236808225A605D611A6824 +:108610001207FCD508225A6001220C4B1A704AE757 +:10862000A4210024200300240064025800030080D9 +:1086300064D901087DD9010800440258843E002411 +:108640009ED9010800ED00E041870108AA2100241D +:1086500008B5EEF7ADF9064B01221B685A604FF4DE +:108660008052044BC3F89021BDE80840EEF7AAB948 +:10867000843E002400E100E070B50446EEF798F96E +:10868000FFF7BAFE264B05461C60264A4FF4805180 +:108690001161254E18463178F1B9611F4FF6F57218 +:1086A000914222490FD94FF6FA7295420BD90634FE +:1086B0000122A4B20A701C601D4B01221A70BDE891 +:1086C0007040EEF77FB900220A700368AB42194B85 +:1086D00028BF01221A70EFE7FFF7BAFF00235A19EB +:1086E000013392B2A24204BF0534A4B2052BF6D1E5 +:1086F000114BAC421B6811D24FF6FA7295420DD85D +:108700004FF0FF325A6100230C4C33702378002B5A +:10871000D5D1EEF7B1FB01232370D0E75C61F2E71E +:10872000AC21002400E100E0AA210024B1210024B2 +:10873000B0210024A8210024843E0024B22100247A +:1087400070B5EEF735F92C4B2C4C1A7832B100226B +:108750001A70012223685A60EDF7F2F923681A684B +:10876000D50706D59A68D00703D501225A60EDF7E0 +:10877000E7F923681A68110724D59A68120721D5EA +:1087800008221F4C5A6001221E4B1A7023781BB11D +:10879000EEF786FB002323701B4C237893B11B4D0F +:1087A0001B492B7803F0FF06B3B1FFF725FE063017 +:1087B0000B6880B2984209D3FFF726FE00232B7086 +:1087C00000232370BDE87040EEF7FCB80868063857 +:1087D00080B2FFF751FFF1E70E4D2B7843B1FFF761 +:1087E0000BFE0B68984203D3FFF70EFE2E70E7E7EF +:1087F0000868FFF741FFE3E7A9210024843E002435 +:10880000B2210024AA210024B0210024B121002497 +:10881000AC210024A8210024FFF710BE70470000FF +:10882000384B5A6973B5910315D45A6912F4003262 +:1088300011D1BFF34F8FBFF36F8FC3F85022BFF337 +:108840004F8FBFF36F8F5A6942F400325A61BFF302 +:108850004F8FBFF36F8F2B4B5A69D20327D45A69BE +:1088600012F4803223D1C3F88420BFF34F8FD3F8A2 +:10887000802043F6E074C2F3C900C2F34E325201C5 +:1088800002EA0406014646EA81750139C3F86052DE +:10889000F9D2203A12F1200FF2D1BFF34F8F5A696B +:1088A00042F480325A61BFF34F8FBFF36F8F164C83 +:1088B000D4F8E03043F00073C4F8E030D4F8E0308E +:1088C00003F000730193019BFEF7A0FBF7F7AAFAF0 +:1088D000236F9B0707D4F9F747FCF7F7E3FA236FF9 +:1088E00023F0180323670220F9F754FCFEF704FD78 +:1088F000FEF78CFBFFF792FF044B01221A6002B0D7 +:1089000070BD00BF00ED00E000440258B421002417 +:1089100030B5114B114DD5F894409C42FBD14943E1 +:10892000012A01EB41034FEA41046FEA030304D03B +:10893000022A0BD0C1680B400BE0C26813401943F8 +:10894000C160064B4FF440725A6130BDC1680B40A4 +:108950002343C360F5E700BF0003008000640258B2 +:108960002DE9F843431C0C4672D000F00F02414B36 +:108970001FFA80F9C0F3031001F00705C1F3831853 +:1089800053F82260FEF7E4FE3B493C4BD1F89420BB +:108990009A42FBD106FB06F2B8F10F0F02EB42033D +:1089A0006FEA030726D181680B4383604FF440715F +:1089B000314B022D596124D101F10041D3F894C00B +:1089C0008C45FBD119F0080FC4F3832842D0330A39 +:1089D000416A5B435B43C3EB031E03FB08F321EADD +:1089E0000E0E4EEA030343624FF44071224B59616D +:1089F00002210EE0836808FB02F83B4043EA0803CB +:108A0000D3E7032D33D005F1FF3CDCF1000141EB4E +:108A10000C01DFF864E0194BDEF894C09C45FBD1F3 +:108A200003684A43013D3B40012D42EA03020260D4 +:108A300005D8436822074CBF3343B3434360C4F3B4 +:108A400001123146FFF764FF0B4B4FF440725A613D +:108A5000BDE8F88302FB02FC016ACCEB0C130CFBB3 +:108A600008FC21EA030141EA0C010162BCE7294646 +:108A7000CFE700BFC4D9010800640258000300809A +:108A800038B5431C0C4629D000F00F021D4BC0F333 +:108A9000031053F82250FEF75BFE1B491B4BD1F825 +:108AA00094209A42FBD105FB05F2016802EB4203D8 +:108AB0000B40B3FBF2F3013B012B19D8E31E022B51 +:108AC00043680CD82B43032C436019D1012229465B +:108AD000FFF71EFF0C4B4FF440725A6138BD23EA7A +:108AE0000503012C4360F1D0022C07D00022EEE7F1 +:108AF00004F0FD03012BE9D0052CF5D10222E6E7B5 +:108B0000052CF2E7C4D90108006402580003008074 +:108B1000F8B5037890F801C0012B057F0279077B37 +:108B2000866844792ED0022B2FD0002B30D14FF401 +:108B300080738B610023C1F800C04D614B63C1E9B4 +:108B40000B333FB3CB61CB60037C012B45D0022BB1 +:108B500048D0002B4BD14FF480430B620123027E9F +:108B6000002A47D000230B620B61437F012B6AD0A0 +:108B7000022B6BD0002B6CD14FF0807300204B6226 +:108B80008862F8BD4FF40073D3E74FF44073D0E729 +:108B90000023CEE7012A4E600BD0022A0CD072B916 +:108BA0004FF48063CB61032C09D8DFE804F00B0D90 +:108BB00010134FF40063F5E74FF44063F2E72748E2 +:108BC000EDF78CFF0023BEE74FF48053BBE74FF473 +:108BD0000053B8E74FF44053B5E74FF400430B623E +:108BE0000223BCE74FF440430B620423B7E70023A2 +:108BF0000B62B4E77BB3427CB2FBF3F403FB1424B7 +:108C000014F0FF0F27D1561EF610741C042C22DC22 +:108C1000C2EBC40212F0FF0210D0B2FBF3F39D428C +:108C200019D3EB1A4B61436903FA02F28A60032EEF +:108C300007D82404A4F580340C6196E743698B605F +:108C4000F5E70748BCE74FF0007397E74FF0407334 +:108C500094E7002392E74FF0FF3092E704DA01082F +:108C60002DDA010810B50446F9F74DFC00283DD176 +:108C70002049214BD1F88C209A42FBD11F4BB4F9EB +:108C80005000DA6F42F48042DA67DA6F22F48042F1 +:108C9000DA674FF44072CA6040F2C331D3F8D4208F +:108CA00022F48042C3F8D420FFF75AFE40F2C331C9 +:108CB000B4F95200FFF754FE40F2C331B4F9540046 +:108CC000FFF74EFE40F2C331B4F95600FFF748FEFD +:108CD00040F2C331B4F95800FFF742FEB4F95A002C +:108CE00040F2C331FFF73CFE002010BD4FF0FF30D3 +:108CF000FBE700BF006402580003008000440258F4 +:108D000070B50D460646FAF769F9B0FBF5F4FF2C8D +:108D100010DCFAF763F9B0FBF5F101FB150505B9B5 +:108D2000013C30467460F9F79FFB003818BF012002 +:108D3000404270BDFF24F4E72DE9F04F2DED068B86 +:108D400087B01D460F461646199B04467D49384696 +:108D50000AEE903A9DF86830BDF958A00293BDF92B +:108D60005CB0BDF96080ECF739FF7749039030467D +:108D7000ECF734FF754901902846ECF72FFF744952 +:108D800008EE100A5046ECF729FF724908EE900AE7 +:108D90005846ECF723FF704909EE100A4046ECF7FD +:108DA0001DFF019A039B814611461846ECF7F4FE1D +:108DB00018EE901A019018EE100AECF7EDFE4946F5 +:108DC000039019EE100AECF7E7FE019B1A46039B8D +:108DD0009A4240F0B080824240F0AD805949384616 +:108DE000ECF710FF584903903046ECF70BFF57495A +:108DF00008EE100A2846ECF705FF554908EE900AE0 +:108E00005046ECF7FFFE534909EE100A5846ECF7BE +:108E1000F9FE514909EE900A4046ECF7F3FE4F4A3D +:108E20000AEE100A039BD2F8D4104D4841F4804159 +:108E3000C2F8D410D2F8D41001F4804105910599FC +:108E40004849D0F88CC08C45FBD1D16F4FF0000958 +:108E500041F48041D167D16F21F48041D1674FF453 +:108E600040720121C26000223846A4F8507084F894 +:108E70004120E26084F840204FF0004292FAA2F2D2 +:108E8000B2FA82F2013A22614FF480626261029A80 +:108E9000B2EB090218BF0122A261019AC4E90111D3 +:108EA00022601946C4E90799FFF75AFD494638463A +:108EB000FFF7E6FD18EE101A3046A4F85260FFF7EF +:108EC0004FFD49463046FFF7DBFD18EE901A284665 +:108ED000A4F85450FFF744FD49462846FFF7D0FD5B +:108EE00019EE101A5046A4F856A0FFF739FD49466E +:108EF0005046FFF7C5FD19EE901A5846A4F858B031 +:108F0000FFF72EFD49465846FFF7BAFD1AEE101A34 +:108F10004046A4F85A80FFF723FD49464046FFF734 +:108F2000AFFD1AEE901A204607B0BDEC068BBDE8E7 +:108F3000F04FFFF7E5BE6FF0010007B0BDEC068B08 +:108F4000BDE8F08F80D40108B0D40108E0D4010856 +:108F500004D5010834D5010858D501080044025849 +:108F6000006402580003008070B58EB004460846C5 +:108F7000154669461E46FFF7CBFD90B9336841F2AE +:108F80008832694620460A93F9F7CEFA58B941F279 +:108F9000883229462046F9F70AFB003818BF01201D +:108FA00040420EB070BD4FF0FF30FAE770B58EB0A2 +:108FB00004460846154669461E46FFF7A9FD90B9C6 +:108FC000336841F28832694620460A93F9F7ACFAD1 +:108FD00058B941F2883229462046F9F741FB00385A +:108FE00018BF012040420EB070BD4FF0FF30FAE7CD +:108FF0002DE9F0418EB005460E46DDE9147802B148 +:10900000E3B917B1B8F1000F16D169463046FFF742 +:109010007FFD044660B9012341F288326946CDE9FB +:1090200009032846F9F780FA002818BF4FF0FF34EB +:1090300020460EB0BDE8F08172B16BB100933146AD +:109040006B462846FFF790FF04460028F0D1002F1A +:10905000EED0B8F1000FEBD06B463A4631462846C9 +:10906000CDF80080FFF7A2FF0446E1E7164BD3F8E6 +:10907000D020510020D4D3F8D020002A1CDBD3F814 +:10908000D020D2001AD4D3F8D020500116D4D3F86F +:10909000D00010F0807013D1D3F8D020110212D478 +:1090A000D3F8D02092020DD4D3F8D03013F4800F2F +:1090B0000CBF0B200120704706207047042070472A +:1090C000032070470220704700440258014BD3F838 +:1090D000D000704700440258034AD2F8D03043F41D +:1090E0008033C2F8D03070470044025801207047E6 +:1090F00010B5C4B04C22002101A801F035FBC022FC +:10910000002114A801F030FB3C4B1A68002A72D1F0 +:1091100001221A60F9F728F839493A4BD1F88C2026 +:109120009A42FBD1FFF7E2FF08B3042301A80193A1 +:1091300000230A9305230393F9F7F2FA10B132489A +:10914000EDF7CCFC314B14A81A6922F47C521A6159 +:109150001A6F42F480721A674FF4800314934FF42D +:1091600080734193FAF716F908B32948E8E7082312 +:109170000A9001A8019301230693F9F7D1FA08B1E7 +:109180002448DDE7214B14A81A6922F47C521A61A5 +:109190001A6F42F400721A674FF4800314934FF46D +:1091A00000734193FAF7F6F808B11B48C8E7144B6F +:1091B0004FF44072194C7F21DA60144A2046136F35 +:1091C00043F400431367FF22154B23600023C4E9D7 +:1091D000021284F82130636023616361C4E90633BD +:1091E000FBF760F908B10F48AAE72046FBF772FACF +:1091F00008B10D48A4E744B010BD00BFB821002459 +:10920000006402580003008044DA01080044025858 +:1092100064DA01088DDA0108ADDA0108BC21002406 +:1092200000400058D6DA0108F1DA0108214B224942 +:10923000224AF0B51C688DB05D681E460C400F4692 +:10924000154018680840A0422CD158681040A84228 +:1092500028D105F03F00FBF72AFA0690C5F3042059 +:10926000FBF725FA01380790280CFBF720FA443069 +:109270000890C4F30540FBF71AFA0590C4F30620E2 +:10928000FBF715FA049004F07F00FBF710FA0122B7 +:109290000390694603A8EDF75BFC40B1DDE90001EE +:1092A0000DB0F0BD346875683C401540C9E700203A +:1092B0000021F5E7004000587F7F7F003FFFFF005F +:1092C000F0B5002491B0142207460E4602A82146AC +:1092D000204D019401F048FAEDF76AFB1E4B07AAF6 +:1092E00038462B6031460123EDF786FC80B30D9B99 +:1092F000224601A92846A3428DF80B4008BF072348 +:109300008DF804300B9B01338DF805300A9B8DF8E6 +:1093100006300C9B443B8DF80730099B8DF80830D4 +:10932000089B8DF80930079BCDE905448DF80A307C +:10933000FBF76BF9024610B10848EDF7CFFB02A925 +:109340002846FBF700F908B10548F6E7EDF73AFBC8 +:1093500011B0F0BDBC210024004000580BDB010817 +:1093600022DB0108024BD868C0F30010704700BF31 +:1093700000400058C069C0F38010704742689023D5 +:109380005343054AD358DA69120701D508221A62F5 +:10939000D869C0F3401070475438002442689023C5 +:1093A0005343034AD358D869C0F3C010704700BF75 +:1093B0005438002438B54268902301685343204A4A +:1093C00099509C1882686260B2F5965FC36838BF96 +:1093D0000725A3600369E36043692361C369A3614F +:1093E0004FF0000328BF1D46A4F85630E361A4F8EF +:1093F0005430A4F85E30A4F85C3023626366C4E99C +:109400000953B0F91A3001330FD1082363610D4BB2 +:10941000994205D1B2F5165F20460DD8FCF7F2FC53 +:109420002046BDE83840FCF7BDBCB0F91830013328 +:109430000CBF04230C23E9E7FCF7F4FCF0E700BFC2 +:1094400054380024000C00580268294B9A4230B569 +:109450000446C5B0816046D10021BC2215A801F0A8 +:1094600083F904231493234B196811F0040116D1D6 +:10947000482202A801F078F902231F4D019301232D +:1094800004930A93402305931C4BD5F88C209A42F1 +:10949000FBD101A8F9F744F94FF44073EB60154B89 +:1094A0001B685B0711D50323134D3993134BD5F874 +:1094B0008C209A42FBD114A8F9F76CFF4FF440734B +:1094C0002046EB60FFF776FF80B100230A4D399309 +:1094D0000A4BD5F88C209A42FBD114A8F9F75AFF11 +:1094E0004FF44073EB602046FFF764FF45B030BD9A +:1094F000000C005800440258006402580003008029 +:109500001A4B984222D0A3F54C43984220D003F541 +:10951000806398421ED003F5806398421CD003F507 +:10952000806398421AD003F54443984218D0A3F5BB +:109530001C43984216D003F58063984214D00C4B1C +:10954000984214BF4FF0FF3008207047002070474A +:1095500001207047022070470320704704207047A5 +:109560000520704706207047072070470010014013 +:10957000000C00582DE9F0470F4616468AB07E4988 +:1095800004463846ECF72AFB80467C493046ECF727 +:1095900025FB01464046ECF7FFFA77490546384679 +:1095A000ECF730FB754982463046ECF72BFB8146E1 +:1095B00040F2091087420AD0B6F5857F07D06E4980 +:1095C000ECF70CFB404526D16D48EDF787FA4FF0DC +:1095D00001086C4B25609D4220D16B4BD3F8F020E5 +:1095E00042F01002C3F8F020D3F8F03003F010037B +:1095F0000193019B654B9D427DD1634BD3F8F020D5 +:1096000042F02002C3F8F020D3F8F03003F020033A +:109610000693069B1CE04FF00008DAE75C4B9D4286 +:109620004ED003F580639D4258D05A4B9D4273D073 +:10963000594B9D42DED1544BD3F8E82042F48012BE +:10964000C3F8E820D3F8E83003F480130593059BB2 +:109650002846FFF755FF514660603846FFF780F90E +:1096600001213846FFF70CFA49463046FFF778F9F2 +:1096700030460121FFF704FA00234FF4165220462A +:10968000E36127836683C4E90223C4E90433FFF757 +:1096900091FEB8F1000F10D0404B012204F12005DB +:1096A0001A603F4B2068083454F8041C1A46AC4238 +:1096B00003C21346F6D1206810600AB0BDE8F087F7 +:1096C000314BD3F8E82042F40032C3F8E820D3F855 +:1096D000E83003F400330293029B8BE72A4BD3F864 +:1096E000E82042F48022C3F8E820D3F8E83003F4FD +:1096F00080230393039B2B4B9D421AD1224BD3F81B +:10970000E82042F08042C3F8E820D3F8E83003F0C4 +:1097100080430793079B9BE71B4BD3F8E82042F459 +:109720000022C3F8E820D3F8E83003F400230493C0 +:10973000049B1D4B9D4210D01C4B9D4288D1124B67 +:10974000D3F8F42042F00802C3F8F420D3F8F43040 +:1097500003F008030993099B7AE70B4BD3F8E82041 +:1097600042F00042C3F8E820D3F8E83003F00043A9 +:109770000893089B6CE700BFE4D6010888D5010870 +:1097800039DB010800100140004402580014014078 +:1097900000440040004C004000500040E021002404 +:1097A000BC3E002400780040007C0040000C0058C3 +:1097B0002A4808B5036813F0010304D0FFF7DAFD67 +:1097C000B0FA80F35B0926480268D10704D5FFF799 +:1097D000D1FD002808BF012322480268D20704D522 +:1097E000FFF7C8FD002808BF01231F480268D10702 +:1097F00004D5FFF7BFFD002808BF01231B480268FE +:10980000D20704D5FFF7B6FD002808BF012318488A +:109810000268D10704D5FFF7ADFD002808BF01237A +:1098200014480268D20704D5FFF7A4FD002808BF3A +:10983000012311480268D10704D5FFF79BFD0028DA +:1098400008BF01230D480268D20704D5FFF792FD37 +:10985000002808BF0123184608BD00BF00100140C2 +:109860000044004000480040004C004000500040D0 +:109870000014014000780040007C0040000C0058BB +:1098800008B5EDF795F8064B0121186810F00100B6 +:1098900018BF0846F8F770FCBDE80840EDF792B82D +:1098A0000048025870B594B0FFF782FF04460028C4 +:1098B00075D1EDF77DF83B4D00F046F9012102220C +:1098C0002E680846F8F7A2FC012122460846F8F760 +:1098D0009DFCF60703D52B6843F001032B600023A2 +:1098E000314D32492B60324BD1F890209A42FBD156 +:1098F0002C4B1A6994063CD55B69980639D52B4EDA +:109900002B4BD6F88C209A42FBD14C22002101A887 +:1099100000F02AFF01A8F9F7A7FB0223012101A803 +:1099200001931023CDE9041300230A93F8F7F8FEFE +:10993000044610B11F48EDF7D1F8014620220090EF +:1099400001A800F011FF694601A8F9F709FC1B23E3 +:10995000009901A801930794029404940694F9F7DE +:1099600017FA08B11448E6E7FDF7C6FC4FF4407358 +:10997000F3600C4A136943F4007313614FF44072AF +:109980000A4B1A610D4B596A5A6A521AB2F5FA7F9C +:10999000FAD300F0F1F801232B60EDF713F814B0BF +:1099A00070BD00BF00480258B42100240064025872 +:1099B000000300806EDB010893DB0108000C00400F +:1099C000074B084A13601A69910707D5DA689207AE +:1099D00004D56FF002021A61ECF722BB704700BF9A +:1099E000000C0040E43E002400487047BCDB010846 +:1099F00030B58BB0694602A8F9F7B2FBF9F710FB56 +:109A0000274B0090D3F8E820264942F00802C3F81B +:109A1000E820D3F8E82002F008020192019A224AD5 +:109A2000D1F88C409442FBD1D3F890201F4C42F0E7 +:109A30000802C3F89020D3F8902022F00802C3F85F +:109A400090204FF44073CB60194B079A23604FF07E +:109A5000FF33E360174B0ABB0025B0FBF3F001387E +:109A60002561A56060601148C4E90555FBF730FE2B +:109A7000114B124A9B68C3F80821BFF34F8F104B5C +:109A80004FF480225A6009482946FBF75FFE22689E +:109A9000D36823F00203D3600BB030BD4000DBE796 +:109AA000004402580064025800030080E43E002491 +:109AB000000C004040420F0000ED00E0C199010899 +:109AC00000E100E0044800210268D36823F00203AB +:109AD000D360FBF73BBE00BFE43E0024014B586A55 +:109AE000704700BF000C0040054B6FF002021B687E +:109AF00058631A61DA6842F00202DA60704700BF08 +:109B0000E43E0024064B6FF002021B681A615A699A +:109B100042F002025A61DA6842F00202DA607047EB +:109B2000E43E0024034B1A68D36823F00203D36099 +:109B3000704700BFE43E0024024B6FF002021B6836 +:109B40001A617047E43E0024064B074A1B68596AB5 +:109B500011605A6B054B1A60054BDA68054B1A60A9 +:109B6000704700BFE43E0024343F0024E03E002460 +:109B7000000C0040303F0024064B074A1B68126867 +:109B80005A62064A12685A63054B1A68054BDA6036 +:109B9000704700BFE43E0024343F0024E03E002430 +:109BA000303F0024000C0040014B1868704700BF94 +:109BB000240300248A892DE9F041054610070C464C +:109BC00058D44B68002B05DC0B6C002B02DC00200A +:109BD000BDE8F081E66A002EF9D0002312F480522D +:109BE0002F682B6032D0606DA3895A0705D5636852 +:109BF000C01A636B0BB1236CC01A00230246E66ADD +:109C0000216A2846B047431CA38906D129681D292B +:109C10002CD82A4ACA40D60728D500226260D90427 +:109C20002269226004D5421C01D12B6803B960650A +:109C3000616B2F600029CAD004F14403994202D01D +:109C40002846ECF7C5FD00206063C1E7216A0123C7 +:109C50002846B047411CC7D12B68002BC4D01D2B10 +:109C600001D0162B01D12F60B1E7A38943F0400347 +:109C7000A381ADE70F69002FA9D093070E6808BF35 +:109C80004B690F6018BF0023A6EB07088B60B8F183 +:109C9000000F9CDD216AA66A43463A462846B04733 +:109CA000002806DCA38943F04003A3814FF0FF3076 +:109CB0008EE70744A8EB0008E9E700BF0100402059 +:109CC00038B50B6905460C4613B90025284638BD42 +:109CD00018B183690BB900F099F8144B9C421BD161 +:109CE0006C68B4F90C30002BEFD0626ED00704D44E +:109CF000990502D4A06D00F050FC28462146FFF7DC +:109D000059FF636EDA070546E0D4A3899B05DDD4CD +:109D1000A06D00F044FCD9E7054B9C4201D1AC6832 +:109D2000DFE7044B9C4208BFEC68DAE7E8DC010897 +:109D300008DD0108C8DC0108014620B9044B0549CB +:109D4000186800F0DCBA044B1868FFF7B9BF00BF11 +:109D500028DD0108C19C010824030024002310B55C +:109D60000446C0E90033C0E904338360818143665F +:109D7000C2818361194608225C3000F0F5FC054B76 +:109D80006362054BA362054BE362054B24622363C8 +:109D900010BD00BF79AE01089FAE0108D7AE010823 +:109DA000FBAE0108014900F0AABA00BFC19C01083E +:109DB00070B54A1E682555430E4605F17401ECF74F +:109DC00003FD044640B10021C0E900160C30A0603C +:109DD00005F1680200F0C8FC204670BD014800F0A3 +:109DE000DCBB00BF3F3F0024014800F0D8BB00BFF0 +:109DF0003F3F0024014800F0D0BB00BF3C3F00249F +:109E0000014800F0CCBB00BF3C3F002410B5044625 +:109E1000FFF7F0FFA3691BB1BDE81040FFF7F0BFEB +:109E2000C4E912332365134B134A1B68A262A34291 +:109E300004BF0123A361204600F020F860602046A3 +:109E400000F01CF8A060204600F018F80022E06046 +:109E500004216068FFF782FFA06801220921FFF753 +:109E60007DFFE06802221221FFF778FF0123A36142 +:109E7000D2E700BF28DD0108A59D0108F8B5074617 +:109E8000FFF7ACFF1E4B1E68B36913B93046FFF7EE +:109E9000BDFF4836D6E90134013B03D533680BB327 +:109EA0003668F7E7B4F90C50D5B9164BE36004F106 +:109EB0005800656600F06EFBFFF796FFC4E9015598 +:109EC000C4E904552560A5610822294604F15C0017 +:109ED00000F04AFCC4E90D55C4E912552046F8BD0E +:109EE0006834D9E704213846FFF762FF0446306042 +:109EF0000028D5D1FFF778FF0C233B60EEE700BFC9 +:109F000028DD01080100FFFFF7B50F46114601AA41 +:109F1000054601F0B9FC064618B90024204603B0F6 +:109F2000F0BD2846FFF7AAFF04460028F5D03946C1 +:109F3000019A4FF4DB73284600F03AFE071E09DA57 +:109F40000025FFF74BFFA06DA58100F024FBFFF774 +:109F50004BFFE2E7636EDB0705D4A389980502D4C3 +:109F6000A06D00F01AFB0E4B63620E4BA3620E4B0A +:109F7000E362F1050D4BE781A6812462236305D5D9 +:109F8000022300222146284600F0DCF8636EDA073F +:109F9000C4D4A3899B05C1D4A06D00F000FBBDE72C +:109FA00079AE01089FAE0108D7AE0108FBAE0108EB +:109FB000024B0A4601461868FFF7A6BF2403002497 +:109FC00070B50E461446054618B183690BB9FFF704 +:109FD0001DFF144B9C421AD16C68636ED80705D4E0 +:109FE000A389990502D4A06D00F0D7FA224628462D +:109FF000314600F0EFFD636EDA07054605D4A3890C +:10A000009B0502D4A06D00F0CAFA284670BD064B2D +:10A010009C4201D1AC68E0E7044B9C4208BFEC686D +:10A02000DBE700BFE8DC010808DD0108C8DC010847 +:10A03000024B0A4601461868FFF7C2BF24030024FA +:10A040002DE9F74F1F4613467B430C9C06468A4674 +:10A0500091469B465FD018B183690BB9FFF7D6FED6 +:10A060002E4B9C4228D17468636EDB0705D4A3890C +:10A070009D0502D4A06D00F090FA6368002B01DA10 +:10A0800000236360D846D4E9001545451ED34246F7 +:10A09000504600F05BFB60682168636EA0EB08002F +:10A0A0004144DA07606021602FD4A3899B052CD43A +:10A0B000A06D00F074FA28E0194B9C4201D1B468FD +:10A0C000D2E7184B9C4208BFF468CDE72A465046B9 +:10A0D00000F03CFB23682B4423602146A8EB0503DA +:10A0E0003046019300F0C8FDAA44019B88B1636E1D +:10A0F000D80705D4A389990502D4A06D00F04FFAC2 +:10A100005D44A5EB0803B3FBF9F7384603B0BDE89F +:10A11000F08F9846B7E71F46F7E700BFE8DC010875 +:10A1200008DD0108C8DC010807B5009313460A469C +:10A13000014603480068FFF783FF03B05DF804FBA6 +:10A140002403002400F00AB813460A4601460248D8 +:10A15000006800F003B800BF240300242DE9F0419B +:10A160000C4617461D46064618B183690BB9FFF722 +:10A170004DFE514B9C4222D17468636ED90705D4C1 +:10A18000A3899A0502D4A06D00F007FAA38903F40D +:10A190008473B3F5847F03D121463046FFF790FDE9 +:10A1A000D4F82C80B8F1000F13D11D233360636EF7 +:10A1B000D90778D54FF0FF352846BDE8F0813F4BF1 +:10A1C0009C4201D1B468D8E73D4B9C4208BFF4687B +:10A1D000D3E7012D36D035F0020362D123691BB9D4 +:10A1E0002146304600F000FA21463046FFF768FD70 +:10A1F0000028DCD1216A2B463A463046C047013060 +:10A20000D5D0616B41B104F14403994202D030468C +:10A21000ECF7DEFA0023636323692360A389002639 +:10A2200023F402636660A3810822314604F15C00D6 +:10A2300000F09AFA656E15F001053BD1A3899B05E4 +:10A24000BAD421E021463046FFF73AFDA28912F444 +:10A2500080520CD0656DA3895A0719D56368ED1A31 +:10A26000636B0BB1236CED1A2F440025B6E72B4628 +:10A27000216A3046C047431C0546ECD1636ED807BF +:10A2800098D4A389990595D4A06D00F088F993E737 +:10A290001807E9D523682269002BE5D09B1A1D44D5 +:10A2A000E2E7162382E7A3899A0583D4A06D00F024 +:10A2B00076F97FE735467FE7E8DC010808DD01082D +:10A2C000C8DC01082DE9F0410F4600F148040026E2 +:10A2D000D4E90185B8F1010805D52468002CF7D12F +:10A2E0003046BDE8F081AB89012B06D9B5F90E30B7 +:10A2F000013302D02846B84706436835EAE72DE91E +:10A30000F8430646884600F148040027D4E9019541 +:10A31000B9F1010905D52468002CF7D13846BDE80C +:10A32000F883AB89012B07D9B5F90E30013303D07F +:10A3300029463046C04707436835E9E770B50D4DFB +:10A340000D4C641BA4100026A64209D10B4D0C4CE9 +:10A3500001F0C6FF641BA4100026A64205D170BD03 +:10A3600055F8043B98470136EEE755F8043B98470B +:10A370000136F2E7F0030024F0030024F003002488 +:10A380000C04002438B5074B1D68EB6B04461BB961 +:10A39000242000F069F9E863E96B2046BDE8384005 +:10A3A00000F002B8240300242DE9F341074601918F +:10A3B00001F0F4FA01998046384601F0F3FA436956 +:10A3C0009A07044603F26C7605D1642296FBF2F3F9 +:10A3D00002FB13637BBB4FF4C87396FBF3F503FBDF +:10A3E0001565B5FA85F56D09684B302202FB053518 +:10A3F00000F0A0FF00F0AAFF654B1B6853B3D8F82C +:10A400000430B34219D1D8F80010D7E90067D8E971 +:10A410000823D1B9964277EB030323DAD8E9122354 +:10A42000964277EB0303B4BF0123002323621BDBB7 +:10A43000D8F828101AE00125D6E7304600F0D2FE01 +:10A440000028E0D14FF0FF3304E0964277EB03039E +:10A4500002DA00232362EBE7D8E91223964277EB76 +:10A460000303F6DA01232362D8F850104FF4616336 +:10A470003C2091FBF3F603FB1613616893FBF0F2AB +:10A4800000FB12302368891AA26861601B1A921BB4 +:10A490003B2B2360A26035DD013161603C3B2360D2 +:10A4A00063683B2B34DD0132A2603C3B6360A368F0 +:10A4B000172B33DDE2690132E261A2690132062A1B +:10A4C000C8BF0022A261E268183B0132A360236981 +:10A4D000E26055F823108A420EDD0B2BA2EB01023D +:10A4E000E26003F1010209BF6369226100220133C6 +:10A4F00002BF22616361E26100F022FF204602B0E8 +:10A50000BDE8F081002BCBDA013961603C33C6E74E +:10A51000002BCCDA013AA2603C33C7E7002BEBDA20 +:10A52000E269013AE261A269013A48BF0622A261EA +:10A53000E2681833013AE260A360002ADCD12369A3 +:10A54000013B05D42361236955F82330E360D3E749 +:10A550000B23236163695A1E626103F26B729307D6 +:10A5600005D1642192FBF1F301FB132363B94FF48E +:10A57000C87192FBF1F301FB1323B3FA83F35B0978 +:10A5800003F5B673E361DEE70123F9E72CDD01088B +:10A590000822002470477047704770477047704723 +:10A5A00070B50E46B1F90E10002996B014461D463E +:10A5B00007DA00232B60B3891A0610D44FF48063A6 +:10A5C0000EE06A4601F096F90028F2DB019A02F4E7 +:10A5D0007042A2F500535A425A412A60EEE74023E6 +:10A5E0000020236016B070BD8B8973B59D070646A9 +:10A5F0000C4607D504F147032360236101236361FF +:10A6000002B070BD01AB6A46FFF7CAFF009905466C +:10A610003046ECF7D9F848B9B4F90C309A05EFD4C4 +:10A6200023F0030343F00203A381E3E70D4BB3627E +:10A63000A389206043F08003A381009B6361019B99 +:10A6400020615BB1B4F90E10304601F05BFA28B11D +:10A65000A38923F0030343F00103A381A0890543E9 +:10A66000A581CDE7A59D0108024B01461868ECF7CE +:10A67000ABB800BF24030024024B01461868ECF776 +:10A68000A7B800BF24030024000000000000000061 +:10A6900001F0FF01102A2BDB10F0070F08D010F893 +:10A6A000013B013A8B422DD010F0070F42B3F6D197 +:10A6B000F0B441EA012141EA014122F007047FF0B0 +:10A6C00000070023F0E80256083C85EA010586EA07 +:10A6D000010685FA47F5A3FA87F586FA47F6A5FA43 +:10A6E00087F68EB9EED1F0BC01F0FF0102F007024F +:10A6F00032B110F8013B013A83EA010313B1F8D1FA +:10A700000020704701387047002D06BF35460338DA +:10A71000073815F0010F07D1013015F4807F02BF13 +:10A72000013015F4C03F0130F0BC0138704700BF64 +:10A7300030B501390024A24201D1002005E0035DBB +:10A7400001340D5DAB42F6D0581B30BD0A44914236 +:10A7500000F1FF3300D1704710B511F8014B03F839 +:10A76000014F9142F9D110BD02440346934200D1FA +:10A77000704703F8011BF9E737B5002948D051F8B5 +:10A78000043C0190002BA1F10404B8BFE418ECF7DD +:10A7900073FC204A01981368154633B9636014604E +:10A7A00003B0BDE83040ECF76BBCA3420BD9216885 +:10A7B0006218934204BF1A685B68636004BF521852 +:10A7C00022602C60ECE71A465B680BB1A342FAD911 +:10A7D00011685518A5420BD1246821445418A3428E +:10A7E0001160DDD11C685B68536021441160D7E7BC +:10A7F00002D90C230360D3E7256861198B4204BF9B +:10A8000019685B68636004BF491921605460C7E739 +:10A8100003B030BDE4210024F8B5CD1C25F00305BC +:10A8200008350C2D38BF0C25002D064601DBA9424A +:10A8300003D90C2333600020F8BDECF71DFC21493F +:10A840000A6814469CB9204F3B6823B9214630461C +:10A8500000F09CFA38602946304600F097FA431C15 +:10A8600023D10C2333603046ECF70AFCE3E723687E +:10A870005B1B17D40B2B03D923601C44256004E019 +:10A880006368A2420CBF0B6053603046ECF7F8FBE4 +:10A8900004F10B00231D20F00700C21ACCD01B1AB4 +:10A8A000A350C9E722466468CCE7C41C24F0030423 +:10A8B000A042E3D0211A304600F068FA0130DDD121 +:10A8C000CFE700BFE4210024E8210024F8B50746C3 +:10A8D00014460E4621B9BDE8F8401146EBF774BFA7 +:10A8E00022B9EBF775FF25462846F8BD01F02CF993 +:10A8F000A0420FD221463846EBF766FF05460028F6 +:10A90000F2D031462246FFF721FF31463846EBF7B9 +:10A910005FFFE9E73546E7E72DE9F84315468A6822 +:10A9200080460C4632B98A69002A0CBF01224FF0DA +:10A93000FF328A602268DFF88C90D1065FBF1A6808 +:10A94000111D196016680027A06988B1012807D178 +:10A950002B681A7863699B5C53B927BBBDE8F88301 +:10A96000022820D12B681B7813F809301B071AD452 +:10A970002368DA065EBF2B681B7806F8013B2A685D +:10A980006B6801322A60A268013B013A6B600137B3 +:10A99000A26042B1002BD7DCD4F880312946404672 +:10A9A00098470028D0D0236813F0100305D1E2683F +:10A9B0000132E260A26902B1337023691F4427614A +:10A9C0000020CBE7C6DB01082DE9F04F9846744B19 +:10A9D0000C468246164693E8070087B003AB83E82F +:10A9E0000700704BA169704A032918BF1A46A36873 +:10A9F00001925A1EB2F5AE7F88BF6FF4AE7527463E +:10AA000082BF03EB050940F25D13A36057F81C3BBE +:10AA100043F4506398BF4FF0000923603D464FF068 +:10AA2000000B316803AB097853F82B000222FFF7C3 +:10AA30002FFE28B3BBF1010F59D162682AB92268F1 +:10AA4000082342F4007263602260226822F4A0624C +:10AA50002260A268511EA16092B13268511C31601F +:10AA6000127805F8012B7268013A002A726007DC3F +:10AA7000D4F88021314650469047002840F0858028 +:10AA80000BF1010BBBF1030FCBD163680BB90A23A8 +:10AA90006360636845496069C91A00F087F94FF03F +:10AAA000000BA3682268002B3DD03168606991F8E3 +:10AAB00000C010F80C00002835D0BCF1300F24D1B4 +:10AAC000100522D50BF1010BB9F1000F03D00133B2 +:10AAD00009F1FF39A3607368013B002B73601BDD34 +:10AAE000336801333360A368013BA360D9E7BBF14E +:10AAF000020FAED1226802F4C061B1F5007FBFD170 +:10AB00001023636042F48072A2E722F41062226094 +:10AB10000B7805F8013BDEE7D4F88031314650462A +:10AB200098470028DFD02368D9050DD5BD4209D943 +:10AB300015F8011CD4F87C3132465046984705F18F +:10AB4000FF394D46BD4228D0226812F0100213D1C1 +:10AB50002A706368019E39465046B047D8F80030E5 +:10AB600021681A1DC8F8002011F0200F1B680FD0B3 +:10AB70001860E3680133E360ED1BAB4425695D4475 +:10AB80002561002007B0BDE8F08F4FF0000BCAE749 +:10AB9000CA074CBF18801860EBE70120F2E700BF3E +:10ABA000A8DD0108CDB10108D1B00108A5DD01087B +:10ABB00038B5074D04460846114600222A601A4659 +:10ABC000ECF7F0FC431C02D12B6803B1236038BDC5 +:10ABD000443F002470B50D461446064618B18369FB +:10ABE0000BB9FFF713F91C4B9C4224D17468636EB8 +:10ABF000D80705D4A389990502D4A06DFFF7CDFC31 +:10AC0000A368013B002BA36005DAA26993421CDB19 +:10AC1000EBB20A2B19D023685A1C22601D70EDB2CA +:10AC2000636EDA0705D4A3899B0502D4A06DFFF7F4 +:10AC3000B6FC284670BD094B9C4201D1B468D6E7EA +:10AC4000074B9C4208BFF468D1E7294622463046AC +:10AC500000F038FD0546E3E7E8DC010808DD0108FF +:10AC6000C8DC0108838903F00903092B01D1FFF730 +:10AC700063B8002070470000F8B50C46054618B1CF +:10AC800083690BB9FFF7C2F83B4B9C420AD16C6851 +:10AC9000B4F90C2000236360A3899E060CD54FF005 +:10ACA000FF3066E0354B9C4201D1AC68F0E7344B95 +:10ACB0009C4208BFEC68EBE7580748D4D90605D496 +:10ACC00009232B6042F04003A381E8E71A070BD564 +:10ACD00021462846FEF7F4FF0028E0D1A389A060B2 +:10ACE00023F00803A381A061A38943F00403A38197 +:10ACF00023691BB921462846FFF776FCA689B4F9DB +:10AD00000C70B3070FD00123A3811E4B1E49186896 +:10AD100006F00906FFF7D6FA092EA78103D12146CE +:10AD20002846FEF747FF2269666A6369216A226046 +:10AD30002846B047002860601CDCB4F90C3017BF0F +:10AD4000002243F02003626043F04003BCE7616BE4 +:10AD50000029CDD004F14403994202D02846EBF7F4 +:10AD600037FD236C636000206063002BC0D0E36B71 +:10AD70002360F8BD0020FCE7E8DC010808DD0108DD +:10AD8000C8DC010828DD010865AC010838B5064DAE +:10AD90000023044608462B60ECF754F9431C02D10B +:10ADA0002B6803B1236038BD443F002470B50B7895 +:10ADB00004465E2B0BBF4B78481C881C002208BF42 +:10ADC0000122611E04F1FF0501F8012FA942FBD108 +:10ADD0000BB9013870BD82F00101E154421C12F838 +:10ADE000015C2D2D02F1FF36104606D05D2DF1D00D +:10ADF0000DB93046EEE72B46EFE716785D2EFAD018 +:10AE0000B342F8DC1846013086422154FBDCD843BB +:10AE100030445D1CB342A8BF00202B180232DEE78D +:10AE20000EB410B59FB021AC4FF4017154F8042B4F +:10AE30000192ADF81C100490089000F092F80C4BB1 +:10AE4000059009900D930B48019A00680394002324 +:10AE5000119316934FF6FF73ADF81E3004A92346E5 +:10AE600000F0D4FE1FB0BDE8104003B0704700BF33 +:10AE70009BAE01082403002410B50C46B1F90E1056 +:10AE800001F03CF80028ABBF636DA3891B1823F4C5 +:10AE90008053ACBF6365A38110BD002070472DE9CE +:10AEA000F0411F468B89DB0505460C46164605D545 +:10AEB000B1F90E100223002200F034FEA389B4F988 +:10AEC0000E1023F48053A38132463B462846BDE84A +:10AED000F04100F049BC10B50C46B1F90E1000F07D +:10AEE00021FE431CA38915BF606523F4805343F4FE +:10AEF0008053A38118BFA38110BDB1F90E1000F0DB +:10AF0000B3BCC9B2034610F8012B1AB18A42F9D179 +:10AF100018467047002918BF0023F9E710F8012BE5 +:10AF200011F8013B012A28BF9A42F7D0D01A704786 +:10AF3000034611F8012B03F8012B002AF9D17047C1 +:10AF400070B503461E4613F8014B44B14A1E01E09A +:10AF5000A54204D012F8015F002DF9D1F2E7301AB2 +:10AF600070BD034613F8012B002AFBD1181A0138D3 +:10AF7000704710B56AB10139841810F8013B11F817 +:10AF8000012F934203D1A04201D0002BF5D1981A92 +:10AF900010BD1046FCE710B50139034632B111F877 +:10AFA000014F03F8014B013A002CF7D11A4400215C +:10AFB000934200D110BD03F8011BF9E770B50346B9 +:10AFC0001E4613F8014B3CB14A1E01E0A542F7D0E2 +:10AFD00012F8015F002DF9D1301A70BD2DE9F0474C +:10AFE0003A4E86468C4660461CF8014BA55D15F02E +:10AFF0000805F8D12D2C33D19CF800404FF0010802 +:10B0000000F1020C002B5CD0102B0CD1302C0AD19B +:10B010009CF8000000F0DF0058284DD19CF801405A +:10B0200010230CF1020C08F10047013F0026B7FB8A +:10B03000F3F9304603FB197AA4F13005092D18D82D +:10B040002C46A34224DD751C07D081451DD301D1B8 +:10B05000A2451ADB00FB034001261CF8014BEBE77D +:10B060002B2C08BF9CF80040A84608BF00F1020C3A +:10B07000C8E7A4F14105192D01D8373CE1E7A4F157 +:10B080006105192D04D8573CDBE74FF0FF36E4E7A4 +:10B09000731C06D12223CEF80030384642B9BDE8F1 +:10B0A000F087B8F1000F00D04042002AF7D00EB16F +:10B0B0000CF1FF311160F2E73024002BB3D10823EB +:10B0C000B1E7302CA4D00A23ADE700BFC6DB0108EE +:10B0D000FFF784BF2DE9F0433B4E86468C46604621 +:10B0E0001CF8014BA55D15F00805F8D12D2C34D1C5 +:10B0F0009CF800404FF0010800F1020C002B5ED0DC +:10B10000102B0CD1302C0AD19CF8000000F0DF008D +:10B1100058284FD19CF8014010230CF1020C4FF03D +:10B12000FF370025B7FBF3F703FB07F96FEA0909BF +:10B130002846A4F13006092E18D83446A34224DD4F +:10B14000002D1FDB87421DD301D1A1451ADB00FB77 +:10B15000034001251CF8014BEBE72B2C08BF9CF8A2 +:10B160000040A84608BF00F1020CC7E7A4F1410661 +:10B17000192E01D8373CE1E7A4F16106192E04D855 +:10B18000573CDBE74FF0FF35E4E7002D07DA2223D9 +:10B19000CEF800304FF0FF3042B9BDE8F083B8F18F +:10B1A000000F00D04042002AF7D00DB10CF1FF3162 +:10B1B0001160F2E73024002BB1D10823AFE7302C27 +:10B1C000A2D00A23ABE700BFC6DB0108FFF782BFAE +:10B1D00013460A46014602480068FFF77BBF00BFDE +:10B1E000240300242DE9F74F804600F0D7FB40F2FE +:10B1F000B173984540F398806FF4F66343449B1015 +:10B2000040F26D12A8F2B27502FB05356FF06302D1 +:10B21000A8F26D7393FBF2F31D444FF4C8736FF4FF +:10B22000C86298FBF3F703FB17874244B7FA87FC21 +:10B23000B2FBF3F208F0030315446422C0F8048063 +:10B2400098FBF2F64FEA5C1C02FB1686044600F1FE +:10B25000500B00934FF0070E227A63694A2A28D1D7 +:10B260000099EA1801B906B90FBB3B2BD4BF0023E4 +:10B27000012313445A1EA3692C4901FB0232A36A1D +:10B2800013441A46DB17C4E908232834A345E3D145 +:10B29000D0E90845D0E91223944275EB0303B4BF0B +:10B2A000012300230360012003B0BDE8F08F0023D9 +:10B2B000DFE7442A01D1EA18DDE7009A72BB002ECD +:10B2C0000CBFE0464FF001081949E26801924FF0C7 +:10B2D000300A0AFB08182A464FF00009A8F10408B2 +:10B2E000019909F10109494558F829A018DC02F132 +:10B2F000040898FBFEF9C9EBC909A8EB0909B3EBEF +:10B300000909236903F1FF3348BF09F10709C3EBBA +:10B31000C3034B44534505DA1A44ACE7E046D3E790 +:10B320005244DDE7073BF5E70020BDE7805101000F +:10B330002CDD01080148FFF72FB900BF3E3F002474 +:10B340000148FFF72BB900BF3E3F0024014B1868AE +:10B3500000F002B8240300242DE9F04F8DB0074619 +:10B3600000F01CFBAE49AF4E0546384600F00EFB20 +:10B37000044670B9AC4BAD4A1860AD4B1860AD4B8C +:10B380003068C3E90022FFF777F934600DB0BDE8FB +:10B39000F08F316800295FD13068FFF76DF92046E2 +:10B3A000FFF7DFFD411C3846EBF70EFA306000284E +:10B3B00057D12378A04AA1493A2B08BF01340AAEDD +:10B3C00033462046FFF72CFD0028DFDD0A9BE718F7 +:10B3D000E35C2D2B49D101374FF0FF340DF1200AEA +:10B3E0000DF11E0B4FF00008CDE9016A9449039658 +:10B3F000CDF800B0334607AA3846ADF81E80ADF848 +:10B400002080FFF70DFD4045C0DDBDF81E30BDF8C2 +:10B410002020DFF838923C2101FB0322BDF81C30CC +:10B420004FF4616101FB03235C43AC62814C824BAE +:10B4300023600A9B81491F444A4633463846FFF73A +:10B44000EFFC404516DC23686360774BAA6A1A60FC +:10B45000774BC3F8008099E7FFF760FD00289BD188 +:10B4600094E72146FFF764FDA3E72B2B08BF0137C4 +:10B470000124B3E70A9BC4F80490FC18FB5C2D2B55 +:10B4800040F08B8001344FF0FF370023ADF81C30C3 +:10B49000ADF81E30ADF820300A93CDE902A6CDE913 +:10B4A00000B66749334607AA2046FFF7B9FC0028D3 +:10B4B00078DCAF6AA7F561670A9B2F651C442F46AD +:10B4C0004FF0000923782C2B08BF013494F800803A +:10B4D000B8F14D0F78D10DF12603CDE9016309AB29 +:10B4E00000935849039633460DF122022046FFF798 +:10B4F00097FC03287FF44AAFBDF822104B1E0B2B9C +:10B500003FF644AFBDF82420531E042B3FF63EAF58 +:10B51000BDF82630062B3FF639AFC7E9031287F88E +:10B5200008807B610A9B04EB03080223ADF81C3002 +:10B530000023ADF81E30ADF820300A9398F80030A3 +:10B540002F2B09D1CDE902A6CDE900B63E493346FD +:10B5500007AA4046FFF764FCBDF81E30BDF8202066 +:10B560003C2101FB0322BDF81C304FF4616101FB5B +:10B570000323BB610A9C28374444B9F1000F20D053 +:10B580006868FFF72FFE284BAA6A1A602B6D9B1A7A +:10B59000274A18BF01231360F8E62B2B08BF01349C +:10B5A000012772E7BDF81E30BDF820203C2101FBC9 +:10B5B0000322BDF81C304FF4616101FB03235F439C +:10B5C0007AE74FF001097DE7B8F14A0F06BF013471 +:10B5D000434644230A220BA920460593FFF7F8FDB2 +:10B5E000DDF82C80059BADF82600A04514D14D2335 +:10B5F000B9F1000F07D12B7203210223C5E9031310 +:10B60000C5F8149091E785F830300B220123C5E985 +:10B610000D230023EB6388E780B23B72786184E7F7 +:10B62000B4DD0108042200240C220024B7DD010847 +:10B630000822002488030024F7210024BBDD010830 +:10B64000DEDD0108CADD0108DDDD0108EC21002492 +:10B650002DE9F0410C46496B04F1440399421DD198 +:10B660004FF48061EBF7B0F818B94FF0FF30BDE848 +:10B67000F0814FF48063A36394F84630606380F8F0 +:10B68000FF3394F8453080F8FE3394F8443080F866 +:10B69000FD3300F2FD3020600020E8E7A66B770064 +:10B6A0003A46EBF793F805460028DED000EB060893 +:10B6B000014632464046FFF749F8C4E90D57C4F841 +:10B6C0000080E9E7F8B50E461446054618B18369CF +:10B6D0000BB9FEF79BFB214B9C422BD16C68A369F5 +:10B6E000A360A3891A072FD523696BB32369206848 +:10B6F000C01A6369F6B28342374604DC2146284605 +:10B70000FEF7DEFA30BBA368013BA36023685A1C36 +:10B7100022601E7063690130834204D0A389DB0775 +:10B7200006D50A2E04D121462846FEF7C9FA88B963 +:10B730003846F8BD0A4B9C4201D1AC68CFE7094BB3 +:10B740009C4208BFEC68CAE72146284600F01EF874 +:10B750000028CBD04FF0FF37EAE700BFE8DC010854 +:10B7600008DD0108C8DC010838B5074D0446084665 +:10B77000114600222A601A46EBF75CFD431C02D1F9 +:10B780002B6803B1236038BD443F0024324B70B5B1 +:10B790001D6806460C4625B1AB6913B92846FEF76D +:10B7A00035FB2E4B9C420FD16C68A389B4F90C2059 +:10B7B00019072CD4DD0611D40923336042F040036D +:10B7C000A3814FF0FF303EE0254B9C4201D1AC6895 +:10B7D000EBE7244B9C4208BFEC68E6E7580712D51C +:10B7E000616B41B104F14403994202D03046EAF75B +:10B7F000EFFF00236363A38923F02403A3810023C5 +:10B80000636023692360A38943F00803A38123694C +:10B810004BB9A38903F42073B3F5007F03D021460D +:10B820003046FEF7E1FEA089B4F90C2010F00103C8 +:10B830000AD00023A36063695B42A361236943B913 +:10B8400010F08000BAD170BD810758BF6369A36052 +:10B85000F4E70020F7E700BF24030024E8DC010838 +:10B8600008DD0108C8DC010838B5064D0023044690 +:10B8700008462B60EBF790FC431C02D12B6803B108 +:10B88000236038BD443F00240B78722B30B522D0A2 +:10B89000772B24D0612B27D016230360002030BDE6 +:10B8A000622D12D0782D13D02B2D07D120F01C0043 +:10B8B00023F0030340F0100043F0020311F8015F8E +:10B8C000002DEDD123431360E9E743F48033F5E71E +:10B8D00043F40063F2E7002423460420EEE74FF42C +:10B8E000C06401230820E9E74FF4027401234FF4F8 +:10B8F0008470E3E738B5074D002304460846114637 +:10B900002B60EBF794FD431C02D12B6803B123603D +:10B9100038BD00BF443F00242DE9F84F0746894653 +:10B920001646EBF7B1FB184B1C689A4634B14B46F0 +:10B93000984613F8011B39B13D29F9D13846EBF788 +:10B94000A7FB0020BDE8F88FA8EB0908A34654F830 +:10B95000040B0028F2D042464946FFF70AFB0028B4 +:10B96000F4D154F8043C03EB080513F808303D2BE0 +:10B97000ECD1DAF80030ABEB03039B1038463360B0 +:10B98000EBF786FB681CDDE7E803002407B501AA96 +:10B99000FFF7C2FF03B05DF804FB000000487047EA +:10B9A000900300242DE9F041D0E900670C46514A8C +:10B9B00000233046394600F0B3FA394605464D4A71 +:10B9C0003046002300F0ACFA002ABCBF02F5A832D2 +:10B9D00002F5C0724FF4616105F52F20B2FBF1F35F +:10B9E00001FB13224FF03C01ACBF00F66C2000F6C7 +:10B9F0006B20A360B2FBF1F301FB132263602260B2 +:10BA0000C31C072293FBF2F2C2EBC2029B1A48BF8F +:10BA100007330028A361B8BFA0F50E333649AEBF87 +:10BA200090FBF1F1A3F52C7393FBF1F1334B03FB86 +:10BA3000010048F6AC62B0FBF2F2024440F2B45CA2 +:10BA4000B0FBFCF3D21A40F26D172D4BB0FBF3F3B1 +:10BA50006426D31AB3FBF7F5B3FBFCF3B5FBF6F2A0 +:10BA6000D31A034407FB1533992003EB830C0CF125 +:10BA7000020C03F1010EBCFBF0F7784302304FF0EB +:10BA80000508B0FBF8F0AEEB000040F2F95EF445BB +:10BA900094BF4FF0020C6FF0090C67444FF4C87C60 +:10BAA0000CFB0151012F98BF0131B3F5997F0CD3E5 +:10BAB000A3F59973E361A1F26C710023E060C4E91E +:10BAC000047123622046BDE8F08115F0030F02D116 +:10BAD00006FB12525AB94FF4C876B5FBF6F206FBD4 +:10BAE0001252B2FA82F252093B331344E2E70122C6 +:10BAF000FAE700BF80510100B13A02004FC5FDFFD7 +:10BB0000B03A020038B5064D0023044608462B60C3 +:10BB1000EBF7E8FB431C02D12B6803B1236038BD6F +:10BB2000443F002438B5074D04460846114600221C +:10BB30002A601A46EBF729FC431C02D12B6803B19B +:10BB4000236038BD443F002451F8043C181F002BEB +:10BB5000BCBF0B58C018704738B54B1C144603D1F6 +:10BB60004FF0FF35284638BD938923F02003938199 +:10BB7000636B5268CDB28BB1A36B934208DD23682F +:10BB80005A1E226003F8015C636801336360E9E7D1 +:10BB90002146FFF75DFD0028F1D0E1E72169236828 +:10BBA00051B1994208D213F8011CA94204D1013BBA +:10BBB000013223606260D5E7C4E90F3204F1440327 +:10BBC00063630323A363234603F8465F23600123D3 +:10BBD000DCE710B50C46496B69B104F144039942A6 +:10BBE00001D0EAF7F5FD236C63600020606313B1B8 +:10BBF000E36B236010BD2369236000236360A38986 +:10BC000043F02003A3814FF0FF30F3E72DE9F04F1D +:10BC10000C46ADF5237D0021CDE94411B249A09138 +:10BC20000DF10408B149B24FDFF8C892CDF8188180 +:10BC30000646A191009392F800A0BAF1000F00F01F +:10BC400051811AF8073013F0080302F1010519D0E9 +:10BC50006368002B0FDD23681A78BA5C120701D4E1 +:10BC60002A46E8E7459A0132459262680133013A73 +:10BC700062602360ECE7A19B21463046984700288C +:10BC8000E9D0EDE7BAF1250F40F08380419343936B +:10BC900053782A2B02BF1023951C41930A22AB46EE +:10BCA0001BF8011BA1F13003092B1DD99148032278 +:10BCB000FEF7EEFC40B10123A0EB090003FA00F00F +:10BCC000419B184341905D4615F8013B782B06D8FF +:10BCD000572B10D8252B5CD056D8002B74D00323BB +:10BCE00047930A23429381E0439B02FB0313303BBB +:10BCF00043935D46D3E7A3F15802202AEFD801A170 +:10BD000051F822F0D7BD0108DFBC0108DFBC0108F3 +:10BD100035BE0108DFBC0108DFBC0108DFBC01083B +:10BD2000DFBC0108DFBC0108DFBC0108DFBC010883 +:10BD30004BBE010821BE01088FBD01088FBD01085F +:10BD40008FBD0108DFBC010825BE0108DFBC01086A +:10BD5000DFBC0108DFBC0108DFBC01085BBE0108D5 +:10BD60002DBE0108CFBD0108DFBC0108DFBC010802 +:10BD700057BE0108DFBC010821BE0108DFBC010875 +:10BD8000DFBC0108D7BD0108453B022BA7D805231E +:10BD90002BE06368002B0DDD23681A78524540F0D4 +:10BDA000A180013362682360459B013A01336260E0 +:10BDB000459355E7A19B2146304698470028EBD094 +:10BDC0004498002840F084804FF0FF3086E0419A8C +:10BDD00042F020024192419A42F4007241921022B4 +:10BDE0006F2B429234BF0323042347936368002BD5 +:10BDF00041DD419B590604D423681A78BA5C1207C6 +:10BE000040D4479B022B4FDC6B46224641A930466B +:10BE1000FEF782FD012865D002287FF421AFCFE72D +:10BE20000A22DDE7002342930323DEE7082342933F +:10BE30000423DAE729464046FEF7B8FF419B43F06A +:10BE40004003419305460123CFE7419B43F0400364 +:10BE500041930023C9E70223C7E74198C3063FF592 +:10BE6000FFAE009B459A191D00911B68C0074CBF8F +:10BE70001A801A60F4E6A19B2146304698470028B4 +:10BE8000B7D09DE7459A013245926268013A002A8F +:10BE9000626002DD01332360AEE7A19B214630469C +:10BEA00098470028A8D08BE7042B06DC6B46224677 +:10BEB00041A93046FEF788FDACE70F4B002B3FF45D +:10BEC000CFAE6B46224641A93046AFF30080A1E7D2 +:10BED000A38913F0400F18BF4FF0FF300DF5237DFD +:10BEE000BDE8F08F4498F9E759BB0108D3BB0108BE +:10BEF000C6DB0108F0DD01080000000038B5074D81 +:10BF000004460846114600222A601A46EBF7ECF96F +:10BF1000431C02D12B6803B1236038BD443F002489 +:10BF20007BB972B90029BEBF00204FF0004106E086 +:10BF300008BF00281CBF6FF000414FF0FF3000F039 +:10BF4000CDB9ADF1080C6DE904CE002909DB002B59 +:10BF50001ADB00F061F8DDF804E0DDE9022304B04B +:10BF60007047404261EB4101002B1BDB00F054F8AD +:10BF7000DDF804E0DDE9022304B0404261EB410159 +:10BF8000524263EB43037047524263EB430300F0BA +:10BF900043F8DDF804E0DDE9022304B0404261EB40 +:10BFA00041017047524263EB430300F035F8DDF87E +:10BFB00004E0DDE9022304B0524263EB430370471F +:10BFC00053B94AB9002908BF00281CBF4FF0FF3100 +:10BFD0004FF0FF3000F082B9ADF1080C6DE904CEEE +:10BFE00000F01AF8DDF804E0DDE9022304B0704740 +:10BFF000430803F05533C01A830803F0333300F0CD +:10C000003330184400EB101000F00F3000EB00202C +:10C0100000EB0040000E70472DE9F047089D0446F4 +:10C020008C46002B40F083808A42174647D9B2FAEB +:10C0300082F242B1C2F1200024FA00F09140974010 +:10C0400040EA010C94404FEA1748230CBCFBF8F679 +:10C050001FFA87FE08FB16C143EA014306FB0EF1F7 +:10C06000994209D9FB1806F1FF3080F019819942F5 +:10C0700040F21681023E3B445B1AA4B2B3FBF8F0D7 +:10C0800008FB103344EA034400FB0EFEA64509D921 +:10C090003C1900F1FF3380F00581A64540F2028192 +:10C0A00002383C4440EA0640A4EB0E0400261DB1D1 +:10C0B000D4400023C5E900433146BDE8F08702B90A +:10C0C000FFDEB2FA82F2002A50D1CB1B4FEA174EA4 +:10C0D0001FFA87F80126B3FBFEFC210C0EFB1C3374 +:10C0E00041EA034108FB0CF38B4207D979180CF1A4 +:10C0F000FF3002D28B4200F2E9808446C91AA3B213 +:10C10000B1FBFEF00EFB101143EA014408FB00F8FE +:10C11000A04507D93C1900F1FF3302D2A04500F237 +:10C12000D9801846A4EB080440EA0C40BFE78B42D4 +:10C1300009D9002D00F0B1800026C5E90001304684 +:10C140003146BDE8F087B3FA83F6002E4AD18B4220 +:10C1500002D3824200F2B880841A61EB030101200D +:10C160008C46002DA8D0C5E9004CA5E7C2F12003FC +:10C1700020FA03F6974001FA02F04FEA174ED94031 +:10C180003043030CB1FBFEF61FFA87F80EFB1611C5 +:10C1900043EA014306FB08F1994204FA02F409D983 +:10C1A000FB1806F1FF3C80F08D80994240F28A80B6 +:10C1B000023E3B445B1A81B2B3FBFEF00EFB103330 +:10C1C00041EA034100FB08F38B4207D9791800F1DB +:10C1D000FF3C73D28B4271D902383944CB1A40EA02 +:10C1E000064678E7C6F1200C03FA06F422FA0CF3AF +:10C1F0001C4320FA0CF701FA06F34FEA144E21FA19 +:10C200000CF11F433B0CB1FBFEF91FFA84F80EFB47 +:10C21000191143EA014109FB08FA8A4502FA06F2BC +:10C2200000FA06F308D9611809F1FF3048D28A45AF +:10C2300046D9A9F102092144A1EB0A01BFB2B1FB21 +:10C24000FEF00EFB101147EA014700FB08F8B84565 +:10C2500007D9E71900F1FF312ED2B8452CD90238A1 +:10C26000274440EA0940A7EB0807A0FB02894F4595 +:10C27000C64649461AD317D05DB1B3EB0E0267EB41 +:10C28000010707FA0CFCF2404CEA0202F740C5E94C +:10C29000002700263146BDE8F0872E4628460BE7EA +:10C2A0000646E9E61846FDE64345E5D2B8EB020E40 +:10C2B00069EB04010138DFE70846D2E760468DE705 +:10C2C0008146B9E7664675E730464AE7ACF1020CAD +:10C2D000394413E702383C4424E700BF704700BFED +:10C2E000F8B500BFF8BC08BC9E467047F8B500BF63 +:10C2F000F8BC08BC9E46704753444341524400007A +:10C300000000000000000000D9050008FD0500083D +:10C3100089080008A9050008590500081106000849 +:10C32000A5060008390700085D0500086D0500082E +:10C330007305000879050008610500086705000815 +:10C340007F050008C1070008F5080008210800085B +:10C35000950500089D050008A30500087262002FDE +:10C3600066732F5550444154452E42494E00417248 +:10C370006475696E6F205341004E69636C6120568D +:10C380006973696F6E20426F6F746C6F6164657260 +:10C390000044465520436F6E666967004446552049 +:10C3A000496E746572666163650040426F6F746CBC +:10C3B0006F616465722076657273696F6E202564A3 +:10C3C000202F307830303030303030302F302A3439 +:10C3D0004B670040496E7465726E616C20466C61FB +:10C3E00073682020202F30783038303030303030B3 +:10C3F0002F30312A3132384B612C31352A313238E5 +:10C400004B67004045787465726E616C20466C61C4 +:10C4100073682020202F3078393030303030303081 +:10C420002F343039362A344B670052545820563551 +:10C430002E352E33007274785F74696D65720072E8 +:10C4400074785F69646C6500000000000000000003 +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C4800001000000E803000005000000180C002473 +:10C49000100000000000000000000000000000008C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D0000000000000100000F4C4010830C501088D +:10C4E000894500086945000818C5010804000000D6 +:10C4F000000000003FC4010800000000200D0024DF +:10C5000044000000680D002400030000010000004A +:10C51000010000000000000000000000000000001A +:10C52000580C0024340000008C0C00245000000043 +:10C5300035C4010800000000DC0C002444000000A9 +:10C540006810002400030000280000000100000023 +:10C55000000000006D616C6C6F635F6D75746578D1 +:10C5600000656E765F6D757465780073696E676CD3 +:10C5700065746F6E5F6D75746578006D61696E00CE +:10C580006BC501080B000000C43700241C0000002C +:10C5900000000000000000006F4D0008554D00082D +:10C5A000F54C00080D4D0008000000006410B71D98 +:10C5B000C8206E3BAC30D9269041DC76F4516B6BD1 +:10C5C0005861B24D3C7105502083B8ED44930FF093 +:10C5D000E8A3D6D68CB361CBB0C2649BD4D2D38649 +:10C5E00078E20AA01CF2BDBD0102040000000000B8 +:10C5F00000000000F54F000819500008BD4F00086A +:10C60000D94F000800000000000000004D53000852 +:10C6100000000000000000004D5300080000000072 +:10C620000000000055540008000000000000000059 +:10C630003B700008657175657565000044C60108AA +:10C64000A8140024A9840108F98301083D84010885 +:10C6500051860108798601080984010819880108B2 +:10C66000D98301080100000070C60108E01400240D +:10C67000C59A0108DD9A0108259B0108399B01082C +:10C68000E99A0108059B010815600008E99901086D +:10C690000000000064656661756C740000000000B5 +:10C6A0000000000089610008ED6100082F00000013 +:10C6B000000000000000000000000000000000007A +:10C6C0003B7000080B630008116300080B6300084F +:10C6D0000B630008176300080B63000800000000EC +:10C6E00000000000716500080A52252D34643A20CC +:10C6F0002530386C58000A53502020203A2025302D +:10C70000386C580A4C522020203A202530386C587A +:10C710000A50432020203A202530386C580A78509F +:10C720005352203A202530386C580A50535020205C +:10C730003A202530386C580A4D535020203A202595 +:10C7400030386C58000A43505549443A2025303857 +:10C750006C58000A48465352203A202530386C580D +:10C760000A4D4D4653523A202530386C580A4246FD +:10C770005352203A202530386C580A5546535220DF +:10C780003A202530386C580A44465352203A202526 +:10C7900030386C580A41465352203A202530386CC4 +:10C7A00058000A4D4D4641523A202530386C580009 +:10C7B0000A42464152203A202530386C58000A4D32 +:10C7C0006F6465203A20546872656164000A507293 +:10C7D0006976203A2055736572000A507269762096 +:10C7E0003A2050726976696C65676564000A4D6F1E +:10C7F0006465203A2048616E646C6572000A537467 +:10C8000061636B3A20505350000A537461636B3A72 +:10C81000204D5350000A2B2B204D6265644F53204E +:10C820004661756C742048616E646C6572202B2BB8 +:10C830000A0A4661756C74547970653A20004D653A +:10C840006D4D616E6167654661756C74004275730C +:10C850004661756C740055736167654661756C74EB +:10C8600000486172644661756C74000A0A436F6E19 +:10C87000746578743A000A0A2D2D204D6265644F64 +:10C8800053204661756C742048616E646C6572203B +:10C890002D2D0A0A004661756C74206578636570F9 +:10C8A00074696F6E002E2E2E0A000000000000003A +:10C8B00080DE280080C84D0000A7760000349E006E +:10C8C0008012C700809FEE00007E1701805C40014F +:10C8D00080E9670100C890010055B8010000000020 +:10C8E00080DE2800001A4F0080F8770080859F00C6 +:10C8F0000064C80000F1EF0080CF180100AE4101D4 +:10C90000003B69018019920180A6B9010D00000069 +:10C910000000000000000000176F0008916F000881 +:10C920009D6F00083D6F0008036F0008136F00083B +:10C930000D5500080F6F0008654900086F49000891 +:10C94000096F000879490008115500081D550008B5 +:10C950002D55000833550008616F00082155000867 +:10C96000FFFFFFFF09010000FFFFFFFF0A010000BA +:10C97000FFFFFFFF000000002F73746465727200F8 +:10C980002F737464696E002F7374646F7574003054 +:10C990003132333435363738396162636465663035 +:10C9A00031323334353637383941424344454661B4 +:10C9B00070706C69636174696F6E5F756E6E616DC6 +:10C9C00065645F6D75746578006170706C69636132 +:10C9D00074696F6E5F756E6E616D65645F746872A9 +:10C9E000656164000000000000000000DD7E0008BA +:10C9F000157F0008464C4153484941500000000053 +:10CA00000000000000000000F58100080982000815 +:10CA1000F1800008CB81000859050008E57F000877 +:10CA2000218000085D8000085D050008297F00085E +:10CA300093800008BF800008D7800008A980000804 +:10CA40002F7F0008C1070008F50800083D7F000897 +:10CA5000357F000851535049460000000000000097 +:10CA60000000000000000000712500089525000866 +:10CA70001D920008DD94000859050008DF860008B3 +:10CA80007D8700084D8800085D0500085982000870 +:10CA9000598200085F8200085583000877820008E9 +:10CAA00071820008C1070008F50800082108000885 +:10CAB0006982000800000000000000008595000861 +:10CAC000D19600086D9700084397000889950008E3 +:10CAD0009D950008F1950008459600085D05000841 +:10CAE000DF960008F3960008079700081B970008D8 +:10CAF0008B9600089F960008C1070008F5080008FB +:10CB000021080008C5960008A5960008AB96000805 +:10CB1000BD960008C196000853464450002A3A3C8E +:10CB20003E7C223F7F002B2C3B3D5B5D00EBFE906B +:10CB30004D53444F53352E30004E4F204E414D45FE +:10CB4000202020204641543332202020004E4F2008 +:10CB50004E414D45202020204641542020202020B9 +:10CB600000809A45418E418F804545454949498E0F +:10CB70008F9092924F994F555559999A9B9C9D9E93 +:10CB80009F41494F55A5A5A6A7A8A9AAABACADAE94 +:10CB9000AFB0B1B2B3B4B5B6B7B8B9BABBBCBDBE2D +:10CBA000BFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE1D +:10CBB000CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDE0D +:10CBC000DFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEFD +:10CBD000EFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEED +:10CBE000FF01030507090E10121416181C1E010080 +:10CBF00004001000400000010002000001000200DB +:10CC000004000800100020000000000007000000E1 +:10CC1000000000000000000000000000C700FC0051 +:10CC2000E900E200E400E000E500E700EA00EB00D4 +:10CC3000E800EF00EE00EC00C400C500C900E6000B +:10CC4000C600F400F600F200FB00F900FF00D60079 +:10CC5000DC00A200A300A500A7209201E100ED00E6 +:10CC6000F300FA00F100D100AA00BA00BF001023BF +:10CC7000AC00BD00BC00A100AB00BB00912592251B +:10CC800093250225242561256225562555256325F2 +:10CC9000512557255D255C255B2510251425342558 +:10CCA0002C251C2500253C255E255F255A2554256D +:10CCB00069256625602550256C256725682564252E +:10CCC000652559255825522553256B256A25182594 +:10CCD0000C25882584258C2590258025B103DF002F +:10CCE0009303C003A303C303B500C403A6039803BF +:10CCF000A903B4031E22C603B50329226122B10091 +:10CD00006522642220232123F7004822B000192243 +:10CD1000B7001A227F20B200A025A00061001A03EC +:10CD2000E0001703F8000703FF000100780100018D +:10CD3000300132010601390110014A012E01790149 +:10CD4000060180014D0043028101820182018401BC +:10CD5000840186018701870189018A018B018B018A +:10CD60008D018E018F019001910191019301940138 +:10CD7000F60196019701980198013D029B019C01E3 +:10CD80009D0120029F01A001A001A201A201A40116 +:10CD9000A401A601A701A701A901AA01AB01AC0149 +:10CDA000AC01AE01AF01AF01B101B201B301B301FA +:10CDB000B501B501B701B801B801BA01BB01BC01A9 +:10CDC000BC01BE01F701C001C101C201C301C40120 +:10CDD000C501C401C701C801C701CA01CB01CA010D +:10CDE000CD011001DD0101008E01DE011201F30110 +:10CDF0000300F101F401F401F801280122021201FB +:10CE00003A020900652C3B023B023D02662C3F02C0 +:10CE100040024102410246020A01530240008101E0 +:10CE20008601550289018A0158028F015A02900138 +:10CE30005C025D025E025F02930161026202940184 +:10CE40006402650266026702970196016A02622C1B +:10CE50006C026D026E029C01700271029D017302F0 +:10CE600074029F0176027702780279027A027B02CD +:10CE70007C02642C7E027F02A60181028202A9014B +:10CE80008402850286028702AE014402B101B2012A +:10CE900045028D028E028F0290029102B7017B0340 +:10CEA0000300FD03FE03FF03AC03040086038803B5 +:10CEB00089038A03B1031103C2030200A303A3037E +:10CEC000C4030803CC0303008C038E038F03D80331 +:10CED0001801F2030A00F903F303F403F503F60360 +:10CEE000F703F703F903FA03FA03300420035004AD +:10CEF0001007600422018A043601C1040E01CF0428 +:10CF00000100C004D00444016105260400007D1D19 +:10CF10000100632C001E9601A01E5A01001F080686 +:10CF2000101F0606201F0806301F0806401F0606B1 +:10CF3000511F0700591F521F5B1F541F5D1F561FB3 +:10CF40005F1F601F0806701F0E00BA1FBB1FC81F9F +:10CF5000C91FCA1FCB1FDA1FDB1FF81FF91FEA1FEB +:10CF6000EB1FFA1FFB1F801F0806901F0806A01F5B +:10CF70000806B01F0400B81FB91FB21FBC1FCC1F8A +:10CF80000100C31FD01F0206E01F0206E51F0100BB +:10CF9000EC1FF31F0100FC1F4E2101003221702104 +:10CFA0001002842101008321D0241A05302C2F0483 +:10CFB000602C0201672C0601752C0201802C640193 +:10CFC000002D260841FF1A030000000000000000A9 +:10CFD0000000000000000000000000003B7000089E +:10CFE0000B630008116300080B6300080B63000863 +:10CFF000176300080B630008FCFFFFFF0000000040 +:10D00000000000000000000000FBFFFBFEECEAF364 +:10D01000EFF7F3EDEDEAFB8CF0F4E9EA0000000035 +:10D020000000000019CC000845CC000829FD0008CC +:10D0300091FD00085FCE0008A7CE000837CF00089A +:10D04000F9CE000815C800083DC700089DC70008B4 +:10D0500005C70008BBCF000885C80008B7C800088E +:10D06000F5C8000833C9000837FC00085BC9000890 +:10D0700047C700084DFC000863C70008A1C90008A5 +:10D080004BD00008FDC9000899CA00082FCA000843 +:10D090007FC7000877CA0008A9FC00083DD2000835 +:10D0A000A5D00008B9D00008F9CA0008FCFFFFFFAE +:10D0B000000000003DCC000859CC00082E2E006C6A +:10D0C0006974746C65667300000000000000000065 +:10D0D00019F800084DF8000829FD000891FD000826 +:10D0E00049F3000877F30008D7F30008A9F3000814 +:10D0F00029F4000815F2000801F30008D1F900082E +:10D1000085F4000829F500085FF5000897F5000888 +:10D11000CFF5000837FC0008FDF5000835F60008DB +:10D120004DFC000863F6000891F60008C3F60008FD +:10D130000BF7000841F7000899F70008C3F700084B +:10D14000F1F70008A9FC0008FCFFFFFF0000000049 +:10D1500045F8000861F80008000000000000000029 +:10D1600079FA0008CBFA0008DFFA00085DFA000837 +:10D1700091FA0008A7FA0008B3FA0008BFFA0008FD +:10D180003BFA0008000000000000000055FB00080A +:10D1900001FC00086DFB000883FB0008B1FB0008E0 +:10D1A00037FB000899FB0008A5FB0008C7FB000837 +:10D1B000D3FB0008DFFB0008EBFB0008115500085B +:10D1C0001D5500082D550008335500083955000835 +:10D1D0002155000815FB00080000000000000000B9 +:10D1E00001FD000815FD00086DFB000883FB000829 +:10D1F000B1FB0008F5FD000899FB0008A5FB00083D +:10D20000C7FB0008D3FB0008DFFB0008EBFB0008AE +:10D21000115500081D5500082D550008335500080C +:10D22000395500082155000815FB000800000000D2 +:10D230000000000069FD00087DFD0008DFFA00081D +:10D240000BFE000891FA0008A7FA0008B3FA0008DC +:10D25000BFFA00083BFA00080000000000000000D0 +:10D26000000000000000000029FD000891FD0008FA +:10D2700025FC00082BFC00082BFC000831FC0008F2 +:10D280002BFC00083B7000083B70000825FC0008E0 +:10D290003B7000083B7000083B7000083B700008C2 +:10D2A00037FC000837FC00083B7000083BFC000816 +:10D2B0004DFC00085FFC000895FC00082BFC0008F2 +:10D2C00025FC00082BFC00089BFC00089DFC0008C6 +:10D2D000A1FC0008A9FC0008FCFFFFFF0000000003 +:10D2E00000000000000000000180808080808080BD +:10D2F0000480808080808080088080808080808022 +:10D3000010808080808080802080808080808080ED +:10D3100040000408102040020408102040000100D2 +:10D3200002000400060008000A000C0010002000A3 +:10D33000400080000001000000000102030401021F +:10D34000030406070809000008000000005C004014 +:10D35000CA1300001600000000540040CA13000069 +:10D3600016010000001C0058CA1B00001800000035 +:10D3700000540040CA13000018010000001C0058AF +:10D38000CA1B00001A00000000580040CA13000029 +:10D390003C000000001C0058CA13000051000000AF +:10D3A00000580040CA1300005E000000001C005836 +:10D3B000CA1300007400000000580040CA130000A7 +:10D3C00077000000005C0040CA1300007B000000F2 +:10D3D000001C0058CA130000FFFF0000FFFFFFFF02 +:10D3E000000000001700000000540040CA130000B5 +:10D3F00017010000001C0058CA1B000019000000A3 +:10D4000000540040CA13000019010000001C00581D +:10D41000CA1B00001B00000000580040CA13000097 +:10D4200029000000005C0040CA1300003D0000001D +:10D43000001C0058CA1300005000000000580040B3 +:10D44000CA1300005F000000001C0058CA1300004F +:10D450007500000000580040CA130000780000006A +:10D46000005C0040CA1300007C000000001C005853 +:10D47000CA130000FFFF0000FFFFFFFF00000000D5 +:10D480002900000000500052D22700003B0000009D +:10D4900000500052D22700005800000000500052F7 +:10D4A000D22B0000FFFF0000FFFFFFFF0000000085 +:10D4B0002A00000000500052D22700003C0000006B +:10D4C00000500052D22700005900000000500052C6 +:10D4D000D22B0000FFFF0000FFFFFFFF0000000055 +:10D4E0004200000000500052D22700005700000008 +:10D4F00000500052D2270000FFFF0000FFFFFFFF97 +:10D50000000000000100000000500052D22700007F +:10D510003D00000000500052D227000056000000DD +:10D5200000500052D2270000FFFF0000FFFFFFFF66 +:10D53000000000001200000000500052D22700003E +:10D540005A00000000500052D2270000FFFF0000E8 +:10D55000FFFFFFFF00000000160000000050005217 +:10D56000D22B00001A00000000500052D227000009 +:10D570006600000000500052D22B0000FFFF0000A8 +:10D58000FFFFFFFF0000000001000000004C004012 +:10D59000D22300000300000000440040D21F00001E +:10D5A0000800000000780040D22F00000A000000B0 +:10D5B00000100140D21F00000A010000000C0058BA +:10D5C000D20F00000B000000004C0040D21B0000F6 +:10D5D0001300000000780040D22F0000150000006A +:10D5E00000500040D23B0000170000000010014036 +:10D5F000D21F000017010000000C0058D2230000C9 +:10D6000018000000004C0040D22300001B00000066 +:10D6100000480040D21F00001C00000000500040E5 +:10D62000D23B00001F00000000100140D213000098 +:10D630002700000000140140D21F00002B00000052 +:10D6400000480040D21F00002B010000004C0040A9 +:10D65000D223000030000000004C0040D223000024 +:10D660003200000000500040D223000036000000CD +:10D6700000440040D21F0000390000000048004074 +:10D68000D21F000040000000007C0040D2230000B8 +:10D690004700000000780040D21F00005600000044 +:10D6A00000780040D21F0000690000000014014013 +:10D6B000D21F00007E000000004C0040D22300007A +:10D6C00089000000004C0040D223000099000000B7 +:10D6D000007C0040D2230000FFFF0000FFFFFFFF9F +:10D6E0000000000000000000004C0040D2230000B9 +:10D6F0000200000000440040D21F000009000000AA +:10D7000000100140D21F000009010000000C005869 +:10D71000D20F00000C000000004C0040D21B0000A3 +:10D720000F00000000780040D22F0000140000001D +:10D7300000780040D22F00001600000000100140C9 +:10D74000D21F00001601000000500040D23B000034 +:10D7500016020000000C0058D2230000190000003F +:10D76000004C0040D22300001A0000000048004096 +:10D77000D21F00001D00000000500040D23B0000FE +:10D780001E00000000100140D2130000260000001F +:10D7900000140140D21F00002A0000000048004091 +:10D7A000D21F00002A010000004C0040D2230000DC +:10D7B0002C00000000500040D22300003100000087 +:10D7C000004C0040D223000035000000004400401F +:10D7D000D21F00003800000000480040D21F0000A7 +:10D7E00041000000007C0040D223000048000000FF +:10D7F00000780040D21F0000570000000078004071 +:10D80000D21F00006E00000000140140D21F000073 +:10D810007D000000004C0040D22300009800000072 +:10D82000007C0040D2230000FFFF0000FFFFFFFF4D +:10D8300000000000536574537973436C6F636B2071 +:10D840006661696C65640A004932433132333A20BB +:10D85000496E76616C696420636C6F636B20736FD3 +:10D860007572636500493243343A20496E76616CC3 +:10D87000696420636C6F636B20736F7572636500FE +:10D880004932433A20756E6B6E6F776E20696E7306 +:10D8900074616E63650050696E6D617020657272AF +:10D8A0006F723A2077726F6E6720706F7274206E9D +:10D8B000756D6265722E004932433A2061626E6F67 +:10D8C000726D616C20636173652073686F756C6441 +:10D8D000206E6F742068617070656E6400000000D7 +:10D8E000A086010080380100C0D4010000000000C3 +:10D8F0007A0D0000FA0000005C120000A00F00008A +:10D90000800200001400000000000000801A0600E1 +:10D9100000E2040000530700000000008403000040 +:10D92000640000001405000058020000FA00000026 +:10D93000640000000000000040420F0000350C00B1 +:10D94000804F120000000000C20100003200000001 +:10D95000F4010000040100003C000000640000002D +:10D960000000000048414C5F5243435F4F736343E4 +:10D970006F6E666967204552524F520A0048414C0B +:10D980005F52434345785F506572697068434C4B02 +:10D99000436F6E666967204552524F520A004841F4 +:10D9A0004C5F4C5054494D5F496E6974204552524A +:10D9B0004F520A000080000010000000007D0000AF +:10D9C0001000000001000000020000000400000040 +:10D9D00008000000100000002000000040000000CF +:10D9E00080000000000100000002000000040000B0 +:10D9F00000080000001000000020000000400000AF +:10DA000000800000436F6D6D616E64207061726113 +:10DA10006D206572726F723A2077726F6E67206147 +:10DA20006464726573732073697A650A00496E765F +:10DA3000616C696420616C74206279746573207311 +:10DA4000697A650043616E6E6F7420696E697469EE +:10DA5000616C697A65205254432077697468204C60 +:10DA600053450A00506572697068436C6B496E6972 +:10DA70007453747275637420525443206661696CE8 +:10DA800065642077697468204C53450A0043616ED1 +:10DA90006E6F7420696E697469616C697A65205271 +:10DAA00054432077697468204C53490A00506572CA +:10DAB000697068436C6B496E6974537472756374F2 +:10DAC00020525443206661696C65642077697468EC +:10DAD000204C53490A0052544320696E69746961AD +:10DAE0006C697A6174696F6E206661696C65640A3D +:10DAF00000456E61626C6542797061737353686151 +:10DB0000646F77206572726F720A0048414C5F52F1 +:10DB100054435F53657444617465206572726F721B +:10DB20000A0048414C5F5254435F53657454696D19 +:10DB300065206572726F720A004572726F723A20C8 +:10DB40006E65772073657269616C206F626A6563C8 +:10DB500074206973207573696E672073616D652029 +:10DB60005541525420617320535444494F00466F2D +:10DB70007263654F73634F75746F66446565705368 +:10DB80006C65657020636C6F636B2069737375657A +:10DB90000D0A00466F7263655065726970684F7553 +:10DBA000746F6644656570536C65657020636C6F57 +:10DBB000636B2069737375650D0A000040420F00A6 +:10DBC00020000000000020202020202020202028ED +:10DBD0002828282820202020202020202020202025 +:10DBE000202020202020881010101010101010105D +:10DBF000101010101010040404040404040404049D +:10DC0000101010101010104141414141410101011B +:10DC100001010101010101010101010101010101F4 +:10DC20000110101010101042424242424202020201 +:10DC300002020202020202020202020202020202C4 +:10DC40000210101010200000000000000000000072 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD20000000000000000000280300241F00000085 +:10DD30001C0000001F0000001E0000001F0000006B +:10DD40001E0000001F0000001F0000001E00000059 +:10DD50001F0000001E0000001F0000001F00000048 +:10DD60001D0000001F0000001E0000001F0000003A +:10DD70001E0000001F0000001F0000001E00000029 +:10DD80001F0000001E0000001F0000002B2D0030AF +:10DD90003000785800412D46612D663839303132D7 +:10DDA00033343536375D00008CDD01088FDD010826 +:10DDB00092DD0108545A00474D54002531305B5E16 +:10DDC000302D392C2B2D5D256E004D256875256E67 +:10DDD0002E256875256E2E256875256E002F256801 +:10DDE00075256E3A256875256E3A256875256E008D +:10DDF000686C4C0000000000000000000000000003 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:0BF00000A01808010001001000011919 +:08F00C00CC12FE7F01000000A0 +:10F0140000000000810B0008450B0008150C0008D7 +:10F02400D5090008A10900089D090008A70F0008D8 +:10F03400AF0F0008AB0F0008A30F000891090008E8 +:10F044009109000891090008A5090008F10B0008BE +:10F0540009026F00030102C0FA0904000000FE0166 +:10F0640002060904000100FE01020709040002006F +:10F07400FE01020809210BFF0000101A01080B0110 +:10F084000202020100090401000102020100052438 +:10F0940000100105240100020424020205240601D3 +:10F0A400020705830308000909040200020A00009C +:10F0B40000070502020002000705820200020000A8 +:10F0C4000A060002000000400100010114000000D3 +:10F0D400B1210008BD210008ED2100080922000823 +:10F0E400892200082522000841220008120100029A +:10F0F4000000004041235F030002010203010000FD +:10F1040004030904320300000000000000000000B2 +:10F1140000000000000000000000000000000000EB +:10F1240000000000000000000000000000000000DB +:10F134000000000000000000D3C3010803C401085C +:10F14400B8080024B1220008F12200083123000885 +:10F15400B123000879230008A12200082AC4010869 +:10F16400D3B3FB0200000000000000000000000018 +:10F17400000000000000000000000000000000008B +:10F18400000000000000000000000000000000007B +:10F19400000000000000000000000000000000006B +:10F1A400000000000000000000000000000000005B +:10F1B400000000000000000000000000000000004B +:10F1C400000000000000000000000000000000003B +:10F1D400000000000000000000000000000000002B +:10F1E400000000000000000000000000000000001B +:10F1F400000000000000000000000000000000000B +:10F20400154800082B5F00082B5F0008FFFFFFFF75 +:10F21400FFFFFFFFFFFFFFFF0000000000000000F2 +:10F2240000000000000000000000000000000000DA +:10F2340000000000000000000000000000000000CA +:10F2440000000000000000000000000000000000BA +:10F2540000000000000000000000000000000000AA +:10F26400000000000000000000000000000000009A +:10F27400000000000000000000000000000000008A +:10F28400000000000000000000000000000000007A +:10F29400000000000000000000000000000000006A +:10F2A400000000000000000000000000000000005A +:10F2B400000000000000000000000000000000004A +:10F2C400000000000000000000000000000000003A +:10F2D400000000000000000000000000000000002A +:10F2E400000000000000000000000000000000001A +:10F2F400000000000000000000000000000000000A +:10F30400000000000000000000000000483F00244E +:10F31400C192010865930108F19001082D9201083A +:10F3240001000000100000000090D0030090D00302 +:10F33400010000002803002400000000E8DC0108AC +:10F3440008DD0108C8DC010800000000000000001E +:10F3540000000000000000000000000000000000A9 +:10F364000000000000000000000000000000000099 +:10F374000000000000000000000000000000000089 +:10F384000000000000000000000000000000000079 +:10F394000000000000000000B7DD0108B7DD01082F +:10F3A40001000000000000004A000000000000000E +:10F3B4000000000000000000000000000000000049 +:10F3C4000000000000000000000000000000000039 +:10F3D4004A000000000000000000000000000000DF +:10F3E4000000000000000000000000000000000019 +:10F3F40000000000000000001022002400000000B3 +:10F40400BD020008BD0F0008251E0008C524000821 +:10F41400D94800081149000861950008000000005F +:08F4240099020008000000003D +:040000050801731566 +:00000001FF diff --git a/bootloaders/OPTA/bootloader.hex b/bootloaders/OPTA/bootloader.hex new file mode 100644 index 000000000..1dcac61a9 --- /dev/null +++ b/bootloaders/OPTA/bootloader.hex @@ -0,0 +1,8008 @@ +:020000040800F2 +:10000000000008247D060008C9060008C90600088B +:10001000C9060008C9060008C9060008000000005B +:10002000000000000000000000000000B50500080E +:10003000C9060008000000004F0600085F0600081F +:10004000C9060008C9060008C9060008C906000854 +:10005000C9060008C9060008C9060008C906000844 +:10006000C9060008C9060008C9060008C906000834 +:10007000C9060008C9060008C9060008C906000824 +:10008000C9060008C9060008C9060008C906000814 +:10009000C9060008C9060008C9060008C906000804 +:1000A000C9060008C9060008C9060008C9060008F4 +:1000B000C9060008C9060008C9060008C9060008E4 +:1000C000C9060008C9060008C9060008C9060008D4 +:1000D000C9060008C9060008C9060008C9060008C4 +:1000E000C9060008C906000800000000C90600088B +:1000F000C9060008C9060008C9060008C9060008A4 +:10010000C9060008C9060008C9060008C906000893 +:10011000C9060008C9060008C9060008C906000883 +:10012000C9060008C9060008C9060008C906000873 +:10013000C9060008C9060008C9060008C906000863 +:10014000C9060008C9060008000000000000000001 +:10015000C9060008C9060008C9060008C906000843 +:10016000C9060008C9060008C9060008C906000833 +:10017000C9060008C9060008C906000800000000FA +:10018000C9060008C9060008C9060008C906000813 +:10019000C9060008C9060008C9060008C906000803 +:1001A000C9060008C9060008C9060008C9060008F3 +:1001B000C9060008C9060008C9060008C9060008E3 +:1001C000C9060008C9060008C9060008C9060008D3 +:1001D000C9060008C9060008C9060008C9060008C3 +:1001E000C9060008C9060008C9060008C9060008B3 +:1001F000C9060008C9060008C9060008C9060008A3 +:10020000C9060008C9060008C9060008C906000892 +:10021000C9060008C9060008C9060008C906000882 +:10022000C9060008C9060008C9060008C906000872 +:10023000C906000891550008C9060008C90600084B +:10024000C9060008C9060008C9060008C906000852 +:10025000C9060008C9060008C9060008C906000842 +:10026000C9060008C9060008C9060008C906000832 +:10027000C9060008C9060008C9060008C906000822 +:10028000C9060008C9060008C906000800000000E9 +:10029000C9060008C90600080000000000000000B0 +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F0004D4355626F6F742041726475696E6F0073 +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:10041000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:10042000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:10043000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B5054C237833B9044B13B10448AFF34D +:1005100000800123237010BD20040024000000008F +:10052000FCC5010808B5034B1BB103490348AFF3F1 +:10053000008008BD0000000024040024FCC5010860 +:10054000154B002B08BF134B9D46A3F5803A0021A5 +:100550008B460F461348144A121A18F0F7FB0F4B3C +:10056000002B00D098470E4B002B00D0984700205E +:10057000002104000D000D48002802D00C480DF0A9 +:1005800077F918F0DBF92000290014F073FA0DF068 +:100590003DFB00BF00000800000008240000000030 +:1005A000F94B01082004002458A5022471D8000842 +:1005B000000000001EF0040F0CBFEFF30880EFF303 +:1005C0000980816911F8021C002932D101B590E837 +:1005D0000F10E047BDE800508CE80300244B93E87F +:1005E0000600914208BF70471A6041B91EF0100F13 +:1005F00010D1204B186820F0010018600AE02CE9A7 +:10060000F00F1EF0100F08BF2CED108A81F822E0C9 +:10061000C1F838C0906B92F8221061F0FF0E1EF006 +:10062000100F08BFB0EC108AB0E8F00F80F3098813 +:100630007047114A13689942FAD801B552F821C09F +:100640000FC8E047BDE80050CCF80000704701B586 +:1006500014F018FDBDE80140EFF3098CBEE701B5C9 +:1006600014F052FDBDE80140EFF3098CB6E700003D +:100670002C01002434EF00E06CC30108DFF830D017 +:1006800004F0B8FF002103E00A4B5B5843500431EB +:1006900009480A4B42189A42F6D3094A02E000235D +:1006A00042F8043B074B9A42F9D3FFF749FF7047E2 +:1006B0000000082414F0010800000024180400249D +:1006C0002004002458A50224FEE70000264B022245 +:1006D00083F83E201B681A6A22F001021A621A6A25 +:1006E00042F001021A62214A934219D002F5806257 +:1006F000934215D002F57052934211D002F58062F8 +:1007000093420DD002F58062934209D0B3F1804F3D +:100710000ED19968164A0A40062A21D10020704756 +:100720005A6C42F400425A64104A9342EED1F0E708 +:10073000104A9342EDD002F580629342E9D002F56F +:1007400080629342E5D002F578429342E1D0A2F56F +:100750006C429342DDD01A6842F001021A60DDE774 +:10076000B2F5803FF7D1D9E76405002400000140CD +:10077000070001000004004008B5044B027853F85C +:10078000220003685B6B9847C0B208BD00000024DC +:1007900073B50E4600781146064A002452F8200030 +:1007A0000268CDE90034234695693246A84702B075 +:1007B00070BD00BF0000002410B5846802EB011278 +:1007C00001312023A03C0C32A4EB4111FFF7E0FFE4 +:1007D000003818BF012010BD024B6FF002021B68E9 +:1007E0001A61704764050024034B1A68D36823F02C +:1007F0000203D360704700BF64050024064B6FF00E +:1008000002021B681A615A6942F002025A61DA68F0 +:1008100042F00202DA60704764050024054B6FF075 +:1008200002021B6858631A61DA6842F00202DA6059 +:10083000704700BF64050024014B586A704700BF31 +:10084000000C0040064A1168CB6823F00203CB601D +:1008500092F83E30012B01D1FFF738BF704700BF3F +:1008600064050024074B084A13601A69910708D5EC +:10087000DA68920705D56FF0020204481A610DF09C +:10088000B3B87047000C00406405002464B101084F +:100890000048704714B101086AB101F00301074B29 +:1008A0000329596808D000F47060B0F5706F03D167 +:1008B00021EA02025A6070470A43FBE7000400582D +:1008C00030B5114B114DD5F894409C42FBD14943B2 +:1008D000012A01EB41034FEA41046FEA030304D00C +:1008E000022A0BD0C26813400BE0C26813401943C0 +:1008F000C160064B4FF440725A6130BDC26813406C +:100900002343C360F5E700BF000300800064025882 +:100910002DE9F04191F800E04B7874464E69012BC7 +:10092000354F4FEA4414DFF8D4C044D100F51065C8 +:100930002B19B6B91E6937401F611E6946F400269F +:100940001E611E6906EA0C06012A1E6122D10A698F +:1009500002B15A612B5943F004432B510020BDE8EA +:10096000F081D3F8108008EA0C0CC3F810C0D3F85B +:1009700010C00CEA07071F618F68BE421E6946F46B +:10098000002688BF4F611E614E691F69C6F31206BB +:100990003E43D9E72B5943F004432B514B69002BBD +:1009A000DCD00EF00F020123D0F8341893400B4333 +:1009B000C0F83438D2E700F5306003191D6905EA44 +:1009C0000C051D611D693D401D618D6806B14D61BD +:1009D0001E69C5F31205012A46F400261E611E6930 +:1009E00045EA06051D6102D1CA6802B15A61035980 +:1009F00043F004430351B1E7FFFF07E00000F8FFB5 +:100A00004E4A70B5946A966AD36A16F07C7FC6F334 +:100A10000551556C00F08D8007EE901AC3F300234A +:100A2000C5F3CC0104F00304F8EEE76A4B43012C54 +:100A3000B7EE006A07EE903AFAEEE97A6BD0022C34 +:100A40005BD0002C67D113689B0646D51168136CE8 +:100A5000C1F3C1013A4AC3F30803CA4007EE102AA2 +:100A6000F8EEC75A85EEA67A06EE903AF8EEE66AF8 +:100A700076EEA77A77EE867A304A67EE877A136C3D +:100A8000C3F3462307EE103AB8EEC77A37EE067A7C +:100A9000C7EE876AFCEEE66AC0ED006A136CC3F32A +:100AA000064307EE103AB8EEC77A37EE067AC7EE7D +:100AB000876AFCEEE66AC0ED016A136CC3F3066355 +:100AC00007EE103AB8EEC77A37EE066A87EE867AF6 +:100AD000BCEEC77A80ED027A70BD136CDFED195A57 +:100AE000C3F3080307EE103AB8EEC77A77EE277A19 +:100AF00077EE867A85EEA67ABEE7136CDFED125AA2 +:100B0000C3F3080307EE103AB8EEC77A77EE277AF8 +:100B100077EE867AEEE7136CDFED0C5AC3F3080329 +:100B200007EE103AB8EEC77A77EE277A77EE867A34 +:100B3000E0E7C0E900118160CEE700BF0044025841 +:100B40000090D0030024744C20BCBE4B0024744A97 +:100B50004E4A70B5946A966AD36A16F47C3FC6F31F +:100B60000531D56B00F08D8007EE901AC3F30013AA +:100B7000C5F3CC0104F00304F8EEE76A4B43012C03 +:100B8000B7EE006A07EE903AFAEEE97A6BD0022CE3 +:100B90005BD0002C67D113689B0646D51168936B18 +:100BA000C1F3C1013A4AC3F30803CA4007EE102A51 +:100BB000F8EEC75A85EEA67A06EE903AF8EEE66AA7 +:100BC00076EEA77A77EE867A304A67EE877A936B6D +:100BD000C3F3462307EE103AB8EEC77A37EE067A2B +:100BE000C7EE876AFCEEE66AC0ED006A936BC3F35A +:100BF000064307EE103AB8EEC77A37EE067AC7EE2C +:100C0000876AFCEEE66AC0ED016A936BC3F3066384 +:100C100007EE103AB8EEC77A37EE066A87EE867AA4 +:100C2000BCEEC77A80ED027A70BD936BDFED195A86 +:100C3000C3F3080307EE103AB8EEC77A77EE277AC7 +:100C400077EE867A85EEA67ABEE7936BDFED125AD1 +:100C5000C3F3080307EE103AB8EEC77A77EE277AA7 +:100C600077EE867AEEE7936BDFED0C5AC3F3080359 +:100C700007EE103AB8EEC77A77EE277A77EE867AE3 +:100C8000E0E7C0E900118160CEE700BF00440258F0 +:100C90000090D0030024744C20BCBE4B0024744A46 +:100CA000002070476FF0570070476FF05700704793 +:100CB000036810B49C6C0023A4461A465DF8044BEC +:100CC00060476FF05700704743680A46196810B4D0 +:100CD0008C6D8168184623465DF8044B18474368BD +:100CE00081681A681846526D1047436881681A680F +:100CF0001846126D1047436881681A681846D26C0E +:100D0000104730B4446813462268956C0A468168DF +:100D10002046AC4630BC6047436881681A68184674 +:100D2000526C1047436881681A681846126C104765 +:100D300030B4446813462268D56B0A468168204661 +:100D4000AC4630BC604730B4446813462268956BAB +:100D50000A4681682046AC4630BC604710B5044660 +:100D6000406830B10368A1685B6B984700236360FB +:100D700010BD6FF01500FBE738B50446FFF7EEFF36 +:100D80000546236820465B689847284638BD70B5FD +:100D90000D464168044641B929680E6B00F108010F +:100DA0002846B04700B9656070BD6FF01500FBE7DD +:100DB000044B10B50360044643680BB1FFF7CEFF48 +:100DC000204610BDE8AF0108034B10B50446036090 +:100DD000FFF7EEFF204610BD74B00108436881683C +:100DE0001A681846526F1047436881681A68184697 +:100DF000126F1047436881681A681846D26E104710 +:100E000043680A46196810B48C6E816818462346F8 +:100E10005DF8044B184710B50446406830B10368CC +:100E2000A1681B6E98470023636010BD6FF015002A +:100E3000FBE738B50446FFF7EEFF0546236820467A +:100E40005B689847284638BD38B5436804460D4668 +:100E500043B90B6800F108012846DB6D984700B9DB +:100E6000656038BD6FF01500FBE70000044B10B55E +:100E70000360044643680BB1FFF7CDFF204610BD69 +:100E8000BCAF0108034B10B504460360FFF7EEFF4B +:100E9000204610BD48B001080368013303600020FC +:100EA0007047F7B5089F0E4604681946C0690023CD +:100EB000256800970027E0FB0623204601976D690F +:100EC000A84703B0F0BDF7B5089F0E460468194661 +:100ED000C0690023256800970027E0FB0623204611 +:100EE0000197AD69A84703B0F0BD37B50468C36981 +:100EF00000202268009301902046D569A1FB0323BE +:100F0000A84703B030BD006803681B691847002874 +:100F100007DC10F1160F04DA10F1340F08BF6FF080 +:100F2000890070470B4640F20112002170B504465B +:100F3000184617F00BFF03466068A1680268556EFB +:100F40001A462B46BDE870401847000010B50CF05B +:100F5000BBFC134B1348144A596A14680388116088 +:100F60001B1B0B440146B3F5803F16D34FF47A7137 +:100F7000B3FBF1F201FB1233038006E00132A3F56B +:100F80007A73B3F57A7FF9D20B80084C23681A4440 +:100F900022600CF085FC206810BD0022F1E700BF44 +:100FA000000C0040680B02246C0B0224F00C02249D +:100FB00070B504460D4616462368DB6935EA03031F +:100FC00001D1002017E0FFF7C1FF801B2368B0F1BB +:100FD000007F1A6810D322F4D0721A609A6822F047 +:100FE00001029A602023C4F88430C4F888300023BA +:100FF000032084F8803070BD5107DDD5DA69120511 +:10100000DAD54FF400621A621A6822F4D0721A60BC +:101010009A6822F001029A602023C4F88430C4F850 +:101020008830C4F88C30E2E7F8B53A4C06460D46F5 +:10103000A36A03F00303032B69D0236823F08053D2 +:101040002360FFF783FF074623689A004BD4A36A07 +:10105000326823F07C7343EA0253A362B368F268F8 +:10106000013B013A5B0212049BB202F4FE021343FD +:101070007268013AC2F3080213433269013A120658 +:1010800002F0FE4213432364E36A726923F440636F +:101090001343E362E36AB26923F400731343E36228 +:1010A000E36A23F48073E362636CF26923F47F43A1 +:1010B00023F0F80343EAC2036364E36A43F48073F2 +:1010C000E362E36AB5B943F48003E362114C236839 +:1010D00043F080532360FFF739FF054623689B00E8 +:1010E0000FD5002005E0FFF731FFC01B0228ABD968 +:1010F0000320F8BD012D0CBF43F4000343F08073BF +:10110000E3E7FFF723FF401B0228E7D9F0E70120C0 +:10111000EFE700BF00440258F8B53A4C06460D46CA +:10112000A36A03F00303032B69D0236823F08063D1 +:101130002360FFF70BFF074623681A014BD4A36A0D +:10114000326823F47C3343EA0233A362B368F26863 +:10115000013B013A5B0212049BB202F4FE0213430C +:101160007268013AC2F3080213433269013A120667 +:1011700002F0FE421343A363E36A726923F0C003E3 +:101180001343E362E36AB26923F020031343E3628B +:10119000E36A23F01003E362E36BF26923F47F4315 +:1011A00023F0F80343EAC203E363E36A43F0100366 +:1011B000E362E36AB5B943F40023E362114C2368A8 +:1011C00043F080632360FFF7C1FE054623681B01DF +:1011D0000FD5002005E0FFF7B9FEC01B0228ABD9F0 +:1011E0000320F8BD012D0CBF43F4801343F400131A +:1011F000E3E7FFF7ABFE401B0228E7D9F0E7012049 +:10120000EFE700BF004402582DE9F041DDF81880F7 +:1012100004460E4615461F4622689368334214BFA3 +:1012200001230023AB4201D1002012E0B8F1FF3FBF +:10123000F3D0FFF78BFEC01B404502D8B8F1000F7A +:10124000EAD10423012084F84130636C43F00103A8 +:101250006364BDE8F0812DE9F04F054685B00C468A +:10126000FFF774FE95F8402007EE900A012A00F07F +:10127000E1800122022085F8402095F84120012AD2 +:1012800040F0BE80002241F2883117EE903ACDED59 +:10129000037A6A640091202185F841002846FFF70F +:1012A000B3FFDDED037A002840F0AA80D4F824C013 +:1012B000BCF1000F03D0A26A2968013A0A61D4F890 +:1012C00018A0D4E90727BAF1000F50D063694CEA9F +:1012D0000A0AD5F800E026684FEA834BD4F8348038 +:1012E000D4E90B1967B3A36847EA0A0A2769CEF85D +:1012F0001C30BAB132431143E26841EA090949EAB4 +:10130000080848EA0707174347EA0B0747EA0A07AE +:10131000CEF814706268CEF81820BCF1000F40F0CF +:10132000818062E0314341EA090949EA080848EA54 +:10133000070747EA0B0747EA0A07CEF81470ECE7FD +:1013400052B142EA06070F4347EA090747EA08088D +:10135000E76848EA0707D7E746EA010747EA0907C7 +:1013600047EA080747EA0B0B4BEA0A07E5E737B3FA +:10137000A1684CEA0707D5F800E02669CEF81C10F2 +:101380006169D4F834808904D4E90BA96AB1324385 +:10139000E36842EA0A0A4AEA090949EA080848EA07 +:1013A000030848EA01010F43B2E746EA0A0646EAA3 +:1013B000090949EA080848EA01010F43BDE78AB173 +:1013C000E16A4CEA02020A43216B0A43616B0A4359 +:1013D000E1680A43616942EA814229684A616268B8 +:1013E0008A619AE7BCF1000F10D141F2883217EE02 +:1013F000903A0221284600920122FFF705FFA8B18A +:10140000002385F8403005B0BDE8F08FE36A226B19 +:101410004CEA03031343626B1343626943EA82435A +:101420002A685361012385F84130E9E72B680222DD +:10143000DA60F7E70220E6E738B50C4B04460C4DBE +:1014400003600023C0E9013101230373284610F033 +:10145000B1FE09F01BFD074B28461A681C6062604C +:1014600010F0A8FE09F0F2FC204638BDC8B0010813 +:10147000D8060024D406002413B50C46A4300190ED +:1014800009F004FDA469019809F0E0FC204602B0CF +:10149000BDE81040FFF73BBD37B50D46A4300190C5 +:1014A00009F0F4FCEB696C6913F4003F019803D078 +:1014B0002B6A9C4238BF1C4609F0C8FC204603B08A +:1014C000BDE83040FFF723BD13B50C46A4300190B2 +:1014D00009F0DCFC246A019809F0B8FC204602B04F +:1014E000BDE81040FFF713BD10B50446FFF76CFCD4 +:1014F000204617F0C1FB204610BD10B50446FFF78B +:10150000C1FC204617F0B8FB204610BD10B50446BC +:10151000FFF74EFC204617F0AFFB204610BD10B57C +:101520000446FFF7A3FC204617F0A6FB204610BD9B +:1015300037B50546A4300C46019009F0A7FC05F12B +:1015400024026B6A01981BB19C420DD12368136081 +:1015500009F07CFC14B1204617F08EFB002003B08C +:10156000BDE83040FFF7D3BC1A461B68EBE700002C +:101570002DE9F04FE9B0054693460F46442200217D +:1015800015A8984617F0E2FBEA6D42F2107359462F +:10159000073215A82393D2080DF07CFF04460028DB +:1015A00040F0D18105F1340108F10C000DF0E2FEAC +:1015B000002840F0A38005F1280140460DF0DAFE36 +:1015C000B0FA80F35B090593EB6DB3F5C07F2CBFD8 +:1015D000052204220392059A12B1039A0132039262 +:1015E000039A934298BF0222013B02F1FF39039212 +:1015F000012202FA09F206929DF818200492039A39 +:101600001344B3FBF2F30293059B13B16E6F002EEC +:101610005ED12421069818F03DFE0646002800F011 +:10162000958100244FF0240A0AFB046001340DF078 +:101630006DFE049AE3B29A42F6D8414630460EF067 +:10164000BDFA044600286ED1029B804603FB09FACE +:101650004FF00109D04553D10DF198090022012323 +:10166000484603EBC30101325B0006EB8101DBB2AC +:1016700040F8041B04999942F3D826A928460FF094 +:10168000E7FF044600284ED14FF0010808EBC803DD +:10169000C24606EB830352460AF1FF3A002A6BD199 +:1016A0004FEA4808049B5FFA88F84345EED82423A4 +:1016B0000132069991426DD14A1E284626A90FF0A3 +:1016C000C7FF044678BB059B13B1069B6E67AB67EB +:1016D000002405F14C0801230DF124092146404660 +:1016E0000E94C9F80840C9E90034CDE90C340DF076 +:1016F000AAFF012853D0A4F59F4414E0059463E7A2 +:10170000029BB8FBF3F009FA00F12423C9B203FBF2 +:101710000162029B03FB1080E8B1114628460FF0DE +:1017200003FB044628B315A80DF01EFD442115A89F +:101730000CF0A0FF42F2107323936B6FB34202D000 +:10174000002E40F0128114B138460EF0C4F8204645 +:1017500069B0BDE8F08F49081046079201EBC1015E +:1017600006EB81010EF02AFA079A04460028D4D02D +:10177000D9E708F101086DE724222846079302FB08 +:101780000AF1721819440FF015FC079B0446002853 +:1017900081D0C8E703FB026149F8041B88E72146B2 +:1017A00058460DF050FFB0FA80FA594648460EF000 +:1017B000D9F904464FEA5A1A00BB5A4641460CA8CA +:1017C0000EF08DFE0446C8B952460CA948460EF0EC +:1017D0002BF8044690B9029B0DF19808014626A803 +:1017E0005A1CA34617F0B2FA4346029A5A454FD103 +:1017F0004FF0000E4FF0010CE34565D20CA80EF03F +:1018000049F809A80EF046F8002C8CD10CA80DF16F +:1018100098080DF07BFD029B3246394618F80330DC +:1018200028460093049B0EF0A1FE044688B90121CE +:1018300007F118000DF058FF044650B915AB4D4A9A +:10184000394628460FF006FA044610B9029B002BD1 +:101850005BD10CA80EF031F8002C7FF464AF524637 +:10186000394628460EF05EFE044600287FF45BAF42 +:1018700015AB404A394628460FF0ECF904460028DB +:101880007FF451AF394628460FF094FE04464AE7EC +:101890005946002248460591CDE906320DF0D3FEA7 +:1018A000079A069B9040029993F800C001324CEAD7 +:1018B0000000187008460599014403989042E9D841 +:1018C0000BF1010B013390E798F801000CF1010CCA +:1018D00098F8002080EA0E0300EA0E00D9435BB2BC +:1018E00001F0010112FB01F252B203EA0209534076 +:1018F00008F8013F49EA000E18F8013C5FFA8EFE35 +:1019000043EAC11108F8011C76E7029B3A463946C2 +:101910002846013B02930FF007FA90B9029B32462A +:101920000CA9284613F808300093049B0EF01EFE05 +:1019300038B90CAB3A46394628460FF03BFB002835 +:1019400084D0044685E700260496ECE60A4CEAE6D5 +:1019500008FB056001350DF0BEFFEBB2049A9A4218 +:10196000F6D8304617F088F9EDE600254FF0240848 +:10197000F3E700BF79F2000880B2FFFF2DE9F04FD6 +:101980002DED028BBBB004460E46914608EE103A90 +:101990000DF0E6FC022840F09D814422002129A898 +:1019A00020AD17F0D3F942F2107328460127379380 +:1019B0000DF0ACFCE26D0023494629A807320493E0 +:1019C000D208CDE902730DF065FD0346002862D10F +:1019D00018EE101A02A80EF0C5F8034600285AD1D6 +:1019E00018EE101A28460EF0E9F80346002852D1E6 +:1019F000394630460DF078FE034600284BD106F1FB +:101A00001807014638460DF06FFE0346002842D104 +:101A100004F1040B06F10C000DF03CFF594628467A +:101A20000DF0A8FC00282EDA29ABB34A294620463F +:101A30000FF0C6F8034670BB48464FF001080DF0A2 +:101A40005DFD431E0093009B01333FD129ABAA4AA1 +:101A5000314620460FF0B4F80346E0B95A463946FD +:101A600038460FF0D3FB0346A8B93B463246314611 +:101A700020460EF0A9FF034668B9012138460DF053 +:101A800033FE034607E05A46294628460EF0F3F98E +:101A900003460028C2D029A800930DF065FB44211D +:101AA00029A80CF0E7FD42F2107220A837920DF041 +:101AB00004FF02A80DF0EEFE009B002B00F00B814E +:101AC00018463BB0BDEC028BBDE8F08F009948464C +:101AD0000DF0B9FD29465FFA80FA304652460DF006 +:101AE00065FE03460028D6D1524626A938460DF099 +:101AF0005DFE03460028CED13B461F90324605A925 +:101B0000CDE90580CDE90708CDE90900CDE90B80D5 +:101B1000CDE90D08CDE90F00CDE91180CDE913081D +:101B2000CDE91500CDE91780CDE91908CDE91B00F5 +:101B3000CDE91D8020460EF06FFD0346002840F0E1 +:101B4000938005AB08A920461A460EF03DFF0346D8 +:101B5000002840F089803B4632460BA920460EF013 +:101B60006BFD034600287FD10BAB0EA920461A4619 +:101B70000EF02AFF0346002876D10EAB08AA11A961 +:101B800020460EF059FD034600286DD126AB2A46AB +:101B900014A920460EF040FD0346002864D126AB70 +:101BA0002A4617A920460EF047FD034600285BD1C0 +:101BB00005AB17AA1AA920460EF006FF0346002817 +:101BC00052D10BAB14AA1DA920460EF0FDFE034610 +:101BD000002849D11DAB1AAA294620460EF01CFD4B +:101BE0000346002840D12B462A46294620460EF0BF +:101BF000EBFE0346002837D11DAB1AAA26A92046C2 +:101C00000EF01AFD034678BB26AB20461A4619464D +:101C10000EF0DAFE034638BB26AB02AA2046194670 +:101C20000EF0D2FE0346F8B90EAB08AA31462046A4 +:101C30000EF0CAFE0346B8B911AB04F110023946E2 +:101C400020460EF0C1FE034670B93B460EAA394647 +:101C500020460EF0E1FC034630B93B4611AA394656 +:101C600020460EF0B1FE034605A801930DF012FECA +:101C700008A80DF00FFE0BA80DF00CFE0EA80DF03D +:101C800009FE11A80DF006FE14A80DF003FE17A81A +:101C90000DF000FE1AA80DF0FDFD1DA80DF0FAFDD7 +:101CA000019B002B7FF4F7AE5246294630460DF0DB +:101CB0007DFD034600287FF4EEAE524626A9384645 +:101CC0000DF074FD009B013B0093034600283FF498 +:101CD000BAAEE0E6094B204600930DF041FB012827 +:101CE000009B7FF4EDAE18EE103A4A46314620468E +:101CF000FFF73EFC0346E3E679F2000880B0FFFF01 +:101D0000F7B505460C461046012116461F460DF054 +:101D100074FB30B93946204603B0BDE8F0400DF001 +:101D20004DBF4FF0FF3130460DF067FBA0B939468B +:101D300020460DF043FF10BB04F10C020146104693 +:101D400001920DF05AFB019AC8B1291D104603B04B +:101D5000BDE8F0400EF0C3BB314628460DF084FCD0 +:101D600068B9394628460EF07BFE40B93B463246FC +:101D70002146284603B0BDE8F040FFF7FFBD03B0A1 +:101D8000F0BD30B58FB00C461946139DFBB1002352 +:101D9000CDE906330893130F8DF82430130D8DF819 +:101DA0002530130B12098DF826308DF827204FF4BB +:101DB0008E72237802FB0300129B05AA05930AABDF +:101DC0000430009306ABCDE901550FF087FD0FB04D +:101DD00030BD37B50223154601AA04460FF00CFDAD +:101DE00018B9019B1BB96FF0630003B030BD2368C5 +:101DF00093F90030002BF6DB019B3BB12268117890 +:101E0000A1B1042BEFD801D10B06ECD400232B6039 +:101E1000019B5A1E0192002BE7D02368296813F812 +:101E2000012B42EA01222A602360F1E70132013BE3 +:101E300022600193E0E70000F8B50A23684E0546EA +:101E40000C46036033681BB90FF048FF0123336071 +:101E500005F108032A46214604F1100042F8043F28 +:101E60008B78043111F8034C1B0443EA042311F866 +:101E7000044C234311F8014C884243EA046342F8BE +:101E8000043FEDD12B680C2B2ED00E2B5DD00A2BEE +:101E900028D128465349544D00F1A006426910301C +:101EA00055F8044B50F8087CC2F307237C40CB5C08 +:101EB0006340140E0C5D83EA0443D4B20C5D83EAE4 +:101EC0000463C2F307440C5D83EA042350F8044C16 +:101ED000836063400468C3606340036153404361AF +:101EE0008642DBD10020F8BD28463F4CC0353D4935 +:101EF000C269183054F8046B50F8107CC2F3072301 +:101F00007E40CB5C7340160E8E5D83EA0643D6B2EC +:101F10008E5D83EA0663C2F307468E5D83EA06237D +:101F200050F80C6C8360734050F8086CC3607340C9 +:101F300050F8046C03617340066843617340836129 +:101F40005340C3618542D3D1CCE728462549264D6D +:101F500000F1E006446A203055F8042B50F8187C54 +:101F6000C4F307237A40CB5C50F8087C5340220E20 +:101F70008A5C83EA0243E2B28A5C83EA0263C4F3C6 +:101F800007428A5C83EA022350F8142C8360534092 +:101F900050F8102CC360534050F80C2C0361534090 +:101FA000DAB243618A5C7A401F0ECF5D82EA076233 +:101FB000C3F30727C3F30743CF5DCB5C82EA072255 +:101FC00082EA034350F8042C836153400268C361E2 +:101FD00053400362634043628642BBD182E700BF45 +:101FE000000700243C0400243C050024F8B50378D5 +:101FF00090F801C0012B057F0279077B8668447940 +:102000002ED0022B2FD0002B30D14FF480738B6158 +:102010000023C1F800C04D614B63C1E90B333FB3EE +:10202000CB61CB60037C012B45D0022B48D0002B29 +:102030004BD14FF480430B620123027E002A47D02C +:1020400000230B620B61437F012B6AD0022B6BD004 +:10205000002B6CD14FF0807300204B628862F8BD7A +:102060004FF40073D3E74FF44073D0E70023CEE77B +:10207000012A4E600BD0022A0CD072B94FF4806353 +:10208000CB61032C09D8DFE804F00B0D10134FF4DB +:102090000063F5E74FF44063F2E727480BF0DCFDFF +:1020A0000023BEE74FF48053BBE74FF40053B8E77B +:1020B0004FF44053B5E74FF400430B620223BCE7F3 +:1020C0004FF440430B620423B7E700230B62B4E7ED +:1020D0007BB3427CB2FBF3F403FB142414F0FF0F38 +:1020E00027D1561EF610741C042C22DCC2EBC4024D +:1020F00012F0FF0210D0B2FBF3F39D4219D3EB1A9A +:102100004B61436903FA02F28A60032E07D8240464 +:10211000A4F580340C6196E743698B60F5E70748C6 +:10212000BCE74FF0007397E74FF0407394E700234C +:1021300092E74FF0FF3092E774AB01089DAB0108C6 +:10214000F0B593B004460846164604A91D46FFF7AD +:102150004DFF48B92B6804A920460E93FFF77BF882 +:10216000074618B14FF0FF3013B0F0BDFEF7EEFE9A +:1021700025680346A96994F84020012AF2D001227B +:1021800084F8402094F84120012AD0B246D16764F7 +:10219000002E3ED0222284F841202A690132A26317 +:1021A0002A69266341F28836013262636A6922F045 +:1021B000406242F080626A61A961A26BA2B9012209 +:1021C000022120460096FFF71FF810B9236802226B +:1021D000DA60012384F841300023C01A84F84030CB +:1021E00018BF01204042BFE7012206212046009689 +:1021F0000393FFF709F80028EBD195F82010226B24 +:10220000039B1170226B01322263A26B013AA2631D +:10221000D3E7636C43F008036364DDE70220DBE788 +:1022200070B500F1A4060C460546304608F02EFEB7 +:1022300004F11002214605F1140006F085FC38B9BE +:10224000236963606369A3600E23A3611023E360C5 +:102250003046BDE8704008F0F9BD2DE9F041064672 +:1022600000F1A4070C4615461436384608F00EFE59 +:1022700004F110022146304606F066FCD0B923690D +:1022800004F12408A56163606369A3601023E3601F +:10229000216A21F000439D4201D8E5600AE000294F +:1022A000A5EB030506DA42462146304606F04CFC13 +:1022B0000028EDD03846BDE8F04108F0C7BD000069 +:1022C0002DE9F04100F1A408C8B00E46054640468D +:1022D000174608F0DBFD4FF48472002106A816F0C3 +:1022E00035FDB36914350E2B22D12223364908A8B7 +:1022F0008DF8183017F016FB0F230124B361404608 +:1023000008F0A4FD012C0DD19DF81830112B59D0E7 +:10231000222B14BF0023032308A9384687F8003175 +:1023200017F000FB204648B0BDE8F041FEF7EFBDD6 +:102330000F2B08D12223254908A88DF8183017F053 +:10234000F1FA1023D9E702AA3146284606F0D0FF59 +:10235000044618B1821C08BF0024D0E79DF80C3059 +:1023600003F07F02112A01D0222AECD11B060CD5E2 +:1023700004A9284607F02CF8041EC0DBE3D19DF821 +:102380000C3003F07F038DF80C309DF80C3028469C +:10239000029A112B8DF8183002F104029DF80E10EC +:1023A00004BF059B07939DF80D301A449DF80F302C +:1023B0000A440093716808AB06F0B9FB041E08BF1D +:1023C00001249CE70523A7E7B5AB0108B4AB0108DE +:1023D00030B500F1A40585B0044628460193CDE947 +:1023E000022108F053FD039904F11400DDE90132E4 +:1023F00006F0BCFD0446284608F028FD204605B03E +:10240000BDE83040FEF783BD2DE9F04100F1A4089E +:1024100005460E46144640461F4608F037FD05F1B6 +:102420001400314606F038FD054670B93FB1012F62 +:10243000336A01D11C4402E0022F0ED01C46002C4E +:10244000AABF25466FF015053462404608F0FEFC31 +:102450002846BDE8F041FEF75ABD7369EAE737B593 +:1024600000F1A40504460191284608F00FFD0199EA +:1024700004F1140007F04EFA0446284608F0E6FC82 +:10248000204603B0BDE83040FEF741BDF8B500F18D +:10249000A40705460C46384608F0F8FC214605F12D +:1024A000140007F037FA05F1200206462B6A1BB12B +:1024B0009C4216D123681360A3690BB11B682BB92A +:1024C0006B695B6B13B9606B16F0D6FB384608F08E +:1024D000BDFC204616F0D0FB3046BDE8F840FEF7C4 +:1024E00016BD1A461B68E2E730B500F1A40585B0B9 +:1024F000044628460193CDE9022108F0C7FC039960 +:1025000004F11400DDE9013206F063FE04462846BA +:1025100008F09CFC204605B0BDE83040FEF7F7BC53 +:102520002DE9F341064614460021282206F1A407AE +:102530002046002516F00AFC384606F114080195DD +:1025400008F0A4FC06F1180006F0E7FA28B901AA81 +:102550000D49404606F05EFB0546384608F076FC1D +:102560006DB9736F019AC4E90033B36FC4E90235E2 +:102570009B1AC4E90435C4E90635FF236362284683 +:1025800002B0BDE8F08100BF990E00082DE9F041CE +:10259000804600F1A406D4B00C4608F1140730467A +:1025A000154608F073FC02AB03AA07A9384602944B +:1025B00007F0EAF90446C0B901464FF4847212A844 +:1025C00016F0C4FB9DF8103008F1180105A8112B76 +:1025D0008DF8483004BF069B139306F08DFA04462D +:1025E000C0B9174914A817F09DF9304608F02EFC21 +:1025F000139B2B619DF84830112B1DD0222B44F2E8 +:10260000FF1318BF002320466B6054B0BDE8F041B3 +:10261000FEF77DBC039B38469DF8111004339DF8EE +:10262000122019449DF813300A440093089914AB02 +:1026300006F07DFA0446D8E748F2FF13E3E700BF4F +:10264000B7AB0108F0B500F1A40605469FB00C46F3 +:10265000304605F1140708F019FC95F8543003943E +:10266000002B43D003AB04AA08A9384607F08CF925 +:10267000831C044649D12F21039817F08DFF0028B1 +:102680003AD16B6913A938461B6AEB6407F02CFA40 +:102690000446002830D1119B024613A91C93129BBB +:1026A0001D930346384606F05CFF044620BB40F607 +:1026B00022038DF81600ADF81430039B18460193E1 +:1026C00017F038F91499159A8DF8170038460691C5 +:1026D0000792019BCDE9111204AA08A907F030FA6C +:1026E000044648B96B691B6AEB6405E0384606F09E +:1026F000A7FE04460028B5D0304608F0A7FB2046C8 +:102700001FB0BDE8F040FEF702BC002808BF6FF024 +:102710001004F1E7F0B500F1A40504469DB00F46A2 +:10272000284604F1140608F0B1FB94F854300197E0 +:1027300083B101AB02AA06A9304607F025F9044689 +:1027400078B1284608F082FB20461DB0BDE8F04075 +:10275000FEF7DDBB304606F073FE04460028E8D0E5 +:10276000EFE79DF80C30222B1ED002AA06A93046B6 +:1027700007F043F804460028E3D19DF80C30222BE3 +:10278000DFD106AA12A9304606F087FD041ED8DB69 +:102790001A9B06A930460F931B9B109300231A46E1 +:1027A00006F0DFFE0446CCE704AA11A9304606F085 +:1027B000CBF904460028C4D1199B142BD5D06FF057 +:1027C0002604BEE72DE9F04300F1A4058046B3B02E +:1027D0000F462846144608F059FB98F8543008F183 +:1027E0001406CDE90274002B4DD0029B05AA11A955 +:1027F0003046049304AB07F0C7F80446002848D1DC +:102800009DF8183005AA11A963F07F038DF81830E0 +:102810000346304607F065F80446002839D10DF12B +:10282000240903AB1CA930464A4607F0ADF8074619 +:10283000002837D0821C40F085802F21039817F0A4 +:10284000ABFE00287ED10DAC99E80F0084E80F00A4 +:1028500006AA0EAB07CA83E807009DF8383003F0DC +:102860007F038DF83830039B1846019317F062F808 +:10287000BB1C8DF83B00019B2CD122461CA9304685 +:1028800007F05EF92BE0304606F0DAFD044600283A +:10289000ABD0284608F0DAFA204633B0BDE8F04362 +:1028A000FEF735BB9DF818309DF8282003F07F0314 +:1028B0009A4249D1222AC6D10BAA27A9304606F04E +:1028C00043F904460028E4D12F9B142BBBD06FF0B2 +:1028D0002604DEE722461CA9304607F002F804462B +:1028E0000028D6D1012305AA11A9304688F8553011 +:1028F00002AB07F049F804460028CAD188F8550011 +:10290000814605AA11A9304606F077FF0446002843 +:10291000BFD10237BDD09DF82830222BB9D11CAAD7 +:1029200028A9304606F0B9FC041EB2DB309B4A46AB +:102930001CA930462593319B26934B4606F011FE89 +:102940000446A6E73C46A4E76FF01404A1E70000A4 +:102950002DE9F04F00F1A4080646C3B00D464046ED +:1029600008F094FAD6F8903063B1002D08BF1D46E8 +:10297000336830469B6A9847044668B1404608F081 +:1029800065FA05E045B96FF01204404608F05EFABA +:10299000204643B0BDE8F08F2B6828469B68D6E9F7 +:1029A00025BAD6E92797984704460028E6D124227D +:1029B000014628A816F0CAF96A4B284623952493A5 +:1029C000694B2593694B2693694B27932B685B6A68 +:1029D00098472B6858452CBF2890CDF8A0B02846C2 +:1029E0009B6A98472B6850452CBF2990CDF8A4A02E +:1029F0002846DB6A98472B6848452CBF2A90CDF8BB +:102A0000A89028469B6B984723462A9A18F07AF894 +:102A10002B901F3023A920F01F00B84294BF2C90A8 +:102A20002C9731A806F02DF80446002840F0868047 +:102A3000319B014640985A6AD20816F087F9319ABC +:102A40000DA931A83C94D2E90832CDE93E439A421F +:102A500094BF3D923D9307F047F80446002869D1A2 +:102A600018A931A807F040F80446002862D10346AF +:102A7000024618A931A806F074FD0446002859D171 +:102A800041F22E438DF816001A9F4FF01009ADF851 +:102A900014300823DDF864C08DF81730319B33976C +:102AA000DA691B6A089209934FF00113314A0A93BD +:102AB0000BAB106851686A46CDF8C8C0CDF81090CD +:102AC000CDF8009003C334230DA931A8159320231A +:102AD000CDE906C7CDE916C705AF0193CDE902736D +:102AE000012306F03EFD4B4620B110F1340F02D019 +:102AF00004461FE00124009320236A460DA9039396 +:102B000031A8CDE90137012306F02BFD20B110F1EA +:102B1000340FEDD1002CEBD0002201230DA931A8F8 +:102B2000CDE900236A4606F00FF8044610B9319B40 +:102B30001B6A3F9331A805F08DFF6CB12046FEF76C +:102B4000E6F9044600287FF419AF33682946304679 +:102B50005B6A9847044611E72B682846DB6898476C +:102B6000EFE700BFA30E0008C70E0008EB0E000839 +:102B7000070F0008B9AB010870B500F1A4060546BF +:102B8000304608F083F9D5F8904064B105F114009F +:102B900005F060FFD5F890000368DB6898470023D4 +:102BA0000446C5F89030304608F050F9204670BD14 +:102BB0002DE9F04300F1A4070D46044699B03846CC +:102BC00008F064F9C4F890502B6828469B68984731 +:102BD000064648B10023C4F89030384608F036F96C +:102BE000304619B0BDE8F0832422014604F16C00A0 +:102BF00004F1580916F0AAF8404BA5652846E3658C +:102C000004F114083E4B23663E4B63663E4BA366BD +:102C10002B685B6A9847D4F8943083422CBFE366F4 +:102C2000E06628462B689B6A9847D4F89830834220 +:102C30002CBF2367206728462B68DB6A9847D4F8A7 +:102C40009C3083422CBF6367606728462B689B6B70 +:102C50009847626F334617F055FFA0671F30D4F8CE +:102C6000A030494620F01F00834294BFE367E0672D +:102C7000404605F006FF0546002833D1636902AAE5 +:102C80000DA940461B6AA664E364012302960393E0 +:102C9000C4E9106605F058FF054600BB202310224A +:102CA0000E994046009305AB05F041FF0546B0B9CB +:102CB000069B082215490BA8A361079BE36117F047 +:102CC0009FFB064648B90A9B1A0C012A02D19BB207 +:102CD000012B82D96FF0150501E06FF033054046F6 +:102CE00005F0B8FE00233846C4F8903008F0AEF87E +:102CF000284619B0BDE8F043FEF709B9A30E000855 +:102D0000C70E0008EB0E0008070F0008B9AB01085A +:102D10000C4B03F10802883310B50446026043608F +:102D2000FFF72AFFD4F8A40012F0CAFA064B204697 +:102D300003F108023433226040F8043F0FF032FB05 +:102D4000204610BD24AF0108BCAE0108A0F104006C +:102D5000FFF7DEBF10B50446FFF7DAFF204615F097 +:102D60008BFF204610BDA0F10400FFF7F3BF000069 +:102D7000F0B57E4D85B015F04FF97D4B00212860F0 +:102D80007C4800247C4A83F820401A605C62C3E9D6 +:102D900004014FF4F0100021C3E90144C3E9060126 +:102DA00013F0CAFD68B9754C23781BB914F01CFEEA +:102DB00001232370724B93F82520002A00F0BB807A +:102DC0005C6B704B14202A68C3E901240AF00AFDE9 +:102DD0004FF6FF71831E00F1120223F8021F934287 +:102DE000FBD1694B0025694C002618600027684814 +:102DF0000BF0B6FB00227B21664812F049FB002253 +:102E00007C21654812F044FB45210022634812F002 +:102E10003FFB6348634BA0612360C4E90267C4E9D8 +:102E200004550BF029FA0AF04FFD5F4A5F4B1A6018 +:102E30000AF036FD0123656384F838305C4BC4E941 +:102E40000867236013F092FD5A4B5B4C186015F035 +:102E5000E3F85A4B25611860594B236004F1440391 +:102E600002931023CDE900550393EFF30583002B64 +:102E700063D00020534B0025534E00931C23206445 +:102E8000684603930B2365670193029612F05CFA80 +:102E900044226065294606F1200015F057FF012302 +:102EA00020222946A387A6F13C00656115F04EFF5C +:102EB0004FF4805328214FF4D060C4E90B31434BC9 +:102EC000A361434CA56515F0CFFE064670B3C21C46 +:102ED00022F00302131A2846E260C3F5D06323F000 +:102EE00003031946C4E904556F1C002931D100B110 +:102EF000256100252262C4E9065325600BF090FA93 +:102F00000EF09AFF334B60600093334B25810293A0 +:102F10001023A57284F8245001950393C4E90A553F +:102F2000EFF30583CBB10020206366612B480BF0E3 +:102F300017FB05B0F0BD9C6B43E711F09DFD01460A +:102F4000002896D14FF6FF706A46DFF894C000DF84 +:102F500090E749083D460120C6E711F08DFD0028A5 +:102F6000E1D16846DFF87CC000DFDDE7480B0224D2 +:102F7000A806002400000208C8AD0108A00600242D +:102F8000B005002400000024D0060024B00B022469 +:102F900060060024740B0224280B0224040700247A +:102FA00064B101081CAE0108A9CF0008F00A022490 +:102FB0003CB00108700B022480130224E80A0224AA +:102FC000D8B00108C2AB0108D8130224DCAB010859 +:102FD00024130224F7AB010858130224200600240E +:102FE000953601085538010808B57246064B01258B +:102FF000D3E84F4FC3E8465FE4B2002EF8D10CB9D6 +:103000000AF0C0FC0AF008FE440B02240B4B10B57A +:10301000044640F8043BFEF70FFA094B002104F187 +:10302000140003F10802943322603822636015F023 +:103030008DFE4FF0FF332046236510BD00AF010821 +:1030400020AE0108144B10B5044640F8043BFEF7CF +:10305000F3F9124B002104F1140003F10802883344 +:1030600022604422636015F071FE0021382204F1D1 +:10307000580015F06BFE0022402304F1A400C4E9BF +:103080002423C4F898304FF40073C4E9273308F0C0 +:10309000F1F8204610BD00BF00AF010824AF0108C1 +:1030A00010B50446802112F025FA00212046BDE823 +:1030B000104012F01FBA08B5026500220B4600F15D +:1030C0003C0142654FF48072836482870269012A61 +:1030D000D2B208BFC3640068FDF71AFC002008BD27 +:1030E00008B5C0F8102200220B4600F5FE71C0F8AA +:1030F0001422A0F8FC210269C0F80832012AD2B2D9 +:1031000008BFC0F80C320068FDF702FC002008BDC3 +:103110000F4B00F16040DB6800F56140C3F3022310 +:1031200010B5C3F107041A1D042C28BF0424062A75 +:103130004FF0FF328CBF033B0023A24021EA020183 +:1031400001FA03F31B01DBB280F8003310BD00BFAE +:1031500000ED00E02DE9F8430546294F3C69FDF7F5 +:10316000F5FE022D0646274B26D1D7F81041264FF3 +:103170001C4044F00044DFF888804CF25039042FA2 +:103180001DD1D8F81000C0F3800070B934F00041B0 +:1031900022D01E4A002C936943EA04039361184B22 +:1031A00017DB5C610120BDE8F883FDF7CFFE801BD3 +:1031B0004845E4D90320F6E71C400427DBE7D8F8AC +:1031C000103127EA030313F0040F0CBF0120002085 +:1031D000DBE7C3F81411E5E7012D094B06D11A69A5 +:1031E000D103E0D54FF480325A61DCE7D3F81021E7 +:1031F000D203D8D54FF48032C3F81421D3E700BFEF +:10320000002000520000EE17040000804C0B022446 +:103210000D4B19884FF6FD734A1E92B29A4297BF22 +:103220000A4B4FF0026303EA812303F100638342F8 +:1032300007D9B0F1006F34BF4FF0FF304FF40030CA +:1032400070474FF0FF30704780E8F11F00FC3F00EF +:10325000064B4FF6FD711A88531E9BB28B429ABFE4 +:10326000034800EA82204FF40010704780E8F11F05 +:1032700000FC3F0038B5114CE36803F00703062B50 +:1032800006D0E06800F03F00163818BF012038BDB6 +:10329000E36823F03F0343F01603E360FDF756FEB7 +:1032A000054663689B0401D50020F0E7FDF74EFE5C +:1032B000401BB0F57A7FF4D90120E8E700480258B6 +:1032C00038B50C460546012120460CF06BF928B9AB +:1032D00021462846BDE838400DF095B838BD0000BD +:1032E00070B505460E4609B9114870BD0028FBD0DF +:1032F00000240160C0E901440B79053B012BF3D8A0 +:103300006C21012016F0C6FF686060B16C22214676 +:1033100015F01CFDB179022016F0BCFFA86020B9A1 +:1033200028460BF021FF0348DFE72046DDE700BF1A +:1033300000AFFFFF80AEFFFF38B50D4606490446DB +:10334000FFF7CEFF30B9294620462022BDE838409D +:103350000BF0AABE38BD00BF5CB10108034653E8BC +:10336000000F013843E80002002AF8D1704770B519 +:10337000056BE0B00446B5F5C07F1DD84FF4C072B0 +:103380000021684615F0E2FCE36B2A466946206C92 +:103390009847A0B9266B6946204632460BF007FFD6 +:1033A000054608B90123E3621EB1314668460BF0B9 +:1033B00061F9284660B070BD6FF00405F9E76FF061 +:1033C0000805F6E7F7B50093054690F894301446E3 +:1033D0000191DDE90867F3B1D6B13B68DBB10FF0CD +:1033E0003DF823462846DDE900210BF005F93B4670 +:1033F000324605F16801281DFEF7A2FE041E28468C +:1034000018BF012464420FF01FF8204603B0F0BD3E +:103410006FF00104F9E74FF0FF34F6E7074B5A6805 +:1034200090235343064AD358DA69120701D508227C +:103430001A62D869C0F34010704700BF900B022495 +:10344000F40C022410B586B004466846039180E867 +:103450000C0006A800E90C0010E90700034B84E803 +:1034600007002046E36006B010BD00BF1F7D0008C6 +:1034700070B5002385680446066803619DB93378FA +:10348000022B01D9B36A6BB933890BB9022070BD25 +:10349000B36AA361A3696561002BF7D0736B002049 +:1034A000E361F4E71D467389B2895A430CD129467A +:1034B000206806F0FCFB431C05460BD00128E5D92B +:1034C000B3699842F3D3E1E72946304606F0A5FBFD +:1034D000A061DFE70120DAE738B50446056804207B +:1034E000A169F9B1284606F0CAFBC0B9E3691A78A8 +:1034F000DAB1DB7AE52A03F03F03A37109D02E2A63 +:1035000007D00F2B05D023F02003082B01D000207B +:1035100038BD0021204607F0DBF90028E0D0002369 +:10352000A361F5E70028F2D0F9E70420F7E72DE9D9 +:10353000F04F87B006468B4617464FF001090DF154 +:10354000170ADDE910452544A3EB0408AC4201D17C +:10355000012011E008EB0403002259463046009395 +:103560003B46CDE901A905F0A3F928B914F8013BC0 +:103570009DF817209A42E9D007B0BDE8F08F2DE9F9 +:10358000F04F89B006468846DDF84C9005924BB95D +:103590004FF0FF32C9F80020149A0020136009B0E0 +:1035A000BDE8F08F013B07A900684FF0040A0793BC +:1035B00005F0B6F812A9054630680DF1140B05F0B8 +:1035C000AFF80746AF42059B03D3C9F80030129B02 +:1035D000E2E7EC1B95FAA5F241463046B4FA84F4D2 +:1035E000B2FA82F2C4F11F04944228BF1446A2002A +:1035F000CDE901BA0092002205F05AF90028CED197 +:10360000012303FA04F42D1BDCE72DE9F04700F158 +:10361000A4060D46814686B03046904607F036FC3B +:10362000EA6909F1140902F00303012B5AD092034D +:103630006B6903D52A6A934238BF1346984524D252 +:103640002946484605F028FC0446A8B905AB059074 +:1036500005F12C014846029305F11003CDE90083E2 +:10366000D5E90423FFF78BFF044628B9EB69C5F8B9 +:10367000148043F48033EB61304607F0E7FB2046CB +:1036800006B0BDE8F047FDF742BC2ED92F6ABB4219 +:1036900009D02946484605F0FFFB041E15D16B6989 +:1036A000002B24DB2B624FF0000A2B6A98450ED8C2 +:1036B0002946484605F0F0FB20B9381EB4BF6FF02C +:1036C0001500286200EAE074D6E7D5DBEBE70123BA +:1036D00005AA294648468DF814A005F047FC041EAB +:1036E000E3DAC9E76FF00804C6E70024C4E76FF027 +:1036F0001504C1E7184B2DE9F74353F82060002368 +:103700000C4617461D4698460B6033683046D3F882 +:103710003C905B6A98472A464346CDE90001304613 +:10372000C847A8B123682A46304647F83350336863 +:10373000196B4346884723682D1807EBC30348EBF2 +:103740000108586021680131B1F5707F2160DCD338 +:10375000002003B0BDE8F0830000002408B5044B4E +:10376000027853F8220003689B6A9847C0B208BDEC +:10377000000000242DE9F0431D4689B006460F469F +:103780006C1E9046FFF7EAFF044440420440E4B256 +:10379000202C1AD83046FCF7EFFF81462A464146D6 +:1037A000684615F0C5FA621B49460DEB050015F099 +:1037B000CDFA23466A4639463046FCF7E9FF003821 +:1037C00018BF012009B0BDE8F0834FF0FF30F9E7E2 +:1037D00007B58DF80710012381680DF107028039C4 +:1037E000FFF7C8FF03B05DF804FB07B5816801234C +:1037F00001AA40398DF80430FFF7BCFF03B05DF833 +:1038000004FB000013B5064B007853F8200000239A +:103810000468CDE900230A46E469A04702B010BD60 +:10382000000000242DE9F843037807460BB1012B73 +:1038300020D1114A2C214FF434664FF0000801FBCF +:103840000323926E9D6A56431C46013DE036636A2F +:10385000384603EBC50253F835101B68013DD2F81A +:103860000490C91AC8444A46FFF7CCFFB045EED3CE +:10387000BDE8F8830120FBE7200700242DE9F04391 +:1038800085B01E461B4B4FF0000803920746027896 +:103890000D4653F822400A4623682046CDE90068C9 +:1038A000D3F83C904346C847039958B9124B1B784C +:1038B0002BB133462A463978104807F001FD4FF006 +:1038C000FF3413E0236820462A46CDE90068D3F888 +:1038D00014904346C847044640B1074B1B782BB1B0 +:1038E00033462A463978064807F0EAFC204605B0F8 +:1038F000BDE8F08300000024E40A0224FEAB0108C6 +:103900002DAC01082DE9F7430446174699460E46AB +:1039100029B94FF0FF38404603B0BDE8F083002AD4 +:10392000F7D00B6938468D681D44042329460DEBFA +:103930000302FFF7A3FF80460028EAD1BDF8041078 +:1039400046F60812F368914222D1BDF8061099425A +:10395000DFD10423294438460DEB0302FFF78EFF25 +:103960000028D6D1BDF8042046F607139A42D0D1DC +:103970000023BDF80620A4F80890A372F3682B4436 +:103980000435E360134425616361C4E90067C2E75D +:10399000002BE7D0BDE700002DE9F04FDFF830B194 +:1039A000074688460026DFF820910BF16C0A2DEDC2 +:1039B000028B85B0CDE90223109BB34201D80020D1 +:1039C00011E0109B3846404A9D1B029BB5F5003F15 +:1039D00006EB030428BF4FF4003521462B46FFF7C2 +:1039E0004DFF28B1012005B0BDEC028BBDE8F08F82 +:1039F0003B78022B039B334408EE103A48D19BF8E6 +:103A0000A432002B3CD198F80030012B25D1039C27 +:103A10005846436913F00C0F1FD0344481688C4220 +:103A200005EB040E49D28E4517D9AEEB0103A1EB8D +:103A3000040C002200690844864503D9844234BF3F +:103A4000031B0023641A09EB0C015046CDE9002149 +:103A500004EB0C023946FEF794F998F80030022B7B +:103A60001DD19BF8A432D3B1002318EE102A414691 +:103A7000504600932B46CDF80490FEF782F90EE0F5 +:103A8000CDE900092B46224639465046FEF779F922 +:103A90003B78012BB7D198F80030012B0AD12B4687 +:103AA0004A4618EE101A4046FCF772FE002899D1DB +:103AB0002E4481E7029C0548ABE7621A2B464FF083 +:103AC000000C02F00F02B5E7E40A00244C070024C2 +:103AD000200700242DE9F74304460F4690461E4672 +:103AE0004FF6FF79D4E904239A4215D22368DB68A4 +:103AF00023B1E368934204BF0433236104232169A3 +:103B000060680DEB0302FFF7B9FE18BBA37A2569C5 +:103B100033B1E368AB4203D8012003B0BDE8F083C2 +:103B20002189BDF80630494503F1040203D0BDF8F0 +:103B300004C08C450BD116B1BDF80410318004359A +:103B40003D60A8F80030236913442361E5E715447C +:103B50002561C7E74FF0FF30DFE700002DE9F04FA8 +:103B6000ADF5557D17780D46144604934FF48E73CA +:103B70007B43C65C00EB030C002E40F00F824FF439 +:103B80008C7231460CF1040015F0E0F83223224625 +:103B9000294611A8FFF7B6FE10B14FF0FF3009E13A +:103BA000119B002BF9D0129B002BF6D033460DF160 +:103BB0001A0207A911A8FFF78DFF002840F0FA802C +:103BC000BDF81A30712BE8D143AA07992046FFF7B8 +:103BD00055FE0028E1D1A64C30232FAA08A808944E +:103BE0008A3421460DF008FE0028D6D108992F9B73 +:103BF0001944A14240F0FA8037AA08A83796FEF788 +:103C0000E8F8379B034340F0EE808EAB60AA214674 +:103C100008A80DF005FE002840F0E280619A072A0E +:103C200040F0DB809349629816F0EAFB002840F0F0 +:103C3000D4808F9A082A40F0CD808F49909816F052 +:103C4000DFFB002840F0C68004232FAA214608A8E5 +:103C50000DF0D2FD002840F0BA8030232FAA214673 +:103C600008A80DF0C9FD002840F0AE80379037AAB3 +:103C7000214608A8FEF7ADF8002840F0A280379B47 +:103C8000012B40F09E8004232FAA214608A80DF0A6 +:103C9000B3FD002840F09280DDF8BC80B8F1200F21 +:103CA00040F08680089B1FAC03F12005186808339C +:103CB00053F8041C2246AB4203C21446F6D100233B +:103CC000012260A8CDE98823CDE98A32CDE98C3381 +:103CD0000BF028FB7FA80BF019FB60A80BF0FFFD91 +:103CE00060A80BF01FFB032360A88DF880310BF058 +:103CF00021FC28B160A80BF0F2FD7FA80BF0DDFDE0 +:103D0000412343AA7FA960A80BF086FE002870D04B +:103D100060A84FF0FF340BF0E2FD7FA80BF0CDFD63 +:103D20008BA80BF0B7FD88A80BF0B4FD60A80BF0D2 +:103D3000D6FD7FA80BF0C1FD002C7FF42EAF0DF156 +:103D40009C09214620220F944846CDE90D4414F0E9 +:103D5000FDFF49460DA8FFF7EFFA28BB202217A95F +:103D60000DA80BF091F9F8B92FA90DA80BF062F985 +:103D7000D0B901233025A246DFF804B18DF82830F0 +:103D80002FA90DA80593CDF83CA0CDE90DAAFFF70A +:103D9000D3FA48B9059B002B62D0102259460DA8D2 +:103DA0000BF072F900286DD00DA80BF0DDF9F4E6E8 +:103DB0006FF00B000DF5557DBDE8F08F6FF00A0038 +:103DC000F8E76FF00900F5E76FF00800F2E76FF031 +:103DD0000700EFE76FF00600ECE76FF00500E9E79A +:103DE0006FF00400E6E76FF00200E3E76FF0010018 +:103DF000E0E77FA960A80CF033FE002888D12022DC +:103E00001FA98BA80BF0D2FD8EA80BF07FFA8BA90F +:103E100060A80BF029FC0446B8B97FA960A80CF093 +:103E20001FFE044688B97FAB8BAA8EA960A8FDF758 +:103E3000A5FD044648B9014694A80BF0DEFA68B126 +:103E40008EA988A80BF08EFE04468EA80BF035FDD7 +:103E5000202217A988A80BF0E5FA61E7074CF4E7E0 +:103E600020228EA90DA80BF00FF9002895D09BE712 +:103E700000040008F0B0010800B1010880B0FFFFA5 +:103E80005BAC010801220AA90DA80BF0FDF800287F +:103E90008AD18EA90DA80BF0CDF80346002883D156 +:103EA00037AA202D02EB040028D90DF50E7C03461D +:103EB0000DF5167E6246083303CA724543F8080CB6 +:103EC00043F8041C9446F5D1203DADB29DF828304E +:103ED00020340133A4B28DF828300023002D7FF464 +:103EE0004FAF0DA80BF040F93BA90AA80C95CDE9FE +:103EF0000A55FFF721FA48B10AA856E72A468EA9C3 +:103F0000059314F015FF059B1D46DFE70DF26D14B8 +:103F100010220AA821460BF0B7F80028ECD12FA9EF +:103F20000AA80BF087F80028E6D12FAB53A913F8A5 +:103F3000012BB8F1010811F8010F82EA000246EAEC +:103F40000206F4D1002ED7D10AA80BF00DF93146A4 +:103F50004FF48C728EA814F0F9FE37A98EA8FDF7E5 +:103F60006BFF00287FF419AE102531460DA82A46B4 +:103F700014F0ECFE049B09AA294605FB07378EA81E +:103F80000DABCDF800900C370996CDE901470DF047 +:103F9000A5FC003818BF012040420BE7012009E7CB +:103FA0002DE9F04F1378ADF50F7D82460D46012BBC +:103FB00093460DD14B6913F00C0F09D090F81C31CA +:103FC00033B94FF0FF3108460DF50F7DBDE8F08F96 +:103FD000402200216DA8DFF8A88214F0B7FEA14AA4 +:103FE000A14B0024AF682E69DFF898923E44DFF8B9 +:103FF00098E2DFF898C29D489D497D94CDE96B23F6 +:10400000EB68F318CDE96598CDE90239CDE9048E66 +:10401000954BDFF864820A93CDE96344CDE967EC00 +:10402000CDE96901CDE906C0CDE90812029BA342A2 +:1040300042D829A963A80AF003FF29464FF6FF7367 +:104040005A4623A8FFF75EFC01460028BBD14FF07B +:10405000FF35884E0746DFF838922C4606F15B089C +:10406000239B002BADD0249B002BAAD00DA90DF1D2 +:1040700032030CAA23A8FFF72DFD011EA3DB40F09D +:104080005682BDF83230102B59D1BDF83070202F38 +:1040900097D10D993B4643AA5846FFF7EFFB0146DF +:1040A000002890D143A93A4629A816F0A9F901465B +:1040B000002888D10127D3E7029BA3EB0409B9F5B7 +:1040C000807F28BF4FF48079A74205D904EB09030C +:1040D0009F4238BFA7EB0409A64205D904EB0903A8 +:1040E0009E4238BFA6EB040921464B46624A584619 +:1040F000FFF7C4FB014600287FF465AF9BF8003052 +:10410000012B12D16B6913F00C0F0ED0A7420CD803 +:10411000A6420AD9E21B59465046CDF8048002F067 +:104120000F0300934B46FDF72CFEB9F1000F04D0AE +:104130004A46414663A80AF01DFE4C4476E7012B2F +:104140003DD1BDF83030202B3FF63BAF0D9943AA4F +:104150005846FFF793FB014600287FF434AF9DF8E3 +:104160003050202D7BD8402202906DA814F0EEFD37 +:10417000039B02995B22659363A8049B7D916693E0 +:10418000059B6793069B6893079B6993089B6A93BB +:10419000099B6B930A9BCDE9631131466C930AF03E +:1041A000E9FD3AA963A80AF04BFE2A4643A93AA8BA +:1041B00016F026F9003818BF0120454250E7222B9F +:1041C0007FF44EAF002D7FF44BAFBDF83030802B25 +:1041D0003FF6F7AE43AC0D9958462246FFF74EFB2B +:1041E000014600287FF4EFAE302331AA41460EA8E5 +:1041F000BDF830A00E960DF0FFFA70BB319B3AAAC5 +:104200000E9D0EA81D4463AB29460DF009FB20BB93 +:104210003B9A072A21D149463C9816F0F1F8E0B9BB +:10422000649A082A19D11549659816F0E9F8A0B9D9 +:10423000032331AA29460EA80DF0DEFA68B9319A97 +:104240005AB1511E0E9B3191187830B9581C134445 +:104250009D420E9001D141291CD04FF0FF344FF008 +:10426000FF35FDE6ABD9831F19CDE05B7F520E51C0 +:104270008C68059B00030008F00B022409B10108BB +:1042800085AE67BB67E6096A72F36E3C3AF54FA5E7 +:10429000F8B0010863A801250BF044F8002385A8B5 +:1042A0008493CDE982530BF031F80E99A24B63A8A9 +:1042B0000B915B1A02930BF012FB63A80BF032F820 +:1042C000032263A88DF88C210BF034F9029B0B9923 +:1042D00058B14FF0FF3463A80BF001FB82A80BF03C +:1042E000D9FA85A80BF0E9FAB9E70A4663A885A9C7 +:1042F0000BF092FB0028ECD185A963A80CF0B0FB71 +:104300000028E6D1A244302310AA0F945146CDE9EB +:104310001150CDE91305CDE915000FA80DF06CFA89 +:1043200060B1A0F59F4411A80BF0B4FA14A80BF0EB +:10433000B1FA201E18BF01204442CCE7DDE90F325C +:1043400013449A4540F0F18011AA51460FA80DF090 +:10435000B2FA044630B914AA51460FA80DF0ABFAD0 +:10436000044610B1A4F59F44DDE731A80AF0CEFF62 +:104370009DF88C31092BCDE91754CDE91945CDE9CC +:104380001B44CDE91D54CDE91F45CDE9214401D1A0 +:104390006A4CC8E7789B002BFAD0012111A80BF0DA +:1043A0002CF8002817DA664C31A80BF086FA17A80B +:1043B0000BF070FA1AA80BF06DFA1DA80BF06AFA50 +:1043C00020A80BF067FA002CADD10F9A5D4B9245F7 +:1043D00018BF1C46A7E776A911A80AF0CBFF002852 +:1043E000E1DA012114A80BF008F80028DBDB76A93C +:1043F00014A80AF0BFFF0028D5DA7A9D29A917A8CA +:104400000735ED08202D28BF20252A460BF0CEFACF +:1044100004460028C8D17A9BE900B3EBC50F3DD311 +:1044200076A917A80AF0A6FF002807DB17A976AA25 +:1044300008460CF054F804460028B5D176AA14A911 +:104440001AA80CF0E3FE04460028ADD11AAA17A959 +:104450001DA80BF0C9FB04460028A5D11DA976AA0A +:1044600008460CF006F9044600289DD11AAA11A9A5 +:1044700020A80BF0B9FB0446002895D120A976AA04 +:1044800008460CF0F6F8044600288DD163A80AF01F +:1044900067FF01280AD0A4F59D4485E7C91A17A82B +:1044A0000BF04AF904460028BAD07DE73AA80AF092 +:1044B0002DFF6DAB1DAA3AA963A8FDF721FC0446A8 +:1044C000A0B985AB20AA31A963A8FDF719FC044661 +:1044D00060B931AB3AAA63A819460CF06BFD0446EB +:1044E00020B931A963A80DF065F804463AA80BF08D +:1044F000E4F9002C7FF458AF214637A80AF07DFF7D +:1045000000283FF450AF31A976AA08460CF0B1F864 +:10451000044600287FF448AF11A931A80AF02AFF09 +:10452000044600283FF440AF3DE7074CFBE6002F70 +:1045300014BF2146012146E55B03000880B0FFFF60 +:1045400000B2FFFF00B4FFFF1AB0FFFF0278074977 +:1045500051F822304BB1013B41F822302BB9044BCA +:1045600053F822000368DB6818477047F005002401 +:1045700000000024224B00EB4002012803EB8202E2 +:104580002DE9F04104460A6025D0022826D048BB18 +:104590001C4A5A601C4F002557F82420013247F866 +:1045A00024200C22624303EB02089C54174B88F82A +:1045B000015053F82460336830469B6B984757F896 +:1045C0002430C8F80800012B17D1336830469B68A7 +:1045D000BDE8F041184700221A61DBE74FF0106296 +:1045E000DA61D7E70A4B1B781BB10146094806F090 +:1045F00067FE4FF0FF30BDE8F0812846FBE700BFC3 +:10460000FC05002400000208F0050024000000243E +:10461000E40A02246CAC010873B5044601A9C0B2D7 +:10462000FFF7A8FF054620B14FF0FF35284602B03E +:1046300070BD0198FCF7A0F806460198FFF786FFC9 +:104640002C23064803FB0404631E0334A342EDD06D +:1046500013F8012FB242F9D0E6E700BF200700248B +:1046600013B5002001A9FFF785FF014610BB2023E9 +:10467000134A0198FFF702F9041E18BF012401989C +:10468000FFF764FFD4B901A90120FFF773FF98B9C0 +:10469000214620230B4A0198FFF7F0F8041E18BFAB +:1046A00001240198FFF752FF0CB184F00104204669 +:1046B00002B010BD0124E2E70124F2E70024F4E790 +:1046C000200700244C07002413B5002001A9FFF7A0 +:1046D00051FF90B9019801236A4681688DF8003036 +:1046E000403921F01F012039FFF744F804460198B2 +:1046F000FFF72CFF204602B010BD0124FAE70000AE +:10470000F7B504460F46C0B26946FFF733FF30B134 +:1047100001250098FFF71AFF284603B0F0BD1B489B +:104720002C2303FB040400982369A6681E44042379 +:1047300031460DEB0302FFF7A1F805460028E7D14B +:10474000BDF8042046F60813E4689A421AD1BDF871 +:1047500006309C4201D00325DBE704233119009881 +:104760000DEB0302FFF78AF80028D1D1BDF8042031 +:1047700046F607139A42EED1BDF80630234433447F +:104780003B60C6E7002CF1D0E5E700BF200700241E +:104790002DE9F04186B002230546002601AFDFF87F +:1047A0005880ADF80430294617F8010BFFF7E2FEF8 +:1047B000044658B92868102302AA81682039FFF7F7 +:1047C0005DF8044640B12868FFF7C0FE204606B0F9 +:1047D000BDE8F0810126E6E71022414602A815F067 +:1047E0000FFE04460028F1D02868FFF7AFFE002E28 +:1047F000F0D04FF0FF34E9E7E0B0010838B54FF4EE +:104800008E7405464C4302EB011120440C310430F8 +:10481000FDF712FB0028034613BF002201220346C6 +:104820004FF0FF332A55184638BD00002DE9F743F5 +:1048300004460F46C0B201A9FFF79CFE002863D1D1 +:104840002046FFF7E9FE30B1314E2C2505FB04650B +:104850006B69DA060DD50CB9012503E025460198F0 +:10486000FEF7E0FF0198FFF771FE284603B0BDE8B0 +:10487000F083DDF8048098F80090B9F1010F2AD098 +:10488000244829464246FFF78BFB05462C23019816 +:104890006343F158F218204B99420AD11369926888 +:1048A000D1438B4205D813448268934201D2002D34 +:1048B000D8D01CB182680021FEF7A4FF174B1B78EB +:1048C000002BC9D0164B17491748002C18BF1946A2 +:1048D00006F0F6FCC0E713F00C0FD1D03B46424681 +:1048E000294606F16C00FFF739F9002802DA4FF08B +:1048F000FF35CBE7C4D13A46494606F16C00FFF7D5 +:104900007DFF0028BCD0F2E74FF0FF35ADE700BFD8 +:10491000200700248C0700243DB8F396E40A022403 +:1049200096AC01088EAC0108A0AC010838B50C4665 +:104930001546FBF721FF2544214611F8013B98421B +:1049400003D1A942F9D1012038BD0020FCE738B5D8 +:104950000C460123114605462246FEF78FFF00282C +:1049600010DB4CB1012221462846FFF7DFFF18B1CA +:1049700003230020237038BD2378012B0CBF0123B3 +:104980000223F6E70120F6E78168F0B589B0A1F1CE +:1049900020060546FBF7F0FE0B4B07466C460FCB97 +:1049A00084E80F00102239460DEB020014F0CEF916 +:1049B0002023224631462846FBF7EAFE003818BF7E +:1049C000012009B0F0BD00BFE0B0010830B5002300 +:1049D00087B00D468168059302AA20390446CDE9C7 +:1049E0000333FF2302931023FEF748FF002811DB57 +:1049F000102202A92046FFF799FF68B103232B700C +:104A00000DF10702A168012320468039FEF736FF29 +:104A100000280BDA01202CE01022174902A815F01B +:104A2000EFFC002814BF02230123E8E79DF80730BC +:104A30000DF10701204603F00F021B096A700122E5 +:104A40002B71FFF773FF10B96B78042B03D9012387 +:104A50006B7000232B71A268A91C2046603AFFF7F7 +:104A600076FF0028D6D1A268E91C2046403AFFF71D +:104A70006EFF07B030BD00BFE0B001081FB50020D9 +:104A800001A9FFF777FDA8B902A90198FFF79EFFDA +:104A9000044668B99DF80B30032B03D10198FEF74B +:104AA000A4FE04460198FFF751FD204604B010BD56 +:104AB0000124F7E70124F8E713B50C46C0B201A9B9 +:104AC000FFF758FD50B921460198FFF77FFF0446D4 +:104AD0000198FFF73BFD204602B010BD0124FAE724 +:104AE00030B585B00D460446012002A9FFF7E4FF6A +:104AF000E979012902D02046FEF76AFE9DF80B30C5 +:104B0000012B02D12046FEF770FEAB682046A1685B +:104B100001930423A0390DEB0302FEF72BFE2A4676 +:104B200000212046FBF748FE2A4601212046FBF7DC +:104B300043FE2046FFF728FF002005B030BD0428C3 +:104B400009D0052803D1481E18BF01207047431A19 +:104B50005842584170470120704710B50446FEF78F +:104B6000FDFD4FF43462A368E03B02FB103010BD42 +:104B700030B583798DB00546002B03A914BF022000 +:104B80000020FFF7F7FC60BB0398FFF7E6FF164B2A +:104B900029799A6E01392B6802EB4204013B4A43A2 +:104BA00004FB03231C180398FEF7D8FD019003981B +:104BB000FBF7E2FD2022014604A814F0C7F82A7989 +:104BC0002146019B8DF8102004AA0398FBF7E0FD15 +:104BD000041E18BF01240398FFF7B8FC20460DB04F +:104BE00030BD0124F7E700BF200700242DE9F04F76 +:104BF00004468DB000206379012BCDE9040040F01C +:104C000093812368012B40F08F812379012B40F0A1 +:104C10008B81B94DB94E2A68B24202D105A9FFF77E +:104C20006FFD6B6913F00C0F00F0B981B249234698 +:104C30002A6A01F16C00FEF791FF014618B922467D +:104C4000AF48FFF7DBFDEB6AB34203D104A90120B3 +:104C5000FFF756FD2B6C13F00C0F00F0A781A9494C +:104C60002346EA6C01F14000FEF778FF20B92246A6 +:104C70000121A348FFF7C2FD95F88831ABB104F1DB +:104C80002C0204F11C03114653F8040B934241F823 +:104C9000040BF9D14FF48C7200219B4814F056F8A4 +:104CA000224602219648FFF7A9FDDDE9043293422E +:104CB00088BF0593059BA3608F4D002305996E6AFD +:104CC0001A462F6D18469A46A846914201D89A4234 +:104CD00005D206EBCA050AF1010A6D682A44994219 +:104CE00002D8934280F08D8107EBC005914200F11C +:104CF00001006D682B44ECD89942E6D89A42E4D181 +:104D0000D1464FF0000B814B5D460BF1010B1B7838 +:104D10002BB10AF1010259467D4806F0D1FAD8F8C4 +:104D20005830D8F8242099680023101D1F4650F8E9 +:104D300039303B44994203D3B9F10109F6D21F46F9 +:104D400021684B1EAB4200F24A8109F10100136851 +:104D5000D8F8685052F83060D8F82800F61A0138B0 +:104D600007EB060C52F83020D31A9C4540F22581FF +:104D70004FF434636FF0DF02012903FB15253D4436 +:104D800040F01C817B1B18BF0123A37106A90020E2 +:104D9000FFF7F0FB07A90120FFF7ECFB08A90220B1 +:104DA000FFF7E8FB2379012B40F00A8108980021E6 +:104DB0008268FEF727FD2368012B13D1214608984E +:104DC000FFF78EFEA3796BB906980393FEF72AFDD1 +:104DD00021460698FFF784FE0898039B82681946CF +:104DE000FEF710FD002332460095DDE90701FEF7CE +:104DF000D3FD2046FFF7BCFE0223237118B1454ABC +:104E00001368013313603A4631460798FEF7FAFCFF +:104E1000334632460095DDE90601FEF7BDFD236805 +:104E2000012B04D1A37913B90798FEF7FBFC2046A8 +:104E3000FFF79EFE0323237118B1364A136801332E +:104E400013603A4631460698FEF7DCFC33460022F2 +:104E5000069908980095FEF79FFDA379002B39D09D +:104E60000898FFF77AFED8F86830024606995B008A +:104E7000089800937319FEF78FFD18B1254A13683F +:104E8000013313600AA90898FFF7A0FD9DF82B30A5 +:104E9000012B02D10698FEF7A8FC9DF829100129E4 +:104EA00002D00698FEF794FC069809AAA3688168C8 +:104EB00009930423A039FEF75DFC224600210698E1 +:104EC000FBF77AFC224601210698FBF775FC069851 +:104ED000FFF75AFD0023A5792046A371FFF748FE8E +:104EE00023680133236001232371A8B1094A1368A1 +:104EF0000133136010E000BF200700243DB8F39693 +:104F00008C0700244C070024C8090024E40A02246A +:104F1000C6AC0108E00A0024002D57D03A46002113 +:104F20000898FEF76FFC51E00AA8FFF731FC50B972 +:104F30000A98042304F108028168A039FEF79EFC58 +:104F40000A98FFF703FB04F11C05A3680026394FFC +:104F5000A94604F12C0805930AA85FFA86FAA5F180 +:104F6000100BFFF715FC68B90A9810235A468168A0 +:104F7000A1F1A00C711CACEB4111FEF77FFC0A986B +:104F8000FFF7E4FA5A4612F8013BFF2B3DD1954258 +:104F9000F9D11035002E7FF48FAE0126DCE7102208 +:104FA000FF2104F10C0013F0D1FE4CE61022FF218A +:104FB00004F11C0013F0CAFE77E63D460023E4E648 +:104FC000022B3FF420AF032B3FF43BAF0698FFF7D3 +:104FD000BDFA0798FFF7BAFA0898FFF7B7FAB9F1E0 +:104FE000FF3F7FF490AE144B1968002905DD134B89 +:104FF0001B7813B1124806F063F900200DB0BDE82C +:10500000F08F91427FF67AAE63E6224651463846EB +:10501000FFF7F4FB002EBCD04B46424653F8041B6E +:10502000434542F8041BF9D1224602213846FFF7D6 +:10503000E5FBAEE78C070024E00A0024E40A022422 +:10504000DEAC0108F0B593B004460846164604A944 +:105050001D46FCF7CBFF48B92B6804A920460E93E8 +:10506000FCF7F9F8074618B14FF0FF3013B0F0BD68 +:10507000FBF76CFF94F8402003462568012AF3D023 +:10508000012284F8402094F84120012AD0B243D173 +:105090006764002E3BD0122284F841202A69013235 +:1050A000E2622A69666241F288360132A2626A6966 +:1050B00022F040626A61E26AA2B90122022120461E +:1050C0000096FCF7A1F810B923680222DA600123E8 +:1050D00084F841300023C01A84F8403018BF012002 +:1050E0004042C3E701220421204600960393FCF7C7 +:1050F0008BF80028EBD1626A039B127885F8202098 +:10510000626A01326262E26A013AE262D3E7636C88 +:1051100043F008036364DDE70220DBE72DE9F04795 +:105120001C4690B090F894300546DDF86890DDE9B3 +:1051300018A8CDE9002163B30DF090F94FF0FF33CB +:1051400028462E1D05F16807DDE9002109F054FA13 +:1051500014B1BAF1000F23D1B8F1000F02D0B9F1A8 +:10516000000F19D102A93846FCF740FF044638B9B0 +:10517000012302A9CDE90B033046FCF76CF808B116 +:105180004FF0FF3428460DF05FF9204610B0BDE81F +:10519000F0874FF0FF34F8E79CB1BAF1000F10D060 +:1051A000224602AB39463046CDF808A0FFF74AFF49 +:1051B00004460028E4D1B8F1000FE3D0B9F1000FA4 +:1051C000E0D002AB424639463046CDF80890FCF7B5 +:1051D000B7FF041E18BF01246442D3E700B5564B45 +:1051E0008DB00A2800F2A480DFE800F00616243211 +:1051F000404E5C6A78869400D3F8E0204F4842F035 +:105200000102C3F8E020D3F8E03003F0010301937A +:10521000019B0DB05DF804FBD3F8E020484842F054 +:105220000202C3F8E020D3F8E03003F00203029357 +:10523000029BEEE7D3F8E020424842F00402C3F8B4 +:10524000E020D3F8E03003F004030393039BE0E78E +:10525000D3F8E0203C4842F00802C3F8E020D3F83D +:10526000E03003F008030493049BD2E7D3F8E02076 +:10527000364842F01002C3F8E020D3F8E03003F0E3 +:1052800010030593059BC4E7D3F8E020304842F0B3 +:105290002002C3F8E020D3F8E03003F020030693A7 +:1052A000069BB6E7D3F8E0202A4842F04002C3F854 +:1052B000E020D3F8E03003F040030793079BA8E712 +:1052C000D3F8E020244842F08002C3F8E020D3F86D +:1052D000E03003F080030893089B9AE7D3F8E020BE +:1052E0001E4842F48072C3F8E020D3F8E03003F4A3 +:1052F00080730993099B8CE7D3F8E020184842F4A7 +:105300000072C3F8E020D3F8E03003F400730A938E +:105310000A9B7EE7D3F8E020124842F48062C3F88B +:10532000E020D3F8E03003F480630B930B9B70E72D +:105330000D4808F091FC00BF0044025800000258DC +:105340000004025800080258000C025800100258CD +:105350000014025800180258001C0258002002587D +:1053600000240258002802580BAD010838B5431C30 +:105370000D4628D000F00F02134BC0F3031053F872 +:105380002240FFF72BFF1149114BD1F894209A428C +:10539000FBD104FB04F2016802EB42030B40B3FBB8 +:1053A000F2F3013B012B03D8436823EA0403436073 +:1053B000012D21460CBF2A460022FBF781FA034B40 +:1053C0004FF440725A6138BD1CB1010800640258A4 +:1053D0000003008038B5044608F0AEFB0C490D4BC5 +:1053E000D1F894209A42FBD1D4E905035B430268CB +:1053F00003EB430522EA0502134303604FF44073B5 +:10540000B4F910004B610021BDE83840FFF7AEBF92 +:1054100000640258000300802DE9F843461C05464D +:105420000C4600F09C801FFA80F9554A40F47061E8 +:10543000B2F90030581C4BD10026524B09F00F0234 +:10544000C5F3031053F82270FFF7C8FE4E494F4BC7 +:10545000D1F894209A42FBD107FB07FCC4F38312D6 +:1054600083680CEB4C0E0F2A6FEA0E0114BF02FB8F +:105470000CF243EA0E034FF4407E1CBF0B40134373 +:1054800004F007028360022A3F4BC3F814E036D1D0 +:105490000EF1004ED3F89480F045FBD119F0080FBF +:1054A000C4F383285DD03B0AD0F824E05B435B4320 +:1054B000C3EB031903FB08F32EEA090E4EEA0303BC +:1054C0004362314B4FF4407EC3F814E002231EE0E8 +:1054D00043F470638B4210D104F003035668032B2E +:1054E000ABD109F47063B3F5706FA6D13246214693 +:1054F0002846BDE8F843FBF7CFB9083298E7032AFE +:105500003CD002F1FF3EDEF1000343EB0E03DFF877 +:105510007890DFF878E0D9F89480F045FBD1D0F8A6 +:1055200000E003FB0CFC013A01EA0E01012A41EA0A +:105530000C01016005D8436822074CBF3B43BB43C5 +:105540004360C4F301123946FBF7BAF932462146EB +:105550002846FBF7A1F90C4B4FF440725A61BDE8A5 +:10556000F8830CFB0CF9036AC9EB091E23EA0E0E43 +:1055700009FB08F34EEA03030362A2E71346C6E7FA +:1055800080AD01081CB101080064025800030080CE +:10559000034BD9681A6822EA01021A605960704701 +:1055A00000650258124B1A69194602F03802102A97 +:1055B0001AD004D8BAB1082A16D00B6814E0182AF9 +:1055C000FBD19A6A996AD86A11F47C7F586B0BD028 +:1055D00002F00302012A02D0022A00D01A681B6BD3 +:1055E000034B1B6B00E01B68014B9A699B6970477A +:1055F000004402582B4BD3F8882042F47002C3F8C1 +:1056000088201A6942F010021A61274A136803F0D1 +:105610000F03062B05D8136823F00F0343F007038D +:105620001360224B1A6842F001021A6000221A61CC +:105630001F4A19680A401C491A600A68120705D5F2 +:105640000A6822F00F0242F007020A60002219499C +:105650009A61DA611A6299621749D9621749196326 +:105660005A639963DA6319645A64196821F48021D2 +:1056700019601A66124A536A43F480435362114B0D +:105680001B681B0C1B04B3F1005F02D20E4B0122FE +:105690001A600E4B43F2D2021A600D4A014B9A6017 +:1056A000704700BF00ED00E00020005200440258A7 +:1056B0007FEDF6EA000202020000FF018002010114 +:1056C000C00000580010005C0881005100400052EA +:1056D000000000080A4B013B0FD00269002AFADAE9 +:1056E0000369074A43F001030361013A05D00369E6 +:1056F00013F00103F9D1184670470320704700BF2B +:10570000410D030030B5056C00F530630F4CA54228 +:1057100003D9D0F8004B002C16DB002401291C61B2 +:105720001C6944F400241C611C6944F018041C61C9 +:105730001C6944F0C0441C6106D15A61D0F8003B9A +:1057400043F08023C0F8003B002030BD0A30544FA6 +:10575000D0F8003E23F00303C0F8003ED0F8043830 +:1057600043F00203C0F804380020704770B50023EE +:10577000940800F5805502F00302A34214D301EB14 +:1057800084017AB100F5805000230468D80024FA1F +:1057900000F0C854013398B28242F7D1013A92B274 +:1057A00001321144084670BD2E6841F82360013370 +:1057B000E3E770B50E78012500F5006206F00F03EF +:1057C00074019D404B78012BD36917D11D4300F51F +:1057D0001060D56103591A040ED48A680559C2F3C2 +:1057E0000A03CA782B4343EA824343EA865343F0D1 +:1057F000805343F400430351002070BD43EA054544 +:1058000000F53060D56103591B04F5D48B6802594B +:10581000C3F30A031343CA7843EA8243E7E700006D +:105820002DE9F8430668054616F0006609D0836E38 +:10583000B3F5001F2ED013D8F3B1B3F5801F21D0DC +:1058400001262B68DB0540F10281AB6D042B00F2D1 +:10585000FD80DFE813F024002B00F500290029006B +:10586000B3F5401FECD1B84A0026A96E136D23F49E +:1058700040130B431365E4E7B34AD36A43F40033A0 +:10588000D362F0E702210430FBF746FC064600280D +:10589000D7D1E8E702212430FBF7C6FBF6E7AA4A96 +:1058A000D36A43F40033D362344604E00021281D58 +:1058B000FBF732FC0446002C40F0CB80A24AA96DD5 +:1058C000136D23F007030B4313652B689F050DD55C +:1058D000EB6D802B00F0DA8000F2BD80002B00F031 +:1058E000C980402B00F0CC80012634462B68580537 +:1058F00010D5D5F8A830B3F5800F00F0EC8000F299 +:10590000CD80002B00F0DB80B3F5001F00F0DD80C0 +:10591000012634462B68190510D5D5F8AC30B3F103 +:10592000007F00F0FD8000F2DE80002B00F0EC80B4 +:10593000B3F1807F00F0EE80012634462B689A0197 +:105940000DD5AB6C202B00F0078100F2F180002B0D +:1059500000F0F180102B00F0F980012634462B680E +:10596000DB040FD52B6EB3F5005F00F0198100F258 +:10597000FB80002B00F00881B3F5805F00F00A8106 +:10598000012634462B689F040FD56B6EB3F5003F9C +:1059900000F0268100F20C81002B00F01281B3F59B +:1059A000803F00F01781012634462B68580410D53B +:1059B000D5F8B030B3F1005F00F0338100F2188108 +:1059C000002B00F01E81B3F1805F00F024810126DE +:1059D00034462B68590114D5EB6C43B1B3F5807F85 +:1059E00040F027810121281DFBF796FB0446002C7F +:1059F00040F02281544AE96CD36C23F480730B434A +:105A0000D3642B681A040DD52B6FB3F1805F00F0BF +:105A10001581B3F1005F00F01F81002B00F01381AE +:105A2000012634462B68DB0140F12C816B6C032B83 +:105A300000F26C81DFE813F01D01180164011D0103 +:105A4000002105F12400FBF7EFFA33E70126344685 +:105A50003BE7264639E7C02B03D0B3F5807F7FF4C0 +:105A600043AFCCB9384AE96D136D23F4E0730B43AF +:105A700013653BE7344AD36A43F40033D362F0E75B +:105A80000021281DFBF748FB0446EAE7002105F149 +:105A90002400FBF7C9FAF7E7264627E7B3F5C00F5E +:105AA00003D0B3F5000F7FF433AFD4B9264AD5F84D +:105AB000A810936D23F460030B4393652AE7224AF1 +:105AC000D36A43F40033D362EFE70021281DFBF7CC +:105AD00023FB0446E9E7002105F12400FBF7A4FAC3 +:105AE000F7E7264616E7B3F1407F03D0B3F1806FA6 +:105AF0007FF422AFD4B9144AD5F8AC10936D23F0DB +:105B0000E0630B43936519E70F4AD36A43F400330C +:105B1000D362EFE70021281DFBF7FEFA0446E9E710 +:105B2000002105F12400FBF77FFAF7E7264605E799 +:105B3000302B7FF412AFACB9034AA96CD36C23F0BD +:105B400030030B43D3640AE7004402589B4AD36AEC +:105B500043F40033D362EEE70221281DFBF7DCFAA1 +:105B60000446E8E72646FAE6B3F5405F03D0B3F50E +:105B7000804F7FF405AFCCB9904A296E136D23F4A2 +:105B8000E0430B431365FDE68C4AD36A43F40033CC +:105B9000D362F0E70021281DFBF7BEFA0446EAE7CE +:105BA000002105F12400FBF73FFAF7E72646E9E676 +:105BB00023F48032B2F5802F03D0B3F5403F7FF459 +:105BC000F2AE9CB97D4A696E136D23F4E0230B435A +:105BD0001365EAE60121281DFBF79EFA0446F0E76B +:105BE000012105F12400FBF71FFAF7E72646DCE662 +:105BF00023F08052B2F1804F03D0B3F1405F7FF4C5 +:105C0000E6AEA4B96D4AD5F8B010936D23F0E04329 +:105C10000B439365DDE60121281DFBF77DFA044661 +:105C2000EFE7012105F12400FBF7FEF9F7E726462F +:105C3000CFE601263446E4E62646E2E65F4AD36A2A +:105C400043F40033D3626CB95C4A296F136D23F0BF +:105C500040530B431365E5E60121281DFBF75CFA71 +:105C60000446F0E72646DDE6544AD36A43F400339F +:105C7000D362002C4DD1514A696CD36C23F00303DD +:105C80000B43D3642B685F024DD54D4F3B6843F403 +:105C900080733B60FBF75AF980463B68D8053AD5DC +:105CA000002C6CD1454BD5F8B4001A6F424012F469 +:105CB000407F0BD01A6F196F22F4407241F480318B +:105CC0001967196F21F4803119671A67B0F5807F61 +:105CD00040D0D5F8B430394903F44072B2F5407F72 +:105CE00049D10869374A20F47C5002EA1312024372 +:105CF0000A61C3F30B03314A116F0B43136712E0C0 +:105D00000221281DFBF708FA0446B2E701263446B3 +:105D1000B8E72646B6E7FBF719F9A0EB08006428B8 +:105D2000BBD9032634462B68DA0708D5EB6F102B56 +:105D30003CD026D85BB3082B32D0012634462B68E2 +:105D40009B074ED5AB6F052B61D8DFE803F0423DD2 +:105D50005A424242FBF7FAF8DFF86080074641F208 +:105D60008839D8F870309907B3D4FBF7EFF8C01B27 +:105D70004845F6D9D5E70A6922F47C52B8E72646A9 +:105D8000D1E723F00802202A01D0182BD5D19CB9E5 +:105D90000A4AE96F536D23F038030B435365CEE78E +:105DA0000121281DFBF7B8F90446F0E7012105F1B0 +:105DB0002400FBF739F9F7E72646C0E7004402580C +:105DC00000480258CFFFFF000121281DFBF7A4F96E +:105DD0000446FCB9B74AA96F536D23F007030B4380 +:105DE00053652B685F0727D5D5F89430052B00F253 +:105DF0003A81DFE813F01600110032011600160098 +:105E00001600012105F12400FBF70EF9E0E7012659 +:105E10003446E6E72646E4E70121281DFBF77CF936 +:105E20000446002C40F02281A24AD5F89410936DCC +:105E300023F007030B4393652B68980610D5D5F81C +:105E40009030B3F1005F00F02C8100F21181002B43 +:105E500000F01781B3F1805F00F01D810126344608 +:105E60002B68590610D5D5F89C30B3F5006F00F0BB +:105E70003C8100F22181002B00F02781B3F5806F77 +:105E800000F02D81012634462B681A0610D5D5F86E +:105E9000A030B3F5804F00F0498100F22E81002B35 +:105EA00000F03481B3F5005F00F03A8101263446FA +:105EB0002B681B0714D5D5F88430B3F5805F07D164 +:105EC000022105F12400FBF7AFF8002818BF0126D6 +:105ED000784AD5F88410536D23F440530B4353652F +:105EE0002B68DF0614D5D5F89830B3F5807F07D13D +:105EF000022105F12400FBF797F8002818BF0126BE +:105F00006C4AD5F89810936D23F440730B43936556 +:105F10002B6818031AD5D5F8A410B1F5803F00F00E +:105F20000D81B1F5003F06D0002940F00D81281DFC +:105F3000FBF7F2F80446002C40F009815D4AD5F8E1 +:105F4000A410936D23F440330B4393652B685903DE +:105F50001CD5D5F88830B3F5001F00F0FA80B3F5F2 +:105F6000401F08D0B3F5801F40F0FA80514AD36A31 +:105F700043F40033D362002C40F0F5804D4AD5F84D +:105F80008810536D23F440130B4353652B68DA03D9 +:105F900009D52B6D002B00F0E880B3F5803F00F0B1 +:105FA000F280012634462B689B0007D5022105F1BB +:105FB0002400FBF739F8002818BF01262B689F033F +:105FC0000BD5D5F88010B1F5807F00F0F28000F29B +:105FD000E280002900F0E5800126DC0206D5354983 +:105FE000686F0A6D22F0004202430A65D80007D5A7 +:105FF0003049D5F8B8000A6922F4804202430A61A8 +:10600000990206D52B49E86E0A6D22F08072024390 +:106010000A655A0009D5274A116921F40041116126 +:106020001169D5F8BC0001431161002B06DA214942 +:10603000686DCA6C22F040520243CA641B0207D545 +:106040001C4AD5F88C10536D23F440030B43536561 +:10605000301E18BF0120BDE8F883012105F124009E +:10606000FAF7E2FFDCE601263446E5E62646E3E6FB +:1060700023F08052B2F1804F03D0B3F1405F7FF440 +:10608000EDAEA4B90B4AD5F89010536D23F0E04360 +:106090000B435365E4E60021281DFBF73DF8044659 +:1060A000EFE7022105F12400FAF7BEFFF7E72646E5 +:1060B000D6E600BF0044025823F48062B2F5805F48 +:1060C00003D0B3F5406F7FF4DDAEA4B93D4AD5F8F7 +:1060D0009C10936D23F4E0530B439365D4E60021A9 +:1060E000281DFBF719F80446EFE7022105F124000B +:1060F000FAF79AFFF7E72646C6E623F40052B2F510 +:10610000004F03D0B3F5C04F7FF4D0AEA4B92D4AF1 +:10611000D5F8A010936D23F460430B439365C7E655 +:106120000021281DFAF7F8FF0446EFE7022105F1E8 +:106130002400FAF779FFF7E72646B9E6022105F1D0 +:106140002400FAF771FFF5E601263446FEE62646FE +:10615000FCE6012105F12400FAF766FF04460AE790 +:106160000126344612E7264610E7164AD36A43F45E +:106170000033D3626CB9134A296DD36C23F4803396 +:106180000B43D3640FE70221281DFAF7C5FF04462D +:10619000F0E7264607E721F48072B2F5007F7FF42E +:1061A0001BAF64B90748426D22F440720A4342654E +:1061B00013E70448C26A42F40032C262F1E726469D +:1061C0000BE700BF00440258484B1A6902F038023E +:1061D000102A30B500F08680182A0CD0002A40F032 +:1061E00083801A68424812F0200F03D01B68C3F363 +:1061F000C103D84030BD996A9D6ADA6A15F47C7F84 +:10620000C5F305105C6BF5D0C4F3CC0402F00102B9 +:1062100007EE900A01F003016243B7EE006AF8EE60 +:10622000E76A012907EE902AFAEEE97A4CD00229B2 +:106230003CD0002948D11A68920627D519682C4A03 +:10624000C1F3C1011B6BCA40C3F3080307EE102A58 +:10625000F8EEC75A85EEA67A06EE903AF8EEE66AB0 +:1062600076EEA77A77EE867A204B67EE877A1B6BFD +:10627000C3F34623013307EE103AF8EEC76A87EE00 +:10628000A67AFCEEC77A17EE900AB3E71B6BC3F34E +:10629000080307EE103AB8EEC77A77EE277A77EE62 +:1062A000867A9FED146A86EE267ADDE71B6BC3F3D0 +:1062B000080307EE103AB8EEC77A77EE277A77EE42 +:1062C000867A9FED0D6AEEE71B6BC3F3080307EEBA +:1062D000103AB8EEC77A77EE277A77EE867A9FED96 +:1062E000076AE0E7064885E7064883E70044025866 +:1062F0000090D0030024744C20BCBE4B0024744A90 +:1063000040787D0100093D0008B5FFF75DFF084BAF +:1063100008499A699B69C2F3032203F00F038A5C60 +:10632000CB5C02F01F0203F01F03D040D84008BD31 +:10633000004402586FAD010873B50E460446FFF7DE +:10634000E3FFB0FBF6F5FF2D47DCFFF7DDFFB0FB09 +:10635000F6F101FB160606B9013D6560FAF7F6FD98 +:1063600094F84120034612B941F28832A2642068B1 +:10637000A1680268013922F4706242EA01222021F8 +:1063800002602046A26C00920022FAF73DFF30BB6B +:106390002268E569E36811682B43256A21F07F4193 +:1063A0002B43656821F0D00143EA05630B4313607A +:1063B0005568D4E905310B43216943EA0143094992 +:1063C00029400B435360136843F00103136001231A +:1063D000606484F8413002B070BDFF25BDE74FF026 +:1063E000FF30F8E7FEF8E0FF08B5FFF78DFF054B3B +:1063F000054ADB69C3F30223D35C03F01F03D840D3 +:1064000008BD00BF004402586FAD010808B5FFF792 +:106410007BFF054B054ADB69C3F30213D35C03F032 +:106420001F03D84008BD00BF004402586FAD0108EB +:10643000DFF86CC290212DE9F043DCE90035834C94 +:1064400089B06943DCF80880DCF80C006218B8F504 +:10645000965F63504FF0000138BF0726DCF81070DC +:1064600028BF0E46A2F85610A2F85410A2F85E10EB +:10647000A2F85C1011625166DCF814E0C2F80480E6 +:106480009060D760C2F810E0C2E90611C2E9096164 +:10649000BCF91A1001315DD1082151616C4A934257 +:1064A00010D19022B8F5165F02FB054292F88010D9 +:1064B00057D8012906D0196841F00201196000215E +:1064C00082F88010902202FB0541D1F884C0BCF113 +:1064D000000F01D181F880C002FB0542242140EA6F +:1064E0000E00C2F884101968526921F001011043AE +:1064F000584A196019680A40104318605A6822F413 +:10650000405217435F609A6822F06E4222F4306274 +:106510009A60DA6A22F00F0216434F4A9342DE6213 +:1065200025D14E4B5B6D03F03803282B00F284809D +:106530004B4AD35C082B00F2BB81082B7CD8DFE8E8 +:1065400013F0E001E6017B007B00E9017B007B00AA +:106550007B00EE01BCF9181001310CBF04210C21A5 +:106560009BE70129AED0196821F00201A6E73D4A58 +:10657000934207D1394B5B6D03F00703052B5BD8C2 +:10658000394AD6E7394A934207D1344B5B6D03F061 +:106590000703052B50D8364ACBE7364A934207D13A +:1065A0002E4B5B6D03F00703052B45D8324AC0E73D +:1065B000324A934207D1294B5B6D03F00703052B49 +:1065C0003AD82F4AB5E72F4A934207D1234B5B6D48 +:1065D00003F03803282B2FD82B4AAAE72B4A9342E3 +:1065E00007D11E4B5B6D03F00703052B24D8284A07 +:1065F0009FE7284A934207D1184B5B6D03F00703CE +:10660000052B19D8244A94E7114A934214D102F574 +:106610000E32936D03F00703052B0DD81F49CB5C99 +:10662000102B00F0088109D8042B00F0FA80082B09 +:1066300000F0FC80022B35D0012642E0202B00F038 +:106640003581402BF8D14FF40040FDE0F40C0224DA +:10665000000C0058F369FFCF0010014000440258BD +:106660003AAD01080044004063AD01080048004015 +:1066700063AD0108004C004063AD010800500040CC +:1066800063AD0108001401403AAD010800780040F4 +:1066900063AD0108007C004063AD010869AD0108ED +:1066A000900B0224FFF730FEA94BAA4A1B6AC3F3E2 +:1066B0000213D35C03F01F03D840002840F0C480CD +:1066C000002690224FF00113012E02FB05F204EB8D +:1066D00002018B664FF00003C1E91C3300F03481E6 +:1066E0008B6A002B66D0D80706D5A058C96A4268C5 +:1066F00022F400320A4342609A0709D590226A4385 +:10670000A158A0184A68006B22F4803202434A6004 +:106710005F0709D590226A43A158A0184A68406BC8 +:1067200022F4802202434A60180709D590226A4366 +:10673000A158A0184A68806B22F4004202434A60C4 +:10674000D90609D590226A43A158A0188A68C06B5F +:1067500022F4805202438A609A0609D590226A4345 +:10676000A158A0188A68006C22F4005202438A6083 +:106770005F0613D590226A43A158A0184A68476C57 +:1067800022F48012B7F5801F42EA07024A6005D161 +:106790004A68806C22F4C00202434A60180609D598 +:1067A00090236B43E258E1185368C96C23F400232B +:1067B0000B43536090276F43E35904EB07085A6873 +:1067C00022F490425A609A6822F02A029A601A686B +:1067D00042F001021A600023C8F88C30FAF7B6FBC9 +:1067E000E35902461B68190700F1A38090236B430D +:1067F000E3581B685B0707D54FF480014046FAF762 +:10680000D7FB002840F09F80902303FB0544202302 +:10681000C4F88430C4F888300023E36684F88030FC +:1068200092E002A8FAF794F9039846E705A8FAF768 +:10683000E7F8069841E71368474813F0200F03D0A4 +:106840001368C3F3C103D8404FF09009434B09FBD1 +:1068500005F904EB09014A6AD1F8048033F81220E3 +:1068600008EB4801B0FBF2F38B42FFF4E5AEB3EB6B +:10687000083F3FF6E1AE0023002114F043F9424601 +:106880000F020023060247EA10674FEA580030184B +:1068900047F1000114F036F9314BA0F540729A42ED +:1068A0003FF6CAAE54F80930D86009E72D48CBE767 +:1068B000202B39D0402B39D0102B7FF4BDAE244B88 +:1068C00025481A6812F0200F03D01B68C3F3C103D8 +:1068D000D84090236B43E1184A684E6A1F4931F84B +:1068E0001610B0FBF1F000EB5200B0FBF2F080B2FA +:1068F0004FF6EF72A0F1100191423FF69DAEE358C2 +:10690000D2E7FFF783FD00283FF4DAAEE1E7FFF7B7 +:106910006BFDF8E702A8FAF71BF90398F3E705A85F +:10692000FAF76EF80698EEE70E48D2E74FF400400B +:10693000CFE701904FF400114046FAF739FB019A76 +:1069400000283FF453AF0326304609B0BDE8F0837A +:10695000004402586FAD01080090D003A8AD0108B3 +:10696000FFFC0F0000093D00154B4FF4E13210B55C +:106970009A60B0B01A68134B9A421CD1BC22002115 +:1069800001A812F0E3F9042368460093012325933C +:10699000FEF746FFFFF74CFD78B100230A4C259324 +:1069A0000A4BD4F88C209A42FBD16846FEF738FF98 +:1069B0004FF44073E360FFF73BFD30B010BD00BF04 +:1069C000900B0224000C0058006402580003008061 +:1069D00037B5444C2369A369A369A369E569E369F1 +:1069E000236A05F07005404B1B68FFF70FFDD4F8D4 +:1069F000E8303E4A43F00803C4F8E830D4F8E83001 +:106A000003F008030193019B394BD2F88C10994293 +:106A1000FBD1D4F8903043F00803C4F89030D4F898 +:106A2000903023F00803C4F890304FF44073314C99 +:106A3000D360314B23604FF0FF33E3602F4B002DC9 +:106A40004DD1B0FBF3F0002301382361A3606060F7 +:106A5000C4E9053394F83D3003F0FF020BB984F824 +:106A60003C20254A022384F83D30136823F47C73CC +:106A700013604FF0FF33D36201239062536184F8B7 +:106A8000483084F83E3084F83F3084F8403084F851 +:106A9000413084F8423084F8433084F8443084F83C +:106AA000453084F8463084F8473084F83D30144B44 +:106AB000144A9B68C3F80821BFF34F8F124B4FF461 +:106AC00080225A6094F83E30012B01D1F9F7FEFD87 +:106AD0002268D36823F00203D36003B030BD4000C6 +:106AE000AFE700BF00440258002000520064025883 +:106AF0000003008064050024000C004040420F00A9 +:106B000000ED00E06508000800E100E07F4A13683E +:106B100003F00F038B422DE9F04104460D467ED36E +:106B200023685F0700F189801E070BD578496669E5 +:106B3000C86900F07000864204D9CA6922F0700268 +:106B40003243CA61D8060BD57149A669C86900F4F9 +:106B5000E060864204D9CA6922F4E0623243CA6125 +:106B600099060BD56A49E669086A00F0700086420A +:106B700004D90A6A22F0700232430A629A070BD5DE +:106B80006349E668886900F00F00864204D98A6983 +:106B900022F00F0232438A61DF075CD423689E072C +:106BA00000F18D8059490A6802F00F029542C0F049 +:106BB0009480580700F19C8019070BD554496569EA +:106BC000C86900F07000854204D2CA6922F07002E0 +:106BD0002A43CA61DA060BD54D49A569C86900F494 +:106BE000E060854204D2CA6922F4E0622A43CA61A5 +:106BF0009B060BD5464AE069116A01F07001884294 +:106C000004D2136A23F0700303431362FFF7DCFA24 +:106C10003F4B9A699B69FFF7DBFE00200BE013688E +:106C200023F00F030B431360136803F00F038B4231 +:106C30003FF476AF0120BDE8F081354926698869C7 +:106C400000F0700086427FF66FAF8A6922F0700212 +:106C500032438A6168E72E4BA1689A6922F4706218 +:106C60000A439A6162681B68022A1BD113F4003F31 +:106C7000E0D0274E41F28838336923F007031343ED +:106C80003361FAF763F907463369626803F0380342 +:106C9000B3EBC20F82D0FAF759F9C01B4045F3D9C4 +:106CA0000320C8E7032A02D113F0007FE0E7012A9E +:106CB00002D113F4807FDBE713F0040FD8E7144907 +:106CC000E668886900F00F008642BFF46BAF8A69FE +:106CD00022F00F0232438A6164E70A6822F00F0251 +:106CE0002A430A600A6802F00F029542A2D160E7C7 +:106CF00007492569886900F070008542BFF45CAFE0 +:106D00008A6922F070022A438A6155E70020005206 +:106D10000044025890F8BC230368012A21D00122C4 +:106D200080F8BC23826A012A06D18269012A03D035 +:106D30009A6B42F480329A639A6842F001029A6038 +:106D4000D3F8002E22F00302C3F8002ED3F8042853 +:106D500022F00202C3F80428002380F8BC3318464E +:106D600070470220704700002DE9F74F0023DFF83D +:106D7000BC81DFF8BCC14FF0B0490A6832FA03F4B5 +:106D800002D103B0BDE8F08F01279F403A4000F0E8 +:106D9000B6804C684FEA430E032524F0100A05FA2A +:106DA0000EF50AF1FF36ED43012E10D8866806EA8B +:106DB000050BCE6806FA0EF646EA0B0686604668B4 +:106DC00026EA0707C4F300169E4037434760C768AA +:106DD000BAF1020F8E6807EA050706FA0EF646EAD0 +:106DE0000706C66014D14FEAD30A03F0070B0F273A +:106DF00000EB8A0A4FEA8B0BDAF8206007FA0BF7F0 +:106E000026EA07070E6906FA0BF63E43CAF8206029 +:106E10000668354004F0030606FA0EFE4EEA050544 +:106E20000560E5006BD5D8F8F45023F0030603F0B5 +:106E300003074FF00F0E45F0020506F1B046BF0004 +:106E4000C8F8F45006F58066D8F8F45005F002054D +:106E50000195019D0EFA07F5D6F808A02AEA050E5D +:106E6000314DA8424DD005F58065A8424BD005F5BF +:106E70008065A84249D005F58065A84247D005F550 +:106E80008065A84245D005F58065A84243D005F548 +:106E90008065A84241D005F58065A8423FD005F540 +:106EA0008065A8423DD005F58065A8420CBF092544 +:106EB0000A25BD40E70345EA0E05B5606FEA020604 +:106EC000DCF8005054BF35401543A703CCF8005000 +:106ED000DCF8045054BF35401543E7024FF0B0478B +:106EE000CCF80450D9F8005054BF35401543A402E3 +:106EF0003D607D6854BF35401543C9F804500133E7 +:106F00003BE70025D5E70125D3E70225D1E7032597 +:106F1000CFE70425CDE70525CBE70625C9E70725FB +:106F2000C7E70825C5E700BF000002580044025823 +:106F3000800000580A4BDA6842F00102DA60DA6831 +:106F4000D2070BD5D3F80C2142F00102C3F80C2173 +:106F5000D3F80C01C04300F00100704701207047D6 +:106F600000200052104BDA68D20706D40E4BD3F83B +:106F70000C0110F001000AD170470C4A5A6002F16E +:106F800088325A60DB68DB07F0D501207047074A7A +:106F9000C3F8042102F18832C3F80421D3F80C01AC +:106FA00000F00100704700BF002000522301674538 +:106FB00038B50446F9F7CAFF05460134F9F7C6FFAC +:106FC000431BA342FAD338BDF0B593B00646202246 +:106FD00000210AA811F0BAFEA44B9B6A03F0030338 +:106FE000022B34D0A14B0227A14D0024D3F8E0207E +:106FF00005A9284642F08002C3F8E020D3F8E0302B +:10700000089403F080030493049B0123CDE90573E6 +:107010000793FFF7A9FE0A20FFF7CAFFAF61FCF74D +:1070200029F9944BF6B90296DA6A22F00102DA6283 +:10703000DB6A03F0010302938F4B9A6942F44042EA +:107040009A619B6903F440430293029B1FE0012174 +:107050000AA8CDE90A11FFF759FD0028C2D0002087 +:1070600013B0F0BD0394DA6A22F00102DA62DB6A3F +:10707000814A03F001030393936923F4404343F4EB +:1070800080439361936903F440430393039B7A4ADB +:1070900093699904FCD5754B002E1A690CBFA02585 +:1070A0002825996A02F03802102A07D0182A40F0E1 +:1070B000908001F00302022A40F08B801B686B4C29 +:1070C000236843F480532360F9F740FF07462368A1 +:1070D0009B0440F19480236903F03803182B00F0DF +:1070E000A280236823F080732360F9F72FFF5F4CA1 +:1070F00007462368980100F18980A36A013D23F4C3 +:107100007C7345F0847523F0030345F4813543F027 +:107110005203A3622563E36A544D23F00103E36243 +:10712000636B23F47F4323F0F8036363E36A23F084 +:107130000C0343F00803E362E36A23F00203E36213 +:10714000E36A43F48033E362E36A43F40033E362C7 +:10715000E36A43F48023E362E36A43F00103E362FA +:10716000236843F080732360F9F7F0FE04462B6830 +:10717000990152D53F2203230021CDE90A23082398 +:107180004FF48062CDE90C134023CDE90F320E930A +:10719000119306B904210AA8FFF7B8FC00287FF470 +:1071A0005EAF324B01201A6842F080021A60D3F8B9 +:1071B000F42042F00202C3F8F420D3F8F4302D4A50 +:1071C00003F002030193019B136A43F0010313626E +:1071D00046E71A68254F42F480221A601A6842F482 +:1071E00080321A60F9F7B2FE04463B689A033FF515 +:1071F00066AFF9F7ABFE001B6428F6D92FE7F9F765 +:10720000A5FEC01B02287FF662AF28E7F9F79EFEB5 +:10721000C01B02287FF66DAF21E7F9F797FE001B30 +:107220000228A4D91BE7A26A236B02F003010229FA +:107230007FF415AFC2F30512052A7FF410AFC3F334 +:107240000802013DAA427FF40AAFC3F34622012A95 +:107250007FF405AFC3F30642092A7FF400AFC3F3FE +:107260000663012B7FF4FBAE84E700BF00440258A5 +:10727000001C0258000400580048025873B5054627 +:107280000C200E46019206F0ADFA00232946019A21 +:107290000446C0E90133074B0360F9F7D5FD054605 +:1072A00030B1236820465B689847284602B070BD1D +:1072B0003460FAE748B0010873B505460C200E4665 +:1072C000CDE9003206F08EFA00210446C0E9011132 +:1072D0000849DDE9003201602946F9F758FD054605 +:1072E00030B1236820465B689847284602B070BDDD +:1072F0003460FAE774B0010803682DE9F041DB6EF1 +:1073000004460D469847804640F2011006F06AFA9E +:107310002368002706461B6F2946204698472368A6 +:107320003246294620465B6E9847002801DD01372A +:10733000F5E723684246294620469B6E984730462B +:1073400011F09AFC3846BDE8F0812DE9F04306467D +:1073500087B02C20154606F1A4080F4606F042FA25 +:107360000446404606F1140903F090FDB36902AAF1 +:10737000214663604846F3690195A36001AB02F0C2 +:1073800003FB0546A8B99DF80C30222B1CD104AA9A +:107390002146484601F0D8FB054650B96368236191 +:1073A000A36863610E23A3611023E360736A7462B0 +:1073B0002360404603F04AFD4DB93C60284607B0C3 +:1073C000BDE8F043F9F7A3BD6FF01305F1E72046E0 +:1073D00011F052FCF2E72DE9F04F07469B4693B0BF +:1073E000382007F1A4098846164606F0FBF9044642 +:1073F000484603F04BFD1BF0030C07F1140A00F0A4 +:10740000C580BCF1010F4FF0000000F0C180BCF15D +:10741000020F844601D0002100E003214FEA6B02F5 +:1074200002964FEAAB0502F4807205F400752A4318 +:107430000BF480652A434FEA0B2505F400651543DC +:1074400045EA0C0505430D4305F00303012B11D15B +:1074500002AB03AA07A9504602F096FA064600BB03 +:107460009DF81030222B00F08A80A9053FD56FF0DF +:10747000100609E097F85430002BE9D1504601F08E +:10748000DFFF06460028E3D0484603F0DFFC002E6D +:1074900078D1C8F80040304613B0BDE8F04FF9F796 +:1074A00036BD821CF0D1029B2F211846019313F0A8 +:1074B00073F883460028E7D1EB05E5D5019B40F63C +:1074C00011028DF812001846ADF8102012F032FAB1 +:1074D0004FF0FF328DF8130007A9019B5046CDE90C +:1074E000052B03AA02F02CFB06460028CCD1089BF2 +:1074F000002268056360099BA261A360039BE360AF +:10750000059B2361069BC4E9075263610AD44FF0CF +:10751000FF337D69E3626B6BF3B13A6A62B16FF07E +:107520000B06B1E713B145F48035E5614FF0FF324A +:107530000023C4E90423EAE76363E36903F0030378 +:10754000012B04D004F12C01284601F006F93B6A16 +:1075500000263C62236097E7E36903F00303012BF5 +:1075600006D1686911F080FB60630028EFD1D6E78F +:10757000A86911F079FB60630028E3D1CFE76FF0D1 +:10758000140681E7204611F077FB84E7012042E7EB +:107590004FF0020C3FE7000010B50446EFF30583FF +:1075A00013B16FF0050010BD0DF066FA0028F8D198 +:1075B00020464FF0FF31DFF808C000DFF3E700BFDF +:1075C0001130010870B50A440E4E036893FAA3F314 +:1075D00093FAA3F30360914212D011F8014B84EAAD +:1075E000030505F00F0556F8255085EA131383EAC5 +:1075F000141404F00F0456F8244084EA1313EAE745 +:10760000036070BD54B20108437982790433C079B4 +:1076100013441844704703681A6AC36AD31A19449A +:10762000B1FBF2F302FB1311036B8B4210B50BD9C4 +:107630004C09C26B012301F01F0103FA01F152F85A +:1076400024300B4342F82430002010BD0368084664 +:107650001847036910B5044613B150F8041B984746 +:10766000204610BD38B5036804460D469B6F984709 +:1076700023682D692046DB6F9847284638BD38B50A +:10768000036804460D469B6F98472368ED682046C3 +:10769000DB6F9847284638BD38B5036804460D4669 +:1076A0009B6F984723686D692046DB6F9847284693 +:1076B00038BD03680122D3F88030184708B5064B5F +:1076C00053F820000368DB6A984780B2B0F5007F6A +:1076D00038BF4FF4007008BDF41402242DE9FF47B1 +:1076E00016461C468046DFF844900391FFF7E6FFFC +:1076F000A0FB0667A0FB044559F828003246036842 +:10770000CDE90045D3F81CA03B46D04750B959F805 +:107710002800324603990368CDE900459C693B4641 +:10772000A04700B1042004B0BDE8F087F41402249F +:107730007FB5164605461C460391FFF7BFFF0A4A70 +:107740000346039952F82500A3FB04450268CDE9DE +:1077500000455469A3FB0623A047002814BF04205A +:10776000002004B070BD00BFF414022413289ABF97 +:10777000014B185640427047BFB1010813128A7678 +:10778000CB760378032B01BF120C0A7512124A75CF +:1077900070470328CA7E8B7E08BF487D43EA0223D8 +:1077A00002BF0A7D42EA002243EA024318467047BC +:1077B00060B103685BB11A785AB18088DA88904268 +:1077C00016BF0920002000230B60704703460920E4 +:1077D000FAE709201346F7E7026810B504465AB1E4 +:1077E000114611F8013B202B11D93A2BF9D113780E +:1077F000303BD8B2092802D94FF0FF3006E0023200 +:107800009142F9D1032B1846F6DC216010BD00200F +:10781000FCE738B5C378044613B90025284638BDBF +:10782000D0E90C2101234078FFF758FF054680B9C5 +:10783000216B636AE269CB1AE0709342EDD2A378C0 +:10784000022BEAD10A440123616B6078FFF746FFFF +:10785000E4E70125E2E70B0A017043700B0C090E07 +:107860008370C170704742884378007843EA0223EE +:1078700040EA03207047002370B51C462E26C569D8 +:107880002A5D0134202A0AD0052A08BFE522092CE6 +:1078900002BFCD1801336E72CD1801336A720B2C02 +:1078A000EDD10B4400225A72C369DB7A03F03F0327 +:1078B0000B72C46904F11C00FFF7D5FF0860E27D7C +:1078C000A37D43EA0223CB80627E237E43EA022328 +:1078D0008B8070BD406803689B6C1847D0E9043109 +:1078E00010B5D0E90824D01A64EB010110BD40683E +:1078F00003685B6B1847416830B4D0E904400D68F9 +:1079000012192D6B40EB03030846294630BC08478B +:1079100041680B6810B41C6BD0E90423084621466B +:107920005DF8044B0847406803689B6A1847406845 +:1079300003685B6A18472DE9F347054614469846E5 +:107940004068D5E904230168A218DDE90AA948EBDB +:107950000303CDE900A9496C884780B114EB0A0400 +:10796000D5E9043248EB0908E61848EB0207D5E9E7 +:107970000823BB4208BFB2422CBF0120002002B046 +:10798000BDE8F0872DE9F347054614469846406860 +:10799000D5E904230168A218DDE90AA948EB03032D +:1079A000CDE900A9096C884780B114EB0A04D5E938 +:1079B000043248EB0908E61848EB0207D5E908232A +:1079C000BB4208BFB2422CBF0120002002B0BDE87C +:1079D000F0872DE9F3470546144698464068D5E9F7 +:1079E00004230168A218DDE90AA948EB0303CDE9E5 +:1079F00000A9C96B884780B114EB0A04D5E90432A9 +:107A000048EB0908E61848EB0207D5E90823BB4212 +:107A100008BFB2422CBF0120002002B0BDE8F087B1 +:107A20002DE9F341DDE908670168044615469846EB +:107A3000CDE90067496C884768B16068D4E90423E0 +:107A40000168AA18CDE9086748EB0303C96902B0C9 +:107A5000BDE8F04108476FF47A6002B0BDE8F081FC +:107A60002DE9F04385B00446154698460391DDE9BB +:107A70000C67CDE900670168D1F84090C84778B13C +:107A800060680399D4E904230468AA18CDE90C6757 +:107A9000A46948EB0303A44605B0BDE8F043604782 +:107AA0006FF47A6005B0BDE8F0832DE9F04385B04E +:107AB0000446154698460391DDE90C67CDE9006759 +:107AC0000168D1F83C90C84778B160680399D4E95F +:107AD00004230468AA18CDE90C67646948EB030322 +:107AE000A44605B0BDE8F04360476FF47A6005B086 +:107AF000BDE8F083406803681B6918474068036865 +:107B0000DB68184773B50446406803689B6898476C +:107B1000054658BB606803689B6B9847237A3BB166 +:107B20002572D4E90432C31A61EB0202C4E90432BB +:107B3000237E43B10026D4E908322676C31A61EBCE +:107B40000201C4E90831D4E90416D4E908322068F6 +:107B50005B1A62EB0602CDE900320022416C002381 +:107B600020468847002808BF6FF47A65284602B08F +:107B700070BD406810B103689B6C18477047407E29 +:107B80007047007E7047D0E9042110B5D0E9023477 +:107B9000981844EB010110BDD0E902017047D0E90B +:107BA0000401704790F820301BB1406803685B6B9C +:107BB00018476FF47A60704790F8201030B459B1CC +:107BC000D0E90114C0680D6812192D6B40EB030356 +:107BD0000846294630BC08470020002130BC7047C9 +:107BE00090F820301BB140680368DB6A184700201A +:107BF0000021704790F820301BB1406803689B6AF1 +:107C0000184700200021704790F820301BB14068D1 +:107C100003685B6A18470020002170472DE9F34193 +:107C200090F82010044615469846DDE9086799B19A +:107C30000168CDE90067496C884768B1E368D4E919 +:107C400001020168AA18CDE9086748EB0303C96976 +:107C500002B0BDE8F04108476FF47A6002B0BDE8B9 +:107C6000F0812DE9F04390F820C085B00446154618 +:107C700098460391DDE90C67BCF1000F16D0CDE901 +:107C800000670168D1F84090C84778B1E36803996C +:107C9000D4E901020468AA18CDE90C67A46948EB8D +:107CA0000303A44605B0BDE8F04360476FF47A6073 +:107CB00005B0BDE8F0832DE9F04390F820C085B011 +:107CC0000446154698460391DDE90C67BCF1000FA8 +:107CD00016D0CDE900670168D1F83C90C84778B16B +:107CE000E3680399D4E901020468AA18CDE90C6796 +:107CF000646948EB0303A44605B0BDE8F043604760 +:107D00006FF47A6005B0BDE8F08390F820301BB1C5 +:107D1000406803681B6918476FF47A6070472DE963 +:107D2000F047D0E9011405684FEA640A9DF820C0C5 +:107D300005EB6400E4079DF824E048BF55F80A40CD +:107D40009DF82880DDF82C9048BF6158DDE90C676C +:107D5000CDE90A89CDE90C67CDE908CEBDE8F04749 +:107D6000084730B49DF808109DF80C409DF810505D +:107D70000291CDE9034530BCC1680847FF20704738 +:107D8000D0E944017047F0B51F46D0F818311646C7 +:107D900001332DD1D0F86021D0E94445AF4208BF6E +:107DA000A6421CD2D0F82811C9B101290CD000F587 +:107DB000B47C0023994212DDFCE80245BD4208BFB5 +:107DC000B44202D20133F5E700230344012193F8C2 +:107DD000544100230C4205D0723350F82320104642 +:107DE000D117F0BD01334900042B49B2F2D1F6E7B7 +:107DF0004FF480500021F4E70048704790B101082B +:107E0000D0F860010021704701200021704701680F +:107E10002DE9F04717469846096B0646DDE9089AB2 +:107E2000884702460B463846414612F06BFE134324 +:107E300002D00020BDE8F08717EB09043368304614 +:107E400048EB0A0514F1FF32196B45F1FF338847FF +:107E500002460B462046294612F054FE1343E8D151 +:107E6000336830469B6B9847A94208BFA0422CBF9D +:107E700001200020DEE72DE9F74F16460168026970 +:107E8000054600930192896B4769DDE90CAB16EB5F +:107E90000A0843EB0B098847494508BF4045DDE91F +:107EA000003203D2002003B0BDE8F08F16F1784411 +:107EB000284643F1FF31A4182A6841EB0707116BEC +:107EC0003246884702460B462046394612F01AFED3 +:107ED0001343E7D114EB0A042B68284647EB0B0742 +:107EE00018F1FF32196B49F1FF33884702460B4600 +:107EF0002046394612F006FE13430CBF0120002035 +:107F0000D1E700000048704796B10108D0E90601AA +:107F1000704790F82030002B0CBF4FF0FF30FF204F +:107F2000704790F8203013B12020002170470020C6 +:107F3000FBE72DE9F0471E460368154604469B6A99 +:107F4000DDE9087A984702460B462846314612F08A +:107F5000D9FD134302D00020BDE8F08723682046F6 +:107F60009B6A984702460B463846514612F0CAFDB6 +:107F70001343F0D115EB07082368204646EB0A09A6 +:107F80009B6B9847494508BF40452CBF0120002006 +:107F9000E2E72DE9F0471E460368154604465B6A92 +:107FA000DDE9087A984702460B462846314612F02A +:107FB000A9FD134302D00020BDE8F08723682046C6 +:107FC0005B6A984702460B463846514612F09AFDC6 +:107FD0001343F0D115EB07082368204646EB0A0946 +:107FE0009B6B9847494508BF40452CBF01200020A6 +:107FF000E2E700207047036873B50C469B6F0646A6 +:10800000984701A92046FFF7D3FB054600B9206039 +:1080100033683046DB6F984714B1204610F02CFED1 +:10802000284602B0BDE87040FFF7A0BB08B110F0D1 +:1080300023BE704710B5044610F01EFE204610BD4A +:1080400010B5044610F018FE204610BD70B5044669 +:10805000FFF7DFFB054600283FD12378032B35D1FE +:108060002679012E32D10146A289606B10F06EFE96 +:10807000636B55224121722083F8FE21AA2283F8E6 +:10808000FF215223626B137053706123D170937080 +:10809000626B82F8E73182F8E40182F8E50182F848 +:1080A000E611606B616900F5F470FFF7D4FB606B5B +:1080B000216900F5F670FFF7CEFB226A3346616B4B +:1080C000013260782263FFF709FB25716278034B68 +:1080D00053F82200B0FA80F0400970BDF414022475 +:1080E00090F8203010B504465BB11C30FBF736F930 +:1080F00038B984F8200060680368BDE81040DB6888 +:108100001847002010BD2DE9F04F89B090469946E0 +:1081100005469DF84820C3469DF8503090F8FA7106 +:10812000DDE915610591032A57D8DFE802F01B024B +:10813000190302270F2B4FF0000205F1040A08BFB4 +:1081400095F8FD3111465046009203933B46CDE928 +:1081500001220AF08DF9044638B109B0BDE8F08F6C +:108160000327E7E74FF0FF3BE4E7059B4FF0FF32C3 +:108170009DF84C105046079307ABCDE900635B4672 +:10818000FBF720F93B468346224621465046CDE97F +:108190000244CDE900440AF06BF90028DDD1BBF1BF +:1081A000000F01D05846D8E795F801010028D4D037 +:1081B000B9F1000F08BFB8F1040F04D1337843F0D0 +:1081C0000A033370EEE7B9F1000F08BFB8F1020FF0 +:1081D000E8D1337823F00403F3E74FF0FF30BCE736 +:1081E00008B590F820302BB100691044FBF710F867 +:1081F000002108BD1846FBE708B590F8203023B1F0 +:108200000069FBF705F8002108BD1846FBE7F7B544 +:1082100090F8201004461546DDE9086771B1016841 +:10822000CDE90067496C884740B121693246201D7D +:10823000294403B0BDE8F0400AF0B0B96FF47A60A9 +:1082400003B0F0BDF0B590F8207085B00446154637 +:108250000391DDE90A6C7FB10768CDE9006C3F6CE2 +:10826000B84748B1226933460399201D2A4405B016 +:10827000BDE8F0400AF0DEBA6FF47A6005B0F0BDF8 +:1082800090F8203010B5044613B94362002010BDA9 +:108290002430FBF763F80028F8D184F82000201D73 +:1082A000BDE810400AF00ABC90F820302DE9F04FEC +:1082B000814685B003B9436209F1240656E8000FF0 +:1082C000013046E80003002BF8D1012843D109F121 +:1082D00004000AF00FFC804630B13046FBF73EF850 +:1082E000404605B0BDE8F08FD9E906ABD9E90445B1 +:1082F0001AEB040300934BEB05030193FAF7A8FF75 +:10830000002300F1006C8646DDE900018B4208BFC6 +:10831000844505D230466FF47A68FBF71FF8DFE733 +:10832000002D08BFB4F1006FF4D35AEA0B030ED14D +:108330004FF000610B1B029365EB45030393DDE9EE +:10834000026716EB0E0647F10007C9E9066701212F +:1083500089F82010C4E79846C2E770B514466FF05C +:108360000046126805460498B24207D238B1014669 +:10837000184611F0CFFF431C05D1206070BD15B128 +:108380008A4238BFAB54236801332360F6E700000C +:108390002DE9F04F89B0002405469DF850A09DF8C6 +:1083A0004800A245DDF85480079414BF4FF0300B0D +:1083B0004FF0200B0128CDE905443FD1A3423DDA1F +:1083C0005B428146841E00270DF1140C4FF00A0E0B +:1083D000E4B20294029C012C56D8022803F00F0448 +:1083E0004FEA13130CBF334E334E345D0CF8074085 +:1083F0007C1C002B46D1B9F1000F27D0BAF1000F39 +:1084000009D02D232846CDF80080CDE90212FFF7D0 +:10841000A4FFDDE90212BC1C139B9C421BDBBAF1DA +:10842000000F09D12D232846CDF80080CDE9021296 +:10843000FFF793FFDDE90212013C1EE013B14FF09C +:108440000009BFE7302301248DF81430139B9C42B0 +:1084500013DA4FF000095B462846CDF80080CDE9DD +:108460000212FFF77AFF139B013BA3421393DDE94E +:108470000212F0DCB9F1000FD1D105AE6CB909B030 +:10848000BDE8F08F2746A5E7B3FBFEF40EFB1433DF +:1084900030330CF807302346AAE7013CCDF80080C2 +:1084A0002846335DCDE90212FFF757FFDDE90212DE +:1084B000E4E700BF94B20108A4B201082DE9F04F2F +:1084C0001C4689B000238946129E15460793B2B117 +:1084D000994214DB0CBF012301F1FF394FF0000B6F +:1084E000049315F80B3073B948B1049B3BB9079B53 +:1084F0004B4595BF049A049BC25400F80930079875 +:1085000009B0BDE8F08F252B40F002810BF1010886 +:1085100015F80830203BDBB20D2B07D842F60902D4 +:1085200022FA03F3DB0748BF0BF1020815F8083005 +:108530002A2B1DD1002108F1010204348E46AF5CC4 +:10854000AB182E2F51D15F782A2F2CD04FF0000A74 +:10855000C5F1010C0CEB030213F8017F303F5FFA09 +:1085600087F8B8F1090F21D80A2202FB0A7AF1E74D +:10857000302B15D108F1010815F80830302BF9D04F +:108580004FF0010EA8440021A8EB050218F8013BAA +:10859000303BDFB2092FD2D80A2202FB0131F3E7C8 +:1085A0004FF0000EEEE7023254F804ABAB5C682BE0 +:1085B0001ED1AB185B78682B0CBF7223112303F01C +:1085C0000308904415F80870642F01D0692F3FD13B +:1085D000822B27D1252307AA494600960590252FEF +:1085E00018BFD846FFF7B9FE2EE06FF0004ADDE76E +:1085F0006C2B06D1AB185B786C2B0CBF822321232C +:10860000DDE76A2B08D07A2B08D0742B08D04C2BCE +:1086100014BF00236123D2E73123D0E74123CEE703 +:108620005123CCE7112B54F8042B0FD0722B00D11F +:1086300052B201230191CDE902E600934946134667 +:1086400007AA0590FFF7A4FE059838E012B2F0E7FC +:10865000752F03D007F0DF02582A16D1822BB9D02C +:10866000112B54F8042B09D0722B00D1D2B2752FE4 +:108670000191CDE902E603D10023DEE792B2F6E7ED +:10868000582F0CBF03230223D7E7632F09D154F8D7 +:10869000043B07AA49460096DBB20590FFF75DFE52 +:1086A000D2E7732F16D154F804BB0BF1FF3717F83C +:1086B000013F23B1AAEB07021BEB020F02D108F125 +:1086C000010B0EE707AA494600960590FFF745FE05 +:1086D0000598ECE7702F7FF47DAF54F8047B3023CE +:1086E00007AA494600960590FFF737FE782307AAA8 +:1086F000494605980096FFF730FE002307AA494631 +:1087000005980396CDE90133032300933B4699E78F +:1087100007AA49460096D8460590FFF71EFE93E744 +:10872000F8B5C5690F460E68083DAE4213D3B6FBD7 +:10873000F5F0013812F0FEF9841CA6EB8404B4FBBA +:10874000F5F4204612F0F6F9A6EB800004FB1505BF +:1087500020463D60F8BD0020FCE710B50C4682695C +:10876000FF21A06810F0F2FA4FF0FF33236010BD34 +:10877000F7B50C460968064617464B1C21D0006821 +:10878000836900938568D4E90123A847054620B989 +:1087900037B921463068FFF7E0FF284603B0F0BD47 +:1087A0003368394630469B690193A3680093D4E946 +:1087B0000023FAF7BCFE002805DBEAD16FF0330591 +:1087C000EBE70025E9E70546E7E72DE9F74F0C9CC5 +:1087D00007460D4691469846DDF838A0BAF1000FDD +:1087E00003D1504603B0BDE8F08F2B68386843458D +:1087F000826928D16B68A34225D803EB020BA345FD +:1088000021D9ABEB040BE01AAB68D3450D991844A2 +:1088100028BFD3465A465C4410F08AFA0D9B5B444D +:10882000AAEB0B0B0D933B689A69B4FBF2F302FBC6 +:10883000134333B94A4629463846FFF799FF0028C3 +:10884000D0D1DA46CAE7B4FBF2F302FB13434BBBC9 +:10885000924527D34146BAFBF2F302FB13AB224603 +:10886000AAEB0B0ACDF800A083681E460D9BB0470B +:108870000028B7D1B9F1000F04D10D9B54445344E3 +:108880000D93DEE70D9B424649463846009323464A +:10889000CDF804A0FAF74BFE0028A3DBEDD16FF072 +:1088A00033009FE7E31AD346C5F800806B60C8E742 +:1088B0002DE9F04F85B00F4691469846109D0390E4 +:1088C000DDE90E460DB9284659E0039B1868B9F159 +:1088D000000F1ED0D9F8003043451AD1D9F8041042 +:1088E000A14216D8826901EB020A544511D2AAEBC3 +:1088F000040A611AD9F80830AA4528BFAA463046AA +:108900005246194456445444A5EB0A0510F010FA97 +:10891000D8E73A68436990450ED179688C420BD309 +:1089200001EB030A544507D2AAEB040A611ABB689B +:10893000AA4528BFAA46E2E7B4FBF3F203FB1242C2 +:10894000D0F804B08AB99D420FD322464146B5FB08 +:10895000F3FA03FB1A5A3346A5EB0A050095D847EC +:1089600068B92E442C445546ACE7A21A0093414600 +:10897000BB68C7F800807A60D8470028A2D005B04D +:10898000BDE8F08F2DE9F04F8BB091460746884641 +:10899000149A07A900680DF1200B013A0593DDF840 +:1089A00058A00792FFF7BCFE059B054619460593A4 +:1089B0005046159B9847024618BB15B305F00106B3 +:1089C0004A4600903846C6F10204059BA100CDE955 +:1089D00001B14146FFF76CFF024690B9013C944259 +:1089E00007DC0AAB023E03EB8404354454F8083C30 +:1089F000DCE708995046159B984701220028EED0E5 +:108A0000024610460BB0BDE8F08F2DE9F04786B066 +:108A100005460F46144600F11409D6184FF0010A16 +:108A20000DF11708B44203D1002006B0BDE8F0876D +:108A300000943B460022494628460134CDE9018A8C +:108A4000FFF736FF0028F0D1012241460E98FEF7CD +:108A5000B9FDE7E703689B6A10B5044613B9C0691E +:108A600010F00AF92368DB6A13B9A06A10F004F960 +:108A700023681B6B23B9E06BBDE8104010F0FCB815 +:108A800010BD38B58B6A04460D460160CBB1C36199 +:108A9000EB6A13B3A36204F120012846FFF75DFEE1 +:108AA0004FF0FF33636123681A6BEAB1E263002081 +:108AB0004FF0FF33C4E90300C4E90133A4F84000D8 +:108AC00038BD486910F0D0F8E0610028E0D12046B8 +:108AD000FFF7C0FF6FF00B00F2E7A86910F0C4F8D1 +:108AE000A0620028D7D1F2E7586AC00810F0BCF89D +:108AF000E0630028DBD1EAE70B6810B504689C420C +:108B000009D040684A68904205D0944203D0181AB0 +:108B100018BF012010BD0020FCE70368013304D01A +:108B20004068431C584258417047012070471FB5A8 +:108B3000069C00920022CDE901340B4600F114019D +:108B4000FFF7B6FE04B010BD2DE9F04F13688BB0EF +:108B50000026074604930C465368B0460DF1100BEF +:108B600006AD4FF0100A05935BF826902B460022C5 +:108B700038464946CDF800A0FFF7D9FF70B110F193 +:108B8000340F06D146B1B8F1000F14BF00206FF0CA +:108B900033000BB0BDE8F08F0126E5E7B8F1000F18 +:108BA00004D0E269069B9B1A002BEBDB079B23F0AA +:108BB0000043132BE6D93A68D2699342E2D84FF0CA +:108BC000FF3303A8102229460393FEF7FBFC079B03 +:108BD00010220090494623F000433846103BFFF72F +:108BE00014FF0028CBD1039B002BCBD10AAA86F01F +:108BF000010304F11C0CC4F8049002EB83034FF052 +:108C0000010853F8183CC4E9023A95E80F008CE8D3 +:108C10000F00B7E72DE9F043012397B00F46064652 +:108C200000219046CDE9051305994046B847044612 +:108C300010BB06994046B8470446E8B905AA0BA9F7 +:108C40003046FFF781FF0446B0B90C25139B0E9AFE +:108C500023F0004302F10C01043B994210D9149B0C +:108C600005A80593159B0693FFF757FF0028DBD057 +:108C7000F56806F114094DBB204617B0BDE8F08336 +:108C80000C9908AB30460095FFF751FF01460028CC +:108C900042D107A8FEF7B8FC0E9B18449DF820307F +:108CA00003F070030E90102BD0D10A9B002BCCD078 +:108CB0000A46009306F11401099B3046CDE901787C +:108CC000FFF760FE0028C0D00446D5E7EB69DA0361 +:108CD00012D4EB699B030DD52B6A5BB1009305F1B0 +:108CE0002C0249463046CDE901786B6AFFF74AFE0F +:108CF0000028E9D12D68BEE76B69002BE9D000930D +:108D000005F12C0249463046CDE901782B69FFF781 +:108D100039FE0028DDD0D7E70446ADE72DE9F04164 +:108D200004460D460127304E4FF00008226BD4E96F +:108D30000D13914224D1002B52D02068E16AD0F863 +:108D400020C00A44B2FBFCF10CFB11220021E262BC +:108D5000426AE06B934294BF23632263D208C4F853 +:108D600034800FF0F3FF201DFFF7D7FE0028DDD180 +:108D7000224631462046FFF74DFF0028D4D025E09B +:108D8000481C013BD4F83CC060634809A36301F070 +:108D90001F035CF8200007FA03F30342C7D1E36A1C +:108DA000194423681A6AB1FBF2F302FB131129601C +:108DB0000121256B636BAB4210D05A0903F01F00F1 +:108DC0005CF8222001FA00F0104001D1BDE8F081EA +:108DD00001336363A36B013BA363EBE70020F5E77B +:108DE0006FF01B00F2E700BF177600082DE9F04F87 +:108DF000044687B00E4600F1140A05A92046FFF785 +:108E00008DFF054648B920680599C368984705460F +:108E100000283BD010F1340FEFD0284607B0BDE852 +:108E2000F08F0DF11307736A5A4651462046CDF86C +:108E30000890CDE90087FFF73BFD70B9059B5246CE +:108E400004F120012046CDF80080CDE90179FFF73B +:108E5000BCFC20B110F1340FCFD00546DDE708F19E +:108E60000108B36A4345DCD82368A16A9A69706B2C +:108E70000FF05EFF236A04F120012068F362636A49 +:108E80003363FFF76AFC059B7362C6E7804606F111 +:108E90002C0B4FF00109E4E7CB695A0344BF23F4DC +:108EA00080234FF0FF322DE9F04148BFCB610546EA +:108EB000CB6990B048BFCA620C4613F400302CD086 +:108EC0000F6A2C22002102A80FF040FF236905F150 +:108ED0001406069363690793012396E80700CDE91A +:108EE000093710AB03E907004FF0FF3398466B6179 +:108EF000226A63699A4213D304F12C083246414630 +:108F00002846FFF735FC28B310F1340F05D1214670 +:108F10002846FFF76BFF0028F0D010B0BDE8F081C5 +:108F200001230DF1070202A9284600F052F900289A +:108F3000F3DB01230DF107022146284600F016F865 +:108F40000028EADB6B6901331CBFCDF83480C5F81B +:108F50001480CDE7636A2361236A6361E36923F4C4 +:108F6000003343F48033C4E90737D6E72DE9F04FE7 +:108F70009B468DB0CB69054604920C4603F0030274 +:108F8000012A00F020815E0314D4E66932051AD468 +:108F9000276A17EB0B0F00F1198116F4003618D071 +:108FA000D946E369B9F1000F25D123F400235A46CD +:108FB000E36104E0FFF770FF02460028E5D01046A9 +:108FC0000DB0BDE8F08F6269216A8A4288BF2262D3 +:108FD000DEE763699F42E3D923620BAA012321469E +:108FE00028468DF82C60FFF7C1FF021EE7DB236ADD +:108FF0009F42F2D8D4E79B0304F12C0620D52B68BE +:10900000A26ADB699A4242D12B6805F1140A1B6AF5 +:10901000AB63D4E90832CDE909230BA92846FFF751 +:109020007DFE0246F8B928680B99C3689847024646 +:1090300018B312F1340F16D14FF0FF332B62ECE767 +:10904000236A002BE0D004F12802013B3146284678 +:10905000029204F1240200930192D4E90423FAF766 +:109060008EFA024620B1E36943F40023E361A6E7E8 +:1090700031462868FFF771FBC6E70A9B286843BBA7 +:109080000B9A6262A362E36943F40033E361A8468A +:1090900058F8143BDF69A36AFF1A4F4528BF4F46B3 +:1090A000049B4246314628460193A36A02970093E7 +:1090B000636AFFF78AFB0246002875D010F1340F6F +:1090C000D1D121462846FFF791FE02460028E7D07D +:1090D000C9E7013B0AA905920A93FFF721FB0A9B06 +:1090E00029680133059AC9690A938B424AD1013034 +:1090F000904609AF90FAA0F3B3FA83F305930133D6 +:1091000006934FEA880352463146284607930423C4 +:10911000CDE90173079B00930B9BFFF756FB0246BB +:10912000002886D1059B434530D108F10108069BF4 +:109130004345E6D80B9B6362069B9B00A2E7012395 +:10914000002251462846CDF80080CDE90173099BE5 +:10915000FFF7AEFB0246002885D101235246314677 +:109160002846CDF80080CDE901730B9BFFF72DFB5E +:10917000024600287FF45DAF08F101080A9B98457C +:10918000DDD37DE790460DF12307F7E70423514631 +:109190002846CDE90173079B0093099BFFF788FBE5 +:1091A00002460028C1D05EE7236AA9EB07093B44C9 +:1091B0002362A36A3B44A362049B3B4404932B6851 +:1091C0001B6AAB63EDE66FF00802F8E66FF01A0277 +:1091D000F5E62DE9F04F1D46CB69904687B003F0C8 +:1091E000030207460C46022A54D09A0305D4266A85 +:1091F0006269964208D3002003E0FFF74DFE002885 +:10920000F5D007B0BDE8F08F961B04F12C0104F1F6 +:10921000280A04F1240BAE4228BF2E46B146B9F10C +:10922000000F01D13046ECE7E3695B0304D53B68EE +:10923000A26ADB699A4210D1236A384605910093ED +:10924000CDE901BAD4E90423FAF799F90028D8D175 +:10925000E369059943F48023E3613A683846A36AD9 +:10926000D56900220093ED1A636A05914D4528BF28 +:109270004D46CDE90185FFF71BFB0028C1D1236ACC +:10928000A844A9EB050905992B442362A36A2B4442 +:10929000A362C4E76FF00800B3E7F7B504460430F3 +:1092A0000E461546FFF739FC10B1002003B0F0BDA3 +:1092B000012300906A46294620460193FFF744FCAB +:1092C0000028F3D105F124073846FFF726FC0028D3 +:1092D000EBD131463846FFF70FFC38B13A46294604 +:1092E0002046FFF731FC0028EED0DFE70120DDE764 +:1092F0002DE9F34106460C46154601F124081027D6 +:10930000226AE16822F0004301F10C00043B98421C +:1093100017D80C230A463046616800932B1DFFF7CF +:1093200006FC014690B9E66828462E60FEF76CF907 +:109330003044E0602846FEF767F9A3691844A0614D +:1093400004E0002A06DB29606FF00101084602B044 +:10935000BDE8F081214642463046FFF7F5FB014665 +:109360000028F3D1A369E7601433A361C8E72DE9AE +:10937000F84314461D460022012306460F4604F119 +:10938000240805F10809C4E909234046FFF7C5FB95 +:1093900008B100200DE0424621463046FFF7D4FBDD +:1093A00038B92A4621463046FFF7A2FF18B1831C80 +:1093B000EBD0BDE8F8832B7903F07003202BF0D1BC +:1093C00039464846FFF798FB0028EAD10120F0E72C +:1093D00070B5054692B004300E46FFF79EFB68BBA1 +:1093E0000123019001AA07A928460293FFF7ACFBCD +:1093F000044618B910A8FFF790FB10B1204612B030 +:1094000070BD10AA07A92846FFF79EFB38B903AA2A +:1094100007A92846FFF76CFF18B1831CEAD0044661 +:10942000ECE79DF91030002BF1DB0822314605A84E +:1094300010F0E6FF0028EAD10124DFE70024DDE791 +:10944000F0B50127061DA7B0044680F840703046ED +:10945000FFF763FB0546002840F0818001462C227F +:1094600005A80FF073FC4FF000432822294610A8EE +:109470000D930FF06BFC1A9723681B6A9D4202D371 +:109480006FF033001BE019A8FFF747FB002866D1F7 +:1094900019AA10A92046FFF757FB80B90D9B002B96 +:1094A00038DB3046FFF739FB58B1199B0E931A9BF6 +:1094B0000F93002305A920461A4600F052F827B062 +:1094C000F0BD01AB1BAA0EA92046FFF750FF0028F4 +:1094D000F5DBEAD0039A0E99049B8A420F9801D1DA +:1094E000984217D0824201D1994213D00E92DFE701 +:1094F0009DF97030002B0DDA1DA92046FFF768FF9B +:109500000028DCDB1ED01BAA10A9204600F075F94C +:109510000028D4D11BAA10A92046FFF7E9FE002895 +:10952000E6D0831CCBD10DF1400C05AF0135BCE872 +:109530000F000FC7BCE80F000FC79CE8070087E8C3 +:10954000070099E79DF870301BAA10A903F07F036C +:109550008DF870300346204600F0C3F9D8E70020AC +:10956000ADE72DE9F04F2DED028B9BB006460D4681 +:109570000793CB6907980133059202EB0017CB6183 +:109580000B1DD1E9011408EE103A1346C5E901415B +:109590009F420FD10023CDE90941069330686968E5 +:1095A000C3689847044670B114F1340F00F0F4809A +:1095B0002046FFE0D86810332A6A024453F80C0CA6 +:1095C000121A2A62E4E705F11C080DF12C094FF08C +:1095D000FF3306F1200A10271022414648460B931C +:1095E000FDF7F0FF224600946B6851463046CDE906 +:1095F0000187FFF7EAF804460028D5D18346B8462C +:1096000008EE909A2AE0079B9B4580F2A080059A7D +:109610004FEA0B13D35802EB0B19434540F09780E8 +:1096200018EE900AD9E90212FDF7CCFFD9F80C30F8 +:109630000022514602933046D9F80830CDE9007334 +:109640006B68FFF7C2F804460028ADD1D9F80430A2 +:109650000BF1010B9844D9F80C301F442B6A23F00E +:109660000043043BBB42CED804230DF12C0800225A +:109670005146029330466B68CDE90078FFF7A5F8B4 +:109680000446002890D14FF0FF3302465146304641 +:109690007361FFF76DF80446002885D130680369CF +:1096A0009847044600287FF47FAF4FF0FF330FAF99 +:1096B000024669680F9330462B6A009723F00043F7 +:1096C000043BFFF7A2F9044600287FF471AF0F9A1C +:1096D0000B9B9A4260D1069B4BB306F104094846A6 +:1096E000FFF71BFA002875D143463A4609A93046D0 +:1096F000FFF73DFE00285DDB6CD06B6842463946C3 +:1097000030460D93AB680E93002300F0EAF8002872 +:1097100050D1494609A8FFF7EFF918B96B68736093 +:10972000AB68B3603046FFF78BFE002842D1346946 +:10973000002C3FF43DAF18EE101A201DFFF7DCF9A6 +:1097400018B96B686360AB68A3602468F0E7012315 +:1097500042460A99304600930FABFFF7E8F90446FA +:1097600000287FF425AF01220FA918EE900AFDF71B +:1097700029FF01232246514602930FAB3046CDE923 +:1097800000736B68FFF721F8044600287FF40CAFE4 +:1097900008F10108013761E74FF0FF3300220FA9FC +:1097A00009A833620123CDE90F23FFF7A5F930B9EA +:1097B0006FF033001BB0BDEC028BBDE8F08F18EEEC +:1097C000101A3046FFF7AAFA0123069300283FF447 +:1097D000E5AEEFE73A4609A93046FFF75EFD0028FF +:1097E000E8DBA4D06B68394630461893AB68199310 +:1097F00000231A46FFF7B5FE97E72DE9F0478046AC +:109800008CB010460C461646FDF7FEFE0B6A14306F +:1098100023F0004383421DD101AA04314046FFF7E3 +:109820003CFD051E12DB099A002A13DA236A01A9FE +:10983000404663F0004313400993636A0A93A36AA6 +:109840000B9300231A46FFF78CFE054628460CB002 +:10985000BDE8F087336830460193FDF7D5FE00235D +:10986000029001AA21464046CDE903330123FFF7C8 +:1098700078FE05460028E9D1D8F80C70211D4FF07C +:10988000FF3ACFB9D8F81070211D002FDED0381D57 +:10989000FFF732F970B9FC6833689C420AD9304648 +:1098A000FDF7B2FE201AF8603046FDF7ADFEBB6949 +:1098B000181AB8613F68E8E7381DFFF71DF930B99D +:1098C000D7F80C903368994503D1C7E901AA3F68DE +:1098D000D7E7FCD93046FDF797FEA9EB0000F8600A +:1098E000F5E770B5154688B00C26D27955F8044BCB +:1098F000002B07920094344403960494CDE9052389 +:1099000014BF022301236A46CDE90165FFF729FE52 +:1099100008B070BD70B592B006460D46FFF7BCFAB0 +:10992000044670BBEB6903F41023B3F5803F28D1E4 +:109930002A1D1046FFF7F1F818BB07A93046FFF7BC +:1099400003F90446E8B90C23EA680690009304ABD7 +:1099500008990392CDE904003046FFF7E8F8044681 +:1099600078B92B6903AA07A905936B690693034687 +:109970003046FFF7B6FF044618B9EB6923F480338D +:10998000EB61204612B070BD2DE9F04F2DED028B3A +:1099900085B01F68054608EE101A029340F62203B0 +:1099A0001446DFF840915360436893608368D36046 +:1099B0004946384610F021FE07EB00088346494629 +:1099C000404610F0F6FD0128064608EB000A05D1D6 +:1099D00017F80B302E2B0AD15746E9E7022806D19B +:1099E00002463F49404610F00BFD0028F4D0574690 +:1099F0004FF0010B4946504610F0FFFD82444946A6 +:109A0000504610F0D6FD024690B102280CD10390CA +:109A10005046334910F0F4FC039A28B9BBF1010B0E +:109A200004D10AF10207C3E70BF1010B9244E1E70D +:109A300098F80000002846D0029BC3F800802379E4 +:109A4000222B4AD104F1080A18EE101A2846524671 +:109A5000FFF77AF8002836D105F1140B224618EEEC +:109A6000101A2846FFF744FC68BB237903F07F03F4 +:109A7000112B01D0222BF1D1E379B342EED123682F +:109A800059466279284604331344A279134418EEE8 +:109A9000102ACDE900865268F9F749FD002812DB4B +:109AA000DCD095F84130002B82D194F90430002BA2 +:109AB000BFF67EAF51462846FFF78AFC002807D044 +:109AC00001DB6FF0010005B0BDEC028BBDE8F08F4B +:109AD000237903F07F0323716AE76FF01300F2E745 +:109AE000B4AB0108B7AB010873B50C4604310646A8 +:109AF000FFF714F90546F0B904F108013046FFF705 +:109B00000DF90546B8B90423024661683046009352 +:109B100004F11C03FFF70BF810B110F1340F0DD155 +:109B2000E36914220133E3614FF0FF33C4E90823F2 +:109B3000A3621023E360284602B070BD0546FAE731 +:109B40002DE9F043074695B00E469046994601F13F +:109B500024044046316AFDF757FD3B680844DB6941 +:109B6000984218D804394346002243F8041B09914F +:109B7000CDE90A230C23CDE90C3198F807303146A2 +:109B8000CDE90E29109309AA02233846FFF7E9FC14 +:109B900015B0BDE8F083002937DB354609AC0FCDA1 +:109BA0000FC40FCD0FC495E8070084E807003146C5 +:109BB0003846FFF799FF0028EAD1129B424631460A +:109BC0007362139BB362336A043B42F8043B039213 +:109BD0000C22CDE90130CDE9042398F8073001AA21 +:109BE000CDE90609089338460223FFF7BAFC00289E +:109BF000CED1119B024609A943F00043119373682B +:109C00001293B36813930346BFE7224631463846A2 +:109C1000FEF79AFF00289CD0BAE783690239023B1D +:109C20008B4283BF4389C06A01FB03000020704759 +:109C3000F7B505460191FDF7ECFD0446E8B9019939 +:109C40002846FFF7EAFFAA89286306462146686B83 +:109C50000FF07CF86F6B6B89A34208D9012332198E +:109C600039466878FDF73AFD08B90134F3E76889A9 +:109C7000001B18BF012003B0F0BD0120FBE738B581 +:109C8000036B05460C468B420FD0FDF7C2FD58B959 +:109C900022460123696B6878FDF74AFD00281CBF46 +:109CA0004FF0FF3401202C6338BD0020FCE7012970 +:109CB000F8B504460E4664D98369994261D20378A7 +:109CC000022B30D0032B45D0012B5AD101EB51058B +:109CD0008389416AB5FBF3F31944FFF7D0FF10B154 +:109CE0004FF0FF30F8BDA1896F1C2046B5FBF1F3A2 +:109CF00001FB1355636BB7FBF1F15D5D636A1944BA +:109D0000FFF7BDFF0028EBD1A289B7FBF2F302FBFE +:109D10001373626BD05CF30745EA00204CBF000967 +:109D2000C0F30B00DEE783895B08B1FBF3F3416A04 +:109D30001944FFF7A4FF0028D2D1A2897600B6FB10 +:109D4000F2F302FB1366636B9A19985D527840EA4E +:109D50000220C7E783899B08B1FBF3F3416A1944EA +:109D6000FFF78DFF0028BBD1A189B600B6FBF1F04B +:109D700001FB1066606B3044FDF775FD20F070400C +:109D8000B0E70120AEE72DE9F04F1E46036885B02D +:109D90000C469B6F82469146984703A92046FDF7E3 +:109DA00007FD05460746002840F0A380657C0DBBF3 +:109DB000237C13F00103009300F09D80E3682F469D +:109DC00062699B1A9E4228BF1E469EB10398626933 +:109DD0008389B2FBF3F103FB1123002B69D1438983 +:109DE000013B0B4001931ED18AB9A068012813D80A +:109DF00002256574DAF800305046DB6F9847002D75 +:109E00007CD0284605B0BDE8F04FFDF7AFBCA16996 +:109E10002068FFF74CFFE9E7431C03D10123009DB5 +:109E20006374E7E7A061DDF80CB0A1695846FFF75D +:109E3000F4FE0028DCD0019B03EB0008BBF80C30DB +:109E40009E4234D30199BBF80A209BF80100B6FB6F +:109E5000F3F319449142494684BF019BD31A424609 +:109E60000193FDF765FC019B0028D7D1DDF80CB00C +:109E70009BF803207AB1DBF83000A0EB08008342A6 +:109E800009D9BBF80C20DBF8341000FB02900193D9 +:109E90000EF04EFF019BBBF80C8003FB08F86369D2 +:109EA000A6EB08064744C144434463618DE7C4F808 +:109EB0001C80039862698389E169B2FBF3F803FBB4 +:109EC0001828A3EB0803B34228BF33469846FFF790 +:109ED000D6FE0028A2D1039A60699189B0FBF1F304 +:109EE00001FB1303516B4846424619440EF020FF14 +:109EF000D5E700277EE72F4607257BE7384605B0E4 +:109F0000BDE8F08F38B500230446C3704FF0FF332F +:109F10000363FFF7B4FE002851D1646B237894F8F3 +:109F2000FF5194F8FE01EB2B40EA052503D01833CE +:109F3000DBB2012B3CD84AF655239D4207D10822BB +:109F4000214904F1520010F05BFA002836D0227B40 +:109F5000E37A43EA0223A3F50072B2F5606F27D8D3 +:109F6000607B28B3591E421E0B40024013431FD191 +:109F7000E27BA37B53EA02231AD0237C013B012B13 +:109F800016D8A27C637C53EA022311D0227DE37CA5 +:109F900043EA02237F2B06D804F12000FDF763FC7F +:109FA000B0F5803F04D3E27DA37D53EA022308D1BC +:109FB0004AF6552085420CBF0220032038BD0420FC +:109FC000FCE70020FAE700BF9FB101082DE9F04F40 +:109FD000002687B00D4617460E60FDF7FDFB0028F2 +:109FE000C0F25181B04B53F82040002C00F04D815D +:109FF0002C602378BBB96070C0B2AC4D55F820001E +:10A0000003689B68984710F00106C3B240F03F8197 +:10A0100017F0FE0F02D05B0700F13B81607855F826 +:10A02000203023B90126304607B0BDE8F08FFDF798 +:10A0300045FBA0F50072A081B2F5606FF2D8421E18 +:10A040000242EFD1636B002B00F0F280002120462A +:10A05000FFF758FF022840F0FD80656B02AF05F561 +:10A06000E371B84605F206250846FDF7FCFB103102 +:10A0700048F8040B8D42F7D1002557F8041B00293E +:10A0800000F0DE802046FFF73DFF012800F2D98076 +:10A09000656BB4F80C902A7BEB7A43EA022399456E +:10A0A00040F0D680E87DA97D51EA002104D105F178 +:10A0B0002400FDF7D8FB0146E16195F810A0D4F823 +:10A0C00030B00AF1FF3384F802A0012B00F2C08007 +:10A0D0006B7B6381002B00F0BB805A1E1A4240F05C +:10A0E000B780AA7C95F8118048EA02280FFA88F216 +:10A0F000A4F8088000924FEA5912B8FBF2F702FB6D +:10A10000178292B2002A40F0A3802A7DE87C50EAB0 +:10A11000022005D105F120000193FDF7A4FB019B6E +:10A1200095F80FC0AA7B52EA0C2200F0918001FB47 +:10A130000AFC174407EB0C0E7045C0F08980A0EBB9 +:10A140000E009842B0FBF3F7C0F08280584B9F425C +:10A150007ED84FF6F5739F4240F29D804FF0030A80 +:10A1600002375A440BEB0E03BAF1030FA761C4F890 +:10A1700020B06262E36274D195F82B2095F82A3002 +:10A1800043EA0223009A1A4313B2002B60D1BF00A6 +:10A1900005F12C00FDF767FBA06209F1FF331F44B6 +:10A1A000B7FBF9F9894553D84FF0FF33BAF1030FE4 +:10A1B000C4E904334FF08003237130D195F8312086 +:10A1C00095F8303043EA0223012B28D10BF101012D +:10A1D0002046FFF754FD10BB616B207191F8FF2101 +:10A1E00091F8FE3143EA02234AF65522934216D1F2 +:10A1F0000846FDF738FB2F4B984210D101F5F2705D +:10A20000FDF731FB2C4B984209D101F5F470FDF7B5 +:10A210002AFB606101F5F670FDF725FB2061274AF6 +:10A2200084F800A0138801339BB21380E380FAE620 +:10A230000EF01AFD606300287FF408AF1126F2E6E5 +:10A2400003200135042D7FF418AF04283FF4EAAE53 +:10A250000D26E8E604283FF4E5AE01287FF618AFA6 +:10A26000F6E7B8F1000FF3D0BAF1020F4FEA470357 +:10A2700062441ABFDB1907F001071F46A26218BF2C +:10A2800007EB530789E70B26CDE60C26CBE6032622 +:10A29000C9E60A26C7E640F6F57A57458CBF4FF067 +:10A2A000020A4FF0010A5BE740140224F41402246E +:10A2B000F5FFFF0F52526141727241613C1402245A +:10A2C0002DE9F74F154680462822002128460EF03A +:10A2D0003DFDD8F8003040469B6F984708F14C038D +:10A2E000002201A968460093FFF770FE0646044667 +:10A2F00000286ED1DDF80490D9E9057AAAF10203AD +:10A300009F421CD999F80060012E35D14FF0020A06 +:10A31000074651464846FFF7CAFC431C59D001285E +:10A3200056D000B90137019B0AF1010A9B699A4591 +:10A33000EFD3019B1A795F6142F001021A71B9F8FB +:10A340000C300024D9F818204046C5E90033023A01 +:10A35000B9F80A305A435F430C236B62D8F80030D7 +:10A36000C5E90224DB6FC5E90474C5E906749847A2 +:10A37000204603B0BDE8F08FD9F8241007463CB959 +:10A38000019801F1010BFFF77AFC064608BB59461C +:10A39000019E3278736B022A03EB04000FD11B5D20 +:10A3A0000234427853EA022308BF0137B389BAF175 +:10A3B000010AB4FBF3F203FB1244E0D1B9E7FDF765 +:10A3C00052FA30F0704304F1040408BF0137EDE79E +:10A3D0000226D8F800304046DB6F9847304603B07D +:10A3E000BDE8F04FFDF7C2B97FB5CDE9001003A875 +:10A3F00014460391FDF7F0F9051E19DB0D4E56F8D2 +:10A40000252022B10023506B13700EF035FC019B08 +:10A4100013B100221A705A6346F825302CB100227D +:10A4200001A96846FFF7D2FD0446204604B070BD7E +:10A430000B24FAE740140224F8B5036804469B6F26 +:10A440009847236D013307D123686FF01505204627 +:10A45000DB6F98472846F8BD002204F14C01104FED +:10A460001046FFF7C1FF236D064657F82300036827 +:10A47000DB6898472368054618B1DB6F204698478C +:10A48000E8E7226DDB6F47F822004FF0FF322046ED +:10A49000226598473046BDE8F840FDF767B900BF30 +:10A4A000F4140224084B10B503608C330446436057 +:10A4B000FFF7C2FF054B204623602C3340F8043FD2 +:10A4C00007F070FF204610BD28AE0108C4AE010899 +:10A4D000A0F10400FFF7E6BF10B50446FFF7E2FF66 +:10A4E00020460EF0C9FB204610BDA0F10400FFF786 +:10A4F000F3BF0000036873B504469B6F01920D46DD +:10A500009847236D019A013307D023682046DB6FFB +:10A5100098476FF0150002B070BD1648002306463C +:10A5200050F8041BD9B946F8235004F114002365F0 +:10A53000303384F84E1004F14C0184F84C303A2347 +:10A5400084F84D30FFF750FF236805462046DB6F47 +:10A550009847284602B0BDE87040FDF707B90133BF +:10A56000042BDDD123682046DB6F98476FF00B008A +:10A57000D1E700BFF414022401292DE9F843044671 +:10A580000E46174640F2838083698B427FD9037859 +:10A59000022B45D0032B5AD0012B78D101EB510966 +:10A5A0008389416AB9FBF3F31944FFF768FB054659 +:10A5B00060BBA38916F00106606B09F10108B9FBC5 +:10A5C000F3F203FB12920FBFFBB2835C03F00F01A7 +:10A5D0003B011CBF03F0F0030B4383540123616A6A +:10A5E0002046E370A389B8FBF3F31944FFF747FB58 +:10A5F000054658B9A389616BB8FBF3F003FB1080E3 +:10A600003EB1C7F307170F540123E3702846BDE896 +:10A61000F8830B5CC7F3032723F00F031F43F2E714 +:10A6200083895B08B1FBF3F3416A1944FFF727FB09 +:10A6300005460028EAD1A2897600B6FBF2F302FBB8 +:10A640001366636B9F5598193F124770DCE7838947 +:10A650009B08B1FBF3F3416A1944FFF710FB054671 +:10A660000028D3D1A389B60027F07047B6FBF3F1D9 +:10A6700003FB1161666B0E443046FDF7F4F800F001 +:10A68000704047EA00013046FDF7E5F8BCE70225D7 +:10A69000BCE72DE9F041804605680F4649B92E69AF +:10A6A000C6B1AB69B34298BF01266B69A3B9002458 +:10A6B00006E02846FFF7FBFA0128044603D80124E8 +:10A6C0002046BDE8F081421C51D0AB698342F7D8E7 +:10A6D0003E46EAE70126E8E7BE4215D1AB69741CA5 +:10A6E000D8F80000A34298BF02242146FFF7DFFA02 +:10A6F0000128E4D0431C3AD0D8B12B69012B03D9EF +:10A70000AA69934238BF1E4634460134AB69A3425E +:10A7100002D8012ECBD902242146D8F80000FFF739 +:10A72000C6FA40B10128CAD0013020D0B442ECD1E1 +:10A73000BDE7002CE8D04FF0FF3221462846FFF756 +:10A740001BFF90B957B92C61D5E90532023A934203 +:10A7500010D92B7943F001032B71B1E7224639461A +:10A760002846FFF709FF0028EDD00128A7D14FF0B8 +:10A77000FF34A5E7013B6B61EBE72DE9F3410D46A3 +:10A7800001A90446FDF714F80646002863D1667C4B +:10A79000002E60D1E368AB4204D2227C12F0020F9B +:10A7A00008BF1D46002263696261B5B90020E268F6 +:10A7B0006369934281BF227CE36042F040022274CD +:10A7C000019A9189B3FBF1F201FB1233002B42D0C5 +:10A7D000E369834218BFE0613DE0019A518997899E +:10A7E0004F4373B3013B6A1EB3FBF7F1B2FBF7F2C1 +:10A7F0008A4226D37A42A1691340ED1A6361002987 +:10A80000D4D0BD4263690CD93B44A5EB0708636112 +:10A81000237C9A072AD52046FFF73BFF054648BB15 +:10A820000146636901982B4463618389B5FBF3F2A8 +:10A8300003FB1255002DB9D0FFF7EFF948B11044D2 +:10A84000B5E7A16881B92046FFF723FF012801463B +:10A8500005D102266674304602B0BDE8F081481C7E +:10A8600001D10126F6E7A160A161C8E72068FFF7E2 +:10A870001EFA05466B1CF4D0012DEAD9019B9B6999 +:10A88000AB42E6D92946A5614546BAE7F8B51F4669 +:10A89000036806460D469B6F14469847022F11D158 +:10A8A000EB681C4421462846FFF767FF33680446DF +:10A8B0003046DB6F6D69984744B12046BDE8F840EB +:10A8C000FCF754BF012FEDD16B69EAE72846F8BDCC +:10A8D0002DE9F04107690446884606682037B7F538 +:10A8E000001F24BF00238361836983B1B289B7FB52 +:10A8F000F2F002FB1072002A38D101336169A361C2 +:10A9000039B93389B3EB571F30D80023A361042032 +:10A910000AE07389013B034228D13046FFF7C7F9AB +:10A920000128054602D80220BDE8F081421C01D171 +:10A930000120F9E7B369834212D8B8F1000FE4D0DF +:10A9400061692046FFF7A5FE0546D0B10128EAD08F +:10A95000431CEDD001463046FFF76AF90028E7D1E5 +:10A96000294630466561FFF758F9A061B289002099 +:10A970002761B7FBF2F302FB1373776B1F44E761A8 +:10A98000D2E70720D0E737B50D4601A90446FCF70A +:10A990000FFF18B920461DB9F8F76AFD03B030BDA6 +:10A9A000F8F79AFD10F0FB03F8D16B72A3691BB1A5 +:10A9B00029462046FCF75FFF00212046FFF788FF6D +:10A9C000042808BF0020E9E7036870B50D46044677 +:10A9D0009B6F984728460021FFF7D5FF2368204644 +:10A9E000DB6FBDE8704018470368F0B516460F6985 +:10A9F00087B09B6F05460C469847B74209DD00219A +:10AA00002046FFF7C0FF2B682846DB6F984707B04A +:10AA1000F0BDB742F7DA69462046FFF7B4FF276971 +:10AA20000028F0D19DF80930002BF2D1EBE7036844 +:10AA300070B50E4686B004469B6F15469847304663 +:10AA40006946FFF7A0FF236806462046DB6F98475C +:10AA50002EB1304606B0BDE87040FCF787BE9DF8C9 +:10AA6000090078B19DF808300C220DF10901284643 +:10AA700013F0100F14BF0323052385F800310FF0E6 +:10AA8000A9FD012006B070BD2DE9F74F0446D0F8AE +:10AA900000900D4611F8013B2F2BFAD05C2BF8D01B +:10AAA0000023A3602B781F2B25D904F120074FF03A +:10AAB000203BC5F1020305F1FF3A00264FF00808DC +:10AAC0000093514A514BC7F804B0C7F800B0C7F81B +:10AAD00007B0009901EB0A001AF8011F20292ED9AE +:10AAE0002F2901D05C290FD12B5C2F2B01D05C2B9F +:10AAF00025D10130F8E78023204684F82B3003B0BD +:10AB0000BDE8F04FF8F7B4BC2E2976D0B04572D925 +:10AB10000806184644BF01F07F01515C01910FF017 +:10AB20003BFD002867D10199384BA1F16100364AFD +:10AB300019289CBF2039C9B2B9550136C9E7054467 +:10AB4000002E58D094F82030E52B04BF052384F85C +:10AB50002030202928D92B78212B34BF042300232F +:10AB6000204684F82B30D4F80080F8F781FC0646A4 +:10AB7000E8B9A1694046FFF782F80646B8B9E0692E +:10AB800003789BB1C37A03F03F03A371C67A16F032 +:10AB9000080604D10B2239460FF032FC38B10021EF +:10ABA0002046FFF795FEE2E70423D9E7042694F850 +:10ABB0002B304EB1042E03D113F0040F08BF05262D +:10ABC000304603B0BDE8F08F5A07F9D4A379DB060D +:10ABD0000FD5B9F80C10226999F80000B2FBF1F317 +:10ABE00001FB1323D9F834101944FCF7D2FDA060FF +:10ABF0005FE70526E4E70626E2E7B8F10B0FFAD097 +:10AC000008264FF00B0864E7D3B10108A8B101088A +:10AC100070B505460668F8F72BFC044648BBA969E1 +:10AC20003046FFF72CF8044618BBEB691B78E52B80 +:10AC300018D1A9693046FFF722F8044680B92022CE +:10AC40000146E8690EF082F8EB6955F8202F1A608A +:10AC50006A685A602A891A81AA7A9A720123F37063 +:10AC6000204670BD002BE4D001212846FFF730FEBE +:10AC7000D3E7042C08BF0724F2E700002DE9F74FC3 +:10AC80000C46804611460568012C5AD9AB69A3428F +:10AC900057D962B92746DFF8B4902146D8F80000AA +:10ACA0002646FFF704F8044658B9002006E04FF0A6 +:10ACB000FF322846FFF760FC0028EBD003B0BDE868 +:10ACC000F08F01283DD0431C3DD00022314628465C +:10ACD000FFF752FC0028F1D1D5E90532023A934240 +:10ACE00005D201336B612B7943F001032B71731C87 +:10ACF000A34222D095F801B059F82B30E3B1394680 +:10AD00002846FEF78AFF314682462846FEF785FF31 +:10AD10006F8906465846FCF7D1FC02463E4459F876 +:10AD20002B00A6EB0A060368A6FB0267CDE90067C5 +:10AD3000196AA2FB0A2388472746AB69A342ACD80D +:10AD4000B3E70220BAE70120B8E700BFF4140224F9 +:10AD50002DE9FF4103680C46019206469B6F984718 +:10AD6000019920466769FFF708FD054648B1336839 +:10AD70003046DB6F9847284604B0BDE8F041FCF749 +:10AD8000F5BC03A92046FCF713FD05460028EED1CB +:10AD9000657C002DEBD1237C9A0701D40725E6E7DB +:10ADA000D4F81480E368984508D320463946FFF765 +:10ADB000E4FC044670BB04B0BDE8F081B8F1000FBC +:10ADC00011D12A46A1682046FFF758FF0546C4F86E +:10ADD00008806369E360237C43F040032374002D03 +:10ADE000E3D06574C3E7A1692068FEF760FF431CE8 +:10ADF00001460BD001280BD0039B9B699842E8D2F7 +:10AE0000A2692046FFF73AFF0546E2E70125E0E7A1 +:10AE10000225DEE733683046DB6F98472046ABE714 +:10AE200070477047034B10B504460360FDF728FADE +:10AE3000204610BDC8AD010810B50446FFF7F2FF6B +:10AE400020460DF019FF204610BD000008B5036A2A +:10AE5000013B036200680AF063FA014630B1044B1B +:10AE60001B78DBB213B90348F8F7BEF808BD00BF82 +:10AE7000440B02241701028008B5034807F09AF931 +:10AE8000BDE80840FFF7E2BFCC14022410B5044629 +:10AE90000068FCF781FB014618B9236A013323627D +:10AEA00010BD044B1B78DBB2002BF9D10248F8F738 +:10AEB0009BF800BF440B02241501028008B503482B +:10AEC00007F078F9BDE80840FFF7E0BFCC14022492 +:10AED00013B5154C204607F06DF9FFF7D7FF204654 +:10AEE00007F068F9FFF7B2FF4FF0FF324FF0FF3382 +:10AEF0006846CDE900230DF045FDD0E90232DB02C2 +:10AF000043EA0243426843EA4213026802EBD27208 +:10AF100043EA620342690069503A013043EA4263FE +:10AF200043EA405002B010BD50140224F7B501A905 +:10AF30000546FCF73DFC044660BB2C7C14F0400445 +:10AF400028D0FFF7C5FF296A07460198FEF797FE4C +:10AF50000446F8B96E6AF37A314643F02003F3727F +:10AF6000AA682868FCF70AFCE96806F11C00FCF7EF +:10AF700072FC394606F11600FCF76DFC01230198BE +:10AF8000B474F474C370FDF761F82B7C044623F0AD +:10AF900040032B74204603B0F0BD38B503680D465E +:10AFA00004469B6F98472846FFF7C0FF2368054675 +:10AFB0002046DB6F98472846BDE83840FCF7D6BBF3 +:10AFC0002DE9F04F1E46036885B00D469B6F824603 +:10AFD0009146984703A92846FCF7EAFB0446074632 +:10AFE000002840F0D6806C7C5CBB2B7C9A0740F13B +:10AFF000D2806B690027DE42009728BFDE43002E17 +:10B0000000F0BB8003986A698389B2FBF3F103FB0C +:10B010001123002B40F08D80B0F80A8008F1FF3832 +:10B0200018EA010825D1D2B9A86830B901462846E6 +:10B03000FFF72FFB002800F0A080012811D1022487 +:10B040006C74DAF800305046DB6F9847002C00F043 +:10B05000A580204605B0BDE8F04FFCF787BBA96985 +:10B06000E5E7431C01D10124EAE7AB68A86103B915 +:10B07000A8600398EB69026B9A4247D0DDF80CB0E8 +:10B08000A9695846FEF7C9FD0028D8D0BBF80C3096 +:10B0900008EB00029E423ED3BBF80A10B6FBF3F366 +:10B0A00008EB030088429BF8010088BFA1EB08036E +:10B0B0004946CDE90023FCF711FB8046DDE900237A +:10B0C0000028D0D10398016B891A8B420AD9828952 +:10B0D000406B02FB019100930DF02AFE039A009B46 +:10B0E00082F80380039AB2F80C8003FB08F801236E +:10B0F00000936B69A6EB0806EA6847444344C144E1 +:10B100006B619A422CBFEA60EB6078E7FCF781FB49 +:10B110000028B3D0A7E76969EB68994208D358467D +:10B120000192FCF776FB019A00289CD1039B1A63DD +:10B13000EA6103986B69B0F80C80E969B3FBF8F237 +:10B1400008FB1232A8EB0208B04528BFB046FEF754 +:10B1500096FD002887D1039A69699089B1FBF0F3C5 +:10B1600000FB1313506B4946424618440DF0E0FDB6 +:10B17000039B4FF00102DA70BBE72B7C43F04003E6 +:10B180002B74009B002B3FF45CAF2846FFF7CEFEEC +:10B1900057E7002755E72746072452E7384605B00A +:10B1A000BDE8F08F036873B50D469B6F0646984760 +:10B1B0002846FFF7BBFE044630B901A92846FCF734 +:10B1C000F7FA044600B9286033683046DB6F9847C9 +:10B1D00015B128460DF050FD204602B0BDE8704084 +:10B1E000FCF7C4BAF0B50E4685B090F820100546BD +:10B1F0001446DDE90A7C19B96FF47A6005B0F0BD38 +:10B200000168CDE9007CC96B88470028F4D0296922 +:10B210000D486118039106F0CDFFFFF737FE02F0ED +:10B22000A1FB02F07BFB3A46039930460DF080FD0E +:10B2300002F062FB02F084FB034806F0BBFFFFF75D +:10B2400005FE0020DAE700BFA414022410B504466E +:10B2500004300AF04BF904F15400FFF717FE002305 +:10B26000206C6361012384F83D30BDE8104009F093 +:10B2700091BF00001FB5002304460362074B0093F3 +:10B28000031D684602931C2303930B2301930AF0CA +:10B290005BF82060204604B010BD00BFC2AB0108BF +:10B2A0000CB41FB506AB002453F8042B0094039391 +:10B2B000FDF704F904B0BDE8104002B0704700008B +:10B2C0000FB41FB5084906AB0020096853F8042BDA +:10B2D0008968039300916FF00041FDF7EFF805B026 +:10B2E0005DF804EB04B070473C030024F0B50C4655 +:10B2F0008BB0064624B93260046130460BB0F0BD15 +:10B30000104601920EF016FB043002F06BFA3A235D +:10B310003034054643702F230470033000F8013C9D +:10B320003746019906AC0EF0FDFA084B002247F8AB +:10B33000045B0593064B029302ABCDE903220FCBCE +:10B3400084E80F0087E80F00D7E700BF4D760008BC +:10B350002D800008F0B506468BB02C200F460192D8 +:10B3600002F040FA019A0546316D05A8FFF7BEFFCD +:10B37000336830469B6F9847059B0393002D3DD063 +:10B38000002204A903A8FEF721FE044680B9049B0D +:10B39000284603992B60FFF777FB0446002831D13C +:10B3A00095F92B30002B0CDBAB79DB0603D405249D +:10B3B00000232B6010E0049BE9691878FCF7E9F999 +:10B3C000A860049B2846DB88AB80F8F751F8042876 +:10B3D0000446ECD00028EBD133683046DB6F984749 +:10B3E00074B128460DF048FC2046FCF7BFF904462E +:10B3F00005A8FCF72EF920460BB0F0BD0924EBE7B9 +:10B400003D60F5E70428D2D0D2E72DE9F0470546A4 +:10B4100094B01C4628200E46019202F0E3F9019AEE +:10B42000296D074604A8FFF761FFA10756BF04F086 +:10B4300001084FF0030808F10108A20505D56305CE +:10B440004CBF48F0080848F010082B682007284631 +:10B450009B6F48BF48F030089847049B029397B908 +:10B4600009242B682846DB6F984738460DF004FC0A +:10B470002046FCF77BF9044604A8FCF7EAF82046CE +:10B4800014B0BDE8F087424603A902A8FEF79EFD6E +:10B490000446002855D1039B09A802990993FFF798 +:10B4A000F3FA044620B99DF94F30002BB8BF0624AB +:10B4B00018F01C0F00F09880002C45D0042C40D1CF +:10B4C00009A8FFF7A5FB044600283AD148F0080870 +:10B4D000FFF7FEFC0146019010980E30FCF7BBF917 +:10B4E000109801991630FCF7B6F9039C1099207852 +:10B4F000FCF74FF9202300228146CB722046109999 +:10B50000FCF73CF9109B002201211A775A779A77B1 +:10B51000DA77039BD970B9F1000F70D0494609A8BA +:10B52000D3F830A0FFF7AAFB044650B95146039860 +:10B53000FEF7A5FB09F1FF33039A044613610028C7 +:10B540005DD000233B608CE79DF82A3013F0110F8B +:10B5500061D118F0080FBBD1039CDDF84090236B3C +:10B560004946C7F824903B622078FCF712F901465F +:10B57000B86009F11C00FCF776F9E38818F0200F99 +:10B580008146BB804FF00003F8603C6087F8108074 +:10B590007B74FB617B6120D0F8B16389A4897861F9 +:10B5A0005C434C4531D23868A9EB0409FEF77FFBB8 +:10B5B000012801462BD9431CF3D10124B961002C89 +:10B5C000BFD103988389B9FBF3F203FB129323B134 +:10B5D000FEF723FB08B31044F8612B6828460024CB +:10B5E000DB6F9847376047E7002CAAD19DF82A30D7 +:10B5F000D9060ED418F0020F01D0DA070BD418F0D8 +:10B60000080F18BF48F04008A6E70024D6E7022438 +:10B61000D4E7042495E7072493E7022491E770B563 +:10B6200098B0054616460A46016D02A8FFF75EFE71 +:10B630002B6828469B6F98471822002107A80DF019 +:10B6400085FB029B00220DA901A80193FEF7BEFC19 +:10B65000044650B901990DA8FFF716FA044620B91F +:10B660009DF95F30002B0EDA06242B682846DB6F2D +:10B6700098472046FCF77AF8044602A8FBF7E9FF52 +:10B68000204618B070BD139B8DF825001BB107A98B +:10B690000DA8FCF7F0F89DF8242040F2FF11079B5D +:10B6A000284612F0100F4FF00004336114BF4FF41E +:10B6B00080434FF4004312F0010F40F26D1208BFB7 +:10B6C0000A46134373602B68DB6F9847D5E7F0B5E4 +:10B6D00097B005460A46016D06A8FFF707FE2B68DE +:10B6E00028469B6F9847069B022201A96846009353 +:10B6F000FEF76CFC0446064600286AD1019B0BA8A5 +:10B7000000990B93FFF7C0F90446002879D004286C +:10B710005FD1019B314602A80293FEF7BAFF0446AF +:10B72000002864D0012864D0431C5F425F41FFF7CA +:10B73000CFFB0646002F5ED121460198FEF778FA2E +:10B74000002858D1019B4FF0203210215B6B1A600A +:10B750005A60C3F807202E22019B5B6B1A70019B75 +:10B760005A6BD1723146586B1630FCF774F8019859 +:10B770002246416BFCF702F80198436B03F120026B +:10B78000114653F8047B934241F8047BF9D1436B93 +:10B790002E22012783F82120416B0D9A2031FBF7DF +:10B7A000EDFF019B0BA8DF70FFF732FA18BB129870 +:10B7B00031461630FCF74FF8224601981299FBF7F4 +:10B7C000DDFF129B10220198DA72C770FCF73EFC75 +:10B7D00004462B682846DB6F98472046FBF7C6FFD8 +:10B7E000044606A8FBF735FF204617B0F0BD072733 +:10B7F0009DE702279BE70022214602A8FFF73EFAB9 +:10B80000E6E70824E5E770B5ACB0054614460A46FD +:10B81000016D09A8FFF76AFD2246296D04A8FFF70C +:10B8200065FD2B6828469B6F9847099B02A80193EA +:10B83000049B0293FBF7D0FF0028C0F2A6800222EF +:10B8400003A901A8FEF7C2FB0446002840F08C8043 +:10B85000039B16A801991693FFF716F904460028D2 +:10B8600040F082809DF8833013F0A00F40F08F806D +:10B870001D9B0EAC03F120061868083353F8041C16 +:10B880002246B34203C21446F6D116AC21AE0FCC09 +:10B890000FC60FCC0FC694E8070086E80700029990 +:10B8A00021A8FFF7F1F8044648B9239A189B9A4259 +:10B8B00003D1259A1A9B9A4203D0082454E0042805 +:10B8C00052D121A8FFF7A4F9044600284CD12899A9 +:10B8D0000DF145030DF1550001F10D0253F8044B34 +:10B8E000834242F8044BF9D11888012610809B78D6 +:10B8F00093709DF84330039CDA0658BF43F0200351 +:10B90000CB72E670CB7ADB061ED5189A239B9A423F +:10B910001AD02078FBF73DFF01462046FEF77DF95F +:10B920000146002835D02046FEF7A9F90446D8B9CB +:10B930000398416B91F821302E2B05D1239A2031A9 +:10B94000FBF71CFF039BDE70169E1C993046FEF72A +:10B9500096F9044640B91D9BE5221A700123F37045 +:10B960000398FCF773FB04462B682846DB6F984767 +:10B970002046FBF7FBFE044604A8FBF76AFE09A875 +:10B98000FBF767FE20462CB070BD0B24ECE70624C5 +:10B99000EAE70224E8E7F0B59FB005460A46016DE4 +:10B9A00003A8FFF7A3FC2B6828469B6F9847039BCF +:10B9B000022202A901A80193FEF708FB044680B900 +:10B9C000029B08A801990893FFF75EF8044640B966 +:10B9D0009DF94B30002B49DB9DF82670FA0710D5F6 +:10B9E00007242B682846DB6F9847072C40D0204659 +:10B9F000FBF7BCFE044603A8FBF72BFE20461FB056 +:10BA0000F0BD029C0F992078FBF7C3FEFB060646AB +:10BA100012D4089F0E993846FEF731F904460028E3 +:10BA2000DFD10F9BE5221A700123FB70AEB902989B +:10BA3000FCF70CFB0446D4E7159013A81394F7F712 +:10BA400017FD04460028CCD113A8F7F745FD04469E +:10BA50000028C5D00428C4D1DBE70246314608A837 +:10BA6000FFF70CF904460028BBD1E0E70624B8E74D +:10BA70006FF05904BFE700002DE9F34D00F11C03FE +:10BA8000074653E8002F013243E80026002EF8D184 +:10BA9000012A40F08680786803689B6898470646CC +:10BAA00068BB786803685B6A9847422838BF4220C1 +:10BAB000044601F097FE80467868C4F5007203687A +:10BAC0004146CDE900465D693346A847064698B928 +:10BAD000A4F1420308EB030595F84030552B64D1DF +:10BAE00095F84130AA2B60D17B7E05EB031313F848 +:10BAF000102C520608D02E4E40460DF0BDF8002303 +:10BB000087F82030FB614CE013F80C2C0F2A04D886 +:10BB100048F22103D340DB07EDD478684FF0000AE8 +:10BB20000368DB6A98477B7EB0F5007F03F1FF3343 +:10BB300038BF4FF4007005EB03131A793A7653F8C7 +:10BB4000081F0A0A61F3070A62F30F2A0A0C090E9A +:10BB500062F3174A002261F31F6AA0FB0AABC7E930 +:10BB600002AB5B68190A63F3070261F30F22190C39 +:10BB70001B0E61F3174263F31F62A0FB0245786856 +:10BB800052460368C7E90445CDE90045596C5B4658 +:10BB900088470028AFD00123404687F820300DF0B9 +:10BBA0006BF8304602B0BDE8F08D024EA4E700BF4E +:10BBB000E2F3FFFFE3F3FFFF70B51D4B05460446BC +:10BBC00045F8543B2846FFF761F9206C666909F097 +:10BBD000E1FA0023636194F83D306BB9012384F8E6 +:10BBE0003D304EB1EFF3058333B908F045FF18B986 +:10BBF0003046DFF840C000DF2846FFF727F994F809 +:10BC00003C302BB1A06A08B10DF036F80023A362D6 +:10BC1000606D09F055FB256CEFF3058333B908F02F +:10BC20002BFF18B92846DFF810C000DF204670BD92 +:10BC3000D8B001089D3201086D33010810B50446E3 +:10BC4000FFF7BAFF20460DF017F8204610BD0000A0 +:10BC50002DE9F04700238AB0814642F21078DFF8E0 +:10BC60005CA001240025002600278DF82730EFF383 +:10BC700005832BB908F000FF10B90120D44600DF7E +:10BC80000DF127034FF0FF320521484604930023AE +:10BC9000CDE9064500934FF0FF33CDE9026700F090 +:10BCA00084F89DF8273013F0010002D0B8F10108A4 +:10BCB000DDD180F001000AB0BDE8F087BD38010891 +:10BCC000F0B500258BB004468DF82750FFF7C0FF74 +:10BCD00018B94FF0FF300BB0F0BD002600270495D7 +:10BCE0004FF0FF3200954FF0FF3306212046CDE99B +:10BCF0000667CDE9026700F058F805460028E8D14C +:10BD00002046FFF7A5FF0028E3D0012200230521EC +:10BD100020460095CDE906230DF127034FF0FF32B1 +:10BD200004934FF0FF33CDE9026700F03EF800289E +:10BD3000CFD19DF8270080F0020040F34000CAE711 +:10BD400070B51D46D0F8F43086B00646013317D0E2 +:10BD5000140E8DF81740FFF7B3FF70B901234FF0B1 +:10BD6000FF32D6F8F41000930DF11703CDE901006E +:10BD7000301DF9F7D3F906B070BD4FF0FF30FAE788 +:10BD800090F8FA31032B0ED06B1C08BFB2F1FF3FC5 +:10BD900009D0002D08BFB2F1807F2CBF4FF0FF30DB +:10BDA000002040B2E7E70020E5E72DE9F7430A9ECF +:10BDB000044615460C9FDDF83880DDF8409001916F +:10BDC000FFF7BEFF58B933462A460199201D0A974E +:10BDD000CDE90B8903B0BDE8F043F9F79FB903B093 +:10BDE000BDE8F083D0F8E83001332DE9F04705468F +:10BDF00088B08A461DD1FFF763FF28B14FF0FF34AA +:10BE0000204608B0BDE8F0870022002301210490FD +:10BE1000CDF800A0CDE90623D5F8E4304FF0FF328D +:10BE2000CDE902304FF0FF332846FFF7BEFF04464E +:10BE3000E6E7FFF745FF0028E0D14FF000084FF09C +:10BE400000090126002704904FF0FF324FF0FF3326 +:10BE500001212846CDF800A0CDE90689CDE9026789 +:10BE6000FFF7A3FF04460028CAD12846FFF728FFA2 +:10BE70000028C3D10AF101014FF0FF324FF0FF3328 +:10BE800004940091D5F8E810CDE90689CDE9026760 +:10BE9000CAE7F0B5012289B00023002600270C462E +:10BEA000049105210546CDE9062300234FF0FF321A +:10BEB00000934FF0FF33CDE90267FFF776FF98B9A3 +:10BEC000D5F8E430013B0FD0013400904FF0FF3241 +:10BED000D5F8EC100494CDE90630CDE902674FF0B7 +:10BEE000FF332846FFF761FF09B0F0BDF0B500F160 +:10BEF000BC07044689B03846FEF7C8FF94F80452E0 +:10BF00002DB93846C4F80052FEF7A0FF09E0D4F876 +:10BF10000062013EC4F8006236B100253846FEF7E3 +:10BF200095FF284609B0F0BD0022002304212046D9 +:10BF300004960096CDE90623CDE902234FF0FF33A6 +:10BF40004FF0FF32FFF731FF002884F804623846D3 +:10BF50000CBF00256FF47A65FEF778FFD4F8B43093 +:10BF6000002BDED11048B4F9B84006F023F9FEF7F3 +:10BF70008DFF0E4B1B6803F114011A460233B2F910 +:10BF80000000A0420CD14FF6FF731380084A1368DB +:10BF9000002B01DD013B1360034806F00BF9B3E70A +:10BFA0008B42EAD1F8E700BF78140224D0060024BF +:10BFB000A01402242DE9F04700F1BC0788B0044624 +:10BFC0001546109E384605938946FEF75FFF2A46C0 +:10BFD000059B2046D4F8E0A00796FFF7B1FEA0BB72 +:10BFE00094F8FD3104F1040894F8F92103934046D4 +:10BFF00094F8FE31029394F8FB31CDE9002394F8D4 +:10C00000FA3194F8F81106F033FA0646E8B994F8D4 +:10C01000FB0107AB5146B0FA80F04009CDE900932F +:10C0200042422B464046F7F7CDF9054632463146A7 +:10C030004046CDE90266CDE9006694F8FA3106F093 +:10C0400017FA45EA000464B20CB16FF47A6438461A +:10C05000FEF7FCFE204608B0BDE8F0872DE9F04F62 +:10C0600092469B468DB00446D0E944239B4508BFC9 +:10C07000924528D2D0F828C1BCF1000F23D0BCF1E2 +:10C08000010F0CD000F5B47E0025AC451BDDFEE8A9 +:10C090000201594508BF504502D20135F5E7002598 +:10C0A000611991F85411059116991AEB0106179927 +:10C0B0004BEB0107BB4208BFB24207D2614C20469E +:10C0C0000DB0BDE8F08F4FF0FF35E9E72368524629 +:10C0D0002046196B5B46884702460B465046594638 +:10C0E0000EF010FD1343E9D116F1FF32236820460C +:10C0F000196B47F1FF33884702460B4630463946F5 +:10C100000EF000FD1343D9D104F5E4730993DDE982 +:10C110001623134300F09480D4F81891B9F1FF3F2F +:10C1200059D11AF1FF334FF008074FF003060A9375 +:10C130004BF1FF330B9305F1090304EBC3030893A1 +:10C14000059B3B4224D0099B4FF0000950465946BD +:10C1500053F826301A4698464B460EF0D3FC13434C +:10C1600016D1DDE916234B4508BF424510D30A9B83 +:10C1700013EB080306930B9B43EB09030793089B00 +:10C18000DDE90601D3E948238B4208BF824203D28E +:10C19000013E4FEA5707D3D204EB8606D6F8B89192 +:10C1A000D6F8C86104F1BC074FF000083846FEF726 +:10C1B0006DFE2046FFF784FD00283DD15B465246C8 +:10C1C0002046FFF7BDFD034640B16FF47A64384660 +:10C1D000FEF73CFE73E74FF48056E3E7CDE901003C +:10C1E000009052464946201DF8F798FF0028ECD1F0 +:10C1F0001AEB060A169B4BEB080B9B1B1693179B1F +:10C2000063EB08031793DDE9162313430CD004EB0B +:10C21000C503D3E95A235B4508BF52453FBF0135EB +:10C22000631993F8543105932046FFF711FD28B1A7 +:10C230003846FEF70BFE6AE7034CC8E7034CC6E737 +:10C2400000243CE75BF0FFFF5CF0FFFF5DF0FFFFC9 +:10C250002DE9F04F1F4600F1080304460E4615462F +:10C2600000F1BC0800F104092DED028B08EE103A34 +:10C2700087B0DDE9122313437CD0D4F8F0314FF0BE +:10C28000000B284639469A461A4602935B460EF042 +:10C2900039FC12995118009113994B410193DDE932 +:10C2A000000159454FF0000B08BF504540462ABFDA +:10C2B000029B129B9B1A0293029B9A46CDE904AB08 +:10C2C000FEF7E4FD2046FFF7FBFC00284ED12A468E +:10C2D0003B462046FFF734FD50B16FF47A64404688 +:10C2E000FEF7B4FD204607B0BDEC028BBDE8F08F31 +:10C2F00094F89830002BF0D0002EEED0049B002B49 +:10C30000EBD0484606F0AAF84FF0FF332A46022148 +:10C31000484602F071F904AB324604F16C0118EEA4 +:10C32000100AF8F78FFE0390484606F08DF8039B3D +:10C33000002BD2D1DDE904239B4508BF9245CCD127 +:10C34000029B15EB0A0520461E44129B47EB0B0788 +:10C35000B3EB0A031293139B63EB0B031393FFF7E7 +:10C3600077FC28B14046FEF771FD82E7024CB6E744 +:10C37000024CB4E70024B5E75CF0FFFF5DF0FFFF7F +:10C380002DE9F04FD0F8B4A005462DED028BB5B0E5 +:10C39000BAF1000F0CD0C84AC84BBAF1FF3F0CBF2E +:10C3A00092469A46504635B0BDEC028BBDE8F08F00 +:10C3B00000F1BC03184608EE903AFEF767FD2B1D0E +:10C3C0005246514608EE103A95F8FA3118EE100A26 +:10C3D000CDE902AACDE900AA06F04AF830B16FF41F +:10C3E0007A6A18EE900AFEF731FDDBE795F8043221 +:10C3F0000BB9C5F800A2D5F800420134012CC5F8EC +:10C400000042EED10023D5F8F46185F8FB3185F8C0 +:10C41000FD3195F89830002BE1D018EE100A06F0A7 +:10C420001DF818EE103A3146C5F89060181DF9F75E +:10C4300083FF064618EE100A06F006F8002ECED14D +:10C440002846FFF705FC002800F026859C4F0322B4 +:10C450000DF1800B9F213B782846CDF810B08DF868 +:10C46000803000230096ADF88160CDE906230022DC +:10C470000023CDE902234FF0FF324FF0FF33FFF7E7 +:10C4800094FC09970028AAD19DF880309D2B00F0DC +:10C49000D98000F2BE80012B00F0D7801F2B00F066 +:10C4A000E280002310ACDFF820A2294620460826AF +:10C4B00000274FF05A08B146C5E94233C5E9483371 +:10C4C000CDE920A39BE80C00F6F7BCFF94E80F0031 +:10C4D0001CAC8BE80F0001230022584603940296FF +:10C4E000CDE90038CDE904670023FBF73AFCB842F8 +:10C4F000CDF828A0C0F28A800422724920460DF0AF +:10C500007FFF8246002840F081809DF87530012B26 +:10C510007CD19DF8763032460B933B4637461E461B +:10C520000120CDF8048000905846CDE90476CDE98D +:10C530000294CDE90C32FBF714FC002866DB9DF871 +:10C540007230012B089361D11D984FEA106CBCF139 +:10C55000FF0FDDE90C3214D19DF87010812900F035 +:10C560008A80842900F0918059B920F07F40C5F875 +:10C5700008019DF8730080005028A8BF5020C5F81E +:10C580000C0108320B990AF1010043F100035145F7 +:10C590006FDC0A9B14AE4FF000082946209330460A +:10C5A000CDF884809BE80C00F6F74CFF96E80F006E +:10C5B00084E80F0095F80231D5F80821002B6ED0E1 +:10C5C000242000215A274FF0080901264346CDF8C0 +:10C5D0000CB00096CDE90401CDE901792046FBF7C6 +:10C5E000C0FB98B90C220023CDE904232CAB6022B8 +:10C5F000CDE902930023CDE900672046FBF7B1FBAC +:10C60000824618B99DF98730002B61DADFF8BCA0AB +:10C61000E7E6BF2B13D0C22B7FF443AF9DF88130E8 +:10C62000202B1FBF012385F800310323C5F8E43018 +:10C630001523C5F8EC30002385F8F03031E785F894 +:10C6400003012EE7C5F8E4402BE79DF88130022B6B +:10C650007FF427AF9DF88230202B7FF422AF012397 +:10C6600085F801311DE7312385F80241C5F8E8302E +:10C6700017E7824654E720F07F40C5F820019DF877 +:10C6800073008000C5F824017BE720F07F40C5F8E7 +:10C69000D8019DF873008000C5F8DC0171E7D5F87A +:10C6A0000C110820CDF80CB0CDE904135A21CDE9C6 +:10C6B000011001210091A0E75AF0FFFF59F0FFFFA0 +:10C6C000BCB10108B7B10108078100085EF0FFFFA7 +:10C6D000219B95F802110133DB08C5E94430D5F8F8 +:10C6E0000C31282B89BF9DF8A8304FF480731A11A4 +:10C6F000012388BF9340C5F8F031002969D09DF827 +:10C70000B43013F0080267D000294FF000034FF057 +:10C7100000014FF0000004934FF0FF3200934FF000 +:10C72000FF33CDE90601CDE902010CBFF0219921CB +:10C730002846FFF73AFB00287FF468AF2846FFF74A +:10C7400087FA044600283FF461AFD5F80C011C2895 +:10C7500064D9012305F5DC7105F5E4774FF0FF3C62 +:10C760009E469BF81C2041F804CB0EFA02F2012AE7 +:10C77000CA600FD99BF81D6041F8046CD5F8606160 +:10C78000B24200D30EB9C5F8602195F854211A437E +:10C7900085F854215B008F420BF1020BDBB2E0D134 +:10C7A0009DF882309F0640D59DF88930C5F8E0306D +:10C7B0009DF8883003F01F025B119B0085F8FD2176 +:10C7C00085F8FB31022385F8F931002485F8FE3124 +:10C7D00044E09DF8BD3094E7DB067FF517AF0026F7 +:10C7E000002704924FF0FF33009266214FF0FF3292 +:10C7F0002846CDE90667CDE90267FFF7D6FA00289B +:10C800007FF404AF4FF0FF324FF0FF3399210490D3 +:10C810000090CDE90667CDE9026789E79DF8813090 +:10C82000FF2BC5F81831BBD1F0E610286BDD9DF861 +:10C830009020D60667D59DF89B30C5F8E0309DF86E +:10C840009A3003F01F025B119B0085F8FD2185F8EB +:10C85000FB31022385F8F93185F8FE3195F8003176 +:10C8600093B3099B002218EE100A1B781146ADF80D +:10C8700061208DF860300223CDE90222CDE900224B +:10C8800005F0F6FD00BB18A92846FFF702FBD8B952 +:10C890009DF86230284643F002038DF86230FFF7BE +:10C8A0000FFA88B918A92846FFF79CFA064658B926 +:10C8B0002846FFF7CDF938B118A92846ADF86060D1 +:10C8C0008DF86260FFF7E5FA099B1A780023ADF84E +:10C8D0003D30ADF8613095F802318DF83C208DF88F +:10C8E0006020002B40F0C0809DF8BA30C3F30213E3 +:10C8F000013B042B00F2FE80DFE813F0B6002201BA +:10C900002701B600B60058060ED59DF88B30C5F845 +:10C91000E0309DF88A3003F01F025B1185F8FD219D +:10C9200085F8FB31022350E79DF89020D1077DD593 +:10C930009DF89730C5F8E0309DF8963003F01F025F +:10C940005B115B0085F8FD2185F8FB31012385F83B +:10C95000F93185F8FE3195F8F030BBB1D5F80C31DE +:10C960003F2B13DD9DF8BF3013F0400200F05F81D4 +:10C9700003234FF0000B85F8FA3195F8FA31032BB9 +:10C9800000F0E281BBF1000F7FF440AE2846FFF7D4 +:10C990005FF900283FF43AAE0A9B18AE4FF0000B47 +:10C9A0000DF1800829462093CDF884B030461CACA8 +:10C9B00098E80C00F6F746FDD5F8209196E80F00B0 +:10C9C00084E80F00B9F1000F04D0D5F82461002EDF +:10C9D00040F0C8810123C5F82831D5E94432C5F8B3 +:10C9E0002C3113F1FF3342F1FF32C5E95A32D24BF9 +:10C9F00028461B788DF880300023ADF88130FFF792 +:10CA000027F900283FF402AE95F80341002C00F00E +:10CA10000C82012C00F024822846FFF719F9002827 +:10CA20003FF4F4AD012385F80432DAE4DA0606D5E2 +:10CA30009DF88F30C5F8E0309DF88E307EE7DB073B +:10CA40000ED59DF88D30C5F8E0309DF88C3003F0A0 +:10CA50001F025B1185F8FD2185F8FB31012378E782 +:10CA60000323C5F8E03076E70123C5F8F830C5F8B0 +:10CA7000FC30D5F8F8305F1C09D0D5F8FC104E1CFE +:10CA800005D034AA134401228A4003F8942C18A933 +:10CA90002846FFF7FEF99DF862309DF83E202846B3 +:10CAA000BDF83C101343BDF860209DF83C700A436C +:10CAB00018A99DF83D60ADF860208DF86230FFF751 +:10CAC00091F92846FFF7C4F800283FF49FAD0023F2 +:10CAD00018A92846ADF860308DF86230FFF7D9F913 +:10CAE0009DF860301F409DF861301E4057EA0603F4 +:10CAF0003FF48CAD002C3FF42EAF9DF8B9309DF87B +:10CB0000B8201B0103F0100343EA1213082B67D06F +:10CB100038DC022B24DC002B3FF41DAF0021002366 +:10CB200000204FF0FF32049300934FF0FF33CDE924 +:10CB30000601CDE9020138212846FFF736F90AE758 +:10CB40000023C5F8F830062391E707234FF0000CC7 +:10CB50004FF03E0EC5E93EC33F23C5E93AE388E7FF +:10CB6000042B7FF4F8AE0021002300204FF0FF32A9 +:10CB7000049300934FF0FF33CDE90601CDE90201A4 +:10CB80003521D9E7102B7FF4E6AE0126002718AC3B +:10CB90004FF000084FF000094FF0000B4FF0FF324C +:10CBA0004FF0FF33652128460494CDF800B0CDE95D +:10CBB0000667CDE90289FFF7F8F89DF860304FF07D +:10CBC000FF32612103F07F030494CDF800B08DF8AB +:10CBD00060304FF0FF33CDE90667CDE90289ABE75E +:10CBE0000126002718AC4FF000084FF000094FF065 +:10CBF000000B524A0023652128460494CDF800B06A +:10CC0000CDE90667CDE90289FFF7CFF89DF86030DE +:10CC10004A4A712143F040030494CDF800B08DF8E6 +:10CC200060300023CDE90667CDE9028984E7D807A3 +:10CC300011D50020002104920092CDE90601CDE932 +:10CC400002014FF0FF324FF0FF33B7212846FFF7C4 +:10CC5000ACF860BB8CE613F002020DD02846FFF75B +:10CC60002FF8002865D10022002304900090CDE920 +:10CC70000623CDE90223E4E713F0100139D00126A1 +:10CC8000002718AC4FF000084FF000098DF8602025 +:10CC900000924FF0FF334FF0FF32B5212846049445 +:10CCA000CDE90667CDE90289FFF77FF810B1DFF81B +:10CCB00090B062E69DF86030284643F001038DF89D +:10CCC0006030FEF7FDFF834698BB04904FF0FF32C3 +:10CCD0004FF0FF33B12128460094CDE90689CDE914 +:10CCE0000267FFF762F80028E1D1032385F8FA31E3 +:10CCF00043E613F0080013D080230022049117218B +:10CD00008DF860300023CDE9062301220023CDE910 +:10CD1000022318AB4FF0FF3200934FF0FF3395E73B +:10CD200013F0040B4FF00203E0D0C522C5F8F42045 +:10CD30001FE6DFF810B020E6BCB101080300800058 +:10CD40005EF0FFFF5CF0FFFF002218EE100A1146B4 +:10CD5000CDE90222CDE9002205F08AFB00283FF44C +:10CD600011AE53E430460BF07FFF074600283FF436 +:10CD70004DAC5A23082103904A462046CDE90131A3 +:10CD80000123CDE9046B00935B46FAF7EAFF002824 +:10CD900040DB3E78D5F8249116F0020694E80F00A7 +:10CDA00088E80F0040F0BD80B9443C460FA9083424 +:10CDB000A1452FD314F8063C4FF0000C14F8052CB5 +:10CDC0004FF0010B03F00F009B09099254F8042C5B +:10CDD00003910290CDE904BC14F8070C00930023E2 +:10CDE00001904046FAF7BDFF002813DB9DF83C3068 +:10CDF0007600099A0FA9F6B21A4214F8082C237883 +:10CE000018BF46F00106D20703F0020300F18B8041 +:10CE1000002BCCD04FF0FF347CE00899013349005F +:10CE2000042BC9B208916AD174E02846FEF748FF86 +:10CE300000287FF4EBAB002200230490982100909F +:10CE40002846CDE90623CDE902234FF0FF324FF00B +:10CE5000FF33FEF7AAFF00283FF4DEADFFF7D6BB95 +:10CE600020A92846FFF715F800287FF4CFABD5F8A6 +:10CE7000F8307BB9D5F8FC309C4044F00304E4B2B0 +:10CE80009DF8803020A928461C408DF88040FEF790 +:10CE9000A9FFE0E70324F3E7DFF8C4A0FFF7A1BA96 +:10CEA0000CF101030A2BC5F82831B3DC6FF4AA7921 +:10CEB000043405F5967805F5AA7605F5B47E0021CB +:10CEC0000F22A9EB0509236814F8040B23F0FF03D4 +:10CED00000F00F0003F58073024048F8043B013B6B +:10CEE00006F8010B0B44D9171846EEE80201591C4D +:10CEF00009EB06039C45E6DC0023C5F86031089980 +:10CF000011EA020489D005EB83030024D3F8C83169 +:10CF1000C5F8603138460BF0AFFE01343FF476AB14 +:10CF200065E53C465E46D5F824213A4421788807D9 +:10CF30007FF570AF04F108039A42FFF46BAF94F8E9 +:10CF400002C00CF1020304EB83039A42FFF462AFC8 +:10CF50006078B042A4D0C9073FF55CAF1C46E5E756 +:10CF60005DF0FFFF70470000094B0A485B6870B531 +:10CF700090248D1804FB03038D4207D011F8014B58 +:10CF80001868C6693606FCD58462F5E7104670BDA0 +:10CF9000900B0224F40C0224012070476FF015005E +:10CFA00070476FF01C00704703681B6818476FF0EC +:10CFB0001500704711207047BFF35F8F01220849A9 +:10CFC0008A6001320B69042A23F0010343EA00035B +:10CFD0000B61F5D1BFF34F8FBFF36F8F704700BF69 +:10CFE00090ED00E0BFF35F8F064A00239360136962 +:10CFF00023F0010318431061BFF34F8FBFF36F8F0E +:10D00000704700BF90ED00E070472DE9F04746689B +:10D0100096F8327087BB03685B689847346A84422D +:10D020002AD03369041B96F934201C40B36830625F +:10D03000A4FB0345CAB1736A14EB030845F1000968 +:10D04000002A1BDBC2F12001A2F1200328FA02F41E +:10D0500029FA02F509FA01F129FA03F30C431C43FA +:10D0600004FA02F2A8EB02027262D6E90A321B1934 +:10D0700045EB0202C6E90A32BDE8F087D6F80CA0FB +:10D080003B464046494652460DF03CFD04460D469F +:10D090000AFB1082E8E72DE9F14F46680546376B39 +:10D0A00027F07F4727F0FF07002F57D1FFF7ADFF8D +:10D0B0007368002B60D0D5F800A0D3E90001D6E951 +:10D0C0000A238B4208BF824205D3DAF8143001B03C +:10D0D000BDE8F04F18476C68D4E90A32D4F814B0B0 +:10D0E000B0EB030861EB0209D4E906234B4508BF06 +:10D0F000424520D3E36894F933C0A3FB080103FB46 +:10D100000911BCF1000F13D0A268531EC01841F1E1 +:10D110000001BCF1000F24DBCCF12002ACF12003B4 +:10D1200020FA0CF001FA02F221FA03F3104318433B +:10D13000834528BF8346236A9B4423690BEA030B7C +:10D14000DAF81030584698472B685B689847336A7E +:10D150005B450AD258450CD283420AD801B0BDE8DB +:10D16000F08F3B460DF0CEFCE2E78342F6D95845FE +:10D17000F4D32B685B69AAE77369306A3269184493 +:10D180002B6810401B6901B0BDE8F04F1847B1F99A +:10D1900000305A1C01D118467047834201D188687B +:10D1A00070470C31F3E784B001A804B080E80E00AA +:10D1B00070470120704700290CBF6FF01800002055 +:10D1C00070476FF015007047036800221B69114615 +:10D1D00018470368012200211B69184730B1036812 +:10D1E00023B11B79052B03D0062B24D02048704790 +:10D1F00043680020DFF8A4C01E4A1F49C3E902C2E9 +:10D2000002F17942DFF898C002F5740202F501627A +:10D210001A611A4AC3E9051202F1D14202F5C0129D +:10D2200002F51E62DA61164AC3E908C20122C3E9A7 +:10D2300000009A667047436800201249124ADFF8DE +:10D2400064C09866C3E90212104A1149C3E904C2D6 +:10D25000104AC3E90612104A1A6202F17452A2F58A +:10D260002302A2F69242C3E900005A62704700BF4F +:10D2700000AFFFFF07D57C3639590EF7310BC0FFE1 +:10D28000A44FFABE67E6096A85AE67BB3AF54FA5BB +:10D290007F520E518C68059BABD9831FD89E05C168 +:10D2A000A78FF96472F36E3C137810B504688C4252 +:10D2B00038BF013B13700368591A016010BD036841 +:10D2C0005918016028BF0123117838BF00230B448F +:10D2D00013707047436830B52BB94A6862B9181E9D +:10D2E00018BF012028E0826802EB830252F8042C68 +:10D2F000002AF2D1013BEFE78C6804EB820555F878 +:10D30000045C85B9013AE9E7826852F8231054F8C1 +:10D310002320914205D803F1FF330AD24FF0FF30AA +:10D320000AE0012008E00BB19342FAD89342F5D30A +:10D33000013B5A1CE8D1002030BD0021F0B50A465F +:10D340004568954202D100242046F0BD836853F819 +:10D350002260002326FA03F7CC18FF07F4D4013328 +:10D36000202B01EB0304F5D101322146E9E70368E4 +:10D3700070B5CD1A002D0DDD93F900601C78002EDC +:10D380000BDB5C1C04601B7813600368C91A13680C +:10D390008B4234D96FF05F0070BD04F07F04013C14 +:10D3A000032C29D8DFE804F002091220012DF1D066 +:10D3B0005C78023314600360E7E7022DEADDB3F81E +:10D3C0000140033364BAA4B21460F4E7032DE1DD35 +:10D3D0009C78043313F8035C240244EA054413F8F0 +:10D3E000015C2C431460E6E7042DD3DDD3F8014043 +:10D3F000053324BA1460DEE76FF06300CCE7002049 +:10D40000CAE70000024B987A003818BF0120704725 +:10D410001801002408B504F043FDFCE710B50446EC +:10D420000BF02AFC204610BD08B5431C03D103466F +:10D43000184608BD0C31B1F900305A1C04D098428E +:10D44000F8D14B68591CF3D101460148F5F7CCFDE2 +:10D4500030010180884208B507D0431C05D0013156 +:10D46000014602D00248F5F7BFFD084608BD00BFDF +:10D4700030010180024B186808B107F051BF7047B6 +:10D4800088270224024B186808B1FAF785B870475C +:10D4900088270224012008B500F0B8FB11F0010034 +:10D4A00010B58CB204D0F5F7B9FF003818BF0120D1 +:10D4B000E2060AD5054B5A6890235343044AD358D1 +:10D4C000DB691B0648BF40F0100010BD900B022422 +:10D4D000F40C0224F8B50D4682B3194B194C5F6861 +:10D4E000902303FB07439A68B2F5805F16D11A694F +:10D4F000BAB940F2FF12A3F86020902202FB074263 +:10D50000B2F86060F5F78AFF0028FBD09023012075 +:10D510007B43E3585B6A1E402E70F8BD1AB91A6946 +:10D5200032B9FF22E7E7B2F1805F05D11A690AB983 +:10D530007F22E0E73F22DEE70022DCE71046ECE74F +:10D54000900B0224F40C0224436B30B5054685B0E1 +:10D5500053B100F128036C460FCB84E80F00002381 +:10D5600020466B6307F0C2FF05B030BDD0F89030A5 +:10D570002DE9F04F012B04462DED088B87B0029367 +:10D5800007D9002084F8940007B0BDEC088BBDE8F3 +:10D59000F08F031DB0F99670B0F9986008EE103A5C +:10D5A000D0F88C30B0F99A50B0F99CA008EE903ABF +:10D5B000B0F99EB0B0F9A08038467249FFF734FF49 +:10D5C000714903903046FFF72FFF704901902846BC +:10D5D000FFF72AFF6E4909EE100A5046FFF724FFB5 +:10D5E0006C4909EE900A5846FFF71EFF6A490AEE99 +:10D5F000100A4046FFF718FF019A039B8146114627 +:10D600001846FFF727FF19EE901A019019EE100A3D +:10D61000FFF720FF494603901AEE100AFFF71AFFA2 +:10D62000019B1A46039B9A42ABD1019B8342A8D12E +:10D6300054493846FFF7ABFD534903903046FFF796 +:10D64000A6FD524909EE100A2846FFF7A0FD5049F1 +:10D6500009EE900A5046FFF79AFD4E490AEE100A6D +:10D660005846FFF794FD4C490AEE900A4046FFF7F2 +:10D670008EFD4A4A0BEE100A039BD2F8D41048489C +:10D6800041F48041C2F8D410D2F8D41001F48041A2 +:10D69000059105994349D0F88CC08C45FBD1D16FD9 +:10D6A0004FF0000941F48041D167D16F21F48041EE +:10D6B000D1674FF440720121C26000223846A4F8BD +:10D6C000547084F84520226184F844204FF00042D1 +:10D6D00092FAA2F2B2FA82F2013A62614FF48062E7 +:10D6E000A261029AE261019AC4E9021162601946DC +:10D6F000C4E90899F7F790FE49463846F7F736FE31 +:10D7000019EE101A3046A4F85660F7F785FE494620 +:10D710003046F7F72BFE19EE901A2846A4F8585019 +:10D72000F7F77AFE49462846F7F720FE1AEE101A58 +:10D730005046A4F85AA0F7F76FFE49465046F7F74F +:10D7400015FE1AEE901A5846A4F85CB0F7F764FE7E +:10D7500049465846F7F70AFE1BEE101A4046A4F851 +:10D760005E80F7F759FE49464046F7F7FFFD18EE91 +:10D77000901A18EE100AF8F7DFFDB0FA80F04009B1 +:10D7800000E700BFD0B3010800B4010830B40108BD +:10D7900054B4010884B40108A8B401080044025834 +:10D7A000006402580003008039B101F18041013961 +:10D7B00000EB81018142034600D270471B680A6872 +:10D7C0001BBA12BA40F8042B41F80439F2E7000002 +:10D7D000034B596A5A6A521A8242FBD3704700BF00 +:10D7E000000C004007B501900BF03EFA019910B90A +:10D7F0000248F5F7F9FB03B05DF804FB1F01018057 +:10D80000037823F0030343F001030370FFF732BEF4 +:10D8100010B50446037803F00303012B08D0FFF78B +:10D8200031FE237803F00302012A03D1FFF722FE21 +:10D83000002003E043F002032370012010BD00002C +:10D84000014B186807F06CBD40270224014B186893 +:10D85000F9F7A2BE40270224014B186807F060BD0B +:10D8600080270224014B1868F9F796BE802702240E +:10D8700001207047074A084913681844884283BF4B +:10D88000064B0C224FF0FF3010608CBF1A60184618 +:10D89000704700BF0C01002400FC072454A502249B +:10D8A000064A136843B1013B13602BB9044A137055 +:10D8B000044B1B7803B162B6704700BF3C270224BB +:10D8C0008C27022438270224EFF3108372B6074A0C +:10D8D000117831B9DB43064903F001030B700123D2 +:10D8E0001370044A13680133136070478C270224B5 +:10D8F000382702243C27022408B5FFF7E5FF064A33 +:10D900001388013B9BB2138013B90120FFF76AFB18 +:10D91000BDE80840FFF7C4BF8427022410B5074CB8 +:10D92000FFF7D2FF218811B90846FFF75BFB0131F1 +:10D930002180BDE81040FFF7B3BF00BF8427022459 +:10D9400008B5FFF7C1FF064A1388013B9BB213805D +:10D9500013B90120FFF730FBBDE80840FFF7A0BF77 +:10D960008627022410B5064CFFF7AEFF208808B9C1 +:10D97000FFF722FB01302080BDE81040FFF790BF89 +:10D9800086270224F0B58FB007460E4615460021C3 +:10D99000142209A801AC0BF0D9F9104B08945B696B +:10D9A0000197DA6B049305925A6B1B6B06920793EF +:10D9B000CDE90256FFF788FF094A0A4D1368013383 +:10D9C00013600FCC0FC50FCC0FC50FCC0FC523684C +:10D9D0002B60FFF765FF00200FB0F0BD1801002499 +:10D9E000442702244C270224F8B50546FFF76CFFB4 +:10D9F000D0E90034DB68984794F832301BB1BDE8B9 +:10DA0000F840FFF74DBF012384F831306368ABB1B4 +:10DA10002846FFF7FAFA6168D4E90A67D1E90023DA +:10DA20009F4208BF964209D36B685A68CB6863600F +:10DA30002368002BEAD090689847E7E70023284640 +:10DA400084F83130FFF727FBD9E72DE9F743044687 +:10DA500000F108058069904699460190FFF734FF70 +:10DA60000198FFF7D2FA01980021426824615368B7 +:10DA7000C4E902892BB9636161B95560FFF70BFBFB +:10DA80000FE0D3E90067B94508BFB045F3D31946A5 +:10DA9000DB68EFE7D2E90A23CD604B4508BF42457A +:10DAA000ECD203B0BDE8F043FFF7FABE90F83C308B +:10DAB00030B453B1002380F83C3090F83E3013B9B5 +:10DAC000012380F83D3030BC704790F83F30002B88 +:10DAD000F9D0836B4FF08062013383630B4B5A6044 +:10DAE000D0E90C32013342F10002C0E90C32D0E936 +:10DAF0000A2312F57A7543F1000412F5FA62C0E9BF +:10DB00000A5443F1000330BCFFF79FBF00ED00E073 +:10DB100038B5D0E90825D0E902130446521845EB80 +:10DB20000303FFF792FF636B2BB104F12800BDE8FC +:10DB3000384007F0DBBC38BD094B30B51A46094CFC +:10DB4000D3F89450A542FBD1036829B181680B60DA +:10DB50004FF44073536130BDC1681B04F7E700BF49 +:10DB6000006402580003008000B57B2589B0FFF7F0 +:10DB7000ABFE0720ADF81450F7F730FB4FF470718F +:10DB8000044628461E4DF7F747FC4FF400631D4A34 +:10DB90000021019301A8BDF81430069403F00F038F +:10DBA00052F82330079304F1100318340293CDE99F +:10DBB0000344F7F70FFC0424012101A8FFF7BCFF81 +:10DBC0002846FFF705FE002101A8FFF7B5FF28460C +:10DBD000FFF7FEFD013CEFD104240B4E012101A80B +:10DBE000FFF7AAFF3046FFF7F3FD002101A8FFF77A +:10DBF000A3FF3046FFF7ECFD013CEFD1DBE700BFB0 +:10DC0000F04902001CB10108801A060008B508B1ED +:10DC1000FFF7AAFFFEE7000008B50E4B0121D3E88D +:10DC20004F2FC3E8401FD2B20028F8D12AB1FFF726 +:10DC30004BFEBFF34F8F20BFFDE7EFF305831BB90A +:10DC4000EFF31083DB0701D5FFF78EFF0120FFF70D +:10DC5000DDFF00BF482702240FB4724608B5074B0A +:10DC60000120D3E84F1FC3E8440FC9B2002CF8D1FC +:10DC700011B90348FFF786FEFFF7CEFF440B0224DD +:10DC80000001FF803F282DE9F04F06468BB000F3DE +:10DC90002B81964F57F82000411C40F00981022E3D +:10DCA00000F306819248DFF88C920378BFF35B8F14 +:10DCB00013F0010F40F0F980FFF7AAFD002800F0F3 +:10DCC000F4808C4BC9F800308B4B1A689846002AB8 +:10DCD00040F0E88089496E20FFF7A6FB044688499A +:10DCE0006920FFF7A1FB01462046864DFFF7B2FBF6 +:10DCF000824904466E20FFF74AFA8149834669202B +:10DD0000FFF745FA804B82462C609C4221D17F4A26 +:10DD1000D2F8F01041F01001C2F8F010D2F8F02063 +:10DD200002F010020992099A794A94424AD1774B3B +:10DD3000D3F8F02042F02002C3F8F020D3F8F030FE +:10DD400003F020030493049B724B9C424AD10124AC +:10DD500087E0704A94421AD002F58062944224D03F +:10DD60006D4A94425CD06D4A9442DDD1674AD2F844 +:10DD7000E81041F48011C2F8E810D2F8E82002F46B +:10DD800080120592059A9C42DED1002469E05F4A28 +:10DD9000D2F8E81041F40031C2F8E810D2F8E820D7 +:10DDA00002F400320892089ABEE7584AD2F8E81006 +:10DDB00041F48021C2F8E810D2F8E82002F4802271 +:10DDC0000792079A564A944237D1504BD3F8E8202D +:10DDD00042F08042C3F8E820D3F8E83003F08043F3 +:10DDE0000393039B4F4B9C4274D003F580639C428A +:10DDF00072D003F580639C4270D003F544439C428B +:10DE00006ED0A3F51C439C426CD003F580639C420A +:10DE10005ED04548844214BF4FF0FF34082420E010 +:10DE20003A4AD2F8E81041F40021C2F8E810D2F8DA +:10DE3000E82002F400220692069A3C4A94423AD024 +:10DE4000394A94429FD1314B0824D3F8F42042F050 +:10DE50000802C3F8F420D3F8F43003F00803019368 +:10DE6000019B59466E206C60F7F7D6FA01216E20AF +:10DE7000F7F77CFA51466920F7F7CEFA01216920BD +:10DE8000F7F774FA00234FF4E132C5E90433C5E92A +:10DE90000223274BAB61F8F7CBFA0123C8F8003017 +:10DEA000F8F762FD1248FFF7ABFC224847F82690CE +:10DEB0000BB0BDE8F08F154BD3F8E82042F00042DC +:10DEC000C3F8E820D3F8E83003F000430293029B44 +:10DED0000724C6E70224C4E70324C2E70424C0E7FA +:10DEE0000524BEE70624BCE70020E1E70C0000247F +:10DEF000042602248CB701089027022434B60108B6 +:10DF0000D8B40108900B02240010014000440258CC +:10DF10000014014000440040004C0040005000400C +:10DF20000078004000480040000C0058007C004091 +:10DF30006E0069002C27022438B50D46FFF7A2FEBB +:10DF4000044630B90AF080F8092303604FF0FF302F +:10DF500038BD0368DB6998470028204614BF4FF49A +:10DF600000534FF400436B6023689B6A9847286115 +:10DF70000020EDE713B5CDE90021FFF783FEDDE9D1 +:10DF8000002140B90AF060F8092303604FF0FF3424 +:10DF9000204602B010BD03681B699847041EF7DADB +:10DFA00064420AF051F80460F0E710B5FFF76AFE2A +:10DFB000044628B90AF048F809230360204610BD3A +:10DFC0000368DB699847041EF8DA64420AF03CF8FB +:10DFD00004600024F2E7FFF7E8BF13B5CDE90021A4 +:10DFE000FFF750FEDDE9002140B90AF02DF80923C2 +:10DFF00003604FF0FF34204602B010BD03689B68F9 +:10E000009847041EF7DA64420AF01EF80460F0E74D +:10E010007FB5002A04460D4606DA0AF015F81623E5 +:10E0200003604FF0FF3019E00192FFF7BEFF019A45 +:10E03000E8B1114E01220DF10F012046FFF7CDFF8F +:10E040000028EEDB0AD09DF80F300D2B08D1325D91 +:10E050000A2A3355EED00A2301202B7004B070BD7C +:10E060000A2B02D1325D0D2AF3E73355F4E7294636 +:10E070002046FFF7B2FFF1E70826022413B5CDE9E9 +:10E080000021FFF7FFFDDDE9002140B909F0DCFFC9 +:10E09000092303604FF0FF34204602B010BD03682F +:10E0A000DB689847041EF7DA644209F0CDFF04608C +:10E0B000F0E700002DE9F74FB2F1000805460E46E3 +:10E0C00009DA09F0C1FF162303604FF0FF34204640 +:10E0D00003B0BDE8F08FFFF768FF044660B31F4A46 +:10E0E0000027DFF87CA04FF00D0B535D3C469146B6 +:10E0F000B84521DDF25D0A2A1BD10D2B019318D002 +:10E10000BC420CDA3A1B31192846FFF7B7FF00284A +:10E11000019BDADB0444A742D9DC09F8053001226F +:10E1200051462846FFF7AAFF0028CEDBCFD009F8DA +:10E1300005B0F35D0137DBE7A045C8DDA8EB0402BD +:10E1400031192846FFF79AFF0028BEDB24181FBFAD +:10E150003619024B16F8012C5A55B8E74826022406 +:10E16000B8B2010838B505460024FFF78BFD0B4B0C +:10E1700043F8254030B909F067FF092303604FF0E9 +:10E18000FF3038BD03685B699847051E04DA6D42AD +:10E1900009F05AFF0560F2E72046F2E70C00002480 +:10E1A000F0B572B60023264A4FF0FF36254F1360B4 +:10E1B0004FF0E0221D46516801F00F0101319A0035 +:10E1C0004FEAC30C02F1604202F56142C2F880607E +:10E1D000C2F88061002202EB0C0401323C44082AA0 +:10E1E00084F80053F7D101339942E8DC164B4FF025 +:10E1F00020625A6040F2FA529860DA6000221D6193 +:10E2000011469C1801320C2A2176FAD14FF0FF32C8 +:10E2100059629A620D4ADA621F221A63BFF35F8F56 +:10E220000B4B5960BFF34F8FBFF36F8FD0E90031B5 +:10E23000002282F314889D4682F310880847F0BDBF +:10E2400010E000E000E100E000ED00E0020000C0AE +:10E2500090ED00E00AF082BD0AF090BD0AF038BEF1 +:10E260000AF0DCBD406828B1037B012B01D10438E2 +:10E270007047002070470000436893F830202DE974 +:10E28000F0470646002A74D193F83230002B70D143 +:10E2900003681B6898473368DB699847364B026808 +:10E2A000002A08BF1A4611461C46B1FBF3F304FBD3 +:10E2B00013132146002BF7D12F4B01257768B3FBB1 +:10E2C000F4F11F23B960013B03D305FA03FC614558 +:10E2D000F9D1B2FBF4F287F8333001241F23FA603E +:10E2E00004FA03F5AA4201D0013BF9D287F8343091 +:10E2F0004468231F1B2B93BF01234FF0FF332024BF +:10E30000A340A4F1040498BF03F1FF3312F1FF30DE +:10E310003B614FF0070303FA04F44FF000034FEAA8 +:10E32000E4797C61A4FB01459A4601FB095543F160 +:10E33000FF31201845EB01010CF0E4FB3368C7E91D +:10E3400006015B68C7E900AA984773683862002134 +:10E3500000200122C3F824A083F832A01A86C3E962 +:10E360000A013046FEF751FE3046BDE8F047FEF7A1 +:10E3700092BEBDE8F08700BF40420F0010B50446D2 +:10E38000FFF77AFFFFF7A0FA2046FEF73EFE63682C +:10E39000D3E90A01FFF784FA10BD2DE9F8430C46D2 +:10E3A00080468869FFF7EAFFD4E90A59461B61EB0A +:10E3B0000907002F08BFB6F57A7F2AD3002F08BFC0 +:10E3C000B6F5FA6F28D3002E4FF47A72304677F103 +:10E3D00001034FF00003B4BF002139460CF092FB5B +:10E3E0004FF47A760023A363A0FB0623551906FB9E +:10E3F000013343EB0903C4E90A53D4E90C32C318CF +:10E40000404642EB0101C4E90C31C8E90031BDE8E6 +:10E41000F88300200146E3E701200021E0E7000047 +:10E420002DE97043154E35682DBB154C4FF0000893 +:10E4300014484FF00009144BA0612360C4E902891D +:10E44000C4E90455FFF718FFFFF73EFA0F4B104AD7 +:10E450001A60FFF725FA0F4BA0692360FFF78EFFC4 +:10E4600084F840503460C4E90801C4E90A01C4E9F1 +:10E470000C89C4E90E553068BDE870832827022452 +:10E48000E026022464B101081CAE0108F00A02244F +:10E49000A9CF000800B80108F8B54B6915460C462D +:10E4A0009B1A002BACBFD318131C4B6103898B80C4 +:10E4B000FFF70AFA024603686BB35E696169771A6F +:10E4C000002F24DB8E4226D19B68A36013B104F198 +:10E4D0000801196113682146002641F80C3F9E602F +:10E4E00019611460836A22616BB190F8242052B1E3 +:10E4F0000268A24207D1E2682AB96169C06A491B71 +:10E5000021EAE1719847BDE8F840FFF7C9B903F186 +:10E5100008029B68D0E7A36013B104F108011961F8 +:10E520000023E360DDE738B5856900F10804FFF7F3 +:10E53000CBF96A6853689C4209D143692846536005 +:10E54000FEF7A9FDBDE83840FFF7AAB91346002B36 +:10E55000F8D0DA689442F9D14269DA60F2E7000053 +:10E56000F8B50F4B00260027002504460360C0E9DC +:10E570000267C0E904550B48A061FFF77DFEFFF775 +:10E58000A3F9094B094A1A60FFF78AF901232046CB +:10E59000656384F83830064BC4E908672360F8BD2A +:10E5A0001CAE010864B10108F00A0224A9CF0008DA +:10E5B000F4B7010884B0F8B5044607A8DDE90C6794 +:10E5C00004F1280580E80E00FFF77EF90FC885E802 +:10E5D0000F002046FFF7A7FFA069C4E90867FFF70F +:10E5E000CDFE8219204641EB0703FFF72EFABDE866 +:10E5F000F84004B0FFF754B9F8B504460E46154686 +:10E600000021202268301F460AF0A0FB94F86030F9 +:10E61000721C84F8683016BF0023012384F86960F7 +:10E6200084F86A3094F8613084F86C3094F8623081 +:10E6300084F86D306B1C16BF00230123256701375A +:10E6400084F8743094F8633084F8783094F8643047 +:10E6500084F8793016BF00230123E36784F8803003 +:10E66000D4F8883084F8843094F8653084F88530A4 +:10E67000F8BD0000024B0A4600211B68184700BF86 +:10E68000100100242DE9F04F00F10803D3B00493EA +:10E690004AAB059300F128030693DDE9043253F8F1 +:10E6A000040B42F8040B06989842F8D10AAA01F12B +:10E6B00040004B78043111F8044C1B0443EA046316 +:10E6C00011F8014C234311F8024C884243EA042319 +:10E6D00042F8043BEDD1509B0DF1200BA248009372 +:10E6E000DE46DDF844C18146DDF838A14F9E019039 +:10E6F000DDE94A72DDE94C314FEAFA25DEF80840DF +:10E70000D9F800000EF1200E85EABA1509F12009AA +:10E710002044009C85EA7A6505440098704000EA30 +:10E720000A00604047EA020405444FEA77301C4083 +:10E73000AC4480EAB70007EA020580EAB7506144BA +:10E740002C4359F81C5C04445EF8140CA4440544A2 +:10E750008AEA060400980CEA070805440C404FEAD0 +:10E76000F120744080EAB11025444CEA070480EAA5 +:10E770007160144028444FEA7C3544EA080485EA75 +:10E78000BC05034485EABC55254459F8184C05449A +:10E790005EF8100C04444CEA0500264481EA0A04A1 +:10E7A00038401C4084EA0A0806EB08044FEAF326C6 +:10E7B0000CEA050886EAB31640EA080086EA7366A2 +:10E7C00026444FEA753484EAB504324484EAB554E9 +:10E7D000044459F8140C34445EF80C6C304445EA97 +:10E7E0000406824481EA030006EA0C06104080EA2F +:10E7F00001080AEB08004FEAF22A8AEAB21A8AEA0A +:10E80000726A82444FEA74300AEB070880EAB40067 +:10E8100005EA040780EAB4503E435EF8087C3044C1 +:10E8200059F8106C50443E4483EA020A31444FEADE +:10E83000F8260AEA080A44EA000786EAB8168AEACD +:10E84000030A2F4086EA7866514404EA000A0E441F +:10E850004FEA703147EA0A0782EA080A81EAB00102 +:10E86000B44481EAB0510AEA0C0A39445EF8047CE7 +:10E870008AEA020A314459F80C6C3E4400EA010766 +:10E8800033444FEAFC2686EABC16534486EA7C668B +:10E890001E44AB1940EA010500934FEA713325404D +:10E8A00083EAB1033D4383EAB1532B4459F8085C32 +:10E8B0003344DEF800603544009E154488EA0C02BB +:10E8C000324082EA0807EA194FEAF62501EA03070F +:10E8D00085EAB61585EA766515444FEA73326619FE +:10E8E00041EA030482EAB302044082EAB3523C43A1 +:10E8F000224459F8044C2A44DEF804502C444FEAD0 +:10E900007235A044009C85EAB2058CEA04043440C8 +:10E9100084EA0C0708EB07044FEAF62843EA0207EB +:10E9200088EAB6180F4088EA7668444485EAB25807 +:10E9300003EA020500EB040A18A83D43704545446C +:10E9400004EB05077FF4D8AE0098CDF844C1CDF8AC +:10E9500038A1CDE94F6038A8CDE94A72CDE94C31F4 +:10E96000CDE90845079001E0D0B20108DBF840008E +:10E970000BF1200B5BF8145C4FEAF04E5BF8184C7F +:10E980004FEAB5488EEA704E88EAF5188EEA902E66 +:10E99000DBF80C0088EAD50820444FEAFA248644C4 +:10E9A00084EABA140EEB080084EA7A6E009C0390A5 +:10E9B0007440009804EA0A04444001987444006CCE +:10E9C0008AEA060E2044039C2044CBF8284007EA3C +:10E9D0000204844447EA020001EB0C084FEA773155 +:10E9E000184081EAB7010EEA080E20435BF8104C8C +:10E9F00081EAB7518EEA060E8AEA08090844DBF874 +:10EA0000241084444FEAF14080EA714080EA91206A +:10EA1000DBF8101029444FEAB44585EAF4150144A7 +:10EA2000019885EAD405406C2944009D28444FEAAA +:10EA3000F825CBF82C10084485EAB815864485EAF9 +:10EA4000786505EB0E004FEA7C3507EA0C0E0344AF +:10EA500085EABC05009347EA0C0385EABC551340E0 +:10EA600043EA0E035BF80CEC1D44039B05444FEA9C +:10EA7000F34080EA734080EA9320DBF814302344AB +:10EA80004FEABE440344009884EAFE1409EA0009F0 +:10EA9000019884EADE04806C89EA0A092344304440 +:10EAA0004FEA7536CBF83030184486EAB506814413 +:10EAB000009886EAB5564FEAF02484EAB01484EA56 +:10EAC000706404EB09004CEA050402443C400292E5 +:10EAD0000CEA050214435BF8082C344404444FEA62 +:10EAE000F14080EA714080EA9121DBF81800864409 +:10EAF000029871444FEAB24E8EEAF21E8EEAD20EAE +:10EB00008E44009988EA010101400198CBF834E075 +:10EB1000C66C81EA0801029856444FEA743A4FEAFB +:10EB2000F02076448AEAB40A3144029E8AEAB45A52 +:10EB300080EAB61080EA7660461845EA040005EAE5 +:10EB4000040100EA0C0007EB060908434FEAF34111 +:10EB500081EA7341504481EA9323DBF81C1030446E +:10EB60005BF8046C0A44029913444FEAB64282EA05 +:10EB7000F61282EAD6021A44009B83EA01074FEAA2 +:10EB8000F921CBF8382007EA090781EAB9115F407B +:10EB9000019B81EA79611B6D1344434404EA000838 +:10EBA0001F44CB1944EA00074FEA70312F409C44C0 +:10EBB00081EAB00147EA0807DBF8008081EAB0513A +:10EBC00039444FEAFE47194487EA7E47DBF8203094 +:10EBD00087EA9E2E9F194FEAB843009E83EAF813F6 +:10EBE000774483EAD8031F44029B83EA090ECBF8DB +:10EBF0003C700EEA0C0E8EEA030E019B5B6D3B44EB +:10EC000033449E444FEAFC2383EABC1383EA7C63CB +:10EC100003EB0E0600EA010EAB1940EA0105009372 +:10EC20004FEA7133254083EAB10345EA0E05DBF86C +:10EC300004E083EAB1532B44DBF8245033444FEA19 +:10EC4000F24686EA724686EA922205EB080689EACF +:10EC50000C0816444FEABE4282EAFE1282EADE0245 +:10EC60001644009A08EA0208019ACBF84060956DB4 +:10EC700088EA0908029A3544009E1544009A4FEA32 +:10EC8000F222454401EA030882EAB61282EA766279 +:10EC900015444FEA7332661941EA030482EAB3026B +:10ECA000044082EAB35244EA080422444FEAF7449B +:10ECB00084EA77442A44DBF8085084EA9727039CC7 +:10ECC000A6444FEAB54484EAF514774484EAD505AE +:10ECD000009C8CEA040E019C3D44E76D0EEA060E92 +:10ECE0004FEAF624CBF844502F448EEA0C0E84EA07 +:10ECF000B6144F444FEA723584EA7664774485EA65 +:10ED0000B2053C4443EA020785EAB25E03EA020523 +:10ED100000EB040A01980F4020303D430190079812 +:10ED20007544584504EB05077FF420AE0098CDF8F4 +:10ED300044C1CDF838A1CDE94F60CDE94A72CDE9A3 +:10ED40004C31CDE90845049B05991B6851F8042B0B +:10ED50001344049A059142F8043B069B04929342A3 +:10ED6000F1D108A84FF49471FFF784FC002053B050 +:10ED7000BDE8F08F2DE9F843036805460E461446BA +:10ED800003F03F079B18036022BF436801334360D1 +:10ED90009FB1C7F1400991450FD800F128084A46B4 +:10EDA00008EB070009F0C4FF41462846FFF76AFC5C +:10EDB000B0B9403C4E443C440746264404E0284653 +:10EDC000FFF760FC60B9403C3F2CA6EB0401F6D88D +:10EDD00044B105F128002246384409F0A9FF00207B +:10EDE000BDE8F8832046FBE710B458B104684CB185 +:10EDF0002479053C012C05D842B140685DF8044BEC +:10EE0000FFF7B8BF02485DF8044B70471046FAE7B9 +:10EE100000AFFFFF38B50368044663B1856855B19C +:10EE2000FEF7DCF940B92368294620469A79BDE807 +:10EE30003840FFF7D9BF014838BD00BF00AFFFFF22 +:10EE4000036803F03F035A1C034470B5382A0D468B +:10EE500000F128064FF08001044683F8281006EBE5 +:10EE6000020061D8C2F13802002109F06FFF20468C +:10EE7000D4E900315A0FDB0042EAC10231461BBA25 +:10EE800012BA63662266FFF7FDFB00284BD1E37AD6 +:10EE90002B7063896B70A3681B0AAB70A368EB705F +:10EEA000E37B2B71E3896B71E3681B0AAB71E36849 +:10EEB000EB71E37C2B72638A6B7223691B0AAB7262 +:10EEC0002369EB72E37D2B73E38A6B7363691B0A1F +:10EED000AB736369EB73E37E2B74638B6B74A36911 +:10EEE0001B0AAB74A369EB74E37F2B75E38B6B7523 +:10EEF000E3691B0AAB75E369EB7594F823302B7655 +:10EF0000638C6B76236A1B0AAB76236AEB76A36E5F +:10EF10004BB994F827302B77E38C6B77636A1B0A25 +:10EF2000AB77636AEB7770BD0021C2F1400209F054 +:10EF30000DFF31462046FFF7A5FB0028F3D101461F +:10EF40003822304691E7000040B1036833B11B79A5 +:10EF5000053B012B02D84068FFF772BF004870479D +:10EF600000AFFFFF42F2107399422DE9F0410446D1 +:10EF70000D4603D96FF00F00BDE8F08146688E4260 +:10EF80001AD2042128460BF085F907460028F1D053 +:10EF9000D4F80880B8F1000F0CD0B60041463246D4 +:10EFA00009F0C6FE1EB131464046FFF763FBA0687C +:10EFB00009F062FEC4E901570020DDE742F2107358 +:10EFC00099422DE9F04105460C4603D96FF00F0038 +:10EFD000BDE8F08146688E4203D8BDE8F041FFF7F6 +:10EFE000C1BF731EFBB9013304219C4238BF1C46CC +:10EFF00020460BF04FF907460028E7D0D5F80880E7 +:10F00000B8F1000F0BD04146A20009F091FEB1000B +:10F0100002D04046FFF72EFBA86809F02DFE002025 +:10F02000C5E90147D4E7AA6852F82320002ADAD1BB +:10F03000013BD7E70368F0B5044689B00D46F3B14C +:10F040008668E6B169469F79FFF77EFFA8B920463A +:10F05000FEF7C4F888B92368F11920469A79FFF7BA +:10F06000C3FE50B92368694620465A79FFF7BCFEB3 +:10F0700018B929462046FFF767FF09B0F0BD0148DF +:10F08000FBE700BF00AFFFFF10B404682CB183683A +:10F090001BB15DF8044BFFF7A7BE02485DF8044BB7 +:10F0A000704700BF00AFFFFF2DE9F0410E4688B06A +:10F0B00017460546002852D00368002B4FD08268BF +:10F0C000002A4CD09B79BB4213D2FEF787F8044646 +:10F0D00088BB3A4631462846FFF786FE044650BBB9 +:10F0E00069462846FFF730FF044620BB2B686E4672 +:10F0F0005F792B683621D5F80880013E9A79404621 +:10F10000474408EB020409F021FE2B685C212046ED +:10F110009A7909F01BFE4346601E9F4213D1284690 +:10F12000FEF75CF8044630B92B68414628469A79C8 +:10F13000FFF75AFE044620216846FFF79BFA204657 +:10F1400008B0BDE8F08116F8011F1A784A4003F8AC +:10F15000012B10F8012F31784A400270DDE7014C95 +:10F16000EDE700BF00AFFFFF10B50446F0B1036844 +:10F17000E3B1406848B11B79053B012B02D86C21F3 +:10F18000FFF778FA606809F077FDA06840B123685E +:10F190009B7959000BB1FFF76DFAA06809F06CFD7F +:10F1A00020460C21BDE81040FFF764BA10BD2DE9E0 +:10F1B000F04705688AB082460E46174605B16D795C +:10F1C00076B3002F14BF4FF002084FF00108002360 +:10F1D0000AF10C098DF804305046FFF71BFE044677 +:10F1E000B0B92A4649465046FFF74EFF044678B963 +:10F1F000012201A95046FFF747FF044640B9B8F184 +:10F20000020F10D002A95046FFF714FF044698B130 +:10F2100002A82021FFF72EFA20460AB0BDE8F087A9 +:10F220004FF00108D3E73A4631465046FFF72CFF2E +:10F2300004460028E6D0EBE72A4602A95046FFF72D +:10F2400033FF04460028E3D12A4649465046FFF7DB +:10F250001BFF04460028DBD149465046FFF7EAFE73 +:10F2600004460028D4D19DF804300133DBB2434575 +:10F270008DF80430B0D3CBE72DE9F8430668044697 +:10F280000F46154606B17679B5F5806F3BD8E36B2E +:10F2900063B904F10C09BDB92A4629462046FFF797 +:10F2A00086FF78B9E36A0133E3620BE0636B012BFD +:10F2B00003D0E26AA36B9A42EBDD2046F4F757F8DD +:10F2C0000028E6D0BDE8F883AE422046B04628BF0D +:10F2D000A846FFF79FFD0028F4D132464946204654 +:10F2E000FFF7D2FE0028EDD149462046FFF7A2FEE7 +:10F2F0000028E7D13846424649464744A5EB080571 +:10F3000009F016FDC7E76FF00200DBE700230122DA +:10F31000C0E90433C0E90023C0E90232C0E9062392 +:10F320000362704738B50024012501460470446229 +:10F33000C0E90154C0E90345C0E90544C0E90754E8 +:10F340002830FFF7E3FFC1E91354C1E91544C1E9CF +:10F350001744C1E91944C1E91B44C1E91D4438BD42 +:10F36000036B2BB1C36B002B0CBF02200120704735 +:10F37000184670470246436830B523B9486858B903 +:10F38000002B38D131E0906800EB830050F8040C7A +:10F390000028F3D1013BF0E78C6804EB800555F8B9 +:10F3A000045C25BB0138EAE78342096801D2484280 +:10F3B00022E01068002803DD002913DA01201BE099 +:10F3C00000290FDD70B14FF0FF3015E0916851F862 +:10F3D000235054F823108D420ED803F1FF3302D28C +:10F3E000404209E0013B591CF0D1002004E0002B11 +:10F3F000DAD08342D8D9106830BD1FB581EAE173F5 +:10F40000CDF80CD0A3EBE17300934B1C4FF001033C +:10F4100018BF01210293019101A9FFF7ABFF05B0CD +:10F420005DF804FBF8B5044608466368B2EB830F49 +:10F430004FEA83051CD9521B8E18002109F086FC67 +:10F440002A463046811800239A4213D10020F8BD85 +:10F4500003F0030123F0030CA768CE0057F80C104B +:10F46000F14011F0FF0F11D10133AB42F0D1E9E7C8 +:10F470001346FAE703F0030023F00306A7680133FD +:10F48000C500B859E84001F8010DDDE76FF007004D +:10F49000DDE70000422AF0B5064693B0084615465F +:10F4A00026D801A9FFF7BEFF0446C8B91149304666 +:10F4B000F3F716FF044698B906F10C0720223046F0 +:10F4C0003946FFF7F1FD044650B9202201213846A4 +:10F4D00009F03CFC2A4601A93046FFF768FE0446C5 +:10F4E0001DB1294601A8FFF7C5F8204613B0F0BDAD +:10F4F000014CF6E75CB1010800B3FFFF024640682B +:10F5000080B1431E926873B952F8231000204FF067 +:10F510000042114203D1013052082028F9D10133B1 +:10F52000C0EB4310704752F823100029ECD1013B87 +:10F53000E9E7000038B5144A0125144B0446C260BF +:10F5400043660823124A83634262124A4564426555 +:10F55000114AC0E90153C0E90753C0E91353C0E998 +:10F560000A530E4BC0E90F350D4BC0E90C258364DF +:10F570000430FFF7C3FFA06504F14C00FFF7BEFFA6 +:10F58000C4E91705002038BD9CB8010841FF0008F8 +:10F590001CB801087CB801083CB801085CB8010837 +:10F5A00014010024F8B504460E464D0901F01F076A +:10F5B000FFF7A4FF63683044B0EB431F05D81F2E4C +:10F5C0000FD8002F3BD100200AE010F01F0118BF18 +:10F5D000012101EB50112046FFF7C4FC0028EED0BA +:10F5E000F8BD63686FF003009A0068431946A942AA +:10F5F000A2F104020BD8AB424FF0000228BF2B4609 +:10F600009B00043B191DDCD0A168CA50F9E7A6682D +:10F61000013906EB020C5CF800C046F802C0E6E7D0 +:10F62000A06850F8251001FA07F3134321FA06F2F7 +:10F6300040F8253001356368AB42F1D8C3E70022BA +:10F64000C7F12006F7E74368B1EB431F3FBF4A0904 +:10F65000836801F01F0153F822003ABF20FA01F13C +:10F6600001F0010000207047F8B507460D46FFF78E +:10F6700077FE022806461DD100212846FFF7E3FF4A +:10F6800060BB01212846FFF7DEFF044630BB284659 +:10F69000FFF734FFFB6D013898421FD1FE2807D1D8 +:10F6A00031462846FFF7CFFF0D4B041E18BF1C46FE +:10F6B0002046F8BD01280FD101462846FFF79DFEE0 +:10F6C00000280BDB07F14C012846FFF753FE00280A +:10F6D000034CB8BF0024EBE7024CE9E7004CE7E736 +:10F6E00080B3FFFF80B0FFFF70B50E4601210446D6 +:10F6F000FFF738FC054648B962680146A0689200E9 +:10F7000009F024FBA3681E6001232360284670BD16 +:10F7100010B501210446FFF7E7FF60B9012104F1AC +:10F720000C00FFF7E1FF30B9014604F11800BDE815 +:10F730001040FFF7D9BF10BDF0B443684E0901F087 +:10F740001F04B34201D304D15CB30021F0BCFFF726 +:10F75000CBBF1F2927D804BB0020F0BC70478268AC +:10F760005759043542F8217001319A1B8A42F6D864 +:10F7700000219342EFD9856845F822100132F8E75D +:10F78000866856F8235025FA04F20A4305FA07F171 +:10F7900046F82320013BF3D2DEE70021C4F1200725 +:10F7A000F8E71F29D8D9B5000021DEE78842F8B56F +:10F7B00006460D46144601D10020F8BD4968FFF702 +:10F7C000D1FB0028F9D171682846FFF7CBFB002850 +:10F7D000F3D16242316822432C68C2F3C012C2F1F5 +:10F7E000010303FB01F7514304FB027434602C68EE +:10F7F00004FB0311296071688842DDD2D6F808C085 +:10F80000AF685CF8201057F8204003FB01FE51431D +:10F8100004FB02E44CF8204057F8204004FB03119D +:10F8200047F820100130E6E72DE9F0410D46496820 +:10F8300006461446FFF796FBB8B96242296833685A +:10F840002243D5F804E0D5F80880C2F3C012514332 +:10F85000C2F1010C03FB0C13B168336003469E45F3 +:10F8600005D16B6872689A420CD8BDE8F08158F8EF +:10F87000237051F82340574304FB0C7441F8234094 +:10F880000133ECE751F823200CFB02F241F823206E +:10F890000133E7E710B5044670B1806838B161689C +:10F8A000890001D0FEF7E6FEA06809F0E5F9002323 +:10F8B0000122A360C4E9002310BD10B50446FFF780 +:10F8C000E9FF04F10C00FFF7E5FF04F11800BDE8C3 +:10F8D0001040FFF7DFBF08B1FFF7EFBF704770B50B +:10F8E000044660B3036E012B12D00430FFF7D2FF41 +:10F8F00004F11000FFF7CEFF04F11C00FFF7CAFF70 +:10F9000004F12800FFF7E7FF04F14C00FFF7C2FF06 +:10F91000636F8BB920467C21BDE87040FEF7AABE1C +:10F9200006FB05000135FFF7D6FFD4E91D03AB4206 +:10F93000F6D809F0A1F9EDE700252426F5E770BD1A +:10F940002DE9F84311F0030699464368054618BFB0 +:10F9500001260F46904606EB9106B34208D10021DE +:10F960002846FFF7C1FE044688B12046BDE8F8836B +:10F97000FFF790FF0023012231462846AB60C5E91E +:10F980000023FFF7EFFA04460028E8D0EDE7C7EBC5 +:10F990008603A9683A4648461944C04704460028E9 +:10F9A000E3D13146A868FDF7FFFEDEE72DE9F0411F +:10F9B00012F0030643680446884618BF012617461E +:10F9C00006EB9206B34208D100212046FFF78CFED9 +:10F9D000054688B12846BDE8F081FFF75BFF0023AC +:10F9E000012231462046A360C4E90023FFF7BAFA9A +:10F9F00005460028E8D0EDE7B8F1000FEAD0A3688B +:10FA0000C7EB860041463A46184409F091F9314661 +:10FA1000A068FDF7C9FEDDE72DE9F84381460D46F4 +:10FA200090461E461BB94D4C2046BDE8F883043075 +:10FA3000FFF764FDC41D4846FFF792FC02284FEA19 +:10FA4000D40765D1BE42EED116F003016B6818BF32 +:10FA5000012101EB54149C424AD100212846FFF7B2 +:10FA600043FE04460028DFD1A968E20018F80430FC +:10FA700024F00300013402F01802A74203FA02F254 +:10FA80000B5843EA02030B50EFD805F10C00FFF7C7 +:10FA900001FF99F80030092B12D1FB006A68013B85 +:10FAA000B3EB421F0CD25809A968012203F01F03CF +:10FAB00002FA03F351F8202022EA030241F8202041 +:10FAC000012105F11800FFF70FFE04460028ABD115 +:10FAD0004846FFF745FC01288146A5D198F800303B +:10FAE000C3B9012E9FD12846BDE8F843FFF710BEE9 +:10FAF0002846FFF7CFFE0023012221462846AB60AF +:10FB0000C5E90023FFF72EFA04460028A5D08BE7AD +:10FB1000134CDDE7042B1FD17B000133B34282D1AC +:10FB20003A4608F101012846FFF740FF0446002845 +:10FB30007FF47AAF791C3A4605F10C004144FFF797 +:10FB400035FF044600287FF46FAF494605F11800E1 +:10FB5000BDE8F843FFF7C8BD014C65E780B0FFFF83 +:10FB600080B1FFFF884270B505460E4603D04C6851 +:10FB70003CB9FFF78FFE002011E0B36853F8243042 +:10FB800013B9013C002CF8D101346A683368A242F1 +:10FB90002B6005D221462846FFF7E4F940B170BD3D +:10FBA000121BA8680021920000EB840009F0CEF837 +:10FBB000A200B168A86809F0BBF8DCE738B50446D4 +:10FBC0000D46FFF7CFFF70B905F10C0104F10C00F1 +:10FBD000FFF7C8FF38B905F1180104F11800BDE8B6 +:10FBE0003840FFF7BFBF38BD2DE9F04F002389B083 +:10FBF000174688424FF001028146884607930493D6 +:10FC0000CDE90523CDE9022306D105A8FFF7AAFF18 +:10FC1000064690BB0DF11408B94506D1494602A825 +:10FC2000FFF7A0FF064640BB02AFD8F804A0BAF128 +:10FC3000000F2CD17C68ACBB0AEB04014846FFF7EF +:10FC400091F90646C8B901464846FFF74DFD0646FC +:10FC500098B96FF00F034FEA1A1B04F1FF3C03FB46 +:10FC60000BABABF108030193BCF1FF3F23D1D8F8F4 +:10FC700000203B685343C9F8003002A8FFF70AFE92 +:10FC800005A8FFF707FE304609B0BDE8F08FD8F8A9 +:10FC9000083003EB8A0353F8043C002BCAD10AF165 +:10FCA000FF3AC4E7BB6803EB840353F8043C002B22 +:10FCB000C2D1013CBFE7BA680024D9F8083052F835 +:10FCC0002CE05246D8F8085003EB8C030F2A48D892 +:10FCD000BBF1070F40F2B78055F8040B1968EEFB33 +:10FCE000601443F8041B55F8040B1968EEFB60140C +:10FCF00043F8041B55F8040B1968EEFB601443F835 +:10FD0000041B55F8040B1968EEFB601443F8041B40 +:10FD100055F8040B1968EEFB601443F8041B55F802 +:10FD2000040B1968EEFB601443F8041B55F8040B30 +:10FD30001968EEFB601443F8041B55F8040B1968AE +:10FD4000EEFB601443F8041B019A002A7DD11A6867 +:10FD5000141943F8044B4FF00104F8D20CF1FF3CA6 +:10FD600082E7103A55F8040B1968EEFB601443F86B +:10FD7000041B55F8040B1968EEFB601443F8041BD0 +:10FD800055F8040B1968EEFB601443F8041B55F892 +:10FD9000040B1968EEFB601443F8041B55F8040BC0 +:10FDA0001968EEFB601443F8041B55F8040B19683E +:10FDB000EEFB601443F8041B55F8040B1968EEFBC6 +:10FDC000601443F8041B55F8040B1968EEFB60142B +:10FDD00043F8041B55F8040B1968EEFB601443F854 +:10FDE000041B55F8040B1968EEFB601443F8041B60 +:10FDF00055F8040B1968EEFB601443F8041B55F822 +:10FE0000040B1968EEFB601443F8041B55F8040B4F +:10FE10001968EEFB601443F8041B55F8040B1968CD +:10FE2000EEFB601443F8041B55F8040B1968EEFB55 +:10FE3000601443F8041B55F8040B1968EEFB6014BA +:10FE400043F8041B42E75A467FE7013A55F8040B92 +:10FE50001968EEFB601443F8041B76E71FB5012315 +:10FE6000009201AACDF80CD0CDE90133FFF7BCFE1A +:10FE700005B05DF804FB2DE9FF4116460023012281 +:10FE80000546B0420F460393CDE9012306D1014652 +:10FE900001A8FFF767FE044620BB01AEBD421AD1A0 +:10FEA00001232B60D6E901371BBBAA680024161F6B +:10FEB0002046984225D1ACB14FF0FF306968994295 +:10FEC0003AD952F8231099B352F82310002401397B +:10FED00042F8231006E039462846FFF743FE044661 +:10FEE0000028DDD001A8FFF7D5FC204604B0BDE80E +:10FEF000F08107EB830252F8042C002AD5D1013B94 +:10FF0000D2E756F804EFAEEB0401316057F820C099 +:10FF100001306145A1EB0C012CBF4FF000084FF000 +:10FF200001083160A6452CBF444608F10104C0E732 +:10FF300042F823000133C1E7C6D16FF00904D1E7CD +:10FF400030B58FB0092301220021044605A88DF8A1 +:10FF500003100490CDE90223242208F0F7FE1021BB +:10FF60002046FEF7FFFF0546002840F02982A368DF +:10FF700001A81A68196A01920DF10302FDF79FF9B1 +:10FF8000A3680DF1030201A8596AFDF798F9A36867 +:10FF90000DF1030201A8D96AFDF786F9A3680DF1F6 +:10FFA000030201A8196BFDF77FF9A3680DF10302A5 +:10FFB00001A8596BFDF778F9A3680DF1030201A8B8 +:10FFC000996BFDF771F9019AA3681A600DF10302AC +:10FFD0009DF903105B6800298DF80350019380F2AE +:10FFE000F281494201A8FDF75FF9A3680DF1030210 +:10FFF00001A8596AFDF763F9A3680DF1030201A88E +:020000040801F1 +:10000000996AFDF75CF9A3680DF1030201A8196B69 +:10001000FDF74AF9A3680DF1030201A8596BFDF73A +:1000200043F9A3680DF1030201A8996BFDF73CF9B0 +:10003000A3680DF1030201A8D96BFDF735F9019A08 +:10004000A3689DF903105A600DF103029B680193A8 +:10005000002399428DF8033080F2B981494201A80A +:10006000FDF722F9A3680DF1030201A8996AFDF7D3 +:1000700026F9A3680DF1030201A8D96AFDF71FF95B +:10008000A3680DF1030201A8596BFDF70DF9A368F0 +:100090000DF1030201A8996BFDF706F9A3680DF1B4 +:1000A000030201A8D96BFDF7FFF8019AA3689DF937 +:1000B00003109A600DF10302DB680193002399425B +:1000C0008DF8033080F28781494201A8FDF7ECF8F2 +:1000D000A3680DF1030201A8D96AFDF7F0F8A3683F +:1000E0000DF1030201A8D96AFDF7E9F8A3680DF143 +:1000F000030201A8196BFDF7E2F8A3680DF10302F2 +:1001000001A8196BFDF7DBF8A3680DF1030201A844 +:10011000596BFDF7D4F8A3680DF1030201A8D96B60 +:10012000FDF7C2F8A3680DF1030201A8196AFDF7F3 +:10013000BBF8A3680DF1030201A8596AFDF7B4F8F2 +:10014000019AA3689DF90310DA600DF103021B699F +:100150000193002399428DF8033080F24081494297 +:1001600001A8FDF7A1F8A3680DF1030201A8196B1E +:10017000FDF7A5F8A3680DF1030201A8196BFDF7BF +:100180009EF8A3680DF1030201A8596BFDF797F8DB +:10019000A3680DF1030201A8596BFDF790F8A3685D +:1001A0000DF1030201A8996BFDF789F8A3680DF121 +:1001B000030201A8596AFDF777F8A3680DF103025D +:1001C00001A8996AFDF770F8019AA3689DF90310D8 +:1001D0001A610DF103025B690193002399428DF8C6 +:1001E000033080F20081494201A8FDF75DF8A36861 +:1001F0000DF1030201A8596BFDF761F8A3680DF139 +:10020000030201A8596BFDF75AF8A3680DF1030228 +:1002100001A8996BFDF753F8A3680DF1030201A83B +:10022000996BFDF74CF8A3680DF1030201A8D96B97 +:10023000FDF745F8A3680DF1030201A8996AFDF7DF +:1002400033F8A3680DF1030201A8D96AFDF72CF871 +:10025000019AA3689DF903105A610DF103029B698D +:100260000193002399428DF8033080F2C080494207 +:1002700001A8FDF719F8A3680DF1030201A8996B15 +:10028000FDF71DF8A3680DF1030201A8996BFDF7B6 +:1002900016F8A3680DF1030201A8D96BFDF70FF85A +:1002A000A3680DF1030201A8D96BFDF708F8A36854 +:1002B0000DF1030201A8996BFDF701F8A3680DF198 +:1002C000030201A8596BFCF7FAFFA3680DF10302C2 +:1002D00001A8196AFCF7E8FFA3680DF1030201A861 +:1002E000596AFCF7E1FF019AA3689DF903109A612E +:1002F0000DF10302DB690193002399428DF803306D +:1003000079DA494201A8FCF7CFFFA3680DF1030297 +:1003100001A8D96BFCF7D3FFA3680DF1030201A874 +:10032000D96BFCF7CCFFA3680DF1030201A8D96BD0 +:10033000FCF7C5FFA3680DF1030201A8196AFCF7D9 +:10034000BEFFA3680DF1030201A8996AFCF7ACFF98 +:10035000A3680DF1030201A8D96AFCF7A5FFA36801 +:100360000DF1030201A8196BFCF79EFFA3680DF1C4 +:10037000030201A8596BFCF797FF019BA1689DF947 +:100380000320CB6122EAE2730B620023019308236E +:1003900001336068984232D8002A11DA039B524236 +:1003A0000499204603F18043013B41F82320224673 +:1003B00002A9FFF760FD054610B94FF0FF33236037 +:1003C00028460FB030BD01A8FCF779FF0DE601A863 +:1003D000FCF775FF46E601A8FCF771FF78E601A877 +:1003E000FCF76DFFBFE601A8FCF769FFFFE601A877 +:1003F000FCF765FF3FE701A8FCF761FF85E701987F +:1004000041F82300C4E738B50C46051D29462046AF +:10041000FEF7B0FF002801DA002006E02A46214658 +:100420002046FFF728FD0028F0D038BD90422DE986 +:10043000F04107460D46164602D0884229D135467E +:1004400001236E683B6066BB31463846FEF78AFD85 +:10045000044618BBA9680546BB6886422AD103EB4F +:100460008603DDB17A6806F10108B24208D8414638 +:100470003846FEF777FD00282FD1BB6803EB8603D3 +:100480001A684646551943F8045B2CBF0125002520 +:10049000E7E7FFF767FB04460028D0D02046BDE819 +:1004A000F081AB6803EB860353F8043C002BCBD1FF +:1004B000013EC8E753F8202012EB050C51F820202C +:1004C0002CBF012500251CEB020243F820202CBF85 +:1004D0000122002201301544BFE70446DEE7F8B5EB +:1004E0000D68044613680F4616466B43002B16DD55 +:1004F00011463846FCF7EEFE002806DB3246394648 +:100500002046FFF7B8FC40B1F8BD3A4631462046D8 +:10051000FFF7B1FC0028F7D16D422560F4E7FFF743 +:1005200085FFF0E77FB5002301F10C051646012297 +:10053000011D01A80393CDE901232A46FFF7CFFF50 +:10054000044668B901462846FEF757FF01A900286E +:100550000CBF002206F001022846FFF765F90446A9 +:1005600001A8FFF797F9204604B070BD2DE9F74FB9 +:100570009DF8308006460D461F46C8F3450902F136 +:100580000C044FF0000B01F10C0ABB4508D14FEAF7 +:10059000D8122946304603B0BDE8F04FFFF7C2BF7E +:1005A0005FFA8BF2A4F10C012846A2EB09035A4230 +:1005B0005A410192FFF738F948B92146019A50464D +:1005C0000BF1010B2434FFF72FF90028DDD003B025 +:1005D000BDE8F08FF8B50D68044613680F4616465F +:1005E0006B4316D511463846FCF774FE002806DB2F +:1005F000324639462046FFF73EFC40B1F8BD3A4648 +:1006000031462046FFF737FC0028F7D16D422560C0 +:10061000F4E7FFF70BFFF0E738B50C460546114647 +:100620001A462046FFF7D6FF28B921462846BDE8DE +:100630003840FFF7E8BE38BD70B50C460646114697 +:100640001A462046FFF74BFF054680B9043623685B +:10065000002B0CDA00212046FEF7CFFE30B13246E7 +:1006600021462046FFF7B6FF0028F0D00546284671 +:1006700070BD2DE9F04F06469BB08946104600211B +:100680009046FEF7BAFE0028C0F29B8105D16FF0BC +:100690000B0420461BB0BDE8F08F00230125414626 +:1006A00048461495CDE90853CDE90A35CDE90C3318 +:1006B000CDE90E53CDE91035CDE91233032315935F +:1006C00017AB1693FCF706FE002817DA36B1494639 +:1006D0003046FFF747FA0446002846D1002130464D +:1006E000FEF78BFE0028C0F25B8141463046FEF7E4 +:1006F00041FE002880F25B810024CAE7494608A831 +:10070000FFF730FA044680BB41460BA8FFF72AFAF0 +:10071000044650BBD9F804100EA80B950231089579 +:10072000FEF720FC044600BB01460EA8FEF7DCFFE6 +:100730000446D0B9022111A8FEF714FC0446A0B962 +:100740000BA8FEF7DBFE00F01F001F2820D0C0F131 +:100750001F0708A83946FEF725FF044628B9394681 +:100760000BA8FEF71FFF044698B108A8FFF792F800 +:100770000BA8FFF78FF80EA8FFF78CF811A8FFF76A +:1007800089F80C2117A8FDF775FF002CA6D080E78B +:100790002746099D0BA8DDF830B0A5EB0B034FEA07 +:1007A000431A01935146FEF7FDFE04460028DCD1B2 +:1007B000019B9B000BA908A80193FEF7DBFD002815 +:1007C000019B36DA51460BA8FEF7B6FF0446002817 +:1007D000CBD10BF1FF3305F1FF3A05F180450193D1 +:1007E0009B00013D03930BF18043A5EB0B05023BFE +:1007F000AD009B000793019B534529D3002EB4D035 +:10080000394608A8FEF798FF88B9D9F8003008A93A +:1008100030460893FFF7A6F90146002840F0BE8055 +:100820003046FEF7EAFD00289FD1012333600446DD +:100830009BE710990193CA580132CA5008A90BAA24 +:100840000846FFF74CFE019B04460028B2D08CE717 +:10085000DDF828B04FEA8A03039A04930BEB8A036E +:100860005BF82A1006930D9B9A58049B9142A3F1C2 +:1008700004030593109B03EB0500029075D34FF022 +:10088000FF325A51BAF1010F029A16BF069B00239C +:1008900053F8083C1793059B5BF803301893049BAF +:1008A0005BF803301993029B1B6801331360109AA5 +:1008B000002111A85359013B5351FEF715FF0028A1 +:1008C000B5D1019B0D9A002B66D0079BD158139B85 +:1008D00019600399525811A95A600846109B5A5939 +:1008E000FFF7BCFA0028A2D114A911A8FEF742FD17 +:1008F0000028DCDC109B0BA911A85A59FFF7AEFAAF +:10090000002894D14FEAC50B11A85946FEF74AFEBC +:1009100000288CD108A911AA0846FFF7E0FD01467E +:1009200000283BD108A8FEF768FD002819DA0BA9BA +:1009300011A8FFF717F900287FF479AF594611A8DD +:10094000FEF730FE00287FF472AF08A911AA08460E +:10095000FFF740FE00287FF46AAF109A5359013B1D +:1009600053510AF1FF3A043D45E7059B5BF803004C +:100970007AB100230AF0C6F80B46002102464FF078 +:10098000FF30994208BF904200D20246029B1A6093 +:1009900078E74FF0FF32F9E7019998E70C46E4E673 +:1009A000424631463046FFF715FE0446EDE6424624 +:1009B00031463046FFF793FD044600283FF495AEDC +:1009C00067E66FF0090464E6F8B50C460646114682 +:1009D0001A462046FFF708F9054650BB776E37B92F +:1009E000321D21462046BDE8F840FFF742BE23688D +:1009F000002B04DA01462046FEF7FFFC60BB2046D0 +:100A0000FEF77CFDB36DB0EB430F25D82046B84709 +:100A1000054670B904362368002B04DA002120460D +:100A2000FEF7EBFC38B931462046FEF7A3FC002860 +:100A30000ADA2846F8BD324621462046FFF7CAFDAD +:100A40000028E8D00546F4E7324621462046FFF765 +:100A500012FA0028E7D0F5E7004DEAE780B0FFFF83 +:100A60002DE9F0430E468BB00546012106F1180032 +:100A7000FEF7C3FC0446002840F099802846FEF7A4 +:100A80006FFC022807460FD13046FEF737FDEB6DAD +:100A900007300733C008B0EBD30F474B88BF1C4665 +:100AA00020460BB0BDE8F083012840F0828021464B +:100AB0003046FEF7A2FC002879DB06F10C0921463E +:100AC0004846FEF79AFC002871DB05F10408304621 +:100AD0004146FEF74FFC002869DA41464846FEF7DA +:100AE00049FC002863DA4B464A4601A92846CDE96D +:100AF0000174CDE90347CDE90544FFF765FF0446DE +:100B000000284DD13346324604A92846FFF75CFF42 +:100B10000446002844D1AB69002B37D1032304A934 +:100B200007AACDF824D0009301230846CDE9073366 +:100B3000FFF7D5FC0446002832D1049B002B19DBBB +:100B400004AA334628461146FFF73EFF044638BB49 +:100B500004AA05F11C0328461146FFF75DFD044673 +:100B6000F0B904A901A8FEF705FC134B041E18BF39 +:100B70001C4615E0002104A8FEF73FFC0028DFD04A +:100B800004A942460846FFF725FDD3E704AA05F16C +:100B9000100328461146FFF73FFD04460028CFD03A +:100BA00001A8FEF777FE04A8FEF774FE78E7024C72 +:100BB00076E7024C74E700BF80B3FFFF80B0FFFF11 +:100BC0002DE9F04F876D85B091469A46073700238F +:100BD000012206460D46FF084FF00C0800F1040BF9 +:100BE0000393CDE9012353464A46394601A8FEF74F +:100BF000A7FE0446F0B9594601A8FEF7BBFB002842 +:100C00001FDAB8F1010821D0012101A8FEF7F5FB98 +:100C10000028E8DD01AB2A4629463046FFF7D4FE1E +:100C2000044638B905F1180201AB30461146FFF70A +:100C3000CBFE044601A8FEF72DFE204605B0BDE818 +:100C4000F08F012101A8FEF777FDD2E7004CF1E714 +:100C500000B3FFFF2DE9F04F876D87B091469A46AC +:100C600007370023012205460E46FF084FF00C0807 +:100C700000F1040B05930293CDE90323CDE9002392 +:100C800053464A46394603A8FEF75AFE0446B8BB07 +:100C9000594603A8FEF76EFB00283BDAB8F10108BD +:100CA0003DD0012103A8FEF7A8FB0028E8DD06F1EE +:100CB000180203AB28461146FFF786FE0446F8B932 +:100CC00003AB694628461A46FFF77EFE0446B8B9CC +:100CD0006B46324631462846FFF776FE044678B921 +:100CE00003AB6A4669462846FFF76EFE044638B9EC +:100CF00006F10C026B4628461146FFF765FE0446D6 +:100D000003A8FEF7C7FD6846FEF7C4FD204607B0FE +:100D1000BDE8F08F012103A8FEF70EFDB6E7014CF8 +:100D2000EEE700BF00B3FFFF2DE9F04100238CB0D8 +:100D30000D4601210B93064608931746059302932F +:100D4000CDE90913CDE90613CDE90313CDE900136D +:100D50008369002B40F0DD8002F1180306A91A46D2 +:100D6000FFF732FE0446002840F0C38006AB3A4647 +:100D700003A93046FFF750FC0446002840F0B98034 +:100D800006AB3A4669463046FFF756FC0446002853 +:100D900040F0AF806B4603AA06A93046FFF714FE69 +:100DA0000446002840F0A580032206A909A8FFF701 +:100DB00055F80446002840F09C8006F1040841469E +:100DC00009A8FEF7D7FA002880F28A8007F10C08FC +:100DD00003A9304643464246FFF7F6FD0446002885 +:100DE00040F0878003A93046F2F76AFA04460028EB +:100DF0007FD103AB3A4606A93046FFF7E5FD04462E +:100E0000002876D106A93046F2F75AFA044600289F +:100E10006FD103AB694630461A46FFF7D5FD04464D +:100E2000002866D169463046F2F74AFA044600289F +:100E30005FD109AB03A930461A46FFF7C5FD04464A +:100E4000002856D103AA06AB30461146FFF7F4FB43 +:100E5000044600284DD103AA06AB30461146FFF7E1 +:100E6000EBFB0446002844D106AA03AB30461146EA +:100E7000FFF7E2FB044600283BD106AA09AB304647 +:100E80001146FFF7A1FD044698BB06AA6B46304603 +:100E90001146FFF7D1FB044658BB07F11803424641 +:100EA00069463046FFF790FD044610BB6946304660 +:100EB000F2F706FA0446E0B903A92846FEF752FE07 +:100EC0000446B0B906A905F10C00FEF74BFE044636 +:100ED00078B9694605F11800FEF744FE044608E0BB +:100EE00009A942460846FEF7C6FF044600283FF41B +:100EF00066AF09A8FEF7CEFC06A8FEF7CBFC03A858 +:100F0000FEF7C8FC6846FEF7C5FC20460CB0BDE8FD +:100F1000F081134606A9FFF757FD04460028E8D1E3 +:100F2000032206A909A8FEF799FF04460028E0D18C +:100F300006F10408414609A8FEF71CFA00282FDA3A +:100F400006F1100800214046FEF757FA00283FF44A +:100F50003DAF07F1180306A930461A46FFF734FDE6 +:100F600004460028C5D106AB03A930461A46FFF750 +:100F70002BFD04460028BCD1434603AA06A93046EF +:100F8000FFF722FD04460028B3D109AA06AB30467C +:100F90001146FFF741FB044600283FF417AFA8E7CE +:100FA00009A942460846FEF766FF04460028C1D05C +:100FB0009FE700002DE9F04302F1180997B00646BB +:100FC0000D464846002190461F46FEF716FA40B9E6 +:100FD00039462846FEF7F2FD0446204617B0BDE824 +:100FE000F0833B6A7BB107F1180400212046FEF72D +:100FF00004FA08B94146ECE701212046FEF7FDF965 +:10100000002840F0FF800023012213A930461593E9 +:1010100012930F930C93099306930393CDE9132333 +:10102000CDE91023CDE90D23CDE90A23CDE907232E +:10103000CDE90423CDE901234B464A46FFF7C4FC22 +:10104000044600283AD14B4613AA10A93046FFF7B0 +:10105000BBFC044690BB13AA3B4630461146FFF743 +:10106000B3FC044650BB10AA07F10C0330461146EE +:10107000FFF7AAFC044608BB13AA434630461146B4 +:10108000FFF7DAFA0446C8B910AA08F10C0730468F +:101090003B461146FFF7D0FA044678B9014613A83B +:1010A000FEF7ABF920BB214610A8FEF7A6F9D8B988 +:1010B000424629463046FFF737FE044613A8FEF79E +:1010C000E9FB10A8FEF7E6FB0DA8FEF7E3FB0AA874 +:1010D000FEF7E0FB07A8FEF7DDFB04A8FEF7DAFB4E +:1010E00001A8FEF7D7FB78E72846FEF711FBE4E7F7 +:1010F00013AB4A4601A93046FFF766FC04460028B8 +:10110000DCD113AB0DA930461A46FFF75DFC04464F +:101110000028D3D113AB0DAA0AA93046FFF754FC1F +:1011200004460028CAD10DAA434630461146FFF7AF +:101130004BFC04460028C1D10DA913A8FEF712FDEF +:1011400004460028BAD113A93046F2F7B9F804468C +:101150000028B3D110AB07A930461A46FFF734FC7C +:1011600004460028AAD107AA13AB30461146FFF760 +:1011700063FA04460028A1D107AA0AAB30461146FB +:10118000FFF75AFA0446002898D10DAA07AB30465B +:101190001146FFF751FA044600288FD10DAA10AB73 +:1011A00030461146FFF710FC0446002886D10AAAF3 +:1011B0003B4630461146FFF707FC044600287FF403 +:1011C0007DAF0AAB0DAA04A93046FFF735FA0446F5 +:1011D00000287FF473AF07A92846FEF7C3FC044636 +:1011E00000287FF46BAF04A905F10C00FEF7BAFCF0 +:1011F000044600287FF462AF01A905F11800FEF74C +:10120000B1FC5AE7004CE8E680B0FFFF2DE9F0435F +:101210000646A3B00F46104601211546FEF7EDF82D +:10122000002840F3C48100234FF0010939461CA86F +:101230001893159312930F931B930C930993069392 +:101240000393CDE91693CDE91393CDE91093CDE93E +:101250000D93CDE91993CDE90A93CDE90793CDE933 +:101260000493CDE90193CDE91C93CDE91E39CDE975 +:101270002033FEF777FC044600285AD129461FA8E0 +:10128000FEF770FC0446002853D11CA8FCF755F863 +:1012900080461FA8FCF751F8804528BF80461CA84F +:1012A0004146FEF749FA0446002842D141461FA8AC +:1012B000FEF742FA044600283BD1CDF87C90CDF8E9 +:1012C000709000211CA8FEF798F858B941461FA855 +:1012D000FEF768F9044660BB1FA919A8FEF742FC97 +:1012E000044626E01CA8FCF728F801461CA8FEF7D7 +:1012F00023FA0446E8B91FA8FCF71FF801461FA807 +:10130000FEF71AFA0446A0B91FA91CA8FEF732F886 +:101310000028C0F29C801CA91FAA0846FEF7ABFD5E +:10132000044630B901211CA8FEF706FA044600283D +:10133000C7D01CA8FEF7AEFA1FA8FEF7ABFA002C28 +:1013400040F0A680012119A8FEF757F8002840F0C8 +:101350002B812A46394616A8FFF78BF90446002848 +:1013600040F0968016A913A8FEF7FCFB044600285F +:1013700040F08E8029460AA8FEF7F4FB04460028B8 +:1013800040F08680294607A8FEF7ECFB04460028BB +:101390007ED1012110A8FEF7A7F90446002877D1D5 +:1013A00001460DA8FEF7A0F90446002870D10146B9 +:1013B00004A8FEF799F90446002869D1012101A883 +:1013C000FEF792F90446002862D1159B1B68D807E6 +:1013D00049D5099B1B68DB0740F18F8007A913A83B +:1013E000FDF7C8FF0028C0F2B88013A907AA084675 +:1013F000FFF775F8044600284AD110A904AA084648 +:10140000FFF76DF80446002842D101AA0DA908464D +:10141000FFF765F8044600283AD1002113A8FDF72C +:10142000ECFF0028D1D1002104A8FDF7E6FF002839 +:10143000C0F2A680294604A8FDF79CFF002880F290 +:10144000A98004A93046FEF78DFB044620E01FA9C1 +:101450001CAA0846FEF70FFD044600287FF469AF7A +:1014600001211FA860E7012113A8FEF765F90446D2 +:1014700070B9129B1B68DF0729D40F9B1B68DC0720 +:1014800025D4012110A8FEF757F9044600282FD0D3 +:1014900016A8FEF7FFF913A8FEF7FCF910A8FEF74F +:1014A000F9F90DA8FEF7F6F919A8FEF7F3F90AA85D +:1014B000FEF7F0F907A8FEF7EDF904A8FEF7EAF940 +:1014C00001A8FEF7E7F9204623B0BDE8F08310A994 +:1014D0000AAA0846FFF77EF804460028D8D10DA9CD +:1014E00016AA0846FEF7FBFF04460028C9D0CFE73E +:1014F00001210DA8FEF720F964E7012107A8FEF7F6 +:101500001BF904460028C3D1069B1B68D90713D4D6 +:10151000039B1B68DA070FD4012104A8FEF70CF91E +:1015200004460028B4D1012101A8FEF705F90446BC +:1015300000283FF44EAFABE704A90AAA0846FFF71C +:1015400049F804460028A3D101A916AA0846FEF7C7 +:10155000C6FF04460028DFD09AE707A913AA084669 +:10156000FEF7BDFF0446002892D104A910AA084640 +:10157000FEF7B5FF044600288AD10DAA01A946E767 +:1015800004A92A460846FFF725F8044600283FF438 +:101590004AAF7DE704A92A460846FEF7A0FF0446A5 +:1015A00000283FF447AF73E76FF00D0470E76FF06A +:1015B000030488E72DE9F04101F1180588B00746DA +:1015C000884628460021FDF718FF044600283BD036 +:1015D000002301263A1D294605A807930493CDE967 +:1015E0000563CDE90263FFF711FE044630BB05AB8E +:1015F00002A938461A46FFF7E7F90446F0B902ABEC +:10160000424641463846FFF7DFF90446B0B908F1D3 +:101610000C0202AB384611460192FFF7D5F9044699 +:1016200060B9019A05AB38461146FFF7CDF904467B +:1016300020B931462846FEF757F8044605A8FEF7BC +:1016400029F902A8FEF726F9204608B0BDE8F08186 +:10165000012A2DE9F04F06468DB00C46154607D8F5 +:101660000968FFF7A7FF824650460DB0BDE8F08F2E +:101670000C21104608F00EFE0746002800F0B78047 +:101680004FF00C0881460246012108FB05F800EBEB +:1016900008030093002393600098C2E900130C3202 +:1016A0009042F8D138460B9308930593CDE909137E +:1016B000CDE90613CDE9031321681831FEF752FA7C +:1016C000824690BB04F1040B07F10C0104EB850486 +:1016D0005BF8043BA1F10C02304601911833FFF78F +:1016E00073F9824608BB01995C4501F10C01EFD109 +:1016F000A8F10C01321D09A83944FFF787FD824685 +:1017000098B9013D4FF00C08A7F10C0B15BB09A9C6 +:1017100006A8FEF727FA824638B906AB03A9304679 +:101720001A46FFF751F9824638B309A8FEF7B2F816 +:1017300006A8FEF7AFF803A8FEF7ACF8484609F193 +:101740000C09FEF7A7F8009B4B45F7D1384607F088 +:1017500093FA89E708FB05B309AA06A93046FFF703 +:1017600033F982460028E0D154F8043C09AA3046F7 +:1017700018331146FFF728F9CDE754F8042C03ABD2 +:1017800030461146FFF720F982460028CDD154F8A3 +:10179000042C03AB30460C321146FFF715F9824694 +:1017A0000028C2D154F8042C06AB30460C32114646 +:1017B000FFF70AF982460028B7D1B16854F8040C43 +:1017C000FDF7FCFB82460028AFD154F8040CB16849 +:1017D0000C30FDF7F3FB82460028A6D154F8040D27 +:1017E0001830FEF757F8002D9FD0013D8EE7DFF847 +:1017F00004A039E780B2FFFF70B404680E1B002E0E +:1018000007DD26789E4208D10134046070BCFBF7E6 +:10181000AEBD6FF05F0070BC70476FF06100FAE71B +:101820002DE9F74390461F4601AA30230546894615 +:10183000FFF7E2FF0446F8B92E68A9EB0609B9F1F3 +:10184000000F35DD01994246337828460E4442F8B0 +:10185000043B06233146FFF7CFFF044660B92A68F0 +:10186000D8F80410C8F808205318B3422B6007D1E9 +:101870000C213846FCF7FEFE204603B0BDE8F0839D +:10188000515C01333A46284642F8041B31462B602E +:10189000FBF76DFD04460028EED12B687A68BB602B +:1018A0001344B3422B600CBF04466FF06504E3E7BA +:1018B0006FF05F04E0E737B50223154601AA04463E +:1018C000FFF79AFF40B9019A28462168FEF76EF8A3 +:1018D0002368019A1344236003B030BD2DE9F04F13 +:1018E00097B002931368209C0F2B0193CDE90A0255 +:1018F00000F2F181219BB54D0B44B54EB54F0C93D1 +:10190000219B0C9A934207D10B9B00201A46019B06 +:10191000136017B0BDE8F08F019B83B1019B219943 +:10192000E35C11F8012B5340229A219102F8013B0C +:10193000019B2292013303F00F030193E0E70A9B1E +:10194000DFF898C25A68029B19680E9113684B40E1 +:101950000E93029B59680F9153684B400F93029B63 +:101960009968109193684B401093029BD96802F1DB +:101970001003303211910D9352F8243C4B401193D7 +:101980000A9B1B685B100493013B05930393203271 +:10199000DDE90E9ADDE910835FFA89F0190E55F83A +:1019A00020005FFA83FE56F821105FFA88FB55F895 +:1019B0002EE04840CAF3072155F82BB057F8211004 +:1019C0004840C8F307415CF82110484052F8401CD9 +:1019D0004140C8B20690080E0790C1F30740089036 +:1019E000C1F3072009904FEA1860C8F3072856F89A +:1019F00020008EEA000EC9F3072057F820008EEA77 +:101A0000000ECAF307405CF820008EEA000E4FEA91 +:101A10001A605FFA8AFA56F8200055F82AA08BEA75 +:101A20000000C3F3072BC3F3074357F82BB05CF850 +:101A3000233080EA0B00C9F3074B4FEA19695CF8C1 +:101A40002BB056F8299080EA0B008AEA090A57F869 +:101A500028908AEA090A8AEA030A039B002B00F30A +:101A6000BF80059B12914FEA431C049B002B0D9BEA +:101A7000D8BF4FF0000C63445A689C468AEA020AB9 +:101A8000CDF84CA09968414053481491DA688EEA29 +:101A9000020E4FEA1E62CDF854E010F80290069A4A +:101AA00010F802801A6988EA020282EA0968CAF319 +:101AB0000722825C88EA0228C1F30742825C88EA36 +:101AC0000248079A10F802B05A69CDF8388082EAC5 +:101AD0000B6B5FFA8AF2825C8BEA020BC1F307227E +:101AE000825C8BEA022BCEF30742825C8BEA024BCC +:101AF000089A10F802909A69099B82EA0942CDF887 +:101B00003CB05FFA81F9090E10F8099082EA0902E7 +:101B10004FEA1A6910F8099082EA0962CEF30729A0 +:101B20005FFA8EFE10F8099082EA0922109210F8EE +:101B30000390CAF30743DCF81CC0C35C8CEA092994 +:101B400010F80EC089EA0C0910F801C04FEA1821FC +:101B5000227289EA0C6984F8008061704FEA1841AA +:101B600089EA034384F804B0A1704FEA1B214FEACD +:101B70001369237361714FEA1B414FEA18680EA87D +:101B8000A171110A4FEA1B6B84F803806172110C7A +:101B9000120E84F807B0A1722021E2721A0A84F8AA +:101BA0000F9062731A0C1193A273FCF763FD029BF2 +:101BB00003F1100212F8013D0133DBB21370002B68 +:101BC0007FF4ACAE029B9A42F4D1A7E6041502243E +:101BD00004210224041902243C040024041D0224CC +:101BE000129152F83C3C8AEA0309069BCDF84C90CE +:101BF00052F8381C4140149152F8340C8EEA00001F +:101C000055F823E015904FEA106852F8303C56F82A +:101C1000288083EA0E0E079B8EEA080EC9F3072878 +:101C200057F828808EEA080EC1F307485CF8288030 +:101C30008EEA080E5FFA89F8CDF838E056F823E00E +:101C400052F82C3C55F8288083EA0E0E089B8EEA49 +:101C5000080EC1F3072857F828808EEA080EC0F353 +:101C600007485CF828808EEA080E5CF82380CDF8DF +:101C70003CE05FFA81FE52F8283C090E55F82EE050 +:101C80008EEA080E4FEA19688EEA030E56F828808D +:101C9000099B8EEA080EC0F30728C0B257F82880C7 +:101CA0008EEA080ECDF840E055F820E057F8230002 +:101CB000C9F307438EEA000E52F8240C56F821109F +:101CC0008EEA000048405CF82310039B4840013B2B +:101CD000119003935BE66FF020001AE6F0B5ADF6C5 +:101CE000040D012300220DF58060054613F08001EC +:101CF0004DF8232040F8043B02F1010218BF1B21DC +:101D000083EA4303B2F5807F83EA0103DBB2EDD1BE +:101D100036480123002213F0800102F1010240F84D +:101D2000043B18BF1B210A2A81EA4303DBB2F2D12C +:101D300063232F4C2F4801212370002380F8633048 +:101D40005DF82130C3F1FF0355F823E04FEAEE12AE +:101D500042EA4E025FFA82FCC2F3C01242EA4C022F +:101D6000D7B2C2F3C01242EA4702D6B2C2F3C012DF +:101D700042EA4602D3B283EA0E0383EA0C037B40B5 +:101D8000734083F063036354C1540131B1F5807F24 +:101D9000D6D1DFF85CC0184F184E194D194C1CF8FD +:101DA000012B12F0800F4FEA024314BF1B200020CA +:101DB00043EA0223013980EA4200C0B282EA00020B +:101DC00083EA000343EA02634FEA336247F8043BC5 +:101DD00046F8042B4FEA33424FEA332345F8042BED +:101DE00044F8043BDBD10DF6040DF0BD3C050024A6 +:101DF0003C040024042502240415022404190224AE +:101E0000041D02240421022410B5FCF709FB012360 +:101E100080F83F30836B1BB1064B4FF080625A60F5 +:101E2000D0E90A23BDE8104012F57A7243F10003AD +:101E3000FBF70BBE00ED00E008B5EFF3058353B1EF +:101E4000124B1B689869FCF799FA4FF47A720023D9 +:101E500008F0A4FC08BDFBF737FDEFF305836BB179 +:101E60000B4BD8680B4B1A681860824281BF0A4935 +:101E70000A6801320A60FBF713FDEBE702F0FCFD94 +:101E80000028EDD1DFF814C000DFEBE7282702249B +:101E9000180100243427022430270224AD3701081A +:101EA0002DE9F04F85B0EFF30583002B42D00020E1 +:101EB000DFF848A1DAF80040FBF706FDD4E90C8909 +:101EC000FBF7EEFCA36BB8EB030869EBE37918EBC7 +:101ED000000449F10005FCF7A3FA4FF47A73A4FB60 +:101EE000036703FB05770020FBF78CFA002855D128 +:101EF000DAF8003093F83D30002B4FD16FF00043FB +:101F00004FF0FF329D4208BF9442ECD0DAF800B0A7 +:101F10009BF83C30002BE6D1594602A8FCF73DFA6D +:101F2000DDE90223AB4208BFA2420BD301238BF8A9 +:101F30003D30D8E702F0A0FD0028B8D1DFF8C0C0DE +:101F400000DFB5E7FBF7C0FCDBE90C01FBF7A8FC01 +:101F5000231A4FF00100009365EB01039BF840103A +:101F60000193ABF83C00DBE9082316EB020C47EBCE +:101F7000030339B9DBF81820116891F8201069BB08 +:101F80008BF840004FF000029BF840008BF83E2099 +:101F900010B901208BF8400062462BE0DAF80040CF +:101FA0002046FCF7C0FA002394F84020A3870AB12A +:101FB00084F84030DAF8001002A8FCF7EEF9029C31 +:101FC000EFF305833BB902F057FD20B9A4EB0800FD +:101FD000DFF830C000DF05B0BDE8F08FDDE90012AA +:101FE000002A08BF0529CDD3BCF57A628BF83E00E4 +:101FF00043F1FF335846FBF728FD74E728270224F6 +:1020000075400108093C01082DE9F3470546002603 +:10201000674FFFF711FF85F82460FBF755FC6B68ED +:1020200001A91B1A002B2B68D8BF686001931BB154 +:102030005A69121A002A3BDD2B6003B11D610E6044 +:10204000019911B12B8901332B81FBF729FC01A8E0 +:10205000002931D1019C05F118094FF0010A002C2B +:1020600037D1FFF7E9FEFBF72FFC2B68002B7ED062 +:102070005C69241A24EAE474FBF712FCD5F830807A +:10208000EFF30583002B75D0B8F1000F7DD1AB7A4B +:10209000002B00F08A80FBF717FCAB7A002B00F0D6 +:1020A00082800023AB7202B0BDE8F047FBF7F8BBBB +:1020B00003F108019B68BAE78C680B4600229A601E +:1020C0001A46DB68002BFAD1026001F108002146B4 +:1020D000BEE7236AD4F8088013B104F124009847BE +:1020E000A269002A0BDB636913446361FFF7A4FE56 +:1020F000214602462846FCF7CFF94446AFE7EB6895 +:1021000073B1A3420CD82B6AA34209D3A3792A69DD +:102110000133DBB213FA02F214BFA37184F806A0F4 +:10212000E36913B104F124009847EB6823B1A3429B +:1021300002D82B6AA34201D2A671DEE7FBF7C4FBEB +:102140004846AB6983B119682268914208D30BD124 +:10215000E36003689B68A3600460FBF7A1FBCCE726 +:1021600003F108009B68EDE7E6600368F3E74FF0D2 +:10217000FF3481E702F080FC0246002884D140460B +:1021800001212346BC4600DF81E798F80030F32B9D +:102190007FF47DAF002C7FF47AAF224601214046C8 +:1021A00003F0E4F873E7FBF77BFBFFF745FE34E74A +:1021B000A953010838B50546046854B9FBF762F91C +:1021C0002C6824B92C1D2046F9F754F82C60FBF735 +:1021D00051F9204638BD00002DE9F0418846002520 +:1021E00004462349C0E90055404608F006FA8044F9 +:1021F000C4F8008023681A782F2A1CD10133236089 +:102200001C48FFF7D7FFF8F741FE1B4B1E68D6B1FD +:10221000B768B7B1384607F08DFB854211D12A4621 +:102220004146384608F0ECF858B91248FFF7C2FFAB +:10223000F8F70CFE17E0002AE2D0013301352360E5 +:10224000D8E77668E3E7072DEFD12A4641460B48E9 +:1022500008F0D6F80028E8D10648FFF7ABFFF8F7FA +:10226000F5FD074B1E6820466660BDE8F08100BFA3 +:10227000B7AB0108D8060024D4060024BAB201087E +:10228000D82602242DE9FF478A463F49054607F034 +:102290003FFB044628B9FBF7F5FC204604B0BDE837 +:1022A000F0873A49284607F033FB20B90120012482 +:1022B000FBF7E8FCF1E73649284607F029FB20B98F +:1022C00002200224FBF7DEFCE7E72B78402B02D14B +:1022D000D5F80140E1E72F4E03242F48B046FFF721 +:1022E00069FFF8F7D3FD56F82490B9F1000F2AD012 +:1022F0000134402CF7D105F0A7FE182303602648CF +:10230000FFF758FFF8F7A2FD0AE002A8FBF7AAFFC3 +:10231000054640B905F098FE1323036046F82450A3 +:102320004FF0FF34B9E7036801A9029A9D682AF4C7 +:102330008033A8470546E8B16D4205F085FE05608B +:1023400046F82490ECE74FF0FF37134846F8247026 +:10235000FFF730FFF8F77AFD294602A8CDF8049080 +:10236000FFF73AFF039D002DD4D02B7B002BCCD15F +:10237000043D0195019B094A48F824300023135578 +:10238000074A135589E700BF0CB8010813B80108C4 +:1023900004B801080C000024882602240826022420 +:1023A000482602241D4B70B5036004461C48FFF705 +:1023B00001FFF8F76BFDA3682BB11A4962680B683F +:1023C000A34224D10A60184B15481A68A24204BFE0 +:1023D00000221A60FFF7EEFEF8F738FD257BA5B95D +:1023E0001248261FFFF7E6FEF8F750FD104A40237B +:1023F00052F8041B8E4208BF42F8045C013BF7D13F +:102400000A48FFF7D7FEF8F721FD204670BD1946B0 +:102410005B68A342FBD14A60D5E700BFC8B00108A2 +:10242000D8060024D4060024D826022488260224B4 +:102430000C00002410B50446FFF7B4FF204606F058 +:102440001BFC204610BD000008B50348FFF7B2FE94 +:10245000BDE80840F8F7FABCB026022408B50348E6 +:10246000FFF7A8FEBDE80840F8F710BDB02602242B +:102470002DE9F0479DF82070054689469246022FC7 +:1024800098469DF8246022D8124BDB5DFBB1B6FB69 +:10249000F3F403FB146414F0FF0418D1FFF7DEFF1C +:1024A0009DF82830284685F8609085F865300B9BAC +:1024B00085F861A085F8628085F8637085F86460AE +:1024C000C5F88830FFF7C0FF2046BDE8F0874FF021 +:1024D000FF30FAE7CDB20108274B10B50446036080 +:1024E000FFF7BCFF25496268136823F001031360FE +:1024F0000023A36484F84530214BD1F88C209A4204 +:10250000FBD1204BB4F95400DA6F42F48042DA6711 +:10251000DA6F22F48042DA674FF44072CA6040F208 +:10252000C331D3F8D42022F48042C3F8D420F2F788 +:1025300073FFB4F9560040F2C331F2F76DFFB4F9FE +:10254000580040F2C331F2F767FFB4F95A0040F285 +:10255000C331F2F761FFB4F95C0040F2C331F2F726 +:102560005BFF40F2C331B4F95E00F2F755FF20463D +:10257000FFF76AFF204610BDDCB70108006402586F +:10258000000300800044025810B50446FFF7A4FF82 +:10259000204606F071FB204610BD00002DE9F04FEB +:1025A0000D46164685B0F0F753FEAC1900F10060F9 +:1025B000A042C0F01E8109D92046F0F729FEB4FBE5 +:1025C000F0F303FB1040002840F0138190484FF0D7 +:1025D0000009DFF858B2FFF7EDFDF8F757FC002EC1 +:1025E00000F0FE80B9F1000F40F0F88005F178436B +:1025F000B5F1016F4FF0100A4FEA5343019334BF16 +:1026000001230223012B03F0010803F002070CBF92 +:102610004FF000634FF001630293FBF7A3F9FBF760 +:102620007DF9BBF800304FF6FD715A1E92B28A4216 +:1026300097BF784A4FF0026302EA832303F10063F5 +:102640009D420ED2B5F1006F0BD3734C734BD4F88F +:1026500088209A42FBD1F4F785FC60B14FF44073B7 +:10266000A360FBF749F9FBF76BF9BAF1010AD4D182 +:102670004FF0FF396BE0FBF727F9BBF800204FF66E +:10268000FD71DFF8AC91531E9BB28B4299F8143068 +:1026900097BF634C4FF0016404EA422404F10064E4 +:1026A000A5422ABF2C1B019C640C012B00F09380D7 +:1026B0000120002389F81400C9F81830B8F1000F80 +:1026C00000F09D80F0F746FD031E18BF0123002F88 +:1026D00000F0998002200393F0F73CFD039B002853 +:1026E0003BD001200023C01A89F8143018BF012004 +:1026F000C0F10009029B03EB4444BFF34F8F494BE9 +:1027000004F50032C3F8704220349442FAD1BFF38A +:102710004F8FBFF36F8FBFF34F8FBFF36F8F0022C9 +:10272000C3F85022BFF34F8FBFF36F8FFBF7B8F89A +:10273000F4F700FC002894D1374B4FF440729A60B4 +:10274000B9F1000F8DD1FBF7D7F8FBF7F9F8284660 +:10275000F0F75EFD361A054441E7002BC1D1B8F110 +:10276000000F0AD0304AD36823F4E663D360D368FD +:1027700043EA042343F0A403D36077B12A4AD2F892 +:102780000C3123F4E663C2F80C31D2F80C3143EA81 +:10279000042343F0A403C2F80C31B8F1000F2BD08E +:1027A0000120F0F7D7FC204AD36823F4E06323F03C +:1027B0000403D3605FB10220F0F7CCFC1A4AD2F8D0 +:1027C0000C3123F4E06323F00403C2F80C31002839 +:1027D00088D1002086E74FF0FF398BE74FF0FF39B3 +:1027E0000B48FFF7E7FCF8F731FB484605B0BDE8BA +:1027F000F08F4FF0FF39F8E7002FEAD0DBE7002F2A +:10280000E7D0434666E700287FF46BAFAAE700BF36 +:10281000A414022400FC3F0000640258000300805E +:1028200000FE1F0000ED00E00020005280E8F11FD4 +:102830004C0B02242DE9F04F12F01F0487B08246A2 +:102840000F461646994640F02681002900F0238164 +:10285000F0F7FEFC09EB060300F10060834200F292 +:102860001A818E48DFF850B2FFF7A4FCF8F70EFB90 +:10287000B9F1000F00F00681002C40F001813046D4 +:10288000F0F7C6FCB6FBF0F500FB1565451B4D45A2 +:1028900028BF4D46BB0701D11F2D4BD8202DA84680 +:1028A0003946DAF8040028BF4FF02008424606F007 +:1028B0003FFA1F2D07D8DAF80400C8F12002FF21E3 +:1028C000404406F043FADAF804302025039310233D +:1028D0000293FBF747F8FBF721F8714B19884FF685 +:1028E000FD734A1E92B29A4297BF6E4B4FF002633D +:1028F00003EA812303F100639E4210D2B6F1006F18 +:102900000DD3694C694BD4F888209A42FBD1F4F777 +:1029100029FB002800F0AC804FF44073A360FAF765 +:10292000EBFFFBF70DF8029B013B0293D1D14FF077 +:10293000FF3487E025F01F050397A846C7E7012B62 +:1029400000F09B8002F178400123B0F5801F8BF8E6 +:10295000143006D3A2F10163B3F5801F80F08580A7 +:102960000223002005920493CBF818001846F0F7D4 +:10297000F1FB059A20BB049B4D48012B67D1C16830 +:1029800041F00201C160BFF36F8FBFF34F8F002092 +:1029900001990958115004302028F9D10592BFF34C +:1029A0006F8FBFF34F8F18460493F0F7D3FB049B50 +:1029B000059A012B3E4B51D1D96821F00201D96013 +:1029C00000238BF8143000284FD1019B2032203394 +:1029D00001939BF814307019824203D2002CAED0C0 +:1029E0004FF0FF34002D11DD06F01F032B44BFF321 +:1029F0004F8F304832463344C0F870222032991A43 +:102A00000029F9DCBFF34F8FBFF36F8FBFF34F8FF8 +:102A1000BFF36F8F274B0022C3F85022BFF34F8FB5 +:102A2000BFF36F8FF4F786FA00287FF478AF1E4B60 +:102A30004FF440729A60002C7FF471AFFAF75CFF9C +:102A4000FAF77EFFA9EB08094644474410E7D0F89F +:102A50000C1141F00201C0F80C1194E7D3F80C11ED +:102A600021F00201C3F80C11AAE74FF0FF34B0E7E0 +:102A7000039B044632460193ABE74FF0FF34ABE7CC +:102A80004FF0FF340548FFF795FBF8F7DFF92046D4 +:102A900007B0BDE8F08F4FF0FF34F8E7A41402242C +:102AA00080E8F11F00FC3F00006402580003008032 +:102AB0000020005200ED00E04C0B022410B504464B +:102AC0000B48FFF777FBF8F7E1F9FAF74BFFFAF756 +:102AD00025FFFAF711FFFAF733FF606808B106F037 +:102AE000CBF80348FFF766FBF8F7B0F9002010BDFC +:102AF000A414022410B504461248FFF75BFBF8F754 +:102B0000C5F9FAF72FFFFAF709FF0F4B0F4AD3F871 +:102B100088109142FBD14FF48E010D4A51614FF460 +:102B200040729A60FAF7E8FEFAF70AFF2020FAF7F7 +:102B300059FE60600348FFF73DFBF8F787F9002076 +:102B400010BD00BFA41402240064025800030080DA +:102B500000200052014B5869704700BF1801002443 +:102B600001230A4A90F9201043701C32936810B573 +:102B70001BB193F920408C4205DCC0E90232906021 +:102B800003B1D86010BD1A469B68F1E71801002414 +:102B900090F82230826B13F0100F0CBF60202020C1 +:102BA0001044704710B5C469621CD0E904310CD1DF +:102BB00003B1596142691AB113610023436101E015 +:102BC000074A13630023C36110BD1BB1DA69596161 +:102BD0002244DA614269002AEED1014AD362F1E768 +:102BE00018010024C2682AB18368936003B1DA60D7 +:102BF0000023C36070470378F12B00D07047C06892 +:102C0000F9E783689A68826002B1D06000221846B2 +:102C1000DA60704738B51F4C237A022B35D1636ACE +:102C2000002B34D063694A1C587016D1226B0021E6 +:102C300072B94FF0FF30C3E90421D86159B10B617B +:102C40001548FFF7DEFF02234370A061012038BD65 +:102C500011461269ECE72363F2E7E26A002012B141 +:102C6000D569A9420BD2D961C3E9042058B10361E7 +:102C7000002AE5D0D0695361411AD161E0E71046DE +:102C8000491B1269EBE7E362F2E70020DFE7184631 +:102C9000DDE700BF180100243401002491F9202051 +:102CA000836810B51BB193F92040944205DAC1E95D +:102CB0000230816003B1D96010BD18469B68F1E70E +:102CC0000123014643700148FFF7E8BF34010024A7 +:102CD00070B5124D04462E7A696990B9022E0FD153 +:102CE0006C6A6CB194F9202091F920309A4207DD8A +:102CF0002046FFF777FF0846FFF732FF6670AC61AA +:102D000070BD022E05D190F9202091F920309A4211 +:102D1000F1DC2046BDE87040FFF7D2BF1801002467 +:102D200038B504461546FFF733FF01602046FFF72C +:102D300039FF1DB1BDE83840FFF7CABFBDE83840D4 +:102D4000FFF7BEBF10B50446806918B100221146D6 +:102D5000FFF7E6FF6378232B02BFA36800229A6186 +:102D600010BD10B50146044664B12378F12B07D09D +:102D70000846FFF737FF2046BDE81040FFF78EBF3B +:102D8000E468F1E710BD000038B5254DEC6A002C71 +:102D900045D0E369013BE361002B40D16378732B9D +:102DA00006D009D8532B0BD003F0DF03432B29D1D6 +:102DB0002046FFF720FF25E003F0EF03832BF6E723 +:102DC0002046FFF718FFC3789B071BD5C06890F912 +:102DD0002120C36AD978890709D599688C4208BF30 +:102DE000A16821B191F920108A42B8BF0A465B69F7 +:102DF000002BEFD190F92030934203D080F82020AF +:102E0000FFF7AFFF2046FFF7EDFEFFF759FF2469FC +:102E100024B1E369002BC1D000236361EC6238BDAB +:102E20001801002410B5034653E8000F084203D1EF +:102E3000BFF32F8F002005E020EA010243E80024C1 +:102E400004B1F1E710BD10B5034653E8000F00EAE6 +:102E500001028A4203D0BFF32F8F002005E020EA51 +:102E6000010243E8002404B1EFE710BD10B5437838 +:102E70000446332B15D190F82330416A03F0010248 +:102E80009B0708D428301AB1FFF7DDFF48B10BE0EB +:102E9000FFF7C8FFFAE7806A01EA000312B199421E +:102EA000F4D010BD002BFCD0014600222046BDE826 +:102EB0001040FFF735BFD0E85F3F13B9BFF32F8F46 +:102EC00004E05A1EC0E8512F01B1F4E798B27047F0 +:102ED00010B5D0E85F3F5A1C914200D80022C0E8EC +:102EE000542F04B1F5E798B210BD10B5D0E85F3F9C +:102EF000994202D8BFF32F8F04E05A1CC0E8542F28 +:102F000004B1F3E798B210BD10B50446B8B1037828 +:102F1000F62B14D183683BB1FFF773FE0122002129 +:102F2000FFF7FEFE002010BDC1890C30FFF7DDFF6A +:102F3000E38983428CBF00206FF00200F3E76FF05B +:102F40000300F0E7836810B5044663B10C30FFF767 +:102F5000B2FF40B12046FFF754FE0022BDE810400A +:102F60001146FFF7DDBE10BD284B5A6970B5044607 +:102F7000002A41D0002842D00378F52B3FD1037EB0 +:102F8000002B3FD0C16891423CD1013BDBB20376BC +:102F900013BB43690BB1016919612169F1B14B613F +:102FA00092F92130D56ADDB982F82030A36883B167 +:102FB0002046FFF726FE06462A462946FFF7B0FEC2 +:102FC000F36AC4E90365636103B11C610123F46220 +:102FD00023760020FFF77CFE00200FE0D362DFE7BE +:102FE000E978890706D5A96821B191F920108B42AB +:102FF000B8BF0B466D69D6E74FF0FF3070BD6FF07C +:103000000300FBE76FF00200F8E700BF180100249F +:10301000224B70B55D6904460E46002D35D0002860 +:1030200036D00378F52B33D1037E53B9C0E903536F +:10303000EB6A436103B118610123EC62002023763F +:1030400070BDC278D10706D5C168A94203D1FF2B54 +:1030500021D00133F2E7F6B193070AD5E06895F97C +:10306000203090F920209A4203DA80F82030FFF7D0 +:1030700078FE31465320FFF7CDFD18B12946204692 +:10308000FFF70CFE6FF00100DAE74FF0FF30D7E7F3 +:103090006FF00300D4E76FF00200D1E718010024BD +:1030A0002DE9F0410446002601270CB9BDE8F08166 +:1030B000E378D4F814801B0712D5A36826767BB179 +:1030C0002046FFF79EFD002205461146FFF728FE29 +:1030D000EB6AC4E90356636103B11C61EC622776B5 +:1030E0004446E2E7034653E8000F421C43E8002150 +:1030F00001B1F8E77047036B30B4BBB1CD78002461 +:10310000DA78AA420AD31A46C1E9012462B1916071 +:103110007CB16160283030BCFFF7E4BF5A681C46C0 +:10312000002AF1D01346EBE7C162F1E7C1E90133B0 +:10313000C1620163EEE730B5F0B1C3688B421BD8C2 +:1031400003698B4218D900F114031A680A60BFF3AF +:103150005F8F53E8002F0C689442F6D143E80015C6 +:1031600005B1F2E7043050E8003F5A1E40E8002164 +:1031700001B1F8E7002030BD6FF00300FBE710B5A8 +:1031800090B100F1140353E8004F14B9BFF32F8F2F +:1031900004E0226843E8002101B1F4E714B10430EF +:1031A000FFF7A0FF204610BD0446FBE730B5C0B1D5 +:1031B00089B1C2B1CBB100240160C3604361C0E9F1 +:1031C000014202FB01F41D1905611846013904D1C1 +:1031D000A21A99500121084630BD8518056028467D +:1031E000F4E70146F7E71146F5E71946F3E730B58E +:1031F00080B1C9B1A1F1080500F108040022A5427F +:1032000009D16B6823F0030443681B1B43603AB980 +:103210006A60012030BD236822463BB11C46EEE7C0 +:1032200051F8083C1360F4E70846F3E71846F1E765 +:1032300010B5C378044613F0010322D103808378CC +:103240009A0708D513F0100F016B134B0FD0D3F86A +:103250008400FFF770FFA378DB071CD50E4B2146D7 +:10326000D3F8880038B1BDE81040FFF764BF586F4D +:10327000FFF7BDFFEFE7D3F88000BDE81040FFF790 +:10328000B6BF042343700023C360034B5A6B8260B4 +:1032900002B1D0605C6310BD1801002410B5044673 +:1032A00000283AD00378F12B37D1437803F00F038D +:1032B000022B06D0032B27D0012B22D06FF0020067 +:1032C0001EE0174B1A7A022AF8D15B6A002BF5D060 +:1032D000E06AFFF7E5FE2046FFF734FD617802293A +:1032E00017D11048FFF78DFC0D4B41709861EFF33B +:1032F0000982A26300225A612046FFF799FF00204D +:1033000010BDFFF76FFCE3E7FFF76CFCFFF74AFC2B +:10331000DEE70020FFF7DCFCEEE76FF00300EFE7ED +:10332000180100243401002470B50F4C267A022EB7 +:1033300018D1636AB3B16569E86AFFF7B1FE284640 +:10334000FFF700FD04F11C00FFF75BFC4670A06175 +:10335000EFF30983AB63002328466361BDE8704047 +:10336000FFF766BF70BD00BF1801002470B50546A9 +:1033700038B30378F62B24D1836863B12846FFF76E +:1033800040FC00226FF00201FFF7CAFCA868002889 +:10339000F4D1FFF79DFCAB78002613F001032E70EB +:1033A00012D00A4B2946D3F8984024B12046FFF7A3 +:1033B000C2FE304670BDD3F88000FFF718FF2046EC +:1033C000F8E76FF00300F5E71846F3E7180100246B +:1033D00070B50446002849D00378F52B46D1037E0A +:1033E000BBB16369C0680BB122691A61226902B37B +:1033F000536190F92120C36AEBB990F920309342D0 +:1034000003D080F82020FFF7ACFCA068F8B9FFF7E4 +:103410005FFCA078002610F00100267008D0154B44 +:103420002146D3F89450DDB12846FFF784FE30469C +:1034300070BDC362DDE7D978890706D5996821B1E7 +:1034400091F920108A42B8BF0A465B69D4E720464A +:10345000FFF7D7FB00226FF00201FFF761FCD4E712 +:10346000D3F88000FFF7C3FE2846E1E76FF00300C2 +:10347000DEE700BF18010024F0B568B381B10F3159 +:1034800000F1080621F00707334636685C68F11A38 +:1034900024F00304091B8F4204D931680029F3D1B9 +:1034A0000846F0BD45683A4304683D444560204401 +:1034B00050F8041C08388D4288BF4560586818B918 +:1034C00003F108015A60EBE720F0030019181E50C1 +:1034D0004A6019600831E3E70146E1E72DE9F04F62 +:1034E00085B08146029120B90024204605B0BDE890 +:1034F000F08F002A00F086809468B4B1A007F3D161 +:10350000D368432BF0D99769D2E904658EB171076E +:10351000EAD1002DE8D077B918276B07E4D1A5F1DF +:103520004801574B99420BD9DEE7D368002BEAD00C +:10353000DAE7002F64D07B1E372BD5D8002DECD1D5 +:10354000D2E900A30193002C69D14E4BD3F8880037 +:1035500000285DD0FFF713FE04460028C4D04FF0CA +:103560000108A6B9DFF81CB1002D71D1DBF8840089 +:10357000002857D0FFF703FE002870D048F010084D +:1035800006464FF4805548F00208002CACD040F2BB +:10359000F113FD226563403D23807FB2019B3544DA +:1035A0006284E3700023384A84F80280C4F804A0DF +:1035B00084F8207084F82170C4E90E59C4E90233FC +:1035C000C4E90433C4E90633C4E90933C4E90B365A +:1035D0003260A26B114602F1340042F8043B824291 +:1035E000FBD12A4B20462A4AC1E90D394FF080739E +:1035F000CB63029B0B62234B1A66FFF769FB74E7F0 +:1036000018279BE7924616461827154601929CE715 +:1036100001224421D3F88000FFF72EFF9CE74FF0F2 +:1036200000089EE72A464FF480554FF48051DBF89E +:103630007400FFF721FFF8B9B8F1000F1ED0DBF8D6 +:1036400088207AB1214610460024FFF774FD9AE7DE +:1036500032462946DBF87400FFF70EFFEBE74FF424 +:103660008055E9E72146DBF880000392FFF7BFFDB4 +:10367000039A1446164686E7064684E7444682E7E0 +:10368000B7FFFF7F18010024A52E5AE2914A0108D6 +:103690006D2E010870B54FF6FE731446421E0546A6 +:1036A0000E469A4201D9002070BD8842FBD3CCB1AE +:1036B000A068226890B110F00303F4D1E1680F29EB +:1036C000F1D91446F62283700023446002708360AF +:1036D0000D4A0E4B8681C5819A66E5E7E368002BAB +:1036E000E1D11446094BD3F8980028B1FFF747FD04 +:1036F0000028D8D00123E5E701221021D3F880006B +:10370000FFF7BAFEF4E700BF452F010818010024B7 +:1037100038B5034660B3D0E900458068A0B110F029 +:10372000030201D0002038BDDB681B2BFAD91346F9 +:10373000F52283700023C570027044600376C0E9EF +:103740000233C0E90433EEE7DB68002BEAD10A4B11 +:10375000D3F8940030B901221C21D3F88000FFF780 +:103760008BFE01E0FFF70BFD0028DBD00123DFE734 +:1037700004460546EBE700BF1801002410B598B1D8 +:1037800040EA010313F007030ED117290AD901609B +:10379000083910220C18426084600B5081684A601E +:1037A000C3600123184610BD0023FBE7014BD86816 +:1037B000704700BF1801002438B51C4C257A012D34 +:1037C00028D07DBB1A4B29462846E3651023A4F870 +:1037D000543005232364FFF7D1FF08B1C4F88050AB +:1037E00000210846FFF7CAFFB0B9D4F880300021A5 +:1037F00063670846FFF7C2FF80B9D4F88030002124 +:10380000A3670846FFF7BAFF50B9D4F88030E367E2 +:1038100001232372002038BD0023E8E70023EEE7F0 +:103820000023F4E74FF0FF30F5E700BF1801002454 +:1038300068430224064BDA6A3AB1D0695B6C1BB16B +:103840001B69984228BF184670474FF0FF30F5E7D4 +:103850001801002410B50446D0B10268806898B100 +:1038600010F0030301D0002010BDE1680F29FAD940 +:103870001446F32283700023446002700D4AC0E9AD +:1038800002330D4B5A66EFE7E368002BEBD1144689 +:10389000094BD3F8900028B1FFF771FC0028E2D063 +:1038A0000123E6E701221021D3F88000FFF7E4FDB1 +:1038B000F4E700BF6354010818010024014608B56D +:1038C00038B11320FFF7A6F980F00100C0B24042E2 +:1038D00008BD6FF00300FBE700F07B43B3F1005F2E +:1038E0000ED000F07743B3F1405F09D000F07F4085 +:1038F000B0F1805F14BF4FF0FF304FF001607047B0 +:103900000048704700000408BFF34F8F0549064B7D +:10391000CA6802F4E0621343CB60BFF34F8F00BF6D +:10392000FDE700BF00ED00E00400FA05036818475A +:10393000094B30B51A46094CD3F89450A542FBD137 +:10394000036829B181680B604FF44073536130BD47 +:10395000C1681B04F7E700BF006402580003008041 +:103960000B4808B543681A6803681A420CBF012166 +:103970000021FFF7DDFF074843681A6803681A4211 +:10398000BDE808400CBF01210021FFF7D1BF00BFF7 +:1039900004070024740B022400487047BCB80108D7 +:1039A000D0E904017047D0E90A017047D0E90A0163 +:1039B0007047D0E908017047D0E90601704730B57B +:1039C00003995418049A43EB0205D0E90423AB424F +:1039D00008BFA2422CBF0120002030BD002070474C +:1039E000704700207047D0E900301847D0E9013215 +:1039F000016810B401EB62005410D20748BF0A59A5 +:103A00005DF8044B48BFD3581847704700205070EA +:103A10009070D07070470000B0F1204F73B504462D +:103A20000D460DD3114B186838B106680023CDE957 +:103A3000002304F1C0427669B047284602B070BD49 +:103A4000B0F1104F08D24B1E02449442F5D014F846 +:103A5000011B03F8011FF8E7054B186800230668EF +:103A6000CDE9002304F1E0427669E5E7E80A0224A3 +:103A7000700B022430B5A1F11004002500F00F02F4 +:103A8000CD7302390009D3B2092ACCBF37333033A2 +:103A90000B748C42F2D130BD322310B50A4C0B802E +:103AA0000A4BA11C1868FFF7E5FF094B04F112014E +:103AB0001868FFF7DFFF074B04F122011868FFF7D2 +:103AC000D9FF204610BD00BF8402002400E8F11F8A +:103AD00004E8F11F08E8F11F042301480B80704738 +:103AE00080020024122301480B8070476C020024DE +:103AF00030B5013800252B460135445D002CFAD144 +:103B0000DBB201335B0013800B7003234B70022385 +:103B100010F8015F05B930BD5A1CCD540233D2B242 +:103B2000DBB28C54F4E700000A460349034808B5A9 +:103B3000FFF7DEFF084608BDAC2A0224C3B801081F +:103B40000A460349034808B5FFF7D2FF084608BDF7 +:103B5000AC2A0224D1B801080A460349034808B533 +:103B6000FFF7C6FF084608BDAC2A0224DCB80108EE +:103B70000A460349034808B5FFF7BAFF084608BDDF +:103B8000AC2A0224E7B8010808B5D0F8B4325B6863 +:103B90009847002008BD08B5D0F8B4320BB9022010 +:103BA00008BD1B6898470028FAD0F8E7D0E9003034 +:103BB00018470000092908B50AD8D0F8BC320639E0 +:103BC00053F8210010B10349FFF792FF014800E0CC +:103BD000002008BDB82B02240A2303800048704748 +:103BE00030030024002070470020704700207047F9 +:103BF0000020704700207047002070477823038022 +:103C000000487047B802002438B51E4C0546237A98 +:103C1000042B35D1FFF70EFEE26AA842034694BF9B +:103C200000F1FF332B4612B1D069C01AD061626C2B +:103C300012B11069C01A1061E06803440544E360E2 +:103C4000E368AB4213D1022300202372FFF740F850 +:103C500000236372BFF34F8FA27A22B1A3724FF099 +:103C60008052094B5A60BDE83840FEF7CDB80133A9 +:103C7000E360FFF789F8236D002BE1D09847DFE779 +:103C800038BD00BF1801002400ED00E038B50F4C2E +:103C90000546B4F8541004F15600FFF726F98142A6 +:103CA00003D802210A48EFF79FF904F15800FFF703 +:103CB0000FF9E36D43F82050637A23B9054B4FF0B9 +:103CC00080525A6038BD0123A372FBE7180100241B +:103CD0002601028000ED00E0F8B59C460D4617462F +:103CE0000446002872D00278FA2A6FD100296DD0DC +:103CF00000F1280252E8001F11B9BFF32F8F04E032 +:103D0000481E42E8000606B1F4E711B1E66A012256 +:103D10009EB9BCF1000F5CD061468320FEF77AFFAC +:103D200040B1304B20465969FEF7B8FFEFF30983E5 +:103D3000C3E902576FF0010023E0B11CD1E84F0F37 +:103D4000C1E8432F03B1F9E710F0FF0F44D0B66884 +:103D5000DEE79A60B268AAB15360626A06F10C01AC +:103D6000284604F0E5FF0FB1F3783B70002504F11D +:103D70000C07314638463570FFF7DDF9A3681BB9EB +:103D80000020F8BD2363E8E73846FFF7F8F9064658 +:103D90000028F5D02046FEF734FF074629460122C9 +:103DA000FEF7BEFF3846FEF7F3FE626A07468168FB +:103DB00006F10C0004F0BCFFF923B57031463370F6 +:103DC0002046FB68F370FFF796F9D9E76FF0030020 +:103DD000D7E76FF00200D4E7D6E90132002BB8D163 +:103DE000E262B7E718010024F8B5817804468568D7 +:103DF000002938D04368C6688BB39D60A26882B33F +:103E00005360002706F10C05214628462770FFF76E +:103E100092F9B368002B4CD02846FFF7B0F904465E +:103E2000002846D03046FEF7ECFE05463A463946B5 +:103E3000FEF776FF2846FEF7ABFE726A81680546FC +:103E400004F10C0004F074FFF923A77021462370DD +:103E50003046EB68E370BDE8F840FFF74CB9F56217 +:103E6000CCE73363CDE7AB6803B35B78832B1DD11D +:103E70002846FEF7C6FE06460A46FEF751FF3046C4 +:103E8000FEF786FE06466A6A04F10C01806804F0BB +:103E90004FFFF3680BB1E2781A700023214605F159 +:103EA0000C002370BDE8F840FFF745B921462846CD +:103EB000D1E7F8BD2DE9F0410C4617469846054676 +:103EC000002848D00378FA2B45D1002943D08368D5 +:103ED000C3B15B78832B15D1FEF793FE0646012212 +:103EE0000021FEF71DFF3046FEF752FE06466A6AC5 +:103EF0002146806804F01CFFF06808B107700020BC +:103F0000BDE8F08105F10C00FFF739F9064670B104 +:103F100021466A6A0C30002404F00AFFF923314676 +:103F200028463370B470F770FFF7E5F8E7E7B8F1AB +:103F3000000F13D041469320FEF76CFE40B1094BB1 +:103F400028465969FEF7AAFEEFF30983C3E9024741 +:103F50006FF00100D4E76FF00300D1E76FF00200CB +:103F6000CEE700BF1801002438B5274C237A012B77 +:103F700003D04FF0FF35284638BD244A002124489D +:103F8000FFF7ACFAA06200F04FF805460028F0D128 +:103F9000204AE16C2048FFF7A1FAA0640028E8D08D +:103FA0001E4AFF2382F8223092F82230D26863F052 +:103FB000FF03C2F30222DB4314BFB3FA83F32023CF +:103FC000C3F12003934298BF531CFE2202FA03F36D +:103FD000124ADBB2D377F02382F823309368104A79 +:103FE000DA63BFF34F8F4FF0FF332361FDF70CFF10 +:103FF0000C48FEF706FE02234370A06183F3148889 +:10400000BFF36F8F2372B6E71801002470C3010855 +:1040100015D40008ACC30108CD4A010800ED00E04A +:104020005F0600083401002438B50D4CFA23002542 +:10403000142223700823042104F10C00A570C4E9A4 +:104040000935084BC4E90155C4E90B55FFF7AEF833 +:10405000054B064A2846DC641A67054A1A6538BDCE +:10406000A8430224DC43022418010024E93D01088E +:10407000014B010838B5114C237A022B1CD1104B8F +:104080001D682846FAF74FFA00234FF0007285F8B2 +:104090003F300C4B5A6001226272BFF34F8F596858 +:1040A000C90003D54FF000615960A2720423237246 +:1040B000BDE83840FFF7BEBB002038BD1801002422 +:1040C0002827022400ED00E008B5094B1B6833B136 +:1040D000084B1B68503343F82010002008BD064BE6 +:1040E0001B7813B1054806F04FFA4FF0FF30F5E7A3 +:1040F000F8680224C4270224E40A0224ECB8010868 +:1041000008B5094B1B682BB1084B1B68503353F89B +:10411000200008BD064B1B7813B1064806F034FAA0 +:104120004FF0FF30F5E700BFF8680224C4270224EF +:10413000E40A022400B9010838B5044641F21C0023 +:1041400004F092FDC4F8B802E0B1022241F2180373 +:1041500000F580510C4DC25200230B6041F2040166 +:10416000435041F20801455041F20C01435041F2E5 +:104170001001435041F21403C252D4F8BC321B69FF +:10418000984700B1022038BD000004082DE9F04135 +:104190000546406888461146DDE9066738B910488B +:1041A00006F0F2F96FF47A642046BDE8F08100224F +:1041B00004F04EFA044608B10A48F1E76B6832464B +:1041C0000121404604F034FA00230246BB4208BFF6 +:1041D000B042E9D069680448F7F772F8E2E700BF37 +:1041E00014B901082AB9010837B90108B0F1204F04 +:1041F0007FB5044614D3154B1D681DB32B6800F121 +:10420000C042DE69196B2846002303928847039A4F +:104210000023CDE900012846B04780B204B070BD4C +:10422000B0F1104F06D30A4B00F1E0421D682B6835 +:10423000DE69E7E7EEF7ECFF214602460548FEF7A8 +:10424000ADF9EAE74FF6FF70E8E700BFE80A02249D +:10425000700B0224283F022410B50224C0E9072273 +:10426000C0F89442D0F8C002EEF725FF002010BD40 +:1042700008B5002204231146C0F89432D0F8C002D9 +:10428000EEF719FF002008BDF0B541F21802D0F892 +:10429000B84289B00746A35C042B65D104F580566B +:1042A00041F20403316800294FD12278AAB9E358BA +:1042B000012B41D1002541F2040341F21802E550DF +:1042C00003233560A35441F21102A55441F21202B6 +:1042D000A55241F21402A3542BE0212A10D1E35835 +:1042E000052B29D1E378A2781B0403EB0223627823 +:1042F0001344227903EB026341F20802A350D9E789 +:10430000412A19D1E358052B16D1E378A0781B0474 +:1043100003EB002360780344207903EB006041F253 +:104320000803E050D7F8BC329B6998470028C1D0F9 +:104330000225284609B0F0BD002341F204023846A8 +:10434000A3503360EEF7ACFEB4E70129B2D941F2D5 +:1043500008020239A058D7F8BC2200EB01312046F0 +:10436000D569E258A847E1E7072B4FF0000313D1C6 +:1043700041F219016354184991F82F5041F211018B +:1043800015F004050AD00620A05441F2120263542D +:10439000A35241F21402A0541D46CAE70823A354B5 +:1043A00041F212026554A55241F21402A354D0F80E +:1043B000BC325B699847094B094A002109480792BA +:1043C00006950092CDE9043704ABCDE90201064819 +:1043D0000ECBFAF7EFF8ACE7B80200245544010819 +:1043E000AD3B0108400D03002006002438B5D0F88D +:1043F000B432044601795B689847D4F8C04294F817 +:10440000BC33012B21D02568012384F8BC33284616 +:10441000AB6823F00103AB60F1F79AF94FF48463C2 +:10442000226813610A4B013B02D011698906FAD454 +:10443000A36A012B06D1A369012B03D0AB6B23F434 +:104440008033AB63002384F8BC33002038BD00BF49 +:10445000410D030008B5FFF7C9FFFFF755FA00004B +:104460002DE9F7430D7800230646D0F8B84215F041 +:104470006005ADF8063000F07C81202D40F08F8182 +:1044800091F80180B8F1060F00F28981DFE818F099 +:10449000440107004300B4000B012201270141F24F +:1044A0001803CA88E05C02B3022801D0052818D19D +:1044B000498804F58053196041F2040341F2180160 +:1044C000E2500323635441F2140163542146D6F8A9 +:1044D000C002C6F89432C6E95722EEF701FE002565 +:1044E00015E03046EEF7DCFDF9E7052801D002289B +:1044F000F7D14FF483720025E25241F211030622F4 +:10450000E55441F21203E55241F21403E254284605 +:1045100003B0BDE8F083CA8841F21800002A5FD0DA +:10452000205C04F58053022801D0092852D14F881D +:1045300041F204091F6041F2180344F80920DFB971 +:10454000032A21464FF0030298BF4FF0090804F8F0 +:10455000038041F21103E75441F21203E75241F2A2 +:10456000140304F803804FF4045323804123A37001 +:104570003046FFF771FEB2E7012F41F211011BD067 +:1045800009200025023FE05441F212036554214600 +:10459000E55241F21403E05441F20803E058D6F822 +:1045A000BC3200EB07301B6A984734F809200146FB +:1045B0003046FFF751FEAAE70F220025E25441F2F0 +:1045C00012036554E55241F21403E2543046EEF70B +:1045D00067FD9CE7002541F20402A5501D60F5E748 +:1045E000022341F211012354625441F2120162523A +:1045F00041F21401635472E741F2180204F5805548 +:10460000A35C1035032B04D0062B2DD0062229469F +:10461000AEE741F2040341F21100E358EBB1042389 +:1046200041F21201A35400222254625241F21402B8 +:10463000A35441F20803E05804F580531968D6F8F2 +:10464000BC3231B92278412A03D15B6A2A469847A5 +:10465000DCE75B6A2A460121F9E70521A1542354CE +:1046600041F21202A3520DE041F21903E35C012B67 +:104670000CD10721A15441F21102A35441F21203BB +:104680000022E25241F21403E154BFE7002BBDD1F6 +:10469000564991F82F104907B8D50221A15441F28B +:1046A0001102A354DCE741F2180341F21001E25C6D +:1046B0000A2A07D102220025E25441F21403655070 +:1046C000E25224E70A22E2540E23635041F214031B +:1046D000E25204E704F580510122183148E741F223 +:1046E0001802A35C092B3FF6FAAE4FF41B75DD40B0 +:1046F000ED4315F001057FF4F2AE0223A35441F21D +:104700001002A55041F21402A35204F580531D601B +:1047100041F20403E550FAE641F21800225C092A4E +:1047200014D84FF41B73D340DB4313F001030DD1B6 +:104730000222225441F21000235041F2140022526E +:1047400004F58052136041F20402A350274B93F802 +:10475000305015F0100508D030464546FFF746FEAC +:10476000D6F8C002F2F7D6FAD1E64888F2F720FC74 +:10477000CDE64F780B2F12D8DFE807F006111111A4 +:10478000111116111111232C90F89C32032B06D114 +:1047900002220DF106013D46FFF75EFDB7E6304609 +:1047A0000225EEF77DFCB2E64B881B12212B05D1CA +:1047B000CA880F49092A28BF0922F9E600221146B2 +:1047C000F6E690F89C32032BE9D104F580510122E2 +:1047D0000C31EDE68B78032BE1D890F89C22032A6C +:1047E000DDD141F20C02A35091E600BFB8020024D3 +:1047F000E502002410B50C4CF9F766F82046F9F7ED +:1048000092FE00216163F9F74BF800210748FFF79A +:104810008FF800210648FFF78BF800210548BDE816 +:104820001040FFF785B800BFB00B0224740B0224C0 +:10483000280B02240407002443682DE9F347DDE92F +:104840000A45804691461BB91B4805F09DFE23E0B2 +:10485000002600274FF0FF0AAF42D8F8040008BF37 +:10486000A64222D0002209EB060103F0F1FE08B1B6 +:104870001248EAE70122D8F804300DF107008DF85C +:1048800007A0114605F0AEFD0128024609D0D8F870 +:1048900004100B48F6F714FD6FF47A6002B0BDE81F +:1048A000F087013647F10007D6E703F009FD00283D +:1048B000F4D00448C9E700BF55B901086CB9010834 +:1048C0007AB9010899B9010870B5044640680D46E7 +:1048D000049E114618B9104805F056FE12E0002259 +:1048E00003F0B6FE08B10D48F6E7012263683146D1 +:1048F000284605F077FD0128024606D06168084881 +:10490000F6F7DEFC6FF47A6070BD606803F0D8FCE7 +:104910000028F9D00348DFE7A7B90108C0B90108AA +:10492000D0B90108F1B9010808B5406803F0FEFBF1 +:10493000002008BDF7B50446D0E9020103F0FCFDF4 +:10494000606048B9D4E902121348F6F7B9FC6FF475 +:104950007A65284603B0F0BD0222002103F078FEFC +:10496000054618B10D4805F00FFEF0E76068002716 +:1049700003F02CFFD4E904239F4208BF904206D0E5 +:10498000A168CDE9002302460548F6F799FC01230A +:1049900084F83030DDE700BF01BA010828BA010809 +:1049A00035BA010810B5044604F066F9204610BD7A +:1049B00010B504460168D0E901230548FDF73AFF28 +:1049C000206804F059F92046BDE8104004F054B9BD +:1049D000283F022438B5D0F8B832002541F218013A +:1049E000044603F58052156041F204029D500222F4 +:1049F0005A5441F210015D5441F214015A54D0F856 +:104A0000B80218B104F038F9C4F8B852002038BD23 +:104A10001FB51648FEF752F8154B1868F0B1036839 +:104A2000DB68984701A90120EFF7A4FDB0B902A9FE +:104A30000198EFF7CBFF014668B99DF8083001985F +:104A4000022B0FD0032B06D1EFF79EFF18B90221DE +:104A50000198EEF7BDFE0198EFF778FD002005B054 +:104A60005DF804FB8268EEF7CDFEF4E7283F0224F0 +:104A7000E80A022402F038B8EFF310832BB9EFF301 +:104A80001180003818BF01207047012070470000D6 +:104A900008B5EFF305834BB1084B5869084B1B6809 +:104AA00003B19847DFF81CC000DFFEE7FFF7E4FF23 +:104AB0000028F1D1DFF810C000DFEFE71801002473 +:104AC000B4B2010829330108552B010804460B4DE7 +:104AD00007B5EFF30583002BFBD1FFF7CDFF0246AF +:104AE0000028F6D1204669464FF0FF33AC4600DF80 +:104AF0000028EED1DDE900309847EAE7D93C01080B +:104B00002DE9F74F394D6C6C002C63D023694FF0C1 +:104B10000008DFF8E0904FF0F90A013B6F6923616C +:104B20002369002B55D1E3680BB1A2689A60D5F8D0 +:104B30004CB004F118016B64EFF3058343B1BBF192 +:104B4000000F13D1AB69032129486B61EEF74CFAD2 +:104B50000191FFF791FF019902460028EFD15846D5 +:104B60001346CC4600DF0028ECD11BE09BF8003058 +:104B70000191FA2BE6D10BF10C00FEF700FB064683 +:104B80000028DFD001990C30DBF8242004F0D0F8A5 +:104B90000199304686F800A0A6F80280C6E9011BFC +:104BA000FFF774F8E378012B1DD16B6C002162696B +:104BB00013B11869824210D22261C4E902131BB1F9 +:104BC00018699C60821A1A6159B1CC606C6C002C17 +:104BD000A6D16F6103B0BDE8F08F1946121ADB68E9 +:104BE000E6E76C64F2E701236370EFE71801002445 +:104BF00027010280B53E010800B589B0BFF35F8F81 +:104C0000834B0022196810465A60C1F30721914274 +:104C100040F0A1801022DA607E4A1A611322DA6025 +:104C20007D4A1A611122DA607C4A1A617C4ADA6094 +:104C30007C4A1A6107225A60BFF34F8FBFF36F8F10 +:104C4000794B7A4998684FF000531A1802F1604284 +:104C5000126843F8042B8B42F7D1734B4FF000528C +:104C60009A605A69910315D45A6912F4003211D12D +:104C7000BFF34F8FBFF36F8FC3F85022BFF34F8F37 +:104C8000BFF36F8F5A6942F400325A61BFF34F8FFE +:104C9000BFF36F8F644B5A69D20327D45A6912F459 +:104CA000803223D1C3F88420BFF34F8FD3F8802004 +:104CB00043F6E074C2F3C900C2F34E32520102EA75 +:104CC0000406014646EA81750139C3F86052F9D2FB +:104CD000203A12F1200FF2D1BFF34F8F5A6942F4FC +:104CE00080325A61BFF34F8FBFF36F8F504CD4F8AF +:104CF000E03043F00073C4F8E030D4F8E03003F063 +:104D000000730193019BF0F74DFC4749494BCA687A +:104D100022F4E0621204120C1343CB60F1F754FA50 +:104D2000A369A369F1F754FE236F9E070AD4424A90 +:104D3000136843F480731360404B1B68236F23F0A8 +:104D400018032367EEF796FA0120F2F73DF930B920 +:104D50003B48F8F781FF9A600132186157E7344CFD +:104D60004FF48070032503A9D4F8E03043F0010329 +:104D7000C4F8E030D4F8E03003F001030293029B62 +:104D80000223CDE9030300232E48CDE9053507931F +:104D9000F1F7EAFF236923F0FE7343F488032361EC +:104DA000F0F700FCEBF74EFDEFF305832BB9FFF7AF +:104DB00063FE10B9DFF8A8C000DF234A234B13615C +:104DC0004FF4805353614423D360214B93601823E5 +:104DD0009361204B1360EFF305831BB11A491E4802 +:104DE000EEF702F9FFF748FE01460028F6D11B480E +:104DF000DFF870C000DF0028F0D0EFF305832BB997 +:104E0000FFF73AFE10B9DFF860C000DF0021E6E7E7 +:104E100090ED00E039F00206390702133FF50B135D +:104E2000120000803900021300ED00E0980200201B +:104E3000004402580003FA05004802580010005CC4 +:104E400083BA010800000258D03E0224D02E02246A +:104E50002C44022497BA01081D01018071790108D0 +:104E6000B9370108DD340108693F0108B1F1204F6D +:104E70002DE9F04306468BB00D4614461CD3794FFE +:104E80003868002800F0EA8003684FF00009904677 +:104E90000022196B00238847894505F1C04508BFEA +:104EA00084423DD338682A460368CDE900899C696D +:104EB00000233146A04761E0B1F1104F62D21046A5 +:104EC00003F0D2FE22463146074603F031FF0C20A4 +:104ED00003F0CAFE644B00228460059306AE634B68 +:104EE0000492CDE9023002ABC0E900750FCB604DF2 +:104EF00086E80F00F8F7E8FC2B4653F8184F002C13 +:104F00005DD1EB69332B40F29F802C6A343B04F176 +:104F10003402EB6134232A6223600123A37157E03A +:104F2000386800220368196B0023884703F09CFE51 +:104F300022463146804603F0FBFE386808EB040940 +:104F400003685B6B98470646386800220368196B54 +:104F5000002388473146021B484603F0F7FE3C68B1 +:104F60000022236820469E69196B002388472A4641 +:104F70000023CDE9000141462046B04780B20BB086 +:104F8000BDE8F0833B4F01F1E0450022386803683B +:104F9000196B0023884700238B4208BF844206D246 +:104FA000386800220368196B002388470446386874 +:104FB00000230268CDE9004394692A4679E7226814 +:104FC000332A3DD9E268002A37D01A60A36893607B +:104FD000F8F766FC00224FF0FF3304F12407C4E920 +:104FE000052396E80F0087E80F00234BE361FCF7E9 +:104FF00023FF224B024621462362636903441C4877 +:105000006361F9F749FA2A6BEFF3058313B9FFF7E8 +:1050100033FDE8B1D2B11378F32B17D102F10C03B1 +:10502000012153E8004F44EA010043E8000505B1BF +:10503000F7E71046FEF72AFE08E0A2681A60C7E705 +:1050400004F10803A4685AE7F8F72AFC002096E761 +:1050500010460121DFF828C000DFF7E74FF6FF70A8 +:105060008DE700BFE80A0224E7390108B1490108C9 +:1050700024130224700B02240B3A0108F154010896 +:10508000F953010873B51F4C04F1560504F15A0693 +:10509000B4F8541028460191FDF70DFF58B301995B +:1050A0003046FDF715FFE36D53F8200018B3037881 +:1050B000F13B082BECD801A252F823F0E150010893 +:1050C00091500108E75001089150010891500108E2 +:1050D000EB500108EF50010891500108F35001080E +:1050E000236E9847D4E7636EFBE7A36EF9E7E36EA0 +:1050F000F7E7236FF5E7002002B0BDE87040FDF749 +:10510000E7BD00BF180100241F4B186870B5383088 +:10511000EEF724F918B11D4B4FF080625A601C4C19 +:10512000E3680133E360FDF72FFE0020FDF7D0FDBB +:10513000236D03B19847226C2AB3A369E16B9942AE +:1051400003D0D969E36301B9DA61DA69BAB9267AB9 +:10515000022E18D1656AB5B1E36B95F9202093F959 +:1051600020309A420FD12846FDF73CFDE06BFDF759 +:10517000A7FD6E70236CE563A561EB6103E0013A66 +:10518000DA61002AE3D070BD2827022400ED00E098 +:105190001801002410B50446EFF305831BB15CB978 +:1051A0006FF0030017E0FFF767FC0028F7D12046F7 +:1051B000DFF82CC000DF0EE02378F62BF0D1E18978 +:1051C00004F10C00FDF791FEE389834204D92046E7 +:1051D000FEF75CFD002010BD6FF00200FBE700BF92 +:1051E000092F010810B52C4C2C48F5F74FFE6369C8 +:1051F00013B994F83D3023B12848F5F727FE002075 +:1052000010BDA36A53B1A26A00232549E06AB3EB3B +:10521000900F11D242F823100133F7E7E06A214BD7 +:10522000984294BF20F003004FF0FF3003F01CFDC4 +:10523000A0620028E7D1DFE744231B4A63621B4BCF +:10524000226263601A4BA3600023E360194B236161 +:10525000EFF305838BB10023636194F83C302BB1ED +:10526000A06A08B103F008FD0023A3620B48F5F71C +:10527000EDFD206CFFF78EFFC1E7FFF7FDFB002877 +:10528000E9D1A2F178010C48603ADFF830C000DFC4 +:1052900060610028B0D1E0E780130224D413022417 +:1052A000A52E5AE2FBFFFF7FF813022424130224E9 +:1052B00009200108ED3901084DB20008DD3401086C +:1052C000024608B5EFF3058313B16FF0050008BD82 +:1052D000FFF7D2FB0028F8D11046DFF808C000DF46 +:1052E000F5E700BFD1330108074B10B50446036052 +:1052F000F6F7FCFDD4F8BC00FFF7E2FF201DFDF738 +:10530000EBF8204610BD00BFF0C1010810B50446FF +:10531000FFF7EAFF204603F0AFFC204610BD000077 +:10532000024608B5EFF3058313B16FF0050008BD21 +:10533000FFF7A2FB0028F8D11046DFF808C000DF15 +:10534000F5E700BF692F0108024608B5EFF30583B2 +:105350000BB1002008BDFFF78FFB0028F9D11046E4 +:10536000DFF804C000DFF5E71137010810B402F0E0 +:105370000104920709D40C301CB15DF8044BFDF711 +:1053800062BD5DF8044BFDF74DBDC06801EA000247 +:105390002CB1914218BF00205DF8044B7047002AE1 +:1053A00008BF0020F8E70000F8B50D4617461E4676 +:1053B0000446C0B10378F32B15D1002913DBFFF7A6 +:1053C000D5FF90B996B131464320FDF723FC38B1A3 +:1053D000084B20465969FDF761FC4D6281F8237046 +:1053E0006FF0010001E06FF00300F8BD6FF0020004 +:1053F000FBE700BF18010024F8B5064670B3037838 +:10540000F32B2BD1002929DB00F10C0353E8002FEB +:1054100042EA010443E8004000B1F7E7B56825B966 +:105420002846FDF755FC2046F8BD696A304695F8D8 +:105430002320AF68FFF79AFF014668B195F8233043 +:105440009B0756BF6C6A044620EA04042846FDF711 +:10545000C9FB0022FDF764FC3D46E0E76FF0030462 +:10546000E1E770B50546846804B970BD616A2846F5 +:1054700094F82320A668FFF779FF014628B120465B +:10548000FDF7B0FB0022FDF74BFC3446ECE70000D3 +:10549000F8B504460E46174600211C2203F056FCC0 +:1054A00026823009EFF79AFE4FF4707105463046B8 +:1054B000EFF7B2FF238A0C4A012103F00F0306F035 +:1054C0000F066561204652F8233001FA06F6394688 +:1054D000A36105F11003183526606360C4E9025525 +:1054E000EFF778FF2046F8BD1CB10108C3681847E4 +:1054F000FFF7FCBF38B5D0F8C04201F00F05636874 +:105500009D4237D811F0800F4FF01C0234D002FBBF +:10551000054302FB054101223C3381F83D20012275 +:105520001D709A7094F8BC13914223D084F8BC2368 +:105530001A785B782068012B4FF020030CBF00F530 +:10554000106100F5306113FB02131968002904DBB8 +:105550001AB11A6822F080421A601A6842F40012E6 +:105560001A6025B904F57172217CF0F7CBF800239D +:1055700084F8BC33002038BD02FB014302FB01412B +:10558000002203F5FE7381F8FD21C8E770B50446DB +:1055900016460D4651BBD0F89432032B1FD1D0E9EB +:1055A000581291420ED9891A8A42C0F86011D0F877 +:1055B000C00288BF8AB2314698BF92B2EDF790FD23 +:1055C000284670BDD0F8B4321B6923B190F89C22F4 +:1055D000032A00D198472046FEF74AFEF0E7052B44 +:1055E000EED1C4F89412FFF785FFE9E7D0F8B432A2 +:1055F0009B6933B190F89C22032A02D10025984779 +:10560000DEE70225DCE7000000212DE9804808469E +:10561000BDB0FEF759FD0020F1F7D6FCEFF7C2FF51 +:10562000FFF7E8F8AC48FDF765FAAC4B186803687B +:105630009B689847AA4B1868002800F06B830368A2 +:105640009B6898471923A74A3021A748F5F728FEF9 +:10565000A64ED6F8B43213B10023C6F8B432A44C27 +:105660000622A44B0121DFF8A0C2C6F8B032002305 +:1056700086F89C12337023632362E3626362C4F88A +:105680000464C6F8C042C4E900C20222C4E9062389 +:1056900094F8BD33E26003F0FF07002B46D1964D2E +:1056A000032084F8BC73D5F8E0300B43C5F8E03034 +:1056B000D5F8E03009910B4007A90693069B4FF4FB +:1056C000C053CDE907320A23CDE90A038B48F1F72D +:1056D0004BFBBC2239460DA803F038FB4FF4802366 +:1056E0000CA80C934FF440132E93F0F799F8E8B9F7 +:1056F000834A05216520D36843F08073D360D5F8D1 +:10570000D83043F00063C5F8D830D5F8D83003F06E +:1057100000630593059BD5F8003123F00063C5F8BD +:105720000031EDF7F5FC774B2022DA600323276880 +:1057300084F8BD33744BDB6B13F4807308BF2361B3 +:10574000BB68D4F8108023F00103BB60A369012B70 +:1057500040F0EB82BB6B626B23F48033012ABB63A6 +:10576000FB6823F4840323F04003FB60FB6823F40D +:105770004013FB6003D1FB6843F48013FB603846A1 +:10578000EFF7A8FF0546B8F1010F10D1FB6D9BB2F2 +:10579000FB65FB6D43F07B7343F40033FB65BB6833 +:1057A00043F00603BB60BB6843F02003BB60002DE1 +:1057B00000F0D082022384F8BD332368A022D6F8FB +:1057C000C0025A625A6A42F420029A624F4BC6F8EB +:1057D000B4324F4BC6F8BC32F1F79CFA494B4FF448 +:1057E0000052C3F88820BFF34F8FBFF36F8F202282 +:1057F000C3F88C20BFF34F8FBFF36F8F424B5A69B2 +:105800009B691A4200F01A82394F3C68B9466369B5 +:1058100013F00103039340F011826269A3691A42F5 +:1058200000F00C826369A26913409B0703D563698A +:1058300003F0020363616369A2691340DE0629D5A0 +:10584000A36923F01003A361266AC6F3434306F05D +:105850000F05022B40F09D8347F6F0731E4214D0D3 +:105860001C23C6F30A18204603FB05954246D5F8CB +:105870000812EFF77BFFD5F808324344C5F8083229 +:10588000D5F814324344C5F814323A68936943F0AA +:10589000100393613B685A6999690A40150300F146 +:1058A0009D83134E3368B1465A6999690A4012F4D0 +:1058B000802F2FD0D3F8182803F50063374604F55E +:1058C000106BDB6913409BB2029300230193029B90 +:1058D000002B40F0C1861DE0283F0224700B0224FB +:1058E000E80A02249CBA010894270224E82702242B +:1058F000343F0224BC010024004402580000025836 +:105900000048025800E100E00000084008020024BE +:10591000440200243068426983691A4210D5D4F8E1 +:10592000043823F00103C4F8043896F8F433012B4B +:1059300004BF002386F8F433436903F00043436156 +:105940004369826913401A0510D5D4F80838DB077B +:1059500008D5D6F8043493F89C2283F89D220422BB +:1059600083F89C22436903F40063436143698269BD +:1059700013401F0111D5436903F000634361BA4B23 +:1059800093F8F423002A40F08287012283F8F4235D +:10599000426DC2F38302C3F8F8234369826913405E +:1059A000DD043ED5D4F8043804F5006223F0010389 +:1059B00053604FF484630361AC4B013B02D0016937 +:1059C0008906FAD404F51063DFF89CC24FF67F37DE +:1059D000DCF804100D460399A942C0F06387D3692F +:1059E00043F00113D361DCF83030002B00F07B87EB +:1059F000D2F8843043F00B03C2F88430536C43F088 +:105A00000B035364D4F80038994A23F4FE63317CC5 +:105A1000C4F80038EFF776FE3268536903F4805318 +:105A2000536134686369A26913409F0440F1BE80EA +:105A3000D4F8003923F4FF6323F00703C4F80039D6 +:105A4000D4F8042842F48072C4F80428D4F8082852 +:105A500012F0060304D012F0020F14BF02230F232A +:105A6000F360F0F751FCF768FBB2022B40F0598766 +:105A7000804B814A0344934240F241877F4B804AE6 +:105A80000344934240F23E87A0F574037D4AA3F598 +:105A90001053934240F23987A0F183737A4AA3F5F9 +:105AA000E7439342C0F03487784B794A03449342EA +:105AB00040F23187774B784A03449342C0F02E87F7 +:105AC000764B774A03449342C0F02B87A0F1B7731B +:105AD000744AA3F558539342C0F02687724B734A19 +:105AE0000344934234BF07230623E268003F4FF08C +:105AF000000822F4705218BF0127E260E26842EA0F +:105B00008323E3604023D6F80444D4F8C052C5F898 +:105B1000043205F5FE7195F8BC33A5F8FC81012B24 +:105B200085F8FF8107D00123286885F8BC33EFF79B +:105B300040FE85F8BC83D4F8C052402201234FF0C8 +:105B40000008C4F864214FF48070C4F8583105F19E +:105B50003C016A6495F8BC23A8879A4285F83F8087 +:105B6000A5F8428006D0286885F8BC33EFF721FEFF +:105B700085F8BC83012300214022A36184F89C3274 +:105B8000D4F8B8326262C4F894126160C4F8A41206 +:105B900023B1D4F8B43220465B689847D6F8043471 +:105BA00032681F74536903F40053536132685369B8 +:105BB000926913401D070FD5D6F8040490F89C3263 +:105BC000032B04D1D0F8B432DB6903B198473268B3 +:105BD000536903F00803536133685A6999690A40AD +:105BE000D40203D55A6902F480125A615A6999693C +:105BF0000A40900203D55A6902F400125A615A69A8 +:105C000099690A40510003D55A6902F080425A61ED +:105C10005A6999690A40520710D55C68630709D52B +:105C2000D6F80404012380F89C32D0F8B43201790C +:105C30005B68984733685A6814435C601C4B1A6869 +:105C4000511C1960282192FBF1F301FB1323002B57 +:105C50007FF4D4AD174E184D3478002C3CD1174A40 +:105C60002B7812782CE000BF343F0224410D030052 +:105C7000F8420224405327FFFF340C00401E1BFF54 +:105C80003F420F007F4F120020D6130060B6E5FEA2 +:105C90005FE3160000D3CEFE40771B00C05BB3FE6F +:105CA000C091210020753800E05459FEE09C41006D +:105CB000B82C0224B72C02243B0300243A0300240E +:105CC000BD4813442B7043681A6803681A420CBF1E +:105CD00001210021FDF72CFE2B780134A3F10A02EB +:105CE000E4B2D2B23470F02A05D9B4490A785042ED +:105CF0009B1A08702B702B78A3427FF47FADAE48BF +:105D000043681A6803681A420CBF01210021FDF79D +:105D10000FFE73E51923AA4A3021AA48F5F7C0FA05 +:105D2000A949AA4803F0FEFD92E4FB683846D4F87E +:105D3000289043F04003FB60EFF7CCFCBB6B0546BB +:105D4000B9F1000F03D143F48033BB631BE523F4A7 +:105D50008033FAE723683220DA6822F0C042DA6042 +:105D6000DA6842F08042DA60F1F722F967682B4680 +:105D70004FF01C0C4FF0010E2846D9B25A1C8F422E +:105D800000F2B28000234FF01C0C1946D8B2013348 +:105D9000874200F2B8802368D4F82CC0D4E90312FB +:105DA0000292D4E906E201920022904602F14000FC +:105DB000013203EB80000F2AC0F80480F6D103F50E +:105DC0000060BCF1000F40F0AB80426842F002027C +:105DD00042609A6B22F400129A631A6842F0400201 +:105DE0001A601A6842F080021A600022BEF1010FA8 +:105DF000C3F8002ED3F80028C3F80028D3F80028F1 +:105E000040F09680002940F09080C3F800284FF4BD +:105E100084621A616E4A013A00F08D801969890620 +:105E2000F9D410221A616A4A013A00F08680196991 +:105E3000C906F9D4002203F510614FF090484FF0E5 +:105E4000006996464FF67F3A02614261C26197420D +:105E500075D1002703F530614FF090484FF000698D +:105E6000BE464FF67F3ABA427ED1026922F4807272 +:105E7000026100229A616FF080425A61029A1AB957 +:105E80009A6942F010029A619969524A0A439A61EA +:105E9000019A1AB19A6942F008029A61BCF1010FA5 +:105EA00005D19A6942F0804242F004029A61002DC5 +:105EB0007FF480AC012284F8385084F8BD23626AF4 +:105EC000012A0DD184F8F453C4F8FC239A6942F0F6 +:105ED00000629A615A6D42F0805242F003025A65A4 +:105EE0001846EFF735FC68E40CFB014383F83DE00E +:105EF00083F83C10A3F8421083F83F001865C3E90B +:105F00001100134639E70CFB004282F8FD1182F8BC +:105F1000FC0182F8FF11C2F81012C2E9811135E7C5 +:105F20009A6B42F400129A635FE742F001026CE759 +:105F300042F0030269E7012573E701257AE7D1F80A +:105F400000B0BBF1000F0CDA42B9C1F80090C1F803 +:105F500010E00132C1F808A0203178E7C1F80080D4 +:105F6000F5E7C1F800E0F2E7D1F800B0BBF1000FAF +:105F70000CDA47B9C1F80090C1F810E00137C1F858 +:105F800008A020316FE7C1F80080F5E7C1F800E014 +:105F9000F2E7062B7FF479AC08220F492046C6F3BE +:105FA0000A16EFF7E3FB1C2303FB0595D5F8143223 +:105FB0001E44C5F8146268E4280B02243A03002446 +:105FC000C7BA010894270224F2BA0108D8010024B4 +:105FD000410D030000383C80F8420224D3F81878C1 +:105FE00003F5006304F53069DFF8A0B2DB694FF018 +:105FF00000081F403F0C002F3FF453ACF80740F15E +:106000007B81A24D5FFA88F6286800F5306C0CEBB6 +:1060100046139A68D0F8143802EA030A2B461AF09D +:10602000010F1BD0296901220CEB481C0129C9F87A +:106030000820D0F840E0DCF8082040F09E801107EE +:1060400007D5934B9E4509D9100407D54FF400435B +:1060500002E0910670D52023CCF808301AF0080F22 +:1060600000F037812B680822C9F808201A6C03F564 +:106070003063019203EB481301999A6808468449FA +:10608000884204D9110402D54FF400429A607F4A35 +:10609000D2F8045492F8C40305F52A7185F8A802D1 +:1060A00092F8C5C385F8A9C292F8C73392F8C663BF +:1060B00006EB0326B6B2A5F8AA6292F8C9E392F8F5 +:1060C000C83303EB0E239BB2A5F8AC3292F8CBE3B6 +:1060D00092F8CA2302EB0E224FF0010E92B2C5E9EC +:1060E000A5E200F01F0EA5F8AE22BEF1010F00F0F0 +:1060F000AF81BEF1020F00F0CA81BEF1000F40F087 +:10610000A88200F06000202800F0F781402800F00D +:10611000F481002840F08780BCF1090F00F28380F1 +:10612000DFE81CF06F018901810083018100F2002A +:106130004900810058011E0112F0280F8ED15449E8 +:106140008E4501D9120481D4DCF81020DBF804124A +:10615000C2F312028A1ACBF81422DBF80822114487 +:10616000D5F8102258EA0202CBF8081210D1494A99 +:106170000121EFF7C7FA454B0AE047498E4512D196 +:1061800011043FF563AF900602D52022CCF8082019 +:106190001C223146D5F8040402FB0633D3F808224A +:1061A000FFF7F4F95AE7D5F8101258EA0101EFD1D8 +:1061B00005F57172DDE70023ADF83030330A013B9D +:1061C000062B30D8DFE803F00416222F2F4E57009D +:1061D000D5F8B0321B680CA9287C9847BDF8302050 +:1061E000002A64D0B5F8AE32002B57D12846FEF70E +:1061F0003FF860E02A7CD5F8B4322AB99B6A0CA833 +:10620000984702234370E9E7DB6AF8E7F1B2052912 +:106210001FD8DFE801F0030A0E12161AD5F8B032C3 +:106220005B68002BD7D12846BDE0D5F8B0329B681B +:10623000F7E7D5F8B032DB68F3E7D5F8B0321B6981 +:10624000EFE7D5F8B0325B69EBE7D5F8B0329B6980 +:10625000E7E7D5F8B4329B6B002BE4D00CAA2846B4 +:106260009847BBE72B7C002BDDD1D5F8B4320CA8C6 +:106270005B6B9847B2E72B7C002BD4D1D5F8B432B6 +:106280000CA81B6B98470723BCE700BF343F0224D0 +:106290000A30544FF84202240A31544F9A420146C0 +:1062A000284628BF1A46ADF83020FDF7D5FFB5F8CF +:1062B000AE32002B9AD0019B1A46CC4B9A4208D999 +:1062C000CB4B1969012904D103F571721868EFF7F6 +:1062D00019FA1AF0100F02D01023C9F808301AF07A +:1062E000200F02D02023C9F808301AF4005F03D031 +:1062F0004FF40053C9F8083008F101087F0809F18C +:1063000020090BF11C0B76E61A438CD17F2E8AD81C +:1063100095F89C32032B86D0F3B2D5F8C01285F8DD +:106320009E3291F8BC03012810D0086881F83830FB +:10633000D0F8003823F4FE63C0F80038D0F80038F5 +:1063400043EA0613C0F8003881F8BC232846FDF75D +:106350008FFF1EB1022385F89C32ACE70123FAE7D8 +:10636000F1B2A44E012931703FF65DAF95F89C3231 +:10637000022B09D0032B19D02846ECF791FE317877 +:106380002846FDF701FC96E700293FF42FAF0121D5 +:106390000323696085F89C322846FDF7FCFB022840 +:1063A00028467FF424AFECF77BFE84E739B902235B +:1063B0002846696085F89C32FDF7E6FB16E76968B8 +:1063C00001293FF413AFC9B22846FDF7DDFB317850 +:1063D0006960E1E7012A7FF426AF95F89C32022B31 +:1063E0000AD8002B3FF41FAF2946002341F8083F8D +:1063F0002846FDF731FF5EE7032B7FF414AF291D1C +:10640000F6E795F89C32013B022B3FF60CAF022ACF +:106410007FF409AF0123EB60D5F8A4320BB103235D +:10642000EB60022205F10C01E2E7012E7FF443AF9D +:10643000C5F8A462DAE695F89C32013B022B3FF6E0 +:10644000F2AE012E7FF437AF0023C5F8A432CDE6BB +:1064500000F06002402A02D042063FF5E4AE95F813 +:106460009C22013A022A3FF6DEAEDBB2022B3FF657 +:10647000DAAED5F8B43228469B689847B5F8AE3204 +:10648000002B7FF418AF00287FF415AFAEE600F0C4 +:106490006000202831D040282FD000287FF4C3AEE0 +:1064A000BCF1010FD9B240D0BCF1030F2BD0BCF12D +:1064B000000F7FF4B8AE95F89C22022A00F09C8071 +:1064C000032A7FF4B0AE5BB201F00F001426002B5C +:1064D00006FB005080F29F808269002A3FF4A3AE41 +:1064E00001F07F0202FB06662E4411F07F0240F0AD +:1064F0009E803260022231467AE7D5F8B4322846CF +:106500009B689847D7E695F89C32022B5AD0032B0C +:106510007FF489AE4B063FF469AE56EA02037FF47E +:1065200065AE2846FEF7E6FF60E695F89C22022A53 +:1065300048D0032A7FF477AE002E7FF4BCAE4A0623 +:106540003FF454AED5F8C02201F00F0150688142EB +:106550003FF64CAEC1EBC10013F0800F4FF01C03AF +:106560004FEA800039D03C3003FB01230126104460 +:1065700083F83D6000230170837092F8BC33012BD7 +:106580003FF434AE012311684FF0200C82F8BC3385 +:1065900043780678012B0CBF01F5106301F53063D9 +:1065A0001CFB0633196821F400111960C178023907 +:1065B000012903D8196841F080511960002382F83D +:1065C000BC3313E64E0628463FF4EDAEFEF792FFCD +:1065D00080212846FEF78EFF6DE600F5FE7003FB76 +:1065E00001230026104483F8FD61C3E70A30544FAD +:1065F000343F0224F83E02244E067FF414AE1806FF +:106600004FF000034FF002024CBF05F1140105F5F5 +:10661000AA710B60ECE6D0F85821002A3FF403AED3 +:1066200001F07F0206FB025606F5AA765DE7002B15 +:10663000D5F8C0024FF01C03B5BF03FB020103FBFA +:10664000010391F83E3093F8FE3103B1012333602A +:1066500050E700F08001BCE7029BD90740F10C81B4 +:10666000D9F800009DF804A0D0F8101800F51062C9 +:10667000D0F834580AF00F0802EB4A1225FA08F84D +:1066800092684FEAC8185FFA88F848EA010808EAF1 +:10669000020818F0010F42D0019BD4F8342803F00F +:1066A0000F01012303FA01F122EA0102D9F81010C7 +:1066B0009942C4F83428CBF808300BD1019BD7E9B4 +:1066C00011522A44BA64D9F85020134302D1984A8F +:1066D000EFF718F8974BD3F80454BAF1000F40F0D5 +:1066E0009B80D5F89422022A40F08E80D5E90820BC +:1066F000824260D9121A996CD5F8C0022A6292B20D +:10670000ECF7D9FC52465146D5F8C002ECF7E8FC4C +:1067100095F8A022012A02D1002285F8A02218F0C3 +:10672000080F02D00822CBF8082018F0100F02D072 +:106730001022CBF8082018F0400F02D04022CBF8EE +:10674000082018F0020F02D00222CBF8082018F01F +:10675000800F00F09180D7E91421914200F28C80E3 +:10676000521A796CD9F800508A42019B05F5106CD9 +:1067700028BF0A4605F580510CEB431C033201EBA0 +:106780000A339208DCF818E01FFA8EFE9645D7E926 +:1067900014016FD3884201D900284CD1019A0121FC +:1067A000D5F8343802F00F0201FA02F223EA0203AC +:1067B000C5F8343860E0E969B1FBF0F200FB121271 +:1067C00072B988420CD8D5F89822914208D2524624 +:1067D0005146D5F8C002ECF76EFCC5F898A291E7D7 +:1067E000D5F8B422D2682AB195F89C12032901D1B8 +:1067F0002846904780212846FEF77CFE0522C5F8F2 +:106800009422002211467FE732F0040380D18021D8 +:106810002846FEF76FFE7BE7D5F8B4225269002ABE +:106820003FF47DAF95F89C1203297FF478AF514671 +:106830002846904773E7411A7A6C99F81000914204 +:1068400028BF1146CA1C920830B1B86C0844B8641D +:10685000786D0144796595E788B2D7F848E0033050 +:1068600080080EEB80007045EFD05EF8048BC3F813 +:106870000080F8E7884291D9019B1C370BF1200B6F +:1068800001330193029B5B080293FFF720B8D3F812 +:10689000043493F89C2283F89D22042283F89C22DE +:1068A000FFF77BB89F60203353F8201C21F40011C0 +:1068B00043F8201C53F8201C41F0006143F8201CD1 +:1068C000C3F8E871D3F8E01121F40011C3F8E01126 +:1068D000D3F8E01141F00061C3F8E01103990131F0 +:1068E0000391FFF775B8536943F4005343F02B034A +:1068F0005361136943F00B031361FFF783B80F2350 +:10690000FFF7F3B80E23FFF7F0B80D23FFF7EDB84C +:106910000C23FFF7EAB80B23FFF7E7B80A23FFF7CA +:10692000E4B80923FFF7E1B80823FFF7DEB800BF9A +:10693000F8420224343F0224094B0A4A1978FF29FD +:106940000BD101339342F9D1074A1978FF2904D1B9 +:1069500001339342F9D1012070470020704700BFF6 +:106960000003000800040008000500085248F8B5BC +:106970000578BFF35B8F15F0010540F09280F6F7C4 +:1069800047FF002800F08D804C4C5C224C4B294680 +:1069900004F108004B4E236001274B4B636002F06B +:1069A000D5F93B23201DC4F8A850A4F89A30474BD2 +:1069B000A4F86850C4F88C5084F89850C4E9276350 +:1069C0004FF4003366266366414BA4F8A460C4E923 +:1069D0002437404BC4E92B35F6F7C8FD04F1BC0061 +:1069E000A4F8B860F4F746FC3B4B3C48C4F8F431DB +:1069F000C4F8005284F80452FBF7DCFBF4F746FAC3 +:106A0000374A1568092D51DC364B1B68981E19460C +:106A100003F1120630F9027F662F4AD0B042F9D155 +:106A2000143308460231B0F9006001363BD16623C9 +:106A300003800135156000252848FBF7BBFBF4F700 +:106A400005FA0020002100224FF0FF33C4F8B450B3 +:106A5000C4F8602184F8542184F8FD2184F8FE21D3 +:106A60000222C4F81831C4F8E830C4F8FC30C4E994 +:106A700044014FF400300121C4F8F8010320C4F8A8 +:106A8000281184F8F010C4E93802C4E93D333522F6 +:106A90004FF080730848C4F8EC20C4F80031F6F7D2 +:106AA000AFFE0648F8BD9942BBD1C2E76FF00105C1 +:106AB000C2E74FF0FF35BFE7AC2B0224C02C022405 +:106AC000F0C101083C004200DCB701083D001200A3 +:106AD00040420F006DD50008005A6202781402246B +:106AE000A0140224D00600242DE98048774AAFB0D4 +:106AF000136804AF53B9764B7649196001F502313A +:106B00000B6843F480730B60012313600720DFF8E8 +:106B1000F4B1FDF7F5FA10F0010000F0CB8001238D +:106B20006D488BF8003003F02FFD00206B4EFDF711 +:106B3000E7FA05466A480478BFF35B8F14F0010456 +:106B400030D1F6F765FE68B3664BD3F8D02051001C +:106B500000F1B380D3F8D020002AC0F2AE80D3F881 +:106B6000D020D20000F1AB80D3F8D020500100F14A +:106B7000A680D3F8D020D10100F1A380D3F8D02093 +:106B800012020BD4D3F8D020900200F19C80D3F8ED +:106B9000D03013F4800F0CBF0B2401245048347004 +:106BA000F6F72EFE504C2378BFF35B8FD9070BD43A +:106BB0002046F6F72DFE38B14A4B2046D3F8D020B8 +:106BC0004A4B1A60F6F71CFE464A0820D2F8D0302D +:106BD00043F48033C2F8D03034782146FDF774FA9C +:106BE000012C08D14DF659710020FDF76DFA4FF4D4 +:106BF000FA70F0F7DDF901229F2107F13400FEF76A +:106C000047FCF0F7AFF90A20F0F7D2F94DF65973C7 +:106C10009D4200F02082FFF78FFE0446002800F01E +:106C20003B829BF8003013B1314803F0ADFC40F2D9 +:106C3000AA739D4240F041810120FDF761FA0546AB +:106C4000C4B20220FDF75CFA80460320FDF758FA33 +:106C50009BF8003078612BB1034642462146254817 +:106C6000F4F72EFB2448FBF745FF14F0020F234EE8 +:106C700061D014F0600A4FF02800DFF88C9045D006 +:106C8000F6F7B0FD002308F10062C8F50011C0F866 +:106C9000009080F820304362C0E904230132C0E94B +:106CA0000133C0E9061301D0002943D10021144863 +:106CB000ECF79AF98BF8000037E706246EE7042416 +:106CC0006CE703246AE7022468E700BFF86802243F +:106CD000C4270224004000584DBB0108C82E0224DE +:106CE000B02B022400440258B42B0224CC2E0224E0 +:106CF0006BBB010888BB0108283F0224F43E022434 +:106D00000101FF80E40A0224C8AD0108F6F76AFD1C +:106D10004FF000620023C0F808A080F820A0C0F85F +:106D200024A0C0E904234FF400120023C0E9009A14 +:106D3000C0E906233060620702D5FFF717FE306016 +:106D4000230705D59BF8003013B1C44803F01CFCA1 +:106D5000280614D528203568F6F744FDC04B0022DC +:106D600080F819803060C0E900350023C0E90223B3 +:106D7000C0E9042300230376C36180F8203014F0B7 +:106D8000400FB84D08D0C820F6F72CFD8146B64913 +:106D9000ECF758F9C5F80090A10607D55420F6F78E +:106DA00021FD0446B049ECF731F92C6028683168C0 +:106DB000002800F0AB8003685B6A9847064600280D +:106DC00040F0A180A949AA4801F0B6FB80460028FE +:106DD0006ED003460422012107F1240001F028FCB3 +:106DE00032463146404601F033FC786AFCF774FDC8 +:106DF000421C044600F01E819D4907F11C00FBF770 +:106E0000EBF907F11C00F7F72DFA054600283ED1F3 +:106E100001F01AF913237D61036020464FF0000949 +:106E2000ECF7F6F9B0F5804F924D28BF4FF4804053 +:106E3000064601F019FF82467B69994580F0D480AF +:106E4000434632460121504601F0F2FB04EB0901B2 +:106E500020463961ECF7DCF939690246B1FBF0F301 +:106E600000FB13133BB92846FBF798FB42F2107066 +:106E7000F6F7AEFC39690A46334651462846FBF719 +:106E8000D9FC4FF47A70B144F6F7A2FCD4E703685A +:106E900007F15002F9699B699847051E05DA6D42B2 +:106EA00001F0D2F87E610560B7E73B6E7B61B4E725 +:106EB0006FF002010020FDF707F96F4B9BF80010FF +:106EC0001A6802F07F42B2F1005F00F0B8801A68E1 +:106ED00002F07F42B2F1105F00F0B1801A6802F058 +:106EE0007F42B2F1405F00F0AA801B6803F07F434D +:106EF000B3F1605F00F0A380002900F0AC805F4830 +:106F000003F042FBA7E06FF00101D3E700296BD04B +:106F10006B46084608EE903A0B689B689847054612 +:106F2000002840F08980306803689B6A98471028E1 +:106F300002463068B8BF102201689300073323F07F +:106F40000703ADEB030DD3170DF11009CDE90023B5 +:106F50002B464C6942464946A047D9F80000FCF749 +:106F6000BBFC431C044662D0ECF752F9B0F5804FED +:106F700028BF4FF48040814601F076FE08EE100AEB +:106F80007B69AB422DD93068002218EE101A0368D5 +:106F9000019208EB0502CDF80090D3F814A000236D +:106FA000D04704EB050A2046ECF732F90246BAFB5B +:106FB000F0F300FB13A33BB951462E48FBF7EEFA62 +:106FC00042F21070F6F704FC4B46524618EE101AC7 +:106FD0002848FBF72FFC4FF47A704D44F6F7F8FB86 +:106FE000CEE718EE903A9D462248FBF767FD244B0A +:106FF00000222448FB650021234BC7E915223B658D +:1070000007F15003CDE90201FA6D204800920ECB42 +:10701000F7F7D0FA9BF8003013B11D4803F0B4FA2B +:1070200000210846FDF750F8EFF784FFFEE718EE61 +:10703000903A9D4621463DE76FF003013AE719B1CA +:107040000D491448F4F73CF900210846FDF73CF8D7 +:107050000948F7F7A5F8FEF7D7FA00BFA4BB010867 +:1070600044C20108303F0224BFAB0108B9BB01088C +:10707000BCBB0108283F022400000408F7BB01083C +:107080002D390108400D030009390108600600246C +:10709000CBBB0108DCBB0108834B07F15005834AD9 +:1070A000FB65834B3B650023C7E91500CDE902234F +:1070B000FB6D8048009395E80E00F7F77BFA2146B8 +:1070C0002046FDF701F89BF8003013B17A4803F031 +:1070D0005BFA7A4C4FF4707600213246204601F07C +:1070E00035FE774B04F1200100206362A146754B09 +:1070F0002365754BE365EDF73DFA04F14C01012082 +:10710000EDF738FA04F158010220EDF733FA626A1C +:107110007861294600203E65ECF7ECFA88BB3B6DB0 +:107120002946226D0120A3623E65ECF7E3FAF8B12F +:1071300009249BF8003023B14FF470716348F4F7D1 +:10714000BFF801239C4289F864302CD15B4C604E1F +:1071500094F86430042B87F8573000F20483012B35 +:1071600000F2078300F09783FF2384F8643092E3F2 +:107170003B6D2946E26D022063653E65ECF7BAFA85 +:1071800008B10124D5E73B6D206A2366ECF7E6FAE7 +:107190000446D9F85800ECF7E1FAA0422CBFC9F830 +:1071A0006800C9F868400020EDF75AFA824658B1E5 +:1071B0009BF800301BB100214648F4F781F83F4BA3 +:1071C000012283F86420C1E7D9F828E0BEF5707F7A +:1071D00004D8D9F854C0BCF5707F07D99BF80030AB +:1071E000002BECD03C4803F0CFF9E8E7D9F8583051 +:1071F0000446D9F824B002469B6801460646386129 +:107200007B60D9F85030FB6003468E450ED894451C +:107210000CD88E452E4C04D1944502D13B699E4238 +:1072200062D02378002BCAD02C48DCE783421BD1E4 +:107230000BEBC108FD680131D8F80480434405EB2D +:10724000C2080132D8F8048040448342DDD1386955 +:107250001E44184438617868984221D21C4B1B7830 +:10726000002BACD01E48BEE70FD20BEBC108022C9E +:10727000D8F80480434405D1154B1B78002B9ED0D1 +:107280001848B0E701310124DFE7FD68012C05EB68 +:10729000C208D8F804804044EED001320224D4E77A +:1072A000002420462346B0E72D39010890D0030082 +:1072B00061390108B00B022409BC01082007002431 +:1072C000F84A0224FC860224FC6802241CBC010843 +:1072D000E40A02245CBC010886BC01081BBD01084D +:1072E000E6BC0108B2BC01082022FF2107F15C00C6 +:1072F00001F02CFD0123002007F124013B6503F17F +:107300000123F867C7E91530EDF7D6FB07F11C013B +:107310000220EDF7D1FB23783BB397F82430012B03 +:1073200061D0A74AA749032B18BF0A4697F8271030 +:1073300097F82530019197F82610A3480091A349AA +:10734000F3F7BEFF237883B13B7F012B4DD09C4ADE +:107350009C49032B18BF0A46F97F7B7F0191B97FB7 +:10736000994800919A49F3F7ABFF97F826304FF010 +:10737000000B97F824503E7FDFF858823B61294686 +:1073800098F80000EDF7DBFB002834D0314698F880 +:107390000100EDF7D4FB70B398F80220042A02D064 +:1073A0003B699A4227D18B4B03EB8B03DD78237823 +:1073B00053B1E5B1012D1CD08749884B022D18BF70 +:1073C00019468748F3F77CFF012DFD6700F0B08078 +:1073D000022D00F0AF80E5B12378002B3FF4EFAE33 +:1073E00000218048E9E6804AA0E77F4AB4E77F4968 +:1073F000E7E77F49E5E70BF1010B08F10408BBF172 +:10740000040FBCD123781BB17A4803F0BDF80023E8 +:10741000FB6797F85530012B40F02A813B6D012B1B +:1074200040F0268197F85400012840F0218197F818 +:107430005760012E40F08A8107F11C010020EDF712 +:107440003BFB0546002840F0458107F1240130460A +:10745000EDF732FB012840F03A8123781BB1294631 +:107460006548F3F72DFF654B7B62002387F82830D2 +:10747000FB7F4FF000083D7F3B6197F8246097F851 +:10748000273097F81EA0DFF880B1FB6029469BF8F3 +:107490000000EDF754FB002800F0228131469BF8F4 +:1074A0000100EDF74CFB002800F01A819BF8022048 +:1074B000042A03D03B699A4240F012819BF80320D2 +:1074C000042A03D0FB689A4240F00A819BF804200A +:1074D000042A02D0524540F0038123787BB19BF807 +:1074E0000530022B00F0F880032B00F0F7804449B0 +:1074F0003A4A042B18BF11464248F3F7E1FE9BF8C5 +:107500000540A31E022B00F2E580022C03D0042CC0 +:107510000CBF04240324012007F15001EDF786F984 +:10752000002800F0EB8001280CBF01240524E5E0D1 +:107530004FF0020A07F124015FFA8AF0EDF71AF81A +:10754000064600287FF448AFD7F824B05846EDF738 +:1075500004FB9BF800303861022B06D0012B2BD99D +:107560000725786AECF7F2FF35E74FF0030A0025AC +:10757000A84638690123D9F8681007F11C0201FBFD +:1075800008015846ECF77AF900286FDB012207F171 +:107590001C015846EDF7CAF9002837D016B1002D66 +:1075A00008BF454608F10108C245E2D1002E40D08F +:1075B000002D08BF554631E04FF4346AD7E700BFCD +:1075C00020BB010826BB010854BD010846BD0108C7 +:1075D00093BD010848C30108A1BE01082ABB0108E8 +:1075E0009BBD0108E2BD01081BBB0108BDBD010830 +:1075F00013BD0108AEBD010813BE0108030103035A +:107600003CBB01085CBE010858C3010866B3002DED +:10761000C8D0237813B1A74802F0B6FF0323B5FB07 +:10762000F3F35A1C03EB4303ED1A3A65013587F86F +:107630005450786A012307F11C0281688039ECF705 +:107640001DF9054600287FF4C7AE012207F11C0191 +:10765000786AEDF76BF908B101233B773B7F03F0C4 +:107660000F0387F857307CE701269BE7012578E771 +:1076700007F15000904DEDF7B9FA97F8573085F8BB +:107680006430033B012B05D8EDF7F8F910B1FF2367 +:1076900085F8643097F85730023B022B0BD8EDF792 +:1076A00013F840B1FF2385F8643023783BB1834859 +:1076B00002F06AFF03E095F86430FF2BF5D007F184 +:1076C0005000ECF7CDFF012385F864303EE500283B +:1076D0003FF4CEAEFF2411E079490DE779490BE77D +:1076E00008F101080BF1060BB8F1030F7FF4CEAEE1 +:1076F000237813B1744802F047FF01246E4B83F8DE +:1077000064406D4B93F86430012B7FF41FAD002073 +:10771000ECF782FF0446002007F15001EDF786F8F0 +:1077200014B100283FF412ADD9F82C40012007F124 +:107730005001EDF77BF8654B9C427FF407AD0028C4 +:107740007FF404AD042389F86430FFE407F15001AD +:10775000EDF76CF8584B08B1052232E597F8572041 +:1077600083F86420CDE7052B7FF4FEACEDF786F9B6 +:107770007CE00020ECF750FF0546002007F15001A7 +:10778000EDF754F80DB100287DD033783BB1504867 +:1077900002F0FAFE337813B14E4802F0F5FE07F11D +:1077A0001C0100200025ECF7E5FE07F12401012073 +:1077B000ECF7E0FEA846D4F828B0C3452ED1236CE0 +:1077C00013F00C0F39D133781BB129464248F3F737 +:1077D00077FD00230095F9691A46786AECF7DCF822 +:1077E0007861002835D1D9F850300146786A5A6856 +:1077F000ECF708F8D9E91423013B52F8331002EBF7 +:10780000C30013684268C91A786AEBF7FBFFF8698E +:10781000ECF79CFE786AECF799FE1AE0D9F8243070 +:107820002946F86903EBC80308F10108D3F804A05E +:1078300052465544EBF7E6FFBFE7284907F15003EE +:107840007A6A01F14000ECF789F9002811DA032384 +:107850007B6194F86430DA1E012A1AD8EDF70EF92C +:10786000786100287FF480ACECF72EFF786190B14E +:107870007AE4A8D107F1500201211948ECF7BEFFC4 +:107880000028A0D0E3E707F15000EDF7AFF97861E9 +:10789000DFE7022BE8D094F86430FF2B25D1337852 +:1078A00003BB07F15000ECF7DBFE786108B34FF043 +:1078B000FF352EE0C2BD0108200700240ABE0108E2 +:1078C00043BB010848BB01086DBE01083DB8F396F3 +:1078D0007FBE0108AEBE0108C9BE01084C070024E6 +:1078E0008C0700241F4802F04FFE94F86430012BEF +:1078F000D7D100210846ECF799FF054648B9014663 +:10790000302207F1500001F021FA236A7D615B68A3 +:10791000BB60A06DECF71AFEE06CECF717FE206A76 +:10792000ECF714FE7B69002B08BF2B461D464BB1BC +:107930003378002B3FF48FAB29460B48F3F7C0FC9C +:10794000FFF789BBFCF756FFA468BB6823441C46BD +:1079500033781BB121460548F3F7B2FC2046F6F711 +:107960001FFC00BF0ABE010808BF010837BF01089D +:107970001FB5134B6C460B250FCB84E80F00204638 +:107980001C24FDF7E1FC0F4B18600F480F4B4560BE +:1079900003600F4BC4608360FDF7D6FC0D4B18608D +:1079A0000D480E4BC460C0E900350D4B8360FDF7F8 +:1079B000CBFC0C4B186000F0C1FFFFF795F800BF3F +:1079C00030C10108882702243C4302246ABF010811 +:1079D0004C43022480270224FC3E022477BF010886 +:1079E0000C3F0224402702248A4A2DE9F84F1368ED +:1079F00053B9894B8949196001F502310B6843F489 +:107A000080730B60012313600020854CFCF778FB2A +:107A100040F2AA73834D984263D10120FCF770FBBA +:107A2000C0B220600120FCF76BFB00F00700207162 +:107A30000120FCF765FBC0F3001060710120FCF72A +:107A40005FFBC0F3C010A0710220FCF759FBA060DF +:107A50000320FCF755FBE0600420FCF751FBC0B2AB +:107A600020620420FCF74CFB00F0070084F824009F +:107A70000420FCF745FBC0F3001084F82500042027 +:107A8000FCF73EFBC0F3C01084F826000520FCF78D +:107A900037FBA0620620FCF733FB2B78E0628BB14A +:107AA000614802F071FD2B7863B1227921685F484B +:107AB000F3F706FC2B782BB194F82420216A5C485C +:107AC000F3F7FEFB237994F8242003F002019A4295 +:107AD00040F01481F9B12B784BB3564802F054FDB5 +:107AE00025E002204FF4F013A4210422A0622160BB +:107AF000A2802162A284C4E9020301234FF4003072 +:107B0000A37184F826302B78E062002BDAD04A4843 +:107B100002F03AFDD6E7130703D52B783BB147486F +:107B2000DCE7570714D5FEF721FF20612063637956 +:107B3000002B3AD023799E070FD52B7833B13D48DF +:107B400002F022FD6379002B00F08980BDE8F88FF8 +:107B50002B78002BEBD03A48C0E713F0080604D08E +:107B60002B78002BF2D03548EAE7580718D52820A3 +:107B7000344FF5F737FE216906720676D4E9022301 +:107B8000C0E90071C0E90426C0E908362BB9012319 +:107B9000002203760023C0E9082360616063D1E717 +:107BA0002B78002BD2D02648CAE7A379002B53D0DC +:107BB000226A23689A4204D02B7813B1224802F03B +:107BC000E3FCA268A36A9A4204D02B7813B11F4841 +:107BD00002F0DAFC28201E4EF5F704FE2269002789 +:107BE000A168606141766063C0E9006200220026FE +:107BF0000276C26180F82020C0E90267C0E904670C +:107C0000F3F73AFF00289DD02B78002B9AD011482B +:107C100096E700BFF8680224C427022400400058F9 +:107C2000B0050024E40A022481BF010893BF0108C3 +:107C3000AABF0108D2BF0108BFBF0108DDBF01080C +:107C4000E5BF0108FCC20108EEBF0108F7BF01084B +:107C500044C2010801C001082369636163632368AA +:107C6000590643D5C820F5F7BDFD73490646EBF725 +:107C7000E9F9E661E06961690368E0635B6A984776 +:107C800020B12B7813B16D4802F07EFC382001261C +:107C9000F5F7A8FD0027E3680025694A4FF48058EE +:107CA000DFF8C4B14FF00009DFF8C0A18260C0F86E +:107CB00000B04561A061C0E903A3C0E90667C0E95F +:107CC0000867C0E90A893820F5F78CFDE36A5D4A48 +:107CD000C0F800B0C0E9022AC0E90435C0E906676F +:107CE000C0E90867C0E90A89A0632FE75420F5F7C7 +:107CF00079FD51490646EBF789F9BAE729B12B78A6 +:107D000073B1514802F040FC0AE01A0703D52B7802 +:107D100033B14E48F6E75F070CD5FEF727FE20612A +:107D200094F824309E070AD52B789BB1484802F07E +:107D30002BFC0FE02B78002BF2D04648E2E7180727 +:107D400003D52B7833B14148F1E759070ED5FEF73B +:107D50000DFE20636679002E42D023799A070AD55A +:107D60002B7843B3384802F00FFC24E02B78002B2B +:107D7000F0D03948DBE713F0080603D02B78D3B1F5 +:107D80003248F0E75F0726D52820344FF5F72AFD63 +:107D9000216906720676D4E90223C0E90071C0E9C0 +:107DA0000426C0E908362BB90123002203760023FC +:107DB000C0E90823606194F82560002E00F0DD80A2 +:107DC00094F8243098072FD52B78002B69D02048C1 +:107DD00002F0DAFB65E02B78002BECD01D48C2E7FF +:107DE000A379F3B128204FF00008F5F7FBFC4FF022 +:107DF00000092169A2681A4F06764276C66180F8AA +:107E000020606061C0E90071C0E90289C0E90489AD +:107E1000F3F732FE0028CED02B78002BCBD01148C0 +:107E2000A1E723696361C6E713F0080620D02B7829 +:107E3000002B36D00548CBE7BFAB010808C00108CE +:107E400010C0010823C00108D2BF0108DDBF01082E +:107E50003EC0010833C0010849C00108FCC2010846 +:107E600044C2010854C00108A8C201081FC001088B +:107E700059077DD528205C4FF5F7B4FC216B0672BD +:107E80000676D4E90A23C0E90071C0E90426C0E9F6 +:107E900008362BB90123002203760023C0E908230A +:107EA00060636379002B2FD123685A0640F18C80E0 +:107EB000C820F5F797FC4D490646EBF7C3F8E66195 +:107EC000E069616903685B6A984720B12B7813B158 +:107ED000474802F059FB3820F5F784FC454AE3682F +:107EE0000260454AA0618260444AC0E9032300233E +:107EF000012243610023C0E90623C0E908234FF4AF +:107F000080520023C0E90A2394F82530002B7FF427 +:107F10001DAE236A5B065FD5C820F5F763FC3849C0 +:107F20000646EBF78FF8E663E06B616B03685B6A0C +:107F3000984720B12B7813B1324802F025FB382046 +:107F4000F5F750FC2B4AE36A02602F4A82602B4A05 +:107F5000C0E903230023012243610023C0E9062373 +:107F6000C0E908234FF480520023C0E90A23BBE68E +:107F70002B78002B95D025482AE794F8263003B3B8 +:107F800028204FF00008F5F72DFC4FF00009216B79 +:107F9000A26A1F4F06764276C66180F82060606351 +:107FA000C0E90071C0E90289C0E90489F3F764FD02 +:107FB00000283FF476AF2B78002B3FF472AF1548C2 +:107FC00006E7236B63636CE75420F5F70BFC074966 +:107FD0000646EBF71BF872E75420F5F703FC084957 +:107FE0000646EBF713F89EE7FCC201086EC00108D5 +:107FF00072C00108A8C2010883C001081FC001089F +:1080000093C0010897C00108A8C0010849C0010831 +:1080100044C2010861C0010810B5FEF78DFC68B9C3 +:10802000074C23781BB9FFF7DFFC01232370054BB6 +:108030005A790AB1586910BD9869FCE70020FAE73F +:10804000A0060024B0050024014B1868704700BF4B +:108050003C03002470B505460C4611B90026304695 +:1080600070BD18B183690BB900F094F92C4B9C4298 +:1080700014D16C68636ED80705D4A389990502D41E +:10808000A06D00F08AFDB4F90C308BB9666E16F065 +:108090000106E3D1A06D00F082FDE0E7214B9C4298 +:1080A00001D1AC68E6E7204B9C4208BFEC68E1E7F1 +:1080B0002146284600F042F8236B064633B1216A78 +:1080C000284698470028B8BF4FF0FF36A3891A0604 +:1080D00003D521692846F6F7BFF8616B41B104F179 +:1080E0004403994202D02846F6F7B6F800236363AA +:1080F000A16C21B12846F6F7AFF80023A36400F085 +:1081000031F90023A381636EDB0702D4A06D00F078 +:1081100046FDA06D00F03FFD00F02AF99FE700BF8B +:10812000F0C3010810C40108D0C30108024B014686 +:108130001868FFF78FBF00BF3C0300248A892DE930 +:10814000F041054610070C4658D44B68002B05DC5F +:108150000B6C002B02DC0020BDE8F081E66A002EEB +:10816000F9D0002312F480522F682B6032D0606D5A +:10817000A3895A0705D56368C01A636B0BB1236CDA +:10818000C01A00230246E66A216A2846B047431C0B +:10819000A38906D129681D292CD82A4ACA40D607A6 +:1081A00028D500226260D9042269226004D5421CCD +:1081B00001D12B6803B96065616B2F600029CAD0BB +:1081C00004F14403994202D02846F6F745F800200E +:1081D0006063C1E7216A01232846B047411CC7D12B +:1081E0002B68002BC4D01D2B01D0162B01D12F6082 +:1081F000B1E7A38943F04003A381ADE70F69002FE6 +:10820000A9D093070E6808BF4B690F6018BF002301 +:10821000A6EB07088B60B8F1000F9CDD216AA66A07 +:1082200043463A462846B047002806DCA38943F077 +:108230004003A3814FF0FF308EE70744A8EB00080E +:10824000E9E700BF0100402038B50B6905460C4640 +:1082500013B90025284638BD18B183690BB900F061 +:1082600099F8144B9C421BD16C68B4F90C30002B6C +:10827000EFD0626ED00704D4990502D4A06D00F04F +:108280008CFC28462146FFF759FF636EDA07054646 +:10829000E0D4A3899B05DDD4A06D00F080FCD9E774 +:1082A000054B9C4201D1AC68DFE7044B9C4208BF00 +:1082B000EC68DAE7F0C3010810C40108D0C3010874 +:1082C000014620B9044B0549186800F018BB044B5F +:1082D0001868FFF7B9BF00BF30C401084982010820 +:1082E0003C030024002310B50446C0E90033C0E974 +:1082F0000433836081814366C28183611946082209 +:108300005C3000F023FD054B6362054BA362054B17 +:10831000E362054B2462236310BD00BF899001080E +:10832000AF900108E79001080B910108014900F0A6 +:10833000E6BA00BF4982010870B54A1E6825554358 +:108340000E4605F17401F5F78BFF044640B100219C +:10835000C0E900160C30A06005F1680200F0F6FCE0 +:10836000204670BD014800F018BC00BF4CA5022497 +:10837000014800F014BC00BF4CA50224014800F0E5 +:108380000CBC00BF4BA50224014800F008BC00BF94 +:108390004BA5022410B50446FFF7F0FFA3691BB1FB +:1083A000BDE81040FFF7F0BFC4E912332365134B5B +:1083B000134A1B68A262A34204BF0123A3612046A3 +:1083C00000F020F86060204600F01CF8A060204615 +:1083D00000F018F80022E06004216068FFF782FFD7 +:1083E000A06801220921FFF77DFFE0680222122127 +:1083F000FFF778FF0123A361D2E700BF30C4010873 +:108400002D830108F8B50746FFF7ACFF1E4B1E6829 +:10841000B36913B93046FFF7BDFF4836D6E90134DA +:10842000013B03D533680BB33668F7E7B4F90C505A +:10843000D5B9164BE36004F15800656600F0AAFB5D +:10844000FFF796FFC4E90155C4E904552560A5610D +:108450000822294604F15C0000F078FCC4E90D55BF +:10846000C4E912552046F8BD6834D9E704213846DE +:10847000FFF762FF044630600028D5D1FFF778FF90 +:108480000C233B60EEE700BF30C401080100FFFF92 +:10849000F7B50F46114601AA054601F093F80646C6 +:1084A00018B90024204603B0F0BD2846FFF7AAFF04 +:1084B00004460028F5D03946019A4FF4DB7328466C +:1084C00000F02CFD071E09DA0025FFF74BFFA06D19 +:1084D000A58100F060FBFFF74BFFE2E7636EDB076F +:1084E00005D4A389980502D4A06D00F056FB0E4B6D +:1084F00063620E4BA3620E4BE362F1050D4BE78105 +:10850000A6812462236305D5022300222146284642 +:1085100000F09CF8636EDA07C4D4A3899B05C1D42C +:10852000A06D00F03CFBBDE789900108AF90010809 +:10853000E79001080B910108024B0A4601461868B2 +:10854000FFF7A6BF3C0300242DE9F74F1F46134653 +:108550007B430C9C06468A4691469B465FD018B1E9 +:1085600083690BB9FFF716FF2E4B9C4228D1746824 +:10857000636EDB0705D4A3899D0502D4A06D00F0CE +:108580000CFB6368002B01DA00236360D846D4E952 +:10859000001545451ED34246504600F0C9FB6068B1 +:1085A0002168636EA0EB08004144DA076060216037 +:1085B0002FD4A3899B052CD4A06D00F0F0FA28E0FD +:1085C000194B9C4201D1B468D2E7184B9C4208BFBA +:1085D000F468CDE72A46504600F0AAFB23682B44F6 +:1085E00023602146A8EB05033046019300F0B2FC5E +:1085F000AA44019B88B1636ED80705D4A389990565 +:1086000002D4A06D00F0CBFA5D44A5EB0803B3FBE8 +:10861000F9F7384603B0BDE8F08F9846B7E71F4634 +:10862000F7E700BFF0C3010810C40108D0C3010878 +:1086300007B5009313460A46014603480068FFF752 +:1086400083FF03B05DF804FB3C03002400F00AB88C +:1086500013460A4601460248006800F003B800BF0E +:108660003C0300242DE9F0410C4617461D46064602 +:1086700018B183690BB9FFF78DFE514B9C4222D193 +:108680007468636ED90705D4A3899A0502D4A06DD6 +:1086900000F083FAA38903F48473B3F5847F03D1D4 +:1086A00021463046FFF7D0FDD4F82C80B8F1000FFA +:1086B00013D11D233360636ED90778D54FF0FF3592 +:1086C0002846BDE8F0813F4B9C4201D1B468D8E711 +:1086D0003D4B9C4208BFF468D3E7012D36D035F0FE +:1086E000020362D123691BB92146304600F07CFAAF +:1086F00021463046FFF7A8FD0028DCD1216A2B4631 +:108700003A463046C0470130D5D0616B41B104F1E3 +:108710004403994202D03046F5F79EFD002363637F +:1087200023692360A389002623F402636660A38182 +:108730000822314604F15C0000F008FB656E15F07C +:1087400001053BD1A3899B05BAD421E021463046DF +:10875000FFF77AFDA28912F480520CD0656DA389CF +:108760005A0719D56368ED1A636B0BB1236CED1AC8 +:108770002F440025B6E72B46216A3046C047431CEC +:108780000546ECD1636ED80798D4A389990595D492 +:10879000A06D00F004FA93E71807E9D52368226971 +:1087A000002BE5D09B1A1D44E2E7162382E7A3893C +:1087B0009A0583D4A06D00F0F2F97FE735467FE794 +:1087C000F0C3010810C40108D0C30108024B0146E0 +:1087D000186800F003B800BF3C03002470B50C46D5 +:1087E000054618B183690BB9FFF7D4FD324B9C42A3 +:1087F00014D16C68636EDA0705D4A3899B0502D493 +:10880000A06D00F0CAF9E66ACEB91D232B60636E35 +:10881000DE070DD54FF0FF35284670BD274B9C4233 +:1088200001D1AC68E6E7264B9C4208BFEC68E1E763 +:10883000A3899D05EED4A06D00F0B1F9EAE7A28905 +:1088400002F00C03082B19D12368BBB121695B1A14 +:10885000002B13DDD00511D502230022216A284602 +:10886000B047411C05460DD1636EDA07D2D4A38907 +:108870009B05CFD4A06D00F092F9CDE712F48052A1 +:108880000FD0656DA28956070DD56368ED1A636B2D +:108890000BB1236CED1A636ED907BDD49305BBD41D +:1088A000E8E70123DAE71007F5D52368002BF2D0BB +:1088B00021695B1A1D44EEE7F0C3010810C40108EA +:1088C000D0C301082DE9F0410F4600F1480400260D +:1088D000D4E90185B8F1010805D52468002CF7D149 +:1088E0003046BDE8F081AB89012B06D9B5F90E30D1 +:1088F000013302D02846B84706436835EAE72DE938 +:10890000F8430646884600F148040027D4E901955B +:10891000B9F1010905D52468002CF7D13846BDE826 +:10892000F883AB89012B07D9B5F90E30013303D099 +:1089300029463046C04707436835E9E770B50D4D15 +:108940000D4C641BA4100026A64209D10B4D0C4C03 +:1089500002F004F9641BA4100026A64205D170BDE4 +:1089600055F8043B98470136EEE755F8043B984725 +:108970000136F2E708040024080400240804002457 +:108980001004002438B5074B1D68EB6B04461BB977 +:10899000242000F069F9E863E96B2046BDE838401F +:1089A00000F002B83C0300242DE9F3410746019191 +:1089B00000F092FE01998046384600F091FE43692E +:1089C0009A07044603F26C7605D1642296FBF2F313 +:1089D00002FB13637BBB4FF4C87396FBF3F503FBF9 +:1089E0001565B5FA85F56D09684B302202FB053532 +:1089F00000F038FC00F042FC654B1B6853B3D8F81C +:108A00000430B34219D1D8F80010D7E90067D8E98B +:108A10000823D1B9964277EB030323DAD8E912236E +:108A2000964277EB0303B4BF0123002323621BDBD1 +:108A3000D8F828101AE00125D6E7304600F06AFB86 +:108A40000028E0D14FF0FF3304E0964277EB0303B8 +:108A500002DA00232362EBE7D8E91223964277EB90 +:108A60000303F6DA01232362D8F850104FF4616350 +:108A70003C2091FBF3F603FB1613616893FBF0F2C5 +:108A800000FB12302368891AA26861601B1A921BCE +:108A90003B2B2360A26035DD013161603C3B2360EC +:108AA00063683B2B34DD0132A2603C3B6360A3680A +:108AB000172B33DDE2690132E261A2690132062A35 +:108AC000C8BF0022A261E268183B0132A36023699B +:108AD000E26055F823108A420EDD0B2BA2EB010257 +:108AE000E26003F1010209BF6369226100220133E0 +:108AF00002BF22616361E26100F0BAFB204602B06E +:108B0000BDE8F081002BCBDA013961603C33C6E768 +:108B1000002BCCDA013AA2603C33C7E7002BEBDA3A +:108B2000E269013AE261A269013A48BF0622A26104 +:108B3000E2681833013AE260A360002ADCD12369BD +:108B4000013B05D42361236955F82330E360D3E763 +:108B50000B23236163695A1E626103F26B729307F0 +:108B600005D1642192FBF1F301FB132363B94FF4A8 +:108B7000C87192FBF1F301FB1323B3FA83F35B0992 +:108B800003F5B673E361DEE70123F9E734C40108B6 +:108B90003CA5022470477047704770477047704784 +:108BA00070B50E46B1F90E10002996B014461D4658 +:108BB00007DA00232B60B3891A0610D44FF48063C0 +:108BC0000EE06A4600F034FD0028F2DB019A02F460 +:108BD0007042A2F500535A425A412A60EEE7402300 +:108BE0000020236016B070BD8B8973B59D070646C3 +:108BF0000C4607D504F14703236023610123636119 +:108C000002B070BD01AB6A46FFF7CAFF0099054686 +:108C10003046F5F725FB48B9B4F90C309A05EFD486 +:108C200023F0030343F00203A381E3E70D4BB36298 +:108C3000A389206043F08003A381009B6361019BB3 +:108C400020615BB1B4F90E10304600F0F9FD28B197 +:108C5000A38923F0030343F00103A381A089054303 +:108C6000A581CDE72D830108024B01461868F5F771 +:108C7000F7BA00BF3C030024024B01461868F5F721 +:108C8000EBBA00BF3C03002400000000000000001D +:108C900001F0FF01102A2BDB10F0070F08D010F8AD +:108CA000013B013A8B422DD010F0070F42B3F6D1B1 +:108CB000F0B441EA012141EA014122F007047FF0CA +:108CC00000070023F0E80256083C85EA010586EA21 +:108CD000010685FA47F5A3FA87F586FA47F6A5FA5D +:108CE00087F68EB9EED1F0BC01F0FF0102F0070269 +:108CF00032B110F8013B013A83EA010313B1F8D114 +:108D00000020704701387047002D06BF35460338F4 +:108D1000073815F0010F07D1013015F4807F02BF2D +:108D2000013015F4C03F0130F0BC0138704700BF7E +:108D30000A44914200F1FF3300D1704710B511F899 +:108D4000014B03F8014F9142F9D110BD0244034693 +:108D5000934200D1704703F8011BF9E713B54A436A +:108D600011460192F5F77CFA044618B1019A0021E8 +:108D7000FFF7ECFF204602B010BD000037B5002918 +:108D800048D051F8043C0190002BA1F10404B8BF75 +:108D9000E418F4F767FD204A01981368154633B9C3 +:108DA0006360146003B0BDE83040F4F755BDA342E2 +:108DB0000BD921686218934204BF1A685B6863602C +:108DC00004BF521822602C60ECE71A465B680BB1B6 +:108DD000A342FAD911685518A5420BD12468214441 +:108DE0005418A3421160DDD11C685B6853602144B4 +:108DF0001160D7E702D90C230360D3E72568611916 +:108E00008B4204BF19685B68636004BF4919216025 +:108E10005460C7E703B030BD18A50224F8B5CD1CD7 +:108E200025F0030508350C2D38BF0C25002D06460E +:108E300001DBA94203D90C2333600020F8BDF4F70D +:108E400011FD21490A6814469CB9204F3B6823B99B +:108E50002146304600F008F938602946304600F0D7 +:108E600003F9431C23D10C2333603046F4F7F4FCA0 +:108E7000E3E723685B1B17D40B2B03D923601C4447 +:108E8000256004E06368A2420CBF0B60536030466B +:108E9000F4F7E2FC04F10B00231D20F00700C21AD6 +:108EA000CCD01B1AA350C9E722466468CCE7C41C87 +:108EB00024F00304A042E3D0211A304600F0D4F895 +:108EC0000130DDD1CFE700BF18A502241CA5022484 +:108ED000F8B5074614460E4621B9BDE8F8401146DC +:108EE000F5F7BEB922B9F5F7B7F925462846F8BD1A +:108EF00000F0C8FCA0420FD221463846F5F7B0F981 +:108F000005460028F2D031462246FFF711FF3146D0 +:108F10003846F5F7A1F9E9E73546E7E738B5074DF3 +:108F200004460846114600222A601A46F9F7AAF9B3 +:108F3000431C02D12B6803B1236038BD54A5022421 +:108F4000838903F00903092B01D1FFF7B9B9002088 +:108F500070470000F8B50C46054618B183690BB997 +:108F6000FFF718FA3B4B9C420AD16C68B4F90C200D +:108F700000236360A3899E060CD54FF0FF3066E0A6 +:108F8000354B9C4201D1AC68F0E7344B9C4208BFA2 +:108F9000EC68EBE7580748D4D90605D409232B60C1 +:108FA00042F04003A381E8E71A070BD52146284683 +:108FB000FFF74AF90028E0D1A389A06023F0080355 +:108FC000A381A061A38943F00403A38123691BB992 +:108FD00021462846FFF708FEA689B4F90C70B307AE +:108FE0000FD00123A3811E4B1E49186806F0090605 +:108FF000FFF768FC092EA78103D121462846FFF719 +:109000009DF82269666A6369216A22602846B04732 +:10901000002860601CDCB4F90C3017BF002243F05C +:109020002003626043F04003BCE7616B0029CDD0B0 +:1090300004F14403994202D02846F5F70DF9236C58 +:10904000636000206063002BC0D0E36B2360F8BD39 +:109050000020FCE7F0C3010810C40108D0C30108D8 +:1090600030C40108418F010838B5064D002304467D +:1090700008462B60F4F7FEFB431C02D12B6803B1BA +:10908000236038BD54A5022410B50C46B1F90E106A +:1090900000F000FC0028ABBF636DA3891B1823F40C +:1090A0008053ACBF6365A38110BD002070472DE9DC +:1090B000F0411F468B89DB0505460C46164605D553 +:1090C000B1F90E100223002200F0CAFBA389B4F903 +:1090D0000E1023F48053A38132463B462846BDE858 +:1090E000F04100F04DBA10B50C46B1F90E1000F089 +:1090F000B7FB431CA38915BF606523F4805343F479 +:109100008053A38118BFA38110BDB1F90E1000F0E8 +:1091100049BA00002DE9F74F804600F0DDFA40F231 +:10912000B173984540F398806FF4F66343449B1005 +:1091300040F26D12A8F2B27502FB05356FF06302C2 +:10914000A8F26D7393FBF2F31D444FF4C8736FF4F0 +:10915000C86298FBF3F703FB17874244B7FA87FC12 +:10916000B2FBF3F208F0030315446422C0F8048054 +:1091700098FBF2F64FEA5C1C02FB1686044600F1EF +:10918000500B00934FF0070E227A63694A2A28D1C8 +:109190000099EA1801B906B90FBB3B2BD4BF0023D5 +:1091A000012313445A1EA3692C4901FB0232A36A0E +:1091B00013441A46DB17C4E908232834A345E3D136 +:1091C000D0E90845D0E91223944275EB0303B4BFFC +:1091D000012300230360012003B0BDE8F08F0023CA +:1091E000DFE7442A01D1EA18DDE7009A72BB002EBE +:1091F0000CBFE0464FF001081949E26801924FF0B8 +:10920000300A0AFB08182A464FF00009A8F10408A2 +:10921000019909F10109494558F829A018DC02F122 +:10922000040898FBFEF9C9EBC909A8EB0909B3EBDF +:109230000909236903F1FF3348BF09F10709C3EBAB +:10924000C3034B44534505DA1A44ACE7E046D3E781 +:109250005244DDE7073BF5E70020BDE78051010000 +:1092600034C401080148FFF797BC00BF4FA5022492 +:109270000148FFF793BC00BF4FA50224014B1868BB +:1092800000F002B83C0300242DE9F04F8DB00746F2 +:1092900000F022FAAE49AF4E0546384600F014FA07 +:1092A000044670B9AC4BAD4A1860AD4B1860AD4B7D +:1092B0003068C3E90022FFF7DFFC34600DB0BDE881 +:1092C000F08F316800295FD13068FFF7D5FC204668 +:1092D00000F030FB411C3846F4F7C2FF3060002834 +:1092E00057D12378A04AA1493A2B08BF01340AAECE +:1092F0003346204600F0E0FA0028DFDD0A9BE7183D +:10930000E35C2D2B49D101374FF0FF340DF1200ADA +:109310000DF11E0B4FF00008CDE9016A9449039648 +:10932000CDF800B0334607AA3846ADF81E80ADF838 +:10933000208000F0C1FA4045C0DDBDF81E30BDF808 +:109340002020DFF838923C2101FB0322BDF81C30BD +:109350004FF4616101FB03235C43AC62814C824B9F +:1093600023600A9B81491F444A463346384600F031 +:10937000A3FA404516DC23686360774BAA6A1A603B +:10938000774BC3F8008099E700F0C2FA00289BD120 +:1093900094E7214600F0C6FAA3E72B2B08BF01375C +:1093A0000124B3E70A9BC4F80490FC18FB5C2D2B46 +:1093B00040F08B8001344FF0FF370023ADF81C30B4 +:1093C000ADF81E30ADF820300A93CDE902A6CDE904 +:1093D00000B66749334607AA204600F06DFA002818 +:1093E00078DCAF6AA7F561670A9B2F651C442F469E +:1093F0004FF0000923782C2B08BF013494F800802B +:10940000B8F14D0F78D10DF12603CDE9016309AB19 +:1094100000935849039633460DF12202204600F08E +:109420004BFA03287FF44AAFBDF822104B1E0B2BDA +:109430003FF644AFBDF82420531E042B3FF63EAF49 +:10944000BDF82630062B3FF639AFC7E9031287F87F +:1094500008807B610A9B04EB03080223ADF81C30F3 +:109460000023ADF81E30ADF820300A9398F8003094 +:109470002F2B09D1CDE902A6CDE900B63E493346EE +:1094800007AA404600F018FABDF81E30BDF82020AB +:109490003C2101FB0322BDF81C304FF4616101FB4C +:1094A0000323BB610A9C28374444B9F1000F20D044 +:1094B0006868FFF72FFE284BAA6A1A602B6D9B1A6B +:1094C000274A18BF01231360F8E62B2B08BF01348D +:1094D000012772E7BDF81E30BDF820203C2101FBBA +:1094E0000322BDF81C304FF4616101FB03235F438D +:1094F0007AE74FF001097DE7B8F14A0F06BF013462 +:10950000434644230A220BA92046059300F0AAFAF9 +:10951000DDF82C80059BADF82600A04514D14D2325 +:10952000B9F1000F07D12B7203210223C5E9031300 +:10953000C5F8149091E785F830300B220123C5E976 +:109540000D230023EB6388E780B23B72786184E7E8 +:1095500094C4010838A5022440A5022497C4010838 +:109560003CA50224A00300242BA502249BC40108CF +:10957000BEC40108AAC40108BDC4010820A5022474 +:1095800038B5074D04460846114600222A601A469F +:10959000F4F790FD431C02D12B6803B1236038BD62 +:1095A00054A5022438B5064D0023044608462B6016 +:1095B000F4F7D8FD431C02D12B6803B1236038BDFA +:1095C00054A502240B78722B30B522D0772B24D0EF +:1095D000612B27D016230360002030BD622D12D0EE +:1095E000782D13D02B2D07D120F01C0023F003037E +:1095F00040F0100043F0020311F8015F002DEDD19F +:1096000023431360E9E743F48033F5E743F4006351 +:10961000F2E7002423460420EEE74FF4C064012360 +:109620000820E9E74FF4027401234FF48470E3E764 +:1096300038B5074D00230446084611462B60F4F761 +:109640007BFC431C02D12B6803B1236038BD00BFF3 +:1096500054A502242DE9F84F074689461646F4F72B +:10966000F5F8184B1C689A4634B14B46984613F8E7 +:10967000011B39B13D29F9D13846F4F7E1F8002052 +:10968000BDE8F88FA8EB0908A34654F8040B00289E +:10969000F2D04246494600F055F90028F4D154F87A +:1096A000043C03EB080513F808303D2BECD1DAF845 +:1096B0000030ABEB03039B1038463360F4F7C0F87F +:1096C000681CDDE70004002407B501AAFFF7C2FF0C +:1096D00003B05DF804FB000000487047A8030024B5 +:1096E0002DE9F041D0E900670C46514A002330468D +:1096F000394601F053F8394605464D4A30460023B5 +:1097000001F04CF8002ABCBF02F5A83202F5C07285 +:109710004FF4616105F52F20B2FBF1F301FB132239 +:109720004FF03C01ACBF00F66C2000F66B20A3604C +:10973000B2FBF1F301FB132263602260C31C07221A +:1097400093FBF2F2C2EBC2029B1A48BF0733002818 +:10975000A361B8BFA0F50E333649AEBF90FBF1F15F +:10976000A3F52C7393FBF1F1334B03FB010048F697 +:10977000AC62B0FBF2F2024440F2B45CB0FBFCF32A +:10978000D21A40F26D172D4BB0FBF3F36426D31AB7 +:10979000B3FBF7F5B3FBFCF3B5FBF6F2D31A0344C6 +:1097A00007FB1533992003EB830C0CF1020C03F13A +:1097B000010EBCFBF0F7784302304FF00508B0FB18 +:1097C000F8F0AEEB000040F2F95EF44594BF4FF0C4 +:1097D000020C6FF0090C67444FF4C87C0CFB01517C +:1097E000012F98BF0131B3F5997F0CD3A3F599737D +:1097F000E361A1F26C710023E060C4E904712362AB +:109800002046BDE8F08115F0030F02D106FB12528D +:109810005AB94FF4C876B5FBF6F206FB1252B2FA0B +:1098200082F252093B331344E2E70122FAE700BF18 +:1098300080510100B13A02004FC5FDFFB03A02006D +:1098400038B5064D0023044608462B60F4F7C3FBE9 +:10985000431C02D12B6803B1236038BD54A50224F8 +:1098600038B5074D04460846114600222A601A46BC +:10987000F4F780FB431C02D12B6803B1236038BD91 +:1098800054A5022451F8043C181F002BBCBF0B58F0 +:10989000C018704738B5074D0446084611460022E7 +:1098A0002A601A46F4F7B4FB431C02D12B6803B1BB +:1098B000236038BD54A502240EB410B59FB021AC6E +:1098C0004FF4017154F8042B0192ADF81C10049070 +:1098D000089000F02FF80C4B059009900D930B4861 +:1098E000019A006803940023119316934FF6FF73B7 +:1098F000ADF81E3004A9234600F018F91FB0BDE8EA +:10990000104003B0704700BFAB9001083C03002437 +:1099100010F8012B11F8013B012A28BF9A42F7D019 +:10992000D01A7047034611F8012B03F8012B002AC7 +:10993000F9D17047034613F8012B002AFBD1181AFE +:109940000138704710B56AB10139841810F8013B2D +:1099500011F8012F934203D1A04201D0002BF5D181 +:10996000981A10BD1046FCE72DE9F0433B4E8646A1 +:109970008C4660461CF8014BA55D15F00805F8D132 +:109980002D2C34D19CF800404FF0010800F1020C5E +:10999000002B5ED0102B0CD1302C0AD19CF800008B +:1099A00000F0DF0058284FD19CF8014010230CF143 +:1099B000020C4FF0FF370025B7FBF3F703FB07F965 +:1099C0006FEA09092846A4F13006092E18D8344652 +:1099D000A34224DD002D1FDB87421DD301D1A14509 +:1099E0001ADB00FB034001251CF8014BEBE72B2C95 +:1099F00008BF9CF80040A84608BF00F1020CC7E76A +:109A0000A4F14106192E01D8373CE1E7A4F1610623 +:109A1000192E04D8573CDBE74FF0FF35E4E7002D63 +:109A200007DA2223CEF800304FF0FF3042B9BDE80C +:109A3000F083B8F1000F00D04042002AF7D00DB1FA +:109A40000CF1FF311160F2E73024002BB1D1082373 +:109A5000AFE7302CA2D00A23ABE700BFD1C4010886 +:109A6000FFF782BF13460A46014602480068FFF727 +:109A70007BBF00BF3C03002438B54B1C144603D108 +:109A80004FF0FF35284638BD938923F0200393819A +:109A9000636B5268CDB28BB1A36B934208DD236830 +:109AA0005A1E226003F8015C636801336360E9E7D2 +:109AB000214600F0B5FB0028F1D0E1E721692368D9 +:109AC00051B1994208D213F8011CA94204D1013BBB +:109AD000013223606260D5E7C4E90F3204F1440328 +:109AE00063630323A363234603F8465F23600123D4 +:109AF000DCE710B50C46496B69B104F144039942A7 +:109B000001D0F4F7A9FB236C63600020606313B1FC +:109B1000E36B236010BD2369236000236360A38986 +:109B200043F02003A3814FF0FF30F3E72DE9F04F1E +:109B30000C46ADF5237D0021CDE94411B249A09139 +:109B40000DF10408B149B24FDFF8C892CDF8188181 +:109B50000646A191009392F800A0BAF1000F00F020 +:109B600051811AF8073013F0080302F1010519D0EA +:109B70006368002B0FDD23681A78BA5C120701D4E2 +:109B80002A46E8E7459A0132459262680133013A74 +:109B900062602360ECE7A19B21463046984700288D +:109BA000E9D0EDE7BAF1250F40F08380419343936C +:109BB00053782A2B02BF1023951C41930A22AB46EF +:109BC0001BF8011BA1F13003092B1DD99148032279 +:109BD000FFF75EF840B10123A0EB090003FA00F0A3 +:109BE000419B184341905D4615F8013B782B06D800 +:109BF000572B10D8252B5CD056D8002B74D00323BC +:109C000047930A23429381E0439B02FB0313303BBB +:109C100043935D46D3E7A3F15802202AEFD801A170 +:109C200051F822F0F79C0108FF9B0108FF9B0108F7 +:109C3000559D0108FF9B0108FF9B0108FF9B010840 +:109C4000FF9B0108FF9B0108FF9B0108FF9B010888 +:109C50006B9D0108419D0108AF9C0108AF9C010864 +:109C6000AF9C0108FF9B0108459D0108FF9B01086F +:109C7000FF9B0108FF9B0108FF9B01087B9D0108DA +:109C80004D9D0108EF9C0108FF9B0108FF9B010807 +:109C9000779D0108FF9B0108419D0108FF9B01087A +:109CA000FF9B0108F79C0108453B022BA7D8052321 +:109CB0002BE06368002B0DDD23681A78524540F0D5 +:109CC000A180013362682360459B013A01336260E1 +:109CD000459355E7A19B2146304698470028EBD095 +:109CE0004498002840F084804FF0FF3086E0419A8D +:109CF00042F020024192419A42F4007241921022B5 +:109D00006F2B429234BF0323042347936368002BD5 +:109D100041DD419B590604D423681A78BA5C1207C6 +:109D200040D4479B022B4FDC6B46224641A930466C +:109D300000F074F8012865D002287FF421AFCFE746 +:109D40000A22DDE7002342930323DEE70823429340 +:109D50000423DAE72946404600F0ACF9419B43F082 +:109D60004003419305460123CFE7419B43F0400365 +:109D700041930023C9E70223C7E74198C3063FF593 +:109D8000FFAE009B459A191D00911B68C0074CBF90 +:109D90001A801A60F4E6A19B2146304698470028B5 +:109DA000B7D09DE7459A013245926268013A002A90 +:109DB000626002DD01332360AEE7A19B214630469D +:109DC00098470028A8D08BE7042B06DC6B46224678 +:109DD00041A9304600F07AF8ACE70F4B002B3FF476 +:109DE000CFAE6B46224641A93046AFF30080A1E7D3 +:109DF000A38913F0400F18BF4FF0FF300DF5237DFE +:109E0000BDE8F08F4498F9E7799A0108F39A0108C0 +:109E1000D1C40108D1C50108000000002DE9F843B4 +:109E200015468A6880460C4632B98A69002A0CBFFA +:109E300001224FF0FF328A602268DFF88C90D10651 +:109E40005FBF1A68111D196016680027A06988B1E4 +:109E5000012807D12B681A7863699B5C53B927BB2B +:109E6000BDE8F883022820D12B681B7813F809304D +:109E70001B071AD42368DA065EBF2B681B7806F826 +:109E8000013B2A686B6801322A60A268013B013AF3 +:109E90006B600137A26042B1002BD7DCD4F880316F +:109EA0002946404698470028D0D0236813F0100375 +:109EB00005D1E2680132E260A26902B13370236920 +:109EC0001F4427610020CBE7D1C401082DE9F04FE2 +:109ED0009846744B0C468246164693E8070087B0B6 +:109EE00003AB83E80700704BA169704A032918BFD0 +:109EF0001A46A36801925A1EB2F5AE7F88BF6FF46E +:109F0000AE75274682BF03EB050940F25D13A360DF +:109F100057F81C3B43F4506398BF4FF0000923608F +:109F20003D464FF0000B316803AB097853F82B0026 +:109F30000222FEF7ADFE28B3BBF1010F59D16268D2 +:109F40002AB92268082342F4007263602260226802 +:109F500022F4A0622260A268511EA16092B1326810 +:109F6000511C3160127805F8012B7268013A002A01 +:109F7000726007DCD4F880213146504690470028B3 +:109F800040F085800BF1010BBBF1030FCBD163686F +:109F90000BB90A236360636845496069C91A00F018 +:109FA00089F84FF0000BA3682268002B3DD0316880 +:109FB000606991F800C010F80C00002835D0BCF1A1 +:109FC000300F24D1100522D50BF1010BB9F1000F90 +:109FD00003D0013309F1FF39A3607368013B002B03 +:109FE00073601BDD336801333360A368013BA360FA +:109FF000D9E7BBF1020FAED1226802F4C061B1F51E +:10A00000007FBFD11023636042F48072A2E722F484 +:10A01000106222600B7805F8013BDEE7D4F880314E +:10A020003146504698470028DFD02368D9050DD522 +:10A03000BD4209D915F8011CD4F87C31324650468E +:10A04000984705F1FF394D46BD4228D0226812F0ED +:10A05000100213D12A706368019E39465046B047FA +:10A06000D8F8003021681A1DC8F8002011F0200F20 +:10A070001B680FD01860E3680133E360ED1BAB444D +:10A0800025695D442561002007B0BDE8F08F4FF0E1 +:10A09000000BCAE7CA074CBF18801860EBE7012025 +:10A0A000F2E700BFF0C50108619A01081DA201088E +:10A0B000EEC5010870B50B7804465E2B0BBF4B78DC +:10A0C000481C881C002208BF0122611E04F1FF0504 +:10A0D00001F8012FA942FBD10BB9013870BD82F004 +:10A0E0000101E154421C12F8015C2D2D02F1FF36F2 +:10A0F000104606D05D2DF1D00DB93046EEE72B4667 +:10A10000EFE716785D2EFAD0B342F8DC184601303E +:10A1100086422154FBDCD84330445D1CB342A8BFC7 +:10A1200000202B180232DEE72DE9F0473A4E864632 +:10A130008C4660461CF8014BA55D15F00805F8D16A +:10A140002D2C33D19CF800404FF0010800F1020C97 +:10A15000002B5CD0102B0CD1302C0AD19CF80000C5 +:10A1600000F0DF0058284DD19CF8014010230CF17D +:10A17000020C08F10047013F0026B7FBF3F9304617 +:10A1800003FB197AA4F13005092D18D82C46A342F7 +:10A1900024DD751C07D081451DD301D1A2451ADBF2 +:10A1A00000FB034001261CF8014BEBE72B2C08BFFA +:10A1B0009CF80040A84608BF00F1020CC8E7A4F1D3 +:10A1C0004105192D01D8373CE1E7A4F16105192DAE +:10A1D00004D8573CDBE74FF0FF36E4E7731C06D1A9 +:10A1E0002223CEF80030384642B9BDE8F087B8F1F6 +:10A1F000000F00D04042002AF7D00EB10CF1FF3121 +:10A200001160F2E73024002BB3D10823B1E7302CE2 +:10A21000A4D00A23ADE700BFD1C40108FFF784BF73 +:10A220002DE9F0410C46496B04F1440399421DD1DC +:10A230004FF48061F4F714F818B94FF0FF30BDE81F +:10A24000F0814FF48063A36394F84630606380F834 +:10A25000FF3394F8453080F8FE3394F8443080F8AA +:10A26000FD3300F2FD3020600020E8E7A66B7700A8 +:10A270003A46F3F7F3FF05460028DED000EB060868 +:10A28000014632464046FEF753FDC4E90D57C4F877 +:10A290000080E9E7024B0A4601461868F3F7DABF87 +:10A2A0003C03002470B50E461446054618B1836978 +:10A2B0000BB9FEF76FF8144B9C421AD16C68636EB1 +:10A2C000D80705D4A389990502D4A06DFEF765FCD3 +:10A2D00022462846314600F0A1F8636EDA070546AB +:10A2E00005D4A3899B0502D4A06DFEF758FC28462F +:10A2F00070BD064B9C4201D1AC68E0E7044B9C4228 +:10A3000008BFEC68DBE700BFF0C3010810C4010818 +:10A31000D0C30108024B0A4601461868FFF7C2BFC6 +:10A320003C0300242DE9F843089C8946174602FBAC +:10A3300003F8054618B183690BB9FEF72BF8264BD5 +:10A340009C4223D16C68636EDE0705D4A38998050F +:10A3500002D4A06DFEF721FCA389190720D523693B +:10A36000F3B10026464529D0A06819F80610013837 +:10A370000028A06004DAA369984219DB0A2917D0E3 +:10A3800023685A1C226019700136EBE7134B9C427C +:10A3900001D1AC68D7E7124B9C4208BFEC68D2E70A +:10A3A0002146284600F08CF90028DAD0002605E086 +:10A3B0002246284600F032F90130E5D1636EDA0713 +:10A3C00005D4A3899B0502D4A06DFEF7E8FBB6FB7C +:10A3D000F7F0BDE8F88300BFF0C3010810C401081E +:10A3E000D0C3010807B5009313460A460146034847 +:10A3F0000068FFF797FF03B05DF804FB3C030024FF +:10A4000030B501390024A24201D1002005E0035DEE +:10A4100001340D5DAB42F6D0581B30BD70B50D4612 +:10A420001446064618B183690BB9FDF7B3FF1C4B00 +:10A430009C4224D17468636ED80705D4A38999051A +:10A4400002D4A06DFEF7A9FBA368013B002BA3601B +:10A4500005DAA26993421CDBEBB20A2B19D0236800 +:10A460005A1C22601D70EDB2636EDA0705D4A38911 +:10A470009B0502D4A06DFEF792FB284670BD094BE8 +:10A480009C4201D1B468D6E7074B9C4208BFF468F0 +:10A49000D1E729462246304600F0C0F80546E3E7FA +:10A4A000F0C3010810C40108D0C3010870B50E46FE +:10A4B000054618B183690BB9FDF76CFFAB69AC6851 +:10A4C00013B92846FDF766FF2C4B9C4220D16C68DF +:10A4D000636EDB0705D4A389980502D4A06DFEF74F +:10A4E0005CFBA38919071DD52369DBB1013EA36875 +:10A4F00016F8011F013BA36039BB002B38DA224656 +:10A500000A21284600F08AF8013011D00A2511E00E +:10A510001B4B9C4201D1AC68DAE71A4B9C4208BF46 +:10A52000EC68D5E72146284600F0CAF80028DDD0BF +:10A530004FF0FF35636EDA0705D4A3899B0502D47B +:10A54000A06DFEF72CFB284670BD002B04DAA26933 +:10A550009A4206DC0A2904D023685A1C226019702A +:10A56000C5E72246284600F059F80130BFD1DFE7A1 +:10A5700023680A255A1C22601D70DBE7F0C301081E +:10A5800010C40108D0C30108024B01461868FFF748 +:10A590008DBF00BF3C030024C9B2034610F8012B55 +:10A5A0001AB18A42F9D118467047002918BF002312 +:10A5B000F9E770B503461E4613F8014B44B14A1E35 +:10A5C00001E0A54204D012F8015F002DF9D1F2E7B5 +:10A5D000301A70BD10B50139034632B111F8014F80 +:10A5E00003F8014B013A002CF7D11A4400219342A1 +:10A5F00000D110BD03F8011BF9E770B503461E46F4 +:10A6000013F8014B3CB14A1E01E0A542F7D012F805 +:10A61000015F002DF9D1301A70BD0000F8B50E466B +:10A620001446054618B183690BB9FDF7B3FE214BFB +:10A630009C422BD16C68A369A360A3891A072FD50C +:10A6400023696BB323692068C01A6369F6B2834239 +:10A65000374604DC21462846FDF7F6FD30BBA368EB +:10A66000013BA36023685A1C22601E70636901309D +:10A67000834204D0A389DB0706D50A2E04D12146E4 +:10A680002846FDF7E1FD88B93846F8BD0A4B9C42E3 +:10A6900001D1AC68CFE7094B9C4208BFEC68CAE720 +:10A6A0002146284600F00CF80028CBD04FF0FF37A9 +:10A6B000EAE700BFF0C3010810C40108D0C30108D5 +:10A6C000324B70B51D6806460C4625B1AB6913B90F +:10A6D0002846FDF75FFE2E4B9C420FD16C68A38984 +:10A6E000B4F90C2019072CD4DD0611D409233360EA +:10A6F00042F04003A3814FF0FF303EE0254B9C42E7 +:10A7000001D1AC68EBE7244B9C4208BFEC68E6E75C +:10A71000580712D5616B41B104F14403994202D04C +:10A720003046F3F799FD00236363A38923F02403E4 +:10A73000A3810023636023692360A38943F0080396 +:10A74000A38123694BB9A38903F42073B3F5007F78 +:10A7500003D021463046FEF747FAA089B4F90C2011 +:10A7600010F001030AD00023A36063695B42A36178 +:10A77000236943B910F08000BAD170BD810758BF7A +:10A780006369A360F4E70020F7E700BF3C030024FF +:10A79000F0C3010810C40108D0C301087BB972B925 +:10A7A0000029BEBF00204FF0004106E008BF00288E +:10A7B0001CBF6FF000414FF0FF3000F0A1B9ADF1C8 +:10A7C000080C6DE904CE002909DB002B1ADB00F030 +:10A7D00035F8DDF804E0DDE9022304B070474042BB +:10A7E00061EB4101002B1BDB00F028F8DDF804E0F1 +:10A7F000DDE9022304B0404261EB4101524263EBC8 +:10A8000043037047524263EB430300F017F8DDF84F +:10A8100004E0DDE9022304B0404261EB41017047EE +:10A82000524263EB430300F009F8DDF804E0DDE990 +:10A83000022304B0524263EB430370472DE9F04713 +:10A84000089D04468C46002B40F083808A421746C0 +:10A8500047D9B2FA82F242B1C2F1200024FA00F0E4 +:10A860009140974040EA010C94404FEA1748230C6E +:10A87000BCFBF8F61FFA87FE08FB16C143EA01434A +:10A8800006FB0EF1994209D9FB1806F1FF3080F062 +:10A890001981994240F21681023E3B445B1AA4B2F0 +:10A8A000B3FBF8F008FB103344EA034400FB0EFE50 +:10A8B000A64509D93C1900F1FF3380F00581A64572 +:10A8C00040F2028102383C4440EA0640A4EB0E0408 +:10A8D00000261DB1D4400023C5E900433146BDE840 +:10A8E000F08702B9FFDEB2FA82F2002A50D1CB1B08 +:10A8F0004FEA174E1FFA87F80126B3FBFEFC210C26 +:10A900000EFB1C3341EA034108FB0CF38B4207D9D1 +:10A9100079180CF1FF3002D28B4200F2E9808446B4 +:10A92000C91AA3B2B1FBFEF00EFB101143EA0144B9 +:10A9300008FB00F8A04507D93C1900F1FF3302D20B +:10A94000A04500F2D9801846A4EB080440EA0C4068 +:10A95000BFE78B4209D9002D00F0B1800026C5E980 +:10A96000000130463146BDE8F087B3FA83F6002E89 +:10A970004AD18B4202D3824200F2B880841A61EB42 +:10A98000030101208C46002DA8D0C5E9004CA5E7A5 +:10A99000C2F1200320FA03F6974001FA02F04FEAD1 +:10A9A000174ED9403043030CB1FBFEF61FFA87F86F +:10A9B0000EFB161143EA014306FB08F1994204FA23 +:10A9C00002F409D9FB1806F1FF3C80F08D80994212 +:10A9D00040F28A80023E3B445B1A81B2B3FBFEF038 +:10A9E0000EFB103341EA034100FB08F38B4207D909 +:10A9F000791800F1FF3C73D28B4271D90238394487 +:10AA0000CB1A40EA064678E7C6F1200C03FA06F4B2 +:10AA100022FA0CF31C4320FA0CF701FA06F34FEA72 +:10AA2000144E21FA0CF11F433B0CB1FBFEF91FFA47 +:10AA300084F80EFB191143EA014109FB08FA8A4523 +:10AA400002FA06F200FA06F308D9611809F1FF309C +:10AA500048D28A4546D9A9F102092144A1EB0A014D +:10AA6000BFB2B1FBFEF00EFB101147EA014700FB3D +:10AA700008F8B84507D9E71900F1FF312ED2B845DB +:10AA80002CD90238274440EA0940A7EB0807A0FB6D +:10AA900002894F45C64649461AD317D05DB1B3EB7C +:10AAA0000E0267EB010707FA0CFCF2404CEA0202C7 +:10AAB000F740C5E9002700263146BDE8F0872E465D +:10AAC00028460BE70646E9E61846FDE64345E5D28B +:10AAD000B8EB020E69EB04010138DFE70846D2E764 +:10AAE00060468DE78146B9E7664675E730464AE736 +:10AAF000ACF1020C394413E702383C4424E700BFB0 +:10AB0000704700BF53B94AB9002908BF00281CBFCD +:10AB10004FF0FF314FF0FF30FFF7F2BFADF1080CFF +:10AB20006DE904CEFFF78AFEDDF804E0DDE90223DB +:10AB300004B07047430803F05533C01A830803F08C +:10AB4000333300F03330184400EB101000F00F30B6 +:10AB500000EB002000EB0040000E7047F8B500BF8E +:10AB6000F8BC08BC9E467047F8B500BFF8BC08BCEE +:10AB70009E467047436F6D6D616E642070617261B7 +:10AB80006D206572726F723A2077726F6E67206106 +:10AB90006464726573732073697A650A00496E761E +:10ABA000616C696420616C742062797465732073D0 +:10ABB000697A65002E2E002F006C6974746C6566CE +:10ABC00073006170706C69636174696F6E5F756E3C +:10ABD0006E616D65645F6D75746578006170706C31 +:10ABE00069636174696F6E5F756E6E616D65645FD8 +:10ABF0007468726561640065717565756500452DE1 +:10AC0000496E76616C696420726561643A206661A0 +:10AC10005F6964202564206F6666736574203078F0 +:10AC20002578206C656E20307825780A00452D52F5 +:10AC3000656164206661696C65643A2066615F697C +:10AC400064202564206F66667365742030782578EB +:10AC5000206C656E20307825780A004D4355426F90 +:10AC60006F745F45434945535F763100452D666CEF +:10AC70006173685F617265615F6F70656E2C2075CE +:10AC80006E6B6E6F776E2069642025640A007072A7 +:10AC9000696D617279007365636F6E6461727900CA +:10ACA000452D496D61676520696E207468652025B2 +:10ACB0007320736C6F74206973206E6F74207661DB +:10ACC0006C6964210A00492D5377617020736563B4 +:10ACD000746F72202564206F662025640A00572D4A +:10ACE00025642073746174757320777269746520AC +:10ACF0006661696C7320706572666F726D696E67EC +:10AD00002074686520737761700A0050696E6D6108 +:10AD100070206572726F723A2077726F6E67207062 +:10AD20006F7274206E756D6265722E0053484132E9 +:10AD300035360053484132323400018080808080B3 +:10AD400080800480808080808080088080808080F7 +:10AD500080801080808080808080208080808080C3 +:10AD600080804000040810204002040810204000A9 +:10AD700000000001020304010203040607080900A1 +:10AD800000000000000000010100000000000002BF +:10AD90002200000000000004230000000000000862 +:10ADA000FFFF000000000000010002000400060098 +:10ADB00008000A000C001000200040008000000184 +:10ADC000000000000000000025AE000839AE0008B9 +:10ADD000A982000881820008F37F0008E5B100081D +:10ADE000458200080F820008E3390108097E000847 +:10ADF000237F0008F9810008E1810008137F000823 +:10AE00000D7F0008937F0008337F0008777E0008DD +:10AE1000057F0008000000000000000095D4000835 +:10AE20000000000000000000A5A40008D9A400084C +:10AE3000B97200087D72000897B9000807B80008C9 +:10AE40001FB60008CFB60008C1A20008B3760008FC +:10AE500039A40008AB0C00080BB40008A5B1000829 +:10AE6000879D0008C1AF00089BAF0008A10C000837 +:10AE70008DA8000899760008B10C00087F760008BC +:10AE800051AD000855B30008F77F00082FAA00084D +:10AE9000E9A9000865760008C9A90008F972000848 +:10AEA000BDAE000879AE0008F5A40008FCFFFFFF66 +:10AEB00000000000D1A40008EBA40008000000007E +:10AEC00000000000000000000000000095D4000811 +:10AED000A50C0008AB0C0008A50C0008A50C000888 +:10AEE000C30C0008A50C0008FCFFFFFF00000000D9 +:10AEF0000000000000000000000000000000000052 +:10AF0000000000000000000095D40008A50C000817 +:10AF1000AB0C0008A50C0008A50C0008C30C000829 +:10AF2000A50C00080000000000000000112D000822 +:10AF3000552D0008B97200087D7200081527000819 +:10AF4000C52700088D250008452600082125000892 +:10AF5000B12B0008792B000851290008D77300088D +:10AF60008D240008E9240008D12300085F2400088C +:10AF7000A10C000809240008C9140008B10C00083D +:10AF8000991400080B3600084B73000831150008AF +:10AF9000C12200085B220008791400082122000861 +:10AFA000F9720008FCFFFFFF000000004D2D0008B3 +:10AFB000672D000800000000000000006D0E000872 +:10AFC0001F150008250F0008170E0008010E0008C5 +:10AFD000F50D0008E90D0008DD0D0008490E000818 +:10AFE0000000000000000000B10D00080D15000871 +:10AFF000470D0008310D0008030D00085D0D000825 +:10B00000250D0008190D0008F70C0008EB0C0008CE +:10B01000DF0C0008C90C0008B7D10008B3D1000844 +:10B02000AFCF0008AFCF0008B5CF0008A7D1000808 +:10B030008F0D0008000000000000000011DB000878 +:10B040000000000000000000850E0008FB1400084E +:10B05000250F0008330E0008010E0008F50D00084A +:10B06000E90D0008DD0D0008490E00080000000091 +:10B0700000000000C90D0008E9140008470D000891 +:10B08000310D0008030D0008790D0008250D00089A +:10B09000190D0008F70C0008EB0C0008DF0C000885 +:10B0A000C90C0008B7D10008B3D10008AFCF000821 +:10B0B000AFCF0008B5CF0008A7D100088F0D00085A +:10B0C0000000000000000000A5230108352401084D +:10B0D0000000000000000000B9BB00083DBC0008F3 +:10B0E00077C295F360D2EF7F3552500F2CB679803E +:10B0F0002A8648CE3D0201002A8648CE3D02010044 +:10B100002A8648CE3D030107002A8648CE3D03012A +:10B110000700000040420F00200000000100000076 +:10B120000200000004000000080000001000000001 +:10B13000200000004000000080000000000100002E +:10B1400000020000000400000008000000100000E1 +:10B150000020000000400000008000002CAD01082D +:10B16000062040006CB10108F00A022445080008DE +:10B1700039080008E9070008D90700081D08000879 +:10B18000FD07000809D00008910800080000000031 +:10B19000515350494600464C41534849415000469E +:10B1A00041543332202020002A2B2C3A3B3C3D3E98 +:10B1B0005B5D7C223F7F005346445000000000004E +:10B1C000FBFFFBFEECEAF3EFF7F3EDEDEAFB8CF0AF +:10B1D000F4E9EA809A45418E418F804545454949C9 +:10B1E000498E8F9092924F994F555559999A9B9CA1 +:10B1F0009D9E9F41494F55A5A5A6A7A8A9AAABAC5E +:10B20000ADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCF6 +:10B21000BDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCE6 +:10B22000CDCECFD0D1D2D3D4D5D6D7D8D9DADBDCD6 +:10B23000DDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECC6 +:10B24000EDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCB6 +:10B25000FDFEFF00000000006410B71DC8206E3B1B +:10B26000AC30D9269041DC76F4516B6B5861B24D0D +:10B270003C7105502083B8ED44930FF0E8A3D6D677 +:10B280008CB361CBB0C2649BD4D2D38678E20AA0DF +:10B290001CF2BDBD30313233343536373839616256 +:10B2A000636465663031323334353637383941427C +:10B2B00043444546000000000D0064656661756CFE +:10B2C00074005254582056352E352E330001020496 +:10B2D000982F8A4291443771CFFBC0B5A5DBB5E901 +:10B2E0005BC25639F111F159A4823F92D55E1CAB75 +:10B2F00098AA07D8015B8312BE853124C37D0C5503 +:10B30000745DBE72FEB1DE80A706DC9B74F19BC14A +:10B31000C1699BE48647BEEFC69DC10FCCA10C243A +:10B320006F2CE92DAA84744ADCA9B05CDA88F9761E +:10B3300052513E986DC631A8C82703B0C77F59BF88 +:10B34000F30BE0C64791A7D55163CA0667292914B4 +:10B35000850AB72738211B2EFC6D2C4D130D385351 +:10B3600054730A65BB0A6A762EC9C281852C729213 +:10B37000A1E8BFA24B661AA8708B4BC2A3516CC741 +:10B3800019E892D1240699D685350EF470A06A107A +:10B3900016C1A419086C371E4C774827B5BCB034C9 +:10B3A000B30C1C394AAAD84E4FCA9C5BF36F2E6867 +:10B3B000EE828F746F63A5781478C8840802C78CF6 +:10B3C000FAFFBE90EB6C50A4F7A3F9BEF27871C6F9 +:10B3D0002900000000500052D22700003B0000006E +:10B3E00000500052D22700005800000000500052C8 +:10B3F000D22B0000FFFF0000FFFFFFFF0000000056 +:10B400002A00000000500052D22700003C0000003B +:10B4100000500052D2270000590000000050005296 +:10B42000D22B0000FFFF0000FFFFFFFF0000000025 +:10B430004200000000500052D227000057000000D8 +:10B4400000500052D2270000FFFF0000FFFFFFFF67 +:10B45000000000000100000000500052D227000050 +:10B460003D00000000500052D227000056000000AE +:10B4700000500052D2270000FFFF0000FFFFFFFF37 +:10B48000000000001200000000500052D22700000F +:10B490005A00000000500052D2270000FFFF0000B9 +:10B4A000FFFFFFFF000000001600000000500052E8 +:10B4B000D22B00001A00000000500052D2270000DA +:10B4C0006600000000500052D22B0000FFFF000079 +:10B4D000FFFFFFFF0000000001000000004C0040E3 +:10B4E000D22300000300000000440040D21F0000EF +:10B4F0000800000000780040D22F00000A00000081 +:10B5000000100140D21F00000A010000000C00588A +:10B51000D20F00000B000000004C0040D21B0000C6 +:10B520001300000000780040D22F0000150000003A +:10B5300000500040D23B0000170000000010014006 +:10B54000D21F000017010000000C0058D223000099 +:10B5500018000000004C0040D22300001B00000037 +:10B5600000480040D21F00001C00000000500040B6 +:10B57000D23B00001F00000000100140D213000069 +:10B580002700000000140140D21F00002B00000023 +:10B5900000480040D21F00002B010000004C00407A +:10B5A000D223000030000000004C0040D2230000F5 +:10B5B0003200000000500040D2230000360000009E +:10B5C00000440040D21F0000390000000048004045 +:10B5D000D21F000040000000007C0040D223000089 +:10B5E0004700000000780040D21F00005600000015 +:10B5F00000780040D21F00006900000000140140E4 +:10B60000D21F00007E000000004C0040D22300004A +:10B6100089000000004C0040D22300009900000087 +:10B62000007C0040D2230000FFFF0000FFFFFFFF6F +:10B630000000000000000000004C0040D223000089 +:10B640000200000000440040D21F0000090000007A +:10B6500000100140D21F000009010000000C00583A +:10B66000D20F00000C000000004C0040D21B000074 +:10B670000F00000000780040D22F000014000000EE +:10B6800000780040D22F000016000000001001409A +:10B69000D21F00001601000000500040D23B000005 +:10B6A00016020000000C0058D22300001900000010 +:10B6B000004C0040D22300001A0000000048004067 +:10B6C000D21F00001D00000000500040D23B0000CF +:10B6D0001E00000000100140D213000026000000F0 +:10B6E00000140140D21F00002A0000000048004062 +:10B6F000D21F00002A010000004C0040D2230000AD +:10B700002C00000000500040D22300003100000057 +:10B71000004C0040D22300003500000000440040EF +:10B72000D21F00003800000000480040D21F000077 +:10B7300041000000007C0040D223000048000000CF +:10B7400000780040D21F0000570000000078004041 +:10B75000D21F00006E00000000140140D21F000044 +:10B760007D000000004C0040D22300009800000043 +:10B77000007C0040D2230000FFFF0000FFFFFFFF1E +:10B7800000000000000000000000000065CF00087D +:10B790001DD40008D5D4000869CF0008A3CF000845 +:10B7A000F37F0008F37F000899CF0008D3D1000889 +:10B7B000C9D100089DCF0008C3D10008B7D1000847 +:10B7C000B3D10008AFCF0008AFCF00089DD4000868 +:10B7D000A7D100080000000000000000D9240108E3 +:10B7E000892501085D2401084924010800000000A2 +:10B7F0000000000049D50008000000000000000023 +:10B80000ADDA00082F737464657272002F7374646C +:10B81000696E002F7374646F757400004B60D227DB +:10B820003E3CCE3BF6B053CCB0061D65BC86987648 +:10B8300055BDEBB3E7933AAAD835C65A96C298D805 +:10B840004539A1F4A033EB2D817D0377F240A46349 +:10B85000E5E6BCF847422CE1F2D1176BF551BF3752 +:10B860006840B6CBCE5E316B5733CE2B169E0F7C25 +:10B870004AEBE78E9B7F1AFEE242E34F512563FCC1 +:10B88000C2CAB9F3849E17A7ADFAE6BCFFFFFFFF5B +:10B89000FFFFFFFF00000000FFFFFFFFFFFFFFFFB4 +:10B8A000FFFFFFFFFFFFFFFF0000000000000000A0 +:10B8B0000000000001000000FFFFFFFF46494C456B +:10B8C00042440044465520496E7465726661636562 +:10B8D0000044465520436F6E666967004172647587 +:10B8E000696E6F205341004F70746100452D5254B2 +:10B8F00043536574424B50526567697374657200B7 +:10B90000452D525443476574424B505265676973E5 +:10B9100074657200452D526561643A696E76616C9A +:10B9200069642068616E646C6500452D52656164D0 +:10B930003A667365656B00452D526561643A6861CE +:10B940006E646C6520256420636F756E742030789A +:10B95000257A780A00452D45726173653A696E76DD +:10B96000616C69642068616E646C6500452D457288 +:10B970006173653A667365656B00452D4572617349 +:10B98000653A68616E646C6520256420636F756E2E +:10B9900074203078257A780A00452D4572617365E8 +:10B9A0003A666C75736800452D50726F6772616DF1 +:10B9B0003A696E76616C69642068616E646C6500DA +:10B9C000452D50726F6772616D3A667365656B00E5 +:10B9D000452D50726F6772616D3A68616E646C6577 +:10B9E00020256420636F756E74203078257A780A7C +:10B9F00000452D50726F6772616D3A666C757368A1 +:10BA000000452D43616E6E6F74206F70656E206609 +:10BA1000696C6520626C6F636B2064657669636531 +:10BA20002025732025730A00452D496E69743A66F6 +:10BA30007365656B00572D46696C6520257320730F +:10BA4000697A6520283078257A78292073686F759F +:10BA50006C64206265207468652073616D65206F79 +:10BA60006620756E6465726C79696E6720626C6FB2 +:10BA7000636B2064657669636520283078257A7861 +:10BA8000290A00536574537973436C6F636B2066A6 +:10BA900061696C65640A006D61696E00404D4355D3 +:10BAA000626F6F742020202020202020762E2530E9 +:10BAB00032642020202F3078303030303030303039 +:10BAC0002F302A344B67004041726475696E6F20D5 +:10BAD00020626F6F742020762E2530326420202063 +:10BAE0002F307830303030303030302F302A344BF7 +:10BAF0006700404578742046696C6520466C617328 +:10BB0000682020304D422020202F307830303030D7 +:10BB1000303030302F302A344B6700676F6F64004D +:10BB2000756E73657400626164004255473B206323 +:10BB3000616E27742068617070656E00726576654D +:10BB400072740074657374007065726D00492D53D2 +:10BB500074617274696E672041726475696E6F20DA +:10BB6000626F6F746C6F6164657200492D53656319 +:10BB7000757265206B657973206E6F7420636F6ECC +:10BB80006669677572656400492D5374617274202B +:10BB90004F5441203078255820307825582030786F +:10BBA00025580A00452D20205344204E4F54205341 +:10BBB0005550504F52544544007262002F66732F07 +:10BBC0005550444154452E42494E00492D536B6512 +:10BBD000746368207570646174656400492D426FF8 +:10BBE0006F74696E6720736B65746368206174207D +:10BBF000307825780A0A00492D4E6F20736B6574E2 +:10BC0000636820666F756E6400492D5374617274A9 +:10BC1000696E67204D4355626F6F7400572D466102 +:10BC2000696C65642072656164696E672073656321 +:10BC3000746F72733B20424F4F545F4D41585F49C0 +:10BC40004D475F534543544F52533D2564202D20AB +:10BC5000746F6F20736D616C6C3F0A00572D4661E5 +:10BC6000696C65642072656164696E6720696D61E5 +:10BC7000676520686561646572733B20496D616723 +:10BC8000653D25750A00572D43616E6E6F742075F2 +:10BC90007067726164653A206D6F726520736563C9 +:10BCA000746F7273207468616E20616C6C6F77655D +:10BCB0006400572D43616E6E6F74207570677261FA +:10BCC00064653A20736C6F74732068617665206ECA +:10BCD0006F6E2D636F6D70617469626C6520736542 +:10BCE00063746F727300572D43616E6E6F742075AD +:10BCF0007067726164653A206E6F7420616C6C20AD +:10BD0000736563746F72732066697420696E7369FA +:10BD10006465207363726174636800572D43616EBC +:10BD20006E6F7420757067726164653A20736C6F12 +:10BD3000747320617265206E6F7420636F6D706123 +:10BD40007469626C65005072696D61727920696D09 +:10BD500061676500492D25733A206D616769633D10 +:10BD600025732C20737761705F747970653D30782E +:10BD700025782C20636F70795F646F6E653D307835 +:10BD800025782C20696D6167655F6F6B3D30782584 +:10BD9000780A005363726174636800492D426F6FC3 +:10BDA0007420736F757263653A2025730A00492DFC +:10BDB000426F6F7420736F757263653A206E6F6E99 +:10BDC0006500452D446574656374656420696E6320 +:10BDD0006F6E73697374656E7420737461747573B8 +:10BDE0002100572D4661696C656420726561646944 +:10BDF0006E6720626F6F74207374617475733B207B +:10BE0000496D6167653D25750A00452D70616E6954 +:10BE1000632100492D5365636F6E646172792069F7 +:10BE20006D616765206F6620696D6167652070616F +:10BE30006972202825642E2920697320756E726529 +:10BE400061636861626C652E20547265617420695B +:10BE50007420617320656D7074790A00492D5377E1 +:10BE6000617020747970653A2025730A00492D535A +:10BE700077617020747970653A206E6F6E65004945 +:10BE80002D496D6167652075706772616465207307 +:10BE900065636F6E6461727920736C6F74202D3EE0 +:10BEA000207072696D61727920736C6F7400492D16 +:10BEB00045726173696E6720746865207072696D80 +:10BEC00061727920736C6F7400492D436F707969CA +:10BED0006E6720746865207365636F6E6461727944 +:10BEE00020736C6F7420746F2074686520707269A1 +:10BEF0006D61727920736C6F743A203078257A788E +:10BF00002062797465730A00452D4661696C656429 +:10BF100020746F206C6F63617465206669726D7741 +:10BF200061726520696D6167652C206572726F7240 +:10BF30003A2025640A0A00492D426F6F74696E67C2 +:10BF4000206669726D7761726520696D6167652031 +:10BF5000617420307825780A0A0073696E676C6511 +:10BF6000746F6E5F6D75746578006D616C6C6F6376 +:10BF70005F6D7574657800656E765F6D7574657854 +:10BF800000492D437573746F6D204F5441206461D7 +:10BF9000746100492D5365636F6E64617279205B33 +:10BFA00025645D205B25645D0A00492D5363726141 +:10BFB000746368205B25645D205B25645D0A00492D +:10BFC0002D44656661756C74204F54412064617422 +:10BFD0006100452D55206F6E2049415000452D537D +:10BFE000444D4D4300452D436F6E66696700452DF6 +:10BFF00042442055215300452D4D42522055215396 +:10C0000000452D496E697400452D4D6F756E7400A5 +:10C010002F66732F7570646174652E62696E00728D +:10C02000622B002F66732F736372617463682E62D4 +:10C03000696E00452D5520636F6E66696700452D5A +:10C0400053206F6E2049415000452D5320636F6E81 +:10C0500066696700452D496E69742055204D42522E +:10C0600000452D496E69742053204D42520073657E +:10C070006300452D4D6F756E742055206F6E204CFA +:10C080004F47002F7365632F7570646174652E626E +:10C09000696E0073637200452D4D6F756E74205389 +:10C0A000206F6E204C4F47002F7363722F736372A3 +:10C0B000617463682E62696E007274785F74696D72 +:10C0C0006572007274785F69646C650040496E74D3 +:10C0D00065726E616C20466C6173682020324D423F +:10C0E0002020202F307830383030303030302F3032 +:10C0F000312A3132384B612C31352A3132384B6795 +:10C100000040457874205241572020466C61736886 +:10C110002031364D422020202F30783930303030D9 +:10C120003030302F343039362A344B67000000006D +:10C130005ABF01080B000000FCA402241C000000F0 +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C17000000000000000000001000000E8030000D3 +:10C1800005000000684302241000000000000000C9 +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000001000005F +:10C1D00070C30108ACC30108CD4A01082940010819 +:10C1E00094C30108040000000000000000000000EB +:10C1F000E95201080D53010881C30008EDBE000893 +:10C20000F37F0008B5BF000851C200085DC00008F8 +:10C21000E3390108097E0008097E0008017E000854 +:10C22000877D00087D7D0008817D0008937F0008E0 +:10C23000337F00080F7E0008F97D00080000000031 +:10C240000000000023AE00084180000879BA000811 +:10C25000E18000080B7D0008B77C0008637C0008C3 +:10C260001D7C0008E3390108097C0008F57B000803 +:10C27000E17B0008B97B0008A57B00089F7B0008D4 +:10C28000937F0008337F00080F7E0008737B00084F +:10C29000997B0008877B0008837B00087F7B000870 +:10C2A0000000000000000000E1390108A549010874 +:10C2B0003549010829490108DD3901088D41010886 +:10C2C000C948010839480108E3390108B9390108AA +:10C2D000B3390108AD390108A73901087D7D00088F +:10C2E000A1390108BF390108BF390108BF39010868 +:10C2F00099390108000000000000000021AE00088C +:10C3000035800008057B0008FD7A0008F57A0008F2 +:10C31000AB7A0008617A0008217A0008E339010845 +:10C320002F7900082779000811790008F7780008AC +:10C33000EF780008DD780008D379000885790008D7 +:10C3400037790008D57800080105010001050302CE +:10C3500004010401030403020401040304020401B0 +:10C3600004010403010303040104000000000000B1 +:10C37000C3C0010800000000B444022444000000CF +:10C38000F844022400030000010000000100000046 +:10C39000000000000000000000000000A84302248C +:10C3A00034000000DC43022450000000B9C0010842 +:10C3B000000000007044022444000000F8470224FA +:10C3C0000003000028000000010000000000000041 +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C43000400300241F0000001C0000001F0000003B +:10C440001E0000001F0000001E0000001F00000072 +:10C450001F0000001E0000001F0000001E00000062 +:10C460001F0000001F0000001D0000001F00000052 +:10C470001E0000001F0000001E0000001F00000042 +:10C480001F0000001E0000001F0000001E00000032 +:10C490001F000000545A00474D54002531305B5EA8 +:10C4A000302D392C2B2D5D256E004D256875256EA0 +:10C4B0002E256875256E2E256875256E002F25683A +:10C4C00075256E3A256875256E3A256875256E00C6 +:10C4D0000020202020202020202028282828282054 +:10C4E000202020202020202020202020202020204C +:10C4F00020881010101010101010101010101010B4 +:10C5000010040404040404040404041010101010A3 +:10C51000101041414141414101010101010101016D +:10C5200001010101010101010101010110101010BF +:10C53000101042424242424202020202020202023F +:10C540000202020202020202020202021010101093 +:10C5500020000000000000000000000000000000BB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D00000686C4C002B2D00303000785800412D45 +:10C5E00046612D66383930313233343536375D00A7 +:10C5F000D5C50108D8C50108DBC501080000000049 +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:0BF00000A01908020101001000011916 +:08F00C003415FE7F0100000035 +:10F01400A80600240000000000000000FFFFFFFF1E +:10F02400FFFFFFFFFFFFFFFF0000000000000000E4 +:10F0340000000000000000000000000000000000CC +:10F0440000000000000000000000000000000000BC +:10F0540000000000000000000000000000000000AC +:10F06400000000000000000000000000000000009C +:10F07400000000000000000000000000000000008C +:10F08400000000000000000000000000000000007C +:10F09400000000000000000000000000000000006C +:10F0A400000000000000000000000000000000005C +:10F0B400000000000000000000000000000000004C +:10F0C400000000000000000000000000000000003C +:10F0D400000000000000000000000000000000002C +:10F0E400000000000000000000000000000000001C +:10F0F400000000000000000000000000000000000C +:10F1040000000000000000000000000000000000FB +:10F1140000000000000000000000000058A50224C8 +:10F124004D8D010801000000C2B20108D3B3FB02F7 +:10F1340000000000000000000000000000000000CB +:10F1440000000000000000000000000000000000BB +:10F1540000000000000000000000000000000000AB +:10F16400000000000000000000000000000000009B +:10F17400000000000000000000000000000000008B +:10F18400000000000000000000000000000000007B +:10F19400000000000000000000000000000000006B +:10F1A400000000000000000000000000000000005B +:10F1B400000000000000000000000000000000004B +:10F1C400000000000000000000000000E53A010813 +:10F1D400D93A0108593B0108713B0108993A0108E1 +:10F1E400413B0108293B0108404578742046696C7D +:10F1F4006520466C6173682031364D422020202FF3 +:10F20400307841303030303030302F343039362A95 +:10F21400344B67000000000039410108D54901085A +:10F224006144010889420108F53B0108E53B0108F6 +:10F23400E93B0108F93B0108F13B0108ED3B0108FA +:10F24400FD3B0108FD3B0108FD3B0108D93B0108DA +:10F25400B53B0108CCC0010801C10108D801002454 +:10F2640094270224E5510108114A0108ED410108DF +:10F274006D4E0108193A01080D3A01081201000205 +:10F284000000004041236403000201020301000066 +:10F294000403090432030000000000000000000021 +:10F2A400000000000000000000000000000000005A +:10F2B400000000000000000000000000000000004A +:10F2C400000000000000000009027800030102C0F1 +:10F2D400FA0904000000FE0102060904000100FE10 +:10F2E4000102070904000200FE01020809040003E8 +:10F2F40000FE01020909210BFF0000101A01080B8E +:10F3040001020202010009040100010202010005D8 +:10F31400240010010524010002042402020524062D +:10F3240001020705830308000909040200020A0018 +:10F3340000000705020240000007058202400000A9 +:10F344000A060002000000400100011440030024EA +:10F3540000000000F0C3010810C40108D0C3010874 +:10F364000000000000000000000000000000000099 +:10F374000000000000000000000000000000000089 +:10F384000000000000000000000000000000000079 +:10F394000000000000000000000000000000000069 +:10F3A4000000000000000000000000000000000059 +:10F3B40097C4010897C40108010000000000000080 +:10F3C4004A000000000000000000000000000000EF +:10F3D4000000000000000000000000000000000029 +:10F3E40000000000000000004A00000000000000CF +:10F3F4000000000000000000000000000000000009 +:10F4040000000000000000000000000000000000F8 +:10F4140044A502240000000025050008712D000801 +:08F424000105000800000000D2 +:040000050800067D6C +:00000001FF diff --git a/bootloaders/PORTENTA_H7/portentah7_bootloader_mbed_hs_v2.hex b/bootloaders/PORTENTA_H7/portentah7_bootloader_mbed_hs_v2.hex new file mode 100644 index 000000000..199f89ae1 --- /dev/null +++ b/bootloaders/PORTENTA_H7/portentah7_bootloader_mbed_hs_v2.hex @@ -0,0 +1,8054 @@ +:020000040800F2 +:100000000000082481040008CD0400081D04000835 +:1000100023040008290400082F0400080000000041 +:100020000000000000000000000000005503000870 +:10003000CD04000800000000EF030008FF030008E3 +:10004000CD040008CD040008CD040008CD0400084C +:10005000CD040008CD040008CD040008CD0400083C +:10006000CD040008CD040008CD040008CD0400082C +:10007000CD040008CD040008CD040008CD0400081C +:10008000CD040008CD040008CD040008CD0400080C +:10009000CD040008CD040008CD040008CD040008FC +:1000A000CD040008CD040008CD040008CD040008EC +:1000B000CD040008CD040008CD040008CD040008DC +:1000C000CD040008CD040008CD040008CD040008CC +:1000D000CD040008CD040008CD040008CD040008BC +:1000E000CD040008CD04000800000000CD04000885 +:1000F000CD040008CD040008CD040008CD0400089C +:10010000CD040008CD040008CD040008CD0400088B +:10011000CD040008CD040008CD040008CD0400087B +:10012000CD040008CD040008CD040008CD0400086B +:10013000CD040008CD040008CD040008CD0400085B +:10014000CD040008CD0400080000000000000000FD +:10015000CD040008CD040008CD040008CD0400083B +:10016000CD040008CD040008CD040008CD0400082B +:10017000CD040008CD040008CD04000800000000F4 +:10018000CD040008CD040008CD040008CD0400080B +:10019000CD040008CD040008CD040008CD040008FB +:1001A000CD040008CD040008CD040008CD040008EB +:1001B000CD040008CD040008CD040008CD040008DB +:1001C000CD040008CD040008CD040008CD040008CB +:1001D000CD040008CD040008CD040008CD040008BB +:1001E000CD040008CD040008CD040008CD040008AB +:1001F000CD040008CD040008CD040008CD0400089B +:10020000CD040008CD040008CD040008CD0400088A +:10021000CD040008CD040008CD040008CD0400087A +:10022000CD040008CD040008CD040008CD0400086A +:100230002548010871310008CD040008CD040008EC +:10024000CD040008CD040008CD040008CD0400084A +:10025000CD040008CD040008CD040008CD0400083A +:10026000CD040008CD040008CD040008CD0400082A +:10027000CD040008CD040008CD040008CD0400081A +:10028000CD040008CD040008CD04000800000000E3 +:10029000CD040008CD04000810B5054C237833B90F +:1002A000044B13B10448AFF300800123237010BD49 +:1002B000E00300240000000038F3010808B5034BF8 +:1002C0001BB103490348AFF3008008BD00000000E4 +:1002D000E403002438F30108A3F5803A704700BF17 +:1002E000174B002B08BF134B9D46FFF7F5FF00216E +:1002F0008B460F461348144A121A16F047FF0E4B4E +:10030000002B00D098470D4B002B00D098470020C1 +:10031000002104000D000D48002802D00C480EF00A +:10032000E7F816F023FD200029000EF087FF0FF0FC +:1003300057FA00BF0000080000000000890F010804 +:1003400000000824E0030024B03E0024F1E400088B +:10035000000000001EF0040F0CBFEFF30880EFF365 +:100360000980816911F8021C002932D101B590E899 +:100370000F10E047BDE800508CE80300244B93E8E1 +:100380000600914208BF70471A6041B91EF0100F75 +:1003900010D1204B186820F0010018600AE02CE909 +:1003A000F00F1EF0100F08BF2CED108A81F822E02C +:1003B000C1F838C0906B92F8221061F0FF0E1EF069 +:1003C000100F08BFB0EC108AB0E8F00F80F3098876 +:1003D0007047114A13689942FAD801B552F821C002 +:1003E0000FC8E047BDE80050CCF80000704701B5E9 +:1003F00012F006FABDE80140EFF3098CBEE701B543 +:1004000012F040FABDE80140EFF3098CB6E70000B6 +:100410005001002434EF00E010AC0108102300F07C +:1004200007B8202300F004B8302300F001B84023BF +:100430009C46F0B404AE7546E80801D3EFF3098694 +:100440000E4F0FCE0FC70FBC0FC74046494652464E +:100450005B460FC71DCE3100A60A00D304316E09DA +:1004600000D248311FC7EFF309806946EFF31486C5 +:1004700063C7604601490FF067FB00BF4C3E002494 +:10048000DFF830D002F018FF002103E00A4B5B5880 +:100490004350043109480A4B42189A42F6D3094A9C +:1004A00002E0002342F8043B074B9A42F9D3FFF7DE +:1004B00017FF70470000082444F3010800000024DF +:1004C000D0030024E0030024B03E0024FEE7000037 +:1004D000264B022283F83E201B681A6A22F0010292 +:1004E0001A621A6A42F001021A62214A934219D032 +:1004F00002F58062934215D002F57052934211D0FA +:1005000002F5806293420DD002F58062934209D0D9 +:10051000B3F1804F0ED19968164A0A40062A21D1BC +:10052000002070475A6C42F400425A64104A9342C9 +:10053000EED1F0E7104A9342EDD002F5806293428B +:10054000E9D002F580629342E5D002F57842934209 +:10055000E1D0A2F56C429342DDD01A6842F001026C +:100560001A60DDE7B2F5803FF7D1D9E7640E0024C9 +:10057000000001400700010000040040024B6FF042 +:1005800002021B681A617047640E0024034B1A684C +:10059000D36823F00203D360704700BF640E0024C9 +:1005A000064B6FF002021B681A615A6942F00202A0 +:1005B0005A61DA6842F00202DA607047640E002481 +:1005C000054B6FF002021B6858631A61DA6842F04B +:1005D0000202DA60704700BF640E0024014B586AC3 +:1005E000704700BF000C0040064A1168CB6823F03A +:1005F0000203CB6092F83E30012B01D1FFF768BFB8 +:10060000704700BF640E0024074B084A13601A6944 +:10061000910708D5DA68920705D56FF00202044801 +:100620001A610EF07DB87047000C0040640E002483 +:10063000649B010800487047AC9A0108024BD868D7 +:10064000C0F30010704700BF004000583E48F0B5AE +:10065000036806463D4D41683D4C2B402F462140E6 +:1006600002682A409A425BD1426822408A4257D1AE +:100670000A0DC1F3034402EB820204EB4202D4B23E +:10068000A51E882D4AD8C3F30232C1F30117C3F364 +:10069000032014F0030F02EB820204F1440607EB7F +:1006A000870700EB420C01F00F022A4802EB4702D9 +:1006B00003F00F0702F1FF3200FB02F24FF03C00A3 +:1006C00010FB0C20C3F3021202EB820207EB420282 +:1006D0001044C3F30152C3F3034302EB820203EB62 +:1006E00042034FF4616202FB0303C1F30030C1F324 +:1006F000032208BF0C214FEA800718BF00218A2C73 +:10070000384402EB400202F1FF320A44124951F828 +:100710002200184409D1114B984208D3002011E05F +:10072000336871683B4021409AE7462E0AD004F1B5 +:10073000430240F26D139210113A03FB0522054B60 +:1007400003FB02000021F0BD004000587F7F7F00C6 +:100750003FFFFF0080510100049B010800D12F00E2 +:100760006AB101F00301074B0329596808D000F46E +:100770007060B0F5706F03D121EA02025A607047D1 +:100780000A43FBE70004005830B5114B114DD5F872 +:1007900094409C42FBD14943012A01EB41034FEABB +:1007A00041046FEA030304D0022A0BD0C26813404D +:1007B0000BE0C26813401943C160064B4FF440720E +:1007C0005A6130BDC26813402343C360F5E700BFE0 +:1007D0000003008000640258024BD869DA69824243 +:1007E000FBD17047002C0058044B054A1878054B84 +:1007F000002814BF10461846704700BF4019002457 +:10080000B49A0108BC9A010890F85030011D032BDE +:100810000ED8DFE803F00207090B0648064A42F843 +:10082000231070470548F9E70548F7E70548F5E75D +:100830000020F3E7215D00081C1000243D5D000846 +:10084000595D0008755D000809010028C9B206DB82 +:1008500000F1604000F5614080F80013704700F03F +:100860000F00014B1954704714ED00E073B51C4B99 +:10087000B0F95C409D6804F11006B0F95E2045F8BF +:100880002610BFF34F8F9B6802F1100543F8251027 +:10089000BFF34F8F90F870302046002B0CBF022121 +:1008A00001210191FFF7D0FF01991046FFF7CCFF1E +:1008B000002C08DB0123610904F01F0403FA04F48F +:1008C000084B43F82140002A08DB0123510902F0BC +:1008D0001F0203FA02F2034B43F8212002B070BD5D +:1008E00000ED00E000E100E02DE9F04191F800E0CA +:1008F0004B7874464E69012B354F4FEA4414DFF8AC +:10090000D4C044D100F510652B19B6B91E69374023 +:100910001F611E6946F400261E611E6906EA0C0668 +:10092000012A1E6122D10A6902B15A612B5943F092 +:1009300004432B510020BDE8F081D3F8108008EA71 +:100940000C0CC3F810C0D3F810C00CEA07071F61E5 +:100950008F68BE421E6946F4002688BF4F611E6143 +:100960004E691F69C6F312063E43D9E72B5943F07F +:1009700004432B514B69002BDCD00EF00F020123F6 +:10098000D0F8341893400B43C0F83438D2E700F560 +:10099000306003191D6905EA0C051D611D693D40A4 +:1009A0001D618D6806B14D611E69C5F31205012AEE +:1009B00046F400261E611E6945EA06051D6102D146 +:1009C000CA6802B15A61035943F004430351B1E7C5 +:1009D000FFFF07E00000F8FF0023092803D840EAE2 +:1009E0000310C0B270470A380133C0B2F5E7000007 +:1009F0004E4A70B5946A966AD36A16F07C7FC6F345 +:100A00000551556C00F08D8007EE901AC3F300235A +:100A1000C5F3CC0104F00304F8EEE76A4B43012C64 +:100A2000B7EE006A07EE903AFAEEE97A6BD0022C44 +:100A30005BD0002C67D113689B0646D51168136CF8 +:100A4000C1F3C1013A4AC3F30803CA4007EE102AB2 +:100A5000F8EEC75A85EEA67A06EE903AF8EEE66A08 +:100A600076EEA77A77EE867A304A67EE877A136C4D +:100A7000C3F3462307EE103AB8EEC77A37EE067A8C +:100A8000C7EE876AFCEEE66AC0ED006A136CC3F33A +:100A9000064307EE103AB8EEC77A37EE067AC7EE8D +:100AA000876AFCEEE66AC0ED016A136CC3F3066365 +:100AB00007EE103AB8EEC77A37EE066A87EE867A06 +:100AC000BCEEC77A80ED027A70BD136CDFED195A67 +:100AD000C3F3080307EE103AB8EEC77A77EE277A29 +:100AE00077EE867A85EEA67ABEE7136CDFED125AB2 +:100AF000C3F3080307EE103AB8EEC77A77EE277A09 +:100B000077EE867AEEE7136CDFED0C5AC3F3080339 +:100B100007EE103AB8EEC77A77EE277A77EE867A44 +:100B2000E0E7C0E900118160CEE700BF0044025851 +:100B30000090D0030024744C20BCBE4B0024744AA7 +:100B40004E4A70B5946A966AD36A16F47C3FC6F32F +:100B50000531D56B00F08D8007EE901AC3F30013BA +:100B6000C5F3CC0104F00304F8EEE76A4B43012C13 +:100B7000B7EE006A07EE903AFAEEE97A6BD0022CF3 +:100B80005BD0002C67D113689B0646D51168936B28 +:100B9000C1F3C1013A4AC3F30803CA4007EE102A61 +:100BA000F8EEC75A85EEA67A06EE903AF8EEE66AB7 +:100BB00076EEA77A77EE867A304A67EE877A936B7D +:100BC000C3F3462307EE103AB8EEC77A37EE067A3B +:100BD000C7EE876AFCEEE66AC0ED006A936BC3F36A +:100BE000064307EE103AB8EEC77A37EE067AC7EE3C +:100BF000876AFCEEE66AC0ED016A936BC3F3066395 +:100C000007EE103AB8EEC77A37EE066A87EE867AB4 +:100C1000BCEEC77A80ED027A70BD936BDFED195A96 +:100C2000C3F3080307EE103AB8EEC77A77EE277AD7 +:100C300077EE867A85EEA67ABEE7936BDFED125AE1 +:100C4000C3F3080307EE103AB8EEC77A77EE277AB7 +:100C500077EE867AEEE7936BDFED0C5AC3F3080369 +:100C600007EE103AB8EEC77A77EE277A77EE867AF3 +:100C7000E0E7C0E900118160CEE700BF0044025800 +:100C80000090D0030024744C20BCBE4B0024744A56 +:100C9000094A82B0D2F8F41041F00201C2F8F4100F +:100CA000D2F8F42002F002020192044A019B536838 +:100CB0001843506002B070470044025800040058C6 +:100CC00011F0010307D090F8413003F02803282BDE +:100CD0000CBF4223F2238A0709D590F8412002F085 +:100CE0002802282A0CBF43F0440343F0F4030A040B +:100CF000016848BF43F0B8030A6822EA03030B60A7 +:100D0000704790F84130026803F02803282B70B533 +:100D1000044625D1956991699368C5F30045D66865 +:100D2000C668022E16D1C3F3C21383EA114313F02F +:100D300006030FD1816C01318164816C022908D1D5 +:100D400008218364D16184F84030012375B184F8AF +:100D50006D3070BD4FF40041FFF7B2FF0023F2E7A2 +:100D60000823D361002380F84030F2E784F86E3026 +:100D7000EFE7000030B5039DC1F30901046845EABF +:100D8000024260681A43044B43EA55530A4320EA7F +:100D900003000243626030BDFF63FF03D0F884307C +:100DA00037B50446002B62D0D0F89430002B5ED0CB +:100DB00090F87C2090F84110002A14BF4FF0007288 +:100DC00000222029C26545D190F84010012941D068 +:100DD0000125816FD0F890009BB284F84050222505 +:100DE000606284F84150102584F842500025656403 +:100DF0006385214BE2626363638D9BB2FF2B2BD92A +:100E0000FF2323854FF08073226B122A4FF00002DC +:100E100009D0E06AAA2823D1E262628D92B2FF2A49 +:100E200000D8E36A154A89B20092204694F8282037 +:100E3000FFF7A0FF626B124900238A4284F840301A +:100E400004D0104B9A4214BFF423002321680A688F +:100E500013430B6003B030BD638D2385E36AD3E792 +:100E6000E26AB2F52A4FD8D14FF00072D4E70823D6 +:100E700084F86030EEE700BF775A00080024008055 +:100E8000995B0008ED56000803689A69910701D53F +:100E900000229A629A69D20703D49A6942F0010249 +:100EA0009A61704738B5002580F8425090F841307B +:100EB000212B4FF0200380F841300BD111234563E3 +:100EC00001210363FFF7FCFE80F84050BDE8384085 +:100ED000FFF764BF1223022145630363FFF7F0FEAF +:100EE000082380F8405080F8603038BD0268436BBA +:100EF0009169126803B118477047000090F84130BB +:100F0000202B0BD12823026880F84130044B436327 +:100F10000020136843F0B803136070470220704745 +:100F20007958000808B5194B2022C36200230363D7 +:100F3000436380F8412080F842304B0712D50368A4 +:100F40005A6A436A1A70436A01334362038D4BB194 +:100F5000013B0385438D013B9BB24385436C43F0CA +:100F60000403436448F20301FFF7AAFE102203685A +:100F7000DA61002390F86C2080F84030022A01D119 +:100F800080F86E30BDE80840FFF7B8BF0000FFFFF3 +:100F900090F8413003F0FF020BB980F84020242381 +:100FA00080F8413003681A6822F001021A60426832 +:100FB00022F070621A619A6822F400429A60D0E9C5 +:100FC0000221012925D142F400429A605A6842F078 +:100FD000007242F400425A60DA6822F40042DA6099 +:100FE000D0E904210A43816942EA0122DA60D0E9AA +:100FF00007210A431A601A6842F001021A600023AE +:101000002022436480F84120036380F84230184670 +:10101000704742F4044202299A60D7D14FF400622B +:101020005A60D3E710B528B190F83530022B03D0C1 +:101030008023436501207FE00368504A934252D0E9 +:101040004F498B424FD018318B424CD018318B42D4 +:1010500049D018318B4246D018318B4243D01831D9 +:101060008B4240D018318B423DD001F556718B42F6 +:1010700039D018318B4236D018318B4233D01831E9 +:101080008B4230D018318B422DD018318B422AD070 +:1010900018318B4227D018318B4224D01A6822F0A5 +:1010A0000E021A601A6822F001021A60354A934251 +:1010B00043D1026E136823F480731360D0E91613D2 +:1010C00003F01F02012393404B60D0E919325A60AC +:1010D000C36E002B46D01A6822F480721A60D0E9E1 +:1010E0001C325A603EE00421934280F835101ED035 +:1010F000234A93421BD01832934218D0183293429D +:1011000015D01832934212D0183293420FD01832B1 +:1011100093420CD01832934209D002F55672934292 +:1011200005D01832934202D018329342FFD01A6889 +:1011300022F001021A60002010BD134A9342B8D079 +:1011400014329342B5D014329342B2D01432934247 +:10115000AFD014329342ACD014329342A9D014329F +:101160009342A6D00123002480F83530036D80F827 +:1011700034400BB19847DEE71846DDE71000024027 +:1011800028000240085402581C54025838B590F800 +:101190006C300446022B63D1B0F8763001339BB239 +:1011A000A0F87630B0F87620B0F8743092B29BB2E6 +:1011B0009A4255D2B0F8765090F84120ABB202F086 +:1011C0002802282A05D1056FED1803D14FF40073CA +:1011D000436438BD48F20201FFF772FD90F84030D9 +:1011E000012BF6D090F841300121292B80F84010D6 +:1011F00013D1FFF765FD03681A6850040DD51A680E +:10120000A06B22F480421A6038B1174B0365FFF7D8 +:1012100009FF10B1A06B036D98472A23002284F8C0 +:101220004130202384F8423023686264596821F4F5 +:1012300000415960012165626185618D21854FF012 +:101240008071E162094961639969C90301D4082188 +:10125000D96184F840201A6842F0FC021A60B8E7AD +:10126000002384F86E30B4E77754000879580008FA +:1012700008B5036800211A6880F84210510415D59A +:101280001A6822F480421A6090F84130292B13D159 +:101290002823012180F8413021230363FFF710FD4B +:1012A000002380F8403080F86D3008BD1204EBD583 +:1012B0001A6822F40042E6E790F841302A2BF4D174 +:1012C0002823022180F8413022230363FFF7F8FC32 +:1012D000002380F84030BDE80840FFF757BF0020EA +:1012E00070476FF0570070476FF057007047036802 +:1012F00010B49C6C0023A4461A465DF8044B60476A +:101300006FF05700704743680A46196810B48C6D37 +:101310008168184623465DF8044B18474368816886 +:101320001A681846526D1047436881681A68184653 +:10133000126D1047436881681A681846D26C1047CE +:1013400030B4446813462268956C0A46816820468A +:10135000AC4630BC6047436881681A681846526CD6 +:101360001047436881681A681846126C104730B4F9 +:10137000446813462268D56B0A4681682046AC460D +:1013800030BC604730B4446813462268956B0A4607 +:1013900081682046AC4630BC604710B504464068C2 +:1013A00030B10368A1685B6B98470023636010BD90 +:1013B0006FF01500FBE738B50446FFF7EEFF054672 +:1013C000236820465B689847284638BD70B50D46AF +:1013D0004168044641B929680E6B00F108012846AE +:1013E000B04700B9656070BD6FF01500FBE7000005 +:1013F000044B10B50360044643680BB1FFF7CDFF03 +:10140000204610BDA8990108034B10B5044603609F +:10141000FFF7EEFF204610BD409A0108436881683F +:101420001A681846526F1047436881681A68184650 +:10143000126F1047436881681A681846D26E1047C9 +:1014400043680A46196810B48C6E816818462346B2 +:101450005DF8044B184710B50446406830B1036886 +:10146000A1681B6E98470023636010BD6FF01500E4 +:10147000FBE738B50446FFF7EEFF05462368204634 +:101480005B689847284638BD38B5436804460D4622 +:1014900043B90B6800F108012846DB6D984700B995 +:1014A000656038BD6FF01500FBE70000044B10B518 +:1014B0000360044643680BB1FFF7CDFF204610BD23 +:1014C0007C990108034B10B504460360FFF7EEFF5B +:1014D000204610BD149A01080B4640F2011200216B +:1014E00070B50446184615F051FE03466068A168C1 +:1014F0000268556E1A462B46BDE87040184700003A +:1015000008B50DF065F8064B01221B685A604FF4D0 +:101510008052044BC3F89021BDE808400DF044B858 +:10152000040E002400E100E008B50DF051F8084B6E +:1015300001221A700022074B1A704FF48052064B9A +:10154000C3F810211A61BDE808400DF02DB800BFA6 +:10155000301000243810002400E100E070B504468B +:101560000DF036F8FFF738F9264B05461C60264A81 +:101570004FF480511161254E18463178F1B9611F41 +:101580004FF6F572914222490FD94FF6FA72954201 +:101590000BD906340122A4B20A701C601D4B012233 +:1015A0001A70BDE870400CF0FFBF00220A7003689B +:1015B000AB42194B28BF01221A70EFE7FFF7A0FFDB +:1015C00000235A19013392B2A24204BF0534A4B2D7 +:1015D000052BF6D1114BAC421B6811D24FF6FA72B3 +:1015E00095420DD84FF0FF325A6100230C4C3370F6 +:1015F0002378002BD5D10CF0C3FF01232370D0E753 +:101600005C61F2E73410002400E100E031100024B6 +:10161000681200243810002418100024040E00243E +:1016200069120024F8B5037890F801C0012B057FFA +:101630000279077B866844792ED0022B2FD0002BAD +:1016400030D14FF480738B610023C1F800C04D612D +:101650004B63C1E90B333FB3CB61CB60037C012B00 +:1016600045D0022B48D0002B4BD14FF480430B6266 +:101670000123027E002A47D000230B620B61437FC7 +:10168000012B6AD0022B6BD0002B6CD14FF08073F2 +:1016900000204B628862F8BD4FF40073D3E74FF42B +:1016A0004073D0E70023CEE7012A4E600BD0022A18 +:1016B0000CD072B94FF48063CB61032C09D8DFE8FA +:1016C00004F00B0D10134FF40063F5E74FF4406383 +:1016D000F2E727480DF0ACFB0023BEE74FF4805340 +:1016E000BBE74FF40053B8E74FF44053B5E74FF46E +:1016F00000430B620223BCE74FF440430B62042318 +:10170000B7E700230B62B4E77BB3427CB2FBF3F490 +:1017100003FB142414F0FF0F27D1561EF610741C7F +:10172000042C22DCC2EBC40212F0FF0210D0B2FB88 +:10173000F3F39D4219D3EB1A4B61436903FA02F2AA +:101740008A60032E07D82404A4F580340C6196E740 +:1017500043698B60F5E70748BCE74FF0007397E7F4 +:101760004FF0407394E7002392E74FF0FF3092E789 +:10177000C4940108ED94010800B5564B8DB00A28B9 +:1017800000F2A480DFE800F006162432404E5C6AC6 +:1017900078869400D3F8E0204F4842F00102C3F865 +:1017A000E020D3F8E03003F001030193019B0DB07A +:1017B0005DF804FBD3F8E020484842F00202C3F889 +:1017C000E020D3F8E03003F002030293029BEEE73F +:1017D000D3F8E020424842F00402C3F8E020D3F8F6 +:1017E000E03003F004030393039BE0E7D3F8E02029 +:1017F0003C4842F00802C3F8E020D3F8E03003F0A0 +:1018000008030493049BD2E7D3F8E020364842F063 +:101810001002C3F8E020D3F8E03003F01003059382 +:10182000059BC4E7D3F8E020304842F02002C3F81B +:10183000E020D3F8E03003F020030693069BB6E7E0 +:10184000D3F8E0202A4842F04002C3F8E020D3F861 +:10185000E03003F040030793079BA8E7D3F8E020AC +:10186000244842F08002C3F8E020D3F8E03003F0CF +:1018700080030893089B9AE7D3F8E0201E4842F4BF +:101880008072C3F8E020D3F8E03003F4807309934A +:10189000099B8CE7D3F8E020184842F40072C3F8A3 +:1018A000E020D3F8E03003F400730A930A9B7EE74C +:1018B000D3F8E020124842F48062C3F8E020D3F865 +:1018C000E03003F480630B930B9B70E70D480DF041 +:1018D000AFFA00BF0044025800000258000402584A +:1018E00000080258000C0258001002580014025858 +:1018F00000180258001C0258002002580024025808 +:10190000002802580495010870B50CF061FE2C4BBC +:101910002C4C1A7832B100221A70012223685A60C6 +:101920000DF004FA23681A68D50706D59A68D0071F +:1019300003D501225A600DF0F9F923681A681107DE +:1019400024D59A68120721D508221F4C5A6001221B +:101950001E4B1A7023781BB10CF0E2FD002323709C +:101960001B4C237893B11B4D1B492B7803F0FF06CA +:10197000B3B1FEF731FF06300B6880B2984209D34D +:10198000FFF7D2FD00232B7000232370BDE87040C9 +:101990000CF00ABE0868063880B2FFF7DFFDF1E7F9 +:1019A0000E4D2B7843B1FEF717FF0B68984203D317 +:1019B000FFF7BAFD2E70E7E70868FFF7CFFDE3E712 +:1019C00030100024040E0024691200243110002479 +:1019D0003810002468120024341000241810002449 +:1019E00010B50446FFF710FD204615F069FB2046B0 +:1019F00010BD10B50446FFF765FD204615F060FBED +:101A0000204610BD10B50446FFF7F2FC204615F045 +:101A100057FB204610BD10B50446FFF747FD204692 +:101A200015F04EFB204610BDF0B5142085B00CF02B +:101A3000A5FC4FF6FF71831E00F1120223F8021F6E +:101A40009A42FBD1974B0021974E10251A463060E1 +:101A500002F8011B013D02F8011BFBD142F6021204 +:101A6000924C2946924F5A8204F10800914B924AB7 +:101A70001D61DA605C221D60C3E901558F4B236054 +:101A80008F4B636015F082FB3B234FF0010C201D50 +:101A9000A4F89A308B4BC4F8A850A4F86850C4F846 +:101AA0008C5084F89850C4E927734FF400336627AC +:101AB0006366854BA4F8A470C4E9243C834BC4E955 +:101AC0002B350CF0F7FF04F1BC00A4F8B87000F05F +:101AD000FFF97F4B7F48C4F8F431C4F8005284F812 +:101AE00004520EF09BF80CF0B9FB7B480768092FF5 +:101AF00000F3B8803368991E1A4603F1120631F9D3 +:101B000002CFBCF1660F00F0B080B142F7D11433C0 +:101B100011460232B1F90060013640F09F80662321 +:101B20000B800137002607606A480EF077F80DF049 +:101B3000F5FB00200021C4F8B460032600234FF019 +:101B4000FF32C4F86031C4F8182184F8543184F8A5 +:101B5000FD3184F8FE31C4F8E820C4F8FC20A4F874 +:101B60000031C4E944014FF400300121C4F8F80108 +:101B70000220C4F8281184F8F01084F80211C4E996 +:101B800038603520C4E93D22C4F8EC00534C544A77 +:101B900023612260CDE9003304F144030293102352 +:101BA0000393EFF30583002B62D00020206400270D +:101BB0004C4800F08DF9442200214B4815F0E6FA1C +:101BC000012320223946A3876761484815F0DEFAD1 +:101BD0004FF4805328224FF4D060C4E90B32444BB9 +:101BE000A361444CA76515F063FA064670B3C21CA6 +:101BF000394622F00302131AE260C3F5D06323F0E2 +:101C000003031846C4E904776F1C00283CD101B1D6 +:101C1000256100252262C4E9065325600CF0DCFE34 +:101C20000EF0E2FE344B60600093344B258102934A +:101C30001023A57284F8245001950393C4E90A5532 +:101C4000EFF3058323B30020206366612C480DF079 +:101C500063FA2C480DF060FA05B0F0BD9A427FF4AB +:101C600057AF5EE76FF001065EE74FF0FF365BE7C8 +:101C70000DF0E6FA0146002897D14FF6FF706A464C +:101C8000DFF884C000DF91E740083D460121BBE753 +:101C90000DF0D6FA0028D6D16846DFF870C000DF14 +:101CA000D2E700BF600F0024580F0024601000240A +:101CB0003C005700740F002409CA00082899010845 +:101CC000FC9901083D005A0040420F00B5EA0008A7 +:101CD000005A6202300F00245C0F0024A019002477 +:101CE000A49A0108F4190024181A0024BC1900242D +:101CF000259501084419002440950108781900240D +:101D0000F00E0024B00E00246DD5000821D7000885 +:101D10000B688360054BC26813404A6813438A68A6 +:101D2000134343F48053C36000207047C0E0FEFFBC +:101D30000C4BDB68C3F3022310B4C3F107041A1D74 +:101D4000042C28BF0424062A4FF0FF328CBF033B2B +:101D50000023A2405DF8044B21EA02019940FEF7FE +:101D600073BD00BF00ED00E0464BDA6C1868D1038C +:101D700030B585B07DD410F000704CD0996A9D6A62 +:101D8000DA6A15F47C7FC5F305105C6B43D0C4F3AD +:101D9000CC0402F0010207EE900A01F00301624355 +:101DA000B7EE006AF8EEE76A012907EE902AFAEE2C +:101DB000E97A32D0022940D000294CD11A68920623 +:101DC00049D51968304AC1F3C1011B6BCA40C3F33E +:101DD000080307EE102AF8EEC75A85EEA67A06EE3B +:101DE000903AF8EEE66A76EEA77A77EE867A254A9A +:101DF00067EE877A136B136BC3F3064306EE903AD4 +:101E0000136BF8EEE66A76EE866A87EEA67AFCEE4B +:101E1000C77A17EE900A05B030BD1B6BDFED1B5A79 +:101E2000C3F3080307EE103AB8EEC77A77EE277AC5 +:101E300077EE867A85EEA67AD9E71B6BDFED145A2A +:101E4000C3F3080307EE103AB8EEC77A77EE277AA5 +:101E500077EE867AEEE71B6BDFED0E5AC3F30803CD +:101E600007EE103AB8EEC77A77EE277A77EE867AE1 +:101E7000E0E710F00060CED001A8FEF761FE039805 +:101E8000C9E700BF004402580090D0030024744A00 +:101E900020BCBE4B0024744C044B0122D3E84F0FEE +:101EA000C3E8412FC0B20029F8D17047391000248F +:101EB00007B504460091CDF804E0FFF7EDFFDDE93A +:101EC000001210B920460CF0E1FB0CF091FF00006D +:101ED0001FB5002304460362064B0093031D6846AA +:101EE00002931C2303930B23019310F071FD2060D8 +:101EF00004B010BD4795010810B50446802112F0CA +:101F0000C2FB00212046BDE8104012F0BCBB08B562 +:101F1000026500220B4600F13C0142654FF48072DD +:101F2000836482870269012AD2B208BFC364006851 +:101F3000FEF7DAFC002008BD08B5C0F81022002228 +:101F40000B4600F5FE71C0F81422A0F8FC210269CE +:101F5000C0F80832012AD2B208BFC0F80C320068BB +:101F6000FEF7C2FC002008BD84B02DE9F041044614 +:101F700007ADDDE90C7885E80E000CF029FB636BFA +:101F800023B994F838300BB10CF0FAFA04F12806B2 +:101F900095E80F0086E80F0020460CF059FFA06975 +:101FA000C4E908780CF0C6FCC219204641EB0803CE +:101FB0000CF094FFBDE8F04104B00CF0F5BA00005D +:101FC00010B586B004466846039180E80C0006A868 +:101FD00000E90C0010E90700034B84E807002046E5 +:101FE000E36006B010BD00BF89C500080D4B19881D +:101FF0004FF6FD734A1E92B29A4297BF0A4B4FF0BA +:10200000026303EA812303F10063834207D9B0F13D +:10201000006F34BF4FF0FF304FF4003070474FF087 +:10202000FF30704780E8F11F00FC3F00064B4FF681 +:10203000FD711A88531E9BB28B429ABF034800EA77 +:1020400082204FF40010704780E8F11F00FC3F0031 +:1020500038B50E4B0D46044603600023C0E901313C +:10206000012303730A480DF0D9FD0CF0F7F855B1C0 +:10207000084B1A681C60626005480DF0CFFD0DF03A +:102080004DF9204638BD6560F6E700BF949A010817 +:102090008C0F0024880F0024034653E8000F0138FA +:1020A00043E80002002AF8D170470000074B5A6845 +:1020B00090235343064AD358DA69120701D5082200 +:1020C0001A62D869C0F34010704700BF6C12002438 +:1020D000101300242DE9F84FFF270646D0F80080A2 +:1020E00004253C464FF6FF79B169002972D040467D +:1020F00007F0DBFB0546002855D1F0690378002B7B +:102100006BD0C27AE52B02F03F02B27150D02E2B79 +:102110004ED022F0200108294AD00F2A4DD159066D +:1021200044D503F0BF043369477BF362437BBB4272 +:102130003ED1C27E837E43EA02230FFA83FCBBBBFF +:1021400003780D22D8F81050012123F04003DFF866 +:1021500090E0013B53431EF801AB00EB0A0292F8FA +:1021600001B010F80A2042EA0B2219B3FF2B1FD846 +:1021700025F81320114601330CF1010CBCF10D0FB1 +:10218000E9D10278520605D521B1FF2B10D80022E3 +:1021900025F81320013CE4B20021304608F086FE09 +:1021A00005460028A0D00023B3610CE0A342BDD0B7 +:1021B000FF24F1E74A45DFD0FAE73CB907F066FBB8 +:1021C000B84203D100252846BDE8F88F4FF0FF3311 +:1021D000F362F8E7002DF5D0E5E70425E3E700BF5B +:1021E0001099010808B503480DF018FDBDE8084036 +:1021F0000DF094B8B40F00242DE9F04F87B00646D7 +:102200008B4617464FF001090DF1170ADDE910451D +:102210002544A3EB0408AC4201D1012011E008EBF6 +:10222000040300225946304600933B46CDE901A9FC +:1022300005F011FC28B914F8013B9DF817209A42CB +:10224000E9D007B0BDE8F08F2DE9F04F89B0064620 +:102250008846DDF84C9005924BB94FF0FF32C9F833 +:102260000020149A0020136009B0BDE8F08F013BF4 +:1022700007A900684FF0040A079305F0CFFB12A9E5 +:10228000054630680DF1140B05F0C8FB0746AF4258 +:10229000059B03D3C9F80030129BE2E7EC1B95FACB +:1022A000A5F241463046B4FA84F4B2FA82F2C4F19F +:1022B0001F04944228BF1446A200CDE901BA00923F +:1022C000002205F0C8FB0028CED1012303FA04F454 +:1022D0002D1BDCE7034B596A5A6A521A8242FBD320 +:1022E000704700BF000C0040C069C0F38010704709 +:1022F00038B5431C0C4629D000F00F021D4BC0F32B +:10230000031053F82250FFF737FA1B491B4BD1F843 +:1023100094209A42FBD105FB05F2016802EB4203CF +:102320000B40B3FBF2F3013B012B19D8E31E022B48 +:1023300043680CD82B43032C436019D10122294652 +:10234000FEF722FA0C4B4FF440725A6138BD23EA73 +:102350000503012C4360F1D0022C07D00022EEE7E8 +:1023600004F0FD03012BE9D0052CF5D10222E6E7AC +:10237000052CF2E7C49A01080064025800030080AB +:102380002DE9F843461C05460C4600F09C801FFAD8 +:1023900080F9554A40F47061B2F90030581C4BD1B5 +:1023A0000026524B09F00F02C5F3031053F82270B8 +:1023B000FFF7E2F94E494F4BD1F894209A42FBD1F6 +:1023C00007FB07FCC4F3831283680CEB4C0E0F2A47 +:1023D0006FEA0E0114BF02FB0CF243EA0E034FF446 +:1023E000407E1CBF0B40134304F007028360022AA7 +:1023F0003F4BC3F814E036D10EF1004ED3F8948071 +:10240000F045FBD119F0080FC4F383285DD03B0AD7 +:10241000D0F824E05B435B43C3EB031903FB08F3F1 +:102420002EEA090E4EEA03034362314B4FF4407E1D +:10243000C3F814E002231EE043F470638B4210D112 +:1024400004F003035668032BABD109F47063B3F5B2 +:10245000706FA6D1324621462846BDE8F843FEF704 +:102460007FB9083298E7032A3CD002F1FF3EDEF143 +:10247000000343EB0E03DFF87890DFF878E0D9F83B +:102480009480F045FBD1D0F800E003FB0CFC013A4E +:1024900001EA0E01012A41EA0C01016005D84368F6 +:1024A00022074CBF3B43BB434360C4F30112394690 +:1024B000FEF76AF9324621462846FEF751F90C4BE1 +:1024C0004FF440725A61BDE8F8830CFB0CF9036AC3 +:1024D000C9EB091E23EA0E0E09FB08F34EEA0303BB +:1024E0000362A2E71346C6E798970108C49A010859 +:1024F000006402580003008000280DDB430901221C +:1025000000F01F00203302FA00F0044A42F82300D2 +:10251000BFF34F8FBFF36F8F704700BF00E100E044 +:1025200010B50CF055F8124B1A7842B9114A1268DE +:1025300011680907FCD50821516001221A700E4C60 +:1025400023781BB10BF0ECFF0023237000230B4A10 +:102550008C2013700A4A1370FFF7CEFF094B4FF41B +:102560008052BDE81040C3F890210CF01DB800BFA8 +:1025700031100024040E00246912002438100024B5 +:102580003010002400E100E0FFF7CABF10B50CF0E6 +:102590001FF8134B1348144A596A146803881160D2 +:1025A0001B1B0B440146B3F5803F16D34FF47A71E1 +:1025B000B3FBF1F201FB1233038006E00132A3F515 +:1025C0007A73B3F57A7FF9D20B80084C23681A44EA +:1025D00022600BF0E9FF206810BD0022F1E700BF88 +:1025E000000C0040581000245C10002490120024BD +:1025F00038B5114CE36803F00703062B06D0E068FA +:1026000000F03F00163818BF012038BDE36823F002 +:102610003F0343F01603E360FFF7B8FF0546636826 +:102620009B0401D50020F0E7FFF7B0FF401BB0F599 +:102630007A7FF4D90120E8E7004802582DE9F843F1 +:102640000546294F3C69FFF7A1FF022D0646274B9F +:1026500026D1D7F81041264F1C4044F00044DFF843 +:1026600088804CF25039042F1DD1D8F81000C0F3E7 +:10267000800070B934F0004122D01E4A002C9369CA +:1026800043EA04039361184B17DB5C610120BDE84A +:10269000F883FFF77BFF801B4845E4D90320F6E76A +:1026A0001C400427DBE7D8F8103127EA030313F0B6 +:1026B000040F0CBF01200020DBE7C3F81411E5E78D +:1026C000012D094B06D11A69D103E0D54FF48032B0 +:1026D0005A61DCE7D3F81021D203D8D54FF4803209 +:1026E000C3F81421D3E700BF002000520000EE170A +:1026F000040000803C10002470B504460D461646C8 +:102700002368DB6935EA030301D1002017E0FFF7F6 +:102710003DFF801B2368B0F1007F1A6810D322F4BC +:10272000D0721A609A6822F001029A602023C4F8DD +:102730008430C4F888300023032084F8803070BDD2 +:102740005107DDD5DA691205DAD54FF400621A6255 +:102750001A6822F4D0721A609A6822F001029A6014 +:102760002023C4F88430C4F88830C4F88C30E2E701 +:1027700038B50B4C2268D36823F0A003D360FFF771 +:1027800005FF05462368DB689B0601D5002038BDA0 +:10279000FFF7FCFE401BB0F57A7FF3D90320F6E784 +:1027A000400E002408B5104BDA6822F04002DA60CF +:1027B0009A68920607D4FFF7DBFF18B103200B4B92 +:1027C00083F8210008BD9A6822F020029A60FFF782 +:1027D000CFFF18B10320054B83F82100024A93680C +:1027E00043F020039360EDE700400058400E0024C2 +:1027F000F8B50F4D2B68DC6814F0400416D14FF08B +:10280000FF320327DA60FFF7C1FE06462B68DB685C +:102810005B0601D52046F8BDFFF7B8FE801BB0F57A +:102820007A7FF3D9032485F82170EFE70024F1E7DC +:10283000400E00242DE9F74F06463C250BF0C8FE5C +:102840004FF0180A4FF0070E6A4C6B4B4FF0460BD7 +:10285000B6FBF5F7B7FBF5F5B5FBFAFC0CF1040296 +:102860002360B2FBFEFECEEBCE0EA2EB0E091BF0F8 +:10287000030F07D1BCF5B77F0BD3ACF5B77C0BF1D9 +:10288000010BF4E7BCF5B67F1FD96FF4B6739C4417 +:10289000F5E70123594830214FF0000800FB0CFAFE +:1028A000574801FB030151F8042B92450FD208F160 +:1028B000FF38B9F1000F94F8201008BF4FF0070956 +:1028C00001290CD14F480CF0B3FA0023E2E708F1DC +:1028D0000108B8F10C0FE6D14FF00B08E9E70C2125 +:1028E00001FB0383012184F82010022150F82330DA +:1028F000CA2084F82110404901934862532048625D +:10290000FFF776FF019B00BBAAEB03003B4B22685D +:10291000B0FBF3F00130C0B2FEF75EF840EA493197 +:10292000ABF14400C0B2FEF757F841EA004108F1AC +:102930000100C0B2FEF750F841EA002323F07F43C4 +:1029400023F0C0035360FFF72DFF2368FF225A6274 +:1029500000284BD1012284F8212084F82020022273 +:1029600084F82120CA225A6253225A62FFF740FF9C +:1029700050BB226893681823B5FBF3F003FB10509B +:102980003C25C0B2FEF728F80146B7FBF5F005FB81 +:102990001070C0B2FEF720F80302B6FBF5F005FB9D +:1029A000106043EA0141C0B2FEF716F8084300F098 +:1029B0007F3020F0FE401060936823F48023936002 +:1029C00093689360FFF7EEFE2368FF225A6210B906 +:1029D000012384F82130002384F8203008B10A480C +:1029E00071E703B0BDE8F04F0BF0DEBD002384F8C3 +:1029F000203067E7400E002400400058805101005D +:102A0000049B01086195010878950108F8B53A4CD6 +:102A100006460D46A36A03F00303032B69D023681F +:102A200023F080532360FFF7B1FD074623689A0027 +:102A30004BD4A36A326823F07C7343EA0253A36247 +:102A4000B368F268013B013A5B0212049BB202F4E4 +:102A5000FE0213437268013AC2F30802134332695B +:102A6000013A120602F0FE4213432364E36A7269DC +:102A700023F440631343E362E36AB26923F400730F +:102A80001343E362E36A23F48073E362636CF269E5 +:102A900023F47F4323F0F80343EAC2036364E36A49 +:102AA00043F48073E362E36AB5B943F48003E362FD +:102AB000114C236843F080532360FFF767FD054600 +:102AC00023689B000FD5002005E0FFF75FFDC01BCA +:102AD0000228ABD90320F8BD012D0CBF43F400033D +:102AE00043F08073E3E7FFF751FD401B0228E7D96D +:102AF000F0E70120EFE700BF00440258F8B53A4C78 +:102B000006460D46A36A03F00303032B69D023682E +:102B100023F080632360FFF739FD074623681A011D +:102B20004BD4A36A326823F47C3343EA0233A362B2 +:102B3000B368F268013B013A5B0212049BB202F4F3 +:102B4000FE0213437268013AC2F30802134332696A +:102B5000013A120602F0FE421343A363E36A72696C +:102B600023F0C0031343E362E36AB26923F0200356 +:102B70001343E362E36A23F01003E362E36BF26959 +:102B800023F47F4323F0F80343EAC203E363E36AD9 +:102B900043F01003E362E36AB5B943F40023E36250 +:102BA000114C236843F080632360FFF7EFFC054678 +:102BB00023681B010FD5002005E0FFF7E7FCC01BD1 +:102BC0000228ABD90320F8BD012D0CBF43F48013BC +:102BD00043F40013E3E7FFF7D9FC401B0228E7D9D1 +:102BE000F0E70120EFE700BF004402582DE9F04173 +:102BF000DDF8188004460E4615461F462268936885 +:102C0000334214BF01230023AB4201D1002012E064 +:102C1000B8F1FF3FF3D0FFF7B9FCC01B404502D825 +:102C2000B8F1000FEAD10423012084F84130636C2D +:102C300043F001036364BDE8F0812DE9F04F0546E0 +:102C400085B00C46FFF7A2FC95F8402007EE900AED +:102C5000012A00F0E1800122022085F8402095F849 +:102C60004120012A40F0BE80002241F2883117EE57 +:102C7000903ACDED037A6A640091202185F84100F5 +:102C80002846FFF7B3FFDDED037A002840F0AA8065 +:102C9000D4F824C0BCF1000F03D0A26A2968013A1D +:102CA0000A61D4F818A0D4E90727BAF1000F50D070 +:102CB00063694CEA0A0AD5F800E026684FEA834BBC +:102CC000D4F83480D4E90B1967B3A36847EA0A0A39 +:102CD0002769CEF81C30BAB132431143E26841EAA9 +:102CE000090949EA080848EA0707174347EA0B07B2 +:102CF00047EA0A07CEF814706268CEF81820BCF1D3 +:102D0000000F40F0818062E0314341EA090949EA5D +:102D1000080848EA070747EA0B0747EA0A07CEF818 +:102D20001470ECE752B142EA06070F4347EA09077D +:102D300047EA0808E76848EA0707D7E746EA0107CD +:102D400047EA090747EA080747EA0B0B4BEA0A0775 +:102D5000E5E737B3A1684CEA0707D5F800E0266934 +:102D6000CEF81C106169D4F834808904D4E90BA929 +:102D70006AB13243E36842EA0A0A4AEA090949EABF +:102D8000080848EA030848EA01010F43B2E746EAA7 +:102D90000A0646EA090949EA080848EA01010F4318 +:102DA000BDE78AB1E16A4CEA02020A43216B0A4399 +:102DB000616B0A43E1680A43616942EA814229681A +:102DC0004A6162688A619AE7BCF1000F10D141F252 +:102DD000883217EE903A0221284600920122FFF72E +:102DE00005FFA8B1002385F8403005B0BDE8F08F9D +:102DF000E36A226B4CEA03031343626B1343626979 +:102E000043EA82432A685361012385F84130E9E7A8 +:102E10002B680222DA60F7E70220E6E7F0B593B00C +:102E200004460846164604A91D46FEF7FBFB48B9B2 +:102E30002B6804A920460E93FFF7FFFE074618B142 +:102E40004FF0FF3013B0F0BDFFF7A0FB256803463D +:102E5000A96994F84020012AF2D0012284F8402088 +:102E600094F84120012AD0B246D16764002E3ED0AA +:102E7000222284F841202A690132A2632A6926634A +:102E800041F28836013262636A6922F0406242F0A0 +:102E900080626A61A961A26BA2B901220221204667 +:102EA0000096FFF7A3FE10B923680222DA6001231F +:102EB00084F841300023C01A84F8403018BF012044 +:102EC0004042BFE701220621204600960393FFF708 +:102ED0008DFE0028EBD195F82010226B039B11701A +:102EE000226B01322263A26B013AA263D3E7636CC7 +:102EF00043F008036364DDE70220DBE7F7B50093E6 +:102F0000054690F8943014460191DDE90867F3B165 +:102F1000D6B13B68DBB10DF009F823462846DDE960 +:102F200000210CF023F93B46324605F16801281DCB +:102F3000FFF774FF041E284618BF012464420CF0FA +:102F4000EBFF204603B0F0BD6FF00104F9E74FF04E +:102F5000FF34F6E7F0B593B004460846164604A9D8 +:102F60001D46FEF75FFB48B92B6804A920460E9367 +:102F7000FFF763FE074618B14FF0FF3013B0F0BD06 +:102F8000FFF704FB94F8402003462568012AF3D09C +:102F9000012284F8402094F84120012AD0B243D184 +:102FA0006764002E3BD0122284F841202A69013246 +:102FB000E2622A69666241F288360132A2626A6977 +:102FC00022F040626A61E26AA2B90122022120462F +:102FD0000096FFF70BFE10B923680222DA60012386 +:102FE00084F841300023C01A84F8403018BF012013 +:102FF0004042C3E701220421204600960393FFF7D5 +:10300000F5FD0028EBD1626A039B127885F8202039 +:10301000626A01326262E26A013AE262D3E7636C99 +:1030200043F008036364DDE70220DBE72DE9F047A6 +:103030001C4690B090F894300546DDF86890DDE9C4 +:1030400018A8CDE9002163B30CF070FF4FF0FF33F7 +:1030500028462E1D05F16807DDE900210CF086F8F1 +:1030600014B1BAF1000F23D1B8F1000F02D0B9F1B9 +:10307000000F19D102A93846FEF7D4FA044638B930 +:10308000012302A9CDE90B033046FFF7D6FD08B1B5 +:103090004FF0FF3428460CF03FFF204610B0BDE84B +:1030A000F0874FF0FF34F8E79CB1BAF1000F10D071 +:1030B000224602AB39463046CDF808A0FFF74AFF5A +:1030C00004460028E4D1B8F1000FE3D0B9F1000FB5 +:1030D000E0D002AB424639463046CDF80890FFF7C3 +:1030E0009DFE041E18BF01246442D3E770B50E464E +:1030F00004460809FEF740FB4FF470710546304660 +:10310000FFF73EF9238A0A4A06F00F0603F00F0381 +:103110000121656152F8233001FA06F6A36105F139 +:103120001003183526606360C4E9025570BD00BF06 +:10313000C49A010810B50C4B0C4CD4F894209A4258 +:10314000FBD1D0E90542524302EB4203DB4339B9DC +:103150002268134023604FF44072044B5A6110BD43 +:1031600021680B401343F5E7000300800064025818 +:10317000034BD9681A6822EA01021A605960704745 +:1031800000650258444A1369114603F03803102BB6 +:1031900030B57CD005D8002B55D0082B79D00A68E3 +:1031A00052E0182BFBD1906A956AD16A15F47C7FA6 +:1031B000C5F30513546B3BD007EE903AC4F3CC042F +:1031C00001F0010300F00300F8EEE76A6343012811 +:1031D000F7EE005A07EE903AFAEEE97A39D0022873 +:1031E00047D011682D4BC1F3C101126BCB40C2F324 +:1031F000080207EE103AB8EEC76A86EE267A06EEA7 +:10320000902AF8EEE66A76EEA77A77EEA57A224B58 +:1032100067EE877A1B6BC3F34623013307EE103A40 +:10322000F8EEC76A87EEA67AFCEEC77A17EE903AF8 +:1032300019498A698969C2F3032219498A5CD34012 +:10324000184A136030BD1268C2F3C102134BD34059 +:10325000EEE7136B9FED146AC3F3080307EE103A11 +:10326000B8EEC77A77EE277A77EEA57A86EE267AD9 +:10327000CDE7136B9FED0D6AC3F3080307EE103A19 +:10328000B8EEC77A77EE277A77EEA57AEEE7084BA5 +:10329000CEE7084BCCE700BF004402580090D003B3 +:1032A00004970108000000240024744A20BCBE4B8F +:1032B00040787D0100093D002B4BD3F8882042F473 +:1032C0007002C3F888201A6942F010021A61274A76 +:1032D000136803F00F03062B05D8136823F00F03C0 +:1032E00043F007031360224B1A6842F001021A6090 +:1032F00000221A611F4A19680A401C491A600A68AC +:10330000120705D50A6822F00F0242F007020A6090 +:10331000002219499A61DA611A6299621749D962E1 +:10332000174919635A639963DA6319645A6419680F +:1033300021F4802119601A66124A536A43F48043CB +:103340005362114B1B681B0C1B04B3F1005F02D2CC +:103350000E4B01221A600E4B43F2D2021A600D4A44 +:10336000014B9A60704700BF00ED00E00020005262 +:10337000004402587FEDF6EA000202020000FF015D +:1033800080020101C00000580010005C088100515B +:1033900000400052000000080A4B013B0FD00269B8 +:1033A000002AFADA0369074A43F001030361013A8C +:1033B00005D0036913F00103F9D1184670470320C3 +:1033C000704700BF410D030030B5056C00F5306358 +:1033D0000F4CA54203D9D0F8004B002C16DB00247B +:1033E00001291C611C6944F400241C611C6944F01F +:1033F00018041C611C6944F0C0441C6106D15A6168 +:10340000D0F8003B43F08023C0F8003B002030BDE3 +:103410000A30544FD0F8003E23F00303C0F8003EBA +:10342000D0F8043843F00203C0F804380020704795 +:1034300070B50023940800F5805502F00302A34202 +:1034400014D301EB84017AB100F5805000230468A5 +:10345000D80024FA00F0C854013398B28242F7D160 +:10346000013A92B201321144084670BD2E6841F80B +:1034700023600133E3E770B50E78012500F50062A3 +:1034800006F00F0374019D404B78012BD36917D1CF +:103490001D4300F51060D56103591A040ED48A68E3 +:1034A0000559C2F30A03CA782B4343EA824343EA2D +:1034B000865343F0805343F400430351002070BD12 +:1034C00043EA054500F53060D56103591B04F5D486 +:1034D0008B680259C3F30A031343CA7843EA824351 +:1034E000E7E70000114B4FF4FA5102461B68B3FBAB +:1034F000F1F141F288334B43013B13D3516B11F08F +:10350000450FF9D08904F7D4536B5B0702D504202B +:1035100090637047506B10F0010014BF0123044BFF +:10352000936370474FF00040704700BF00000024D5 +:10353000C5002000454B10B51B6804464FF4FA50F7 +:10354000B3FBF0F342485A43002A48D0636B03426E +:1035500007D09B0405D4636B580704D50420A063EF +:1035600010BD013AF0E7606B10F0010002D00123BA +:10357000A363F5E7374BA3632369DBB2994231D1EB +:103580006369354818400028EAD0002B2CDB5A002C +:103590002DD49C002DD4D9002DD41A012ED45C0139 +:1035A0002FD4D90130D41A0231D45C0232D499021A +:1035B00033D4DA0234D45C0335D4990336D4DA0335 +:1035C00037D41C0438D4590439D49A043AD413F0AB +:1035D000080F14BF4FF400004FF48030C0E74FF0E5 +:1035E0000040BDE70120BBE74FF00070B8E7402086 +:1035F000B6E78020B4E74FF48070B1E74FF4007075 +:10360000AEE74FF48060ABE74FF40060A8E74FF4FB +:103610008050A5E74FF40050A2E74FF480409FE7A9 +:103620004FF400409CE74FF4003099E74FF48020BE +:1036300096E74FF4002093E74FF4801090E74FF4A3 +:1036400000108DE74FF480008AE700BF00000024DF +:1036500045002000C500200008E0FFFDF0B5124D38 +:1036600087B00D2700246B6C01A92E681B0430461F +:1036700001934FF48073CDE902734FF48053CDE989 +:103680000443FEF745FB41F2883239463046FFF7E6 +:1036900051FF28B92B685C69C4F3432007B0F0BD23 +:1036A0006B6B18436863F7E79412002430B54FF44E +:1036B000807387B0062500220446019101A9CDE957 +:1036C00002534FF48053CDE90423FEF721FB41F26E +:1036D000883229462046FFF72DFF07B030BD30B5B0 +:1036E0004FF4807387B0372500220446019101A969 +:1036F000CDE902534FF48053CDE90423FEF708FBD4 +:1037000041F2883229462046FFF714FF07B030BD4A +:1037100010B5002386B0044601A9CDE90133CDE9F7 +:1037200003334FF480530593FEF7F2FA0A4B4FF43C +:10373000FA521B68B3FBF2F241F288335343013B68 +:1037400007D3626B1206FAD5044B0020A36306B0C0 +:1037500010BD4FF00040FAE700000024C500200033 +:1037600030B5002387B00C254FF48072044601A9C0 +:10377000CDE90323CDE901354FF480530593C368A8 +:1037800043F08003C360C36823F04003C360FEF7C7 +:10379000BFFA074A29462046FFF7CCFEE368B0F19E +:1037A000007F08BF002023F08003E36007B030BD36 +:1037B00000E1F50530B54FF4807387B01025002285 +:1037C0000446019101A9CDE902534FF48053CDE99C +:1037D0000423FEF79DFA41F2883229462046FFF77E +:1037E000A9FE07B030BD00002DE9F047364D86B088 +:1037F0000746FEF7CBFE082180462868FFF7DAFF70 +:103800000446002837D1696C28680904FFF767FF70 +:10381000044680BB2E684FF0FF334FF0330901A9F7 +:10382000736208230190B362F36A0490304623F078 +:10383000FF0343F03303F3624FF48073CDE9029347 +:103840004FF480530593FEF763FA41F288324946FC +:103850003046FFF76FFE044668B98146064640F2DF +:103860002A5A2B685A6B12EA0A0F5A6B07D01107B3 +:1038700016D508249C63204606B0BDE8F0871003E7 +:1038800005D424B9D3F880600124D3F88090FEF7E2 +:103890007DFEA0EB08000130E3D14FF00044EAE7E1 +:1038A0005A6B920701D50224E4E75C6B14F0200404 +:1038B00001D02024DEE7054A36BA9A6399FA89F3E3 +:1038C0007E603B60D7E700BF941200243A0F0018D7 +:1038D0002DE9F8430668054616F0006609D0836EA8 +:1038E000B3F5001F2ED013D8F3B1B3F5801F21D04C +:1038F00001262B68DB0540F10281AB6D042B00F241 +:10390000FD80DFE813F024002B00F50029002900DA +:10391000B3F5401FECD1B84A0026A96E136D23F40D +:1039200040130B431365E4E7B34AD36A43F400330F +:10393000D362F0E702210430FFF7E0F806460028E2 +:10394000D7D1E8E702212430FFF760F8F6E7AA4A6A +:10395000D36A43F40033D362344604E00021281DC7 +:10396000FFF7CCF80446002C40F0CB80A24AA96DAA +:10397000136D23F007030B4313652B689F050DD5CB +:10398000EB6D802B00F0DA8000F2BD80002B00F0A0 +:10399000C980402B00F0CC80012634462B685805A6 +:1039A00010D5D5F8A830B3F5800F00F0EC8000F208 +:1039B000CD80002B00F0DB80B3F5001F00F0DD8030 +:1039C000012634462B68190510D5D5F8AC30B3F173 +:1039D000007F00F0FD8000F2DE80002B00F0EC8024 +:1039E000B3F1807F00F0EE80012634462B689A0107 +:1039F0000DD5AB6C202B00F0078100F2F180002B7D +:103A000000F0F180102B00F0F980012634462B687D +:103A1000DB040FD52B6EB3F5005F00F0198100F2C7 +:103A2000FB80002B00F00881B3F5805F00F00A8175 +:103A3000012634462B689F040FD56B6EB3F5003F0B +:103A400000F0268100F20C81002B00F01281B3F50A +:103A5000803F00F01781012634462B68580410D5AA +:103A6000D5F8B030B3F1005F00F0338100F2188177 +:103A7000002B00F01E81B3F1805F00F0248101264D +:103A800034462B68590114D5EB6C43B1B3F5807FF4 +:103A900040F027810121281DFFF730F80446002C53 +:103AA00040F02281544AE96CD36C23F480730B43B9 +:103AB000D3642B681A040DD52B6FB3F1805F00F02F +:103AC0001581B3F1005F00F01F81002B00F013811E +:103AD000012634462B68DB0140F12C816B6C032BF3 +:103AE00000F26C81DFE813F01D01180164011D0173 +:103AF000002105F12400FEF789FF33E70126344653 +:103B00003BE7264639E7C02B03D0B3F5807F7FF42F +:103B100043AFCCB9384AE96D136D23F4E0730B431E +:103B200013653BE7344AD36A43F40033D362F0E7CA +:103B30000021281DFEF7E2FF0446EAE7002105F117 +:103B40002400FEF763FFF7E7264627E7B3F5C00F2B +:103B500003D0B3F5000F7FF433AFD4B9264AD5F8BC +:103B6000A810936D23F460030B4393652AE7224A60 +:103B7000D36A43F40033D362EFE70021281DFEF738 +:103B8000BDFF0446E9E7002105F12400FEF73EFFF2 +:103B9000F7E7264616E7B3F1407F03D0B3F1806F15 +:103BA0007FF422AFD4B9144AD5F8AC10936D23F04A +:103BB000E0630B43936519E70F4AD36A43F400337C +:103BC000D362EFE70021281DFEF798FF0446E9E7DE +:103BD000002105F12400FEF719FFF7E7264605E767 +:103BE000302B7FF412AFACB9034AA96CD36C23F02D +:103BF00030030B43D3640AE7004402589B4AD36A5C +:103C000043F40033D362EEE70221281DFEF776FF6E +:103C10000446E8E72646FAE6B3F5405F03D0B3F57D +:103C2000804F7FF405AFCCB9904A296E136D23F411 +:103C3000E0430B431365FDE68C4AD36A43F400333B +:103C4000D362F0E70021281DFEF758FF0446EAE79B +:103C5000002105F12400FEF7D9FEF7E72646E9E644 +:103C600023F48032B2F5802F03D0B3F5403F7FF4C8 +:103C7000F2AE9CB97D4A696E136D23F4E0230B43C9 +:103C80001365EAE60121281DFEF738FF0446F0E738 +:103C9000012105F12400FEF7B9FEF7E72646DCE630 +:103CA00023F08052B2F1804F03D0B3F1405F7FF434 +:103CB000E6AEA4B96D4AD5F8B010936D23F0E04399 +:103CC0000B439365DDE60121281DFEF717FF04462F +:103CD000EFE7012105F12400FEF798FEF7E72646FD +:103CE000CFE601263446E4E62646E2E65F4AD36A9A +:103CF00043F40033D3626CB95C4A296F136D23F02F +:103D000040530B431365E5E60121281DFEF7F6FE3F +:103D10000446F0E72646DDE6544AD36A43F400330E +:103D2000D362002C4DD1514A696CD36C23F003034C +:103D30000B43D3642B685F024DD54D4F3B6843F472 +:103D400080733B60FEF722FC80463B68D8053AD57D +:103D5000002C6CD1454BD5F8B4001A6F424012F4D8 +:103D6000407F0BD01A6F196F22F4407241F48031FA +:103D70001967196F21F4803119671A67B0F5807FD0 +:103D800040D0D5F8B430394903F44072B2F5407FE1 +:103D900049D10869374A20F47C5002EA13120243E1 +:103DA0000A61C3F30B03314A116F0B43136712E02F +:103DB0000221281DFEF7A2FE0446B2E70126344682 +:103DC000B8E72646B6E7FEF7E1FBA0EB080064285B +:103DD000BBD9032634462B68DA0708D5EB6F102BC6 +:103DE0003CD026D85BB3082B32D0012634462B6852 +:103DF0009B074ED5AB6F052B61D8DFE803F0423D42 +:103E00005A424242FEF7C2FBDFF86080074641F2A9 +:103E10008839D8F870309907B3D4FEF7B7FBC01BC8 +:103E20004845F6D9D5E70A6922F47C52B8E7264618 +:103E3000D1E723F00802202A01D0182BD5D19CB954 +:103E40000A4AE96F536D23F038030B435365CEE7FD +:103E50000121281DFEF752FE0446F0E7012105F17D +:103E60002400FEF7D3FDF7E72646C0E700440258DA +:103E700000480258CFFFFF000121281DFEF73EFE3B +:103E80000446FCB9B74AA96F536D23F007030B43EF +:103E900053652B685F0727D5D5F89430052B00F2C2 +:103EA0003A81DFE813F01600110032011600160007 +:103EB0001600012105F12400FEF7A8FDE0E7012628 +:103EC0003446E6E72646E4E70121281DFEF716FE04 +:103ED0000446002C40F02281A24AD5F89410936D3C +:103EE00023F007030B4393652B68980610D5D5F88C +:103EF0009030B3F1005F00F02C8100F21181002BB3 +:103F000000F01781B3F1805F00F01D810126344677 +:103F10002B68590610D5D5F89C30B3F5006F00F02A +:103F20003C8100F22181002B00F02781B3F5806FE6 +:103F300000F02D81012634462B681A0610D5D5F8DD +:103F4000A030B3F5804F00F0498100F22E81002BA4 +:103F500000F03481B3F5005F00F03A810126344669 +:103F60002B681B0714D5D5F88430B3F5805F07D1D3 +:103F7000022105F12400FEF749FD002818BF0126A3 +:103F8000784AD5F88410536D23F440530B4353659E +:103F90002B68DF0614D5D5F89830B3F5807F07D1AC +:103FA000022105F12400FEF731FD002818BF01268B +:103FB0006C4AD5F89810936D23F440730B439365C6 +:103FC0002B6818031AD5D5F8A410B1F5803F00F07E +:103FD0000D81B1F5003F06D0002940F00D81281D6C +:103FE000FEF78CFD0446002C40F009815D4AD5F8AF +:103FF000A410936D23F440330B4393652B6859034E +:104000001CD5D5F88830B3F5001F00F0FA80B3F561 +:10401000401F08D0B3F5801F40F0FA80514AD36AA0 +:1040200043F40033D362002C40F0F5804D4AD5F8BC +:104030008810536D23F440130B4353652B68DA0348 +:1040400009D52B6D002B00F0E880B3F5803F00F020 +:10405000F280012634462B689B0007D5022105F12A +:104060002400FEF7D3FC002818BF01262B689F030D +:104070000BD5D5F88010B1F5807F00F0F28000F20A +:10408000E280002900F0E5800126DC0206D53549F2 +:10409000686F0A6D22F0004202430A65D80007D516 +:1040A0003049D5F8B8000A6922F4804202430A6117 +:1040B000990206D52B49E86E0A6D22F08072024300 +:1040C0000A655A0009D5274A116921F40041116196 +:1040D0001169D5F8BC0001431161002B06DA2149B2 +:1040E000686DCA6C22F040520243CA641B0207D5B5 +:1040F0001C4AD5F88C10536D23F440030B435365D1 +:10410000301E18BF0120BDE8F883012105F124000D +:10411000FEF77CFCDCE601263446E5E62646E3E6CF +:1041200023F08052B2F1804F03D0B3F1405F7FF4AF +:10413000EDAEA4B90B4AD5F89010536D23F0E043CF +:104140000B435365E4E60021281DFEF7D7FC044627 +:10415000EFE7022105F12400FEF758FCF7E72646B9 +:10416000D6E600BF0044025823F48062B2F5805FB7 +:1041700003D0B3F5406F7FF4DDAEA4B93D4AD5F866 +:104180009C10936D23F4E0530B439365D4E6002118 +:10419000281DFEF7B3FC0446EFE7022105F12400D9 +:1041A000FEF734FCF7E72646C6E623F40052B2F5E4 +:1041B000004F03D0B3F5C04F7FF4D0AEA4B92D4A61 +:1041C000D5F8A010936D23F460430B439365C7E6C5 +:1041D0000021281DFEF792FC0446EFE7022105F1BD +:1041E0002400FEF713FCF7E72646B9E6022105F1A5 +:1041F0002400FEF70BFCF5E601263446FEE62646D3 +:10420000FCE6012105F12400FEF700FC04460AE764 +:104210000126344612E7264610E7164AD36A43F4CD +:104220000033D3626CB9134A296DD36C23F4803305 +:104230000B43D3640FE70221281DFEF75FFC044601 +:10424000F0E7264607E721F48072B2F5007F7FF49D +:104250001BAF64B90748426D22F440720A434265BD +:1042600013E70448C26A42F40032C262F1E726460C +:104270000BE700BF004402583F230360114B1A694B +:1042800002F0070242609A6902F4706282609A69E1 +:1042900002F00F02C2609A6902F070020261DA69EC +:1042A00002F070024261DA6902F4E06282611B6A24 +:1042B00003F07003C361044B1B6803F00F030B6032 +:1042C000704700BF0044025800200052484B1A6952 +:1042D00002F03802102A30B500F08680182A0CD07F +:1042E000002A40F083801A68424812F0200F03D061 +:1042F0001B68C3F3C103D84030BD996A9D6ADA6A6E +:1043000015F47C7FC5F305105C6BF5D0C4F3CC04C9 +:1043100002F0010207EE900A01F003016243B7EEDA +:10432000006AF8EEE76A012907EE902AFAEEE97AC8 +:104330004CD002293CD0002948D11A68920627D5D2 +:1043400019682C4AC1F3C1011B6BCA40C3F30803AF +:1043500007EE102AF8EEC75A85EEA67A06EE903AD6 +:10436000F8EEE66A76EEA77A77EE867A204B67EE6D +:10437000877A1B6BC3F34623013307EE103AF8EE3E +:10438000C76A87EEA67AFCEEC77A17EE900AB3E703 +:104390001B6BC3F3080307EE103AB8EEC77A77EE4B +:1043A000277A77EE867A9FED146A86EE267ADDE725 +:1043B0001B6BC3F3080307EE103AB8EEC77A77EE2B +:1043C000277A77EE867A9FED0D6AEEE71B6BC3F3D3 +:1043D000080307EE103AB8EEC77A77EE277A77EE41 +:1043E000867A9FED076AE0E7064885E7064883E797 +:1043F000004402580090D0030024744C20BCBE4BF3 +:104400000024744A40787D0100093D0008B5FFF79B +:104410005DFF0949094A8B69C3F30323D35C03F0A9 +:104420001F03D8408B6903F00F03D35C044A03F0E9 +:104430001F031060D84008BD0044025804970108CB +:104440000000002473B50E460446FFF7DFFFB0FB03 +:10445000F6F5FF2D47DCFFF7D9FFB0FBF6F101FBC6 +:10446000160606B9013D6560FEF790F894F8412004 +:10447000034612B941F28832A2642068A16802683A +:10448000013922F4706242EA0122202102602046B2 +:10449000A26C00920022FEF7A9FB30BB2268E569FE +:1044A000E36811682B43256A21F07F412B4365683F +:1044B00021F0D00143EA05630B4313605568D4E94A +:1044C00005310B43216943EA0143094929400B4364 +:1044D0005360136843F0010313600123606484F8A0 +:1044E000413002B070BDFF25BDE74FF0FF30F8E767 +:1044F000FEF8E0FF08B5FFF789FF054B054A1B6A88 +:10450000C3F30213D35C03F01F03D84008BD00BF00 +:10451000004402580497010808B5FFF777FF054BE0 +:10452000054ADB69C3F30223D35C03F01F03D840C1 +:1045300008BD00BF004402580497010808B5FFF702 +:1045400065FF054B054ADB69C3F30213D35C03F037 +:104550001F03D84008BD00BF00440258049701085B +:10456000894990202DE9F043D1E90035D1F8089030 +:104570004FF0000E6843854CB9F5965FD1F810C036 +:1045800004EB0002D1F814802CBF76460726A2F86F +:1045900056E089B0C2F81CE0A2F854E0A2F85EE050 +:1045A000A2F85CE0C2F820E0C2F864E0CF692350D2 +:1045B000C868C2F804909060C2F80CC0C2F81080BD +:1045C0009761C2E9096EB1F91AE0BEF1FF3F5FD110 +:1045D000082151616E4A934210D19022B9F5165FBD +:1045E00002FB054292F8801059D8012906D01968BB +:1045F00041F002011960002182F88010902202FB34 +:104600000541D1F884E0BEF1000F01D181F880E0CE +:1046100002FB0542242140EA0800C2F88410196810 +:10462000526921F0010110435A4A196019680A4081 +:10463000104318605A6822F4405242EA0C025A6051 +:104640009A6822F06E4222F4306217439F60DA6A61 +:1046500022F00F021643504A9342DE6225D14F4B9F +:104660005B6D03F03803282B00F284804C4AD35C46 +:10467000082B00F2B281082B7CD8DFE813F0D701B9 +:10468000DD017B007B00E0017B007B007B00E5011E +:10469000B1F9181001310CBF04210C2199E701294F +:1046A000ACD0196821F00201A4E73E4A934207D139 +:1046B0003A4B5B6D03F00703052B5BD83A4AD6E70C +:1046C0003A4A934207D1354B5B6D03F00703052B44 +:1046D00050D8374ACBE7374A934207D12F4B5B6D0F +:1046E00003F00703052B45D8334AC0E7334A93420A +:1046F00007D12A4B5B6D03F00703052B3AD8304AEC +:10470000B5E7304A934207D1244B5B6D03F0380381 +:10471000282B2FD82C4AAAE72C4A934207D11F4BAB +:104720005B6D03F00703052B24D8294A9FE7294A2C +:10473000934207D1194B5B6D03F00703052B19D882 +:10474000254A94E7124A934214D102F50E32936D32 +:1047500003F00703052B0DD82049CB5C102B00F08C +:10476000FF8009D8042B00F0F180082B00F0F380C3 +:10477000022B35D0012639E0202B00F02C81402B74 +:10478000F8D14FF40040F4E06C1200241013002420 +:10479000000C0058F369FFCF00100140004402589C +:1047A000CF96010800440040F896010800480040F8 +:1047B000F8960108004C0040F896010800500040AF +:1047C000F896010800140140CF96010800780040D7 +:1047D000F8960108007C0040F8960108FE96010852 +:1047E000FFF788FE002840F0C480002690224FF09A +:1047F0000113012E02FB05F204EB02018B664FF060 +:104800000003C1E91C3300F034818B6A002B66D0B1 +:10481000D80706D5A058C96A426822F400320A4374 +:1048200042609A0709D590226A43A158A0184A68A5 +:10483000006B22F4803202434A605F0709D5902260 +:104840006A43A158A0184A68406B22F480220243B0 +:104850004A60180709D590226A43A158A0184A68EF +:10486000806B22F4004202434A60D90609D59022A7 +:104870006A43A158A0188A68C06B22F48052024390 +:104880008A609A0609D590226A43A158A0188A68BE +:10489000006C22F4005202438A605F0613D5902216 +:1048A0006A43A158A0184A68476C22F48012B7F5F1 +:1048B000801F42EA07024A6005D14A68806C22F4F0 +:1048C000C00202434A60180609D590236B43E258A0 +:1048D000E1185368C96C23F400230B4353609027FD +:1048E0006F43E35904EB07085A6822F490425A6078 +:1048F0009A6822F02A029A601A6842F001021A604D +:104900000023C8F88C30FDF741FEE35902461B68CE +:10491000190700F1A38090236B43E3581B685B07E2 +:1049200007D54FF480014046FDF7E6FE002840F031 +:104930009F80902303FB05442023C4F88430C4F8EF +:1049400088300023E36684F8803092E002A8FCF708 +:10495000F7F8039846E705A8FCF74AF8069841E7F8 +:104960001368464813F0200F03D01368C3F3C10344 +:10497000D8404FF09009424B09FB05F904EB0901BF +:104980004A6AD1F8048033F8122008EB4801B0FBE2 +:10499000F2F38B42FFF4EEAEB3EB083F3FF6EAAE24 +:1049A0000023002114F046FD42460F0200230602B8 +:1049B00047EA10674FEA5800301847F1000114F039 +:1049C00039FD304BA0F540729A423FF6D3AE54F811 +:1049D0000930D86009E72C48CBE7202B39D0402B91 +:1049E00039D0102B7FF4C6AE284B24481A6812F039 +:1049F000200F03D01B68C3F3C103D84090236B433F +:104A0000E1184A684E6A1E4931F81610B0FBF1F001 +:104A100000EB5200B0FBF2F080B24FF6EF72A0F163 +:104A2000100191423FF6A6AEE358D2E7FFF786FDAC +:104A300000283FF4DAAEE1E7FFF76EFDF8E702A8E1 +:104A4000FCF77EF80398F3E705A8FBF7D1FF06987B +:104A5000EEE70D48D2E74FF40040CFE701904FF466 +:104A600000114046FDF748FE019A00283FF453AF7D +:104A70000326304609B0BDE8F08300BF0090D003A4 +:104A8000F8980108FFFC0F0000093D00004402589F +:104A900010B58AB0694602A8FFF7EEFBFFF74EFD9E +:104AA0003E4B0090D3F8E8203D4942F00802C3F89D +:104AB000E820D3F8E82002F008020192019A394A6E +:104AC000D1F88C409442FBD1D3F89020364C42F080 +:104AD0000802C3F89020D3F8902022F00802C3F80F +:104AE00090204FF44073CB60304B079A23604FF017 +:104AF000FF33E3602E4B002A4DD1B0FBF3F00023CF +:104B000001382361A3606060C4E9053394F83D3047 +:104B100003F0FF020BB984F83C20244A022384F8F6 +:104B20003D30136823F47C7313604FF0FF33D3627E +:104B300001239062536184F8483084F83E3084F851 +:104B40003F3084F8403084F8413084F8423084F8B3 +:104B5000433084F8443084F8453084F8463084F893 +:104B6000473084F83D30134B134A9B68C3F8082143 +:104B7000BFF34F8F114B4FF480225A6094F83E30B0 +:104B8000012B01D1FBF7A4FC2268D36823F00203B8 +:104B9000D3600AB010BD4000AFE700BF0044025828 +:104BA0000064025800030080640E0024000C0040E2 +:104BB00040420F0000ED00E00906000800E100E0BF +:104BC00000232DE9F04F04469BB0C366836039B1E2 +:104BD0008B88A0F858308B89A0F85A300B68036096 +:104BE0002368B04A934212D1002384F85030AE4B70 +:104BF000D3F8E82042F40012C3F8E820D3F8E830F4 +:104C000003F400131393139BA84BE3650BE0A84A2E +:104C100093427FD002F58062934200F08D80A54AD6 +:104C2000934200F09B80A449B4F958000AF060F860 +:104C3000A249B4F95A000AF05BF80421B4F958000B +:104C4000FDF756FB0421B4F95A00FDF751FB636DE3 +:104C50000BB99B4B63659B4A1421656D12682368F1 +:104C6000B2FBF5F24A43636011469869000401D52E +:104C70000139FAD1944E9549D6F88C008842FBD17F +:104C800088498B427CD18849D1F8900040F40010CB +:104C9000C1F89000D1F8900020F40010C1F8900005 +:104CA00089494FF44070C860211D05EE101A9969BA +:104CB000090401D5013AFAD1854A95421AD1794AB7 +:104CC000934202D10120FBF7E3FF2268784B9A421E +:104CD00002D10220FBF7DCFF22687E4B9A4202D110 +:104CE0000420FBF7D5FF2268724B9A4202D10820BC +:104CF000FBF7CEFF7449754BD1F88C209A42FBD15B +:104D0000684B22689A42684B6AD1596D21F4405130 +:104D100059656FE0012384F85030634BD3F8E820E5 +:104D200042F48002C3F8E820D3F8E83003F48003AB +:104D30001493149B684B68E7022384F850305A4B55 +:104D4000D3F8E82042F40002C3F8E820D3F8E830B2 +:104D500003F400031593159B604B56E7032384F877 +:104D60005030514BD3F8F42042F08002C3F8F420C5 +:104D7000D3F8F43003F080031693169B584B44E7A6 +:104D80004B498B4214D001F580618B421CD04949BC +:104D90008B4285D14449D1F89C0040F08000C1F895 +:104DA0009C00D1F89C0020F08000C1F89C0077E7BF +:104DB0003D49D1F8900040F48000C1F89000D1F84E +:104DC000900020F4800069E73749D1F8900040F462 +:104DD0000000C1F89000D1F8900020F400005DE7D9 +:104DE00033498A4291D001F580618A428DD03149A0 +:104DF0008A4240D0344B4FF44071D96094F845302A +:104E0000202BD8B21AD194F84430012B16D0242389 +:104E100084F845306368196821F001011960196848 +:104E200021F48051196019681960196841F0010175 +:104E30001960002384F8450084F84430194B22F4AB +:104E40000061A6689942E76E174B03D018498A4261 +:104E500040F083805B6D03F44053B3F5005F00F0D6 +:104E6000FB810DD8002B43D0B3F5805F00F08D801F +:104E70001C4809F0DDFF996D21F440719965B9E78F +:104E8000B3F5405FF4D1002E00F08880AF4244D0EB +:104E90001548164B00221A60002840F08280002638 +:104EA0003BE000BF00540040004402581F002000B7 +:104EB00000580040001C00585C980108C097010889 +:104EC000A086010000000024006402580003008056 +:104ED00040420F00005C00402100220048004900D1 +:104EE0005F0060008F95010800093D00FC0D002463 +:104EF000FFF724FB0EB1AF420FD0924B9842C8D1BE +:104F0000914B9D4200F0A481904B9D4200F0A28104 +:104F10008F4B904E9D4218BF00260123A6600026AD +:104F200015EE100AE566E660C4E90436C4E90866D1 +:104F3000C4E90666FCF72CF84FF0007384F8716042 +:104F4000656584F87260E56684F8646084F8706072 +:104F50002366A6661BB0BDE8F08F7F498A421BD14D +:104F60009B6D03F44073B3F5007F13D005D84BB1AC +:104F7000B3F5807F09D079487BE7B3F5407FFAD15C +:104F80007748B7E7FFF7B6FAB4E717A8FBF730FDA5 +:104F90001998AFE77348ADE773486AE7734B7048F9 +:104FA0001E60002D3FF47BAFA5F59C3349F64042CF +:104FB000803B934261D9A5F59C236D4AA3F500730C +:104FC00093425DD9A5F543235F4AA3F5A0639342BD +:104FD0003FF665AF4FF0020C664A2C264FF0100BDF +:104FE00002EB5003B3FBF0F30193634B06FB0C366B +:104FF000736AA3F132010493019B03EB4303C91AC3 +:10500000336A029321EAE1713369029876691B1AC7 +:1050100001980591A3F58273A3EB8003029823EA1C +:10502000E3733044019E0693002303909A46194689 +:10503000B1464FF0000E0398CDF81CE00EF1010EC2 +:10504000484529D80027B8460598B8421ED8069882 +:10505000B8421BD35B4519D0142000FB01FB474825 +:10506000013100EB0B0A40F80B307F290798CAE9A1 +:10507000010808D93D4B19601AE04FF0000CABE76E +:105080004FF0010CA8E79B464FF0010A08F1010818 +:105090003744B8F1100FD7D1BEF1100FB144CAD1C7 +:1050A00001330198102B0644C2D1BAF1000FE1D1AF +:1050B0002C2331494FF0000A03FB0CFC01EB0C03DD +:1050C00051F80C1002EB51060993B6FBF1FB59683D +:1050D000CDF81CB0B2FBF1F10C919968049BB2FBC6 +:1050E000F1F20D924FF0FF31204A039112680199BD +:1050F0000F92019A03EB8103029952000B44323262 +:10510000119308921D4A0F9B9A4539D1039B7F2B1F +:105110003FF6C5AE039A142318495343CA18CB5817 +:10512000167C46EA037653681B0503F470031E439E +:1051300093681B0403F470231E43D3681B029BB2C5 +:105140001E43EAE6000E2707801A060040420F00C1 +:10515000A08601007656E140001C0058AC9501087D +:1051600000093D000090D003C7950108FC0D002404 +:105170000071020000CA9A3B14970108FC03002446 +:1051800001994FF0000E1368049803FB011309996D +:10519000089F8969C71902980E9108990744591800 +:1051A000A7EB0B070691F8181199069EABEB0101CE +:1051B0001090A1EB43010E98CDF82CE00EF1010EFA +:1051C000B0423BD2A6F132070198B0EB970F35D22F +:1051D000A1F16400DDF818904FF0000805901098D8 +:1051E00000EB060C0BEB0C070D98CDF8288008F1AE +:1051F0000108B84219D80C98B84216D30998C76963 +:105200004F4512D8019848450FD2059810EA2C0056 +:1052100038BF604607460798874206D20B98079723 +:1052200010610A98CDF80CA0D0600598B8F5807F81 +:1052300099449C44A0EB03000590D3D1BEF5807F38 +:105240001E44A1EB0301B6D10AF1010A14325AE758 +:10525000044E62E6044E60E60448002E3FF419AEA8 +:1052600049E600BF3414C1203615C3000090D003B6 +:10527000F7B504460F460AF06EFFD4F8905004F1DB +:10528000300635F000751AD14FF00073304684F8BF +:105290009450C4F89030FBF7B7FA01463046FBF75C +:1052A000E5FA94F87530202B0CD06FF001052046FC +:1052B0000AF049FFA81E18BF012003B0F0BD434803 +:1052C00009F0B6FD94F87430012BEED00123D4F828 +:1052D0009020A76584F87430212384F8753010235A +:1052E00084F876300223A567A4F85E30384B226636 +:1052F000A366B4F85E309BB2FF2B19D9FF23A4F844 +:105300005C304FF08073616E112904D1AA2A02D05B +:10531000B2F52A4F19D1226EAA2A0FD10022226695 +:10532000B4F85E2092B2FF2A00D8236E294A0DE01D +:10533000B4F85E30A4F85C30236EE4E7226EB2F578 +:105340002A4FEDD14FF00072E9E7002200921021C0 +:1053500094F85C2004F13400FBF70CFD00231E4A96 +:1053600084F87430A36E934203D01C4A934218BF52 +:10537000F225626B13681D43194B15601D68D4F844 +:105380008430B5FBF3F35A255D4394F8943013F061 +:105390001E0F01D1013D12D1B4F98E10B4F98C0069 +:1053A000FDF7AAF80846FDF7A7F81DB194F8943068 +:1053B000082B08D000213046FFF702FC75E70120DA +:1053C000FCF788FFE1E7022571E700BFDD950108E2 +:1053D000775A000800200080995B0008ED5600080D +:1053E00000000024F8B590F841300446602B4FF0DF +:1053F000000317D1202280F84030B0F95A1080F80D +:105400004120026803631368B0F9580023F0FE03DB +:105410001360FDF771F80846FDF76EF8022384F873 +:105420006030F8BD90F86C60071F036380F840306F +:1054300006B18668656C0021384615F0040518BF72 +:105440001425FFF7BDFB86B102232046A66084F831 +:105450006C30FBF79DFD3846FBF7D6F90146384620 +:10546000FBF704FA2046FBF749FD45F00205EDB2D3 +:1054700084F86050D5E7806B836B0BB100221A650E +:10548000C36B0BB100221A65FFF7ACBF70B5344A8D +:10549000002590F84130044680F84250283BC26213 +:1054A0004585426C022B41EA0201416428D8032160 +:1054B000FBF706FC282380F841302A4BA06B63637E +:1054C000236B78B3112B01D0212B2BD123681A68C1 +:1054D000510403D51A6822F480421A6090F83530DE +:1054E000012B1AD0204B0365002384F84030FBF7D2 +:1054F00099FD002833D0A06B036DBDE870401847BC +:1055000048F20301FBF7DCFB90F84130602B02D03E +:10551000202380F841300023D0E72046BDE87040CA +:10552000FFF760BFE06B0028F7D0122B01D0222BD1 +:10553000F3D123681A68120403D51A6822F40042D2 +:105540001A6090F83530012BE7D0074B0365002334 +:1055500084F84030FBF766FD08B1E06BCCE770BD26 +:105560000000FFFF7958000877540008F8B5036879 +:10557000202204460E461F6890F84150DA6105F07B +:10558000F705212D73D148F20101FBF799FB256343 +:10559000236820465A6842F400425A605A6822F052 +:1055A000FF7222F48B3222F4FF7222F001025A6061 +:1055B000FBF76AFC79045FD52268136823F4804303 +:1055C0001360A36B2BB31B68464A93421ED018325C +:1055D00093421BD01832934218D01832934215D000 +:1055E0001832934212D0183293420FD0183293429D +:1055F0000CD01832934209D002F55672934205D06E +:105600001832934202D018329342FFD05B689BB2AB +:105610006385730710D5236826F004065A6A636A07 +:105620001A70636A01336362238D2BB1013B2385BA +:10563000638D013B9BB26385638D9BB21BB1636C31 +:1056400043F004036364002384F84230656C6363B1 +:10565000DDB1616C2046FFF719FF94F84130282B2B +:105660003FD131462046BDE8F840FBF75BBC222D18 +:105670008ED148F2020188E73A04CAD5226813683D +:1056800023F400431360E36B9CE7E36A13F5803F68 +:1056900015D02046FBF7ECFD134B84F84050E36235 +:1056A000202384F8413094F86C302563022B01D11B +:1056B00084F86E502046BDE8F840FBF71FBC94F814 +:1056C000413084F84050222B4FF0200384F84130C1 +:1056D000256304D12046BDE8F840FBF757BD84F8A8 +:1056E0006D50F8BD100002400000FFFFF8B590F8C3 +:1056F000403004460E461546012BC76A00F0B780BD +:1057000001238A0680F8403003D5AB0601D5FFF7A8 +:105710002DFFF20640F1A380EB0640F1A080E90BDB +:10572000A80B41EA9535ED0740F19580E26B52B345 +:1057300011F0010326D013684E4A93421ED018324E +:1057400093421BD01832934218D01832934215D08E +:105750001832934212D0183293420FD0183293422B +:105760000CD01832934209D002F55672934205D0FC +:105770001832934202D018329342FFD05B68B3FADA +:1057800083F35B091A46A36B4BB3C10727D51B688C +:1057900038498B421ED018318B421BD018318B42B6 +:1057A00018D018318B4215D018318B4212D01831D5 +:1057B0008B420FD018318B420CD018318B4209D05C +:1057C00001F556718B4205D018318B4202D0183149 +:1057D0008B42FFD05B68B3FA83F35B090BB9012AF4 +:1057E0001FD194F84130282B0AD1B7F1007F07D19F +:1057F00031462046FBF796FB002084F84000F8BDB8 +:1058000094F841202368292A4FF01002DA61F3D17D +:1058100017F5803FF0D02046FBF736FBFBF728FD5D +:10582000EAE723681022DA6137F08072636C43F094 +:105830000403636494F84130DBB2DDD103F0F70375 +:10584000212B01D1236301E0222BFBD0616C204688 +:10585000FFF71CFED0E723681022DA61CCE732079D +:10586000CAD52B07C8D52046FBF74BFAC4E7022060 +:10587000C5E700BF10000240F8B590F8403004467C +:105880000D461646012BC76A7DD001238A0680F893 +:10589000403003D5B30601D5FFF768FEE80634D5DE +:1058A000F10632D5638D9BB203BB94F84130282BAF +:1058B0000AD1B7F1007F07D129462046FBF732FB1A +:1058C000002084F84000F8BD94F841202368292A7C +:1058D0004FF01002DA61F3D117F5803FF0D0204687 +:1058E000FBF7D2FA2046FBF7C3FCE9E72368102256 +:1058F000DA61636C43F00403636437F08073DFD1D3 +:10590000616C2046FFF7C2FDDAE76A071AD5730714 +:1059100018D5638D9BB26BB123685A6A636A1A709B +:10592000636A01336362238D013B2385638D013BF1 +:105930009BB26385638D9BB2002BC1D117F5803F6D +:10594000BED0CFE7280705D5310703D52046FBF7A2 +:10595000D8F9B5E7AA07B3D5B307B1D5638D9BB224 +:105960006BB1636A226813F8011B91626362638DF5 +:10597000013B9BB26385238D013B2385A0E737F074 +:105980008073AFD09CE702209DE737B503682022E3 +:1059900004460D46DA6190F84130212B37D10121C0 +:1059A000FBF78EF9112323632368E9065A6822F076 +:1059B000FF7222F48B3222F4FF7222F001025A604D +:1059C0004FF000026263A2F58032E26205D5102238 +:1059D000DA61626C42F00402626494F84120602A49 +:1059E00005D16A0703D55B6ADBB20193019B2046B0 +:1059F000FBF74AFA636C94F84120602A00D07BB12F +:105A0000616C204603B0BDE83040FFF73FBD90F821 +:105A10004130222BC8D10221FBF752F91223C2E7F1 +:105A200094F84120212A12D1202284F8403084F8B1 +:105A30004120236394F8422084F84230402A01D167 +:105A400003B030BD03B0BDE83040FBF7A7B994F810 +:105A50004120222AF4D1202284F8403084F84120C9 +:105A6000236394F8422084F84230402AE8D0082387 +:105A700084F86030E4E773B590F8403004460D4692 +:105A80001646012B00F086800123CA0680F84030BC +:105A900017D5F30615D503681022DA61436C43F07D +:105AA00004034364FBF7F0F9AA0605D5B30603D552 +:105AB00029462046FFF769FF002084F8400002B025 +:105AC00070BD680712D5710710D5236825F004054D +:105AD0005A6A636A1A70636A01336362238D013BF9 +:105AE0002385638D013B9BB26385DDE7AA0707D55C +:105AF000B30705D5636A226813F8011B9162ECE7CE +:105B0000280632D5710630D5638D22689BB203B367 +:105B1000208DF0B95168638DC1F309019BB2FF2B51 +:105B200008D9FF224FF08073009022852046FBF7B2 +:105B300021F9B9E7628DE36A92B213F5803F2285BD +:105B4000D2B202D0E36A0090F0E74FF00073009009 +:105B5000ECE753689A0103D42046FBF7A3F9A3E7C7 +:105B600040212046FFF792FC9EE76B069CD570060D +:105B70009AD5638D9BB2002BF2D123685A689101AC +:105B800092D4E26A12F5803FE6D15A6842F480422C +:105B90005A6089E7022092E713B590F84030044636 +:105BA000012B00F08780012380F84030CB061ED502 +:105BB000D0061CD5102322683F49D361636C43F0A3 +:105BC00004036364636B8B420FD03C498B420CBF70 +:105BD00060232023116820460B431360FBF754F920 +:105BE000002084F8400002B010BD6023F2E70B06ED +:105BF00043D5500641D523681A6822F040021A6046 +:105C0000628D92B26AB35968638DC1F309019BB288 +:105C1000FF2B1BD9FF2323854FF0807300222046E2 +:105C2000009294F82820FBF7A5F8638D228D9B1A2B +:105C30009BB2638594F84130222B23681A680CBF0D +:105C400042F4004242F480421A60C9E7638D238522 +:105C5000E36A13F5803F01D0E36ADFE74FF000739A +:105C6000DCE75B689A0103D42046FBF71BF9B7E732 +:105C700040212046FFF70AFCB2E74B0612D550063A +:105C800010D5638D9BB2002BF2D123685A68920124 +:105C9000A6D4E26A12F5803FE6D15A6842F4804207 +:105CA0005A609DE788069BD5930699D52046FFF755 +:105CB0006CFE95E7022096E7995B0008ED56000818 +:105CC000036899691A6810B4CC0508D5140606D57E +:105CD000446C44F0010444644FF48074DC614C056E +:105CE00008D5140606D5446C44F0080444644FF407 +:105CF0008064DC61890508D5120606D5426C42F045 +:105D0000020242644FF40072DA61416C11F00B0F31 +:105D100003D05DF8044BFFF7B9BB5DF8044B704747 +:105D2000054B07B518680190FBF7E0F8019803B040 +:105D30005DF804EBFFF7C4BF1C100024054B07B54A +:105D400058680190FBF7D2F8019803B05DF804EBB6 +:105D5000FFF7B6BF1C100024054B07B598680190EB +:105D6000FBF7C4F8019803B05DF804EBFFF7A8BF98 +:105D70001C100024054B07B5D8680190FBF7B6F856 +:105D8000019803B05DF804EBFFF79ABF1C100024E4 +:105D9000854A136803F00F038B422DE9F041044656 +:105DA0000D46C0F0888023685F0700F192801E07CF +:105DB0000BD57E496669C86900F07000864204D937 +:105DC000CA6922F070023243CA61D8060BD57749FE +:105DD000A669C86900F4E060864204D9CA6922F461 +:105DE000E0623243CA6199060BD57049E669086AD8 +:105DF00000F07000864204D90A6A22F07002324331 +:105E00000A629A070BD56949E668886900F00F00B5 +:105E1000864204D98A6922F00F0232438A61DF0781 +:105E200065D423689E0700F197805F490A6802F0F5 +:105E30000F029542C0F09E80580700F1A680190716 +:105E40000BD55A496569C86900F07000854204D2D3 +:105E5000CA6922F070022A43CA61DA060BD5534997 +:105E6000A569C86900F4E060854204D2CA6922F4D9 +:105E7000E0622A43CA619B060BD54C4AE069116A6D +:105E800001F07001884204D2136A23F070030343C7 +:105E90001362FEF71BFA454A93699269C3F3032321 +:105EA000434AD35C03F01F03D840424B1860FEF70F +:105EB000EFFD00200BE0136823F00F030B4313608A +:105EC000136803F00F038B423FF46DAF0120BDE870 +:105ED000F08136492669886900F0700086427FF6B5 +:105EE00066AF8A6922F0700232438A615FE72F4B06 +:105EF000A1689A6922F470620A439A6162681B6819 +:105F0000022A1CD113F4003FE0D0284E41F2883819 +:105F1000336923F0070313433361FCF737FB07466C +:105F20003369626803F03803B3EBC20F3FF479AF13 +:105F3000FCF72CFBC01B4045F2D90320C7E7032A1E +:105F400002D113F0007FDFE7012A02D113F4807F32 +:105F5000DAE713F0040FD7E71449E668886900F020 +:105F60000F008642BFF461AF8A6922F00F0232430C +:105F70008A615AE70A6822F00F022A430A600A6817 +:105F800002F00F029542A1D156E7084925698869B8 +:105F900000F070008542BFF452AF8A6922F07002AF +:105FA0002A438A614BE700BF002000520044025898 +:105FB0000497010800000024F8B503680446D807D8 +:105FC0005FD42368990700F1B1802368DA0628D5E9 +:105FD000AC4B1A69996A02F03802082A07D0182ACD +:105FE00040F0118101F00302012A40F00C811B688E +:105FF000DB0502D5E369802B56D1A34B216A1A68D1 +:1060000041F20303B3EB124F9E4BC0F0F5805A6888 +:10601000202922F0F8420CBF42F0804242EA81621D +:106020005A602368190700F1338123689A0600F14A +:10603000548123685D071ED5944D2B6843F480730B +:106040002B60FCF7A3FA06462B68DA0540F16A815B +:10605000A3688C4D012B40F06C812B6F43F0010342 +:106060002B6741F28837FCF791FA864E0546336F6D +:106070009B0740F18481606A002840F087810020FE +:106080002AE0804B1A69996A02F03802102A05D07A +:10609000182A0BD101F00302022A07D11B689A03C8 +:1060A0008FD56368002B8CD1012015E06268B2F5B2 +:1060B000803F12D11A6842F480321A60FCF766FA07 +:1060C000704E054633689B033FF57BAFFCF75EFAE5 +:1060D000401B6428F6D90320F8BD6A4D2B689AB995 +:1060E00023F480332B602B6823F480232B60FCF790 +:1060F0004DFA06462B689F037FF563AFFCF746FA1F +:10610000801B6428F6D9E6E7B2F5A02F07D143F447 +:1061100080232B602B6843F480332B60CEE723F47D +:1061200080332B602B6823F48023F6E7554B1A69E4 +:10613000996A12F0380203D0182A20D18E071ED196 +:106140001B685D0702D5E368002BADD04E4B21697B +:106150001A6841F20303B3EB124F4A4B5A6809D352 +:1061600022F47C3240290CBF42F4003242EA013270 +:106170005A602AE722F0FE4242EA0162F8E7E1684B +:106180001A6841B322F019023E4D0A431A60FCF727 +:10619000FDF906462B68580712D53B4B2269196852 +:1061A00041F20303B3EB114F6B680FD323F47C333D +:1061B000402A0CBF43F4003343EA02336B6004E728 +:1061C000FCF7E4F9801B0228E4D984E723F0FE43BE +:1061D00043EA0263F2E722F001022A4E1A60FCF75A +:1061E000D5F90546336859077FF5EFAEFCF7CEF9D0 +:1061F000401B0228F6D96EE7DA6822F07C5242EAA8 +:106200000162DA600DE7E26952B31A681D4D42F08F +:1062100080021A60FCF7BAF906462B68DF0512D532 +:10622000194B226A196841F20303B3EB114F10D3E3 +:106230006B68202A23F0F8430CBF43F0804343EA05 +:1062400082636B60EDE6FCF7A1F9801B0228E4D9BC +:1062500041E7EB6823F07C5343EA0263EB60E0E63E +:106260001A68084E22F080021A60FCF78FF9054682 +:106270003368D8057FF5D5AEFCF788F9401B0228B6 +:10628000F6D928E7004402580010005C0048025884 +:106290006369964D83B16B6F43F001036B67FCF745 +:1062A00075F906466B6F9B073FF5BFAEFCF76EF9BD +:1062B000801B0228F6D90EE76B6F23F001036B6792 +:1062C000FCF764F906466B6F9F077FF5AEAEFCF7EF +:1062D0005DF9801B0228F6D9FDE6A369834D83B1E1 +:1062E0002B6843F480532B60FCF750F906462B686B +:1062F00098043FF59EAEFCF749F9801B0228F6D9B9 +:10630000E9E62B6823F480532B60FCF73FF906463F +:106310002B6899047FF58DAEFCF738F9801B0228B5 +:10632000F6D9D8E6FCF732F9801B64287FF68CAEEC +:10633000D1E6B3B92B6F41F2883723F001032B6705 +:106340002B6F23F004032B67FCF720F906462B6F15 +:1063500098077FF590AEFCF719F9801BB842F6D983 +:10636000B9E6052B2B6F03D143F004032B6774E6CA +:1063700023F001032B672B6F23F0040370E6FCF777 +:1063800005F9401BB8427FF672AEA4E6574D2B6963 +:1063900003F03803182B7AD02B68022823F080737F +:1063A0002B6067D1FCF7F2F806462B6899015BD4A5 +:1063B000AB6AA26A23F47C7323F003031343E26AFB +:1063C00043EA0213AB62636BA26B013B013A5B02CF +:1063D00012049BB202F4FE021343226B013AC2F391 +:1063E00008021343E26B013A120602F0FE42134325 +:1063F0002B63EB6A23F00103EB626B6BA26C23F45B +:106400007F4323F0F80343EAC2036B63EB6A226C19 +:1064100023F00C031343EB62EB6A626C23F002037C +:106420001343EB62EB6A43F48033EB62EB6A43F4B1 +:106430000033EB62EB6A43F48023EB62EB6A43F0D8 +:106440000103EB622B6843F080732B60FCF79EF82E +:10645000264D04462B689A013FF511AEFCF796F8DD +:10646000001B0228F6D936E6FCF790F8801B0228BC +:106470009BD930E6FCF78AF804462B689B017FF530 +:10648000FEADFCF783F8001B0228F6D923E60128AD +:10649000AA6A2B6B3FF420AE02F00301A06A81428E +:1064A0007FF402AEC2F30512E16A8A427FF4FCADCA +:1064B000226BC3F30801013A91427FF4F5AD626BA0 +:1064C000C3F34621013A91427FF4EEADA26BC3F3D0 +:1064D0000641013A91427FF4E7ADE06BC3F30663F6 +:1064E0000138181A18BF0120F6E500BF0044025811 +:1064F0002C4B4FF4165210B59A60C4B01A682A4B50 +:106500009A424CD10021BC2215A8042410F03EFE72 +:10651000264B1494196F11F0020113D1482202A8DE +:1065200010F034FE0123019403930A93204C214B75 +:10653000D4F88C209A42FBD101A8FFF73DFD4FF41F +:106540004073E360194B1B6F9B0710D5184C194B18 +:10655000D4F88C209A42FBD1052314A83993FDF777 +:10656000B7F94FF44073E360FDF7FAFF38B1012348 +:1065700014A83993FDF7ACF9FDF7F2FF08B944B060 +:1065800010BD00230A4C39930A4BD4F88C209A4250 +:10659000FBD114A8FDF79CF94FF44073E360FDF7BD +:1065A000DFFFECE76C120024000C00580044025896 +:1065B000006402580003008030B5C5B048220021B5 +:1065C00002A810F0E3FDC022002114A810F0DEFDA7 +:1065D0004E4B1A68002A40F0968001224C4D1A60FA +:1065E0004C4A136843F4807313604B4BD5F88C20EE +:1065F0009A42FBD1082301A8019300230A930123A7 +:106600000693FFF7D9FC10B1444808F011FC444C44 +:1066100014A8236923F47C532361236F43F400738C +:1066200023674FF4800314934FF400734193FDF7F5 +:106630004FF908B13B48E8E74FF440737F21F92256 +:10664000EB60236F43F400432367374C374B84F8E8 +:1066500021002360606020616061C4E9021294F847 +:106660002120C4E9060002F0FF010AB984F82010D5 +:10667000022284F82120CA225A6253225A62FCF76D +:10668000B7F808BB22682069936823F4E00323F07D +:1066900040039360636891680343A06903430B431D +:1066A0009360D4E9021343EA01431361FCF77AF8DB +:1066B00050B922686569D36C23F00303D364E3699E +:1066C000D16C2B430B43D3642368FF255D6240B933 +:1066D000012194F820208A4284F8211003D1144823 +:1066E00093E7144891E7022284F82120CA225A62D3 +:1066F00053225A629A6842F020029A605D6284F8DE +:10670000200084F8211045B030BD00BF3C0E0024AD +:1067100000640258004802580003008003960108F4 +:106720000044025823960108400E002400400058FF +:10673000679601084C960108764B70B51C68C4B08A +:106740001CB1FBF7EDFE44B070BD0125C02221460F +:1067500014A8714E1D6010F019FD4C22214601A8AD +:1067600010F014FD337833B304230A940193052306 +:106770000393802314934FF4C0433C936749684BC1 +:10678000D1F88C209A42FBD101A8FFF715FCD8B1B3 +:106790000023082201A833700A938023019201226A +:1067A00014934FF4004306923C93FFF705FC58B155 +:1067B0005C4808F03DFB08220A938023069501926D +:1067C00014934FF40043D8E714A8FDF781F808B1FB +:1067D0005548EEE7554B4FF6FF755549D3F8F42071 +:1067E00042F40062C3F8F420D3F8F42002F400620B +:1067F0000092009AD3F89C2042F40062C3F89C20D7 +:10680000D3F89C2022F40062C3F89C20D3F8A8207F +:1068100042F40062C3F8A820464A136843F4801388 +:106820001360136C23F4801313644FF440723B4BDA +:10683000DA604FF48022404B83F8360093F83640FC +:106840001960D8611863C3E90552C3E901001A460B +:10685000C3E90300C3E90800C3E90A000B460CB909 +:1068600082F835000224354982F83640DD68294037 +:10687000D9600123324982F83630324B9B68C3F825 +:106880007012BFF34F8F1368996841F0010199604E +:10689000996841F008019960516882F836400129F1 +:1068A00007D0916AB1F5000F03D1D96821F4606176 +:1068B000D960196944F6206441F001011961102181 +:1068C00059604FF6FF7199611F490968B1FBF4F4F3 +:1068D0004FF47A71614301391C6808BF0320E40654 +:1068E00001D40029F7D1032806D0196941F0040129 +:1068F0001961012182F8361008225A6000225A617B +:106900001A681207FCD508225A6001220F4B1A7030 +:1069100019E700BF000E002440190024006402584B +:1069200000030080819601089A96010800440258ED +:10693000002C005890000058040E0024FEF119FFAE +:106940000919000800ED00E00000002431100024C7 +:1069500090F8BC230368012A21D0012280F8BC23CF +:10696000826A012A06D18269012A03D09A6B42F415 +:1069700080329A639A6842F001029A60D3F8002E3E +:1069800022F00302C3F8002ED3F8042822F00202FA +:10699000C3F80428002380F8BC331846704702204F +:1069A000704700002DE9F74F0023DFF8BC81DFF8C6 +:1069B000BCC14FF0B0490A6832FA03F402D103B007 +:1069C000BDE8F08F01279F403A4000F0B6804C6848 +:1069D0004FEA430E032524F0100A05FA0EF50AF1DA +:1069E000FF36ED43012E10D8866806EA050BCE6807 +:1069F00006FA0EF646EA0B068660466826EA0707A0 +:106A0000C4F300169E4037434760C768BAF1020FCF +:106A10008E6807EA050706FA0EF646EA0706C6601C +:106A200014D14FEAD30A03F0070B0F2700EB8A0AB1 +:106A30004FEA8B0BDAF8206007FA0BF726EA070714 +:106A40000E6906FA0BF63E43CAF820600668354028 +:106A500004F0030606FA0EFE4EEA05050560E500A1 +:106A60006BD5D8F8F45023F0030603F003074FF07A +:106A70000F0E45F0020506F1B046BF00C8F8F4500D +:106A800006F58066D8F8F45005F002050195019DE1 +:106A90000EFA07F5D6F808A02AEA050E314DA842ED +:106AA0004DD005F58065A8424BD005F58065A8421C +:106AB00049D005F58065A84247D005F58065A84214 +:106AC00045D005F58065A84243D005F58065A8420C +:106AD00041D005F58065A8423FD005F58065A84204 +:106AE0003DD005F58065A8420CBF09250A25BD40AB +:106AF000E70345EA0E05B5606FEA0206DCF80050D0 +:106B000054BF35401543A703CCF80050DCF80450BF +:106B100054BF35401543E7024FF0B047CCF804505E +:106B2000D9F8005054BF35401543A4023D607D683C +:106B300054BF35401543C9F8045001333BE70025E5 +:106B4000D5E70125D3E70225D1E70325CFE70425C3 +:106B5000CDE70525CBE70625C9E70725C7E70825C3 +:106B6000C5E700BF000002580044025880000058EA +:106B70000A4BDA6842F00102DA60DA68D2070BD514 +:106B8000D3F80C2142F00102C3F80C21D3F80C0118 +:106B9000C04300F001007047012070470020005200 +:106BA000104BDA68D20706D40E4BD3F80C0110F064 +:106BB00001000AD170470C4A5A6002F188325A60CB +:106BC000DB68DB07F0D501207047074AC3F80421D2 +:106BD00002F18832C3F80421D3F80C0100F001005F +:106BE000704700BF002000522301674538B50446B6 +:106BF000FBF7CCFC05460134FBF7C8FC431BA34262 +:106C0000FAD338BDF0B5A5B020220021044609A86A +:106C100010F0BCFA4C22002111A810F0B7FA564B24 +:106C20009B6A03F00303022B34D0534B0227534ECD +:106C30000025D3F8E02004A9304642F08002C3F8D2 +:106C4000E020D3F8E030079503F080030393039B23 +:106C50000123CDE904730693FFF7A4FE0A20FFF792 +:106C6000C5FFB761FBF7C4FC454BF4B90194DA6A80 +:106C700022F00102DA62DB6A03F001030193414B67 +:106C80009A6942F440429A619B6903F4404301933C +:106C9000019B1FE0012109A8CDE90911FFF778F850 +:106CA0000028C2D0002025B0F0BD0295DA6A22F09B +:106CB0000102DA62DB6A334A03F00103029393694B +:106CC00023F4404343F480439361936903F44043C6 +:106CD0000293029B2B4A93699D04FCD521214FF41A +:106CE000A0230522002C4FF0080511A81C920CBF10 +:106CF000A02228222195CDE9111301231D92002203 +:106D00001793022323921E9320932292CDE91A33E4 +:106D10000A231F93FFF750F901460028C2D13F22F2 +:106D20000323CDE9092340234FF48062CDE90B050D +:106D3000CDE90E320D931093E4B109A8FFF728F8BE +:106D40000028AFD10C4B01201A6842F080021A6073 +:106D5000D3F8F42042F00202C3F8F420D3F8F43060 +:106D6000074A03F002030093009B136A43F00103F8 +:106D7000136298E70421E0E700440258001C02581F +:106D8000000400580048025808B50120FFF73AFFF8 +:106D900010B9024808F04CF808BD00BFBB960108C6 +:106DA00073B505460C200E46019207F0E7FA002362 +:106DB0002946019A0446C0E90133074B0360FAF7FC +:106DC00063FB054630B1236820465B689847284638 +:106DD00002B070BD3460FAE7149A010873B5054635 +:106DE0000C200E46CDE9003207F0C8FA0021044617 +:106DF000C0E901110849DDE9003201602946FAF7CE +:106E0000E5FA054630B1236820465B689847284676 +:106E100002B070BD3460FAE7409A010803682DE9BA +:106E2000F041DB6E04460D469847804640F2011063 +:106E300007F0A4FA2368002706461B6F2946204660 +:106E4000984723683246294620465B6E98470028BB +:106E500001DD0137F5E723684246294620469B6E4F +:106E60009847304610F02CF93846BDE8F081000014 +:106E700010B50446EFF3058313B16FF0050010BDA4 +:106E800008F0DEF90028F8D120464FF0FF31DFF896 +:106E900008C000DFF3E700BFE9CE00080368013354 +:106EA000036000207047F7B5089F0E460468194636 +:106EB000C0690023256800970027E0FB06232046D1 +:106EC00001976D69A84703B0F0BDF7B5089F0E465E +:106ED00004681946C0690023256800970027E0FB75 +:106EE000062320460197AD69A84703B0F0BD37B52A +:106EF0000468C36900202268009301902046D56988 +:106F0000A1FB0323A84703B030BD006803681B69D9 +:106F10001847002807DC10F1160F04DA10F1340FBF +:106F200008BF6FF08900704770B50A440E4E0368C1 +:106F300093FAA3F393FAA3F30360914212D011F8EA +:106F4000014B84EA030505F00F0556F8255085EA44 +:106F5000131383EA141404F00F0456F8244084EA4F +:106F60001313EAE7036070BD789D010843798279C5 +:106F70000433C0791344184470470B6810B5046893 +:106F80009C4209D040684A68904205D0944203D0A0 +:106F9000181A18BF012010BD0020FCE70368013358 +:106FA00004D04068431C5842584170470120704744 +:106FB00003681A6AC36AD31A1944B1FBF2F302FBDD +:106FC0001311036B8B4210B50BD94C09C26B012313 +:106FD00001F01F0103FA01F152F824300B4342F88B +:106FE0002430002010BD036808461847036910B517 +:106FF000044613B150F8041B9847204610BD38B51D +:10700000036804460D46DB6F984723682D692046C8 +:10701000D3F880309847284638BD38B50368044611 +:107020000D46DB6F98472368ED682046D3F8803023 +:107030009847284638BD38B5036804460D46DB6FCF +:10704000984723686D692046D3F8803098472846D2 +:1070500038BD03680122D3F88430184708B5064BC1 +:1070600053F820000368DB6A984780B2B0F5007FD0 +:1070700038BF4FF4007008BD981A002473B5104E45 +:1070800005460C4656F82030BBB1FFF7E7FF2368F2 +:107090006468024656F8250001340168E41AA4FB2E +:1070A0000245A2FB0323CDE90045096A8847002871 +:1070B00014BF0420002002B070BD0320FBE700BF16 +:1070C000981A00242DE9FF4716461C468046DFF833 +:1070D00044900391FFF7C2FFA0FB0667A0FB0445A5 +:1070E00059F8280032460368CDE90045D3F81CA0C2 +:1070F0003B46D04750B959F82800324603990368F7 +:10710000CDE900459C693B46A04700B1042004B08E +:10711000BDE8F087981A00247FB5164605461C4640 +:107120000391FFF79BFF0A4A0346039952F8250093 +:10713000A3FB04450268CDE900455469A3FB06237F +:10714000A047002814BF0420002004B070BD00BF79 +:10715000981A00240A4B37B5044653F820000368F8 +:107160009B6B9847054620460191FFF777FF002368 +:1071700002460199284612F05DF903B030BD00BF08 +:10718000981A002413289ABF014B185640427047A2 +:10719000E29B0108036800229B6F184702461F4BC1 +:1071A0001F4980B2B2F5805F28BF0B46F0B51C1DA9 +:1071B00034F8043C2146ABB1984213D334F8025C56 +:1071C0002E12EFB253FA85F5AA4221DA082E09D819 +:1071D000DFE806F005090F11131517191B00D31A64 +:1071E00034F81300F0BDC31A03F00103C01A80B2D3 +:1071F000F8E71038FBE72038F9E73038F7E71A38B6 +:10720000F5E70830F3E75038F1E7A0F5E350EEE793 +:107210000434002ECCD101EB4703C8E7509F01088E +:1072200042A101080749002310B531F8024B9AB278 +:10723000844203D00133802BF7D11A4602F180003B +:10724000C0B210BD769C010813128A76CB76037803 +:10725000032B01BF120C0A7512124A7570470328DE +:10726000CA7E8B7E08BF487D43EA022302BF0A7DA7 +:1072700042EA002243EA02431846704760B10368BD +:107280005BB11A785AB18088DA88904216BF09201B +:10729000002000230B60704703460920FAE709200D +:1072A0001346F7E7026810B504465AB1114611F8C3 +:1072B000013B1F2B11D93A2BF9D11378303BD8B2AF +:1072C000092802D94FF0FF3006E002329142F9D18D +:1072D000032B1846F6DC216010BD0020FCE7036A92 +:1072E0000239023B8B4283BF4389406B01FB0300A1 +:1072F0000020704738B5C378044613B900252846E6 +:1073000038BDD0E90E2101234078FFF7DBFE0546AA +:1073100080B9A16BE36A626ACB1AE0709342EDD246 +:10732000A378022BEAD10A440123E16B6078FFF7CE +:10733000C9FEE4E70125E2E70B0A017043700B0C7C +:10734000090E8370C170704742884378007843EA21 +:10735000022340EA032070472DE9F0470027D0F8C8 +:10736000009006460C468F758369002B00F0A180C3 +:10737000C36A013303D100232E251A4648E0B846DC +:107380003D4613E0B0F5803F2DD2FFF74BFFFF28BD +:10739000034626D9BAF1010F25D963190212D8750F +:1073A0009A7502231D44002002378046D9F8103018 +:1073B000D85BC8B1B8F1000F05D100F5205292B2E8 +:1073C000B2F5006FF0D340EA0840C5F1FF0A7F280C +:1073D000D8D883B2BAF1000F0FD062199375012388 +:1073E000E0E70028F6D10025B8F1000F4FF00003C8 +:1073F00018BF00252544AB75BDE75546F4E70B2BB8 +:1074000003D81A46531C224451720B2814D002464A +:10741000F169501C895C2029F7D0052908BFE521B6 +:107420000928ECD10B2BF2D804EB030703F101027E +:107430007D72E7D11346EAE7E21800215172A27D7E +:1074400012BBBBB16FF0080504F1090208202D1B27 +:10745000AB1812F8011B81B12E298BB22BD0A3F1EE +:107460004101192904D8F169097B084200D0203371 +:107470001373EDE73F23A3750123234400229A757C +:10748000F3691B7B03B96372F369DB7A03F03F0393 +:107490002372F16901F11C00FFF756FF2060CA7DDD +:1074A0008B7D43EA0223E3804A7E0B7E43EA02237C +:1074B000A380BDE8F0871020DAE713B50C46A430AE +:1074C000019006F0CBFEA469019807F027FF204643 +:1074D00002B0BDE81040FFF71CBD37B50D46A43023 +:1074E000019006F0BBFEEB696C6913F4003F019854 +:1074F00003D02B6A9C4238BF1C4607F00FFF204682 +:1075000003B0BDE83040FFF704BD13B50C46A4300E +:10751000019006F0A3FE246A019807F0FFFE2046C2 +:1075200002B0BDE81040FFF7F4BC10B50C4682690C +:10753000FF21A0680FF02AFE4FF0FF33236010BD3B +:1075400037B50546A4300C46019006F087FE05F1DC +:1075500024026B6A01981BB19C420DD12368136011 +:1075600007F0DCFE14B120460FF0AAFD002003B0A6 +:10757000BDE83040FFF7CDBC1A461B68EBE7036857 +:107580009B6A10B5044613B9C0690FF099FD2368D2 +:10759000DB6A13B9A06A0FF093FD23681B6B23B954 +:1075A000E06BBDE810400FF08BBD10BD70B500F171 +:1075B000A4060546304606F051FED5F8904064B169 +:1075C00005F11400FFF7DBFFD5F890000368DB68D6 +:1075D000984700230446C5F89030304607F09EFED9 +:1075E000204670BD036873B50C46DB6F06469847AE +:1075F00001A92046FFF742FE054600B92060336826 +:107600003046D3F88030984714B120460FF058FD2B +:10761000284602B0BDE87040FFF7B4BD08B10FF0D6 +:107620004FBD704738B58B6A04460D460160CBB13B +:10763000C361EB6A13B3A36204F120012846FFF78C +:1076400074FF4FF0FF33636123681A6BEAB1E263A2 +:1076500000204FF0FF33C4E90300C4E90133A4F86C +:10766000400038BD48690FF023FDE0610028E0D1FB +:107670002046FFF784FF6FF00B00F2E7A8690FF0D8 +:1076800017FDA0620028D7D1F2E7586AC0080FF0B2 +:107690000FFDE0630028DBD1EAE72DE9F341054661 +:1076A0000191FFF727FE044680BB01992846FFF7AA +:1076B00016FE2146A8630746AA89E86B0FF066FD0F +:1076C0006C89AE897443B4F5004F28BF4FF4004471 +:1076D000A6421DD220460FF0EBFC804638BB640862 +:1076E000F6E72346BA1941466878FFF7EBFC18B96C +:1076F00026446B89B342F4D840460FF0E1FC688918 +:10770000801B18BF012002B0BDE8F0810120FAE71C +:10771000EC6B00266B89B342F1D90123BA192146DB +:107720006878FFF7CFFC0028E9D10136F2E722465E +:1077300000210FF02BFDB4FBF6F40026D9E7000082 +:107740000C4B03F10802883310B504460260436015 +:10775000FFF72CFFD4F8A4000BF0DAF8064B204614 +:1077600003F108023433226040F8043F08F082FB42 +:10777000204610BDC09E0108589E0108A0F10400DB +:10778000FFF7DEBF10B50446FFF7DAFF20460FF023 +:1077900097FC204610BDA0F10400FFF7F3BFF7B53A +:1077A0000C460968064617464B1C21D000688369C1 +:1077B00000938568D4E90123A847054620B937B965 +:1077C00021463068FFF7B1FE284603B0F0BD3368AC +:1077D000394630469B690193A3680093D4E900239E +:1077E000FAF70AFD002805DBEAD16FF03305EBE775 +:1077F0000025E9E70546E7E72DE9F74F0C9C07462A +:107800000D4691469846DDF838A0BAF1000F03D135 +:10781000504603B0BDE8F08F2B6838684345826955 +:1078200028D16B68A34225D803EB020BA34521D9CD +:10783000ABEB040BE01AAB68D3450D99184428BF95 +:10784000D3465A465C440FF093FC0D9B5B44AAEB75 +:107850000B0B0D933B689A69B4FBF2F302FB1343E5 +:1078600033B94A4629463846FFF799FF0028D0D158 +:10787000DA46CAE7B4FBF2F302FB13434BBB924573 +:1078800027D34146BAFBF2F302FB13AB2246AAEB25 +:107890000B0ACDF800A083681E460D9BB047002858 +:1078A000B7D1B9F1000F04D10D9B544453440D934B +:1078B000DEE70D9B42464946384600932346CDF805 +:1078C00004A0FAF799FC0028A3DBEDD16FF0330098 +:1078D0009FE7E31AD346C5F800806B60C8E7000055 +:1078E00008B5034808F09AF9BDE8084007F016BD4E +:1078F000B40F002408B5034808F090F9BDE808402B +:1079000006F0ACBCB40F002470B50446FFF7F2FCDF +:10791000054600283FD12378032B35D12679012E47 +:1079200032D10146A289E06B0FF030FCE36B5522A7 +:107930004121722083F8FE21AA2283F8FF215223DD +:10794000E26B137053706123D1709370E26B82F815 +:10795000E73182F8E40182F8E50182F8E611E06B94 +:10796000A16900F5F470FFF7E7FCE06B616900F5D1 +:10797000F670FFF7E1FCA26A3346E16B01326078F2 +:10798000A263FFF79FFB25716278034B53F8220037 +:10799000B0FA80F0400970BD981A002437B51E482F +:1079A00008F03CF906F05AFCF8F748FE78B91A4896 +:1079B00008F034F906F052FCFEF7FEFD002000212D +:1079C000FAF738FF144808F029F907F0A7FCF8F790 +:1079D0003DFE054610480C4608F020F907F09EFCD5 +:1079E0006846CDE900540FF0E5F9D0E90232DB0238 +:1079F00043EA0243426843EA4213026802EBD2724E +:107A000043EA620342690069503A013043EA426343 +:107A100043EA405003B030BD701A0024F8B5C56980 +:107A20000F460E68083DAE4213D3B6FBF5F00138A1 +:107A300011F018FD841CA6EB8404B4FBF5F4204679 +:107A400011F010FDA6EB800004FB150520463D60FB +:107A5000F8BD0020FCE72DE9F04F85B00F469146B8 +:107A60009846109D0390DDE90E460DB9284659E071 +:107A7000039B1868B9F1000F1ED0D9F800304345B8 +:107A80001AD1D9F80410A14216D8826901EB020A72 +:107A9000544511D2AAEB040A611AD9F80830AA4554 +:107AA00028BFAA4630465246194456445444A5EBD2 +:107AB0000A050FF05DFBD8E73A68436990450ED19F +:107AC00079688C420BD301EB030A544507D2AAEB29 +:107AD000040A611ABB68AA4528BFAA46E2E7B4FBBC +:107AE000F3F203FB1242D0F804B08AB99D420FD3DF +:107AF00022464146B5FBF3FA03FB1A5A3346A5EB7F +:107B00000A050095D84768B92E442C445546ACE781 +:107B1000A21A00934146BB68C7F800807A60D84734 +:107B20000028A2D005B0BDE8F08F2DE9F04F8BB052 +:107B3000914607468846149A07A900680DF1200B64 +:107B4000013A0593DDF858A00792FFF767FF059B00 +:107B50000546194605935046159B9847024618BBA3 +:107B600015B305F001064A4600903846C6F10204F6 +:107B7000059BA100CDE901B14146FFF76CFF02462C +:107B800090B9013C944207DC0AAB023E03EB84044B +:107B9000354454F8083CDCE708995046159B984753 +:107BA00001220028EED0024610460BB0BDE8F08F4F +:107BB0002DE9F04786B005460F46144600F114093A +:107BC000D6184FF0010A0DF11708B44203D1002076 +:107BD00006B0BDE8F08700943B460022494628469F +:107BE0000134CDE9018AFFF736FF0028F0D10122E8 +:107BF00041460E98FFF798F9E7E71FB5069C0092FB +:107C00000022CDE901340B4600F11401FFF723FFF8 +:107C100004B010BD2DE9F04F13688BB00026074665 +:107C200004930C465368B0460DF1100B06AD4FF0AF +:107C3000100A05935BF826902B46002238464946E9 +:107C4000CDF800A0FFF7D9FF70B110F1340F06D1C5 +:107C500046B1B8F1000F14BF00206FF033000BB035 +:107C6000BDE8F08F0126E5E7B8F1000F04D0E26926 +:107C7000069B9B1A002BEBDB079B23F00043132B87 +:107C8000E6D93A68D2699342E2D84FF0FF3303A8AD +:107C9000102229460393FFF747F9079B1022009013 +:107CA000494623F000433846103BFFF781FF002888 +:107CB000CBD1039B002BCBD10AAA86F0010304F1A0 +:107CC0001C0CC4F8049002EB83034FF0010853F836 +:107CD000183CC4E9023A95E80F008CE80F00B7E7BA +:107CE00070B500F1A4060C460546304606F0B6FA1B +:107CF00004F11002214605F11400FFF78BFF38B99B +:107D0000236963606369A3600E23A3611023E360AA +:107D10003046BDE8704007F001BB2DE9F041064652 +:107D200000F1A4070C4615461436384606F096FABC +:107D300004F1100221463046FFF76CFFD0B92369E9 +:107D400004F12408A56163606369A3601023E36004 +:107D5000216A21F000439D4201D8E5600AE0002934 +:107D6000A5EB030506DA424621463046FFF752FFEF +:107D70000028EDD03846BDE8F04107F0CFBA00004A +:107D80002DE9F04300F1A4070D46044699B03846AA +:107D900006F064FAC4F890502B6828469B68984710 +:107DA000064648B10023C4F89030384607F0B6FACA +:107DB000304619B0BDE8F0832422014604F16C007E +:107DC00004F158090FF0E2F9404BA5652846E36538 +:107DD00004F114083E4B23663E4B63663E4BA3669C +:107DE0002B685B6A9847D4F8943083422CBFE366D3 +:107DF000E06628462B689B6A9847D4F898308342FF +:107E00002CBF2367206728462B68DB6A9847D4F885 +:107E10009C3083422CBF6367606728462B689B6B4E +:107E20009847626F334611F005FBA0671F30D4F806 +:107E3000A030494620F01F00834294BFE367E0670B +:107E40004046FFF7EFFB0546002833D1636902AADD +:107E50000DA940461B6AA664E364012302960393BE +:107E6000C4E91066FFF7D6FE054600BB20231022AA +:107E70000E994046009305ABFFF7BFFE0546B0B92B +:107E8000069B082215490BA8A361079BE36111F02B +:107E900085F8064648B90A9B1A0C012A02D19BB202 +:107EA000012B82D96FF0150501E06FF033054046D4 +:107EB000FFF765FB00233846C4F8903007F02EFA30 +:107EC000284619B0BDE8F043FFF723B8A76E0008B5 +:107ED000CB6E0008EF6E00080B6F0008909B010846 +:107EE0002DE9F043012397B00F4606460021904646 +:107EF000CDE9051305994046B847044610BB0699DD +:107F00004046B8470446E8B905AA0BA93046FFF732 +:107F100081FE0446B0B90C25139B0E9A23F0004352 +:107F200002F10C01043B994210D9149B05A805935A +:107F3000159B0693FFF732F80028DBD0F56806F1B1 +:107F400014094DBB204617B0BDE8F0830C9908AB6F +:107F500030460095FFF751FE0146002842D107A8A0 +:107F6000FFF704F80E9B18449DF8203003F07003CF +:107F70000E90102BD0D10A9B002BCCD00A46009338 +:107F800006F11401099B3046CDE90178FFF7CDFDDC +:107F90000028C0D00446D5E7EB69DA0312D4EB69B8 +:107FA0009B030DD52B6A5BB1009305F12C0249466A +:107FB0003046CDE901786B6AFFF7B7FD0028E9D1BB +:107FC0002D68BEE76B69002BE9D0009305F12C0208 +:107FD00049463046CDE901782B69FFF7A6FD002818 +:107FE000DDD0D7E70446ADE72DE9F04104460D4664 +:107FF0000127304E4FF00008226BD4E90D13914257 +:1080000024D1002B52D02068E16AD0F820C00A4465 +:10801000B2FBFCF10CFB11220021E262426AE06B30 +:10802000934294BF23632263D208C4F834800FF0D4 +:10803000ADF8201DFEF7B2FF0028DDD12246314603 +:108040002046FFF74DFF0028D4D025E0481C013B17 +:10805000D4F83CC060634809A36301F01F035CF8D7 +:10806000200007FA03F30342C7D1E36A19442368E7 +:108070001A6AB1FBF2F302FB131129600121256B8F +:10808000636BAB4210D05A0903F01F005CF822204A +:1080900001FA00F0104001D1BDE8F08101336363C3 +:1080A000A36B013BA363EBE70020F5E76FF01B0038 +:1080B000F2E700BFB16F00082DE9F04F044687B02A +:1080C0000E4600F1140A05A92046FFF78DFF05466C +:1080D00048B920680599C3689847054600283BD0F1 +:1080E00010F1340FEFD0284607B0BDE8F08F0DF146 +:1080F0001307736A5A4651462046CDF80890CDE9D9 +:108100000087FFF7A8FC70B9059B524604F12001D7 +:108110002046CDF80080CDE90179FFF76DFB20B155 +:1081200010F1340FCFD00546DDE708F10108B36A3E +:108130004345DCD82368A16A9A69706B0FF018F880 +:10814000236A04F120012068F362636A3363FFF756 +:10815000ECF9059B7362C6E7804606F12C0B4FF0E5 +:108160000109E4E7CB695A0344BF23F480234FF0AD +:10817000FF322DE9F04148BFCB610546CB6990B095 +:1081800048BFCA620C4613F400302CD00F6A2C2270 +:10819000002102A80EF0FAFF236905F114060693E8 +:1081A00063690793012396E80700CDE9093710AB0F +:1081B00003E907004FF0FF3398466B61226A636959 +:1081C0009A4213D304F12C08324641462846FFF761 +:1081D000E6FA28B310F1340F05D121462846FFF7FF +:1081E0006BFF0028F0D010B0BDE8F08101230DF145 +:1081F000070202A9284600F00EFA0028F3DB01234B +:108200000DF107022146284600F041F80028EADB7C +:108210006B6901331CBFCDF83480C5F81480CDE7FD +:10822000636A2361236A6361E36923F4003343F4DF +:108230008033C4E90737D6E72DE9F04100F1A408FF +:1082400005460E46144640461F4606F007F805F15F +:1082500014003146FFF786FF054670B93FB1012F84 +:10826000336A01D11C4402E0022F0ED01C46002CC0 +:10827000AABF25466FF015053462404607F04EF858 +:108280002846BDE8F041FEF744BE7369EAE72DE9F0 +:10829000F04F9B468DB0CB69054604920C4603F027 +:1082A0000302012A00F020815E0314D4E66932053E +:1082B0001AD4276A17EB0B0F00F1198116F4003658 +:1082C00018D0D946E369B9F1000F25D123F4002372 +:1082D0005A46E36104E0FFF745FF02460028E5D077 +:1082E00010460DB0BDE8F08F6269216A8A4288BFEE +:1082F0002262DEE763699F42E3D923620BAA01236E +:10830000214628468DF82C60FFF7C1FF021EE7DBEF +:10831000236A9F42F2D8D4E79B0304F12C0620D5B0 +:108320002B68A26ADB699A4242D12B6805F1140AD4 +:108330001B6AAB63D4E90832CDE909230BA92846AF +:10834000FFF752FE0246F8B928680B99C3689847B0 +:10835000024618B312F1340F16D14FF0FF332B62DF +:10836000ECE7236A002BE0D004F12802013B314600 +:108370002846029204F1240200930192D4E90423D6 +:10838000F9F762FF024620B1E36943F40023E36199 +:10839000A6E731462868FFF7C8F8C6E70A9B2868B1 +:1083A00043BB0B9A6262A362E36943F40033E36167 +:1083B000A84658F8143BDF69A36AFF1A4F4528BF47 +:1083C0004F46049B4246314628460193A36A0297D2 +:1083D0000093636AFFF710FA0246002875D010F187 +:1083E000340FD1D121462846FFF766FE0246002809 +:1083F000E7D0C9E7013B0AA905920A93FFF70EFBF4 +:108400000A9B29680133059AC9690A938B424AD1AC +:108410000130904609AF90FAA0F3B3FA83F30593C5 +:10842000013306934FEA88035246314628460793A4 +:108430000423CDE90173079B00930B9BFFF7DCF945 +:108440000246002886D1059B434530D108F101083A +:10845000069B4345E6D80B9B6362069B9B00A2E705 +:108460000123002251462846CDF80080CDE9017352 +:10847000099BFFF7F0FA0246002885D101235246F6 +:1084800031462846CDF80080CDE901730B9BFFF7FC +:10849000B3F9024600287FF45DAF08F101080A9B9A +:1084A0009845DDD37DE790460DF12307F7E70423D8 +:1084B00051462846CDE90173079B0093099BFFF7BE +:1084C000CAFA02460028C1D05EE7236AA9EB070971 +:1084D0003B442362A36A3B44A362049B3B44049352 +:1084E0002B681B6AAB63EDE66FF00802F8E66FF0ED +:1084F0001A02F5E62DE9F04700F1A4060D46814683 +:1085000086B03046904605F0A9FEEA6909F11409E3 +:1085100002F00303012B5AD092036B6903D52A6A38 +:10852000934238BF1346984524D229464846FFF760 +:1085300019FE0446A8B905AB059005F12C01484683 +:10854000029305F11003CDE90083D5E90423F9F77F +:108550007BFE044628B9EB69C5F8148043F48033E8 +:10856000EB61304606F0DAFE204606B0BDE8F04783 +:10857000FEF7CFBC2ED92F6ABB4209D02946484608 +:10858000FFF7F0FD041E15D16B69002B24DB2B6275 +:108590004FF0000A2B6A98450ED829464846FFF747 +:1085A000E1FD20B9381EB4BF6FF01500286200EA63 +:1085B000E074D6E7D5DBEBE7012305AA2946484658 +:1085C0008DF814A0FFF763FE041EE3DAC9E76FF02D +:1085D0000804C6E70024C4E76FF01504C1E730B50E +:1085E00000F1A40585B0044628460193CDE9022197 +:1085F00005F034FE039904F11400DDE90132FFF7C0 +:1086000046FE0446284606F089FE204605B0BDE831 +:108610003040FEF77EBC2DE9F04F1D46CB699046F9 +:1086200087B003F0030207460C46022A54D09A038F +:1086300005D4266A6269964208D3002003E0FFF75A +:1086400091FD0028F5D007B0BDE8F08F961B04F12E +:108650002C0104F1280A04F1240BAE4228BF2E4657 +:10866000B146B9F1000F01D13046ECE7E3695B0395 +:1086700004D53B68A26ADB699A4210D1236A384666 +:1086800005910093CDE901BAD4E90423F9F7DCFDA3 +:108690000028D8D1E369059943F48023E3613A685F +:1086A0003846A36AD56900220093ED1A636A0591E2 +:1086B0004D4528BF4D46CDE90185FFF7CCF900288F +:1086C000C1D1236AA844A9EB050905992B4423626B +:1086D000A36A2B44A362C4E76FF00800B3E730B588 +:1086E00000F1A40585B0044628460193CDE9022196 +:1086F00005F0B4FD039904F11400DDE90132FFF740 +:108700008AFF0446284606F009FE204605B0BDE86B +:108710003040FEF7FEBB00002DE9F341064614464B +:108720000021282206F1A407204600250EF02EFD88 +:10873000384606F11408019505F090FD06F1180081 +:10874000FEF72CFC28B901AA0D494046FFF7C8FBEB +:108750000546384606F0E2FD6DB9736F019AC4E92B +:108760000033B36FC4E902359B1AC4E90435C4E988 +:108770000635FF236362284602B0BDE8F08100BFE2 +:108780009D6E0008F7B5044604300E461546FEF708 +:1087900005FC10B1002003B0F0BD012300906A4633 +:1087A000294620460193FFF735FA0028F3D105F159 +:1087B00024073846FEF7F2FB0028EBD13146384655 +:1087C000FEF7DBFB38B13A4629462046FFF722FA8E +:1087D0000028EED0DFE70120DDE72DE9F341064672 +:1087E0000C46154601F124081027226AE16822F0A0 +:1087F000004301F10C00043B984217D80C230A46B1 +:108800003046616800932B1DFFF7F7F9014690B9D8 +:10881000E66828462E60FEF7A9FB3044E060284653 +:10882000FEF7A4FBA3691844A06104E0002A06DB5C +:1088300029606FF00101084602B0BDE8F0812146D1 +:1088400042463046FFF7E6F901460028F3D1A36916 +:10885000E7601433A361C8E72DE9F84314461D46C9 +:108860000022012306460F4604F1240805F10809F9 +:10887000C4E909234046FEF791FB08B100200DE052 +:10888000424621463046FFF7C5F938B92A46214607 +:108890003046FFF7A2FF18B1831CEBD0BDE8F88388 +:1088A0002B7903F07003202BF0D139464846FEF7B0 +:1088B00064FB0028EAD10120F0E770B5054692B0CC +:1088C00004300E46FEF76AFB68BB0123019001AA43 +:1088D00007A928460293FFF79DF9044618B910A886 +:1088E000FEF75CFB10B1204612B070BD10AA07A9BC +:1088F0002846FFF78FF938B903AA07A92846FFF7DA +:108900006CFF18B1831CEAD00446ECE79DF91030E7 +:10891000002BF1DB0822314605A810F03FFB0028B0 +:10892000EAD10124DFE70024DDE700002DE9F04172 +:1089300000F1A408C8B00E4605464046174605F0AB +:108940008DFC4FF48472002106A80EF01FFCB36961 +:1089500014350E2B22D12223364908A88DF8183061 +:108960000FF01CFE0F230124B361404606F0D6FC35 +:10897000012C0DD19DF81830112B59D0222B14BF8A +:108980000023032308A9384687F800310FF006FEBC +:10899000204648B0BDE8F041FEF7BBBA0F2B08D126 +:1089A0002223254908A88DF818300FF0F7FD102371 +:1089B000D9E702AA31462846FFF70FFF044618B14F +:1089C000821C08BF0024D0E79DF80C3003F07F0222 +:1089D000112A01D0222AECD11B060CD504A9284665 +:1089E000FFF76BFF041EC0DBE3D19DF80C3003F0F2 +:1089F0007F038DF80C309DF80C302846029A112B1D +:108A00008DF8183002F104029DF80E1004BF059B8A +:108A100007939DF80D301A449DF80F300A440093D7 +:108A2000716808ABFFF7E9F8041E08BF01249CE752 +:108A30000523A7E79A9B0108999B0108F0B5012738 +:108A4000061DA7B0044680F840703046FEF7A6FA2F +:108A50000546002840F0818001462C2205A80EF032 +:108A600095FB4FF000432822294610A80D930EF0E5 +:108A70008DFB1A9723681B6A9D4202D36FF0330067 +:108A80001BE019A8FEF78AFA002866D119AA10A9D6 +:108A90002046FFF7BFF880B90D9B002B38DB30462E +:108AA000FEF77CFA58B1199B0E931A9B0F93002383 +:108AB00005A920461A4600F052F827B0F0BD01ABD8 +:108AC0001BAA0EA92046FFF7C7FE0028F5DBEAD057 +:108AD000039A0E99049B8A420F9801D1984217D0AD +:108AE000824201D1994213D00E92DFE79DF9703096 +:108AF000002B0DDA1DA92046FFF7DFFE0028DCDB86 +:108B00001ED01BAA10A9204600F075F90028D4D168 +:108B10001BAA10A92046FFF760FE0028E6D0831CA0 +:108B2000CBD10DF1400C05AF0135BCE80F000FC7EC +:108B3000BCE80F000FC79CE8070087E8070099E72B +:108B40009DF870301BAA10A903F07F038DF87030D8 +:108B50000346204600F0C3F9D8E70020ADE72DE931 +:108B6000F04F2DED028B9BB006460D460793CB6967 +:108B700007980133059202EB0017CB610B1DD1E979 +:108B8000011408EE103A1346C5E901419F420FD186 +:108B90000023CDE90941069330686968C3689847A6 +:108BA000044670B114F1340F00F0F4802046FFE069 +:108BB000D86810332A6A024453F80C0C121A2A623D +:108BC000E4E705F11C080DF12C094FF0FF3306F125 +:108BD000200A10271022414648460B93FEF7A4F9BD +:108BE000224600946B6851463046CDE90187FEF776 +:108BF00003FE04460028D5D18346B84608EE909A75 +:108C00002AE0079B9B4580F2A080059A4FEA0B1350 +:108C1000D35802EB0B19434540F0978018EE900AA9 +:108C2000D9E90212FEF780F9D9F80C30002251463A +:108C300002933046D9F80830CDE900736B68FEF72F +:108C4000DBFD04460028ADD1D9F804300BF1010B4F +:108C50009844D9F80C301F442B6A23F00043043B9E +:108C6000BB42CED804230DF12C08002251460293BA +:108C700030466B68CDE90078FEF7BEFD044600285B +:108C800090D14FF0FF330246514630467361FEF7F4 +:108C900086FD0446002885D130680369984704465C +:108CA00000287FF47FAF4FF0FF330FAF02466968B3 +:108CB0000F9330462B6A009723F00043043BFEF7E6 +:108CC00077FF044600287FF471AF0F9A0B9B9A42FE +:108CD00060D1069B4BB306F104094846FEF75EF9E6 +:108CE000002875D143463A4609A93046FFF7B4FD3E +:108CF00000285DDB6CD06B684246394630460D93E8 +:108D0000AB680E93002300F0EAF8002850D14946E2 +:108D100009A8FEF732F918B96B687360AB68B360E5 +:108D20003046FFF78BFE002842D13469002C3FF417 +:108D30003DAF18EE101A201DFEF71FF918B96B6829 +:108D40006360AB68A3602468F0E7012342460A9998 +:108D5000304600930FABFEF750FF044600287FF427 +:108D600025AF01220FA918EE900AFEF7DDF80123C6 +:108D70002246514602930FAB3046CDE900736B6833 +:108D8000FEF73AFD044600287FF40CAF08F1010815 +:108D9000013761E74FF0FF3300220FA909A83362C2 +:108DA0000123CDE90F23FEF7E8F830B96FF0330067 +:108DB0001BB0BDEC028BBDE8F08F18EE101A3046E8 +:108DC000FFF712F90123069300283FF4E5AEEFE721 +:108DD0003A4609A93046FFF7D5FC0028E8DBA4D0C5 +:108DE0006B68394630461893AB68199300231A46CE +:108DF000FFF7B5FE97E72DE9F04780468CB01046A7 +:108E00000C461646FEF7B2F80B6A143023F0004306 +:108E100083421DD101AA04314046FFF7B3FC051E71 +:108E200012DB099A002A13DA236A01A9404663F08B +:108E3000004313400993636A0A93A36A0B930023C8 +:108E40001A46FFF78CFE054628460CB0BDE8F087B1 +:108E5000336830460193FEF789F80023029001AA97 +:108E600021464046CDE903330123FFF778FE05464E +:108E70000028E9D1D8F80C70211D4FF0FF3ACFB986 +:108E8000D8F81070211D002FDED0381DFEF775F8C0 +:108E900070B9FC6833689C420AD93046FEF766F820 +:108EA000201AF8603046FEF761F8BB69181AB861FD +:108EB0003F68E8E7381DFEF760F830B9D7F80C9046 +:108EC0003368994503D1C7E901AA3F68D7E7FCD9C0 +:108ED0003046FEF74BF8A9EB0000F860F5E770B5F7 +:108EE000154688B00C26D27955F8044B002B079212 +:108EF0000094344403960494CDE9052314BF02235F +:108F000001236A46CDE90165FFF729FE08B070BD6F +:108F100070B592B006460D46FFF724F9044670BBC3 +:108F2000EB6903F41023B3F5803F28D12A1D1046C6 +:108F3000FEF734F818BB07A93046FEF76BFE04466F +:108F4000E8B90C23EA680690009304AB08990392F1 +:108F5000CDE904003046FEF750FE044678B92B698F +:108F600003AA07A905936B69069303463046FFF7EA +:108F7000B6FF044618B9EB6923F48033EB61204651 +:108F800012B070BD37B500F1A40504460191284622 +:108F900005F064F9019904F11400FFF7B9FF0446E4 +:108FA000284606F0BBF9204603B0BDE83040FDF787 +:108FB000B0BFF8B500F1A40705460C46384605F0E9 +:108FC0004DF9214605F11400FFF7A2FF05F120023B +:108FD00006462B6A1BB19C4216D123681360A36915 +:108FE0000BB11B682BB96B695B6B13B9606B0EF02F +:108FF00067F8384606F092F920460EF061F83046E0 +:10900000BDE8F840FDF785BF1A461B68E2E700009F +:109010002DE9F04F2DED028B85B01F68054608EE57 +:10902000101A029340F622031446DFF84091536071 +:10903000436893608368D3604946384610F035F83A +:1090400007EB000883464946404610F00AF801281D +:10905000064608EB000A05D117F80B302E2B0AD173 +:109060005746E9E7022806D102463F4940460FF03D +:1090700095FF0028F4D057464FF0010B4946504663 +:1090800010F013F88244494650460FF0EAFF0246BA +:1090900090B102280CD10390504633490FF07EFF67 +:1090A000039A28B9BBF1010B04D10AF10207C3E707 +:1090B0000BF1010B9244E1E798F80000002845D03D +:1090C000029BC3F800802379222B49D104F1080ABE +:1090D00018EE101A28465246FEF79CFDB0BB05F16B +:1090E000140B224618EE101A2846FFF776FB68BBD1 +:1090F000237903F07F03112B01D0222BF1D1E379E7 +:10910000B342EED1236859466279284604331344AA +:10911000A279134418EE102ACDE900865268F9F7B7 +:109120006BF8002812DBDCD095F84130002B83D19E +:1091300094F90430002BBFF67FAF51462846FFF765 +:10914000BCFB002807D001DB6FF0010005B0BDECCF +:10915000028BBDE8F08F237903F07F0323716BE767 +:109160006FF01300F2E700BF999B01089C9B010878 +:109170002DE9F041804600F1A406D4B00C4608F178 +:1091800014073046154605F069F802AB03AA07A993 +:1091900038460294FFF73CFF0446C0B901464FF43D +:1091A000847212A80DF0F2FF9DF8103008F118013A +:1091B00005A8112B8DF8483004BF069B1393FDF7CB +:1091C000DCFE0446C0B9174914A80FF0E7F9304691 +:1091D00006F0A4F8139B2B619DF84830112B1DD08D +:1091E000222B44F2FF1318BF002320466B6054B0BB +:1091F000BDE8F041FDF78DBE039B38469DF8111088 +:1092000004339DF8122019449DF813300A4400934A +:10921000089914ABFEF7F1FC0446D8E748F2FF13B7 +:10922000E3E700BF9C9B0108F0B500F1A4050446EC +:109230009DB00F46284604F1140605F00FF894F887 +:109240005430019783B101AB02AA06A93046FFF75B +:10925000DFFE044678B1284606F060F820461DB0CF +:10926000BDE8F040FDF755BE3046FFF7E7FB04468A +:109270000028E8D0EFE79DF80C30222B1ED002AA80 +:1092800006A93046FFF7B7FD04460028E3D19DF854 +:109290000C30222BDFD106AA12A93046FFF772FA52 +:1092A000041ED8DB1A9B06A930460F931B9B109314 +:1092B00000231A46FFF753FC0446CCE704AA11A981 +:1092C0003046FEF7A7FC04460028C4D1199B142B96 +:1092D000D5D06FF02604BEE773B50C4604310646C0 +:1092E000FEF782FE0546F0B904F108013046FEF7AC +:1092F0007BFE0546B8B904230246616830460093F8 +:1093000004F11C03FEF779FC10B110F1340F0DD1FC +:10931000E36914220133E3614FF0FF33C4E908230A +:10932000A3621023E360284602B070BD0546FAE749 +:109330002DE9F04F00F1A4080646C3B00D464046A3 +:1093400004F08CFFD6F8903063B1002D08BF1D46A5 +:10935000336830469B6A9847044668B1404605F03A +:10936000DDFF05E045B96FF01204404605F0D6FF79 +:10937000204643B0BDE8F08F2B6828469B68D6E9AD +:1093800025BAD6E92797984704460028E6D1242233 +:10939000014628A80DF0FAFE6A4B2846239524932F +:1093A000694B2593694B2693694B27932B685B6A1E +:1093B00098472B6858452CBF2890CDF8A0B0284678 +:1093C0009B6A98472B6850452CBF2990CDF8A4A0E4 +:1093D0002846DB6A98472B6848452CBF2A90CDF871 +:1093E000A89028469B6B984723462A9A10F022F8AB +:1093F0002B901F3023A920F01F00B84294BF2C905F +:109400002C9731A8FEF70EF90446002840F086801C +:10941000319B014640985A6AD2080DF0B7FE319A46 +:109420000DA931A83C94D2E90832CDE93E439A42D5 +:1094300094BF3D923D93FFF74FFF0446002869D14A +:1094400018A931A8FFF748FF0446002862D1034657 +:10945000024618A931A8FFF782FB0446002859D11B +:1094600041F22E438DF816001A9F4FF01009ADF807 +:1094700014300823DDF864C08DF81730319B339722 +:10948000DA691B6A089209934FF00113314A0A9373 +:109490000BAB106851686A46CDF8C8C0CDF8109083 +:1094A000CDF8009003C334230DA931A815932023D0 +:1094B000CDE906C7CDE916C705AF0193CDE9027323 +:1094C0000123FFF74CFB4B4620B110F1340F02D0C3 +:1094D00004461FE00124009320236A460DA903934C +:1094E00031A8CDE901370123FFF739FB20B110F195 +:1094F000340FEDD1002CEBD0002201230DA931A8AF +:10950000CDE900236A46FEF785FB044610B9319B7E +:109510001B6A3F9331A8FEF732F86CB12046FDF785 +:10952000F8FC044600287FF419AF3368294630461A +:109530005B6A9847044611E72B682846DB68984722 +:10954000EFE700BFA76E0008CB6E0008EF6E0008C3 +:109550000B6F0008909B01082DE9F043074695B07A +:109560000E469046994601F124044046316AFDF7C3 +:10957000FDFC3B680844DB69984218D8043943462F +:10958000002243F8041B0991CDE90A230C23CDE9FD +:109590000C3198F807303146CDE90E29109309AA0D +:1095A00002233846FFF7DBFA15B0BDE8F083002947 +:1095B00037DB354609AC0FCD0FC40FCD0FC495E88E +:1095C000070084E8070031463846FFF785FE00288B +:1095D000EAD1129B424631467362139BB362336AEF +:1095E000043B42F8043B03920C22CDE90130CDE963 +:1095F000042398F8073001AACDE9060908933846F4 +:109600000223FFF7ACFA0028CED1119B024609A92C +:1096100043F00043119373681293B36813930346A6 +:10962000BFE7224631463846FEF7F4FA00289CD0C0 +:10963000BAE7F0B500F1A40605469FB00C463046E7 +:1096400005F1140704F00AFE95F854300394002B3A +:1096500043D003AB04AA08A93846FFF7D9FC831C02 +:10966000044649D12F2103980FF0EEFC00283AD18F +:109670006B6913A938461B6AEB64FFF72DFE04469D +:10968000002830D1119B024613A91C93129B1D93F5 +:1096900003463846FFF763FA044620BB40F6220330 +:1096A0008DF81600ADF81430039B184601930EF0A8 +:1096B0007DFF1499159A8DF8170038460691079288 +:1096C000019BCDE9111204AA08A9FFF745FF044642 +:1096D00048B96B691B6AEB6405E03846FFF7AEF9E1 +:1096E00004460028B5D0304605F018FE20461FB0CD +:1096F000BDE8F040FDF70DBC002808BF6FF0100476 +:10970000F1E72DE9F04300F1A4058046B3B00F4620 +:109710002846144604F0A2FD98F8543008F11406C7 +:10972000CDE90274002B4DD0029B05AA11A9304649 +:10973000049304ABFFF76CFC0446002848D19DF865 +:10974000183005AA11A963F07F038DF8183003467D +:109750003046FFF7C4FB0446002839D10DF1240937 +:1097600003AB1CA930464A46FFF752FC07460028C7 +:1097700037D0821C40F085802F2103980FF064FCC5 +:1097800000287ED10DAC99E80F0084E80F0006AAEE +:109790000EAB07CA83E807009DF8383003F07F035B +:1097A0008DF83830039B184601930EF0FFFEBB1C6A +:1097B0008DF83B00019B2CD122461CA93046FFF7B7 +:1097C000CBFE2BE03046FFF739F904460028ABD03A +:1097D000284605F0A3FD204633B0BDE8F043FDF771 +:1097E00098BB9DF818309DF8282003F07F039A421B +:1097F00049D1222AC6D10BAA27A93046FEF70AFA78 +:1098000004460028E4D12F9B142BBBD06FF0260414 +:10981000DEE722461CA93046FFF761FB044600281C +:10982000D6D1012305AA11A9304688F8553002ABDC +:10983000FFF7EEFB04460028CAD188F855008146A0 +:1098400005AA11A93046FFF7D6FA04460028BFD171 +:109850000237BDD09DF82830222BB9D11CAA28A9E7 +:109860003046FEF78FFF041EB2DB309B4A461CA930 +:1098700030462593319B26934B46FFF770F90446FB +:10988000A6E73C46A4E76FF01404A1E7024600F106 +:109890000B01002012F8013B03EBC0138A4203EBDB +:1098A000500303F0FF00F5D1704738B5836B0546D0 +:1098B0000C468B420FD0FDF71DFD58B922460123FF +:1098C000E96B6878FDF728FC00281CBF4FF0FF34D7 +:1098D0000120AC6338BD0020FCE70129F8B504463F +:1098E0000E4664D9036A994261D20378022B30D0C4 +:1098F000032B45D0012B5AD101EB51058389C16A55 +:10990000B5FBF3F31944FFF7D0FF10B14FF0FF3070 +:10991000F8BDA1896F1C2046B5FBF1F301FB13557F +:10992000E36BB7FBF1F15D5DE36A1944FFF7BDFF3F +:109930000028EBD1A289B7FBF2F302FB1373E26BB1 +:10994000D05CF30745EA00204CBF0009C0F30B00D0 +:10995000DEE783895B08B1FBF3F3C16A1944FFF7C3 +:10996000A4FF0028D2D1A2897600B6FBF2F302FB55 +:109970001366E36B9A19985D527840EA0220C7E7B4 +:1099800083899B08B1FBF3F3C16A1944FFF78DFF8C +:109990000028BBD1A189B600B6FBF1F001FB10662F +:1099A000E06B3044FDF7D0FC20F07040B0E70120C0 +:1099B000AEE72DE9F04F1E46036885B00C46DB6F1D +:1099C00082469146984703A92046FDF757FC054675 +:1099D0000746002840F0A480657C0DBB237C13F073 +:1099E0000103009300F09E80E3682F4662699B1A92 +:1099F0009E4228BF1E469EB1039862698389B2FBCE +:109A0000F3F103FB1123002B6AD14389013B0B4087 +:109A100001931FD192B9A068012814D8022565745A +:109A2000DAF800305046D3F880309847002D7CD0CB +:109A3000284605B0BDE8F04FFDF7A4BBA16920683A +:109A4000FFF74BFFE8E7431C03D10123009D63743C +:109A5000E6E7A061DDF80CB0A1695846FDF73FFCD0 +:109A60000028DBD0019B03EB0008BBF80C309E42C2 +:109A700034D30199BBF80A209BF80100B6FBF3F33D +:109A800019449142494684BF019BD31A424601932F +:109A9000FDF742FB019B0028D7D1DDF80CB09BF805 +:109AA00003207AB1DBF83800A0EB0800834209D923 +:109AB000BBF80C20DBF83C1000FB029001930DF08A +:109AC00057FB019BBBF80C8003FB08F86369A6EB0E +:109AD00008064744C144434463618CE7C4F81C80D2 +:109AE000039862698389E169B2FBF3F803FB1828E4 +:109AF000A3EB0803B34228BF33469846FFF7D5FED1 +:109B00000028A2D1039A60699189B0FBF1F301FBAF +:109B10001303D16B4846424619440DF029FBD5E7A3 +:109B200000277DE72F4607257AE7384605B0BDE8D0 +:109B3000F08FB1F5001FF8B504460D4601D30220A1 +:109B4000F8BDCA06FBD1826806680161DAB93378CC +:109B5000022B01D9336BABB93389B3EB551FEED967 +:109B6000336BA361A3696261002BE8D0B289002046 +:109B7000B5FBF2F10B4402FB1151F56BA3612944D3 +:109B8000E161DDE71A467389B7895F43BD4211463B +:109B90000CD32068FFF7A1FE431C02460BD001281E +:109BA000CDD9336A8342CAD9ED1BEFE73046FDF7C2 +:109BB00096FBA061D6E70120C2E7F7B501A90546EB +:109BC000FDF75CFB044660BB2C7C14F0400428D0FD +:109BD000FDF7E4FE296A07460198FFF766FE044692 +:109BE000F8B96E6AF37A314643F02003F372AA683B +:109BF0002868FDF729FBE96806F11C00FDF79CFBCE +:109C0000394606F11600FDF797FB01230198B4745D +:109C1000F474C370FDF778FE2B7C044623F04003F8 +:109C20002B74204603B0F0BD38B503680D460446DA +:109C3000DB6F98472846FFF7C0FF2368054620469C +:109C4000D3F8803098472846BDE83840FDF79ABAE7 +:109C5000036873B50D46DB6F064698472846FFF745 +:109C6000ACFF044630B901A92846FDF707FB0446BE +:109C700000B9286033683046D3F88030984715B172 +:109C800028460DF01DFA204602B0BDE87040FDF7F1 +:109C900079BA000038B500230446C3704FF0FF3393 +:109CA0008363FFF702FE002851D1E46B237894F818 +:109CB000FF5194F8FE01EB2B40EA052503D0183341 +:109CC000DBB2012B3CD84AF655239D4207D108222E +:109CD000214904F152000FF061F9002836D0227BAF +:109CE000E37A43EA0223A3F50072B2F5606F27D846 +:109CF000607B28B3591E421E0B40024013431FD104 +:109D0000E27BA37B53EA02231AD0237C013B012B85 +:109D100016D8A27C637C53EA022311D0227DE37C17 +:109D200043EA02237F2B06D804F12000FDF70CFB49 +:109D3000B0F5803F04D3E27DA37D53EA022308D12E +:109D40004AF6552085420CBF0220032038BD04206E +:109D5000FCE70020FAE700BFB59B01082DE9F04FB2 +:109D6000002687B00D4617460E60FDF79BFA0028C7 +:109D7000C0F25481B24B53F82040002C00F05081C7 +:109D80002C602378BBB96070C0B2AE4D55F820008E +:109D900003689B68984710F00106C3B240F0428107 +:109DA00017F0FE0F02D05B0700F13E81607855F896 +:109DB000203023B90126304607B0BDE8F08FFDF70B +:109DC0004DF9A0F50072A081B2F5606FF2D8421E85 +:109DD0000242EFD1E36B002B00F0F580002120461A +:109DE000FFF758FF022840F00081E56B02AF05F550 +:109DF000E371B84605F206250846FDF7A5FA1031CD +:109E000048F8040B8D42F7D1002557F8041B0029B0 +:109E100000F0E1802046FFF73DFF012800F2DC80E2 +:109E2000E56BB4F80C902A7BEB7A43EA0223994560 +:109E300040F0D980E87DA97D51EA002104D105F1E7 +:109E40002400FDF781FA0146616295F810A0D4F86C +:109E500038B00AF1FF3384F802A0012B00F2C3806E +:109E60006B7B6381002B00F0BE805A1E1A4240F0CB +:109E7000BA80AA7C95F8118048EA02280FFA88F285 +:109E8000A4F8088000924FEA5912B8FBF2F702FBDF +:109E9000178292B2002A40F0A6802A7DE87C50EA20 +:109EA000022005D105F120000193FDF74DFA019B39 +:109EB00095F80FC0AA7B52EA0C2200F0948001FBB7 +:109EC0000AFC174407EB0C0E7045C0F08C80A0EB29 +:109ED0000E009842B0FBF3F7C0F085805A4B9F42CA +:109EE00000F281804FF6F5739F4240F29F804FF061 +:109EF000030A02375A440BEB0E03BAF1030F276231 +:109F0000C4F828B0E262636376D195F82B2095F807 +:109F10002A3043EA0223009A1A4313B2002B62D17B +:109F2000BF0005F12C00FDF70FFA206309F1FF33A4 +:109F30001F44B7FBF9F9894555D84FF0FF33BAF103 +:109F4000030FC4E905334FF08003237130D195F836 +:109F5000312095F8303043EA0223012B28D10BF150 +:109F600001012046FFF7A1FC10BBE16B207191F8C5 +:109F7000FF2191F8FE3143EA02234AF6552293422B +:109F800016D10846FDF7E0F9304B984210D101F5A3 +:109F9000F270FDF7D9F92E4B984209D101F5F47012 +:109FA000FDF7D2F9A06101F5F670FDF7CDF960611A +:109FB000284A84F800A0138801339BB21380E38001 +:109FC0000023E361F7E60DF073F8E06300287FF407 +:109FD00005AF1126EFE603200135042D7FF415AF00 +:109FE00004283FF4E7AE0D26E5E604283FF4E2AE90 +:109FF00001287FF615AFF6E7B8F1000FF3D0BAF1FC +:10A00000020F4FEA470362441ABFDB1907F001074A +:10A010001F46226318BF07EB530787E70B26CAE6E4 +:10A020000C26C8E60326C6E60A26C4E640F6F57AFC +:10A0300057458CBF4FF0020A4FF0010A59E700BFA5 +:10A04000601A0024981A0024F5FFFF0F5252614154 +:10A05000727241615C1A00242DE9F74F1546804663 +:10A060002822002128460DF091F8D8F8003040460B +:10A07000DB6F984708F15403002201A9684600935A +:10A08000FFF76CFE06460446002871D1DDF8049007 +:10A09000D9F820A0D9F81870AAF102039F421CD960 +:10A0A00099F80060012E36D14FF0020A074651465A +:10A0B0004846FFF712FC431C5AD0012857D000B97C +:10A0C0000137019B0AF1010A1B6A9A45EFD3019BF4 +:10A0D0001A799F6142F001021A71B9F80C3000241C +:10A0E000D9F820204046C5E90033023AB9F80A30D1 +:10A0F0005A435F43FF236B62D8F80030C5E902245E +:10A10000D3F88030C5E90474C5E906749847204641 +:10A1100003B0BDE8F08FD9F82C1007463CB9019880 +:10A1200001F1010BFFF7C1FB064608BB5946019E32 +:10A130003278F36B022A03EB04000FD11B5D02346B +:10A14000427853EA022308BF0137B389BAF1010A02 +:10A15000B4FBF3F203FB1244E0D1B8E7FDF7F4F8E7 +:10A1600030F0704304F1040408BF0137EDE7022624 +:10A17000D8F800304046D3F880309847304603B0D6 +:10A18000BDE8F04FFCF7FEBF7FB5CDE9001003A896 +:10A1900014460391FDF786F8051E19DB0D4E56F89F +:10A1A000252022B10023D06B13700CF089FF019B96 +:10A1B00013B100221A70DA6346F825302CB1002260 +:10A1C00001A96846FFF7CAFD0446204604B070BDE9 +:10A1D0000B24FAE7601A0024F8B503680446DB6F25 +:10A1E0009847A36D013308D123686FF01505204609 +:10A1F000D3F8803098472846F8BD002204F1540176 +:10A20000104F1046FFF7C0FFA36D064657F8230016 +:10A210000368DB6898472368054620B1D3F880308F +:10A2200020469847E7E7A26DD3F8803047F8220030 +:10A230004FF0FF322046A26598473046BDE8F8400F +:10A24000FCF7A0BF981A00240A4B03F108029833C8 +:10A2500010B5026004464360FFF7BEFF064B204680 +:10A2600003F108023433226040F8043F05F002FE97 +:10A27000204610BDB89D0108589E0108A0F10400B9 +:10A28000FFF7E2BF10B50446FFF7DEFF20460CF0F3 +:10A2900017FF204610BDA0F10400FFF7F3BF000038 +:10A2A000036873B50446DB6F01920D469847A36DB2 +:10A2B000019A013308D023682046D3F880309847AC +:10A2C0006FF0150002B070BD16480023064650F826 +:10A2D000041BE1B946F8235004F11400A3653033A0 +:10A2E00084F8561004F1540184F854303A2384F869 +:10A2F0005530FFF749FF236805462046D3F88030E4 +:10A300009847284602B0BDE87040FCF73BBF0133D8 +:10A31000042BDCD123682046D3F8803098476FF0B7 +:10A320000B00CFE7981A00242DE9F04F03688B4605 +:10A330001746DB6F2DED028BA7B003909847039B68 +:10A340009B6D5C1C0FD0BBF1000F02D1A34A52F8E9 +:10A3500023B0039B03981B689B6A9847824610B101 +:10A36000039B1B686EE0BBF1000F0DD1039B6FF0E8 +:10A37000120A03981B68D3F880309847504627B0DC +:10A38000BDEC028BBDE8F08F954B002110A80F9318 +:10A39000F7F75EFE934B4022002114A80F939033F1 +:10A3A00010930CF0F3FE4FF0FF330FA82593FDF749 +:10A3B000A1FADBF8003058469B689847824610B1F6 +:10A3C000F7F710FF35E0DBF800305846DB6A9847B6 +:10A3D00003185846049341EB01030593DBF8003062 +:10A3E000DDE90412CDE900120022D9690023884773 +:10A3F000DBF80030824618B1DB6858469847DFE743 +:10A400005B6B58469847002847DADBF8003058461F +:10A410009B6A9847064689460CF04AFE8046B0B9CA +:10A42000DBF800306FF00B0A5846DB689847F7F707 +:10A43000D9FE0FA8FFF708FF039B1B68BAF1000FB6 +:10A4400000F08E82D3F880300398984796E7002476 +:10A4500000253246FF210CF099FEDDE904239D42E0 +:10A4600008BF944216D2DBF80030224641465846D7 +:10A47000CDE90069D3F818A02B46D047824628B111 +:10A4800040460CF01DFEDBF80030B5E7A41945EBA3 +:10A490000905E2E740460CF013FEDBF800305846B1 +:10A4A0001C6A9B6B984700230022CDE900015846A7 +:10A4B000A047DBF8003082465846DB68BAF1000F4F +:10A4C0009CD19847824600287FF47AAF02465946CD +:10A4D0000FA8FFF7E5FE824600287FF471AF24AB9A +:10A4E0000CA80C93FCF7DEFE0028C0F237823E4B2E +:10A4F00053F820300BB183F800A0C6B2374D55F8A1 +:10A50000260003689B689847C3B2C00700F1248205 +:10A51000590700F11F8255F826300BB9012432E0AB +:10A520003046FCF79BFDA0F5007380469BB2B3F567 +:10A53000606FF3D8421E0240F0D1B7F1807F2CD873 +:10A540007B1E3B4218BF00274FF48053B3FBF8F348 +:10A55000099303FB08F3184608EE103A0CF0A8FD27 +:10A560000446002800F0DF8155F82630002B00F06B +:10A570002D813046FCF7EEFD7F2881460FD820461E +:10A580000E240CF09DFD0FA8FFF726FEF7F72AFE1C +:10A590002046FCF7F7FD82464BE71746D4E7B7FBAA +:10A5A000F8F7802F28BF8027FDF7F8F94FEA193315 +:10A5B00008F1FF3C4FEA594E4FF6F5710A900B93A4 +:10A5C000002F48D1094B012533F8020B002843D056 +:10A5D0000B9A824240D36D00F6E700BF981A002420 +:10A5E0009C9E0108C09D0108601A0024FEA101087C +:10A5F0006D082F464FF0030AB9FBF5F3981CA3F53D +:10A600007F430CEB8000F63BB0FBF8F00790202076 +:10A61000049000200690C5488342B0D8049B079A56 +:10A620009818069A00EB051313444B45A7D8069BD0 +:10A63000BAF1030FA9EB0303A3EB0003B3FBF5F39C +:10A64000089327D18B4250D8002F98D1012DCFD815 +:10A6500095E73D46CEE73D4640F6F572B9FBF5F38A +:10A66000934293BF03EB430302334FF0020A4FF0D0 +:10A67000010A97BF01335B005B0803336344B3FBFC +:10A68000F8F307934FF48043B3FBF8F306930123E9 +:10A690000493C3E7BAF1020F1FD1089B8B420ED976 +:10A6A000002FD6D16D00402D15D9A14B012533F8CF +:10A6B000020B00289ED086459CD36D00F7E7089BCF +:10A6C00040F6F572934210D8002F7FF458AF6D001A +:10A6D000802D3FF654AF2F4672E740F6F573089A87 +:10A6E0009A423FF64CAF4FF0010A002709F1FF33C1 +:10A6F0000DA930460E930D97FCF7C0FC4246394633 +:10A7000020460CF043FD8B4A2346BAF1030F5168F3 +:10A71000106803C31189927A19809A704FEA28232E +:10A7200084F80B802373049B6573A3734FF00103BC +:10A73000E773237414BF02233B46B9F5803F677467 +:10A74000A37446D24FEA292384F8139023750A9BF9 +:10A75000002104F11C004B449946F8236375764BA5 +:10A76000A361FCF7E9FDBAF1030F494637D104F1C3 +:10A770004300FCF7E1FD079904F12400FCF7DCFD40 +:10A7800002216E4B04F14702C4E90B13802384F8C5 +:10A790004030292384F84230694B03F1100153F80B +:10A7A000040B8B4242F8040BF9D119884AF655295B +:10A7B0009B78304611802146937001230022A4F833 +:10A7C000FE91FCF77FFC074608B320460CF078FCAE +:10A7D000A4E6494604F12000FCF7AEFDB7E704F11A +:10A7E0002700FCF7A9FD079B04F12B02E3828023DD +:10A7F00084F82430292384F82630524B03F11001C9 +:10A8000053F8040B8B4242F8040BF9D1CDE7BAF1AF +:10A81000030F2AD10123062221463046FCF752FCC1 +:10A820004246394620460CF0B1FC474B04F5F47023 +:10A83000236003F1FF5303F500532033C4F8E431E0 +:10A84000089B591EFCF778FD022307222146C4F815 +:10A85000EC3130460123A4F8FE91FCF733FC0123D0 +:10A86000214630461A46FCF72DFC18EE102A00212E +:10A8700020460CF08BFCBAF1030F4AD14FF0FF33A6 +:10A880006FF00702C4E900236FF07043A360099BD7 +:10A890002146079A3046934228BF1346049A1F4622 +:10A8A000FCF710FC014600288FD1424620460CF0F0 +:10A8B0006DFC049B3B440493079BDB1B0793E6D191 +:10A8C000069BBAF1030F08BF2B460693099B21464E +:10A8D000069A3046934228BF1346049A1D46FCF759 +:10A8E000F1FB00287FF471AF049B2B440493069B7B +:10A8F0005B1B0693EAD1154B204653F82630002BFC +:10A900003FF464AF0CF0DCFB0FA8FFF765FC824658 +:10A9100056E5BAF1010F0E49204618BF6FF0070146 +:10A92000FCF70AFDB3E711242DE600BFFFFFFE0F81 +:10A930000CA201089E9B01083F00FF0001000600D9 +:10A94000AA9B0108BE9B010852526141981A00243B +:10A95000F8FFFF000A2416E6032414E60B2412E68F +:10A960005B6A5946039898478246F9E401292DE924 +:10A97000F84304460E46174640F28380036A8B4232 +:10A980007FD90378022B45D0032B5AD0012B78D1E5 +:10A9900001EB51098389C16AB9FBF3F31944FEF74E +:10A9A00084FF054660BBA38916F00106E06B09F140 +:10A9B0000108B9FBF3F203FB12920FBFFBB2835CF9 +:10A9C00003F00F013B011CBF03F0F0030B43835462 +:10A9D0000123E16A2046E370A389B8FBF3F319442D +:10A9E000FEF763FF054658B9A389E16BB8FBF3F0A6 +:10A9F00003FB10803EB1C7F307170F540123E37028 +:10AA00002846BDE8F8830B5CC7F3032723F00F0348 +:10AA10001F43F2E783895B08B1FBF3F3C16A194472 +:10AA2000FEF743FF05460028EAD1A2897600B6FB6F +:10AA3000F2F302FB1366E36B9F5598193F124770C0 +:10AA4000DCE783899B08B1FBF3F3C16A1944FEF785 +:10AA50002CFF05460028D3D1A389B60027F0704704 +:10AA6000B6FBF3F103FB1161E66B0E443046FCF7D5 +:10AA70006BFC00F0704047EA00013046FCF75CFCDC +:10AA8000BCE70225BCE72DE9F041804605680F468A +:10AA900049B96E69C6B12B6AB34298BF0126AB694A +:10AAA000A3B9002406E02846FEF717FF0128044654 +:10AAB00003D801242046BDE8F081421C51D02B6A06 +:10AAC0008342F7D83E46EAE70126E8E7BE4215D1C1 +:10AAD0002B6A741CD8F80000A34298BF02242146B8 +:10AAE000FEF7FBFE0128E4D0431C3AD0D8B16B69D5 +:10AAF000012B03D92A6A934238BF1E4634460134DB +:10AB00002B6AA34202D8012ECBD902242146D8F8C1 +:10AB10000000FEF7E2FE40B10128CAD0013020D08B +:10AB2000B442ECD1BDE7002CE8D04FF0FF32214613 +:10AB30002846FFF71BFF90B957B92A6AAB69023A5A +:10AB40006C61934210D92B7943F001032B71B1E76B +:10AB5000224639462846FFF709FF0028EDD0012894 +:10AB6000A7D14FF0FF34A5E7013BAB61EBE72DE93F +:10AB7000F04F1E46036885B00D46DB6F8246914656 +:10AB8000984703A92846FCF779FB044607460028A6 +:10AB900040F0D7806C7C5CBB2B7C9A0740F1D38063 +:10ABA0006B690027DE42009728BFDE43002E00F0CD +:10ABB000BC8003986A698389B2FBF3F103FB11231C +:10ABC000002B40F08E80B0F80A8008F1FF3818EAB8 +:10ABD000010826D1DAB9A86830B901462846FFF73E +:10ABE00052FF002800F0A180012812D102246C74C9 +:10ABF000DAF800305046D3F880309847002C00F047 +:10AC0000A580204605B0BDE8F04FFCF7BBBAA969A6 +:10AC1000E4E7431C01D10124E9E7AB68A86103B96B +:10AC2000A8600398EB69826B9A4247D0DDF80CB0BC +:10AC3000A9695846FCF753FB0028D7D0BBF80C3065 +:10AC400008EB00029E423ED3BBF80A10B6FBF3F3BA +:10AC500008EB030088429BF8010088BFA1EB0803C2 +:10AC60004946CDE90023FCF72DFA8046DDE90023B3 +:10AC70000028D0D10398816B891A8B420AD9828926 +:10AC8000C06B02FB019100930CF072FA039A009BD7 +:10AC900082F80380039AB2F80C8003FB08F80123C2 +:10ACA00000936B69A6EB0806EA6847444344C14435 +:10ACB0006B619A422CBFEA60EB6077E7FCF71AFB06 +:10ACC0000028B3D0A7E76969EB68994208D35846D2 +:10ACD0000192FCF70FFB019A00289CD1039B9A6319 +:10ACE000EA6103986B69B0F80C80E969B3FBF8F28C +:10ACF00008FB1232A8EB0208B04528BFB046FEF7A9 +:10AD0000D4FD002887D1039A69699089B1FBF0F3DB +:10AD100000FB1313D06B4946424618440CF028FA46 +:10AD2000039B4FF00102DA70BBE72B7C43F040033A +:10AD30002B74009B002B3FF45BAF2846FEF73DFFD2 +:10AD400056E7002754E72746072451E7384605B061 +:10AD5000BDE8F08F2DE9F3410D4601A90446FCF74B +:10AD60008DFA0646002863D1667C002E60D1E36828 +:10AD7000AB4204D2227C12F0020F08BF1D46002213 +:10AD800063696261B5B90020E2686369934281BF7B +:10AD9000227CE36042F040022274019A9189B3FB65 +:10ADA000F1F201FB1233002B42D0E369834218BF5A +:10ADB000E0613DE0019A518997894F4373B3013BAC +:10ADC0006A1EB3FBF7F1B2FBF7F28A4226D37A424E +:10ADD000A1691340ED1A63610029D4D0BD426369B3 +:10ADE0000CD93B44A5EB07086361237C9A072AD55D +:10ADF0002046FFF748FE054648BB014663690198B7 +:10AE00002B4463618389B5FBF3F203FB1255002DDC +:10AE1000B9D0FCF764FA48B11044B5E7A16881B92C +:10AE20002046FFF730FE0128014605D10226667450 +:10AE3000304602B0BDE8F081481C01D10126F6E79A +:10AE4000A160A161C8E72068FEF747FD05466B1CBD +:10AE5000F4D0012DEAD9019B1B6AAB42E6D9294601 +:10AE6000A5614546BAE7F8B51F46036806460D4694 +:10AE7000DB6F14469847022F12D1EB681C44214621 +:10AE80002846FFF767FF336804463046D3F8803022 +:10AE90006D69984744B12046BDE8F840FCF772B9A7 +:10AEA000012FECD16B69E9E72846F8BD2DE9F041A7 +:10AEB00007690446884606682037B7F5001F24BF97 +:10AEC00000238361836983B1B289B7FBF2F002FB8F +:10AED0001072002A38D101336169A36139B933890D +:10AEE000B3EB571F30D80023A36104200AE0738915 +:10AEF000013B034228D13046FEF7EFFC012805460E +:10AF000002D80220BDE8F081421C01D10120F9E7FE +:10AF1000336A834212D8B8F1000FE4D06169204649 +:10AF2000FFF7B1FD0546D0B10128EAD0431CEDD0B2 +:10AF300001463046FCF7B1FB0028E7D129463046F0 +:10AF40006561FCF7CCF9A061B28900202761B7FBED +:10AF5000F2F302FB1373F76B1F44E761D2E707209C +:10AF6000D0E72DE9F3410F4601A90546FCF786F924 +:10AF7000044628B947B901462846FEF7DAFD0446DB +:10AF8000204602B0BDE8F0814FF400700CF090F85C +:10AF90000646C0B1019B18612846F7F79BF810F0F0 +:10AFA000FB0804460BD139462846FCF7D5F9414643 +:10AFB0002846FFF77BFF042814BF044600243046D0 +:10AFC0000CF07EF8DCE71124DAE7036870B50D4673 +:10AFD0000446DB6F984728460021FFF7C2FF23682D +:10AFE0002046D3F88030BDE8704018470368F0B5BC +:10AFF00016460F69C7B0DB6F05460C469847B74247 +:10B000000ADD00212046FFF7ACFF2B682846D3F865 +:10B010008030984747B0F0BDB742F6DA694620461F +:10B02000FFF79FFF27690028EFD19DF81630002B0E +:10B03000F2D1EAE7036870B50E46C6B00546DB6F8D +:10B040001446984730466946FFF78BFF2B68064643 +:10B050002846D3F8803098472EB1304646B0BDE838 +:10B060007040FCF78FB89DF8160088B19DF8083045 +:10B0700013F0100F14BF0323052384F80031237845 +:10B080002BB9FF220DF1160120460DF0FBFF012028 +:10B0900046B070BDC16A4B1C2DE9F04104460568FD +:10B0A000066918D1E5274FF00108A1692846FEF787 +:10B0B000FCFB60B9E3691F7085F803802369B34224 +:10B0C0000DD201462046FFF7F1FE0028EDD00428FE +:10B0D00008BF022003E0FEF72CFD0028E2D0BDE807 +:10B0E000F08100002DE9F04F002187B00446D0F830 +:10B0F00000B0FEF71EFD0746002840F095804FF097 +:10B10000FF094FF0FF33C846E3620293A169584636 +:10B11000FEF7CBFB0746002840F08680E5692E78D5 +:10B12000002E00F08580EA7AE52E02F03F03A3713D +:10B1300003D0120704D50F2B04D0029BE36256E024 +:10B140000F2B5CD194F82B30580646D471064CD5A1 +:10B15000236906F0BF0695F80D90E3626B7B4B45C3 +:10B1600045D1EA7EAB7E53EA022340D12A78DBF850 +:10B17000103002F03F07DFF8C0A001937B1E0D27BF +:10B180005F4301231AF8011B681815F80180407805 +:10B1900048EA002873B3FF2F059228D84046FBF7F2 +:10B1A000FDFF019B791C049033F817000391FBF716 +:10B1B000F5FF049B98421AD103994346059A0F461E +:10B1C0001C495145DED1520604D51BB1019B33F811 +:10B1D000173063B9013E5FFA86F800212046FFF779 +:10B1E00065FE0746002891D01EE0B045B6D04FF06E +:10B1F000FF08F2E74FF6FF718845E1D0F7E7B8F1B5 +:10B20000000F04D12846FEF741FB48450CD094F8C6 +:10B210002B7017F0010790D10B2204F12001284672 +:10B220000DF0BCFE002888D1384607B0BDE8F08F8D +:10B230000427F9E71D990108109901082DE9F04F3D +:10B240000B7885B0064689462F2BD0F800B001D088 +:10B250005C2B09D14A461378914601322F2BFAD044 +:10B260005C2BF8D0002301E0DBF81C30B36099F8C8 +:10B2700000301F2B00F2308180230021304686F8F9 +:10B280002B3005B0BDE8F04FFEF753BC49460B78B4 +:10B29000894601312F2BFAD05C2BF8D01F2B8CBFA5 +:10B2A00000240424012F2FD113882E2B31D1002309 +:10B2B00022F8173006F120029F428CBF2E21202158 +:10B2C00001330B2B02F8011BF6D144F02004304669 +:10B2D00086F82B40FFF706FF96F82B30002800F089 +:10B2E000E68004280BD1990603F0040240F1DB80CC +:10B2F000002A00F0F1808023002086F82B3005B072 +:10B30000BDE8F08F0424CDE7022F02D153882E2B05 +:10B31000CAD0911E3FB131F81730202B01D02E2B0F +:10B3200001D1013FF6E7002322F81730002F00F08B +:10B33000FD8032F81300194601332028F9D009B9ED +:10B340002E2801D144F00304931E33F817002E2851 +:10B3500001D0013FF9D14FF020334FF0000A736262 +:10B36000D0463362C6F827300823481C32F8115003 +:10B370000090B5B1202D03D02E2D05D1B84208D0B4 +:10B3800044F003040099F0E79A4505D20099B942C8 +:10B390003BD10B2B30D101E00B2B27D144F0030420 +:10B3A0000B2396F82020E52A04BF052286F82020EA +:10B3B000082B04BF4FEA88085FFA88F808F00C03EE +:10B3C0000C2B03D008F00303032B01D144F002043B +:10B3D000A0073FF57CAF18F0010F18BF44F0100430 +:10B3E00018F0040F18BF44F0080470E70099B94240 +:10B3F00002D044F00304D4D84FEA88080B234FF05E +:10B40000080A00975FFA88F8BCE77F2D14D944F04A +:10B4100002012846CDE902230191FBF703FF10F05A +:10B42000800F0546039BDDE9011216D000F07F0571 +:10B430004048455D0C4645B329463F48CDE90123C8 +:10B440000DF002FEDDE90123F8B9A5F1410189B251 +:10B4500019291ED848F0020810E0FF28EAD9581E22 +:10B46000824503D344F003049A468BE706EB0A00B7 +:10B470002C120AF1010A80F820400C4606EB0A0162 +:10B480000AF1010A81F820507CE744F003045F25AB +:10B49000F4E7A5F1610189B219299EBF203D48F06A +:10B4A0000108ADB2EAE7002A08BF052027E75A07DE +:10B4B0003FF525AFB379DB063AD5BBF80C103269FE +:10B4C0009BF80000B2FBF1F301FB1323DBF83C1007 +:10B4D0001944FBF7C4FEB060336800271A6919F8F5 +:10B4E000013B9CB2002B3FF40DAF7F2C06D903F13A +:10B4F00000431249803B31F81340BCB11F2C7FF64A +:10B5000001AF2F2C3FF4C2AE5C2C3FF4BFAE7F2CBA +:10B5100006D821460A4800920DF096FD009A28B9F7 +:10B52000FF2F03D022F817400137D8E70620E6E6C0 +:10B530000520E4E6F69B0108DB9B0108769C0108E8 +:10B54000D29B01082DE9F04F90F82BB089B004464A +:10B550001BF0A00540F0928007683B6933F8152086 +:10B560000AB10135FAE704F120060DF1140A1BF0C7 +:10B57000010F96E807008AE8070000F08680402364 +:10B580004FF0010884F82B30B4463B69B8F1050F41 +:10B590009AE80700ACE803002CF8022B4FEA1242AD +:10B5A0008CF8002015D9991E424631F8020F88B157 +:10B5B0004FF0100C00F0010E40080EEB4202D303D6 +:10B5C00044BF82F4883282F02102BCF1010CF1D137 +:10B5D000EBE742460DF1130C072102F00F0E9146E6 +:10B5E00012090EF13000392888BF0EF137000139F9 +:10B5F0000CF8010902D0B9F10F0FEED808AB7E208C +:10B600005A1802F8140C04F11F00002284469142DB +:10B6100006D01CF801EF02F10109BEF1200F20D184 +:10B62000072902F1010297BF08AB4FF0200C03EB92 +:10B63000010C013198BF1CF814CC072A00F802C095 +:10B64000EED92046FFF74EFD8146D0B908F101083A +:10B65000B8F1640F98D14FF00709484609B0BDE82A +:10B66000F08F4A46D3E7804601212046FFF71EFCB3 +:10B670008146F8B1B9F1040FEDD0EEE74FF00609BD +:10B68000EBE70428E9D184F82BB01BF0020F4FF050 +:10B6900000012046D4F800A01BBF0C350D23012566 +:10B6A000B5FBF3F518BF0135FEF743FA81460028D4 +:10B6B000E0D18046A1695046FEF7F7F881460028A0 +:10B6C000D8D1E3691B78E52B01D0002BCBD108F151 +:10B6D00001084545C8D1013D55D021692046A1EB5F +:10B6E0004511FEF726FA81460028B6D14FF6FF78BD +:10B6F0003046FEF7CBF80190A1693846FEF7D5F841 +:10B7000081460028A9D1E369E9B2019A4FF00D0CF6 +:10B71000D7F810E05A734FF00F02DFF8A8A0DA72E2 +:10B720004A1E18730CFB02F284469876D876404580 +:10B730001AF8019B0CF1010C18BF3EF8120003EB44 +:10B74000090B18BF013203F809004FEA202900282D +:10B7500008BF4046BCF10D0F8BF80190E7D1404582 +:10B7600002D03EF812200AB941F0400119700123BD +:10B7700000212046FB70FFF799FB814600287FF4EB +:10B780006CAF013DB8D1A1693846FEF78EF881460D +:10B7900000287FF462AF20224946E0690BF0F6FCF6 +:10B7A000E36903CE18605960B27831889A721981C2 +:10B7B00094F82B30E26903F0180313730123FB7034 +:10B7C0004BE700BF109901082DE9F3410C460646EE +:10B7D00011460568012C46D92B6AA34243D94AB9C0 +:10B7E000A046214630682746FEF777F8044658B948 +:10B7F000002006E04FF0FF322846FFF7B7F8002898 +:10B80000EED002B0BDE8F08101282CD0431C2CD032 +:10B81000002239462846FFF7A9F80028F1D12A6A04 +:10B82000AB69023A934205D20133AB612B7943F005 +:10B8300001032B717B1CA34211D041462846FBF724 +:10B840004EFD394600902846FBF749FD6B89A0461E +:10B850006946013B184401906878FBF70FFC2B6A9E +:10B86000A342BED8C4E70220CBE70120C9E72DE9F7 +:10B87000FF4103680C4601920646DB6F9847019929 +:10B8800020466769FFF766FA054650B133683046CF +:10B89000D3F880309847284604B0BDE8F041FBF764 +:10B8A00071BC03A92046FBF7E9FC05460028EDD151 +:10B8B000657C002DEAD1237C9A0701D40725E5E7B2 +:10B8C000D4F81480E368984508D320463946FFF73A +:10B8D00041FA044670BB04B0BDE8F081B8F1000F36 +:10B8E00011D12A46A1682046FFF76EFF0546C4F82D +:10B8F00008806369E360237C43F040032374002DD8 +:10B90000E3D06574C2E7A1692068FDF7E6FF431C38 +:10B9100001460BD001280BD0039B1B6A9842E8D24A +:10B92000A2692046FFF750FF0546E2E70125E0E760 +:10B930000225DEE733683046D3F88030984720464A +:10B94000AAE72DE9F043064687B02C20154606F1FC +:10B95000A4080F4602F012FD0446404606F1140901 +:10B9600002F07CFCB36902AA214663604846F36991 +:10B970000195A36001ABFDF74BFB0546A8B99DF807 +:10B980000C30222B1CD104AA21464846FCF742F970 +:10B99000054650B963682361A36863610E23A36100 +:10B9A0001023E360736A74622360404603F0B6FCC0 +:10B9B0004DB93C60284607B0BDE8F043FBF7A9BA93 +:10B9C0006FF01305F1E720460BF07AFBF2E72DE963 +:10B9D000F04F07469B4693B0382007F1A4098846EC +:10B9E000164602F0CBFC0446484602F037FC1BF03A +:10B9F000030C07F1140A00F0C580BCF1010F4FF0F1 +:10BA0000000000F0C180BCF1020F844601D000218B +:10BA100000E003214FEA6B0202964FEAAB0502F405 +:10BA2000807205F400752A430BF480652A434FEABF +:10BA30000B2505F40065154345EA0C0505430D4348 +:10BA400005F00303012B11D102AB03AA07A950464D +:10BA5000FDF7DEFA064600BB9DF81030222B00F001 +:10BA60008A80A9053FD56FF0100609E097F8543099 +:10BA7000002BE9D15046FCF7E1FF06460028E3D051 +:10BA8000484603F04BFC002E78D1C8F80040304601 +:10BA900013B0BDE8F04FFBF73CBA821CF0D1029B1B +:10BAA0002F21184601930DF0CFFA83460028E7D1E5 +:10BAB000EB05E5D5019B40F611028DF81200184602 +:10BAC000ADF810200CF072FD4FF0FF328DF813002E +:10BAD00007A9019B5046CDE9052B03AAFDF73CFDC4 +:10BAE00006460028CCD1089B002268056360099BAC +:10BAF000A261A360039BE360059B2361069BC4E9ED +:10BB0000075263610AD44FF0FF337D69E3626B6BC8 +:10BB1000F3B13A6A62B16FF00B06B1E713B145F4C5 +:10BB20008035E5614FF0FF320023C4E90423EAE7E2 +:10BB30006363E36903F00303012B04D004F12C01D8 +:10BB40002846FBF7F2FC3B6A00263C62236097E73D +:10BB5000E36903F00303012B06D168690BF0A8FA2F +:10BB600060630028EFD1D6E7A8690BF0A1FA606303 +:10BB70000028E3D1CFE76FF0140681E720460BF0F1 +:10BB80009FFA84E7012042E74FF0020C3FE70000F4 +:10BB9000F0B50C468BB0064624B9326004613046DD +:10BBA0000BB0F0BD104601920CF000FD043002F025 +:10BBB000E5FB3A233034054643702F2304700330ED +:10BBC00000F8013C3746019906AC0CF0E7FC084B45 +:10BBD000002247F8045B0593064B029302ABCDE9C4 +:10BBE00003220FCB84E80F0087E80F00D7E700BFE0 +:10BBF000E76F00081D7600082DE9F04106468AB07F +:10BC000030208846019202F0B9FB019A0546B16DD9 +:10BC100005A8FFF7BDFF33683046DB6F9847059BEB +:10BC20000393002D4BD0002204A903A8FEF796F839 +:10BC3000044650BB049C4FF400702C600BF038FAA3 +:10BC4000074600283DD0206128460399FFF7F6FA01 +:10BC50000446A0B995F92B30002B08DBAB79DB0645 +:10BC600029D5049BE9691878FBF7F9FAA860049BC9 +:10BC700000212846DB88AB80FDF75BFF0446384691 +:10BC80000BF01EFA042C18D00CB100232B60336883 +:10BC90003046D3F880309847ACB128460BF010FA04 +:10BCA0002046FBF76FFA044605A8FBF79FF92046EC +:10BCB0000AB0BDE8F0810524E1E70524E5E70924A1 +:10BCC000E5E71124E3E7C8F80050EDE72DE9F04F70 +:10BCD000804697B01C4628208A46019202F04EFB0F +:10BCE000019A0546D8F8581005A8FFF751FFA60796 +:10BCF00056BF04F0010603260136A00505D56105EF +:10BD00004CBF46F0080646F01006D8F8003022076F +:10BD10004046DB6F48BF46F030069847059B0393CB +:10BD2000A5B90924D8F800304046D3F880309847A8 +:10BD300028460BF0C5F92046FBF724FA044605A86F +:10BD4000FBF754F9204617B0BDE8F08F324604A93E +:10BD500003A8FEF703F8002840F0C780049C4FF4C6 +:10BD600000700A940BF0A4F9814608B91124D9E7B0 +:10BD700020610AA80399FFF761FA044620B99DF9EA +:10BD80005330002BB8BF062416F01C0F71D0002CC6 +:10BD90004AD0042C3ED10AA8FFF7D4FB0446002861 +:10BDA00038D146F00806FBF7F9FD014601901198DD +:10BDB0000E30FBF7C1FA119801991630FBF7BCFA67 +:10BDC000049C11992078FBF74AFA202300220746A9 +:10BDD000CB7220461199FBF737FA119B0022012103 +:10BDE0001A775A779A77DA77049BD970002F4AD05E +:10BDF00039460AA8D3F838B0FFF7E6FC044648B93C +:10BE000059460498FDF751FD013F049B04465F61CC +:10BE1000002838D048460BF053F9D8F80030002CF1 +:10BE200065D000232B607DE79DF82E3013F0110FB5 +:10BE300057D13307B7D4049C119FA36B39466F6267 +:10BE40002B622078FBF70BFA0146A86007F11C0073 +:10BE5000FBF77AFAE388B2060746AB804FF000039F +:10BE6000E8602C602E746B74EB616B6110D400245D +:10BE7000D0E7002CCED19DF82E30DF062FD4B407AA +:10BE800001D5D8072DD4310748BF46F04006D2E788 +:10BE90000028ECD06389A48968615C43BC421AD253 +:10BEA00028683F1BFDF719FD0128014615D9431CE1 +:10BEB000F4D10124A961002CACD104988389B7FB8B +:10BEC000F3F203FB1277002FD1D0FBF708FA50B141 +:10BED0001044E8619EE70024ECE70224EAE704242A +:10BEE00098E7072496E7022494E7044699E7D3F8F5 +:10BEF000803040469847CAF8005020E7F0B5D9B0E6 +:10BF0000054617460A46816D01A8FFF741FE2B68DA +:10BF10002846DB6F98474FF48C72002112A80BF073 +:10BF200035F9019B002206A968460093FDF716FF2C +:10BF3000044630B94FF400700BF0BAF8064678B9F1 +:10BF400011242B682846D3F8803098472046FBF709 +:10BF500019F9044601A8FBF749F8204659B0F0BD8D +:10BF6000069B0099186106A8FFF768F9044638B9DE +:10BF70009DF94330002B23DB12A906A8FBF7ECF94F +:10BF800030460BF09DF8002CDBD19DF8502040F29C +:10BF9000FF11129B284612F0100F3B6114BF4FF4A3 +:10BFA00080434FF4004312F0010F40F26D1208BFBE +:10BFB0000A4613437B602B68D3F880309847C9E763 +:10BFC0000624DDE72DE9F04198B005460A46816D6B +:10BFD00007A8FFF7DDFD2B682846DB6F9847079B16 +:10BFE000022202A901A80193FDF7B8FE0446002829 +:10BFF00040F08380029C4FF400700C940BF058F8D2 +:10C000000646002800F0998020610CA80199FFF7EE +:10C0100015F90446002800F08C8004286AD19DF8A8 +:10C020005B1011F0200140F08680029B03A803936F +:10C03000FEF729FD044600286FD0012870D0431C6C +:10C04000D3F1000848EB0308FBF7A8FC0746B8F15A +:10C05000000F68D121460298FBF71FFB002862D130 +:10C06000029B4FF020321021DB6B1A605A60C3F83C +:10C0700007202E22029BDB6B1A70029BDA6BD172B7 +:10C080003946D86B1630FBF757F902982246C16B38 +:10C09000FBF7DAF80298C36B03F12002114653F85C +:10C0A00004CB934241F804CBF9D1C36B2E224FF05D +:10C0B000010883F82120C16B0E9A2031FBF7C4F8E8 +:10C0C000029B0CA883F80380FFF73CFA58BB139837 +:10C0D00039461630FBF730F9224602981399FBF7E0 +:10C0E000B3F8139B10220298DA7280F80380FBF7F2 +:10C0F0000BFC044630460AF0E3FF2B682846D3F8D1 +:10C10000803098472046FBF73DF8044607A8FAF729 +:10C110006DFF204618B0BDE8F0814FF0070893E7A7 +:10C120004FF0020890E70022214603A8FFF74CFBDE +:10C13000DFE70824DEE70624DCE71124DDE7F0B5BD +:10C14000AFB0054614460A46816D09A8FFF720FDE9 +:10C150002246A96D04A8FFF71BFD2B682846DB6F5C +:10C160009847099B02A80193049B0293FBF79AF856 +:10C170000028C0F2AE80022203A901A8FDF7EEFD5F +:10C180000446002840F08F80039C4FF40070169402 +:10C190000AF08EFF0646002800F09D80206116A858 +:10C1A0000199FFF74BF80446002879D19DF88330B8 +:10C1B00013F0A00F40F089801D9B0EAC03F1200707 +:10C1C0001868083353F8041C2246BB4203C21446C5 +:10C1D000F6D116AF22AC0FCF0FC40FCF0FC497E824 +:10C1E0000F0084E80F00029922A8FFF727F8044601 +:10C1F00048B9249A189B9A4203D1269A1A9B9A42CC +:10C2000003D008244CE004284AD122A8FFF79AF969 +:10C210000446002844D129990DF145030DF155003C +:10C2200001F10D0253F8044B834242F8044BF9D15B +:10C230001888012710809B7893709DF84330039CE9 +:10C24000DA0658BF43F02003CB72E770CB7ADB06E7 +:10C250001DD5189A249B9A4219D02078FAF7FFFF2F +:10C2600001462046FBF73BF8014680B32046FDF728 +:10C270001CFB0446A0B90398C16B91F821302E2B0A +:10C2800005D1249A2031FAF7DFFF039BDF7016A84F +:10C29000FEF700FF044618B90398FBF735FB044688 +:10C2A00030460AF00DFF2B682846D3F880309847B7 +:10C2B0002046FAF767FF044604A8FAF797FE09A894 +:10C2C000FAF794FE20462FB0F0BD0624E8E70224DA +:10C2D000E6E70B24E7E71124E5E72DE9F043A1B0F9 +:10C2E00005460A46816D03A8FFF752FC2B682846D5 +:10C2F000DB6F9847039B022202A901A80193FDF777 +:10C300002DFD0446E8B9029C4FF4007008940AF031 +:10C31000CFFE804600285CD0206108A80199FEF776 +:10C320008DFF044650B99DF84B3098064FD419063E +:10C330004DD49DF82670FA0715D5072440460AF01B +:10C34000BFFE2B682846D3F880309847072C42D090 +:10C350002046FAF717FF044603A8FAF747FE2046DF +:10C3600021B0BDE8F083029E0F993078FAF777FF8D +:10C37000FB0681460DD408A8FEF78CFE0446002873 +:10C38000DCD1B9F1000F19D10298FBF7BDFA0446D0 +:10C39000D4E7F3699842D0D02146169014A8149699 +:10C3A000FDF7C7FB04460028C8D114A8F5F792FE94 +:10C3B00004460028C1D00428C0D1DCE70246494623 +:10C3C00008A8FFF701FA04460028B7D1DCE70624E5 +:10C3D000B4E71124B5E76FF05904BDE7406810B128 +:10C3E00003689B6C18477047407E7047007E70471B +:10C3F000D0E9042110B5D0E90234981844EB0101CA +:10C4000010BDD0E902017047D0E90401704790F8EF +:10C4100020301BB1406803685B6B18476FF47A608B +:10C42000704790F8201030B459B1D0E90114C068B9 +:10C430000D6812192D6B40EB03030846294630BCEA +:10C4400008470020002130BC704790F820301BB115 +:10C4500040680368DB6A184700200021704790F8A5 +:10C4600020301BB1406803689B6A184700200021F8 +:10C47000704790F820301BB1406803685B6A18472A +:10C480000020002170472DE9F34190F82010044668 +:10C4900015469846DDE9086799B10168CDE900675E +:10C4A000496C884768B1E368D4E901020168AA18B9 +:10C4B000CDE9086748EB0303C96902B0BDE8F04164 +:10C4C00008476FF47A6002B0BDE8F0812DE9F043CF +:10C4D00090F820C085B00446154698460391DDE9E2 +:10C4E0000C67BCF1000F16D0CDE900670168D1F8E8 +:10C4F0004090C84778B1E3680399D4E90102046821 +:10C50000AA18CDE90C67A46948EB0303A44605B05B +:10C51000BDE8F04360476FF47A6005B0BDE8F08392 +:10C520002DE9F04390F820C085B0044615469846A2 +:10C530000391DDE90C67BCF1000F16D0CDE900676F +:10C540000168D1F83C90C84778B1E3680399D4E911 +:10C5500001020468AA18CDE90C67646948EB03037B +:10C56000A44605B0BDE8F04360476FF47A6005B0BB +:10C57000BDE8F08390F820301BB1406803681B6968 +:10C5800018476FF47A6070472DE9F047D0E901143D +:10C5900005684FEA640A9DF820C005EB6400E407D3 +:10C5A0009DF824E048BF55F80A409DF82880DDF842 +:10C5B0002C9048BF6158DDE90C67CDE90A89CDE9C7 +:10C5C0000C67CDE908CEBDE8F0470847FF2070476B +:10C5D000D0E944017047F0B51F46D0F8183116462F +:10C5E00001332DD1D0F86021D0E94445AF4208BFD6 +:10C5F000A6421CD2D0F82811C9B101290CD000F5EF +:10C60000B47C0023994212DDFCE80245BD4208BF1C +:10C61000B44202D20133F5E700230344012193F829 +:10C62000544100230C4205D0723350F823201046A9 +:10C63000D117F0BD01334900042B49B2F2D1F6E71E +:10C640004FF480500021F4E7004870471AA2010817 +:10C65000D0F86001002170470120002170472DE9CA +:10C66000F74F164601680269054600930192896BEF +:10C670004769DDE90CAB16EB0A0843EB0B09884769 +:10C68000494508BF4045DDE9003203D2002003B030 +:10C69000BDE8F08F16F17844284643F1FF31A41825 +:10C6A0002A6841EB0707116B3246884702460B4662 +:10C6B000204639460CF0BEFE1343E7D114EB0A04C2 +:10C6C0002B68284647EB0B0718F1FF32196B49F12D +:10C6D000FF33884702460B46204639460CF0AAFE37 +:10C6E00013430CBF01200020D1E700000048704731 +:10C6F00020A20108D0E90601704790F82030002BF5 +:10C700000CBF4FF0FF30FF20704790F8203013B17E +:10C710002020002170470020FBE77047094B0A48A2 +:10C720005B6870B590248D1804FB03038D4207D01D +:10C7300011F8014B1868C6693606FCD58462F5E726 +:10C74000104670BD6C1200241013002400207047A6 +:10C75000012070476FF0150070476FF01C007047A4 +:10C7600008B5836823B9054B1B6893F83D0008BDE5 +:10C77000C06898470028F6D0F9E700BFF01C0024F5 +:10C7800003681B6818470000094B30B51A46094C6E +:10C79000D3F89450A542FBD1036829B181680B609E +:10C7A0004FF44073536130BDC1681B04F7E700BF0D +:10C7B0000064025800030080BFF35F8F0122084924 +:10C7C0008A6001320B69042A23F0010343EA000363 +:10C7D0000B61F5D1BFF34F8FBFF36F8F704700BF71 +:10C7E00090ED00E0BFF35F8F064A0023936013696A +:10C7F00023F0010318431061BFF34F8FBFF36F8F16 +:10C80000704700BF90ED00E070472DE9F0474668A3 +:10C8100096F8327087BB03685B689847346A844235 +:10C820002AD03369041B96F934201C40B368306267 +:10C83000A4FB0345CAB1736A14EB030845F1000970 +:10C84000002A1BDBC2F12001A2F1200328FA02F426 +:10C8500029FA02F509FA01F129FA03F30C431C4302 +:10C8600004FA02F2A8EB02027262D6E90A321B193C +:10C8700045EB0202C6E90A32BDE8F087D6F80CA003 +:10C880003B464046494652460CF0D4FD04460D4610 +:10C890000AFB1082E8E72DE9F14F46680546376B41 +:10C8A00027F07F4727F0FF07002F57D1FFF7ADFF95 +:10C8B0007368002B60D0D5F800A0D3E90001D6E959 +:10C8C0000A238B4208BF824205D3DAF8143001B044 +:10C8D000BDE8F04F18476C68D4E90A32D4F814B0B8 +:10C8E000B0EB030861EB0209D4E906234B4508BF0E +:10C8F000424520D3E36894F933C0A3FB080103FB4E +:10C900000911BCF1000F13D0A268531EC01841F1E9 +:10C910000001BCF1000F24DBCCF12002ACF12003BC +:10C9200020FA0CF001FA02F221FA03F31043184343 +:10C93000834528BF8346236A9B4423690BEA030B84 +:10C94000DAF81030584698472B685B689847336A86 +:10C950005B450AD258450CD283420AD801B0BDE8E3 +:10C96000F08F3B460CF066FDE2E78342F6D958456E +:10C97000F4D32B685B69AAE77369306A326918449B +:10C980002B6810401B6901B0BDE8F04F184700004C +:10C99000014BD868704700BF3C0100246FF01500C0 +:10C9A0007047012070474168034630B471B1D0E947 +:10C9B000032000F0010402B944B1451001EB60000E +:10C9C0000CB149598A58996830BC104730BC70473F +:10C9D0006FF015007047036800221B691146184765 +:10C9E0000368012200211B691847704784B001A821 +:10C9F00004B080E80E0070471120704700290CBF7A +:10CA00006FF018000020704703680BB10846184704 +:10CA100070470000024B987A003818BF0120704719 +:10CA20003C01002408B504F013F8FCE7014B5869F9 +:10CA3000704700BF3C01002401230A4A90F92010EE +:10CA400043701C32936810B51BB193F920408C429F +:10CA500005DCC0E90232906003B1D86010BD1A460F +:10CA60009B68F1E73C01002490F82230826B13F0C0 +:10CA7000100F0CBF602020201044704710B5C4690F +:10CA8000621CD0E904310CD103B1596142691AB179 +:10CA900013610023436101E0074A13630023C3616C +:10CAA00010BD1BB1DA6959612244DA614269002A7A +:10CAB000EED1014AD362F1E73C010024C2682AB1F9 +:10CAC0008368936003B1DA600023C3607047037822 +:10CAD000F12B00D07047C068F9E783689A688260DC +:10CAE00002B1D06000221846DA60704738B51F4C9A +:10CAF000237A022B35D1636A002B34D063694A1C38 +:10CB0000587016D1226B002172B94FF0FF30C3E983 +:10CB10000421D86159B10B611548FFF7DEFF0223EC +:10CB20004370A061012038BD11461269ECE7236310 +:10CB3000F2E7E26A002012B1D569A9420BD2D961AD +:10CB4000C3E9042058B10361002AE5D0D0695361DC +:10CB5000411AD161E0E71046491B1269EBE7E36235 +:10CB6000F2E70020DFE71846DDE700BF3C010024C4 +:10CB70005801002491F92020836810B51BB193F966 +:10CB80002040944205DAC1E90230816003B1D960E6 +:10CB900010BD18469B68F1E7012301464370014828 +:10CBA000FFF7E8BF5801002470B5124D04462E7AF5 +:10CBB000696990B9022E0FD16C6A6CB194F920208A +:10CBC00091F920309A4207DD2046FFF777FF0846AB +:10CBD000FFF732FF6670AC6170BD022E05D190F98F +:10CBE000202091F920309A42F1DC2046BDE87040C7 +:10CBF000FFF7D2BF3C01002438B504461546FFF7C5 +:10CC000033FF01602046FFF739FF1DB1BDE8384012 +:10CC1000FFF7CABFBDE83840FFF7BEBF10B50446F6 +:10CC2000806918B100221146FFF7E6FF6378232BD5 +:10CC300002BFA36800229A6110BD10B501460446E8 +:10CC400064B12378F12B07D00846FFF737FF204661 +:10CC5000BDE81040FFF78EBFE468F1E710BD0000AB +:10CC600038B5254DEC6A002C45D0E369013BE36102 +:10CC7000002B40D16378732B06D009D8532B0BD0EF +:10CC800003F0DF03432B29D12046FFF720FF25E0E7 +:10CC900003F0EF03832BF6E72046FFF718FFC37876 +:10CCA0009B071BD5C06890F92120C36AD9788907F2 +:10CCB00009D599688C4208BFA16821B191F920106B +:10CCC0008A42B8BF0A465B69002BEFD190F9203049 +:10CCD000934203D080F82020FFF7AFFF2046FFF7F4 +:10CCE000EDFEFFF759FF246924B1E369002BC1D0A1 +:10CCF00000236361EC6238BD3C01002410B503469B +:10CD000053E8000F084203D1BFF32F8F002005E046 +:10CD100020EA010243E8002404B1F1E710BD10B598 +:10CD2000034653E8000F00EA01028A4203D0BFF332 +:10CD30002F8F002005E020EA010243E8002404B11F +:10CD4000EFE710BD10B543780446332B15D190F8AA +:10CD50002330416A03F001029B0708D428301AB13E +:10CD6000FFF7DDFF48B10BE0FFF7C8FFFAE7806A85 +:10CD700001EA000312B19942F4D010BD002BFCD09F +:10CD8000014600222046BDE81040FFF735BFD0E83D +:10CD90005F3F13B9BFF32F8F04E05A1EC0E8512F35 +:10CDA00001B1F4E798B2704710B5D0E85F3F5A1C64 +:10CDB000914200D80022C0E8542F04B1F5E798B2A0 +:10CDC00010BD10B5D0E85F3F994202D8BFF32F8F56 +:10CDD00004E05A1CC0E8542F04B1F3E798B210BD28 +:10CDE00010B50446B8B10378F62B14D183683BB173 +:10CDF000FFF773FE01220021FFF7FEFE002010BDA9 +:10CE0000C1890C30FFF7DDFFE38983428CBF00202E +:10CE10006FF00200F3E76FF00300F0E7836810B5EE +:10CE2000044663B10C30FFF7B2FF40B12046FFF774 +:10CE300054FE0022BDE810401146FFF7DDBE10BDD4 +:10CE4000284B5A6970B50446002A41D0002842D0C8 +:10CE50000378F52B3FD1037E002B3FD0C168914270 +:10CE60003CD1013BDBB2037613BB43690BB10169D3 +:10CE700019612169F1B14B6192F92130D56ADDB9AF +:10CE800082F82030A36883B12046FFF726FE0646CD +:10CE90002A462946FFF7B0FEF36AC4E903656361D9 +:10CEA00003B11C610123F46223760020FFF77CFEAE +:10CEB00000200FE0D362DFE7E978890706D5A9688B +:10CEC00021B191F920108B42B8BF0B466D69D6E7AE +:10CED0004FF0FF3070BD6FF00300FBE76FF0020012 +:10CEE000F8E700BF3C010024224B70B55D690446A1 +:10CEF0000E46002D35D0002836D00378F52B33D1DF +:10CF0000037E53B9C0E90353EB6A436103B118616F +:10CF10000123EC620020237670BDC278D10706D5CC +:10CF2000C168A94203D1FF2B21D00133F2E7F6B14A +:10CF300093070AD5E06895F9203090F920209A42AD +:10CF400003DA80F82030FFF778FE31465320FFF7F0 +:10CF5000CDFD18B129462046FFF70CFE6FF0010009 +:10CF6000DAE74FF0FF30D7E76FF00300D4E76FF058 +:10CF70000200D1E73C0100242DE9F04104460026DF +:10CF800001270CB9BDE8F081E378D4F814801B07C1 +:10CF900012D5A36826767BB12046FFF79EFD0022BE +:10CFA00005461146FFF728FEEB6AC4E903566361A4 +:10CFB00003B11C61EC6227764446E2E7034653E87E +:10CFC000000F421C43E8002101B1F8E77047036BF2 +:10CFD00030B4BBB1CD780024DA78AA420AD31A461D +:10CFE000C1E9012462B191607CB16160283030BC3C +:10CFF000FFF7E4BF5A681C46002AF1D01346EBE75E +:10D00000C162F1E7C1E90133C1620163EEE730B506 +:10D01000F0B1C3688B421BD803698B4218D900F169 +:10D0200014031A680A60BFF35F8F53E8002F0C687F +:10D030009442F6D143E8001505B1F2E7043050E818 +:10D04000003F5A1E40E8002101B1F8E7002030BD42 +:10D050006FF00300FBE710B590B100F1140353E843 +:10D06000004F14B9BFF32F8F04E0226843E800217A +:10D0700001B1F4E714B10430FFF7A0FF204610BD62 +:10D080000446FBE730B5C0B189B1C2B1CBB10024D1 +:10D090000160C3604361C0E9014202FB01F41D1954 +:10D0A00005611846013904D1A21A99500121084698 +:10D0B00030BD851805602846F4E70146F7E71146BC +:10D0C000F5E71946F3E730B580B1C9B1A1F108051C +:10D0D00000F108040022A54209D16B6823F0030483 +:10D0E00043681B1B43603AB96A60012030BD236866 +:10D0F00022463BB11C46EEE751F8083C1360F4E7CA +:10D100000846F3E71846F1E710B5C378044613F074 +:10D11000010322D1038083789A0708D513F0100FFA +:10D12000016B134B0FD0D3F88400FFF770FFA37887 +:10D13000DB071CD50E4B2146D3F8880038B1BDE87B +:10D140001040FFF764BF586FFFF7BDFFEFE7D3F85C +:10D150008000BDE81040FFF7B6BF042343700023F2 +:10D16000C360034B5A6B826002B1D0605C6310BD38 +:10D170003C01002438B5044600283BD00378F12B4D +:10D1800038D1437803F00F03022B06D0032B28D0AD +:10D19000012B23D06FF002001FE0184B1A7A022AED +:10D1A000F8D15B6A002BF5D0E06AFFF7E5FE204678 +:10D1B000FFF734FD6578022D18D1104901F11C00EC +:10D1C000FFF78BFC45708861EFF30983A3630023AD +:10D1D0004B612046FFF798FF002038BDFFF76EFC3B +:10D1E000E2E7FFF76BFCFFF749FCDDE70020FFF704 +:10D1F000DBFCEEE76FF00300EFE700BF3C0100242B +:10D2000070B50F4C267A022E18D1636AB3B16569E6 +:10D21000E86AFFF7B1FE2846FFF700FD04F11C00A5 +:10D22000FFF75BFC4670A061EFF30983AB6300235B +:10D2300028466361BDE87040FFF766BF70BD00BF60 +:10D240003C01002470B5054638B30378F62B24D191 +:10D25000836863B12846FFF740FC00226FF00201AB +:10D26000FFF7CAFCA8680028F4D1FFF79DFCAB7853 +:10D27000002613F001032E7012D00A4B2946D3F872 +:10D28000984024B12046FFF7C2FE304670BDD3F867 +:10D290008000FFF718FF2046F8E76FF00300F5E77E +:10D2A0001846F3E73C01002470B50446002849D035 +:10D2B0000378F52B46D1037EBBB16369C0680BB11F +:10D2C00022691A61226902B3536190F92120C36A6D +:10D2D000EBB990F92030934203D080F82020FFF77B +:10D2E000ACFCA068F8B9FFF75FFCA078002610F04E +:10D2F0000100267008D0154B2146D3F89450DDB1BB +:10D300002846FFF784FE304670BDC362DDE7D9785A +:10D31000890706D5996821B191F920108A42B8BFD2 +:10D320000A465B69D4E72046FFF7D7FB00226FF07F +:10D330000201FFF761FCD4E7D3F88000FFF7C3FEDA +:10D340002846E1E76FF00300DEE700BF3C01002460 +:10D35000F0B568B381B10F3100F1080621F007077D +:10D36000334636685C68F11A24F00304091B8F42C7 +:10D3700004D931680029F3D10846F0BD45683A4325 +:10D3800004683D444560204450F8041C08388D4230 +:10D3900088BF4560586818B903F108015A60EBE787 +:10D3A00020F0030019181E504A6019600831E3E7A5 +:10D3B0000146E1E72DE9F04F85B08146029120B9A1 +:10D3C0000024204605B0BDE8F08F002A00F08680DA +:10D3D0009468B4B1A007F3D1D368432BF0D997690F +:10D3E000D2E904658EB17107EAD1002DE8D077B992 +:10D3F00018276B07E4D1A5F14801574B99420BD987 +:10D40000DEE7D368002BEAD0DAE7002F64D07B1E7A +:10D41000372BD5D8002DECD1D2E900A30193002CF5 +:10D4200069D14E4BD3F8880000285DD0FFF713FE7A +:10D4300004460028C4D04FF00108A6B9DFF81CB19B +:10D44000002D71D1DBF88400002857D0FFF703FED0 +:10D45000002870D048F0100806464FF4805548F078 +:10D460000208002CACD040F2F113FD226563403D70 +:10D4700023807FB2019B35446284E3700023384AE5 +:10D4800084F80280C4F804A084F8207084F8217025 +:10D49000C4E90E59C4E90233C4E90433C4E90633CC +:10D4A000C4E90933C4E90B363260A26B114602F1BC +:10D4B000340042F8043B8242FBD12A4B20462A4AE0 +:10D4C000C1E90D394FF08073CB63029B0B62234B94 +:10D4D0001A66FFF769FB74E718279BE79246164622 +:10D4E0001827154601929CE701224421D3F88000B9 +:10D4F000FFF72EFF9CE74FF000089EE72A464FF407 +:10D5000080554FF48051DBF87400FFF721FFF8B924 +:10D51000B8F1000F1ED0DBF888207AB12146104602 +:10D520000024FFF774FD9AE732462946DBF87400C1 +:10D53000FFF70EFFEBE74FF48055E9E72146DBF8F4 +:10D5400080000392FFF7BFFD039A1446164686E754 +:10D55000064684E7444682E7B7FFFF7F3C0100248C +:10D56000A52E5AE259F2000845CD000870B54FF6D5 +:10D57000FE731446421E05460E469A4201D900200B +:10D5800070BD8842FBD3CCB1A068226890B110F086 +:10D590000303F4D1E1680F29F1D91446F622837010 +:10D5A00000234460027083600D4A0E4B8681C58162 +:10D5B0009A66E5E7E368002BE1D11446094BD3F8FE +:10D5C000980028B1FFF747FD0028D8D00123E5E7F0 +:10D5D00001221021D3F88000FFF7BAFEF4E700BF64 +:10D5E0001DCE00083C01002438B5034660B3D0E9E5 +:10D5F00000458068A0B110F0030201D0002038BDC2 +:10D60000DB681B2BFAD91346F52283700023C57003 +:10D61000027044600376C0E90233C0E90433EEE7E8 +:10D62000DB68002BEAD10A4BD3F8940030B9012211 +:10D630001C21D3F88000FFF78BFE01E0FFF70BFD04 +:10D640000028DBD00123DFE704460546EBE700BFF7 +:10D650003C01002410B598B140EA010313F0070320 +:10D660000ED117290AD90160083910220C1842601E +:10D6700084600B5081684A60C3600123184610BD66 +:10D680000023FBE738B51C4C257A012D28D07DBB43 +:10D690001A4B29462846E3651023A4F85430052385 +:10D6A0002364FFF7D7FF08B1C4F880500021084673 +:10D6B000FFF7D0FFB0B9D4F8803000216367084687 +:10D6C000FFF7C8FF80B9D4F880300021A36708466F +:10D6D000FFF7C0FF50B9D4F88030E367012323720D +:10D6E000002038BD0023E8E70023EEE70023F4E73D +:10D6F0004FF0FF30F5E700BF3C010024142E00245A +:10D70000064BDA6A3AB1D0695B6C1BB11B6998426F +:10D7100028BF184670474FF0FF30F5E73C01002462 +:10D7200010B50446D0B10268806898B110F00303C8 +:10D7300001D0002010BDE1680F29FAD91446F32268 +:10D7400083700023446002700D4AC0E902330D4B20 +:10D750005A66EFE7E368002BEBD11446094BD3F888 +:10D76000900028B1FFF777FC0028E2D00123E6E71C +:10D7700001221021D3F88000FFF7EAFDF4E700BF93 +:10D780007FD800083C01002410B402F00104920785 +:10D7900009D40C301CB15DF8044BFFF7C0BA5DF83A +:10D7A000044BFFF7ABBAC06801EA00022CB191420A +:10D7B00018BF00205DF8044B7047002A08BF002006 +:10D7C000F8E70000F8B50D4617461E460446C0B1FE +:10D7D0000378F32B15D1002913DBFFF7D5FF90B9A0 +:10D7E00096B131464320FFF781F938B1084B204606 +:10D7F0005969FFF7BFF94D6281F823706FF001009E +:10D8000001E06FF00300F8BD6FF00200FBE700BF1E +:10D810003C010024F8B5064670B30378F32B2BD1F6 +:10D82000002929DB00F10C0353E8002F42EA010430 +:10D8300043E8004000B1F7E7B56825B92846FFF78F +:10D84000B3F92046F8BD696A304695F82320AF68E1 +:10D85000FFF79AFF014668B195F823309B0756BF42 +:10D860006C6A044620EA04042846FFF727F90022E0 +:10D87000FFF7C2F93D46E0E76FF00304E1E770B55A +:10D880000546846804B970BD616A284694F823206F +:10D89000A668FFF779FF014628B12046FFF70EF989 +:10D8A0000022FFF7A9F93446ECE7014608B538B184 +:10D8B0001320FFF71BF980F00100C0B2404208BD01 +:10D8C0006FF00300FBE7C3681847D0E90030184742 +:10D8D000D0E90132016810B401EB62005410D207A4 +:10D8E00048BF0A595DF8044B48BFD3581847FFF7A3 +:10D8F000EABF7047002050709070D070704730B50C +:10D90000A1F11004002500F00F02CD7302390009C7 +:10D91000D3B2092ACCBF373330330B748C42F2D1E7 +:10D9200030BD0000322310B50A4C0B800A4BA11CFD +:10D930001868FFF7E4FF094B04F112011868FFF7BC +:10D94000DEFF074B04F122011868FFF7D8FF2046DD +:10D9500010BD00BF0400002400E8F11F04E8F11F1F +:10D9600008E8F11F90F8203010B504465BB11C3078 +:10D97000F4F792FB38B984F8200060680368BDE8CA +:10D980001040DB681847002010BD10B5044609F0B0 +:10D9900097FB204610BD10B5044609F091FB2046C8 +:10D9A00010BD10B5044609F08BFB204610BD08B52C +:10D9B00090F820302BB100691044F4F717FB0021D8 +:10D9C00008BD1846FBE708B590F8203023B1006980 +:10D9D000F4F70CFB002108BD1846FBE7F8B59C46A0 +:10D9E0000D4617460446002872D00278FA2A6FD1F5 +:10D9F00000296DD000F1280252E8001F11B9BFF3D1 +:10DA00002F8F04E0481E42E8000606B1F4E711B18A +:10DA1000E66A01229EB9BCF1000F5CD0614683200A +:10DA2000FFF764F840B1304B20465969FFF7A2F880 +:10DA3000EFF30983C3E902576FF0010023E0B11C43 +:10DA4000D1E84F0FC1E8432F03B1F9E710F0FF0F02 +:10DA500044D0B668DEE79A60B268AAB15360626AE1 +:10DA600006F10C01284609F083FB0FB1F3783B70F7 +:10DA7000002504F10C07314638463570FFF7C7FA28 +:10DA8000A3681BB90020F8BD2363E8E73846FFF719 +:10DA9000E2FA06460028F5D02046FFF71EF80746B2 +:10DAA00029460122FFF7A8F83846FEF7DDFF626A33 +:10DAB0000746816806F10C0009F05AFBF923B5709E +:10DAC000314633702046FB68F370FFF780FAD9E7E0 +:10DAD0006FF00300D7E76FF00200D4E7D6E9013218 +:10DAE000002BB8D1E262B7E73C010024F8B5817899 +:10DAF00004468568002938D04368C6688BB39D60AA +:10DB0000A26882B35360002706F10C05214628461F +:10DB10002770FFF77CFAB368002B4CD02846FFF73C +:10DB20009AFA0446002846D03046FEF7D6FF05464E +:10DB30003A463946FFF760F82846FEF795FF726AC5 +:10DB40008168054604F10C0009F012FBF923A77067 +:10DB5000214623703046EB68E370BDE8F840FFF7DC +:10DB600036BAF562CCE73363CDE7AB6803B35B78D5 +:10DB7000832B1DD12846FEF7B0FF06460A46FFF765 +:10DB80003BF83046FEF770FF06466A6A04F10C0166 +:10DB9000806809F0EDFAF3680BB1E2781A7000239F +:10DBA000214605F10C002370BDE8F840FFF72FBABD +:10DBB00021462846D1E7F8BD2DE9F0410C4617462D +:10DBC00098460546002848D00378FA2B45D100290D +:10DBD00043D08368C3B15B78832B15D1FEF77DFFFB +:10DBE000064601220021FFF707F83046FEF73CFF0A +:10DBF00006466A6A2146806809F0BAFAF06808B1F8 +:10DC000007700020BDE8F08105F10C00FFF723FA52 +:10DC1000064670B121466A6A0C30002409F0A8FA61 +:10DC2000F923314628463370B470F770FFF7CFF907 +:10DC3000E7E7B8F1000F13D041469320FEF756FFF7 +:10DC400040B1094B28465969FEF794FFEFF3098369 +:10DC5000C3E902476FF00100D4E76FF00300D1E79A +:10DC60006FF00200CEE700BF3C010024024B1868B1 +:10DC700008B1F9F7FDB87047A835002470B514460F +:10DC80006FF00046126805460498B24207D238B1D8 +:10DC9000014618460BF07AF9431C05D1206070BD8F +:10DCA00015B18A4238BFAB54236801332360F6E7CD +:10DCB0002DE9F04F2DED028B8DB00E46002105466B +:10DCC0009DF87030174607A814229DF868900493B9 +:10DCD0000691DDE918AB09F059FA049B002B14BF3B +:10DCE00030232023B9F1010F08EE103A48D1BAF1E0 +:10DCF000000F7BF1000343DADAF1000ACDF80C9053 +:10DD00006BEB4B0BA9F102034FF00008DBB205935C +:10DD1000059B012B5ED8B9F1020F0AF00F030CBF6F +:10DD20003B4A3C4AD35C06AA02F808304FEA1A1371 +:10DD30004FEA1B1243EA0B7393469A465AEA0B03C7 +:10DD400008F1010444D1039B23B3049B3BB11D9B09 +:10DD50003A463146284600932D23FFF78FFF08F1FE +:10DD600002041B9B9C421ADB049B3BB91D9B3A4659 +:10DD70003146284600932D23FFF780FF013C1FE02A +:10DD80005AEA0B0302D000230393BBE7302301249C +:10DD90008DF818301B9B9C4212DA002303931D9BC5 +:10DDA0003A4631462846009318EE103AFFF766FFD0 +:10DDB0001B9B013BA3421B93F1DC039B002BD3D1A4 +:10DDC0000DF11808CCB90DB0BDEC028BBDE8F08F99 +:10DDD000A0469DE7504659460A2200230BF02AFB35 +:10DDE00006AB30325046594603F808200A22002379 +:10DDF0000BF020FB82468B46A0E71D9B013C3A4678 +:10DE000031460093284618F80430FFF737FFD9E76A +:10DE1000EBA90108FBA901082DE9F04F1C468BB0C6 +:10DE2000002306460D46DDF8508017460993AAB137 +:10DE3000994213DB0CBF012301F1FF354FF0000BBA +:10DE4000079317F80B306BB946B1079B33B9099BA1 +:10DE5000AB4295BF079A079BF254735509980BB0D4 +:10DE6000BDE8F08F252B40F02B810BF1010A17F84C +:10DE70000A30203BDBB20D2B07D842F6090222FA0A +:10DE800003F3DB0748BF0BF1020A17F80A302A2B0D +:10DE900046D100210AF101020434084617F802C0F5 +:10DEA000BB18BCF12E0F62D193F801C0BCF12A0F50 +:10DEB00051D00022C7F10109069209EB030213F8C1 +:10DEC00001CFACF1300C5FFA8CFEBEF1090F47D9DF +:10DED000BB5C682B4ED1BB185B78682B0CBF7223E0 +:10DEE000112303F0030A924417F80A90B9F1640F62 +:10DEF00002D0B9F1690F62D1822B55D1073424F0D9 +:10DF00000704F4E8022303910121CDE904080291FA +:10DF100029463046CDE9002309AAFFF7C9FE87E06C +:10DF2000302B16D10AF1010A17F80A30302BF9D03C +:10DF30000120BA440021AAEB07021AF8013B303B4A +:10DF40005FFA83FCBCF1090FA8D80A2202FB013159 +:10DF5000F1E70020EDE7023254F8043B0693B7E7FF +:10DF6000069A4FF00A0E0EFB02C20692A5E76FF06A +:10DF70000043F3E76C2B06D1BB185B786C2B0CBF0E +:10DF800082232123ADE76A2B08D07A2B08D0742B8B +:10DF900008D04C2B14BF00236123A2E73123A0E754 +:10DFA00041239EE751239CE7112B54F8042B04D006 +:10DFB000722B08BF52B2D317A5E712B2FBE7B9F133 +:10DFC000750F03D009F0DF02582A24D1822B0CD11F +:10DFD000073424F00704F4E80223B9F1750F039124 +:10DFE000CDE9040811D1002191E7512B54F8042BFD +:10DFF00009D0722B03D0112B03D00023EDE7D2B24E +:10E00000FBE792B2F9E7D317E7E7B9F1580F0CBF76 +:10E01000032102217BE7B9F1630F0CD154F8043BD3 +:10E0200009AA29463046DBB2CDF80080FFF726FE6C +:10E030000AF1010B05E7B9F1730F15D154F804BBD0 +:10E040000BF1FF3919F8013F002BF1D0069AA2EB32 +:10E0500009021BEB020FEBD009AA29463046CDF886 +:10E060000080FFF70BFEEDE7B9F1700F1BD154F8FC +:10E07000049B302309AA29463046CDF80080FFF7DB +:10E08000FDFD782309AA29463046CDF80080FFF728 +:10E09000F5FD00234A46CDF81480CDE90333032370 +:10E0A0000293D31734E7252309AA29463046CDF831 +:10E0B0000080B9F1250F18BFDA46FFF7DFFDB7E79B +:10E0C00009AA29463046CDF80080DA46FFF7D6FD8A +:10E0D000AEE7012008B501F083FB000011F001005C +:10E0E00010B58CB204D0F3F7E1FF003818BF01205F +:10E0F000E2060AD5054B5A6890235343044AD35885 +:10E10000DB691B0648BF40F0100010BD6C120024F4 +:10E1100010130024F8B50D4682B3194B194C5F68F3 +:10E12000902303FB07439A68B2F5805F16D11A6902 +:10E13000BAB940F2FF12A3F86020902202FB074216 +:10E14000B2F86060F3F7B2FF0028FBD09023012003 +:10E150007B43E3585B6A1E402E70F8BD1AB91A69FA +:10E1600032B9FF22E7E7B2F1805F05D11A690AB937 +:10E170007F22E0E73F22DEE70022DCE71046ECE703 +:10E180006C1200241013002438B50F4C0546B4F867 +:10E19000541004F15600FEF714FE814203D8022108 +:10E1A0000A48F3F785FE04F15800FEF7FDFDE36D24 +:10E1B00043F82050637A23B9054B4FF080525A60E0 +:10E1C00038BD0123A372FBE73C0100242601028035 +:10E1D00000ED00E038B50D4CFA2300251422237021 +:10E1E0000823042104F10C00A570C4E90935084B8B +:10E1F000C4E90155C4E90B55FEF744FF054B064A37 +:10E200002846DC641A67054A1A6538BD542E002476 +:10E21000882E00243C010024EDDA0008F1080108F2 +:10E2200010B5044C0A460448214606F0B5FA2046CB +:10E2300010BD00BFA81A002429A2010810B5044C83 +:10E240000A460448214606F0A7FA204610BD00BF42 +:10E25000A81A002437A201087047000010B5044630 +:10E260000068F8F705FE014618B9236A01332362F6 +:10E2700010BD044B1B78DBB2002BF9D10248F3F739 +:10E2800017FE00BF391000241501028007B51346A0 +:10E290000A466FF0004100900020FFF7BDFD03B07B +:10E2A0005DF804FB0EB40FB505AB6FF0004153F8F9 +:10E2B000042B009000200393FFF7AEFD04B05DF83F +:10E2C00004EB03B0704713B500240094FFF7A4FDDE +:10E2D00002B010BD07B51346002200920A466FF047 +:10E2E0000041FFF799FD03B05DF804FB07B50B464D +:10E2F0000649024600200968896800916FF00041D4 +:10E30000FFF78AFD03B05DF804FB00BFF4020024B0 +:10E310000CB41FB506AB002453F8042B00940393F0 +:10E32000FFF77AFD04B0BDE8104002B070470EB4AC +:10E330000FB5002105AB53F8042B00916FF000419D +:10E340000393FFF769FD04B05DF804EB03B0704779 +:10E350000FB41FB5084906AB0020096853F8042B19 +:10E360008968039300916FF00041FFF755FD05B0F8 +:10E370005DF804EB04B07047F402002407B5019087 +:10E3800008F096FE019910B90248F3F791FD03B029 +:10E390005DF804FB1F0101802DE9F34D00F11C0322 +:10E3A000074653E8002F013243E80026002EF8D13B +:10E3B000012A40F08680786803689B689847064683 +:10E3C00068BB786803685B6A9847422838BF422078 +:10E3D0000446FFF7D3FF80467868C4F500720368EF +:10E3E0004146CDE900465D693346A847064698B9DF +:10E3F000A4F1420308EB030595F84030552B64D196 +:10E4000095F84130AA2B60D17B7E05EB031313F8FE +:10E41000102C520608D02E4E404608F051FE002324 +:10E4200087F82030FB614CE013F80C2C0F2A04D83D +:10E4300048F22103D340DB07EDD478684FF0000A9F +:10E440000368DB6A98477B7EB0F5007F03F1FF33FA +:10E4500038BF4FF4007005EB03131A793A7653F87E +:10E46000081F0A0A61F3070A62F30F2A0A0C090E51 +:10E4700062F3174A002261F31F6AA0FB0AABC7E9E7 +:10E4800002AB5B68190A63F3070261F30F22190CF0 +:10E490001B0E61F3174263F31F62A0FB024578680D +:10E4A00052460368C7E90445CDE90045596C5B460F +:10E4B00088470028AFD00123404687F8203008F075 +:10E4C000FFFD304602B0BDE8F08D024EA4E700BF6C +:10E4D000E2F3FFFFE3F3FFFF014B1868F8F7C8BC56 +:10E4E000402D0024014B1868F8F7C2BCF02D002421 +:10E4F00001207047074A084913681844884283BFBF +:10E50000064B0C224FF0FF3010608CBF1A6018468B +:10E51000704700BF3801002400FC0724AC3E0024F3 +:10E5200008B5094BD3E85F2F013AC3E8512F002902 +:10E53000F8D14FF6FF7192B28A4203D1198803488D +:10E54000F3F7B6FC08BD00BF2C2D00242401048085 +:10E55000436B30B5044685B07BB100F128036D46AE +:10E560000FCB85E80F000023636394F838300BB1BC +:10E57000FFF7D6FF2846FFF7A6F905B030BD00002B +:10E5800008B5074BD3E85F2F0132C3E8512F0029AC +:10E59000F8D192B21AB919880248F3F789FC08BD7C +:10E5A0002C2D002423010480064A136843B1013B4B +:10E5B00013602BB9044A1370044B1B7803B162B685 +:10E5C000704700BF282D0024C8350024242D0024C6 +:10E5D000EFF3108372B6074A117831B9DB4306496D +:10E5E00003F001030B7001231370044A1368013315 +:10E5F00013607047C8350024242D0024282D0024E2 +:10E6000008B5FFF7E5FF064A1388013B9BB213806C +:10E6100013B90120FEF7E6F8BDE80840FFF7C4BFD4 +:10E62000102E002410B5074CFFF7D2FF218811B936 +:10E630000846FEF7D7F801312180BDE81040FFF70A +:10E64000B3BF00BF102E002408B5FFF7C1FF064A74 +:10E650001388013B9BB2138013B90120FEF7ACF87D +:10E66000BDE80840FFF7A0BF122E002410B5064CED +:10E67000FFF7AEFF208808B9FEF79EF80130208032 +:10E68000BDE81040FFF790BF122E0024F0B51E4DDC +:10E690008FB00E461746002818BF054630220021CD +:10E6A00002A808F073FD194B01AC01952B440396A9 +:10E6B000012B05D9164B9D4202D0033B9D4220D130 +:10E6C000F36B0293736B0893124B134D5B69DA6B18 +:10E6D000049305925A6B1B6B06920793FFF778FF22 +:10E6E0000E4A1368013313600FCC0FC50FCC0FC552 +:10E6F0000FCC0FC523682B60FFF756FF00200FB02B +:10E70000F0BD02970894DFE70101FF80C2FE007FA1 +:10E710004001FF803C010024AC2D0024602D00242A +:10E72000F8B50546FFF754FFD0E90034DB68984799 +:10E7300094F832301BB1BDE8F840FFF735BF012334 +:10E7400084F831306368ABB12846FEF75EF8616843 +:10E75000D4E90A67D1E900239F4208BF964209D352 +:10E760006B685A68CB6863602368002BEAD09068B6 +:10E770009847E7E70023284684F83130FEF78BF806 +:10E78000D9E7F8B54B6915460C469B1A002BACBF70 +:10E79000D318131C4B6103898B80FFF719FF0246C6 +:10E7A00003686BB35E696169771A002F24DB8E42C0 +:10E7B00026D19B68A36013B104F1080119611368A5 +:10E7C0002146002641F80C3F9E6019611460836A5F +:10E7D00022616BB190F8242052B10268A24207D1A5 +:10E7E000E2682AB96169C06A491B21EAE171984768 +:10E7F000BDE8F840FFF7D8BE03F108029B68D0E7F8 +:10E80000A36013B104F1080119610023E360DDE79F +:10E8100008F0C4BC08F06CBD08F010BD406828B119 +:10E82000037B012B01D104387047002070470000A2 +:10E83000436893F830202DE9F0470646002A74D14A +:10E8400093F83230002B70D103681B689847336807 +:10E85000DB699847364B0268002A08BF1A46114602 +:10E860001C46B1FBF3F304FB13132146002BF7D135 +:10E870002F4B01257768B3FBF4F11F23B960013BEF +:10E8800003D305FA03FC6145F9D1B2FBF4F287F832 +:10E89000333001241F23FA6004FA03F5AA4201D0A1 +:10E8A000013BF9D287F834304468231F1B2B93BFF8 +:10E8B00001234FF0FF332024A340A4F1040498BFA8 +:10E8C00003F1FF3312F1FF303B614FF0070303FA0E +:10E8D00004F44FF000034FEAE4797C61A4FB0145A6 +:10E8E0009A4601FB095543F1FF31201845EB010120 +:10E8F0000AF0A0FD3368C7E906015B68C7E900AA12 +:10E90000984773683862002100200122C3F824A0D0 +:10E9100083F832A01A86C3E90A013046FDF775FF75 +:10E920003046BDE8F047FDF7B6BFBDE8F08700BF51 +:10E9300040420F0010B50446FFF77AFFFFF748FE8C +:10E940002046FDF762FF6368D3E90A01FFF72CFE5A +:10E9500010BD2DE9F8430C4680468869FFF7EAFFB1 +:10E96000D4E90A59461B61EB0907002F08BFB6F529 +:10E970007A7F2AD3002F08BFB6F5FA6F28D3002E6E +:10E980004FF47A72304677F101034FF00003B4BFC1 +:10E99000002139460AF04EFD4FF47A760023A36336 +:10E9A000A0FB0623551906FB013343EB0903C4E919 +:10E9B0000A53D4E90C32C318404642EB0101C4E9C2 +:10E9C0000C31C8E90031BDE8F88300200146E3E7D7 +:10E9D00001200021E0E700002DE97043154E356865 +:10E9E0002DBB154C4FF0000814484FF00009144B94 +:10E9F000A0612360C4E90289C4E90455FFF718FF48 +:10EA0000FFF7E6FD0F4B104A1A60FFF7CDFD0F4BE5 +:10EA1000A0692360FFF78EFF84F840503460C4E99A +:10EA20000801C4E90A01C4E90C89C4E90E5530683B +:10EA3000BDE87083F01C0024A81C00240CAA010867 +:10EA4000A0A90108682D002481C70008D0A90108E9 +:10EA5000B1F900305A1C01D118467047834201D1E8 +:10EA6000886870470C31F3E708B5431C03D10346AF +:10EA7000184608BD0C31B1F900305A1C04D0984238 +:10EA8000F8D14B68591CF3D101460148F3F710FA4D +:10EA900030010180884208B507D0431C05D0013100 +:10EAA000014602D00248F3F703FA084608BD00BF4A +:10EAB00030010180D0F890302DE9F04F012B044651 +:10EAC0002DED088B87B0029307D9002084F89400BD +:10EAD00007B0BDEC088BBDE8F08F031DB0F9967050 +:10EAE000B0F9986008EE103AD0F88C30B0F99A502E +:10EAF000B0F99CA008EE903AB0F99EB0B0F9A080B1 +:10EB000038467249FFF7B0FF714903903046FFF76E +:10EB1000ABFF704901902846FFF7A6FF6E4909EE4A +:10EB2000100A5046FFF7A0FF6C4909EE900A5846BC +:10EB3000FFF79AFF6A490AEE100A4046FFF794FF72 +:10EB4000019A039B814611461846FFF7A3FF19EE71 +:10EB5000901A019019EE100AFFF79CFF49460390A6 +:10EB60001AEE100AFFF796FF019B1A46039B9A4282 +:10EB7000ABD1019B8342A8D154493846FFF768FFC7 +:10EB8000534903903046FFF763FF524909EE100ADC +:10EB90002846FFF75DFF504909EE900A5046FFF7FF +:10EBA00057FF4E490AEE100A5846FFF751FF4C49ED +:10EBB0000AEE900A4046FFF74BFF4A4A0BEE100A56 +:10EBC000039BD2F8D410484841F48041C2F8D410D5 +:10EBD000D2F8D41001F48041059105994349D0F849 +:10EBE0008CC08C45FBD1D16F4FF0000941F48041BE +:10EBF000D167D16F21F48041D1674FF44072012178 +:10EC0000C26000223846A4F8547084F8452022617E +:10EC100084F844204FF0004292FAA2F2B2FA82F253 +:10EC2000013A62614FF48062A261029AE261019A44 +:10EC3000C4E9021162601946C4E90899F3F7A0FB20 +:10EC400049463846F3F754FB19EE101A3046A4F83B +:10EC50005660F3F795FB49463046F3F749FB19EE4A +:10EC6000901A2846A4F85850F3F78AFB49462846DC +:10EC7000F3F73EFB1AEE101A5046A4F85AA0F3F729 +:10EC80007FFB49465046F3F733FB1AEE901A58467D +:10EC9000A4F85CB0F3F774FB49465846F3F728FB39 +:10ECA0001BEE101A4046A4F85E80F3F769FB494654 +:10ECB0004046F3F71DFB18EE901A18EE100AF5F710 +:10ECC000C1FBB0FA80F0400900E700BF40A5010891 +:10ECD00070A50108A0A50108C4A50108F4A50108B4 +:10ECE00018A601080044025800640258000300807E +:10ECF000431C07B510D103B05DF804FB83420AD171 +:10ED000089680190F3F73CFB0021019803B05DF89E +:10ED100004EBF3F7EDBA0C31B1F900305A1CEDD128 +:10ED200001460148F3F7C4F8300101800148FFF7BC +:10ED3000F7BC00BF0CAA010870B504461646018254 +:10ED40001D46F4F7D3F920460021F4F7F3F93146D4 +:10ED5000B4F91000F3F7CCFA29462046BDE870401C +:10ED6000FDF712BD38B5154604460182F4F7BEF929 +:10ED700020462946FDF708FD0121F4F7DBF9B4F937 +:10ED800010000021BDE83840F3F7B2BA00B589B0F1 +:10ED9000154DFFF71DFC0022A52101A8FFF7E2FF9A +:10EDA0000424012101A8FDF7EFFC2846F3F792FAAD +:10EDB000002101A8FDF7E8FC2846F3F78BFA013C97 +:10EDC000EFD10424094E012101A8FDF7DDFC3046F6 +:10EDD000F3F780FA002101A8FDF7D6FC3046F3F7DF +:10EDE00079FA013CEFD1DBE7F0490200801A060016 +:10EDF00008B50E4B0121D3E84F2FC3E8401FD2B214 +:10EE00000028F8D12AB1FFF7E3FBBFF34F8F20BFF3 +:10EE1000FDE7EFF305831BB9EFF31083DB0701D5A3 +:10EE2000FFF7B4FF012000F0DBFC00BFA82D002499 +:10EE30000FB407B5CDF804E0F3F72EF8019A0146B8 +:10EE400010B90248FFF722FCFFF7D2FF0001FF8054 +:10EE500038B5856900F10804FFF7BAFB6A685368A2 +:10EE60009C4209D1436928465360FDF714FDBDE873 +:10EE70003840FFF799BB1346002BF8D0DA6894426C +:10EE8000F9D14269DA60F2E738B5114C237A022BE6 +:10EE90001CD1104B1D682846FFF7DAFF00234FF006 +:10EEA000007285F83F300C4B5A6001226272BFF34A +:10EEB0004F8F5968C90003D54FF000615960A272A5 +:10EEC00004232372BDE83840FEF71ABC002038BD89 +:10EED0003C010024F01C002400ED00E02DE9F74384 +:10EEE000044600F108058069904699460190FFF7B5 +:10EEF0006FFB0198FDF789FC0198002142682461AD +:10EF00005368C4E902892BB9636161B95560FDF7A3 +:10EF1000C2FC0FE0D3E90067B94508BFB045F3D3A1 +:10EF20001946DB68EFE7D2E90A23CD604B4508BFFD +:10EF30004245ECD203B0BDE8F043FFF735BB00001B +:10EF400090F83C3030B453B1002380F83C3090F856 +:10EF50003E3013B9012380F83D3030BC704790F843 +:10EF60003F30002BF9D0836B4FF080620133836315 +:10EF70000B4B5A60D0E90C32013342F10002C0E978 +:10EF80000C32D0E90A2312F57A7543F1000412F528 +:10EF9000FA62C0E90A5443F1000330BCFFF79EBF98 +:10EFA00000ED00E010B5FFF717FD012380F83F30BA +:10EFB000836B1BB1064B4FF080625A60D0E90A2385 +:10EFC000BDE8104012F57A7243F10003FFF786BFE7 +:10EFD00000ED00E038B5274C237A012B03D04FF029 +:10EFE000FF35284638BD244A00212448FEF7E2F9BF +:10EFF000A062FFF7EFF805460028F0D1204AE16C47 +:10F000002048FEF7D7F9A0640028E8D01E4AFF2365 +:10F0100082F8223092F82230D26863F0FF03C2F304 +:10F020000222DB4314BFB3FA83F32023C3F120038E +:10F03000934298BF531CFE2202FA03F3124ADBB23A +:10F04000D377F02382F823309368104ADA63BFF352 +:10F050004F8F4FF0FF332361FFF7A4FF0C48FDF7FC +:10F060003CFD02234370A06183F31488BFF36F8FCC +:10F070002372B6E73C01002438AA010825CA00081B +:10F0800074AA0108BD08010800ED00E0FF030008B4 +:10F090005801002438B51E4C0546237A042B35D17F +:10F0A000FEF72EFBE26AA842034694BF00F1FF334D +:10F0B0002B4612B1D069C01AD061626C12B11069CE +:10F0C000C01A1061E06803440544E360E368AB42A2 +:10F0D00013D1022300202372FDF766FD0023637223 +:10F0E000BFF34F8FA27A22B1A3724FF08052094B27 +:10F0F0005A60BDE83840FFF755BF0133E360FDF7C4 +:10F10000AFFD236D002BE1D09847DFE738BD00BF8E +:10F110003C01002400ED00E0F8B50F4B002600276D +:10F12000002504460360C0E90267C0E904550B48A6 +:10F13000A061FFF77DFBFFF74BFA094B094A1A6004 +:10F14000FFF732FA01232046656384F83830064B16 +:10F15000C4E908672360F8BDA0A90108649B010801 +:10F16000E00F002481C70008C4A90108F8B50446CF +:10F170000E4615460021202268301F4608F006F88A +:10F1800094F86030721C84F8683016BF00230123A5 +:10F1900084F8696084F86A3094F8613084F86C30DF +:10F1A00094F8623084F86D306B1C16BF0023012385 +:10F1B0002567013784F8743094F8633084F8783028 +:10F1C00094F8643084F8793016BF00230123E36794 +:10F1D00084F88030D4F8883084F8843094F865302E +:10F1E00084F88530F8BD43681A6803681A4214BF72 +:10F1F0000120002070470000094B30B51A46094C29 +:10F20000D3F89450A542FBD1036829B181680B6003 +:10F210004FF44073536130BDC1681B04F7E700BF72 +:10F22000006402580003008008B5FFF7D1F90121FE +:10F23000F3F780FFBDE80840FFF7B6B905F0C6BB9D +:10F24000EFF310832BB9EFF31180003818BF0120C2 +:10F25000704701207047000008B5EFF305832BB914 +:10F26000FFF7EEFF10B9DFF80CC000DFDFF808C0D1 +:10F2700000DFFEE72DCA000801D2000810B50446E1 +:10F28000EFF305831BB15CB96FF0030017E0FFF7E4 +:10F29000D7FF0028F7D12046DFF82CC000DF0EE0B2 +:10F2A0002378F62BF0D1E18904F10C00FDF789FDFC +:10F2B000E389834204D92046FEF766FF002010BD93 +:10F2C0006FF00200FBE700BFE1CD000810B5044677 +:10F2D0000430FEF7F8FA04F15400FEF7BFFF0023F4 +:10F2E000206C6361012384F83D30BDE81040FFF7D6 +:10F2F000C5BF0000024608B5EFF3058313B16FF0F8 +:10F30000050008BDFFF79CFF0028F8D11046DFF884 +:10F3100008C000DFF5E700BF41CE000808B5036A6A +:10F32000013B03620068FFF7E5FF014630B1044B83 +:10F330001B78DBB213B90348F2F7BAFD08BD00BF72 +:10F34000391000241701028010B52C4C2C48FEF710 +:10F3500085FF636913B994F83D3023B12848FFF75E +:10F36000DDFF002010BDA36A53B1A26A0023254926 +:10F37000E06AB3EB900F11D242F823100133F7E7A4 +:10F38000E06A214B984294BF20F003004FF0FF3019 +:10F3900007F08EFEA0620028E7D1DFE744231B4A76 +:10F3A00063621B4B226263601A4BA3600023E3601D +:10F3B000194B2361EFF305838BB10023636194F84C +:10F3C0003C302BB1A06A08B107F07AFE0023A3629B +:10F3D0000B48FFF7A3FF206CFFF750FFC1E7FFF7D3 +:10F3E0002FFF0028E9D1A2F178010C48603ADFF83C +:10F3F00030C000DF60610028B0D1E0E7A019002430 +:10F40000F4190024A52E5AE2FBFFFF7F181A0024EE +:10F4100044190024F5110108D1D80008CDF20008E4 +:10F42000B5D30008014B1868FFF764BF402D0024D6 +:10F43000014B1868FFF75EBFF02D0024024B1868DF +:10F4400008B1FFF757BF7047A8350024037823F0B1 +:10F45000030343F001030370FFF7F0BF10B5044648 +:10F46000037803F00303012B08D0FEF7FFFB23789A +:10F4700003F00302012A03D1FFF7E0FF002003E0BD +:10F4800043F002032370012010BD00003F282DE946 +:10F49000F04F06468BB000F32C81974F57F82000B1 +:10F4A000411C40F00A81022E00F307819348DFF8E7 +:10F4B00090920378BFF35B8F13F0010F40F0FA8056 +:10F4C000FFF7CCFF002800F0F5808D4BC9F8003025 +:10F4D0008C4B1A689846002A40F0E9808A49092036 +:10F4E000FFF7C2FA044689490A20FFF7BDFA014630 +:10F4F0002046874DFFF7CEFA834904460920FFF7DF +:10F50000A7FA824983460A20FFF7A2FA814B824676 +:10F510002C609C4221D1804AD2F8F01041F01001B9 +:10F52000C2F8F010D2F8F02002F010020992099A05 +:10F530007A4A94424AD1784BD3F8F02042F0200224 +:10F54000C3F8F020D3F8F03003F020030493049BB9 +:10F55000734B9C424AD1012487E0714A94421AD0ED +:10F5600002F58062944224D06E4A94425CD06E4A86 +:10F570009442DDD1684AD2F8E81041F48011C2F813 +:10F58000E810D2F8E82002F480120592059A9C4215 +:10F59000DED1002469E0604AD2F8E81041F400317D +:10F5A000C2F8E810D2F8E82002F400320892089A73 +:10F5B000BEE7594AD2F8E81041F48021C2F8E810B9 +:10F5C000D2F8E82002F480220792079A574A944220 +:10F5D00037D1514BD3F8E82042F08042C3F8E820FD +:10F5E000D3F8E83003F080430393039B504B9C42D5 +:10F5F00075D003F580639C4273D003F580639C4211 +:10F6000071D003F544439C426FD0A3F51C439C4248 +:10F610006DD003F580639C425FD04648844214BF9E +:10F620004FF0FF34082420E03B4AD2F8E81041F4C0 +:10F630000021C2F8E810D2F8E82002F40022069275 +:10F64000069A3D4A94423BD03A4A94429FD1324B6B +:10F650000824D3F8F42042F00802C3F8F420D3F8C9 +:10F66000F43003F008030193019B594609206C60B4 +:10F67000F2F786FE01210920F2F73AFE51460A20F0 +:10F68000F2F77EFE01210A20F2F732FE00234FF44A +:10F690001652C5E90223294AC5E90433C5E9062300 +:10F6A000F4F75EFF0123C8F80030F6F721FF134896 +:10F6B000FFF7CCFE224847F826900BB0BDE8F08F4C +:10F6C000154BD3F8E82042F00042C3F8E820D3F805 +:10F6D000E83003F000430293029B0724C5E70224AD +:10F6E000C3E70324C1E70424BFE70524BDE70624DC +:10F6F000BBE70020E1E700BF38000024A81B00247E +:10F70000FCA80108CC350024A4A7010848A60108DC +:10F710006C12002400100140004402580014014003 +:10F7200000440040004C0040005000400078004081 +:10F7300000480040000C0058007C004009000A000E +:10F74000F41C002438B50D46FFF7A0FE044630B97E +:10F7500006F028FF092303604FF0FF3038BD03682F +:10F76000DB6998470028204614BF4FF400534FF43C +:10F7700000436B6023689B6A984728610020EDE78F +:10F7800010B5FFF783FE30B906F00CFF09230360C4 +:10F790004FF0FF3010BD03689B699847041E04DAE0 +:10F7A000644206F0FFFE0460F2E70020F2E700008A +:10F7B0000A4D044608B52B68986806F0BBFF2B6815 +:10F7C000D86806F0B7FF0120FFF7DAFF0220FFF745 +:10F7D000D7FF0CB1FFF7DAFAFEE700BFF40200240E +:10F7E00008B5FFF7E5FF13B5CDE90021FFF74EFEA1 +:10F7F000DDE9002140B906F0D5FE092303604FF092 +:10F80000FF34204602B010BD03681B699847041EF0 +:10F81000F7DA644206F0C6FE0460F0E710B5FFF7C1 +:10F8200035FE044628B906F0BDFE092303602046D4 +:10F8300010BD0368DB699847041EF8DA644206F0DD +:10F84000B1FE04600024F2E7FFF7E8BF13B5CDE98D +:10F850000021FFF71BFEDDE9002140B906F0A2FE02 +:10F86000092303604FF0FF34204602B010BD036847 +:10F870009B689847041EF7DA644206F093FE046022 +:10F88000F0E700007FB5002A04460D4606DA06F0D0 +:10F8900089FE162303604FF0FF3019E00192FFF755 +:10F8A000BDFF019AE8B1114E01220DF10F01204672 +:10F8B000FFF7CCFF0028EEDB0AD09DF80F300D2BB0 +:10F8C00008D1325D0A2A3355EED00A2301202B706D +:10F8D00004B070BD0A2B02D1325D0D2AF3E7335517 +:10F8E000F4E729462046FFF7B1FFF1E7AC1B0024FF +:10F8F00013B5CDE90021FFF7C9FDDDE9002140B9CD +:10F9000006F050FE092303604FF0FF34204602B09A +:10F9100010BD0368DB689847041EF7DA644206F0FE +:10F9200041FE0460F0E700002DE9F74FB2F1000856 +:10F9300005460E4609DA06F035FE162303604FF041 +:10F94000FF34204603B0BDE8F08FFFF767FF0446A1 +:10F9500060B31F4A0027DFF87CA04FF00D0B535D0A +:10F960003C469146B84521DDF25D0A2A1BD10D2B9C +:10F97000019318D0BC420CDA3A1B31192846FFF724 +:10F98000B7FF0028019BDADB0444A742D9DC09F861 +:10F990000530012251462846FFF7AAFF0028CEDB9A +:10F9A000CFD009F805B0F35D0137DBE7A045C8DD2E +:10F9B000A8EB040231192846FFF79AFF0028BEDBA6 +:10F9C00024181FBF3619024B16F8012C5A55B8E7F8 +:10F9D000EC1B002442A201080FB470B5A4B084212E +:10F9E00028AB03A853F8042B0293FEF76CFC832882 +:10F9F00006D9194B1A681B79CDF88B208DF88F30FA +:10FA000000280FDD002203A9022003ACFFF770FFDE +:10FA10000D26FEF7DDFD0022254614F8013B33B923 +:10FA2000FEF7C2FD24B0BDE8704004B070470A2B59 +:10FA300009D10D2A07D001220DF1070102208DF80E +:10FA40000760FFF755FF012229460220FFF750FF0C +:10FA500014F8012CE0E700BF44A20108F0B52C4ED9 +:10FA600085B000242B4F35462146013456F8042B2F +:10FA70003846FFF7B1FF0D2CF6D1AB6C264C029344 +:10FA80006B6C264801932B6C0093696BD5E90E23B0 +:10FA9000FFF7A2FF21682248FFF79EFFE16AA26AF2 +:10FAA000A36AA06AD2B2266BC3F30723E76B000CEC +:10FAB000CDE9016700901B48FFF78EFFA36A1E0681 +:10FAC00003D5616B1848FFF787FFA36A180403D5B5 +:10FAD000A16B1648FFF780FFEB6C190712D514488D +:10FAE000FFF77AFF2B6DDA070FD51248FFF774FF87 +:10FAF000EB6C5B074CBF1048104805B0BDE8F04008 +:10FB0000FFF76ABF0E48FFF767FF0E48EEE700BF3A +:10FB10004C3E002449A2010800ED00E057A2010874 +:10FB2000A6A20108B4A2010803A3010811A30108B9 +:10FB30001FA301082EA301085EA301086AA3010800 +:10FB40004EA301083BA3010808B504460D46F2F791 +:10FB5000A3F950BB1648FFF73FFF302C16D0402CBE +:10FB600019D0202C1CD1134C1348FFF735FF134834 +:10FB7000FFF732FFFFF772FF1148FFF72DFF114B20 +:10FB800000221A7029462046F2F792F90E480F4CCF +:10FB9000FFF722FFEBE70E480E4CFFF71DFFE6E7ED +:10FBA0000D480E4CFFF718FFE1E70024EAE700BF1D +:10FBB00076A301083E01FF809FA30108CCA30108A2 +:10FBC000D7A3010839100024AEA301083F01FF802C +:10FBD000B7A301084001FF80C2A301083D01FF80D7 +:10FBE00038B505460024FFF751FC0B4B43F8254080 +:10FBF00030B906F0D7FC092303604FF0FF3038BD61 +:10FC000003685B699847051E04DA6D4206F0CAFC7A +:10FC10000560F2E72046F2E73800002438B50546D3 +:10FC2000046854B9FEF722F82C6824B92C1D20462C +:10FC3000F2F74EF92C60FFF701FC204638BD0000BA +:10FC4000F0B50E4685B090F8201005461446DDE963 +:10FC50000A7C19B96FF47A6005B0F0BD0168CDE98E +:10FC6000007CC96B88470028F4D029690D486118C9 +:10FC70000391FFF7D3FFFEF7F1FAFEF7F7FCFEF76B +:10FC8000D1FC3A460399304607F072FAFEF7B8FC09 +:10FC9000FEF7DAFC0348FFF7C1FFFFF73FFB002048 +:10FCA000DAE700BF801C00242DE9F04188460025DA +:10FCB00004462349C0E90055404609F0F6F980445E +:10FCC000C4F8008023681A782F2A1CD101332360DE +:10FCD0001C48FFF7A3FFFEF7C1FA1B4B1E68D6B105 +:10FCE000B768B7B1384608F061FC854211D12A46A1 +:10FCF0004146384609F052F958B91248FFF78EFFCD +:10FD0000FFF70CFB17E0002AE2D001330135236036 +:10FD1000D8E77668E3E7072DEFD12A4641460B483E +:10FD200009F03CF90028E8D10648FFF777FFFFF714 +:10FD3000F5FA074B1E6820466660BDE8F08100BFFB +:10FD40009C9B01088C0F0024880F0024F6A3010857 +:10FD50007C1C00242DE9FF478A463F49054608F0F0 +:10FD600013FC044628B9FFF791FB204604B0BDE818 +:10FD7000F0873A49284608F007FC20B90120012401 +:10FD8000FFF784FBF1E73649284608F0FDFB20B970 +:10FD900002200224FFF77AFBE7E72B78402B02D101 +:10FDA000D5F80140E1E72F4E03242F48B046FFF776 +:10FDB00035FFFEF753FA56F82490B9F1000F2AD018 +:10FDC0000134402CF7D106F0EDFB182303602648E0 +:10FDD000FFF724FFFFF7A2FA0AE002A8FEF71EFDD4 +:10FDE000054640B906F0DEFB1323036046F82450B5 +:10FDF0004FF0FF34B9E7036801A9029A9D682AF41D +:10FE00008033A8470546E8B16D4206F0CBFB05609C +:10FE100046F82490ECE74FF0FF37134846F824707B +:10FE2000FFF7FCFEFFF77AFA294602A8CDF8049006 +:10FE3000FFF73AFF039D002DD4D02B7B002BCCD1B4 +:10FE4000043D0195019B094A48F8243000231355CD +:10FE5000074A135589E700BFDCA90108E3A9010897 +:10FE6000D4A90108380000242C1C0024AC1B002459 +:10FE7000EC1B00241D4B70B5036004461C48FFF7C3 +:10FE8000CDFEFEF7EBF9A3682BB11A4962680B6847 +:10FE9000A34224D10A60184B15481A68A24204BF35 +:10FEA00000221A60FFF7BAFEFFF738FA257BA5B9E2 +:10FEB0001248261FFFF7B2FEFEF7D0F9104A402382 +:10FEC00052F8041B8E4208BF42F8045C013BF7D194 +:10FED0000A48FFF7A3FEFFF721FA204670BD194636 +:10FEE0005B68A342FBD14A60D5E700BF949A010842 +:10FEF0008C0F0024880F00247C1C00242C1C002460 +:10FF00003800002410B50446FFF7B4FF204607F080 +:10FF1000D7F8204610BD000008B50348FFF77EFE65 +:10FF2000BDE80840FFF7FAB9541C002408B503489F +:10FF3000FFF774FEBDE80840FEF790B9541C00249A +:10FF40002DE9F0479DF82070054689469246022F1C +:10FF500098469DF8246022D8124BDB5DFBB1B6FBBE +:10FF6000F3F403FB146414F0FF0418D1FFF7DEFF71 +:10FF70009DF82830284685F8609085F865300B9B01 +:10FF800085F861A085F8628085F8637085F8646003 +:10FF9000C5F88830FFF7C0FF2046BDE8F0874FF076 +:10FFA000FF30FAE73CA501082DE9F04F89B09046F3 +:10FFB000994605469DF84820C3469DF8503090F874 +:10FFC000FA71DDE915610591032A57D8DFE802F0DF +:10FFD0001B02190302270F2B4FF0000205F1040A40 +:10FFE00008BF95F8FD3111465046009203933B46F9 +:10FFF000CDE90122FFF7A4FF044638B109B0BDE8FE +:020000040801F1 +:10000000F08F0327E7E74FF0FF3BE4E7059B4FF056 +:10001000FF329DF84C105046079307ABCDE90063C3 +:100020005B46F2F76BFF3B4683462246214650462D +:10003000CDE90244CDE90044FFF782FF0028DDD17D +:10004000BBF1000F01D05846D8E795F80101002810 +:10005000D4D0B9F1000F08BFB8F1040F04D1337840 +:1000600043F00A033370EEE7B9F1000F08BFB8F1AF +:10007000020FE8D1337823F00403F3E74FF0FF30A9 +:10008000BCE70000274B10B504460360FFF74EFFA6 +:1000900025496268136823F0010313600023A364F9 +:1000A00084F84530214BD1F88C209A42FBD1204B6B +:1000B000B4F95400DA6F42F48042DA67DA6F22F45E +:1000C0008042DA674FF44072CA6040F2C331D3F81D +:1000D000D42022F48042C3F8D420F2F751F9B4F9C5 +:1000E000560040F2C331F2F74BF9B4F9580040F230 +:1000F000C331F2F745F9B4F95A0040F2C331F2F7CF +:100100003FF9B4F95C0040F2C331F2F739F940F23B +:10011000C331B4F95E00F2F733F92046FFF7FCFE75 +:10012000204610BDFC9901080064025800030080BD +:100130000044025810B50446FFF7A4FF204606F01D +:10014000BFFF204610BD08B5D830FFF767FDBDE8FA +:100150000840FFF7E3B808B5D830FFF75FFDBDE80A +:100160000840FEF77BB800002DE9F04F0D4616461B +:1001700085B0F1F75BFFAC1900F10060A042C0F060 +:100180001E8109D92046F1F731FFB4FBF0F303FBE0 +:100190001040002840F0138190484FF00009DFF82C +:1001A00058B2FFF73BFDFEF759F8002E00F0FE8035 +:1001B000B9F1000F40F0F88005F17843B5F1016F17 +:1001C0004FF0100A4FEA5343019334BF0123022337 +:1001D000012B03F0010803F002070CBF4FF000638E +:1001E0004FF001630293FEF741FAFEF71BFABBF8EA +:1001F00000304FF6FD715A1E92B28A4297BF784A7C +:100200004FF0026302EA832303F100639D420ED2A2 +:10021000B5F1006F0BD3734C734BD4F888209A421E +:10022000FBD1F6F7BDFC60B14FF44073A360FEF75D +:10023000E7F9FEF709FABAF1010AD4D14FF0FF3914 +:100240006BE0FEF7C5F9BBF800204FF6FD71DFF853 +:10025000AC91531E9BB28B4299F8143097BF634CFC +:100260004FF0016404EA422404F10064A5422ABF6D +:100270002C1B019C640C012B00F0938001200023B7 +:1002800089F81400C9F81830B8F1000F00F09D800B +:10029000F2F7D4F9031E18BF0123002F00F0998054 +:1002A00002200393F2F7CAF9039B00283BD00120F8 +:1002B0000023C01A89F8143018BF0120C0F10009CA +:1002C000029B03EB4444BFF34F8F494B04F50032CC +:1002D000C3F8704220349442FAD1BFF34F8FBFF37A +:1002E0006F8FBFF34F8FBFF36F8F0022C3F8502281 +:1002F000BFF34F8FBFF36F8FFEF756F9F6F738FC59 +:10030000002894D1374B4FF440729A60B9F1000F36 +:100310008DD1FEF775F9FEF797F92846F1F766FEDD +:10032000361A054441E7002BC1D1B8F1000F0AD0BD +:10033000304AD36823F4E663D360D36843EA0423E6 +:1003400043F0A403D36077B12A4AD2F80C3123F4E6 +:10035000E663C2F80C31D2F80C3143EA042343F0CF +:10036000A403C2F80C31B8F1000F2BD00120F2F732 +:1003700065F9204AD36823F4E06323F00403D360D3 +:100380005FB10220F2F75AF91A4AD2F80C3123F47D +:10039000E06323F00403C2F80C31002888D1002068 +:1003A00086E74FF0FF398BE74FF0FF390B48FFF737 +:1003B00035FCFEF7B3FF484605B0BDE8F08F4FF0BF +:1003C000FF39F8E7002FEAD0DBE7002FE7D04346FC +:1003D00066E700287FF46BAFAAE700BF801C00240B +:1003E00000FC3F00006402580003008000FE1F0074 +:1003F00000ED00E00020005280E8F11F3C100024D6 +:10040000F7B590F8201004461546DDE9086771B18C +:100410000168CDE90067496C884740B121693246DF +:10042000201D294403B0BDE8F040FFF79DBE6FF4E6 +:100430007A6003B0F0BD00002DE9F04F12F01F0408 +:1004400087B082460F461646994640F0268100291D +:1004500000F02381F1F7EAFD09EB060300F10060EB +:10046000834200F21A818E48DFF850B2FFF7D6FBC4 +:10047000FDF7F4FEB9F1000F00F00681002C40F00A +:1004800001813046F1F7B2FDB6FBF0F500FB1565D2 +:10049000451B4D4528BF4D46BB0701D11F2D4BD8ED +:1004A000202DA8463946DAF8040028BF4FF020086E +:1004B000424606F05DFE1F2D07D8DAF80400C8F1A9 +:1004C0002002FF21404406F061FEDAF804302025C6 +:1004D000039310230293FEF7C9F8FEF7A3F8714BBC +:1004E00019884FF6FD734A1E92B29A4297BF6E4B1F +:1004F0004FF0026303EA812303F100639E4210D2AE +:10050000B6F1006F0DD3694C694BD4F888209A423C +:10051000FBD1F6F745FB002800F0AC804FF44073A8 +:10052000A360FEF76DF8FEF78FF8029B013B029384 +:10053000D1D14FF0FF3487E025F01F050397A8467F +:10054000C7E7012B00F09B8002F178400123B0F552 +:10055000801F8BF8143006D3A2F10163B3F5801F1E +:1005600080F085800223002005920493CBF81800C8 +:100570001846F2F763F8059A20BB049B4D48012BFF +:1005800067D1C16841F00201C160BFF36F8FBFF353 +:100590004F8F002001990958115004302028F9D1BB +:1005A0000592BFF36F8FBFF34F8F18460493F2F796 +:1005B00045F8049B059A012B3E4B51D1D96821F097 +:1005C0000201D96000238BF8143000284FD1019B21 +:1005D0002032203301939BF814307019824203D2E9 +:1005E000002CAED04FF0FF34002D11DD06F01F03BC +:1005F0002B44BFF34F8F304832463344C0F870224B +:100600002032991A0029F9DCBFF34F8FBFF36F8FA7 +:10061000BFF34F8FBFF36F8F274B0022C3F85022D9 +:10062000BFF34F8FBFF36F8FF6F7A2FA00287FF466 +:1006300078AF1E4B4FF440729A60002C7FF471AF7C +:10064000FDF7DEFFFEF700F8A9EB08094644474432 +:1006500010E7D0F80C1141F00201C0F80C1194E73A +:10066000D3F80C1121F00201C3F80C11AAE74FF0E6 +:10067000FF34B0E7039B044632460193ABE74FF0EB +:10068000FF34ABE74FF0FF340548FFF7C7FAFEF73A +:1006900045FE204607B0BDE8F08F4FF0FF34F8E785 +:1006A000801C002480E8F11F00FC3F000064025819 +:1006B000000300800020005200ED00E03C10002408 +:1006C000F0B590F8207085B0044615460391DDE939 +:1006D0000A6C7FB10768CDE9006C3F6CB84748B140 +:1006E000226933460399201D2A4405B0BDE8F04035 +:1006F000FFF7A2BE6FF47A6005B0F0BD10B50446F6 +:100700000168D0E901230548FFF796FE206806F04E +:10071000D7FC2046BDE8104006F0D2BCA02D002436 +:1007200010B504460B48FFF779FAFDF797FDFDF782 +:100730009DFFFDF777FFFDF763FFFDF785FF60681D +:1007400008B106F0BDFC0348FFF768FAFEF7E6FDC6 +:10075000002010BD801C002490F8203010B5044605 +:1007600013B94362002010BD2430F1F795FC002836 +:10077000F8D184F82000201DBDE81040FFF7D0BF5D +:10078000034B10B504460360FFF7E6FF204610BD9B +:100790004CA9010810B50446FFF7F2FF204606F009 +:1007A0008FFC204610BD000010B504461248FFF72C +:1007B00035FAFDF753FDFDF759FFFDF733FF0F4BFA +:1007C0000F4AD3F888109142FBD14FF48E010D4AA5 +:1007D00051614FF440729A60FDF712FFFDF734FF4C +:1007E0002020FDF7CBFD60600348FFF717FAFEF706 +:1007F00095FD002010BD00BF801C0024006402583D +:10080000000300800020005290F820302DE9F04FC6 +:10081000814685B003B9436209F1240656E8000F0A +:10082000013046E80003002BF8D1012843D109F13B +:100830000400FFF7B9FF804630B13046F1F72CFCD9 +:10084000404605B0BDE8F08FD9E906ABD9E90445CB +:100850001AEB040300934BEB05030193F1F7E6FB5E +:10086000002300F1006C8646DDE900018B4208BFE1 +:10087000844505D230466FF47A68F1F70DFCDFE766 +:10088000002D08BFB4F1006FF4D35AEA0B030ED168 +:100890004FF000610B1B029365EB45030393DDE909 +:1008A000026716EB0E0647F10007C9E9066701214A +:1008B00089F82010C4E79846C2E7000004460B4DB3 +:1008C00007B5EFF30583002BFBD1FEF7B9FC024619 +:1008D0000028F6D1204669464FF0FF33AC4600DFD2 +:1008E0000028EED1DDE900309847EAE7DDD90008BD +:1008F0002DE9F74F394D6C6C002C63D023694FF014 +:100900000008DFF8E0904FF0F90A013B6F692361BE +:100910002369002B55D1E3680BB1A2689A60D5F822 +:100920004CB004F118016B64EFF3058343B1BBF1E4 +:10093000000F13D1AB69032129486B61F1F7B8FAB5 +:100940000191FEF77DFC019902460028EFD158463F +:100950001346CC4600DF0028ECD11BE09BF80030AA +:100960000191FA2BE6D10BF10C00FCF774FB064663 +:100970000028DFD001990C30DBF8242006F0F8FBCA +:100980000199304686F800A0A6F80280C6E9011B4E +:10099000FDF7FAFBE378012B1DD16B6C0021626936 +:1009A00013B11869824210D22261C4E902131BB14B +:1009B00018699C60821A1A6159B1CC606C6C002C69 +:1009C000A6D16F6103B0BDE8F08F1946121ADB683B +:1009D000E6E76C64F2E701236370EFE73C01002473 +:1009E00027010280B9DB000808B5EFF3058353B196 +:1009F000124B1B689869FDF79DFF4FF47A72002334 +:100A000008F064FB08BDFDF7E3FDEFF305836BB170 +:100A10000B4BD8680B4B1A681860824281BF0A4999 +:100A20000A6801320A60FDF7BFFDEBE7FEF708FC3C +:100A30000028EDD1DFF814C000DFEBE7F01C002444 +:100A40003C010024FC1C0024F81C002491C900086F +:100A50002DE9F04FA1B0EFF30583002B63D0002008 +:100A60008A4D2C68FDF7B4FDD4E90C67FDF79CFDB9 +:100A7000A36BF11ADFF84882DFF8489267EBE37264 +:100A80001346CDE900120A1843F10003CDE908230B +:100A90007F4B0A9300230B93FDF79EFF08A8FBF7FB +:100AA0005FFE002840F02E826FF000434FF0FF32CF +:100AB000DDE908679F4208BF964210D02C6894F881 +:100AC0003C3063B9214604A8FDF743FFDDE9042368 +:100AD000BB4208BFB2422ED3012384F83D30FDF75C +:100AE00077FD08A8FBF73CFE002840F009826FF074 +:100AF00000414FF0FF30DDE908238B4208BF8242FE +:100B000062D1FDF765FD634B1B889BB2002B65D05E +:100B1000FDF75EFD604B1B68604B1A6922F0040212 +:100B20001A6130BFE9E1FEF78BFB002897D1DFF8AF +:100B300098C100DF94E7FDF74BFDD4E90C01FDF708 +:100B400033FD4FF47A73B6EB000A67EB010BA6FB9B +:100B5000030103FB0711D4E9082386184FF00102B3 +:100B600041EB030794F84030A28783B9A3691B685F +:100B700093F82030002B40F0E58184F84020FDF709 +:100B8000FFFCBBF1000F08BFBAF1050F0DD2002327 +:100B900084F83E3094F8403023B9012384F8403083 +:100BA000FDF7EEFC32463B460AE094F84030002B5D +:100BB000EDD10123B6F57A6284F83E3047F1FF3378 +:100BC0002046FEF78BF98AE72B6893F83C30002B20 +:100BD00097D1FDF7E9FCBFF36F8F5FE7D8F80040CE +:100BE00014F0010405D04046F1F77EFBB0FA80F422 +:100BF00064092B480368DB0704D5F1F775FB00286F +:100C000008BF012427480368DF0704D5F1F76CFB10 +:100C1000002808BF012424480368DE0704D5F1F743 +:100C200063FB002808BF012420480368D90704D5C6 +:100C3000F1F75AFB002808BF01241D480368DA07B2 +:100C400004D5F1F751FB002808BF012419480368B7 +:100C5000DB0704D5F1F748FB002808BF012416483C +:100C60000368DF0704D5F1F73FFB002808BF012424 +:100C700012480368DE0703D444B3FDF795FCA8E7E8 +:100C8000F1F732FB0028F7D1F7E700BFF01C002492 +:100C900015CA00082C2D00240048025800ED00E081 +:100CA0000044004000480040004C0040005000401C +:100CB0000014014000780040007C0040000C005807 +:100CC00000100140640E002489EE0008FDF780FC4E +:100CD000D9F800309F4E5A6A5B6B9F4F33609F4B31 +:100CE0003A609F4CDB6823609E4B19681A6801F0DC +:100CF000010142F001021A609B4A1268C2F303121A +:100D0000072A00F0AF805A6922F004025A611A687B +:100D100042F001021A60944A1068C0F303100728D9 +:100D200010D1186920F001001861136943F0040321 +:100D30001361BFF34F8FBFF36F8F30BF136923F081 +:100D40000403136121B1874A136843F00103136060 +:100D50008649874BD1F890209A42FBD1814B1A6982 +:100D6000910640F1B4805B699A0640F1B0807F49FA +:100D70007F4BD1F88C209A42FBD1482200210EA84B +:100D800006F004FA3F237B4A0D9313685B036ED58C +:100D90004FF4A0230E93136803F080031493764B53 +:100DA0001A6841F20303B3EB124F724A66D35368D9 +:100DB000C3F384631593136803F0010310936E4B20 +:100DC000196841F20303B3EB114F53682CBFC3F30F +:100DD0000533C3F306631193664B1A6F500751D561 +:100DE00005220F9201215A6F0DA802F00102129202 +:100DF0001A68C2F3003213921A689A6A02F0030268 +:100E000017929A6AC2F3051218921A6BC2F308027B +:100E1000013219921A6BC2F3066201321C921A6BEC +:100E2000C2F3462201321A921A6BC2F30642013211 +:100E30001B92DA6A02F00C021D92DA6AC2F34002D7 +:100E40001E925B6BC3F3CC031F9302230D931023FD +:100E5000CDE9101300231693F5F7AEF8C0B147485B +:100E6000FDF7E6FF1A6922F004021A614FE71368E2 +:100E700013F4803318BF4FF480338BE7D368C3F388 +:100E8000056397E71A6F12F0010218BF0122A8E765 +:100E900020220146079003900DA806F077F907A9D4 +:100EA0000DA8F3F7E9F9039B1B2207990DA81393EB +:100EB0000D920E9310931293F4F76AFF08B1304825 +:100EC000CEE7F5F761FF294B4FF44072DA60254A0F +:100ED0004FF4FA70136943F4007313614FF44072D6 +:100EE000224B1A61F1F7F6F9D9F800303A685A62E4 +:100EF00032685A632268194BDA60FDF755FBBCE68D +:100F0000FDF752FB2C682046FDF7A2FF002394F862 +:100F10004020A3871AB184F84030FDF701FB29680F +:100F200004A8FDF716FD049AEFF305833BB9FEF71D +:100F300087F920B9009BDFF84CC0D01A00DF21B040 +:100F4000BDE8F08FBBF1000F08BFBAF1050FFFF449 +:100F50001EAE2EE6D0350024D4350024000C00400F +:100F6000D83500240048025800ED00E00064025823 +:100F700000030080004402580010005CFEA301083A +:100F800023A4010895F0000800B595B0BFF35F8F6A +:100F9000804B0022196810465A60C1F30721914224 +:100FA00040F0BE801022DA607B4A1A611322DA60B8 +:100FB0007A4A1A611122DA60794A1A61794ADA604A +:100FC000794A1A6107225A60BFF34F8FBFF36F8FC0 +:100FD000764B774998684FF000531A1802F1604237 +:100FE000126843F8042B8B42F7D1704B4FF000523C +:100FF0009A605A69920315D45A6912F4003211D1D9 +:10100000BFF34F8FBFF36F8FC3F85022BFF34F8FE3 +:10101000BFF36F8F5A6942F400325A61BFF34F8FAA +:10102000BFF36F8F614B5A69D60327D45A6912F404 +:10103000803223D1C3F88420BFF34F8FD3F88020B0 +:1010400043F6E074C2F3C900C2F34E32520102EA21 +:101050000406014646EA81750139C3F86052F9D2A7 +:10106000203A12F1200FF2D1BFF34F8F5A6942F4A8 +:1010700080325A61BFF34F8FBFF36F8F4D4CD4F85E +:10108000E03043F00073C4F8E030D4F8E03003F00F +:1010900000730093009BF2F775F84449464BCA6809 +:1010A00022F4E0621204120C1343CB60F3F70EF942 +:1010B000A369A269C3F30323404AD35C03F01F036F +:1010C000D8403F4B1860F3F7E3FC236F9D070AD429 +:1010D0003C4A136843F4807313603B4B1B68236FD7 +:1010E00023F018032367F1F783FAF5F74DFEF2F7C3 +:1010F00049F84C22002101A806F048F82D4B1B6F3F +:1011000013F4407F10D0082301A8019300230A9311 +:1011100001230693F4F750FF30B12C48FDF788FE09 +:101120009A60013218613AE7EFF75EFAEFF3058350 +:101130002BB9FEF785F810B9DFF8ACC000DF244A00 +:10114000244B13614FF4805353614423D360224BEB +:10115000936018239361214B1360EFF305831BB158 +:101160001B491F48F0F7A4FEFEF76AF80146002865 +:10117000F6D11C48DFF874C000DF0028F0D0EFF390 +:1011800005832BB9FEF75CF810B9DFF864C000DF07 +:101190000021E6E790ED00E039F00206390702137E +:1011A0003FF50B13120000803900021300ED00E040 +:1011B00098020020004402580003FA050497010831 +:1011C00000000024004802580010005C4BA40108F5 +:1011D000002D0024001D0024D82E002469A401083D +:1011E0001D0101802D2A010885D60008B5D300080D +:1011F000D5EF00082DE9F34705460026674FFFF7B6 +:10120000F3FB85F82460FDF7E3F96B6801A91B1A6D +:10121000002B2B68D8BF686001931BB15A69121A62 +:10122000002A3BDD2B6003B11D610E60019911B1F5 +:101230002B8901332B81FDF7B7F901A8002931D1A2 +:10124000019C05F118094FF0010A002C37D1FFF776 +:10125000CBFBFDF7BDF92B68002B7ED05C69241A0F +:1012600024EAE474FDF7A0F9D5F83080EFF30583A4 +:10127000002B75D0B8F1000F7DD1AB7A002B00F0B8 +:101280008A80FDF7A5F9AB7A002B00F0828000235D +:10129000AB7202B0BDE8F047FDF786B903F1080173 +:1012A0009B68BAE78C680B4600229A601A46DB6896 +:1012B000002BFAD1026001F108002146BEE7236A43 +:1012C000D4F8088013B104F124009847A269002AD9 +:1012D0000BDB636913446361FFF786FB214602461B +:1012E0002846FDF74EFA4446AFE7EB6873B1A342D8 +:1012F0000CD82B6AA34209D3A3792A690133DBB244 +:1013000013FA02F214BFA37184F806A0E36913B1C3 +:1013100004F124009847EB6823B1A34202D82B6A5A +:10132000A34201D2A671DEE7FDF752F94846AB6948 +:1013300083B119682268914208D30BD1E360036836 +:101340009B68A3600460FDF72FF9CCE703F1080068 +:101350009B68EDE7E6600368F3E74FF0FF3481E751 +:10136000FDF76EFF0246002884D140460121234646 +:10137000BC4600DF81E798F80030F32B7FF47DAFA7 +:10138000002C7FF47AAF224601214046FCF7FCF99D +:1013900073E7FDF709F9FFF727FB34E7C5D7000826 +:1013A0002DE9F04700238AB0814642F21078DFF839 +:1013B0005CA001240025002600278DF82730EFF3DC +:1013C00005832BB9FDF73CFF10B90120D44600DF9F +:1013D0000DF127034FF0FF32052148460493002307 +:1013E000CDE9064500934FF0FF33CDE9026700F0E9 +:1013F0007FF89DF8273013F0010002D0B8F1010802 +:10140000DDD180F001000AB0BDE8F087ABD800085C +:10141000F0B500238BB0002600278DF827304FF061 +:10142000FF320493062100934FF0FF330446CDE9C9 +:101430000667CDE9026700F05BF8054618B14FF08A +:10144000FF300BB0F0BD2046FFF7AAFF0028F6D012 +:1014500001220023052120460095CDE906230DF148 +:1014600027034FF0FF3204934FF0FF33CDE90267BB +:1014700000F03EF80028E2D19DF8270080F002003D +:1014800040F34000DDE770B51D46D0F8F43086B07B +:101490000646013317D0140E8DF81740FFF7B8FF3A +:1014A00070B901234FF0FF32D6F8F41000930DF11C +:1014B0001703CDE90100301DF1F7B8FD06B070BD8E +:1014C0004FF0FF30FAE790F8FA31032B0ED06B1C87 +:1014D00008BFB2F1FF3F09D0002D08BFB2F1807FF5 +:1014E0002CBF4FF0FF30002040B2E7E70020E5E7D7 +:1014F0002DE9F7430A9E044615460C9FDDF8388017 +:10150000DDF840900191FFF7BEFF58B933462A46F7 +:101510000199201D0A97CDE90B8903B0BDE8F0437E +:10152000F1F784BD03B0BDE8F083D0F8E8300133B3 +:101530002DE9F047054688B08A461DD1FFF768FFC0 +:1015400028B14FF0FF34204608B0BDE8F0870022F4 +:10155000002301210490CDF800A0CDE90623D5F8A1 +:10156000E4304FF0FF32CDE902304FF0FF33284630 +:10157000FFF7BEFF0446E6E7FFF74AFF0028E0D189 +:101580004FF000084FF000090126002704904FF0AB +:10159000FF324FF0FF3301212846CDF800A0CDE9FE +:1015A0000689CDE90267FFF7A3FF04460028CAD1E8 +:1015B0002846FFF72DFF0028C3D14FF0FF324FF030 +:1015C000FF33D5F8E8100494CDF800A0CDE90689E2 +:1015D000CDE90267CBE7F0B5012289B000230026F0 +:1015E00000270C46049105210546CDE9062300237A +:1015F0004FF0FF3200934FF0FF33CDE90267FFF762 +:1016000077FF98B9D5F8E430013B0FD00134009052 +:101610004FF0FF32D5F8EC100494CDE90630CDE957 +:1016200002674FF0FF332846FFF762FF09B0F0BDB5 +:10163000F0B500F1BC07044689B03846FCF70EFE51 +:1016400094F804522DB93846C4F80052FDF766FEEE +:1016500009E0D4F80062013EC4F8006236B100250A +:101660003846FDF75BFE284609B0F0BD0022002396 +:101670000421204604960096CDE90623CDE90223F5 +:101680004FF0FF334FF0FF32FFF732FF002884F8AE +:10169000046238460CBF00256FF47A65FDF73EFE04 +:1016A000D4F8B430002BDED11048B4F9B840FEF7BE +:1016B000B5FAFCF7D3FD0E4B1B6803F114011A4673 +:1016C0000233B2F90000A0420CD14FF6FF73138031 +:1016D000084A1368002B01DD013B13600348FEF745 +:1016E0009DFAB3E78B42EAD1F8E700BF300F002440 +:1016F000580F00245C0F002408B50448FFF710F8C9 +:101700000348FFF795FF002008BD00BFA02D00246F +:10171000601000242DE9F04700F1BC0788B00446B2 +:101720001546109E384605938946FCF797FD2A46D4 +:10173000059B2046D4F8E0A00796FFF7A4FEA0BBC7 +:1017400094F8FD3104F1040894F8F921039340461C +:1017500094F8FE31029394F8FB31CDE9002394F81C +:10176000FA3194F8F811FEF7EBFB0646E8B994F865 +:10177000FB0107AB5146B0FA80F04009CDE9009378 +:1017800042422B464046F1F7B9FB05463246314608 +:101790004046CDE90266CDE9006694F8FA31FEF7DD +:1017A000CFFB45EA000464B20CB16FF47A643846AA +:1017B000FDF7B4FD204608B0BDE8F087B0F1104F4A +:1017C00013B50C4608D24B1E024490420CD010F8C0 +:1017D000011B03F8011FF8E70023CDE9002300F106 +:1017E000E0420348FFF796FF204602B010BD00BF5D +:1017F000601000242DE9F04F92469B468DB00446C0 +:10180000D0E944239B4508BF924528D2D0F828C18F +:10181000BCF1000F23D0BCF1010F0CD000F5B47E59 +:101820000025AC451BDDFEE80201594508BF5045C7 +:1018300002D20135F5E70025611991F8541105919F +:1018400016991AEB010617994BEB0107BB4208BF2B +:10185000B24207D2614C20460DB0BDE8F08F4FF088 +:10186000FF35E9E7236852462046196B5B468847F7 +:1018700002460B465046594607F0DCFD1343E9D1BA +:1018800016F1FF3223682046196B47F1FF33884772 +:1018900002460B463046394607F0CCFD1343D9D1FA +:1018A00004F5E4730993DDE91623134300F09480F3 +:1018B000D4F81891B9F1FF3F59D11AF1FF334FF025 +:1018C00008074FF003060A934BF1FF330B9305F122 +:1018D000090304EBC3030893059B3B4224D0099BF7 +:1018E0004FF000095046594653F826301A4698469C +:1018F0004B4607F09FFD134316D1DDE916234B45F8 +:1019000008BF424510D30A9B13EB080306930B9BB9 +:1019100043EB09030793089BDDE90601D3E948235C +:101920008B4208BF824203D2013E4FEA5707D3D20F +:1019300004EB8606D6F8B891D6F8C86104F1BC0766 +:101940004FF000083846FCF789FC2046FFF760FDA1 +:1019500000283DD15B4652462046FFF794FD0346E2 +:1019600040B16FF47A643846FDF7D8FC73E74FF462 +:101970008056E3E7CDE90100009052464946201D1C +:10198000F1F754FB0028ECD11AEB060A169B4BEB3F +:10199000080B9B1B1693179B63EB08031793DDE95A +:1019A000162313430CD004EBC503D3E95A235B453C +:1019B00008BF52453FBF0135631993F85431059371 +:1019C0002046FFF7EDFC28B13846FDF7A7FC6AE793 +:1019D000034CC8E7034CC6E700243CE75BF0FFFF7D +:1019E0005CF0FFFF5DF0FFFFB0F1104F1FB5044644 +:1019F00010D300F1E04200230A480392FAF7EBFD0E +:101A0000039A0023CDE900010648FFF7F3FE80B2F8 +:101A100004B010BDF0F7EAFA214602460248FEF78C +:101A2000A3FBF4E760100024A02D00242DE9F04F63 +:101A30001F4600F1080304460E46154600F1BC0897 +:101A400000F104092DED028B08EE103A87B0DDE9B4 +:101A5000122313437CD0D4F8F0314FF0000B28460A +:101A600039469A461A4602935B4607F0E3FC129900 +:101A70005118009113994B410193DDE9000159453B +:101A80004FF0000B08BF504540462ABF029B129BF7 +:101A90009B1A0293029B9A46CDE904ABFCF7DEFB4E +:101AA0002046FFF7B5FC00284ED12A463B4620468B +:101AB000FFF7E9FC50B16FF47A644046FDF72EFC65 +:101AC000204607B0BDEC028BBDE8F08F94F898304B +:101AD000002BF0D0002EEED0049B002BEBD048461C +:101AE000FEF724FA4FF0FF332A4602214846FDF75D +:101AF0003DFB04AB324604F16C0118EE100AF1F71D +:101B000029FA03904846FEF707FA039B002BD2D12F +:101B1000DDE904239B4508BF9245CCD1029B15EB20 +:101B20000A0520461E44129B47EB0B07B3EB0A0342 +:101B30001293139B63EB0B031393FFF731FC28B154 +:101B40004046FDF7EBFB82E7024CB6E7024CB4E7F8 +:101B50000024B5E75CF0FFFF5DF0FFFFB1F1104F2F +:101B6000F0B506468BB00D4614461AD3002200236A +:101B70004B4801F1E045FAF72EFD0B4600210246E5 +:101B8000474899424FF00003314608BF944238BF9E +:101B900014462A46CDE90043FFF748FF80B20BB058 +:101BA000F0BD104605F084FA22463146074605F09E +:101BB000DFFA0C2005F07CFA3A4B00228460059392 +:101BC00006AE394B0492CDE9023002ABC0E9007594 +:101BD0000FCB364D86E80F00FCF7FAFC2B4653F886 +:101BE000184F6CB9EB69332B4FD92C6A343B04F195 +:101BF0003402EB6134232A6223600123A37108E0DD +:101C00002268332A3DD9E268002A37D01A60A368D7 +:101C10009360FCF7C9FC00224FF0FF3304F1240766 +:101C2000C4E9052396E80F0087E80F00204BE36125 +:101C3000FEF7DAFE1F4B0246214623626369034426 +:101C40001A486361FCF79DFD2A6BEFF3058313B916 +:101C5000FDF7F6FAE8B1D2B11378F32B17D102F100 +:101C60000C03012153E8004F44EA010043E800055A +:101C700005B1F7E71046FCF787FA08E0A2681A609A +:101C8000C7E704F10803A468ABE7FCF78DFC00206C +:101C900085E710460121DFF820C000DFF7E700BF2D +:101CA00060100024CBD80008FD0601084419002468 +:101CB000F3D80008EFD8000815D800082DE9F04F38 +:101CC000D0F8B4A005462DED028BB5B0BAF1000FE7 +:101CD0000CD0AE4AAE4BBAF1FF3F0CBF92469A46CB +:101CE000504635B0BDEC028BBDE8F08F00F1BC036F +:101CF000184608EE903AFCF7B1FA2B1D52465146B1 +:101D000008EE103A95F8FA3118EE100ACDE902AA59 +:101D1000CDE900AAFEF714F930B16FF47A6A18EE33 +:101D2000900AFDF7FBFADBE795F804320BB9C5F82A +:101D300000A2D5F800620136012EC5F80062EED18E +:101D40000023D5F8F44185F8FB3185F8FD3195F88D +:101D50009830002BE1D018EE100AFEF7E7F818EEE5 +:101D6000103A2146C5F89040181DF2F76BFB8046EB +:101D700018EE100AFEF7D0F8B8F1000FCDD12846C2 +:101D8000FFF70EFB002800F0D584824F032220AC21 +:101D90009F213B7828460494BB468DF88030002371 +:101DA000CDF80080ADF88180CDE906230022002324 +:101DB000CDE902234FF0FF324FF0FF33FFF798FBDE +:101DC0000028AAD19DF88030BF2B00F0B58000F22A +:101DD000A580012B00F0B6809D2B00F0B080002381 +:101DE00010AEDFF8B8812946304600270DF17009A2 +:101DF000C5E94233C5E94833CDE9208394E80C00B6 +:101E0000F0F7DEF84FF05A0C96E80F00082684E849 +:101E10000F000123002220462399CDF80C90B246F2 +:101E20000296CDE9003CCDE9046700238847B8421B +:101E3000CDF828806FDB04225749484607F0AEF8FA +:101E40008046002867D19DF87530012B63D19DF83D +:101E5000763032460B933B4637461E4601215A20C8 +:101E6000CDE90476CDE90010CDE902A920462399F9 +:101E7000CDE90C32884700284DDB9DF87230012BEC +:101E8000099348D11D99080EFF28DDE90C3212D1C3 +:101E90009DF87000812865D084286DD058B921F054 +:101EA0007F41C5F808119DF8731089005029A8BF1B +:101EB0005021C5F80C1108320B9808F1010143F1CB +:101EC000000340454CDC0A9B002714AE29462093B2 +:101ED0003046219794E80C00F0F772F80DF1700C81 +:101EE00096E80F008CE80F00D5F80C310822012687 +:101EF00060461F9903940096CDE904375A23CDE933 +:101F00000132D5F808213B468847824618B99DF929 +:101F10008730BB4246DADFF888A000E7C22B7FF4A7 +:101F20005EAF032385F8006185F8F000C5F8E43062 +:101F30001523C5F8EC3052E785F802014FE7C5F8E4 +:101F4000E4604CE79DF88130022B7FF448AF9DF8A8 +:101F50008230202B7FF443AF012385F801313EE727 +:101F600088467BE721F07F41C5F820119DF873106A +:101F70008900C5F824119EE721F07F41C5F8D811EA +:101F80009DF873108900C5F8DC1194E75AF0FFFF43 +:101F900059F0FFFFB8A401086EA40108A9FF0008CA +:101FA0005EF0FFFF219B0133DB08C5E94430D5F823 +:101FB0000C31282B89BF9DF8A8304FF480761B1177 +:101FC0009E409DF8BD3013F00802C5F8F0615AD06C +:101FD0000021002300204FF0FF32049300934FF0C4 +:101FE000FF33CDE90601CDE90201F0212846FFF7D4 +:101FF0007FFA00288FD12846FFF7D2F9064600283D +:1020000089D0D5F80C011C285FD9012305F5DC71B6 +:1020100005F5E47C4FF0FF3E9846227F41F804EB43 +:1020200008FA02F2012ACA600ED9677F41F8047CDF +:10203000D5F86071BA4200D30FB9C5F8602195F8A0 +:1020400054211A4385F854215B008C4504F10204A5 +:10205000DBB2E2D19DF882309F063DD59DF88930F4 +:10206000C5F8E0309DF8883003F01F025B119B003B +:1020700085F8FD2185F8FB31022385F8F93100262A +:1020800085F8FE3141E0DB067FF545AF00260027ED +:1020900004924FF0FF33009266214FF0FF32284642 +:1020A000CDE90667CDE90267FFF722FA00287FF441 +:1020B00032AF4FF0FF324FF0FF3399210490009080 +:1020C000CDE90667CDE9026790E79DF88130FF2BE7 +:1020D000C5F81831BED11EE7102866DD9DF89020A6 +:1020E000D40662D59DF89B30C5F8E0309DF89A3053 +:1020F00003F01F025B119B0085F8FD2185F8FB3181 +:10210000022385F8F93185F8FE3195F8003193B353 +:1021100000229BF8003018EE100A8DF8603011464E +:102120000223ADF86120CDE90222CDE90022FDF7BE +:1021300007FF00BB18A92846FFF74DFAD8B99DF84C +:102140006230284643F002038DF86230FFF760F9F1 +:1021500088B918A92846FFF7E8F9044658B928466F +:10216000FFF71EF938B118A92846ADF860408DF880 +:102170006240FFF730FA9BF8002000238DF83C20E6 +:102180008DF860209DF8BA20ADF83D30C2F3021200 +:10219000ADF86130013A042A00F2FE80DFE812F067 +:1021A000B60022012601B600B60058060ED59DF8ED +:1021B0008B30C5F8E0309DF88A3003F01F025B11C8 +:1021C00085F8FD2185F8FB31022358E79DF8902022 +:1021D000D1077DD59DF89730C5F8E0309DF8963051 +:1021E00003F01F025B115B0085F8FD2185F8FB31D0 +:1021F000012385F8F93185F8FE3195F8F030BBB14F +:10220000D5F80C313F2B13DD9DF8BF3013F04002A1 +:1022100000F05E8103234FF0000B85F8FA3195F84A +:10222000FA31032B00F0E281BBF1000F7FF473AEB3 +:102230002846FFF7B5F800283FF46DAE0A9B18AEAC +:102240004FF000090DF1800829462093CDF88490C5 +:1022500030461CAC98E80C00EFF7B2FED5F820B180 +:1022600096E80F0084E80F00BBF1000F04D0D5F80A +:102270002461002E40F0C8810123C5F82831D5E93A +:102280004432C5F82C3113F1FF3342F1FF32C5E976 +:102290005A32D24B28461B788DF880300023ADF897 +:1022A0008130FFF77DF800283FF435AE95F8024104 +:1022B000002C00F00982012C00F020822846FFF754 +:1022C0006FF800283FF427AE012385F8043226E595 +:1022D000DA0606D59DF88F30C5F8E0309DF88E30CF +:1022E0007EE7DB070ED59DF88D30C5F8E0309DF810 +:1022F0008C3003F01F025B1185F8FD2185F8FB315E +:10230000012378E70323C5F8E03076E70123C5F819 +:10231000F830C5F8FC30D5F8F8305F1C09D0D5F896 +:10232000FC104C1C05D034AA134401228A4003F847 +:10233000942C18A92846FFF74EF99DF862309DF8B5 +:102340003E202846BDF83C101343BDF860209DF8A0 +:102350003C700A4318A99DF83D40ADF860208DF807 +:102360006230FFF7E2F82846FFF71AF800283FF43A +:10237000D2AD002318A92846ADF860308DF8623040 +:10238000FFF729F99DF860301F409DF861301C402F +:1023900057EA04033FF4BFAD002E3FF42EAF9DF883 +:1023A000B9309DF8B8201B0103F0100343EA121363 +:1023B000082B66D037DC022B23DC002B3FF41DAF4B +:1023C0000021002300204FF0FF32049300934FF0D0 +:1023D000FF33CDE90601CDE9020138212846FFF798 +:1023E00087F80AE7C5F8F830062392E7C5F8F83011 +:1023F00007234FF03E0EC5F8FC303F23C5E93AE312 +:1024000089E7042B7FF4F9AE0021002300204FF070 +:10241000FF32049300934FF0FF33CDE90601CDE97D +:1024200002013521DAE7102B7FF4E7AE0126002701 +:1024300018AC4FF000084FF000094FF0000B4FF0C0 +:10244000FF324FF0FF33652128460494CDF800B0E9 +:10245000CDE90667CDE90289FFF74AF89DF86030BB +:102460004FF0FF32612103F07F030494CDF800B0F8 +:102470008DF860304FF0FF33CDE90667CDE9028972 +:10248000ACE70126002718AC4FF000084FF0000918 +:102490004FF0000B524A0023652128460494CDF8E2 +:1024A00000B0CDE90667CDE90289FFF721F89DF874 +:1024B00060304B4A712143F040030494CDF800B0E2 +:1024C0008DF860300023CDE90667CDE9028985E704 +:1024D000D80711D50020002104920092CDE9060111 +:1024E000CDE902014FF0FF324FF0FF33B72128460C +:1024F000FEF7FEFF60BB8DE613F002020DD028460A +:10250000FEF786FF002865D100220023049000908A +:10251000CDE90623CDE90223E4E713F0100139D019 +:102520000126002718AC4FF000084FF000098DF885 +:10253000602000924FF0FF334FF0FF32B521284664 +:102540000494CDE90667CDE90289FEF7D1FF10B109 +:10255000DFF890B063E69DF86030284643F0010351 +:102560008DF86030FEF754FF834698BB04904FF01F +:10257000FF324FF0FF33B12128460094CDE90689A0 +:10258000CDE90267FEF7B4FF0028E1D1032385F807 +:10259000FA3144E613F0080013D08023002204919E +:1025A00017218DF860300023CDE906230122002396 +:1025B000CDE9022318AB4FF0FF3200934FF0FF3309 +:1025C00095E713F0040B4FF00203E0D0C522C5F8E5 +:1025D000F42020E6DFF810B021E600BFB8A401081F +:1025E000030080005EF0FFFF5CF0FFFF002218EEAA +:1025F000100A1146CDE90222CDE90022FDF7A0FC28 +:1026000000283FF411AE86E4304604F051FD074641 +:1026100000283FF480AC5A23082103905A462046F4 +:10262000CDE9013101231F9900934B46CDE904699F +:10263000884700283DDB3E78D5F824C116F0020615 +:1026400094E80F0088E80F0040F0B98007EB0C0910 +:102650003C460834A1452CD30120002114F8063C47 +:1026600014F805BC54F8042CCDE904010FA9404628 +:10267000039103F00F019B09029114F8071C0093CA +:102680000023019123998847002812DB9DF83C30F4 +:10269000760014F8082C1BEA030FF6B2237818BF53 +:1026A00046F00106D20703F0020300F18A80002BF6 +:1026B000CFD04FF0FF347BE0099901334900042B60 +:1026C000C9B2099169D173E02846FEF7A1FE00283E +:1026D0007FF421AC0022002304909821009028462A +:1026E000CDE90623CDE902234FF0FF324FF0FF334F +:1026F000FEF7FEFE00283FF4E1AD0CE420A92846D9 +:10270000FEF769FF00287FF406ACD5F8F8307BB9F6 +:10271000D5F8FC309C4044F00304E4B29DF88030CE +:1027200020A928461C408DF88040FEF7FEFEE1E718 +:102730000324F3E7DFF8C4A0FFF7F1BA0CF10103BB +:102740000A2BC5F82831B4DC6FF4AA79043405F5F6 +:10275000967805F5AA7605F5B47E00210F22A9EB3F +:102760000509236814F8040B23F0FF0300F00F00A1 +:1027700003F58073024048F8043B013B06F8010B67 +:102780000B44D9171846EEE80201591C09EB060361 +:102790009C45E6DC0023C5F86031099911EA020482 +:1027A0008AD005EB83030024D3F8C831C5F8603123 +:1027B000384604F085FC01343FF4ADAB69E53C4696 +:1027C0004E46D5F824213A44217888077FF571AF29 +:1027D00004F108039A42FFF46CAF94F802C00CF1C4 +:1027E000020304EB83039A42FFF463AF6078B042C4 +:1027F000A4D0C9073FF55DAF1C46E5E75DF0FFFFDC +:1028000073B51F4C04F1560504F15A06B4F8541080 +:1028100028460191FAF7BBFA58B301993046FAF706 +:10282000C3FAE36D53F8200018B30378F13B082B8B +:10283000ECD801A252F823F05D2801080D28010808 +:10284000632801080D2801080D28010867280108E0 +:102850006B2801080D2801086F280108236E98478E +:10286000D4E7636EFBE7A36EF9E7E36EF7E7236F48 +:10287000F5E7002002B0BDE87040FAF795B900BF57 +:102880003C0100241F4B186870B53830EFF704FC8A +:1028900018B11D4B4FF080625A601C4CE368013345 +:1028A000E360FAF7DDF90020FAF77EF9236D03B152 +:1028B0009847226C2AB3A369E16B994203D0D96986 +:1028C000E36301B9DA61DA69BAB9267A022E18D15E +:1028D000656AB5B1E36B95F9202093F920309A42EF +:1028E0000FD12846FAF7EAF8E06BFAF755F96E705F +:1028F000236CE563A561EB6103E0013ADA61002A2C +:10290000E3D070BDF01C002400ED00E03C01002489 +:10291000024608B5EFF3058313B16FF0050008BD5B +:10292000FCF78EFC0028F8D11046DFF808C000DF65 +:10293000F5E700BFA9D2000870B51D4B0546044657 +:1029400045F8543B2846FBF789FC206C6669FCF788 +:1029500095FC0023636194F83D306BB9012384F842 +:102960003D304EB1EFF3058333B9FCF769FC18B97C +:102970003046DFF840C000DF2846FCF7CFFC94F873 +:102980003C302BB1A06A08B104F09AFB0023A3628B +:10299000606DFFF7BDFF226CEFF3058333B9FCF7E1 +:1029A0004FFC18B91046DFF810C000DF204670BD9C +:1029B000A49A010875D1000845D2000810B5044654 +:1029C000FFF7BAFF204604F07BFB204610BD000055 +:1029D000024608B5EFF305830BB1002008BDFCF7F4 +:1029E0002FFC0028F9D11046DFF804C000DFF5E71E +:1029F000E9D50008074B10B504460360FEF718FE42 +:102A0000D4F8BC00FFF784FF201DFDF73BFB2046F8 +:102A100010BD00BF2899010810B50446FFF7EAFF72 +:102A2000204604F04DFB204610BD00001FB5134B9F +:102A30006C460B250FCB84E80F0020461C24FFF7C3 +:102A4000C7FF0F4B18600F480F4B456003600F4BDB +:102A5000C4608360FFF7BCFF0D4B18600D480E4B40 +:102A6000C460C0E900350D4B8360FFF7B1FF0C4B2C +:102A7000186004F07BF9FCF7E1FB00BFBCA401087F +:102A8000A8350024E02D002483A40108F42D00249F +:102A9000F02D0024302D002490A40108442D0024A2 +:102AA000402D0024042301480B807047700200244D +:102AB000122301480B8070475C020024036818470A +:102AC00000F07B43B3F1005F0ED000F07743B3F129 +:102AD000405F09D000F07F40B0F1805F14BF4FF03D +:102AE000FF304FF001607047004870470000040855 +:102AF000BFF34F8F0549064BCA6802F4E0621343E7 +:102B0000CB60BFF34F8F00BFFDE700BF00ED00E0DB +:102B10000400FA0508B5D0F8B4325B689847002085 +:102B200008BD08B5D0F8B4320BB9022008BD1B6847 +:102B300098470028FAD0F8E7D0E90030184700009D +:102B40000A23038000487047E802002400207047F1 +:102B50000020704700207047002070470020704719 +:102B6000002070476F2303800048704778020024DC +:102B70000048704798AA0108D0E90931C26A006A82 +:102B8000424301FB0323A0FB010119447047D0E934 +:102B900006017047D0E904017047D0E9020170478F +:102BA00001682DE9F04717469846096B0646DDE9AE +:102BB000089A884702460B463846414606F03AFCDA +:102BC000134302D00020BDE8F08717EB09043368F7 +:102BD000304648EB0A0514F1FF32196B45F1FF331B +:102BE000884702460B462046294606F023FC13433D +:102BF000E8D1336830469B6B9847A94208BFA04292 +:102C00002CBF01200020DEE72DE9F0471E460368B7 +:102C1000154604469B6ADDE9087A984702460B464A +:102C20002846314606F006FC134302D00020BDE8DA +:102C3000F087236820469B6A984702460B46384631 +:102C4000514606F0F7FB1343F0D115EB0708236854 +:102C5000204646EB0A099B6B9847494508BF40450B +:102C60002CBF01200020E2E72DE9F0471E46036853 +:102C7000154604465B6ADDE9087A984702460B462A +:102C80002846314606F0D6FB134302D00020BDE8AB +:102C9000F087236820465B6A984702460B46384611 +:102CA000514606F0C7FB1343F0D115EB0708236824 +:102CB000204646EB0A099B6B9847494508BF4045AB +:102CC0002CBF01200020E2E74FF0FF30704703687F +:102CD000DB6A18470020704710B50224C0E90722BC +:102CE000C0F89442D0F8C002EFF711F9002010BDEF +:102CF00008B5002204231146C0F89432D0F8C0026F +:102D0000EFF705F9002008BD37B54B7804460D46AE +:102D1000092B45D8DFE813F0040120014400190114 +:102D2000440088000A004400EC00B90000234988F0 +:102D3000ADF806300B0A013B062B31D8DFE803F073 +:102D40000416233030515B00D0F8B0321B680DF10F +:102D50000601207C9847BDF80620002A5FD0EB884A +:102D6000002B53D12046FFF7C3FF5BE0027CD0F875 +:102D7000B43232B99B6A0DF10600984702234370C2 +:102D8000E9E7DB6AF7E7C9B2052921D8DFE801F0F6 +:102D9000030C1014181CD0F8B0325B68002BD6D18D +:102DA0002046EFF7A9F83DE0D0F8B0329B68F5E790 +:102DB000D0F8B032DB68F1E7D0F8B0321B69EDE74C +:102DC000D0F8B0325B69E9E7D0F8B0329B69E5E74B +:102DD000D0F8B4329B6B002BE2D00DF1060298477D +:102DE000B9E7037C002BDBD1D0F8B4320DF106003B +:102DF0005B6B9847AFE7037C002BD1D1D0F8B4329E +:102E00000DF106001B6B98470723B8E79A4201466D +:102E1000204628BF1A46ADF80620FFF75DFFEB8875 +:102E2000002B9FD003B030BD8B88002BB8D1C88851 +:102E30000028B5D14D887F2DB2D894F89C32032B51 +:102E4000AED0EAB2D4F8C03284F89E2293F8BC1314 +:102E5000012910D083F838201A68D2F8001821F41C +:102E6000FE61C2F80018D2F8001841EA0511C2F854 +:102E7000001883F8BC032046FFF73AFF1DB1022378 +:102E800084F89C32CEE70123FAE78978384D01298E +:102E9000297085D890F89C32022B08D0032B15D0CE +:102EA000EFF72AF829782046FFF734FEBAE7002921 +:102EB0003FF458AF01210323416080F89C32204643 +:102EC000FFF72FFE02287FF44DAF69E731B90223E7 +:102ED000416080F89C32FFF71DFE43E741680129FD +:102EE0003FF440AFC9B2FFF715FE29786160E6E70D +:102EF000CA88012A7FF454AF90F89C32022B0AD87A +:102F0000002B3FF44DAF0146002341F8083F204617 +:102F1000FFF7E2FE86E7032B7FF442AF011DF6E7E1 +:102F200090F89C32013B022B3FF63AAFCB88022B44 +:102F30007FF436AF0123C360D0F8A4320BB1032372 +:102F4000C360022204F10C01E1E74B88012B7FF4FE +:102F500069AFC4F8A43205E790F89C32013B022B1C +:102F60003FF61EAF4B88012B7FF45CAF0023F0E7E8 +:102F7000043A002438B5036804460025DB6C984702 +:102F8000104B03227C2083F830200F4A116821F077 +:102F9000030111605D631A6083F83050EFF7ACFAFB +:102FA0000A4A2046D2F8DC3023F40073C2F8DC3041 +:102FB000236884F8545084F880501B6D9847284645 +:102FC00038BD00BF94120024002402480044025877 +:102FD00038B5D0F8B432044601795B689847D4F824 +:102FE000C04294F8BC33012B21D02568012384F81A +:102FF000BC332846AB6823F00103AB60F0F70AFA54 +:103000004FF48463226813610A4B013B02D01169BB +:103010008906FAD4A36A012B06D1A369012B03D038 +:10302000AB6B23F48033AB63002384F8BC33002004 +:1030300038BD00BF410D030008B5FFF7C9FFFFF71A +:1030400057FD00002DE9F7430D7800230646D0F820 +:10305000B84215F06005ADF8063000F07C81202DF7 +:1030600040F08F8191F80180B8F1060F00F289815C +:10307000DFE818F0440107004300B4000B0122010F +:10308000270141F21803CA88E05C02B3022801D08C +:10309000052818D1498804F58053196041F20403CA +:1030A00041F21801E2500323635441F214016354C6 +:1030B0002146D6F8C002C6F89432C6E95722EEF788 +:1030C0003BFF002515E03046EEF716FFF9E705282F +:1030D00001D00228F7D14FF483720025E25241F269 +:1030E00011030622E55441F21203E55241F21403A2 +:1030F000E254284603B0BDE8F083CA8841F21800C4 +:10310000002A5FD0205C04F58053022801D00928F2 +:1031100052D14F8841F204091F6041F2180344F86C +:103120000920DFB9032A21464FF0030298BF4FF070 +:10313000090804F8038041F21103E75441F2120335 +:10314000E75241F2140304F803804FF40453238040 +:103150004123A3703046FFF7BFFDB2E7012F41F2D4 +:1031600011011BD009200025023FE05441F2120357 +:1031700065542146E55241F21403E05441F208033C +:10318000E058D6F8BC3200EB0730DB69984734F8DA +:10319000092001463046FFF79FFDAAE70F220025D0 +:1031A000E25441F212036554E55241F21403E25431 +:1031B0003046EEF7A1FE9CE7002541F20402A5503F +:1031C0001D60F5E7022341F211012354625441F2DC +:1031D0001201625241F21401635472E741F2180283 +:1031E00004F58055A35C1035032B04D0062B2DD09D +:1031F00006222946AEE741F2040341F21100E358EA +:10320000EBB1042341F21201A35400222254625272 +:1032100041F21402A35441F20803E05804F580532C +:103220001968D6F8BC3231B92278412A03D11B6A19 +:103230002A469847DCE71B6A2A460121F9E705215F +:10324000A154235441F21202A3520DE041F219039A +:10325000E35C012B0CD10721A15441F21102A354CC +:1032600041F212030022E25241F21403E154BFE79B +:10327000002BBDD1564991F826104907B8D5022137 +:10328000A15441F21102A354DCE741F2180341F2C8 +:103290001001E25C0A2A07D102220025E25441F221 +:1032A00014036550E25224E70A22E2540E236350CD +:1032B00041F21403E25204E704F58051012218316F +:1032C00048E741F21802A35C092B3FF6FAAE4FF42F +:1032D0001B75DD40ED4315F001057FF4F2AE0223CE +:1032E000A35441F21002A55041F21402A35204F576 +:1032F00080531D6041F20403E550FAE641F21800E4 +:10330000225C092A14D84FF41B73D340DB4313F01B +:1033100001030DD10222225441F21000235041F248 +:103320001400225204F58052136041F20402A350AB +:10333000274B93F8275015F0100508D03046454626 +:10334000FFF746FED6F8C002F3F702FBD1E6488845 +:10335000F3F74CFCCDE64F780B2F12D8DFE807F0DF +:1033600006111111111116111111232C90F89C3214 +:10337000032B06D102220DF106013D46FFF7ACFCFE +:10338000B7E630460225EEF7B7FDB2E64B881B12D2 +:10339000212B05D1CA880F49092A28BF0922F9E63D +:1033A00000221146F6E690F89C32032BE9D104F591 +:1033B000805101220C31EDE68B78022BE1D890F898 +:1033C0009C22032ADDD141F20C02A35091E600BFFA +:1033D000780200249C020024F0B541F21802D0F8D3 +:1033E000B84289B00746A35C042B65D104F580562A +:1033F00041F20403316800294FD12278AAB9E35879 +:10340000012B41D1002541F2040341F21802E5509D +:1034100003233560A35441F21102A55441F2120274 +:10342000A55241F21402A3542BE0212A10D1E358F3 +:10343000052B29D1E378A2781B0403EB02236278E1 +:103440001344227903EB026341F20802A350D9E747 +:10345000412A19D1E358052B16D1E378A0781B0433 +:1034600003EB002360780344207903EB006041F212 +:103470000803E050D7F8BC325B6998470028C1D0F8 +:103480000225284609B0F0BD002341F20402384667 +:10349000A3503360EEF730FDB4E70129B2D941F211 +:1034A00008020239A058D7F8BC2200EB01312046AF +:1034B0009569E258A847E1E7072B4FF0000313D1C5 +:1034C00041F219016354184991F8265041F2110153 +:1034D00015F004050AD00620A05441F212026354EC +:1034E000A35241F21402A0541D46CAE70823A35474 +:1034F00041F212026554A55241F21402A354D0F8CD +:10350000BC321B699847094B094A002109480792B8 +:1035100006950092CDE9043704ABCDE902010648D7 +:103520000ECBEEF721FDACE778020024393001081C +:10353000392B0108400D0300B00E002438B50446B5 +:1035400041F21C0003F0B4FDC4F8B802E0B102225D +:1035500041F2180300F580510C4DC25200230B605C +:1035600041F20401435041F20801455041F20C017F +:10357000435041F21001435041F21403C252D4F8B7 +:10358000BC32DB68984700B1022038BD0000040857 +:1035900070B504460D46164600211C2203F0F6FDC8 +:1035A000204632462946FBF7DDFB204670BD38B584 +:1035B000D0F8B832002541F21801044603F58052D4 +:1035C000156041F204029D5002225A5441F210014A +:1035D0005D5441F214015A54D0F8B80218B103F006 +:1035E0006FFDC4F8B852002038BD00002DE9F04F3F +:1035F0008BB0016806469346149F159C0097019472 +:10360000496C8847002800F0BF8033683046DB6C87 +:10361000984796F8803043B9336830465B4C1B6D51 +:10362000984720460BB0BDE8F08F594C94F83030E5 +:103630002546012B5FFA83FA1AD14FF0000958464C +:10364000D6E908234946CDE9023205F0F3FE039A94 +:103650008046029BB81A4946584405F0EBFE804567 +:103660000746C4F8349005D9636B43F00063636385 +:10367000484C80E0236D984203D9636B43F000739C +:10368000F5E70323D4F8009084F83030236C9A06D1 +:1036900009D4414BC9F83830636B43F080636363EE +:1036A00084F830A0E4E7D9F814309B0106D53A4BF2 +:1036B000C9F83830636B43F40063F0E7A36B012B68 +:1036C00004D0032B36D04FEA482847022024002399 +:1036D000CDF814804FF4807A4FF4805805A94846FD +:1036E000CDE9064ACDE90838EEF712FB41F28832FF +:1036F00021464846EFF71EFF48B12B68264A9A63D9 +:103700006B6B18430123686385F83030B0E72C6891 +:1037100005A905972127CDE908082046CDE9067AB5 +:10372000EEF7F6FA41F2883239462046EFF702FF0B +:103730000028E2D100234FF4807226272C6805A9C7 +:103740002046CDE90723CDE905374FF4805309938F +:10375000EEF7DEFA4FF2186239462046EFF7EAFE3E +:1037600028B12B680C4A9A636C6B2043CAE701238B +:10377000044685F83030EFF771FF0428FBD1336839 +:1037800030461B6D98474CE7044C4AE774ECFFFF4A +:10379000941200246EECFFFFFF0FE01F75ECFFFF9B +:1037A0002DE9F04F8BB00E460168054693469A46C8 +:1037B000DDE91478CDE90078096C8847002800F02D +:1037C000FE802B682846DB6C984795F8803043B91B +:1037D0002B6828467B4C1B6D984720460BB0BDE8F4 +:1037E000F08FAB6D784C0393D5E90889EEF7CEFEE8 +:1037F000074626B9636B43F00063636368E094F89F +:103800003030012B40F0D78042464B465146584657 +:1038100005F010FE824642464B46DDE9140105F0F4 +:1038200009FE226D0AEB000100238046914263638A +:1038300003D9636B43F00073DFE7D4F800B00322D1 +:103840004FEA482984F83020CBF82C30A36B012BA9 +:103850004FF0FF33CBF8243018BF4FEA4A2ACBF899 +:103860002890B8F1010FDBF82C3023F0FF0343F070 +:103870009003CBF82C30DBF80C3043F04003CBF84E +:103880000C3027D92023CDF814A04FF0190AE36299 +:103890004FF4807100235846CDF818A0CDE90713E6 +:1038A0004FF4805305A90993EEF732FA41F28832BA +:1038B00051465846EFF73EFE78B32368434A9A6371 +:1038C000636B18436063012384F830300023E362A4 +:1038D0003F4C67E01023CDF814A04FF0180AE362C4 +:1038E000D6E7436B5A040CD5B9F11F0F09D906F17D +:1038F000200356F8042BB342C0F88020F9D1A9F177 +:103900002009EEF743FE039BC01B834205D82368C2 +:103910002E4A9A63636B6363D5E72068436B13F4A5 +:103920008D7FDED0C36823F04003C360436BDB05AB +:1039300009D5B8F1010F06D9A36B032B03D0EFF71C +:103940000FFF0028B9D12268506B10F0080005D095 +:103950001E4B9363636B43F00803DCE7516B11F07C +:1039600002010AD0194B9363636B43F00203636354 +:10397000012384F83030E062AAE7536B13F01003A0 +:103980000AD0124B9363636B43F01003636301230C +:1039900084F83030E1629BE70E499163012284F89C +:1039A00030201C46EFF75AFE0428FBD12B6828462E +:1039B0001B6D984711E7636B43F000531DE7064CFE +:1039C0000BE700BF74ECFFFF94120024FF0FE01F11 +:1039D0006CECFFFF3A0F001875ECFFFF2DE9F04F7C +:1039E0008BB00E460168054693469A46DDE9147889 +:1039F000CDE90078C96B8847002800F00E812B685C +:103A00002846DB6C984795F8803043B92B682846E8 +:103A1000834C1B6D984720460BB0BDE8F08FAB6D13 +:103A2000804C0393D5E90889EEF7B0FD074626B927 +:103A3000636B43F00063636369E094F83030012BFB +:103A400040F0E78042464B465146584605F0F2FCAE +:103A5000824642464B46DDE9140105F0EBFC226D3F +:103A60000AEB0001002380469142636303D9636B34 +:103A700043F00073DFE7D4F800B003224FEA48298F +:103A800084F83020CBF82C30A36B012B4FF0FF33A0 +:103A9000CBF8243018BF4FEA4A2ACBF82890B8F167 +:103AA000010FDBF82C3023F0FF0343F09203CBF837 +:103AB0002C30DBF80C3043F04003CBF80C3028D925 +:103AC0000223CDF814A04FF0120AE3624FF4807184 +:103AD00000235846CDF818A0CDE907134FF48053C2 +:103AE00005A90993EEF714F941F288325146584678 +:103AF000EFF720FD00283ED023684B4A9A63636BA2 +:103B000018436063012384F830300023E362474C9C +:103B100076E00123CDF814A04FF0110AE362D5E757 +:103B2000436B1A0419D5B9F11F0F16D9331D06F1CD +:103B3000240122680433D2F88020100A03F8082CEC +:103B400003F8070C100C120E03F8060C03F8052CF2 +:103B50008B42EED12036A9F12009EEF717FD039B29 +:103B6000C01B834207D823682F4A9A63636B43F0D4 +:103B700000436363C6E72068436B13F4957FCFD09F +:103B8000C36823F04003C360436BDB0509D5B8F17C +:103B9000010F06D9A36B032B03D0EFF7E1FD00283B +:103BA000AAD12268506B10F0080005D01E4B936319 +:103BB000636B43F00803DCE7516B11F002010AD09C +:103BC000194B9363636B43F002036363012384F82F +:103BD0003030E0629BE7536B13F020030AD0124BA6 +:103BE0009363636B43F020036363012384F83030F5 +:103BF000E1628CE70E499163012284F830201C4673 +:103C0000EFF72CFD0428FBD12B6828461B6D984745 +:103C100001E7636B43F000530DE7064CFBE600BF82 +:103C200074ECFFFF94120024FF0FE01F6DECFFFF08 +:103C30003A0F001875ECFFFF03682DE9F04FDB6CBD +:103C40009FB0B84C05469847B74BB84E4FF48042EA +:103C500023600423E2604FF0010863610023B44F46 +:103C60004FF0030923610EA93846C4E90133D6F8A1 +:103C7000E02042F04002C6F8E020D6F8E0201093A1 +:103C800002F04002CDF844900792079A0822CDE94D +:103C90000E28F2F787FE4FF400230EA9A548BB615A +:103CA0000227D6F8DC3043F40073C6F8DC30D6F8CF +:103CB000DC3003F400730693069BD6F8E03043F043 +:103CC0000203C6F8E030D6F8E03003F002030593B3 +:103CD000059BD6F8E03043F00803C6F8E030D6F88C +:103CE000E030CDF8449003F008030493049B0923CB +:103CF00012934CF21803CDE90F780E93F2F752FEAF +:103D0000C0230EA98C480E930B231293F2F74AFEA0 +:103D100005217C20EEF70CF8884B4FF08052DA60DA +:103D20008DF80F809DF80F30012B5FFA83F812D0C9 +:103D30007C20EEF7E1FBD6F8DC30284623F4007354 +:103D4000C6F8DC302B6885F854701B6D98477C48AA +:103D50001FB0BDE8F08F94F8303003F0FF0203B9D4 +:103D60002276032384F83030EDF7FEFF70B901238B +:103D700084F830304FF0006363630123284685F8F0 +:103D800054302B681B6D98476E48E1E721686E4BF5 +:103D90004A686E4FB0FBF3F33A401A435B00B0FB46 +:103DA000F3F06B4B4A600A68B3FBF0F042F0030299 +:103DB00001300A60F2F71AFF002320680893EFF73A +:103DC000A7FC834688BB4FF4D5700822D4F8009036 +:103DD0000EA9604ECDE90E024FF480724846CDE93F +:103DE000102B4FF480521292EDF792FF32684FF48D +:103DF000FA51B2FBF1F141F288324A43013A0DD354 +:103E0000D9F8341011F0450FF8D08904F6D4D9F858 +:103E10003420520710D50422C9F838200022206827 +:103E2000E263EFF775FCF0B18346012284F830209D +:103E3000636B43EA0B039FE7D9F83420D30701D51E +:103E40000122E9E7D9F83420500602D54022C9F80A +:103E500038200122E26300212068EFF740FC28B1FE +:103E60004FF0805BE1E7E26B012AF4D04FF6FE7978 +:103E70000021CA4637E02068EFF731FC834600286E +:103E8000D3D1354B29212268CDE90E314FF4807111 +:103E90004FF4805301921293CDE910100EA91046F1 +:103EA000EDF736FF33684FF4FA51019AB3FBF1F1A5 +:103EB00041F288334B43013BD2D3516B11F0450F94 +:103EC000F9D08904F7D4536B5B0702D504239363BD +:103ED000C6E7224B93632368D3F814B0089A4FEADD +:103EE000DB7101320892089A4A4501D80029C2D0F4 +:103EF000089A524513D81BF0804F01D00123A363C9 +:103F0000D4F80090D9F80030980729D14FF080609C +:103F1000012384F83030636B184360632DE74FF062 +:103F2000807B82E794120024002402480044025857 +:103F30000018025800040258000C025800E100E08A +:103F400073ECFFFF74ECFFFF00350C00002CC0FF8A +:103F50001021010000000024000010C1C500200055 +:103F6000A36B032B69D0002302224FF4805A0EA9C1 +:103F70004846CDF848A0CDE90E324FF44072CDE965 +:103F80001023EDF7C5FE4846EFF7ACFA0028BFD185 +:103F9000D4F80090D9F81430E366D9F818302367C4 +:103FA000D9F81C306367D9F82030A367A36B032BC3 +:103FB00043D04FF4807303210E90CDE90F13CDE968 +:103FC000110A0EA94846EDF7A3FE33684FF4FA52E2 +:103FD000B3FBF2F241F288335343013BC0F01C8142 +:103FE000D9F8342012F0450FF7D09204F5D4D9F85F +:103FF00034305B0703D50420C9F8380088E7D9F8C6 +:10400000340010F0010003D00123C9F838307FE7F5 +:10401000D9F81030DBB2032B40F0FC80C94BC9F853 +:104020003830D9F8143013F4604240F0E680A16BC8 +:104030001B0C2668032940F0F280D4F800B0DBF8AE +:1040400018301B0D2364E36D9A0F8DF83820C3F3ED +:1040500083628DF83920C3F301628DF83A20C3F3EF +:1040600007428DF83B20C3F30722DBB28DF83C20DA +:104070008DF83D30236E1A0DADF83E20C3F3034298 +:104080008DF84020C3F3C0328DF84120C3F3803255 +:104090008DF84220C3F340328DF84320C3F3003241 +:1040A0008DF8442000228DF84520A26B002A40F0B4 +:1040B000D68040F6FC71626E01EA830343EA927394 +:1040C0001293C2F3C2638DF84C30C2F302638DF8D1 +:1040D0004D30C2F342538DF84E30C2F38243C2F3E7 +:1040E000C2328DF84F308DF85020129B9DF8502031 +:1040F000013302F00702023293409DF8402002F0A3 +:104100000F010122A3648A40E264520A53432365EB +:104110004FF4007363654FF0010A636E4FF48079CA +:104120004FF480565846C3F380320D968DF85120D7 +:10413000C3F3C61203F07F038DF852208DF853307D +:10414000A36EDA0FC3F300418DF85420C3F341721C +:104150008DF85520C3F382628DF85620C3F3835245 +:104160008DF85720C3F340528DF8582000228DF867 +:1041700059208DF85A10C3F3C0310C928DF85B10A2 +:10418000C3F380318DF85C10C3F340318DF85D10BE +:10419000C3F300318DF85E10C3F381218DF85F10F9 +:1041A000C3F30121C3F346038DF8601009A98DF80C +:1041B0006130636C8DF862A01B0409930723CDE97D +:1041C0000A39EDF7A5FD072341F288325846194612 +:1041D000EFF7B0F900287FF49BAE4FF40071206830 +:1041E000EFF7E8FA002859D02368574A9A63636BBF +:1041F0001843606384F830A0BFE55E0407D413F46D +:10420000004F0CBF4FF480304FF4805080E64FF4E5 +:1042100000507DE601207BE64FF0004078E66364C5 +:104220001B04092130460E934FF440731192CDE9DF +:104230000F134FF480530EA91293EDF769FD30462A +:10424000EFF750F900287FF463AE23685A69E265FE +:104250009A692266DA6962661B6AA366EDE6012A3C +:104260000FD11B04B4F8662003F47C13134312939C +:10427000129B01339B02A36423654FF40073E36434 +:1042800048E7314B4FF08050CBF83830636B43F048 +:1042900080536363012384F8303039E6EEF776F912 +:1042A0008246206843699B0100F1C3804021EFF7FB +:1042B00081FA58B1636B63632368234A9A63636B23 +:1042C00018430123606384F830309FE0616C2068FC +:1042D0000904EFF704FA0028ECD1D4F800B04FF04D +:1042E000FF330EA9CBF824304023CBF82830DBF87D +:1042F0002C3023F0FF0343F06303CBF82C300D2365 +:104300000E90CDE911065846CDE90F39EDF700FDC5 +:104310000D2341F2883258461946EFF70BF9002871 +:10432000C8D10EAE23685A6B12F4957F5A6B0DD02C +:1043300011077CD45A6B920777D45B6B9B0622D50E +:104340002020B9E7C5002000FF0FE01F100407D5AB +:1043500006F12002D3F8801046F8041B9642F9D1EA +:10436000EEF714F9A0EB0A000130DBD14FF000406A +:10437000A2E7D2F8803046F8043BEEF707F9A0EB4D +:104380000A000130F2D02268536B13F48053F0D14D +:10439000A84991630E99C1F381128DF82420C1F3CD +:1043A00040128DF825200A0A22F0FF0242EA11622B +:1043B00092B2ADF826200F9A12BA0A92109AD1B290 +:1043C0008DF82C10C2F307218DF82D10C2F3035184 +:1043D000120C8DF82E10119922F0FF02C8B2024380 +:1043E000ADF83020C1F385228DF83220C1F30122CF +:1043F0008DF83320C1F3031201F00F018DF8342042 +:104400009DF84B208DF835108DF836204FF4007153 +:1044100020681E46EFF7CEF970B12368864A9A638A +:104420006063012384F83030A7E4022044E70820C9 +:1044300042E74FF400603FE7002E7FF49EACA16B93 +:104440009DF8342001299DF83530D2B2DBB213D16A +:10445000134314BF4FF400734FF48073A365032319 +:10446000E668994284F8303002D0B6F5004F05D1A5 +:10447000636B43F080535CE0A665F0E7B6F5804FD0 +:1044800033D10023CDE90E3323685B69980126D42C +:104490000EA8EFF7A9F960B90F9B590322D5616CFB +:1044A00020680904EFF71BF918B902212068EFF71B +:1044B000FDF8636B18436063636B002B3BD023688C +:1044C0005D4A9A634FF400712068EFF773F9002892 +:1044D0006DD02368584A9A63636B1843A0E74FF482 +:1044E0000060E6E74FF08060E3E7FEB92368CDE9BE +:1044F0000E665B699A0113D40EA8EFF775F960B9DF +:104500000F9BDB030FD5616C20680904EFF7E7F818 +:1045100018B901462068EFF7C9F8616B0843CAE78C +:104520004FF40060F9E74FF08060F6E7636B43F00B +:1045300000636363C0E7EDF717FC98B33F4AB0FB35 +:10454000F2F9D4E904C3D4E9018E4B450CD2A16D34 +:10455000B1F5007F08D0B1F5807F19D19BB99042A9 +:1045600002D9374BB0FBF3F3216846EA08064FF057 +:1045700000084A6846EA0E06174046EA0C0637432A +:104580001F434F609EE75900B0FBF1F19142E7E70E +:104590002C4A1BB9904288BF4B46E5E75900B0FB57 +:1045A000F1F0F7E7636B43F0006363638AE701238D +:1045B00084F83030B8F1000F7FF4DFABEDF7E6FFA1 +:1045C0000646EFF74BF804282BD1E36B0026A06BCF +:1045D000012266636B63236CA16CAB63636C276D14 +:1045E000E66285F8546084F83020EB63E36C646D18 +:1045F000286329642871284685F880206B64AF649D +:10460000EC64C5E90A16C5E90236C5E90436C5E910 +:104610000636C5E908362B681B6D98473046FFF70C +:1046200097BBEDF7B3FF801B0130CAD14FF00043B9 +:104630006363F6E63A0F0018FF0FE01F80F0FA02FE +:1046400000E1F50540787D01064B10B50360044696 +:1046500090F880300BB1FEF78DFCE06DFEF758F955 +:10466000204610BD58AB010810B50446FFF7ECFF1B +:10467000204602F025FD204610BD5C30FAF74EBE04 +:104680005C30F9F7EBBD38B5D0F8C04201F00F054A +:1046900063689D4237D811F0800F4FF01C0234D070 +:1046A00002FB054302FB054101223C3381F83D201A +:1046B00001221D709A7094F8BC13914223D084F8A3 +:1046C000BC231A785B782068012B4FF020030CBFC5 +:1046D00000F5106100F5306113FB02131968002921 +:1046E00004DB1AB11A6822F080421A601A6842F498 +:1046F00000121A6025B904F57172217CEEF764FE90 +:10470000002384F8BC33002038BD02FB014302FBC8 +:104710000141002203F5FE7381F8FD21C8E770B561 +:10472000044616460D4651BBD0F89432032B1FD1D8 +:10473000D0E9581291420ED9891A8A42C0F8601104 +:10474000D0F8C00288BF8AB2314698BF92B2EDF766 +:10475000F3FB284670BDD0F8B4321B6923B190F842 +:104760009C22032A00D198472046FEF7C1FAF0E7C1 +:10477000052BEED1C4F89412FFF785FFE9E7D0F8D6 +:10478000B4329B6933B190F89C22032A02D10025F0 +:104790009847DEE70225DCE730B5013800252B46D7 +:1047A0000135445D002CFAD1DBB201335B0013808C +:1047B0000B7003234B70022310F8015F05B930BD65 +:1047C0005A1CCD540233D2B2DBB28C54F4E7000051 +:1047D000082908B50AD8D0F8BC32063953F82100A8 +:1047E00010B10349FFF7D8FF014800E0002008BDE1 +:1047F000FC3800240A460349034808B5FFF7CCFFFC +:10480000084608BDA81A00249FAA01080A460349C1 +:10481000034808B5FFF7C0FF084608BDA81A0024E2 +:10482000AAAA010838B5674C2068E56A436B1904E9 +:104830001FD52A071DD5A36A1F2B19D9616A0B1D25 +:1048400001F1240022680433D2F88020150A03F80D +:10485000082C03F8075C150C120E03F8065C03F82D +:10486000052C8342EED1A36A2031203B6162A36212 +:1048700038BD436BDB0535D54FF480738363C36B61 +:1048800023F4414323F03A03C363C36B23F0805303 +:10489000C363C36823F04003C36015F0080311D05D +:1048A00015F0220F05D0EEF75BFF10B1636B1843D4 +:1048B00060632368444A9A63012384F830300023FC +:1048C000E362D5E72906D3D515F0220F8362C362D0 +:1048D0000365F1D0EEF744FF0028EDD0636B184379 +:1048E0006063E9E7436B5A0411D52B070FD5226AA1 +:1048F0001F2ABDD9E36903F1200153F8045B8B4201 +:10490000C0F88050F9D1203AE3612262B0E7436BEE +:1049100013F03A0F436B4DD0990703D5636B43F007 +:1049200002036363436B1A0703D5636B43F0080309 +:104930006363436B9B0603D5636B43F020036363A0 +:10494000436BD90603D5636B43F0100363631E4BBF +:104950008363C36B23F49D73C363C36823F0400375 +:10496000C360C36A43F40053C362C36843F0800367 +:10497000C360EEF7F5FE636B15F0080140EA030033 +:1049800023686063DA6822F08002DA604FF4006224 +:104990009A6391D12A067FF56BAF626B002A3FF4D0 +:1049A00067AFDA6B22F08052DA631965012384F86D +:1049B00030305DE7DB007FF55BAF4FF08053836302 +:1049C000036D55E7941200243A0F00182DE9804832 +:1049D000ADF5217D1C220021D84D04AF07F1D80090 +:1049E00002F0D4FB882107F1D800A7F8E810EEF711 +:1049F0007DFB002107F1D800EEF79CFB0221B7F9FF +:104A0000E800EDF775FCCE48CE4A0368CE4943F482 +:104A1000807311600360CD48D1F850800478BFF3F3 +:104A20005B8FBA6014F0010430D1FAF717FD68B358 +:104A3000C74BD3F8D020560000F15D82D3F8D020C8 +:104A4000002AC0F25882D3F8D020D00000F155825D +:104A5000D3F8D020510100F15082D3F8D020D201F8 +:104A600000F14D82D3F8D02016020BD4D3F8D02019 +:104A7000900200F14682D3F8D03013F4800F0CBFBF +:104A80000B240124B1482C70FAF7E0FCB14C2378D8 +:104A9000BFF35B8FD9070BD42046FAF7DFFC38B1A0 +:104AA000AB4B2046D3F8D020AB4B1A60FAF7CEFCC4 +:104AB000A74AD2F8D03043F48033C2F8D0302B78F4 +:104AC000012B08D1BB684DF659724FF4FA701B6880 +:104AD0001A65F2F78BF80022942107F1BC00FEF76B +:104AE00057FD1C22002107F1A00002F04FFB07F147 +:104AF000A000002301229621FAF71EF907F1A00079 +:104B0000FAF771FB40B107F1A000FAF78DFB012124 +:104B100007F1A000FAF770FB0022922107F1840050 +:104B200007F5B675FEF734FD0022932107F1680002 +:104B3000FEF72EFD1C22002107F14C0002F026FB9F +:104B4000A621002207F14C00FAF70CF98348F9F787 +:104B50006FFE0024F9F73CFD814B824A4FF0240B95 +:104B60001A60F9F721FD01229F2107F13000FEF7BD +:104B70000FFDF2F715F87C4BA42221462B6007F5B8 +:104B8000CE707A4B2C616B61AD61AC85C5E9074491 +:104B9000C5E9094402F0FAFA754BC5E9353407F561 +:104BA0001273BBF1010B03F8014BFAD12846FBF756 +:104BB000D2FA704B1C225946C5F8003107F1F400B7 +:104BC00002F0E4FA01235A46172107F1F400FAF73C +:104BD000B3F81C22594607F5887002F0D7FA07F59A +:104BE000887001235A461621FAF7A6F807F588704F +:104BF000FAF7F9FA00286ED007F1F400FAF7F3FAA1 +:104C0000012868D0F9F7E4FC0A245946B7F92001D5 +:104C1000EDF76EFBF9F7C8FC07F58870FAF704FBAF +:104C2000F9F7D6FC0021B7F92001EDF761FBF9F7A0 +:104C3000BBFC002107F58870FAF7DEFA0520EDF7D6 +:104C400049FBF9F7C5FC0121B7F92001EDF750FB4D +:104C5000F9F7AAFC012107F58870FAF7CDFA0520CB +:104C6000EDF738FB013CDBD107F1F400FAF7DCFA91 +:104C7000214607F1F400FAF7BFFA0520EDF72AFB09 +:104C8000012107F58870FAF7B7FA0520EDF722FB46 +:104C9000012107F1F400FAF7AFFA0520EDF71AFB4E +:104CA000F9F796FC214607F1F400EEF743FAF9F71D +:104CB0007BFCF9F78DFC07F588702146EEF73AFA90 +:104CC000F9F772FC07F58870FAF78DFA18B107F159 +:104CD000F400FAF788FAB5F90091B5F902612649AE +:104CE0004846F9F7C1FE044624493046F9F7BCFEB0 +:104CF0000146204607F58874F9F7CCFE1E49F86096 +:104D00004846F9F7A5FE1D4982463046F9F7A0FE50 +:104D1000FB68A4220021206107F5CE702360A4F86F +:104D20000490C4F808A0A68102F030FA214607F5E5 +:104D3000CE70EFF745FF284622E000BFFB39002484 +:104D4000004802580C36002400400058F438002473 +:104D500000440258F8380024FC390024649B010800 +:104D6000E00F002481C70008ACA90108A7C900080A +:104D7000A0860100170016005C980108C097010882 +:104D8000FBF7E1F94F2307F1100128463B82F0F7CA +:104D90006FFA4FF4756307F1100128463B82F0F774 +:104DA00067FA40F24C5307F1100128463B82F0F7B6 +:104DB0005FFA40F24D3307F1100128463B82F0F7CD +:104DC00057FA40F6521307F1100128463B82F0F7DC +:104DD0004FFA40F6537307F1100128463B82F0F773 +:104DE00047FA0A20F1F702FF48F29C0307F110018D +:104DF00028463B82F0F73CFA42F29E0307F110018D +:104E000028463B82F0F734FA0A20F1F7EFFE40F231 +:104E1000422307F1100128463B82F0F729FA0A20C5 +:104E2000F1F7E4FE4AF2940307F1100128463B82B1 +:104E3000F0F71EFA40F63B7307F1100128463B825B +:104E4000F0F716FA40F6357307F1100128463B8259 +:104E5000F0F70EFA0A20F1F7C9FE012107F1BC00B4 +:104E6000FAF7CAF90A20F1F7C1FE002107F1BC00E8 +:104E7000FAF7C2F90A20F1F7B9FE012107F1BC00E7 +:104E8000FAF7BAF90A20F1F7B1FE40F2AA73984591 +:104E900040F07F81BB68AE481B68AE4DD3F854909C +:104EA0009A6D5FFA89F6DB6DFA607B60FBF77CFC3C +:104EB00016F0020F3ED016F06003DFF8C4A222D035 +:104EC0002820F9F75BFAFB68C0F800A003F1006244 +:104ED000C3F500110023C0E90423013280F820301B +:104EE0004362C0E90133C0E9061300D009BB0021C9 +:104EF0009948ECF7DDFF0624C4E50424C2E5032449 +:104F0000C0E50224BEE528203B60F9F737FA4FF0F0 +:104F1000006100223B68C0F800A080F820304362A6 +:104F2000C0E904124FF400110022C0E90133C0E9C6 +:104F300006122860720744BF884B2B6033071DD5CB +:104F40008820F9F71BFA864B4FF400728246036003 +:104F500000235C3040E9152340E9132340E9112385 +:104F600040E90F230023002240E90D23ECF7B0FFB6 +:104F70004FF47A73C5F800A0CAF8583019F0800FC2 +:104F800015D02820D5F80090F9F7F8F9754B0022D4 +:104F90002860C0E900390023C0E90223C0E90423E6 +:104FA0000023FA6803764276C36180F8203016F059 +:104FB000400FDFF8D0A12BD0C820F9F7DFF96A4BFA +:104FC00081466A4940F8043BEDF742F8684B4422B9 +:104FD0000021C9F80030803309F11400C9F8043009 +:104FE00002F0D4F83822002109F1580002F0CEF87E +:104FF00040230020C9F89830C9E924034FF4007316 +:1050000009F1A400C9E92733ECF762FFCAF8009060 +:10501000B10618D55C20F9F7B1F9534B0646534950 +:1050200040F8043BEDF714F8524B40220021336066 +:10503000903306F11400736002F0A8F84FF0FF33CC +:10504000CAF80060B365DAF800002968002800F0AB +:10505000248503685B6A98470646002840F0198556 +:105060004549464801F0A2FC8146002800F08C80AA +:1050700003460422012107F1F40001F013FD32463A +:105080003146484601F01EFDD7F8F400FDF718FD43 +:10509000421C05467AD0394907F12800FAF704FE88 +:1050A00007F12800F9F7BAFB804600283DD101F04E +:1050B00079FA1323C7F80C8003602846244EECF7D6 +:1050C00095FFB0F5804F28BF4FF48040804601F037 +:1050D000EFFF8246FB689B4580F047854B46424682 +:1050E0000121504601F0DEFC05EB0B0128467960FA +:1050F000ECF77CFF79680246B1FBF0F300FB131379 +:105100003BB93046FBF730F842F21070EDF7E2F8A9 +:1051100079680A46434651463046FBF78DF94FF40D +:105120007A70C344EDF7D6F8D4E703682246B96A2B +:105130009B699847B0F1000806DA01F033FAC8F12C +:105140000003FE600360B8E72369FB60B5E700BFBA +:10515000A02D0024003A00240101FF8060100024EB +:1051600058AB0108B4AB01089C9E0108969B01084E +:10517000C89E0108C09D0108BEAA0108C1AA010875 +:105180004CA901080C3A00246FF00205BB681B68AB +:105190001D65CA4B1A6802F07F42B2F1005F11D060 +:1051A0001A6802F07F42B2F1105F0BD01A6802F069 +:1051B0007F42B2F1405F05D01B6803F07F43B3F13B +:1051C000605F66D14DF65973984562D040F2AA737C +:1051D00098455ED0BB6800251B681D65F1F7C8FCCB +:1051E00072B6B74B2946DFF824E31D604FF0E02389 +:1051F0005B6803F00F035E1C2B464FF0FF359C46A7 +:105200008A0002F1604202F56142C2F88050C2F8A1 +:1052100080510022D01801327044082A80F800C35F +:10522000F8D1013108338E42EADCA64B4FF0206200 +:105230005A60A2F1FE729A6040F2FA52DA600022DD +:10524000C3F810C01146981801320C2A0176FAD121 +:105250004FF0FF3259629A629B4ADA621F221A6348 +:10526000BFF35F8F994B5960BFF34F8FBFF36F8FC1 +:105270009249974B08681D68002282F3148885467E +:1052800082F3108828470A6882F3088801201B6887 +:1052900098470020F1F7B6FCEDF774FF8D48FBF757 +:1052A00083FA8D48FCF70AFD18238C4A30218C487C +:1052B000F9F72EF88B4AD2F8B432FA6013B1002312 +:1052C000C2F8B432884BFA68884DC2F8B032012275 +:1052D000FB68F96883F89C22002385480B7006213F +:1052E0002B632B61EB60EB62C5E90833C5E906234C +:1052F000FB68C5F80434C3F8C05295F8BD33C5E95E +:10530000000103F0FF08002B40F0AA80794E4FF017 +:10531000020A85F8BC834FF00A09D6F8E03021462E +:1053200075481343C6F8E030D6F8E0301340C7F8AC +:10533000F430D7F8F430D6F8E03043F00203C6F882 +:10534000E030D6F8E03003F00203BB62BB6AD6F867 +:10535000E03043F00403C6F8E030D6F8E03003F064 +:1053600004037B627B6AD6F8E03043F08003C6F822 +:10537000E030D6F8E03003F080033B623B6AD6F8B9 +:10538000E03043F48073C6F8E030D6F8E030C4F87B +:10539000088003F48073FB61FB692023C4E9003AB1 +:1053A0000323C4E90339F1F7FDFA08210323524826 +:1053B000C4F80880C4E9001A2146C4E90339F1F7AA +:1053C000F1FA43F6234321464C48C4F80880C4F858 +:1053D0001090C4E9003AF1F7E5FA01222146484865 +:1053E000C4F80880C4F81090C4E9002AF1F7DAFA8A +:1053F000102321464348C4F80880C4F81090C4E93B +:10540000003AF1F7CFFA4FF4006321463E48C4F862 +:105410000880C4F81090C4E9003AF1F7C3FAD6F84E +:10542000D83001224D2043F080631146C6F8D830B1 +:10543000D6F8D83003F08063BB61BB69D6F8D830AA +:1054400043F00073C6F8D830D6F8D83003F00073B4 +:105450007B617B69ECF76CFC2C4B4FF4005199603D +:1054600003232E6885F8BD33214BDB6B13F4807367 +:1054700008BF2B61B368D5F8108023F00103B36037 +:10548000AB69012B40F09383B36B696B23F48033DA +:105490000129B363F36823F4840323F04003F3602A +:1054A000F36823F44013F36003D1F36843F48013EB +:1054B000F3603046EDF770FF044629E00000040871 +:1054C00010E000E000ED00E0020000C090ED00E020 +:1054D00004000408A02D002460100024D0AA0108B4 +:1054E000DC35002430360024E0010024103A00248A +:1054F0000000044000440258000002580004025812 +:1055000000080258001C02580020025800E100E088 +:10551000B8F1010F10D1F36D9BB2F365F36D43F059 +:105520007B7343F40033F365B36843F00603B36061 +:10553000B36843F02003B360002C00F065830223BE +:1055400085F8BD332B684FF40071FA685962596AC7 +:10555000D2F8C00241F000719962B54BC2F8B43282 +:10556000B44BC2F8BC32F1F7F3F94D20ECF7C4FFAD +:105570006520ECF7C1FFB04B5A699B691A4200F0F5 +:105580002F82AE4E3468B246636913F001033B606C +:1055900040F026826269A3691A4200F021826369A1 +:1055A000A26913409A0703D5636903F0020363619C +:1055B0006369A2691340DB062BD5A36923F01003AE +:1055C000A361D4F82080C8F3434308F00F05022BF1 +:1055D00040F03E8447F6F07318EA030F14D01C2302 +:1055E000C8F30A19204603FB05A54A46D5F8081258 +:1055F000EDF71EFFD5F808324B44C5F80832D5F850 +:1056000014324B44C5F814323268936943F01003E6 +:10561000936133685A6999690A40150300F12A8435 +:10562000864E3368B2465A6999690A4012F4802F4F +:1056300011D0D3F8182803F50063B046DB69134096 +:105640009BB27B6004F51063BB600023FB607B684A +:10565000002B40F029863068426983691A4210D5D0 +:10566000D4F8043823F00103C4F8043896F8F4336E +:10567000012B04BF002386F8F433436903F0004391 +:105680004361436982691340190510D5D4F808387D +:10569000DA0708D5D6F8043493F89C2283F89D22C3 +:1056A000042283F89C22436903F400634361436945 +:1056B000826913401B0111D5436903F00063436104 +:1056C0005E4B93F8F423002A40F01687012283F8FA +:1056D000F423426DC2F38302C3F8F823436982695D +:1056E0001340DD043ED5D4F8042804F5006322F00D +:1056F00001025A604FF484620261514A013A02D0B9 +:1057000001698906FAD404F51062DFF830E14FF63A +:105710007F3CDEF804100D463968A942C0F0F786D8 +:10572000DA6942F00112DA61DEF83020002A00F076 +:105730001087D3F8842042F00B02C3F884205A6CFF +:1057400042F00B025A64D4F800383E4A23F4FE6358 +:10575000317CC4F80038EDF737FE3268536903F442 +:105760008053536134686369A26913409B0440F11C +:10577000EF80D4F8003923F4FF6323F00703C4F863 +:105780000039D4F8042842F48072C4F80428D4F80C +:10579000082812F0060304D012F0020F14BF0223EF +:1057A0000F23F360EEF732FEF268D3B2022B40F023 +:1057B000EE86254B254903448B4240F2D686244B86 +:1057C000244903448B4240F2D386A0F57403224956 +:1057D000A3F510538B4240F2CE86A0F183731F498C +:1057E000A3F5E7438B42C0F0C9861D4B1D49034416 +:1057F0008B4240F2C6861C4B1C4903448B42C0F0CE +:10580000C3861B4B1B4903448B42C0F0C086A0F1EA +:10581000B7731949A3F558538B42C0F0BB86174B99 +:10582000174903448B4234BF072306232AE000BFF5 +:10583000FC0100243802002400000440103A002437 +:10584000410D0300D43D0024405327FFFF340C00DA +:10585000401E1BFF3F420F007F4F120020D6130057 +:1058600060B6E5FE5FE3160000D3CEFE40771B0076 +:10587000C05BB3FEC091210020753800E05459FE92 +:10588000E09C4100E168B2F100084FF0000921F40A +:10589000705118BF4FF00108E160E16841EA8323CD +:1058A000E3604023D6F80444D4F8C052C5F804326B +:1058B00005F5FE7195F8BC33A5F8FC91012B85F830 +:1058C000FF9107D00123286885F8BC33EDF7D3FD9D +:1058D00085F8BC93D4F8C092402201230025C4F877 +:1058E00064214FF48070C4F8583109F13C01C9F8C3 +:1058F000442099F8BC23A9F83C009A4289F83F500B +:10590000A9F8425007D0D9F8000089F8BC33EDF768 +:10591000B2FD89F8BC53012300214022A36184F821 +:105920009C32D4F8B8326262C4F894126160C4F850 +:10593000A41223B1D4F8B43220465B689847D6F855 +:105940000434326883F81080536903F400535361C0 +:1059500032685369926913401D070FD5D6F80404C5 +:1059600090F89C32032B04D1D0F8B432DB6903B138 +:1059700098473268536903F00803536133685A69E2 +:1059800099690A40D40203D55A6902F480125A6117 +:105990005A6999690A40900203D55A6902F40012C3 +:1059A0005A615A6999690A40510003D55A6902F04F +:1059B00080425A615A6999690A40520710D55C6859 +:1059C000630709D5D6F80404012380F89C32D0F887 +:1059D000B43201795B68984733685A6814435C6055 +:1059E0007D4A1368591C1160282293FBF2F402FBD4 +:1059F0001434002C7FF4BFADECF7C8FDB0F5FA7F8E +:105A00000BD9764B1A7842B1754A4DF65971126826 +:105A1000106D884201D114651C70724D724C2B7848 +:105A20008BB9724B07F14C001B78227842FA83F352 +:105A3000DBB22370F9F7D7FBB0FA80F107F14C0025 +:105A40004909F9F7D9FB2B780133DBB22B702378A6 +:105A5000FA2B02D82378092B0AD8644A13785B42C0 +:105A60005BB213701378227842FA83F3DBB22370AF +:105A70002A7823789A427FF47EAD07F14C00F9F73B +:105A8000B2FBB0FA80F107F14C004909F9F7B4FB19 +:105A900071E56FF00105FFF779BB002965D00B6850 +:105AA0000846E9469B689847064600287BD1286847 +:105AB00003689B6A9847102802462868B8BF1022DE +:105AC00001689300073323F00703ADEB030DD317F1 +:105AD0000DF1100ACDE90023FA6833464D695146AD +:105AE000A847DAF80000FCF7EBFF431C054657D047 +:105AF000ECF77CFAB0F5804F28BF4FF48040804629 +:105B000001F0D6FA82463E607B689B452CD2384B2A +:105B1000514618680368CDF800803A6801925E69C2 +:105B2000FB680BEB03020023B04705EB0B0628468E +:105B3000ECF75CFA0246B6FBF0F300FB13633BB9EB +:105B400031462C48FAF710FB42F21070ECF7C2FB1A +:105B50004346324651462748FAF76EFC4FF47A70B6 +:105B6000C344ECF7B7FBCFE7CD4622480025FAF750 +:105B7000D7FD214B214AE360214B224823600023BB +:105B8000C7E94555CDE90223E368009394E80E0088 +:105B9000ECF7EAF9BB681B681D65F0F7E9FFFEE763 +:105BA000CD46FFF7F3BA6FF00305FFF7EFBAF368DE +:105BB0003046D5F8289043F04003F360EDF7ECFB56 +:105BC000B36B0446B9F1000F03D143F48033B363E0 +:105BD0009EE423F48033FAE7083A00247402002498 +:105BE0000C360024183E0024F3020024F2020024A4 +:105BF000003A0024A02D0024BD2A0108400D030016 +:105C0000F12A0108F00E00242B6832204FF0010821 +:105C10002646D96821F0C041D960D96841F0804159 +:105C2000D960F0F7E3FFD5F804C023464FF01C0E0F +:105C3000D8B2591C6045C0F0B28000234FF01C0E52 +:105C40001846DEB201336645C0F0B88000212B68EB +:105C5000D5E903E20E467A60D5E906823A60EA6A3F +:105C6000BA6001F14000013103EB80000F2946606A +:105C7000F7D1BA6803F50066002A40F0AC8071687D +:105C800041F002017160996B21F400119963196868 +:105C900041F040011960196841F08001196000214C +:105CA000B8F1010FC3F8001ED3F80018C3F80018AC +:105CB000D3F8001840F09780BEF1000F40F09080BC +:105CC000C3F800184FF4846119618949013900F063 +:105CD0008D8018698206F9D410211961844901392F +:105CE00000F086801869C006F9D4002103F5106021 +:105CF0004FF000684FF67F398E4631617161F16176 +:105D00008C4577D103F530604FF0000C4FF0904E8A +:105D10004FF000684FF67F39594540F08180316976 +:105D20007A6821F480713161002199616FF08041BE +:105D300059611AB9996941F01001996198696D49E1 +:105D40003A68014399611AB1996941F00801996172 +:105D5000BA68012A05D1996941F0804141F00401F6 +:105D60009961002C7FF4EBAB012185F8384085F870 +:105D7000BD13696A01290DD185F8F443C5F8FC13F8 +:105D8000996941F000619961596D41F0805141F08C +:105D9000030159651846EDF73DFBFFF7D3BB0EFB3A +:105DA000005383F83D8083F83C00A3F8420083F859 +:105DB0003F601E65C3E911660B4639E70EFB0651CD +:105DC00081F8FD0181F8FC6181F8FF01C1F8100242 +:105DD000C1E9810035E7996B41F4001199635EE7F1 +:105DE00041F001016CE741F0030169E7012473E729 +:105DF00001247AE7D0F800A0BAF1000F0DDA41B91A +:105E0000C0F80080C0F810E00131C0F808902030E0 +:105E100076E74FF090420260F4E7C0F800E0F1E767 +:105E2000D0F800A0BAF1000F0FDABBF1000F09D1D2 +:105E3000C0F80080C0F810C00BF1010BC0F808904A +:105E4000203069E7C0F800E0F4E7C0F800C0F1E7EF +:105E5000062B7FF4D9AB082227492046EDF7E8FA54 +:105E60001C2303FB05A5C8F30A13D5F81422134419 +:105E7000FFF7C8BBD3F8182803F5006304F53068B2 +:105E8000DFF878A0DB69002613401B0CFB60FB6881 +:105E9000002B3FF4C5ABFB68D80740F1BA80174D23 +:105EA0005FFA86FB286800F5306C0CEB4B139A68A0 +:105EB000D0F8143802EA03092B4619F0010F27D055 +:105EC000296901220CEB461C0129C8F80820D0F8EA +:105ED00040E0DCF8082040F0C780110712D5084BDD +:105EE0009E4515D9100413D54FF400430EE000BFB2 +:105EF000410D030000383C80D43D0024103A0024BA +:105F00000A30544F910640F18D802023CCF80830A0 +:105F100019F0080F6AD02B680822C8F808201A6CFC +:105F200003F53063BA6003EB4613B9689A68084614 +:105F3000C849884204D9150402D54FF400429A603A +:105F4000C548D0F8045490F8C43305F52A7185F893 +:105F5000A83290F8C5E385F8A9E290F8C72390F835 +:105F6000C6C30CEB022C1FFA8CFCA5F8AAC290F851 +:105F7000C9B390F8C82302EB0B2292B2A5F8AC2269 +:105F800090F8CBB390F8CA0300EB0B204FF0010B55 +:105F900080B2C5E9A5B003F01F0BA5F8AE02BBF1B6 +:105FA000010F7ED0BBF1020F00F09A80BBF1000F11 +:105FB00040F0778103F06003202B00F0C180402B7C +:105FC00000F0BE80002B40F0C7802846FCF79CFE06 +:105FD000BB681A469F4B9A4208D99F4B1969012901 +:105FE00004D103F571721868EDF7EEF919F0100F8E +:105FF00002D01023C8F8083019F0200F02D0202357 +:10600000C8F8083019F4005F03D04FF40053C8F803 +:106010000830FB68013608F120080AF11C0A5B0809 +:10602000FB6034E712F0280F7FF472AF89498E4588 +:1060300002D912043FF558AFDCF81020DAF8041248 +:10604000C2F312028A1ACAF81422DAF8082211449A +:10605000D5F810223243CAF8081210D17F4A012124 +:10606000EDF7B2F97C4B0AE07D498E4512D111045F +:106070003FF53AAF920602D52022CCF808201C2228 +:106080005946D5F8040402FB0B33D3F80822FEF777 +:1060900046FB3DE7D5F810123143F0D105F571729A +:1060A000DEE703F06000402801D0580654D495F88C +:1060B0009C32013B022B4FD8D2B2022A4CD8D5F8E1 +:1060C000B43228469B689847B5F8AE32002B7FF46F +:1060D0007FAF00287FF47CAF2846FCF709FE77E706 +:1060E00003F06003202B2BD0402B29D0A3BBBEF1A3 +:1060F000010FD1B23DD0BEF1030F27D0BEF1000F8A +:106100002AD195F89C32022B00F09380032B23D1E7 +:1061100052B201F00F031420002A00FB035380F257 +:10612000A1809B69C3B101F07F0303FB00002844F9 +:1061300011F07F0340F0A28002220146036085E057 +:10614000D5F8B43228469B68984741E795F89C32C9 +:10615000022B5AD0032B03D02846EBF7CDFE37E7AE +:106160004A06B9D05CEA0003B6D12846FEF78BFA9E +:10617000B2E795F89C32022B47D0032BECD1BCF14F +:10618000000F7FF425AF4806A6D0D5F8C00201F075 +:106190000F01436899429FD8C1EBC10312F0800FF1 +:1061A0004FF01C024FEA830339D03C3302FB01025B +:1061B0004FF0010C034482F83DC0002219709A7020 +:1061C00090F8BC23012A87D00122016880F8BC2303 +:1061D0005A7893F800C0012A4FF020020CBF01F555 +:1061E000106101F5306112FB0C12116821F40011ED +:1061F0001160DB78023B012B03D8136843F0805316 +:106200001360002380F8BC3366E74B062846A4D011 +:10621000FEF739FA80212846FEF735FAD8E603F56D +:10622000FE7302FB01024FF0000C034482F8FDC133 +:10623000C3E7490690D113064FF000034FF0020266 +:106240004CBF05F1140105F5AA710B602846FCF757 +:1062500043FDBDE60A30544F103A0024D43D0024DB +:106260000A31544FD3F85831002B3FF475AF01F089 +:106270007F0300FB035000F5AA7059E7002AD5F808 +:10628000C0C24FF01C02B5BF02FB03C102FB01C339 +:1062900091F83E3093F8FE31002B3FF44DAF0123CF +:1062A0004AE703F08001B6E77B68D80740F1178121 +:1062B000DAF8000097F80CB0D0F8101800F510626A +:1062C000D0F834580BF00F0902EB4B1225FA09F9FC +:1062D00092684FEAC9195FFA89F949EA010909EA9E +:1062E000020919F0010F46D0FB68D4F8342803F0F6 +:1062F0000F01012303FA01F1BB6822EA0102DAF877 +:106300001010C4F834281A460123994293600CD126 +:10631000FB68D8E911522A44C8F84820DAF850201E +:10632000134302D19D4AEDF74FF89D4BD3F8045427 +:10633000BBF1000F40F09E80D5F89422022A40F075 +:106340009080D5E908239A4262D9D21A9449D5F8A7 +:10635000C002896C2A6292B2EBF7D9FD5A465946BF +:10636000D5F8C002EBF7E8FD95F8A022012A02D18A +:10637000002285F8A02219F0080F02D00822BB687D +:106380009A6019F0100F02D01022BB689A6019F0C1 +:10639000400F02D04022BB689A6019F0020F02D071 +:1063A0000222BB689A6019F0800F00F09880D8E94B +:1063B0001421914200F29380521AD8F84410DAF86E +:1063C00000508A42FB6805F5106C28BF0A4605F5A7 +:1063D00080510CEB431C033201EB0B339208DCF8C9 +:1063E00018E01FFA8EFE9645D8E9140175D388424D +:1063F00001D900284DD1FA680121D5F8343802F0CE +:106400000F0201FA02F223EA0203C5F8343866E00B +:10641000E969B1FBF3F003FB101070B98B420CD8A3 +:10642000D5F89822914208D25A465946D5F8C0026A +:10643000EBF76DFDC5F898B290E7D5F8B422D268B5 +:106440002AB195F89C12032901D128469047802152 +:106450002846FEF718F90522C5F8942200221146B5 +:106460007EE732F004037FF47FAF80212846FEF7F9 +:106470000AF979E7D5F8B4225269002A3FF47BAFD4 +:1064800095F89C1203297FF476AF59462846904729 +:1064900071E7411AD8F844209AF81000914228BFB9 +:1064A0001146CA1C920850B1D8F848000844C8F8F0 +:1064B0004800D8F854000144C8F854108FE788B257 +:1064C000D8F848E0033080080EEB80007045EBD030 +:1064D0005EF8049BC3F80090F8E788428BD9FB680C +:1064E00008F11C080133FB607B685B087B60BB68BC +:1064F0002033BB60FFF7ABB8D3F8043493F89C2289 +:1065000083F89D22042283F89C22FFF7E7B8C2F8A3 +:1065100008C0203252F8201C21F4001142F8201C3F +:1065200052F8201C41F0006142F8201CC2F8E8C17A +:10653000D2F8E01121F40011C2F8E011D2F8E01114 +:1065400041F00061C2F8E011396801313960FFF7AC +:10655000E0B85A6942F4005242F02B025A611A69BB +:1065600042F00B021A61FFF7EEB80F23FFF78AB96A +:106570000E23FFF787B90D23FFF784B90C23FFF72C +:1065800081B90B23FFF77EB90A23FFF77BB90923F3 +:10659000FFF778B90823FFF775B900BFD43D002491 +:1065A000103A0024014B1868704700BFF402002421 +:1065B0008A892DE9F041054610070C4658D44B68EE +:1065C000002B05DC0B6C002B02DC0020BDE8F08109 +:1065D000E66A002EF9D0002312F480522F682B6057 +:1065E00032D0606DA3895A0705D56368C01A636B02 +:1065F0000BB1236CC01A00230246E66A216A2846C2 +:10660000B047431CA38906D129681D292CD82A4AE2 +:10661000CA40D60728D500226260D90422692260C8 +:1066200004D5421C01D12B6803B96065616B2F60F2 +:106630000029CAD004F14403994202D02846F8F751 +:10664000E7F800206063C1E7216A01232846B047CC +:10665000411CC7D12B68002BC4D01D2B01D0162B99 +:1066600001D12F60B1E7A38943F04003A381ADE7D7 +:106670000F69002FA9D093070E6808BF4B690F6000 +:1066800018BF0023A6EB07088B60B8F1000F9CDD54 +:10669000216AA66A43463A462846B047002806DCE7 +:1066A000A38943F04003A3814FF0FF308EE70744F6 +:1066B000A8EB0008E9E700BF0100402038B50B69EE +:1066C00005460C4613B90025284638BD18B1836924 +:1066D0000BB900F099F8144B9C421BD16C68B4F9CB +:1066E0000C30002BEFD0626ED00704D4990502D491 +:1066F000A06D00F076FC28462146FFF759FF636E37 +:10670000DA070546E0D4A3899B05DDD4A06D00F02F +:106710006AFCD9E7054B9C4201D1AC68DFE7044B2A +:106720009C4208BFEC68DAE72CF101084CF1010843 +:106730000CF10108014620B9044B0549186800F026 +:10674000F6BA044B1868FFF7B9BF00BF6CF1010837 +:10675000BD660108F4020024002310B50446C0E918 +:106760000033C0E90433836081814366C281836161 +:10677000194608225C3000F009FD054B6362054BA9 +:10678000A362054BE362054B2462236310BD00BF87 +:10679000A9740108CF740108077501082B75010859 +:1067A000014900F0C4BA00BFBD66010870B54A1EB9 +:1067B000682555430E4605F17401F8F72DF8044697 +:1067C00040B10021C0E900160C30A06005F168025C +:1067D00000F0DCFC204670BD014800F002BC00BFA8 +:1067E000A73E0024014800F0FEBB00BFA73E0024E6 +:1067F000014800F0F6BB00BFA43E0024014800F0B1 +:10680000F2BB00BFA43E002410B50446FFF7F0FF22 +:10681000A3691BB1BDE81040FFF7F0BFC4E9123314 +:106820002365134B134A1B68A262A34204BF0123D2 +:10683000A361204600F020F86060204600F01CF8BC +:10684000A060204600F018F80022E0600421606893 +:10685000FFF782FFA06801220921FFF77DFFE068B2 +:1068600002221221FFF778FF0123A361D2E700BFC4 +:106870006CF10108A1670108F8B50746FFF7ACFF06 +:106880001E4B1E68B36913B93046FFF7BDFF48368B +:10689000D6E90134013B03D533680BB33668F7E71B +:1068A000B4F90C50D5B9164BE36004F15800656695 +:1068B00000F094FBFFF796FFC4E90155C4E90455C5 +:1068C0002560A5610822294604F15C0000F05EFC09 +:1068D000C4E90D55C4E912552046F8BD6834D9E71E +:1068E00004213846FFF762FF044630600028D5D106 +:1068F000FFF778FF0C233B60EEE700BF6CF1010867 +:106900000100FFFFF7B50F46114601AA054601F049 +:1069100095F9064618B90024204603B0F0BD284674 +:10692000FFF7AAFF04460028F5D03946019A4FF434 +:10693000DB73284600F002FD071E09DA0025FFF789 +:106940004BFFA06DA58100F04AFBFFF74BFFE2E78C +:10695000636EDB0705D4A389980502D4A06D00F00F +:1069600040FB0E4B63620E4BA3620E4BE362F105DC +:106970000D4BE781A6812462236305D50223002203 +:106980002146284600F09CF8636EDA07C4D4A38938 +:106990009B05C1D4A06D00F026FBBDE7A9740108DA +:1069A000CF740108077501082B750108024B0A46D0 +:1069B00001461868FFF7A6BFF40200242DE9F74F3F +:1069C0001F4613467B430C9C06468A4691469B46CF +:1069D0005FD018B183690BB9FFF716FF2E4B9C42AD +:1069E00028D17468636EDB0705D4A3899D0502D4A2 +:1069F000A06D00F0F6FA6368002B01DA00236360F3 +:106A0000D846D4E9001545451ED34246504600F00D +:106A1000AFFB60682168636EA0EB08004144DA07B1 +:106A2000606021602FD4A3899B052CD4A06D00F059 +:106A3000DAFA28E0194B9C4201D1B468D2E7184B2E +:106A40009C4208BFF468CDE72A46504600F090FB10 +:106A500023682B4423602146A8EB050330460193AD +:106A600000F088FCAA44019B88B1636ED80705D466 +:106A7000A389990502D4A06D00F0B5FA5D44A5EB99 +:106A80000803B3FBF9F7384603B0BDE8F08F98462A +:106A9000B7E71F46F7E700BF2CF101084CF10108EA +:106AA0000CF1010807B5009313460A460146034856 +:106AB0000068FFF783FF03B05DF804FBF4020024D5 +:106AC00000F00AB813460A4601460248006800F082 +:106AD00003B800BFF40200242DE9F0410C4617462C +:106AE0001E46054618B183690BB9FFF78DFE444B6E +:106AF0009C4222D16C68636ED90705D4A3899A059C +:106B000002D4A06D00F06DFAA38903F48473B3F589 +:106B1000847F03D121462846FFF7D0FDD4F82C808E +:106B2000B8F1000F13D11D232B60636ED9075DD51B +:106B30004FF0FF363046BDE8F081324B9C4201D128 +:106B4000AC68D8E7304B9C4208BFEC68D3E7012E15 +:106B500036D036F0020347D123691BB921462846B7 +:106B600000F066FA21462846FFF7A8FD0028DCD190 +:106B7000216A33463A462846C0470130D5D0616B7A +:106B800041B104F14403994202D02846F7F740FE90 +:106B90000023636323692360A389002523F4026330 +:106BA0006560A3810822294604F15C0000F0EEFA3A +:106BB000666E16F0010620D1A3899B05BAD40CE0BD +:106BC0002146284600F022F8431C064609D1636E90 +:106BD000DD07ADD4A3899805AAD4A06D00F003FA0F +:106BE000A8E707440026B7E716239DE7A3899A057F +:106BF0009ED4A06D00F0F7F99AE72E469AE700BF01 +:106C00002CF101084CF101080CF1010870B50C469B +:106C1000054618B183690BB9FFF7F6FD324B9C426C +:106C200014D16C68636EDA0705D4A3899B0502D47E +:106C3000A06D00F0D6F9E66ACEB91D232B60636E15 +:106C4000DE070DD54FF0FF35284670BD274B9C421F +:106C500001D1AC68E6E7264B9C4208BFEC68E1E74F +:106C6000A3899D05EED4A06D00F0BDF9EAE7A289E5 +:106C700002F00C03082B19D12368BBB121695B1A00 +:106C8000002B13DDD00511D502230022216A2846EE +:106C9000B047411C05460DD1636EDA07D2D4A389F3 +:106CA0009B05CFD4A06D00F09EF9CDE712F4805281 +:106CB0000FD0656DA28956070DD56368ED1A636B19 +:106CC0000BB1236CED1A636ED907BDD49305BBD409 +:106CD000E8E70123DAE71007F5D52368002BF2D0A7 +:106CE00021695B1A1D44EEE72CF101084CF1010803 +:106CF0000CF101082DE9F0410F4600F1480400268F +:106D0000D4E90185B8F1010805D52468002CF7D134 +:106D10003046BDE8F081AB89012B06D9B5F90E30BC +:106D2000013302D02846B84706436835EAE72DE923 +:106D3000F8430646884600F148040027D4E9019547 +:106D4000B9F1010905D52468002CF7D13846BDE812 +:106D5000F883AB89012B07D9B5F90E30013303D085 +:106D600029463046C04707436835E9E770B50D4D01 +:106D70000D4C641BA4100026A64209D10B4D0C4CEF +:106D800002F094FB641BA4100026A64205D170BD3E +:106D900055F8043B98470136EEE755F8043B984711 +:106DA0000136F2E7C0030024C0030024C00300241E +:106DB000C803002438B50B4B1D68EB6B044653B970 +:106DC000242000F075F90246E86320B9064B074815 +:106DD000322100F005FFE96B2046BDE8384000F0A5 +:106DE00007B800BFF402002470F1010887F1010820 +:106DF0002DE9F3410746019100F0BCFF019980465F +:106E0000384600F0BBFF43699A07044603F26C76EC +:106E100005D1642296FBF2F302FB13637BBB4FF4B4 +:106E2000C87396FBF3F503FB1565B5FA85F56D0997 +:106E3000684B302202FB053500F032FD00F03CFDCE +:106E4000654B1B6853B3D8F80430B34219D1D8F856 +:106E50000010D7E90067D8E90823D1B9964277EB4B +:106E6000030323DAD8E91223964277EB0303B4BF76 +:106E70000123002323621BDBD8F828101AE0012528 +:106E8000D6E7304600F064FC0028E0D14FF0FF3335 +:106E900004E0964277EB030302DA00232362EBE778 +:106EA000D8E91223964277EB0303F6DA0123236233 +:106EB000D8F850104FF461633C2091FBF3F603FBCC +:106EC0001613616893FBF0F200FB12302368891AF5 +:106ED000A26861601B1A921B3B2B2360A26035DD08 +:106EE000013161603C3B236063683B2B34DD013240 +:106EF000A2603C3B6360A368172B33DDE26901327B +:106F0000E261A2690132062AC8BF0022A261E268DA +:106F1000183B0132A3602369E26055F823108A42CE +:106F20000EDD0B2BA2EB0102E26003F1010209BFAF +:106F3000636922610022013302BF22616361E26161 +:106F400000F0B4FC204602B0BDE8F081002BCBDAA3 +:106F5000013961603C33C6E7002BCCDA013AA2600C +:106F60003C33C7E7002BEBDAE269013AE261A26940 +:106F7000013A48BF0622A261E2681833013AE26092 +:106F8000A360002ADCD12369013B05D42361236976 +:106F900055F82330E360D3E70B23236163695A1E5E +:106FA000626103F26B72930705D1642192FBF1F3E6 +:106FB00001FB132363B94FF4C87192FBF1F301FB9A +:106FC0001323B3FA83F35B0903F5B673E361DEE7DA +:106FD0000123F9E704F20108403E0024704770479E +:106FE000704770477047704770B50E46B1F90E1084 +:106FF000002996B014461D4607DA00232B60B3899A +:107000001A0610D44FF480630EE06A4600F05EFE6C +:107010000028F2DB019A02F47042A2F500535A42B2 +:107020005A412A60EEE740230020236016B070BD6D +:107030008B8973B59D0706460C4607D504F14703B7 +:10704000236023610123636102B070BD01AB6A4616 +:10705000FFF7CAFF009905463046F7F7DDFB48B950 +:10706000B4F90C309A05EFD423F0030343F0020384 +:10707000A381E3E70D4BB362A389206043F0800353 +:10708000A381009B6361019B20615BB1B4F90E1089 +:10709000304600F023FF28B1A38923F0030343F017 +:1070A0000103A381A0890543A581CDE7A16701085C +:1070B000024B01461868F7F7AFBB00BFF40200248B +:1070C000024B01461868F7F7A3BB00BFF402002487 +:1070D00001F0FF01102A2BDB10F0070F08D010F889 +:1070E000013B013A8B422DD010F0070F42B3F6D18D +:1070F000F0B441EA012141EA014122F007047FF0A6 +:1071000000070023F0E80256083C85EA010586EAFC +:10711000010685FA47F5A3FA87F586FA47F6A5FA38 +:1071200087F68EB9EED1F0BC01F0FF0102F0070244 +:1071300032B110F8013B013A83EA010313B1F8D1EF +:107140000020704701387047002D06BF35460338D0 +:10715000073815F0010F07D1013015F4807F02BF09 +:10716000013015F4C03F0130F0BC0138704700BF5A +:107170000A44914200F1FF3300D1704710B511F875 +:10718000014B03F8014F9142F9D110BD024403466F +:10719000934200D1704703F8011BF9E737B5002986 +:1071A00048D051F8043C0190002BA1F10404B8BF71 +:1071B000E418F7F797F9204A01981368154633B990 +:1071C0006360146003B0BDE83040F8F731B9A34202 +:1071D0000BD921686218934204BF1A685B68636028 +:1071E00004BF521822602C60ECE71A465B680BB1B2 +:1071F000A342FAD911685518A5420BD1246821443D +:107200005418A3421160DDD11C685B6853602144AF +:107210001160D7E702D90C230360D3E72568611911 +:107220008B4204BF19685B68636004BF4919216021 +:107230005460C7E703B030BD1C3E0024F8B5CD1C38 +:1072400025F0030508350C2D38BF0C25002D06460A +:1072500001DBA94203D90C2333600020F8BDF7F706 +:1072600041F921490A6814469CB9204F3B6823B96B +:107270002146304600F008F938602946304600F0D3 +:1072800003F9431C23D10C2333603046F8F7D0F8C0 +:10729000E3E723685B1B17D40B2B03D923601C4443 +:1072A000256004E06368A2420CBF0B605360304667 +:1072B000F8F7BEF804F10B00231D20F00700C21AF6 +:1072C000CCD01B1AA350C9E722466468CCE7C41C83 +:1072D00024F00304A042E3D0211A304600F0D4F891 +:1072E0000130DDD1CFE700BF1C3E0024203E00244A +:1072F000F8B5074614460E4621B9BDE8F8401146D8 +:10730000F7F78ABA22B9F7F783FA25462846F8BD77 +:1073100000F006FEA0420FD221463846F7F77CFA6D +:1073200005460028F2D031462246FFF721FF3146BC +:107330003846F7F76DFAE9E73546E7E738B5074D20 +:1073400004460846114600222A601A46F8F702FD54 +:10735000431C02D12B6803B1236038BDAC3E00242E +:10736000838903F00903092B01D1FFF7E3B900205A +:1073700070470000F8B50C46054618B183690BB993 +:10738000FFF742FA3B4B9C420AD16C68B4F90C20DF +:1073900000236360A3899E060CD54FF0FF3066E0A2 +:1073A000354B9C4201D1AC68F0E7344B9C4208BF9E +:1073B000EC68EBE7580748D4D90605D409232B60BD +:1073C00042F04003A381E8E71A070BD5214628467F +:1073D000FFF774F90028E0D1A389A06023F0080327 +:1073E000A381A061A38943F00403A38123691BB98E +:1073F00021462846FFF71CFEA689B4F90C70B30796 +:107400000FD00123A3811E4B1E49186806F0090600 +:10741000FFF770FC092EA78103D121462846FFF70C +:10742000C7F82269666A6369216A22602846B04704 +:10743000002860601CDCB4F90C3017BF002243F058 +:107440002003626043F04003BCE7616B0029CDD0AC +:1074500004F14403994202D02846F7F7D9F9236C86 +:10746000636000206063002BC0D0E36B2360F8BD35 +:107470000020FCE72CF101084CF101080CF1010897 +:107480006CF101086173010838B5064D002304460C +:1074900008462B60F7F72EF8431C02D12B6803B186 +:1074A000236038BDAC3E002410B50C46B1F90E1077 +:1074B00001F02CF80028ABBF636DA3891B1823F4DF +:1074C0008053ACBF6365A38110BD002070472DE9D8 +:1074D000F0411F468B89DB0505460C46164605D54F +:1074E000B1F90E100223002200F008FDA389B4F9BF +:1074F0000E1023F48053A38132463B462846BDE854 +:10750000F04100F05BBB10B50C46B1F90E1000F075 +:10751000F5FC431CA38915BF606523F4805343F435 +:107520008053A38118BFA38110BDB1F90E1000F0E4 +:1075300075BB0000012B2DE9F04701D0242B06D9A3 +:10754000FFF730F8162303600020BDE8F0873A4FBC +:107550008E4676461EF8014BE55D15F00805F8D11C +:107560002D2C34D19EF800404FF0010806F1020E98 +:10757000002B5CD0102B0CD1302C0AD19EF800408F +:1075800004F0DF04582C4DD19EF8014010230EF179 +:10759000020E08F1004C0CF1FF3C0026BCFBF3F995 +:1075A000354603FB19CAA4F13007092F18D83C4609 +:1075B000A34224DD002E1FDBA9451DD301D1A24526 +:1075C0001ADB05FB034501261EF8014BEBE72B2CCC +:1075D00008BF9EF80040A84608BF06F1020EC7E7A4 +:1075E000A4F14107192F01D8373CE1E7A4F1610765 +:1075F000192F04D8573CDBE74FF0FF36E4E7002EA5 +:1076000005DA22230360654642B928469DE7B8F1B2 +:10761000000F00D06D42002AF7D00EB10EF1FF31FD +:107620001160F2E73024002BB3D10823B1E7302CEE +:10763000A4D00A23ADE700BF0CF00108FFF77ABF22 +:107640002DE9F0433B4E86468C4660461CF8014BC4 +:10765000A55D15F00805F8D12D2C34D19CF800401B +:107660004FF0010800F1020C002B5ED0102B0CD162 +:10767000302C0AD19CF8000000F0DF0058284FD1D0 +:107680009CF8014010230CF1020C4FF0FF3700254D +:10769000B7FBF3F703FB07F96FEA09092846A4F1E2 +:1076A0003006092E18D83446A34224DD002D1FDBF6 +:1076B00087421DD301D1A1451ADB00FB0340012500 +:1076C0001CF8014BEBE72B2C08BF9CF80040A846A8 +:1076D00008BF00F1020CC7E7A4F14106192E01D83A +:1076E000373CE1E7A4F16106192E04D8573CDBE7EB +:1076F0004FF0FF35E4E7002D07DA2223CEF8003003 +:107700004FF0FF3042B9BDE8F083B8F1000F00D070 +:107710004042002AF7D00DB10CF1FF311160F2E7C1 +:107720003024002BB1D10823AFE7302CA2D00A239C +:10773000ABE700BF0CF00108FFF782BF13460A4613 +:10774000014602480068FFF77BBF00BFF402002437 +:107750002DE9F74F804600F00DFB40F2B1739845DC +:1077600040F398806FF4F66343449B1040F26D122F +:10777000A8F2B27502FB05356FF06302A8F26D73D3 +:1077800093FBF2F31D444FF4C8736FF4C86298FB87 +:10779000F3F703FB17874244B7FA87FCB2FBF3F217 +:1077A00008F0030315446422C0F8048098FBF2F645 +:1077B0004FEA5C1C02FB1686044600F1500B009356 +:1077C0004FF0070E227A63694A2A28D10099EA18F5 +:1077D00001B906B90FBB3B2BD4BF002301231344CF +:1077E0005A1EA3692C4901FB0232A36A13441A46AC +:1077F000DB17C4E908232834A345E3D1D0E90845C1 +:10780000D0E91223944275EB0303B4BF0123002394 +:107810000360012003B0BDE8F08F0023DFE7442AB6 +:1078200001D1EA18DDE7009A72BB002E0CBFE046DA +:107830004FF001081949E26801924FF0300A0AFB43 +:1078400008182A464FF00009A8F10408019909F127 +:107850000109494558F829A018DC02F1040898FBF1 +:10786000FEF9C9EBC909A8EB0909B3EB09092369BA +:1078700003F1FF3348BF09F10709C3EBC3034B44CE +:10788000534505DA1A44ACE7E046D3E75244DDE756 +:10789000073BF5E70020BDE78051010004F2010835 +:1078A0000148FFF79DBB00BFA63E00240148FFF73B +:1078B00099BB00BFA63E0024014B186800F002B837 +:1078C000F40200242DE9F04F8DB0074600F052FA83 +:1078D000AE49AF4E0546384600F044FA044670B94A +:1078E000AC4BAD4A1860AD4B1860AD4B3068C3E986 +:1078F0000022FFF7E5FB34600DB0BDE8F08F316882 +:1079000000295FD13068FFF7DBFB204600F04EFE18 +:10791000411C3846F6F780FF3060002857D12378A5 +:10792000A04AA1493A2B08BF01340AAE334620468B +:1079300000F0FEFD0028DFDD0A9BE718E35C2D2B3D +:1079400049D101374FF0FF340DF1200A0DF11E0B24 +:107950004FF00008CDE9016A94490396CDF800B0D4 +:10796000334607AA3846ADF81E80ADF8208000F0F7 +:10797000DFFD4045C0DDBDF81E30BDF82020DFF83A +:1079800038923C2101FB0322BDF81C304FF46161A9 +:1079900001FB03235C43AC62814C824B23600A9B56 +:1079A00081491F444A463346384600F0C1FD4045F0 +:1079B00016DC23686360774BAA6A1A60774BC3F8BA +:1079C000008099E700F0E0FD00289BD194E7214674 +:1079D00000F0E4FDA3E72B2B08BF01370124B3E738 +:1079E0000A9BC4F80490FC18FB5C2D2B40F08B80A4 +:1079F00001344FF0FF370023ADF81C30ADF81E30D6 +:107A0000ADF820300A93CDE902A6CDE900B667496A +:107A1000334607AA204600F08BFD002878DCAF6AC9 +:107A2000A7F561670A9B2F651C442F464FF000099C +:107A300023782C2B08BF013494F80080B8F14D0F47 +:107A400078D10DF12603CDE9016309AB00935849C4 +:107A5000039633460DF12202204600F069FD03280B +:107A60007FF44AAFBDF822104B1E0B2B3FF644AFFC +:107A7000BDF82420531E042B3FF63EAFBDF8263040 +:107A8000062B3FF639AFC7E9031287F808807B6100 +:107A90000A9B04EB03080223ADF81C300023ADF869 +:107AA0001E30ADF820300A9398F800302F2B09D102 +:107AB000CDE902A6CDE900B63E49334607AA4046C5 +:107AC00000F036FDBDF81E30BDF820203C2101FB42 +:107AD0000322BDF81C304FF4616101FB0323BB613D +:107AE0000A9C28374444B9F1000F20D06868FFF79A +:107AF0002FFE284BAA6A1A602B6D9B1A274A18BFC3 +:107B000001231360F8E62B2B08BF0134012772E72D +:107B1000BDF81E30BDF820203C2101FB0322BDF83A +:107B20001C304FF4616101FB03235F437AE74FF0A0 +:107B300001097DE7B8F14A0F06BF013443464423EB +:107B40000A220BA920460593FFF7F8FDDDF82C80EB +:107B5000059BADF82600A04514D14D23B9F1000FC7 +:107B600007D12B7203210223C5E90313C5F8149032 +:107B700091E785F830300B220123C5E90D2300235E +:107B8000EB6388E780B23B72786184E764F20108B6 +:107B90003C3E0024443E002467F20108403E00249D +:107BA000580300242F3E00246BF201088EF20108D6 +:107BB0007AF201088DF20108243E002438B5074D01 +:107BC00004460846114600222A601A46F7F7ACFE22 +:107BD000431C02D12B6803B1236038BDAC3E0024A6 +:107BE0001FB514461A46094B1B680546D8684CB1A8 +:107BF000074B0091CDE9013406492B4600F054F8BB +:107C000000F0AEFD044B1C46F3E700BFF402002475 +:107C1000A0F20108ADF20108F5A3010838B5064D40 +:107C20000023044608462B60F7F7DAFF431C02D115 +:107C30002B6803B1236038BDAC3E00240B78722B57 +:107C400030B522D0772B24D0612B27D016230360A8 +:107C5000002030BD622D12D0782D13D02B2D07D1EE +:107C600020F01C0023F0030340F0100043F0020357 +:107C700011F8015F002DEDD123431360E9E743F4D0 +:107C80008033F5E743F40063F2E700242346042041 +:107C9000EEE74FF4C06401230820E9E74FF40274D3 +:107CA00001234FF48470E3E70EB403B5014603AB40 +:107CB000054853F8042B0068019300F063F902B003 +:107CC0005DF804EB03B07047F402002438B5074DAB +:107CD00000230446084611462B60F7F733FD431C8A +:107CE00002D12B6803B1236038BD00BFAC3E002435 +:107CF0002DE9F84F074689461646F6F7EDFB184B77 +:107D00001C689A4634B14B46984613F8011B39B1AA +:107D10003D29F9D13846F7F785FB0020BDE8F88FFB +:107D2000A8EB0908A34654F8040B0028F2D04246F9 +:107D3000494600F043FC0028F4D154F8043C03EB1E +:107D4000080513F808303D2BECD1DAF80030ABEB26 +:107D500003039B1038463360F7F764FB681CDDE7CC +:107D6000B803002407B501AAFFF7C2FF03B05DF80E +:107D700004FB000000487047600300242DE9F04137 +:107D8000D0E900670C46514A00233046394601F0DD +:107D90009DF9394605464D4A3046002301F096F9D3 +:107DA000002ABCBF02F5A83202F5C0724FF461612F +:107DB00005F52F20B2FBF1F301FB13224FF03C013C +:107DC000ACBF00F66C2000F66B20A360B2FBF1F3B1 +:107DD00001FB132263602260C31C072293FBF2F2B3 +:107DE000C2EBC2029B1A48BF07330028A361B8BF89 +:107DF000A0F50E333649AEBF90FBF1F1A3F52C731D +:107E000093FBF1F1334B03FB010048F6AC62B0FB8E +:107E1000F2F2024440F2B45CB0FBFCF3D21A40F23E +:107E20006D172D4BB0FBF3F36426D31AB3FBF7F5B4 +:107E3000B3FBFCF3B5FBF6F2D31A034407FB15338F +:107E4000992003EB830C0CF1020C03F1010EBCFB37 +:107E5000F0F7784302304FF00508B0FBF8F0AEEBD6 +:107E6000000040F2F95EF44594BF4FF0020C6FF051 +:107E7000090C67444FF4C87C0CFB0151012F98BFDB +:107E80000131B3F5997F0CD3A3F59973E361A1F2A6 +:107E90006C710023E060C4E9047123622046BDE8F0 +:107EA000F08115F0030F02D106FB12525AB94FF4BC +:107EB000C876B5FBF6F206FB1252B2FA82F252090C +:107EC0003B331344E2E70122FAE700BF805101008F +:107ED000B13A02004FC5FDFFB03A020038B5064D79 +:107EE0000023044608462B60F7F7AEFC431C02D182 +:107EF0002B6803B1236038BDAC3E002438B5074D74 +:107F000004460846114600222A601A46F7F76BFC21 +:107F1000431C02D12B6803B1236038BDAC3E002462 +:107F200051F8043C181F002BBCBF0B58C0187047F9 +:107F30009368013B002B10B4936008DA9469A34264 +:107F400001DB0A2903D15DF8044B00F049BB13683B +:107F5000581C1060197008465DF8044B7047F8B55E +:107F600006460F461446D518AC4201D1002007E062 +:107F700014F8011B3A463046FFF7DAFF431CF3D1F1 +:107F8000F8BD00002DE9F04F0D469DB0144698460F +:107F9000064618B183690BB9FEF736FC894B9D4242 +:107FA0001BD175686B6ED90705D4AB899A0502D4CD +:107FB000A86DFFF716F8AB891B0701D52B69EBB944 +:107FC0002946304600F05EFBC0B16B6EDC070ED573 +:107FD0004FF0FF301DB0BDE8F08F7B4B9D4201D1CB +:107FE000B568DFE7794B9D4208BFF568DAE7AB89F2 +:107FF0009805EDD4A86DFEF7F6FFE9E70023099395 +:1080000020238DF82930CDF80C803023DFF8C08193 +:108010008DF82A304FF0010923469A4613F8012BB8 +:108020000AB1252AF9D1BAEB040B0BD05B462246E4 +:1080300029463046FFF793FF013000F0AA80099AE5 +:108040005A4409929AF80030002B00F0A2800023D5 +:108050004FF0FF32CDE905230AF1010A049307939B +:108060008DF853301A935446052214F8011B5848D2 +:10807000FFF72EF8049AD8B9D10644BF20238DF813 +:108080005330130744BF2B238DF853309AF8003038 +:108090002A2B15D0079A544600204FF00A0C21468F +:1080A00011F8013B303B092B4ED9B0B1079214E0D7 +:1080B000A0EB080309FA03F313430493A246D2E7A3 +:1080C000039B191D1B680391002BBBBF5B4242F051 +:1080D000020207930793B8BF049223782E2B0CD18A +:1080E00063782A2B35D1039B1A1D1B680392002B42 +:1080F000B8BF4FF0FF3302340593DFF8E4A02178D6 +:1081000003225046FEF7E4FF40B14023A0EB0A00F3 +:1081100003FA00F0049B03430134049314F8011B99 +:108120002C488DF828100622FEF7D2FF00283FD0F9 +:10813000294B1BBB039B073323F00703083303932F +:10814000099B3B44099367E70CFB02320C46012074 +:10815000A5E700230134059319464FF00A0C204689 +:1081600010F8012B303A092A03D9002BC5D005910C +:10817000C3E70CFB012104460123F0E703AB0093A6 +:108180002A46164B04A93046AFF300800746781CF8 +:10819000D6D16B6ED90705D4AB899A0502D4A86DE8 +:1081A000FEF721FFAB895B063FF512AF099811E797 +:1081B00003AB00932A46094B04A9304600F080F82F +:1081C000E4E700BF2CF101084CF101080CF10108B3 +:1081D000DCF20108E6F20108000000005F7F010800 +:1081E000E2F201082DE9F047164699468A680B69C4 +:1081F000DDF820809342B8BF1346336091F84320E6 +:1082000007460C460AB1013333602368990642BF22 +:10821000336802333360256815F0060506D104F192 +:10822000190AE36832689B1AAB4226DC94F84320B3 +:10823000131E226818BF012392062BD404F14302B7 +:1082400049463846C04701301ED02368E568326889 +:1082500003F00603042B08BFAD1AA36822690CBF04 +:1082600025EAE57500259342C4BF9B1AED18002648 +:108270001A34B5421AD1002008E00123524649467B +:108280003846C047013003D14FF0FF30BDE8F087DA +:108290000135C6E7E1185A1C302081F8430022441A +:1082A00094F8451082F843100233C7E701232246B1 +:1082B00049463846C0470130E6D00136D9E70000CC +:1082C0002DE9FF470C469146277E0C99782F804672 +:1082D0009A4604F1430207D8622F0AD8002F00F013 +:1082E000D880582F00F0A38004F1420684F8427031 +:1082F0003AE0A7F16303152BF6D801A050F823F05C +:10830000598301086D830108E9820108E9820108A7 +:10831000E9820108E98201086D830108E982010808 +:10832000E9820108E9820108E982010879840108EB +:108330009D8301085B840108E9820108E982010844 +:108340009B840108E98201089D830108E9820108F4 +:10835000E9820108638401080B681A1D1B680A6022 +:1083600004F1420684F842300123A3E0256808683E +:108370002E0600F104030AD505680B60002D03DA10 +:108380002D236D4284F843305E480A2319E015F02E +:10839000400F05680B6018BF2DB2EFE70B6825682A +:1083A000181D0860280601D51D6802E06906FBD586 +:1083B0001D8854486F2F0CBF08230A23002184F81E +:1083C00043106668A660002EA2BF216821F0040158 +:1083D00021600DB9002E4DD01646B5FBF3F103FB1D +:1083E0001157C75D06F8017D2F46BB420D46F4D9F3 +:1083F000082B0BD12368DF0708D5236961689942F0 +:10840000DEBF302306F8013C06F1FF36921B2261E5 +:10841000CDF800A04B4603AA21464046FFF7E2FEF6 +:1084200001304CD14FF0FF3004B0BDE8F087354843 +:1084300084F8457023680E681F0656F8045B0E60CA +:1084400014D5D90744BF43F0200323601DB9236826 +:1084500023F0200323601023B0E7236843F02003B8 +:1084600023607823284884F84530E3E75E0648BF58 +:10847000ADB2E6E71646BBE70B68266860691D1DCE +:108480000D6035061B6801D5186002E07106FBD54A +:108490001880002323611646BAE70B681A1D0A608C +:1084A0001E68626800213046FEF712FE08B1801B8C +:1084B000606063682361002384F84330A8E7236980 +:1084C000324649464046D0470130ABD023689B072F +:1084D00013D4E068039B9842B8BF1846A4E7012371 +:1084E000324649464046D04701309BD00135E368CB +:1084F00003995B1AAB42F2DCEBE7002504F11906A5 +:10850000F5E700BFEDF20108FEF2010838B5074DAE +:1085100004460846114600222A601A46F7F7B2F9C7 +:10852000431C02D12B6803B1236038BDAC3E00244C +:108530000EB410B59FB021AC4FF4017154F8042B68 +:108540000192ADF81C100490089000F02FF80C4B2D +:10855000059009900D930B48019A0068039400233D +:10856000119316934FF6FF73ADF81E3004A92346FE +:1085700000F058F91FB0BDE8104003B0704700BFCD +:10858000CB740108F402002410F8012B11F8013B10 +:10859000012A28BF9A42F7D0D01A7047034611F833 +:1085A000012B03F8012B002AF9D17047034613F879 +:1085B000012B002AFBD1181A0138704710B56AB197 +:1085C0000139841810F8013B11F8012F934203D1AF +:1085D000A04201D0002BF5D1981A10BD1046FCE73F +:1085E000F8B50E461446054618B183690BB9FEF777 +:1085F0000BF9214B9C422BD16C68A369A360A38922 +:108600001A072FD523696BB323692068C01A6369E1 +:10861000F6B28342374604DC21462846FEF74EF880 +:1086200030BBA368013BA36023685A1C22601E7004 +:1086300063690130834204D0A389DB0706D50A2E83 +:1086400004D121462846FEF739F888B93846F8BDE6 +:108650000A4B9C4201D1AC68CFE7094B9C4208BF52 +:10866000EC68CAE72146284600F00CF80028CBD079 +:108670004FF0FF37EAE700BF2CF101084CF1010889 +:108680000CF10108324B70B51D6806460C4625B149 +:10869000AB6913B92846FEF7B7F82E4B9C420FD1B1 +:1086A0006C68A389B4F90C2019072CD4DD0611D409 +:1086B0000923336042F04003A3814FF0FF303EE0D6 +:1086C000254B9C4201D1AC68EBE7244B9C4208BF90 +:1086D000EC68E6E7580712D5616B41B104F1440339 +:1086E000994202D03046F6F793F800236363A389DA +:1086F00023F02403A3810023636023692360A389FB +:1087000043F00803A38123694BB9A38903F42073C1 +:10871000B3F5007F03D021463046FEF789FCA089DF +:10872000B4F90C2010F001030AD00023A3606369A0 +:108730005B42A361236943B910F08000BAD170BDD8 +:10874000810758BF6369A360F4E70020F7E700BF23 +:10875000F40200242CF101084CF101080CF101088D +:1087600008B5062000F084FB0120F7F721F838B5A2 +:108770004B1C144603D14FF0FF35284638BD938972 +:1087800023F020039381636B5268CDB28BB1A36B4E +:10879000934208DD23685A1E226003F8015C636877 +:1087A00001336360E9E7214600F07EFB0028F1D049 +:1087B000E1E72169236851B1994208D213F8011CFD +:1087C000A94204D1013B013223606260D5E7C4E9CC +:1087D0000F3204F1440363630323A363234603F8C6 +:1087E000465F23600123DCE710B50C46496B69B195 +:1087F00004F14403994201D0F6F70AF8236C636050 +:108800000020606313B1E36B236010BD2369236014 +:1088100000236360A38943F02003A3814FF0FF305E +:10882000F3E700002DE9F04F0C46ADF5237D002164 +:10883000CDE94411B249A0910DF10408B149B24FFC +:10884000DFF8C892CDF818810646A191009392F8FE +:1088500000A0BAF1000F00F051811AF8073013F0B0 +:10886000080302F1010519D06368002B0FDD2368AE +:108870001A78BA5C120701D42A46E8E7459A013211 +:10888000459262680133013A62602360ECE7A19B84 +:108890002146304698470028E9D0EDE7BAF1250F88 +:1088A00040F083804193439353782A2B02BF1023D7 +:1088B000951C41930A22AB461BF8011BA1F1300322 +:1088C000092B1DD991480322FEF702FC40B1012378 +:1088D000A0EB090003FA00F0419B184341905D466C +:1088E00015F8013B782B06D8572B10D8252B5CD0D8 +:1088F00056D8002B74D0032347930A23429381E078 +:10890000439B02FB0313303B43935D46D3E7A3F144 +:108910005802202AEFD801A151F822F0EF8901086E +:10892000F7880108F78801084D8A0108F7880108CF +:10893000F7880108F7880108F7880108F788010817 +:10894000F7880108F7880108638A0108398A010855 +:10895000A7890108A7890108A7890108F7880108E4 +:108960003D8A0108F7880108F7880108F78801089F +:10897000F7880108738A0108458A0108E789010818 +:10898000F7880108F78801086F8A0108F78801084D +:10899000398A0108F7880108F7880108EF8901087A +:1089A000453B022BA7D805232BE06368002B0DDD88 +:1089B00023681A78524540F0A18001336268236031 +:1089C000459B013A01336260459355E7A19B2146DF +:1089D000304698470028EBD04498002840F0848027 +:1089E0004FF0FF3086E0419A42F020024192419AD6 +:1089F00042F40072419210226F2B429234BF032343 +:108A0000042347936368002B41DD419B590604D43E +:108A100023681A78BA5C120740D4479B022B4FDCBC +:108A20006B46224641A9304600F074F8012865D013 +:108A300002287FF421AFCFE70A22DDE7002342932B +:108A40000323DEE7082342930423DAE7294640465E +:108A500000F0ACF9419B43F04003419305460123EC +:108A6000CFE7419B43F0400341930023C9E7022332 +:108A7000C7E74198C3063FF5FFAE009B459A191D15 +:108A800000911B68C0074CBF1A801A60F4E6A19BD6 +:108A90002146304698470028B7D09DE7459A0132D5 +:108AA00045926268013A002A626002DD0133236068 +:108AB000AEE7A19B2146304698470028A8D08BE717 +:108AC000042B06DC6B46224641A9304600F07AF8BA +:108AD000ACE70F4B002B3FF4CFAE6B46224641A9CB +:108AE0003046AFF30080A1E7A38913F0400F18BF11 +:108AF0004FF0FF300DF5237DBDE8F08F4498F9E786 +:108B00006F870108E98701080CF00108E2F201080B +:108B1000000000002DE9F84315468A6880460C469F +:108B200032B98A69002A0CBF01224FF0FF328A60F5 +:108B30002268DFF88C90D1065FBF1A68111D19609A +:108B400016680027A06988B1012807D12B681A7818 +:108B500063699B5C53B927BBBDE8F883022820D129 +:108B60002B681B7813F809301B071AD42368DA0620 +:108B70005EBF2B681B7806F8013B2A686B680132E0 +:108B80002A60A268013B013A6B600137A26042B1E2 +:108B9000002BD7DCD4F8803129464046984700287E +:108BA000D0D0236813F0100305D1E2680132E260EF +:108BB000A26902B1337023691F4427610020CBE70B +:108BC0000CF001082DE9F04F9846744B0C46824694 +:108BD000164693E8070087B003AB83E80700704BA5 +:108BE000A169704A032918BF1A46A36801925A1E48 +:108BF000B2F5AE7F88BF6FF4AE75274682BF03EB38 +:108C0000050940F25D13A36057F81C3B43F4506321 +:108C100098BF4FF0000923603D464FF0000B3168CC +:108C200003AB097853F82B000222FEF751FA28B360 +:108C3000BBF1010F59D162682AB92268082342F4B6 +:108C4000007263602260226822F4A0622260A2683F +:108C5000511EA16092B13268511C3160127805F842 +:108C6000012B7268013A002A726007DCD4F8802177 +:108C7000314650469047002840F085800BF1010BAB +:108C8000BBF1030FCBD163680BB90A236360636840 +:108C900045496069C91A00F089F84FF0000BA368D4 +:108CA0002268002B3DD03168606991F800C010F84F +:108CB0000C00002835D0BCF1300F24D1100522D58E +:108CC0000BF1010BB9F1000F03D0013309F1FF39AA +:108CD000A3607368013B002B73601BDD33680133B5 +:108CE0003360A368013BA360D9E7BBF1020FAED1AB +:108CF000226802F4C061B1F5007FBFD11023636028 +:108D000042F48072A2E722F4106222600B7805F828 +:108D1000013BDEE7D4F880313146504698470028C1 +:108D2000DFD02368D9050DD5BD4209D915F8011C3E +:108D3000D4F87C3132465046984705F1FF394D460C +:108D4000BD4228D0226812F0100213D12A70636845 +:108D5000019E39465046B047D8F8003021681A1DA8 +:108D6000C8F8002011F0200F1B680FD01860E368CE +:108D70000133E360ED1BAB4425695D4425610020B0 +:108D800007B0BDE8F08F4FF0000BCAE7CA074CBF31 +:108D900018801860EBE70120F2E700BF2CF3010810 +:108DA000397701083D76010828F3010870B50B7882 +:108DB00004465E2B0BBF4B78481C881C002208BF62 +:108DC0000122611E04F1FF0501F8012FA942FBD128 +:108DD0000BB9013870BD82F00101E154421C12F858 +:108DE000015C2D2D02F1FF36104606D05D2DF1D02D +:108DF0000DB93046EEE72B46EFE716785D2EFAD038 +:108E0000B342F8DC1846013086422154FBDCD843DB +:108E100030445D1CB342A8BF00202B180232DEE7AD +:108E20001F2938B504460D4604D9162303604FF0B8 +:108E3000FF3038BD426C12B152F821304BB9204698 +:108E400000F030F82A4601462046BDE8384000F0E0 +:108E500017B8012B0AD0591C03D116230360012037 +:108E6000E7E7002442F82540284698470020E0E73D +:108E7000024B01461868FFF7D3BF00BFF40200247D +:108E800038B5074D00230446084611462B6000F014 +:108E900005FB431C02D12B6803B1236038BD00BF22 +:108EA000AC3E002400F0F2BA2DE9F0410C46496BCB +:108EB00004F1440399421DD14FF48061F5F7ACFCF5 +:108EC00018B94FF0FF30BDE8F0814FF48063A36321 +:108ED00094F84630606380F8FF3394F8453080F8AA +:108EE000FE3394F8443080F8FD3300F2FD3020600A +:108EF0000020E8E7A66B77003A46F5F78BFC0546BD +:108F00000028DED000EB0608014632464046FEF758 +:108F10002FF9C4E90D57C4F80080E9E770B50E4693 +:108F20001446054618B183690BB9FDF76DFC144B67 +:108F30009C421AD16C68636ED80705D4A389990541 +:108F400002D4A06DFEF74DF822462846314600F0C7 +:108F500033F8636EDA07054605D4A3899B0502D46E +:108F6000A06DFEF740F8284670BD064B9C4201D12B +:108F7000AC68E0E7044B9C4208BFEC68DBE700BF4D +:108F80002CF101084CF101080CF10108024B0A46D2 +:108F900001461868FFF7C2BFF402002430B501395A +:108FA0000024A24201D1002005E0035D01340D5DE3 +:108FB000AB42F6D0581B30BD70B50D461446064680 +:108FC00018B183690BB9FDF71FFC1C4B9C4224D1DF +:108FD0007468636ED80705D4A389990502D4A06D7F +:108FE000FDF7FFFFA368013B002BA36005DAA26930 +:108FF00093421CDBEBB20A2B19D023685A1C226067 +:109000001D70EDB2636EDA0705D4A3899B0502D407 +:10901000A06DFDF7E8FF284670BD094B9C4201D1C9 +:10902000B468D6E7074B9C4208BFF468D1E72946ED +:1090300022463046FFF7D4FA0546E3E72CF1010853 +:109040004CF101080CF10108C9B2034610F8012BDC +:109050001AB18A42F9D118467047002918BF002377 +:10906000F9E770B503461E4613F8014B44B14A1E9A +:1090700001E0A54204D012F8015F002DF9D1F2E71A +:10908000301A70BD10B50139034632B111F8014FE5 +:1090900003F8014B013A002CF7D11A440021934206 +:1090A00000D110BD03F8011BF9E770B503461E4659 +:1090B00013F8014B3CB14A1E01E0A542F7D012F86B +:1090C000015F002DF9D1301A70BD00007BB972B973 +:1090D0000029BEBF00204FF0004106E008BF002875 +:1090E0001CBF6FF000414FF0FF3000F0A1B9ADF1AF +:1090F000080C6DE904CE002909DB002B1ADB00F017 +:1091000035F8DDF804E0DDE9022304B070474042A1 +:1091100061EB4101002B1BDB00F028F8DDF804E0D7 +:10912000DDE9022304B0404261EB4101524263EBAE +:1091300043037047524263EB430300F017F8DDF836 +:1091400004E0DDE9022304B0404261EB41017047D5 +:10915000524263EB430300F009F8DDF804E0DDE977 +:10916000022304B0524263EB430370472DE9F047FA +:10917000089D04468C46002B40F083808A421746A7 +:1091800047D9B2FA82F242B1C2F1200024FA00F0CB +:109190009140974040EA010C94404FEA1748230C55 +:1091A000BCFBF8F61FFA87FE08FB16C143EA014331 +:1091B00006FB0EF1994209D9FB1806F1FF3080F049 +:1091C0001981994240F21681023E3B445B1AA4B2D7 +:1091D000B3FBF8F008FB103344EA034400FB0EFE37 +:1091E000A64509D93C1900F1FF3380F00581A64559 +:1091F00040F2028102383C4440EA0640A4EB0E04EF +:1092000000261DB1D4400023C5E900433146BDE826 +:10921000F08702B9FFDEB2FA82F2002A50D1CB1BEE +:109220004FEA174E1FFA87F80126B3FBFEFC210C0C +:109230000EFB1C3341EA034108FB0CF38B4207D9B8 +:1092400079180CF1FF3002D28B4200F2E98084469B +:10925000C91AA3B2B1FBFEF00EFB101143EA0144A0 +:1092600008FB00F8A04507D93C1900F1FF3302D2F2 +:10927000A04500F2D9801846A4EB080440EA0C404F +:10928000BFE78B4209D9002D00F0B1800026C5E967 +:10929000000130463146BDE8F087B3FA83F6002E70 +:1092A0004AD18B4202D3824200F2B880841A61EB29 +:1092B000030101208C46002DA8D0C5E9004CA5E78C +:1092C000C2F1200320FA03F6974001FA02F04FEAB8 +:1092D000174ED9403043030CB1FBFEF61FFA87F856 +:1092E0000EFB161143EA014306FB08F1994204FA0A +:1092F00002F409D9FB1806F1FF3C80F08D809942F9 +:1093000040F28A80023E3B445B1A81B2B3FBFEF01E +:109310000EFB103341EA034100FB08F38B4207D9EF +:10932000791800F1FF3C73D28B4271D9023839446D +:10933000CB1A40EA064678E7C6F1200C03FA06F499 +:1093400022FA0CF31C4320FA0CF701FA06F34FEA59 +:10935000144E21FA0CF11F433B0CB1FBFEF91FFA2E +:1093600084F80EFB191143EA014109FB08FA8A450A +:1093700002FA06F200FA06F308D9611809F1FF3083 +:1093800048D28A4546D9A9F102092144A1EB0A0134 +:10939000BFB2B1FBFEF00EFB101147EA014700FB24 +:1093A00008F8B84507D9E71900F1FF312ED2B845C2 +:1093B0002CD90238274440EA0940A7EB0807A0FB54 +:1093C00002894F45C64649461AD317D05DB1B3EB63 +:1093D0000E0267EB010707FA0CFCF2404CEA0202AE +:1093E000F740C5E9002700263146BDE8F0872E4644 +:1093F00028460BE70646E9E61846FDE64345E5D272 +:10940000B8EB020E69EB04010138DFE70846D2E74A +:1094100060468DE78146B9E7664675E730464AE71C +:10942000ACF1020C394413E702383C4424E700BF96 +:10943000704700BF53B94AB9002908BF00281CBFB4 +:109440004FF0FF314FF0FF30FFF7F2BFADF1080CE6 +:109450006DE904CEFFF78AFEDDF804E0DDE90223C2 +:1094600004B07047430803F05533C01A830803F073 +:10947000333300F03330184400EB101000F00F309D +:1094800000EB002000EB0040000E7047024B58221A +:109490001A604FF0FF307047AC3E0024024B582258 +:1094A0001A604FF0FF307047AC3E0024F8B500BFA3 +:1094B000F8BC08BC9E467047F8B500BFF8BC08BCB5 +:1094C0009E467047436F6D6D616E6420706172617E +:1094D0006D206572726F723A2077726F6E672061CD +:1094E0006464726573732073697A650A00496E76E5 +:1094F000616C696420616C74206279746573207397 +:10950000697A650050696E6D6170206572726F7264 +:109510003A2077726F6E6720706F7274206E756D6F +:109520006265722E006170706C69636174696F6E40 +:109530005F756E6E616D65645F746872656164000D +:10954000657175657565006170706C6963617469DA +:109550006F6E5F756E6E616D65645F6D7574657855 +:109560000048414C5F5254435F53657444617465D5 +:10957000206572726F720A0048414C5F5254435F1B +:1095800053657454696D65206572726F720A004983 +:1095900032433132333A20496E76616C696420631C +:1095A0006C6F636B20736F7572636500493243346F +:1095B0003A20496E76616C696420636C6F636B203E +:1095C000736F75726365004932433A20756E6B6E36 +:1095D0006F776E20696E7374616E63650049324304 +:1095E0003A2061626E6F726D616C206361736520F9 +:1095F00073686F756C64206E6F742068617070653D +:109600006E640043616E6E6F7420696E6974696187 +:109610006C697A65205254432077697468204C53F2 +:10962000490A00506572697068436C6B496E6974D1 +:1096300053747275637420525443206661696C657B +:10964000642077697468204C53490A0052544320BF +:10965000696E697469616C697A6174696F6E20669C +:1096600061696C65640A00456E61626C654279707F +:10967000617373536861646F77206572726F720AE9 +:109680000048414C5F5243435F4F7363436F6E66C4 +:109690006967204552524F520A0048414C5F52437D +:1096A0004345785F506572697068434C4B436F6EF9 +:1096B000666967204552524F520A005365745379C8 +:1096C00073436C6F636B206661696C65640A0001AB +:1096D000808080808080800480808080808080087E +:1096E000808080808080801080808080808080204A +:1096F0008080808080808040000408102040020428 +:1097000008102040000000000102030401020304CD +:1097100006070809A086010080380100C0D40100B6 +:10972000000000007A0D0000FA0000005C1200004A +:10973000A00F0000800200001400000000000000E4 +:10974000801A060000E20400005307000000000039 +:1097500084030000640000001405000058020000AB +:10976000FA000000640000000000000040420F000A +:1097700000350C00804F120000000000C201000004 +:1097800032000000F4010000040100003C00000071 +:109790006400000000000000000000000000000164 +:1097A0000100000000000002220000000000000490 +:1097B0002300000000000008FFFF00000000000080 +:1097C00008000000005C0040CA1300001600000002 +:1097D00000540040CA13000016010000001C00588D +:1097E000CA1B00001800000000540040CA1300000B +:1097F00018010000001C0058CA1B00001A000000DD +:1098000000580040CA1300003C000000001C005833 +:10981000CA1300005100000000580040CA130000A5 +:109820005E000000001C0058CA1300007400000015 +:1098300000580040CA13000077000000005C0040A0 +:10984000CA1300007B000000001C0058CA1300006F +:10985000FFFF0000FFFFFFFF0000000017000000F7 +:1098600000540040CA13000017010000001C0058FB +:10987000CA1B00001900000000540040CA13000079 +:1098800019010000001C0058CA1B00001B0000004A +:1098900000580040CA13000029000000005C00408E +:1098A000CA1300003D000000001C0058CA1300004D +:1098B0005000000000580040CA1300005F00000084 +:1098C000001C0058CA13000075000000005800403A +:1098D000CA13000078000000005C0040CA130000BA +:1098E0007C000000001C0058CA130000FFFF0000AD +:1098F000FFFFFFFF0000000001000200040006005F +:1099000008000A000C001000200040008000000148 +:1099100001030507090E10121416181C1E00000082 +:109920000000000000000000F5290108192A0108C4 +:10993000BD1C0108311601084DC7000815170108A4 +:109940002D1A0108F5170108D52C010859C6000881 +:1099500059C6000851C60008D7C50008CDC5000883 +:10996000D1C50008692C0108092C0108A12B0108A8 +:1099700049C600080000000000000000AD14000807 +:10998000171A0008D91400085714000841140008D9 +:1099900035140008291400081D1400088914000853 +:1099A0000000000000000000F1130008051A000884 +:1099B000851300086F130008411300089B1300086B +:1099C0006313000857130008351300082913000813 +:1099D0001D13000807130008FDC90008A3C90008EB +:1099E0009DC900089DC90008F9C90008EDC9000813 +:1099F000CD130008000000000000000085000108F1 +:109A0000350101082DFF000819FF000800000000C3 +:109A100000000000C5140008F3190008D91400085C +:109A200073140008411400083514000829140008B4 +:109A30001D14000889140008000000000000000048 +:109A400009140008E1190008851300086F130008C5 +:109A500041130008B71300086313000857130008E8 +:109A600035130008291300081D1300080713000808 +:109A7000FDC90008A3C900089DC900089DC90008C8 +:109A8000F9C90008EDC90008CD1300080000000066 +:109A90000000000075FE000805FF0008000000003F +:109AA0000000000039290108BD29010840420F00CB +:109AB000200000000080000010000000007D000079 +:109AC000100000000100000002000000040000007F +:109AD000080000001000000020000000400000000E +:109AE00080000000000100000002000000040000EF +:109AF00000080000001000000020000000400000EE +:109B0000008000000000000080DE280080C84D00BA +:109B100000A7760000349E008012C700809FEE00F0 +:109B2000007E1701805C400180E9670100C8900158 +:109B30000055B8010000000080DE2800001A4F0028 +:109B400080F8770080859F000064C80000F1EF0076 +:109B500080CF180100AE4101003B690180199201DC +:109B600080A6B9016C9B0108E00F0024E9050008FC +:109B7000DD0500088D0500087D050008C105000809 +:109B8000A105000809C8000835060008000000000B +:109B90006C6974746C656673002E2E002F00EBFEEA +:109BA000904D53444F53352E30004E4F204E414D73 +:109BB00045202020204641543332202020004E4FA3 +:109BC000204E414D45202020204641542020202079 +:109BD00020002A3A3C3E7C223F7F002B2C3B3D5B01 +:109BE0005D0000FBFFFBFEECEAF3EFF7F3EDEDEABF +:109BF000FB8CF0F4E9EA809A45418E418F8045451F +:109C0000454949498E8F9092924F994F5555599990 +:109C10009A9B9C9D9E9F41494F55A5A5A6A7A8A983 +:109C2000AAABACADAEAFB0B1B2B3B4B5B6B7B8B91C +:109C3000BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C90C +:109C4000CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9FC +:109C5000DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EC +:109C6000EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9DC +:109C7000FAFBFCFDFEFFC700FC00E900E200E40087 +:109C8000E000E500E700EA00EB00E800EF00EE008E +:109C9000EC00C400C500C900E600C600F400F600F0 +:109CA000F200FB00F900FF00D600DC00A200A300D8 +:109CB000A500A7209201E100ED00F300FA00F100F9 +:109CC000D100AA00BA00BF001023AC00BD00BC0048 +:109CD000A100AB00BB0091259225932502252425E8 +:109CE00061256225562555256325512557255D2576 +:109CF0005C255B251025142534252C251C250025E5 +:109D00003C255E255F255A25542569256625602555 +:109D100050256C2567256825642565255925582516 +:109D2000522553256B256A2518250C258825842561 +:109D30008C2590258025B103DF009303C003A30386 +:109D4000C303B500C403A6039803A903B4031E22EA +:109D5000C603B50329226122B100652264222023B3 +:109D60002123F7004822B0001922B7001A227F20D1 +:109D7000B200A025A0000000000000006410B71D84 +:109D8000C8206E3BAC30D9269041DC76F4516B6B29 +:109D90005861B24D3C7105502083B8ED44930FF0EB +:109DA000E8A3D6D68CB361CBB0C2649BD4D2D386A1 +:109DB00078E20AA01CF2BDBD000000000000000017 +:109DC00049A2000885A20008DD6D0008A16D000809 +:109DD000DBC200083FC10008FDBE0008C5BF000887 +:109DE00059A0000853700008D9A100089571000817 +:109DF000CDBC0008519C0008B39900086FAB000867 +:109E0000299C0008DF12000867AE000837700008C0 +:109E1000EF1200081B7000086FB80008F9BB0008BB +:109E2000E575000835B00008EDAF0008FF6F0008C9 +:109E3000CBAF00081D6E000829A30008F5780008C4 +:109E4000E1780008A1A20008FCFFFFFF000000006D +:109E50007DA2000897A2000800000000000000009A +:109E60000000000000000000D3E00008E31200083A +:109E7000E9120008E3120008E312000801130008C9 +:109E8000E3120008FCFFFFFF0000000000000000DC +:109E900000000000000000000000000000000000C2 +:109EA00000000000D3E00008E3120008E9120008F7 +:109EB000E3120008E312000801130008E31200088F +:109EC00000000000000000004177000885770008CE +:109ED000DD6D0008A16D00082992000803970008B5 +:109EE000719100083396000819870008817D0008E9 +:109EF000AD75000831930008CFB90008B38F000892 +:109F0000DF860008DF850008858F0008DF12000863 +:109F1000398200080B750008EF120008DB74000896 +:109F2000F584000843B90008417500082D89000830 +:109F30001B7D0008BB740008E17C00081D6E000852 +:109F4000FCFFFFFF000000007D7700089777000806 +:109F500061001A03E0001703F8000703FF00010087 +:109F600078010001300132010601390110014A0176 +:109F70002E017901060180014D0043028101820119 +:109F800082018401840186018701870189018A0198 +:109F90008B018B018D018E018F0190019101910147 +:109FA00093019401F60196019701980198013D02F1 +:109FB0009B019C019D0120029F01A001A001A20123 +:109FC000A201A401A401A601A701A701A901AA0158 +:109FD000AB01AC01AC01AE01AF01AF01B101B20107 +:109FE000B301B301B501B501B701B801B801BA01B8 +:109FF000BB01BC01BC01BE01F701C001C101C2012E +:10A00000C301C401C501C401C701C801C701CA0118 +:10A01000CB01CA01CD011001DD0101008E01DE017D +:10A020001201F3010300F101F401F401F801280128 +:10A03000220212013A020900652C3B023B023D025A +:10A04000662C3F0240024102410246020A015302CD +:10A05000400081018601550289018A0158028F0161 +:10A060005A0290015C025D025E025F02930161028E +:10A07000620294016402650266026702970196011A +:10A080006A02622C6C026D026E029C017002710207 +:10A090009D01730274029F017602770278027902B1 +:10A0A0007A027B027C02642C7E027F02A60181027E +:10A0B0008202A9018402850286028702AE0144025F +:10A0C000B101B20145028D028E028F02900291020F +:10A0D000B7017B030300FD03FE03FF03AC03040091 +:10A0E0008603880389038A03B1031103C2030200B4 +:10A0F000A303A303C4030803CC0303008C038E0350 +:10A100008F03D8031801F2030A00F903F303F403E1 +:10A11000F503F603F703F703F903FA03FA03300430 +:10A12000200350041007600422018A043601C10490 +:10A130000E01CF040100C004D004440161052604CF +:10A1400000007D1D0100632C001E9601A01E5A0117 +:10A15000001F0806101F0606201F0806301F0806ED +:10A16000401F0606511F0700591F521F5B1F541F37 +:10A170005D1F561F5F1F601F0806701F0E00BA1F6D +:10A18000BB1FC81FC91FCA1FCB1FDA1FDB1FF81F49 +:10A19000F91FEA1FEB1FFA1FFB1F801F0806901F05 +:10A1A0000806A01F0806B01F0400B81FB91FB21F81 +:10A1B000BC1FCC1F0100C31FD01F0206E01F0206F8 +:10A1C000E51F0100EC1FF31F0100FC1F4E210100E1 +:10A1D000322170211002842101008321D0241A052C +:10A1E000302C2F04602C0201672C0601752C020113 +:10A1F000802C6401002D260841FF1A030000010095 +:10A2000004001000400000010002000001000200F4 +:10A21000040008001000200000005153504946007F +:10A22000464C4153484941500044465520496E74BC +:10A230006572666163650044465520436F6E6669CA +:10A2400067000D002E2E2E0A000A52252D34643A86 +:10A25000202530386C58000A53502020203A202501 +:10A2600030386C580A4C522020203A202530386C67 +:10A27000580A50432020203A202530386C580A785C +:10A28000505352203A202530386C580A50535020F1 +:10A29000203A202530386C580A4D535020203A205F +:10A2A0002530386C58000A43505549443A2025302F +:10A2B000386C58000A48465352203A202530386CF2 +:10A2C000580A4D4D4653523A202530386C580A42B0 +:10A2D000465352203A202530386C580A554653527E +:10A2E000203A202530386C580A44465352203A20F0 +:10A2F0002530386C580A41465352203A20253038D0 +:10A300006C58000A4D4D4641523A202530386C5861 +:10A31000000A42464152203A202530386C58000A43 +:10A320004D6F6465203A20546872656164000A507C +:10A33000726976203A2055736572000A5072697608 +:10A34000203A2050726976696C65676564000A4D31 +:10A350006F6465203A2048616E646C6572000A5330 +:10A360007461636B3A20505350000A537461636BFD +:10A370003A204D5350000A2B2B204D6265644F53F9 +:10A38000204661756C742048616E646C6572202B88 +:10A390002B0A0A4661756C74547970653A20004D39 +:10A3A000656D4D616E6167654661756C74004275DF +:10A3B000734661756C740055736167654661756CB1 +:10A3C0007400486172644661756C74000A0A436FD8 +:10A3D0006E746578743A000A0A2D2D204D6265640A +:10A3E0004F53204661756C742048616E646C6572D1 +:10A3F000202D2D0A0A0064656661756C7400466F35 +:10A400007263654F73634F75746F6644656570530F +:10A410006C65657020636C6F636B20697373756521 +:10A420000D0A00466F7263655065726970684F75FA +:10A43000746F6644656570536C65657020636C6FFE +:10A44000636B2069737375650D0A00496E6974202A +:10A450003A2063616E6E6F7420696E697469616C15 +:10A46000697A65204C53490A006D61696E00534654 +:10A4700044500073696E676C65746F6E5F6D7574C0 +:10A480006578006D616C6C6F635F6D7574657800E5 +:10A49000656E765F6D75746578007274785F746947 +:10A4A0006D6572007274785F69646C65005254580F +:10A4B0002056352E352E33000000000073A401080D +:10A4C0000B000000AC3500241C000000010000005F +:10A4D000E803000005000000142E00241000000016 +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A50000000000000000000000000000000000004B +:10A51000000000000000000000000000000000003B +:10A520000010000038AA010874AA0108BD0801083B +:10A53000D5E100085CAA0108040000000102040043 +:10A540002900000000500052D22700003B0000000C +:10A5500000500052D2270000580000000050005266 +:10A56000D22B0000FFFF0000FFFFFFFF00000000F4 +:10A570002A00000000500052D22700003C000000DA +:10A5800000500052D2270000590000000050005235 +:10A59000D22B0000FFFF0000FFFFFFFF00000000C4 +:10A5A0004200000000500052D22700005700000077 +:10A5B00000500052D2270000FFFF0000FFFFFFFF06 +:10A5C000000000000100000000500052D2270000EF +:10A5D0003D00000000500052D2270000560000004D +:10A5E00000500052D2270000FFFF0000FFFFFFFFD6 +:10A5F000000000001200000000500052D2270000AE +:10A600005A00000000500052D2270000FFFF000057 +:10A61000FFFFFFFF00000000160000000050005286 +:10A62000D22B00001A00000000500052D227000078 +:10A630006600000000500052D22B0000FFFF000017 +:10A64000FFFFFFFF0000000001000000004C004081 +:10A65000D22300000300000000440040D21F00008D +:10A660000800000000780040D22F00000A0000001F +:10A6700000100140D21F00000A010000000C005829 +:10A68000D20F00000B000000004C0040D21B000065 +:10A690001300000000780040D22F000015000000D9 +:10A6A00000500040D23B00001700000000100140A5 +:10A6B000D21F000017010000000C0058D223000038 +:10A6C00018000000004C0040D22300001B000000D6 +:10A6D00000480040D21F00001C0000000050004055 +:10A6E000D23B00001F00000000100140D213000008 +:10A6F0002700000000140140D21F00002B000000C2 +:10A7000000480040D21F00002B010000004C004018 +:10A71000D223000030000000004C0040D223000093 +:10A720003200000000500040D2230000360000003C +:10A7300000440040D21F00003900000000480040E3 +:10A74000D21F000040000000007C0040D223000027 +:10A750004700000000780040D21F000056000000B3 +:10A7600000780040D21F0000690000000014014082 +:10A77000D21F00007E000000004C0040D2230000E9 +:10A7800089000000004C0040D22300009900000026 +:10A79000007C0040D2230000FFFF0000FFFFFFFF0E +:10A7A0000000000000000000004C0040D223000028 +:10A7B0000200000000440040D21F00000900000019 +:10A7C00000100140D21F000009010000000C0058D9 +:10A7D000D20F00000C000000004C0040D21B000013 +:10A7E0000F00000000780040D22F0000140000008D +:10A7F00000780040D22F0000160000000010014039 +:10A80000D21F00001601000000500040D23B0000A3 +:10A8100016020000000C0058D223000019000000AE +:10A82000004C0040D22300001A0000000048004005 +:10A83000D21F00001D00000000500040D23B00006D +:10A840001E00000000100140D2130000260000008E +:10A8500000140140D21F00002A0000000048004000 +:10A86000D21F00002A010000004C0040D22300004B +:10A870002C00000000500040D223000031000000F6 +:10A88000004C0040D223000035000000004400408E +:10A89000D21F00003800000000480040D21F000016 +:10A8A00041000000007C0040D2230000480000006E +:10A8B00000780040D21F00005700000000780040E0 +:10A8C000D21F00006E00000000140140D21F0000E3 +:10A8D0007D000000004C0040D223000098000000E2 +:10A8E000007C0040D2230000FFFF0000FFFFFFFFBD +:10A8F0000000000000000000000000001BC700086E +:10A9000097D9000815E100081DC700085BC70008BB +:10A910004DC700084DC7000851C70008E1C900082D +:10A92000D7C9000855C70008D1C90008FDC90008EB +:10A93000A3C900089DC900089DC90008DDE0000802 +:10A94000EDC90008000000000000000081070108B8 +:10A950009507010809080108590701084DC70008B3 +:10A9600041FC0008C106010801040108D52C0108BA +:10A9700059C600080BC70008C7D90008AFD900089E +:10A98000FBC60008F5C60008692C0108092C01085F +:10A990005FC60008EDC600080000000000000000CF +:10A9A000D3E000080000000000000000570101088B +:10A9B00047010108EBC90008A3D900080000000006 +:10A9C0000000000051E50008000000000000000049 +:10A9D00041EF00082F737464657272002F73746402 +:10A9E000696E002F7374646F7574003031323334C4 +:10A9F00035363738396162636465663031323334F5 +:10AA000035363738394142434445460014AA0108D7 +:10AA1000682D002439670008D9070008212500089F +:10AA2000011500085D150008291500088925000892 +:10AA3000E907000801000000A4A4010800000000CC +:10AA4000602F002444000000A82F00240003000011 +:10AA500001000000010000000000000000000000F4 +:10AA600000000000542E002434000000882E002432 +:10AA7000500000009AA40108000000001C2F0024D0 +:10AA800044000000A8320024000300002800000059 +:10AA900001000000000000005344434152440041C3 +:10AAA000726475696E6F20534100456E766965204A +:10AAB000483720426F6F746C6F6164657200726218 +:10AAC000002F66732F5550444154452E42494E0085 +:10AAD00040426F6F746C6F6164657220766572734B +:10AAE000696F6E202564202F307830303030303060 +:10AAF00030302F302A344B670040496E7465726ED7 +:10AB0000616C20466C6173682020202F30783038CB +:10AB10003030303030302F30312A3132384B612CE8 +:10AB200031352A3132384B67004045787465726E92 +:10AB3000616C20466C6173682020202F307839309A +:10AB40003030303030302F343039362A344B6700D3 +:10AB500000000000000000004946010869460108A5 +:10AB6000393C0108752F01084DC70008DD3901087F +:10AB7000A1370108ED350108D52C01089B2B0108F0 +:10AB8000952B01088F2B0108CF2C0108C92C010837 +:10AB9000792B0108692C0108092C0108A12B010857 +:10ABA000712B0108814601087B4601080000000066 +:10ABB0000000000059E200088BD9000899E3000862 +:10ABC00065D9000875C5000821C50008CDC4000876 +:10ABD00087C40008D52C010873C400085FC40008AE +:10ABE0004BC4000823C400080FC4000809C40008AF +:10ABF000692C0108092C0108A12B0108DDC30008FC +:10AC000003C40008F1C30008EDC30008E9C300084D +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C4800000000000000000000000000000000000AC +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F00000A01808010101081001011900202020208A +:10F0100020202020202828282828202020202020C8 +:10F0200020202020202020202020202088101010A8 +:10F030001010101010101010101010100404040400 +:10F040000404040404041010101010101041414175 +:10F0500041414101010101010101010101010101E0 +:10F060000101010101010110101010101042424273 +:10F0700042424202020202020202020202020202B0 +:10F080000202020202020210101010200000000012 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000F802002481 +:10F170005245454E54206D616C6C6F63207375630E +:10F18000636565646564002F6D6E742F776F726BB5 +:10F1900073706163652F776F726B73706163652F36 +:10F1A0004743432D392D706970656C696E652F6A10 +:10F1B000656E6B696E732D4743432D392D706970F1 +:10F1C000656C696E652D3230305F323032303035EB +:10F1D00032315F313539303035333337342F737254 +:10F1E000632F6E65776C69622F6E65776C69622F2D +:10F1F0006C6962632F74696D652F6C636C74696DE3 +:10F20000652E63001F0000001C0000001F000000AE +:10F210001E0000001F0000001E0000001F00000074 +:10F220001F0000001E0000001F0000001E00000064 +:10F230001F0000001F0000001D0000001F00000054 +:10F240001E0000001F0000001E0000001F00000044 +:10F250001F0000001E0000001F0000001E00000034 +:10F260001F000000545A00474D54002531305B5EAA +:10F27000302D392C2B2D5D256E004D256875256EA2 +:10F280002E256875256E2E256875256E002F25683C +:10F2900075256E3A256875256E3A256875256E00C8 +:10F2A0002C2066756E6374696F6E3A20006173730B +:10F2B000657274696F6E2022257322206661696C05 +:10F2C00065643A2066696C6520222573222C206CC7 +:10F2D000696E65202564257325730A00232D302B64 +:10F2E0002000686C4C006566674546470030313247 +:10F2F000333435363738394142434445460030319E +:10F300003233343536373839616263646566002BD1 +:10F310002D00303000785800412D46612D66383977 +:10F3200030313233343536375D0000000FF30108D9 +:0CF3300012F3010815F3010800000000B2 +:08F33C009C0FFE7F01000000A0 +:10F344000090D00332030000000000000000000021 +:10F3540000000000000000000000000000000000A9 +:10F364000000000000000000000000000000000099 +:10F374000000000000000000FFFFFFFFFFFFFFFF91 +:10F38400FFFFFFFF0000000000000000000000007D +:10F394000000000000000000000000000000000069 +:10F3A4000000000000000000000000000000000059 +:10F3B4000000000000000000000000000000000049 +:10F3C4000000000000000000000000000000000039 +:10F3D4000000000000000000000000000000000029 +:10F3E4000000000000000000000000000000000019 +:10F3F4000000000000000000000000000000000009 +:10F4040000000000000000000000000000000000F8 +:10F4140000000000000000000000000000000000E8 +:10F4240000000000000000000000000000000000D8 +:10F4340000000000000000000000000000000000C8 +:10F4440000000000000000000000000000000000B8 +:10F4540000000000000000000000000000000000A8 +:10F464000000000000000000000000000000000098 +:10F474000000000000000000B03E0024ADA401081C +:10F48400D3B3FB02000000000000000000000000F5 +:10F494000000000000000000000000000000000068 +:10F4A4000000000000000000000000000000000058 +:10F4B4000000000000000000000000000000000048 +:10F4C4000000000000000000000000000000000038 +:10F4D4000000000000000000000000000000000028 +:10F4E4000000000000000000000000000000000018 +:10F4F4000000000000000000000000000000000008 +:10F5040000000000000000000000000000000000F7 +:10F5140000000000000000000000000000000000E7 +:10F52400B12A0108A52A0108F54701080D48010878 +:10F5340025D900083DE2000821E200083D35010814 +:10F54400AF35010845300108D93301085D2B0108A6 +:10F554004D2B0108512B0108612B0108592B01087F +:10F56400552B0108652B0108652B0108652B010843 +:10F57400412B0108D1470108F9AA010829AB010868 +:10F58400DC35002449F30008F9160108E9190108DB +:10F594005D1B0108BD170108F5D80008120100021F +:10F5A4000000004041235B0300020102030100004C +:10F5B400040309040100000009026F00030102C0F2 +:10F5C400FA0904000000FE0102060904000100FE1D +:10F5D4000102070904000200FE01020809210BFFD1 +:10F5E4000000101A01080B010202020100090401C3 +:10F5F400000102020100052400100105240100029B +:10F6040004240202052406010207058303080009F5 +:10F6140009040200020A00000007050202000200B9 +:10F6240007058202000200000A06000200000040F2 +:10F6340001000114F8020024000000002CF101086C +:10F644004CF101080CF1010800000000000000006A +:10F6540000000000000000000000000000000000A6 +:10F664000000000000000000000000000000000096 +:10F674000000000000000000000000000000000086 +:10F684000000000000000000000000000000000076 +:10F69400000000000000000067F2010867F20108A2 +:10F6A40001000000000000004A000000000000000B +:10F6B4000000000000000000000000000000000046 +:10F6C4000000000000000000000000000000000036 +:10F6D4004A000000000000000000000000000000DC +:10F6E4000000000000000000000000000000000016 +:10F6F4000000000000000000483E0024000000005C +:10F70400BD020008291A0008990200080000000040 +:04000005080004816A +:00000001FF diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 5dddc6e32..4095321e5 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -84,6 +84,7 @@ typedef struct _AnalogPinDescription AnalogPinDescription; extern PinDescription g_APinDescription[]; extern AnalogPinDescription g_AAnalogPinDescription[]; extern AnalogPinDescription g_AAnalogOutPinDescription[]; +extern AnalogPinDescription g_pureAAnalogPinDescription[]; #ifdef ANALOG_CONFIG #include "hal/analogin_api.h" diff --git a/cores/arduino/Serial.h b/cores/arduino/Serial.h index f511256ad..2cdd7c0f4 100644 --- a/cores/arduino/Serial.h +++ b/cores/arduino/Serial.h @@ -76,7 +76,6 @@ class UART : public HardwareSerial { mbed_usb_serial* _usb_serial = NULL; PinName _tx, _rx, _rts, _cts; RingBufferN<256> rx_buffer; - uint8_t intermediate_buf[4]; bool is_usb = false; }; } diff --git a/cores/arduino/USB/PluggableUSBDevice.cpp b/cores/arduino/USB/PluggableUSBDevice.cpp index 288f940c6..c1449610d 100644 --- a/cores/arduino/USB/PluggableUSBDevice.cpp +++ b/cores/arduino/USB/PluggableUSBDevice.cpp @@ -60,6 +60,10 @@ uint32_t arduino::internal::PluggableUSBModule::write_finish(usb_ep_t endpoint) return PluggableUSBD().write_finish(endpoint); } +void arduino::internal::PluggableUSBModule::callback_reset() +{ +} + arduino::PluggableUSBDevice::PluggableUSBDevice(uint16_t vendor_id, uint16_t product_id) : USBDevice(get_usb_phy(), vendor_id, product_id, 1 << 8) { diff --git a/cores/arduino/USB/PluggableUSBDevice.h b/cores/arduino/USB/PluggableUSBDevice.h index a92bb9693..d766bd80b 100644 --- a/cores/arduino/USB/PluggableUSBDevice.h +++ b/cores/arduino/USB/PluggableUSBDevice.h @@ -38,6 +38,8 @@ class PluggableUSBModule { PluggableUSBModule(uint8_t numIfs) : numInterfaces(numIfs) { } + virtual ~PluggableUSBModule() + { } void lock(); void unlock(); void assert_locked(); @@ -49,17 +51,25 @@ class PluggableUSBModule { uint32_t write_finish(usb_ep_t endpoint); protected: - virtual const uint8_t *configuration_desc(uint8_t index); - virtual void callback_reset() {}; - virtual void callback_state_change(USBDevice::DeviceState new_state); - virtual uint32_t callback_request(const USBDevice::setup_packet_t *setup, USBDevice::RequestResult *result, uint8_t** data); - virtual bool callback_request_xfer_done(const USBDevice::setup_packet_t *setup, bool aborted); - virtual bool callback_set_configuration(uint8_t configuration); - virtual void callback_set_interface(uint16_t interface, uint8_t alternate); - virtual void init(EndpointResolver& resolver); - virtual const uint8_t *string_iinterface_desc(); + virtual const uint8_t *configuration_desc(uint8_t index) = 0; + virtual void callback_state_change(USBDevice::DeviceState new_state) = 0; + virtual uint32_t callback_request(const USBDevice::setup_packet_t *setup, USBDevice::RequestResult *result, uint8_t** data) = 0; + virtual bool callback_request_xfer_done(const USBDevice::setup_packet_t *setup, bool aborted) = 0; + virtual bool callback_set_configuration(uint8_t configuration) = 0; + virtual void callback_set_interface(uint16_t interface, uint8_t alternate) = 0; + virtual void init(EndpointResolver& resolver) = 0; + virtual const uint8_t *string_iinterface_desc() = 0; virtual uint8_t getProductVersion() = 0; + /** + * Non-pure virtual method with a non-inline definition + * + * @note This satisfies all criteria necessary for the compiler to emit a + * vtable, allowing users to safely subclass any of the derived "pluggable" + * USB device classes (USBCDC, USBHID, USBMIDI, etc). + */ + virtual void callback_reset(); + uint8_t pluggedInterface; const uint8_t numInterfaces; diff --git a/cores/arduino/WMath.cpp b/cores/arduino/WMath.cpp index f4ce2b754..aec2b4d6d 100644 --- a/cores/arduino/WMath.cpp +++ b/cores/arduino/WMath.cpp @@ -23,10 +23,36 @@ extern "C" { #include "stdlib.h" + #include "hal/trng_api.h" } +#if defined(ARDUINO_NANO_RP2040_CONNECT) || \ + defined(ARDUINO_PORTENTA_H7_M7) || \ + defined(ARDUINO_NICLA_VISION) || \ + defined(ARDUINO_OPTA) || \ + defined(ARDUINO_GIGA) +#define MBED_TRNG_SUPPORT 1 +static long trng() +{ + trng_t trng_obj; + trng_init(&trng_obj); + long value; + size_t olen; + if (trng_get_bytes(&trng_obj, (uint8_t*)&value, sizeof(value), &olen) != 0) + return -1; + trng_free(&trng_obj); + return value >= 0 ? value : -value; +} +#endif + +#if (MBED_TRNG_SUPPORT == 1) +static bool useTRNG = true; +#endif void randomSeed(unsigned long seed) { +#if (MBED_TRNG_SUPPORT == 1) + useTRNG = false; +#endif if (seed != 0) { srandom(seed); } @@ -37,6 +63,11 @@ long random(long howbig) if (howbig == 0) { return 0; } +#if (MBED_TRNG_SUPPORT == 1) + if (useTRNG == true) { + return trng() % howbig; + } +#endif return random() % howbig; } @@ -48,3 +79,5 @@ long random(long howsmall, long howbig) long diff = howbig - howsmall; return random(diff) + howsmall; } + +#undef MBED_TRNG_SUPPORT diff --git a/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h b/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h index eb3bf5afd..6291bb11d 100644 --- a/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h +++ b/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h @@ -109,7 +109,7 @@ class AT_CellularContext : public CellularContext { * @return NIDD context text, e.g. Non-IP or NONIP */ virtual const char *get_nonip_context_type_str(); - virtual void enable_access_technology(); + virtual nsapi_error_t enable_access_technology(); virtual void set_cid(int cid); private: @@ -135,8 +135,6 @@ class AT_CellularContext : public CellularContext { PinName _dcd_pin; bool _active_high; - RadioAccessTechnologyType _rat; - FrequencyBand _band; protected: char _found_apn[MAX_APN_LENGTH]; @@ -144,6 +142,8 @@ class AT_CellularContext : public CellularContext { bool _cp_req; bool _is_connected; ATHandler &_at; + RadioAccessTechnologyType _rat; + FrequencyBand _band; }; } // namespace mbed diff --git a/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/common/CellularCommon.h b/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/common/CellularCommon.h index f0466e88c..96e25dc99 100644 --- a/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/common/CellularCommon.h +++ b/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/common/CellularCommon.h @@ -47,6 +47,26 @@ struct cell_signal_quality_t { } }; +struct cell_timeout_cb_t { + int timeout; /* configured timeout */ + int state; /* cellular state */ + cell_timeout_cb_t() + { + timeout = -1; + state = -1; + } +}; + +struct cell_retry_cb_t { + int retry_count; /* retry count */ + int state; /* cellular state */ + cell_retry_cb_t() + { + retry_count = -1; + state = -1; + } +}; + /** * Cellular specific event changes. * Connect and disconnect are handled via NSAPI_EVENT_CONNECTION_STATUS_CHANGE diff --git a/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h b/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h index 67912e463..aed9d615c 100644 --- a/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h +++ b/cores/arduino/mbed/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h @@ -189,6 +189,8 @@ class CellularStateMachine { bool _command_success; bool _is_retry; cell_callback_data_t _cb_data; + cell_timeout_cb_t _timeout_cb_data; + cell_retry_cb_t _retry_cb_data; cellular_connection_status_t _current_event; int _status; PlatformMutex _mutex; diff --git a/cores/arduino/mbed/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h b/cores/arduino/mbed/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h index 0645b2b87..24ff87bc0 100644 --- a/cores/arduino/mbed/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h +++ b/cores/arduino/mbed/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h @@ -34,6 +34,7 @@ class GEMALTO_CINTERION_CellularContext: public AT_CellularContext { virtual NetworkStack *get_stack(); #endif // NSAPI_PPP_AVAILABLE virtual nsapi_error_t do_user_authentication(); + virtual nsapi_error_t enable_access_technology(); }; } /* namespace mbed */ diff --git a/cores/arduino/mbed/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h b/cores/arduino/mbed/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h index 4dd109894..8d8f54075 100644 --- a/cores/arduino/mbed/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h +++ b/cores/arduino/mbed/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h @@ -119,6 +119,12 @@ class WhdSTAInterface : public WiFiInterface, public EMACInterface { return 0; } + nsapi_error_t set_timeout(uint32_t timeout) + { + _timeout = timeout; + return NSAPI_ERROR_OK; + } + /** Set blocking status of interface. * Nonblocking mode unsupported. * @@ -257,6 +263,7 @@ class WhdSTAInterface : public WiFiInterface, public EMACInterface { nsapi_security_t _security; WHD_EMAC &_whd_emac; OlmInterface *_olm; + uint32_t _timeout; whd_interface_shared_info_t &_iface_shared; }; diff --git a/cores/arduino/mbed/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h b/cores/arduino/mbed/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h index cfa675217..ecc280b2f 100644 --- a/cores/arduino/mbed/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h +++ b/cores/arduino/mbed/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h @@ -148,6 +148,13 @@ class STM32_EMAC : public EMAC { */ virtual void set_memory_manager(EMACMemoryManager &mem_mngr); + /* return the status of the interface as integer */ + int get_interface_status() override; + /* return true if the interface is in the correct state to transmit */ + bool is_ready_to_tx() override; + /* restart only if the interface is in error state */ + void restart() override; + // Called from driver functions ETH_HandleTypeDef EthHandle; osThreadId_t thread; /**< Processing thread */ diff --git a/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h b/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h index 1caef23b6..5f69d8c3e 100755 --- a/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h +++ b/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h @@ -15,6 +15,7 @@ * limitations under the License. */ -#define WHD_VERSION "v1.94.0" +/* This define is used by arduino::WiFiClass::firmwareVersion() do not prepend v */ +#define WHD_VERSION "1.94.0" #define WHD_BRANCH "v1.94.0" #define WHD_DATE "2021-04-27 16:54:34 +0800" diff --git a/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h b/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h index f3b73214c..291bd23de 100755 --- a/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h +++ b/cores/arduino/mbed/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h @@ -281,7 +281,7 @@ extern uint32_t whd_wifi_stop_scan(whd_interface_t ifp); * Error code if an error occurred */ extern uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type, - const uint8_t *security_key, uint8_t key_length); + const uint8_t *security_key, uint8_t key_length, uint32_t timeout); /** Joins a specific Wi-Fi network * diff --git a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMAC.h b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMAC.h index 515629b5a..885bc92c0 100644 --- a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMAC.h +++ b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMAC.h @@ -176,6 +176,17 @@ class EMAC { * @param mem_mngr Pointer to memory manager */ virtual void set_memory_manager(EMACMemoryManager &mem_mngr) = 0; + + virtual bool is_ready_to_tx() { + return true; + } + + virtual void restart() { + } + + virtual int get_interface_status() { + return -1; + } }; diff --git a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMACInterface.h b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMACInterface.h index 8cf47cb70..c06aeb850 100644 --- a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMACInterface.h +++ b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/EMACInterface.h @@ -83,6 +83,12 @@ class EMACInterface : public virtual NetworkInterface { /** @copydoc NetworkInterface::disconnect */ nsapi_error_t disconnect() override; + /** @copydoc NetworkInterface::get_hostname */ + const char *get_hostname() override; + + /** @copydoc NetworkInterface::set_hostname */ + nsapi_error_t set_hostname(const char *hostname) override; + /** @copydoc NetworkInterface::get_mac_address */ const char *get_mac_address() override; @@ -146,6 +152,8 @@ class EMACInterface : public virtual NetworkInterface { OnboardNetworkStack::Interface *_interface = nullptr; bool _dhcp = true; bool _blocking = true; + bool _hostname_set = false; + char _hostname[NSAPI_HOSTNAME_SIZE]; bool _hw_mac_addr_set = false; char _mac_address[NSAPI_MAC_SIZE]; char _ip_address[NSAPI_IPv6_SIZE] {}; diff --git a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/ICMPSocket.h b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/ICMPSocket.h index 1837bc8e0..5e1ee8fb0 100644 --- a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/ICMPSocket.h +++ b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/ICMPSocket.h @@ -37,6 +37,10 @@ class ICMPSocket : public InternetDatagramSocket { */ ICMPSocket(); +#if MBED_CONF_LWIP_RAW_SOCKET_ENABLED + int ping(SocketAddress &socketAddress, uint32_t timeout); +#endif + #if !defined(DOXYGEN_ONLY) protected: diff --git a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/NetworkInterface.h b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/NetworkInterface.h index 9071a1e40..22355767c 100644 --- a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/NetworkInterface.h +++ b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/NetworkInterface.h @@ -90,6 +90,24 @@ class NetworkInterface: public DNS { */ virtual void set_as_default(); + /** Get hostname. + * + * @return Hostname if configured, null otherwise + */ + virtual const char *get_hostname(); + + /** Set hostname. + * + * @param hostname Hostname string + * @retval NSAPI_ERROR_OK on success + * @retval NSAPI_ERROR_UNSUPPORTED if this feature is not supported + * @retval NSAPI_ERROR_PARAMETER if hostname is not valid + * @retval NSAPI_ERROR_BUSY if hostname couldn't be set (e.g. for + * LwIP stack, hostname can only be set before calling + * \c EthernetInterface::connect method) + */ + virtual nsapi_error_t set_hostname(const char *hostname); + /** Get the local MAC address. * * Provided MAC address is intended for info or debug purposes and diff --git a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h index 2dc3b4b00..79fe5c564 100644 --- a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h +++ b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h @@ -379,6 +379,10 @@ class TLSSocketWrapper : public Socket { Socket *_transport; int _timeout = -1; + // Event flags + static const int READ_FLAG = 0x1u; + static const int WRITE_FLAG = 0x2u; + #ifdef MBEDTLS_X509_CRT_PARSE_C mbedtls_x509_crt *_cacert = nullptr; mbedtls_x509_crt *_clicert = nullptr; diff --git a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/WiFiInterface.h b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/WiFiInterface.h index 4fd7fc6fb..c13cab431 100644 --- a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/WiFiInterface.h +++ b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/WiFiInterface.h @@ -59,6 +59,13 @@ class WiFiInterface: public virtual NetworkInterface { */ virtual nsapi_error_t set_channel(uint8_t channel) = 0; + /** Set the Wi-Fi network join timeout. + * + * @param timeout joint timeout in milliseconds (Default: 7000). + * @return NSAPI_ERROR_OK on success, or error code on failure. + */ + virtual nsapi_error_t set_timeout(uint32_t timeout) = 0; + /** Get the current radio signal strength for active connection. * * @return Connection strength in dBm (negative value), diff --git a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/nsapi_types.h b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/nsapi_types.h index 3b496d508..28dbcc9a3 100644 --- a/cores/arduino/mbed/connectivity/netsocket/include/netsocket/nsapi_types.h +++ b/cores/arduino/mbed/connectivity/netsocket/include/netsocket/nsapi_types.h @@ -196,6 +196,16 @@ typedef enum nsapi_security { */ #define NSAPI_IP_BYTES NSAPI_IPv6_BYTES +/** Maximum size of hostname + * + * According to RFC 1034 [1], Section 3.1 "Name space specifications and + * terminology", 63 is the maximum size of a hostname. +1 for the string + * terminator. + * + * [1] https://www.rfc-editor.org/rfc/rfc1034 + */ +#define NSAPI_HOSTNAME_SIZE 64 + /** Maximum size of MAC address representation */ #define NSAPI_MAC_SIZE 18 diff --git a/cores/arduino/mbed/platform/include/platform/Callback.h b/cores/arduino/mbed/platform/include/platform/Callback.h index e76a4f197..3df0b9117 100644 --- a/cores/arduino/mbed/platform/include/platform/Callback.h +++ b/cores/arduino/mbed/platform/include/platform/Callback.h @@ -26,6 +26,14 @@ #include #include +#pragma GCC push_options +// This prevents the GCC compiler from applying optimizations that assume the code follows strict aliasing rules. +// In order to prevent bugs arising from undefined behavior that is tricky to find in the Callback implementation, +// or simply from compiler bugs in GCC. +#pragma GCC optimize("-fno-strict-aliasing") +// This prevents the GCC compiler from generating incorrect inline code for the Callback constructor. +#pragma GCC optimize("-fno-inline") + // Controlling switches from config: // MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL - support storing non-trivial function objects // MBED_CONF_PLATFORM_CALLBACK_COMPARABLE - support memcmp comparing stored objects (requires zero padding) @@ -835,4 +843,6 @@ Callback(R(*func)(const volatile T *, ArgTs...), const volatile U *arg) -> Callb } // namespace mbed +#pragma GCC pop_options + #endif diff --git a/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h index f5f44a58f..0231968bb 100644 --- a/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h +++ b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h @@ -33,6 +33,7 @@ extern "C" { #include "pico/assert.h" #include "pico/time.h" #include "pico/types.h" +#include "pico/rand.h" #include "hardware/pwm.h" #include "hardware/adc.h" #include "hardware/resets.h" @@ -122,6 +123,12 @@ struct flash_s { uint32_t dummy; }; +#if DEVICE_TRNG +struct trng_s { + uint8_t not_used; +}; +#endif + typedef struct gpio_s gpio_t; typedef struct serial_s serial_t; diff --git a/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h index 8f91d5595..4f076aba0 100644 --- a/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h +++ b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h @@ -70,6 +70,11 @@ typedef volatile uint32_t spin_lock_t; #define PICO_SPINLOCK_ID_HARDWARE_CLAIM 11 #endif +// PICO_CONFIG: PICO_SPINLOCK_ID_RAND, Spinlock ID for Random Number Generator, min=0, max=31, default=12, group=hardware_sync +#ifndef PICO_SPINLOCK_ID_RAND +#define PICO_SPINLOCK_ID_RAND 12 +#endif + // PICO_CONFIG: PICO_SPINLOCK_ID_OS1, First Spinlock ID reserved for use by low level OS style software, min=0, max=31, default=14, group=hardware_sync #ifndef PICO_SPINLOCK_ID_OS1 #define PICO_SPINLOCK_ID_OS1 14 diff --git a/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h index ee1d360ce..ea16d9734 100644 --- a/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h +++ b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h @@ -151,14 +151,14 @@ extern "C" { * * For example a `uint32_t` foo that will retain its value if the program is restarted by reset. * - * uint32_t __uninitialized_ram("my_group_name") foo; + * uint32_t __uninitialized_ram(foo); * - * The section attribute is `.uninitialized_ram.` + * The section attribute is `.uninitialized_data.` * * \param group a string suffix to use in the section name to distinguish groups that can be linker * garbage-collected independently */ -#define __uninitialized_ram(group) __attribute__((section(".uninitialized_ram." #group))) group +#define __uninitialized_ram(group) __attribute__((section(".uninitialized_data." #group))) group /*! \brief Section attribute macro for placement in flash even in a COPY_TO_RAM binary * \ingroup pico_platform diff --git a/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico/rand.h b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico/rand.h new file mode 100644 index 000000000..20fc6d6cb --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico/rand.h @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _PICO_RAND_H +#define _PICO_RAND_H + +#include "pico.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file pico/rand.h + * \defgroup pico_rand pico_rand + * + * Random Number Generator API + * + * This module generates random numbers at runtime utilizing a number of possible entropy + * sources and uses those sources to modify the state of a 128-bit 'Pseudo + * Random Number Generator' implemented in software. + * + * The random numbers (32 to 128 bit) to be supplied are read from the PRNG which is used + * to help provide a large number space. + * + * The following (multiple) sources of entropy are available (of varying quality), each enabled by a #define: + * + * - The Ring Oscillator (ROSC) (\ref PICO_RAND_ENTROPY_SRC_ROSC == 1): + * \ref PICO_RAND_ROSC_BIT_SAMPLE_COUNT bits are gathered from the ring oscillator "random bit" and mixed in each + * time. This should not be used if the ROSC is off, or the processor is running from + * the ROSC. + * \note the maximum throughput of ROSC bit sampling is controlled by PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US which defaults + * to 10us, i.e. 100,000 bits per second. + * - Time (\ref PICO_RAND_ENTROPY_SRC_TIME == 1): The 64-bit microsecond timer is mixed in each time. + * - Bus Performance Counter (\ref PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER == 1): One of the bus fabric's performance + * counters is mixed in each time. + * + * \note All entropy sources are hashed before application to the PRNG state machine. + * + * The \em first time a random number is requested, the 128-bit PRNG state + * must be seeded. Multiple entropy sources are also available for the seeding operation: + * + * - The Ring Oscillator (ROSC) (\ref PICO_RAND_SEED_ENTROPY_SRC_ROSC == 1): + * 64 bits are gathered from the ring oscillator "random bit" and mixed into the seed. + * - Time (\ref PICO_RAND_SEED_ENTROPY_SRC_TIME == 1): The 64-bit microsecond timer is mixed into the seed. + * - Board Identifier (PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID == 1): The board id via \ref pico_get_unique_board_id + * is mixed into the seed. + * - RAM hash (\ref PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH (\ref PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH): The hashed contents of a + * subset of RAM are mixed in. Initial RAM contents are undefined on power up, so provide a reasonable source of entropy. + * By default the last 1K of RAM (which usually contains the core 0 stack) is hashed, which may also provide for differences + * after each warm reset. + * + * With default settings, the seed generation takes approximately 1 millisecond while + * subsequent random numbers generally take between 10 and 20 microseconds to generate. + * + * pico_rand methods may be safely called from either core or from an IRQ, but be careful in the latter case as + * the calls may block for a number of microseconds waiting on more entropy. + */ + +// --------------- +// ENTROPY SOURCES +// --------------- + +// PICO_CONFIG: PICO_RAND_ENTROPY_SRC_ROSC, Enable/disable use of ROSC as an entropy source, type=bool, default=1, group=pico_rand +#ifndef PICO_RAND_ENTROPY_SRC_ROSC +#define PICO_RAND_ENTROPY_SRC_ROSC 1 +#endif + +// PICO_CONFIG: PICO_RAND_ENTROPY_SRC_TIME, Enable/disable use of hardware timestamp as an entropy source, type=bool, default=1, group=pico_rand +#ifndef PICO_RAND_ENTROPY_SRC_TIME +#define PICO_RAND_ENTROPY_SRC_TIME 1 +#endif + +// PICO_CONFIG: PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER, Enable/disable use of a bus performance counter as an entropy source, type=bool, default=1, group=pico_rand +#ifndef PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER +#define PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER 1 +#endif + +// -------------------- +// SEED ENTROPY SOURCES +// -------------------- + +// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_ROSC, Enable/disable use of ROSC as an entropy source for the random seed, type=bool, default=1, group=pico_rand +#ifndef PICO_RAND_SEED_ENTROPY_SRC_ROSC +#define PICO_RAND_SEED_ENTROPY_SRC_ROSC PICO_RAND_ENTROPY_SRC_ROSC +#endif + +// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_TIME, Enable/disable use of hardware timestamp as an entropy source for the random seed, type=bool, default=1, group=pico_rand +#ifndef PICO_RAND_SEED_ENTROPY_SRC_TIME +#define PICO_RAND_SEED_ENTROPY_SRC_TIME PICO_RAND_ENTROPY_SRC_TIME +#endif + +// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID, Enable/disable use of board id as part of the random seed, type=bool, default=1, group=pico_rand +#ifndef PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID +#define PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID 0 +#endif + +// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH, Enable/disable use of a RAM hash as an entropy source for the random seed, type=bool, default=1, group=pico_rand +#ifndef PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH +#define PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH 1 +#endif + +// --------------------------------- +// PICO_RAND_ENTROPY_SRC_ROSC CONFIG +// --------------------------------- + +// PICO_CONFIG: PICO_RAND_ROSC_BIT_SAMPLE_COUNT, Number of samples to take of the ROSC random bit per random number generation , min=1, max=64, default=1, group=pico_rand +#ifndef PICO_RAND_ROSC_BIT_SAMPLE_COUNT +#define PICO_RAND_ROSC_BIT_SAMPLE_COUNT 1 +#endif + +// PICO_CONFIG: PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US, Define a default minimum time between sampling the ROSC random bit, min=5, max=20, default=10, group=pico_rand +#ifndef PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US +// (Arbitrary / tested) minimum time between sampling the ROSC random bit +#define PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US 10u +#endif + +// --------------------------------------------- +// PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER CONFIG +// --------------------------------------------- + +// PICO_CONFIG: PICO_RAND_BUS_PERF_COUNTER_INDEX, Bus performance counter index to use for sourcing entropy, min=0, max=3, group=pico_rand +// this is deliberately undefined by default, meaning the code will pick that appears unused +//#define PICO_RAND_BUS_PERF_COUNTER_INDEX 0 + +// PICO_CONFIG: PICO_RAND_BUS_PERF_COUNTER_EVENT, Bus performance counter event to use for sourcing entropy, default=arbiter_sram5_perf_event_access, group=pico_rand +#ifndef PICO_RAND_BUS_PERF_COUNTER_EVENT +#define PICO_RAND_BUS_PERF_COUNTER_EVENT arbiter_sram5_perf_event_access +#endif + +// ------------------------------------------ +// PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH CONFIG +// ------------------------------------------ + +// PICO_CONFIG: PICO_RAND_RAM_HASH_END, end of address in RAM (non-inclusive) to hash during pico_rand seed initialization, default=SRAM_END, group=pico_rand +#ifndef PICO_RAND_RAM_HASH_END +#define PICO_RAND_RAM_HASH_END SRAM_END +#endif +// PICO_CONFIG: PICO_RAND_RAM_HASH_START, start of address in RAM (inclusive) to hash during pico_rand seed initialization, default=PICO_RAND_RAM_HASH_END - 1024, group=pico_rand +#ifndef PICO_RAND_RAM_HASH_START +#define PICO_RAND_RAM_HASH_START (PICO_RAND_RAM_HASH_END - 1024u) +#endif + +// We provide a maximum of 128 bits entropy in one go +typedef struct rng_128 { + uint64_t r[2]; +} rng_128_t; + +/*! \brief Get 128-bit random number + * \ingroup pico_rand + * + * This method may be safely called from either core or from an IRQ, but be careful in the latter case as + * the call may block for a number of microseconds waiting on more entropy. + * + * \param rand128 Pointer to storage to accept a 128-bit random number + */ +void get_rand_128(rng_128_t *rand128); + +/*! \brief Get 64-bit random number + * \ingroup pico_rand + * + * This method may be safely called from either core or from an IRQ, but be careful in the latter case as + * the call may block for a number of microseconds waiting on more entropy. + * + * \return 64-bit random number + */ +uint64_t get_rand_64(void); + +/*! \brief Get 32-bit random number + * \ingroup pico_rand + * + * This method may be safely called from either core or from an IRQ, but be careful in the latter case as + * the call may block for a number of microseconds waiting on more entropy. + * + * \return 32-bit random number + */ +uint32_t get_rand_32(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cy_result.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cy_result.h new file mode 100644 index 000000000..8277169ab --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cy_result.h @@ -0,0 +1,228 @@ +/***************************************************************************//** +* \file cy_result.h +* +* \brief +* Basic function result handling. Defines a simple type for conveying +* information about whether something succeeded or details about any issues +* that were detected. +* +******************************************************************************** +* \copyright +* Copyright 2018-2020 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/** +* \addtogroup group_result Result Type +* \ingroup group_abstraction +* \{ +* \anchor anchor_general_description +* \brief Defines a type and related utilities for function result handling. +* +* The @ref cy_rslt_t type is a structured bitfield which encodes information +* about result type, the originating module, and a code for the specific +* error (or warning etc). In order to extract these individual fields from +* a @ref cy_rslt_t value, the utility macros @ref CY_RSLT_GET_TYPE, @ref CY_RSLT_GET_MODULE, +* and @ref CY_RSLT_GET_CODE are provided. For example: +* \code +* cy_rslt_t result = cy_hal_do_operation(arg); +* // Will be CY_RSLT_TYPE_INFO, CY_RSLT_TYPE_WARNING, CY_RSLT_TYPE_ERROR, or CY_RSLT_TYPE_FATAL +* uint8_t type = CY_RSLT_GET_TYPE(result) +* // See the "Modules" section for possible values +* uint16_t module_id = CY_RSLT_GET_MODULE(result); +* // Specific error codes are defined by each module +* uint16_t error_code = CY_RSLT_GET_CODE(result); +* \endcode +*/ + +#if !defined(CY_RESULT_H) +#define CY_RESULT_H + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +/** + * @brief Provides the result of an operation as a structured bitfield. + * + * See the \ref anchor_general_description "General Description" + * for more details on structure and usage. + */ +typedef uint32_t cy_rslt_t; + +/** @ref cy_rslt_t return value indicating success */ +#define CY_RSLT_SUCCESS ((cy_rslt_t)0x00000000U) + +/** \cond INTERNAL */ +/** Mask for the bit at position "x" */ +#define CY_BIT_MASK(x) ((1UL << (x)) - 1U) + +/** Bit position of the result type */ +#define CY_RSLT_TYPE_POSITION (16U) +/** Bit width of the result type */ +#define CY_RSLT_TYPE_WIDTH (2U) +/** Bit position of the module identifier */ +#define CY_RSLT_MODULE_POSITION (18U) +/** Bit width of the module identifier */ +#define CY_RSLT_MODULE_WIDTH (14U) +/** Bit position of the result code */ +#define CY_RSLT_CODE_POSITION (0U) +/** Bit width of the result code */ +#define CY_RSLT_CODE_WIDTH (16U) + +/** Mask for the result type */ +#define CY_RSLT_TYPE_MASK CY_BIT_MASK(CY_RSLT_TYPE_WIDTH) +/** Mask for the module identifier */ +#define CY_RSLT_MODULE_MASK CY_BIT_MASK(CY_RSLT_MODULE_WIDTH) +/** Mask for the result code */ +#define CY_RSLT_CODE_MASK CY_BIT_MASK(CY_RSLT_CODE_WIDTH) + +/** \endcond */ + +/** +* \{ +* @name Fields +* Utility macros for constructing result values and extracting individual fields from existing results. +*/ + +/** + * @brief Get the value of the result type field + * @param x the @ref cy_rslt_t value from which to extract the result type + */ +#define CY_RSLT_GET_TYPE(x) (((x) >> CY_RSLT_TYPE_POSITION) & CY_RSLT_TYPE_MASK) +/** + * @brief Get the value of the module identifier field + * @param x the @ref cy_rslt_t value from which to extract the module id + */ +#define CY_RSLT_GET_MODULE(x) (((x) >> CY_RSLT_MODULE_POSITION) & CY_RSLT_MODULE_MASK) +/** + * @brief Get the value of the result code field + * @param x the @ref cy_rslt_t value from which to extract the result code + */ +#define CY_RSLT_GET_CODE(x) (((x) >> CY_RSLT_CODE_POSITION) & CY_RSLT_CODE_MASK) + +/** + * @brief Create a new @ref cy_rslt_t value that encodes the specified type, module, and result code. + * @param type one of @ref CY_RSLT_TYPE_INFO, @ref CY_RSLT_TYPE_WARNING, + * @ref CY_RSLT_TYPE_ERROR, @ref CY_RSLT_TYPE_FATAL + * @param module Identifies the module where this result originated; see @ref anchor_modules "Modules". + * @param code a module-defined identifier to identify the specific situation that + * this result describes. + */ +#define CY_RSLT_CREATE(type, module, code) \ + ((((module) & CY_RSLT_MODULE_MASK) << CY_RSLT_MODULE_POSITION) | \ + (((code) & CY_RSLT_CODE_MASK) << CY_RSLT_CODE_POSITION) | \ + (((type) & CY_RSLT_TYPE_MASK) << CY_RSLT_TYPE_POSITION)) + +/** \} fields */ + +/** +* \{ +* @name Result Types +* Defines codes to identify the type of result. +*/ + +/** @brief The result code is informational-only */ +#define CY_RSLT_TYPE_INFO (0U) +/** @brief The result code is warning of a problem but will proceed */ +#define CY_RSLT_TYPE_WARNING (1U) +/** @brief The result code is an error */ +#define CY_RSLT_TYPE_ERROR (2U) +/** @brief The result code is a fatal error */ +#define CY_RSLT_TYPE_FATAL (3U) + +/** \} severity */ + +/** +* \{ +* @name Modules +* @anchor anchor_modules +* Defines codes to identify the module from which an error originated. +* For some large libraries, a range of module codes is defined here; +* see the library documentation for values corresponding to individual modules. +* Valid range is 0x0000-0x4000. +*/ +/**** DRIVER Module codes: 0x0000 - 0x00FF ****/ +/** Base module identifier for peripheral driver library drivers (0x0000 - 0x007F) */ +#define CY_RSLT_MODULE_DRIVERS_PDL_BASE (0x0000U) +/** Base module identifier for wireless host driver library modules (0x0080 - 0x00FF) */ +#define CY_RSLT_MODULE_DRIVERS_WHD_BASE (0x0080U) + +/** Deprecated. Use \ref CY_RSLT_MODULE_ABSTRACTION_HAL */ +#define CY_RSLT_MODULE_ABSTRACTION_HAL_BASE (0x0100U) +/** Module identifier for the Hardware Abstraction Layer */ +#define CY_RSLT_MODULE_ABSTRACTION_HAL (0x0100U) +/** Module identifier for board support package */ +#define CY_RSLT_MODULE_ABSTRACTION_BSP (0x0180U) +/** Module identifier for file system abstraction */ +#define CY_RSLT_MODULE_ABSTRACTION_FS (0x0181U) +/** Module identifier for resource abstraction */ +#define CY_RSLT_MODULE_ABSTRACTION_RESOURCE (0x0182U) +/** Module identifier for rtos abstraction */ +#define CY_RSLT_MODULE_ABSTRACTION_OS (0x0183U) +/** Base identifier for environment abstraction modules (0x0184 - 0x01FF) */ +#define CY_RSLT_MODULE_ABSTRACTION_ENV (0x0184U) + +/** Base module identifier for Board Libraries (0x01A0 - 0x01BF) */ +#define CY_RSLT_MODULE_BOARD_LIB_BASE (0x01A0U) +/** Module identifier for the Retarget IO Board Library */ +#define CY_RSLT_MODULE_BOARD_LIB_RETARGET_IO (0x1A0U) +/** Module identifier for the RGB LED Board Library */ +#define CY_RSLT_MODULE_BOARD_LIB_RGB_LED (0x01A1U) +/** Module identifier for the Serial Flash Board Library */ +#define CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH (0x01A2U) +/** Module identifier for the WiFi Host Driver + Board Support Integration Library */ +#define CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION (0x01A3U) + +/** Base module identifier for Shield Board Libraries (0x01B8 - 0x01BF) */ +#define CY_RSLT_MODULE_BOARD_SHIELD_BASE (0x01B8U) +/** Module identifier for Shield Board CY8CKIT-028-EPD */ +#define CY_RSLT_MODULE_BOARD_SHIELD_028_EPD (0x01B8U) +/** Module identifier for Shield Board CY8CKIT-028-TFT */ +#define CY_RSLT_MODULE_BOARD_SHIELD_028_TFT (0x01B9U) +/** Module identifier for Shield Board CY8CKIT-032 */ +#define CY_RSLT_MODULE_BOARD_SHIELD_032 (0x01BAU) + +/** Base module identifier for Board Hardware Libraries (0x01C0 - 0x01FF) */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_BASE (0x01C0U) +/** Module identifier for the BMI160 Motion Sensor Library */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_BMI160 (0x01C0U) +/** Module identifier for the E2271CS021 E-Ink Controller Library */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_E2271CS021 (0x01C1U) +/** Module identifier for the NTC GPIO Thermistor Library */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_THERMISTOR (0x01C2U) +/** Module identifier for the SSD1306 OLED Controller Library */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_SSD1306 (0x01C3U) +/** Module identifier for the ST7789V TFT Controller Library */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_ST7789V (0x01C4U) +/** Module identifier for the Light Sensor Library */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_LIGHT_SENSOR (0x01C5U) +/** Module identifier for the AK4954A Audio Codec Library */ +#define CY_RSLT_MODULE_BOARD_HARDWARE_AK4954A (0x01C6U) + +/** Base module identifier for Middleware Libraries (0x0200 - 0x02FF) */ +#define CY_RSLT_MODULE_MIDDLEWARE_BASE (0x0200U) + +/** \} modules */ + +#ifdef __cplusplus +} +#endif + +#endif /* CY_RESULT_H */ + +/** \} group_result */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos.h new file mode 100644 index 000000000..e19ffc49f --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos.h @@ -0,0 +1,711 @@ +/***************************************************************************//** +* \file cyabs_rtos.h +* +* \brief +* Defines the Cypress RTOS Interface. Provides prototypes for functions that +* allow Cypress libraries to use RTOS resources such as threads, mutexes & +* timing functions in an abstract way. The APIs are implemented in the Port +* Layer RTOS interface which is specific to the RTOS in use. +* +******************************************************************************** +* \copyright +* Copyright 2018-2020 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +#ifndef INCLUDED_CY_RTOS_INTERFACE_H_ +#define INCLUDED_CY_RTOS_INTERFACE_H_ + +#include "cyabs_rtos_impl.h" +#include "cy_result.h" +#include +#include +#include + +/** +* \defgroup group_abstraction_rtos_common Common + * General types and defines for working with the RTOS abstraction layer. +* \defgroup group_abstraction_rtos_mutex Mutex + * APIs for acquiring and working with Mutexes. +* \defgroup group_abstraction_rtos_queue Queue + * APIs for creating and working with Queues. +* \defgroup group_abstraction_rtos_semaphore Semaphore + * APIs for acquiring and working with Semaphores. +* \defgroup group_abstraction_rtos_threads Threads + * APIs for creating and working with Threads. +* \defgroup group_abstraction_rtos_time Time + * APIs for getting the current time and waiting. +* \defgroup group_abstraction_rtos_timer Timer + * APIs for creating and working with Timers. +*/ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/*********************************************** CONSTANTS **********************************************/ + +/** + * \ingroup group_abstraction_rtos_common + * \{ + */ + +#if defined(DOXYGEN) +//#include "Template/cyabs_rtos_impl.h" + +/** Return value indicating success */ +#define CY_RSLT_SUCCESS ((cy_rslt_t)0x00000000U) +#endif + +/** Used with RTOS calls that require a timeout. This implies the call will never timeout. */ +#define CY_RTOS_NEVER_TIMEOUT ( (uint32_t)0xffffffffUL ) + +// +// Note on error strategy. If the error is a normal part of operation (timeouts, full queues, empty +// queues), the these errors are listed here and the abstraction layer implementation must map from the +// underlying errors to these. If the errors are special cases, the the error \ref CY_RTOS_GENERAL_ERROR +// will be returned and \ref cy_rtos_last_error() can be used to retrieve the RTOS specific error message. +// +/** Requested operation did not complete in the specified time */ +#define CY_RTOS_TIMEOUT CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 0) +/** The RTOS could not allocate memory for the specified operation */ +#define CY_RTOS_NO_MEMORY CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 1) +/** An error occured in the RTOS */ +#define CY_RTOS_GENERAL_ERROR CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 2) +/** A bad argument was passed into the APIs */ +#define CY_RTOS_BAD_PARAM CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 5) +/** A memory alignment issue was detected. Ensure memory provided is aligned per \ref CY_RTOS_ALIGNMENT_MASK */ +#define CY_RTOS_ALIGNMENT_ERROR CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 6) + +/** \} group_abstraction_rtos_common */ + +/** + * \ingroup group_abstraction_rtos_queue + * \{ + */ + +/** The Queue is already full and can't accept any more items at this time */ +#define CY_RTOS_QUEUE_FULL CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 3) +/** The Queue is empty and has nothing to remove */ +#define CY_RTOS_QUEUE_EMPTY CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 4) + +/** \} group_abstraction_rtos_queue */ + +/*********************************************** TYPES **********************************************/ + +/** + * The state a thread can be in + * + * \ingroup group_abstraction_rtos_threads + */ +typedef enum cy_thread_state +{ + CY_THREAD_STATE_INACTIVE, /**< thread has not started or was terminated but not yet joined */ + CY_THREAD_STATE_READY, /**< thread can run, but is not currently */ + CY_THREAD_STATE_RUNNING, /**< thread is currently running */ + CY_THREAD_STATE_BLOCKED, /**< thread is blocked waiting for something */ + CY_THREAD_STATE_TERMINATED, /**< thread has terminated but not freed */ + CY_THREAD_STATE_UNKNOWN, /**< thread is in an unknown state */ +} cy_thread_state_t; + +/** + * The type of timer + * + * \ingroup group_abstraction_rtos_timer + */ +typedef enum cy_timer_trigger_type +{ + CY_TIMER_TYPE_PERIODIC, /**< called periodically until stopped */ + CY_TIMER_TYPE_ONCE, /**< called once only */ + cy_timer_type_periodic = CY_TIMER_TYPE_PERIODIC, /**< \deprecated replaced by \ref CY_TIMER_TYPE_PERIODIC */ + cy_timer_type_once = CY_TIMER_TYPE_ONCE, /**< \deprecated replaced by \ref CY_TIMER_TYPE_ONCE */ +} cy_timer_trigger_type_t; + +/** + * The type of a function that is the entry point for a thread + * + * @param[in] arg the argument passed from the thread create call to the entry function + * + * \ingroup group_abstraction_rtos_threads + */ +typedef void (*cy_thread_entry_fn_t)(cy_thread_arg_t arg); + +/** + * The callback function to be called by a timer + * + * \ingroup group_abstraction_rtos_timer + */ +typedef void (*cy_timer_callback_t)(cy_timer_callback_arg_t arg); + +/** + * Return the last error from the RTOS. + * + * The functions in the RTOS abstraction layer adhere to the Cypress return + * results calling convention. The underlying RTOS implementations will not but rather + * will have their own error code conventions. This function is provided as a service + * to the developer, mostly for debugging, and returns the underlying RTOS error code + * from the last RTOS abstraction layer that returned \ref CY_RTOS_GENERAL_ERROR. + * + * @return RTOS specific error code. + * + * \ingroup group_abstraction_rtos_common + */ +cy_rtos_error_t cy_rtos_last_error(); + +/*********************************************** Threads **********************************************/ + +/** + * \ingroup group_abstraction_rtos_threads + * \{ + */ + +/** Create a thread with specific thread argument. + * + * This function is called to startup a new thread. If the thread can exit, it must call + * \ref cy_rtos_exit_thread() just before doing so. All created threads that can terminate, either + * by themselves or forcefully by another thread MUST have \ref cy_rtos_join_thread() called on them + * by another thread in order to cleanup any resources that might have been allocated for them. + * + * @param[out] thread Pointer to a variable which will receive the new thread handle + * @param[in] entry_function Function pointer which points to the main function for the new thread + * @param[in] name String thread name used for a debugger + * @param[in] stack The buffer to use for the thread stack. This must be aligned to + * \ref CY_RTOS_ALIGNMENT_MASK with a size of at least \ref CY_RTOS_MIN_STACK_SIZE. + * If stack is null, cy_rtos_create_thread will allocate a stack from the heap. + * @param[in] stack_size The size of the thread stack in bytes + * @param[in] priority The priority of the thread. Values are operating system specific, but some + * common priority levels are defined: + * CY_THREAD_PRIORITY_LOW + * CY_THREAD_PRIORITY_NORMAL + * CY_THREAD_PRIORITY_HIGH + * @param[in] arg The argument to pass to the new thread + * + * @return The status of thread create request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_function, + const char *name, void *stack, uint32_t stack_size, cy_thread_priority_t priority, cy_thread_arg_t arg); + +/** Exit the current thread. + * + * This function is called just before a thread exits. In some cases it is sufficient + * for a thread to just return to exit, but in other cases, the RTOS must be explicitly + * signaled. In cases where a return is sufficient, this should be a null funcition. + * where the RTOS must be signaled, this function should perform that In cases operation. + * In code using RTOS services, this function should be placed at any at any location + * where the main thread function will return, exiting the thread. Threads that can + * exit must still be joined (\ref cy_rtos_join_thread) to ensure their resources are + * fully cleaned up. + * + * @return The status of thread exit request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_exit_thread(); + +/** Terminates another thread. + * + * This function is called to terminate another thread and reap the resources claimed + * by the thread. This should be called both when forcibly terminating another thread + * as well as any time a thread can exit on its own. For some RTOS implementations + * this is not required as the thread resources are claimed as soon as it exits. In + * other cases, this must be called to reclaim resources. Threads that are terminated + * must still be joined (\ref cy_rtos_join_thread) to ensure their resources are fully + * cleaned up. + * + * @param[in] thread Handle of the thread to terminate + * + * @returns The status of the thread terminate. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_terminate_thread(cy_thread_t *thread); + +/** Waits for a thread to complete. + * + * This must be called on any thread that can complete to ensure that any resources that + * were allocated for it are cleaned up. + * + * @param[in] thread Handle of the thread to wait for + * + * @returns The status of thread join request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_join_thread(cy_thread_t *thread); + +/** Checks if the thread is running + * + * This function is called to determine if a thread is actively running or not. For information on + * the thread state, use the \ref cy_rtos_get_thread_state() function. + * + * @param[in] thread Handle of the terminated thread to delete + * @param[out] running Returns true if the thread is running, otherwise false + * + * @returns The status of the thread running check. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_is_thread_running(cy_thread_t *thread, bool *running); + +/** Gets the state the thread is currently in + * + * This function is called to determine if a thread is running/blocked/inactive/ready etc. + * + * @param[in] thread Handle of the terminated thread to delete + * @param[out] state Returns the state the thread is currently in + * + * @returns The status of the thread state check. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_get_thread_state(cy_thread_t *thread, cy_thread_state_t *state); + +/** Get current thread handle + * + * Returns the unique thread handle of the current running thread. + * + * @param[out] thread Handle of the current running thread + * + * @returns The status of thread join request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_get_thread_handle(cy_thread_t *thread); + +/** \} group_abstraction_rtos_threads */ + +/*********************************************** Mutexes **********************************************/ + +/** + * \ingroup group_abstraction_rtos_mutex + * \{ + */ + +/** Create a recursive mutex. + * + * Creates a binary mutex which can be used to synchronize between threads + * and between threads and ISRs. Created mutexes are recursive and support priority inheritance. + * + * This function has been replaced by \ref cy_rtos_init_mutex2 which allow for specifying + * whether or not the mutex supports recursion or not. + * + * @param[out] mutex Pointer to the mutex handle to be initialized + * + * @return The status of mutex creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +#define cy_rtos_init_mutex(mutex) cy_rtos_init_mutex2(mutex, true) + +/** Create a mutex which can support recursion or not. + * + * Creates a binary mutex which can be used to synchronize between threads and between threads and + * ISRs. Created mutexes can support priority inheritance if recursive. + * + * \note Not all RTOS implementations support non-recursive mutexes. In this case a recursive + * mutex will be created. + * + * @param[out] mutex Pointer to the mutex handle to be initialized + * @param[in] recursive Should the created mutex support recursion or not + * + * @return The status of mutex creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_init_mutex2(cy_mutex_t *mutex, bool recursive); + +/** Get a mutex. + * + * If the mutex is available, it is acquired and this function returned. + * If the mutex is not available, the thread waits until the mutex is available + * or until the timeout occurs. + * + * @note This function must not be called from an interrupt context as it may block. + * + * @param[in] mutex Pointer to the mutex handle + * @param[in] timeout_ms Maximum number of milliseconds to wait while attempting to get + * the mutex. Use the \ref CY_RTOS_NEVER_TIMEOUT constant to wait forever. + * Must be zero if in_isr is true. + * + * @return The status of the get mutex. Returns timeout if mutex was not acquired + * before timeout_ms period. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_TIMEOUT, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_get_mutex(cy_mutex_t *mutex, cy_time_t timeout_ms); + +/** Set a mutex. + * + * The mutex is released allowing any other threads waiting on the mutex to + * obtain the semaphore. + * + * @param[in] mutex Pointer to the mutex handle + * + * @return The status of the set mutex request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + * + */ +cy_rslt_t cy_rtos_set_mutex(cy_mutex_t *mutex); + +/** Deletes a mutex. + * + * This function frees the resources associated with a sempahore. + * + * @param[in] mutex Pointer to the mutex handle + * + * @return The status to the delete request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_deinit_mutex(cy_mutex_t *mutex); + +/** \} group_abstraction_rtos_mutex */ + +/*********************************************** Semaphores **********************************************/ + +/** + * \ingroup group_abstraction_rtos_semaphore + * \{ + */ + +/** + * Create a semaphore + * + * This is basically a counting semaphore. + * + * @param[in,out] semaphore Pointer to the semaphore handle to be initialized + * @param[in] maxcount The maximum count for this semaphore + * @param[in] initcount The initial count for this semaphore + * + * @return The status of the semaphore creation. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_init_semaphore(cy_semaphore_t *semaphore, uint32_t maxcount, uint32_t initcount); + +/** + * Get/Acquire a semaphore + * + * If the semaphore count is zero, waits until the semaphore count is greater than zero. + * Once the semaphore count is greater than zero, this function decrements + * the count and return. It may also return if the timeout is exceeded. + * + * @param[in] semaphore Pointer to the semaphore handle + * @param[in] timeout_ms Maximum number of milliseconds to wait while attempting to get + * the semaphore. Use the \ref CY_RTOS_NEVER_TIMEOUT constant to wait forever. Must + * be zero is in_isr is true + * @param[in] in_isr true if we are trying to get the semaphore from with an ISR + * @return The status of get semaphore operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_TIMEOUT, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_get_semaphore(cy_semaphore_t *semaphore, cy_time_t timeout_ms, bool in_isr); + +/** + * Set/Release a semaphore + * + * Increments the semaphore count, up to the maximum count for this semaphore. + * + * @param[in] semaphore Pointer to the semaphore handle + * @param[in] in_isr Value of true indicates calling from interrupt context + * Value of false indicates calling from normal thread context + * @return The status of set semaphore operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_set_semaphore(cy_semaphore_t *semaphore, bool in_isr); + +/** + * Get the count of a semaphore. + * + * Gets the number of available tokens on the semaphore. + * + * @param[in] semaphore Pointer to the semaphore handle + * @param[out] count Pointer to the return count + * @return The status of get semaphore count operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_get_count_semaphore(cy_semaphore_t *semaphore, size_t *count); + +/** + * Deletes a semaphore + * + * This function frees the resources associated with a semaphore. + * + * @param[in] semaphore Pointer to the semaphore handle + * + * @return The status of semaphore deletion [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_deinit_semaphore(cy_semaphore_t *semaphore); + +/** \} group_abstraction_rtos_semaphore */ + +/*********************************************** Events **********************************************/ + +/** + * \ingroup group_abstraction_rtos_event + * \{ + */ + +/** Create an event. + * + * This is an event which can be used to signal a set of threads + * with a 32 bit data element. + * + * @param[in,out] event Pointer to the event handle to be initialized + * + * @return The status of the event initialization request. + * [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_init_event(cy_event_t *event); + +/** Set the event flag bits. + * + * This is an event which can be used to signal a set of threads + * with a 32 bit data element. Any threads waiting on this event are released + * + * @param[in] event Pointer to the event handle + * @param[in] bits The value of the 32 bit flags + * @param[in] in_isr If true, this is called from an ISR, otherwise from a thread + * + * @return The status of the set request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_setbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ; + +/** + * Clear the event flag bits + * + * This function clears bits in the event. + * + * @param[in] event Pointer to the event handle + * @param[in] bits Any bits set in this value, will be cleared in the event. + * @param[in] in_isr if true, this is called from an ISR, otherwise from a thread + * + * @return The status of the clear flags request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_clearbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ; + +/** Get the event bits. + * + * Returns the current bits for the event. + * + * @param[in] event Pointer to the event handle + * @param[out] bits pointer to receive the value of the event flags + * + * @return The status of the get request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_getbits_event(cy_event_t *event, uint32_t *bits); + +/** Wait for the event and return bits. + * + * Waits for the event to be set and then returns the bits associated + * with the event, or waits for the given timeout period. + * @note This function returns if any bit in the set is set. + * + * @param[in] event Pointer to the event handle + * @param[in,out] bits pointer to receive the value of the event flags + * @param[in] clear if true, clear any bits set that cause the wait to return + * if false, do not clear bits + * @param[in] all if true, all bits in the initial bits value must be set to return + * if false, any one bit in the initial bits value must be set to return + * @param[in] timeout The amount of time to wait in milliseconds + * + * @return The status of the wait for event request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_waitbits_event(cy_event_t *event, uint32_t *bits, bool clear, bool all, cy_time_t timeout); + +/** Deinitialize a event. + * + * This function frees the resources associated with an event. + * + * @param[in] event Pointer to the event handle + * + * @return The status of the deletion request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_deinit_event(cy_event_t *event); + +/** \} group_abstraction_rtos_event */ + +/*********************************************** Queues **********************************************/ + +/** + * \ingroup group_abstraction_rtos_queue + * \{ + */ + +/** Create a queue. + * + * This is a queue of data where entries are placed on the back of the queue + * and removed from the front of the queue. + * + * @param[out] queue Pointer to the queue handle + * @param[in] length The maximum length of the queue in items + * @param[in] itemsize The size of each item in the queue. + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_init_queue(cy_queue_t *queue, size_t length, size_t itemsize); + +/** Put an item in a queue. + * + * This function puts an item in the queue. The item is copied + * into the queue using a memory copy and the data pointed to by item_ptr + * is no longer referenced once the call returns. + * + * @note If in_isr is true, timeout_ms must be zero. + * + * @param[in] queue Pointer to the queue handle + * @param[in] item_ptr Pointer to the item to place in the queue + * @param[in] timeout_ms The time to wait to place the item in the queue + * @param[in] in_isr If true this is being called from within and ISR + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR, \ref CY_RTOS_QUEUE_FULL] + */ +cy_rslt_t cy_rtos_put_queue(cy_queue_t *queue, const void *item_ptr, cy_time_t timeout_ms, bool in_isr); + +/** Gets an item in a queue. + * + * This function gets an item from the queue. The item is copied + * out of the queue into the memory provide by item_ptr. This space must be + * large enough to hold a queue entry as defined when the queue was initialized. + * + * @note If in_isr is true, timeout_ms must be zero. + * + * @param[in] queue Pointer to the queue handle + * @param[in] item_ptr Pointer to the memory for the item from the queue + * @param[in] timeout_ms The time to wait to get an item from the queue + * @param[in] in_isr If true this is being called from within an ISR + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR, \ref CY_RTOS_QUEUE_EMPTY] + */ +cy_rslt_t cy_rtos_get_queue(cy_queue_t *queue, void *item_ptr, cy_time_t timeout_ms, bool in_isr); + +/** Return the number of items in the queue. + * + * This function returns the number of items currently in the queue. + * + * @param[in] queue Pointer to the queue handle + * @param[out] num_waiting Pointer to the return count + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_count_queue(cy_queue_t *queue, size_t *num_waiting); + +/** Return the amount of empty space in the queue. + * + * This function returns the amount of empty space in the + * queue. For instance, if the queue was created with 10 entries max and there + * are currently 2 entries in the queue, this will return 8. + * + * @param[in] queue Pointer to the queue handle + * @param[out] num_spaces Pointer to the return count. + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_space_queue(cy_queue_t *queue, size_t *num_spaces); + +/** Reset the queue. + * + * This function sets the queue to empty. + * + * @param[in] queue pointer to the queue handle + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_reset_queue(cy_queue_t *queue); + +/** Deinitialize the queue handle. + * + * This function de-initializes the queue and returns all + * resources used by the queue. + * + * @param[in] queue Pointer to the queue handle + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_deinit_queue(cy_queue_t *queue); + +/** \} group_abstraction_rtos_queue */ + +/*********************************************** Timers **********************************************/ + +/** + * \ingroup group_abstraction_rtos_timer + * \{ + */ + +/** Create a new timer. + * + * This function initializes a timer object. + * @note The timer is not active until start is called. + * @note The callback may be (likely will be) called from a different thread. + * + * @param[out] timer Pointer to the timer handle to initialize + * @param[in] type Type of timer (periodic or once) + * @param[in] fun The function + * @param[in] arg Argument to pass along to the callback function + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_init_timer(cy_timer_t *timer, cy_timer_trigger_type_t type, + cy_timer_callback_t fun, cy_timer_callback_arg_t arg); + +/** Start a timer. + * + * @param[in] timer Pointer to the timer handle + * @param[in] num_ms The number of milliseconds to wait before the timer fires + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_start_timer(cy_timer_t *timer, cy_time_t num_ms); + +/** Stop a timer. + * + * @param[in] timer Pointer to the timer handle + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_stop_timer(cy_timer_t *timer); + +/** Returns state of a timer. + * + * @param[in] timer Pointer to the timer handle + * @param[out] state Return value for state, true if running, false otherwise + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_is_running_timer(cy_timer_t *timer, bool *state); + +/** Deinit the timer. + * + * This function deinitializes the timer and frees all consumed resources. + * + * @param[in] timer Pointer to the timer handle + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_deinit_timer(cy_timer_t *timer); + +/** \} group_abstraction_rtos_timer */ + +/*********************************************** Time **********************************************/ + +/** + * \ingroup group_abstraction_rtos_time + * \{ + */ + +/** Gets time in milliseconds since RTOS start. + * + * @note Since this is only 32 bits, it will roll over every 49 days, 17 hours, 2 mins, 47.296 seconds + * + * @param[out] tval Pointer to the struct to populate with the RTOS time + * + * @returns Time in milliseconds since the RTOS started. + */ +cy_rslt_t cy_rtos_get_time(cy_time_t *tval); + +/** Delay for a number of milliseconds. + * + * Processing of this function depends on the minimum sleep + * time resolution of the RTOS. The current thread should sleep for + * the longest period possible which is less than the delay required, + * then makes up the difference with a tight loop. + * + * @param[in] num_ms The number of milliseconds to delay for + * + * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] + */ +cy_rslt_t cy_rtos_delay_milliseconds(cy_time_t num_ms); + +/** \} group_abstraction_rtos_time */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif +#endif /* ifndef INCLUDED_CY_RTOS_INTERFACE_H_ */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_impl.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_impl.h new file mode 100644 index 000000000..8b36a6884 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_impl.h @@ -0,0 +1,77 @@ +/***************************************************************************//** +* \file cyabs_rtos_impl.h +* +* \brief +* Internal definitions for RTOS abstraction layer +* +******************************************************************************** +* \copyright +* Copyright 2019-2020 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + +#ifndef INCLUDED_CYABS_RTOS_IMPL_H_ +#define INCLUDED_CYABS_RTOS_IMPL_H_ + +#include "cmsis_os2.h" +#include "rtx_os.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/****************************************************** +* Constants +******************************************************/ +#define CY_RTOS_MIN_STACK_SIZE 300 /** Minimum stack size in bytes */ +#define CY_RTOS_ALIGNMENT 0x00000008UL /** Minimum alignment for RTOS objects */ +#define CY_RTOS_ALIGNMENT_MASK 0x00000007UL /** Mask for checking the alignment of created RTOS objects */ + + +/****************************************************** +* Type Definitions +******************************************************/ + +/* RTOS thread priority */ +typedef enum +{ + CY_RTOS_PRIORITY_MIN = osPriorityNone, + CY_RTOS_PRIORITY_LOW = osPriorityLow, + CY_RTOS_PRIORITY_BELOWNORMAL = osPriorityBelowNormal, + CY_RTOS_PRIORITY_NORMAL = osPriorityNormal, + CY_RTOS_PRIORITY_ABOVENORMAL = osPriorityAboveNormal, + CY_RTOS_PRIORITY_HIGH = osPriorityHigh, + CY_RTOS_PRIORITY_REALTIME = osPriorityRealtime, + CY_RTOS_PRIORITY_MAX = osPriorityRealtime7 +} cy_thread_priority_t ; + +typedef osThreadId_t cy_thread_t; /** CMSIS definition of a thread handle */ +typedef void * cy_thread_arg_t; /** Argument passed to the entry function of a thread */ +typedef osMutexId_t cy_mutex_t; /** CMSIS definition of a mutex */ +typedef osSemaphoreId_t cy_semaphore_t; /** CMSIS definition of a semaphore */ +typedef osEventFlagsId_t cy_event_t; /** CMSIS definition of an event */ +typedef osMessageQueueId_t cy_queue_t; /** CMSIS definition of a message queue */ +typedef osTimerId_t cy_timer_t; /** CMSIS definition of a timer */ +typedef void * cy_timer_callback_arg_t; /** Argument passed to the timer callback function */ +typedef uint32_t cy_time_t; /** Time in milliseconds */ +typedef osStatus_t cy_rtos_error_t; /** CMSIS definition of a error status */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif +#endif /* ifndef INCLUDED_CYABS_RTOS_IMPL_H_ */ + diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_gpio.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_gpio.h new file mode 100644 index 000000000..08d4e5bfb --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_gpio.h @@ -0,0 +1,247 @@ +/***************************************************************************//** +* \file cyhal_gpio.h +* +* \brief +* Provides a high level interface for interacting with the GPIO on Cypress devices. +* This interface abstracts out the chip specific details. If any chip specific +* functionality is necessary, or performance is critical the low level functions +* can be used directly. +* +******************************************************************************** +* \copyright +* Copyright 2018-2020 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/** +* \addtogroup group_hal_gpio GPIO (General Purpose Input Output) +* \ingroup group_hal +* \{ +* High level interface for configuring and interacting with general purpose input/outputs (GPIO). +* +* The GPIO driver provides functions to configure and initialize GPIO, and to read and write data to the pin. +* The driver also supports interrupt generation on GPIO signals with rising, falling or both edges. +* +* \note The APIs in this driver need not be used if a GPIO is to be used as an input or output of peripherals like I2C or PWM. +* The respective peripheral's driver will utilize the GPIO interface to configure and initialize its GPIO pins. +* +* \section subsection_gpio_features Features +* * Configurable GPIO pin direction - \ref cyhal_gpio_direction_t +* * Configurable GPIO pin drive modes - \ref cyhal_gpio_drive_mode_t +* * Configurable analog and digital characteristics +* * Configurable edge-triggered interrupts and callback assignment on GPIO events - \ref cyhal_gpio_event_t +* +* \section subsection_gpio_quickstart Quick Start +* \ref cyhal_gpio_init can be used for a simple GPIO initialization by providing the pin number (pin), pin direction (direction), +* pin drive mode (drive_mode) and the initial value on the pin (init_val). +* +* \section subsection_gpio_sample_snippets Code Snippets +* +* \subsection subsection_gpio_snippet_1 Snippet 1: Reading value from GPIO +* The following snippet initializes GPIO pin \ref P0_0 as an input with high impedance digital drive mode and initial value = false (low). A value is read +* from the pin and stored to a uint8_t variable (read_val). + +* \snippet gpio.c snippet_cyhal_gpio_read + +* \subsection subsection_gpio_snippet_2 Snippet 2: Writing value to a GPIO +* The following snippet initializes GPIO pin \ref P0_0 as an output pin with strong drive mode and initial value = false (low). +* A value = true (high) is written to the output driver. + +* \snippet gpio.c snippet_cyhal_gpio_write + +* \subsection subsection_gpio_snippet_3 Snippet 3: Reconfiguring a GPIO +* The following snippet shows how to reconfigure a GPIO pin during run-time using the firmware. The GPIO pin \ref P0_0 +* is first initialized as an output pin with strong drive mode. The pin is then reconfigured as an input with high impedance digital drive mode. +* \note \ref cyhal_gpio_configure only changes the direction and the drive_mode +* of the pin. Previously set pin value is retained. +* +* \snippet gpio.c snippet_cyhal_gpio_reconfigure + +* \subsection subsection_gpio_snippet_4 Snippet 4: Interrupts on GPIO events +* GPIO events can be mapped to an interrupt and assigned to a callback function. The callback function needs to be first registered and +* then the event needs to be enabled. +** The following snippet initializes GPIO pin \ref P0_0 as an input pin. It registers a callback function and enables detection +* of a falling edge event to trigger the callback. +* \note If no argument needs to be passed to the callback function then a NULL can be passed during registering.
+* +* \snippet gpio.c snippet_cyhal_gpio_interrupt +*/ + +#pragma once + +#include +#include +#include "cy_result.h" +#include "cyhal_hw_types.h" + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + + +/******************************************************************************* +* Defines +*******************************************************************************/ + +/** Integer representation of no connect pin (required to exist in all BSPs) */ +#define CYHAL_NC_PIN_VALUE (NC) + +/******************************************************************************* +* Enumerations +*******************************************************************************/ + +/** Pin events */ +typedef enum { + CYHAL_GPIO_IRQ_NONE = 0, /**< No interrupt */ + CYHAL_GPIO_IRQ_RISE = 1 << 0, /**< Interrupt on rising edge */ + CYHAL_GPIO_IRQ_FALL = 1 << 1, /**< Interrupt on falling edge */ + CYHAL_GPIO_IRQ_BOTH = (CYHAL_GPIO_IRQ_RISE | CYHAL_GPIO_IRQ_FALL), /**< Interrupt on both rising and falling edges */ +} cyhal_gpio_event_t; + +/** Pin direction */ +typedef enum { + CYHAL_GPIO_DIR_INPUT, /**< Input pin */ + CYHAL_GPIO_DIR_OUTPUT, /**< Output pin */ + CYHAL_GPIO_DIR_BIDIRECTIONAL, /**< Input and output pin */ +} cyhal_gpio_direction_t; + +/** Pin drive mode */ + +/** \note When the drive_mode of the pin is set to CYHAL_GPIO_DRIVE_PULL_NONE , + * it is set to CYHAL_GPIO_DRIVE_STRONG if the direction + * of the pin is CYHAL_GPIO_DIR_OUTPUT or CYHAL_GPIO_DIR_BIDIRECTIONAL. + * If not, the drive_mode of the pin is set to CYHAL_GPIO_DRIVE_NONE. + */ +typedef enum { + CYHAL_GPIO_DRIVE_NONE, /**< Digital Hi-Z. Input only. Input init value(s): 0 or 1 */ + CYHAL_GPIO_DRIVE_ANALOG, /**< Analog Hi-Z. Use only for analog purpose */ + CYHAL_GPIO_DRIVE_PULLUP, /**< Pull-up resistor. Input and output. Input init value(s): 1, output value(s): 0 */ + CYHAL_GPIO_DRIVE_PULLDOWN, /**< Pull-down resistor. Input and output. Input init value(s): 0, output value(s): 1 */ + CYHAL_GPIO_DRIVE_OPENDRAINDRIVESLOW, /**< Open-drain, Drives Low. Input and output. Input init value(s): 1, output value(s): 0 */ + CYHAL_GPIO_DRIVE_OPENDRAINDRIVESHIGH, /**< Open-drain, Drives High. Input and output. Input init value(s): 0, output value(s): 1 */ + CYHAL_GPIO_DRIVE_STRONG, /**< Strong output. Output only. Output init value(s): 0 or 1 */ + CYHAL_GPIO_DRIVE_PULLUPDOWN, /**< Pull-up and pull-down resistors. Input and output. Input init value(s): 0 or 1, output value(s): 0 or 1 */ + CYHAL_GPIO_DRIVE_PULL_NONE, /**< No Pull-up or pull-down resistors. Input and output. Input init value(s): 0 or 1, output value(s): 0 or 1 */ +} cyhal_gpio_drive_mode_t; + +/** GPIO callback function type */ +typedef void (*cyhal_gpio_event_callback_t)(void *callback_arg, cyhal_gpio_event_t event); + +/******************************************************************************* +* Functions +*******************************************************************************/ + +/** Initialize the GPIO pin
+ * See \ref subsection_gpio_snippet_1. + * + * @param[in] pin The GPIO pin to initialize + * @param[in] direction The pin direction + * @param[in] drive_mode The pin drive mode + * @param[in] init_val Initial value on the pin + * + * @return The status of the init request + * + * Guidance for using gpio drive modes ( \ref cyhal_gpio_drive_mode_t for details). + * For default use drive modes: + * Input GPIO direction - \ref CYHAL_GPIO_DRIVE_NONE + * Output GPIO direction - \ref CYHAL_GPIO_DRIVE_STRONG + * Bidirectional GPIO - \ref CYHAL_GPIO_DRIVE_PULLUPDOWN + * \warning Don't use \ref CYHAL_GPIO_DRIVE_STRONG for input GPIO direction. It may cause an overcurrent issue. + */ +cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drive_mode, bool init_val); + +/** Uninitialize the gpio peripheral and the cyhal_gpio_t object + * + * @param[in] pin Pin number + */ +void cyhal_gpio_free(cyhal_gpio_t pin); + +/** Configure the GPIO pin
+ * See \ref subsection_gpio_snippet_3. + * + * @param[in] pin The GPIO pin + * @param[in] direction The pin direction + * @param[in] drive_mode The pin drive mode + * + * @return The status of the configure request + */ +cy_rslt_t cyhal_gpio_configure(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drive_mode); + +/** Set the output value for the pin. This only works for output & in_out pins.
+ * See \ref subsection_gpio_snippet_2. + * + * @param[in] pin The GPIO object + * @param[in] value The value to be set (high = true, low = false) + */ +void cyhal_gpio_write(cyhal_gpio_t pin, bool value); + +/** Read the input value. This only works for \ref CYHAL_GPIO_DIR_INPUT & \ref CYHAL_GPIO_DIR_BIDIRECTIONAL pins.
+ * See \ref subsection_gpio_snippet_1. + * + * @param[in] pin The GPIO object + * @return The value of the IO (true = high, false = low) + */ +bool cyhal_gpio_read(cyhal_gpio_t pin); + +/** Toggle the output value
+ * See \ref subsection_gpio_snippet_4. + * @param[in] pin The GPIO object + */ +void cyhal_gpio_toggle(cyhal_gpio_t pin); + +/** Register/clear a callback handler for pin events
+ * + * This function will be called when one of the events enabled by \ref cyhal_gpio_enable_event occurs. + * + * See \ref subsection_gpio_snippet_4. + * + * @param[in] pin The pin number + * @param[in] callback The function to call when the specified event happens. Pass NULL to unregister the handler. + * @param[in] callback_arg Generic argument that will be provided to the callback when called, can be NULL + */ +void cyhal_gpio_register_callback(cyhal_gpio_t pin, cyhal_gpio_event_callback_t callback, void *callback_arg); + +/** Enable or Disable the specified GPIO event
+ * + * When an enabled event occurs, the function specified by \ref cyhal_gpio_register_callback will be called. + * + * See \ref subsection_gpio_snippet_4. + * + * @param[in] pin The GPIO object + * @param[in] event The GPIO event + * @param[in] intr_priority The priority for NVIC interrupt events + * @param[in] enable True to turn on interrupts, False to turn off + */ +void cyhal_gpio_enable_event(cyhal_gpio_t pin, cyhal_gpio_event_t event, uint8_t intr_priority, bool enable); + +/******************************************************************************* +* Backward compatibility macro. The following code is DEPRECATED and must +* not be used in new projects +*******************************************************************************/ +/** \cond INTERNAL */ +#define cyhal_gpio_register_irq(pin, priority, handler, handler_arg) cyhal_gpio_register_callback(pin, handler, handler_arg) +#define cyhal_gpio_irq_enable(pin, event, enable) cyhal_gpio_enable_event(pin, event, CYHAL_ISR_PRIORITY_DEFAULT, enable) +typedef cyhal_gpio_event_t cyhal_gpio_irq_event_t; +/** \endcond */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#ifdef CYHAL_GPIO_IMPL_HEADER +#include CYHAL_GPIO_IMPL_HEADER +#endif /* CYHAL_GPIO_IMPL_HEADER */ + +/** \} group_hal_gpio */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_sdio.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_sdio.h new file mode 100644 index 000000000..d5600efd9 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_sdio.h @@ -0,0 +1,366 @@ +/***************************************************************************//** +* \file cyhal_sdio.h +* +* \brief +* Provides a high level interface for interacting with the Cypress SDIO interface. +* This interface abstracts out the chip specific details. If any chip specific +* functionality is necessary, or performance is critical the low level functions +* can be used directly. +* +******************************************************************************** +* \copyright +* Copyright 2018-2020 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/** +* \addtogroup group_hal_sdio SDIO (Secure Digital Input Output) +* \ingroup group_hal +* \{ +* High level interface to the Secure Digital Input Output (SDIO). +* +* This driver allows commands to be sent over the SDIO bus; the supported commands +* can be found in \ref cyhal_sdio_command_t. Bulk data transfer is also supported +* via cyhal_sdio_bulk_transfer(). +* +* The SDIO protocol is an extension of the SD +* interface for general I/O functions. Refer to the SD Specifications Part 1 SDIO +* Specifications Version 4.10 for more information on the SDIO protocol and specifications. +* +* +* \section subsection_sdio_features Features +* * Supports 4-bit interface +* * Supports Ultra High Speed (UHS-I) mode +* * Supports Default Speed (DS), High Speed (HS), SDR12, SDR25 and SDR50 speed modes +* * Supports SDIO card interrupts in both 1-bit and 4-bit modes +* * Supports Standard capacity (SDSC), High capacity (SDHC) and Extended capacity (SDXC) memory +* +* \section subsection_sdio_quickstart Quick Start +* +* \ref cyhal_sdio_init initializes the SDIO peripheral and passes a pointer to the SDIO block through the **obj** object of type \ref cyhal_sdio_t. +* +* \section subsection_sdio_code_snippets Code Snippets +* +* \subsection subsection_sdio_use_case_1 Snippet1: Simple SDIO Initialization example +* The following snippet shows how to initialize the SDIO interface with a pre-defined configuration +* +* \snippet sdio.c snippet_cyhal_sdio_simple_init +* +* \subsection subsection_sdio_use_case_2 Snippet2: Configure Interrupt +* The following snippet shows how to configure an interrupt and handle specific events. Refer \ref cyhal_sdio_event_t for different types of events. +* +* \snippet sdio.c snippet_cyhal_sdio_interrupt_callback +* +* \subsection subsection_sdio_use_case_3 Snippet3: Sending Commands +* The following snippet shows how to send a particular command. Some steps of the card initialization have been provided for reference. Refer \ref cyhal_sdio_command_t for different commands. +* +* \snippet sdio.c snippet_cyhal_sdio_send_command +* +* \subsection subsection_sdio_use_case_4 Snippet4: Bulk Data Transfer +* The following snippet shows how to start a bulk data transfer. +* +* \snippet sdio.c snippet_cyhal_sdio_bulk_transfer +* +* \subsection subsection_sdio_use_case_5 Snippet5: Async Data Transfer +* +* The following snippet shows how to start an async data transfer. +* \snippet sdio.c snippet_cyhal_sdio_async_transfer +*/ + +#pragma once + +#include +#include +#include "cy_result.h" +#include "cyhal_hw_types.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +/******************************************************************************* +* Defines +*******************************************************************************/ + +#define CYHAL_SDIO_RET_NO_ERRORS (0x00) /**< No error*/ +#define CYHAL_SDIO_RET_NO_SP_ERRORS (0x01) /**< Non-specific error code*/ +#define CYHAL_SDIO_RET_CMD_CRC_ERROR (0x02) /**< There was a CRC error on the Command/Response*/ +#define CYHAL_SDIO_RET_CMD_IDX_ERROR (0x04) /**< The index for the command didn't match*/ +#define CYHAL_SDIO_RET_CMD_EB_ERROR (0x08) /**< There was an end bit error on the command*/ +#define CYHAL_SDIO_RET_DAT_CRC_ERROR (0x10) /**< There was a data CRC Error*/ +#define CYHAL_SDIO_RET_CMD_TIMEOUT (0x20) /**< The command didn't finish before the timeout period was over*/ +#define CYHAL_SDIO_RET_DAT_TIMEOUT (0x40) /**< The data didn't finish before the timeout period was over*/ +#define CYHAL_SDIO_RET_RESP_FLAG_ERROR (0x80) /**< There was an error in the resposne flag for command 53*/ + +#define CYHAL_SDIO_CLOCK_ERROR (0x100) /**< Failed to initial clock for SDIO */ +#define CYHAL_SDIO_BAD_ARGUMENT (0x200) /**< Bad argument passed for SDIO */ +#define CYHAL_SDIO_SEMA_NOT_INITED (0x400) /**< Semaphore is not initiated */ +#define CYHAL_SDIO_FUNC_NOT_SUPPORTED (0x800) /**< Function is not supported */ +#define CYHAL_SDIO_CANCELED (0x1000) /**< Operation canceled */ +#define CYHAL_SDIO_PM_PENDING_ERROR (0x2000) /**< Transfer cannot be initiated after power mode transition allowed.*/ + +/* HAL return value defines */ + +/** \addtogroup group_hal_results_sdio SDIO HAL Results + * SDIO specific return codes + * \ingroup group_hal_results + * \{ *//** + */ + +/** Incorrect parameter value define */ +#define CYHAL_SDIO_RSLT_ERR_BAD_PARAM \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_BAD_ARGUMENT)) +/** Clock initialization error define */ +#define CYHAL_SDIO_RSLT_ERR_CLOCK \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_CLOCK_ERROR)) +/** Semaphore not initiated error define */ +#define CYHAL_SDIO_RSLT_ERR_SEMA_NOT_INITED \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_SEMA_NOT_INITED)) +/** Error define based on SDIO lower function return value */ +#define CYHAL_SDIO_RSLT_ERR_FUNC_RET(retVal) \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, ((uint16_t)retVal))) +/** Define to indicate canceled operation */ +#define CYHAL_SDIO_RSLT_CANCELED \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_CANCELED)) +/** Transfers are not allowed after the SDIO block has allowed power mode transition. */ +#define CYHAL_SDIO_RSLT_ERR_PM_PENDING \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_PM_PENDING_ERROR)) + +/** + * \} + */ + + +/******************************************************************************* +* Enumerations +*******************************************************************************/ + +/** Commands that can be issued */ +typedef enum +{ + CYHAL_SDIO_CMD_GO_IDLE_STATE = 0, //!< Go to idle state + CYHAL_SDIO_CMD_SEND_RELATIVE_ADDR = 3, //!< Send a relative address + CYHAL_SDIO_CMD_IO_SEND_OP_COND = 5, //!< Send an OP IO + CYHAL_SDIO_CMD_SELECT_CARD = 7, //!< Send a card select + CYHAL_SDIO_CMD_GO_INACTIVE_STATE = 15, //!< Go to inactive state + CYHAL_SDIO_CMD_IO_RW_DIRECT = 52, //!< Perform a direct read/write + CYHAL_SDIO_CMD_IO_RW_EXTENDED = 53, //!< Perform an extended read/write +} cyhal_sdio_command_t; + +/** Types of transfer that can be performed */ +typedef enum +{ + CYHAL_READ, //!< Read from the card + CYHAL_WRITE //!< Write to the card +} cyhal_transfer_t; + +/** Types of events that could be asserted by SDIO */ +typedef enum { + /* Interrupt-based thread events */ + CYHAL_SDIO_CMD_COMPLETE = 0x00001, //!< Command Complete + CYHAL_SDIO_XFER_COMPLETE = 0x00002, //!< Host read/write transfer is complete + CYHAL_SDIO_BGAP_EVENT = 0x00004, //!< This bit is set when both read/write transaction is stopped + CYHAL_SDIO_DMA_INTERRUPT = 0x00008, //!< Host controller detects an SDMA Buffer Boundary during transfer + CYHAL_SDIO_BUF_WR_READY = 0x00010, //!< This bit is set if the Buffer Write Enable changes from 0 to 1 + CYHAL_SDIO_BUF_RD_READY = 0x00020, //!< This bit is set if the Buffer Read Enable changes from 0 to 1 + CYHAL_SDIO_CARD_INSERTION = 0x00040, //!< This bit is set if the Card Inserted in the Present State + CYHAL_SDIO_CARD_REMOVAL = 0x00080, //!< This bit is set if the Card Inserted in the Present State + CYHAL_SDIO_CARD_INTERRUPT = 0x00100, //!< The synchronized value of the DAT[1] interrupt input for SD mode + CYHAL_SDIO_INT_A = 0x00200, //!< Reserved: set to 0 + CYHAL_SDIO_INT_B = 0x00400, //!< Reserved: set to 0 + CYHAL_SDIO_INT_C = 0x00800, //!< Reserved: set to 0 + CYHAL_SDIO_RE_TUNE_EVENT = 0x01000, //!< Reserved: set to 0 + CYHAL_SDIO_FX_EVENT = 0x02000, //!< This status is set when R[14] of response register is set to 1 + CYHAL_SDIO_CQE_EVENT = 0x04000, //!< This status is set if Command Queuing/Crypto event has occurred + CYHAL_SDIO_ERR_INTERRUPT = 0x08000, //!< If any of the bits in the Error Interrupt Status register are set + + /* Non-interrupt-based thread events */ + CYHAL_SDIO_GOING_DOWN = 0x10000, //!< The interface is going away (eg: powering down for some period of time) + CYHAL_SDIO_COMING_UP = 0x20000, //!< The interface is back up (eg: came back from a low power state) + + CYHAL_SDIO_ALL_INTERRUPTS = 0x0E1FF, //!< Is used to enable/disable all interrupts events +} cyhal_sdio_event_t; + + +/******************************************************************************* +* Data Structures +*******************************************************************************/ + +/** @brief SDIO controller initial configuration */ +typedef struct +{ + uint32_t frequencyhal_hz; //!< Clock frequency, in hertz + uint16_t block_size; //!< Block size +} cyhal_sdio_cfg_t; + +/** Callback for SDIO events */ +typedef void (*cyhal_sdio_event_callback_t)(void *callback_arg, cyhal_sdio_event_t event); + + +/******************************************************************************* +* Data Structures +*******************************************************************************/ +/** Initialize the SDIO peripheral + * + * @param[out] obj Pointer to an SDIO object. + * The caller must allocate the memory for this object but the init + * function will initialize its contents. + * @param[out] clk The pin connected to the clk signal + * @param[in] cmd The pin connected to the command signal + * @param[in] data0 The pin connected to the data0 signal + * @param[in] data1 The pin connected to the data1 signal + * @param[in] data2 The pin connected to the data2 signal + * @param[in] data3 The pin connected to the data3 signal + * @return The status of the init request + * + * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_1 for more information. + */ +cy_rslt_t cyhal_sdio_init(cyhal_sdio_t *obj, cyhal_gpio_t cmd, cyhal_gpio_t clk, cyhal_gpio_t data0, cyhal_gpio_t data1, cyhal_gpio_t data2, cyhal_gpio_t data3); + +/** Release the SDIO block. + * + * @param[in,out] obj The SDIO object + */ +void cyhal_sdio_free(cyhal_sdio_t *obj); + +/** Configure the SDIO block with required parameters. Refer \ref cyhal_sdio_cfg_t for more information. + * + * @param[in,out] obj The SDIO object + * @param[in] config The SDIO configuration to apply + * @return The status of the configure request. + * + * Returns \ref CY_RSLT_SUCCESS on successful operation. + */ +cy_rslt_t cyhal_sdio_configure(cyhal_sdio_t *obj, const cyhal_sdio_cfg_t *config); + +/** Sends command to the SDIO device. See \ref cyhal_sdio_command_t for list of available commands. + * + * This will block until the command is completed. + * + * @param[in,out] obj The SDIO object + * @param[in] direction The direction of transfer (read/write) + * @param[in] command The command to send to the SDIO device + * @param[in] argument The argument to the command + * @param[out] response The response from the SDIO device + * @return The status of the command transfer. + * + * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_3 for more information. + */ +cy_rslt_t cyhal_sdio_send_cmd(const cyhal_sdio_t *obj, cyhal_transfer_t direction, cyhal_sdio_command_t command, uint32_t argument, uint32_t* response); + +/** Performs a bulk data transfer. Sends \ref CYHAL_SDIO_CMD_IO_RW_EXTENDED command (CMD=53) which allows writing and reading of a large number of I/O registers with a single command. + * + * This will block until the transfer is completed. + * + * @param[in,out] obj The SDIO object + * @param[in] direction The direction of transfer (read/write) + * @param[in] argument The argument to the command + * @param[in] data The data to send to the SDIO device. A bulk transfer is done in block + * size (default: 64 bytes) chunks for better performance. Therefore, + * the size of the data buffer passed into this function must be at least + * `length` bytes and a multiple of the block size. For example, when + * requesting to read 100 bytes of data with a block size 64 bytes, the + * data buffer needs to be at least 128 bytes. The first 100 bytes of data + * in the buffer will be the requested data. + * @param[in] length The number of bytes to send + * @param[out] response The response from the SDIO device + * @return The status of the bulk transfer operation. + * + * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_4 for more information. + */ +cy_rslt_t cyhal_sdio_bulk_transfer(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t* data, uint16_t length, uint32_t* response); + +/** Performs a bulk asynchronous data transfer by issuing the \ref CYHAL_SDIO_CMD_IO_RW_EXTENDED command(CMD=53) to the SDIO block. + * After exiting this function the \ref CYHAL_SDIO_CMD_COMPLETE and \ref CYHAL_SDIO_XFER_COMPLETE events are not asserted. + * + * To complete the asynchronous transfer, call \ref cyhal_sdio_is_busy() + * until it returns false. + * The \ref CYHAL_SDIO_CMD_COMPLETE and \ref CYHAL_SDIO_XFER_COMPLETE events are enabled + * after the asynchronous transfer is complete and in the condition they were + * enabled in before the transfer operation started. Handle these events in the interrupt callback. + * + * When the transfer is complete, the \ref CYHAL_SDIO_XFER_COMPLETE event will be raised. + * See \ref cyhal_sdio_register_callback and \ref cyhal_sdio_enable_event. + * + * @param[in,out] obj The SDIO object + * @param[in] direction The direction of transfer (read/write) + * @param[in] argument The argument to the command + * @param[in] data The data to send to the SDIO device + * @param[in] length The number of bytes to send + * @return The status of the async tranfer operation. + * + * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_5 for more information. + */ +cy_rslt_t cyhal_sdio_transfer_async(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t* data, uint16_t length); + +/** Checks if the specified SDIO is in use + * + * @param[in] obj The SDIO peripheral to check + * @return true if SDIO is in use. false, otherwise. + */ +bool cyhal_sdio_is_busy(const cyhal_sdio_t *obj); + +/** Abort an SDIO transfer + * + * @param[in] obj The SDIO peripheral to stop + * @return The status of the abort_async request. + * + * Returns \ref CY_RSLT_SUCCESS on successful operation. + */ +cy_rslt_t cyhal_sdio_abort_async(const cyhal_sdio_t *obj); + +/** Register an SDIO event callback to be invoked when the event is triggered. + * + * This function will be called when one of the events enabled by \ref cyhal_sdio_enable_event occurs. + * + * @param[in] obj The SDIO object + * @param[in] callback The callback function which will be invoked when the event triggers + * @param[in] callback_arg Generic argument that will be provided to the callback when executed + * + * Refer \ref subsection_sdio_use_case_2 for more implementation. + */ +void cyhal_sdio_register_callback(cyhal_sdio_t *obj, cyhal_sdio_event_callback_t callback, void *callback_arg); + +/** Enables callbacks to be triggered for specified SDIO events. Refer \ref cyhal_sdio_event_t for all events. + * + * @param[in] obj The SDIO object + * @param[in] event The SDIO event type + * @param[in] intr_priority The priority for NVIC interrupt events + * @param[in] enable Set to true to enable events, or false to disable them + * + * Refer \ref subsection_sdio_use_case_2 for more information. + */ +void cyhal_sdio_enable_event(cyhal_sdio_t *obj, cyhal_sdio_event_t event, uint8_t intr_priority, bool enable); + +/******************************************************************************* +* Backward compatibility macro. The following code is DEPRECATED and must +* not be used in new projects +*******************************************************************************/ +/** \cond INTERNAL */ +#define cyhal_sdio_register_irq cyhal_sdio_register_callback +#define cyhal_sdio_irq_enable(obj, event, enable) cyhal_sdio_enable_event(obj, event, CYHAL_ISR_PRIORITY_DEFAULT, enable) +typedef cyhal_sdio_event_t cyhal_sdio_irq_event_t; +typedef cyhal_sdio_event_callback_t cyhal_sdio_irq_handler_t; +/** \endcond */ + +#if defined(__cplusplus) +} +#endif + +#ifdef CYHAL_SDIO_IMPL_HEADER +#include CYHAL_SDIO_IMPL_HEADER +#endif /* CYHAL_SDIO_IMPL_HEADER */ + +/** \} group_hal_sdio */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_spi.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_spi.h new file mode 100644 index 000000000..f5ba47669 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_spi.h @@ -0,0 +1,383 @@ +/***************************************************************************//** +* \file cyhal_spi.h +* +* \brief +* Provides a high level interface for interacting with the Cypress SPI. +* This interface abstracts out the chip specific details. If any chip specific +* functionality is necessary, or performance is critical the low level functions +* can be used directly. +* +******************************************************************************** +* \copyright +* Copyright 2018-2020 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/** +* \addtogroup group_hal_spi SPI (Serial Peripheral Interface) +* \ingroup group_hal +* \{ +* High level interface for interacting with the Serial Peripheral Interface (SPI). +* +* The SPI protocol is a synchronous serial interface protocol. Devices operate +* in either master or slave mode. The master initiates the data transfer. +* +* Motorola SPI modes 0, 1, 2, and 3 are supported, with either MSB or LSB first. +* The operating mode and data frame size can be configured via \ref cyhal_spi_cfg_t. +* +* \section section_spi_features Features +* * Supports master and slave functionality. +* * Supports Motorola modes - 0, 1, 2 and 3 - \ref cyhal_spi_mode_t +* * MSb or LSb first shift direction - \ref cyhal_spi_mode_t +* * Master supports up to four slave select lines +* * Supports data frame size of 8 or 16 bits +* * Configurable interrupt and callback assignment on SPI events: +* Data transfer to FIFO complete, Transfer complete and Transmission error - \ref cyhal_spi_event_t +* * Supports changing baud rate of the transaction in run time. +* * Provides functions to send/receive a single byte or block of data. +* +* \section section_spi_quickstart Quick Start +* +* Initialise a SPI master or slave interface using \ref cyhal_spi_init() and provide the SPI pins (mosi, miso, sclk, ssel), +* number of bits per frame (data_bits) and SPI Motorola mode. The data rate can be set using \ref cyhal_spi_set_frequency().
+* See \ref section_spi_snippets for code snippets to send or receive the data. +* +* \section section_spi_snippets Code snippets +* +* \subsection subsection_spi_snippet_1 Snippet 1: SPI Master - Single byte transfer operation (Read and Write) +* The following code snippet initializes an SPI Master interface using the \ref cyhal_spi_init(). The data rate of transfer is set using \ref cyhal_spi_set_frequency(). +* The code snippet shows how to transfer a single byte of data using \ref cyhal_spi_send() and \ref cyhal_spi_recv(). +* \snippet spi.c snippet_cyhal_spi_master_byte_operation +* +* \subsection subsection_spi_snippet_2 Snippet 2: SPI Slave - Single byte transfer operation (Read and Write) +* The following code snippet initializes an SPI Slave interface using the \ref cyhal_spi_init(). The data rate of transfer is set using \ref cyhal_spi_set_frequency. +* The code snippet shows how to transfer a single byte of data using \ref cyhal_spi_send() and \ref cyhal_spi_recv. +* \snippet spi.c snippet_cyhal_spi_slave_byte_operation +* +* \subsection subsection_spi_snippet_3 Snippet 3: SPI Block Data transfer +* The following snippet sends and receives an array of data in a single SPI transaction using \ref cyhal_spi_transfer(). The example +* uses SPI master to transmit 5 bytes of data and receive 5 bytes of data in a single transaction. +* \snippet spi.c snippet_cyhal_spi_block_data_transfer +* +* \subsection subsection_spi_snippet_4 Snippet 4: Interrupts on SPI events +* SPI interrupt events ( \ref cyhal_spi_event_t) can be mapped to an interrupt and assigned to a callback function. +* The callback function needs to be first registered and then the event needs to be enabled. +* The following snippet initialises a SPI master to perform a block transfer using \ref cyhal_spi_transfer_async(). This is a non-blocking function. +* A callback function is registered using \ref cyhal_spi_register_callback to notify whenever the SPI transfer is complete. +* \snippet spi.c snippet_cyhal_spi_interrupt_callback_events + +* \section subsection_spi_moreinfor More Information +* +* * mtb-example-psoc6-spi-master: This example project demonstrates +* use of SPI (HAL) resource in PSoC® 6 MCU in Master mode to write data to an SPI slave. +* +*/ + +#pragma once + +#include +#include +#include "cy_result.h" +#include "cyhal_hw_types.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +/** \addtogroup group_hal_results_spi SPI HAL Results + * SPI specific return codes + * \ingroup group_hal_results + * \{ *//** + */ + +/** Bad argument */ +#define CYHAL_SPI_RSLT_BAD_ARGUMENT \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 0)) +/** Failed to initialize SPI clock */ +#define CYHAL_SPI_RSLT_CLOCK_ERROR \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 1)) +/** Failed to Transfer SPI data */ +#define CYHAL_SPI_RSLT_TRANSFER_ERROR \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 2)) +/** Provided clock is not supported by SPI */ +#define CYHAL_SPI_RSLT_CLOCK_NOT_SUPPORTED \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 3)) +/** Provided PIN configuration is not supported by SPI */ +#define CYHAL_SPI_RSLT_PIN_CONFIG_NOT_SUPPORTED \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 5)) +/** Provided PIN configuration is not supported by SPI */ +#define CYHAL_SPI_RSLT_INVALID_PIN_API_NOT_SUPPORTED \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 6)) +/** The requested resource type is invalid */ +#define CYHAL_SPI_RSLT_ERR_INVALID_PIN \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 7)) +/** Cannot configure SSEL signal */ +#define CYHAL_SPI_RSLT_ERR_CANNOT_CONFIG_SSEL \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 8)) +/** Cannot switch SSEL - device is busy or incorrect pin provided */ +#define CYHAL_SPI_RSLT_ERR_CANNOT_SWITCH_SSEL \ + (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 9)) + +/** + * \} + */ + +/** Compatibility define for cyhal_spi_set_frequency. */ +#define cyhal_spi_frequency cyhal_spi_set_frequency + +/** SPI interrupt triggers */ +typedef enum { + /** All transfer data has been moved into data FIFO */ + CYHAL_SPI_IRQ_DATA_IN_FIFO = 1 << 1, + /** Transfer complete. */ + CYHAL_SPI_IRQ_DONE = 1 << 2, + /** An error occurred while transferring data */ + CYHAL_SPI_IRQ_ERROR = 1 << 3, +} cyhal_spi_event_t; + +/** SPI Slave Select polarity */ +typedef enum { + /** SSEL signal is active low */ + CYHAL_SPI_SSEL_ACTIVE_LOW = 0, + /** SSEL signal is active high */ + CYHAL_SPI_SSEL_ACTIVE_HIGH = 1, +} cyhal_spi_ssel_polarity_t; + +/** Handler for SPI interrupts */ +typedef void (*cyhal_spi_event_callback_t)(void *callback_arg, cyhal_spi_event_t event); + +/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the LSB is sent first. */ +#define CYHAL_SPI_MODE_FLAG_LSB (0x01u) +/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the CPHA=1. */ +#define CYHAL_SPI_MODE_FLAG_CPHA (0x02u) +/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the CPOL=1. */ +#define CYHAL_SPI_MODE_FLAG_CPOL (0x04u) +/** Creates a \ref cyhal_spi_mode_t value given the cpol, cpha, lsb values. */ +#define CYHAL_SPI_MODE(cpol, cpha, lsb) (((cpol > 0) ? CYHAL_SPI_MODE_FLAG_CPOL : 0) | \ + ((cpha > 0) ? CYHAL_SPI_MODE_FLAG_CPHA : 0) | \ + (( lsb > 0) ? CYHAL_SPI_MODE_FLAG_LSB : 0)) + +/** SPI operating modes */ +typedef enum +{ + /** Standard motorola SPI CPOL=0, CPHA=0 with MSB first operation */ + CYHAL_SPI_MODE_00_MSB = CYHAL_SPI_MODE(0, 0, 0), + /** Standard motorola SPI CPOL=0, CPHA=0 with LSB first operation */ + CYHAL_SPI_MODE_00_LSB = CYHAL_SPI_MODE(0, 0, 1), + /** Standard motorola SPI CPOL=0, CPHA=1 with MSB first operation */ + CYHAL_SPI_MODE_01_MSB = CYHAL_SPI_MODE(0, 1, 0), + /** Standard motorola SPI CPOL=0, CPHA=1 with LSB first operation */ + CYHAL_SPI_MODE_01_LSB = CYHAL_SPI_MODE(0, 1, 1), + /** Standard motorola SPI CPOL=1, CPHA=0 with MSB first operation */ + CYHAL_SPI_MODE_10_MSB = CYHAL_SPI_MODE(1, 0, 0), + /** Standard motorola SPI CPOL=1, CPHA=0 with LSB first operation */ + CYHAL_SPI_MODE_10_LSB = CYHAL_SPI_MODE(1, 0, 1), + /** Standard motorola SPI CPOL=1, CPHA=1 with MSB first operation */ + CYHAL_SPI_MODE_11_MSB = CYHAL_SPI_MODE(1, 1, 0), + /** Standard motorola SPI CPOL=1, CPHA=1 with LSB first operation */ + CYHAL_SPI_MODE_11_LSB = CYHAL_SPI_MODE(1, 1, 1), +} cyhal_spi_mode_t; + +/** @brief Initial SPI configuration. */ +typedef struct +{ + cyhal_spi_mode_t mode; //!< The operating mode + uint8_t data_bits; //!< The number of bits per transfer + bool is_slave; //!< Whether the peripheral is operating as slave or master +} cyhal_spi_cfg_t; + +/** Initialize the SPI peripheral + * + * Configures the pins used by SPI, sets a default format and frequency, and enables the peripheral + * @param[out] obj Pointer to a SPI object. The caller must allocate the memory + * for this object but the init function will initialize its contents. + * @param[in] mosi The pin to use for MOSI + * @note At least MOSI or MISO pin should be non-NC + * @param[in] miso The pin to use for MISO + * @note At least MOSI or MISO pin should be non-NC + * @param[in] sclk The pin to use for SCLK + * @note This pin cannot be NC + * @param[in] ssel The pin to use for SSEL + * @note Provided pin will be configured for \ref CYHAL_SPI_SSEL_ACTIVE_LOW polarity and set as active. This can be changed + * (as well as additional ssel pins can be added) by \ref cyhal_spi_slave_select_config and \ref cyhal_spi_select_active_ssel + * functions. This pin can be NC. + * @param[in] clk The clock to use can be shared, if not provided a new clock will be allocated + * @param[in] bits The number of bits per frame + * @note bits should be 8 or 16 + * @param[in] mode The SPI mode (clock polarity, phase, and shift direction) + * @param[in] is_slave false for master mode or true for slave mode operation + * @return The status of the init request + */ +cy_rslt_t cyhal_spi_init(cyhal_spi_t *obj, cyhal_gpio_t mosi, cyhal_gpio_t miso, cyhal_gpio_t sclk, cyhal_gpio_t ssel, + const cyhal_clock_t *clk, uint8_t bits, cyhal_spi_mode_t mode, bool is_slave); + +/** Release a SPI object + * + * Return the peripheral, pins and clock owned by the SPI object to their reset state + * @param[in,out] obj The SPI object to deinitialize + */ +void cyhal_spi_free(cyhal_spi_t *obj); + +/** Set the SPI baud rate + * + * Actual frequency may differ from the desired frequency due to available dividers and bus clock + * Configures the SPI peripheral's baud rate + * @param[in,out] obj The SPI object to configure + * @param[in] hz The baud rate in Hz + * @return The status of the set_frequency request + */ +cy_rslt_t cyhal_spi_set_frequency(cyhal_spi_t *obj, uint32_t hz); + +/** Configures provided ssel pin to work as SPI slave select with specified polarity. + * + * Multiple pins can be configured as SPI slave select pins. Please refer to device datasheet for details. Switching + * between configured slave select pins is done by \ref cyhal_spi_select_active_ssel function. + * Unless modified with this function, the SSEL pin provided as part of \ref cyhal_spi_init is the default. + * @param[in] obj The SPI object to add slave select for + * @param[in] ssel Slave select pin to be added + * @param[in] polarity Polarity of slave select + * @return The status of ssel pin configuration + */ +cy_rslt_t cyhal_spi_slave_select_config(cyhal_spi_t *obj, cyhal_gpio_t ssel, cyhal_spi_ssel_polarity_t polarity); + +/** Selects an active slave select line from one of available. + * + * This function is applicable for the master and slave. + * SSEL pin should be configured by \ref cyhal_spi_slave_select_config or \ref cyhal_spi_init functions prior + * to selecting it as active. The active slave select line will automatically be toggled as part of any transfer. + * @param[in] obj The SPI object for switching + * @param[in] ssel Slave select pin to be set as active + * @return CY_RSLT_SUCCESS if slave select was switched successfully, otherwise - CYHAL_SPI_RSLT_ERR_CANNOT_SWITCH_SSEL + */ +cy_rslt_t cyhal_spi_select_active_ssel(cyhal_spi_t *obj, cyhal_gpio_t ssel); + +/** Synchronously get a received value out of the SPI receive buffer + * + * In Master mode - transmits fill-in value and read the data from RxFifo + * In Slave mode - Blocks until a value is available + * + * @param[in] obj The SPI peripheral to read + * @param[in] value The value received + * @return The status of the read request + * @note + * - In Master mode, MISO pin required to be non-NC for this API to operate + * - In Slave mode, MOSI pin required to be non-NC for this API to operate + */ +cy_rslt_t cyhal_spi_recv(cyhal_spi_t *obj, uint32_t* value); + +/** Synchronously send a byte out + * + * In Master mode transmits value to slave and read/drop a value from the RxFifo. + * In Slave mode writes a value to TxFifo + * + * @param[in] obj The SPI peripheral to use for sending + * @param[in] value The value to send + * @return The status of the write request + * @note + * - In Master mode, MOSI pin required to be non-NC for this API to operate + * - In Slave mode, MISO pin required to be non-NC for this API to operate + */ +cy_rslt_t cyhal_spi_send(cyhal_spi_t *obj, uint32_t value); + +/** Synchronously Write a block out and receive a value + * + * The total number of bytes sent and received will be the maximum of tx_length + * and rx_length. The bytes written will be padded (at the end) with the value + * given by write_fill. + * + * This function will block for the duration of the transfer. \ref cyhal_spi_transfer_async + * can be used for non-blocking transfers. + * + * @param[in] obj The SPI peripheral to use for sending + * @param[in] tx Pointer to the byte-array of data to write to the device + * @param[in,out] tx_length Number of bytes to write, updated with the number actually written + * @param[out] rx Pointer to the byte-array of data to read from the device + * @param[in,out] rx_length Number of bytes to read, updated with the number actually read + * @param[in] write_fill Default data transmitted while performing a read + * @return The status of the transfer request + * @note Both MOSI and MISO pins required to be non-NC for this API to operate + */ +cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, uint8_t write_fill); + +/** Start an asynchronous SPI transfer. + * + * This will transfer `rx_length` bytes into the buffer pointed to by `rx`, while simultaneously transfering + * `tx_length` bytes of data from the buffer pointed to by `tx`, both in the background. + * When the transfer is complete, the @ref CYHAL_SPI_IRQ_DONE event will be raised. + * See @ref cyhal_spi_register_callback and @ref cyhal_spi_enable_event. + * \note For blocking transfers cyhal_spi_transfer can be used. + * + * @param[in] obj The SPI object that holds the transfer information + * @param[in] tx The transmit buffer + * @param[in,out] tx_length The number of bytes to transmit + * @param[out] rx The receive buffer + * @param[in,out] rx_length The number of bytes to receive + * @return The status of the transfer_async request + * @note Both MOSI and MISO pins required to be non-NC for this API to operate + */ +cy_rslt_t cyhal_spi_transfer_async(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length); + +/** Checks if the specified SPI peripheral is in use + * + * @param[in] obj The SPI peripheral to check + * @return Indication of whether the SPI is still transmitting + */ +bool cyhal_spi_is_busy(cyhal_spi_t *obj); + +/** Abort an SPI transfer + * + * @param[in] obj The SPI peripheral to stop + * @return The status of the abort_async request + */ +cy_rslt_t cyhal_spi_abort_async(cyhal_spi_t *obj); + +/** Register a SPI callback handler + * + * This function will be called when one of the events enabled by \ref cyhal_spi_enable_event occurs. + * + * @param[in] obj The SPI object + * @param[in] callback The callback handler which will be invoked when the interrupt fires + * @param[in] callback_arg Generic argument that will be provided to the callback when called + */ +void cyhal_spi_register_callback(cyhal_spi_t *obj, cyhal_spi_event_callback_t callback, void *callback_arg); + +/** Configure SPI interrupt. This function is used for word-approach + * + * When an enabled event occurs, the function specified by \ref cyhal_spi_register_callback will be called. + * + * @param[in] obj The SPI object + * @param[in] event The SPI event type + * @param[in] intr_priority The priority for NVIC interrupt events + * @param[in] enable True to turn on interrupts, False to turn off + */ +void cyhal_spi_enable_event(cyhal_spi_t *obj, cyhal_spi_event_t event, uint8_t intr_priority, bool enable); + +/******************************************************************************* +* Backward compatibility macro. The following code is DEPRECATED and must +* not be used in new projects +*******************************************************************************/ +/** \cond INTERNAL */ +typedef cyhal_spi_event_t cyhal_spi_irq_event_t; +/** \endcond */ + +#if defined(__cplusplus) +} +#endif + +#ifdef CYHAL_SPI_IMPL_HEADER +#include CYHAL_SPI_IMPL_HEADER +#endif /* CYHAL_SPI_IMPL_HEADER */ + +/** \} group_hal_spi */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_syslib.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_syslib.h new file mode 100644 index 000000000..7671d853c --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_syslib.h @@ -0,0 +1,592 @@ +/***************************************************************************//** +* \file cy_syslib.h +* \version 2.40.1 +* +* Provides an API declaration of the SysLib driver. +* +******************************************************************************** +* \copyright +* Copyright 2016-2019 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/** +* \addtogroup group_syslib +* \{ +* The system libraries provide APIs that can be called in the user application +* to handle the timing, logical checking or register. +* +* The functions and other declarations used in this driver are in cy_syslib.h. +* You can include cy_pdl.h (ModusToolbox only) to get access to all functions +* and declarations in the PDL. +* +* The SysLib driver contains a set of different system functions. These functions +* can be called in the application routine. Major features of the system library: +* * Delay functions +* * The register Read/Write macro +* * Assert and Halt +* * Assert Classes and Levels +* * A software reset +* * Reading the reset cause +* * An API to invalidate the flash cache and buffer +* * Data manipulation macro +* * A variable type definition from MISRA-C which specifies signedness +* * Cross compiler compatible attributes +* * Getting a silicon-unique ID API +* * Setting wait states API +* * Resetting the backup domain API +* * APIs to serve Fault handler +* +* \section group_syslib_configuration Configuration Considerations +* Assertion Usage
+* Use the CY_ASSERT() macro to check expressions that must be true as long as the +* program is running correctly. It is a convenient way to insert sanity checks. +* The CY_ASSERT() macro is defined in the cy_syslib.h file which is part of +* the PDL library. The behavior of the macro is as follows: if the expression +* passed to the macro is false, output an error message that includes the file +* name and line number, and then halts the CPU. \n +* In case of fault, the CY_ASSERT() macro calls the Cy_SysLib_AssertFailed() function. +* This is a weakly linked function. The default implementation stores the file +* name and line number of the ASSERT into global variables, cy_assertFileName +* and cy_assertLine . It then calls the Cy_SysLib_Halt() function. +* \note Firmware can redefine the Cy_SysLib_AssertFailed() function for custom processing. +* +* The PDL source code uses this assert mechanism extensively. It is recommended +* that you enable asserts when debugging firmware. \n +* Assertion Classes and Levels
+* The PDL defines three assert classes, which correspond to different kinds +* of parameters. There is a corresponding assert "level" for each class. +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +*
Class MacroLevel MacroType of check
CY_ASSERT_CLASS_1CY_ASSERT_L1A parameter that could change between different PSoC devices +* (e.g. the number of clock paths)
CY_ASSERT_CLASS_2CY_ASSERT_L2A parameter that has fixed limits such as a counter period
CY_ASSERT_CLASS_3CY_ASSERT_L3A parameter that is an enum constant
+* Firmware defines which ASSERT class is enabled by defining CY_ASSERT_LEVEL. +* This is a compiler command line argument, similar to how the DEBUG / NDEBUG +* macro is passed. \n +* Enabling any class also enables any lower-numbered class. +* CY_ASSERT_CLASS_3 is the default level, and it enables asserts for all three +* classes. The following example shows the command-line option to enable all +* the assert levels: +* \code -D CY_ASSERT_LEVEL=CY_ASSERT_CLASS_3 \endcode +* \note The use of special characters, such as spaces, parenthesis, etc. must +* be protected with quotes. +* +* After CY_ASSERT_LEVEL is defined, firmware can use +* one of the three level macros to make an assertion. For example, if the +* parameter can vary between devices, firmware uses the L1 macro. +* \code CY_ASSERT_L1(clkPath < SRSS_NUM_CLKPATH); \endcode +* If the parameter has bounds, firmware uses L2. +* \code CY_ASSERT_L2(trim <= CY_CTB_TRIM_VALUE_MAX); \endcode +* If the parameter is an enum, firmware uses L3. +* \code CY_ASSERT_L3(config->LossAction <= CY_SYSCLK_CSV_ERROR_FAULT_RESET); \endcode +* Each check uses the appropriate level macro for the kind of parameter being checked. +* If a particular assert class/level is not enabled, then the assert does nothing. +* +* \section group_syslib_more_information More Information +* Refer to the technical reference manual (TRM). +* +* \section group_syslib_MISRA MISRA-C Compliance +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +*
MISRA RuleRule Class (Required/Advisory)Rule DescriptionDescription of Deviation(s)
1.2RNo reliance shall be placed on undefined or unspecified behaviour.This specific behavior is explicitly covered in rule 20.1.
2.1RThis function contains a mixture of in-line assembler statements and C statements.This si required by design of the Cy_SysLib_Halt function.
18.4RUnions shall not be used.The unions are used for CFSR, HFSR and SHCSR Fault Status Registers +* content access as a word in code and as a structure during debug.
19.13AThe # and ## operators should not be used.The ## preprocessor operator is used in macros to form the field mask.
20.1RReserved identifiers, macros and functions in the standard library, shall not be +* defined, redefined or undefined.The driver defines the macros with leading underscores +* (_CLR_SET_FLD/_BOOL2FLD/_FLD2BOOL) and therefore generates this MISRA violation.
+* +* \section group_syslib_changelog Changelog +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +* +*
VersionChangesReason for Change
2.40.1Correct the CY_RAMFUNC_BEGIN macro for the IAR compiler.Removed the IAR compiler warning.
2.40Added new macros CY_SYSLIB_DIV_ROUND and CY_SYSLIB_DIV_ROUNDUP to easy perform integer division with rounding.Improve PDL code base.
2.30Updated implementation of the Cy_SysLib_AsmInfiniteLoop() function to be compatible with ARMC6.Provided support for the ARM Compiler 6.
Minor documentation edits.Documentation update and clarification.
Added new macros CY_RAMFUNC_BEGIN and CY_RAMFUNC_END for convenient placement function in RAM for all supported compilers.Improve user experience.
2.20Updated implementation of the \ref Cy_SysLib_AssertFailed() function to be available in Release and Debug modes.Provided support for the PDL static library in Release mode.
Minor documentation edits.Documentation update and clarification.
2.10Flattened the organization of the driver source code into the single source directory and the single include directory.Driver library directory-structure simplification.
Added the following macros: \ref CY_REG32_CLR_SET, \ref _CLR_SET_FLD16U, \ref CY_REG16_CLR_SET, \ref _CLR_SET_FLD8U, \ref CY_REG8_CLR_SETRegister access simplification.
Removed the Cy_SysLib_GetNumHfclkResetCause API function.This feature is not supported by SRSS_ver1.
Added register access layer. Use register access macros instead +* of direct register access using dereferenced pointers.Makes register access device-independent, so that the PDL does +* not need to be recompiled for each supported part number.
2.0.1Minor documentation editsDocumentation update and clarification
2.0 +* Added Cy_SysLib_ResetBackupDomain() API implementation. \n +* Added CY_NOINLINE attribute implementation. \n +* Added DIE_YEAR field to 64-bit unique ID return value of Cy_SysLib_GetUniqueId() API. \n +* Added storing of SCB->HFSR, SCB->SHCSR registers and SCB->MMFAR, SCB->BFAR addresses to Fault Handler debug structure. \n +* Optimized Cy_SysLib_SetWaitStates() API implementation. +* Improvements made based on usability feedback.
Added Assertion Classes and Levels.For error checking, parameter validation and status returns in the PDL API.
Applied CY_NOINIT attribute to cy_assertFileName, cy_assertLine, and cy_faultFrame global variables.To store debug information into a non-zero init area for future analysis.
Removed CY_WEAK attribute implementation.CMSIS __WEAK attribute should be used instead.
1.0Initial version
+* +* \defgroup group_syslib_macros Macros +* \defgroup group_syslib_functions Functions +* \defgroup group_syslib_data_structures Data Structures +* \defgroup group_syslib_enumerated_types Enumerated Types +* +*/ + +#if !defined(CY_SYSLIB_H) +#define CY_SYSLIB_H + +#include +#include + +/******************************************************************************* +* Data manipulation defines +*******************************************************************************/ + +/** Get the lower 8 bits of a 16-bit value. */ +#define CY_LO8(x) ((uint8_t) ((x) & 0xFFU)) +/** Get the upper 8 bits of a 16-bit value. */ +#define CY_HI8(x) ((uint8_t) ((uint16_t)(x) >> 8U)) + +/** Get the lower 16 bits of a 32-bit value. */ +#define CY_LO16(x) ((uint16_t) ((x) & 0xFFFFU)) +/** Get the upper 16 bits of a 32-bit value. */ +#define CY_HI16(x) ((uint16_t) ((uint32_t)(x) >> 16U)) + +/** Swap the byte ordering of a 16-bit value */ +#define CY_SWAP_ENDIAN16(x) ((uint16_t)(((x) << 8U) | (((x) >> 8U) & 0x00FFU))) + +/** Swap the byte ordering of a 32-bit value */ +#define CY_SWAP_ENDIAN32(x) ((uint32_t)((((x) >> 24U) & 0x000000FFU) | (((x) & 0x00FF0000U) >> 8U) | \ + (((x) & 0x0000FF00U) << 8U) | ((x) << 24U))) + +/** Swap the byte ordering of a 64-bit value */ +#define CY_SWAP_ENDIAN64(x) ((uint64_t) (((uint64_t) CY_SWAP_ENDIAN32((uint32_t)(x)) << 32U) | \ + CY_SWAP_ENDIAN32((uint32_t)((x) >> 32U)))) + +/* MISRA rule 6.3 recommends using specific-length typedef for the basic + * numerical types of signed and unsigned variants of char, float, and double. + */ +typedef char char_t; /**< Specific-length typedef for the basic numerical types of char */ +typedef float float32_t; /**< Specific-length typedef for the basic numerical types of float */ +typedef double float64_t; /**< Specific-length typedef for the basic numerical types of double */ + + +/******************************************************************************* +* Macro Name: CY_GET_REG8(addr) +****************************************************************************//** +* +* Reads the 8-bit value from the specified address. This function can't be +* used to access the Core register, otherwise a fault occurs. +* +* \param addr The register address. +* +* \return The read value. +* +*******************************************************************************/ +#define CY_GET_REG8(addr) (*((const volatile uint8_t *)(addr))) + + +/******************************************************************************* +* Macro Name: CY_SET_REG8(addr, value) +****************************************************************************//** +* +* Writes an 8-bit value to the specified address. This function can't be +* used to access the Core register, otherwise a fault occurs. +* +* \param addr The register address. +* +* \param value The value to write. +* +*******************************************************************************/ +#define CY_SET_REG8(addr, value) (*((volatile uint8_t *)(addr)) = (uint8_t)(value)) + + +/******************************************************************************* +* Macro Name: CY_GET_REG16(addr) +****************************************************************************//** +* +* Reads the 16-bit value from the specified address. +* +* \param addr The register address. +* +* \return The read value. +* +*******************************************************************************/ +#define CY_GET_REG16(addr) (*((const volatile uint16_t *)(addr))) + + +/******************************************************************************* +* Macro Name: CY_SET_REG16(addr, value) +****************************************************************************//** +* +* Writes the 16-bit value to the specified address. +* +* \param addr The register address. +* +* \param value The value to write. +* +*******************************************************************************/ +#define CY_SET_REG16(addr, value) (*((volatile uint16_t *)(addr)) = (uint16_t)(value)) + + +/******************************************************************************* +* Macro Name: CY_GET_REG24(addr) +****************************************************************************//** +* +* Reads the 24-bit value from the specified address. +* +* \param addr The register address. +* +* \return The read value. +* +*******************************************************************************/ +#define CY_GET_REG24(addr) (((uint32_t) (*((const volatile uint8_t *)(addr)))) | \ + (((uint32_t) (*((const volatile uint8_t *)(addr) + 1))) << 8U) | \ + (((uint32_t) (*((const volatile uint8_t *)(addr) + 2))) << 16U)) + + +/******************************************************************************* +* Macro Name: CY_SET_REG24(addr, value) +****************************************************************************//** +* +* Writes the 24-bit value to the specified address. +* +* \param addr The register address. +* +* \param value The value to write. +* +*******************************************************************************/ +#define CY_SET_REG24(addr, value) do \ + { \ + (*((volatile uint8_t *) (addr))) = (uint8_t)(value); \ + (*((volatile uint8_t *) (addr) + 1)) = (uint8_t)((value) >> 8U); \ + (*((volatile uint8_t *) (addr) + 2)) = (uint8_t)((value) >> 16U); \ + } \ + while(0) + + +/******************************************************************************* +* Macro Name: CY_GET_REG32(addr) +****************************************************************************//** +* +* Reads the 32-bit value from the specified register. The address is the little +* endian order (LSB in lowest address). +* +* \param addr The register address. +* +* \return The read value. +* +*******************************************************************************/ +#define CY_GET_REG32(addr) (*((const volatile uint32_t *)(addr))) + + +/******************************************************************************* +* Macro Name: CY_SET_REG32(addr, value) +****************************************************************************//** +* +* Writes the 32-bit value to the specified register. The address is the little +* endian order (LSB in lowest address). +* +* \param addr The register address. +* +* \param value The value to write. +* +*******************************************************************************/ +#define CY_SET_REG32(addr, value) (*((volatile uint32_t *)(addr)) = (uint32_t)(value)) + +/******************************************************************************* +* Macro Name: _CLR_SET_FLD32U +****************************************************************************//** +* +* The macro for setting a register with a name field and value for providing +* get-clear-modify-write operations. +* Returns a resulting value to be assigned to the register. +* +*******************************************************************************/ +#define _CLR_SET_FLD32U(reg, field, value) (((reg) & ((uint32_t)(~(field ## _Msk)))) | (_VAL2FLD(field, value))) + + +/******************************************************************************* +* Macro Name: CY_REG32_CLR_SET +****************************************************************************//** +* +* Uses _CLR_SET_FLD32U macro for providing get-clear-modify-write +* operations with a name field and value and writes a resulting value +* to the 32-bit register. +* +*******************************************************************************/ +#define CY_REG32_CLR_SET(reg, field, value) ((reg) = _CLR_SET_FLD32U((reg), field, (value))) + + +/******************************************************************************* +* Macro Name: _CLR_SET_FLD16U +****************************************************************************//** +* +* The macro for setting a 16-bit register with a name field and value for providing +* get-clear-modify-write operations. +* Returns a resulting value to be assigned to the 16-bit register. +* +*******************************************************************************/ +#define _CLR_SET_FLD16U(reg, field, value) ((uint16_t)(((reg) & ((uint16_t)(~(field ## _Msk)))) | \ + ((uint16_t)_VAL2FLD(field, value)))) + + +/******************************************************************************* +* Macro Name: CY_REG16_CLR_SET +****************************************************************************//** +* +* Uses _CLR_SET_FLD16U macro for providing get-clear-modify-write +* operations with a name field and value and writes a resulting value +* to the 16-bit register. +* +*******************************************************************************/ +#define CY_REG16_CLR_SET(reg, field, value) ((reg) = _CLR_SET_FLD16U((reg), field, (value))) + + +/******************************************************************************* +* Macro Name: _CLR_SET_FLD8U +****************************************************************************//** +* +* The macro for setting a 8-bit register with a name field and value for providing +* get-clear-modify-write operations. +* Returns a resulting value to be assigned to the 8-bit register. +* +*******************************************************************************/ +#define _CLR_SET_FLD8U(reg, field, value) ((uint8_t)(((reg) & ((uint8_t)(~(field ## _Msk)))) | \ + ((uint8_t)_VAL2FLD(field, value)))) + + +/******************************************************************************* +* Macro Name: CY_REG8_CLR_SET +****************************************************************************//** +* +* Uses _CLR_SET_FLD8U macro for providing get-clear-modify-write +* operations with a name field and value and writes a resulting value +* to the 8-bit register. +* +*******************************************************************************/ +#define CY_REG8_CLR_SET(reg, field, value) ((reg) = _CLR_SET_FLD8U((reg), field, (value))) + + +/******************************************************************************* +* Macro Name: _BOOL2FLD +****************************************************************************//** +* +* Returns a field mask if the value is not false. +* Returns 0, if the value is false. +* +*******************************************************************************/ +#define _BOOL2FLD(field, value) (((value) != false) ? (field ## _Msk) : 0UL) + + +/******************************************************************************* +* Macro Name: _FLD2BOOL +****************************************************************************//** +* +* Returns true, if the value includes the field mask. +* Returns false, if the value doesn't include the field mask. +* +*******************************************************************************/ +#define _FLD2BOOL(field, value) (((value) & (field ## _Msk)) != 0UL) + + +/******************************************************************************* +* Macro Name: CY_SYSLIB_DIV_ROUND +****************************************************************************//** +* +* Calculates a / b with rounding to the nearest integer, +* a and b must have the same sign. +* +*******************************************************************************/ +#define CY_SYSLIB_DIV_ROUND(a, b) (((a) + ((b) / 2U)) / (b)) + + +/******************************************************************************* +* Macro Name: CY_SYSLIB_DIV_ROUNDUP +****************************************************************************//** +* +* Calculates a / b with rounding up if remainder != 0, +* both a and b must be positive. +* +*******************************************************************************/ +#define CY_SYSLIB_DIV_ROUNDUP(a, b) ((((a) - 1U) / (b)) + 1U) + +typedef uint32_t cy_status; +/** The ARM 32-bit status value for backward compatibility with the UDB components. Do not use it in your code. */ +typedef uint32_t cystatus; +typedef uint8_t uint8; /**< Alias to uint8_t for backward compatibility */ +typedef uint16_t uint16; /**< Alias to uint16_t for backward compatibility */ +typedef uint32_t uint32; /**< Alias to uint32_t for backward compatibility */ +typedef int8_t int8; /**< Alias to int8_t for backward compatibility */ +typedef int16_t int16; /**< Alias to int16_t for backward compatibility */ +typedef int32_t int32; /**< Alias to int32_t for backward compatibility */ +typedef float float32; /**< Alias to float for backward compatibility */ +typedef double float64; /**< Alias to double for backward compatibility */ +typedef int64_t int64; /**< Alias to int64_t for backward compatibility */ +typedef uint64_t uint64; /**< Alias to uint64_t for backward compatibility */ +/* Signed or unsigned depending on the compiler selection */ +typedef char char8; /**< Alias to char for backward compatibility */ +typedef volatile uint8_t reg8; /**< Alias to uint8_t for backward compatibility */ +typedef volatile uint16_t reg16; /**< Alias to uint16_t for backward compatibility */ +typedef volatile uint32_t reg32; /**< Alias to uint32_t for backward compatibility */ + +/** The ARM 32-bit Return error / status code for backward compatibility. +* Do not use them in your code. +*/ +#define CY_RET_SUCCESS (0x00U) /* Successful */ +#define CY_RET_BAD_PARAM (0x01U) /* One or more invalid parameters */ +#define CY_RET_INVALID_OBJECT (0x02U) /* An invalid object specified */ +#define CY_RET_MEMORY (0x03U) /* A memory-related failure */ +#define CY_RET_LOCKED (0x04U) /* A resource lock failure */ +#define CY_RET_EMPTY (0x05U) /* No more objects available */ +#define CY_RET_BAD_DATA (0x06U) /* Bad data received (CRC or other error check) */ +#define CY_RET_STARTED (0x07U) /* Operation started, but not necessarily completed yet */ +#define CY_RET_FINISHED (0x08U) /* Operation is completed */ +#define CY_RET_CANCELED (0x09U) /* Operation is canceled */ +#define CY_RET_TIMEOUT (0x10U) /* Operation timed out */ +#define CY_RET_INVALID_STATE (0x11U) /* Operation is not setup or is in an improper state */ +#define CY_RET_UNKNOWN ((cy_status) 0xFFFFFFFFU) /* Unknown failure */ + +/** ARM 32-bit Return error / status codes for backward compatibility with the UDB components. +* Do not use them in your code. +*/ +#define CYRET_SUCCESS (0x00U) /* Successful */ +#define CYRET_BAD_PARAM (0x01U) /* One or more invalid parameters */ +#define CYRET_INVALID_OBJECT (0x02U) /* An invalid object specified */ +#define CYRET_MEMORY (0x03U) /* A memory-related failure */ +#define CYRET_LOCKED (0x04U) /* A resource lock failure */ +#define CYRET_EMPTY (0x05U) /* No more objects available */ +#define CYRET_BAD_DATA (0x06U) /* Bad data received (CRC or other error check) */ +#define CYRET_STARTED (0x07U) /* Operation started, but not necessarily completed yet */ +#define CYRET_FINISHED (0x08U) /* Operation is completed */ +#define CYRET_CANCELED (0x09U) /* Operation is canceled */ +#define CYRET_TIMEOUT (0x10U) /* Operation timed out */ +#define CYRET_INVALID_STATE (0x11U) /* Operation is not setup or is in an improper state */ +#define CYRET_UNKNOWN ((cystatus) 0xFFFFFFFFU) /* Unknown failure */ + +/** \} group_syslib_functions */ + +#endif /* CY_SYSLIB_H */ + +/** \} group_syslib */ + +/* [] END OF FILE */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_utils.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_utils.h new file mode 100644 index 000000000..db8c143f3 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_utils.h @@ -0,0 +1,81 @@ +/***************************************************************************//** +* \file cy_utils.h +* +* \brief +* Basic utility macros and functions. +* +******************************************************************************** +* \copyright +* Copyright 2018-2019 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/** +* \addtogroup group_utils Utilities +* \ingroup group_abstraction +* \{ +* Basic utility macros and functions. +* +* \defgroup group_utils_macros Macros +*/ + +#pragma once + +#include "stdint.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +/** +* \addtogroup group_utils_macros +* \{ +*/ + +/** Simple macro to supress the unused parameter warning by casting to void. */ +#define CY_UNUSED_PARAMETER(x) ( (void)(x) ) + +/** Halt the processor in the debug state + * @return + */ +static inline uint32_t CY_HALT() +{ + __asm(" bkpt 1"); + return 0; +} + +#ifdef CY_ASSERT +#undef CY_ASSERT +#endif /* ifdef(CY_ASSERT) */ + +/** Utility macro when neither NDEBUG or CY_NO_ASSERT is not declared to check a condition and, if false, trigger a breakpoint */ +#if defined(NDEBUG) || defined(CY_NO_ASSERT) + #define CY_ASSERT(x) CY_UNUSED_PARAMETER(x) +#else + #define CY_ASSERT(x) do { \ + if(!(x)) \ + { \ + CY_HALT(); \ + } \ + } while(0) +#endif /* defined(NDEBUG) */ + +/** \} group_utils_macros */ + +#ifdef __cplusplus +} +#endif + +/** \} group_utils */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cybsp.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cybsp.h new file mode 100644 index 000000000..06226f327 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cybsp.h @@ -0,0 +1,50 @@ +/***************************************************************************//** +* \file cybsp.h +* +* \brief +* Basic API for setting up boards containing a Cypress MCU. +* +******************************************************************************** +* \copyright +* Copyright 2018-2020 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +#pragma once + +#include "cy_result.h" +#include "cyhal_sdio.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +/** +* \addtogroup group_bsp_functions Functions +* \{ +*/ + +/** + * \brief Get the initialized sdio object used for communicating with the WiFi Chip. + * \note This function should only be called after cybsp_init(); + * \returns The initialized sdio object. + */ +cyhal_sdio_t* cybsp_get_wifi_sdio_obj(void); + +/** \} group_bsp_functions */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cycfg.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cycfg.h new file mode 100644 index 000000000..7a3dee0ca --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cycfg.h @@ -0,0 +1,20 @@ +/* + * Copyright 2020 Arduino SA + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file + * Empty file to be compliant with Cypress COMPONENT_WHD + */ \ No newline at end of file diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal.h new file mode 100644 index 000000000..e56be0e01 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal.h @@ -0,0 +1,52 @@ +/* + * Copyright 2020 Arduino SA + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file + * Provides cyhal porting to generic mbed APIs + */ +#include "whd_config.h" +#include "cyhal_hw_types.h" +#include "cyhal_gpio.h" +#include "cyhal_sdio.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef enum +{ + CYBSP_WIFI_WL_REG_ON, + CYBSP_WIFI_32K_CLK, + CYBSP_LED1, + CYBSP_LED2, + CYBSP_WIFI_SDIO_CMD, + CYBSP_WIFI_SDIO_CLK, + CYBSP_WIFI_SDIO_D0, + CYBSP_WIFI_SDIO_D1, + CYBSP_WIFI_SDIO_D2, + CYBSP_WIFI_SDIO_D3, + CYBSP_SDIO_OOB_IRQ, + CYBSP_WIFI_MAX, +} wwd_sdio_pin_t; + +void cyhal_system_delay_ms(uint32_t milliseconds); +cy_rslt_t sdio_enable_high_speed(void); + +#if defined(__cplusplus) +} +#endif + diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_hw_types.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_hw_types.h new file mode 100644 index 000000000..1f872abb3 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_hw_types.h @@ -0,0 +1,112 @@ +/***************************************************************************//** +* \file cyhal_hw_types_template.h +* +* \brief +* Provides a template for configuration resources used by the HAL. Items +* here need to be implemented for each HAL port. It is up to the environment +* being ported into what the actual types are. There are some suggestions below +* but these are not required. All that is required is that the type is defined; +* it does not matter to the HAL what type is actually chosen for the +* implementation +* All TODOs and references to 'PORT' need to be replaced by with meaningful +* values for the device being supported. +* +******************************************************************************** +* \copyright +* Copyright 2018-2019 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/** + * \addtogroup group_hal_hw_types PORT Hardware Types + * \ingroup group_hal_PORT + * \{ + * Struct definitions for configuration resources in the PORT. + * + * \defgroup group_hal_hw_types_data_structures Data Structures + */ + +#pragma once +#include +#include "stm32h7xx_hal.h" +#include "PinNames.h" + +/* + #include "TODO: Port specific header file" + */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef CYHAL_ISR_PRIORITY_DEFAULT +/** Priority that is applied by default to all drivers when initalized. Priorities can be + * overridden on each driver as part of enabling events. + */ +#define CYHAL_ISR_PRIORITY_DEFAULT (7) +#endif + +/** + * \addtogroup group_hal_hw_types_data_structures + * \{ + */ + +typedef int32_t cyhal_gpio_t; + +/** GPIO object */ +typedef struct +{ + GPIO_TypeDef *port; + GPIO_InitTypeDef config; +} pinconfig_t; + +/** Clock divider object */ +typedef struct +{ + /* TODO: replace with port specific items */ + void *div_type; +} cyhal_clock_divider_t; + +/** Clock object */ +typedef struct +{ + //For backwards compatibility with cyhal_clock_divider_t only. Do not use going forward. + int div_type; /*!< Deprecated */ + uint8_t div_num; /*!< Deprecated */ + //End BWC items + int block; + uint8_t channel; + bool reserved; +} cyhal_clock_t; + +/** SDIO object */ +typedef void* *cyhal_sdio_t; + +/** SPI object */ +typedef struct +{ + /* TODO: replace with port specific items */ + void *empty; +} cyhal_spi_t; + +#include "whd_config.h" +#include "whd_debug.h" + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/** \} group_hal_hw_types */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_system.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_system.h new file mode 100644 index 000000000..7a3dee0ca --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_system.h @@ -0,0 +1,20 @@ +/* + * Copyright 2020 Arduino SA + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file + * Empty file to be compliant with Cypress COMPONENT_WHD + */ \ No newline at end of file diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_bd.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_bd.h new file mode 100644 index 000000000..578b2d9e4 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_bd.h @@ -0,0 +1,49 @@ +/* + * Copyright 2020 Arduino SA + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file + * Provides wiced fs porting to generic mbed APIs + */ + +#pragma once + +#include "whd_config.h" +#include "BlockDevice.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************** + * Type Definitions + ******************************************************/ + +/** + * Mount the physical device + * + * This assumes that the device is ready to read/write immediately. + * + * @param[in] device - physical media to init + * @param[out] fs_handle_out - Receives the filesystem handle. + * + * @return WICED_SUCCESS on success + */ +wiced_result_t wiced_filesystem_mount(mbed::BlockDevice *device, wiced_filesystem_handle_type_t fs_type, wiced_filesystem_t *fs_handle_out, const char *mounted_name); + +#ifdef __cplusplus +} /*extern "C" */ +#endif diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.h new file mode 100644 index 000000000..77d49d182 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.h @@ -0,0 +1,148 @@ +/* + * Copyright 2020 Arduino SA + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file + * Provides wiced fs porting to generic mbed APIs + */ + +#pragma once + +#include "whd_config.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/****************************************************** + * Enumerations + ******************************************************/ + +typedef enum { + WICED_FILESYSTEM_OPEN_FOR_READ, /** Specifies read access to the object. Data can be read from the file - equivalent to "r" or "rb" */ + WICED_FILESYSTEM_OPEN_FOR_WRITE, /** Specifies read/write access to the object. Data can be written to the file - equivalent to "r+" or "rb+" or "r+b" */ + WICED_FILESYSTEM_OPEN_WRITE_CREATE, /** Opens for read/write access, creates it if it doesn't exist */ + WICED_FILESYSTEM_OPEN_ZERO_LENGTH, /** Opens for read/write access, Truncates file to zero length if it exists, or creates it if it doesn't - equivalent to "w+", "wb+" or "w+b" */ + WICED_FILESYSTEM_OPEN_APPEND, /** Opens for read/write access, places the current location at the end of the file ready for appending - equivalent to "a", "ab" */ + WICED_FILESYSTEM_OPEN_APPEND_CREATE, /** Opens for read/write access, creates it if it doesn't exist, and places the current location at the end of the file ready for appending - equivalent to "a+", "ab+" or "a+b" */ +} wiced_filesystem_open_mode_t; + +typedef enum { + WICED_FILESYSTEM_SEEK_SET = SEEK_SET, /* Offset from start of file */ + WICED_FILESYSTEM_SEEK_CUR = SEEK_CUR, /* Offset from current position in file */ + WICED_FILESYSTEM_SEEK_END = SEEK_END, /* Offset from end of file */ +} wiced_filesystem_seek_type_t; + +typedef enum { + WICED_SUCCESS = 0, + WICED_ERROR = 1 +} wiced_result_t; + +/****************************************************** + * Type Definitions + ******************************************************/ + +/** + * File-system Handle Structure + */ +typedef int wiced_filesystem_t; + +/** + * File Handle Structure + * + */ +typedef int wiced_file_t; + +/** + * File-system type Handle Structure + */ +typedef int wiced_filesystem_handle_type_t; + +/** + * Initialise the BlockDevice and filesystem module + * + * Initialises the BlockDevice and filesystem module before mounting a physical device. + * + * @return WICED_SUCCESS on success + */ +wiced_result_t wiced_filesystem_init(void); + +/** + * Mount the physical device using default parameters + * + * This assumes that the device is ready to read/write immediately. + * + * @return WICED_SUCCESS on success + */ +wiced_result_t wiced_filesystem_mount_default(void); + +/** + * Open a file for reading or writing + * + * @param[in] fs_handle - The filesystem handle to use - obtained from wiced_filesystem_mount + * @param[out] file_handle_out - a pointer to a wiced_file_t structure which will receive the + * file handle after it is opened + * @param[in] filename - The filename of the file to open + * @param[in] mode - Specifies read or write access + * + * @return WICED_SUCCESS on success + */ +wiced_result_t wiced_filesystem_file_open(wiced_filesystem_t *fs_handle, wiced_file_t *file_handle_out, const char *filename, wiced_filesystem_open_mode_t mode); + +/** + * Seek to a location within a file + * + * This is similar to the fseek() in ISO C. + * + * @param[in] file_handle - The file handle on which to perform the seek. + * Must have been previously opened with wiced_filesystem_fopen. + * @param[in] offset - The offset in bytes + * @param[in] whence - WICED_FILESYSTEM_SEEK_SET = Offset from start of file + * WICED_FILESYSTEM_SEEK_CUR = Offset from current position in file + * WICED_FILESYSTEM_SEEK_END = Offset from end of file + * + * @return WICED_SUCCESS on success + */ +wiced_result_t wiced_filesystem_file_seek(wiced_file_t *file_handle, int64_t offset, wiced_filesystem_seek_type_t whence); + +/** + * Reads data from a file into a memory buffer + * + * @param[in] file_handle - the file handle to read from + * @param[out] data - A pointer to the memory buffer that will + * receive the data that is read + * @param[in] bytes_to_read - the number of bytes to read + * @param[out] returned_item_count - the number of items successfully read. + * + * @return WICED_SUCCESS on success + */ +wiced_result_t wiced_filesystem_file_read(wiced_file_t *file_handle, void *data, uint64_t bytes_to_read, uint64_t *returned_bytes_count); + +/** + * Close a file + * + * This is similar to the fclose() in ISO C. + * + * @param[in] file_handle - the file handle to close + * + * @return WICED_SUCCESS = success + */ +wiced_result_t wiced_filesystem_file_close(wiced_file_t *file_handle); + +#ifdef __cplusplus +} /*extern "C" */ +#endif diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h new file mode 100644 index 000000000..01bad9226 --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Automatically generated file - this comment ensures resources.h file creation */ +/* Auto-generated header file. Do not edit */ +#ifndef INCLUDED_RESOURCES_H_ +#define INCLUDED_RESOURCES_H_ +#include "wiced_resource.h" +#include "wiced_filesystem.h" + +extern wiced_filesystem_t resource_fs_handle; + +extern const resource_hnd_t wifi_firmware_image; +extern const unsigned char wifi_firmware_image_data[421098]; +extern const resource_hnd_t wifi_firmware_clm_blob; +extern const unsigned char wifi_firmware_clm_blob_image_data[7222]; + +#endif /* ifndef INCLUDED_RESOURCES_H_ */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h new file mode 100644 index 000000000..3f2279c2b --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file + * NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using + * Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019 + * # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity + */ + +#ifndef INCLUDED_NVRAM_IMAGE_H_ +#define INCLUDED_NVRAM_IMAGE_H_ + +#include +#include +#include "generated_mac_address.txt" + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Character array of NVRAM image + * + * Generated from cyw94343cy8ckit-062-wifi-bt.txt + */ + +static const char wifi_nvram_image[] = + "manfid=0x2d0" "\x00" + "prodid=0x0726" "\x00" + "vendid=0x14e4" "\x00" + "devid=0x43e2" "\x00" + "boardtype=0x0726" "\x00" + "boardrev=0x1202" "\x00" + "boardnum=22" "\x00" + NVRAM_GENERATED_MAC_ADDRESS "\x00" + "sromrev=11" "\x00" + "boardflags=0x00404201" "\x00" + "boardflags3=0x04000000" "\x00" + "xtalfreq=37400" "\x00" + "nocrc=1" "\x00" + "ag0=0" "\x00" + "aa2g=1" "\x00" + "ccode=ALL" "\x00" + "extpagain2g=0" "\x00" + "pa2ga0=-145,6667,-751" "\x00" + "AvVmid_c0=0x0,0xc8" "\x00" + "cckpwroffset0=2" "\x00" + "maxp2ga0=74" "\x00" + "cckbw202gpo=0" "\x00" + "legofdmbw202gpo=0x88888888" "\x00" + "mcsbw202gpo=0xaaaaaaaa" "\x00" + "propbw202gpo=0xdd" "\x00" + "ofdmdigfilttype=18" "\x00" + "ofdmdigfilttypebe=18" "\x00" + "papdmode=1" "\x00" + "papdvalidtest=1" "\x00" + "pacalidx2g=48" "\x00" + "papdepsoffset=-22" "\x00" + "papdendidx=58" "\x00" + "il0"NVRAM_GENERATED_MAC_ADDRESS "\x00" + "wl0id=0x431b" "\x00" + "muxenab=0x10" "\x00" + "\x00\x00"; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */ + +#error Wi-Fi NVRAM image included twice + +#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */ diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/whd_config.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/whd_config.h new file mode 100644 index 000000000..4b320b9de --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/whd_config.h @@ -0,0 +1,61 @@ +/* + * Copyright 2020 Arduino SA + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file + * Provides configuration for WHD driver on Arduino Portenta H7 + */ + +#ifndef __WHD_CONFIG__ +#define __WHD_CONFIG__ + +#include "whd_types.h" +#include "stm32h7xx_hal.h" +#include + +/* disable WPRINT_MACRO */ +#define WHD_PRINT_DISABLE + +/* please define your configuration , either SDIO or SPI */ +#define CY_WHD_CONFIG_USE_SDIO +//#define CY_WHD_CONFIG_USE_SPI + +/* select resource implementation */ +#define USES_RESOURCE_GENERIC_FILESYSTEM + +/* if not defined default value is 2 */ +#define CY_WIFI_OOB_INTR_PRIORITY 0 + +#define CYBSP_WIFI_HOST_WAKE_IRQ_EVENT CYHAL_GPIO_IRQ_FALL +#define CYBSP_WIFI_HOST_WAKE CYBSP_SDIO_OOB_IRQ + +#define BSP_LED1 {GPIOK,{.Pin= GPIO_PIN_5 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} +#define BSP_LED2 {GPIOK,{.Pin= GPIO_PIN_6 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} +#define BSP_LED3 {GPIOK,{.Pin= GPIO_PIN_7 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} + +/* power pin */ +#define WIFI_WL_REG_ON {GPIOB,{.Pin= GPIO_PIN_10, .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} +//#define WIFI_32K_CLK {GPIOA,{.Pin= GPIO_PIN_8, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW , .Alternate = GPIO_AF0_MCO}} + +#define WIFI_SDIO_CMD {GPIOD,{.Pin= GPIO_PIN_2 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} +#define WIFI_SDIO_CLK {GPIOC,{.Pin= GPIO_PIN_12 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} +#define WIFI_SDIO_D0 {GPIOC,{.Pin= GPIO_PIN_8, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} +#define WIFI_SDIO_D1 {GPIOC,{.Pin= GPIO_PIN_9, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} +#define WIFI_SDIO_D2 {GPIOC,{.Pin= GPIO_PIN_10, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} +#define WIFI_SDIO_D3 {GPIOC,{.Pin= GPIO_PIN_11 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} +#define WIFI_SDIO_OOB_IRQ {GPIOI,{.Pin= GPIO_PIN_8 , .Mode = GPIO_MODE_IT_FALLING , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH}} + +#endif diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h new file mode 100644 index 000000000..04a34504a --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h @@ -0,0 +1,356 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2018, STMicroelectronics + * Copyright (c) 2020, Arduino SA + * + * SPDX-License-Identifier: BSD-3-Clause + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ + +/* MBED TARGET LIST: GIGA */ + +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" +#include "PinNamesTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define DUAL_PAD 0x800 + +typedef enum { + ALT0 = 0x100, + ALT1 = 0x200, + ALT2 = 0x300, + ALT3 = 0x400, + ALT4 = 0x500, +} ALTx; + +typedef enum { + PA_0 = 0x00, + PA_0C = PA_0 | DUAL_PAD, // dual pad + PA_0C_ALT0 = PA_0C | ALT0, // same pin used for alternate HW + PA_0C_ALT1 = PA_0C | ALT1, // same pin used for alternate HW + PA_0C_ALT2 = PA_0C | ALT2, // same pin used for alternate HW + PA_1 = 0x01, + PA_1C = PA_1 | DUAL_PAD, // dual pad + PA_1C_ALT0 = PA_1C | ALT0, // same pin used for alternate HW + PA_1_ALT0 = PA_1 | ALT0, // same pin used for alternate HW + PA_2 = 0x02, + PA_2_ALT0 = PA_2 | ALT0, // same pin used for alternate HW + PA_3 = 0x03, + PA_3_ALT0 = PA_3 | ALT0, // same pin used for alternate HW + PA_4 = 0x04, + PA_4_ALT0 = PA_4 | ALT0, // same pin used for alternate HW + PA_4_ALT1 = PA_4 | ALT1, // same pin used for alternate HW + PA_5 = 0x05, + PA_5_ALT0 = PA_5 | ALT0, // same pin used for alternate HW + PA_5_ALT1 = PA_5 | ALT1, // same pin used for alternate HW + PA_5_ALT2 = PA_5 | ALT2, // same pin used for alternate HW + PA_6 = 0x06, + PA_6_ALT0 = PA_6 | ALT0, // same pin used for alternate HW + PA_7 = 0x07, + PA_7_ALT0 = PA_7 | ALT0, // same pin used for alternate HW + PA_7_ALT1 = PA_7 | ALT1, // same pin used for alternate HW + PA_7_ALT2 = PA_7 | ALT2, // same pin used for alternate HW + PA_8 = 0x08, + PA_9 = 0x09, + PA_9_ALT0 = PA_9 | ALT0, // same pin used for alternate HW + PA_10 = 0x0A, + PA_10_ALT0 = PA_10 | ALT0, // same pin used for alternate HW + PA_11 = 0x0B, + PA_11_ALT0 = PA_11 | ALT0, // same pin used for alternate HW + PA_12 = 0x0C, + PA_12_ALT0 = PA_12 | ALT0, // same pin used for alternate HW + PA_13 = 0x0D, + PA_14 = 0x0E, + PA_15 = 0x0F, + PA_15_ALT0 = PA_15 | ALT0, // same pin used for alternate HW + PA_15_ALT1 = PA_15 | ALT1, // same pin used for alternate HW + PB_0 = 0x10, + PB_0_ALT0 = PB_0 | ALT0, // same pin used for alternate HW + PB_0_ALT1 = PB_0 | ALT1, // same pin used for alternate HW + PB_0_ALT2 = PB_0 | ALT2, // same pin used for alternate HW + PB_1 = 0x11, + PB_1_ALT0 = PB_1 | ALT0, // same pin used for alternate HW + PB_1_ALT1 = PB_1 | ALT1, // same pin used for alternate HW + PB_2 = 0x12, + PB_3 = 0x13, + PB_3_ALT0 = PB_3 | ALT0, // same pin used for alternate HW + PB_3_ALT1 = PB_3 | ALT1, // same pin used for alternate HW + PB_4 = 0x14, + PB_4_ALT0 = PB_4 | ALT0, // same pin used for alternate HW + PB_4_ALT1 = PB_4 | ALT1, // same pin used for alternate HW + PB_5 = 0x15, + PB_5_ALT0 = PB_5 | ALT0, // same pin used for alternate HW + PB_5_ALT1 = PB_5 | ALT1, // same pin used for alternate HW + PB_6 = 0x16, + PB_6_ALT0 = PB_6 | ALT0, // same pin used for alternate HW + PB_6_ALT1 = PB_6 | ALT1, // same pin used for alternate HW + PB_7 = 0x17, + PB_7_ALT0 = PB_7 | ALT0, // same pin used for alternate HW + PB_8 = 0x18, + PB_8_ALT0 = PB_8 | ALT0, // same pin used for alternate HW + PB_9 = 0x19, + PB_9_ALT0 = PB_9 | ALT0, // same pin used for alternate HW + PB_10 = 0x1A, + PB_11 = 0x1B, + PB_12 = 0x1C, + PB_13 = 0x1D, + PB_14 = 0x1E, + PB_14_ALT0 = PB_14 | ALT0, // same pin used for alternate HW + PB_14_ALT1 = PB_14 | ALT1, // same pin used for alternate HW + PB_15 = 0x1F, + PB_15_ALT0 = PB_15 | ALT0, // same pin used for alternate HW + PB_15_ALT1 = PB_15 | ALT1, // same pin used for alternate HW + PC_0 = 0x20, + PC_0_ALT0 = PC_0 | ALT0, // same pin used for alternate HW + PC_0_ALT1 = PC_0 | ALT1, // same pin used for alternate HW + PC_1 = 0x21, + PC_1_ALT0 = PC_1 | ALT0, // same pin used for alternate HW + PC_1_ALT1 = PC_1 | ALT1, // same pin used for alternate HW + PC_1_ALT2 = PC_1 | ALT2, // same pin used for alternate HW + PC_1_ALT3 = PC_1 | ALT3, // same pin used for alternate HW + PC_1_ALT4 = PC_1 | ALT4, // same pin used for alternate HW + PC_2 = 0x22, + PC_2C = PC_2 | DUAL_PAD, // dual pad + PC_2C_ALT0 = PC_2C | ALT0, // same pin used for alternate HW + PC_2_ALT0 = PC_2 | ALT0, // same pin used for alternate HW + PC_2_ALT1 = PC_2 | ALT1, // same pin used for alternate HW + PC_2_ALT2 = PC_2 | ALT2, // same pin used for alternate HW + PC_2_ALT3 = PC_2 | ALT3, // same pin used for alternate HW + PC_2_ALT4 = PC_2 | ALT4, // same pin used for alternate HW + PC_3 = 0x23, + PC_3C = PC_3 | DUAL_PAD, // dual pad + PC_3_ALT0 = PC_3 | ALT0, // same pin used for alternate HW + PC_3_ALT1 = PC_3 | ALT1, // same pin used for alternate HW + PC_3_ALT2 = PC_3 | ALT2, // same pin used for alternate HW + PC_4 = 0x24, + PC_4_ALT0 = PC_4 | ALT0, // same pin used for alternate HW + PC_5 = 0x25, + PC_5_ALT0 = PC_5 | ALT0, // same pin used for alternate HW + PC_5_ALT1 = PC_5 | ALT1, // same pin used for alternate HW + PC_5_ALT2 = PC_5 | ALT2, // same pin used for alternate HW + PC_6 = 0x26, + PC_6_ALT0 = PC_6 | ALT0, // same pin used for alternate HW + PC_7 = 0x27, + PC_7_ALT0 = PC_7 | ALT0, // same pin used for alternate HW + PC_8 = 0x28, + PC_8_ALT0 = PC_8 | ALT0, // same pin used for alternate HW + PC_9 = 0x29, + PC_9_ALT0 = PC_9 | ALT0, // same pin used for alternate HW + PC_10 = 0x2A, + PC_10_ALT0 = PC_10 | ALT0, // same pin used for alternate HW + PC_11 = 0x2B, + PC_11_ALT0 = PC_11 | ALT0, // same pin used for alternate HW + PC_12 = 0x2C, + PC_13 = 0x2D, + PC_14 = 0x2E, + PC_15 = 0x2F, + PD_0 = 0x30, + PD_1 = 0x31, + PD_2 = 0x32, + PD_3 = 0x33, + PD_4 = 0x34, + PD_5 = 0x35, + PD_6 = 0x36, + PD_7 = 0x37, + PD_8 = 0x38, + PD_9 = 0x39, + PD_10 = 0x3A, + PD_11 = 0x3B, + PD_12 = 0x3C, + PD_13 = 0x3D, + PD_14 = 0x3E, + PD_15 = 0x3F, + PE_0 = 0x40, + PE_1 = 0x41, + PE_2 = 0x42, + PE_3 = 0x43, + PE_4 = 0x44, + PE_5 = 0x45, + PE_6 = 0x46, + PE_7 = 0x47, + PE_8 = 0x48, + PE_9 = 0x49, + PE_10 = 0x4A, + PE_11 = 0x4B, + PE_12 = 0x4C, + PE_13 = 0x4D, + PE_14 = 0x4E, + PE_15 = 0x4F, + PF_0 = 0x50, + PF_1 = 0x51, + PF_2 = 0x52, + PF_3 = 0x53, + PF_4 = 0x54, + PF_4_ALT0 = PF_4 | ALT0, // same pin used for alternate HW + PF_5 = 0x55, + PF_6 = 0x56, + PF_6_ALT0 = PF_6 | ALT0, // same pin used for alternate HW + PF_7 = 0x57, + PF_8 = 0x58, + PF_8_ALT0 = PF_8 | ALT0, // same pin used for alternate HW + PF_9 = 0x59, + PF_9_ALT0 = PF_9 | ALT0, // same pin used for alternate HW + PF_10 = 0x5A, + PF_10_ALT0 = PF_10 | ALT0, // same pin used for alternate HW + PF_11 = 0x5B, + PF_12 = 0x5C, + PF_12_ALT0 = PF_12 | ALT0, // same pin used for alternate HW + PF_13 = 0x5D, + PF_14 = 0x5E, + PF_14_ALT0 = PF_14 | ALT0, // same pin used for alternate HW + PF_15 = 0x5F, + PG_0 = 0x60, + PG_1 = 0x61, + PG_2 = 0x62, + PG_3 = 0x63, + PG_4 = 0x64, + PG_5 = 0x65, + PG_6 = 0x66, + PG_7 = 0x67, + PG_8 = 0x68, + PG_9 = 0x69, + PG_10 = 0x6A, + PG_11 = 0x6B, + PG_12 = 0x6C, + PG_13 = 0x6D, + PG_14 = 0x6E, + PG_15 = 0x6F, + PH_0 = 0x70, + PH_1 = 0x71, + PH_2 = 0x72, + PH_3 = 0x73, + PH_3_ALT0 = PH_3 | ALT0, // same pin used for alternate HW + PH_4 = 0x74, + PH_4_ALT0 = PH_4 | ALT0, // same pin used for alternate HW + PH_5 = 0x75, + PH_5_ALT0 = PH_5 | ALT0, // same pin used for alternate HW + PH_6 = 0x76, + PH_7 = 0x77, + PH_8 = 0x78, + PH_9 = 0x79, + PH_10 = 0x7A, + PH_11 = 0x7B, + PH_12 = 0x7C, + PH_13 = 0x7D, + PH_14 = 0x7E, + PH_15 = 0x7F, + PI_0 = 0x80, + PI_1 = 0x81, + PI_2 = 0x82, + PI_3 = 0x83, + PI_4 = 0x84, + PI_5 = 0x85, + PI_6 = 0x86, + PI_7 = 0x87, + PI_8 = 0x88, + PI_9 = 0x89, + PI_10 = 0x8A, + PI_11 = 0x8B, + PI_12 = 0x8C, + PI_13 = 0x8D, + PI_14 = 0x8E, + PI_15 = 0x8F, + PJ_0 = 0x90, + PJ_1 = 0x91, + PJ_2 = 0x92, + PJ_3 = 0x93, + PJ_4 = 0x94, + PJ_5 = 0x95, + PJ_6 = 0x96, + PJ_7 = 0x97, + PJ_8 = 0x98, + PJ_8_ALT0 = PJ_8 | ALT0, // same pin used for alternate HW + PJ_9 = 0x99, + PJ_9_ALT0 = PJ_9 | ALT0, // same pin used for alternate HW + PJ_10 = 0x9A, + PJ_10_ALT0 = PJ_10 | ALT0, // same pin used for alternate HW + PJ_11 = 0x9B, + PJ_11_ALT0 = PJ_11 | ALT0, // same pin used for alternate HW + PJ_12 = 0x9C, + PJ_13 = 0x9D, + PJ_14 = 0x9E, + PJ_15 = 0x9F, + PK_0 = 0xA0, + PK_0_ALT0 = PK_0 | ALT0, // same pin used for alternate HW + PK_1 = 0xA1, + PK_1_ALT0 = PK_1 | ALT0, // same pin used for alternate HW + PK_2 = 0xA2, + PK_3 = 0xA3, + PK_4 = 0xA4, + PK_5 = 0xA5, + PK_6 = 0xA6, + PK_7 = 0xA7, + + ADC_TEMP = 0xF0, // Internal pin virtual value + ADC_VREF = 0xF1, // Internal pin virtual value + ADC_VBAT = 0xF2, // Internal pin virtual value + + // Not connected + NC = (int)0xFFFFFFFF, + + CONSOLE_TX = NC, + CONSOLE_RX = NC, + + WL_REG_ON = NC, + WL_HOST_WAKE = NC, + WL_SDIO_0 = NC, + WL_SDIO_1 = NC, + WL_SDIO_2 = NC, + WL_SDIO_3 = NC, + WL_SDIO_CMD = NC, + WL_SDIO_CLK = NC, + + CYBSP_BT_UART_RX = NC, + CYBSP_BT_UART_TX = NC, + CYBSP_BT_UART_RTS = NC, + CYBSP_BT_UART_CTS = NC, + + CYBSP_BT_POWER = NC, + CYBSP_BT_HOST_WAKE = NC, + CYBSP_BT_DEVICE_WAKE = NC, + + /**** QSPI FLASH pins ****/ + QSPI_FLASH1_IO0 = NC, + QSPI_FLASH1_IO1 = NC, + QSPI_FLASH1_IO2 = NC, + QSPI_FLASH1_IO3 = NC, + QSPI_FLASH1_SCK = NC, + QSPI_FLASH1_CSN = NC + +} PinName; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h index e5463fe09..f7314dbac 100644 --- a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h @@ -43,7 +43,7 @@ extern "C" { #endif -#define DUAL_PAD 0xF00 +#define DUAL_PAD 0x800 typedef enum { ALT0 = 0x100, diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h index 9f14a66d6..42d24cd79 100644 --- a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h @@ -467,6 +467,11 @@ typedef enum { NC = (int)0xFFFFFFFF } PinName; +// Standardized LED and button names +#define LED1 LED_RED +#define LED2 LED_GREEN +#define LED3 LED_BLUE + #ifdef __cplusplus } #endif diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h index 93baf9ee1..efe0f63b2 100644 --- a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h @@ -43,7 +43,7 @@ extern "C" { #endif -#define DUAL_PAD 0xF00 +#define DUAL_PAD 0x800 typedef enum { ALT0 = 0x100, diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h index 585fb0ea8..0c088c81e 100644 --- a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h @@ -43,7 +43,7 @@ extern "C" { #endif -#define DUAL_PAD 0xF00 +#define DUAL_PAD 0x800 typedef enum { ALT0 = 0x100, diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h index 1cce05b2e..96f611cde 100644 --- a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h @@ -43,7 +43,7 @@ extern "C" { #endif -#define DUAL_PAD 0xF00 +#define DUAL_PAD 0x800 typedef enum { ALT0 = 0x100, diff --git a/cores/arduino/pinDefinitions.h b/cores/arduino/pinDefinitions.h index 7df17a804..ebb36131d 100644 --- a/cores/arduino/pinDefinitions.h +++ b/cores/arduino/pinDefinitions.h @@ -1,3 +1,6 @@ +#ifndef PIN_DEFINITIONS_H +#define PIN_DEFINITIONS_H + #ifdef USE_ARDUINO_PINOUT #include "drivers/InterruptIn.h" @@ -36,4 +39,6 @@ PinName digitalPinToPinName(pin_size_t P); int PinNameToIndex(PinName P); -#endif \ No newline at end of file +#endif // USE_ARDUINO_PINOUT + +#endif // PIN_DEFINITIONS_H \ No newline at end of file diff --git a/debugger/select_hla.cfg b/debugger/select_hla.cfg new file mode 100644 index 000000000..fafd55d14 --- /dev/null +++ b/debugger/select_hla.cfg @@ -0,0 +1 @@ +transport select hla_swd \ No newline at end of file diff --git a/debugger/select_swd.cfg b/debugger/select_swd.cfg new file mode 100644 index 000000000..a5edd260b --- /dev/null +++ b/debugger/select_swd.cfg @@ -0,0 +1 @@ +transport select swd \ No newline at end of file diff --git a/edge.variables b/edge.variables index 8f43ae029..05e810b14 100644 --- a/edge.variables +++ b/edge.variables @@ -1,5 +1,5 @@ export FLAVOUR="edge" export VARIANTS=("EDGE_CONTROL") export FQBNS=("edge_control") -export LIBRARIES=("PDM SPI Wire MRI USBHID USBMSD ThreadDebug Scheduler") +export LIBRARIES=("SocketWrapper GSM GPS SPI Wire MRI USBHID USBMSD ThreadDebug Scheduler") export BOOTLOADERS=("EDGE_CONTROL") diff --git a/giga.variables b/giga.variables index 83045721f..63eb5981c 100644 --- a/giga.variables +++ b/giga.variables @@ -1,5 +1,5 @@ export FLAVOUR="giga" -export VARIANTS=("GIGA PORTENTA_H7_M4") +export VARIANTS=("GIGA GENERIC_STM32H747_M4") export FQBNS=("giga") -export LIBRARIES=("MRI Portenta_SDRAM SPI WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug Himax_HM01B0 PDM Arduino_H7_Video USBAudio KernelDebug Portenta_Audio RPC USBHID Wire Portenta_lvgl Camera rpclib OV7670 mbed-memory-status Scheduler USBMSD USBMIDI SocketWrapper MCUboot Arduino_CAN") +export LIBRARIES=("MRI Portenta_SDRAM SPI WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug Himax_HM01B0 PDM Arduino_H7_Video USBAudio KernelDebug Portenta_Audio RPC USBHID Wire Portenta_lvgl Camera rpclib OV7670 GC2145 mbed-memory-status Scheduler USBMSD USBMIDI SocketWrapper MCUboot Arduino_CAN") export BOOTLOADERS=("GIGA") diff --git a/libraries/Arduino_CAN/src/Arduino_CAN.cpp b/libraries/Arduino_CAN/src/Arduino_CAN.cpp index de74c22c5..30690e83f 100644 --- a/libraries/Arduino_CAN/src/Arduino_CAN.cpp +++ b/libraries/Arduino_CAN/src/Arduino_CAN.cpp @@ -57,7 +57,10 @@ int Arduino_CAN::write(CanMsg const & msg) CANData, is_standard_id ? CANStandard : CANExtended); - return _can.write(can_msg); + int const rc = _can.write(can_msg); + if (rc == 0) /* mbed returns 0 in case of failed CAN::write(). */ + return -1; /* Note: provide named constant in ArduinoCore-API/HardwareCAN.h, i.e. CAN_WRITE_GENERIC_ERROR */ + return 1; } size_t Arduino_CAN::available() diff --git a/libraries/Arduino_CAN/src/Arduino_CAN.h b/libraries/Arduino_CAN/src/Arduino_CAN.h index 095fc89db..649ae6f22 100644 --- a/libraries/Arduino_CAN/src/Arduino_CAN.h +++ b/libraries/Arduino_CAN/src/Arduino_CAN.h @@ -24,7 +24,7 @@ * COMPILE TIME CHECKS **************************************************************************************/ -#if !(defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4) || defined(ARDUINO_GIGA)) +#if !(defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_GIGA) || defined(CORE_CM4)) # error "CAN only available on Arduino Portenta H7 and Arduino Giga (of all ArduinoCore-mbed enabled boards)." #endif diff --git a/libraries/Arduino_H7_Video/docs/README.md b/libraries/Arduino_H7_Video/docs/README.md index 54e894a08..a8da54c49 100644 --- a/libraries/Arduino_H7_Video/docs/README.md +++ b/libraries/Arduino_H7_Video/docs/README.md @@ -46,6 +46,18 @@ void loop() { } - **[ArduinoLogo](../examples/ArduinoLogo):** This example demonstrates how to display an Arduino logo image on the screen. - **[ArduinoLogoDrawing](../examples/ArduinoLogoDrawing):** This example demonstrates how to draw an Arduino logo image using graphics primitives (line, circle, rect, etc.). - **[LVGLDemo](../examples/LVGLDemo):** This example demonstrates how to create a graphical user interface (GUI) using the LVGL library. It includes the [Arduino_GigaDisplayTouch](https://github.com/arduino-libraries/Arduino_GigaDisplayTouch/) library to handle touch events. +- **[emWinDemo](../examples/emWinDemo):** This example demonstrates how to create a graphical user interface (GUI) using the SEGGER emWin library. It includes the [emWin-Arduino-Library](https://github.com/SEGGERMicro/emWin-Arduino-Library) library. + +## Guides + +To learn more about usage of this library, you can check out the following guides: +- [GIGA Display Shield LVGL Guide](https://docs.arduino.cc/tutorials/giga-display-shield/lvgl-guide). +- [GIGA Display Shield Image Orientation Guide](https://docs.arduino.cc/tutorials/giga-display-shield/image-orientation) +- [GIGA Display Shield Image Draw Guide](https://docs.arduino.cc/tutorials/giga-display-shield/basic-draw-and-image) + + +You can also check out the following guide available in the Segger Wiki: +- using the SEGGER emWin library on the GIGA Display Shield, check out the [SEGGER emWin on Arduino Wiki](https://wiki.segger.com/emWin_on_Arduino). ## API diff --git a/libraries/Arduino_H7_Video/docs/api.md b/libraries/Arduino_H7_Video/docs/api.md index 356144b49..923393173 100644 --- a/libraries/Arduino_H7_Video/docs/api.md +++ b/libraries/Arduino_H7_Video/docs/api.md @@ -14,6 +14,7 @@ The main class for managing the video controller and the display. | `public ` [`Arduino_H7_Video`](#public-arduino_h7_videoint-width-int-height-h7displayshield-shield) | Construct a new Arduino_H7_Video object with the specified width, height, and display shield. | | `public int` [`begin`](#public-int-begin) | Initialize the video controller and display. | | `public void` [`end`](#public-void-end) | De-initialize the video controller and display. | +| `public bool` [`detect`](#public-bool-detect) | Checks if the display is connected. | | `public int` [`width`](#public-int-width) | Get the width of the display. | | `public int` [`height`](#public-int-height) | Get the height of the display. | | `public bool` [`isRotated`](#public-bool-isrotated) | Check if the display is rotated. | @@ -54,6 +55,15 @@ De-initialize the video controller and display. --- +### `public bool` [`detect`](#)`()` + +Checks if the display is connected. + +#### Returns +`bool`: True if the display is connected, False otherwis. + +--- + ### `public int` [`width`](#)`()` Get the width of the display. diff --git a/libraries/Arduino_H7_Video/examples/LVGLDemo/LVGLDemo.ino b/libraries/Arduino_H7_Video/examples/LVGLDemo/LVGLDemo.ino index 44b453e6c..385ead77c 100644 --- a/libraries/Arduino_H7_Video/examples/LVGLDemo/LVGLDemo.ino +++ b/libraries/Arduino_H7_Video/examples/LVGLDemo/LVGLDemo.ino @@ -17,7 +17,7 @@ Arduino_GigaDisplayTouch TouchDetector; /* Button click event callback */ static void btn_event_cb(lv_event_t * e) { static uint32_t cnt = 1; - lv_obj_t * btn = lv_event_get_target(e); + lv_obj_t * btn = (lv_obj_t *)lv_event_get_target(e); lv_obj_t * label = lv_obj_get_child(btn, 0); lv_label_set_text_fmt(label, "%"LV_PRIu32, cnt); cnt++; @@ -76,7 +76,11 @@ void setup() { lv_style_init(&style_radio); lv_style_set_radius(&style_radio, LV_RADIUS_CIRCLE); lv_style_init(&style_radio_chk); + #if (LVGL_VERSION_MAJOR == 9) + lv_style_set_bg_image_src(&style_radio_chk, NULL); + #else lv_style_set_bg_img_src(&style_radio_chk, NULL); + #endif cb = lv_checkbox_create(obj); lv_checkbox_set_text(cb, "Lemon"); diff --git a/libraries/Arduino_H7_Video/examples/LVGLDemo/img_arduinologo.c b/libraries/Arduino_H7_Video/examples/LVGLDemo/img_arduinologo.c index 244e45576..e938d7999 100644 --- a/libraries/Arduino_H7_Video/examples/LVGLDemo/img_arduinologo.c +++ b/libraries/Arduino_H7_Video/examples/LVGLDemo/img_arduinologo.c @@ -636,6 +636,15 @@ const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMG_ARDUI #endif }; +#if (LVGL_VERSION_MAJOR == 9) +const lv_img_dsc_t img_arduinologo = { + .header.cf = LV_COLOR_FORMAT_RGB565, + .header.w = 200, + .header.h = 150, + .data_size = 30000 * LV_COLOR_DEPTH / 8, + .data = img_arduinologo_map, +}; +#else const lv_img_dsc_t img_arduinologo = { .header.cf = LV_IMG_CF_TRUE_COLOR, .header.always_zero = 0, @@ -645,3 +654,4 @@ const lv_img_dsc_t img_arduinologo = { .data_size = 30000 * LV_COLOR_SIZE / 8, .data = img_arduinologo_map, }; +#endif \ No newline at end of file diff --git a/libraries/Arduino_H7_Video/examples/emWinDemo/emWinDemo.ino b/libraries/Arduino_H7_Video/examples/emWinDemo/emWinDemo.ino new file mode 100644 index 000000000..b5b933c84 --- /dev/null +++ b/libraries/Arduino_H7_Video/examples/emWinDemo/emWinDemo.ino @@ -0,0 +1,303 @@ +/* + emWinDemo + + created 04 Dec 2023 + by Leonardo Cavagnis +*/ + +#include "DIALOG.h" /* emWin library includes Arduino_H7_Video and Arduino_GigaDisplayTouch library */ + +/* +* Main window handler: It creates 4 window childs. +* Source: https://wiki.segger.com/WM_child_windows_(Sample) +*/ +static void _cbWin(WM_MESSAGE * pMsg) { + switch (pMsg->MsgId) { + case WM_CREATE: + /* [0, 0] - Image */ + WM_CreateWindowAsChild(20, 20, 370, 210, pMsg->hWin, WM_CF_SHOW, _cbChildWinImg, 0); + + /* [1, 0] - Slider */ + WM_CreateWindowAsChild(20, 210+20*2, 370, 210, pMsg->hWin, WM_CF_SHOW, _cbChildWinSlider, 0); + + /* [0, 1] - Checkbox, button and labels */ + WM_CreateWindowAsChild(370+20*2, 20, 370, 210, pMsg->hWin, WM_CF_SHOW, _cbChildWinChkBtn, 0); + + /* [1, 1] - Progress bar */ + WM_CreateWindowAsChild(370+20*2, 210+20*2, 370, 210, pMsg->hWin, WM_CF_SHOW, _cbChildWinPgrBar, 0); + break; + case WM_PAINT: + GUI_SetBkColor(0x03989e); /* Background color set to: R(0x03),G(0x98),B(0x9E) */ + GUI_Clear(); + break; + default: + WM_DefaultProc(pMsg); + break; + } +} + +/* +* Image window handler +* To convert image use "Bitmap Converter for emWin" +* https://www.segger.com/products/user-interface/emwin/tools/tools-overview/ +*/ +extern GUI_CONST_STORAGE GUI_BITMAP bmarduinologo; /* Image bitmap structure (see img_arduinologo_emwin.c in attach) */ + +static void _cbChildWinImg(WM_MESSAGE * pMsg) { + switch (pMsg->MsgId) { + case WM_CREATE: + break; + case WM_PAINT: + GUI_SetBkColor(GUI_WHITE); + GUI_Clear(); + /* Draw image */ + GUI_DrawBitmap(&bmarduinologo, 85, 35); + break; + default: + WM_DefaultProc(pMsg); + break; + } +} + +/* +* Slider window handler +* Source: https://wiki.segger.com/SLIDER_-_Usage_(Sample) +*/ +static void _cbChildWinSlider(WM_MESSAGE * pMsg) { + static WM_HWIN hSlider; + int NCode, Id; + int Value; + char acBuffer[32]; + + switch(pMsg->MsgId) { + case WM_CREATE: + /* Create horizonzal slider */ + hSlider = SLIDER_CreateEx(110, 90, 150, 30, pMsg->hWin, WM_CF_SHOW, SLIDER_CF_HORIZONTAL, GUI_ID_SLIDER0); + /* Set range of slider */ + SLIDER_SetRange(hSlider, 0, 100); + /* Set number of tick marks */ + SLIDER_SetNumTicks(hSlider, 10); + /* Set value of slider */ + SLIDER_SetValue(hSlider, 20); + /* Set width of thumb */ + SLIDER_SetWidth(hSlider, 20); + break; + case WM_PAINT: + GUI_SetBkColor(GUI_WHITE); + GUI_Clear(); + GUI_SetFont(&GUI_Font13B_1); + GUI_SetColor(GUI_BLACK); + + /* Display slider value */ + Value = SLIDER_GetValue(hSlider); + sprintf(acBuffer, "Value: %d", Value); + GUI_DispStringAt(acBuffer, 110, 120); + break; + case WM_NOTIFY_PARENT: + Id = WM_GetId(pMsg->hWinSrc); + NCode = pMsg->Data.v; + + switch(Id) { + case GUI_ID_SLIDER0: + switch(NCode) { + case WM_NOTIFICATION_VALUE_CHANGED: + /* Redraw the window when a value has changed so the displayed value will be updated */ + WM_InvalidateWindow(pMsg->hWin); + break; + } + break; + } + break; + default: + WM_DefaultProc(pMsg); + } +} + +/* +* Checkbox&Button window handler +* Source: +* https://wiki.segger.com/CHECKBOX_-_Usage_(Sample) +* https://wiki.segger.com/BUTTON_-_Usage_(Sample) +*/ +#define ID_BUTTON 1 + +static void _cbChildWinChkBtn(WM_MESSAGE * pMsg) { + static WM_HWIN hBox; + BUTTON_Handle hButton; + int NCode, Id; + char acBuffer[32]; + int State; + static int Clicked, Released; + + switch(pMsg->MsgId) { + case WM_CREATE: + /* Create CHECKBOX widget */ + hBox = CHECKBOX_CreateEx(10, 30, 80, 20, pMsg->hWin, WM_CF_SHOW, 0, GUI_ID_CHECK0); + /* Edit widget properties */ + CHECKBOX_SetText(hBox, "Check"); + CHECKBOX_SetTextColor(hBox, GUI_BLACK); + CHECKBOX_SetFont(hBox, &GUI_Font16_1); + /* Set number of possible states to 3 (if needed). The minimum number of states is 2 and the maximum is 3 */ + CHECKBOX_SetNumStates(hBox, 3); + /* Manually set the state */ + CHECKBOX_SetState(hBox, 1); + + /* Create a button */ + hButton = BUTTON_CreateEx(10, 100, 80, 20, pMsg->hWin, WM_CF_SHOW, 0, ID_BUTTON); + BUTTON_SetText(hButton, "Click me"); + break; + case WM_PAINT: + GUI_SetBkColor(GUI_WHITE); + GUI_Clear(); + GUI_SetFont(&GUI_Font16_1); + GUI_SetColor(GUI_BLACK); + + /* Display current CHECKBOX state */ + State = CHECKBOX_GetState(hBox); + sprintf(acBuffer, "State of checkbox: %d", State); + GUI_DispStringAt(acBuffer, 10, 60); + + /* Check button state and print info on labels */ + if(Clicked) { + sprintf(acBuffer, "Button was clicked at: %d.", Clicked); + GUI_DispStringAt(acBuffer, 10, 130); + } + if(Released) { + sprintf(acBuffer, "Button was released at: %d.", Released); + GUI_DispStringAt(acBuffer, 10, 150); + } + break; + case WM_NOTIFY_PARENT: + /* Get Id of sender window and notification code */ + Id = WM_GetId(pMsg->hWinSrc); + NCode = pMsg->Data.v; + + switch (Id) { + case GUI_ID_CHECK0: + switch(NCode) { + case WM_NOTIFICATION_VALUE_CHANGED: + /* When the value of the checkbox changed, redraw parent window to update the display of the state */ + WM_InvalidateWindow(pMsg->hWin); + break; + } + break; + case ID_BUTTON: + switch(NCode) { + case WM_NOTIFICATION_CLICKED: + Clicked = GUI_GetTime(); + WM_InvalidateWindow(pMsg->hWin); + break; + case WM_NOTIFICATION_RELEASED: + Released = GUI_GetTime(); + WM_InvalidateWindow(pMsg->hWin); + break; + } + break; + break; + } + break; + default: + WM_DefaultProc(pMsg); + } +} + +/* +* Progress bar window handler +* Source: https://wiki.segger.com/PROGBAR_-_Custom_(Sample) +*/ +PROGBAR_Handle hProg; + +static void _cbChildWinPgrBar(WM_MESSAGE * pMsg) { + GUI_RECT Rect; + float ValueF; + int Value; + char acBuffer[16]; + + switch (pMsg->MsgId) { + case WM_CREATE: + hProg = PROGBAR_CreateEx(85, 90, 200, 30, pMsg->hWin, WM_CF_SHOW, PROGBAR_CF_HORIZONTAL, GUI_ID_PROGBAR0); + WM_SetCallback(hProg, _cbProgbar); + break; + case WM_PAINT: + GUI_SetBkColor(GUI_WHITE); + GUI_Clear(); + break; + default: + WM_DefaultProc(pMsg); + break; + } +} + +/* +* Progress bar widget handler +* Source: https://wiki.segger.com/PROGBAR_-_Custom_(Sample) +*/ +static void _cbProgbar(WM_MESSAGE * pMsg) { + GUI_RECT Rect; + float ValueF; + int Value; + char acBuffer[16]; + + switch (pMsg->MsgId) { + case WM_PAINT: + GUI_SetBkColor(GUI_WHITE); + GUI_Clear(); + /* Draw progress bar */ + WM_GetClientRect(&Rect); + GUI_SetColor(GUI_BLACK); + GUI_AA_DrawRoundedRectEx(&Rect, 3); + Value = PROGBAR_GetValue(pMsg->hWin); + ValueF = Value / 100.0F; + sprintf(acBuffer, "Progress: %d%%", Value); + Rect.x0 += 2; + Rect.y0 += 2; + Rect.x1 -= 2; + Rect.y1 -= 2; + Rect.x1 = Rect.x1 * (ValueF); + GUI_SetColor(GUI_GRAY_9A); + GUI_AA_FillRoundedRectEx(&Rect, 1); + WM_GetClientRect(&Rect); + Rect.x0 += 2; + Rect.y0 += 2; + Rect.x1 -= 2; + Rect.y1 -= 2; + GUI_SetColor(GUI_BLACK); + GUI_SetTextMode(GUI_TM_TRANS); + GUI_SetFont(&GUI_Font16B_1); + GUI_DispStringInRect(acBuffer, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); + break; + default: + PROGBAR_Callback(pMsg); + break; + } +} + +int progbarCnt = 0; +unsigned long previousMillis = 0; + +void setup() { + /* Init SEGGER emWin library. It also init display and touch controller */ + GUI_Init(); + + LCD_ROTATE_SetSel(1); /* Set landscape mode */ + WM_MULTIBUF_Enable(1); /* Enable multi buffering mode for Windows manager */ + + /* Create the main window. It will include all the sub-windows */ + WM_CreateWindowAsChild(0, 0, LCD_GetXSize(), LCD_GetYSize(), WM_HBKWIN, WM_CF_SHOW, _cbWin, 0); +} + +void loop() { + /* Update progress bar value */ + if (millis() - previousMillis >= 100) { + previousMillis = millis(); + progbarCnt++; + if (progbarCnt > 100) { + progbarCnt = 0; + } + PROGBAR_SetValue(hProg, progbarCnt); + WM_InvalidateWindow(hProg); /* Make sure the entire PROGBAR gets redrawn */ + } + + /* Keep emWin alive, handle touch and other stuff */ + GUI_Exec(); +} \ No newline at end of file diff --git a/libraries/Arduino_H7_Video/examples/emWinDemo/img_arduinologo_emwin.c b/libraries/Arduino_H7_Video/examples/emWinDemo/img_arduinologo_emwin.c new file mode 100644 index 000000000..620223312 --- /dev/null +++ b/libraries/Arduino_H7_Video/examples/emWinDemo/img_arduinologo_emwin.c @@ -0,0 +1,1995 @@ +/********************************************************************* +* (c) 1998 - 2023 SEGGER Microcontroller GmbH * +* Solutions for real time microcontroller applications * +* www.segger.com * +********************************************************************** +* * +* C-file generated by * +* * +* Bitmap Converter for emWin (Demo version) V6.34. * +* Compiled Jul 6 2023, 14:21:44 * +* * +* (c) 1998 - 2023 SEGGER Microcontroller GmbH * +* * +* May not be used in a product * +* * +********************************************************************** +* * +* Source file: arduinologo * +* Dimensions: 200 * 139 * +* NumColors: 65536 colors + 8 bit alpha channel * +* NumBytes: 83420 * +* * +********************************************************************** +*/ + +#include + +#include "GUI.h" + +#ifndef GUI_CONST_STORAGE + #define GUI_CONST_STORAGE const +#endif + +extern GUI_CONST_STORAGE GUI_BITMAP bmarduinologo; + +static GUI_CONST_STORAGE unsigned char _acarduinologo[] = { + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xCE,0x4F, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, + 0x00,0xA4,0xE0, 0x00,0xB5,0x88, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xF7,0xBC, + 0x00,0xEF,0x7A, 0x00,0xEF,0x59, 0x00,0xE7,0x37, 0x00,0xE7,0x16, 0x00,0xE7,0x16, 0x00,0xE7,0x17, 0x00,0xE7,0x38, 0x00,0xEF,0x59, 0x00,0xEF,0x9B, 0x00,0xF7,0xBD, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xF7,0xBC, 0x00,0xEF,0x7A, 0x00,0xEF,0x59, 0x00,0xE7,0x37, 0x00,0xE7,0x16, + 0x00,0xE7,0x16, 0x00,0xE7,0x16, 0x00,0xE7,0x38, 0x00,0xEF,0x59, 0x00,0xEF,0x9B, 0x00,0xF7,0xBC, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xAD,0x44, 0x00,0xA4,0xE1, 0x00,0xD6,0xB2, 0x00,0xEF,0x59, + 0x00,0xE7,0x16, 0x00,0xB5,0x87, 0x00,0xAD,0x00, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xEF,0x7A, 0x00,0xDE,0xF5, 0x00,0xCE,0x6F, 0x00,0xBD,0xCA, 0x00,0xB5,0x67, 0x00,0xAD,0x24, 0x00,0xA5,0x02, + 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xAD,0x03, 0x00,0xAD,0x45, 0x00,0xB5,0x88, 0x00,0xC6,0x0C, 0x00,0xD6,0x91, 0x00,0xE7,0x17, + 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xEF,0x7A, 0x00,0xDE,0xF5, 0x00,0xCE,0x70, 0x00,0xBD,0xEB, 0x00,0xB5,0x87, 0x00,0xAD,0x24, 0x00,0xA5,0x02, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xA5,0x03, 0x00,0xAD,0x45, 0x00,0xB5,0x88, 0x00,0xC5,0xEC, 0x00,0xD6,0x91, 0x00,0xE7,0x16, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xAD,0x23, 0x00,0xF7,0x9C, 0x00,0xDE,0xD4, 0x00,0xCE,0x6F, + 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x00, 0x00,0xEF,0x79, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xDE,0xD3, 0x00,0xC5,0xEB, 0x00,0xAD,0x45, 0x00,0xA4,0xC1, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE2, 0x00,0xB5,0x66, 0x00,0xC6,0x2D, 0x00,0xDE,0xF5, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xEF,0x7B, 0x00,0xDE,0xD3, 0x00,0xC5,0xEB, 0x00,0xAD,0x45, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xB5,0x66, 0x00,0xC6,0x2D, 0x00,0xDE,0xF6, + 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xAD,0x20, 0x00,0xEF,0x7A, 0x00,0xEF,0x9B, 0x00,0xAD,0x40, 0x00,0xB5,0x46, + 0x00,0xA4,0xE0, 0x00,0xCE,0x2D, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xBD,0xA9, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xD6,0x92, 0x00,0xB5,0x88, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x02, 0x00,0xBD,0xCA, 0x00,0xDE,0xD4, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xD6,0x91, 0x00,0xB5,0x87, + 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, + 0x00,0xA5,0x03, 0x00,0xBD,0xCA, 0x00,0xDE,0xF5, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x23, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xA4,0xC0, 0x00,0xF7,0xBD, + 0x00,0xBD,0xCA, 0x00,0xA5,0x03, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, 0x00,0xA4,0xC0, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, + 0x00,0xBD,0xCA, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x02, 0x00,0xC5,0xEC, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xDE,0xD4, 0x00,0xBD,0xA9, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0xA4,0xC0, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xAD,0x23, 0x00,0xC6,0x2D, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0D, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xA4,0xC0, 0x00,0xAD,0x24, + 0x00,0xA4,0xC1, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x87, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xD6,0x91, 0x00,0xAD,0x44, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xBD,0xCA, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x70, 0x00,0xA4,0xE2, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xA4,0xE0, 0x00,0xCE,0x2E, + 0x00,0xA4,0xE1, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xA4,0xE1, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x45, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xB5,0x46, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xCE,0x70, 0x00,0xA5,0x03, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xBD,0xA9, 0x00,0xE7,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xAD,0x00, 0x00,0xDE,0xF5, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xF7,0x9C, + 0x00,0xCE,0x2D, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xA4,0xE2, 0x00,0xC6,0x0D, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xB5,0x67, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xB5,0x66, + 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x92, 0x00,0xA5,0x03, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xC5,0xEB, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0D, 0x00,0xA5,0x00, 0x00,0xE7,0x17, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xB5,0x67, 0x00,0xA4,0xE1, 0x00,0xF7,0xBD, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xC6,0x0C, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE0, 0x00,0xBD,0xCA, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x17, 0x00,0xB5,0x46, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE2, 0x00,0xD6,0x92, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, 0x00,0xAD,0x00, 0x00,0xB5,0x88, 0x00,0xCE,0x4E, + 0x00,0xC5,0xEC, 0x00,0xA4,0xE1, 0x00,0xA5,0x02, 0x00,0xEF,0x79, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, 0x00,0xAD,0x23, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE1, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xF7,0xBD, 0x00,0xC5,0xEB, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x88, 0x00,0xEF,0x9B, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x17, 0x00,0xBD,0xCA, 0x00,0xB5,0x66, + 0x00,0xB5,0x88, 0x00,0xD6,0x91, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x2E, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x87, 0x00,0xEF,0x7B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, + 0x00,0xA5,0x03, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xA4,0xE1, + 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xB5,0x67, 0x00,0xAD,0x20, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xA4,0xE1, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x2D, 0x00,0xA5,0x00, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0xAD,0x00, 0x00,0xC6,0x2D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xA5,0x03, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xB5,0x66, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x88, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xDE,0xF5, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x66, 0x00,0xF7,0x9C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE1, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xAD,0x45, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xA5,0x02, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x92, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xA5,0x03, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x2E, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xA5,0x02, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, 0x00,0xAD,0x20, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xAD,0x00, + 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xA5,0x03, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0xAD,0x24, + 0x00,0xB5,0x66, 0x00,0xBD,0xA9, 0x00,0xBD,0xEA, 0x00,0xC5,0xEC, 0x00,0xC6,0x0C, 0x00,0xC5,0xEB, 0x00,0xBD,0xCA, 0x00,0xB5,0x87, 0x00,0xAD,0x45, 0x00,0xA5,0x02, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x70, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0xAD,0x23, 0x00,0xB5,0x66, 0x00,0xB5,0x88, 0x00,0xBD,0xCA, 0x00,0xC5,0xEB, + 0x00,0xC6,0x0C, 0x00,0xC5,0xEB, 0x00,0xBD,0xCA, 0x00,0xB5,0x88, 0x00,0xB5,0x66, 0x00,0xA5,0x03, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xA4,0xE1, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE2, 0x00,0xB5,0x88, 0x00,0xCE,0x4F, 0x00,0xDE,0xF5, 0x00,0xEF,0x7A, 0x00,0xF7,0xDD, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xF7,0xBC, 0x00,0xEF,0x58, 0x00,0xDE,0xD3, 0x00,0xC6,0x0D, 0x00,0xAD,0x46, 0x00,0x9C,0xC0, + 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA8, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE2, 0x00,0xB5,0x88, 0x00,0xCE,0x4F, 0x00,0xDE,0xF5, 0x00,0xEF,0x7A, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xEF,0x59, 0x00,0xDE,0xD4, 0x00,0xC6,0x0D, 0x00,0xB5,0x66, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xB5,0x67, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE1, 0x00,0xBD,0xA9, 0x00,0xDE,0xD3, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, + 0x00,0xD6,0x70, 0x00,0xB5,0x67, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, + 0x00,0xCE,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE1, 0x00,0xBD,0xC9, 0x00,0xDE,0xD3, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xD6,0x70, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xA5,0x02, 0x00,0xCE,0x4E, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xC6,0x0C, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, + 0x00,0xAD,0x24, 0x00,0xCE,0x70, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xBD,0xCA, + 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xB3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xB2, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE1, 0x00,0xCE,0x4F, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xCE,0x2E, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0C, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xAD,0x24, 0x00,0xD6,0x92, + 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xEF,0x59, 0x00,0xBD,0xCA, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xC0, + 0x00,0xA4,0xE0, 0x00,0xBD,0xCA, 0x00,0xEF,0x7B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xC5,0xEB, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA4,0xE1, 0x00,0xCE,0x70, 0x00,0xF7,0xDE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x17, 0x00,0xB5,0x46, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x67, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA8, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xA5,0x02, + 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x17, 0x00,0xAD,0x45, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xDE,0xD3, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xA9, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x87, 0x00,0xF7,0x9B, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xCE,0x2E, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x44, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xA4,0xE2, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA5,0x02, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA5,0x02, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xA9, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA5,0x02, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x67, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xF7,0x9C, 0x00,0xB5,0x46, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xEB, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x4E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9C, 0x00,0xB5,0x67, 0x00,0xAD,0x00, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA5,0x00, + 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xB5,0x87, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA5,0x02, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x2E, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xD6,0x92, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xB5,0x87, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xA9, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x6F, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x2D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xCE,0x4E, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE2, 0x00,0xF7,0x9C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xB5,0x66, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x03, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xA9, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xD6,0x70, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA5,0x02, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE1, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA5,0x03, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, + 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0xB3, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x44, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x92, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xBD,0xEB, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xC0, 0x00,0xA4,0xE1, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xC1, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x71, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, + 0x00,0xA4,0xC0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x58, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x2E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, + 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x4E, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0C, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xD4, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xD6,0xB2, 0x00,0xDE,0xB3, 0x00,0xD6,0xB3, 0x00,0xD6,0xB3, 0x00,0xD6,0xB3, + 0x00,0xD6,0xB3, 0x00,0xD6,0xB3, 0x00,0xD6,0xB2, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x17, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0xA8, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x70, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xAD,0x40, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, + 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x40, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x2D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xEB, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA4,0xE0, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xD6,0x92, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xEF,0x79, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x46, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xAD,0x03, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x7B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, + 0x00,0xFF,0xDE, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0D, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xD5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC5,0xEB, 0x00,0xFF,0xFF, + 0x00,0xEF,0x7A, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x17, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xCE,0x4E, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x46, 0x00,0xFF,0xFF, + 0x00,0xDE,0xF5, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x23, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x58, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x02, 0x00,0xF7,0xBC, + 0x00,0xCE,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x17, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xA5,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xEF,0x59, + 0x00,0xC6,0x0C, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0xA8, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, + 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xD6,0x92, 0x00,0xD6,0xB3, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, + 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, + 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x23, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, + 0x00,0xD6,0x92, 0x00,0xD6,0xB3, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x25, 0x00,0xDE,0xB3, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0x92, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x2D, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x91, + 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xB3, 0x00,0xB5,0x40, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, + 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, + 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xAD,0x20, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0C, 0x00,0xAD,0x00, + 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, + 0x00,0xAD,0x40, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x40, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x92, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x4E, + 0x00,0xA5,0x02, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE2, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA5,0x00, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xC0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9C, 0x00,0xA4,0xE2, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, + 0x00,0xA4,0xE0, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA4,0xE0, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xA5,0x03, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0x70, + 0x00,0xAD,0x20, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC5,0xEB, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, + 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xC5,0xEC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xCA, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x25, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xBD,0xEB, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xA9, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, + 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xC0, 0x00,0xA5,0x03, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC5,0xEC, + 0x00,0xA5,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x02, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x2D, + 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xE7,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x20, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, + 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, + 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, + 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xE7,0x16, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, + 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, + 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x37, 0x00,0xE7,0x17, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xCE,0x6F, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, + 0x00,0xE7,0x16, 0x00,0xE7,0x37, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x37, 0x00,0xE7,0x37, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x46, 0x00,0xE7,0x38, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x17, 0x00,0xE7,0x37, 0x00,0xE7,0x16, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0xB3, + 0x00,0xCE,0x2D, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x2E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x46, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, + 0x00,0xD6,0xB2, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xEF,0x7A, + 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xE7,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x03, 0x00,0xF7,0xDD, + 0x00,0xF7,0x9C, 0x00,0xA4,0xE2, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xB3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x58, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xF7,0x9B, 0x00,0xA4,0xE2, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xCE,0x2D, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xC9, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xD6,0x91, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, + 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE2, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA4,0xE2, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x7B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x02, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xD3, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xA9, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xFF,0xDE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x44, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xB3, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xA5,0x03, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xA9, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x79, 0x00,0xE7,0x38, 0x00,0xE7,0x58, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, + 0x00,0xE7,0x38, 0x00,0xE7,0x58, 0x00,0xE7,0x38, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xAD,0x00, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x7B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA5,0x02, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, + 0x00,0xC5,0xEB, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA5,0x00, 0x00,0xBD,0xA9, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0C, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xB5,0x66, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xA5,0x03, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA5,0x00, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x58, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xB5,0x46, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xF7,0x9B, 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x2D, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xAD,0x24, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xF7,0x9C, 0x00,0xAD,0x45, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x92, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC5,0xEB, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0xB2, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, + 0x00,0xD6,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDF,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xF7,0x9C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, + 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xBD,0xA9, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x03, + 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xF7,0x9C, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, 0x00,0xA4,0xE1, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xB5,0x46, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x17, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0x92, 0x00,0xAD,0x00, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xA5,0x02, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x23, 0x00,0xF7,0xDD, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE2, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xBD,0xA9, 0x00,0xAD,0x00, 0x00,0x9C,0xA0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEC, + 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE0, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xB3, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xCE,0x70, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA5,0x03, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xB5,0x67, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x67, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x67, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x71, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, + 0x00,0xB5,0x88, 0x00,0xEF,0x79, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xBD,0xCA, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xF7,0xBC, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0xCE,0x4F, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xAD,0x23, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xCE,0x4F, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xCE,0x2E, 0x00,0xA4,0xE1, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xB5,0x67, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xA4,0xE1, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xAD,0x24, 0x00,0xD6,0xB2, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xBD,0xCA, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x6F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xAD,0x23, 0x00,0xD6,0x70, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7B, 0x00,0xCE,0x4F, 0x00,0xA5,0x02, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xA5,0x00, 0x00,0xAD,0x45, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x45, + 0x00,0xDE,0xB2, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, + 0x00,0xC6,0x0D, 0x00,0xA4,0xC1, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x03, 0x00,0xC6,0x2D, 0x00,0xEF,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xF7,0xDD, 0x00,0xE7,0x16, 0x00,0xBD,0xEB, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, + 0x00,0xAD,0x24, 0x00,0xF7,0x9C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xA5,0x00, 0x00,0xAD,0x24, 0x00,0xCE,0x2E, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xDE,0xF6, 0x00,0xBD,0xCA, 0x00,0xA4,0xE1, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x02, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x2E, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xB5,0x67, 0x00,0xCE,0x4F, 0x00,0xE7,0x37, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xDE,0xF5, 0x00,0xC6,0x0D, + 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xAD,0x03, + 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xB5,0x67, 0x00,0xCE,0x4F, 0x00,0xE7,0x17, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xDE,0xF5, 0x00,0xC6,0x2D, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDF,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xAD,0x24, 0x00,0xB5,0xA8, 0x00,0xCE,0x2E, 0x00,0xD6,0xB2, + 0x00,0xDE,0xF5, 0x00,0xE7,0x37, 0x00,0xEF,0x58, 0x00,0xEF,0x59, 0x00,0xEF,0x7A, 0x00,0xEF,0x59, 0x00,0xE7,0x38, 0x00,0xE7,0x16, 0x00,0xDE,0xD4, 0x00,0xD6,0x70, 0x00,0xC5,0xEC, 0x00,0xB5,0x66, 0x00,0xA5,0x02, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xAD,0x24, 0x00,0xEF,0x7A, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0xAD,0x03, 0x00,0xB5,0x88, 0x00,0xC6,0x2D, 0x00,0xD6,0x92, 0x00,0xDE,0xF5, 0x00,0xE7,0x17, 0x00,0xE7,0x58, 0x00,0xEF,0x59, + 0x00,0xEF,0x7A, 0x00,0xEF,0x59, 0x00,0xE7,0x58, 0x00,0xE7,0x17, 0x00,0xDE,0xF5, 0x00,0xD6,0x91, 0x00,0xC6,0x0C, 0x00,0xB5,0x67, 0x00,0xA5,0x02, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xD6,0x92, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, + 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xB5,0x66, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE1, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xB5,0x87, 0x00,0xAD,0x00, + 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xA5,0x02, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x20, 0x00,0xCE,0x2E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xB5,0x87, + 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC5,0xEB, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xEF,0x7B, 0x00,0xAD,0x45, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x2E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, + 0x00,0xB5,0x88, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xBD,0xA9, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x2E, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE0, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x6F, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xB5,0x66, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA4,0xE2, 0x00,0xA5,0x00, + 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA4,0xE2, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xC6,0x2D, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xB5,0x88, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, + 0x00,0xB5,0x66, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xB5,0x88, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xAD,0x24, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xD6,0x91, 0x00,0xA4,0xE1, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xC6,0x2D, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, 0x00,0xA4,0xE1, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0xCE,0x2E, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xAD,0x44, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xBD,0xC9, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, + 0x00,0xBD,0xA8, 0x00,0xEF,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xAD,0x45, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xC1, 0x00,0xCE,0x4E, 0x00,0xF7,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, 0x00,0xB5,0x66, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xB5,0x66, 0x00,0xDE,0xF5, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xD6,0x91, 0x00,0xA5,0x03, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA4,0xC0, 0x00,0xBD,0xCA, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD3, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x67, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xCE,0x70, 0x00,0xAD,0x24, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xBD,0xA9, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD5, 0x00,0xBD,0xA8, + 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE1, 0x00,0xBD,0xCA, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xD6,0xB2, 0x00,0xB5,0x67, 0x00,0xA4,0xC0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA5,0x02, 0x00,0xC5,0xEC, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xEF,0x59, 0x00,0xCE,0x2E, 0x00,0xAD,0x44, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xB5,0x66, 0x00,0xCE,0x70, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xC6,0x0D, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, + 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0xB5,0x67, 0x00,0xD6,0x91, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xE7,0x16, 0x00,0xCE,0x2D, 0x00,0xB5,0x46, 0x00,0xA4,0xC0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, + 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xB5,0x87, 0x00,0xCE,0x4F, 0x00,0xE7,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xDE,0xF6, + 0x00,0xC6,0x0D, 0x00,0xAD,0x45, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE2, 0x00,0xB5,0x88, + 0x00,0xCE,0x70, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xEF,0x59, 0x00,0xDE,0xB3, 0x00,0xC6,0x0D, 0x00,0xB5,0x87, 0x00,0xA5,0x03, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, + 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xAD,0x24, 0x00,0xBD,0xA9, + 0x00,0xCE,0x2E, 0x00,0xDE,0xF5, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xEF,0x59, 0x00,0xDE,0xB3, 0x00,0xC6,0x0D, 0x00,0xB5,0x67, 0x00,0xA5,0x03, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, + 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xAD,0x24, 0x00,0xBD,0xA9, 0x00,0xCE,0x4E, 0x00,0xDE,0xF5, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xEF,0x59, 0x00,0xDE,0xF5, 0x00,0xD6,0xB2, 0x00,0xCE,0x4F, + 0x00,0xC6,0x0C, 0x00,0xBD,0xCA, 0x00,0xBD,0xC9, 0x00,0xBD,0xA9, 0x00,0xBD,0xA9, 0x00,0xBD,0xA9, 0x00,0xBD,0xCA, 0x00,0xC5,0xEB, 0x00,0xC6,0x0D, 0x00,0xCE,0x70, 0x00,0xDE,0xD3, 0x00,0xE7,0x16, 0x00,0xEF,0x7A, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xEF,0x59, 0x00,0xDE,0xF5, 0x00,0xD6,0xB2, 0x00,0xCE,0x4F, 0x00,0xC6,0x0C, 0x00,0xBD,0xEB, 0x00,0xBD,0xCA, 0x00,0xBD,0xA9, + 0x00,0xBD,0xA9, 0x00,0xBD,0xA9, 0x00,0xBD,0xCA, 0x00,0xBD,0xEB, 0x00,0xC6,0x0D, 0x00,0xCE,0x70, 0x00,0xDE,0xD3, 0x00,0xE7,0x16, 0x00,0xEF,0x7A, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xE7,0x38, + 0x00,0xE7,0x37, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x37, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xE7,0x37, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, + 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xEF,0x7A, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xE7,0x37, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xEF,0x59, 0x00,0xEF,0x9B, 0x00,0xF7,0xDD, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, + 0x00,0xE7,0x37, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x37, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9C, + 0x00,0xE7,0x37, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xE7,0x37, 0x00,0xE7,0x38, + 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, + 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x37, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDE, 0x00,0xE7,0x37, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, + 0x00,0xE7,0x37, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xE7,0x37, 0x00,0xE7,0x38, 0x00,0xE7,0x38, 0x00,0xE7,0x38, + 0x00,0xE7,0x37, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xE7,0x16, + 0x00,0xD6,0x91, 0x00,0xCE,0x4F, 0x00,0xCE,0x2E, 0x00,0xCE,0x4E, 0x00,0xD6,0x70, 0x00,0xDE,0xD4, 0x00,0xEF,0x59, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xAD,0x24, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, + 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x02, 0x00,0xB5,0x66, 0x00,0xC6,0x2D, 0x00,0xE7,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xAD,0x24, + 0x00,0xB5,0x88, 0x00,0xCE,0x2E, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x20, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x20, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xEF,0x79, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, + 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, + 0x00,0xAD,0x20, 0x00,0xBD,0xCB, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, + 0x00,0xAD,0x20, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7B, 0x00,0xC6,0x0C, 0x00,0xA5,0x03, 0x00,0xA4,0xE0, + 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0xAD,0x45, 0x00,0xCE,0x4F, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x00, + 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0xBD,0xCA, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0xB2, 0x00,0xA4,0xE1, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA5,0x03, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xAD,0x24, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xC6,0x2D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x20, 0x00,0xC5,0xEC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, + 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x20, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xB5,0x40, 0x00,0xA5,0x00, + 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, + 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xB5,0x40, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x03, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA5,0x00, 0x00,0xA4,0xC1, 0x00,0xA5,0x02, 0x00,0xA4,0xE1, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x88, 0x00,0xDE,0xD4, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, + 0x00,0xD6,0x92, 0x00,0xCE,0x2E, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x87, 0x00,0xDE,0xD3, 0x00,0xD6,0xB2, 0x00,0xD6,0x91, 0x00,0xCE,0x2E, 0x00,0xBD,0xA8, 0x00,0xA4,0xC1, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x02, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xCE,0x70, 0x00,0xD6,0x91, + 0x00,0xD6,0x91, 0x00,0xD6,0x91, 0x00,0xD6,0x71, 0x00,0xD6,0x91, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xCE,0x2E, 0x00,0xD6,0x91, 0x00,0xD6,0x70, 0x00,0xD6,0x71, + 0x00,0xD6,0x91, 0x00,0xD6,0x91, 0x00,0xD6,0x70, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, + 0x00,0xD6,0xB2, 0x00,0xEF,0x7B, 0x00,0xF7,0xBC, 0x00,0xEF,0x9B, 0x00,0xE7,0x16, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE2, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x67, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x2E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, + 0x00,0xB5,0x88, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x44, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xD4, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xD6,0x71, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0xB2, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xCE,0x4F, 0x00,0xA4,0xE2, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x58, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xA9, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x9B, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xA5,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, + 0x00,0xFF,0xFF, 0x00,0xDE,0xB3, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE2, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x03, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xFF,0xDE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA4,0xE2, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xC5,0xEC, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0xA8, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xA5,0x03, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xD5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xA0, 0x00,0xA4,0xE0, 0x00,0xE7,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x9B, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xC6,0x2D, 0x00,0xFF,0xFF, 0x00,0xDE,0xD3, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xEF,0x7B, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, + 0x00,0xBD,0xCA, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA5,0x02, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xA0, 0x00,0xA4,0xC0, 0x00,0xE7,0x58, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA5,0x00, 0x00,0xDE,0xD5, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xEF,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x92, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xE7,0x16, 0x00,0xB5,0x87, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xA9, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFE, 0x00,0xF7,0xBD, 0x00,0xD6,0x91, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, + 0x00,0xE7,0x38, 0x00,0xE7,0x37, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDF,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x2E, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE2, 0x00,0xF7,0x9C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x02, 0x00,0xB5,0x45, 0x00,0xAD,0x45, 0x00,0xAD,0x45, + 0x00,0xB5,0x45, 0x00,0xA5,0x02, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x20, 0x00,0xD6,0x92, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xCE,0x6F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xA5,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xD4, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0C, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, + 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xF7,0xDE, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE0, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA5,0x00, 0x00,0xAD,0x45, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0x71, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xBD,0xA8, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xA5,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xE7,0x17, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xA4,0xE1, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xA9, 0x00,0xB5,0x87, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xAD,0x23, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xC5,0xEB, 0x00,0xCE,0x2E, 0x00,0xC6,0x2D, 0x00,0xC6,0x2D, 0x00,0xCE,0x2E, 0x00,0xA5,0x03, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x02, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x45, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x58, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA5,0x02, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xEF,0x59, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x4E, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE2, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x79, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xD6,0xB2, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC5,0xEC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xC6,0x0C, 0x00,0xC5,0xEB, 0x00,0xC5,0xEB, + 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xD6,0x91, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, + 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x23, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEB, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0C, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x58, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xF7,0xDE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x2E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xC5,0xEB, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x02, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x2D, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x6F, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, + 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC6,0x0D, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0xB2, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xB5,0x88, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xD6,0x92, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xBD,0xEB, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xCE,0x70, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x17, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, + 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, + 0x00,0xC5,0xEB, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0x92, + 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x9B, 0x00,0xA4,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x59, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x00, 0x00,0xDE,0xD3, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x87, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE2, 0x00,0xBD,0xA9, + 0x00,0xB5,0x88, 0x00,0xB5,0x88, 0x00,0xB5,0x88, 0x00,0xB5,0x88, 0x00,0xB5,0x88, 0x00,0xBD,0xA9, 0x00,0xAD,0x45, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xBD,0xCA, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE1, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xB5,0x88, 0x00,0xE7,0x16, 0x00,0xDE,0xF5, 0x00,0xDE,0xF5, 0x00,0xDE,0xB3, 0x00,0xCE,0x2E, 0x00,0xAD,0x24, + 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x58, + 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xBD,0xA9, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xB5,0x46, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xBD,0xCA, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x17, 0x00,0xDE,0xD5, 0x00,0xDE,0xF5, + 0x00,0xDE,0xF5, 0x00,0xDE,0xF5, 0x00,0xDE,0xF5, 0x00,0xE7,0x16, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xD6,0x92, 0x00,0xDE,0xF6, 0x00,0xDE,0xF5, 0x00,0xDE,0xF5, + 0x00,0xDE,0xF5, 0x00,0xDE,0xF5, 0x00,0xDE,0xD5, 0x00,0xF7,0xBC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xCE,0x4F, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x88, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x24, + 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xBD,0xCA, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x03, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7B, 0x00,0xA4,0xE1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x7A, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xAD,0x45, 0x00,0xFF,0xFE, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x17, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xB5,0x46, 0x00,0xB5,0x67, 0x00,0xAD,0x45, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA5,0x00, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xAD,0x40, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, + 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xAD,0x20, 0x00,0xDE,0xF6, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBD, 0x00,0xA5,0x02, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, + 0x00,0xA4,0xC0, 0x00,0xAD,0x45, 0x00,0xB5,0x87, 0x00,0xB5,0x66, 0x00,0xA4,0xE1, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x20, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0xB2, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x38, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0xA8, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xAD,0x20, 0x00,0xCE,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xDE,0xD4, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xAD,0x00, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0x91, 0x00,0xAD,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA8, 0x00,0xAD,0x00, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xAD,0x44, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xBD,0xA9, 0x00,0xA5,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xEF,0x7B, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEC, 0x00,0xAD,0x00, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xCE,0x4F, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF6, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xAD,0x00, 0x00,0xBD,0xEB, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xD6,0x70, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xBD,0xEB, 0x00,0xAD,0x20, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA5,0x00, 0x00,0xA5,0x02, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x66, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA5,0x00, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xAD,0x24, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, + 0x00,0xAD,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xAD,0x23, 0x00,0xAD,0x00, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA4,0xE0, 0x00,0xA4,0xE1, 0x00,0xEF,0x79, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xA4,0xE2, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xA5,0x00, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x16, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA5,0x00, 0x00,0xC6,0x0D, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xA4,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x66, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xC5,0xEC, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0xA4,0xE0, 0x00,0xAD,0x20, 0x00,0xAD,0x45, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xB5,0x67, 0x00,0xA4,0xE0, 0x00,0x9C,0xC1, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0xA4,0xE0, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC1, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, 0x00,0xA4,0xE0, + 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xD6,0xB2, 0x00,0xAD,0x00, 0x00,0xA4,0xC1, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC1, + 0x00,0xA5,0x00, 0x00,0xCE,0x4F, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xAD,0x46, 0x00,0xAD,0x20, 0x00,0xA4,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, + 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0x9C,0xC0, 0x00,0xA4,0xC0, 0x00,0xAD,0x20, 0x00,0xAD,0x24, 0x00,0xEF,0x59, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xD6,0xB2, 0x00,0xB5,0x40, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x60, 0x00,0xC6,0x0C, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xA4,0xC0, 0x00,0xAD,0x20, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x20, + 0x00,0xE7,0x38, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xDF,0x16, 0x00,0xB5,0x40, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x60, 0x00,0xC5,0xEC, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xAD,0x40, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x40, 0x00,0xB5,0x87, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xE7,0x17, 0x00,0xAD,0x40, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xC1, + 0x00,0xAD,0x24, 0x00,0xC5,0xEB, 0x00,0xE7,0x16, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xB5,0x66, 0x00,0xA4,0xC0, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, + 0x00,0xAD,0x24, 0x00,0xD6,0x70, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xB5,0x40, 0x00,0xA4,0xE0, + 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, + 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xB5,0x40, 0x00,0xDE,0xF5, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xAD,0x20, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, 0x00,0xB5,0x40, + 0x00,0xDE,0xD4, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xAD,0x45, 0x00,0xAD,0x40, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xAD,0x00, 0x00,0xA4,0xE0, + 0x00,0xB5,0x60, 0x00,0xCE,0x4E, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFE, 0x00,0xCE,0x70, 0x00,0xA5,0x03, 0x00,0xA4,0xE0, 0x00,0xAD,0x00, + 0x00,0xA5,0x00, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA4,0xE0, 0x00,0xA5,0x00, 0x00,0xAD,0x00, 0x00,0xA5,0x00, 0x00,0xA5,0x02, 0x00,0xCE,0x4E, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x37, 0x00,0xD6,0x91, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0x91, 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xD4, 0x00,0xD6,0x92, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0x91, + 0x00,0xEF,0x7A, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0x9B, 0x00,0xD6,0x92, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0x91, 0x00,0xE7,0x37, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xDE, 0x00,0xDE,0xB3, 0x00,0xD6,0x92, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xF7,0xDD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xD6,0x92, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0x92, 0x00,0xDE,0xB3, 0x00,0xDE,0xD5, 0x00,0xE7,0x37, 0x00,0xEF,0x7A, + 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xE7,0x38, 0x00,0xD6,0x70, 0x00,0xC5,0xEB, 0x00,0xB5,0x88, 0x00,0xB5,0x46, 0x00,0xAD,0x46, 0x00,0xB5,0x87, 0x00,0xBD,0xCA, 0x00,0xCE,0x6F, 0x00,0xE7,0x17, + 0x00,0xFF,0xDE, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xDE,0xF5, 0x00,0xD6,0x92, 0x00,0xD6,0xB2, + 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, + 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0x92, 0x00,0xF7,0x9B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xBC, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0x91, + 0x00,0xEF,0x7B, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xEF,0x59, 0x00,0xD6,0x91, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, 0x00,0xD6,0xB2, + 0x00,0xD6,0x91, 0x00,0xEF,0x58, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xF7,0xDD, 0x00,0xDE,0xF5, 0x00,0xCE,0x2E, + 0x00,0xBD,0xA9, 0x00,0xB5,0x67, 0x00,0xAD,0x45, 0x00,0xB5,0x66, 0x00,0xBD,0xA9, 0x00,0xCE,0x2D, 0x00,0xDE,0xD5, 0x00,0xF7,0xBD, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, + 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF, 0x00,0xFF,0xFF +}; + +GUI_CONST_STORAGE GUI_BITMAP bmarduinologo = { + 200, // xSize + 139, // ySize + 600, // BytesPerLine + 24, // BitsPerPixel + (const unsigned char *)_acarduinologo, // Pointer to picture data + NULL, // Pointer to palette + GUI_DRAW_BMPA565 +}; + +/*************************** End of file ****************************/ diff --git a/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp b/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp index 43ec72919..68ee9b01f 100644 --- a/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp +++ b/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp @@ -37,8 +37,20 @@ extern "C" { /* Private function prototypes -----------------------------------------------*/ #if __has_include ("lvgl.h") +#include "mbed.h" +#if (LVGL_VERSION_MAJOR == 9) +void lvgl_displayFlushing(lv_display_t * display, const lv_area_t * area, unsigned char * px_map); +static void inc_thd() { + while (1) { + lv_tick_inc(16); + delay(16); + } +} +static rtos::Thread lvgl_inc_thd; +#else void lvgl_displayFlushing(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p); #endif +#endif /* Functions -----------------------------------------------------------------*/ Arduino_H7_Video::Arduino_H7_Video(int width, int height, H7DisplayShield &shield) @@ -77,16 +89,47 @@ int Arduino_H7_Video::begin() { textFont(Font_5x7); #endif +#if defined(ARDUINO_GIGA) + /* Configure SDRAM */ + SDRAM.begin(dsi_getFramebufferEnd()); +#endif + /* Video controller/bridge init */ - _shield->init(_edidMode); + int err_code = _shield->init(_edidMode); + if (err_code < 0) { + return 3; /* Video controller fail init */ + } #if __has_include("lvgl.h") /* Initiliaze LVGL library */ lv_init(); + + #if (LVGL_VERSION_MAJOR == 9) /* Create a draw buffer */ + static lv_color_t * buf1 = (lv_color_t*)malloc((width() * height() / 10)); /* Declare a buffer for 1/10 screen size */ + if (buf1 == NULL) { + return 2; /* Insuff memory err */ + } + + lv_display_t *display; + if(_rotated) { + display = lv_display_create(height(), width()); + lv_display_set_rotation(display, LV_DISPLAY_ROTATION_270); + //display->sw_rotate = 1; + } else { + display = lv_display_create(width(), height()); + } + lv_display_set_buffers(display, buf1, NULL, width() * height() / 10, LV_DISPLAY_RENDER_MODE_PARTIAL); /*Initialize the display buffer.*/ + lv_display_set_flush_cb(display, lvgl_displayFlushing); + + lvgl_inc_thd.start(inc_thd); + + #else //LVGL_VERSION_MAJOR + + /* Create a draw buffer */ static lv_disp_draw_buf_t draw_buf; - static lv_color_t * buf1; + static lv_color_t * buf1; buf1 = (lv_color_t*)malloc((width() * height() / 10) * sizeof(lv_color_t)); /* Declare a buffer for 1/10 screen size */ if (buf1 == NULL) { return 2; /* Insuff memory err */ @@ -110,9 +153,12 @@ int Arduino_H7_Video::begin() { disp_drv.sw_rotate = 1; lv_disp_drv_register(&disp_drv); /* Finally register the driver */ #endif + #endif +#if !defined(ARDUINO_GIGA) /* Configure SDRAM */ SDRAM.begin(dsi_getFramebufferEnd()); //FIXME: SDRAM init after video controller init can cause display glitch at start-up +#endif return 0; } @@ -129,6 +175,11 @@ bool Arduino_H7_Video::isRotated() { return _rotated; } +bool Arduino_H7_Video::detect() +{ + return (_shield->getStatus() > 0); +} + void Arduino_H7_Video::end() { #ifdef HAS_ARDUINOGRAPHICS ArduinoGraphics::end(); @@ -189,6 +240,46 @@ void Arduino_H7_Video::set(int x, int y, uint8_t r, uint8_t g, uint8_t b) { #endif #if __has_include("lvgl.h") +#if (LVGL_VERSION_MAJOR == 9) +static uint8_t* rotated_buf = nullptr; +void lvgl_displayFlushing(lv_display_t * disp, const lv_area_t * area, unsigned char * px_map) { + uint32_t w = lv_area_get_width(area); + uint32_t h = lv_area_get_height(area); + lv_area_t* area_in_use = (lv_area_t *)area; + + // TODO: find a smart way to tackle sw rotation + lv_display_rotation_t rotation = lv_display_get_rotation(disp); + lv_area_t rotated_area; + if (rotation != LV_DISPLAY_ROTATION_0) { + rotated_buf = (uint8_t*)realloc(rotated_buf, w * h * 4); + lv_color_format_t cf = lv_display_get_color_format(disp); + #if (LVGL_VERSION_MINOR < 2) + rotation = LV_DISPLAY_ROTATION_90; // bugfix: force 90 degree rotation for lvgl 9.1 end earlier + #endif + lv_draw_sw_rotate(px_map, rotated_buf, + w, h, lv_draw_buf_width_to_stride(w, cf), + lv_draw_buf_width_to_stride(h, cf), + rotation, cf); + + rotated_area.x1 = lv_display_get_vertical_resolution(disp) - area->y2 - 1; + rotated_area.y1 = area->x1; + //rotated_area.y2 = dsi_getDisplayYSize() - area->x1 - 1; + rotated_area.x2 = rotated_area.x1 + h - 1; + rotated_area.y2 = rotated_area.y1 + w + 1; + + area_in_use = &rotated_area; + px_map = rotated_buf; + auto temp = w; + w = h; + h = temp; + } + + uint32_t offsetPos = (area_in_use->x1 + (dsi_getDisplayXSize() * area_in_use->y1)) * sizeof(uint16_t); + + dsi_lcdDrawImage((void *) px_map, (void *)(dsi_getActiveFrameBuffer() + offsetPos), w, h, DMA2D_INPUT_RGB565); + lv_display_flush_ready(disp); /* Indicate you are ready with the flushing*/ +} +#else void lvgl_displayFlushing(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p) { uint32_t width = lv_area_get_width(area); uint32_t height = lv_area_get_height(area); @@ -198,5 +289,6 @@ void lvgl_displayFlushing(lv_disp_drv_t * disp, const lv_area_t * area, lv_color lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/ } #endif +#endif -/**** END OF FILE ****/ \ No newline at end of file +/**** END OF FILE ****/ diff --git a/libraries/Arduino_H7_Video/src/Arduino_H7_Video.h b/libraries/Arduino_H7_Video/src/Arduino_H7_Video.h index 9f05f5ea0..8f40d37a0 100644 --- a/libraries/Arduino_H7_Video/src/Arduino_H7_Video.h +++ b/libraries/Arduino_H7_Video/src/Arduino_H7_Video.h @@ -106,6 +106,13 @@ class Arduino_H7_Video */ bool isRotated(); + /** + * @brief Checks if the display is connected. + * + * @return true if the display is connected, false otherwise. + */ + bool detect(); + #ifdef HAS_ARDUINOGRAPHICS /** * @brief Clear the display. diff --git a/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp b/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp index 033b550a3..b6010f3f0 100644 --- a/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp +++ b/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp @@ -18,10 +18,16 @@ int GigaDisplayShieldClass::getEdidMode(int h, int v) { return EDID_MODE_480x800_60Hz; } +int GigaDisplayShieldClass::getStatus() { + return 1; // TODO: Not implemented; +} + int USBCVideoClass::init(int edidmode) { struct edid recognized_edid; int err_code = 0; + memset(&recognized_edid, 0, sizeof(recognized_edid)); + //Initialization of ANX7625 err_code = anx7625_init(0); if(err_code < 0) { @@ -29,13 +35,22 @@ int USBCVideoClass::init(int edidmode) { } //Checking HDMI plug event - anx7625_wait_hpd_event(0); + err_code = anx7625_wait_hpd_event(0); + if(err_code < 0) { + return err_code; + } //Read EDID - anx7625_dp_get_edid(0, &recognized_edid); + err_code = anx7625_dp_get_edid(0, &recognized_edid); + if(err_code < 0) { + return err_code; + } //DSI Configuration - anx7625_dp_start(0, &recognized_edid, (enum edid_modes) edidmode); + err_code = anx7625_dp_start(0, &recognized_edid, (enum edid_modes) edidmode); + if(err_code < 0) { + return err_code; + } return 0; } @@ -46,5 +61,11 @@ int USBCVideoClass::getEdidMode(int h, int v) { return edidmode; } +int USBCVideoClass::getStatus() { + int detected = anx7625_get_hpd_event(0); + + return detected; +} + GigaDisplayShieldClass GigaDisplayShield; USBCVideoClass USBCVideo; \ No newline at end of file diff --git a/libraries/Arduino_H7_Video/src/H7DisplayShield.h b/libraries/Arduino_H7_Video/src/H7DisplayShield.h index c29f9d7eb..541c2c632 100644 --- a/libraries/Arduino_H7_Video/src/H7DisplayShield.h +++ b/libraries/Arduino_H7_Video/src/H7DisplayShield.h @@ -5,18 +5,21 @@ class H7DisplayShield { public: virtual int init(int edidmode) = 0; virtual int getEdidMode(int h, int v); + virtual int getStatus(); }; class GigaDisplayShieldClass : public H7DisplayShield { public: int init(int edidmode); int getEdidMode(int h, int v); + int getStatus(); }; class USBCVideoClass : public H7DisplayShield { public: int init(int edidmode); int getEdidMode(int h, int v); + int getStatus(); }; extern GigaDisplayShieldClass GigaDisplayShield; diff --git a/libraries/Arduino_H7_Video/src/anx7625.cpp b/libraries/Arduino_H7_Video/src/anx7625.cpp index 596e6f9be..3cfefce47 100644 --- a/libraries/Arduino_H7_Video/src/anx7625.cpp +++ b/libraries/Arduino_H7_Video/src/anx7625.cpp @@ -25,7 +25,7 @@ #include #include -#if defined(ARDUINO_PORTENTA_H7_M7) +#if defined(ARDUINO_PORTENTA_H7_M7) || defined(PORTENTA_H7_PINS) #include "dsi.h" #include "anx7625.h" @@ -42,9 +42,12 @@ #define ANXDEBUG(format, ...) \ printk(BIOS_DEBUG, "%s: " format, __func__, ##__VA_ARGS__) #else - #define ANXERROR(format, ...) - #define ANXINFO(format, ...) - #define ANXDEBUG(format, ...) + #define ANXERROR(format, ...) \ + do { static volatile int _i = 5; _i++; } while (0) + #define ANXINFO(format, ...) \ + do { } while (0) + #define ANXDEBUG(format, ...) \ + do { } while (0) #endif #define FLASH_LOAD_STA 0x05 @@ -506,7 +509,7 @@ int anx7625_init(uint8_t bus) { return -1; } ANXINFO("Powering on anx7625 successfull.\n"); - mdelay(200); // Wait for anx7625 to be stable + mdelay(500); // Wait for anx7625 to be stable if(anx7625_is_power_provider(0)) { ANXINFO("OTG_ON = 0 -> VBUS ON\n"); @@ -517,15 +520,21 @@ int anx7625_init(uint8_t bus) { return 0; } -void anx7625_wait_hpd_event(uint8_t bus) { +int anx7625_wait_hpd_event(uint8_t bus) { ANXINFO("Waiting for HDMI hot plug event...\n"); - - while (1) { + + int retry_hpd_change = 10000; + while (--retry_hpd_change) { mdelay(10); int detected = anx7625_hpd_change_detect(bus); - if (detected == 1) - break; + if (detected < 0) + return -1; + if (detected > 0) + return 0; } + + ANXERROR("Timed out to detect HPD change on bus %d.\n", bus); + return -1; } int anx7625_get_cc_status(uint8_t bus, uint8_t *cc_status) { @@ -621,6 +630,11 @@ bool anx7625_is_power_provider(uint8_t bus) { } } +int anx7625_get_hpd_event(uint8_t bus) { + int ret = anx7625_hpd_change_detect(bus); + return ret; +} + int i2c_writeb(uint8_t bus, uint8_t saddr, uint8_t offset, uint8_t val) { char cmd[2]; cmd[0] = offset; diff --git a/libraries/Arduino_H7_Video/src/anx7625.h b/libraries/Arduino_H7_Video/src/anx7625.h index a1ae467a9..146d09ec1 100644 --- a/libraries/Arduino_H7_Video/src/anx7625.h +++ b/libraries/Arduino_H7_Video/src/anx7625.h @@ -20,9 +20,10 @@ extern "C" { int anx7625_dp_start(uint8_t bus, const struct edid *edid, enum edid_modes mode = EDID_MODE_AUTO); int anx7625_dp_get_edid(uint8_t bus, struct edid *out); int anx7625_init(uint8_t bus); -void anx7625_wait_hpd_event(uint8_t bus); +int anx7625_wait_hpd_event(uint8_t bus); int anx7625_get_cc_status(uint8_t bus, uint8_t *cc_status); int anx7625_read_system_status(uint8_t bus, uint8_t *sys_status); bool anx7625_is_power_provider(uint8_t bus); +int anx7625_get_hpd_event(uint8_t bus); #endif /* _ANX7625_H */ diff --git a/libraries/Arduino_H7_Video/src/dsi.cpp b/libraries/Arduino_H7_Video/src/dsi.cpp index fc1c79948..77541d71c 100644 --- a/libraries/Arduino_H7_Video/src/dsi.cpp +++ b/libraries/Arduino_H7_Video/src/dsi.cpp @@ -48,9 +48,11 @@ static void dsi_layerInit(uint16_t LayerIndex, uint32_t FB_Address); int dsi_init(uint8_t bus, struct edid *edid, struct display_timing *dt) { #ifdef ARDUINO_GIGA static const uint32_t DSI_PLLNDIV = 125; - static const uint32_t DSI_PLLIDF = DSI_PLL_IN_DIV3; + static const uint32_t DSI_PLLIDF = DSI_PLL_IN_DIV4; static const uint32_t DSI_PLLODF = DSI_PLL_OUT_DIV1; static const uint32_t DSI_TXEXCAPECLOCKDIV = 4; + #undef HSE_VALUE + #define HSE_VALUE 16000000 #else static const uint32_t DSI_PLLNDIV = 40; static const uint32_t DSI_PLLIDF = DSI_PLL_IN_DIV2; @@ -321,7 +323,7 @@ uint32_t dsi_getFramebufferEnd(void) { return (FB_BASE_ADDRESS + 2 * (lcd_x_size * lcd_y_size * BYTES_PER_PIXEL)); } -void dsi_drawCurrentFrameBuffer(void) { +void dsi_drawCurrentFrameBuffer(bool reload) { int fb = pend_buffer++ % 2; /* Enable current LTDC layer */ @@ -329,6 +331,9 @@ void dsi_drawCurrentFrameBuffer(void) { /* Disable active LTDC layer */ __HAL_LTDC_LAYER_DISABLE(&(ltdc), !fb); + if (!reload) { + return; + } /* LTDC reload request within next vertical blanking */ reloadLTDC_status = 0; HAL_LTDC_Reload(<dc, LTDC_SRCR_VBR); @@ -407,4 +412,4 @@ extern "C" void HAL_LTDC_ReloadEventCallback(LTDC_HandleTypeDef *hltdc) { reloadLTDC_status = 1; } -/**** END OF FILE ****/ \ No newline at end of file +/**** END OF FILE ****/ diff --git a/libraries/Arduino_H7_Video/src/dsi.h b/libraries/Arduino_H7_Video/src/dsi.h index f2570c8e4..e3e5999bf 100644 --- a/libraries/Arduino_H7_Video/src/dsi.h +++ b/libraries/Arduino_H7_Video/src/dsi.h @@ -36,7 +36,7 @@ void dsi_lcdClear(uint32_t color); void dsi_lcdDrawImage(void *pSrc, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t ColorMode); void dsi_lcdFillArea(void *pDst, uint32_t xSize, uint32_t ySize, uint32_t ColorMode); void dsi_configueCLUT(uint32_t* clut); -void dsi_drawCurrentFrameBuffer(void); +void dsi_drawCurrentFrameBuffer(bool reload = true); uint32_t dsi_getCurrentFrameBuffer(void); uint32_t dsi_getActiveFrameBuffer(void); uint32_t dsi_getFramebufferEnd(void); diff --git a/libraries/Arduino_H7_Video/src/edid.c b/libraries/Arduino_H7_Video/src/edid.c index 76a6f8e1c..802483c2d 100644 --- a/libraries/Arduino_H7_Video/src/edid.c +++ b/libraries/Arduino_H7_Video/src/edid.c @@ -47,9 +47,12 @@ #define EDIDDEBUG(format, ...) \ printk(BIOS_SPEW, "%s: " format, __func__, ##__VA_ARGS__) #else - #define EDIDERROR(format, ...) - #define EDIDWARNING(format, ...) - #define EDIDDEBUG(format, ...) + #define EDIDERROR(format ...) \ + do { } while (0) + #define EDIDWARNING(format ...) \ + do { } while (0) + #define EDIDDEBUG(format ...) \ + do { } while (0) #endif struct edid_context { @@ -1034,7 +1037,7 @@ parse_extension(struct edid *out, unsigned char *x, struct edid_context *c) } static const struct { - int x, y, refresh; + unsigned int x, y, refresh; } established_timings[] = { /* 0x23 bit 7 - 0 */ {720, 400, 70}, diff --git a/libraries/Arduino_H7_Video/src/lv_conf.h b/libraries/Arduino_H7_Video/src/lv_conf.h index 56acd738c..e664bb2de 100644 --- a/libraries/Arduino_H7_Video/src/lv_conf.h +++ b/libraries/Arduino_H7_Video/src/lv_conf.h @@ -1,762 +1,6 @@ -/** - * @file lv_conf.h - * Configuration file for v8.3.5 - */ - -/* - * Copy this file as `lv_conf.h` - * 1. simply next to the `lvgl` folder - * 2. or any other places and - * - define `LV_CONF_INCLUDE_SIMPLE` - * - add the path as include path - */ - -/* clang-format off */ -#if 1 /*Set it to "1" to enable content*/ - -#ifndef LV_CONF_H -#define LV_CONF_H - -#include - -/*==================== - COLOR SETTINGS - *====================*/ - -/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/ -#define LV_COLOR_DEPTH 16 - -/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/ -#define LV_COLOR_16_SWAP 0 - -/*Enable features to draw on transparent background. - *It's required if opa, and transform_* style properties are used. - *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/ -#define LV_COLOR_SCREEN_TRANSP 0 - -/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. - * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ -#define LV_COLOR_MIX_ROUND_OFS 0 - -/*Images pixels with this color will not be drawn if they are chroma keyed)*/ -#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) /*pure green*/ - -/*========================= - MEMORY SETTINGS - *=========================*/ - -/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/ -#define LV_MEM_CUSTOM 0 -#if LV_MEM_CUSTOM == 0 - /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ - #define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/ - - /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ - #define LV_MEM_ADR 0 /*0: unused*/ - /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ - #if LV_MEM_ADR == 0 - #undef LV_MEM_POOL_INCLUDE - #undef LV_MEM_POOL_ALLOC - #endif - -#else /*LV_MEM_CUSTOM*/ - #define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ - #define LV_MEM_CUSTOM_ALLOC malloc - #define LV_MEM_CUSTOM_FREE free - #define LV_MEM_CUSTOM_REALLOC realloc -#endif /*LV_MEM_CUSTOM*/ - -/*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms. - *You will see an error log message if there wasn't enough buffers. */ -#define LV_MEM_BUF_MAX_NUM 16 - -/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/ -#define LV_MEMCPY_MEMSET_STD 0 - -/*==================== - HAL SETTINGS - *====================*/ - -/*Default display refresh period. LVG will redraw changed areas with this period time*/ -#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/ - -/*Input device read period in milliseconds*/ -#define LV_INDEV_DEF_READ_PERIOD 30 /*[ms]*/ - -/*Use a custom tick source that tells the elapsed time in milliseconds. - *It removes the need to manually update the tick with `lv_tick_inc()`)*/ -#define LV_TICK_CUSTOM 1 -#if LV_TICK_CUSTOM - #define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/ - #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/ - /*If using lvgl as ESP32 component*/ - // #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h" - // #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL)) -#endif /*LV_TICK_CUSTOM*/ - -/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. - *(Not so important, you can adjust it to modify default sizes and spaces)*/ -#define LV_DPI_DEF 130 /*[px/inch]*/ - -/*======================= - * FEATURE CONFIGURATION - *=======================*/ - -/*------------- - * Drawing - *-----------*/ - -/*Enable complex draw engine. - *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/ -#define LV_DRAW_COMPLEX 1 -#if LV_DRAW_COMPLEX != 0 - - /*Allow buffering some shadow calculation. - *LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` - *Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/ - #define LV_SHADOW_CACHE_SIZE 0 - - /* Set number of maximally cached circle data. - * The circumference of 1/4 circle are saved for anti-aliasing - * radius * 4 bytes are used per circle (the most often used radiuses are saved) - * 0: to disable caching */ - #define LV_CIRCLE_CACHE_SIZE 4 -#endif /*LV_DRAW_COMPLEX*/ - -/** - * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer - * and blend it as an image with the given opacity. - * Note that `bg_opa`, `text_opa` etc don't require buffering into layer) - * The widget can be buffered in smaller chunks to avoid using large buffers. - * - * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it - * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes] used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated. - * - * Both buffer sizes are in bytes. - * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers - * and can't be drawn in chunks. So these settings affects only widgets with opacity. - */ -#define LV_LAYER_SIMPLE_BUF_SIZE (24 * 1024) -#define LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024) - -/*Default image cache size. Image caching keeps the images opened. - *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added) - *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. - *However the opened images might consume additional RAM. - *0: to disable caching*/ -#define LV_IMG_CACHE_DEF_SIZE 0 - -/*Number of stops allowed per gradient. Increase this to allow more stops. - *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ -#define LV_GRADIENT_MAX_STOPS 2 - -/*Default gradient buffer size. - *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. - *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. - *If the cache is too small the map will be allocated only while it's required for the drawing. - *0 mean no caching.*/ -#define LV_GRAD_CACHE_DEF_SIZE 0 - -/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) - *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface - *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ -#define LV_DITHER_GRADIENT 0 -#if LV_DITHER_GRADIENT - /*Add support for error diffusion dithering. - *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. - *The increase in memory consumption is (24 bits * object's width)*/ - #define LV_DITHER_ERROR_DIFFUSION 0 -#endif - -/*Maximum buffer size to allocate for rotation. - *Only used if software rotation is enabled in the display driver.*/ -#define LV_DISP_ROT_MAX_BUF (10*1024) - -/*------------- - * GPU - *-----------*/ - -/*Use Arm's 2D acceleration library Arm-2D */ -#define LV_USE_GPU_ARM2D 0 - -/*Use STM32's DMA2D (aka Chrom Art) GPU*/ -#define LV_USE_GPU_STM32_DMA2D 0 -#if LV_USE_GPU_STM32_DMA2D - /*Must be defined to include path of CMSIS header of target processor - e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ - #define LV_GPU_DMA2D_CMSIS_INCLUDE -#endif - -/*Use SWM341's DMA2D GPU*/ -#define LV_USE_GPU_SWM341_DMA2D 0 -#if LV_USE_GPU_SWM341_DMA2D - #define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h" -#endif - -/*Use NXP's PXP GPU iMX RTxxx platforms*/ -#define LV_USE_GPU_NXP_PXP 0 -#if LV_USE_GPU_NXP_PXP - /*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) - * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS - * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. - *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() - */ - #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 -#endif - -/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/ -#define LV_USE_GPU_NXP_VG_LITE 0 - -/*Use SDL renderer API*/ -#define LV_USE_GPU_SDL 0 -#if LV_USE_GPU_SDL - #define LV_GPU_SDL_INCLUDE_PATH - /*Texture cache size, 8MB by default*/ - #define LV_GPU_SDL_LRU_SIZE (1024 * 1024 * 8) - /*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/ - #define LV_GPU_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6)) -#endif - -/*------------- - * Logging - *-----------*/ - -/*Enable the log module*/ -#define LV_USE_LOG 0 -#if LV_USE_LOG - - /*How important log should be added: - *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information - *LV_LOG_LEVEL_INFO Log important events - *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem - *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail - *LV_LOG_LEVEL_USER Only logs added by the user - *LV_LOG_LEVEL_NONE Do not log anything*/ - #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN - - /*1: Print the log with 'printf'; - *0: User need to register a callback with `lv_log_register_print_cb()`*/ - #define LV_LOG_PRINTF 0 - - /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ - #define LV_LOG_TRACE_MEM 1 - #define LV_LOG_TRACE_TIMER 1 - #define LV_LOG_TRACE_INDEV 1 - #define LV_LOG_TRACE_DISP_REFR 1 - #define LV_LOG_TRACE_EVENT 1 - #define LV_LOG_TRACE_OBJ_CREATE 1 - #define LV_LOG_TRACE_LAYOUT 1 - #define LV_LOG_TRACE_ANIM 1 - -#endif /*LV_USE_LOG*/ - -/*------------- - * Asserts - *-----------*/ - -/*Enable asserts if an operation is failed or an invalid data is found. - *If LV_USE_LOG is enabled an error message will be printed on failure*/ -#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ -#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ -#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ -#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ -#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ - -/*Add a custom handler when assert happens e.g. to restart the MCU*/ -#define LV_ASSERT_HANDLER_INCLUDE -#define LV_ASSERT_HANDLER while(1); /*Halt by default*/ - -/*------------- - * Others - *-----------*/ - -/*1: Show CPU usage and FPS count*/ -#define LV_USE_PERF_MONITOR 0 -#if LV_USE_PERF_MONITOR - #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT -#endif - -/*1: Show the used memory and the memory fragmentation - * Requires LV_MEM_CUSTOM = 0*/ -#define LV_USE_MEM_MONITOR 0 -#if LV_USE_MEM_MONITOR - #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT -#endif - -/*1: Draw random colored rectangles over the redrawn areas*/ -#define LV_USE_REFR_DEBUG 0 - -/*Change the built in (v)snprintf functions*/ -#define LV_SPRINTF_CUSTOM 0 -#if LV_SPRINTF_CUSTOM - #define LV_SPRINTF_INCLUDE - #define lv_snprintf snprintf - #define lv_vsnprintf vsnprintf -#else /*LV_SPRINTF_CUSTOM*/ - #define LV_SPRINTF_USE_FLOAT 0 -#endif /*LV_SPRINTF_CUSTOM*/ - -#define LV_USE_USER_DATA 1 - -/*Garbage Collector settings - *Used if lvgl is bound to higher level language and the memory is managed by that language*/ -#define LV_ENABLE_GC 0 -#if LV_ENABLE_GC != 0 - #define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ -#endif /*LV_ENABLE_GC*/ - -/*===================== - * COMPILER SETTINGS - *====================*/ - -/*For big endian systems set to 1*/ -#define LV_BIG_ENDIAN_SYSTEM 0 - -/*Define a custom attribute to `lv_tick_inc` function*/ -#define LV_ATTRIBUTE_TICK_INC - -/*Define a custom attribute to `lv_timer_handler` function*/ -#define LV_ATTRIBUTE_TIMER_HANDLER - -/*Define a custom attribute to `lv_disp_flush_ready` function*/ -#define LV_ATTRIBUTE_FLUSH_READY - -/*Required alignment size for buffers*/ -#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 - -/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). - * E.g. __attribute__((aligned(4)))*/ -#define LV_ATTRIBUTE_MEM_ALIGN - -/*Attribute to mark large constant arrays for example font's bitmaps*/ -#define LV_ATTRIBUTE_LARGE_CONST - -/*Compiler prefix for a big array declaration in RAM*/ -#define LV_ATTRIBUTE_LARGE_RAM_ARRAY - -/*Place performance critical functions into a faster memory (e.g RAM)*/ -#define LV_ATTRIBUTE_FAST_MEM - -/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/ -#define LV_ATTRIBUTE_DMA - -/*Export integer constant to binding. This macro is used with constants in the form of LV_ that - *should also appear on LVGL binding API such as Micropython.*/ -#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ - -/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/ -#define LV_USE_LARGE_COORD 0 - -/*================== - * FONT USAGE - *===================*/ - -/*Montserrat fonts with ASCII range and some symbols using bpp = 4 - *https://fonts.google.com/specimen/Montserrat*/ -#define LV_FONT_MONTSERRAT_8 0 -#define LV_FONT_MONTSERRAT_10 0 -#define LV_FONT_MONTSERRAT_12 0 -#define LV_FONT_MONTSERRAT_14 1 -#define LV_FONT_MONTSERRAT_16 0 -#define LV_FONT_MONTSERRAT_18 0 -#define LV_FONT_MONTSERRAT_20 0 -#define LV_FONT_MONTSERRAT_22 0 -#define LV_FONT_MONTSERRAT_24 0 -#define LV_FONT_MONTSERRAT_26 0 -#define LV_FONT_MONTSERRAT_28 0 -#define LV_FONT_MONTSERRAT_30 0 -#define LV_FONT_MONTSERRAT_32 0 -#define LV_FONT_MONTSERRAT_34 0 -#define LV_FONT_MONTSERRAT_36 0 -#define LV_FONT_MONTSERRAT_38 0 -#define LV_FONT_MONTSERRAT_40 0 -#define LV_FONT_MONTSERRAT_42 0 -#define LV_FONT_MONTSERRAT_44 0 -#define LV_FONT_MONTSERRAT_46 0 -#define LV_FONT_MONTSERRAT_48 0 - -/*Demonstrate special features*/ -#define LV_FONT_MONTSERRAT_12_SUBPX 0 -#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/ -#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/ -#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ - -/*Pixel perfect monospace fonts*/ -#define LV_FONT_UNSCII_8 0 -#define LV_FONT_UNSCII_16 0 - -/*Optionally declare custom fonts here. - *You can use these fonts as default font too and they will be available globally. - *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ -#define LV_FONT_CUSTOM_DECLARE - -/*Always set a default font*/ -#define LV_FONT_DEFAULT &lv_font_montserrat_14 - -/*Enable handling large font and/or fonts with a lot of characters. - *The limit depends on the font size, font face and bpp. - *Compiler error will be triggered if a font needs it.*/ -#define LV_FONT_FMT_TXT_LARGE 0 - -/*Enables/disables support for compressed fonts.*/ -#define LV_USE_FONT_COMPRESSED 0 - -/*Enable subpixel rendering*/ -#define LV_USE_FONT_SUBPX 0 -#if LV_USE_FONT_SUBPX - /*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/ - #define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ -#endif - -/*Enable drawing placeholders when glyph dsc is not found*/ -#define LV_USE_FONT_PLACEHOLDER 1 - -/*================= - * TEXT SETTINGS - *=================*/ - -/** - * Select a character encoding for strings. - * Your IDE or editor should have the same character encoding - * - LV_TXT_ENC_UTF8 - * - LV_TXT_ENC_ASCII - */ -#define LV_TXT_ENC LV_TXT_ENC_UTF8 - -/*Can break (wrap) texts on these chars*/ -#define LV_TXT_BREAK_CHARS " ,.;:-_" - -/*If a word is at least this long, will break wherever "prettiest" - *To disable, set to a value <= 0*/ -#define LV_TXT_LINE_BREAK_LONG_LEN 0 - -/*Minimum number of characters in a long word to put on a line before a break. - *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ -#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 - -/*Minimum number of characters in a long word to put on a line after a break. - *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ -#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 - -/*The control character to use for signalling text recoloring.*/ -#define LV_TXT_COLOR_CMD "#" - -/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. - *The direction will be processed according to the Unicode Bidirectional Algorithm: - *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ -#define LV_USE_BIDI 0 -#if LV_USE_BIDI - /*Set the default direction. Supported values: - *`LV_BASE_DIR_LTR` Left-to-Right - *`LV_BASE_DIR_RTL` Right-to-Left - *`LV_BASE_DIR_AUTO` detect texts base direction*/ - #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO -#endif - -/*Enable Arabic/Persian processing - *In these languages characters should be replaced with an other form based on their position in the text*/ -#define LV_USE_ARABIC_PERSIAN_CHARS 0 - -/*================== - * WIDGET USAGE - *================*/ - -/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ - -#define LV_USE_ARC 1 - -#define LV_USE_BAR 1 - -#define LV_USE_BTN 1 - -#define LV_USE_BTNMATRIX 1 - -#define LV_USE_CANVAS 1 - -#define LV_USE_CHECKBOX 1 - -#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/ - -#define LV_USE_IMG 1 /*Requires: lv_label*/ - -#define LV_USE_LABEL 1 -#if LV_USE_LABEL - #define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ - #define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ -#endif - -#define LV_USE_LINE 1 - -#define LV_USE_ROLLER 1 /*Requires: lv_label*/ -#if LV_USE_ROLLER - #define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/ -#endif - -#define LV_USE_SLIDER 1 /*Requires: lv_bar*/ - -#define LV_USE_SWITCH 1 - -#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ -#if LV_USE_TEXTAREA != 0 - #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ -#endif - -#define LV_USE_TABLE 1 - -/*================== - * EXTRA COMPONENTS - *==================*/ - -/*----------- - * Widgets - *----------*/ -#define LV_USE_ANIMIMG 1 - -#define LV_USE_CALENDAR 1 -#if LV_USE_CALENDAR - #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 - #if LV_CALENDAR_WEEK_STARTS_MONDAY - #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} - #else - #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} - #endif - - #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} - #define LV_USE_CALENDAR_HEADER_ARROW 1 - #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 -#endif /*LV_USE_CALENDAR*/ - -#define LV_USE_CHART 1 - -#define LV_USE_COLORWHEEL 1 - -#define LV_USE_IMGBTN 1 - -#define LV_USE_KEYBOARD 1 - -#define LV_USE_LED 1 - -#define LV_USE_LIST 1 - -#define LV_USE_MENU 1 - -#define LV_USE_METER 1 - -#define LV_USE_MSGBOX 1 - -#define LV_USE_SPAN 1 -#if LV_USE_SPAN - /*A line text can contain maximum num of span descriptor */ - #define LV_SPAN_SNIPPET_STACK_SIZE 64 -#endif - -#define LV_USE_SPINBOX 1 - -#define LV_USE_SPINNER 1 - -#define LV_USE_TABVIEW 1 - -#define LV_USE_TILEVIEW 1 - -#define LV_USE_WIN 1 - -/*----------- - * Themes - *----------*/ - -/*A simple, impressive and very complete theme*/ -#define LV_USE_THEME_DEFAULT 1 -#if LV_USE_THEME_DEFAULT - - /*0: Light mode; 1: Dark mode*/ - #define LV_THEME_DEFAULT_DARK 0 - - /*1: Enable grow on press*/ - #define LV_THEME_DEFAULT_GROW 1 - - /*Default transition time in [ms]*/ - #define LV_THEME_DEFAULT_TRANSITION_TIME 80 -#endif /*LV_USE_THEME_DEFAULT*/ - -/*A very simple theme that is a good starting point for a custom theme*/ -#define LV_USE_THEME_BASIC 1 - -/*A theme designed for monochrome displays*/ -#define LV_USE_THEME_MONO 1 - -/*----------- - * Layouts - *----------*/ - -/*A layout similar to Flexbox in CSS.*/ -#define LV_USE_FLEX 1 - -/*A layout similar to Grid in CSS.*/ -#define LV_USE_GRID 1 - -/*--------------------- - * 3rd party libraries - *--------------------*/ - -/*File system interfaces for common APIs */ - -/*API for fopen, fread, etc*/ -#define LV_USE_FS_STDIO 0 -#if LV_USE_FS_STDIO - #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ - #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ - #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ -#endif - -/*API for open, read, etc*/ -#define LV_USE_FS_POSIX 0 -#if LV_USE_FS_POSIX - #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ - #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ - #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ -#endif - -/*API for CreateFile, ReadFile, etc*/ -#define LV_USE_FS_WIN32 0 -#if LV_USE_FS_WIN32 - #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ - #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ - #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ -#endif - -/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ -#define LV_USE_FS_FATFS 0 -#if LV_USE_FS_FATFS - #define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ - #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ -#endif - -/*PNG decoder library*/ -#define LV_USE_PNG 0 - -/*BMP decoder library*/ -#define LV_USE_BMP 0 - -/* JPG + split JPG decoder library. - * Split JPG is a custom format optimized for embedded systems. */ -#define LV_USE_SJPG 0 - -/*GIF decoder library*/ -#define LV_USE_GIF 0 - -/*QR code library*/ -#define LV_USE_QRCODE 0 - -/*FreeType library*/ -#define LV_USE_FREETYPE 0 -#if LV_USE_FREETYPE - /*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/ - #define LV_FREETYPE_CACHE_SIZE (16 * 1024) - #if LV_FREETYPE_CACHE_SIZE >= 0 - /* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */ - /* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */ - /* if font size >= 256, must be configured as image cache */ - #define LV_FREETYPE_SBIT_CACHE 0 - /* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ - /* (0:use system defaults) */ - #define LV_FREETYPE_CACHE_FT_FACES 0 - #define LV_FREETYPE_CACHE_FT_SIZES 0 - #endif -#endif - -/*Rlottie library*/ -#define LV_USE_RLOTTIE 0 - -/*FFmpeg library for image decoding and playing videos - *Supports all major image formats so do not enable other image decoder with it*/ -#define LV_USE_FFMPEG 0 -#if LV_USE_FFMPEG - /*Dump input information to stderr*/ - #define LV_FFMPEG_DUMP_FORMAT 0 -#endif - -/*----------- - * Others - *----------*/ - -/*1: Enable API to take snapshot for object*/ -#define LV_USE_SNAPSHOT 0 - -/*1: Enable Monkey test*/ -#define LV_USE_MONKEY 0 - -/*1: Enable grid navigation*/ -#define LV_USE_GRIDNAV 0 - -/*1: Enable lv_obj fragment*/ -#define LV_USE_FRAGMENT 0 - -/*1: Support using images as font in label or span widgets */ -#define LV_USE_IMGFONT 0 - -/*1: Enable a published subscriber based messaging system */ -#define LV_USE_MSG 0 - -/*1: Enable Pinyin input method*/ -/*Requires: lv_keyboard*/ -#define LV_USE_IME_PINYIN 0 -#if LV_USE_IME_PINYIN - /*1: Use default thesaurus*/ - /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ - #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 - /*Set the maximum number of candidate panels that can be displayed*/ - /*This needs to be adjusted according to the size of the screen*/ - #define LV_IME_PINYIN_CAND_TEXT_NUM 6 - - /*Use 9 key input(k9)*/ - #define LV_IME_PINYIN_USE_K9_MODE 1 - #if LV_IME_PINYIN_USE_K9_MODE == 1 - #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 - #endif // LV_IME_PINYIN_USE_K9_MODE -#endif - -/*================== -* EXAMPLES -*==================*/ - -/*Enable the examples to be built with the library*/ -#define LV_BUILD_EXAMPLES 1 - -/*=================== - * DEMO USAGE - ====================*/ - -/*Show some widget. It might be required to increase `LV_MEM_SIZE` */ -#define LV_USE_DEMO_WIDGETS 0 -#if LV_USE_DEMO_WIDGETS -#define LV_DEMO_WIDGETS_SLIDESHOW 0 -#endif - -/*Demonstrate the usage of encoder and keyboard*/ -#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 - -/*Benchmark your system*/ -#define LV_USE_DEMO_BENCHMARK 0 -#if LV_USE_DEMO_BENCHMARK -/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ -#define LV_DEMO_BENCHMARK_RGB565A8 0 -#endif - -/*Stress test for LVGL*/ -#define LV_USE_DEMO_STRESS 0 - -/*Music player demo*/ -#define LV_USE_DEMO_MUSIC 0 -#if LV_USE_DEMO_MUSIC - #define LV_DEMO_MUSIC_SQUARE 0 - #define LV_DEMO_MUSIC_LANDSCAPE 0 - #define LV_DEMO_MUSIC_ROUND 0 - #define LV_DEMO_MUSIC_LARGE 0 - #define LV_DEMO_MUSIC_AUTO_PLAY 0 -#endif - -/*--END OF LV_CONF_H--*/ - -#endif /*LV_CONF_H*/ - -#endif /*End of "Content enable"*/ +//#if (LVGL_VERSION_MAJOR == 9) +#if __has_include("draw/sw/blend/neon/lv_blend_neon.h") +#include "lv_conf_9.h" +#else +#include "lv_conf_8.h" +#endif \ No newline at end of file diff --git a/libraries/Arduino_H7_Video/src/lv_conf_8.h b/libraries/Arduino_H7_Video/src/lv_conf_8.h new file mode 100644 index 000000000..c69b43e27 --- /dev/null +++ b/libraries/Arduino_H7_Video/src/lv_conf_8.h @@ -0,0 +1,762 @@ +/** + * @file lv_conf.h + * Configuration file for v8.3.5 + */ + +/* + * Copy this file as `lv_conf.h` + * 1. simply next to the `lvgl` folder + * 2. or any other places and + * - define `LV_CONF_INCLUDE_SIMPLE` + * - add the path as include path + */ + +/* clang-format off */ +#if 1 /*Set it to "1" to enable content*/ + +#ifndef LV_CONF_H +#define LV_CONF_H + +#include + +/*==================== + COLOR SETTINGS + *====================*/ + +/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/ +#define LV_COLOR_DEPTH 16 + +/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/ +#define LV_COLOR_16_SWAP 0 + +/*Enable features to draw on transparent background. + *It's required if opa, and transform_* style properties are used. + *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/ +#define LV_COLOR_SCREEN_TRANSP 0 + +/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. + * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS 0 + +/*Images pixels with this color will not be drawn if they are chroma keyed)*/ +#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) /*pure green*/ + +/*========================= + MEMORY SETTINGS + *=========================*/ + +/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/ +#define LV_MEM_CUSTOM 0 +#if LV_MEM_CUSTOM == 0 + /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ + #define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/ + + /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ + #define LV_MEM_ADR 0 /*0: unused*/ + /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ + #if LV_MEM_ADR == 0 + #undef LV_MEM_POOL_INCLUDE + #undef LV_MEM_POOL_ALLOC + #endif + +#else /*LV_MEM_CUSTOM*/ + #define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ + #define LV_MEM_CUSTOM_ALLOC malloc + #define LV_MEM_CUSTOM_FREE free + #define LV_MEM_CUSTOM_REALLOC realloc +#endif /*LV_MEM_CUSTOM*/ + +/*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms. + *You will see an error log message if there wasn't enough buffers. */ +#define LV_MEM_BUF_MAX_NUM 16 + +/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/ +#define LV_MEMCPY_MEMSET_STD 0 + +/*==================== + HAL SETTINGS + *====================*/ + +/*Default display refresh period. LVG will redraw changed areas with this period time*/ +#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/ + +/*Input device read period in milliseconds*/ +#define LV_INDEV_DEF_READ_PERIOD 30 /*[ms]*/ + +/*Use a custom tick source that tells the elapsed time in milliseconds. + *It removes the need to manually update the tick with `lv_tick_inc()`)*/ +#define LV_TICK_CUSTOM 1 +#if LV_TICK_CUSTOM + #define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/ + #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/ + /*If using lvgl as ESP32 component*/ + // #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h" + // #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL)) +#endif /*LV_TICK_CUSTOM*/ + +/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. + *(Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI_DEF 130 /*[px/inch]*/ + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + +/*------------- + * Drawing + *-----------*/ + +/*Enable complex draw engine. + *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/ +#define LV_DRAW_COMPLEX 1 +#if LV_DRAW_COMPLEX != 0 + + /*Allow buffering some shadow calculation. + *LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` + *Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/ + #define LV_SHADOW_CACHE_SIZE 0 + + /* Set number of maximally cached circle data. + * The circumference of 1/4 circle are saved for anti-aliasing + * radius * 4 bytes are used per circle (the most often used radiuses are saved) + * 0: to disable caching */ + #define LV_CIRCLE_CACHE_SIZE 4 +#endif /*LV_DRAW_COMPLEX*/ + +/** + * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer + * and blend it as an image with the given opacity. + * Note that `bg_opa`, `text_opa` etc don't require buffering into layer) + * The widget can be buffered in smaller chunks to avoid using large buffers. + * + * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it + * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes] used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated. + * + * Both buffer sizes are in bytes. + * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers + * and can't be drawn in chunks. So these settings affects only widgets with opacity. + */ +#define LV_LAYER_SIMPLE_BUF_SIZE (24 * 1024) +#define LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024) + +/*Default image cache size. Image caching keeps the images opened. + *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added) + *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. + *However the opened images might consume additional RAM. + *0: to disable caching*/ +#define LV_IMG_CACHE_DEF_SIZE 0 + +/*Number of stops allowed per gradient. Increase this to allow more stops. + *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ +#define LV_GRADIENT_MAX_STOPS 2 + +/*Default gradient buffer size. + *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. + *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. + *If the cache is too small the map will be allocated only while it's required for the drawing. + *0 mean no caching.*/ +#define LV_GRAD_CACHE_DEF_SIZE 0 + +/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) + *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface + *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ +#define LV_DITHER_GRADIENT 0 +#if LV_DITHER_GRADIENT + /*Add support for error diffusion dithering. + *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. + *The increase in memory consumption is (24 bits * object's width)*/ + #define LV_DITHER_ERROR_DIFFUSION 0 +#endif + +/*Maximum buffer size to allocate for rotation. + *Only used if software rotation is enabled in the display driver.*/ +#define LV_DISP_ROT_MAX_BUF (10*1024) + +/*------------- + * GPU + *-----------*/ + +/*Use Arm's 2D acceleration library Arm-2D */ +#define LV_USE_GPU_ARM2D 0 + +/*Use STM32's DMA2D (aka Chrom Art) GPU*/ +#define LV_USE_GPU_STM32_DMA2D 0 +#if LV_USE_GPU_STM32_DMA2D + /*Must be defined to include path of CMSIS header of target processor + e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ + #define LV_GPU_DMA2D_CMSIS_INCLUDE +#endif + +/*Use SWM341's DMA2D GPU*/ +#define LV_USE_GPU_SWM341_DMA2D 0 +#if LV_USE_GPU_SWM341_DMA2D + #define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h" +#endif + +/*Use NXP's PXP GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_PXP 0 +#if LV_USE_GPU_NXP_PXP + /*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) + * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS + * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. + *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() + */ + #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +#endif + +/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_VG_LITE 0 + +/*Use SDL renderer API*/ +#define LV_USE_GPU_SDL 0 +#if LV_USE_GPU_SDL + #define LV_GPU_SDL_INCLUDE_PATH + /*Texture cache size, 8MB by default*/ + #define LV_GPU_SDL_LRU_SIZE (1024 * 1024 * 8) + /*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/ + #define LV_GPU_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6)) +#endif + +/*------------- + * Logging + *-----------*/ + +/*Enable the log module*/ +#define LV_USE_LOG 0 +#if LV_USE_LOG + + /*How important log should be added: + *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information + *LV_LOG_LEVEL_INFO Log important events + *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem + *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail + *LV_LOG_LEVEL_USER Only logs added by the user + *LV_LOG_LEVEL_NONE Do not log anything*/ + #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN + + /*1: Print the log with 'printf'; + *0: User need to register a callback with `lv_log_register_print_cb()`*/ + #define LV_LOG_PRINTF 0 + + /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ + #define LV_LOG_TRACE_MEM 1 + #define LV_LOG_TRACE_TIMER 1 + #define LV_LOG_TRACE_INDEV 1 + #define LV_LOG_TRACE_DISP_REFR 1 + #define LV_LOG_TRACE_EVENT 1 + #define LV_LOG_TRACE_OBJ_CREATE 1 + #define LV_LOG_TRACE_LAYOUT 1 + #define LV_LOG_TRACE_ANIM 1 + +#endif /*LV_USE_LOG*/ + +/*------------- + * Asserts + *-----------*/ + +/*Enable asserts if an operation is failed or an invalid data is found. + *If LV_USE_LOG is enabled an error message will be printed on failure*/ +#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ +#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ +#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ + +/*Add a custom handler when assert happens e.g. to restart the MCU*/ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /*Halt by default*/ + +/*------------- + * Others + *-----------*/ + +/*1: Show CPU usage and FPS count*/ +#define LV_USE_PERF_MONITOR 0 +#if LV_USE_PERF_MONITOR + #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT +#endif + +/*1: Show the used memory and the memory fragmentation + * Requires LV_MEM_CUSTOM = 0*/ +#define LV_USE_MEM_MONITOR 0 +#if LV_USE_MEM_MONITOR + #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT +#endif + +/*1: Draw random colored rectangles over the redrawn areas*/ +#define LV_USE_REFR_DEBUG 0 + +/*Change the built in (v)snprintf functions*/ +#define LV_SPRINTF_CUSTOM 0 +#if LV_SPRINTF_CUSTOM + #define LV_SPRINTF_INCLUDE + #define lv_snprintf snprintf + #define lv_vsnprintf vsnprintf +#else /*LV_SPRINTF_CUSTOM*/ + #define LV_SPRINTF_USE_FLOAT 0 +#endif /*LV_SPRINTF_CUSTOM*/ + +#define LV_USE_USER_DATA 1 + +/*Garbage Collector settings + *Used if lvgl is bound to higher level language and the memory is managed by that language*/ +#define LV_ENABLE_GC 0 +#if LV_ENABLE_GC != 0 + #define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ +#endif /*LV_ENABLE_GC*/ + +/*===================== + * COMPILER SETTINGS + *====================*/ + +/*For big endian systems set to 1*/ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/*Define a custom attribute to `lv_tick_inc` function*/ +#define LV_ATTRIBUTE_TICK_INC + +/*Define a custom attribute to `lv_timer_handler` function*/ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/*Define a custom attribute to `lv_disp_flush_ready` function*/ +#define LV_ATTRIBUTE_FLUSH_READY + +/*Required alignment size for buffers*/ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). + * E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/*Attribute to mark large constant arrays for example font's bitmaps*/ +#define LV_ATTRIBUTE_LARGE_CONST + +/*Compiler prefix for a big array declaration in RAM*/ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/*Place performance critical functions into a faster memory (e.g RAM)*/ +#define LV_ATTRIBUTE_FAST_MEM + +/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/ +#define LV_ATTRIBUTE_DMA + +/*Export integer constant to binding. This macro is used with constants in the form of LV_ that + *should also appear on LVGL binding API such as Micropython.*/ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ + +/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/ +#define LV_USE_LARGE_COORD 0 + +/*================== + * FONT USAGE + *===================*/ + +/*Montserrat fonts with ASCII range and some symbols using bpp = 4 + *https://fonts.google.com/specimen/Montserrat*/ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 0 +#define LV_FONT_MONTSERRAT_12 0 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 0 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 0 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/*Demonstrate special features*/ +#define LV_FONT_MONTSERRAT_12_SUBPX 0 +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/ +#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ + +/*Pixel perfect monospace fonts*/ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/*Optionally declare custom fonts here. + *You can use these fonts as default font too and they will be available globally. + *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ +#define LV_FONT_CUSTOM_DECLARE + +/*Always set a default font*/ +#define LV_FONT_DEFAULT &lv_font_montserrat_14 + +/*Enable handling large font and/or fonts with a lot of characters. + *The limit depends on the font size, font face and bpp. + *Compiler error will be triggered if a font needs it.*/ +#define LV_FONT_FMT_TXT_LARGE 0 + +/*Enables/disables support for compressed fonts.*/ +#define LV_USE_FONT_COMPRESSED 0 + +/*Enable subpixel rendering*/ +#define LV_USE_FONT_SUBPX 0 +#if LV_USE_FONT_SUBPX + /*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/ + #define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ +#endif + +/*Enable drawing placeholders when glyph dsc is not found*/ +#define LV_USE_FONT_PLACEHOLDER 1 + +/*================= + * TEXT SETTINGS + *=================*/ + +/** + * Select a character encoding for strings. + * Your IDE or editor should have the same character encoding + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_" + +/*If a word is at least this long, will break wherever "prettiest" + *To disable, set to a value <= 0*/ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/*Minimum number of characters in a long word to put on a line before a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/*Minimum number of characters in a long word to put on a line after a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/*The control character to use for signalling text recoloring.*/ +#define LV_TXT_COLOR_CMD "#" + +/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. + *The direction will be processed according to the Unicode Bidirectional Algorithm: + *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI + /*Set the default direction. Supported values: + *`LV_BASE_DIR_LTR` Left-to-Right + *`LV_BASE_DIR_RTL` Right-to-Left + *`LV_BASE_DIR_AUTO` detect texts base direction*/ + #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/*Enable Arabic/Persian processing + *In these languages characters should be replaced with an other form based on their position in the text*/ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*================== + * WIDGET USAGE + *================*/ + +/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ + +#define LV_USE_ARC 1 + +#define LV_USE_BAR 1 + +#define LV_USE_BTN 1 + +#define LV_USE_BTNMATRIX 1 + +#define LV_USE_CANVAS 1 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/ + +#define LV_USE_IMG 1 /*Requires: lv_label*/ + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL + #define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ + #define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ +#endif + +#define LV_USE_LINE 1 + +#define LV_USE_ROLLER 1 /*Requires: lv_label*/ +#if LV_USE_ROLLER + #define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/ +#endif + +#define LV_USE_SLIDER 1 /*Requires: lv_bar*/ + +#define LV_USE_SWITCH 1 + +#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +#define LV_USE_TABLE 1 + +/*================== + * EXTRA COMPONENTS + *==================*/ + +/*----------- + * Widgets + *----------*/ +#define LV_USE_ANIMIMG 1 + +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR + #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 + #if LV_CALENDAR_WEEK_STARTS_MONDAY + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} + #else + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} + #endif + + #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} + #define LV_USE_CALENDAR_HEADER_ARROW 1 + #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CHART 1 + +#define LV_USE_COLORWHEEL 1 + +#define LV_USE_IMGBTN 1 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LED 1 + +#define LV_USE_LIST 1 + +#define LV_USE_MENU 1 + +#define LV_USE_METER 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_SPAN 1 +#if LV_USE_SPAN + /*A line text can contain maximum num of span descriptor */ + #define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +#define LV_USE_SPINBOX 1 + +#define LV_USE_SPINNER 1 + +#define LV_USE_TABVIEW 1 + +#define LV_USE_TILEVIEW 1 + +#define LV_USE_WIN 1 + +/*----------- + * Themes + *----------*/ + +/*A simple, impressive and very complete theme*/ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + + /*0: Light mode; 1: Dark mode*/ + #define LV_THEME_DEFAULT_DARK 0 + + /*1: Enable grow on press*/ + #define LV_THEME_DEFAULT_GROW 1 + + /*Default transition time in [ms]*/ + #define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/*A very simple theme that is a good starting point for a custom theme*/ +#define LV_USE_THEME_BASIC 1 + +/*A theme designed for monochrome displays*/ +#define LV_USE_THEME_MONO 1 + +/*----------- + * Layouts + *----------*/ + +/*A layout similar to Flexbox in CSS.*/ +#define LV_USE_FLEX 1 + +/*A layout similar to Grid in CSS.*/ +#define LV_USE_GRID 1 + +/*--------------------- + * 3rd party libraries + *--------------------*/ + +/*File system interfaces for common APIs */ + +/*API for fopen, fread, etc*/ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO + #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for open, read, etc*/ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX + #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for CreateFile, ReadFile, etc*/ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 + #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS + #define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*PNG decoder library*/ +#define LV_USE_PNG 0 + +/*BMP decoder library*/ +#define LV_USE_BMP 0 + +/* JPG + split JPG decoder library. + * Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_SJPG 0 + +/*GIF decoder library*/ +#define LV_USE_GIF 0 + +/*QR code library*/ +#define LV_USE_QRCODE 0 + +/*FreeType library*/ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE + /*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/ + #define LV_FREETYPE_CACHE_SIZE (16 * 1024) + #if LV_FREETYPE_CACHE_SIZE >= 0 + /* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */ + /* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */ + /* if font size >= 256, must be configured as image cache */ + #define LV_FREETYPE_SBIT_CACHE 0 + /* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ + /* (0:use system defaults) */ + #define LV_FREETYPE_CACHE_FT_FACES 0 + #define LV_FREETYPE_CACHE_FT_SIZES 0 + #endif +#endif + +/*Rlottie library*/ +#define LV_USE_RLOTTIE 0 + +/*FFmpeg library for image decoding and playing videos + *Supports all major image formats so do not enable other image decoder with it*/ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG + /*Dump input information to stderr*/ + #define LV_FFMPEG_DUMP_FORMAT 0 +#endif + +/*----------- + * Others + *----------*/ + +/*1: Enable API to take snapshot for object*/ +#define LV_USE_SNAPSHOT 0 + +/*1: Enable Monkey test*/ +#define LV_USE_MONKEY 0 + +/*1: Enable grid navigation*/ +#define LV_USE_GRIDNAV 0 + +/*1: Enable lv_obj fragment*/ +#define LV_USE_FRAGMENT 0 + +/*1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 + +/*1: Enable a published subscriber based messaging system */ +#define LV_USE_MSG 0 + +/*1: Enable Pinyin input method*/ +/*Requires: lv_keyboard*/ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN + /*1: Use default thesaurus*/ + /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ + #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 + /*Set the maximum number of candidate panels that can be displayed*/ + /*This needs to be adjusted according to the size of the screen*/ + #define LV_IME_PINYIN_CAND_TEXT_NUM 6 + + /*Use 9 key input(k9)*/ + #define LV_IME_PINYIN_USE_K9_MODE 1 + #if LV_IME_PINYIN_USE_K9_MODE == 1 + #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 + #endif // LV_IME_PINYIN_USE_K9_MODE +#endif + +/*================== +* EXAMPLES +*==================*/ + +/*Enable the examples to be built with the library*/ +#define LV_BUILD_EXAMPLES 1 + +/*=================== + * DEMO USAGE + ====================*/ + +/*Show some widget. It might be required to increase `LV_MEM_SIZE` */ +#define LV_USE_DEMO_WIDGETS 0 +#if LV_USE_DEMO_WIDGETS +#define LV_DEMO_WIDGETS_SLIDESHOW 0 +#endif + +/*Demonstrate the usage of encoder and keyboard*/ +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + +/*Benchmark your system*/ +#define LV_USE_DEMO_BENCHMARK 0 +#if LV_USE_DEMO_BENCHMARK +/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ +#define LV_DEMO_BENCHMARK_RGB565A8 0 +#endif + +/*Stress test for LVGL*/ +#define LV_USE_DEMO_STRESS 0 + +/*Music player demo*/ +#define LV_USE_DEMO_MUSIC 0 +#if LV_USE_DEMO_MUSIC + #define LV_DEMO_MUSIC_SQUARE 0 + #define LV_DEMO_MUSIC_LANDSCAPE 0 + #define LV_DEMO_MUSIC_ROUND 0 + #define LV_DEMO_MUSIC_LARGE 0 + #define LV_DEMO_MUSIC_AUTO_PLAY 0 +#endif + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ \ No newline at end of file diff --git a/libraries/Arduino_H7_Video/src/lv_conf_9.h b/libraries/Arduino_H7_Video/src/lv_conf_9.h new file mode 100644 index 000000000..635a2816c --- /dev/null +++ b/libraries/Arduino_H7_Video/src/lv_conf_9.h @@ -0,0 +1,973 @@ +/** + * @file lv_conf.h + * Configuration file for v9.0.1-dev + */ + +/* + * Copy this file as `lv_conf.h` + * 1. simply next to the `lvgl` folder + * 2. or any other places and + * - define `LV_CONF_INCLUDE_SIMPLE` + * - add the path as include path + */ + +/* clang-format off */ +#if 1 /*Set it to "1" to enable content*/ + +#ifndef LV_CONF_H +#define LV_CONF_H + +/*==================== + COLOR SETTINGS + *====================*/ + +/*Color depth: 8 (A8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888)*/ +#define LV_COLOR_DEPTH 16 + +/*========================= + STDLIB WRAPPER SETTINGS + *=========================*/ + +/* Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_MALLOC LV_STDLIB_BUILTIN +#define LV_USE_STDLIB_STRING LV_STDLIB_BUILTIN +#define LV_USE_STDLIB_SPRINTF LV_STDLIB_BUILTIN + + +#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN + /*Size of the memory available for `lv_malloc()` in bytes (>= 2kB)*/ + #define LV_MEM_SIZE (64 * 1024U) /*[bytes]*/ + + /*Size of the memory expand for `lv_malloc()` in bytes*/ + #define LV_MEM_POOL_EXPAND_SIZE 0 + + /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ + #define LV_MEM_ADR 0 /*0: unused*/ + /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ + #if LV_MEM_ADR == 0 + #undef LV_MEM_POOL_INCLUDE + #undef LV_MEM_POOL_ALLOC + #endif +#endif /*LV_USE_MALLOC == LV_STDLIB_BUILTIN*/ + +/*==================== + HAL SETTINGS + *====================*/ + +/*Default display refresh, input device read and animation step period.*/ +#define LV_DEF_REFR_PERIOD 33 /*[ms]*/ + +/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. + *(Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI_DEF 130 /*[px/inch]*/ + +/*================= + * OPERATING SYSTEM + *=================*/ +/*Select an operating system to use. Possible options: + * - LV_OS_NONE + * - LV_OS_PTHREAD + * - LV_OS_FREERTOS + * - LV_OS_CMSIS_RTOS2 + * - LV_OS_RTTHREAD + * - LV_OS_WINDOWS + * - LV_OS_CUSTOM */ +#define LV_USE_OS LV_OS_NONE + +#if LV_USE_OS == LV_OS_CUSTOM + #define LV_OS_CUSTOM_INCLUDE +#endif + +/*======================== + * RENDERING CONFIGURATION + *========================*/ + +/*Align the stride of all layers and images to this bytes*/ +#define LV_DRAW_BUF_STRIDE_ALIGN 1 + +/*Align the start address of draw_buf addresses to this bytes*/ +#define LV_DRAW_BUF_ALIGN 4 + +#define LV_USE_DRAW_SW 1 +#if LV_USE_DRAW_SW == 1 + /* Set the number of draw unit. + * > 1 requires an operating system enabled in `LV_USE_OS` + * > 1 means multiply threads will render the screen in parallel */ + #define LV_DRAW_SW_DRAW_UNIT_CNT 1 + + /* Use Arm-2D to accelerate the sw render */ + #define LV_USE_DRAW_ARM2D_SYNC 1 + + /* If a widget has `style_opa < 255` (not `bg_opa`, `text_opa` etc) or not NORMAL blend mode + * it is buffered into a "simple" layer before rendering. The widget can be buffered in smaller chunks. + * "Transformed layers" (if `transform_angle/zoom` are set) use larger buffers + * and can't be drawn in chunks. */ + + /*The target buffer size for simple layer chunks.*/ + #define LV_DRAW_SW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /*[bytes]*/ + + /* 0: use a simple renderer capable of drawing only simple rectangles with gradient, images, texts, and straight lines only + * 1: use a complex renderer capable of drawing rounded corners, shadow, skew lines, and arcs too */ + #define LV_DRAW_SW_COMPLEX 1 + + #if LV_DRAW_SW_COMPLEX == 1 + /*Allow buffering some shadow calculation. + *LV_DRAW_SW_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` + *Caching has LV_DRAW_SW_SHADOW_CACHE_SIZE^2 RAM cost*/ + #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0 + + /* Set number of maximally cached circle data. + * The circumference of 1/4 circle are saved for anti-aliasing + * radius * 4 bytes are used per circle (the most often used radiuses are saved) + * 0: to disable caching */ + #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4 + #endif + + #define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE + + #if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM + #define LV_DRAW_SW_ASM_CUSTOM_INCLUDE "" + #endif +#endif + +/* Use NXP's VG-Lite GPU on iMX RTxxx platforms. */ +#define LV_USE_DRAW_VGLITE 0 + +#if LV_USE_DRAW_VGLITE + /* Enable blit quality degradation workaround recommended for screen's dimension > 352 pixels. */ + #define LV_USE_VGLITE_BLIT_SPLIT 0 + + #if LV_USE_OS + /* Enable VGLite draw async. Queue multiple tasks and flash them once to the GPU. */ + #define LV_USE_VGLITE_DRAW_ASYNC 1 + #endif + + /* Enable VGLite asserts. */ + #define LV_USE_VGLITE_ASSERT 0 +#endif + +/* Use NXP's PXP on iMX RTxxx platforms. */ +#define LV_USE_DRAW_PXP 0 + +#if LV_USE_DRAW_PXP + /* Enable PXP asserts. */ + #define LV_USE_PXP_ASSERT 0 +#endif + +/* Use Renesas Dave2D on RA platforms. */ +#define LV_USE_DRAW_DAVE2D 0 + +/* Draw using cached SDL textures*/ +#define LV_USE_DRAW_SDL 0 + +/* Use VG-Lite GPU. */ +#define LV_USE_DRAW_VG_LITE 0 + +#if LV_USE_DRAW_VG_LITE +/* Enable VG-Lite custom external 'gpu_init()' function */ +#define LV_VG_LITE_USE_GPU_INIT 0 + +/* Enable VG-Lite assert. */ +#define LV_VG_LITE_USE_ASSERT 0 + +/* VG-Lite flush commit trigger threshold. GPU will try to batch these many draw tasks. */ +#define LV_VG_LITE_FLUSH_MAX_COUNT 8 + +/* Enable border to simulate shadow + * NOTE: which usually improves performance, + * but does not guarantee the same rendering quality as the software. */ +#define LV_VG_LITE_USE_BOX_SHADOW 0 + +#endif + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + +/*------------- + * Logging + *-----------*/ + +/*Enable the log module*/ +#define LV_USE_LOG 0 +#if LV_USE_LOG + + /*How important log should be added: + *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information + *LV_LOG_LEVEL_INFO Log important events + *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem + *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail + *LV_LOG_LEVEL_USER Only logs added by the user + *LV_LOG_LEVEL_NONE Do not log anything*/ + #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN + + /*1: Print the log with 'printf'; + *0: User need to register a callback with `lv_log_register_print_cb()`*/ + #define LV_LOG_PRINTF 0 + + /*1: Enable print timestamp; + *0: Disable print timestamp*/ + #define LV_LOG_USE_TIMESTAMP 1 + + /*1: Print file and line number of the log; + *0: Do not print file and line number of the log*/ + #define LV_LOG_USE_FILE_LINE 1 + + /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ + #define LV_LOG_TRACE_MEM 1 + #define LV_LOG_TRACE_TIMER 1 + #define LV_LOG_TRACE_INDEV 1 + #define LV_LOG_TRACE_DISP_REFR 1 + #define LV_LOG_TRACE_EVENT 1 + #define LV_LOG_TRACE_OBJ_CREATE 1 + #define LV_LOG_TRACE_LAYOUT 1 + #define LV_LOG_TRACE_ANIM 1 + #define LV_LOG_TRACE_CACHE 1 + +#endif /*LV_USE_LOG*/ + +/*------------- + * Asserts + *-----------*/ + +/*Enable asserts if an operation is failed or an invalid data is found. + *If LV_USE_LOG is enabled an error message will be printed on failure*/ +#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ +#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ +#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ + +/*Add a custom handler when assert happens e.g. to restart the MCU*/ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /*Halt by default*/ + +/*------------- + * Debug + *-----------*/ + +/*1: Draw random colored rectangles over the redrawn areas*/ +#define LV_USE_REFR_DEBUG 0 + +/*1: Draw a red overlay for ARGB layers and a green overlay for RGB layers*/ +#define LV_USE_LAYER_DEBUG 0 + +/*1: Draw overlays with different colors for each draw_unit's tasks. + *Also add the index number of the draw unit on white background. + *For layers add the index number of the draw unit on black background.*/ +#define LV_USE_PARALLEL_DRAW_DEBUG 0 + +/*------------- + * Others + *-----------*/ + +#define LV_ENABLE_GLOBAL_CUSTOM 0 +#if LV_ENABLE_GLOBAL_CUSTOM + /*Header to include for the custom 'lv_global' function"*/ + #define LV_GLOBAL_CUSTOM_INCLUDE +#endif + +/*Default cache size in bytes. + *Used by image decoders such as `lv_lodepng` to keep the decoded image in the memory. + *If size is not set to 0, the decoder will fail to decode when the cache is full. + *If size is 0, the cache function is not enabled and the decoded mem will be released immediately after use.*/ +#define LV_CACHE_DEF_SIZE 0 + +/*Default number of image header cache entries. The cache is used to store the headers of images + *The main logic is like `LV_CACHE_DEF_SIZE` but for image headers.*/ +#define LV_IMAGE_HEADER_CACHE_DEF_CNT 0 + +/*Number of stops allowed per gradient. Increase this to allow more stops. + *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ +#define LV_GRADIENT_MAX_STOPS 2 + +/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. + * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS 0 + +/* Add 2 x 32 bit variables to each lv_obj_t to speed up getting style properties */ +#define LV_OBJ_STYLE_CACHE 0 + +/* Add `id` field to `lv_obj_t` */ +#define LV_USE_OBJ_ID 0 + +/* Use lvgl builtin method for obj ID */ +#define LV_USE_OBJ_ID_BUILTIN 0 + +/*Use obj property set/get API*/ +#define LV_USE_OBJ_PROPERTY 0 + +/* VG-Lite Simulator */ +/*Requires: LV_USE_THORVG_INTERNAL or LV_USE_THORVG_EXTERNAL */ +#define LV_USE_VG_LITE_THORVG 0 + +#if LV_USE_VG_LITE_THORVG + + /*Enable LVGL's blend mode support*/ + #define LV_VG_LITE_THORVG_LVGL_BLEND_SUPPORT 0 + + /*Enable YUV color format support*/ + #define LV_VG_LITE_THORVG_YUV_SUPPORT 0 + + /*Enable 16 pixels alignment*/ + #define LV_VG_LITE_THORVG_16PIXELS_ALIGN 1 + + /*Enable multi-thread render*/ + #define LV_VG_LITE_THORVG_THREAD_RENDER 0 + +#endif + +/*===================== + * COMPILER SETTINGS + *====================*/ + +/*For big endian systems set to 1*/ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/*Define a custom attribute to `lv_tick_inc` function*/ +#define LV_ATTRIBUTE_TICK_INC + +/*Define a custom attribute to `lv_timer_handler` function*/ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/*Define a custom attribute to `lv_display_flush_ready` function*/ +#define LV_ATTRIBUTE_FLUSH_READY + +/*Required alignment size for buffers*/ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). + * E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/*Attribute to mark large constant arrays for example font's bitmaps*/ +#define LV_ATTRIBUTE_LARGE_CONST + +/*Compiler prefix for a big array declaration in RAM*/ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/*Place performance critical functions into a faster memory (e.g RAM)*/ +#define LV_ATTRIBUTE_FAST_MEM + +/*Export integer constant to binding. This macro is used with constants in the form of LV_ that + *should also appear on LVGL binding API such as Micropython.*/ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ + +/*Prefix all global extern data with this*/ +#define LV_ATTRIBUTE_EXTERN_DATA + +/* Use `float` as `lv_value_precise_t` */ +#define LV_USE_FLOAT 0 + +/*================== + * FONT USAGE + *===================*/ + +/*Montserrat fonts with ASCII range and some symbols using bpp = 4 + *https://fonts.google.com/specimen/Montserrat*/ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 0 +#define LV_FONT_MONTSERRAT_12 0 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 0 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 0 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/*Demonstrate special features*/ +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/ +#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ + +/*Pixel perfect monospace fonts*/ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/*Optionally declare custom fonts here. + *You can use these fonts as default font too and they will be available globally. + *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ +#define LV_FONT_CUSTOM_DECLARE + +/*Always set a default font*/ +#define LV_FONT_DEFAULT &lv_font_montserrat_14 + +/*Enable handling large font and/or fonts with a lot of characters. + *The limit depends on the font size, font face and bpp. + *Compiler error will be triggered if a font needs it.*/ +#define LV_FONT_FMT_TXT_LARGE 0 + +/*Enables/disables support for compressed fonts.*/ +#define LV_USE_FONT_COMPRESSED 0 + +/*Enable drawing placeholders when glyph dsc is not found*/ +#define LV_USE_FONT_PLACEHOLDER 1 + +/*================= + * TEXT SETTINGS + *=================*/ + +/** + * Select a character encoding for strings. + * Your IDE or editor should have the same character encoding + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_)]}" + +/*If a word is at least this long, will break wherever "prettiest" + *To disable, set to a value <= 0*/ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/*Minimum number of characters in a long word to put on a line before a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/*Minimum number of characters in a long word to put on a line after a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. + *The direction will be processed according to the Unicode Bidirectional Algorithm: + *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI + /*Set the default direction. Supported values: + *`LV_BASE_DIR_LTR` Left-to-Right + *`LV_BASE_DIR_RTL` Right-to-Left + *`LV_BASE_DIR_AUTO` detect texts base direction*/ + #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/*Enable Arabic/Persian processing + *In these languages characters should be replaced with an other form based on their position in the text*/ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*================== + * WIDGETS + *================*/ + +/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ + +#define LV_WIDGETS_HAS_DEFAULT_VALUE 1 + +#define LV_USE_ANIMIMG 1 + +#define LV_USE_ARC 1 + +#define LV_USE_BAR 1 + +#define LV_USE_BUTTON 1 + +#define LV_USE_BUTTONMATRIX 1 + +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR + #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 + #if LV_CALENDAR_WEEK_STARTS_MONDAY + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} + #else + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} + #endif + + #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} + #define LV_USE_CALENDAR_HEADER_ARROW 1 + #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CANVAS 1 + +#define LV_USE_CHART 1 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/ + +#define LV_USE_IMAGE 1 /*Requires: lv_label*/ + +#define LV_USE_IMAGEBUTTON 1 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL + #define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ + #define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ + #define LV_LABEL_WAIT_CHAR_COUNT 3 /*The count of wait chart*/ +#endif + +#define LV_USE_LED 1 + +#define LV_USE_LINE 1 + +#define LV_USE_LIST 1 + +#define LV_USE_MENU 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_ROLLER 1 /*Requires: lv_label*/ + +#define LV_USE_SCALE 1 + +#define LV_USE_SLIDER 1 /*Requires: lv_bar*/ + +#define LV_USE_SPAN 1 +#if LV_USE_SPAN + /*A line text can contain maximum num of span descriptor */ + #define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +#define LV_USE_SPINBOX 1 + +#define LV_USE_SPINNER 1 + +#define LV_USE_SWITCH 1 + +#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +#define LV_USE_TABLE 1 + +#define LV_USE_TABVIEW 1 + +#define LV_USE_TILEVIEW 1 + +#define LV_USE_WIN 1 + +/*================== + * THEMES + *==================*/ + +/*A simple, impressive and very complete theme*/ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + + /*0: Light mode; 1: Dark mode*/ + #define LV_THEME_DEFAULT_DARK 0 + + /*1: Enable grow on press*/ + #define LV_THEME_DEFAULT_GROW 1 + + /*Default transition time in [ms]*/ + #define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/*A very simple theme that is a good starting point for a custom theme*/ +#define LV_USE_THEME_SIMPLE 1 + +/*A theme designed for monochrome displays*/ +#define LV_USE_THEME_MONO 1 + +/*================== + * LAYOUTS + *==================*/ + +/*A layout similar to Flexbox in CSS.*/ +#define LV_USE_FLEX 1 + +/*A layout similar to Grid in CSS.*/ +#define LV_USE_GRID 1 + +/*==================== + * 3RD PARTS LIBRARIES + *====================*/ + +/*File system interfaces for common APIs */ + +/*API for fopen, fread, etc*/ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO + #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for open, read, etc*/ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX + #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for CreateFile, ReadFile, etc*/ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 + #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS + #define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for memory-mapped file access. */ +#define LV_USE_FS_MEMFS 0 +#if LV_USE_FS_MEMFS + #define LV_FS_MEMFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#endif + +/*LODEPNG decoder library*/ +#define LV_USE_LODEPNG 0 + +/*PNG decoder(libpng) library*/ +#define LV_USE_LIBPNG 0 + +/*BMP decoder library*/ +#define LV_USE_BMP 0 + +/* JPG + split JPG decoder library. + * Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_TJPGD 0 + +/* libjpeg-turbo decoder library. + * Supports complete JPEG specifications and high-performance JPEG decoding. */ +#define LV_USE_LIBJPEG_TURBO 0 + +/*GIF decoder library*/ +#define LV_USE_GIF 0 +#if LV_USE_GIF +/*GIF decoder accelerate*/ +#define LV_GIF_CACHE_DECODE_DATA 0 +#endif + + +/*Decode bin images to RAM*/ +#define LV_BIN_DECODER_RAM_LOAD 0 + +/*RLE decompress library*/ +#define LV_USE_RLE 0 + +/*QR code library*/ +#define LV_USE_QRCODE 0 + +/*Barcode code library*/ +#define LV_USE_BARCODE 0 + +/*FreeType library*/ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE + /*Memory used by FreeType to cache characters in kilobytes*/ + #define LV_FREETYPE_CACHE_SIZE 768 + + /*Let FreeType to use LVGL memory and file porting*/ + #define LV_FREETYPE_USE_LVGL_PORT 0 + + /* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ + /* (0:use system defaults) */ + #define LV_FREETYPE_CACHE_FT_FACES 8 + #define LV_FREETYPE_CACHE_FT_SIZES 8 + #define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256 +#endif + +/* Built-in TTF decoder */ +#define LV_USE_TINY_TTF 0 +#if LV_USE_TINY_TTF + /* Enable loading TTF data from files */ + #define LV_TINY_TTF_FILE_SUPPORT 0 +#endif + +/*Rlottie library*/ +#define LV_USE_RLOTTIE 0 + +/*Enable Vector Graphic APIs*/ +#define LV_USE_VECTOR_GRAPHIC 0 + +/* Enable ThorVG (vector graphics library) from the src/libs folder */ +#define LV_USE_THORVG_INTERNAL 0 + +/* Enable ThorVG by assuming that its installed and linked to the project */ +#define LV_USE_THORVG_EXTERNAL 0 + +/*Enable LZ4 compress/decompress lib*/ +#define LV_USE_LZ4 0 + +/*Use lvgl built-in LZ4 lib*/ +#define LV_USE_LZ4_INTERNAL 0 + +/*Use external LZ4 library*/ +#define LV_USE_LZ4_EXTERNAL 0 + +/*FFmpeg library for image decoding and playing videos + *Supports all major image formats so do not enable other image decoder with it*/ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG + /*Dump input information to stderr*/ + #define LV_FFMPEG_DUMP_FORMAT 0 +#endif + +/*================== + * OTHERS + *==================*/ + +/*1: Enable API to take snapshot for object*/ +#define LV_USE_SNAPSHOT 0 + +/*1: Enable system monitor component*/ +#define LV_USE_SYSMON 0 +#if LV_USE_SYSMON + /*Get the idle percentage. E.g. uint32_t my_get_idle(void);*/ + #define LV_SYSMON_GET_IDLE lv_timer_get_idle + + /*1: Show CPU usage and FPS count + * Requires `LV_USE_SYSMON = 1`*/ + #define LV_USE_PERF_MONITOR 0 + #if LV_USE_PERF_MONITOR + #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT + + /*0: Displays performance data on the screen, 1: Prints performance data using log.*/ + #define LV_USE_PERF_MONITOR_LOG_MODE 0 + #endif + + /*1: Show the used memory and the memory fragmentation + * Requires `LV_USE_BUILTIN_MALLOC = 1` + * Requires `LV_USE_SYSMON = 1`*/ + #define LV_USE_MEM_MONITOR 0 + #if LV_USE_MEM_MONITOR + #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT + #endif + +#endif /*LV_USE_SYSMON*/ + +/*1: Enable the runtime performance profiler*/ +#define LV_USE_PROFILER 0 +#if LV_USE_PROFILER + /*1: Enable the built-in profiler*/ + #define LV_USE_PROFILER_BUILTIN 1 + #if LV_USE_PROFILER_BUILTIN + /*Default profiler trace buffer size*/ + #define LV_PROFILER_BUILTIN_BUF_SIZE (16 * 1024) /*[bytes]*/ + #endif + + /*Header to include for the profiler*/ + #define LV_PROFILER_INCLUDE "lvgl/src/misc/lv_profiler_builtin.h" + + /*Profiler start point function*/ + #define LV_PROFILER_BEGIN LV_PROFILER_BUILTIN_BEGIN + + /*Profiler end point function*/ + #define LV_PROFILER_END LV_PROFILER_BUILTIN_END + + /*Profiler start point function with custom tag*/ + #define LV_PROFILER_BEGIN_TAG LV_PROFILER_BUILTIN_BEGIN_TAG + + /*Profiler end point function with custom tag*/ + #define LV_PROFILER_END_TAG LV_PROFILER_BUILTIN_END_TAG +#endif + +/*1: Enable Monkey test*/ +#define LV_USE_MONKEY 0 + +/*1: Enable grid navigation*/ +#define LV_USE_GRIDNAV 0 + +/*1: Enable lv_obj fragment*/ +#define LV_USE_FRAGMENT 0 + +/*1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 + +/*1: Enable an observer pattern implementation*/ +#define LV_USE_OBSERVER 1 + +/*1: Enable Pinyin input method*/ +/*Requires: lv_keyboard*/ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN + /*1: Use default thesaurus*/ + /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ + #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 + /*Set the maximum number of candidate panels that can be displayed*/ + /*This needs to be adjusted according to the size of the screen*/ + #define LV_IME_PINYIN_CAND_TEXT_NUM 6 + + /*Use 9 key input(k9)*/ + #define LV_IME_PINYIN_USE_K9_MODE 1 + #if LV_IME_PINYIN_USE_K9_MODE == 1 + #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 + #endif /*LV_IME_PINYIN_USE_K9_MODE*/ +#endif + +/*1: Enable file explorer*/ +/*Requires: lv_table*/ +#define LV_USE_FILE_EXPLORER 0 +#if LV_USE_FILE_EXPLORER + /*Maximum length of path*/ + #define LV_FILE_EXPLORER_PATH_MAX_LEN (128) + /*Quick access bar, 1:use, 0:not use*/ + /*Requires: lv_list*/ + #define LV_FILE_EXPLORER_QUICK_ACCESS 1 +#endif + +/*================== + * DEVICES + *==================*/ + +/*Use SDL to open window on PC and handle mouse and keyboard*/ +#define LV_USE_SDL 0 +#if LV_USE_SDL + #define LV_SDL_INCLUDE_PATH + #define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /*LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance*/ + #define LV_SDL_BUF_COUNT 1 /*1 or 2*/ + #define LV_SDL_FULLSCREEN 0 /*1: Make the window full screen by default*/ + #define LV_SDL_DIRECT_EXIT 1 /*1: Exit the application when all SDL windows are closed*/ +#endif + +/*Use X11 to open window on Linux desktop and handle mouse and keyboard*/ +#define LV_USE_X11 0 +#if LV_USE_X11 + #define LV_X11_DIRECT_EXIT 1 /*Exit the application when all X11 windows have been closed*/ + #define LV_X11_DOUBLE_BUFFER 1 /*Use double buffers for endering*/ + /*select only 1 of the following render modes (LV_X11_RENDER_MODE_PARTIAL preferred!)*/ + #define LV_X11_RENDER_MODE_PARTIAL 1 /*Partial render mode (preferred)*/ + #define LV_X11_RENDER_MODE_DIRECT 0 /*direct render mode*/ + #define LV_X11_RENDER_MODE_FULL 0 /*Full render mode*/ +#endif + +/*Driver for /dev/fb*/ +#define LV_USE_LINUX_FBDEV 0 +#if LV_USE_LINUX_FBDEV + #define LV_LINUX_FBDEV_BSD 0 + #define LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL + #define LV_LINUX_FBDEV_BUFFER_COUNT 0 + #define LV_LINUX_FBDEV_BUFFER_SIZE 60 +#endif + +/*Use Nuttx to open window and handle touchscreen*/ +#define LV_USE_NUTTX 0 + +#if LV_USE_NUTTX + #define LV_USE_NUTTX_LIBUV 0 + + /*Use Nuttx custom init API to open window and handle touchscreen*/ + #define LV_USE_NUTTX_CUSTOM_INIT 0 + + /*Driver for /dev/lcd*/ + #define LV_USE_NUTTX_LCD 0 + #if LV_USE_NUTTX_LCD + #define LV_NUTTX_LCD_BUFFER_COUNT 0 + #define LV_NUTTX_LCD_BUFFER_SIZE 60 + #endif + + /*Driver for /dev/input*/ + #define LV_USE_NUTTX_TOUCHSCREEN 0 + +#endif + +/*Driver for /dev/dri/card*/ +#define LV_USE_LINUX_DRM 0 + +/*Interface for TFT_eSPI*/ +#define LV_USE_TFT_ESPI 0 + +/*Driver for evdev input devices*/ +#define LV_USE_EVDEV 0 + +/*Driver for libinput input devices*/ +#define LV_USE_LIBINPUT 0 + +#if LV_USE_LIBINPUT + #define LV_LIBINPUT_BSD 0 + + /*Full keyboard support*/ + #define LV_LIBINPUT_XKB 0 + #if LV_LIBINPUT_XKB + /*"setxkbmap -query" can help find the right values for your keyboard*/ + #define LV_LIBINPUT_XKB_KEY_MAP { .rules = NULL, .model = "pc101", .layout = "us", .variant = NULL, .options = NULL } + #endif +#endif + +/*Drivers for LCD devices connected via SPI/parallel port*/ +#define LV_USE_ST7735 0 +#define LV_USE_ST7789 0 +#define LV_USE_ST7796 0 +#define LV_USE_ILI9341 0 + +#define LV_USE_GENERIC_MIPI (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341) + +/* LVGL Windows backend */ +#define LV_USE_WINDOWS 0 + +/*================== +* EXAMPLES +*==================*/ + +/*Enable the examples to be built with the library*/ +#define LV_BUILD_EXAMPLES 1 + +/*=================== + * DEMO USAGE + ====================*/ + +/*Show some widget. It might be required to increase `LV_MEM_SIZE` */ +#define LV_USE_DEMO_WIDGETS 0 + +/*Demonstrate the usage of encoder and keyboard*/ +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + +/*Benchmark your system*/ +#define LV_USE_DEMO_BENCHMARK 0 + +/*Render test for each primitives. Requires at least 480x272 display*/ +#define LV_USE_DEMO_RENDER 0 + +/*Stress test for LVGL*/ +#define LV_USE_DEMO_STRESS 0 + +/*Music player demo*/ +#define LV_USE_DEMO_MUSIC 0 +#if LV_USE_DEMO_MUSIC + #define LV_DEMO_MUSIC_SQUARE 0 + #define LV_DEMO_MUSIC_LANDSCAPE 0 + #define LV_DEMO_MUSIC_ROUND 0 + #define LV_DEMO_MUSIC_LARGE 0 + #define LV_DEMO_MUSIC_AUTO_PLAY 0 +#endif + +/*Flex layout demo*/ +#define LV_USE_DEMO_FLEX_LAYOUT 0 + +/*Smart-phone like multi-language demo*/ +#define LV_USE_DEMO_MULTILANG 0 + +/*Widget transformation demo*/ +#define LV_USE_DEMO_TRANSFORM 0 + +/*Demonstrate scroll settings*/ +#define LV_USE_DEMO_SCROLL 0 + +/*Vector graphic demo*/ +#define LV_USE_DEMO_VECTOR_GRAPHIC 0 +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/libraries/Camera/examples/CameraCaptureWebSerial/CameraCaptureWebSerial.ino b/libraries/Camera/examples/CameraCaptureWebSerial/CameraCaptureWebSerial.ino new file mode 100644 index 000000000..8347f725a --- /dev/null +++ b/libraries/Camera/examples/CameraCaptureWebSerial/CameraCaptureWebSerial.ino @@ -0,0 +1,160 @@ +/* + * This example shows how to capture images from the camera and send them over Web Serial. + * + * There is a companion web app that receives the images and displays them in a canvas. + * It can be found in the "extras" folder of this library. + * The on-board LED lights up while the image is being sent over serial. + * + * Instructions: + * 1. Make sure the correct camera is selected in the #include section below by uncommenting the correct line. + * 2. Upload this sketch to your camera-equipped board. + * 3. Open the web app in a browser (Chrome or Edge) by opening the index.html file + * in the "WebSerialCamera" folder which is located in the "extras" folder. + * + * Initial author: Sebastian Romero @sebromero + */ + +#include "camera.h" + +#ifdef ARDUINO_NICLA_VISION + #include "gc2145.h" + GC2145 galaxyCore; + Camera cam(galaxyCore); + #define IMAGE_MODE CAMERA_RGB565 +#elif defined(ARDUINO_PORTENTA_H7_M7) + // uncomment the correct camera in use + #include "hm0360.h" + HM0360 himax; + // #include "himax.h"; + // HM01B0 himax; + Camera cam(himax); + #define IMAGE_MODE CAMERA_GRAYSCALE +#elif defined(ARDUINO_GIGA) + #include "ov767x.h" + // uncomment the correct camera in use + OV7670 ov767x; + // OV7675 ov767x; + Camera cam(ov767x); + #define IMAGE_MODE CAMERA_RGB565 +#else +#error "This board is unsupported." +#endif + +/* +Other buffer instantiation options: + FrameBuffer fb(0x30000000); + FrameBuffer fb(320,240,2); + +If resolution higher than 320x240 is required, please use external RAM via + #include "SDRAM.h" + FrameBuffer fb(SDRAM_START_ADDRESS); + ... + // and adding in setup() + SDRAM.begin(); +*/ +constexpr uint16_t CHUNK_SIZE = 512; // Size of chunks in bytes +constexpr uint8_t RESOLUTION = CAMERA_R320x240; // CAMERA_R160x120 +constexpr uint8_t CONFIG_SEND_REQUEST = 2; +constexpr uint8_t IMAGE_SEND_REQUEST = 1; + +uint8_t START_SEQUENCE[4] = { 0xfa, 0xce, 0xfe, 0xed }; +uint8_t STOP_SEQUENCE[4] = { 0xda, 0xbb, 0xad, 0x00 }; +FrameBuffer fb; + +/** + * Blinks the LED a specified number of times. + * @param ledPin The pin number of the LED. + * @param count The number of times to blink the LED. Default is 0xFFFFFFFF. + */ +void blinkLED(int ledPin, uint32_t count = 0xFFFFFFFF) { + while (count--) { + digitalWrite(ledPin, LOW); // turn the LED on (HIGH is the voltage level) + delay(50); // wait for a second + digitalWrite(ledPin, HIGH); // turn the LED off by making the voltage LOW + delay(50); // wait for a second + } +} + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + pinMode(LEDR, OUTPUT); + digitalWrite(LED_BUILTIN, HIGH); + digitalWrite(LEDR, HIGH); + + // Init the cam QVGA, 30FPS + if (!cam.begin(RESOLUTION, IMAGE_MODE, 30)) { + blinkLED(LEDR); + } + + blinkLED(LED_BUILTIN, 5); +} + +/** + * Sends a chunk of data over a serial connection. + * + * @param buffer The buffer containing the data to be sent. + * @param bufferSize The size of the buffer. + */ +void sendChunk(uint8_t* buffer, size_t bufferSize){ + Serial.write(buffer, bufferSize); + Serial.flush(); + delay(1); // Optional: Add a small delay to allow the receiver to process the chunk +} + +/** + * Sends a frame of camera image data over a serial connection. + */ +void sendFrame(){ + // Grab frame and write to serial + if (cam.grabFrame(fb, 3000) == 0) { + byte* buffer = fb.getBuffer(); + size_t bufferSize = cam.frameSize(); + digitalWrite(LED_BUILTIN, LOW); + + sendChunk(START_SEQUENCE, sizeof(START_SEQUENCE)); + + // Split buffer into chunks + for(size_t i = 0; i < bufferSize; i += CHUNK_SIZE) { + size_t chunkSize = min(bufferSize - i, CHUNK_SIZE); + sendChunk(buffer + i, chunkSize); + } + + sendChunk(STOP_SEQUENCE, sizeof(STOP_SEQUENCE)); + + digitalWrite(LED_BUILTIN, HIGH); + } else { + blinkLED(20); + } +} + +/** + * Sends the camera configuration over a serial connection. + * This is used to configure the web app to display the image correctly. + */ +void sendCameraConfig(){ + Serial.write(IMAGE_MODE); + Serial.write(RESOLUTION); + Serial.flush(); + delay(1); +} + +void loop() { + if(!Serial) { + Serial.begin(115200); + while(!Serial); + } + + if(!Serial.available()) return; + + byte request = Serial.read(); + + switch(request){ + case IMAGE_SEND_REQUEST: + sendFrame(); + break; + case CONFIG_SEND_REQUEST: + sendCameraConfig(); + break; + } + +} diff --git a/libraries/Camera/extras/WebSerialCamera/README.md b/libraries/Camera/extras/WebSerialCamera/README.md new file mode 100644 index 000000000..04888bbcc --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/README.md @@ -0,0 +1,12 @@ +# 📹 WebSerial Camera Stream + +This folder contains a web application that provides a camera stream over WebSerial. +This is an experimental feature not supported in all browsers. It's recommended to use Google Chrome. +See [Browser Compatibility](https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API#browser_compatibility) + +## Instructions + +1. Upload the companion [Arduino sketch](../../examples/CameraCaptureWebSerial/CameraCaptureWebSerial.ino) to your board. +2. Open the web app either by directly opening the index.html file or serving it via a webserver and opening the URL provided by the webserver. +3. Click "Connect". Your board's serial port should show up in the popup. Select it. Click once again "Connect". The camera feed should start. If the board has been previously connected to the browser, it will connect automatically. +4. (Optional) click "Save Image" if you want to save individual camera frames to your computer. \ No newline at end of file diff --git a/libraries/Camera/extras/WebSerialCamera/app.js b/libraries/Camera/extras/WebSerialCamera/app.js new file mode 100644 index 000000000..364a7d1d5 --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/app.js @@ -0,0 +1,166 @@ +/** + * @fileoverview This file contains the main application logic. + * + * The application uses the Web Serial API to connect to the serial port. + * Check the following links for more information on the Web Serial API: + * https://developer.chrome.com/articles/serial/ + * https://wicg.github.io/serial/ + * + * The flow of the application is as follows: + * 1. The user clicks the "Connect" button or the browser automatically connects + * to the serial port if it has been previously connected. + * 2. The application requests the camera configuration (mode and resolution) from the board. + * 3. The application starts reading the image data stream from the serial port. + * It waits until the expected amount of bytes have been read and then processes the data. + * 4. The processed image data is rendered on the canvas. + * + * @author Sebastian Romero + */ + +const connectButton = document.getElementById('connect'); +const refreshButton = document.getElementById('refresh'); +const startButton = document.getElementById('start'); +const saveImageButton = document.getElementById('save-image'); +const filterSelector = document.getElementById('filter-selector'); +const canvas = document.getElementById('bitmapCanvas'); +const ctx = canvas.getContext('2d'); + +const imageDataTransfomer = new ImageDataTransformer(ctx); +imageDataTransfomer.setStartSequence([0xfa, 0xce, 0xfe, 0xed]); +imageDataTransfomer.setStopSequence([0xda, 0xbb, 0xad, 0x00]); + +const connectionHandler = new SerialConnectionHandler(); + + +// Connection handler event listeners + +connectionHandler.onConnect = async () => { + connectButton.textContent = 'Disconnect'; + cameraConfig = await connectionHandler.getConfig(); + if(!cameraConfig){ + console.error('🚫 Could not read camera configuration. Aborting...'); + return; + } + const imageMode = CAMERA_MODES[cameraConfig[0]]; + const imageResolution = CAMERA_RESOLUTIONS[cameraConfig[1]]; + if(!imageMode || !imageResolution){ + console.error(`🚫 Invalid camera configuration: ${cameraConfig[0]}, ${cameraConfig[1]}. Aborting...`); + return; + } + imageDataTransfomer.setImageMode(imageMode); + imageDataTransfomer.setResolution(imageResolution.width, imageResolution.height); + + // Filters are only available for color images + if(imageMode !== 'GRAYSCALE'){ + filterSelector.disabled = false; + } + + renderStream(); +}; + +connectionHandler.onDisconnect = () => { + imageDataTransfomer.reset(); + connectButton.textContent = 'Connect'; + filterSelector.disabled = true; + filterSelector.value = 'none'; +}; + + +// Rendering logic + +async function renderStream(){ + while(connectionHandler.isConnected()){ + if(imageDataTransfomer.isConfigured()) await renderFrame(); + } +} + +/** + * Renders the image data for one frame from the board and renders it. + * @returns {Promise} True if a frame was rendered, false otherwise. + */ +async function renderFrame(){ + if(!connectionHandler.isConnected()) return; + const imageData = await connectionHandler.getFrame(imageDataTransfomer); + if(!imageData) return false; // Nothing to render + if(!(imageData instanceof ImageData)) throw new Error('🚫 Image data is not of type ImageData'); + renderBitmap(ctx, imageData); + return true; +} + +/** + * Renders the image data on the canvas. + * @param {CanvasRenderingContext2D} context The canvas context to render on. + * @param {ImageData} imageData The image data to render. + */ +function renderBitmap(context, imageData) { + context.canvas.width = imageData.width; + context.canvas.height = imageData.height; + context.clearRect(0, 0, canvas.width, canvas.height); + context.putImageData(imageData, 0, 0); +} + + +// UI Event listeners + +startButton.addEventListener('click', renderStream); + +connectButton.addEventListener('click', async () => { + if(connectionHandler.isConnected()){ + connectionHandler.disconnectSerial(); + } else { + await connectionHandler.requestSerialPort(); + await connectionHandler.connectSerial(); + } +}); + +refreshButton.addEventListener('click', () => { + if(imageDataTransfomer.isConfigured()) renderFrame(); +}); + +saveImageButton.addEventListener('click', () => { + const link = document.createElement('a'); + link.download = 'image.png'; + link.href = canvas.toDataURL(); + link.click(); + link.remove(); +}); + +filterSelector.addEventListener('change', () => { + const filter = filterSelector.value; + switch(filter){ + case 'none': + imageDataTransfomer.filter = null; + break; + case 'gray-scale': + imageDataTransfomer.filter = new GrayScaleFilter(); + break; + case 'black-and-white': + imageDataTransfomer.filter = new BlackAndWhiteFilter(); + break; + case 'sepia': + imageDataTransfomer.filter = new SepiaColorFilter(); + break; + case 'pixelate': + imageDataTransfomer.filter = new PixelateFilter(8); + break; + case 'blur': + imageDataTransfomer.filter = new BlurFilter(8); + break; + default: + imageDataTransfomer.filter = null; + } +}); + +// On page load event, try to connect to the serial port +window.addEventListener('load', async () => { + filterSelector.disabled = true; + console.log('🚀 Page loaded. Trying to connect to serial port...'); + + setTimeout(() => { + connectionHandler.autoConnect(); + }, 1000); +}); + +if (!("serial" in navigator)) { + alert("The Web Serial API is not supported in your browser."); +} \ No newline at end of file diff --git a/libraries/Camera/extras/WebSerialCamera/cameraConfig.js b/libraries/Camera/extras/WebSerialCamera/cameraConfig.js new file mode 100644 index 000000000..1c0474473 --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/cameraConfig.js @@ -0,0 +1,51 @@ +/** + * @fileoverview This file contains the configuration for the camera. + * @author Sebastian Romero + */ + +/** + * The available camera (color) modes. + * The Arduino sketch uses the same values to communicate which mode should be used. + **/ +const CAMERA_MODES = { + 0: "GRAYSCALE", + 1: "BAYER", + 2: "RGB565" +}; + +/** + * The available camera resolutions. + * The Arduino sketch uses the same values to communicate which resolution should be used. + */ +const CAMERA_RESOLUTIONS = { + 0: { + "name": "QQVGA", + "width": 160, + "height": 120 + }, + 1: { + "name": "QVGA", + "width": 320, + "height": 240 + }, + 2: { + "name": "320x320", + "width": 320, + "height": 320 + }, + 3: { + "name": "VGA", + "width": 640, + "height": 480 + }, + 5: { + "name": "SVGA", + "width": 800, + "height": 600 + }, + 6: { + "name": "UXGA", + "width": 1600, + "height": 1200 + } +}; \ No newline at end of file diff --git a/libraries/Camera/extras/WebSerialCamera/filters.js b/libraries/Camera/extras/WebSerialCamera/filters.js new file mode 100644 index 000000000..0b7622898 --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/filters.js @@ -0,0 +1,207 @@ +/** + * @fileoverview This file contains the filters that can be applied to an image. + * @author Sebastian Romero + */ + +/** + * Represents an image filter interface. This class is meant to be extended by subclasses. + */ +class ImageFilter { +/** + * Applies a filter to the given pixel data. + * @param {Uint8Array} pixelData - The pixel data to apply the filter to. The pixel data gets modified in place. + * @param {number} [width=null] - The width of the image. Defaults to null. + * @param {number} [height=null] - The height of the image. Defaults to null. + * @throws {Error} - Throws an error if the applyFilter method is not implemented. + */ + applyFilter(pixelData, width = null, height = null) { + throw new Error('applyFilter not implemented'); + } +} + +/** + * Represents a grayscale filter that converts an image to grayscale. + * @extends ImageFilter + */ +class GrayScaleFilter extends ImageFilter { + /** + * Applies the grayscale filter to the given pixel data. + * @param {Uint8ClampedArray} pixelData - The pixel data to apply the filter to. + * @param {number} [width=null] - The width of the image. + * @param {number} [height=null] - The height of the image. + */ + applyFilter(pixelData, width = null, height = null) { + for (let i = 0; i < pixelData.length; i += 4) { + const r = pixelData[i]; + const g = pixelData[i + 1]; + const b = pixelData[i + 2]; + const gray = (r + g + b) / 3; + pixelData[i] = gray; + pixelData[i + 1] = gray; + pixelData[i + 2] = gray; + } + } +} + +/** + * A class representing a black and white image filter. + * @extends ImageFilter + */ +class BlackAndWhiteFilter extends ImageFilter { + applyFilter(pixelData, width = null, height = null) { + for (let i = 0; i < pixelData.length; i += 4) { + const r = pixelData[i]; + const g = pixelData[i + 1]; + const b = pixelData[i + 2]; + const gray = (r + g + b) / 3; + const bw = gray > 127 ? 255 : 0; + pixelData[i] = bw; + pixelData[i + 1] = bw; + pixelData[i + 2] = bw; + } + } +} + +/** + * Represents a color filter that applies a sepia tone effect to an image. + * @extends ImageFilter + */ +class SepiaColorFilter extends ImageFilter { + applyFilter(pixelData, width = null, height = null) { + for (let i = 0; i < pixelData.length; i += 4) { + const r = pixelData[i]; + const g = pixelData[i + 1]; + const b = pixelData[i + 2]; + const gray = (r + g + b) / 3; + pixelData[i] = gray + 100; + pixelData[i + 1] = gray + 50; + pixelData[i + 2] = gray; + } + } +} + +/** + * Represents a filter that applies a pixelation effect to an image. + * @extends ImageFilter + */ +class PixelateFilter extends ImageFilter { + + constructor(blockSize = 8){ + super(); + this.blockSize = blockSize; + } + + applyFilter(pixelData, width, height) { + for (let y = 0; y < height; y += this.blockSize) { + for (let x = 0; x < width; x += this.blockSize) { + const blockAverage = this.getBlockAverage(x, y, width, height, pixelData, this.blockSize); + + // Set all pixels in the block to the calculated average color + for (let blockY = 0; blockY < this.blockSize && y + blockY < height; blockY++) { + for (let blockX = 0; blockX < this.blockSize && x + blockX < width; blockX++) { + const pixelIndex = ((y + blockY) * width + (x + blockX)) * 4; + pixelData[pixelIndex] = blockAverage.red; + pixelData[pixelIndex + 1] = blockAverage.green; + pixelData[pixelIndex + 2] = blockAverage.blue; + } + } + } + } + } + + /** + * Calculates the average RGB values of a block of pixels. + * + * @param {number} x - The x-coordinate of the top-left corner of the block. + * @param {number} y - The y-coordinate of the top-left corner of the block. + * @param {number} width - The width of the image. + * @param {number} height - The height of the image. + * @param {Uint8ClampedArray} pixels - The array of pixel data. + * @returns {Object} - An object containing the average red, green, and blue values. + */ + getBlockAverage(x, y, width, height, pixels) { + let totalRed = 0; + let totalGreen = 0; + let totalBlue = 0; + const blockSizeSquared = this.blockSize * this.blockSize; + + for (let blockY = 0; blockY < this.blockSize && y + blockY < height; blockY++) { + for (let blockX = 0; blockX < this.blockSize && x + blockX < width; blockX++) { + const pixelIndex = ((y + blockY) * width + (x + blockX)) * 4; + totalRed += pixels[pixelIndex]; + totalGreen += pixels[pixelIndex + 1]; + totalBlue += pixels[pixelIndex + 2]; + } + } + + return { + red: totalRed / blockSizeSquared, + green: totalGreen / blockSizeSquared, + blue: totalBlue / blockSizeSquared, + }; + } + +} + +/** + * Represents a filter that applies a blur effect to an image. + * @extends ImageFilter + */ +class BlurFilter extends ImageFilter { + constructor(radius = 8) { + super(); + this.radius = radius; + } + + applyFilter(pixelData, width, height) { + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x++) { + const pixelIndex = (y * width + x) * 4; + + const averageColor = this.getAverageColor(x, y, width, height, pixelData, this.radius); + pixelData[pixelIndex] = averageColor.red; + pixelData[pixelIndex + 1] = averageColor.green; + pixelData[pixelIndex + 2] = averageColor.blue; + } + } + } + + /** + * Calculates the average color of a rectangular region in an image. + * + * @param {number} x - The x-coordinate of the top-left corner of the region. + * @param {number} y - The y-coordinate of the top-left corner of the region. + * @param {number} width - The width of the region. + * @param {number} height - The height of the region. + * @param {Uint8ClampedArray} pixels - The pixel data of the image. + * @param {number} radius - The radius of the neighborhood to consider for each pixel. + * @returns {object} - An object representing the average color of the region, with red, green, and blue components. + */ + getAverageColor(x, y, width, height, pixels, radius) { + let totalRed = 0; + let totalGreen = 0; + let totalBlue = 0; + let pixelCount = 0; + + for (let offsetY = -radius; offsetY <= radius; offsetY++) { + for (let offsetX = -radius; offsetX <= radius; offsetX++) { + const neighborX = x + offsetX; + const neighborY = y + offsetY; + + if (neighborX >= 0 && neighborX < width && neighborY >= 0 && neighborY < height) { + const pixelIndex = (neighborY * width + neighborX) * 4; + totalRed += pixels[pixelIndex]; + totalGreen += pixels[pixelIndex + 1]; + totalBlue += pixels[pixelIndex + 2]; + pixelCount++; + } + } + } + + return { + red: totalRed / pixelCount, + green: totalGreen / pixelCount, + blue: totalBlue / pixelCount, + }; + } +} diff --git a/libraries/Camera/extras/WebSerialCamera/imageDataProcessor.js b/libraries/Camera/extras/WebSerialCamera/imageDataProcessor.js new file mode 100644 index 000000000..83ff2a650 --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/imageDataProcessor.js @@ -0,0 +1,162 @@ +/** + * Represents an image data processor that converts raw image data to a specified pixel format. + * + * @author Sebastian Romero + */ +class ImageDataProcessor { + pixelFormatInfo = { + "RGB565": { + "convert": this.convertRGB565ToRGB888, + "bytesPerPixel": 2 + }, + "GRAYSCALE": { + "convert": this.convertGrayScaleToRGB888, + "bytesPerPixel": 1 + }, + "RGB888": { + "convert": this.convertToRGB888, + "bytesPerPixel": 3 + }, + "BAYER": { + "convert": () => {throw new Error("BAYER conversion not implemented.")}, + "bytesPerPixel": 1 + } + }; + + /** + * Creates a new instance of the imageDataProcessor class. + * @param {string|null} mode - The image mode of the image data processor. (Optional) + * Possible values: RGB565, GRAYSCALE, RGB888, BAYER + * @param {number|null} width - The width of the image data processor. (Optional) + * @param {number|null} height - The height of the image data processor. (Optional) + */ + constructor(mode = null, width = null, height = null) { + if(mode) this.setImageMode(mode); + if(width && height) this.setResolution(width, height); + } + + /** + * Sets the image mode of the image data processor. + * Possible values: RGB565, GRAYSCALE, RGB888, BAYER + * + * @param {string} mode - The image mode of the image data processor. + */ + setImageMode(mode) { + this.mode = mode; + this.bytesPerPixel = this.pixelFormatInfo[mode].bytesPerPixel; + } + + /** + * Sets the resolution of the target image. + * @param {number} width - The width of the resolution. + * @param {number} height - The height of the resolution. + */ + setResolution(width, height) { + this.width = width; + this.height = height; + } + + /** + * Calculates the total number of bytes in the image data + * based on the current image mode and resolution. + * + * @returns {number} The total number of bytes. + */ + getTotalBytes() { + return this.width * this.height * this.bytesPerPixel; + } + + /** + * Resets the state of the imageDataProcessor. + * This resets the image mode, resolution, and bytes per pixel. + */ + reset() { + this.mode = null; + this.bytesPerPixel = null; + this.width = null; + this.height = null; + } + + /** + * Converts a pixel value from RGB565 format to RGB888 format. + * @param {number} pixelValue - The pixel value in RGB565 format. + * @returns {number[]} - The RGB888 pixel value as an array of three values [R, G, B]. + */ + convertRGB565ToRGB888(pixelValue) { + // RGB565 + let r = (pixelValue >> (6 + 5)) & 0x1F; + let g = (pixelValue >> 5) & 0x3F; + let b = pixelValue & 0x1F; + // RGB888 - amplify + r <<= 3; + g <<= 2; + b <<= 3; + return [r, g, b]; + } + + /** + * Converts a grayscale pixel value to RGB888 format. + * @param {number} pixelValue - The grayscale pixel value. + * @returns {number[]} - The RGB888 pixel value as an array of three values [R, G, B]. + */ + convertGrayScaleToRGB888(pixelValue) { + return [pixelValue, pixelValue, pixelValue]; + } + + /** + * Converts a pixel value to RGB888 format. + * @param {number} pixelValue - The pixel value to convert. + * @returns {number[]} - The RGB888 pixel value as an array of three values [R, G, B]. + */ + convertToRGB888(pixelValue){ + return pixelValue; + } + + /** + * Retrieves the pixel value from the source data at the specified index + * using big endian: the most significant byte comes first. + * + * @param {Uint8Array} sourceData - The source data array. + * @param {number} index - The index of the pixel value in the source data array. + * @returns {number} The pixel value. + */ + getPixelValue(sourceData, index) { + if (this.bytesPerPixel == 1) { + return sourceData[index]; + } else if (this.bytesPerPixel == 2) { + return (sourceData[index] << 8) | sourceData[index + 1]; + } else if (this.bytesPerPixel == 3) { + return (sourceData[index] << 16) | (sourceData[index + 1] << 8) | sourceData[index + 2]; + } else if (this.bytesPerPixel == 4) { + return (sourceData[index] << 24) | (sourceData[index + 1] << 16) | (sourceData[index + 2] << 8) | sourceData[index + 3]; + } + + return 0; + } + + /** + * Retrieves the image data from the given bytes by converting each pixel value. + * + * @param {Uint8Array} bytes - The raw byte array containing the image data. + * @returns {Uint8ClampedArray} The image data as a Uint8ClampedArray containing RGBA values. + */ + convertToPixelData(bytes) { + const BYTES_PER_ROW = this.width * this.bytesPerPixel; + const dataContainer = new Uint8ClampedArray(this.width * this.height * 4); // 4 channels: R, G, B, A + + for (let row = 0; row < this.height; row++) { + for (let col = 0; col < this.width; col++) { + const sourceDataIndex = (row * BYTES_PER_ROW) + (col * this.bytesPerPixel); + const pixelValue = this.getPixelValue(bytes, sourceDataIndex, this.bytesPerPixel); + const [r, g, b] = this.pixelFormatInfo[this.mode].convert(pixelValue); + + const pixelIndex = ((row * this.width) + col) * 4; // 4 channels: R, G, B, A + dataContainer[pixelIndex] = r; // Red channel + dataContainer[pixelIndex + 1] = g; // Green channel + dataContainer[pixelIndex + 2] = b; // Blue channel + dataContainer[pixelIndex + 3] = 255; // Alpha channel (opacity) + } + } + return dataContainer; + } + } \ No newline at end of file diff --git a/libraries/Camera/extras/WebSerialCamera/index.html b/libraries/Camera/extras/WebSerialCamera/index.html new file mode 100644 index 000000000..ba70c1b43 --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/index.html @@ -0,0 +1,37 @@ + + + + + + Web Serial Bitmap Reader + + + +
+ +
+ + + + +
+
+ + +
+
+ + + + + + + + diff --git a/libraries/Camera/extras/WebSerialCamera/serialConnectionHandler.js b/libraries/Camera/extras/WebSerialCamera/serialConnectionHandler.js new file mode 100644 index 000000000..6f23c644f --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/serialConnectionHandler.js @@ -0,0 +1,285 @@ +/** + * @fileoverview This file contains the SerialConnectionHandler class. + * It handles the connection between the browser and the Arduino board via Web Serial. + * @author Sebastian Romero + */ + +const ArduinoUSBVendorId = 0x2341; +const UserActionAbortError = 8; + +/** + * Handles the connection between the browser and the Arduino board via Web Serial. + * Please note that for board with software serial over USB, the baud rate and other serial settings have no effect. + */ +class SerialConnectionHandler { + /** + * Represents a serial connection handler. + * @constructor + * @param {number} [baudRate=115200] - The baud rate of the serial connection. + * @param {number} [dataBits=8] - The number of data bits. + * @param {number} [stopBits=1] - The number of stop bits. + * @param {string} [parity="none"] - The parity setting. + * @param {string} [flowControl="none"] - The flow control setting. + * @param {number} [bufferSize=2097152] - The size of the buffer in bytes. The default value is 2 MB. Max buffer size is 16MB. + * @param {number} [timeout=2000] - The connection timeout value in milliseconds. The default value is 2000 ms. + */ + constructor(baudRate = 115200, dataBits = 8, stopBits = 1, parity = "none", flowControl = "none", bufferSize = 2 * 1024 * 1024, timeout = 2000) { + this.baudRate = baudRate; + this.dataBits = dataBits; + this.stopBits = stopBits; + this.flowControl = flowControl; + this.bufferSize = bufferSize; + this.parity = parity; + this.timeout = timeout; + this.currentPort = null; + this.currentReader = null; + this.currentTransformer = null; + this.readableStreamClosed = null; + this.registerEvents(); + } + + /** + * Sets the connection timeout for the serial connection. + * @param {number} timeout - The timeout value in milliseconds. + */ + setConnectionTimeout(timeout) { + this.timeout = timeout; + } + + /** + * Prompts the user to select a serial port. + * @returns {Promise} The serial port that the user has selected. + */ + async requestSerialPort() { + try { + const port = await navigator.serial.requestPort({ filters: [{ usbVendorId: ArduinoUSBVendorId }] }); + this.currentPort = port; + return port; + } catch (error) { + if (error.code != UserActionAbortError) { + console.log(error); + } + return null; + } + } + + /** + * Checks if the browser is connected to a serial port. + * @returns {boolean} True if the browser is connected, false otherwise. + */ + isConnected() { + return this.currentPort?.readable != null; + } + + /** + * Opens a connection to the given serial port by using the settings specified in the constructor. + * If the port is already open, it will be closed first. + * This method will call the `onConnect` callback before it returns. + * @returns {boolean} True if the connection was successfully opened, false otherwise. + */ + async connectSerial() { + try { + // If the port is already open, close it + if (this.isConnected()) await this.currentPort.close(); + await this.currentPort.open({ + baudRate: this.baudRate, + parity: this.parity, + dataBits: this.dataBits, + stopBits: this.stopBits, + bufferSize: this.bufferSize, + flowControl: this.flowControl + }); + console.log('✅ Connected to serial port.'); + if(this.onConnect) this.onConnect(); + return true; + } catch (error) { + return false; + } + } + + /** + * Disconnects from the current serial port. + * If a reading operation is in progress, it will be canceled. + * This function will call the `onDisconnect` callback before it returns. + * @returns {Promise} A promise that resolves when the port has been closed. + */ + async disconnectSerial() { + if (!this.currentPort) return; + try { + const port = this.currentPort; + this.currentPort = null; + await this.currentReader?.cancel(); + await this.readableStreamClosed.catch(() => { }); // Ignores the error + this.currentTransformer?.flush(); + await port.close(); + console.log('🔌 Disconnected from serial port.'); + if(this.onDisconnect) this.onDisconnect(); + } catch (error) { + console.error('💣 Error occurred while disconnecting: ' + error.message); + }; + } + + /** + * Tries to establish a connection to the first available serial port that has the Arduino USB vendor ID. + * This only works if the user has previously granted the website access to that serial port. + * @returns {Promise} True if the connection was successfully opened, false otherwise. + */ + async autoConnect() { + if (this.currentPort) { + console.log('🔌 Already connected to a serial port.'); + return false; + } + + // Get all serial ports the user has previously granted the website access to. + const ports = await navigator.serial.getPorts(); + + for (const port of ports) { + console.log('👀 Serial port found with VID: 0x' + port.getInfo().usbVendorId.toString(16)); + if (port.getInfo().usbVendorId === ArduinoUSBVendorId) { + this.currentPort = port; + return await this.connectSerial(this.currentPort); + } + } + return false; + } + + + /** + * Reads a specified number of bytes from the serial connection. + * @param {number} numBytes - The number of bytes to read. + * @returns {Promise} - A promise that resolves to a Uint8Array containing the read bytes. + */ + async readBytes(numBytes) { + return await this.readData(new BytesWaitTransformer(numBytes)); + } + + /** + * Reads the specified number of bytes from the serial port. + * @param {Transformer} transformer The transformer that is used to process the bytes. + * If the timeout is reached, the reader will be canceled and the read lock will be released. + */ + async readData(transformer) { + if(!transformer) throw new Error('Transformer is null'); + if(!this.currentPort) return null; + if(this.currentPort.readable.locked) { + console.log('🔒 Stream is already locked. Ignoring request...'); + return null; + } + + const transformStream = new TransformStream(transformer); + this.currentTransformer = transformer; + // pipeThrough() cannot be used because we need a promise that resolves when the stream is closed + // to be able to close the port. pipeTo() returns such a promise. + // SEE: https://stackoverflow.com/questions/71262432/how-can-i-close-a-web-serial-port-that-ive-piped-through-a-transformstream + this.readableStreamClosed = this.currentPort.readable.pipeTo(transformStream.writable); + const reader = transformStream.readable.getReader(); + this.currentReader = reader; + let timeoutID = null; + + try { + if (this.timeout) { + timeoutID = setTimeout(() => { + console.log('⌛️ Timeout occurred while reading.'); + if (this.currentPort?.readable) reader?.cancel(); + this.currentTransformer.flush(); + }, this.timeout); + } + const { value, done } = await reader.read(); + if (timeoutID) clearTimeout(timeoutID); + + if (done) { + console.log('🚫 Reader has been canceled'); + return null; + } + return value; + } catch (error) { + console.error('💣 Error occurred while reading: ' + error.message); + } finally { + // console.log('🔓 Releasing reader lock...'); + await reader?.cancel(); // Discards any enqueued data + await this.readableStreamClosed.catch(() => { }); // Ignores the error + reader?.releaseLock(); + this.currentReader = null; + this.currentTransformer = null; + } + } + + /** + * Sends the provided byte array data through the current serial port. + * + * @param {ArrayBuffer} byteArray - The byte array data to send. + * @returns {Promise} - A promise that resolves when the data has been sent. + */ + async sendData(byteArray) { + if (!this.currentPort?.writable) { + console.log('🚫 Port is not writable. Ignoring request...'); + return; + } + const writer = this.currentPort.writable.getWriter(); + await writer.write(new Uint8Array(byteArray)); + await writer.close(); + } + + /** + * Reqests an image frame from the Arduino board by writing a 1 to the serial port. + * @returns {Promise} A promise that resolves when the frame has been requested and the write stream has been closed. + */ + async requestFrame() { + // console.log('Writing 1 to the serial port...'); + // Write a 1 to the serial port + return this.sendData([1]); + } + + /** + * Requests the camera configuration from the board by writing a 2 to the serial port. + * @returns {Promise} A promise that resolves with the configuration data. + */ + async requestConfig() { + return this.sendData([2]); + } + + /** + * Requests the camera resolution from the board and reads it back from the serial port. + * The configuration simply consists of two bytes: the mode and the resolution. + * @returns {Promise} The raw configuration data as an ArrayBuffer. + */ + async getConfig() { + if (!this.currentPort) return; + + await this.requestConfig(); + // console.log(`Trying to read 2 bytes...`); + return await this.readBytes(2, this.timeout); + } + + /** + * Requests a frame from the Arduino board and reads the specified number of bytes from the serial port afterwards. + * Times out after the timeout in milliseconds specified in the constructor. + * @param {Transformer} transformer The transformer that is used to process the bytes. + */ + async getFrame(transformer) { + if (!this.currentPort) return; + await this.requestFrame(); + return await this.readData(transformer, this.timeout); + } + + /** + * Registers event listeners for the `connect` and `disconnect` events of the serial port. + * The `connect` event is fired when a serial port becomes available not when it is opened. + * When the `connect` event is fired, `autoConnect()` is called. + * The `disconnect` event is fired when a serial port is lost. + * When the `disconnect` event is fired, the `onDisconnect` callback is called. + **/ + registerEvents() { + navigator.serial.addEventListener("connect", (e) => { + // Connect to `e.target` or add it to a list of available ports. + console.log('🔌 Serial port became available. VID: 0x' + e.target.getInfo().usbVendorId.toString(16)); + this.autoConnect(); + }); + + navigator.serial.addEventListener("disconnect", (e) => { + console.log('❌ Serial port lost. VID: 0x' + e.target.getInfo().usbVendorId.toString(16)); + this.currentPort = null; + if(this.onDisconnect) this.onDisconnect(); + }); + } +} \ No newline at end of file diff --git a/libraries/Camera/extras/WebSerialCamera/style.css b/libraries/Camera/extras/WebSerialCamera/style.css new file mode 100644 index 000000000..71fe2c19c --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/style.css @@ -0,0 +1,82 @@ +:root { + --main-control-color: #008184; + --main-control-color-hover: #005c5f; + --main-flexbox-gap: 16px; + --secondary-text-color: #87898b; +} + +html { + font-size: 14px; +} + +body { + font-family: 'Open Sans', sans-serif; + text-align: center; +} + +#main-container { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; + margin-top: 20px; +} + +.controls { + display: flex; + flex-direction: row; + align-items: center; + gap: 1rem; + margin-top: 20px; +} + +canvas { + border-radius: 5px; +} + +button { + font-family: 'Open Sans', sans-serif; + font-weight: 700; + font-size: 1rem; + justify-content: center; + background-color: var(--main-control-color); + color: #fff; + cursor: pointer; + letter-spacing: 1.28px; + line-height: normal; + outline: none; + padding: 8px 18px; + text-align: center; + text-decoration: none; + border: 2px solid transparent; + border-radius: 32px; + text-transform: uppercase; + box-sizing: border-box; +} + +button:hover { + background-color: var(--main-control-color-hover); +} + +label { + font-family: 'Open Sans', sans-serif; + font-size: 1rem; + font-weight: bold; + color: var(--secondary-text-color); +} + +select { + font-family: 'Open Sans', sans-serif; + font-size: 1rem; + border: 1px solid #ccc; + padding: 5px 10px; + border-radius: 5px; +} + +#refresh { + display: none; +} + +#start { + display: none; +} \ No newline at end of file diff --git a/libraries/Camera/extras/WebSerialCamera/transformers.js b/libraries/Camera/extras/WebSerialCamera/transformers.js new file mode 100644 index 000000000..ac32c43c4 --- /dev/null +++ b/libraries/Camera/extras/WebSerialCamera/transformers.js @@ -0,0 +1,330 @@ +/** + * @fileoverview This file contains classes that transform incoming data into higher-level data types. + * @author Sebastian Romero + */ + + +/** + * Represents a transformer that processes incoming data between start and stop sequences. + */ +class StartStopSequenceTransformer { + constructor(startSequence = null, stopSequence = null, expectedBytes = null) { + this.startSequence = new Uint8Array(startSequence); + this.stopSequence = new Uint8Array(stopSequence); + this.expectedBytes = expectedBytes; + this.buffer = new Uint8Array(0); + this.controller = undefined; + this.waitingForStart = true; + } + + /** + * Sets the start sequence for the received data. + * This is used to disregard any data before the start sequence. + * @param {Array} startSequence - The start sequence as an array of numbers. + */ + setStartSequence(startSequence) { + this.startSequence = new Uint8Array(startSequence); + } + + /** + * Sets the stop sequence for the received data. + * This is used to know when the data has finished being sent and should be processed. + * @param {Array} stopSequence - The stop sequence as an array of numbers. + */ + setStopSequence(stopSequence) { + this.stopSequence = new Uint8Array(stopSequence); + } + + /** + * Sets the expected number of bytes for the received data. + * This is used to check if the number of bytes matches the expected amount + * and discard the data if it doesn't. + * + * @param {number} expectedBytes - The expected number of bytes. + */ + setExpectedBytes(expectedBytes) { + this.expectedBytes = expectedBytes; + } + + /** + * Transforms the incoming chunk of data and enqueues the processed bytes to the controller + * between start and stop sequences. + * + * @param {Uint8Array} chunk - The incoming chunk of data. + * @param {TransformStreamDefaultController} controller - The controller for enqueuing processed bytes. + * @returns {Promise} - A promise that resolves when the transformation is complete. + */ + async transform(chunk, controller) { + this.controller = controller; + + // Concatenate incoming chunk with existing buffer + this.buffer = new Uint8Array([...this.buffer, ...chunk]); + let startIndex = 0; + + // Only process data if at least one start and stop sequence is present in the buffer + const minimumRequiredBytes = Math.min(this.startSequence.length, this.stopSequence.length); + + while (this.buffer.length >= minimumRequiredBytes) { + if (this.waitingForStart) { + // Look for the start sequence + startIndex = this.indexOfSequence(this.buffer, this.startSequence, startIndex); + + if (startIndex === -1) { + // No start sequence found, discard the buffer + this.buffer = new Uint8Array(0); + return; + } + + // Remove bytes before the start sequence including the start sequence + this.buffer = this.buffer.slice(startIndex + this.startSequence.length); + startIndex = 0; // Reset startIndex after removing bytes + this.waitingForStart = false; + } + + // Look for the stop sequence + const stopIndex = this.indexOfSequence(this.buffer, this.stopSequence, startIndex); + + if (stopIndex === -1) { + // No stop sequence found, wait for more data + return; + } + + // Extract bytes between start and stop sequences + const bytesToProcess = this.buffer.slice(startIndex, stopIndex); + // Remove processed bytes from the buffer including the stop sequence. + this.buffer = this.buffer.slice(stopIndex + this.stopSequence.length); + + // Check if the number of bytes matches the expected amount + if (this.expectedBytes !== null && bytesToProcess.length !== this.expectedBytes) { + // Skip processing the bytes, but keep the remaining data in the buffer + console.error(`🚫 Expected ${this.expectedBytes} bytes, but got ${bytesToProcess.length} bytes instead. Dropping data.`); + this.waitingForStart = true; + return; + } + + // Notify the controller that bytes have been processed + controller.enqueue(this.convertBytes(bytesToProcess)); + this.waitingForStart = true; + } + } + + /** + * Flushes the buffer and discards any remaining bytes when the stream is closed. + * + * @param {WritableStreamDefaultController} controller - The controller for the writable stream. + */ + flush(controller) { + // Discard the remaining data in the buffer + this.buffer = new Uint8Array(0); + } + + + /** + * Finds the index of the given sequence in the buffer. + * + * @param {Uint8Array} buffer - The buffer to search. + * @param {Uint8Array} sequence - The sequence to find. + * @param {number} startIndex - The index to start searching from. + * @returns {number} - The index of the sequence in the buffer, or -1 if not found. + */ + indexOfSequence(buffer, sequence, startIndex) { + for (let i = startIndex; i <= buffer.length - sequence.length; i++) { + if (this.isSubarray(buffer, sequence, i)) { + return i; + } + } + return -1; + } + + /** + * Checks if a subarray is present at a given index in the buffer. + * + * @param {Uint8Array} buffer - The buffer to check. + * @param {Uint8Array} subarray - The subarray to check. + * @param {number} index - The index to start checking from. + * @returns {boolean} - True if the subarray is present at the given index, false otherwise. + */ + isSubarray(buffer, subarray, index) { + for (let i = 0; i < subarray.length; i++) { + if (buffer[index + i] !== subarray[i]) { + return false; + } + } + return true; + } + + /** + * Converts bytes into higher-level data types. + * This method is meant to be overridden by subclasses. + * @param {Uint8Array} bytes + * @returns + */ + convertBytes(bytes) { + return bytes; + } + +} + + +/** + * A transformer class that waits for a specific number of bytes before processing them. + */ +class BytesWaitTransformer { + constructor(waitBytes = 1) { + this.waitBytes = waitBytes; + this.buffer = new Uint8Array(0); + this.controller = undefined; + } + + /** + * Sets the number of bytes to wait before processing the data. + * @param {number} waitBytes - The number of bytes to wait. + */ + setBytesToWait(waitBytes) { + this.waitBytes = waitBytes; + } + + /** + * Converts bytes into higher-level data types. + * This method is meant to be overridden by subclasses. + * @param {Uint8Array} bytes + * @returns + */ + convertBytes(bytes) { + return bytes; + } + + /** + * Transforms the incoming chunk of data and enqueues the processed bytes to the controller. + * It does so when the buffer contains at least the specified number of bytes. + * @param {Uint8Array} chunk - The incoming chunk of data. + * @param {TransformStreamDefaultController} controller - The controller for enqueuing processed bytes. + * @returns {Promise} - A promise that resolves when the transformation is complete. + */ + async transform(chunk, controller) { + this.controller = controller; + + // Concatenate incoming chunk with existing buffer + this.buffer = new Uint8Array([...this.buffer, ...chunk]); + + while (this.buffer.length >= this.waitBytes) { + // Extract the required number of bytes + const bytesToProcess = this.buffer.slice(0, this.waitBytes); + + // Remove processed bytes from the buffer + this.buffer = this.buffer.slice(this.waitBytes); + + // Notify the controller that bytes have been processed + controller.enqueue(this.convertBytes(bytesToProcess)); + } + } + + /** + * Flushes the buffer and processes any remaining bytes when the stream is closed. + * + * @param {WritableStreamDefaultController} controller - The controller for the writable stream. + */ + flush(controller) { + if (this.buffer.length > 0) { + // Handle remaining bytes (if any) when the stream is closed + const remainingBytes = this.buffer.slice(); + console.log("Remaining bytes:", remainingBytes); + + // Notify the controller that remaining bytes have been processed + controller?.enqueue(remainingBytes); + } + } +} + +/** + * Represents an Image Data Transformer that converts bytes into image data. + * See other example for PNGs here: https://github.com/mdn/dom-examples/blob/main/streams/png-transform-stream/png-transform-stream.js + * @extends StartStopSequenceTransformer + */ +class ImageDataTransformer extends StartStopSequenceTransformer { + /** + * Creates a new instance of the Transformer class. + * @param {CanvasRenderingContext2D} context - The canvas rendering context. + * @param {number} [width=null] - The width of the image. + * @param {number} [height=null] - The height of the image. + * @param {string} [imageMode=null] - The image mode. + */ + constructor(context, width = null, height = null, imageMode = null) { + super(); + this.context = context; + this.imageDataProcessor = new ImageDataProcessor(); + if (width && height){ + this.setResolution(width, height); + } + if (imageMode){ + this.setImageMode(imageMode); + } + } + + /** + * Sets the resolution of the camera image that is being processed. + * + * @param {number} width - The width of the resolution. + * @param {number} height - The height of the resolution. + */ + setResolution(width, height) { + this.width = width; + this.height = height; + this.imageDataProcessor.setResolution(width, height); + if(this.isConfigured()){ + this.setExpectedBytes(this.imageDataProcessor.getTotalBytes()); + } + } + + /** + * Sets the image mode of the camera image that is being processed. + * Possible values: RGB565, GRAYSCALE, RGB888, BAYER + * + * @param {string} imageMode - The image mode to set. + */ + setImageMode(imageMode) { + this.imageMode = imageMode; + this.imageDataProcessor.setImageMode(imageMode); + if(this.isConfigured()){ + this.setBytesToWait(this.imageDataProcessor.getTotalBytes()); + } + } + + /** + * Checks if the image data processor is configured. + * This is true if the image mode and resolution are set. + * @returns {boolean} True if the image data processor is configured, false otherwise. + */ + isConfigured() { + return this.imageMode && this.width && this.height; + } + + /** + * Resets the state of the transformer. + */ + reset() { + this.imageMode = null; + this.width = null; + this.height = null; + this.filter = null; + this.imageDataProcessor.reset(); + } + + /** + * Converts the given raw bytes into an ImageData object by using the ImageDataProcessor. + * + * @param {Uint8Array} bytes - The bytes to convert. + * @returns {ImageData} The converted ImageData object. + */ + convertBytes(bytes) { + let pixelData = this.imageDataProcessor.convertToPixelData(bytes); + + if(this.filter){ + this.filter.applyFilter(pixelData, imageDataTransfomer.width, imageDataTransfomer.height); + } + + const imageData = this.context.createImageData(imageDataTransfomer.width, imageDataTransfomer.height); + imageData.data.set(pixelData); + return imageData; + } +} \ No newline at end of file diff --git a/libraries/Camera/src/camera.cpp b/libraries/Camera/src/camera.cpp index e82ddfe90..050ea3772 100644 --- a/libraries/Camera/src/camera.cpp +++ b/libraries/Camera/src/camera.cpp @@ -27,8 +27,14 @@ #define ALIGN_PTR(p,a) ((p & (a-1)) ?(((uintptr_t)p + a) & ~(uintptr_t)(a-1)) : p) +#ifdef __SCB_DCACHE_LINE_SIZE +#define FB_ALIGNMENT __SCB_DCACHE_LINE_SIZE +#else +#define FB_ALIGNMENT 32 +#endif + // Include all image sensor drivers here. -#if defined (ARDUINO_PORTENTA_H7_M7) || defined (ARDUINO_PORTENTA_H7_M4) +#if defined (ARDUINO_PORTENTA_H7_M7) #define DCMI_TIM (TIM1) #define DCMI_TIM_PIN (GPIO_PIN_1) @@ -80,7 +86,7 @@ arduino::MbedI2C CameraWire(I2C_SDA1, I2C_SCL1); // DCMI GPIO pins struct static const struct { GPIO_TypeDef *port; uint16_t pin; } dcmi_pins[] = { - #if defined (ARDUINO_PORTENTA_H7_M7) || defined (ARDUINO_PORTENTA_H7_M4) + #if defined (ARDUINO_PORTENTA_H7_M7) {GPIOA, GPIO_PIN_4 }, {GPIOA, GPIO_PIN_6 }, {GPIOI, GPIO_PIN_4 }, @@ -175,7 +181,7 @@ void HAL_DCMI_MspInit(DCMI_HandleTypeDef *hdcmi) hgpio.Speed = GPIO_SPEED_FREQ_VERY_HIGH; hgpio.Alternate = GPIO_AF13_DCMI; - #if defined (ARDUINO_PORTENTA_H7_M7) || defined (ARDUINO_PORTENTA_H7_M4) + #if defined (ARDUINO_PORTENTA_H7_M7) /* Enable GPIO clocks */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); @@ -337,15 +343,16 @@ FrameBuffer::FrameBuffer(int32_t x, int32_t y, int32_t bpp) : _fb_size(x*y*bpp), _isAllocated(true) { - uint8_t *buffer = (uint8_t *)malloc(x*y*bpp); - _fb = (uint8_t *)ALIGN_PTR((uintptr_t)buffer, 32); + uint8_t *buffer = (uint8_t *) malloc(x * y * bpp + FB_ALIGNMENT); + _fb = (uint8_t *) ALIGN_PTR((uintptr_t) buffer, FB_ALIGNMENT); } FrameBuffer::FrameBuffer(int32_t address) : _fb_size(0), - _isAllocated(true) + _isAllocated(true), + _fb((uint8_t *) address) { - _fb = (uint8_t *)ALIGN_PTR((uintptr_t)address, 32); + // Assume that `address` is aligned, this will be verified later in grabFrame. } FrameBuffer::FrameBuffer() : @@ -688,17 +695,17 @@ int Camera::grabFrame(FrameBuffer &fb, uint32_t timeout) } } } else { - uint8_t *buffer = (uint8_t *)malloc(framesize+32); - uint8_t *alignedBuff = (uint8_t *)ALIGN_PTR((uintptr_t)buffer, 32); - fb.setBuffer(alignedBuff); + uint8_t *buffer = (uint8_t *) malloc(framesize + FB_ALIGNMENT); + uint8_t *aligned_buffer = (uint8_t *) ALIGN_PTR((uintptr_t) buffer, FB_ALIGNMENT); + fb.setBuffer(aligned_buffer); } uint8_t *framebuffer = fb.getBuffer(); - // Ensure FB is aligned to 32 bytes cache lines. - if ((uint32_t) framebuffer & 0x1F) { + // Ensure that the framebuffer is aligned. + if ((uint32_t) framebuffer & (FB_ALIGNMENT - 1)) { if (_debug) { - _debug->println("Framebuffer not aligned to 32 bytes cache lines"); + _debug->println("The framebuffer memory is not aligned!"); } return -1; } diff --git a/libraries/Ethernet/examples/AdvancedChatServer/AdvancedChatServer.ino b/libraries/Ethernet/examples/AdvancedChatServer/AdvancedChatServer.ino index 630f27240..890787130 100644 --- a/libraries/Ethernet/examples/AdvancedChatServer/AdvancedChatServer.ino +++ b/libraries/Ethernet/examples/AdvancedChatServer/AdvancedChatServer.ino @@ -4,11 +4,6 @@ A more advanced server that distributes any incoming messages to all connected clients but the client the message comes from. To use, telnet to your device's IP address and type. - You can see the client's input in the serial monitor as well. - Using an Arduino Wiznet Ethernet shield. - - Circuit: - * Ethernet shield attached to pins 10, 11, 12, 13 created 18 Dec 2009 by David A. Mellis @@ -67,7 +62,7 @@ void setup() { void loop() { // check for any new client connecting, and say hello (before any incoming data) - EthernetClient newClient = server.available(); + EthernetClient newClient = server.accept(); if (newClient) { for (byte i=0; i < 8; i++) { if (!clients[i]) { diff --git a/libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino b/libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino index 6f26ef888..37ba334c4 100644 --- a/libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino +++ b/libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino @@ -141,7 +141,7 @@ void getData() { void listenForEthernetClients() { // listen for incoming clients - EthernetClient client = server.available(); + EthernetClient client = server.accept(); if (client) { Serial.println("Got a client"); // an http request ends with a blank line diff --git a/libraries/Ethernet/examples/ChatServer/ChatServer.ino b/libraries/Ethernet/examples/ChatServer/ChatServer.ino deleted file mode 100644 index bfc310b9c..000000000 --- a/libraries/Ethernet/examples/ChatServer/ChatServer.ino +++ /dev/null @@ -1,97 +0,0 @@ -/* - Chat Server - - A simple server that distributes any incoming messages to all - connected clients. To use, telnet to your device's IP address and type. - You can see the client's input in the serial monitor as well. - Using an Arduino Wiznet Ethernet shield. - - Circuit: - * Ethernet shield attached to pins 10, 11, 12, 13 - - created 18 Dec 2009 - by David A. Mellis - modified 9 Apr 2012 - by Tom Igoe - - */ - -#include -#include -#include - -// The IP address will be dependent on your local network. -// gateway and subnet are optional: -IPAddress ip(192, 168, 1, 177); -IPAddress myDns(192, 168, 1, 1); -IPAddress gateway(192, 168, 1, 1); -IPAddress subnet(255, 255, 0, 0); - - -// telnet defaults to port 23 -EthernetServer server(23); -boolean alreadyConnected = false; // whether or not the client was connected previously - -void setup() { - // You can use Ethernet.init(pin) to configure the CS pin - //Ethernet.init(10); // Most Arduino shields - //Ethernet.init(5); // MKR ETH shield - //Ethernet.init(0); // Teensy 2.0 - //Ethernet.init(20); // Teensy++ 2.0 - //Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet - //Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet - - // initialize the ethernet device - Ethernet.begin(ip, myDns, gateway, subnet); - - // Open serial communications and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for native USB port only - } - - // Check for Ethernet hardware present - if (Ethernet.hardwareStatus() == EthernetNoHardware) { - Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); - while (true) { - delay(1); // do nothing, no point running without Ethernet hardware - } - } - if (Ethernet.linkStatus() == LinkOFF) { - Serial.println("Ethernet cable is not connected."); - } - - // start listening for clients - server.begin(); - - Serial.print("Chat server address:"); - Serial.println(Ethernet.localIP()); -} - -void loop() { - // wait for a new client: - EthernetClient client = server.available(); - - // when the client sends the first byte, say hello: - if (client) { - if (!alreadyConnected) { - // clear out the input buffer: - client.flush(); - Serial.println("We have a new client"); - client.println("Hello, client!"); - alreadyConnected = true; - } - - if (client.available() > 0) { - // read the bytes incoming from the client: - char thisChar = client.read(); - // echo the bytes back to the client: - server.write(thisChar); - // echo the bytes to the server as well: - Serial.write(thisChar); - } - } -} - - - diff --git a/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino b/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino deleted file mode 100644 index cbf2deadd..000000000 --- a/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino +++ /dev/null @@ -1,91 +0,0 @@ -/* - DHCP Chat Server - - A simple server that distributes any incoming messages to all - connected clients. To use, telnet to your device's IP address and type. - You can see the client's input in the serial monitor as well. - Using an Arduino Wiznet Ethernet shield. - - THis version attempts to get an IP address using DHCP - - Circuit: - * Ethernet shield attached to pins 10, 11, 12, 13 - - created 21 May 2011 - modified 9 Apr 2012 - by Tom Igoe - modified 02 Sept 2015 - by Arturo Guadalupi - Based on ChatServer example by David A. Mellis - - */ - -#include -#include -#include - -// The IP address will be dependent on your local network. -// gateway and subnet are optional: -IPAddress ip(192, 168, 1, 177); -IPAddress myDns(192, 168, 1, 1); -IPAddress gateway(192, 168, 1, 1); -IPAddress subnet(255, 255, 0, 0); - -// telnet defaults to port 23 -EthernetServer server(23); -boolean gotAMessage = false; // whether or not you got a message from the client yet - -void setup() { - - // Open serial communications and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for native USB port only - } - - // start the Ethernet connection: - Serial.println("Trying to get an IP address using DHCP"); - if (Ethernet.begin() == 0) { - Serial.println("Failed to configure Ethernet using DHCP"); - // Check for Ethernet hardware present - if (Ethernet.hardwareStatus() == EthernetNoHardware) { - Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); - while (true) { - delay(1); // do nothing, no point running without Ethernet hardware - } - } - if (Ethernet.linkStatus() == LinkOFF) { - Serial.println("Ethernet cable is not connected."); - } - // initialize the Ethernet device not using DHCP: - Ethernet.begin(ip, myDns, gateway, subnet); - } - // print your local IP address: - Serial.print("My IP address: "); - Serial.println(Ethernet.localIP()); - - // start listening for clients - server.begin(); -} - -void loop() { - // wait for a new client: - EthernetClient client = server.available(); - - // when the client sends the first byte, say hello: - if (client) { - if (!gotAMessage) { - Serial.println("We have a new client"); - client.println("Hello, client!"); - gotAMessage = true; - } - - // read the bytes incoming from the client: - char thisChar = client.read(); - // echo the bytes back to the client: - server.write(thisChar); - // echo the bytes to the server as well: - Serial.print(thisChar); - } -} - diff --git a/libraries/Ethernet/examples/WebServer/WebServer.ino b/libraries/Ethernet/examples/WebServer/WebServer.ino index 6201495f7..8c712fd02 100644 --- a/libraries/Ethernet/examples/WebServer/WebServer.ino +++ b/libraries/Ethernet/examples/WebServer/WebServer.ino @@ -61,7 +61,7 @@ void setup() { void loop() { // listen for incoming clients - EthernetClient client = server.available(); + EthernetClient client = server.accept(); if (client) { Serial.println("new client"); // an http request ends with a blank line diff --git a/libraries/Ethernet/src/Ethernet.cpp b/libraries/Ethernet/src/Ethernet.cpp index 26d63e5a2..ab720fcaf 100644 --- a/libraries/Ethernet/src/Ethernet.cpp +++ b/libraries/Ethernet/src/Ethernet.cpp @@ -1,12 +1,16 @@ #include "Ethernet.h" -#define SSID_MAX_LENGTH 32 - int arduino::EthernetClass::begin(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout) { if (eth_if == nullptr) { - //Q: What is the callback for? - _initializerCallback(); - if (eth_if == nullptr) return 0; + return 0; + } + eth_if->set_dhcp(true); + return _begin(mac, timeout, responseTimeout); +} + +int arduino::EthernetClass::_begin(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout) { + if (mac != nullptr) { + eth_if->get_emac().set_hwaddr(mac); } unsigned long start = millis(); @@ -43,13 +47,21 @@ int arduino::EthernetClass::begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPA } int arduino::EthernetClass::begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet, unsigned long timeout, unsigned long responseTimeout) { + if(eth_if == nullptr) { + return 0; + } + config(ip, dns, gateway, subnet); eth_if->set_dhcp(false); eth_if->set_network(_ip, _netmask, _gateway); - eth_if->add_dns_server(_dnsServer1, nullptr); - auto ret = begin(mac, timeout, responseTimeout); + auto ret = _begin(mac, timeout, responseTimeout); + + char if_name[5]; + eth_if->get_interface_name(if_name); + eth_if->add_dns_server(_dnsServer1, if_name); + return ret; } @@ -58,6 +70,9 @@ void arduino::EthernetClass::end() { } EthernetLinkStatus arduino::EthernetClass::linkStatus() { + if(eth_if == nullptr) { + return LinkOFF; + } return (eth_if->get_connection_status() == NSAPI_STATUS_GLOBAL_UP ? LinkON : LinkOFF); } @@ -67,7 +82,9 @@ EthernetHardwareStatus arduino::EthernetClass::hardwareStatus() { int arduino::EthernetClass::disconnect() { - eth_if->disconnect(); + if(eth_if != nullptr) { + eth_if->disconnect(); + } return 1; } @@ -89,4 +106,4 @@ void arduino::EthernetClass::MACAddress(uint8_t *mac_address) macAddress(mac_address); } -arduino::EthernetClass Ethernet; +arduino::EthernetClass Ethernet(static_cast(EthInterface::get_default_instance())); diff --git a/libraries/Ethernet/src/Ethernet.h b/libraries/Ethernet/src/Ethernet.h index 336621cbf..8783d651c 100644 --- a/libraries/Ethernet/src/Ethernet.h +++ b/libraries/Ethernet/src/Ethernet.h @@ -50,21 +50,15 @@ enum { // compatibility with Arduino ::maintain() DHCP_CHECK_REBIND_OK = 4 }; -typedef void *(*voidPrtFuncPtr)(void); - class EthernetClass : public MbedSocketClass { public: - // Initialise the Ethernet shield to use the provided MAC address and - // gain the rest of the configuration through DHCP. - // Returns 0 if the DHCP configuration failed, and 1 if it succeeded EthernetClass(EthernetInterface *_if) : eth_if(_if){}; - EthernetClass(){}; - - EthernetClass(voidPrtFuncPtr _cb) - : _initializerCallback(_cb){}; + // Initialise the Ethernet shield to use the provided MAC address and + // gain the rest of the configuration through DHCP. + // Returns 0 if the DHCP configuration failed, and 1 if it succeeded int begin(uint8_t *mac = nullptr, unsigned long timeout = 60000, unsigned long responseTimeout = 4000); EthernetLinkStatus linkStatus(); EthernetHardwareStatus hardwareStatus(); @@ -91,8 +85,6 @@ class EthernetClass : public MbedSocketClass { void MACAddress(uint8_t *mac_address); - void setHostname(const char *name); - int disconnect(void); void end(void); @@ -118,12 +110,11 @@ class EthernetClass : public MbedSocketClass { constexpr static int maintain () { return DHCP_CHECK_NONE; } private: + int _begin(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout); + volatile EthernetLinkStatus _currentNetworkStatus = Unknown; - EthernetInterface net; - EthernetInterface *eth_if = &net; - voidPrtFuncPtr _initializerCallback; + EthernetInterface *eth_if = nullptr; arduino::IPAddress ipAddressFromSocketAddress(SocketAddress socketAddress); - SocketAddress socketAddressFromIpAddress(arduino::IPAddress ip, uint16_t port); }; } diff --git a/libraries/Ethernet/src/EthernetClient.h b/libraries/Ethernet/src/EthernetClient.h index 9d9f9b77a..4eae838a8 100644 --- a/libraries/Ethernet/src/EthernetClient.h +++ b/libraries/Ethernet/src/EthernetClient.h @@ -21,11 +21,11 @@ #define ethernetclient_h #include "Ethernet.h" -#include "MbedClient.h" +#include "AClient.h" namespace arduino { -class EthernetClient : public MbedClient { +class EthernetClient : public AClient { NetworkInterface *getNetwork() { return Ethernet.getNetwork(); } diff --git a/libraries/Ethernet/src/EthernetSSLClient.h b/libraries/Ethernet/src/EthernetSSLClient.h index aa6fbfebc..79f26d3ed 100644 --- a/libraries/Ethernet/src/EthernetSSLClient.h +++ b/libraries/Ethernet/src/EthernetSSLClient.h @@ -21,13 +21,13 @@ #define ETHERNETSSLCLIENT_H #include "EthernetClient.h" -#include "MbedSSLClient.h" +#include "AClient.h" extern const char CA_CERTIFICATES[]; namespace arduino { -class EthernetSSLClient : public arduino::MbedSSLClient { +class EthernetSSLClient : public arduino::ASslClient { NetworkInterface *getNetwork() { return Ethernet.getNetwork(); } diff --git a/libraries/Ethernet/src/EthernetServer.cpp b/libraries/Ethernet/src/EthernetServer.cpp index 94f5854b6..7a383198a 100644 --- a/libraries/Ethernet/src/EthernetServer.cpp +++ b/libraries/Ethernet/src/EthernetServer.cpp @@ -1,6 +1,10 @@ #include "EthernetServer.h" arduino::EthernetClient arduino::EthernetServer::available(uint8_t* status) { + return accept(status); +} + +arduino::EthernetClient arduino::EthernetServer::accept(uint8_t* status) { EthernetClient client; nsapi_error_t error; diff --git a/libraries/Ethernet/src/EthernetServer.h b/libraries/Ethernet/src/EthernetServer.h index 3ddec326f..9374c3023 100644 --- a/libraries/Ethernet/src/EthernetServer.h +++ b/libraries/Ethernet/src/EthernetServer.h @@ -31,9 +31,11 @@ class EthernetServer : public MbedServer { } public: + EthernetServer() {} EthernetServer(uint16_t port) : MbedServer(port) {} - EthernetClient available(uint8_t* status = nullptr); + EthernetClient accept(uint8_t* status = nullptr); + EthernetClient available(uint8_t* status = nullptr) __attribute__((deprecated("Use accept()."))); }; } diff --git a/libraries/GPS/library.properties b/libraries/GPS/library.properties index cb0f09469..98f779b50 100644 --- a/libraries/GPS/library.properties +++ b/libraries/GPS/library.properties @@ -6,4 +6,4 @@ sentence=GPS Support Library paragraph= category=Other url=http://www.arduino.cc/en/Reference/GSM -architectures=mbed,ArduinoCore-mbed,mbed_portenta +architectures=mbed,ArduinoCore-mbed,mbed_portenta,mbed_edge diff --git a/libraries/GPS/src/GPS.h b/libraries/GPS/src/GPS.h index 998430ecc..e02d5e9db 100644 --- a/libraries/GPS/src/GPS.h +++ b/libraries/GPS/src/GPS.h @@ -25,8 +25,6 @@ namespace arduino { -typedef void* (*voidPrtFuncPtr)(void); - class GPSClass : public HardwareSerial { public: diff --git a/libraries/GSM/examples/GNSSClient/GNSSClient.ino b/libraries/GSM/examples/GNSSClient/GNSSClient.ino index e263e42ae..cb6e1df9a 100644 --- a/libraries/GSM/examples/GNSSClient/GNSSClient.ino +++ b/libraries/GSM/examples/GNSSClient/GNSSClient.ino @@ -8,9 +8,20 @@ char username[] = SECRET_USERNAME; char pass[] = SECRET_PASSWORD; void setup() { + +#if defined(ARDUINO_EDGE_CONTROL) + // Power ON MKR2 + pinMode(ON_MKR2, OUTPUT); + digitalWrite(ON_MKR2, HIGH); +#endif + Serial.begin(115200); while (!Serial) {} + // To enable AT Trace debug uncomment the following lines + //GSM.trace(Serial); + //GSM.setTraceLevel(4); + Serial.println("Starting Carrier Network registration"); if(!GSM.begin(pin, apn, username, pass, CATNB)){ Serial.println("The board was not able to register to the network..."); diff --git a/libraries/GSM/examples/GSMClient/GSMClient.ino b/libraries/GSM/examples/GSMClient/GSMClient.ino index 0a6f61c01..287cac24c 100644 --- a/libraries/GSM/examples/GSMClient/GSMClient.ino +++ b/libraries/GSM/examples/GSMClient/GSMClient.ino @@ -1,8 +1,16 @@ -#include +/* + GSMClient + + This sketch connects to a website (https://example.com) + using the Portenta CAT.M1/NB IoT GNSS Shield. -REDIRECT_STDOUT_TO(Serial); + */ + +#include +#include +#include +#include "arduino_secrets.h" -#include "arduino_secrets.h" char pin[] = SECRET_PIN; char apn[] = SECRET_APN; char username[] = SECRET_USERNAME; @@ -14,8 +22,23 @@ int port = 80; GSMClient client; void setup() { - Serial.begin(115200); + + Serial.begin(9600); while(!Serial) {} + +#if defined(ARDUINO_EDGE_CONTROL) + // Power ON MKR2 + pinMode(ON_MKR2, OUTPUT); + digitalWrite(ON_MKR2, HIGH); +#endif + + // To enable AT Trace debug uncomment the following lines + //GSM.trace(Serial); + //GSM.setTraceLevel(4); + + Debug.setDebugOutputStream(&Serial); + Debug.setDebugLevel(4); + Serial.println("Starting Carrier Network registration"); if(!GSM.begin(pin, apn, username, pass, CATNB, BAND_20 | BAND_19)){ Serial.println("The board was not able to register to the network..."); diff --git a/libraries/GSM/examples/GSMSSLClient/GSMSSLClient.ino b/libraries/GSM/examples/GSMSSLClient/GSMSSLClient.ino new file mode 100644 index 000000000..721b8ea12 --- /dev/null +++ b/libraries/GSM/examples/GSMSSLClient/GSMSSLClient.ino @@ -0,0 +1,91 @@ +/* + GSMSSLClient + + This sketch connects to a website (https://example.com) + using the Portenta CAT.M1/NB IoT GNSS Shield and TLS. + + */ + +#include +#include +#include +#include "arduino_secrets.h" + +#if defined(ARDUINO_EDGE_CONTROL) + #include "root_ca.h" +#endif + +char pin[] = SECRET_PIN; +char apn[] = SECRET_APN; +char username[] = SECRET_USERNAME; +char pass[] = SECRET_PASSWORD; + +const char server[] = "example.com"; +const char* ip_address; +int port = 443; +GSMSSLClient client; + +void setup() { + + Serial.begin(9600); + while(!Serial) {} + +#if defined(ARDUINO_EDGE_CONTROL) + // Power ON MKR2 + pinMode(ON_MKR2, OUTPUT); + digitalWrite(ON_MKR2, HIGH); + + // Configure root certificate + client.appendCustomCACert(root_ca); +#endif + + // To enable AT Trace debug uncomment the following lines + //GSM.trace(Serial); + //GSM.setTraceLevel(4); + + // Enable GSM library debug + Debug.setDebugOutputStream(&Serial); + Debug.setDebugLevel(4); + + Serial.println("Starting Carrier Network registration"); + if(!GSM.begin(pin, apn, username, pass, CATM1, BAND_3 | BAND_20 | BAND_19)){ + Serial.println("The board was not able to register to the network..."); + // do nothing forevermore: + while(1); + } + Serial.println("\nStarting connection to server..."); + // if you get a connection, report back via serial: + if (client.connect(server, port)) { + Serial.println("connected to server"); + // Make a HTTP request: + client.println("GET / HTTP/1.1"); + client.print("Host: "); + client.println(server); + client.println("Connection: close"); + client.println(); + } else { + Serial.println("unable to connect to server"); + } + +} + +void loop() { + + // if there are incoming bytes available + // from the server, read them and print them: + while (client.available()) { + char c = client.read(); + Serial.write(c); + } + + // if the server's disconnected, stop the client: + if (!client.connected()) { + Serial.println(); + Serial.println("disconnecting from server."); + client.stop(); + + // do nothing forevermore: + while (true); + } + +} diff --git a/libraries/GSM/examples/GSMSSLClient/arduino_secrets.h b/libraries/GSM/examples/GSMSSLClient/arduino_secrets.h new file mode 100644 index 000000000..8c5842fa6 --- /dev/null +++ b/libraries/GSM/examples/GSMSSLClient/arduino_secrets.h @@ -0,0 +1,4 @@ +#define SECRET_PIN "" +#define SECRET_APN "" +#define SECRET_USERNAME "" +#define SECRET_PASSWORD "" diff --git a/libraries/GSM/examples/GSMSSLClient/root_ca.h b/libraries/GSM/examples/GSMSSLClient/root_ca.h new file mode 100644 index 000000000..581338be2 --- /dev/null +++ b/libraries/GSM/examples/GSMSSLClient/root_ca.h @@ -0,0 +1,29 @@ +static const char root_ca[] = +"-----BEGIN CERTIFICATE-----\n" +"MIIEyDCCA7CgAwIBAgIQDPW9BitWAvR6uFAsI8zwZjANBgkqhkiG9w0BAQsFADBh\n" +"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" +"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n" +"MjAeFw0yMTAzMzAwMDAwMDBaFw0zMTAzMjkyMzU5NTlaMFkxCzAJBgNVBAYTAlVT\n" +"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxMzAxBgNVBAMTKkRpZ2lDZXJ0IEdsb2Jh\n" +"bCBHMiBUTFMgUlNBIFNIQTI1NiAyMDIwIENBMTCCASIwDQYJKoZIhvcNAQEBBQAD\n" +"ggEPADCCAQoCggEBAMz3EGJPprtjb+2QUlbFbSd7ehJWivH0+dbn4Y+9lavyYEEV\n" +"cNsSAPonCrVXOFt9slGTcZUOakGUWzUb+nv6u8W+JDD+Vu/E832X4xT1FE3LpxDy\n" +"FuqrIvAxIhFhaZAmunjZlx/jfWardUSVc8is/+9dCopZQ+GssjoP80j812s3wWPc\n" +"3kbW20X+fSP9kOhRBx5Ro1/tSUZUfyyIxfQTnJcVPAPooTncaQwywa8WV0yUR0J8\n" +"osicfebUTVSvQpmowQTCd5zWSOTOEeAqgJnwQ3DPP3Zr0UxJqyRewg2C/Uaoq2yT\n" +"zGJSQnWS+Jr6Xl6ysGHlHx+5fwmY6D36g39HaaECAwEAAaOCAYIwggF+MBIGA1Ud\n" +"EwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHSFgMBmx9833s+9KTeqAx2+7c0XMB8G\n" +"A1UdIwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485MA4GA1UdDwEB/wQEAwIBhjAd\n" +"BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdgYIKwYBBQUHAQEEajBoMCQG\n" +"CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQAYIKwYBBQUHMAKG\n" +"NGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RH\n" +"Mi5jcnQwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQuY29t\n" +"L0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDA9BgNVHSAENjA0MAsGCWCGSAGG/WwC\n" +"ATAHBgVngQwBATAIBgZngQwBAgEwCAYGZ4EMAQICMAgGBmeBDAECAzANBgkqhkiG\n" +"9w0BAQsFAAOCAQEAkPFwyyiXaZd8dP3A+iZ7U6utzWX9upwGnIrXWkOH7U1MVl+t\n" +"wcW1BSAuWdH/SvWgKtiwla3JLko716f2b4gp/DA/JIS7w7d7kwcsr4drdjPtAFVS\n" +"slme5LnQ89/nD/7d+MS5EHKBCQRfz5eeLjJ1js+aWNJXMX43AYGyZm0pGrFmCW3R\n" +"bpD0ufovARTFXFZkAdl9h6g4U5+LXUZtXMYnhIHUfoyMo5tS58aI7Dd8KvvwVVo4\n" +"chDYABPPTHPbqjc1qCmBaZx2vN4Ye5DUys/vZwP9BFohFrH/6j/f3IL16/RZkiMN\n" +"JCqVJUzKoZHm1Lesh3Sz8W2jmdv51b2EQJ8HmA==\n" +"-----END CERTIFICATE-----\n"; diff --git a/libraries/GSM/keywords.txt b/libraries/GSM/keywords.txt new file mode 100644 index 000000000..b61108b00 --- /dev/null +++ b/libraries/GSM/keywords.txt @@ -0,0 +1,35 @@ +####################################### +# Syntax Coloring Map For GSM +####################################### + +####################################### +# Class (KEYWORD1) +####################################### + +GSM KEYWORD1 +GSMClient KEYWORD1 +GSMSSLClient KEYWORD1 +GSMUDP KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin +disconnect +end +getTime +getLocalTime +setTime +enableCmux +isCmuxEnable +trace +setTraceLevel +ping +isConnected +getNetwork + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/libraries/GSM/library.properties b/libraries/GSM/library.properties index 1b68bbc9d..f72c84a1d 100644 --- a/libraries/GSM/library.properties +++ b/libraries/GSM/library.properties @@ -6,4 +6,4 @@ sentence=GSM wrapper paragraph= category=Other url=http://www.arduino.cc/en/Reference/GSM -architectures=mbed,ArduinoCore-mbed,mbed_portenta +architectures=mbed,ArduinoCore-mbed,mbed_portenta,mbed_edge diff --git a/libraries/GSM/src/GSM.cpp b/libraries/GSM/src/GSM.cpp index 1da0d49b3..cf5f5b975 100644 --- a/libraries/GSM/src/GSM.cpp +++ b/libraries/GSM/src/GSM.cpp @@ -1,15 +1,33 @@ +/* + GSM.cpp - Library for GSM on mbed platforms. + Copyright (c) 2011-2023 Arduino LLC. All right reserved. + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + #include "GSM.h" +#include "GSMDebug.h" #include "mbed.h" #include "CellularLog.h" +#include "CellularDevice.h" #include "CellularContext.h" #include "CellularInterface.h" #include "GEMALTO_CINTERION_CellularStack.h" -#define MAXRETRY 3 - -bool _cmuxEnable = false; -arduino::CMUXClass * arduino::CMUXClass::get_default_instance() +arduino::CMUXClass *arduino::CMUXClass::get_default_instance() { static mbed::UnbufferedSerial serial(MBED_CONF_GEMALTO_CINTERION_TX, MBED_CONF_GEMALTO_CINTERION_RX, 115200); serial.set_flow_control(mbed::SerialBase::RTSCTS_SW, MBED_CONF_GEMALTO_CINTERION_CTS, NC); @@ -19,91 +37,80 @@ arduino::CMUXClass * arduino::CMUXClass::get_default_instance() mbed::CellularDevice *mbed::CellularDevice::get_default_instance() { - static auto cmux = arduino::CMUXClass::get_default_instance(); - static mbed::GEMALTO_CINTERION device(cmux->get_serial(0)); - nextSerialPort++; - device.enableCMUXChannel = mbed::callback(cmux, &arduino::CMUXClass::enableCMUXChannel); - return &device; + static auto cmux = arduino::CMUXClass::get_default_instance(); + static mbed::GEMALTO_CINTERION device(cmux->get_serial(0)); + nextSerialPort++; + device.enableCMUXChannel = mbed::callback(cmux, &arduino::CMUXClass::enableCMUXChannel); + return &device; } int arduino::GSMClass::begin(const char* pin, const char* apn, const char* username, const char* password, RadioAccessTechnologyType rat, uint32_t band, bool restart) { - if(restart || isCmuxEnable()) { - pinMode(PJ_10, OUTPUT); - digitalWrite(PJ_10, HIGH); - delay(800); - digitalWrite(PJ_10, LOW); - pinMode(PJ_7, OUTPUT); - digitalWrite(PJ_7, LOW); - delay(1); - digitalWrite(PJ_7, HIGH); - delay(1); - // this timer is to make sure that at boottime and when the CMUX is used, - // ^SYSTART is received in time to avoid stranger behaviour - // from HW serial - delay(2000); + if (restart || isCmuxEnable()) { + reset(); } - _context = mbed::CellularContext::get_default_instance(); + if (!_context) { + _context = mbed::CellularContext::get_default_instance(); + } if (_context == nullptr) { - printf("Invalid context\n"); + DEBUG_ERROR("Invalid mbed::CellularContext"); return 0; } - pinMode(PJ_7, INPUT_PULLDOWN); + + pinMode(MBED_CONF_GEMALTO_CINTERION_ON, INPUT_PULLDOWN); static mbed::DigitalOut rts(MBED_CONF_GEMALTO_CINTERION_RTS, 0); _device = _context->get_device(); + _device->modem_debug_on(_at_debug); - _device->set_cmux_status_flag(_cmuxGSMenable); - - _context->set_sim_pin(pin); + if (!isReady()) { + DEBUG_ERROR("Cellular device not ready"); + return 0; + } + _device->set_cmux_status_flag(_cmuxGSMenable); + _device->set_retry_timeout_array(_retry_timeout, sizeof(_retry_timeout) / sizeof(_retry_timeout[0])); + _device->attach(mbed::callback(this, &GSMClass::onStatusChange)); _device->init(); - _context->set_authentication_type((mbed::CellularContext::AuthenticationType)1); - _pin = pin; _apn = apn; _username = username; _password = password; _rat = rat; _band = (FrequencyBand) band; - _context->set_credentials(apn, username, password); - _context->set_access_technology(rat); + _context->set_sim_pin(pin); + _context->set_authentication_type(mbed::CellularContext::AuthenticationType::PAP); + _context->set_credentials(_apn, _username, _password); + _context->set_access_technology(_rat); _context->set_band(_band); int connect_status = NSAPI_ERROR_AUTH_FAILURE; - uint8_t retryCount = 0; - while(connect_status != NSAPI_ERROR_OK && retryCount < MAXRETRY) { - - connect_status = _context->connect(pin, apn, username, password); - retryCount++; - - if (connect_status == NSAPI_ERROR_AUTH_FAILURE) { - tr_info("Authentication Failure. Exiting application.\n"); - } else if (connect_status == NSAPI_ERROR_OK || connect_status == NSAPI_ERROR_IS_CONNECTED) { - connect_status = NSAPI_ERROR_OK; - tr_info("Connection Established.\n"); - } else if (retryCount > 2) { - tr_info("Fatal connection failure: %d\n", connect_status); - } else { - tr_info("Couldn't connect, will retry...\n"); - continue; - } + DEBUG_INFO("Connecting..."); + connect_status = _context->connect(pin, apn, username, password); + + if (connect_status == NSAPI_ERROR_AUTH_FAILURE) { + DEBUG_ERROR("Authentication Failure. Exiting application."); + } else if (connect_status == NSAPI_ERROR_OK || connect_status == NSAPI_ERROR_IS_CONNECTED) { + connect_status = NSAPI_ERROR_OK; + DEBUG_INFO("Connection Established."); + } else { + DEBUG_ERROR("Couldn't connect."); } return connect_status == NSAPI_ERROR_OK ? 1 : 0; } -void arduino::GSMClass::enableCmux(){ +void arduino::GSMClass::enableCmux() { _cmuxGSMenable = true; } -bool arduino::GSMClass::isCmuxEnable(){ +bool arduino::GSMClass::isCmuxEnable() { return _cmuxGSMenable; } @@ -112,7 +119,10 @@ void arduino::GSMClass::end() { } int arduino::GSMClass::disconnect() { - return _context->disconnect(); + if (_context) { + return _context->disconnect(); + } + return 0; } unsigned long arduino::GSMClass::getTime() @@ -130,56 +140,52 @@ bool arduino::GSMClass::setTime(unsigned long const epoch, int const timezone) return _device->set_time(epoch, timezone); } -static PlatformMutex trace_mutex; - -static void trace_wait() +bool arduino::GSMClass::isConnected() { - trace_mutex.lock(); + if (_context) { + return _context->is_connected(); + } else { + return false; + } } -static void trace_release() -{ - trace_mutex.unlock(); +NetworkInterface* arduino::GSMClass::getNetwork() { + /* Can happen this is called before GSM.begin( .. ) when configuring GSMSSLClient + * from sketch calling client.appendCustomCACert( .. ) */ + if (!_context) { + _context = mbed::CellularContext::get_default_instance(); + } + return _context; } -static char* trace_time(size_t ss) -{ - static char time_st[50]; - auto ms = std::chrono::time_point_cast(rtos::Kernel::Clock::now()).time_since_epoch().count(); - //snprintf(time_st, 49, "[%08llums]", ms); - snprintf(time_st, 1, "\n"); - return time_st; +void arduino::GSMClass::reset() { + pinMode(MBED_CONF_GEMALTO_CINTERION_RST, OUTPUT); + digitalWrite(MBED_CONF_GEMALTO_CINTERION_RST, HIGH); + delay(800); + digitalWrite(MBED_CONF_GEMALTO_CINTERION_RST, LOW); + pinMode(MBED_CONF_GEMALTO_CINTERION_ON, OUTPUT); + digitalWrite(MBED_CONF_GEMALTO_CINTERION_ON, LOW); + delay(1); + digitalWrite(MBED_CONF_GEMALTO_CINTERION_ON, HIGH); + delay(1); } -static Stream* trace_stream = nullptr; -static void arduino_print(const char* c) { - if (trace_stream) { - trace_stream->println(c); +bool arduino::GSMClass::isReady(const int timeout) { + if (!_device) { + DEBUG_ERROR("No device found"); + return false; } -} - -void arduino::GSMClass::debug(Stream& stream) { - -#if MBED_CONF_MBED_TRACE_ENABLE - - mbed_trace_init(); - trace_stream = &stream; - mbed_trace_print_function_set(arduino_print); - mbed_trace_prefix_function_set( &trace_time ); + const unsigned int start = millis(); + while (_device->is_ready() != NSAPI_ERROR_OK) { - mbed_trace_mutex_wait_function_set(trace_wait); - mbed_trace_mutex_release_function_set(trace_release); - - mbed_cellular_trace::mutex_wait_function_set(trace_wait); - mbed_cellular_trace::mutex_release_function_set(trace_release); - -#endif - -} - -NetworkInterface* arduino::GSMClass::getNetwork() { - return _context; + if (millis() - start > timeout) { + DEBUG_WARNING("Timeout waiting device ready"); + return false; + } + delay(100); + } + return true; } arduino::GSMClass GSM; diff --git a/libraries/GSM/src/GSM.h b/libraries/GSM/src/GSM.h index 8b48d3e84..0b724f284 100644 --- a/libraries/GSM/src/GSM.h +++ b/libraries/GSM/src/GSM.h @@ -1,14 +1,17 @@ /* GSM.h - Library for GSM on mbed platforms. - Copyright (c) 2011-2021 Arduino LLC. All right reserved. + Copyright (c) 2011-2023 Arduino LLC. All right reserved. + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -30,11 +33,27 @@ #include "CMUXClass.h" #include "PTYSerial.h" -#define MBED_CONF_GEMALTO_CINTERION_TX PA_0 -#define MBED_CONF_GEMALTO_CINTERION_RX PI_9 -#define MBED_CONF_GEMALTO_CINTERION_RTS PI_10 -#define MBED_CONF_GEMALTO_CINTERION_CTS PI_13 -#define MBED_CONF_APP_SOCK_TYPE 1 +#if defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4) + #define MBED_CONF_GEMALTO_CINTERION_TX PA_0 + #define MBED_CONF_GEMALTO_CINTERION_RX PI_9 + #define MBED_CONF_GEMALTO_CINTERION_RTS PI_10 + #define MBED_CONF_GEMALTO_CINTERION_CTS PI_13 + #define MBED_CONF_GEMALTO_CINTERION_RST PJ_10 + #define MBED_CONF_GEMALTO_CINTERION_ON PJ_7 +#elif defined (ARDUINO_EDGE_CONTROL) + /* IMPORTANT: turn on the module's 5V on demand by calling + pinMode(ON_MKR2, OUTPUT); + digitalWrite(ON_MKR2, HIGH); + */ + #define MBED_CONF_GEMALTO_CINTERION_TX p24 + #define MBED_CONF_GEMALTO_CINTERION_RX p25 + #define MBED_CONF_GEMALTO_CINTERION_RTS NC + #define MBED_CONF_GEMALTO_CINTERION_CTS NC + #define MBED_CONF_GEMALTO_CINTERION_RST p31 + #define MBED_CONF_GEMALTO_CINTERION_ON p2 +#else + #error Gemalto Cinterion cellular connectivity not supported +#endif #if defined __has_include #if __has_include ("GPS.h") @@ -46,8 +65,6 @@ namespace arduino { -typedef void* (*voidPrtFuncPtr)(void); - class GSMClass : public MbedSocketClass { public: @@ -87,10 +104,11 @@ class GSMClass : public MbedSocketClass { bool setTime(unsigned long const epoch, int const timezone = 0); void enableCmux(); bool isCmuxEnable(); - void debug(Stream& stream); - int ping(const char* hostname, uint8_t ttl = 128); - int ping(const String& hostname, uint8_t ttl = 128); - int ping(IPAddress host, uint8_t ttl = 128); +#if MBED_CONF_MBED_TRACE_ENABLE + void trace(Stream& stream); + void setTraceLevel(int trace_level, bool timestamp = false, bool at_trace = false); +#endif + bool isConnected(); friend class GSMClient; friend class GSMUDP; @@ -108,6 +126,28 @@ class GSMClass : public MbedSocketClass { NetworkInterface* gsm_if = nullptr; mbed::CellularContext* _context = nullptr; mbed::CellularDevice* _device = nullptr; + bool _at_debug = false; + + /* Internal cellular state machine retries. Values are in seconds. + * This array also defines the maximum number of retries to 6 + */ + const uint16_t _retry_timeout[6] = {1, 2, 4, 8, 16, 32}; + + static constexpr int RSSI_UNKNOWN = 99; + static const char * const sim_state_str[]; + static const char * const reg_type_str[]; + static const char * const rat_str[]; + static const char * const state_str[]; + static const char * const event_str[]; + static const char * getRATString(const mbed::CellularNetwork::RadioAccessTechnology rat); + static const char * getStateString(const mbed::CellularStateMachine::CellularState state); + static const char * getEventString(const cellular_event_status event); + static const char * getSIMStateString(const mbed::CellularDevice::SimState state); + static const char * getRegistrationStateString(const mbed::CellularNetwork::RegistrationStatus state); + void onStatusChange(nsapi_event_t ev, intptr_t in); + + void reset(); + bool isReady(const int timeout = 5000); }; } @@ -115,6 +155,7 @@ class GSMClass : public MbedSocketClass { extern GSMClass GSM; #include "GSMClient.h" +#include "GSMSSLClient.h" #include "GSMUdp.h" #endif diff --git a/libraries/GSM/src/GSMClient.h b/libraries/GSM/src/GSMClient.h index b2f4a9036..f29292fb9 100644 --- a/libraries/GSM/src/GSMClient.h +++ b/libraries/GSM/src/GSMClient.h @@ -21,11 +21,11 @@ #define gsmclient_h #include "GSM.h" -#include "MbedClient.h" +#include "AClient.h" namespace arduino { -class GSMClient : public MbedClient { +class GSMClient : public AClient { NetworkInterface *getNetwork() { return GSM.getNetwork(); } diff --git a/libraries/GSM/src/GSMDebug.cpp b/libraries/GSM/src/GSMDebug.cpp new file mode 100644 index 000000000..0d96c180c --- /dev/null +++ b/libraries/GSM/src/GSMDebug.cpp @@ -0,0 +1,283 @@ +/* + GSMDebug.cpp - Library for GSM on mbed platforms. + Copyright (c) 2011-2023 Arduino LLC. All right reserved. + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#if GSM_DEBUG_ENABLE + +constexpr const char * const arduino::GSMClass::sim_state_str[] = { + "Ready", + "PIN Needed", + "PUK Needed", + "Unknown" +}; + +constexpr const char * const arduino::GSMClass::reg_type_str[] = { + "Not Registered", + "Registered (Home Network)", + "Searching Network", + "Registration Denied", + "Registration Unknown", + "Registered (Roaming)", + "Registered (SMS Only Home)", + "Registered (SMS Only Roaming)", + "Attached (Emergency Only)", + "Registered (CSFB Not Preferred Home)", + "Registered (CSFB Not Preferred Roaming)", + "Already Registered" +}; + +constexpr const char * const arduino::GSMClass::rat_str[] = { + "GSM", + "GSM_COMPACT", + "UTRAN", + "EGPRS", + "HSDPA", + "HSUPA", + "HSDPA_HSUPA", + "E_UTRAN", + "CATM1", + "NB1", + "RAT unknown", +}; + +constexpr const char * const arduino::GSMClass::state_str[] = { + "Init", + "Power On", + "Device ready", + "SIM PIN", + "Signal quality", + "Registering network", + "Attaching network", + "Unknown" +}; + +constexpr const char * const arduino::GSMClass::event_str[] = { + "Device ready", + "SIM status", + "Registration status", + "Registration type", + "Cell ID", + "RAT", + "Attach network", + "Activate PDP context", + "Signal quality", + "Retry", + "Timeout", +}; + +const char * arduino::GSMClass::getRATString(const mbed::CellularNetwork::RadioAccessTechnology rat) { + switch (rat) { + case mbed::CellularNetwork::RadioAccessTechnology::RAT_GSM: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_GSM_COMPACT: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_UTRAN: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_EGPRS: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_HSDPA: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_HSUPA: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_HSDPA_HSUPA: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_E_UTRAN: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_CATM1: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_NB1: + return rat_str[rat]; + break; + + case mbed::CellularNetwork::RadioAccessTechnology::RAT_UNKNOWN: + case mbed::CellularNetwork::RadioAccessTechnology::RAT_MAX: + default: + return rat_str[mbed::CellularNetwork::RadioAccessTechnology::RAT_UNKNOWN]; + break; + } +} + +const char * arduino::GSMClass::getStateString(const mbed::CellularStateMachine::CellularState state) { + switch (state) { + case mbed::CellularStateMachine::CellularState::STATE_INIT: + case mbed::CellularStateMachine::CellularState::STATE_POWER_ON: + case mbed::CellularStateMachine::CellularState::STATE_DEVICE_READY: + case mbed::CellularStateMachine::CellularState::STATE_SIM_PIN: + case mbed::CellularStateMachine::CellularState::STATE_SIGNAL_QUALITY: + case mbed::CellularStateMachine::CellularState::STATE_REGISTERING_NETWORK: + case mbed::CellularStateMachine::CellularState::STATE_ATTACHING_NETWORK: + return state_str[state]; + break; + + case mbed::CellularStateMachine::CellularState::STATE_MAX_FSM_STATE: + default: + return state_str[mbed::CellularStateMachine::CellularState::STATE_MAX_FSM_STATE]; + break; + } +} + +const char * arduino::GSMClass::getEventString(const cellular_event_status event) { + switch (event) { + case cellular_event_status::CellularDeviceReady: + case cellular_event_status::CellularSIMStatusChanged: + case cellular_event_status::CellularRegistrationStatusChanged: + case cellular_event_status::CellularRegistrationTypeChanged: + case cellular_event_status::CellularCellIDChanged: + case cellular_event_status::CellularRadioAccessTechnologyChanged: + case cellular_event_status::CellularAttachNetwork: + case cellular_event_status::CellularActivatePDPContext: + case cellular_event_status::CellularSignalQuality: + case cellular_event_status::CellularStateRetryEvent: + case cellular_event_status::CellularDeviceTimeout: + return event_str[event - NSAPI_EVENT_CELLULAR_STATUS_BASE]; + break; + + default: + return "Unknown"; + break; + } +} + +const char * arduino::GSMClass::getSIMStateString(const mbed::CellularDevice::SimState state) { + switch (state) { + case mbed::CellularDevice::SimStateReady: + case mbed::CellularDevice::SimStatePinNeeded: + case mbed::CellularDevice::SimStatePukNeeded: + case mbed::CellularDevice::SimStateUnknown: + return sim_state_str[state]; + break; + + default: + return sim_state_str[mbed::CellularDevice::SimStateUnknown]; + } +} + +const char * arduino::GSMClass::getRegistrationStateString(const mbed::CellularNetwork::RegistrationStatus state) { + switch (state) { + case mbed::CellularNetwork::StatusNotAvailable: + case mbed::CellularNetwork::NotRegistered: + case mbed::CellularNetwork::RegisteredHomeNetwork: + case mbed::CellularNetwork::SearchingNetwork: + case mbed::CellularNetwork::RegistrationDenied: + case mbed::CellularNetwork::Unknown: + case mbed::CellularNetwork::RegisteredRoaming: + case mbed::CellularNetwork::RegisteredSMSOnlyHome: + case mbed::CellularNetwork::RegisteredSMSOnlyRoaming: + case mbed::CellularNetwork::AttachedEmergencyOnly: + case mbed::CellularNetwork::RegisteredCSFBNotPreferredHome: + case mbed::CellularNetwork::RegisteredCSFBNotPreferredRoaming: + case mbed::CellularNetwork::AlreadyRegistered: + return reg_type_str[state]; + break; + + default: + return reg_type_str[mbed::CellularNetwork::Unknown]; + } +} + +#endif + +void arduino::GSMClass::onStatusChange(nsapi_event_t ev, intptr_t in) { + + cellular_event_status event = (cellular_event_status)ev; + + if(event == CellularStateRetryEvent) { + feedWatchdog(); + } + +#if GSM_DEBUG_ENABLE + const cell_callback_data_t *data = (const cell_callback_data_t *)in; + + switch(event) + { + case CellularDeviceReady: + { + DEBUG_INFO("Modem is powered and ready to receive commands"); + } + break; + + case CellularSIMStatusChanged: + { + const mbed::CellularDevice::SimState state = static_cast(data->status_data); + DEBUG_INFO("SIM status: %s", getSIMStateString(state)); + } + break; + + case CellularRegistrationStatusChanged: + { + const mbed::CellularNetwork::RegistrationStatus state = static_cast(data->status_data); + DEBUG_INFO("Registration status: %s", getRegistrationStateString(state)); + } + break; + + case CellularRegistrationTypeChanged: + { + /* Never called from mbed driver */ + } + break; + + case CellularCellIDChanged: + { + DEBUG_INFO("Cellular ID changed: %d", data->status_data); + } + break; + + case CellularRadioAccessTechnologyChanged: + { + const mbed::CellularNetwork::RadioAccessTechnology rat = static_cast (data->status_data); + DEBUG_INFO("RAT changed: %s", getRATString(rat)); + } + break; + + case CellularAttachNetwork: + { + DEBUG_INFO("Network status: %s", data->status_data ? "Attached" : "Detached"); + } + break; + + case CellularActivatePDPContext: + { + DEBUG_INFO("Activate PDP context %s", (data->error != NSAPI_ERROR_OK) ? "Failure" : "Success"); + } + break; + + case CellularSignalQuality: + { + const cell_signal_quality_t * sig = (const cell_signal_quality_t *)data->data; + if((data->error != NSAPI_ERROR_OK) || (sig->rssi == RSSI_UNKNOWN)) { + DEBUG_INFO("RSSI: Unknown"); + } else { + DEBUG_INFO("RSSI: %d", sig->rssi); + } + } + break; + + case CellularStateRetryEvent: + { + const cell_retry_cb_t * retry_cb_data = (const cell_retry_cb_t *)data->data; + const cellular_event_status event = static_cast(data->status_data); + const mbed::CellularStateMachine::CellularState state = static_cast(retry_cb_data->state); + DEBUG_WARNING("Cellular event %s timed out. Cellular state %s, retry count %d", getEventString(event), getStateString(state), retry_cb_data->retry_count); + } + break; + + case CellularDeviceTimeout: + { + const cell_timeout_cb_t * timeout_cb_data = (const cell_timeout_cb_t *)data->data; + const cellular_event_status event = static_cast(data->status_data); + const mbed::CellularStateMachine::CellularState state = static_cast(timeout_cb_data->state); + DEBUG_DEBUG("Cellular state: %s, waiting for event %s. Timeout %d", getStateString(state), getEventString(event), timeout_cb_data->timeout); + } + break; + } +#endif +} diff --git a/libraries/GSM/src/GSMDebug.h b/libraries/GSM/src/GSMDebug.h new file mode 100644 index 000000000..c3ab7e6b1 --- /dev/null +++ b/libraries/GSM/src/GSMDebug.h @@ -0,0 +1,44 @@ +/* + GSMDebug.h + Copyright (c) 2021 Arduino SA. All right reserved. + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef GSMDEBUG_H +#define GSMDEBUG_H + +#if defined __has_include + #if __has_include ("Arduino_DebugUtils.h") + #include "Arduino_DebugUtils.h" + #define GSM_DEBUG_ENABLE 1 + #else + #define DEBUG_ERROR(fmt, ...) + #define DEBUG_WARNING(fmt, ...) + #define DEBUG_INFO(fmt, ...) + #define DEBUG_DEBUG(fmt, ...) + #define DEBUG_VERBOSE(fmt, ...) + #define GSM_DEBUG_ENABLE 0 + #endif +#else + #define DEBUG_ERROR(fmt, ...) + #define DEBUG_WARNING(fmt, ...) + #define DEBUG_INFO(fmt, ...) + #define DEBUG_DEBUG(fmt, ...) + #define DEBUG_VERBOSE(fmt, ...) + #define GSM_DEBUG_ENABLE 0 +#endif + +#endif /* GSMDEBUG_H*/ diff --git a/libraries/GSM/src/GSMSSLClient.h b/libraries/GSM/src/GSMSSLClient.h new file mode 100644 index 000000000..cc7d3c194 --- /dev/null +++ b/libraries/GSM/src/GSMSSLClient.h @@ -0,0 +1,39 @@ +/* + GSMSSLClient.h + Copyright (c) 2023 Arduino SA. All right reserved. + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef GSMSSLCLIENT_H +#define GSMSSLCLIENT_H + +#include "GSM.h" +#include "AClient.h" + +extern const char CA_CERTIFICATES[]; + +namespace arduino { + +class GSMSSLClient : public arduino::ASslClient { +private: + NetworkInterface *getNetwork() { + return GSM.getNetwork(); + } +}; + +} + +#endif /* GSMSSLCLIENT_H */ \ No newline at end of file diff --git a/libraries/GSM/src/GSMTrace.cpp b/libraries/GSM/src/GSMTrace.cpp new file mode 100644 index 000000000..6c87c54c4 --- /dev/null +++ b/libraries/GSM/src/GSMTrace.cpp @@ -0,0 +1,81 @@ +/* + GSM.h - Library for GSM on mbed platforms. + Copyright (c) 2011-2023 Arduino LLC. All right reserved. + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#if MBED_CONF_MBED_TRACE_ENABLE + +static Stream* trace_stream = nullptr; +static PlatformMutex trace_mutex; +static char trace_timestamp[8]; + +static void trace_wait() { + trace_mutex.lock(); +} + +static void trace_release() { + trace_mutex.unlock(); +} + +static char* trace_time(size_t ss) { + auto ms = std::chrono::time_point_cast(rtos::Kernel::Clock::now()).time_since_epoch().count(); + snprintf(trace_timestamp, 8, "[%08llu]", ms); + return trace_timestamp; +} + +static void trace_println(const char* c) { + if (trace_stream) { + trace_stream->println(c); + } +} +#endif + +void arduino::GSMClass::setTraceLevel(int trace_level, bool timestamp, bool at_trace) { +#if MBED_CONF_MBED_TRACE_ENABLE + switch(trace_level) { + case 0: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_NONE); break; + case 1: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_CMD); break; + case 2: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ERROR); break; + case 3: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_WARN); break; + case 4: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_INFO); break; + case 5: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_DEBUG); break; + case 6: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); break; + default: mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); break; + } + + _at_debug = at_trace; + + if (timestamp) { + mbed_trace_prefix_function_set( &trace_time ); + } +#endif +} + +void arduino::GSMClass::trace(Stream& stream) { +#if MBED_CONF_MBED_TRACE_ENABLE + trace_stream = &stream; + + mbed_trace_init(); + mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); + mbed_trace_print_function_set(trace_println); + mbed_trace_mutex_wait_function_set(trace_wait); + mbed_trace_mutex_release_function_set(trace_release); +#endif +} diff --git a/libraries/GSM/src/GSMUdp.h b/libraries/GSM/src/GSMUdp.h index 6b93bd966..519adff50 100644 --- a/libraries/GSM/src/GSMUdp.h +++ b/libraries/GSM/src/GSMUdp.h @@ -1,5 +1,5 @@ /* - WiFiUdp.h + GSMUdp.h Copyright (c) 2021 Arduino SA. All right reserved. This library is free software; you can redistribute it and/or diff --git a/libraries/GSM/src/PTYSerial.cpp b/libraries/GSM/src/PTYSerial.cpp index 3a457fcd4..ef1be67fa 100644 --- a/libraries/GSM/src/PTYSerial.cpp +++ b/libraries/GSM/src/PTYSerial.cpp @@ -127,20 +127,17 @@ int PTYSerial::get_port() { } int PTYSerial::write(const void *buffer) { const char *buf_ptr = static_cast(buffer); - tr_info("%s", buffer); return write(buf_ptr, sizeof(buffer)); } int PTYSerial::write(const void *buffer, size_t length) { const char *buf_ptr = static_cast(buffer); - tr_info("%s", buffer); int ret = _parent->populate_tx_buffer(buf_ptr, length, this->get_port()); return ret; } int PTYSerial::write(const void *buffer, size_t length, int id) { const char *buf_ptr = static_cast(buffer); - tr_info("%s", buffer); int ret = _parent->populate_tx_buffer(buf_ptr, length, id); return ret; } diff --git a/libraries/OV7670/ov7670.cpp b/libraries/OV7670/ov7670.cpp index f6fd3255b..15c1caa9d 100644 --- a/libraries/OV7670/ov7670.cpp +++ b/libraries/OV7670/ov7670.cpp @@ -699,12 +699,16 @@ int OV7670::setFrameRate(int32_t framerate) int OV7670::setVerticalFlip(bool flip_enable) { - return -1; + uint8_t currentRegisterValue = regRead(getID(), MVFP); + uint8_t newRegisterValue = flip_enable ? currentRegisterValue | MVFP_VFLIP : currentRegisterValue & ~MVFP_VFLIP; + return regWrite(getID(), MVFP, newRegisterValue); } int OV7670::setHorizontalMirror(bool mirror_enable) { - return -1; + uint8_t currentRegisterValue = regRead(getID(), MVFP); + uint8_t newRegisterValue = mirror_enable ? currentRegisterValue | MVFP_MIRROR : currentRegisterValue & ~MVFP_MIRROR; + return regWrite(getID(), MVFP, newRegisterValue); } int OV7670::setResolution(int32_t resolution) diff --git a/libraries/PDM/src/STM32H747_dfsdm/audio.c b/libraries/PDM/src/STM32H747_dfsdm/audio.c index 4ce082c71..23c4cacb1 100644 --- a/libraries/PDM/src/STM32H747_dfsdm/audio.c +++ b/libraries/PDM/src/STM32H747_dfsdm/audio.c @@ -68,7 +68,9 @@ void HAL_DFSDM_FilterRegConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_ { xfer_status |= DMA_XFER_HALF; // Invalidate Data Cache to get the updated content of the SRAM + #ifdef CORE_CM7 SCB_InvalidateDCache_by_Addr((uint32_t*)&RecBuff[0],sizeof(RecBuff)/2); + #endif } PDMIrqHandler(true); } @@ -86,7 +88,9 @@ void HAL_DFSDM_FilterRegConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filt { xfer_status |= DMA_XFER_FULL; // Invalidate Data Cache to get the updated content of the SRAM + #ifdef CORE_CM7 SCB_InvalidateDCache_by_Addr((uint32_t*)&RecBuff[PDM_BUFFER_SIZE/2],sizeof(RecBuff)/2); + #endif } PDMIrqHandler(false); } @@ -387,7 +391,10 @@ int py_audio_init(size_t channels, uint32_t frequency) void py_audio_gain_set(int gain_db) { - attenuation = 8 - gain_db; + attenuation = 8 - (gain_db / 3); + if (attenuation < 0) { + attenuation = 0; + } } void py_audio_deinit() diff --git a/libraries/Portenta_SDRAM/src/SDRAM.cpp b/libraries/Portenta_SDRAM/src/SDRAM.cpp index 4090a0b3f..aff4dad88 100644 --- a/libraries/Portenta_SDRAM/src/SDRAM.cpp +++ b/libraries/Portenta_SDRAM/src/SDRAM.cpp @@ -3,11 +3,34 @@ extern "C" { #include "ram_internal.h" } +static void MPU_Config() { + MPU_Region_InitTypeDef MPU_InitStruct; + + /* Disable the MPU */ + HAL_MPU_Disable(); + + // Initialize SDRAM Start as shareable + MPU_InitStruct.Enable = MPU_REGION_ENABLE; + MPU_InitStruct.BaseAddress = SDRAM_START_ADDRESS; + MPU_InitStruct.Size = ARM_MPU_REGION_SIZE_8MB; + //MPU_InitStruct.SubRegionDisable = 0x00; + MPU_InitStruct.Number = MPU_REGION_NUMBER5; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; + MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + + HAL_MPU_ConfigRegion(&MPU_InitStruct); + + /* Enable the MPU */ + HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); +} + int SDRAMClass::begin(uint32_t start_address) { - printf("FMC_SDRAM_DEVICE->SDCMR: %x\n", FMC_SDRAM_DEVICE->SDCMR); if (FMC_SDRAM_DEVICE->SDCMR == 0x00000000U) { - printf("initializing external ram\n"); bool ret = sdram_init(); if (ret == false) { return 0; @@ -18,51 +41,16 @@ int SDRAMClass::begin(uint32_t start_address) { then enable access/caching for the size used */ - if (SDRAM_START_ADDRESS != 0xC0000000) { - printf("remap ram to 0x60000000\n"); + if (SDRAM_START_ADDRESS == 0x60000000) { HAL_SetFMCMemorySwappingConfig(FMC_SWAPBMAP_SDRAM_SRAM); } -#if 0 - - printf("setup mpu\n"); - #define MPU_SDRAM_EXEC_REGION_NUMBER MPU_REGION_SDRAM1 - #define MPU_SDRAM_REGION_TEX (0x4 << MPU_RASR_TEX_Pos) /* Cached memory */ - #define MPU_SDRAM_EXEC_REGION_SIZE (22 << MPU_RASR_SIZE_Pos) /* 2^(22+1) = 8Mo */ - #define MPU_SDRAM_ACCESS_PERMSSION (0x03UL << MPU_RASR_AP_Pos) - #define MPU_SDRAM_REGION_CACHABLE (0x01UL << MPU_RASR_C_Pos) - #define MPU_SDRAM_REGION_BUFFERABLE (0x01UL << MPU_RASR_B_Pos) - - MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; - /* Configure SDARM region as first region */ - MPU->RNR = MPU_SDRAM_EXEC_REGION_NUMBER; - /* Set MPU SDARM base address (0xD0000000) */ - MPU->RBAR = SDRAM_START_ADDRESS; - /* - - Execute region: RASR[size] = 22 -> 2^(22+1) -> size 8MB - - Access permission: Full access: RASR[AP] = 0b011 - - Cached memory: RASR[TEX] = 0b0100 - - Disable the Execute Never option: to allow the code execution on SDRAM: RASR[XN] = 0 - - Enable the region MPU: RASR[EN] = 1 - */ - MPU->RASR = (MPU_SDRAM_EXEC_REGION_SIZE | MPU_SDRAM_ACCESS_PERMSSION | MPU_SDRAM_REGION_TEX | \ - MPU_RASR_ENABLE_Msk | MPU_SDRAM_REGION_BUFFERABLE) & ~MPU_RASR_XN_Msk ; - - /* Enable MPU and leave the predefined regions to default configuration */ - MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk; -#endif - -#if 0 - mpu_config_start(); - mpu_config_region(MPU_REGION_SDRAM1, SDRAM_START_ADDRESS, MPU_CONFIG_DISABLE(0x00, MPU_REGION_SIZE_512MB)); - mpu_config_region(MPU_REGION_SDRAM2, SDRAM_START_ADDRESS, MPU_CONFIG_SDRAM(SDRAM_MPU_REGION_SIZE)); - mpu_config_end(); -#endif - + #ifdef CORE_CM4 + MPU_Config(); + #endif } if (start_address) { - printf("malloc_addblock: allocate %d bytes\n", SDRAM_END_ADDRESS - start_address); malloc_addblock((void*)start_address, SDRAM_END_ADDRESS - start_address); } @@ -77,7 +65,7 @@ void SDRAMClass::free(void* ptr) { ea_free(ptr); } -bool __attribute__((optimize("O0"))) SDRAMClass::test(bool fast) { +bool __attribute__((optimize("O0"))) SDRAMClass::test(bool fast, Stream& _serial) { uint8_t const pattern = 0xaa; uint8_t const antipattern = 0x55; uint8_t *const mem_base = (uint8_t*)SDRAM_START_ADDRESS; @@ -86,7 +74,7 @@ bool __attribute__((optimize("O0"))) SDRAMClass::test(bool fast) { for (uint8_t i = 1; i; i <<= 1) { *mem_base = i; if (*mem_base != i) { - printf("data bus lines test failed! data (%d)\n", i); + _serial.println("data bus lines test failed! data (" + String(i) + ")"); __asm__ volatile ("BKPT"); } } @@ -96,7 +84,7 @@ bool __attribute__((optimize("O0"))) SDRAMClass::test(bool fast) { for (uint32_t i = 1; i < HW_SDRAM_SIZE; i <<= 1) { mem_base[i] = pattern; if (mem_base[i] != pattern) { - printf("address bus lines test failed! address (%p)\n", &mem_base[i]); + _serial.println("address bus lines test failed! address ("+ String((uint32_t)&mem_base[i], HEX) + ")"); __asm__ volatile ("BKPT"); } } @@ -105,7 +93,7 @@ bool __attribute__((optimize("O0"))) SDRAMClass::test(bool fast) { mem_base[0] = antipattern; for (uint32_t i = 1; i < HW_SDRAM_SIZE; i <<= 1) { if (mem_base[i] != pattern) { - printf("address bus overlap %p\n", &mem_base[i]); + _serial.println("address bus overlap! address ("+ String((uint32_t)&mem_base[i], HEX) + ")"); __asm__ volatile ("BKPT"); } } @@ -115,7 +103,7 @@ bool __attribute__((optimize("O0"))) SDRAMClass::test(bool fast) { for (uint32_t i = 0; i < HW_SDRAM_SIZE; ++i) { mem_base[i] = pattern; if (mem_base[i] != pattern) { - printf("address bus test failed! address (%p)\n", &mem_base[i]); + _serial.println("address bus test failed! address ("+ String((uint32_t)&mem_base[i], HEX) + ")"); __asm__ volatile ("BKPT"); } } diff --git a/libraries/Portenta_SDRAM/src/SDRAM.h b/libraries/Portenta_SDRAM/src/SDRAM.h index 687925b47..0d8808f2d 100644 --- a/libraries/Portenta_SDRAM/src/SDRAM.h +++ b/libraries/Portenta_SDRAM/src/SDRAM.h @@ -1,3 +1,6 @@ +#ifndef __SDRAM_H +#define __SDRAM_H + #include "ea_malloc.h" #ifdef __cplusplus @@ -13,7 +16,7 @@ class SDRAMClass { int begin(uint32_t start_address = SDRAM_START_ADDRESS); void* malloc(size_t size); void free(void* ptr); - bool test(bool fast = false); + bool test(bool fast = false, Stream& _serial = Serial); private: void mpu_config_start(void) { __disable_irq(); @@ -35,4 +38,5 @@ class SDRAMClass { extern SDRAMClass SDRAM; -#endif \ No newline at end of file +#endif +#endif // __SDRAM_H diff --git a/libraries/Portenta_SDRAM/src/ram_internal.h b/libraries/Portenta_SDRAM/src/ram_internal.h index 497ffb020..1d6ff0721 100644 --- a/libraries/Portenta_SDRAM/src/ram_internal.h +++ b/libraries/Portenta_SDRAM/src/ram_internal.h @@ -1,3 +1,6 @@ +#ifndef __RAM_INTERNAL_H +#define __RAM_INTERNAL_H + bool sdram_init(void); #define MPU_REGION_SDRAM1 (MPU_REGION_NUMBER4) @@ -56,3 +59,5 @@ bool sdram_init(void); | (size) << MPU_RASR_SIZE_Pos \ | MPU_REGION_ENABLE << MPU_RASR_ENABLE_Pos \ ) + +#endif // __RAM_INTERNAL_H diff --git a/libraries/RPC/LICENSE b/libraries/RPC/LICENSE new file mode 100644 index 000000000..a612ad981 --- /dev/null +++ b/libraries/RPC/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/libraries/RPC/examples/Basic_AddSub/Basic_AddSub.ino b/libraries/RPC/examples/Basic_AddSub/Basic_AddSub.ino new file mode 100644 index 000000000..61f96d53f --- /dev/null +++ b/libraries/RPC/examples/Basic_AddSub/Basic_AddSub.ino @@ -0,0 +1,49 @@ +#include "RPC.h" + +int add(int a, int b) { + return a + b; +} + +int sub(int a, int b) { + return a - b; +} + +void setup() { + Serial.begin(115200); + while (!Serial) { + + } + + RPC.begin(); + RPC.bind("add", add); + RPC.bind("sub", sub); + if (RPC.cpu_id() == CM7_CPUID) { + // Introduce a brief delay to allow the M4 sufficient time + // to bind remote functions before invoking them. + delay(100); + } + pinMode(LEDG, OUTPUT); +} + +void loop() { + static size_t loop_count = 0; + + // Blink every 512 iterations + if (RPC.cpu_id() == CM4_CPUID && (loop_count++ % 512) == 0) { + digitalWrite(LEDG, LOW); + delay(10); + digitalWrite(LEDG, HIGH); + delay(10); + } + + int res = RPC.call("add", 1, 2).as(); + if (RPC.cpu_id() == CM7_CPUID) { + Serial.println("add(1, 2) = " + String(res)); + } + + res = RPC.call("sub", res, 1).as(); + if (RPC.cpu_id() == CM7_CPUID) { + Serial.println("sub(3, 1) = " + String(res)); + } + delay(250); +} diff --git a/libraries/RPC/examples/MD5_Checksum/MD5.cpp b/libraries/RPC/examples/MD5_Checksum/MD5.cpp new file mode 100644 index 000000000..d8d31fbf1 --- /dev/null +++ b/libraries/RPC/examples/MD5_Checksum/MD5.cpp @@ -0,0 +1,302 @@ +#include "MD5.h" + +MD5::MD5() +{ + //nothing + return; +} + +char* MD5::make_digest(const unsigned char *digest, int len) /* {{{ */ +{ + char * md5str = (char*) malloc(sizeof(char)*(len*2+1)); + static const char hexits[17] = "0123456789abcdef"; + int i; + + for (i = 0; i < len; i++) { + md5str[i * 2] = hexits[digest[i] >> 4]; + md5str[(i * 2) + 1] = hexits[digest[i] & 0x0F]; + } + md5str[len * 2] = '\0'; + return md5str; +} + +/* + * The basic MD5 functions. + * + * E and G are optimized compared to their RFC 1321 definitions for + * architectures that lack an AND-NOT instruction, just like in Colin Plumb's + * implementation. + * E() has been used instead of F() because F() is already defined in the Arduino core + */ +#define E(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | ~(z))) + +/* + * The MD5 transformation for all four rounds. + */ +#define STEP(f, a, b, c, d, x, t, s) \ + (a) += f((b), (c), (d)) + (x) + (t); \ + (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \ + (a) += (b); + +/* + * SET reads 4 input bytes in little-endian byte order and stores them + * in a properly aligned word in host byte order. + * + * The check for little-endian architectures that tolerate unaligned + * memory accesses is just an optimization. Nothing will break if it + * doesn't work. + */ +#if defined(__i386__) || defined(__x86_64__) || defined(__vax__) +# define SET(n) \ + (*(MD5_u32plus *)&ptr[(n) * 4]) +# define GET(n) \ + SET(n) +#else +# define SET(n) \ + (ctx->block[(n)] = \ + (MD5_u32plus)ptr[(n) * 4] | \ + ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \ + ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \ + ((MD5_u32plus)ptr[(n) * 4 + 3] << 24)) +# define GET(n) \ + (ctx->block[(n)]) +#endif + +/* + * This processes one or more 64-byte data blocks, but does NOT update + * the bit counters. There are no alignment requirements. + */ +const void *MD5::body(void *ctxBuf, const void *data, size_t size) +{ + MD5_CTX *ctx = (MD5_CTX*)ctxBuf; + const unsigned char *ptr; + MD5_u32plus a, b, c, d; + MD5_u32plus saved_a, saved_b, saved_c, saved_d; + + ptr = (unsigned char*)data; + + a = ctx->a; + b = ctx->b; + c = ctx->c; + d = ctx->d; + + do { + saved_a = a; + saved_b = b; + saved_c = c; + saved_d = d; + +/* Round 1 + * E() has been used instead of F() because F() is already defined in the Arduino core + */ + STEP(E, a, b, c, d, SET(0), 0xd76aa478, 7) + STEP(E, d, a, b, c, SET(1), 0xe8c7b756, 12) + STEP(E, c, d, a, b, SET(2), 0x242070db, 17) + STEP(E, b, c, d, a, SET(3), 0xc1bdceee, 22) + STEP(E, a, b, c, d, SET(4), 0xf57c0faf, 7) + STEP(E, d, a, b, c, SET(5), 0x4787c62a, 12) + STEP(E, c, d, a, b, SET(6), 0xa8304613, 17) + STEP(E, b, c, d, a, SET(7), 0xfd469501, 22) + STEP(E, a, b, c, d, SET(8), 0x698098d8, 7) + STEP(E, d, a, b, c, SET(9), 0x8b44f7af, 12) + STEP(E, c, d, a, b, SET(10), 0xffff5bb1, 17) + STEP(E, b, c, d, a, SET(11), 0x895cd7be, 22) + STEP(E, a, b, c, d, SET(12), 0x6b901122, 7) + STEP(E, d, a, b, c, SET(13), 0xfd987193, 12) + STEP(E, c, d, a, b, SET(14), 0xa679438e, 17) + STEP(E, b, c, d, a, SET(15), 0x49b40821, 22) + +/* Round 2 */ + STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5) + STEP(G, d, a, b, c, GET(6), 0xc040b340, 9) + STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14) + STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20) + STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5) + STEP(G, d, a, b, c, GET(10), 0x02441453, 9) + STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14) + STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20) + STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5) + STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9) + STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14) + STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20) + STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5) + STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9) + STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14) + STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20) + +/* Round 3 */ + STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4) + STEP(H, d, a, b, c, GET(8), 0x8771f681, 11) + STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16) + STEP(H, b, c, d, a, GET(14), 0xfde5380c, 23) + STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4) + STEP(H, d, a, b, c, GET(4), 0x4bdecfa9, 11) + STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16) + STEP(H, b, c, d, a, GET(10), 0xbebfbc70, 23) + STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4) + STEP(H, d, a, b, c, GET(0), 0xeaa127fa, 11) + STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16) + STEP(H, b, c, d, a, GET(6), 0x04881d05, 23) + STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4) + STEP(H, d, a, b, c, GET(12), 0xe6db99e5, 11) + STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16) + STEP(H, b, c, d, a, GET(2), 0xc4ac5665, 23) + +/* Round 4 */ + STEP(I, a, b, c, d, GET(0), 0xf4292244, 6) + STEP(I, d, a, b, c, GET(7), 0x432aff97, 10) + STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15) + STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21) + STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6) + STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10) + STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15) + STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21) + STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6) + STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10) + STEP(I, c, d, a, b, GET(6), 0xa3014314, 15) + STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21) + STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6) + STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10) + STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15) + STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21) + + a += saved_a; + b += saved_b; + c += saved_c; + d += saved_d; + + ptr += 64; + } while (size -= 64); + + ctx->a = a; + ctx->b = b; + ctx->c = c; + ctx->d = d; + + return ptr; +} + +void MD5::MD5Init(void *ctxBuf) +{ + MD5_CTX *ctx = (MD5_CTX*)ctxBuf; + ctx->a = 0x67452301; + ctx->b = 0xefcdab89; + ctx->c = 0x98badcfe; + ctx->d = 0x10325476; + + ctx->lo = 0; + ctx->hi = 0; + + memset(ctx->block, 0, sizeof(ctx->block)); + memset(ctx->buffer, 0, sizeof(ctx->buffer)); +} + +void MD5::MD5Update(void *ctxBuf, const void *data, size_t size) +{ + MD5_CTX *ctx = (MD5_CTX*)ctxBuf; + MD5_u32plus saved_lo; + MD5_u32plus used, free; + + saved_lo = ctx->lo; + if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) { + ctx->hi++; + } + ctx->hi += size >> 29; + + used = saved_lo & 0x3f; + + if (used) { + free = 64 - used; + + if (size < free) { + memcpy(&ctx->buffer[used], data, size); + return; + } + + memcpy(&ctx->buffer[used], data, free); + data = (unsigned char *)data + free; + size -= free; + body(ctx, ctx->buffer, 64); + } + + if (size >= 64) { + data = body(ctx, data, size & ~(size_t)0x3f); + size &= 0x3f; + } + + memcpy(ctx->buffer, data, size); +} + +void MD5::MD5Final(unsigned char *result, void *ctxBuf) +{ + MD5_CTX *ctx = (MD5_CTX*)ctxBuf; + MD5_u32plus used, free; + + used = ctx->lo & 0x3f; + + ctx->buffer[used++] = 0x80; + + free = 64 - used; + + if (free < 8) { + memset(&ctx->buffer[used], 0, free); + body(ctx, ctx->buffer, 64); + used = 0; + free = 64; + } + + memset(&ctx->buffer[used], 0, free - 8); + + ctx->lo <<= 3; + ctx->buffer[56] = ctx->lo; + ctx->buffer[57] = ctx->lo >> 8; + ctx->buffer[58] = ctx->lo >> 16; + ctx->buffer[59] = ctx->lo >> 24; + ctx->buffer[60] = ctx->hi; + ctx->buffer[61] = ctx->hi >> 8; + ctx->buffer[62] = ctx->hi >> 16; + ctx->buffer[63] = ctx->hi >> 24; + + body(ctx, ctx->buffer, 64); + + result[0] = ctx->a; + result[1] = ctx->a >> 8; + result[2] = ctx->a >> 16; + result[3] = ctx->a >> 24; + result[4] = ctx->b; + result[5] = ctx->b >> 8; + result[6] = ctx->b >> 16; + result[7] = ctx->b >> 24; + result[8] = ctx->c; + result[9] = ctx->c >> 8; + result[10] = ctx->c >> 16; + result[11] = ctx->c >> 24; + result[12] = ctx->d; + result[13] = ctx->d >> 8; + result[14] = ctx->d >> 16; + result[15] = ctx->d >> 24; + + memset(ctx, 0, sizeof(*ctx)); +} +unsigned char* MD5::make_hash(char *arg) +{ + MD5_CTX context; + unsigned char * hash = (unsigned char *) malloc(16); + MD5Init(&context); + MD5Update(&context, arg, strlen(arg)); + MD5Final(hash, &context); + return hash; +} +unsigned char* MD5::make_hash(char *arg,size_t size) +{ + MD5_CTX context; + unsigned char * hash = (unsigned char *) malloc(16); + MD5Init(&context); + MD5Update(&context, arg, size); + MD5Final(hash, &context); + return hash; +} + diff --git a/libraries/RPC/examples/MD5_Checksum/MD5.h b/libraries/RPC/examples/MD5_Checksum/MD5.h new file mode 100644 index 000000000..3ec8d8122 --- /dev/null +++ b/libraries/RPC/examples/MD5_Checksum/MD5.h @@ -0,0 +1,52 @@ +#ifndef MD5_h +#define MD5_h + +#include "Arduino.h" + +/* + * This is an OpenSSL-compatible implementation of the RSA Data Security, + * Inc. MD5 Message-Digest Algorithm (RFC 1321). + * + * Written by Solar Designer in 2001, and placed + * in the public domain. There's absolutely no warranty. + * + * This differs from Colin Plumb's older public domain implementation in + * that no 32-bit integer data type is required, there's no compile-time + * endianness configuration, and the function prototypes match OpenSSL's. + * The primary goals are portability and ease of use. + * + * This implementation is meant to be fast, but not as fast as possible. + * Some known optimizations are not included to reduce source code size + * and avoid compile-time configuration. + */ + +/* + * Updated by Scott MacVicar for arduino + * + */ + +#include + +typedef unsigned long MD5_u32plus; + +typedef struct { + MD5_u32plus lo, hi; + MD5_u32plus a, b, c, d; + unsigned char buffer[64]; + MD5_u32plus block[16]; +} MD5_CTX; + +class MD5 +{ +public: + MD5(); + static unsigned char* make_hash(char *arg); + static unsigned char* make_hash(char *arg,size_t size); + static char* make_digest(const unsigned char *digest, int len); + static const void *body(void *ctxBuf, const void *data, size_t size); + static void MD5Init(void *ctxBuf); + static void MD5Final(unsigned char *result, void *ctxBuf); + static void MD5Update(void *ctxBuf, const void *data, size_t size); +}; + +#endif \ No newline at end of file diff --git a/libraries/RPC/examples/MD5_Checksum/MD5_Checksum.ino b/libraries/RPC/examples/MD5_Checksum/MD5_Checksum.ino new file mode 100644 index 000000000..ea6ffc502 --- /dev/null +++ b/libraries/RPC/examples/MD5_Checksum/MD5_Checksum.ino @@ -0,0 +1,115 @@ +#include "RPC.h" +#include "MD5.h" + +size_t hash_in_count = 0; +size_t hash_out_count = 0; + +#ifdef CORE_CM4 +size_t data_buf_size = 0; +#else +size_t data_buf_size = 256; +#endif + +typedef std::vector vec_t; + +void fatal_error() { + while (true) { + digitalWrite(LEDR, LOW); + delay(500); + digitalWrite(LEDR, HIGH); + delay(500); + } +} + +vec_t hash_block(vec_t &buf) { + MD5_CTX context; + MD5::MD5Init(&context); + MD5::MD5Update(&context, buf.data(), buf.size()); + + vec_t hash(16); + MD5::MD5Final(&hash[0], &context); + return hash; +} + +vec_t md5hash(vec_t &buf) { + hash_out_count++; + return hash_block(buf); +} + +#ifdef CORE_CM4 +// Called by the host to set the data buffer size. +size_t set_buffer_size(size_t size) { + data_buf_size = size; + return 0; +} +#endif + +void setup() { + #ifdef CORE_CM7 + Serial.begin(115200); + while (!Serial) { + + } + #endif + + if (!RPC.begin()) { + fatal_error(); + } + RPC.bind("md5hash", md5hash); + #ifdef CORE_CM4 + RPC.bind("set_buffer_size", set_buffer_size); + #else + // Introduce a brief delay to allow the M4 sufficient time + // to bind remote functions before invoking them. + delay(100); + auto ret = RPC.call("set_buffer_size", data_buf_size).as(); + #endif + + pinMode(LEDR, OUTPUT); + pinMode(LEDG, OUTPUT); +} + +void loop() { + static vec_t data; + static uint32_t ticks_start = millis(); + + // Wait for the host processor to set the data buffer size. + if (data_buf_size == 0) { + return; + } else if (data.size() == 0) { + data.resize(data_buf_size, 0); + } + + // Fill the buffer with random data. + for (int i=0; i(); + + // Calculate checksum and compare with the received checksum. + vec_t hash = hash_block(data); + if (memcmp(&hash[0], &ret[0], 16) != 0) { + fatal_error(); + } + + #ifdef CORE_CM4 + if ((hash_in_count % 512) == 0) { + digitalWrite(LEDG, LOW); + delay(10); + digitalWrite(LEDG, HIGH); + delay(10); + } + #endif + + #ifdef CORE_CM7 + if ((hash_in_count % 16) == 0) { + float khs = (hash_in_count + hash_out_count) / (float) (millis() - ticks_start); + Serial.println("Generated: " + String(hash_out_count) + " Received: " + String(hash_in_count) + " " + String(khs) +" KH/S"); + } + //delay(1); + #endif + + hash_in_count++; +} diff --git a/libraries/RPC/examples/PingPong_RAW/PingPong_RAW.ino b/libraries/RPC/examples/PingPong_RAW/PingPong_RAW.ino new file mode 100644 index 000000000..af2b1b111 --- /dev/null +++ b/libraries/RPC/examples/PingPong_RAW/PingPong_RAW.ino @@ -0,0 +1,49 @@ +#include "RPC.h" + +void fatal_error() { + while (true) { + digitalWrite(LEDR, LOW); + delay(500); + digitalWrite(LEDR, HIGH); + delay(500); + } +} + +void recv_callback(const uint8_t *buf, size_t len) { + #ifdef CORE_CM7 + Serial.print("<= "); + Serial.write(buf, len); + Serial.println(); + #else + const uint8_t msg[] = "Pong!"; + RPC.write(&msg[0], sizeof(msg), true); + #endif +} + +void setup() { + #ifdef CORE_CM7 + Serial.begin(115200); + while (!Serial) { + + } + #endif + + if (!RPC.begin()) { + fatal_error(); + } + RPC.attach(recv_callback); + + pinMode(LEDR, OUTPUT); + pinMode(LEDG, OUTPUT); +} + +void loop() { + #ifdef CORE_CM7 + const uint8_t buf[] = "Ping!"; + Serial.print("=> "); + Serial.write(buf, sizeof(buf)); + Serial.println(); + RPC.write(&buf[0], sizeof(buf)); + delay(100); + #endif +} diff --git a/libraries/RPC/examples/PortentaX8_EchoServer/PortentaX8_EchoServer.ino b/libraries/RPC/examples/PortentaX8_EchoServer/PortentaX8_EchoServer.ino index 6ea35282a..9915925a3 100644 --- a/libraries/RPC/examples/PortentaX8_EchoServer/PortentaX8_EchoServer.ino +++ b/libraries/RPC/examples/PortentaX8_EchoServer/PortentaX8_EchoServer.ino @@ -1,21 +1,24 @@ -#include "RPC.h" #include "SerialRPC.h" +#include "RPC.h" /* - * This sketch demonstrates how to interact with the Portenta X8 Serial port (over USB) - * On the board, launch both 'proxy' and 'example' binaries (from https://github.com/arduino/portentax8-m4-proxy) - * The M4 provides the 'subtract' API (which will be invoked by 'example' - * It also provides a full duplex Serial-like interface that is proxies through the serial monitor - * Last but not leas, when you write 'echo' the corresponding function in 'example' will be triggered - */ + This sketch demonstrates how to interact with the Portenta X8 Serial port (over USB) + On the board, launch both 'proxy' and 'example' binaries (from https://github.com/arduino/portentax8-m4-proxy) + The M4 provides the 'subtract' API (which will be invoked by 'example' + It also provides a full duplex Serial-like interface that is proxies through the serial monitor + Last but not leas, when you write 'echo' the corresponding function in 'example' will be triggered +*/ int subtract(int a, int b) { - return a-b; + return a - b; } +int led_status = 0; + void setup() { // put your setup code here, to run once: Serial.begin(115200); + pinMode(LED_BUILTIN, OUTPUT); RPC.bind("subtract", subtract); delay(1000); } @@ -23,20 +26,44 @@ void setup() { int i = 0; void loop() { - //RPC.print("hello"); - //RPC.send("echo", "test"); - //auto res = RPC.call("add", 5, 8).as(); - //RPC.send("echo", String(res).c_str()); + if (millis() % 1000 == 0) { + Serial.println("loop"); + delay(2); + } String str = ""; while (Serial.available()) { str += (char)Serial.read(); } if (str != "") { - Serial.print(str); + //Serial.print(str); + } + + if (str.startsWith("whoami")) { + digitalWrite(LED_BUILTIN, HIGH); + auto res = RPC.call("whoami").as(); + Serial.println(res.c_str()); + digitalWrite(LED_BUILTIN, LOW); } + + if (str.startsWith("divide")) { + float a = random() % 15000; + float b = random() % 15000; + Serial.println(String(a) + " / " + String(b)); + auto res = RPC.call("divide", a, b).as(); + Serial.println(String(a) + " / " + String(b) + " = " + String(res)); + } + + if (str.startsWith("add")) { + int a = random() % 15000; + int b = random() % 15000; + Serial.println(String(a) + " + " + String(b)); + auto res = RPC.call("add", a, b).as(); + Serial.println(String(a) + " + " + String(b) + " = " + String(res)); + } + if (str.startsWith("echo")) { - delay(100); - RPC.send("echo", "test"); + auto res = RPC.call("echo", "X8").as(); + Serial.println(res.c_str()); } -} +} \ No newline at end of file diff --git a/libraries/RPC/examples/RPC_m4/RPC_m4.ino b/libraries/RPC/examples/RPC_m4/RPC_m4.ino index 5d40f382d..439a85caf 100644 --- a/libraries/RPC/examples/RPC_m4/RPC_m4.ino +++ b/libraries/RPC/examples/RPC_m4/RPC_m4.ino @@ -1,16 +1,17 @@ #include "Arduino.h" #include "RPC.h" +#include "SerialRPC.h" using namespace rtos; Thread subtractThread; /** - * Returns the CPU that's currently running the sketch (M7 or M4) - * Note that the sketch has to be uploaded to both cores. + Returns the CPU that's currently running the sketch (M7 or M4) + Note that the sketch has to be uploaded to both cores. **/ String currentCPU() { - if (HAL_GetCurrentCPUID() == CM7_CPUID) { + if (RPC.cpu_id() == CM7_CPUID) { return "M7"; } else { return "M4"; @@ -18,7 +19,7 @@ String currentCPU() { } /** - * Adds two numbers and returns the sum + Adds two numbers and returns the sum **/ int addOnM7(int a, int b) { Serial.println(currentCPU() + ": executing add with " + String(a) + " and " + String(b)); @@ -27,7 +28,7 @@ int addOnM7(int a, int b) { } /** - * Subtracts two numbers and returns the difference + Subtracts two numbers and returns the difference **/ int subtractOnM7(int a, int b) { Serial.println(currentCPU() + ": executing subtract with " + String(a) + " and " + String(b)); @@ -40,11 +41,11 @@ void callSubstractFromM4() { delay(700); // Wait 700ms with the next calculation int a = random(100); // Generate a random number int b = random(100); // Generate a random number - RPC.println(currentCPU() + ": calling subtract with " + String(a) + " and " + String(b)); - + SerialRPC.println(currentCPU() + ": calling subtract with " + String(a) + " and " + String(b)); + auto result = RPC.call("remoteSubtract", a, b).as(); // Prints the result of the calculation - RPC.println(currentCPU() + ": Result is " + String(a) + " - " + String(b) + " = " + String(result)); + SerialRPC.println(currentCPU() + ": Result is " + String(a) + " - " + String(b) + " = " + String(result)); } } @@ -53,18 +54,17 @@ void setup() { pinMode(LED_BUILTIN, OUTPUT); // Initialize RPC library; this also boots the M4 core - RPC.begin(); Serial.begin(115200); - //while (!Serial) {} // Uncomment this to wait until the Serial connection is ready - - // Both CPUs will execute this instruction, just at different times - randomSeed(analogRead(A0)); // Initializes the pseudo-random number generator + while (!Serial) {} // Uncomment this to wait until the Serial connection is ready + if (!SerialRPC.begin()) { + Serial.println("RPC initialization fail"); + } if (currentCPU() == "M7") { // M7 CPU becomes the server, so it makes two functions available under the defined names RPC.bind("remoteAdd", addOnM7); RPC.bind("remoteSubtract", subtractOnM7); - } + } if (currentCPU() == "M4") { // M4 CPU becomes the client, so spawns a thread that will call subtractOnM7() every 700ms @@ -75,7 +75,7 @@ void setup() { void loop() { if (currentCPU() == "M4") { - // On M4 let's blink an LED. While it's blinking, the callSubstractFromM4() thread is running, + // On M4 let's blink an LED. While it's blinking, the callSubstractFromM4() thread is running, // so it will execute roughly 3 times (2000 / 700 ms) digitalWrite(LED_BUILTIN, LOW); delay(1000); @@ -84,27 +84,26 @@ void loop() { int a = random(100); int b = random(100); - // PRC.print works like a Serial port, but it needs a receiver (in this case the M7) + // SerialRPC.print works like a Serial port, but it needs a receiver (in this case the M7) // to actually print the strings to the Serial port - RPC.println(currentCPU() + ": calling add with " + String(a) + " and " + String(b)); + SerialRPC.println(currentCPU() + ": calling add with " + String(a) + " and " + String(b)); // Let's invoke addOnM7() and wait for a result. // This will be delayed by the forced delay() in addOnM7() function // Exercise: if you are not interested in the result of the operation, what operation would you invoke? - auto result = RPC.call("remoteAdd", a, b).as(); - RPC.println(currentCPU() + ": Result is " + String(a) + " + " + String(b) + " = " + String(result)); + auto result = RPC.call("remoteAdd", a, b).as(); + SerialRPC.println(currentCPU() + ": Result is " + String(a) + " + " + String(b) + " = " + String(result)); } - + if (currentCPU() == "M7") { - // On M7, let's print everything that is received over the RPC1 stream interface + // On M7, let's print everything that is received over the SerialRPC stream interface // Buffer it, otherwise all characters will be interleaved by other prints String buffer = ""; - while (RPC.available()) { - buffer += (char)RPC.read(); // Fill the buffer with characters + while (SerialRPC.available()) { + buffer += (char)SerialRPC.read(); // Fill the buffer with characters } if (buffer.length() > 0) { Serial.print(buffer); } } - } diff --git a/libraries/RPC/examples/SerialPassthrough_RPC/SerialPassthrough_RPC.ino b/libraries/RPC/examples/SerialPassthrough_RPC/SerialPassthrough_RPC.ino index 38cf7d331..eb8917bb7 100644 --- a/libraries/RPC/examples/SerialPassthrough_RPC/SerialPassthrough_RPC.ino +++ b/libraries/RPC/examples/SerialPassthrough_RPC/SerialPassthrough_RPC.ino @@ -3,22 +3,18 @@ void setup() { Serial.begin(115200); + while (!Serial) { + } RPC.begin(); } void loop() { - String data = ""; - while (RPC.available()) { - data += (char)RPC.read(); - } - if (data != "") { - Serial.write(data.c_str(), data.length()); - } - data = ""; - while (Serial.available()) { - data += (char)Serial.read(); - } - if (data != "") { - RPC.write(data.c_str(), data.length()); + if (RPC.cpu_id() == CM4_CPUID) { + RPC.println("Printed from M4 core"); + delay(1000); + } else { + while (RPC.available()) { + Serial.print((char) RPC.read()); + } } } diff --git a/libraries/RPC/src/RPC.cpp b/libraries/RPC/src/RPC.cpp index b7911c123..65d0c2b5a 100644 --- a/libraries/RPC/src/RPC.cpp +++ b/libraries/RPC/src/RPC.cpp @@ -1,365 +1,288 @@ +// Copyright (c) 2024 Arduino SA +// SPDX-License-Identifier: MPL-2.0 #include "RPC.h" -static struct rpmsg_endpoint rp_endpoints[4]; +#define ENDPOINT_ID_RAW 0 +#define ENDPOINT_ID_RPC 1 -enum endpoints_t { - ENDPOINT_RAW = 0, - ENDPOINT_RESPONSE = 1 -}; - -void rpc::client::send_msgpack(RPCLIB_MSGPACK::sbuffer *buffer) { - OPENAMP_send(&rp_endpoints[ENDPOINT_RAW], (const uint8_t*)buffer->data(), buffer->size()); -} +#define MSGPACK_TYPE_REQUEST 0 +#define MSGPACK_TYPE_RESPONSE 1 +#define MSGPACK_TYPE_NOTIFY 2 -static RingBufferN intermediate_buffer; -static RingBufferN intermediate_buffer_resp; -//static uint8_t intermediate_buffer_resp[256]; -static rtos::Mutex rx_mtx; - -static bool _init_recv_message = true; - -int RPCClass::rpmsg_recv_callback(struct rpmsg_endpoint *ept, void *data, - size_t len, uint32_t src, void *priv) -{ - RPCClass* rpc = (RPCClass*)priv; +arduino::RPCClass RPC; +osThreadId eventHandlerThreadId; +static rtos::Mutex mutex; +static struct rpmsg_endpoint endpoints[2]; #ifdef CORE_CM4 - if (_init_recv_message) { - _init_recv_message = false; - return 0; - } +static bool endpoints_init[2] = { 0 }; #endif - rx_mtx.lock(); - for (size_t i = 0; i < len; i++) { - intermediate_buffer.store_char(((uint8_t*)data)[i]); - } - rx_mtx.unlock(); - - //memcpy(intermediate_buffer, data, len); +void RPCClass::new_service_cb(struct rpmsg_device *rdev, const char *name, uint32_t dest) { + uint8_t buffer[1] = {0}; + struct rpmsg_endpoint *ept = NULL; - osSignalSet(rpc->dispatcherThreadId, len); + if (strcmp(name, "rpc") == 0) { + ept = &endpoints[ENDPOINT_ID_RPC]; + } else if (strcmp(name, "raw") == 0) { + ept = &endpoints[ENDPOINT_ID_RAW]; + } - return 0; + if (ept) { + OPENAMP_create_endpoint(ept, name, dest, rpmsg_recv_callback, NULL); + OPENAMP_send(ept, buffer, sizeof(buffer)); + } } -static bool _init_resp_message = true; - -int RPCClass::rpmsg_recv_response_callback(struct rpmsg_endpoint *ept, void *data, - size_t len, uint32_t src, void *priv) -{ - RPCClass* rpc = (RPCClass*)priv; - -#ifdef CORE_CM4 - if (_init_resp_message) { - _init_resp_message = false; +int RPCClass::rpmsg_recv_callback(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv) { + #ifdef CORE_CM4 + if (!endpoints_init[ENDPOINT_ID_RPC] && ept == &endpoints[ENDPOINT_ID_RPC]) { + endpoints_init[ENDPOINT_ID_RPC] = true; return 0; - } -#endif - - rx_mtx.lock(); - for (size_t i = 0; i < len; i++) { - intermediate_buffer_resp.store_char(((uint8_t*)data)[i]); - } - //memcpy(intermediate_buffer_resp, data, len); - rx_mtx.unlock(); + } else if (!endpoints_init[ENDPOINT_ID_RAW] && ept == &endpoints[ENDPOINT_ID_RAW]) { + endpoints_init[ENDPOINT_ID_RAW] = true; + return 0; + } + #endif - osSignalSet(rpc->responseThreadId, len); + if (ept == &endpoints[ENDPOINT_ID_RAW]) { + // data on raw endpoint + if (RPC.raw_callback) { + RPC.raw_callback.call((uint8_t *) data, len); + } else { + for (size_t i=0; istart(&eventHandler); + // Allow the event thread to run once to set the thread ID, and get into a known state. + osDelay(1); - //resource_table_load_from_flash(); - //HAL_SYSCFG_EnableCM4BOOT(); - - // Ideally this should execute only once - disableCM4Autoboot(); - - eventThread = new rtos::Thread(osPriorityHigh, 4096, nullptr, "rpc_evt"); - eventThread->start(&eventHandler); - - dispatcherThread = new rtos::Thread(osPriorityNormal, 4096, nullptr, "rpc_dispatch"); - dispatcherThread->start(mbed::callback(this, &RPCClass::dispatch)); - - responseThread = new rtos::Thread(osPriorityNormal, 4096, nullptr, "rpc_response"); - responseThread->start(mbed::callback(this, &RPCClass::response)); - - /* Initialize OpenAmp and libmetal libraries */ - if (MX_OPENAMP_Init(RPMSG_MASTER, new_service_cb) != HAL_OK) { - return 0; - } - - //metal_set_log_handler(metal_default_log_handler); - - /* Initialize the rpmsg endpoint to set default addresses to RPMSG_ADDR_ANY */ - rpmsg_init_ept(&rp_endpoints[ENDPOINT_RAW], "raw", RPMSG_ADDR_ANY, RPMSG_ADDR_ANY, NULL, NULL); - rpmsg_init_ept(&rp_endpoints[ENDPOINT_RESPONSE], "response", RPMSG_ADDR_ANY, RPMSG_ADDR_ANY, NULL, NULL); - - rp_endpoints[ENDPOINT_RAW].priv = this; - rp_endpoints[ENDPOINT_RESPONSE].priv = this; - - bootM4(); + // Initialize OpenAmp and libmetal libraries + if (MX_OPENAMP_Init(RPMSG_HOST, new_service_cb) != HAL_OK) { + return 0; + } - /* - * The rpmsg service is initiate by the remote processor, on H7 new_service_cb - * callback is received on service creation. Wait for the callback - */ - OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RAW], millis() + 500); - OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RESPONSE], millis() + 500); + // Initialize rpmsg endpoints. + memset(endpoints, 0, sizeof(endpoints)); - // Send first dummy message to enable the channel - uint8_t message = 0x00; - write(ENDPOINT_RAW, &message, sizeof(message)); - write(ENDPOINT_RESPONSE, &message, sizeof(message)); + // Boot the CM4. + cm4_kick(); - return 1; + // Wait for the remote to announce the services with a timeout. + uint32_t millis_start = millis(); + while (endpoints[ENDPOINT_ID_RPC].rdev == NULL || endpoints[ENDPOINT_ID_RAW].rdev == NULL) { + if ((millis() - millis_start) >= 5000) { + return 0; + } + osDelay(10); + } + return 1; } - #endif - #ifdef CORE_CM4 +#if (CM4_BINARY_START >= 0x60000000) && (CM4_BINARY_START < 0xe0000000) +class M4Init { +public: + M4Init() { + // If the Cortex-M4 core is booting from SDRAM, the memory region must be + // configured as Strongly Ordered. Note that the Cortex-M4 core does not + // seem to implement speculative prefetching, so there is no need to protect + // the whole region from speculative prefetching with a second MPU region. + HAL_MPU_Disable(); + MPU_Region_InitTypeDef MPU_InitStruct; + MPU_InitStruct.Number = MPU_REGION_NUMBER1; + MPU_InitStruct.Enable = MPU_REGION_ENABLE; + MPU_InitStruct.BaseAddress = CM4_BINARY_START; + MPU_InitStruct.Size = MPU_REGION_SIZE_1MB; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; + MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + MPU_InitStruct.SubRegionDisable = 0x00; + HAL_MPU_ConfigRegion(&MPU_InitStruct); + HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); + } +}; -int RPCClass::begin(long unsigned int np, uint16_t nd) { - - eventThread = new rtos::Thread(osPriorityHigh, 4096, nullptr, "rpc_evt"); - eventThread->start(&eventHandler); - - dispatcherThread = new rtos::Thread(osPriorityNormal, 4096, nullptr, "rpc_dispatch"); - dispatcherThread->start(mbed::callback(this, &RPCClass::dispatch)); - - responseThread = new rtos::Thread(osPriorityNormal, 4096, nullptr, "rpc_response"); - responseThread->start(mbed::callback(this, &RPCClass::response)); +M4Init __m4init __attribute__ ((init_priority (101))); +#endif - /* Initialize OpenAmp and libmetal libraries */ - if (MX_OPENAMP_Init(RPMSG_REMOTE, NULL) != 0) { - return 0; - } +int RPCClass::begin() { + eventThread = new rtos::Thread(osPriorityHigh, 16*1024, nullptr, "rpc_evt"); + eventThread->start(&eventHandler); + // Allow the event thread to run once to set the thread ID, and get into a known state. + osDelay(1); - rp_endpoints[ENDPOINT_RAW].priv = this; - rp_endpoints[ENDPOINT_RESPONSE].priv = this; + // Initialize OpenAmp and libmetal libraries + if (MX_OPENAMP_Init(RPMSG_REMOTE, NULL) != 0) { + return 0; + } - /* create a endpoint for raw rmpsg communication */ - int status = OPENAMP_create_endpoint(&rp_endpoints[ENDPOINT_RAW], "raw", RPMSG_ADDR_ANY, - rpmsg_recv_callback, NULL); - if (status < 0) { - return 0; - } + // Create RAW endpoint. + if (OPENAMP_create_endpoint(&endpoints[ENDPOINT_ID_RAW], "raw", RPMSG_ADDR_ANY, rpmsg_recv_callback, NULL) < 0) { + return 0; + } + + // Create RPC endpoint. + if (OPENAMP_create_endpoint(&endpoints[ENDPOINT_ID_RPC], "rpc", RPMSG_ADDR_ANY, rpmsg_recv_callback, NULL) < 0) { + return 0; + } - status = OPENAMP_create_endpoint(&rp_endpoints[ENDPOINT_RESPONSE], "response", RPMSG_ADDR_ANY, - rpmsg_recv_response_callback, NULL); - if (status < 0) { - return 0; - } + // Wait for endpoints to be initialized first by the host before allowing + // the remote to use the endpoints. + uint32_t millis_start = millis(); + while (!endpoints_init[ENDPOINT_ID_RPC] || !endpoints_init[ENDPOINT_ID_RAW]) { + if ((millis() - millis_start) >= 5000) { + return 0; + } + osDelay(10); + } - return 1; + return 1; } - #endif -using raw_call_t = std::tuple; - -void RPCClass::response() { - responseThreadId = osThreadGetId(); +void RPCClass::response(uint8_t *buf, size_t len) { + unpacker.reset(); + unpacker.reserve_buffer(len); + memcpy(unpacker.buffer(), buf, len); + unpacker.buffer_consumed(len); - for (int i = 0; i< 10; i++) { - clients[i] = NULL; - } - - while (true) { - osSignalWait(0, osWaitForever); - -{ - - RPCLIB_MSGPACK::unpacker pac; - - rx_mtx.lock(); - int len = intermediate_buffer_resp.available(); - for (int i = 0; i < len; i++) { - pac.buffer()[i] = intermediate_buffer_resp.read_char(); - } - pac.buffer_consumed(len); - rx_mtx.unlock(); - - //memcpy(pac.buffer(), intermediate_buffer_resp, v.value.signals); - //pac.buffer_consumed(v.value.signals); - - RPCLIB_MSGPACK::unpacked result; - while (pac.next(result)) { + RPCLIB_MSGPACK::unpacked result; + while (unpacker.next(result)) { auto r = rpc::detail::response(std::move(result)); auto id = r.get_id(); // fill the correct client stuff rpc::client* client = NULL; for (int i = 0; i < 10; i++) { - if (clients[i] != NULL) { - if ((uint)clients[i]->callThreadId == id) { - client = clients[i]; - break; + if (clients[i] != NULL) { + if ((uint)clients[i]->callThreadId == id) { + client = clients[i]; + break; + } } - } } if (client != NULL) { - client->result = std::move(*r.get_result()); - // Unlock callThreadId thread - osSignalSet(client->callThreadId, 0x1); + client->result = std::move(*r.get_result()); + // Unlock callThreadId thread + osSignalSet(client->callThreadId, 0x1); } - } } - } } -void RPCClass::dispatch() { - - dispatcherThreadId = osThreadGetId(); - - while (true) { - osSignalWait(0, osWaitForever); - -{ - RPCLIB_MSGPACK::unpacker pac; - rx_mtx.lock(); - int len = intermediate_buffer.available(); - for (int i = 0; i< len; i++) { - pac.buffer()[i] = intermediate_buffer.read_char(); - } - pac.buffer_consumed(len); - rx_mtx.unlock(); - - //memcpy(pac.buffer(), intermediate_buffer, v.value.signals); - //pac.buffer_consumed(v.value.signals); +void RPCClass::request(uint8_t *buf, size_t len) { + unpacker.reset(); + unpacker.reserve_buffer(len); + memcpy(unpacker.buffer(), buf, len); + unpacker.buffer_consumed(len); RPCLIB_MSGPACK::unpacked result; - while (pac.next(result)) { - auto msg = result.get(); - if (msg.via.array.size == 1) { - // raw array - raw_call_t arr; - msg.convert(arr); - - std::vector buf; - std::get<0>(arr).convert(buf); - - for (size_t i = 0; i < buf.size(); i++) { - rx_buffer.store_char(buf[i]); - } - // call attached function - if (_rx) { - _rx.call(); - } - } - - if (msg.via.array.size > 2) { - auto resp = rpc::detail::dispatcher::dispatch(msg, true); + while (unpacker.next(result)) { + auto msg = result.get(); + auto resp = rpc::detail::dispatcher::dispatch(msg, false); auto data = resp.get_data(); - if (resp.is_empty()) { - //printf("no response\n"); - } else { - OPENAMP_send(&rp_endpoints[ENDPOINT_RESPONSE], (const uint8_t*)data.data(), data.size()); + if (!resp.is_empty()) { + OPENAMP_send(&endpoints[ENDPOINT_ID_RPC], data.data(), data.size()); } - } } - } -} } - size_t RPCClass::write(uint8_t c) { - write(&c, 1); - return 1; + return write(&c, 1, true); } -size_t RPCClass::write(const uint8_t* buf, size_t len) { - return write(ENDPOINT_RAW, buf, len); +void rpc::client::write(RPCLIB_MSGPACK::sbuffer *buffer) { + RPC.write((const uint8_t *) buffer->data(), buffer->size(), false); } -size_t RPCClass::write(uint8_t ep, const uint8_t* buf, size_t len) { - - std::vector tx_buffer; - for (size_t i = 0; i < len; i++) { - tx_buffer.push_back(buf[i]); - } - auto call_obj = std::make_tuple(tx_buffer); - - auto buffer = new RPCLIB_MSGPACK::sbuffer; - RPCLIB_MSGPACK::pack(*buffer, call_obj); - - OPENAMP_send(&rp_endpoints[ep], (const uint8_t*)buffer->data(), buffer->size()); - delete buffer; - return len; +size_t RPCClass::write(const uint8_t *buf, size_t len, bool raw) { + mutex.lock(); + OPENAMP_send(&endpoints[raw ? ENDPOINT_ID_RAW : ENDPOINT_ID_RPC], buf, len); + mutex.unlock(); + return len; } - -arduino::RPCClass RPC; \ No newline at end of file diff --git a/libraries/RPC/src/RPC.h b/libraries/RPC/src/RPC.h index 8aa8fa7e7..92255f4c8 100644 --- a/libraries/RPC/src/RPC.h +++ b/libraries/RPC/src/RPC.h @@ -1,3 +1,5 @@ +// Copyright (c) 2024 Arduino SA +// SPDX-License-Identifier: MPL-2.0 #ifdef __cplusplus #ifndef __ARDUINO_RPC_IMPLEMENTATION__ @@ -35,127 +37,107 @@ extern "C" { #include "mbed.h" -typedef struct _service_request { - uint8_t* data; -} service_request; - namespace arduino { - class RPCClass : public Stream, public rpc::detail::dispatcher { - public: - RPCClass() {}; - int begin(long unsigned int = 0, uint16_t = 0); - void end() {}; - int available(void) { - return rx_buffer.available(); - }; - int peek(void) { - return rx_buffer.peek(); - } - int read(void) { - return rx_buffer.read_char(); - } - void flush(void) {}; - size_t write(uint8_t c); - size_t write(const uint8_t*, size_t); - size_t write(uint8_t ep, const uint8_t* buf, size_t len); - - using Print::write; // pull in write(str) and write(buf, size) from Print - operator bool() { - return initialized; - } - - void attach(void (*fptr)(void)) - { - if (fptr != NULL) { - _rx = mbed::Callback(fptr); - } - } - - template - void send(std::string const &func_name, - Args... args) { - - auto client = new rpc::client(); - client->send(func_name, args...); - delete client; - } - - void setTimeout(uint32_t milliseconds) { - _timeout = milliseconds; - } - - template - RPCLIB_MSGPACK::object_handle call(std::string const &func_name, - Args... args) { - // find a free spot in clients[] - // create new object - // protect this with mutex - - mtx.lock(); - int i = 0; - for (i=0; i<10; i++) { - if (clients[i] == NULL) { - clients[i] = new rpc::client(); - break; - } - } - mtx.unlock(); - - clients[i]->setTimeout(_timeout); - has_timed_out = false; - - // thread start and client .call - clients[i]->call(func_name, args...); - - if (clients[i]->timedOut()) { - has_timed_out = true; - } - RPCLIB_MSGPACK::object_handle ret = std::move(clients[i]->result); - - mtx.lock(); - delete clients[i]; - clients[i] = NULL; - mtx.unlock(); - return ret; - } - - rpc::client* clients[10]; - - bool timedOut() { - return has_timed_out; - } - - private: - RingBufferN<256> rx_buffer; - bool initialized = false; - - static int rpmsg_recv_callback(struct rpmsg_endpoint *ept, void *data, - size_t len, uint32_t src, void *priv); - static int rpmsg_recv_response_callback(struct rpmsg_endpoint *ept, void *data, - size_t len, uint32_t src, void *priv); - - static void new_service_cb(struct rpmsg_device *rdev, const char *name, uint32_t dest); - - void dispatch(); - void response(); - events::EventQueue eventQueue; - mbed::Ticker ticker; - rtos::Thread* eventThread; - rtos::Thread* dispatcherThread; - rtos::Thread* responseThread; - rtos::Mutex mtx; - - mbed::Callback _rx; - - uint32_t _timeout = osWaitForever; - bool has_timed_out = false; - - //rpc::detail::response response; - RPCLIB_MSGPACK::object_handle call_result; - - osThreadId dispatcherThreadId; - osThreadId responseThreadId; + public: + RPCClass() { + for (int i = 0; i< 10; i++) { + clients[i] = NULL; + } + } + int begin(); + void end() { + + } + int available(void) { + return rx_buffer.available(); + } + int peek(void) { + return rx_buffer.peek(); + } + int read(void) { + return rx_buffer.read_char(); + } + void flush(void) { + + } + uint32_t cpu_id() { + return HAL_GetCurrentCPUID(); + } + size_t write(uint8_t c); + size_t write(const uint8_t *buf, size_t len, bool raw = true); + + using Print::write; // pull in write(str) and write(buf, size) from Print + operator bool() { + return initialized; + } + + void attach(void (*fptr)(const uint8_t *buf, size_t len)) { + if (fptr != NULL) { + raw_callback = mbed::Callback(fptr); + } + } + + template + void send(std::string const &func_name, Args... args) { + auto client = new rpc::client(); + client->send(func_name, args...); + delete client; + } + + void setTimeout(uint32_t milliseconds) { + _timeout = milliseconds; + } + + template + RPCLIB_MSGPACK::object_handle call(std::string const &func_name, Args... args) { + // find a free spot in clients[] + // create new object + // protect this with mutex + + int i = 0; + for (i=0; i<10; i++) { + if (clients[i] == NULL) { + clients[i] = new rpc::client(); + break; + } + } + + clients[i]->setTimeout(_timeout); + has_timed_out = false; + + // thread start and client .call + clients[i]->call(func_name, args...); + + if (clients[i]->timedOut()) { + has_timed_out = true; + } + RPCLIB_MSGPACK::object_handle ret = std::move(clients[i]->result); + + delete clients[i]; + clients[i] = NULL; + return ret; + } + + bool timedOut() { + return has_timed_out; + } + + rpc::client* clients[10]; + RingBufferN<512> rx_buffer; + mbed::Callback raw_callback; + + private: + bool initialized = false; + uint32_t _timeout = osWaitForever; + bool has_timed_out = false; + rtos::Thread* eventThread; + RPCLIB_MSGPACK::unpacker unpacker; + + static void new_service_cb(struct rpmsg_device *rdev, const char *name, uint32_t dest); + static int rpmsg_recv_callback(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv); + void request(uint8_t *buf, size_t len); + void response(uint8_t *buf, size_t len); }; } diff --git a/libraries/RPC/src/RPC_client.h b/libraries/RPC/src/RPC_client.h index b1e0ed34c..64bbf55b1 100644 --- a/libraries/RPC/src/RPC_client.h +++ b/libraries/RPC/src/RPC_client.h @@ -1,3 +1,5 @@ +// Copyright (c) 2024 Arduino SA +// SPDX-License-Identifier: MPL-2.0 #include "Arduino.h" #include "mbed.h" #include "rpc/dispatcher.h" @@ -26,7 +28,7 @@ class client { auto buffer = new RPCLIB_MSGPACK::sbuffer; RPCLIB_MSGPACK::pack(*buffer, call_obj); - send_msgpack(buffer); + write(buffer); auto e = osSignalWait(0, timeout); delete buffer; @@ -58,7 +60,7 @@ class client { auto buffer = new RPCLIB_MSGPACK::sbuffer; RPCLIB_MSGPACK::pack(*buffer, call_obj); - send_msgpack(buffer); + write(buffer); delete buffer; } @@ -81,7 +83,7 @@ class client { private: enum class request_type { call = 0, notification = 2 };; - void send_msgpack(RPCLIB_MSGPACK::sbuffer *buffer); + void write(RPCLIB_MSGPACK::sbuffer *buffer); void getResult(RPCLIB_MSGPACK::object_handle& res); }; } diff --git a/libraries/RPC/src/SerialRPC.cpp b/libraries/RPC/src/SerialRPC.cpp index 1965e0cba..0b2d57348 100644 --- a/libraries/RPC/src/SerialRPC.cpp +++ b/libraries/RPC/src/SerialRPC.cpp @@ -1,3 +1,5 @@ +// Copyright (c) 2024 Arduino SA +// SPDX-License-Identifier: MPL-2.0 #include "SerialRPC.h" #include "RPC.h" @@ -22,4 +24,4 @@ arduino::SerialRPCClass::operator bool() { return RPC; } -arduino::SerialRPCClass SerialRPC; \ No newline at end of file +arduino::SerialRPCClass SerialRPC; diff --git a/libraries/RPC/src/SerialRPC.h b/libraries/RPC/src/SerialRPC.h index e732f19db..7c7a4768c 100644 --- a/libraries/RPC/src/SerialRPC.h +++ b/libraries/RPC/src/SerialRPC.h @@ -1,3 +1,5 @@ +// Copyright (c) 2024 Arduino SA +// SPDX-License-Identifier: MPL-2.0 #ifndef __SERIAL_RPC__ #define __SERIAL_RPC__ @@ -69,4 +71,4 @@ class SerialRPCClass : public Stream { extern arduino::SerialRPCClass SerialRPC; -#endif \ No newline at end of file +#endif diff --git a/libraries/SE05X/src/SE05X.cpp b/libraries/SE05X/src/SE05X.cpp index c9a322bc4..1fb3dfe22 100644 --- a/libraries/SE05X/src/SE05X.cpp +++ b/libraries/SE05X/src/SE05X.cpp @@ -26,7 +26,6 @@ #define SE05X_EC_SIGNATURE_HEADER_LENGTH 6 #define SE05X_EC_SIGNATURE_DER_LENGTH SE05X_EC_SIGNATURE_HEADER_LENGTH + SE05X_EC_SIGNATURE_RAW_LENGTH #define SE05X_SHA256_LENGTH 32 -#define SE05X_SN_LENGTH 18 #define SE05X_DER_BUFFER_SIZE 256 #define SE05X_TEMP_OBJECT 9999 @@ -111,8 +110,6 @@ static void setECSignatureRsValuesInDER(const byte* rawSignature, byte* signatur int SE05XClass::begin() { - sss_status_t status; - memset(&_boot_ctx, 0, sizeof(ex_sss_boot_ctx_t)); se05x_ic_power_on(); @@ -158,17 +155,39 @@ int SE05XClass::readConfiguration(byte data[]) return 1; } +int SE05XClass::serialNumber(byte sn[]) +{ + return serialNumber(sn, SE05X_SN_LENGTH); +} + +int SE05XClass::serialNumber(byte sn[], size_t length) +{ + size_t uidLen = SE05X_SN_LENGTH; + byte UID[SE05X_SN_LENGTH]; + + if(!sn) { + return 0; + } + + sss_status_t status = sss_session_prop_get_au8(&_boot_ctx.session, kSSS_SessionProp_UID, UID, &uidLen); + if ((status != kStatus_SSS_Success)) { + SE05X_PRINT_ERROR("Error in Se05x_API_ReadObject \n"); + return 0; + } + memcpy(sn, UID, length < SE05X_SN_LENGTH ? length : SE05X_SN_LENGTH); + return 1; +} + String SE05XClass::serialNumber() { String result = (char*)NULL; byte UID[SE05X_SN_LENGTH]; - size_t uidLen = 18; - sss_session_prop_get_au8(&_boot_ctx.session, kSSS_SessionProp_UID, UID, &uidLen); + serialNumber(UID, sizeof(UID)); - result.reserve(uidLen*2); + result.reserve(SE05X_SN_LENGTH * 2); - for (int i = 0; i < uidLen; i++) { + for (size_t i = 0; i < SE05X_SN_LENGTH; i++) { byte b = UID[i]; if (b < 16) { @@ -591,8 +610,6 @@ int SE05XClass::deleteAllObjects(void) int SE05XClass::getObjectHandle(int objectId, sss_object_t * object) { - sss_status_t status; - if(kStatus_SSS_Success != sss_key_object_init(object, &_boot_ctx.ks)) { SE05X_PRINT_ERROR("sss_key_object_init Failed"); return 0; diff --git a/libraries/SE05X/src/SE05X.h b/libraries/SE05X/src/SE05X.h index a01eb8b01..e955491ba 100644 --- a/libraries/SE05X/src/SE05X.h +++ b/libraries/SE05X/src/SE05X.h @@ -27,11 +27,13 @@ #include "se05x_APDU.h" #if defined SE05X_PRINT_ERROR_ENABLE -#define SE05X_PRINT_ERROR Serial.println +#define SE05X_PRINT_ERROR(x) Serial.println(x) #else -#define SE05X_PRINT_ERROR +#define SE05X_PRINT_ERROR(x) #endif +#define SE05X_SN_LENGTH 18 + class SE05XClass { public: @@ -41,6 +43,8 @@ class SE05XClass int begin(); void end(); + int serialNumber(byte sn[]); + int serialNumber(byte sn[], size_t length); String serialNumber(); long random(long max); @@ -76,8 +80,8 @@ class SE05XClass int readSlot(int slot, byte data[], int length); int writeSlot(int slot, const byte data[], int length); inline int locked() { return 1; } - inline int writeConfiguration(const byte data[]); - inline int readConfiguration(byte data[]); + int writeConfiguration(const byte data[]); + int readConfiguration(byte data[]); inline int lock() { return 1; } private: diff --git a/libraries/SE05X/src/WiFiSSLSE050Client.cpp b/libraries/SE05X/src/WiFiSSLSE050Client.cpp index e0d78db5d..7a3b88555 100644 --- a/libraries/SE05X/src/WiFiSSLSE050Client.cpp +++ b/libraries/SE05X/src/WiFiSSLSE050Client.cpp @@ -19,13 +19,25 @@ #include "WiFiSSLSE050Client.h" -arduino::WiFiSSLSE050Client::WiFiSSLSE050Client() { - onBeforeConnect(mbed::callback(this, &WiFiSSLSE050Client::setRootCAClientCertKey)); +arduino::MbedSSLSE050Client::MbedSSLSE050Client() { + onBeforeConnect(mbed::callback(this, &MbedSSLSE050Client::setRootCAClientCertKey)); }; -void arduino::WiFiSSLSE050Client::setEccSlot(int KeySlot, const byte cert[], int certLen) { +void arduino::MbedSSLSE050Client::setEccSlot(int KeySlot, const byte cert[], int certLen) { _keySlot = KeySlot; _client_cert_len = certLen; _client_cert = cert; } + +void WiFiSSLSE050Client::setEccSlot(int KeySlot, const byte cert[], int certLen) { + if (!client) { + newMbedClient(); + } + static_cast(client.get())->setEccSlot(KeySlot, cert, certLen); +} + +void WiFiSSLSE050Client::newMbedClient() { + client.reset(new MbedSSLSE050Client()); + client->setNetwork(getNetwork()); +} diff --git a/libraries/SE05X/src/WiFiSSLSE050Client.h b/libraries/SE05X/src/WiFiSSLSE050Client.h index cb223255f..6d3409652 100644 --- a/libraries/SE05X/src/WiFiSSLSE050Client.h +++ b/libraries/SE05X/src/WiFiSSLSE050Client.h @@ -23,18 +23,17 @@ #include "SE05X.h" #include "WiFiSSLClient.h" +#include "MbedSSLClient.h" extern const char CA_CERTIFICATES[]; namespace arduino { -class WiFiSSLSE050Client : public arduino::WiFiSSLClient { +class MbedSSLSE050Client : public arduino::MbedSSLClient { public: - WiFiSSLSE050Client(); - virtual ~WiFiSSLSE050Client() { - stop(); - } + MbedSSLSE050Client(); + void setEccSlot(int KeySlot, const byte cert[], int certLen); private: @@ -49,6 +48,10 @@ class WiFiSSLSE050Client : public arduino::WiFiSSLClient { return 0; } + if(_hostname && !_disableSNI) { + ((TLSSocket*)sock)->set_hostname(_hostname); + } + if( NSAPI_ERROR_OK != ((TLSSocket*)sock)->append_root_ca_cert(_ca_cert_custom)) { return 0; } @@ -57,7 +60,10 @@ class WiFiSSLSE050Client : public arduino::WiFiSSLClient { return 0; } - if( NSAPI_ERROR_OK != ((TLSSocket*)sock)->set_client_cert_key((void*)_client_cert, (size_t)_client_cert_len, &_keyObject, SE05X.getDeviceCtx())) { + if( NSAPI_ERROR_OK != ((TLSSocket*)sock)->set_client_cert_key((void*)_client_cert, + (size_t)_client_cert_len, + &_keyObject, + SE05X.getDeviceCtx())) { return 0; } @@ -65,6 +71,16 @@ class WiFiSSLSE050Client : public arduino::WiFiSSLClient { } }; +class WiFiSSLSE050Client : public arduino::WiFiSSLClient { + +public: + + void setEccSlot(int KeySlot, const byte cert[], int certLen); + +protected: + virtual void newMbedClient(); +}; + } #endif /* WIFISSLSE050CLIENT_H */ diff --git a/libraries/SFU/src/SFU.cpp b/libraries/SFU/src/SFU.cpp index 4f56b536e..b9c1a1a6d 100644 --- a/libraries/SFU/src/SFU.cpp +++ b/libraries/SFU/src/SFU.cpp @@ -21,14 +21,17 @@ int SFU::begin() { if (err) { err = getFileSystem().reformat(&bd); } + return err; } int SFU::download(const char* url) { - // No download at the moment, allow the user to upload a file via mass storage + // No download at the moment, allow the user to upload a file via mass storage + return 0; } int SFU::apply() { - // No autoreboot + // No autoreboot + return 0; } #ifdef ADD_USB_MSD diff --git a/libraries/STM32H747_System/src/STM32H747_System.cpp b/libraries/STM32H747_System/src/STM32H747_System.cpp index e54736b95..8789dfae7 100644 --- a/libraries/STM32H747_System/src/STM32H747_System.cpp +++ b/libraries/STM32H747_System/src/STM32H747_System.cpp @@ -6,7 +6,6 @@ extern RTC_HandleTypeDef RTCHandle; uint8_t STM32H747::readReg(uint8_t subAddress) { - char response = 0xFF; Wire1.beginTransmission(PMIC_ADDRESS); Wire1.write(subAddress); Wire1.endTransmission(false); @@ -115,4 +114,4 @@ bool STM32H747::useInternalOscillator(bool lowspeed) { digitalWrite(PH_1, LOW); return true; -} \ No newline at end of file +} diff --git a/libraries/Scheduler/examples/MultipleBlinks/MultipleBlinks.ino b/libraries/Scheduler/examples/MultipleBlinks/MultipleBlinks.ino index d1e67e20a..f76ad67ae 100644 --- a/libraries/Scheduler/examples/MultipleBlinks/MultipleBlinks.ino +++ b/libraries/Scheduler/examples/MultipleBlinks/MultipleBlinks.ino @@ -43,6 +43,13 @@ #define led2 LEDG #define led3 LEDB +// On Edge Control there are no leds so we use GPIO and Serial +#elif defined(ARDUINO_EDGE_CONTROL) + +#define led1 CMD_TRIAC_3 +#define led2 CMD_TRIAC_4 +#define led3 NOT_A_PIN + #else int led1 = LEDR; diff --git a/libraries/Scheduler/src/Scheduler.h b/libraries/Scheduler/src/Scheduler.h index fc8999b42..a43b2d4e9 100644 --- a/libraries/Scheduler/src/Scheduler.h +++ b/libraries/Scheduler/src/Scheduler.h @@ -27,12 +27,14 @@ extern "C" { typedef void (*SchedulerParametricTask)(void *); } +// This class exists for only backwards compatibility with arduino-libraries/Scheduler. +// You are encouraged to use mbed::Thread directly rather than using this. class SchedulerClass { public: SchedulerClass(); - void startLoop(SchedulerTask task, uint32_t stackSize = 1024); - void start(SchedulerTask task, uint32_t stackSize = 1024); - void start(SchedulerParametricTask task, void *data, uint32_t stackSize = 1024); + void startLoop(SchedulerTask task, uint32_t stackSize = OS_STACK_SIZE); + void start(SchedulerTask task, uint32_t stackSize = OS_STACK_SIZE); + void start(SchedulerParametricTask task, void *data, uint32_t stackSize = OS_STACK_SIZE); void yield() { ::yield(); }; private: diff --git a/libraries/SocketWrapper/library.properties b/libraries/SocketWrapper/library.properties index ed198c88b..95e4c0980 100644 --- a/libraries/SocketWrapper/library.properties +++ b/libraries/SocketWrapper/library.properties @@ -6,4 +6,4 @@ sentence=Wrapper for mbed Socket classes paragraph= category=Other url=http://www.arduino.cc/en/Reference/WiFi -architectures=mbed,ArduinoCore-mbed,mbed_portenta,mbed_nicla,mbed_opta,mbed_giga +architectures=mbed,ArduinoCore-mbed,mbed_portenta,mbed_nicla,mbed_opta,mbed_giga,mbed_edge diff --git a/libraries/SocketWrapper/src/AClient.cpp b/libraries/SocketWrapper/src/AClient.cpp new file mode 100644 index 000000000..9ffa9137a --- /dev/null +++ b/libraries/SocketWrapper/src/AClient.cpp @@ -0,0 +1,145 @@ + +#include "AClient.h" +#include "MbedSSLClient.h" + +void arduino::AClient::newMbedClient() { + client.reset(new MbedClient()); + client->setNetwork(getNetwork()); +} + +arduino::AClient::operator bool() { + return client && *client; +} + +void arduino::AClient::setSocket(Socket *sock) { + if (!client) { + newMbedClient(); + } + client->setSocket(sock); +} + +void arduino::AClient::setSocketTimeout(unsigned long timeout) { + if (!client) { + newMbedClient(); + } + client->setSocketTimeout(timeout); +} + +int arduino::AClient::connect(IPAddress ip, uint16_t port) { + if (!client) { + newMbedClient(); + } + return client->connect(ip, port); +} + +int arduino::AClient::connect(const char *host, uint16_t port) { + if (!client) { + newMbedClient(); + } + return client->connect(host, port); +} + +int arduino::AClient::connectSSL(IPAddress ip, uint16_t port) { + if (!client) { + newMbedClient(); + } + return client->connectSSL(ip, port); +} + +int arduino::AClient::connectSSL(const char *host, uint16_t port) { + if (!client) { + newMbedClient(); + } + return client->connectSSL(host, port); +} + +void arduino::AClient::stop() { + if (!client) + return; + client->stop(); +} + +uint8_t arduino::AClient::connected() { + if (!client) + return false; + return client->connected(); +} + +uint8_t arduino::AClient::status() { + if (!client) + return false; + return client->status(); +} + +IPAddress arduino::AClient::remoteIP() { + if (!client) + return INADDR_NONE; + return client->remoteIP(); +} + +uint16_t arduino::AClient::remotePort() { + if (!client) + return 0; + return client->remotePort(); +} + +size_t arduino::AClient::write(uint8_t b) { + if (!client) + return 0; + return client->write(b); +} + +size_t arduino::AClient::write(const uint8_t *buf, size_t size) { + if (!client) + return 0; + return client->write(buf, size); +} + +void arduino::AClient::flush() { + if (!client) + return; + client->flush(); +} + +int arduino::AClient::available() { + if (!client) + return 0; + return client->available(); +} + +int arduino::AClient::read() { + if (!client) + return -1; + return client->read(); +} + +int arduino::AClient::read(uint8_t *buf, size_t size) { + if (!client) + return 0; + return client->read(buf, size); +} + +int arduino::AClient::peek() { + if (!client) + return -1; + return client->peek(); +} + +void arduino::ASslClient::newMbedClient() { + client.reset(new MbedSSLClient()); + client->setNetwork(getNetwork()); +} + +void arduino::ASslClient::disableSNI(bool statusSNI) { + if (!client) { + newMbedClient(); + } + static_cast(client.get())->disableSNI(statusSNI); +} + +void arduino::ASslClient::appendCustomCACert(const char* ca_cert) { + if (!client) { + newMbedClient(); + } + static_cast(client.get())->appendCustomCACert(ca_cert); +} diff --git a/libraries/SocketWrapper/src/AClient.h b/libraries/SocketWrapper/src/AClient.h new file mode 100644 index 000000000..4f72020ee --- /dev/null +++ b/libraries/SocketWrapper/src/AClient.h @@ -0,0 +1,83 @@ +/* + AClient.h - Copyable Client implementation for Mbed Core + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef MBEDACLIENT_H +#define MBEDACLIENT_H + +#include +#include "MbedClient.h" + +namespace arduino { + +class AClient : public Client { +public: + + AClient() {} + + virtual int connect(IPAddress ip, uint16_t port); + virtual int connect(const char *host, uint16_t port); + int connectSSL(IPAddress ip, uint16_t port); + int connectSSL(const char* host, uint16_t port); + virtual void stop(); + + virtual explicit operator bool(); + virtual uint8_t connected(); + uint8_t status(); + + IPAddress remoteIP(); + uint16_t remotePort(); + + virtual size_t write(uint8_t); + virtual size_t write(const uint8_t *buf, size_t size); + virtual void flush(); + + virtual int available(); + virtual int read(); + virtual int read(uint8_t *buf, size_t size); + virtual int peek(); + + using Print::write; + + void setSocketTimeout(unsigned long timeout); + +protected: + friend class EthernetServer; + friend class WiFiServer; + + std::shared_ptr client; + virtual NetworkInterface* getNetwork() = 0; + virtual void newMbedClient(); + void setSocket(Socket* sock); + +}; + +class ASslClient : public AClient { +public: + + ASslClient() {} + + void disableSNI(bool statusSNI); + + void appendCustomCACert(const char* ca_cert); + +protected: + virtual void newMbedClient(); +}; + +} +#endif diff --git a/libraries/SocketWrapper/src/MbedClient.cpp b/libraries/SocketWrapper/src/MbedClient.cpp index dfd856f77..296b64943 100644 --- a/libraries/SocketWrapper/src/MbedClient.cpp +++ b/libraries/SocketWrapper/src/MbedClient.cpp @@ -6,25 +6,27 @@ arduino::MbedClient::MbedClient() : _status(false), - _timeout(0) { + _timeout(SOCKET_TIMEOUT) { } uint8_t arduino::MbedClient::status() { - return _status; + return (_status && (getNetwork()->get_connection_status() < NSAPI_STATUS_DISCONNECTED)); } + void arduino::MbedClient::readSocket() { - while (1) { + uint8_t data[SOCKET_BUFFER_SIZE]; + + while (sock != nullptr) { event->wait_any(0xFF, 100); - uint8_t data[SOCKET_BUFFER_SIZE]; int ret = NSAPI_ERROR_WOULD_BLOCK; do { - if (rxBuffer.availableForStore() == 0) { + mutex->lock(); + if (sock != nullptr && rxBuffer.availableForStore() == 0) { + mutex->unlock(); yield(); continue; - } - mutex->lock(); - if (sock == nullptr || (closing && borrowed_socket)) { + } else if (sock == nullptr) { goto cleanup; } ret = sock->recv(data, rxBuffer.availableForStore()); @@ -58,10 +60,9 @@ void arduino::MbedClient::setSocket(Socket *_sock) { } void arduino::MbedClient::configureSocket(Socket *_s) { - _s->set_timeout(_timeout); _s->set_blocking(false); _s->getpeername(&address); - + if (event == nullptr) { event = new rtos::EventFlags; } @@ -79,14 +80,8 @@ void arduino::MbedClient::configureSocket(Socket *_s) { } int arduino::MbedClient::connect(SocketAddress socketAddress) { - - if (sock && reader_th) { - // trying to reuse a connection, let's call stop() to cleanup the state - char c; - if (sock->recv(&c, 1) < 0) { - stop(); - } - } + // if a connection is aready ongoing, a disconnection must be enforced before starting another one + stop(); if (sock == nullptr) { sock = new TCPSocket(); @@ -129,11 +124,14 @@ int arduino::MbedClient::connect(IPAddress ip, uint16_t port) { int arduino::MbedClient::connect(const char *host, uint16_t port) { SocketAddress socketAddress = SocketAddress(); socketAddress.set_port(port); - getNetwork()->gethostbyname(host, &socketAddress); + SocketHelpers::gethostbyname(getNetwork(), host, &socketAddress); return connect(socketAddress); } int arduino::MbedClient::connectSSL(SocketAddress socketAddress) { + // if a connection is aready ongoing, a disconnection must be enforced before starting another one + stop(); + if (sock == nullptr) { sock = new TLSSocket(); _own_socket = true; @@ -150,6 +148,11 @@ int arduino::MbedClient::connectSSL(SocketAddress socketAddress) { return 0; } + /* For TLS connection timeout needs to be configured before handshake starts + * otherwise socket timeout is not adopted. See TLSSocketWrapper::set_timeout(int timeout) + */ + sock->set_timeout(_timeout); + restart_connect: nsapi_error_t returnCode = static_cast(sock)->connect(socketAddress); int ret = 0; @@ -183,18 +186,10 @@ int arduino::MbedClient::connectSSL(IPAddress ip, uint16_t port) { return connectSSL(SocketHelpers::socketAddressFromIpAddress(ip, port)); } -int arduino::MbedClient::connectSSL(const char *host, uint16_t port, bool disableSNI) { - if (!disableSNI) { - if (sock == nullptr) { - sock = new TLSSocket(); - _own_socket = true; - } - static_cast(sock)->set_hostname(host); - } - +int arduino::MbedClient::connectSSL(const char *host, uint16_t port) { SocketAddress socketAddress = SocketAddress(); socketAddress.set_port(port); - getNetwork()->gethostbyname(host, &socketAddress); + SocketHelpers::gethostbyname(getNetwork(), host, &socketAddress); return connectSSL(socketAddress); } @@ -206,14 +201,10 @@ size_t arduino::MbedClient::write(const uint8_t *buf, size_t size) { if (sock == nullptr) return 0; - sock->set_blocking(true); - sock->set_timeout(SOCKET_TIMEOUT); - int ret = NSAPI_ERROR_WOULD_BLOCK; - do { - ret = sock->send(buf, size); - } while ((ret != size && ret == NSAPI_ERROR_WOULD_BLOCK) && connected()); - configureSocket(sock); - return size; + sock->set_timeout(_timeout); + int ret = sock->send(buf, size); + sock->set_blocking(false); + return ret >= 0 ? ret : 0; } int arduino::MbedClient::available() { @@ -222,6 +213,8 @@ int arduino::MbedClient::available() { } int arduino::MbedClient::read() { + if (sock == nullptr) + return -1; mutex->lock(); if (!available()) { mutex->unlock(); @@ -234,6 +227,8 @@ int arduino::MbedClient::read() { } int arduino::MbedClient::read(uint8_t *data, size_t len) { + if (sock == nullptr) + return 0; mutex->lock(); int avail = available(); @@ -265,15 +260,15 @@ void arduino::MbedClient::stop() { if (mutex != nullptr) { mutex->lock(); } - if (sock != nullptr && borrowed_socket == false) { + if (sock != nullptr) { if (_own_socket) { delete sock; } else { + sock->set_timeout(_timeout); sock->close(); } sock = nullptr; } - closing = true; if (mutex != nullptr) { mutex->unlock(); } @@ -291,10 +286,11 @@ void arduino::MbedClient::stop() { mutex = nullptr; } _status = false; + rxBuffer.clear(); } uint8_t arduino::MbedClient::connected() { - return _status; + return ((status() == true) || (available() > 0)); } IPAddress arduino::MbedClient::remoteIP() { @@ -305,6 +301,6 @@ uint16_t arduino::MbedClient::remotePort() { return address.get_port(); } -void arduino::MbedClient::setTimeout(unsigned long timeout) { +void arduino::MbedClient::setSocketTimeout(unsigned long timeout) { _timeout = timeout; } diff --git a/libraries/SocketWrapper/src/MbedClient.h b/libraries/SocketWrapper/src/MbedClient.h index a2132ebf3..573c4d5b1 100644 --- a/libraries/SocketWrapper/src/MbedClient.h +++ b/libraries/SocketWrapper/src/MbedClient.h @@ -35,45 +35,30 @@ namespace arduino { -class MbedClient : public arduino::Client { -private: - // Helper for copy constructor and assignment operator - void copyClient(const MbedClient& orig) { - auto _sock = orig.sock; - auto _m = (MbedClient*)&orig; - _m->borrowed_socket = true; - _m->stop(); - this->setSocket(_sock); - } +class MbedClient { public: MbedClient(); - // Copy constructor, to be used when a Client returned by server.available() - // needs to "survive" event if it goes out of scope - // Sample usage: Client* new_client = new Client(existing_client) - MbedClient(const MbedClient& orig) { - copyClient(orig); + MbedClient(unsigned long timeout) { + _timeout = timeout; } - MbedClient& operator=(const MbedClient& orig) { - copyClient(orig); - return *this; - } - virtual ~MbedClient() { stop(); } + void setNetwork(NetworkInterface* network) {_network = network;} + uint8_t status(); int connect(SocketAddress socketAddress); - int connect(IPAddress ip, uint16_t port); - int connect(const char* host, uint16_t port); + virtual int connect(IPAddress ip, uint16_t port); + virtual int connect(const char* host, uint16_t port); int connectSSL(SocketAddress socketAddress); int connectSSL(IPAddress ip, uint16_t port); - int connectSSL(const char* host, uint16_t port, bool disableSNI = false); + int connectSSL(const char* host, uint16_t port); size_t write(uint8_t); - size_t write(const uint8_t* buf, size_t size) override; + size_t write(const uint8_t* buf, size_t size); int available(); int read(); int read(uint8_t* buf, size_t size); @@ -93,16 +78,16 @@ class MbedClient : public arduino::Client { IPAddress remoteIP(); uint16_t remotePort(); - void setTimeout(unsigned long timeout); + void setSocketTimeout(unsigned long timeout); friend class MbedServer; friend class MbedSSLClient; friend class MbedSocketClass; - using Print::write; - protected: - virtual NetworkInterface* getNetwork() = 0; + NetworkInterface* getNetwork() {return _network;} + + NetworkInterface* _network = nullptr; Socket* sock = nullptr; void onBeforeConnect(mbed::Callback cb) { @@ -110,11 +95,12 @@ class MbedClient : public arduino::Client { } private: + + MbedClient(const MbedClient&) : _timeout(0) {} + RingBufferN rxBuffer; bool _status = false; - bool borrowed_socket = false; bool _own_socket = false; - bool closing = false; mbed::Callback beforeConnect; SocketAddress address; rtos::Thread* reader_th = nullptr; diff --git a/libraries/SocketWrapper/src/MbedSSLClient.cpp b/libraries/SocketWrapper/src/MbedSSLClient.cpp index e0aa1d2dd..ce4cc9fca 100644 --- a/libraries/SocketWrapper/src/MbedSSLClient.cpp +++ b/libraries/SocketWrapper/src/MbedSSLClient.cpp @@ -1,5 +1,9 @@ #include "MbedSSLClient.h" -arduino::MbedSSLClient::MbedSSLClient(): _disableSNI{false} { +arduino::MbedSSLClient::MbedSSLClient() + : _ca_cert_custom(nullptr), + _hostname(nullptr), + _disableSNI(false) { + onBeforeConnect(mbed::callback(this, &MbedSSLClient::setRootCA)); }; diff --git a/libraries/SocketWrapper/src/MbedSSLClient.h b/libraries/SocketWrapper/src/MbedSSLClient.h index c4705fc7b..d4c48fc82 100644 --- a/libraries/SocketWrapper/src/MbedSSLClient.h +++ b/libraries/SocketWrapper/src/MbedSSLClient.h @@ -23,7 +23,6 @@ #include "MbedClient.h" #include #include -#include extern const char CA_CERTIFICATES[]; @@ -33,6 +32,7 @@ class MbedSSLClient : public arduino::MbedClient { public: MbedSSLClient(); + virtual ~MbedSSLClient() { stop(); } @@ -41,7 +41,8 @@ class MbedSSLClient : public arduino::MbedClient { return connectSSL(ip, port); } int connect(const char* host, uint16_t port) { - return connectSSL(host, port, _disableSNI); + _hostname = host; + return connectSSL(host, port); } void disableSNI(bool statusSNI) { _disableSNI = statusSNI; @@ -52,13 +53,18 @@ class MbedSSLClient : public arduino::MbedClient { } protected: - const char* _ca_cert_custom = NULL; + const char* _ca_cert_custom; + const char* _hostname; + bool _disableSNI; private: int setRootCA() { + int err = 0; + +#if defined(MBEDTLS_FS_IO) mbed::BlockDevice* root = mbed::BlockDevice::get_default_instance(); - int err = root->init(); - if( err != QSPIF_BD_ERROR_OK) { + err = root->init(); + if( err != 0) { return err; } @@ -74,14 +80,17 @@ class MbedSSLClient : public arduino::MbedClient { if( err != NSAPI_ERROR_OK) { return err; } +#endif + + if(_hostname && !_disableSNI) { + ((TLSSocket*)sock)->set_hostname(_hostname); + } if(_ca_cert_custom != NULL) { err = ((TLSSocket*)sock)->append_root_ca_cert(_ca_cert_custom); } return err; } - - bool _disableSNI; }; } diff --git a/libraries/SocketWrapper/src/MbedServer.cpp b/libraries/SocketWrapper/src/MbedServer.cpp index 758c0208c..5f0881d3f 100644 --- a/libraries/SocketWrapper/src/MbedServer.cpp +++ b/libraries/SocketWrapper/src/MbedServer.cpp @@ -5,39 +5,29 @@ uint8_t arduino::MbedServer::status() { return 0; } +void arduino::MbedServer::begin(uint16_t port) { + _port = port; + begin(); +} + void arduino::MbedServer::begin() { if (sock == nullptr) { sock = new TCPSocket(); ((TCPSocket *)sock)->open(getNetwork()); } if (sock) { + int enable = 1; + sock->setsockopt(NSAPI_SOCKET, NSAPI_REUSEADDR, &enable, sizeof(int)); sock->bind(_port); sock->listen(5); sock->set_blocking(false); } } -size_t arduino::MbedServer::write(uint8_t c) { - if (sock) { - sock->send(&c, 1); - return 1; - } - return 0; -} - -size_t arduino::MbedServer::write(const uint8_t *buf, size_t size) { - if (sock) { - sock->send(buf, size); - return size; - } - return 0; -} - - // MUST be reimplemented (just copy/paste and replace MbedClient to *Client) since MbedClient is abstract /* -arduino::MbedClient arduino::MbedServer::available(uint8_t* status) { +arduino::MbedClient arduino::MbedServer::accept(uint8_t* status) { MbedClient client; nsapi_error_t error; if (sock == nullptr) { diff --git a/libraries/SocketWrapper/src/MbedServer.h b/libraries/SocketWrapper/src/MbedServer.h index 23017e296..c6a844e15 100644 --- a/libraries/SocketWrapper/src/MbedServer.h +++ b/libraries/SocketWrapper/src/MbedServer.h @@ -30,7 +30,7 @@ namespace arduino { class MbedClient; -class MbedServer : public arduino::Server { +class MbedServer { protected: virtual NetworkInterface *getNetwork() = 0; @@ -38,23 +38,26 @@ class MbedServer : public arduino::Server { uint16_t _port; public: + MbedServer() + : _port(80){}; MbedServer(uint16_t port) : _port(port){}; virtual ~MbedServer() { + end(); + } + void end() { if (sock) { delete sock; sock = nullptr; } } + void begin(uint16_t port); void begin(); - virtual size_t write(uint8_t); - virtual size_t write(const uint8_t *buf, size_t size); uint8_t status(); - - //virtual MbedClient available(uint8_t* status) = 0; - - using Print::write; + explicit operator bool() { + return sock != nullptr; + } friend class MbedSocketClass; friend class MbedClient; diff --git a/libraries/SocketWrapper/src/MbedUdp.cpp b/libraries/SocketWrapper/src/MbedUdp.cpp index 2a02daee1..56d40f06f 100644 --- a/libraries/SocketWrapper/src/MbedUdp.cpp +++ b/libraries/SocketWrapper/src/MbedUdp.cpp @@ -42,7 +42,7 @@ uint8_t arduino::MbedUDP::beginMulticast(IPAddress ip, uint16_t port) { SocketAddress socketAddress = SocketHelpers::socketAddressFromIpAddress(ip, port); if (_socket.join_multicast_group(socketAddress) != NSAPI_ERROR_OK) { - printf("Error joining the multicast group\n"); + //printf("Error joining the multicast group\n"); return 0; } @@ -63,7 +63,7 @@ int arduino::MbedUDP::beginPacket(IPAddress ip, uint16_t port) { int arduino::MbedUDP::beginPacket(const char *host, uint16_t port) { _host = SocketAddress(host, port); txBuffer.clear(); - getNetwork()->gethostbyname(host, &_host); + SocketHelpers::gethostbyname(getNetwork(), host, &_host); //If IP is null and port is 0 the initialization failed return (_host.get_ip_address() == nullptr && _host.get_port() == 0) ? 0 : 1; } diff --git a/libraries/SocketWrapper/src/SocketHelpers.cpp b/libraries/SocketWrapper/src/SocketHelpers.cpp index 2e52663fa..9360f9988 100644 --- a/libraries/SocketWrapper/src/SocketHelpers.cpp +++ b/libraries/SocketWrapper/src/SocketHelpers.cpp @@ -1,19 +1,33 @@ #include "SocketHelpers.h" +#include uint8_t* arduino::MbedSocketClass::macAddress(uint8_t* mac) { const char* mac_str = getNetwork()->get_mac_address(); for (int b = 0; b < 6; b++) { uint32_t tmp; sscanf(&mac_str[b * 2 + (b)], "%02x", (unsigned int*)&tmp); - mac[5 - b] = (uint8_t)tmp; + mac[b] = (uint8_t)tmp; } - //sscanf(mac_str, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", &mac[5], &mac[4], &mac[3], &mac[2], &mac[1], &mac[0]); return mac; } +String arduino::MbedSocketClass::macAddress() { + const char* mac_str = getNetwork()->get_mac_address(); + if (!mac_str) { + return String("ff:ff:ff:ff:ff:ff"); + } + return String(mac_str); +} + +int arduino::MbedSocketClass::setHostname(const char* hostname) { + NetworkInterface* interface = getNetwork(); + interface->set_hostname(hostname); + return 1; +} + int arduino::MbedSocketClass::hostByName(const char* aHostname, IPAddress& aResult) { SocketAddress socketAddress = SocketAddress(); - nsapi_error_t returnCode = getNetwork()->gethostbyname(aHostname, &socketAddress); + nsapi_error_t returnCode = gethostbyname(getNetwork(), aHostname, &socketAddress); nsapi_addr_t address = socketAddress.get_addr(); aResult[0] = address.bytes[0]; aResult[1] = address.bytes[1]; @@ -46,13 +60,43 @@ arduino::IPAddress arduino::MbedSocketClass::gatewayIP() { arduino::IPAddress arduino::MbedSocketClass::dnsServerIP() { SocketAddress ip; NetworkInterface* interface = getNetwork(); - interface->get_dns_server(0, &ip, nullptr); + char _if_name[5] {}; + interface->get_interface_name(_if_name); + interface->get_dns_server(0, &ip, _if_name); + return ipAddressFromSocketAddress(ip); +} + +arduino::IPAddress arduino::MbedSocketClass::dnsIP(int n) { + SocketAddress ip; + NetworkInterface* interface = getNetwork(); + char _if_name[5] {}; + interface->get_interface_name(_if_name); + interface->get_dns_server(n, &ip, _if_name); return ipAddressFromSocketAddress(ip); } +int arduino::MbedSocketClass::ping(const char *hostname, uint8_t ttl) +{ + SocketAddress socketAddress; + gethostbyname(getNetwork(),hostname, &socketAddress); + return ping(socketAddress, ttl); +} + +int arduino::MbedSocketClass::ping(const String &hostname, uint8_t ttl) +{ + return ping(hostname.c_str(), ttl); +} + +int arduino::MbedSocketClass::ping(IPAddress host, uint8_t ttl) +{ + SocketAddress socketAddress = socketAddressFromIpAddress(host, 0); + return ping(socketAddress, ttl); +} + void arduino::MbedSocketClass::config(arduino::IPAddress local_ip) { - nsapi_addr_t convertedIP = { NSAPI_IPv4, { local_ip[0], local_ip[1], local_ip[2], local_ip[3] } }; - _ip = SocketAddress(convertedIP); + IPAddress dns = local_ip; + dns[3] = 1; + config(local_ip, dns); } void arduino::MbedSocketClass::config(const char* local_ip) { @@ -60,20 +104,27 @@ void arduino::MbedSocketClass::config(const char* local_ip) { } void arduino::MbedSocketClass::config(IPAddress local_ip, IPAddress dns_server) { - config(local_ip); - setDNS(dns_server); + IPAddress gw = local_ip; + gw[3] = 1; + config(local_ip, dns_server, gw); } void arduino::MbedSocketClass::config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway) { - config(local_ip, dns_server); - nsapi_addr_t convertedGatewayIP = { NSAPI_IPv4, { gateway[0], gateway[1], gateway[2], gateway[3] } }; - _gateway = SocketAddress(convertedGatewayIP); + IPAddress nm(255, 255, 255, 0); + config(local_ip, dns_server, gateway, nm); } void arduino::MbedSocketClass::config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet) { - config(local_ip, dns_server, gateway); + _useStaticIP = (local_ip != INADDR_NONE); + if (!_useStaticIP) + return; + nsapi_addr_t convertedIP = { NSAPI_IPv4, { local_ip[0], local_ip[1], local_ip[2], local_ip[3] } }; + _ip = SocketAddress(convertedIP); + nsapi_addr_t convertedGatewayIP = { NSAPI_IPv4, { gateway[0], gateway[1], gateway[2], gateway[3] } }; + _gateway = SocketAddress(convertedGatewayIP); nsapi_addr_t convertedSubnetMask = { NSAPI_IPv4, { subnet[0], subnet[1], subnet[2], subnet[3] } }; _netmask = SocketAddress(convertedSubnetMask); + setDNS(dns_server); } void arduino::MbedSocketClass::setDNS(IPAddress dns_server1) { @@ -87,6 +138,22 @@ void arduino::MbedSocketClass::setDNS(IPAddress dns_server1, IPAddress dns_serve _dnsServer2 = SocketAddress(convertedDNSServer2); } +int arduino::MbedSocketClass::ping(SocketAddress &socketAddress, uint8_t ttl, uint32_t timeout) +{ + /* ttl is not supported by mbed ICMPSocket. Default value used is 255 */ + (void)ttl; + int response = -1; +#if MBED_CONF_LWIP_RAW_SOCKET_ENABLED + ICMPSocket s; + s.set_timeout(timeout); + s.open(getNetwork()); + response = s.ping(socketAddress, timeout); + s.close(); +#endif + + return response; +} + arduino::IPAddress arduino::MbedSocketClass::ipAddressFromSocketAddress(SocketAddress socketAddress) { nsapi_addr_t address = socketAddress.get_addr(); return IPAddress(address.bytes[0], address.bytes[1], address.bytes[2], address.bytes[3]); @@ -97,6 +164,15 @@ SocketAddress arduino::MbedSocketClass::socketAddressFromIpAddress(arduino::IPAd return SocketAddress(convertedIP, port); } +nsapi_error_t arduino::MbedSocketClass::gethostbyname(NetworkInterface* interface, const char* aHostname, SocketAddress* socketAddress) { + char ifname[5] {}; + interface->get_interface_name(ifname); + nsapi_version_t version = NSAPI_IPv4; +#if MBED_CONF_LWIP_IPV6_ENABLED + version = NSAPI_UNSPEC; +#endif + return interface->gethostbyname(aHostname, socketAddress, version, ifname); +} // Download helper @@ -114,29 +190,44 @@ void MbedSocketClass::feedWatchdog() { void MbedSocketClass::body_callback(const char* data, uint32_t data_len) { feedWatchdog(); - fwrite(data, 1, data_len, download_target); + fwrite(data, sizeof(data[0]), data_len, download_target); } -int MbedSocketClass::download(char* url, const char* target_file, bool const is_https) { +int MbedSocketClass::download(const char* url, const char* target_file, bool const is_https) { download_target = fopen(target_file, "wb"); + int res = this->download(url, is_https, mbed::callback(this, &MbedSocketClass::body_callback)); + + fclose(download_target); + download_target = nullptr; + + return res; +} + +int MbedSocketClass::download(const char* url, bool const is_https, mbed::Callback cbk) { + if(cbk == nullptr) { + return 0; // a call back must be set + } + HttpRequest* req_http = nullptr; HttpsRequest* req_https = nullptr; HttpResponse* rsp = nullptr; + int res=0; + std::vector header_fields; if (is_https) { - req_https = new HttpsRequest(getNetwork(), nullptr, HTTP_GET, url, mbed::callback(this, &MbedSocketClass::body_callback)); + req_https = new HttpsRequest(getNetwork(), nullptr, HTTP_GET, url, cbk); rsp = req_https->send(NULL, 0); if (rsp == NULL) { - fclose(download_target); - return req_https->get_error(); + res = req_https->get_error(); + goto exit; } } else { - req_http = new HttpRequest(getNetwork(), HTTP_GET, url, mbed::callback(this, &MbedSocketClass::body_callback)); + req_http = new HttpRequest(getNetwork(), HTTP_GET, url, cbk); rsp = req_http->send(NULL, 0); if (rsp == NULL) { - fclose(download_target); - return req_http->get_error(); + res = req_http->get_error(); + goto exit; } } @@ -144,7 +235,21 @@ int MbedSocketClass::download(char* url, const char* target_file, bool const is_ delay(10); } - int const size = ftell(download_target); - fclose(download_target); - return size; + // find the header containing the "Content-Length" value and return that + header_fields = rsp->get_headers_fields(); + for(int i=0; ic_str(), "Content-Length") == 0) { + res = std::stoi(*rsp->get_headers_values()[i]); + break; + } + } + +exit: + if(req_http) delete req_http; + if(req_https) delete req_https; + // no need to delete rsp, it is already deleted by deleting the request + // this may be harmful since it can allow dangling pointers existence + + return res; } diff --git a/libraries/SocketWrapper/src/SocketHelpers.h b/libraries/SocketWrapper/src/SocketHelpers.h index 6934cf888..e285d166c 100644 --- a/libraries/SocketWrapper/src/SocketHelpers.h +++ b/libraries/SocketWrapper/src/SocketHelpers.h @@ -28,85 +28,142 @@ class MbedSocketClass { void config(IPAddress local_ip); /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration as string - */ + * + * param local_ip: Static ip configuration as string + */ void config(const char* local_ip); /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration - * param dns_server: IP configuration for DNS server 1 - */ + * + * param local_ip: Static ip configuration + * param dns_server: IP configuration for DNS server 1 + */ void config(IPAddress local_ip, IPAddress dns_server); /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration - * param dns_server: IP configuration for DNS server 1 - * param gateway : Static gateway configuration - */ + * + * param local_ip: Static ip configuration + * param dns_server: IP configuration for DNS server 1 + * param gateway : Static gateway configuration + */ void config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway); /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration - * param dns_server: IP configuration for DNS server 1 - * param gateway: Static gateway configuration - * param subnet: Static Subnet mask - */ + * + * param local_ip: Static ip configuration + * param dns_server: IP configuration for DNS server 1 + * param gateway: Static gateway configuration + * param subnet: Static Subnet mask + */ void config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet); + // When using DHCP the hostname provided will be used. + int setHostname(const char* hostname); + /* Change DNS Ip configuration - * - * param dns_server1: ip configuration for DNS server 1 - */ + * + * param dns_server1: ip configuration for DNS server 1 + */ void setDNS(IPAddress dns_server1); /* Change DNS Ip configuration - * - * param dns_server1: ip configuration for DNS server 1 - * param dns_server2: ip configuration for DNS server 2 - * - */ + * + * param dns_server1: ip configuration for DNS server 1 + * param dns_server2: ip configuration for DNS server 2 + * + */ void setDNS(IPAddress dns_server1, IPAddress dns_server2); /* - * Get the interface IP address. - * - * return: Ip address value - */ + * Get the interface IP address. + * + * return: Ip address value + */ IPAddress localIP(); /* - * Get the interface subnet mask address. - * - * return: subnet mask address value - */ + * Get the interface subnet mask address. + * + * return: subnet mask address value + */ IPAddress subnetMask(); /* - * Get the gateway ip address. - * - * return: gateway ip address value - */ + * Get the gateway ip address. + * + * return: gateway ip address value + */ IPAddress gatewayIP(); /* - * Get the DNS Server ip address. - * - * return: DNS Server ip address value - */ + * Get the DNS Server ip address. + * + * return: DNS Server ip address value + */ IPAddress dnsServerIP(); + /* + * Get the DNS Server ip address. + * + * return: DNS Server ip address value + */ + IPAddress dnsIP(int n = 0); + virtual NetworkInterface* getNetwork() = 0; - int download(char* url, const char* target, bool const is_https = false); + /* + * Ping the specified target. + * + * ttl value is unused, but kept for API compatibility + * + * return: RTT in milliseconds or -1 on error + */ + int ping(const char* hostname, uint8_t ttl = 255); + int ping(const String &hostname, uint8_t ttl = 255); + int ping(IPAddress host, uint8_t ttl = 255); + + /* + * Download a file from an HTTP endpoint and save it in the provided `target` location on the fs + * The parameter cbk can be used to perform actions on the buffer before saving on the fs + * + * return: on success the size of the downloaded file, on error -status code + */ + int download( + const char* url, const char* target, bool const is_https = false); + /* + * Download a file from an HTTP endpoint and handle the body of the request on a callback + * passed as an argument + * + * return: on success the size of the downloaded file, on error -status code + */ + int download( + const char* url, bool const is_https = false, + mbed::Callback cbk = nullptr); int hostByName(const char* aHostname, IPAddress& aResult); + /* + * Get the interface MAC address. + * + * Network interface should be ready to get a valid mac address. + * Call WiFi.begin("",""); or Ethernet.begin(); before issuing a mac address + * request, otherwhise returned value will be ff:ff:ff:ff:ff:ff + * + * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH + */ uint8_t* macAddress(uint8_t* mac); + /* + * Get the interface MAC address String. + * + * Network interface should be ready to get a valid MAC address. + * Call WiFi.begin("",""); or Ethernet.begin(); before issuing a mac address + * request, otherwhise returned value will be ff:ff:ff:ff:ff:ff + * + * return: MAC Address String + */ + String macAddress(); + void setFeedWatchdogFunc(voidFuncPtr func); void feedWatchdog(); @@ -120,6 +177,7 @@ class MbedSocketClass { SocketAddress _netmask = nullptr; SocketAddress _dnsServer1 = nullptr; SocketAddress _dnsServer2 = nullptr; + bool _useStaticIP = false; voidFuncPtr _feed_watchdog_func = nullptr; @@ -127,8 +185,10 @@ class MbedSocketClass { void body_callback(const char* data, uint32_t data_len); + int ping(SocketAddress &socketAddress, uint8_t ttl, uint32_t timeout = 5000); static arduino::IPAddress ipAddressFromSocketAddress(SocketAddress socketAddress); static SocketAddress socketAddressFromIpAddress(arduino::IPAddress ip, uint16_t port); + static nsapi_error_t gethostbyname(NetworkInterface* interface, const char* aHostname, SocketAddress* socketAddress); }; using SocketHelpers = MbedSocketClass; diff --git a/libraries/SocketWrapper/src/utility/wl_definitions.h b/libraries/SocketWrapper/src/utility/wl_definitions.h deleted file mode 100644 index bbf3fd8fc..000000000 --- a/libraries/SocketWrapper/src/utility/wl_definitions.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - wl_definitions.h - Library for Arduino Wifi shield. - Copyright (c) 2011-2014 Arduino. All right reserved. - 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ -/* - * wl_definitions.h - * - * Created on: Mar 6, 2011 - * Author: dlafauci - */ - -#ifndef WL_DEFINITIONS_H_ -#define WL_DEFINITIONS_H_ - -// Maximum size of a SSID -#define WL_SSID_MAX_LENGTH 32 -// Length of passphrase. Valid lengths are 8-63. -#define WL_WPA_KEY_MAX_LENGTH 63 -// Length of key in bytes. Valid values are 5 and 13. -#define WL_WEP_KEY_MAX_LENGTH 13 -// Size of a MAC-address or BSSID -#define WL_MAC_ADDR_LENGTH 6 -// Size of a MAC-address or BSSID -#define WL_IPV4_LENGTH 4 -// Maximum size of a SSID list -#define WL_NETWORKS_LIST_MAXNUM 10 -// Maxmium number of socket -#define MAX_SOCK_NUM 4 -// Socket not available constant -#define SOCK_NOT_AVAIL 255 -// Default state value for Wifi state field -#define NA_STATE -1 -//Maximum number of attempts to establish wifi connection -#define WL_MAX_ATTEMPT_CONNECTION 10 - -typedef enum { - WL_NO_SHIELD = 255, - WL_NO_MODULE = 255, - WL_IDLE_STATUS = 0, - WL_NO_SSID_AVAIL, - WL_SCAN_COMPLETED, - WL_CONNECTED, - WL_CONNECT_FAILED, - WL_CONNECTION_LOST, - WL_DISCONNECTED, - WL_AP_LISTENING, - WL_AP_CONNECTED, - WL_AP_FAILED -} wl_status_t; - -/* Encryption modes */ -enum wl_enc_type { /* Values map to 802.11 encryption suites... */ - ENC_TYPE_WEP = 5, - ENC_TYPE_TKIP = 2, - ENC_TYPE_CCMP = 4, - /* ... except these two, 7 and 8 are reserved in 802.11-2007 */ - ENC_TYPE_NONE = 7, - ENC_TYPE_UNKNOWN = 9, - ENC_TYPE_AUTO = 8 -}; - -#if defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4) -#include "whd_version.h" -#define WIFI_FIRMWARE_LATEST_VERSION WHD_VERSION -#endif - -#endif /* WL_DEFINITIONS_H_ */ \ No newline at end of file diff --git a/libraries/SocketWrapper/src/utility/wl_types.h b/libraries/SocketWrapper/src/utility/wl_types.h deleted file mode 100644 index 65f8caae2..000000000 --- a/libraries/SocketWrapper/src/utility/wl_types.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - wl_types.h - Library for Arduino Wifi shield. - Copyright (c) 2011-2014 Arduino. All right reserved. - 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ -/* - * wl_types.h - * - * Created on: Jul 30, 2010 - * Author: dlafauci - */ - - -#ifndef _WL_TYPES_H_ -#define _WL_TYPES_H_ - -#include - -typedef enum { - WL_FAILURE = -1, - WL_SUCCESS = 1, -} wl_error_code_t; - -/* Authentication modes */ -enum wl_auth_mode { - AUTH_MODE_INVALID, - AUTH_MODE_AUTO, - AUTH_MODE_OPEN_SYSTEM, - AUTH_MODE_SHARED_KEY, - AUTH_MODE_WPA, - AUTH_MODE_WPA2, - AUTH_MODE_WPA_PSK, - AUTH_MODE_WPA2_PSK -}; - -typedef enum { - WL_PING_DEST_UNREACHABLE = -1, - WL_PING_TIMEOUT = -2, - WL_PING_UNKNOWN_HOST = -3, - WL_PING_ERROR = -4 -} wl_ping_result_t; - -#endif //_WL_TYPES_H_ \ No newline at end of file diff --git a/libraries/USBHOST/src/USB251xB.cpp b/libraries/USBHOST/src/USB251xB.cpp index 48b34813a..55953771a 100644 --- a/libraries/USBHOST/src/USB251xB.cpp +++ b/libraries/USBHOST/src/USB251xB.cpp @@ -133,8 +133,8 @@ void write_hub_configuration(struct usb251xb* hub) { wbuf[0] = USB251XB_I2C_WRITE_SZ; memcpy(&wbuf[1], &i2c_wb[offset], USB251XB_I2C_WRITE_SZ); - printf("writing %d byte block %d to 0x%02X\n", - USB251XB_I2C_WRITE_SZ, i, offset); + //printf("writing %d byte block %d to 0x%02X\n", + // USB251XB_I2C_WRITE_SZ, i, offset); Wire.beginTransmission(0x2C); Wire.write(offset); diff --git a/libraries/WiFi/examples/AP_SimpleWebServer/AP_SimpleWebServer.ino b/libraries/WiFi/examples/AP_SimpleWebServer/AP_SimpleWebServer.ino new file mode 100644 index 000000000..8dc0678b8 --- /dev/null +++ b/libraries/WiFi/examples/AP_SimpleWebServer/AP_SimpleWebServer.ino @@ -0,0 +1,152 @@ +/* + WiFi Web Server LED Blink + + A simple web server that lets you blink an LED via the web. + This sketch will create a new access point (with no password). + It will then launch a new server and print out the IP address + to the Serial Monitor. From there, you can open that address in a web browser + to turn on and off the LED on pin 13. + + If the IP address of your board is yourAddress: + http://yourAddress/H turns the LED on + http://yourAddress/L turns it off + + created 25 Nov 2012 + by Tom Igoe + adapted to WiFi AP by Adafruit + */ + +#include +#include "arduino_secrets.h" +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) +int keyIndex = 0; // your network key index number (needed only for WEP) + +int led = LED_BUILTIN; +int status = WL_IDLE_STATUS; +WiFiServer server(80); + +void setup() { + //Initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + Serial.println("Access Point Web Server"); + + pinMode(led, OUTPUT); // set the LED pin mode + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + WiFi.config(IPAddress(10, 0, 0, 1)); + + // print the network name (SSID); + Serial.print("Creating access point named: "); + Serial.println(ssid); + + // Create open network. Change this line if you want to create an open network: + status = WiFi.beginAP(ssid, pass); + if (status != WL_AP_LISTENING) { + Serial.println("Creating access point failed"); + // don't continue + while (true); + } + + // start the web server on port 80 + server.begin(); + + // you're connected now, so print out the status + printWiFiStatus(); +} + + +void loop() { + // compare the previous status to the current status + if (status != WiFi.status()) { + // it has changed update the variable + status = WiFi.status(); + + if (status == WL_AP_CONNECTED) { + // a device has connected to the AP + Serial.println("Device connected to AP"); + } else { + // a device has disconnected from the AP, and we are back in listening mode + Serial.println("Device disconnected from AP"); + } + } + + WiFiClient client = server.accept(); // listen for incoming clients + + if (client) { // if you get a client, + Serial.println("new client"); // print a message out the serial port + String currentLine = ""; // make a String to hold incoming data from the client + while (client.connected()) { // loop while the client's connected + delayMicroseconds(10); // This is required for the Arduino Nano RP2040 Connect - otherwise it will loop so fast that SPI will never be served. + if (client.available()) { // if there's bytes to read from the client, + char c = client.read(); // read a byte, then + Serial.write(c); // print it out to the serial monitor + if (c == '\n') { // if the byte is a newline character + + // if the current line is blank, you got two newline characters in a row. + // that's the end of the client HTTP request, so send a response: + if (currentLine.length() == 0) { + // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) + // and a content-type so the client knows what's coming, then a blank line: + client.println("HTTP/1.1 200 OK"); + client.println("Content-type:text/html"); + client.println(); + + // the content of the HTTP response follows the header: + client.print("Click here turn the LED on
"); + client.print("Click here turn the LED off
"); + + // The HTTP response ends with another blank line: + client.println(); + // break out of the while loop: + break; + } + else { // if you got a newline, then clear currentLine: + currentLine = ""; + } + } + else if (c != '\r') { // if you got anything else but a carriage return character, + currentLine += c; // add it to the end of the currentLine + } + + // Check to see if the client request was "GET /H" or "GET /L": + if (currentLine.endsWith("GET /H")) { + digitalWrite(led, HIGH); // GET /H turns the LED on + } + if (currentLine.endsWith("GET /L")) { + digitalWrite(led, LOW); // GET /L turns the LED off + } + } + } + // close the connection: + client.stop(); + Serial.println("client disconnected"); + } +} + +void printWiFiStatus() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your WiFi shield's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print where to go in a browser: + Serial.print("To see this page in action, open a browser to http://"); + Serial.println(ip); + +} diff --git a/libraries/WiFi/examples/AP_SimpleWebServer/arduino_secrets.h b/libraries/WiFi/examples/AP_SimpleWebServer/arduino_secrets.h new file mode 100644 index 000000000..493b719ca --- /dev/null +++ b/libraries/WiFi/examples/AP_SimpleWebServer/arduino_secrets.h @@ -0,0 +1,3 @@ +// Both SSID and password must be 8 characters or longer +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFi/examples/ScanNetworksAdvanced/ScanNetworksAdvanced.ino b/libraries/WiFi/examples/ScanNetworksAdvanced/ScanNetworksAdvanced.ino new file mode 100644 index 000000000..51326b98c --- /dev/null +++ b/libraries/WiFi/examples/ScanNetworksAdvanced/ScanNetworksAdvanced.ino @@ -0,0 +1,132 @@ +/* + This example prints the board's MAC address, and + scans for available WiFi networks using the NINA module. + Every ten seconds, it scans again. It doesn't actually + connect to any network, so no encryption scheme is specified. + BSSID and WiFi channel are printed + + This example is based on ScanNetworks + + created 1 Mar 2017 + by Arturo Guadalupi +*/ + + + +#include + +void setup() { + //Initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + // scan for existing networks: + Serial.println(); + Serial.println("Scanning available networks..."); + listNetworks(); + + // print your MAC address: + byte mac[6]; + WiFi.macAddress(mac); + Serial.print("MAC: "); + printMacAddress(mac); +} + +void loop() { + delay(10000); + // scan for existing networks: + Serial.println("Scanning available networks..."); + listNetworks(); +} + +void listNetworks() { + // scan for nearby networks: + Serial.println("** Scan Networks **"); + int numSsid = WiFi.scanNetworks(); + if (numSsid == -1) + { + Serial.println("Couldn't get a WiFi connection"); + while (true); + } + + // print the list of networks seen: + Serial.print("number of available networks: "); + Serial.println(numSsid); + + // print the network number and name for each network found: + for (int thisNet = 0; thisNet < numSsid; thisNet++) { + Serial.print(thisNet + 1); + Serial.print(") "); + Serial.print("Signal: "); + Serial.print(WiFi.RSSI(thisNet)); + Serial.print(" dBm"); + Serial.print("\tChannel: "); + Serial.print(WiFi.channel(thisNet)); + byte bssid[6]; + Serial.print("\t\tBSSID: "); + printMacAddress(WiFi.BSSID(thisNet, bssid)); + Serial.print("\tEncryption: "); + printEncryptionType(WiFi.encryptionType(thisNet)); + Serial.print("\t\tSSID: "); + Serial.println(WiFi.SSID(thisNet)); + Serial.flush(); + } + Serial.println(); +} + +void printEncryptionType(int thisType) { + // read the encryption type and print out the name: + switch (thisType) { + case ENC_TYPE_WEP: + Serial.print("WEP"); + break; + case ENC_TYPE_WPA: + Serial.print("WPA"); + break; + case ENC_TYPE_WPA2: + Serial.print("WPA2"); + break; + case ENC_TYPE_NONE: + Serial.print("None"); + break; + case ENC_TYPE_AUTO: + Serial.print("Auto"); + break; + case ENC_TYPE_WPA3: + Serial.print("WPA3"); + break; + case ENC_TYPE_UNKNOWN: + default: + Serial.print("Unknown"); + break; + } +} + +void print2Digits(byte thisByte) { + if (thisByte < 0xF) { + Serial.print("0"); + } + Serial.print(thisByte, HEX); +} + +void printMacAddress(byte mac[]) { + for (int i = 0; i < 6; i++) { + if (i > 0) { + Serial.print(":"); + } + if (mac[i] < 16) { + Serial.print("0"); + } + Serial.print(mac[i], HEX); + } + Serial.println(); +} diff --git a/libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino b/libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino new file mode 100644 index 000000000..5fe110116 --- /dev/null +++ b/libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino @@ -0,0 +1,130 @@ +/* + WiFi Web Server LED Blink + + A simple web server that lets you blink an LED via the web. + This sketch will print the IP address of your WiFi module (once connected) + to the Serial Monitor. From there, you can open that address in a web browser + to turn on and off the LED on pin 9. + + If the IP address of your board is yourAddress: + http://yourAddress/H turns the LED on + http://yourAddress/L turns it off + + This example is written for a network using WPA encryption. For + WEP or WPA, change the WiFi.begin() call accordingly. + + Circuit: + * Board with WiFi + * LED attached to pin 9 + + created 25 Nov 2012 + by Tom Igoe + */ + +#include + +#include "arduino_secrets.h" +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) +int keyIndex = 0; // your network key index number (needed only for WEP) + +int status = WL_IDLE_STATUS; +WiFiServer server(80); + +void setup() { + Serial.begin(9600); // initialize serial communication + pinMode(LED_BUILTIN, OUTPUT); // set the LED pin mode + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) { + Serial.print("Attempting to connect to Network named: "); + Serial.println(ssid); // print the network name (SSID); + + // Connect to WPA/WPA2 network. Change this line if using open or WEP network: + status = WiFi.begin(ssid, pass); + // wait 3 seconds for connection: + delay(3000); + } + server.begin(); // start the web server on port 80 + printWifiStatus(); // you're connected now, so print out the status +} + + +void loop() { + WiFiClient client = server.accept(); // listen for incoming clients + + if (client) { // if you get a client, + Serial.println("new client"); // print a message out the serial port + String currentLine = ""; // make a String to hold incoming data from the client + while (client.connected()) { // loop while the client's connected + if (client.available()) { // if there's bytes to read from the client, + char c = client.read(); // read a byte, then + Serial.write(c); // print it out to the serial monitor + if (c == '\n') { // if the byte is a newline character + + // if the current line is blank, you got two newline characters in a row. + // that's the end of the client HTTP request, so send a response: + if (currentLine.length() == 0) { + // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) + // and a content-type so the client knows what's coming, then a blank line: + client.println("HTTP/1.1 200 OK"); + client.println("Content-type:text/html"); + client.println(); + + // the content of the HTTP response follows the header: + client.print("Click here turn the LED on
"); + client.print("Click here turn the LED off
"); + + // The HTTP response ends with another blank line: + client.println(); + // break out of the while loop: + break; + } else { // if you got a newline, then clear currentLine: + currentLine = ""; + } + } else if (c != '\r') { // if you got anything else but a carriage return character, + currentLine += c; // add it to the end of the currentLine + } + + // Check to see if the client request was "GET /H" or "GET /L": + if (currentLine.endsWith("GET /H")) { + digitalWrite(LED_BUILTIN, HIGH); // GET /H turns the LED on + } + if (currentLine.endsWith("GET /L")) { + digitalWrite(LED_BUILTIN, LOW); // GET /L turns the LED off + } + } + } + // close the connection: + client.stop(); + Serial.println("client disconnected"); + } +} + +void printWifiStatus() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your board's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("signal strength (RSSI):"); + Serial.print(rssi); + Serial.println(" dBm"); + // print where to go in a browser: + Serial.print("To see this page in action, open a browser to http://"); + Serial.println(ip); +} diff --git a/libraries/WiFi/examples/SimpleWebServerWiFi/arduino_secrets.h b/libraries/WiFi/examples/SimpleWebServerWiFi/arduino_secrets.h new file mode 100644 index 000000000..0c9fdd556 --- /dev/null +++ b/libraries/WiFi/examples/SimpleWebServerWiFi/arduino_secrets.h @@ -0,0 +1,2 @@ +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFi/examples/WiFiAdvancedChatServer/WiFiAdvancedChatServer.ino b/libraries/WiFi/examples/WiFiAdvancedChatServer/WiFiAdvancedChatServer.ino new file mode 100644 index 000000000..4d09fdab2 --- /dev/null +++ b/libraries/WiFi/examples/WiFiAdvancedChatServer/WiFiAdvancedChatServer.ino @@ -0,0 +1,101 @@ +/* + Advanced WiFi Chat Server + + A more advanced server that distributes any incoming messages + to all connected clients but the client the message comes from. + To use, telnet to your device's IP address and type. + + Circuit: + * Board with WiFi + + */ + +#include + +#include "arduino_secrets.h" +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) + +int status = WL_IDLE_STATUS; + +// telnet defaults to port 23 +WiFiServer server(23); + +WiFiClient clients[8]; + +void setup() { + //Initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) { + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + // Connect to WPA/WPA2 network. Change this line if using open network: + status = WiFi.begin(ssid, pass); + + // wait 3 seconds for connection: + delay(3000); + } + + // start the server: + server.begin(); + + Serial.print("Chat server address:"); + Serial.println(WiFi.localIP()); +} + +void loop() { + // check for any new client connecting, and say hello (before any incoming data) + WiFiClient newClient = server.accept(); + if (newClient) { + for (byte i=0; i < 8; i++) { + if (!clients[i]) { + Serial.print("We have a new client #"); + Serial.println(i); + newClient.print("Hello, client number: "); + newClient.println(i); + // Once we "accept", the client is no longer tracked by WiFiServer + // so we must store it into our list of clients + clients[i] = newClient; + break; + } + } + } + + // check for incoming data from all clients + for (byte i=0; i < 8; i++) { + if (clients[i] && clients[i].available() > 0) { + // read bytes from a client + byte buffer[80]; + int count = clients[i].read(buffer, 80); + // write the bytes to all other connected clients + for (byte j=0; j < 8; j++) { + if (j != i && clients[j].connected()) { + clients[j].write(buffer, count); + } + } + } + } + + // stop any clients which disconnect + for (byte i=0; i < 8; i++) { + if (clients[i] && !clients[i].connected()) { + Serial.print("disconnect client #"); + Serial.println(i); + clients[i].stop(); + } + } + +} diff --git a/libraries/WiFi/examples/WiFiAdvancedChatServer/arduino_secrets.h b/libraries/WiFi/examples/WiFiAdvancedChatServer/arduino_secrets.h new file mode 100644 index 000000000..0c9fdd556 --- /dev/null +++ b/libraries/WiFi/examples/WiFiAdvancedChatServer/arduino_secrets.h @@ -0,0 +1,2 @@ +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFi/examples/WiFiPing/WiFiPing.ino b/libraries/WiFi/examples/WiFiPing/WiFiPing.ino new file mode 100644 index 000000000..db81e1ce7 --- /dev/null +++ b/libraries/WiFi/examples/WiFiPing/WiFiPing.ino @@ -0,0 +1,114 @@ +/* + Web ICMP Ping + + This sketch pings a device based on the IP address or the hostname + using the WiFi module. + + This example is written for a network using WPA encryption. For + WEP or WPA, change the WiFi.begin() call accordingly. + + created 14 February 2024 + by paulvha + modified 8 Jenuary 2025 + by fabik111 + + */ + +#include +#include "arduino_secrets.h" + +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) + +int status = WL_IDLE_STATUS; + +/* -------------------------------------------------------------------------- */ +void setup() { +/* -------------------------------------------------------------------------- */ + //Initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed."); + // don't continue + while (true); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) { + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + // Connect to WPA/WPA2 network. Change this line if using open or WEP network: + status = WiFi.begin(ssid, pass); + + // wait 3 seconds for connection: + delay(3000); + } + + printWifiStatus(); +} + +/* -------------------------------------------------------------------------- */ +void loop() { +/* -------------------------------------------------------------------------- */ + + // Ping IP + const IPAddress remote_ip(140,82,121,4); + Serial.print("Trying to ping github.com on IP: "); + Serial.println(remote_ip); + + // using default ping count of 1 + int res = WiFi.ping(remote_ip); + + if (res > 0) { + Serial.print("Ping response time: "); + Serial.print(res); + Serial.println(" ms"); + } + else { + Serial.println("Timeout on IP!"); + } + + // Ping Host + const char* remote_host = "www.google.com"; + Serial.print("Trying to ping host: "); + Serial.println(remote_host); + + int res1 = WiFi.ping(remote_host); + + if (res1 > 0) { + Serial.print("Ping response time: "); + Serial.print(res1); + Serial.println(" ms"); + } + else { + Serial.println("Timeout on host!"); + } + + Serial.println(); + delay(5000); +} + +/* -------------------------------------------------------------------------- */ +void printWifiStatus() { +/* -------------------------------------------------------------------------- */ + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your board's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("signal strength (RSSI):"); + Serial.print(rssi); + Serial.println(" dBm"); +} diff --git a/libraries/WiFi/examples/WiFiPing/arduino_secrets.h b/libraries/WiFi/examples/WiFiPing/arduino_secrets.h new file mode 100644 index 000000000..0c9fdd556 --- /dev/null +++ b/libraries/WiFi/examples/WiFiPing/arduino_secrets.h @@ -0,0 +1,2 @@ +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFi/examples/WiFiSSLClient/WiFiSSLClient.ino b/libraries/WiFi/examples/WiFiSSLClient/WiFiSSLClient.ino new file mode 100644 index 000000000..be1875f84 --- /dev/null +++ b/libraries/WiFi/examples/WiFiSSLClient/WiFiSSLClient.ino @@ -0,0 +1,106 @@ +/* +This example creates a client object that connects and transfers +data using always SSL. + +It is compatible with the methods normally related to plain +connections, like client.connect(host, port). + +Written by Arturo Guadalupi +last revision November 2015 + +*/ + +#include + +#include "arduino_secrets.h" +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) +int keyIndex = 0; // your network key index number (needed only for WEP) + +int status = WL_IDLE_STATUS; +// if you don't want to use DNS (and reduce your sketch size) +// use the numeric IP instead of the name for the server: +//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS) +char server[] = "www.google.com"; // name address for Google (using DNS) + +// Initialize the Ethernet client library +// with the IP address and port of the server +// that you want to connect to (port 80 is default for HTTP): +WiFiSSLClient client; + +void setup() { + //Initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) { + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + // Connect to WPA/WPA2 network. Change this line if using open network: + status = WiFi.begin(ssid, pass); + + // wait 3 seconds for connection: + delay(3000); + } + Serial.println("Connected to WiFi"); + printWiFiStatus(); + + Serial.println("\nStarting connection to server..."); + // if you get a connection, report back via serial: + if (client.connect(server, 443)) { + Serial.println("connected to server"); + // Make a HTTP request: + client.println("GET /search?q=arduino HTTP/1.1"); + client.println("Host: www.google.com"); + client.println("Connection: close"); + client.println(); + } +} + +void loop() { + // if there are incoming bytes available + // from the server, read them and print them: + while (client.available()) { + char c = client.read(); + Serial.write(c); + } + + // if the server's disconnected, stop the client: + if (!client.connected()) { + Serial.println(); + Serial.println("disconnecting from server."); + client.stop(); + + // do nothing forevermore: + while (true); + } +} + + +void printWiFiStatus() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your board's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("signal strength (RSSI):"); + Serial.print(rssi); + Serial.println(" dBm"); +} diff --git a/libraries/WiFi/examples/WiFiSSLClient/arduino_secrets.h b/libraries/WiFi/examples/WiFiSSLClient/arduino_secrets.h new file mode 100644 index 000000000..0c9fdd556 --- /dev/null +++ b/libraries/WiFi/examples/WiFiSSLClient/arduino_secrets.h @@ -0,0 +1,2 @@ +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino b/libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino new file mode 100644 index 000000000..2c799a442 --- /dev/null +++ b/libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino @@ -0,0 +1,166 @@ +/* + Udp NTP Client + + Get the time from a Network Time Protocol (NTP) time server + Demonstrates use of UDP sendPacket and ReceivePacket + For more on NTP time servers and the messages needed to communicate with them, + see http://en.wikipedia.org/wiki/Network_Time_Protocol + + created 4 Sep 2010 + by Michael Margolis + modified 9 Apr 2012 + by Tom Igoe + + This code is in the public domain. + + */ + +#include + +int status = WL_IDLE_STATUS; +#include "arduino_secrets.h" +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) +int keyIndex = 0; // your network key index number (needed only for WEP) + +unsigned int localPort = 2390; // local port to listen for UDP packets + +IPAddress timeServer(162, 159, 200, 123); // pool.ntp.org NTP server + +const int NTP_PACKET_SIZE = 48; // NTP timestamp is in the first 48 bytes of the message + +byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets + +// A UDP instance to let us send and receive packets over UDP +WiFiUDP Udp; + +void setup() { + // Open serial communications and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) { + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + // Connect to WPA/WPA2 network. Change this line if using open network: + status = WiFi.begin(ssid, pass); + + // wait 3 seconds for connection: + delay(3000); + } + + Serial.println("Connected to WiFi"); + printWifiStatus(); + + Serial.println("\nStarting connection to server..."); + Udp.begin(localPort); +} + +void loop() { + sendNTPpacket(timeServer); // send an NTP packet to a time server + // wait to see if a reply is available + delay(1000); + if (Udp.parsePacket()) { + Serial.println("packet received"); + // We've received a packet, read the data from it + Udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer + + //the timestamp starts at byte 40 of the received packet and is four bytes, + // or two words, long. First, extract the two words: + + unsigned long highWord = word(packetBuffer[40], packetBuffer[41]); + unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]); + // combine the four bytes (two words) into a long integer + // this is NTP time (seconds since Jan 1 1900): + unsigned long secsSince1900 = highWord << 16 | lowWord; + Serial.print("Seconds since Jan 1 1900 = "); + Serial.println(secsSince1900); + + // now convert NTP time into everyday time: + Serial.print("Unix time = "); + // Unix time starts on Jan 1 1970. In seconds, that's 2208988800: + const unsigned long seventyYears = 2208988800UL; + // subtract seventy years: + unsigned long epoch = secsSince1900 - seventyYears; + // print Unix time: + Serial.println(epoch); + + + // print the hour, minute and second: + Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT) + Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day) + Serial.print(':'); + if (((epoch % 3600) / 60) < 10) { + // In the first 10 minutes of each hour, we'll want a leading '0' + Serial.print('0'); + } + Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute) + Serial.print(':'); + if ((epoch % 60) < 10) { + // In the first 10 seconds of each minute, we'll want a leading '0' + Serial.print('0'); + } + Serial.println(epoch % 60); // print the second + } + // wait ten seconds before asking for the time again + delay(10000); +} + +// send an NTP request to the time server at the given address +unsigned long sendNTPpacket(IPAddress& address) { + //Serial.println("1"); + // set all bytes in the buffer to 0 + memset(packetBuffer, 0, NTP_PACKET_SIZE); + // Initialize values needed to form NTP request + // (see URL above for details on the packets) + //Serial.println("2"); + packetBuffer[0] = 0b11100011; // LI, Version, Mode + packetBuffer[1] = 0; // Stratum, or type of clock + packetBuffer[2] = 6; // Polling Interval + packetBuffer[3] = 0xEC; // Peer Clock Precision + // 8 bytes of zero for Root Delay & Root Dispersion + packetBuffer[12] = 49; + packetBuffer[13] = 0x4E; + packetBuffer[14] = 49; + packetBuffer[15] = 52; + + //Serial.println("3"); + + // all NTP fields have been given values, now + // you can send a packet requesting a timestamp: + Udp.beginPacket(address, 123); //NTP requests are to port 123 + //Serial.println("4"); + Udp.write(packetBuffer, NTP_PACKET_SIZE); + //Serial.println("5"); + Udp.endPacket(); + //Serial.println("6"); +} + + +void printWifiStatus() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your board's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("signal strength (RSSI):"); + Serial.print(rssi); + Serial.println(" dBm"); +} diff --git a/libraries/WiFi/examples/WiFiUdpNtpClient/arduino_secrets.h b/libraries/WiFi/examples/WiFiUdpNtpClient/arduino_secrets.h new file mode 100644 index 000000000..0c9fdd556 --- /dev/null +++ b/libraries/WiFi/examples/WiFiUdpNtpClient/arduino_secrets.h @@ -0,0 +1,2 @@ +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino b/libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino new file mode 100644 index 000000000..9a42aad4c --- /dev/null +++ b/libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino @@ -0,0 +1,105 @@ +/* + WiFi UDP Send and Receive String + + This sketch waits for a UDP packet on localPort using the WiFi module. + When a packet is received an Acknowledge packet is sent to the client on port remotePort + + created 30 December 2012 + by dlf (Metodo2 srl) + + */ + + +#include + +int status = WL_IDLE_STATUS; +#include "arduino_secrets.h" +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) +int keyIndex = 0; // your network key index number (needed only for WEP) + +unsigned int localPort = 2390; // local port to listen on + +char packetBuffer[256]; //buffer to hold incoming packet +char ReplyBuffer[] = "acknowledged"; // a string to send back + +WiFiUDP Udp; + +void setup() { + //Initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) { + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + // Connect to WPA/WPA2 network. Change this line if using open network: + status = WiFi.begin(ssid, pass); + + // wait 3 seconds for connection: + delay(3000); + } + Serial.println("Connected to WiFi"); + printWifiStatus(); + + Serial.println("\nStarting connection to server..."); + // if you get a connection, report back via serial: + Udp.begin(localPort); +} + +void loop() { + + // if there's data available, read a packet + int packetSize = Udp.parsePacket(); + if (packetSize) { + Serial.print("Received packet of size "); + Serial.println(packetSize); + Serial.print("From "); + IPAddress remoteIp = Udp.remoteIP(); + Serial.print(remoteIp); + Serial.print(", port "); + Serial.println(Udp.remotePort()); + + // read the packet into packetBuffer + int len = Udp.read(packetBuffer, 255); + if (len > 0) { + packetBuffer[len] = 0; + } + Serial.println("Contents:"); + Serial.println(packetBuffer); + + // send a reply, to the IP address and port that sent us the packet we received + Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); + Udp.write(ReplyBuffer); + Udp.endPacket(); + } +} + + +void printWifiStatus() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your board's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("signal strength (RSSI):"); + Serial.print(rssi); + Serial.println(" dBm"); +} diff --git a/libraries/WiFi/examples/WiFiUdpSendReceiveString/arduino_secrets.h b/libraries/WiFi/examples/WiFiUdpSendReceiveString/arduino_secrets.h new file mode 100644 index 000000000..0c9fdd556 --- /dev/null +++ b/libraries/WiFi/examples/WiFiUdpSendReceiveString/arduino_secrets.h @@ -0,0 +1,2 @@ +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp index 13bf90656..6ad89d619 100644 --- a/libraries/WiFi/src/WiFi.cpp +++ b/libraries/WiFi/src/WiFi.cpp @@ -3,6 +3,39 @@ #define SSID_MAX_LENGTH 32 #define SSID_MAX_COUNT 64 +static uint8_t sec2enum(nsapi_security_t sec) { + switch (sec) { + case NSAPI_SECURITY_NONE: + return ENC_TYPE_NONE; + case NSAPI_SECURITY_WEP: + return ENC_TYPE_WEP; + case NSAPI_SECURITY_WPA: + return ENC_TYPE_TKIP; + case NSAPI_SECURITY_WPA2: + return ENC_TYPE_CCMP; + case NSAPI_SECURITY_WPA_WPA2: + return ENC_TYPE_CCMP; + case NSAPI_SECURITY_UNKNOWN: + default: + return ENC_TYPE_AUTO; + } +} + +static nsapi_security_t enum2sec(wl_enc_type sec) { + switch (sec) { + case ENC_TYPE_NONE: + return NSAPI_SECURITY_NONE; + case ENC_TYPE_WEP: + return NSAPI_SECURITY_WEP; + case ENC_TYPE_TKIP: + return NSAPI_SECURITY_WPA; + case ENC_TYPE_CCMP: + return NSAPI_SECURITY_WPA_WPA2; + default: + return NSAPI_SECURITY_UNKNOWN; + } +} + bool arduino::WiFiClass::isVisible(const char* ssid) { for (int i = 0; i < SSID_MAX_COUNT; i++) { if (strncmp(ap_list[i].get_ssid(), ssid, SSID_MAX_LENGTH) == 0) { @@ -13,34 +46,59 @@ bool arduino::WiFiClass::isVisible(const char* ssid) { return false; } -int arduino::WiFiClass::begin(const char* ssid, const char* passphrase) { +int arduino::WiFiClass::begin(const char* ssid, const char* passphrase, wl_enc_type security) { if (wifi_if == nullptr) { return 0; } wifi_if->attach(&arduino::WiFiClass::statusCallback); - scanNetworks(); - // use scan result to populate security field - if (!isVisible(ssid)) { - _currentNetworkStatus = WL_CONNECT_FAILED; - return _currentNetworkStatus; + if(security == ENC_TYPE_UNKNOWN) { + scanNetworks(); + if (isVisible(ssid)) { + // Set the network security mode from the scan result. + _security = ap_list[connected_ap].get_security(); + } else { + // For hidden networks, the security mode must be set explicitly. + // if ENC_TYPE_UNKNOWN this means that is the default value and so the user + // has not set it... no worth trying, it is probably an unknown (not hidden) + // interface + _currentNetworkStatus = WL_CONNECT_FAILED; + return _currentNetworkStatus; + } + } else { + _security = enum2sec(security); + } + + wifi_if->set_dhcp(!_useStaticIP); + if (_useStaticIP) { + wifi_if->set_network(_ip, _netmask, _gateway); } - nsapi_error_t result = wifi_if->connect(ssid, passphrase, ap_list[connected_ap].get_security()); + wifi_if->set_timeout(_timeout); + nsapi_error_t result = wifi_if->connect(ssid, passphrase, _security); if(result == NSAPI_ERROR_IS_CONNECTED) { wifi_if->disconnect(); + } else + if (_useStaticIP) { + char if_name[5]; + wifi_if->get_interface_name(if_name); + wifi_if->add_dns_server(_dnsServer2, if_name); + wifi_if->add_dns_server(_dnsServer1, if_name); // pushes dnsServer2 at index 1 } _currentNetworkStatus = (result == NSAPI_ERROR_OK && setSSID(ssid)) ? WL_CONNECTED : WL_CONNECT_FAILED; return _currentNetworkStatus; } +int arduino::WiFiClass::begin(const char* ssid) { + return begin(ssid, NULL, ENC_TYPE_NONE); +} + //Config Wifi to set Static IP && Disable DHCP void arduino::WiFiClass::config(const char* localip, const char* netmask, const char* gateway){ - wifi_if->set_network(localip, netmask, gateway); - wifi_if->set_dhcp(false); + SocketHelpers::config(IPAddress(localip), dnsIP(0), IPAddress(gateway), IPAddress(netmask)); } int arduino::WiFiClass::beginAP(const char* ssid, const char* passphrase, uint8_t channel) { @@ -61,6 +119,10 @@ int arduino::WiFiClass::beginAP(const char* ssid, const char* passphrase, uint8_ //Set ap ssid, password and channel softAPInterface->set_network(_ip, _netmask, _gateway); nsapi_error_t result = softAPInterface->start(ssid, passphrase, NSAPI_SECURITY_WPA2, channel, true /* dhcp server */, NULL, true /* cohexistance */); + if (result != NSAPI_ERROR_OK) { + _currentNetworkStatus = WL_AP_FAILED; + return _currentNetworkStatus; + } nsapi_error_t registrationResult; softAPInterface->unregister_event_handler(); @@ -90,7 +152,7 @@ void* arduino::WiFiClass::handleAPEvents(whd_interface_t ifp, const whd_event_he if (osSemaphoreGetCount(whd_driver->ap_info.whd_wifi_sleep_flag) < 1) { osStatus_t result = osSemaphoreRelease(whd_driver->ap_info.whd_wifi_sleep_flag); if (result != osOK) { - printf("Release whd_wifi_sleep_flag ERROR: %d", result); + //printf("Release whd_wifi_sleep_flag ERROR: %d", result); } } } @@ -149,25 +211,8 @@ int arduino::WiFiClass::setSSID(const char* ssid) { return 1; } -static uint8_t sec2enum(nsapi_security_t sec) { - switch (sec) { - case NSAPI_SECURITY_NONE: - return ENC_TYPE_NONE; - case NSAPI_SECURITY_WEP: - return ENC_TYPE_WEP; - case NSAPI_SECURITY_WPA: - return ENC_TYPE_TKIP; - case NSAPI_SECURITY_WPA2: - return ENC_TYPE_CCMP; - case NSAPI_SECURITY_WPA_WPA2: - return ENC_TYPE_CCMP; - case NSAPI_SECURITY_UNKNOWN: - default: - return ENC_TYPE_AUTO; - } -} - int8_t arduino::WiFiClass::scanNetworks() { + connected_ap = SSID_MAX_COUNT; uint8_t count = SSID_MAX_COUNT; if (ap_list != nullptr) { free(ap_list); @@ -177,17 +222,42 @@ int8_t arduino::WiFiClass::scanNetworks() { } char* arduino::WiFiClass::SSID(uint8_t networkItem) { + if (networkItem >= SSID_MAX_COUNT) { + return NULL; + } return (char*)ap_list[networkItem].get_ssid(); } int32_t arduino::WiFiClass::RSSI(uint8_t networkItem) { + if (networkItem >= SSID_MAX_COUNT) { + return 0; + } return ap_list[networkItem].get_rssi(); } uint8_t arduino::WiFiClass::encryptionType(uint8_t networkItem) { + if (networkItem >= SSID_MAX_COUNT) { + return ENC_TYPE_UNKNOWN; + } return sec2enum(ap_list[networkItem].get_security()); } +uint8_t* arduino::WiFiClass::BSSID(uint8_t networkItem, uint8_t* bssid) { + if (networkItem >= SSID_MAX_COUNT) { + memset(bssid, 0, 6); + } else { + memcpy(bssid, ap_list[networkItem].get_bssid(), 6); + } + return bssid; +} + +uint8_t arduino::WiFiClass::channel(uint8_t networkItem) { + if (networkItem >= SSID_MAX_COUNT) { + return -1; + } + return ap_list[networkItem].get_channel(); +} + int32_t arduino::WiFiClass::RSSI() { return wifi_if->get_rssi(); } @@ -197,13 +267,21 @@ uint8_t arduino::WiFiClass::status() { } uint8_t arduino::WiFiClass::encryptionType() { - return sec2enum(ap_list[connected_ap].get_security()); + if (connected_ap >= SSID_MAX_COUNT) { + return sec2enum(_security); + } else { + return sec2enum(ap_list[connected_ap].get_security()); + } } uint8_t* arduino::WiFiClass::BSSID(unsigned char* bssid) { - const uint8_t* reverse_bssid = ap_list[connected_ap].get_bssid(); - for (int b = 0; b < 6; b++) { - bssid[b] = reverse_bssid[5 - b]; + if (connected_ap >= SSID_MAX_COUNT) { + memset(bssid, 0, 6); + } else { + const uint8_t* reverse_bssid = ap_list[connected_ap].get_bssid(); + for (int b = 0; b < 6; b++) { + bssid[b] = reverse_bssid[5 - b]; + } } return bssid; } @@ -220,6 +298,10 @@ unsigned long arduino::WiFiClass::getTime() { return 0; } +void arduino::WiFiClass::setTimeout(unsigned long timeout) { + _timeout = timeout; +} + void arduino::WiFiClass::statusCallback(nsapi_event_t status, intptr_t param) { if (((param == NSAPI_STATUS_DISCONNECTED) || @@ -238,12 +320,22 @@ void arduino::WiFiClass::MACAddress(uint8_t *mac_address) #define WIFI_FIRMWARE_PATH "/wlan/4343WA1.BIN" +#if defined(CORE_CM4) +#include "QSPIFBlockDevice.h" +mbed::BlockDevice *mbed::BlockDevice::get_default_instance() +{ + static QSPIFBlockDevice default_bd(PD_11, PD_12, PE_2, PF_6, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000); + return &default_bd; +} +#endif + bool firmware_available = false; #include "wiced_filesystem.h" #include "resources.h" void wiced_filesystem_mount_error(void) { + while (!Serial) {} Serial.println("Failed to mount the filesystem containing the WiFi firmware."); Serial.println("Usually that means that the WiFi firmware has not been installed yet" " or was overwritten with another firmware."); @@ -252,6 +344,7 @@ void wiced_filesystem_mount_error(void) { } void wiced_filesystem_firmware_error(void) { + while (!Serial) {} Serial.println("Please run the \"WiFiFirmwareUpdater\" sketch once to install the WiFi firmware."); whd_print_logbuffer(); while (1) {} @@ -274,7 +367,7 @@ wiced_result_t whd_firmware_check_hook(const char* mounted_name, int mount_err) return WICED_SUCCESS; } } - Serial.println("File not found"); + if (Serial) { Serial.println("File not found\n"); } closedir(dir); } wiced_filesystem_firmware_error(); @@ -285,12 +378,17 @@ wiced_result_t whd_firmware_check_hook(const char* mounted_name, int mount_err) #include "whd_version.h" const char* arduino::WiFiClass::firmwareVersion() { - if ((wiced_filesystem_init() != WICED_ERROR) && (wiced_filesystem_mount_default() != WICED_ERROR)) { - if (firmware_available) { - return WHD_VERSION; - } + if (!firmware_available) { + /* Try to mount WiFi firmware filesystem */ + wiced_filesystem_init(); + wiced_filesystem_mount_default(); + } + + if (firmware_available) { + return WHD_VERSION; + } else { + return "v0.0.0"; } - return "v0.0.0"; } arduino::WiFiClass WiFi(WiFiInterface::get_default_instance()); diff --git a/libraries/WiFi/src/WiFi.h b/libraries/WiFi/src/WiFi.h index 774cb68a1..a3a8a6ea9 100644 --- a/libraries/WiFi/src/WiFi.h +++ b/libraries/WiFi/src/WiFi.h @@ -46,8 +46,6 @@ extern "C" { namespace arduino { -typedef void* (*voidPrtFuncPtr)(void); - class WiFiClass : public MbedSocketClass { public: static int16_t _state[MAX_SOCK_NUM]; @@ -57,37 +55,27 @@ class WiFiClass : public MbedSocketClass { : wifi_if(_if){}; /* - * Get firmware version - */ + * Get firmware version + */ static const char* firmwareVersion(); /* Start Wifi connection for OPEN networks - * - * param ssid: Pointer to the SSID string. - */ + * + * param ssid: Pointer to the SSID string. + */ int begin(const char* ssid); - /* Start Wifi connection with WEP encryption. - * Configure a key into the device. The key type (WEP-40, WEP-104) - * is determined by the size of the key (5 bytes for WEP-40, 13 bytes for WEP-104). - * - * param ssid: Pointer to the SSID string. - * param key_idx: The key index to set. Valid values are 0-3. - * param key: Key input buffer. - */ - int begin(const char* ssid, uint8_t key_idx, const char* key); - - void MACAddress(uint8_t *mac_address); + void MACAddress(uint8_t *mac_address) __attribute__((deprecated("Use macAddress(uint8_t *mac_address)"))); /* Start Wifi connection with passphrase - * the most secure supported mode will be automatically selected - * - * param ssid: Pointer to the SSID string. - * param passphrase: Passphrase. Valid characters in a passphrase - * must be between ASCII 32-126 (decimal). - */ - int begin(const char* ssid, const char* passphrase); - + * the most secure supported mode will be automatically selected + * + * param ssid: Pointer to the SSID string. + * param passphrase: Passphrase. Valid characters in a passphrase + * must be between ASCII 32-126 (decimal). + */ + int begin(const char* ssid, const char* passphrase, wl_enc_type security = ENC_TYPE_UNKNOWN); + // Inherit config methods from the parent class using MbedSocketClass::config; @@ -95,108 +83,100 @@ class WiFiClass : public MbedSocketClass { int beginAP(const char* ssid, const char* passphrase, uint8_t channel = DEFAULT_AP_CHANNEL); - /* Set the hostname used for DHCP requests - * - * param name: hostname to set - * - */ - void setHostname(const char* name); - /* - * Disconnect from the network - * - * return: one value of wl_status_t enum - */ + * Disconnect from the network + * + * return: one value of wl_status_t enum + */ int disconnect(void); void end(void); /* - * Return the current SSID associated with the network - * - * return: ssid string - */ + * Return the current SSID associated with the network + * + * return: ssid string + */ char* SSID(); /* - * Return the current BSSID associated with the network. - * It is the MAC address of the Access Point - * - * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH - */ + * Return the current BSSID associated with the network. + * It is the MAC address of the Access Point + * + * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH + */ uint8_t* BSSID(uint8_t* bssid); /* - * Return the current RSSI /Received Signal Strength in dBm) - * associated with the network - * - * return: signed value - */ + * Return the current RSSI /Received Signal Strength in dBm) + * associated with the network + * + * return: signed value + */ int32_t RSSI(); /* - * Return the Encryption Type associated with the network - * - * return: one value of wl_enc_type enum - */ + * Return the Encryption Type associated with the network + * + * return: one value of wl_enc_type enum + */ uint8_t encryptionType(); /* - * Start scan WiFi networks available - * - * return: Number of discovered networks - */ + * Start scan WiFi networks available + * + * return: Number of discovered networks + */ int8_t scanNetworks(); /* - * Return the SSID discovered during the network scan. - * - * param networkItem: specify from which network item want to get the information - * - * return: ssid string of the specified item on the networks scanned list - */ + * Return the SSID discovered during the network scan. + * + * param networkItem: specify from which network item want to get the information + * + * return: ssid string of the specified item on the networks scanned list + */ char* SSID(uint8_t networkItem); /* - * Return the encryption type of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: encryption type (enum wl_enc_type) of the specified item on the networks scanned list - */ + * Return the encryption type of the networks discovered during the scanNetworks + * + * param networkItem: specify from which network item want to get the information + * + * return: encryption type (enum wl_enc_type) of the specified item on the networks scanned list + */ uint8_t encryptionType(uint8_t networkItem); uint8_t* BSSID(uint8_t networkItem, uint8_t* bssid); uint8_t channel(uint8_t networkItem); /* - * Return the RSSI of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: signed value of RSSI of the specified item on the networks scanned list - */ + * Return the RSSI of the networks discovered during the scanNetworks + * + * param networkItem: specify from which network item want to get the information + * + * return: signed value of RSSI of the specified item on the networks scanned list + */ int32_t RSSI(uint8_t networkItem); /* - * Return Connection status. - * - * return: one of the value defined in wl_status_t - */ + * Return Connection status. + * + * return: one of the value defined in wl_status_t + */ uint8_t status(); unsigned long getTime(); - void lowPowerMode(); - void noLowPowerMode(); - - int ping(const char* hostname, uint8_t ttl = 128); - int ping(const String& hostname, uint8_t ttl = 128); - int ping(IPAddress host, uint8_t ttl = 128); + /* + * Configure WiFi join timeout in milliseconds. Default value is 7s. + */ + void setTimeout(unsigned long timeout); friend class WiFiClient; friend class WiFiServer; friend class WiFiUDP; + friend class WiFiSSLClient; NetworkInterface* getNetwork(); @@ -207,6 +187,8 @@ class WiFiClass : public MbedSocketClass { WiFiInterface* wifi_if = nullptr; WiFiAccessPoint* ap_list = nullptr; uint8_t connected_ap; + nsapi_security_t _security; + unsigned long _timeout = 7000; int setSSID(const char* ssid); void ensureDefaultAPNetworkConfiguration(); static void* handleAPEvents(whd_interface_t ifp, const whd_event_header_t* event_header, const uint8_t* event_data, void* handler_user_data); @@ -221,5 +203,6 @@ extern WiFiClass WiFi; #include "WiFiClient.h" #include "WiFiServer.h" #include "WiFiUdp.h" +#include "WiFiSSLClient.h" #endif diff --git a/libraries/WiFi/src/WiFiClient.h b/libraries/WiFi/src/WiFiClient.h index f60a978d3..0cb6781ab 100644 --- a/libraries/WiFi/src/WiFiClient.h +++ b/libraries/WiFi/src/WiFiClient.h @@ -21,11 +21,11 @@ #define wificlient_h #include "WiFi.h" -#include "MbedClient.h" +#include "AClient.h" namespace arduino { -class WiFiClient : public MbedClient { +class WiFiClient : public AClient { NetworkInterface *getNetwork() { return WiFi.getNetwork(); } diff --git a/libraries/WiFi/src/WiFiSSLClient.h b/libraries/WiFi/src/WiFiSSLClient.h index c4751e10a..366eda4b5 100644 --- a/libraries/WiFi/src/WiFiSSLClient.h +++ b/libraries/WiFi/src/WiFiSSLClient.h @@ -21,13 +21,14 @@ #define WIFISSLCLIENT_H #include "WiFi.h" -#include "MbedSSLClient.h" +#include "AClient.h" extern const char CA_CERTIFICATES[]; namespace arduino { -class WiFiSSLClient : public arduino::MbedSSLClient { +class WiFiSSLClient : public arduino::ASslClient { +protected: NetworkInterface *getNetwork() { return WiFi.getNetwork(); } diff --git a/libraries/WiFi/src/WiFiServer.cpp b/libraries/WiFi/src/WiFiServer.cpp index cefbd0214..fb919eff9 100644 --- a/libraries/WiFi/src/WiFiServer.cpp +++ b/libraries/WiFi/src/WiFiServer.cpp @@ -1,6 +1,10 @@ #include "WiFiServer.h" arduino::WiFiClient arduino::WiFiServer::available(uint8_t* status) { + return accept(status); +} + +arduino::WiFiClient arduino::WiFiServer::accept(uint8_t* status) { WiFiClient client; nsapi_error_t error; if (sock == nullptr) { diff --git a/libraries/WiFi/src/WiFiServer.h b/libraries/WiFi/src/WiFiServer.h index ae293b374..3e20d7959 100644 --- a/libraries/WiFi/src/WiFiServer.h +++ b/libraries/WiFi/src/WiFiServer.h @@ -31,9 +31,11 @@ class WiFiServer : public MbedServer { } public: + WiFiServer() {} WiFiServer(uint16_t port) : MbedServer(port) {} - WiFiClient available(uint8_t* status = nullptr); + WiFiClient accept(uint8_t* status = nullptr); + WiFiClient available(uint8_t* status = nullptr) __attribute__((deprecated("Use accept()."))); }; } diff --git a/libraries/WiFi/src/utility/wl_definitions.h b/libraries/WiFi/src/utility/wl_definitions.h index bbf3fd8fc..43091d590 100644 --- a/libraries/WiFi/src/utility/wl_definitions.h +++ b/libraries/WiFi/src/utility/wl_definitions.h @@ -60,19 +60,24 @@ typedef enum { } wl_status_t; /* Encryption modes */ -enum wl_enc_type { /* Values map to 802.11 encryption suites... */ +enum wl_enc_type { /* Values map to 802.11 Cipher Algorithm Identifier */ ENC_TYPE_WEP = 5, ENC_TYPE_TKIP = 2, + ENC_TYPE_WPA = ENC_TYPE_TKIP, ENC_TYPE_CCMP = 4, + ENC_TYPE_WPA2 = ENC_TYPE_CCMP, + ENC_TYPE_GCMP = 6, + ENC_TYPE_WPA3 = ENC_TYPE_GCMP, /* ... except these two, 7 and 8 are reserved in 802.11-2007 */ ENC_TYPE_NONE = 7, ENC_TYPE_UNKNOWN = 9, ENC_TYPE_AUTO = 8 }; -#if defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4) +#if defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_NICLA_VISION) || \ + defined(ARDUINO_GIGA) || defined(ARDUINO_OPTA) #include "whd_version.h" #define WIFI_FIRMWARE_LATEST_VERSION WHD_VERSION #endif -#endif /* WL_DEFINITIONS_H_ */ \ No newline at end of file +#endif /* WL_DEFINITIONS_H_ */ diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 38c6f7e91..9b345d3e1 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -93,6 +93,7 @@ uint8_t arduino::MbedI2C::endTransmission(void) { size_t arduino::MbedI2C::requestFrom(uint8_t address, size_t len, bool stopBit) { char buf[256]; + len = min(len, sizeof(buf)); int ret = master->read(address << 1, buf, len, !stopBit); if (ret != 0) { return 0; @@ -121,14 +122,22 @@ size_t arduino::MbedI2C::write(const uint8_t* data, int len) { } int arduino::MbedI2C::read() { + int rv = -1; + core_util_critical_section_enter(); + if (rxBuffer.available()) { - return rxBuffer.read_char(); + + rv = rxBuffer.read_char(); } - return -1; + core_util_critical_section_exit(); + return rv; } int arduino::MbedI2C::available() { - return rxBuffer.available(); + core_util_critical_section_enter(); + int rv = rxBuffer.available(); + core_util_critical_section_exit(); + return rv; } int arduino::MbedI2C::peek() { @@ -150,13 +159,16 @@ void arduino::MbedI2C::receiveThd() { onRequestCb(); } if (usedTxBuffer != 0) { + core_util_critical_section_enter(); slave->write((const char *) txBuffer, usedTxBuffer); + core_util_critical_section_exit(); usedTxBuffer = 0; } //slave->stop(); break; case mbed::I2CSlave::WriteGeneral: case mbed::I2CSlave::WriteAddressed: + core_util_critical_section_enter(); rxBuffer.clear(); char buf[240]; c = slave->read(buf, sizeof(buf)); @@ -167,8 +179,9 @@ void arduino::MbedI2C::receiveThd() { break; } } - if (rxBuffer.available() > 0 && onReceiveCb != NULL) { - onReceiveCb(rxBuffer.available()); + core_util_critical_section_exit(); + if (available() > 0 && onReceiveCb != NULL) { + onReceiveCb(available()); } //slave->stop(); break; diff --git a/libraries/ea_malloc/malloc_freelist.c b/libraries/ea_malloc/malloc_freelist.c index 833597baa..aa6fed5f9 100644 --- a/libraries/ea_malloc/malloc_freelist.c +++ b/libraries/ea_malloc/malloc_freelist.c @@ -20,7 +20,7 @@ /* * This is the container for our free-list. - * Node the usage of the linked list here: the library uses offsetof + * Note the usage of the linked list here: the library uses offsetof * and container_of to manage the list and get back to the parent struct. */ typedef struct @@ -67,7 +67,7 @@ void defrag_free_list(void) { if((((uintptr_t)&lb->block) + lb->size) == (uintptr_t)b) { - lb->size += sizeof(*b) + b->size; + lb->size += ALLOC_HEADER_SZ + b->size; list_del(&b->node); continue; } diff --git a/libraries/openamp_arduino/src/device.c b/libraries/openamp_arduino/src/device.c index a3bc12caf..45e08eccd 100644 --- a/libraries/openamp_arduino/src/device.c +++ b/libraries/openamp_arduino/src/device.c @@ -5,9 +5,9 @@ */ #include -#include #include #include +#include #include #include #include @@ -43,11 +43,10 @@ int metal_bus_find(const char *name, struct metal_bus **result) metal_list_for_each(&_metal.common.bus_list, node) { bus = metal_container_of(node, struct metal_bus, node); - if (strcmp(bus->name, name) != 0) - continue; - if (result) + if (strcmp(bus->name, name) == 0 && result) { *result = bus; - return 0; + return 0; + } } return -ENOENT; } @@ -106,10 +105,10 @@ int metal_generic_dev_open(struct metal_bus *bus, const char *dev_name, metal_list_for_each(&_metal.common.generic_device_list, node) { dev = metal_container_of(node, struct metal_device, node); - if (strcmp(dev->name, dev_name) != 0) - continue; - *device = dev; - return metal_generic_dev_sys_open(dev); + if (strcmp(dev->name, dev_name) == 0) { + *device = dev; + return metal_generic_dev_sys_open(dev); + } } return -ENODEV; @@ -122,9 +121,9 @@ int metal_generic_dev_dma_map(struct metal_bus *bus, int nents_in, struct metal_sg *sg_out) { + int i; (void)bus; (void)device; - int i; if (sg_out != sg_in) memcpy(sg_out, sg_in, nents_in*(sizeof(struct metal_sg))); @@ -144,10 +143,10 @@ void metal_generic_dev_dma_unmap(struct metal_bus *bus, struct metal_sg *sg, int nents) { + int i; (void)bus; (void)device; (void)dir; - int i; for (i = 0; i < nents; i++) { metal_cache_invalidate(sg[i].virt, sg[i].len); diff --git a/libraries/openamp_arduino/src/dma.c b/libraries/openamp_arduino/src/dma.c new file mode 100644 index 000000000..7edaa549c --- /dev/null +++ b/libraries/openamp_arduino/src/dma.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include +#include + +int metal_dma_map(struct metal_device *dev, + uint32_t dir, + struct metal_sg *sg_in, + int nents_in, + struct metal_sg *sg_out) +{ + int nents_out; + + if (!dev || !sg_in || !sg_out) + return -EINVAL; + if (!dev->bus->ops.dev_dma_map) + return -ENODEV; + + /* memory barrier */ + if (dir == METAL_DMA_DEV_R) + /* If it is device read, apply memory write fence. */ + atomic_thread_fence(memory_order_release); + else + /* If it is device write or r/w, apply memory r/w fence. */ + atomic_thread_fence(memory_order_acq_rel); + nents_out = dev->bus->ops.dev_dma_map(dev->bus, + dev, dir, sg_in, nents_in, sg_out); + return nents_out; +} + +void metal_dma_unmap(struct metal_device *dev, + uint32_t dir, + struct metal_sg *sg, + int nents) +{ + /* memory barrier */ + if (dir == METAL_DMA_DEV_R) + /* If it is device read, apply memory write fence. */ + atomic_thread_fence(memory_order_release); + else + /*If it is device write or r/w, apply memory r/w fence */ + atomic_thread_fence(memory_order_acq_rel); + + if (!dev || !dev->bus->ops.dev_dma_unmap || !sg) + return; + dev->bus->ops.dev_dma_unmap(dev->bus, + dev, dir, sg, nents); +} diff --git a/libraries/openamp_arduino/src/elf_loader.c b/libraries/openamp_arduino/src/elf_loader.c new file mode 100644 index 000000000..c90b8d46b --- /dev/null +++ b/libraries/openamp_arduino/src/elf_loader.c @@ -0,0 +1,707 @@ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include + +static int elf_is_64(const void *elf_info) +{ + const unsigned char *tmp = elf_info; + + if (tmp[EI_CLASS] == ELFCLASS64) + return 1; + else + return 0; +} + +static size_t elf_ehdr_size(const void *elf_info) +{ + if (!elf_info) + return sizeof(Elf64_Ehdr); + else if (elf_is_64(elf_info) != 0) + return sizeof(Elf64_Ehdr); + else + return sizeof(Elf32_Ehdr); +} + +static size_t elf_phoff(const void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Ehdr *ehdr = elf_info; + + return ehdr->e_phoff; + } else { + const Elf64_Ehdr *ehdr = elf_info; + + return ehdr->e_phoff; + } +} + +static size_t elf_phentsize(const void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Ehdr *ehdr = elf_info; + + return ehdr->e_phentsize; + } else { + const Elf64_Ehdr *ehdr = elf_info; + + return ehdr->e_phentsize; + } +} + +static int elf_phnum(const void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Ehdr *ehdr = elf_info; + + return ehdr->e_phnum; + } else { + const Elf64_Ehdr *ehdr = elf_info; + + return ehdr->e_phnum; + } +} + +static size_t elf_shoff(const void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Ehdr *ehdr = elf_info; + + return ehdr->e_shoff; + } else { + const Elf64_Ehdr *ehdr = elf_info; + + return ehdr->e_shoff; + } +} + +static size_t elf_shentsize(const void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Ehdr *ehdr = elf_info; + + return ehdr->e_shentsize; + } else { + const Elf64_Ehdr *ehdr = elf_info; + + return ehdr->e_shentsize; + } +} + +static int elf_shnum(const void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Ehdr *ehdr = elf_info; + + return ehdr->e_shnum; + } else { + const Elf64_Ehdr *ehdr = elf_info; + + return ehdr->e_shnum; + } +} + +static int elf_shstrndx(const void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Ehdr *ehdr = elf_info; + + return ehdr->e_shstrndx; + } else { + const Elf64_Ehdr *ehdr = elf_info; + + return ehdr->e_shstrndx; + } +} + +static void **elf_phtable_ptr(void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + struct elf32_info *einfo = elf_info; + + return (void **)&einfo->phdrs; + } else { + struct elf64_info *einfo = elf_info; + + return (void **)&einfo->phdrs; + } +} + +static void **elf_shtable_ptr(void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + struct elf32_info *einfo = elf_info; + + return (void **)&einfo->shdrs; + } else { + struct elf64_info *einfo = elf_info; + + return (void **)&einfo->shdrs; + } +} + +static void **elf_shstrtab_ptr(void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + struct elf32_info *einfo = elf_info; + + return &einfo->shstrtab; + } else { + struct elf64_info *einfo = elf_info; + + return &einfo->shstrtab; + } +} + +static int *elf_load_state(void *elf_info) +{ + if (elf_is_64(elf_info) == 0) { + struct elf32_info *einfo = elf_info; + + return &einfo->load_state; + } else { + struct elf64_info *einfo = elf_info; + + return &einfo->load_state; + } +} + +static void elf_parse_segment(void *elf_info, const void *elf_phdr, + unsigned int *p_type, size_t *p_offset, + metal_phys_addr_t *p_vaddr, + metal_phys_addr_t *p_paddr, + size_t *p_filesz, size_t *p_memsz) +{ + if (elf_is_64(elf_info) == 0) { + const Elf32_Phdr *phdr = elf_phdr; + + if (p_type) + *p_type = (unsigned int)phdr->p_type; + if (p_offset) + *p_offset = (size_t)phdr->p_offset; + if (p_vaddr) + *p_vaddr = (metal_phys_addr_t)phdr->p_vaddr; + if (p_paddr) + *p_paddr = (metal_phys_addr_t)phdr->p_paddr; + if (p_filesz) + *p_filesz = (size_t)phdr->p_filesz; + if (p_memsz) + *p_memsz = (size_t)phdr->p_memsz; + } else { + const Elf64_Phdr *phdr = elf_phdr; + + if (p_type) + *p_type = (unsigned int)phdr->p_type; + if (p_offset) + *p_offset = (size_t)phdr->p_offset; + if (p_vaddr) + *p_vaddr = (metal_phys_addr_t)phdr->p_vaddr; + if (p_paddr) + *p_paddr = (metal_phys_addr_t)phdr->p_paddr; + if (p_filesz) + *p_filesz = (size_t)phdr->p_filesz; + if (p_memsz) + *p_memsz = (size_t)phdr->p_memsz; + } +} + +static const void *elf_get_segment_from_index(void *elf_info, int index) +{ + if (elf_is_64(elf_info) == 0) { + const struct elf32_info *einfo = elf_info; + const Elf32_Ehdr *ehdr = &einfo->ehdr; + const Elf32_Phdr *phdrs = einfo->phdrs; + + if (!phdrs) + return NULL; + if (index < 0 || index >= ehdr->e_phnum) + return NULL; + return &phdrs[index]; + } else { + const struct elf64_info *einfo = elf_info; + const Elf64_Ehdr *ehdr = &einfo->ehdr; + const Elf64_Phdr *phdrs = einfo->phdrs; + + if (!phdrs) + return NULL; + if (index < 0 || index >= ehdr->e_phnum) + return NULL; + return &phdrs[index]; + } +} + +static void *elf_get_section_from_name(void *elf_info, const char *name) +{ + unsigned int i; + const char *name_table; + + if (elf_is_64(elf_info) == 0) { + struct elf32_info *einfo = elf_info; + Elf32_Ehdr *ehdr = &einfo->ehdr; + Elf32_Shdr *shdr = einfo->shdrs; + + name_table = einfo->shstrtab; + if (!shdr || !name_table) + return NULL; + for (i = 0; i < ehdr->e_shnum; i++, shdr++) { + if (strcmp(name, name_table + shdr->sh_name)) + continue; + else + return shdr; + } + } else { + struct elf64_info *einfo = elf_info; + Elf64_Ehdr *ehdr = &einfo->ehdr; + Elf64_Shdr *shdr = einfo->shdrs; + + name_table = einfo->shstrtab; + if (!shdr || !name_table) + return NULL; + for (i = 0; i < ehdr->e_shnum; i++, shdr++) { + if (strcmp(name, name_table + shdr->sh_name)) + continue; + else + return shdr; + } + } + return NULL; +} + +static void *elf_get_section_from_index(void *elf_info, int index) +{ + if (elf_is_64(elf_info) == 0) { + struct elf32_info *einfo = elf_info; + Elf32_Ehdr *ehdr = &einfo->ehdr; + Elf32_Shdr *shdr = einfo->shdrs; + + if (!shdr) + return NULL; + if (index < 0 || index >= ehdr->e_shnum) + return NULL; + return &einfo->shdrs[index]; + } else { + struct elf64_info *einfo = elf_info; + Elf64_Ehdr *ehdr = &einfo->ehdr; + Elf64_Shdr *shdr = einfo->shdrs; + + if (!shdr) + return NULL; + if (index < 0 || index >= ehdr->e_shnum) + return NULL; + return &einfo->shdrs[index]; + } +} + +static void elf_parse_section(void *elf_info, void *elf_shdr, + unsigned int *sh_type, unsigned int *sh_flags, + metal_phys_addr_t *sh_addr, + size_t *sh_offset, size_t *sh_size, + unsigned int *sh_link, unsigned int *sh_info, + unsigned int *sh_addralign, + size_t *sh_entsize) +{ + if (elf_is_64(elf_info) == 0) { + Elf32_Shdr *shdr = elf_shdr; + + if (sh_type) + *sh_type = shdr->sh_type; + if (sh_flags) + *sh_flags = shdr->sh_flags; + if (sh_addr) + *sh_addr = (metal_phys_addr_t)shdr->sh_addr; + if (sh_offset) + *sh_offset = shdr->sh_offset; + if (sh_size) + *sh_size = shdr->sh_size; + if (sh_link) + *sh_link = shdr->sh_link; + if (sh_info) + *sh_info = shdr->sh_info; + if (sh_addralign) + *sh_addralign = shdr->sh_addralign; + if (sh_entsize) + *sh_entsize = shdr->sh_entsize; + } else { + Elf64_Shdr *shdr = elf_shdr; + + if (sh_type) + *sh_type = shdr->sh_type; + if (sh_flags) + *sh_flags = shdr->sh_flags; + if (sh_addr) + *sh_addr = (metal_phys_addr_t)shdr->sh_addr; + if (sh_offset) + *sh_offset = shdr->sh_offset; + if (sh_size) + *sh_size = shdr->sh_size; + if (sh_link) + *sh_link = shdr->sh_link; + if (sh_info) + *sh_info = shdr->sh_info; + if (sh_addralign) + *sh_addralign = shdr->sh_addralign; + if (sh_entsize) + *sh_entsize = shdr->sh_entsize; + } +} + +static const void *elf_next_load_segment(void *elf_info, int *nseg, + metal_phys_addr_t *da, + size_t *noffset, size_t *nfsize, + size_t *nmsize) +{ + const void *phdr = PT_NULL; + unsigned int p_type = PT_NULL; + + if (!elf_info || !nseg) + return NULL; + while (p_type != PT_LOAD) { + phdr = elf_get_segment_from_index(elf_info, *nseg); + if (!phdr) + return NULL; + elf_parse_segment(elf_info, phdr, &p_type, noffset, + da, NULL, nfsize, nmsize); + *nseg = *nseg + 1; + } + return phdr; +} + +static size_t elf_info_size(const void *img_data) +{ + if (elf_is_64(img_data) == 0) + return sizeof(struct elf32_info); + else + return sizeof(struct elf64_info); +} + +int elf_identify(const void *img_data, size_t len) +{ + if (len < SELFMAG || !img_data) + return -RPROC_EINVAL; + if (memcmp(img_data, ELFMAG, SELFMAG) != 0) + return -RPROC_EINVAL; + else + return 0; +} + +int elf_load_header(const void *img_data, size_t offset, size_t len, + void **img_info, int last_load_state, + size_t *noffset, size_t *nlen) +{ + int *load_state; + + metal_assert(noffset); + metal_assert(nlen); + /* Get ELF header */ + if (last_load_state == ELF_STATE_INIT) { + size_t tmpsize; + + metal_log(METAL_LOG_DEBUG, "Loading ELF headering\r\n"); + tmpsize = elf_ehdr_size(img_data); + if (len < tmpsize) { + *noffset = 0; + *nlen = tmpsize; + return ELF_STATE_INIT; + } else { + size_t infosize = elf_info_size(img_data); + + if (!*img_info) { + *img_info = metal_allocate_memory(infosize); + if (!*img_info) + return -RPROC_ENOMEM; + memset(*img_info, 0, infosize); + } + memcpy(*img_info, img_data, tmpsize); + load_state = elf_load_state(*img_info); + *load_state = ELF_STATE_WAIT_FOR_PHDRS; + last_load_state = ELF_STATE_WAIT_FOR_PHDRS; + } + } + metal_assert(*img_info); + load_state = elf_load_state(*img_info); + if (last_load_state != *load_state) + return -RPROC_EINVAL; + /* Get ELF program headers */ + if (*load_state == ELF_STATE_WAIT_FOR_PHDRS) { + size_t phdrs_size; + size_t phdrs_offset; + void **phdrs; + const void *img_phdrs; + + metal_log(METAL_LOG_DEBUG, "Loading ELF program header.\r\n"); + phdrs_offset = elf_phoff(*img_info); + phdrs_size = elf_phnum(*img_info) * elf_phentsize(*img_info); + if (offset > phdrs_offset || + offset + len < phdrs_offset + phdrs_size) { + *noffset = phdrs_offset; + *nlen = phdrs_size; + return *load_state; + } + /* calculate the programs headers offset to the image_data */ + phdrs_offset -= offset; + img_phdrs = (const char *)img_data + phdrs_offset; + phdrs = elf_phtable_ptr(*img_info); + *phdrs = metal_allocate_memory(phdrs_size); + if (!*phdrs) + return -RPROC_ENOMEM; + memcpy(*phdrs, img_phdrs, phdrs_size); + *load_state = ELF_STATE_WAIT_FOR_SHDRS | + RPROC_LOADER_READY_TO_LOAD; + } + /* Get ELF Section Headers */ + if ((*load_state & ELF_STATE_WAIT_FOR_SHDRS) != 0) { + size_t shdrs_size; + size_t shdrs_offset; + void **shdrs; + const void *img_shdrs; + + metal_log(METAL_LOG_DEBUG, "Loading ELF section header.\r\n"); + shdrs_offset = elf_shoff(*img_info); + if (elf_shnum(*img_info) == 0) { + *load_state = (*load_state & (~ELF_STATE_MASK)) | + ELF_STATE_HDRS_COMPLETE; + *nlen = 0; + return *load_state; + } + shdrs_size = elf_shnum(*img_info) * elf_shentsize(*img_info); + if (offset > shdrs_offset || + offset + len < shdrs_offset + shdrs_size) { + *noffset = shdrs_offset; + *nlen = shdrs_size; + return *load_state; + } + /* calculate the sections headers offset to the image_data */ + shdrs_offset -= offset; + img_shdrs = (const char *)img_data + shdrs_offset; + shdrs = elf_shtable_ptr(*img_info); + *shdrs = metal_allocate_memory(shdrs_size); + if (!*shdrs) + return -RPROC_ENOMEM; + memcpy(*shdrs, img_shdrs, shdrs_size); + *load_state = (*load_state & (~ELF_STATE_MASK)) | + ELF_STATE_WAIT_FOR_SHSTRTAB; + metal_log(METAL_LOG_DEBUG, + "Loading ELF section header complete.\r\n"); + } + /* Get ELF SHSTRTAB section */ + if ((*load_state & ELF_STATE_WAIT_FOR_SHSTRTAB) != 0) { + size_t shstrtab_size; + size_t shstrtab_offset; + int shstrndx; + void *shdr; + void **shstrtab; + + metal_log(METAL_LOG_DEBUG, "Loading ELF shstrtab.\r\n"); + shstrndx = elf_shstrndx(*img_info); + shdr = elf_get_section_from_index(*img_info, shstrndx); + if (!shdr) + return -RPROC_EINVAL; + elf_parse_section(*img_info, shdr, NULL, NULL, + NULL, &shstrtab_offset, + &shstrtab_size, NULL, NULL, + NULL, NULL); + if (offset > shstrtab_offset || + offset + len < shstrtab_offset + shstrtab_size) { + *noffset = shstrtab_offset; + *nlen = shstrtab_size; + return *load_state; + } + /* Calculate shstrtab section offset to the input image data */ + shstrtab_offset -= offset; + shstrtab = elf_shstrtab_ptr(*img_info); + *shstrtab = metal_allocate_memory(shstrtab_size); + if (!*shstrtab) + return -RPROC_ENOMEM; + memcpy(*shstrtab, + (const char *)img_data + shstrtab_offset, + shstrtab_size); + *load_state = (*load_state & (~ELF_STATE_MASK)) | + ELF_STATE_HDRS_COMPLETE; + *nlen = 0; + return *load_state; + } + return last_load_state; +} + +int elf_load(struct remoteproc *rproc, + const void *img_data, size_t offset, size_t len, + void **img_info, int last_load_state, + metal_phys_addr_t *da, + size_t *noffset, size_t *nlen, + unsigned char *padding, size_t *nmemsize) +{ + int *load_state; + const void *phdr; + + (void)rproc; + metal_assert(da); + metal_assert(noffset); + metal_assert(nlen); + if ((last_load_state & RPROC_LOADER_MASK) == RPROC_LOADER_NOT_READY) { + metal_log(METAL_LOG_DEBUG, + "needs to load header first\r\n"); + last_load_state = elf_load_header(img_data, offset, len, + img_info, last_load_state, + noffset, nlen); + if ((last_load_state & RPROC_LOADER_MASK) == + RPROC_LOADER_NOT_READY) { + *da = RPROC_LOAD_ANYADDR; + return last_load_state; + } + } + metal_assert(img_info && *img_info); + load_state = elf_load_state(*img_info); + /* For ELF, segment padding value is 0 */ + if (padding) + *padding = 0; + if ((*load_state & RPROC_LOADER_READY_TO_LOAD) != 0) { + int nsegment; + size_t nsegmsize = 0; + size_t nsize = 0; + int phnums = 0; + + nsegment = *load_state & ELF_NEXT_SEGMENT_MASK; + phdr = elf_next_load_segment(*img_info, &nsegment, da, + noffset, &nsize, &nsegmsize); + if (!phdr) { + metal_log(METAL_LOG_DEBUG, "cannot find more segment\r\n"); + *load_state = (*load_state & (~ELF_NEXT_SEGMENT_MASK)) | + (nsegment & ELF_NEXT_SEGMENT_MASK); + return *load_state; + } + *nlen = nsize; + *nmemsize = nsegmsize; + phnums = elf_phnum(*img_info); + metal_log(METAL_LOG_DEBUG, "segment: %d, total segs %d\r\n", + nsegment, phnums); + if (nsegment == phnums) { + *load_state = (*load_state & (~RPROC_LOADER_MASK)) | + RPROC_LOADER_POST_DATA_LOAD; + } + *load_state = (*load_state & (~ELF_NEXT_SEGMENT_MASK)) | + (nsegment & ELF_NEXT_SEGMENT_MASK); + } else if ((*load_state & RPROC_LOADER_POST_DATA_LOAD) != 0) { + if ((*load_state & ELF_STATE_HDRS_COMPLETE) == 0) { + last_load_state = elf_load_header(img_data, offset, + len, img_info, + last_load_state, + noffset, nlen); + if (last_load_state < 0) + return last_load_state; + if ((last_load_state & ELF_STATE_HDRS_COMPLETE) != 0) { + *load_state = (*load_state & + (~RPROC_LOADER_MASK)) | + RPROC_LOADER_LOAD_COMPLETE; + *nlen = 0; + } + *da = RPROC_LOAD_ANYADDR; + } else { + /* TODO: will handle relocate later */ + *nlen = 0; + *load_state = (*load_state & + (~RPROC_LOADER_MASK)) | + RPROC_LOADER_LOAD_COMPLETE; + } + } + return *load_state; +} + +void elf_release(void *img_info) +{ + if (!img_info) + return; + if (elf_is_64(img_info) == 0) { + struct elf32_info *elf_info = img_info; + + if (elf_info->phdrs) + metal_free_memory(elf_info->phdrs); + if (elf_info->shdrs) + metal_free_memory(elf_info->shdrs); + if (elf_info->shstrtab) + metal_free_memory(elf_info->shstrtab); + metal_free_memory(img_info); + + } else { + struct elf64_info *elf_info = img_info; + + if (elf_info->phdrs) + metal_free_memory(elf_info->phdrs); + if (elf_info->shdrs) + metal_free_memory(elf_info->shdrs); + if (elf_info->shstrtab) + metal_free_memory(elf_info->shstrtab); + metal_free_memory(img_info); + } +} + +metal_phys_addr_t elf_get_entry(void *elf_info) +{ + if (!elf_info) + return METAL_BAD_PHYS; + + if (elf_is_64(elf_info) == 0) { + Elf32_Ehdr *elf_ehdr = elf_info; + Elf32_Addr e_entry; + + e_entry = elf_ehdr->e_entry; + return (metal_phys_addr_t)e_entry; + } else { + Elf64_Ehdr *elf_ehdr = elf_info; + Elf64_Addr e_entry; + + e_entry = elf_ehdr->e_entry; + return (metal_phys_addr_t)e_entry; + } +} + +int elf_locate_rsc_table(void *elf_info, metal_phys_addr_t *da, + size_t *offset, size_t *size) +{ + char *sect_name = ".resource_table"; + void *shdr; + int *load_state; + + if (!elf_info) + return -RPROC_EINVAL; + + load_state = elf_load_state(elf_info); + if ((*load_state & ELF_STATE_HDRS_COMPLETE) == 0) + return -RPROC_ERR_LOADER_STATE; + shdr = elf_get_section_from_name(elf_info, sect_name); + if (!shdr) { + metal_assert(size); + *size = 0; + return 0; + } + elf_parse_section(elf_info, shdr, NULL, NULL, + da, offset, size, + NULL, NULL, NULL, NULL); + return 0; +} + +int elf_get_load_state(void *img_info) +{ + int *load_state; + + if (!img_info) + return -RPROC_EINVAL; + load_state = elf_load_state(img_info); + return *load_state; +} + +const struct loader_ops elf_ops = { + .load_header = elf_load_header, + .load_data = elf_load, + .locate_rsc_table = elf_locate_rsc_table, + .release = elf_release, + .get_entry = elf_get_entry, + .get_load_state = elf_get_load_state, +}; diff --git a/libraries/openamp_arduino/src/generic_device.c b/libraries/openamp_arduino/src/generic_device.c index d01fd3cd7..ec6e53834 100644 --- a/libraries/openamp_arduino/src/generic_device.c +++ b/libraries/openamp_arduino/src/generic_device.c @@ -17,7 +17,7 @@ int metal_generic_dev_sys_open(struct metal_device *dev) { struct metal_io_region *io; - unsigned i; + unsigned int i; /* map I/O memory regions */ for (i = 0; i < dev->num_regions; i++) { diff --git a/libraries/openamp_arduino/src/generic_io.c b/libraries/openamp_arduino/src/generic_io.c index 670f239d5..966bfc561 100644 --- a/libraries/openamp_arduino/src/generic_io.c +++ b/libraries/openamp_arduino/src/generic_io.c @@ -17,8 +17,8 @@ void metal_sys_io_mem_map(struct metal_io_region *io) size_t psize; size_t *va; - va = (size_t *)io->virt; - psize = io->size; + va = io->virt; + psize = (size_t)io->size; if (psize) { if (psize >> io->page_shift) psize = (size_t)1 << io->page_shift; diff --git a/libraries/openamp_arduino/src/init.c b/libraries/openamp_arduino/src/init.c index 315217741..5a6a0063d 100644 --- a/libraries/openamp_arduino/src/init.c +++ b/libraries/openamp_arduino/src/init.c @@ -11,6 +11,9 @@ int metal_init(const struct metal_init_params *params) { int error = 0; + if (_metal.common.ref_count++ != 0) + return 0; + memset(&_metal, 0, sizeof(_metal)); _metal.common.log_handler = params->log_handler; @@ -24,11 +27,15 @@ int metal_init(const struct metal_init_params *params) if (error) return error; + ++_metal.common.ref_count; return error; } void metal_finish(void) { + if (--_metal.common.ref_count != 0) + return; + metal_sys_finish(); memset(&_metal, 0, sizeof(_metal)); } diff --git a/libraries/openamp_arduino/src/io.c b/libraries/openamp_arduino/src/io.c index fccf1100e..7faf40502 100644 --- a/libraries/openamp_arduino/src/io.c +++ b/libraries/openamp_arduino/src/io.c @@ -4,17 +4,19 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#include #include +#include #include #include void metal_io_init(struct metal_io_region *io, void *virt, const metal_phys_addr_t *physmap, size_t size, - unsigned page_shift, unsigned int mem_flags, + unsigned int page_shift, unsigned int mem_flags, const struct metal_io_ops *ops) { - const struct metal_io_ops nops = {NULL, NULL, NULL, NULL, NULL, NULL}; + const struct metal_io_ops nops = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + }; io->virt = virt; io->physmap = physmap; @@ -37,7 +39,7 @@ int metal_io_block_read(struct metal_io_region *io, unsigned long offset, unsigned char *dest = dst; int retlen; - if (offset > io->size) + if (!ptr) return -ERANGE; if ((offset + len) > io->size) len = io->size - offset; @@ -74,7 +76,7 @@ int metal_io_block_write(struct metal_io_region *io, unsigned long offset, const unsigned char *source = src; int retlen; - if (offset > io->size) + if (!ptr) return -ERANGE; if ((offset + len) > io->size) len = io->size - offset; @@ -110,7 +112,7 @@ int metal_io_block_set(struct metal_io_region *io, unsigned long offset, unsigned char *ptr = metal_io_virt(io, offset); int retlen = len; - if (offset > io->size) + if (!ptr) return -ERANGE; if ((offset + len) > io->size) len = io->size - offset; @@ -123,7 +125,7 @@ int metal_io_block_set(struct metal_io_region *io, unsigned long offset, unsigned int i; for (i = 1; i < sizeof(int); i++) - cint |= ((unsigned int)value << (8 * i)); + cint |= ((unsigned int)value << (CHAR_BIT * i)); for (; len && ((uintptr_t)ptr % sizeof(int)); ptr++, len--) *(unsigned char *)ptr = (unsigned char) value; diff --git a/libraries/openamp_arduino/src/irq.c b/libraries/openamp_arduino/src/irq.c index e61bc7e83..c8578fa3c 100644 --- a/libraries/openamp_arduino/src/irq.c +++ b/libraries/openamp_arduino/src/irq.c @@ -1,279 +1,140 @@ /* - * Copyright (c) 2016 - 2017, Xilinx Inc. and Contributors. All rights reserved. + * Copyright (c) 2019, Xilinx Inc. and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ -/* - * @file generic/irq.c - * @brief generic libmetal irq definitions. - */ - #include #include -#include -#include -#include +#include #include #include -#include - -/** IRQ handlers descriptor structure */ -struct metal_irq_hddesc { - metal_irq_handler hd; /**< irq handler */ - void *drv_id; /**< id to identify the driver - of the irq handler */ - struct metal_device *dev; /**< device identifier */ - struct metal_list node; /**< node on irq handlers list */ -}; - -/** IRQ descriptor structure */ -struct metal_irq_desc { - int irq; /**< interrupt number */ - struct metal_list hdls; /**< interrupt handlers */ - struct metal_list node; /**< node on irqs list */ -}; -/** IRQ state structure */ -struct metal_irqs_state { - struct metal_list irqs; /**< interrupt descriptors */ - metal_mutex_t irq_lock; /**< access lock */ -}; +/** List of registered IRQ controller */ +static METAL_DECLARE_LIST(irq_cntrs); -static struct metal_irqs_state _irqs = { - .irqs = METAL_INIT_LIST(_irqs.irqs), - .irq_lock = METAL_MUTEX_INIT(_irqs.irq_lock), -}; - -int metal_irq_register(int irq, - metal_irq_handler hd, - struct metal_device *dev, - void *drv_id) +static int metal_irq_allocate(int irq_base, int irq_num) { - struct metal_irq_desc *irq_p = NULL; - struct metal_irq_hddesc *hdl_p; struct metal_list *node; - unsigned int irq_flags_save; + struct metal_irq_controller *cntr; + int irq_tocheck = irq_base, irq_end_tocheck; - if (irq < 0) { - metal_log(METAL_LOG_ERROR, - "%s: irq %d need to be a positive number\n", - __func__, irq); - return -EINVAL; + if (irq_num == 0) { + return METAL_IRQ_ANY; } - - if ((drv_id == NULL) || (hd == NULL)) { - metal_log(METAL_LOG_ERROR, "%s: irq %d need drv_id and hd.\n", - __func__, irq); - return -EINVAL; + if (irq_tocheck == METAL_IRQ_ANY) { + irq_tocheck = 0; } - - /* Search for irq in list */ - metal_mutex_acquire(&_irqs.irq_lock); - metal_list_for_each(&_irqs.irqs, node) { - irq_p = metal_container_of(node, struct metal_irq_desc, node); - - if (irq_p->irq == irq) { - struct metal_list *h_node; - - /* Check if drv_id already exist */ - metal_list_for_each(&irq_p->hdls, h_node) { - hdl_p = metal_container_of(h_node, - struct metal_irq_hddesc, - node); - - /* if drv_id already exist reject */ - if ((hdl_p->drv_id == drv_id) && - ((dev == NULL) || (hdl_p->dev == dev))) { - metal_log(METAL_LOG_ERROR, - "%s: irq %d already registered." - "Will not register again.\n", - __func__, irq); - metal_mutex_release(&_irqs.irq_lock); - return -EINVAL; - } + irq_end_tocheck = irq_tocheck + irq_num; + + metal_list_for_each(&irq_cntrs, node) { + int cntr_irq_base, cntr_irq_end; + + cntr = metal_container_of(node, + struct metal_irq_controller, node); + cntr_irq_base = cntr->irq_base; + cntr_irq_end = cntr_irq_base + cntr->irq_num; + if (irq_tocheck < cntr_irq_end && + irq_end_tocheck > cntr_irq_base) { + if (irq_base != METAL_IRQ_ANY) { + /* IRQ has been allocated */ + return METAL_IRQ_ANY; } - /* irq found and drv_id not used, get out of metal_list_for_each */ - break; + irq_tocheck = cntr_irq_end; + irq_end_tocheck = irq_tocheck + irq_num; } } - - /* Either need to add handler to an existing list or to a new one */ - hdl_p = metal_allocate_memory(sizeof(struct metal_irq_hddesc)); - if (hdl_p == NULL) { - metal_log(METAL_LOG_ERROR, - "%s: irq %d cannot allocate mem for drv_id %d.\n", - __func__, irq, drv_id); - metal_mutex_release(&_irqs.irq_lock); - return -ENOMEM; - } - hdl_p->hd = hd; - hdl_p->drv_id = drv_id; - hdl_p->dev = dev; - - /* interrupt already registered, add handler to existing list*/ - if ((irq_p != NULL) && (irq_p->irq == irq)) { - irq_flags_save = metal_irq_save_disable(); - metal_list_add_tail(&irq_p->hdls, &hdl_p->node); - metal_irq_restore_enable(irq_flags_save); - - metal_log(METAL_LOG_DEBUG, "%s: success, irq %d add drv_id %p \n", - __func__, irq, drv_id); - metal_mutex_release(&_irqs.irq_lock); - return 0; - } - - /* interrupt was not already registered, add */ - irq_p = metal_allocate_memory(sizeof(struct metal_irq_desc)); - if (irq_p == NULL) { - metal_log(METAL_LOG_ERROR, "%s: irq %d cannot allocate mem.\n", - __func__, irq); - metal_mutex_release(&_irqs.irq_lock); - return -ENOMEM; - } - irq_p->irq = irq; - metal_list_init(&irq_p->hdls); - metal_list_add_tail(&irq_p->hdls, &hdl_p->node); - - irq_flags_save = metal_irq_save_disable(); - metal_list_add_tail(&_irqs.irqs, &irq_p->node); - metal_irq_restore_enable(irq_flags_save); - - metal_log(METAL_LOG_DEBUG, "%s: success, added irq %d\n", __func__, irq); - metal_mutex_release(&_irqs.irq_lock); - return 0; -} - -/* helper function for metal_irq_unregister() */ -static void metal_irq_delete_node(struct metal_list *node, void *p_to_free) -{ - unsigned int irq_flags_save; - - irq_flags_save=metal_irq_save_disable(); - metal_list_del(node); - metal_irq_restore_enable(irq_flags_save); - metal_free_memory(p_to_free); + return irq_tocheck; } -int metal_irq_unregister(int irq, - metal_irq_handler hd, - struct metal_device *dev, - void *drv_id) +int metal_irq_register_controller(struct metal_irq_controller *cntr) { - struct metal_irq_desc *irq_p; + int irq_base; struct metal_list *node; - if (irq < 0) { - metal_log(METAL_LOG_ERROR, "%s: irq %d need to be a positive number\n", - __func__, irq); + if (cntr == NULL) { return -EINVAL; } - - /* Search for irq in list */ - metal_mutex_acquire(&_irqs.irq_lock); - metal_list_for_each(&_irqs.irqs, node) { - - irq_p = metal_container_of(node, struct metal_irq_desc, node); - - if (irq_p->irq == irq) { - struct metal_list *h_node, *h_prenode; - struct metal_irq_hddesc *hdl_p; - unsigned int delete_count = 0; - - metal_log(METAL_LOG_DEBUG, "%s: found irq %d\n", - __func__, irq); - - /* Search through handlers */ - metal_list_for_each(&irq_p->hdls, h_node) { - hdl_p = metal_container_of(h_node, - struct metal_irq_hddesc, - node); - - if (((hd == NULL) || (hdl_p->hd == hd)) && - ((drv_id == NULL) || (hdl_p->drv_id == drv_id)) && - ((dev == NULL) || (hdl_p->dev == dev))) { - metal_log(METAL_LOG_DEBUG, - "%s: unregister hd=%p drv_id=%p dev=%p\n", - __func__, hdl_p->hd, hdl_p->drv_id, hdl_p->dev); - h_prenode = h_node->prev; - metal_irq_delete_node(h_node, hdl_p); - h_node = h_prenode; - delete_count++; - } - } - - /* we did not find any handler to delete */ - if (!delete_count) { - metal_log(METAL_LOG_DEBUG, "%s: No matching entry\n", - __func__); - metal_mutex_release(&_irqs.irq_lock); - return -ENOENT; - - } - - /* if interrupt handlers list is empty, unregister interrupt */ - if (metal_list_is_empty(&irq_p->hdls)) { - metal_log(METAL_LOG_DEBUG, - "%s: handlers list empty, unregister interrupt\n", - __func__); - metal_irq_delete_node(node, irq_p); - } - - metal_log(METAL_LOG_DEBUG, "%s: success\n", __func__); - - metal_mutex_release(&_irqs.irq_lock); + metal_list_for_each(&irq_cntrs, node) { + if (node == &cntr->node) { return 0; } } - metal_log(METAL_LOG_DEBUG, "%s: No matching IRQ entry\n", __func__); + /* + * Allocate IRQ numbers which are not yet used by any IRQ + * controllers. + */ + irq_base = metal_irq_allocate(cntr->irq_base, cntr->irq_num); + if (irq_base == METAL_IRQ_ANY) { + return -EINVAL; + } + cntr->irq_base = irq_base; - metal_mutex_release(&_irqs.irq_lock); - return -ENOENT; + metal_list_add_tail(&irq_cntrs, &cntr->node); + return 0; } -unsigned int metal_irq_save_disable(void) +static struct metal_irq_controller *metal_irq_get_controller(int irq) { - return sys_irq_save_disable(); + struct metal_list *node; + struct metal_irq_controller *cntr; + + metal_list_for_each(&irq_cntrs, node) { + int irq_base, irq_end; + + cntr = (struct metal_irq_controller *) + metal_container_of(node, struct metal_irq_controller, + node); + irq_base = cntr->irq_base; + irq_end = irq_base + cntr->irq_num; + if (irq >= irq_base && irq < irq_end) { + return cntr; + } + } + return NULL; } -void metal_irq_restore_enable(unsigned int flags) +static void _metal_irq_set_enable(int irq, unsigned int state) { - sys_irq_restore_enable(flags); + struct metal_irq_controller *cntr; + + cntr = metal_irq_get_controller(irq); + if (cntr == NULL) { + return; + } + cntr->irq_set_enable(cntr, irq, state); } -void metal_irq_enable(unsigned int vector) +int metal_irq_register(int irq, + metal_irq_handler irq_handler, + void *arg) { - sys_irq_enable(vector); + struct metal_irq_controller *cntr; + struct metal_irq *irq_data; + + cntr = metal_irq_get_controller(irq); + if (cntr == NULL) { + return -EINVAL; + } + if (cntr->irq_register != NULL) { + return cntr->irq_register(cntr, irq, irq_handler, arg); + } + if (cntr->irqs == NULL) { + return -EINVAL; + } + irq_data = &cntr->irqs[irq - cntr->irq_base]; + irq_data->hd = irq_handler; + irq_data->arg = arg; + return 0; } -void metal_irq_disable(unsigned int vector) +void metal_irq_enable(unsigned int vector) { - sys_irq_disable(vector); + _metal_irq_set_enable((int)vector, METAL_IRQ_ENABLE); } -/** - * @brief default handler - */ -void metal_irq_isr(unsigned int vector) +void metal_irq_disable(unsigned int vector) { - struct metal_list *node; - struct metal_irq_desc *irq_p; - - metal_list_for_each(&_irqs.irqs, node) { - irq_p = metal_container_of(node, struct metal_irq_desc, node); - - if ((unsigned int)irq_p->irq == vector) { - struct metal_list *h_node; - struct metal_irq_hddesc *hdl_p; - - metal_list_for_each(&irq_p->hdls, h_node) { - hdl_p = metal_container_of(h_node, - struct metal_irq_hddesc, - node); - - (hdl_p->hd)(vector, hdl_p->drv_id); - } - } - } + _metal_irq_set_enable((int)vector, METAL_IRQ_DISABLE); } diff --git a/libraries/openamp_arduino/src/log.c b/libraries/openamp_arduino/src/log.c index 719fbd82b..22c8b9bd5 100644 --- a/libraries/openamp_arduino/src/log.c +++ b/libraries/openamp_arduino/src/log.c @@ -10,15 +10,13 @@ #include #include -#define DEFAULT_LOGGER_ON - void metal_default_log_handler(enum metal_log_level level, const char *format, ...) { #ifdef DEFAULT_LOGGER_ON char msg[1024]; va_list args; - static const char *level_strs[] = { + static const char * const level_strs[] = { "metal: emergency: ", "metal: alert: ", "metal: critical: ", @@ -36,7 +34,7 @@ void metal_default_log_handler(enum metal_log_level level, if (level <= METAL_LOG_EMERGENCY || level > METAL_LOG_DEBUG) level = METAL_LOG_EMERGENCY; - printf("%s%s", level_strs[level], msg); + fprintf(stderr, "%s%s", level_strs[level], msg); #else (void)level; (void)format; diff --git a/libraries/openamp_arduino/src/mailbox_hsem_if.c b/libraries/openamp_arduino/src/mailbox_hsem_if.c index 04ab7f583..851ca98a5 100644 --- a/libraries/openamp_arduino/src/mailbox_hsem_if.c +++ b/libraries/openamp_arduino/src/mailbox_hsem_if.c @@ -77,14 +77,14 @@ void HAL_HSEM_FreeCallback(uint32_t SemMask) UNUSED(SemMask); msg_received = RX_NEW_MSG; - osSignalSet(eventHandlerThreadId, 0x1); - #ifdef CORE_CM7 HAL_HSEM_ActivateNotification(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_1)); #endif #ifdef CORE_CM4 HAL_HSEM_ActivateNotification(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_0)); #endif + + osSignalSet(eventHandlerThreadId, 0x1); } /** diff --git a/libraries/openamp_arduino/src/metal/alloc.h b/libraries/openamp_arduino/src/metal/alloc.h index b82a09af1..02f860b12 100755 --- a/libraries/openamp_arduino/src/metal/alloc.h +++ b/libraries/openamp_arduino/src/metal/alloc.h @@ -1,46 +1,53 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file alloc.h - * @brief Memory allocation handling primitives for libmetal. - */ - -#ifndef __METAL_ALLOC__H__ -#define __METAL_ALLOC__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup Memory Allocation Interfaces - * @{ */ - -/** - * @brief allocate requested memory size - * return a pointer to the allocated memory - * - * @param[in] size size in byte of requested memory - * @return memory pointer, or 0 if it failed to allocate - */ -static inline void *metal_allocate_memory(unsigned int size); - -/** - * @brief free the memory previously allocated - * - * @param[in] ptr pointer to memory - */ -static inline void metal_free_memory(void *ptr); - -#include - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_ALLOC__H__ */ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file alloc.h + * @brief Memory allocation handling primitives for libmetal. + */ + +#ifndef __METAL_ALLOC__H__ +#define __METAL_ALLOC__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup Memory Allocation Interfaces + * @{ + */ + +/** + * @brief allocate requested memory size + * return a pointer to the allocated memory + * + * @param[in] size size in byte of requested memory + * @return memory pointer, or 0 if it failed to allocate + */ +static inline void *metal_allocate_memory(unsigned int size) +{ + return __metal_allocate_memory(size); +} + +/** + * @brief free the memory previously allocated + * + * @param[in] ptr pointer to memory + */ +static inline void metal_free_memory(void *ptr) +{ + __metal_free_memory(ptr); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ALLOC__H__ */ diff --git a/libraries/openamp_arduino/src/metal/assert.h b/libraries/openamp_arduino/src/metal/assert.h index 8357fdf5b..4476b641a 100755 --- a/libraries/openamp_arduino/src/metal/assert.h +++ b/libraries/openamp_arduino/src/metal/assert.h @@ -1,26 +1,24 @@ -/* - * Copyright (c) 2018, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file assert.h - * @brief Assertion support. - */ - -#ifndef __METAL_ASSERT__H__ -#define __METAL_ASSERT__H__ - -//#include -//#include -#include - -/** - * @brief Assertion macro. - * @param cond Condition to test. - */ -#define metal_assert(cond) metal_sys_assert(cond) - -#endif /* __METAL_ASSERT_H__ */ - +/* + * Copyright (c) 2018, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file assert.h + * @brief Assertion support. + */ + +#ifndef __METAL_ASSERT__H__ +#define __METAL_ASSERT__H__ + +#include + +/** + * @brief Assertion macro. + * @param cond Condition to test. + */ +#define metal_assert(cond) metal_sys_assert(cond) + +#endif /* __METAL_ASSERT_H__ */ + diff --git a/libraries/openamp_arduino/src/metal/atomic.h b/libraries/openamp_arduino/src/metal/atomic.h index 14f771eb8..ce8595dbf 100755 --- a/libraries/openamp_arduino/src/metal/atomic.h +++ b/libraries/openamp_arduino/src/metal/atomic.h @@ -1,32 +1,113 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file atomic.h - * @brief Atomic primitives for libmetal. - */ - -#ifndef __METAL_ATOMIC__H__ -#define __METAL_ATOMIC__H__ - -#include - -#if defined(HAVE_STDATOMIC_H) && !defined (__CC_ARM) && \ - !defined(__STDC_NO_ATOMICS__) && !defined(__cplusplus) - -# include - -#ifndef atomic_thread_fence -#define atomic_thread_fence(order) -#endif - -#elif defined(__GNUC__) -# include -#else -# include -#endif - -#endif /* __METAL_ATOMIC__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file atomic.h + * @brief Atomic primitives for libmetal. + */ + +#ifndef __METAL_ATOMIC__H__ +#define __METAL_ATOMIC__H__ + +#include + +#if defined(__cplusplus) +# include + +/* + * has the same functionality as but all members are only + * accessible in the std namespace. As the rest of libmetal is pure C, it does + * not know about namespaces, even when compiled as part of a C++ file. So we + * just export the members of into the global namespace. + */ +# include +using std::atomic_flag; +using std::memory_order; +using std::memory_order_relaxed; +using std::memory_order_consume; +using std::memory_order_acquire; +using std::memory_order_release; +using std::memory_order_acq_rel; +using std::memory_order_seq_cst; + +using std::atomic_bool; +using std::atomic_char; +using std::atomic_schar; +using std::atomic_uchar; +using std::atomic_short; +using std::atomic_ushort; +using std::atomic_int; +using std::atomic_uint; +using std::atomic_long; +using std::atomic_ulong; +using std::atomic_llong; +using std::atomic_ullong; +using std::atomic_char16_t; +using std::atomic_char32_t; +using std::atomic_wchar_t; +using std::atomic_int_least8_t; +using std::atomic_uint_least8_t; +using std::atomic_int_least16_t; +using std::atomic_uint_least16_t; +using std::atomic_int_least32_t; +using std::atomic_uint_least32_t; +using std::atomic_int_least64_t; +using std::atomic_uint_least64_t; +using std::atomic_int_fast8_t; +using std::atomic_uint_fast8_t; +using std::atomic_int_fast16_t; +using std::atomic_uint_fast16_t; +using std::atomic_int_fast32_t; +using std::atomic_uint_fast32_t; +using std::atomic_int_fast64_t; +using std::atomic_uint_fast64_t; +using std::atomic_intptr_t; +using std::atomic_uintptr_t; +using std::atomic_size_t; +using std::atomic_ptrdiff_t; +using std::atomic_intmax_t; +using std::atomic_uintmax_t; + +using std::atomic_flag_test_and_set; +using std::atomic_flag_test_and_set_explicit; +using std::atomic_flag_clear; +using std::atomic_flag_clear_explicit; +using std::atomic_init; +using std::atomic_is_lock_free; +using std::atomic_store; +using std::atomic_store_explicit; +using std::atomic_load; +using std::atomic_load_explicit; +using std::atomic_exchange; +using std::atomic_exchange_explicit; +using std::atomic_compare_exchange_strong; +using std::atomic_compare_exchange_strong_explicit; +using std::atomic_compare_exchange_weak; +using std::atomic_compare_exchange_weak_explicit; +using std::atomic_fetch_add; +using std::atomic_fetch_add_explicit; +using std::atomic_fetch_sub; +using std::atomic_fetch_sub_explicit; +using std::atomic_fetch_or; +using std::atomic_fetch_or_explicit; +using std::atomic_fetch_xor; +using std::atomic_fetch_xor_explicit; +using std::atomic_fetch_and; +using std::atomic_fetch_and_explicit; +using std::atomic_thread_fence; +using std::atomic_signal_fence; + +#elif defined(HAVE_STDATOMIC_H) && !defined(__CC_ARM) && \ + !defined(__STDC_NO_ATOMICS__) +# include +# include +#elif defined(__GNUC__) +# include +#else +# include +#endif + +#endif /* __METAL_ATOMIC__H__ */ diff --git a/libraries/openamp_arduino/src/metal/cache.h b/libraries/openamp_arduino/src/metal/cache.h index 54a015594..02917b411 100755 --- a/libraries/openamp_arduino/src/metal/cache.h +++ b/libraries/openamp_arduino/src/metal/cache.h @@ -1,57 +1,57 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file cache.h - * @brief CACHE operation primitives for libmetal. - */ - -#ifndef __METAL_CACHE__H__ -#define __METAL_CACHE__H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \defgroup cache CACHE Interfaces - * @{ */ - -/** - * @brief flush specified data cache - * - * @param[in] addr start memory logical address - * @param[in] len length of memory - * If addr is NULL, and len is 0, - * It will flush the whole data cache. - */ -static inline void metal_cache_flush(void *addr, unsigned int len) -{ - __metal_cache_flush(addr, len); -} - -/** - * @brief invalidate specified data cache - * - * @param[in] addr start memory logical address - * @param[in] len length of memory - * If addr is NULL, and len is 0, - * It will invalidate the whole data cache. - */ -static inline void metal_cache_invalidate(void *addr, unsigned int len) -{ - __metal_cache_invalidate(addr, len); -} - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_CACHE__H__ */ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file cache.h + * @brief CACHE operation primitives for libmetal. + */ + +#ifndef __METAL_CACHE__H__ +#define __METAL_CACHE__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup cache CACHE Interfaces + * @{ + */ + +/** + * @brief flush specified data cache + * + * @param[in] addr start memory logical address + * @param[in] len length of memory + * If addr is NULL, and len is 0, + * It will flush the whole data cache. + */ +static inline void metal_cache_flush(void *addr, unsigned int len) +{ + __metal_cache_flush(addr, len); +} + +/** + * @brief invalidate specified data cache + * + * @param[in] addr start memory logical address + * @param[in] len length of memory + * If addr is NULL, and len is 0, + * It will invalidate the whole data cache. + */ +static inline void metal_cache_invalidate(void *addr, unsigned int len) +{ + __metal_cache_invalidate(addr, len); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_CACHE__H__ */ diff --git a/libraries/openamp_arduino/src/metal/compiler.h b/libraries/openamp_arduino/src/metal/compiler.h index ec4c67517..08c20943d 100755 --- a/libraries/openamp_arduino/src/metal/compiler.h +++ b/libraries/openamp_arduino/src/metal/compiler.h @@ -1,25 +1,25 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file compiler.h - * @brief Compiler specific primitives for libmetal. - */ - -#ifndef __METAL_COMPILER__H__ -#define __METAL_COMPILER__H__ - -#if defined(__GNUC__) -# include -#elif defined(__ICCARM__) -# include -#elif defined (__CC_ARM) -# error "MDK-ARM ARMCC compiler requires the GNU extentions to work correctly" -#else -# error "Missing compiler support" -#endif - -#endif /* __METAL_COMPILER__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file compiler.h + * @brief Compiler specific primitives for libmetal. + */ + +#ifndef __METAL_COMPILER__H__ +#define __METAL_COMPILER__H__ + +#if defined(__GNUC__) +# include +#elif defined(__ICCARM__) +# include +#elif defined(__CC_ARM) +# error "MDK-ARM ARMCC compiler requires the GNU extensions to work correctly" +#else +# error "Missing compiler support" +#endif + +#endif /* __METAL_COMPILER__H__ */ diff --git a/libraries/openamp_arduino/src/metal/compiler/gcc/atomic.h b/libraries/openamp_arduino/src/metal/compiler/gcc/atomic.h index 4470342db..7d662992e 100755 --- a/libraries/openamp_arduino/src/metal/compiler/gcc/atomic.h +++ b/libraries/openamp_arduino/src/metal/compiler/gcc/atomic.h @@ -1,123 +1,124 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file gcc/atomic.h - * @brief GCC specific atomic primitives for libmetal. - */ - -#ifndef __METAL_GCC_ATOMIC__H__ -#define __METAL_GCC_ATOMIC__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef int atomic_flag; -typedef char atomic_char; -typedef unsigned char atomic_uchar; -typedef short atomic_short; -typedef unsigned short atomic_ushort; -typedef int atomic_int; -typedef unsigned int atomic_uint; -typedef long atomic_long; -typedef unsigned long atomic_ulong; -typedef long long atomic_llong; -typedef unsigned long long atomic_ullong; - -#define ATOMIC_FLAG_INIT 0 -#define ATOMIC_VAR_INIT(VAL) (VAL) - -typedef enum { - memory_order_relaxed, - memory_order_consume, - memory_order_acquire, - memory_order_release, - memory_order_acq_rel, - memory_order_seq_cst, -} memory_order; - -#define atomic_flag_test_and_set(FLAG) \ - __sync_lock_test_and_set((FLAG), 1) -#define atomic_flag_test_and_set_explicit(FLAG, MO) \ - atomic_flag_test_and_set(FLAG) -#define atomic_flag_clear(FLAG) \ - __sync_lock_release((FLAG)) -#define atomic_flag_clear_explicit(FLAG, MO) \ - atomic_flag_clear(FLAG) -#define atomic_init(OBJ, VAL) \ - do { *(OBJ) = (VAL); } while (0) -#define atomic_is_lock_free(OBJ) \ - (sizeof(*(OBJ)) <= sizeof(long)) -#define atomic_store(OBJ, VAL) \ - do { *(OBJ) = (VAL); __sync_synchronize(); } while (0) -#define atomic_store_explicit(OBJ, VAL, MO) \ - atomic_store((OBJ), (VAL)) -#define atomic_load(OBJ) \ - ({ __sync_synchronize(); *(OBJ); }) -#define atomic_load_explicit(OBJ, MO) \ - atomic_load(OBJ) -#define atomic_exchange(OBJ, DES) \ - ({ \ - typeof(OBJ) obj = (OBJ); \ - typeof(*obj) des = (DES); \ - typeof(*obj) expval; \ - typeof(*obj) oldval = atomic_load(obj); \ - do { \ - expval = oldval; \ - oldval = __sync_val_compare_and_swap( \ - obj, expval, des); \ - } while (oldval != expval); \ - oldval; \ - }) -#define atomic_exchange_explicit(OBJ, DES, MO) \ - atomic_exchange((OBJ), (DES)) -#define atomic_compare_exchange_strong(OBJ, EXP, DES) \ - ({ \ - typeof(OBJ) obj = (OBJ); \ - typeof(EXP) exp = (EXP); \ - typeof(*obj) expval = *exp; \ - typeof(*obj) oldval = __sync_val_compare_and_swap( \ - obj, expval, (DES)); \ - *exp = oldval; \ - oldval == expval; \ - }) -#define atomic_compare_exchange_strong_explicit(OBJ, EXP, DES, MO) \ - atomic_compare_exchange_strong((OBJ), (EXP), (DES)) -#define atomic_compare_exchange_weak(OBJ, EXP, DES) \ - atomic_compare_exchange_strong((OBJ), (EXP), (DES)) -#define atomic_compare_exchange_weak_explicit(OBJ, EXP, DES, MO) \ - atomic_compare_exchange_weak((OBJ), (EXP), (DES)) -#define atomic_fetch_add(OBJ, VAL) \ - __sync_fetch_and_add((OBJ), (VAL)) -#define atomic_fetch_add_explicit(OBJ, VAL, MO) \ - atomic_fetch_add((OBJ), (VAL)) -#define atomic_fetch_sub(OBJ, VAL) \ - __sync_fetch_and_sub((OBJ), (VAL)) -#define atomic_fetch_sub_explicit(OBJ, VAL, MO) \ - atomic_fetch_sub((OBJ), (VAL)) -#define atomic_fetch_or(OBJ, VAL) \ - __sync_fetch_and_or((OBJ), (VAL)) -#define atomic_fetch_or_explicit(OBJ, VAL, MO) \ - atomic_fetch_or((OBJ), (VAL)) -#define atomic_fetch_xor(OBJ, VAL) \ - __sync_fetch_and_xor((OBJ), (VAL)) -#define atomic_fetch_xor_explicit(OBJ, VAL, MO) \ - atomic_fetch_xor((OBJ), (VAL)) -#define atomic_fetch_and(OBJ, VAL) \ - __sync_fetch_and_and((OBJ), (VAL)) -#define atomic_fetch_and_explicit(OBJ, VAL, MO) \ - atomic_fetch_and((OBJ), (VAL)) -#define atomic_thread_fence(MO) \ - __sync_synchronize() -#define atomic_signal_fence(MO) \ - __sync_synchronize() - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_GCC_ATOMIC__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file gcc/atomic.h + * @brief GCC specific atomic primitives for libmetal. + */ + +#ifndef __METAL_GCC_ATOMIC__H__ +#define __METAL_GCC_ATOMIC__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int atomic_flag; +typedef char atomic_char; +typedef unsigned char atomic_uchar; +typedef short atomic_short; +typedef unsigned short atomic_ushort; +typedef int atomic_int; +typedef unsigned int atomic_uint; +typedef atomic_uint atomic_uintptr_t; +typedef long atomic_long; +typedef unsigned long atomic_ulong; +typedef long long atomic_llong; +typedef unsigned long long atomic_ullong; + +#define ATOMIC_FLAG_INIT 0 +#define ATOMIC_VAR_INIT(VAL) (VAL) + +typedef enum { + memory_order_relaxed, + memory_order_consume, + memory_order_acquire, + memory_order_release, + memory_order_acq_rel, + memory_order_seq_cst, +} memory_order; + +#define atomic_flag_test_and_set(FLAG) \ + __sync_lock_test_and_set((FLAG), 1) +#define atomic_flag_test_and_set_explicit(FLAG, MO) \ + atomic_flag_test_and_set(FLAG) +#define atomic_flag_clear(FLAG) \ + __sync_lock_release((FLAG)) +#define atomic_flag_clear_explicit(FLAG, MO) \ + atomic_flag_clear(FLAG) +#define atomic_init(OBJ, VAL) \ + do { *(OBJ) = (VAL); } while (0) +#define atomic_is_lock_free(OBJ) \ + (sizeof(*(OBJ)) <= sizeof(long)) +#define atomic_store(OBJ, VAL) \ + do { *(OBJ) = (VAL); __sync_synchronize(); } while (0) +#define atomic_store_explicit(OBJ, VAL, MO) \ + atomic_store((OBJ), (VAL)) +#define atomic_load(OBJ) \ + ({ __sync_synchronize(); *(OBJ); }) +#define atomic_load_explicit(OBJ, MO) \ + atomic_load(OBJ) +#define atomic_exchange(OBJ, DES) \ + ({ \ + __typeof__(OBJ) obj = (OBJ); \ + __typeof__(*obj) des = (DES); \ + __typeof__(*obj) expval; \ + __typeof__(*obj) oldval = atomic_load(obj); \ + do { \ + expval = oldval; \ + oldval = __sync_val_compare_and_swap( \ + obj, expval, des); \ + } while (oldval != expval); \ + oldval; \ + }) +#define atomic_exchange_explicit(OBJ, DES, MO) \ + atomic_exchange((OBJ), (DES)) +#define atomic_compare_exchange_strong(OBJ, EXP, DES) \ + ({ \ + __typeof__(OBJ) obj = (OBJ); \ + __typeof__(EXP) exp = (EXP); \ + __typeof__(*obj) expval = *exp; \ + __typeof__(*obj) oldval = __sync_val_compare_and_swap( \ + obj, expval, (DES)); \ + *exp = oldval; \ + oldval == expval; \ + }) +#define atomic_compare_exchange_strong_explicit(OBJ, EXP, DES, MO) \ + atomic_compare_exchange_strong((OBJ), (EXP), (DES)) +#define atomic_compare_exchange_weak(OBJ, EXP, DES) \ + atomic_compare_exchange_strong((OBJ), (EXP), (DES)) +#define atomic_compare_exchange_weak_explicit(OBJ, EXP, DES, MO) \ + atomic_compare_exchange_weak((OBJ), (EXP), (DES)) +#define atomic_fetch_add(OBJ, VAL) \ + __sync_fetch_and_add((OBJ), (VAL)) +#define atomic_fetch_add_explicit(OBJ, VAL, MO) \ + atomic_fetch_add((OBJ), (VAL)) +#define atomic_fetch_sub(OBJ, VAL) \ + __sync_fetch_and_sub((OBJ), (VAL)) +#define atomic_fetch_sub_explicit(OBJ, VAL, MO) \ + atomic_fetch_sub((OBJ), (VAL)) +#define atomic_fetch_or(OBJ, VAL) \ + __sync_fetch_and_or((OBJ), (VAL)) +#define atomic_fetch_or_explicit(OBJ, VAL, MO) \ + atomic_fetch_or((OBJ), (VAL)) +#define atomic_fetch_xor(OBJ, VAL) \ + __sync_fetch_and_xor((OBJ), (VAL)) +#define atomic_fetch_xor_explicit(OBJ, VAL, MO) \ + atomic_fetch_xor((OBJ), (VAL)) +#define atomic_fetch_and(OBJ, VAL) \ + __sync_fetch_and_and((OBJ), (VAL)) +#define atomic_fetch_and_explicit(OBJ, VAL, MO) \ + atomic_fetch_and((OBJ), (VAL)) +#define atomic_thread_fence(MO) \ + __sync_synchronize() +#define atomic_signal_fence(MO) \ + __sync_synchronize() + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_GCC_ATOMIC__H__ */ diff --git a/libraries/openamp_arduino/src/metal/compiler/gcc/compiler.h b/libraries/openamp_arduino/src/metal/compiler/gcc/compiler.h index 7295ca899..e4d1bc9b1 100755 --- a/libraries/openamp_arduino/src/metal/compiler/gcc/compiler.h +++ b/libraries/openamp_arduino/src/metal/compiler/gcc/compiler.h @@ -1,27 +1,45 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file gcc/compiler.h - * @brief GCC specific primitives for libmetal. - */ - -#ifndef __METAL_GCC_COMPILER__H__ -#define __METAL_GCC_COMPILER__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define restrict __restrict__ -#define metal_align(n) __attribute__((aligned(n))) -#define metal_weak __attribute__((weak)) - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_GCC_COMPILER__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file gcc/compiler.h + * @brief GCC specific primitives for libmetal. + */ + +#ifndef __METAL_GCC_COMPILER__H__ +#define __METAL_GCC_COMPILER__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define restrict __restrict__ +#define metal_align(n) __attribute__((aligned(n))) +#define metal_weak __attribute__((weak)) + +#if defined(__STRICT_ANSI__) +#define metal_asm __asm__ +#else +/* + * Even though __asm__ is always available in mainline GCC, we use asm in + * the non-strict modes for compatibility with other compilers that define + * __GNUC__ + */ +#define metal_asm asm +#endif + +#define METAL_PACKED_BEGIN +#define METAL_PACKED_END __attribute__((__packed__)) + +#ifndef __deprecated +#define __deprecated __attribute__((deprecated)) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_GCC_COMPILER__H__ */ diff --git a/libraries/openamp_arduino/src/metal/condition.h b/libraries/openamp_arduino/src/metal/condition.h index 953293680..b5c7b2dbe 100755 --- a/libraries/openamp_arduino/src/metal/condition.h +++ b/libraries/openamp_arduino/src/metal/condition.h @@ -1,73 +1,74 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file condition.h - * @brief Condition variable for libmetal. - */ - -#ifndef __METAL_CONDITION__H__ -#define __METAL_CONDITION__H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup condition Condition Variable Interfaces - * @{ */ - -/** Opaque libmetal condition variable data structure. */ -struct metal_condition; - -/** - * @brief Initialize a libmetal condition variable. - * @param[in] cv condition variable to initialize. - */ -static inline void metal_condition_init(struct metal_condition *cv); - -/** - * @brief Notify one waiter. - * Before calling this function, the caller - * should have acquired the mutex. - * @param[in] cv condition variable - * @return zero on no errors, non-zero on errors - * @see metal_condition_wait, metal_condition_broadcast - */ -static inline int metal_condition_signal(struct metal_condition *cv); - -/** - * @brief Notify all waiters. - * Before calling this function, the caller - * should have acquired the mutex. - * @param[in] cv condition variable - * @return zero on no errors, non-zero on errors - * @see metal_condition_wait, metal_condition_signal - */ -static inline int metal_condition_broadcast(struct metal_condition *cv); - -/** - * @brief Block until the condition variable is notified. - * Before calling this function, the caller should - * have acquired the mutex. - * @param[in] cv condition variable - * @param[in] m mutex - * @return 0 on success, non-zero on failure. - * @see metal_condition_signal - */ -int metal_condition_wait(struct metal_condition *cv, metal_mutex_t *m); - -#include - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_CONDITION__H__ */ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file condition.h + * @brief Condition variable for libmetal. + */ + +#ifndef __METAL_CONDITION__H__ +#define __METAL_CONDITION__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup condition Condition Variable Interfaces + * @{ + */ + +/** Opaque libmetal condition variable data structure. */ +struct metal_condition; + +/** + * @brief Initialize a libmetal condition variable. + * @param[in] cv condition variable to initialize. + */ +static inline void metal_condition_init(struct metal_condition *cv); + +/** + * @brief Notify one waiter. + * Before calling this function, the caller + * should have acquired the mutex. + * @param[in] cv condition variable + * @return zero on no errors, non-zero on errors + * @see metal_condition_wait, metal_condition_broadcast + */ +static inline int metal_condition_signal(struct metal_condition *cv); + +/** + * @brief Notify all waiters. + * Before calling this function, the caller + * should have acquired the mutex. + * @param[in] cv condition variable + * @return zero on no errors, non-zero on errors + * @see metal_condition_wait, metal_condition_signal + */ +static inline int metal_condition_broadcast(struct metal_condition *cv); + +/** + * @brief Block until the condition variable is notified. + * Before calling this function, the caller should + * have acquired the mutex. + * @param[in] cv condition variable + * @param[in] m mutex + * @return 0 on success, non-zero on failure. + * @see metal_condition_signal + */ +int metal_condition_wait(struct metal_condition *cv, metal_mutex_t *m); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#include + +#endif /* __METAL_CONDITION__H__ */ diff --git a/libraries/openamp_arduino/src/metal/config.h b/libraries/openamp_arduino/src/metal/config.h index ce08057fc..3de906067 100755 --- a/libraries/openamp_arduino/src/metal/config.h +++ b/libraries/openamp_arduino/src/metal/config.h @@ -20,13 +20,13 @@ extern "C" { #define METAL_VER_MAJOR 0 /** Library minor version number. */ -#define METAL_VER_MINOR 1 +#define METAL_VER_MINOR 5 /** Library patch level. */ #define METAL_VER_PATCH 0 /** Library version string. */ -#define METAL_VER "0.1.0" +#define METAL_VER "0.5.0" /** System type (linux, generic, ...). */ #define METAL_SYSTEM "generic" diff --git a/libraries/openamp_arduino/src/metal/cpu.h b/libraries/openamp_arduino/src/metal/cpu.h index 5537afba4..26dbaa2af 100755 --- a/libraries/openamp_arduino/src/metal/cpu.h +++ b/libraries/openamp_arduino/src/metal/cpu.h @@ -1,17 +1,17 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file cpu.h - * @brief CPU primitives for libmetal. - */ - -#ifndef __METAL_CPU__H__ -#define __METAL_CPU__H__ - -# include - -#endif /* __METAL_CPU__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file cpu.h + * @brief CPU primitives for libmetal. + */ + +#ifndef __METAL_CPU__H__ +#define __METAL_CPU__H__ + +# include + +#endif /* __METAL_CPU__H__ */ diff --git a/libraries/openamp_arduino/src/metal/device.h b/libraries/openamp_arduino/src/metal/device.h index c78b50dd1..fab1c147d 100755 --- a/libraries/openamp_arduino/src/metal/device.h +++ b/libraries/openamp_arduino/src/metal/device.h @@ -1,176 +1,177 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file device.h - * @brief Bus abstraction for libmetal. - */ - -#ifndef __METAL_BUS__H__ -#define __METAL_BUS__H__ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup device Bus Abstraction - * @{ */ - -#ifndef METAL_MAX_DEVICE_REGIONS -#define METAL_MAX_DEVICE_REGIONS 32 -#endif - -struct metal_bus; -struct metal_device; - -/** Bus operations. */ -struct metal_bus_ops { - void (*bus_close)(struct metal_bus *bus); - int (*dev_open)(struct metal_bus *bus, - const char *dev_name, - struct metal_device **device); - void (*dev_close)(struct metal_bus *bus, - struct metal_device *device); - void (*dev_irq_ack)(struct metal_bus *bus, - struct metal_device *device, - int irq); - int (*dev_dma_map)(struct metal_bus *bus, - struct metal_device *device, - uint32_t dir, - struct metal_sg *sg_in, - int nents_in, - struct metal_sg *sg_out); - void (*dev_dma_unmap)(struct metal_bus *bus, - struct metal_device *device, - uint32_t dir, - struct metal_sg *sg, - int nents); -}; - -/** Libmetal bus structure. */ -struct metal_bus { - const char *name; - struct metal_bus_ops ops; - struct metal_list devices; - struct metal_list node; -}; - -/** Libmetal generic bus. */ -extern struct metal_bus metal_generic_bus; - -/** Libmetal device structure. */ -struct metal_device { - const char *name; /**< Device name */ - struct metal_bus *bus; /**< Bus that contains device */ - unsigned num_regions; /**< Number of I/O regions in - device */ - struct metal_io_region regions[METAL_MAX_DEVICE_REGIONS]; /**< Array of - I/O regions in device*/ - struct metal_list node; /**< Node on bus' list of devices */ - int irq_num; /**< Number of IRQs per device */ - void *irq_info; /**< IRQ ID */ -}; - -/** - * @brief Register a libmetal bus. - * @param[in] bus Pre-initialized bus structure. - * @return 0 on success, or -errno on failure. - */ -extern int metal_bus_register(struct metal_bus *bus); - -/** - * @brief Unregister a libmetal bus. - * @param[in] bus Pre-registered bus structure. - * @return 0 on success, or -errno on failure. - */ -extern int metal_bus_unregister(struct metal_bus *bus); - -/** - * @brief Find a libmetal bus by name. - * @param[in] name Bus name. - * @param[out] bus Returned bus handle. - * @return 0 on success, or -errno on failure. - */ -extern int metal_bus_find(const char *name, struct metal_bus **bus); - -/** - * @brief Statically register a generic libmetal device. - * - * In non-Linux systems, devices are always required to be statically - * registered at application initialization. - * In Linux system, devices can be dynamically opened via sysfs or libfdt based - * enumeration at runtime. - * This interface is used for static registration of devices. Subsequent calls - * to metal_device_open() look up in this list of pre-registered devices on the - * "generic" bus. - * "generic" bus is used on non-Linux system to group the memory mapped devices. - * - * @param[in] device Generic device. - * @return 0 on success, or -errno on failure. - */ -extern int metal_register_generic_device(struct metal_device *device); - -/** - * @brief Open a libmetal device by name. - * @param[in] bus_name Bus name. - * @param[in] dev_name Device name. - * @param[out] device Returned device handle. - * @return 0 on success, or -errno on failure. - */ -extern int metal_device_open(const char *bus_name, const char *dev_name, - struct metal_device **device); - -/** - * @brief Close a libmetal device. - * @param[in] device Device handle. - */ -extern void metal_device_close(struct metal_device *device); - -/** - * @brief Get an I/O region accessor for a device region. - * - * @param[in] device Device handle. - * @param[in] index Region index. - * @return I/O accessor handle, or NULL on failure. - */ -static inline struct metal_io_region * -metal_device_io_region(struct metal_device *device, unsigned index) -{ - return (index < device->num_regions - ? &device->regions[index] - : NULL); -} - -/** @} */ - -#ifdef METAL_INTERNAL -extern int metal_generic_dev_sys_open(struct metal_device *dev); -extern int metal_generic_dev_open(struct metal_bus *bus, const char *dev_name, - struct metal_device **device); -extern int metal_generic_dev_dma_map(struct metal_bus *bus, - struct metal_device *device, - uint32_t dir, - struct metal_sg *sg_in, - int nents_in, - struct metal_sg *sg_out); -extern void metal_generic_dev_dma_unmap(struct metal_bus *bus, - struct metal_device *device, - uint32_t dir, - struct metal_sg *sg, - int nents); -#endif /* METAL_INTERNAL */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_BUS__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file device.h + * @brief Bus abstraction for libmetal. + */ + +#ifndef __METAL_BUS__H__ +#define __METAL_BUS__H__ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup device Bus Abstraction + * @{ + */ + +#ifndef METAL_MAX_DEVICE_REGIONS +#define METAL_MAX_DEVICE_REGIONS 32 +#endif + +struct metal_bus; +struct metal_device; + +/** Bus operations. */ +struct metal_bus_ops { + void (*bus_close)(struct metal_bus *bus); + int (*dev_open)(struct metal_bus *bus, + const char *dev_name, + struct metal_device **device); + void (*dev_close)(struct metal_bus *bus, + struct metal_device *device); + void (*dev_irq_ack)(struct metal_bus *bus, + struct metal_device *device, + int irq); + int (*dev_dma_map)(struct metal_bus *bus, + struct metal_device *device, + uint32_t dir, + struct metal_sg *sg_in, + int nents_in, + struct metal_sg *sg_out); + void (*dev_dma_unmap)(struct metal_bus *bus, + struct metal_device *device, + uint32_t dir, + struct metal_sg *sg, + int nents); +}; + +/** Libmetal bus structure. */ +struct metal_bus { + const char *name; + struct metal_bus_ops ops; + struct metal_list devices; + struct metal_list node; +}; + +/** Libmetal generic bus. */ +extern struct metal_bus metal_generic_bus; + +/** Libmetal device structure. */ +struct metal_device { + const char *name; /**< Device name */ + struct metal_bus *bus; /**< Bus that contains device */ + unsigned int num_regions; /**< Number of I/O regions in + device */ + struct metal_io_region regions[METAL_MAX_DEVICE_REGIONS]; /**< Array of + I/O regions in device*/ + struct metal_list node; /**< Node on bus' list of devices */ + int irq_num; /**< Number of IRQs per device */ + void *irq_info; /**< IRQ ID */ +}; + +/** + * @brief Register a libmetal bus. + * @param[in] bus Pre-initialized bus structure. + * @return 0 on success, or -errno on failure. + */ +extern int metal_bus_register(struct metal_bus *bus); + +/** + * @brief Unregister a libmetal bus. + * @param[in] bus Pre-registered bus structure. + * @return 0 on success, or -errno on failure. + */ +extern int metal_bus_unregister(struct metal_bus *bus); + +/** + * @brief Find a libmetal bus by name. + * @param[in] name Bus name. + * @param[out] bus Returned bus handle. + * @return 0 on success, or -errno on failure. + */ +extern int metal_bus_find(const char *name, struct metal_bus **bus); + +/** + * @brief Statically register a generic libmetal device. + * + * In non-Linux systems, devices are always required to be statically + * registered at application initialization. + * In Linux system, devices can be dynamically opened via sysfs or libfdt based + * enumeration at runtime. + * This interface is used for static registration of devices. Subsequent calls + * to metal_device_open() look up in this list of pre-registered devices on the + * "generic" bus. + * "generic" bus is used on non-Linux system to group the memory mapped devices. + * + * @param[in] device Generic device. + * @return 0 on success, or -errno on failure. + */ +extern int metal_register_generic_device(struct metal_device *device); + +/** + * @brief Open a libmetal device by name. + * @param[in] bus_name Bus name. + * @param[in] dev_name Device name. + * @param[out] device Returned device handle. + * @return 0 on success, or -errno on failure. + */ +extern int metal_device_open(const char *bus_name, const char *dev_name, + struct metal_device **device); + +/** + * @brief Close a libmetal device. + * @param[in] device Device handle. + */ +extern void metal_device_close(struct metal_device *device); + +/** + * @brief Get an I/O region accessor for a device region. + * + * @param[in] device Device handle. + * @param[in] index Region index. + * @return I/O accessor handle, or NULL on failure. + */ +static inline struct metal_io_region * +metal_device_io_region(struct metal_device *device, unsigned int index) +{ + return (index < device->num_regions + ? &device->regions[index] + : NULL); +} + +/** @} */ + +#ifdef METAL_INTERNAL +extern int metal_generic_dev_sys_open(struct metal_device *dev); +extern int metal_generic_dev_open(struct metal_bus *bus, const char *dev_name, + struct metal_device **device); +extern int metal_generic_dev_dma_map(struct metal_bus *bus, + struct metal_device *device, + uint32_t dir, + struct metal_sg *sg_in, + int nents_in, + struct metal_sg *sg_out); +extern void metal_generic_dev_dma_unmap(struct metal_bus *bus, + struct metal_device *device, + uint32_t dir, + struct metal_sg *sg, + int nents); +#endif /* METAL_INTERNAL */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_BUS__H__ */ diff --git a/libraries/openamp_arduino/src/metal/dma.h b/libraries/openamp_arduino/src/metal/dma.h index 1c8e8b11c..9bb7e54c8 100755 --- a/libraries/openamp_arduino/src/metal/dma.h +++ b/libraries/openamp_arduino/src/metal/dma.h @@ -1,79 +1,80 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file dma.h - * @brief DMA primitives for libmetal. - */ - -#ifndef __METAL_DMA__H__ -#define __METAL_DMA__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup dma DMA Interfaces - * @{ */ - -#include -#include - -#define METAL_DMA_DEV_R 1 /**< DMA direction, device read */ -#define METAL_DMA_DEV_W 2 /**< DMA direction, device write */ -#define METAL_DMA_DEV_WR 3 /**< DMA direction, device read/write */ - -/** - * @brief scatter/gather list element structure - */ -struct metal_sg { - void *virt; /**< CPU virtual address */ - struct metal_io_region *io; /**< IO region */ - int len; /**< length */ -}; - -struct metal_device; - -/** - * @brief Map memory for DMA transaction. - * After the memory is DMA mapped, the memory should be - * accessed by the DMA device but not the CPU. - * - * @param[in] dev DMA device - * @param[in] dir DMA direction - * @param[in] sg_in sg list of memory to map - * @param[in] nents_in number of sg list entries of memory to map - * @param[out] sg_out sg list of mapped memory - * @return number of mapped sg entries, -error on failure. - */ -int metal_dma_map(struct metal_device *dev, - uint32_t dir, - struct metal_sg *sg_in, - int nents_in, - struct metal_sg *sg_out); - -/** - * @brief Unmap DMA memory - * After the memory is DMA unmapped, the memory should - * be accessed by the CPU but not the DMA device. - * - * @param[in] dev DMA device - * @param[in] dir DMA direction - * @param[in] sg sg list of mapped DMA memory - * @param[in] nents number of sg list entries of DMA memory - */ -void metal_dma_unmap(struct metal_device *dev, - uint32_t dir, - struct metal_sg *sg, - int nents); - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_DMA__H__ */ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file dma.h + * @brief DMA primitives for libmetal. + */ + +#ifndef __METAL_DMA__H__ +#define __METAL_DMA__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup dma DMA Interfaces + * @{ + */ + +#define METAL_DMA_DEV_R 1 /**< DMA direction, device read */ +#define METAL_DMA_DEV_W 2 /**< DMA direction, device write */ +#define METAL_DMA_DEV_WR 3 /**< DMA direction, device read/write */ + +/** + * @brief scatter/gather list element structure + */ +struct metal_sg { + void *virt; /**< CPU virtual address */ + struct metal_io_region *io; /**< IO region */ + int len; /**< length */ +}; + +struct metal_device; + +/** + * @brief Map memory for DMA transaction. + * After the memory is DMA mapped, the memory should be + * accessed by the DMA device but not the CPU. + * + * @param[in] dev DMA device + * @param[in] dir DMA direction + * @param[in] sg_in sg list of memory to map + * @param[in] nents_in number of sg list entries of memory to map + * @param[out] sg_out sg list of mapped memory + * @return number of mapped sg entries, -error on failure. + */ +int metal_dma_map(struct metal_device *dev, + uint32_t dir, + struct metal_sg *sg_in, + int nents_in, + struct metal_sg *sg_out); + +/** + * @brief Unmap DMA memory + * After the memory is DMA unmapped, the memory should + * be accessed by the CPU but not the DMA device. + * + * @param[in] dev DMA device + * @param[in] dir DMA direction + * @param[in] sg sg list of mapped DMA memory + * @param[in] nents number of sg list entries of DMA memory + */ +void metal_dma_unmap(struct metal_device *dev, + uint32_t dir, + struct metal_sg *sg, + int nents); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_DMA__H__ */ diff --git a/libraries/openamp_arduino/src/metal/errno.h b/libraries/openamp_arduino/src/metal/errno.h index 2f200e8b7..e84a2bc7d 100755 --- a/libraries/openamp_arduino/src/metal/errno.h +++ b/libraries/openamp_arduino/src/metal/errno.h @@ -1,24 +1,23 @@ -/* - * * Copyright (c) 2019 STMicrolectonics , Xilinx Inc. and Contributors. All rights reserved. - * * - * * SPDX-License-Identifier: BSD-3-Clause - * */ - -/* - * * @file metal/errno.h - * * @brief error specific primitives for libmetal. - * */ - -#ifndef __METAL_ERRNO__H__ -#define __METAL_ERRNO__H__ - -#if defined (__CC_ARM) -# include -#elif defined (__ICCARM__) -# include -#else -#include -#endif - -#endif /* __METAL_ERRNO__H__ */ - +/* + * Copyright (c) 2020 STMicroelectronnics. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file metal/errno.h + * @brief error specific primitives for libmetal. + */ + +#ifndef __METAL_ERRNO__H__ +#define __METAL_ERRNO__H__ + +#if defined(__ICCARM__) +# include +#elif defined(__CC_ARM) +# include +#else +# include +#endif + +#endif /* __METAL_ERRNO__H__ */ diff --git a/libraries/openamp_arduino/src/metal/io.h b/libraries/openamp_arduino/src/metal/io.h index 95512d826..e534d1765 100755 --- a/libraries/openamp_arduino/src/metal/io.h +++ b/libraries/openamp_arduino/src/metal/io.h @@ -1,354 +1,374 @@ -/* - * Copyright (c) 2015 - 2017, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file io.h - * @brief I/O access primitives for libmetal. - */ - -#ifndef __METAL_IO__H__ -#define __METAL_IO__H__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup io IO Interfaces - * @{ */ - -#ifdef __MICROBLAZE__ -#define NO_ATOMIC_64_SUPPORT -#endif - -struct metal_io_region; - -/** Generic I/O operations. */ -struct metal_io_ops { - uint64_t (*read)(struct metal_io_region *io, - unsigned long offset, - memory_order order, - int width); - void (*write)(struct metal_io_region *io, - unsigned long offset, - uint64_t value, - memory_order order, - int width); - int (*block_read)(struct metal_io_region *io, - unsigned long offset, - void *restrict dst, - memory_order order, - int len); - int (*block_write)(struct metal_io_region *io, - unsigned long offset, - const void *restrict src, - memory_order order, - int len); - void (*block_set)(struct metal_io_region *io, - unsigned long offset, - unsigned char value, - memory_order order, - int len); - void (*close)(struct metal_io_region *io); -}; - -/** Libmetal I/O region structure. */ -struct metal_io_region { - void *virt; /**< base virtual address */ - const metal_phys_addr_t *physmap; /**< table of base physical address - of each of the pages in the I/O - region */ - size_t size; /**< size of the I/O region */ - unsigned long page_shift; /**< page shift of I/O region */ - metal_phys_addr_t page_mask; /**< page mask of I/O region */ - unsigned int mem_flags; /**< memory attribute of the - I/O region */ - struct metal_io_ops ops; /**< I/O region operations */ -}; - -/** - * @brief Open a libmetal I/O region. - * - * @param[in, out] io I/O region handle. - * @param[in] virt Virtual address of region. - * @param[in] physmap Array of physical addresses per page. - * @param[in] size Size of region. - * @param[in] page_shift Log2 of page size (-1 for single page). - * @param[in] mem_flags Memory flags - * @param[in] ops ops - */ -void -metal_io_init(struct metal_io_region *io, void *virt, - const metal_phys_addr_t *physmap, size_t size, - unsigned page_shift, unsigned int mem_flags, - const struct metal_io_ops *ops); - -/** - * @brief Close a libmetal shared memory segment. - * @param[in] io I/O region handle. - */ -static inline void metal_io_finish(struct metal_io_region *io) -{ - if (io->ops.close) - (*io->ops.close)(io); - memset(io, 0, sizeof(*io)); -} - -/** - * @brief Get size of I/O region. - * - * @param[in] io I/O region handle. - * @return Size of I/O region. - */ -static inline size_t metal_io_region_size(struct metal_io_region *io) -{ - return io->size; -} - -/** - * @brief Get virtual address for a given offset into the I/O region. - * @param[in] io I/O region handle. - * @param[in] offset Offset into shared memory segment. - * @return NULL if offset is out of range, or pointer to offset. - */ -static inline void * -metal_io_virt(struct metal_io_region *io, unsigned long offset) -{ - return (io->virt != METAL_BAD_VA && offset <= io->size - ? (uint8_t *)io->virt + offset - : NULL); -} - -/** - * @brief Convert a virtual address to offset within I/O region. - * @param[in] io I/O region handle. - * @param[in] virt Virtual address within segment. - * @return METAL_BAD_OFFSET if out of range, or offset. - */ -static inline unsigned long -metal_io_virt_to_offset(struct metal_io_region *io, void *virt) -{ - size_t offset = (uint8_t *)virt - (uint8_t *)io->virt; - return (offset < io->size ? offset : METAL_BAD_OFFSET); -} - -/** - * @brief Get physical address for a given offset into the I/O region. - * @param[in] io I/O region handle. - * @param[in] offset Offset into shared memory segment. - * @return METAL_BAD_PHYS if offset is out of range, or physical address - * of offset. - */ -static inline metal_phys_addr_t -metal_io_phys(struct metal_io_region *io, unsigned long offset) -{ - unsigned long page = (io->page_shift >= - sizeof(offset) * CHAR_BIT ? - 0 : offset >> io->page_shift); - return (io->physmap != NULL && offset <= io->size - ? io->physmap[page] + (offset & io->page_mask) - : METAL_BAD_PHYS); -} - -/** - * @brief Convert a physical address to offset within I/O region. - * @param[in] io I/O region handle. - * @param[in] phys Physical address within segment. - * @return METAL_BAD_OFFSET if out of range, or offset. - */ -static inline unsigned long -metal_io_phys_to_offset(struct metal_io_region *io, metal_phys_addr_t phys) -{ - unsigned long offset = - (io->page_mask == (metal_phys_addr_t)(-1) ? - phys - io->physmap[0] : phys & io->page_mask); - do { - if (metal_io_phys(io, offset) == phys) - return offset; - offset += io->page_mask + 1; - } while (offset < io->size); - return METAL_BAD_OFFSET; -} - -/** - * @brief Convert a physical address to virtual address. - * @param[in] io Shared memory segment handle. - * @param[in] phys Physical address within segment. - * @return NULL if out of range, or corresponding virtual address. - */ -static inline void * -metal_io_phys_to_virt(struct metal_io_region *io, metal_phys_addr_t phys) -{ - return metal_io_virt(io, metal_io_phys_to_offset(io, phys)); -} - -/** - * @brief Convert a virtual address to physical address. - * @param[in] io Shared memory segment handle. - * @param[in] virt Virtual address within segment. - * @return METAL_BAD_PHYS if out of range, or corresponding - * physical address. - */ -static inline metal_phys_addr_t -metal_io_virt_to_phys(struct metal_io_region *io, void *virt) -{ - return metal_io_phys(io, metal_io_virt_to_offset(io, virt)); -} - -/** - * @brief Read a value from an I/O region. - * @param[in] io I/O region handle. - * @param[in] offset Offset into I/O region. - * @param[in] order Memory ordering. - * @param[in] width Width in bytes of datatype to read. This must be 1, 2, - * 4, or 8, and a compile time constant for this function - * to inline cleanly. - * @return Value. - */ -static inline uint64_t -metal_io_read(struct metal_io_region *io, unsigned long offset, - memory_order order, int width) -{ - void *ptr = metal_io_virt(io, offset); - - if (io->ops.read) - return (*io->ops.read)(io, offset, order, width); - else if (ptr && sizeof(atomic_uchar) == width) - return atomic_load_explicit((atomic_uchar *)ptr, order); - else if (ptr && sizeof(atomic_ushort) == width) - return atomic_load_explicit((atomic_ushort *)ptr, order); - else if (ptr && sizeof(atomic_uint) == width) - return atomic_load_explicit((atomic_uint *)ptr, order); - else if (ptr && sizeof(atomic_ulong) == width) - return atomic_load_explicit((atomic_ulong *)ptr, order); -#ifndef NO_ATOMIC_64_SUPPORT - else if (ptr && sizeof(atomic_ullong) == width) - return atomic_load_explicit((atomic_ullong *)ptr, order); -#endif - metal_assert(0); - return 0; /* quiet compiler */ -} - -/** - * @brief Write a value into an I/O region. - * @param[in] io I/O region handle. - * @param[in] offset Offset into I/O region. - * @param[in] value Value to write. - * @param[in] order Memory ordering. - * @param[in] width Width in bytes of datatype to read. This must be 1, 2, - * 4, or 8, and a compile time constant for this function - * to inline cleanly. - */ -static inline void -metal_io_write(struct metal_io_region *io, unsigned long offset, - uint64_t value, memory_order order, int width) -{ - void *ptr = metal_io_virt(io, offset); - if (io->ops.write) - (*io->ops.write)(io, offset, value, order, width); - else if (ptr && sizeof(atomic_uchar) == width) - atomic_store_explicit((atomic_uchar *)ptr, value, order); - else if (ptr && sizeof(atomic_ushort) == width) - atomic_store_explicit((atomic_ushort *)ptr, value, order); - else if (ptr && sizeof(atomic_uint) == width) - atomic_store_explicit((atomic_uint *)ptr, value, order); - else if (ptr && sizeof(atomic_ulong) == width) - atomic_store_explicit((atomic_ulong *)ptr, value, order); -#ifndef NO_ATOMIC_64_SUPPORT - else if (ptr && sizeof(atomic_ullong) == width) - atomic_store_explicit((atomic_ullong *)ptr, value, order); -#endif - else - metal_assert (0); -} - -#define metal_io_read8_explicit(_io, _ofs, _order) \ - metal_io_read((_io), (_ofs), (_order), 1) -#define metal_io_read8(_io, _ofs) \ - metal_io_read((_io), (_ofs), memory_order_seq_cst, 1) -#define metal_io_write8_explicit(_io, _ofs, _val, _order) \ - metal_io_write((_io), (_ofs), (_val), (_order), 1) -#define metal_io_write8(_io, _ofs, _val) \ - metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 1) - -#define metal_io_read16_explicit(_io, _ofs, _order) \ - metal_io_read((_io), (_ofs), (_order), 2) -#define metal_io_read16(_io, _ofs) \ - metal_io_read((_io), (_ofs), memory_order_seq_cst, 2) -#define metal_io_write16_explicit(_io, _ofs, _val, _order) \ - metal_io_write((_io), (_ofs), (_val), (_order), 2) -#define metal_io_write16(_io, _ofs, _val) \ - metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 2) - -#define metal_io_read32_explicit(_io, _ofs, _order) \ - metal_io_read((_io), (_ofs), (_order), 4) -#define metal_io_read32(_io, _ofs) \ - metal_io_read((_io), (_ofs), memory_order_seq_cst, 4) -#define metal_io_write32_explicit(_io, _ofs, _val, _order) \ - metal_io_write((_io), (_ofs), (_val), (_order), 4) -#define metal_io_write32(_io, _ofs, _val) \ - metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 4) - -#define metal_io_read64_explicit(_io, _ofs, _order) \ - metal_io_read((_io), (_ofs), (_order), 8) -#define metal_io_read64(_io, _ofs) \ - metal_io_read((_io), (_ofs), memory_order_seq_cst, 8) -#define metal_io_write64_explicit(_io, _ofs, _val, _order) \ - metal_io_write((_io), (_ofs), (_val), (_order), 8) -#define metal_io_write64(_io, _ofs, _val) \ - metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 8) - -/** - * @brief Read a block from an I/O region. - * @param[in] io I/O region handle. - * @param[in] offset Offset into I/O region. - * @param[in] dst destination to store the read data. - * @param[in] len length in bytes to read. - * @return On success, number of bytes read. On failure, negative value - */ -int metal_io_block_read(struct metal_io_region *io, unsigned long offset, - void *restrict dst, int len); - -/** - * @brief Write a block into an I/O region. - * @param[in] io I/O region handle. - * @param[in] offset Offset into I/O region. - * @param[in] src source to write. - * @param[in] len length in bytes to write. - * @return On success, number of bytes written. On failure, negative value - */ -int metal_io_block_write(struct metal_io_region *io, unsigned long offset, - const void *restrict src, int len); - -/** - * @brief fill a block of an I/O region. - * @param[in] io I/O region handle. - * @param[in] offset Offset into I/O region. - * @param[in] value value to fill into the block - * @param[in] len length in bytes to fill. - * @return On success, number of bytes filled. On failure, negative value - */ -int metal_io_block_set(struct metal_io_region *io, unsigned long offset, - unsigned char value, int len); - -#include - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_IO__H__ */ +/* + * Copyright (c) 2015 - 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file io.h + * @brief I/O access primitives for libmetal. + */ + +#ifndef __METAL_IO__H__ +#define __METAL_IO__H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup io IO Interfaces + * @{ + */ + +#ifdef __MICROBLAZE__ +#define NO_ATOMIC_64_SUPPORT +#endif + +struct metal_io_region; + +/** Generic I/O operations. */ +struct metal_io_ops { + uint64_t (*read)(struct metal_io_region *io, + unsigned long offset, + memory_order order, + int width); + void (*write)(struct metal_io_region *io, + unsigned long offset, + uint64_t value, + memory_order order, + int width); + int (*block_read)(struct metal_io_region *io, + unsigned long offset, + void *restrict dst, + memory_order order, + int len); + int (*block_write)(struct metal_io_region *io, + unsigned long offset, + const void *restrict src, + memory_order order, + int len); + void (*block_set)(struct metal_io_region *io, + unsigned long offset, + unsigned char value, + memory_order order, + int len); + void (*close)(struct metal_io_region *io); + metal_phys_addr_t (*offset_to_phys)(struct metal_io_region *io, + unsigned long offset); + unsigned long (*phys_to_offset)(struct metal_io_region *io, + metal_phys_addr_t phys); +}; + +/** Libmetal I/O region structure. */ +struct metal_io_region { + void *virt; /**< base virtual address */ + const metal_phys_addr_t *physmap; /**< table of base physical address + of each of the pages in the I/O + region */ + size_t size; /**< size of the I/O region */ + unsigned long page_shift; /**< page shift of I/O region */ + metal_phys_addr_t page_mask; /**< page mask of I/O region */ + unsigned int mem_flags; /**< memory attribute of the + I/O region */ + struct metal_io_ops ops; /**< I/O region operations */ +}; + +/** + * @brief Open a libmetal I/O region. + * + * @param[in, out] io I/O region handle. + * @param[in] virt Virtual address of region. + * @param[in] physmap Array of physical addresses per page. + * @param[in] size Size of region. + * @param[in] page_shift Log2 of page size (-1 for single page). + * @param[in] mem_flags Memory flags + * @param[in] ops ops + */ +void +metal_io_init(struct metal_io_region *io, void *virt, + const metal_phys_addr_t *physmap, size_t size, + unsigned int page_shift, unsigned int mem_flags, + const struct metal_io_ops *ops); + +/** + * @brief Close a libmetal shared memory segment. + * @param[in] io I/O region handle. + */ +static inline void metal_io_finish(struct metal_io_region *io) +{ + if (io->ops.close) + (*io->ops.close)(io); + memset(io, 0, sizeof(*io)); +} + +/** + * @brief Get size of I/O region. + * + * @param[in] io I/O region handle. + * @return Size of I/O region. + */ +static inline size_t metal_io_region_size(struct metal_io_region *io) +{ + return io->size; +} + +/** + * @brief Get virtual address for a given offset into the I/O region. + * @param[in] io I/O region handle. + * @param[in] offset Offset into shared memory segment. + * @return NULL if offset is out of range, or pointer to offset. + */ +static inline void * +metal_io_virt(struct metal_io_region *io, unsigned long offset) +{ + return (io->virt != METAL_BAD_VA && offset < io->size + ? (void *)((uintptr_t)io->virt + offset) + : NULL); +} + +/** + * @brief Convert a virtual address to offset within I/O region. + * @param[in] io I/O region handle. + * @param[in] virt Virtual address within segment. + * @return METAL_BAD_OFFSET if out of range, or offset. + */ +static inline unsigned long +metal_io_virt_to_offset(struct metal_io_region *io, void *virt) +{ + size_t offset = (uintptr_t)virt - (uintptr_t)io->virt; + + return (offset < io->size ? offset : METAL_BAD_OFFSET); +} + +/** + * @brief Get physical address for a given offset into the I/O region. + * @param[in] io I/O region handle. + * @param[in] offset Offset into shared memory segment. + * @return METAL_BAD_PHYS if offset is out of range, or physical address + * of offset. + */ +static inline metal_phys_addr_t +metal_io_phys(struct metal_io_region *io, unsigned long offset) +{ + if (!io->ops.offset_to_phys) { + unsigned long page = (io->page_shift >= + sizeof(offset) * CHAR_BIT ? + 0 : offset >> io->page_shift); + return (io->physmap && offset < io->size + ? io->physmap[page] + (offset & io->page_mask) + : METAL_BAD_PHYS); + } + + return io->ops.offset_to_phys(io, offset); +} + +/** + * @brief Convert a physical address to offset within I/O region. + * @param[in] io I/O region handle. + * @param[in] phys Physical address within segment. + * @return METAL_BAD_OFFSET if out of range, or offset. + */ +static inline unsigned long +metal_io_phys_to_offset(struct metal_io_region *io, metal_phys_addr_t phys) +{ + if (!io->ops.phys_to_offset) { + unsigned long offset = + (io->page_mask == (metal_phys_addr_t)(-1) ? + phys - io->physmap[0] : phys & io->page_mask); + do { + if (metal_io_phys(io, offset) == phys) + return offset; + offset += io->page_mask + 1; + } while (offset < io->size); + return METAL_BAD_OFFSET; + } + + return (*io->ops.phys_to_offset)(io, phys); +} + +/** + * @brief Convert a physical address to virtual address. + * @param[in] io Shared memory segment handle. + * @param[in] phys Physical address within segment. + * @return NULL if out of range, or corresponding virtual address. + */ +static inline void * +metal_io_phys_to_virt(struct metal_io_region *io, metal_phys_addr_t phys) +{ + return metal_io_virt(io, metal_io_phys_to_offset(io, phys)); +} + +/** + * @brief Convert a virtual address to physical address. + * @param[in] io Shared memory segment handle. + * @param[in] virt Virtual address within segment. + * @return METAL_BAD_PHYS if out of range, or corresponding + * physical address. + */ +static inline metal_phys_addr_t +metal_io_virt_to_phys(struct metal_io_region *io, void *virt) +{ + return metal_io_phys(io, metal_io_virt_to_offset(io, virt)); +} + +/** + * @brief Read a value from an I/O region. + * @param[in] io I/O region handle. + * @param[in] offset Offset into I/O region. + * @param[in] order Memory ordering. + * @param[in] width Width in bytes of datatype to read. This must be 1, 2, + * 4, or 8, and a compile time constant for this function + * to inline cleanly. + * @return Value. + */ +static inline uint64_t +metal_io_read(struct metal_io_region *io, unsigned long offset, + memory_order order, int width) +{ + void *ptr = metal_io_virt(io, offset); + + if (io->ops.read) + return (*io->ops.read)(io, offset, order, width); + else if (ptr && sizeof(atomic_uchar) == width) + return atomic_load_explicit((atomic_uchar *)ptr, order); + else if (ptr && sizeof(atomic_ushort) == width) + return atomic_load_explicit((atomic_ushort *)ptr, order); + else if (ptr && sizeof(atomic_uint) == width) + return atomic_load_explicit((atomic_uint *)ptr, order); + else if (ptr && sizeof(atomic_ulong) == width) + return atomic_load_explicit((atomic_ulong *)ptr, order); +#ifndef NO_ATOMIC_64_SUPPORT + else if (ptr && sizeof(atomic_ullong) == width) + return atomic_load_explicit((atomic_ullong *)ptr, order); +#endif + metal_assert(0); + return 0; /* quiet compiler */ +} + +/** + * @brief Write a value into an I/O region. + * @param[in] io I/O region handle. + * @param[in] offset Offset into I/O region. + * @param[in] value Value to write. + * @param[in] order Memory ordering. + * @param[in] width Width in bytes of datatype to read. This must be 1, 2, + * 4, or 8, and a compile time constant for this function + * to inline cleanly. + */ +static inline void +metal_io_write(struct metal_io_region *io, unsigned long offset, + uint64_t value, memory_order order, int width) +{ + void *ptr = metal_io_virt(io, offset); + + if (io->ops.write) + (*io->ops.write)(io, offset, value, order, width); + else if (ptr && sizeof(atomic_uchar) == width) + atomic_store_explicit((atomic_uchar *)ptr, (unsigned char)value, + order); + else if (ptr && sizeof(atomic_ushort) == width) + atomic_store_explicit((atomic_ushort *)ptr, + (unsigned short)value, order); + else if (ptr && sizeof(atomic_uint) == width) + atomic_store_explicit((atomic_uint *)ptr, (unsigned int)value, + order); + else if (ptr && sizeof(atomic_ulong) == width) + atomic_store_explicit((atomic_ulong *)ptr, (unsigned long)value, + order); +#ifndef NO_ATOMIC_64_SUPPORT + else if (ptr && sizeof(atomic_ullong) == width) + atomic_store_explicit((atomic_ullong *)ptr, + (unsigned long long)value, order); +#endif + else + metal_assert(0); +} + +#define metal_io_read8_explicit(_io, _ofs, _order) \ + metal_io_read((_io), (_ofs), (_order), 1) +#define metal_io_read8(_io, _ofs) \ + metal_io_read((_io), (_ofs), memory_order_seq_cst, 1) +#define metal_io_write8_explicit(_io, _ofs, _val, _order) \ + metal_io_write((_io), (_ofs), (_val), (_order), 1) +#define metal_io_write8(_io, _ofs, _val) \ + metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 1) + +#define metal_io_read16_explicit(_io, _ofs, _order) \ + metal_io_read((_io), (_ofs), (_order), 2) +#define metal_io_read16(_io, _ofs) \ + metal_io_read((_io), (_ofs), memory_order_seq_cst, 2) +#define metal_io_write16_explicit(_io, _ofs, _val, _order) \ + metal_io_write((_io), (_ofs), (_val), (_order), 2) +#define metal_io_write16(_io, _ofs, _val) \ + metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 2) + +#define metal_io_read32_explicit(_io, _ofs, _order) \ + metal_io_read((_io), (_ofs), (_order), 4) +#define metal_io_read32(_io, _ofs) \ + metal_io_read((_io), (_ofs), memory_order_seq_cst, 4) +#define metal_io_write32_explicit(_io, _ofs, _val, _order) \ + metal_io_write((_io), (_ofs), (_val), (_order), 4) +#define metal_io_write32(_io, _ofs, _val) \ + metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 4) + +#define metal_io_read64_explicit(_io, _ofs, _order) \ + metal_io_read((_io), (_ofs), (_order), 8) +#define metal_io_read64(_io, _ofs) \ + metal_io_read((_io), (_ofs), memory_order_seq_cst, 8) +#define metal_io_write64_explicit(_io, _ofs, _val, _order) \ + metal_io_write((_io), (_ofs), (_val), (_order), 8) +#define metal_io_write64(_io, _ofs, _val) \ + metal_io_write((_io), (_ofs), (_val), memory_order_seq_cst, 8) + +/** + * @brief Read a block from an I/O region. + * @param[in] io I/O region handle. + * @param[in] offset Offset into I/O region. + * @param[in] dst destination to store the read data. + * @param[in] len length in bytes to read. + * @return On success, number of bytes read. On failure, negative value + */ +int metal_io_block_read(struct metal_io_region *io, unsigned long offset, + void *restrict dst, int len); + +/** + * @brief Write a block into an I/O region. + * @param[in] io I/O region handle. + * @param[in] offset Offset into I/O region. + * @param[in] src source to write. + * @param[in] len length in bytes to write. + * @return On success, number of bytes written. On failure, negative value + */ +int metal_io_block_write(struct metal_io_region *io, unsigned long offset, + const void *restrict src, int len); + +/** + * @brief fill a block of an I/O region. + * @param[in] io I/O region handle. + * @param[in] offset Offset into I/O region. + * @param[in] value value to fill into the block + * @param[in] len length in bytes to fill. + * @return On success, number of bytes filled. On failure, negative value + */ +int metal_io_block_set(struct metal_io_region *io, unsigned long offset, + unsigned char value, int len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#include + +#endif /* __METAL_IO__H__ */ diff --git a/libraries/openamp_arduino/src/metal/irq.h b/libraries/openamp_arduino/src/metal/irq.h index 9f0344e7f..43562abe1 100755 --- a/libraries/openamp_arduino/src/metal/irq.h +++ b/libraries/openamp_arduino/src/metal/irq.h @@ -1,116 +1,104 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file irq.h - * @brief Interrupt handling primitives for libmetal. - */ - -#ifndef __METAL_IRQ__H__ -#define __METAL_IRQ__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup irq Interrupt Handling Interfaces - * @{ */ - -#include - -/** IRQ handled status */ -#define METAL_IRQ_NOT_HANDLED 0 -#define METAL_IRQ_HANDLED 1 - -/** - * @brief type of interrupt handler - * @param[in] irq interrupt id - * @param[in] priv private data - * @return irq handled status - */ -typedef int (*metal_irq_handler) (int irq, void *priv); - -struct metal_device; - -/** - * @brief Register interrupt handler for driver ID/device. - * - * @param[in] irq interrupt id - * @param[in] irq_handler interrupt handler - * @param[in] dev metal device this irq belongs to (can be NULL). - * @param[in] drv_id driver id is a unique interrupt handler identifier. - * It can also be used for driver data. - * @return 0 for success, non-zero on failure - */ -int metal_irq_register(int irq, - metal_irq_handler irq_handler, - struct metal_device *dev, - void *drv_id); - -/** - * @brief Unregister interrupt handler for driver ID and/or device. - * - * If interrupt handler (hd), driver ID (drv_id) and device (dev) - * are NULL, unregister all handlers for this interrupt. - * - * If interrupt handler (hd), device (dev) or driver ID (drv_id), - * are not NULL, unregister handlers matching non NULL criterias. - * e.g: when call is made with drv_id and dev non NULL, - * all handlers matching both are unregistered. - * - * If interrupt is not found, or other criterias not matching, - * return -ENOENT - * - * @param[in] irq interrupt id - * @param[in] irq_handler interrupt handler - * @param[in] dev metal device this irq belongs to - * @param[in] drv_id driver id. It can be used for driver data. - * @return 0 for success, non-zero on failure - */ -int metal_irq_unregister(int irq, - metal_irq_handler irq_handler, - struct metal_device *dev, - void *drv_id); - -/** - * @brief disable interrupts - * @return interrupts state - */ -unsigned int metal_irq_save_disable(void); - -/** - * @brief restore interrupts to their previous state - * @param[in] flags previous interrupts state - */ -void metal_irq_restore_enable(unsigned int flags); - -/** - * @brief metal_irq_enable - * - * Enables the given interrupt - * - * @param vector - interrupt vector number - */ -void metal_irq_enable(unsigned int vector); - -/** - * @brief metal_irq_disable - * - * Disables the given interrupt - * - * @param vector - interrupt vector number - */ -void metal_irq_disable(unsigned int vector); - -#include - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_IRQ__H__ */ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file irq.h + * @brief Interrupt handling primitives for libmetal. + */ + +#ifndef __METAL_IRQ__H__ +#define __METAL_IRQ__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup irq Interrupt Handling Interfaces + * @{ + */ + +/** IRQ handled status */ +#define METAL_IRQ_NOT_HANDLED 0 +#define METAL_IRQ_HANDLED 1 + +/** + * @brief type of interrupt handler + * @param[in] irq interrupt id + * @param[in] arg argument to pass to the handler + * @return irq handled status + */ +typedef int (*metal_irq_handler) (int irq, void *arg); + +/** + * @brief Register interrupt handler for interrupt. + * Only allow single interrupt handler for a interrupt. + * + * If irq_handler is NULL, it will unregister interrupt + * handler from interrupt + * + * @param[in] irq interrupt id + * @param[in] irq_handler interrupt handler + * @param[in] arg arg is the argument pointing to the data which + * will be passed to the interrupt handler. + * @return 0 for success, non-zero on failure + */ +int metal_irq_register(int irq, + metal_irq_handler irq_handler, + void *arg); + +/** + * @brief Unregister interrupt handler for interrupt. + * + * @param[in] irq interrupt id + */ +static inline +void metal_irq_unregister(int irq) +{ + metal_irq_register(irq, 0, NULL); +} + +/** + * @brief disable interrupts + * @return interrupts state + */ +unsigned int metal_irq_save_disable(void); + +/** + * @brief restore interrupts to their previous state + * @param[in] flags previous interrupts state + */ +void metal_irq_restore_enable(unsigned int flags); + +/** + * @brief metal_irq_enable + * + * Enables the given interrupt + * + * @param vector - interrupt vector number + */ +void metal_irq_enable(unsigned int vector); + +/** + * @brief metal_irq_disable + * + * Disables the given interrupt + * + * @param vector - interrupt vector number + */ +void metal_irq_disable(unsigned int vector); + +#include + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_IRQ__H__ */ diff --git a/libraries/openamp_arduino/src/metal/irq_controller.h b/libraries/openamp_arduino/src/metal/irq_controller.h new file mode 100644 index 000000000..c821ef48c --- /dev/null +++ b/libraries/openamp_arduino/src/metal/irq_controller.h @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file irq.h + * @brief Interrupt handling primitives for libmetal. + */ + +#ifndef __METAL_IRQ_CONTROLLER__H__ +#define __METAL_IRQ_CONTROLLER__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup irq Interrupt Handling Interfaces + * @{ + */ + +#include +#include +#include + +/** IRQ ANY ID */ +#define METAL_IRQ_ANY (-1) + +/** IRQ state macro which will be passed to metal irq set state function + * to indicate which state the caller want the IRQ to change to. + */ +#define METAL_IRQ_DISABLE 0U +#define METAL_IRQ_ENABLE 1U + +struct metal_irq_controller; + +/** + * @brief type of interrupt controller to set irq enable + * @param[in] irq_cntr pointer to interrupt controller + * @param[in] irq interrupt id + * @param[in] enable IRQ state + */ +typedef void (*metal_irq_set_enable) (struct metal_irq_controller *irq_cntr, + int irq, unsigned int enable); + +/** + * @brief type of controller specific registering interrupt function + * @param[in] irq_cntr pointer to interrupt controller + * @param[in] irq interrupt id + * @param[in] hd interrupt handler + * @param[in] arg argument which will be passed to the interrupt handler + * @return 0 for success, negative value for failure + */ +typedef int (*metal_cntr_irq_register) (struct metal_irq_controller *irq_cntr, + int irq, metal_irq_handler hd, + void *arg); + +/** Libmetal interrupt structure */ +struct metal_irq { + metal_irq_handler hd; /**< Interrupt handler */ + void *arg; /**< Argument to pass to the interrupt handler */ +}; + +/** Libmetal interrupt controller structure */ +struct metal_irq_controller { + int irq_base; /**< Start of IRQ number of the range managed by + * the IRQ controller + */ + int irq_num; /**< Number of IRQs managed by the IRQ controller */ + void *arg; /**< Argument to pass to interrupt controller function */ + metal_irq_set_enable irq_set_enable; /**< function to set IRQ enable */ + metal_cntr_irq_register irq_register; /**< function to register IRQ + * handler + */ + struct metal_list node; /**< list node */ + struct metal_irq *irqs; /**< Array of IRQs managed by the controller */ +}; + +#define METAL_IRQ_CONTROLLER_DECLARE(_irq_controller, \ + _irq_base, _irq_num, \ + _arg, \ + _irq_set_enable, \ + _irq_register, \ + _irqs) \ + struct metal_irq_controller _irq_controller = { \ + .irq_base = _irq_base, \ + .irq_num = _irq_num, \ + .arg = _arg, \ + .irq_set_enable = _irq_set_enable, \ + .irq_register = _irq_register, \ + .irqs = _irqs,\ + } + +/** + * @brief metal_irq_register_controller + * + * Register IRQ controller + * This function will allocate IRQ ids if it was + * not predefined in the irq controller. There is no + * locking in the function, it is not supposed to be + * called by multiple threads. + * + * @param[in] cntr Interrupt controller to register + * @return 0 on success, or negative value for failure. + */ +int metal_irq_register_controller(struct metal_irq_controller *cntr); + +/** + * @brief metal_irq_handle + * + * Call registered IRQ handler + * + * @param[in] irq_data metal IRQ structure + * @param[in] irq IRQ id which will be passed to handler + * @return IRQ handler status + */ +static inline +int metal_irq_handle(struct metal_irq *irq_data, int irq) +{ + if (irq_data && irq_data->hd) { + return irq_data->hd(irq, irq_data->arg); + } else { + return METAL_IRQ_NOT_HANDLED; + } +} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_IRQ__H__ */ diff --git a/libraries/openamp_arduino/src/metal/list.h b/libraries/openamp_arduino/src/metal/list.h index a9395ba77..eb0e7b339 100755 --- a/libraries/openamp_arduino/src/metal/list.h +++ b/libraries/openamp_arduino/src/metal/list.h @@ -1,102 +1,118 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file list.h - * @brief List primitives for libmetal. - */ - -#ifndef __METAL_LIST__H__ -#define __METAL_LIST__H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup list List Primitives - * @{ */ - -struct metal_list { - struct metal_list *next, *prev; -}; - -/* - * METAL_INIT_LIST - used for initializing an list elmenet in a static struct - * or global - */ -#define METAL_INIT_LIST(name) { .next = &name, .prev = &name } -/* - * METAL_DECLARE_LIST - used for defining and initializing a global or - * static singleton list - */ -#define METAL_DECLARE_LIST(name) \ - struct metal_list name = METAL_INIT_LIST(name) - -static inline void metal_list_init(struct metal_list *list) -{ - list->next = list->prev = list; -} - -static inline void metal_list_add_before(struct metal_list *node, - struct metal_list *new_node) -{ - new_node->prev = node->prev; - new_node->next = node; - new_node->next->prev = new_node; - new_node->prev->next = new_node; -} - -static inline void metal_list_add_after(struct metal_list *node, - struct metal_list *new_node) -{ - new_node->prev = node; - new_node->next = node->next; - new_node->next->prev = new_node; - new_node->prev->next = new_node; -} - -static inline void metal_list_add_head(struct metal_list *list, - struct metal_list *node) -{ - metal_list_add_after(list, node); -} - -static inline void metal_list_add_tail(struct metal_list *list, - struct metal_list *node) -{ - metal_list_add_before(list, node); -} - -static inline int metal_list_is_empty(struct metal_list *list) -{ - return list->next == list; -} - -static inline void metal_list_del(struct metal_list *node) -{ - node->next->prev = node->prev; - node->prev->next = node->next; - node->next = node->prev = node; -} - -static inline struct metal_list *metal_list_first(struct metal_list *list) -{ - return metal_list_is_empty(list) ? NULL : list->next; -} - -#define metal_list_for_each(list, node) \ - for ((node) = (list)->next; \ - (node) != (list); \ - (node) = (node)->next) -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_LIST__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file list.h + * @brief List primitives for libmetal. + */ + +#ifndef __METAL_LIST__H__ +#define __METAL_LIST__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup list List Primitives + * @{ + */ + +struct metal_list { + struct metal_list *next, *prev; +}; + +/* + * METAL_INIT_LIST - used for initializing an list element in a static struct + * or global + */ +#define METAL_INIT_LIST(name) { .next = &name, .prev = &name } +/* + * METAL_DECLARE_LIST - used for defining and initializing a global or + * static singleton list + */ +#define METAL_DECLARE_LIST(name) \ + struct metal_list name = METAL_INIT_LIST(name) + +static inline void metal_list_init(struct metal_list *list) +{ + list->prev = list; + list->next = list; +} + +static inline void metal_list_add_before(struct metal_list *node, + struct metal_list *new_node) +{ + new_node->prev = node->prev; + new_node->next = node; + new_node->next->prev = new_node; + new_node->prev->next = new_node; +} + +static inline void metal_list_add_after(struct metal_list *node, + struct metal_list *new_node) +{ + new_node->prev = node; + new_node->next = node->next; + new_node->next->prev = new_node; + new_node->prev->next = new_node; +} + +static inline void metal_list_add_head(struct metal_list *list, + struct metal_list *node) +{ + metal_list_add_after(list, node); +} + +static inline void metal_list_add_tail(struct metal_list *list, + struct metal_list *node) +{ + metal_list_add_before(list, node); +} + +static inline int metal_list_is_empty(struct metal_list *list) +{ + return list->next == list; +} + +static inline void metal_list_del(struct metal_list *node) +{ + node->next->prev = node->prev; + node->prev->next = node->next; + node->prev = node; + node->next = node; +} + +static inline struct metal_list *metal_list_first(struct metal_list *list) +{ + return metal_list_is_empty(list) ? NULL : list->next; +} + +#define metal_list_for_each(list, node) \ + for ((node) = (list)->next; \ + (node) != (list); \ + (node) = (node)->next) + +static inline bool metal_list_find_node(struct metal_list *list, + struct metal_list *node) +{ + struct metal_list *n; + + metal_list_for_each(list, n) { + if (n == node) + return true; + } + return false; +} +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_LIST__H__ */ diff --git a/libraries/openamp_arduino/src/metal/log.h b/libraries/openamp_arduino/src/metal/log.h index d439ef8f4..528e4c6b0 100755 --- a/libraries/openamp_arduino/src/metal/log.h +++ b/libraries/openamp_arduino/src/metal/log.h @@ -1,93 +1,116 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file log.h - * @brief Logging support for libmetal. - */ - -#ifndef __METAL_METAL_LOG__H__ -#define __METAL_METAL_LOG__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup logging Library Logging Interfaces - * @{ */ - -/** Log message priority levels for libmetal. */ -enum metal_log_level { - METAL_LOG_EMERGENCY, /**< system is unusable. */ - METAL_LOG_ALERT, /**< action must be taken immediately. */ - METAL_LOG_CRITICAL, /**< critical conditions. */ - METAL_LOG_ERROR, /**< error conditions. */ - METAL_LOG_WARNING, /**< warning conditions. */ - METAL_LOG_NOTICE, /**< normal but significant condition. */ - METAL_LOG_INFO, /**< informational messages. */ - METAL_LOG_DEBUG, /**< debug-level messages. */ -}; - -/** Log message handler type. */ -typedef void (*metal_log_handler)(enum metal_log_level level, - const char *format, ...); - -/** - * @brief Set libmetal log handler. - * @param[in] handler log message handler. - * @return 0 on success, or -errno on failure. - */ -extern void metal_set_log_handler(metal_log_handler handler); - -/** - * @brief Get the current libmetal log handler. - * @return Current log handler. - */ -extern metal_log_handler metal_get_log_handler(void); - -/** - * @brief Set the level for libmetal logging. - * @param[in] level log message level. - */ -extern void metal_set_log_level(enum metal_log_level level); - -/** - * @brief Get the current level for libmetal logging. - * @return Current log level. - */ -extern enum metal_log_level metal_get_log_level(void); - -/** - * @brief Default libmetal log handler. This handler prints libmetal log - * mesages to stderr. - * @param[in] level log message level. - * @param[in] format log message format string. - * @return 0 on success, or -errno on failure. - */ -extern void metal_default_log_handler(enum metal_log_level level, - const char *format, ...); - - -/** - * Emit a log message if the log level permits. - * - * @param level Log level. - * @param ... Format string and arguments. - */ -#define metal_log(level, ...) \ - ((level <= _metal.common.log_level && _metal.common.log_handler) \ - ? (void)_metal.common.log_handler(level, __VA_ARGS__) \ - : (void)0) - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#include - -#endif /* __METAL_METAL_LOG__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file log.h + * @brief Logging support for libmetal. + */ + +#ifndef __METAL_METAL_LOG__H__ +#define __METAL_METAL_LOG__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup logging Library Logging Interfaces + * @{ + */ + +/** Log message priority levels for libmetal. */ +enum metal_log_level { + METAL_LOG_EMERGENCY, /**< system is unusable. */ + METAL_LOG_ALERT, /**< action must be taken immediately. */ + METAL_LOG_CRITICAL, /**< critical conditions. */ + METAL_LOG_ERROR, /**< error conditions. */ + METAL_LOG_WARNING, /**< warning conditions. */ + METAL_LOG_NOTICE, /**< normal but significant condition. */ + METAL_LOG_INFO, /**< informational messages. */ + METAL_LOG_DEBUG, /**< debug-level messages. */ +}; + +/** Log message handler type. */ +typedef void (*metal_log_handler)(enum metal_log_level level, + const char *format, ...); + +/** + * @brief Set libmetal log handler. + * @param[in] handler log message handler. + * @return 0 on success, or -errno on failure. + */ +extern void metal_set_log_handler(metal_log_handler handler); + +/** + * @brief Get the current libmetal log handler. + * @return Current log handler. + */ +extern metal_log_handler metal_get_log_handler(void); + +/** + * @brief Set the level for libmetal logging. + * @param[in] level log message level. + */ +extern void metal_set_log_level(enum metal_log_level level); + +/** + * @brief Get the current level for libmetal logging. + * @return Current log level. + */ +extern enum metal_log_level metal_get_log_level(void); + +/** + * @brief Default libmetal log handler. This handler prints libmetal log + * messages to stderr. + * @param[in] level log message level. + * @param[in] format log message format string. + * @return 0 on success, or -errno on failure. + */ +extern void metal_default_log_handler(enum metal_log_level level, + const char *format, ...); + +/** + * @internal + * + * @brief used by the metal_log() macro to update the format string + * + * If ML_FUNC_LINE is defined this macro generates a unified format + * string for metal_log() and its convenience metal_*() macros, i.e. it + * adds function-name:line-number prefix to all log messages. + * + * @param[in] fmt format string passed from the metal_log() macro + */ +#if defined(ML_FUNC_LINE) +#define metal_fmt(fmt) "%s:%u " fmt, __func__, __LINE__ +#else /* ML_FUNC_LINE */ +#define metal_fmt(fmt) fmt +#endif /* ML_FUNC_LINE */ + +/** + * @brief Emit a log message if the log level permits. + * + * @param level Log level. + * @param fmt Format string. + * @param args... Variable number of arguments. + */ +#define metal_log(level, fmt, args...) ({ \ + if (_metal.common.log_handler && level <= _metal.common.log_level) \ + _metal.common.log_handler(level, metal_fmt(fmt), ##args); \ +}) + +#define metal_err(fmt, args...) metal_log(METAL_LOG_ERROR, fmt, ##args) +#define metal_warn(fmt, args...) metal_log(METAL_LOG_WARNING, fmt, ##args) +#define metal_info(fmt, args...) metal_log(METAL_LOG_INFO, fmt, ##args) +#define metal_dbg(fmt, args...) metal_log(METAL_LOG_DEBUG, fmt, ##args) + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#include + +#endif /* __METAL_METAL_LOG__H__ */ diff --git a/libraries/openamp_arduino/src/metal/mutex.h b/libraries/openamp_arduino/src/metal/mutex.h index c241bd0db..71d9eaa21 100755 --- a/libraries/openamp_arduino/src/metal/mutex.h +++ b/libraries/openamp_arduino/src/metal/mutex.h @@ -1,87 +1,88 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file mutex.h - * @brief Mutex primitives for libmetal. - */ - -#ifndef __METAL_MUTEX__H__ -#define __METAL_MUTEX__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup mutex Mutex Interfaces - * @{ */ - -#include - -/** - * @brief Initialize a libmetal mutex. - * @param[in] mutex Mutex to initialize. - */ -static inline void metal_mutex_init(metal_mutex_t *mutex) -{ - __metal_mutex_init(mutex); -} - -/** - * @brief Deinitialize a libmetal mutex. - * @param[in] mutex Mutex to deinitialize. - */ -static inline void metal_mutex_deinit(metal_mutex_t *mutex) -{ - __metal_mutex_deinit(mutex); -} - -/** - * @brief Try to acquire a mutex - * @param[in] mutex Mutex to mutex. - * @return 0 on failure to acquire, non-zero on success. - */ -static inline int metal_mutex_try_acquire(metal_mutex_t *mutex) -{ - return __metal_mutex_try_acquire(mutex); -} - -/** - * @brief Acquire a mutex - * @param[in] mutex Mutex to mutex. - */ -static inline void metal_mutex_acquire(metal_mutex_t *mutex) -{ - __metal_mutex_acquire(mutex); -} - -/** - * @brief Release a previously acquired mutex. - * @param[in] mutex Mutex to mutex. - * @see metal_mutex_try_acquire, metal_mutex_acquire - */ -static inline void metal_mutex_release(metal_mutex_t *mutex) -{ - __metal_mutex_release(mutex); -} - -/** - * @brief Checked if a mutex has been acquired. - * @param[in] mutex mutex to check. - * @see metal_mutex_try_acquire, metal_mutex_acquire - */ -static inline int metal_mutex_is_acquired(metal_mutex_t *mutex) -{ - return __metal_mutex_is_acquired(mutex); -} - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_MUTEX__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file mutex.h + * @brief Mutex primitives for libmetal. + */ + +#ifndef __METAL_MUTEX__H__ +#define __METAL_MUTEX__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup mutex Mutex Interfaces + * @{ + */ + +/** + * @brief Initialize a libmetal mutex. + * @param[in] mutex Mutex to initialize. + */ +static inline void metal_mutex_init(metal_mutex_t *mutex) +{ + __metal_mutex_init(mutex); +} + +/** + * @brief Deinitialize a libmetal mutex. + * @param[in] mutex Mutex to deinitialize. + */ +static inline void metal_mutex_deinit(metal_mutex_t *mutex) +{ + __metal_mutex_deinit(mutex); +} + +/** + * @brief Try to acquire a mutex + * @param[in] mutex Mutex to mutex. + * @return 0 on failure to acquire, non-zero on success. + */ +static inline int metal_mutex_try_acquire(metal_mutex_t *mutex) +{ + return __metal_mutex_try_acquire(mutex); +} + +/** + * @brief Acquire a mutex + * @param[in] mutex Mutex to mutex. + */ +static inline void metal_mutex_acquire(metal_mutex_t *mutex) +{ + __metal_mutex_acquire(mutex); +} + +/** + * @brief Release a previously acquired mutex. + * @param[in] mutex Mutex to mutex. + * @see metal_mutex_try_acquire, metal_mutex_acquire + */ +static inline void metal_mutex_release(metal_mutex_t *mutex) +{ + __metal_mutex_release(mutex); +} + +/** + * @brief Checked if a mutex has been acquired. + * @param[in] mutex mutex to check. + * @see metal_mutex_try_acquire, metal_mutex_acquire + */ +static inline int metal_mutex_is_acquired(metal_mutex_t *mutex) +{ + return __metal_mutex_is_acquired(mutex); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_MUTEX__H__ */ diff --git a/libraries/openamp_arduino/src/metal/processor/arm/atomic.h b/libraries/openamp_arduino/src/metal/processor/arm/atomic.h index c5e25cdfb..ab5ee4060 100755 --- a/libraries/openamp_arduino/src/metal/processor/arm/atomic.h +++ b/libraries/openamp_arduino/src/metal/processor/arm/atomic.h @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file arm/atomic.h - * @brief ARM specific atomic primitives for libmetal. - */ - -#ifndef __METAL_ARM_ATOMIC__H__ -#define __METAL_ARM_ATOMIC__H__ - -#endif /* __METAL_ARM_ATOMIC__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file arm/atomic.h + * @brief Arm specific atomic primitives for libmetal. + */ + +#ifndef __METAL_ARM_ATOMIC__H__ +#define __METAL_ARM_ATOMIC__H__ + +#endif /* __METAL_ARM_ATOMIC__H__ */ diff --git a/libraries/openamp_arduino/src/metal/processor/arm/cpu.h b/libraries/openamp_arduino/src/metal/processor/arm/cpu.h index 3e4f8483b..0ea96102a 100755 --- a/libraries/openamp_arduino/src/metal/processor/arm/cpu.h +++ b/libraries/openamp_arduino/src/metal/processor/arm/cpu.h @@ -1,17 +1,17 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file cpu.h - * @brief CPU specific primatives - */ - -#ifndef __METAL_ARM_CPU__H__ -#define __METAL_ARM_CPU__H__ - -#define metal_cpu_yield() - -#endif /* __METAL_ARM_CPU__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file cpu.h + * @brief CPU specific primitives + */ + +#ifndef __METAL_ARM_CPU__H__ +#define __METAL_ARM_CPU__H__ + +#define metal_cpu_yield() + +#endif /* __METAL_ARM_CPU__H__ */ diff --git a/libraries/openamp_arduino/src/metal/shmem.h b/libraries/openamp_arduino/src/metal/shmem.h index 19f282caf..561a2c85d 100755 --- a/libraries/openamp_arduino/src/metal/shmem.h +++ b/libraries/openamp_arduino/src/metal/shmem.h @@ -1,83 +1,84 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file shmem.h - * @brief Shared memory primitives for libmetal. - */ - -#ifndef __METAL_SHMEM__H__ -#define __METAL_SHMEM__H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup shmem Shared Memory Interfaces - * @{ */ - -/** Generic shared memory data structure. */ -struct metal_generic_shmem { - const char *name; - struct metal_io_region io; - struct metal_list node; -}; - -/** - * @brief Open a libmetal shared memory segment. - * - * Open a shared memory segment. - * - * @param[in] name Name of segment to open. - * @param[in] size Size of segment. - * @param[out] io I/O region handle, if successful. - * @return 0 on success, or -errno on failure. - * - * @see metal_shmem_create - */ -extern int metal_shmem_open(const char *name, size_t size, - struct metal_io_region **io); - -/** - * @brief Statically register a generic shared memory region. - * - * Shared memory regions may be statically registered at application - * initialization, or may be dynamically opened. This interface is used for - * static registration of regions. Subsequent calls to metal_shmem_open() look - * up in this list of pre-registered regions. - * - * @param[in] shmem Generic shmem structure. - * @return 0 on success, or -errno on failure. - */ -extern int metal_shmem_register_generic(struct metal_generic_shmem *shmem); - -#ifdef METAL_INTERNAL - -/** - * @brief Open a statically registered shmem segment. - * - * This interface is meant for internal libmetal use within system specific - * shmem implementations. - * - * @param[in] name Name of segment to open. - * @param[in] size Size of segment. - * @param[out] io I/O region handle, if successful. - * @return 0 on success, or -errno on failure. - */ -int metal_shmem_open_generic(const char *name, size_t size, - struct metal_io_region **result); - -#endif - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_SHMEM__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file shmem.h + * @brief Shared memory primitives for libmetal. + */ + +#ifndef __METAL_SHMEM__H__ +#define __METAL_SHMEM__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup shmem Shared Memory Interfaces + * @{ + */ + +/** Generic shared memory data structure. */ +struct metal_generic_shmem { + const char *name; + struct metal_io_region io; + struct metal_list node; +}; + +/** + * @brief Open a libmetal shared memory segment. + * + * Open a shared memory segment. + * + * @param[in] name Name of segment to open. + * @param[in] size Size of segment. + * @param[out] io I/O region handle, if successful. + * @return 0 on success, or -errno on failure. + * + * @see metal_shmem_create + */ +extern int metal_shmem_open(const char *name, size_t size, + struct metal_io_region **io); + +/** + * @brief Statically register a generic shared memory region. + * + * Shared memory regions may be statically registered at application + * initialization, or may be dynamically opened. This interface is used for + * static registration of regions. Subsequent calls to metal_shmem_open() look + * up in this list of pre-registered regions. + * + * @param[in] shmem Generic shmem structure. + * @return 0 on success, or -errno on failure. + */ +extern int metal_shmem_register_generic(struct metal_generic_shmem *shmem); + +#ifdef METAL_INTERNAL + +/** + * @brief Open a statically registered shmem segment. + * + * This interface is meant for internal libmetal use within system specific + * shmem implementations. + * + * @param[in] name Name of segment to open. + * @param[in] size Size of segment. + * @param[out] io I/O region handle, if successful. + * @return 0 on success, or -errno on failure. + */ +int metal_shmem_open_generic(const char *name, size_t size, + struct metal_io_region **result); + +#endif + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_SHMEM__H__ */ diff --git a/libraries/openamp_arduino/src/metal/sleep.h b/libraries/openamp_arduino/src/metal/sleep.h index 0dad40129..b366ee5b1 100755 --- a/libraries/openamp_arduino/src/metal/sleep.h +++ b/libraries/openamp_arduino/src/metal/sleep.h @@ -1,44 +1,45 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file sleep.h - * @brief Sleep primitives for libmetal. - */ - -#ifndef __METAL_SLEEP__H__ -#define __METAL_SLEEP__H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup sleep Sleep Interfaces - * @{ */ - -/** - * @brief delay in microseconds - * delay the next execution in the calling thread - * fo usec microseconds. - * - * @param[in] usec microsecond intervals - * @return 0 on success, non-zero for failures - */ -static inline int metal_sleep_usec(unsigned int usec) -{ - return __metal_sleep_usec(usec); -} - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_SLEEP__H__ */ - +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file sleep.h + * @brief Sleep primitives for libmetal. + */ + +#ifndef __METAL_SLEEP__H__ +#define __METAL_SLEEP__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup sleep Sleep Interfaces + * @{ + */ + +/** + * @brief delay in microseconds + * delay the next execution in the calling thread + * fo usec microseconds. + * + * @param[in] usec microsecond intervals + * @return 0 on success, non-zero for failures + */ +static inline int metal_sleep_usec(unsigned int usec) +{ + return __metal_sleep_usec(usec); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_SLEEP__H__ */ + diff --git a/libraries/openamp_arduino/src/metal/softirq.h b/libraries/openamp_arduino/src/metal/softirq.h new file mode 100644 index 000000000..52ea00f18 --- /dev/null +++ b/libraries/openamp_arduino/src/metal/softirq.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2019, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file softirq.h + * @brief Soft Interrupt handling primitives for libmetal. + */ + +#ifndef __METAL_SOFTIRQ__H__ +#define __METAL_SOFTIRQ__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup soft irq Interrupt Handling Interfaces + * @{ + */ + +/** + * @brief metal_softirq_init + * + * Initialize libmetal soft IRQs controller + * + * @return 0 on success, or negative value for failure + */ +int metal_softirq_init(void); + +/** + * @brief metal_softirq_dispatch + * + * Dispatch the pending soft IRQs + */ +void metal_softirq_dispatch(void); + +/** + * @brief metal_softirq_allocate + * + * Allocate soft IRQs + * + * This function doesn't have any locking, it is not supposed + * to be called by multiple threads. + * + * @param[in] num number of soft irqs requested + * @return soft irq base for success, or negative value for failure + */ +int metal_softirq_allocate(int num); + +/** + * @brief metal_softirq_set + * + * Set soft IRQ to pending + * + * @param[in] irq soft IRQ ID to set + */ +void metal_softirq_set(int irq); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_SOFTIRQ__H__ */ diff --git a/libraries/openamp_arduino/src/metal/spinlock.h b/libraries/openamp_arduino/src/metal/spinlock.h index f6a711eb7..6992267e6 100755 --- a/libraries/openamp_arduino/src/metal/spinlock.h +++ b/libraries/openamp_arduino/src/metal/spinlock.h @@ -1,71 +1,70 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file spinlock.h - * @brief Spinlock primitives for libmetal. - */ - -#ifndef __METAL_SPINLOCK__H__ -#define __METAL_SPINLOCK__H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup spinlock Spinlock Interfaces - * @{ */ -struct metal_spinlock { - union{ - atomic_int v; - atomic_flag w; - }; -}; - -/** Static metal spinlock initialization. */ -#define METAL_SPINLOCK_INIT {ATOMIC_VAR_INIT(0)} - -/** - * @brief Initialize a libmetal spinlock. - * @param[in] slock Spinlock to initialize. - */ -static inline void metal_spinlock_init(struct metal_spinlock *slock) -{ - atomic_store(&slock->v, 0); -} - -/** - * @brief Acquire a spinlock. - * @param[in] slock Spinlock to acquire. - * @see metal_spinlock_release - */ -static inline void metal_spinlock_acquire(struct metal_spinlock *slock) -{ - while (atomic_flag_test_and_set(&slock->w)) { - metal_cpu_yield(); - } -} - -/** - * @brief Release a previously acquired spinlock. - * @param[in] slock Spinlock to release. - * @see metal_spinlock_acquire - */ -static inline void metal_spinlock_release(struct metal_spinlock *slock) -{ - atomic_flag_clear(&slock->w); -} - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_SPINLOCK__H__ */ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file spinlock.h + * @brief Spinlock primitives for libmetal. + */ + +#ifndef __METAL_SPINLOCK__H__ +#define __METAL_SPINLOCK__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup spinlock Spinlock Interfaces + * @{ + */ + +struct metal_spinlock { + atomic_flag v; +}; + +/** Static metal spinlock initialization. */ +#define METAL_SPINLOCK_INIT {ATOMIC_FLAG_INIT} + +/** + * @brief Initialize a libmetal spinlock. + * @param[in] slock Spinlock to initialize. + */ +static inline void metal_spinlock_init(struct metal_spinlock *slock) +{ + atomic_flag_clear(&slock->v); +} + +/** + * @brief Acquire a spinlock. + * @param[in] slock Spinlock to acquire. + * @see metal_spinlock_release + */ +static inline void metal_spinlock_acquire(struct metal_spinlock *slock) +{ + while (atomic_flag_test_and_set(&slock->v)) { + metal_cpu_yield(); + } +} + +/** + * @brief Release a previously acquired spinlock. + * @param[in] slock Spinlock to release. + * @see metal_spinlock_acquire + */ +static inline void metal_spinlock_release(struct metal_spinlock *slock) +{ + atomic_flag_clear(&slock->v); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_SPINLOCK__H__ */ diff --git a/libraries/openamp_arduino/src/metal/sys.h b/libraries/openamp_arduino/src/metal/sys.h index 12f7f6995..24822ca14 100755 --- a/libraries/openamp_arduino/src/metal/sys.h +++ b/libraries/openamp_arduino/src/metal/sys.h @@ -1,148 +1,152 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file sys.h - * @brief System primitives for libmetal. - * @brief Top level include internal to libmetal library code. - */ - -#ifndef __METAL_SYS__H__ -#define __METAL_SYS__H__ - -#include - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup system Top Level Interfaces - * @{ */ - -/** Physical address type. */ -typedef unsigned long metal_phys_addr_t; - -/** Interrupt request number. */ -typedef int metal_irq_t; - -/** Bad offset into shared memory or I/O region. */ -#define METAL_BAD_OFFSET ((unsigned long)-1) - -/** Bad physical address value. */ -#define METAL_BAD_PHYS ((metal_phys_addr_t)-1) - -/** Bad virtual address value. */ -#define METAL_BAD_VA ((void *)-1) - -/** Bad IRQ. */ -#define METAL_BAD_IRQ ((metal_irq_t)-1) - -/** - * Initialization configuration for libmetal. - */ -struct metal_init_params { - - /** log message handler (defaults to stderr). */ - metal_log_handler log_handler; - - /** default log message level (defaults to emergency). */ - enum metal_log_level log_level; -}; - -/** - * System independent runtime state for libmetal. This is part of a system - * specific singleton data structure (@see _metal). - */ -struct metal_common_state { - /** Current log level. */ - enum metal_log_level log_level; - - /** Current log handler (null for none). */ - metal_log_handler log_handler; - - /** List of registered buses. */ - struct metal_list bus_list; - - /** Generic statically defined shared memory segments. */ - struct metal_list generic_shmem_list; - - /** Generic statically defined devices. */ - struct metal_list generic_device_list; -}; - -struct metal_state; - -#include - -#ifndef METAL_INIT_DEFAULTS -#define METAL_INIT_DEFAULTS \ -{ \ - .log_handler = metal_default_log_handler, \ - .log_level = METAL_LOG_INFO, \ -} -#endif - -/** System specific runtime data. */ -extern struct metal_state _metal; - -/** - * @brief Initialize libmetal. - * - * Initialize the libmetal library. - * - * @param[in] params Initialization params (@see metal_init_params). - * - * @return 0 on success, or -errno on failure. - * - * @see metal_finish - */ -extern int metal_init(const struct metal_init_params *params); - -/** - * @brief Shutdown libmetal. - * - * Shutdown the libmetal library, and release all reserved resources. - * - * @see metal_init - */ -extern void metal_finish(void); - -#ifdef METAL_INTERNAL - -/** - * @brief libmetal system initialization. - * - * This function initializes libmetal on Linux or Generic platforms. This - * involves obtaining necessary pieces of system information (sysfs mount path, - * page size, etc.). - * - * @param[in] params Initialization parameters (@see metal_init_params). - * @return 0 on success, or -errno on failure. - */ -extern int metal_sys_init(const struct metal_init_params *params); - -/** - * @brief libmetal system shutdown. - * - * This function shuts down and releases resources held by libmetal Linux or - * Generic platform layers. - * - * @see metal_sys_init - */ -extern void metal_sys_finish(void); - -#endif - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_SYS__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file sys.h + * @brief System primitives for libmetal. + * @brief Top level include internal to libmetal library code. + */ + +#ifndef __METAL_SYS__H__ +#define __METAL_SYS__H__ + +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup system Top Level Interfaces + * @{ + */ + +/** Physical address type. */ +typedef unsigned long metal_phys_addr_t; + +/** Interrupt request number. */ +typedef int metal_irq_t; + +/** Bad offset into shared memory or I/O region. */ +#define METAL_BAD_OFFSET ((unsigned long)-1) + +/** Bad physical address value. */ +#define METAL_BAD_PHYS ((metal_phys_addr_t)-1) + +/** Bad virtual address value. */ +#define METAL_BAD_VA ((void *)-1) + +/** Bad IRQ. */ +#define METAL_BAD_IRQ ((metal_irq_t)-1) + +/** + * Initialization configuration for libmetal. + */ +struct metal_init_params { + + /** log message handler (defaults to stderr). */ + metal_log_handler log_handler; + + /** default log message level (defaults to emergency). */ + enum metal_log_level log_level; +}; + +/** + * System independent runtime state for libmetal. This is part of a system + * specific singleton data structure (@see _metal). + */ +struct metal_common_state { + /** reference count to track metal_init/metal_finish. */ + int ref_count; + + /** Current log level. */ + enum metal_log_level log_level; + + /** Current log handler (null for none). */ + metal_log_handler log_handler; + + /** List of registered buses. */ + struct metal_list bus_list; + + /** Generic statically defined shared memory segments. */ + struct metal_list generic_shmem_list; + + /** Generic statically defined devices. */ + struct metal_list generic_device_list; +}; + +struct metal_state; + +#include + +#ifndef METAL_INIT_DEFAULTS +#define METAL_INIT_DEFAULTS \ +{ \ + .log_handler = metal_default_log_handler, \ + .log_level = METAL_LOG_INFO, \ +} +#endif + +/** System specific runtime data. */ +extern struct metal_state _metal; + +/** + * @brief Initialize libmetal. + * + * Initialize the libmetal library. + * + * @param[in] params Initialization params (@see metal_init_params). + * + * @return 0 on success, or -errno on failure. + * + * @see metal_finish + */ +extern int metal_init(const struct metal_init_params *params); + +/** + * @brief Shutdown libmetal. + * + * Shutdown the libmetal library, and release all reserved resources. + * + * @see metal_init + */ +extern void metal_finish(void); + +#ifdef METAL_INTERNAL + +/** + * @brief libmetal system initialization. + * + * This function initializes libmetal on Linux or Generic platforms. This + * involves obtaining necessary pieces of system information (sysfs mount path, + * page size, etc.). + * + * @param[in] params Initialization parameters (@see metal_init_params). + * @return 0 on success, or -errno on failure. + */ +extern int metal_sys_init(const struct metal_init_params *params); + +/** + * @brief libmetal system shutdown. + * + * This function shuts down and releases resources held by libmetal Linux or + * Generic platform layers. + * + * @see metal_sys_init + */ +extern void metal_sys_finish(void); + +#endif + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_SYS__H__ */ diff --git a/libraries/openamp_arduino/src/metal/system/generic/alloc.h b/libraries/openamp_arduino/src/metal/system/generic/alloc.h index 5338dd7de..6dc767fa1 100755 --- a/libraries/openamp_arduino/src/metal/system/generic/alloc.h +++ b/libraries/openamp_arduino/src/metal/system/generic/alloc.h @@ -22,12 +22,12 @@ extern "C" { #endif -static inline void *metal_allocate_memory(unsigned int size) +static inline void *__metal_allocate_memory(unsigned int size) { return (malloc(size)); } -static inline void metal_free_memory(void *ptr) +static inline void __metal_free_memory(void *ptr) { free(ptr); } diff --git a/libraries/openamp_arduino/src/metal/system/generic/cortexm/sys.h b/libraries/openamp_arduino/src/metal/system/generic/cortexm/sys.h deleted file mode 100755 index 35597d616..000000000 --- a/libraries/openamp_arduino/src/metal/system/generic/cortexm/sys.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of Xilinx nor the names of its contributors may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * @file generic/mp1_m4/sys.h - * @brief generic mp1_m4 system primitives for libmetal. - */ - -#ifndef __METAL_GENERIC_SYS__H__ -#error "Include metal/sys.h instead of metal/generic/cortexm/sys.h" -#endif - -#ifndef __METAL_GENERIC_MP1_M4_SYS__H__ -#define __METAL_GENERIC_MP1_M4_SYS__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MAX_IRQS) -#define MAX_IRQS 8 /**< maximum number of irqs */ -#endif - -static inline void sys_irq_enable(unsigned int vector) -{ - (void)vector; -} - -static inline void sys_irq_disable(unsigned int vector) -{ - (void)vector; -} - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_GENERIC_MP1_M4_SYS__H__ */ diff --git a/libraries/openamp_arduino/src/metal/system/generic/sys.h b/libraries/openamp_arduino/src/metal/system/generic/sys.h index f5a236852..0a19b2362 100755 --- a/libraries/openamp_arduino/src/metal/system/generic/sys.h +++ b/libraries/openamp_arduino/src/metal/system/generic/sys.h @@ -25,8 +25,6 @@ #include #include -#include "./cortexm/sys.h" - #ifdef __cplusplus extern "C" { #endif diff --git a/libraries/openamp_arduino/src/metal/time.h b/libraries/openamp_arduino/src/metal/time.h index b05e6794a..bc24e6134 100755 --- a/libraries/openamp_arduino/src/metal/time.h +++ b/libraries/openamp_arduino/src/metal/time.h @@ -1,41 +1,42 @@ -/* - * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file time.h - * @brief Time primitives for libmetal. - */ - -#ifndef __METAL_TIME__H__ -#define __METAL_TIME__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup time TIME Interfaces - * @{ */ - -#include -#include - -/** - * @brief get timestamp - * This function returns the timestampe as unsigned long long - * value. - * - * @return timestamp - */ -unsigned long long metal_get_timestamp(void); - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_TIME__H__ */ - +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file time.h + * @brief Time primitives for libmetal. + */ + +#ifndef __METAL_TIME__H__ +#define __METAL_TIME__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup time TIME Interfaces + * @{ + */ + +/** + * @brief get timestamp + * This function returns the timestampe as unsigned long long + * value. + * + * @return timestamp + */ +unsigned long long metal_get_timestamp(void); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_TIME__H__ */ + diff --git a/libraries/openamp_arduino/src/metal/utilities.h b/libraries/openamp_arduino/src/metal/utilities.h index 95a6670a9..6b592e017 100755 --- a/libraries/openamp_arduino/src/metal/utilities.h +++ b/libraries/openamp_arduino/src/metal/utilities.h @@ -1,152 +1,165 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file utilities.h - * @brief Utility routines for libmetal. - */ - -#ifndef __METAL_UTILITIES__H__ -#define __METAL_UTILITIES__H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup utilities Simple Utilities - * @{ */ - -/** Marker for unused function arguments/variables. */ -#define metal_unused(x) do { (x) = (x); } while (0) - -/** Figure out number of elements in an array. */ -#define metal_dim(x) (sizeof(x) / sizeof(x[0])) - -/** Minimum of two numbers (warning: multiple evaluation!). */ -#define metal_min(x, y) ((x) < (y) ? (x) : (y)) - -/** Maximum of two numbers (warning: multiple evaluation!). */ -#define metal_max(x, y) ((x) > (y) ? (x) : (y)) - -/** Sign of a number [-1, 0, or 1] (warning: multiple evaluation!). */ -#define metal_sign(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0)) - -/** Align 'size' down to a multiple of 'align' (must be a power of two). */ -#define metal_align_down(size, align) \ - ((size) & ~((align) - 1)) - -/** Align 'size' up to a multiple of 'align' (must be a power of two). */ -#define metal_align_up(size, align) \ - metal_align_down((size) + (align) - 1, align) - -/** Divide (and round down). */ -#define metal_div_round_down(num, den) \ - ((num) / (den)) - -/** Divide (and round up). */ -#define metal_div_round_up(num, den) \ - metal_div_round_down((num) + (den) - 1, (den)) - -/** Align 'ptr' down to a multiple of 'align' (must be a power of two). */ -#define metal_ptr_align_down(ptr, align) \ - (void *)(metal_align_down((uintptr_t)(ptr), (uintptr_t)(align))) - -/** Align 'ptr' up to a multiple of 'align' (must be a power of two). */ -#define metal_ptr_align_up(ptr, align) \ - (void *)(metal_align_up((uintptr_t)(ptr), (uintptr_t)(align))) - -/** Compute offset of a field within a structure. */ -#define metal_offset_of(structure, member) \ - ((uintptr_t) &(((structure *) 0)->member)) - -/** Compute pointer to a structure given a pointer to one of its fields. */ -#define metal_container_of(ptr, structure, member) \ - (void *)((uintptr_t)(ptr) - metal_offset_of(structure, member)) - -#define METAL_BITS_PER_ULONG (8 * sizeof(unsigned long)) - -#define metal_bit(bit) (1UL << (bit)) - -#define metal_bitmap_longs(x) metal_div_round_up((x), METAL_BITS_PER_ULONG) - -static inline void metal_bitmap_set_bit(unsigned long *bitmap, int bit) -{ - bitmap[bit / METAL_BITS_PER_ULONG] |= - metal_bit(bit & (METAL_BITS_PER_ULONG - 1)); -} - -static inline int metal_bitmap_is_bit_set(unsigned long *bitmap, int bit) -{ - return bitmap[bit / METAL_BITS_PER_ULONG] & - metal_bit(bit & (METAL_BITS_PER_ULONG - 1)); -} - -static inline void metal_bitmap_clear_bit(unsigned long *bitmap, int bit) -{ - bitmap[bit / METAL_BITS_PER_ULONG] &= - ~metal_bit(bit & (METAL_BITS_PER_ULONG - 1)); -} - -static inline int metal_bitmap_is_bit_clear(unsigned long *bitmap, int bit) -{ - return !metal_bitmap_is_bit_set(bitmap, bit); -} - -static inline unsigned int -metal_bitmap_next_set_bit(unsigned long *bitmap, unsigned int start, - unsigned int max) -{ - unsigned int bit; - for (bit = start; - bit < max && !metal_bitmap_is_bit_set(bitmap, bit); - bit ++) - ; - return bit; -} - -#define metal_bitmap_for_each_set_bit(bitmap, bit, max) \ - for ((bit) = metal_bitmap_next_set_bit((bitmap), 0, (max)); \ - (bit) < (max); \ - (bit) = metal_bitmap_next_set_bit((bitmap), (bit), (max))) - -static inline unsigned int -metal_bitmap_next_clear_bit(unsigned long *bitmap, unsigned int start, - unsigned int max) -{ - unsigned int bit; - for (bit = start; - bit < max && !metal_bitmap_is_bit_clear(bitmap, bit); - bit ++) - ; - return bit; -} - -#define metal_bitmap_for_each_clear_bit(bitmap, bit, max) \ - for ((bit) = metal_bitmap_next_clear_bit((bitmap), 0, (max)); \ - (bit) < (max); \ - (bit) = metal_bitmap_next_clear_bit((bitmap), (bit), (max))) - -static inline unsigned long metal_log2(unsigned long in) -{ - unsigned long result; - - metal_assert((in & (in - 1)) == 0); - - for (result = 0; (1UL << result) < in; result ++) - ; - return result; -} - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_UTILITIES__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file utilities.h + * @brief Utility routines for libmetal. + */ + +#ifndef __METAL_UTILITIES__H__ +#define __METAL_UTILITIES__H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup utilities Simple Utilities + * @{ + */ + +#ifndef MB +#define MB (1024UL << 10UL) +#endif + +#ifndef GB +#define GB (MB << 10UL) +#endif + +/** Marker for unused function arguments/variables. */ +#define metal_unused(x) do { (x) = (x); } while (0) + +/** Figure out number of elements in an array. */ +#define metal_dim(x) (sizeof(x) / sizeof(x[0])) + +/** Minimum of two numbers (warning: multiple evaluation!). */ +#define metal_min(x, y) ((x) < (y) ? (x) : (y)) + +/** Maximum of two numbers (warning: multiple evaluation!). */ +#define metal_max(x, y) ((x) > (y) ? (x) : (y)) + +/** Sign of a number [-1, 0, or 1] (warning: multiple evaluation!). */ +#define metal_sign(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0)) + +/** Align 'size' down to a multiple of 'align' (must be a power of two). */ +#define metal_align_down(size, align) \ + ((size) & ~((align) - 1)) + +/** Align 'size' up to a multiple of 'align' (must be a power of two). */ +#define metal_align_up(size, align) \ + metal_align_down((size) + (align) - 1, align) + +/** Divide (and round down). */ +#define metal_div_round_down(num, den) \ + ((num) / (den)) + +/** Divide (and round up). */ +#define metal_div_round_up(num, den) \ + metal_div_round_down((num) + (den) - 1, (den)) + +/** Align 'ptr' down to a multiple of 'align' (must be a power of two). */ +#define metal_ptr_align_down(ptr, align) \ + (void *)(metal_align_down((uintptr_t)(ptr), (uintptr_t)(align))) + +/** Align 'ptr' up to a multiple of 'align' (must be a power of two). */ +#define metal_ptr_align_up(ptr, align) \ + (void *)(metal_align_up((uintptr_t)(ptr), (uintptr_t)(align))) + +/** Compute offset of a field within a structure. */ +#define metal_offset_of(structure, member) \ + ((uintptr_t)&(((structure *)0)->member)) + +/** Compute pointer to a structure given a pointer to one of its fields. */ +#define metal_container_of(ptr, structure, member) \ + (void *)((uintptr_t)(ptr) - metal_offset_of(structure, member)) + +#define METAL_BITS_PER_ULONG (CHAR_BIT * sizeof(unsigned long)) + +#define metal_bit(bit) (1UL << (bit)) + +#define metal_bitmap_longs(x) metal_div_round_up((x), METAL_BITS_PER_ULONG) + +static inline void metal_bitmap_set_bit(unsigned long *bitmap, int bit) +{ + bitmap[bit / METAL_BITS_PER_ULONG] |= + metal_bit(bit & (METAL_BITS_PER_ULONG - 1)); +} + +static inline int metal_bitmap_is_bit_set(unsigned long *bitmap, int bit) +{ + return ((bitmap[bit / METAL_BITS_PER_ULONG] & + metal_bit(bit & (METAL_BITS_PER_ULONG - 1))) == 0) ? 0 : 1; +} + +static inline void metal_bitmap_clear_bit(unsigned long *bitmap, int bit) +{ + bitmap[bit / METAL_BITS_PER_ULONG] &= + ~metal_bit(bit & (METAL_BITS_PER_ULONG - 1)); +} + +static inline int metal_bitmap_is_bit_clear(unsigned long *bitmap, int bit) +{ + return !metal_bitmap_is_bit_set(bitmap, bit); +} + +static inline unsigned int +metal_bitmap_next_set_bit(unsigned long *bitmap, unsigned int start, + unsigned int max) +{ + unsigned int bit; + + for (bit = start; + bit < max && !metal_bitmap_is_bit_set(bitmap, bit); + bit++) + ; + return bit; +} + +#define metal_bitmap_for_each_set_bit(bitmap, bit, max) \ + for ((bit) = metal_bitmap_next_set_bit((bitmap), 0, (max)); \ + (bit) < (max); \ + (bit) = metal_bitmap_next_set_bit((bitmap), (bit + 1), (max))) + +static inline unsigned int +metal_bitmap_next_clear_bit(unsigned long *bitmap, unsigned int start, + unsigned int max) +{ + unsigned int bit; + + for (bit = start; + bit < max && !metal_bitmap_is_bit_clear(bitmap, bit); + bit++) + ; + return bit; +} + +#define metal_bitmap_for_each_clear_bit(bitmap, bit, max) \ + for ((bit) = metal_bitmap_next_clear_bit((bitmap), 0, (max)); \ + (bit) < (max); \ + (bit) = metal_bitmap_next_clear_bit((bitmap), (bit + 1), (max))) + +static inline unsigned long metal_log2(unsigned long in) +{ + unsigned long result; + + metal_assert((in & (in - 1)) == 0); + + for (result = 0; (1UL << result) < in; result++) + ; + return result; +} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_UTILITIES__H__ */ diff --git a/libraries/openamp_arduino/src/metal/version.h b/libraries/openamp_arduino/src/metal/version.h index 96666b3aa..32be7ae69 100755 --- a/libraries/openamp_arduino/src/metal/version.h +++ b/libraries/openamp_arduino/src/metal/version.h @@ -1,76 +1,77 @@ -/* - * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * @file version.h - * @brief Library version information for libmetal. - */ - -#ifndef __METAL_VERSION__H__ -#define __METAL_VERSION__H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup versions Library Version Interfaces - * @{ */ - -/** - * @brief Library major version number. - * - * Return the major version number of the library linked into the application. - * This is required to match the value of METAL_VER_MAJOR, which is the major - * version of the library that the application was compiled against. - * - * @return Library major version number. - * @see METAL_VER_MAJOR - */ -extern int metal_ver_major(void); - -/** - * @brief Library minor version number. - * - * Return the minor version number of the library linked into the application. - * This could differ from the value of METAL_VER_MINOR, which is the minor - * version of the library that the application was compiled against. - * - * @return Library minor version number. - * @see METAL_VER_MINOR - */ -extern int metal_ver_minor(void); - -/** - * @brief Library patch level. - * - * Return the patch level of the library linked into the application. This - * could differ from the value of METAL_VER_PATCH, which is the patch level of - * the library that the application was compiled against. - * - * @return Library patch level. - * @see METAL_VER_PATCH - */ -extern int metal_ver_patch(void); - -/** - * @brief Library version string. - * - * Return the version string of the library linked into the application. This - * could differ from the value of METAL_VER, which is the version string of - * the library that the application was compiled against. - * - * @return Library version string. - * @see METAL_VER - */ -extern const char *metal_ver(void); - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __METAL_VERSION__H__ */ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file version.h + * @brief Library version information for libmetal. + */ + +#ifndef __METAL_VERSION__H__ +#define __METAL_VERSION__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup versions Library Version Interfaces + * @{ + */ + +/** + * @brief Library major version number. + * + * Return the major version number of the library linked into the application. + * This is required to match the value of METAL_VER_MAJOR, which is the major + * version of the library that the application was compiled against. + * + * @return Library major version number. + * @see METAL_VER_MAJOR + */ +extern int metal_ver_major(void); + +/** + * @brief Library minor version number. + * + * Return the minor version number of the library linked into the application. + * This could differ from the value of METAL_VER_MINOR, which is the minor + * version of the library that the application was compiled against. + * + * @return Library minor version number. + * @see METAL_VER_MINOR + */ +extern int metal_ver_minor(void); + +/** + * @brief Library patch level. + * + * Return the patch level of the library linked into the application. This + * could differ from the value of METAL_VER_PATCH, which is the patch level of + * the library that the application was compiled against. + * + * @return Library patch level. + * @see METAL_VER_PATCH + */ +extern int metal_ver_patch(void); + +/** + * @brief Library version string. + * + * Return the version string of the library linked into the application. This + * could differ from the value of METAL_VER, which is the version string of + * the library that the application was compiled against. + * + * @return Library version string. + * @see METAL_VER + */ +extern const char *metal_ver(void); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_VERSION__H__ */ diff --git a/libraries/openamp_arduino/src/openamp.c b/libraries/openamp_arduino/src/openamp.c index 43180dadd..0ead7620b 100644 --- a/libraries/openamp_arduino/src/openamp.c +++ b/libraries/openamp_arduino/src/openamp.c @@ -135,7 +135,7 @@ int MX_OPENAMP_Init(int RPMsgRole, rpmsg_ns_bind_cb ns_bind_cb) } rpmsg_virtio_init_shm_pool(&shpool, (void *)VRING_BUFF_ADDRESS, - (size_t)SHM_SIZE); + (size_t)VRING_BUFF_SIZE); rpmsg_init_vdev(&rvdev, vdev, ns_bind_cb, shm_io, &shpool); @@ -169,14 +169,16 @@ int OPENAMP_check_for_message(void) unsigned long millis(); -void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline) +int OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline) { while(!is_rpmsg_ept_ready(rp_ept) && (millis() < deadline)) { MAILBOX_Poll(rvdev.vdev); } if (millis() >= deadline) { - printf("OPENAMP_Wait_EndPointready %X timed out\n\r", (unsigned int)rp_ept); + //printf("OPENAMP_Wait_EndPointready %X timed out\n\r", (unsigned int)rp_ept); + return -1; } + return 0; } /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/libraries/openamp_arduino/src/openamp.h b/libraries/openamp_arduino/src/openamp.h index 44ada3b33..e604c0cec 100644 --- a/libraries/openamp_arduino/src/openamp.h +++ b/libraries/openamp_arduino/src/openamp.h @@ -49,7 +49,7 @@ int OPENAMP_create_endpoint(struct rpmsg_endpoint *ept, const char *name, int OPENAMP_check_for_message(void); /* Wait loop on endpoint ready ( message dest address is know)*/ -void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline); +int OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline); #ifdef __cplusplus } diff --git a/libraries/openamp_arduino/src/openamp/elf_loader.h b/libraries/openamp_arduino/src/openamp/elf_loader.h index acf3d2991..a2950f8d7 100755 --- a/libraries/openamp_arduino/src/openamp/elf_loader.h +++ b/libraries/openamp_arduino/src/openamp/elf_loader.h @@ -1,428 +1,445 @@ -/* - * Copyright (c) 2014, Mentor Graphics Corporation - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef ELF_LOADER_H_ -#define ELF_LOADER_H_ - -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -/* ELF32 base types - 32-bit. */ -typedef uint32_t Elf32_Addr; -typedef uint16_t Elf32_Half; -typedef uint32_t Elf32_Off; -typedef int32_t Elf32_Sword; -typedef uint32_t Elf32_Word; - -/* ELF64 base types - 64-bit. */ -typedef uint64_t Elf64_Addr; -typedef uint16_t Elf64_Half; -typedef uint64_t Elf64_Off; -typedef int32_t Elf64_Sword; -typedef uint32_t Elf64_Word; -typedef uint64_t Elf64_Xword; -typedef int64_t Elf64_Sxword; - -/* Size of ELF identifier field in the ELF file header. */ -#define EI_NIDENT 16 - -/* ELF32 file header */ -typedef struct { - unsigned char e_ident[EI_NIDENT]; - Elf32_Half e_type; - Elf32_Half e_machine; - Elf32_Word e_version; - Elf32_Addr e_entry; - Elf32_Off e_phoff; - Elf32_Off e_shoff; - Elf32_Word e_flags; - Elf32_Half e_ehsize; - Elf32_Half e_phentsize; - Elf32_Half e_phnum; - Elf32_Half e_shentsize; - Elf32_Half e_shnum; - Elf32_Half e_shstrndx; -} Elf32_Ehdr; - -/* ELF64 file header */ -typedef struct { - unsigned char e_ident[EI_NIDENT]; - Elf64_Half e_type; - Elf64_Half e_machine; - Elf64_Word e_version; - Elf64_Addr e_entry; - Elf64_Off e_phoff; - Elf64_Off e_shoff; - Elf64_Word e_flags; - Elf64_Half e_ehsize; - Elf64_Half e_phentsize; - Elf64_Half e_phnum; - Elf64_Half e_shentsize; - Elf64_Half e_shnum; - Elf64_Half e_shstrndx; -} Elf64_Ehdr; - -/* e_ident */ -#define ET_NONE 0 -#define ET_REL 1 /* Re-locatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ -#define ET_CORE 4 /* Core file */ -#define ET_LOOS 0xfe00 /* Operating system-specific */ -#define ET_HIOS 0xfeff /* Operating system-specific */ -#define ET_LOPROC 0xff00 /* remote_proc-specific */ -#define ET_HIPROC 0xffff /* remote_proc-specific */ - -/* e_machine */ -#define EM_ARM 40 /* ARM/Thumb Architecture */ - -/* e_version */ -#define EV_CURRENT 1 /* Current version */ - -/* e_ident[] Identification Indexes */ -#define EI_MAG0 0 /* File identification */ -#define EI_MAG1 1 /* File identification */ -#define EI_MAG2 2 /* File identification */ -#define EI_MAG3 3 /* File identification */ -#define EI_CLASS 4 /* File class */ -#define EI_DATA 5 /* Data encoding */ -#define EI_VERSION 6 /* File version */ -#define EI_OSABI 7 /* Operating system/ABI identification */ -#define EI_ABIVERSION 8 /* ABI version */ -#define EI_PAD 9 /* Start of padding bytes */ -#define EI_NIDENT 16 /* Size of e_ident[] */ - -/* - * EI_MAG0 to EI_MAG3 - A file's first 4 bytes hold amagic number, identifying - * the file as an ELF object file - */ -#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ -#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ -#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ -#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ -#define ELFMAG "\177ELF" -#define SELFMAG 4 - -/* - * EI_CLASS - The next byte, e_ident[EI_CLASS], identifies the file's class, or - * capacity. - */ -#define ELFCLASSNONE 0 /* Invalid class */ -#define ELFCLASS32 1 /* 32-bit objects */ -#define ELFCLASS64 2 /* 64-bit objects */ - -/* - * EI_DATA - Byte e_ident[EI_DATA] specifies the data encoding of the - * remote_proc-specific data in the object file. The following encodings are - * currently defined. - */ -#define ELFDATANONE 0 /* Invalid data encoding */ -#define ELFDATA2LSB 1 /* See Data encodings, below */ -#define ELFDATA2MSB 2 /* See Data encodings, below */ - -/* EI_OSABI - We do not define an OS specific ABI */ -#define ELFOSABI_NONE 0 - -/* ELF32 program header */ -typedef struct elf32_phdr{ - Elf32_Word p_type; - Elf32_Off p_offset; - Elf32_Addr p_vaddr; - Elf32_Addr p_paddr; - Elf32_Word p_filesz; - Elf32_Word p_memsz; - Elf32_Word p_flags; - Elf32_Word p_align; -} Elf32_Phdr; - -/* ELF64 program header */ -typedef struct elf64_phdr { - Elf64_Word p_type; - Elf64_Word p_flags; - Elf64_Off p_offset; - Elf64_Addr p_vaddr; - Elf64_Addr p_paddr; - Elf64_Xword p_filesz; - Elf64_Xword p_memsz; - Elf64_Xword p_align; -} Elf64_Phdr; - -/* segment types */ -#define PT_NULL 0 -#define PT_LOAD 1 -#define PT_DYNAMIC 2 -#define PT_INTERP 3 -#define PT_NOTE 4 -#define PT_SHLIB 5 -#define PT_PHDR 6 -#define PT_TLS 7 /* Thread local storage segment */ -#define PT_LOOS 0x60000000 /* OS-specific */ -#define PT_HIOS 0x6fffffff /* OS-specific */ -#define PT_LOPROC 0x70000000 -#define PT_HIPROC 0x7fffffff - -/* ELF32 section header. */ -typedef struct { - Elf32_Word sh_name; - Elf32_Word sh_type; - Elf32_Word sh_flags; - Elf32_Addr sh_addr; - Elf32_Off sh_offset; - Elf32_Word sh_size; - Elf32_Word sh_link; - Elf32_Word sh_info; - Elf32_Word sh_addralign; - Elf32_Word sh_entsize; -} Elf32_Shdr; - -/* ELF64 section header. */ -typedef struct { - Elf64_Word sh_name; - Elf64_Word sh_type; - Elf64_Xword sh_flags; - Elf64_Addr sh_addr; - Elf64_Off sh_offset; - Elf64_Xword sh_size; - Elf64_Word sh_link; - Elf64_Word sh_info; - Elf64_Xword sh_addralign; - Elf64_Xword sh_entsize; -} Elf64_Shdr; - -/* sh_type */ -#define SHT_NULL 0 -#define SHT_PROGBITS 1 -#define SHT_SYMTAB 2 -#define SHT_STRTAB 3 -#define SHT_RELA 4 -#define SHT_HASH 5 -#define SHT_DYNAMIC 6 -#define SHT_NOTE 7 -#define SHT_NOBITS 8 -#define SHT_REL 9 -#define SHT_SHLIB 10 -#define SHT_DYNSYM 11 -#define SHT_INIT_ARRAY 14 -#define SHT_FINI_ARRAY 15 -#define SHT_PREINIT_ARRAY 16 -#define SHT_GROUP 17 -#define SHT_SYMTAB_SHNDX 18 -#define SHT_LOOS 0x60000000 -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 -#define SHT_HIPROC 0x7fffffff -#define SHT_LOUSER 0x80000000 -#define SHT_HIUSER 0xffffffff - -/* sh_flags */ -#define SHF_WRITE 0x1 -#define SHF_ALLOC 0x2 -#define SHF_EXECINSTR 0x4 -#define SHF_MASKPROC 0xf0000000 - -/* Relocation entry (without addend) */ -typedef struct { - Elf32_Addr r_offset; - Elf32_Word r_info; - -} Elf32_Rel; - -typedef struct { - Elf64_Addr r_offset; - Elf64_Xword r_info; - -} Elf64_Rel; - -/* Relocation entry with addend */ -typedef struct { - Elf32_Addr r_offset; - Elf32_Word r_info; - Elf32_Sword r_addend; - -} Elf32_Rela; - -typedef struct elf64_rela { - Elf64_Addr r_offset; - Elf64_Xword r_info; - Elf64_Sxword r_addend; -} Elf64_Rela; - -/* Macros to extract information from 'r_info' field of relocation entries */ -#define ELF32_R_SYM(i) ((i) >> 8) -#define ELF32_R_TYPE(i) ((unsigned char)(i)) -#define ELF64_R_SYM(i) ((i) >> 32) -#define ELF64_R_TYPE(i) ((i) & 0xffffffff) - -/* Symbol table entry */ -typedef struct { - Elf32_Word st_name; - Elf32_Addr st_value; - Elf32_Word st_size; - unsigned char st_info; - unsigned char st_other; - Elf32_Half st_shndx; - -} Elf32_Sym; - -typedef struct elf64_sym { - Elf64_Word st_name; - unsigned char st_info; - unsigned char st_other; - Elf64_Half st_shndx; - Elf64_Addr st_value; - Elf64_Xword st_size; -} Elf64_Sym; - -/* ARM specific dynamic relocation codes */ -#define R_ARM_GLOB_DAT 21 /* 0x15 */ -#define R_ARM_JUMP_SLOT 22 /* 0x16 */ -#define R_ARM_RELATIVE 23 /* 0x17 */ -#define R_ARM_ABS32 2 /* 0x02 */ - -/* ELF decoding information */ -struct elf32_info { - Elf32_Ehdr ehdr; - unsigned int load_state; - Elf32_Phdr *phdrs; - Elf32_Shdr *shdrs; - void *shstrtab; -}; - -struct elf64_info { - Elf64_Ehdr ehdr; - unsigned int load_state; - Elf64_Phdr *phdrs; - Elf64_Shdr *shdrs; - void *shstrtab; -}; - -#define ELF_STATE_INIT 0x0UL -#define ELF_STATE_WAIT_FOR_PHDRS 0x100UL -#define ELF_STATE_WAIT_FOR_SHDRS 0x200UL -#define ELF_STATE_WAIT_FOR_SHSTRTAB 0x400UL -#define ELF_STATE_HDRS_COMPLETE 0x800UL -#define ELF_STATE_MASK 0xFF00UL -#define ELF_NEXT_SEGMENT_MASK 0x00FFUL - -extern struct loader_ops elf_ops; - -/** - * elf_identify - check if it is an ELF file - * - * It will check if the input image header is an ELF header. - * - * @img_data: firmware private data which will be passed to user defined loader - * operations - * @len: firmware header length - * - * return 0 for success or negative value for failure. - */ -int elf_identify(const void *img_data, size_t len); - -/** - * elf_load_header - Load ELF headers - * - * It will get the ELF header, the program header, and the section header. - * - * @img_data: image data - * @offset: input image data offset to the start of image file - * @len: input image data length - * @img_info: pointer to store image information data - * @last_load_state: last state return by this function - * @noffset: pointer to next offset required by loading ELF header - * @nlen: pointer to next data length required by loading ELF header - * - * return ELF loading header state, or negative value for failure - */ -int elf_load_header(const void *img_data, size_t offset, size_t len, - void **img_info, int last_load_state, - size_t *noffset, size_t *nlen); - -/** - * elf_load - load ELF data - * - * It will parse the ELF image and return the target device address, - * offset to the start of the ELF image of the data to load and the - * length of the data to load. - * - * @rproc: pointer to remoteproc instance - * @img_data: image data which will passed to the function. - * it can be NULL, if image data doesn't need to be handled - * by the load function. E.g. binary data which was - * loaded to the target memory. - * @offset: last loaded image data offset to the start of image file - * @len: last loaded image data length - * @img_info: pointer to store image information data - * @last_load_state: the returned state of the last function call. - * @da: target device address, if the data to load is not for target memory - * the da will be set to ANY. - * @noffset: pointer to next offset required by loading ELF header - * @nlen: pointer to next data length required by loading ELF header - * @padding: value to pad it is possible that a size of a segment in memory - * is larger than what it is in the ELF image. e.g. a segment - * can have stack section .bss. It doesn't need to copy image file - * space, in this case, it will be packed with 0. - * @nmemsize: pointer to next data target memory size. The size of a segment - * in the target memory can be larger than the its size in the - * image file. - * - * return 0 for success, otherwise negative value for failure - */ -int elf_load(struct remoteproc *rproc, const void *img_data, - size_t offset, size_t len, - void **img_info, int last_load_state, - metal_phys_addr_t *da, - size_t *noffset, size_t *nlen, - unsigned char *padding, size_t *nmemsize); - -/** - * elf_release - Release ELF image information - * - * It will release ELF image information data. - * - * @img_info: pointer to ELF image information - */ -void elf_release(void *img_info); - -/** - * elf_get_entry - Get entry point - * - * It will return entry point specified in the ELF file. - * - * @img_info: pointer to ELF image information - * - * return entry address - */ -metal_phys_addr_t elf_get_entry(void *img_info); - -/** - * elf_locate_rsc_table - locate the resource table information - * - * It will return the length of the resource table, and the device address of - * the resource table. - * - * @img_info: pointer to ELF image information - * @da: pointer to the device address - * @offset: pointer to the offset to in the ELF image of the resource - * table section. - * @size: pointer to the size of the resource table section. - * - * return 0 if successfully locate the resource table, negative value for - * failure. - */ -int elf_locate_rsc_table(void *img_info, metal_phys_addr_t *da, - size_t *offset, size_t *size); - -#if defined __cplusplus -} -#endif - -#endif /* ELF_LOADER_H_ */ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ELF_LOADER_H_ +#define ELF_LOADER_H_ + +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* ELF32 base types - 32-bit. */ +typedef uint32_t Elf32_Addr; +typedef uint16_t Elf32_Half; +typedef uint32_t Elf32_Off; +typedef int32_t Elf32_Sword; +typedef uint32_t Elf32_Word; + +/* ELF64 base types - 64-bit. */ +typedef uint64_t Elf64_Addr; +typedef uint16_t Elf64_Half; +typedef uint64_t Elf64_Off; +typedef int32_t Elf64_Sword; +typedef uint32_t Elf64_Word; +typedef uint64_t Elf64_Xword; +typedef int64_t Elf64_Sxword; + +/* Size of ELF identifier field in the ELF file header. */ +#define EI_NIDENT 16 + +/* ELF32 file header */ +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; +} Elf32_Ehdr; + +/* ELF64 file header */ +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf64_Half e_type; + Elf64_Half e_machine; + Elf64_Word e_version; + Elf64_Addr e_entry; + Elf64_Off e_phoff; + Elf64_Off e_shoff; + Elf64_Word e_flags; + Elf64_Half e_ehsize; + Elf64_Half e_phentsize; + Elf64_Half e_phnum; + Elf64_Half e_shentsize; + Elf64_Half e_shnum; + Elf64_Half e_shstrndx; +} Elf64_Ehdr; + +/* e_ident */ +#define ET_NONE 0 +#define ET_REL 1 /* Re-locatable file */ +#define ET_EXEC 2 /* Executable file */ +#define ET_DYN 3 /* Shared object file */ +#define ET_CORE 4 /* Core file */ +#define ET_LOOS 0xfe00 /* Operating system-specific */ +#define ET_HIOS 0xfeff /* Operating system-specific */ +#define ET_LOPROC 0xff00 /* remote_proc-specific */ +#define ET_HIPROC 0xffff /* remote_proc-specific */ + +/* e_machine */ +#define EM_ARM 40 /* ARM/Thumb Architecture */ + +/* e_version */ +#define EV_CURRENT 1 /* Current version */ + +/* e_ident[] Identification Indexes */ +#define EI_MAG0 0 /* File identification */ +#define EI_MAG1 1 /* File identification */ +#define EI_MAG2 2 /* File identification */ +#define EI_MAG3 3 /* File identification */ +#define EI_CLASS 4 /* File class */ +#define EI_DATA 5 /* Data encoding */ +#define EI_VERSION 6 /* File version */ +#define EI_OSABI 7 /* Operating system/ABI identification */ +#define EI_ABIVERSION 8 /* ABI version */ +#define EI_PAD 9 /* Start of padding bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* + * EI_MAG0 to EI_MAG3 - A file's first 4 bytes hold amagic number, identifying + * the file as an ELF object file + */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" +#define SELFMAG 4 + +/* + * EI_CLASS - The next byte, e_ident[EI_CLASS], identifies the file's class, or + * capacity. + */ +#define ELFCLASSNONE 0 /* Invalid class */ +#define ELFCLASS32 1 /* 32-bit objects */ +#define ELFCLASS64 2 /* 64-bit objects */ + +/* + * EI_DATA - Byte e_ident[EI_DATA] specifies the data encoding of the + * remote_proc-specific data in the object file. The following encodings are + * currently defined. + */ +#define ELFDATANONE 0 /* Invalid data encoding */ +#define ELFDATA2LSB 1 /* See Data encodings, below */ +#define ELFDATA2MSB 2 /* See Data encodings, below */ + +/* EI_OSABI - We do not define an OS specific ABI */ +#define ELFOSABI_NONE 0 + +/* ELF32 program header */ +typedef struct elf32_phdr { + Elf32_Word p_type; + Elf32_Off p_offset; + Elf32_Addr p_vaddr; + Elf32_Addr p_paddr; + Elf32_Word p_filesz; + Elf32_Word p_memsz; + Elf32_Word p_flags; + Elf32_Word p_align; +} Elf32_Phdr; + +/* ELF64 program header */ +typedef struct elf64_phdr { + Elf64_Word p_type; + Elf64_Word p_flags; + Elf64_Off p_offset; + Elf64_Addr p_vaddr; + Elf64_Addr p_paddr; + Elf64_Xword p_filesz; + Elf64_Xword p_memsz; + Elf64_Xword p_align; +} Elf64_Phdr; + +/* segment types */ +#define PT_NULL 0 +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 +#define PT_NOTE 4 +#define PT_SHLIB 5 +#define PT_PHDR 6 +#define PT_TLS 7 /* Thread local storage segment */ +#define PT_LOOS 0x60000000 /* OS-specific */ +#define PT_HIOS 0x6fffffff /* OS-specific */ +#define PT_LOPROC 0x70000000 +#define PT_HIPROC 0x7fffffff + +/* ELF32 section header. */ +typedef struct { + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; +} Elf32_Shdr; + +/* ELF64 section header. */ +typedef struct { + Elf64_Word sh_name; + Elf64_Word sh_type; + Elf64_Xword sh_flags; + Elf64_Addr sh_addr; + Elf64_Off sh_offset; + Elf64_Xword sh_size; + Elf64_Word sh_link; + Elf64_Word sh_info; + Elf64_Xword sh_addralign; + Elf64_Xword sh_entsize; +} Elf64_Shdr; + +/* sh_type */ +#define SHT_NULL 0 +#define SHT_PROGBITS 1 +#define SHT_SYMTAB 2 +#define SHT_STRTAB 3 +#define SHT_RELA 4 +#define SHT_HASH 5 +#define SHT_DYNAMIC 6 +#define SHT_NOTE 7 +#define SHT_NOBITS 8 +#define SHT_REL 9 +#define SHT_SHLIB 10 +#define SHT_DYNSYM 11 +#define SHT_INIT_ARRAY 14 +#define SHT_FINI_ARRAY 15 +#define SHT_PREINIT_ARRAY 16 +#define SHT_GROUP 17 +#define SHT_SYMTAB_SHNDX 18 +#define SHT_LOOS 0x60000000 +#define SHT_HIOS 0x6fffffff +#define SHT_LOPROC 0x70000000 +#define SHT_HIPROC 0x7fffffff +#define SHT_LOUSER 0x80000000 +#define SHT_HIUSER 0xffffffff + +/* sh_flags */ +#define SHF_WRITE 0x1 +#define SHF_ALLOC 0x2 +#define SHF_EXECINSTR 0x4 +#define SHF_MASKPROC 0xf0000000 + +/* Relocation entry (without addend) */ +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; +} Elf32_Rel; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; +} Elf64_Rel; + +/* Relocation entry with addend */ +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; + Elf32_Sword r_addend; +} Elf32_Rela; + +typedef struct elf64_rela { + Elf64_Addr r_offset; + Elf64_Xword r_info; + Elf64_Sxword r_addend; +} Elf64_Rela; + +/* Macros to extract information from 'r_info' field of relocation entries */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char)(i)) +#define ELF64_R_SYM(i) ((i) >> 32) +#define ELF64_R_TYPE(i) ((i) & 0xffffffff) + +/* Symbol table entry */ +typedef struct { + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Half st_shndx; +} Elf32_Sym; + +typedef struct elf64_sym { + Elf64_Word st_name; + unsigned char st_info; + unsigned char st_other; + Elf64_Half st_shndx; + Elf64_Addr st_value; + Elf64_Xword st_size; +} Elf64_Sym; + +/* ARM specific dynamic relocation codes */ +#define R_ARM_GLOB_DAT 21 /* 0x15 */ +#define R_ARM_JUMP_SLOT 22 /* 0x16 */ +#define R_ARM_RELATIVE 23 /* 0x17 */ +#define R_ARM_ABS32 2 /* 0x02 */ + +/* ELF decoding information */ +struct elf32_info { + Elf32_Ehdr ehdr; + int load_state; + Elf32_Phdr *phdrs; + Elf32_Shdr *shdrs; + void *shstrtab; +}; + +struct elf64_info { + Elf64_Ehdr ehdr; + int load_state; + Elf64_Phdr *phdrs; + Elf64_Shdr *shdrs; + void *shstrtab; +}; + +#define ELF_STATE_INIT 0x0L +#define ELF_STATE_WAIT_FOR_PHDRS 0x100L +#define ELF_STATE_WAIT_FOR_SHDRS 0x200L +#define ELF_STATE_WAIT_FOR_SHSTRTAB 0x400L +#define ELF_STATE_HDRS_COMPLETE 0x800L +#define ELF_STATE_MASK 0xFF00L +#define ELF_NEXT_SEGMENT_MASK 0x00FFL + +extern const struct loader_ops elf_ops; + +/** + * @internal + * + * @brief Check if it is an ELF file + * + * It will check if the input image header is an ELF header. + * + * @param img_data Firmware private data which will be passed to user + * defined loader operations + * @param len Firmware header length + * + * @return 0 for success or negative value for failure. + */ +int elf_identify(const void *img_data, size_t len); + +/** + * @internal + * + * @brief Load ELF headers + * + * It will get the ELF header, the program header, and the section header. + * + * @param img_data Image data + * @param offset Input image data offset to the start of image + * file + * @param len Input image data length + * @param img_info Pointer to store image information data + * @param last_load_state Last state return by this function + * @param noffset Pointer to next offset required by loading ELF + * header + * @param nlen Pointer to next data length required by loading + * ELF header + * + * @return ELF loading header state, or negative value for failure + */ +int elf_load_header(const void *img_data, size_t offset, size_t len, + void **img_info, int last_load_state, + size_t *noffset, size_t *nlen); + +/** + * @internal + * + * @brief Load ELF data + * + * It will parse the ELF image and return the target device address, + * offset to the start of the ELF image of the data to load and the + * length of the data to load. + * + * @param rproc Pointer to remoteproc instance + * @param img_data Image data which will passed to the function. + * it can be NULL, if image data doesn't need to + * be handled by the load function. E.g. binary + * data which was loaded to the target memory. + * @param offset Last loaded image data offset to the start of + * image file + * @param len Last loaded image data length + * @param img_info Pointer to store image information data + * @param last_load_state The returned state of the last function call. + * @param da Target device address, if the data to load is + * not for target memory the da will be set to + * ANY. + * @param noffset Pointer to next offset required by loading ELF + * header + * @param nlen Pointer to next data length required by loading + * ELF header + * @param padding Value to pad it is possible that a size of a + * segment in memory is larger than what it is in + * the ELF image. e.g. a segment can have stack + * section .bss. It doesn't need to copy image + * file space, in this case, it will be packed + * with 0. + * @param nmemsize Pointer to next data target memory size. The + * size of a segment in the target memory can be + * larger than the its size in the image file. + * + * @return 0 for success, otherwise negative value for failure + */ +int elf_load(struct remoteproc *rproc, const void *img_data, + size_t offset, size_t len, + void **img_info, int last_load_state, + metal_phys_addr_t *da, + size_t *noffset, size_t *nlen, + unsigned char *padding, size_t *nmemsize); + +/** + * @internal + * + * @brief Release ELF image information + * + * It will release ELF image information data. + * + * @param img_info Pointer to ELF image information + */ +void elf_release(void *img_info); + +/** + * @internal + * + * @brief Get entry point + * + * It will return entry point specified in the ELF file. + * + * @param img_info Pointer to ELF image information + * + * @return Entry address + */ +metal_phys_addr_t elf_get_entry(void *img_info); + +/** + * @internal + * + * @brief Locate the resource table information + * + * It will return the length of the resource table, and the device address of + * the resource table. + * + * @param img_info Pointer to ELF image information + * @param da Pointer to the device address + * @param offset Pointer to the offset to in the ELF image of the + * resource table section. + * @param size Pointer to the size of the resource table section. + * + * @return 0 if successfully locate the resource table, negative value for + * failure. + */ +int elf_locate_rsc_table(void *img_info, metal_phys_addr_t *da, + size_t *offset, size_t *size); + +#if defined __cplusplus +} +#endif + +#endif /* ELF_LOADER_H_ */ diff --git a/libraries/openamp_arduino/src/openamp/open_amp.h b/libraries/openamp_arduino/src/openamp/open_amp.h index 1b0eeac2d..f5d93ede5 100755 --- a/libraries/openamp_arduino/src/openamp/open_amp.h +++ b/libraries/openamp_arduino/src/openamp/open_amp.h @@ -1,17 +1,16 @@ -/* - * Copyright (c) 2014, Mentor Graphics Corporation - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef OPEN_AMP_H_ -#define OPEN_AMP_H_ - -#include "rpmsg.h" -#include "rpmsg_virtio.h" -#include "remoteproc.h" -#include "remoteproc_virtio.h" - - -#endif /* OPEN_AMP_H_ */ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef OPEN_AMP_H_ +#define OPEN_AMP_H_ + +#include +#include +#include +#include + +#endif /* OPEN_AMP_H_ */ diff --git a/libraries/openamp_arduino/src/openamp/remoteproc.h b/libraries/openamp_arduino/src/openamp/remoteproc.h index 6b2495c37..23f917861 100755 --- a/libraries/openamp_arduino/src/openamp/remoteproc.h +++ b/libraries/openamp_arduino/src/openamp/remoteproc.h @@ -1,871 +1,858 @@ -/* - * Remoteproc Framework - * - * Copyright(c) 2018 Xilinx Ltd. - * Copyright(c) 2011 Texas Instruments, Inc. - * Copyright(c) 2011 Google, Inc. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef REMOTEPROC_H -#define REMOTEPROC_H - -#include -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -#define RSC_NOTIFY_ID_ANY 0xFFFFFFFFUL - -/** - * struct resource_table - firmware resource table header - * @ver: version number - * @num: number of resource entries - * @reserved: reserved (must be zero) - * @offset: array of offsets pointing at the various resource entries - * - * A resource table is essentially a list of system resources required - * by the remote remote_proc. It may also include configuration entries. - * If needed, the remote remote_proc firmware should contain this table - * as a dedicated ".resource_table" ELF section. - * - * Some resources entries are mere announcements, where the host is informed - * of specific remoteproc configuration. Other entries require the host to - * do something (e.g. allocate a system resource). Sometimes a negotiation - * is expected, where the firmware requests a resource, and once allocated, - * the host should provide back its details (e.g. address of an allocated - * memory region). - * - * The header of the resource table, as expressed by this structure, - * contains a version number (should we need to change this format in the - * future), the number of available resource entries, and their offsets - * in the table. - * - * Immediately following this header are the resource entries themselves, - * each of which begins with a resource entry header (as described below). - */ -OPENAMP_PACKED_BEGIN -struct resource_table { - uint32_t ver; - uint32_t num; - uint32_t reserved[2]; - uint32_t offset[0]; -} OPENAMP_PACKED_END; - -/** - * struct fw_rsc_hdr - firmware resource entry header - * @type: resource type - * @data: resource data - * - * Every resource entry begins with a 'struct fw_rsc_hdr' header providing - * its @type. The content of the entry itself will immediately follow - * this header, and it should be parsed according to the resource type. - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_hdr { - uint32_t type; - uint8_t data[0]; -} OPENAMP_PACKED_END; - -/** - * enum fw_resource_type - types of resource entries - * - * @RSC_CARVEOUT: request for allocation of a physically contiguous - * memory region. - * @RSC_DEVMEM: request to iommu_map a memory-based peripheral. - * @RSC_TRACE: announces the availability of a trace buffer into which - * the remote remote_proc will be writing logs. - * @RSC_VDEV: declare support for a virtio device, and serve as its - * virtio header. - * @RSC_VENDOR_START: start of the vendor specific resource types range - * @RSC_VENDOR_END : end of the vendor specific resource types range - * @RSC_LAST: just keep this one at the end - * - * For more details regarding a specific resource type, please see its - * dedicated structure below. - * - * Please note that these values are used as indices to the rproc_handle_rsc - * lookup table, so please keep them sane. Moreover, @RSC_LAST is used to - * check the validity of an index before the lookup table is accessed, so - * please update it as needed. - */ -enum fw_resource_type { - RSC_CARVEOUT = 0, - RSC_DEVMEM = 1, - RSC_TRACE = 2, - RSC_VDEV = 3, - RSC_RPROC_MEM = 4, - RSC_FW_CHKSUM = 5, - RSC_LAST = 6, - RSC_VENDOR_START = 128, - RSC_VENDOR_END = 512, -}; - -#define FW_RSC_ADDR_ANY (0xFFFFFFFFFFFFFFFF) -#define FW_RSC_U32_ADDR_ANY (0xFFFFFFFF) - -/** - * struct fw_rsc_carveout - physically contiguous memory request - * @da: device address - * @pa: physical address - * @len: length (in bytes) - * @flags: iommu protection flags - * @reserved: reserved (must be zero) - * @name: human-readable name of the requested memory region - * - * This resource entry requests the host to allocate a physically contiguous - * memory region. - * - * These request entries should precede other firmware resource entries, - * as other entries might request placing other data objects inside - * these memory regions (e.g. data/code segments, trace resource entries, ...). - * - * Allocating memory this way helps utilizing the reserved physical memory - * (e.g. CMA) more efficiently, and also minimizes the number of TLB entries - * needed to map it (in case @rproc is using an IOMMU). Reducing the TLB - * pressure is important; it may have a substantial impact on performance. - * - * If the firmware is compiled with static addresses, then @da should specify - * the expected device address of this memory region. If @da is set to - * FW_RSC_ADDR_ANY, then the host will dynamically allocate it, and then - * overwrite @da with the dynamically allocated address. - * - * We will always use @da to negotiate the device addresses, even if it - * isn't using an iommu. In that case, though, it will obviously contain - * physical addresses. - * - * Some remote remote_procs needs to know the allocated physical address - * even if they do use an iommu. This is needed, e.g., if they control - * hardware accelerators which access the physical memory directly (this - * is the case with OMAP4 for instance). In that case, the host will - * overwrite @pa with the dynamically allocated physical address. - * Generally we don't want to expose physical addresses if we don't have to - * (remote remote_procs are generally _not_ trusted), so we might want to - * change this to happen _only_ when explicitly required by the hardware. - * - * @flags is used to provide IOMMU protection flags, and @name should - * (optionally) contain a human readable name of this carveout region - * (mainly for debugging purposes). - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_carveout { - uint32_t type; - uint32_t da; - uint32_t pa; - uint32_t len; - uint32_t flags; - uint32_t reserved; - uint8_t name[32]; -} OPENAMP_PACKED_END; - -/** - * struct fw_rsc_devmem - iommu mapping request - * @da: device address - * @pa: physical address - * @len: length (in bytes) - * @flags: iommu protection flags - * @reserved: reserved (must be zero) - * @name: human-readable name of the requested region to be mapped - * - * This resource entry requests the host to iommu map a physically contiguous - * memory region. This is needed in case the remote remote_proc requires - * access to certain memory-based peripherals; _never_ use it to access - * regular memory. - * - * This is obviously only needed if the remote remote_proc is accessing memory - * via an iommu. - * - * @da should specify the required device address, @pa should specify - * the physical address we want to map, @len should specify the size of - * the mapping and @flags is the IOMMU protection flags. As always, @name may - * (optionally) contain a human readable name of this mapping (mainly for - * debugging purposes). - * - * Note: at this point we just "trust" those devmem entries to contain valid - * physical addresses, but this isn't safe and will be changed: eventually we - * want remoteproc implementations to provide us ranges of physical addresses - * the firmware is allowed to request, and not allow firmwares to request - * access to physical addresses that are outside those ranges. - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_devmem { - uint32_t type; - uint32_t da; - uint32_t pa; - uint32_t len; - uint32_t flags; - uint32_t reserved; - uint8_t name[32]; -} OPENAMP_PACKED_END; - -/** - * struct fw_rsc_trace - trace buffer declaration - * @da: device address - * @len: length (in bytes) - * @reserved: reserved (must be zero) - * @name: human-readable name of the trace buffer - * - * This resource entry provides the host information about a trace buffer - * into which the remote remote_proc will write log messages. - * - * @da specifies the device address of the buffer, @len specifies - * its size, and @name may contain a human readable name of the trace buffer. - * - * After booting the remote remote_proc, the trace buffers are exposed to the - * user via debugfs entries (called trace0, trace1, etc..). - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_trace { - uint32_t type; - uint32_t da; - uint32_t len; - uint32_t reserved; - uint8_t name[32]; -} OPENAMP_PACKED_END; - -/** - * struct fw_rsc_vdev_vring - vring descriptor entry - * @da: device address - * @align: the alignment between the consumer and producer parts of the vring - * @num: num of buffers supported by this vring (must be power of two) - * @notifyid is a unique rproc-wide notify index for this vring. This notify - * index is used when kicking a remote remote_proc, to let it know that this - * vring is triggered. - * @reserved: reserved (must be zero) - * - * This descriptor is not a resource entry by itself; it is part of the - * vdev resource type (see below). - * - * Note that @da should either contain the device address where - * the remote remote_proc is expecting the vring, or indicate that - * dynamically allocation of the vring's device address is supported. - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_vdev_vring { - uint32_t da; - uint32_t align; - uint32_t num; - uint32_t notifyid; - uint32_t reserved; -} OPENAMP_PACKED_END; - -/** - * struct fw_rsc_vdev - virtio device header - * @id: virtio device id (as in virtio_ids.h) - * @notifyid is a unique rproc-wide notify index for this vdev. This notify - * index is used when kicking a remote remote_proc, to let it know that the - * status/features of this vdev have changes. - * @dfeatures specifies the virtio device features supported by the firmware - * @gfeatures is a place holder used by the host to write back the - * negotiated features that are supported by both sides. - * @config_len is the size of the virtio config space of this vdev. The config - * space lies in the resource table immediate after this vdev header. - * @status is a place holder where the host will indicate its virtio progress. - * @num_of_vrings indicates how many vrings are described in this vdev header - * @reserved: reserved (must be zero) - * @vring is an array of @num_of_vrings entries of 'struct fw_rsc_vdev_vring'. - * - * This resource is a virtio device header: it provides information about - * the vdev, and is then used by the host and its peer remote remote_procs - * to negotiate and share certain virtio properties. - * - * By providing this resource entry, the firmware essentially asks remoteproc - * to statically allocate a vdev upon registration of the rproc (dynamic vdev - * allocation is not yet supported). - * - * Note: unlike virtualization systems, the term 'host' here means - * the Linux side which is running remoteproc to control the remote - * remote_procs. We use the name 'gfeatures' to comply with virtio's terms, - * though there isn't really any virtualized guest OS here: it's the host - * which is responsible for negotiating the final features. - * Yeah, it's a bit confusing. - * - * Note: immediately following this structure is the virtio config space for - * this vdev (which is specific to the vdev; for more info, read the virtio - * spec). the size of the config space is specified by @config_len. - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_vdev { - uint32_t type; - uint32_t id; - uint32_t notifyid; - uint32_t dfeatures; - uint32_t gfeatures; - uint32_t config_len; - uint8_t status; - uint8_t num_of_vrings; - uint8_t reserved[2]; - struct fw_rsc_vdev_vring vring[0]; -} OPENAMP_PACKED_END; - -/** - * struct fw_rsc_vendor - remote processor vendor specific resource - * @len: length of the resource - * - * This resource entry tells the host the vendor specific resource - * required by the remote. - * - * These request entries should precede other shared resource entries - * such as vdevs, vrings. - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_vendor { - uint32_t type; - uint32_t len; -} OPENAMP_PACKED_END; - -/** - * struct fw_rsc_rproc_mem - remote processor memory - * @da: device address - * @pa: physical address - * @len: length (in bytes) - * @reserved: reserved (must be zero) - * - * This resource entry tells the host to the remote processor - * memory that the host can be used as shared memory. - * - * These request entries should precede other shared resource entries - * such as vdevs, vrings. - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_rproc_mem { - uint32_t type; - uint32_t da; - uint32_t pa; - uint32_t len; - uint32_t reserved; -} OPENAMP_PACKED_END; - -/* - * struct fw_rsc_fw_chksum - firmware checksum - * @algo: algorithm to generate the cheksum - * @chksum: checksum of the firmware loadable sections. - * - * This resource entry provides checksum for the firmware loadable sections. - * It is used to check if the remote already runs with the expected firmware to - * decide if it needs to start the remote if the remote is already running. - */ -OPENAMP_PACKED_BEGIN -struct fw_rsc_fw_chksum { - uint32_t type; - uint8_t algo[16]; - uint8_t chksum[64]; -} OPENAMP_PACKED_END; - -struct loader_ops; -struct image_store_ops; -struct remoteproc_ops; - -/** - * struct remoteproc_mem - * - * This structure presents the memory used by the remote processor - * - * @da: device memory - * @pa: physical memory - * @size: size of the memory - * @io: pointer to the I/O region - * @node: list node - */ -struct remoteproc_mem { - metal_phys_addr_t da; - metal_phys_addr_t pa; - size_t size; - char name[32]; - struct metal_io_region *io; - struct metal_list node; -}; - -/** - * struct remoteproc - * - * This structure is maintained by the remoteproc to represent the remote - * processor instance. This structure acts as a prime parameter to use - * the remoteproc APIs. - * - * @bootadd: boot address - * @loader: executable loader - * @lock: mutext lock - * @ops: remoteproc operations - * @rsc_table: pointer to resource table - * @rsc_len: length of resource table - * @rsc_io: metal I/O region of resource table - * @mems: remoteproc memories - * @vdevs: remoteproc virtio devices - * @bitmap: bitmap for notify IDs for remoteproc subdevices - * @state: remote processor state - * @priv: private data - */ -struct remoteproc { - metal_mutex_t lock; - void *rsc_table; - size_t rsc_len; - struct metal_io_region *rsc_io; - struct metal_list mems; - struct metal_list vdevs; - unsigned long bitmap; - struct remoteproc_ops *ops; - metal_phys_addr_t bootaddr; - struct loader_ops *loader; - unsigned int state; - void *priv; -}; - -/** - * struct remoteproc_ops - * - * remoteproc operations needs to be implemented by each remoteproc driver - * - * @init: initialize the remoteproc instance - * @remove: remove the remoteproc instance - * @mmap: memory mapped the mempory with physical address or destination - * address as input. - * @handle_rsc: handle the vendor specific resource - * @config: configure the remoteproc to make it ready to load and run - * executable - * @start: kick the remoteproc to run application - * @stop: stop the remoteproc from running application, the resource such as - * memory may not be off. - * @shutdown: shutdown the remoteproc and release its resources. - * @notify: notify the remote - */ -struct remoteproc_ops { - struct remoteproc *(*init)(struct remoteproc *rproc, - struct remoteproc_ops *ops, void *arg); - void (*remove)(struct remoteproc *rproc); - void *(*mmap)(struct remoteproc *rproc, - metal_phys_addr_t *pa, metal_phys_addr_t *da, - size_t size, unsigned int attribute, - struct metal_io_region **io); - int (*handle_rsc)(struct remoteproc *rproc, void *rsc, size_t len); - int (*config)(struct remoteproc *rproc, void *data); - int (*start)(struct remoteproc *rproc); - int (*stop)(struct remoteproc *rproc); - int (*shutdown)(struct remoteproc *rproc); - int (*notify)(struct remoteproc *rproc, uint32_t id); -}; - -/* Remoteproc error codes */ -#define RPROC_EBASE 0 -#define RPROC_ENOMEM (RPROC_EBASE + 1) -#define RPROC_EINVAL (RPROC_EBASE + 2) -#define RPROC_ENODEV (RPROC_EBASE + 3) -#define RPROC_EAGAIN (RPROC_EBASE + 4) -#define RPROC_ERR_RSC_TAB_TRUNC (RPROC_EBASE + 5) -#define RPROC_ERR_RSC_TAB_VER (RPROC_EBASE + 6) -#define RPROC_ERR_RSC_TAB_RSVD (RPROC_EBASE + 7) -#define RPROC_ERR_RSC_TAB_VDEV_NRINGS (RPROC_EBASE + 9) -#define RPROC_ERR_RSC_TAB_NP (RPROC_EBASE + 10) -#define RPROC_ERR_RSC_TAB_NS (RPROC_EBASE + 11) -#define RPROC_ERR_LOADER_STATE (RPROC_EBASE + 12) -#define RPROC_EMAX (RPROC_EBASE + 16) -#define RPROC_EPTR (void *)(-1) -#define RPROC_EOF (void *)(-1) - -static inline long RPROC_PTR_ERR(const void *ptr) -{ - return (long)ptr; -} - -static inline int RPROC_IS_ERR(const void *ptr) -{ - if ((unsigned long)ptr >= (unsigned long)(-RPROC_EMAX)) - return 1; - else - return 0; -} - -static inline void *RPROC_ERR_PTR(long error) -{ - return (void *)error; -} - -/** - * enum rproc_state - remote processor states - * @RPROC_OFFLINE: remote is offline - * @RPROC_READY: remote is ready to start - * @RPROC_RUNNING: remote is up and running - * @RPROC_SUSPENDED: remote is suspended - * @RPROC_ERROR: remote has error; need to recover - * @RPROC_STOPPED: remote is stopped - * @RPROC_LAST: just keep this one at the end - */ -enum remoteproc_state { - RPROC_OFFLINE = 0, - RPROC_CONFIGURED = 1, - RPROC_READY = 2, - RPROC_RUNNING = 3, - RPROC_SUSPENDED = 4, - RPROC_ERROR = 5, - RPROC_STOPPED = 6, - RPROC_LAST = 7, -}; - -/** - * remoteproc_init - * - * Initializes remoteproc resource. - * - * @rproc - pointer to remoteproc instance - * @ops - pointer to remoteproc operations - * @priv - pointer to private data - * - * @returns created remoteproc pointer - */ -struct remoteproc *remoteproc_init(struct remoteproc *rproc, - struct remoteproc_ops *ops, void *priv); - -/** - * remoteproc_remove - * - * Remove remoteproc resource - * - * @rproc - pointer to remoteproc instance - * - * returns 0 for success, negative value for failure - */ -int remoteproc_remove(struct remoteproc *rproc); - -/** - * remoteproc_init_mem - * - * Initialize remoteproc memory - * - * @mem - pointer to remoteproc memory - * @char - memory name - * @pa - physcial address - * @da - device address - * @size - memory size - * @io - pointer to the I/O region - */ -static inline void -remoteproc_init_mem(struct remoteproc_mem *mem, const char *name, - metal_phys_addr_t pa, metal_phys_addr_t da, - size_t size, struct metal_io_region *io) -{ - if (!mem) - return; - if (name) - strncpy(mem->name, name, sizeof(mem->name)); - else - mem->name[0] = 0; - mem->pa = pa; - mem->da = da; - mem->io = io; - mem->size = size; -} - -/** - * remoteproc_add_mem - * - * Add remoteproc memory - * - * @rproc - pointer to remoteproc - * @mem - pointer to remoteproc memory - */ -static inline void -remoteproc_add_mem(struct remoteproc *rproc, struct remoteproc_mem *mem) -{ - if (!rproc || !mem) - return; - metal_list_add_tail(&rproc->mems, &mem->node); -} - -/** - * remoteproc_get_io_with_name - * - * get remoteproc memory I/O region with name - * - * @rproc - pointer to the remote processor - * @name - name of the shared memory - * @io - pointer to the pointer of the I/O region - * - * returns metal I/O region pointer, NULL for failure - */ -struct metal_io_region * -remoteproc_get_io_with_name(struct remoteproc *rproc, - const char *name); - -/** - * remoteproc_get_io_with_pa - * - * get remoteproc memory I/O region with physical address - * - * @rproc - pointer to the remote processor - * @pa - physical address - * - * returns metal I/O region pointer, NULL for failure - */ -struct metal_io_region * -remoteproc_get_io_with_pa(struct remoteproc *rproc, - metal_phys_addr_t pa); - -/** - * remoteproc_get_io_with_da - * - * get remoteproc memory I/O region with device address - * - * @rproc - pointer to the remote processor - * @da - device address - * @offset - I/O region offset of the device address - * - * returns metal I/O region pointer, NULL for failure - */ -struct metal_io_region * -remoteproc_get_io_with_da(struct remoteproc *rproc, - metal_phys_addr_t da, - unsigned long *offset); - -/** - * remoteproc_get_io_with_va - * - * get remoteproc memory I/O region with virtual address - * - * @rproc - pointer to the remote processor - * @va - virtual address - * - * returns metal I/O region pointer, NULL for failure - */ -struct metal_io_region * -remoteproc_get_io_with_va(struct remoteproc *rproc, - void *va); - -/** - * remoteproc_mmap - * - * remoteproc mmap memory - * - * @rproc - pointer to the remote processor - * @pa - physical address pointer - * @da - device address pointer - * @size - size of the memory - * @attribute - memory attribute - * @io - pointer to the I/O region - * - * returns pointer to the memory - */ -void *remoteproc_mmap(struct remoteproc *rproc, - metal_phys_addr_t *pa, metal_phys_addr_t *da, - size_t size, unsigned int attribute, - struct metal_io_region **io); - -/** - * remoteproc_parse_rsc_table - * - * Parse resource table of remoteproc - * - * @rproc - pointer to remoteproc instance - * @rsc_table - pointer to resource table - * @rsc_size - resource table size - * - * returns 0 for success and negative value for errors - */ -int remoteproc_parse_rsc_table(struct remoteproc *rproc, - struct resource_table *rsc_table, - size_t rsc_size); - -/** - * remoteproc_set_rsc_table - * - * Parse and set resource table of remoteproc - * - * @rproc - pointer to remoteproc instance - * @rsc_table - pointer to resource table - * @rsc_size - resource table size - * - * returns 0 for success and negative value for errors - */ -int remoteproc_set_rsc_table(struct remoteproc *rproc, - struct resource_table *rsc_table, - size_t rsc_size); - -/** - * remoteproc_config - * - * This function configures the remote processor to get it - * ready to load and run executable. - * - * @rproc - pointer to remoteproc instance to start - * @data - configuration data - * - * returns 0 for success and negative value for errors - */ -int remoteproc_config(struct remoteproc *rproc, void *data); - -/** - * remoteproc_start - * - * This function starts the remote processor. - * It assumes the firmware is already loaded, - * - * @rproc - pointer to remoteproc instance to start - * - * returns 0 for success and negative value for errors - */ -int remoteproc_start(struct remoteproc *rproc); - -/** - * remoteproc_stop - * - * This function stops the remote processor but it - * will not release its resource. - * - * @rproc - pointer to remoteproc instance - * - * returns 0 for success and negative value for errors - */ -int remoteproc_stop(struct remoteproc *rproc); - -/** - * remoteproc_shutdown - * - * This function shutdown the remote processor and - * release its resources. - * - * @rproc - pointer to remoteproc instance - * - * returns 0 for success and negative value for errors - */ -int remoteproc_shutdown(struct remoteproc *rproc); - -/** - * remoteproc_load - * - * load executable, it expects the user application defines how to - * open the executable file and how to get data from the executable file - * and how to load data to the target memory. - * - * @rproc: pointer to the remoteproc instance - * @path: optional path to the image file - * @store: pointer to user defined image store argument - * @store_ops: pointer to image store operations - * @image_info: pointer to memory which stores image information used - * by remoteproc loader - * - * return 0 for success and negative value for failure - */ -int remoteproc_load(struct remoteproc *rproc, const char *path, - void *store, struct image_store_ops *store_ops, - void **img_info); - -/** - * remoteproc_load_noblock - * - * load executable, it expects the caller has loaded image data to local - * memory and passed to the this function. If the function needs more - * image data it will return the next expected image data offset and - * the next expected image data length. If the function requires the - * caller to download image data to the target memory, it will also - * return the target physical address besides the offset and length. - * This function can be used to load firmware in stream mode. In this - * mode, you cannot do seek to the executable file. If the executable - * is ELF, it cannot get the resource table section before it loads - * the full ELF file. Furthermore, application usually don't store - * the data which is loaded to local memory in streaming mode, and - * thus, in this mode, it will load the binrary to the target memory - * before it gets the resource table. And thus, when calling this funciton - * don't put the target exectuable memory in the resource table, as - * this function will parse the resource table after it loads the binary - * to target memory. - * - * @rproc: pointer to the remoteproc instance - * @img_data: pointer to image data for remoteproc loader to parse - * @offset: image data offset to the beginning of the image file - * @len: image data length - * @image_info: pointer to memory which stores image information used - * by remoteproc loader - * @pa: pointer to the target memory physical address. If the next expected - * data doesn't need to load to the target memory, the function will - * set it to ANY. - * @io: pointer to the target memory physical address. If the next expected - * data doesn't need to load to the target memory, the function will - * set it to ANY. - * @noffset: pointer to the next image data offset to the beginning of - * the image file needs to load to local or to the target - * memory. - * @nlen: pointer to the next image data length needs to load to local - * or to the target memory. - * @nmlen: pointer to the memory size. It is only used when the next - * expected data is going to be loaded to the target memory. E.g. - * in ELF, it is possible that loadable segment in memory is - * larger that the segment data in the ELF file. In this case, - * application will need to pad the rest of the memory with - * padding. - * @padding: pointer to the padding value. It is only used when the next - * expected data is going to be loaded to the target memory. - * and the target memory size is larger than the segment data in - * the executable file. - * - * return 0 for success and negative value for failure - */ -int remoteproc_load_noblock(struct remoteproc *rproc, - const void *img_data, size_t offset, size_t len, - void **img_info, - metal_phys_addr_t *pa, struct metal_io_region **io, - size_t *noffset, size_t *nlen, - size_t *nmlen, unsigned char *padding); - -/** - * remoteproc_allocate_id - * - * allocate notifyid for resource - * - * @rproc - pointer to the remoteproc instance - * @start - start of the id range - * @end - end of the id range - * - * return allocated notify id - */ -unsigned int remoteproc_allocate_id(struct remoteproc *rproc, - unsigned int start, - unsigned int end); - -/* remoteproc_create_virtio - * - * create virtio device, it returns pointer to the created virtio device. - * - * @rproc: pointer to the remoteproc instance - * @vdev_id: virtio device ID - * @role: virtio device role - * @rst_cb: virtio device reset callback - * - * return pointer to the created virtio device, NULL for failure. - */ -struct virtio_device * -remoteproc_create_virtio(struct remoteproc *rproc, - int vdev_id, unsigned int role, - void (*rst_cb)(struct virtio_device *vdev)); - -/* remoteproc_remove_virtio - * - * Remove virtio device - * - * @rproc: pointer to the remoteproc instance - * @vdev: pointer to the virtio device - * - */ -void remoteproc_remove_virtio(struct remoteproc *rproc, - struct virtio_device *vdev); - -/* remoteproc_get_notification - * - * remoteproc is got notified, it will check its subdevices - * for the notification - * - * @rproc - pointer to the remoteproc instance - * @notifyid - notificatin id - * - * return 0 for succeed, negative value for failure - */ -int remoteproc_get_notification(struct remoteproc *rproc, - uint32_t notifyid); -#if defined __cplusplus -} -#endif - -#endif /* REMOTEPROC_H_ */ +/* + * Remoteproc Framework + * + * Copyright(c) 2018 Xilinx Ltd. + * Copyright(c) 2011 Texas Instruments, Inc. + * Copyright(c) 2011 Google, Inc. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef REMOTEPROC_H +#define REMOTEPROC_H + +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +#define RSC_NOTIFY_ID_ANY 0xFFFFFFFFU + +#define RPROC_MAX_NAME_LEN 32 + +/** + * @brief Resource table header + * + * A resource table is essentially a list of system resources required + * by the remote remoteproc. It may also include configuration entries. + * If needed, the remote remoteproc firmware should contain this table + * as a dedicated ".resource_table" ELF section. + * + * Some resource entries are mere announcements, where the host is informed + * of specific remoteproc configurations. Other entries require the host to + * do something (e.g. allocate a system resource). Sometimes a negotiation + * is expected, where the firmware requests a resource, and once allocated, + * the host should provide back its details (e.g. address of an allocated + * memory region). + * + * The header of the resource table, as expressed by this structure, + * contains a version number (should we need to change this format in the + * future), the number of available resource entries, and their offsets + * in the table. + * + * Immediately following this header are the resource entries themselves, + * each of which begins with a resource entry header. + */ +METAL_PACKED_BEGIN +struct resource_table { + /** Version number */ + uint32_t ver; + + /** Number of resource entries */ + uint32_t num; + + /** Reserved (must be zero) */ + uint32_t reserved[2]; + + /** Array of offsets pointing at the various resource entries */ + uint32_t offset[0]; +} METAL_PACKED_END; + +/** + * @brief Resource table entry header + * + * Every resource entry begins with this firmware resource header providing + * its \ref type. The content of the entry itself will immediately follow + * this header, and it should be parsed according to the resource type. + */ +METAL_PACKED_BEGIN +struct fw_rsc_hdr { + /** Resource type matching the type field of the structure in \ref data */ + uint32_t type; + + /** Resource data */ + uint8_t data[0]; +} METAL_PACKED_END; + +/** + * enum fw_resource_type - types of resource entries + * + * @RSC_CARVEOUT: request for allocation of a physically contiguous + * memory region. + * @RSC_DEVMEM: request to iommu_map a memory-based peripheral. + * @RSC_TRACE: announces the availability of a trace buffer into which + * the remote remoteproc will be writing logs. + * @RSC_VDEV: declare support for a virtio device, and serve as its + * virtio header. + * @RSC_VENDOR_START: start of the vendor specific resource types range + * @RSC_VENDOR_END : end of the vendor specific resource types range + * @RSC_LAST: just keep this one at the end + * + * For more details regarding a specific resource type, please see its + * dedicated structure below. + * + * Please note that these values are used as indices to the rproc_handle_rsc + * lookup table, so please keep them sane. Moreover, @RSC_LAST is used to + * check the validity of an index before the lookup table is accessed, so + * please update it as needed. + */ +enum fw_resource_type { + RSC_CARVEOUT = 0, + RSC_DEVMEM = 1, + RSC_TRACE = 2, + RSC_VDEV = 3, + RSC_LAST = 4, + RSC_VENDOR_START = 128, + RSC_VENDOR_END = 512, +}; + +#define FW_RSC_U64_ADDR_ANY 0xFFFFFFFFFFFFFFFFUL +#define FW_RSC_U32_ADDR_ANY 0xFFFFFFFFUL + +/** + * @brief Resource table physically contiguous memory request entry + * + * This resource entry requests the host to allocate a physically contiguous + * memory region. + * + * These request entries should precede other firmware resource entries, + * as other entries might request placing other data objects inside + * these memory regions (e.g. data/code segments, trace resource entries, ...). + * + * Allocating memory this way helps utilizing the reserved physical memory + * (e.g. CMA) more efficiently, and also minimizes the number of TLB entries + * needed to map it (in case rproc is using an IOMMU). Reducing the TLB + * pressure is important; it may have a substantial impact on performance. + * + * If the firmware is compiled with static addresses, then \ref da should specify + * the expected device address of this memory region. If \ref da is set to + * FW_RSC_ADDR_ANY, then the host will dynamically allocate it, and then + * overwrite \ref da with the dynamically allocated address. + * + * We will always use \ref da to negotiate the device addresses, even if it + * isn't using an IOMMU. In that case, though, it will obviously contain + * physical addresses. + * + * Some remote remoteprocs need to know the allocated physical address + * even if they do use an IOMMU. This is needed, e.g., if they control + * hardware accelerators which access the physical memory directly (this + * is the case with OMAP4 for instance). In that case, the host will + * overwrite \ref pa with the dynamically allocated physical address. + * Generally we don't want to expose physical addresses if we don't have to + * (remote remoteprocs are generally _not_ trusted), so we might want to + * change this to happen _only_ when explicitly required by the hardware. + */ +METAL_PACKED_BEGIN +struct fw_rsc_carveout { + /** Resource carveout has type 0 */ + uint32_t type; + + /** Device address */ + uint32_t da; + + /** Physical address */ + uint32_t pa; + + /** Length in bytes */ + uint32_t len; + + /** IOMMU protection flags */ + uint32_t flags; + + /** Reserved (must be zero) */ + uint32_t reserved; + + /** Optional human-readable name of the requested memory region used for debugging */ + uint8_t name[RPROC_MAX_NAME_LEN]; +} METAL_PACKED_END; + +/** + * @brief Resource table IOMMU mapping request entry + * + * This resource entry requests the host to IOMMU map a physically contiguous + * memory region. This is needed in case the remote remoteproc requires + * access to certain memory-based peripherals; _never_ use it to access + * regular memory. + * + * This is obviously only needed if the remote remoteproc is accessing memory + * via an IOMMU. + * + * Note: at this point we just "trust" those devmem entries to contain valid + * physical addresses, but this isn't safe and will be changed: eventually we + * want remoteproc implementations to provide us ranges of physical addresses + * the firmware is allowed to request, and not allow firmwares to request + * access to physical addresses that are outside those ranges. + */ +METAL_PACKED_BEGIN +struct fw_rsc_devmem { + /** IOMMU mapping request has type 1 */ + uint32_t type; + + /** Device address */ + uint32_t da; + + /** Physical address to map */ + uint32_t pa; + + /** Length of the mapping in bytes */ + uint32_t len; + + /** IOMMU protection flags */ + uint32_t flags; + + /** Reserved (must be zero) */ + uint32_t reserved; + + /** Optional human-readable name of the requested memory region used for debugging */ + uint8_t name[RPROC_MAX_NAME_LEN]; +} METAL_PACKED_END; + +/** + * @brief Resource table trace buffer declaration entry + * + * This resource entry provides the host information about a trace buffer + * into which the remote remoteproc will write log messages. + * + * After booting the remote remoteproc, the trace buffers are exposed to the + * user via debugfs entries (called trace0, trace1, etc..). + */ +METAL_PACKED_BEGIN +struct fw_rsc_trace { + /** Trace buffer entry has type 2 */ + uint32_t type; + + /** Device address of the buffer */ + uint32_t da; + + /** Length of the buffer in bytes */ + uint32_t len; + + /** Reserved (must be zero) */ + uint32_t reserved; + + /** Optional human-readable name of the requested memory region used for debugging */ + uint8_t name[RPROC_MAX_NAME_LEN]; +} METAL_PACKED_END; + +/** + * @brief Resource table vring descriptor entry + * + * This descriptor is not a resource entry by itself; it is part of the + * \ref fw_rsc_vdev resource type. + */ +METAL_PACKED_BEGIN +struct fw_rsc_vdev_vring { + /** + * The device address where the remoteproc is expecting the vring, or + * FW_RSC_U32_ADDR_ANY/FW_RSC_U64_ADDR_ANY to indicate that dynamic + * allocation of the vring's device address is supported + */ + uint32_t da; + + /** The alignment between the consumer and producer parts of the vring */ + uint32_t align; + + /** Number of buffers supported by this vring (must be power of two) */ + uint32_t num; + + /** + * A unique rproc-wide notify index for this vring. This notify index is + * used when kicking a remote remoteproc, to let it know that this vring + * is triggered + */ + uint32_t notifyid; + + /** Reserved (must be zero) */ + uint32_t reserved; +} METAL_PACKED_END; + +/** + * @brief Resource table virtio device entry + * + * This resource is a virtio device header: it provides information about + * the vdev, and is then used by the host and its peer remote remoteprocs + * to negotiate and share certain virtio properties. + * + * By providing this resource entry, the firmware essentially asks remoteproc + * to statically allocate a vdev upon registration of the rproc (dynamic vdev + * allocation is not yet supported). + * + * Note: unlike virtualization systems, the term 'host' here means + * the Linux side which is running remoteproc to control the remote + * remoteprocs. We use the name 'gfeatures' to comply with virtio's terms, + * though there isn't really any virtualized guest OS here: it's the host + * which is responsible for negotiating the final features. + * + * Note: immediately following this structure is the virtio config space for + * this vdev (which is specific to the vdev; for more info, read the virtio + * spec). + */ +METAL_PACKED_BEGIN +struct fw_rsc_vdev { + /** Virtio device header has type 3 */ + uint32_t type; + + /** Virtio device id (as in virtio_ids.h) */ + uint32_t id; + + /** + * A unique rproc-wide notify index for this vdev. This notify index is + * used when kicking a remote remoteproc, to let it know that the + * status/features of this vdev have changes. + */ + uint32_t notifyid; + + /** The virtio device features supported by the firmware */ + uint32_t dfeatures; + + /** + * A place holder used by the host to write back the negotiated features + * that are supported by both sides + */ + uint32_t gfeatures; + + /** + * The size of the virtio config space of this vdev. The config space lies + * in the resource table immediate after this vdev header + */ + uint32_t config_len; + + /** A place holder where the host will indicate its virtio progress */ + uint8_t status; + + /** Number of vrings described in this vdev header */ + uint8_t num_of_vrings; + + /** Reserved (must be zero) */ + uint8_t reserved[2]; + + /** An array of \ref num_of_vrings entries of \ref fw_rsc_vdev_vring */ + struct fw_rsc_vdev_vring vring[0]; +} METAL_PACKED_END; + +/** + * @brief Resource table remote processor vendor specific entry + * + * This resource entry tells the host the vendor specific resource + * required by the remote. + * + * These request entries should precede other shared resource entries + * such as vdevs, vrings. + */ +METAL_PACKED_BEGIN +struct fw_rsc_vendor { + /** Vendor specific resource type can be values 128-512 */ + uint32_t type; + + /** Length of the resource */ + uint32_t len; +} METAL_PACKED_END; + +struct loader_ops; +struct image_store_ops; +struct remoteproc_ops; + +/** @brief Memory used by the remote processor */ +struct remoteproc_mem { + /** Device memory */ + metal_phys_addr_t da; + + /** Physical memory */ + metal_phys_addr_t pa; + + /** Size of the memory */ + size_t size; + + /** Optional human-readable name of the memory region */ + char name[RPROC_MAX_NAME_LEN]; + + /** Pointer to the I/O region */ + struct metal_io_region *io; + + /** List node */ + struct metal_list node; +}; + +/** + * @brief A remote processor instance + * + * This structure is maintained by the remoteproc to represent the remote + * processor instance. This structure acts as a prime parameter to use + * the remoteproc APIs. + */ +struct remoteproc { + /** Mutex lock */ + metal_mutex_t lock; + + /** Pointer to the resource table */ + void *rsc_table; + + /** Length of the resource table */ + size_t rsc_len; + + /** Metal I/O region of the resource table */ + struct metal_io_region *rsc_io; + + /** Remoteproc memories */ + struct metal_list mems; + + /** Remoteproc virtio devices */ + struct metal_list vdevs; + + /** Bitmap for notify IDs for remoteproc subdevices */ + unsigned long bitmap; + + /** Remoteproc operations */ + const struct remoteproc_ops *ops; + + /** Boot address */ + metal_phys_addr_t bootaddr; + + /** Executable loader */ + const struct loader_ops *loader; + + /** Remote processor state */ + unsigned int state; + + /** Private data */ + void *priv; +}; + +/** + * @brief Remoteproc operations to manage a remoteproc instance + * + * Remoteproc operations need to be implemented by each remoteproc driver + */ +struct remoteproc_ops { + /** Initialize the remoteproc instance */ + struct remoteproc *(*init)(struct remoteproc *rproc, + const struct remoteproc_ops *ops, void *arg); + + /** Remove the remoteproc instance */ + void (*remove)(struct remoteproc *rproc); + + /** Memory map the memory with physical address or destination address as input */ + void *(*mmap)(struct remoteproc *rproc, + metal_phys_addr_t *pa, metal_phys_addr_t *da, + size_t size, unsigned int attribute, + struct metal_io_region **io); + + /** Handle the vendor specific resource */ + int (*handle_rsc)(struct remoteproc *rproc, void *rsc, size_t len); + + /** Configure the remoteproc to make it ready to load and run the executable */ + int (*config)(struct remoteproc *rproc, void *data); + + /** Kick the remoteproc to run the application */ + int (*start)(struct remoteproc *rproc); + + /** + * Stop the remoteproc from running the application, the resource such as + * memory may not be off + */ + int (*stop)(struct remoteproc *rproc); + + /** Shutdown the remoteproc and release its resources */ + int (*shutdown)(struct remoteproc *rproc); + + /** Notify the remote */ + int (*notify)(struct remoteproc *rproc, uint32_t id); + + /** + * @brief Get remoteproc memory I/O region by either name, virtual + * address, physical address or device address. + * + * @param rproc Pointer to remoteproc instance + * @param name Memory name + * @param pa Physical address + * @param da Device address + * @param va Virtual address + * @param size Memory size + * @param buf Pointer to remoteproc_mem struct object to store result + * + * @return remoteproc memory pointed by buf if success, otherwise NULL + */ + struct remoteproc_mem *(*get_mem)(struct remoteproc *rproc, + const char *name, + metal_phys_addr_t pa, + metal_phys_addr_t da, + void *va, size_t size, + struct remoteproc_mem *buf); +}; + +/* Remoteproc error codes */ +#define RPROC_EBASE 0 +#define RPROC_ENOMEM (RPROC_EBASE + 1) +#define RPROC_EINVAL (RPROC_EBASE + 2) +#define RPROC_ENODEV (RPROC_EBASE + 3) +#define RPROC_EAGAIN (RPROC_EBASE + 4) +#define RPROC_ERR_RSC_TAB_TRUNC (RPROC_EBASE + 5) +#define RPROC_ERR_RSC_TAB_VER (RPROC_EBASE + 6) +#define RPROC_ERR_RSC_TAB_RSVD (RPROC_EBASE + 7) +#define RPROC_ERR_RSC_TAB_VDEV_NRINGS (RPROC_EBASE + 9) +#define RPROC_ERR_RSC_TAB_NP (RPROC_EBASE + 10) +#define RPROC_ERR_RSC_TAB_NS (RPROC_EBASE + 11) +#define RPROC_ERR_LOADER_STATE (RPROC_EBASE + 12) +#define RPROC_EMAX (RPROC_EBASE + 16) +#define RPROC_EPTR (void *)(-1) +#define RPROC_EOF (void *)(-1) + +static inline long RPROC_PTR_ERR(const void *ptr) +{ + return (long)ptr; +} + +static inline int RPROC_IS_ERR(const void *ptr) +{ + if ((unsigned long)ptr >= (unsigned long)(-RPROC_EMAX)) + return 1; + else + return 0; +} + +static inline void *RPROC_ERR_PTR(long error) +{ + return (void *)error; +} + +/** + * enum rproc_state - remote processor states + * @RPROC_OFFLINE: remote is offline + * @RPROC_CONFIGURED: remote is configured + * @RPROC_READY: remote is ready to start + * @RPROC_RUNNING: remote is up and running + * @RPROC_SUSPENDED: remote is suspended + * @RPROC_ERROR: remote has error; need to recover + * @RPROC_STOPPED: remote is stopped + * @RPROC_LAST: just keep this one at the end + */ +enum remoteproc_state { + RPROC_OFFLINE = 0, + RPROC_CONFIGURED = 1, + RPROC_READY = 2, + RPROC_RUNNING = 3, + RPROC_SUSPENDED = 4, + RPROC_ERROR = 5, + RPROC_STOPPED = 6, + RPROC_LAST = 7, +}; + +/** + * @brief Initializes remoteproc resource. + * + * @param rproc Pointer to remoteproc instance + * @param ops Pointer to remoteproc operations + * @param priv Pointer to private data + * + * @return Created remoteproc pointer + */ +struct remoteproc *remoteproc_init(struct remoteproc *rproc, + const struct remoteproc_ops *ops, + void *priv); + +/** + * @brief Remove remoteproc resource + * + * @param rproc Pointer to remoteproc instance + * + * @return 0 for success, negative value for failure + */ +int remoteproc_remove(struct remoteproc *rproc); + +/** + * @brief Initialize remoteproc memory + * + * @param mem Pointer to remoteproc memory + * @param name Memory name + * @param pa Physical address + * @param da Device address + * @param size Memory size + * @param io Pointer to the I/O region + */ +static inline void +remoteproc_init_mem(struct remoteproc_mem *mem, const char *name, + metal_phys_addr_t pa, metal_phys_addr_t da, + size_t size, struct metal_io_region *io) +{ + if (!mem || !io || size == 0) + return; + if (name) + strncpy(mem->name, name, sizeof(mem->name)); + else + mem->name[0] = 0; + mem->pa = pa; + mem->da = da; + mem->io = io; + mem->size = size; +} + +/** + * @brief Add remoteproc memory + * + * @param rproc Pointer to remoteproc + * @param mem Pointer to remoteproc memory + */ +static inline void +remoteproc_add_mem(struct remoteproc *rproc, struct remoteproc_mem *mem) +{ + if (!rproc || !mem) + return; + metal_list_add_tail(&rproc->mems, &mem->node); +} + +/** + * @brief Get remoteproc memory I/O region with name + * + * @param rproc Pointer to the remote processor + * @param name Name of the shared memory + * + * @return Metal I/O region pointer, NULL for failure + */ +struct metal_io_region * +remoteproc_get_io_with_name(struct remoteproc *rproc, + const char *name); + +/** + * @brief Get remoteproc memory I/O region with physical address + * + * @param rproc Pointer to the remote processor + * @param pa Physical address + * + * @return Metal I/O region pointer, NULL for failure + */ +struct metal_io_region * +remoteproc_get_io_with_pa(struct remoteproc *rproc, + metal_phys_addr_t pa); + +/** + * @brief Get remoteproc memory I/O region with device address + * + * @param rproc Pointer to the remote processor + * @param da Device address + * @param offset I/O region offset of the device address + * + * @return Metal I/O region pointer, NULL for failure + */ +struct metal_io_region * +remoteproc_get_io_with_da(struct remoteproc *rproc, + metal_phys_addr_t da, + unsigned long *offset); + +/** + * @brief Get remoteproc memory I/O region with virtual address + * + * @param rproc Pointer to the remote processor + * @param va Virtual address + * + * @return Metal I/O region pointer, NULL for failure + */ +struct metal_io_region * +remoteproc_get_io_with_va(struct remoteproc *rproc, + void *va); + +/** + * @brief Remoteproc mmap memory + * + * @param rproc Pointer to the remote processor + * @param pa Physical address pointer + * @param da Device address pointer + * @param size Size of the memory + * @param attribute Memory attribute + * @param io Pointer to the I/O region + * + * @return Pointer to the memory + */ +void *remoteproc_mmap(struct remoteproc *rproc, + metal_phys_addr_t *pa, metal_phys_addr_t *da, + size_t size, unsigned int attribute, + struct metal_io_region **io); + +/** + * @brief Parse and set resource table of remoteproc + * + * @param rproc Pointer to remoteproc instance + * @param rsc_table Pointer to resource table + * @param rsc_size Resource table size + * + * @return 0 for success and negative value for errors + */ +int remoteproc_set_rsc_table(struct remoteproc *rproc, + struct resource_table *rsc_table, + size_t rsc_size); + +/** + * @brief This function configures the remote processor to get it + * ready to load and run executable. + * + * @param rproc Pointer to remoteproc instance to start + * @param data Configuration data + * + * @return 0 for success and negative value for errors + */ +int remoteproc_config(struct remoteproc *rproc, void *data); + +/** + * @brief This function starts the remote processor. + * It assumes the firmware is already loaded. + * + * @param rproc Pointer to remoteproc instance to start + * + * @return 0 for success and negative value for errors + */ +int remoteproc_start(struct remoteproc *rproc); + +/** + * @brief This function stops the remote processor but it + * will not release its resource. + * + * @param rproc Pointer to remoteproc instance + * + * @return 0 for success and negative value for errors + */ +int remoteproc_stop(struct remoteproc *rproc); + +/** + * @brief This function shuts down the remote processor and + * releases its resources. + * + * @param rproc Pointer to remoteproc instance + * + * @return 0 for success and negative value for errors + */ +int remoteproc_shutdown(struct remoteproc *rproc); + +/** + * @brief Loads the executable + * + * Expects the user application defines how to open the executable file and how + * to get data from the executable file and how to load data to the target + * memory. + * + * @param rproc Pointer to the remoteproc instance + * @param path Optional path to the image file + * @param store Pointer to user defined image store argument + * @param store_ops Pointer to image store operations + * @param img_info Pointer to memory which stores image information used + * by remoteproc loader + * + * @return 0 for success and negative value for failure + */ +int remoteproc_load(struct remoteproc *rproc, const char *path, + void *store, const struct image_store_ops *store_ops, + void **img_info); + +/** + * @brief Loads the executable + * + * Expects the caller has loaded image data to local + * memory and passed to the this function. If the function needs more + * image data it will return the next expected image data offset and + * the next expected image data length. If the function requires the + * caller to download image data to the target memory, it will also + * return the target physical address besides the offset and length. + * This function can be used to load firmware in stream mode. In this + * mode, you cannot do seek to the executable file. If the executable + * is ELF, it cannot get the resource table section before it loads + * the full ELF file. Furthermore, application usually don't store + * the data which is loaded to local memory in streaming mode, and + * thus, in this mode, it will load the binary to the target memory + * before it gets the resource table. And thus, when calling this function + * don't put the target executable memory in the resource table, as + * this function will parse the resource table after it loads the binary + * to target memory. + * + * @param rproc Pointer to the remoteproc instance + * @param img_data Pointer to image data for remoteproc loader to parse + * @param offset Image data offset to the beginning of the image file + * @param len Image data length + * @param img_info Pointer to memory which stores image information used + * by remoteproc loader + * @param pa Pointer to the target memory physical address. If the + * next expected data doesn't need to load to the target + * memory, the function will set it to ANY. + * @param io Pointer to the io region. If the next expected data + * doesn't need to load to the target memory, the function + * will set it to NULL. + * @param noffset Pointer to the next image data offset to the beginning + * of the image file needs to load to local or to the + * target memory. + * @param nlen Pointer to the next image data length needs to load to + * local or to the target memory. + * @param nmlen Pointer to the memory size. It is only used when the + * next expected data is going to be loaded to the target + * memory. E.g. in ELF, it is possible that loadable + * segment in memory is larger that the segment data in + * the ELF file. In this case, application will need to + * pad the rest of the memory with padding. + * @param padding Pointer to the padding value. It is only used when the + * next expected data is going to be loaded to the target + * memory and the target memory size is larger than the + * segment data in the executable file. + * + * @return 0 for success and negative value for failure + */ +int remoteproc_load_noblock(struct remoteproc *rproc, + const void *img_data, size_t offset, size_t len, + void **img_info, + metal_phys_addr_t *pa, struct metal_io_region **io, + size_t *noffset, size_t *nlen, + size_t *nmlen, unsigned char *padding); + +/** + * @brief Allocate notifyid for resource + * + * @param rproc Pointer to the remoteproc instance + * @param start Start of the id range + * @param end End of the id range + * + * @return Allocated notify id + */ +unsigned int remoteproc_allocate_id(struct remoteproc *rproc, + unsigned int start, + unsigned int end); + +/** + * @brief Create virtio device, it returns pointer to the created virtio + * device. + * + * @param rproc Pointer to the remoteproc instance + * @param vdev_id virtio device ID + * @param role virtio device role + * @param rst_cb virtio device reset callback + * + * @return Pointer to the created virtio device, NULL for failure. + */ +struct virtio_device * +remoteproc_create_virtio(struct remoteproc *rproc, + int vdev_id, unsigned int role, + void (*rst_cb)(struct virtio_device *vdev)); + +/** + * @brief Remove virtio device + * + * @param rproc Pointer to the remoteproc instance + * @param vdev Pointer to the virtio device + */ +void remoteproc_remove_virtio(struct remoteproc *rproc, + struct virtio_device *vdev); + +/** + * @brief remoteproc is got notified, it will check its subdevices + * for the notification + * + * @param rproc Pointer to the remoteproc instance + * @param notifyid Notification id + * + * @return 0 for succeed, negative value for failure + */ +int remoteproc_get_notification(struct remoteproc *rproc, + uint32_t notifyid); +#if defined __cplusplus +} +#endif + +#endif /* REMOTEPROC_H_ */ diff --git a/libraries/openamp_arduino/src/openamp/remoteproc_loader.h b/libraries/openamp_arduino/src/openamp/remoteproc_loader.h index dce3dbb0b..d928fcfce 100755 --- a/libraries/openamp_arduino/src/openamp/remoteproc_loader.h +++ b/libraries/openamp_arduino/src/openamp/remoteproc_loader.h @@ -1,108 +1,111 @@ -/* - * Copyright (c) 2014, Mentor Graphics Corporation - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/************************************************************************** - * FILE NAME - * - * remoteproc_loader.h - * - * COMPONENT - * - * OpenAMP stack. - * - * DESCRIPTION - * - * This file provides definitions for remoteproc loader - * - * - **************************************************************************/ -#ifndef REMOTEPROC_LOADER_H_ -#define REMOTEPROC_LOADER_H_ - -#include -#include -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -/* Loader feature macros */ -#define SUPPORT_SEEK 1UL - -/* Remoteproc loader any address */ -#define RPROC_LOAD_ANYADDR ((metal_phys_addr_t)-1) - -/* Remoteproc loader Exectuable Image Parsing States */ -/* Remoteproc loader parser intial state */ -#define RPROC_LOADER_NOT_READY 0x0UL -/* Remoteproc loader ready to load, even it can be not finish parsing */ -#define RPROC_LOADER_READY_TO_LOAD 0x10000UL -/* Remoteproc loader post data load */ -#define RPROC_LOADER_POST_DATA_LOAD 0x20000UL -/* Remoteproc loader finished loading */ -#define RPROC_LOADER_LOAD_COMPLETE 0x40000UL -/* Remoteproc loader state mask */ -#define RPROC_LOADER_MASK 0x00FF0000UL -/* Remoteproc loader private mask */ -#define RPROC_LOADER_PRIVATE_MASK 0x0000FFFFUL -/* Remoteproc loader reserved mask */ -#define RPROC_LOADER_RESERVED_MASK 0x0F000000UL - -/** - * struct image_store_ops - user defined image store operations - * @open: user defined callback to open the "firmware" to prepare loading - * @close: user defined callback to close the "firmware" to clean up - * after loading - * @load: user defined callback to load the firmware contents to target - * memory or local memory - * @features: loader supported features. e.g. seek - */ -struct image_store_ops { - int (*open)(void *store, const char *path, const void **img_data); - void (*close)(void *store); - int (*load)(void *store, size_t offset, size_t size, - const void **data, - metal_phys_addr_t pa, - struct metal_io_region *io, char is_blocking); - unsigned int features; -}; - -/** - * struct loader_ops - loader oeprations - * @load_header: define how to get the executable headers - * @load_data: define how to load the target data - * @locate_rsc_table: define how to get the resource table target address, - * offset to the ELF image file and size of the resource - * table. - * @release: define how to release the loader - * @get_entry: get entry address - * @get_load_state: get load state from the image information - */ -struct loader_ops { - int (*load_header)(const void *img_data, size_t offset, size_t len, - void **img_info, int last_state, - size_t *noffset, size_t *nlen); - int (*load_data)(struct remoteproc *rproc, - const void *img_data, size_t offset, size_t len, - void **img_info, int last_load_state, - metal_phys_addr_t *da, - size_t *noffset, size_t *nlen, - unsigned char *padding, size_t *nmemsize); - int (*locate_rsc_table)(void *img_info, metal_phys_addr_t *da, - size_t *offset, size_t *size); - void (*release)(void *img_info); - metal_phys_addr_t (*get_entry)(void *img_info); - int (*get_load_state)(void *img_info); -}; - -#if defined __cplusplus -} -#endif - -#endif /* REMOTEPROC_LOADER_H_ */ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/************************************************************************** + * FILE NAME + * + * remoteproc_loader.h + * + * COMPONENT + * + * OpenAMP stack. + * + * DESCRIPTION + * + * This file provides definitions for remoteproc loader + * + * + **************************************************************************/ +#ifndef REMOTEPROC_LOADER_H_ +#define REMOTEPROC_LOADER_H_ + +#include +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* Loader feature macros */ +#define SUPPORT_SEEK 1UL + +/* Remoteproc loader any address */ +#define RPROC_LOAD_ANYADDR ((metal_phys_addr_t)-1) + +/* Remoteproc loader Executable Image Parsing States */ +/* Remoteproc loader parser initial state */ +#define RPROC_LOADER_NOT_READY 0x0L +/* Remoteproc loader ready to load, even it can be not finish parsing */ +#define RPROC_LOADER_READY_TO_LOAD 0x10000L +/* Remoteproc loader post data load */ +#define RPROC_LOADER_POST_DATA_LOAD 0x20000L +/* Remoteproc loader finished loading */ +#define RPROC_LOADER_LOAD_COMPLETE 0x40000L +/* Remoteproc loader state mask */ +#define RPROC_LOADER_MASK 0x00FF0000L +/* Remoteproc loader private mask */ +#define RPROC_LOADER_PRIVATE_MASK 0x0000FFFFL +/* Remoteproc loader reserved mask */ +#define RPROC_LOADER_RESERVED_MASK 0x0F000000L + +/** @brief User-defined image store operations */ +struct image_store_ops { + /** User-defined callback to open the "firmware" to prepare loading */ + int (*open)(void *store, const char *path, const void **img_data); + + /** User-defined callback to close the "firmware" to clean up after loading */ + void (*close)(void *store); + + /** User-defined callback to load the firmware contents to target memory or local memory */ + int (*load)(void *store, size_t offset, size_t size, + const void **data, + metal_phys_addr_t pa, + struct metal_io_region *io, char is_blocking); + + /** Loader supported features. e.g. seek */ + unsigned int features; +}; + +/** @brief Loader operations */ +struct loader_ops { + /** Define how to get the executable headers */ + int (*load_header)(const void *img_data, size_t offset, size_t len, + void **img_info, int last_state, + size_t *noffset, size_t *nlen); + + /** Define how to load the target data */ + int (*load_data)(struct remoteproc *rproc, + const void *img_data, size_t offset, size_t len, + void **img_info, int last_load_state, + metal_phys_addr_t *da, + size_t *noffset, size_t *nlen, + unsigned char *padding, size_t *nmemsize); + + /** + * Define how to get the resource table target address, offset to the ELF + * image file and size of the resource table + */ + int (*locate_rsc_table)(void *img_info, metal_phys_addr_t *da, + size_t *offset, size_t *size); + + /** Define how to release the loader */ + void (*release)(void *img_info); + + /** Get entry address */ + metal_phys_addr_t (*get_entry)(void *img_info); + + /** Get load state from the image information */ + int (*get_load_state)(void *img_info); +}; + +#if defined __cplusplus +} +#endif + +#endif /* REMOTEPROC_LOADER_H_ */ diff --git a/libraries/openamp_arduino/src/openamp/remoteproc_virtio.h b/libraries/openamp_arduino/src/openamp/remoteproc_virtio.h index fc1627e45..0b747cacc 100755 --- a/libraries/openamp_arduino/src/openamp/remoteproc_virtio.h +++ b/libraries/openamp_arduino/src/openamp/remoteproc_virtio.h @@ -1,150 +1,133 @@ -/* - * Remoteproc Virtio Framework - * - * Copyright(c) 2018 Xilinx Ltd. - * Copyright(c) 2011 Texas Instruments, Inc. - * Copyright(c) 2011 Google, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name Texas Instruments nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef REMOTEPROC_VIRTIO_H -#define REMOTEPROC_VIRTIO_H - -#include -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -/* define vdev notification funciton user should implement */ -typedef int (*rpvdev_notify_func)(void *priv, uint32_t id); - -/** - * struct remoteproc_virtio - * @priv pointer to private data - * @notifyid notification id - * @vdev_rsc address of vdev resource - * @vdev_rsc_io metal I/O region of vdev_info, can be NULL - * @notify notification function - * @vdev virtio device - * @node list node - */ -struct remoteproc_virtio { - void *priv; - uint32_t notify_id; - void *vdev_rsc; - struct metal_io_region *vdev_rsc_io; - rpvdev_notify_func notify; - struct virtio_device vdev; - struct metal_list node; -}; - -/** - * rproc_virtio_create_vdev - * - * Create rproc virtio vdev - * - * @role: 0 - virtio master, 1 - virtio slave - * @notifyid: virtio device notification id - * @rsc: pointer to the virtio device resource - * @rsc_io: pointer to the virtio device resource I/O region - * @priv: pointer to the private data - * @notify: vdev and virtqueue notification function - * @rst_cb: reset virtio device callback - * - * return pointer to the created virtio device for success, - * NULL for failure. - */ -struct virtio_device * -rproc_virtio_create_vdev(unsigned int role, unsigned int notifyid, - void *rsc, struct metal_io_region *rsc_io, - void *priv, - rpvdev_notify_func notify, - virtio_dev_reset_cb rst_cb); - -/** - * rproc_virtio_remove_vdev - * - * Create rproc virtio vdev - * - * @vdev - pointer to the virtio device - */ -void rproc_virtio_remove_vdev(struct virtio_device *vdev); - -/** - * rproc_virtio_create_vring - * - * Create rproc virtio vring - * - * @vdev: pointer to the virtio device - * @index: vring index in the virtio device - * @notifyid: remoteproc vring notification id - * @va: vring virtual address - * @io: pointer to vring I/O region - * @num_desc: number of descriptors - * @align: vring alignment - * - * return 0 for success, negative value for failure. - */ -int rproc_virtio_init_vring(struct virtio_device *vdev, unsigned int index, - unsigned int notifyid, void *va, - struct metal_io_region *io, - unsigned int num_descs, unsigned int align); - -/** - * rproc_virtio_notified - * - * remoteproc virtio is got notified - * - * @vdev - pointer to the virtio device - * @notifyid - notify id - * - * return 0 for successful, negative value for failure - */ -int rproc_virtio_notified(struct virtio_device *vdev, uint32_t notifyid); - -/** - * rproc_virtio_wait_remote_ready - * - * Blocking function, waiting for the remote core is ready to start - * communications. - * - * @vdev - pointer to the virtio device - * - * return true when remote processor is ready. - */ -void rproc_virtio_wait_remote_ready(struct virtio_device *vdev); - -#if defined __cplusplus -} -#endif - -#endif /* REMOTEPROC_VIRTIO_H */ +/* + * Remoteproc Virtio Framework + * + * Copyright(c) 2018 Xilinx Ltd. + * Copyright(c) 2011 Texas Instruments, Inc. + * Copyright(c) 2011 Google, Inc. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef REMOTEPROC_VIRTIO_H +#define REMOTEPROC_VIRTIO_H + +#include +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* maximum number of vring descriptors for a vdev limited by 16-bit data type */ +#define RPROC_MAX_VRING_DESC USHRT_MAX + +/* cache invalidation helpers for resource table */ +#ifdef VIRTIO_CACHED_RSC_TABLE +#warning "VIRTIO_CACHED_RSC_TABLE is deprecated, please use VIRTIO_USE_DCACHE" +#endif +#if defined(VIRTIO_CACHED_RSC_TABLE) || defined(VIRTIO_USE_DCACHE) +#define RSC_TABLE_FLUSH(x, s) CACHE_FLUSH(x, s) +#define RSC_TABLE_INVALIDATE(x, s) CACHE_INVALIDATE(x, s) +#else +#define RSC_TABLE_FLUSH(x, s) do { } while (0) +#define RSC_TABLE_INVALIDATE(x, s) do { } while (0) +#endif /* VIRTIO_CACHED_RSC_TABLE || VIRTIO_USE_DCACHE */ + +/* define vdev notification function user should implement */ +typedef int (*rpvdev_notify_func)(void *priv, uint32_t id); + +/** @brief Virtio structure for remoteproc instance */ +struct remoteproc_virtio { + /** Pointer to private data */ + void *priv; + + /** Address of vdev resource */ + void *vdev_rsc; + + /** Metal I/O region of vdev_info, can be NULL */ + struct metal_io_region *vdev_rsc_io; + + /** Notification function */ + rpvdev_notify_func notify; + + /** Virtio device */ + struct virtio_device vdev; + + /** List node */ + struct metal_list node; +}; + +/** + * @brief Create rproc virtio vdev + * + * @param role VIRTIO_DEV_DRIVER or VIRTIO_DEV_DEVICE + * @param notifyid Virtio device notification id + * @param rsc Pointer to the virtio device resource + * @param rsc_io Pointer to the virtio device resource I/O region + * @param priv Pointer to the private data + * @param notify vdev and virtqueue notification function + * @param rst_cb Reset virtio device callback + * + * @return pointer to the created virtio device for success, + * NULL for failure. + */ +struct virtio_device * +rproc_virtio_create_vdev(unsigned int role, unsigned int notifyid, + void *rsc, struct metal_io_region *rsc_io, + void *priv, + rpvdev_notify_func notify, + virtio_dev_reset_cb rst_cb); + +/** + * @brief Remove rproc virtio vdev + * + * @param vdev Pointer to the virtio device + */ +void rproc_virtio_remove_vdev(struct virtio_device *vdev); + +/** + * @brief Initialize rproc virtio vring + * + * @param vdev Pointer to the virtio device + * @param index vring index in the virtio device + * @param notifyid remoteproc vring notification id + * @param va vring virtual address + * @param io Pointer to vring I/O region + * @param num_descs Number of descriptors + * @param align vring alignment + * + * @return 0 for success, negative value for failure. + */ +int rproc_virtio_init_vring(struct virtio_device *vdev, unsigned int index, + unsigned int notifyid, void *va, + struct metal_io_region *io, + unsigned int num_descs, unsigned int align); + +/** + * @brief remoteproc virtio is got notified + * + * @param vdev Pointer to the virtio device + * @param notifyid Notify id + * + * @return 0 for successful, negative value for failure + */ +int rproc_virtio_notified(struct virtio_device *vdev, uint32_t notifyid); + +/** + * @brief Blocking function, waiting for the remote core is ready to start + * communications. + * + * @param vdev Pointer to the virtio device + * + * @return true when remote processor is ready. + */ +void rproc_virtio_wait_remote_ready(struct virtio_device *vdev); + +#if defined __cplusplus +} +#endif + +#endif /* REMOTEPROC_VIRTIO_H */ diff --git a/libraries/openamp_arduino/src/openamp/rpmsg.h b/libraries/openamp_arduino/src/openamp/rpmsg.h index a9f47c26d..9cf1e7444 100755 --- a/libraries/openamp_arduino/src/openamp/rpmsg.h +++ b/libraries/openamp_arduino/src/openamp/rpmsg.h @@ -1,357 +1,568 @@ -/* - * Remote processor messaging - * - * Copyright (C) 2011 Texas Instruments, Inc. - * Copyright (C) 2011 Google, Inc. - * All rights reserved. - * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef _RPMSG_H_ -#define _RPMSG_H_ - -#include "compiler.h" -#include -#include -#include -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -/* Configurable parameters */ -#define RPMSG_NAME_SIZE (32) -#define RPMSG_ADDR_BMP_SIZE (4) - -#define RPMSG_NS_EPT_ADDR (0x35) -#define RPMSG_ADDR_ANY 0xFFFFFFFF - -/* Error macros. */ -#define RPMSG_SUCCESS 0 -#define RPMSG_ERROR_BASE -2000 -#define RPMSG_ERR_NO_MEM (RPMSG_ERROR_BASE - 1) -#define RPMSG_ERR_NO_BUFF (RPMSG_ERROR_BASE - 2) -#define RPMSG_ERR_PARAM (RPMSG_ERROR_BASE - 3) -#define RPMSG_ERR_DEV_STATE (RPMSG_ERROR_BASE - 4) -#define RPMSG_ERR_BUFF_SIZE (RPMSG_ERROR_BASE - 5) -#define RPMSG_ERR_INIT (RPMSG_ERROR_BASE - 6) -#define RPMSG_ERR_ADDR (RPMSG_ERROR_BASE - 7) - -struct rpmsg_endpoint; -struct rpmsg_device; - -typedef int (*rpmsg_ept_cb)(struct rpmsg_endpoint *ept, void *data, - size_t len, uint32_t src, void *priv); -typedef void (*rpmsg_ns_unbind_cb)(struct rpmsg_endpoint *ept); -typedef void (*rpmsg_ns_bind_cb)(struct rpmsg_device *rdev, - const char *name, uint32_t dest); - -/** - * struct rpmsg_endpoint - binds a local rpmsg address to its user - * @name:name of the service supported - * @rdev: pointer to the rpmsg device - * @addr: local address of the endpoint - * @dest_addr: address of the default remote endpoint binded. - * @cb: user rx callback, return value of this callback is reserved - * for future use, for now, only allow RPMSG_SUCCESS as return value. - * @ns_unbind_cb: end point service service unbind callback, called when remote - * ept is destroyed. - * @node: end point node. - * @addr: local rpmsg address - * @priv: private data for the driver's use - * - * In essence, an rpmsg endpoint represents a listener on the rpmsg bus, as - * it binds an rpmsg address with an rx callback handler. - */ -struct rpmsg_endpoint { - char name[RPMSG_NAME_SIZE]; - struct rpmsg_device *rdev; - uint32_t addr; - uint32_t dest_addr; - rpmsg_ept_cb cb; - rpmsg_ns_unbind_cb ns_unbind_cb; - struct metal_list node; - void *priv; -}; - -/** - * struct rpmsg_device_ops - RPMsg device operations - * @send_offchannel_raw: send RPMsg data - */ -struct rpmsg_device_ops { - int (*send_offchannel_raw)(struct rpmsg_device *rdev, - uint32_t src, uint32_t dst, - const void *data, int size, int wait); -}; - -/** - * struct rpmsg_device - representation of a RPMsg device - * @endpoints: list of endpoints - * @ns_ept: name service endpoint - * @bitmap: table endpoin address allocation. - * @lock: mutex lock for rpmsg management - * @ns_bind_cb: callback handler for name service announcement without local - * endpoints waiting to bind. - * @ops: RPMsg device operations - */ -struct rpmsg_device { - struct metal_list endpoints; - struct rpmsg_endpoint ns_ept; - unsigned long bitmap[RPMSG_ADDR_BMP_SIZE]; - metal_mutex_t lock; - rpmsg_ns_bind_cb ns_bind_cb; - struct rpmsg_device_ops ops; -}; - -/** - * rpmsg_send_offchannel_raw() - send a message across to the remote processor, - * specifying source and destination address. - * @ept: the rpmsg endpoint - * @data: payload of the message - * @len: length of the payload - * - * This function sends @data of length @len to the remote @dst address from - * the source @src address. - * The message will be sent to the remote processor which the channel belongs - * to. - * In case there are no TX buffers available, the function will block until - * one becomes available, or a timeout of 15 seconds elapses. When the latter - * happens, -ERESTARTSYS is returned. - * - * Returns number of bytes it has sent or negative error value on failure. - */ -int rpmsg_send_offchannel_raw(struct rpmsg_endpoint *ept, uint32_t src, - uint32_t dst, const void *data, int size, - int wait); - -/** - * rpmsg_send() - send a message across to the remote processor - * @ept: the rpmsg endpoint - * @data: payload of the message - * @len: length of the payload - * - * This function sends @data of length @len based on the @ept. - * The message will be sent to the remote processor which the channel belongs - * to, using @ept's source and destination addresses. - * In case there are no TX buffers available, the function will block until - * one becomes available, or a timeout of 15 seconds elapses. When the latter - * happens, -ERESTARTSYS is returned. - * - * Returns number of bytes it has sent or negative error value on failure. - */ -static inline int rpmsg_send(struct rpmsg_endpoint *ept, const void *data, - int len) -{ - if (ept->dest_addr == RPMSG_ADDR_ANY) - return RPMSG_ERR_ADDR; - return rpmsg_send_offchannel_raw(ept, ept->addr, ept->dest_addr, data, - len, true); -} - -/** - * rpmsg_sendto() - send a message across to the remote processor, specify dst - * @ept: the rpmsg endpoint - * @data: payload of message - * @len: length of payload - * @dst: destination address - * - * This function sends @data of length @len to the remote @dst address. - * The message will be sent to the remote processor which the @ept - * channel belongs to, using @ept's source address. - * In case there are no TX buffers available, the function will block until - * one becomes available, or a timeout of 15 seconds elapses. When the latter - * happens, -ERESTARTSYS is returned. - * - * Returns number of bytes it has sent or negative error value on failure. - */ -static inline int rpmsg_sendto(struct rpmsg_endpoint *ept, const void *data, - int len, uint32_t dst) -{ - return rpmsg_send_offchannel_raw(ept, ept->addr, dst, data, len, true); -} - -/** - * rpmsg_send_offchannel() - send a message using explicit src/dst addresses - * @ept: the rpmsg endpoint - * @src: source address - * @dst: destination address - * @data: payload of message - * @len: length of payload - * - * This function sends @data of length @len to the remote @dst address, - * and uses @src as the source address. - * The message will be sent to the remote processor which the @ept - * channel belongs to. - * In case there are no TX buffers available, the function will block until - * one becomes available, or a timeout of 15 seconds elapses. When the latter - * happens, -ERESTARTSYS is returned. - * - * Returns number of bytes it has sent or negative error value on failure. - */ -static inline int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, - uint32_t src, uint32_t dst, - const void *data, int len) -{ - return rpmsg_send_offchannel_raw(ept, src, dst, data, len, true); -} - -/** - * rpmsg_trysend() - send a message across to the remote processor - * @ept: the rpmsg endpoint - * @data: payload of message - * @len: length of payload - * - * This function sends @data of length @len on the @ept channel. - * The message will be sent to the remote processor which the @ept - * channel belongs to, using @ept's source and destination addresses. - * In case there are no TX buffers available, the function will immediately - * return -ENOMEM without waiting until one becomes available. - * - * Returns number of bytes it has sent or negative error value on failure. - */ -static inline int rpmsg_trysend(struct rpmsg_endpoint *ept, const void *data, - int len) -{ - if (ept->dest_addr == RPMSG_ADDR_ANY) - return RPMSG_ERR_ADDR; - return rpmsg_send_offchannel_raw(ept, ept->addr, ept->dest_addr, data, - len, false); -} - -/** - * rpmsg_trysendto() - send a message across to the remote processor, - * specify dst - * @ept: the rpmsg endpoint - * @data: payload of message - * @len: length of payload - * @dst: destination address - * - * This function sends @data of length @len to the remote @dst address. - * The message will be sent to the remote processor which the @ept - * channel belongs to, using @ept's source address. - * In case there are no TX buffers available, the function will immediately - * return -ENOMEM without waiting until one becomes available. - * - * Returns number of bytes it has sent or negative error value on failure. - */ -static inline int rpmsg_trysendto(struct rpmsg_endpoint *ept, const void *data, - int len, uint32_t dst) -{ - return rpmsg_send_offchannel_raw(ept, ept->addr, dst, data, len, false); -} - -/** - * rpmsg_trysend_offchannel() - send a message using explicit src/dst addresses - * @ept: the rpmsg endpoint - * @src: source address - * @dst: destination address - * @data: payload of message - * @len: length of payload - * - * This function sends @data of length @len to the remote @dst address, - * and uses @src as the source address. - * The message will be sent to the remote processor which the @ept - * channel belongs to. - * In case there are no TX buffers available, the function will immediately - * return -ENOMEM without waiting until one becomes available. - * - * Returns number of bytes it has sent or negative error value on failure. - */ -static inline int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, - uint32_t src, uint32_t dst, - const void *data, int len) -{ - return rpmsg_send_offchannel_raw(ept, src, dst, data, len, false); -} - -/** - * rpmsg_init_ept - initialize rpmsg endpoint - * - * Initialize an RPMsg endpoint with a name, source address, - * remoteproc address, endpoitn callback, and destroy endpoint callback. - * - * @ept: pointer to rpmsg endpoint - * @name: service name associated to the endpoint - * @src: local address of the endpoint - * @dest: target address of the endpoint - * @cb: endpoint callback - * @ns_unbind_cb: end point service unbind callback, called when remote ept is - * destroyed. - */ -static inline void rpmsg_init_ept(struct rpmsg_endpoint *ept, - const char *name, - uint32_t src, uint32_t dest, - rpmsg_ept_cb cb, - rpmsg_ns_unbind_cb ns_unbind_cb) -{ - strncpy(ept->name, name, sizeof(ept->name)); - ept->addr = src; - ept->dest_addr = dest; - ept->cb = cb; - ept->ns_unbind_cb = ns_unbind_cb; -} - -/** - * rpmsg_create_ept - create rpmsg endpoint and register it to rpmsg device - * - * Create a RPMsg endpoint, initialize it with a name, source address, - * remoteproc address, endpoitn callback, and destroy endpoint callback, - * and register it to the RPMsg device. - * - * @ept: pointer to rpmsg endpoint - * @name: service name associated to the endpoint - * @src: local address of the endpoint - * @dest: target address of the endpoint - * @cb: endpoint callback - * @ns_unbind_cb: end point service unbind callback, called when remote ept is - * destroyed. - * - * In essence, an rpmsg endpoint represents a listener on the rpmsg bus, as - * it binds an rpmsg address with an rx callback handler. - * - * Rpmsg client should create an endpoint to discuss with remote. rpmsg client - * provide at least a channel name, a callback for message notification and by - * default endpoint source address should be set to RPMSG_ADDR_ANY. - * - * As an option Some rpmsg clients can specify an endpoint with a specific - * source address. - */ - -int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev, - const char *name, uint32_t src, uint32_t dest, - rpmsg_ept_cb cb, rpmsg_ns_unbind_cb ns_unbind_cb); - -/** - * rpmsg_destroy_ept - destroy rpmsg endpoint and unregister it from rpmsg - * device - * - * @ept: pointer to the rpmsg endpoint - * - * It unregisters the rpmsg endpoint from the rpmsg device and calls the - * destroy endpoint callback if it is provided. - */ -void rpmsg_destroy_ept(struct rpmsg_endpoint *ept); - -/** - * is_rpmsg_ept_ready - check if the rpmsg endpoint ready to send - * - * @ept: pointer to rpmsg endpoint - * - * Returns 1 if the rpmsg endpoint has both local addr and destination - * addr set, 0 otherwise - */ -static inline unsigned int is_rpmsg_ept_ready(struct rpmsg_endpoint *ept) -{ - return (ept->dest_addr != RPMSG_ADDR_ANY && - ept->addr != RPMSG_ADDR_ANY); -} - -#if defined __cplusplus -} -#endif - -#endif /* _RPMSG_H_ */ +/* + * Remote processor messaging + * + * Copyright (C) 2011 Texas Instruments, Inc. + * Copyright (C) 2011 Google, Inc. + * All rights reserved. + * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _RPMSG_H_ +#define _RPMSG_H_ + +#include +#include +#include +#include +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* Configurable parameters */ +#define RPMSG_NAME_SIZE (32) +#define RPMSG_ADDR_BMP_SIZE (128) + +#define RPMSG_NS_EPT_ADDR (0x35) +#define RPMSG_RESERVED_ADDRESSES (1024) +#define RPMSG_ADDR_ANY 0xFFFFFFFF + +/* Error macros. */ +#define RPMSG_SUCCESS 0 +#define RPMSG_ERROR_BASE -2000 +#define RPMSG_ERR_NO_MEM (RPMSG_ERROR_BASE - 1) +#define RPMSG_ERR_NO_BUFF (RPMSG_ERROR_BASE - 2) +#define RPMSG_ERR_PARAM (RPMSG_ERROR_BASE - 3) +#define RPMSG_ERR_DEV_STATE (RPMSG_ERROR_BASE - 4) +#define RPMSG_ERR_BUFF_SIZE (RPMSG_ERROR_BASE - 5) +#define RPMSG_ERR_INIT (RPMSG_ERROR_BASE - 6) +#define RPMSG_ERR_ADDR (RPMSG_ERROR_BASE - 7) +#define RPMSG_ERR_PERM (RPMSG_ERROR_BASE - 8) + +struct rpmsg_endpoint; +struct rpmsg_device; + +/* Returns positive value on success or negative error value on failure */ +typedef int (*rpmsg_ept_cb)(struct rpmsg_endpoint *ept, void *data, + size_t len, uint32_t src, void *priv); +typedef void (*rpmsg_ns_unbind_cb)(struct rpmsg_endpoint *ept); +typedef void (*rpmsg_ns_bind_cb)(struct rpmsg_device *rdev, + const char *name, uint32_t dest); + +/** + * @brief Structure that binds a local RPMsg address to its user + * + * In essence, an RPMsg endpoint represents a listener on the RPMsg bus, as + * it binds an RPMsg address with an rx callback handler. + */ +struct rpmsg_endpoint { + /** Name of the service supported */ + char name[RPMSG_NAME_SIZE]; + + /** Pointer to the RPMsg device */ + struct rpmsg_device *rdev; + + /** Local address of the endpoint */ + uint32_t addr; + + /** Address of the default remote endpoint binded */ + uint32_t dest_addr; + + /** + * User rx callback, return value of this callback is reserved for future + * use, for now, only allow RPMSG_SUCCESS as return value + */ + rpmsg_ept_cb cb; + + /** Endpoint service unbind callback, called when remote ept is destroyed */ + rpmsg_ns_unbind_cb ns_unbind_cb; + + /** Endpoint node */ + struct metal_list node; + + /** Private data for the driver's use */ + void *priv; +}; + +/** @brief RPMsg device operations */ +struct rpmsg_device_ops { + /** Send RPMsg data */ + int (*send_offchannel_raw)(struct rpmsg_device *rdev, + uint32_t src, uint32_t dst, + const void *data, int len, int wait); + + /** Hold RPMsg RX buffer */ + void (*hold_rx_buffer)(struct rpmsg_device *rdev, void *rxbuf); + + /** Release RPMsg RX buffer */ + void (*release_rx_buffer)(struct rpmsg_device *rdev, void *rxbuf); + + /** Get RPMsg TX buffer */ + void *(*get_tx_payload_buffer)(struct rpmsg_device *rdev, + uint32_t *len, int wait); + + /** Send RPMsg data without copy */ + int (*send_offchannel_nocopy)(struct rpmsg_device *rdev, + uint32_t src, uint32_t dst, + const void *data, int len); + + /** Release RPMsg TX buffer */ + int (*release_tx_buffer)(struct rpmsg_device *rdev, void *txbuf); +}; + +/** @brief Representation of a RPMsg device */ +struct rpmsg_device { + /** List of endpoints */ + struct metal_list endpoints; + + /** Name service endpoint */ + struct rpmsg_endpoint ns_ept; + + /** Table endpoint address allocation */ + unsigned long bitmap[metal_bitmap_longs(RPMSG_ADDR_BMP_SIZE)]; + + /** Mutex lock for RPMsg management */ + metal_mutex_t lock; + + /** Callback handler for name service announcement without local epts waiting to bind */ + rpmsg_ns_bind_cb ns_bind_cb; + + /** Callback handler for name service announcement, called when remote ept is destroyed */ + rpmsg_ns_bind_cb ns_unbind_cb; + + /** RPMsg device operations */ + struct rpmsg_device_ops ops; + + /** Create/destroy namespace message */ + bool support_ns; +}; + +/** + * @brief Send a message across to the remote processor, + * specifying source and destination address. + * + * This function sends @data of length @len to the remote @dst address from + * the source @src address. + * The message will be sent to the remote processor which the channel belongs + * to. + * + * @param ept The rpmsg endpoint + * @param src Source endpoint address of the message + * @param dst Destination endpoint address of the message + * @param data Payload of the message + * @param len Length of the payload + * @param wait Boolean value indicating whether to wait on buffers + * + * @return Number of bytes it has sent or negative error value on failure. + */ +int rpmsg_send_offchannel_raw(struct rpmsg_endpoint *ept, uint32_t src, + uint32_t dst, const void *data, int len, + int wait); + +/** + * @brief Send a message across to the remote processor + * + * This function sends @data of length @len based on the @ept. + * The message will be sent to the remote processor which the channel belongs + * to, using @ept's source and destination addresses. + * In case there are no TX buffers available, the function will block until + * one becomes available, or a timeout of 15 seconds elapses. When the latter + * happens, -ERESTARTSYS is returned. + * + * @param ept The rpmsg endpoint + * @param data Payload of the message + * @param len Length of the payload + * + * @return Number of bytes it has sent or negative error value on failure. + */ +static inline int rpmsg_send(struct rpmsg_endpoint *ept, const void *data, + int len) +{ + if (!ept) + return RPMSG_ERR_PARAM; + + return rpmsg_send_offchannel_raw(ept, ept->addr, ept->dest_addr, data, + len, true); +} + +/** + * @brief Send a message across to the remote processor, specify dst + * + * This function sends @data of length @len to the remote @dst address. + * The message will be sent to the remote processor which the @ept + * channel belongs to, using @ept's source address. + * In case there are no TX buffers available, the function will block until + * one becomes available, or a timeout of 15 seconds elapses. When the latter + * happens, -ERESTARTSYS is returned. + * + * @param ept The rpmsg endpoint + * @param data Payload of message + * @param len Length of payload + * @param dst Destination address + * + * @return Number of bytes it has sent or negative error value on failure. + */ +static inline int rpmsg_sendto(struct rpmsg_endpoint *ept, const void *data, + int len, uint32_t dst) +{ + if (!ept) + return RPMSG_ERR_PARAM; + + return rpmsg_send_offchannel_raw(ept, ept->addr, dst, data, len, true); +} + +/** + * @brief Send a message using explicit src/dst addresses + * + * This function sends @data of length @len to the remote @dst address, + * and uses @src as the source address. + * The message will be sent to the remote processor which the @ept + * channel belongs to. + * In case there are no TX buffers available, the function will block until + * one becomes available, or a timeout of 15 seconds elapses. When the latter + * happens, -ERESTARTSYS is returned. + * + * @param ept The rpmsg endpoint + * @param src Source address + * @param dst Destination address + * @param data Payload of message + * @param len Length of payload + * + * @return Number of bytes it has sent or negative error value on failure. + */ +static inline int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, + uint32_t src, uint32_t dst, + const void *data, int len) +{ + return rpmsg_send_offchannel_raw(ept, src, dst, data, len, true); +} + +/** + * @brief Send a message across to the remote processor + * + * This function sends @data of length @len on the @ept channel. + * The message will be sent to the remote processor which the @ept + * channel belongs to, using @ept's source and destination addresses. + * In case there are no TX buffers available, the function will immediately + * return -ENOMEM without waiting until one becomes available. + * + * @param ept The rpmsg endpoint + * @param data Payload of message + * @param len Length of payload + * + * @return Number of bytes it has sent or negative error value on failure. + */ +static inline int rpmsg_trysend(struct rpmsg_endpoint *ept, const void *data, + int len) +{ + if (!ept) + return RPMSG_ERR_PARAM; + + return rpmsg_send_offchannel_raw(ept, ept->addr, ept->dest_addr, data, + len, false); +} + +/** + * @brief Send a message across to the remote processor, specify dst + * + * This function sends @data of length @len to the remote @dst address. + * The message will be sent to the remote processor which the @ept + * channel belongs to, using @ept's source address. + * In case there are no TX buffers available, the function will immediately + * return -ENOMEM without waiting until one becomes available. + * + * @param ept The rpmsg endpoint + * @param data Payload of message + * @param len Length of payload + * @param dst Destination address + * + * @return Number of bytes it has sent or negative error value on failure. + */ +static inline int rpmsg_trysendto(struct rpmsg_endpoint *ept, const void *data, + int len, uint32_t dst) +{ + if (!ept) + return RPMSG_ERR_PARAM; + + return rpmsg_send_offchannel_raw(ept, ept->addr, dst, data, len, false); +} + +/** + * @brief Send a message using explicit src/dst addresses + * + * This function sends @data of length @len to the remote @dst address, + * and uses @src as the source address. + * The message will be sent to the remote processor which the @ept + * channel belongs to. + * In case there are no TX buffers available, the function will immediately + * return -ENOMEM without waiting until one becomes available. + * + * @param ept The rpmsg endpoint + * @param src Source address + * @param dst Destination address + * @param data Payload of message + * @param len Length of payload + * + * @return Number of bytes it has sent or negative error value on failure. + */ +static inline int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, + uint32_t src, uint32_t dst, + const void *data, int len) +{ + return rpmsg_send_offchannel_raw(ept, src, dst, data, len, false); +} + +/** + * @brief Holds the rx buffer for usage outside the receive callback. + * + * Calling this function prevents the RPMsg receive buffer from being released + * back to the pool of shmem buffers. This API can only be called at rx + * callback context (rpmsg_rx_cb_t). With this API, the application doesn't + * need to copy the message in rx callback. Instead, the rx buffer base address + * is saved in application context and further processed in application + * process. After the message is processed, the application can release the rx + * buffer for future reuse in vring by calling the rpmsg_release_rx_buffer() + * function. + * + * @param ept The rpmsg endpoint + * @param rxbuf RX buffer with message payload + * + * @see rpmsg_release_rx_buffer + */ +void rpmsg_hold_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf); + +/** + * @brief Releases the rx buffer for future reuse in vring. + * + * This API can be called at process context when the message in rx buffer is + * processed. + * + * @param ept The rpmsg endpoint + * @param rxbuf rx buffer with message payload + * + * @see rpmsg_hold_rx_buffer + */ +void rpmsg_release_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf); + +/** + * @brief Gets the tx buffer for message payload. + * + * This API can only be called at process context to get the tx buffer in vring. + * By this way, the application can directly put its message into the vring tx + * buffer without copy from an application buffer. + * It is the application responsibility to correctly fill the allocated tx + * buffer by data and passing correct parameters to the rpmsg_send_nocopy() or + * rpmsg_sendto_nocopy() function to perform data no-copy-send mechanism. + * + * @param ept Pointer to rpmsg endpoint + * @param len Pointer to store tx buffer size + * @param wait Boolean, wait or not for buffer to become available + * + * @return The tx buffer address on success and NULL on failure + * + * @see rpmsg_send_offchannel_nocopy + * @see rpmsg_sendto_nocopy + * @see rpmsg_send_nocopy + */ +void *rpmsg_get_tx_payload_buffer(struct rpmsg_endpoint *ept, + uint32_t *len, int wait); + +/** + * @brief Releases unused buffer. + * + * This API can be called when the Tx buffer reserved by + * rpmsg_get_tx_payload_buffer needs to be released without having been sent to + * the remote side. + * + * Note that the rpmsg virtio is not able to detect if a buffer has already + * been released. The user must prevent a double release (e.g. by resetting its + * buffer pointer to zero after the release). + * + * @param ept The rpmsg endpoint + * @param txbuf tx buffer with message payload + * + * @return + * - RPMSG_SUCCESS on success + * - RPMSG_ERR_PARAM on invalid parameter + * - RPMSG_ERR_PERM if service not implemented + * + * @see rpmsg_get_tx_payload_buffer + */ +int rpmsg_release_tx_buffer(struct rpmsg_endpoint *ept, void *txbuf); + +/** + * @brief Send a message in tx buffer reserved by + * rpmsg_get_tx_payload_buffer() across to the remote processor. + * + * This function sends buf of length len to the remote dst address, + * and uses src as the source address. + * The message will be sent to the remote processor which the ept + * endpoint belongs to. + * The application has to take the responsibility for: + * 1. tx buffer reserved (rpmsg_get_tx_payload_buffer() ) + * 2. filling the data to be sent into the pre-allocated tx buffer + * 3. not exceeding the buffer size when filling the data + * 4. data cache coherency + * + * After the rpmsg_send_offchannel_nocopy() function is issued the tx buffer is + * no more owned by the sending task and must not be touched anymore unless the + * rpmsg_send_offchannel_nocopy() function fails and returns an error. In that + * case application should try to re-issue the rpmsg_send_offchannel_nocopy() + * again. + * + * @param ept The rpmsg endpoint + * @param src The rpmsg endpoint local address + * @param dst The rpmsg endpoint remote address + * @param data TX buffer with message filled + * @param len Length of payload + * + * @return Number of bytes it has sent or negative error value on failure. + * + * @see rpmsg_get_tx_payload_buffer + * @see rpmsg_sendto_nocopy + * @see rpmsg_send_nocopy + */ +int rpmsg_send_offchannel_nocopy(struct rpmsg_endpoint *ept, uint32_t src, + uint32_t dst, const void *data, int len); + +/** + * @brief Sends a message in tx buffer allocated by + * rpmsg_get_tx_payload_buffer() across to the remote processor, specify dst. + * + * This function sends buf of length len to the remote dst address. + * The message will be sent to the remote processor which the ept + * endpoint belongs to, using ept's source address. + * The application has to take the responsibility for: + * 1. tx buffer allocation (rpmsg_get_tx_payload_buffer() ) + * 2. filling the data to be sent into the pre-allocated tx buffer + * 3. not exceeding the buffer size when filling the data + * 4. data cache coherency + * + * After the rpmsg_sendto_nocopy() function is issued the tx buffer is no more + * owned by the sending task and must not be touched anymore unless the + * rpmsg_sendto_nocopy() function fails and returns an error. In that case the + * application should try to re-issue the rpmsg_sendto_nocopy() again. + * + * @param ept The rpmsg endpoint + * @param data TX buffer with message filled + * @param len Length of payload + * @param dst Destination address + * + * @return Number of bytes it has sent or negative error value on failure. + * + * @see rpmsg_get_tx_payload_buffer + * @see rpmsg_send_offchannel_nocopy + * @see rpmsg_send_nocopy + */ +static inline int rpmsg_sendto_nocopy(struct rpmsg_endpoint *ept, + const void *data, int len, uint32_t dst) +{ + if (!ept) + return RPMSG_ERR_PARAM; + + return rpmsg_send_offchannel_nocopy(ept, ept->addr, dst, data, len); +} + +/** + * @brief Send a message in tx buffer reserved by + * rpmsg_get_tx_payload_buffer() across to the remote processor. + * + * This function sends buf of length len on the ept endpoint. + * The message will be sent to the remote processor which the ept + * endpoint belongs to, using ept's source and destination addresses. + * The application has to take the responsibility for: + * 1. tx buffer reserved (rpmsg_get_tx_payload_buffer() ) + * 2. filling the data to be sent into the pre-allocated tx buffer + * 3. not exceeding the buffer size when filling the data + * 4. data cache coherency + * + * After the rpmsg_send_nocopy() function is issued the tx buffer is no more + * owned by the sending task and must not be touched anymore unless the + * rpmsg_send_nocopy() function fails and returns an error. In that case the + * application should try to re-issue the rpmsg_send_nocopy() again. + * + * @param ept The rpmsg endpoint + * @param data TX buffer with message filled + * @param len Length of payload + * + * @return Number of bytes it has sent or negative error value on failure. + * + * @see rpmsg_get_tx_payload_buffer + * @see rpmsg_send_offchannel_nocopy + * @see rpmsg_sendto_nocopy + */ +static inline int rpmsg_send_nocopy(struct rpmsg_endpoint *ept, + const void *data, int len) +{ + if (!ept) + return RPMSG_ERR_PARAM; + + return rpmsg_send_offchannel_nocopy(ept, ept->addr, + ept->dest_addr, data, len); +} + +/** + * @brief Create rpmsg endpoint and register it to rpmsg device + * + * Create a RPMsg endpoint, initialize it with a name, source address, + * remoteproc address, endpoint callback, and destroy endpoint callback, + * and register it to the RPMsg device. + * + * In essence, an rpmsg endpoint represents a listener on the rpmsg bus, as + * it binds an rpmsg address with an rx callback handler. + * + * Rpmsg client should create an endpoint to discuss with remote. rpmsg client + * provide at least a channel name, a callback for message notification and by + * default endpoint source address should be set to RPMSG_ADDR_ANY. + * + * As an option Some rpmsg clients can specify an endpoint with a specific + * source address. + * + * @param ept Pointer to rpmsg endpoint + * @param rdev RPMsg device associated with the endpoint + * @param name Service name associated to the endpoint + * @param src Local address of the endpoint + * @param dest Target address of the endpoint + * @param cb Endpoint callback + * @param ns_unbind_cb Endpoint service unbind callback, called when remote + * ept is destroyed. + * + * @return 0 on success, or negative error value on failure. + */ +int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev, + const char *name, uint32_t src, uint32_t dest, + rpmsg_ept_cb cb, rpmsg_ns_unbind_cb ns_unbind_cb); + +/** + * @brief Destroy rpmsg endpoint and unregister it from rpmsg device + * + * It unregisters the rpmsg endpoint from the rpmsg device and calls the + * destroy endpoint callback if it is provided. + * + * @param ept Pointer to the rpmsg endpoint + */ +void rpmsg_destroy_ept(struct rpmsg_endpoint *ept); + +/** + * @brief Check if the rpmsg endpoint ready to send + * + * @param ept Pointer to rpmsg endpoint + * + * @return 1 if the rpmsg endpoint has both local addr and destination + * addr set, 0 otherwise + */ +static inline unsigned int is_rpmsg_ept_ready(struct rpmsg_endpoint *ept) +{ + return ept && ept->rdev && ept->dest_addr != RPMSG_ADDR_ANY; +} + +#if defined __cplusplus +} +#endif + +#endif /* _RPMSG_H_ */ diff --git a/libraries/openamp_arduino/src/openamp/rpmsg_retarget.h b/libraries/openamp_arduino/src/openamp/rpmsg_retarget.h index 0df3a794a..f020f6a79 100755 --- a/libraries/openamp_arduino/src/openamp/rpmsg_retarget.h +++ b/libraries/openamp_arduino/src/openamp/rpmsg_retarget.h @@ -1,119 +1,134 @@ -#ifndef RPMSG_RETARGET_H -#define RPMSG_RETARGET_H - -#include -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -/* File Operations System call definitions */ -#define OPEN_SYSCALL_ID 0x1UL -#define CLOSE_SYSCALL_ID 0x2UL -#define WRITE_SYSCALL_ID 0x3UL -#define READ_SYSCALL_ID 0x4UL -#define ACK_STATUS_ID 0x5UL - -#define TERM_SYSCALL_ID 0x6UL - -#define DEFAULT_PROXY_ENDPOINT 0xFFUL - -struct rpmsg_rpc_data; - -typedef int (*rpmsg_rpc_poll)(void *arg); -typedef void (*rpmsg_rpc_shutdown_cb)(struct rpmsg_rpc_data *rpc); - -struct rpmsg_rpc_syscall_header { - int32_t int_field1; - int32_t int_field2; - uint32_t data_len; -}; - -struct rpmsg_rpc_syscall { - uint32_t id; - struct rpmsg_rpc_syscall_header args; -}; - -struct rpmsg_rpc_data { - struct rpmsg_endpoint ept; - int ept_destroyed; - atomic_int nacked; - void *respbuf; - size_t respbuf_len; - rpmsg_rpc_poll poll; - void *poll_arg; - rpmsg_rpc_shutdown_cb shutdown_cb; - metal_mutex_t lock; - struct metal_spinlock buflock; -}; - -/** - * rpmsg_rpc_init - initialize RPMsg remote procedure call - * - * This function is to intialize the remote procedure call - * global data. RPMsg RPC will send request to remote and - * wait for callback. - * - * @rpc: pointer to the global remote procedure call data - * @rdev: pointer to the rpmsg device - * @ept_name: name of the endpoint used by RPC - * @ept_addr: address of the endpoint used by RPC - * @ept_raddr: remote address of the endpoint used by RPC - * @poll_arg: pointer to poll function argument - * @poll: poll function - * @shutdown_cb: shutdown callback function - * - * return 0 for success, and negative value for failure. - */ -int rpmsg_rpc_init(struct rpmsg_rpc_data *rpc, - struct rpmsg_device *rdev, - const char *ept_name, uint32_t ept_addr, - uint32_t ept_raddr, - void *poll_arg, rpmsg_rpc_poll poll, - rpmsg_rpc_shutdown_cb shutdown_cb); - -/** - * rpmsg_rpc_release - release RPMsg remote procedure call - * - * This function is to release remoteproc procedure call - * global data. - * - * @rpc: pointer to the globacl remote procedure call - */ -void rpmsg_rpc_release(struct rpmsg_rpc_data *rpc); - -/** - * rpmsg_rpc_send - Request RPMsg RPC call - * - * This function sends RPC request it will return with the length - * of data and the response buffer. - * - * @rpc: pointer to remoteproc procedure call data struct - * @req: pointer to request buffer - * @len: length of the request data - * @resp: pointer to where store the response buffer - * @resp_len: length of the response buffer - * - * return length of the received response, negative value for failure. - */ -int rpmsg_rpc_send(struct rpmsg_rpc_data *rpc, - void *req, size_t len, - void *resp, size_t resp_len); - -/** - * rpmsg_set_default_rpc - set default RPMsg RPC data - * - * The default RPC data is used to redirect standard C file operations - * to RPMsg channels. - * - * @rpc: pointer to remoteproc procedure call data struct - */ -void rpmsg_set_default_rpc(struct rpmsg_rpc_data *rpc); - -#if defined __cplusplus -} -#endif - -#endif /* RPMSG_RETARGET_H */ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef RPMSG_RETARGET_H +#define RPMSG_RETARGET_H + +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* File Operations System call definitions */ +#define OPEN_SYSCALL_ID 0x1UL +#define CLOSE_SYSCALL_ID 0x2UL +#define WRITE_SYSCALL_ID 0x3UL +#define READ_SYSCALL_ID 0x4UL +#define ACK_STATUS_ID 0x5UL + +#define TERM_SYSCALL_ID 0x6UL + +#define DEFAULT_PROXY_ENDPOINT 0xFFUL + +struct rpmsg_rpc_data; + +typedef int (*rpmsg_rpc_poll)(void *arg); +typedef void (*rpmsg_rpc_shutdown_cb)(struct rpmsg_rpc_data *rpc); + +struct rpmsg_rpc_syscall_header { + int32_t int_field1; + int32_t int_field2; + uint32_t data_len; +}; + +struct rpmsg_rpc_syscall { + uint32_t id; + struct rpmsg_rpc_syscall_header args; +}; + +struct rpmsg_rpc_data { + struct rpmsg_endpoint ept; + int ept_destroyed; + atomic_flag nacked; + void *respbuf; + size_t respbuf_len; + rpmsg_rpc_poll poll; + void *poll_arg; + rpmsg_rpc_shutdown_cb shutdown_cb; + metal_mutex_t lock; + struct metal_spinlock buflock; +}; + +/** + * @internal + * + * @brief Initialize RPMsg remote procedure call + * + * This function is to initialize the remote procedure call + * global data. RPMsg RPC will send request to remote and + * wait for callback. + * + * @param rpc Pointer to the global remote procedure call data + * @param rdev Pointer to the rpmsg device + * @param ept_name Name of the endpoint used by RPC + * @param ept_addr Address of the endpoint used by RPC + * @param ept_raddr Remote address of the endpoint used by RPC + * @param poll_arg Pointer to poll function argument + * @param poll Poll function + * @param shutdown_cb Shutdown callback function + * + * @return 0 for success, and negative value for failure. + */ +int rpmsg_rpc_init(struct rpmsg_rpc_data *rpc, + struct rpmsg_device *rdev, + const char *ept_name, uint32_t ept_addr, + uint32_t ept_raddr, + void *poll_arg, rpmsg_rpc_poll poll, + rpmsg_rpc_shutdown_cb shutdown_cb); + +/** + * @internal + * + * @brief Release RPMsg remote procedure call + * + * This function is to release remoteproc procedure call + * global data. + * + * @param rpc Pointer to the global remote procedure call + */ +void rpmsg_rpc_release(struct rpmsg_rpc_data *rpc); + +/** + * @internal + * + * @brief Request RPMsg RPC call + * + * This function sends RPC request it will return with the length + * of data and the response buffer. + * + * @param rpc Pointer to remoteproc procedure call data struct + * @param req Pointer to request buffer + * @param len Length of the request data + * @param resp Pointer to where store the response buffer + * @param resp_len Length of the response buffer + * + * @return Length of the received response, negative value for failure. + */ +int rpmsg_rpc_send(struct rpmsg_rpc_data *rpc, + void *req, size_t len, + void *resp, size_t resp_len); + +/** + * @internal + * + * @brief Set default RPMsg RPC data + * + * The default RPC data is used to redirect standard C file operations + * to RPMsg channels. + * + * @param rpc Pointer to remoteproc procedure call data struct + */ +void rpmsg_set_default_rpc(struct rpmsg_rpc_data *rpc); + +#if defined __cplusplus +} +#endif + +#endif /* RPMSG_RETARGET_H */ diff --git a/libraries/openamp_arduino/src/openamp/rpmsg_rpc_client_server.h b/libraries/openamp_arduino/src/openamp/rpmsg_rpc_client_server.h new file mode 100644 index 000000000..f9407849e --- /dev/null +++ b/libraries/openamp_arduino/src/openamp/rpmsg_rpc_client_server.h @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2021, L&T Technology Services Ltd. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef RPMSG_RPC_CLIENT_SERVER_H +#define RPMSG_RPC_CLIENT_SERVER_H + +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +#define RPMSG_RPC_OK 0 +#define RPMSG_RPC_INVALID_ID (-1L) +#define RPMSG_RPC_SERVICE_NAME "rpmsg-rpc" + +/* RPMSG_BUFFER_SIZE = 512 + * sizeof(struct rpmsg_hdr) = 16 + * RPMSG_BUFFER_SIZE - sizeof(struct rpmsg_hdr) - 1 = 495 + * Aligning to 64 bits -> 488UL + */ +#define MAX_BUF_LEN 488UL +#define MAX_FUNC_ID_LEN sizeof(unsigned long int) + +struct rpmsg_rpc_clt; +struct rpmsg_rpc_svr; + +typedef void (*rpmsg_rpc_shutdown_cb)(struct rpmsg_rpc_clt *rpc); +typedef void (*app_cb)(struct rpmsg_rpc_clt *rpc, int statust, void *data, + size_t len); +typedef int (*rpmsg_rpc_syscall_cb)(void *data, struct rpmsg_rpc_svr *rpcs); + +/** + * struct rpmsg_rpc_request - rpc request message + * + * @id: service id + * @params: request params + * + */ +struct rpmsg_rpc_request { + uint32_t id; + unsigned char params[MAX_BUF_LEN]; +}; + +/** @brief RPC request message */ +METAL_PACKED_BEGIN +struct rpmsg_rpc_answer { + /** Service ID */ + uint32_t id; + + /** Status of RPC */ + int32_t status; + + /** Answer params */ + unsigned char params[MAX_BUF_LEN]; +} METAL_PACKED_END; + +/** @brief Table for services */ +struct rpmsg_rpc_services { + /** Service ID */ + uint32_t id; + + /** ID callback */ + rpmsg_rpc_syscall_cb cb_function; +}; + +/** @brief Table for client services */ +struct rpmsg_rpc_client_services { + /** Service ID */ + uint32_t id; + + /** ID callback */ + app_cb cb; +}; + +/** + * @brief Server remote procedure call data + * + * RPMsg RPC will send request to endpoint + */ +struct rpmsg_rpc_svr { + /** RPMsg destination endpoint structure */ + struct rpmsg_endpoint ept; + + /** Service table */ + const struct rpmsg_rpc_services *services; + + /** Number of services */ + unsigned int n_services; +}; + +/** + * @brief Client remote procedure call data + * + * RPMsg RPC will send request to remote and + * wait for callback. + */ +struct rpmsg_rpc_clt { + /** RPMsg endpoint associated with the call */ + struct rpmsg_endpoint ept; + + /** Shutdown callback function */ + rpmsg_rpc_shutdown_cb shutdown_cb; + + /** Service table */ + const struct rpmsg_rpc_client_services *services; + + /** Number of services */ + unsigned int n_services; +}; + +/** + * @internal + * + * @brief Release RPMsg remote procedure call + * + * This function is to release remoteproc procedure call service + * + * @param rpc Pointer to the client remote procedure call data + */ +void rpmsg_rpc_client_release(struct rpmsg_rpc_clt *rpc); + +/** + * @internal + * + * @brief Initialize RPMsg remote procedure call + * + * This function is to initialize the remote procedure call + * client data. RPMsg RPC will send request to remote and + * wait for callback and load services to table + * + * @param rpc Pointer to the client remote procedure call data + * @param rdev Pointer to the rpmsg device + * @param shutdown_cb Shutdown callback function + * @param services Pointer to service table + * @param len Length of table + * + * @return 0 for success, and negative value for failure + */ +int rpmsg_rpc_client_init(struct rpmsg_rpc_clt *rpc, + struct rpmsg_device *rdev, + rpmsg_rpc_shutdown_cb shutdown_cb, + const struct rpmsg_rpc_client_services *services, + int len); + +/** + * @internal + * + * @brief Initialize RPMsg rpc for server + * + * This function create endpoint and loads services into table + * + * @param rpcs Pointer to the server rpc + * @param rdev Pointer to the rpmsg device + * @param services Pointer to service table + * @param len Length of table + * @param rpmsg_service_server_unbind Unbind function callback + * + * @return 0 for success, and negative value for failure + */ +int rpmsg_rpc_server_init(struct rpmsg_rpc_svr *rpcs, struct rpmsg_device *rdev, + const struct rpmsg_rpc_services *services, int len, + rpmsg_ns_unbind_cb rpmsg_service_server_unbind); + +/** + * @internal + * + * @brief Request RPMsg RPC call + * + * @param rpc Pointer to client remoteproc procedure call + * data + * @param rpc_id Function id + * @param request_param Pointer to request buffer + * @param req_param_size Length of the request data + * + * @return Length of the received response, negative value for failure. + */ +int rpmsg_rpc_client_send(struct rpmsg_rpc_clt *rpc, + unsigned int rpc_id, void *request_param, + size_t req_param_size); + +/** + * @internal + * + * @brief Request RPMsg RPC call + * + * This function sends RPC request + * + * @param rpcs Pointer to server rpc data + * @param rpc_id Function id + * @param status Status of rpc + * @param request_param Pointer to request buffer + * @param param_size Length of the request data + * + * @return Length of the received response, negative value for failure. + */ +int rpmsg_rpc_server_send(struct rpmsg_rpc_svr *rpcs, uint32_t rpc_id, + int status, void *request_param, + size_t param_size); + +#if defined __cplusplus +} +#endif + +#endif /* RPMSG_RPC_CLIENT_SERVER_H */ diff --git a/libraries/openamp_arduino/src/openamp/rpmsg_virtio.h b/libraries/openamp_arduino/src/openamp/rpmsg_virtio.h index ea0a255d5..aea2edf56 100755 --- a/libraries/openamp_arduino/src/openamp/rpmsg_virtio.h +++ b/libraries/openamp_arduino/src/openamp/rpmsg_virtio.h @@ -1,190 +1,304 @@ -/* - * rpmsg based on virtio - * - * Copyright (C) 2018 Linaro, Inc. - * - * All rights reserved. - * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef _RPMSG_VIRTIO_H_ -#define _RPMSG_VIRTIO_H_ - -#include -#include -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -/* Configurable parameters */ -#ifndef RPMSG_BUFFER_SIZE -#define RPMSG_BUFFER_SIZE (512) -#endif - -/* The feature bitmap for virtio rpmsg */ -#define VIRTIO_RPMSG_F_NS 0 /* RP supports name service notifications */ - -struct rpmsg_virtio_shm_pool; -/** - * struct rpmsg_virtio_shm_pool - shared memory pool used for rpmsg buffers - * @get_buffer: function to get buffer from the pool - * @base: base address of the memory pool - * @avail: available memory size - * @size: total pool size - */ -struct rpmsg_virtio_shm_pool { - void *base; - size_t avail; - size_t size; -}; - -/** - * struct rpmsg_virtio_device - representation of a rpmsg device based on virtio - * @rdev: rpmsg device, first property in the struct - * @vdev: pointer to the virtio device - * @rvq: pointer to receive virtqueue - * @svq: pointer to send virtqueue - * @shbuf_io: pointer to the shared buffer I/O region - * @shpool: pointer to the shared buffers pool - * @endpoints: list of endpoints. - */ -struct rpmsg_virtio_device { - struct rpmsg_device rdev; - struct virtio_device *vdev; - struct virtqueue *rvq; - struct virtqueue *svq; - struct metal_io_region *shbuf_io; - struct rpmsg_virtio_shm_pool *shpool; -}; - -#define RPMSG_REMOTE VIRTIO_DEV_SLAVE -#define RPMSG_MASTER VIRTIO_DEV_MASTER -static inline unsigned int - rpmsg_virtio_get_role(struct rpmsg_virtio_device *rvdev) -{ - return rvdev->vdev->role; -} - -static inline void rpmsg_virtio_set_status(struct rpmsg_virtio_device *rvdev, - uint8_t status) -{ - rvdev->vdev->func->set_status(rvdev->vdev, status); -} - -static inline uint8_t rpmsg_virtio_get_status(struct rpmsg_virtio_device *rvdev) -{ - return rvdev->vdev->func->get_status(rvdev->vdev); -} - -static inline uint32_t - rpmsg_virtio_get_features(struct rpmsg_virtio_device *rvdev) -{ - return rvdev->vdev->func->get_features(rvdev->vdev); -} - -static inline int - rpmsg_virtio_create_virtqueues(struct rpmsg_virtio_device *rvdev, - int flags, unsigned int nvqs, - const char *names[], - vq_callback * callbacks[]) -{ - return virtio_create_virtqueues(rvdev->vdev, flags, nvqs, names, - callbacks); -} - -/** - * rpmsg_virtio_get_buffer_size - get rpmsg virtio buffer size - * - * @rdev - pointer to the rpmsg device - * - * @return - next available buffer size for text, negative value for failure - */ -int rpmsg_virtio_get_buffer_size(struct rpmsg_device *rdev); - -/** - * rpmsg_init_vdev - initialize rpmsg virtio device - * Master side: - * Initialize RPMsg virtio queues and shared buffers, the address of shm can be - * ANY. In this case, function will get shared memory from system shared memory - * pools. If the vdev has RPMsg name service feature, this API will create an - * name service endpoint. - * - * Slave side: - * This API will not return until the driver ready is set by the master side. - * - * @param rvdev - pointer to the rpmsg virtio device - * @param vdev - pointer to the virtio device - * @param ns_bind_cb - callback handler for name service announcement without - * local endpoints waiting to bind. - * @param shm_io - pointer to the share memory I/O region. - * @param shpool - pointer to shared memory pool. rpmsg_virtio_init_shm_pool has - * to be called first to fill this structure. - * - * @return - status of function execution - */ -int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, - struct virtio_device *vdev, - rpmsg_ns_bind_cb ns_bind_cb, - struct metal_io_region *shm_io, - struct rpmsg_virtio_shm_pool *shpool); - -/** - * rpmsg_deinit_vdev - deinitialize rpmsg virtio device - * - * @param rvdev - pointer to the rpmsg virtio device - */ -void rpmsg_deinit_vdev(struct rpmsg_virtio_device *rvdev); - -/** - * rpmsg_virtio_init_shm_pool - initialize default shared buffers pool - * - * RPMsg virtio has default shared buffers pool implementation. - * The memory assigned to this pool will be dedicated to the RPMsg - * virtio. This function has to be called before calling rpmsg_init_vdev, - * to initialize the rpmsg_virtio_shm_pool structure. - * - * @param shpool - pointer to the shared buffers pool structure - * @param shbuf - pointer to the beginning of shared buffers - * @param size - shared buffers total size - */ -void rpmsg_virtio_init_shm_pool(struct rpmsg_virtio_shm_pool *shpool, - void *shbuf, size_t size); - -/** - * rpmsg_virtio_get_rpmsg_device - get RPMsg device from RPMsg virtio device - * - * @param rvdev - pointer to RPMsg virtio device - * @return - RPMsg device pointed by RPMsg virtio device - */ -static inline struct rpmsg_device * -rpmsg_virtio_get_rpmsg_device(struct rpmsg_virtio_device *rvdev) -{ - return &rvdev->rdev; -} - -/** - * rpmsg_virtio_shm_pool_get_buffer - get buffer in the shared memory pool - * - * RPMsg virtio has default shared buffers pool implementation. - * The memory assigned to this pool will be dedicated to the RPMsg - * virtio. If you prefer to have other shared buffers allocation, - * you can implement your rpmsg_virtio_shm_pool_get_buffer function. - * - * @param shpool - pointer to the shared buffers pool - * @param size - shared buffers total size - * @return - buffer pointer if free buffer is available, NULL otherwise. - */ -metal_weak void * -rpmsg_virtio_shm_pool_get_buffer(struct rpmsg_virtio_shm_pool *shpool, - size_t size); - -#if defined __cplusplus -} -#endif - -#endif /* _RPMSG_VIRTIO_H_ */ +/* + * rpmsg based on virtio + * + * Copyright (C) 2018 Linaro, Inc. + * + * All rights reserved. + * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _RPMSG_VIRTIO_H_ +#define _RPMSG_VIRTIO_H_ + +#include +#include +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* Configurable parameters */ +#ifndef RPMSG_BUFFER_SIZE +#define RPMSG_BUFFER_SIZE (512) +#endif + +/* The feature bitmap for virtio rpmsg */ +#define VIRTIO_RPMSG_F_NS 0 /* RP supports name service notifications */ + +#ifdef VIRTIO_CACHED_BUFFERS +#warning "VIRTIO_CACHED_BUFFERS is deprecated, please use VIRTIO_USE_DCACHE" +#endif +#if defined(VIRTIO_CACHED_BUFFERS) || defined(VIRTIO_USE_DCACHE) +#define BUFFER_FLUSH(x, s) CACHE_FLUSH(x, s) +#define BUFFER_INVALIDATE(x, s) CACHE_INVALIDATE(x, s) +#else +#define BUFFER_FLUSH(x, s) do { } while (0) +#define BUFFER_INVALIDATE(x, s) do { } while (0) +#endif /* VIRTIO_CACHED_BUFFERS || VIRTIO_USE_DCACHE */ + +/** @brief Shared memory pool used for RPMsg buffers */ +struct rpmsg_virtio_shm_pool { + /** Base address of the memory pool */ + void *base; + + /** Available memory size */ + size_t avail; + + /** Total pool size */ + size_t size; +}; + +/** + * @brief Configuration of RPMsg device based on virtio + * + * This structure is used by the RPMsg virtio host to configure the virtiio + * layer. + */ +struct rpmsg_virtio_config { + /** The size of the buffer used to send data from host to remote */ + uint32_t h2r_buf_size; + + /** The size of the buffer used to send data from remote to host */ + uint32_t r2h_buf_size; + + /** The flag for splitting shared memory pool to TX and RX */ + bool split_shpool; +}; + +/** @brief Representation of a RPMsg device based on virtio */ +struct rpmsg_virtio_device { + /** RPMsg device */ + struct rpmsg_device rdev; + + /** Structure containing virtio configuration */ + struct rpmsg_virtio_config config; + + /** Pointer to the virtio device */ + struct virtio_device *vdev; + + /** Pointer to receive virtqueue */ + struct virtqueue *rvq; + + /** Pointer to send virtqueue */ + struct virtqueue *svq; + + /** Pointer to the shared buffer I/O region */ + struct metal_io_region *shbuf_io; + + /** Pointer to the shared buffers pool */ + struct rpmsg_virtio_shm_pool *shpool; + + /** + * RPMsg buffer reclaimer that contains buffers released by the + * \ref rpmsg_virtio_release_tx_buffer function + */ + struct metal_list reclaimer; +}; + +#define RPMSG_REMOTE VIRTIO_DEV_DEVICE +#define RPMSG_HOST VIRTIO_DEV_DRIVER + +#define RPMSG_SLAVE deprecated_rpmsg_slave() +#define RPMSG_MASTER deprecated_rpmsg_master() + +__deprecated static inline int deprecated_rpmsg_master(void) +{ + /* "RPMSG_MASTER is deprecated, please use RPMSG_HOST" */ + return RPMSG_HOST; +} + +__deprecated static inline int deprecated_rpmsg_slave(void) +{ + /* "RPMSG_SLAVE is deprecated, please use RPMSG_REMOTE" */ + return RPMSG_REMOTE; +} + +static inline unsigned int +rpmsg_virtio_get_role(struct rpmsg_virtio_device *rvdev) +{ + return rvdev->vdev->role; +} + +static inline void rpmsg_virtio_set_status(struct rpmsg_virtio_device *rvdev, + uint8_t status) +{ + rvdev->vdev->func->set_status(rvdev->vdev, status); +} + +static inline uint8_t rpmsg_virtio_get_status(struct rpmsg_virtio_device *rvdev) +{ + return rvdev->vdev->func->get_status(rvdev->vdev); +} + +static inline uint32_t +rpmsg_virtio_get_features(struct rpmsg_virtio_device *rvdev) +{ + return rvdev->vdev->func->get_features(rvdev->vdev); +} + +static inline void +rpmsg_virtio_read_config(struct rpmsg_virtio_device *rvdev, + uint32_t offset, void *dst, int length) +{ + rvdev->vdev->func->read_config(rvdev->vdev, offset, dst, length); +} + +static inline void +rpmsg_virtio_write_config(struct rpmsg_virtio_device *rvdev, + uint32_t offset, void *dst, int length) +{ + rvdev->vdev->func->write_config(rvdev->vdev, offset, dst, length); +} + +static inline int +rpmsg_virtio_create_virtqueues(struct rpmsg_virtio_device *rvdev, + int flags, unsigned int nvqs, + const char *names[], + vq_callback *callbacks) +{ + return virtio_create_virtqueues(rvdev->vdev, flags, nvqs, names, + callbacks, NULL); +} + +/** + * @brief Get rpmsg virtio buffer size + * + * @param rdev Pointer to the rpmsg device + * + * @return Next available buffer size for text, negative value for failure + */ +int rpmsg_virtio_get_buffer_size(struct rpmsg_device *rdev); + +/** + * @brief Initialize rpmsg virtio device + * + * Host side: + * Initialize RPMsg virtio queues and shared buffers, the address of shm can be + * ANY. In this case, function will get shared memory from system shared memory + * pools. If the vdev has the RPMsg name service feature, this API will create + * a name service endpoint. + * + * Remote side: + * This API will not return until the driver ready is set by the host side. + * + * @param rvdev Pointer to the rpmsg virtio device + * @param vdev Pointer to the virtio device + * @param ns_bind_cb Callback handler for name service announcement without + * local endpoints waiting to bind. + * @param shm_io Pointer to the share memory I/O region. + * @param shpool Pointer to shared memory pool. + * rpmsg_virtio_init_shm_pool has to be called first to + * fill this structure. + * + * @return Status of function execution + */ +int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, + struct virtio_device *vdev, + rpmsg_ns_bind_cb ns_bind_cb, + struct metal_io_region *shm_io, + struct rpmsg_virtio_shm_pool *shpool); + +/** + * @brief Initialize rpmsg virtio device with config + * + * Host side: + * Initialize RPMsg virtio queues and shared buffers, the address of shm can be + * ANY. In this case, function will get shared memory from system shared memory + * pools. If the vdev has the RPMsg name service feature, this API will create + * a name service endpoint. + * Sizes of virtio data buffers used by the initialized RPMsg instance are set + * to values read from the passed configuration structure. + * + * Remote side: + * This API will not return until the driver ready is set by the host side. + * Sizes of virtio data buffers are set by the host side. Values passed in the + * configuration structure have no effect. + * + * @param rvdev Pointer to the rpmsg virtio device + * @param vdev Pointer to the virtio device + * @param ns_bind_cb Callback handler for name service announcement without + * local endpoints waiting to bind. + * @param shm_io Pointer to the share memory I/O region. + * @param shpool Pointer to shared memory pool array. + * If the config->split_shpool is turn on, the array will + * contain two elements, the shpool of txshpool and + * rxshpool, Otherwise, the array has only one element, + * and txshpool rxshpool shares a shpool. + * And rpmsg_virtio_init_shm_pool has to be called first + * to fill each shpool in this array. + * @param config Pointer to configuration structure + * + * @return Status of function execution + */ +int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev, + struct virtio_device *vdev, + rpmsg_ns_bind_cb ns_bind_cb, + struct metal_io_region *shm_io, + struct rpmsg_virtio_shm_pool *shpool, + const struct rpmsg_virtio_config *config); + +/** + * @brief Deinitialize rpmsg virtio device + * + * @param rvdev Pointer to the rpmsg virtio device + */ +void rpmsg_deinit_vdev(struct rpmsg_virtio_device *rvdev); + +/** + * @brief Initialize default shared buffers pool + * + * RPMsg virtio has default shared buffers pool implementation. + * The memory assigned to this pool will be dedicated to the RPMsg + * virtio. This function has to be called before calling rpmsg_init_vdev, + * to initialize the rpmsg_virtio_shm_pool structure. + * + * @param shpool Pointer to the shared buffers pool structure + * @param shbuf Pointer to the beginning of shared buffers + * @param size Shared buffers total size + */ +void rpmsg_virtio_init_shm_pool(struct rpmsg_virtio_shm_pool *shpool, + void *shbuf, size_t size); + +/** + * @brief Get RPMsg device from RPMsg virtio device + * + * @param rvdev Pointer to RPMsg virtio device + * + * @return RPMsg device pointed by RPMsg virtio device + */ +static inline struct rpmsg_device * +rpmsg_virtio_get_rpmsg_device(struct rpmsg_virtio_device *rvdev) +{ + if (!rvdev) + return NULL; + + return &rvdev->rdev; +} + +/** + * @brief Get buffer in the shared memory pool + * + * RPMsg virtio has default shared buffers pool implementation. + * The memory assigned to this pool will be dedicated to the RPMsg + * virtio. If you prefer to have other shared buffers allocation, + * you can implement your rpmsg_virtio_shm_pool_get_buffer function. + * + * @param shpool Pointer to the shared buffers pool + * @param size Shared buffers total size + * + * @return Buffer pointer if free buffer is available, NULL otherwise. + */ +metal_weak void * +rpmsg_virtio_shm_pool_get_buffer(struct rpmsg_virtio_shm_pool *shpool, + size_t size); + +#if defined __cplusplus +} +#endif + +#endif /* _RPMSG_VIRTIO_H_ */ diff --git a/libraries/openamp_arduino/src/openamp/rsc_table_parser.h b/libraries/openamp_arduino/src/openamp/rsc_table_parser.h index 6802d03fd..d86da7497 100755 --- a/libraries/openamp_arduino/src/openamp/rsc_table_parser.h +++ b/libraries/openamp_arduino/src/openamp/rsc_table_parser.h @@ -1,64 +1,83 @@ -/* - * Copyright (c) 2014, Mentor Graphics Corporation - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef RSC_TABLE_PARSER_H -#define RSC_TABLE_PARSER_H - -#include - -#if defined __cplusplus -extern "C" { -#endif - -#define RSC_TAB_SUPPORTED_VERSION 1 -#define RSC_TAB_HEADER_SIZE 12 -#define RSC_TAB_MAX_VRINGS 2 - -/* Standard control request handling. */ -typedef int (*rsc_handler) (struct remoteproc *rproc, void *rsc); - -/** - * handle_rsc_table - * - * This function parses resource table. - * - * @param rproc - pointer to remote remoteproc - * @param rsc_table - resource table to parse - * @param size - size of rsc table - * @param io - pointer to the resource table I/O region - * It can be NULL if the resource table - * is in the local memory. - * - * @returns - execution status - * - */ -int handle_rsc_table(struct remoteproc *rproc, - struct resource_table *rsc_table, int len, - struct metal_io_region *io); -int handle_carve_out_rsc(struct remoteproc *rproc, void *rsc); -int handle_trace_rsc(struct remoteproc *rproc, void *rsc); -int handle_vdev_rsc(struct remoteproc *rproc, void *rsc); -int handle_vendor_rsc(struct remoteproc *rproc, void *rsc); - -/** - * find_rsc - * - * find out location of a resource type in the resource table. - * - * @rsc_table - pointer to the resource table - * @rsc_type - type of the resource - * @index - index of the resource of the specified type - * - * return the offset to the resource on success, or 0 on failure - */ -size_t find_rsc(void *rsc_table, unsigned int rsc_type, unsigned int index); - -#if defined __cplusplus -} -#endif - -#endif /* RSC_TABLE_PARSER_H */ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef RSC_TABLE_PARSER_H +#define RSC_TABLE_PARSER_H + +#include + +#if defined __cplusplus +extern "C" { +#endif + +#define RSC_TAB_SUPPORTED_VERSION 1 + +/* Standard control request handling. */ +typedef int (*rsc_handler)(struct remoteproc *rproc, void *rsc); + +/** + * @internal + * + * @brief This function parses resource table. + * + * @param rproc Pointer to remote remoteproc + * @param rsc_table Resource table to parse + * @param len Size of rsc table + * @param io Pointer to the resource table I/O region + * It can be NULL if the resource table + * is in the local memory. + * + * @return Execution status + */ +int handle_rsc_table(struct remoteproc *rproc, + struct resource_table *rsc_table, size_t len, + struct metal_io_region *io); + +/** + * @internal + * + * @brief Carveout resource handler. + * + * @param rproc Pointer to remote remoteproc + * @param rsc Pointer to carveout resource + * + * @return 0 for success, or negative value for failure + */ +int handle_carve_out_rsc(struct remoteproc *rproc, void *rsc); + +/** + * @internal + * + * @brief Trace resource handler. + * + * @param rproc Pointer to remote remoteproc + * @param rsc Pointer to trace resource + * + * @return No service error + */ +int handle_trace_rsc(struct remoteproc *rproc, void *rsc); +int handle_vdev_rsc(struct remoteproc *rproc, void *rsc); +int handle_vendor_rsc(struct remoteproc *rproc, void *rsc); + +/** + * @internal + * + * @brief Find out location of a resource type in the resource table. + * + * @param rsc_table Pointer to the resource table + * @param rsc_type Type of the resource + * @param index Index of the resource of the specified type + * + * @return The offset to the resource on success, or 0 on failure + */ +size_t find_rsc(void *rsc_table, unsigned int rsc_type, unsigned int index); + +#if defined __cplusplus +} +#endif + +#endif /* RSC_TABLE_PARSER_H */ diff --git a/libraries/openamp_arduino/src/openamp/version.h b/libraries/openamp_arduino/src/openamp/version.h new file mode 100644 index 000000000..9ee78389d --- /dev/null +++ b/libraries/openamp_arduino/src/openamp/version.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021, STMicroelectronics. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file version.h + * @brief Library version information for OpenAMP. + */ + +#ifndef __OPENAMP_VERSION__H__ +#define __OPENAMP_VERSION__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup versions Library Version Interfaces + * @{ + */ + +/** + * @brief Library major version number. + * + * Return the major version number of the library linked into the application. + * This is required to match the value of LIB_VERSION_MAJOR, which is the major + * version of the library that the application was compiled against. + * + * @return Library major version number. + * + * @see PROJECT_VERSION_MAJOR + */ +extern int openamp_version_major(void); + +/** + * @brief Library minor version number. + * + * Return the minor version number of the library linked into the application. + * This could differ from the value of LIB_VERSION_MINOR, which is the minor + * version of the library that the application was compiled against. + * + * @return Library minor version number. + * + * @see PROJECT_VERSION_MINOR + */ +extern int openamp_version_minor(void); + +/** + * @brief Library patch level. + * + * Return the patch level of the library linked into the application. This + * could differ from the value of LIB_VERSION_PATCH, which is the patch level of + * the library that the application was compiled against. + * + * @return Library patch level. + * + * @see PROJECT_VERSION_PATCH + */ +extern int openamp_version_patch(void); + +/** + * @brief Library version string. + * + * Return the version string of the library linked into the application. This + * could differ from the value of LIB_VERSION, which is the version string of + * the library that the application was compiled against. + * + * @return Library version string. + * + * @see PROJECT_VERSION + */ +extern const char *openamp_version(void); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __OPENAMP_VERSION__H__ */ diff --git a/libraries/openamp_arduino/src/openamp/virtio.h b/libraries/openamp_arduino/src/openamp/virtio.h index 51a4740f5..9febd1eaf 100755 --- a/libraries/openamp_arduino/src/openamp/virtio.h +++ b/libraries/openamp_arduino/src/openamp/virtio.h @@ -1,176 +1,499 @@ -/* - * SPDX-License-Identifier: BSD-3-Clause - * - * $FreeBSD$ - */ - -#ifndef _VIRTIO_H_ -#define _VIRTIO_H_ - -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -/* TODO: define this as compiler flags */ -#ifndef VIRTIO_MAX_NUM_VRINGS -#define VIRTIO_MAX_NUM_VRINGS 2 -#endif - -/* VirtIO device IDs. */ -#define VIRTIO_ID_NETWORK 0x01UL -#define VIRTIO_ID_BLOCK 0x02UL -#define VIRTIO_ID_CONSOLE 0x03UL -#define VIRTIO_ID_ENTROPY 0x04UL -#define VIRTIO_ID_BALLOON 0x05UL -#define VIRTIO_ID_IOMEMORY 0x06UL -#define VIRTIO_ID_RPMSG 0x07UL /* remote processor messaging */ -#define VIRTIO_ID_SCSI 0x08UL -#define VIRTIO_ID_9P 0x09UL -#define VIRTIO_DEV_ANY_ID (-1)UL - -/* Status byte for guest to report progress. */ -#define VIRTIO_CONFIG_STATUS_ACK 0x01 -#define VIRTIO_CONFIG_STATUS_DRIVER 0x02 -#define VIRTIO_CONFIG_STATUS_DRIVER_OK 0x04 -#define VIRTIO_CONFIG_STATUS_NEEDS_RESET 0x40 -#define VIRTIO_CONFIG_STATUS_FAILED 0x80 - -/* Virtio device role */ -#define VIRTIO_DEV_MASTER 0UL -#define VIRTIO_DEV_SLAVE 1UL - -struct virtio_device_id { - uint32_t device; - uint32_t vendor; -}; - -/* - * Generate interrupt when the virtqueue ring is - * completely used, even if we've suppressed them. - */ -#define VIRTIO_F_NOTIFY_ON_EMPTY (1 << 24) - -/* - * The guest should never negotiate this feature; it - * is used to detect faulty drivers. - */ -#define VIRTIO_F_BAD_FEATURE (1 << 30) - -/* - * Some VirtIO feature bits (currently bits 28 through 31) are - * reserved for the transport being used (eg. virtio_ring), the - * rest are per-device feature bits. - */ -#define VIRTIO_TRANSPORT_F_START 28 -#define VIRTIO_TRANSPORT_F_END 32 - -typedef void (*virtio_dev_reset_cb)(struct virtio_device *vdev); - -struct virtio_dispatch; - -struct virtio_feature_desc { - uint32_t vfd_val; - const char *vfd_str; -}; - -/** - * struct proc_shm - * - * This structure is maintained by hardware interface layer for - * shared memory information. The shared memory provides buffers - * for use by the vring to exchange messages between the cores. - * - */ -struct virtio_buffer_info { - /* Start address of shared memory used for buffers. */ - void *vaddr; - /* Start physical address of shared memory used for buffers. */ - metal_phys_addr_t paddr; - /* sharmed memory I/O region */ - struct metal_io_region *io; - /* Size of shared memory. */ - unsigned long size; -}; - -/** - * struct remoteproc_vring - remoteproc vring structure - * @vq virtio queue - * @va logical address - * @notifyid vring notify id - * @num_descs number of descriptors - * @align vring alignment - * @io metal I/O region of the vring memory, can be NULL - */ -struct virtio_vring_info { - struct virtqueue *vq; - struct vring_alloc_info info; - uint32_t notifyid; - struct metal_io_region *io; -}; - -/* - * Structure definition for virtio devices for use by the - * applications/drivers - */ - -struct virtio_device { - uint32_t index; /**< unique position on the virtio bus */ - struct virtio_device_id id; /**< the device type identification - * (used to match it with a driver - */ - uint64_t features; /**< the features supported by both ends. */ - unsigned int role; /**< if it is virtio backend or front end. */ - virtio_dev_reset_cb reset_cb; /**< user registered device callback */ - const struct virtio_dispatch *func; /**< Virtio dispatch table */ - void *priv; /**< TODO: remove pointer to virtio_device private data */ - unsigned int vrings_num; /**< number of vrings */ - struct virtio_vring_info *vrings_info; -}; - -/* - * Helper functions. - */ -const char *virtio_dev_name(uint16_t devid); -void virtio_describe(struct virtio_device *dev, const char *msg, - uint32_t features, - struct virtio_feature_desc *feature_desc); - -/* - * Functions for virtio device configuration as defined in Rusty Russell's - * paper. - * Drivers are expected to implement these functions in their respective codes. - */ - -struct virtio_dispatch { - uint8_t (*get_status)(struct virtio_device *dev); - void (*set_status)(struct virtio_device *dev, uint8_t status); - uint32_t (*get_features)(struct virtio_device *dev); - void (*set_features)(struct virtio_device *dev, uint32_t feature); - uint32_t (*negotiate_features)(struct virtio_device *dev, - uint32_t features); - - /* - * Read/write a variable amount from the device specific (ie, network) - * configuration region. This region is encoded in the same endian as - * the guest. - */ - void (*read_config)(struct virtio_device *dev, uint32_t offset, - void *dst, int length); - void (*write_config)(struct virtio_device *dev, uint32_t offset, - void *src, int length); - void (*reset_device)(struct virtio_device *dev); - void (*notify)(struct virtqueue *vq); -}; - -int virtio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, - unsigned int nvqs, const char *names[], - vq_callback *callbacks[]); - -#if defined __cplusplus -} -#endif - -#endif /* _VIRTIO_H_ */ +/* + * SPDX-License-Identifier: BSD-3-Clause + * + * $FreeBSD$ + */ + +#ifndef _VIRTIO_H_ +#define _VIRTIO_H_ + +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* VirtIO device IDs. */ +#define VIRTIO_ID_NETWORK 1UL +#define VIRTIO_ID_BLOCK 2UL +#define VIRTIO_ID_CONSOLE 3UL +#define VIRTIO_ID_ENTROPY 4UL +#define VIRTIO_ID_BALLOON 5UL +#define VIRTIO_ID_IOMEMORY 6UL +#define VIRTIO_ID_RPMSG 7UL /* remote processor messaging */ +#define VIRTIO_ID_SCSI 8UL +#define VIRTIO_ID_9P 9UL +#define VIRTIO_ID_MAC80211_WLAN 10UL +#define VIRTIO_ID_RPROC_SERIAL 11UL +#define VIRTIO_ID_CAIF 12UL +#define VIRTIO_ID_MEMORY_BALLOON 13UL +#define VIRTIO_ID_GPU 16UL +#define VIRTIO_ID_CLOCK 17UL +#define VIRTIO_ID_INPUT 18UL +#define VIRTIO_ID_VSOCK 19UL +#define VIRTIO_ID_CRYPTO 20UL +#define VIRTIO_ID_SIGNAL_DIST 21UL +#define VIRTIO_ID_PSTORE 22UL +#define VIRTIO_ID_IOMMU 23UL +#define VIRTIO_ID_MEM 24UL +#define VIRTIO_ID_SOUND 25UL +#define VIRTIO_ID_FS 26UL +#define VIRTIO_ID_PMEM 27UL +#define VIRTIO_ID_RPMB 28UL +#define VIRTIO_ID_MAC80211_HWSIM 29UL +#define VIRTIO_ID_VIDEO_ENCODER 30UL +#define VIRTIO_ID_VIDEO_DECODER 31UL +#define VIRTIO_ID_SCMI 32UL +#define VIRTIO_ID_NITRO_SEC_MOD 33UL +#define VIRTIO_ID_I2C_ADAPTER 34UL +#define VIRTIO_ID_WATCHDOG 35UL +#define VIRTIO_ID_CAN 36UL +#define VIRTIO_ID_PARAM_SERV 38UL +#define VIRTIO_ID_AUDIO_POLICY 39UL +#define VIRTIO_ID_BT 40UL +#define VIRTIO_ID_GPIO 41UL +#define VIRTIO_ID_RDMA 42UL +#define VIRTIO_DEV_ANY_ID -1UL + +/* Status byte for guest to report progress. */ +#define VIRTIO_CONFIG_STATUS_RESET 0x00 +#define VIRTIO_CONFIG_STATUS_ACK 0x01 +#define VIRTIO_CONFIG_STATUS_DRIVER 0x02 +#define VIRTIO_CONFIG_STATUS_DRIVER_OK 0x04 +#define VIRTIO_CONFIG_FEATURES_OK 0x08 +#define VIRTIO_CONFIG_STATUS_NEEDS_RESET 0x40 +#define VIRTIO_CONFIG_STATUS_FAILED 0x80 + +/* Virtio device role */ +#define VIRTIO_DEV_DRIVER 0UL +#define VIRTIO_DEV_DEVICE 1UL + +#define VIRTIO_DEV_MASTER deprecated_virtio_dev_master() +#define VIRTIO_DEV_SLAVE deprecated_virtio_dev_slave() + +__deprecated static inline int deprecated_virtio_dev_master(void) +{ + /* "VIRTIO_DEV_MASTER is deprecated, please use VIRTIO_DEV_DRIVER" */ + return VIRTIO_DEV_DRIVER; +} + +__deprecated static inline int deprecated_virtio_dev_slave(void) +{ + /* "VIRTIO_DEV_SLAVE is deprecated, please use VIRTIO_DEV_DEVICE" */ + return VIRTIO_DEV_DEVICE; +} + +#ifdef VIRTIO_MASTER_ONLY +#define VIRTIO_DRIVER_ONLY +#warning "VIRTIO_MASTER_ONLY is deprecated, please use VIRTIO_DRIVER_ONLY" +#endif + +#ifdef VIRTIO_SLAVE_ONLY +#define VIRTIO_DEVICE_ONLY +#warning "VIRTIO_SLAVE_ONLY is deprecated, please use VIRTIO_DEVICE_ONLY" +#endif + +/** @brief Virtio device identifier. */ +struct virtio_device_id { + /** Virtio subsystem device ID. */ + uint32_t device; + + /** Virtio subsystem vendor ID. */ + uint32_t vendor; + + /** Virtio subsystem device version. */ + uint32_t version; +}; + +/* + * Generate interrupt when the virtqueue ring is + * completely used, even if we've suppressed them. + */ +#define VIRTIO_F_NOTIFY_ON_EMPTY (1 << 24) + +/* + * The guest should never negotiate this feature; it + * is used to detect faulty drivers. + */ +#define VIRTIO_F_BAD_FEATURE (1 << 30) + +/* + * Some VirtIO feature bits (currently bits 28 through 31) are + * reserved for the transport being used (eg. virtio_ring), the + * rest are per-device feature bits. + */ +#define VIRTIO_TRANSPORT_F_START 28 +#define VIRTIO_TRANSPORT_F_END 32 + +#ifdef VIRTIO_DEBUG +#include + +#define VIRTIO_ASSERT(_exp, _msg) do { \ + int exp = (_exp); \ + if (!(exp)) { \ + metal_log(METAL_LOG_EMERGENCY, \ + "FATAL: %s - " _msg, __func__); \ + metal_assert(exp); \ + } \ + } while (0) +#else +#define VIRTIO_ASSERT(_exp, _msg) metal_assert(_exp) +#endif /* VIRTIO_DEBUG */ + +#define VIRTIO_MMIO_VRING_ALIGNMENT 4096 + +typedef void (*virtio_dev_reset_cb)(struct virtio_device *vdev); + +struct virtio_dispatch; + +/** @brief Device features. */ +struct virtio_feature_desc { + /** Unique feature ID, defined in the virtio specification. */ + uint32_t vfd_val; + + /** Name of the feature (for debug). */ + const char *vfd_str; +}; + +/** @brief Virtio vring data structure */ +struct virtio_vring_info { + /** Virtio queue */ + struct virtqueue *vq; + + /** Vring alloc info */ + struct vring_alloc_info info; + + /** Vring notify id */ + uint32_t notifyid; + + /** Metal I/O region of the vring memory, can be NULL */ + struct metal_io_region *io; +}; + +/** @brief Structure definition for virtio devices for use by the applications/drivers */ +struct virtio_device { + /** Unique position on the virtio bus */ + uint32_t notifyid; + + /** The device type identification used to match it with a driver */ + struct virtio_device_id id; + + /** The features supported by both ends. */ + uint64_t features; + + /** If it is virtio backend or front end. */ + unsigned int role; + + /** User-registered device callback */ + virtio_dev_reset_cb reset_cb; + + /** Virtio dispatch table */ + const struct virtio_dispatch *func; + + /** Private data */ + void *priv; + + /** Number of vrings */ + unsigned int vrings_num; + + /** Pointer to the virtio vring structure */ + struct virtio_vring_info *vrings_info; +}; + +/* + * Helper functions. + */ + +/** + * @brief Get the name of a virtio device. + * + * @param devid Id of the device. + * + * @return pointer to the device name string if found, otherwise null. + */ +const char *virtio_dev_name(uint16_t devid); + +__deprecated void virtio_describe(struct virtio_device *dev, const char *msg, + uint32_t features, + struct virtio_feature_desc *feature_desc); + +/** + * @brief Virtio device dispatcher functions. + * + * Functions for virtio device configuration as defined in Rusty Russell's paper. + * The virtio transport layers are expected to implement these functions in their respective codes. + */ + +struct virtio_dispatch { + /** Create virtio queue instances. */ + int (*create_virtqueues)(struct virtio_device *vdev, + unsigned int flags, + unsigned int nvqs, const char *names[], + vq_callback callbacks[], + void *callback_args[]); + + /** Delete virtio queue instances. */ + void (*delete_virtqueues)(struct virtio_device *vdev); + + /** Get the status of the virtio device. */ + uint8_t (*get_status)(struct virtio_device *dev); + + /** Set the status of the virtio device. */ + void (*set_status)(struct virtio_device *dev, uint8_t status); + + /** Get the feature exposed by the virtio device. */ + uint32_t (*get_features)(struct virtio_device *dev); + + /** Set the supported feature (virtio driver only). */ + void (*set_features)(struct virtio_device *dev, uint32_t feature); + + /** + * Set the supported feature negotiate between the \ref features parameter and features + * supported by the device (virtio driver only). + */ + uint32_t (*negotiate_features)(struct virtio_device *dev, + uint32_t features); + + /** + * Read a variable amount from the device specific (ie, network) + * configuration region. + */ + void (*read_config)(struct virtio_device *dev, uint32_t offset, + void *dst, int length); + + /** + * Write a variable amount from the device specific (ie, network) + * configuration region. + */ + void (*write_config)(struct virtio_device *dev, uint32_t offset, + void *src, int length); + + /** Request a reset of the virtio device. */ + void (*reset_device)(struct virtio_device *dev); + + /** Notify the other side that a virtio vring as been updated. */ + void (*notify)(struct virtqueue *vq); +}; + +/** + * @brief Create the virtio device virtqueue. + * + * @param vdev Pointer to virtio device structure. + * @param flags Create flag. + * @param nvqs The virtqueue number. + * @param names Virtqueue names. + * @param callbacks Virtqueue callback functions. + * @param callback_args Virtqueue callback function arguments. + * + * @return 0 on success, otherwise error code. + */ +int virtio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, + unsigned int nvqs, const char *names[], + vq_callback callbacks[], void *callback_args[]); + +/** + * @brief Delete the virtio device virtqueue. + * + * @param vdev Pointer to virtio device structure. + * + */ +static inline void virtio_delete_virtqueues(struct virtio_device *vdev) +{ + if (!vdev || !vdev->func || !vdev->func->delete_virtqueues) + return; + + vdev->func->delete_virtqueues(vdev); +} + +/** + * @brief Get device ID. + * + * @param dev Pointer to device structure. + * + * @return Device ID value. + */ +static inline uint32_t virtio_get_devid(const struct virtio_device *vdev) +{ + if (!vdev) + return 0; + return vdev->id.device; +} + +/** + * @brief Retrieve device status. + * + * @param dev Pointer to device structure. + * @param status Pointer to the virtio device status. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_get_status(struct virtio_device *vdev, uint8_t *status) +{ + if (!vdev || !status) + return -EINVAL; + + if (!vdev->func || !vdev->func->get_status) + return -ENXIO; + + *status = vdev->func->get_status(vdev); + return 0; +} + +/** + * @brief Set device status. + * + * @param dev Pointer to device structure. + * @param status Value to be set as device status. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_set_status(struct virtio_device *vdev, uint8_t status) +{ + if (!vdev) + return -EINVAL; + + if (!vdev->func || !vdev->func->set_status) + return -ENXIO; + + vdev->func->set_status(vdev, status); + return 0; +} + +/** + * @brief Retrieve configuration data from the device. + * + * @param dev Pointer to device structure. + * @param offset Offset of the data within the configuration area. + * @param dst Address of the buffer that will hold the data. + * @param len Length of the data to be retrieved. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_read_config(struct virtio_device *vdev, + uint32_t offset, void *dst, int len) +{ + if (!vdev || !dst) + return -EINVAL; + + if (!vdev->func || !vdev->func->read_config) + return -ENXIO; + + vdev->func->read_config(vdev, offset, dst, len); + return 0; +} + +/** + * @brief Write configuration data to the device. + * + * @param dev Pointer to device structure. + * @param offset Offset of the data within the configuration area. + * @param src Address of the buffer that holds the data to write. + * @param len Length of the data to be written. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_write_config(struct virtio_device *vdev, + uint32_t offset, void *src, int len) +{ + if (!vdev || !src) + return -EINVAL; + + if (!vdev->func || !vdev->func->write_config) + return -ENXIO; + + vdev->func->write_config(vdev, offset, src, len); + return 0; +} + +/** + * @brief Get the virtio device features. + * + * @param dev Pointer to device structure. + * @param features Pointer to features supported by both the driver and + * the device as a bitfield. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_get_features(struct virtio_device *vdev, + uint32_t *features) +{ + if (!vdev || !features) + return -EINVAL; + + if (!vdev->func || !vdev->func->get_features) + return -ENXIO; + + *features = vdev->func->get_features(vdev); + return 0; +} + +/** + * @brief Set features supported by the VIRTIO driver. + * + * @param dev Pointer to device structure. + * @param features Features supported by the driver as a bitfield. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_set_features(struct virtio_device *vdev, + uint32_t features) +{ + if (!vdev) + return -EINVAL; + + if (!vdev->func || !vdev->func->set_features) + return -ENXIO; + + vdev->func->set_features(vdev, features); + return 0; +} + +/** + * @brief Negotiate features between virtio device and driver. + * + * @param dev Pointer to device structure. + * @param features Supported features. + * @param final_features Pointer to the final features after negotiate. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_negotiate_features(struct virtio_device *vdev, + uint32_t features, + uint32_t *final_features) +{ + if (!vdev || !final_features) + return -EINVAL; + + if (!vdev->func || !vdev->func->negotiate_features) + return -ENXIO; + + *final_features = vdev->func->negotiate_features(vdev, features); + return 0; +} + +/** + * @brief Reset virtio device. + * + * @param vdev Pointer to virtio_device structure. + * + * @return 0 on success, otherwise error code. + */ +static inline int virtio_reset_device(struct virtio_device *vdev) +{ + if (!vdev) + return -EINVAL; + + if (!vdev->func || !vdev->func->reset_device) + return -ENXIO; + + vdev->func->reset_device(vdev); + return 0; +} + +#if defined __cplusplus +} +#endif + +#endif /* _VIRTIO_H_ */ diff --git a/libraries/openamp_arduino/src/openamp/virtio_mmio.h b/libraries/openamp_arduino/src/openamp/virtio_mmio.h new file mode 100644 index 000000000..db678f6b5 --- /dev/null +++ b/libraries/openamp_arduino/src/openamp/virtio_mmio.h @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2022 Wind River Systems, Inc. + * Based on Virtio PCI driver by Anthony Liguori, copyright IBM Corp. 2007 + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef OPENAMP_VIRTIO_MMIO_H +#define OPENAMP_VIRTIO_MMIO_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Enable support for legacy devices */ +#define VIRTIO_MMIO_LEGACY + +/* Control registers */ + +/* Magic value ("virt" string) - Read Only */ +#define VIRTIO_MMIO_MAGIC_VALUE 0x000 + +#define VIRTIO_MMIO_MAGIC_VALUE_STRING ('v' | ('i' << 8) | ('r' << 16) | ('t' << 24)) + +/* Virtio device version - Read Only */ +#define VIRTIO_MMIO_VERSION 0x004 + +/* Virtio device ID - Read Only */ +#define VIRTIO_MMIO_DEVICE_ID 0x008 + +/* Virtio vendor ID - Read Only */ +#define VIRTIO_MMIO_VENDOR_ID 0x00c + +/* + * Bitmask of the features supported by the device (host) + * (32 bits per set) - Read Only + */ +#define VIRTIO_MMIO_DEVICE_FEATURES 0x010 + +/* Device (host) features set selector - Write Only */ +#define VIRTIO_MMIO_DEVICE_FEATURES_SEL 0x014 + +/* + * Bitmask of features activated by the driver (guest) + * (32 bits per set) - Write Only + */ +#define VIRTIO_MMIO_DRIVER_FEATURES 0x020 + +/* Activated features set selector - Write Only */ +#define VIRTIO_MMIO_DRIVER_FEATURES_SEL 0x024 + +#ifndef VIRTIO_MMIO_NO_LEGACY /* LEGACY DEVICES ONLY! */ +/* Guest's memory page size in bytes - Write Only */ +#define VIRTIO_MMIO_GUEST_PAGE_SIZE 0x028 +#endif + +/* Queue selector - Write Only */ +#define VIRTIO_MMIO_QUEUE_SEL 0x030 + +/* Maximum size of the currently selected queue - Read Only */ +#define VIRTIO_MMIO_QUEUE_NUM_MAX 0x034 + +/* Queue size for the currently selected queue - Write Only */ +#define VIRTIO_MMIO_QUEUE_NUM 0x038 + +#ifdef VIRTIO_MMIO_LEGACY +/* Used Ring alignment for the currently selected queue - Write Only */ +#define VIRTIO_MMIO_QUEUE_ALIGN 0x03c +/* Guest's PFN for the currently selected queue - Read Write */ +#define VIRTIO_MMIO_QUEUE_PFN 0x040 +#endif + +/* Ready bit for the currently selected queue - Read Write */ +#define VIRTIO_MMIO_QUEUE_READY 0x044 + +/* Queue notifier - Write Only */ +#define VIRTIO_MMIO_QUEUE_NOTIFY 0x050 + +/* Interrupt status - Read Only */ +#define VIRTIO_MMIO_INTERRUPT_STATUS 0x060 + +/* Interrupt acknowledge - Write Only */ +#define VIRTIO_MMIO_INTERRUPT_ACK 0x064 + +/* Device status register - Read Write */ +#define VIRTIO_MMIO_STATUS 0x070 + +/* Selected queue's Descriptor Table address, 64 bits in two halves */ +#define VIRTIO_MMIO_QUEUE_DESC_LOW 0x080 +#define VIRTIO_MMIO_QUEUE_DESC_HIGH 0x084 + +/* Selected queue's Available Ring address, 64 bits in two halves */ +#define VIRTIO_MMIO_QUEUE_AVAIL_LOW 0x090 +#define VIRTIO_MMIO_QUEUE_AVAIL_HIGH 0x094 + +/* Selected queue's Used Ring address, 64 bits in two halves */ +#define VIRTIO_MMIO_QUEUE_USED_LOW 0x0a0 +#define VIRTIO_MMIO_QUEUE_USED_HIGH 0x0a4 + +/* Shared memory region id */ +#define VIRTIO_MMIO_SHM_SEL 0x0ac + +/* Shared memory region length, 64 bits in two halves */ +#define VIRTIO_MMIO_SHM_LEN_LOW 0x0b0 +#define VIRTIO_MMIO_SHM_LEN_HIGH 0x0b4 + +/* Shared memory region base address, 64 bits in two halves */ +#define VIRTIO_MMIO_SHM_BASE_LOW 0x0b8 +#define VIRTIO_MMIO_SHM_BASE_HIGH 0x0bc + +/* Configuration atomicity value */ +#define VIRTIO_MMIO_CONFIG_GENERATION 0x0fc + +/* + * The config space is defined by each driver as + * the per-driver configuration space - Read Write + */ +#define VIRTIO_MMIO_CONFIG 0x100 + +/* Interrupt flags (re: interrupt status & acknowledge registers) */ +#define VIRTIO_MMIO_INT_VRING (1 << 0) +#define VIRTIO_MMIO_INT_CONFIG (1 << 1) + +/* Data buffer size for preallocated buffers before vring */ +#define VIRTIO_MMIO_MAX_DATA_SIZE 128 + +/** @brief VIRTIO MMIO memory area */ +struct virtio_mmio_dev_mem { + /** Memory region physical address */ + void *base; + + /** Memory region size */ + size_t size; +}; + +/** @brief A VIRTIO MMIO device */ +struct virtio_mmio_device { + /** Base virtio device structure */ + struct virtio_device vdev; + + /** Device configuration space metal_io_region */ + struct metal_io_region *cfg_io; + + /** Pre-shared memory space metal_io_region */ + struct metal_io_region *shm_io; + + /** Shared memory device */ + struct metal_device shm_device; + + /** VIRTIO device configuration space */ + struct virtio_mmio_dev_mem cfg_mem; + + /** VIRTIO device pre-shared memory */ + struct virtio_mmio_dev_mem shm_mem; + + /** VIRTIO_DEV_DRIVER or VIRTIO_DEV_DEVICE */ + unsigned int device_mode; + + /** Interrupt number */ + unsigned int irq; + + /** Custom user data */ + void *user_data; +}; + +/** + * @brief Register a VIRTIO device with the VIRTIO stack. + * + * @param dev Pointer to device structure. + * @param vq_num Number of virtqueues the device uses. + * @param vqs Array of pointers to vthe virtqueues used by the device. + */ +void virtio_mmio_register_device(struct virtio_device *vdev, int vq_num, struct virtqueue **vqs); + +/** + * @brief Setup a virtqueue structure. + * + * @param dev Pointer to device structure. + * @param idx Index of the virtqueue. + * @param vq Pointer to virtqueue structure. + * @param cb Pointer to virtqueue callback. Can be NULL. + * @param cb_arg Argument for the virtqueue callback. + * + * @return pointer to virtqueue structure. + */ +struct virtqueue *virtio_mmio_setup_virtqueue(struct virtio_device *vdev, + unsigned int idx, + struct virtqueue *vq, + void (*cb)(void *), + void *cb_arg, + const char *vq_name); + +/** + * @brief VIRTIO MMIO device initialization. + * + * @param vmdev Pointer to virtio_mmio_device structure. + * @param virt_mem_ptr Guest virtio (shared) memory base address (virtual). + * @param cfg_mem_ptr Virtio device configuration memory base address (virtual). + * @param user_data Pointer to custom user data. + * + * @return int 0 for success. + */ +int virtio_mmio_device_init(struct virtio_mmio_device *vmdev, uintptr_t virt_mem_ptr, + uintptr_t cfg_mem_ptr, void *user_data); + +/** + * @brief VIRTIO MMIO interrupt service routine. + * + * @param vdev Pointer to virtio_device structure. + */ +void virtio_mmio_isr(struct virtio_device *vdev); + +#ifdef __cplusplus +} +#endif + +#endif /* OPENAMP_VIRTIO_MMIO_H */ diff --git a/libraries/openamp_arduino/src/openamp/virtio_ring.h b/libraries/openamp_arduino/src/openamp/virtio_ring.h index 3f348e3fa..60a9710dc 100755 --- a/libraries/openamp_arduino/src/openamp/virtio_ring.h +++ b/libraries/openamp_arduino/src/openamp/virtio_ring.h @@ -1,152 +1,218 @@ -/* - * Copyright Rusty Russell IBM Corporation 2007. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * $FreeBSD$ - */ - -#ifndef VIRTIO_RING_H -#define VIRTIO_RING_H - -#if defined __cplusplus -extern "C" { -#endif - -/* This marks a buffer as continuing via the next field. */ -#define VRING_DESC_F_NEXT 1 -/* This marks a buffer as write-only (otherwise read-only). */ -#define VRING_DESC_F_WRITE 2 -/* This means the buffer contains a list of buffer descriptors. */ -#define VRING_DESC_F_INDIRECT 4 - -/* The Host uses this in used->flags to advise the Guest: don't kick me - * when you add a buffer. It's unreliable, so it's simply an - * optimization. Guest will still kick if it's out of buffers. - */ -#define VRING_USED_F_NO_NOTIFY 1 -/* The Guest uses this in avail->flags to advise the Host: don't - * interrupt me when you consume a buffer. It's unreliable, so it's - * simply an optimization. - */ -#define VRING_AVAIL_F_NO_INTERRUPT 1 - -/* VirtIO ring descriptors: 16 bytes. - * These can chain together via "next". - */ -struct vring_desc { - /* Address (guest-physical). */ - uint64_t addr; - /* Length. */ - uint32_t len; - /* The flags as indicated above. */ - uint16_t flags; - /* We chain unused descriptors via this, too. */ - uint16_t next; -}; - -struct vring_avail { - uint16_t flags; - uint16_t idx; - uint16_t ring[0]; -}; - -/* uint32_t is used here for ids for padding reasons. */ -struct vring_used_elem { - /* Index of start of used descriptor chain. */ - uint32_t id; - /* Total length of the descriptor chain which was written to. */ - uint32_t len; -}; - -struct vring_used { - uint16_t flags; - uint16_t idx; - struct vring_used_elem ring[0]; -}; - -struct vring { - unsigned int num; - - struct vring_desc *desc; - struct vring_avail *avail; - struct vring_used *used; -}; - -/* The standard layout for the ring is a continuous chunk of memory which - * looks like this. We assume num is a power of 2. - * - * struct vring { - * // The actual descriptors (16 bytes each) - * struct vring_desc desc[num]; - * - * // A ring of available descriptor heads with free-running index. - * __u16 avail_flags; - * __u16 avail_idx; - * __u16 available[num]; - * __u16 used_event_idx; - * - * // Padding to the next align boundary. - * char pad[]; - * - * // A ring of used descriptor heads with free-running index. - * __u16 used_flags; - * __u16 used_idx; - * struct vring_used_elem used[num]; - * __u16 avail_event_idx; - * }; - * - * NOTE: for VirtIO PCI, align is 4096. - */ - -/* - * We publish the used event index at the end of the available ring, and vice - * versa. They are at the end for backwards compatibility. - */ -#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num]) -#define vring_avail_event(vr) ((vr)->used->ring[(vr)->num].id & 0xFFFF) - -static inline int vring_size(unsigned int num, unsigned long align) -{ - int size; - - size = num * sizeof(struct vring_desc); - size += sizeof(struct vring_avail) + (num * sizeof(uint16_t)) + - sizeof(uint16_t); - size = (size + align - 1) & ~(align - 1); - size += sizeof(struct vring_used) + - (num * sizeof(struct vring_used_elem)) + sizeof(uint16_t); - - return size; -} - -static inline void -vring_init(struct vring *vr, unsigned int num, uint8_t *p, unsigned long align) -{ - vr->num = num; - vr->desc = (struct vring_desc *)p; - vr->avail = (struct vring_avail *)(p + num * sizeof(struct vring_desc)); - vr->used = (struct vring_used *) - (((unsigned long)&vr->avail->ring[num] + sizeof(uint16_t) + - align - 1) & ~(align - 1)); -} - -/* - * The following is used with VIRTIO_RING_F_EVENT_IDX. - * - * Assuming a given event_idx value from the other size, if we have - * just incremented index from old to new_idx, should we trigger an - * event? - */ -static inline int -vring_need_event(uint16_t event_idx, uint16_t new_idx, uint16_t old) -{ - return (uint16_t)(new_idx - event_idx - 1) < - (uint16_t)(new_idx - old); -} - -#if defined __cplusplus -} -#endif - -#endif /* VIRTIO_RING_H */ +/* + * Copyright Rusty Russell IBM Corporation 2007. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * $FreeBSD$ + */ + +#ifndef VIRTIO_RING_H +#define VIRTIO_RING_H + +#include + +#if defined __cplusplus +extern "C" { +#endif + +/* This marks a buffer as continuing via the next field. */ +#define VRING_DESC_F_NEXT 1 +/* This marks a buffer as write-only (otherwise read-only). */ +#define VRING_DESC_F_WRITE 2 +/* This means the buffer contains a list of buffer descriptors. */ +#define VRING_DESC_F_INDIRECT 4 + +/* The Host uses this in used->flags to advise the Guest: don't kick me + * when you add a buffer. It's unreliable, so it's simply an + * optimization. Guest will still kick if it's out of buffers. + */ +#define VRING_USED_F_NO_NOTIFY 1 +/* The Guest uses this in avail->flags to advise the Host: don't + * interrupt me when you consume a buffer. It's unreliable, so it's + * simply an optimization. + */ +#define VRING_AVAIL_F_NO_INTERRUPT 1 + +/** + * @brief VirtIO ring descriptors. + * + * The descriptor table refers to the buffers the driver is using for the + * device. addr is a physical address, and the buffers can be chained via \ref next. + * Each descriptor describes a buffer which is read-only for the device + * (“device-readable”) or write-only for the device (“device-writable”), but a + * chain of descriptors can contain both device-readable and device-writable + * buffers. + */ +METAL_PACKED_BEGIN +struct vring_desc { + /** Address (guest-physical) */ + uint64_t addr; + + /** Length */ + uint32_t len; + + /** Flags relevant to the descriptors */ + uint16_t flags; + + /** We chain unused descriptors via this, too */ + uint16_t next; +} METAL_PACKED_END; + +/** + * @brief Used to offer buffers to the device. + * + * Each ring entry refers to the head of a descriptor chain. It is only + * written by the driver and read by the device. + */ +METAL_PACKED_BEGIN +struct vring_avail { + /** Flag which determines whether device notifications are required */ + uint16_t flags; + + /** + * Indicates where the driver puts the next descriptor entry in the + * ring (modulo the queue size) + */ + uint16_t idx; + + /** The ring of descriptors */ + uint16_t ring[0]; +} METAL_PACKED_END; + +/* uint32_t is used here for ids for padding reasons. */ +METAL_PACKED_BEGIN +struct vring_used_elem { + union { + uint16_t event; + /* Index of start of used descriptor chain. */ + uint32_t id; + }; + /* Total length of the descriptor chain which was written to. */ + uint32_t len; +} METAL_PACKED_END; + +/** + * @brief The device returns buffers to this structure when done with them + * + * The structure is only written to by the device, and read by the driver. + */ +METAL_PACKED_BEGIN +struct vring_used { + /** Flag which determines whether device notifications are required */ + uint16_t flags; + + /** + * Indicates where the driver puts the next descriptor entry in the + * ring (modulo the queue size) + */ + uint16_t idx; + + /** The ring of descriptors */ + struct vring_used_elem ring[0]; +} METAL_PACKED_END; + +/** + * @brief The virtqueue layout structure + * + * Each virtqueue consists of; descriptor table, available ring, used ring, + * where each part is physically contiguous in guest memory. + * + * When the driver wants to send a buffer to the device, it fills in a slot in + * the descriptor table (or chains several together), and writes the descriptor + * index into the available ring. It then notifies the device. When the device + * has finished a buffer, it writes the descriptor index into the used ring, + * and sends an interrupt. + * + * The standard layout for the ring is a continuous chunk of memory which + * looks like this. We assume num is a power of 2. + * + * struct vring { + * // The actual descriptors (16 bytes each) + * struct vring_desc desc[num]; + * + * // A ring of available descriptor heads with free-running index. + * __u16 avail_flags; + * __u16 avail_idx; + * __u16 available[num]; + * __u16 used_event_idx; + * + * // Padding to the next align boundary. + * char pad[]; + * + * // A ring of used descriptor heads with free-running index. + * __u16 used_flags; + * __u16 used_idx; + * struct vring_used_elem used[num]; + * __u16 avail_event_idx; + * }; + * + * NOTE: for VirtIO PCI, align is 4096. + */ +struct vring { + /** + * The maximum number of buffer descriptors in the virtqueue. + * The value is always a power of 2. + */ + unsigned int num; + + /** The actual buffer descriptors, 16 bytes each */ + struct vring_desc *desc; + + /** A ring of available descriptor heads with free-running index */ + struct vring_avail *avail; + + /** A ring of used descriptor heads with free-running index */ + struct vring_used *used; +}; + +/* + * We publish the used event index at the end of the available ring, and vice + * versa. They are at the end for backwards compatibility. + */ +#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num]) +#define vring_avail_event(vr) ((vr)->used->ring[(vr)->num].event) + +static inline int vring_size(unsigned int num, unsigned long align) +{ + int size; + + size = num * sizeof(struct vring_desc); + size += sizeof(struct vring_avail) + (num * sizeof(uint16_t)) + + sizeof(uint16_t); + size = (size + align - 1) & ~(align - 1); + size += sizeof(struct vring_used) + + (num * sizeof(struct vring_used_elem)) + sizeof(uint16_t); + + return size; +} + +static inline void +vring_init(struct vring *vr, unsigned int num, uint8_t *p, unsigned long align) +{ + vr->num = num; + vr->desc = (struct vring_desc *)p; + vr->avail = (struct vring_avail *)(p + num * sizeof(struct vring_desc)); + vr->used = (struct vring_used *) + (((unsigned long)&vr->avail->ring[num] + sizeof(uint16_t) + + align - 1) & ~(align - 1)); +} + +/* + * The following is used with VIRTIO_RING_F_EVENT_IDX. + * + * Assuming a given event_idx value from the other size, if we have + * just incremented index from old to new_idx, should we trigger an + * event? + */ +static inline int +vring_need_event(uint16_t event_idx, uint16_t new_idx, uint16_t old) +{ + return (uint16_t)(new_idx - event_idx - 1) < + (uint16_t)(new_idx - old); +} + +#if defined __cplusplus +} +#endif + +#endif /* VIRTIO_RING_H */ diff --git a/libraries/openamp_arduino/src/openamp/virtqueue.h b/libraries/openamp_arduino/src/openamp/virtqueue.h index 99d6ff580..1a9d2e8fe 100755 --- a/libraries/openamp_arduino/src/openamp/virtqueue.h +++ b/libraries/openamp_arduino/src/openamp/virtqueue.h @@ -1,238 +1,414 @@ -#ifndef VIRTQUEUE_H_ -#define VIRTQUEUE_H_ - -/*- - * Copyright (c) 2011, Bryan Venteicher - * All rights reserved. - * - * SPDX-License-Identifier: BSD-2-Clause - * - * $FreeBSD$ - */ - -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -typedef uint8_t boolean; - -#include -#include -#include - -/*Error Codes*/ -#define VQ_ERROR_BASE -3000 -#define ERROR_VRING_FULL (VQ_ERROR_BASE - 1) -#define ERROR_INVLD_DESC_IDX (VQ_ERROR_BASE - 2) -#define ERROR_EMPTY_RING (VQ_ERROR_BASE - 3) -#define ERROR_NO_MEM (VQ_ERROR_BASE - 4) -#define ERROR_VRING_MAX_DESC (VQ_ERROR_BASE - 5) -#define ERROR_VRING_ALIGN (VQ_ERROR_BASE - 6) -#define ERROR_VRING_NO_BUFF (VQ_ERROR_BASE - 7) -#define ERROR_VQUEUE_INVLD_PARAM (VQ_ERROR_BASE - 8) - -#define VQUEUE_SUCCESS 0 - -/* The maximum virtqueue size is 2^15. Use that value as the end of - * descriptor chain terminator since it will never be a valid index - * in the descriptor table. This is used to verify we are correctly - * handling vq_free_cnt. - */ -#define VQ_RING_DESC_CHAIN_END 32768 -#define VIRTQUEUE_FLAG_INDIRECT 0x0001 -#define VIRTQUEUE_FLAG_EVENT_IDX 0x0002 -#define VIRTQUEUE_MAX_NAME_SZ 32 - -/* Support for indirect buffer descriptors. */ -#define VIRTIO_RING_F_INDIRECT_DESC (1 << 28) - -/* Support to suppress interrupt until specific index is reached. */ -#define VIRTIO_RING_F_EVENT_IDX (1 << 29) - -struct virtqueue_buf { - void *buf; - int len; -}; - -struct virtqueue { - struct virtio_device *vq_dev; - const char *vq_name; - uint16_t vq_queue_index; - uint16_t vq_nentries; - uint32_t vq_flags; - void (*callback)(struct virtqueue *vq); - void (*notify)(struct virtqueue *vq); - struct vring vq_ring; - uint16_t vq_free_cnt; - uint16_t vq_queued_cnt; - void *shm_io; /* opaque pointer to data needed to allow v2p & p2v */ - - /* - * Head of the free chain in the descriptor table. If - * there are no free descriptors, this will be set to - * VQ_RING_DESC_CHAIN_END. - */ - uint16_t vq_desc_head_idx; - - /* - * Last consumed descriptor in the used table, - * trails vq_ring.used->idx. - */ - uint16_t vq_used_cons_idx; - - /* - * Last consumed descriptor in the available table - - * used by the consumer side. - */ - uint16_t vq_available_idx; - -#ifdef VQUEUE_DEBUG - boolean vq_inuse; -#endif - - /* - * Used by the host side during callback. Cookie - * holds the address of buffer received from other side. - * Other fields in this structure are not used currently. - */ - - struct vq_desc_extra { - void *cookie; - uint16_t ndescs; - } vq_descx[0]; -}; - -/* struct to hold vring specific information */ -struct vring_alloc_info { - void *vaddr; - uint32_t align; - uint16_t num_descs; - uint16_t pad; -}; - -typedef void vq_callback(struct virtqueue *); -typedef void vq_notify(struct virtqueue *); - -#ifdef VQUEUE_DEBUG -#include -#include - -#define VQASSERT(_vq, _exp, _msg) \ - do { \ - if (!(_exp)) { \ - metal_log(METAL_LOG_EMERGENCY, \ - "%s: %s - _msg", __func__, (_vq)->vq_name); \ - metal_assert(_exp); \ - } \ - } while (0) - -#define VQ_RING_ASSERT_VALID_IDX(_vq, _idx) \ - VQASSERT((_vq), (_idx) < (_vq)->vq_nentries, "invalid ring index") - -#define VQ_RING_ASSERT_CHAIN_TERM(_vq) \ - VQASSERT((_vq), (_vq)->vq_desc_head_idx == \ - VQ_RING_DESC_CHAIN_END, \ - "full ring terminated incorrectly: invalid head") - -#define VQ_PARAM_CHK(condition, status_var, status_err) \ - do { \ - if (((status_var) == 0) && (condition)) { \ - status_var = status_err; \ - } \ - } while (0) - -#define VQUEUE_BUSY(vq) \ - do { \ - if (!(vq)->vq_inuse) \ - (vq)->vq_inuse = true; \ - else \ - VQASSERT(vq, !(vq)->vq_inuse,\ - "VirtQueue already in use") \ - } while (0) - -#define VQUEUE_IDLE(vq) ((vq)->vq_inuse = false) - -#else - -#define KASSERT(cond, str) -#define VQASSERT(_vq, _exp, _msg) -#define VQ_RING_ASSERT_VALID_IDX(_vq, _idx) -#define VQ_RING_ASSERT_CHAIN_TERM(_vq) -#define VQ_PARAM_CHK(condition, status_var, status_err) -#define VQUEUE_BUSY(vq) -#define VQUEUE_IDLE(vq) - -#endif - -int virtqueue_create(struct virtio_device *device, unsigned short id, - const char *name, struct vring_alloc_info *ring, - void (*callback)(struct virtqueue *vq), - void (*notify)(struct virtqueue *vq), - struct virtqueue *v_queue); - -/* - * virtqueue_set_shmem_io - * - * set virtqueue shared memory I/O region - * - * @vq - virt queue - * @io - pointer to the shared memory I/O region - */ -static inline void virtqueue_set_shmem_io(struct virtqueue *vq, - struct metal_io_region *io) -{ - vq->shm_io = io; -} - -int virtqueue_add_buffer(struct virtqueue *vq, struct virtqueue_buf *buf_list, - int readable, int writable, void *cookie); - -void *virtqueue_get_buffer(struct virtqueue *vq, uint32_t *len, uint16_t *idx); - -void *virtqueue_get_available_buffer(struct virtqueue *vq, uint16_t *avail_idx, - uint32_t *len); - -int virtqueue_add_consumed_buffer(struct virtqueue *vq, uint16_t head_idx, - uint32_t len); - -void virtqueue_disable_cb(struct virtqueue *vq); - -int virtqueue_enable_cb(struct virtqueue *vq); - -void virtqueue_kick(struct virtqueue *vq); - -/* -static inline struct virtqueue *virtqueue_allocate(unsigned int num_desc_extra) -{ - struct virtqueue *vqs; - uint32_t vq_size = sizeof(struct virtqueue) + - num_desc_extra * sizeof(struct vq_desc_extra); - - vqs = (struct virtqueue *)metal_allocate_memory(vq_size); - - if (vqs) { - memset(vqs, 0x00, vq_size); - } - - return vqs; -} -*/ - -void virtqueue_free(struct virtqueue *vq); - -void virtqueue_dump(struct virtqueue *vq); - -void virtqueue_notification(struct virtqueue *vq); - -uint32_t virtqueue_get_desc_size(struct virtqueue *vq); - -uint32_t virtqueue_get_buffer_length(struct virtqueue *vq, uint16_t idx); - -#if defined __cplusplus -} -#endif - -#endif /* VIRTQUEUE_H_ */ +#ifndef VIRTQUEUE_H_ +#define VIRTQUEUE_H_ + +/*- + * Copyright (c) 2011, Bryan Venteicher + * All rights reserved. + * + * SPDX-License-Identifier: BSD-2-Clause + * + * $FreeBSD$ + */ + +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +/* Error Codes */ +#define VQ_ERROR_BASE -3000 +#define ERROR_VRING_FULL (VQ_ERROR_BASE - 1) +#define ERROR_INVLD_DESC_IDX (VQ_ERROR_BASE - 2) +#define ERROR_EMPTY_RING (VQ_ERROR_BASE - 3) +#define ERROR_NO_MEM (VQ_ERROR_BASE - 4) +#define ERROR_VRING_MAX_DESC (VQ_ERROR_BASE - 5) +#define ERROR_VRING_ALIGN (VQ_ERROR_BASE - 6) +#define ERROR_VRING_NO_BUFF (VQ_ERROR_BASE - 7) +#define ERROR_VQUEUE_INVLD_PARAM (VQ_ERROR_BASE - 8) + +#define VQUEUE_SUCCESS 0 + +/* The maximum virtqueue size is 2^15. Use that value as the end of + * descriptor chain terminator since it will never be a valid index + * in the descriptor table. This is used to verify we are correctly + * handling vq_free_cnt. + */ +#define VQ_RING_DESC_CHAIN_END 32768 + +/* Support for indirect buffer descriptors. */ +#define VIRTIO_RING_F_INDIRECT_DESC (1 << 28) + +/* Support to suppress interrupt until specific index is reached. */ +#define VIRTIO_RING_F_EVENT_IDX (1 << 29) + +/* cache invalidation helpers */ +#define CACHE_FLUSH(x, s) metal_cache_flush(x, s) +#define CACHE_INVALIDATE(x, s) metal_cache_invalidate(x, s) + +#ifdef VIRTIO_CACHED_VRINGS +#warning "VIRTIO_CACHED_VRINGS is deprecated, please use VIRTIO_USE_DCACHE" +#endif +#if defined(VIRTIO_CACHED_VRINGS) || defined(VIRTIO_USE_DCACHE) +#define VRING_FLUSH(x, s) CACHE_FLUSH(x, s) +#define VRING_INVALIDATE(x, s) CACHE_INVALIDATE(x, s) +#else +#define VRING_FLUSH(x, s) do { } while (0) +#define VRING_INVALIDATE(x, s) do { } while (0) +#endif /* VIRTIO_CACHED_VRINGS || VIRTIO_USE_DCACHE */ + +/** @brief Buffer descriptor. */ +struct virtqueue_buf { + /** Address of the buffer. */ + void *buf; + + /** Size of the buffer. */ + int len; +}; + +/** @brief Vring descriptor extra information for buffer list management. */ +struct vq_desc_extra { + /** Pointer to first descriptor. */ + void *cookie; + + /** Number of chained descriptors. */ + uint16_t ndescs; +}; + +/** @brief Local virtio queue to manage a virtio ring for sending or receiving. */ +struct virtqueue { + /** Associated virtio device. */ + struct virtio_device *vq_dev; + + /** Name of the virtio queue. */ + const char *vq_name; + + /** Index of the virtio queue. */ + uint16_t vq_queue_index; + + /** Max number of buffers in the virtio queue. */ + uint16_t vq_nentries; + + /** Function to invoke, when message is available on the virtio queue. */ + void (*callback)(struct virtqueue *vq); + + /** Private data associated to the virtio queue. */ + void *priv; + + /** Function to invoke, to inform the other side about an update in the virtio queue. */ + void (*notify)(struct virtqueue *vq); + + /** Associated virtio ring. */ + struct vring vq_ring; + + /** Number of free descriptor in the virtio ring. */ + uint16_t vq_free_cnt; + + /** Number of queued buffer in the virtio ring. */ + uint16_t vq_queued_cnt; + + /** + * Metal I/O region of the vrings and buffers. + * This structure is used for conversion between virtual and physical addresses. + */ + void *shm_io; + + /** + * Head of the free chain in the descriptor table. If there are no free descriptors, + * this will be set to VQ_RING_DESC_CHAIN_END. + */ + uint16_t vq_desc_head_idx; + + /** Last consumed descriptor in the used table, trails vq_ring.used->idx. */ + uint16_t vq_used_cons_idx; + + /** Last consumed descriptor in the available table, used by the consumer side. */ + uint16_t vq_available_idx; + +#ifdef VQUEUE_DEBUG + /** Debug counter for virtqueue reentrance check. */ + bool vq_inuse; +#endif + + /** + * Used by the host side during callback. Cookie holds the address of buffer received from + * other side. Other fields in this structure are not used currently. + */ + struct vq_desc_extra vq_descx[0]; +}; + +/** @brief Virtio ring specific information. */ +struct vring_alloc_info { + /** Vring address. */ + void *vaddr; + + /** Vring alignment. */ + uint32_t align; + + /** Number of descriptors in the vring. */ + uint16_t num_descs; + + /** Padding */ + uint16_t pad; +}; + +typedef void (*vq_callback)(struct virtqueue *); +typedef void (*vq_notify)(struct virtqueue *); + +#ifdef VQUEUE_DEBUG +#include +#include + +#define VQASSERT(_vq, _exp, _msg) \ + do { \ + if (!(_exp)) { \ + metal_log(METAL_LOG_EMERGENCY, \ + "%s: %s - "_msg, __func__, (_vq)->vq_name); \ + metal_assert(_exp); \ + } \ + } while (0) + +#define VQ_RING_ASSERT_VALID_IDX(_vq, _idx) \ + VQASSERT((_vq), (_idx) < (_vq)->vq_nentries, "invalid ring index") + +#define VQ_RING_ASSERT_CHAIN_TERM(_vq) \ + VQASSERT((_vq), (_vq)->vq_desc_head_idx == \ + VQ_RING_DESC_CHAIN_END, \ + "full ring terminated incorrectly: invalid head") + +#define VQ_PARAM_CHK(condition, status_var, status_err) \ + do { \ + if (((status_var) == 0) && (condition)) { \ + status_var = status_err; \ + } \ + } while (0) + +#define VQUEUE_BUSY(vq) \ + do { \ + if (!(vq)->vq_inuse) \ + (vq)->vq_inuse = true; \ + else \ + VQASSERT(vq, !(vq)->vq_inuse,\ + "VirtQueue already in use"); \ + } while (0) + +#define VQUEUE_IDLE(vq) ((vq)->vq_inuse = false) + +#else + +#define VQASSERT(_vq, _exp, _msg) +#define VQ_RING_ASSERT_VALID_IDX(_vq, _idx) +#define VQ_RING_ASSERT_CHAIN_TERM(_vq) +#define VQ_PARAM_CHK(condition, status_var, status_err) +#define VQUEUE_BUSY(vq) +#define VQUEUE_IDLE(vq) + +#endif + +/** + * @internal + * + * @brief Creates new VirtIO queue + * + * @param device Pointer to VirtIO device + * @param id VirtIO queue ID , must be unique + * @param name Name of VirtIO queue + * @param ring Pointer to vring_alloc_info control block + * @param callback Pointer to callback function, invoked + * when message is available on VirtIO queue + * @param notify Pointer to notify function, used to notify + * other side that there is job available for it + * @param vq Created VirtIO queue. + * + * @return Function status + */ +int virtqueue_create(struct virtio_device *device, unsigned short id, + const char *name, struct vring_alloc_info *ring, + void (*callback)(struct virtqueue *vq), + void (*notify)(struct virtqueue *vq), + struct virtqueue *vq); + +/* + * virtqueue_set_shmem_io + * + * set virtqueue shared memory I/O region + * + * @vq - virt queue + * @io - pointer to the shared memory I/O region + */ +static inline void virtqueue_set_shmem_io(struct virtqueue *vq, + struct metal_io_region *io) +{ + vq->shm_io = io; +} + +/** + * @internal + * + * @brief Enqueues new buffer in vring for consumption by other side. Readable + * buffers are always inserted before writable buffers + * + * @param vq Pointer to VirtIO queue control block. + * @param buf_list Pointer to a list of virtqueue buffers. + * @param readable Number of readable buffers + * @param writable Number of writable buffers + * @param cookie Pointer to hold call back data + * + * @return Function status + */ +int virtqueue_add_buffer(struct virtqueue *vq, struct virtqueue_buf *buf_list, + int readable, int writable, void *cookie); + +/** + * @internal + * + * @brief Returns used buffers from VirtIO queue + * + * @param vq Pointer to VirtIO queue control block + * @param len Length of conumed buffer + * @param idx Index of the buffer + * + * @return Pointer to used buffer + */ +void *virtqueue_get_buffer(struct virtqueue *vq, uint32_t *len, uint16_t *idx); + +/** + * @internal + * + * @brief Returns buffer available for use in the VirtIO queue + * + * @param vq Pointer to VirtIO queue control block + * @param avail_idx Pointer to index used in vring desc table + * @param len Length of buffer + * + * @return Pointer to available buffer + */ +void *virtqueue_get_available_buffer(struct virtqueue *vq, uint16_t *avail_idx, + uint32_t *len); + +/** + * @internal + * + * @brief Returns consumed buffer back to VirtIO queue + * + * @param vq Pointer to VirtIO queue control block + * @param head_idx Index of vring desc containing used buffer + * @param len Length of buffer + * + * @return Function status + */ +int virtqueue_add_consumed_buffer(struct virtqueue *vq, uint16_t head_idx, + uint32_t len); + +/** + * @internal + * + * @brief Disables callback generation + * + * @param vq Pointer to VirtIO queue control block + */ +void virtqueue_disable_cb(struct virtqueue *vq); + +/** + * @internal + * + * @brief Enables callback generation + * + * @param vq Pointer to VirtIO queue control block + * + * @return Function status + */ +int virtqueue_enable_cb(struct virtqueue *vq); + +/** + * @internal + * + * @brief Notifies other side that there is buffer available for it. + * + * @param vq Pointer to VirtIO queue control block + */ +void virtqueue_kick(struct virtqueue *vq); + +static inline struct virtqueue *virtqueue_allocate(unsigned int num_desc_extra) +{ + struct virtqueue *vqs; + uint32_t vq_size = sizeof(struct virtqueue) + + num_desc_extra * sizeof(struct vq_desc_extra); + + vqs = (struct virtqueue *)metal_allocate_memory(vq_size); + if (vqs) { + memset(vqs, 0x00, vq_size); + } + + return vqs; +} + +/** + * @internal + * + * @brief Frees VirtIO queue resources + * + * @param vq Pointer to VirtIO queue control block + */ +void virtqueue_free(struct virtqueue *vq); + +/** + * @internal + * + * @brief Dumps important virtqueue fields , use for debugging purposes + * + * @param vq Pointer to VirtIO queue control block + */ +void virtqueue_dump(struct virtqueue *vq); + +void virtqueue_notification(struct virtqueue *vq); + +/** + * @internal + * + * @brief Returns vring descriptor size + * + * @param vq Pointer to VirtIO queue control block + * + * @return Descriptor length + */ +uint32_t virtqueue_get_desc_size(struct virtqueue *vq); + +uint32_t virtqueue_get_buffer_length(struct virtqueue *vq, uint16_t idx); +void *virtqueue_get_buffer_addr(struct virtqueue *vq, uint16_t idx); + +/** + * @brief Test if virtqueue is empty + * + * @param vq Pointer to VirtIO queue control block + * + * @return 1 if virtqueue is empty, 0 otherwise + */ +static inline int virtqueue_empty(struct virtqueue *vq) +{ + return (vq->vq_nentries == vq->vq_free_cnt); +} + +/** + * @brief Test if virtqueue is full + * + * @param vq Pointer to VirtIO queue control block + * + * @return 1 if virtqueue is full, 0 otherwise + */ +static inline int virtqueue_full(struct virtqueue *vq) +{ + return (vq->vq_free_cnt == 0); +} + +#if defined __cplusplus +} +#endif + +#endif /* VIRTQUEUE_H_ */ diff --git a/libraries/openamp_arduino/src/openamp_conf.h b/libraries/openamp_arduino/src/openamp_conf.h index 57e2ae178..1eeacd81a 100644 --- a/libraries/openamp_arduino/src/openamp_conf.h +++ b/libraries/openamp_arduino/src/openamp_conf.h @@ -151,13 +151,17 @@ extern int __OPENAMP_region_end__[]; #define SHM_START_ADDRESS ((metal_phys_addr_t)__OPENAMP_region_start__) #define SHM_SIZE (size_t)((void *)__OPENAMP_region_end__ - (void *) __OPENAMP_region_start__) +#define SHM_RSC_SIZE (1024) +#define SHM_RSC_ADDR ((void *)__OPENAMP_region_start__ - SHM_RSC_SIZE) + #endif #define VRING_RX_ADDRESS SHM_START_ADDRESS -#define VRING_TX_ADDRESS (SHM_START_ADDRESS + 0x400) -#define VRING_BUFF_ADDRESS (SHM_START_ADDRESS + 0x800) -#define VRING_ALIGNMENT 4 -#define VRING_NUM_BUFFS 16 /* number of rpmsg buffers */ +#define VRING_TX_ADDRESS (SHM_START_ADDRESS + 0x1000) +#define VRING_BUFF_ADDRESS (SHM_START_ADDRESS + 0x2000) +#define VRING_BUFF_SIZE (SHM_SIZE - 0x2000) +#define VRING_ALIGNMENT 32 +#define VRING_NUM_BUFFS 64 /* number of rpmsg buffers */ /* Fixed parameter */ #define NUM_RESOURCE_ENTRIES 2 diff --git a/libraries/openamp_arduino/src/remoteproc.c b/libraries/openamp_arduino/src/remoteproc.c new file mode 100644 index 000000000..ad16a2d7e --- /dev/null +++ b/libraries/openamp_arduino/src/remoteproc.c @@ -0,0 +1,1030 @@ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * Copyright (c) 2015 Xilinx, Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/****************************************************************************** + * static functions + *****************************************************************************/ +static const struct loader_ops * +remoteproc_check_fw_format(const void *img_data, size_t img_len) +{ + if (img_len <= 0) + return NULL; + else if (elf_identify(img_data, img_len) == 0) + return &elf_ops; + else + return NULL; +} + +/* try the internal list added by remoteproc_add_mem first and then get_mem callback */ +static struct remoteproc_mem * +remoteproc_get_mem(struct remoteproc *rproc, const char *name, + metal_phys_addr_t pa, metal_phys_addr_t da, + void *va, size_t size, struct remoteproc_mem *buf) +{ + struct metal_list *node; + struct remoteproc_mem *mem; + + /* + * Check name length to avoid overflow. This test has to be kept for + * MISRA compliance + */ + if (name && strlen(name) > RPROC_MAX_NAME_LEN) + return NULL; + + metal_list_for_each(&rproc->mems, node) { + mem = metal_container_of(node, struct remoteproc_mem, node); + if (name) { + if (!strncmp(name, mem->name, RPROC_MAX_NAME_LEN)) + return mem; + } else if (pa != METAL_BAD_PHYS) { + metal_phys_addr_t pa_start, pa_end; + + pa_start = mem->pa; + pa_end = pa_start + mem->size; + if (pa >= pa_start && (pa + size) <= pa_end && pa < pa_end) + return mem; + } else if (da != METAL_BAD_PHYS) { + metal_phys_addr_t da_start, da_end; + + da_start = mem->da; + da_end = da_start + mem->size; + if (da >= da_start && (da + size) <= da_end && da < da_end) + return mem; + } else if (va) { + if (metal_io_virt_to_offset(mem->io, va) != + METAL_BAD_OFFSET) + return mem; + + } else { + return NULL; + } + } + + if (!rproc->ops->get_mem) + return NULL; + + return rproc->ops->get_mem(rproc, name, pa, da, va, size, buf); +} + +static metal_phys_addr_t +remoteproc_datopa(struct remoteproc_mem *mem, metal_phys_addr_t da) +{ + metal_phys_addr_t pa; + + pa = mem->pa + da - mem->da; + return pa; +} + +static metal_phys_addr_t +remoteproc_patoda(struct remoteproc_mem *mem, metal_phys_addr_t pa) +{ + metal_phys_addr_t da; + + da = mem->da + pa - mem->pa; + return da; +} + +static void *remoteproc_get_rsc_table(struct remoteproc *rproc, + void *store, + const struct image_store_ops *store_ops, + size_t offset, + size_t len) +{ + int ret; + void *rsc_table = NULL; + const void *img_data; + + /* Copy the resource table to local memory, + * the caller should be responsible to release the memory + */ + rsc_table = metal_allocate_memory(len); + if (!rsc_table) { + return RPROC_ERR_PTR(-RPROC_ENOMEM); + } + ret = store_ops->load(store, offset, len, &img_data, RPROC_LOAD_ANYADDR, + NULL, 1); + if (ret < 0 || ret < (int)len || !img_data) { + metal_log(METAL_LOG_ERROR, + "get rsc failed: 0x%llx, 0x%llx\r\n", offset, len); + ret = -RPROC_EINVAL; + goto error; + } + memcpy(rsc_table, img_data, len); + + ret = handle_rsc_table(rproc, rsc_table, len, NULL); + if (ret < 0) { + goto error; + } + return rsc_table; + +error: + metal_free_memory(rsc_table); + return RPROC_ERR_PTR(ret); +} + +static int remoteproc_parse_rsc_table(struct remoteproc *rproc, + struct resource_table *rsc_table, + size_t rsc_size) +{ + struct metal_io_region *io; + + if (!rsc_table) + return -RPROC_EINVAL; + + io = remoteproc_get_io_with_va(rproc, rsc_table); + return handle_rsc_table(rproc, rsc_table, rsc_size, io); +} + +int remoteproc_set_rsc_table(struct remoteproc *rproc, + struct resource_table *rsc_table, + size_t rsc_size) +{ + int ret; + struct metal_io_region *io; + + if (!rproc || !rsc_table || rsc_size == 0) + return -RPROC_EINVAL; + + io = remoteproc_get_io_with_va(rproc, rsc_table); + if (!io) + return -RPROC_EINVAL; + ret = remoteproc_parse_rsc_table(rproc, rsc_table, rsc_size); + if (!ret) { + rproc->rsc_table = rsc_table; + rproc->rsc_len = rsc_size; + rproc->rsc_io = io; + } + return ret; +} + +struct remoteproc *remoteproc_init(struct remoteproc *rproc, + const struct remoteproc_ops *ops, void *priv) +{ + if (!rproc || !ops) + return NULL; + + memset(rproc, 0, sizeof(*rproc)); + rproc->state = RPROC_OFFLINE; + metal_mutex_init(&rproc->lock); + metal_list_init(&rproc->mems); + metal_list_init(&rproc->vdevs); + rproc = ops->init(rproc, ops, priv); + return rproc; +} + +int remoteproc_remove(struct remoteproc *rproc) +{ + int ret = 0; + + if (!rproc) + return -RPROC_EINVAL; + + metal_mutex_acquire(&rproc->lock); + if (rproc->state == RPROC_OFFLINE) { + if (rproc->ops->remove) + rproc->ops->remove(rproc); + } else { + ret = -RPROC_EAGAIN; + } + metal_mutex_release(&rproc->lock); + return ret; +} + +int remoteproc_config(struct remoteproc *rproc, void *data) +{ + int ret = -RPROC_ENODEV; + + if (rproc) { + metal_mutex_acquire(&rproc->lock); + if (rproc->state == RPROC_OFFLINE) { + /* configure operation is allowed if the state is + * offline or ready. This function can be called + * multiple times before start the remote. + */ + if (rproc->ops->config) + ret = rproc->ops->config(rproc, data); + else + ret = 0; + rproc->state = RPROC_READY; + } else { + ret = -RPROC_EINVAL; + } + metal_mutex_release(&rproc->lock); + } + return ret; +} + +int remoteproc_start(struct remoteproc *rproc) +{ + int ret = -RPROC_ENODEV; + + if (rproc) { + metal_mutex_acquire(&rproc->lock); + if (rproc->state == RPROC_READY) { + ret = rproc->ops->start(rproc); + rproc->state = RPROC_RUNNING; + } else { + ret = -RPROC_EINVAL; + } + metal_mutex_release(&rproc->lock); + } + return ret; +} + +int remoteproc_stop(struct remoteproc *rproc) +{ + int ret = -RPROC_ENODEV; + + if (rproc) { + metal_mutex_acquire(&rproc->lock); + if (rproc->state != RPROC_STOPPED && + rproc->state != RPROC_OFFLINE) { + if (rproc->ops->stop) + ret = rproc->ops->stop(rproc); + rproc->state = RPROC_STOPPED; + } else { + ret = 0; + } + metal_mutex_release(&rproc->lock); + } + return ret; +} + +int remoteproc_shutdown(struct remoteproc *rproc) +{ + int ret = -RPROC_ENODEV; + + if (rproc) { + ret = 0; + metal_mutex_acquire(&rproc->lock); + if (rproc->state != RPROC_OFFLINE) { + if (rproc->state != RPROC_STOPPED) { + if (rproc->ops->stop) + ret = rproc->ops->stop(rproc); + } + if (!ret) { + if (rproc->ops->shutdown) + ret = rproc->ops->shutdown(rproc); + if (!ret) { + rproc->state = RPROC_OFFLINE; + } + } + } + metal_mutex_release(&rproc->lock); + } + return ret; +} + +struct metal_io_region * +remoteproc_get_io_with_name(struct remoteproc *rproc, + const char *name) +{ + struct remoteproc_mem *mem; + struct remoteproc_mem buf; + + if (!rproc) + return NULL; + + mem = remoteproc_get_mem(rproc, name, + METAL_BAD_PHYS, METAL_BAD_PHYS, NULL, 0, &buf); + if (mem) + return mem->io; + + return NULL; +} + +struct metal_io_region * +remoteproc_get_io_with_pa(struct remoteproc *rproc, + metal_phys_addr_t pa) +{ + struct remoteproc_mem *mem; + struct remoteproc_mem buf; + + if (!rproc) + return NULL; + + mem = remoteproc_get_mem(rproc, NULL, pa, METAL_BAD_PHYS, NULL, 0, &buf); + if (mem) + return mem->io; + + return NULL; +} + +struct metal_io_region * +remoteproc_get_io_with_da(struct remoteproc *rproc, + metal_phys_addr_t da, + unsigned long *offset) +{ + struct remoteproc_mem *mem; + struct remoteproc_mem buf; + + if (!rproc || !offset) + return NULL; + + mem = remoteproc_get_mem(rproc, NULL, METAL_BAD_PHYS, da, NULL, 0, &buf); + if (mem) { + struct metal_io_region *io; + metal_phys_addr_t pa; + + io = mem->io; + pa = remoteproc_datopa(mem, da); + *offset = metal_io_phys_to_offset(io, pa); + return io; + } + + return NULL; +} + +struct metal_io_region * +remoteproc_get_io_with_va(struct remoteproc *rproc, void *va) +{ + struct remoteproc_mem *mem; + struct remoteproc_mem buf; + + if (!rproc) + return NULL; + + mem = remoteproc_get_mem(rproc, NULL, METAL_BAD_PHYS, METAL_BAD_PHYS, + va, 0, &buf); + if (mem) + return mem->io; + + return NULL; +} + +void *remoteproc_mmap(struct remoteproc *rproc, + metal_phys_addr_t *pa, metal_phys_addr_t *da, + size_t size, unsigned int attribute, + struct metal_io_region **io) +{ + void *va = NULL; + metal_phys_addr_t lpa, lda; + struct remoteproc_mem *mem; + struct remoteproc_mem buf; + + if (!rproc || size == 0 || (!pa && !da)) + return NULL; + if (pa) + lpa = *pa; + else + lpa = METAL_BAD_PHYS; + if (da) + lda = *da; + else + lda = METAL_BAD_PHYS; + mem = remoteproc_get_mem(rproc, NULL, lpa, lda, NULL, size, &buf); + if (mem) { + if (lpa != METAL_BAD_PHYS) + lda = remoteproc_patoda(mem, lpa); + else if (lda != METAL_BAD_PHYS) + lpa = remoteproc_datopa(mem, lda); + if (io) + *io = mem->io; + va = metal_io_phys_to_virt(mem->io, lpa); + } else if (rproc->ops->mmap) { + va = rproc->ops->mmap(rproc, &lpa, &lda, size, attribute, io); + } + + if (pa) + *pa = lpa; + if (da) + *da = lda; + return va; +} + +int remoteproc_load(struct remoteproc *rproc, const char *path, + void *store, const struct image_store_ops *store_ops, + void **img_info) +{ + int ret; + const struct loader_ops *loader; + const void *img_data; + void *limg_info = NULL; + size_t offset, noffset; + size_t len, nlen; + int last_load_state; + metal_phys_addr_t da, rsc_da; + size_t rsc_size = 0; + void *rsc_table = NULL; + struct metal_io_region *io = NULL; + + if (!rproc) + return -RPROC_ENODEV; + + metal_mutex_acquire(&rproc->lock); + metal_log(METAL_LOG_DEBUG, "%s: check remoteproc status\r\n", __func__); + /* If remoteproc is not in ready state, cannot load executable */ + if (rproc->state != RPROC_READY && rproc->state != RPROC_CONFIGURED) { + metal_log(METAL_LOG_ERROR, + "load failure: invalid rproc state %d.\r\n", + rproc->state); + metal_mutex_release(&rproc->lock); + return -RPROC_EINVAL; + } + + if (!store_ops) { + metal_log(METAL_LOG_ERROR, + "load failure: loader ops is not set.\r\n"); + metal_mutex_release(&rproc->lock); + return -RPROC_EINVAL; + } + + /* Open executable to get ready to parse */ + metal_log(METAL_LOG_DEBUG, "%s: open executable image\r\n", __func__); + ret = store_ops->open(store, path, &img_data); + if (ret <= 0) { + metal_log(METAL_LOG_ERROR, + "load failure: failed to open firmware %d.\r\n", + ret); + metal_mutex_release(&rproc->lock); + return -RPROC_EINVAL; + } + len = ret; + metal_assert(img_data); + + /* Check executable format to select a parser */ + loader = rproc->loader; + if (!loader) { + metal_log(METAL_LOG_DEBUG, "%s: check loader\r\n", __func__); + loader = remoteproc_check_fw_format(img_data, len); + if (!loader) { + metal_log(METAL_LOG_ERROR, + "load failure: failed to get store ops.\r\n"); + ret = -RPROC_EINVAL; + goto error1; + } + rproc->loader = loader; + } + + /* Load executable headers */ + metal_log(METAL_LOG_DEBUG, "%s: loading headers\r\n", __func__); + offset = 0; + last_load_state = RPROC_LOADER_NOT_READY; + while (1) { + ret = loader->load_header(img_data, offset, len, + &limg_info, last_load_state, + &noffset, &nlen); + last_load_state = ret; + metal_log(METAL_LOG_DEBUG, + "%s, load header 0x%lx, 0x%x, next 0x%lx, 0x%x\r\n", + __func__, offset, len, noffset, nlen); + if (ret < 0) { + metal_log(METAL_LOG_ERROR, + "load header failed 0x%lx,%d.\r\n", + offset, len); + + goto error2; + } else if ((ret & RPROC_LOADER_READY_TO_LOAD) != 0) { + if (nlen == 0) + break; + else if ((noffset > (offset + len)) && + (store_ops->features & SUPPORT_SEEK) == 0) { + /* Required data is not continued, however + * seek is not supported, stop to load + * headers such as ELF section headers which + * is usually located to the end of image. + * Continue to load binary data to target + * memory. + */ + break; + } + } + /* Continue to load headers image data */ + img_data = NULL; + ret = store_ops->load(store, noffset, nlen, + &img_data, + RPROC_LOAD_ANYADDR, + NULL, 1); + if (ret < (int)nlen) { + metal_log(METAL_LOG_ERROR, + "load image data failed 0x%x,%d\r\n", + noffset, nlen); + goto error2; + } + offset = noffset; + len = nlen; + } + ret = loader->locate_rsc_table(limg_info, &rsc_da, &offset, &rsc_size); + if (ret == 0 && rsc_size > 0) { + /* parse resource table */ + rsc_table = remoteproc_get_rsc_table(rproc, store, store_ops, + offset, rsc_size); + } + + /* load executable data */ + metal_log(METAL_LOG_DEBUG, "%s: load executable data\r\n", __func__); + offset = 0; + len = 0; + while (1) { + unsigned char padding; + size_t nmemsize; + metal_phys_addr_t pa; + + da = RPROC_LOAD_ANYADDR; + nlen = 0; + nmemsize = 0; + noffset = 0; + ret = loader->load_data(rproc, img_data, offset, len, + &limg_info, last_load_state, &da, + &noffset, &nlen, &padding, &nmemsize); + if (ret < 0) { + metal_log(METAL_LOG_ERROR, + "load data failed,0x%lx,%d\r\n", + noffset, nlen); + goto error3; + } + metal_log(METAL_LOG_DEBUG, + "load data: da 0x%lx, offset 0x%lx, len = 0x%lx, memsize = 0x%lx, state 0x%x\r\n", + da, noffset, nlen, nmemsize, ret); + last_load_state = ret; + if (da != RPROC_LOAD_ANYADDR) { + /* Data is supposed to be loaded to target memory */ + img_data = NULL; + /* get the I/O region from remoteproc */ + pa = METAL_BAD_PHYS; + (void)remoteproc_mmap(rproc, &pa, &da, nmemsize, 0, + &io); + if (pa == METAL_BAD_PHYS || !io) { + metal_log(METAL_LOG_ERROR, + "load failed, no mapping for 0x%llx.\r\n", + da); + ret = -RPROC_EINVAL; + goto error3; + } + if (nlen > 0) { + ret = store_ops->load(store, noffset, nlen, + &img_data, pa, io, 1); + if (ret != (int)nlen) { + metal_log(METAL_LOG_ERROR, + "load data failed 0x%lx, 0x%lx, 0x%x\r\n", + pa, noffset, nlen); + ret = -RPROC_EINVAL; + goto error3; + } + } + if (nmemsize > nlen) { + size_t tmpoffset; + + tmpoffset = metal_io_phys_to_offset(io, + pa + nlen); + metal_io_block_set(io, tmpoffset, + padding, (nmemsize - nlen)); + } + } else if (nlen != 0) { + ret = store_ops->load(store, noffset, nlen, + &img_data, + RPROC_LOAD_ANYADDR, + NULL, 1); + if (ret < (int)nlen) { + if ((last_load_state & + RPROC_LOADER_POST_DATA_LOAD) != 0) { + metal_log(METAL_LOG_WARNING, + "not all the headers are loaded\r\n"); + break; + } + metal_log(METAL_LOG_ERROR, + "post-load image data failed 0x%x,%d\r\n", + noffset, nlen); + goto error3; + } + offset = noffset; + len = nlen; + } else { + /* (last_load_state & RPROC_LOADER_LOAD_COMPLETE) != 0 */ + break; + } + } + + if (rsc_size == 0) { + ret = loader->locate_rsc_table(limg_info, &rsc_da, + &offset, &rsc_size); + if (ret == 0 && rsc_size > 0) { + /* parse resource table */ + rsc_table = remoteproc_get_rsc_table(rproc, store, + store_ops, + offset, + rsc_size); + } + } + + /* Update resource table */ + if (rsc_table) { + void *rsc_table_cp = rsc_table; + + metal_log(METAL_LOG_DEBUG, + "%s, update resource table\r\n", __func__); + rsc_table = remoteproc_mmap(rproc, NULL, &rsc_da, + rsc_size, 0, &io); + if (rsc_table) { + size_t rsc_io_offset; + + /* Update resource table */ + rsc_io_offset = metal_io_virt_to_offset(io, rsc_table); + ret = metal_io_block_write(io, rsc_io_offset, + rsc_table_cp, rsc_size); + if (ret != (int)rsc_size) { + metal_log(METAL_LOG_WARNING, + "load: failed to update rsc\r\n"); + } + rproc->rsc_table = rsc_table; + rproc->rsc_len = rsc_size; + rproc->rsc_io = io; + } else { + metal_log(METAL_LOG_WARNING, + "load: not able to update rsc table.\r\n"); + } + metal_free_memory(rsc_table_cp); + /* So that the rsc_table will not get released */ + rsc_table = NULL; + } + + metal_log(METAL_LOG_DEBUG, "%s: successfully load firmware\r\n", + __func__); + /* get entry point from the firmware */ + rproc->bootaddr = loader->get_entry(limg_info); + rproc->state = RPROC_READY; + + metal_mutex_release(&rproc->lock); + if (img_info) + *img_info = limg_info; + else + loader->release(limg_info); + store_ops->close(store); + return 0; + +error3: + if (rsc_table) + metal_free_memory(rsc_table); +error2: + loader->release(limg_info); +error1: + store_ops->close(store); + metal_mutex_release(&rproc->lock); + return ret; +} + +int remoteproc_load_noblock(struct remoteproc *rproc, + const void *img_data, size_t offset, size_t len, + void **img_info, + metal_phys_addr_t *pa, struct metal_io_region **io, + size_t *noffset, size_t *nlen, + size_t *nmlen, unsigned char *padding) +{ + int ret; + const struct loader_ops *loader; + void *limg_info = NULL; + int last_load_state; + metal_phys_addr_t da, rsc_da; + size_t rsc_size; + void *rsc_table = NULL, *lrsc_table = NULL; + + if (!rproc) + return -RPROC_ENODEV; + + metal_assert(pa); + metal_assert(io); + metal_assert(noffset); + metal_assert(nlen); + metal_assert(nmlen); + metal_assert(padding); + + metal_mutex_acquire(&rproc->lock); + metal_log(METAL_LOG_DEBUG, "%s: check remoteproc status\r\n", __func__); + /* If remoteproc is not in ready state, cannot load executable */ + if (rproc->state != RPROC_READY) { + metal_log(METAL_LOG_ERROR, + "load failure: invalid rproc state %d.\r\n", + rproc->state); + metal_mutex_release(&rproc->lock); + return -RPROC_EINVAL; + } + + /* Check executable format to select a parser */ + loader = rproc->loader; + if (!loader) { + metal_log(METAL_LOG_DEBUG, "%s: check loader\r\n", __func__); + if (!img_data || offset != 0 || len == 0) { + metal_log(METAL_LOG_ERROR, + "load failure, invalid inputs, not able to identify image.\r\n"); + metal_mutex_release(&rproc->lock); + return -RPROC_EINVAL; + } + loader = remoteproc_check_fw_format(img_data, len); + if (!loader) { + metal_log(METAL_LOG_ERROR, + "load failure: failed to identify image.\r\n"); + metal_mutex_release(&rproc->lock); + return -RPROC_EINVAL; + } + rproc->loader = loader; + } + if (!img_info || !*img_info) { + last_load_state = 0; + } else { + limg_info = *img_info; + last_load_state = loader->get_load_state(limg_info); + if (last_load_state < 0) { + metal_log(METAL_LOG_ERROR, + "load failure, not able get load state.\r\n"); + metal_mutex_release(&rproc->lock); + return -RPROC_EINVAL; + } + } + da = RPROC_LOAD_ANYADDR; + *nlen = 0; + if ((last_load_state & RPROC_LOADER_READY_TO_LOAD) == 0 && + (last_load_state & RPROC_LOADER_LOAD_COMPLETE) == 0) { + /* Get the mandatory executable headers */ + ret = loader->load_header(img_data, offset, len, + &limg_info, last_load_state, + noffset, nlen); + metal_log(METAL_LOG_DEBUG, + "%s, load header 0x%lx, 0x%x, next 0x%lx, 0x%x\r\n", + __func__, offset, len, *noffset, *nlen); + if (ret < 0) { + metal_log(METAL_LOG_ERROR, + "load header failed 0x%lx,%d.\r\n", + offset, len); + goto error1; + } + last_load_state = ret; + if (*nlen != 0 && + (last_load_state & RPROC_LOADER_READY_TO_LOAD) == 0) + goto out; + } + if ((last_load_state & RPROC_LOADER_READY_TO_LOAD) != 0 || + (last_load_state & RPROC_LOADER_POST_DATA_LOAD) != 0) { + /* Enough information to know which target memory for + * which data. + */ + ret = loader->load_data(rproc, img_data, offset, len, + &limg_info, last_load_state, &da, + noffset, nlen, padding, nmlen); + metal_log(METAL_LOG_DEBUG, + "%s, load data 0x%lx, 0x%x, next 0x%lx, 0x%x\r\n", + __func__, offset, len, *noffset, *nlen); + if (ret < 0) { + metal_log(METAL_LOG_ERROR, + "load data failed,0x%lx,%d\r\n", + offset, len); + goto error1; + } + last_load_state = ret; + if (da != RPROC_LOAD_ANYADDR) { + /* get the I/O region from remoteproc */ + *pa = METAL_BAD_PHYS; + (void)remoteproc_mmap(rproc, pa, &da, *nmlen, 0, io); + if (*pa == METAL_BAD_PHYS || !io) { + metal_log(METAL_LOG_ERROR, + "load failed, no mapping for 0x%llx.\r\n", + da); + ret = -RPROC_EINVAL; + goto error1; + } + } + if (*nlen != 0) + goto out; + } + if ((last_load_state & RPROC_LOADER_LOAD_COMPLETE) != 0) { + /* Get resource table */ + size_t rsc_offset; + size_t rsc_io_offset; + + ret = loader->locate_rsc_table(limg_info, &rsc_da, + &rsc_offset, &rsc_size); + if (ret == 0 && rsc_size > 0) { + lrsc_table = metal_allocate_memory(rsc_size); + if (!lrsc_table) { + ret = -RPROC_ENOMEM; + goto error1; + } + rsc_table = remoteproc_mmap(rproc, NULL, &rsc_da, + rsc_size, 0, io); + if (!*io) { + metal_log(METAL_LOG_ERROR, + "load failed: failed to mmap rsc\r\n"); + metal_free_memory(lrsc_table); + goto error1; + } + rsc_io_offset = metal_io_virt_to_offset(*io, rsc_table); + ret = metal_io_block_read(*io, rsc_io_offset, + lrsc_table, rsc_size); + if (ret != (int)rsc_size) { + metal_log(METAL_LOG_ERROR, + "load failed: failed to get rsc\r\n"); + metal_free_memory(lrsc_table); + goto error1; + } + /* parse resource table */ + ret = remoteproc_parse_rsc_table(rproc, lrsc_table, + rsc_size); + if (ret < 0) { + metal_log(METAL_LOG_ERROR, + "load failed: failed to parse rsc\r\n"); + metal_free_memory(lrsc_table); + goto error1; + } + /* Update resource table */ + ret = metal_io_block_write(*io, rsc_io_offset, + lrsc_table, rsc_size); + if (ret != (int)rsc_size) { + metal_log(METAL_LOG_WARNING, + "load executable, failed to update rsc\r\n"); + } + rproc->rsc_table = rsc_table; + rproc->rsc_len = rsc_size; + rproc->rsc_io = *io; + metal_free_memory(lrsc_table); + } + + /* get entry point from the firmware */ + rproc->bootaddr = loader->get_entry(limg_info); + } +out: + if (img_info) + *img_info = limg_info; + else + loader->release(limg_info); + metal_mutex_release(&rproc->lock); + return 0; + +error1: + loader->release(limg_info); + metal_mutex_release(&rproc->lock); + return ret; +} + +unsigned int remoteproc_allocate_id(struct remoteproc *rproc, + unsigned int start, + unsigned int end) +{ + unsigned int notifyid = RSC_NOTIFY_ID_ANY; + + if (start == RSC_NOTIFY_ID_ANY) + start = 0; + if (end == RSC_NOTIFY_ID_ANY) + end = METAL_BITS_PER_ULONG; + if ((start < (8U * sizeof(rproc->bitmap))) && + (end <= (8U * sizeof(rproc->bitmap)))) { + notifyid = metal_bitmap_next_clear_bit(&rproc->bitmap, + start, end); + if (notifyid != end) + metal_bitmap_set_bit(&rproc->bitmap, notifyid); + else + notifyid = RSC_NOTIFY_ID_ANY; + } + return notifyid; +} + +static int remoteproc_virtio_notify(void *priv, uint32_t id) +{ + struct remoteproc *rproc = priv; + + if (rproc->ops->notify) + return rproc->ops->notify(rproc, id); + + return 0; +} + +struct virtio_device * +remoteproc_create_virtio(struct remoteproc *rproc, + int vdev_id, unsigned int role, + void (*rst_cb)(struct virtio_device *vdev)) +{ + char *rsc_table; + struct fw_rsc_vdev *vdev_rsc; + struct metal_io_region *vdev_rsc_io; + struct virtio_device *vdev; + struct remoteproc_virtio *rpvdev; + size_t vdev_rsc_offset; + unsigned int notifyid; + unsigned int num_vrings, i; + struct metal_list *node; + +#ifdef VIRTIO_DRIVER_ONLY + role = (role != VIRTIO_DEV_DRIVER) ? 0xFFFFFFFFUL : role; +#endif + +#ifdef VIRTIO_DEVICE_ONLY + role = (role != VIRTIO_DEV_DEVICE) ? 0xFFFFFFFFUL : role; +#endif + + if (!rproc || (role != VIRTIO_DEV_DEVICE && role != VIRTIO_DEV_DRIVER)) + return NULL; + + metal_assert(rproc); + metal_mutex_acquire(&rproc->lock); + rsc_table = rproc->rsc_table; + vdev_rsc_io = rproc->rsc_io; + vdev_rsc_offset = find_rsc(rsc_table, RSC_VDEV, vdev_id); + if (!vdev_rsc_offset) { + metal_mutex_release(&rproc->lock); + return NULL; + } + vdev_rsc = (struct fw_rsc_vdev *)(rsc_table + vdev_rsc_offset); + notifyid = vdev_rsc->notifyid; + /* Check if the virtio device is already created */ + metal_list_for_each(&rproc->vdevs, node) { + rpvdev = metal_container_of(node, struct remoteproc_virtio, + node); + if (rpvdev->vdev.notifyid == notifyid) { + metal_mutex_release(&rproc->lock); + return &rpvdev->vdev; + } + } + vdev = rproc_virtio_create_vdev(role, notifyid, + vdev_rsc, vdev_rsc_io, rproc, + remoteproc_virtio_notify, + rst_cb); + if (!vdev) { + metal_mutex_release(&rproc->lock); + return NULL; + } + + rproc_virtio_wait_remote_ready(vdev); + + rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); + metal_list_add_tail(&rproc->vdevs, &rpvdev->node); + num_vrings = vdev_rsc->num_of_vrings; + + /* set the notification id for vrings */ + for (i = 0; i < num_vrings; i++) { + struct fw_rsc_vdev_vring *vring_rsc; + metal_phys_addr_t da; + unsigned int num_descs, align; + struct metal_io_region *io; + void *va; + size_t size; + int ret; + + vring_rsc = &vdev_rsc->vring[i]; + notifyid = vring_rsc->notifyid; + da = vring_rsc->da; + num_descs = vring_rsc->num; + align = vring_rsc->align; + size = vring_size(num_descs, align); + va = remoteproc_mmap(rproc, NULL, &da, size, 0, &io); + if (!va) + goto err1; + ret = rproc_virtio_init_vring(vdev, i, notifyid, + va, io, num_descs, align); + if (ret) + goto err1; + } + metal_mutex_release(&rproc->lock); + return vdev; + +err1: + remoteproc_remove_virtio(rproc, vdev); + metal_mutex_release(&rproc->lock); + return NULL; +} + +void remoteproc_remove_virtio(struct remoteproc *rproc, + struct virtio_device *vdev) +{ + struct remoteproc_virtio *rpvdev; + + (void)rproc; + metal_assert(vdev); + + if (vdev) { + rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); + metal_list_del(&rpvdev->node); + rproc_virtio_remove_vdev(&rpvdev->vdev); + } +} + +int remoteproc_get_notification(struct remoteproc *rproc, uint32_t notifyid) +{ + struct remoteproc_virtio *rpvdev; + struct metal_list *node; + int ret; + + if (!rproc) + return 0; + + metal_list_for_each(&rproc->vdevs, node) { + rpvdev = metal_container_of(node, struct remoteproc_virtio, + node); + ret = rproc_virtio_notified(&rpvdev->vdev, notifyid); + if (ret) + return ret; + } + + return 0; +} diff --git a/libraries/openamp_arduino/src/remoteproc_virtio.c b/libraries/openamp_arduino/src/remoteproc_virtio.c index 82b99c477..7ef1064d8 100644 --- a/libraries/openamp_arduino/src/remoteproc_virtio.c +++ b/libraries/openamp_arduino/src/remoteproc_virtio.c @@ -6,54 +6,16 @@ * Copyright(c) 2011 Google, Inc. * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name Texas Instruments nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include +#include #include #include -static inline struct virtqueue *virtqueue_allocate(unsigned int num_desc_extra) -{ - struct virtqueue *vqs; - uint32_t vq_size = sizeof(struct virtqueue) + - num_desc_extra * sizeof(struct vq_desc_extra); - - vqs = (struct virtqueue *)metal_allocate_memory(vq_size); - - if (vqs) { - memset(vqs, 0x00, vq_size); - } - - return vqs; -} - static void rproc_virtio_virtqueue_notify(struct virtqueue *vq) { struct remoteproc_virtio *rpvdev; @@ -63,7 +25,7 @@ static void rproc_virtio_virtqueue_notify(struct virtqueue *vq) vdev = vq->vq_dev; rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); - metal_assert(vq_id <= vdev->vrings_num); + metal_assert(vq_id < vdev->vrings_num); vring_info = &vdev->vrings_info[vq_id]; rpvdev->notify(rpvdev->priv, vring_info->notifyid); } @@ -78,12 +40,13 @@ static unsigned char rproc_virtio_get_status(struct virtio_device *vdev) rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); vdev_rsc = rpvdev->vdev_rsc; io = rpvdev->vdev_rsc_io; + RSC_TABLE_INVALIDATE(vdev_rsc, sizeof(struct fw_rsc_vdev)); status = metal_io_read8(io, metal_io_virt_to_offset(io, &vdev_rsc->status)); return status; } -#ifndef VIRTIO_SLAVE_ONLY +#ifndef VIRTIO_DEVICE_ONLY static void rproc_virtio_set_status(struct virtio_device *vdev, unsigned char status) { @@ -97,11 +60,12 @@ static void rproc_virtio_set_status(struct virtio_device *vdev, metal_io_write8(io, metal_io_virt_to_offset(io, &vdev_rsc->status), status); - rpvdev->notify(rpvdev->priv, vdev->index); + RSC_TABLE_FLUSH(vdev_rsc, sizeof(struct fw_rsc_vdev)); + rpvdev->notify(rpvdev->priv, vdev->notifyid); } #endif -static uint32_t rproc_virtio_get_features(struct virtio_device *vdev) +static uint32_t rproc_virtio_get_dfeatures(struct virtio_device *vdev) { struct remoteproc_virtio *rpvdev; struct fw_rsc_vdev *vdev_rsc; @@ -111,14 +75,33 @@ static uint32_t rproc_virtio_get_features(struct virtio_device *vdev) rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); vdev_rsc = rpvdev->vdev_rsc; io = rpvdev->vdev_rsc_io; - /* TODO: shall we get features based on the role ? */ + RSC_TABLE_INVALIDATE(vdev_rsc, sizeof(struct fw_rsc_vdev)); features = metal_io_read32(io, metal_io_virt_to_offset(io, &vdev_rsc->dfeatures)); return features; } -#ifndef VIRTIO_SLAVE_ONLY +static uint32_t rproc_virtio_get_features(struct virtio_device *vdev) +{ + struct remoteproc_virtio *rpvdev; + struct fw_rsc_vdev *vdev_rsc; + struct metal_io_region *io; + uint32_t gfeatures; + uint32_t dfeatures; + + rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); + vdev_rsc = rpvdev->vdev_rsc; + io = rpvdev->vdev_rsc_io; + RSC_TABLE_INVALIDATE(vdev_rsc, sizeof(struct fw_rsc_vdev)); + gfeatures = metal_io_read32(io, + metal_io_virt_to_offset(io, &vdev_rsc->gfeatures)); + dfeatures = rproc_virtio_get_dfeatures(vdev); + + return dfeatures & gfeatures; +} + +#ifndef VIRTIO_DEVICE_ONLY static void rproc_virtio_set_features(struct virtio_device *vdev, uint32_t features) { @@ -129,64 +112,90 @@ static void rproc_virtio_set_features(struct virtio_device *vdev, rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); vdev_rsc = rpvdev->vdev_rsc; io = rpvdev->vdev_rsc_io; - /* TODO: shall we set features based on the role ? */ metal_io_write32(io, - metal_io_virt_to_offset(io, &vdev_rsc->dfeatures), + metal_io_virt_to_offset(io, &vdev_rsc->gfeatures), features); - rpvdev->notify(rpvdev->priv, vdev->index); + RSC_TABLE_FLUSH(vdev_rsc, sizeof(struct fw_rsc_vdev)); + rpvdev->notify(rpvdev->priv, vdev->notifyid); } -#endif static uint32_t rproc_virtio_negotiate_features(struct virtio_device *vdev, uint32_t features) { - (void)vdev; - (void)features; + uint32_t dfeatures = rproc_virtio_get_dfeatures(vdev); + + rproc_virtio_set_features(vdev, dfeatures & features); return 0; } +#endif static void rproc_virtio_read_config(struct virtio_device *vdev, uint32_t offset, void *dst, int length) { - (void)vdev; - (void)offset; - (void)dst; - (void)length; + struct remoteproc_virtio *rpvdev; + struct fw_rsc_vdev *vdev_rsc; + struct metal_io_region *io; + char *config; + + rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); + vdev_rsc = rpvdev->vdev_rsc; + config = (char *)(&vdev_rsc->vring[vdev->vrings_num]); + io = rpvdev->vdev_rsc_io; + + if (offset + length <= vdev_rsc->config_len) { + RSC_TABLE_INVALIDATE(config + offset, length); + metal_io_block_read(io, + metal_io_virt_to_offset(io, config + offset), + dst, length); + } } -#ifndef VIRTIO_SLAVE_ONLY +#ifndef VIRTIO_DEVICE_ONLY static void rproc_virtio_write_config(struct virtio_device *vdev, uint32_t offset, void *src, int length) { - (void)vdev; - (void)offset; - (void)src; - (void)length; + struct remoteproc_virtio *rpvdev; + struct fw_rsc_vdev *vdev_rsc; + struct metal_io_region *io; + char *config; + + rpvdev = metal_container_of(vdev, struct remoteproc_virtio, vdev); + vdev_rsc = rpvdev->vdev_rsc; + config = (char *)(&vdev_rsc->vring[vdev->vrings_num]); + io = rpvdev->vdev_rsc_io; + + if (offset + length <= vdev_rsc->config_len) { + metal_io_block_write(io, + metal_io_virt_to_offset(io, config + offset), + src, length); + RSC_TABLE_FLUSH(config + offset, length); + rpvdev->notify(rpvdev->priv, vdev->notifyid); + } } static void rproc_virtio_reset_device(struct virtio_device *vdev) { - if (vdev->role == VIRTIO_DEV_MASTER) + if (vdev->role == VIRTIO_DEV_DRIVER) rproc_virtio_set_status(vdev, VIRTIO_CONFIG_STATUS_NEEDS_RESET); } #endif -const struct virtio_dispatch remoteproc_virtio_dispatch_funcs = { - .get_status = rproc_virtio_get_status, +static const struct virtio_dispatch remoteproc_virtio_dispatch_funcs = { + .get_status = rproc_virtio_get_status, .get_features = rproc_virtio_get_features, .read_config = rproc_virtio_read_config, .notify = rproc_virtio_virtqueue_notify, - .negotiate_features = rproc_virtio_negotiate_features, -#ifndef VIRTIO_SLAVE_ONLY +#ifndef VIRTIO_DEVICE_ONLY /* * We suppose here that the vdev is in a shared memory so that can - * be access only by one core: the master. In this case salve core has + * be access only by one core: the host. In this case salve core has * only read access right. */ .set_status = rproc_virtio_set_status, .set_features = rproc_virtio_set_features, + .negotiate_features = rproc_virtio_negotiate_features, .write_config = rproc_virtio_write_config, .reset_device = rproc_virtio_reset_device, #endif @@ -207,9 +216,8 @@ rproc_virtio_create_vdev(unsigned int role, unsigned int notifyid, unsigned int i; rpvdev = metal_allocate_memory(sizeof(*rpvdev)); - if (!rpvdev) { + if (!rpvdev) return NULL; - } vrings_info = metal_allocate_memory(sizeof(*vrings_info) * num_vrings); if (!vrings_info) goto err0; @@ -219,21 +227,23 @@ rproc_virtio_create_vdev(unsigned int role, unsigned int notifyid, for (i = 0; i < num_vrings; i++) { struct virtqueue *vq; +#ifndef VIRTIO_DEVICE_ONLY struct fw_rsc_vdev_vring *vring_rsc; +#endif unsigned int num_extra_desc = 0; +#ifndef VIRTIO_DEVICE_ONLY vring_rsc = &vdev_rsc->vring[i]; - if (role == VIRTIO_DEV_MASTER) { + if (role == VIRTIO_DEV_DRIVER) { num_extra_desc = vring_rsc->num; } +#endif vq = virtqueue_allocate(num_extra_desc); if (!vq) goto err1; vrings_info[i].vq = vq; } - /* FIXME commended as seems not nedded, already stored in vdev */ - //rpvdev->notifyid = notifyid; rpvdev->notify = notify; rpvdev->priv = priv; vdev->vrings_info = vrings_info; @@ -243,12 +253,19 @@ rproc_virtio_create_vdev(unsigned int role, unsigned int notifyid, rpvdev->vdev_rsc = vdev_rsc; rpvdev->vdev_rsc_io = rsc_io; - vdev->index = notifyid; + vdev->notifyid = notifyid; vdev->role = role; vdev->reset_cb = rst_cb; vdev->vrings_num = num_vrings; vdev->func = &remoteproc_virtio_dispatch_funcs; - /* TODO: Shall we set features here ? */ + +#ifndef VIRTIO_DEVICE_ONLY + if (role == VIRTIO_DEV_DRIVER) { + uint32_t dfeatures = rproc_virtio_get_dfeatures(vdev); + /* Assume the virtio driver support all remote features */ + rproc_virtio_negotiate_features(vdev, dfeatures); + } +#endif return &rpvdev->vdev; @@ -278,7 +295,8 @@ void rproc_virtio_remove_vdev(struct virtio_device *vdev) if (vq) metal_free_memory(vq); } - metal_free_memory(vdev->vrings_info); + if (vdev->vrings_info) + metal_free_memory(vdev->vrings_info); metal_free_memory(rpvdev); } @@ -291,7 +309,7 @@ int rproc_virtio_init_vring(struct virtio_device *vdev, unsigned int index, unsigned int num_vrings; num_vrings = vdev->vrings_num; - if (index >= num_vrings) + if ((index >= num_vrings) || (num_descs > RPROC_MAX_VRING_DESC)) return -RPROC_EINVAL; vring_info = &vdev->vrings_info[index]; vring_info->io = io; @@ -310,9 +328,9 @@ int rproc_virtio_notified(struct virtio_device *vdev, uint32_t notifyid) struct virtqueue *vq; if (!vdev) - return -EINVAL; + return -RPROC_EINVAL; /* We do nothing for vdev notification in this implementation */ - if (vdev->index == notifyid) + if (vdev->notifyid == notifyid) return 0; num_vrings = vdev->vrings_num; for (i = 0; i < num_vrings; i++) { @@ -330,17 +348,19 @@ void rproc_virtio_wait_remote_ready(struct virtio_device *vdev) { uint8_t status; +#ifndef VIRTIO_DEVICE_ONLY /* - * No status available for slave. As Master has not to wait - * slave action, we can return. Behavior should be updated - * in future if a slave status is added. + * No status available for remote. As virtio driver has not to wait + * remote action, we can return. Behavior should be updated + * in future if a remote status is added. */ - if (vdev->role == VIRTIO_DEV_MASTER) + if (vdev->role == VIRTIO_DEV_DRIVER) return; - +#endif while (1) { status = rproc_virtio_get_status(vdev); if (status & VIRTIO_CONFIG_STATUS_DRIVER_OK) return; + metal_cpu_yield(); } } diff --git a/libraries/openamp_arduino/src/rpmsg.c b/libraries/openamp_arduino/src/rpmsg.c index 9268889e0..5a9237f47 100644 --- a/libraries/openamp_arduino/src/rpmsg.c +++ b/libraries/openamp_arduino/src/rpmsg.c @@ -9,19 +9,20 @@ #include #include -#include #include "rpmsg_internal.h" /** - * rpmsg_get_address + * @internal + * + * @brief rpmsg_get_address * * This function provides unique 32 bit address. * - * @param bitmap - bit map for addresses - * @param size - size of bitmap + * @param bitmap Bit map for addresses + * @param size Size of bitmap * - * return - a unique address + * @return A unique address */ static uint32_t rpmsg_get_address(unsigned long *bitmap, int size) { @@ -30,7 +31,7 @@ static uint32_t rpmsg_get_address(unsigned long *bitmap, int size) nextbit = metal_bitmap_next_clear_bit(bitmap, 0, size); if (nextbit < (uint32_t)size) { - addr = nextbit; + addr = RPMSG_RESERVED_ADDRESSES + nextbit; metal_bitmap_set_bit(bitmap, nextbit); } @@ -38,54 +39,57 @@ static uint32_t rpmsg_get_address(unsigned long *bitmap, int size) } /** - * rpmsg_release_address + * @internal * - * Frees the given address. + * @brief Frees the given address. * - * @param bitmap - bit map for addresses - * @param size - size of bitmap - * @param addr - address to free + * @param bitmap Bit map for addresses + * @param size Size of bitmap + * @param addr Address to free */ static void rpmsg_release_address(unsigned long *bitmap, int size, int addr) { - if (addr < size) + addr -= RPMSG_RESERVED_ADDRESSES; + if (addr >= 0 && addr < size) metal_bitmap_clear_bit(bitmap, addr); } /** - * rpmsg_is_address_set + * @internal * - * Checks whether address is used or free. + * @brief Checks whether address is used or free. * - * @param bitmap - bit map for addresses - * @param size - size of bitmap - * @param addr - address to free + * @param bitmap Bit map for addresses + * @param size Size of bitmap + * @param addr Address to free * - * return - TRUE/FALSE + * @return TRUE/FALSE */ static int rpmsg_is_address_set(unsigned long *bitmap, int size, int addr) { - if (addr < size) + addr -= RPMSG_RESERVED_ADDRESSES; + if (addr >= 0 && addr < size) return metal_bitmap_is_bit_set(bitmap, addr); else return RPMSG_ERR_PARAM; } /** - * rpmsg_set_address + * @internal * - * Marks the address as consumed. + * @brief Marks the address as consumed. * - * @param bitmap - bit map for addresses - * @param size - size of bitmap - * @param addr - address to free + * @param bitmap Bit map for addresses + * @param size Size of bitmap + * @param addr Address to free * - * return - none + * @return 0 on success, otherwise error code */ static int rpmsg_set_address(unsigned long *bitmap, int size, int addr) { - if (addr < size) { + addr -= RPMSG_RESERVED_ADDRESSES; + if (addr >= 0 && addr < size) { metal_bitmap_set_bit(bitmap, addr); return RPMSG_SUCCESS; } else { @@ -93,34 +97,20 @@ static int rpmsg_set_address(unsigned long *bitmap, int size, int addr) } } -/** - * This function sends rpmsg "message" to remote device. - * - * @param ept - pointer to end point - * @param src - source address of channel - * @param dst - destination address of channel - * @param data - data to transmit - * @param size - size of data - * @param wait - boolean, wait or not for buffer to become - * available - * - * @return - size of data sent or negative value for failure. - * - */ int rpmsg_send_offchannel_raw(struct rpmsg_endpoint *ept, uint32_t src, - uint32_t dst, const void *data, int size, + uint32_t dst, const void *data, int len, int wait) { struct rpmsg_device *rdev; - if (!ept || !ept->rdev || !data || dst == RPMSG_ADDR_ANY) + if (!ept || !ept->rdev || !data || dst == RPMSG_ADDR_ANY || len < 0) return RPMSG_ERR_PARAM; rdev = ept->rdev; if (rdev->ops.send_offchannel_raw) return rdev->ops.send_offchannel_raw(rdev, src, dst, data, - size, wait); + len, wait); return RPMSG_ERR_PARAM; } @@ -142,6 +132,80 @@ int rpmsg_send_ns_message(struct rpmsg_endpoint *ept, unsigned long flags) return RPMSG_SUCCESS; } +void rpmsg_hold_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf) +{ + struct rpmsg_device *rdev; + + if (!ept || !ept->rdev || !rxbuf) + return; + + rdev = ept->rdev; + + if (rdev->ops.hold_rx_buffer) + rdev->ops.hold_rx_buffer(rdev, rxbuf); +} + +void rpmsg_release_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf) +{ + struct rpmsg_device *rdev; + + if (!ept || !ept->rdev || !rxbuf) + return; + + rdev = ept->rdev; + + if (rdev->ops.release_rx_buffer) + rdev->ops.release_rx_buffer(rdev, rxbuf); +} + +int rpmsg_release_tx_buffer(struct rpmsg_endpoint *ept, void *buf) +{ + struct rpmsg_device *rdev; + + if (!ept || !ept->rdev || !buf) + return RPMSG_ERR_PARAM; + + rdev = ept->rdev; + + if (rdev->ops.release_tx_buffer) + return rdev->ops.release_tx_buffer(rdev, buf); + + return RPMSG_ERR_PERM; +} + +void *rpmsg_get_tx_payload_buffer(struct rpmsg_endpoint *ept, + uint32_t *len, int wait) +{ + struct rpmsg_device *rdev; + + if (!ept || !ept->rdev || !len) + return NULL; + + rdev = ept->rdev; + + if (rdev->ops.get_tx_payload_buffer) + return rdev->ops.get_tx_payload_buffer(rdev, len, wait); + + return NULL; +} + +int rpmsg_send_offchannel_nocopy(struct rpmsg_endpoint *ept, uint32_t src, + uint32_t dst, const void *data, int len) +{ + struct rpmsg_device *rdev; + + if (!ept || !ept->rdev || !data || dst == RPMSG_ADDR_ANY || len < 0) + return RPMSG_ERR_PARAM; + + rdev = ept->rdev; + + if (rdev->ops.send_offchannel_nocopy) + return rdev->ops.send_offchannel_nocopy(rdev, src, dst, + data, len); + + return RPMSG_ERR_PARAM; +} + struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rdev, const char *name, uint32_t addr, uint32_t dest_addr) @@ -156,19 +220,16 @@ struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rdev, /* try to get by local address only */ if (addr != RPMSG_ADDR_ANY && ept->addr == addr) return ept; - /* try to find match on local end remote address */ - if (addr == ept->addr && dest_addr == ept->dest_addr) - return ept; /* else use name service and destination address */ if (name) name_match = !strncmp(ept->name, name, sizeof(ept->name)); if (!name || !name_match) continue; - /* destination address is known, equal to ept remote address*/ + /* destination address is known, equal to ept remote address */ if (dest_addr != RPMSG_ADDR_ANY && ept->dest_addr == dest_addr) return ept; - /* ept is registered but not associated to remote ept*/ + /* ept is registered but not associated to remote ept */ if (addr == RPMSG_ADDR_ANY && ept->dest_addr == RPMSG_ADDR_ANY) return ept; } @@ -177,40 +238,51 @@ struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rdev, static void rpmsg_unregister_endpoint(struct rpmsg_endpoint *ept) { - struct rpmsg_device *rdev; - - if (!ept) - return; - - rdev = ept->rdev; + struct rpmsg_device *rdev = ept->rdev; + metal_mutex_acquire(&rdev->lock); if (ept->addr != RPMSG_ADDR_ANY) rpmsg_release_address(rdev->bitmap, RPMSG_ADDR_BMP_SIZE, ept->addr); metal_list_del(&ept->node); + ept->rdev = NULL; + metal_mutex_release(&rdev->lock); } -int rpmsg_register_endpoint(struct rpmsg_device *rdev, - struct rpmsg_endpoint *ept) +void rpmsg_register_endpoint(struct rpmsg_device *rdev, + struct rpmsg_endpoint *ept, + const char *name, + uint32_t src, uint32_t dest, + rpmsg_ept_cb cb, + rpmsg_ns_unbind_cb ns_unbind_cb) { + strncpy(ept->name, name ? name : "", sizeof(ept->name)); + ept->addr = src; + ept->dest_addr = dest; + ept->cb = cb; + ept->ns_unbind_cb = ns_unbind_cb; ept->rdev = rdev; - metal_list_add_tail(&rdev->endpoints, &ept->node); - return RPMSG_SUCCESS; } int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev, const char *name, uint32_t src, uint32_t dest, rpmsg_ept_cb cb, rpmsg_ns_unbind_cb unbind_cb) { - int status; + int status = RPMSG_SUCCESS; uint32_t addr = src; - if (!ept) + if (!ept || !rdev || !cb) return RPMSG_ERR_PARAM; metal_mutex_acquire(&rdev->lock); - if (src != RPMSG_ADDR_ANY) { + if (src == RPMSG_ADDR_ANY) { + addr = rpmsg_get_address(rdev->bitmap, RPMSG_ADDR_BMP_SIZE); + if (addr == RPMSG_ADDR_ANY) { + status = RPMSG_ERR_ADDR; + goto ret_status; + } + } else if (src >= RPMSG_RESERVED_ADDRESSES) { status = rpmsg_is_address_set(rdev->bitmap, RPMSG_ADDR_BMP_SIZE, src); if (!status) { @@ -218,54 +290,46 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev, rpmsg_set_address(rdev->bitmap, RPMSG_ADDR_BMP_SIZE, src); } else if (status > 0) { - status = RPMSG_SUCCESS; + status = RPMSG_ERR_ADDR; goto ret_status; } else { goto ret_status; } } else { - addr = rpmsg_get_address(rdev->bitmap, RPMSG_ADDR_BMP_SIZE); + /* Skip check the address duplication in 0-1023: + * 1.Trust the author of predefined service + * 2.Simplify the tracking implementation + */ } - rpmsg_init_ept(ept, name, addr, dest, cb, unbind_cb); - - status = rpmsg_register_endpoint(rdev, ept); - if (status < 0) - rpmsg_release_address(rdev->bitmap, RPMSG_ADDR_BMP_SIZE, addr); + rpmsg_register_endpoint(rdev, ept, name, addr, dest, cb, unbind_cb); + metal_mutex_release(&rdev->lock); - if (!status && ept->dest_addr == RPMSG_ADDR_ANY) { - /* Send NS announcement to remote processor */ - metal_mutex_release(&rdev->lock); + /* Send NS announcement to remote processor */ + if (ept->name[0] && rdev->support_ns && + ept->dest_addr == RPMSG_ADDR_ANY) status = rpmsg_send_ns_message(ept, RPMSG_NS_CREATE); - metal_mutex_acquire(&rdev->lock); - if (status) - rpmsg_unregister_endpoint(ept); - } + + if (status) + rpmsg_unregister_endpoint(ept); + return status; ret_status: metal_mutex_release(&rdev->lock); return status; } -/** - * rpmsg_destroy_ept - * - * This function deletes rpmsg endpoint and performs cleanup. - * - * @param ept - pointer to endpoint to destroy - * - */ void rpmsg_destroy_ept(struct rpmsg_endpoint *ept) { struct rpmsg_device *rdev; - if (!ept) + if (!ept || !ept->rdev) return; rdev = ept->rdev; - if (ept->addr != RPMSG_NS_EPT_ADDR) + + if (ept->name[0] && rdev->support_ns && + ept->addr >= RPMSG_RESERVED_ADDRESSES) (void)rpmsg_send_ns_message(ept, RPMSG_NS_DESTROY); - metal_mutex_acquire(&rdev->lock); rpmsg_unregister_endpoint(ept); - metal_mutex_release(&rdev->lock); } diff --git a/libraries/openamp_arduino/src/rpmsg_internal.h b/libraries/openamp_arduino/src/rpmsg_internal.h index 535a83545..6721ecf88 100644 --- a/libraries/openamp_arduino/src/rpmsg_internal.h +++ b/libraries/openamp_arduino/src/rpmsg_internal.h @@ -1,105 +1,116 @@ -/* - * SPDX-License-Identifier: BSD-3-Clause - * - * $FreeBSD$ - */ - -#ifndef _RPMSG_INTERNAL_H_ -#define _RPMSG_INTERNAL_H_ - -#include -#include - -#if defined __cplusplus -extern "C" { -#endif - -#ifdef RPMSG_DEBUG -#define RPMSG_ASSERT(_exp, _msg) do { \ - if (!(_exp)) { \ - openamp_print("FATAL: %s - _msg", __func__); \ - while (1) { \ - ; \ - } \ - } \ - } while (0) -#else -#define RPMSG_ASSERT(_exp, _msg) do { \ - if (!(_exp)) \ - while (1) { \ - ; \ - } \ - } while (0) -#endif - -#define RPMSG_LOCATE_DATA(p) ((unsigned char *)(p) + sizeof(struct rpmsg_hdr)) -/** - * enum rpmsg_ns_flags - dynamic name service announcement flags - * - * @RPMSG_NS_CREATE: a new remote service was just created - * @RPMSG_NS_DESTROY: a known remote service was just destroyed - * @RPMSG_NS_CREATE_WITH_ACK: a new remote service was just created waiting - * acknowledgment. - */ -enum rpmsg_ns_flags { - RPMSG_NS_CREATE = 0, - RPMSG_NS_DESTROY = 1, -}; - -/** - * struct rpmsg_hdr - common header for all rpmsg messages - * @src: source address - * @dst: destination address - * @reserved: reserved for future use - * @len: length of payload (in bytes) - * @flags: message flags - * - * Every message sent(/received) on the rpmsg bus begins with this header. - */ -OPENAMP_PACKED_BEGIN -struct rpmsg_hdr { - uint32_t src; - uint32_t dst; - uint32_t reserved; - uint16_t len; - uint16_t flags; -} OPENAMP_PACKED_END; - -/** - * struct rpmsg_ns_msg - dynamic name service announcement message - * @name: name of remote service that is published - * @addr: address of remote service that is published - * @flags: indicates whether service is created or destroyed - * - * This message is sent across to publish a new service, or announce - * about its removal. When we receive these messages, an appropriate - * rpmsg channel (i.e device) is created/destroyed. In turn, the ->probe() - * or ->remove() handler of the appropriate rpmsg driver will be invoked - * (if/as-soon-as one is registered). - */ -OPENAMP_PACKED_BEGIN -struct rpmsg_ns_msg { - char name[RPMSG_NAME_SIZE]; - uint32_t addr; - uint32_t flags; -} OPENAMP_PACKED_END; - -int rpmsg_send_ns_message(struct rpmsg_endpoint *ept, unsigned long flags); - -struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rvdev, - const char *name, uint32_t addr, - uint32_t dest_addr); -int rpmsg_register_endpoint(struct rpmsg_device *rdev, - struct rpmsg_endpoint *ept); - -static inline struct rpmsg_endpoint * -rpmsg_get_ept_from_addr(struct rpmsg_device *rdev, uint32_t addr) -{ - return rpmsg_get_endpoint(rdev, NULL, addr, RPMSG_ADDR_ANY); -} - -#if defined __cplusplus -} -#endif - -#endif /* _RPMSG_INTERNAL_H_ */ +/* + * SPDX-License-Identifier: BSD-3-Clause + * + * $FreeBSD$ + */ + +#ifndef _RPMSG_INTERNAL_H_ +#define _RPMSG_INTERNAL_H_ + +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +#ifdef RPMSG_DEBUG +#include + +#define RPMSG_ASSERT(_exp, _msg) do { \ + if (!(_exp)) { \ + metal_log(METAL_LOG_EMERGENCY, \ + "FATAL: %s - "_msg, __func__); \ + metal_assert(_exp); \ + } \ + } while (0) +#else +#define RPMSG_ASSERT(_exp, _msg) metal_assert(_exp) +#endif + +#define RPMSG_BUF_HELD (1U << 31) /* Flag to suggest to hold the buffer */ + +#define RPMSG_LOCATE_HDR(p) \ + ((struct rpmsg_hdr *)((unsigned char *)(p) - sizeof(struct rpmsg_hdr))) +#define RPMSG_LOCATE_DATA(p) ((unsigned char *)(p) + sizeof(struct rpmsg_hdr)) + +/** + * enum rpmsg_ns_flags - dynamic name service announcement flags + * + * @RPMSG_NS_CREATE: a new remote service was just created + * @RPMSG_NS_DESTROY: a known remote service was just destroyed + * @RPMSG_NS_CREATE_WITH_ACK: a new remote service was just created waiting + * acknowledgment. + */ +enum rpmsg_ns_flags { + RPMSG_NS_CREATE = 0, + RPMSG_NS_DESTROY = 1, +}; + +/** + * @brief Common header for all RPMsg messages + * + * Every message sent(/received) on the RPMsg bus begins with this header. + */ +METAL_PACKED_BEGIN +struct rpmsg_hdr { + /** Source address */ + uint32_t src; + + /** Destination address */ + uint32_t dst; + + /** Reserved for future use */ + uint32_t reserved; + + /** Length of payload (in bytes) */ + uint16_t len; + + /** Message flags */ + uint16_t flags; +} METAL_PACKED_END; + +/** + * @brief Dynamic name service announcement message + * + * This message is sent across to publish a new service, or announce + * about its removal. When we receive these messages, an appropriate + * RPMsg channel (i.e device) is created/destroyed. In turn, the ->probe() + * or ->remove() handler of the appropriate RPMsg driver will be invoked + * (if/as-soon-as one is registered). + */ +METAL_PACKED_BEGIN +struct rpmsg_ns_msg { + /** Name of the remote service that is being published */ + char name[RPMSG_NAME_SIZE]; + + /** Endpoint address of the remote service that is being published */ + uint32_t addr; + + /** Indicates whether service is created or destroyed */ + uint32_t flags; +} METAL_PACKED_END; + +int rpmsg_send_ns_message(struct rpmsg_endpoint *ept, unsigned long flags); + +struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rvdev, + const char *name, uint32_t addr, + uint32_t dest_addr); +void rpmsg_register_endpoint(struct rpmsg_device *rdev, + struct rpmsg_endpoint *ept, + const char *name, + uint32_t src, uint32_t dest, + rpmsg_ept_cb cb, + rpmsg_ns_unbind_cb ns_unbind_cb); + +static inline struct rpmsg_endpoint * +rpmsg_get_ept_from_addr(struct rpmsg_device *rdev, uint32_t addr) +{ + return rpmsg_get_endpoint(rdev, NULL, addr, RPMSG_ADDR_ANY); +} + +#if defined __cplusplus +} +#endif + +#endif /* _RPMSG_INTERNAL_H_ */ diff --git a/libraries/openamp_arduino/src/rpmsg_virtio.c b/libraries/openamp_arduino/src/rpmsg_virtio.c index 207edc3ed..ea4cc0d9e 100644 --- a/libraries/openamp_arduino/src/rpmsg_virtio.c +++ b/libraries/openamp_arduino/src/rpmsg_virtio.c @@ -3,12 +3,12 @@ * All rights reserved. * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. * Copyright (c) 2018 Linaro, Inc. All rights reserved. + * Copyright (c) 2021 Nordic Semiconductor ASA * * SPDX-License-Identifier: BSD-3-Clause */ #include -#include #include #include #include @@ -16,62 +16,86 @@ #include "rpmsg_internal.h" -#define RPMSG_NUM_VRINGS (2) +#define RPMSG_NUM_VRINGS 2 -/* Total tick count for 15secs - 1msec tick. */ -#define RPMSG_TICK_COUNT 15000 +/* Total tick count for 15secs - 1usec tick. */ +#define RPMSG_TICK_COUNT 15000000 -/* Time to wait - In multiple of 10 msecs. */ -#define RPMSG_TICKS_PER_INTERVAL 10 +/* Time to wait - In multiple of 1 msecs. */ +#define RPMSG_TICKS_PER_INTERVAL 1000 -#define WORD_SIZE sizeof(unsigned long) -#define WORD_ALIGN(a) ((((a) & (WORD_SIZE - 1)) != 0) ? \ - (((a) & (~(WORD_SIZE - 1))) + WORD_SIZE) : (a)) +/** + * struct vbuff_reclaimer_t - vring buffer recycler + * + * This structure is used by the rpmsg virtio to store unused virtio buffer, as the + * virtqueue structure has been already updated and memory allocated. + * + * @node: node in reclaimer list. + * @idx: virtio descriptor index containing the buffer information. + */ +struct vbuff_reclaimer_t { + struct metal_list node; + uint16_t idx; +}; + +/* Default configuration */ +#ifndef VIRTIO_DEVICE_ONLY +#define RPMSG_VIRTIO_DEFAULT_CONFIG \ + (&(const struct rpmsg_virtio_config) { \ + .h2r_buf_size = RPMSG_BUFFER_SIZE, \ + .r2h_buf_size = RPMSG_BUFFER_SIZE, \ + .split_shpool = false, \ + }) +#else +#define RPMSG_VIRTIO_DEFAULT_CONFIG NULL +#endif -#ifndef VIRTIO_SLAVE_ONLY +#ifndef VIRTIO_DEVICE_ONLY metal_weak void * rpmsg_virtio_shm_pool_get_buffer(struct rpmsg_virtio_shm_pool *shpool, size_t size) { void *buffer; - if (shpool->avail < size) + if (!shpool || size == 0 || shpool->avail < size) return NULL; - buffer = (void *)((char *)shpool->base + shpool->size - shpool->avail); + buffer = (char *)shpool->base + shpool->size - shpool->avail; shpool->avail -= size; return buffer; } -#endif /*!VIRTIO_SLAVE_ONLY*/ +#endif /*!VIRTIO_DEVICE_ONLY*/ void rpmsg_virtio_init_shm_pool(struct rpmsg_virtio_shm_pool *shpool, void *shb, size_t size) { - if (!shpool) + if (!shpool || !shb || size == 0) return; shpool->base = shb; - shpool->size = WORD_ALIGN(size); - shpool->avail = WORD_ALIGN(size); + shpool->size = size; + shpool->avail = size; } /** - * rpmsg_virtio_return_buffer + * @internal * - * Places the used buffer back on the virtqueue. - * - * @param rvdev - pointer to remote core - * @param buffer - buffer pointer - * @param len - buffer length - * @param idx - buffer index + * @brief Places the used buffer back on the virtqueue. * + * @param rvdev Pointer to remote core + * @param buffer Buffer pointer + * @param len Buffer length + * @param idx Buffer index */ static void rpmsg_virtio_return_buffer(struct rpmsg_virtio_device *rvdev, - void *buffer, unsigned long len, - unsigned short idx) + void *buffer, uint32_t len, + uint16_t idx) { unsigned int role = rpmsg_virtio_get_role(rvdev); -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) { + + BUFFER_INVALIDATE(buffer, len); + +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) { struct virtqueue_buf vqbuf; (void)idx; @@ -80,140 +104,151 @@ static void rpmsg_virtio_return_buffer(struct rpmsg_virtio_device *rvdev, vqbuf.len = len; virtqueue_add_buffer(rvdev->rvq, &vqbuf, 0, 1, buffer); } -#endif /*VIRTIO_SLAVE_ONLY*/ +#endif /*VIRTIO_DEVICE_ONLY*/ -#ifndef VIRTIO_MASTER_ONLY +#ifndef VIRTIO_DRIVER_ONLY if (role == RPMSG_REMOTE) { (void)buffer; virtqueue_add_consumed_buffer(rvdev->rvq, idx, len); } -#endif /*VIRTIO_MASTER_ONLY*/ +#endif /*VIRTIO_DRIVER_ONLY*/ } /** - * rpmsg_virtio_enqueue_buffer + * @internal * - * Places buffer on the virtqueue for consumption by the other side. + * @brief Places buffer on the virtqueue for consumption by the other side. * - * @param rvdev - pointer to rpmsg virtio - * @param buffer - buffer pointer - * @param len - buffer length - * @param idx - buffer index + * @param rvdev Pointer to rpmsg virtio + * @param buffer Buffer pointer + * @param len Buffer length + * @param idx Buffer index * - * @return - status of function execution + * @return Status of function execution */ static int rpmsg_virtio_enqueue_buffer(struct rpmsg_virtio_device *rvdev, - void *buffer, unsigned long len, - unsigned short idx) + void *buffer, uint32_t len, + uint16_t idx) { unsigned int role = rpmsg_virtio_get_role(rvdev); -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) { + + BUFFER_FLUSH(buffer, len); + +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) { struct virtqueue_buf vqbuf; (void)idx; /* Initialize buffer node */ vqbuf.buf = buffer; vqbuf.len = len; - return virtqueue_add_buffer(rvdev->svq, &vqbuf, 0, 1, buffer); + return virtqueue_add_buffer(rvdev->svq, &vqbuf, 1, 0, buffer); } -#endif /*!VIRTIO_SLAVE_ONLY*/ +#endif /*!VIRTIO_DEVICE_ONLY*/ -#ifndef VIRTIO_MASTER_ONLY +#ifndef VIRTIO_DRIVER_ONLY if (role == RPMSG_REMOTE) { (void)buffer; return virtqueue_add_consumed_buffer(rvdev->svq, idx, len); } -#endif /*!VIRTIO_MASTER_ONLY*/ +#endif /*!VIRTIO_DRIVER_ONLY*/ return 0; } /** - * rpmsg_virtio_get_tx_buffer + * @internal * - * Provides buffer to transmit messages. + * @brief Provides buffer to transmit messages. * - * @param rvdev - pointer to rpmsg device - * @param len - length of returned buffer - * @param idx - buffer index + * @param rvdev Pointer to rpmsg device + * @param len Length of returned buffer + * @param idx Buffer index * - * return - pointer to buffer. + * @return Pointer to buffer. */ static void *rpmsg_virtio_get_tx_buffer(struct rpmsg_virtio_device *rvdev, - unsigned long *len, - unsigned short *idx) + uint32_t *len, uint16_t *idx) { unsigned int role = rpmsg_virtio_get_role(rvdev); + struct metal_list *node; + struct vbuff_reclaimer_t *r_desc; void *data = NULL; -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) { - data = virtqueue_get_buffer(rvdev->svq, (uint32_t *)len, idx); - if (data == NULL) { + /* Try first to recycle a buffer that has been freed without been used */ + node = metal_list_first(&rvdev->reclaimer); + if (node) { + r_desc = metal_container_of(node, struct vbuff_reclaimer_t, node); + metal_list_del(node); + data = r_desc; + +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) + *len = rvdev->config.h2r_buf_size; +#endif /*!VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (role == RPMSG_REMOTE) { + *idx = r_desc->idx; + *len = virtqueue_get_buffer_length(rvdev->svq, *idx); + } +#endif /*!VIRTIO_DRIVER_ONLY*/ +#ifndef VIRTIO_DEVICE_ONLY + } else if (role == RPMSG_HOST) { + data = virtqueue_get_buffer(rvdev->svq, len, idx); + if (!data && rvdev->svq->vq_free_cnt) { data = rpmsg_virtio_shm_pool_get_buffer(rvdev->shpool, - RPMSG_BUFFER_SIZE); - *len = RPMSG_BUFFER_SIZE; + rvdev->config.h2r_buf_size); + *len = rvdev->config.h2r_buf_size; + *idx = 0; } +#endif /*!VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + } else if (role == RPMSG_REMOTE) { + data = virtqueue_get_available_buffer(rvdev->svq, idx, len); +#endif /*!VIRTIO_DRIVER_ONLY*/ } -#endif /*!VIRTIO_SLAVE_ONLY*/ - -#ifndef VIRTIO_MASTER_ONLY - if (role == RPMSG_REMOTE) { - data = virtqueue_get_available_buffer(rvdev->svq, idx, - (uint32_t *)len); - } -#endif /*!VIRTIO_MASTER_ONLY*/ return data; } /** - * rpmsg_virtio_get_rx_buffer + * @internal * - * Retrieves the received buffer from the virtqueue. + * @brief Retrieves the received buffer from the virtqueue. * - * @param rvdev - pointer to rpmsg device - * @param len - size of received buffer - * @param idx - index of buffer - * - * @return - pointer to received buffer + * @param rvdev Pointer to rpmsg device + * @param len Size of received buffer + * @param idx Index of buffer * + * @return Pointer to received buffer */ static void *rpmsg_virtio_get_rx_buffer(struct rpmsg_virtio_device *rvdev, - unsigned long *len, - unsigned short *idx) + uint32_t *len, uint16_t *idx) { unsigned int role = rpmsg_virtio_get_role(rvdev); void *data = NULL; -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) { - data = virtqueue_get_buffer(rvdev->rvq, (uint32_t *)len, idx); +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) { + data = virtqueue_get_buffer(rvdev->rvq, len, idx); } -#endif /*!VIRTIO_SLAVE_ONLY*/ +#endif /*!VIRTIO_DEVICE_ONLY*/ -#ifndef VIRTIO_MASTER_ONLY +#ifndef VIRTIO_DRIVER_ONLY if (role == RPMSG_REMOTE) { data = - virtqueue_get_available_buffer(rvdev->rvq, idx, - (uint32_t *)len); + virtqueue_get_available_buffer(rvdev->rvq, idx, len); } -#endif /*!VIRTIO_MASTER_ONLY*/ +#endif /*!VIRTIO_DRIVER_ONLY*/ - if (data) { - /* FIX ME: library should not worry about if it needs - * to flush/invalidate cache, it is shared memory. - * The shared memory should be mapped properly before - * using it. - */ - metal_cache_invalidate(data, (unsigned int)(*len)); - } + /* Invalidate the buffer before returning it */ + if (data) + BUFFER_INVALIDATE(data, *len); return data; } -#ifndef VIRTIO_MASTER_ONLY -/** +#ifndef VIRTIO_DRIVER_ONLY +/* * check if the remote is ready to start RPMsg communication */ static int rpmsg_virtio_wait_remote_ready(struct rpmsg_virtio_device *rvdev) @@ -232,87 +267,102 @@ static int rpmsg_virtio_wait_remote_ready(struct rpmsg_virtio_device *rvdev) /* TODO: clarify metal_cpu_yield usage*/ metal_cpu_yield(); } - - return false; } -#endif /*!VIRTIO_MASTER_ONLY*/ +#endif /*!VIRTIO_DRIVER_ONLY*/ /** - * _rpmsg_virtio_get_buffer_size - * - * Returns buffer size available for sending messages. + * @internal * - * @param channel - pointer to rpmsg channel + * @brief Returns buffer size available for sending messages. * - * @return - buffer size + * @param rvdev Pointer to rpmsg device * + * @return Buffer size */ static int _rpmsg_virtio_get_buffer_size(struct rpmsg_virtio_device *rvdev) { unsigned int role = rpmsg_virtio_get_role(rvdev); int length = 0; -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) { +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) { /* - * If device role is Remote then buffers are provided by us - * (RPMSG Master), so just provide the macro. + * If device role is host then buffers are provided by us, + * so just provide the macro. */ - length = RPMSG_BUFFER_SIZE - sizeof(struct rpmsg_hdr); + length = rvdev->config.h2r_buf_size - sizeof(struct rpmsg_hdr); } -#endif /*!VIRTIO_SLAVE_ONLY*/ +#endif /*!VIRTIO_DEVICE_ONLY*/ -#ifndef VIRTIO_MASTER_ONLY +#ifndef VIRTIO_DRIVER_ONLY if (role == RPMSG_REMOTE) { /* - * If other core is Master then buffers are provided by it, + * If other core is host then buffers are provided by it, * so get the buffer size from the virtqueue. */ length = (int)virtqueue_get_desc_size(rvdev->svq) - sizeof(struct rpmsg_hdr); } -#endif /*!VIRTIO_MASTER_ONLY*/ +#endif /*!VIRTIO_DRIVER_ONLY*/ + + if (length <= 0) { + length = RPMSG_ERR_NO_BUFF; + } return length; } -/** - * This function sends rpmsg "message" to remote device. - * - * @param rdev - pointer to rpmsg device - * @param src - source address of channel - * @param dst - destination address of channel - * @param data - data to transmit - * @param size - size of data - * @param wait - boolean, wait or not for buffer to become - * available - * - * @return - size of data sent or negative value for failure. - * - */ -static int rpmsg_virtio_send_offchannel_raw(struct rpmsg_device *rdev, - uint32_t src, uint32_t dst, - const void *data, - int size, int wait) +static void rpmsg_virtio_hold_rx_buffer(struct rpmsg_device *rdev, void *rxbuf) +{ + struct rpmsg_hdr *rp_hdr; + + (void)rdev; + + rp_hdr = RPMSG_LOCATE_HDR(rxbuf); + + /* Set held status to keep buffer */ + rp_hdr->reserved |= RPMSG_BUF_HELD; +} + +static void rpmsg_virtio_release_rx_buffer(struct rpmsg_device *rdev, + void *rxbuf) { struct rpmsg_virtio_device *rvdev; - struct rpmsg_hdr rp_hdr; - void *buffer = NULL; - unsigned short idx; - int tick_count = 0; - unsigned long buff_len; + struct rpmsg_hdr *rp_hdr; + uint16_t idx; + uint32_t len; + + rvdev = metal_container_of(rdev, struct rpmsg_virtio_device, rdev); + rp_hdr = RPMSG_LOCATE_HDR(rxbuf); + /* The reserved field contains buffer index */ + idx = (uint16_t)(rp_hdr->reserved & ~RPMSG_BUF_HELD); + + metal_mutex_acquire(&rdev->lock); + /* Return buffer on virtqueue. */ + len = virtqueue_get_buffer_length(rvdev->rvq, idx); + rpmsg_virtio_return_buffer(rvdev, rp_hdr, len, idx); + /* Tell peer we return some rx buffers */ + virtqueue_kick(rvdev->rvq); + metal_mutex_release(&rdev->lock); +} + +static void *rpmsg_virtio_get_tx_payload_buffer(struct rpmsg_device *rdev, + uint32_t *len, int wait) +{ + struct rpmsg_virtio_device *rvdev; + struct rpmsg_hdr *rp_hdr; + uint16_t idx; + int tick_count; int status; - struct metal_io_region *io; /* Get the associated remote device for channel. */ rvdev = metal_container_of(rdev, struct rpmsg_virtio_device, rdev); - status = rpmsg_virtio_get_status(rvdev); /* Validate device state */ - if (!(status & VIRTIO_CONFIG_STATUS_DRIVER_OK)) { - return RPMSG_ERR_DEV_STATE; - } + status = rpmsg_virtio_get_status(rvdev); + if (!(status & VIRTIO_CONFIG_STATUS_DRIVER_OK)) + return NULL; if (wait) tick_count = RPMSG_TICK_COUNT / RPMSG_TICKS_PER_INTERVAL; @@ -320,63 +370,157 @@ static int rpmsg_virtio_send_offchannel_raw(struct rpmsg_device *rdev, tick_count = 0; while (1) { - int avail_size; - /* Lock the device to enable exclusive access to virtqueues */ metal_mutex_acquire(&rdev->lock); - avail_size = _rpmsg_virtio_get_buffer_size(rvdev); - if (size <= avail_size) - buffer = rpmsg_virtio_get_tx_buffer(rvdev, &buff_len, - &idx); + rp_hdr = rpmsg_virtio_get_tx_buffer(rvdev, len, &idx); metal_mutex_release(&rdev->lock); - if (buffer || !tick_count) + if (rp_hdr || !tick_count) break; - if (avail_size != 0) - return RPMSG_ERR_BUFF_SIZE; metal_sleep_usec(RPMSG_TICKS_PER_INTERVAL); tick_count--; } - if (!buffer) - return RPMSG_ERR_NO_BUFF; + + if (!rp_hdr) + return NULL; + + /* Store the index into the reserved field to be used when sending */ + rp_hdr->reserved = idx; + + /* Actual data buffer size is vring buffer size minus header length */ + *len -= sizeof(struct rpmsg_hdr); + return RPMSG_LOCATE_DATA(rp_hdr); +} + +static int rpmsg_virtio_send_offchannel_nocopy(struct rpmsg_device *rdev, + uint32_t src, uint32_t dst, + const void *data, int len) +{ + struct rpmsg_virtio_device *rvdev; + struct metal_io_region *io; + struct rpmsg_hdr rp_hdr; + struct rpmsg_hdr *hdr; + uint32_t buff_len; + uint16_t idx; + int status; + + /* Get the associated remote device for channel. */ + rvdev = metal_container_of(rdev, struct rpmsg_virtio_device, rdev); + + hdr = RPMSG_LOCATE_HDR(data); + /* The reserved field contains buffer index */ + idx = hdr->reserved; /* Initialize RPMSG header. */ rp_hdr.dst = dst; rp_hdr.src = src; - rp_hdr.len = size; + rp_hdr.len = len; rp_hdr.reserved = 0; + rp_hdr.flags = 0; /* Copy data to rpmsg buffer. */ io = rvdev->shbuf_io; - status = metal_io_block_write(io, metal_io_virt_to_offset(io, buffer), + status = metal_io_block_write(io, metal_io_virt_to_offset(io, hdr), &rp_hdr, sizeof(rp_hdr)); - RPMSG_ASSERT(status == sizeof(rp_hdr), "failed to write header\n"); + RPMSG_ASSERT(status == sizeof(rp_hdr), "failed to write header\r\n"); - status = metal_io_block_write(io, - metal_io_virt_to_offset(io, - RPMSG_LOCATE_DATA(buffer)), - data, size); - RPMSG_ASSERT(status == size, "failed to write buffer\n"); metal_mutex_acquire(&rdev->lock); +#ifndef VIRTIO_DEVICE_ONLY + if (rpmsg_virtio_get_role(rvdev) == RPMSG_HOST) + buff_len = rvdev->config.h2r_buf_size; + else +#endif /*!VIRTIO_DEVICE_ONLY*/ + buff_len = virtqueue_get_buffer_length(rvdev->svq, idx); + /* Enqueue buffer on virtqueue. */ - status = rpmsg_virtio_enqueue_buffer(rvdev, buffer, buff_len, idx); - RPMSG_ASSERT(status == VQUEUE_SUCCESS, "failed to enqueue buffer\n"); + status = rpmsg_virtio_enqueue_buffer(rvdev, hdr, buff_len, idx); + RPMSG_ASSERT(status == VQUEUE_SUCCESS, "failed to enqueue buffer\r\n"); /* Let the other side know that there is a job to process. */ virtqueue_kick(rvdev->svq); metal_mutex_release(&rdev->lock); - return size; + return len; +} + +static int rpmsg_virtio_release_tx_buffer(struct rpmsg_device *rdev, void *txbuf) +{ + struct rpmsg_virtio_device *rvdev; + struct rpmsg_hdr *rp_hdr = RPMSG_LOCATE_HDR(txbuf); + void *vbuff = rp_hdr; /* only used to avoid warning on the cast of a packed structure */ + struct vbuff_reclaimer_t *r_desc = (struct vbuff_reclaimer_t *)vbuff; + uint16_t idx; + + /* + * Reuse the RPMsg buffer to temporary store the vbuff_reclaimer_t structure. + * Stores the index locally before overwriting the RPMsg header. + */ + idx = rp_hdr->reserved; + + rvdev = metal_container_of(rdev, struct rpmsg_virtio_device, rdev); + + metal_mutex_acquire(&rdev->lock); + + r_desc->idx = idx; + metal_list_add_tail(&rvdev->reclaimer, &r_desc->node); + + metal_mutex_release(&rdev->lock); + + return RPMSG_SUCCESS; } /** - * rpmsg_virtio_tx_callback + * @internal * - * Tx callback function. + * @brief This function sends rpmsg "message" to remote device. + * + * @param rdev Pointer to rpmsg device + * @param src Source address of channel + * @param dst Destination address of channel + * @param data Data to transmit + * @param len Size of data + * @param wait Boolean, wait or not for buffer to become + * available + * + * @return Size of data sent or negative value for failure. + */ +static int rpmsg_virtio_send_offchannel_raw(struct rpmsg_device *rdev, + uint32_t src, uint32_t dst, + const void *data, + int len, int wait) +{ + struct rpmsg_virtio_device *rvdev; + struct metal_io_region *io; + uint32_t buff_len; + void *buffer; + int status; + + /* Get the associated remote device for channel. */ + rvdev = metal_container_of(rdev, struct rpmsg_virtio_device, rdev); + + /* Get the payload buffer. */ + buffer = rpmsg_virtio_get_tx_payload_buffer(rdev, &buff_len, wait); + if (!buffer) + return RPMSG_ERR_NO_BUFF; + + /* Copy data to rpmsg buffer. */ + if (len > (int)buff_len) + len = buff_len; + io = rvdev->shbuf_io; + status = metal_io_block_write(io, metal_io_virt_to_offset(io, buffer), + data, len); + RPMSG_ASSERT(status == len, "failed to write buffer\r\n"); + + return rpmsg_virtio_send_offchannel_nocopy(rdev, src, dst, buffer, len); +} + +/** + * @internal * - * @param vq - pointer to virtqueue on which Tx is has been - * completed. + * @brief Tx callback function. * + * @param vq Pointer to virtqueue on which Tx is has been + * completed. */ static void rpmsg_virtio_tx_callback(struct virtqueue *vq) { @@ -384,12 +528,11 @@ static void rpmsg_virtio_tx_callback(struct virtqueue *vq) } /** - * rpmsg_virtio_rx_callback - * - * Rx callback function. + * @internal * - * @param vq - pointer to virtqueue on which messages is received + * @brief Rx callback function. * + * @param vq Pointer to virtqueue on which messages is received */ static void rpmsg_virtio_rx_callback(struct virtqueue *vq) { @@ -398,73 +541,71 @@ static void rpmsg_virtio_rx_callback(struct virtqueue *vq) struct rpmsg_device *rdev = &rvdev->rdev; struct rpmsg_endpoint *ept; struct rpmsg_hdr *rp_hdr; - unsigned long len; - unsigned short idx; + uint32_t len; + uint16_t idx; int status; metal_mutex_acquire(&rdev->lock); /* Process the received data from remote node */ - rp_hdr = (struct rpmsg_hdr *)rpmsg_virtio_get_rx_buffer(rvdev, - &len, &idx); + rp_hdr = rpmsg_virtio_get_rx_buffer(rvdev, &len, &idx); metal_mutex_release(&rdev->lock); while (rp_hdr) { + rp_hdr->reserved = idx; + /* Get the channel node from the remote device channels list. */ metal_mutex_acquire(&rdev->lock); ept = rpmsg_get_ept_from_addr(rdev, rp_hdr->dst); metal_mutex_release(&rdev->lock); - if (!ept) - /* Fatal error no endpoint for the given dst addr. */ - return; + if (ept) { + if (ept->dest_addr == RPMSG_ADDR_ANY) { + /* + * First message received from the remote side, + * update channel destination address + */ + ept->dest_addr = rp_hdr->src; + } + status = ept->cb(ept, RPMSG_LOCATE_DATA(rp_hdr), + rp_hdr->len, rp_hdr->src, ept->priv); - if (ept->dest_addr == RPMSG_ADDR_ANY) { - /* - * First message received from the remote side, - * update channel destination address - */ - ept->dest_addr = rp_hdr->src; + RPMSG_ASSERT(status >= 0, + "unexpected callback status\r\n"); } - status = ept->cb(ept, (void *)RPMSG_LOCATE_DATA(rp_hdr), - rp_hdr->len, ept->addr, ept->priv); - RPMSG_ASSERT(status == RPMSG_SUCCESS, - "unexpected callback status\n"); metal_mutex_acquire(&rdev->lock); - /* Return used buffers. */ - rpmsg_virtio_return_buffer(rvdev, rp_hdr, len, idx); + /* Check whether callback wants to hold buffer */ + if (!(rp_hdr->reserved & RPMSG_BUF_HELD)) { + /* No, return used buffers. */ + rpmsg_virtio_return_buffer(rvdev, rp_hdr, len, idx); + } - rp_hdr = (struct rpmsg_hdr *) - rpmsg_virtio_get_rx_buffer(rvdev, &len, &idx); + rp_hdr = rpmsg_virtio_get_rx_buffer(rvdev, &len, &idx); + if (!rp_hdr) { + /* tell peer we return some rx buffer */ + virtqueue_kick(rvdev->rvq); + } metal_mutex_release(&rdev->lock); } } /** - * rpmsg_virtio_ns_callback + * @internal * - * This callback handles name service announcement from the remote device - * and creates/deletes rpmsg channels. + * @brief This callback handles name service announcement from the remote + * device and creates/deletes rpmsg channels. * - * @param server_chnl - pointer to server channel control block. - * @param data - pointer to received messages - * @param len - length of received data - * @param priv - any private data - * @param src - source address + * @param ept Pointer to server channel control block. + * @param data Pointer to received messages + * @param len Length of received data + * @param priv Any private data + * @param src Source address * - * @return - rpmag endpoint callback handled + * @return Rpmsg endpoint callback handled */ - -#if defined (__GNUC__) && ! defined (__CC_ARM) -#pragma GCC push_options -#pragma GCC optimize ("O0") -#elif defined (__CC_ARM) -#pragma push -#pragma O0 -#endif static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv) { @@ -479,7 +620,7 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data, (void)priv; (void)src; - ns_msg = (struct rpmsg_ns_msg *)data; + ns_msg = data; if (len != sizeof(*ns_msg)) /* Returns as the message is corrupted */ return RPMSG_SUCCESS; @@ -497,7 +638,9 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data, _ept->dest_addr = RPMSG_ADDR_ANY; metal_mutex_release(&rdev->lock); if (_ept && _ept->ns_unbind_cb) - _ept->ns_unbind_cb(ept); + _ept->ns_unbind_cb(_ept); + if (rdev->ns_unbind_cb) + rdev->ns_unbind_cb(rdev, name, dest); } else { if (!_ept) { /* @@ -517,11 +660,6 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data, return RPMSG_SUCCESS; } -#if defined (__GNUC__) && ! defined (__CC_ARM) -#pragma GCC pop_options -#elif defined (__CC_ARM) -#pragma pop -#endif int rpmsg_virtio_get_buffer_size(struct rpmsg_device *rdev) { @@ -542,15 +680,27 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, rpmsg_ns_bind_cb ns_bind_cb, struct metal_io_region *shm_io, struct rpmsg_virtio_shm_pool *shpool) +{ + return rpmsg_init_vdev_with_config(rvdev, vdev, ns_bind_cb, shm_io, + shpool, RPMSG_VIRTIO_DEFAULT_CONFIG); +} + +int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev, + struct virtio_device *vdev, + rpmsg_ns_bind_cb ns_bind_cb, + struct metal_io_region *shm_io, + struct rpmsg_virtio_shm_pool *shpool, + const struct rpmsg_virtio_config *config) { struct rpmsg_device *rdev; const char *vq_names[RPMSG_NUM_VRINGS]; - typedef void (*vqcallback)(struct virtqueue *vq); - vqcallback callback[RPMSG_NUM_VRINGS]; - unsigned long dev_features; + vq_callback callback[RPMSG_NUM_VRINGS]; int status; unsigned int i, role; + if (!rvdev || !vdev || !shm_io) + return RPMSG_ERR_PARAM; + rdev = &rvdev->rdev; memset(rdev, 0, sizeof(*rdev)); metal_mutex_init(&rdev->lock); @@ -558,19 +708,50 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, rdev->ns_bind_cb = ns_bind_cb; vdev->priv = rvdev; rdev->ops.send_offchannel_raw = rpmsg_virtio_send_offchannel_raw; + rdev->ops.hold_rx_buffer = rpmsg_virtio_hold_rx_buffer; + rdev->ops.release_rx_buffer = rpmsg_virtio_release_rx_buffer; + rdev->ops.get_tx_payload_buffer = rpmsg_virtio_get_tx_payload_buffer; + rdev->ops.send_offchannel_nocopy = rpmsg_virtio_send_offchannel_nocopy; + rdev->ops.release_tx_buffer = rpmsg_virtio_release_tx_buffer; role = rpmsg_virtio_get_role(rvdev); -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) { +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) { + /* + * The virtio configuration contains only options applicable to + * a virtio driver, implying rpmsg host role. + */ + if (config == NULL) { + return RPMSG_ERR_PARAM; + } + rvdev->config = *config; + } +#else /*!VIRTIO_DEVICE_ONLY*/ + /* Ignore passed config in the virtio-device-only configuration. */ + (void)config; +#endif /*!VIRTIO_DEVICE_ONLY*/ + + +#ifndef VIRTIO_DRIVER_ONLY + if (role == RPMSG_REMOTE) { + /* wait synchro with the host */ + rpmsg_virtio_wait_remote_ready(rvdev); + } +#endif /*!VIRTIO_DRIVER_ONLY*/ + vdev->features = rpmsg_virtio_get_features(rvdev); + rdev->support_ns = !!(vdev->features & (1 << VIRTIO_RPMSG_F_NS)); + +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) { /* * Since device is RPMSG Remote so we need to manage the * shared buffers. Create shared memory pool to handle buffers. */ + rvdev->shpool = config->split_shpool ? shpool + 1 : shpool; if (!shpool) return RPMSG_ERR_PARAM; - if (!shpool->size) + if (!shpool->size || !rvdev->shpool->size) return RPMSG_ERR_NO_BUFF; - rvdev->shpool = shpool; vq_names[0] = "rx_vq"; vq_names[1] = "tx_vq"; @@ -579,9 +760,9 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, rvdev->rvq = vdev->vrings_info[0].vq; rvdev->svq = vdev->vrings_info[1].vq; } -#endif /*!VIRTIO_SLAVE_ONLY*/ +#endif /*!VIRTIO_DEVICE_ONLY*/ -#ifndef VIRTIO_MASTER_ONLY +#ifndef VIRTIO_DRIVER_ONLY (void)shpool; if (role == RPMSG_REMOTE) { vq_names[0] = "tx_vq"; @@ -591,15 +772,9 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, rvdev->rvq = vdev->vrings_info[1].vq; rvdev->svq = vdev->vrings_info[0].vq; } -#endif /*!VIRTIO_MASTER_ONLY*/ +#endif /*!VIRTIO_DRIVER_ONLY*/ rvdev->shbuf_io = shm_io; - -#ifndef VIRTIO_MASTER_ONLY - if (role == RPMSG_REMOTE) { - /* wait synchro with the master */ - rpmsg_virtio_wait_remote_ready(rvdev); - } -#endif /*!VIRTIO_MASTER_ONLY*/ + metal_list_init(&rvdev->reclaimer); /* Create virtqueues for remote device */ status = rpmsg_virtio_create_virtqueues(rvdev, 0, RPMSG_NUM_VRINGS, @@ -607,6 +782,12 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, if (status != RPMSG_SUCCESS) return status; + /* + * Suppress "tx-complete" interrupts + * since send method use busy loop when buffer pool exhaust + */ + virtqueue_disable_cb(rvdev->svq); + /* TODO: can have a virtio function to set the shared memory I/O */ for (i = 0; i < RPMSG_NUM_VRINGS; i++) { struct virtqueue *vq; @@ -615,17 +796,17 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, vq->shm_io = shm_io; } -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) { +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) { struct virtqueue_buf vqbuf; unsigned int idx; void *buffer; - vqbuf.len = RPMSG_BUFFER_SIZE; + vqbuf.len = rvdev->config.r2h_buf_size; for (idx = 0; idx < rvdev->rvq->vq_nentries; idx++) { /* Initialize TX virtqueue buffers for remote device */ buffer = rpmsg_virtio_shm_pool_get_buffer(shpool, - RPMSG_BUFFER_SIZE); + rvdev->config.r2h_buf_size); if (!buffer) { return RPMSG_ERR_NO_BUFF; @@ -636,7 +817,7 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, metal_io_block_set(shm_io, metal_io_virt_to_offset(shm_io, buffer), - 0x00, RPMSG_BUFFER_SIZE); + 0x00, rvdev->config.r2h_buf_size); status = virtqueue_add_buffer(rvdev->rvq, &vqbuf, 0, 1, buffer); @@ -646,28 +827,25 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, } } } -#endif /*!VIRTIO_SLAVE_ONLY*/ +#endif /*!VIRTIO_DEVICE_ONLY*/ /* Initialize channels and endpoints list */ metal_list_init(&rdev->endpoints); - dev_features = rpmsg_virtio_get_features(rvdev); - /* * Create name service announcement endpoint if device supports name * service announcement feature. */ - if ((dev_features & (1 << VIRTIO_RPMSG_F_NS))) { - rpmsg_init_ept(&rdev->ns_ept, "NS", - RPMSG_NS_EPT_ADDR, RPMSG_NS_EPT_ADDR, - rpmsg_virtio_ns_callback, NULL); - (void)rpmsg_register_endpoint(rdev, &rdev->ns_ept); + if (rdev->support_ns) { + rpmsg_register_endpoint(rdev, &rdev->ns_ept, "NS", + RPMSG_NS_EPT_ADDR, RPMSG_NS_EPT_ADDR, + rpmsg_virtio_ns_callback, NULL); } -#ifndef VIRTIO_SLAVE_ONLY - if (role == RPMSG_MASTER) +#ifndef VIRTIO_DEVICE_ONLY + if (role == RPMSG_HOST) rpmsg_virtio_set_status(rvdev, VIRTIO_CONFIG_STATUS_DRIVER_OK); -#endif /*!VIRTIO_SLAVE_ONLY*/ +#endif /*!VIRTIO_DEVICE_ONLY*/ return status; } @@ -678,15 +856,17 @@ void rpmsg_deinit_vdev(struct rpmsg_virtio_device *rvdev) struct rpmsg_device *rdev; struct rpmsg_endpoint *ept; - rdev = &rvdev->rdev; - while (!metal_list_is_empty(&rdev->endpoints)) { - node = rdev->endpoints.next; - ept = metal_container_of(node, struct rpmsg_endpoint, node); - rpmsg_destroy_ept(ept); - } + if (rvdev) { + rdev = &rvdev->rdev; + while (!metal_list_is_empty(&rdev->endpoints)) { + node = rdev->endpoints.next; + ept = metal_container_of(node, struct rpmsg_endpoint, node); + rpmsg_destroy_ept(ept); + } - rvdev->rvq = 0; - rvdev->svq = 0; + rvdev->rvq = 0; + rvdev->svq = 0; - metal_mutex_deinit(&rdev->lock); + metal_mutex_deinit(&rdev->lock); + } } diff --git a/libraries/openamp_arduino/src/rsc_table.c b/libraries/openamp_arduino/src/rsc_table.c index 3fde24727..f2335dd8f 100644 --- a/libraries/openamp_arduino/src/rsc_table.c +++ b/libraries/openamp_arduino/src/rsc_table.c @@ -21,137 +21,58 @@ ****************************************************************************** */ -/** @addtogroup RSC_TABLE - * @{ - */ - -/** @addtogroup resource_table - * @{ - */ - -/** @addtogroup resource_table_Private_Includes - * @{ - */ - - #if defined(__ICCARM__) || defined (__CC_ARM) #include /* needed for offsetof definition*/ #endif #include "rsc_table.h" #include "openamp/open_amp.h" -/** - * @} - */ - -/** @addtogroup resource_table_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup resource_table_Private_Defines - * @{ - */ - -/* Place resource table in special ELF section */ -#if defined(__GNUC__) -#define __section_t(S) __attribute__((__section__(#S))) -#define __resource __section_t(.resource_table) -#endif - -#define RPMSG_IPU_C0_FEATURES 1 -#define VRING_COUNT 2 - -/* VirtIO rpmsg device id */ -#define VIRTIO_ID_RPMSG_ 7 - #if defined (__LOG_TRACE_IO_) extern char system_log_buf[]; #endif -#if defined(__GNUC__) -#if !defined (__CC_ARM) -/* Since GCC is not initializing the resource_table at startup, it is declared as volatile to avoid compiler optimization - * for the CM4 (see resource_table_init() below) - */ -volatile struct shared_resource_table __resource __attribute__((used)) resource_table; -#else -struct shared_resource_table __resource __attribute__((used)) resource_table = { -#endif -#elif defined(__ICCARM__) -__root struct shared_resource_table resource_table @ ".resource_table" = { -#endif - -#if defined(__ICCARM__) || defined (__CC_ARM) - .version = 1, - .num = 2, - .reserved = {0, 0}, - .offset = { - offsetof(struct shared_resource_table, vdev), - offsetof(struct shared_resource_table, cm_trace), - }, - - /* Virtio device entry */ - .vdev= { - RSC_VDEV, VIRTIO_ID_RPMSG_, 0, RPMSG_IPU_C0_FEATURES, 0, 0, 0, - VRING_COUNT, {0, 0}, - }, - - /* Vring rsc entry - part of vdev rsc entry */ - .vring0 = {VRING_TX_ADDRESS, VRING_ALIGNMENT, VRING_NUM_BUFFS, VRING0_ID, 0}, - .vring1 = {VRING_RX_ADDRESS, VRING_ALIGNMENT, VRING_NUM_BUFFS, VRING1_ID, 0}, - -#if defined (__LOG_TRACE_IO_) - .cm_trace = { - RSC_TRACE, - (uint32_t)system_log_buf, SYSTEM_TRACE_BUF_SZ, 0, "cm4_log", - }, -#endif -} ; -#endif - -void resource_table_init(int RPMsgRole, void **table_ptr, int *length) -{ - -#if defined (__GNUC__) && ! defined (__CC_ARM) -#ifdef CORE_CM7 - /* - * Currently the GCC linker doesn't initialize the resource_table global variable at startup - * it is done here by the CM7 application. - */ - memset(&resource_table, '\0', sizeof(struct shared_resource_table)); - resource_table.num = 1; - resource_table.version = 1; - resource_table.offset[0] = offsetof(struct shared_resource_table, vdev); - - resource_table.vring0.da = VRING_TX_ADDRESS; - resource_table.vring0.align = VRING_ALIGNMENT; - resource_table.vring0.num = VRING_NUM_BUFFS; - resource_table.vring0.notifyid = VRING0_ID; - - resource_table.vring1.da = VRING_RX_ADDRESS; - resource_table.vring1.align = VRING_ALIGNMENT; - resource_table.vring1.num = VRING_NUM_BUFFS; - resource_table.vring1.notifyid = VRING1_ID; - - - resource_table.vdev.type = RSC_VDEV; - resource_table.vdev.id = VIRTIO_ID_RPMSG_; - resource_table.vdev.num_of_vrings=VRING_COUNT; - resource_table.vdev.dfeatures = RPMSG_IPU_C0_FEATURES; -#else - /* For CM4 let's wait until the resource_table is correctly initialized */ - while(resource_table.vring1.da != VRING_RX_ADDRESS) - { - - } -#endif -#endif - - (void)RPMsgRole; - *length = sizeof(resource_table); - *table_ptr = &resource_table; +void resource_table_init(int RPMsgRole, void **table_ptr, int *length) { + (void)RPMsgRole; + volatile struct shared_resource_table *resource_table = SHM_RSC_ADDR; + + #ifdef CORE_CM7 + memset(resource_table, 0, SHM_RSC_SIZE); + resource_table->num = 1; + resource_table->version = 1; + resource_table->offset[0] = offsetof(struct shared_resource_table, vdev); + #if defined (__LOG_TRACE_IO_) + resource_table->offset[1] = offsetof(struct shared_resource_table, cm_trace); + #endif + + resource_table->vring0.da = VRING_TX_ADDRESS; + resource_table->vring0.align = VRING_ALIGNMENT; + resource_table->vring0.num = VRING_NUM_BUFFS; + resource_table->vring0.notifyid = VRING0_ID; + + resource_table->vring1.da = VRING_RX_ADDRESS; + resource_table->vring1.align = VRING_ALIGNMENT; + resource_table->vring1.num = VRING_NUM_BUFFS; + resource_table->vring1.notifyid = VRING1_ID; + + #if defined (__LOG_TRACE_IO_) + resource_table->cm_trace.type; + resource_table->cm_trace.da; + resource_table->cm_trace.len; + resource_table->cm_trace.reserved = 0; + resource_table->cm_trace.name = (uint8_t[]){"cm_trace"}; + #endif + + resource_table->vdev.type = RSC_VDEV; + resource_table->vdev.id = VIRTIO_ID_RPMSG; + resource_table->vdev.num_of_vrings=VRING_COUNT; + resource_table->vdev.dfeatures = (1 << VIRTIO_RPMSG_F_NS); + #else + // For CM4, wait until the resource_table is initialized by the host + while(resource_table->vring1.da != VRING_RX_ADDRESS) { + + } + #endif + + *length = SHM_RSC_SIZE; + *table_ptr = resource_table; } diff --git a/libraries/openamp_arduino/src/rsc_table_parser.c b/libraries/openamp_arduino/src/rsc_table_parser.c new file mode 100644 index 000000000..c099f840b --- /dev/null +++ b/libraries/openamp_arduino/src/rsc_table_parser.c @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * Copyright (c) 2018, Xilinx Inc. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include + +static int handle_dummy_rsc(struct remoteproc *rproc, void *rsc); + +/* Resources handler */ +static const rsc_handler rsc_handler_table[] = { + handle_carve_out_rsc, /**< carved out resource */ + handle_dummy_rsc, /**< IOMMU dev mem resource */ + handle_trace_rsc, /**< trace buffer resource */ + handle_vdev_rsc, /**< virtio resource */ +}; + +int handle_rsc_table(struct remoteproc *rproc, + struct resource_table *rsc_table, size_t size, + struct metal_io_region *io) +{ + struct fw_rsc_hdr *hdr; + uint32_t rsc_type; + unsigned int idx, offset; + int status = 0; + + /* Validate rsc table header fields */ + + /* Minimum rsc table size */ + if (sizeof(struct resource_table) > size) { + return -RPROC_ERR_RSC_TAB_TRUNC; + } + + /* Supported version */ + if (rsc_table->ver != RSC_TAB_SUPPORTED_VERSION) { + return -RPROC_ERR_RSC_TAB_VER; + } + + /* Offset array */ + offset = sizeof(struct resource_table) + + rsc_table->num * sizeof(rsc_table->offset[0]); + + if (offset > size) { + return -RPROC_ERR_RSC_TAB_TRUNC; + } + + /* Reserved fields - must be zero */ + if (rsc_table->reserved[0] != 0 || rsc_table->reserved[1] != 0) { + return -RPROC_ERR_RSC_TAB_RSVD; + } + + /* Loop through the offset array and parse each resource entry */ + for (idx = 0; idx < rsc_table->num; idx++) { + hdr = (void *)((char *)rsc_table + rsc_table->offset[idx]); + if (io && metal_io_virt_to_offset(io, hdr) == METAL_BAD_OFFSET) + return -RPROC_ERR_RSC_TAB_TRUNC; + rsc_type = hdr->type; + if (rsc_type < RSC_LAST) + status = rsc_handler_table[rsc_type](rproc, hdr); + else if (rsc_type >= RSC_VENDOR_START && + rsc_type <= RSC_VENDOR_END) + status = handle_vendor_rsc(rproc, hdr); + if (status == -RPROC_ERR_RSC_TAB_NS) { + status = 0; + continue; + } else if (status) { + break; + } + } + + return status; +} + +int handle_carve_out_rsc(struct remoteproc *rproc, void *rsc) +{ + struct fw_rsc_carveout *carve_rsc = rsc; + metal_phys_addr_t da; + metal_phys_addr_t pa; + size_t size; + unsigned int attribute; + + /* Validate resource fields */ + if (!carve_rsc) { + return -RPROC_ERR_RSC_TAB_NP; + } + + if (carve_rsc->reserved) { + return -RPROC_ERR_RSC_TAB_RSVD; + } + pa = carve_rsc->pa; + da = carve_rsc->da; + size = carve_rsc->len; + attribute = carve_rsc->flags; + if (remoteproc_mmap(rproc, &pa, &da, size, attribute, NULL)) + return 0; + else + return -RPROC_EINVAL; +} + +int handle_vendor_rsc(struct remoteproc *rproc, void *rsc) +{ + if (rproc && rproc->ops->handle_rsc) { + struct fw_rsc_vendor *vend_rsc = rsc; + size_t len = vend_rsc->len; + + return rproc->ops->handle_rsc(rproc, rsc, len); + } + return -RPROC_ERR_RSC_TAB_NS; +} + +int handle_vdev_rsc(struct remoteproc *rproc, void *rsc) +{ + struct fw_rsc_vdev *vdev_rsc = rsc; + int i, num_vrings; + unsigned int notifyid; + struct fw_rsc_vdev_vring *vring_rsc; + + /* only assign notification IDs but do not initialize vdev */ + notifyid = vdev_rsc->notifyid; + notifyid = remoteproc_allocate_id(rproc, + notifyid, + notifyid == RSC_NOTIFY_ID_ANY ? + RSC_NOTIFY_ID_ANY : notifyid + 1); + if (notifyid != RSC_NOTIFY_ID_ANY) + vdev_rsc->notifyid = notifyid; + else + return -RPROC_ERR_RSC_TAB_NP; + + num_vrings = vdev_rsc->num_of_vrings; + for (i = 0; i < num_vrings; i++) { + vring_rsc = &vdev_rsc->vring[i]; + notifyid = vring_rsc->notifyid; + notifyid = remoteproc_allocate_id(rproc, + notifyid, + notifyid == RSC_NOTIFY_ID_ANY ? + RSC_NOTIFY_ID_ANY : notifyid + 1); + if (notifyid != RSC_NOTIFY_ID_ANY) + vring_rsc->notifyid = notifyid; + else + goto err; + } + + return 0; + +err: + for (i--; i >= 0; i--) { + vring_rsc = &vdev_rsc->vring[i]; + metal_bitmap_clear_bit(&rproc->bitmap, vring_rsc->notifyid); + } + metal_bitmap_clear_bit(&rproc->bitmap, vdev_rsc->notifyid); + + return -RPROC_ERR_RSC_TAB_NP; +} + +int handle_trace_rsc(struct remoteproc *rproc, void *rsc) +{ + struct fw_rsc_trace *vdev_rsc = rsc; + (void)rproc; + + if (vdev_rsc->da != FW_RSC_U32_ADDR_ANY && vdev_rsc->len != 0) + return 0; + /* FIXME: The host should allocated a memory used by remote */ + + return -RPROC_ERR_RSC_TAB_NS; +} + +/** + * @internal + * + * @brief Dummy resource handler. + * + * @param rproc Pointer to remote remoteproc + * @param rsc Pointer to trace resource + * + * @return No service error + */ +static int handle_dummy_rsc(struct remoteproc *rproc, void *rsc) +{ + (void)rproc; + (void)rsc; + + return -RPROC_ERR_RSC_TAB_NS; +} + +size_t find_rsc(void *rsc_table, unsigned int rsc_type, unsigned int index) +{ + struct resource_table *r_table = rsc_table; + struct fw_rsc_hdr *hdr; + unsigned int i, rsc_index; + unsigned int lrsc_type; + + metal_assert(r_table); + if (!r_table) + return 0; + + /* Loop through the offset array and parse each resource entry */ + rsc_index = 0; + for (i = 0; i < r_table->num; i++) { + hdr = (void *)((char *)r_table + r_table->offset[i]); + lrsc_type = hdr->type; + if (lrsc_type == rsc_type) { + if (rsc_index++ == index) + return r_table->offset[i]; + } + } + return 0; +} diff --git a/libraries/openamp_arduino/src/shmem.c b/libraries/openamp_arduino/src/shmem.c index 5ead8e755..0ded4ec4a 100644 --- a/libraries/openamp_arduino/src/shmem.c +++ b/libraries/openamp_arduino/src/shmem.c @@ -9,8 +9,8 @@ * @brief Generic libmetal shared memory handling. */ -#include #include +#include #include #include #include @@ -38,10 +38,10 @@ int metal_shmem_open_generic(const char *name, size_t size, shmem = metal_container_of(node, struct metal_generic_shmem, node); if (strcmp(shmem->name, name) != 0) continue; - if (size > metal_io_region_size(&shmem->io)) - continue; - *result = &shmem->io; - return 0; + if (size <= metal_io_region_size(&shmem->io)) { + *result = &shmem->io; + return 0; + } } return -ENOENT; diff --git a/libraries/openamp_arduino/src/softirq.c b/libraries/openamp_arduino/src/softirq.c new file mode 100644 index 000000000..4ba745fa1 --- /dev/null +++ b/libraries/openamp_arduino/src/softirq.c @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2019, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define METAL_SOFTIRQ_NUM 64 + +#define METAL_SOFTIRQ_ARRAY_DECLARE(num) \ + static const int metal_softirq_num = num; \ + static struct metal_irq metal_softirqs[num]; \ + static atomic_char metal_softirq_pending[num]; \ + static atomic_char metal_softirq_enabled[num]; + +static int metal_softirq_avail; +METAL_SOFTIRQ_ARRAY_DECLARE(METAL_SOFTIRQ_NUM) + +static void metal_softirq_set_enable(struct metal_irq_controller *cntr, + int irq, unsigned int enable) +{ + if (irq < cntr->irq_base || + irq >= (cntr->irq_base + cntr->irq_num)) { + return; + } + + irq -= cntr->irq_base; + if (enable == METAL_IRQ_ENABLE) { + atomic_store(&metal_softirq_enabled[irq], 1); + } else { + atomic_store(&metal_softirq_enabled[irq], 0); + } +} + +static METAL_IRQ_CONTROLLER_DECLARE(metal_softirq_cntr, + METAL_IRQ_ANY, METAL_SOFTIRQ_NUM, + NULL, + metal_softirq_set_enable, NULL, + metal_softirqs); + +void metal_softirq_set(int irq) +{ + struct metal_irq_controller *cntr; + + cntr = &metal_softirq_cntr; + + if (irq < cntr->irq_base || + irq >= (cntr->irq_base + cntr->irq_num)) { + return; + } + + irq -= cntr->irq_base; + atomic_store(&metal_softirq_pending[irq], 1); +} + +int metal_softirq_init(void) +{ + return metal_irq_register_controller(&metal_softirq_cntr); +} + +int metal_softirq_allocate(int num) +{ + int irq_base; + + if ((metal_softirq_avail + num) >= metal_softirq_num) { + metal_log(METAL_LOG_ERROR, "No %d available soft irqs.\r\n", + num); + return -EINVAL; + } + irq_base = metal_softirq_avail; + irq_base += metal_softirq_cntr.irq_base; + metal_softirq_avail += num; + return irq_base; +} + +void metal_softirq_dispatch(void) +{ + int i; + + for (i = 0; i < metal_softirq_num; i++) { + struct metal_irq *irq; + char is_pending = 1; + + if (atomic_load(&metal_softirq_enabled[i]) != 0 && + atomic_compare_exchange_strong(&metal_softirq_pending[i], + &is_pending, 0)) { + irq = &metal_softirqs[i]; + (void)metal_irq_handle(irq, + i + metal_softirq_cntr.irq_base); + } + } +} diff --git a/libraries/openamp_arduino/src/version.c b/libraries/openamp_arduino/src/version.c new file mode 100644 index 000000000..bc23ee480 --- /dev/null +++ b/libraries/openamp_arduino/src/version.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include + +int metal_ver_major(void) +{ + return METAL_VER_MAJOR; +} + +int metal_ver_minor(void) +{ + return METAL_VER_MINOR; +} + +int metal_ver_patch(void) +{ + return METAL_VER_PATCH; +} + +const char *metal_ver(void) +{ + return METAL_VER; +} diff --git a/libraries/openamp_arduino/src/virtio.c b/libraries/openamp_arduino/src/virtio.c index 5cf87222b..794212a23 100644 --- a/libraries/openamp_arduino/src/virtio.c +++ b/libraries/openamp_arduino/src/virtio.c @@ -9,7 +9,10 @@ static const char *virtio_feature_name(unsigned long feature, const struct virtio_feature_desc *); -//TODO : This structure may change depending on the types of devices we support. +/* + * TODO : + * This structure may change depending on the types of devices we support. + */ static const struct virtio_ident { unsigned short devid; const char *name; @@ -23,6 +26,17 @@ static const struct virtio_ident { VIRTIO_ID_IOMEMORY, "IOMemory"}, { VIRTIO_ID_SCSI, "SCSI"}, { VIRTIO_ID_9P, "9P Transport"}, { + VIRTIO_ID_MAC80211_WLAN, "MAC80211 WLAN"}, { + VIRTIO_ID_RPROC_SERIAL, "Remoteproc Serial"}, { + VIRTIO_ID_GPU, "GPU"}, { + VIRTIO_ID_INPUT, "Input"}, { + VIRTIO_ID_VSOCK, "Vsock Transport"}, { + VIRTIO_ID_SOUND, "Sound"}, { + VIRTIO_ID_FS, "File System"}, { + VIRTIO_ID_MAC80211_HWSIM, "MAC80211 HWSIM"}, { + VIRTIO_ID_I2C_ADAPTER, "I2C Adapter"}, { + VIRTIO_ID_BT, "Bluetooth"}, { + VIRTIO_ID_GPIO, "GPIO" }, { 0, NULL} }; @@ -40,12 +54,12 @@ const char *virtio_dev_name(unsigned short devid) { const struct virtio_ident *ident; - for (ident = virtio_ident_table; ident->name != NULL; ident++) { + for (ident = virtio_ident_table; ident->name; ident++) { if (ident->devid == devid) - return (ident->name); + return ident->name; } - return (NULL); + return NULL; } static const char *virtio_feature_name(unsigned long val, @@ -62,27 +76,27 @@ static const char *virtio_feature_name(unsigned long val, for (j = 0; descs[i][j].vfd_val != 0; j++) { if (val == descs[i][j].vfd_val) - return (descs[i][j].vfd_str); + return descs[i][j].vfd_str; } } - return (NULL); + return NULL; } -void virtio_describe(struct virtio_device *dev, const char *msg, - uint32_t features, struct virtio_feature_desc *desc) +__deprecated void virtio_describe(struct virtio_device *dev, const char *msg, + uint32_t features, struct virtio_feature_desc *desc) { (void)dev; (void)msg; (void)features; - // TODO: Not used currently - keeping it for future use + /* TODO: Not used currently - keeping it for future use*/ virtio_feature_name(0, desc); } int virtio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, unsigned int nvqs, const char *names[], - vq_callback *callbacks[]) + vq_callback callbacks[], void *callback_args[]) { struct virtio_vring_info *vring_info; struct vring_alloc_info *vring_alloc; @@ -90,16 +104,24 @@ int virtio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, int ret; (void)flags; + if (!vdev) + return -EINVAL; + + if (vdev->func && vdev->func->create_virtqueues) { + return vdev->func->create_virtqueues(vdev, flags, nvqs, + names, callbacks, callback_args); + } + num_vrings = vdev->vrings_num; if (nvqs > num_vrings) - return -ERROR_VQUEUE_INVLD_PARAM; + return ERROR_VQUEUE_INVLD_PARAM; /* Initialize virtqueue for each vring */ for (i = 0; i < nvqs; i++) { vring_info = &vdev->vrings_info[i]; vring_alloc = &vring_info->info; -#ifndef VIRTIO_SLAVE_ONLY - if (vdev->role == VIRTIO_DEV_MASTER) { +#ifndef VIRTIO_DEVICE_ONLY + if (vdev->role == VIRTIO_DEV_DRIVER) { size_t offset; struct metal_io_region *io = vring_info->io; diff --git a/libraries/openamp_arduino/src/virtio_mmio_drv.c b/libraries/openamp_arduino/src/virtio_mmio_drv.c new file mode 100644 index 000000000..5f42180a6 --- /dev/null +++ b/libraries/openamp_arduino/src/virtio_mmio_drv.c @@ -0,0 +1,391 @@ +/* + * Copyright (c) 2022 Wind River Systems, Inc. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include +#include + +void virtio_mmio_isr(struct virtio_device *vdev); + +typedef void (*virtio_mmio_vq_callback)(void *); + +static int virtio_mmio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, + unsigned int nvqs, const char *names[], + vq_callback callbacks[], void *callback_args[]); + +static inline void virtio_mmio_write32(struct virtio_device *vdev, int offset, uint32_t value) +{ + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + metal_io_write32(vmdev->cfg_io, offset, value); +} + +static inline uint32_t virtio_mmio_read32(struct virtio_device *vdev, int offset) +{ + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + return metal_io_read32(vmdev->cfg_io, offset); +} + +static inline uint8_t virtio_mmio_read8(struct virtio_device *vdev, int offset) +{ + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + return metal_io_read8(vmdev->cfg_io, offset); +} + +static inline void virtio_mmio_set_status(struct virtio_device *vdev, uint8_t status) +{ + virtio_mmio_write32(vdev, VIRTIO_MMIO_STATUS, status); +} + +static uint8_t virtio_mmio_get_status(struct virtio_device *vdev) +{ + return virtio_mmio_read32(vdev, VIRTIO_MMIO_STATUS); +} + +static void virtio_mmio_write_config(struct virtio_device *vdev, + uint32_t offset, void *dst, int length) +{ + (void)(vdev); + (void)(offset); + (void)(dst); + (void)length; + + metal_log(METAL_LOG_WARNING, "%s not supported\n", __func__); +} + +static void virtio_mmio_read_config(struct virtio_device *vdev, + uint32_t offset, void *dst, int length) +{ + int i; + uint8_t *d = dst; + (void)(offset); + + for (i = 0; i < length; i++) + d[i] = virtio_mmio_read8(vdev, VIRTIO_MMIO_CONFIG + i); +} + +static uint32_t _virtio_mmio_get_features(struct virtio_device *vdev, int idx) +{ + uint32_t hfeatures; + + /* Writing selection register VIRTIO_MMIO_DEVICE_FEATURES_SEL. In pure AMP + * mode this needs to be followed by a synchronization w/ the device + * before reading VIRTIO_MMIO_DEVICE_FEATURES + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_DEVICE_FEATURES_SEL, idx); + hfeatures = virtio_mmio_read32(vdev, VIRTIO_MMIO_DEVICE_FEATURES); + return hfeatures & vdev->features; +} + +static uint32_t virtio_mmio_get_features(struct virtio_device *vdev) +{ + return _virtio_mmio_get_features(vdev, 0); +} + +/* This is more like negotiate_features */ +static void _virtio_mmio_set_features(struct virtio_device *vdev, + uint32_t features, int idx) +{ + uint32_t hfeatures; + + /* Writing selection register VIRTIO_MMIO_DEVICE_FEATURES_SEL. In pure AMP + * mode this needs to be followed by a synchronization w/ the device + * before reading VIRTIO_MMIO_DEVICE_FEATURES + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_DEVICE_FEATURES_SEL, idx); + hfeatures = virtio_mmio_read32(vdev, VIRTIO_MMIO_DEVICE_FEATURES); + features &= hfeatures; + virtio_mmio_write32(vdev, VIRTIO_MMIO_DRIVER_FEATURES, features); + vdev->features = features; +} + +static void virtio_mmio_set_features(struct virtio_device *vdev, uint32_t features) +{ + _virtio_mmio_set_features(vdev, features, 0); +} + +static void virtio_mmio_reset_device(struct virtio_device *vdev) +{ + virtio_mmio_set_status(vdev, 0); +} + +static void virtio_mmio_notify(struct virtqueue *vq) +{ + /* VIRTIO_F_NOTIFICATION_DATA is not supported for now */ + virtio_mmio_write32(vq->vq_dev, VIRTIO_MMIO_QUEUE_NOTIFY, vq->vq_queue_index); +} + +const struct virtio_dispatch virtio_mmio_dispatch = { + .create_virtqueues = virtio_mmio_create_virtqueues, + .get_status = virtio_mmio_get_status, + .set_status = virtio_mmio_set_status, + .get_features = virtio_mmio_get_features, + .set_features = virtio_mmio_set_features, + .read_config = virtio_mmio_read_config, + .write_config = virtio_mmio_write_config, + .reset_device = virtio_mmio_reset_device, + .notify = virtio_mmio_notify, +}; + +static int virtio_mmio_get_metal_io(struct virtio_device *vdev, uintptr_t virt_mem_ptr, + uintptr_t cfg_mem_ptr) +{ + struct metal_device *device; + int32_t err; + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + /* Setup shared memory device */ + vmdev->shm_device.regions[0].physmap = (metal_phys_addr_t *)&vmdev->shm_mem.base; + vmdev->shm_device.regions[0].virt = (void *)virt_mem_ptr; + vmdev->shm_device.regions[0].size = vmdev->shm_mem.size; + + VIRTIO_ASSERT((METAL_MAX_DEVICE_REGIONS > 1), + "METAL_MAX_DEVICE_REGIONS must be greater that 1"); + + vmdev->shm_device.regions[1].physmap = (metal_phys_addr_t *)&vmdev->cfg_mem.base; + vmdev->shm_device.regions[1].virt = (void *)cfg_mem_ptr; + vmdev->shm_device.regions[1].size = vmdev->cfg_mem.size; + + err = metal_register_generic_device(&vmdev->shm_device); + if (err) { + metal_log(METAL_LOG_ERROR, "Couldn't register shared memory device: %d\n", err); + return err; + } + + err = metal_device_open("generic", vmdev->shm_device.name, &device); + if (err) { + metal_log(METAL_LOG_ERROR, "metal_device_open failed: %d", err); + return err; + } + + vmdev->shm_io = metal_device_io_region(device, 0); + if (!vmdev->shm_io) { + metal_log(METAL_LOG_ERROR, "metal_device_io_region failed to get region 0"); + return err; + } + + vmdev->cfg_io = metal_device_io_region(device, 1); + if (!vmdev->cfg_io) { + metal_log(METAL_LOG_ERROR, "metal_device_io_region failed to get region 1"); + return err; + } + + return 0; +} + +uint32_t virtio_mmio_get_max_elem(struct virtio_device *vdev, int idx) +{ + /* Select the queue we're interested in by writing selection register + * VIRTIO_MMIO_QUEUE_SEL. In pure AMP mode this needs to be followed by a + * synchronization w/ the device before reading VIRTIO_MMIO_QUEUE_NUM_MAX + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_SEL, idx); + return virtio_mmio_read32(vdev, VIRTIO_MMIO_QUEUE_NUM_MAX); +} + +int virtio_mmio_device_init(struct virtio_mmio_device *vmdev, uintptr_t virt_mem_ptr, + uintptr_t cfg_mem_ptr, void *user_data) +{ + struct virtio_device *vdev = &vmdev->vdev; + uint32_t magic, version, devid, vendor; + + vdev->role = vmdev->device_mode; + vdev->priv = vmdev; + vdev->func = &virtio_mmio_dispatch; + vmdev->user_data = user_data; + + /* Set metal io mem ops */ + virtio_mmio_get_metal_io(vdev, virt_mem_ptr, cfg_mem_ptr); + + magic = virtio_mmio_read32(vdev, VIRTIO_MMIO_MAGIC_VALUE); + if (magic != VIRTIO_MMIO_MAGIC_VALUE_STRING) { + metal_log(METAL_LOG_ERROR, "Bad magic value %08x\n", magic); + return -1; + } + + version = virtio_mmio_read32(vdev, VIRTIO_MMIO_VERSION); + devid = virtio_mmio_read32(vdev, VIRTIO_MMIO_DEVICE_ID); + if (devid == 0) { + /* Placeholder */ + return -1; + } + + if (version != 1) { + metal_log(METAL_LOG_ERROR, "Bad version %08x\n", version); + return -1; + } + + vendor = virtio_mmio_read32(vdev, VIRTIO_MMIO_VENDOR_ID); + metal_log(METAL_LOG_DEBUG, "VIRTIO %08x:%08x\n", vendor, devid); + + vdev->id.version = version; + vdev->id.device = devid; + vdev->id.vendor = vendor; + + virtio_mmio_set_status(vdev, VIRTIO_CONFIG_STATUS_ACK); + virtio_mmio_write32(vdev, VIRTIO_MMIO_GUEST_PAGE_SIZE, 4096); + + return 0; +} + +/* Register preallocated virtqueues */ +void virtio_mmio_register_device(struct virtio_device *vdev, int vq_num, struct virtqueue **vqs) +{ + int i; + + vdev->vrings_info = metal_allocate_memory(sizeof(struct virtio_vring_info) * vq_num); + /* TODO: handle error case */ + for (i = 0; i < vq_num; i++) { + vdev->vrings_info[i].vq = vqs[i]; + } + vdev->vrings_num = vq_num; +} + +struct virtqueue *virtio_mmio_setup_virtqueue(struct virtio_device *vdev, + unsigned int idx, + struct virtqueue *vq, + void (*cb)(void *), + void *cb_arg, + const char *vq_name) +{ + uint32_t maxq; + struct virtio_vring_info _vring_info = {0}; + struct virtio_vring_info *vring_info = &_vring_info; + struct vring_alloc_info *vring_alloc_info; + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + if (vdev->role != (unsigned int)VIRTIO_DEV_DRIVER) { + metal_log(METAL_LOG_ERROR, "Only VIRTIO_DEV_DRIVER is currently supported\n"); + return NULL; + } + + if (!vq) { + metal_log(METAL_LOG_ERROR, + "Only preallocated virtqueues are currently supported\n"); + return NULL; + } + + if (vdev->id.version != 0x1) { + metal_log(METAL_LOG_ERROR, + "Only VIRTIO MMIO version 1 is currently supported\n"); + return NULL; + } + + vring_info->io = vmdev->shm_io; + vring_info->info.num_descs = virtio_mmio_get_max_elem(vdev, idx); + vring_info->info.align = VIRTIO_MMIO_VRING_ALIGNMENT; + + /* Check if vrings are already configured */ + if (vq->vq_nentries != 0 && vq->vq_nentries == vq->vq_free_cnt && + vq->vq_ring.desc) { + vring_info->info.vaddr = vq->vq_ring.desc; + vring_info->vq = vq; + } + vring_info->info.num_descs = vq->vq_nentries; + + vq->vq_dev = vdev; + + vring_alloc_info = &vring_info->info; + + unsigned int role_bk = vdev->role; + /* Assign OA VIRTIO_DEV_DRIVER role to allow virtio guests to setup the vrings */ + vdev->role = (unsigned int)VIRTIO_DEV_DRIVER; + if (virtqueue_create(vdev, idx, vq_name, vring_alloc_info, (void (*)(struct virtqueue *))cb, + vdev->func->notify, vring_info->vq)) { + metal_log(METAL_LOG_ERROR, "virtqueue_create failed\n"); + return NULL; + } + vdev->role = role_bk; + vq->priv = cb_arg; + virtqueue_set_shmem_io(vq, vmdev->shm_io); + + /* Writing selection register VIRTIO_MMIO_QUEUE_SEL. In pure AMP + * mode this needs to be followed by a synchronization w/ the device + * before reading VIRTIO_MMIO_QUEUE_NUM_MAX + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_SEL, idx); + maxq = virtio_mmio_read32(vdev, VIRTIO_MMIO_QUEUE_NUM_MAX); + VIRTIO_ASSERT((maxq != 0), + "VIRTIO_MMIO_QUEUE_NUM_MAX cannot be 0"); + VIRTIO_ASSERT((maxq >= vq->vq_nentries), + "VIRTIO_MMIO_QUEUE_NUM_MAX must be greater than vqueue->vq_nentries"); + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_NUM, vq->vq_nentries); + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_ALIGN, 4096); + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_PFN, + ((uintptr_t)metal_io_virt_to_phys(vq->shm_io, + (char *)vq->vq_ring.desc)) / 4096); + + vdev->vrings_info[vdev->vrings_num].vq = vq; + vdev->vrings_num++; + virtqueue_enable_cb(vq); + + return vq; +} + +void virtio_mmio_isr(struct virtio_device *vdev) +{ + struct virtio_vring_info *vrings_info = vdev->vrings_info; + + uint32_t isr = virtio_mmio_read32(vdev, VIRTIO_MMIO_INTERRUPT_STATUS); + struct virtqueue *vq; + unsigned int i; + + if (isr & VIRTIO_MMIO_INT_VRING) { + for (i = 0; i < vdev->vrings_num; i++) { + vq = vrings_info[i].vq; + if (vq->callback) + vq->callback(vq->priv); + } + } + + if (isr & ~(VIRTIO_MMIO_INT_VRING)) + metal_log(METAL_LOG_WARNING, "Unhandled interrupt type: 0x%x\n", isr); + + virtio_mmio_write32(vdev, VIRTIO_MMIO_INTERRUPT_ACK, isr); +} + +static int virtio_mmio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, + unsigned int nvqs, const char *names[], + vq_callback callbacks[], void *callback_args[]) +{ + struct virtqueue *vq; + struct virtqueue *vring_vq; + void (*cb)(void *); + void *cb_arg; + unsigned int i; + + (void)flags; + + if (!vdev || !names || !vdev->vrings_info) + return -EINVAL; + + for (i = 0; i < nvqs; i++) { + vring_vq = NULL; + cb = NULL; + cb_arg = NULL; + if (vdev->vrings_info[i].vq) + vring_vq = vdev->vrings_info[i].vq; + if (callbacks) + cb = (virtio_mmio_vq_callback)callbacks[i]; + if (callback_args) + cb_arg = callback_args[i]; + vq = virtio_mmio_setup_virtqueue(vdev, i, vring_vq, cb, cb_arg, names[i]); + if (!vq) + return -ENODEV; + } + + return 0; +} diff --git a/libraries/openamp_arduino/src/virtqueue.c b/libraries/openamp_arduino/src/virtqueue.c index e90a6940b..2544ee360 100644 --- a/libraries/openamp_arduino/src/virtqueue.c +++ b/libraries/openamp_arduino/src/virtqueue.c @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -18,9 +19,14 @@ static uint16_t vq_ring_add_buffer(struct virtqueue *, struct vring_desc *, uint16_t, struct virtqueue_buf *, int, int); static int vq_ring_enable_interrupt(struct virtqueue *, uint16_t); static void vq_ring_free_chain(struct virtqueue *, uint16_t); -static int vq_ring_must_notify_host(struct virtqueue *vq); -static void vq_ring_notify_host(struct virtqueue *vq); +static int vq_ring_must_notify(struct virtqueue *vq); +static void vq_ring_notify(struct virtqueue *vq); +#ifndef VIRTIO_DEVICE_ONLY static int virtqueue_nused(struct virtqueue *vq); +#endif +#ifndef VIRTIO_DRIVER_ONLY +static int virtqueue_navail(struct virtqueue *vq); +#endif /* Default implementation of P2V based on libmetal */ static inline void *virtqueue_phys_to_virt(struct virtqueue *vq, @@ -40,21 +46,6 @@ static inline metal_phys_addr_t virtqueue_virt_to_phys(struct virtqueue *vq, return metal_io_virt_to_phys(io, buf); } -/** - * virtqueue_create - Creates new VirtIO queue - * - * @param device - Pointer to VirtIO device - * @param id - VirtIO queue ID , must be unique - * @param name - Name of VirtIO queue - * @param ring - Pointer to vring_alloc_info control block - * @param callback - Pointer to callback function, invoked - * when message is available on VirtIO queue - * @param notify - Pointer to notify function, used to notify - * other side that there is job available for it - * @param vq - Created VirtIO queue. - * - * @return - Function status - */ int virtqueue_create(struct virtio_device *virt_dev, unsigned short id, const char *name, struct vring_alloc_info *ring, void (*callback)(struct virtqueue *vq), @@ -71,7 +62,7 @@ int virtqueue_create(struct virtio_device *virt_dev, unsigned short id, if (status == VQUEUE_SUCCESS) { vq->vq_dev = virt_dev; - vq->vq_name = name; + vq->vq_name = name; vq->vq_queue_index = id; vq->vq_nentries = ring->num_descs; vq->vq_free_cnt = vq->vq_nentries; @@ -79,30 +70,17 @@ int virtqueue_create(struct virtio_device *virt_dev, unsigned short id, vq->notify = notify; /* Initialize vring control block in virtqueue. */ - vq_ring_init(vq, (void *)ring->vaddr, ring->align); - - /* Disable callbacks - will be enabled by the application - * once initialization is completed. - */ - virtqueue_disable_cb(vq); + vq_ring_init(vq, ring->vaddr, ring->align); } - return (status); + /* + * CACHE: nothing to be done here. Only desc.next is setup at this + * stage but that is only written by driver, so no need to flush it. + */ + + return status; } -/** - * virtqueue_add_buffer() - Enqueues new buffer in vring for consumption - * by other side. Readable buffers are always - * inserted before writable buffers - * - * @param vq - Pointer to VirtIO queue control block. - * @param buf_list - Pointer to a list of virtqueue buffers. - * @param readable - Number of readable buffers - * @param writable - Number of writable buffers - * @param cookie - Pointer to hold call back data - * - * @return - Function status - */ int virtqueue_add_buffer(struct virtqueue *vq, struct virtqueue_buf *buf_list, int readable, int writable, void *cookie) { @@ -116,7 +94,7 @@ int virtqueue_add_buffer(struct virtqueue *vq, struct virtqueue_buf *buf_list, VQ_PARAM_CHK(vq == NULL, status, ERROR_VQUEUE_INVLD_PARAM); VQ_PARAM_CHK(needed < 1, status, ERROR_VQUEUE_INVLD_PARAM); - VQ_PARAM_CHK(vq->vq_free_cnt == 0, status, ERROR_VRING_FULL); + VQ_PARAM_CHK(vq->vq_free_cnt < needed, status, ERROR_VRING_FULL); VQUEUE_BUSY(vq); @@ -158,23 +136,17 @@ int virtqueue_add_buffer(struct virtqueue *vq, struct virtqueue_buf *buf_list, return status; } -/** - * virtqueue_get_buffer - Returns used buffers from VirtIO queue - * - * @param vq - Pointer to VirtIO queue control block - * @param len - Length of conumed buffer - * @param idx - index of the buffer - * - * @return - Pointer to used buffer - */ void *virtqueue_get_buffer(struct virtqueue *vq, uint32_t *len, uint16_t *idx) { struct vring_used_elem *uep; void *cookie; uint16_t used_idx, desc_idx; + /* Used.idx is updated by the virtio device, so we need to invalidate */ + VRING_INVALIDATE(&vq->vq_ring.used->idx, sizeof(vq->vq_ring.used->idx)); + if (!vq || vq->vq_used_cons_idx == vq->vq_ring.used->idx) - return (NULL); + return NULL; VQUEUE_BUSY(vq); @@ -183,6 +155,10 @@ void *virtqueue_get_buffer(struct virtqueue *vq, uint32_t *len, uint16_t *idx) atomic_thread_fence(memory_order_seq_cst); + /* Used.ring is written by remote, invalidate it */ + VRING_INVALIDATE(&vq->vq_ring.used->ring[used_idx], + sizeof(vq->vq_ring.used->ring[used_idx])); + desc_idx = (uint16_t)uep->id; if (len) *len = uep->len; @@ -201,15 +177,18 @@ void *virtqueue_get_buffer(struct virtqueue *vq, uint32_t *len, uint16_t *idx) uint32_t virtqueue_get_buffer_length(struct virtqueue *vq, uint16_t idx) { + VRING_INVALIDATE(&vq->vq_ring.desc[idx].len, + sizeof(vq->vq_ring.desc[idx].len)); return vq->vq_ring.desc[idx].len; } -/** - * virtqueue_free - Frees VirtIO queue resources - * - * @param vq - Pointer to VirtIO queue control block - * - */ +void *virtqueue_get_buffer_addr(struct virtqueue *vq, uint16_t idx) +{ + VRING_INVALIDATE(&vq->vq_ring.desc[idx].addr, + sizeof(vq->vq_ring.desc[idx].addr)); + return virtqueue_phys_to_virt(vq, vq->vq_ring.desc[idx].addr); +} + void virtqueue_free(struct virtqueue *vq) { if (vq) { @@ -223,16 +202,6 @@ void virtqueue_free(struct virtqueue *vq) } } -/** - * virtqueue_get_available_buffer - Returns buffer available for use in the - * VirtIO queue - * - * @param vq - Pointer to VirtIO queue control block - * @param avail_idx - Pointer to index used in vring desc table - * @param len - Length of buffer - * - * @return - Pointer to available buffer - */ void *virtqueue_get_available_buffer(struct virtqueue *vq, uint16_t *avail_idx, uint32_t *len) { @@ -240,6 +209,9 @@ void *virtqueue_get_available_buffer(struct virtqueue *vq, uint16_t *avail_idx, void *buffer; atomic_thread_fence(memory_order_seq_cst); + + /* Avail.idx is updated by driver, invalidate it */ + VRING_INVALIDATE(&vq->vq_ring.avail->idx, sizeof(vq->vq_ring.avail->idx)); if (vq->vq_available_idx == vq->vq_ring.avail->idx) { return NULL; } @@ -247,8 +219,15 @@ void *virtqueue_get_available_buffer(struct virtqueue *vq, uint16_t *avail_idx, VQUEUE_BUSY(vq); head_idx = vq->vq_available_idx++ & (vq->vq_nentries - 1); + + /* Avail.ring is updated by driver, invalidate it */ + VRING_INVALIDATE(&vq->vq_ring.avail->ring[head_idx], + sizeof(vq->vq_ring.avail->ring[head_idx])); *avail_idx = vq->vq_ring.avail->ring[head_idx]; + /* Invalidate the desc entry written by driver before accessing it */ + VRING_INVALIDATE(&vq->vq_ring.desc[*avail_idx], + sizeof(vq->vq_ring.desc[*avail_idx])); buffer = virtqueue_phys_to_virt(vq, vq->vq_ring.desc[*avail_idx].addr); *len = vq->vq_ring.desc[*avail_idx].len; @@ -257,78 +236,89 @@ void *virtqueue_get_available_buffer(struct virtqueue *vq, uint16_t *avail_idx, return buffer; } -/** - * virtqueue_add_consumed_buffer - Returns consumed buffer back to VirtIO queue - * - * @param vq - Pointer to VirtIO queue control block - * @param head_idx - Index of vring desc containing used buffer - * @param len - Length of buffer - * - * @return - Function status - */ int virtqueue_add_consumed_buffer(struct virtqueue *vq, uint16_t head_idx, uint32_t len) { struct vring_used_elem *used_desc = NULL; uint16_t used_idx; - if (head_idx > vq->vq_nentries) { + if (head_idx >= vq->vq_nentries) { return ERROR_VRING_NO_BUFF; } VQUEUE_BUSY(vq); + /* CACHE: used is never written by driver, so it's safe to directly access it */ used_idx = vq->vq_ring.used->idx & (vq->vq_nentries - 1); used_desc = &vq->vq_ring.used->ring[used_idx]; used_desc->id = head_idx; used_desc->len = len; + /* We still need to flush it because this is read by driver */ + VRING_FLUSH(&vq->vq_ring.used->ring[used_idx], + sizeof(vq->vq_ring.used->ring[used_idx])); + atomic_thread_fence(memory_order_seq_cst); vq->vq_ring.used->idx++; + /* Used.idx is read by driver, so we need to flush it */ + VRING_FLUSH(&vq->vq_ring.used->idx, sizeof(vq->vq_ring.used->idx)); + + /* Keep pending count until virtqueue_notify(). */ + vq->vq_queued_cnt++; + VQUEUE_IDLE(vq); return VQUEUE_SUCCESS; } -/** - * virtqueue_enable_cb - Enables callback generation - * - * @param vq - Pointer to VirtIO queue control block - * - * @return - Function status - */ int virtqueue_enable_cb(struct virtqueue *vq) { return vq_ring_enable_interrupt(vq, 0); } -/** - * virtqueue_enable_cb - Disables callback generation - * - * @param vq - Pointer to VirtIO queue control block - * - */ void virtqueue_disable_cb(struct virtqueue *vq) { VQUEUE_BUSY(vq); - if (vq->vq_flags & VIRTQUEUE_FLAG_EVENT_IDX) { - vring_used_event(&vq->vq_ring) = - vq->vq_used_cons_idx - vq->vq_nentries - 1; + if (vq->vq_dev->features & VIRTIO_RING_F_EVENT_IDX) { +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + vring_used_event(&vq->vq_ring) = + vq->vq_used_cons_idx - vq->vq_nentries - 1; + VRING_FLUSH(&vring_used_event(&vq->vq_ring), + sizeof(vring_used_event(&vq->vq_ring))); + } +#endif /*VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DEVICE) { + vring_avail_event(&vq->vq_ring) = + vq->vq_available_idx - vq->vq_nentries - 1; + VRING_FLUSH(&vring_avail_event(&vq->vq_ring), + sizeof(vring_avail_event(&vq->vq_ring))); + } +#endif /*VIRTIO_DRIVER_ONLY*/ } else { - vq->vq_ring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT; +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + vq->vq_ring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT; + VRING_FLUSH(&vq->vq_ring.avail->flags, + sizeof(vq->vq_ring.avail->flags)); + } +#endif /*VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DEVICE) { + vq->vq_ring.used->flags |= VRING_USED_F_NO_NOTIFY; + VRING_FLUSH(&vq->vq_ring.used->flags, + sizeof(vq->vq_ring.used->flags)); + } +#endif /*VIRTIO_DRIVER_ONLY*/ } VQUEUE_IDLE(vq); } -/** - * virtqueue_kick - Notifies other side that there is buffer available for it. - * - * @param vq - Pointer to VirtIO queue control block - */ void virtqueue_kick(struct virtqueue *vq) { VQUEUE_BUSY(vq); @@ -336,48 +326,42 @@ void virtqueue_kick(struct virtqueue *vq) /* Ensure updated avail->idx is visible to host. */ atomic_thread_fence(memory_order_seq_cst); - if (vq_ring_must_notify_host(vq)) - vq_ring_notify_host(vq); + if (vq_ring_must_notify(vq)) + vq_ring_notify(vq); vq->vq_queued_cnt = 0; VQUEUE_IDLE(vq); } -/** - * virtqueue_dump Dumps important virtqueue fields , use for debugging purposes - * - * @param vq - Pointer to VirtIO queue control block - */ void virtqueue_dump(struct virtqueue *vq) { if (!vq) return; + VRING_INVALIDATE(&vq->vq_ring.avail, sizeof(vq->vq_ring.avail)); + VRING_INVALIDATE(&vq->vq_ring.used, sizeof(vq->vq_ring.used)); + metal_log(METAL_LOG_DEBUG, - "VQ: %s - size=%d; free=%d; used=%d; queued=%d; " - "desc_head_idx=%d; avail.idx=%d; used_cons_idx=%d; " + "VQ: %s - size=%d; free=%d; queued=%d; desc_head_idx=%d; " + "available_idx=%d; avail.idx=%d; used_cons_idx=%d; " "used.idx=%d; avail.flags=0x%x; used.flags=0x%x\r\n", vq->vq_name, vq->vq_nentries, vq->vq_free_cnt, - virtqueue_nused(vq), vq->vq_queued_cnt, vq->vq_desc_head_idx, + vq->vq_queued_cnt, vq->vq_desc_head_idx, vq->vq_available_idx, vq->vq_ring.avail->idx, vq->vq_used_cons_idx, vq->vq_ring.used->idx, vq->vq_ring.avail->flags, vq->vq_ring.used->flags); } -/** - * virtqueue_get_desc_size - Returns vring descriptor size - * - * @param vq - Pointer to VirtIO queue control block - * - * @return - Descriptor length - */ uint32_t virtqueue_get_desc_size(struct virtqueue *vq) { uint16_t head_idx = 0; uint16_t avail_idx = 0; uint32_t len = 0; + /* Avail.idx is updated by driver, invalidate it */ + VRING_INVALIDATE(&vq->vq_ring.avail->idx, sizeof(vq->vq_ring.avail->idx)); + if (vq->vq_available_idx == vq->vq_ring.avail->idx) { return 0; } @@ -385,7 +369,16 @@ uint32_t virtqueue_get_desc_size(struct virtqueue *vq) VQUEUE_BUSY(vq); head_idx = vq->vq_available_idx & (vq->vq_nentries - 1); + + /* Avail.ring is updated by driver, invalidate it */ + VRING_INVALIDATE(&vq->vq_ring.avail->ring[head_idx], + sizeof(vq->vq_ring.avail->ring[head_idx])); avail_idx = vq->vq_ring.avail->ring[head_idx]; + + /* Invalidate the desc entry written by driver before accessing it */ + VRING_INVALIDATE(&vq->vq_ring.desc[avail_idx].len, + sizeof(vq->vq_ring.desc[avail_idx].len)); + len = vq->vq_ring.desc[avail_idx].len; VQUEUE_IDLE(vq); @@ -397,7 +390,7 @@ uint32_t virtqueue_get_desc_size(struct virtqueue *vq) * Helper Functions * **************************************************************************/ -/** +/* * * vq_ring_add_buffer * @@ -419,6 +412,7 @@ static uint16_t vq_ring_add_buffer(struct virtqueue *vq, VQASSERT(vq, idx != VQ_RING_DESC_CHAIN_END, "premature end of free desc chain"); + /* CACHE: No need to invalidate desc because it is only written by driver */ dp = &desc[idx]; dp->addr = virtqueue_virt_to_phys(vq, buf_list[i].buf); dp->len = buf_list[i].len; @@ -433,12 +427,19 @@ static uint16_t vq_ring_add_buffer(struct virtqueue *vq, */ if (i >= readable) dp->flags |= VRING_DESC_F_WRITE; + + /* + * Instead of flushing the whole desc region, we flush only the + * single entry hopefully saving some cycles + */ + VRING_FLUSH(&desc[idx], sizeof(desc[idx])); + } - return (idx); + return idx; } -/** +/* * * vq_ring_free_chain * @@ -448,6 +449,7 @@ static void vq_ring_free_chain(struct virtqueue *vq, uint16_t desc_idx) struct vring_desc *dp; struct vq_desc_extra *dxp; + /* CACHE: desc is never written by remote, no need to invalidate */ VQ_RING_ASSERT_VALID_IDX(vq, desc_idx); dp = &vq->vq_ring.desc[desc_idx]; dxp = &vq->vq_descx[desc_idx]; @@ -467,19 +469,21 @@ static void vq_ring_free_chain(struct virtqueue *vq, uint16_t desc_idx) } } - VQASSERT(vq, (dxp->ndescs == 0), + VQASSERT(vq, dxp->ndescs == 0, "failed to free entire desc chain, remaining"); /* * We must append the existing free chain, if any, to the end of * newly freed chain. If the virtqueue was completely used, then * head would be VQ_RING_DESC_CHAIN_END (ASSERTed above). + * + * CACHE: desc.next is never read by remote, no need to flush it. */ dp->next = vq->vq_desc_head_idx; vq->vq_desc_head_idx = desc_idx; } -/** +/* * * vq_ring_init * @@ -487,19 +491,25 @@ static void vq_ring_free_chain(struct virtqueue *vq, uint16_t desc_idx) static void vq_ring_init(struct virtqueue *vq, void *ring_mem, int alignment) { struct vring *vr; - int i, size; + int size; size = vq->vq_nentries; vr = &vq->vq_ring; - vring_init(vr, size, (unsigned char *)ring_mem, alignment); + vring_init(vr, size, ring_mem, alignment); + +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + int i; - for (i = 0; i < size - 1; i++) - vr->desc[i].next = i + 1; - vr->desc[i].next = VQ_RING_DESC_CHAIN_END; + for (i = 0; i < size - 1; i++) + vr->desc[i].next = i + 1; + vr->desc[i].next = VQ_RING_DESC_CHAIN_END; + } +#endif /*VIRTIO_DEVICE_ONLY*/ } -/** +/* * * vq_ring_update_avail * @@ -514,19 +524,28 @@ static void vq_ring_update_avail(struct virtqueue *vq, uint16_t desc_idx) * deferring to virtqueue_notify() in the hopes that if the host is * currently running on another CPU, we can keep it processing the new * descriptor. + * + * CACHE: avail is never written by remote, so it is safe to not invalidate here */ avail_idx = vq->vq_ring.avail->idx & (vq->vq_nentries - 1); vq->vq_ring.avail->ring[avail_idx] = desc_idx; + /* We still need to flush the ring */ + VRING_FLUSH(&vq->vq_ring.avail->ring[avail_idx], + sizeof(vq->vq_ring.avail->ring[avail_idx])); + atomic_thread_fence(memory_order_seq_cst); vq->vq_ring.avail->idx++; + /* And the index */ + VRING_FLUSH(&vq->vq_ring.avail->idx, sizeof(vq->vq_ring.avail->idx)); + /* Keep pending count until virtqueue_notify(). */ vq->vq_queued_cnt++; } -/** +/* * * vq_ring_enable_interrupt * @@ -537,10 +556,38 @@ static int vq_ring_enable_interrupt(struct virtqueue *vq, uint16_t ndesc) * Enable interrupts, making sure we get the latest index of * what's already been consumed. */ - if (vq->vq_flags & VIRTQUEUE_FLAG_EVENT_IDX) { - vring_used_event(&vq->vq_ring) = vq->vq_used_cons_idx + ndesc; + if (vq->vq_dev->features & VIRTIO_RING_F_EVENT_IDX) { +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + vring_used_event(&vq->vq_ring) = + vq->vq_used_cons_idx + ndesc; + VRING_FLUSH(&vring_used_event(&vq->vq_ring), + sizeof(vring_used_event(&vq->vq_ring))); + } +#endif /*VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DEVICE) { + vring_avail_event(&vq->vq_ring) = + vq->vq_available_idx + ndesc; + VRING_FLUSH(&vring_avail_event(&vq->vq_ring), + sizeof(vring_avail_event(&vq->vq_ring))); + } +#endif /*VIRTIO_DRIVER_ONLY*/ } else { - vq->vq_ring.avail->flags &= ~VRING_AVAIL_F_NO_INTERRUPT; +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + vq->vq_ring.avail->flags &= ~VRING_AVAIL_F_NO_INTERRUPT; + VRING_FLUSH(&vq->vq_ring.avail->flags, + sizeof(vq->vq_ring.avail->flags)); + } +#endif /*VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DEVICE) { + vq->vq_ring.used->flags &= ~VRING_USED_F_NO_NOTIFY; + VRING_FLUSH(&vq->vq_ring.used->flags, + sizeof(vq->vq_ring.used->flags)); + } +#endif /*VIRTIO_DRIVER_ONLY*/ } atomic_thread_fence(memory_order_seq_cst); @@ -550,14 +597,25 @@ static int vq_ring_enable_interrupt(struct virtqueue *vq, uint16_t ndesc) * since we last checked. Let our caller know so it processes the new * entries. */ - if (virtqueue_nused(vq) > ndesc) { - return 1; +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + if (virtqueue_nused(vq) > ndesc) { + return 1; + } } +#endif /*VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DEVICE) { + if (virtqueue_navail(vq) > ndesc) { + return 1; + } + } +#endif /*VIRTIO_DRIVER_ONLY*/ return 0; } -/** +/* * * virtqueue_interrupt * @@ -569,46 +627,85 @@ void virtqueue_notification(struct virtqueue *vq) vq->callback(vq); } -/** +/* * - * vq_ring_must_notify_host + * vq_ring_must_notify * */ -static int vq_ring_must_notify_host(struct virtqueue *vq) +static int vq_ring_must_notify(struct virtqueue *vq) { uint16_t new_idx, prev_idx, event_idx; - if (vq->vq_flags & VIRTQUEUE_FLAG_EVENT_IDX) { - new_idx = vq->vq_ring.avail->idx; - prev_idx = new_idx - vq->vq_queued_cnt; - event_idx = vring_avail_event(&vq->vq_ring); - - return (vring_need_event(event_idx, new_idx, prev_idx) != 0); + if (vq->vq_dev->features & VIRTIO_RING_F_EVENT_IDX) { +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + /* CACHE: no need to invalidate avail */ + new_idx = vq->vq_ring.avail->idx; + prev_idx = new_idx - vq->vq_queued_cnt; + VRING_INVALIDATE(&vring_avail_event(&vq->vq_ring), + sizeof(vring_avail_event(&vq->vq_ring))); + event_idx = vring_avail_event(&vq->vq_ring); + return vring_need_event(event_idx, new_idx, + prev_idx) != 0; + } +#endif /*VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DEVICE) { + /* CACHE: no need to invalidate used */ + new_idx = vq->vq_ring.used->idx; + prev_idx = new_idx - vq->vq_queued_cnt; + VRING_INVALIDATE(&vring_used_event(&vq->vq_ring), + sizeof(vring_used_event(&vq->vq_ring))); + event_idx = vring_used_event(&vq->vq_ring); + return vring_need_event(event_idx, new_idx, + prev_idx) != 0; + } +#endif /*VIRTIO_DRIVER_ONLY*/ + } else { +#ifndef VIRTIO_DEVICE_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DRIVER) { + VRING_INVALIDATE(&vq->vq_ring.used->flags, + sizeof(vq->vq_ring.used->flags)); + return (vq->vq_ring.used->flags & + VRING_USED_F_NO_NOTIFY) == 0; + } +#endif /*VIRTIO_DEVICE_ONLY*/ +#ifndef VIRTIO_DRIVER_ONLY + if (vq->vq_dev->role == VIRTIO_DEV_DEVICE) { + VRING_INVALIDATE(&vq->vq_ring.avail->flags, + sizeof(vq->vq_ring.avail->flags)); + return (vq->vq_ring.avail->flags & + VRING_AVAIL_F_NO_INTERRUPT) == 0; + } +#endif /*VIRTIO_DRIVER_ONLY*/ } - return ((vq->vq_ring.used->flags & VRING_USED_F_NO_NOTIFY) == 0); + return 0; } -/** +/* * - * vq_ring_notify_host + * vq_ring_notify * */ -static void vq_ring_notify_host(struct virtqueue *vq) +static void vq_ring_notify(struct virtqueue *vq) { if (vq->notify) vq->notify(vq); } -/** +/* * * virtqueue_nused * */ +#ifndef VIRTIO_DEVICE_ONLY static int virtqueue_nused(struct virtqueue *vq) { uint16_t used_idx, nused; + /* Used is written by remote */ + VRING_INVALIDATE(&vq->vq_ring.used->idx, sizeof(vq->vq_ring.used->idx)); used_idx = vq->vq_ring.used->idx; nused = (uint16_t)(used_idx - vq->vq_used_cons_idx); @@ -616,3 +713,26 @@ static int virtqueue_nused(struct virtqueue *vq) return nused; } +#endif /*VIRTIO_DEVICE_ONLY*/ + +/* + * + * virtqueue_navail + * + */ +#ifndef VIRTIO_DRIVER_ONLY +static int virtqueue_navail(struct virtqueue *vq) +{ + uint16_t avail_idx, navail; + + /* Avail is written by driver */ + VRING_INVALIDATE(&vq->vq_ring.avail->idx, sizeof(vq->vq_ring.avail->idx)); + + avail_idx = vq->vq_ring.avail->idx; + + navail = (uint16_t)(avail_idx - vq->vq_available_idx); + VQASSERT(vq, navail <= vq->vq_nentries, "avail more than available"); + + return navail; +} +#endif /*VIRTIO_DRIVER_ONLY*/ diff --git a/libraries/rpclib/src/rpc/client.cc b/libraries/rpclib/src/rpc/client.cc deleted file mode 100644 index 13f57021e..000000000 --- a/libraries/rpclib/src/rpc/client.cc +++ /dev/null @@ -1,249 +0,0 @@ -#include "rpc/client.h" -#include "rpc/config.h" -#include "rpc/rpc_error.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "asio.hpp" -#include "format.h" - -#include "rpc/detail/async_writer.h" -#include "rpc/detail/dev_utils.h" -#include "rpc/detail/response.h" - -using namespace RPCLIB_ASIO; -using RPCLIB_ASIO::ip::tcp; -using namespace rpc::detail; - -namespace rpc { - -static constexpr uint32_t default_buffer_size = rpc::constants::DEFAULT_BUFFER_SIZE; - -struct client::impl { - impl(client *parent, std::string const &addr, uint16_t port) - : parent_(parent), - io_(), - strand_(io_), - call_idx_(0), - addr_(addr), - port_(port), - is_connected_(false), - state_(client::connection_state::initial), - writer_(std::make_shared( - &io_, RPCLIB_ASIO::ip::tcp::socket(io_))), - timeout_(nonstd::nullopt) { - pac_.reserve_buffer(default_buffer_size); - } - - void do_connect(tcp::resolver::iterator endpoint_iterator) { - LOG_INFO("Initiating connection."); - RPCLIB_ASIO::async_connect( - writer_->socket_, endpoint_iterator, - [this](std::error_code ec, tcp::resolver::iterator) { - if (!ec) { - std::unique_lock lock(mut_connection_finished_); - LOG_INFO("Client connected to {}:{}", addr_, port_); - is_connected_ = true; - state_ = client::connection_state::connected; - conn_finished_.notify_all(); - do_read(); - } else { - LOG_ERROR("Error during connection: {}", ec); - } - }); - } - - void do_read() { - LOG_TRACE("do_read"); - constexpr std::size_t max_read_bytes = default_buffer_size; - writer_->socket_.async_read_some( - RPCLIB_ASIO::buffer(pac_.buffer(), max_read_bytes), - // I don't think max_read_bytes needs to be captured explicitly - // (since it's constexpr), but MSVC insists. - [this, max_read_bytes](std::error_code ec, std::size_t length) { - if (!ec) { - LOG_TRACE("Read chunk of size {}", length); - pac_.buffer_consumed(length); - - RPCLIB_MSGPACK::unpacked result; - while (pac_.next(result)) { - auto r = response(std::move(result)); - auto id = r.get_id(); - auto ¤t_call = ongoing_calls_[id]; - try { - if (r.get_error()) { - throw rpc_error("rpc::rpc_error during call", - std::get<0>(current_call), - r.get_error()); - } - std::get<1>(current_call) - .set_value(std::move(*r.get_result())); - } catch (...) { - std::get<1>(current_call) - .set_exception(std::current_exception()); - } - strand_.post( - [this, id]() { ongoing_calls_.erase(id); }); - } - - // resizing strategy: if the remaining buffer size is - // less than the maximum bytes requested from asio, - // then request max_read_bytes. This prompts the unpacker - // to resize its buffer doubling its size - // (https://github.com/msgpack/msgpack-c/issues/567#issuecomment-280810018) - if (pac_.buffer_capacity() < max_read_bytes) { - LOG_TRACE("Reserving extra buffer: {}", max_read_bytes); - pac_.reserve_buffer(max_read_bytes); - } - do_read(); - } else if (ec == RPCLIB_ASIO::error::eof) { - LOG_WARN("The server closed the connection."); - state_ = client::connection_state::disconnected; - } else if (ec == RPCLIB_ASIO::error::connection_reset) { - // Yes, this should be connection_state::reset, - // but on windows, disconnection results in reset. May be - // asio bug, may be a windows socket pecularity. Should be - // investigated later. - state_ = client::connection_state::disconnected; - LOG_WARN("The connection was reset."); - } else { - LOG_ERROR("Unhandled error code: {} | '{}'", ec, - ec.message()); - } - }); - } - - client::connection_state get_connection_state() const { return state_; } - - //! \brief Waits for the write queue and writes any buffers to the network - //! connection. Should be executed throught strand_. - void write(RPCLIB_MSGPACK::sbuffer item) { - writer_->write(std::move(item)); - } - - nonstd::optional get_timeout() { - return timeout_; - } - - void set_timeout(int64_t value) { - timeout_ = value; - } - - void clear_timeout() { - timeout_ = nonstd::nullopt; - } - - using call_t = - std::pair>; - - client *parent_; - RPCLIB_ASIO::io_service io_; - RPCLIB_ASIO::strand strand_; - std::atomic call_idx_; /// The index of the last call made - std::unordered_map ongoing_calls_; - std::string addr_; - uint16_t port_; - RPCLIB_MSGPACK::unpacker pac_; - std::atomic_bool is_connected_; - std::condition_variable conn_finished_; - std::mutex mut_connection_finished_; - std::thread io_thread_; - std::atomic state_; - std::shared_ptr writer_; - nonstd::optional timeout_; - RPCLIB_CREATE_LOG_CHANNEL(client) -}; - -client::client(std::string const &addr, uint16_t port) - : pimpl(new client::impl(this, addr, port)) { - tcp::resolver resolver(pimpl->io_); - auto endpoint_it = - resolver.resolve({pimpl->addr_, std::to_string(pimpl->port_)}); - pimpl->do_connect(endpoint_it); - std::thread io_thread([this]() { - RPCLIB_CREATE_LOG_CHANNEL(client) - name_thread("client"); - pimpl->io_.run(); - }); - pimpl->io_thread_ = std::move(io_thread); -} - -void client::wait_conn() { - std::unique_lock lock(pimpl->mut_connection_finished_); - if (!pimpl->is_connected_) { - if (auto timeout = pimpl->timeout_) { - auto result = pimpl->conn_finished_.wait_for( - lock, std::chrono::milliseconds(*timeout)); - if (result == std::cv_status::timeout) { - throw rpc::timeout(RPCLIB_FMT::format( - "Timeout of {}ms while connecting to {}:{}", *get_timeout(), - pimpl->addr_, pimpl->port_)); - } - } else { - pimpl->conn_finished_.wait(lock); - } - } -} - -int client::get_next_call_idx() { - ++(pimpl->call_idx_); - return pimpl->call_idx_; -} - -void client::post(std::shared_ptr buffer, int idx, - std::string const &func_name, - std::shared_ptr p) { - pimpl->strand_.post([=]() { - pimpl->ongoing_calls_.insert( - std::make_pair(idx, std::make_pair(func_name, std::move(*p)))); - pimpl->write(std::move(*buffer)); - }); -} - -void client::post(RPCLIB_MSGPACK::sbuffer *buffer) { - pimpl->strand_.post([=]() { - pimpl->write(std::move(*buffer)); - delete buffer; - }); -} - -client::connection_state client::get_connection_state() const { - return pimpl->get_connection_state(); -} - -nonstd::optional client::get_timeout() const { - return pimpl->get_timeout(); -} - -void client::set_timeout(int64_t value) { - pimpl->set_timeout(value); -} - -void client::clear_timeout() { - pimpl->clear_timeout(); -} - -void client::wait_all_responses() { - for (auto &c : pimpl->ongoing_calls_) { - c.second.second.get_future().wait(); - } -} - -RPCLIB_NORETURN void client::throw_timeout(std::string const& func_name) { - throw rpc::timeout( - RPCLIB_FMT::format("Timeout of {}ms while calling RPC function '{}'", - *get_timeout(), func_name)); -} - -client::~client() { - pimpl->io_.stop(); - pimpl->io_thread_.join(); -} - -} diff --git a/libraries/rpclib/src/rpc/client.h b/libraries/rpclib/src/rpc/client.h index 613c91fae..fcd16ebe3 100644 --- a/libraries/rpclib/src/rpc/client.h +++ b/libraries/rpclib/src/rpc/client.h @@ -88,7 +88,7 @@ class client { //! //! \param func_name The name of the notification to call. //! \param args The arguments to pass to the function. - //! \tparam Args THe types of the arguments. + //! \tparam Args The types of the arguments. //! //! \note This function returns immediately (possibly before the //! notification is written to the socket). @@ -144,4 +144,4 @@ class client { }; } -//#include "rpc/client.inl" +#include "rpc/client.inl" diff --git a/libraries/rpclib/src/rpc/client.inl b/libraries/rpclib/src/rpc/client.inl index 04dc825b4..f980f069b 100644 --- a/libraries/rpclib/src/rpc/client.inl +++ b/libraries/rpclib/src/rpc/client.inl @@ -47,7 +47,7 @@ client::async_call(std::string const &func_name, Args... args) { //! \param args The arguments to pass to the function. //! \note This function returns when the notification is written to the //! socket. -//! \tparam Args THe types of the arguments. +//! \tparam Args The types of the arguments. template void client::send(std::string const &func_name, Args... args) { RPCLIB_CREATE_LOG_CHANNEL(client) diff --git a/libraries/rpclib/src/rpc/detail/async_writer.h b/libraries/rpclib/src/rpc/detail/async_writer.h index 66488ff6b..508500a7a 100644 --- a/libraries/rpclib/src/rpc/detail/async_writer.h +++ b/libraries/rpclib/src/rpc/detail/async_writer.h @@ -23,6 +23,27 @@ class async_writer : public std::enable_shared_from_this { RPCLIB_ASIO::ip::tcp::socket socket) : socket_(std::move(socket)), write_strand_(*io), exit_(false) {} + void close() { + exit_ = true; + + auto self = shared_from_this(); + write_strand_.post([this, self]() { + LOG_INFO("Closing socket"); + std::error_code e; + socket_.shutdown( + RPCLIB_ASIO::ip::tcp::socket::shutdown_both, e); + if (e) { + LOG_WARN("std::system_error during socket shutdown. " + "Code: {}. Message: {}", e.value(), e.message()); + } + socket_.close(); + }); + } + + bool is_closed() const { + return exit_.load(); + } + void do_write() { if (exit_) { return; @@ -46,20 +67,6 @@ class async_writer : public std::enable_shared_from_this { } else { LOG_ERROR("Error while writing to socket: {}", ec); } - - if (exit_) { - LOG_INFO("Closing socket"); - try { - socket_.shutdown( - RPCLIB_ASIO::ip::tcp::socket::shutdown_both); - } - catch (std::system_error &e) { - (void)e; - LOG_WARN("std::system_error during socket shutdown. " - "Code: {}. Message: {}", e.code(), e.what()); - } - socket_.close(); - } })); } @@ -72,7 +79,9 @@ class async_writer : public std::enable_shared_from_this { do_write(); } - friend class rpc::client; + RPCLIB_ASIO::ip::tcp::socket& socket() { + return socket_; + } protected: template @@ -80,15 +89,14 @@ class async_writer : public std::enable_shared_from_this { return std::static_pointer_cast(shared_from_this()); } -protected: + RPCLIB_ASIO::strand& write_strand() { + return write_strand_; + } + +private: RPCLIB_ASIO::ip::tcp::socket socket_; RPCLIB_ASIO::strand write_strand_; std::atomic_bool exit_{false}; - bool exited_ = false; - std::mutex m_exit_; - std::condition_variable cv_exit_; - -private: std::deque write_queue_; RPCLIB_CREATE_LOG_CHANNEL(async_writer) }; diff --git a/libraries/rpclib/src/rpc/detail/log.h b/libraries/rpclib/src/rpc/detail/log.h index 0d5e51c61..09db735a6 100644 --- a/libraries/rpclib/src/rpc/detail/log.h +++ b/libraries/rpclib/src/rpc/detail/log.h @@ -83,11 +83,19 @@ class logger { std::stringstream ss; timespec now_t = {}; clock_gettime(CLOCK_REALTIME, &now_t); +#if __GNUC__ >= 5 ss << std::put_time( std::localtime(reinterpret_cast(&now_t.tv_sec)), "%F %T") - << RPCLIB_FMT::format( +#else + char mltime[128]; + strftime(mltime, sizeof(mltime), "%c %Z", + std::localtime(reinterpret_cast(&now_t.tv_sec))); + ss << mltime +#endif + << RPCLIB_FMT::format( ".{:03}", round(static_cast(now_t.tv_nsec) / 1.0e6)); + return ss.str(); } #endif diff --git a/libraries/rpclib/src/rpc/detail/server_session.cc b/libraries/rpclib/src/rpc/detail/server_session.cc deleted file mode 100644 index d6f89177b..000000000 --- a/libraries/rpclib/src/rpc/detail/server_session.cc +++ /dev/null @@ -1,146 +0,0 @@ -#include "rpc/detail/server_session.h" - -#include "rpc/config.h" -#include "rpc/server.h" -#include "rpc/this_handler.h" -#include "rpc/this_server.h" -#include "rpc/this_session.h" - -#include "rpc/detail/log.h" - -namespace rpc { -namespace detail { - -static constexpr std::size_t default_buffer_size = - rpc::constants::DEFAULT_BUFFER_SIZE; - -server_session::server_session(server *srv, RPCLIB_ASIO::io_service *io, - RPCLIB_ASIO::ip::tcp::socket socket, - std::shared_ptr disp, - bool suppress_exceptions) - : async_writer(io, std::move(socket)), - parent_(srv), - io_(io), - read_strand_(*io), - disp_(disp), - pac_(), - suppress_exceptions_(suppress_exceptions) { - pac_.reserve_buffer(default_buffer_size); // TODO: make this configurable - // [sztomi 2016-01-13] -} - -void server_session::start() { do_read(); } - -void server_session::close() { - LOG_INFO("Closing session."); - exit_ = true; - write_strand_.post([this]() { - socket_.close(); - parent_->close_session(shared_from_base()); - }); -} - -void server_session::do_read() { - auto self(shared_from_base()); - constexpr std::size_t max_read_bytes = default_buffer_size; - socket_.async_read_some( - RPCLIB_ASIO::buffer(pac_.buffer(), default_buffer_size), - // I don't think max_read_bytes needs to be captured explicitly - // (since it's constexpr), but MSVC insists. - read_strand_.wrap([this, self, max_read_bytes](std::error_code ec, - std::size_t length) { - if (exit_) { return; } - if (!ec) { - pac_.buffer_consumed(length); - RPCLIB_MSGPACK::unpacked result; - while (pac_.next(result) && !exit_) { - auto msg = result.get(); - output_buf_.clear(); - - // any worker thread can take this call - auto z = std::shared_ptr( - result.zone().release()); - io_->post([this, msg, z]() { - this_handler().clear(); - this_session().clear(); - this_session().set_id(reinterpret_cast(this)); - this_server().cancel_stop(); - - auto resp = disp_->dispatch(msg, suppress_exceptions_); - - // There are various things that decide what to send - // as a response. They have a precedence. - - // First, if the response is disabled, that wins - // So You Get Nothing, You Lose! Good Day Sir! - if (!this_handler().resp_enabled_) { - return; - } - - // Second, if there is an error set, we send that - // and only third, if there is a special response, we - // use it - if (!this_handler().error_.get().is_nil()) { - LOG_WARN("There was an error set in the handler"); - resp.capture_error(this_handler().error_); - } else if (!this_handler().resp_.get().is_nil()) { - LOG_WARN("There was a special result set in the " - "handler"); - resp.capture_result(this_handler().resp_); - } - - if (!resp.is_empty()) { -#ifdef _MSC_VER - // doesn't compile otherwise. - write_strand_.post( - [=]() { write(resp.get_data()); }); -#else - write_strand_.post( - [this, resp, z]() { write(resp.get_data()); }); -#endif - } - - if (this_session().exit_) { - LOG_WARN("Session exit requested from a handler."); - // posting through the strand so this comes after - // the previous write - write_strand_.post([this]() { exit_ = true; }); - } - - if (this_server().stopping_) { - LOG_WARN("Server exit requested from a handler."); - // posting through the strand so this comes after - // the previous write - write_strand_.post( - [this]() { parent_->close_sessions(); }); - } - }); - } - - if (!exit_) { - // resizing strategy: if the remaining buffer size is - // less than the maximum bytes requested from asio, - // then request max_read_bytes. This prompts the unpacker - // to resize its buffer doubling its size - // (https://github.com/msgpack/msgpack-c/issues/567#issuecomment-280810018) - if (pac_.buffer_capacity() < max_read_bytes) { - LOG_TRACE("Reserving extra buffer: {}", max_read_bytes); - pac_.reserve_buffer(max_read_bytes); - } - do_read(); - } - } else if (ec == RPCLIB_ASIO::error::eof || - ec == RPCLIB_ASIO::error::connection_reset) { - LOG_INFO("Client disconnected"); - self->close(); - } else { - LOG_ERROR("Unhandled error code: {} | '{}'", ec, ec.message()); - } - })); - if (exit_) { - socket_.close(); - } -} - -} /* detail */ -} /* rpc */ diff --git a/libraries/rpclib/src/rpc/detail/server_session.h b/libraries/rpclib/src/rpc/detail/server_session.h index 0b848142a..3b96d7dae 100644 --- a/libraries/rpclib/src/rpc/detail/server_session.h +++ b/libraries/rpclib/src/rpc/detail/server_session.h @@ -3,6 +3,7 @@ #ifndef SESSION_H_5KG6ZMAB #define SESSION_H_5KG6ZMAB +#include "asio.hpp" #include #include @@ -21,7 +22,9 @@ namespace detail { class server_session : public async_writer { public: - server_session(server *srv, std::shared_ptr disp, bool suppress_exceptions); + server_session(server *srv, RPCLIB_ASIO::io_service *io, + RPCLIB_ASIO::ip::tcp::socket socket, + std::shared_ptr disp, bool suppress_exceptions); void start(); void close(); @@ -31,6 +34,8 @@ class server_session : public async_writer { private: server* parent_; + RPCLIB_ASIO::io_service *io_; + RPCLIB_ASIO::strand read_strand_; std::shared_ptr disp_; RPCLIB_MSGPACK::unpacker pac_; RPCLIB_MSGPACK::sbuffer output_buf_; diff --git a/libraries/rpclib/src/rpc/dispatcher.h b/libraries/rpclib/src/rpc/dispatcher.h index 8044d4cb4..18dca30fc 100644 --- a/libraries/rpclib/src/rpc/dispatcher.h +++ b/libraries/rpclib/src/rpc/dispatcher.h @@ -60,6 +60,19 @@ class dispatcher { detail::tags::nonvoid_result const &, detail::tags::nonzero_arg const &); + //! \brief Unbind a functor with a given name from callable functors. + void unbind(std::string const &name) { + funcs_.erase(name); + } + + //! \brief returns a list of all names which functors are binded to + std::vector names() const { + std::vector names; + for(auto it = funcs_.begin(); it != funcs_.end(); ++it) + names.push_back(it->first); + return names; + } + //! @} //! \brief Processes a message that contains a call according to diff --git a/libraries/rpclib/src/rpc/msgpack/unpack.h b/libraries/rpclib/src/rpc/msgpack/unpack.h index f409dc2e5..14ed3cbc6 100644 --- a/libraries/rpclib/src/rpc/msgpack/unpack.h +++ b/libraries/rpclib/src/rpc/msgpack/unpack.h @@ -66,7 +66,7 @@ typedef struct msgpack_unpacker { #ifndef MSGPACK_UNPACKER_INIT_BUFFER_SIZE -#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE (1024) +#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE (4*1024) #endif /** @@ -98,7 +98,7 @@ void msgpack_unpacker_free(msgpack_unpacker* mpac); #ifndef MSGPACK_UNPACKER_RESERVE_SIZE -#define MSGPACK_UNPACKER_RESERVE_SIZE (1024) +#define MSGPACK_UNPACKER_RESERVE_SIZE (4*1024) #endif /** diff --git a/libraries/rpclib/src/rpc/msgpack/v1/unpack_decl.hpp b/libraries/rpclib/src/rpc/msgpack/v1/unpack_decl.hpp index 3219bd338..11384cfc9 100644 --- a/libraries/rpclib/src/rpc/msgpack/v1/unpack_decl.hpp +++ b/libraries/rpclib/src/rpc/msgpack/v1/unpack_decl.hpp @@ -40,11 +40,11 @@ const size_t COUNTER_SIZE = sizeof(_msgpack_atomic_counter_t); #ifndef MSGPACK_UNPACKER_INIT_BUFFER_SIZE -#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE (1024) +#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE (4*1024) #endif #ifndef MSGPACK_UNPACKER_RESERVE_SIZE -#define MSGPACK_UNPACKER_RESERVE_SIZE (1024) +#define MSGPACK_UNPACKER_RESERVE_SIZE (4*1024) #endif diff --git a/libraries/rpclib/src/rpc/nonstd/optional.cpp b/libraries/rpclib/src/rpc/nonstd/optional.cpp index f80c93197..ac89d2985 100644 --- a/libraries/rpclib/src/rpc/nonstd/optional.cpp +++ b/libraries/rpclib/src/rpc/nonstd/optional.cpp @@ -3,4 +3,6 @@ // This is no-op; the reason it exists is to avoid // the weak vtables problem. For more info, see // https://stackoverflow.com/a/23749273/140367 -nonstd::bad_optional_access::~bad_optional_access() {} +const char* nonstd::bad_optional_access::what() const noexcept { + return std::logic_error::what(); +} diff --git a/libraries/rpclib/src/rpc/nonstd/optional.hpp b/libraries/rpclib/src/rpc/nonstd/optional.hpp index d9888cf47..e6d941d5e 100644 --- a/libraries/rpclib/src/rpc/nonstd/optional.hpp +++ b/libraries/rpclib/src/rpc/nonstd/optional.hpp @@ -564,7 +564,7 @@ class bad_optional_access : public std::logic_error public: explicit bad_optional_access() : logic_error( "bad optional access" ) {} - ~bad_optional_access(); + const char* what() const noexcept; }; /// optional diff --git a/libraries/rpclib/src/rpc/rpc_error.cpp b/libraries/rpclib/src/rpc/rpc_error.cpp index 47e76e6b5..57df42445 100644 --- a/libraries/rpclib/src/rpc/rpc_error.cpp +++ b/libraries/rpclib/src/rpc/rpc_error.cpp @@ -21,4 +21,6 @@ timeout::timeout(std::string const &what_arg) : std::runtime_error(what_arg) { const char *timeout::what() const noexcept { return formatted.data(); } +const char* system_error::what() const noexcept { return std::system_error::what(); } + } /* rpc */ diff --git a/libraries/rpclib/src/rpc/rpc_error.h b/libraries/rpclib/src/rpc/rpc_error.h index e732c45a1..a5895659a 100644 --- a/libraries/rpclib/src/rpc/rpc_error.h +++ b/libraries/rpclib/src/rpc/rpc_error.h @@ -4,6 +4,7 @@ #define RPC_ERROR_H_NEOOSTKY #include +#include #include "rpc/config.h" #include "rpc/msgpack.hpp" @@ -18,6 +19,9 @@ namespace rpc { //! throw it, hence its constructor is private. class rpc_error : public std::runtime_error { public: + rpc_error(std::string const &what_arg, std::string const &function_name, + std::shared_ptr o); + //! \brief Returns the name of the function that was //! called on the server while the error occurred. std::string get_function_name() const; @@ -26,11 +30,6 @@ class rpc_error : public std::runtime_error { //! provided. virtual RPCLIB_MSGPACK::object_handle &get_error(); -private: - friend class client; - rpc_error(std::string const &what_arg, std::string const &function_name, - std::shared_ptr o); - private: std::string func_name_; std::shared_ptr ob_h_; @@ -41,15 +40,23 @@ class rpc_error : public std::runtime_error { //! \note There isn't necessarily a timeout set, it is an optional value. class timeout : public std::runtime_error { public: + explicit timeout(std::string const &what_arg); + //! \brief Describes the exception. const char *what() const noexcept override; private: - friend class client; - explicit timeout(std::string const &what_arg); std::string formatted; }; +//! \brief This exception is throw by the client when the connection or call +//! causes a system error +class system_error : public std::system_error { +public: + using std::system_error::system_error; + const char* what() const noexcept; +}; + } /* rpc */ diff --git a/libraries/rpclib/src/rpc/server.cc b/libraries/rpclib/src/rpc/server.cc deleted file mode 100644 index 1012c6d96..000000000 --- a/libraries/rpclib/src/rpc/server.cc +++ /dev/null @@ -1,138 +0,0 @@ -#include "rpc/server.h" - -#include -#include -#include -#include -#include - -#include "asio.hpp" -#include "format.h" - -#include "rpc/detail/dev_utils.h" -#include "rpc/detail/log.h" -#include "rpc/detail/log.h" -#include "rpc/detail/server_session.h" -#include "rpc/detail/thread_group.h" - -using namespace rpc::detail; -using RPCLIB_ASIO::ip::tcp; -using namespace RPCLIB_ASIO; - -namespace rpc { - -struct server::impl { - impl(server *parent, std::string const &address, uint16_t port) - : parent_(parent), - io_(), - acceptor_(io_, - tcp::endpoint(ip::address::from_string(address), port)), - socket_(io_), - suppress_exceptions_(false) {} - - impl(server *parent, uint16_t port) - : parent_(parent), - io_(), - acceptor_(io_, tcp::endpoint(tcp::v4(), port)), - socket_(io_), - suppress_exceptions_(false) {} - - void start_accept() { - acceptor_.async_accept(socket_, [this](std::error_code ec) { - if (!ec) { - LOG_INFO("Accepted connection."); - auto s = std::make_shared( - parent_, &io_, std::move(socket_), parent_->disp_, - suppress_exceptions_); - s->start(); - sessions_.push_back(s); - } else { - LOG_ERROR("Error while accepting connection: {}", ec); - } - start_accept(); - // TODO: allow graceful exit [sztomi 2016-01-13] - }); - } - - void close_sessions() { - for (auto &session : sessions_) { - session->close(); - } - sessions_.clear(); - } - - void stop() { - io_.stop(); - loop_workers_.join_all(); - } - - server *parent_; - io_service io_; - ip::tcp::acceptor acceptor_; - ip::tcp::socket socket_; - rpc::detail::thread_group loop_workers_; - std::vector> sessions_; - std::atomic_bool suppress_exceptions_; - RPCLIB_CREATE_LOG_CHANNEL(server) -}; - -RPCLIB_CREATE_LOG_CHANNEL(server) - -server::server(uint16_t port) - : pimpl(new server::impl(this, port)), disp_(std::make_shared()) { - LOG_INFO("Created server on localhost:{}", port); - pimpl->start_accept(); -} - -server::server(server&& other) noexcept { - *this = std::move(other); -} - -server::server(std::string const &address, uint16_t port) - : pimpl(new server::impl(this, address, port)), - disp_(std::make_shared()) { - LOG_INFO("Created server on address {}:{}", address, port); - pimpl->start_accept(); -} - -server::~server() { - if (pimpl) { - pimpl->stop(); - } -} - -server& server::operator=(server &&other) { - pimpl = std::move(other.pimpl); - other.pimpl = nullptr; - disp_ = std::move(other.disp_); - other.disp_ = nullptr; - return *this; -} - -void server::suppress_exceptions(bool suppress) { - pimpl->suppress_exceptions_ = suppress; -} - -void server::run() { pimpl->io_.run(); } - -void server::async_run(std::size_t worker_threads) { - pimpl->loop_workers_.create_threads(worker_threads, [this]() { - name_thread("server"); - LOG_INFO("Starting"); - pimpl->io_.run(); - LOG_INFO("Exiting"); - }); -} - -void server::stop() { pimpl->stop(); } - -void server::close_sessions() { pimpl->close_sessions(); } - -void server::close_session(std::shared_ptr const &s) { - auto it = std::find(begin(pimpl->sessions_), end(pimpl->sessions_), s); - if (it != end(pimpl->sessions_)) { - pimpl->sessions_.erase(it); - } -} - -} /* rpc */ diff --git a/libraries/rpclib/src/rpc/server.h b/libraries/rpclib/src/rpc/server.h index f240acf18..baeb9f7c5 100644 --- a/libraries/rpclib/src/rpc/server.h +++ b/libraries/rpclib/src/rpc/server.h @@ -93,6 +93,24 @@ class server { disp_->bind(name, func); } + //! \brief Unbinds a functor binded to a name. + //! + //! This function removes already binded function from RPC Ccallable functions + //! + //! \param name The name of the functor. + void unbind(std::string const &name) { + disp_->unbind(name); + } + + //! \brief Returns all binded names + //! + //! This function returns a list of all names which functors are binded to + //! + //! \param name The name of the functor. + std::vector names() const { + return disp_->names(); + } + //! \brief Sets the exception behavior in handlers. By default, //! handlers throwing will crash the server. If suppressing is on, //! the server will try to gather textual data and return it to @@ -104,12 +122,13 @@ class server { //! \note This should not be called from worker threads. void stop(); + //! \brief Returns port + //! \note The port + unsigned short port() const; + //! \brief Closes all sessions gracefully. void close_sessions(); - friend class detail::server_session; - -private: //! \brief Closes a specific session. void close_session(std::shared_ptr const& s); diff --git a/libraries/rpclib/src/rpc/this_server.h b/libraries/rpclib/src/rpc/this_server.h index 7e8826b69..d1954e4a9 100644 --- a/libraries/rpclib/src/rpc/this_server.h +++ b/libraries/rpclib/src/rpc/this_server.h @@ -19,7 +19,8 @@ class this_server_t { //! \brief Cancels a requested stop operation. void cancel_stop(); - friend class rpc::detail::server_session; + //! Check if a stop is requested + bool stopping() const { return stopping_; } private: bool stopping_; diff --git a/libraries/rpclib/src/rpc/version.h b/libraries/rpclib/src/rpc/version.h index 206c7c64e..47e19e926 100644 --- a/libraries/rpclib/src/rpc/version.h +++ b/libraries/rpclib/src/rpc/version.h @@ -6,7 +6,7 @@ namespace rpc { static constexpr unsigned VERSION_MAJOR = 2; -static constexpr unsigned VERSION_MINOR = 2; +static constexpr unsigned VERSION_MINOR = 3; static constexpr unsigned VERSION_PATCH = 0; } /* rpc */ diff --git a/mbed-os-to-arduino b/mbed-os-to-arduino index 6f5dcb7e9..d919715ee 100755 --- a/mbed-os-to-arduino +++ b/mbed-os-to-arduino @@ -183,25 +183,20 @@ generate_flags () { for fl in c cxx ld; do jq -r '.flags | .[] | select(. != "-MMD")' ./BUILD/"$BOARDNAME"/GCC_ARM${PROFILE}/.profile-${fl} \ > "$ARDUINOVARIANT"/${fl}flags.txt - if [[ $ARDUINOVARIANT == *PORTENTA* || $ARDUINOVARIANT == *GIGA* || $ARDUINOVARIANT == *NICLA_VISION* || $ARDUINOVARIANT == *OPTA* ]]; then + if [[ $ARDUINOVARIANT == *PORTENTA* || $ARDUINOVARIANT == *GIGA* || $ARDUINOVARIANT == *NICLA_VISION* || $ARDUINOVARIANT == *OPTA* || $ARDUINOVARIANT == *GENERIC*M4 ]]; then echo "Patching '-fno-exceptions' flag for $ARDUINOVARIANT/${fl}flags.txt" sed -i '/-fno-exceptions/d' "$ARDUINOVARIANT"/${fl}flags.txt set +e - HAS_OPENAMP_SECTION=`grep openamp_section "$ARDUINOVARIANT"/linker_script.ld` + HAS_PDM_SECTION=`grep pdm_section "$ARDUINOVARIANT"/linker_script.ld` set -e - if [ x"$HAS_OPENAMP_SECTION" == x ]; then - echo "Adding OpenAMP section to $ARDUINOVARIANT/linker_script.ld" - OPENAMP_SECTION=".openamp_section (NOLOAD) : {\n \ - . = ABSOLUTE(0x38000000);\n \ - *(.resource_table)\n \ - } >RAM_D3 AT > FLASH\n \ - .pdm_section (NOLOAD) : {\n \ - . = ABSOLUTE(0x3800FC00);\n \ + if [ x"$HAS_PDM_SECTION" == x ]; then + echo "Adding PDM section to $ARDUINOVARIANT/linker_script.ld" + PDM_SECTION=".pdm_section 0x3800FC00 (NOLOAD): {\n \ *(.pdm_buffer)\n \ } > RAM_D3\n" if [[ $ARDUINOVARIANT == *PORTENTA*M7* || $ARDUINOVARIANT == *GIGA* || $ARDUINOVARIANT == *OPTA* ]]; then - OPENAMP_SECTION="${OPENAMP_SECTION} \ + PDM_SECTION="${PDM_SECTION} \ _dtcm_lma = __etext + SIZEOF(.data);\n \ .dtcm : AT(_dtcm_lma) {\n \ _sdtcm = .;\n \ @@ -210,27 +205,28 @@ generate_flags () { } > DTCMRAM" fi - sed -i "s?.heap (COPY):?${OPENAMP_SECTION}\n .heap (COPY):?g" $ARDUINOVARIANT/linker_script.ld + sed -i "s?.heap (COPY):?${PDM_SECTION}\n .heap (COPY):?g" $ARDUINOVARIANT/linker_script.ld OPENAMP_REGIONS="__OPENAMP_region_start__ = 0x38000400;\n__OPENAMP_region_end__ = 0x38000400 + LENGTH(RAM_D3) - 1K;" sed -i "s?ENTRY(Reset_Handler)?${OPENAMP_REGIONS}\nENTRY(Reset_Handler)?g" $ARDUINOVARIANT/linker_script.ld + + if [[ $ARDUINOVARIANT == *GENERIC*M4 ]]; then + echo "Fixing VTOR base in $ARDUINOVARIANT/linker_script.ld" + VTOR_SECTION="#if (CM4_BINARY_START == 0x60000000)\n \ + REGION_ALIAS(\"RAM\", FLASH);\n \ + #else\n \ + REGION_ALIAS(\"RAM\", RAM_D2);\n \ + #endif\n" + sed -i "s?REGION_ALIAS.*?${VTOR_SECTION}?g" $ARDUINOVARIANT/linker_script.ld + echo "Fixing shared memory attributes in $ARDUINOVARIANT/linker_script.ld" + sed -i "s?.heap (COPY)?.heap (NOLOAD)?g" $ARDUINOVARIANT/linker_script.ld + sed -i "s?.stack_dummy (COPY)?.stack_dummy (NOLOAD)?g" $ARDUINOVARIANT/linker_script.ld + fi fi echo "Patching linker scripts" sed -i 's/0x8100000/CM4_BINARY_START/g' "$ARDUINOVARIANT"/linker_script.ld sed -i 's/LENGTH = 0x200000/LENGTH = CM4_BINARY_END - CM4_BINARY_START/g' "$ARDUINOVARIANT"/linker_script.ld sed -i 's/LENGTH = 0x1c0000/LENGTH = CM4_BINARY_START - 0x8040000/g' "$ARDUINOVARIANT"/linker_script.ld fi - if [[ $ARDUINOVARIANT == *NANO_RP2040* ]]; then - set +e - HAS_2NDSTAGE_SECTION=`grep second_stage_ota "$ARDUINOVARIANT"/linker_script.ld` - set -e - if [ x"$HAS_2NDSTAGE_SECTION" == x ]; then - echo "Adding second stage bootloader section to Nano RP2040 Connect" - SECOND_STAGE_SECTION=".second_stage_ota : {\n \ - KEEP (*(.second_stage_ota))\n \ - } > FLASH" - sed -i "s?.flash_begin?${SECOND_STAGE_SECTION}\n .flash_begin?g" $ARDUINOVARIANT/linker_script.ld - fi - fi done echo " done." } diff --git a/mbed-os-to-arduino-macos b/mbed-os-to-arduino-macos new file mode 100755 index 000000000..bd745a976 --- /dev/null +++ b/mbed-os-to-arduino-macos @@ -0,0 +1,436 @@ +#!/usr/bin/env bash + +########################################################################################### +# mbed-os-to-arduino (macOS Version) +# +# This is an adapted version of the original 'mbed-os-to-arduino' script +# specifically tailored for macOS systems. +# +# Prerequisites: +# - jq (Installation: brew install jq) +# - rsync (Installation: brew install rsync) +# - gcc-arm-embedded (Installation: brew install gcc-arm-embedded) +# - hg (Installation: brew install hg) +# - bash (Installation: brew install bash) +# - python (Installation: brew install python) +# - gnu-utils (Installation: brew install gnu-utils) +# - gnu-sed (Installation: brew install gnu-sed) +# - coreutils (Installation: brew install coreutils) +# - ArduinoCore-mbed requirements (Installation: pip install -r requirements.txt) +# +# Troubleshooting for hidapi installation issues: +# If during the installation of ArduinoCore-mbed requirements 'hidapi' installation fails, +# you can modify the 'requirements.txt' file as follows: +# 1. Open 'requirements.txt' in a text editor +# 2. Locate the line that specifies 'hidapi>=...' +# 3. Change it to 'hidapi' +# 4. Save the file +# 5. Rerun this script to install requirements +# +# Initial Author: Martino Facchin @facchinm +# Authors who have contributed to updates: +# - Giampaolo Mancini @manchoz +# - Leonardo Cavagnis @leonardocavagnis +# +########################################################################################### + +set -ef + +check_tools () { + echo -n "Checking for prerequisites..." + if not hash jq &>/dev/null ; then + echo "Please, install jq." + exit 1 + fi + + if not hash rsync &>/dev/null ; then + echo "Please, install rsync." + exit 1 + fi + echo " done." +} + +mbed_new () { + echo -n "Creating MbedOS Application..." + #always work in /tmp + cd /tmp/ + + if [ ! -d mbed-os-program ]; then + mbed new mbed-os-program + fi + cd mbed-os-program + echo " done." +} + +mbed_revision () { + echo -n "Checking out preferred 'mbed-os' version..." + if [ "$MBED_UPDATE" -eq 1 ]; then + echo -n " Updating to latest..." + set +e + mbed update + set -e + fi + + if [ -n "$REMOTE_BRANCH" ]; then + echo -n " Checking out remote branch $REMOTE_BRANCH..." + # checkout the mbed-os version you prefer... + cd mbed-os + git checkout "$REMOTE_BRANCH" + cd .. + fi + + if [ -n "$LOCAL_REPO" ]; then + echo -n " Linking local repo $LOCAL_REPO..." + # ... or link your local repo + if [ -d mbed-os ]; then + if [ ! -L mbed-os ]; then + rm -rf mbed-os + ln -s "$LOCAL_REPO" mbed-os + fi + fi + fi + echo " done." + +} + +create_mbed_program () { + echo -n "Setting up Mbed Application..." + rm -rf .mbedignore + + mbed target "$BOARDNAME" + mbed toolchain GCC_ARM + + cat > main.cpp << MAIN_C +#include "mbed.h" +int main() {} +MAIN_C + + if [ ! -f "$ARDUINOVARIANT"/conf/mbed_app.json ]; then + echo "================================================" + echo "Please, consider creating a 'conf/mbed_app.json'" + echo "to avoid mbed-cli always recompile from scratch." + echo "================================================" + cat > mbed_app.json << MBED_APP +{ + "macros": [ + "MBED_HEAP_STATS_ENABLED=1", + "MBED_STACK_STATS_ENABLED=1", + "MBED_MEM_TRACING_ENABLED=1" + ], + "target_overrides": { + "*": { + "platform.stdio-buffered-serial": true, + "platform.stdio-baud-rate": 115200, + "platform.default-serial-baud-rate": 115200, + "rtos.main-thread-stack-size": 32768 + } + } +} +MBED_APP + fi + + if [ -d "$ARDUINOVARIANT"/conf ]; then + find "$ARDUINOVARIANT"/conf/ -type f -exec gcp -p '{}' . ';' + fi + + echo " done." +} + + +apply_patches () { + if [ "$APPLY_PATCHES" -eq 1 ]; then + echo -n "Applying patches..." + if [ -d "$MBED_CORE_LOCATION"/patches ]; then + cd mbed-os + find "$MBED_CORE_LOCATION"/patches/ -type f -print0 | sort -z | xargs -t -0 -n1 git apply + cd - + fi + echo " done." + if [ "$RESTORE_GDB_INFO" -eq 1 ]; then + echo "Restoring gdb info (this increases libmbed binary size, not suitable for release)" + cd mbed-os + git checkout tools/profiles/develop.json + cd - + fi + fi +} + +mbed_compile () { + echo -n "Compiling Mbed Application..." + if [ "$MBED_CLEAN" -eq 1 ]; then + echo -n "Cleaning..." + rm -rf BUILD + fi + + PROFILE_FLAG="" + if [ x"$PROFILE" != x ]; then + if [ -f "$ARDUINOVARIANT/conf/profile/$PROFILE.json" ]; then + PROFILE_FLAG=--profile="$ARDUINOVARIANT"/conf/profile/$PROFILE.json + else + PROFILE_FLAG=--profile="${PROFILE}" + fi + export PROFILE=-${PROFILE^^} + fi + + mbed compile $PROFILE_FLAG --source . -v \ + | tee >(cat | grep 'Compile \[' >&2) | grep "Macros:" > "$BOARDNAME".macros.txt + echo " done." +} + +generate_defines () { + echo -n "Generating defines..." + cut -f2 -d":" < "$BOARDNAME".macros.txt | tr ' ' '\n' | gsed 's#\"#\\"#g' | sort > "$ARDUINOVARIANT"/defines.txt + echo "-DMBED_NO_GLOBAL_USING_DIRECTIVE=1" >> "$ARDUINOVARIANT"/defines.txt + MAJOR=$(echo $VERSION| cut -d'.' -f 1) + MINOR=$(echo $VERSION| cut -d'.' -f 2) + PATCH=$(echo $VERSION| cut -d'.' -f 3) + echo "-DCORE_MAJOR=$MAJOR" >> "$ARDUINOVARIANT"/defines.txt + echo "-DCORE_MINOR=$MINOR" >> "$ARDUINOVARIANT"/defines.txt + echo "-DCORE_PATCH=$PATCH" >> "$ARDUINOVARIANT"/defines.txt + if [ -f "$ARDUINOVARIANT"/variant.cpp ]; then + echo '-DUSE_ARDUINO_PINOUT' >> "$ARDUINOVARIANT"/defines.txt + fi + echo " done." +} + +generate_includes () { + echo -n "Generating includes..." + + find ./BUILD/"$BOARDNAME"/GCC_ARM${PROFILE}/ -type f -name '.include*' -print0 | xargs -0 cat \ + | tr ' ' '\n' | tr -d '"' | gsed -e 's#-I./mbed-os#-iwithprefixbefore/mbed#g' \ + | gsed '/^-I./d' | gsed '/lwipstack/d' | cat \ + > "$ARDUINOVARIANT"/includes.txt + + echo -n " copying to destination... " + + cd mbed-os + cut -d'/' -f3- < "$ARDUINOVARIANT"/includes.txt | grep 'targets' \ + | xargs -I{} find {} -maxdepth 2 -name '*.h' \ + | xargs -I{} gcp --parent {} "$ARDUINOCOREMBED"/ + cd - + + echo " done." +} + +generate_flags () { + echo -n "Generating flags..." + for fl in c cxx ld; do + jq -r '.flags | .[] | select(. != "-MMD")' ./BUILD/"$BOARDNAME"/GCC_ARM${PROFILE}/.profile-${fl} \ + > "$ARDUINOVARIANT"/${fl}flags.txt + if [[ $ARDUINOVARIANT == *PORTENTA* || $ARDUINOVARIANT == *GIGA* || $ARDUINOVARIANT == *NICLA_VISION* || $ARDUINOVARIANT == *OPTA* ]]; then + echo "Patching '-fno-exceptions' flag for $ARDUINOVARIANT/${fl}flags.txt" + gsed -i '/-fno-exceptions/d' "$ARDUINOVARIANT"/${fl}flags.txt + set +e + HAS_OPENAMP_SECTION=`grep openamp_section "$ARDUINOVARIANT"/linker_script.ld` + set -e + if [ x"$HAS_OPENAMP_SECTION" == x ]; then + echo "Adding OpenAMP section to $ARDUINOVARIANT/linker_script.ld" + OPENAMP_SECTION=".openamp_section (NOLOAD) : {\n \ + . = ABSOLUTE(0x38000000);\n \ + *(.resource_table)\n \ + } >RAM_D3 AT > FLASH\n \ + .pdm_section (NOLOAD) : {\n \ + . = ABSOLUTE(0x3800FC00);\n \ + *(.pdm_buffer)\n \ + } > RAM_D3\n" + + if [[ $ARDUINOVARIANT == *PORTENTA*M7* || $ARDUINOVARIANT == *GIGA* || $ARDUINOVARIANT == *OPTA* ]]; then + OPENAMP_SECTION="${OPENAMP_SECTION} \ + _dtcm_lma = __etext + SIZEOF(.data);\n \ + .dtcm : AT(_dtcm_lma) {\n \ + _sdtcm = .;\n \ + *(.dtcm*)\n \ + _edtcm = .;\n \ + } > DTCMRAM" + fi + + gsed -i "s?.heap (COPY):?${OPENAMP_SECTION}\n .heap (COPY):?g" $ARDUINOVARIANT/linker_script.ld + OPENAMP_REGIONS="__OPENAMP_region_start__ = 0x38000400;\n__OPENAMP_region_end__ = 0x38000400 + LENGTH(RAM_D3) - 1K;" + gsed -i "s?ENTRY(Reset_Handler)?${OPENAMP_REGIONS}\nENTRY(Reset_Handler)?g" $ARDUINOVARIANT/linker_script.ld + fi + echo "Patching linker scripts" + gsed -i 's/0x8100000/CM4_BINARY_START/g' "$ARDUINOVARIANT"/linker_script.ld + gsed -i 's/LENGTH = 0x200000/LENGTH = CM4_BINARY_END - CM4_BINARY_START/g' "$ARDUINOVARIANT"/linker_script.ld + gsed -i 's/LENGTH = 0x1c0000/LENGTH = CM4_BINARY_START - 0x8040000/g' "$ARDUINOVARIANT"/linker_script.ld + fi + done + echo " done." +} + +generate_libs () { + echo -n "Generating libs..." + tr ' ' '\n' < ./BUILD/"$BOARDNAME"/GCC_ARM${PROFILE}/.link_options.txt | grep "\.o" | grep -v "/main\.o" \ + | xargs arm-none-eabi-ar rcs ./BUILD/mbed-core-"$BOARDNAME".a + + gcp ./BUILD/mbed-core-"$BOARDNAME".a "$ARDUINOVARIANT"/libs/libmbed.a + gcp ./BUILD/"$BOARDNAME"/GCC_ARM${PROFILE}/.link_script.ld "$ARDUINOVARIANT"/linker_script.ld + gcp ./BUILD/"$BOARDNAME"/GCC_ARM${PROFILE}/mbed_config.h "$ARDUINOVARIANT"/ + + gsed -i "s/custom_mbedtls_config.h/conf\/custom_mbedtls_config.h/" $ARDUINOVARIANT/mbed_config.h + + # TODO: discover needed libraries based on compile target + #find -L . -name 'lib*.a' -exec cp '{}' "$ARDUINOVARIANT"/libs/ ';' + echo " done." +} + +copy_core_files () { + echo -n "Copying generic MbedOS headers to core... " + + rsync -zar --exclude="targets/" --exclude="*TEST*/" --include="*/" --include="*.h" --exclude="*" \ + mbed-os/ "$ARDUINOCOREMBED"/ + + rsync -zar --exclude="targets/" --exclude="*TEST*/" --include="*/" --include="mstd_*" --exclude="*" \ + mbed-os/ "$ARDUINOCOREMBED"/ + + echo " done." +} + +patch_mbed_h () { + echo -n "Patching 'mbed.h'..." + if [ x`uname` == xLinux ]; then + gsed -i 's?#include "platform/mbed_version.h"?#include "platform/mbed_version.h"\n#include "mbed_config.h"?g' \ + "$ARDUINOCOREMBED"/mbed.h + else + ed "$ARDUINOCOREMBED"/mbed.h >/dev/null < .mbedignore +# #add ARDUINO_AS_MBED_LIBRARY=1 to macros section in mbed_app.json +# echo "https://github.com/arduino/ArduinoCore-mbed#bf6e64771ebe20285b0364756dff856ebbc679dc" > arduino.lib diff --git a/nicla.variables b/nicla.variables index 3952028a8..c894e0366 100644 --- a/nicla.variables +++ b/nicla.variables @@ -1,5 +1,5 @@ export FLAVOUR="nicla" -export VARIANTS=("NICLA NICLA_VISION PORTENTA_H7_M4") +export VARIANTS=("NICLA NICLA_VISION GENERIC_STM32H747_M4") export FQBNS=("nicla_sense nicla_voice nicla_vision") export LIBRARIES=("SPI Wire Scheduler Nicla_System WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug GC2145 Himax_HM01B0 PDM KernelDebug RPC USBHID Camera rpclib USBHOST mbed-memory-status USBMSD SocketWrapper MRI SE05X MLC NDP syntiant_ilib") export BOOTLOADERS=("NICLA NICLA_VISION NICLA_VOICE") diff --git a/opta.variables b/opta.variables index 593a7dd3b..dc36376d6 100755 --- a/opta.variables +++ b/opta.variables @@ -1,5 +1,5 @@ export FLAVOUR="opta" -export VARIANTS=("OPTA PORTENTA_H7_M4") +export VARIANTS=("OPTA GENERIC_STM32H747_M4") export FQBNS=("opta") export LIBRARIES=("Ethernet SPI WiFi openamp_arduino ThreadDebug KernelDebug RPC USBHID Wire rpclib USBHOST mbed-memory-status Scheduler USBMSD SocketWrapper STM32H747_System MRI") export BOOTLOADERS=("OPTA") diff --git a/package_full.sh b/package_full.sh index 66c09d963..2f9c1434e 100755 --- a/package_full.sh +++ b/package_full.sh @@ -1,5 +1,5 @@ #Get version from git(hub) tag -export VERSION="4.0.6" +export VERSION="4.2.4" FLAVOURS=`ls *.variables` diff --git a/patches/0189-QSPI-call-is_mem_ready-before-trying-to-set-write-en.patch b/patches/0189-QSPI-call-is_mem_ready-before-trying-to-set-write-en.patch index b2a5652d4..304679c90 100644 --- a/patches/0189-QSPI-call-is_mem_ready-before-trying-to-set-write-en.patch +++ b/patches/0189-QSPI-call-is_mem_ready-before-trying-to-set-write-en.patch @@ -1,29 +1,32 @@ -From 3724f4267a7fbf993aaf4cadb3e0249b210af908 Mon Sep 17 00:00:00 2001 -From: giulcioffi -Date: Tue, 29 Mar 2022 16:19:01 +0200 -Subject: [PATCH 189/204] QSPI: call is_mem_ready before trying to set write - enable bit +From 67f98029e080a9ff605b078e383cabeb21da4807 Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Tue, 2 Jul 2024 16:13:42 +0200 +Subject: [PATCH] QSPI: call is_mem_ready before trying to set write enable bit + for AT25SF128A +This reverts commit f6d960e023a8d2300f3e850f5d721e87eeb95948. --- - .../blockdevice/COMPONENT_QSPIF/source/QSPIFBlockDevice.cpp | 5 +++++ - 1 file changed, 5 insertions(+) + .../blockdevice/COMPONENT_QSPIF/source/QSPIFBlockDevice.cpp | 6 ++++++ + 1 file changed, 6 insertions(+) diff --git a/storage/blockdevice/COMPONENT_QSPIF/source/QSPIFBlockDevice.cpp b/storage/blockdevice/COMPONENT_QSPIF/source/QSPIFBlockDevice.cpp -index 20af57f257..197be5e56b 100644 +index ee8bab5556..b005aeb0f1 100644 --- a/storage/blockdevice/COMPONENT_QSPIF/source/QSPIFBlockDevice.cpp +++ b/storage/blockdevice/COMPONENT_QSPIF/source/QSPIFBlockDevice.cpp -@@ -1186,6 +1186,11 @@ int QSPIFBlockDevice::_set_write_enable() +@@ -1243,7 +1243,13 @@ int QSPIFBlockDevice::_set_write_enable() uint8_t status_value = 0; int status = -1; -+ if (false == _is_mem_ready()) { ++ if (_AT25SF128A_quirk && (false == _is_mem_ready())) { + tr_error("Device not ready, set_write_enable failed"); + return -1; + } + do { ++ if (QSPI_STATUS_OK != _qspi_send_general_command(QSPIF_INST_WREN, QSPI_NO_ADDRESS_COMMAND, NULL, 0, NULL, 0)) { tr_error("Sending WREN command FAILED"); + break; -- -2.39.1 +2.45.2 diff --git a/patches/0208-STM32-fix-HRTIM-pwm-init-and-corner-case-31.patch b/patches/0208-STM32-fix-HRTIM-pwm-init-and-corner-case-31.patch new file mode 100644 index 000000000..fe37db1be --- /dev/null +++ b/patches/0208-STM32-fix-HRTIM-pwm-init-and-corner-case-31.patch @@ -0,0 +1,113 @@ +From 3636262ae786ae623451985dd40c7a54c40b9ab1 Mon Sep 17 00:00:00 2001 +From: Leonardo Cavagnis <45899760+leonardocavagnis@users.noreply.github.com> +Date: Fri, 29 Sep 2023 10:06:55 +0200 +Subject: [PATCH] STM32: fix HRTIM pwm init and corner case (#31) + +* STM32: fix HRTIM pwm corner cases (0-100%) in read function + +* STM32: fix HRTIM pwm init with default values + +* STM32: add helper fun to manage pwmout obj period +--- + targets/TARGET_STM/pwmout_api.c | 59 +++++++++++++++++++++------------ + 1 file changed, 38 insertions(+), 21 deletions(-) + +diff --git a/targets/TARGET_STM/pwmout_api.c b/targets/TARGET_STM/pwmout_api.c +index e20ac918a3..71a4839728 100644 +--- a/targets/TARGET_STM/pwmout_api.c ++++ b/targets/TARGET_STM/pwmout_api.c +@@ -53,6 +53,8 @@ static hrtim_t hrtim_timer; + static HRTIM_HandleTypeDef HrtimHandle; + static HRTIM_CompareCfgTypeDef sConfig_compare; + static HRTIM_TimeBaseCfgTypeDef sConfig_time_base; ++ ++static void _pwmout_obj_period_us(pwmout_t *obj, int us); + #endif + + /* Convert STM32 Cube HAL channel to LL channel */ +@@ -142,9 +144,9 @@ static void _pwmout_init_direct(pwmout_t *obj, const PinMap *pinmap) + pin_function(pinmap->pin, pinmap->function); + pin_mode(pinmap->pin, PullNone); + +- obj->period = 0; +- obj->pulse = 0; +- obj->prescaler = 0; ++ // Initialize obj with default values (period 550Hz, duty 0%) ++ _pwmout_obj_period_us(obj, 18000); ++ obj->pulse = (uint32_t)((float)obj->period * 1.0 + 0.5); + + // Initialize the HRTIM structure + HrtimHandle.Instance = HRTIM1; +@@ -444,6 +446,15 @@ float pwmout_read(pwmout_t *obj) + if (obj->period > 0) { + value = (float)(obj->pulse) / (float)(obj->period); + } ++ ++ if (obj->pwm == PWM_I) { ++ if (value <= (float)0.0) { ++ value = 1.0; ++ } else if (value >= (float)1.0) { ++ value = 0.0; ++ } ++ } ++ + return ((value > (float)1.0) ? (float)(1.0) : (value)); + } + +@@ -464,24 +475,7 @@ void pwmout_period_us(pwmout_t *obj, int us) + if (obj->pwm == PWM_I) { + float dc = pwmout_read(obj); + +- uint32_t frequency; +- uint32_t clocksource = __HAL_RCC_GET_HRTIM1_SOURCE(); +- switch (clocksource) { +- case RCC_HRTIM1CLK_TIMCLK: +- frequency = HAL_RCC_GetHCLKFreq(); +- break; +- case RCC_HRTIM1CLK_CPUCLK: +- frequency = HAL_RCC_GetSysClockFreq(); +- break; +- } +- +- /* conversion from us to clock tick */ +- obj->period = us * (frequency / 1000000) / 4; +- obj->prescaler = HRTIM_PRESCALERRATIO_DIV4; +- +- if (obj->period > 0xFFDFU) { +- obj->period = 0xFFDFU; +- } ++ _pwmout_obj_period_us(obj, us); + + sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS; + sConfig_time_base.Period = obj->period; +@@ -602,4 +596,27 @@ const PinMap *pwmout_pinmap() + return PinMap_PWM; + } + ++#if defined(HRTIM1) ++void _pwmout_obj_period_us(pwmout_t *obj, int us) { ++ uint32_t frequency; ++ uint32_t clocksource = __HAL_RCC_GET_HRTIM1_SOURCE(); ++ switch (clocksource) { ++ case RCC_HRTIM1CLK_TIMCLK: ++ frequency = HAL_RCC_GetHCLKFreq(); ++ break; ++ case RCC_HRTIM1CLK_CPUCLK: ++ frequency = HAL_RCC_GetSysClockFreq(); ++ break; ++ } ++ ++ /* conversion from us to clock tick */ ++ obj->period = us * (frequency / 1000000) / 4; ++ obj->prescaler = HRTIM_PRESCALERRATIO_DIV4; ++ ++ if (obj->period > 0xFFDFU) { ++ obj->period = 0xFFDFU; ++ } ++} ++#endif ++ + #endif +-- +2.42.0 + diff --git a/patches/0209-gcc-callback-prevent-wrong-optimizations.patch b/patches/0209-gcc-callback-prevent-wrong-optimizations.patch new file mode 100644 index 000000000..0902dabf6 --- /dev/null +++ b/patches/0209-gcc-callback-prevent-wrong-optimizations.patch @@ -0,0 +1,39 @@ +From 28a199761f80a8400da5cac8fbcaf138d29ea596 Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Mon, 13 Nov 2023 09:40:06 +0100 +Subject: [PATCH 209/217] gcc: callback: prevent wrong optimizations + +Porting of https://github.com/arduino/ArduinoCore-mbed/pull/755 +--- + platform/include/platform/Callback.h | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/platform/include/platform/Callback.h b/platform/include/platform/Callback.h +index e76a4f1979..3df0b9117f 100644 +--- a/platform/include/platform/Callback.h ++++ b/platform/include/platform/Callback.h +@@ -26,6 +26,14 @@ + #include + #include + ++#pragma GCC push_options ++// This prevents the GCC compiler from applying optimizations that assume the code follows strict aliasing rules. ++// In order to prevent bugs arising from undefined behavior that is tricky to find in the Callback implementation, ++// or simply from compiler bugs in GCC. ++#pragma GCC optimize("-fno-strict-aliasing") ++// This prevents the GCC compiler from generating incorrect inline code for the Callback constructor. ++#pragma GCC optimize("-fno-inline") ++ + // Controlling switches from config: + // MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL - support storing non-trivial function objects + // MBED_CONF_PLATFORM_CALLBACK_COMPARABLE - support memcmp comparing stored objects (requires zero padding) +@@ -835,4 +843,6 @@ Callback(R(*func)(const volatile T *, ArgTs...), const volatile U *arg) -> Callb + + } // namespace mbed + ++#pragma GCC pop_options ++ + #endif +-- +2.42.0 + diff --git a/patches/0209-portenta_h7-make-sure-configuration-is-only-executed.patch b/patches/0209-portenta_h7-make-sure-configuration-is-only-executed.patch new file mode 100644 index 000000000..54c977788 --- /dev/null +++ b/patches/0209-portenta_h7-make-sure-configuration-is-only-executed.patch @@ -0,0 +1,53 @@ +From 547edd2014933a15cd0e48fe1f2f5f9b9ce094fd Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Thu, 26 Oct 2023 16:37:54 +0200 +Subject: [PATCH 209/213] portenta_h7: make sure configuration is only executed + by M7 + +--- + .../TARGET_STM32H747xI/TARGET_PORTENTA_H7/portenta_power.cpp | 3 ++- + .../TARGET_PORTENTA_H7/system_clock_override.c | 2 ++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/portenta_power.cpp b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/portenta_power.cpp +index 13ba1042de..59e6ac6cca 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/portenta_power.cpp ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/portenta_power.cpp +@@ -26,6 +26,7 @@ + ******************************************************************************/ + void enableEthPowerSupply(void) + { ++#ifndef CORE_CM4 + /* Ensure ETH power supply */ + mbed::I2C i2c(PB_7, PB_6); + +@@ -48,5 +49,5 @@ void enableEthPowerSupply(void) + data[0] = 0x35; + data[1] = 0xF; + i2c.write(8 << 1, data, sizeof(data)); +- ++#endif + } +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/system_clock_override.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/system_clock_override.c +index ae7821ede0..e47b7d258c 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/system_clock_override.c ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/system_clock_override.c +@@ -129,6 +129,7 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass, bool lowspeed) + } + } + ++#ifndef CORE_CM4 + /* Enable oscillator pin */ + __HAL_RCC_GPIOH_CLK_ENABLE(); + GPIO_InitTypeDef gpio_osc_init_structure; +@@ -139,6 +140,7 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass, bool lowspeed) + HAL_GPIO_Init(GPIOH, &gpio_osc_init_structure); + HAL_Delay(10); + HAL_GPIO_WritePin(GPIOH, GPIO_PIN_1, 1); ++#endif + + /* Supply configuration update enable */ + #if HSE_VALUE == 27000000 +-- +2.42.0 + diff --git a/patches/0210-giga-remove-stray-function.patch b/patches/0210-giga-remove-stray-function.patch new file mode 100644 index 000000000..45718f6b3 --- /dev/null +++ b/patches/0210-giga-remove-stray-function.patch @@ -0,0 +1,44 @@ +From cb4587fa30a8f49bf27a16dda20fb21947d385ed Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Thu, 26 Oct 2023 16:38:15 +0200 +Subject: [PATCH 210/213] giga: remove stray function + +--- + .../TARGET_GIGA/giga_power.cpp | 23 ------------------- + 1 file changed, 23 deletions(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/giga_power.cpp b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/giga_power.cpp +index a47a758e1d..1954ff50cc 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/giga_power.cpp ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/giga_power.cpp +@@ -26,27 +26,4 @@ + ******************************************************************************/ + void enableEthPowerSupply(void) + { +- /* Ensure ETH power supply */ +- mbed::I2C i2c(PB_7, PB_6); +- +- char data[2]; +- +- // LDO3 to 1.2V +- data[0] = 0x52; +- data[1] = 0x9; +- i2c.write(8 << 1, data, sizeof(data)); +- data[0] = 0x53; +- data[1] = 0xF; +- i2c.write(8 << 1, data, sizeof(data)); +- +- // SW2 to 3.3V (SW2_VOLT) +- data[0] = 0x3B; +- data[1] = 0xF; +- i2c.write(8 << 1, data, sizeof(data)); +- +- // SW1 to 3.0V (SW1_VOLT) +- data[0] = 0x35; +- data[1] = 0xF; +- i2c.write(8 << 1, data, sizeof(data)); +- + } +-- +2.42.0 + diff --git a/patches/0211-stm32h7-dual-core-allow-override-of-HAL_RCC_GetSysCl.patch b/patches/0211-stm32h7-dual-core-allow-override-of-HAL_RCC_GetSysCl.patch new file mode 100644 index 000000000..2b9e1fadc --- /dev/null +++ b/patches/0211-stm32h7-dual-core-allow-override-of-HAL_RCC_GetSysCl.patch @@ -0,0 +1,27 @@ +From f0fb6a21e7eb398c0b7279bce7859ae77debcc64 Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Thu, 26 Oct 2023 16:39:04 +0200 +Subject: [PATCH 211/213] stm32h7 dual core: allow override of + HAL_RCC_GetSysClockFreq + +It's the only needed entry point to get the right timings for all peripherals +--- + .../STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_rcc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_rcc.c b/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_rcc.c +index eb5485dc7d..f03be381a4 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_rcc.c ++++ b/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_rcc.c +@@ -1354,7 +1354,7 @@ void HAL_RCC_DisableCSS(void) + * + * @retval SYSCLK frequency + */ +-uint32_t HAL_RCC_GetSysClockFreq(void) ++__attribute__((weak)) uint32_t HAL_RCC_GetSysClockFreq(void) + { + uint32_t pllp, pllsource, pllm, pllfracen, hsivalue; + float_t fracn1, pllvco; +-- +2.42.0 + diff --git a/patches/0212-ble-remove-stray-specializations.patch b/patches/0212-ble-remove-stray-specializations.patch new file mode 100644 index 000000000..788377bc2 --- /dev/null +++ b/patches/0212-ble-remove-stray-specializations.patch @@ -0,0 +1,238 @@ +From 46653cb9d8015361327cb0a8f9b394d6c008c841 Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Thu, 26 Oct 2023 16:39:59 +0200 +Subject: [PATCH 212/213] ble: remove stray specializations + +the standard one from Cypress driver is fine +--- + .../TARGET_NICLA_VISION/cy_bt_cordio_cfg.cpp | 105 ------------------ + .../TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp | 105 ------------------ + 2 files changed, 210 deletions(-) + delete mode 100644 connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_NICLA_VISION/cy_bt_cordio_cfg.cpp + delete mode 100644 connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp + +diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_NICLA_VISION/cy_bt_cordio_cfg.cpp b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_NICLA_VISION/cy_bt_cordio_cfg.cpp +deleted file mode 100644 +index 2d668fed9c..0000000000 +--- a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_NICLA_VISION/cy_bt_cordio_cfg.cpp ++++ /dev/null +@@ -1,105 +0,0 @@ +-/******************************************************************************* +-* \file cy_bt_cordio_cfg.cpp +-* \version 1.0 +-* +-* +-* Low Power Assist BT Pin configuration implementation. +-* +-******************************************************************************** +-* \copyright +-* Copyright 2019 Cypress Semiconductor Corporation +-* SPDX-License-Identifier: Apache-2.0 +-* +-* Licensed under the Apache License, Version 2.0 (the "License"); +-* you may not use this file except in compliance with the License. +-* You may obtain a copy of the License at +-* +-* http://www.apache.org/licenses/LICENSE-2.0 +-* +-* Unless required by applicable law or agreed to in writing, software +-* distributed under the License is distributed on an "AS IS" BASIS, +-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-* See the License for the specific language governing permissions and +-* limitations under the License. +-*******************************************************************************/ +- +-#include +-#include "ble/driver/CordioHCIDriver.h" +-#include "hci_api.h" +-#include "hci_cmd.h" +-#include "hci_core.h" +-#include "bstream.h" +-#include "assert.h" +-#include +-#include "hci_mbed_os_adaptation.h" +-#include "CyH4TransportDriver.h" +- +-#define cyhal_gpio_to_rtos(x) (x) +-#define CYCFG_BT_LP_ENABLED (1) +-#define CYCFG_BT_HOST_WAKE_IRQ_EVENT WAKE_EVENT_ACTIVE_LOW +-#define CYCFG_BT_DEV_WAKE_POLARITY WAKE_EVENT_ACTIVE_LOW +- +-/******************************************************************************* +-* Function Name: ble_cordio_get_h4_transport_driver +-******************************************************************************** +-* +-* Strong implementation of function which calls CyH4TransportDriver constructor and return it +-* +-* \param none +-* +-* \return +-* Returns the transport driver object +-*******************************************************************************/ +-ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_driver() +-{ +-#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) +- +-#if (defined(CYCFG_BT_LP_ENABLED)) +- if (CYCFG_BT_LP_ENABLED) { +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE, +- cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), +- cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE), +- CYCFG_BT_HOST_WAKE_IRQ_EVENT, +- CYCFG_BT_DEV_WAKE_POLARITY +- ); +- return s_transport_driver; +- } else { /* CYCFG_BT_LP_ENABLED */ +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE); +- return s_transport_driver; +- } +-#else /* (defined(CYCFG_BT_LP_ENABLED)) */ +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE), +- cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE) +- ); +- return s_transport_driver; +-#endif /* (defined(CYCFG_BT_LP_ENABLED)) */ +- +-#else /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE); +- return s_transport_driver; +-#endif /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ +-} +diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp +deleted file mode 100644 +index 2d668fed9c..0000000000 +--- a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp ++++ /dev/null +@@ -1,105 +0,0 @@ +-/******************************************************************************* +-* \file cy_bt_cordio_cfg.cpp +-* \version 1.0 +-* +-* +-* Low Power Assist BT Pin configuration implementation. +-* +-******************************************************************************** +-* \copyright +-* Copyright 2019 Cypress Semiconductor Corporation +-* SPDX-License-Identifier: Apache-2.0 +-* +-* Licensed under the Apache License, Version 2.0 (the "License"); +-* you may not use this file except in compliance with the License. +-* You may obtain a copy of the License at +-* +-* http://www.apache.org/licenses/LICENSE-2.0 +-* +-* Unless required by applicable law or agreed to in writing, software +-* distributed under the License is distributed on an "AS IS" BASIS, +-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-* See the License for the specific language governing permissions and +-* limitations under the License. +-*******************************************************************************/ +- +-#include +-#include "ble/driver/CordioHCIDriver.h" +-#include "hci_api.h" +-#include "hci_cmd.h" +-#include "hci_core.h" +-#include "bstream.h" +-#include "assert.h" +-#include +-#include "hci_mbed_os_adaptation.h" +-#include "CyH4TransportDriver.h" +- +-#define cyhal_gpio_to_rtos(x) (x) +-#define CYCFG_BT_LP_ENABLED (1) +-#define CYCFG_BT_HOST_WAKE_IRQ_EVENT WAKE_EVENT_ACTIVE_LOW +-#define CYCFG_BT_DEV_WAKE_POLARITY WAKE_EVENT_ACTIVE_LOW +- +-/******************************************************************************* +-* Function Name: ble_cordio_get_h4_transport_driver +-******************************************************************************** +-* +-* Strong implementation of function which calls CyH4TransportDriver constructor and return it +-* +-* \param none +-* +-* \return +-* Returns the transport driver object +-*******************************************************************************/ +-ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_driver() +-{ +-#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) +- +-#if (defined(CYCFG_BT_LP_ENABLED)) +- if (CYCFG_BT_LP_ENABLED) { +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE, +- cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), +- cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE), +- CYCFG_BT_HOST_WAKE_IRQ_EVENT, +- CYCFG_BT_DEV_WAKE_POLARITY +- ); +- return s_transport_driver; +- } else { /* CYCFG_BT_LP_ENABLED */ +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE); +- return s_transport_driver; +- } +-#else /* (defined(CYCFG_BT_LP_ENABLED)) */ +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE), +- cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE) +- ); +- return s_transport_driver; +-#endif /* (defined(CYCFG_BT_LP_ENABLED)) */ +- +-#else /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ +- static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( +- /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), +- /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), +- /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), +- /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), +- /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), +- DEF_BT_BAUD_RATE); +- return s_transport_driver; +-#endif /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ +-} +-- +2.42.0 + diff --git a/patches/0213-stm32h747_m4-implement-a-standalone-target.patch b/patches/0213-stm32h747_m4-implement-a-standalone-target.patch new file mode 100644 index 000000000..7e0223455 --- /dev/null +++ b/patches/0213-stm32h747_m4-implement-a-standalone-target.patch @@ -0,0 +1,34503 @@ +From 918979ba0f901fb59b4c684358ba504d60d060b1 Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Thu, 26 Oct 2023 16:41:10 +0200 +Subject: [PATCH 213/213] stm32h747_m4: implement a standalone target + +--- + .../COMPONENT_CYW43XXX/CMakeLists.txt | 4 + + .../firmware/CMakeLists.txt | 6 + + .../COMPONENT_4343W_FS/CMakeLists.txt | 7 + + .../w_bt_firmware_controller.c | 2101 ++ + .../COMPONENT_WHD/CMakeLists.txt | 34 + + .../COMPONENT_WHD/generated_mac_address.txt | 9 + + .../COMPONENT_WHD/interface/cy_result.h | 228 + + .../COMPONENT_WHD/interface/cyabs_rtos.h | 711 + + .../COMPONENT_WHD/interface/cyabs_rtos_impl.h | 77 + + .../interface/cyabs_rtos_rtxv5.c | 863 + + .../COMPONENT_WHD/interface/cyhal_gpio.h | 247 + + .../COMPONENT_WHD/interface/cyhal_sdio.h | 366 + + .../COMPONENT_WHD/interface/cyhal_spi.h | 383 + + .../COMPONENT_WHD/port/cy_hal.c | 63 + + .../COMPONENT_WHD/port/cy_syslib.h | 592 + + .../COMPONENT_WHD/port/cy_utils.h | 81 + + .../COMPONENT_WHD/port/cybsp.h | 50 + + .../COMPONENT_WHD/port/cycfg.h | 20 + + .../COMPONENT_WHD/port/cyhal.h | 52 + + .../COMPONENT_WHD/port/cyhal_gpio.cpp | 104 + + .../COMPONENT_WHD/port/cyhal_hw_types.h | 112 + + .../COMPONENT_WHD/port/cyhal_sdio.c | 506 + + .../COMPONENT_WHD/port/cyhal_spi.c | 29 + + .../COMPONENT_WHD/port/cyhal_system.h | 20 + + .../COMPONENT_WHD/port/wiced_bd.h | 49 + + .../COMPONENT_WHD/port/wiced_filesystem.cpp | 225 + + .../COMPONENT_WHD/port/wiced_filesystem.h | 148 + + .../LICENSE-permissive-binary-license-1.0.txt | 49 + + .../firmware/COMPONENT_4343W_FS/4343WA1_bin.c | 25493 ++++++++++++++++ + .../COMPONENT_4343W_FS/4343WA1_clm_blob.c | 400 + + .../firmware/COMPONENT_4343W_FS/resources.h | 30 + + .../resources/nvram/wifi_nvram_image.h | 87 + + .../COMPONENT_WHD/whd_config.h | 61 + + .../PeripheralPins.c | 578 + + .../TARGET_GENERIC_STM32H747_M4/PinNames.h | 356 + + targets/targets.json | 50 +- + 36 files changed, 34179 insertions(+), 12 deletions(-) + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/CMakeLists.txt + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/CMakeLists.txt + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/CMakeLists.txt + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/w_bt_firmware_controller.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/CMakeLists.txt + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/generated_mac_address.txt + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cy_result.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_impl.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_gpio.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_sdio.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_spi.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_hal.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_syslib.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_utils.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cybsp.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cycfg.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_gpio.cpp + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_hw_types.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_sdio.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_spi.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_system.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_bd.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.cpp + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/LICENSE-permissive-binary-license-1.0.txt + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/whd_config.h + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PeripheralPins.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/CMakeLists.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/CMakeLists.txt +new file mode 100644 +index 0000000000..82be36e1f0 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/CMakeLists.txt +@@ -0,0 +1,4 @@ ++# Copyright (c) 2020 ARM Limited. All rights reserved. ++# SPDX-License-Identifier: Apache-2.0 ++ ++add_subdirectory(firmware) +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/CMakeLists.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/CMakeLists.txt +new file mode 100644 +index 0000000000..fbbc3b979d +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/CMakeLists.txt +@@ -0,0 +1,6 @@ ++# Copyright (c) 2020 ARM Limited. All rights reserved. ++# SPDX-License-Identifier: Apache-2.0 ++ ++if("4343W_FS" IN_LIST MBED_TARGET_LABELS) ++ add_subdirectory(COMPONENT_4343W) ++endif() +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/CMakeLists.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/CMakeLists.txt +new file mode 100644 +index 0000000000..31fecb8fe0 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/CMakeLists.txt +@@ -0,0 +1,7 @@ ++# Copyright (c) 2020 ARM Limited. All rights reserved. ++# SPDX-License-Identifier: Apache-2.0 ++ ++target_sources(mbed-ble ++ INTERFACE ++ w_bt_firmware_controller.c ++) +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/w_bt_firmware_controller.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/w_bt_firmware_controller.c +new file mode 100644 +index 0000000000..ac2bc973e1 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_CYW43XXX/firmware/COMPONENT_4343W_FS/w_bt_firmware_controller.c +@@ -0,0 +1,2101 @@ ++/* ++ * Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved ++ * SPDX-License-Identifier: LicenseRef-PBL ++ * ++ * This file and the related binary are licensed under the ++ * Permissive Binary License, Version 1.0 (the "License"); ++ * you may not use these files except in compliance with the License. ++ * ++ * You may obtain a copy of the License here: ++ * LICENSE-permissive-binary-license-1.0.txt and at ++ * https://www.mbed.com/licenses/PBL-1.0 ++ * ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++#include ++ ++/* labelling: appname-(chipname)(stepping)-frequency-(headset GIT SHA)-(generating SDK version)- ++ * Wiced-release.hcd */ ++const char brcm_patch_version[] = "BCM4343A1_001.002.009.0083.0000_Generic_UART_37_4MHz_wlbga_wiced"; ++const uint8_t brcm_patchram_format = 0x01; ++/* Configuration Data Records (Write_RAM) */ ++const uint8_t brcm_patchram_buf[] = { ++ 76, 252, 70, 16, 24, 33, 0, 66, 82, 67, 77, 99, 102, 103, 83, 0, 0, ++ 0, 0, 50, 0, 0, 0, 1, 1, 4, 24, 146, 0, 0, 0, 3, 6, 172, 31, 18, 161, ++ 67, 67, 0, 1, 28, 82, 24, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 76, 252, 255, 82, 24, ++ 33, 0, 66, 82, 67, 77, 99, 102, 103, 68, 0, 0, 0, 0, 79, 133, 0, 0, ++ 3, 3, 40, 66, 67, 77, 52, 51, 52, 51, 65, 49, 32, 85, 65, 82, 84, 32, ++ 51, 55, 46, 52, 32, 77, 72, 122, 32, 119, 108, 98, 103, 97, 95, 114, ++ 101, 102, 32, 119, 105, 99, 101, 100, 0, 22, 3, 2, 83, 0, 2, 1, 248, ++ 3, 8, 1, 50, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 50, 0, 255, 15, 0, 0, ++ 98, 8, 0, 0, 112, 0, 100, 0, 128, 0, 0, 0, 128, 0, 0, 0, 172, 0, 50, ++ 0, 255, 255, 255, 1, 0, 0, 47, 0, 140, 0, 50, 0, 0, 240, 255, 15, 0, ++ 16, 17, 1, 120, 0, 50, 0, 255, 255, 255, 255, 185, 184, 184, 184, 96, ++ 44, 32, 0, 255, 0, 0, 0, 0, 0, 0, 0, 16, 1, 50, 0, 0, 0, 255, 255, 0, ++ 0, 24, 24, 108, 1, 96, 0, 255, 255, 255, 255, 11, 0, 0, 0, 112, 1, 96, ++ 0, 255, 255, 255, 255, 16, 0, 0, 0, 116, 1, 96, 0, 255, 255, 255, 255, ++ 21, 0, 0, 0, 120, 1, 96, 0, 255, 255, 255, 255, 25, 0, 0, 0, 124, 1, ++ 96, 0, 255, 255, 0, 0, 29, 0, 0, 0, 132, 1, 96, 0, 255, 255, 255, 255, ++ 33, 0, 0, 0, 96, 6, 65, 0, 255, 255, 0, 0, 51, 3, 0, 0, 100, 6, 65, ++ 76, 252, 255, 77, 25, 33, 0, 0, 255, 255, 0, 0, 41, 58, 0, 0, 100, 6, ++ 65, 0, 255, 255, 0, 0, 41, 58, 0, 0, 104, 6, 65, 0, 255, 255, 0, 0, ++ 104, 5, 0, 0, 108, 6, 65, 0, 255, 255, 0, 0, 168, 48, 0, 0, 112, 6, ++ 65, 0, 255, 255, 0, 0, 232, 62, 0, 0, 116, 6, 65, 0, 255, 255, 0, 0, ++ 28, 50, 0, 0, 120, 6, 65, 0, 255, 255, 0, 0, 187, 51, 0, 0, 124, 6, ++ 65, 0, 255, 255, 0, 0, 48, 9, 0, 0, 80, 3, 65, 0, 255, 255, 0, 0, 16, ++ 5, 0, 0, 84, 3, 65, 0, 255, 255, 0, 0, 9, 9, 0, 0, 92, 3, 65, 0, 255, ++ 255, 0, 0, 9, 8, 0, 0, 96, 3, 65, 0, 255, 255, 0, 0, 15, 7, 0, 0, 100, ++ 3, 65, 0, 255, 255, 0, 0, 5, 8, 0, 0, 108, 3, 65, 0, 255, 255, 0, 0, ++ 14, 9, 0, 0, 116, 3, 65, 0, 255, 255, 0, 0, 5, 9, 0, 0, 120, 3, 65, ++ 0, 255, 255, 0, 0, 16, 10, 0, 0, 64, 1, 65, 0, 255, 255, 0, 0, 16, 5, ++ 0, 0, 68, 1, 65, 0, 255, 255, 0, 0, 9, 9, 0, 0, 76, 1, 65, 0, 255, 255, ++ 0, 0, 9, 8, 0, 0, 80, 1, 65, 0, 255, 255, 0, 0, 15, 7, 0, 0, 84, 1, ++ 65, 0, 255, 255, 0, 0, 5, 8, 0, 0, 92, 1, 76, 252, 255, 72, 26, 33, ++ 0, 65, 0, 255, 255, 0, 0, 14, 9, 0, 0, 96, 1, 65, 0, 255, 255, 0, 0, ++ 5, 9, 0, 0, 100, 1, 65, 0, 255, 255, 0, 0, 16, 10, 0, 0, 224, 6, 65, ++ 0, 255, 255, 0, 0, 113, 32, 0, 0, 156, 1, 96, 0, 255, 0, 0, 0, 3, 0, ++ 0, 0, 100, 1, 96, 0, 255, 255, 255, 255, 0, 0, 0, 0, 9, 1, 4, 2, 1, ++ 0, 0, 34, 3, 2, 1, 0, 240, 1, 40, 4, 0, 0, 0, 32, 21, 50, 0, 255, 255, ++ 250, 255, 217, 3, 62, 254, 40, 21, 50, 0, 0, 0, 127, 254, 52, 16, 40, ++ 2, 44, 9, 100, 0, 14, 0, 0, 0, 12, 0, 0, 0, 240, 1, 40, 1, 0, 0, 0, ++ 32, 21, 50, 0, 255, 255, 250, 255, 221, 3, 62, 254, 40, 21, 50, 0, 0, ++ 0, 127, 254, 52, 16, 40, 2, 44, 9, 100, 0, 14, 0, 0, 0, 12, 0, 0, 0, ++ 240, 1, 40, 2, 0, 0, 0, 32, 21, 50, 0, 255, 255, 250, 255, 217, 3, 62, ++ 254, 40, 21, 50, 0, 0, 0, 127, 254, 52, 16, 40, 2, 44, 9, 100, 0, 14, ++ 0, 0, 0, 12, 0, 0, 0, 240, 1, 160, 1, 3, 0, 0, 0, 16, 21, 50, 0, 0, ++ 0, 0, 0, 240, 240, 240, 0, 20, 21, 50, 0, 0, 0, 0, 0, 240, 240, 240, ++ 0, 24, 21, 50, 0, 0, 0, 0, 0, 76, 252, 255, 67, 27, 33, 0, 240, 240, ++ 240, 0, 28, 21, 50, 0, 0, 0, 0, 0, 76, 76, 0, 0, 32, 21, 50, 0, 255, ++ 255, 250, 255, 221, 3, 62, 254, 36, 21, 50, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 40, 21, 50, 0, 0, 0, 127, 254, 52, 16, 40, 2, 52, 21, 50, 0, 0, 0, ++ 0, 0, 240, 0, 0, 0, 56, 21, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 21, 50, ++ 0, 0, 0, 0, 0, 202, 6, 0, 0, 44, 9, 100, 0, 14, 0, 0, 0, 12, 0, 0, 0, ++ 248, 0, 100, 0, 81, 0, 0, 0, 16, 0, 0, 0, 120, 8, 100, 0, 2, 0, 0, 0, ++ 0, 0, 0, 0, 1, 7, 181, 3, 4, 6, 10, 35, 60, 90, 110, 125, 5, 56, 4, ++ 136, 4, 156, 4, 136, 4, 216, 4, 116, 4, 196, 4, 216, 4, 196, 4, 20, ++ 5, 176, 4, 0, 5, 20, 5, 0, 5, 80, 5, 246, 4, 70, 5, 90, 5, 70, 5, 150, ++ 5, 60, 5, 140, 5, 160, 5, 140, 5, 220, 5, 130, 5, 210, 5, 230, 5, 210, ++ 5, 34, 6, 20, 255, 20, 255, 20, 255, 20, 255, 20, 255, 20, 255, 168, ++ 2, 168, 2, 168, 2, 168, 2, 168, 2, 228, 2, 228, 2, 228, 2, 228, 2, 228, ++ 2, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 102, 3, 102, 3, 102, 3, 102, 3, ++ 102, 3, 172, 3, 76, 252, 255, 62, 28, 33, 0, 172, 3, 172, 3, 172, 3, ++ 172, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 20, 255, 20, 255, 20, ++ 255, 20, 255, 20, 255, 20, 255, 6, 0, 0, 0, 96, 0, 5, 156, 2, 255, 160, ++ 2, 255, 164, 2, 255, 168, 2, 255, 172, 2, 255, 0, 0, 96, 0, 5, 200, ++ 2, 255, 204, 2, 255, 208, 2, 255, 212, 2, 255, 216, 2, 255, 0, 0, 96, ++ 0, 5, 136, 3, 255, 140, 3, 255, 144, 3, 255, 148, 3, 255, 152, 3, 255, ++ 0, 0, 96, 0, 5, 156, 3, 255, 160, 3, 255, 164, 3, 255, 168, 3, 255, ++ 172, 3, 255, 0, 0, 96, 0, 5, 128, 3, 255, 132, 3, 255, 160, 6, 255, ++ 180, 2, 255, 56, 7, 255, 0, 0, 96, 0, 3, 164, 6, 255, 92, 6, 255, 152, ++ 6, 255, 76, 76, 76, 76, 76, 65, 65, 65, 65, 65, 133, 133, 133, 133, ++ 132, 166, 165, 165, 165, 165, 164, 244, 24, 3, 250, 101, 3, 204, 95, ++ 95, 95, 95, 95, 77, 77, 77, 77, 77, 132, 132, 132, 132, 131, 165, 164, ++ 164, 164, 164, 164, 244, 26, 3, 250, 102, 3, 204, 108, 108, 108, 108, ++ 108, 88, 88, 88, 88, 88, 132, 132, 132, 132, 131, 165, 164, 164, 164, ++ 164, 164, 244, 31, 3, 250, 102, 3, 204, 133, 133, 133, 133, 133, 105, ++ 105, 105, 105, 105, 132, 132, 132, 132, 131, 165, 164, 164, 164, 164, ++ 164, 76, 252, 255, 57, 29, 33, 0, 244, 31, 3, 250, 102, 3, 204, 153, ++ 153, 153, 153, 153, 116, 116, 116, 116, 116, 132, 132, 132, 132, 131, ++ 165, 164, 164, 164, 164, 164, 244, 31, 3, 250, 103, 3, 204, 179, 179, ++ 179, 179, 179, 130, 130, 130, 130, 130, 132, 132, 132, 132, 131, 165, ++ 164, 164, 164, 164, 164, 244, 31, 3, 250, 103, 35, 255, 1, 7, 181, 3, ++ 0, 6, 10, 35, 60, 90, 110, 125, 5, 92, 3, 62, 3, 72, 3, 92, 3, 72, 3, ++ 152, 3, 122, 3, 132, 3, 152, 3, 132, 3, 212, 3, 182, 3, 192, 3, 212, ++ 3, 192, 3, 26, 4, 252, 3, 6, 4, 26, 4, 6, 4, 96, 4, 66, 4, 76, 4, 96, ++ 4, 76, 4, 166, 4, 136, 4, 146, 4, 166, 4, 146, 4, 20, 255, 20, 255, ++ 20, 255, 20, 255, 20, 255, 20, 255, 68, 2, 48, 2, 38, 2, 18, 2, 28, ++ 2, 128, 2, 108, 2, 98, 2, 78, 2, 88, 2, 188, 2, 168, 2, 158, 2, 138, ++ 2, 148, 2, 2, 3, 238, 2, 228, 2, 208, 2, 218, 2, 72, 3, 52, 3, 42, 3, ++ 22, 3, 32, 3, 142, 3, 122, 3, 112, 3, 92, 3, 102, 3, 20, 255, 20, 255, ++ 20, 255, 20, 255, 20, 255, 20, 255, 6, 0, 0, 0, 96, 0, 5, 156, 2, 255, ++ 160, 2, 255, 164, 2, 255, 168, 2, 255, 172, 2, 255, 0, 0, 96, 0, 5, ++ 200, 2, 255, 204, 76, 252, 255, 52, 30, 33, 0, 2, 255, 208, 2, 255, ++ 212, 2, 255, 216, 2, 255, 0, 0, 96, 0, 5, 136, 3, 255, 140, 3, 255, ++ 144, 3, 255, 148, 3, 255, 152, 3, 255, 0, 0, 96, 0, 5, 156, 3, 255, ++ 160, 3, 255, 164, 3, 255, 168, 3, 255, 172, 3, 255, 0, 0, 96, 0, 5, ++ 128, 3, 255, 132, 3, 255, 160, 6, 255, 180, 2, 255, 56, 7, 255, 0, 0, ++ 96, 0, 3, 164, 6, 255, 92, 6, 255, 152, 6, 255, 67, 57, 55, 55, 56, ++ 56, 53, 53, 54, 53, 136, 134, 134, 134, 133, 168, 166, 166, 166, 164, ++ 164, 244, 24, 3, 250, 101, 3, 204, 76, 69, 65, 66, 67, 64, 60, 59, 59, ++ 60, 136, 134, 134, 134, 133, 168, 166, 166, 166, 164, 164, 244, 26, ++ 3, 250, 102, 3, 204, 92, 82, 82, 82, 82, 75, 71, 71, 71, 71, 136, 134, ++ 134, 134, 133, 168, 166, 166, 166, 164, 164, 244, 31, 3, 250, 102, 3, ++ 204, 106, 99, 95, 95, 100, 87, 83, 82, 82, 83, 136, 134, 134, 134, 133, ++ 168, 166, 166, 166, 164, 164, 244, 31, 3, 250, 102, 3, 204, 124, 113, ++ 110, 110, 113, 97, 93, 92, 92, 93, 136, 134, 134, 134, 133, 168, 166, ++ 166, 166, 164, 164, 244, 31, 3, 250, 103, 3, 204, 140, 129, 127, 127, ++ 129, 111, 104, 103, 103, 104, 136, 134, 134, 134, 133, 168, 166, 166, ++ 166, 164, 164, 244, 31, 3, 250, 103, 76, 252, 255, 47, 31, 33, 0, 35, ++ 255, 2, 7, 127, 4, 6, 5, 56, 4, 136, 4, 156, 4, 136, 4, 216, 4, 116, ++ 4, 196, 4, 216, 4, 196, 4, 20, 5, 176, 4, 0, 5, 20, 5, 0, 5, 80, 5, ++ 246, 4, 70, 5, 90, 5, 70, 5, 150, 5, 60, 5, 140, 5, 160, 5, 140, 5, ++ 220, 5, 130, 5, 210, 5, 230, 5, 210, 5, 34, 6, 20, 255, 20, 255, 20, ++ 255, 20, 255, 20, 255, 20, 255, 1, 0, 0, 0, 96, 0, 5, 156, 2, 255, 160, ++ 2, 255, 164, 2, 255, 168, 2, 255, 172, 2, 255, 76, 76, 76, 76, 76, 95, ++ 95, 95, 95, 95, 108, 108, 108, 108, 108, 133, 133, 133, 133, 133, 153, ++ 153, 153, 153, 153, 179, 179, 179, 179, 179, 2, 7, 127, 0, 6, 5, 92, ++ 3, 62, 3, 72, 3, 92, 3, 72, 3, 152, 3, 122, 3, 132, 3, 152, 3, 132, ++ 3, 212, 3, 182, 3, 192, 3, 212, 3, 192, 3, 26, 4, 252, 3, 6, 4, 26, ++ 4, 6, 4, 96, 4, 66, 4, 76, 4, 96, 4, 76, 4, 166, 4, 136, 4, 146, 4, ++ 166, 4, 146, 4, 20, 255, 20, 255, 20, 255, 20, 255, 20, 255, 20, 255, ++ 1, 0, 0, 0, 96, 0, 5, 156, 2, 255, 160, 2, 255, 164, 2, 255, 168, 2, ++ 255, 172, 2, 255, 67, 57, 55, 55, 56, 76, 69, 65, 66, 67, 92, 83, 82, ++ 82, 82, 106, 99, 95, 95, 76, 252, 255, 42, 32, 33, 0, 100, 124, 113, ++ 110, 110, 113, 140, 129, 127, 127, 129, 0, 7, 4, 63, 0, 0, 0, 3, 1, ++ 196, 1, 8, 10, 32, 0, 8, 8, 0, 0, 4, 4, 0, 0, 16, 16, 0, 0, 8, 8, 0, ++ 0, 24, 24, 0, 0, 40, 40, 0, 0, 32, 32, 0, 0, 44, 44, 0, 0, 40, 40, 0, ++ 0, 48, 48, 0, 0, 65, 65, 0, 0, 52, 52, 0, 0, 73, 73, 0, 0, 32, 32, 1, ++ 1, 80, 80, 0, 0, 36, 36, 1, 1, 88, 88, 0, 0, 64, 64, 1, 1, 138, 138, ++ 0, 0, 96, 96, 1, 1, 139, 139, 0, 0, 100, 100, 1, 1, 140, 140, 0, 0, ++ 96, 96, 2, 2, 141, 141, 0, 0, 100, 100, 2, 2, 142, 142, 0, 0, 104, 104, ++ 2, 2, 143, 143, 0, 0, 108, 108, 2, 2, 150, 150, 0, 0, 112, 112, 2, 2, ++ 165, 165, 0, 0, 80, 80, 3, 3, 166, 166, 0, 0, 84, 84, 3, 3, 221, 221, ++ 0, 0, 116, 116, 3, 3, 229, 229, 0, 0, 120, 120, 3, 3, 237, 237, 0, 0, ++ 152, 152, 3, 3, 238, 238, 0, 0, 252, 252, 3, 3, 239, 239, 0, 0, 188, ++ 188, 3, 3, 239, 239, 0, 0, 188, 188, 3, 3, 3, 1, 100, 200, 10, 32, 0, ++ 64, 0, 0, 1, 64, 0, 0, 1, 64, 0, 0, 1, 64, 0, 0, 1, 64, 0, 0, 1, 65, ++ 0, 4, 1, 73, 0, 76, 252, 255, 37, 33, 33, 0, 36, 1, 80, 0, 64, 1, 88, ++ 0, 96, 1, 82, 0, 72, 1, 83, 0, 76, 1, 84, 0, 80, 1, 85, 0, 84, 1, 86, ++ 0, 88, 1, 87, 0, 92, 1, 102, 0, 152, 1, 110, 0, 184, 1, 118, 0, 216, ++ 1, 126, 0, 248, 1, 127, 0, 252, 1, 127, 0, 252, 1, 127, 0, 252, 1, 127, ++ 0, 252, 1, 127, 0, 252, 1, 3, 1, 58, 40, 11, 32, 0, 1, 0, 0, 1, 0, 0, ++ 5, 0, 0, 13, 0, 0, 29, 0, 0, 14, 0, 0, 30, 0, 0, 62, 0, 0, 15, 0, 0, ++ 31, 0, 0, 63, 0, 0, 127, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, ++ 0, 0, 255, 0, 0, 255, 0, 0, 3, 1, 5, 8, 8, 32, 0, 6, 3, 1, 5, 12, 8, ++ 32, 0, 5, 3, 1, 5, 16, 8, 32, 0, 11, 3, 1, 5, 20, 8, 32, 0, 10, 4, 7, ++ 152, 1, 4, 50, 31, 0, 0, 29, 0, 0, 28, 1, 0, 26, 2, 0, 23, 2, 0, 21, ++ 18, 0, 19, 85, 0, 17, 100, 0, 15, 17, 0, 14, 3, 0, 13, 20, 0, 11, 80, ++ 0, 10, 100, 0, 9, 35, 0, 8, 35, 0, 7, 3, 0, 7, 22, 0, 6, 21, 0, 5, 19, ++ 0, 5, 22, 0, 4, 19, 0, 4, 38, 0, 4, 25, 0, 3, 5, 0, 3, 8, 0, 3, 42, ++ 0, 2, 3, 0, 2, 76, 252, 255, 32, 34, 33, 0, 22, 0, 2, 9, 0, 2, 43, 0, ++ 2, 61, 0, 2, 63, 0, 1, 2, 0, 1, 21, 0, 1, 24, 0, 1, 58, 0, 1, 29, 0, ++ 1, 31, 0, 1, 143, 0, 1, 239, 0, 1, 63, 1, 1, 143, 1, 1, 207, 1, 1, 15, ++ 2, 1, 79, 2, 1, 127, 2, 1, 175, 2, 1, 207, 2, 1, 0, 0, 1, 0, 0, 4, 7, ++ 152, 1, 0, 50, 31, 0, 0, 29, 0, 0, 28, 1, 0, 26, 2, 0, 23, 2, 0, 21, ++ 18, 0, 19, 85, 0, 17, 100, 0, 15, 17, 0, 14, 3, 0, 13, 20, 0, 11, 80, ++ 0, 10, 100, 0, 9, 35, 0, 8, 35, 0, 7, 3, 0, 7, 22, 0, 6, 21, 0, 5, 19, ++ 0, 5, 22, 0, 4, 19, 0, 4, 38, 0, 4, 25, 0, 3, 5, 0, 3, 8, 0, 3, 42, ++ 0, 2, 3, 0, 2, 22, 0, 2, 9, 0, 2, 43, 0, 2, 61, 0, 2, 63, 0, 1, 2, 0, ++ 1, 21, 0, 1, 24, 0, 1, 58, 0, 1, 29, 0, 1, 31, 0, 1, 143, 0, 1, 239, ++ 0, 1, 63, 1, 1, 143, 1, 1, 207, 1, 1, 15, 2, 1, 79, 2, 1, 127, 2, 1, ++ 175, 2, 1, 207, 2, 1, 0, 0, 1, 0, 0, 3, 7, 43, 1, 0, 0, 0, 1, 0, 0, ++ 0, 0, 20, 10, 0, 4, 0, 0, 0, 0, 0, 0, 10, 2, 254, 11, 228, 76, 252, ++ 255, 27, 35, 33, 0, 254, 28, 1, 228, 254, 28, 1, 10, 2, 254, 11, 241, ++ 255, 15, 0, 241, 255, 15, 0, 5, 7, 36, 255, 1, 8, 8, 12, 0, 8, 1, 4, ++ 2, 0, 3, 252, 4, 248, 5, 244, 6, 240, 7, 12, 0, 8, 1, 4, 2, 0, 3, 252, ++ 4, 248, 5, 244, 6, 240, 7, 15, 3, 40, 2, 120, 20, 127, 90, 0, 20, 2, ++ 20, 30, 0, 2, 3, 0, 30, 170, 51, 25, 5, 207, 0, 128, 10, 146, 0, 0, ++ 0, 0, 7, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 5, 24, 19, 33, 0, ++ 144, 3, 1, 5, 201, 34, 32, 0, 0, 3, 1, 12, 220, 29, 32, 0, 1, 1, 48, ++ 0, 2, 10, 10, 0, 3, 1, 5, 72, 44, 32, 0, 1, 3, 1, 5, 36, 51, 32, 0, ++ 1, 3, 1, 5, 78, 5, 32, 0, 0, 3, 1, 6, 8, 30, 32, 0, 0, 0, 3, 1, 8, 184, ++ 40, 32, 0, 0, 0, 0, 0, 3, 1, 5, 237, 37, 32, 0, 0, 3, 1, 6, 198, 50, ++ 32, 0, 42, 14, 3, 1, 6, 172, 44, 32, 0, 240, 0, 3, 1, 6, 236, 39, 32, ++ 0, 128, 7, 3, 1, 5, 152, 52, 32, 0, 0, 4, 3, 12, 32, 0, 32, 0, 20, 20, ++ 26, 102, 10, 21, 0, 0, 5, 3, 32, 0, 27, 40, 80, 255, 255, 63, 0, 5, ++ 3, 31, 12, 194, 1, 76, 252, 255, 22, 36, 33, 0, 80, 80, 174, 56, 186, ++ 10, 5, 0, 255, 255, 7, 227, 50, 0, 184, 168, 198, 255, 17, 3, 4, 64, ++ 129, 0, 0, 10, 3, 4, 212, 48, 0, 0, 3, 1, 20, 96, 93, 13, 0, 60, 28, ++ 32, 0, 52, 28, 32, 0, 44, 28, 32, 0, 0, 10, 20, 0, 3, 1, 156, 19, 112, ++ 93, 13, 0, 156, 91, 32, 0, 184, 216, 32, 0, 24, 215, 32, 0, 76, 215, ++ 32, 0, 128, 215, 32, 0, 180, 215, 32, 0, 232, 215, 32, 0, 28, 216, 32, ++ 0, 80, 216, 32, 0, 132, 216, 32, 0, 0, 0, 0, 0, 119, 91, 3, 0, 71, 106, ++ 3, 0, 103, 15, 13, 0, 0, 0, 0, 0, 33, 15, 13, 0, 0, 0, 0, 0, 217, 15, ++ 13, 0, 185, 15, 13, 0, 235, 97, 3, 0, 141, 98, 3, 0, 59, 86, 3, 0, 93, ++ 209, 7, 0, 223, 215, 7, 0, 171, 124, 7, 0, 0, 0, 0, 0, 201, 19, 13, ++ 0, 0, 0, 0, 0, 163, 19, 13, 0, 233, 126, 7, 0, 181, 125, 7, 0, 169, ++ 127, 7, 0, 29, 206, 7, 0, 93, 209, 7, 0, 223, 215, 7, 0, 231, 205, 7, ++ 0, 0, 0, 0, 0, 59, 20, 13, 0, 0, 0, 0, 0, 253, 19, 13, 0, 165, 209, ++ 7, 0, 171, 210, 7, 0, 103, 215, 7, 0, 29, 206, 7, 0, 255, 0, 0, 0, 56, ++ 10, 33, 0, 0, 0, 48, 16, 76, 252, 255, 17, 37, 33, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 30, 13, 0, 129, 30, 13, 0, 29, ++ 31, 13, 0, 63, 32, 13, 0, 0, 12, 0, 0, 143, 251, 6, 0, 133, 56, 13, ++ 0, 119, 57, 13, 0, 31, 2, 7, 0, 193, 3, 7, 0, 0, 0, 0, 0, 125, 6, 7, ++ 0, 231, 10, 7, 0, 101, 57, 13, 0, 141, 254, 6, 0, 97, 4, 7, 0, 0, 0, ++ 0, 0, 219, 230, 2, 0, 189, 57, 13, 0, 13, 230, 2, 0, 253, 230, 2, 0, ++ 203, 236, 2, 0, 0, 0, 0, 0, 253, 232, 2, 0, 0, 0, 0, 0, 139, 233, 2, ++ 0, 103, 235, 2, 0, 249, 231, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, ++ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 194, 11, 163, ++ 18, 133, 23, 78, 27, 102, 30, 3, 33, 71, 35, 70, 37, 16, 39, 174, 40, ++ 40, 42, 131, 43, 197, 76, 252, 255, 12, 38, 33, 0, 44, 241, 45, 9, 47, ++ 16, 48, 9, 49, 244, 49, 210, 50, 166, 51, 112, 52, 49, 53, 234, 53, ++ 155, 54, 70, 55, 234, 55, 136, 56, 32, 57, 179, 57, 66, 58, 203, 58, ++ 81, 59, 211, 59, 81, 60, 203, 60, 66, 61, 182, 61, 39, 62, 149, 62, ++ 0, 63, 104, 63, 207, 63, 51, 64, 148, 64, 244, 64, 81, 65, 172, 65, ++ 6, 66, 94, 66, 180, 66, 8, 67, 91, 67, 172, 67, 252, 67, 74, 68, 151, ++ 68, 226, 68, 45, 69, 118, 69, 189, 69, 4, 70, 73, 70, 142, 70, 209, ++ 70, 19, 71, 85, 71, 149, 71, 212, 71, 19, 72, 81, 72, 141, 72, 201, ++ 72, 4, 73, 63, 73, 120, 73, 177, 73, 233, 73, 32, 74, 87, 74, 141, 74, ++ 194, 74, 247, 74, 43, 75, 94, 75, 145, 75, 195, 75, 245, 75, 38, 76, ++ 86, 76, 134, 76, 182, 76, 229, 76, 19, 77, 65, 77, 111, 77, 156, 77, ++ 200, 77, 244, 77, 32, 78, 75, 78, 118, 78, 160, 78, 202, 78, 244, 78, ++ 29, 79, 70, 79, 110, 79, 150, 79, 190, 79, 229, 79, 12, 80, 51, 80, ++ 89, 80, 127, 80, 165, 80, 202, 80, 239, 80, 19, 81, 56, 81, 92, 81, ++ 128, 81, 163, 81, 198, 81, 233, 81, 12, 82, 46, 82, 80, 82, 114, 82, ++ 147, 82, 181, 82, 214, 82, 247, 82, 23, 83, 55, 83, 87, 83, 119, 83, ++ 151, 83, 182, 83, 76, 252, 255, 7, 39, 33, 0, 213, 83, 244, 83, 19, ++ 84, 49, 84, 80, 84, 110, 84, 140, 84, 169, 84, 199, 84, 228, 84, 1, ++ 85, 30, 85, 58, 85, 87, 85, 115, 85, 143, 85, 171, 85, 199, 85, 227, ++ 85, 254, 85, 25, 86, 52, 86, 79, 86, 106, 86, 132, 86, 159, 86, 185, ++ 86, 211, 86, 237, 86, 7, 87, 32, 87, 58, 87, 83, 87, 108, 87, 133, 87, ++ 158, 87, 183, 87, 208, 87, 232, 87, 1, 88, 25, 88, 49, 88, 73, 88, 97, ++ 88, 120, 88, 144, 88, 167, 88, 190, 88, 214, 88, 237, 88, 4, 89, 26, ++ 89, 49, 89, 72, 89, 94, 89, 116, 89, 139, 89, 161, 89, 183, 89, 205, ++ 89, 226, 89, 248, 89, 14, 90, 35, 90, 56, 90, 78, 90, 99, 90, 120, 90, ++ 141, 90, 161, 90, 182, 90, 203, 90, 223, 90, 244, 90, 8, 91, 28, 91, ++ 49, 91, 69, 91, 89, 91, 108, 91, 128, 91, 148, 91, 168, 91, 187, 91, ++ 206, 91, 226, 91, 245, 91, 8, 92, 27, 92, 46, 92, 65, 92, 84, 92, 103, ++ 92, 122, 92, 140, 92, 159, 92, 177, 92, 195, 92, 214, 92, 232, 92, 250, ++ 92, 12, 93, 30, 93, 48, 93, 66, 93, 84, 93, 101, 93, 119, 93, 137, 93, ++ 154, 93, 171, 93, 189, 93, 206, 93, 223, 93, 240, 93, 1, 94, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 112, 1, 101, 0, 1, 0, 0, 0, 1, 76, 252, 255, 2, ++ 40, 33, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 101, 0, 1, 0, 0, 0, 1, 0, 0, ++ 0, 0, 0, 0, 0, 192, 4, 65, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, ++ 213, 78, 13, 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 188, ++ 1, 96, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 33, 182, 2, 0, 188, 188, ++ 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 32, 0, 96, 0, 0, 0, 0, 0, 255, ++ 0, 0, 0, 0, 0, 0, 0, 28, 0, 96, 0, 64, 0, 0, 0, 255, 0, 0, 0, 0, 0, ++ 0, 0, 24, 0, 96, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 20, 0, 96, ++ 0, 240, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 192, 4, 65, 0, 1, 0, 0, 0, ++ 255, 255, 0, 0, 0, 0, 0, 0, 44, 0, 96, 0, 48, 0, 0, 0, 255, 0, 0, 0, ++ 0, 0, 0, 0, 36, 0, 96, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 65, ++ 79, 13, 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 232, 2, 96, ++ 0, 64, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 100, 4, 65, 0, 186, 64, 0, ++ 0, 255, 255, 0, 0, 0, 0, 0, 0, 96, 4, 65, 0, 76, 252, 255, 253, 40, ++ 33, 0, 192, 80, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 105, 78, 13, 0, 188, ++ 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 52, 6, 65, 0, 128, 24, 0, ++ 0, 255, 255, 0, 0, 0, 0, 0, 0, 96, 1, 96, 0, 85, 0, 0, 0, 255, 0, 0, ++ 0, 0, 0, 0, 0, 48, 4, 65, 0, 233, 2, 0, 0, 255, 255, 0, 0, 0, 0, 0, ++ 0, 220, 6, 65, 0, 241, 130, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 192, 4, ++ 65, 0, 33, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 136, 4, 65, 0, 0, 0, ++ 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 219, 79, 13, 0, 188, 188, 188, 188, ++ 67, 67, 67, 67, 0, 0, 0, 0, 7, 80, 13, 0, 188, 188, 188, 188, 67, 67, ++ 67, 67, 0, 0, 0, 0, 121, 79, 13, 0, 188, 188, 188, 188, 67, 67, 67, ++ 67, 0, 0, 0, 0, 156, 2, 96, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, ++ 160, 2, 96, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 164, 2, 96, 0, ++ 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 168, 2, 96, 0, 0, 0, 0, 0, 255, ++ 0, 0, 0, 0, 0, 0, 0, 172, 2, 96, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, ++ 0, 76, 252, 255, 248, 41, 33, 0, 0, 200, 2, 96, 0, 0, 0, 0, 0, 255, ++ 0, 0, 0, 0, 0, 0, 0, 204, 2, 96, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, ++ 0, 0, 208, 2, 96, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 212, 2, 96, ++ 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 216, 2, 96, 0, 0, 0, 0, 0, ++ 255, 0, 0, 0, 0, 0, 0, 0, 145, 78, 13, 0, 188, 188, 188, 188, 67, 67, ++ 67, 67, 0, 0, 0, 0, 129, 183, 2, 0, 188, 188, 188, 188, 67, 67, 67, ++ 67, 0, 0, 0, 0, 240, 0, 100, 0, 1, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, ++ 228, 0, 100, 0, 12, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 224, 0, 100, ++ 0, 48, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 252, 2, 96, 0, 1, 0, 0, 0, 255, 0, 0, 0, 0, 0, ++ 0, 0, 188, 1, 96, 0, 1, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 213, 78, ++ 13, 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 12, 1, 96, 0, ++ 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 51, 80, 13, 0, 188, 188, 188, ++ 188, 67, 67, 76, 252, 255, 243, 42, 33, 0, 67, 67, 0, 0, 0, 0, 96, 1, ++ 101, 0, 1, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 112, 1, 101, 0, 1, 0, ++ 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 248, 0, 100, 0, 223, 0, 0, 0, 255, ++ 255, 0, 0, 0, 0, 0, 0, 200, 0, 100, 0, 24, 0, 0, 0, 255, 255, 0, 0, ++ 0, 0, 0, 0, 32, 0, 96, 0, 190, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 28, ++ 0, 96, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 24, 0, 96, 0, 15, ++ 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 20, 0, 96, 0, 255, 0, 0, 0, 255, ++ 0, 0, 0, 0, 0, 0, 0, 36, 0, 96, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, ++ 0, 0, 44, 0, 96, 0, 48, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 220, 4, 96, ++ 0, 8, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 232, 4, 65, 0, 2, 194, 0, 0, ++ 255, 0, 0, 0, 0, 0, 0, 0, 100, 4, 65, 0, 186, 64, 0, 0, 255, 255, 0, ++ 0, 0, 0, 0, 0, 52, 6, 65, 0, 0, 72, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, ++ 232, 2, 96, 0, 69, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 219, 79, 13, ++ 0, 188, 76, 252, 255, 238, 43, 33, 0, 188, 188, 188, 67, 67, 67, 67, ++ 0, 0, 0, 0, 7, 80, 13, 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, ++ 0, 0, 105, 78, 13, 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, ++ 145, 78, 13, 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 63, ++ 81, 13, 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 83, 80, 13, ++ 0, 188, 188, 188, 188, 67, 67, 67, 67, 0, 0, 0, 0, 192, 4, 65, 0, 33, ++ 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 231, 80, 13, 0, 188, 188, 188, ++ 188, 67, 67, 67, 67, 0, 0, 0, 0, 153, 79, 13, 0, 188, 188, 188, 188, ++ 67, 67, 67, 67, 0, 0, 0, 0, 240, 0, 100, 0, 1, 0, 0, 0, 255, 0, 0, 0, ++ 0, 0, 0, 0, 228, 0, 100, 0, 12, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 224, ++ 0, 100, 0, 48, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 160, 2, 0, 69, 78, 13, 0, 57, 160, ++ 2, 0, 87, 160, 2, 0, 211, 160, 2, 0, 123, 161, 2, 0, 181, 161, 2, 0, ++ 197, 162, 2, 0, 0, 0, 0, 0, 12, 0, 10, 5, 8, 6, 6, 10, 4, 11, 2, 13, ++ 76, 252, 255, 233, 44, 33, 0, 0, 15, 254, 17, 252, 19, 250, 21, 248, ++ 23, 246, 25, 244, 27, 242, 29, 240, 31, 238, 33, 236, 35, 234, 37, 232, ++ 39, 230, 41, 10, 1, 8, 5, 6, 7, 4, 11, 2, 12, 0, 14, 100, 1, 96, 0, ++ 104, 1, 96, 0, 108, 1, 96, 0, 112, 1, 96, 0, 116, 1, 96, 0, 120, 1, ++ 96, 0, 124, 1, 96, 0, 132, 1, 96, 0, 81, 40, 13, 0, 3, 0, 0, 0, 189, ++ 48, 13, 0, 6, 0, 9, 0, 83, 49, 13, 0, 4, 0, 8, 0, 83, 50, 13, 0, 4, ++ 0, 6, 0, 101, 50, 13, 0, 3, 0, 7, 0, 69, 41, 13, 0, 0, 0, 14, 0, 245, ++ 68, 13, 0, 10, 0, 6, 0, 85, 41, 13, 0, 35, 0, 0, 0, 73, 86, 13, 0, 4, ++ 0, 6, 0, 207, 40, 13, 0, 13, 0, 6, 0, 223, 47, 13, 0, 0, 0, 0, 0, 115, ++ 48, 13, 0, 3, 0, 14, 0, 143, 190, 1, 0, 0, 0, 6, 0, 143, 41, 13, 0, ++ 0, 0, 6, 0, 183, 41, 13, 0, 10, 0, 6, 0, 117, 50, 13, 0, 12, 0, 6, 0, ++ 85, 43, 13, 0, 10, 0, 0, 0, 187, 43, 13, 0, 7, 0, 0, 0, 219, 41, 13, ++ 0, 28, 0, 0, 0, 13, 43, 13, 0, 3, 0, 0, 0, 143, 50, 13, 0, 5, 0, 7, ++ 0, 0, 0, 0, 0, 37, 0, 0, 0, 177, 53, 13, 76, 252, 255, 228, 45, 33, ++ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 3, 1, 5, 44, 12, 33, 0, 0, 3, 1, 5, 43, ++ 12, 33, 0, 3, 3, 1, 5, 42, 12, 33, 0, 0, 3, 1, 5, 40, 12, 33, 0, 1, ++ 3, 1, 5, 41, 12, 33, 0, 0, 3, 1, 8, 36, 12, 33, 0, 185, 185, 187, 185, ++ 3, 1, 8, 32, 12, 33, 0, 185, 185, 187, 185, 3, 1, 5, 28, 12, 33, 0, ++ 0, 3, 1, 6, 30, 12, 33, 0, 0, 0, 3, 1, 8, 20, 12, 33, 0, 16, 0, 0, 0, ++ 3, 1, 8, 24, 12, 33, 0, 15, 0, 0, 0, 3, 1, 40, 240, 11, 33, 0, 82, 102, ++ 252, 252, 62, 82, 253, 253, 42, 62, 254, 254, 22, 42, 255, 255, 2, 22, ++ 0, 0, 238, 2, 1, 1, 218, 238, 2, 2, 198, 218, 3, 3, 178, 198, 4, 4, ++ 3, 1, 5, 235, 11, 33, 0, 0, 3, 1, 5, 236, 11, 33, 0, 0, 3, 1, 5, 237, ++ 11, 33, 0, 0, 3, 1, 5, 233, 11, 33, 0, 0, 3, 1, 5, 232, 11, 33, 0, 0, ++ 3, 1, 5, 234, 11, 33, 0, 0, 3, 1, 6, 238, 11, 33, 0, 144, 1, 3, 1, 8, ++ 228, 11, 33, 0, 40, 0, 0, 0, 3, 1, 8, 224, 11, 33, 0, 15, 0, 0, 0, 3, ++ 1, 5, 222, 11, 33, 0, 182, 3, 1, 5, 223, 11, 33, 0, 170, 3, 1, 5, 76, ++ 252, 255, 223, 46, 33, 0, 221, 11, 33, 0, 1, 3, 1, 5, 220, 11, 33, 0, ++ 40, 3, 1, 5, 219, 11, 33, 0, 1, 3, 1, 5, 218, 11, 33, 0, 0, 3, 1, 5, ++ 216, 11, 33, 0, 0, 3, 1, 5, 217, 11, 33, 0, 0, 3, 1, 164, 3, 56, 10, ++ 33, 0, 156, 1, 96, 0, 140, 2, 96, 0, 136, 2, 96, 0, 152, 2, 96, 0, 148, ++ 4, 65, 0, 152, 4, 65, 0, 12, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 6, 0, ++ 0, 0, 93, 0, 0, 0, 108, 2, 0, 0, 3, 128, 0, 0, 6, 0, 0, 0, 9, 0, 0, ++ 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 108, 2, 0, 0, 3, 128, 0, 0, ++ 0, 0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 108, ++ 2, 0, 0, 3, 128, 0, 0, 250, 0, 0, 0, 21, 0, 0, 0, 93, 0, 0, 0, 6, 0, ++ 0, 0, 93, 0, 0, 0, 108, 2, 0, 0, 3, 128, 0, 0, 244, 0, 0, 0, 27, 0, ++ 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 108, 2, 0, 0, 3, 128, 0, ++ 0, 238, 0, 0, 0, 33, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, ++ 108, 2, 0, 0, 3, 128, 0, 0, 232, 0, 0, 0, 39, 0, 76, 252, 255, 218, ++ 47, 33, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 108, 2, 0, 0, ++ 3, 128, 0, 0, 226, 0, 0, 0, 45, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, ++ 0, 0, 0, 108, 2, 0, 0, 3, 128, 0, 0, 220, 0, 0, 0, 49, 0, 0, 0, 93, ++ 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 108, 2, 0, 0, 3, 128, 0, 0, 214, 0, ++ 0, 0, 49, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 108, 2, 0, ++ 0, 1, 128, 0, 0, 208, 0, 0, 0, 49, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, ++ 16, 0, 0, 0, 92, 2, 0, 0, 1, 128, 0, 0, 202, 0, 0, 0, 49, 0, 0, 0, 93, ++ 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 74, 2, 0, 0, 1, 128, 0, 0, 196, 0, ++ 0, 0, 49, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 93, 0, 0, 0, 68, 2, 0, 0, ++ 1, 128, 0, 0, 190, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 68, 2, 0, 0, 1, 128, 0, 0, 3, 1, 5, 52, 10, 33, 0, 1, 3, 1, ++ 5, 49, 10, 33, 0, 6, 3, 1, 5, 50, 10, 33, 0, 4, 3, 1, 5, 51, 10, 33, ++ 0, 0, 3, 76, 252, 255, 213, 48, 33, 0, 1, 5, 48, 10, 33, 0, 0, 3, 1, ++ 24, 0, 2, 13, 0, 145, 248, 216, 33, 1, 104, 33, 244, 64, 1, 10, 177, ++ 1, 245, 128, 1, 92, 247, 55, 189, 3, 1, 20, 20, 2, 13, 0, 143, 176, ++ 0, 36, 1, 72, 196, 97, 109, 247, 134, 188, 0, 63, 32, 0, 3, 1, 20, 36, ++ 2, 13, 0, 48, 70, 161, 123, 106, 70, 11, 171, 0, 240, 58, 251, 109, ++ 247, 28, 189, 3, 1, 24, 52, 2, 13, 0, 168, 105, 112, 247, 102, 253, ++ 176, 241, 128, 111, 1, 210, 108, 247, 9, 189, 108, 247, 16, 189, 3, ++ 1, 20, 72, 2, 13, 0, 32, 70, 0, 125, 2, 40, 1, 209, 32, 70, 144, 71, ++ 109, 247, 68, 184, 3, 1, 28, 88, 2, 13, 0, 4, 72, 0, 120, 8, 177, 0, ++ 240, 65, 251, 3, 32, 51, 247, 32, 253, 108, 247, 99, 190, 48, 10, 33, ++ 0, 3, 1, 16, 112, 2, 13, 0, 33, 0, 0, 240, 67, 251, 160, 117, 112, 189, ++ 0, 0, 3, 1, 32, 124, 2, 13, 0, 2, 180, 8, 70, 5, 240, 233, 251, 2, 188, ++ 32, 177, 62, 32, 91, 247, 219, 252, 177, 247, 113, 188, 189, 232, 240, ++ 159, 0, 0, 3, 1, 14, 152, 2, 13, 0, 16, 34, 168, 247, 89, 253, 169, ++ 247, 15, 184, 3, 1, 16, 162, 2, 13, 0, 2, 213, 32, 70, 0, 240, 237, ++ 251, 168, 247, 139, 187, 76, 252, 255, 208, 49, 33, 0, 3, 1, 22, 174, ++ 2, 13, 0, 104, 70, 140, 247, 221, 249, 16, 185, 32, 70, 117, 247, 121, ++ 250, 124, 189, 0, 0, 3, 1, 22, 192, 2, 13, 0, 162, 247, 188, 255, 24, ++ 185, 96, 104, 8, 177, 117, 247, 112, 250, 163, 247, 81, 187, 3, 1, 26, ++ 210, 2, 13, 0, 177, 247, 16, 252, 33, 120, 155, 248, 4, 0, 129, 66, ++ 1, 211, 163, 247, 54, 191, 163, 247, 200, 190, 3, 1, 24, 232, 2, 13, ++ 0, 49, 185, 193, 143, 1, 41, 3, 209, 176, 248, 70, 16, 164, 247, 77, ++ 185, 164, 247, 93, 185, 3, 1, 12, 252, 2, 13, 0, 0, 240, 0, 253, 124, ++ 189, 0, 0, 3, 1, 16, 4, 3, 13, 0, 0, 181, 0, 240, 94, 255, 93, 248, ++ 4, 235, 112, 71, 3, 1, 12, 16, 3, 13, 0, 115, 247, 80, 252, 114, 247, ++ 54, 186, 3, 1, 18, 24, 3, 13, 0, 32, 70, 107, 247, 9, 255, 48, 70, 117, ++ 247, 159, 248, 112, 189, 3, 1, 22, 38, 3, 13, 0, 32, 70, 0, 240, 2, ++ 254, 24, 177, 212, 248, 152, 32, 100, 247, 151, 191, 16, 189, 3, 1, ++ 20, 56, 3, 13, 0, 32, 70, 0, 240, 7, 254, 255, 32, 132, 248, 29, 1, ++ 102, 247, 31, 189, 3, 1, 20, 72, 3, 13, 0, 32, 70, 0, 240, 255, 253, ++ 255, 32, 132, 248, 29, 1, 101, 247, 124, 188, 3, 1, 24, 88, 76, 252, ++ 255, 203, 50, 33, 0, 3, 13, 0, 212, 248, 212, 0, 174, 247, 120, 248, ++ 0, 33, 212, 248, 216, 0, 100, 247, 190, 190, 0, 0, 3, 1, 20, 108, 3, ++ 13, 0, 0, 240, 101, 255, 8, 177, 165, 247, 101, 189, 165, 247, 115, ++ 189, 0, 0, 3, 1, 20, 124, 3, 13, 0, 163, 66, 1, 211, 167, 247, 10, 188, ++ 68, 33, 167, 247, 8, 188, 0, 0, 3, 1, 20, 140, 3, 13, 0, 1, 240, 105, ++ 248, 32, 70, 189, 232, 16, 64, 106, 247, 196, 190, 0, 0, 3, 1, 20, 156, ++ 3, 13, 0, 132, 248, 48, 1, 32, 70, 0, 240, 211, 253, 161, 247, 151, ++ 185, 0, 0, 3, 1, 12, 172, 3, 13, 0, 1, 240, 106, 255, 32, 70, 112, 189, ++ 3, 1, 12, 180, 3, 13, 0, 189, 232, 248, 67, 2, 240, 84, 184, 3, 1, 16, ++ 188, 3, 13, 0, 32, 70, 2, 240, 157, 249, 1, 36, 140, 247, 207, 189, ++ 3, 1, 22, 200, 3, 13, 0, 32, 70, 41, 70, 2, 240, 38, 250, 8, 177, 79, ++ 247, 147, 190, 79, 247, 165, 190, 3, 1, 30, 218, 3, 13, 0, 97, 136, ++ 193, 243, 201, 1, 0, 41, 3, 208, 3, 40, 3, 208, 79, 247, 242, 185, 79, ++ 247, 117, 186, 79, 247, 240, 185, 3, 1, 28, 244, 3, 13, 0, 225, 121, ++ 1, 41, 3, 208, 32, 40, 3, 211, 132, 247, 235, 188, 132, 247, 240, 188, ++ 132, 247, 248, 188, 76, 252, 255, 198, 51, 33, 0, 0, 0, 3, 1, 20, 12, ++ 4, 13, 0, 32, 136, 2, 33, 6, 34, 227, 28, 189, 232, 16, 64, 51, 247, ++ 86, 185, 3, 1, 28, 28, 4, 13, 0, 79, 244, 250, 87, 74, 70, 65, 70, 32, ++ 70, 2, 240, 225, 251, 8, 185, 127, 247, 237, 190, 127, 247, 232, 190, ++ 3, 1, 28, 52, 4, 13, 0, 187, 70, 79, 244, 250, 44, 32, 70, 2, 240, 254, ++ 251, 8, 177, 127, 247, 108, 191, 127, 247, 132, 191, 0, 0, 3, 1, 28, ++ 76, 4, 13, 0, 4, 112, 125, 247, 170, 251, 94, 247, 91, 252, 91, 247, ++ 21, 252, 91, 247, 107, 252, 91, 247, 180, 187, 0, 0, 3, 1, 24, 100, ++ 4, 13, 0, 2, 180, 48, 247, 126, 250, 2, 188, 32, 70, 48, 247, 118, 254, ++ 48, 247, 88, 191, 0, 0, 3, 1, 48, 120, 4, 13, 0, 9, 75, 27, 120, 51, ++ 177, 148, 249, 26, 16, 70, 49, 90, 41, 8, 216, 83, 247, 248, 190, 148, ++ 249, 26, 16, 21, 49, 30, 41, 1, 216, 83, 247, 241, 190, 83, 247, 215, ++ 190, 0, 0, 52, 10, 33, 0, 3, 1, 28, 164, 4, 13, 0, 33, 122, 1, 41, 3, ++ 208, 32, 40, 3, 211, 83, 247, 217, 190, 83, 247, 221, 190, 83, 247, ++ 201, 190, 0, 0, 3, 1, 16, 188, 4, 13, 0, 40, 70, 2, 240, 253, 254, 72, ++ 247, 240, 187, 0, 0, 3, 1, 52, 200, 4, 76, 252, 255, 193, 52, 33, 0, ++ 13, 0, 71, 242, 20, 1, 136, 66, 3, 209, 8, 72, 0, 120, 0, 177, 16, 189, ++ 8, 32, 117, 247, 175, 248, 1, 0, 249, 208, 71, 242, 20, 2, 148, 66, ++ 2, 209, 1, 34, 1, 72, 2, 112, 140, 247, 17, 184, 76, 94, 13, 0, 3, 1, ++ 12, 248, 4, 13, 0, 2, 240, 46, 255, 16, 189, 0, 0, 3, 1, 20, 0, 5, 13, ++ 0, 21, 127, 6, 45, 1, 208, 194, 248, 26, 64, 134, 247, 139, 187, 0, ++ 0, 3, 1, 20, 16, 5, 13, 0, 32, 177, 8, 32, 132, 248, 162, 0, 150, 247, ++ 113, 185, 112, 189, 0, 0, 3, 1, 16, 32, 5, 13, 0, 32, 70, 3, 240, 7, ++ 248, 189, 232, 240, 129, 0, 0, 3, 1, 20, 44, 5, 13, 0, 232, 96, 1, 32, ++ 168, 118, 0, 32, 104, 118, 153, 247, 244, 189, 0, 0, 3, 1, 16, 60, 5, ++ 13, 0, 200, 248, 8, 16, 3, 240, 114, 248, 114, 247, 38, 191, 3, 1, 76, ++ 72, 5, 13, 0, 12, 73, 9, 120, 65, 177, 12, 73, 8, 120, 40, 177, 0, 32, ++ 8, 112, 10, 73, 79, 240, 1, 0, 8, 112, 9, 73, 12, 32, 8, 96, 9, 72, ++ 1, 105, 65, 240, 1, 1, 1, 97, 1, 104, 65, 240, 1, 1, 1, 96, 0, 32, 112, ++ 71, 218, 11, 33, 0, 151, 30, 32, 0, 78, 94, 13, 0, 52, 9, 100, 0, 96, ++ 1, 101, 0, 76, 252, 255, 188, 53, 33, 0, 3, 1, 24, 144, 5, 13, 0, 102, ++ 247, 109, 252, 24, 185, 224, 105, 192, 2, 115, 247, 123, 185, 115, 247, ++ 122, 185, 0, 0, 3, 1, 28, 164, 5, 13, 0, 5, 209, 4, 72, 0, 120, 16, ++ 185, 96, 125, 86, 247, 11, 184, 0, 0, 86, 247, 18, 184, 219, 11, 33, ++ 0, 3, 1, 32, 188, 5, 13, 0, 0, 40, 8, 208, 0, 41, 6, 208, 136, 66, 200, ++ 191, 64, 26, 184, 191, 9, 26, 249, 209, 112, 71, 0, 32, 112, 71, 0, ++ 0, 3, 1, 28, 216, 5, 13, 0, 148, 248, 157, 0, 32, 240, 1, 0, 132, 248, ++ 157, 0, 104, 3, 1, 213, 111, 247, 82, 185, 111, 247, 90, 185, 3, 1, ++ 36, 240, 5, 13, 0, 8, 208, 1, 6, 6, 213, 148, 248, 168, 0, 3, 240, 176, ++ 248, 192, 126, 192, 7, 3, 208, 148, 248, 148, 0, 111, 247, 131, 185, ++ 111, 247, 131, 185, 3, 1, 44, 16, 6, 13, 0, 128, 123, 112, 247, 240, ++ 251, 5, 70, 48, 104, 176, 248, 216, 16, 168, 178, 112, 247, 49, 252, ++ 249, 136, 136, 66, 4, 221, 48, 104, 144, 248, 168, 0, 110, 247, 238, ++ 189, 110, 247, 238, 189, 3, 1, 22, 56, 6, 13, 0, 5, 208, 0, 181, 106, ++ 247, 242, 253, 106, 247, 255, 254, 0, 189, 158, 247, 110, 191, 3, 1, ++ 22, 74, 6, 13, 0, 8, 185, 132, 248, 68, 96, 248, 178, 132, 76, 252, ++ 255, 183, 54, 33, 0, 248, 62, 0, 158, 247, 58, 190, 0, 0, 3, 1, 20, ++ 92, 6, 13, 0, 132, 248, 136, 0, 1, 32, 132, 248, 33, 0, 125, 247, 31, ++ 188, 0, 0, 3, 1, 20, 108, 6, 13, 0, 2, 45, 189, 232, 112, 64, 1, 208, ++ 107, 247, 244, 188, 107, 247, 90, 189, 3, 1, 16, 124, 6, 13, 0, 32, ++ 70, 3, 240, 137, 248, 132, 247, 192, 184, 0, 0, 3, 1, 10, 136, 6, 13, ++ 0, 3, 240, 138, 250, 112, 189, 3, 1, 10, 142, 6, 13, 0, 3, 240, 180, ++ 250, 16, 189, 3, 1, 8, 148, 6, 13, 0, 16, 181, 16, 189, 3, 1, 8, 152, ++ 6, 13, 0, 3, 240, 26, 187, 3, 1, 12, 156, 6, 13, 0, 3, 240, 25, 251, ++ 16, 189, 0, 0, 3, 1, 10, 164, 6, 13, 0, 3, 240, 181, 251, 112, 189, ++ 3, 1, 20, 170, 6, 13, 0, 15, 180, 3, 240, 222, 251, 15, 188, 189, 232, ++ 16, 64, 157, 247, 28, 187, 3, 1, 26, 186, 6, 13, 0, 0, 32, 15, 180, ++ 3, 240, 85, 252, 15, 188, 134, 247, 102, 250, 32, 104, 139, 247, 63, ++ 184, 0, 0, 3, 1, 12, 208, 6, 13, 0, 3, 240, 54, 255, 189, 232, 240, ++ 129, 3, 1, 12, 216, 6, 13, 0, 189, 232, 240, 79, 4, 240, 169, 184, 3, ++ 1, 16, 224, 6, 13, 0, 98, 247, 153, 251, 173, 248, 12, 0, 100, 247, ++ 70, 187, 76, 252, 255, 178, 55, 33, 0, 3, 1, 12, 236, 6, 13, 0, 4, 240, ++ 61, 249, 100, 247, 159, 184, 3, 1, 32, 244, 6, 13, 0, 41, 70, 50, 70, ++ 4, 240, 45, 250, 6, 70, 44, 177, 57, 70, 4, 240, 27, 250, 7, 70, 98, ++ 247, 38, 191, 98, 247, 44, 191, 3, 1, 20, 16, 7, 13, 0, 0, 45, 3, 208, ++ 5, 45, 1, 208, 99, 247, 66, 184, 189, 232, 240, 129, 3, 1, 10, 32, 7, ++ 13, 0, 4, 240, 42, 251, 112, 189, 3, 1, 18, 38, 7, 13, 0, 2, 209, 1, ++ 32, 75, 247, 237, 191, 4, 240, 108, 251, 16, 189, 3, 1, 32, 52, 7, 13, ++ 0, 1, 32, 96, 243, 15, 36, 4, 240, 254, 0, 92, 247, 136, 253, 65, 247, ++ 179, 248, 8, 177, 4, 240, 152, 253, 92, 247, 242, 189, 3, 1, 20, 80, ++ 7, 13, 0, 2, 240, 18, 254, 32, 70, 41, 70, 116, 247, 146, 252, 79, 247, ++ 216, 191, 3, 1, 10, 96, 7, 13, 0, 5, 240, 40, 249, 112, 189, 3, 1, 10, ++ 102, 7, 13, 0, 5, 240, 89, 249, 112, 189, 3, 1, 16, 108, 7, 13, 0, 25, ++ 177, 4, 70, 0, 32, 130, 247, 45, 187, 112, 189, 3, 1, 44, 120, 7, 13, ++ 0, 153, 248, 0, 48, 75, 185, 5, 180, 5, 240, 128, 249, 3, 0, 5, 188, ++ 27, 177, 70, 234, 3, 6, 98, 247, 193, 185, 2, 75, 2, 235, 66, 2, 98, ++ 247, 76, 252, 255, 173, 56, 33, 0, 117, 185, 142, 94, 8, 0, 3, 1, 12, ++ 160, 7, 13, 0, 0, 136, 192, 245, 88, 32, 16, 189, 3, 1, 12, 168, 7, ++ 13, 0, 5, 240, 126, 249, 112, 189, 0, 0, 3, 1, 20, 176, 7, 13, 0, 32, ++ 70, 2, 73, 50, 247, 143, 252, 166, 247, 153, 188, 77, 91, 13, 0, 3, ++ 1, 20, 192, 7, 13, 0, 5, 240, 142, 249, 1, 72, 2, 36, 165, 247, 222, ++ 191, 108, 159, 32, 0, 3, 1, 12, 208, 7, 13, 0, 5, 240, 230, 249, 50, ++ 247, 192, 187, 3, 1, 28, 216, 7, 13, 0, 4, 70, 13, 70, 5, 240, 234, ++ 249, 16, 177, 2, 74, 50, 247, 255, 188, 112, 189, 0, 0, 196, 24, 32, ++ 0, 3, 1, 16, 240, 7, 13, 0, 2, 40, 1, 217, 74, 247, 4, 191, 74, 247, ++ 5, 191, 3, 1, 14, 252, 7, 13, 0, 32, 70, 5, 240, 55, 250, 76, 247, 16, ++ 184, 3, 1, 18, 6, 8, 13, 0, 32, 70, 41, 70, 5, 240, 76, 250, 189, 232, ++ 240, 129, 0, 0, 3, 1, 20, 20, 8, 13, 0, 42, 32, 32, 98, 32, 70, 5, 240, ++ 107, 250, 2, 40, 74, 247, 45, 190, 3, 1, 132, 1, 36, 8, 13, 0, 112, ++ 181, 4, 70, 92, 247, 18, 248, 23, 77, 149, 248, 216, 1, 56, 179, 22, ++ 72, 23, 74, 65, 104, 65, 243, 128, 16, 64, 28, 16, 96, 196, 235, 4, ++ 16, 20, 76, 252, 255, 168, 57, 33, 0, 74, 0, 235, 132, 16, 2, 235, 128, ++ 0, 144, 248, 192, 32, 17, 72, 7, 42, 22, 208, 17, 74, 18, 104, 82, 30, ++ 2, 96, 32, 70, 197, 248, 12, 17, 91, 247, 169, 252, 116, 247, 245, 253, ++ 149, 248, 217, 17, 65, 240, 1, 1, 133, 248, 217, 17, 116, 247, 241, ++ 253, 0, 32, 112, 189, 3, 32, 112, 189, 1, 34, 233, 231, 128, 1, 33, ++ 0, 112, 29, 32, 0, 164, 53, 32, 0, 172, 117, 32, 0, 160, 49, 32, 0, ++ 168, 49, 32, 0, 3, 1, 68, 164, 8, 13, 0, 112, 181, 12, 70, 176, 249, ++ 32, 16, 64, 140, 21, 70, 30, 70, 8, 24, 11, 213, 64, 66, 25, 70, 112, ++ 247, 77, 250, 34, 70, 51, 70, 41, 70, 189, 232, 112, 64, 16, 70, 112, ++ 247, 71, 184, 25, 70, 112, 247, 66, 250, 34, 70, 51, 70, 41, 70, 189, ++ 232, 112, 64, 16, 70, 112, 247, 48, 185, 3, 1, 28, 228, 8, 13, 0, 16, ++ 181, 116, 247, 184, 253, 4, 70, 48, 247, 228, 252, 32, 70, 189, 232, ++ 16, 64, 116, 247, 180, 189, 0, 0, 3, 1, 40, 252, 8, 13, 0, 16, 181, ++ 7, 75, 0, 34, 83, 248, 34, 64, 140, 66, 2, 209, 64, 240, 3, 0, 16, 189, ++ 82, 28, 10, 42, 245, 219, 64, 240, 1, 0, 16, 189, 112, 93, 13, 0, 3, ++ 1, 32, 32, 9, 13, 0, 65, 124, 2, 41, 8, 208, 76, 252, 255, 163, 58, ++ 33, 0, 3, 41, 6, 208, 0, 124, 22, 40, 3, 208, 23, 40, 1, 208, 0, 32, ++ 112, 71, 1, 32, 112, 71, 3, 1, 132, 1, 60, 9, 13, 0, 45, 233, 254, 67, ++ 27, 76, 102, 120, 160, 120, 8, 177, 6, 70, 34, 224, 132, 247, 238, 249, ++ 8, 177, 38, 120, 29, 224, 23, 72, 0, 37, 160, 70, 208, 233, 0, 18, 128, ++ 104, 0, 145, 205, 233, 1, 32, 111, 70, 87, 248, 37, 0, 4, 104, 7, 224, ++ 32, 31, 255, 247, 212, 255, 16, 177, 152, 248, 0, 96, 4, 224, 36, 104, ++ 87, 248, 37, 0, 160, 66, 243, 209, 109, 28, 237, 178, 3, 45, 235, 211, ++ 9, 72, 1, 120, 142, 66, 7, 208, 6, 112, 3, 176, 49, 70, 189, 232, 240, ++ 67, 2, 32, 116, 247, 104, 188, 189, 232, 254, 131, 0, 0, 49, 10, 33, ++ 0, 96, 93, 13, 0, 152, 93, 13, 0, 3, 1, 18, 188, 9, 13, 0, 47, 72, 0, ++ 33, 1, 97, 65, 97, 129, 97, 193, 97, 112, 71, 3, 1, 26, 202, 9, 13, ++ 0, 0, 32, 43, 75, 1, 70, 16, 51, 83, 248, 33, 32, 73, 28, 16, 67, 4, ++ 41, 249, 211, 112, 71, 3, 1, 144, 1, 224, 9, 13, 0, 254, 181, 38, 78, ++ 4, 0, 31, 70, 79, 240, 0, 5, 6, 241, 16, 6, 4, 208, 1, 44, 2, 208, 2, ++ 40, 45, 208, 52, 224, 16, 104, 0, 144, 144, 136, 173, 76, 252, 255, ++ 158, 59, 33, 0, 248, 4, 0, 2, 170, 104, 70, 113, 247, 127, 255, 28, ++ 73, 9, 120, 136, 66, 39, 210, 128, 40, 37, 210, 65, 9, 0, 240, 31, 0, ++ 1, 34, 86, 248, 33, 48, 2, 250, 0, 242, 12, 177, 147, 67, 15, 224, 19, ++ 66, 1, 208, 23, 37, 23, 224, 223, 248, 64, 192, 7, 240, 1, 7, 135, 64, ++ 92, 248, 33, 64, 148, 67, 60, 67, 76, 248, 33, 64, 19, 67, 70, 248, ++ 33, 48, 8, 224, 0, 32, 1, 70, 70, 248, 32, 16, 64, 28, 4, 40, 250, 211, ++ 0, 224, 18, 37, 40, 70, 254, 189, 3, 1, 28, 108, 10, 13, 0, 0, 40, 4, ++ 208, 9, 56, 32, 240, 3, 0, 116, 247, 154, 190, 112, 71, 8, 103, 13, ++ 0, 75, 41, 32, 0, 3, 1, 200, 1, 132, 10, 13, 0, 45, 233, 240, 71, 4, ++ 70, 144, 248, 210, 0, 0, 240, 53, 250, 6, 70, 180, 248, 72, 0, 180, ++ 248, 74, 16, 136, 66, 3, 208, 148, 248, 32, 33, 167, 247, 2, 255, 69, ++ 0, 53, 128, 74, 208, 180, 248, 34, 17, 32, 70, 100, 247, 63, 250, 130, ++ 70, 32, 108, 0, 38, 32, 244, 128, 32, 79, 246, 255, 121, 32, 100, 4, ++ 235, 70, 7, 183, 248, 40, 1, 72, 69, 55, 208, 65, 0, 80, 70, 111, 247, ++ 142, 255, 176, 251, 245, 241, 128, 70, 5, 251, 17, 128, 167, 248, 40, ++ 1, 95, 234, 72, 16, 21, 76, 252, 255, 153, 60, 33, 0, 212, 148, 248, ++ 210, 0, 102, 247, 172, 249, 64, 1, 32, 213, 79, 240, 128, 96, 176, 251, ++ 245, 241, 105, 67, 64, 70, 112, 247, 253, 248, 176, 251, 245, 241, 5, ++ 251, 17, 1, 167, 248, 40, 17, 64, 1, 16, 213, 183, 248, 40, 1, 2, 35, ++ 42, 70, 0, 33, 99, 247, 145, 254, 167, 248, 40, 1, 1, 32, 176, 64, 33, ++ 108, 192, 243, 0, 0, 65, 234, 128, 64, 32, 100, 118, 28, 6, 46, 193, ++ 211, 189, 232, 240, 135, 3, 1, 150, 3, 72, 11, 13, 0, 45, 233, 252, ++ 95, 6, 70, 128, 120, 214, 248, 4, 160, 241, 120, 0, 240, 15, 4, 10, ++ 235, 1, 0, 79, 240, 0, 8, 199, 121, 180, 72, 223, 248, 212, 178, 1, ++ 37, 0, 120, 193, 70, 72, 185, 4, 44, 7, 208, 174, 247, 119, 250, 32, ++ 177, 219, 248, 0, 0, 0, 33, 128, 248, 252, 17, 167, 247, 255, 250, 1, ++ 40, 1, 209, 248, 7, 100, 209, 174, 247, 105, 250, 0, 40, 96, 208, 167, ++ 72, 0, 120, 48, 185, 4, 44, 4, 209, 219, 248, 0, 0, 144, 248, 252, 1, ++ 112, 187, 247, 120, 81, 70, 4, 44, 26, 209, 219, 248, 0, 16, 58, 70, ++ 1, 245, 129, 112, 205, 233, 0, 1, 81, 70, 116, 247, 45, 254, 219, 248, ++ 0, 16, 0, 152, 10, 122, 1, 153, 56, 68, 82, 28, 9, 49, 116, 247, 35, ++ 254, 219, 248, 0, 16, 76, 252, 255, 148, 61, 33, 0, 8, 122, 1, 245, ++ 129, 113, 56, 68, 199, 178, 146, 72, 0, 120, 0, 40, 176, 120, 64, 234, ++ 7, 32, 29, 208, 1, 240, 30, 251, 197, 178, 143, 72, 36, 177, 6, 44, ++ 2, 208, 4, 44, 5, 208, 38, 224, 5, 112, 48, 70, 162, 247, 250, 255, ++ 33, 224, 0, 120, 133, 66, 30, 208, 37, 234, 0, 1, 17, 240, 3, 8, 69, ++ 234, 0, 5, 23, 208, 128, 69, 21, 208, 79, 240, 1, 9, 18, 224, 174, 247, ++ 36, 249, 240, 177, 1, 32, 36, 177, 6, 44, 2, 208, 4, 44, 5, 208, 6, ++ 224, 219, 248, 0, 16, 129, 248, 252, 1, 1, 224, 79, 240, 1, 9, 122, ++ 73, 8, 112, 122, 79, 56, 104, 192, 5, 21, 213, 186, 241, 0, 15, 18, ++ 208, 120, 72, 128, 122, 192, 6, 14, 213, 48, 70, 162, 247, 178, 255, ++ 45, 224, 167, 247, 55, 251, 1, 40, 41, 209, 12, 177, 6, 44, 38, 209, ++ 48, 70, 162, 247, 190, 255, 34, 224, 1, 44, 3, 209, 48, 70, 162, 247, ++ 137, 255, 176, 177, 185, 241, 0, 15, 10, 208, 95, 234, 200, 112, 7, ++ 208, 105, 72, 0, 120, 16, 177, 104, 72, 176, 247, 33, 255, 162, 247, ++ 96, 255, 95, 72, 0, 120, 16, 177, 85, 177, 232, 7, 8, 208, 1, 32, 189, ++ 232, 252, 159, 56, 104, 64, 5, 2, 213, 48, 70, 161, 247, 243, 253, 0, ++ 32, 245, 231, 3, 1, 42, 76, 252, 255, 143, 62, 33, 0, 218, 12, 13, 0, ++ 16, 181, 10, 224, 93, 72, 137, 247, 62, 255, 4, 70, 64, 104, 8, 177, ++ 116, 247, 96, 253, 32, 70, 116, 247, 93, 253, 87, 72, 137, 247, 38, ++ 255, 0, 40, 239, 208, 16, 189, 3, 1, 28, 0, 13, 13, 0, 16, 181, 4, 70, ++ 139, 247, 179, 252, 0, 40, 4, 209, 96, 104, 189, 232, 16, 64, 116, 247, ++ 76, 189, 16, 189, 3, 1, 16, 24, 13, 13, 0, 1, 40, 1, 208, 0, 240, 221, ++ 184, 0, 240, 162, 184, 3, 1, 200, 2, 36, 13, 13, 0, 45, 233, 240, 95, ++ 0, 38, 128, 70, 15, 70, 52, 70, 172, 247, 48, 250, 88, 177, 0, 37, 95, ++ 234, 8, 0, 9, 208, 1, 40, 15, 208, 16, 40, 21, 208, 184, 241, 17, 15, ++ 64, 209, 24, 224, 1, 37, 242, 231, 167, 247, 195, 250, 129, 70, 21, ++ 32, 163, 247, 245, 251, 6, 70, 10, 224, 173, 247, 131, 252, 129, 70, ++ 20, 32, 163, 247, 237, 251, 6, 70, 3, 224, 167, 247, 179, 250, 129, ++ 70, 60, 70, 185, 241, 0, 15, 38, 208, 24, 240, 240, 15, 223, 248, 208, ++ 160, 223, 248, 208, 176, 223, 248, 208, 128, 223, 248, 208, 144, 29, ++ 208, 152, 248, 0, 0, 70, 70, 1, 40, 22, 209, 20, 177, 13, 177, 171, ++ 247, 234, 255, 79, 70, 185, 248, 0, 0, 167, 247, 219, 249, 186, 248, ++ 0, 0, 167, 247, 219, 249, 52, 76, 252, 255, 138, 63, 33, 0, 177, 56, ++ 136, 224, 131, 29, 177, 155, 248, 11, 0, 172, 247, 9, 248, 0, 32, 48, ++ 112, 189, 232, 240, 159, 0, 46, 251, 208, 173, 247, 147, 252, 6, 70, ++ 167, 247, 204, 249, 6, 251, 0, 247, 167, 247, 204, 249, 6, 70, 173, ++ 247, 145, 252, 70, 67, 183, 66, 236, 217, 167, 247, 196, 249, 170, 248, ++ 0, 0, 167, 247, 188, 249, 169, 248, 0, 0, 20, 177, 13, 177, 171, 247, ++ 184, 255, 173, 247, 128, 252, 167, 247, 170, 249, 173, 247, 116, 252, ++ 167, 247, 170, 249, 60, 177, 173, 247, 119, 252, 224, 131, 29, 177, ++ 155, 248, 11, 0, 171, 247, 215, 255, 1, 33, 136, 248, 0, 16, 203, 231, ++ 0, 0, 44, 94, 13, 0, 0, 51, 32, 0, 153, 93, 13, 0, 245, 50, 32, 0, 156, ++ 41, 32, 0, 88, 52, 32, 0, 144, 149, 32, 0, 252, 136, 32, 0, 58, 51, ++ 32, 0, 248, 91, 32, 0, 56, 51, 32, 0, 60, 51, 32, 0, 3, 1, 118, 104, ++ 14, 13, 0, 16, 181, 161, 247, 119, 253, 31, 72, 0, 104, 128, 5, 1, 213, ++ 160, 247, 177, 255, 167, 247, 133, 249, 1, 40, 1, 209, 169, 247, 19, ++ 249, 0, 33, 1, 32, 255, 247, 75, 255, 171, 247, 75, 255, 23, 72, 23, ++ 73, 0, 120, 0, 40, 8, 104, 2, 208, 64, 244, 0, 112, 1, 224, 32, 244, ++ 0, 112, 8, 96, 116, 247, 214, 250, 4, 76, 252, 255, 133, 64, 33, 0, ++ 70, 173, 247, 220, 251, 96, 177, 173, 247, 51, 252, 72, 185, 20, 32, ++ 163, 247, 67, 251, 40, 177, 6, 32, 173, 247, 213, 251, 11, 73, 1, 32, ++ 8, 112, 32, 70, 189, 232, 16, 64, 116, 247, 196, 186, 3, 1, 38, 218, ++ 14, 13, 0, 16, 181, 167, 247, 177, 249, 0, 33, 189, 232, 16, 64, 17, ++ 32, 255, 247, 28, 191, 156, 41, 32, 0, 241, 50, 32, 0, 252, 50, 32, ++ 0, 243, 50, 32, 0, 3, 1, 32, 252, 14, 13, 0, 4, 73, 9, 120, 136, 66, ++ 3, 210, 3, 73, 1, 235, 64, 0, 112, 71, 0, 32, 112, 71, 73, 41, 32, 0, ++ 40, 103, 13, 0, 3, 1, 12, 24, 15, 13, 0, 56, 73, 55, 72, 8, 96, 112, ++ 71, 3, 1, 20, 32, 15, 13, 0, 1, 41, 3, 209, 79, 244, 72, 19, 16, 34, ++ 218, 101, 101, 247, 5, 190, 3, 1, 32, 48, 15, 13, 0, 193, 123, 57, 185, ++ 144, 248, 139, 16, 138, 6, 5, 213, 33, 240, 32, 1, 128, 248, 139, 16, ++ 1, 32, 112, 71, 0, 32, 112, 71, 3, 1, 30, 76, 15, 13, 0, 193, 123, 0, ++ 41, 8, 209, 144, 248, 29, 17, 1, 41, 4, 209, 16, 248, 139, 31, 65, 240, ++ 32, 1, 1, 112, 112, 71, 3, 1, 86, 102, 15, 13, 0, 16, 181, 4, 70, 100, ++ 247, 134, 248, 212, 248, 212, 0, 1, 33, 173, 247, 108, 250, 212, 76, ++ 252, 255, 128, 65, 33, 0, 248, 216, 0, 1, 33, 173, 247, 103, 250, 32, ++ 109, 30, 74, 144, 248, 210, 16, 1, 32, 19, 104, 136, 64, 131, 67, 19, ++ 96, 27, 74, 19, 104, 131, 67, 19, 96, 26, 75, 26, 104, 130, 67, 8, 70, ++ 26, 96, 70, 247, 45, 255, 32, 70, 189, 232, 16, 64, 79, 244, 172, 113, ++ 116, 247, 28, 186, 3, 1, 36, 184, 15, 13, 0, 16, 181, 4, 70, 101, 247, ++ 36, 254, 224, 123, 0, 40, 7, 209, 17, 72, 1, 104, 17, 74, 33, 240, 255, ++ 1, 18, 120, 17, 67, 1, 96, 16, 189, 3, 1, 64, 216, 15, 13, 0, 16, 181, ++ 4, 70, 100, 247, 238, 255, 224, 123, 1, 40, 7, 209, 9, 72, 1, 104, 9, ++ 74, 33, 240, 255, 1, 18, 120, 17, 67, 1, 96, 16, 189, 156, 93, 13, 0, ++ 44, 41, 32, 0, 48, 41, 32, 0, 52, 41, 32, 0, 56, 41, 32, 0, 144, 139, ++ 49, 0, 40, 37, 32, 0, 3, 1, 116, 20, 16, 13, 0, 112, 181, 4, 70, 174, ++ 247, 164, 250, 8, 177, 64, 38, 0, 224, 0, 38, 106, 247, 37, 255, 16, ++ 185, 106, 247, 92, 255, 0, 179, 0, 37, 148, 248, 39, 0, 49, 70, 3, 40, ++ 30, 208, 12, 32, 110, 247, 103, 255, 148, 248, 39, 32, 196, 72, 1, 42, ++ 194, 73, 2, 104, 2, 234, 1, 2, 2, 96, 1, 104, 18, 208, 192, 74, 17, ++ 67, 1, 96, 29, 76, 252, 255, 123, 66, 33, 0, 177, 160, 123, 111, 247, ++ 200, 254, 160, 97, 32, 70, 189, 232, 112, 64, 164, 247, 162, 188, 106, ++ 247, 128, 249, 1, 37, 219, 231, 13, 32, 223, 231, 65, 240, 128, 113, ++ 235, 231, 3, 1, 16, 132, 16, 13, 0, 182, 73, 8, 112, 182, 73, 1, 32, ++ 8, 112, 112, 71, 3, 1, 160, 2, 144, 16, 13, 0, 45, 233, 240, 65, 180, ++ 77, 6, 70, 12, 70, 41, 120, 255, 32, 6, 241, 28, 7, 1, 41, 2, 209, 56, ++ 70, 105, 247, 210, 250, 175, 73, 10, 104, 66, 240, 0, 82, 10, 96, 174, ++ 73, 188, 177, 1, 44, 62, 208, 2, 44, 74, 208, 3, 44, 85, 208, 4, 44, ++ 94, 208, 5, 44, 108, 209, 150, 248, 39, 0, 1, 40, 104, 208, 48, 70, ++ 106, 247, 23, 253, 0, 40, 99, 208, 48, 70, 189, 232, 240, 65, 164, 247, ++ 40, 188, 42, 120, 1, 42, 14, 209, 255, 40, 12, 208, 9, 120, 193, 177, ++ 192, 243, 3, 17, 8, 41, 6, 209, 0, 240, 15, 0, 0, 240, 166, 250, 192, ++ 178, 255, 247, 187, 255, 107, 247, 175, 249, 120, 177, 111, 247, 77, ++ 250, 176, 66, 11, 209, 111, 247, 144, 251, 64, 177, 189, 232, 240, 65, ++ 111, 247, 142, 184, 146, 73, 1, 235, 128, 0, 0, 104, 233, 231, 48, 70, ++ 189, 232, 240, 65, 107, 231, 9, 120, 0, 41, 50, 208, 41, 120, 1, 41, ++ 47, 209, 192, 243, 3, 76, 252, 255, 118, 67, 33, 0, 17, 8, 41, 43, 209, ++ 0, 240, 15, 0, 1, 33, 35, 224, 56, 70, 105, 247, 171, 249, 16, 177, ++ 4, 32, 168, 247, 163, 255, 132, 72, 0, 120, 189, 232, 240, 65, 168, ++ 247, 44, 191, 41, 120, 1, 41, 23, 209, 255, 40, 21, 208, 127, 72, 0, ++ 104, 189, 232, 240, 65, 192, 178, 125, 231, 9, 120, 0, 41, 12, 208, ++ 41, 120, 1, 41, 9, 209, 192, 243, 3, 16, 8, 40, 5, 209, 0, 33, 8, 70, ++ 189, 232, 240, 65, 0, 240, 48, 186, 189, 232, 240, 129, 3, 1, 30, 172, ++ 17, 13, 0, 16, 181, 44, 34, 115, 73, 116, 72, 137, 247, 234, 252, 175, ++ 242, 43, 17, 113, 72, 1, 97, 113, 73, 8, 96, 16, 189, 3, 1, 114, 198, ++ 17, 13, 0, 45, 233, 240, 65, 3, 70, 8, 70, 255, 41, 234, 208, 0, 34, ++ 255, 38, 0, 241, 70, 1, 108, 77, 23, 70, 3, 235, 67, 4, 90, 41, 11, ++ 216, 98, 73, 9, 120, 65, 177, 0, 240, 234, 249, 41, 104, 64, 240, 128, ++ 0, 1, 235, 132, 1, 136, 113, 212, 231, 223, 248, 116, 225, 111, 240, ++ 24, 12, 14, 235, 130, 1, 9, 104, 12, 235, 65, 1, 73, 178, 67, 26, 0, ++ 213, 11, 26, 217, 178, 177, 66, 1, 216, 23, 70, 14, 70, 82, 28, 210, ++ 178, 5, 42, 237, 211, 40, 104, 0, 235, 132, 0, 135, 113, 185, 231, 3, ++ 1, 10, 52, 76, 252, 255, 113, 68, 33, 0, 18, 13, 0, 74, 72, 0, 120, ++ 112, 71, 3, 1, 226, 2, 58, 18, 13, 0, 45, 233, 240, 65, 5, 70, 64, 108, ++ 113, 247, 116, 249, 4, 0, 174, 208, 148, 248, 208, 0, 1, 33, 159, 247, ++ 124, 254, 148, 248, 208, 0, 164, 247, 233, 252, 5, 241, 28, 0, 1, 33, ++ 7, 70, 105, 247, 19, 250, 1, 33, 56, 70, 105, 247, 17, 250, 0, 33, 56, ++ 70, 105, 247, 68, 249, 69, 72, 0, 104, 32, 101, 68, 72, 0, 29, 0, 104, ++ 67, 73, 164, 248, 84, 0, 65, 72, 9, 104, 12, 48, 193, 243, 128, 17, ++ 132, 248, 86, 16, 149, 248, 40, 16, 132, 248, 87, 16, 0, 104, 59, 78, ++ 96, 99, 16, 54, 174, 247, 106, 249, 96, 177, 57, 72, 20, 48, 0, 104, ++ 192, 5, 7, 213, 48, 104, 160, 99, 54, 29, 104, 108, 113, 247, 53, 249, ++ 174, 247, 185, 249, 20, 34, 49, 70, 32, 70, 163, 247, 37, 252, 224, ++ 136, 0, 179, 97, 137, 241, 177, 64, 0, 164, 248, 198, 0, 148, 248, 208, ++ 0, 111, 247, 117, 253, 161, 136, 1, 37, 137, 0, 9, 29, 111, 247, 218, ++ 250, 79, 234, 80, 0, 196, 248, 204, 0, 65, 1, 25, 213, 180, 248, 198, ++ 16, 128, 240, 128, 96, 176, 251, 241, 242, 1, 251, 18, 0, 164, 248, ++ 196, 0, 2, 32, 22, 224, 0, 33, 56, 70, 105, 247, 183, 249, 0, 33, 56, ++ 70, 76, 252, 255, 108, 69, 33, 0, 105, 247, 181, 249, 1, 33, 56, 70, ++ 105, 247, 232, 248, 0, 32, 57, 231, 180, 248, 198, 16, 176, 251, 241, ++ 242, 1, 251, 18, 0, 164, 248, 196, 0, 0, 32, 132, 248, 212, 0, 224, ++ 120, 0, 185, 229, 112, 1, 32, 41, 231, 255, 255, 0, 254, 148, 131, 49, ++ 0, 0, 0, 1, 1, 165, 7, 32, 0, 16, 97, 13, 0, 36, 51, 32, 0, 0, 4, 32, ++ 0, 52, 10, 33, 0, 152, 50, 32, 0, 60, 29, 32, 0, 136, 50, 32, 0, 184, ++ 163, 8, 0, 40, 104, 13, 0, 140, 50, 32, 0, 132, 50, 32, 0, 0, 10, 55, ++ 0, 152, 139, 49, 0, 3, 1, 14, 152, 19, 13, 0, 20, 73, 19, 72, 8, 96, ++ 255, 247, 13, 187, 3, 1, 42, 162, 19, 13, 0, 16, 181, 4, 70, 166, 247, ++ 65, 253, 173, 247, 185, 249, 1, 40, 9, 209, 255, 247, 10, 251, 0, 40, ++ 5, 208, 161, 109, 32, 70, 189, 232, 16, 64, 0, 240, 121, 184, 16, 189, ++ 3, 1, 48, 200, 19, 13, 0, 16, 181, 12, 70, 166, 247, 0, 254, 0, 44, ++ 8, 209, 255, 247, 249, 250, 0, 40, 4, 208, 4, 72, 1, 104, 33, 244, 128, ++ 17, 1, 96, 16, 189, 200, 93, 13, 0, 184, 50, 32, 0, 108, 139, 49, 0, ++ 3, 1, 12, 244, 19, 13, 0, 43, 73, 42, 72, 8, 96, 112, 71, 3, 1, 66, ++ 252, 19, 13, 0, 76, 252, 255, 103, 70, 33, 0, 16, 181, 4, 70, 172, 247, ++ 195, 248, 176, 247, 178, 248, 104, 177, 173, 247, 137, 249, 1, 40, 9, ++ 209, 255, 247, 218, 250, 48, 177, 35, 72, 129, 109, 32, 70, 189, 232, ++ 16, 64, 0, 240, 73, 184, 148, 248, 74, 0, 4, 40, 4, 209, 31, 72, 1, ++ 104, 65, 244, 128, 17, 1, 96, 16, 189, 3, 1, 44, 58, 20, 13, 0, 16, ++ 181, 12, 70, 172, 247, 230, 249, 0, 44, 12, 209, 176, 247, 145, 248, ++ 0, 40, 8, 208, 255, 247, 188, 250, 0, 40, 4, 208, 21, 72, 1, 104, 33, ++ 244, 128, 17, 1, 96, 16, 189, 3, 1, 90, 98, 20, 13, 0, 16, 181, 4, 70, ++ 192, 140, 176, 245, 0, 111, 9, 209, 161, 247, 50, 248, 56, 177, 14, ++ 72, 225, 140, 0, 104, 176, 248, 112, 0, 7, 224, 224, 131, 16, 189, 158, ++ 247, 166, 249, 64, 177, 10, 72, 225, 140, 0, 143, 8, 26, 161, 140, 136, ++ 66, 243, 218, 8, 70, 241, 231, 224, 140, 239, 231, 244, 93, 13, 0, 204, ++ 50, 32, 0, 252, 238, 32, 0, 108, 139, 49, 0, 212, 48, 32, 0, 228, 87, ++ 32, 0, 3, 1, 212, 1, 184, 20, 13, 0, 16, 181, 11, 70, 134, 176, 4, 70, ++ 145, 248, 86, 16, 4, 170, 3, 241, 80, 0, 113, 247, 31, 250, 41, 73, ++ 9, 120, 136, 66, 36, 210, 128, 40, 34, 210, 39, 74, 65, 9, 0, 240, 31, ++ 76, 252, 255, 98, 71, 33, 0, 0, 82, 248, 33, 32, 1, 35, 131, 64, 26, ++ 66, 24, 208, 35, 74, 82, 248, 33, 16, 34, 124, 193, 64, 1, 240, 1, 0, ++ 32, 73, 1, 40, 38, 208, 21, 42, 10, 104, 44, 208, 34, 244, 128, 2, 10, ++ 96, 113, 247, 95, 249, 27, 74, 1, 104, 72, 50, 17, 96, 17, 29, 128, ++ 136, 8, 96, 24, 72, 1, 104, 0, 145, 64, 104, 1, 144, 160, 123, 2, 169, ++ 111, 247, 87, 252, 105, 70, 2, 168, 111, 247, 46, 252, 8, 48, 140, 40, ++ 19, 210, 15, 72, 0, 29, 1, 104, 65, 244, 128, 17, 1, 96, 6, 176, 16, ++ 189, 21, 42, 10, 104, 2, 208, 66, 244, 128, 2, 215, 231, 66, 240, 64, ++ 2, 212, 231, 34, 240, 64, 2, 209, 231, 110, 247, 165, 254, 0, 32, 173, ++ 247, 219, 248, 235, 231, 75, 41, 32, 0, 24, 103, 13, 0, 8, 103, 13, ++ 0, 104, 139, 49, 0, 112, 130, 49, 0, 3, 1, 64, 136, 21, 13, 0, 112, ++ 181, 5, 70, 12, 70, 8, 10, 0, 33, 159, 247, 239, 251, 0, 33, 4, 40, ++ 4, 217, 149, 248, 208, 32, 146, 7, 0, 213, 0, 31, 162, 7, 7, 208, 226, ++ 67, 146, 7, 5, 209, 3, 74, 18, 120, 144, 66, 0, 210, 0, 185, 1, 33, ++ 8, 70, 112, 189, 44, 52, 32, 0, 3, 1, 72, 196, 21, 13, 0, 43, 74, 0, ++ 33, 82, 104, 193, 235, 193, 3, 76, 252, 255, 93, 72, 33, 0, 2, 235, ++ 131, 3, 147, 249, 24, 48, 131, 66, 14, 220, 153, 177, 193, 235, 193, ++ 3, 2, 235, 131, 2, 146, 249, 24, 48, 18, 249, 4, 44, 195, 26, 16, 26, ++ 131, 66, 4, 221, 73, 30, 2, 224, 73, 28, 14, 41, 229, 219, 14, 41, 0, ++ 209, 13, 33, 72, 178, 112, 71, 3, 1, 80, 8, 22, 13, 0, 240, 181, 26, ++ 79, 58, 120, 138, 66, 31, 208, 255, 42, 1, 209, 0, 41, 27, 208, 23, ++ 76, 57, 112, 0, 34, 192, 235, 192, 6, 120, 104, 0, 235, 130, 3, 29, ++ 104, 117, 177, 81, 177, 45, 104, 68, 248, 34, 80, 0, 235, 134, 0, 0, ++ 235, 130, 0, 27, 104, 192, 105, 24, 96, 2, 224, 84, 248, 34, 0, 40, ++ 96, 82, 28, 6, 42, 232, 219, 240, 189, 3, 1, 48, 84, 22, 13, 0, 7, 73, ++ 0, 240, 15, 0, 192, 235, 192, 0, 73, 104, 1, 235, 128, 0, 5, 73, 192, ++ 105, 0, 235, 64, 0, 8, 68, 208, 248, 2, 0, 112, 71, 32, 94, 13, 0, 84, ++ 104, 13, 0, 112, 9, 32, 0, 3, 1, 254, 2, 128, 22, 13, 0, 45, 233, 255, ++ 79, 131, 176, 255, 33, 0, 145, 6, 153, 73, 177, 249, 73, 75, 120, 202, ++ 104, 2, 235, 3, 18, 18, 104, 146, 7, 31, 213, 12, 105, 18, 224, 245, ++ 73, 12, 104, 33, 104, 137, 7, 11, 212, 8, 42, 22, 210, 194, 235, 194, ++ 76, 252, 255, 88, 73, 33, 0, 1, 1, 235, 129, 1, 4, 235, 193, 1, 209, ++ 248, 108, 19, 137, 7, 12, 213, 4, 242, 45, 20, 111, 240, 5, 1, 1, 235, ++ 16, 40, 4, 158, 192, 243, 128, 16, 0, 39, 1, 144, 182, 29, 117, 224, ++ 254, 32, 7, 176, 189, 232, 240, 143, 49, 120, 0, 41, 113, 208, 72, 28, ++ 64, 69, 110, 220, 112, 120, 22, 40, 97, 209, 182, 248, 2, 176, 0, 34, ++ 112, 28, 75, 247, 42, 255, 129, 70, 1, 152, 148, 248, 44, 81, 64, 240, ++ 128, 10, 33, 224, 0, 45, 0, 218, 29, 37, 5, 235, 133, 0, 20, 248, 16, ++ 32, 82, 69, 24, 209, 6, 153, 41, 177, 210, 73, 9, 105, 1, 235, 64, 1, ++ 73, 28, 5, 224, 208, 73, 9, 104, 1, 235, 64, 1, 1, 245, 151, 113, 4, ++ 235, 64, 0, 176, 248, 7, 32, 90, 69, 4, 209, 6, 34, 4, 152, 112, 247, ++ 162, 253, 240, 179, 148, 248, 44, 1, 109, 30, 133, 66, 216, 209, 192, ++ 178, 0, 235, 128, 0, 4, 235, 64, 1, 4, 152, 127, 28, 2, 104, 193, 248, ++ 1, 32, 128, 136, 161, 248, 5, 0, 148, 248, 44, 1, 0, 235, 128, 0, 4, ++ 248, 16, 160, 148, 248, 44, 1, 0, 235, 128, 0, 4, 235, 64, 0, 160, 248, ++ 7, 176, 148, 248, 44, 1, 0, 235, 128, 0, 4, 235, 64, 0, 128, 248, 9, ++ 144, 148, 248, 44, 1, 64, 28, 192, 178, 76, 252, 255, 83, 74, 33, 0, ++ 132, 248, 44, 1, 30, 40, 2, 211, 0, 32, 132, 248, 44, 1, 22, 248, 1, ++ 11, 168, 235, 0, 1, 161, 241, 1, 8, 6, 68, 184, 241, 1, 15, 138, 220, ++ 143, 177, 0, 224, 1, 224, 255, 32, 130, 231, 5, 235, 133, 0, 4, 235, ++ 64, 0, 66, 122, 74, 69, 2, 209, 232, 178, 0, 144, 230, 231, 128, 248, ++ 9, 144, 127, 28, 226, 231, 0, 152, 114, 231, 3, 1, 68, 250, 23, 13, ++ 0, 45, 233, 240, 65, 157, 76, 160, 104, 184, 185, 167, 120, 230, 120, ++ 184, 1, 156, 77, 0, 235, 6, 17, 1, 242, 49, 17, 40, 70, 115, 247, 235, ++ 253, 5, 235, 135, 16, 1, 29, 196, 233, 2, 81, 0, 235, 6, 16, 1, 29, ++ 33, 97, 148, 73, 0, 242, 49, 16, 8, 96, 1, 32, 189, 232, 240, 129, 3, ++ 1, 90, 58, 24, 13, 0, 48, 181, 141, 75, 66, 121, 197, 136, 220, 104, ++ 209, 178, 4, 235, 1, 17, 37, 177, 13, 96, 5, 137, 13, 129, 133, 122, ++ 4, 224, 79, 244, 0, 69, 13, 96, 0, 37, 13, 129, 141, 114, 4, 235, 2, ++ 17, 197, 122, 205, 114, 2, 123, 10, 115, 2, 123, 1, 42, 9, 209, 176, ++ 248, 13, 32, 138, 128, 194, 123, 74, 115, 2, 124, 138, 115, 176, 248, ++ 17, 0, 200, 128, 24, 120, 64, 28, 24, 112, 48, 189, 3, 1, 90, 144, 24, ++ 13, 0, 240, 181, 223, 248, 76, 252, 255, 78, 75, 33, 0, 224, 225, 68, ++ 121, 0, 38, 222, 248, 12, 0, 0, 235, 4, 16, 1, 104, 41, 177, 158, 248, ++ 0, 16, 73, 30, 142, 248, 0, 16, 6, 96, 0, 32, 1, 37, 17, 224, 222, 248, ++ 8, 16, 5, 250, 4, 247, 1, 235, 128, 18, 19, 108, 59, 66, 6, 208, 187, ++ 67, 19, 100, 3, 209, 22, 113, 10, 120, 82, 30, 10, 112, 64, 28, 192, ++ 178, 158, 248, 2, 16, 136, 66, 233, 211, 240, 189, 3, 1, 240, 1, 230, ++ 24, 13, 0, 45, 233, 255, 79, 128, 70, 0, 36, 129, 176, 145, 70, 16, ++ 6, 2, 213, 6, 32, 0, 144, 1, 224, 205, 248, 0, 144, 92, 73, 254, 39, ++ 0, 38, 141, 104, 186, 70, 45, 29, 1, 32, 0, 250, 3, 251, 34, 224, 40, ++ 120, 208, 177, 186, 241, 253, 15, 11, 208, 72, 69, 9, 209, 149, 248, ++ 59, 16, 65, 69, 5, 209, 104, 28, 0, 154, 2, 153, 112, 247, 178, 252, ++ 8, 177, 64, 53, 13, 224, 232, 107, 16, 234, 11, 15, 2, 208, 79, 240, ++ 253, 10, 65, 224, 55, 70, 44, 70, 12, 224, 143, 66, 1, 211, 55, 70, ++ 44, 70, 118, 28, 246, 178, 70, 72, 129, 120, 142, 66, 216, 211, 186, ++ 241, 253, 15, 49, 208, 66, 72, 129, 120, 143, 66, 45, 210, 100, 179, ++ 132, 248, 0, 144, 132, 248, 59, 128, 225, 107, 25, 185, 128, 104, 1, ++ 120, 73, 28, 1, 112, 225, 76, 252, 255, 73, 76, 33, 0, 107, 96, 28, ++ 65, 234, 11, 1, 225, 99, 0, 154, 2, 153, 115, 247, 70, 255, 2, 154, ++ 184, 241, 2, 15, 2, 235, 9, 1, 9, 208, 184, 241, 3, 15, 6, 208, 184, ++ 241, 5, 15, 7, 208, 184, 241, 6, 15, 4, 208, 8, 224, 4, 241, 17, 0, ++ 0, 154, 2, 224, 4, 241, 30, 0, 0, 154, 115, 247, 45, 255, 186, 70, 80, ++ 70, 5, 176, 135, 230, 3, 1, 146, 1, 210, 25, 13, 0, 45, 233, 255, 95, ++ 0, 38, 144, 70, 16, 6, 2, 213, 79, 240, 6, 11, 0, 224, 195, 70, 35, ++ 73, 255, 39, 0, 37, 140, 104, 138, 70, 36, 29, 1, 32, 0, 250, 3, 249, ++ 26, 224, 32, 120, 168, 177, 255, 47, 19, 209, 64, 69, 17, 209, 148, ++ 248, 59, 16, 0, 152, 129, 66, 12, 209, 90, 70, 96, 28, 1, 153, 112, ++ 247, 63, 252, 48, 185, 224, 107, 16, 234, 9, 15, 2, 208, 47, 70, 38, ++ 70, 6, 224, 64, 52, 109, 28, 237, 178, 154, 248, 2, 0, 133, 66, 224, ++ 211, 154, 248, 2, 0, 81, 70, 135, 66, 10, 210, 78, 177, 240, 107, 48, ++ 234, 9, 0, 240, 99, 4, 209, 48, 112, 136, 104, 1, 120, 73, 30, 1, 112, ++ 4, 176, 56, 70, 189, 232, 240, 159, 3, 1, 88, 96, 26, 13, 0, 240, 181, ++ 4, 77, 0, 35, 1, 36, 170, 104, 31, 70, 18, 29, 140, 64, 28, 224, 0, ++ 76, 252, 255, 68, 77, 33, 0, 0, 40, 94, 13, 0, 28, 52, 32, 0, 137, 104, ++ 13, 0, 0, 51, 32, 0, 146, 248, 59, 16, 129, 66, 12, 209, 17, 120, 81, ++ 177, 209, 107, 33, 66, 7, 208, 161, 67, 209, 99, 4, 209, 23, 112, 169, ++ 104, 14, 120, 118, 30, 14, 112, 64, 50, 91, 28, 219, 178, 169, 120, ++ 139, 66, 232, 211, 240, 189, 3, 1, 88, 180, 26, 13, 0, 45, 233, 240, ++ 71, 250, 79, 129, 70, 65, 240, 128, 6, 188, 104, 79, 240, 1, 8, 36, ++ 29, 0, 37, 21, 224, 148, 248, 59, 0, 128, 185, 32, 120, 176, 66, 1, ++ 208, 130, 40, 11, 209, 122, 120, 225, 107, 8, 250, 2, 240, 1, 66, 5, ++ 208, 6, 34, 97, 28, 72, 70, 112, 247, 211, 251, 56, 177, 64, 52, 109, ++ 28, 184, 120, 133, 66, 230, 211, 255, 32, 189, 232, 240, 135, 232, 178, ++ 251, 231, 3, 1, 206, 1, 8, 27, 13, 0, 45, 233, 240, 67, 146, 248, 0, ++ 128, 137, 176, 84, 28, 7, 70, 21, 70, 14, 70, 233, 70, 65, 69, 25, 209, ++ 79, 240, 0, 0, 74, 70, 15, 224, 5, 235, 0, 1, 59, 92, 145, 248, 17, ++ 192, 3, 234, 12, 3, 19, 84, 35, 92, 73, 124, 3, 234, 1, 3, 35, 84, 0, ++ 241, 1, 0, 192, 178, 176, 66, 237, 211, 50, 70, 33, 70, 72, 70, 57, ++ 224, 24, 210, 67, 70, 74, 70, 56, 70, 173, 247, 150, 76, 252, 255, 63, ++ 78, 33, 0, 252, 0, 32, 74, 70, 10, 224, 41, 24, 19, 92, 78, 124, 51, ++ 64, 19, 84, 35, 92, 73, 124, 11, 64, 35, 84, 64, 28, 192, 178, 65, 70, ++ 64, 69, 241, 211, 10, 70, 33, 70, 30, 224, 11, 70, 74, 70, 65, 70, 32, ++ 70, 173, 247, 124, 252, 51, 70, 4, 170, 65, 70, 5, 241, 17, 0, 0, 240, ++ 165, 251, 0, 32, 76, 70, 4, 173, 191, 75, 8, 224, 58, 92, 41, 92, 10, ++ 64, 26, 84, 34, 92, 10, 64, 34, 84, 64, 28, 192, 178, 176, 66, 244, ++ 211, 185, 73, 50, 70, 104, 70, 112, 247, 102, 251, 9, 176, 189, 232, ++ 240, 131, 3, 1, 154, 2, 210, 27, 13, 0, 45, 233, 243, 95, 129, 70, 178, ++ 72, 0, 38, 55, 70, 132, 104, 153, 248, 0, 0, 36, 29, 3, 40, 3, 210, ++ 0, 32, 1, 70, 189, 232, 252, 159, 153, 248, 1, 0, 79, 240, 1, 11, 7, ++ 40, 22, 208, 8, 220, 160, 241, 2, 0, 5, 40, 102, 210, 223, 232, 0, 240, ++ 12, 12, 14, 14, 16, 0, 20, 40, 6, 208, 21, 40, 8, 208, 22, 40, 59, 208, ++ 31, 40, 89, 209, 1, 224, 2, 32, 2, 224, 4, 32, 0, 224, 16, 32, 130, ++ 70, 0, 32, 40, 224, 155, 72, 132, 104, 36, 29, 0, 37, 28, 224, 33, 120, ++ 185, 177, 148, 248, 59, 32, 1, 153, 138, 66, 18, 209, 66, 120, 225, ++ 107, 11, 250, 76, 252, 255, 58, 79, 33, 0, 2, 240, 1, 66, 12, 208, 9, ++ 235, 8, 0, 128, 28, 34, 70, 81, 70, 255, 247, 81, 255, 32, 185, 11, ++ 250, 5, 240, 6, 67, 71, 234, 224, 119, 64, 52, 109, 28, 237, 178, 138, ++ 72, 129, 120, 141, 66, 222, 211, 8, 235, 10, 0, 192, 178, 153, 248, ++ 0, 16, 128, 70, 161, 235, 10, 1, 65, 69, 207, 220, 31, 224, 0, 37, 223, ++ 248, 8, 130, 23, 224, 33, 120, 145, 177, 148, 248, 59, 32, 1, 153, 138, ++ 66, 13, 209, 152, 248, 1, 32, 225, 107, 11, 250, 2, 240, 1, 66, 6, 208, ++ 34, 70, 2, 33, 9, 241, 2, 0, 255, 247, 33, 255, 72, 177, 64, 52, 109, ++ 28, 237, 178, 152, 248, 2, 16, 141, 66, 227, 211, 48, 70, 57, 70, 136, ++ 231, 11, 250, 5, 240, 193, 23, 6, 67, 15, 67, 246, 231, 3, 1, 34, 232, ++ 28, 13, 0, 11, 70, 192, 243, 128, 17, 109, 72, 194, 104, 64, 120, 2, ++ 235, 0, 16, 0, 104, 192, 7, 1, 208, 24, 70, 216, 230, 254, 32, 112, ++ 71, 3, 1, 74, 6, 29, 13, 0, 240, 181, 102, 77, 132, 70, 0, 32, 170, ++ 104, 108, 120, 18, 29, 79, 240, 1, 14, 1, 70, 3, 70, 14, 250, 4, 246, ++ 175, 120, 16, 224, 20, 120, 92, 177, 146, 248, 59, 64, 100, 69, 7, 209, ++ 213, 107, 53, 66, 4, 208, 14, 250, 3, 244, 32, 67, 65, 234, 228, 76, ++ 252, 255, 53, 80, 33, 0, 113, 64, 50, 91, 28, 219, 178, 187, 66, 236, ++ 211, 240, 189, 3, 1, 172, 2, 76, 29, 13, 0, 45, 233, 248, 79, 15, 70, ++ 250, 33, 1, 235, 16, 32, 69, 178, 0, 32, 128, 70, 130, 70, 6, 70, 129, ++ 70, 79, 72, 79, 73, 28, 70, 192, 104, 73, 120, 2, 43, 0, 235, 1, 16, ++ 2, 208, 254, 42, 5, 208, 8, 224, 254, 42, 6, 209, 0, 104, 64, 7, 1, ++ 224, 0, 104, 0, 7, 0, 40, 2, 219, 254, 32, 189, 232, 248, 143, 24, 70, ++ 255, 247, 182, 255, 0, 144, 139, 70, 8, 67, 102, 208, 191, 29, 48, 224, ++ 56, 120, 128, 179, 64, 28, 168, 66, 45, 220, 2, 44, 4, 208, 3, 44, 7, ++ 208, 2, 44, 21, 208, 30, 224, 120, 120, 128, 30, 5, 40, 7, 217, 15, ++ 224, 120, 120, 20, 40, 3, 208, 31, 40, 1, 208, 21, 40, 18, 209, 33, ++ 70, 56, 70, 255, 247, 250, 254, 64, 234, 8, 8, 65, 234, 10, 10, 9, 224, ++ 120, 120, 22, 40, 6, 209, 33, 70, 56, 70, 255, 247, 238, 254, 6, 67, ++ 65, 234, 9, 9, 23, 248, 1, 11, 41, 26, 73, 30, 77, 178, 7, 68, 1, 45, ++ 204, 220, 2, 44, 2, 208, 3, 44, 8, 208, 30, 224, 35, 72, 193, 104, 64, ++ 120, 1, 235, 0, 16, 0, 137, 64, 7, 6, 224, 31, 72, 193, 104, 64, 120, ++ 1, 235, 0, 16, 0, 137, 76, 252, 255, 48, 81, 33, 0, 0, 7, 0, 40, 13, ++ 218, 0, 154, 43, 234, 10, 0, 34, 234, 8, 1, 1, 67, 18, 208, 34, 234, ++ 6, 0, 43, 234, 9, 1, 8, 67, 12, 208, 13, 224, 0, 154, 10, 234, 11, 0, ++ 8, 234, 2, 1, 1, 67, 4, 209, 22, 64, 9, 234, 11, 0, 6, 67, 1, 208, 0, ++ 32, 143, 231, 255, 32, 141, 231, 3, 1, 10, 116, 30, 13, 0, 2, 35, 254, ++ 34, 104, 231, 3, 1, 10, 122, 30, 13, 0, 3, 35, 254, 34, 101, 231, 3, ++ 1, 160, 1, 128, 30, 13, 0, 45, 233, 240, 65, 7, 78, 250, 34, 2, 235, ++ 16, 32, 214, 233, 2, 82, 115, 120, 64, 178, 2, 235, 3, 18, 18, 104, ++ 210, 6, 6, 212, 254, 32, 201, 228, 0, 0, 40, 94, 13, 0, 108, 104, 13, ++ 0, 140, 29, 14, 224, 33, 120, 113, 177, 74, 28, 130, 66, 11, 220, 98, ++ 120, 8, 42, 10, 208, 9, 42, 8, 208, 64, 26, 64, 30, 100, 28, 64, 178, ++ 12, 68, 1, 40, 238, 220, 255, 32, 175, 228, 45, 29, 0, 39, 79, 240, ++ 1, 8, 23, 224, 42, 120, 146, 177, 149, 248, 59, 0, 4, 40, 14, 209, 32, ++ 120, 64, 30, 130, 66, 10, 220, 115, 120, 233, 107, 8, 250, 3, 240, 1, ++ 66, 4, 208, 161, 28, 104, 28, 112, 247, 200, 249, 48, 177, 64, 53, 127, ++ 28, 255, 178, 176, 120, 135, 66, 228, 211, 220, 76, 252, 255, 43, 82, ++ 33, 0, 231, 56, 70, 140, 228, 3, 1, 166, 2, 28, 31, 13, 0, 45, 233, ++ 248, 79, 13, 70, 250, 33, 1, 235, 16, 32, 79, 250, 128, 250, 234, 72, ++ 79, 240, 0, 7, 185, 70, 193, 104, 64, 120, 1, 235, 0, 16, 0, 104, 128, ++ 6, 1, 212, 254, 32, 36, 231, 5, 32, 255, 247, 221, 254, 131, 70, 0, ++ 145, 8, 67, 114, 208, 173, 29, 84, 224, 40, 120, 232, 179, 64, 28, 80, ++ 69, 82, 220, 104, 120, 255, 40, 68, 209, 219, 72, 132, 104, 36, 29, ++ 0, 38, 57, 224, 32, 120, 136, 179, 148, 248, 59, 16, 5, 41, 48, 209, ++ 41, 120, 73, 30, 136, 66, 44, 220, 156, 248, 4, 0, 144, 177, 0, 32, ++ 223, 248, 76, 131, 11, 224, 33, 24, 75, 120, 138, 127, 19, 64, 75, 112, ++ 41, 24, 137, 120, 17, 64, 8, 248, 0, 16, 64, 28, 192, 178, 33, 120, ++ 129, 66, 240, 216, 156, 248, 1, 32, 225, 107, 79, 240, 1, 8, 8, 250, ++ 2, 240, 1, 66, 13, 208, 34, 120, 197, 73, 96, 28, 112, 247, 101, 249, ++ 32, 185, 8, 250, 6, 240, 7, 67, 1, 224, 22, 224, 1, 224, 73, 234, 224, ++ 121, 64, 52, 118, 28, 246, 178, 223, 248, 240, 194, 156, 248, 2, 0, ++ 134, 66, 191, 211, 21, 248, 1, 11, 170, 235, 0, 1, 73, 30, 79, 250, ++ 129, 250, 5, 68, 186, 241, 1, 15, 167, 220, 179, 72, 76, 252, 255, 38, ++ 83, 33, 0, 193, 104, 64, 120, 1, 235, 0, 16, 0, 137, 128, 6, 7, 213, ++ 0, 155, 43, 234, 7, 1, 35, 234, 9, 0, 1, 67, 7, 208, 8, 224, 0, 154, ++ 7, 234, 11, 7, 9, 234, 2, 0, 7, 67, 1, 208, 0, 32, 170, 230, 255, 32, ++ 168, 230, 3, 1, 158, 2, 62, 32, 13, 0, 45, 233, 248, 79, 13, 70, 250, ++ 33, 1, 235, 16, 32, 71, 178, 79, 240, 0, 1, 161, 72, 137, 70, 138, 70, ++ 193, 104, 64, 120, 1, 235, 0, 16, 0, 104, 64, 6, 1, 212, 254, 32, 147, ++ 230, 6, 32, 255, 247, 76, 254, 131, 70, 0, 145, 8, 67, 110, 208, 173, ++ 29, 74, 224, 40, 120, 232, 179, 64, 28, 184, 66, 71, 220, 104, 120, ++ 22, 40, 60, 209, 147, 72, 132, 104, 36, 29, 0, 38, 47, 224, 32, 120, ++ 80, 179, 148, 248, 59, 16, 6, 41, 38, 209, 41, 120, 73, 30, 136, 66, ++ 34, 220, 156, 248, 4, 0, 144, 177, 0, 32, 223, 248, 40, 130, 11, 224, ++ 33, 24, 75, 120, 138, 127, 19, 64, 75, 112, 41, 24, 137, 120, 17, 64, ++ 8, 248, 0, 16, 64, 28, 192, 178, 33, 120, 129, 66, 240, 216, 156, 248, ++ 1, 32, 225, 107, 1, 32, 144, 64, 1, 66, 5, 208, 34, 120, 125, 73, 96, ++ 28, 112, 247, 214, 248, 16, 179, 64, 52, 118, 28, 246, 178, 223, 248, ++ 224, 193, 0, 224, 11, 224, 156, 76, 252, 255, 33, 84, 33, 0, 248, 2, ++ 0, 134, 66, 199, 211, 21, 248, 1, 11, 57, 26, 73, 30, 79, 178, 5, 68, ++ 1, 47, 178, 220, 112, 72, 193, 104, 64, 120, 1, 235, 0, 16, 0, 137, ++ 64, 6, 14, 213, 0, 155, 43, 234, 9, 0, 35, 234, 10, 1, 8, 67, 14, 208, ++ 15, 224, 1, 32, 176, 64, 64, 234, 9, 9, 74, 234, 224, 122, 224, 231, ++ 0, 155, 9, 234, 11, 1, 10, 234, 3, 0, 1, 67, 1, 208, 0, 32, 29, 230, ++ 255, 32, 27, 230, 3, 1, 230, 1, 88, 33, 13, 0, 45, 233, 240, 95, 147, ++ 70, 94, 74, 192, 178, 138, 70, 1, 240, 15, 4, 80, 112, 209, 104, 0, ++ 37, 1, 235, 0, 16, 46, 70, 144, 249, 11, 48, 1, 104, 233, 179, 0, 123, ++ 48, 177, 2, 40, 2, 208, 1, 40, 2, 208, 2, 224, 2, 38, 0, 224, 1, 38, ++ 83, 72, 208, 248, 3, 0, 144, 249, 1, 1, 152, 66, 61, 221, 145, 70, 8, ++ 4, 62, 212, 89, 70, 80, 70, 255, 247, 158, 253, 7, 70, 255, 40, 51, ++ 208, 1, 44, 51, 208, 89, 70, 80, 70, 255, 247, 91, 254, 255, 40, 43, ++ 208, 1, 35, 58, 70, 89, 70, 80, 70, 255, 247, 89, 250, 255, 40, 35, ++ 208, 223, 248, 4, 129, 0, 36, 8, 241, 20, 8, 79, 70, 88, 248, 36, 32, ++ 89, 70, 80, 70, 144, 71, 255, 40, 28, 208, 185, 120, 136, 66, 76, 252, ++ 255, 28, 85, 33, 0, 7, 210, 121, 120, 248, 104, 0, 224, 15, 224, 0, ++ 235, 1, 16, 128, 122, 120, 177, 100, 28, 228, 178, 4, 44, 233, 211, ++ 121, 120, 248, 104, 0, 235, 1, 16, 128, 122, 1, 40, 4, 208, 29, 177, ++ 0, 32, 30, 228, 254, 40, 251, 208, 48, 70, 26, 228, 121, 120, 248, 104, ++ 0, 235, 1, 16, 128, 122, 1, 40, 242, 208, 109, 28, 237, 178, 227, 231, ++ 3, 1, 46, 58, 34, 13, 0, 45, 233, 240, 65, 0, 37, 7, 70, 136, 70, 44, ++ 70, 36, 78, 7, 224, 66, 70, 57, 70, 32, 70, 255, 247, 130, 255, 5, 67, ++ 100, 28, 228, 178, 240, 120, 132, 66, 244, 211, 40, 70, 29, 230, 3, ++ 1, 36, 100, 34, 13, 0, 31, 72, 16, 181, 0, 104, 128, 7, 1, 213, 172, ++ 247, 111, 250, 25, 72, 0, 121, 0, 40, 3, 208, 189, 232, 16, 64, 255, ++ 247, 188, 186, 16, 189, 3, 1, 58, 132, 34, 13, 0, 16, 181, 20, 76, 160, ++ 104, 40, 177, 161, 120, 4, 34, 2, 235, 129, 17, 115, 247, 172, 248, ++ 224, 104, 24, 177, 225, 120, 9, 1, 115, 247, 166, 248, 32, 105, 24, ++ 177, 64, 242, 45, 17, 115, 247, 160, 248, 0, 32, 32, 112, 96, 112, 32, ++ 113, 16, 189, 3, 1, 54, 186, 34, 13, 0, 7, 72, 0, 121, 56, 185, 8, 72, ++ 0, 104, 128, 7, 5, 213, 7, 72, 0, 104, 0, 104, 8, 76, 252, 255, 23, ++ 86, 33, 0, 177, 1, 32, 112, 71, 0, 32, 112, 71, 40, 94, 13, 0, 108, ++ 104, 13, 0, 144, 149, 32, 0, 156, 41, 32, 0, 28, 52, 32, 0, 3, 1, 62, ++ 236, 34, 13, 0, 112, 181, 14, 70, 5, 70, 20, 70, 179, 66, 21, 217, 4, ++ 43, 12, 208, 255, 34, 16, 33, 32, 70, 162, 247, 217, 251, 50, 70, 41, ++ 70, 4, 241, 12, 0, 189, 232, 112, 64, 115, 247, 135, 186, 40, 120, 32, ++ 112, 104, 120, 96, 112, 255, 32, 224, 112, 144, 112, 112, 189, 3, 1, ++ 194, 2, 38, 35, 13, 0, 45, 233, 247, 79, 130, 176, 4, 0, 24, 208, 180, ++ 248, 80, 16, 180, 248, 78, 0, 13, 26, 149, 66, 0, 217, 21, 70, 40, 68, ++ 164, 248, 78, 0, 32, 108, 169, 70, 40, 68, 32, 100, 97, 106, 4, 241, ++ 16, 0, 79, 240, 0, 10, 0, 144, 81, 185, 129, 247, 236, 249, 24, 177, ++ 0, 32, 5, 176, 189, 232, 240, 143, 32, 105, 96, 98, 196, 248, 44, 160, ++ 212, 248, 36, 128, 4, 241, 85, 11, 87, 224, 180, 248, 76, 16, 224, 106, ++ 14, 26, 174, 66, 0, 217, 46, 70, 161, 105, 8, 241, 12, 7, 56, 68, 11, ++ 104, 50, 70, 3, 153, 152, 71, 3, 144, 148, 248, 84, 0, 48, 177, 224, ++ 106, 50, 70, 193, 25, 88, 70, 148, 247, 66, 254, 8, 224, 148, 248, 85, ++ 0, 40, 177, 224, 106, 50, 70, 193, 76, 252, 255, 18, 87, 33, 0, 25, ++ 88, 70, 148, 247, 32, 254, 224, 106, 173, 27, 48, 68, 224, 98, 180, ++ 248, 76, 16, 136, 66, 44, 209, 64, 70, 129, 247, 171, 249, 4, 241, 8, ++ 1, 64, 70, 129, 247, 162, 249, 196, 248, 44, 160, 0, 152, 129, 247, ++ 166, 249, 216, 177, 196, 248, 36, 160, 93, 177, 180, 248, 78, 0, 169, ++ 235, 5, 9, 160, 235, 5, 0, 164, 248, 78, 0, 32, 108, 160, 235, 5, 0, ++ 32, 100, 224, 105, 180, 248, 78, 32, 129, 104, 217, 177, 193, 139, 203, ++ 6, 24, 213, 193, 243, 1, 3, 1, 43, 6, 208, 8, 224, 32, 105, 96, 98, ++ 128, 70, 0, 45, 165, 209, 236, 231, 131, 139, 147, 66, 4, 217, 139, ++ 7, 8, 209, 131, 139, 147, 66, 5, 211, 33, 240, 16, 1, 193, 131, 130, ++ 104, 129, 105, 144, 71, 160, 105, 193, 139, 65, 240, 16, 1, 193, 131, ++ 32, 70, 148, 247, 171, 252, 72, 70, 128, 231, 0, 0, 3, 1, 148, 1, 100, ++ 36, 13, 0, 45, 233, 248, 67, 4, 0, 136, 70, 23, 70, 29, 70, 13, 208, ++ 96, 105, 0, 40, 11, 208, 114, 247, 239, 255, 6, 70, 224, 139, 128, 6, ++ 7, 213, 96, 105, 41, 70, 148, 247, 136, 255, 3, 224, 0, 32, 189, 232, ++ 248, 131, 0, 32, 56, 67, 173, 248, 0, 0, 141, 248, 2, 80, 35, 104, 3, ++ 34, 105, 70, 64, 70, 152, 71, 1, 70, 96, 105, 76, 252, 255, 13, 88, ++ 33, 0, 42, 70, 148, 247, 68, 253, 97, 105, 200, 105, 177, 248, 78, 32, ++ 129, 104, 161, 177, 193, 139, 203, 6, 17, 213, 193, 243, 1, 3, 1, 43, ++ 2, 209, 131, 139, 147, 66, 4, 217, 139, 7, 8, 209, 131, 139, 147, 66, ++ 5, 211, 33, 240, 16, 1, 193, 131, 130, 104, 129, 105, 144, 71, 48, 70, ++ 114, 247, 185, 255, 40, 70, 205, 231, 3, 1, 94, 244, 36, 13, 0, 45, ++ 233, 240, 65, 4, 0, 14, 70, 21, 70, 32, 208, 224, 139, 122, 73, 192, ++ 243, 129, 0, 49, 248, 16, 0, 160, 245, 112, 97, 255, 57, 22, 208, 148, ++ 248, 36, 0, 1, 40, 18, 209, 96, 105, 128, 177, 114, 247, 155, 255, 7, ++ 70, 96, 105, 41, 70, 148, 247, 66, 255, 96, 105, 42, 70, 49, 70, 148, ++ 247, 150, 253, 56, 70, 189, 232, 240, 65, 114, 247, 144, 191, 48, 70, ++ 189, 232, 240, 65, 17, 70, 148, 247, 183, 187, 3, 1, 186, 1, 78, 37, ++ 13, 0, 45, 233, 240, 65, 4, 0, 192, 139, 192, 243, 129, 6, 81, 208, ++ 96, 105, 0, 40, 78, 208, 48, 70, 121, 247, 94, 251, 5, 0, 2, 209, 90, ++ 247, 139, 251, 136, 177, 95, 72, 0, 235, 198, 7, 90, 247, 133, 251, ++ 56, 179, 93, 72, 0, 104, 16, 244, 64, 15, 96, 105, 176, 248, 76, 96, ++ 10, 208, 240, 46, 19, 217, 48, 70, 18, 224, 96, 105, 176, 248, 76, 252, ++ 255, 8, 89, 33, 0, 78, 16, 189, 232, 240, 65, 148, 247, 140, 188, 120, ++ 46, 1, 217, 48, 70, 0, 224, 120, 32, 168, 66, 11, 210, 120, 46, 6, 216, ++ 120, 37, 7, 224, 240, 32, 168, 66, 4, 210, 240, 46, 1, 217, 53, 70, ++ 0, 224, 240, 37, 96, 105, 14, 224, 96, 105, 176, 248, 76, 96, 60, 46, ++ 1, 217, 49, 70, 0, 224, 60, 33, 169, 66, 4, 210, 60, 46, 1, 217, 53, ++ 70, 0, 224, 60, 37, 41, 70, 148, 247, 234, 254, 96, 105, 42, 70, 57, ++ 70, 189, 232, 240, 65, 148, 247, 158, 188, 189, 232, 240, 129, 3, 1, ++ 252, 1, 4, 38, 13, 0, 45, 233, 240, 65, 5, 0, 192, 139, 58, 73, 192, ++ 243, 129, 6, 198, 235, 6, 16, 0, 235, 134, 16, 1, 235, 128, 7, 239, ++ 208, 104, 105, 0, 40, 236, 208, 48, 70, 121, 247, 221, 250, 4, 0, 231, ++ 208, 47, 72, 0, 31, 0, 235, 198, 6, 90, 247, 37, 251, 96, 179, 45, 72, ++ 0, 104, 16, 244, 64, 15, 104, 105, 176, 248, 76, 112, 3, 208, 240, 47, ++ 12, 217, 56, 70, 11, 224, 120, 47, 1, 217, 56, 70, 0, 224, 120, 32, ++ 160, 66, 11, 210, 120, 47, 6, 216, 120, 36, 7, 224, 240, 32, 160, 66, ++ 4, 210, 240, 47, 1, 217, 60, 70, 0, 224, 240, 36, 104, 105, 33, 70, ++ 148, 247, 151, 254, 104, 105, 34, 70, 49, 70, 148, 247, 235, 76, 252, ++ 255, 3, 90, 33, 0, 252, 40, 70, 189, 232, 240, 65, 89, 247, 171, 191, ++ 215, 248, 228, 16, 136, 2, 11, 213, 0, 32, 1, 224, 50, 104, 64, 28, ++ 176, 235, 84, 15, 250, 211, 33, 244, 0, 16, 199, 248, 228, 0, 163, 231, ++ 104, 105, 176, 248, 76, 112, 60, 47, 1, 217, 57, 70, 0, 224, 60, 33, ++ 161, 66, 4, 210, 60, 47, 1, 217, 60, 70, 0, 224, 60, 36, 33, 70, 148, ++ 247, 107, 254, 104, 105, 34, 70, 49, 70, 189, 232, 240, 65, 148, 247, ++ 189, 188, 0, 0, 180, 49, 32, 0, 8, 16, 53, 0, 88, 30, 32, 0, 172, 117, ++ 32, 0, 3, 1, 32, 252, 38, 13, 0, 16, 181, 107, 247, 45, 255, 0, 40, ++ 6, 208, 1, 33, 128, 248, 237, 16, 189, 232, 16, 64, 107, 247, 48, 190, ++ 16, 189, 0, 0, 3, 1, 136, 2, 24, 39, 13, 0, 45, 233, 240, 95, 69, 105, ++ 176, 248, 30, 192, 4, 70, 135, 140, 181, 248, 76, 32, 0, 106, 139, 70, ++ 204, 243, 129, 8, 22, 70, 0, 40, 28, 208, 50, 73, 223, 248, 204, 160, ++ 9, 136, 139, 6, 79, 240, 210, 1, 9, 212, 218, 248, 0, 48, 51, 185, 187, ++ 7, 91, 15, 33, 250, 3, 243, 219, 67, 155, 7, 9, 208, 187, 7, 91, 15, ++ 217, 64, 1, 240, 3, 1, 79, 240, 1, 9, 2, 41, 3, 208, 69, 224, 0, 32, ++ 189, 232, 240, 159, 95, 234, 140, 76, 252, 255, 254, 90, 33, 0, 97, ++ 63, 212, 120, 247, 93, 250, 16, 177, 187, 241, 0, 15, 29, 208, 184, ++ 6, 0, 213, 118, 16, 31, 73, 193, 248, 176, 146, 225, 139, 30, 74, 193, ++ 243, 129, 1, 81, 92, 142, 64, 28, 73, 14, 96, 27, 73, 9, 250, 8, 240, ++ 8, 57, 8, 96, 10, 104, 2, 66, 252, 209, 32, 106, 181, 248, 76, 32, 12, ++ 48, 22, 73, 162, 247, 173, 249, 7, 224, 96, 105, 0, 33, 176, 248, 76, ++ 32, 32, 106, 12, 48, 162, 247, 198, 249, 33, 106, 79, 244, 0, 80, 136, ++ 96, 218, 248, 0, 0, 24, 177, 32, 106, 79, 244, 192, 65, 129, 96, 132, ++ 248, 39, 144, 105, 108, 181, 248, 76, 32, 72, 70, 17, 68, 105, 100, ++ 186, 231, 41, 107, 12, 48, 230, 231, 0, 0, 8, 30, 32, 0, 164, 53, 32, ++ 0, 0, 144, 49, 0, 108, 93, 13, 0, 8, 141, 49, 0, 120, 142, 49, 0, 3, ++ 1, 56, 28, 40, 13, 0, 112, 181, 5, 70, 8, 70, 1, 38, 144, 248, 163, ++ 0, 181, 248, 11, 64, 169, 122, 64, 9, 0, 34, 70, 247, 225, 252, 0, 40, ++ 9, 208, 64, 136, 160, 66, 0, 210, 4, 70, 42, 122, 33, 70, 48, 70, 77, ++ 247, 76, 248, 1, 32, 112, 189, 3, 1, 86, 80, 40, 13, 0, 16, 181, 4, ++ 70, 0, 33, 19, 32, 127, 247, 223, 251, 254, 247, 174, 248, 52, 72, 0, ++ 120, 1, 40, 76, 252, 255, 249, 91, 33, 0, 1, 209, 51, 73, 8, 112, 51, ++ 73, 0, 32, 8, 112, 51, 73, 193, 233, 10, 0, 140, 247, 200, 249, 113, ++ 247, 75, 249, 24, 177, 189, 232, 16, 64, 137, 247, 121, 191, 1, 32, ++ 89, 247, 121, 249, 180, 248, 9, 0, 0, 33, 48, 247, 215, 254, 189, 232, ++ 16, 64, 1, 240, 63, 190, 3, 1, 48, 162, 40, 13, 0, 16, 181, 4, 70, 10, ++ 34, 85, 33, 12, 32, 48, 247, 224, 254, 1, 70, 8, 48, 34, 104, 192, 248, ++ 2, 32, 98, 104, 192, 248, 6, 32, 34, 137, 66, 129, 189, 232, 16, 64, ++ 8, 70, 48, 247, 96, 190, 3, 1, 122, 206, 40, 13, 0, 62, 181, 0, 241, ++ 9, 4, 0, 32, 0, 144, 1, 144, 2, 144, 212, 248, 3, 0, 0, 144, 212, 248, ++ 7, 0, 1, 144, 180, 248, 11, 0, 173, 248, 8, 0, 21, 70, 104, 70, 136, ++ 247, 145, 254, 33, 123, 9, 6, 23, 212, 20, 40, 21, 211, 15, 73, 10, ++ 34, 9, 29, 224, 28, 111, 247, 197, 252, 0, 40, 12, 208, 224, 28, 112, ++ 247, 20, 252, 144, 247, 245, 250, 32, 177, 144, 247, 27, 251, 224, 28, ++ 255, 247, 189, 255, 137, 247, 79, 249, 62, 189, 18, 32, 104, 113, 62, ++ 189, 78, 94, 13, 0, 151, 30, 32, 0, 76, 94, 13, 0, 24, 65, 32, 0, 3, ++ 1, 20, 68, 41, 13, 0, 124, 72, 129, 104, 194, 248, 6, 16, 76, 252, 255, ++ 244, 92, 33, 0, 192, 104, 194, 248, 10, 0, 112, 71, 3, 1, 62, 84, 41, ++ 13, 0, 112, 181, 121, 76, 14, 70, 0, 241, 9, 5, 161, 105, 49, 177, 176, ++ 248, 9, 0, 189, 232, 112, 64, 12, 33, 48, 247, 108, 190, 115, 72, 113, ++ 247, 217, 250, 169, 247, 66, 250, 114, 72, 165, 97, 196, 233, 2, 4, ++ 111, 72, 113, 247, 214, 250, 0, 32, 48, 112, 112, 189, 3, 1, 44, 142, ++ 41, 13, 0, 112, 181, 4, 70, 13, 70, 22, 70, 160, 247, 192, 254, 40, ++ 185, 0, 35, 26, 70, 25, 70, 2, 32, 254, 247, 28, 248, 50, 70, 41, 70, ++ 32, 70, 189, 232, 112, 64, 130, 247, 5, 189, 3, 1, 40, 182, 41, 13, ++ 0, 112, 181, 0, 241, 9, 4, 21, 70, 130, 247, 54, 253, 104, 121, 0, 40, ++ 7, 209, 34, 29, 225, 120, 189, 232, 112, 64, 0, 35, 1, 32, 254, 247, ++ 4, 184, 112, 189, 3, 1, 182, 2, 218, 41, 13, 0, 45, 233, 252, 65, 0, ++ 241, 9, 4, 0, 38, 171, 247, 66, 254, 64, 185, 87, 72, 68, 242, 16, 1, ++ 0, 104, 8, 66, 4, 208, 171, 247, 119, 254, 8, 177, 12, 38, 125, 224, ++ 180, 248, 5, 16, 180, 248, 3, 0, 69, 247, 80, 253, 32, 179, 97, 139, ++ 32, 139, 205, 233, 0, 1, 227, 138, 162, 138, 97, 138, 32, 138, 69, 247, ++ 86, 253, 200, 177, 97, 247, 143, 255, 192, 177, 76, 252, 255, 239, 93, ++ 33, 0, 0, 32, 111, 247, 245, 253, 7, 70, 255, 40, 20, 208, 165, 247, ++ 16, 249, 56, 70, 111, 247, 119, 253, 5, 70, 63, 72, 113, 247, 112, 250, ++ 98, 139, 33, 139, 40, 70, 69, 247, 91, 253, 224, 121, 48, 177, 15, 224, ++ 18, 38, 79, 224, 13, 38, 77, 224, 9, 38, 75, 224, 32, 122, 133, 248, ++ 86, 0, 212, 248, 9, 0, 40, 101, 180, 248, 13, 0, 165, 248, 84, 0, 224, ++ 123, 133, 248, 87, 0, 32, 138, 165, 248, 72, 0, 96, 138, 165, 248, 74, ++ 0, 149, 248, 210, 0, 165, 247, 139, 252, 33, 138, 1, 128, 97, 138, 65, ++ 128, 160, 138, 40, 129, 224, 138, 104, 129, 40, 70, 168, 247, 241, 254, ++ 37, 72, 113, 247, 67, 250, 41, 70, 32, 70, 130, 247, 232, 250, 0, 40, ++ 38, 209, 1, 32, 171, 247, 197, 253, 56, 70, 171, 247, 190, 253, 180, ++ 248, 5, 0, 32, 240, 1, 0, 171, 247, 27, 254, 180, 248, 3, 0, 32, 240, ++ 1, 0, 171, 247, 29, 254, 224, 121, 171, 247, 10, 254, 25, 73, 0, 32, ++ 254, 247, 28, 249, 0, 33, 8, 70, 171, 247, 89, 253, 110, 247, 104, 249, ++ 21, 73, 8, 96, 32, 136, 49, 70, 189, 232, 252, 65, 48, 247, 203, 189, ++ 189, 232, 252, 129, 3, 1, 76, 12, 43, 13, 0, 16, 181, 4, 70, 171, 247, ++ 172, 253, 64, 177, 0, 32, 171, 247, 151, 253, 189, 232, 76, 252, 255, ++ 234, 94, 33, 0, 16, 64, 10, 73, 16, 32, 254, 247, 254, 184, 180, 248, ++ 9, 0, 189, 232, 16, 64, 12, 33, 48, 247, 137, 189, 0, 0, 16, 130, 32, ++ 0, 244, 239, 32, 0, 136, 41, 32, 0, 99, 133, 1, 0, 156, 41, 32, 0, 92, ++ 239, 32, 0, 20, 52, 32, 0, 3, 1, 106, 84, 43, 13, 0, 45, 233, 240, 65, ++ 5, 70, 0, 241, 9, 4, 14, 70, 144, 70, 224, 28, 112, 247, 5, 253, 208, ++ 177, 193, 105, 193, 243, 196, 1, 4, 41, 21, 208, 8, 41, 19, 210, 7, ++ 70, 0, 241, 40, 1, 112, 247, 69, 253, 160, 177, 248, 105, 128, 2, 10, ++ 212, 56, 104, 140, 247, 203, 249, 48, 177, 57, 104, 11, 32, 48, 247, ++ 112, 254, 56, 104, 113, 247, 10, 248, 66, 70, 49, 70, 40, 70, 189, 232, ++ 240, 65, 124, 247, 110, 187, 32, 136, 189, 232, 240, 65, 18, 33, 48, ++ 247, 114, 189, 3, 1, 54, 186, 43, 13, 0, 45, 233, 240, 65, 5, 70, 14, ++ 70, 0, 241, 9, 4, 23, 70, 128, 137, 3, 33, 112, 247, 67, 253, 48, 177, ++ 58, 70, 49, 70, 40, 70, 189, 232, 240, 65, 124, 247, 142, 188, 32, 136, ++ 189, 232, 240, 65, 2, 33, 48, 247, 89, 189, 3, 1, 84, 236, 43, 13, 0, ++ 0, 35, 210, 30, 252, 42, 32, 211, 4, 41, 30, 211, 2, 104, 65, 104, 138, ++ 66, 3, 208, 10, 177, 193, 185, 76, 252, 255, 229, 95, 33, 0, 0, 224, ++ 177, 177, 1, 122, 66, 123, 145, 66, 18, 209, 65, 138, 129, 177, 129, ++ 138, 113, 177, 208, 248, 22, 32, 208, 248, 26, 16, 138, 66, 3, 208, ++ 10, 177, 49, 185, 0, 224, 33, 177, 129, 127, 144, 248, 35, 0, 129, 66, ++ 0, 208, 18, 35, 24, 70, 112, 71, 3, 1, 100, 60, 44, 13, 0, 1, 70, 22, ++ 75, 209, 248, 22, 32, 9, 141, 0, 32, 201, 8, 178, 251, 241, 242, 25, ++ 104, 178, 245, 250, 95, 33, 244, 64, 1, 13, 208, 178, 245, 122, 95, ++ 17, 208, 178, 245, 122, 111, 6, 209, 1, 245, 0, 1, 33, 240, 56, 0, 24, ++ 96, 79, 244, 250, 48, 112, 71, 33, 240, 56, 0, 8, 48, 24, 96, 79, 244, ++ 122, 48, 112, 71, 1, 245, 128, 1, 33, 240, 56, 0, 16, 48, 24, 96, 79, ++ 244, 250, 32, 112, 71, 0, 0, 88, 30, 32, 0, 3, 1, 172, 1, 156, 44, 13, ++ 0, 45, 233, 240, 71, 4, 70, 13, 70, 254, 247, 169, 253, 79, 240, 7, ++ 9, 1, 40, 4, 208, 41, 104, 129, 248, 5, 144, 189, 232, 240, 135, 32, ++ 121, 18, 33, 247, 79, 2, 40, 8, 216, 3, 210, 98, 121, 59, 120, 154, ++ 66, 3, 210, 40, 185, 162, 122, 1, 42, 2, 217, 40, 104, 65, 113, 236, ++ 231, 46, 104, 223, 248, 192, 131, 240, 113, 32, 121, 56, 177, 1, 40, ++ 25, 208, 2, 33, 0, 32, 76, 252, 255, 224, 96, 33, 0, 171, 247, 111, ++ 253, 56, 120, 26, 224, 234, 74, 96, 121, 18, 104, 2, 235, 0, 16, 0, ++ 104, 24, 177, 41, 104, 23, 32, 72, 113, 211, 231, 152, 248, 0, 0, 58, ++ 120, 144, 66, 222, 210, 32, 70, 254, 247, 142, 253, 2, 224, 32, 70, ++ 254, 247, 181, 253, 57, 120, 152, 248, 0, 0, 8, 26, 48, 114, 40, 104, ++ 64, 121, 0, 40, 190, 209, 32, 121, 240, 113, 41, 104, 129, 248, 1, 144, ++ 184, 231, 3, 1, 176, 1, 68, 45, 13, 0, 45, 233, 240, 65, 4, 70, 13, ++ 70, 254, 247, 85, 253, 79, 240, 7, 8, 1, 40, 71, 209, 32, 121, 18, 39, ++ 2, 40, 8, 216, 2, 210, 33, 123, 2, 41, 4, 216, 204, 74, 97, 121, 18, ++ 120, 145, 66, 3, 211, 40, 104, 71, 113, 189, 232, 240, 129, 46, 104, ++ 40, 177, 1, 40, 19, 208, 2, 40, 28, 208, 119, 113, 245, 231, 32, 123, ++ 11, 70, 64, 240, 128, 2, 161, 29, 0, 32, 254, 247, 166, 253, 254, 40, ++ 36, 208, 253, 40, 17, 209, 41, 104, 23, 32, 72, 113, 229, 231, 32, 123, ++ 11, 70, 64, 240, 128, 2, 161, 29, 0, 32, 254, 247, 12, 254, 255, 40, ++ 217, 208, 2, 224, 0, 32, 254, 247, 77, 254, 40, 104, 64, 121, 0, 40, ++ 211, 209, 32, 121, 240, 113, 41, 104, 180, 72, 129, 248, 1, 128, 0, ++ 104, 179, 73, 0, 120, 9, 120, 8, 76, 252, 255, 219, 97, 33, 0, 26, 48, ++ 114, 198, 231, 41, 104, 129, 248, 5, 128, 194, 231, 3, 1, 254, 1, 240, ++ 45, 13, 0, 45, 233, 240, 71, 4, 70, 13, 70, 0, 38, 254, 247, 254, 252, ++ 79, 240, 7, 9, 1, 40, 109, 209, 32, 121, 2, 40, 2, 210, 161, 120, 201, ++ 30, 206, 178, 79, 240, 18, 8, 200, 177, 2, 40, 19, 216, 161, 120, 2, ++ 41, 16, 211, 2, 40, 22, 216, 157, 74, 97, 121, 18, 120, 145, 66, 9, ++ 210, 2, 40, 15, 210, 16, 46, 5, 216, 2, 46, 11, 208, 4, 46, 9, 208, ++ 16, 46, 7, 208, 41, 104, 129, 248, 5, 128, 52, 231, 241, 7, 249, 209, ++ 118, 8, 227, 231, 47, 104, 48, 177, 1, 40, 25, 208, 2, 40, 38, 208, ++ 135, 248, 5, 128, 39, 231, 224, 120, 99, 121, 3, 40, 50, 70, 4, 241, ++ 6, 1, 7, 208, 3, 32, 254, 247, 54, 253, 254, 40, 49, 208, 253, 40, 2, ++ 208, 27, 224, 2, 32, 246, 231, 41, 104, 23, 32, 72, 113, 18, 231, 224, ++ 120, 99, 121, 3, 40, 50, 70, 4, 241, 6, 1, 5, 208, 3, 32, 254, 247, ++ 151, 253, 255, 40, 205, 208, 8, 224, 2, 32, 248, 231, 224, 120, 97, ++ 121, 3, 40, 19, 208, 3, 32, 254, 247, 210, 253, 40, 104, 64, 121, 0, ++ 40, 194, 209, 32, 121, 248, 113, 41, 104, 119, 72, 129, 248, 1, 144, ++ 0, 104, 118, 73, 0, 120, 76, 252, 255, 214, 98, 33, 0, 9, 120, 8, 26, ++ 56, 114, 235, 230, 2, 32, 234, 231, 41, 104, 129, 248, 5, 144, 229, ++ 230, 3, 1, 248, 1, 234, 46, 13, 0, 45, 233, 240, 65, 4, 70, 13, 70, ++ 254, 247, 130, 252, 7, 39, 1, 40, 109, 209, 35, 121, 79, 240, 18, 8, ++ 2, 43, 7, 216, 160, 120, 3, 40, 4, 211, 99, 74, 97, 121, 18, 120, 145, ++ 66, 3, 211, 41, 104, 129, 248, 5, 128, 43, 231, 192, 30, 194, 178, 224, ++ 120, 46, 104, 6, 40, 3, 208, 7, 40, 1, 208, 99, 177, 0, 224, 35, 177, ++ 1, 43, 33, 208, 2, 43, 50, 208, 60, 224, 211, 7, 2, 208, 134, 248, 5, ++ 128, 22, 231, 82, 8, 5, 40, 12, 208, 11, 70, 6, 40, 4, 241, 6, 1, 11, ++ 208, 6, 32, 254, 247, 196, 252, 254, 40, 58, 208, 253, 40, 6, 208, 39, ++ 224, 11, 70, 161, 29, 4, 32, 244, 231, 5, 32, 242, 231, 41, 104, 23, ++ 32, 72, 113, 252, 230, 5, 40, 10, 208, 11, 70, 6, 40, 4, 241, 6, 1, ++ 9, 208, 6, 32, 254, 247, 33, 253, 255, 40, 192, 208, 16, 224, 11, 70, ++ 161, 29, 4, 32, 246, 231, 5, 32, 244, 231, 5, 40, 3, 208, 6, 40, 3, ++ 208, 6, 32, 2, 224, 4, 32, 0, 224, 5, 32, 254, 247, 84, 253, 40, 104, ++ 64, 121, 0, 40, 173, 209, 32, 121, 240, 113, 40, 104, 57, 73, 71, 76, ++ 252, 255, 209, 99, 33, 0, 112, 55, 72, 9, 120, 0, 104, 0, 120, 8, 26, ++ 48, 114, 206, 230, 40, 104, 71, 113, 203, 230, 3, 1, 152, 1, 222, 47, ++ 13, 0, 112, 181, 140, 176, 0, 241, 9, 4, 205, 248, 40, 208, 0, 32, 5, ++ 38, 141, 248, 5, 0, 141, 248, 1, 96, 224, 120, 109, 70, 8, 40, 34, 210, ++ 223, 232, 0, 240, 4, 13, 18, 23, 23, 28, 28, 28, 41, 73, 32, 121, 8, ++ 112, 141, 248, 7, 0, 6, 32, 141, 248, 1, 0, 22, 224, 10, 169, 32, 70, ++ 255, 247, 60, 254, 17, 224, 10, 169, 32, 70, 255, 247, 139, 254, 12, ++ 224, 10, 169, 32, 70, 255, 247, 220, 254, 7, 224, 10, 169, 32, 70, 255, ++ 247, 84, 255, 2, 224, 18, 32, 141, 248, 5, 0, 10, 153, 0, 41, 10, 208, ++ 32, 70, 145, 247, 56, 253, 10, 152, 65, 121, 1, 177, 70, 112, 168, 66, ++ 3, 209, 48, 247, 220, 250, 12, 176, 112, 189, 8, 56, 48, 247, 143, 250, ++ 249, 231, 3, 1, 78, 114, 48, 13, 0, 16, 181, 20, 70, 80, 247, 173, 255, ++ 14, 73, 8, 120, 8, 177, 13, 72, 0, 136, 32, 129, 72, 120, 1, 40, 3, ++ 209, 224, 114, 3, 72, 0, 120, 32, 115, 0, 32, 96, 115, 16, 189, 0, 0, ++ 43, 94, 13, 0, 40, 94, 13, 0, 52, 94, 13, 0, 48, 94, 13, 0, 42, 94, ++ 13, 0, 44, 94, 13, 0, 216, 76, 252, 255, 204, 100, 33, 0, 11, 33, 0, ++ 84, 41, 32, 0, 3, 1, 154, 1, 188, 48, 13, 0, 45, 233, 240, 65, 0, 241, ++ 9, 1, 5, 123, 64, 123, 78, 121, 16, 114, 149, 113, 192, 243, 65, 1, ++ 20, 70, 0, 240, 1, 7, 214, 113, 3, 41, 5, 208, 41, 6, 5, 213, 17, 32, ++ 80, 113, 189, 232, 240, 129, 18, 32, 250, 231, 4, 45, 1, 210, 108, 73, ++ 1, 224, 107, 73, 9, 29, 171, 7, 79, 234, 211, 108, 10, 104, 255, 35, ++ 3, 250, 12, 243, 154, 67, 0, 250, 12, 240, 16, 67, 101, 74, 8, 96, 16, ++ 104, 79, 234, 133, 3, 79, 240, 15, 1, 1, 250, 3, 241, 32, 234, 1, 0, ++ 16, 96, 135, 240, 1, 2, 79, 240, 0, 1, 40, 70, 143, 247, 217, 249, 39, ++ 177, 40, 70, 143, 247, 198, 249, 198, 178, 3, 224, 49, 70, 40, 70, 143, ++ 247, 178, 249, 230, 113, 0, 32, 96, 113, 201, 231, 3, 1, 44, 82, 49, ++ 13, 0, 112, 181, 0, 241, 9, 5, 0, 123, 2, 33, 20, 70, 177, 235, 208, ++ 15, 2, 216, 48, 32, 80, 113, 112, 189, 143, 247, 174, 249, 224, 113, ++ 232, 120, 160, 113, 0, 32, 96, 113, 112, 189, 3, 1, 42, 122, 49, 13, ++ 0, 16, 181, 4, 70, 114, 247, 108, 249, 74, 74, 210, 248, 0, 17, 20, ++ 177, 65, 244, 0, 1, 1, 224, 33, 244, 0, 1, 194, 248, 0, 17, 189, 232, ++ 76, 252, 255, 199, 101, 33, 0, 16, 64, 114, 247, 97, 185, 3, 1, 78, ++ 160, 49, 13, 0, 112, 181, 4, 70, 13, 70, 114, 247, 88, 249, 65, 75, ++ 1, 70, 211, 248, 148, 32, 36, 177, 1, 44, 5, 208, 2, 44, 6, 208, 9, ++ 224, 34, 240, 1, 2, 6, 224, 66, 240, 3, 2, 3, 224, 34, 240, 2, 0, 64, ++ 240, 128, 2, 34, 244, 112, 16, 13, 177, 0, 245, 128, 32, 195, 248, 148, ++ 0, 189, 232, 112, 64, 8, 70, 114, 247, 60, 185, 3, 1, 44, 234, 49, 13, ++ 0, 16, 181, 48, 76, 56, 177, 0, 32, 95, 247, 42, 252, 32, 104, 64, 240, ++ 4, 0, 32, 96, 16, 189, 32, 104, 32, 240, 4, 0, 32, 96, 189, 232, 16, ++ 64, 0, 32, 95, 247, 183, 188, 3, 1, 68, 18, 50, 13, 0, 16, 181, 4, 70, ++ 39, 72, 2, 120, 90, 177, 1, 42, 23, 209, 33, 70, 1, 32, 255, 247, 188, ++ 255, 79, 240, 0, 0, 84, 177, 93, 247, 75, 250, 9, 224, 33, 70, 0, 32, ++ 255, 247, 178, 255, 32, 70, 189, 232, 16, 64, 210, 231, 93, 247, 107, ++ 250, 32, 70, 189, 232, 16, 64, 148, 231, 16, 189, 3, 1, 22, 82, 50, ++ 13, 0, 25, 73, 2, 123, 200, 124, 98, 243, 134, 16, 200, 116, 192, 243, ++ 128, 16, 214, 231, 3, 1, 20, 100, 50, 13, 0, 20, 72, 192, 124, 192, ++ 243, 128, 16, 144, 113, 0, 32, 80, 113, 76, 252, 255, 194, 102, 33, ++ 0, 112, 71, 3, 1, 30, 116, 50, 13, 0, 112, 181, 9, 48, 20, 70, 197, ++ 120, 195, 122, 1, 121, 66, 29, 40, 70, 253, 247, 172, 251, 0, 32, 96, ++ 113, 112, 189, 3, 1, 50, 142, 50, 13, 0, 16, 181, 144, 249, 13, 16, ++ 20, 70, 0, 123, 2, 240, 44, 248, 160, 113, 0, 32, 96, 113, 16, 189, ++ 104, 0, 50, 0, 136, 0, 50, 0, 0, 32, 53, 0, 0, 16, 53, 0, 96, 44, 32, ++ 0, 24, 65, 32, 0, 3, 1, 160, 1, 188, 50, 13, 0, 112, 181, 35, 76, 71, ++ 242, 68, 3, 5, 70, 1, 70, 194, 26, 32, 104, 153, 66, 48, 208, 6, 220, ++ 161, 245, 224, 65, 63, 57, 24, 208, 1, 41, 4, 209, 21, 224, 62, 42, ++ 31, 208, 188, 42, 23, 208, 45, 247, 61, 251, 8, 33, 3, 32, 113, 247, ++ 195, 255, 32, 104, 114, 247, 90, 250, 40, 70, 137, 247, 107, 248, 189, ++ 232, 112, 64, 8, 33, 4, 32, 113, 247, 183, 191, 72, 247, 9, 254, 189, ++ 232, 112, 64, 139, 247, 74, 189, 114, 247, 73, 250, 189, 232, 112, 64, ++ 65, 247, 84, 191, 10, 73, 9, 105, 0, 41, 13, 208, 189, 232, 112, 64, ++ 8, 71, 8, 73, 2, 122, 11, 120, 154, 26, 10, 112, 114, 247, 55, 250, ++ 189, 232, 112, 64, 48, 247, 248, 184, 112, 189, 0, 0, 240, 39, 32, 0, ++ 200, 158, 32, 0, 164, 40, 32, 76, 252, 255, 189, 103, 33, 0, 0, 3, 1, ++ 36, 88, 51, 13, 0, 16, 181, 1, 70, 0, 36, 5, 72, 131, 247, 215, 250, ++ 32, 177, 1, 36, 71, 242, 10, 0, 137, 247, 204, 248, 32, 70, 16, 189, ++ 12, 96, 32, 0, 3, 1, 168, 1, 120, 51, 13, 0, 240, 181, 33, 76, 33, 75, ++ 33, 104, 66, 24, 154, 66, 2, 210, 8, 68, 32, 96, 240, 189, 178, 251, ++ 243, 241, 3, 251, 17, 32, 32, 96, 5, 32, 177, 251, 240, 247, 26, 74, ++ 80, 104, 8, 68, 80, 96, 1, 32, 6, 70, 19, 104, 6, 250, 0, 244, 35, 66, ++ 3, 208, 19, 24, 28, 122, 229, 25, 29, 114, 64, 28, 17, 40, 243, 211, ++ 0, 32, 2, 235, 128, 3, 28, 127, 52, 177, 92, 139, 140, 66, 1, 216, 94, ++ 131, 1, 224, 100, 26, 92, 131, 64, 28, 8, 40, 241, 211, 11, 72, 192, ++ 124, 64, 7, 209, 212, 10, 72, 0, 120, 24, 177, 9, 72, 2, 136, 10, 68, ++ 2, 128, 8, 72, 2, 120, 17, 68, 1, 112, 240, 189, 0, 0, 212, 35, 32, ++ 0, 72, 232, 1, 0, 212, 96, 32, 0, 24, 65, 32, 0, 146, 38, 32, 0, 144, ++ 38, 32, 0, 76, 35, 32, 0, 3, 1, 42, 28, 52, 13, 0, 16, 181, 4, 70, 0, ++ 109, 72, 177, 62, 74, 180, 248, 156, 16, 64, 242, 113, 35, 18, 120, ++ 90, 67, 81, 67, 113, 247, 169, 254, 32, 70, 189, 232, 76, 252, 255, ++ 184, 104, 33, 0, 16, 64, 76, 247, 117, 186, 3, 1, 162, 1, 66, 52, 13, ++ 0, 112, 181, 4, 70, 103, 247, 216, 250, 5, 70, 32, 70, 146, 247, 195, ++ 255, 32, 70, 112, 247, 246, 251, 112, 177, 148, 248, 163, 0, 192, 6, ++ 10, 213, 224, 105, 192, 243, 196, 0, 10, 40, 5, 209, 32, 70, 128, 247, ++ 110, 254, 32, 104, 96, 247, 72, 249, 224, 105, 192, 243, 196, 1, 8, ++ 41, 3, 211, 32, 240, 248, 0, 104, 48, 224, 97, 32, 70, 75, 247, 179, ++ 255, 225, 105, 36, 72, 193, 243, 192, 49, 65, 240, 14, 1, 41, 115, 148, ++ 248, 161, 16, 105, 115, 104, 96, 32, 72, 168, 96, 41, 70, 32, 70, 75, ++ 247, 211, 255, 32, 32, 114, 247, 194, 248, 5, 0, 15, 208, 34, 70, 27, ++ 73, 113, 247, 24, 253, 26, 72, 180, 248, 156, 16, 64, 242, 113, 34, ++ 0, 120, 80, 67, 65, 67, 40, 70, 113, 247, 88, 254, 37, 101, 1, 32, 112, ++ 189, 3, 1, 88, 224, 52, 13, 0, 112, 181, 5, 70, 12, 70, 177, 248, 3, ++ 0, 2, 33, 112, 247, 179, 248, 120, 177, 208, 248, 228, 16, 193, 243, ++ 4, 33, 9, 41, 9, 208, 97, 121, 5, 248, 161, 31, 22, 33, 105, 112, 189, ++ 232, 112, 64, 5, 33, 115, 247, 8, 189, 40, 70, 189, 232, 112, 64, 7, ++ 34, 1, 33, 120, 247, 209, 188, 55, 49, 32, 0, 171, 100, 6, 0, 76, 252, ++ 255, 179, 105, 33, 0, 167, 100, 6, 0, 209, 99, 6, 0, 77, 94, 13, 0, ++ 3, 1, 72, 52, 53, 13, 0, 16, 181, 193, 105, 193, 243, 192, 49, 177, ++ 177, 12, 73, 2, 142, 9, 136, 15, 42, 1, 208, 11, 4, 15, 213, 9, 75, ++ 17, 36, 91, 104, 27, 123, 180, 235, 83, 15, 3, 208, 15, 42, 6, 209, ++ 137, 4, 4, 213, 0, 104, 131, 247, 14, 251, 0, 32, 16, 189, 35, 32, 16, ++ 189, 8, 30, 32, 0, 164, 35, 32, 0, 3, 1, 60, 120, 53, 13, 0, 16, 181, ++ 9, 76, 32, 33, 9, 72, 151, 247, 253, 253, 8, 72, 113, 247, 39, 254, ++ 32, 70, 103, 247, 43, 255, 8, 177, 140, 247, 93, 248, 5, 73, 139, 32, ++ 8, 96, 16, 189, 0, 0, 200, 217, 32, 0, 136, 96, 32, 0, 168, 96, 32, ++ 0, 236, 138, 49, 0, 3, 1, 124, 176, 53, 13, 0, 112, 181, 4, 70, 6, 41, ++ 3, 209, 148, 248, 181, 0, 192, 8, 1, 208, 0, 32, 112, 189, 4, 34, 128, ++ 33, 32, 70, 137, 247, 250, 248, 20, 77, 3, 0, 4, 208, 104, 104, 0, 123, ++ 192, 243, 0, 2, 21, 224, 224, 105, 192, 243, 196, 1, 8, 41, 11, 209, ++ 14, 73, 9, 136, 9, 5, 17, 213, 0, 4, 15, 212, 32, 104, 112, 247, 113, ++ 251, 94, 247, 176, 252, 72, 177, 104, 104, 12, 35, 0, 123, 192, 243, ++ 0, 2, 23, 33, 32, 70, 76, 252, 255, 174, 106, 33, 0, 103, 247, 65, 250, ++ 2, 224, 32, 70, 138, 247, 53, 249, 1, 32, 112, 189, 0, 0, 164, 35, 32, ++ 0, 8, 30, 32, 0, 3, 1, 14, 40, 54, 13, 0, 17, 72, 0, 33, 192, 233, 12, ++ 17, 112, 71, 3, 1, 74, 50, 54, 13, 0, 112, 181, 0, 34, 15, 77, 16, 70, ++ 17, 70, 83, 35, 75, 67, 5, 235, 131, 3, 220, 105, 230, 2, 10, 213, 147, ++ 248, 155, 96, 4, 46, 6, 208, 196, 243, 196, 4, 8, 44, 2, 209, 179, 248, ++ 100, 0, 82, 28, 73, 28, 11, 41, 234, 219, 1, 42, 0, 208, 0, 32, 112, ++ 189, 0, 0, 24, 65, 32, 0, 104, 66, 32, 0, 3, 1, 32, 120, 54, 13, 0, ++ 5, 72, 16, 181, 128, 123, 32, 185, 139, 247, 171, 250, 8, 177, 2, 32, ++ 16, 189, 0, 32, 16, 189, 0, 0, 248, 91, 32, 0, 3, 1, 206, 1, 148, 54, ++ 13, 0, 112, 181, 53, 77, 40, 104, 128, 123, 109, 247, 171, 251, 41, ++ 104, 201, 110, 109, 247, 47, 251, 41, 104, 49, 78, 49, 75, 145, 248, ++ 237, 32, 194, 177, 145, 248, 229, 32, 154, 185, 47, 76, 209, 248, 200, ++ 32, 36, 104, 34, 66, 6, 208, 145, 248, 148, 64, 36, 6, 9, 212, 52, 120, ++ 160, 66, 6, 216, 41, 72, 42, 76, 0, 104, 36, 104, 32, 67, 2, 66, 1, ++ 208, 156, 120, 0, 224, 92, 120, 145, 248, 229, 0, 76, 252, 255, 169, ++ 107, 33, 0, 24, 177, 24, 92, 160, 66, 0, 217, 4, 70, 35, 72, 0, 104, ++ 0, 7, 0, 213, 220, 120, 209, 248, 192, 0, 64, 28, 22, 208, 136, 123, ++ 109, 247, 116, 251, 41, 104, 209, 248, 192, 16, 109, 247, 255, 250, ++ 27, 73, 0, 40, 7, 219, 42, 104, 79, 240, 255, 48, 194, 248, 192, 0, ++ 63, 32, 8, 112, 3, 224, 8, 120, 132, 66, 0, 210, 4, 70, 112, 120, 64, ++ 177, 69, 44, 6, 209, 40, 104, 144, 248, 168, 0, 76, 247, 229, 251, 0, ++ 177, 15, 36, 33, 70, 40, 104, 104, 247, 14, 254, 13, 72, 0, 120, 133, ++ 248, 52, 0, 112, 189, 3, 1, 58, 94, 55, 13, 0, 12, 73, 0, 235, 192, ++ 0, 1, 235, 128, 0, 112, 71, 0, 0, 240, 110, 32, 0, 220, 11, 33, 0, 48, ++ 36, 32, 0, 0, 38, 32, 0, 180, 48, 32, 0, 44, 36, 32, 0, 56, 30, 32, ++ 0, 24, 36, 32, 0, 32, 36, 32, 0, 120, 112, 32, 0, 3, 1, 72, 148, 55, ++ 13, 0, 112, 181, 4, 70, 13, 77, 109, 247, 21, 251, 128, 178, 41, 140, ++ 109, 247, 112, 251, 225, 139, 176, 235, 65, 15, 4, 217, 160, 123, 16, ++ 185, 168, 124, 46, 40, 6, 208, 113, 32, 160, 116, 5, 72, 0, 120, 132, ++ 248, 67, 0, 112, 189, 148, 248, 71, 0, 160, 116, 112, 189, 0, 0, 156, ++ 91, 32, 0, 248, 48, 32, 0, 3, 76, 252, 255, 164, 108, 33, 0, 1, 82, ++ 216, 55, 13, 0, 112, 181, 39, 73, 37, 76, 9, 120, 0, 41, 29, 208, 8, ++ 48, 1, 34, 225, 139, 130, 64, 35, 72, 17, 67, 225, 131, 144, 248, 48, ++ 0, 46, 37, 152, 177, 33, 73, 180, 249, 28, 0, 9, 120, 136, 66, 6, 220, ++ 64, 66, 136, 66, 3, 220, 148, 248, 54, 0, 0, 40, 5, 208, 32, 70, 94, ++ 247, 242, 251, 0, 40, 0, 208, 165, 116, 112, 189, 160, 139, 244, 231, ++ 3, 1, 98, 38, 56, 13, 0, 112, 181, 18, 76, 1, 34, 130, 64, 225, 139, ++ 4, 235, 64, 0, 17, 67, 225, 131, 0, 33, 65, 132, 15, 72, 46, 37, 144, ++ 248, 48, 0, 152, 177, 14, 73, 180, 249, 28, 0, 9, 120, 136, 66, 6, 220, ++ 64, 66, 136, 66, 3, 220, 148, 248, 54, 0, 0, 40, 5, 208, 32, 70, 94, ++ 247, 204, 251, 0, 40, 0, 208, 165, 116, 112, 189, 160, 139, 244, 231, ++ 0, 0, 156, 91, 32, 0, 31, 35, 32, 0, 248, 91, 32, 0, 32, 35, 32, 0, ++ 3, 1, 228, 1, 132, 56, 13, 0, 112, 181, 4, 70, 104, 247, 54, 249, 0, ++ 38, 1, 37, 88, 177, 63, 72, 0, 33, 6, 112, 32, 70, 156, 247, 211, 251, ++ 32, 70, 156, 247, 19, 252, 132, 248, 91, 80, 112, 189, 32, 70, 104, ++ 247, 1, 251, 0, 40, 249, 208, 32, 70, 225, 139, 156, 247, 196, 251, ++ 160, 123, 76, 252, 255, 159, 109, 33, 0, 109, 247, 154, 250, 161, 105, ++ 109, 247, 31, 250, 225, 139, 137, 30, 136, 66, 12, 216, 32, 70, 156, ++ 247, 31, 250, 47, 73, 8, 96, 47, 73, 8, 96, 47, 72, 5, 96, 109, 247, ++ 113, 250, 46, 73, 8, 96, 148, 248, 91, 0, 152, 177, 91, 247, 176, 249, ++ 73, 247, 219, 253, 1, 40, 11, 209, 32, 70, 90, 247, 80, 254, 56, 177, ++ 148, 248, 111, 0, 32, 177, 132, 248, 110, 80, 32, 70, 155, 247, 154, ++ 249, 132, 248, 91, 96, 148, 248, 107, 0, 232, 185, 148, 248, 40, 0, ++ 1, 40, 13, 208, 148, 248, 36, 0, 148, 248, 44, 16, 192, 243, 2, 0, 193, ++ 243, 2, 1, 136, 66, 3, 209, 148, 248, 41, 0, 2, 40, 11, 208, 32, 70, ++ 90, 247, 45, 254, 56, 177, 148, 248, 111, 0, 32, 177, 132, 248, 110, ++ 80, 32, 70, 155, 247, 119, 249, 32, 70, 189, 232, 112, 64, 156, 247, ++ 51, 187, 3, 1, 22, 100, 57, 13, 0, 16, 181, 4, 70, 156, 247, 147, 255, ++ 32, 70, 189, 232, 16, 64, 0, 240, 191, 184, 3, 1, 22, 118, 57, 13, 0, ++ 16, 181, 156, 247, 148, 248, 9, 73, 0, 32, 8, 112, 9, 73, 8, 128, 16, ++ 189, 3, 1, 48, 136, 57, 13, 0, 9, 73, 8, 72, 8, 96, 112, 71, 252, 38, ++ 32, 0, 8, 39, 32, 0, 160, 28, 32, 0, 156, 28, 32, 0, 164, 28, 32, 0, ++ 76, 252, 255, 154, 110, 33, 0, 172, 94, 13, 0, 176, 94, 13, 0, 80, 94, ++ 13, 0, 4, 39, 32, 0, 3, 1, 12, 180, 57, 13, 0, 49, 73, 48, 72, 8, 96, ++ 112, 71, 3, 1, 200, 1, 188, 57, 13, 0, 45, 233, 240, 65, 4, 70, 45, ++ 73, 144, 248, 86, 0, 9, 31, 69, 24, 32, 70, 104, 247, 147, 248, 0, 38, ++ 0, 40, 32, 70, 16, 208, 104, 247, 3, 250, 1, 39, 8, 177, 47, 112, 0, ++ 224, 46, 112, 160, 108, 158, 247, 212, 253, 224, 108, 158, 247, 178, ++ 253, 132, 248, 91, 112, 189, 232, 240, 129, 104, 247, 89, 250, 176, ++ 177, 148, 248, 91, 0, 24, 185, 160, 108, 144, 248, 39, 0, 80, 185, 91, ++ 247, 32, 249, 73, 247, 75, 253, 1, 40, 2, 209, 32, 70, 90, 247, 192, ++ 253, 132, 248, 91, 96, 32, 70, 189, 232, 240, 65, 90, 247, 240, 190, ++ 32, 70, 104, 247, 55, 250, 0, 40, 222, 208, 40, 120, 128, 177, 148, ++ 248, 91, 0, 24, 185, 160, 108, 144, 248, 39, 0, 72, 185, 91, 247, 2, ++ 249, 73, 247, 45, 253, 1, 40, 2, 209, 32, 70, 90, 247, 162, 253, 46, ++ 112, 32, 70, 90, 247, 213, 254, 160, 108, 158, 247, 149, 253, 224, 108, ++ 189, 232, 240, 65, 158, 247, 113, 189, 0, 0, 128, 94, 13, 0, 12, 39, ++ 32, 0, 3, 1, 44, 128, 58, 13, 0, 16, 181, 130, 247, 80, 251, 60, 72, ++ 0, 76, 252, 255, 149, 111, 33, 0, 33, 1, 112, 129, 128, 59, 73, 74, ++ 104, 9, 104, 162, 235, 1, 1, 57, 74, 193, 241, 255, 1, 210, 121, 161, ++ 235, 2, 1, 129, 112, 16, 189, 3, 1, 58, 168, 58, 13, 0, 2, 42, 22, 209, ++ 53, 72, 22, 41, 6, 208, 19, 41, 10, 208, 20, 41, 8, 208, 21, 41, 6, ++ 208, 12, 224, 1, 104, 45, 74, 33, 240, 255, 1, 146, 120, 4, 224, 1, ++ 104, 46, 74, 33, 240, 255, 1, 18, 120, 17, 67, 1, 96, 0, 32, 112, 71, ++ 3, 1, 26, 222, 58, 13, 0, 43, 72, 0, 104, 16, 177, 175, 242, 103, 1, ++ 1, 96, 175, 242, 67, 0, 40, 73, 200, 100, 112, 71, 3, 1, 176, 1, 244, ++ 58, 13, 0, 112, 181, 64, 108, 0, 40, 59, 208, 144, 249, 223, 0, 127, ++ 40, 55, 208, 28, 76, 35, 75, 1, 37, 97, 120, 73, 28, 1, 240, 15, 2, ++ 98, 112, 33, 70, 147, 249, 0, 96, 137, 136, 176, 66, 3, 218, 147, 249, ++ 1, 48, 152, 66, 4, 218, 5, 250, 2, 240, 129, 67, 161, 128, 3, 224, 5, ++ 250, 2, 240, 8, 67, 160, 128, 160, 136, 73, 247, 192, 252, 33, 120, ++ 33, 177, 4, 40, 5, 216, 0, 32, 32, 112, 2, 224, 8, 40, 0, 211, 37, 112, ++ 16, 74, 16, 104, 192, 243, 5, 65, 32, 41, 9, 209, 33, 120, 1, 41, 6, ++ 209, 13, 73, 64, 244, 128, 0, 16, 96, 76, 252, 255, 144, 112, 33, 0, ++ 8, 96, 80, 104, 72, 96, 112, 189, 0, 0, 172, 94, 13, 0, 144, 128, 49, ++ 0, 16, 30, 32, 0, 144, 139, 49, 0, 40, 37, 32, 0, 4, 29, 32, 0, 24, ++ 82, 32, 0, 222, 11, 33, 0, 188, 28, 32, 0, 96, 1, 101, 0, 3, 1, 94, ++ 160, 59, 13, 0, 91, 72, 79, 244, 128, 113, 0, 104, 1, 96, 1, 96, 89, ++ 72, 90, 73, 130, 104, 10, 99, 130, 106, 138, 99, 88, 75, 194, 104, 26, ++ 96, 88, 75, 2, 105, 26, 96, 87, 75, 66, 105, 26, 96, 87, 75, 130, 105, ++ 26, 96, 86, 75, 194, 105, 26, 96, 86, 75, 2, 106, 26, 96, 66, 106, 10, ++ 96, 84, 73, 64, 104, 8, 96, 84, 72, 1, 105, 33, 240, 1, 1, 1, 97, 1, ++ 104, 33, 240, 1, 1, 1, 96, 112, 71, 3, 1, 218, 1, 250, 59, 13, 0, 112, ++ 181, 5, 70, 174, 247, 7, 249, 76, 72, 0, 104, 67, 76, 0, 240, 63, 0, ++ 32, 99, 73, 72, 56, 56, 0, 104, 192, 243, 133, 1, 74, 17, 33, 240, 32, ++ 0, 224, 98, 1, 42, 4, 209, 128, 240, 31, 0, 64, 28, 64, 66, 224, 98, ++ 62, 72, 80, 48, 0, 104, 192, 243, 3, 48, 194, 16, 32, 240, 8, 1, 97, ++ 99, 1, 42, 4, 209, 129, 240, 7, 0, 64, 28, 64, 66, 96, 99, 173, 28, ++ 232, 178, 64, 240, 128, 1, 49, 72, 184, 56, 76, 252, 255, 139, 113, ++ 33, 0, 149, 247, 167, 255, 47, 73, 1, 32, 8, 96, 44, 72, 1, 107, 65, ++ 240, 207, 1, 1, 99, 79, 240, 15, 1, 129, 99, 79, 240, 28, 1, 1, 96, ++ 47, 72, 1, 105, 65, 240, 1, 1, 1, 97, 1, 104, 65, 240, 1, 1, 1, 96, ++ 36, 73, 71, 242, 193, 0, 8, 96, 35, 73, 79, 244, 192, 64, 8, 96, 34, ++ 72, 1, 104, 75, 246, 255, 114, 1, 234, 2, 1, 34, 104, 65, 234, 130, ++ 49, 1, 96, 31, 72, 1, 104, 33, 74, 33, 240, 127, 1, 18, 104, 65, 234, ++ 2, 1, 65, 240, 64, 1, 1, 96, 25, 73, 79, 244, 197, 64, 8, 96, 112, 189, ++ 3, 1, 6, 208, 60, 13, 0, 112, 71, 3, 1, 114, 210, 60, 13, 0, 17, 73, ++ 10, 107, 15, 72, 130, 96, 16, 74, 18, 104, 194, 96, 138, 107, 130, 98, ++ 14, 74, 18, 104, 2, 97, 14, 74, 18, 104, 66, 97, 13, 74, 18, 104, 130, ++ 97, 13, 74, 18, 104, 194, 97, 12, 74, 18, 104, 2, 98, 9, 104, 65, 98, ++ 11, 73, 9, 104, 65, 96, 112, 71, 0, 0, 208, 27, 32, 0, 184, 94, 13, ++ 0, 200, 0, 100, 0, 188, 1, 96, 0, 96, 4, 65, 0, 252, 4, 65, 0, 232, ++ 6, 65, 0, 88, 4, 65, 0, 40, 4, 65, 0, 228, 6, 65, 0, 96, 1, 101, 0, ++ 224, 11, 33, 0, 3, 1, 58, 64, 61, 13, 0, 76, 252, 255, 134, 114, 33, ++ 0, 248, 74, 255, 40, 2, 220, 50, 248, 16, 0, 112, 71, 255, 33, 144, ++ 251, 241, 241, 100, 35, 88, 67, 193, 235, 1, 35, 144, 251, 243, 240, ++ 178, 248, 200, 48, 50, 248, 16, 0, 50, 248, 17, 16, 192, 26, 178, 248, ++ 254, 49, 25, 68, 8, 68, 112, 71, 3, 1, 160, 1, 118, 61, 13, 0, 45, 233, ++ 240, 65, 0, 33, 234, 75, 10, 70, 8, 70, 14, 70, 79, 244, 0, 71, 232, ++ 77, 28, 104, 8, 224, 47, 96, 43, 104, 46, 96, 155, 4, 155, 12, 26, 68, ++ 0, 209, 64, 28, 73, 28, 161, 66, 244, 211, 160, 66, 3, 210, 32, 26, ++ 178, 251, 240, 240, 0, 224, 0, 32, 79, 244, 122, 113, 72, 67, 27, 33, ++ 176, 251, 241, 240, 64, 29, 10, 33, 144, 251, 241, 240, 255, 247, 187, ++ 255, 160, 245, 0, 64, 160, 245, 226, 80, 0, 235, 128, 0, 79, 234, 128, ++ 0, 66, 242, 16, 113, 144, 251, 241, 240, 211, 73, 9, 104, 160, 235, ++ 1, 1, 210, 72, 0, 104, 192, 241, 11, 0, 0, 235, 64, 0, 8, 68, 207, 73, ++ 9, 104, 160, 235, 1, 0, 206, 73, 9, 104, 64, 24, 1, 213, 64, 66, 64, ++ 66, 64, 178, 189, 232, 240, 129, 3, 1, 56, 18, 62, 13, 0, 112, 181, ++ 4, 70, 4, 241, 40, 1, 144, 248, 52, 0, 13, 70, 153, 247, 155, 255, 6, ++ 70, 255, 247, 166, 255, 1, 0, 76, 252, 255, 129, 115, 33, 0, 9, 208, ++ 48, 70, 153, 247, 219, 255, 118, 28, 41, 70, 240, 178, 153, 247, 142, ++ 255, 132, 248, 52, 0, 0, 32, 112, 189, 3, 1, 42, 70, 62, 13, 0, 16, ++ 181, 4, 70, 189, 72, 0, 104, 16, 240, 254, 15, 9, 208, 187, 72, 135, ++ 247, 224, 251, 24, 177, 68, 67, 79, 32, 180, 251, 240, 244, 4, 185, ++ 1, 36, 32, 70, 16, 189, 3, 1, 26, 108, 62, 13, 0, 182, 72, 16, 181, ++ 64, 136, 255, 247, 232, 255, 179, 73, 128, 0, 80, 57, 161, 248, 192, ++ 2, 16, 189, 3, 1, 120, 130, 62, 13, 0, 16, 181, 107, 247, 88, 255, 56, ++ 185, 98, 247, 240, 255, 32, 185, 132, 247, 11, 248, 8, 185, 135, 247, ++ 237, 250, 170, 76, 80, 60, 180, 248, 194, 2, 48, 177, 160, 241, 1, 0, ++ 0, 4, 0, 12, 164, 248, 194, 2, 9, 208, 166, 72, 144, 248, 59, 0, 64, ++ 7, 27, 213, 160, 76, 32, 104, 64, 8, 14, 209, 9, 224, 160, 72, 0, 120, ++ 255, 247, 188, 255, 164, 248, 194, 2, 189, 232, 16, 64, 135, 247, 137, ++ 190, 157, 72, 0, 136, 64, 7, 8, 213, 1, 34, 4, 33, 0, 32, 130, 247, ++ 84, 254, 32, 104, 64, 240, 1, 0, 32, 96, 16, 189, 3, 1, 122, 246, 62, ++ 13, 0, 112, 181, 0, 37, 107, 247, 29, 255, 145, 76, 80, 60, 104, 177, ++ 20, 32, 153, 247, 128, 251, 135, 76, 252, 255, 124, 116, 33, 0, 247, ++ 153, 251, 145, 72, 33, 109, 1, 37, 1, 96, 97, 109, 65, 96, 180, 248, ++ 88, 16, 1, 129, 98, 247, 165, 255, 16, 177, 153, 247, 80, 253, 0, 224, ++ 61, 177, 2, 32, 153, 247, 123, 255, 148, 248, 239, 0, 8, 177, 135, 247, ++ 115, 250, 131, 72, 144, 248, 59, 0, 64, 7, 16, 213, 125, 76, 32, 104, ++ 64, 8, 3, 209, 127, 72, 0, 136, 64, 7, 8, 213, 1, 34, 4, 33, 0, 32, ++ 130, 247, 25, 254, 32, 104, 64, 240, 1, 0, 32, 96, 112, 189, 3, 1, 58, ++ 108, 63, 13, 0, 112, 181, 120, 72, 116, 76, 117, 77, 0, 136, 164, 241, ++ 80, 4, 64, 7, 1, 213, 1, 32, 3, 224, 104, 136, 255, 247, 95, 255, 128, ++ 0, 164, 248, 192, 2, 108, 72, 0, 104, 64, 8, 2, 208, 40, 120, 255, 247, ++ 85, 255, 164, 248, 194, 2, 112, 189, 3, 1, 6, 162, 63, 13, 0, 112, 71, ++ 3, 1, 196, 3, 164, 63, 13, 0, 45, 233, 255, 71, 0, 39, 4, 70, 62, 70, ++ 103, 247, 113, 255, 0, 40, 116, 208, 108, 247, 67, 252, 0, 40, 112, ++ 209, 148, 248, 50, 0, 2, 40, 108, 208, 100, 72, 144, 248, 48, 0, 32, ++ 177, 151, 247, 235, 252, 176, 245, 28, 127, 99, 217, 160, 123, 2, 169, ++ 108, 247, 0, 255, 2, 152, 94, 77, 16, 240, 3, 0, 6, 208, 1, 40, 7, 208, ++ 2, 40, 76, 252, 255, 119, 117, 33, 0, 14, 208, 3, 40, 23, 209, 2, 224, ++ 1, 33, 2, 152, 13, 224, 40, 104, 3, 153, 64, 29, 129, 66, 6, 210, 2, ++ 153, 205, 233, 0, 16, 10, 224, 2, 152, 64, 28, 3, 224, 2, 33, 2, 152, ++ 108, 247, 69, 252, 0, 144, 40, 104, 64, 29, 1, 144, 160, 123, 2, 171, ++ 2, 70, 105, 70, 108, 247, 137, 253, 104, 70, 108, 247, 136, 254, 5, ++ 70, 223, 248, 232, 144, 148, 248, 50, 0, 223, 248, 12, 129, 169, 241, ++ 2, 9, 104, 177, 152, 248, 2, 16, 153, 248, 0, 0, 8, 68, 168, 66, 2, ++ 216, 181, 251, 240, 240, 199, 178, 0, 37, 79, 240, 2, 9, 70, 224, 1, ++ 32, 132, 248, 50, 0, 148, 248, 52, 0, 173, 247, 3, 255, 173, 247, 54, ++ 255, 152, 248, 2, 0, 152, 248, 3, 32, 153, 248, 0, 16, 131, 24, 1, 38, ++ 11, 68, 171, 66, 231, 210, 43, 26, 11, 68, 26, 68, 8, 68, 178, 251, ++ 240, 240, 64, 28, 222, 231, 62, 224, 148, 248, 52, 0, 4, 241, 40, 1, ++ 153, 247, 86, 254, 128, 28, 192, 178, 64, 240, 128, 1, 42, 72, 149, ++ 247, 120, 253, 70, 177, 152, 248, 2, 16, 152, 248, 3, 0, 8, 68, 73, ++ 247, 33, 250, 0, 38, 3, 224, 152, 248, 2, 0, 73, 247, 27, 250, 32, 70, ++ 153, 247, 140, 254, 148, 248, 52, 0, 78, 40, 5, 217, 132, 248, 50, 144, ++ 32, 76, 252, 255, 114, 118, 33, 0, 70, 127, 247, 110, 253, 3, 224, 109, ++ 28, 237, 178, 189, 66, 211, 211, 148, 248, 60, 0, 64, 28, 192, 178, ++ 132, 248, 60, 0, 78, 40, 10, 217, 148, 248, 50, 0, 1, 40, 6, 209, 132, ++ 248, 50, 144, 32, 70, 127, 247, 88, 253, 153, 247, 82, 255, 189, 232, ++ 255, 135, 10, 95, 13, 0, 228, 11, 33, 0, 232, 6, 65, 0, 228, 94, 13, ++ 0, 224, 11, 33, 0, 232, 94, 13, 0, 236, 94, 13, 0, 144, 86, 32, 0, 124, ++ 212, 32, 0, 168, 29, 32, 0, 24, 65, 32, 0, 180, 29, 32, 0, 221, 126, ++ 32, 0, 248, 91, 32, 0, 68, 43, 32, 0, 4, 1, 96, 0, 3, 1, 80, 100, 65, ++ 13, 0, 124, 181, 0, 37, 4, 70, 2, 41, 15, 208, 4, 41, 29, 209, 148, ++ 248, 50, 0, 0, 40, 25, 208, 89, 78, 160, 123, 105, 70, 108, 247, 46, ++ 254, 0, 152, 192, 67, 128, 7, 6, 208, 9, 224, 85, 72, 0, 104, 192, 243, ++ 2, 16, 160, 115, 7, 224, 1, 152, 49, 104, 136, 66, 236, 216, 173, 247, ++ 206, 254, 173, 247, 1, 255, 132, 248, 50, 80, 124, 189, 3, 1, 152, 1, ++ 176, 65, 13, 0, 16, 181, 77, 76, 0, 32, 132, 248, 60, 0, 148, 248, 64, ++ 0, 8, 185, 105, 247, 62, 251, 224, 142, 8, 177, 64, 30, 224, 134, 105, ++ 247, 71, 255, 106, 247, 125, 248, 69, 72, 127, 76, 252, 255, 109, 119, ++ 33, 0, 247, 175, 250, 32, 185, 67, 72, 0, 104, 0, 31, 106, 247, 7, 248, ++ 66, 72, 127, 247, 166, 250, 56, 185, 148, 248, 59, 0, 1, 40, 3, 216, ++ 105, 247, 228, 253, 105, 247, 86, 255, 130, 247, 6, 251, 0, 32, 142, ++ 247, 189, 251, 32, 104, 80, 177, 1, 124, 4, 41, 7, 209, 56, 73, 73, ++ 120, 33, 185, 148, 248, 59, 16, 9, 185, 255, 247, 193, 254, 148, 248, ++ 59, 0, 1, 40, 5, 208, 104, 247, 249, 253, 73, 247, 208, 248, 1, 32, ++ 16, 189, 105, 247, 128, 255, 0, 40, 247, 209, 73, 247, 240, 251, 244, ++ 231, 3, 1, 192, 1, 68, 66, 13, 0, 112, 181, 40, 76, 1, 32, 132, 248, ++ 60, 0, 105, 247, 247, 250, 0, 37, 79, 246, 255, 112, 37, 97, 224, 134, ++ 165, 97, 105, 247, 254, 254, 106, 247, 52, 248, 33, 72, 127, 247, 102, ++ 250, 32, 185, 31, 72, 0, 104, 0, 31, 105, 247, 190, 255, 105, 247, 137, ++ 255, 30, 72, 229, 96, 127, 247, 90, 250, 8, 185, 105, 247, 58, 254, ++ 104, 247, 131, 254, 1, 32, 142, 247, 119, 251, 32, 104, 56, 177, 1, ++ 124, 4, 41, 4, 209, 21, 73, 73, 120, 9, 185, 255, 247, 126, 254, 20, ++ 72, 0, 120, 8, 177, 252, 247, 69, 251, 1, 32, 104, 247, 158, 250, 24, ++ 185, 13, 72, 127, 247, 60, 250, 40, 177, 104, 247, 173, 253, 73, 247, ++ 132, 248, 76, 252, 255, 104, 120, 33, 0, 1, 32, 112, 189, 4, 72, 1, ++ 34, 17, 70, 3, 104, 16, 70, 91, 29, 104, 247, 145, 250, 242, 231, 68, ++ 43, 32, 0, 36, 134, 49, 0, 0, 63, 32, 0, 68, 28, 32, 0, 60, 28, 32, ++ 0, 168, 29, 32, 0, 52, 28, 32, 0, 201, 34, 32, 0, 3, 1, 248, 3, 0, 67, ++ 13, 0, 45, 233, 248, 79, 128, 79, 5, 70, 79, 240, 0, 8, 56, 104, 32, ++ 185, 40, 120, 0, 40, 126, 209, 112, 247, 201, 249, 113, 247, 158, 248, ++ 0, 144, 122, 72, 34, 33, 1, 96, 79, 244, 70, 25, 0, 38, 201, 248, 0, ++ 98, 4, 33, 201, 248, 4, 18, 79, 244, 72, 20, 38, 102, 201, 248, 0, 96, ++ 50, 32, 73, 247, 228, 248, 114, 72, 224, 101, 79, 244, 69, 17, 79, 240, ++ 128, 11, 193, 248, 12, 176, 200, 32, 73, 247, 217, 248, 40, 120, 79, ++ 244, 202, 10, 79, 244, 192, 4, 224, 177, 196, 248, 188, 97, 105, 72, ++ 6, 96, 212, 248, 252, 2, 32, 240, 12, 0, 196, 248, 252, 2, 56, 104, ++ 72, 177, 10, 245, 176, 112, 1, 105, 33, 240, 1, 1, 1, 97, 1, 104, 33, ++ 240, 1, 1, 1, 96, 0, 152, 113, 247, 100, 248, 40, 120, 52, 70, 208, ++ 179, 156, 224, 0, 32, 133, 247, 246, 253, 1, 33, 10, 245, 176, 112, ++ 57, 96, 2, 105, 66, 240, 1, 2, 2, 97, 2, 104, 66, 240, 1, 76, 252, 255, ++ 99, 121, 33, 0, 2, 2, 96, 72, 70, 201, 248, 0, 98, 201, 248, 4, 178, ++ 234, 120, 0, 42, 212, 248, 252, 34, 2, 208, 66, 240, 12, 2, 3, 224, ++ 34, 240, 12, 2, 66, 240, 8, 2, 196, 248, 252, 34, 75, 74, 137, 70, 17, ++ 96, 105, 120, 73, 74, 137, 30, 8, 50, 17, 96, 105, 120, 137, 30, 18, ++ 31, 17, 96, 70, 73, 1, 96, 0, 32, 79, 244, 122, 115, 79, 244, 69, 18, ++ 1, 70, 64, 28, 153, 66, 1, 224, 107, 224, 14, 224, 2, 216, 209, 104, ++ 9, 6, 245, 213, 79, 244, 72, 16, 79, 244, 0, 49, 1, 102, 200, 32, 73, ++ 247, 111, 248, 196, 248, 188, 145, 174, 231, 224, 178, 169, 120, 64, ++ 240, 1, 0, 96, 243, 7, 4, 6, 41, 25, 210, 223, 232, 1, 240, 3, 7, 14, ++ 39, 42, 46, 32, 240, 28, 0, 24, 48, 14, 224, 196, 243, 7, 32, 64, 240, ++ 1, 0, 96, 243, 15, 36, 9, 224, 196, 243, 7, 33, 65, 240, 1, 1, 97, 243, ++ 15, 36, 64, 240, 2, 0, 96, 243, 7, 4, 233, 120, 196, 243, 7, 32, 97, ++ 243, 131, 0, 96, 243, 15, 36, 40, 121, 7, 40, 15, 216, 0, 6, 128, 13, ++ 64, 66, 64, 178, 17, 224, 32, 240, 224, 0, 235, 231, 32, 240, 224, 0, ++ 32, 48, 231, 231, 32, 240, 224, 0, 160, 48, 227, 231, 8, 40, 2, 208, ++ 9, 40, 5, 208, 8, 224, 76, 252, 255, 94, 122, 33, 0, 149, 249, 5, 0, ++ 126, 247, 10, 250, 2, 224, 168, 121, 125, 247, 158, 254, 128, 70, 2, ++ 33, 64, 70, 165, 247, 69, 253, 8, 240, 255, 1, 17, 72, 149, 247, 104, ++ 251, 11, 72, 4, 96, 40, 120, 32, 177, 56, 104, 16, 177, 111, 247, 91, ++ 255, 62, 96, 1, 32, 189, 232, 248, 143, 3, 1, 48, 244, 68, 13, 0, 16, ++ 181, 20, 70, 12, 48, 255, 247, 1, 255, 0, 40, 1, 209, 18, 32, 96, 113, ++ 16, 189, 12, 97, 13, 0, 192, 4, 65, 0, 0, 2, 12, 0, 16, 132, 49, 0, ++ 1, 0, 128, 0, 12, 1, 96, 0, 3, 1, 36, 32, 69, 13, 0, 16, 181, 133, 247, ++ 110, 253, 133, 247, 95, 253, 4, 72, 1, 104, 65, 240, 1, 1, 1, 96, 189, ++ 232, 16, 64, 133, 247, 17, 189, 4, 44, 32, 0, 3, 1, 184, 1, 64, 69, ++ 13, 0, 45, 233, 240, 65, 13, 70, 38, 73, 223, 248, 152, 192, 0, 35, ++ 137, 120, 28, 248, 3, 64, 161, 66, 3, 216, 92, 30, 6, 43, 4, 210, 6, ++ 224, 91, 28, 219, 178, 6, 43, 243, 211, 5, 35, 4, 36, 2, 224, 11, 185, ++ 1, 35, 0, 36, 28, 78, 5, 235, 133, 5, 128, 177, 27, 72, 195, 235, 3, ++ 23, 7, 68, 47, 68, 23, 68, 151, 248, 162, 112, 247, 96, 196, 235, 4, ++ 23, 56, 68, 40, 68, 16, 68, 144, 248, 162, 0, 17, 76, 252, 255, 89, ++ 123, 33, 0, 224, 20, 72, 3, 235, 131, 7, 0, 235, 199, 7, 47, 68, 23, ++ 68, 151, 248, 109, 113, 247, 96, 4, 235, 132, 7, 0, 235, 199, 0, 40, ++ 68, 16, 68, 144, 248, 109, 1, 176, 96, 28, 248, 3, 0, 112, 96, 28, 248, ++ 4, 0, 48, 96, 5, 72, 81, 247, 54, 253, 255, 40, 0, 217, 255, 32, 189, ++ 232, 240, 129, 189, 30, 32, 0, 16, 19, 32, 0, 44, 81, 32, 0, 235, 21, ++ 32, 0, 22, 19, 32, 0, 3, 1, 194, 4, 244, 69, 13, 0, 45, 233, 240, 79, ++ 135, 176, 0, 38, 4, 70, 5, 150, 144, 248, 210, 0, 252, 247, 122, 252, ++ 128, 70, 138, 247, 255, 250, 148, 248, 210, 112, 4, 169, 30, 55, 56, ++ 70, 95, 247, 252, 249, 223, 248, 188, 180, 5, 0, 10, 208, 4, 152, 0, ++ 235, 64, 1, 219, 248, 0, 0, 0, 235, 129, 0, 6, 96, 70, 96, 134, 96, ++ 3, 224, 4, 168, 95, 247, 214, 249, 240, 179, 8, 32, 141, 248, 10, 0, ++ 79, 240, 1, 10, 141, 248, 11, 160, 141, 248, 7, 112, 148, 248, 208, ++ 0, 173, 248, 0, 96, 141, 248, 8, 0, 173, 248, 2, 96, 95, 247, 209, 250, ++ 141, 248, 9, 0, 180, 248, 76, 0, 79, 240, 2, 9, 64, 28, 32, 240, 1, ++ 0, 128, 178, 173, 248, 4, 0, 2, 40, 1, 210, 173, 248, 4, 144, 180, 248, ++ 78, 0, 189, 248, 4, 16, 76, 252, 255, 84, 124, 33, 0, 64, 28, 32, 240, ++ 1, 0, 136, 66, 1, 217, 64, 26, 5, 144, 148, 248, 210, 0, 165, 247, 254, ++ 250, 5, 153, 111, 240, 1, 2, 8, 68, 5, 144, 180, 248, 72, 16, 2, 235, ++ 65, 2, 130, 66, 3, 216, 72, 0, 0, 224, 18, 224, 128, 30, 141, 248, 6, ++ 0, 148, 248, 209, 0, 176, 177, 0, 45, 126, 208, 180, 248, 200, 0, 173, ++ 248, 0, 0, 180, 248, 202, 0, 173, 248, 2, 0, 148, 248, 213, 0, 137, ++ 224, 0, 35, 107, 34, 64, 242, 161, 49, 251, 72, 112, 247, 244, 248, ++ 7, 176, 189, 232, 240, 143, 1, 39, 89, 247, 99, 255, 24, 177, 94, 247, ++ 60, 248, 0, 185, 0, 39, 180, 248, 68, 0, 64, 5, 5, 213, 184, 248, 0, ++ 0, 16, 177, 173, 248, 2, 0, 9, 224, 180, 248, 74, 0, 59, 70, 66, 0, ++ 180, 248, 72, 0, 65, 0, 104, 70, 95, 247, 66, 251, 189, 248, 2, 0, 1, ++ 40, 10, 217, 233, 73, 73, 104, 64, 30, 177, 251, 240, 242, 0, 251, 18, ++ 16, 32, 240, 1, 0, 173, 248, 0, 0, 148, 248, 210, 0, 5, 170, 105, 70, ++ 165, 247, 199, 250, 72, 187, 180, 248, 68, 0, 64, 5, 25, 213, 184, 248, ++ 0, 0, 176, 177, 74, 70, 33, 70, 104, 70, 205, 248, 12, 144, 95, 247, ++ 51, 252, 208, 185, 82, 70, 33, 70, 104, 70, 205, 248, 12, 160, 95, 247, ++ 43, 76, 252, 255, 79, 125, 33, 0, 252, 144, 185, 50, 70, 33, 70, 104, ++ 70, 3, 150, 95, 247, 36, 252, 88, 185, 3, 169, 104, 70, 95, 247, 234, ++ 250, 48, 185, 173, 248, 0, 96, 180, 248, 74, 0, 64, 0, 173, 248, 2, ++ 0, 189, 248, 0, 0, 93, 177, 164, 248, 200, 0, 189, 248, 2, 0, 164, 248, ++ 202, 0, 157, 248, 9, 0, 132, 248, 213, 0, 23, 224, 10, 224, 164, 248, ++ 196, 0, 189, 248, 2, 0, 164, 248, 198, 0, 157, 248, 9, 0, 132, 248, ++ 212, 0, 11, 224, 180, 248, 196, 0, 173, 248, 0, 0, 180, 248, 198, 0, ++ 173, 248, 2, 0, 148, 248, 212, 0, 141, 248, 9, 0, 4, 152, 219, 248, ++ 0, 16, 0, 235, 64, 2, 1, 235, 130, 0, 0, 154, 2, 96, 1, 154, 66, 96, ++ 2, 154, 130, 96, 0, 45, 127, 244, 107, 175, 4, 152, 0, 235, 64, 0, 1, ++ 235, 128, 0, 128, 121, 132, 248, 214, 0, 97, 231, 3, 1, 188, 2, 50, ++ 72, 13, 0, 45, 233, 240, 79, 5, 70, 144, 248, 210, 0, 139, 176, 138, ++ 70, 144, 70, 155, 70, 30, 48, 4, 169, 95, 247, 228, 248, 0, 40, 120, ++ 208, 138, 247, 220, 249, 4, 152, 0, 235, 64, 1, 160, 72, 0, 104, 0, ++ 235, 129, 1, 8, 104, 0, 144, 72, 104, 1, 144, 136, 104, 2, 144, 12, ++ 104, 6, 148, 72, 104, 7, 144, 136, 104, 8, 144, 0, 32, 8, 96, 76, 252, ++ 255, 74, 126, 33, 0, 72, 96, 136, 96, 5, 169, 104, 70, 95, 247, 94, ++ 254, 181, 248, 78, 32, 181, 248, 76, 16, 104, 70, 96, 247, 127, 249, ++ 2, 37, 79, 240, 0, 9, 32, 12, 79, 70, 9, 144, 186, 248, 2, 0, 9, 153, ++ 64, 4, 0, 12, 173, 248, 2, 0, 129, 66, 5, 209, 5, 152, 133, 66, 2, 210, ++ 79, 240, 0, 9, 64, 224, 0, 38, 184, 241, 0, 15, 1, 208, 0, 36, 30, 224, ++ 3, 169, 104, 70, 95, 247, 81, 250, 1, 40, 26, 209, 3, 152, 168, 66, ++ 23, 209, 79, 240, 1, 9, 41, 224, 11, 235, 132, 0, 189, 248, 2, 16, 0, ++ 104, 176, 251, 241, 242, 1, 251, 18, 0, 173, 248, 0, 0, 3, 169, 104, ++ 70, 95, 247, 33, 254, 3, 152, 168, 66, 234, 208, 100, 28, 68, 69, 234, ++ 211, 189, 248, 2, 0, 128, 30, 128, 178, 173, 248, 2, 0, 186, 248, 0, ++ 16, 176, 235, 65, 15, 2, 211, 118, 28, 12, 46, 203, 211, 127, 28, 109, ++ 30, 3, 47, 183, 211, 185, 241, 0, 15, 4, 208, 20, 152, 3, 153, 1, 96, ++ 3, 224, 16, 224, 20, 153, 0, 32, 8, 96, 4, 152, 0, 235, 64, 1, 98, 72, ++ 0, 104, 0, 235, 129, 0, 6, 153, 1, 96, 7, 153, 65, 96, 8, 153, 129, ++ 96, 72, 70, 11, 176, 198, 230, 3, 1, 214, 3, 106, 73, 13, 0, 112, 181, ++ 134, 176, 4, 70, 138, 76, 252, 255, 69, 127, 33, 0, 247, 76, 249, 0, ++ 37, 32, 104, 3, 169, 95, 247, 75, 248, 32, 177, 224, 105, 0, 4, 6, 213, ++ 1, 37, 4, 224, 3, 168, 95, 247, 46, 248, 0, 40, 122, 208, 84, 72, 0, ++ 120, 24, 177, 224, 105, 0, 4, 0, 213, 1, 37, 4, 32, 141, 248, 10, 0, ++ 1, 32, 141, 248, 11, 0, 32, 104, 141, 248, 7, 0, 32, 104, 111, 247, ++ 145, 249, 141, 248, 8, 0, 180, 248, 176, 0, 173, 248, 0, 0, 180, 248, ++ 178, 0, 173, 248, 2, 0, 148, 248, 180, 0, 141, 248, 9, 0, 33, 70, 104, ++ 70, 94, 247, 155, 253, 189, 248, 0, 16, 66, 78, 200, 7, 5, 209, 189, ++ 248, 2, 0, 128, 177, 128, 30, 129, 66, 8, 221, 79, 240, 0, 0, 0, 45, ++ 70, 209, 173, 248, 0, 0, 189, 248, 2, 0, 32, 177, 13, 185, 240, 120, ++ 232, 179, 1, 37, 128, 224, 55, 72, 0, 120, 40, 185, 180, 248, 170, 0, ++ 180, 248, 168, 80, 168, 66, 4, 209, 180, 248, 168, 0, 173, 248, 2, 0, ++ 44, 224, 48, 120, 56, 177, 224, 105, 0, 4, 4, 212, 173, 248, 2, 80, ++ 164, 248, 178, 80, 39, 224, 180, 248, 188, 0, 16, 177, 133, 66, 0, 217, ++ 5, 70, 112, 120, 136, 177, 224, 105, 0, 4, 14, 213, 240, 136, 133, 66, ++ 11, 217, 94, 247, 223, 253, 64, 66, 0, 235, 128, 0, 180, 248, 170, 16, ++ 5, 235, 76, 252, 255, 64, 128, 33, 0, 64, 0, 129, 66, 0, 210, 5, 70, ++ 180, 248, 170, 16, 1, 35, 42, 70, 104, 70, 95, 247, 155, 249, 189, 248, ++ 2, 0, 1, 224, 2, 224, 85, 224, 164, 248, 178, 0, 4, 169, 104, 70, 95, ++ 247, 112, 249, 5, 0, 77, 208, 176, 120, 2, 45, 3, 208, 208, 177, 1, ++ 45, 37, 208, 51, 224, 104, 177, 225, 105, 9, 4, 10, 212, 180, 248, 172, ++ 16, 129, 66, 6, 210, 180, 248, 178, 16, 242, 136, 145, 66, 1, 217, 164, ++ 248, 172, 0, 189, 248, 0, 0, 164, 248, 176, 0, 157, 248, 9, 0, 132, ++ 248, 180, 0, 27, 224, 26, 224, 80, 49, 32, 0, 7, 0, 2, 0, 0, 160, 50, ++ 0, 71, 49, 32, 0, 232, 11, 33, 0, 73, 49, 32, 0, 225, 105, 9, 4, 11, ++ 212, 180, 248, 172, 16, 129, 66, 7, 210, 180, 248, 178, 16, 242, 136, ++ 145, 66, 2, 217, 164, 248, 172, 0, 2, 37, 39, 73, 3, 152, 0, 34, 9, ++ 104, 0, 235, 64, 0, 1, 235, 128, 0, 0, 153, 1, 96, 1, 153, 65, 96, 2, ++ 153, 129, 96, 4, 33, 32, 70, 150, 247, 215, 248, 40, 70, 6, 176, 112, ++ 189, 3, 1, 30, 60, 75, 13, 0, 29, 74, 3, 70, 8, 70, 17, 121, 0, 41, ++ 5, 208, 129, 66, 3, 217, 210, 136, 154, 66, 0, 210, 8, 70, 112, 71, ++ 3, 1, 106, 86, 75, 13, 0, 16, 181, 4, 76, 252, 255, 59, 129, 33, 0, ++ 70, 16, 0, 1, 209, 180, 248, 170, 0, 21, 74, 18, 121, 0, 42, 33, 208, ++ 18, 74, 82, 121, 144, 66, 29, 211, 98, 107, 147, 7, 1, 213, 5, 35, 4, ++ 224, 210, 7, 1, 208, 3, 35, 0, 224, 1, 35, 180, 248, 102, 32, 20, 11, ++ 1, 208, 91, 29, 5, 224, 18, 244, 112, 111, 1, 208, 219, 28, 0, 224, ++ 91, 28, 131, 66, 0, 211, 131, 30, 138, 136, 154, 66, 0, 217, 19, 70, ++ 139, 128, 16, 189, 80, 49, 32, 0, 232, 11, 33, 0, 212, 29, 32, 0, 3, ++ 1, 148, 3, 188, 75, 13, 0, 45, 233, 248, 79, 0, 36, 38, 70, 79, 240, ++ 1, 9, 129, 247, 84, 254, 5, 70, 76, 247, 123, 253, 90, 79, 56, 104, ++ 0, 240, 224, 1, 89, 72, 2, 120, 2, 240, 31, 2, 17, 67, 57, 96, 57, 31, ++ 10, 104, 67, 120, 2, 240, 224, 2, 3, 240, 31, 3, 26, 67, 10, 96, 58, ++ 29, 19, 104, 144, 248, 2, 192, 3, 240, 224, 3, 12, 240, 31, 12, 67, ++ 234, 12, 3, 19, 96, 77, 74, 19, 104, 144, 248, 3, 192, 3, 240, 224, ++ 3, 12, 240, 31, 12, 67, 234, 12, 3, 19, 96, 223, 248, 28, 161, 10, 241, ++ 8, 10, 218, 248, 0, 192, 0, 121, 12, 240, 224, 12, 0, 240, 31, 0, 76, ++ 234, 0, 12, 202, 248, 0, 192, 56, 104, 223, 248, 244, 192, 0, 240, 31, ++ 0, 76, 252, 255, 54, 130, 33, 0, 12, 241, 84, 12, 12, 241, 4, 8, 3, ++ 40, 3, 211, 128, 30, 204, 248, 0, 0, 4, 224, 0, 35, 204, 248, 0, 48, ++ 24, 177, 64, 30, 200, 248, 0, 0, 1, 224, 200, 248, 0, 48, 237, 179, ++ 4, 45, 73, 208, 16, 104, 0, 240, 31, 0, 8, 48, 218, 248, 0, 32, 96, ++ 243, 4, 2, 202, 248, 0, 32, 45, 75, 64, 51, 26, 104, 0, 240, 16, 0, ++ 34, 240, 16, 2, 2, 67, 26, 96, 69, 179, 3, 45, 55, 208, 8, 104, 4, 45, ++ 0, 208, 128, 30, 56, 96, 48, 247, 208, 251, 0, 40, 62, 208, 106, 70, ++ 2, 33, 110, 32, 48, 247, 155, 251, 189, 248, 0, 0, 193, 178, 65, 234, ++ 16, 32, 1, 6, 1, 213, 79, 240, 255, 57, 0, 240, 127, 0, 0, 251, 9, 240, ++ 64, 178, 0, 40, 41, 208, 25, 74, 2, 235, 132, 1, 145, 249, 0, 48, 131, ++ 66, 26, 220, 1, 224, 12, 224, 15, 224, 145, 249, 1, 16, 129, 66, 19, ++ 221, 109, 177, 4, 45, 11, 208, 2, 235, 132, 0, 144, 249, 2, 96, 15, ++ 224, 16, 104, 0, 240, 31, 0, 181, 231, 8, 104, 64, 30, 200, 231, 2, ++ 235, 132, 0, 144, 249, 3, 96, 3, 224, 100, 28, 228, 178, 9, 44, 218, ++ 211, 56, 104, 48, 68, 192, 178, 56, 96, 189, 232, 248, 143, 0, 0, 16, ++ 4, 96, 0, 156, 7, 32, 0, 0, 7, 96, 76, 252, 255, 49, 131, 33, 0, 0, ++ 240, 11, 33, 0, 3, 1, 26, 76, 77, 13, 0, 52, 72, 1, 104, 52, 72, 1, ++ 96, 52, 73, 9, 104, 65, 96, 52, 73, 73, 104, 129, 96, 112, 71, 3, 1, ++ 26, 98, 77, 13, 0, 51, 72, 1, 104, 47, 72, 1, 96, 50, 73, 9, 104, 65, ++ 96, 46, 73, 9, 104, 129, 96, 112, 71, 3, 1, 132, 1, 120, 77, 13, 0, ++ 112, 181, 47, 72, 6, 38, 0, 37, 128, 104, 46, 76, 1, 124, 34, 41, 46, ++ 208, 8, 220, 1, 41, 16, 208, 6, 41, 25, 208, 16, 41, 37, 208, 33, 41, ++ 6, 209, 39, 224, 40, 41, 23, 208, 42, 41, 27, 208, 43, 41, 28, 208, ++ 37, 96, 189, 232, 112, 64, 215, 231, 144, 248, 169, 0, 28, 224, 255, ++ 247, 200, 255, 38, 96, 112, 189, 255, 247, 207, 255, 37, 96, 112, 189, ++ 144, 248, 57, 0, 3, 40, 247, 209, 242, 231, 64, 143, 67, 242, 6, 49, ++ 8, 66, 241, 208, 236, 231, 144, 248, 96, 0, 6, 224, 64, 106, 228, 231, ++ 144, 248, 101, 0, 1, 224, 144, 248, 89, 0, 1, 40, 228, 209, 223, 231, ++ 3, 1, 22, 248, 77, 13, 0, 16, 181, 133, 247, 113, 249, 81, 247, 175, ++ 248, 189, 232, 16, 64, 71, 247, 171, 186, 3, 1, 62, 10, 78, 13, 0, 16, ++ 181, 12, 76, 32, 120, 16, 177, 1, 32, 71, 247, 77, 252, 0, 32, 32, 112, ++ 16, 189, 76, 252, 255, 44, 132, 33, 0, 0, 0, 12, 8, 32, 0, 104, 1, 96, ++ 0, 20, 8, 32, 0, 20, 12, 33, 0, 8, 8, 32, 0, 16, 8, 32, 0, 0, 63, 32, ++ 0, 100, 8, 100, 0, 16, 97, 13, 0, 3, 1, 22, 68, 78, 13, 0, 16, 181, ++ 200, 74, 200, 73, 201, 72, 80, 247, 110, 255, 200, 73, 8, 112, 16, 189, ++ 3, 1, 22, 86, 78, 13, 0, 197, 73, 199, 72, 220, 57, 200, 96, 199, 73, ++ 0, 245, 152, 96, 8, 96, 112, 71, 3, 1, 44, 104, 78, 13, 0, 197, 74, ++ 198, 75, 1, 40, 3, 208, 2, 40, 9, 209, 24, 136, 6, 224, 16, 104, 24, ++ 128, 72, 120, 1, 40, 3, 208, 67, 246, 2, 16, 16, 96, 112, 71, 67, 246, ++ 14, 16, 250, 231, 3, 1, 72, 144, 78, 13, 0, 16, 181, 187, 74, 188, 76, ++ 8, 50, 64, 246, 162, 99, 1, 40, 3, 208, 2, 40, 18, 209, 32, 136, 15, ++ 224, 16, 104, 128, 178, 32, 128, 73, 120, 1, 41, 11, 208, 173, 73, 220, ++ 57, 201, 136, 193, 245, 128, 81, 137, 178, 97, 243, 31, 16, 64, 240, ++ 8, 0, 16, 96, 16, 189, 16, 104, 99, 243, 31, 16, 247, 231, 3, 1, 112, ++ 212, 78, 13, 0, 112, 181, 164, 74, 164, 75, 169, 76, 18, 120, 220, 59, ++ 2, 235, 130, 2, 3, 235, 194, 2, 168, 77, 82, 125, 148, 60, 168, 78, ++ 79, 244, 192, 3, 1, 40, 76, 252, 255, 39, 133, 33, 0, 9, 208, 2, 40, ++ 6, 209, 72, 120, 1, 40, 26, 208, 48, 136, 32, 96, 1, 32, 88, 96, 112, ++ 189, 32, 104, 128, 178, 48, 128, 211, 248, 4, 97, 46, 96, 73, 120, 1, ++ 41, 9, 208, 72, 242, 255, 1, 8, 64, 2, 240, 127, 1, 64, 234, 1, 32, ++ 32, 96, 0, 32, 88, 96, 195, 248, 4, 33, 112, 189, 40, 104, 195, 248, ++ 4, 1, 112, 189, 3, 1, 60, 64, 79, 13, 0, 16, 181, 148, 73, 148, 75, ++ 149, 74, 149, 76, 1, 40, 6, 208, 2, 40, 3, 209, 24, 104, 8, 96, 32, ++ 104, 16, 96, 16, 189, 8, 104, 24, 96, 16, 104, 32, 96, 8, 104, 32, 240, ++ 63, 0, 64, 240, 72, 0, 8, 96, 16, 104, 32, 240, 2, 0, 239, 231, 3, 1, ++ 36, 120, 79, 13, 0, 138, 74, 79, 244, 192, 1, 1, 40, 4, 208, 2, 40, ++ 1, 209, 16, 104, 136, 97, 112, 71, 136, 105, 16, 96, 136, 105, 32, 240, ++ 2, 0, 247, 231, 3, 1, 70, 152, 79, 13, 0, 79, 244, 192, 2, 1, 40, 6, ++ 208, 2, 40, 20, 209, 210, 248, 252, 2, 32, 240, 12, 0, 13, 224, 72, ++ 120, 1, 40, 13, 208, 0, 40, 10, 209, 136, 120, 1, 40, 8, 208, 210, 248, ++ 252, 2, 32, 240, 12, 0, 64, 240, 8, 0, 194, 248, 252, 2, 112, 71, 210, ++ 248, 252, 2, 64, 240, 12, 0, 247, 231, 3, 1, 76, 252, 255, 34, 134, ++ 33, 0, 48, 218, 79, 13, 0, 105, 74, 114, 75, 24, 50, 1, 40, 3, 208, ++ 2, 40, 10, 209, 24, 104, 7, 224, 16, 104, 24, 96, 72, 120, 1, 40, 16, ++ 104, 3, 208, 64, 244, 128, 64, 16, 96, 112, 71, 32, 244, 128, 64, 250, ++ 231, 3, 1, 48, 6, 80, 13, 0, 105, 75, 105, 74, 1, 40, 3, 208, 2, 40, ++ 10, 209, 24, 104, 7, 224, 16, 104, 24, 96, 72, 120, 1, 40, 16, 104, ++ 3, 208, 64, 244, 128, 96, 16, 96, 112, 71, 79, 246, 255, 49, 8, 64, ++ 249, 231, 3, 1, 36, 50, 80, 13, 0, 90, 73, 95, 74, 28, 57, 1, 40, 4, ++ 208, 2, 40, 1, 209, 16, 104, 8, 96, 112, 71, 8, 104, 16, 96, 8, 104, ++ 0, 240, 3, 0, 247, 231, 3, 1, 152, 1, 82, 80, 13, 0, 45, 233, 240, 65, ++ 88, 79, 85, 78, 1, 40, 24, 208, 2, 40, 20, 209, 48, 104, 57, 104, 32, ++ 244, 0, 112, 33, 244, 0, 81, 64, 244, 128, 116, 65, 244, 128, 69, 52, ++ 96, 61, 96, 50, 32, 111, 247, 187, 255, 36, 244, 128, 112, 37, 244, ++ 128, 65, 48, 96, 57, 96, 189, 232, 240, 129, 72, 120, 1, 40, 22, 208, ++ 48, 104, 57, 104, 32, 244, 0, 112, 64, 244, 128, 112, 33, 244, 0, 81, ++ 65, 244, 128, 65, 48, 96, 57, 96, 64, 244, 0, 112, 65, 244, 0, 81, 48, ++ 96, 57, 96, 76, 252, 255, 29, 135, 33, 0, 189, 232, 240, 65, 200, 32, ++ 111, 247, 153, 191, 79, 244, 128, 64, 56, 96, 48, 104, 79, 246, 255, ++ 65, 8, 64, 48, 96, 79, 244, 192, 64, 56, 96, 48, 104, 128, 178, 64, ++ 244, 64, 112, 48, 96, 210, 231, 3, 1, 92, 230, 80, 13, 0, 48, 181, 37, ++ 74, 37, 75, 51, 77, 52, 76, 124, 58, 96, 51, 1, 40, 9, 208, 2, 40, 6, ++ 209, 72, 120, 1, 40, 3, 209, 40, 104, 16, 96, 32, 104, 24, 96, 48, 189, ++ 16, 104, 40, 96, 24, 104, 32, 96, 72, 120, 1, 40, 247, 209, 19, 72, ++ 19, 76, 201, 120, 0, 120, 220, 60, 0, 235, 128, 0, 4, 235, 192, 0, 41, ++ 177, 1, 41, 3, 208, 128, 140, 16, 96, 0, 32, 230, 231, 192, 138, 250, ++ 231, 3, 1, 142, 1, 62, 81, 13, 0, 30, 74, 32, 75, 116, 58, 1, 40, 3, ++ 208, 2, 40, 9, 209, 24, 136, 6, 224, 16, 104, 24, 128, 72, 120, 1, 40, ++ 3, 208, 79, 244, 0, 96, 16, 96, 112, 71, 37, 32, 251, 231, 0, 0, 160, ++ 30, 32, 0, 44, 17, 32, 0, 196, 99, 13, 0, 180, 43, 32, 0, 20, 97, 13, ++ 0, 188, 43, 32, 0, 172, 6, 65, 0, 40, 16, 32, 0, 38, 16, 32, 0, 44, ++ 16, 32, 0, 36, 16, 32, 0, 220, 4, 96, 0, 68, 16, 32, 0, 100, 6, 96, ++ 0, 72, 16, 32, 0, 48, 16, 76, 252, 255, 24, 136, 33, 0, 32, 0, 52, 16, ++ 32, 0, 56, 16, 32, 0, 232, 7, 65, 0, 76, 16, 32, 0, 252, 4, 65, 0, 60, ++ 16, 32, 0, 64, 16, 32, 0, 42, 16, 32, 0, 3, 1, 184, 1, 200, 81, 13, ++ 0, 2, 70, 48, 180, 0, 32, 17, 42, 82, 210, 223, 232, 2, 240, 9, 74, ++ 71, 62, 59, 41, 12, 69, 15, 69, 71, 59, 74, 74, 41, 41, 78, 0, 48, 188, ++ 88, 247, 118, 184, 48, 188, 87, 247, 169, 191, 59, 74, 19, 104, 111, ++ 243, 15, 3, 66, 248, 144, 57, 57, 76, 58, 75, 5, 41, 15, 210, 223, 232, ++ 1, 240, 16, 3, 16, 22, 16, 0, 2, 241, 124, 2, 81, 105, 72, 246, 136, ++ 3, 65, 234, 3, 1, 81, 97, 79, 240, 187, 49, 17, 96, 48, 188, 112, 71, ++ 25, 104, 9, 177, 209, 103, 249, 231, 97, 104, 251, 231, 82, 248, 124, ++ 31, 25, 96, 161, 104, 17, 96, 81, 105, 99, 136, 25, 67, 81, 97, 237, ++ 231, 48, 188, 87, 247, 140, 191, 17, 177, 48, 188, 87, 247, 188, 191, ++ 48, 188, 87, 247, 217, 191, 2, 32, 225, 231, 48, 188, 87, 247, 141, ++ 191, 48, 188, 8, 70, 87, 247, 240, 191, 48, 188, 87, 247, 159, 191, ++ 1, 32, 213, 231, 3, 1, 124, 124, 82, 13, 0, 28, 73, 69, 32, 8, 96, 25, ++ 72, 1, 120, 79, 244, 72, 16, 169, 177, 0, 241, 144, 0, 208, 248, 76, ++ 252, 255, 19, 137, 33, 0, 164, 16, 33, 244, 124, 81, 65, 244, 248, 81, ++ 192, 248, 164, 16, 1, 104, 33, 244, 112, 33, 65, 244, 0, 33, 1, 96, ++ 65, 109, 33, 240, 1, 1, 65, 101, 160, 241, 144, 0, 0, 241, 144, 0, 208, ++ 248, 164, 16, 33, 240, 63, 1, 65, 240, 31, 1, 192, 248, 164, 16, 1, ++ 104, 33, 240, 112, 97, 65, 240, 0, 97, 1, 96, 65, 109, 33, 244, 128, ++ 49, 65, 101, 112, 71, 0, 0, 144, 0, 50, 0, 28, 12, 33, 0, 244, 101, ++ 13, 0, 0, 132, 49, 0, 3, 1, 168, 2, 244, 82, 13, 0, 45, 233, 240, 65, ++ 3, 0, 2, 208, 60, 76, 6, 34, 2, 224, 59, 76, 40, 60, 20, 34, 148, 249, ++ 0, 0, 0, 37, 136, 66, 29, 221, 43, 185, 148, 249, 10, 0, 136, 66, 1, ++ 219, 5, 37, 22, 224, 4, 235, 66, 0, 16, 249, 2, 12, 136, 66, 2, 219, ++ 82, 30, 213, 178, 13, 224, 1, 32, 9, 224, 4, 235, 64, 6, 150, 249, 0, ++ 96, 142, 66, 1, 220, 5, 70, 3, 224, 64, 28, 192, 178, 144, 66, 243, ++ 211, 4, 235, 69, 0, 144, 249, 0, 112, 27, 177, 38, 73, 64, 120, 8, 96, ++ 60, 224, 37, 73, 38, 78, 137, 121, 143, 66, 1, 221, 1, 32, 0, 224, 0, ++ 32, 112, 112, 129, 247, 127, 250, 48, 112, 8, 32, 240, 112, 223, 248, ++ 112, 192, 176, 112, 0, 32, 12, 76, 252, 255, 14, 138, 33, 0, 241, 12, ++ 12, 5, 235, 64, 1, 4, 235, 65, 3, 6, 235, 64, 1, 26, 120, 10, 117, 10, ++ 113, 72, 117, 72, 113, 92, 248, 32, 32, 89, 120, 17, 96, 1, 40, 4, 208, ++ 2, 40, 9, 208, 3, 40, 14, 209, 21, 224, 220, 248, 4, 16, 9, 104, 17, ++ 74, 17, 96, 17, 74, 5, 224, 220, 248, 8, 16, 9, 104, 15, 74, 17, 96, ++ 15, 74, 17, 96, 64, 28, 177, 120, 192, 178, 129, 66, 214, 216, 56, 70, ++ 189, 232, 240, 129, 220, 248, 12, 16, 9, 104, 10, 74, 17, 96, 10, 74, ++ 239, 231, 0, 0, 32, 102, 13, 0, 156, 1, 96, 0, 75, 30, 32, 0, 148, 23, ++ 32, 0, 12, 8, 32, 0, 8, 8, 32, 0, 20, 8, 32, 0, 16, 8, 32, 0, 24, 12, ++ 33, 0, 20, 12, 33, 0, 3, 1, 48, 24, 84, 13, 0, 112, 181, 193, 23, 0, ++ 235, 209, 97, 76, 17, 33, 240, 31, 1, 69, 26, 112, 247, 23, 248, 79, ++ 240, 224, 34, 1, 33, 2, 235, 132, 2, 169, 64, 194, 248, 128, 17, 189, ++ 232, 112, 64, 112, 247, 15, 184, 3, 1, 94, 68, 84, 13, 0, 100, 75, 48, ++ 181, 24, 68, 131, 7, 10, 213, 80, 248, 2, 60, 137, 30, 27, 12, 128, ++ 28, 19, 112, 27, 10, 83, 112, 137, 178, 2, 241, 2, 2, 79, 234, 145, ++ 4, 13, 224, 80, 248, 4, 59, 19, 112, 79, 234, 76, 252, 255, 9, 139, ++ 33, 0, 19, 37, 85, 112, 79, 234, 19, 69, 149, 112, 79, 234, 19, 99, ++ 211, 112, 2, 241, 4, 2, 35, 0, 164, 241, 1, 4, 164, 178, 236, 209, 137, ++ 7, 3, 213, 0, 104, 16, 112, 0, 10, 80, 112, 48, 189, 3, 1, 126, 158, ++ 84, 13, 0, 14, 181, 78, 72, 0, 120, 1, 40, 54, 209, 77, 72, 0, 104, ++ 77, 73, 0, 240, 4, 0, 9, 120, 8, 67, 46, 209, 47, 247, 204, 255, 0, ++ 40, 42, 208, 106, 70, 10, 33, 0, 32, 255, 247, 189, 255, 157, 248, 0, ++ 0, 80, 40, 33, 209, 157, 248, 1, 0, 79, 40, 29, 209, 157, 248, 2, 0, ++ 0, 40, 25, 208, 157, 248, 3, 0, 0, 40, 21, 208, 157, 248, 4, 0, 120, ++ 185, 157, 248, 5, 0, 96, 185, 157, 248, 6, 0, 72, 185, 157, 248, 7, ++ 0, 48, 185, 157, 248, 8, 0, 24, 185, 157, 248, 9, 0, 0, 40, 2, 208, ++ 1, 168, 109, 247, 139, 255, 14, 189, 3, 1, 88, 24, 85, 13, 0, 16, 181, ++ 4, 40, 36, 209, 51, 73, 49, 72, 8, 96, 51, 73, 50, 72, 8, 96, 52, 73, ++ 50, 72, 8, 96, 15, 32, 255, 247, 113, 255, 51, 73, 49, 72, 8, 96, 50, ++ 73, 79, 240, 255, 48, 136, 96, 50, 73, 49, 72, 72, 96, 255, 247, 168, ++ 255, 251, 247, 113, 254, 48, 73, 8, 96, 33, 72, 64, 120, 40, 177, 46, ++ 73, 1, 76, 252, 255, 4, 140, 33, 0, 32, 136, 96, 21, 32, 166, 247, 247, ++ 255, 0, 32, 16, 189, 3, 1, 12, 108, 85, 13, 0, 4, 33, 8, 32, 87, 247, ++ 8, 191, 3, 1, 12, 116, 85, 13, 0, 3, 33, 8, 32, 87, 247, 4, 191, 3, ++ 1, 208, 1, 124, 85, 13, 0, 16, 181, 175, 242, 103, 0, 38, 73, 8, 96, ++ 255, 247, 102, 252, 37, 73, 29, 32, 72, 112, 175, 242, 31, 1, 35, 72, ++ 65, 96, 175, 242, 47, 1, 129, 96, 70, 247, 3, 250, 34, 73, 32, 72, 80, ++ 34, 8, 96, 34, 73, 32, 72, 48, 35, 8, 96, 34, 72, 32, 73, 193, 103, ++ 33, 73, 129, 103, 33, 72, 12, 33, 65, 128, 2, 113, 5, 33, 65, 113, 195, ++ 128, 2, 114, 65, 114, 37, 33, 1, 115, 3, 33, 65, 115, 16, 189, 126, ++ 17, 101, 0, 40, 12, 33, 0, 128, 1, 50, 0, 78, 5, 32, 0, 197, 87, 13, ++ 0, 136, 35, 32, 0, 77, 88, 13, 0, 196, 35, 32, 0, 81, 88, 13, 0, 252, ++ 37, 32, 0, 81, 86, 13, 0, 84, 50, 32, 0, 16, 130, 32, 0, 121, 54, 13, ++ 0, 228, 92, 32, 0, 136, 50, 32, 0, 0, 144, 50, 0, 180, 57, 32, 0, 179, ++ 50, 32, 0, 188, 120, 13, 0, 101, 65, 13, 0, 188, 48, 32, 0, 163, 63, ++ 13, 0, 192, 48, 32, 0, 69, 66, 13, 0, 24, 82, 32, 0, 177, 65, 13, 0, ++ 76, 252, 255, 255, 140, 33, 0, 156, 24, 32, 0, 3, 1, 12, 72, 86, 13, ++ 0, 91, 73, 0, 123, 8, 112, 112, 71, 3, 1, 248, 2, 80, 86, 13, 0, 240, ++ 180, 0, 36, 89, 78, 12, 96, 166, 241, 128, 4, 5, 43, 113, 208, 6, 220, ++ 1, 43, 11, 208, 2, 43, 108, 208, 3, 43, 106, 209, 19, 224, 6, 43, 103, ++ 208, 8, 43, 28, 208, 63, 43, 99, 209, 63, 224, 9, 42, 2, 208, 15, 42, ++ 94, 209, 3, 224, 52, 104, 12, 96, 116, 104, 137, 224, 180, 104, 12, ++ 96, 244, 104, 133, 224, 3, 42, 2, 208, 63, 42, 81, 209, 3, 224, 37, ++ 104, 13, 96, 100, 104, 124, 224, 165, 108, 13, 96, 228, 108, 120, 224, ++ 18, 42, 23, 208, 6, 220, 13, 42, 24, 208, 14, 42, 26, 208, 16, 42, 115, ++ 209, 11, 224, 23, 42, 5, 208, 28, 42, 110, 209, 165, 106, 13, 96, 228, ++ 106, 102, 224, 165, 107, 13, 96, 228, 107, 98, 224, 165, 110, 13, 96, ++ 228, 110, 94, 224, 37, 111, 13, 96, 100, 111, 90, 224, 52, 105, 12, ++ 96, 116, 105, 86, 224, 180, 105, 12, 96, 244, 105, 82, 224, 64, 242, ++ 63, 23, 162, 242, 63, 21, 186, 66, 65, 208, 14, 220, 36, 42, 34, 208, ++ 6, 220, 20, 42, 39, 208, 25, 42, 21, 208, 26, 42, 70, 209, 22, 224, ++ 37, 42, 28, 208, 133, 42, 65, 209, 33, 224, 20, 45, 35, 208, 4, 220, ++ 76, 252, 255, 250, 141, 33, 0, 1, 45, 48, 208, 2, 45, 57, 209, 45, 224, ++ 24, 45, 31, 208, 138, 45, 52, 209, 44, 224, 50, 224, 165, 104, 13, 96, ++ 228, 104, 42, 224, 37, 105, 13, 96, 100, 105, 38, 224, 165, 105, 13, ++ 96, 228, 105, 34, 224, 37, 106, 13, 96, 100, 106, 30, 224, 37, 107, ++ 13, 96, 100, 107, 26, 224, 37, 108, 13, 96, 100, 108, 22, 224, 165, ++ 109, 13, 96, 228, 109, 18, 224, 16, 77, 45, 120, 1, 45, 18, 209, 37, ++ 109, 13, 96, 100, 109, 10, 224, 165, 111, 13, 96, 228, 111, 6, 224, ++ 37, 110, 13, 96, 100, 110, 2, 224, 52, 106, 12, 96, 116, 106, 76, 96, ++ 12, 104, 0, 44, 2, 209, 240, 188, 70, 247, 57, 188, 240, 188, 112, 71, ++ 0, 0, 44, 12, 33, 0, 204, 102, 13, 0, 217, 11, 33, 0, 3, 1, 140, 1, ++ 196, 87, 13, 0, 112, 181, 4, 70, 1, 41, 2, 208, 2, 41, 47, 208, 48, ++ 224, 164, 245, 224, 64, 10, 56, 33, 209, 23, 72, 129, 247, 167, 249, ++ 4, 70, 22, 77, 22, 78, 14, 224, 20, 73, 19, 72, 129, 247, 234, 248, ++ 41, 136, 11, 41, 2, 209, 40, 121, 2, 40, 8, 208, 6, 235, 129, 0, 1, ++ 104, 14, 72, 136, 71, 100, 30, 238, 210, 0, 36, 18, 224, 11, 72, 157, ++ 247, 70, 250, 11, 73, 16, 32, 251, 247, 132, 250, 243, 231, 164, 245, ++ 224, 64, 6, 76, 252, 255, 245, 142, 33, 0, 56, 6, 208, 14, 56, 4, 209, ++ 7, 73, 8, 112, 236, 231, 137, 247, 188, 250, 32, 70, 112, 189, 12, 96, ++ 32, 0, 164, 35, 32, 0, 60, 146, 8, 0, 92, 239, 32, 0, 76, 94, 13, 0, ++ 3, 1, 8, 76, 88, 13, 0, 0, 32, 112, 71, 3, 1, 28, 80, 88, 13, 0, 8, ++ 123, 66, 8, 0, 32, 127, 42, 3, 208, 7, 42, 1, 209, 1, 74, 138, 96, 112, ++ 71, 29, 52, 13, 0, 3, 1, 80, 104, 88, 13, 0, 240, 181, 17, 73, 15, 72, ++ 15, 78, 72, 97, 0, 32, 54, 29, 1, 39, 86, 248, 48, 48, 90, 9, 3, 240, ++ 31, 5, 81, 248, 34, 64, 7, 250, 5, 243, 28, 67, 65, 248, 34, 64, 6, ++ 235, 192, 2, 75, 105, 82, 104, 3, 235, 64, 3, 66, 240, 1, 2, 194, 245, ++ 88, 34, 26, 128, 64, 28, 230, 208, 240, 189, 244, 102, 13, 0, 108, 159, ++ 32, 0, 3, 1, 128, 1, 180, 88, 13, 0, 45, 233, 240, 65, 26, 72, 0, 104, ++ 192, 7, 46, 208, 25, 72, 1, 104, 65, 240, 1, 1, 1, 96, 23, 79, 124, ++ 63, 56, 104, 64, 240, 128, 0, 56, 96, 21, 78, 1, 32, 48, 96, 69, 247, ++ 78, 251, 61, 104, 37, 240, 128, 0, 56, 96, 15, 72, 116, 56, 1, 104, ++ 65, 240, 32, 1, 1, 96, 1, 104, 33, 240, 32, 1, 1, 96, 0, 36, 4, 224, ++ 48, 76, 252, 255, 240, 143, 33, 0, 32, 69, 247, 167, 250, 4, 241, 1, ++ 4, 48, 104, 128, 7, 1, 212, 50, 44, 245, 211, 69, 240, 128, 0, 56, 96, ++ 0, 32, 48, 96, 189, 232, 240, 129, 0, 0, 96, 24, 32, 0, 124, 8, 100, ++ 0, 180, 4, 50, 0, 3, 1, 136, 1, 48, 89, 13, 0, 48, 181, 27, 76, 36, ++ 120, 1, 44, 7, 209, 176, 245, 225, 63, 7, 208, 24, 76, 37, 104, 69, ++ 240, 1, 5, 37, 96, 23, 76, 160, 66, 1, 216, 22, 76, 0, 224, 22, 76, ++ 180, 251, 240, 240, 16, 40, 12, 219, 196, 23, 0, 235, 20, 116, 37, 17, ++ 36, 240, 15, 4, 4, 27, 24, 104, 32, 240, 8, 0, 64, 240, 128, 0, 6, 224, ++ 5, 70, 24, 104, 0, 36, 32, 240, 128, 0, 64, 240, 8, 0, 24, 96, 197, ++ 245, 128, 112, 16, 96, 4, 235, 212, 112, 64, 16, 34, 26, 66, 234, 0, ++ 16, 8, 96, 48, 189, 0, 0, 42, 12, 33, 0, 28, 4, 54, 0, 96, 227, 22, ++ 0, 0, 54, 110, 1, 0, 108, 220, 2, 3, 1, 50, 180, 89, 13, 0, 112, 181, ++ 4, 70, 0, 37, 111, 247, 78, 253, 6, 70, 32, 70, 111, 247, 34, 254, 4, ++ 0, 6, 208, 1, 33, 111, 247, 5, 254, 5, 70, 32, 70, 111, 247, 251, 253, ++ 48, 70, 111, 247, 66, 253, 40, 70, 112, 189, 3, 1, 62, 226, 89, 13, ++ 0, 112, 181, 4, 70, 76, 252, 255, 235, 144, 33, 0, 0, 37, 111, 247, ++ 55, 253, 6, 70, 32, 70, 111, 247, 11, 254, 4, 0, 7, 208, 0, 33, 111, ++ 247, 238, 253, 5, 70, 32, 70, 111, 247, 228, 253, 4, 224, 203, 33, 79, ++ 244, 0, 112, 111, 247, 204, 248, 48, 70, 111, 247, 37, 253, 40, 70, ++ 112, 189, 3, 1, 62, 28, 90, 13, 0, 112, 181, 5, 0, 22, 72, 4, 104, 22, ++ 208, 12, 224, 41, 70, 32, 70, 111, 247, 178, 254, 48, 177, 68, 177, ++ 41, 70, 32, 70, 189, 232, 112, 64, 111, 247, 135, 190, 36, 104, 0, 44, ++ 240, 209, 189, 232, 112, 64, 254, 33, 79, 244, 0, 112, 111, 247, 171, ++ 184, 112, 189, 3, 1, 50, 86, 90, 13, 0, 112, 181, 9, 77, 1, 70, 1, 36, ++ 40, 120, 80, 177, 8, 70, 111, 247, 209, 253, 40, 177, 1, 124, 64, 124, ++ 42, 120, 80, 67, 129, 66, 0, 210, 0, 36, 32, 70, 112, 189, 132, 5, 32, ++ 0, 43, 12, 33, 0, 3, 1, 40, 132, 90, 13, 0, 6, 73, 0, 32, 9, 104, 201, ++ 6, 6, 213, 5, 72, 1, 104, 33, 244, 112, 49, 1, 96, 79, 244, 112, 32, ++ 112, 71, 0, 0, 0, 103, 13, 0, 88, 30, 32, 0, 3, 1, 60, 168, 90, 13, ++ 0, 112, 181, 5, 70, 12, 70, 128, 106, 8, 33, 1, 235, 128, 0, 111, 247, ++ 193, 253, 0, 40, 15, 208, 170, 106, 0, 241, 8, 1, 2, 76, 252, 255, 230, ++ 145, 33, 0, 42, 3, 209, 84, 248, 4, 43, 65, 248, 4, 43, 34, 104, 10, ++ 96, 1, 70, 40, 70, 125, 247, 119, 249, 1, 32, 112, 189, 3, 1, 112, 224, ++ 90, 13, 0, 112, 181, 22, 76, 160, 120, 0, 40, 38, 208, 111, 247, 161, ++ 250, 1, 70, 19, 72, 0, 104, 45, 247, 180, 249, 161, 120, 64, 246, 53, ++ 66, 81, 67, 192, 235, 129, 4, 111, 247, 169, 252, 14, 77, 6, 70, 40, ++ 120, 192, 6, 13, 213, 0, 44, 11, 220, 45, 247, 232, 249, 32, 185, 10, ++ 72, 1, 104, 33, 240, 32, 1, 1, 96, 40, 120, 32, 240, 16, 0, 40, 112, ++ 48, 70, 189, 232, 112, 64, 111, 247, 149, 188, 112, 189, 0, 0, 196, ++ 24, 32, 0, 4, 103, 13, 0, 22, 29, 32, 0, 32, 4, 54, 0, 3, 1, 88, 76, ++ 91, 13, 0, 208, 248, 216, 32, 4, 70, 0, 33, 144, 71, 66, 78, 223, 248, ++ 8, 129, 223, 248, 8, 145, 4, 241, 176, 10, 80, 70, 125, 247, 146, 249, ++ 5, 70, 112, 121, 136, 177, 176, 120, 120, 177, 111, 247, 113, 252, 152, ++ 248, 0, 16, 7, 70, 65, 240, 16, 1, 136, 248, 0, 16, 111, 247, 83, 250, ++ 201, 248, 0, 0, 56, 70, 111, 247, 103, 252, 212, 248, 216, 32, 41, 70, ++ 32, 70, 144, 71, 225, 231, 3, 1, 24, 160, 91, 13, 0, 47, 72, 16, 181, ++ 64, 121, 24, 177, 45, 247, 159, 76, 252, 255, 225, 146, 33, 0, 249, ++ 0, 40, 0, 208, 1, 32, 16, 189, 3, 1, 192, 1, 180, 91, 13, 0, 45, 233, ++ 240, 65, 223, 248, 176, 128, 14, 70, 152, 248, 0, 0, 224, 179, 230, ++ 179, 192, 7, 61, 208, 113, 104, 6, 241, 8, 0, 161, 245, 224, 66, 132, ++ 58, 15, 209, 69, 136, 4, 70, 5, 241, 9, 0, 111, 247, 44, 253, 7, 70, ++ 42, 70, 33, 29, 9, 48, 111, 247, 26, 254, 60, 70, 71, 242, 63, 0, 29, ++ 224, 161, 245, 224, 66, 65, 58, 34, 209, 5, 70, 253, 247, 22, 253, 7, ++ 0, 29, 208, 40, 120, 19, 40, 26, 208, 104, 120, 0, 29, 63, 247, 175, ++ 250, 105, 120, 160, 241, 8, 4, 137, 28, 65, 128, 32, 248, 4, 123, 106, ++ 120, 41, 70, 146, 28, 111, 247, 250, 253, 71, 242, 130, 0, 96, 96, 85, ++ 247, 13, 254, 33, 70, 1, 224, 12, 224, 1, 224, 45, 247, 140, 250, 152, ++ 248, 0, 0, 64, 7, 5, 213, 48, 70, 111, 247, 173, 253, 0, 32, 189, 232, ++ 240, 129, 1, 32, 251, 231, 0, 0, 196, 24, 32, 0, 22, 29, 32, 0, 4, 103, ++ 13, 0, 44, 12, 33, 0, 3, 1, 58, 112, 92, 13, 0, 29, 73, 48, 180, 10, ++ 104, 106, 177, 1, 70, 161, 251, 2, 5, 0, 35, 3, 251, 2, 82, 1, 251, ++ 3, 33, 24, 74, 25, 75, 18, 104, 27, 120, 90, 67, 4, 224, 64, 246, 235, ++ 76, 252, 255, 220, 147, 33, 0, 49, 160, 251, 1, 1, 100, 34, 48, 188, ++ 0, 35, 85, 247, 237, 187, 3, 1, 82, 166, 92, 13, 0, 240, 180, 15, 74, ++ 18, 104, 106, 177, 15, 75, 28, 104, 15, 75, 27, 120, 92, 67, 3, 70, ++ 164, 251, 3, 6, 0, 37, 5, 251, 3, 99, 4, 251, 1, 49, 10, 224, 100, 34, ++ 3, 70, 163, 251, 2, 5, 1, 251, 2, 81, 0, 36, 3, 251, 4, 17, 64, 246, ++ 235, 50, 240, 188, 0, 35, 85, 247, 204, 187, 228, 24, 32, 0, 224, 24, ++ 32, 0, 217, 24, 32, 0, 3, 1, 80, 244, 92, 13, 0, 16, 181, 4, 70, 69, ++ 247, 188, 250, 12, 73, 2, 40, 8, 112, 34, 106, 17, 208, 79, 244, 128, ++ 113, 10, 67, 34, 98, 9, 73, 9, 74, 9, 104, 18, 120, 81, 67, 64, 246, ++ 235, 50, 81, 67, 100, 34, 177, 251, 242, 241, 5, 74, 17, 96, 16, 189, ++ 128, 33, 237, 231, 0, 0, 136, 25, 32, 0, 224, 24, 32, 0, 217, 24, 32, ++ 0, 228, 24, 32, 0, 16, 1, 15, 0, 36, 198, 2, 0, 164, 240, 254, 184, ++ 0, 0, 36, 8, 13, 0, 16, 1, 15, 1, 120, 204, 2, 0, 163, 240, 194, 186, ++ 0, 0, 0, 2, 13, 0, 16, 1, 15, 2, 40, 219, 3, 0, 146, 240, 116, 187, ++ 0, 0, 20, 2, 13, 0, 16, 1, 15, 3, 84, 220, 3, 0, 146, 240, 230, 186, ++ 0, 0, 76, 252, 255, 215, 148, 33, 0, 36, 2, 13, 0, 16, 1, 15, 4, 80, ++ 204, 3, 0, 147, 240, 240, 186, 0, 0, 52, 2, 13, 0, 16, 1, 15, 5, 220, ++ 210, 3, 0, 146, 240, 180, 191, 0, 0, 72, 2, 13, 0, 16, 1, 15, 6, 44, ++ 207, 3, 0, 147, 240, 148, 185, 0, 0, 88, 2, 13, 0, 16, 1, 15, 7, 36, ++ 182, 3, 0, 148, 240, 36, 190, 0, 0, 112, 2, 13, 0, 16, 1, 15, 8, 112, ++ 27, 8, 0, 78, 240, 132, 187, 0, 0, 124, 2, 13, 0, 16, 1, 15, 9, 84, ++ 133, 1, 0, 184, 240, 138, 186, 0, 0, 108, 10, 13, 0, 16, 1, 15, 10, ++ 188, 146, 7, 0, 86, 240, 236, 191, 0, 0, 152, 2, 13, 0, 16, 1, 15, 11, ++ 4, 137, 7, 0, 87, 240, 205, 188, 0, 0, 162, 2, 13, 0, 16, 1, 15, 12, ++ 188, 132, 7, 0, 87, 240, 247, 190, 0, 0, 174, 2, 13, 0, 16, 1, 15, 13, ++ 192, 55, 8, 0, 112, 189, 0, 0, 0, 0, 0, 0, 0, 0, 16, 1, 15, 14, 176, ++ 55, 8, 0, 3, 41, 248, 210, 0, 0, 0, 0, 0, 0, 16, 1, 15, 15, 104, 60, ++ 7, 0, 92, 240, 110, 191, 0, 0, 72, 11, 13, 0, 16, 1, 15, 16, 148, 41, ++ 7, 0, 94, 240, 161, 185, 0, 0, 218, 12, 13, 0, 16, 1, 15, 17, 112, 57, ++ 7, 0, 92, 240, 166, 188, 0, 76, 252, 255, 210, 149, 33, 0, 0, 192, 2, ++ 13, 0, 16, 1, 15, 18, 116, 64, 7, 0, 92, 240, 45, 185, 0, 0, 210, 2, ++ 13, 0, 16, 1, 15, 19, 140, 69, 7, 0, 91, 240, 172, 190, 0, 0, 232, 2, ++ 13, 0, 16, 1, 15, 20, 192, 51, 7, 0, 92, 240, 156, 191, 0, 0, 252, 2, ++ 13, 0, 16, 1, 15, 21, 64, 52, 7, 0, 93, 240, 106, 188, 0, 0, 24, 13, ++ 13, 0, 16, 1, 15, 22, 172, 166, 3, 0, 149, 240, 42, 190, 0, 0, 4, 3, ++ 13, 0, 16, 1, 15, 23, 112, 39, 4, 0, 141, 240, 206, 189, 0, 0, 16, 3, ++ 13, 0, 6, 1, 4, 24, 15, 13, 0, 16, 1, 15, 24, 204, 84, 3, 0, 2, 33, ++ 0, 224, 0, 0, 0, 0, 0, 0, 16, 1, 15, 25, 200, 85, 3, 0, 154, 240, 166, ++ 190, 0, 0, 24, 3, 13, 0, 16, 1, 15, 26, 96, 82, 3, 0, 155, 240, 97, ++ 184, 0, 0, 38, 3, 13, 0, 16, 1, 15, 27, 128, 109, 3, 0, 153, 240, 218, ++ 186, 0, 0, 56, 3, 13, 0, 16, 1, 15, 28, 76, 92, 3, 0, 154, 240, 124, ++ 187, 0, 0, 72, 3, 13, 0, 16, 1, 15, 29, 216, 80, 3, 0, 155, 240, 62, ++ 185, 0, 0, 88, 3, 13, 0, 6, 1, 4, 172, 17, 13, 0, 16, 1, 15, 30, 60, ++ 94, 7, 0, 90, 240, 150, 186, 0, 0, 108, 3, 76, 252, 255, 205, 150, 33, ++ 0, 13, 0, 6, 1, 4, 152, 19, 13, 0, 16, 1, 15, 31, 148, 123, 7, 0, 88, ++ 240, 242, 187, 0, 0, 124, 3, 13, 0, 6, 1, 4, 244, 19, 13, 0, 16, 1, ++ 15, 32, 212, 205, 7, 0, 83, 240, 218, 186, 0, 0, 140, 3, 13, 0, 16, ++ 1, 15, 33, 184, 13, 7, 0, 0, 0, 139, 73, 0, 0, 0, 0, 0, 0, 16, 1, 15, ++ 34, 212, 22, 7, 0, 94, 240, 98, 190, 0, 0, 156, 3, 13, 0, 16, 1, 15, ++ 35, 44, 154, 7, 0, 87, 240, 172, 189, 0, 0, 136, 21, 13, 0, 16, 1, 15, ++ 36, 144, 231, 7, 0, 83, 240, 104, 189, 0, 0, 100, 34, 13, 0, 16, 1, ++ 15, 37, 36, 232, 7, 0, 81, 240, 194, 189, 0, 0, 172, 3, 13, 0, 16, 1, ++ 15, 38, 104, 240, 7, 0, 83, 240, 39, 185, 0, 0, 186, 34, 13, 0, 16, ++ 1, 15, 39, 100, 112, 6, 0, 107, 240, 95, 185, 0, 0, 38, 35, 13, 0, 16, ++ 1, 15, 40, 252, 107, 6, 0, 105, 240, 218, 187, 0, 0, 180, 3, 13, 0, ++ 16, 1, 15, 41, 204, 108, 6, 0, 107, 240, 18, 188, 0, 0, 244, 36, 13, ++ 0, 16, 1, 15, 42, 212, 105, 6, 0, 107, 240, 187, 189, 0, 0, 78, 37, ++ 13, 0, 16, 1, 15, 43, 220, 104, 6, 0, 107, 240, 146, 190, 0, 0, 4, 38, ++ 13, 0, 16, 76, 252, 255, 200, 151, 33, 0, 1, 15, 44, 96, 207, 5, 0, ++ 115, 240, 44, 186, 0, 0, 188, 3, 13, 0, 16, 1, 15, 45, 68, 38, 7, 0, ++ 96, 240, 104, 184, 0, 0, 24, 39, 13, 0, 16, 1, 15, 46, 224, 0, 2, 0, ++ 176, 240, 114, 185, 0, 0, 200, 3, 13, 0, 16, 1, 15, 47, 204, 247, 1, ++ 0, 176, 240, 5, 190, 0, 0, 218, 3, 13, 0, 16, 1, 15, 48, 212, 77, 5, ++ 0, 123, 240, 14, 187, 0, 0, 244, 3, 13, 0, 16, 1, 15, 49, 124, 241, ++ 4, 0, 129, 240, 70, 185, 0, 0, 12, 4, 13, 0, 16, 1, 15, 50, 164, 1, ++ 5, 0, 128, 240, 58, 185, 0, 0, 28, 4, 13, 0, 16, 1, 15, 51, 200, 2, ++ 5, 0, 128, 240, 180, 184, 0, 0, 52, 4, 13, 0, 16, 1, 15, 52, 184, 187, ++ 2, 0, 164, 240, 72, 188, 0, 0, 76, 4, 13, 0, 16, 1, 15, 53, 120, 58, ++ 0, 0, 1, 32, 32, 185, 0, 0, 0, 0, 0, 0, 16, 1, 15, 54, 32, 19, 0, 0, ++ 207, 240, 160, 184, 0, 0, 100, 4, 13, 0, 16, 1, 15, 55, 120, 66, 2, ++ 0, 172, 240, 254, 184, 0, 0, 120, 4, 13, 0, 16, 1, 15, 56, 96, 66, 2, ++ 0, 172, 240, 32, 185, 0, 0, 164, 4, 13, 0, 16, 1, 15, 57, 120, 140, ++ 1, 0, 183, 240, 32, 188, 0, 0, 188, 4, 13, 0, 76, 252, 255, 195, 152, ++ 33, 0, 16, 1, 15, 58, 12, 197, 5, 0, 115, 240, 220, 191, 0, 0, 200, ++ 4, 13, 0, 16, 1, 15, 59, 112, 198, 5, 0, 115, 240, 66, 191, 0, 0, 248, ++ 4, 13, 0, 16, 1, 15, 60, 32, 108, 5, 0, 121, 240, 110, 188, 0, 0, 0, ++ 5, 13, 0, 16, 1, 15, 61, 16, 190, 4, 0, 152, 70, 11, 48, 0, 0, 0, 0, ++ 0, 0, 16, 1, 15, 62, 176, 100, 6, 0, 108, 240, 199, 191, 0, 0, 66, 52, ++ 13, 0, 16, 1, 15, 63, 248, 103, 6, 0, 105, 240, 138, 190, 0, 0, 16, ++ 5, 13, 0, 16, 1, 15, 64, 252, 97, 6, 0, 109, 240, 112, 185, 0, 0, 224, ++ 52, 13, 0, 16, 1, 15, 65, 20, 172, 3, 0, 149, 240, 132, 188, 0, 0, 32, ++ 5, 13, 0, 16, 1, 15, 66, 224, 155, 6, 0, 105, 240, 202, 188, 0, 0, 120, ++ 53, 13, 0, 16, 1, 15, 67, 28, 161, 6, 0, 102, 240, 6, 186, 0, 0, 44, ++ 5, 13, 0, 16, 1, 15, 68, 144, 51, 4, 0, 141, 240, 212, 184, 0, 0, 60, ++ 5, 13, 0, 16, 1, 15, 69, 4, 62, 4, 0, 140, 240, 160, 187, 0, 0, 72, ++ 5, 13, 0, 16, 1, 15, 70, 144, 56, 4, 0, 140, 240, 126, 190, 0, 0, 144, ++ 5, 13, 0, 16, 1, 15, 71, 196, 101, 2, 0, 169, 240, 238, 191, 0, 0, 164, ++ 5, 13, 76, 252, 255, 190, 153, 33, 0, 0, 16, 1, 15, 72, 32, 76, 7, 0, ++ 91, 240, 204, 188, 0, 0, 188, 5, 13, 0, 16, 1, 15, 73, 204, 239, 3, ++ 0, 148, 240, 98, 187, 0, 0, 148, 54, 13, 0, 16, 1, 15, 74, 140, 248, ++ 3, 0, 144, 240, 164, 190, 0, 0, 216, 5, 13, 0, 16, 1, 15, 75, 12, 249, ++ 3, 0, 144, 240, 112, 190, 0, 0, 240, 5, 13, 0, 16, 1, 15, 76, 12, 242, ++ 3, 0, 145, 240, 0, 186, 0, 0, 16, 6, 13, 0, 16, 1, 15, 77, 32, 245, ++ 6, 0, 97, 240, 138, 184, 0, 0, 56, 6, 13, 0, 16, 1, 15, 78, 200, 242, ++ 6, 0, 97, 240, 191, 185, 0, 0, 74, 6, 13, 0, 16, 1, 15, 79, 164, 222, ++ 4, 0, 130, 240, 218, 187, 0, 0, 92, 6, 13, 0, 16, 1, 15, 80, 44, 66, ++ 5, 0, 124, 240, 30, 186, 0, 0, 108, 6, 13, 0, 16, 1, 15, 81, 252, 71, ++ 5, 0, 123, 240, 62, 191, 0, 0, 124, 6, 13, 0, 16, 1, 15, 82, 36, 32, ++ 3, 0, 161, 240, 216, 187, 0, 0, 216, 55, 13, 0, 16, 1, 15, 83, 108, ++ 32, 3, 0, 161, 240, 219, 187, 0, 0, 38, 56, 13, 0, 6, 1, 4, 136, 57, ++ 13, 0, 16, 1, 15, 84, 144, 200, 7, 0, 64, 26, 128, 178, 0, 0, 0, 0, ++ 0, 0, 6, 1, 4, 180, 57, 13, 0, 6, 1, 76, 252, 255, 185, 154, 33, 0, ++ 4, 222, 58, 13, 0, 16, 1, 15, 85, 68, 31, 8, 0, 78, 240, 160, 187, 0, ++ 0, 136, 6, 13, 0, 16, 1, 15, 86, 128, 30, 8, 0, 78, 240, 5, 188, 0, ++ 0, 142, 6, 13, 0, 16, 1, 15, 87, 232, 30, 8, 0, 78, 240, 212, 187, 0, ++ 0, 148, 6, 13, 0, 16, 1, 15, 88, 176, 31, 8, 0, 78, 240, 114, 187, 0, ++ 0, 152, 6, 13, 0, 16, 1, 15, 89, 20, 30, 8, 0, 78, 240, 66, 188, 0, ++ 0, 156, 6, 13, 0, 16, 1, 15, 90, 248, 221, 6, 0, 98, 240, 84, 188, 0, ++ 0, 164, 6, 13, 0, 16, 1, 15, 91, 52, 189, 5, 0, 116, 240, 185, 188, ++ 0, 0, 170, 6, 13, 0, 16, 1, 15, 92, 156, 188, 5, 0, 120, 240, 241, 184, ++ 0, 0, 130, 62, 13, 0, 16, 1, 15, 93, 236, 187, 5, 0, 120, 240, 131, ++ 185, 0, 0, 246, 62, 13, 0, 16, 1, 15, 94, 68, 183, 5, 0, 116, 240, 185, ++ 191, 0, 0, 186, 6, 13, 0, 16, 1, 15, 95, 132, 27, 2, 0, 174, 240, 164, ++ 189, 0, 0, 208, 6, 13, 0, 16, 1, 15, 96, 76, 64, 3, 0, 160, 240, 210, ++ 186, 0, 0, 244, 69, 13, 0, 16, 1, 15, 97, 208, 75, 3, 0, 155, 240, 130, ++ 189, 0, 0, 216, 6, 13, 0, 16, 1, 15, 98, 116, 77, 3, 0, 155, 240, 180, ++ 188, 76, 252, 255, 180, 155, 33, 0, 0, 0, 224, 6, 13, 0, 16, 1, 15, ++ 99, 28, 71, 3, 0, 155, 240, 230, 191, 0, 0, 236, 6, 13, 0, 16, 1, 15, ++ 100, 52, 53, 3, 0, 157, 240, 222, 184, 0, 0, 244, 6, 13, 0, 16, 1, 15, ++ 101, 156, 55, 3, 0, 156, 240, 184, 191, 0, 0, 16, 7, 13, 0, 16, 1, 15, ++ 102, 236, 23, 2, 0, 179, 240, 230, 185, 0, 0, 188, 75, 13, 0, 16, 1, ++ 15, 103, 56, 199, 1, 0, 179, 240, 242, 191, 0, 0, 32, 7, 13, 0, 16, ++ 1, 15, 104, 16, 68, 0, 0, 208, 240, 242, 188, 0, 0, 248, 77, 13, 0, ++ 16, 1, 15, 105, 4, 199, 1, 0, 180, 240, 15, 184, 0, 0, 38, 7, 13, 0, ++ 16, 1, 15, 106, 132, 211, 2, 0, 167, 240, 32, 191, 0, 0, 200, 81, 13, ++ 0, 16, 1, 15, 107, 240, 210, 2, 0, 163, 240, 32, 186, 0, 0, 52, 7, 13, ++ 0, 6, 1, 4, 124, 85, 13, 0, 6, 1, 4, 104, 88, 13, 0, 16, 1, 15, 108, ++ 240, 175, 1, 0, 186, 240, 96, 188, 0, 0, 180, 88, 13, 0, 16, 1, 15, ++ 109, 12, 7, 2, 0, 176, 240, 32, 184, 0, 0, 80, 7, 13, 0, 16, 1, 15, ++ 110, 100, 57, 8, 0, 81, 240, 228, 191, 0, 0, 48, 89, 13, 0, 16, 1, 15, ++ 111, 100, 86, 4, 0, 139, 240, 124, 184, 0, 0, 96, 76, 252, 255, 175, ++ 156, 33, 0, 7, 13, 0, 16, 1, 15, 112, 60, 86, 4, 0, 144, 240, 209, 185, ++ 0, 0, 226, 89, 13, 0, 16, 1, 15, 113, 176, 87, 4, 0, 138, 240, 217, ++ 191, 0, 0, 102, 7, 13, 0, 16, 1, 15, 114, 204, 45, 5, 0, 125, 240, 206, ++ 188, 0, 0, 108, 7, 13, 0, 16, 1, 15, 115, 128, 42, 3, 0, 157, 240, 122, ++ 190, 0, 0, 120, 7, 13, 0, 16, 1, 15, 116, 84, 164, 6, 0, 102, 240, 164, ++ 185, 0, 0, 160, 7, 13, 0, 16, 1, 15, 117, 20, 105, 5, 0, 121, 240, 72, ++ 191, 0, 0, 168, 7, 13, 0, 16, 1, 15, 118, 232, 112, 7, 0, 89, 240, 98, ++ 187, 0, 0, 176, 7, 13, 0, 16, 1, 15, 119, 132, 103, 7, 0, 90, 240, 28, ++ 184, 0, 0, 192, 7, 13, 0, 16, 1, 15, 120, 84, 47, 0, 0, 205, 240, 60, ++ 188, 0, 0, 208, 7, 13, 0, 16, 1, 15, 121, 224, 49, 0, 0, 205, 240, 250, ++ 186, 0, 0, 216, 7, 13, 0, 16, 1, 15, 122, 252, 181, 1, 0, 181, 240, ++ 248, 184, 0, 0, 240, 7, 13, 0, 16, 1, 15, 123, 252, 199, 1, 0, 179, ++ 240, 254, 191, 0, 0, 252, 7, 13, 0, 16, 1, 15, 124, 100, 200, 1, 0, ++ 179, 240, 207, 191, 0, 0, 6, 8, 13, 0, 16, 1, 15, 125, 80, 180, 1, 0, ++ 181, 240, 224, 185, 0, 0, 76, 252, 11, 170, 157, 33, 0, 20, 8, 13, 0, ++ 254, 0, 0, 78, 252, 4, 255, 255, 255, 255 ++}; ++ ++const int brcm_patch_ram_length = sizeof(brcm_patchram_buf); +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/CMakeLists.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/CMakeLists.txt +new file mode 100644 +index 0000000000..55b7e63ecf +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/CMakeLists.txt +@@ -0,0 +1,34 @@ ++# Copyright (c) 2020-2021 ARM Limited. All rights reserved. ++# SPDX-License-Identifier: Apache-2.0 ++ ++add_library(mbed-portenta-whd-4343w-fw INTERFACE) ++target_include_directories(mbed-portenta-whd-4343w-fw ++ INTERFACE ++ resources/firmware/COMPONENT_4343W_FS ++) ++target_sources(mbed-portenta-whd-4343w-fw ++ INTERFACE ++ resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c ++ resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c ++) ++ ++add_library(mbed-portenta-whd-4343w-nvram INTERFACE) ++target_include_directories(mbed-portenta-whd-4343w-nvram INTERFACE resources/nvram) ++ ++add_library(mbed-portenta-whd INTERFACE) ++target_include_directories(mbed-portenta-whd ++ INTERFACE ++ . ++ port ++ interface ++) ++ ++target_sources(mbed-portenta-whd ++ INTERFACE ++ port/cyhal.c ++ port/cyhalgpio.cpp ++ port/cyhalsdio.c ++ port/wiced_filesystem.cpp ++ interface/cyabs_rtos_rtxv5.c ++) ++ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/generated_mac_address.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/generated_mac_address.txt +new file mode 100644 +index 0000000000..eb735ba173 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/generated_mac_address.txt +@@ -0,0 +1,9 @@ ++/* ++ * This file is used to set the MAC address in NVRAM. ++ * The MAC address of the Wi-Fi device may be configured in OTP and/or in NVRAM. ++ * If both OTP and NVRAM contains the MAC address then OTP programmed MAC address will be used. ++ * PSOC boards are usually programmed with OTP MAC address. ++ * MAC address is printed during WHD power up ++ */ ++ ++#define NVRAM_GENERATED_MAC_ADDRESS "macaddr=00:A0:50:6f:b2:ea" +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cy_result.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cy_result.h +new file mode 100644 +index 0000000000..8277169ab9 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cy_result.h +@@ -0,0 +1,228 @@ ++/***************************************************************************//** ++* \file cy_result.h ++* ++* \brief ++* Basic function result handling. Defines a simple type for conveying ++* information about whether something succeeded or details about any issues ++* that were detected. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++/** ++* \addtogroup group_result Result Type ++* \ingroup group_abstraction ++* \{ ++* \anchor anchor_general_description ++* \brief Defines a type and related utilities for function result handling. ++* ++* The @ref cy_rslt_t type is a structured bitfield which encodes information ++* about result type, the originating module, and a code for the specific ++* error (or warning etc). In order to extract these individual fields from ++* a @ref cy_rslt_t value, the utility macros @ref CY_RSLT_GET_TYPE, @ref CY_RSLT_GET_MODULE, ++* and @ref CY_RSLT_GET_CODE are provided. For example: ++* \code ++* cy_rslt_t result = cy_hal_do_operation(arg); ++* // Will be CY_RSLT_TYPE_INFO, CY_RSLT_TYPE_WARNING, CY_RSLT_TYPE_ERROR, or CY_RSLT_TYPE_FATAL ++* uint8_t type = CY_RSLT_GET_TYPE(result) ++* // See the "Modules" section for possible values ++* uint16_t module_id = CY_RSLT_GET_MODULE(result); ++* // Specific error codes are defined by each module ++* uint16_t error_code = CY_RSLT_GET_CODE(result); ++* \endcode ++*/ ++ ++#if !defined(CY_RESULT_H) ++#define CY_RESULT_H ++ ++#include ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/** ++ * @brief Provides the result of an operation as a structured bitfield. ++ * ++ * See the \ref anchor_general_description "General Description" ++ * for more details on structure and usage. ++ */ ++typedef uint32_t cy_rslt_t; ++ ++/** @ref cy_rslt_t return value indicating success */ ++#define CY_RSLT_SUCCESS ((cy_rslt_t)0x00000000U) ++ ++/** \cond INTERNAL */ ++/** Mask for the bit at position "x" */ ++#define CY_BIT_MASK(x) ((1UL << (x)) - 1U) ++ ++/** Bit position of the result type */ ++#define CY_RSLT_TYPE_POSITION (16U) ++/** Bit width of the result type */ ++#define CY_RSLT_TYPE_WIDTH (2U) ++/** Bit position of the module identifier */ ++#define CY_RSLT_MODULE_POSITION (18U) ++/** Bit width of the module identifier */ ++#define CY_RSLT_MODULE_WIDTH (14U) ++/** Bit position of the result code */ ++#define CY_RSLT_CODE_POSITION (0U) ++/** Bit width of the result code */ ++#define CY_RSLT_CODE_WIDTH (16U) ++ ++/** Mask for the result type */ ++#define CY_RSLT_TYPE_MASK CY_BIT_MASK(CY_RSLT_TYPE_WIDTH) ++/** Mask for the module identifier */ ++#define CY_RSLT_MODULE_MASK CY_BIT_MASK(CY_RSLT_MODULE_WIDTH) ++/** Mask for the result code */ ++#define CY_RSLT_CODE_MASK CY_BIT_MASK(CY_RSLT_CODE_WIDTH) ++ ++/** \endcond */ ++ ++/** ++* \{ ++* @name Fields ++* Utility macros for constructing result values and extracting individual fields from existing results. ++*/ ++ ++/** ++ * @brief Get the value of the result type field ++ * @param x the @ref cy_rslt_t value from which to extract the result type ++ */ ++#define CY_RSLT_GET_TYPE(x) (((x) >> CY_RSLT_TYPE_POSITION) & CY_RSLT_TYPE_MASK) ++/** ++ * @brief Get the value of the module identifier field ++ * @param x the @ref cy_rslt_t value from which to extract the module id ++ */ ++#define CY_RSLT_GET_MODULE(x) (((x) >> CY_RSLT_MODULE_POSITION) & CY_RSLT_MODULE_MASK) ++/** ++ * @brief Get the value of the result code field ++ * @param x the @ref cy_rslt_t value from which to extract the result code ++ */ ++#define CY_RSLT_GET_CODE(x) (((x) >> CY_RSLT_CODE_POSITION) & CY_RSLT_CODE_MASK) ++ ++/** ++ * @brief Create a new @ref cy_rslt_t value that encodes the specified type, module, and result code. ++ * @param type one of @ref CY_RSLT_TYPE_INFO, @ref CY_RSLT_TYPE_WARNING, ++ * @ref CY_RSLT_TYPE_ERROR, @ref CY_RSLT_TYPE_FATAL ++ * @param module Identifies the module where this result originated; see @ref anchor_modules "Modules". ++ * @param code a module-defined identifier to identify the specific situation that ++ * this result describes. ++ */ ++#define CY_RSLT_CREATE(type, module, code) \ ++ ((((module) & CY_RSLT_MODULE_MASK) << CY_RSLT_MODULE_POSITION) | \ ++ (((code) & CY_RSLT_CODE_MASK) << CY_RSLT_CODE_POSITION) | \ ++ (((type) & CY_RSLT_TYPE_MASK) << CY_RSLT_TYPE_POSITION)) ++ ++/** \} fields */ ++ ++/** ++* \{ ++* @name Result Types ++* Defines codes to identify the type of result. ++*/ ++ ++/** @brief The result code is informational-only */ ++#define CY_RSLT_TYPE_INFO (0U) ++/** @brief The result code is warning of a problem but will proceed */ ++#define CY_RSLT_TYPE_WARNING (1U) ++/** @brief The result code is an error */ ++#define CY_RSLT_TYPE_ERROR (2U) ++/** @brief The result code is a fatal error */ ++#define CY_RSLT_TYPE_FATAL (3U) ++ ++/** \} severity */ ++ ++/** ++* \{ ++* @name Modules ++* @anchor anchor_modules ++* Defines codes to identify the module from which an error originated. ++* For some large libraries, a range of module codes is defined here; ++* see the library documentation for values corresponding to individual modules. ++* Valid range is 0x0000-0x4000. ++*/ ++/**** DRIVER Module codes: 0x0000 - 0x00FF ****/ ++/** Base module identifier for peripheral driver library drivers (0x0000 - 0x007F) */ ++#define CY_RSLT_MODULE_DRIVERS_PDL_BASE (0x0000U) ++/** Base module identifier for wireless host driver library modules (0x0080 - 0x00FF) */ ++#define CY_RSLT_MODULE_DRIVERS_WHD_BASE (0x0080U) ++ ++/** Deprecated. Use \ref CY_RSLT_MODULE_ABSTRACTION_HAL */ ++#define CY_RSLT_MODULE_ABSTRACTION_HAL_BASE (0x0100U) ++/** Module identifier for the Hardware Abstraction Layer */ ++#define CY_RSLT_MODULE_ABSTRACTION_HAL (0x0100U) ++/** Module identifier for board support package */ ++#define CY_RSLT_MODULE_ABSTRACTION_BSP (0x0180U) ++/** Module identifier for file system abstraction */ ++#define CY_RSLT_MODULE_ABSTRACTION_FS (0x0181U) ++/** Module identifier for resource abstraction */ ++#define CY_RSLT_MODULE_ABSTRACTION_RESOURCE (0x0182U) ++/** Module identifier for rtos abstraction */ ++#define CY_RSLT_MODULE_ABSTRACTION_OS (0x0183U) ++/** Base identifier for environment abstraction modules (0x0184 - 0x01FF) */ ++#define CY_RSLT_MODULE_ABSTRACTION_ENV (0x0184U) ++ ++/** Base module identifier for Board Libraries (0x01A0 - 0x01BF) */ ++#define CY_RSLT_MODULE_BOARD_LIB_BASE (0x01A0U) ++/** Module identifier for the Retarget IO Board Library */ ++#define CY_RSLT_MODULE_BOARD_LIB_RETARGET_IO (0x1A0U) ++/** Module identifier for the RGB LED Board Library */ ++#define CY_RSLT_MODULE_BOARD_LIB_RGB_LED (0x01A1U) ++/** Module identifier for the Serial Flash Board Library */ ++#define CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH (0x01A2U) ++/** Module identifier for the WiFi Host Driver + Board Support Integration Library */ ++#define CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION (0x01A3U) ++ ++/** Base module identifier for Shield Board Libraries (0x01B8 - 0x01BF) */ ++#define CY_RSLT_MODULE_BOARD_SHIELD_BASE (0x01B8U) ++/** Module identifier for Shield Board CY8CKIT-028-EPD */ ++#define CY_RSLT_MODULE_BOARD_SHIELD_028_EPD (0x01B8U) ++/** Module identifier for Shield Board CY8CKIT-028-TFT */ ++#define CY_RSLT_MODULE_BOARD_SHIELD_028_TFT (0x01B9U) ++/** Module identifier for Shield Board CY8CKIT-032 */ ++#define CY_RSLT_MODULE_BOARD_SHIELD_032 (0x01BAU) ++ ++/** Base module identifier for Board Hardware Libraries (0x01C0 - 0x01FF) */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_BASE (0x01C0U) ++/** Module identifier for the BMI160 Motion Sensor Library */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_BMI160 (0x01C0U) ++/** Module identifier for the E2271CS021 E-Ink Controller Library */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_E2271CS021 (0x01C1U) ++/** Module identifier for the NTC GPIO Thermistor Library */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_THERMISTOR (0x01C2U) ++/** Module identifier for the SSD1306 OLED Controller Library */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_SSD1306 (0x01C3U) ++/** Module identifier for the ST7789V TFT Controller Library */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_ST7789V (0x01C4U) ++/** Module identifier for the Light Sensor Library */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_LIGHT_SENSOR (0x01C5U) ++/** Module identifier for the AK4954A Audio Codec Library */ ++#define CY_RSLT_MODULE_BOARD_HARDWARE_AK4954A (0x01C6U) ++ ++/** Base module identifier for Middleware Libraries (0x0200 - 0x02FF) */ ++#define CY_RSLT_MODULE_MIDDLEWARE_BASE (0x0200U) ++ ++/** \} modules */ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* CY_RESULT_H */ ++ ++/** \} group_result */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos.h +new file mode 100644 +index 0000000000..e19ffc49f7 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos.h +@@ -0,0 +1,711 @@ ++/***************************************************************************//** ++* \file cyabs_rtos.h ++* ++* \brief ++* Defines the Cypress RTOS Interface. Provides prototypes for functions that ++* allow Cypress libraries to use RTOS resources such as threads, mutexes & ++* timing functions in an abstract way. The APIs are implemented in the Port ++* Layer RTOS interface which is specific to the RTOS in use. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++#ifndef INCLUDED_CY_RTOS_INTERFACE_H_ ++#define INCLUDED_CY_RTOS_INTERFACE_H_ ++ ++#include "cyabs_rtos_impl.h" ++#include "cy_result.h" ++#include ++#include ++#include ++ ++/** ++* \defgroup group_abstraction_rtos_common Common ++ * General types and defines for working with the RTOS abstraction layer. ++* \defgroup group_abstraction_rtos_mutex Mutex ++ * APIs for acquiring and working with Mutexes. ++* \defgroup group_abstraction_rtos_queue Queue ++ * APIs for creating and working with Queues. ++* \defgroup group_abstraction_rtos_semaphore Semaphore ++ * APIs for acquiring and working with Semaphores. ++* \defgroup group_abstraction_rtos_threads Threads ++ * APIs for creating and working with Threads. ++* \defgroup group_abstraction_rtos_time Time ++ * APIs for getting the current time and waiting. ++* \defgroup group_abstraction_rtos_timer Timer ++ * APIs for creating and working with Timers. ++*/ ++ ++#ifdef __cplusplus ++extern "C" ++{ ++#endif ++ ++/*********************************************** CONSTANTS **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_common ++ * \{ ++ */ ++ ++#if defined(DOXYGEN) ++//#include "Template/cyabs_rtos_impl.h" ++ ++/** Return value indicating success */ ++#define CY_RSLT_SUCCESS ((cy_rslt_t)0x00000000U) ++#endif ++ ++/** Used with RTOS calls that require a timeout. This implies the call will never timeout. */ ++#define CY_RTOS_NEVER_TIMEOUT ( (uint32_t)0xffffffffUL ) ++ ++// ++// Note on error strategy. If the error is a normal part of operation (timeouts, full queues, empty ++// queues), the these errors are listed here and the abstraction layer implementation must map from the ++// underlying errors to these. If the errors are special cases, the the error \ref CY_RTOS_GENERAL_ERROR ++// will be returned and \ref cy_rtos_last_error() can be used to retrieve the RTOS specific error message. ++// ++/** Requested operation did not complete in the specified time */ ++#define CY_RTOS_TIMEOUT CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 0) ++/** The RTOS could not allocate memory for the specified operation */ ++#define CY_RTOS_NO_MEMORY CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 1) ++/** An error occured in the RTOS */ ++#define CY_RTOS_GENERAL_ERROR CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 2) ++/** A bad argument was passed into the APIs */ ++#define CY_RTOS_BAD_PARAM CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 5) ++/** A memory alignment issue was detected. Ensure memory provided is aligned per \ref CY_RTOS_ALIGNMENT_MASK */ ++#define CY_RTOS_ALIGNMENT_ERROR CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 6) ++ ++/** \} group_abstraction_rtos_common */ ++ ++/** ++ * \ingroup group_abstraction_rtos_queue ++ * \{ ++ */ ++ ++/** The Queue is already full and can't accept any more items at this time */ ++#define CY_RTOS_QUEUE_FULL CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 3) ++/** The Queue is empty and has nothing to remove */ ++#define CY_RTOS_QUEUE_EMPTY CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 4) ++ ++/** \} group_abstraction_rtos_queue */ ++ ++/*********************************************** TYPES **********************************************/ ++ ++/** ++ * The state a thread can be in ++ * ++ * \ingroup group_abstraction_rtos_threads ++ */ ++typedef enum cy_thread_state ++{ ++ CY_THREAD_STATE_INACTIVE, /**< thread has not started or was terminated but not yet joined */ ++ CY_THREAD_STATE_READY, /**< thread can run, but is not currently */ ++ CY_THREAD_STATE_RUNNING, /**< thread is currently running */ ++ CY_THREAD_STATE_BLOCKED, /**< thread is blocked waiting for something */ ++ CY_THREAD_STATE_TERMINATED, /**< thread has terminated but not freed */ ++ CY_THREAD_STATE_UNKNOWN, /**< thread is in an unknown state */ ++} cy_thread_state_t; ++ ++/** ++ * The type of timer ++ * ++ * \ingroup group_abstraction_rtos_timer ++ */ ++typedef enum cy_timer_trigger_type ++{ ++ CY_TIMER_TYPE_PERIODIC, /**< called periodically until stopped */ ++ CY_TIMER_TYPE_ONCE, /**< called once only */ ++ cy_timer_type_periodic = CY_TIMER_TYPE_PERIODIC, /**< \deprecated replaced by \ref CY_TIMER_TYPE_PERIODIC */ ++ cy_timer_type_once = CY_TIMER_TYPE_ONCE, /**< \deprecated replaced by \ref CY_TIMER_TYPE_ONCE */ ++} cy_timer_trigger_type_t; ++ ++/** ++ * The type of a function that is the entry point for a thread ++ * ++ * @param[in] arg the argument passed from the thread create call to the entry function ++ * ++ * \ingroup group_abstraction_rtos_threads ++ */ ++typedef void (*cy_thread_entry_fn_t)(cy_thread_arg_t arg); ++ ++/** ++ * The callback function to be called by a timer ++ * ++ * \ingroup group_abstraction_rtos_timer ++ */ ++typedef void (*cy_timer_callback_t)(cy_timer_callback_arg_t arg); ++ ++/** ++ * Return the last error from the RTOS. ++ * ++ * The functions in the RTOS abstraction layer adhere to the Cypress return ++ * results calling convention. The underlying RTOS implementations will not but rather ++ * will have their own error code conventions. This function is provided as a service ++ * to the developer, mostly for debugging, and returns the underlying RTOS error code ++ * from the last RTOS abstraction layer that returned \ref CY_RTOS_GENERAL_ERROR. ++ * ++ * @return RTOS specific error code. ++ * ++ * \ingroup group_abstraction_rtos_common ++ */ ++cy_rtos_error_t cy_rtos_last_error(); ++ ++/*********************************************** Threads **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_threads ++ * \{ ++ */ ++ ++/** Create a thread with specific thread argument. ++ * ++ * This function is called to startup a new thread. If the thread can exit, it must call ++ * \ref cy_rtos_exit_thread() just before doing so. All created threads that can terminate, either ++ * by themselves or forcefully by another thread MUST have \ref cy_rtos_join_thread() called on them ++ * by another thread in order to cleanup any resources that might have been allocated for them. ++ * ++ * @param[out] thread Pointer to a variable which will receive the new thread handle ++ * @param[in] entry_function Function pointer which points to the main function for the new thread ++ * @param[in] name String thread name used for a debugger ++ * @param[in] stack The buffer to use for the thread stack. This must be aligned to ++ * \ref CY_RTOS_ALIGNMENT_MASK with a size of at least \ref CY_RTOS_MIN_STACK_SIZE. ++ * If stack is null, cy_rtos_create_thread will allocate a stack from the heap. ++ * @param[in] stack_size The size of the thread stack in bytes ++ * @param[in] priority The priority of the thread. Values are operating system specific, but some ++ * common priority levels are defined: ++ * CY_THREAD_PRIORITY_LOW ++ * CY_THREAD_PRIORITY_NORMAL ++ * CY_THREAD_PRIORITY_HIGH ++ * @param[in] arg The argument to pass to the new thread ++ * ++ * @return The status of thread create request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_function, ++ const char *name, void *stack, uint32_t stack_size, cy_thread_priority_t priority, cy_thread_arg_t arg); ++ ++/** Exit the current thread. ++ * ++ * This function is called just before a thread exits. In some cases it is sufficient ++ * for a thread to just return to exit, but in other cases, the RTOS must be explicitly ++ * signaled. In cases where a return is sufficient, this should be a null funcition. ++ * where the RTOS must be signaled, this function should perform that In cases operation. ++ * In code using RTOS services, this function should be placed at any at any location ++ * where the main thread function will return, exiting the thread. Threads that can ++ * exit must still be joined (\ref cy_rtos_join_thread) to ensure their resources are ++ * fully cleaned up. ++ * ++ * @return The status of thread exit request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_exit_thread(); ++ ++/** Terminates another thread. ++ * ++ * This function is called to terminate another thread and reap the resources claimed ++ * by the thread. This should be called both when forcibly terminating another thread ++ * as well as any time a thread can exit on its own. For some RTOS implementations ++ * this is not required as the thread resources are claimed as soon as it exits. In ++ * other cases, this must be called to reclaim resources. Threads that are terminated ++ * must still be joined (\ref cy_rtos_join_thread) to ensure their resources are fully ++ * cleaned up. ++ * ++ * @param[in] thread Handle of the thread to terminate ++ * ++ * @returns The status of the thread terminate. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_terminate_thread(cy_thread_t *thread); ++ ++/** Waits for a thread to complete. ++ * ++ * This must be called on any thread that can complete to ensure that any resources that ++ * were allocated for it are cleaned up. ++ * ++ * @param[in] thread Handle of the thread to wait for ++ * ++ * @returns The status of thread join request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_join_thread(cy_thread_t *thread); ++ ++/** Checks if the thread is running ++ * ++ * This function is called to determine if a thread is actively running or not. For information on ++ * the thread state, use the \ref cy_rtos_get_thread_state() function. ++ * ++ * @param[in] thread Handle of the terminated thread to delete ++ * @param[out] running Returns true if the thread is running, otherwise false ++ * ++ * @returns The status of the thread running check. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_is_thread_running(cy_thread_t *thread, bool *running); ++ ++/** Gets the state the thread is currently in ++ * ++ * This function is called to determine if a thread is running/blocked/inactive/ready etc. ++ * ++ * @param[in] thread Handle of the terminated thread to delete ++ * @param[out] state Returns the state the thread is currently in ++ * ++ * @returns The status of the thread state check. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_get_thread_state(cy_thread_t *thread, cy_thread_state_t *state); ++ ++/** Get current thread handle ++ * ++ * Returns the unique thread handle of the current running thread. ++ * ++ * @param[out] thread Handle of the current running thread ++ * ++ * @returns The status of thread join request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_get_thread_handle(cy_thread_t *thread); ++ ++/** \} group_abstraction_rtos_threads */ ++ ++/*********************************************** Mutexes **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_mutex ++ * \{ ++ */ ++ ++/** Create a recursive mutex. ++ * ++ * Creates a binary mutex which can be used to synchronize between threads ++ * and between threads and ISRs. Created mutexes are recursive and support priority inheritance. ++ * ++ * This function has been replaced by \ref cy_rtos_init_mutex2 which allow for specifying ++ * whether or not the mutex supports recursion or not. ++ * ++ * @param[out] mutex Pointer to the mutex handle to be initialized ++ * ++ * @return The status of mutex creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++#define cy_rtos_init_mutex(mutex) cy_rtos_init_mutex2(mutex, true) ++ ++/** Create a mutex which can support recursion or not. ++ * ++ * Creates a binary mutex which can be used to synchronize between threads and between threads and ++ * ISRs. Created mutexes can support priority inheritance if recursive. ++ * ++ * \note Not all RTOS implementations support non-recursive mutexes. In this case a recursive ++ * mutex will be created. ++ * ++ * @param[out] mutex Pointer to the mutex handle to be initialized ++ * @param[in] recursive Should the created mutex support recursion or not ++ * ++ * @return The status of mutex creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_init_mutex2(cy_mutex_t *mutex, bool recursive); ++ ++/** Get a mutex. ++ * ++ * If the mutex is available, it is acquired and this function returned. ++ * If the mutex is not available, the thread waits until the mutex is available ++ * or until the timeout occurs. ++ * ++ * @note This function must not be called from an interrupt context as it may block. ++ * ++ * @param[in] mutex Pointer to the mutex handle ++ * @param[in] timeout_ms Maximum number of milliseconds to wait while attempting to get ++ * the mutex. Use the \ref CY_RTOS_NEVER_TIMEOUT constant to wait forever. ++ * Must be zero if in_isr is true. ++ * ++ * @return The status of the get mutex. Returns timeout if mutex was not acquired ++ * before timeout_ms period. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_TIMEOUT, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_get_mutex(cy_mutex_t *mutex, cy_time_t timeout_ms); ++ ++/** Set a mutex. ++ * ++ * The mutex is released allowing any other threads waiting on the mutex to ++ * obtain the semaphore. ++ * ++ * @param[in] mutex Pointer to the mutex handle ++ * ++ * @return The status of the set mutex request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ * ++ */ ++cy_rslt_t cy_rtos_set_mutex(cy_mutex_t *mutex); ++ ++/** Deletes a mutex. ++ * ++ * This function frees the resources associated with a sempahore. ++ * ++ * @param[in] mutex Pointer to the mutex handle ++ * ++ * @return The status to the delete request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_deinit_mutex(cy_mutex_t *mutex); ++ ++/** \} group_abstraction_rtos_mutex */ ++ ++/*********************************************** Semaphores **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_semaphore ++ * \{ ++ */ ++ ++/** ++ * Create a semaphore ++ * ++ * This is basically a counting semaphore. ++ * ++ * @param[in,out] semaphore Pointer to the semaphore handle to be initialized ++ * @param[in] maxcount The maximum count for this semaphore ++ * @param[in] initcount The initial count for this semaphore ++ * ++ * @return The status of the semaphore creation. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_init_semaphore(cy_semaphore_t *semaphore, uint32_t maxcount, uint32_t initcount); ++ ++/** ++ * Get/Acquire a semaphore ++ * ++ * If the semaphore count is zero, waits until the semaphore count is greater than zero. ++ * Once the semaphore count is greater than zero, this function decrements ++ * the count and return. It may also return if the timeout is exceeded. ++ * ++ * @param[in] semaphore Pointer to the semaphore handle ++ * @param[in] timeout_ms Maximum number of milliseconds to wait while attempting to get ++ * the semaphore. Use the \ref CY_RTOS_NEVER_TIMEOUT constant to wait forever. Must ++ * be zero is in_isr is true ++ * @param[in] in_isr true if we are trying to get the semaphore from with an ISR ++ * @return The status of get semaphore operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_TIMEOUT, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_get_semaphore(cy_semaphore_t *semaphore, cy_time_t timeout_ms, bool in_isr); ++ ++/** ++ * Set/Release a semaphore ++ * ++ * Increments the semaphore count, up to the maximum count for this semaphore. ++ * ++ * @param[in] semaphore Pointer to the semaphore handle ++ * @param[in] in_isr Value of true indicates calling from interrupt context ++ * Value of false indicates calling from normal thread context ++ * @return The status of set semaphore operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_set_semaphore(cy_semaphore_t *semaphore, bool in_isr); ++ ++/** ++ * Get the count of a semaphore. ++ * ++ * Gets the number of available tokens on the semaphore. ++ * ++ * @param[in] semaphore Pointer to the semaphore handle ++ * @param[out] count Pointer to the return count ++ * @return The status of get semaphore count operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_get_count_semaphore(cy_semaphore_t *semaphore, size_t *count); ++ ++/** ++ * Deletes a semaphore ++ * ++ * This function frees the resources associated with a semaphore. ++ * ++ * @param[in] semaphore Pointer to the semaphore handle ++ * ++ * @return The status of semaphore deletion [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_deinit_semaphore(cy_semaphore_t *semaphore); ++ ++/** \} group_abstraction_rtos_semaphore */ ++ ++/*********************************************** Events **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_event ++ * \{ ++ */ ++ ++/** Create an event. ++ * ++ * This is an event which can be used to signal a set of threads ++ * with a 32 bit data element. ++ * ++ * @param[in,out] event Pointer to the event handle to be initialized ++ * ++ * @return The status of the event initialization request. ++ * [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_init_event(cy_event_t *event); ++ ++/** Set the event flag bits. ++ * ++ * This is an event which can be used to signal a set of threads ++ * with a 32 bit data element. Any threads waiting on this event are released ++ * ++ * @param[in] event Pointer to the event handle ++ * @param[in] bits The value of the 32 bit flags ++ * @param[in] in_isr If true, this is called from an ISR, otherwise from a thread ++ * ++ * @return The status of the set request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_setbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ; ++ ++/** ++ * Clear the event flag bits ++ * ++ * This function clears bits in the event. ++ * ++ * @param[in] event Pointer to the event handle ++ * @param[in] bits Any bits set in this value, will be cleared in the event. ++ * @param[in] in_isr if true, this is called from an ISR, otherwise from a thread ++ * ++ * @return The status of the clear flags request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_clearbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ; ++ ++/** Get the event bits. ++ * ++ * Returns the current bits for the event. ++ * ++ * @param[in] event Pointer to the event handle ++ * @param[out] bits pointer to receive the value of the event flags ++ * ++ * @return The status of the get request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_getbits_event(cy_event_t *event, uint32_t *bits); ++ ++/** Wait for the event and return bits. ++ * ++ * Waits for the event to be set and then returns the bits associated ++ * with the event, or waits for the given timeout period. ++ * @note This function returns if any bit in the set is set. ++ * ++ * @param[in] event Pointer to the event handle ++ * @param[in,out] bits pointer to receive the value of the event flags ++ * @param[in] clear if true, clear any bits set that cause the wait to return ++ * if false, do not clear bits ++ * @param[in] all if true, all bits in the initial bits value must be set to return ++ * if false, any one bit in the initial bits value must be set to return ++ * @param[in] timeout The amount of time to wait in milliseconds ++ * ++ * @return The status of the wait for event request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_waitbits_event(cy_event_t *event, uint32_t *bits, bool clear, bool all, cy_time_t timeout); ++ ++/** Deinitialize a event. ++ * ++ * This function frees the resources associated with an event. ++ * ++ * @param[in] event Pointer to the event handle ++ * ++ * @return The status of the deletion request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_deinit_event(cy_event_t *event); ++ ++/** \} group_abstraction_rtos_event */ ++ ++/*********************************************** Queues **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_queue ++ * \{ ++ */ ++ ++/** Create a queue. ++ * ++ * This is a queue of data where entries are placed on the back of the queue ++ * and removed from the front of the queue. ++ * ++ * @param[out] queue Pointer to the queue handle ++ * @param[in] length The maximum length of the queue in items ++ * @param[in] itemsize The size of each item in the queue. ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_init_queue(cy_queue_t *queue, size_t length, size_t itemsize); ++ ++/** Put an item in a queue. ++ * ++ * This function puts an item in the queue. The item is copied ++ * into the queue using a memory copy and the data pointed to by item_ptr ++ * is no longer referenced once the call returns. ++ * ++ * @note If in_isr is true, timeout_ms must be zero. ++ * ++ * @param[in] queue Pointer to the queue handle ++ * @param[in] item_ptr Pointer to the item to place in the queue ++ * @param[in] timeout_ms The time to wait to place the item in the queue ++ * @param[in] in_isr If true this is being called from within and ISR ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR, \ref CY_RTOS_QUEUE_FULL] ++ */ ++cy_rslt_t cy_rtos_put_queue(cy_queue_t *queue, const void *item_ptr, cy_time_t timeout_ms, bool in_isr); ++ ++/** Gets an item in a queue. ++ * ++ * This function gets an item from the queue. The item is copied ++ * out of the queue into the memory provide by item_ptr. This space must be ++ * large enough to hold a queue entry as defined when the queue was initialized. ++ * ++ * @note If in_isr is true, timeout_ms must be zero. ++ * ++ * @param[in] queue Pointer to the queue handle ++ * @param[in] item_ptr Pointer to the memory for the item from the queue ++ * @param[in] timeout_ms The time to wait to get an item from the queue ++ * @param[in] in_isr If true this is being called from within an ISR ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR, \ref CY_RTOS_QUEUE_EMPTY] ++ */ ++cy_rslt_t cy_rtos_get_queue(cy_queue_t *queue, void *item_ptr, cy_time_t timeout_ms, bool in_isr); ++ ++/** Return the number of items in the queue. ++ * ++ * This function returns the number of items currently in the queue. ++ * ++ * @param[in] queue Pointer to the queue handle ++ * @param[out] num_waiting Pointer to the return count ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_count_queue(cy_queue_t *queue, size_t *num_waiting); ++ ++/** Return the amount of empty space in the queue. ++ * ++ * This function returns the amount of empty space in the ++ * queue. For instance, if the queue was created with 10 entries max and there ++ * are currently 2 entries in the queue, this will return 8. ++ * ++ * @param[in] queue Pointer to the queue handle ++ * @param[out] num_spaces Pointer to the return count. ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_space_queue(cy_queue_t *queue, size_t *num_spaces); ++ ++/** Reset the queue. ++ * ++ * This function sets the queue to empty. ++ * ++ * @param[in] queue pointer to the queue handle ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_reset_queue(cy_queue_t *queue); ++ ++/** Deinitialize the queue handle. ++ * ++ * This function de-initializes the queue and returns all ++ * resources used by the queue. ++ * ++ * @param[in] queue Pointer to the queue handle ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_deinit_queue(cy_queue_t *queue); ++ ++/** \} group_abstraction_rtos_queue */ ++ ++/*********************************************** Timers **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_timer ++ * \{ ++ */ ++ ++/** Create a new timer. ++ * ++ * This function initializes a timer object. ++ * @note The timer is not active until start is called. ++ * @note The callback may be (likely will be) called from a different thread. ++ * ++ * @param[out] timer Pointer to the timer handle to initialize ++ * @param[in] type Type of timer (periodic or once) ++ * @param[in] fun The function ++ * @param[in] arg Argument to pass along to the callback function ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_init_timer(cy_timer_t *timer, cy_timer_trigger_type_t type, ++ cy_timer_callback_t fun, cy_timer_callback_arg_t arg); ++ ++/** Start a timer. ++ * ++ * @param[in] timer Pointer to the timer handle ++ * @param[in] num_ms The number of milliseconds to wait before the timer fires ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_start_timer(cy_timer_t *timer, cy_time_t num_ms); ++ ++/** Stop a timer. ++ * ++ * @param[in] timer Pointer to the timer handle ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_stop_timer(cy_timer_t *timer); ++ ++/** Returns state of a timer. ++ * ++ * @param[in] timer Pointer to the timer handle ++ * @param[out] state Return value for state, true if running, false otherwise ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_is_running_timer(cy_timer_t *timer, bool *state); ++ ++/** Deinit the timer. ++ * ++ * This function deinitializes the timer and frees all consumed resources. ++ * ++ * @param[in] timer Pointer to the timer handle ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_deinit_timer(cy_timer_t *timer); ++ ++/** \} group_abstraction_rtos_timer */ ++ ++/*********************************************** Time **********************************************/ ++ ++/** ++ * \ingroup group_abstraction_rtos_time ++ * \{ ++ */ ++ ++/** Gets time in milliseconds since RTOS start. ++ * ++ * @note Since this is only 32 bits, it will roll over every 49 days, 17 hours, 2 mins, 47.296 seconds ++ * ++ * @param[out] tval Pointer to the struct to populate with the RTOS time ++ * ++ * @returns Time in milliseconds since the RTOS started. ++ */ ++cy_rslt_t cy_rtos_get_time(cy_time_t *tval); ++ ++/** Delay for a number of milliseconds. ++ * ++ * Processing of this function depends on the minimum sleep ++ * time resolution of the RTOS. The current thread should sleep for ++ * the longest period possible which is less than the delay required, ++ * then makes up the difference with a tight loop. ++ * ++ * @param[in] num_ms The number of milliseconds to delay for ++ * ++ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] ++ */ ++cy_rslt_t cy_rtos_delay_milliseconds(cy_time_t num_ms); ++ ++/** \} group_abstraction_rtos_time */ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++#endif /* ifndef INCLUDED_CY_RTOS_INTERFACE_H_ */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_impl.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_impl.h +new file mode 100644 +index 0000000000..8b36a68844 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_impl.h +@@ -0,0 +1,77 @@ ++/***************************************************************************//** ++* \file cyabs_rtos_impl.h ++* ++* \brief ++* Internal definitions for RTOS abstraction layer ++* ++******************************************************************************** ++* \copyright ++* Copyright 2019-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*/ ++ ++ ++#ifndef INCLUDED_CYABS_RTOS_IMPL_H_ ++#define INCLUDED_CYABS_RTOS_IMPL_H_ ++ ++#include "cmsis_os2.h" ++#include "rtx_os.h" ++ ++#ifdef __cplusplus ++extern "C" ++{ ++#endif ++ ++/****************************************************** ++* Constants ++******************************************************/ ++#define CY_RTOS_MIN_STACK_SIZE 300 /** Minimum stack size in bytes */ ++#define CY_RTOS_ALIGNMENT 0x00000008UL /** Minimum alignment for RTOS objects */ ++#define CY_RTOS_ALIGNMENT_MASK 0x00000007UL /** Mask for checking the alignment of created RTOS objects */ ++ ++ ++/****************************************************** ++* Type Definitions ++******************************************************/ ++ ++/* RTOS thread priority */ ++typedef enum ++{ ++ CY_RTOS_PRIORITY_MIN = osPriorityNone, ++ CY_RTOS_PRIORITY_LOW = osPriorityLow, ++ CY_RTOS_PRIORITY_BELOWNORMAL = osPriorityBelowNormal, ++ CY_RTOS_PRIORITY_NORMAL = osPriorityNormal, ++ CY_RTOS_PRIORITY_ABOVENORMAL = osPriorityAboveNormal, ++ CY_RTOS_PRIORITY_HIGH = osPriorityHigh, ++ CY_RTOS_PRIORITY_REALTIME = osPriorityRealtime, ++ CY_RTOS_PRIORITY_MAX = osPriorityRealtime7 ++} cy_thread_priority_t ; ++ ++typedef osThreadId_t cy_thread_t; /** CMSIS definition of a thread handle */ ++typedef void * cy_thread_arg_t; /** Argument passed to the entry function of a thread */ ++typedef osMutexId_t cy_mutex_t; /** CMSIS definition of a mutex */ ++typedef osSemaphoreId_t cy_semaphore_t; /** CMSIS definition of a semaphore */ ++typedef osEventFlagsId_t cy_event_t; /** CMSIS definition of an event */ ++typedef osMessageQueueId_t cy_queue_t; /** CMSIS definition of a message queue */ ++typedef osTimerId_t cy_timer_t; /** CMSIS definition of a timer */ ++typedef void * cy_timer_callback_arg_t; /** Argument passed to the timer callback function */ ++typedef uint32_t cy_time_t; /** Time in milliseconds */ ++typedef osStatus_t cy_rtos_error_t; /** CMSIS definition of a error status */ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++#endif /* ifndef INCLUDED_CYABS_RTOS_IMPL_H_ */ ++ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c +new file mode 100644 +index 0000000000..37c70fe5c7 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c +@@ -0,0 +1,863 @@ ++/***************************************************************************//** ++* \file cyabs_rtos.c ++* ++* \brief ++* Implementation for CMSIS RTOS v2 abstraction ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++#include ++#include ++#include ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++ ++/****************************************************** ++* Error Converter ++******************************************************/ ++ ++/* Last received error status */ ++static cy_rtos_error_t dbgErr; ++cy_rtos_error_t cy_rtos_last_error() { return dbgErr; } ++ ++/* Converts internal error type to external error type */ ++static cy_rslt_t error_converter(cy_rtos_error_t internalError) ++{ ++ cy_rslt_t value; ++ ++ switch (internalError) ++ { ++ case osOK: ++ value = CY_RSLT_SUCCESS; ++ break; ++ case osErrorTimeout: ++ value = CY_RTOS_TIMEOUT; ++ break; ++ case osErrorParameter: ++ value = CY_RTOS_BAD_PARAM; ++ break; ++ case osErrorNoMemory: ++ value = CY_RTOS_NO_MEMORY; ++ break; ++ case osError: ++ case osErrorResource: ++ case osErrorISR: ++ default: ++ value = CY_RTOS_GENERAL_ERROR; ++ break; ++ } ++ ++ /* Update the last known error status */ ++ dbgErr = internalError; ++ return value; ++} ++ ++ ++/****************************************************** ++* Threads ++******************************************************/ ++ ++cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_function, ++ const char *name, void *stack, uint32_t stack_size, cy_thread_priority_t priority, cy_thread_arg_t arg) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ osThreadAttr_t attr; ++ ++ if (thread == NULL || stack_size < CY_RTOS_MIN_STACK_SIZE) ++ status = CY_RTOS_BAD_PARAM; ++ else if (stack != NULL && (0 != (((uint32_t)stack) & CY_RTOS_ALIGNMENT_MASK))) ++ status = CY_RTOS_ALIGNMENT_ERROR; ++ else ++ { ++ attr.name = name; ++ attr.attr_bits = osThreadJoinable; ++ attr.cb_size = osRtxThreadCbSize; ++ attr.stack_size = stack_size; ++ attr.priority = (osPriority_t)priority; ++ attr.tz_module = 0; ++ attr.reserved = 0; ++ ++ /* Allocate stack if NULL was passed */ ++ if ((uint32_t *)stack == NULL) ++ { ++ /* Note: 1 malloc so that it can be freed with 1 call when terminating */ ++ uint32_t cb_mem_pad = (~osRtxThreadCbSize + 1) & CY_RTOS_ALIGNMENT_MASK; ++ attr.cb_mem = malloc(osRtxThreadCbSize + cb_mem_pad + stack_size); ++ if (attr.cb_mem != NULL) ++ attr.stack_mem = (uint32_t *)((uint32_t)attr.cb_mem + osRtxThreadCbSize + cb_mem_pad); ++ } ++ else ++ { ++ attr.cb_mem = malloc(osRtxThreadCbSize); ++ attr.stack_mem = stack; ++ } ++ ++ if (attr.cb_mem == NULL) ++ status = CY_RTOS_NO_MEMORY; ++ else ++ { ++ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ CY_ASSERT(((uint32_t)attr.stack_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ *thread = osThreadNew((osThreadFunc_t)entry_function, arg, &attr); ++ CY_ASSERT((*thread == attr.cb_mem) || (*thread == NULL)); ++ status = (*thread == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_exit_thread() ++{ ++ /* This does not have a return statement because the osThreadExit() function ++ * does not return so the return statement would be unreachable and causes a ++ * warning for IAR compiler. ++ */ ++ osThreadExit(); ++} ++ ++cy_rslt_t cy_rtos_terminate_thread(cy_thread_t *thread) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (thread == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osThreadTerminate(*thread); ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_is_thread_running(cy_thread_t *thread, bool *running) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ ++ if ((thread == NULL) || (running == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ *running = (osThreadGetState(*thread) == osThreadRunning) ? true : false; ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_get_thread_state(cy_thread_t *thread, cy_thread_state_t *state) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ ++ if ((thread == NULL) || (state == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ switch (osThreadGetState(*thread)) ++ { ++ case osThreadInactive: ++ *state = CY_THREAD_STATE_INACTIVE; ++ break; ++ case osThreadReady: ++ *state = CY_THREAD_STATE_READY; ++ break; ++ case osThreadRunning: ++ *state = CY_THREAD_STATE_RUNNING; ++ break; ++ case osThreadBlocked: ++ *state = CY_THREAD_STATE_BLOCKED; ++ break; ++ case osThreadTerminated: ++ *state = CY_THREAD_STATE_TERMINATED; ++ break; ++ case osThreadError: ++ case osThreadReserved: ++ default: ++ *state = CY_THREAD_STATE_UNKNOWN; ++ break; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_join_thread(cy_thread_t *thread) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (thread == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osThreadJoin(*thread); ++ status = error_converter(statusInternal); ++ ++ if (status == CY_RSLT_SUCCESS) ++ { ++ free(*thread); ++ *thread = NULL; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_get_thread_handle(cy_thread_t *thread) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ ++ if (thread == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ *thread = osThreadGetId(); ++ ++ return status; ++} ++ ++ ++/****************************************************** ++* Mutexes ++******************************************************/ ++ ++cy_rslt_t cy_rtos_init_mutex2(cy_mutex_t *mutex, bool recursive) ++{ ++ cy_rslt_t status; ++ osMutexAttr_t attr; ++ ++ if (mutex == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ attr.name = NULL; ++ attr.attr_bits = osMutexPrioInherit; ++ if (recursive) ++ { ++ attr.attr_bits |= osMutexRecursive; ++ } ++ attr.cb_mem = malloc(osRtxMutexCbSize); ++ attr.cb_size = osRtxMutexCbSize; ++ ++ if (attr.cb_mem == NULL) ++ status = CY_RTOS_NO_MEMORY; ++ else ++ { ++ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ *mutex = osMutexNew(&attr); ++ CY_ASSERT((*mutex == attr.cb_mem) || (*mutex == NULL)); ++ status = (*mutex == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_get_mutex(cy_mutex_t *mutex, cy_time_t timeout_ms) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (mutex == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osMutexAcquire(*mutex, timeout_ms); ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_set_mutex(cy_mutex_t *mutex) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (mutex == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osMutexRelease(*mutex); ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_deinit_mutex(cy_mutex_t *mutex) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (mutex == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osMutexDelete(*mutex); ++ status = error_converter(statusInternal); ++ ++ if (status == CY_RSLT_SUCCESS) ++ { ++ free(*mutex); ++ *mutex = NULL; ++ } ++ } ++ ++ return status; ++} ++ ++ ++/****************************************************** ++* Semaphores ++******************************************************/ ++ ++cy_rslt_t cy_rtos_init_semaphore(cy_semaphore_t *semaphore, uint32_t maxcount, uint32_t initcount) ++{ ++ cy_rslt_t status; ++ osSemaphoreAttr_t attr; ++ ++ if (semaphore == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ attr.name = NULL; ++ attr.attr_bits = 0U; ++ attr.cb_mem = malloc(osRtxSemaphoreCbSize); ++ attr.cb_size = osRtxSemaphoreCbSize; ++ ++ if (attr.cb_mem == NULL) ++ status = CY_RTOS_NO_MEMORY; ++ else ++ { ++ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ *semaphore = osSemaphoreNew(maxcount, initcount, &attr); ++ CY_ASSERT((*semaphore == attr.cb_mem) || (*semaphore == NULL)); ++ status = (*semaphore == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_get_semaphore(cy_semaphore_t *semaphore, cy_time_t timeout_ms, bool in_isr) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ cy_rtos_error_t statusInternal; ++ ++ if (semaphore == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ /* Not allowed to be called in ISR if timeout != 0 */ ++ if ((!in_isr) || (in_isr && (timeout_ms == 0U))) ++ statusInternal = osSemaphoreAcquire(*semaphore, timeout_ms); ++ else ++ statusInternal = osErrorISR; ++ ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_set_semaphore(cy_semaphore_t *semaphore, bool in_isr) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ cy_rtos_error_t statusInternal; ++ (void)in_isr; // Unused parameter in this implementation ++ ++ if (semaphore == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osSemaphoreRelease(*semaphore); ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_get_count_semaphore(cy_semaphore_t *semaphore, size_t *count) ++{ ++ cy_rslt_t status; ++ if (semaphore == NULL || count == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ *count = osSemaphoreGetCount(*semaphore); ++ status = CY_RSLT_SUCCESS; ++ } ++ return status; ++} ++ ++cy_rslt_t cy_rtos_deinit_semaphore(cy_semaphore_t *semaphore) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (semaphore == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osSemaphoreDelete(*semaphore); ++ status = error_converter(statusInternal); ++ if (status == CY_RSLT_SUCCESS) ++ { ++ free(*semaphore); ++ *semaphore = NULL; ++ } ++ } ++ ++ return status; ++} ++ ++ ++/****************************************************** ++* Events ++******************************************************/ ++ ++#define CY_RTOS_EVENT_ERRORFLAG 0x80000000UL ++#define CY_RTOS_EVENT_FLAGS 0x7FFFFFFFUL ++ ++cy_rslt_t cy_rtos_init_event(cy_event_t *event) ++{ ++ cy_rslt_t status; ++ osEventFlagsAttr_t attr; ++ ++ if (event == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ attr.name = NULL; ++ attr.attr_bits = 0U; ++ attr.cb_mem = malloc(osRtxEventFlagsCbSize); ++ attr.cb_size = osRtxEventFlagsCbSize; ++ ++ if (attr.cb_mem == NULL) ++ status = CY_RTOS_NO_MEMORY; ++ else ++ { ++ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ *event = osEventFlagsNew(&attr); ++ CY_ASSERT((*event == attr.cb_mem) || (*event == NULL)); ++ status = (*event == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_setbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ cy_rtos_error_t statusInternal; ++ (void)in_isr; // Unused parameter in this implementation ++ ++ if (event == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = (osStatus_t)osEventFlagsSet(*event, bits); ++ if ((statusInternal & CY_RTOS_EVENT_ERRORFLAG) != 0UL) ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_clearbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ cy_rtos_error_t statusInternal; ++ (void)in_isr; // Unused parameter in this implementation ++ ++ if (event == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = (osStatus_t)osEventFlagsClear(*event, bits); ++ if ((statusInternal & CY_RTOS_EVENT_ERRORFLAG) != 0UL) ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_getbits_event(cy_event_t *event, uint32_t *bits) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ ++ if ((event == NULL) || (bits == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ *bits = osEventFlagsGet(*event); ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_waitbits_event(cy_event_t *event, uint32_t *bits, bool clear, bool all, cy_time_t timeout) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ cy_rtos_error_t statusInternal; ++ uint32_t flagOption; ++ ++ if ((event == NULL) || (bits == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ flagOption = (all) ? osFlagsWaitAll : osFlagsWaitAny; ++ if (!clear) ++ flagOption |= osFlagsNoClear; ++ ++ statusInternal = (osStatus_t)osEventFlagsWait(*event, *bits, flagOption, timeout); ++ if ((statusInternal & CY_RTOS_EVENT_ERRORFLAG) == 0UL) ++ *bits = statusInternal; ++ else ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_deinit_event(cy_event_t *event) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (event == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osEventFlagsDelete(*event); ++ status = error_converter(statusInternal); ++ if (status == CY_RSLT_SUCCESS) ++ { ++ free(*event); ++ *event = NULL; ++ } ++ } ++ ++ return status; ++} ++ ++ ++/****************************************************** ++* Queues ++******************************************************/ ++ ++cy_rslt_t cy_rtos_init_queue(cy_queue_t *queue, size_t length, size_t itemsize) ++{ ++ cy_rslt_t status; ++ osMessageQueueAttr_t attr; ++ ++ if (queue == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ attr.name = NULL; ++ attr.attr_bits = 0U; ++ attr.cb_size = osRtxMessageQueueCbSize; ++ uint32_t blockSize = ((itemsize + 3U) & ~3UL) + sizeof(osRtxMessage_t); ++ attr.mq_size = blockSize * length; ++ ++ /* Note: 1 malloc for both so that they can be freed with 1 call */ ++ uint32_t cb_mem_pad = (8 - (osRtxMessageQueueCbSize & 0x07)) & 0x07; ++ attr.cb_mem = malloc(osRtxMessageQueueCbSize + cb_mem_pad + attr.mq_size); ++ if (attr.cb_mem != NULL) ++ attr.mq_mem = (uint32_t *)((uint32_t)attr.cb_mem + osRtxMessageQueueCbSize + cb_mem_pad); ++ ++ if (attr.cb_mem == NULL) ++ status = CY_RTOS_NO_MEMORY; ++ else ++ { ++ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ CY_ASSERT(((uint32_t)attr.mq_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ *queue = osMessageQueueNew(length, itemsize, &attr); ++ CY_ASSERT((*queue == attr.cb_mem) || (*queue == NULL)); ++ status = (*queue == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_put_queue(cy_queue_t *queue, const void *item_ptr, cy_time_t timeout_ms, bool in_isr) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if ((queue == NULL) || (item_ptr == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ /* Not allowed to be called in ISR if timeout != 0 */ ++ if ((!in_isr) || (in_isr && (timeout_ms == 0U))) ++ statusInternal = osMessageQueuePut(*queue, (uint8_t *)item_ptr, 0u, timeout_ms); ++ else ++ statusInternal = osErrorISR; ++ ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_get_queue(cy_queue_t *queue, void *item_ptr, cy_time_t timeout_ms, bool in_isr) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if ((queue == NULL) || (item_ptr == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ /* Not allowed to be called in ISR if timeout != 0 */ ++ if ((!in_isr) || (in_isr && (timeout_ms == 0U))) ++ statusInternal = osMessageQueueGet(*queue, (uint8_t *)item_ptr, 0u, timeout_ms); ++ else ++ statusInternal = osErrorISR; ++ ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_count_queue(cy_queue_t *queue, size_t *num_waiting) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ ++ if ((queue == NULL) || (num_waiting == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ *num_waiting = osMessageQueueGetCount(*queue); ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_space_queue(cy_queue_t *queue, size_t *num_spaces) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ ++ if ((queue == NULL) || (num_spaces == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ *num_spaces = osMessageQueueGetSpace(*queue); ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_reset_queue(cy_queue_t *queue) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (queue == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osMessageQueueReset(*queue); ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_deinit_queue(cy_queue_t *queue) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (queue == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osMessageQueueDelete(*queue); ++ status = error_converter(statusInternal); ++ ++ if (status == CY_RSLT_SUCCESS) ++ { ++ free(*queue); ++ *queue = NULL; ++ } ++ } ++ ++ return status; ++} ++ ++ ++/****************************************************** ++* Timers ++******************************************************/ ++ ++cy_rslt_t cy_rtos_init_timer(cy_timer_t *timer, cy_timer_trigger_type_t type, ++ cy_timer_callback_t fun, cy_timer_callback_arg_t arg) ++{ ++ cy_rslt_t status; ++ osTimerAttr_t attr; ++ ++ if (timer == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ attr.name = NULL; ++ attr.attr_bits = 0U; ++ attr.cb_mem = malloc(osRtxTimerCbSize); ++ attr.cb_size = osRtxTimerCbSize; ++ ++ if (attr.cb_mem == NULL) ++ status = CY_RTOS_NO_MEMORY; ++ else ++ { ++ osTimerType_t osTriggerType = (CY_TIMER_TYPE_PERIODIC == type) ++ ? osTimerPeriodic ++ : osTimerOnce; ++ ++ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); ++ *timer = osTimerNew( (osTimerFunc_t)fun, osTriggerType, (void *)arg, &attr ); ++ CY_ASSERT((*timer == attr.cb_mem) || (*timer == NULL)); ++ status = (*timer == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; ++ } ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_start_timer(cy_timer_t *timer, cy_time_t num_ms) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (timer == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ /* Get Number of ticks per second */ ++ uint32_t tick_freq = osKernelGetTickFreq(); ++ ++ /* Convert ticks count to time in milliseconds */ ++ if (tick_freq != 0) ++ { ++ uint32_t ticks = ((num_ms * tick_freq) / 1000); ++ statusInternal = osTimerStart(*timer, ticks); ++ status = error_converter(statusInternal); ++ } ++ else ++ status = CY_RTOS_GENERAL_ERROR; ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_stop_timer(cy_timer_t *timer) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (timer == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osTimerStop(*timer); ++ status = error_converter(statusInternal); ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_is_running_timer(cy_timer_t *timer, bool *state) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ ++ if ((timer == NULL) || (state == NULL)) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ *state = osTimerIsRunning(*timer); ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_deinit_timer(cy_timer_t *timer) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ if (timer == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ statusInternal = osTimerDelete(*timer); ++ status = error_converter(statusInternal); ++ ++ if (status == CY_RSLT_SUCCESS) ++ { ++ free(*timer); ++ *timer = NULL; ++ } ++ } ++ ++ return status; ++} ++ ++ ++/****************************************************** ++* Time ++******************************************************/ ++ ++cy_rslt_t cy_rtos_get_time(cy_time_t *tval) ++{ ++ cy_rslt_t status = CY_RSLT_SUCCESS; ++ uint32_t tick_freq; ++ ++ if (tval == NULL) ++ status = CY_RTOS_BAD_PARAM; ++ else ++ { ++ /* Get Number of ticks per second */ ++ tick_freq = osKernelGetTickFreq(); ++ ++ /* Convert ticks count to time in milliseconds */ ++ if (tick_freq != 0) ++ *tval = (cy_time_t)((osKernelGetTickCount() * 1000LL) / tick_freq); ++ else ++ status = CY_RTOS_GENERAL_ERROR; ++ } ++ ++ return status; ++} ++ ++cy_rslt_t cy_rtos_delay_milliseconds(cy_time_t num_ms) ++{ ++ cy_rslt_t status; ++ cy_rtos_error_t statusInternal; ++ ++ statusInternal = osDelay(num_ms); ++ status = error_converter(statusInternal); ++ ++ return status; ++} ++ ++ ++#if defined(__cplusplus) ++} ++#endif +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_gpio.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_gpio.h +new file mode 100644 +index 0000000000..08d4e5bfb1 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_gpio.h +@@ -0,0 +1,247 @@ ++/***************************************************************************//** ++* \file cyhal_gpio.h ++* ++* \brief ++* Provides a high level interface for interacting with the GPIO on Cypress devices. ++* This interface abstracts out the chip specific details. If any chip specific ++* functionality is necessary, or performance is critical the low level functions ++* can be used directly. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++/** ++* \addtogroup group_hal_gpio GPIO (General Purpose Input Output) ++* \ingroup group_hal ++* \{ ++* High level interface for configuring and interacting with general purpose input/outputs (GPIO). ++* ++* The GPIO driver provides functions to configure and initialize GPIO, and to read and write data to the pin. ++* The driver also supports interrupt generation on GPIO signals with rising, falling or both edges. ++* ++* \note The APIs in this driver need not be used if a GPIO is to be used as an input or output of peripherals like I2C or PWM. ++* The respective peripheral's driver will utilize the GPIO interface to configure and initialize its GPIO pins. ++* ++* \section subsection_gpio_features Features ++* * Configurable GPIO pin direction - \ref cyhal_gpio_direction_t ++* * Configurable GPIO pin drive modes - \ref cyhal_gpio_drive_mode_t ++* * Configurable analog and digital characteristics ++* * Configurable edge-triggered interrupts and callback assignment on GPIO events - \ref cyhal_gpio_event_t ++* ++* \section subsection_gpio_quickstart Quick Start ++* \ref cyhal_gpio_init can be used for a simple GPIO initialization by providing the pin number (pin), pin direction (direction), ++* pin drive mode (drive_mode) and the initial value on the pin (init_val). ++* ++* \section subsection_gpio_sample_snippets Code Snippets ++* ++* \subsection subsection_gpio_snippet_1 Snippet 1: Reading value from GPIO ++* The following snippet initializes GPIO pin \ref P0_0 as an input with high impedance digital drive mode and initial value = false (low). A value is read ++* from the pin and stored to a uint8_t variable (read_val). ++ ++* \snippet gpio.c snippet_cyhal_gpio_read ++ ++* \subsection subsection_gpio_snippet_2 Snippet 2: Writing value to a GPIO ++* The following snippet initializes GPIO pin \ref P0_0 as an output pin with strong drive mode and initial value = false (low). ++* A value = true (high) is written to the output driver. ++ ++* \snippet gpio.c snippet_cyhal_gpio_write ++ ++* \subsection subsection_gpio_snippet_3 Snippet 3: Reconfiguring a GPIO ++* The following snippet shows how to reconfigure a GPIO pin during run-time using the firmware. The GPIO pin \ref P0_0 ++* is first initialized as an output pin with strong drive mode. The pin is then reconfigured as an input with high impedance digital drive mode. ++* \note \ref cyhal_gpio_configure only changes the direction and the drive_mode ++* of the pin. Previously set pin value is retained. ++* ++* \snippet gpio.c snippet_cyhal_gpio_reconfigure ++ ++* \subsection subsection_gpio_snippet_4 Snippet 4: Interrupts on GPIO events ++* GPIO events can be mapped to an interrupt and assigned to a callback function. The callback function needs to be first registered and ++* then the event needs to be enabled. ++** The following snippet initializes GPIO pin \ref P0_0 as an input pin. It registers a callback function and enables detection ++* of a falling edge event to trigger the callback. ++* \note If no argument needs to be passed to the callback function then a NULL can be passed during registering.
++* ++* \snippet gpio.c snippet_cyhal_gpio_interrupt ++*/ ++ ++#pragma once ++ ++#include ++#include ++#include "cy_result.h" ++#include "cyhal_hw_types.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif /* __cplusplus */ ++ ++ ++/******************************************************************************* ++* Defines ++*******************************************************************************/ ++ ++/** Integer representation of no connect pin (required to exist in all BSPs) */ ++#define CYHAL_NC_PIN_VALUE (NC) ++ ++/******************************************************************************* ++* Enumerations ++*******************************************************************************/ ++ ++/** Pin events */ ++typedef enum { ++ CYHAL_GPIO_IRQ_NONE = 0, /**< No interrupt */ ++ CYHAL_GPIO_IRQ_RISE = 1 << 0, /**< Interrupt on rising edge */ ++ CYHAL_GPIO_IRQ_FALL = 1 << 1, /**< Interrupt on falling edge */ ++ CYHAL_GPIO_IRQ_BOTH = (CYHAL_GPIO_IRQ_RISE | CYHAL_GPIO_IRQ_FALL), /**< Interrupt on both rising and falling edges */ ++} cyhal_gpio_event_t; ++ ++/** Pin direction */ ++typedef enum { ++ CYHAL_GPIO_DIR_INPUT, /**< Input pin */ ++ CYHAL_GPIO_DIR_OUTPUT, /**< Output pin */ ++ CYHAL_GPIO_DIR_BIDIRECTIONAL, /**< Input and output pin */ ++} cyhal_gpio_direction_t; ++ ++/** Pin drive mode */ ++ ++/** \note When the drive_mode of the pin is set to CYHAL_GPIO_DRIVE_PULL_NONE , ++ * it is set to CYHAL_GPIO_DRIVE_STRONG if the direction ++ * of the pin is CYHAL_GPIO_DIR_OUTPUT or CYHAL_GPIO_DIR_BIDIRECTIONAL. ++ * If not, the drive_mode of the pin is set to CYHAL_GPIO_DRIVE_NONE. ++ */ ++typedef enum { ++ CYHAL_GPIO_DRIVE_NONE, /**< Digital Hi-Z. Input only. Input init value(s): 0 or 1 */ ++ CYHAL_GPIO_DRIVE_ANALOG, /**< Analog Hi-Z. Use only for analog purpose */ ++ CYHAL_GPIO_DRIVE_PULLUP, /**< Pull-up resistor. Input and output. Input init value(s): 1, output value(s): 0 */ ++ CYHAL_GPIO_DRIVE_PULLDOWN, /**< Pull-down resistor. Input and output. Input init value(s): 0, output value(s): 1 */ ++ CYHAL_GPIO_DRIVE_OPENDRAINDRIVESLOW, /**< Open-drain, Drives Low. Input and output. Input init value(s): 1, output value(s): 0 */ ++ CYHAL_GPIO_DRIVE_OPENDRAINDRIVESHIGH, /**< Open-drain, Drives High. Input and output. Input init value(s): 0, output value(s): 1 */ ++ CYHAL_GPIO_DRIVE_STRONG, /**< Strong output. Output only. Output init value(s): 0 or 1 */ ++ CYHAL_GPIO_DRIVE_PULLUPDOWN, /**< Pull-up and pull-down resistors. Input and output. Input init value(s): 0 or 1, output value(s): 0 or 1 */ ++ CYHAL_GPIO_DRIVE_PULL_NONE, /**< No Pull-up or pull-down resistors. Input and output. Input init value(s): 0 or 1, output value(s): 0 or 1 */ ++} cyhal_gpio_drive_mode_t; ++ ++/** GPIO callback function type */ ++typedef void (*cyhal_gpio_event_callback_t)(void *callback_arg, cyhal_gpio_event_t event); ++ ++/******************************************************************************* ++* Functions ++*******************************************************************************/ ++ ++/** Initialize the GPIO pin
++ * See \ref subsection_gpio_snippet_1. ++ * ++ * @param[in] pin The GPIO pin to initialize ++ * @param[in] direction The pin direction ++ * @param[in] drive_mode The pin drive mode ++ * @param[in] init_val Initial value on the pin ++ * ++ * @return The status of the init request ++ * ++ * Guidance for using gpio drive modes ( \ref cyhal_gpio_drive_mode_t for details). ++ * For default use drive modes: ++ * Input GPIO direction - \ref CYHAL_GPIO_DRIVE_NONE ++ * Output GPIO direction - \ref CYHAL_GPIO_DRIVE_STRONG ++ * Bidirectional GPIO - \ref CYHAL_GPIO_DRIVE_PULLUPDOWN ++ * \warning Don't use \ref CYHAL_GPIO_DRIVE_STRONG for input GPIO direction. It may cause an overcurrent issue. ++ */ ++cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drive_mode, bool init_val); ++ ++/** Uninitialize the gpio peripheral and the cyhal_gpio_t object ++ * ++ * @param[in] pin Pin number ++ */ ++void cyhal_gpio_free(cyhal_gpio_t pin); ++ ++/** Configure the GPIO pin
++ * See \ref subsection_gpio_snippet_3. ++ * ++ * @param[in] pin The GPIO pin ++ * @param[in] direction The pin direction ++ * @param[in] drive_mode The pin drive mode ++ * ++ * @return The status of the configure request ++ */ ++cy_rslt_t cyhal_gpio_configure(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drive_mode); ++ ++/** Set the output value for the pin. This only works for output & in_out pins.
++ * See \ref subsection_gpio_snippet_2. ++ * ++ * @param[in] pin The GPIO object ++ * @param[in] value The value to be set (high = true, low = false) ++ */ ++void cyhal_gpio_write(cyhal_gpio_t pin, bool value); ++ ++/** Read the input value. This only works for \ref CYHAL_GPIO_DIR_INPUT & \ref CYHAL_GPIO_DIR_BIDIRECTIONAL pins.
++ * See \ref subsection_gpio_snippet_1. ++ * ++ * @param[in] pin The GPIO object ++ * @return The value of the IO (true = high, false = low) ++ */ ++bool cyhal_gpio_read(cyhal_gpio_t pin); ++ ++/** Toggle the output value
++ * See \ref subsection_gpio_snippet_4. ++ * @param[in] pin The GPIO object ++ */ ++void cyhal_gpio_toggle(cyhal_gpio_t pin); ++ ++/** Register/clear a callback handler for pin events
++ * ++ * This function will be called when one of the events enabled by \ref cyhal_gpio_enable_event occurs. ++ * ++ * See \ref subsection_gpio_snippet_4. ++ * ++ * @param[in] pin The pin number ++ * @param[in] callback The function to call when the specified event happens. Pass NULL to unregister the handler. ++ * @param[in] callback_arg Generic argument that will be provided to the callback when called, can be NULL ++ */ ++void cyhal_gpio_register_callback(cyhal_gpio_t pin, cyhal_gpio_event_callback_t callback, void *callback_arg); ++ ++/** Enable or Disable the specified GPIO event
++ * ++ * When an enabled event occurs, the function specified by \ref cyhal_gpio_register_callback will be called. ++ * ++ * See \ref subsection_gpio_snippet_4. ++ * ++ * @param[in] pin The GPIO object ++ * @param[in] event The GPIO event ++ * @param[in] intr_priority The priority for NVIC interrupt events ++ * @param[in] enable True to turn on interrupts, False to turn off ++ */ ++void cyhal_gpio_enable_event(cyhal_gpio_t pin, cyhal_gpio_event_t event, uint8_t intr_priority, bool enable); ++ ++/******************************************************************************* ++* Backward compatibility macro. The following code is DEPRECATED and must ++* not be used in new projects ++*******************************************************************************/ ++/** \cond INTERNAL */ ++#define cyhal_gpio_register_irq(pin, priority, handler, handler_arg) cyhal_gpio_register_callback(pin, handler, handler_arg) ++#define cyhal_gpio_irq_enable(pin, event, enable) cyhal_gpio_enable_event(pin, event, CYHAL_ISR_PRIORITY_DEFAULT, enable) ++typedef cyhal_gpio_event_t cyhal_gpio_irq_event_t; ++/** \endcond */ ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ ++ ++#ifdef CYHAL_GPIO_IMPL_HEADER ++#include CYHAL_GPIO_IMPL_HEADER ++#endif /* CYHAL_GPIO_IMPL_HEADER */ ++ ++/** \} group_hal_gpio */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_sdio.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_sdio.h +new file mode 100644 +index 0000000000..d5600efd99 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_sdio.h +@@ -0,0 +1,366 @@ ++/***************************************************************************//** ++* \file cyhal_sdio.h ++* ++* \brief ++* Provides a high level interface for interacting with the Cypress SDIO interface. ++* This interface abstracts out the chip specific details. If any chip specific ++* functionality is necessary, or performance is critical the low level functions ++* can be used directly. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++/** ++* \addtogroup group_hal_sdio SDIO (Secure Digital Input Output) ++* \ingroup group_hal ++* \{ ++* High level interface to the Secure Digital Input Output (SDIO). ++* ++* This driver allows commands to be sent over the SDIO bus; the supported commands ++* can be found in \ref cyhal_sdio_command_t. Bulk data transfer is also supported ++* via cyhal_sdio_bulk_transfer(). ++* ++* The SDIO protocol is an extension of the SD ++* interface for general I/O functions. Refer to the SD Specifications Part 1 SDIO ++* Specifications Version 4.10 for more information on the SDIO protocol and specifications. ++* ++* ++* \section subsection_sdio_features Features ++* * Supports 4-bit interface ++* * Supports Ultra High Speed (UHS-I) mode ++* * Supports Default Speed (DS), High Speed (HS), SDR12, SDR25 and SDR50 speed modes ++* * Supports SDIO card interrupts in both 1-bit and 4-bit modes ++* * Supports Standard capacity (SDSC), High capacity (SDHC) and Extended capacity (SDXC) memory ++* ++* \section subsection_sdio_quickstart Quick Start ++* ++* \ref cyhal_sdio_init initializes the SDIO peripheral and passes a pointer to the SDIO block through the **obj** object of type \ref cyhal_sdio_t. ++* ++* \section subsection_sdio_code_snippets Code Snippets ++* ++* \subsection subsection_sdio_use_case_1 Snippet1: Simple SDIO Initialization example ++* The following snippet shows how to initialize the SDIO interface with a pre-defined configuration ++* ++* \snippet sdio.c snippet_cyhal_sdio_simple_init ++* ++* \subsection subsection_sdio_use_case_2 Snippet2: Configure Interrupt ++* The following snippet shows how to configure an interrupt and handle specific events. Refer \ref cyhal_sdio_event_t for different types of events. ++* ++* \snippet sdio.c snippet_cyhal_sdio_interrupt_callback ++* ++* \subsection subsection_sdio_use_case_3 Snippet3: Sending Commands ++* The following snippet shows how to send a particular command. Some steps of the card initialization have been provided for reference. Refer \ref cyhal_sdio_command_t for different commands. ++* ++* \snippet sdio.c snippet_cyhal_sdio_send_command ++* ++* \subsection subsection_sdio_use_case_4 Snippet4: Bulk Data Transfer ++* The following snippet shows how to start a bulk data transfer. ++* ++* \snippet sdio.c snippet_cyhal_sdio_bulk_transfer ++* ++* \subsection subsection_sdio_use_case_5 Snippet5: Async Data Transfer ++* ++* The following snippet shows how to start an async data transfer. ++* \snippet sdio.c snippet_cyhal_sdio_async_transfer ++*/ ++ ++#pragma once ++ ++#include ++#include ++#include "cy_result.h" ++#include "cyhal_hw_types.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/******************************************************************************* ++* Defines ++*******************************************************************************/ ++ ++#define CYHAL_SDIO_RET_NO_ERRORS (0x00) /**< No error*/ ++#define CYHAL_SDIO_RET_NO_SP_ERRORS (0x01) /**< Non-specific error code*/ ++#define CYHAL_SDIO_RET_CMD_CRC_ERROR (0x02) /**< There was a CRC error on the Command/Response*/ ++#define CYHAL_SDIO_RET_CMD_IDX_ERROR (0x04) /**< The index for the command didn't match*/ ++#define CYHAL_SDIO_RET_CMD_EB_ERROR (0x08) /**< There was an end bit error on the command*/ ++#define CYHAL_SDIO_RET_DAT_CRC_ERROR (0x10) /**< There was a data CRC Error*/ ++#define CYHAL_SDIO_RET_CMD_TIMEOUT (0x20) /**< The command didn't finish before the timeout period was over*/ ++#define CYHAL_SDIO_RET_DAT_TIMEOUT (0x40) /**< The data didn't finish before the timeout period was over*/ ++#define CYHAL_SDIO_RET_RESP_FLAG_ERROR (0x80) /**< There was an error in the resposne flag for command 53*/ ++ ++#define CYHAL_SDIO_CLOCK_ERROR (0x100) /**< Failed to initial clock for SDIO */ ++#define CYHAL_SDIO_BAD_ARGUMENT (0x200) /**< Bad argument passed for SDIO */ ++#define CYHAL_SDIO_SEMA_NOT_INITED (0x400) /**< Semaphore is not initiated */ ++#define CYHAL_SDIO_FUNC_NOT_SUPPORTED (0x800) /**< Function is not supported */ ++#define CYHAL_SDIO_CANCELED (0x1000) /**< Operation canceled */ ++#define CYHAL_SDIO_PM_PENDING_ERROR (0x2000) /**< Transfer cannot be initiated after power mode transition allowed.*/ ++ ++/* HAL return value defines */ ++ ++/** \addtogroup group_hal_results_sdio SDIO HAL Results ++ * SDIO specific return codes ++ * \ingroup group_hal_results ++ * \{ *//** ++ */ ++ ++/** Incorrect parameter value define */ ++#define CYHAL_SDIO_RSLT_ERR_BAD_PARAM \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_BAD_ARGUMENT)) ++/** Clock initialization error define */ ++#define CYHAL_SDIO_RSLT_ERR_CLOCK \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_CLOCK_ERROR)) ++/** Semaphore not initiated error define */ ++#define CYHAL_SDIO_RSLT_ERR_SEMA_NOT_INITED \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_SEMA_NOT_INITED)) ++/** Error define based on SDIO lower function return value */ ++#define CYHAL_SDIO_RSLT_ERR_FUNC_RET(retVal) \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, ((uint16_t)retVal))) ++/** Define to indicate canceled operation */ ++#define CYHAL_SDIO_RSLT_CANCELED \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_CANCELED)) ++/** Transfers are not allowed after the SDIO block has allowed power mode transition. */ ++#define CYHAL_SDIO_RSLT_ERR_PM_PENDING \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_PM_PENDING_ERROR)) ++ ++/** ++ * \} ++ */ ++ ++ ++/******************************************************************************* ++* Enumerations ++*******************************************************************************/ ++ ++/** Commands that can be issued */ ++typedef enum ++{ ++ CYHAL_SDIO_CMD_GO_IDLE_STATE = 0, //!< Go to idle state ++ CYHAL_SDIO_CMD_SEND_RELATIVE_ADDR = 3, //!< Send a relative address ++ CYHAL_SDIO_CMD_IO_SEND_OP_COND = 5, //!< Send an OP IO ++ CYHAL_SDIO_CMD_SELECT_CARD = 7, //!< Send a card select ++ CYHAL_SDIO_CMD_GO_INACTIVE_STATE = 15, //!< Go to inactive state ++ CYHAL_SDIO_CMD_IO_RW_DIRECT = 52, //!< Perform a direct read/write ++ CYHAL_SDIO_CMD_IO_RW_EXTENDED = 53, //!< Perform an extended read/write ++} cyhal_sdio_command_t; ++ ++/** Types of transfer that can be performed */ ++typedef enum ++{ ++ CYHAL_READ, //!< Read from the card ++ CYHAL_WRITE //!< Write to the card ++} cyhal_transfer_t; ++ ++/** Types of events that could be asserted by SDIO */ ++typedef enum { ++ /* Interrupt-based thread events */ ++ CYHAL_SDIO_CMD_COMPLETE = 0x00001, //!< Command Complete ++ CYHAL_SDIO_XFER_COMPLETE = 0x00002, //!< Host read/write transfer is complete ++ CYHAL_SDIO_BGAP_EVENT = 0x00004, //!< This bit is set when both read/write transaction is stopped ++ CYHAL_SDIO_DMA_INTERRUPT = 0x00008, //!< Host controller detects an SDMA Buffer Boundary during transfer ++ CYHAL_SDIO_BUF_WR_READY = 0x00010, //!< This bit is set if the Buffer Write Enable changes from 0 to 1 ++ CYHAL_SDIO_BUF_RD_READY = 0x00020, //!< This bit is set if the Buffer Read Enable changes from 0 to 1 ++ CYHAL_SDIO_CARD_INSERTION = 0x00040, //!< This bit is set if the Card Inserted in the Present State ++ CYHAL_SDIO_CARD_REMOVAL = 0x00080, //!< This bit is set if the Card Inserted in the Present State ++ CYHAL_SDIO_CARD_INTERRUPT = 0x00100, //!< The synchronized value of the DAT[1] interrupt input for SD mode ++ CYHAL_SDIO_INT_A = 0x00200, //!< Reserved: set to 0 ++ CYHAL_SDIO_INT_B = 0x00400, //!< Reserved: set to 0 ++ CYHAL_SDIO_INT_C = 0x00800, //!< Reserved: set to 0 ++ CYHAL_SDIO_RE_TUNE_EVENT = 0x01000, //!< Reserved: set to 0 ++ CYHAL_SDIO_FX_EVENT = 0x02000, //!< This status is set when R[14] of response register is set to 1 ++ CYHAL_SDIO_CQE_EVENT = 0x04000, //!< This status is set if Command Queuing/Crypto event has occurred ++ CYHAL_SDIO_ERR_INTERRUPT = 0x08000, //!< If any of the bits in the Error Interrupt Status register are set ++ ++ /* Non-interrupt-based thread events */ ++ CYHAL_SDIO_GOING_DOWN = 0x10000, //!< The interface is going away (eg: powering down for some period of time) ++ CYHAL_SDIO_COMING_UP = 0x20000, //!< The interface is back up (eg: came back from a low power state) ++ ++ CYHAL_SDIO_ALL_INTERRUPTS = 0x0E1FF, //!< Is used to enable/disable all interrupts events ++} cyhal_sdio_event_t; ++ ++ ++/******************************************************************************* ++* Data Structures ++*******************************************************************************/ ++ ++/** @brief SDIO controller initial configuration */ ++typedef struct ++{ ++ uint32_t frequencyhal_hz; //!< Clock frequency, in hertz ++ uint16_t block_size; //!< Block size ++} cyhal_sdio_cfg_t; ++ ++/** Callback for SDIO events */ ++typedef void (*cyhal_sdio_event_callback_t)(void *callback_arg, cyhal_sdio_event_t event); ++ ++ ++/******************************************************************************* ++* Data Structures ++*******************************************************************************/ ++/** Initialize the SDIO peripheral ++ * ++ * @param[out] obj Pointer to an SDIO object. ++ * The caller must allocate the memory for this object but the init ++ * function will initialize its contents. ++ * @param[out] clk The pin connected to the clk signal ++ * @param[in] cmd The pin connected to the command signal ++ * @param[in] data0 The pin connected to the data0 signal ++ * @param[in] data1 The pin connected to the data1 signal ++ * @param[in] data2 The pin connected to the data2 signal ++ * @param[in] data3 The pin connected to the data3 signal ++ * @return The status of the init request ++ * ++ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_1 for more information. ++ */ ++cy_rslt_t cyhal_sdio_init(cyhal_sdio_t *obj, cyhal_gpio_t cmd, cyhal_gpio_t clk, cyhal_gpio_t data0, cyhal_gpio_t data1, cyhal_gpio_t data2, cyhal_gpio_t data3); ++ ++/** Release the SDIO block. ++ * ++ * @param[in,out] obj The SDIO object ++ */ ++void cyhal_sdio_free(cyhal_sdio_t *obj); ++ ++/** Configure the SDIO block with required parameters. Refer \ref cyhal_sdio_cfg_t for more information. ++ * ++ * @param[in,out] obj The SDIO object ++ * @param[in] config The SDIO configuration to apply ++ * @return The status of the configure request. ++ * ++ * Returns \ref CY_RSLT_SUCCESS on successful operation. ++ */ ++cy_rslt_t cyhal_sdio_configure(cyhal_sdio_t *obj, const cyhal_sdio_cfg_t *config); ++ ++/** Sends command to the SDIO device. See \ref cyhal_sdio_command_t for list of available commands. ++ * ++ * This will block until the command is completed. ++ * ++ * @param[in,out] obj The SDIO object ++ * @param[in] direction The direction of transfer (read/write) ++ * @param[in] command The command to send to the SDIO device ++ * @param[in] argument The argument to the command ++ * @param[out] response The response from the SDIO device ++ * @return The status of the command transfer. ++ * ++ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_3 for more information. ++ */ ++cy_rslt_t cyhal_sdio_send_cmd(const cyhal_sdio_t *obj, cyhal_transfer_t direction, cyhal_sdio_command_t command, uint32_t argument, uint32_t* response); ++ ++/** Performs a bulk data transfer. Sends \ref CYHAL_SDIO_CMD_IO_RW_EXTENDED command (CMD=53) which allows writing and reading of a large number of I/O registers with a single command. ++ * ++ * This will block until the transfer is completed. ++ * ++ * @param[in,out] obj The SDIO object ++ * @param[in] direction The direction of transfer (read/write) ++ * @param[in] argument The argument to the command ++ * @param[in] data The data to send to the SDIO device. A bulk transfer is done in block ++ * size (default: 64 bytes) chunks for better performance. Therefore, ++ * the size of the data buffer passed into this function must be at least ++ * `length` bytes and a multiple of the block size. For example, when ++ * requesting to read 100 bytes of data with a block size 64 bytes, the ++ * data buffer needs to be at least 128 bytes. The first 100 bytes of data ++ * in the buffer will be the requested data. ++ * @param[in] length The number of bytes to send ++ * @param[out] response The response from the SDIO device ++ * @return The status of the bulk transfer operation. ++ * ++ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_4 for more information. ++ */ ++cy_rslt_t cyhal_sdio_bulk_transfer(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t* data, uint16_t length, uint32_t* response); ++ ++/** Performs a bulk asynchronous data transfer by issuing the \ref CYHAL_SDIO_CMD_IO_RW_EXTENDED command(CMD=53) to the SDIO block. ++ * After exiting this function the \ref CYHAL_SDIO_CMD_COMPLETE and \ref CYHAL_SDIO_XFER_COMPLETE events are not asserted. ++ * ++ * To complete the asynchronous transfer, call \ref cyhal_sdio_is_busy() ++ * until it returns false. ++ * The \ref CYHAL_SDIO_CMD_COMPLETE and \ref CYHAL_SDIO_XFER_COMPLETE events are enabled ++ * after the asynchronous transfer is complete and in the condition they were ++ * enabled in before the transfer operation started. Handle these events in the interrupt callback. ++ * ++ * When the transfer is complete, the \ref CYHAL_SDIO_XFER_COMPLETE event will be raised. ++ * See \ref cyhal_sdio_register_callback and \ref cyhal_sdio_enable_event. ++ * ++ * @param[in,out] obj The SDIO object ++ * @param[in] direction The direction of transfer (read/write) ++ * @param[in] argument The argument to the command ++ * @param[in] data The data to send to the SDIO device ++ * @param[in] length The number of bytes to send ++ * @return The status of the async tranfer operation. ++ * ++ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_5 for more information. ++ */ ++cy_rslt_t cyhal_sdio_transfer_async(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t* data, uint16_t length); ++ ++/** Checks if the specified SDIO is in use ++ * ++ * @param[in] obj The SDIO peripheral to check ++ * @return true if SDIO is in use. false, otherwise. ++ */ ++bool cyhal_sdio_is_busy(const cyhal_sdio_t *obj); ++ ++/** Abort an SDIO transfer ++ * ++ * @param[in] obj The SDIO peripheral to stop ++ * @return The status of the abort_async request. ++ * ++ * Returns \ref CY_RSLT_SUCCESS on successful operation. ++ */ ++cy_rslt_t cyhal_sdio_abort_async(const cyhal_sdio_t *obj); ++ ++/** Register an SDIO event callback to be invoked when the event is triggered. ++ * ++ * This function will be called when one of the events enabled by \ref cyhal_sdio_enable_event occurs. ++ * ++ * @param[in] obj The SDIO object ++ * @param[in] callback The callback function which will be invoked when the event triggers ++ * @param[in] callback_arg Generic argument that will be provided to the callback when executed ++ * ++ * Refer \ref subsection_sdio_use_case_2 for more implementation. ++ */ ++void cyhal_sdio_register_callback(cyhal_sdio_t *obj, cyhal_sdio_event_callback_t callback, void *callback_arg); ++ ++/** Enables callbacks to be triggered for specified SDIO events. Refer \ref cyhal_sdio_event_t for all events. ++ * ++ * @param[in] obj The SDIO object ++ * @param[in] event The SDIO event type ++ * @param[in] intr_priority The priority for NVIC interrupt events ++ * @param[in] enable Set to true to enable events, or false to disable them ++ * ++ * Refer \ref subsection_sdio_use_case_2 for more information. ++ */ ++void cyhal_sdio_enable_event(cyhal_sdio_t *obj, cyhal_sdio_event_t event, uint8_t intr_priority, bool enable); ++ ++/******************************************************************************* ++* Backward compatibility macro. The following code is DEPRECATED and must ++* not be used in new projects ++*******************************************************************************/ ++/** \cond INTERNAL */ ++#define cyhal_sdio_register_irq cyhal_sdio_register_callback ++#define cyhal_sdio_irq_enable(obj, event, enable) cyhal_sdio_enable_event(obj, event, CYHAL_ISR_PRIORITY_DEFAULT, enable) ++typedef cyhal_sdio_event_t cyhal_sdio_irq_event_t; ++typedef cyhal_sdio_event_callback_t cyhal_sdio_irq_handler_t; ++/** \endcond */ ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#ifdef CYHAL_SDIO_IMPL_HEADER ++#include CYHAL_SDIO_IMPL_HEADER ++#endif /* CYHAL_SDIO_IMPL_HEADER */ ++ ++/** \} group_hal_sdio */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_spi.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_spi.h +new file mode 100644 +index 0000000000..f5ba47669f +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface/cyhal_spi.h +@@ -0,0 +1,383 @@ ++/***************************************************************************//** ++* \file cyhal_spi.h ++* ++* \brief ++* Provides a high level interface for interacting with the Cypress SPI. ++* This interface abstracts out the chip specific details. If any chip specific ++* functionality is necessary, or performance is critical the low level functions ++* can be used directly. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++/** ++* \addtogroup group_hal_spi SPI (Serial Peripheral Interface) ++* \ingroup group_hal ++* \{ ++* High level interface for interacting with the Serial Peripheral Interface (SPI). ++* ++* The SPI protocol is a synchronous serial interface protocol. Devices operate ++* in either master or slave mode. The master initiates the data transfer. ++* ++* Motorola SPI modes 0, 1, 2, and 3 are supported, with either MSB or LSB first. ++* The operating mode and data frame size can be configured via \ref cyhal_spi_cfg_t. ++* ++* \section section_spi_features Features ++* * Supports master and slave functionality. ++* * Supports Motorola modes - 0, 1, 2 and 3 - \ref cyhal_spi_mode_t ++* * MSb or LSb first shift direction - \ref cyhal_spi_mode_t ++* * Master supports up to four slave select lines ++* * Supports data frame size of 8 or 16 bits ++* * Configurable interrupt and callback assignment on SPI events: ++* Data transfer to FIFO complete, Transfer complete and Transmission error - \ref cyhal_spi_event_t ++* * Supports changing baud rate of the transaction in run time. ++* * Provides functions to send/receive a single byte or block of data. ++* ++* \section section_spi_quickstart Quick Start ++* ++* Initialise a SPI master or slave interface using \ref cyhal_spi_init() and provide the SPI pins (mosi, miso, sclk, ssel), ++* number of bits per frame (data_bits) and SPI Motorola mode. The data rate can be set using \ref cyhal_spi_set_frequency().
++* See \ref section_spi_snippets for code snippets to send or receive the data. ++* ++* \section section_spi_snippets Code snippets ++* ++* \subsection subsection_spi_snippet_1 Snippet 1: SPI Master - Single byte transfer operation (Read and Write) ++* The following code snippet initializes an SPI Master interface using the \ref cyhal_spi_init(). The data rate of transfer is set using \ref cyhal_spi_set_frequency(). ++* The code snippet shows how to transfer a single byte of data using \ref cyhal_spi_send() and \ref cyhal_spi_recv(). ++* \snippet spi.c snippet_cyhal_spi_master_byte_operation ++* ++* \subsection subsection_spi_snippet_2 Snippet 2: SPI Slave - Single byte transfer operation (Read and Write) ++* The following code snippet initializes an SPI Slave interface using the \ref cyhal_spi_init(). The data rate of transfer is set using \ref cyhal_spi_set_frequency. ++* The code snippet shows how to transfer a single byte of data using \ref cyhal_spi_send() and \ref cyhal_spi_recv. ++* \snippet spi.c snippet_cyhal_spi_slave_byte_operation ++* ++* \subsection subsection_spi_snippet_3 Snippet 3: SPI Block Data transfer ++* The following snippet sends and receives an array of data in a single SPI transaction using \ref cyhal_spi_transfer(). The example ++* uses SPI master to transmit 5 bytes of data and receive 5 bytes of data in a single transaction. ++* \snippet spi.c snippet_cyhal_spi_block_data_transfer ++* ++* \subsection subsection_spi_snippet_4 Snippet 4: Interrupts on SPI events ++* SPI interrupt events ( \ref cyhal_spi_event_t) can be mapped to an interrupt and assigned to a callback function. ++* The callback function needs to be first registered and then the event needs to be enabled. ++* The following snippet initialises a SPI master to perform a block transfer using \ref cyhal_spi_transfer_async(). This is a non-blocking function. ++* A callback function is registered using \ref cyhal_spi_register_callback to notify whenever the SPI transfer is complete. ++* \snippet spi.c snippet_cyhal_spi_interrupt_callback_events ++ ++* \section subsection_spi_moreinfor More Information ++* ++* * mtb-example-psoc6-spi-master: This example project demonstrates ++* use of SPI (HAL) resource in PSoC® 6 MCU in Master mode to write data to an SPI slave. ++* ++*/ ++ ++#pragma once ++ ++#include ++#include ++#include "cy_result.h" ++#include "cyhal_hw_types.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/** \addtogroup group_hal_results_spi SPI HAL Results ++ * SPI specific return codes ++ * \ingroup group_hal_results ++ * \{ *//** ++ */ ++ ++/** Bad argument */ ++#define CYHAL_SPI_RSLT_BAD_ARGUMENT \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 0)) ++/** Failed to initialize SPI clock */ ++#define CYHAL_SPI_RSLT_CLOCK_ERROR \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 1)) ++/** Failed to Transfer SPI data */ ++#define CYHAL_SPI_RSLT_TRANSFER_ERROR \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 2)) ++/** Provided clock is not supported by SPI */ ++#define CYHAL_SPI_RSLT_CLOCK_NOT_SUPPORTED \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 3)) ++/** Provided PIN configuration is not supported by SPI */ ++#define CYHAL_SPI_RSLT_PIN_CONFIG_NOT_SUPPORTED \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 5)) ++/** Provided PIN configuration is not supported by SPI */ ++#define CYHAL_SPI_RSLT_INVALID_PIN_API_NOT_SUPPORTED \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 6)) ++/** The requested resource type is invalid */ ++#define CYHAL_SPI_RSLT_ERR_INVALID_PIN \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 7)) ++/** Cannot configure SSEL signal */ ++#define CYHAL_SPI_RSLT_ERR_CANNOT_CONFIG_SSEL \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 8)) ++/** Cannot switch SSEL - device is busy or incorrect pin provided */ ++#define CYHAL_SPI_RSLT_ERR_CANNOT_SWITCH_SSEL \ ++ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 9)) ++ ++/** ++ * \} ++ */ ++ ++/** Compatibility define for cyhal_spi_set_frequency. */ ++#define cyhal_spi_frequency cyhal_spi_set_frequency ++ ++/** SPI interrupt triggers */ ++typedef enum { ++ /** All transfer data has been moved into data FIFO */ ++ CYHAL_SPI_IRQ_DATA_IN_FIFO = 1 << 1, ++ /** Transfer complete. */ ++ CYHAL_SPI_IRQ_DONE = 1 << 2, ++ /** An error occurred while transferring data */ ++ CYHAL_SPI_IRQ_ERROR = 1 << 3, ++} cyhal_spi_event_t; ++ ++/** SPI Slave Select polarity */ ++typedef enum { ++ /** SSEL signal is active low */ ++ CYHAL_SPI_SSEL_ACTIVE_LOW = 0, ++ /** SSEL signal is active high */ ++ CYHAL_SPI_SSEL_ACTIVE_HIGH = 1, ++} cyhal_spi_ssel_polarity_t; ++ ++/** Handler for SPI interrupts */ ++typedef void (*cyhal_spi_event_callback_t)(void *callback_arg, cyhal_spi_event_t event); ++ ++/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the LSB is sent first. */ ++#define CYHAL_SPI_MODE_FLAG_LSB (0x01u) ++/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the CPHA=1. */ ++#define CYHAL_SPI_MODE_FLAG_CPHA (0x02u) ++/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the CPOL=1. */ ++#define CYHAL_SPI_MODE_FLAG_CPOL (0x04u) ++/** Creates a \ref cyhal_spi_mode_t value given the cpol, cpha, lsb values. */ ++#define CYHAL_SPI_MODE(cpol, cpha, lsb) (((cpol > 0) ? CYHAL_SPI_MODE_FLAG_CPOL : 0) | \ ++ ((cpha > 0) ? CYHAL_SPI_MODE_FLAG_CPHA : 0) | \ ++ (( lsb > 0) ? CYHAL_SPI_MODE_FLAG_LSB : 0)) ++ ++/** SPI operating modes */ ++typedef enum ++{ ++ /** Standard motorola SPI CPOL=0, CPHA=0 with MSB first operation */ ++ CYHAL_SPI_MODE_00_MSB = CYHAL_SPI_MODE(0, 0, 0), ++ /** Standard motorola SPI CPOL=0, CPHA=0 with LSB first operation */ ++ CYHAL_SPI_MODE_00_LSB = CYHAL_SPI_MODE(0, 0, 1), ++ /** Standard motorola SPI CPOL=0, CPHA=1 with MSB first operation */ ++ CYHAL_SPI_MODE_01_MSB = CYHAL_SPI_MODE(0, 1, 0), ++ /** Standard motorola SPI CPOL=0, CPHA=1 with LSB first operation */ ++ CYHAL_SPI_MODE_01_LSB = CYHAL_SPI_MODE(0, 1, 1), ++ /** Standard motorola SPI CPOL=1, CPHA=0 with MSB first operation */ ++ CYHAL_SPI_MODE_10_MSB = CYHAL_SPI_MODE(1, 0, 0), ++ /** Standard motorola SPI CPOL=1, CPHA=0 with LSB first operation */ ++ CYHAL_SPI_MODE_10_LSB = CYHAL_SPI_MODE(1, 0, 1), ++ /** Standard motorola SPI CPOL=1, CPHA=1 with MSB first operation */ ++ CYHAL_SPI_MODE_11_MSB = CYHAL_SPI_MODE(1, 1, 0), ++ /** Standard motorola SPI CPOL=1, CPHA=1 with LSB first operation */ ++ CYHAL_SPI_MODE_11_LSB = CYHAL_SPI_MODE(1, 1, 1), ++} cyhal_spi_mode_t; ++ ++/** @brief Initial SPI configuration. */ ++typedef struct ++{ ++ cyhal_spi_mode_t mode; //!< The operating mode ++ uint8_t data_bits; //!< The number of bits per transfer ++ bool is_slave; //!< Whether the peripheral is operating as slave or master ++} cyhal_spi_cfg_t; ++ ++/** Initialize the SPI peripheral ++ * ++ * Configures the pins used by SPI, sets a default format and frequency, and enables the peripheral ++ * @param[out] obj Pointer to a SPI object. The caller must allocate the memory ++ * for this object but the init function will initialize its contents. ++ * @param[in] mosi The pin to use for MOSI ++ * @note At least MOSI or MISO pin should be non-NC ++ * @param[in] miso The pin to use for MISO ++ * @note At least MOSI or MISO pin should be non-NC ++ * @param[in] sclk The pin to use for SCLK ++ * @note This pin cannot be NC ++ * @param[in] ssel The pin to use for SSEL ++ * @note Provided pin will be configured for \ref CYHAL_SPI_SSEL_ACTIVE_LOW polarity and set as active. This can be changed ++ * (as well as additional ssel pins can be added) by \ref cyhal_spi_slave_select_config and \ref cyhal_spi_select_active_ssel ++ * functions. This pin can be NC. ++ * @param[in] clk The clock to use can be shared, if not provided a new clock will be allocated ++ * @param[in] bits The number of bits per frame ++ * @note bits should be 8 or 16 ++ * @param[in] mode The SPI mode (clock polarity, phase, and shift direction) ++ * @param[in] is_slave false for master mode or true for slave mode operation ++ * @return The status of the init request ++ */ ++cy_rslt_t cyhal_spi_init(cyhal_spi_t *obj, cyhal_gpio_t mosi, cyhal_gpio_t miso, cyhal_gpio_t sclk, cyhal_gpio_t ssel, ++ const cyhal_clock_t *clk, uint8_t bits, cyhal_spi_mode_t mode, bool is_slave); ++ ++/** Release a SPI object ++ * ++ * Return the peripheral, pins and clock owned by the SPI object to their reset state ++ * @param[in,out] obj The SPI object to deinitialize ++ */ ++void cyhal_spi_free(cyhal_spi_t *obj); ++ ++/** Set the SPI baud rate ++ * ++ * Actual frequency may differ from the desired frequency due to available dividers and bus clock ++ * Configures the SPI peripheral's baud rate ++ * @param[in,out] obj The SPI object to configure ++ * @param[in] hz The baud rate in Hz ++ * @return The status of the set_frequency request ++ */ ++cy_rslt_t cyhal_spi_set_frequency(cyhal_spi_t *obj, uint32_t hz); ++ ++/** Configures provided ssel pin to work as SPI slave select with specified polarity. ++ * ++ * Multiple pins can be configured as SPI slave select pins. Please refer to device datasheet for details. Switching ++ * between configured slave select pins is done by \ref cyhal_spi_select_active_ssel function. ++ * Unless modified with this function, the SSEL pin provided as part of \ref cyhal_spi_init is the default. ++ * @param[in] obj The SPI object to add slave select for ++ * @param[in] ssel Slave select pin to be added ++ * @param[in] polarity Polarity of slave select ++ * @return The status of ssel pin configuration ++ */ ++cy_rslt_t cyhal_spi_slave_select_config(cyhal_spi_t *obj, cyhal_gpio_t ssel, cyhal_spi_ssel_polarity_t polarity); ++ ++/** Selects an active slave select line from one of available. ++ * ++ * This function is applicable for the master and slave. ++ * SSEL pin should be configured by \ref cyhal_spi_slave_select_config or \ref cyhal_spi_init functions prior ++ * to selecting it as active. The active slave select line will automatically be toggled as part of any transfer. ++ * @param[in] obj The SPI object for switching ++ * @param[in] ssel Slave select pin to be set as active ++ * @return CY_RSLT_SUCCESS if slave select was switched successfully, otherwise - CYHAL_SPI_RSLT_ERR_CANNOT_SWITCH_SSEL ++ */ ++cy_rslt_t cyhal_spi_select_active_ssel(cyhal_spi_t *obj, cyhal_gpio_t ssel); ++ ++/** Synchronously get a received value out of the SPI receive buffer ++ * ++ * In Master mode - transmits fill-in value and read the data from RxFifo ++ * In Slave mode - Blocks until a value is available ++ * ++ * @param[in] obj The SPI peripheral to read ++ * @param[in] value The value received ++ * @return The status of the read request ++ * @note ++ * - In Master mode, MISO pin required to be non-NC for this API to operate ++ * - In Slave mode, MOSI pin required to be non-NC for this API to operate ++ */ ++cy_rslt_t cyhal_spi_recv(cyhal_spi_t *obj, uint32_t* value); ++ ++/** Synchronously send a byte out ++ * ++ * In Master mode transmits value to slave and read/drop a value from the RxFifo. ++ * In Slave mode writes a value to TxFifo ++ * ++ * @param[in] obj The SPI peripheral to use for sending ++ * @param[in] value The value to send ++ * @return The status of the write request ++ * @note ++ * - In Master mode, MOSI pin required to be non-NC for this API to operate ++ * - In Slave mode, MISO pin required to be non-NC for this API to operate ++ */ ++cy_rslt_t cyhal_spi_send(cyhal_spi_t *obj, uint32_t value); ++ ++/** Synchronously Write a block out and receive a value ++ * ++ * The total number of bytes sent and received will be the maximum of tx_length ++ * and rx_length. The bytes written will be padded (at the end) with the value ++ * given by write_fill. ++ * ++ * This function will block for the duration of the transfer. \ref cyhal_spi_transfer_async ++ * can be used for non-blocking transfers. ++ * ++ * @param[in] obj The SPI peripheral to use for sending ++ * @param[in] tx Pointer to the byte-array of data to write to the device ++ * @param[in,out] tx_length Number of bytes to write, updated with the number actually written ++ * @param[out] rx Pointer to the byte-array of data to read from the device ++ * @param[in,out] rx_length Number of bytes to read, updated with the number actually read ++ * @param[in] write_fill Default data transmitted while performing a read ++ * @return The status of the transfer request ++ * @note Both MOSI and MISO pins required to be non-NC for this API to operate ++ */ ++cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, uint8_t write_fill); ++ ++/** Start an asynchronous SPI transfer. ++ * ++ * This will transfer `rx_length` bytes into the buffer pointed to by `rx`, while simultaneously transfering ++ * `tx_length` bytes of data from the buffer pointed to by `tx`, both in the background. ++ * When the transfer is complete, the @ref CYHAL_SPI_IRQ_DONE event will be raised. ++ * See @ref cyhal_spi_register_callback and @ref cyhal_spi_enable_event. ++ * \note For blocking transfers cyhal_spi_transfer can be used. ++ * ++ * @param[in] obj The SPI object that holds the transfer information ++ * @param[in] tx The transmit buffer ++ * @param[in,out] tx_length The number of bytes to transmit ++ * @param[out] rx The receive buffer ++ * @param[in,out] rx_length The number of bytes to receive ++ * @return The status of the transfer_async request ++ * @note Both MOSI and MISO pins required to be non-NC for this API to operate ++ */ ++cy_rslt_t cyhal_spi_transfer_async(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length); ++ ++/** Checks if the specified SPI peripheral is in use ++ * ++ * @param[in] obj The SPI peripheral to check ++ * @return Indication of whether the SPI is still transmitting ++ */ ++bool cyhal_spi_is_busy(cyhal_spi_t *obj); ++ ++/** Abort an SPI transfer ++ * ++ * @param[in] obj The SPI peripheral to stop ++ * @return The status of the abort_async request ++ */ ++cy_rslt_t cyhal_spi_abort_async(cyhal_spi_t *obj); ++ ++/** Register a SPI callback handler ++ * ++ * This function will be called when one of the events enabled by \ref cyhal_spi_enable_event occurs. ++ * ++ * @param[in] obj The SPI object ++ * @param[in] callback The callback handler which will be invoked when the interrupt fires ++ * @param[in] callback_arg Generic argument that will be provided to the callback when called ++ */ ++void cyhal_spi_register_callback(cyhal_spi_t *obj, cyhal_spi_event_callback_t callback, void *callback_arg); ++ ++/** Configure SPI interrupt. This function is used for word-approach ++ * ++ * When an enabled event occurs, the function specified by \ref cyhal_spi_register_callback will be called. ++ * ++ * @param[in] obj The SPI object ++ * @param[in] event The SPI event type ++ * @param[in] intr_priority The priority for NVIC interrupt events ++ * @param[in] enable True to turn on interrupts, False to turn off ++ */ ++void cyhal_spi_enable_event(cyhal_spi_t *obj, cyhal_spi_event_t event, uint8_t intr_priority, bool enable); ++ ++/******************************************************************************* ++* Backward compatibility macro. The following code is DEPRECATED and must ++* not be used in new projects ++*******************************************************************************/ ++/** \cond INTERNAL */ ++typedef cyhal_spi_event_t cyhal_spi_irq_event_t; ++/** \endcond */ ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#ifdef CYHAL_SPI_IMPL_HEADER ++#include CYHAL_SPI_IMPL_HEADER ++#endif /* CYHAL_SPI_IMPL_HEADER */ ++ ++/** \} group_hal_spi */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_hal.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_hal.c +new file mode 100644 +index 0000000000..f5a0716697 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_hal.c +@@ -0,0 +1,63 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides cyhal porting to generic mbed APIs ++ */ ++#include "cyhal.h" ++#include "mbed_thread.h" ++#include "mbed_wait_api.h" ++ ++static cyhal_sdio_t sdio_obj; ++ ++/* Edit Pin configuration */ ++const pinconfig_t PinConfig[] = { ++ ++ [CYBSP_WIFI_WL_REG_ON] = WIFI_WL_REG_ON, ++#ifdef CYBSP_WIFI_32K_CLK ++ [CYBSP_WIFI_32K_CLK] = WIFI_32K_CLK, ++#endif /* CYBSP_WIFI_32K_CLK */ ++ [CYBSP_LED1 ] = BSP_LED1, ++ [CYBSP_LED2 ] = BSP_LED2, ++ [CYBSP_WIFI_SDIO_CMD] = WIFI_SDIO_CMD, ++ [CYBSP_WIFI_SDIO_CLK] = WIFI_SDIO_CLK, ++ [CYBSP_WIFI_SDIO_D0 ] = WIFI_SDIO_D0, ++ [CYBSP_WIFI_SDIO_D1 ] = WIFI_SDIO_D1, ++ [CYBSP_WIFI_SDIO_D2 ] = WIFI_SDIO_D2, ++ [CYBSP_WIFI_SDIO_D3 ] = WIFI_SDIO_D3, ++ [CYBSP_SDIO_OOB_IRQ ] = WIFI_SDIO_OOB_IRQ //VIKR ++}; ++ ++void Cy_SysLib_Delay(uint32_t milliseconds) ++{ ++ thread_sleep_for(milliseconds); ++} ++ ++void Cy_SysLib_DelayUs(uint16_t microseconds) ++{ ++ wait_us(microseconds); ++} ++ ++void cyhal_system_delay_ms(uint32_t milliseconds) ++{ ++ Cy_SysLib_Delay(milliseconds); ++} ++ ++cyhal_sdio_t *cybsp_get_wifi_sdio_obj(void) ++{ ++ return &sdio_obj; ++} +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_syslib.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_syslib.h +new file mode 100644 +index 0000000000..7671d853cf +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_syslib.h +@@ -0,0 +1,592 @@ ++/***************************************************************************//** ++* \file cy_syslib.h ++* \version 2.40.1 ++* ++* Provides an API declaration of the SysLib driver. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2016-2019 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++/** ++* \addtogroup group_syslib ++* \{ ++* The system libraries provide APIs that can be called in the user application ++* to handle the timing, logical checking or register. ++* ++* The functions and other declarations used in this driver are in cy_syslib.h. ++* You can include cy_pdl.h (ModusToolbox only) to get access to all functions ++* and declarations in the PDL. ++* ++* The SysLib driver contains a set of different system functions. These functions ++* can be called in the application routine. Major features of the system library: ++* * Delay functions ++* * The register Read/Write macro ++* * Assert and Halt ++* * Assert Classes and Levels ++* * A software reset ++* * Reading the reset cause ++* * An API to invalidate the flash cache and buffer ++* * Data manipulation macro ++* * A variable type definition from MISRA-C which specifies signedness ++* * Cross compiler compatible attributes ++* * Getting a silicon-unique ID API ++* * Setting wait states API ++* * Resetting the backup domain API ++* * APIs to serve Fault handler ++* ++* \section group_syslib_configuration Configuration Considerations ++* Assertion Usage
++* Use the CY_ASSERT() macro to check expressions that must be true as long as the ++* program is running correctly. It is a convenient way to insert sanity checks. ++* The CY_ASSERT() macro is defined in the cy_syslib.h file which is part of ++* the PDL library. The behavior of the macro is as follows: if the expression ++* passed to the macro is false, output an error message that includes the file ++* name and line number, and then halts the CPU. \n ++* In case of fault, the CY_ASSERT() macro calls the Cy_SysLib_AssertFailed() function. ++* This is a weakly linked function. The default implementation stores the file ++* name and line number of the ASSERT into global variables, cy_assertFileName ++* and cy_assertLine . It then calls the Cy_SysLib_Halt() function. ++* \note Firmware can redefine the Cy_SysLib_AssertFailed() function for custom processing. ++* ++* The PDL source code uses this assert mechanism extensively. It is recommended ++* that you enable asserts when debugging firmware. \n ++* Assertion Classes and Levels
++* The PDL defines three assert classes, which correspond to different kinds ++* of parameters. There is a corresponding assert "level" for each class. ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++*
Class MacroLevel MacroType of check
CY_ASSERT_CLASS_1CY_ASSERT_L1A parameter that could change between different PSoC devices ++* (e.g. the number of clock paths)
CY_ASSERT_CLASS_2CY_ASSERT_L2A parameter that has fixed limits such as a counter period
CY_ASSERT_CLASS_3CY_ASSERT_L3A parameter that is an enum constant
++* Firmware defines which ASSERT class is enabled by defining CY_ASSERT_LEVEL. ++* This is a compiler command line argument, similar to how the DEBUG / NDEBUG ++* macro is passed. \n ++* Enabling any class also enables any lower-numbered class. ++* CY_ASSERT_CLASS_3 is the default level, and it enables asserts for all three ++* classes. The following example shows the command-line option to enable all ++* the assert levels: ++* \code -D CY_ASSERT_LEVEL=CY_ASSERT_CLASS_3 \endcode ++* \note The use of special characters, such as spaces, parenthesis, etc. must ++* be protected with quotes. ++* ++* After CY_ASSERT_LEVEL is defined, firmware can use ++* one of the three level macros to make an assertion. For example, if the ++* parameter can vary between devices, firmware uses the L1 macro. ++* \code CY_ASSERT_L1(clkPath < SRSS_NUM_CLKPATH); \endcode ++* If the parameter has bounds, firmware uses L2. ++* \code CY_ASSERT_L2(trim <= CY_CTB_TRIM_VALUE_MAX); \endcode ++* If the parameter is an enum, firmware uses L3. ++* \code CY_ASSERT_L3(config->LossAction <= CY_SYSCLK_CSV_ERROR_FAULT_RESET); \endcode ++* Each check uses the appropriate level macro for the kind of parameter being checked. ++* If a particular assert class/level is not enabled, then the assert does nothing. ++* ++* \section group_syslib_more_information More Information ++* Refer to the technical reference manual (TRM). ++* ++* \section group_syslib_MISRA MISRA-C Compliance ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++*
MISRA RuleRule Class (Required/Advisory)Rule DescriptionDescription of Deviation(s)
1.2RNo reliance shall be placed on undefined or unspecified behaviour.This specific behavior is explicitly covered in rule 20.1.
2.1RThis function contains a mixture of in-line assembler statements and C statements.This si required by design of the Cy_SysLib_Halt function.
18.4RUnions shall not be used.The unions are used for CFSR, HFSR and SHCSR Fault Status Registers ++* content access as a word in code and as a structure during debug.
19.13AThe # and ## operators should not be used.The ## preprocessor operator is used in macros to form the field mask.
20.1RReserved identifiers, macros and functions in the standard library, shall not be ++* defined, redefined or undefined.The driver defines the macros with leading underscores ++* (_CLR_SET_FLD/_BOOL2FLD/_FLD2BOOL) and therefore generates this MISRA violation.
++* ++* \section group_syslib_changelog Changelog ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++* ++*
VersionChangesReason for Change
2.40.1Correct the CY_RAMFUNC_BEGIN macro for the IAR compiler.Removed the IAR compiler warning.
2.40Added new macros CY_SYSLIB_DIV_ROUND and CY_SYSLIB_DIV_ROUNDUP to easy perform integer division with rounding.Improve PDL code base.
2.30Updated implementation of the Cy_SysLib_AsmInfiniteLoop() function to be compatible with ARMC6.Provided support for the ARM Compiler 6.
Minor documentation edits.Documentation update and clarification.
Added new macros CY_RAMFUNC_BEGIN and CY_RAMFUNC_END for convenient placement function in RAM for all supported compilers.Improve user experience.
2.20Updated implementation of the \ref Cy_SysLib_AssertFailed() function to be available in Release and Debug modes.Provided support for the PDL static library in Release mode.
Minor documentation edits.Documentation update and clarification.
2.10Flattened the organization of the driver source code into the single source directory and the single include directory.Driver library directory-structure simplification.
Added the following macros: \ref CY_REG32_CLR_SET, \ref _CLR_SET_FLD16U, \ref CY_REG16_CLR_SET, \ref _CLR_SET_FLD8U, \ref CY_REG8_CLR_SETRegister access simplification.
Removed the Cy_SysLib_GetNumHfclkResetCause API function.This feature is not supported by SRSS_ver1.
Added register access layer. Use register access macros instead ++* of direct register access using dereferenced pointers.Makes register access device-independent, so that the PDL does ++* not need to be recompiled for each supported part number.
2.0.1Minor documentation editsDocumentation update and clarification
2.0 ++* Added Cy_SysLib_ResetBackupDomain() API implementation. \n ++* Added CY_NOINLINE attribute implementation. \n ++* Added DIE_YEAR field to 64-bit unique ID return value of Cy_SysLib_GetUniqueId() API. \n ++* Added storing of SCB->HFSR, SCB->SHCSR registers and SCB->MMFAR, SCB->BFAR addresses to Fault Handler debug structure. \n ++* Optimized Cy_SysLib_SetWaitStates() API implementation. ++* Improvements made based on usability feedback.
Added Assertion Classes and Levels.For error checking, parameter validation and status returns in the PDL API.
Applied CY_NOINIT attribute to cy_assertFileName, cy_assertLine, and cy_faultFrame global variables.To store debug information into a non-zero init area for future analysis.
Removed CY_WEAK attribute implementation.CMSIS __WEAK attribute should be used instead.
1.0Initial version
++* ++* \defgroup group_syslib_macros Macros ++* \defgroup group_syslib_functions Functions ++* \defgroup group_syslib_data_structures Data Structures ++* \defgroup group_syslib_enumerated_types Enumerated Types ++* ++*/ ++ ++#if !defined(CY_SYSLIB_H) ++#define CY_SYSLIB_H ++ ++#include ++#include ++ ++/******************************************************************************* ++* Data manipulation defines ++*******************************************************************************/ ++ ++/** Get the lower 8 bits of a 16-bit value. */ ++#define CY_LO8(x) ((uint8_t) ((x) & 0xFFU)) ++/** Get the upper 8 bits of a 16-bit value. */ ++#define CY_HI8(x) ((uint8_t) ((uint16_t)(x) >> 8U)) ++ ++/** Get the lower 16 bits of a 32-bit value. */ ++#define CY_LO16(x) ((uint16_t) ((x) & 0xFFFFU)) ++/** Get the upper 16 bits of a 32-bit value. */ ++#define CY_HI16(x) ((uint16_t) ((uint32_t)(x) >> 16U)) ++ ++/** Swap the byte ordering of a 16-bit value */ ++#define CY_SWAP_ENDIAN16(x) ((uint16_t)(((x) << 8U) | (((x) >> 8U) & 0x00FFU))) ++ ++/** Swap the byte ordering of a 32-bit value */ ++#define CY_SWAP_ENDIAN32(x) ((uint32_t)((((x) >> 24U) & 0x000000FFU) | (((x) & 0x00FF0000U) >> 8U) | \ ++ (((x) & 0x0000FF00U) << 8U) | ((x) << 24U))) ++ ++/** Swap the byte ordering of a 64-bit value */ ++#define CY_SWAP_ENDIAN64(x) ((uint64_t) (((uint64_t) CY_SWAP_ENDIAN32((uint32_t)(x)) << 32U) | \ ++ CY_SWAP_ENDIAN32((uint32_t)((x) >> 32U)))) ++ ++/* MISRA rule 6.3 recommends using specific-length typedef for the basic ++ * numerical types of signed and unsigned variants of char, float, and double. ++ */ ++typedef char char_t; /**< Specific-length typedef for the basic numerical types of char */ ++typedef float float32_t; /**< Specific-length typedef for the basic numerical types of float */ ++typedef double float64_t; /**< Specific-length typedef for the basic numerical types of double */ ++ ++ ++/******************************************************************************* ++* Macro Name: CY_GET_REG8(addr) ++****************************************************************************//** ++* ++* Reads the 8-bit value from the specified address. This function can't be ++* used to access the Core register, otherwise a fault occurs. ++* ++* \param addr The register address. ++* ++* \return The read value. ++* ++*******************************************************************************/ ++#define CY_GET_REG8(addr) (*((const volatile uint8_t *)(addr))) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_SET_REG8(addr, value) ++****************************************************************************//** ++* ++* Writes an 8-bit value to the specified address. This function can't be ++* used to access the Core register, otherwise a fault occurs. ++* ++* \param addr The register address. ++* ++* \param value The value to write. ++* ++*******************************************************************************/ ++#define CY_SET_REG8(addr, value) (*((volatile uint8_t *)(addr)) = (uint8_t)(value)) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_GET_REG16(addr) ++****************************************************************************//** ++* ++* Reads the 16-bit value from the specified address. ++* ++* \param addr The register address. ++* ++* \return The read value. ++* ++*******************************************************************************/ ++#define CY_GET_REG16(addr) (*((const volatile uint16_t *)(addr))) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_SET_REG16(addr, value) ++****************************************************************************//** ++* ++* Writes the 16-bit value to the specified address. ++* ++* \param addr The register address. ++* ++* \param value The value to write. ++* ++*******************************************************************************/ ++#define CY_SET_REG16(addr, value) (*((volatile uint16_t *)(addr)) = (uint16_t)(value)) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_GET_REG24(addr) ++****************************************************************************//** ++* ++* Reads the 24-bit value from the specified address. ++* ++* \param addr The register address. ++* ++* \return The read value. ++* ++*******************************************************************************/ ++#define CY_GET_REG24(addr) (((uint32_t) (*((const volatile uint8_t *)(addr)))) | \ ++ (((uint32_t) (*((const volatile uint8_t *)(addr) + 1))) << 8U) | \ ++ (((uint32_t) (*((const volatile uint8_t *)(addr) + 2))) << 16U)) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_SET_REG24(addr, value) ++****************************************************************************//** ++* ++* Writes the 24-bit value to the specified address. ++* ++* \param addr The register address. ++* ++* \param value The value to write. ++* ++*******************************************************************************/ ++#define CY_SET_REG24(addr, value) do \ ++ { \ ++ (*((volatile uint8_t *) (addr))) = (uint8_t)(value); \ ++ (*((volatile uint8_t *) (addr) + 1)) = (uint8_t)((value) >> 8U); \ ++ (*((volatile uint8_t *) (addr) + 2)) = (uint8_t)((value) >> 16U); \ ++ } \ ++ while(0) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_GET_REG32(addr) ++****************************************************************************//** ++* ++* Reads the 32-bit value from the specified register. The address is the little ++* endian order (LSB in lowest address). ++* ++* \param addr The register address. ++* ++* \return The read value. ++* ++*******************************************************************************/ ++#define CY_GET_REG32(addr) (*((const volatile uint32_t *)(addr))) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_SET_REG32(addr, value) ++****************************************************************************//** ++* ++* Writes the 32-bit value to the specified register. The address is the little ++* endian order (LSB in lowest address). ++* ++* \param addr The register address. ++* ++* \param value The value to write. ++* ++*******************************************************************************/ ++#define CY_SET_REG32(addr, value) (*((volatile uint32_t *)(addr)) = (uint32_t)(value)) ++ ++/******************************************************************************* ++* Macro Name: _CLR_SET_FLD32U ++****************************************************************************//** ++* ++* The macro for setting a register with a name field and value for providing ++* get-clear-modify-write operations. ++* Returns a resulting value to be assigned to the register. ++* ++*******************************************************************************/ ++#define _CLR_SET_FLD32U(reg, field, value) (((reg) & ((uint32_t)(~(field ## _Msk)))) | (_VAL2FLD(field, value))) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_REG32_CLR_SET ++****************************************************************************//** ++* ++* Uses _CLR_SET_FLD32U macro for providing get-clear-modify-write ++* operations with a name field and value and writes a resulting value ++* to the 32-bit register. ++* ++*******************************************************************************/ ++#define CY_REG32_CLR_SET(reg, field, value) ((reg) = _CLR_SET_FLD32U((reg), field, (value))) ++ ++ ++/******************************************************************************* ++* Macro Name: _CLR_SET_FLD16U ++****************************************************************************//** ++* ++* The macro for setting a 16-bit register with a name field and value for providing ++* get-clear-modify-write operations. ++* Returns a resulting value to be assigned to the 16-bit register. ++* ++*******************************************************************************/ ++#define _CLR_SET_FLD16U(reg, field, value) ((uint16_t)(((reg) & ((uint16_t)(~(field ## _Msk)))) | \ ++ ((uint16_t)_VAL2FLD(field, value)))) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_REG16_CLR_SET ++****************************************************************************//** ++* ++* Uses _CLR_SET_FLD16U macro for providing get-clear-modify-write ++* operations with a name field and value and writes a resulting value ++* to the 16-bit register. ++* ++*******************************************************************************/ ++#define CY_REG16_CLR_SET(reg, field, value) ((reg) = _CLR_SET_FLD16U((reg), field, (value))) ++ ++ ++/******************************************************************************* ++* Macro Name: _CLR_SET_FLD8U ++****************************************************************************//** ++* ++* The macro for setting a 8-bit register with a name field and value for providing ++* get-clear-modify-write operations. ++* Returns a resulting value to be assigned to the 8-bit register. ++* ++*******************************************************************************/ ++#define _CLR_SET_FLD8U(reg, field, value) ((uint8_t)(((reg) & ((uint8_t)(~(field ## _Msk)))) | \ ++ ((uint8_t)_VAL2FLD(field, value)))) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_REG8_CLR_SET ++****************************************************************************//** ++* ++* Uses _CLR_SET_FLD8U macro for providing get-clear-modify-write ++* operations with a name field and value and writes a resulting value ++* to the 8-bit register. ++* ++*******************************************************************************/ ++#define CY_REG8_CLR_SET(reg, field, value) ((reg) = _CLR_SET_FLD8U((reg), field, (value))) ++ ++ ++/******************************************************************************* ++* Macro Name: _BOOL2FLD ++****************************************************************************//** ++* ++* Returns a field mask if the value is not false. ++* Returns 0, if the value is false. ++* ++*******************************************************************************/ ++#define _BOOL2FLD(field, value) (((value) != false) ? (field ## _Msk) : 0UL) ++ ++ ++/******************************************************************************* ++* Macro Name: _FLD2BOOL ++****************************************************************************//** ++* ++* Returns true, if the value includes the field mask. ++* Returns false, if the value doesn't include the field mask. ++* ++*******************************************************************************/ ++#define _FLD2BOOL(field, value) (((value) & (field ## _Msk)) != 0UL) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_SYSLIB_DIV_ROUND ++****************************************************************************//** ++* ++* Calculates a / b with rounding to the nearest integer, ++* a and b must have the same sign. ++* ++*******************************************************************************/ ++#define CY_SYSLIB_DIV_ROUND(a, b) (((a) + ((b) / 2U)) / (b)) ++ ++ ++/******************************************************************************* ++* Macro Name: CY_SYSLIB_DIV_ROUNDUP ++****************************************************************************//** ++* ++* Calculates a / b with rounding up if remainder != 0, ++* both a and b must be positive. ++* ++*******************************************************************************/ ++#define CY_SYSLIB_DIV_ROUNDUP(a, b) ((((a) - 1U) / (b)) + 1U) ++ ++typedef uint32_t cy_status; ++/** The ARM 32-bit status value for backward compatibility with the UDB components. Do not use it in your code. */ ++typedef uint32_t cystatus; ++typedef uint8_t uint8; /**< Alias to uint8_t for backward compatibility */ ++typedef uint16_t uint16; /**< Alias to uint16_t for backward compatibility */ ++typedef uint32_t uint32; /**< Alias to uint32_t for backward compatibility */ ++typedef int8_t int8; /**< Alias to int8_t for backward compatibility */ ++typedef int16_t int16; /**< Alias to int16_t for backward compatibility */ ++typedef int32_t int32; /**< Alias to int32_t for backward compatibility */ ++typedef float float32; /**< Alias to float for backward compatibility */ ++typedef double float64; /**< Alias to double for backward compatibility */ ++typedef int64_t int64; /**< Alias to int64_t for backward compatibility */ ++typedef uint64_t uint64; /**< Alias to uint64_t for backward compatibility */ ++/* Signed or unsigned depending on the compiler selection */ ++typedef char char8; /**< Alias to char for backward compatibility */ ++typedef volatile uint8_t reg8; /**< Alias to uint8_t for backward compatibility */ ++typedef volatile uint16_t reg16; /**< Alias to uint16_t for backward compatibility */ ++typedef volatile uint32_t reg32; /**< Alias to uint32_t for backward compatibility */ ++ ++/** The ARM 32-bit Return error / status code for backward compatibility. ++* Do not use them in your code. ++*/ ++#define CY_RET_SUCCESS (0x00U) /* Successful */ ++#define CY_RET_BAD_PARAM (0x01U) /* One or more invalid parameters */ ++#define CY_RET_INVALID_OBJECT (0x02U) /* An invalid object specified */ ++#define CY_RET_MEMORY (0x03U) /* A memory-related failure */ ++#define CY_RET_LOCKED (0x04U) /* A resource lock failure */ ++#define CY_RET_EMPTY (0x05U) /* No more objects available */ ++#define CY_RET_BAD_DATA (0x06U) /* Bad data received (CRC or other error check) */ ++#define CY_RET_STARTED (0x07U) /* Operation started, but not necessarily completed yet */ ++#define CY_RET_FINISHED (0x08U) /* Operation is completed */ ++#define CY_RET_CANCELED (0x09U) /* Operation is canceled */ ++#define CY_RET_TIMEOUT (0x10U) /* Operation timed out */ ++#define CY_RET_INVALID_STATE (0x11U) /* Operation is not setup or is in an improper state */ ++#define CY_RET_UNKNOWN ((cy_status) 0xFFFFFFFFU) /* Unknown failure */ ++ ++/** ARM 32-bit Return error / status codes for backward compatibility with the UDB components. ++* Do not use them in your code. ++*/ ++#define CYRET_SUCCESS (0x00U) /* Successful */ ++#define CYRET_BAD_PARAM (0x01U) /* One or more invalid parameters */ ++#define CYRET_INVALID_OBJECT (0x02U) /* An invalid object specified */ ++#define CYRET_MEMORY (0x03U) /* A memory-related failure */ ++#define CYRET_LOCKED (0x04U) /* A resource lock failure */ ++#define CYRET_EMPTY (0x05U) /* No more objects available */ ++#define CYRET_BAD_DATA (0x06U) /* Bad data received (CRC or other error check) */ ++#define CYRET_STARTED (0x07U) /* Operation started, but not necessarily completed yet */ ++#define CYRET_FINISHED (0x08U) /* Operation is completed */ ++#define CYRET_CANCELED (0x09U) /* Operation is canceled */ ++#define CYRET_TIMEOUT (0x10U) /* Operation timed out */ ++#define CYRET_INVALID_STATE (0x11U) /* Operation is not setup or is in an improper state */ ++#define CYRET_UNKNOWN ((cystatus) 0xFFFFFFFFU) /* Unknown failure */ ++ ++/** \} group_syslib_functions */ ++ ++#endif /* CY_SYSLIB_H */ ++ ++/** \} group_syslib */ ++ ++/* [] END OF FILE */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_utils.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_utils.h +new file mode 100644 +index 0000000000..db8c143f36 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cy_utils.h +@@ -0,0 +1,81 @@ ++/***************************************************************************//** ++* \file cy_utils.h ++* ++* \brief ++* Basic utility macros and functions. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2019 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++/** ++* \addtogroup group_utils Utilities ++* \ingroup group_abstraction ++* \{ ++* Basic utility macros and functions. ++* ++* \defgroup group_utils_macros Macros ++*/ ++ ++#pragma once ++ ++#include "stdint.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/** ++* \addtogroup group_utils_macros ++* \{ ++*/ ++ ++/** Simple macro to supress the unused parameter warning by casting to void. */ ++#define CY_UNUSED_PARAMETER(x) ( (void)(x) ) ++ ++/** Halt the processor in the debug state ++ * @return ++ */ ++static inline uint32_t CY_HALT() ++{ ++ __asm(" bkpt 1"); ++ return 0; ++} ++ ++#ifdef CY_ASSERT ++#undef CY_ASSERT ++#endif /* ifdef(CY_ASSERT) */ ++ ++/** Utility macro when neither NDEBUG or CY_NO_ASSERT is not declared to check a condition and, if false, trigger a breakpoint */ ++#if defined(NDEBUG) || defined(CY_NO_ASSERT) ++ #define CY_ASSERT(x) CY_UNUSED_PARAMETER(x) ++#else ++ #define CY_ASSERT(x) do { \ ++ if(!(x)) \ ++ { \ ++ CY_HALT(); \ ++ } \ ++ } while(0) ++#endif /* defined(NDEBUG) */ ++ ++/** \} group_utils_macros */ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++/** \} group_utils */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cybsp.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cybsp.h +new file mode 100644 +index 0000000000..06226f327b +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cybsp.h +@@ -0,0 +1,50 @@ ++/***************************************************************************//** ++* \file cybsp.h ++* ++* \brief ++* Basic API for setting up boards containing a Cypress MCU. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2020 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++#pragma once ++ ++#include "cy_result.h" ++#include "cyhal_sdio.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/** ++* \addtogroup group_bsp_functions Functions ++* \{ ++*/ ++ ++/** ++ * \brief Get the initialized sdio object used for communicating with the WiFi Chip. ++ * \note This function should only be called after cybsp_init(); ++ * \returns The initialized sdio object. ++ */ ++cyhal_sdio_t* cybsp_get_wifi_sdio_obj(void); ++ ++/** \} group_bsp_functions */ ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cycfg.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cycfg.h +new file mode 100644 +index 0000000000..7a3dee0ca9 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cycfg.h +@@ -0,0 +1,20 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Empty file to be compliant with Cypress COMPONENT_WHD ++ */ +\ No newline at end of file +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal.h +new file mode 100644 +index 0000000000..e56be0e013 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal.h +@@ -0,0 +1,52 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides cyhal porting to generic mbed APIs ++ */ ++#include "whd_config.h" ++#include "cyhal_hw_types.h" ++#include "cyhal_gpio.h" ++#include "cyhal_sdio.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++typedef enum ++{ ++ CYBSP_WIFI_WL_REG_ON, ++ CYBSP_WIFI_32K_CLK, ++ CYBSP_LED1, ++ CYBSP_LED2, ++ CYBSP_WIFI_SDIO_CMD, ++ CYBSP_WIFI_SDIO_CLK, ++ CYBSP_WIFI_SDIO_D0, ++ CYBSP_WIFI_SDIO_D1, ++ CYBSP_WIFI_SDIO_D2, ++ CYBSP_WIFI_SDIO_D3, ++ CYBSP_SDIO_OOB_IRQ, ++ CYBSP_WIFI_MAX, ++} wwd_sdio_pin_t; ++ ++void cyhal_system_delay_ms(uint32_t milliseconds); ++cy_rslt_t sdio_enable_high_speed(void); ++ ++#if defined(__cplusplus) ++} ++#endif ++ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_gpio.cpp b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_gpio.cpp +new file mode 100644 +index 0000000000..3b7d33d0fe +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_gpio.cpp +@@ -0,0 +1,104 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides the porting layer for STM32 GPIOs on WHD driver ++ */ ++ ++#include ++#include "cyhal.h" ++#include "cybsp.h" ++#include "mbed.h" ++#include "wiced_filesystem.h" ++ ++extern pinconfig_t PinConfig[]; ++ ++/******************************************************************************* ++* Internal ++*******************************************************************************/ ++static mbed::InterruptIn *oob_irq; ++static cyhal_gpio_event_t oob_event = CYHAL_GPIO_IRQ_FALL; ++static cyhal_gpio_event_callback_t oob_handler; ++static void *oob_handler_arg; ++ ++/******************************************************************************* ++* Internal Interrrupt Service Routine ++*******************************************************************************/ ++static void cb() ++{ ++ oob_handler(oob_handler_arg, oob_event); ++} ++ ++/******************************************************************************* ++* HAL Implementation ++*******************************************************************************/ ++cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drvMode, bool initVal) ++{ ++ cy_rslt_t ret = CY_RSLT_SUCCESS; ++ ++ // Workaround to enable GPIOJ clock ++ if (pin == CYBSP_WIFI_WL_REG_ON) { ++ __HAL_RCC_GPIOB_CLK_ENABLE(); ++ // Ensure FS and BlockDevice are initialized on time if needed ++ wiced_filesystem_init(); ++ } ++ // Ignore the parameter and take the pin config directly from a static array defintions ++ HAL_GPIO_Init(PinConfig[pin].port, &PinConfig[pin].config); ++ if (direction == CYHAL_GPIO_DIR_OUTPUT) { ++ HAL_GPIO_WritePin(PinConfig[pin].port, PinConfig[pin].config.Pin, (initVal) ? GPIO_PIN_SET : GPIO_PIN_RESET); ++ } ++ // Workaround to initialize sdio interface without cypress bsp init ++ if (pin == CYBSP_WIFI_WL_REG_ON) { ++ cyhal_sdio_t *sdio_p = cybsp_get_wifi_sdio_obj(); ++ ret = cyhal_sdio_init(sdio_p, CYBSP_WIFI_SDIO_CMD, CYBSP_WIFI_SDIO_CLK, CYBSP_WIFI_SDIO_D0, CYBSP_WIFI_SDIO_D1, CYBSP_WIFI_SDIO_D2, CYBSP_WIFI_SDIO_D3); ++ } ++ return ret; ++} ++ ++void cyhal_gpio_write(cyhal_gpio_t pin, bool value) ++{ ++ HAL_GPIO_WritePin(PinConfig[pin].port, PinConfig[pin].config.Pin, (value) ? GPIO_PIN_SET : GPIO_PIN_RESET); ++} ++ ++void cyhal_gpio_register_callback(cyhal_gpio_t pin, cyhal_gpio_event_callback_t handler, void *handler_arg) ++{ ++ if (handler && handler_arg && (oob_irq == NULL)) { ++ oob_irq = new mbed::InterruptIn(WL_HOST_WAKE); ++ oob_handler = handler; ++ oob_handler_arg = handler_arg; ++ } ++} ++ ++void cyhal_gpio_enable_event(cyhal_gpio_t pin, cyhal_gpio_event_t event, uint8_t intr_priority, bool enable) ++{ ++ oob_event = event; ++ if (enable) { ++ if (event == CYHAL_GPIO_IRQ_RISE) { ++ oob_irq->rise(cb); ++ } ++ if (event == CYHAL_GPIO_IRQ_FALL) { ++ oob_irq->fall(cb); ++ } ++ } else if (oob_irq != NULL) { ++ delete oob_irq; ++ } ++} ++ ++void cyhal_gpio_free(cyhal_gpio_t pin) ++{ ++ // Do nothing ++} +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_hw_types.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_hw_types.h +new file mode 100644 +index 0000000000..1f872abb37 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_hw_types.h +@@ -0,0 +1,112 @@ ++/***************************************************************************//** ++* \file cyhal_hw_types_template.h ++* ++* \brief ++* Provides a template for configuration resources used by the HAL. Items ++* here need to be implemented for each HAL port. It is up to the environment ++* being ported into what the actual types are. There are some suggestions below ++* but these are not required. All that is required is that the type is defined; ++* it does not matter to the HAL what type is actually chosen for the ++* implementation ++* All TODOs and references to 'PORT' need to be replaced by with meaningful ++* values for the device being supported. ++* ++******************************************************************************** ++* \copyright ++* Copyright 2018-2019 Cypress Semiconductor Corporation ++* SPDX-License-Identifier: Apache-2.0 ++* ++* Licensed under the Apache License, Version 2.0 (the "License"); ++* you may not use this file except in compliance with the License. ++* You may obtain a copy of the License at ++* ++* http://www.apache.org/licenses/LICENSE-2.0 ++* ++* Unless required by applicable law or agreed to in writing, software ++* distributed under the License is distributed on an "AS IS" BASIS, ++* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++* See the License for the specific language governing permissions and ++* limitations under the License. ++*******************************************************************************/ ++ ++/** ++ * \addtogroup group_hal_hw_types PORT Hardware Types ++ * \ingroup group_hal_PORT ++ * \{ ++ * Struct definitions for configuration resources in the PORT. ++ * ++ * \defgroup group_hal_hw_types_data_structures Data Structures ++ */ ++ ++#pragma once ++#include ++#include "stm32h7xx_hal.h" ++#include "PinNames.h" ++ ++/* ++ #include "TODO: Port specific header file" ++ */ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++#ifndef CYHAL_ISR_PRIORITY_DEFAULT ++/** Priority that is applied by default to all drivers when initalized. Priorities can be ++ * overridden on each driver as part of enabling events. ++ */ ++#define CYHAL_ISR_PRIORITY_DEFAULT (7) ++#endif ++ ++/** ++ * \addtogroup group_hal_hw_types_data_structures ++ * \{ ++ */ ++ ++typedef int32_t cyhal_gpio_t; ++ ++/** GPIO object */ ++typedef struct ++{ ++ GPIO_TypeDef *port; ++ GPIO_InitTypeDef config; ++} pinconfig_t; ++ ++/** Clock divider object */ ++typedef struct ++{ ++ /* TODO: replace with port specific items */ ++ void *div_type; ++} cyhal_clock_divider_t; ++ ++/** Clock object */ ++typedef struct ++{ ++ //For backwards compatibility with cyhal_clock_divider_t only. Do not use going forward. ++ int div_type; /*!< Deprecated */ ++ uint8_t div_num; /*!< Deprecated */ ++ //End BWC items ++ int block; ++ uint8_t channel; ++ bool reserved; ++} cyhal_clock_t; ++ ++/** SDIO object */ ++typedef void* *cyhal_sdio_t; ++ ++/** SPI object */ ++typedef struct ++{ ++ /* TODO: replace with port specific items */ ++ void *empty; ++} cyhal_spi_t; ++ ++#include "whd_config.h" ++#include "whd_debug.h" ++ ++#if defined(__cplusplus) ++} ++#endif /* __cplusplus */ ++ ++/** \} group_hal_hw_types */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_sdio.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_sdio.c +new file mode 100644 +index 0000000000..3ddfd85848 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_sdio.c +@@ -0,0 +1,506 @@ ++/* ++ * Copyright 2020 Cypress Semiconductor Corporation ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides the porting layer for STM32 SDIO on WHD driver ++ */ ++ ++#include ++#include ++#include "whd_thread.h" ++#include "bus_protocols/whd_bus_sdio_protocol.h" ++#include "cyabs_rtos.h" ++#include "cyhal_sdio.h" ++ ++#define SDIO_RESPONSE_SHORT SDMMC_RESPONSE_SHORT ++#define SDIO_WAIT_NO SDMMC_WAIT_NO ++#define SDIO_CPSM_ENABLE SDMMC_CPSM_ENABLE ++#define SDIO_CMDTRANS SDMMC_CMD_CMDTRANS ++#define SDIO_FLAG_CMDACT (SDMMC_STA_CPSMACT | SDMMC_STA_DPSMACT) ++#define SDIO_TRANSFER_DIR_TO_SDIO SDMMC_TRANSFER_DIR_TO_SDMMC ++#define SDIO_TRANSFER_DIR_TO_CARD SDMMC_TRANSFER_DIR_TO_CARD ++#define SDIO_TRANSFER_MODE_BLOCK SDMMC_TRANSFER_MODE_BLOCK ++#define SDIO_DPSM_ENABLE SDMMC_DPSM_ENABLE ++#define SDIO_DPSM_DISABLE SDMMC_DPSM_DISABLE ++#define SDIO_DCTRL_SDIOEN SDMMC_DCTRL_SDIOEN /* 1 << 11 */ ++#define SDIO_DCTRL_DTMODE_1 SDMMC_DCTRL_DTMODE_1 /* 1<<3 */ ++#define SDIO_STA_DTIMEOUT SDMMC_STA_DTIMEOUT ++#define SDIO_STA_CTIMEOUT SDMMC_STA_CTIMEOUT ++#define SDIO_STA_CCRCFAIL SDMMC_STA_CCRCFAIL ++#define SDIO_STA_DCRCFAIL SDMMC_STA_DCRCFAIL ++#define SDIO_STA_TXUNDERR SDMMC_STA_TXUNDERR ++#define SDIO_STA_RXOVERR SDMMC_STA_RXOVERR ++#define SDIO_STA_TXACT SDMMC_STA_CPSMACT ++#define SDIO_STA_RXACT SDMMC_STA_DPSMACT ++#define SDIO_STA_CMDREND SDMMC_STA_CMDREND ++#define SDIO_STA_CMDSENT SDMMC_STA_CMDSENT ++#define SDIO_CMD_CMDTRANS SDMMC_CMD_CMDTRANS ++#define SDIO SDMMC1 ++ ++#define COMMAND_FINISHED_CMD52_TIMEOUT_LOOPS (100000) ++#define BUS_LEVEL_MAX_RETRIES 10 ++ ++#define SDIO_CMD_5 5 ++#define SDIO_CMD_53 53 ++ ++#define SDIO_STA_STBITERR ((uint32_t)0x00000200) /*!b)?a:b ++ ++/* D-cache maintenance for DMA buffers */ ++#if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) ++ #define _CYHAL_DCACHE_MAINTENANCE ++ #define _CYHAL_DMA_BUFFER_ALIGN_BYTES (32u) ++#else ++ #define _CYHAL_DMA_BUFFER_ALIGN_BYTES (4u) ++#endif /* defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) */ ++ ++/* Macro to ALIGN */ ++#if defined (__ARMCC_VERSION) /* ARM Compiler */ ++ #define ALIGN_HAL_COMMON(buf, x) __align(x) buf ++#elif defined (__GNUC__) /* GNU Compiler */ ++ #define ALIGN_HAL_COMMON(buf, x) buf __attribute__ ((aligned (x))) ++#elif defined (__ICCARM__) /* IAR Compiler */ ++ #define ALIGN_HAL_COMMON(buf, x) __ALIGNED(x) buf ++#endif ++ ++/* Macro to get variable aligned for cache maintenance purpose */ ++#define CYHAL_ALIGN_DMA_BUFFER(arg) ALIGN_HAL_COMMON(arg, _CYHAL_DMA_BUFFER_ALIGN_BYTES) ++ ++ ++extern pinconfig_t PinConfig[]; ++extern SD_HandleTypeDef hsd; ++ ++/* for debug prints only */ ++//static int num = 0; ++ ++static uint32_t dctrl; ++ ++static whd_driver_t whd_handler; ++static cyhal_sdio_irq_handler_t sdio_irq_handler; ++ ++CYHAL_ALIGN_DMA_BUFFER(static uint8_t temp_dma_buffer[2048]); ++static uint8_t *user_data; ++static uint32_t user_data_size; ++static uint8_t *dma_data_source; ++static uint32_t dma_transfer_size; ++static cyhal_transfer_t current_transfer_direction; ++ ++static cy_semaphore_t sdio_transfer_finished_semaphore; ++static volatile uint32_t sdio_transfer_failed = 0; ++static volatile uint32_t irqstatus = 0; ++static int current_command = 0; ++ ++static cy_rslt_t sdio_enable_high_speed(void) ++{ ++ SDMMC_InitTypeDef sdio_init_structure; ++ ++ sdio_init_structure.ClockDiv = SDMMC_HSpeed_CLK_DIV; ++ sdio_init_structure.ClockEdge = SDMMC_CLOCK_EDGE_RISING; ++ sdio_init_structure.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; ++ sdio_init_structure.BusWide = SDMMC_BUS_WIDE_4B; ++ sdio_init_structure.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE; ++ ++ SDMMC_Init(SDMMC1, sdio_init_structure); ++ return CY_RSLT_SUCCESS; ++} ++ ++static uint32_t find_optimal_block_size(uint32_t data_size) ++{ ++ if (data_size > (uint32_t) 256) { ++ return 512; ++ } ++ if (data_size > (uint32_t) 128) { ++ return 256; ++ } ++ if (data_size > (uint32_t) 64) { ++ return 128; ++ } ++ if (data_size > (uint32_t) 32) { ++ return 64; ++ } ++ if (data_size > (uint32_t) 16) { ++ return 32; ++ } ++ if (data_size > (uint32_t) 8) { ++ return 16; ++ } ++ if (data_size > (uint32_t) 4) { ++ return 8; ++ } ++ if (data_size > (uint32_t) 2) { ++ return 4; ++ } ++ ++ return 4; ++} ++ ++static uint32_t sdio_get_blocksize(uint32_t blocksize) ++{ ++ uint32_t n = 0; ++ blocksize >>= 1; ++ while (blocksize) { ++ n++; ++ blocksize >>= 1; ++ } ++ n <<= 4; ++ return n; ++} ++ ++static void sdio_prepare_data_transfer(cyhal_transfer_t direction, uint32_t block_size, uint8_t *data, uint16_t data_size) ++{ ++ /* Setup a single transfer using the temp buffer */ ++ user_data = data; ++ user_data_size = data_size; ++ dma_transfer_size = (uint32_t)(((data_size + (uint16_t) block_size - 1) / (uint16_t) block_size) * (uint16_t) block_size); ++ ++ if (direction == CYHAL_WRITE) { ++ memcpy(temp_dma_buffer, data, data_size); ++ dma_data_source = temp_dma_buffer; ++ } else { ++ dma_data_source = (uint8_t *)temp_dma_buffer; ++ } ++ ++#ifdef _CYHAL_DCACHE_MAINTENANCE ++ if (direction == CYHAL_WRITE) ++ { ++ SCB_CleanDCache_by_Addr((uint32_t*)dma_data_source, block_size * dma_transfer_size); ++ } ++ else ++ { ++ /* Cache-Invalidate the output from DMA */ ++ SCB_InvalidateDCache_by_Addr((uint32_t*)dma_data_source, ++ data_size + __SCB_DCACHE_LINE_SIZE); ++ } ++#endif ++ ++ SDIO->DTIMER = (uint32_t) 0xFFFFFFFF; ++ SDIO->DLEN = dma_transfer_size; ++ dctrl = sdio_get_blocksize(block_size) | ((direction == CYHAL_READ) ? SDIO_TRANSFER_DIR_TO_SDIO : SDIO_TRANSFER_DIR_TO_CARD) | SDIO_TRANSFER_MODE_BLOCK | SDIO_DPSM_DISABLE | SDIO_DCTRL_SDIOEN; ++ SDIO->DCTRL = dctrl; ++ ++ SDMMC1->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; ++ SDMMC1->IDMABASE0 = (uint32_t) dma_data_source; ++} ++ ++static void sdio_enable_bus_irq(void) ++{ ++ SDMMC1->MASK = SDMMC_IT_RXOVERR | SDMMC_IT_TXUNDERR | SDMMC_IT_DATAEND | SDMMC_IT_CMDREND | SDMMC_IT_CMDSENT; ++} ++ ++void SDMMC1_IRQHandler(void) ++{ ++ uint32_t intstatus = SDIO->STA; ++ ++ irqstatus = intstatus; ++ //VIKR | SDIO_STA_STBITERR ) ++ if ((intstatus & (SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVERR)) != 0) { ++ WPRINT_WHD_DEBUG(("sdio error flagged\n")); ++ sdio_transfer_failed = intstatus; ++ SDIO->ICR = (uint32_t) 0xffffffff; ++ cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); ++ } else { ++ if ((intstatus & (SDMMC_STA_CMDREND | SDMMC_STA_CMDSENT)) != 0) { ++ if ((SDMMC1->RESP1 & 0x800) != 0) { ++ sdio_transfer_failed = irqstatus; ++ cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); ++ } ++ ++ /* Clear all command/response interrupts */ ++ SDMMC1->ICR = (SDMMC_STA_CMDREND | SDMMC_STA_CMDSENT); ++ } ++ ++ /* Check whether the external interrupt was triggered */ ++ if (intstatus & SDMMC_STA_SDIOIT) { ++ /* Clear the interrupt */ ++ SDMMC1->ICR = SDMMC_STA_SDIOIT; ++ /* Inform WICED WWD thread */ ++ sdio_irq_handler(whd_handler, CYHAL_SDIO_CARD_INTERRUPT); ++ } ++ ++ if (intstatus & SDMMC_STA_DATAEND) { ++ SDMMC1->ICR = SDMMC_STA_DATAEND; ++ SDMMC1->DLEN = 0; ++ SDMMC1->DCTRL = SDMMC_DCTRL_SDIOEN; ++ SDMMC1->IDMACTRL = SDMMC_DISABLE_IDMA; ++ SDMMC1->CMD = 0; ++ cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); ++ } ++ } ++} ++ ++//void sdio_dma_irq(void) ++//{ ++// /* Clear interrupt */ ++// DMA2->LIFCR = (uint32_t)(0x3F << 22); ++// cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); ++//} ++ ++cy_rslt_t cyhal_sdio_init(cyhal_sdio_t *obj, cyhal_gpio_t cmd, cyhal_gpio_t clk, cyhal_gpio_t data0, cyhal_gpio_t data1, cyhal_gpio_t data2, cyhal_gpio_t data3) ++{ ++ cy_rslt_t ret = CY_RSLT_SUCCESS; ++ ++ __HAL_RCC_GPIOC_CLK_ENABLE(); ++ __HAL_RCC_GPIOD_CLK_ENABLE(); ++ __HAL_RCC_SDMMC1_CLK_ENABLE(); ++ ++ HAL_GPIO_Init(PinConfig[cmd].port, &PinConfig[cmd].config); ++ HAL_GPIO_Init(PinConfig[clk].port, &PinConfig[clk].config); ++ HAL_GPIO_Init(PinConfig[data0].port, &PinConfig[data0].config); ++ HAL_GPIO_Init(PinConfig[data1].port, &PinConfig[data1].config); ++ HAL_GPIO_Init(PinConfig[data2].port, &PinConfig[data2].config); ++ HAL_GPIO_Init(PinConfig[data3].port, &PinConfig[data3].config); ++ ++ /* Reset SDIO Block */ ++ SDMMC_PowerState_OFF(SDMMC1); ++ __HAL_RCC_SDMMC1_FORCE_RESET(); ++ __HAL_RCC_SDMMC1_RELEASE_RESET(); ++ ++ /* Enable the SDIO Clock */ ++ __HAL_RCC_SDMMC1_CLK_ENABLE(); ++ ++ WPRINT_WHD_DEBUG(("in init: %p\n", sdio_transfer_finished_semaphore)); ++ ++ // Lower speed configuration ++ SDMMC_InitTypeDef sdio_init_structure; ++ ++ sdio_init_structure.ClockDiv = SDMMC_INIT_CLK_DIV; ++ sdio_init_structure.ClockEdge = SDMMC_CLOCK_EDGE_RISING; ++ sdio_init_structure.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; ++ sdio_init_structure.BusWide = SDMMC_BUS_WIDE_1B; ++ sdio_init_structure.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; ++ ret = SDMMC_Init(SDMMC1, sdio_init_structure); ++ ret |= SDMMC_PowerState_ON(SDMMC1); ++ ret |= SDMMC_SetSDMMCReadWaitMode(SDMMC1, SDMMC_READ_WAIT_MODE_CLK); ++ if (ret) { ++ return ret; ++ } ++ ++ /* Clear all SDIO interrupts */ ++ SDMMC1->ICR = (uint32_t) 0xffffffff; ++ ++ /* Turn on SDIO IRQ */ ++ /* Must be lower priority than the value of configMAX_SYSCALL_INTERRUPT_PRIORITY */ ++ /* otherwise FreeRTOS will not be able to mask the interrupt */ ++ /* keep in mind that ARMCM7 interrupt priority logic is inverted, the highest value */ ++ /* is the lowest priority */ ++ HAL_NVIC_EnableIRQ((IRQn_Type) SDMMC1_IRQn); ++ HAL_NVIC_SetPriority(SDMMC1_IRQn, 5, 0); ++ ++ WPRINT_WHD_DEBUG(("after enable sdio: %p\n", sdio_transfer_finished_semaphore)); ++ ++ if (cy_rtos_init_semaphore(&sdio_transfer_finished_semaphore, 1, 0) != WHD_SUCCESS) { ++ cy_rtos_deinit_semaphore(&sdio_transfer_finished_semaphore); ++ return -1; ++ } ++ ++ WPRINT_WHD_DEBUG(("cy_rtos_init_semaphore: %p\n", sdio_transfer_finished_semaphore)); ++ ++ return ret; ++} ++ ++void cyhal_sdio_free(cyhal_sdio_t *obj) ++{ ++ //TODO ++} ++ ++cy_rslt_t cyhal_sdio_configure(cyhal_sdio_t *obj, const cyhal_sdio_cfg_t *config) ++{ ++ return sdio_enable_high_speed(); ++} ++ ++cy_rslt_t cyhal_sdio_send_cmd(const cyhal_sdio_t *obj, cyhal_transfer_t direction, cyhal_sdio_command_t command, uint32_t argument, uint32_t *response) ++{ ++ uint32_t loop_count = 0; ++ cy_rslt_t result; ++ uint16_t attempts = 0; ++ uint32_t temp_sta; ++ ++ if (response != NULL) { ++ *response = 0; ++ } ++ current_command = 0; ++ ++restart: ++ SDIO->ICR = (uint32_t) 0xFFFFFFFF; ++ ++attempts; ++ ++ /* Check if we've tried too many times */ ++ if (attempts >= (uint16_t) BUS_LEVEL_MAX_RETRIES) { ++ /* WWD_SDIO_RETRIES_EXCEEDED */ ++ result = -1; ++ goto exit; ++ } ++ ++ /* Send the command */ ++ SDIO->ARG = argument; ++ SDIO->CMD = (uint32_t)(command | SDIO_RESPONSE_SHORT | SDIO_WAIT_NO | SDIO_CPSM_ENABLE); ++ loop_count = (uint32_t) COMMAND_FINISHED_CMD52_TIMEOUT_LOOPS; ++ do { ++ temp_sta = SDIO->STA; ++ loop_count--; ++ if (loop_count == 0 /*|| ((response != NULL) && ((temp_sta & SDIO_ERROR_MASK) != 0))*/) { ++ WPRINT_WHD_DEBUG(("Restart single access loop count %ld stat %lx\n", loop_count, temp_sta)); ++ HAL_Delay(10U); ++ goto restart; ++ } ++ } while ((temp_sta & SDIO_FLAG_CMDACT) != 0); ++ ++ if (response != NULL) { ++ *response = SDIO->RESP1; ++ } ++ result = CY_RSLT_SUCCESS; ++ ++exit: ++ if (result) { ++ WPRINT_WHD_ERROR(("SDIO->POWER %lx \n", SDIO->POWER)); ++ WPRINT_WHD_ERROR(("SDIO->CLKCR %lx \n", SDIO->CLKCR)); ++ WPRINT_WHD_ERROR(("result %lx \n", result)); ++ WPRINT_WHD_ERROR(("cyhal_sdio_send_cmd %s\n", (result == 0) ? "Passed" : "Failed")); ++ while (1); ++ } ++ SDMMC1->CMD = 0; ++ ++ //WPRINT_WHD_DEBUG(("%d %s cmd 0x%x arg 0x%x resp 0x%x\n",num++,(direction!=CYHAL_READ)?"Write":"Read",command,argument,(response)?*response:0)); ++ return result; ++} ++ ++cy_rslt_t cyhal_sdio_bulk_transfer(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t *data, uint16_t length, uint32_t *response) ++{ ++ cy_rslt_t result; ++ uint16_t attempts = 0; ++ uint32_t block_size = 64; ++ sdio_cmd_argument_t arg; ++ uint32_t cmd; ++ current_command = SDIO_CMD_53; ++ current_transfer_direction = direction; ++ arg.value = argument; ++ ++ sdio_enable_bus_irq(); ++ if (response != NULL) { ++ *response = 0; ++ } ++ ++restart: ++ sdio_transfer_failed = 0; ++ SDMMC1->ICR = (uint32_t) 0xFFFFFFFF; ++ ++attempts; ++ ++ /* Check if we've tried too many times */ ++ if (attempts >= (uint16_t) BUS_LEVEL_MAX_RETRIES) { ++ /* WWD_SDIO_RETRIES_EXCEEDED */ ++ WPRINT_WHD_ERROR(("Too much attempt\n")); ++ result = -1; ++ goto exit; ++ } ++ ++ /* Dodgy STM32 hack to set the CMD53 byte mode size to be the same as the block size */ ++ if (arg.cmd53.block_mode == 0) { ++ block_size = find_optimal_block_size(arg.cmd53.count); ++ if (block_size < SDIO_512B_BLOCK) { ++ arg.cmd53.count = block_size; ++ } else { ++ arg.cmd53.count = 0; ++ } ++ argument = arg.value; ++ } ++ ++ SDMMC1->CMD |= SDMMC_CMD_CMDTRANS; ++ ++ /* Prepare the SDIO for a data transfer */ ++ sdio_prepare_data_transfer(direction, block_size, (uint8_t *) data, (uint32_t) length); ++ ++ /* Send the command */ ++ //WPRINT_WHD_DEBUG(("%d bs=%d argument=%x\n",num++,block_size,argument)); ++ SDMMC1->ARG = argument; ++ cmd = (uint32_t)(SDIO_CMD_53 | SDMMC_RESPONSE_SHORT | SDMMC_WAIT_NO | SDMMC_CPSM_ENABLE | SDMMC_CMD_CMDTRANS); ++ SDMMC1->CMD = cmd; ++ ++ /* Wait for the whole transfer to complete */ ++ //WPRINT_WHD_DEBUG(("cy_rtos_get_semaphore: %d\n", sdio_transfer_finished_semaphore)); ++ result = cy_rtos_get_semaphore(&sdio_transfer_finished_semaphore, 50, WHD_FALSE); ++ ++ if (result != CY_RSLT_SUCCESS) { ++ WPRINT_WHD_ERROR(("failed getting semaphore\n")); ++ goto exit; ++ } ++ if (sdio_transfer_failed) { ++ WPRINT_WHD_DEBUG(("try again sdio_transfer_failed %"PRIu32" irq %"PRIu32"\n", sdio_transfer_failed, irqstatus)); ++ goto restart; ++ } ++ /* Check if there were any SDIO errors */ ++ if ((SDIO->STA & (SDIO_STA_DTIMEOUT | SDIO_STA_CTIMEOUT)) != 0) { ++ WPRINT_WHD_DEBUG(("sdio errors SDIO_STA_DTIMEOUT | SDIO_STA_CTIMEOUT\n")); ++ goto restart; ++ } else if (((SDIO->STA & (SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVERR)) != 0)) { ++ WPRINT_WHD_DEBUG(("sdio errors SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVER \n")); ++ goto restart; ++ } ++ ++ if (direction == CYHAL_READ) { ++ #ifdef _CYHAL_DCACHE_MAINTENANCE ++ SCB_CleanInvalidateDCache_by_Addr( ++ (uint32_t*)((uint32_t)dma_data_source & ~(__SCB_DCACHE_LINE_SIZE - 1U)), ++ user_data_size + __SCB_DCACHE_LINE_SIZE); ++ #endif /* if defined(_CYHAL_DCACHE_MAINTENANCE) */ ++ ++ memcpy(user_data, dma_data_source, (size_t) user_data_size); ++ } ++ ++ if (response != NULL) { ++ *response = SDIO->RESP1; ++ } ++ result = CY_RSLT_SUCCESS; ++ ++exit: ++ SDMMC1->CMD = 0; ++ ++ //WPRINT_WHD_DEBUG(("%d %s cmd 53 argument %lx datasize %d blocknumber 0x%x cmdis %lx %lu dctrl = %x\n", num++, (direction != CYHAL_READ) ? "Write" : "Read", argument, length, arg.cmd53.count, cmd, cmd, dctrl)); ++ ++ return result; ++} ++ ++cy_rslt_t cyhal_sdio_transfer_async(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t *data, uint16_t length) ++{ ++ //TODO ++ return CYHAL_SDIO_RET_NO_SP_ERRORS; ++} ++ ++bool cyhal_sdio_is_busy(const cyhal_sdio_t *obj) ++{ ++ return false; ++} ++ ++cy_rslt_t cyhal_sdio_abort_async(const cyhal_sdio_t *obj) ++{ ++ //TODO ++ return CYHAL_SDIO_RET_NO_SP_ERRORS; ++} ++ ++void cyhal_sdio_register_callback(cyhal_sdio_t *obj, cyhal_sdio_irq_handler_t handler, void *handler_arg) ++{ ++ whd_handler = (whd_driver_t)handler_arg; ++ sdio_irq_handler = handler; ++} ++ ++void cyhal_sdio_enable_event(cyhal_sdio_t *obj, cyhal_sdio_irq_event_t event, uint8_t intr_priority, bool enable) ++{ ++ //TODO ++} ++ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_spi.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_spi.c +new file mode 100644 +index 0000000000..162c7a6801 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_spi.c +@@ -0,0 +1,29 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides stubs for the WHD driver needed by ARMClang ++ */ ++ ++#include ++#include ++#include "cyhal_spi.h" ++ ++cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, uint8_t write_fill) ++{ ++ // Do nothing ++} +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_system.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_system.h +new file mode 100644 +index 0000000000..7a3dee0ca9 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/cyhal_system.h +@@ -0,0 +1,20 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Empty file to be compliant with Cypress COMPONENT_WHD ++ */ +\ No newline at end of file +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_bd.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_bd.h +new file mode 100644 +index 0000000000..578b2d9e4e +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_bd.h +@@ -0,0 +1,49 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides wiced fs porting to generic mbed APIs ++ */ ++ ++#pragma once ++ ++#include "whd_config.h" ++#include "BlockDevice.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/****************************************************** ++ * Type Definitions ++ ******************************************************/ ++ ++/** ++ * Mount the physical device ++ * ++ * This assumes that the device is ready to read/write immediately. ++ * ++ * @param[in] device - physical media to init ++ * @param[out] fs_handle_out - Receives the filesystem handle. ++ * ++ * @return WICED_SUCCESS on success ++ */ ++wiced_result_t wiced_filesystem_mount(mbed::BlockDevice *device, wiced_filesystem_handle_type_t fs_type, wiced_filesystem_t *fs_handle_out, const char *mounted_name); ++ ++#ifdef __cplusplus ++} /*extern "C" */ ++#endif +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.cpp b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.cpp +new file mode 100644 +index 0000000000..5973be673a +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.cpp +@@ -0,0 +1,225 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides wiced fs porting to generic mbed APIs ++ */ ++ ++#include ++#include ++#include ++#include ++#include "sockets.h" ++#include "resources.h" ++#include "wiced_filesystem.h" ++#include "wiced_bd.h" ++#include "QSPIFBlockDevice.h" ++#include "MBRBlockDevice.h" ++#include "FATFileSystem.h" ++ ++#define WIFI_DEFAULT_FIRMWARE_PATH "/wlan/4343WA1.BIN" ++#define WIFI_DEFAULT_MOUNT_NAME "wlan" ++#define WIFI_DEFAULT_PARTITION 1 ++#define WIFI_DEFAULT_FS 0 ++ ++BlockDevice *qspi_bd = NULL; ++MBRBlockDevice *mbr_bd = NULL; ++FATFileSystem *wifi_fs = NULL; ++ ++wiced_filesystem_t resource_fs_handle; ++ ++MBED_WEAK BlockDevice *BlockDevice::get_default_instance() ++{ ++ static QSPIFBlockDevice default_bd(PD_11, PD_12, PE_2, PF_6, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000); ++ return &default_bd; ++} ++ ++MBED_WEAK void wiced_filesystem_mount_error(void) ++{ ++ WPRINT_WHD_ERROR(("Failed to mount the filesystem containing the WiFi firmware.\n\r")); ++ whd_print_logbuffer(); ++ while (1) {} ++} ++ ++MBED_WEAK void wiced_filesystem_firmware_error(void) ++{ ++ WPRINT_WHD_ERROR(("Please run the \"WiFiFirmwareUpdater\" sketch once to install the WiFi firmware.\n\r")); ++ whd_print_logbuffer(); ++ while (1) {} ++} ++ ++MBED_WEAK wiced_result_t whd_firmware_check_hook(const char *mounted_name, int mount_err) ++{ ++ DIR *dir; ++ struct dirent *ent; ++ std::string dir_name(mounted_name); ++ if (mount_err) { ++ wiced_filesystem_mount_error(); ++ } else { ++ if ((dir = opendir(mounted_name)) != NULL) { ++ // print all the files and directories within directory ++ while ((ent = readdir(dir)) != NULL) { ++ std::string fullname = "/" + dir_name + "/" + std::string(ent->d_name); ++ if (fullname == WIFI_DEFAULT_FIRMWARE_PATH) { ++ closedir(dir); ++ return WICED_SUCCESS; ++ } ++ } ++ closedir(dir); ++ } ++ wiced_filesystem_firmware_error(); ++ } ++ return WICED_ERROR; ++} ++ ++static wiced_result_t whd_default_firmware_restore(void) ++{ ++#if MBED_CONF_APP_WIFI_FIRMWARE_RESTORE ++ size_t ret; ++ FILE *fp; ++ ++ //This should only happen the firs time or if the partition table has been overwritten i.e QSPI tests ++ WPRINT_WHD_DEBUG(("MBRBlockDevice init failed, repatitioning\n\r")); ++ if (mbr_bd->partition(qspi_bd, 1, 0x0B, 0, 1024 * 1024) != BD_ERROR_OK) { ++ return WICED_ERROR; ++ } ++ WPRINT_WHD_DEBUG(("MBRBockDevice repatitioning OK, reinit\n\r")); ++ ++ if (mbr_bd->init() != BD_ERROR_OK) { ++ return WICED_ERROR; ++ } ++ WPRINT_WHD_DEBUG(("MBRBockDevice init OK\n\r")); ++ ++ wifi_fs = new FATFileSystem(WIFI_DEFAULT_MOUNT_NAME); ++ ++ if (wifi_fs->reformat(mbr_bd) != 0) { ++ return WICED_ERROR; ++ } ++ WPRINT_WHD_DEBUG(("FATFileSystem reformat and mount OK\n\r")); ++ ++ fp = fopen(WIFI_DEFAULT_FIRMWARE_PATH, "wb"); ++ if (fp == NULL) { ++ return WICED_ERROR; ++ } ++ ret = fwrite(wifi_firmware_image_data, wifi_firmware_image.size, 1, fp); ++ if (ret != wifi_firmware_image.size) { ++ return WICED_ERROR; ++ } ++ fclose(fp); ++ ++ if (mbr_bd->sync() != 0) { ++ return WICED_ERROR; ++ } ++ WPRINT_WHD_DEBUG(("Sync BlockDevice OK\n\r")); ++ ++ if (wifi_fs->unmount() != 0) { ++ return WICED_ERROR; ++ } ++ WPRINT_WHD_DEBUG(("Unmount FS\n\r")); ++ wifi_fs = NULL; ++#endif ++ ++ return WICED_SUCCESS; ++} ++ ++wiced_result_t wiced_filesystem_init(void) ++{ ++ if (mbr_bd == NULL && wifi_fs == NULL) { ++ WPRINT_WHD_DEBUG(("Initialize FileSystem with Mbed default settings\n\r")); ++ qspi_bd = mbed::BlockDevice::get_default_instance(); ++ ++ if (qspi_bd->init() == BD_ERROR_OK) { ++ mbr_bd = new MBRBlockDevice(qspi_bd, WIFI_DEFAULT_PARTITION); ++ if (mbr_bd->init() == BD_ERROR_OK) { ++ return WICED_SUCCESS; ++ } else { ++ return whd_default_firmware_restore(); ++ } ++ } ++ return WICED_ERROR; ++ } else { ++ WPRINT_WHD_DEBUG(("FileSystem initialized with user settings\n\r")); ++ return WICED_SUCCESS; ++ } ++} ++ ++wiced_result_t wiced_filesystem_mount_default(void) ++{ ++ return wiced_filesystem_mount(mbr_bd, 0, &resource_fs_handle, WIFI_DEFAULT_MOUNT_NAME); ++} ++ ++wiced_result_t wiced_filesystem_mount(BlockDevice *device, wiced_filesystem_handle_type_t fs_type, wiced_filesystem_t *fs_handle_out, const char *mounted_name) ++{ ++ wifi_fs = new FATFileSystem(mounted_name); ++ ++ int err = wifi_fs->mount(device); ++ whd_firmware_check_hook(mounted_name, err); ++ if (!err) { ++ //fs_handle_out = wifi_fs ++ return WICED_SUCCESS; ++ } ++ return WICED_ERROR; ++} ++ ++wiced_result_t wiced_filesystem_file_open(wiced_filesystem_t *fs_handle, wiced_file_t *file_handle_out, const char *filename, wiced_filesystem_open_mode_t mode) ++{ ++ /* This is called by mbed test system */ ++ //if (mbr_bd == NULL && wifi_fs == NULL) { ++ // wiced_filesystem_init(); ++ //} ++ //This can be called from user sketch to provide custom block device and mount point before WiFi.beginAP or WiFi.begin ++ if (wifi_fs == NULL) { ++ wiced_filesystem_mount(mbr_bd, WIFI_DEFAULT_FS, fs_handle, WIFI_DEFAULT_MOUNT_NAME); ++ } ++ ++ if (wifi_fs == NULL) { ++ return WICED_ERROR; ++ } ++ ++ *file_handle_out = open(filename, mode); ++ if (*file_handle_out == -1) { ++ return WICED_ERROR; ++ } ++ return WICED_SUCCESS; ++} ++ ++wiced_result_t wiced_filesystem_file_seek(wiced_file_t *file_handle, int64_t offset, wiced_filesystem_seek_type_t whence) ++{ ++ if (*file_handle == -1) { ++ return WICED_ERROR; ++ } ++ lseek(*file_handle, offset, whence); ++ return WICED_SUCCESS; ++} ++ ++wiced_result_t wiced_filesystem_file_read(wiced_file_t *file_handle, void *data, uint64_t bytes_to_read, uint64_t *returned_bytes_count) ++{ ++ if (*file_handle == -1) { ++ return WICED_ERROR; ++ } ++ *returned_bytes_count = read(*file_handle, data, bytes_to_read); ++ return WICED_SUCCESS; ++} ++ ++wiced_result_t wiced_filesystem_file_close(wiced_file_t *file_handle) ++{ ++ if (*file_handle == -1) { ++ return WICED_ERROR; ++ } ++ close(*file_handle); ++ return WICED_SUCCESS; ++} +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.h +new file mode 100644 +index 0000000000..77d49d1820 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port/wiced_filesystem.h +@@ -0,0 +1,148 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides wiced fs porting to generic mbed APIs ++ */ ++ ++#pragma once ++ ++#include "whd_config.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++/****************************************************** ++ * Enumerations ++ ******************************************************/ ++ ++typedef enum { ++ WICED_FILESYSTEM_OPEN_FOR_READ, /** Specifies read access to the object. Data can be read from the file - equivalent to "r" or "rb" */ ++ WICED_FILESYSTEM_OPEN_FOR_WRITE, /** Specifies read/write access to the object. Data can be written to the file - equivalent to "r+" or "rb+" or "r+b" */ ++ WICED_FILESYSTEM_OPEN_WRITE_CREATE, /** Opens for read/write access, creates it if it doesn't exist */ ++ WICED_FILESYSTEM_OPEN_ZERO_LENGTH, /** Opens for read/write access, Truncates file to zero length if it exists, or creates it if it doesn't - equivalent to "w+", "wb+" or "w+b" */ ++ WICED_FILESYSTEM_OPEN_APPEND, /** Opens for read/write access, places the current location at the end of the file ready for appending - equivalent to "a", "ab" */ ++ WICED_FILESYSTEM_OPEN_APPEND_CREATE, /** Opens for read/write access, creates it if it doesn't exist, and places the current location at the end of the file ready for appending - equivalent to "a+", "ab+" or "a+b" */ ++} wiced_filesystem_open_mode_t; ++ ++typedef enum { ++ WICED_FILESYSTEM_SEEK_SET = SEEK_SET, /* Offset from start of file */ ++ WICED_FILESYSTEM_SEEK_CUR = SEEK_CUR, /* Offset from current position in file */ ++ WICED_FILESYSTEM_SEEK_END = SEEK_END, /* Offset from end of file */ ++} wiced_filesystem_seek_type_t; ++ ++typedef enum { ++ WICED_SUCCESS = 0, ++ WICED_ERROR = 1 ++} wiced_result_t; ++ ++/****************************************************** ++ * Type Definitions ++ ******************************************************/ ++ ++/** ++ * File-system Handle Structure ++ */ ++typedef int wiced_filesystem_t; ++ ++/** ++ * File Handle Structure ++ * ++ */ ++typedef int wiced_file_t; ++ ++/** ++ * File-system type Handle Structure ++ */ ++typedef int wiced_filesystem_handle_type_t; ++ ++/** ++ * Initialise the BlockDevice and filesystem module ++ * ++ * Initialises the BlockDevice and filesystem module before mounting a physical device. ++ * ++ * @return WICED_SUCCESS on success ++ */ ++wiced_result_t wiced_filesystem_init(void); ++ ++/** ++ * Mount the physical device using default parameters ++ * ++ * This assumes that the device is ready to read/write immediately. ++ * ++ * @return WICED_SUCCESS on success ++ */ ++wiced_result_t wiced_filesystem_mount_default(void); ++ ++/** ++ * Open a file for reading or writing ++ * ++ * @param[in] fs_handle - The filesystem handle to use - obtained from wiced_filesystem_mount ++ * @param[out] file_handle_out - a pointer to a wiced_file_t structure which will receive the ++ * file handle after it is opened ++ * @param[in] filename - The filename of the file to open ++ * @param[in] mode - Specifies read or write access ++ * ++ * @return WICED_SUCCESS on success ++ */ ++wiced_result_t wiced_filesystem_file_open(wiced_filesystem_t *fs_handle, wiced_file_t *file_handle_out, const char *filename, wiced_filesystem_open_mode_t mode); ++ ++/** ++ * Seek to a location within a file ++ * ++ * This is similar to the fseek() in ISO C. ++ * ++ * @param[in] file_handle - The file handle on which to perform the seek. ++ * Must have been previously opened with wiced_filesystem_fopen. ++ * @param[in] offset - The offset in bytes ++ * @param[in] whence - WICED_FILESYSTEM_SEEK_SET = Offset from start of file ++ * WICED_FILESYSTEM_SEEK_CUR = Offset from current position in file ++ * WICED_FILESYSTEM_SEEK_END = Offset from end of file ++ * ++ * @return WICED_SUCCESS on success ++ */ ++wiced_result_t wiced_filesystem_file_seek(wiced_file_t *file_handle, int64_t offset, wiced_filesystem_seek_type_t whence); ++ ++/** ++ * Reads data from a file into a memory buffer ++ * ++ * @param[in] file_handle - the file handle to read from ++ * @param[out] data - A pointer to the memory buffer that will ++ * receive the data that is read ++ * @param[in] bytes_to_read - the number of bytes to read ++ * @param[out] returned_item_count - the number of items successfully read. ++ * ++ * @return WICED_SUCCESS on success ++ */ ++wiced_result_t wiced_filesystem_file_read(wiced_file_t *file_handle, void *data, uint64_t bytes_to_read, uint64_t *returned_bytes_count); ++ ++/** ++ * Close a file ++ * ++ * This is similar to the fclose() in ISO C. ++ * ++ * @param[in] file_handle - the file handle to close ++ * ++ * @return WICED_SUCCESS = success ++ */ ++wiced_result_t wiced_filesystem_file_close(wiced_file_t *file_handle); ++ ++#ifdef __cplusplus ++} /*extern "C" */ ++#endif +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/LICENSE-permissive-binary-license-1.0.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/LICENSE-permissive-binary-license-1.0.txt +new file mode 100644 +index 0000000000..cbb51f9c99 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/LICENSE-permissive-binary-license-1.0.txt +@@ -0,0 +1,49 @@ ++Permissive Binary License ++ ++Version 1.0, July 2019 ++ ++Redistribution. Redistribution and use in binary form, without ++modification, are permitted provided that the following conditions are ++met: ++ ++1) Redistributions must reproduce the above copyright notice and the ++ following disclaimer in the documentation and/or other materials ++ provided with the distribution. ++ ++2) Unless to the extent explicitly permitted by law, no reverse ++ engineering, decompilation, or disassembly of this software is ++ permitted. ++ ++3) Redistribution as part of a software development kit must include the ++ accompanying file named �DEPENDENCIES� and any dependencies listed in ++ that file. ++ ++4) Neither the name of the copyright holder nor the names of its ++ contributors may be used to endorse or promote products derived from ++ this software without specific prior written permission. ++ ++Limited patent license. The copyright holders (and contributors) grant a ++worldwide, non-exclusive, no-charge, royalty-free patent license to ++make, have made, use, offer to sell, sell, import, and otherwise ++transfer this software, where such license applies only to those patent ++claims licensable by the copyright holders (and contributors) that are ++necessarily infringed by this software. This patent license shall not ++apply to any combinations that include this software. No hardware is ++licensed hereunder. ++ ++If you institute patent litigation against any entity (including a ++cross-claim or counterclaim in a lawsuit) alleging that the software ++itself infringes your patent(s), then your rights granted under this ++license shall terminate as of the date such litigation is filed. ++ ++DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ++CONTRIBUTORS "AS IS." ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT ++NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ++FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ++HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ++TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +\ No newline at end of file +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c +new file mode 100644 +index 0000000000..ddaf0f7188 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c +@@ -0,0 +1,25493 @@ ++/* ++ * Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved ++ * SPDX-License-Identifier: LicenseRef-PBL ++ * ++ * This file and the related binary are licensed under the ++ * Permissive Binary License, Version 1.0 (the "License"); ++ * you may not use these files except in compliance with the License. ++ * ++ * You may obtain a copy of the License here: ++ * LICENSE-permissive-binary-license-1.0.txt and at ++ * https://www.mbed.com/licenses/PBL-1.0 ++ * ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++#include "wiced_resource.h" ++ ++#if defined(CY_STORAGE_WIFI_DATA) ++CY_SECTION_WHD(CY_STORAGE_WIFI_DATA) __attribute__((used)) ++#endif ++const unsigned char wifi_firmware_image_data[421098] = { ++ 0, 0, 0, 0, 237, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, ++ 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, ++ 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, ++ 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, ++ 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, ++ 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, 25, 33, 0, 0, ++ 25, 33, 0, 0, 25, 33, 0, 0, 0, 72, 0, 71, 237, 33, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 68, 66, 80, 80, 128, 109, 4, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 149, 212, 1, 0, 223, 145, 2, 0, 59, 146, 2, 0, 73, 140, ++ 2, 0, 193, 137, 2, 0, 13, 137, 2, 0, 85, 138, 2, 0, 203, 135, 2, 0, ++ 167, 136, 2, 0, 181, 146, 2, 0, 189, 146, 2, 0, 141, 135, 2, 0, 167, ++ 135, 2, 0, 245, 140, 2, 0, 181, 135, 2, 0, 129, 145, 2, 0, 161, 135, ++ 2, 0, 17, 144, 2, 0, 97, 33, 0, 0, 93, 33, 0, 0, 157, 33, 0, 0, 163, ++ 128, 3, 0, 121, 128, 3, 0, 163, 126, 3, 0, 191, 126, 3, 0, 167, 128, ++ 3, 0, 251, 126, 3, 0, 247, 213, 1, 0, 145, 177, 0, 0, 45, 173, 0, 0, ++ 141, 177, 0, 0, 125, 169, 0, 0, 101, 173, 0, 0, 209, 177, 0, 0, 111, ++ 225, 4, 0, 141, 174, 0, 0, 61, 178, 0, 0, 63, 178, 0, 0, 97, 177, 0, ++ 0, 109, 225, 4, 0, 137, 43, 0, 0, 143, 227, 1, 0, 85, 227, 1, 0, 235, ++ 217, 1, 0, 61, 216, 1, 0, 145, 214, 1, 0, 49, 216, 1, 0, 137, 43, 0, ++ 0, 179, 178, 1, 0, 175, 178, 1, 0, 185, 178, 1, 0, 17, 227, 1, 0, 153, ++ 213, 1, 0, 143, 216, 1, 0, 171, 178, 1, 0, 153, 221, 1, 0, 165, 178, ++ 1, 0, 137, 43, 0, 0, 63, 227, 1, 0, 135, 138, 3, 0, 97, 227, 1, 0, 237, ++ 211, 1, 0, 137, 43, 0, 0, 209, 140, 3, 0, 59, 237, 2, 0, 117, 218, 2, ++ 0, 69, 230, 2, 0, 81, 230, 2, 0, 9, 229, 2, 0, 221, 242, 2, 0, 43, 246, ++ 2, 0, 11, 224, 2, 0, 185, 218, 2, 0, 109, 240, 2, 0, 133, 234, 2, 0, ++ 209, 224, 2, 0, 129, 224, 2, 0, 73, 224, 2, 0, 49, 224, 2, 0, 43, 224, ++ 2, 0, 151, 240, 2, 0, 141, 223, 2, 0, 251, 239, 2, 0, 177, 239, 2, 0, ++ 167, 219, 2, 0, 85, 131, 3, 0, 153, 132, 3, 0, 35, 246, 2, 0, 29, 246, ++ 2, 0, 137, 43, 0, 0, 45, 223, 2, 0, 165, 218, 2, 0, 175, 218, 2, 0, ++ 87, 233, 2, 0, 89, 230, 2, 0, 163, 218, 2, 0, 83, 231, 2, 0, 203, 234, ++ 2, 0, 237, 233, 2, 0, 77, 223, 2, 0, 109, 239, 2, 0, 205, 242, 2, 0, ++ 141, 242, 2, 0, 153, 242, 2, 0, 235, 238, 2, 0, 87, 223, 2, 0, 99, 233, ++ 2, 0, 131, 233, 2, 0, 89, 233, 2, 0, 65, 233, 2, 0, 3, 229, 2, 0, 157, ++ 218, 2, 0, 151, 218, 2, 0, 41, 246, 2, 0, 135, 233, 2, 0, 55, 224, 2, ++ 0, 45, 246, 2, 0, 77, 239, 2, 0, 205, 223, 2, 0, 113, 239, 2, 0, 25, ++ 225, 2, 0, 67, 229, 2, 0, 199, 228, 2, 0, 137, 43, 0, 0, 137, 43, 0, ++ 0, 217, 228, 2, 0, 99, 228, 2, 0, 65, 225, 2, 0, 199, 132, 3, 0, 187, ++ 132, 3, 0, 227, 132, 3, 0, 173, 132, 3, 0, 211, 228, 2, 0, 111, 133, ++ 3, 0, 189, 235, 2, 0, 137, 43, 0, 0, 221, 138, 3, 0, 169, 140, 3, 0, ++ 169, 137, 3, 0, 61, 138, 3, 0, 117, 142, 3, 0, 79, 140, 3, 0, 137, 142, ++ 3, 0, 141, 141, 3, 0, 85, 142, 3, 0, 123, 141, 3, 0, 79, 138, 3, 0, ++ 217, 136, 3, 0, 213, 139, 3, 0, 137, 43, 0, 0, 99, 183, 3, 0, 137, 43, ++ 0, 0, 137, 43, 0, 0, 95, 183, 3, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, ++ 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 215, 209, 3, 0, 137, 43, 0, ++ 0, 137, 43, 0, 0, 137, 43, 0, 0, 189, 217, 3, 0, 145, 217, 3, 0, 137, ++ 43, 0, 0, 89, 215, 3, 0, 39, 217, 3, 0, 69, 215, 3, 0, 97, 217, 3, 0, ++ 57, 214, 3, 0, 185, 218, 1, 0, 113, 247, 3, 0, 147, 247, 3, 0, 151, ++ 247, 3, 0, 137, 43, 0, 0, 137, 43, 0, 0, 93, 233, 3, 0, 83, 235, 3, ++ 0, 137, 43, 0, 0, 149, 239, 3, 0, 137, 43, 0, 0, 137, 43, 0, 0, 157, ++ 19, 4, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, ++ 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, ++ 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, ++ 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, ++ 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 1, 37, 0, ++ 0, 93, 49, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 25, 145, ++ 0, 0, 37, 145, 0, 0, 29, 147, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 137, ++ 43, 0, 0, 137, 43, 0, 0, 137, 43, 0, 0, 41, 232, 0, 0, 137, 43, 0, 0, ++ 239, 35, 0, 0, 21, 36, 0, 0, 213, 36, 0, 0, 13, 37, 0, 0, 29, 38, 0, ++ 0, 25, 44, 0, 0, 105, 49, 0, 0, 117, 49, 0, 0, 1, 50, 0, 0, 173, 52, ++ 0, 0, 221, 52, 0, 0, 249, 53, 0, 0, 157, 55, 0, 0, 135, 58, 0, 0, 133, ++ 60, 0, 0, 65, 64, 0, 0, 209, 69, 0, 0, 249, 70, 0, 0, 105, 72, 0, 0, ++ 9, 146, 0, 0, 137, 43, 0, 0, 85, 146, 0, 0, 51, 147, 0, 0, 57, 147, ++ 0, 0, 85, 147, 0, 0, 117, 148, 0, 0, 141, 148, 0, 0, 165, 148, 0, 0, ++ 185, 149, 0, 0, 83, 153, 0, 0, 187, 153, 0, 0, 33, 154, 0, 0, 47, 154, ++ 0, 0, 115, 154, 0, 0, 29, 155, 0, 0, 99, 155, 0, 0, 173, 155, 0, 0, ++ 201, 157, 0, 0, 117, 156, 0, 0, 121, 155, 0, 0, 215, 157, 0, 0, 37, ++ 158, 0, 0, 247, 158, 0, 0, 41, 159, 0, 0, 81, 160, 0, 0, 73, 179, 0, ++ 0, 79, 179, 0, 0, 83, 179, 0, 0, 113, 179, 0, 0, 181, 179, 0, 0, 241, ++ 179, 0, 0, 5, 180, 0, 0, 45, 197, 0, 0, 213, 197, 0, 0, 209, 200, 0, ++ 0, 29, 201, 0, 0, 85, 201, 0, 0, 93, 201, 0, 0, 237, 202, 0, 0, 75, ++ 203, 0, 0, 93, 203, 0, 0, 251, 205, 0, 0, 33, 212, 0, 0, 177, 212, 0, ++ 0, 7, 213, 0, 0, 11, 213, 0, 0, 33, 213, 0, 0, 139, 213, 0, 0, 59, 214, ++ 0, 0, 189, 214, 0, 0, 41, 215, 0, 0, 117, 217, 0, 0, 89, 215, 0, 0, ++ 237, 219, 0, 0, 137, 43, 0, 0, 63, 32, 1, 0, 237, 225, 0, 0, 1, 226, ++ 0, 0, 13, 226, 0, 0, 105, 226, 0, 0, 89, 230, 0, 0, 69, 232, 0, 0, 69, ++ 233, 0, 0, 219, 233, 0, 0, 41, 235, 0, 0, 169, 252, 0, 0, 173, 255, ++ 0, 0, 5, 2, 1, 0, 111, 2, 1, 0, 217, 10, 1, 0, 181, 14, 1, 0, 133, 33, ++ 1, 0, 11, 35, 1, 0, 39, 36, 1, 0, 243, 38, 1, 0, 21, 39, 1, 0, 35, 39, ++ 1, 0, 21, 40, 1, 0, 111, 40, 1, 0, 139, 40, 1, 0, 199, 45, 1, 0, 69, ++ 57, 1, 0, 237, 70, 1, 0, 137, 71, 1, 0, 205, 90, 1, 0, 147, 97, 1, 0, ++ 225, 117, 1, 0, 197, 121, 1, 0, 69, 130, 1, 0, 13, 138, 1, 0, 209, 146, ++ 1, 0, 133, 232, 1, 0, 161, 241, 1, 0, 105, 7, 2, 0, 139, 7, 2, 0, 247, ++ 8, 2, 0, 99, 12, 2, 0, 137, 43, 0, 0, 77, 18, 2, 0, 85, 78, 2, 0, 149, ++ 80, 2, 0, 5, 86, 2, 0, 35, 88, 2, 0, 81, 88, 2, 0, 185, 94, 2, 0, 199, ++ 102, 2, 0, 235, 102, 2, 0, 241, 102, 2, 0, 17, 103, 2, 0, 101, 103, ++ 2, 0, 177, 103, 2, 0, 255, 103, 2, 0, 57, 104, 2, 0, 233, 119, 2, 0, ++ 53, 169, 2, 0, 243, 209, 3, 0, 255, 209, 3, 0, 185, 210, 3, 0, 11, 211, ++ 3, 0, 61, 211, 3, 0, 129, 211, 3, 0, 165, 211, 3, 0, 173, 211, 3, 0, ++ 177, 211, 3, 0, 19, 213, 3, 0, 23, 213, 3, 0, 47, 19, 4, 0, 1, 0, 0, ++ 0, 0, 0, 0, 8, 32, 0, 0, 0, 0, 2, 0, 0, 4, 0, 0, 0, 255, 3, 0, 0, 80, ++ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, ++ 1, 0, 0, 0, 1, 0, 0, 0, 232, 3, 0, 0, 4, 0, 0, 0, 10, 7, 8, 0, 110, ++ 25, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 4, 0, 4, 0, 8, 0, 1, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, ++ 244, 18, 176, 0, 0, 0, 0, 5, 244, 102, 177, 0, 0, 0, 0, 5, 244, 14, ++ 176, 0, 0, 0, 0, 4, 244, 248, 177, 0, 0, 0, 0, 4, 244, 194, 177, 0, ++ 0, 0, 0, 2, 244, 207, 180, 0, 0, 0, 0, 2, 244, 34, 181, 0, 0, 0, 0, ++ 250, 247, 190, 156, 0, 0, 0, 0, 250, 247, 250, 156, 0, 0, 0, 0, 250, ++ 247, 64, 158, 0, 0, 0, 0, 250, 247, 218, 157, 0, 0, 0, 0, 250, 247, ++ 49, 155, 0, 0, 0, 0, 4, 244, 246, 179, 0, 0, 0, 0, 250, 247, 214, 156, ++ 0, 0, 0, 0, 0, 244, 202, 181, 0, 0, 0, 0, 234, 247, 153, 153, 0, 0, ++ 0, 0, 247, 247, 84, 159, 0, 0, 0, 0, 247, 247, 116, 153, 0, 0, 0, 0, ++ 247, 247, 52, 153, 0, 0, 0, 0, 253, 247, 115, 153, 0, 0, 0, 0, 253, ++ 247, 172, 154, 0, 0, 0, 0, 253, 247, 64, 155, 0, 0, 0, 0, 253, 247, ++ 66, 153, 0, 0, 0, 0, 248, 247, 78, 157, 0, 0, 0, 0, 248, 247, 198, 155, ++ 0, 0, 0, 0, 243, 247, 174, 156, 0, 0, 0, 0, 243, 247, 50, 153, 0, 0, ++ 0, 0, 242, 247, 116, 158, 0, 0, 0, 0, 247, 247, 96, 157, 0, 0, 0, 0, ++ 247, 247, 244, 153, 0, 0, 0, 0, 240, 247, 214, 157, 0, 0, 0, 0, 242, ++ 247, 161, 157, 0, 0, 0, 0, 237, 247, 192, 158, 0, 0, 0, 0, 234, 247, ++ 180, 159, 0, 0, 0, 0, 235, 247, 96, 152, 0, 0, 0, 0, 243, 247, 1, 153, ++ 0, 0, 0, 0, 231, 247, 252, 158, 0, 0, 0, 0, 241, 247, 32, 154, 0, 0, ++ 0, 0, 231, 247, 4, 154, 0, 0, 0, 0, 230, 247, 180, 157, 0, 0, 0, 0, ++ 230, 247, 118, 154, 0, 0, 0, 0, 230, 247, 66, 154, 0, 0, 0, 0, 229, ++ 247, 70, 157, 0, 0, 0, 0, 229, 247, 24, 158, 0, 0, 0, 0, 229, 247, 28, ++ 156, 0, 0, 0, 0, 233, 247, 174, 159, 0, 0, 0, 0, 233, 247, 138, 154, ++ 0, 0, 0, 0, 233, 247, 154, 153, 0, 0, 0, 0, 232, 247, 4, 155, 0, 0, ++ 0, 0, 231, 247, 238, 157, 0, 0, 0, 0, 231, 247, 6, 155, 0, 0, 0, 0, ++ 231, 247, 52, 157, 0, 0, 0, 0, 230, 247, 42, 158, 0, 0, 0, 0, 230, 247, ++ 129, 156, 0, 0, 0, 0, 230, 247, 41, 153, 0, 0, 0, 0, 230, 247, 37, 154, ++ 0, 0, 0, 0, 230, 247, 249, 152, 0, 0, 0, 0, 229, 247, 113, 159, 0, 0, ++ 0, 0, 230, 247, 66, 152, 0, 0, 0, 0, 229, 247, 251, 157, 0, 0, 0, 0, ++ 229, 247, 101, 156, 0, 0, 0, 0, 230, 247, 54, 159, 0, 0, 0, 0, 231, ++ 247, 144, 157, 0, 0, 0, 0, 230, 247, 140, 155, 0, 0, 0, 0, 229, 247, ++ 251, 155, 0, 0, 0, 0, 226, 247, 224, 153, 0, 0, 0, 0, 227, 247, 28, ++ 156, 0, 0, 0, 0, 226, 247, 95, 152, 0, 0, 0, 0, 225, 247, 174, 157, ++ 0, 0, 0, 0, 225, 247, 201, 158, 0, 0, 0, 0, 225, 247, 231, 156, 0, 0, ++ 0, 0, 226, 247, 26, 155, 0, 0, 0, 0, 237, 247, 163, 154, 0, 0, 0, 0, ++ 224, 247, 170, 157, 0, 0, 0, 0, 225, 247, 152, 155, 0, 0, 0, 0, 225, ++ 247, 150, 152, 0, 0, 0, 0, 225, 247, 153, 154, 0, 0, 0, 0, 225, 247, ++ 41, 154, 0, 0, 0, 0, 223, 247, 69, 157, 0, 0, 0, 0, 223, 247, 90, 154, ++ 0, 0, 0, 0, 223, 247, 184, 153, 0, 0, 0, 0, 222, 247, 64, 158, 0, 0, ++ 0, 0, 223, 247, 223, 156, 0, 0, 0, 0, 223, 247, 86, 154, 0, 0, 0, 0, ++ 223, 247, 152, 154, 0, 0, 0, 0, 222, 247, 38, 158, 0, 0, 0, 0, 222, ++ 247, 84, 159, 0, 0, 0, 0, 222, 247, 116, 156, 0, 0, 0, 0, 222, 247, ++ 147, 156, 0, 0, 0, 0, 222, 247, 127, 155, 0, 0, 0, 0, 222, 247, 137, ++ 155, 0, 0, 0, 0, 219, 247, 51, 156, 0, 0, 0, 0, 216, 247, 12, 158, 0, ++ 0, 0, 0, 216, 247, 90, 156, 0, 0, 0, 0, 216, 247, 100, 157, 0, 0, 0, ++ 0, 223, 247, 126, 153, 0, 0, 0, 0, 216, 247, 218, 153, 0, 0, 0, 0, 216, ++ 247, 16, 157, 0, 0, 0, 0, 216, 247, 178, 155, 0, 0, 0, 0, 216, 247, ++ 176, 155, 0, 0, 0, 0, 234, 247, 105, 158, 0, 0, 0, 0, 216, 247, 24, ++ 157, 0, 0, 0, 0, 221, 247, 146, 158, 0, 0, 0, 0, 232, 247, 13, 154, ++ 0, 0, 0, 0, 216, 247, 56, 155, 0, 0, 0, 0, 216, 247, 95, 153, 0, 0, ++ 0, 0, 216, 247, 56, 153, 0, 0, 0, 0, 216, 247, 65, 153, 0, 0, 0, 0, ++ 216, 247, 200, 152, 0, 0, 0, 0, 216, 247, 189, 153, 0, 0, 0, 0, 216, ++ 247, 109, 152, 0, 0, 0, 0, 215, 247, 41, 159, 0, 0, 0, 0, 215, 247, ++ 7, 155, 0, 0, 0, 0, 215, 247, 233, 154, 0, 0, 0, 0, 216, 247, 20, 153, ++ 0, 0, 0, 0, 229, 247, 186, 159, 0, 0, 0, 0, 213, 247, 100, 159, 0, 0, ++ 0, 0, 213, 247, 153, 153, 0, 0, 0, 0, 213, 247, 36, 153, 0, 0, 0, 0, ++ 229, 247, 1, 157, 0, 0, 0, 0, 227, 247, 220, 153, 0, 0, 0, 0, 231, 247, ++ 42, 159, 0, 0, 0, 0, 225, 247, 12, 153, 0, 0, 0, 0, 226, 247, 200, 158, ++ 0, 0, 0, 0, 211, 247, 0, 157, 0, 0, 0, 0, 211, 247, 30, 156, 0, 0, 0, ++ 0, 210, 247, 153, 158, 0, 0, 0, 0, 229, 247, 247, 156, 0, 0, 0, 0, 230, ++ 247, 9, 157, 0, 0, 0, 0, 210, 247, 179, 155, 0, 0, 0, 0, 210, 247, 61, ++ 159, 0, 0, 0, 0, 210, 247, 246, 152, 0, 0, 0, 0, 208, 247, 67, 159, ++ 0, 0, 0, 0, 208, 247, 212, 155, 0, 0, 0, 0, 207, 247, 172, 159, 0, 0, ++ 0, 0, 207, 247, 175, 158, 0, 0, 0, 0, 208, 247, 22, 154, 0, 0, 0, 0, ++ 207, 247, 170, 153, 0, 0, 0, 0, 207, 247, 158, 153, 0, 0, 0, 0, 208, ++ 247, 218, 152, 0, 0, 0, 0, 208, 247, 45, 152, 0, 0, 0, 0, 207, 247, ++ 187, 155, 0, 0, 0, 0, 207, 247, 93, 156, 0, 0, 0, 0, 207, 247, 51, 153, ++ 0, 0, 0, 0, 206, 247, 202, 158, 0, 0, 0, 0, 206, 247, 109, 156, 0, 0, ++ 0, 0, 230, 247, 152, 154, 0, 0, 0, 0, 205, 247, 170, 159, 0, 0, 0, 0, ++ 205, 247, 96, 155, 0, 0, 0, 0, 203, 247, 110, 154, 0, 0, 0, 0, 203, ++ 247, 110, 153, 0, 0, 0, 0, 202, 247, 94, 159, 0, 0, 0, 0, 212, 247, ++ 0, 154, 0, 0, 0, 0, 211, 247, 30, 158, 0, 0, 0, 0, 211, 247, 211, 157, ++ 0, 0, 0, 0, 211, 247, 34, 157, 0, 0, 0, 0, 225, 247, 242, 156, 0, 0, ++ 0, 0, 229, 247, 211, 154, 0, 0, 0, 0, 232, 247, 226, 157, 0, 0, 0, 0, ++ 210, 247, 37, 155, 0, 0, 0, 0, 210, 247, 120, 154, 0, 0, 0, 0, 210, ++ 247, 139, 153, 0, 0, 0, 0, 216, 247, 156, 154, 0, 0, 0, 0, 232, 247, ++ 92, 153, 0, 0, 0, 0, 231, 247, 0, 156, 0, 0, 0, 0, 225, 247, 116, 153, ++ 0, 0, 0, 0, 223, 247, 51, 158, 0, 0, 0, 0, 225, 247, 218, 152, 0, 0, ++ 0, 0, 211, 247, 198, 157, 0, 0, 0, 0, 211, 247, 236, 156, 0, 0, 0, 0, ++ 211, 247, 252, 155, 0, 0, 0, 0, 210, 247, 30, 158, 0, 0, 0, 0, 210, ++ 247, 174, 152, 0, 0, 0, 0, 231, 247, 168, 158, 0, 0, 0, 0, 229, 247, ++ 196, 152, 0, 0, 0, 0, 226, 247, 28, 153, 0, 0, 0, 0, 229, 247, 8, 158, ++ 0, 0, 0, 0, 226, 247, 112, 159, 0, 0, 0, 0, 211, 247, 170, 159, 0, 0, ++ 0, 0, 229, 247, 29, 156, 0, 0, 0, 0, 226, 247, 69, 158, 0, 0, 0, 0, ++ 226, 247, 91, 156, 0, 0, 0, 0, 223, 247, 162, 152, 0, 0, 0, 0, 210, ++ 247, 186, 152, 0, 0, 0, 0, 210, 247, 71, 159, 0, 0, 0, 0, 210, 247, ++ 28, 157, 0, 0, 0, 0, 210, 247, 30, 156, 0, 0, 0, 0, 210, 247, 47, 156, ++ 0, 0, 0, 0, 226, 247, 100, 154, 0, 0, 0, 0, 229, 247, 212, 154, 0, 0, ++ 0, 0, 202, 247, 210, 157, 0, 0, 0, 0, 202, 247, 25, 152, 0, 0, 0, 0, ++ 207, 247, 139, 153, 0, 0, 0, 0, 201, 247, 240, 159, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 8, 128, 0, 4, 0, 0, 0, 0, 16, ++ 0, 0, 24, 67, 128, 0, 4, 0, 0, 0, 8, 16, 0, 0, 144, 67, 128, 0, 4, 0, ++ 0, 0, 16, 16, 0, 0, 156, 83, 128, 0, 4, 0, 0, 0, 24, 16, 0, 0, 4, 85, ++ 128, 0, 4, 0, 0, 0, 32, 16, 0, 0, 52, 111, 128, 0, 4, 0, 0, 0, 40, 16, ++ 0, 0, 52, 114, 128, 0, 4, 0, 0, 0, 48, 16, 0, 0, 168, 132, 128, 0, 4, ++ 0, 0, 0, 56, 16, 0, 0, 180, 132, 128, 0, 4, 0, 0, 0, 64, 16, 0, 0, 208, ++ 123, 128, 0, 4, 0, 0, 0, 72, 16, 0, 0, 80, 124, 128, 0, 4, 0, 0, 0, ++ 80, 16, 0, 0, 112, 134, 128, 0, 4, 0, 0, 0, 88, 16, 0, 0, 36, 78, 128, ++ 0, 4, 0, 0, 0, 96, 16, 0, 0, 148, 133, 128, 0, 4, 0, 0, 0, 104, 16, ++ 0, 0, 16, 54, 128, 0, 4, 0, 0, 0, 112, 16, 0, 0, 208, 66, 131, 0, 4, ++ 0, 0, 0, 120, 16, 0, 0, 120, 190, 128, 0, 4, 0, 0, 0, 128, 16, 0, 0, ++ 0, 198, 128, 0, 4, 0, 0, 0, 136, 16, 0, 0, 104, 200, 128, 0, 4, 0, 0, ++ 0, 144, 16, 0, 0, 76, 229, 128, 0, 4, 0, 0, 0, 152, 16, 0, 0, 104, 230, ++ 128, 0, 4, 0, 0, 0, 160, 16, 0, 0, 8, 233, 128, 0, 4, 0, 0, 0, 168, ++ 16, 0, 0, 180, 235, 128, 0, 4, 0, 0, 0, 176, 16, 0, 0, 180, 54, 129, ++ 0, 4, 0, 0, 0, 184, 16, 0, 0, 0, 57, 129, 0, 4, 0, 0, 0, 192, 16, 0, ++ 0, 232, 147, 129, 0, 4, 0, 0, 0, 200, 16, 0, 0, 208, 149, 129, 0, 4, ++ 0, 0, 0, 208, 16, 0, 0, 236, 152, 129, 0, 4, 0, 0, 0, 216, 16, 0, 0, ++ 136, 160, 129, 0, 4, 0, 0, 0, 224, 16, 0, 0, 132, 162, 129, 0, 4, 0, ++ 0, 0, 232, 16, 0, 0, 16, 244, 129, 0, 4, 0, 0, 0, 240, 16, 0, 0, 72, ++ 247, 129, 0, 4, 0, 0, 0, 248, 16, 0, 0, 88, 248, 129, 0, 4, 0, 0, 0, ++ 0, 17, 0, 0, 104, 43, 130, 0, 4, 0, 0, 0, 8, 17, 0, 0, 136, 45, 130, ++ 0, 4, 0, 0, 0, 16, 17, 0, 0, 220, 50, 130, 0, 4, 0, 0, 0, 24, 17, 0, ++ 0, 36, 25, 131, 0, 4, 0, 0, 0, 32, 17, 0, 0, 228, 65, 130, 0, 4, 0, ++ 0, 0, 40, 17, 0, 0, 96, 45, 131, 0, 4, 0, 0, 0, 48, 17, 0, 0, 232, 50, ++ 131, 0, 4, 0, 0, 0, 56, 17, 0, 0, 76, 55, 131, 0, 4, 0, 0, 0, 64, 17, ++ 0, 0, 152, 59, 131, 0, 4, 0, 0, 0, 72, 17, 0, 0, 24, 61, 131, 0, 4, ++ 0, 0, 0, 80, 17, 0, 0, 200, 61, 131, 0, 4, 0, 0, 0, 88, 17, 0, 0, 8, ++ 64, 131, 0, 4, 0, 0, 0, 96, 17, 0, 0, 52, 79, 131, 0, 4, 0, 0, 0, 104, ++ 17, 0, 0, 20, 82, 131, 0, 4, 0, 0, 0, 112, 17, 0, 0, 16, 83, 131, 0, ++ 4, 0, 0, 0, 120, 17, 0, 0, 152, 107, 131, 0, 4, 0, 0, 0, 128, 17, 0, ++ 0, 16, 122, 131, 0, 4, 0, 0, 0, 136, 17, 0, 0, 228, 130, 131, 0, 4, ++ 0, 0, 0, 144, 17, 0, 0, 252, 131, 131, 0, 4, 0, 0, 0, 152, 17, 0, 0, ++ 156, 146, 131, 0, 4, 0, 0, 0, 160, 17, 0, 0, 44, 164, 131, 0, 4, 0, ++ 0, 0, 168, 17, 0, 0, 96, 165, 131, 0, 4, 0, 0, 0, 176, 17, 0, 0, 200, ++ 165, 131, 0, 4, 0, 0, 0, 184, 17, 0, 0, 104, 167, 131, 0, 4, 0, 0, 0, ++ 192, 17, 0, 0, 28, 169, 131, 0, 4, 0, 0, 0, 200, 17, 0, 0, 224, 174, ++ 131, 0, 4, 0, 0, 0, 208, 17, 0, 0, 168, 175, 131, 0, 4, 0, 0, 0, 216, ++ 17, 0, 0, 196, 177, 131, 0, 4, 0, 0, 0, 224, 17, 0, 0, 48, 184, 131, ++ 0, 4, 0, 0, 0, 232, 17, 0, 0, 252, 191, 131, 0, 4, 0, 0, 0, 240, 17, ++ 0, 0, 188, 196, 131, 0, 4, 0, 0, 0, 248, 17, 0, 0, 68, 217, 131, 0, ++ 4, 0, 0, 0, 0, 18, 0, 0, 184, 238, 131, 0, 4, 0, 0, 0, 8, 18, 0, 0, ++ 100, 246, 131, 0, 4, 0, 0, 0, 16, 18, 0, 0, 64, 41, 132, 0, 4, 0, 0, ++ 0, 24, 18, 0, 0, 212, 45, 132, 0, 4, 0, 0, 0, 32, 18, 0, 0, 16, 48, ++ 132, 0, 4, 0, 0, 0, 40, 18, 0, 0, 236, 48, 132, 0, 4, 0, 0, 0, 48, 18, ++ 0, 0, 172, 253, 131, 0, 4, 0, 0, 0, 56, 18, 0, 0, 196, 69, 130, 0, 4, ++ 0, 0, 0, 64, 18, 0, 0, 80, 67, 132, 0, 4, 0, 0, 0, 72, 18, 0, 0, 116, ++ 73, 132, 0, 4, 0, 0, 0, 80, 18, 0, 0, 140, 75, 132, 0, 4, 0, 0, 0, 88, ++ 18, 0, 0, 60, 77, 132, 0, 4, 0, 0, 0, 96, 18, 0, 0, 184, 77, 132, 0, ++ 4, 0, 0, 0, 104, 18, 0, 0, 184, 85, 132, 0, 4, 0, 0, 0, 112, 18, 0, ++ 0, 108, 97, 132, 0, 4, 0, 0, 0, 120, 18, 0, 0, 76, 99, 132, 0, 4, 0, ++ 0, 0, 128, 18, 0, 0, 252, 101, 132, 0, 4, 0, 0, 0, 136, 18, 0, 0, 148, ++ 110, 132, 0, 4, 0, 0, 0, 144, 18, 0, 0, 212, 112, 132, 0, 4, 0, 0, 0, ++ 152, 18, 0, 0, 204, 115, 132, 0, 4, 0, 0, 0, 160, 18, 0, 0, 16, 122, ++ 132, 0, 4, 0, 0, 0, 168, 18, 0, 0, 204, 123, 132, 0, 4, 0, 0, 0, 176, ++ 18, 0, 0, 152, 125, 132, 0, 4, 0, 0, 0, 184, 18, 0, 0, 172, 133, 132, ++ 0, 4, 0, 0, 0, 192, 18, 0, 0, 120, 135, 132, 0, 4, 0, 0, 0, 200, 18, ++ 0, 0, 128, 135, 132, 0, 4, 0, 0, 0, 208, 18, 0, 0, 228, 185, 132, 0, ++ 4, 0, 0, 0, 216, 18, 0, 0, 36, 234, 132, 0, 4, 0, 0, 0, 224, 18, 0, ++ 0, 108, 241, 132, 0, 4, 0, 0, 0, 232, 18, 0, 0, 44, 242, 132, 0, 4, ++ 0, 0, 0, 240, 18, 0, 0, 92, 104, 132, 0, 4, 0, 0, 0, 248, 18, 0, 0, ++ 132, 242, 132, 0, 4, 0, 0, 0, 0, 19, 0, 0, 168, 11, 133, 0, 4, 0, 0, ++ 0, 8, 19, 0, 0, 64, 17, 133, 0, 4, 0, 0, 0, 16, 19, 0, 0, 144, 17, 133, ++ 0, 4, 0, 0, 0, 24, 19, 0, 0, 96, 87, 130, 0, 4, 0, 0, 0, 32, 19, 0, ++ 0, 72, 243, 132, 0, 4, 0, 0, 0, 40, 19, 0, 0, 48, 146, 132, 0, 4, 0, ++ 0, 0, 48, 19, 0, 0, 252, 156, 130, 0, 4, 0, 0, 0, 56, 19, 0, 0, 140, ++ 21, 133, 0, 4, 0, 0, 0, 64, 19, 0, 0, 0, 25, 133, 0, 4, 0, 0, 0, 72, ++ 19, 0, 0, 20, 25, 133, 0, 4, 0, 0, 0, 80, 19, 0, 0, 80, 25, 133, 0, ++ 4, 0, 0, 0, 88, 19, 0, 0, 120, 25, 133, 0, 4, 0, 0, 0, 96, 19, 0, 0, ++ 60, 27, 133, 0, 4, 0, 0, 0, 104, 19, 0, 0, 248, 28, 133, 0, 4, 0, 0, ++ 0, 112, 19, 0, 0, 252, 32, 133, 0, 4, 0, 0, 0, 120, 19, 0, 0, 104, 39, ++ 133, 0, 4, 0, 0, 0, 128, 19, 0, 0, 208, 39, 133, 0, 4, 0, 0, 0, 136, ++ 19, 0, 0, 132, 244, 132, 0, 4, 0, 0, 0, 144, 19, 0, 0, 16, 163, 130, ++ 0, 4, 0, 0, 0, 152, 19, 0, 0, 48, 65, 133, 0, 4, 0, 0, 0, 160, 19, 0, ++ 0, 32, 80, 133, 0, 4, 0, 0, 0, 168, 19, 0, 0, 16, 78, 133, 0, 4, 0, ++ 0, 0, 176, 19, 0, 0, 92, 169, 130, 0, 4, 0, 0, 0, 184, 19, 0, 0, 236, ++ 171, 130, 0, 4, 0, 0, 0, 192, 19, 0, 0, 184, 174, 130, 0, 4, 0, 0, 0, ++ 200, 19, 0, 0, 204, 10, 132, 0, 4, 0, 0, 0, 208, 19, 0, 0, 240, 17, ++ 132, 0, 4, 0, 0, 0, 216, 19, 0, 0, 52, 111, 133, 0, 4, 0, 0, 0, 224, ++ 19, 0, 0, 228, 115, 133, 0, 4, 0, 0, 0, 232, 19, 0, 0, 144, 126, 133, ++ 0, 4, 0, 0, 0, 240, 19, 0, 0, 132, 175, 130, 0, 4, 0, 0, 0, 248, 19, ++ 0, 0, 252, 177, 130, 0, 4, 0, 0, 0, 0, 20, 0, 0, 116, 148, 133, 0, 4, ++ 0, 0, 0, 8, 20, 0, 0, 8, 150, 133, 0, 4, 0, 0, 0, 16, 20, 0, 0, 160, ++ 150, 133, 0, 4, 0, 0, 0, 24, 20, 0, 0, 88, 171, 133, 0, 4, 0, 0, 0, ++ 32, 20, 0, 0, 164, 189, 133, 0, 4, 0, 0, 0, 40, 20, 0, 0, 120, 190, ++ 133, 0, 4, 0, 0, 0, 48, 20, 0, 0, 4, 194, 133, 0, 4, 0, 0, 0, 56, 20, ++ 0, 0, 88, 194, 133, 0, 4, 0, 0, 0, 64, 20, 0, 0, 216, 195, 133, 0, 4, ++ 0, 0, 0, 72, 20, 0, 0, 136, 196, 133, 0, 4, 0, 0, 0, 80, 20, 0, 0, 252, ++ 198, 133, 0, 4, 0, 0, 0, 88, 20, 0, 0, 112, 201, 133, 0, 4, 0, 0, 0, ++ 96, 20, 0, 0, 132, 208, 133, 0, 4, 0, 0, 0, 104, 20, 0, 0, 72, 210, ++ 133, 0, 4, 0, 0, 0, 112, 20, 0, 0, 216, 213, 133, 0, 4, 0, 0, 0, 120, ++ 20, 0, 0, 16, 222, 133, 0, 4, 0, 0, 0, 128, 20, 0, 0, 24, 228, 133, ++ 0, 4, 0, 0, 0, 136, 20, 0, 0, 148, 180, 130, 0, 4, 0, 0, 0, 144, 20, ++ 0, 0, 64, 241, 133, 0, 4, 0, 0, 0, 152, 20, 0, 0, 96, 248, 133, 0, 4, ++ 0, 0, 0, 160, 20, 0, 0, 168, 24, 134, 0, 4, 0, 0, 0, 168, 20, 0, 0, ++ 64, 27, 134, 0, 4, 0, 0, 0, 176, 20, 0, 0, 132, 34, 134, 0, 4, 0, 0, ++ 0, 184, 20, 0, 0, 136, 51, 134, 0, 4, 0, 0, 0, 192, 20, 0, 0, 76, 61, ++ 134, 0, 4, 0, 0, 0, 200, 20, 0, 0, 128, 62, 134, 0, 4, 0, 0, 0, 208, ++ 20, 0, 0, 16, 63, 134, 0, 4, 0, 0, 0, 216, 20, 0, 0, 48, 197, 130, 0, ++ 4, 0, 0, 0, 224, 20, 0, 0, 128, 197, 130, 0, 4, 0, 0, 0, 232, 20, 0, ++ 0, 172, 200, 130, 0, 4, 0, 0, 0, 240, 20, 0, 0, 204, 97, 134, 0, 4, ++ 0, 0, 0, 248, 20, 0, 0, 164, 98, 134, 0, 4, 0, 0, 0, 0, 21, 0, 0, 124, ++ 99, 134, 0, 4, 0, 0, 0, 8, 21, 0, 0, 132, 18, 133, 0, 4, 0, 0, 0, 16, ++ 21, 0, 0, 12, 111, 131, 0, 4, 0, 0, 0, 24, 21, 0, 0, 236, 208, 130, ++ 0, 4, 0, 0, 0, 32, 21, 0, 0, 116, 28, 132, 0, 4, 0, 0, 0, 40, 21, 0, ++ 0, 140, 31, 132, 0, 4, 0, 0, 0, 48, 21, 0, 0, 24, 34, 132, 0, 4, 0, ++ 0, 0, 56, 21, 0, 0, 200, 144, 134, 0, 4, 0, 0, 0, 64, 21, 0, 0, 20, ++ 146, 134, 0, 4, 0, 0, 0, 72, 21, 0, 0, 156, 147, 134, 0, 4, 0, 0, 0, ++ 80, 21, 0, 0, 220, 165, 134, 0, 4, 0, 0, 0, 88, 21, 0, 0, 12, 185, 134, ++ 0, 4, 0, 0, 0, 96, 21, 0, 0, 20, 217, 130, 0, 4, 0, 0, 0, 104, 21, 0, ++ 0, 196, 221, 130, 0, 4, 0, 0, 0, 112, 21, 0, 0, 84, 235, 130, 0, 4, ++ 0, 0, 0, 120, 21, 0, 0, 84, 236, 130, 0, 4, 0, 0, 0, 128, 21, 0, 0, ++ 16, 237, 130, 0, 4, 0, 0, 0, 136, 21, 0, 0, 72, 202, 134, 0, 4, 0, 0, ++ 0, 144, 21, 0, 0, 120, 237, 130, 0, 4, 0, 0, 0, 152, 21, 0, 0, 240, ++ 238, 130, 0, 4, 0, 0, 0, 160, 21, 0, 0, 224, 241, 130, 0, 4, 0, 0, 0, ++ 168, 21, 0, 0, 176, 36, 132, 0, 4, 0, 0, 0, 176, 21, 0, 0, 8, 217, 134, ++ 0, 4, 0, 0, 0, 184, 21, 0, 0, 128, 220, 134, 0, 4, 0, 0, 0, 192, 21, ++ 0, 0, 248, 220, 134, 0, 4, 0, 0, 0, 200, 21, 0, 0, 16, 222, 134, 0, ++ 4, 0, 0, 0, 208, 21, 0, 0, 216, 223, 134, 0, 4, 0, 0, 0, 216, 21, 0, ++ 0, 68, 254, 130, 0, 4, 0, 0, 0, 224, 21, 0, 0, 20, 0, 131, 0, 4, 0, ++ 0, 0, 232, 21, 0, 0, 52, 104, 135, 0, 4, 0, 0, 0, 240, 21, 0, 0, 184, ++ 47, 134, 0, 4, 0, 0, 0, 248, 21, 0, 0, 252, 196, 133, 0, 4, 0, 0, 0, ++ 0, 22, 0, 0, 216, 116, 135, 0, 4, 0, 0, 0, 8, 22, 0, 0, 104, 70, 131, ++ 105, 65, 105, 11, 181, 3, 105, 90, 70, 81, 70, 14, 180, 74, 70, 65, ++ 70, 6, 180, 195, 104, 130, 104, 65, 104, 254, 180, 3, 104, 194, 105, ++ 239, 243, 3, 129, 14, 180, 130, 105, 239, 243, 5, 129, 6, 180, 3, 72, ++ 1, 104, 0, 41, 254, 208, 104, 70, 136, 71, 20, 176, 0, 189, 196, 33, ++ 0, 0, 98, 182, 112, 71, 114, 182, 112, 71, 4, 73, 8, 64, 0, 40, 3, 208, ++ 3, 73, 10, 104, 2, 67, 10, 96, 112, 71, 0, 0, 255, 255, 0, 0, 0, 225, ++ 0, 224, 4, 73, 8, 64, 0, 40, 4, 208, 3, 73, 10, 104, 192, 67, 2, 64, ++ 10, 96, 112, 71, 255, 255, 0, 0, 128, 225, 0, 224, 2, 73, 9, 104, 144, ++ 34, 136, 88, 112, 71, 0, 0, 204, 33, 0, 0, 2, 73, 9, 104, 156, 34, 136, ++ 80, 112, 71, 0, 0, 204, 33, 0, 0, 221, 186, 173, 187, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 2, 74, 17, 104, 16, 96, 8, 28, 112, 71, 0, 0, 196, 33, 0, 0, 86, 72, ++ 87, 73, 0, 34, 10, 80, 1, 104, 86, 74, 10, 64, 86, 79, 15, 64, 63, 66, ++ 6, 209, 80, 70, 0, 66, 2, 208, 64, 70, 0, 66, 41, 209, 254, 231, 252, ++ 33, 65, 88, 10, 104, 15, 35, 19, 64, 15, 43, 241, 208, 1, 43, 1, 208, ++ 4, 49, 246, 231, 8, 49, 75, 75, 19, 64, 75, 76, 163, 66, 6, 209, 0, ++ 240, 193, 248, 128, 70, 0, 240, 202, 248, 129, 70, 233, 231, 71, 76, ++ 163, 66, 230, 209, 11, 31, 27, 104, 70, 76, 35, 64, 24, 36, 227, 64, ++ 156, 70, 0, 240, 176, 248, 130, 70, 0, 240, 185, 248, 131, 70, 216, ++ 231, 65, 73, 33, 34, 66, 80, 55, 74, 64, 73, 137, 88, 255, 35, 25, 66, ++ 25, 208, 81, 104, 62, 75, 25, 66, 21, 208, 17, 104, 52, 75, 25, 64, ++ 211, 106, 16, 224, 163, 66, 14, 208, 192, 70, 12, 224, 57, 73, 137, ++ 88, 25, 66, 8, 208, 56, 73, 137, 88, 25, 64, 153, 66, 250, 209, 54, ++ 75, 17, 105, 25, 66, 252, 208, 73, 70, 63, 66, 4, 209, 152, 35, 203, ++ 88, 16, 36, 227, 64, 1, 224, 49, 75, 203, 88, 28, 36, 35, 64, 0, 43, ++ 1, 208, 0, 240, 146, 248, 64, 70, 46, 73, 8, 96, 72, 70, 45, 73, 8, ++ 96, 80, 70, 45, 73, 8, 96, 96, 70, 44, 73, 8, 96, 44, 73, 15, 96, 44, ++ 77, 45, 73, 13, 96, 45, 72, 45, 73, 0, 34, 4, 192, 129, 66, 252, 216, ++ 4, 61, 173, 70, 0, 157, 236, 67, 16, 35, 221, 65, 172, 66, 16, 209, ++ 36, 12, 164, 0, 39, 77, 44, 96, 107, 70, 27, 27, 38, 72, 38, 77, 40, ++ 96, 0, 44, 5, 208, 29, 104, 5, 96, 4, 51, 4, 48, 4, 60, 249, 220, 129, ++ 176, 34, 75, 27, 73, 13, 104, 237, 26, 13, 96, 108, 70, 228, 26, 165, ++ 70, 104, 70, 0, 9, 0, 1, 133, 70, 2, 240, 197, 250, 254, 231, 0, 0, ++ 0, 24, 20, 6, 0, 0, 255, 255, 0, 0, 0, 0, 0, 240, 0, 255, 15, 0, 0, ++ 42, 8, 0, 0, 14, 8, 0, 0, 0, 0, 255, 224, 1, 0, 0, 4, 6, 0, 0, 0, 0, ++ 56, 0, 24, 6, 0, 0, 12, 6, 0, 0, 0, 16, 0, 0, 8, 4, 0, 0, 204, 33, 0, ++ 0, 208, 33, 0, 0, 212, 33, 0, 0, 216, 33, 0, 0, 200, 33, 0, 0, 0, 0, ++ 8, 0, 64, 93, 4, 0, 36, 109, 4, 0, 20, 116, 4, 0, 72, 93, 4, 0, 240, ++ 120, 5, 0, 68, 93, 4, 0, 0, 0, 1, 0, 8, 104, 15, 34, 4, 49, 2, 64, 5, ++ 42, 249, 209, 1, 74, 16, 64, 247, 70, 0, 0, 0, 240, 255, 255, 8, 104, ++ 15, 34, 4, 49, 2, 64, 5, 42, 249, 209, 128, 34, 16, 66, 246, 208, 1, ++ 74, 16, 64, 247, 70, 0, 240, 255, 255, 254, 231, 48, 181, 0, 35, 6, ++ 224, 197, 92, 204, 92, 165, 66, 6, 211, 3, 241, 1, 3, 6, 216, 147, 66, ++ 246, 209, 0, 32, 48, 189, 79, 240, 255, 48, 48, 189, 1, 32, 48, 189, ++ 3, 42, 45, 233, 240, 79, 131, 70, 77, 217, 72, 64, 16, 240, 3, 0, 75, ++ 209, 75, 66, 3, 240, 3, 3, 210, 26, 3, 224, 12, 92, 11, 248, 0, 64, ++ 1, 48, 152, 66, 249, 209, 31, 42, 11, 235, 0, 3, 1, 68, 10, 217, 34, ++ 240, 31, 0, 8, 24, 177, 232, 240, 23, 163, 232, 240, 23, 136, 66, 249, ++ 216, 2, 240, 31, 2, 144, 8, 1, 56, 6, 40, 39, 216, 223, 232, 0, 240, ++ 4, 9, 14, 19, 24, 29, 34, 0, 8, 104, 24, 96, 4, 49, 4, 51, 28, 224, ++ 177, 232, 17, 0, 163, 232, 17, 0, 23, 224, 177, 232, 49, 0, 163, 232, ++ 49, 0, 18, 224, 177, 232, 113, 0, 163, 232, 113, 0, 13, 224, 177, 232, ++ 241, 0, 163, 232, 241, 0, 8, 224, 177, 232, 241, 16, 163, 232, 241, ++ 16, 3, 224, 177, 232, 241, 17, 163, 232, 241, 17, 2, 240, 3, 2, 2, 224, ++ 3, 70, 0, 224, 91, 70, 0, 32, 2, 224, 12, 92, 28, 84, 1, 48, 144, 66, ++ 250, 209, 88, 70, 189, 232, 240, 143, 0, 72, 112, 71, 36, 109, 4, 0, ++ 0, 72, 112, 71, 100, 109, 4, 0, 0, 72, 112, 71, 200, 109, 4, 0, 16, ++ 181, 4, 70, 255, 247, 248, 255, 3, 104, 19, 177, 64, 104, 33, 70, 152, ++ 71, 16, 189, 0, 72, 112, 71, 112, 109, 4, 0, 9, 240, 198, 186, 1, 35, ++ 139, 64, 45, 233, 247, 79, 179, 245, 0, 31, 40, 191, 79, 244, 0, 19, ++ 4, 43, 56, 191, 4, 35, 3, 48, 1, 147, 32, 240, 3, 4, 255, 247, 214, ++ 255, 53, 75, 0, 34, 211, 248, 0, 176, 21, 70, 148, 70, 19, 70, 39, 224, ++ 209, 248, 0, 160, 162, 69, 34, 211, 1, 241, 8, 7, 1, 158, 7, 235, 10, ++ 8, 198, 241, 0, 9, 196, 235, 8, 6, 9, 234, 6, 6, 190, 66, 21, 211, 221, ++ 248, 4, 144, 9, 241, 255, 57, 25, 234, 7, 15, 205, 248, 0, 144, 2, 208, ++ 247, 27, 7, 47, 9, 217, 196, 235, 10, 7, 95, 69, 5, 210, 66, 70, 53, ++ 70, 111, 177, 187, 70, 132, 70, 11, 70, 8, 70, 65, 104, 0, 41, 212, ++ 209, 59, 185, 28, 74, 24, 70, 17, 104, 1, 49, 17, 96, 47, 224, 132, ++ 70, 11, 70, 82, 27, 17, 27, 7, 41, 9, 217, 24, 104, 42, 25, 64, 26, ++ 8, 57, 24, 96, 41, 81, 89, 104, 81, 96, 90, 96, 34, 70, 25, 104, 137, ++ 26, 7, 41, 3, 216, 90, 104, 204, 248, 4, 32, 4, 224, 90, 80, 161, 241, ++ 8, 2, 26, 96, 91, 24, 12, 72, 0, 34, 25, 104, 90, 96, 2, 104, 138, 24, ++ 2, 96, 9, 72, 1, 104, 8, 49, 1, 96, 137, 24, 8, 74, 16, 104, 129, 66, ++ 136, 191, 17, 96, 3, 241, 8, 0, 189, 232, 254, 143, 44, 7, 0, 0, 40, ++ 7, 0, 0, 76, 7, 0, 0, 120, 7, 0, 0, 108, 109, 4, 0, 56, 181, 25, 75, ++ 80, 248, 8, 44, 25, 104, 5, 70, 138, 26, 26, 96, 22, 75, 160, 241, 8, ++ 4, 26, 104, 8, 58, 26, 96, 255, 247, 80, 255, 2, 224, 163, 66, 3, 210, ++ 24, 70, 67, 104, 0, 43, 249, 209, 85, 248, 8, 44, 169, 24, 139, 66, ++ 5, 209, 25, 104, 91, 104, 82, 24, 8, 50, 69, 248, 8, 44, 99, 96, 3, ++ 104, 3, 241, 8, 2, 130, 24, 162, 66, 7, 209, 85, 248, 8, 44, 155, 24, ++ 8, 51, 3, 96, 99, 104, 67, 96, 0, 224, 68, 96, 0, 32, 56, 189, 76, 7, ++ 0, 0, 120, 7, 0, 0, 16, 181, 0, 33, 64, 34, 4, 70, 1, 240, 62, 218, ++ 16, 75, 35, 96, 16, 75, 99, 96, 16, 75, 163, 96, 16, 75, 227, 96, 16, ++ 75, 35, 97, 16, 75, 99, 97, 16, 75, 163, 97, 16, 75, 227, 97, 16, 75, ++ 35, 98, 16, 75, 99, 98, 16, 75, 163, 98, 16, 75, 227, 98, 16, 75, 35, ++ 99, 16, 75, 99, 99, 16, 75, 163, 99, 16, 75, 227, 99, 16, 189, 0, 191, ++ 0, 0, 0, 0, 226, 20, 4, 0, 228, 20, 4, 0, 61, 93, 4, 0, 64, 93, 4, 0, ++ 34, 109, 4, 0, 36, 109, 4, 0, 20, 116, 4, 0, 20, 116, 4, 0, 168, 183, ++ 5, 0, 168, 183, 5, 0, 180, 107, 6, 0, 252, 0, 0, 0, 0, 1, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 240, 181, 45, 77, 145, 176, 104, 70, 255, 247, 178, ++ 255, 41, 120, 0, 41, 55, 209, 8, 152, 9, 156, 36, 26, 6, 208, 34, 70, ++ 1, 240, 236, 217, 8, 152, 33, 70, 5, 240, 2, 218, 34, 70, 36, 73, 36, ++ 72, 1, 240, 9, 218, 36, 75, 0, 36, 28, 112, 1, 35, 43, 112, 34, 77, ++ 5, 240, 47, 217, 43, 104, 0, 43, 51, 208, 26, 120, 0, 42, 48, 208, 159, ++ 137, 94, 137, 12, 224, 43, 104, 29, 74, 217, 137, 16, 104, 8, 240, 118, ++ 254, 1, 52, 1, 70, 48, 177, 24, 75, 24, 104, 2, 240, 29, 217, 163, 25, ++ 187, 66, 239, 219, 22, 75, 41, 104, 24, 104, 1, 34, 6, 240, 142, 253, ++ 22, 224, 20, 78, 49, 120, 153, 185, 10, 152, 11, 156, 36, 26, 6, 208, ++ 34, 70, 1, 240, 177, 217, 10, 152, 33, 70, 5, 240, 199, 217, 8, 72, ++ 13, 73, 34, 70, 1, 240, 206, 217, 0, 35, 43, 112, 1, 35, 51, 112, 5, ++ 240, 246, 216, 17, 176, 240, 189, 52, 7, 0, 0, 226, 216, 135, 0, 235, ++ 22, 4, 0, 124, 109, 4, 0, 116, 7, 0, 0, 16, 111, 4, 0, 252, 109, 4, ++ 0, 216, 109, 4, 0, 144, 204, 135, 0, 1, 75, 24, 104, 112, 71, 0, 191, ++ 64, 93, 4, 0, 0, 32, 112, 71, 127, 181, 13, 74, 13, 75, 21, 104, 13, ++ 74, 27, 104, 20, 104, 13, 74, 18, 104, 122, 177, 22, 120, 110, 177, ++ 235, 24, 227, 26, 3, 245, 126, 116, 7, 52, 164, 10, 0, 148, 20, 137, ++ 1, 148, 82, 137, 2, 146, 6, 74, 1, 240, 210, 217, 127, 189, 0, 191, ++ 120, 7, 0, 0, 76, 7, 0, 0, 44, 7, 0, 0, 116, 7, 0, 0, 22, 22, 136, 0, ++ 8, 181, 131, 106, 51, 177, 0, 35, 131, 98, 128, 248, 32, 48, 16, 48, ++ 5, 240, 156, 217, 1, 32, 8, 189, 112, 181, 35, 78, 48, 104, 0, 40, 64, ++ 208, 11, 240, 131, 222, 1, 32, 5, 240, 158, 219, 1, 32, 255, 247, 51, ++ 254, 1, 36, 22, 224, 29, 75, 28, 104, 9, 224, 227, 104, 29, 66, 5, 208, ++ 37, 234, 3, 5, 99, 104, 11, 177, 160, 104, 152, 71, 36, 104, 13, 177, ++ 0, 44, 242, 209, 5, 240, 243, 216, 21, 75, 4, 70, 24, 104, 5, 240, 106, ++ 219, 48, 104, 12, 240, 207, 216, 18, 75, 29, 104, 5, 64, 225, 209, 0, ++ 44, 223, 209, 16, 77, 43, 104, 35, 177, 27, 104, 19, 177, 88, 104, 5, ++ 240, 179, 220, 43, 104, 35, 177, 27, 104, 19, 177, 91, 104, 0, 43, 231, ++ 208, 0, 32, 255, 247, 255, 253, 0, 32, 189, 232, 112, 64, 5, 240, 98, ++ 155, 112, 189, 0, 191, 56, 7, 0, 0, 112, 7, 0, 0, 64, 7, 0, 0, 72, 7, ++ 0, 0, 100, 7, 0, 0, 2, 75, 26, 104, 1, 50, 26, 96, 112, 71, 0, 191, ++ 212, 109, 4, 0, 1, 75, 24, 104, 112, 71, 0, 191, 212, 109, 4, 0, 45, ++ 233, 240, 79, 157, 176, 10, 168, 255, 247, 170, 254, 255, 247, 94, 255, ++ 4, 70, 255, 247, 97, 255, 10, 155, 11, 154, 15, 153, 210, 26, 14, 155, ++ 13, 157, 195, 235, 1, 9, 17, 153, 16, 155, 110, 78, 203, 26, 12, 153, ++ 223, 248, 0, 130, 193, 235, 5, 11, 147, 68, 50, 104, 216, 248, 0, 16, ++ 2, 245, 0, 82, 82, 26, 74, 68, 210, 24, 90, 68, 20, 25, 36, 24, 9, 148, ++ 223, 248, 228, 161, 100, 76, 100, 79, 34, 104, 218, 248, 0, 80, 99, ++ 72, 173, 24, 58, 104, 8, 147, 197, 235, 2, 12, 205, 248, 28, 192, 1, ++ 240, 224, 216, 8, 155, 9, 245, 126, 113, 1, 147, 3, 245, 126, 115, 7, ++ 51, 155, 10, 7, 49, 11, 245, 126, 114, 137, 10, 7, 50, 2, 147, 8, 35, ++ 146, 10, 0, 145, 3, 147, 89, 70, 75, 70, 85, 72, 1, 240, 201, 216, 51, ++ 104, 32, 104, 57, 104, 221, 248, 28, 192, 1, 144, 3, 147, 0, 245, 126, ++ 112, 3, 245, 126, 115, 12, 245, 126, 118, 1, 245, 126, 114, 7, 48, 7, ++ 51, 128, 10, 155, 10, 7, 50, 7, 54, 182, 10, 146, 10, 2, 144, 4, 147, ++ 72, 72, 99, 70, 0, 150, 1, 240, 171, 216, 9, 153, 5, 245, 126, 114, ++ 1, 245, 126, 115, 7, 51, 155, 10, 7, 50, 146, 10, 0, 147, 41, 70, 9, ++ 155, 65, 72, 1, 240, 156, 216, 64, 75, 65, 79, 25, 104, 65, 72, 1, 240, ++ 150, 216, 57, 104, 64, 75, 10, 104, 70, 70, 154, 66, 3, 208, 62, 72, ++ 1, 240, 141, 216, 37, 224, 26, 145, 11, 70, 4, 224, 21, 104, 57, 72, ++ 19, 29, 133, 66, 3, 209, 26, 70, 27, 171, 154, 66, 246, 211, 51, 104, ++ 26, 173, 0, 147, 54, 72, 43, 70, 26, 146, 1, 240, 120, 216, 59, 104, ++ 26, 154, 233, 26, 51, 72, 211, 26, 10, 70, 0, 147, 1, 240, 111, 216, ++ 51, 104, 26, 154, 89, 27, 47, 72, 155, 26, 10, 70, 0, 147, 1, 240, 102, ++ 216, 45, 75, 27, 104, 75, 179, 26, 120, 58, 179, 89, 137, 221, 137, ++ 26, 137, 1, 251, 5, 246, 56, 53, 77, 67, 6, 245, 126, 115, 7, 51, 155, ++ 18, 141, 232, 40, 0, 5, 245, 126, 115, 7, 51, 155, 18, 2, 147, 35, 72, ++ 51, 70, 1, 240, 75, 216, 35, 104, 218, 248, 0, 32, 153, 27, 155, 24, ++ 91, 27, 3, 245, 126, 112, 1, 245, 126, 114, 7, 48, 128, 10, 7, 50, 0, ++ 144, 146, 10, 26, 72, 1, 240, 57, 216, 26, 75, 29, 104, 5, 240, 99, ++ 217, 4, 70, 255, 247, 18, 255, 41, 70, 3, 70, 34, 70, 22, 72, 1, 240, ++ 44, 216, 29, 176, 189, 232, 240, 143, 0, 191, 108, 109, 4, 0, 76, 7, ++ 0, 0, 44, 7, 0, 0, 30, 23, 4, 0, 45, 23, 4, 0, 108, 23, 4, 0, 177, 23, ++ 4, 0, 40, 7, 0, 0, 208, 109, 4, 0, 236, 23, 4, 0, 75, 65, 84, 83, 7, ++ 24, 4, 0, 43, 24, 4, 0, 98, 24, 4, 0, 135, 24, 4, 0, 116, 7, 0, 0, 173, ++ 24, 4, 0, 218, 24, 4, 0, 60, 7, 0, 0, 2, 25, 4, 0, 120, 109, 4, 0, 120, ++ 7, 0, 0, 16, 181, 4, 70, 8, 240, 112, 253, 0, 32, 5, 240, 101, 219, ++ 5, 240, 89, 219, 32, 70, 5, 240, 88, 219, 32, 70, 5, 240, 47, 217, 251, ++ 231, 8, 181, 113, 70, 3, 72, 0, 240, 231, 223, 1, 32, 189, 232, 8, 64, ++ 0, 240, 0, 186, 48, 25, 4, 0, 247, 181, 7, 70, 14, 70, 20, 70, 5, 240, ++ 8, 217, 88, 179, 0, 37, 32, 70, 13, 241, 6, 1, 106, 70, 173, 248, 6, ++ 80, 0, 149, 5, 240, 65, 221, 0, 152, 41, 70, 255, 247, 161, 252, 4, ++ 70, 216, 177, 41, 70, 0, 154, 0, 240, 159, 223, 99, 104, 242, 28, 103, ++ 243, 20, 3, 34, 240, 3, 2, 99, 96, 1, 58, 27, 12, 98, 243, 79, 19, 227, ++ 128, 167, 96, 166, 129, 32, 70, 5, 240, 204, 216, 1, 35, 32, 128, 163, ++ 112, 189, 248, 6, 48, 227, 129, 4, 224, 3, 75, 0, 36, 26, 104, 1, 50, ++ 26, 96, 32, 70, 254, 189, 8, 110, 4, 0, 45, 233, 243, 65, 7, 70, 12, ++ 70, 5, 240, 204, 216, 16, 185, 255, 247, 115, 254, 58, 224, 0, 38, 32, ++ 70, 13, 241, 6, 1, 106, 70, 173, 248, 6, 96, 0, 150, 7, 241, 3, 8, 5, ++ 240, 0, 221, 0, 157, 40, 240, 3, 8, 69, 68, 64, 246, 56, 3, 157, 66, ++ 38, 216, 45, 179, 40, 70, 49, 70, 255, 247, 87, 252, 4, 70, 248, 177, ++ 49, 70, 0, 154, 0, 240, 85, 223, 0, 155, 167, 129, 237, 26, 226, 24, ++ 200, 235, 5, 8, 2, 235, 8, 3, 163, 96, 99, 104, 1, 61, 98, 243, 20, ++ 3, 99, 96, 27, 12, 101, 243, 79, 19, 227, 128, 32, 70, 5, 240, 126, ++ 216, 1, 35, 32, 128, 163, 112, 189, 248, 6, 48, 227, 129, 4, 224, 4, ++ 75, 0, 36, 26, 104, 1, 50, 26, 96, 32, 70, 189, 232, 252, 129, 0, 191, ++ 8, 110, 4, 0, 56, 181, 0, 33, 5, 70, 128, 137, 255, 247, 170, 255, 4, ++ 70, 32, 177, 128, 104, 169, 104, 170, 137, 255, 247, 161, 251, 32, 70, ++ 56, 189, 45, 233, 240, 65, 6, 70, 136, 70, 23, 70, 5, 240, 108, 216, ++ 4, 70, 16, 185, 255, 247, 18, 254, 46, 224, 184, 241, 0, 15, 42, 219, ++ 0, 47, 40, 219, 60, 32, 0, 33, 255, 247, 6, 252, 4, 70, 24, 179, 243, ++ 137, 191, 178, 91, 6, 76, 191, 181, 107, 53, 70, 171, 120, 0, 33, 1, ++ 51, 171, 112, 60, 34, 0, 240, 251, 222, 178, 104, 99, 104, 66, 68, 98, ++ 243, 20, 3, 99, 96, 27, 12, 103, 243, 79, 19, 227, 128, 227, 137, 162, ++ 96, 67, 240, 64, 3, 167, 129, 227, 129, 32, 70, 5, 240, 38, 216, 165, ++ 99, 32, 128, 0, 224, 0, 36, 32, 70, 189, 232, 240, 129, 0, 0, 16, 181, ++ 1, 35, 66, 104, 131, 112, 195, 136, 194, 243, 20, 2, 2, 235, 83, 18, ++ 131, 104, 1, 50, 91, 13, 91, 5, 210, 24, 8, 75, 204, 28, 35, 64, 211, ++ 26, 131, 96, 195, 137, 129, 129, 3, 244, 12, 83, 195, 129, 0, 33, 16, ++ 48, 40, 34, 189, 232, 16, 64, 0, 240, 193, 158, 0, 191, 252, 255, 1, ++ 0, 56, 181, 4, 70, 227, 137, 89, 6, 33, 212, 162, 120, 1, 58, 210, 178, ++ 162, 112, 0, 42, 39, 209, 226, 120, 98, 177, 19, 75, 32, 70, 83, 248, ++ 34, 80, 233, 137, 255, 247, 202, 255, 40, 70, 33, 70, 189, 232, 56, ++ 64, 6, 240, 102, 186, 218, 5, 22, 212, 12, 75, 32, 70, 163, 96, 33, ++ 136, 4, 240, 246, 223, 32, 70, 189, 232, 56, 64, 255, 247, 27, 188, ++ 7, 75, 32, 70, 163, 96, 33, 136, 165, 107, 4, 240, 234, 223, 32, 70, ++ 255, 247, 17, 252, 44, 70, 206, 231, 56, 189, 192, 110, 4, 0, 239, 190, ++ 173, 222, 16, 181, 7, 224, 5, 75, 130, 138, 27, 104, 83, 248, 34, 64, ++ 255, 247, 191, 255, 32, 70, 0, 40, 245, 209, 16, 189, 0, 191, 32, 7, ++ 0, 0, 248, 181, 31, 78, 1, 34, 13, 70, 48, 104, 0, 33, 8, 240, 96, 255, ++ 0, 33, 8, 34, 7, 70, 48, 104, 8, 240, 90, 255, 2, 45, 1, 70, 16, 209, ++ 7, 234, 0, 4, 20, 244, 128, 100, 6, 208, 48, 104, 33, 244, 128, 97, ++ 0, 34, 8, 240, 76, 255, 44, 70, 250, 4, 30, 213, 68, 240, 4, 4, 27, ++ 224, 5, 45, 16, 209, 7, 244, 0, 100, 212, 241, 1, 4, 56, 191, 0, 36, ++ 187, 5, 17, 213, 48, 104, 65, 244, 128, 97, 0, 34, 8, 240, 54, 255, ++ 68, 240, 32, 4, 8, 224, 53, 185, 48, 104, 41, 70, 5, 34, 189, 232, 248, ++ 64, 8, 240, 43, 191, 0, 36, 32, 70, 248, 189, 56, 7, 0, 0, 41, 185, ++ 3, 75, 17, 70, 24, 104, 7, 34, 8, 240, 31, 191, 112, 71, 56, 7, 0, 0, ++ 248, 181, 6, 70, 0, 32, 13, 70, 4, 70, 0, 33, 41, 96, 51, 70, 0, 224, ++ 1, 51, 26, 120, 32, 42, 251, 208, 10, 179, 42, 104, 12, 177, 64, 248, ++ 34, 48, 1, 50, 42, 96, 12, 224, 34, 42, 9, 209, 129, 240, 1, 1, 52, ++ 177, 95, 30, 90, 120, 3, 248, 1, 43, 0, 42, 250, 209, 59, 70, 1, 51, ++ 26, 120, 26, 177, 0, 41, 238, 209, 32, 42, 236, 209, 0, 44, 223, 208, ++ 0, 42, 221, 208, 0, 34, 3, 248, 1, 43, 217, 231, 68, 185, 40, 104, 33, ++ 70, 1, 48, 128, 0, 255, 247, 239, 250, 8, 185, 40, 96, 248, 189, 1, ++ 52, 2, 44, 199, 209, 43, 104, 0, 34, 64, 248, 35, 32, 248, 189, 55, ++ 181, 19, 75, 27, 104, 211, 248, 160, 80, 3, 120, 251, 177, 1, 169, 255, ++ 247, 180, 255, 1, 155, 4, 70, 59, 185, 136, 185, 23, 224, 40, 104, 33, ++ 104, 0, 240, 97, 222, 24, 177, 237, 104, 0, 45, 247, 209, 10, 224, 107, ++ 104, 168, 104, 1, 153, 34, 70, 152, 71, 5, 240, 145, 218, 32, 70, 255, ++ 247, 74, 251, 3, 224, 3, 72, 0, 240, 232, 221, 245, 231, 62, 189, 124, ++ 7, 0, 0, 101, 208, 136, 0, 16, 181, 4, 70, 5, 240, 202, 218, 12, 177, ++ 0, 35, 27, 96, 6, 75, 0, 33, 24, 104, 4, 240, 18, 216, 4, 75, 27, 104, ++ 3, 177, 152, 71, 5, 240, 188, 218, 254, 231, 0, 191, 56, 7, 0, 0, 128, ++ 7, 0, 0, 45, 233, 255, 71, 73, 75, 4, 70, 216, 98, 3, 104, 3, 43, 3, ++ 209, 71, 75, 24, 104, 11, 240, 206, 218, 35, 104, 163, 241, 16, 2, 15, ++ 42, 4, 216, 4, 176, 189, 232, 240, 71, 255, 247, 58, 188, 3, 43, 15, ++ 209, 64, 74, 227, 108, 34, 240, 1, 2, 147, 66, 9, 209, 98, 108, 6, 51, ++ 147, 97, 99, 108, 79, 240, 255, 50, 26, 96, 4, 176, 189, 232, 240, 135, ++ 57, 75, 58, 78, 101, 108, 27, 104, 241, 105, 50, 104, 56, 72, 197, 235, ++ 3, 10, 0, 240, 151, 221, 163, 108, 33, 104, 0, 147, 99, 108, 34, 70, ++ 1, 147, 163, 104, 51, 72, 2, 147, 227, 104, 0, 39, 3, 147, 227, 108, ++ 0, 240, 136, 221, 227, 105, 4, 241, 16, 1, 0, 147, 35, 106, 46, 72, ++ 1, 147, 99, 106, 79, 234, 154, 10, 2, 147, 163, 106, 185, 70, 3, 147, ++ 14, 201, 0, 240, 119, 221, 163, 107, 4, 241, 44, 1, 0, 147, 227, 107, ++ 38, 72, 1, 147, 35, 108, 184, 70, 2, 147, 14, 201, 0, 240, 106, 221, ++ 235, 104, 35, 72, 0, 147, 149, 232, 14, 0, 0, 240, 99, 221, 235, 105, ++ 5, 241, 16, 1, 0, 147, 31, 72, 14, 201, 0, 240, 91, 221, 24, 224, 122, ++ 89, 211, 7, 15, 213, 255, 42, 13, 217, 27, 75, 154, 66, 4, 217, 2, 241, ++ 98, 67, 179, 245, 128, 31, 5, 216, 24, 72, 57, 70, 0, 240, 73, 221, ++ 9, 241, 1, 9, 4, 55, 185, 241, 15, 15, 8, 241, 1, 8, 1, 216, 208, 69, ++ 228, 209, 51, 104, 0, 32, 67, 244, 128, 99, 134, 232, 24, 0, 4, 176, ++ 189, 232, 240, 71, 255, 247, 82, 191, 128, 109, 4, 0, 56, 7, 0, 0, 37, ++ 135, 128, 0, 64, 93, 4, 0, 220, 109, 4, 0, 92, 25, 4, 0, 114, 25, 4, ++ 0, 167, 25, 4, 0, 218, 25, 4, 0, 9, 26, 4, 0, 39, 26, 4, 0, 226, 20, ++ 4, 0, 69, 26, 4, 0, 3, 104, 16, 181, 2, 43, 4, 70, 3, 208, 8, 75, 24, ++ 104, 8, 240, 205, 250, 32, 70, 255, 247, 68, 255, 35, 104, 2, 43, 5, ++ 208, 3, 75, 24, 104, 189, 232, 16, 64, 8, 240, 125, 186, 16, 189, 56, ++ 7, 0, 0, 1, 75, 24, 104, 112, 71, 0, 191, 40, 110, 4, 0, 195, 104, 152, ++ 108, 192, 243, 64, 0, 112, 71, 0, 0, 112, 181, 144, 248, 124, 49, 4, ++ 70, 255, 43, 19, 77, 4, 209, 213, 248, 164, 48, 64, 106, 152, 71, 232, ++ 185, 107, 111, 96, 106, 152, 71, 213, 248, 164, 80, 96, 106, 168, 71, ++ 212, 248, 0, 50, 152, 66, 11, 210, 148, 248, 32, 18, 65, 185, 11, 70, ++ 32, 70, 8, 74, 4, 240, 87, 222, 1, 35, 132, 248, 32, 50, 112, 189, 96, ++ 106, 148, 248, 9, 97, 168, 71, 48, 24, 132, 248, 10, 1, 112, 189, 0, ++ 191, 208, 134, 135, 0, 177, 57, 0, 0, 137, 177, 145, 248, 20, 50, 1, ++ 43, 13, 208, 145, 248, 121, 49, 83, 177, 74, 105, 5, 75, 16, 106, 3, ++ 64, 43, 177, 79, 240, 128, 115, 8, 70, 19, 98, 9, 240, 103, 154, 112, ++ 71, 0, 252, 1, 1, 45, 233, 240, 79, 0, 241, 40, 7, 1, 33, 187, 176, ++ 4, 70, 56, 70, 1, 240, 238, 220, 1, 40, 64, 243, 66, 129, 212, 248, ++ 152, 49, 152, 66, 0, 242, 61, 129, 32, 70, 9, 240, 79, 218, 1, 33, 56, ++ 70, 1, 240, 223, 220, 1, 40, 129, 70, 64, 243, 50, 129, 212, 248, 168, ++ 33, 1, 33, 0, 38, 4, 168, 82, 24, 55, 150, 79, 240, 1, 8, 1, 240, 118, ++ 220, 40, 224, 0, 33, 4, 168, 42, 70, 1, 240, 48, 221, 184, 241, 1, 15, ++ 10, 209, 171, 104, 106, 104, 35, 240, 127, 67, 194, 243, 20, 2, 35, ++ 244, 96, 3, 155, 26, 11, 43, 18, 221, 171, 104, 91, 121, 25, 6, 16, ++ 212, 26, 7, 14, 208, 135, 75, 8, 241, 1, 8, 27, 104, 1, 224, 8, 241, ++ 1, 8, 170, 138, 83, 248, 34, 80, 0, 45, 248, 209, 2, 224, 70, 70, 0, ++ 224, 1, 38, 56, 70, 0, 33, 1, 240, 178, 220, 5, 70, 0, 40, 207, 209, ++ 3, 224, 56, 70, 0, 33, 1, 240, 0, 221, 4, 168, 0, 33, 1, 240, 166, 220, ++ 2, 70, 0, 40, 244, 209, 0, 46, 64, 240, 231, 128, 212, 248, 240, 48, ++ 27, 104, 152, 69, 0, 242, 225, 128, 212, 248, 228, 49, 212, 248, 232, ++ 17, 3, 235, 73, 9, 31, 250, 137, 249, 160, 104, 73, 68, 173, 248, 226, ++ 144, 8, 240, 60, 248, 130, 70, 0, 40, 0, 240, 207, 128, 58, 173, 53, ++ 248, 6, 45, 208, 248, 8, 128, 130, 129, 49, 70, 64, 70, 0, 240, 0, 220, ++ 41, 70, 2, 34, 64, 70, 255, 247, 123, 248, 189, 248, 226, 48, 8, 241, ++ 2, 0, 219, 67, 41, 70, 2, 34, 173, 248, 226, 48, 255, 247, 112, 248, ++ 8, 241, 12, 3, 1, 147, 173, 248, 230, 96, 179, 70, 106, 224, 88, 74, ++ 171, 137, 17, 104, 169, 70, 2, 224, 144, 137, 145, 70, 27, 24, 185, ++ 248, 20, 32, 81, 248, 34, 32, 0, 42, 246, 209, 173, 248, 226, 48, 171, ++ 104, 26, 121, 25, 29, 2, 145, 3, 146, 187, 241, 0, 15, 3, 208, 45, 136, ++ 171, 248, 20, 80, 24, 224, 3, 153, 74, 74, 8, 241, 4, 0, 10, 67, 58, ++ 169, 65, 248, 16, 45, 8, 34, 0, 147, 255, 247, 65, 248, 148, 248, 10, ++ 33, 46, 70, 132, 248, 11, 33, 136, 248, 9, 32, 189, 248, 226, 32, 0, ++ 155, 12, 50, 173, 248, 226, 32, 2, 153, 8, 34, 54, 168, 0, 147, 255, ++ 247, 46, 248, 3, 154, 2, 152, 81, 28, 54, 154, 201, 178, 34, 240, 255, ++ 2, 10, 67, 54, 146, 54, 169, 8, 34, 255, 247, 33, 248, 148, 248, 10, ++ 33, 0, 155, 132, 248, 11, 33, 90, 114, 212, 248, 160, 33, 189, 248, ++ 226, 16, 83, 30, 91, 24, 179, 251, 242, 243, 83, 67, 189, 248, 230, ++ 32, 155, 178, 89, 26, 173, 248, 228, 48, 155, 24, 173, 248, 230, 48, ++ 1, 155, 169, 248, 16, 16, 157, 28, 24, 70, 57, 169, 2, 34, 255, 247, ++ 0, 248, 203, 70, 1, 149, 56, 70, 0, 33, 1, 240, 248, 219, 5, 70, 0, ++ 40, 141, 209, 41, 70, 82, 70, 56, 70, 1, 240, 70, 220, 214, 248, 8, ++ 128, 179, 137, 168, 241, 12, 0, 12, 51, 152, 248, 4, 144, 13, 241, 230, ++ 1, 179, 129, 2, 34, 176, 96, 254, 247, 227, 255, 189, 248, 230, 48, ++ 13, 241, 230, 1, 219, 67, 2, 34, 168, 241, 10, 0, 173, 248, 230, 48, ++ 254, 247, 215, 255, 73, 240, 64, 99, 67, 244, 64, 115, 58, 169, 65, ++ 248, 16, 61, 8, 34, 168, 241, 8, 0, 254, 247, 203, 255, 148, 248, 10, ++ 49, 56, 70, 132, 248, 11, 49, 41, 70, 8, 248, 3, 60, 50, 70, 1, 240, ++ 20, 220, 148, 248, 8, 49, 1, 51, 132, 248, 8, 49, 59, 176, 189, 232, ++ 240, 143, 32, 7, 0, 0, 0, 131, 0, 12, 208, 248, 132, 17, 16, 181, 4, ++ 70, 129, 177, 212, 248, 136, 33, 2, 35, 192, 104, 11, 240, 143, 218, ++ 212, 248, 132, 17, 212, 248, 136, 33, 224, 104, 74, 64, 2, 35, 189, ++ 232, 16, 64, 11, 240, 132, 154, 16, 189, 0, 0, 45, 233, 248, 67, 0, ++ 241, 40, 7, 2, 33, 4, 70, 56, 70, 1, 240, 129, 219, 0, 40, 32, 70, 212, ++ 191, 79, 240, 0, 8, 79, 240, 1, 8, 79, 240, 0, 9, 255, 247, 56, 254, ++ 64, 224, 160, 104, 41, 70, 5, 240, 35, 255, 212, 248, 240, 48, 27, 104, ++ 152, 66, 5, 217, 56, 70, 65, 70, 42, 70, 1, 240, 235, 219, 61, 224, ++ 174, 104, 0, 35, 179, 113, 148, 248, 124, 49, 41, 70, 51, 114, 148, ++ 248, 10, 49, 132, 248, 11, 49, 115, 114, 212, 248, 8, 50, 96, 106, 1, ++ 51, 196, 248, 8, 50, 114, 121, 42, 75, 130, 240, 128, 2, 210, 9, 155, ++ 106, 152, 71, 184, 185, 212, 248, 248, 48, 131, 177, 184, 241, 0, 15, ++ 8, 209, 50, 120, 112, 120, 66, 234, 0, 32, 15, 48, 0, 9, 2, 10, 24, ++ 191, 0, 32, 155, 104, 152, 113, 148, 248, 124, 33, 26, 114, 196, 248, ++ 248, 80, 79, 240, 1, 9, 212, 248, 240, 48, 27, 104, 1, 43, 6, 217, 56, ++ 70, 65, 70, 1, 240, 59, 219, 5, 70, 0, 40, 178, 209, 0, 35, 132, 248, ++ 252, 48, 196, 248, 248, 48, 185, 241, 0, 15, 5, 208, 99, 105, 4, 34, ++ 90, 100, 32, 70, 9, 240, 112, 218, 1, 33, 56, 70, 1, 240, 22, 219, 212, ++ 248, 204, 49, 152, 66, 4, 217, 32, 105, 189, 232, 248, 67, 3, 240, 83, ++ 152, 1, 33, 56, 70, 1, 240, 9, 219, 212, 248, 208, 49, 152, 66, 4, 210, ++ 32, 105, 189, 232, 248, 67, 3, 240, 60, 152, 189, 232, 248, 131, 208, ++ 134, 135, 0, 248, 181, 4, 70, 212, 248, 168, 49, 192, 141, 14, 70, 152, ++ 66, 12, 211, 2, 42, 10, 209, 160, 104, 1, 34, 7, 240, 208, 254, 212, ++ 248, 172, 49, 0, 37, 1, 51, 196, 248, 172, 49, 184, 224, 4, 241, 40, ++ 0, 10, 185, 1, 33, 0, 224, 0, 33, 50, 70, 4, 241, 40, 5, 1, 240, 66, ++ 219, 2, 33, 40, 70, 1, 240, 216, 218, 0, 40, 2, 221, 32, 70, 255, 247, ++ 73, 255, 40, 70, 1, 33, 1, 240, 207, 218, 7, 70, 0, 40, 0, 240, 156, ++ 128, 212, 248, 164, 81, 7, 45, 30, 208, 8, 45, 50, 208, 1, 45, 3, 208, ++ 32, 70, 255, 247, 54, 255, 143, 224, 212, 248, 152, 49, 152, 66, 6, ++ 211, 32, 70, 255, 247, 192, 253, 32, 70, 255, 247, 43, 255, 133, 224, ++ 148, 248, 126, 33, 0, 42, 64, 240, 129, 128, 212, 248, 148, 1, 212, ++ 248, 156, 17, 4, 240, 67, 218, 117, 224, 148, 248, 126, 49, 35, 185, ++ 60, 75, 96, 106, 27, 109, 152, 71, 224, 177, 212, 248, 152, 49, 159, ++ 66, 24, 210, 212, 248, 176, 49, 0, 43, 91, 208, 178, 137, 212, 248, ++ 180, 49, 154, 66, 86, 216, 14, 224, 148, 248, 126, 49, 35, 185, 49, ++ 75, 96, 106, 27, 109, 152, 71, 48, 177, 212, 248, 152, 49, 159, 66, ++ 2, 210, 179, 137, 64, 43, 16, 216, 32, 70, 255, 247, 136, 253, 32, 70, ++ 255, 247, 243, 254, 148, 248, 126, 49, 27, 179, 212, 248, 148, 1, 255, ++ 247, 168, 248, 0, 35, 132, 248, 126, 49, 27, 224, 212, 248, 176, 33, ++ 146, 179, 212, 248, 180, 33, 147, 66, 46, 216, 31, 75, 96, 106, 27, ++ 109, 152, 71, 5, 70, 144, 185, 32, 70, 255, 247, 106, 253, 32, 70, 255, ++ 247, 213, 254, 148, 248, 126, 49, 43, 177, 212, 248, 148, 1, 255, 247, ++ 138, 248, 132, 248, 126, 81, 0, 35, 132, 248, 40, 50, 34, 224, 148, ++ 248, 40, 50, 251, 185, 148, 248, 126, 49, 27, 177, 212, 248, 148, 1, ++ 255, 247, 122, 248, 0, 33, 1, 37, 212, 248, 148, 1, 10, 70, 4, 240, ++ 219, 217, 132, 248, 126, 81, 132, 248, 40, 82, 13, 224, 148, 248, 126, ++ 33, 74, 185, 212, 248, 148, 1, 212, 248, 156, 17, 4, 240, 205, 217, ++ 1, 37, 132, 248, 126, 81, 0, 224, 1, 37, 40, 70, 248, 189, 208, 134, ++ 135, 0, 45, 233, 240, 79, 144, 248, 120, 49, 133, 176, 0, 39, 5, 70, ++ 12, 70, 146, 70, 208, 248, 8, 128, 2, 151, 1, 151, 11, 177, 64, 70, ++ 42, 224, 139, 104, 208, 248, 216, 97, 144, 248, 42, 34, 30, 64, 82, ++ 177, 66, 104, 17, 58, 5, 42, 6, 216, 138, 137, 243, 42, 3, 216, 244, ++ 54, 34, 240, 3, 2, 182, 26, 98, 104, 35, 240, 127, 67, 194, 243, 20, ++ 2, 35, 244, 96, 3, 6, 241, 12, 9, 155, 26, 75, 69, 43, 210, 180, 248, ++ 12, 176, 213, 248, 228, 17, 64, 70, 89, 68, 137, 25, 7, 240, 179, 253, ++ 7, 70, 40, 185, 64, 70, 33, 70, 1, 34, 7, 240, 206, 253, 97, 224, 213, ++ 248, 228, 49, 128, 104, 186, 137, 243, 24, 192, 24, 184, 96, 211, 26, ++ 187, 129, 90, 70, 161, 104, 254, 247, 240, 253, 44, 75, 162, 138, 27, ++ 104, 83, 248, 34, 48, 3, 177, 27, 136, 33, 70, 187, 130, 64, 70, 0, ++ 34, 7, 240, 179, 253, 60, 70, 78, 177, 160, 104, 163, 137, 128, 27, ++ 243, 24, 160, 96, 163, 129, 0, 33, 50, 70, 0, 240, 87, 217, 213, 248, ++ 228, 49, 162, 137, 166, 104, 33, 70, 246, 26, 155, 24, 163, 129, 166, ++ 96, 64, 70, 5, 240, 93, 253, 4, 175, 39, 248, 2, 13, 57, 70, 2, 34, ++ 48, 70, 254, 247, 195, 253, 189, 248, 14, 48, 57, 70, 219, 67, 2, 34, ++ 176, 28, 173, 248, 14, 48, 254, 247, 185, 253, 149, 248, 8, 33, 79, ++ 234, 10, 35, 3, 244, 112, 99, 19, 67, 4, 169, 67, 234, 9, 99, 65, 248, ++ 12, 61, 8, 34, 48, 29, 254, 247, 169, 253, 40, 70, 33, 70, 82, 70, 255, ++ 247, 150, 254, 48, 177, 149, 248, 8, 49, 1, 39, 1, 51, 133, 248, 8, ++ 49, 0, 224, 7, 70, 56, 70, 5, 176, 189, 232, 240, 143, 0, 191, 32, 7, ++ 0, 0, 56, 181, 144, 248, 126, 49, 4, 70, 75, 177, 208, 248, 148, 1, ++ 254, 247, 171, 255, 0, 33, 212, 248, 148, 1, 10, 70, 4, 240, 13, 217, ++ 227, 141, 0, 43, 78, 209, 148, 248, 42, 50, 27, 177, 99, 104, 17, 59, ++ 5, 43, 8, 217, 212, 248, 28, 2, 40, 177, 3, 120, 27, 177, 5, 240, 148, ++ 252, 5, 70, 144, 185, 148, 248, 42, 50, 160, 104, 212, 248, 228, 17, ++ 43, 177, 99, 104, 17, 59, 5, 43, 1, 216, 244, 49, 2, 224, 212, 248, ++ 232, 49, 89, 24, 7, 240, 15, 253, 5, 70, 0, 179, 148, 248, 42, 34, 212, ++ 248, 228, 49, 34, 177, 98, 104, 17, 58, 5, 42, 152, 191, 244, 51, 171, ++ 129, 32, 70, 255, 247, 1, 252, 212, 248, 228, 49, 170, 104, 32, 70, ++ 210, 24, 170, 96, 170, 137, 41, 70, 211, 26, 171, 129, 1, 34, 255, 247, ++ 8, 255, 80, 185, 212, 248, 16, 50, 1, 51, 196, 248, 16, 50, 212, 248, ++ 248, 49, 1, 51, 196, 248, 248, 49, 56, 189, 212, 248, 12, 50, 1, 51, ++ 196, 248, 12, 50, 56, 189, 16, 181, 4, 104, 0, 35, 132, 248, 32, 50, ++ 32, 70, 255, 247, 218, 251, 212, 248, 244, 49, 107, 185, 148, 248, 11, ++ 49, 148, 248, 10, 33, 154, 66, 12, 208, 148, 248, 9, 33, 155, 26, 212, ++ 248, 0, 34, 219, 178, 147, 66, 4, 216, 32, 70, 189, 232, 16, 64, 255, ++ 247, 128, 191, 16, 189, 0, 0, 112, 181, 12, 70, 0, 41, 53, 208, 72, ++ 106, 0, 40, 50, 208, 145, 248, 121, 49, 0, 43, 46, 208, 145, 248, 20, ++ 50, 1, 43, 42, 208, 209, 248, 252, 49, 0, 43, 38, 208, 20, 78, 214, ++ 248, 164, 80, 168, 71, 212, 248, 240, 49, 152, 66, 30, 210, 115, 111, ++ 96, 106, 152, 71, 96, 106, 148, 248, 9, 97, 168, 71, 212, 248, 244, ++ 49, 54, 24, 246, 178, 132, 248, 10, 97, 91, 185, 148, 248, 11, 49, 158, ++ 66, 12, 208, 148, 248, 9, 33, 155, 26, 212, 248, 0, 34, 219, 178, 147, ++ 66, 4, 216, 32, 70, 189, 232, 112, 64, 255, 247, 68, 191, 112, 189, ++ 0, 191, 208, 134, 135, 0, 16, 181, 4, 104, 0, 35, 32, 70, 132, 248, ++ 126, 49, 255, 247, 194, 251, 32, 70, 189, 232, 16, 64, 255, 247, 43, ++ 189, 208, 248, 0, 49, 144, 248, 123, 33, 11, 67, 192, 248, 0, 49, 234, ++ 177, 90, 7, 5, 213, 144, 248, 124, 33, 67, 234, 2, 99, 192, 248, 0, ++ 49, 208, 248, 0, 49, 19, 240, 10, 15, 28, 191, 67, 244, 128, 35, 192, ++ 248, 0, 49, 208, 248, 0, 33, 67, 105, 218, 100, 0, 34, 192, 248, 0, ++ 33, 128, 248, 123, 33, 8, 34, 90, 100, 8, 240, 229, 159, 112, 71, 115, ++ 181, 142, 104, 13, 70, 170, 137, 115, 136, 8, 58, 155, 178, 6, 241, ++ 8, 1, 146, 178, 19, 240, 15, 15, 4, 70, 169, 96, 170, 129, 29, 208, ++ 217, 7, 4, 213, 208, 248, 88, 33, 1, 50, 192, 248, 88, 33, 154, 7, 4, ++ 213, 212, 248, 92, 33, 1, 50, 196, 248, 92, 33, 88, 7, 4, 213, 212, ++ 248, 96, 33, 1, 50, 196, 248, 96, 33, 25, 7, 64, 241, 135, 128, 212, ++ 248, 100, 49, 1, 51, 196, 248, 100, 49, 128, 224, 3, 42, 7, 216, 208, ++ 248, 72, 49, 1, 51, 192, 248, 72, 49, 208, 248, 24, 2, 120, 224, 2, ++ 34, 1, 168, 254, 247, 100, 252, 169, 104, 13, 241, 6, 0, 2, 49, 2, 34, ++ 254, 247, 93, 252, 32, 70, 255, 247, 4, 251, 200, 177, 148, 248, 5, ++ 50, 170, 104, 75, 177, 189, 248, 6, 16, 68, 75, 201, 67, 137, 178, 3, ++ 49, 11, 64, 219, 67, 173, 248, 6, 48, 189, 248, 6, 48, 189, 248, 4, ++ 0, 219, 67, 153, 178, 136, 66, 3, 209, 19, 128, 51, 128, 173, 248, 4, ++ 48, 50, 136, 189, 248, 4, 48, 146, 178, 154, 66, 2, 208, 212, 248, 36, ++ 34, 42, 177, 218, 67, 189, 248, 6, 16, 146, 178, 145, 66, 20, 208, 50, ++ 136, 146, 178, 154, 66, 4, 208, 212, 248, 76, 33, 1, 50, 196, 248, 76, ++ 33, 219, 67, 189, 248, 6, 32, 155, 178, 154, 66, 47, 208, 212, 248, ++ 80, 49, 1, 51, 196, 248, 80, 49, 41, 224, 170, 104, 212, 248, 36, 98, ++ 19, 29, 171, 96, 171, 137, 25, 31, 137, 178, 169, 129, 94, 177, 7, 41, ++ 5, 216, 212, 248, 72, 49, 1, 51, 196, 248, 72, 49, 23, 224, 12, 50, ++ 12, 59, 170, 96, 171, 129, 169, 137, 7, 41, 16, 217, 171, 104, 8, 57, ++ 26, 120, 216, 120, 137, 178, 8, 51, 171, 96, 169, 129, 22, 185, 160, ++ 241, 12, 3, 1, 224, 160, 241, 20, 3, 219, 178, 153, 66, 14, 210, 212, ++ 248, 24, 2, 32, 177, 3, 120, 19, 177, 1, 33, 5, 240, 120, 251, 160, ++ 104, 41, 70, 0, 34, 7, 240, 180, 251, 0, 32, 22, 224, 148, 248, 9, 49, ++ 147, 66, 6, 208, 212, 248, 84, 49, 132, 248, 9, 33, 1, 51, 196, 248, ++ 84, 49, 148, 248, 9, 49, 1, 32, 1, 51, 132, 248, 9, 49, 171, 104, 8, ++ 59, 171, 96, 171, 137, 8, 51, 171, 129, 124, 189, 252, 255, 1, 0, 247, ++ 181, 0, 37, 4, 70, 46, 70, 67, 224, 35, 75, 202, 138, 27, 104, 136, ++ 104, 83, 248, 34, 112, 0, 35, 203, 130, 66, 120, 212, 248, 36, 194, ++ 2, 240, 15, 2, 195, 120, 188, 241, 0, 15, 1, 209, 4, 59, 0, 224, 12, ++ 59, 219, 178, 192, 24, 136, 96, 136, 137, 2, 42, 195, 235, 0, 3, 139, ++ 129, 18, 209, 21, 177, 11, 136, 235, 130, 0, 224, 14, 70, 47, 177, 187, ++ 104, 91, 120, 3, 240, 15, 3, 2, 43, 24, 208, 49, 70, 32, 105, 0, 38, ++ 0, 240, 79, 253, 53, 70, 18, 224, 26, 185, 32, 105, 2, 240, 85, 220, ++ 13, 224, 1, 42, 5, 209, 1, 145, 4, 240, 23, 220, 160, 104, 1, 153, 0, ++ 224, 160, 104, 0, 34, 7, 240, 82, 251, 0, 224, 13, 70, 57, 70, 0, 41, ++ 185, 209, 254, 189, 32, 7, 0, 0, 0, 105, 112, 71, 112, 181, 144, 248, ++ 34, 98, 0, 35, 5, 106, 4, 70, 3, 98, 206, 185, 144, 248, 125, 49, 179, ++ 177, 208, 248, 132, 17, 153, 177, 208, 248, 136, 33, 2, 35, 192, 104, ++ 74, 64, 10, 240, 73, 222, 148, 248, 127, 49, 132, 248, 125, 97, 132, ++ 248, 128, 97, 43, 177, 212, 248, 144, 1, 254, 247, 120, 253, 132, 248, ++ 127, 97, 106, 0, 6, 213, 32, 70, 8, 240, 203, 219, 32, 70, 8, 240, 246, ++ 217, 33, 225, 0, 45, 47, 218, 99, 105, 94, 104, 22, 240, 4, 6, 24, 208, ++ 148, 248, 120, 17, 41, 185, 32, 70, 8, 240, 198, 220, 32, 70, 8, 240, ++ 245, 219, 0, 35, 132, 248, 120, 49, 32, 105, 2, 240, 17, 220, 99, 105, ++ 32, 70, 26, 104, 2, 33, 66, 240, 4, 2, 26, 96, 255, 247, 103, 254, 17, ++ 224, 1, 35, 132, 248, 120, 49, 32, 105, 2, 240, 79, 220, 32, 70, 49, ++ 70, 8, 240, 169, 220, 32, 70, 8, 240, 216, 219, 99, 105, 26, 104, 34, ++ 240, 4, 2, 26, 96, 148, 248, 120, 49, 0, 43, 64, 240, 235, 128, 235, ++ 7, 7, 213, 32, 70, 1, 33, 8, 240, 150, 220, 32, 70, 1, 33, 255, 247, ++ 69, 254, 46, 7, 8, 213, 148, 248, 9, 33, 148, 248, 11, 49, 154, 66, ++ 2, 208, 32, 70, 255, 247, 109, 253, 168, 7, 9, 213, 1, 35, 132, 248, ++ 123, 49, 212, 248, 0, 49, 27, 177, 32, 70, 0, 33, 255, 247, 46, 254, ++ 233, 5, 4, 213, 212, 248, 104, 49, 1, 51, 196, 248, 104, 49, 170, 5, ++ 18, 213, 212, 248, 108, 49, 212, 248, 244, 16, 1, 51, 196, 248, 108, ++ 49, 49, 177, 160, 104, 1, 34, 7, 240, 176, 250, 0, 35, 196, 248, 244, ++ 48, 32, 70, 0, 33, 8, 240, 95, 220, 171, 1, 4, 213, 212, 248, 112, 49, ++ 1, 51, 196, 248, 112, 49, 110, 1, 4, 213, 212, 248, 116, 49, 1, 51, ++ 196, 248, 116, 49, 148, 248, 40, 50, 171, 177, 212, 248, 164, 49, 8, ++ 43, 17, 209, 32, 70, 255, 247, 183, 249, 32, 70, 255, 247, 34, 251, ++ 148, 248, 126, 49, 0, 38, 132, 248, 40, 98, 43, 177, 212, 248, 148, ++ 1, 254, 247, 212, 252, 132, 248, 126, 97, 68, 78, 46, 64, 38, 177, 32, ++ 70, 41, 70, 8, 240, 205, 217, 6, 70, 104, 7, 34, 213, 212, 248, 132, ++ 17, 249, 177, 1, 35, 132, 248, 125, 49, 99, 105, 29, 106, 91, 106, 29, ++ 64, 21, 240, 240, 5, 3, 208, 32, 70, 8, 240, 220, 221, 17, 224, 212, ++ 248, 136, 33, 2, 35, 224, 104, 74, 64, 10, 240, 118, 221, 148, 248, ++ 127, 49, 132, 248, 128, 81, 43, 177, 212, 248, 144, 1, 254, 247, 167, ++ 252, 132, 248, 127, 81, 4, 241, 40, 5, 2, 33, 40, 70, 0, 240, 109, 222, ++ 0, 40, 2, 221, 32, 70, 255, 247, 222, 250, 40, 70, 1, 33, 0, 240, 100, ++ 222, 0, 40, 73, 208, 212, 248, 164, 81, 7, 45, 16, 208, 8, 45, 32, 208, ++ 1, 45, 60, 209, 148, 248, 126, 33, 0, 42, 61, 209, 212, 248, 148, 1, ++ 212, 248, 156, 17, 3, 240, 234, 221, 132, 248, 126, 81, 52, 224, 148, ++ 248, 126, 49, 83, 177, 212, 248, 152, 49, 152, 66, 6, 210, 35, 107, ++ 155, 104, 91, 120, 3, 240, 15, 3, 3, 43, 38, 209, 0, 35, 132, 248, 40, ++ 50, 26, 224, 148, 248, 126, 49, 107, 177, 148, 248, 40, 34, 82, 185, ++ 212, 248, 152, 33, 144, 66, 6, 210, 34, 107, 146, 104, 82, 120, 2, 240, ++ 15, 2, 3, 42, 17, 209, 0, 37, 132, 248, 40, 82, 43, 177, 212, 248, 148, ++ 1, 254, 247, 84, 252, 132, 248, 126, 81, 32, 70, 255, 247, 37, 249, ++ 32, 70, 255, 247, 144, 250, 0, 224, 0, 38, 48, 70, 112, 189, 0, 252, ++ 1, 1, 203, 137, 16, 181, 27, 5, 14, 212, 139, 104, 208, 248, 236, 33, ++ 220, 120, 2, 235, 132, 2, 155, 24, 154, 137, 70, 246, 136, 67, 154, ++ 66, 20, 191, 2, 34, 1, 34, 0, 224, 1, 34, 189, 232, 16, 64, 255, 247, ++ 210, 187, 83, 28, 10, 208, 2, 42, 79, 240, 1, 3, 0, 208, 10, 185, 130, ++ 240, 2, 2, 19, 250, 2, 242, 210, 178, 0, 224, 255, 34, 144, 248, 124, ++ 49, 1, 41, 12, 191, 26, 67, 35, 234, 2, 2, 128, 248, 124, 33, 255, 247, ++ 97, 188, 131, 105, 152, 105, 0, 240, 115, 187, 137, 105, 3, 70, 136, ++ 105, 25, 70, 0, 240, 119, 187, 0, 0, 45, 233, 240, 79, 133, 176, 3, ++ 146, 15, 154, 2, 145, 16, 153, 23, 70, 4, 70, 221, 248, 56, 160, 1, ++ 146, 155, 70, 0, 43, 24, 191, 0, 39, 161, 177, 141, 104, 74, 104, 37, ++ 240, 127, 67, 194, 243, 20, 2, 35, 244, 96, 3, 155, 26, 66, 108, 20, ++ 50, 147, 66, 1, 210, 128, 104, 62, 224, 139, 137, 16, 61, 16, 51, 141, ++ 96, 139, 129, 80, 224, 3, 108, 66, 107, 3, 241, 16, 1, 120, 24, 144, ++ 66, 38, 191, 162, 241, 16, 8, 195, 235, 8, 8, 184, 70, 160, 104, 65, ++ 68, 7, 240, 98, 249, 6, 70, 0, 40, 81, 208, 99, 108, 133, 104, 237, ++ 24, 8, 241, 16, 3, 133, 96, 131, 129, 186, 241, 0, 15, 11, 208, 184, ++ 241, 0, 15, 8, 208, 81, 70, 5, 241, 16, 0, 66, 70, 254, 247, 158, 249, ++ 194, 68, 200, 235, 7, 7, 0, 150, 169, 70, 176, 70, 28, 224, 102, 107, ++ 160, 104, 183, 66, 56, 191, 62, 70, 49, 70, 7, 240, 61, 249, 5, 70, ++ 56, 185, 160, 104, 65, 70, 1, 34, 5, 176, 189, 232, 240, 79, 7, 240, ++ 85, 185, 81, 70, 50, 70, 128, 104, 254, 247, 128, 249, 0, 155, 42, 136, ++ 178, 68, 191, 27, 154, 130, 0, 149, 186, 241, 0, 15, 1, 208, 0, 47, ++ 221, 209, 77, 70, 65, 70, 1, 154, 2, 155, 106, 96, 3, 154, 43, 96, 19, ++ 12, 27, 4, 187, 241, 0, 15, 1, 208, 67, 240, 1, 3, 171, 96, 4, 75, 197, ++ 248, 12, 176, 27, 104, 96, 104, 27, 105, 152, 71, 5, 176, 189, 232, ++ 240, 143, 188, 7, 0, 0, 45, 233, 240, 65, 4, 70, 76, 32, 14, 70, 21, ++ 70, 152, 70, 7, 240, 235, 248, 7, 70, 160, 177, 0, 33, 76, 34, 255, ++ 243, 203, 244, 79, 244, 240, 99, 123, 99, 79, 244, 122, 115, 251, 99, ++ 28, 35, 59, 100, 12, 35, 123, 100, 4, 35, 199, 248, 12, 128, 62, 96, ++ 125, 96, 188, 96, 187, 100, 56, 70, 189, 232, 240, 129, 0, 0, 45, 233, ++ 240, 79, 143, 104, 177, 248, 12, 176, 187, 104, 145, 176, 9, 147, 0, ++ 35, 187, 241, 15, 15, 215, 248, 0, 144, 128, 70, 12, 70, 13, 147, 14, ++ 147, 15, 147, 5, 108, 70, 108, 64, 242, 238, 129, 122, 104, 17, 12, ++ 13, 146, 10, 208, 146, 178, 139, 69, 13, 146, 5, 210, 13, 147, 30, 70, ++ 8, 147, 111, 240, 13, 7, 227, 225, 10, 70, 13, 155, 179, 245, 0, 95, ++ 3, 217, 0, 38, 13, 150, 8, 150, 216, 225, 171, 241, 16, 11, 90, 69, ++ 56, 191, 147, 70, 98, 104, 123, 13, 91, 5, 194, 243, 20, 2, 155, 24, ++ 226, 136, 49, 29, 194, 243, 74, 18, 1, 50, 210, 24, 210, 27, 251, 26, ++ 146, 178, 139, 66, 162, 129, 4, 217, 91, 26, 249, 26, 211, 24, 161, ++ 96, 163, 129, 163, 104, 180, 248, 12, 160, 16, 51, 163, 96, 150, 75, ++ 161, 138, 26, 104, 170, 241, 16, 10, 82, 248, 33, 16, 31, 250, 138, ++ 250, 164, 248, 12, 160, 49, 177, 216, 248, 8, 0, 0, 34, 7, 240, 167, ++ 248, 0, 33, 161, 130, 13, 155, 173, 27, 234, 24, 82, 69, 6, 149, 16, ++ 216, 165, 104, 97, 104, 37, 240, 127, 66, 193, 243, 20, 1, 34, 244, ++ 96, 2, 82, 26, 20, 54, 178, 66, 4, 211, 1, 34, 163, 129, 0, 38, 8, 146, ++ 24, 224, 216, 248, 64, 16, 216, 248, 8, 0, 89, 24, 20, 49, 7, 240, 100, ++ 248, 6, 70, 88, 177, 216, 248, 68, 80, 131, 104, 20, 53, 93, 25, 189, ++ 248, 52, 48, 0, 33, 133, 96, 131, 129, 8, 145, 2, 224, 1, 34, 8, 146, ++ 5, 70, 0, 35, 10, 147, 7, 147, 67, 70, 205, 248, 44, 144, 184, 70, 31, ++ 70, 100, 224, 13, 155, 155, 69, 44, 191, 217, 70, 153, 70, 185, 241, ++ 0, 15, 83, 208, 72, 70, 7, 240, 43, 248, 7, 144, 64, 179, 202, 235, ++ 9, 9, 38, 70, 19, 224, 123, 107, 184, 104, 153, 69, 56, 191, 75, 70, ++ 25, 70, 5, 147, 7, 240, 48, 248, 5, 155, 0, 177, 0, 136, 98, 73, 176, ++ 130, 10, 104, 82, 248, 32, 96, 62, 177, 195, 235, 9, 9, 185, 241, 0, ++ 15, 232, 220, 7, 157, 0, 38, 57, 224, 163, 138, 82, 248, 35, 16, 166, ++ 130, 184, 104, 1, 34, 7, 240, 57, 248, 7, 152, 7, 240, 3, 248, 86, 75, ++ 27, 120, 219, 177, 13, 155, 6, 153, 202, 24, 90, 69, 12, 217, 193, 245, ++ 128, 98, 82, 68, 147, 66, 7, 217, 163, 245, 128, 99, 13, 147, 1, 34, ++ 0, 35, 10, 146, 7, 147, 180, 231, 6, 153, 1, 34, 193, 235, 10, 3, 13, ++ 147, 0, 35, 165, 104, 10, 146, 7, 147, 15, 224, 184, 70, 221, 248, 44, ++ 144, 13, 147, 111, 240, 26, 7, 17, 225, 9, 155, 184, 70, 221, 248, 44, ++ 144, 13, 149, 6, 147, 79, 240, 255, 55, 212, 224, 0, 45, 152, 208, 59, ++ 70, 221, 248, 44, 144, 71, 70, 152, 70, 187, 241, 0, 15, 5, 208, 40, ++ 70, 7, 241, 16, 1, 90, 70, 254, 247, 39, 248, 56, 75, 153, 69, 32, 209, ++ 187, 241, 7, 15, 64, 242, 186, 128, 7, 153, 213, 248, 4, 144, 171, 241, ++ 8, 11, 8, 53, 137, 185, 22, 177, 51, 70, 50, 70, 1, 224, 35, 70, 34, ++ 70, 146, 104, 8, 50, 154, 96, 22, 177, 51, 70, 50, 70, 1, 224, 35, 70, ++ 34, 70, 146, 137, 8, 58, 154, 129, 9, 155, 67, 240, 2, 3, 0, 224, 9, ++ 155, 223, 248, 164, 160, 6, 147, 202, 68, 186, 245, 162, 127, 136, 191, ++ 202, 70, 186, 245, 131, 127, 74, 208, 6, 216, 186, 241, 2, 15, 87, 208, ++ 186, 241, 253, 15, 91, 209, 16, 224, 64, 242, 7, 19, 154, 69, 29, 208, ++ 64, 242, 11, 19, 154, 69, 82, 209, 216, 248, 0, 0, 0, 33, 23, 74, 216, ++ 248, 60, 48, 3, 240, 5, 221, 70, 224, 171, 120, 106, 120, 27, 4, 67, ++ 234, 2, 35, 42, 120, 233, 120, 19, 67, 216, 248, 0, 0, 67, 234, 1, 97, ++ 2, 240, 154, 216, 209, 70, 0, 39, 106, 224, 40, 70, 12, 73, 4, 34, 255, ++ 243, 4, 244, 3, 70, 0, 40, 48, 209, 10, 74, 1, 33, 18, 104, 0, 145, ++ 151, 105, 216, 248, 4, 0, 41, 70, 90, 70, 29, 224, 0, 191, 32, 7, 0, ++ 0, 220, 6, 0, 0, 62, 218, 254, 255, 149, 101, 128, 0, 253, 26, 136, ++ 0, 188, 7, 0, 0, 224, 235, 27, 0, 40, 70, 66, 73, 4, 34, 255, 243, 227, ++ 243, 136, 185, 64, 75, 13, 154, 27, 104, 0, 144, 216, 248, 4, 0, 159, ++ 105, 41, 70, 13, 171, 184, 71, 3, 224, 216, 248, 0, 0, 2, 240, 101, ++ 216, 7, 70, 209, 70, 49, 224, 9, 155, 3, 244, 112, 65, 6, 155, 9, 11, ++ 19, 240, 2, 2, 12, 208, 15, 171, 1, 147, 14, 171, 2, 147, 1, 35, 187, ++ 241, 0, 15, 8, 191, 0, 37, 205, 248, 0, 176, 3, 147, 7, 224, 16, 171, ++ 83, 248, 12, 13, 3, 146, 141, 232, 9, 0, 14, 171, 2, 147, 216, 248, ++ 0, 0, 74, 70, 43, 70, 2, 240, 25, 216, 16, 241, 14, 15, 7, 70, 10, 209, ++ 10, 153, 65, 177, 0, 35, 13, 147, 111, 240, 26, 7, 3, 224, 9, 155, 111, ++ 240, 23, 7, 6, 147, 7, 153, 65, 177, 0, 149, 216, 248, 8, 0, 33, 70, ++ 0, 34, 13, 155, 0, 240, 190, 217, 8, 224, 189, 248, 52, 32, 0, 46, 20, ++ 191, 51, 70, 35, 70, 154, 129, 0, 35, 7, 147, 15, 177, 14, 155, 13, ++ 147, 8, 153, 49, 185, 33, 70, 216, 248, 8, 0, 8, 154, 6, 240, 19, 255, ++ 52, 70, 13, 155, 6, 154, 1, 147, 64, 70, 73, 70, 59, 70, 0, 149, 2, ++ 148, 255, 247, 78, 253, 7, 154, 90, 177, 16, 70, 6, 240, 208, 254, 7, ++ 224, 30, 70, 8, 147, 111, 240, 23, 7, 9, 155, 0, 37, 6, 147, 210, 231, ++ 17, 176, 189, 232, 240, 143, 0, 191, 253, 26, 136, 0, 188, 7, 0, 0, ++ 45, 233, 240, 65, 138, 104, 12, 70, 7, 70, 129, 108, 134, 104, 96, 104, ++ 34, 240, 127, 67, 192, 243, 20, 0, 35, 244, 96, 3, 27, 26, 139, 66, ++ 48, 210, 180, 248, 12, 128, 48, 70, 65, 68, 6, 240, 185, 254, 5, 70, ++ 48, 185, 33, 70, 48, 70, 1, 34, 6, 240, 212, 254, 44, 70, 54, 224, 195, ++ 137, 226, 137, 35, 240, 7, 3, 27, 4, 2, 240, 7, 2, 27, 12, 19, 67, 195, ++ 129, 226, 137, 209, 6, 76, 191, 67, 240, 16, 3, 35, 240, 16, 3, 195, ++ 129, 163, 124, 161, 104, 131, 116, 187, 108, 128, 104, 66, 70, 192, ++ 24, 253, 247, 231, 254, 33, 70, 48, 70, 1, 34, 6, 240, 178, 254, 44, ++ 70, 4, 224, 163, 137, 82, 26, 201, 24, 162, 96, 161, 129, 163, 104, ++ 32, 34, 26, 112, 226, 137, 210, 6, 1, 213, 36, 34, 26, 112, 226, 137, ++ 2, 240, 7, 2, 90, 112, 0, 34, 154, 112, 162, 124, 218, 112, 32, 70, ++ 189, 232, 240, 129, 3, 70, 112, 181, 154, 108, 140, 137, 128, 104, 148, ++ 66, 45, 211, 138, 104, 21, 120, 45, 9, 110, 30, 1, 46, 39, 216, 200, ++ 137, 86, 120, 32, 240, 7, 0, 0, 4, 6, 240, 7, 6, 0, 12, 48, 67, 200, ++ 129, 22, 120, 22, 240, 8, 15, 28, 191, 64, 240, 8, 0, 200, 129, 16, ++ 120, 16, 240, 3, 0, 5, 208, 142, 105, 38, 244, 64, 54, 70, 234, 0, 64, ++ 136, 97, 1, 45, 1, 209, 0, 32, 0, 224, 208, 120, 136, 116, 155, 108, ++ 0, 32, 210, 24, 227, 26, 138, 96, 139, 129, 112, 189, 0, 34, 6, 240, ++ 96, 254, 1, 32, 112, 189, 0, 41, 195, 107, 9, 221, 130, 108, 0, 42, ++ 6, 221, 1, 57, 145, 66, 186, 191, 3, 108, 83, 248, 33, 48, 0, 35, 24, ++ 70, 112, 71, 0, 0, 8, 181, 3, 75, 0, 104, 27, 104, 91, 105, 152, 71, ++ 8, 189, 0, 191, 188, 7, 0, 0, 112, 181, 4, 70, 14, 70, 64, 104, 17, ++ 70, 6, 240, 101, 254, 1, 70, 224, 104, 255, 247, 71, 255, 5, 70, 224, ++ 177, 32, 70, 49, 70, 42, 70, 1, 240, 62, 223, 0, 40, 21, 219, 41, 70, ++ 96, 104, 4, 240, 238, 253, 9, 75, 6, 70, 27, 104, 32, 104, 219, 104, ++ 41, 70, 152, 71, 48, 177, 227, 105, 158, 25, 99, 105, 230, 97, 1, 51, ++ 99, 97, 2, 224, 227, 106, 1, 51, 227, 98, 0, 32, 112, 189, 188, 7, 0, ++ 0, 45, 233, 247, 79, 0, 36, 5, 70, 138, 70, 39, 70, 1, 148, 38, 70, ++ 90, 224, 50, 75, 186, 248, 22, 32, 27, 104, 83, 248, 34, 128, 218, 248, ++ 8, 48, 147, 248, 2, 144, 9, 240, 15, 9, 184, 241, 0, 15, 5, 208, 216, ++ 248, 8, 48, 155, 120, 3, 240, 15, 3, 1, 147, 232, 104, 81, 70, 255, ++ 247, 92, 255, 131, 70, 0, 187, 164, 185, 40, 70, 73, 70, 255, 247, 143, ++ 255, 6, 70, 48, 177, 104, 104, 81, 70, 6, 240, 35, 254, 4, 70, 7, 70, ++ 53, 224, 104, 104, 81, 70, 50, 70, 6, 240, 223, 253, 79, 240, 1, 11, ++ 10, 224, 104, 104, 81, 70, 6, 240, 20, 254, 8, 177, 3, 136, 0, 224, ++ 3, 70, 227, 130, 4, 70, 34, 224, 171, 106, 1, 51, 171, 98, 207, 177, ++ 184, 241, 0, 15, 5, 208, 187, 241, 0, 15, 2, 209, 1, 155, 153, 69, 16, ++ 208, 0, 35, 227, 130, 51, 105, 168, 107, 219, 104, 49, 70, 58, 70, 152, ++ 71, 40, 177, 171, 106, 0, 36, 1, 51, 171, 98, 39, 70, 1, 224, 4, 70, ++ 7, 70, 194, 70, 186, 241, 0, 15, 161, 209, 3, 224, 43, 105, 1, 51, 43, ++ 97, 219, 231, 189, 232, 254, 143, 32, 7, 0, 0, 115, 181, 11, 70, 4, ++ 70, 0, 41, 42, 208, 0, 42, 40, 208, 129, 107, 145, 185, 193, 107, 33, ++ 187, 194, 99, 131, 99, 90, 98, 83, 98, 0, 145, 64, 104, 33, 70, 34, ++ 104, 255, 247, 103, 252, 224, 96, 0, 40, 12, 191, 79, 240, 255, 48, ++ 0, 32, 21, 224, 153, 66, 17, 209, 195, 107, 147, 66, 14, 208, 134, 108, ++ 0, 32, 9, 224, 35, 108, 3, 235, 128, 5, 83, 248, 32, 48, 1, 48, 19, ++ 185, 42, 96, 81, 98, 3, 224, 176, 66, 243, 219, 79, 240, 255, 48, 124, ++ 189, 112, 71, 16, 181, 68, 240, 211, 248, 68, 240, 225, 248, 67, 240, ++ 189, 250, 68, 240, 141, 249, 4, 70, 67, 240, 118, 250, 32, 70, 73, 240, ++ 55, 254, 253, 247, 21, 255, 32, 70, 189, 232, 16, 64, 254, 247, 54, ++ 185, 45, 233, 243, 65, 7, 70, 5, 70, 0, 36, 62, 224, 213, 248, 116, ++ 131, 216, 248, 8, 105, 22, 240, 3, 3, 53, 208, 3, 34, 200, 248, 4, 41, ++ 216, 248, 8, 41, 144, 7, 251, 209, 2, 43, 3, 208, 3, 43, 19, 208, 25, ++ 72, 18, 224, 216, 248, 0, 56, 24, 72, 67, 240, 1, 3, 200, 248, 0, 56, ++ 216, 248, 0, 56, 216, 248, 0, 56, 35, 240, 1, 3, 200, 248, 0, 56, 216, ++ 248, 0, 56, 0, 224, 17, 72, 255, 243, 3, 241, 33, 70, 16, 72, 255, 243, ++ 255, 240, 216, 248, 12, 25, 216, 248, 16, 41, 216, 248, 20, 57, 216, ++ 248, 28, 9, 0, 144, 11, 72, 255, 243, 243, 240, 11, 72, 49, 70, 255, ++ 243, 239, 240, 1, 52, 4, 53, 215, 248, 112, 51, 156, 66, 188, 211, 189, ++ 232, 252, 129, 0, 191, 127, 26, 4, 0, 143, 26, 4, 0, 155, 26, 4, 0, ++ 174, 28, 136, 0, 172, 26, 4, 0, 228, 26, 4, 0, 240, 181, 0, 35, 5, 224, ++ 204, 92, 5, 104, 1, 51, 68, 234, 5, 36, 4, 96, 2, 240, 3, 4, 163, 66, ++ 245, 219, 29, 70, 28, 70, 201, 24, 23, 224, 17, 248, 3, 124, 0, 45, ++ 17, 248, 4, 204, 212, 191, 0, 38, 1, 38, 63, 4, 71, 234, 12, 103, 17, ++ 248, 1, 204, 0, 235, 134, 6, 71, 234, 12, 7, 17, 248, 2, 204, 54, 27, ++ 71, 234, 12, 39, 247, 80, 4, 51, 4, 49, 147, 66, 228, 219, 240, 189, ++ 112, 181, 2, 240, 3, 4, 5, 104, 35, 70, 2, 224, 1, 59, 205, 84, 45, ++ 10, 0, 43, 250, 209, 9, 25, 35, 70, 21, 224, 37, 28, 24, 191, 1, 37, ++ 0, 235, 133, 5, 45, 27, 238, 88, 54, 14, 1, 248, 4, 108, 238, 88, 54, ++ 12, 1, 248, 3, 108, 238, 88, 54, 10, 1, 248, 2, 108, 237, 88, 4, 51, ++ 1, 248, 1, 92, 4, 49, 147, 66, 230, 219, 112, 189, 3, 48, 32, 240, 3, ++ 0, 8, 48, 112, 71, 48, 181, 11, 70, 0, 36, 7, 224, 4, 52, 0, 235, 129, ++ 5, 45, 25, 85, 248, 4, 92, 101, 185, 1, 51, 85, 30, 171, 66, 244, 219, ++ 80, 248, 35, 32, 1, 42, 6, 216, 91, 27, 88, 66, 64, 235, 3, 0, 48, 189, ++ 0, 32, 48, 189, 0, 32, 48, 189, 48, 181, 11, 70, 0, 36, 0, 224, 1, 51, ++ 0, 235, 65, 5, 45, 91, 29, 177, 1, 45, 5, 217, 0, 32, 48, 189, 85, 30, ++ 2, 52, 171, 66, 242, 219, 80, 30, 26, 26, 80, 66, 64, 235, 2, 0, 48, ++ 189, 240, 181, 21, 70, 0, 36, 10, 224, 86, 0, 135, 25, 142, 25, 63, ++ 91, 54, 91, 183, 66, 7, 211, 4, 241, 2, 4, 7, 216, 1, 53, 157, 66, 242, ++ 219, 0, 32, 240, 189, 79, 240, 255, 48, 240, 189, 1, 32, 240, 189, 45, ++ 233, 240, 79, 14, 104, 23, 104, 208, 248, 0, 160, 133, 176, 132, 70, ++ 2, 145, 147, 70, 52, 70, 79, 240, 0, 9, 0, 37, 56, 70, 81, 70, 1, 150, ++ 0, 151, 26, 224, 2, 158, 1, 154, 1, 57, 6, 235, 130, 3, 0, 158, 95, ++ 89, 11, 235, 134, 3, 83, 248, 5, 128, 1, 56, 0, 35, 1, 60, 24, 235, ++ 7, 2, 67, 241, 0, 3, 18, 235, 9, 6, 67, 241, 0, 7, 12, 235, 138, 3, ++ 94, 81, 185, 70, 4, 61, 0, 40, 1, 221, 0, 44, 7, 220, 2, 70, 11, 70, ++ 15, 70, 6, 70, 162, 70, 0, 37, 1, 144, 20, 224, 0, 41, 214, 220, 244, ++ 231, 1, 152, 1, 59, 11, 235, 128, 1, 73, 89, 1, 58, 3, 145, 3, 158, ++ 0, 33, 25, 235, 6, 8, 65, 241, 0, 9, 12, 235, 135, 1, 65, 248, 5, 128, ++ 4, 61, 0, 42, 2, 220, 29, 70, 0, 34, 18, 224, 0, 43, 230, 220, 249, ++ 231, 2, 159, 1, 59, 7, 235, 138, 1, 142, 88, 1, 60, 0, 33, 25, 235, ++ 6, 8, 65, 241, 0, 9, 12, 235, 133, 1, 65, 248, 2, 128, 4, 58, 0, 44, ++ 2, 220, 25, 70, 0, 34, 11, 224, 0, 43, 232, 220, 249, 231, 200, 70, ++ 12, 235, 129, 0, 64, 248, 2, 128, 1, 59, 79, 240, 0, 9, 4, 58, 0, 43, ++ 244, 220, 72, 70, 5, 176, 189, 232, 240, 143, 45, 233, 240, 79, 146, ++ 70, 218, 248, 0, 48, 10, 104, 7, 104, 135, 176, 139, 70, 1, 146, 20, ++ 70, 3, 147, 29, 70, 2, 151, 57, 70, 0, 34, 0, 35, 0, 38, 29, 224, 1, ++ 159, 1, 61, 11, 235, 135, 12, 92, 248, 6, 192, 1, 60, 1, 57, 18, 235, ++ 12, 8, 3, 154, 67, 241, 0, 9, 10, 235, 130, 3, 83, 248, 6, 192, 2, 159, ++ 66, 70, 75, 70, 178, 235, 12, 2, 99, 241, 0, 3, 0, 235, 135, 12, 76, ++ 248, 6, 32, 26, 70, 4, 62, 0, 45, 1, 221, 0, 44, 4, 220, 140, 70, 47, ++ 70, 3, 148, 0, 38, 18, 224, 0, 41, 214, 220, 247, 231, 10, 235, 135, ++ 8, 88, 248, 6, 128, 1, 57, 178, 235, 8, 2, 99, 241, 0, 3, 0, 235, 140, ++ 8, 72, 248, 6, 32, 1, 61, 26, 70, 4, 62, 0, 45, 2, 220, 14, 70, 0, 37, ++ 22, 224, 0, 41, 232, 220, 249, 231, 221, 248, 12, 128, 1, 57, 11, 235, ++ 136, 7, 127, 89, 1, 60, 18, 235, 7, 8, 67, 241, 0, 9, 205, 233, 4, 137, ++ 0, 235, 134, 3, 67, 248, 5, 128, 74, 70, 0, 35, 4, 61, 0, 44, 4, 220, ++ 13, 70, 31, 70, 22, 70, 0, 36, 9, 224, 0, 41, 226, 220, 247, 231, 0, ++ 235, 133, 12, 76, 248, 4, 96, 1, 57, 4, 60, 62, 70, 0, 41, 246, 220, ++ 24, 70, 7, 176, 189, 232, 240, 143, 3, 104, 0, 235, 131, 0, 5, 224, ++ 2, 136, 65, 136, 1, 59, 1, 128, 66, 128, 4, 56, 0, 43, 247, 209, 112, ++ 71, 45, 233, 247, 79, 3, 104, 14, 70, 91, 0, 13, 104, 0, 147, 4, 70, ++ 7, 29, 255, 247, 232, 255, 48, 70, 255, 247, 229, 255, 109, 0, 51, 29, ++ 0, 224, 1, 61, 25, 70, 10, 136, 2, 51, 0, 42, 249, 208, 79, 240, 0, ++ 8, 79, 240, 1, 14, 10, 136, 0, 35, 8, 241, 1, 0, 158, 69, 20, 191, 150, ++ 70, 2, 241, 1, 14, 4, 235, 64, 0, 23, 224, 48, 248, 2, 207, 99, 243, ++ 31, 67, 221, 248, 0, 144, 108, 243, 15, 3, 197, 241, 2, 12, 8, 241, ++ 1, 8, 204, 68, 224, 69, 8, 219, 32, 70, 255, 247, 186, 255, 48, 70, ++ 3, 176, 189, 232, 240, 79, 255, 247, 180, 191, 115, 69, 229, 211, 2, ++ 241, 1, 14, 168, 68, 168, 241, 2, 2, 179, 251, 254, 254, 0, 35, 1, 146, ++ 172, 70, 26, 70, 24, 70, 27, 224, 1, 235, 69, 9, 145, 68, 57, 248, 2, ++ 156, 27, 12, 14, 251, 9, 51, 4, 235, 72, 11, 59, 248, 2, 144, 12, 241, ++ 255, 60, 195, 235, 9, 10, 192, 235, 10, 10, 31, 250, 138, 250, 80, 68, ++ 129, 69, 43, 248, 2, 160, 172, 191, 0, 32, 1, 32, 2, 58, 188, 241, 0, ++ 15, 224, 220, 221, 248, 4, 144, 37, 234, 229, 120, 200, 235, 9, 8, 55, ++ 248, 24, 32, 162, 235, 19, 67, 24, 26, 39, 248, 24, 0, 159, 231, 45, ++ 233, 240, 79, 79, 234, 67, 11, 133, 176, 2, 145, 2, 235, 11, 5, 31, ++ 70, 79, 240, 1, 12, 57, 224, 53, 248, 2, 28, 1, 63, 0, 41, 49, 208, ++ 0, 36, 57, 70, 152, 70, 38, 70, 1, 147, 23, 224, 53, 248, 2, 60, 194, ++ 235, 0, 10, 3, 147, 2, 155, 170, 68, 3, 235, 11, 9, 57, 248, 6, 144, ++ 3, 155, 8, 241, 255, 56, 9, 251, 3, 249, 9, 235, 20, 68, 58, 248, 6, ++ 144, 1, 57, 76, 68, 42, 248, 6, 64, 2, 62, 224, 69, 228, 218, 1, 155, ++ 138, 70, 0, 38, 10, 224, 0, 41, 16, 219, 0, 235, 74, 9, 57, 248, 6, ++ 128, 1, 57, 68, 68, 41, 248, 6, 64, 2, 62, 36, 12, 242, 209, 2, 61, ++ 12, 241, 1, 12, 0, 47, 195, 220, 1, 33, 8, 70, 5, 176, 189, 232, 240, ++ 143, 3, 136, 91, 24, 3, 128, 4, 224, 48, 248, 2, 44, 155, 24, 32, 248, ++ 2, 61, 27, 12, 248, 209, 112, 71, 45, 233, 240, 79, 137, 176, 221, 248, ++ 72, 144, 29, 70, 2, 144, 138, 70, 6, 146, 16, 70, 0, 33, 79, 234, 73, ++ 2, 254, 243, 33, 246, 47, 70, 10, 235, 69, 3, 0, 224, 1, 55, 30, 136, ++ 26, 70, 2, 51, 0, 46, 249, 208, 9, 241, 255, 48, 135, 66, 7, 146, 4, ++ 144, 5, 218, 123, 28, 58, 248, 19, 128, 72, 234, 6, 72, 112, 224, 176, ++ 70, 110, 224, 11, 241, 1, 11, 1, 224, 171, 70, 0, 35, 2, 153, 2, 51, ++ 1, 235, 69, 2, 210, 24, 50, 248, 2, 44, 0, 42, 241, 208, 4, 157, 171, ++ 69, 8, 218, 11, 241, 1, 3, 49, 248, 19, 48, 98, 243, 31, 68, 99, 243, ++ 15, 4, 0, 224, 20, 70, 7, 152, 199, 235, 11, 3, 5, 136, 170, 66, 2, ++ 216, 13, 209, 187, 69, 11, 209, 4, 153, 176, 69, 11, 68, 4, 217, 68, ++ 69, 19, 208, 8, 241, 1, 5, 12, 224, 178, 251, 245, 245, 14, 224, 176, ++ 69, 148, 191, 53, 70, 117, 28, 180, 251, 245, 245, 173, 178, 75, 68, ++ 45, 185, 117, 28, 180, 251, 245, 244, 165, 178, 0, 224, 1, 37, 6, 153, ++ 90, 0, 136, 24, 41, 70, 5, 146, 1, 147, 255, 247, 134, 255, 1, 155, ++ 0, 36, 3, 147, 74, 70, 35, 70, 0, 149, 186, 66, 6, 221, 1, 58, 58, 248, ++ 18, 16, 0, 157, 1, 251, 5, 68, 0, 224, 180, 177, 2, 157, 5, 152, 161, ++ 178, 5, 235, 0, 14, 62, 248, 3, 0, 3, 157, 193, 235, 0, 12, 46, 248, ++ 3, 192, 2, 59, 1, 61, 3, 149, 6, 212, 136, 66, 44, 191, 0, 33, 1, 33, ++ 1, 235, 20, 68, 222, 231, 93, 70, 2, 152, 81, 70, 42, 70, 75, 70, 255, ++ 247, 109, 253, 0, 40, 139, 218, 40, 70, 9, 176, 189, 232, 240, 143, ++ 45, 233, 240, 79, 11, 104, 139, 176, 147, 70, 5, 70, 7, 70, 0, 32, 8, ++ 145, 7, 147, 28, 70, 85, 248, 4, 43, 11, 70, 219, 248, 0, 96, 6, 144, ++ 1, 70, 0, 224, 1, 49, 83, 248, 4, 15, 0, 40, 250, 208, 6, 145, 0, 33, ++ 91, 70, 5, 145, 0, 224, 1, 49, 83, 248, 4, 15, 0, 40, 250, 208, 5, 145, ++ 40, 70, 0, 33, 146, 0, 254, 243, 102, 245, 7, 155, 79, 240, 0, 10, 3, ++ 241, 255, 57, 177, 68, 7, 235, 137, 9, 55, 224, 0, 33, 0, 32, 205, 233, ++ 2, 1, 7, 154, 8, 153, 1, 60, 1, 235, 130, 3, 83, 248, 10, 48, 4, 235, ++ 6, 8, 9, 147, 180, 70, 0, 33, 39, 70, 1, 149, 24, 224, 11, 235, 134, ++ 3, 88, 88, 9, 235, 1, 3, 92, 104, 4, 147, 34, 70, 9, 156, 0, 35, 228, ++ 251, 0, 35, 3, 152, 12, 241, 255, 60, 20, 24, 67, 241, 0, 5, 4, 154, ++ 205, 233, 2, 69, 84, 96, 8, 241, 255, 56, 4, 57, 5, 155, 156, 69, 227, ++ 220, 1, 157, 3, 152, 60, 70, 69, 248, 40, 0, 170, 241, 4, 10, 169, 241, ++ 4, 9, 6, 155, 156, 66, 196, 220, 11, 176, 189, 232, 240, 143, 45, 233, ++ 240, 79, 4, 70, 209, 248, 0, 144, 84, 248, 4, 59, 137, 176, 5, 145, ++ 130, 70, 0, 33, 32, 70, 79, 234, 201, 2, 6, 147, 254, 243, 14, 245, ++ 5, 155, 9, 241, 1, 5, 201, 241, 2, 6, 3, 235, 133, 5, 73, 70, 49, 224, ++ 0, 35, 0, 34, 205, 233, 2, 35, 85, 248, 4, 61, 1, 57, 79, 234, 65, 8, ++ 7, 147, 140, 70, 0, 32, 15, 70, 4, 148, 1, 149, 0, 150, 10, 235, 136, ++ 1, 9, 24, 1, 156, 3, 157, 78, 104, 35, 24, 83, 248, 4, 188, 7, 154, ++ 0, 35, 172, 25, 67, 241, 0, 5, 226, 251, 11, 69, 4, 56, 188, 241, 1, ++ 12, 205, 233, 2, 69, 76, 96, 232, 209, 0, 158, 4, 156, 8, 241, 255, ++ 56, 3, 155, 176, 68, 1, 157, 57, 70, 68, 248, 40, 48, 1, 54, 1, 41, ++ 203, 220, 79, 234, 73, 5, 0, 39, 44, 70, 0, 33, 204, 70, 15, 224, 10, ++ 235, 133, 0, 70, 88, 0, 35, 1, 60, 178, 25, 67, 235, 3, 3, 18, 235, ++ 7, 8, 67, 241, 0, 9, 64, 248, 1, 128, 79, 70, 4, 57, 0, 44, 237, 220, ++ 6, 155, 225, 70, 0, 39, 10, 235, 131, 1, 96, 70, 0, 36, 20, 224, 5, ++ 157, 58, 70, 5, 235, 137, 3, 29, 89, 0, 35, 229, 251, 5, 35, 141, 104, ++ 1, 56, 86, 25, 77, 104, 67, 241, 0, 7, 142, 96, 0, 35, 126, 25, 67, ++ 241, 0, 7, 78, 96, 4, 60, 8, 57, 0, 40, 231, 220, 9, 176, 189, 232, ++ 240, 143, 248, 181, 13, 70, 20, 70, 31, 70, 6, 70, 104, 177, 81, 177, ++ 16, 70, 82, 177, 16, 33, 0, 34, 176, 71, 48, 177, 6, 96, 69, 96, 132, ++ 96, 199, 96, 248, 189, 8, 70, 248, 189, 248, 189, 56, 181, 4, 70, 64, ++ 177, 1, 104, 49, 177, 11, 70, 77, 104, 136, 104, 16, 34, 168, 71, 0, ++ 35, 35, 96, 56, 189, 45, 233, 248, 67, 13, 70, 20, 70, 152, 70, 7, 70, ++ 0, 40, 48, 208, 3, 241, 3, 9, 41, 240, 3, 9, 72, 70, 255, 247, 5, 252, ++ 59, 104, 1, 70, 58, 70, 184, 104, 152, 71, 6, 70, 24, 179, 79, 234, ++ 169, 3, 7, 96, 67, 96, 0, 241, 8, 7, 44, 185, 56, 70, 33, 70, 74, 70, ++ 254, 243, 81, 244, 22, 224, 2, 45, 13, 209, 200, 235, 9, 9, 0, 33, 74, ++ 70, 56, 70, 254, 243, 71, 244, 7, 235, 9, 0, 33, 70, 66, 70, 253, 247, ++ 193, 248, 6, 224, 56, 70, 33, 70, 66, 70, 255, 247, 135, 251, 0, 224, ++ 6, 70, 48, 70, 189, 232, 248, 131, 67, 104, 8, 48, 0, 224, 1, 59, 80, ++ 248, 4, 43, 10, 185, 0, 43, 249, 220, 67, 177, 88, 1, 79, 240, 0, 67, ++ 1, 224, 91, 8, 1, 56, 19, 66, 251, 208, 112, 71, 24, 70, 112, 71, 45, ++ 233, 240, 67, 69, 104, 8, 48, 207, 15, 2, 208, 75, 66, 92, 17, 1, 224, ++ 76, 17, 11, 70, 98, 1, 155, 26, 0, 47, 70, 209, 0, 41, 91, 221, 106, ++ 30, 20, 27, 38, 70, 57, 70, 19, 224, 0, 235, 132, 7, 7, 235, 1, 8, 216, ++ 248, 4, 128, 127, 88, 195, 241, 32, 9, 40, 250, 3, 248, 7, 250, 9, 247, ++ 0, 235, 133, 12, 72, 234, 7, 7, 1, 62, 76, 248, 1, 112, 4, 57, 0, 46, ++ 232, 220, 36, 234, 228, 113, 100, 26, 82, 26, 80, 248, 36, 16, 0, 235, ++ 130, 5, 49, 250, 3, 243, 64, 248, 34, 48, 0, 35, 1, 224, 0, 33, 233, ++ 80, 4, 59, 1, 58, 250, 213, 189, 232, 240, 131, 0, 235, 132, 7, 7, 235, ++ 2, 8, 216, 248, 4, 128, 191, 88, 195, 241, 32, 12, 40, 250, 12, 248, ++ 7, 250, 3, 252, 72, 234, 12, 7, 135, 80, 1, 49, 1, 54, 4, 50, 2, 224, ++ 0, 34, 33, 70, 22, 70, 111, 30, 185, 66, 229, 219, 80, 248, 33, 16, ++ 50, 70, 17, 250, 3, 243, 0, 235, 134, 4, 64, 248, 38, 48, 0, 35, 1, ++ 224, 0, 33, 225, 80, 1, 50, 4, 51, 170, 66, 249, 219, 189, 232, 240, ++ 131, 45, 233, 248, 67, 70, 104, 13, 70, 182, 0, 158, 66, 20, 70, 152, ++ 70, 0, 241, 8, 9, 9, 221, 247, 26, 72, 70, 0, 33, 58, 70, 70, 70, 254, ++ 243, 160, 243, 79, 240, 0, 8, 2, 224, 198, 235, 3, 8, 0, 39, 2, 45, ++ 4, 235, 8, 1, 5, 209, 9, 235, 7, 0, 50, 70, 253, 247, 17, 248, 5, 224, ++ 39, 240, 3, 0, 72, 68, 50, 70, 255, 247, 214, 250, 48, 70, 189, 232, ++ 248, 131, 66, 104, 3, 70, 82, 1, 82, 26, 0, 42, 1, 221, 8, 51, 8, 224, ++ 0, 34, 1, 33, 19, 70, 255, 247, 200, 191, 0, 34, 67, 248, 4, 43, 32, ++ 57, 32, 41, 249, 220, 2, 34, 193, 241, 31, 1, 18, 250, 1, 241, 26, 104, ++ 1, 57, 17, 64, 25, 96, 112, 71, 3, 70, 64, 104, 8, 51, 128, 0, 0, 224, ++ 4, 56, 83, 248, 4, 43, 10, 185, 0, 40, 249, 220, 3, 70, 96, 177, 2, ++ 41, 10, 208, 178, 241, 128, 127, 7, 210, 1, 56, 178, 245, 128, 63, 3, ++ 210, 152, 30, 255, 42, 152, 191, 216, 30, 112, 71, 45, 233, 248, 67, ++ 71, 104, 13, 70, 191, 0, 159, 66, 20, 70, 0, 241, 8, 9, 4, 219, 255, ++ 26, 30, 70, 79, 240, 0, 8, 8, 224, 199, 235, 3, 8, 16, 70, 0, 33, 66, ++ 70, 254, 243, 57, 243, 62, 70, 0, 39, 2, 45, 4, 235, 8, 1, 6, 209, 8, ++ 70, 50, 70, 9, 235, 7, 1, 252, 247, 173, 255, 6, 224, 39, 240, 3, 7, ++ 9, 235, 7, 0, 50, 70, 255, 247, 158, 250, 48, 70, 189, 232, 248, 131, ++ 0, 104, 112, 71, 112, 181, 4, 70, 136, 177, 0, 104, 120, 177, 255, 247, ++ 247, 255, 35, 104, 6, 70, 88, 104, 128, 0, 255, 247, 180, 250, 51, 70, ++ 2, 70, 117, 104, 176, 104, 33, 104, 168, 71, 0, 35, 35, 96, 112, 189, ++ 248, 181, 12, 70, 1, 33, 5, 70, 255, 247, 154, 255, 1, 33, 6, 70, 32, ++ 70, 255, 247, 149, 255, 134, 66, 31, 220, 27, 219, 104, 104, 97, 104, ++ 3, 54, 182, 16, 0, 35, 128, 27, 8, 53, 137, 27, 8, 52, 26, 70, 12, 224, ++ 5, 235, 128, 7, 87, 248, 3, 192, 4, 235, 129, 7, 255, 88, 188, 69, 10, ++ 216, 3, 241, 4, 3, 9, 211, 1, 50, 178, 66, 240, 219, 0, 32, 248, 189, ++ 79, 240, 255, 48, 248, 189, 1, 32, 248, 189, 79, 240, 255, 48, 248, ++ 189, 240, 181, 70, 104, 77, 104, 51, 70, 8, 48, 42, 70, 8, 49, 0, 36, ++ 9, 224, 1, 235, 133, 7, 87, 248, 4, 192, 0, 235, 134, 7, 1, 59, 1, 58, ++ 71, 248, 4, 192, 0, 43, 2, 220, 28, 70, 0, 33, 8, 224, 4, 60, 0, 42, ++ 237, 220, 248, 231, 0, 235, 132, 5, 0, 38, 1, 59, 110, 80, 4, 57, 0, ++ 43, 247, 220, 210, 241, 1, 0, 56, 191, 0, 32, 240, 189, 66, 104, 8, ++ 48, 83, 30, 80, 248, 35, 48, 48, 181, 139, 66, 18, 209, 0, 33, 0, 224, ++ 1, 49, 80, 248, 4, 75, 85, 30, 12, 185, 169, 66, 248, 211, 169, 66, ++ 4, 209, 225, 26, 75, 66, 67, 235, 1, 3, 0, 224, 0, 35, 216, 178, 48, ++ 189, 0, 32, 48, 189, 67, 104, 0, 235, 131, 0, 64, 104, 0, 240, 1, 0, ++ 112, 71, 56, 181, 69, 104, 0, 241, 8, 4, 1, 61, 32, 70, 0, 33, 42, 70, ++ 254, 243, 129, 242, 1, 35, 68, 248, 37, 48, 56, 189, 8, 181, 3, 70, ++ 0, 33, 8, 48, 90, 104, 255, 247, 28, 250, 192, 178, 8, 189, 112, 181, ++ 6, 29, 4, 70, 29, 70, 48, 70, 4, 49, 4, 50, 255, 247, 92, 250, 109, ++ 177, 40, 185, 32, 70, 41, 70, 255, 247, 91, 255, 0, 40, 6, 221, 48, ++ 70, 49, 70, 42, 29, 189, 232, 112, 64, 255, 247, 203, 186, 112, 189, ++ 56, 181, 5, 29, 28, 70, 40, 70, 4, 49, 4, 50, 255, 247, 194, 250, 60, ++ 177, 48, 177, 40, 70, 41, 70, 34, 29, 189, 232, 56, 64, 255, 247, 59, ++ 186, 56, 189, 45, 233, 243, 65, 28, 70, 13, 241, 8, 8, 130, 234, 226, ++ 115, 163, 235, 226, 115, 13, 70, 23, 70, 6, 70, 72, 248, 8, 61, 255, ++ 247, 23, 255, 2, 33, 4, 35, 106, 70, 255, 247, 193, 253, 0, 47, 2, 70, ++ 1, 144, 41, 70, 48, 70, 35, 70, 2, 218, 255, 247, 208, 255, 1, 224, ++ 255, 247, 180, 255, 1, 168, 255, 247, 5, 255, 189, 232, 252, 129, 240, ++ 181, 133, 176, 20, 70, 13, 70, 6, 70, 255, 247, 250, 254, 99, 104, 2, ++ 33, 4, 241, 8, 2, 139, 64, 7, 70, 255, 247, 161, 253, 107, 104, 2, 33, ++ 1, 51, 139, 64, 1, 144, 0, 34, 56, 70, 255, 247, 152, 253, 99, 104, ++ 2, 33, 2, 144, 0, 34, 139, 64, 56, 70, 255, 247, 144, 253, 3, 144, 32, ++ 70, 255, 247, 201, 253, 100, 104, 100, 1, 4, 27, 0, 224, 32, 52, 20, ++ 241, 31, 15, 251, 219, 2, 152, 41, 70, 255, 247, 27, 255, 60, 177, 1, ++ 152, 33, 70, 255, 247, 205, 253, 2, 152, 33, 70, 255, 247, 201, 253, ++ 2, 152, 1, 153, 4, 48, 4, 49, 255, 247, 224, 250, 2, 152, 1, 153, 255, ++ 247, 214, 254, 0, 40, 5, 219, 2, 152, 1, 154, 1, 70, 0, 35, 255, 247, ++ 125, 255, 28, 177, 2, 152, 97, 66, 255, 247, 178, 253, 2, 153, 48, 70, ++ 255, 247, 247, 254, 3, 168, 255, 247, 172, 254, 2, 168, 255, 247, 169, ++ 254, 1, 168, 255, 247, 166, 254, 5, 176, 240, 189, 45, 233, 247, 67, ++ 4, 70, 136, 70, 145, 70, 29, 70, 8, 241, 4, 7, 255, 247, 152, 254, 9, ++ 241, 4, 6, 1, 148, 77, 185, 217, 248, 4, 32, 216, 248, 4, 48, 211, 24, ++ 98, 104, 154, 66, 1, 211, 32, 29, 11, 224, 217, 248, 4, 32, 216, 248, ++ 4, 48, 1, 33, 211, 24, 155, 0, 0, 34, 255, 247, 47, 253, 1, 144, 4, ++ 48, 57, 70, 50, 70, 255, 247, 14, 252, 53, 185, 1, 153, 140, 66, 8, ++ 208, 32, 70, 255, 247, 189, 254, 4, 224, 32, 70, 1, 153, 42, 70, 255, ++ 247, 108, 255, 1, 155, 156, 66, 2, 208, 1, 168, 255, 247, 105, 254, ++ 189, 232, 254, 131, 240, 181, 133, 176, 4, 172, 68, 248, 12, 45, 14, ++ 70, 29, 70, 7, 70, 255, 247, 91, 254, 2, 33, 34, 70, 4, 35, 255, 247, ++ 5, 253, 4, 172, 68, 248, 4, 13, 2, 70, 49, 70, 56, 70, 43, 70, 255, ++ 247, 171, 255, 32, 70, 255, 247, 76, 254, 5, 176, 240, 189, 247, 181, ++ 4, 70, 15, 70, 21, 70, 62, 29, 255, 247, 65, 254, 1, 148, 53, 185, 122, ++ 104, 99, 104, 179, 235, 66, 15, 1, 211, 32, 29, 7, 224, 123, 104, 1, ++ 33, 0, 34, 219, 0, 255, 247, 225, 252, 1, 144, 4, 48, 49, 70, 255, 247, ++ 48, 252, 53, 185, 1, 153, 140, 66, 8, 208, 32, 70, 255, 247, 112, 254, ++ 4, 224, 32, 70, 1, 153, 42, 70, 255, 247, 31, 255, 1, 155, 156, 66, ++ 2, 208, 1, 168, 255, 247, 28, 254, 254, 189, 45, 233, 240, 79, 143, ++ 176, 3, 144, 16, 70, 137, 70, 146, 70, 255, 247, 16, 254, 217, 248, ++ 4, 80, 1, 33, 108, 0, 173, 0, 0, 34, 43, 70, 6, 70, 255, 247, 181, 252, ++ 1, 33, 0, 34, 43, 70, 9, 144, 48, 70, 255, 247, 174, 252, 1, 33, 0, ++ 34, 43, 70, 10, 144, 48, 70, 255, 247, 167, 252, 1, 33, 0, 34, 43, 70, ++ 11, 144, 48, 70, 255, 247, 160, 252, 1, 33, 0, 34, 43, 70, 12, 144, ++ 48, 70, 255, 247, 153, 252, 10, 159, 1, 70, 7, 241, 8, 3, 7, 147, 12, ++ 155, 1, 34, 4, 147, 8, 51, 5, 147, 0, 241, 8, 3, 6, 147, 0, 35, 128, ++ 70, 13, 144, 9, 157, 11, 158, 255, 247, 175, 254, 3, 152, 13, 153, 255, ++ 247, 234, 253, 8, 53, 0, 40, 6, 241, 8, 11, 2, 220, 80, 70, 3, 153, ++ 77, 224, 73, 70, 11, 152, 255, 247, 16, 254, 3, 153, 10, 152, 255, 247, ++ 12, 254, 56, 29, 255, 247, 208, 249, 8, 241, 4, 8, 48, 29, 255, 247, ++ 203, 249, 64, 70, 255, 247, 200, 249, 7, 159, 0, 38, 51, 70, 57, 70, ++ 42, 70, 88, 70, 0, 148, 255, 247, 160, 250, 6, 153, 6, 70, 42, 70, 5, ++ 152, 35, 70, 255, 247, 64, 250, 88, 70, 49, 70, 34, 70, 255, 247, 134, ++ 248, 80, 177, 4, 155, 24, 29, 255, 247, 174, 249, 80, 70, 73, 70, 12, ++ 154, 0, 35, 255, 247, 94, 254, 27, 224, 51, 70, 89, 70, 42, 70, 56, ++ 70, 0, 148, 255, 247, 129, 250, 5, 153, 6, 70, 42, 70, 6, 152, 35, 70, ++ 255, 247, 33, 250, 56, 70, 49, 70, 34, 70, 255, 247, 103, 248, 0, 40, ++ 203, 208, 64, 70, 255, 247, 143, 249, 13, 153, 80, 70, 255, 247, 196, ++ 253, 13, 168, 255, 247, 121, 253, 12, 168, 255, 247, 118, 253, 11, 168, ++ 255, 247, 115, 253, 10, 168, 255, 247, 112, 253, 9, 168, 255, 247, 109, ++ 253, 15, 176, 189, 232, 240, 143, 247, 181, 5, 70, 30, 70, 16, 70, 15, ++ 70, 20, 70, 255, 247, 96, 253, 115, 104, 1, 33, 0, 34, 155, 0, 255, ++ 247, 9, 252, 1, 144, 40, 70, 255, 247, 237, 253, 1, 152, 57, 70, 255, ++ 247, 156, 253, 19, 224, 32, 70, 255, 247, 222, 253, 40, 177, 40, 70, ++ 41, 70, 1, 154, 51, 70, 255, 247, 165, 254, 32, 70, 1, 33, 255, 247, ++ 68, 252, 1, 152, 51, 70, 1, 70, 2, 70, 255, 247, 155, 254, 32, 70, 0, ++ 33, 255, 247, 172, 253, 0, 40, 229, 208, 1, 168, 255, 247, 54, 253, ++ 254, 189, 240, 181, 7, 70, 133, 176, 8, 70, 12, 70, 255, 247, 44, 253, ++ 101, 104, 1, 33, 173, 0, 0, 34, 43, 70, 6, 70, 255, 247, 211, 251, 1, ++ 33, 1, 144, 0, 34, 43, 70, 48, 70, 255, 247, 204, 251, 1, 33, 0, 34, ++ 43, 70, 2, 144, 48, 70, 255, 247, 197, 251, 3, 144, 2, 152, 255, 247, ++ 169, 253, 2, 154, 35, 70, 1, 152, 33, 70, 255, 247, 211, 253, 1, 152, ++ 1, 33, 255, 247, 9, 252, 3, 152, 57, 70, 1, 154, 35, 70, 255, 247, 154, ++ 255, 1, 33, 3, 152, 255, 247, 113, 253, 1, 70, 64, 185, 3, 152, 255, ++ 247, 108, 253, 0, 40, 12, 191, 79, 240, 255, 52, 0, 36, 0, 224, 1, 36, ++ 3, 168, 255, 247, 241, 252, 2, 168, 255, 247, 238, 252, 1, 168, 255, ++ 247, 235, 252, 32, 70, 5, 176, 240, 189, 45, 233, 240, 79, 128, 70, ++ 195, 176, 24, 70, 28, 70, 137, 70, 22, 70, 221, 248, 48, 161, 221, 248, ++ 52, 177, 255, 247, 216, 252, 101, 104, 1, 33, 173, 0, 0, 34, 43, 70, ++ 7, 70, 255, 247, 127, 251, 1, 33, 64, 144, 0, 34, 43, 70, 56, 70, 255, ++ 247, 120, 251, 1, 33, 65, 144, 32, 170, 32, 70, 43, 70, 255, 247, 149, ++ 252, 88, 70, 105, 70, 42, 70, 208, 71, 104, 70, 32, 169, 42, 70, 252, ++ 247, 72, 252, 0, 40, 244, 218, 1, 33, 106, 70, 43, 70, 65, 152, 255, ++ 247, 33, 252, 65, 153, 64, 152, 10, 70, 35, 70, 255, 247, 9, 254, 64, ++ 152, 35, 70, 2, 70, 49, 70, 255, 247, 3, 254, 65, 152, 255, 247, 50, ++ 253, 64, 155, 88, 177, 24, 70, 25, 70, 66, 70, 35, 70, 255, 247, 248, ++ 253, 64, 152, 33, 70, 255, 247, 99, 255, 1, 40, 10, 224, 24, 70, 25, ++ 70, 74, 70, 35, 70, 255, 247, 236, 253, 64, 152, 33, 70, 255, 247, 87, ++ 255, 1, 48, 65, 168, 20, 191, 0, 36, 1, 36, 255, 247, 133, 252, 64, ++ 168, 255, 247, 130, 252, 32, 70, 67, 176, 189, 232, 240, 143, 66, 104, ++ 211, 8, 3, 96, 131, 104, 82, 6, 66, 234, 211, 18, 34, 240, 112, 66, ++ 66, 96, 194, 104, 155, 5, 67, 234, 146, 35, 35, 240, 96, 67, 131, 96, ++ 3, 105, 146, 4, 66, 234, 147, 50, 34, 240, 112, 66, 194, 96, 66, 105, ++ 155, 3, 67, 234, 146, 67, 35, 240, 112, 67, 3, 97, 131, 105, 210, 2, ++ 66, 234, 83, 82, 34, 240, 96, 66, 66, 97, 194, 105, 219, 1, 67, 234, ++ 82, 99, 35, 240, 112, 67, 131, 97, 3, 106, 210, 0, 66, 234, 83, 114, ++ 34, 240, 112, 66, 35, 240, 96, 67, 194, 97, 3, 98, 112, 71, 195, 105, ++ 2, 106, 66, 234, 67, 114, 2, 98, 130, 105, 219, 8, 67, 234, 66, 99, ++ 195, 97, 67, 105, 210, 9, 66, 234, 67, 82, 130, 97, 2, 105, 219, 10, ++ 67, 234, 130, 67, 67, 97, 195, 104, 146, 11, 66, 234, 131, 50, 2, 97, ++ 130, 104, 155, 12, 67, 234, 130, 35, 195, 96, 67, 104, 146, 13, 66, ++ 234, 195, 18, 130, 96, 2, 104, 91, 14, 67, 234, 194, 3, 67, 96, 0, 35, ++ 3, 96, 112, 71, 45, 233, 247, 79, 12, 106, 207, 105, 164, 251, 4, 35, ++ 192, 233, 32, 35, 167, 251, 4, 35, 209, 248, 24, 192, 146, 24, 67, 235, ++ 3, 3, 192, 233, 30, 35, 172, 251, 4, 35, 231, 251, 7, 35, 146, 24, 67, ++ 235, 3, 3, 192, 233, 28, 35, 172, 251, 7, 35, 209, 248, 20, 128, 146, ++ 24, 67, 235, 3, 3, 228, 251, 8, 35, 209, 248, 16, 176, 146, 24, 67, ++ 235, 3, 3, 192, 233, 26, 35, 171, 251, 4, 35, 231, 251, 8, 35, 146, ++ 24, 67, 235, 3, 3, 236, 251, 12, 35, 130, 70, 192, 233, 24, 35, 200, ++ 104, 14, 70, 1, 144, 160, 251, 4, 1, 171, 251, 7, 35, 236, 251, 8, 1, ++ 214, 248, 8, 144, 146, 24, 67, 235, 3, 3, 128, 24, 65, 235, 3, 1, 169, ++ 251, 4, 35, 0, 24, 65, 235, 1, 1, 1, 157, 202, 233, 22, 1, 144, 24, ++ 67, 235, 3, 1, 165, 251, 7, 35, 236, 251, 11, 35, 232, 251, 8, 1, 146, ++ 24, 117, 104, 67, 235, 3, 3, 146, 24, 67, 235, 3, 3, 128, 24, 65, 235, ++ 3, 1, 165, 251, 4, 35, 231, 251, 9, 35, 232, 251, 11, 35, 54, 104, 202, ++ 233, 20, 1, 1, 152, 236, 251, 0, 35, 166, 251, 4, 1, 236, 251, 9, 1, ++ 146, 24, 235, 251, 11, 1, 67, 235, 3, 3, 202, 233, 18, 35, 1, 155, 232, ++ 251, 3, 1, 165, 251, 7, 35, 146, 24, 67, 235, 3, 3, 128, 24, 65, 235, ++ 3, 1, 166, 251, 7, 35, 0, 24, 236, 251, 5, 35, 65, 235, 1, 1, 202, 233, ++ 16, 1, 1, 152, 235, 251, 0, 35, 146, 24, 67, 235, 3, 3, 232, 251, 9, ++ 35, 146, 24, 67, 235, 3, 3, 202, 233, 14, 35, 166, 251, 12, 35, 232, ++ 251, 5, 35, 235, 251, 9, 35, 146, 24, 67, 235, 3, 3, 224, 251, 0, 35, ++ 166, 251, 8, 1, 202, 233, 12, 35, 1, 155, 227, 251, 9, 1, 165, 251, ++ 11, 35, 146, 24, 67, 235, 3, 3, 128, 24, 65, 235, 3, 1, 0, 24, 166, ++ 251, 11, 35, 65, 235, 1, 1, 202, 233, 10, 1, 1, 152, 224, 251, 5, 35, ++ 146, 24, 67, 235, 3, 3, 146, 24, 67, 235, 3, 3, 233, 251, 9, 35, 202, ++ 233, 8, 35, 166, 251, 0, 35, 233, 251, 5, 35, 146, 24, 67, 235, 3, 3, ++ 202, 233, 6, 35, 166, 251, 9, 35, 229, 251, 5, 35, 146, 24, 67, 235, ++ 3, 3, 202, 233, 4, 35, 166, 251, 5, 35, 166, 251, 6, 103, 146, 24, 67, ++ 235, 3, 3, 146, 24, 67, 235, 3, 3, 202, 233, 2, 35, 202, 233, 0, 103, ++ 189, 232, 254, 143, 45, 233, 240, 79, 209, 248, 32, 192, 210, 248, 32, ++ 128, 20, 70, 168, 251, 12, 35, 145, 176, 192, 233, 32, 35, 5, 144, 224, ++ 105, 13, 70, 160, 251, 12, 35, 201, 105, 167, 105, 225, 251, 8, 35, ++ 6, 144, 168, 105, 7, 145, 9, 144, 5, 158, 167, 251, 12, 1, 198, 233, ++ 30, 35, 9, 154, 6, 158, 226, 251, 8, 1, 7, 154, 0, 35, 18, 235, 2, 10, ++ 67, 235, 3, 11, 170, 251, 6, 35, 6, 251, 11, 51, 128, 24, 8, 151, 5, ++ 159, 65, 235, 3, 1, 199, 233, 28, 1, 96, 105, 105, 105, 10, 144, 4, ++ 145, 160, 251, 12, 1, 4, 154, 8, 158, 7, 159, 226, 251, 8, 1, 166, 251, ++ 7, 35, 6, 158, 9, 159, 231, 251, 6, 35, 146, 24, 67, 235, 3, 3, 128, ++ 24, 38, 105, 65, 235, 3, 1, 5, 155, 47, 105, 195, 233, 26, 1, 166, 251, ++ 12, 35, 231, 251, 8, 35, 11, 150, 12, 151, 6, 152, 4, 153, 10, 158, ++ 225, 251, 0, 35, 7, 159, 8, 152, 231, 251, 6, 35, 9, 153, 231, 104, ++ 225, 251, 0, 35, 232, 104, 5, 158, 14, 144, 167, 251, 12, 1, 198, 233, ++ 24, 35, 14, 154, 10, 155, 226, 251, 8, 1, 9, 158, 13, 151, 230, 251, ++ 3, 1, 8, 159, 4, 154, 11, 158, 226, 251, 7, 1, 7, 159, 212, 248, 8, ++ 160, 166, 251, 7, 35, 6, 158, 12, 159, 231, 251, 6, 35, 174, 104, 146, ++ 24, 67, 235, 3, 3, 128, 24, 65, 235, 3, 1, 1, 150, 5, 155, 170, 251, ++ 12, 103, 195, 233, 22, 1, 1, 152, 10, 153, 224, 251, 8, 103, 4, 154, ++ 13, 152, 226, 251, 1, 103, 7, 153, 160, 251, 1, 35, 6, 152, 14, 153, ++ 225, 251, 0, 35, 8, 152, 12, 153, 225, 251, 0, 35, 11, 152, 9, 153, ++ 225, 251, 0, 35, 146, 24, 67, 235, 3, 3, 182, 24, 71, 235, 3, 7, 5, ++ 155, 195, 233, 20, 103, 102, 104, 213, 248, 4, 176, 166, 251, 12, 35, ++ 235, 251, 8, 35, 6, 159, 1, 152, 7, 153, 224, 251, 7, 35, 225, 251, ++ 10, 35, 8, 159, 14, 152, 13, 153, 224, 251, 7, 35, 9, 159, 10, 152, ++ 231, 251, 1, 35, 12, 153, 11, 159, 225, 251, 0, 35, 4, 152, 36, 104, ++ 224, 251, 7, 35, 5, 159, 15, 148, 199, 233, 18, 35, 15, 154, 44, 104, ++ 162, 251, 12, 1, 228, 251, 8, 1, 9, 155, 13, 157, 227, 251, 10, 1, 4, ++ 159, 8, 154, 231, 251, 5, 1, 1, 155, 10, 157, 227, 251, 2, 1, 7, 154, ++ 6, 155, 166, 251, 2, 137, 14, 159, 235, 251, 3, 137, 231, 251, 5, 1, ++ 11, 157, 12, 159, 231, 251, 5, 137, 24, 235, 8, 2, 73, 235, 9, 3, 128, ++ 24, 65, 235, 3, 1, 10, 157, 5, 155, 1, 159, 195, 233, 16, 1, 165, 251, ++ 7, 137, 15, 153, 7, 157, 6, 159, 161, 251, 5, 35, 4, 152, 228, 251, ++ 7, 35, 224, 251, 10, 137, 8, 152, 9, 153, 235, 251, 0, 35, 225, 251, ++ 6, 35, 13, 157, 12, 159, 11, 152, 231, 251, 5, 35, 14, 153, 225, 251, ++ 0, 35, 146, 24, 67, 235, 3, 3, 24, 235, 2, 8, 73, 235, 3, 9, 5, 155, ++ 195, 233, 14, 137, 15, 157, 9, 159, 8, 152, 165, 251, 7, 35, 228, 251, ++ 0, 35, 10, 153, 4, 157, 235, 251, 1, 35, 229, 251, 6, 35, 11, 159, 1, ++ 152, 12, 153, 224, 251, 7, 35, 225, 251, 10, 35, 14, 159, 13, 157, 5, ++ 152, 231, 251, 5, 35, 192, 233, 12, 35, 15, 154, 4, 155, 10, 157, 162, ++ 251, 3, 1, 228, 251, 5, 1, 231, 251, 10, 1, 12, 157, 13, 159, 1, 154, ++ 226, 251, 7, 1, 166, 251, 5, 35, 11, 159, 235, 251, 7, 35, 146, 24, ++ 67, 235, 3, 3, 128, 24, 65, 235, 3, 1, 15, 159, 5, 155, 195, 233, 10, ++ 1, 167, 251, 5, 35, 11, 152, 13, 153, 228, 251, 0, 35, 235, 251, 1, ++ 35, 14, 157, 1, 159, 229, 251, 6, 35, 146, 24, 67, 235, 3, 3, 231, 251, ++ 10, 35, 5, 152, 15, 153, 192, 233, 8, 35, 161, 251, 5, 35, 13, 157, ++ 228, 251, 5, 35, 235, 251, 10, 35, 231, 251, 6, 35, 192, 233, 6, 35, ++ 0, 35, 161, 251, 7, 1, 27, 235, 11, 8, 67, 235, 3, 9, 168, 251, 6, 35, ++ 228, 251, 10, 1, 6, 251, 9, 51, 128, 24, 65, 235, 3, 1, 15, 157, 5, ++ 155, 195, 233, 4, 1, 165, 251, 11, 35, 228, 251, 6, 35, 165, 251, 4, ++ 69, 146, 24, 5, 158, 67, 235, 3, 3, 198, 233, 2, 35, 198, 233, 0, 69, ++ 17, 176, 189, 232, 240, 143, 140, 70, 129, 111, 45, 233, 240, 79, 208, ++ 233, 32, 35, 76, 7, 198, 111, 18, 25, 67, 241, 0, 3, 204, 8, 7, 111, ++ 68, 234, 70, 116, 245, 8, 228, 24, 69, 241, 0, 5, 123, 6, 208, 248, ++ 116, 128, 228, 24, 69, 241, 0, 5, 204, 248, 60, 32, 250, 9, 208, 248, ++ 104, 144, 66, 234, 72, 98, 86, 25, 79, 234, 216, 19, 208, 248, 108, ++ 160, 67, 241, 0, 7, 79, 234, 73, 83, 204, 248, 56, 64, 79, 234, 217, ++ 34, 244, 24, 1, 110, 71, 241, 0, 5, 66, 234, 74, 82, 18, 235, 5, 8, ++ 79, 234, 218, 35, 67, 241, 0, 9, 139, 4, 70, 110, 204, 248, 52, 64, ++ 24, 235, 3, 4, 73, 241, 0, 5, 138, 11, 135, 109, 66, 234, 134, 66, 179, ++ 11, 18, 235, 5, 10, 67, 241, 0, 11, 187, 3, 208, 248, 92, 128, 204, ++ 248, 48, 64, 26, 235, 3, 4, 75, 241, 0, 5, 186, 12, 1, 109, 66, 234, ++ 136, 50, 79, 234, 152, 67, 18, 235, 5, 8, 67, 241, 0, 9, 139, 2, 70, ++ 109, 204, 248, 44, 64, 24, 235, 3, 4, 73, 241, 0, 5, 138, 13, 135, 108, ++ 66, 234, 134, 34, 179, 13, 18, 235, 5, 10, 67, 241, 0, 11, 251, 1, 208, ++ 248, 76, 128, 204, 248, 40, 64, 26, 235, 3, 4, 75, 241, 0, 5, 122, 14, ++ 1, 108, 66, 234, 200, 18, 79, 234, 88, 99, 18, 235, 5, 8, 67, 241, 0, ++ 9, 203, 0, 208, 233, 14, 171, 204, 248, 36, 64, 24, 235, 3, 4, 79, 234, ++ 202, 115, 70, 108, 73, 241, 0, 5, 20, 235, 3, 8, 69, 241, 0, 9, 76, ++ 15, 95, 234, 91, 3, 79, 234, 58, 2, 68, 234, 198, 4, 7, 107, 117, 15, ++ 18, 25, 67, 235, 5, 3, 18, 235, 9, 2, 67, 241, 0, 3, 57, 7, 84, 24, ++ 204, 248, 32, 128, 208, 248, 52, 128, 67, 241, 0, 5, 58, 9, 129, 106, ++ 66, 234, 8, 114, 79, 234, 24, 19, 18, 235, 5, 8, 67, 241, 0, 9, 11, ++ 6, 198, 106, 204, 248, 28, 64, 24, 235, 3, 4, 73, 241, 0, 5, 10, 10, ++ 7, 106, 66, 234, 6, 98, 51, 10, 18, 235, 5, 10, 67, 241, 0, 11, 59, ++ 5, 208, 248, 36, 128, 204, 248, 24, 64, 26, 235, 3, 4, 75, 241, 0, 5, ++ 58, 11, 204, 248, 20, 64, 66, 234, 8, 82, 129, 105, 79, 234, 24, 51, ++ 18, 235, 5, 8, 67, 241, 0, 9, 75, 4, 198, 105, 24, 235, 3, 4, 73, 241, ++ 0, 5, 202, 11, 208, 248, 16, 128, 66, 234, 70, 66, 243, 11, 86, 25, ++ 208, 248, 20, 144, 67, 241, 0, 7, 79, 234, 72, 51, 246, 24, 79, 234, ++ 216, 66, 66, 234, 73, 50, 71, 241, 0, 7, 204, 248, 16, 64, 132, 104, ++ 18, 235, 7, 8, 79, 234, 217, 67, 67, 241, 0, 9, 99, 2, 197, 104, 204, ++ 248, 12, 96, 24, 235, 3, 6, 73, 241, 0, 7, 226, 13, 66, 234, 69, 34, ++ 204, 248, 8, 96, 6, 104, 235, 13, 210, 25, 65, 104, 67, 241, 0, 3, 176, ++ 1, 20, 24, 67, 241, 0, 5, 178, 14, 66, 234, 129, 18, 82, 25, 204, 248, ++ 4, 64, 204, 248, 0, 32, 189, 232, 240, 143, 45, 233, 240, 79, 208, 233, ++ 18, 137, 208, 233, 20, 171, 4, 104, 19, 34, 164, 251, 2, 69, 67, 104, ++ 24, 235, 4, 8, 2, 251, 3, 85, 132, 104, 73, 235, 5, 9, 164, 251, 2, ++ 69, 195, 104, 26, 235, 4, 10, 2, 251, 3, 85, 4, 105, 75, 235, 5, 11, ++ 164, 251, 2, 69, 67, 105, 143, 176, 2, 251, 3, 85, 205, 233, 0, 137, ++ 192, 233, 18, 137, 208, 233, 22, 137, 24, 235, 4, 8, 132, 105, 73, 235, ++ 5, 9, 164, 251, 2, 69, 195, 105, 205, 233, 2, 171, 2, 251, 3, 85, 192, ++ 233, 20, 171, 208, 233, 24, 171, 26, 235, 4, 10, 4, 106, 75, 235, 5, ++ 11, 164, 251, 2, 69, 67, 106, 205, 233, 4, 137, 2, 251, 3, 85, 131, ++ 106, 192, 233, 22, 137, 208, 233, 26, 137, 24, 235, 4, 8, 73, 235, 5, ++ 9, 163, 251, 2, 69, 14, 70, 193, 106, 3, 107, 2, 251, 1, 85, 205, 233, ++ 6, 171, 192, 233, 24, 171, 208, 233, 28, 171, 26, 235, 4, 10, 75, 235, ++ 5, 11, 163, 251, 2, 69, 65, 107, 205, 233, 10, 171, 2, 251, 1, 85, 192, ++ 233, 28, 171, 208, 233, 30, 171, 26, 235, 4, 10, 75, 235, 5, 11, 205, ++ 233, 8, 137, 192, 233, 26, 137, 192, 233, 30, 171, 208, 233, 16, 35, ++ 205, 233, 12, 35, 12, 156, 13, 157, 34, 15, 221, 248, 4, 144, 66, 234, ++ 5, 18, 43, 15, 208, 233, 14, 69, 164, 24, 79, 234, 25, 98, 69, 235, ++ 3, 5, 0, 35, 164, 24, 69, 235, 3, 5, 11, 35, 164, 251, 3, 137, 3, 251, ++ 5, 153, 226, 0, 235, 0, 67, 234, 84, 115, 192, 233, 14, 69, 18, 235, ++ 8, 4, 67, 235, 9, 5, 208, 233, 32, 35, 164, 24, 69, 235, 3, 5, 68, 69, ++ 117, 235, 9, 1, 192, 233, 32, 69, 9, 210, 128, 34, 0, 35, 221, 233, ++ 10, 137, 18, 235, 8, 2, 67, 235, 9, 3, 192, 233, 28, 35, 36, 240, 96, ++ 65, 79, 234, 84, 120, 111, 240, 112, 68, 72, 234, 197, 8, 79, 234, 85, ++ 121, 10, 234, 4, 2, 0, 37, 11, 234, 5, 3, 18, 235, 8, 2, 67, 235, 9, ++ 3, 208, 233, 28, 137, 79, 234, 26, 112, 111, 240, 112, 74, 20, 15, 64, ++ 234, 11, 16, 34, 240, 112, 76, 10, 145, 8, 234, 10, 2, 49, 98, 79, 234, ++ 27, 113, 79, 240, 0, 11, 29, 15, 68, 234, 3, 20, 18, 24, 9, 234, 11, ++ 3, 67, 235, 1, 3, 18, 25, 67, 235, 5, 3, 111, 240, 96, 74, 20, 15, 34, ++ 240, 112, 71, 79, 234, 24, 114, 66, 234, 9, 18, 79, 240, 0, 11, 221, ++ 233, 8, 1, 0, 234, 10, 0, 29, 15, 68, 234, 3, 20, 128, 24, 79, 234, ++ 25, 115, 1, 234, 11, 1, 65, 235, 3, 1, 0, 25, 65, 235, 5, 1, 68, 15, ++ 77, 15, 68, 234, 193, 4, 8, 153, 221, 248, 36, 128, 32, 240, 96, 67, ++ 74, 15, 66, 234, 200, 2, 115, 97, 79, 234, 88, 115, 111, 240, 112, 72, ++ 221, 233, 6, 1, 79, 240, 0, 9, 0, 234, 8, 0, 128, 24, 1, 234, 9, 1, ++ 65, 235, 3, 1, 0, 25, 65, 235, 5, 1, 221, 248, 24, 144, 4, 15, 13, 15, ++ 68, 234, 1, 20, 7, 153, 32, 240, 112, 67, 79, 234, 25, 114, 111, 240, ++ 112, 72, 66, 234, 1, 18, 79, 240, 0, 9, 51, 97, 11, 15, 221, 233, 4, ++ 1, 0, 234, 8, 0, 128, 24, 1, 234, 9, 1, 65, 235, 3, 1, 0, 25, 65, 235, ++ 5, 1, 221, 248, 16, 144, 4, 15, 13, 15, 68, 234, 1, 20, 5, 153, 32, ++ 240, 112, 67, 79, 234, 25, 114, 66, 234, 1, 18, 243, 96, 11, 15, 221, ++ 233, 2, 1, 0, 234, 10, 0, 128, 24, 221, 248, 8, 144, 1, 234, 11, 1, ++ 65, 235, 3, 1, 221, 248, 12, 160, 0, 25, 65, 235, 5, 1, 32, 240, 96, ++ 67, 68, 15, 111, 240, 112, 72, 79, 234, 89, 112, 64, 234, 202, 0, 79, ++ 240, 0, 9, 179, 96, 221, 233, 0, 35, 2, 234, 8, 2, 68, 234, 193, 4, ++ 77, 15, 3, 234, 9, 3, 79, 234, 90, 113, 18, 24, 221, 248, 0, 144, 67, ++ 235, 1, 3, 221, 248, 4, 160, 18, 25, 67, 235, 5, 3, 34, 240, 112, 65, ++ 20, 15, 79, 234, 25, 114, 66, 234, 10, 18, 111, 240, 112, 72, 68, 234, ++ 3, 20, 2, 234, 8, 0, 221, 233, 12, 35, 2, 234, 8, 2, 128, 24, 0, 25, ++ 111, 240, 112, 66, 144, 66, 198, 248, 28, 192, 183, 97, 113, 96, 48, ++ 96, 21, 217, 10, 153, 0, 234, 2, 3, 51, 96, 1, 241, 19, 3, 179, 241, ++ 0, 95, 51, 98, 11, 211, 35, 240, 96, 67, 51, 98, 12, 241, 1, 3, 147, ++ 66, 243, 97, 3, 209, 0, 35, 1, 55, 243, 97, 183, 97, 15, 176, 189, 232, ++ 240, 143, 16, 181, 4, 104, 0, 35, 98, 24, 67, 241, 0, 3, 25, 70, 2, ++ 96, 8, 224, 80, 248, 4, 76, 0, 35, 10, 25, 67, 241, 0, 3, 25, 70, 64, ++ 248, 4, 45, 0, 41, 244, 209, 16, 189, 2, 104, 82, 26, 98, 235, 2, 3, ++ 2, 96, 6, 224, 80, 248, 4, 28, 90, 24, 67, 241, 0, 3, 64, 248, 4, 45, ++ 0, 43, 246, 209, 112, 71, 3, 104, 219, 5, 219, 13, 64, 248, 64, 59, ++ 255, 247, 212, 191, 56, 181, 4, 70, 13, 70, 28, 48, 255, 247, 206, 255, ++ 4, 241, 32, 0, 41, 70, 255, 247, 201, 255, 4, 241, 40, 0, 41, 70, 255, ++ 247, 217, 255, 4, 241, 44, 0, 41, 70, 189, 232, 56, 64, 255, 247, 189, ++ 191, 56, 181, 4, 70, 13, 70, 28, 48, 255, 247, 204, 255, 4, 241, 32, ++ 0, 41, 70, 255, 247, 199, 255, 4, 241, 40, 0, 41, 70, 255, 247, 173, ++ 255, 4, 241, 44, 0, 41, 70, 189, 232, 56, 64, 255, 247, 187, 191, 56, ++ 181, 5, 70, 12, 70, 255, 247, 161, 255, 40, 29, 33, 70, 255, 247, 178, ++ 255, 5, 241, 16, 0, 33, 70, 255, 247, 173, 255, 5, 241, 28, 0, 33, 70, ++ 189, 232, 56, 64, 255, 247, 145, 191, 56, 181, 5, 70, 12, 70, 255, 247, ++ 161, 255, 40, 29, 33, 70, 255, 247, 136, 255, 5, 241, 16, 0, 33, 70, ++ 255, 247, 131, 255, 5, 241, 28, 0, 33, 70, 189, 232, 56, 64, 255, 247, ++ 145, 191, 45, 233, 240, 71, 196, 105, 197, 107, 0, 35, 42, 25, 132, ++ 105, 67, 241, 0, 3, 18, 25, 4, 105, 67, 241, 0, 3, 18, 27, 99, 241, ++ 0, 3, 196, 104, 18, 27, 99, 241, 0, 3, 132, 104, 18, 27, 99, 241, 0, ++ 3, 68, 104, 18, 27, 99, 241, 0, 3, 202, 97, 132, 107, 133, 105, 100, ++ 43, 140, 191, 79, 240, 255, 57, 79, 240, 0, 9, 152, 70, 0, 35, 42, 25, ++ 68, 105, 67, 241, 0, 3, 18, 235, 8, 2, 67, 235, 9, 3, 18, 25, 4, 104, ++ 67, 241, 0, 3, 18, 27, 99, 241, 0, 3, 196, 104, 18, 27, 99, 241, 0, ++ 3, 68, 104, 18, 27, 99, 241, 0, 3, 132, 104, 18, 27, 99, 241, 0, 3, ++ 138, 97, 68, 107, 69, 105, 100, 43, 140, 191, 79, 240, 255, 57, 79, ++ 240, 0, 9, 152, 70, 0, 35, 42, 25, 4, 105, 67, 241, 0, 3, 18, 235, 8, ++ 2, 67, 235, 9, 3, 18, 25, 4, 104, 67, 241, 0, 3, 18, 27, 99, 241, 0, ++ 3, 132, 104, 0, 37, 18, 27, 99, 241, 0, 3, 68, 104, 18, 27, 99, 241, ++ 0, 3, 74, 97, 100, 43, 140, 191, 79, 240, 255, 57, 79, 240, 0, 9, 152, ++ 70, 3, 105, 208, 248, 48, 192, 28, 70, 195, 104, 20, 235, 12, 2, 30, ++ 70, 69, 241, 0, 3, 18, 235, 8, 2, 67, 235, 9, 3, 18, 25, 67, 235, 5, ++ 3, 132, 104, 146, 25, 67, 235, 5, 3, 146, 25, 67, 235, 5, 3, 18, 25, ++ 196, 105, 67, 241, 0, 3, 18, 27, 99, 241, 0, 3, 132, 105, 18, 27, 99, ++ 241, 0, 3, 4, 104, 18, 27, 99, 241, 0, 3, 10, 97, 100, 43, 140, 191, ++ 79, 240, 255, 57, 169, 70, 152, 70, 195, 104, 208, 248, 44, 192, 28, ++ 70, 131, 104, 20, 235, 12, 2, 30, 70, 69, 241, 0, 3, 18, 235, 8, 2, ++ 67, 235, 9, 3, 18, 25, 67, 235, 5, 3, 68, 104, 146, 25, 67, 235, 5, ++ 3, 146, 25, 67, 235, 5, 3, 18, 25, 132, 105, 67, 241, 0, 3, 18, 27, ++ 99, 241, 0, 3, 68, 105, 18, 27, 99, 241, 0, 3, 202, 96, 100, 43, 140, ++ 191, 79, 240, 255, 57, 169, 70, 152, 70, 131, 104, 208, 248, 40, 192, ++ 28, 70, 67, 104, 20, 235, 12, 2, 30, 70, 69, 241, 0, 3, 18, 235, 8, ++ 2, 67, 235, 9, 3, 18, 25, 67, 235, 5, 3, 4, 104, 146, 25, 67, 235, 5, ++ 3, 146, 25, 67, 235, 5, 3, 18, 25, 68, 105, 67, 241, 0, 3, 18, 27, 99, ++ 241, 0, 3, 4, 105, 18, 27, 99, 241, 0, 3, 138, 96, 100, 43, 140, 191, ++ 79, 240, 255, 57, 169, 70, 152, 70, 67, 104, 208, 248, 36, 160, 208, ++ 248, 8, 192, 28, 70, 3, 104, 28, 235, 10, 2, 30, 70, 69, 241, 0, 3, ++ 18, 235, 8, 2, 67, 235, 9, 3, 18, 25, 67, 235, 5, 3, 18, 25, 67, 235, ++ 5, 3, 18, 25, 67, 235, 5, 3, 146, 25, 196, 105, 67, 235, 5, 3, 146, ++ 25, 67, 235, 5, 3, 18, 27, 99, 241, 0, 3, 132, 105, 18, 27, 99, 241, ++ 0, 3, 74, 96, 7, 106, 198, 105, 100, 43, 140, 191, 79, 240, 255, 57, ++ 169, 70, 152, 70, 3, 104, 242, 25, 28, 70, 69, 241, 0, 3, 18, 235, 8, ++ 2, 67, 235, 9, 3, 18, 25, 67, 235, 5, 3, 18, 25, 67, 235, 5, 3, 18, ++ 25, 4, 105, 67, 235, 5, 3, 18, 27, 99, 241, 0, 3, 196, 104, 18, 27, ++ 99, 241, 0, 3, 132, 104, 64, 105, 18, 27, 99, 241, 0, 3, 18, 26, 99, ++ 241, 0, 3, 100, 43, 10, 96, 8, 70, 4, 217, 89, 66, 189, 232, 240, 71, ++ 255, 247, 161, 190, 25, 70, 189, 232, 240, 71, 255, 247, 135, 190, 1, ++ 40, 9, 208, 2, 40, 9, 208, 3, 40, 9, 208, 5, 75, 4, 40, 12, 191, 24, ++ 70, 0, 32, 112, 71, 3, 72, 112, 71, 3, 72, 112, 71, 3, 72, 112, 71, ++ 192, 96, 4, 0, 16, 96, 4, 0, 28, 98, 4, 0, 40, 95, 4, 0, 8, 181, 255, ++ 247, 227, 255, 0, 177, 0, 122, 8, 189, 45, 233, 240, 79, 1, 57, 80, ++ 248, 33, 48, 4, 70, 133, 176, 152, 70, 79, 240, 0, 9, 14, 70, 32, 32, ++ 69, 224, 16, 185, 1, 57, 31, 32, 0, 224, 1, 56, 142, 66, 14, 217, 0, ++ 37, 84, 248, 33, 48, 205, 248, 8, 144, 3, 149, 221, 233, 2, 137, 24, ++ 235, 3, 8, 73, 241, 0, 9, 68, 248, 33, 128, 14, 70, 26, 77, 0, 39, 85, ++ 248, 32, 48, 1, 151, 0, 147, 221, 233, 0, 171, 8, 234, 10, 2, 9, 234, ++ 11, 3, 82, 234, 3, 11, 32, 208, 16, 185, 1, 57, 31, 32, 4, 224, 1, 56, ++ 2, 209, 1, 57, 31, 32, 0, 224, 1, 56, 84, 248, 33, 32, 85, 248, 32, ++ 48, 0, 157, 26, 66, 20, 191, 79, 240, 8, 10, 79, 240, 3, 10, 170, 251, ++ 5, 35, 79, 240, 0, 11, 5, 251, 11, 51, 24, 235, 2, 8, 73, 235, 3, 9, ++ 68, 248, 38, 128, 0, 46, 183, 209, 5, 176, 189, 232, 240, 143, 248, ++ 26, 4, 0, 45, 233, 240, 67, 5, 70, 8, 106, 12, 70, 162, 251, 0, 1, 32, ++ 240, 96, 73, 22, 70, 197, 248, 32, 144, 66, 15, 231, 105, 66, 234, 193, ++ 2, 75, 15, 16, 70, 25, 70, 230, 251, 7, 1, 32, 240, 112, 72, 197, 248, ++ 28, 128, 2, 15, 167, 105, 66, 234, 1, 18, 11, 15, 16, 70, 25, 70, 230, ++ 251, 7, 1, 32, 240, 112, 76, 197, 248, 24, 192, 2, 15, 103, 105, 66, ++ 234, 1, 18, 11, 15, 16, 70, 25, 70, 230, 251, 7, 1, 32, 240, 96, 67, ++ 107, 97, 66, 15, 39, 105, 66, 234, 193, 2, 75, 15, 16, 70, 25, 70, 230, ++ 251, 7, 1, 32, 240, 112, 67, 43, 97, 2, 15, 231, 104, 66, 234, 1, 18, ++ 11, 15, 16, 70, 25, 70, 230, 251, 7, 1, 32, 240, 112, 67, 235, 96, 2, ++ 15, 167, 104, 66, 234, 1, 18, 11, 15, 16, 70, 25, 70, 230, 251, 7, 1, ++ 32, 240, 96, 67, 171, 96, 66, 15, 103, 104, 66, 234, 193, 2, 75, 15, ++ 16, 70, 25, 70, 230, 251, 7, 1, 32, 240, 112, 67, 107, 96, 36, 104, ++ 2, 15, 11, 15, 66, 234, 1, 18, 230, 251, 4, 35, 34, 240, 112, 65, 18, ++ 15, 82, 234, 3, 18, 41, 96, 19, 208, 19, 35, 3, 251, 2, 146, 178, 241, ++ 0, 95, 42, 98, 12, 211, 8, 241, 1, 3, 179, 241, 128, 95, 34, 240, 96, ++ 66, 235, 97, 8, 191, 12, 241, 1, 3, 42, 98, 8, 191, 171, 97, 189, 232, ++ 240, 131, 16, 181, 180, 176, 43, 170, 36, 35, 4, 70, 8, 70, 2, 33, 254, ++ 247, 192, 251, 43, 168, 254, 247, 110, 255, 104, 70, 43, 169, 254, 247, ++ 205, 255, 34, 169, 104, 70, 255, 247, 107, 251, 34, 168, 254, 247, 155, ++ 255, 32, 70, 2, 33, 34, 170, 36, 35, 254, 247, 73, 251, 52, 176, 16, ++ 189, 48, 181, 191, 176, 36, 35, 4, 70, 21, 70, 8, 70, 44, 170, 2, 33, ++ 254, 247, 160, 251, 44, 168, 254, 247, 78, 255, 36, 35, 2, 33, 53, 170, ++ 40, 70, 254, 247, 151, 251, 53, 168, 254, 247, 69, 255, 53, 170, 104, ++ 70, 44, 169, 255, 247, 141, 248, 35, 169, 104, 70, 255, 247, 65, 251, ++ 35, 168, 254, 247, 113, 255, 32, 70, 2, 33, 35, 170, 36, 35, 254, 247, ++ 31, 251, 63, 176, 48, 189, 45, 233, 240, 65, 180, 176, 136, 70, 1, 170, ++ 2, 33, 136, 35, 254, 247, 119, 251, 17, 153, 16, 156, 75, 10, 202, 5, ++ 34, 153, 52, 174, 82, 24, 67, 241, 0, 3, 24, 70, 33, 155, 0, 33, 192, ++ 24, 65, 241, 0, 1, 51, 146, 226, 5, 99, 10, 128, 24, 32, 156, 65, 235, ++ 3, 1, 50, 144, 0, 35, 8, 25, 15, 156, 67, 241, 0, 1, 226, 5, 99, 10, ++ 128, 24, 31, 156, 65, 235, 3, 1, 49, 144, 0, 35, 8, 25, 14, 156, 67, ++ 241, 0, 1, 226, 5, 99, 10, 128, 24, 30, 156, 65, 235, 3, 1, 48, 144, ++ 0, 35, 8, 25, 13, 156, 67, 241, 0, 1, 226, 5, 99, 10, 128, 24, 29, 156, ++ 65, 235, 3, 1, 47, 144, 0, 35, 8, 25, 12, 156, 67, 241, 0, 1, 226, 5, ++ 99, 10, 128, 24, 28, 156, 65, 235, 3, 1, 46, 144, 0, 35, 8, 25, 11, ++ 156, 67, 241, 0, 1, 226, 5, 99, 10, 128, 24, 27, 156, 65, 235, 3, 1, ++ 45, 144, 0, 35, 8, 25, 10, 156, 67, 241, 0, 1, 226, 5, 99, 10, 128, ++ 24, 26, 156, 65, 235, 3, 1, 44, 144, 0, 35, 8, 25, 9, 156, 67, 241, ++ 0, 1, 226, 5, 99, 10, 128, 24, 25, 156, 65, 235, 3, 1, 43, 144, 0, 35, ++ 8, 25, 8, 156, 67, 241, 0, 1, 226, 5, 99, 10, 128, 24, 24, 156, 65, ++ 235, 3, 1, 42, 144, 0, 35, 8, 25, 7, 156, 67, 241, 0, 1, 226, 5, 99, ++ 10, 128, 24, 23, 156, 65, 235, 3, 1, 41, 144, 0, 35, 8, 25, 6, 156, ++ 67, 241, 0, 1, 226, 5, 99, 10, 128, 24, 40, 144, 22, 156, 65, 235, 3, ++ 1, 0, 35, 8, 25, 5, 156, 67, 241, 0, 1, 226, 5, 99, 10, 128, 24, 21, ++ 156, 65, 235, 3, 1, 39, 144, 0, 35, 8, 25, 4, 156, 67, 241, 0, 1, 226, ++ 5, 99, 10, 128, 24, 20, 156, 65, 235, 3, 1, 38, 144, 0, 35, 8, 25, 3, ++ 156, 67, 241, 0, 1, 226, 5, 99, 10, 128, 24, 19, 156, 65, 235, 3, 1, ++ 37, 144, 0, 35, 8, 25, 2, 156, 67, 241, 0, 1, 226, 5, 99, 10, 128, 24, ++ 65, 235, 3, 1, 18, 155, 0, 37, 204, 24, 1, 153, 69, 241, 0, 5, 202, ++ 5, 75, 10, 164, 24, 69, 235, 3, 5, 70, 248, 68, 77, 233, 5, 36, 144, ++ 65, 234, 84, 33, 48, 70, 255, 247, 47, 252, 64, 70, 2, 33, 50, 70, 68, ++ 35, 254, 247, 61, 250, 52, 176, 189, 232, 240, 129, 45, 233, 240, 79, ++ 179, 176, 96, 35, 13, 145, 14, 170, 2, 33, 254, 247, 148, 250, 16, 154, ++ 0, 39, 25, 158, 17, 152, 37, 153, 141, 232, 132, 0, 6, 144, 7, 151, ++ 114, 24, 221, 233, 6, 69, 71, 241, 0, 3, 18, 25, 221, 248, 56, 128, ++ 221, 233, 0, 1, 67, 235, 5, 3, 18, 24, 185, 70, 67, 235, 1, 3, 178, ++ 235, 8, 2, 99, 235, 9, 3, 221, 248, 144, 224, 49, 146, 15, 154, 24, ++ 152, 100, 43, 140, 191, 79, 240, 255, 53, 61, 70, 2, 146, 28, 70, 24, ++ 235, 14, 2, 71, 241, 0, 3, 18, 25, 3, 151, 67, 235, 5, 3, 18, 24, 221, ++ 233, 2, 69, 67, 235, 7, 3, 18, 25, 67, 235, 5, 3, 221, 248, 140, 224, ++ 221, 233, 6, 69, 18, 27, 99, 235, 5, 3, 146, 27, 99, 235, 7, 3, 221, ++ 248, 92, 160, 100, 43, 140, 191, 79, 240, 255, 53, 61, 70, 28, 70, 48, ++ 146, 24, 235, 14, 2, 71, 241, 0, 3, 18, 25, 67, 235, 5, 3, 18, 235, ++ 10, 2, 67, 235, 7, 3, 57, 70, 18, 26, 99, 235, 1, 3, 221, 233, 0, 69, ++ 18, 27, 99, 235, 5, 3, 47, 146, 22, 154, 100, 43, 140, 191, 79, 240, ++ 255, 53, 61, 70, 28, 70, 8, 146, 221, 233, 6, 35, 146, 25, 34, 158, ++ 67, 235, 7, 3, 205, 233, 4, 35, 221, 233, 0, 35, 146, 25, 9, 151, 67, ++ 241, 0, 3, 18, 25, 67, 235, 5, 3, 221, 233, 8, 69, 18, 25, 187, 70, ++ 67, 235, 5, 3, 221, 233, 4, 103, 146, 25, 67, 235, 7, 3, 178, 235, 8, ++ 2, 99, 235, 9, 3, 221, 233, 2, 69, 18, 27, 99, 235, 5, 3, 178, 235, ++ 10, 2, 99, 235, 11, 3, 46, 146, 100, 43, 140, 191, 79, 240, 255, 53, ++ 77, 70, 28, 70, 221, 233, 0, 35, 146, 24, 67, 235, 3, 3, 18, 25, 67, ++ 235, 5, 3, 18, 24, 221, 233, 2, 69, 21, 158, 67, 235, 9, 3, 18, 25, ++ 33, 156, 10, 150, 205, 248, 44, 144, 67, 235, 5, 3, 18, 25, 221, 233, ++ 10, 103, 67, 241, 0, 3, 146, 25, 221, 233, 4, 69, 67, 235, 7, 3, 18, ++ 25, 67, 235, 5, 3, 221, 233, 8, 103, 146, 27, 99, 235, 7, 3, 178, 235, ++ 8, 2, 99, 235, 9, 3, 178, 235, 8, 2, 99, 235, 9, 3, 100, 43, 140, 191, ++ 79, 240, 255, 53, 77, 70, 28, 70, 45, 146, 221, 233, 0, 35, 18, 235, ++ 8, 2, 67, 235, 9, 3, 18, 25, 67, 235, 5, 3, 18, 24, 221, 233, 2, 69, ++ 67, 235, 9, 3, 18, 25, 20, 159, 67, 235, 5, 3, 32, 153, 18, 25, 67, ++ 235, 5, 3, 18, 235, 10, 2, 4, 151, 205, 248, 20, 144, 67, 235, 9, 3, ++ 82, 24, 221, 233, 4, 103, 67, 241, 0, 3, 146, 25, 67, 235, 7, 3, 221, ++ 233, 10, 1, 18, 26, 99, 235, 1, 3, 100, 43, 140, 191, 79, 240, 255, ++ 53, 77, 70, 28, 70, 44, 146, 24, 235, 8, 2, 73, 235, 9, 3, 18, 25, 67, ++ 235, 5, 3, 221, 233, 2, 69, 18, 25, 67, 235, 5, 3, 18, 235, 10, 2, 221, ++ 233, 8, 1, 67, 235, 9, 3, 18, 24, 67, 235, 1, 3, 31, 153, 19, 158, 82, ++ 24, 67, 241, 0, 3, 146, 25, 67, 235, 9, 3, 221, 233, 4, 69, 18, 27, ++ 99, 235, 5, 3, 100, 43, 140, 191, 79, 240, 255, 53, 77, 70, 28, 70, ++ 43, 146, 221, 233, 8, 35, 18, 235, 8, 2, 67, 235, 9, 3, 18, 25, 221, ++ 233, 10, 1, 67, 235, 5, 3, 18, 24, 67, 235, 1, 3, 30, 153, 221, 248, ++ 72, 160, 82, 24, 67, 241, 0, 3, 18, 235, 10, 2, 67, 235, 9, 3, 79, 70, ++ 146, 27, 99, 235, 7, 3, 221, 233, 10, 1, 100, 43, 140, 191, 79, 240, ++ 255, 53, 77, 70, 28, 70, 42, 146, 221, 233, 6, 35, 18, 24, 67, 235, ++ 1, 3, 18, 25, 29, 153, 67, 235, 5, 3, 221, 233, 4, 69, 18, 25, 67, 235, ++ 5, 3, 82, 24, 67, 241, 0, 3, 178, 235, 10, 2, 99, 235, 11, 3, 41, 146, ++ 100, 43, 140, 191, 79, 240, 255, 53, 77, 70, 221, 233, 4, 1, 28, 70, ++ 221, 233, 0, 35, 18, 24, 67, 235, 1, 3, 18, 25, 28, 153, 67, 235, 5, ++ 3, 146, 25, 67, 235, 9, 3, 82, 24, 67, 241, 0, 3, 221, 233, 6, 69, 18, ++ 27, 99, 235, 5, 3, 100, 43, 140, 191, 79, 240, 255, 53, 77, 70, 28, ++ 70, 40, 146, 221, 233, 2, 35, 146, 25, 67, 235, 9, 3, 27, 153, 18, 25, ++ 67, 235, 5, 3, 18, 235, 10, 2, 67, 235, 9, 3, 82, 24, 67, 241, 0, 3, ++ 221, 233, 0, 103, 146, 27, 99, 235, 7, 3, 100, 43, 140, 191, 79, 240, ++ 255, 53, 77, 70, 221, 233, 6, 1, 16, 235, 8, 0, 65, 235, 9, 1, 26, 156, ++ 192, 24, 65, 235, 5, 1, 16, 235, 10, 0, 65, 235, 9, 1, 39, 146, 2, 25, ++ 65, 241, 0, 3, 221, 233, 2, 1, 18, 26, 99, 235, 1, 3, 100, 43, 50, 168, ++ 64, 248, 48, 45, 11, 217, 89, 66, 255, 247, 123, 250, 13, 152, 2, 33, ++ 38, 170, 48, 35, 254, 247, 107, 248, 51, 176, 189, 232, 240, 143, 25, ++ 70, 255, 247, 88, 250, 242, 231, 16, 181, 196, 176, 51, 170, 36, 35, ++ 4, 70, 8, 70, 2, 33, 254, 247, 190, 248, 51, 168, 254, 247, 108, 252, ++ 104, 70, 51, 169, 254, 247, 203, 252, 104, 70, 35, 169, 254, 247, 76, ++ 255, 35, 168, 60, 169, 255, 247, 151, 250, 32, 70, 2, 33, 60, 170, 32, ++ 35, 254, 247, 70, 248, 68, 176, 16, 189, 48, 181, 205, 176, 36, 35, ++ 4, 70, 21, 70, 8, 70, 50, 170, 2, 33, 254, 247, 157, 248, 50, 168, 254, ++ 247, 75, 252, 36, 35, 2, 33, 59, 170, 40, 70, 254, 247, 148, 248, 59, ++ 168, 254, 247, 66, 252, 59, 170, 104, 70, 50, 169, 254, 247, 138, 253, ++ 104, 70, 34, 169, 254, 247, 33, 255, 34, 168, 68, 169, 255, 247, 108, ++ 250, 32, 70, 2, 33, 68, 170, 32, 35, 254, 247, 27, 248, 77, 176, 48, ++ 189, 56, 181, 5, 70, 28, 70, 24, 70, 0, 35, 254, 247, 0, 250, 32, 70, ++ 41, 70, 189, 232, 56, 64, 255, 247, 239, 188, 56, 181, 5, 70, 28, 70, ++ 24, 70, 0, 35, 254, 247, 243, 249, 32, 70, 41, 70, 189, 232, 56, 64, ++ 255, 247, 197, 189, 240, 181, 153, 176, 22, 70, 48, 35, 4, 70, 15, 70, ++ 8, 70, 12, 170, 2, 33, 254, 247, 87, 248, 4, 46, 12, 157, 1, 209, 173, ++ 15, 0, 224, 109, 15, 32, 70, 57, 70, 50, 70, 0, 35, 254, 247, 19, 250, ++ 125, 177, 106, 70, 48, 35, 2, 33, 32, 70, 254, 247, 68, 248, 104, 70, ++ 41, 70, 255, 247, 208, 249, 32, 70, 2, 33, 106, 70, 48, 35, 253, 247, ++ 215, 255, 25, 176, 240, 189, 240, 181, 145, 176, 22, 70, 32, 35, 4, ++ 70, 15, 70, 8, 70, 8, 170, 2, 33, 254, 247, 45, 248, 4, 46, 8, 157, ++ 1, 209, 173, 15, 0, 224, 109, 15, 32, 70, 57, 70, 50, 70, 0, 35, 254, ++ 247, 233, 249, 125, 177, 106, 70, 32, 35, 2, 33, 32, 70, 254, 247, 26, ++ 248, 104, 70, 41, 70, 255, 247, 212, 249, 32, 70, 2, 33, 106, 70, 32, ++ 35, 253, 247, 173, 255, 17, 176, 240, 189, 48, 181, 0, 35, 139, 176, ++ 4, 70, 254, 247, 208, 249, 36, 35, 2, 33, 32, 70, 1, 170, 254, 247, ++ 2, 248, 1, 155, 38, 37, 93, 67, 0, 35, 1, 147, 2, 155, 0, 43, 3, 218, ++ 3, 241, 0, 67, 2, 147, 19, 53, 32, 70, 33, 33, 253, 247, 186, 255, 32, ++ 70, 33, 70, 42, 70, 0, 35, 254, 247, 242, 248, 11, 176, 48, 189, 48, ++ 181, 0, 35, 147, 176, 4, 70, 254, 247, 172, 249, 2, 33, 68, 35, 32, ++ 70, 1, 170, 253, 247, 222, 255, 1, 157, 109, 10, 9, 208, 32, 70, 23, ++ 33, 253, 247, 159, 255, 32, 70, 33, 70, 42, 70, 0, 35, 254, 247, 215, ++ 248, 19, 176, 48, 189, 45, 233, 240, 65, 4, 70, 14, 70, 8, 70, 17, 70, ++ 23, 70, 254, 247, 11, 248, 0, 35, 5, 70, 49, 70, 32, 70, 58, 70, 254, ++ 247, 179, 248, 0, 45, 12, 218, 32, 70, 1, 33, 253, 247, 129, 255, 32, ++ 70, 33, 70, 111, 240, 18, 2, 0, 35, 189, 232, 240, 65, 254, 247, 182, ++ 184, 189, 232, 240, 129, 45, 233, 240, 65, 4, 70, 14, 70, 8, 70, 17, ++ 70, 23, 70, 253, 247, 234, 255, 0, 35, 5, 70, 49, 70, 32, 70, 58, 70, ++ 254, 247, 146, 248, 0, 45, 12, 218, 32, 70, 23, 33, 253, 247, 96, 255, ++ 32, 70, 33, 70, 79, 240, 255, 50, 0, 35, 189, 232, 240, 65, 254, 247, ++ 149, 184, 189, 232, 240, 129, 240, 181, 4, 70, 141, 176, 14, 70, 8, ++ 70, 17, 70, 23, 70, 253, 247, 201, 255, 0, 35, 5, 70, 49, 70, 32, 70, ++ 58, 70, 254, 247, 113, 248, 0, 45, 15, 218, 106, 70, 48, 35, 2, 33, ++ 32, 70, 253, 247, 117, 255, 104, 70, 1, 33, 255, 247, 24, 249, 32, 70, ++ 2, 33, 106, 70, 48, 35, 253, 247, 8, 255, 13, 176, 240, 189, 240, 181, ++ 4, 70, 137, 176, 14, 70, 8, 70, 17, 70, 23, 70, 253, 247, 165, 255, ++ 0, 35, 5, 70, 49, 70, 32, 70, 58, 70, 254, 247, 77, 248, 0, 45, 15, ++ 218, 106, 70, 32, 35, 2, 33, 32, 70, 253, 247, 81, 255, 104, 70, 1, ++ 33, 255, 247, 32, 249, 32, 70, 2, 33, 106, 70, 32, 35, 253, 247, 228, ++ 254, 9, 176, 240, 189, 112, 181, 0, 35, 4, 70, 21, 70, 254, 247, 26, ++ 248, 1, 33, 32, 70, 253, 247, 3, 255, 32, 70, 41, 70, 253, 247, 124, ++ 255, 0, 40, 7, 218, 32, 70, 33, 70, 19, 34, 0, 35, 189, 232, 112, 64, ++ 254, 247, 51, 184, 112, 189, 112, 181, 0, 35, 4, 70, 21, 70, 254, 247, ++ 1, 248, 23, 33, 32, 70, 253, 247, 234, 254, 32, 70, 41, 70, 253, 247, ++ 99, 255, 0, 40, 7, 218, 32, 70, 33, 70, 1, 34, 0, 35, 189, 232, 112, ++ 64, 254, 247, 26, 184, 112, 189, 48, 181, 0, 35, 21, 70, 141, 176, 4, ++ 70, 253, 247, 231, 255, 32, 70, 41, 70, 253, 247, 77, 255, 0, 40, 15, ++ 218, 106, 70, 48, 35, 2, 33, 32, 70, 253, 247, 0, 255, 104, 70, 1, 33, ++ 255, 247, 140, 248, 32, 70, 2, 33, 106, 70, 48, 35, 253, 247, 147, 254, ++ 13, 176, 48, 189, 48, 181, 0, 35, 21, 70, 137, 176, 4, 70, 253, 247, ++ 200, 255, 32, 70, 41, 70, 253, 247, 46, 255, 0, 40, 15, 218, 106, 70, ++ 32, 35, 2, 33, 32, 70, 253, 247, 225, 254, 104, 70, 1, 33, 255, 247, ++ 155, 248, 32, 70, 2, 33, 106, 70, 32, 35, 253, 247, 116, 254, 9, 176, ++ 48, 189, 56, 181, 5, 70, 20, 70, 16, 70, 0, 34, 254, 247, 179, 248, ++ 32, 70, 41, 70, 189, 232, 56, 64, 255, 247, 72, 187, 56, 181, 5, 70, ++ 20, 70, 16, 70, 0, 34, 254, 247, 166, 248, 32, 70, 41, 70, 189, 232, ++ 56, 64, 255, 247, 30, 188, 45, 233, 240, 65, 4, 70, 21, 70, 14, 70, ++ 31, 70, 254, 247, 152, 248, 32, 70, 33, 70, 50, 70, 43, 70, 254, 247, ++ 56, 248, 32, 70, 33, 70, 58, 70, 43, 70, 253, 247, 130, 255, 32, 70, ++ 33, 70, 50, 70, 43, 70, 253, 247, 149, 255, 32, 70, 33, 70, 50, 70, ++ 43, 70, 253, 247, 143, 255, 32, 70, 33, 70, 50, 70, 43, 70, 189, 232, ++ 240, 65, 253, 247, 135, 191, 45, 233, 240, 65, 134, 176, 7, 70, 14, ++ 70, 144, 70, 28, 70, 255, 247, 193, 249, 5, 70, 0, 46, 63, 208, 184, ++ 241, 0, 15, 62, 208, 0, 44, 63, 208, 0, 40, 60, 208, 48, 70, 65, 70, ++ 34, 70, 107, 104, 253, 247, 52, 253, 6, 70, 0, 40, 51, 208, 1, 33, 0, ++ 34, 8, 35, 253, 247, 78, 253, 1, 33, 4, 70, 0, 34, 12, 35, 48, 70, 5, ++ 151, 253, 247, 70, 253, 4, 144, 32, 70, 1, 148, 253, 247, 146, 254, ++ 2, 33, 234, 106, 43, 122, 253, 247, 60, 253, 2, 144, 32, 70, 253, 247, ++ 137, 254, 2, 33, 42, 107, 43, 122, 253, 247, 51, 253, 6, 173, 3, 144, ++ 85, 248, 8, 13, 1, 33, 1, 170, 12, 35, 253, 247, 235, 253, 32, 70, 1, ++ 33, 42, 70, 8, 35, 253, 247, 229, 253, 4, 224, 52, 70, 2, 224, 68, 70, ++ 0, 224, 4, 70, 32, 70, 6, 176, 189, 232, 240, 129, 7, 181, 8, 35, 1, ++ 33, 106, 70, 253, 247, 56, 254, 1, 152, 14, 189, 45, 233, 240, 67, 6, ++ 70, 133, 176, 24, 70, 29, 70, 136, 70, 23, 70, 255, 247, 238, 255, 255, ++ 247, 97, 249, 4, 70, 40, 70, 253, 247, 83, 254, 129, 70, 40, 70, 255, ++ 247, 228, 255, 255, 247, 113, 249, 1, 33, 67, 0, 0, 34, 72, 70, 253, ++ 247, 246, 252, 0, 144, 40, 70, 253, 247, 67, 254, 129, 70, 40, 70, 255, ++ 247, 212, 255, 255, 247, 97, 249, 1, 33, 3, 70, 0, 34, 72, 70, 253, ++ 247, 230, 252, 1, 144, 40, 70, 253, 247, 51, 254, 129, 70, 40, 70, 255, ++ 247, 196, 255, 255, 247, 81, 249, 1, 33, 3, 70, 0, 34, 72, 70, 253, ++ 247, 214, 252, 2, 144, 40, 70, 253, 247, 35, 254, 129, 70, 40, 70, 255, ++ 247, 180, 255, 255, 247, 65, 249, 1, 33, 3, 70, 0, 34, 72, 70, 253, ++ 247, 198, 252, 35, 105, 3, 144, 49, 70, 1, 152, 0, 154, 152, 71, 35, ++ 105, 3, 152, 57, 70, 0, 154, 152, 71, 3, 152, 35, 105, 1, 70, 0, 154, ++ 152, 71, 1, 152, 163, 105, 1, 70, 3, 154, 152, 71, 1, 153, 99, 105, ++ 2, 152, 10, 70, 152, 71, 1, 152, 99, 105, 1, 70, 2, 154, 152, 71, 229, ++ 104, 2, 152, 57, 70, 66, 70, 0, 155, 168, 71, 2, 153, 99, 105, 56, 70, ++ 10, 70, 152, 71, 35, 105, 2, 152, 65, 70, 0, 154, 152, 71, 35, 105, ++ 3, 152, 2, 153, 0, 154, 152, 71, 2, 152, 229, 104, 1, 70, 50, 70, 0, ++ 155, 168, 71, 2, 152, 227, 105, 1, 70, 4, 34, 152, 71, 35, 105, 48, ++ 70, 1, 153, 0, 154, 152, 71, 163, 105, 48, 70, 49, 70, 2, 154, 152, ++ 71, 163, 105, 48, 70, 49, 70, 2, 154, 152, 71, 2, 152, 163, 105, 1, ++ 70, 50, 70, 152, 71, 1, 152, 229, 104, 1, 70, 2, 154, 0, 155, 168, 71, ++ 3, 152, 227, 105, 1, 70, 8, 34, 152, 71, 163, 105, 4, 172, 84, 248, ++ 4, 45, 1, 153, 64, 70, 152, 71, 32, 70, 253, 247, 177, 253, 2, 168, ++ 253, 247, 174, 253, 1, 168, 253, 247, 171, 253, 104, 70, 253, 247, 168, ++ 253, 5, 176, 189, 232, 240, 131, 45, 233, 255, 71, 13, 158, 5, 70, 48, ++ 70, 23, 70, 136, 70, 153, 70, 255, 247, 46, 255, 255, 247, 161, 248, ++ 4, 70, 48, 70, 253, 247, 147, 253, 130, 70, 48, 70, 255, 247, 36, 255, ++ 255, 247, 177, 248, 1, 33, 67, 0, 0, 34, 80, 70, 253, 247, 54, 252, ++ 0, 144, 48, 70, 253, 247, 131, 253, 130, 70, 48, 70, 255, 247, 20, 255, ++ 255, 247, 161, 248, 1, 33, 3, 70, 0, 34, 80, 70, 253, 247, 38, 252, ++ 1, 144, 48, 70, 253, 247, 115, 253, 130, 70, 48, 70, 255, 247, 4, 255, ++ 255, 247, 145, 248, 1, 33, 3, 70, 0, 34, 80, 70, 253, 247, 22, 252, ++ 2, 144, 48, 70, 253, 247, 99, 253, 130, 70, 48, 70, 255, 247, 244, 254, ++ 255, 247, 129, 248, 1, 33, 3, 70, 0, 34, 80, 70, 253, 247, 6, 252, 35, ++ 105, 0, 154, 3, 144, 57, 70, 2, 152, 152, 71, 2, 153, 1, 152, 253, 247, ++ 151, 253, 1, 152, 230, 104, 1, 70, 58, 70, 0, 155, 176, 71, 1, 152, ++ 230, 104, 1, 70, 12, 154, 0, 155, 176, 71, 1, 152, 163, 105, 1, 70, ++ 66, 70, 152, 71, 2, 152, 230, 104, 1, 70, 74, 70, 0, 155, 176, 71, 2, ++ 152, 163, 105, 1, 70, 42, 70, 152, 71, 230, 104, 56, 70, 57, 70, 2, ++ 154, 0, 155, 176, 71, 35, 105, 3, 152, 2, 153, 0, 154, 152, 71, 2, 152, ++ 230, 104, 1, 70, 3, 154, 0, 155, 176, 71, 3, 152, 42, 70, 1, 70, 0, ++ 155, 230, 104, 176, 71, 35, 105, 40, 70, 1, 153, 0, 154, 152, 71, 163, ++ 105, 40, 70, 41, 70, 3, 154, 152, 71, 163, 105, 40, 70, 41, 70, 3, 154, ++ 152, 71, 163, 105, 40, 70, 41, 70, 2, 154, 152, 71, 3, 152, 163, 105, ++ 1, 70, 42, 70, 152, 71, 3, 152, 229, 104, 1, 70, 1, 154, 0, 155, 168, ++ 71, 2, 152, 66, 70, 1, 70, 0, 155, 229, 104, 168, 71, 163, 105, 3, 153, ++ 2, 154, 64, 70, 152, 71, 3, 168, 253, 247, 239, 252, 2, 168, 253, 247, ++ 236, 252, 1, 168, 253, 247, 233, 252, 104, 70, 253, 247, 230, 252, 189, ++ 232, 255, 135, 112, 181, 14, 70, 21, 70, 255, 247, 114, 254, 254, 247, ++ 229, 255, 4, 70, 56, 185, 40, 70, 1, 33, 34, 70, 35, 70, 253, 247, 67, ++ 252, 32, 70, 112, 189, 1, 62, 6, 46, 71, 216, 223, 232, 6, 240, 4, 8, ++ 12, 22, 43, 51, 60, 0, 40, 70, 1, 33, 98, 106, 37, 224, 40, 70, 1, 33, ++ 162, 106, 33, 224, 53, 177, 1, 33, 40, 70, 4, 241, 9, 2, 11, 70, 253, ++ 247, 40, 252, 96, 122, 112, 189, 141, 177, 67, 107, 1, 33, 0, 43, 40, ++ 70, 2, 221, 0, 34, 19, 70, 1, 224, 98, 106, 35, 122, 253, 247, 25, 252, ++ 40, 70, 41, 70, 98, 107, 0, 35, 253, 247, 124, 253, 96, 107, 112, 189, ++ 162, 107, 40, 70, 1, 33, 35, 122, 253, 247, 11, 252, 1, 32, 112, 189, ++ 45, 177, 2, 33, 40, 70, 34, 29, 11, 70, 253, 247, 2, 252, 96, 104, 112, ++ 189, 53, 177, 1, 33, 40, 70, 4, 241, 8, 2, 11, 70, 253, 247, 248, 251, ++ 32, 122, 112, 189, 1, 32, 112, 189, 45, 233, 240, 67, 193, 176, 23, ++ 70, 4, 70, 136, 70, 255, 247, 17, 254, 254, 247, 132, 255, 6, 106, 32, ++ 70, 53, 104, 253, 247, 117, 252, 129, 70, 32, 70, 255, 247, 6, 254, ++ 254, 247, 147, 255, 1, 33, 3, 70, 0, 34, 72, 70, 253, 247, 24, 251, ++ 62, 144, 32, 70, 253, 247, 101, 252, 129, 70, 32, 70, 255, 247, 246, ++ 253, 254, 247, 131, 255, 1, 33, 3, 70, 0, 34, 72, 70, 253, 247, 8, 251, ++ 1, 33, 2, 70, 63, 144, 32, 70, 255, 247, 113, 255, 56, 70, 63, 153, ++ 62, 154, 253, 247, 53, 254, 2, 33, 35, 170, 36, 35, 56, 70, 253, 247, ++ 27, 252, 35, 168, 253, 247, 201, 255, 2, 33, 53, 170, 36, 35, 62, 152, ++ 253, 247, 18, 252, 53, 168, 253, 247, 192, 255, 44, 168, 35, 169, 36, ++ 34, 250, 247, 217, 251, 31, 224, 86, 248, 4, 79, 0, 44, 184, 191, 100, ++ 66, 8, 224, 104, 70, 44, 169, 254, 247, 19, 248, 104, 70, 44, 169, 254, ++ 247, 177, 251, 1, 61, 165, 66, 244, 220, 2, 45, 14, 221, 51, 104, 104, ++ 70, 0, 43, 44, 169, 180, 191, 53, 170, 35, 170, 254, 247, 235, 248, ++ 104, 70, 44, 169, 254, 247, 159, 251, 2, 45, 221, 220, 44, 168, 253, ++ 247, 205, 255, 2, 33, 44, 170, 36, 35, 64, 70, 253, 247, 123, 251, 63, ++ 168, 253, 247, 10, 252, 62, 168, 253, 247, 7, 252, 65, 176, 189, 232, ++ 240, 131, 45, 233, 255, 65, 14, 70, 21, 70, 4, 33, 0, 34, 4, 70, 255, ++ 247, 23, 255, 7, 70, 32, 70, 253, 247, 245, 251, 128, 70, 32, 70, 255, ++ 247, 134, 253, 254, 247, 19, 255, 1, 33, 3, 70, 0, 34, 64, 70, 253, ++ 247, 152, 250, 0, 144, 32, 70, 253, 247, 229, 251, 128, 70, 32, 70, ++ 255, 247, 118, 253, 254, 247, 3, 255, 1, 33, 3, 70, 0, 34, 64, 70, 253, ++ 247, 136, 250, 1, 144, 32, 70, 253, 247, 213, 251, 128, 70, 32, 70, ++ 255, 247, 102, 253, 254, 247, 243, 254, 1, 33, 3, 70, 0, 34, 64, 70, ++ 253, 247, 120, 250, 2, 144, 32, 70, 253, 247, 197, 251, 128, 70, 32, ++ 70, 255, 247, 86, 253, 254, 247, 227, 254, 1, 33, 3, 70, 0, 34, 64, ++ 70, 253, 247, 104, 250, 1, 33, 3, 144, 0, 154, 32, 70, 255, 247, 209, ++ 254, 5, 33, 1, 154, 32, 70, 255, 247, 204, 254, 49, 70, 40, 70, 253, ++ 247, 244, 251, 2, 152, 49, 70, 0, 154, 253, 247, 93, 253, 3, 152, 2, ++ 153, 50, 70, 0, 155, 253, 247, 253, 252, 2, 152, 58, 70, 1, 70, 0, 155, ++ 253, 247, 52, 253, 3, 152, 2, 154, 1, 70, 0, 155, 253, 247, 65, 252, ++ 3, 152, 0, 155, 1, 70, 50, 70, 253, 247, 59, 252, 32, 70, 41, 70, 3, ++ 154, 255, 247, 4, 255, 2, 152, 41, 70, 0, 154, 253, 247, 59, 253, 3, ++ 152, 2, 153, 253, 247, 151, 251, 184, 177, 40, 70, 41, 70, 1, 154, 0, ++ 155, 253, 247, 214, 252, 2, 152, 41, 70, 0, 154, 253, 247, 43, 253, ++ 3, 152, 2, 153, 253, 247, 135, 251, 56, 177, 0, 34, 40, 70, 1, 33, 19, ++ 70, 253, 247, 216, 250, 0, 36, 0, 224, 1, 36, 3, 168, 253, 247, 100, ++ 251, 2, 168, 253, 247, 97, 251, 1, 168, 253, 247, 94, 251, 104, 70, ++ 253, 247, 91, 251, 32, 70, 4, 176, 189, 232, 240, 129, 45, 233, 240, ++ 71, 128, 70, 134, 176, 24, 70, 28, 70, 137, 70, 23, 70, 255, 247, 224, ++ 252, 254, 247, 83, 254, 1, 37, 6, 70, 32, 70, 141, 248, 23, 80, 253, ++ 247, 66, 251, 130, 70, 32, 70, 255, 247, 211, 252, 254, 247, 96, 254, ++ 41, 70, 16, 250, 5, 243, 0, 34, 80, 70, 253, 247, 228, 249, 1, 144, ++ 32, 70, 253, 247, 49, 251, 130, 70, 32, 70, 255, 247, 194, 252, 254, ++ 247, 79, 254, 41, 70, 3, 70, 0, 34, 80, 70, 253, 247, 212, 249, 2, 144, ++ 32, 70, 253, 247, 33, 251, 130, 70, 32, 70, 255, 247, 178, 252, 254, ++ 247, 63, 254, 41, 70, 3, 70, 0, 34, 80, 70, 253, 247, 196, 249, 3, 144, ++ 32, 70, 253, 247, 17, 251, 130, 70, 32, 70, 255, 247, 162, 252, 254, ++ 247, 47, 254, 41, 70, 3, 70, 0, 34, 80, 70, 253, 247, 180, 249, 41, ++ 70, 4, 144, 2, 154, 32, 70, 255, 247, 29, 254, 56, 70, 2, 153, 3, 154, ++ 253, 247, 225, 252, 51, 105, 4, 152, 3, 153, 1, 154, 152, 71, 244, 104, ++ 64, 70, 65, 70, 4, 154, 1, 155, 160, 71, 4, 152, 244, 104, 1, 70, 3, ++ 154, 1, 155, 160, 71, 72, 70, 73, 70, 4, 154, 1, 155, 244, 104, 160, ++ 71, 41, 70, 13, 241, 23, 2, 43, 70, 56, 70, 253, 247, 76, 250, 4, 168, ++ 253, 247, 219, 250, 3, 168, 253, 247, 216, 250, 2, 168, 253, 247, 213, ++ 250, 1, 168, 253, 247, 210, 250, 6, 176, 189, 232, 240, 135, 45, 233, ++ 255, 71, 14, 156, 128, 70, 32, 70, 30, 70, 15, 70, 12, 157, 145, 70, ++ 253, 247, 194, 250, 130, 70, 32, 70, 255, 247, 83, 252, 254, 247, 224, ++ 253, 1, 33, 3, 70, 0, 34, 80, 70, 253, 247, 101, 249, 2, 144, 32, 70, ++ 253, 247, 178, 250, 130, 70, 32, 70, 255, 247, 67, 252, 254, 247, 208, ++ 253, 1, 33, 3, 70, 0, 34, 80, 70, 253, 247, 85, 249, 0, 35, 1, 70, 1, ++ 34, 3, 144, 253, 247, 121, 251, 1, 33, 2, 154, 32, 70, 255, 247, 185, ++ 253, 58, 70, 0, 35, 72, 70, 2, 153, 253, 247, 92, 251, 65, 70, 48, 70, ++ 253, 247, 219, 250, 57, 70, 40, 70, 253, 247, 215, 250, 48, 70, 41, ++ 70, 3, 154, 35, 70, 255, 247, 36, 252, 48, 70, 41, 70, 3, 154, 67, 70, ++ 0, 151, 1, 148, 255, 247, 220, 252, 48, 70, 41, 70, 3, 154, 35, 70, ++ 255, 247, 36, 255, 13, 152, 2, 153, 42, 70, 0, 35, 253, 247, 58, 251, ++ 3, 168, 253, 247, 114, 250, 2, 168, 253, 247, 111, 250, 189, 232, 255, ++ 135, 45, 233, 255, 71, 7, 70, 145, 70, 12, 70, 255, 247, 249, 251, 254, ++ 247, 108, 253, 208, 248, 32, 128, 6, 70, 56, 70, 216, 248, 0, 80, 253, ++ 247, 90, 250, 130, 70, 56, 70, 255, 247, 235, 251, 254, 247, 120, 253, ++ 1, 33, 67, 0, 0, 34, 80, 70, 253, 247, 253, 248, 1, 144, 56, 70, 253, ++ 247, 74, 250, 130, 70, 56, 70, 255, 247, 219, 251, 254, 247, 104, 253, ++ 1, 33, 3, 70, 0, 34, 80, 70, 253, 247, 237, 248, 2, 144, 56, 70, 253, ++ 247, 58, 250, 130, 70, 56, 70, 255, 247, 203, 251, 254, 247, 88, 253, ++ 1, 33, 3, 70, 0, 34, 80, 70, 253, 247, 221, 248, 1, 33, 2, 70, 3, 144, ++ 56, 70, 255, 247, 70, 253, 72, 70, 3, 153, 2, 154, 253, 247, 10, 252, ++ 32, 70, 73, 70, 253, 247, 105, 250, 26, 224, 88, 248, 4, 127, 0, 47, ++ 184, 191, 127, 66, 5, 224, 51, 105, 32, 70, 33, 70, 1, 154, 152, 71, ++ 1, 61, 189, 66, 247, 220, 2, 45, 12, 221, 216, 248, 0, 48, 32, 70, 0, ++ 43, 33, 70, 247, 104, 180, 191, 2, 154, 74, 70, 1, 155, 184, 71, 2, ++ 45, 226, 220, 3, 168, 253, 247, 0, 250, 2, 168, 253, 247, 253, 249, ++ 1, 168, 253, 247, 250, 249, 189, 232, 255, 135, 45, 233, 240, 71, 134, ++ 176, 14, 156, 6, 70, 32, 70, 136, 70, 23, 70, 153, 70, 255, 247, 128, ++ 251, 254, 247, 243, 252, 5, 70, 32, 70, 253, 247, 229, 249, 130, 70, ++ 32, 70, 255, 247, 118, 251, 254, 247, 3, 253, 1, 33, 67, 0, 0, 34, 80, ++ 70, 253, 247, 136, 248, 1, 144, 32, 70, 253, 247, 213, 249, 130, 70, ++ 32, 70, 255, 247, 102, 251, 254, 247, 243, 252, 1, 33, 3, 70, 0, 34, ++ 80, 70, 253, 247, 120, 248, 2, 144, 32, 70, 253, 247, 197, 249, 130, ++ 70, 32, 70, 255, 247, 86, 251, 254, 247, 227, 252, 1, 33, 3, 70, 0, ++ 34, 80, 70, 253, 247, 104, 248, 3, 144, 32, 70, 253, 247, 181, 249, ++ 130, 70, 32, 70, 255, 247, 70, 251, 254, 247, 211, 252, 1, 33, 3, 70, ++ 0, 34, 80, 70, 253, 247, 88, 248, 4, 144, 32, 70, 253, 247, 165, 249, ++ 130, 70, 32, 70, 255, 247, 54, 251, 254, 247, 195, 252, 0, 34, 3, 70, ++ 1, 33, 80, 70, 253, 247, 72, 248, 1, 33, 5, 144, 2, 154, 32, 70, 255, ++ 247, 177, 252, 171, 105, 3, 152, 73, 70, 66, 70, 152, 71, 171, 105, ++ 4, 152, 57, 70, 50, 70, 152, 71, 4, 152, 2, 153, 2, 70, 253, 247, 107, ++ 251, 3, 152, 4, 154, 1, 70, 1, 155, 236, 104, 160, 71, 43, 105, 4, 152, ++ 3, 153, 1, 154, 152, 71, 43, 104, 4, 43, 6, 209, 106, 107, 4, 152, 82, ++ 66, 1, 70, 0, 35, 253, 247, 72, 250, 4, 152, 171, 105, 1, 70, 58, 70, ++ 152, 71, 4, 152, 171, 105, 1, 70, 50, 70, 152, 71, 171, 105, 4, 154, ++ 5, 152, 49, 70, 152, 71, 4, 153, 48, 70, 253, 247, 166, 249, 5, 152, ++ 236, 104, 1, 70, 3, 154, 1, 155, 160, 71, 6, 172, 84, 248, 4, 29, 171, ++ 105, 66, 70, 64, 70, 152, 71, 32, 70, 253, 247, 78, 249, 4, 168, 253, ++ 247, 75, 249, 3, 168, 253, 247, 72, 249, 2, 168, 253, 247, 69, 249, ++ 1, 168, 253, 247, 66, 249, 6, 176, 189, 232, 240, 135, 127, 181, 4, ++ 70, 253, 247, 57, 249, 1, 33, 0, 34, 12, 35, 252, 247, 227, 255, 5, ++ 70, 32, 70, 1, 148, 253, 247, 47, 249, 6, 70, 32, 70, 255, 247, 192, ++ 250, 254, 247, 77, 252, 1, 33, 3, 70, 0, 34, 48, 70, 252, 247, 210, ++ 255, 2, 144, 32, 70, 253, 247, 31, 249, 6, 70, 32, 70, 255, 247, 176, ++ 250, 254, 247, 61, 252, 1, 33, 3, 70, 0, 34, 48, 70, 252, 247, 194, ++ 255, 1, 33, 3, 144, 1, 170, 40, 70, 12, 35, 253, 247, 124, 248, 40, ++ 70, 4, 176, 112, 189, 31, 181, 4, 70, 120, 177, 0, 104, 104, 177, 1, ++ 33, 1, 170, 12, 35, 253, 247, 210, 248, 3, 168, 253, 247, 254, 248, ++ 2, 168, 253, 247, 251, 248, 32, 70, 253, 247, 248, 248, 31, 189, 48, ++ 181, 4, 70, 135, 176, 208, 177, 5, 104, 197, 177, 40, 70, 253, 247, ++ 236, 248, 1, 33, 5, 144, 3, 170, 8, 35, 40, 70, 253, 247, 184, 248, ++ 1, 33, 106, 70, 12, 35, 3, 152, 253, 247, 178, 248, 3, 168, 255, 247, ++ 211, 255, 32, 70, 253, 247, 219, 248, 5, 168, 252, 247, 120, 255, 7, ++ 176, 48, 189, 31, 181, 1, 33, 1, 170, 12, 35, 253, 247, 161, 248, 1, ++ 152, 5, 176, 0, 189, 48, 181, 133, 176, 13, 70, 20, 70, 1, 33, 1, 170, ++ 12, 35, 253, 247, 149, 248, 13, 177, 2, 155, 43, 96, 12, 177, 3, 155, ++ 35, 96, 5, 176, 48, 189, 127, 181, 12, 35, 14, 70, 21, 70, 1, 33, 1, ++ 170, 4, 70, 253, 247, 132, 248, 49, 70, 2, 152, 253, 247, 247, 248, ++ 41, 70, 3, 152, 253, 247, 243, 248, 32, 70, 1, 33, 1, 170, 12, 35, 253, ++ 247, 19, 248, 1, 32, 4, 176, 112, 189, 45, 233, 240, 67, 159, 176, 12, ++ 70, 145, 70, 6, 70, 255, 247, 196, 255, 5, 70, 253, 247, 149, 248, 7, ++ 70, 40, 70, 255, 247, 38, 250, 254, 247, 179, 251, 1, 33, 3, 70, 0, ++ 34, 56, 70, 252, 247, 56, 255, 26, 144, 40, 70, 253, 247, 133, 248, ++ 7, 70, 40, 70, 255, 247, 22, 250, 254, 247, 163, 251, 1, 33, 3, 70, ++ 0, 34, 56, 70, 252, 247, 40, 255, 27, 144, 40, 70, 253, 247, 117, 248, ++ 7, 70, 40, 70, 255, 247, 6, 250, 254, 247, 147, 251, 1, 33, 3, 70, 0, ++ 34, 56, 70, 252, 247, 24, 255, 28, 144, 40, 70, 253, 247, 101, 248, ++ 7, 70, 40, 70, 255, 247, 246, 249, 254, 247, 131, 251, 1, 33, 3, 70, ++ 0, 34, 56, 70, 252, 247, 8, 255, 21, 169, 29, 144, 22, 170, 48, 70, ++ 255, 247, 136, 255, 28, 155, 22, 153, 0, 147, 29, 155, 26, 154, 1, 147, ++ 21, 152, 27, 155, 2, 149, 255, 247, 123, 253, 40, 70, 253, 247, 69, ++ 248, 6, 70, 40, 70, 255, 247, 214, 249, 254, 247, 99, 251, 1, 33, 3, ++ 70, 0, 34, 48, 70, 252, 247, 232, 254, 23, 144, 40, 70, 253, 247, 53, ++ 248, 6, 70, 40, 70, 255, 247, 198, 249, 254, 247, 83, 251, 1, 33, 3, ++ 70, 0, 34, 48, 70, 252, 247, 216, 254, 24, 144, 40, 70, 253, 247, 37, ++ 248, 6, 70, 40, 70, 255, 247, 182, 249, 254, 247, 67, 251, 1, 33, 3, ++ 70, 0, 34, 48, 70, 252, 247, 200, 254, 1, 34, 1, 70, 0, 35, 25, 144, ++ 253, 247, 236, 248, 40, 70, 255, 247, 165, 249, 40, 70, 255, 247, 162, ++ 249, 254, 247, 47, 251, 40, 70, 255, 247, 157, 249, 254, 247, 42, 251, ++ 2, 33, 3, 29, 4, 170, 32, 70, 252, 247, 211, 255, 40, 70, 255, 247, ++ 146, 249, 254, 247, 31, 251, 0, 241, 4, 8, 79, 234, 168, 8, 65, 70, ++ 4, 168, 254, 247, 29, 251, 8, 241, 255, 56, 0, 38, 12, 36, 87, 224, ++ 31, 44, 2, 209, 1, 54, 0, 36, 0, 224, 1, 52, 117, 74, 30, 168, 0, 235, ++ 134, 3, 82, 248, 36, 16, 83, 248, 104, 60, 25, 66, 71, 208, 31, 44, ++ 2, 209, 1, 54, 0, 35, 0, 224, 99, 28, 30, 168, 0, 235, 134, 1, 82, 248, ++ 35, 64, 81, 248, 104, 28, 12, 64, 29, 208, 31, 43, 2, 209, 1, 54, 0, ++ 36, 0, 224, 92, 28, 30, 169, 1, 235, 134, 3, 82, 248, 36, 32, 83, 248, ++ 104, 60, 23, 152, 26, 66, 5, 208, 21, 153, 253, 247, 6, 248, 24, 152, ++ 26, 153, 4, 224, 27, 153, 253, 247, 0, 248, 24, 152, 28, 153, 252, 247, ++ 252, 255, 125, 224, 31, 43, 1, 209, 1, 54, 0, 224, 92, 28, 30, 168, ++ 0, 235, 134, 3, 82, 248, 36, 32, 83, 248, 104, 60, 23, 152, 26, 66, ++ 5, 208, 27, 153, 252, 247, 233, 255, 24, 152, 29, 153, 231, 231, 21, ++ 153, 252, 247, 227, 255, 24, 152, 22, 153, 225, 231, 70, 69, 165, 211, ++ 30, 44, 168, 217, 93, 224, 23, 168, 7, 200, 43, 70, 255, 247, 41, 249, ++ 31, 44, 2, 209, 1, 54, 0, 36, 0, 224, 1, 52, 68, 79, 30, 169, 1, 235, ++ 134, 3, 87, 248, 36, 32, 83, 248, 104, 60, 26, 66, 72, 208, 23, 168, ++ 7, 200, 43, 70, 255, 247, 20, 249, 23, 168, 7, 200, 43, 70, 255, 247, ++ 15, 249, 31, 44, 2, 209, 1, 54, 0, 35, 0, 224, 99, 28, 30, 168, 0, 235, ++ 134, 2, 87, 248, 35, 64, 82, 248, 104, 44, 20, 64, 18, 208, 31, 43, ++ 2, 209, 1, 54, 0, 36, 0, 224, 92, 28, 30, 169, 1, 235, 134, 3, 87, 248, ++ 36, 32, 83, 248, 104, 60, 26, 66, 1, 208, 26, 155, 23, 224, 28, 155, ++ 14, 224, 31, 43, 1, 209, 1, 54, 0, 224, 92, 28, 30, 170, 2, 235, 134, ++ 3, 83, 248, 104, 60, 87, 248, 36, 32, 26, 66, 6, 208, 29, 155, 141, ++ 232, 40, 0, 23, 168, 7, 200, 27, 155, 5, 224, 22, 155, 141, 232, 40, ++ 0, 21, 155, 23, 168, 7, 200, 255, 247, 144, 249, 70, 69, 159, 211, 30, ++ 44, 157, 217, 23, 153, 27, 152, 252, 247, 117, 255, 30, 172, 24, 153, ++ 28, 152, 252, 247, 112, 255, 84, 248, 20, 29, 26, 152, 252, 247, 107, ++ 255, 32, 70, 252, 247, 32, 255, 24, 168, 252, 247, 29, 255, 23, 168, ++ 252, 247, 26, 255, 29, 168, 252, 247, 23, 255, 30, 172, 43, 70, 27, ++ 152, 28, 153, 26, 154, 255, 247, 185, 251, 84, 248, 8, 45, 27, 153, ++ 72, 70, 255, 247, 78, 254, 32, 70, 252, 247, 7, 255, 27, 168, 252, 247, ++ 4, 255, 26, 168, 252, 247, 1, 255, 31, 176, 189, 232, 240, 131, 248, ++ 26, 4, 0, 45, 233, 240, 65, 134, 176, 4, 70, 23, 70, 13, 70, 255, 247, ++ 135, 248, 6, 70, 32, 70, 252, 247, 238, 254, 128, 70, 32, 70, 255, 247, ++ 127, 248, 254, 247, 12, 250, 1, 33, 3, 70, 0, 34, 64, 70, 252, 247, ++ 145, 253, 1, 144, 32, 70, 252, 247, 222, 254, 128, 70, 32, 70, 255, ++ 247, 111, 248, 254, 247, 252, 249, 1, 33, 3, 70, 0, 34, 64, 70, 252, ++ 247, 129, 253, 2, 144, 32, 70, 252, 247, 206, 254, 128, 70, 32, 70, ++ 255, 247, 95, 248, 254, 247, 236, 249, 1, 33, 3, 70, 0, 34, 64, 70, ++ 252, 247, 113, 253, 3, 144, 32, 70, 252, 247, 190, 254, 128, 70, 32, ++ 70, 255, 247, 79, 248, 254, 247, 220, 249, 1, 33, 3, 70, 0, 34, 64, ++ 70, 252, 247, 97, 253, 4, 144, 32, 70, 252, 247, 174, 254, 128, 70, ++ 32, 70, 255, 247, 63, 248, 254, 247, 204, 249, 1, 33, 3, 70, 0, 34, ++ 64, 70, 252, 247, 81, 253, 5, 33, 5, 144, 1, 154, 32, 70, 255, 247, ++ 186, 249, 1, 33, 2, 154, 32, 70, 255, 247, 181, 249, 5, 152, 57, 70, ++ 2, 154, 253, 247, 74, 248, 4, 46, 36, 209, 32, 70, 49, 70, 0, 34, 255, ++ 247, 169, 249, 2, 154, 4, 70, 41, 70, 4, 152, 253, 247, 61, 248, 4, ++ 153, 3, 152, 252, 247, 203, 254, 4, 152, 34, 70, 1, 70, 2, 155, 253, ++ 247, 22, 248, 4, 152, 42, 70, 1, 70, 2, 155, 252, 247, 35, 255, 3, 152, ++ 42, 70, 1, 70, 2, 155, 252, 247, 205, 255, 4, 152, 3, 154, 1, 70, 20, ++ 224, 4, 152, 41, 70, 2, 154, 253, 247, 30, 248, 4, 152, 111, 240, 2, ++ 2, 1, 70, 0, 35, 252, 247, 56, 255, 4, 152, 42, 70, 1, 70, 2, 155, 252, ++ 247, 183, 255, 4, 152, 1, 154, 1, 70, 2, 155, 6, 172, 252, 247, 0, 255, ++ 84, 248, 4, 29, 4, 152, 252, 247, 101, 254, 5, 70, 32, 70, 252, 247, ++ 75, 254, 4, 168, 252, 247, 72, 254, 3, 168, 252, 247, 69, 254, 2, 168, ++ 252, 247, 66, 254, 1, 168, 252, 247, 63, 254, 213, 241, 1, 0, 56, 191, ++ 0, 32, 6, 176, 189, 232, 240, 129, 19, 181, 4, 70, 1, 170, 8, 70, 105, ++ 70, 255, 247, 100, 253, 157, 232, 6, 0, 32, 70, 255, 247, 48, 255, 28, ++ 189, 240, 181, 133, 176, 13, 70, 6, 70, 255, 247, 79, 253, 4, 70, 252, ++ 247, 32, 254, 7, 70, 32, 70, 254, 247, 177, 255, 254, 247, 62, 249, ++ 1, 33, 3, 70, 0, 34, 56, 70, 252, 247, 195, 252, 2, 144, 32, 70, 252, ++ 247, 16, 254, 7, 70, 32, 70, 254, 247, 161, 255, 254, 247, 46, 249, ++ 1, 33, 3, 70, 0, 34, 56, 70, 252, 247, 179, 252, 105, 70, 3, 144, 1, ++ 170, 48, 70, 255, 247, 51, 253, 1, 33, 2, 154, 32, 70, 255, 247, 23, ++ 249, 4, 172, 0, 35, 3, 152, 2, 153, 1, 154, 252, 247, 185, 254, 84, ++ 248, 4, 45, 0, 153, 40, 70, 255, 247, 50, 253, 32, 70, 252, 247, 235, ++ 253, 2, 168, 252, 247, 232, 253, 5, 176, 240, 189, 45, 233, 240, 65, ++ 134, 176, 14, 70, 21, 70, 7, 70, 255, 247, 8, 253, 4, 70, 252, 247, ++ 217, 253, 128, 70, 32, 70, 254, 247, 106, 255, 254, 247, 247, 248, 1, ++ 33, 3, 70, 0, 34, 64, 70, 252, 247, 124, 252, 4, 144, 32, 70, 252, 247, ++ 201, 253, 128, 70, 32, 70, 254, 247, 90, 255, 254, 247, 231, 248, 1, ++ 33, 3, 70, 0, 34, 64, 70, 252, 247, 108, 252, 3, 170, 5, 144, 2, 169, ++ 56, 70, 255, 247, 236, 252, 2, 153, 4, 152, 252, 247, 253, 253, 3, 153, ++ 5, 152, 252, 247, 249, 253, 48, 70, 2, 169, 3, 170, 255, 247, 223, 252, ++ 3, 155, 0, 148, 4, 152, 5, 153, 2, 154, 6, 172, 255, 247, 172, 251, ++ 84, 248, 4, 45, 4, 153, 40, 70, 255, 247, 226, 252, 32, 70, 252, 247, ++ 155, 253, 4, 168, 252, 247, 152, 253, 6, 176, 189, 232, 240, 129, 45, ++ 233, 240, 65, 136, 176, 4, 70, 13, 70, 31, 70, 22, 70, 252, 247, 138, ++ 253, 128, 70, 32, 70, 254, 247, 27, 255, 254, 247, 168, 248, 1, 33, ++ 3, 70, 0, 34, 64, 70, 252, 247, 45, 252, 3, 144, 32, 70, 252, 247, 122, ++ 253, 128, 70, 32, 70, 254, 247, 11, 255, 254, 247, 152, 248, 1, 33, ++ 3, 70, 0, 34, 64, 70, 252, 247, 29, 252, 4, 144, 32, 70, 252, 247, 106, ++ 253, 128, 70, 32, 70, 254, 247, 251, 254, 254, 247, 136, 248, 1, 33, ++ 3, 70, 0, 34, 64, 70, 252, 247, 13, 252, 5, 144, 32, 70, 252, 247, 90, ++ 253, 128, 70, 32, 70, 254, 247, 235, 254, 254, 247, 120, 248, 1, 33, ++ 3, 70, 0, 34, 64, 70, 252, 247, 253, 251, 6, 144, 32, 70, 252, 247, ++ 74, 253, 128, 70, 32, 70, 254, 247, 219, 254, 254, 247, 104, 248, 1, ++ 33, 3, 70, 0, 34, 64, 70, 252, 247, 237, 251, 1, 33, 7, 144, 3, 154, ++ 32, 70, 255, 247, 86, 248, 5, 33, 4, 154, 32, 70, 255, 247, 81, 248, ++ 6, 152, 41, 70, 3, 154, 4, 155, 254, 247, 69, 254, 15, 155, 56, 70, ++ 0, 147, 16, 155, 14, 153, 1, 147, 6, 154, 3, 155, 253, 247, 61, 248, ++ 88, 177, 32, 70, 5, 153, 6, 154, 255, 247, 178, 250, 48, 70, 41, 70, ++ 5, 154, 255, 247, 94, 252, 0, 36, 1, 224, 79, 240, 255, 52, 7, 168, ++ 252, 247, 19, 253, 6, 168, 252, 247, 16, 253, 5, 168, 252, 247, 13, ++ 253, 4, 168, 252, 247, 10, 253, 3, 168, 252, 247, 7, 253, 32, 70, 8, ++ 176, 189, 232, 240, 129, 11, 106, 48, 181, 20, 106, 227, 24, 179, 241, ++ 0, 95, 3, 98, 4, 211, 35, 240, 96, 67, 3, 98, 1, 36, 0, 224, 0, 36, ++ 213, 105, 203, 105, 235, 24, 27, 25, 179, 241, 128, 95, 195, 97, 4, ++ 211, 35, 240, 112, 67, 195, 97, 1, 36, 0, 224, 0, 36, 149, 105, 139, ++ 105, 235, 24, 27, 25, 179, 241, 128, 95, 131, 97, 4, 211, 35, 240, 112, ++ 67, 131, 97, 1, 36, 0, 224, 0, 36, 85, 105, 75, 105, 235, 24, 27, 25, ++ 179, 241, 0, 95, 67, 97, 4, 211, 35, 240, 96, 67, 67, 97, 1, 36, 0, ++ 224, 0, 36, 21, 105, 11, 105, 235, 24, 27, 25, 179, 241, 128, 95, 3, ++ 97, 4, 211, 35, 240, 112, 67, 3, 97, 1, 36, 0, 224, 0, 36, 213, 104, ++ 203, 104, 235, 24, 27, 25, 179, 241, 128, 95, 195, 96, 4, 211, 35, 240, ++ 112, 67, 195, 96, 1, 36, 0, 224, 0, 36, 149, 104, 139, 104, 235, 24, ++ 27, 25, 179, 241, 0, 95, 131, 96, 4, 211, 35, 240, 96, 67, 131, 96, ++ 1, 36, 0, 224, 0, 36, 85, 104, 75, 104, 235, 24, 27, 25, 179, 241, 128, ++ 95, 67, 96, 4, 211, 35, 240, 112, 67, 67, 96, 1, 36, 0, 224, 0, 36, ++ 18, 104, 11, 104, 211, 24, 27, 25, 179, 241, 128, 95, 3, 96, 14, 211, ++ 35, 240, 112, 67, 3, 96, 3, 106, 19, 51, 179, 241, 0, 95, 3, 98, 5, ++ 211, 35, 240, 96, 67, 3, 98, 195, 105, 1, 51, 195, 97, 48, 189, 19, ++ 106, 48, 181, 12, 106, 227, 26, 179, 241, 0, 95, 3, 98, 4, 211, 35, ++ 240, 96, 67, 3, 98, 1, 36, 0, 224, 0, 36, 205, 105, 211, 105, 235, 26, ++ 27, 27, 179, 241, 128, 95, 195, 97, 4, 211, 35, 240, 112, 67, 195, 97, ++ 1, 36, 0, 224, 0, 36, 141, 105, 147, 105, 235, 26, 27, 27, 179, 241, ++ 128, 95, 131, 97, 4, 211, 35, 240, 112, 67, 131, 97, 1, 36, 0, 224, ++ 0, 36, 77, 105, 83, 105, 235, 26, 27, 27, 179, 241, 0, 95, 67, 97, 4, ++ 211, 35, 240, 96, 67, 67, 97, 1, 36, 0, 224, 0, 36, 13, 105, 19, 105, ++ 235, 26, 27, 27, 179, 241, 128, 95, 3, 97, 4, 211, 35, 240, 112, 67, ++ 3, 97, 1, 36, 0, 224, 0, 36, 205, 104, 211, 104, 235, 26, 27, 27, 179, ++ 241, 128, 95, 195, 96, 4, 211, 35, 240, 112, 67, 195, 96, 1, 36, 0, ++ 224, 0, 36, 141, 104, 147, 104, 235, 26, 27, 27, 179, 241, 0, 95, 131, ++ 96, 4, 211, 35, 240, 96, 67, 131, 96, 1, 36, 0, 224, 0, 36, 77, 104, ++ 83, 104, 235, 26, 27, 27, 179, 241, 128, 95, 67, 96, 4, 211, 35, 240, ++ 112, 67, 67, 96, 1, 36, 0, 224, 0, 36, 9, 104, 19, 104, 203, 26, 27, ++ 27, 179, 241, 128, 95, 3, 96, 14, 211, 35, 240, 112, 67, 3, 96, 3, 106, ++ 19, 59, 179, 241, 0, 95, 3, 98, 5, 211, 35, 240, 96, 67, 3, 98, 195, ++ 105, 1, 59, 195, 97, 48, 189, 0, 0, 48, 181, 12, 70, 191, 176, 5, 70, ++ 34, 70, 35, 168, 41, 70, 255, 247, 230, 254, 104, 70, 35, 169, 252, ++ 247, 202, 255, 104, 70, 35, 169, 253, 247, 104, 251, 34, 70, 44, 168, ++ 41, 70, 255, 247, 97, 255, 104, 70, 44, 169, 252, 247, 189, 255, 104, ++ 70, 44, 169, 253, 247, 91, 251, 44, 170, 104, 70, 35, 169, 253, 247, ++ 158, 248, 104, 70, 41, 70, 253, 247, 82, 251, 44, 168, 35, 169, 2, 70, ++ 255, 247, 75, 255, 53, 168, 44, 169, 9, 74, 253, 247, 67, 255, 32, 70, ++ 53, 169, 35, 170, 255, 247, 185, 254, 104, 70, 33, 70, 44, 170, 253, ++ 247, 134, 248, 104, 70, 33, 70, 253, 247, 58, 251, 63, 176, 48, 189, ++ 0, 191, 65, 219, 1, 0, 240, 181, 6, 70, 191, 176, 12, 70, 31, 70, 21, ++ 70, 35, 168, 49, 70, 34, 70, 255, 247, 160, 254, 44, 168, 41, 70, 58, ++ 70, 255, 247, 35, 255, 44, 170, 104, 70, 35, 169, 253, 247, 104, 248, ++ 104, 70, 35, 169, 253, 247, 28, 251, 44, 168, 49, 70, 34, 70, 255, 247, ++ 21, 255, 53, 168, 41, 70, 58, 70, 255, 247, 136, 254, 53, 170, 104, ++ 70, 44, 169, 253, 247, 85, 248, 104, 70, 44, 169, 253, 247, 9, 251, ++ 35, 170, 53, 168, 44, 169, 255, 247, 122, 254, 104, 70, 53, 169, 252, ++ 247, 94, 255, 104, 70, 49, 70, 253, 247, 252, 250, 35, 170, 53, 168, ++ 44, 169, 255, 247, 245, 254, 104, 70, 53, 169, 252, 247, 81, 255, 104, ++ 70, 33, 70, 253, 247, 239, 250, 157, 248, 20, 49, 43, 177, 32, 70, 33, ++ 70, 9, 34, 253, 247, 226, 254, 8, 224, 104, 70, 33, 70, 68, 154, 253, ++ 247, 41, 248, 104, 70, 33, 70, 253, 247, 221, 250, 40, 70, 57, 70, 255, ++ 247, 96, 255, 63, 176, 240, 189, 45, 233, 240, 71, 198, 176, 13, 70, ++ 4, 70, 146, 70, 255, 247, 114, 250, 0, 33, 6, 70, 36, 34, 30, 168, 250, ++ 243, 98, 246, 1, 39, 0, 33, 36, 34, 39, 168, 38, 151, 250, 243, 91, ++ 246, 0, 33, 36, 34, 48, 168, 47, 151, 250, 243, 85, 246, 9, 35, 48, ++ 70, 56, 147, 252, 247, 46, 251, 128, 70, 48, 70, 254, 247, 191, 252, ++ 253, 247, 76, 254, 0, 34, 3, 70, 57, 70, 64, 70, 252, 247, 209, 249, ++ 67, 144, 48, 70, 252, 247, 30, 251, 128, 70, 48, 70, 254, 247, 175, ++ 252, 253, 247, 60, 254, 0, 34, 3, 70, 57, 70, 64, 70, 252, 247, 193, ++ 249, 68, 144, 48, 70, 252, 247, 14, 251, 128, 70, 48, 70, 254, 247, ++ 159, 252, 253, 247, 44, 254, 0, 34, 3, 70, 57, 70, 64, 70, 252, 247, ++ 177, 249, 2, 33, 32, 35, 69, 144, 57, 170, 40, 70, 252, 247, 206, 250, ++ 57, 155, 32, 70, 65, 169, 66, 170, 3, 240, 128, 73, 255, 247, 40, 250, ++ 2, 33, 21, 170, 65, 152, 36, 35, 252, 247, 192, 250, 21, 168, 48, 169, ++ 36, 34, 249, 247, 119, 250, 24, 177, 21, 168, 252, 247, 104, 254, 0, ++ 39, 21, 169, 36, 34, 3, 168, 249, 247, 128, 250, 12, 168, 21, 169, 36, ++ 34, 249, 247, 123, 250, 0, 37, 44, 70, 62, 75, 70, 169, 1, 235, 133, ++ 2, 82, 248, 52, 44, 83, 248, 36, 16, 152, 70, 10, 64, 4, 208, 12, 168, ++ 39, 169, 255, 247, 216, 254, 31, 224, 31, 44, 2, 209, 1, 53, 20, 70, ++ 0, 224, 1, 52, 7, 45, 231, 217, 30, 224, 70, 170, 2, 235, 133, 3, 83, ++ 248, 52, 60, 88, 248, 36, 32, 26, 66, 21, 171, 141, 232, 136, 0, 4, ++ 208, 3, 168, 30, 169, 12, 170, 39, 171, 3, 224, 12, 168, 39, 169, 3, ++ 170, 30, 171, 255, 247, 251, 254, 31, 44, 2, 209, 1, 53, 0, 36, 0, 224, ++ 1, 52, 7, 45, 224, 217, 30, 168, 252, 247, 88, 254, 2, 33, 30, 170, ++ 36, 35, 69, 152, 252, 247, 6, 250, 3, 168, 252, 247, 79, 254, 36, 35, ++ 2, 33, 3, 170, 68, 152, 252, 247, 253, 249, 1, 33, 67, 154, 48, 70, ++ 254, 247, 166, 253, 69, 152, 67, 153, 2, 70, 252, 247, 106, 252, 68, ++ 152, 69, 154, 1, 70, 67, 155, 252, 247, 219, 251, 185, 241, 0, 15, 5, ++ 209, 48, 70, 68, 153, 69, 154, 254, 247, 115, 254, 5, 224, 0, 34, 69, ++ 152, 1, 33, 19, 70, 252, 247, 222, 249, 70, 172, 84, 248, 4, 45, 68, ++ 153, 80, 70, 255, 247, 173, 249, 32, 70, 252, 247, 102, 250, 68, 168, ++ 252, 247, 99, 250, 67, 168, 252, 247, 96, 250, 70, 176, 189, 232, 240, ++ 135, 0, 191, 248, 26, 4, 0, 112, 181, 14, 70, 21, 70, 4, 70, 255, 247, ++ 126, 249, 254, 247, 229, 251, 4, 40, 49, 70, 32, 70, 42, 70, 3, 209, ++ 189, 232, 112, 64, 255, 247, 249, 190, 189, 232, 112, 64, 255, 247, ++ 163, 185, 0, 0, 45, 233, 240, 65, 31, 70, 0, 235, 1, 8, 0, 241, 14, ++ 3, 152, 69, 4, 70, 13, 70, 22, 70, 3, 217, 144, 249, 14, 48, 0, 43, ++ 69, 218, 23, 45, 63, 217, 33, 124, 99, 124, 4, 241, 18, 2, 67, 234, ++ 1, 35, 211, 24, 152, 69, 54, 211, 227, 123, 162, 123, 67, 234, 2, 34, ++ 72, 242, 1, 3, 154, 66, 50, 209, 28, 72, 4, 241, 19, 1, 3, 34, 249, ++ 247, 168, 249, 88, 187, 162, 125, 227, 125, 67, 234, 2, 35, 1, 43, 37, ++ 209, 71, 45, 31, 217, 148, 248, 45, 48, 148, 248, 44, 32, 27, 4, 67, ++ 234, 2, 99, 148, 248, 47, 32, 19, 67, 148, 248, 46, 32, 67, 234, 2, ++ 35, 72, 51, 155, 178, 227, 24, 152, 69, 12, 211, 14, 177, 1, 46, 13, ++ 209, 56, 70, 127, 177, 4, 241, 24, 1, 48, 34, 249, 247, 149, 249, 0, ++ 32, 189, 232, 240, 129, 111, 240, 23, 0, 189, 232, 240, 129, 111, 240, ++ 29, 0, 189, 232, 240, 129, 189, 232, 240, 129, 228, 20, 4, 0, 0, 72, ++ 112, 71, 80, 110, 4, 0, 0, 72, 112, 71, 136, 98, 4, 0, 1, 75, 67, 248, ++ 32, 16, 112, 71, 192, 110, 4, 0, 3, 75, 83, 248, 32, 0, 67, 26, 88, ++ 66, 64, 235, 3, 0, 112, 71, 192, 110, 4, 0, 1, 35, 112, 181, 4, 70, ++ 3, 116, 5, 70, 0, 38, 4, 224, 235, 106, 32, 70, 41, 107, 152, 71, 1, ++ 54, 227, 124, 8, 53, 158, 66, 246, 219, 0, 32, 32, 116, 112, 189, 112, ++ 181, 133, 105, 4, 70, 29, 177, 43, 104, 105, 104, 152, 71, 25, 224, ++ 134, 124, 1, 62, 15, 224, 35, 137, 99, 177, 99, 124, 19, 185, 50, 70, ++ 1, 62, 0, 224, 42, 70, 12, 50, 4, 235, 194, 2, 83, 104, 32, 70, 145, ++ 104, 152, 71, 1, 53, 163, 124, 157, 66, 236, 219, 99, 124, 131, 240, ++ 1, 3, 99, 116, 0, 32, 112, 189, 16, 181, 82, 8, 0, 35, 3, 224, 49, 248, ++ 2, 75, 1, 51, 0, 25, 147, 66, 249, 209, 16, 189, 48, 181, 19, 70, 12, ++ 70, 3, 224, 52, 248, 2, 91, 2, 59, 64, 25, 1, 43, 249, 216, 83, 8, 210, ++ 7, 68, 191, 17, 248, 19, 48, 192, 24, 131, 178, 3, 235, 16, 64, 0, 235, ++ 16, 64, 192, 67, 128, 178, 48, 189, 56, 181, 20, 70, 16, 34, 13, 70, ++ 255, 247, 215, 255, 5, 241, 18, 1, 164, 241, 18, 2, 189, 232, 56, 64, ++ 255, 247, 218, 191, 66, 104, 6, 75, 16, 181, 74, 97, 4, 70, 65, 96, ++ 0, 34, 24, 104, 2, 240, 68, 249, 35, 137, 1, 51, 35, 129, 16, 189, 16, ++ 111, 4, 0, 56, 181, 4, 137, 5, 70, 108, 177, 68, 104, 1, 34, 99, 105, ++ 33, 70, 67, 96, 5, 75, 24, 104, 2, 240, 49, 249, 0, 35, 99, 97, 43, ++ 137, 1, 59, 43, 129, 32, 70, 56, 189, 16, 111, 4, 0, 248, 181, 4, 70, ++ 71, 109, 255, 247, 229, 255, 5, 70, 72, 185, 227, 124, 19, 177, 32, ++ 70, 255, 247, 102, 255, 32, 70, 255, 247, 219, 255, 5, 70, 112, 177, ++ 102, 120, 102, 185, 95, 177, 103, 109, 32, 70, 161, 109, 42, 70, 1, ++ 35, 184, 71, 32, 177, 41, 70, 32, 70, 255, 247, 187, 255, 53, 70, 40, ++ 70, 248, 189, 16, 181, 4, 70, 255, 247, 180, 255, 35, 125, 67, 185, ++ 163, 124, 51, 177, 35, 124, 35, 185, 32, 70, 189, 232, 16, 64, 255, ++ 247, 84, 191, 16, 189, 45, 233, 248, 67, 6, 70, 12, 70, 143, 137, 2, ++ 177, 191, 16, 180, 248, 10, 128, 0, 37, 20, 224, 48, 70, 225, 137, 98, ++ 120, 255, 243, 54, 242, 129, 70, 152, 177, 32, 70, 73, 70, 251, 243, ++ 112, 243, 1, 53, 56, 177, 48, 70, 73, 70, 0, 34, 2, 240, 97, 248, 79, ++ 240, 255, 53, 7, 224, 5, 235, 8, 3, 187, 66, 230, 219, 0, 37, 1, 224, ++ 111, 240, 26, 5, 163, 124, 35, 177, 35, 124, 19, 185, 32, 70, 255, 247, ++ 36, 255, 40, 70, 189, 232, 248, 131, 66, 137, 40, 41, 40, 191, 40, 33, ++ 3, 70, 145, 66, 44, 191, 8, 70, 16, 70, 152, 129, 112, 71, 1, 117, 112, ++ 71, 0, 0, 5, 75, 0, 32, 27, 104, 4, 224, 138, 137, 128, 24, 138, 138, ++ 83, 248, 34, 16, 0, 41, 248, 209, 112, 71, 32, 7, 0, 0, 5, 75, 0, 32, ++ 27, 104, 3, 224, 138, 138, 1, 48, 83, 248, 34, 16, 0, 41, 249, 209, ++ 112, 71, 0, 191, 32, 7, 0, 0, 48, 181, 3, 70, 186, 177, 13, 72, 4, 104, ++ 208, 138, 84, 248, 32, 0, 144, 177, 12, 37, 5, 251, 1, 49, 13, 138, ++ 1, 61, 13, 130, 217, 136, 1, 57, 217, 128, 195, 138, 84, 248, 35, 48, ++ 3, 177, 27, 136, 211, 130, 0, 35, 195, 130, 48, 189, 16, 70, 48, 189, ++ 0, 191, 32, 7, 0, 0, 240, 181, 4, 120, 46, 79, 3, 70, 62, 93, 1, 48, ++ 22, 240, 32, 6, 247, 209, 43, 44, 1, 209, 3, 70, 5, 224, 45, 44, 8, ++ 191, 3, 70, 20, 191, 0, 38, 1, 38, 106, 185, 26, 120, 48, 42, 22, 209, ++ 90, 120, 120, 42, 1, 208, 88, 42, 2, 209, 2, 51, 16, 34, 15, 224, 1, ++ 51, 8, 34, 12, 224, 16, 42, 10, 209, 24, 120, 48, 40, 7, 209, 88, 120, ++ 120, 40, 1, 208, 88, 40, 2, 209, 2, 51, 0, 224, 10, 34, 0, 32, 17, 224, ++ 2, 251, 0, 68, 132, 66, 12, 210, 94, 185, 41, 179, 43, 70, 26, 120, ++ 1, 53, 186, 92, 18, 240, 68, 15, 248, 209, 11, 96, 79, 240, 255, 48, ++ 240, 189, 32, 70, 29, 70, 44, 120, 1, 51, 23, 248, 4, 192, 28, 240, ++ 68, 15, 12, 208, 28, 240, 4, 15, 1, 208, 48, 60, 5, 224, 28, 240, 2, ++ 15, 1, 208, 87, 60, 0, 224, 55, 60, 148, 66, 216, 211, 6, 177, 64, 66, ++ 25, 177, 13, 96, 240, 189, 79, 240, 255, 48, 240, 189, 22, 119, 135, ++ 0, 6, 34, 8, 181, 3, 73, 248, 247, 184, 255, 208, 241, 1, 0, 56, 191, ++ 0, 32, 8, 189, 236, 125, 135, 0, 6, 34, 8, 181, 3, 73, 248, 247, 172, ++ 255, 208, 241, 1, 0, 56, 191, 0, 32, 8, 189, 248, 125, 135, 0, 131, ++ 137, 112, 181, 14, 43, 132, 104, 64, 242, 130, 128, 163, 137, 129, 43, ++ 51, 209, 227, 137, 30, 10, 70, 234, 3, 38, 35, 138, 182, 178, 117, 11, ++ 8, 43, 3, 208, 77, 246, 134, 82, 147, 66, 19, 209, 162, 124, 19, 9, ++ 4, 43, 1, 209, 227, 124, 8, 224, 6, 43, 5, 209, 227, 124, 27, 9, 67, ++ 234, 2, 19, 219, 178, 0, 224, 0, 35, 91, 9, 2, 208, 79, 244, 128, 114, ++ 2, 224, 43, 70, 79, 244, 0, 114, 0, 41, 78, 208, 171, 66, 76, 208, 241, ++ 4, 201, 12, 65, 234, 67, 49, 137, 178, 13, 10, 69, 234, 1, 33, 225, ++ 129, 66, 244, 128, 98, 64, 224, 8, 43, 3, 208, 77, 246, 134, 82, 147, ++ 66, 52, 209, 162, 123, 19, 9, 4, 43, 1, 209, 227, 123, 8, 224, 6, 43, ++ 5, 209, 227, 123, 27, 9, 67, 234, 2, 19, 219, 178, 0, 224, 0, 35, 154, ++ 8, 20, 42, 26, 208, 9, 216, 12, 42, 23, 208, 1, 216, 10, 42, 2, 224, ++ 14, 42, 18, 208, 18, 42, 20, 209, 15, 224, 28, 42, 24, 208, 4, 216, ++ 22, 42, 10, 208, 26, 42, 12, 209, 18, 224, 30, 42, 16, 208, 46, 42, ++ 7, 209, 79, 244, 0, 98, 6, 35, 13, 224, 79, 244, 0, 98, 3, 35, 9, 224, ++ 91, 9, 79, 244, 0, 98, 5, 224, 0, 34, 19, 70, 2, 224, 79, 244, 0, 98, ++ 4, 35, 193, 137, 3, 240, 7, 4, 33, 240, 7, 1, 33, 67, 193, 129, 66, ++ 234, 3, 0, 112, 189, 0, 32, 112, 189, 0, 241, 52, 2, 52, 42, 8, 181, ++ 3, 70, 6, 217, 5, 72, 32, 33, 5, 74, 250, 243, 9, 243, 3, 72, 8, 189, ++ 4, 74, 67, 66, 82, 248, 35, 0, 8, 189, 158, 110, 4, 0, 247, 27, 4, 0, ++ 24, 121, 135, 0, 48, 181, 96, 185, 16, 224, 68, 120, 163, 28, 153, 66, ++ 11, 211, 5, 120, 149, 66, 9, 208, 192, 24, 111, 240, 1, 3, 27, 27, 201, ++ 24, 1, 41, 241, 216, 0, 32, 48, 189, 0, 32, 48, 189, 0, 0, 45, 233, ++ 240, 67, 137, 70, 161, 176, 144, 70, 1, 70, 32, 177, 3, 120, 19, 177, ++ 24, 72, 250, 243, 154, 242, 0, 38, 128, 37, 108, 70, 30, 224, 22, 240, ++ 15, 7, 7, 209, 32, 70, 41, 70, 19, 74, 51, 70, 250, 243, 205, 242, 36, ++ 24, 45, 26, 0, 45, 8, 221, 32, 70, 41, 70, 15, 74, 25, 248, 6, 48, 250, ++ 243, 194, 242, 36, 24, 45, 26, 15, 47, 5, 209, 11, 72, 105, 70, 250, ++ 243, 122, 242, 128, 37, 108, 70, 1, 54, 70, 69, 222, 209, 105, 70, 140, ++ 66, 2, 208, 5, 72, 250, 243, 111, 242, 33, 176, 189, 232, 240, 131, ++ 142, 31, 136, 0, 10, 28, 4, 0, 156, 31, 136, 0, 68, 78, 136, 0, 11, ++ 104, 154, 26, 154, 66, 10, 96, 2, 217, 3, 104, 1, 59, 3, 96, 112, 71, ++ 56, 181, 4, 70, 13, 70, 10, 34, 33, 70, 0, 32, 255, 247, 118, 253, 4, ++ 241, 12, 1, 165, 241, 12, 2, 189, 232, 56, 64, 255, 247, 121, 189, 127, ++ 181, 5, 70, 20, 70, 14, 70, 12, 34, 0, 33, 1, 168, 250, 243, 28, 242, ++ 5, 241, 16, 1, 4, 34, 2, 168, 248, 247, 150, 254, 5, 241, 12, 1, 4, ++ 34, 1, 168, 248, 247, 144, 254, 107, 122, 0, 32, 141, 248, 13, 48, 35, ++ 10, 67, 234, 4, 35, 1, 169, 12, 34, 141, 248, 12, 0, 173, 248, 14, 48, ++ 255, 247, 74, 253, 49, 70, 34, 70, 255, 247, 105, 253, 4, 176, 112, ++ 189, 112, 181, 138, 176, 4, 70, 14, 70, 21, 70, 0, 33, 36, 34, 1, 168, ++ 250, 243, 241, 241, 4, 241, 8, 1, 16, 34, 1, 168, 248, 247, 107, 254, ++ 4, 241, 24, 1, 16, 34, 5, 168, 248, 247, 101, 254, 98, 121, 35, 121, ++ 1, 169, 67, 234, 2, 35, 173, 248, 36, 48, 163, 121, 36, 34, 0, 32, 141, ++ 248, 39, 48, 255, 247, 32, 253, 49, 70, 42, 70, 255, 247, 63, 253, 10, ++ 176, 112, 189, 32, 40, 12, 191, 3, 32, 0, 32, 112, 71, 8, 181, 1, 34, ++ 252, 243, 54, 243, 24, 177, 67, 120, 5, 43, 152, 191, 0, 32, 8, 189, ++ 112, 181, 12, 70, 22, 70, 50, 73, 3, 34, 5, 70, 248, 247, 39, 254, 168, ++ 185, 235, 120, 8, 43, 86, 216, 223, 232, 3, 240, 74, 11, 13, 5, 8, 11, ++ 13, 85, 15, 0, 68, 242, 64, 3, 73, 224, 79, 244, 129, 67, 70, 224, 64, ++ 35, 68, 224, 128, 35, 66, 224, 32, 35, 64, 224, 40, 70, 36, 73, 3, 34, ++ 248, 247, 11, 254, 32, 185, 235, 120, 1, 43, 61, 209, 64, 34, 49, 224, ++ 40, 70, 32, 73, 3, 34, 248, 247, 0, 254, 56, 185, 235, 120, 0, 43, 50, ++ 209, 14, 185, 16, 35, 41, 224, 8, 35, 39, 224, 40, 70, 26, 73, 3, 34, ++ 248, 247, 242, 253, 96, 185, 235, 120, 1, 43, 3, 208, 21, 211, 2, 43, ++ 33, 209, 2, 224, 79, 244, 128, 98, 19, 224, 79, 244, 0, 99, 20, 224, ++ 40, 70, 17, 73, 3, 34, 248, 247, 223, 253, 152, 185, 235, 120, 1, 43, ++ 6, 208, 2, 211, 2, 43, 14, 209, 6, 224, 1, 32, 32, 96, 112, 189, 2, ++ 34, 34, 96, 24, 70, 112, 189, 4, 35, 35, 96, 1, 32, 112, 189, 0, 32, ++ 112, 189, 0, 32, 112, 189, 0, 191, 240, 20, 4, 0, 68, 29, 136, 0, 232, ++ 20, 4, 0, 244, 20, 4, 0, 236, 20, 4, 0, 1, 56, 192, 178, 10, 40, 154, ++ 191, 2, 75, 51, 248, 16, 0, 0, 32, 112, 71, 0, 191, 20, 28, 4, 0, 75, ++ 246, 255, 115, 3, 64, 64, 43, 20, 208, 128, 43, 18, 208, 16, 43, 16, ++ 208, 32, 43, 14, 208, 179, 245, 128, 95, 11, 208, 179, 245, 0, 79, 8, ++ 208, 179, 245, 128, 127, 7, 208, 163, 245, 0, 115, 88, 66, 64, 235, ++ 3, 0, 112, 71, 1, 32, 112, 71, 1, 32, 112, 71, 73, 242, 240, 51, 3, ++ 64, 24, 28, 24, 191, 1, 32, 112, 71, 45, 233, 240, 71, 170, 176, 51, ++ 156, 128, 70, 15, 70, 13, 241, 10, 0, 17, 70, 26, 70, 153, 70, 248, ++ 247, 146, 253, 42, 170, 229, 0, 2, 235, 9, 3, 3, 248, 158, 92, 45, 18, ++ 20, 241, 31, 10, 72, 191, 4, 241, 62, 10, 3, 248, 157, 92, 9, 241, 4, ++ 9, 79, 234, 106, 26, 50, 156, 0, 35, 21, 224, 43, 18, 141, 248, 9, 48, ++ 0, 35, 34, 174, 1, 147, 64, 70, 75, 70, 57, 70, 2, 170, 141, 248, 8, ++ 80, 0, 150, 253, 243, 148, 242, 32, 70, 49, 70, 32, 34, 248, 247, 105, ++ 253, 32, 52, 43, 70, 93, 28, 83, 69, 230, 219, 42, 176, 189, 232, 240, ++ 135, 248, 181, 7, 156, 208, 248, 172, 96, 100, 4, 221, 248, 24, 192, ++ 100, 12, 22, 177, 18, 240, 64, 79, 4, 209, 31, 1, 205, 25, 146, 25, ++ 170, 96, 8, 224, 149, 15, 31, 1, 34, 240, 64, 66, 68, 234, 5, 68, 150, ++ 25, 205, 25, 174, 96, 208, 248, 176, 32, 234, 96, 220, 248, 0, 32, 202, ++ 81, 108, 96, 130, 104, 210, 7, 14, 213, 27, 1, 205, 24, 168, 104, 238, ++ 104, 202, 88, 112, 64, 107, 104, 80, 64, 88, 64, 253, 243, 226, 247, ++ 16, 177, 68, 244, 128, 36, 108, 96, 248, 189, 130, 107, 129, 104, 16, ++ 181, 20, 104, 17, 240, 1, 15, 4, 244, 64, 52, 68, 240, 1, 3, 4, 191, ++ 68, 244, 0, 99, 67, 240, 1, 3, 137, 7, 144, 248, 181, 16, 72, 191, 67, ++ 244, 128, 99, 67, 234, 129, 67, 144, 248, 186, 16, 35, 244, 96, 3, 67, ++ 234, 65, 83, 144, 248, 187, 16, 35, 240, 64, 115, 67, 234, 1, 99, 144, ++ 248, 50, 16, 9, 177, 67, 234, 65, 35, 144, 248, 222, 16, 9, 177, 67, ++ 244, 0, 115, 208, 248, 160, 16, 67, 234, 65, 3, 19, 96, 16, 189, 176, ++ 248, 160, 48, 11, 128, 176, 248, 148, 0, 16, 128, 112, 71, 176, 248, ++ 70, 16, 16, 181, 3, 70, 209, 177, 66, 107, 20, 105, 208, 248, 196, 32, ++ 128, 110, 20, 64, 36, 26, 20, 64, 36, 9, 164, 178, 163, 248, 210, 64, ++ 179, 248, 72, 32, 7, 224, 216, 108, 80, 248, 34, 0, 64, 185, 1, 50, ++ 72, 30, 2, 64, 146, 178, 162, 66, 245, 209, 0, 32, 16, 189, 8, 70, 16, ++ 189, 45, 233, 240, 67, 176, 248, 70, 64, 36, 185, 12, 96, 79, 240, 255, ++ 48, 189, 232, 240, 131, 0, 37, 1, 43, 209, 248, 0, 192, 13, 96, 176, ++ 248, 210, 80, 2, 209, 176, 248, 74, 48, 30, 224, 208, 248, 52, 128, ++ 208, 248, 196, 96, 216, 248, 16, 48, 216, 248, 20, 144, 208, 248, 200, ++ 128, 135, 110, 51, 64, 9, 234, 8, 8, 219, 27, 199, 235, 8, 7, 51, 64, ++ 62, 64, 27, 9, 54, 9, 155, 178, 182, 178, 179, 66, 160, 248, 210, 48, ++ 3, 208, 115, 30, 1, 60, 35, 64, 155, 178, 13, 177, 0, 36, 19, 224, 176, ++ 248, 74, 64, 156, 66, 249, 210, 20, 224, 198, 108, 86, 248, 37, 96, ++ 38, 177, 100, 69, 10, 218, 66, 248, 36, 96, 1, 52, 176, 248, 70, 96, ++ 1, 53, 1, 62, 53, 64, 173, 178, 157, 66, 238, 209, 12, 96, 0, 32, 189, ++ 232, 240, 131, 79, 240, 255, 48, 189, 232, 240, 131, 176, 248, 108, ++ 16, 16, 181, 3, 70, 217, 177, 130, 107, 20, 105, 208, 248, 204, 32, ++ 208, 248, 144, 0, 20, 64, 36, 26, 20, 64, 36, 9, 164, 178, 163, 248, ++ 208, 64, 179, 248, 110, 32, 7, 224, 88, 111, 80, 248, 34, 0, 64, 185, ++ 1, 50, 72, 30, 2, 64, 146, 178, 162, 66, 245, 209, 0, 32, 16, 189, 8, ++ 70, 16, 189, 176, 248, 108, 32, 176, 248, 112, 16, 176, 248, 110, 48, ++ 1, 58, 203, 26, 2, 234, 3, 0, 112, 71, 16, 181, 160, 177, 131, 104, ++ 35, 234, 1, 1, 10, 67, 211, 7, 12, 213, 67, 107, 25, 104, 65, 244, 0, ++ 100, 28, 96, 67, 107, 28, 104, 20, 244, 0, 111, 20, 191, 25, 96, 34, ++ 240, 1, 2, 130, 96, 0, 224, 2, 70, 16, 70, 16, 189, 3, 70, 176, 248, ++ 70, 0, 240, 181, 0, 40, 89, 208, 1, 41, 179, 248, 72, 32, 2, 209, 179, ++ 248, 74, 64, 34, 224, 179, 248, 210, 64, 93, 107, 162, 66, 10, 209, ++ 44, 105, 211, 248, 196, 96, 159, 110, 52, 64, 228, 27, 52, 64, 36, 9, ++ 164, 178, 163, 248, 210, 64, 3, 41, 16, 209, 105, 105, 211, 248, 200, ++ 80, 41, 64, 157, 110, 73, 27, 211, 248, 196, 80, 137, 178, 41, 64, 9, ++ 9, 140, 66, 3, 208, 76, 30, 1, 56, 4, 64, 164, 178, 10, 177, 0, 32, ++ 26, 224, 179, 248, 74, 16, 161, 66, 249, 210, 38, 224, 217, 107, 21, ++ 1, 73, 25, 136, 104, 72, 104, 18, 72, 136, 96, 217, 107, 77, 25, 217, ++ 108, 232, 96, 0, 37, 81, 248, 34, 0, 65, 248, 34, 80, 179, 248, 70, ++ 16, 1, 50, 1, 57, 10, 64, 146, 178, 162, 66, 1, 208, 0, 40, 229, 208, ++ 179, 248, 70, 16, 179, 248, 74, 64, 163, 248, 72, 32, 162, 26, 76, 30, ++ 34, 64, 137, 26, 1, 57, 89, 96, 240, 189, 16, 70, 240, 189, 0, 191, ++ 239, 190, 173, 222, 192, 248, 188, 16, 0, 32, 112, 71, 177, 245, 128, ++ 127, 42, 208, 7, 216, 1, 41, 30, 208, 26, 211, 2, 41, 30, 208, 3, 41, ++ 51, 209, 30, 224, 64, 242, 3, 19, 153, 66, 38, 208, 7, 216, 64, 242, ++ 1, 19, 153, 66, 27, 208, 177, 245, 129, 127, 38, 209, 26, 224, 64, 242, ++ 5, 19, 153, 66, 28, 208, 64, 242, 7, 19, 153, 66, 29, 209, 26, 224, ++ 128, 248, 183, 32, 112, 71, 128, 248, 184, 32, 112, 71, 128, 248, 185, ++ 32, 112, 71, 128, 248, 182, 32, 112, 71, 128, 248, 186, 32, 112, 71, ++ 128, 248, 187, 32, 112, 71, 128, 248, 181, 32, 112, 71, 128, 248, 214, ++ 32, 112, 71, 128, 248, 50, 32, 112, 71, 128, 248, 222, 32, 112, 71, ++ 248, 181, 4, 70, 15, 70, 180, 248, 110, 80, 180, 248, 112, 48, 171, ++ 66, 83, 208, 180, 248, 208, 48, 157, 66, 12, 209, 163, 107, 212, 248, ++ 204, 32, 27, 105, 212, 248, 144, 16, 19, 64, 91, 26, 19, 64, 27, 9, ++ 155, 178, 164, 248, 208, 48, 15, 185, 157, 66, 65, 208, 99, 111, 0, ++ 34, 83, 248, 37, 96, 67, 248, 37, 32, 31, 75, 49, 70, 24, 104, 1, 34, ++ 1, 240, 171, 251, 148, 248, 50, 48, 19, 185, 148, 248, 222, 48, 155, ++ 177, 182, 241, 0, 79, 16, 209, 180, 248, 108, 48, 1, 53, 90, 30, 21, ++ 64, 180, 248, 112, 16, 173, 178, 164, 248, 110, 80, 77, 27, 42, 64, ++ 155, 26, 1, 59, 196, 248, 216, 48, 191, 231, 33, 108, 42, 1, 137, 24, ++ 139, 104, 14, 75, 1, 53, 139, 96, 33, 108, 138, 24, 211, 96, 180, 248, ++ 108, 48, 180, 248, 112, 16, 90, 30, 21, 64, 173, 178, 164, 248, 110, ++ 80, 77, 27, 42, 64, 155, 26, 1, 59, 196, 248, 216, 48, 2, 224, 0, 38, ++ 0, 224, 62, 70, 48, 70, 248, 189, 16, 111, 4, 0, 239, 190, 173, 222, ++ 176, 248, 108, 48, 11, 177, 255, 247, 149, 191, 24, 70, 112, 71, 56, ++ 181, 5, 70, 208, 248, 188, 0, 88, 177, 3, 120, 75, 177, 250, 243, 42, ++ 246, 4, 70, 88, 185, 213, 248, 188, 0, 1, 33, 255, 247, 158, 250, 5, ++ 224, 1, 36, 3, 224, 168, 106, 0, 34, 1, 240, 216, 250, 1, 33, 40, 70, ++ 255, 247, 222, 255, 1, 70, 0, 40, 244, 209, 52, 185, 213, 248, 188, ++ 0, 33, 70, 189, 232, 56, 64, 255, 247, 136, 186, 56, 189, 45, 233, 240, ++ 65, 4, 70, 0, 37, 32, 70, 0, 33, 255, 247, 202, 255, 6, 70, 0, 40, 90, ++ 208, 163, 104, 130, 104, 19, 240, 128, 15, 8, 208, 212, 248, 160, 48, ++ 91, 8, 2, 51, 50, 248, 19, 48, 4, 51, 19, 128, 0, 224, 19, 136, 212, ++ 248, 160, 16, 180, 248, 148, 32, 88, 24, 144, 66, 56, 191, 2, 70, 148, ++ 248, 50, 0, 72, 177, 181, 137, 170, 66, 2, 216, 178, 129, 0, 34, 0, ++ 224, 82, 27, 166, 248, 80, 32, 0, 224, 178, 129, 180, 248, 148, 112, ++ 207, 27, 255, 24, 0, 47, 47, 221, 163, 104, 91, 6, 23, 213, 160, 106, ++ 49, 70, 0, 34, 34, 224, 3, 136, 168, 248, 20, 48, 180, 248, 148, 48, ++ 148, 248, 50, 16, 159, 66, 180, 191, 58, 70, 26, 70, 17, 177, 170, 66, ++ 40, 191, 42, 70, 255, 26, 0, 47, 130, 129, 2, 220, 8, 224, 176, 70, ++ 0, 224, 128, 70, 32, 70, 0, 33, 255, 247, 122, 255, 0, 40, 226, 209, ++ 162, 104, 18, 240, 4, 2, 7, 209, 160, 106, 49, 70, 1, 240, 102, 250, ++ 227, 104, 1, 51, 227, 96, 157, 231, 48, 70, 189, 232, 240, 129, 56, ++ 181, 176, 248, 72, 32, 176, 248, 74, 48, 4, 70, 154, 66, 13, 70, 7, ++ 209, 56, 189, 163, 104, 26, 7, 3, 212, 160, 106, 1, 34, 1, 240, 78, ++ 250, 41, 70, 32, 70, 255, 247, 70, 254, 1, 70, 0, 40, 241, 209, 56, ++ 189, 45, 233, 255, 71, 0, 35, 3, 147, 4, 70, 14, 70, 144, 70, 176, 248, ++ 74, 80, 11, 70, 76, 224, 67, 73, 159, 138, 9, 104, 5, 241, 1, 10, 81, ++ 248, 39, 112, 180, 248, 70, 16, 180, 248, 72, 144, 1, 57, 10, 234, 1, ++ 10, 202, 69, 154, 104, 152, 137, 179, 248, 16, 192, 98, 208, 28, 235, ++ 0, 0, 52, 208, 179, 66, 79, 240, 0, 14, 8, 191, 79, 240, 0, 67, 205, ++ 248, 12, 224, 8, 191, 3, 147, 87, 185, 3, 155, 67, 240, 128, 78, 205, ++ 248, 12, 224, 184, 241, 0, 15, 2, 208, 67, 240, 192, 67, 3, 147, 141, ++ 66, 3, 209, 3, 155, 67, 240, 128, 83, 3, 147, 148, 248, 214, 48, 27, ++ 177, 3, 155, 67, 244, 128, 35, 3, 147, 3, 171, 0, 147, 1, 144, 43, 70, ++ 32, 70, 225, 107, 255, 247, 200, 252, 180, 248, 70, 48, 1, 53, 1, 59, ++ 29, 64, 180, 248, 72, 48, 173, 178, 171, 66, 42, 208, 59, 70, 0, 43, ++ 176, 209, 3, 155, 89, 0, 9, 212, 180, 248, 70, 32, 105, 30, 1, 58, 10, ++ 64, 225, 107, 18, 1, 67, 240, 192, 67, 139, 80, 180, 248, 70, 48, 104, ++ 30, 90, 30, 225, 108, 16, 64, 65, 248, 32, 96, 164, 248, 74, 80, 184, ++ 241, 0, 15, 4, 208, 160, 110, 97, 107, 0, 235, 5, 16, 72, 96, 180, 248, ++ 72, 16, 0, 32, 109, 26, 42, 64, 155, 26, 1, 59, 99, 96, 11, 224, 160, ++ 106, 49, 70, 1, 34, 1, 240, 191, 249, 0, 35, 99, 96, 99, 105, 79, 240, ++ 255, 48, 1, 51, 99, 97, 4, 176, 189, 232, 240, 135, 0, 191, 32, 7, 0, ++ 0, 45, 233, 240, 79, 0, 35, 143, 176, 13, 147, 131, 104, 144, 248, 50, ++ 16, 144, 248, 222, 32, 3, 240, 16, 11, 4, 70, 187, 241, 0, 15, 12, 191, ++ 79, 240, 1, 11, 79, 240, 16, 11, 0, 41, 12, 191, 1, 35, 2, 35, 162, ++ 177, 208, 248, 188, 48, 27, 177, 26, 120, 10, 177, 218, 137, 1, 224, ++ 180, 248, 148, 32, 17, 177, 194, 245, 0, 98, 1, 33, 2, 245, 244, 114, ++ 79, 244, 246, 115, 3, 50, 146, 251, 243, 242, 139, 24, 180, 248, 108, ++ 32, 180, 248, 112, 96, 180, 248, 110, 16, 85, 30, 113, 26, 41, 64, 195, ++ 241, 1, 0, 137, 178, 65, 26, 212, 248, 156, 0, 145, 251, 243, 241, 146, ++ 251, 243, 243, 131, 66, 148, 191, 201, 24, 9, 24, 180, 248, 148, 48, ++ 8, 145, 204, 43, 3, 217, 212, 248, 152, 32, 5, 146, 1, 224, 0, 35, 5, ++ 147, 79, 240, 0, 10, 246, 224, 212, 248, 188, 0, 120, 177, 3, 120, 107, ++ 177, 3, 137, 4, 43, 7, 216, 4, 241, 32, 0, 126, 73, 249, 243, 142, 245, ++ 120, 185, 212, 248, 188, 0, 255, 247, 157, 248, 8, 224, 180, 248, 148, ++ 16, 5, 154, 1, 57, 89, 68, 160, 106, 137, 24, 1, 240, 33, 249, 5, 70, ++ 112, 185, 186, 241, 0, 15, 6, 209, 32, 70, 253, 243, 245, 241, 0, 48, ++ 24, 191, 1, 32, 0, 224, 0, 32, 35, 105, 1, 51, 35, 97, 206, 224, 163, ++ 104, 19, 240, 16, 3, 5, 208, 131, 104, 11, 241, 255, 50, 195, 235, 11, ++ 3, 19, 64, 5, 154, 155, 24, 5, 208, 170, 104, 210, 24, 170, 96, 170, ++ 137, 211, 26, 171, 129, 213, 248, 8, 128, 99, 111, 0, 39, 200, 248, ++ 0, 112, 67, 248, 38, 80, 96, 75, 41, 70, 24, 104, 58, 70, 1, 240, 137, ++ 249, 148, 248, 50, 48, 193, 70, 0, 43, 54, 209, 180, 248, 148, 112, ++ 148, 248, 222, 80, 79, 240, 0, 67, 0, 45, 12, 191, 61, 70, 79, 244, ++ 246, 117, 13, 147, 197, 241, 0, 8, 127, 27, 180, 248, 108, 32, 123, ++ 25, 1, 58, 150, 66, 3, 209, 13, 154, 66, 240, 128, 82, 13, 146, 13, ++ 170, 171, 66, 212, 191, 1, 147, 1, 149, 0, 146, 51, 70, 74, 70, 32, ++ 70, 33, 108, 255, 247, 182, 251, 180, 248, 108, 48, 1, 54, 1, 59, 30, ++ 64, 0, 47, 182, 178, 169, 68, 115, 221, 99, 111, 79, 240, 0, 66, 67, ++ 248, 38, 32, 0, 35, 13, 147, 71, 68, 215, 231, 180, 248, 108, 48, 13, ++ 151, 1, 59, 158, 66, 4, 191, 79, 240, 128, 83, 13, 147, 13, 153, 170, ++ 137, 14, 171, 65, 240, 0, 65, 67, 248, 4, 29, 0, 147, 1, 146, 51, 70, ++ 66, 70, 32, 70, 33, 108, 255, 247, 140, 251, 181, 248, 82, 112, 180, ++ 248, 108, 48, 213, 248, 64, 144, 213, 248, 68, 128, 148, 248, 222, 80, ++ 1, 54, 0, 45, 12, 191, 61, 70, 79, 244, 246, 117, 1, 59, 30, 64, 197, ++ 241, 0, 12, 205, 248, 36, 160, 182, 178, 127, 27, 226, 70, 98, 111, ++ 79, 240, 0, 65, 66, 248, 38, 16, 0, 34, 13, 146, 180, 248, 108, 32, ++ 123, 25, 1, 58, 150, 66, 4, 191, 79, 240, 128, 82, 13, 146, 13, 170, ++ 171, 66, 212, 191, 2, 147, 2, 149, 0, 150, 205, 248, 44, 144, 205, 248, ++ 48, 128, 1, 146, 11, 171, 12, 203, 33, 108, 32, 70, 253, 243, 203, 240, ++ 180, 248, 108, 48, 1, 54, 1, 59, 30, 64, 0, 47, 182, 178, 14, 221, 0, ++ 35, 205, 248, 28, 128, 6, 147, 221, 233, 6, 35, 66, 234, 9, 2, 82, 25, ++ 67, 241, 0, 3, 152, 70, 145, 70, 87, 68, 199, 231, 221, 248, 36, 160, ++ 10, 241, 1, 10, 8, 154, 146, 69, 127, 244, 5, 175, 0, 32, 212, 248, ++ 144, 32, 163, 107, 164, 248, 112, 96, 2, 235, 6, 22, 94, 96, 15, 176, ++ 189, 232, 240, 143, 228, 46, 4, 0, 16, 111, 4, 0, 0, 72, 112, 71, 192, ++ 98, 4, 0, 0, 72, 112, 71, 8, 48, 4, 0, 0, 32, 112, 71, 8, 181, 255, ++ 247, 243, 255, 65, 120, 2, 120, 1, 35, 19, 250, 1, 241, 19, 250, 2, ++ 242, 10, 67, 129, 120, 139, 64, 66, 234, 3, 0, 8, 189, 45, 233, 247, ++ 67, 79, 240, 0, 8, 4, 70, 15, 70, 22, 70, 153, 70, 69, 70, 1, 35, 3, ++ 250, 8, 243, 19, 234, 9, 15, 43, 208, 99, 105, 32, 70, 34, 43, 10, 221, ++ 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 4, 240, 35, 218, 1, ++ 70, 32, 70, 0, 224, 0, 33, 79, 244, 196, 98, 4, 240, 107, 217, 192, ++ 248, 0, 128, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 91, 6, 7, 213, ++ 64, 246, 39, 1, 0, 34, 4, 240, 13, 218, 1, 70, 32, 70, 0, 224, 0, 33, ++ 64, 242, 36, 98, 4, 240, 85, 217, 3, 104, 29, 67, 8, 241, 1, 8, 184, ++ 241, 31, 15, 200, 209, 157, 248, 40, 48, 75, 177, 69, 177, 1, 35, 0, ++ 147, 32, 70, 43, 70, 57, 70, 50, 70, 255, 247, 180, 255, 5, 67, 40, ++ 70, 189, 232, 254, 131, 129, 104, 56, 181, 64, 246, 60, 3, 153, 66, ++ 4, 70, 40, 209, 195, 104, 11, 43, 3, 216, 79, 240, 168, 113, 153, 64, ++ 1, 212, 12, 43, 31, 217, 73, 242, 24, 35, 154, 66, 5, 208, 73, 246, ++ 64, 67, 154, 66, 23, 209, 12, 77, 0, 224, 12, 77, 99, 105, 32, 70, 34, ++ 43, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, 4, 240, ++ 199, 217, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 220, 98, 4, 240, 15, ++ 217, 5, 96, 56, 189, 0, 191, 153, 1, 1, 0, 182, 1, 1, 0, 56, 181, 67, ++ 105, 4, 70, 34, 43, 10, 221, 195, 105, 93, 6, 7, 213, 64, 246, 39, 1, ++ 0, 34, 4, 240, 171, 217, 1, 70, 32, 70, 1, 224, 32, 70, 0, 33, 79, 244, ++ 192, 98, 4, 240, 242, 216, 5, 104, 32, 70, 5, 240, 124, 5, 173, 8, 255, ++ 247, 71, 255, 3, 224, 131, 120, 171, 66, 7, 208, 12, 48, 16, 177, 3, ++ 136, 0, 43, 247, 209, 32, 70, 255, 247, 63, 255, 3, 136, 79, 244, 122, ++ 112, 88, 67, 56, 189, 112, 181, 4, 70, 22, 70, 13, 70, 1, 240, 195, ++ 248, 148, 248, 96, 35, 9, 75, 0, 40, 24, 191, 1, 35, 1, 42, 148, 248, ++ 104, 35, 8, 191, 212, 248, 92, 51, 1, 42, 12, 191, 212, 248, 100, 35, ++ 111, 240, 0, 66, 43, 96, 50, 96, 112, 189, 0, 191, 1, 0, 130, 14, 45, ++ 233, 255, 71, 29, 70, 67, 105, 144, 70, 0, 34, 34, 43, 4, 70, 137, 70, ++ 2, 146, 3, 146, 9, 221, 195, 105, 95, 6, 6, 213, 64, 246, 39, 1, 4, ++ 240, 89, 217, 1, 70, 32, 70, 1, 224, 32, 70, 0, 33, 79, 244, 196, 98, ++ 4, 240, 160, 216, 5, 96, 35, 106, 32, 70, 12, 43, 99, 105, 22, 221, ++ 34, 43, 10, 221, 227, 105, 94, 6, 7, 213, 64, 246, 39, 1, 0, 34, 4, ++ 240, 64, 217, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 197, 98, 4, 240, ++ 136, 216, 7, 104, 63, 12, 191, 5, 191, 13, 20, 224, 34, 43, 10, 221, ++ 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, 4, 240, 41, 217, 1, ++ 70, 32, 70, 0, 224, 0, 33, 79, 244, 197, 98, 4, 240, 113, 216, 7, 104, ++ 63, 10, 255, 178, 1, 35, 171, 64, 0, 38, 32, 70, 73, 70, 66, 70, 0, ++ 150, 255, 247, 215, 254, 5, 70, 1, 34, 18, 250, 6, 243, 43, 66, 7, 208, ++ 0, 146, 32, 70, 73, 70, 66, 70, 255, 247, 203, 254, 37, 234, 0, 5, 1, ++ 54, 31, 46, 239, 209, 32, 70, 2, 169, 3, 170, 255, 247, 117, 255, 2, ++ 155, 0, 38, 37, 234, 3, 10, 53, 70, 1, 35, 171, 64, 19, 234, 10, 15, ++ 8, 208, 32, 70, 73, 70, 66, 70, 235, 178, 255, 247, 131, 255, 134, 66, ++ 56, 191, 6, 70, 1, 53, 31, 45, 238, 209, 184, 28, 128, 25, 4, 176, 189, ++ 232, 240, 135, 45, 233, 240, 65, 6, 158, 4, 70, 21, 70, 31, 70, 255, ++ 247, 142, 254, 0, 40, 112, 208, 16, 234, 6, 8, 0, 234, 7, 7, 44, 208, ++ 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, ++ 39, 1, 0, 34, 4, 240, 201, 216, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, ++ 28, 98, 4, 240, 17, 216, 99, 105, 6, 70, 34, 43, 32, 70, 10, 221, 227, ++ 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 4, 240, 180, 216, 1, 70, ++ 32, 70, 0, 224, 0, 33, 64, 242, 28, 98, 3, 240, 252, 223, 3, 104, 67, ++ 234, 8, 3, 51, 96, 0, 47, 43, 208, 99, 105, 32, 70, 34, 43, 10, 221, ++ 227, 105, 94, 6, 7, 213, 64, 246, 39, 1, 0, 34, 4, 240, 154, 216, 1, ++ 70, 32, 70, 0, 224, 0, 33, 79, 244, 195, 98, 3, 240, 226, 223, 99, 105, ++ 6, 70, 34, 43, 32, 70, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, ++ 1, 0, 34, 4, 240, 133, 216, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 195, ++ 98, 3, 240, 205, 223, 3, 104, 31, 67, 55, 96, 7, 155, 154, 3, 5, 212, ++ 189, 232, 240, 129, 10, 32, 253, 243, 140, 245, 1, 224, 64, 242, 221, ++ 84, 213, 248, 224, 49, 155, 3, 1, 212, 1, 60, 243, 209, 189, 232, 240, ++ 129, 247, 181, 30, 70, 67, 105, 4, 70, 34, 43, 15, 70, 21, 70, 11, 221, ++ 195, 105, 90, 6, 8, 213, 64, 246, 39, 1, 0, 34, 4, 240, 87, 216, 0, ++ 151, 1, 70, 32, 70, 2, 224, 0, 151, 32, 70, 0, 33, 79, 240, 255, 51, ++ 79, 244, 202, 98, 4, 240, 8, 218, 99, 105, 34, 43, 12, 221, 227, 105, ++ 91, 6, 9, 213, 64, 246, 39, 1, 32, 70, 0, 34, 4, 240, 62, 216, 0, 150, ++ 1, 70, 32, 70, 2, 224, 0, 150, 32, 70, 0, 33, 64, 242, 84, 98, 43, 70, ++ 4, 240, 240, 217, 254, 189, 247, 181, 30, 70, 67, 105, 4, 70, 34, 43, ++ 15, 70, 21, 70, 11, 221, 195, 105, 91, 6, 8, 213, 64, 246, 39, 1, 0, ++ 34, 4, 240, 33, 216, 0, 151, 1, 70, 32, 70, 2, 224, 0, 151, 32, 70, ++ 0, 33, 79, 240, 255, 51, 79, 244, 203, 98, 4, 240, 210, 217, 99, 105, ++ 34, 43, 12, 221, 227, 105, 89, 6, 9, 213, 64, 246, 39, 1, 32, 70, 0, ++ 34, 4, 240, 8, 216, 0, 150, 1, 70, 32, 70, 2, 224, 0, 150, 32, 70, 0, ++ 33, 64, 242, 92, 98, 43, 70, 4, 240, 186, 217, 254, 189, 247, 181, 30, ++ 70, 67, 105, 4, 70, 34, 43, 15, 70, 21, 70, 11, 221, 195, 105, 89, 6, ++ 8, 213, 64, 246, 39, 1, 0, 34, 3, 240, 235, 223, 0, 151, 1, 70, 32, ++ 70, 2, 224, 0, 151, 32, 70, 0, 33, 79, 240, 255, 51, 79, 244, 204, 98, ++ 4, 240, 156, 217, 99, 105, 34, 43, 12, 221, 227, 105, 90, 6, 9, 213, ++ 64, 246, 39, 1, 32, 70, 0, 34, 3, 240, 210, 223, 0, 150, 1, 70, 32, ++ 70, 2, 224, 0, 150, 32, 70, 0, 33, 64, 242, 100, 98, 43, 70, 4, 240, ++ 132, 217, 254, 189, 67, 105, 19, 181, 34, 43, 4, 70, 13, 221, 195, 105, ++ 91, 6, 10, 213, 64, 246, 39, 1, 0, 34, 3, 240, 184, 223, 79, 244, 128, ++ 99, 1, 70, 0, 147, 32, 70, 4, 224, 79, 244, 128, 99, 0, 147, 32, 70, ++ 0, 33, 79, 244, 192, 98, 4, 240, 103, 217, 28, 189, 45, 233, 240, 79, ++ 1, 58, 210, 178, 8, 42, 133, 176, 4, 70, 154, 70, 21, 216, 55, 75, 158, ++ 92, 55, 75, 159, 92, 55, 75, 19, 248, 2, 144, 54, 75, 155, 92, 3, 147, ++ 54, 75, 19, 248, 2, 176, 53, 75, 155, 92, 2, 147, 53, 75, 19, 248, 2, ++ 128, 52, 75, 157, 92, 7, 224, 0, 37, 168, 70, 2, 149, 171, 70, 3, 149, ++ 169, 70, 47, 70, 46, 70, 99, 105, 34, 43, 13, 221, 227, 105, 91, 6, ++ 10, 213, 64, 246, 39, 1, 32, 70, 0, 34, 3, 240, 117, 223, 205, 248, ++ 0, 144, 1, 70, 32, 70, 3, 224, 205, 248, 0, 144, 32, 70, 0, 33, 79, ++ 240, 255, 51, 79, 244, 203, 98, 4, 240, 36, 217, 99, 105, 34, 43, 15, ++ 221, 227, 105, 88, 6, 12, 213, 64, 246, 39, 1, 32, 70, 0, 34, 3, 240, ++ 90, 223, 7, 234, 10, 3, 179, 64, 1, 70, 0, 147, 32, 70, 5, 224, 7, 234, ++ 10, 3, 179, 64, 32, 70, 0, 147, 0, 33, 23, 250, 6, 243, 64, 242, 92, ++ 98, 4, 240, 5, 217, 3, 155, 131, 177, 72, 250, 11, 242, 8, 234, 10, ++ 8, 72, 250, 11, 251, 32, 70, 2, 156, 41, 70, 162, 64, 11, 250, 4, 243, ++ 5, 176, 189, 232, 240, 79, 255, 247, 3, 191, 5, 176, 189, 232, 240, ++ 143, 0, 191, 237, 46, 4, 0, 246, 46, 4, 0, 255, 46, 4, 0, 8, 47, 4, ++ 0, 17, 47, 4, 0, 124, 49, 4, 0, 136, 47, 4, 0, 145, 47, 4, 0, 45, 233, ++ 248, 67, 4, 70, 137, 70, 3, 240, 100, 222, 0, 33, 6, 70, 32, 70, 4, ++ 240, 173, 217, 128, 70, 32, 70, 255, 247, 185, 252, 7, 70, 32, 70, 4, ++ 240, 83, 216, 73, 70, 5, 70, 66, 70, 59, 120, 32, 70, 255, 247, 154, ++ 253, 11, 35, 2, 48, 88, 67, 7, 75, 49, 70, 235, 24, 179, 251, 245, 245, ++ 69, 67, 32, 70, 4, 240, 146, 217, 10, 35, 181, 251, 243, 245, 168, 178, ++ 189, 232, 248, 131, 63, 66, 15, 0, 56, 181, 67, 105, 4, 70, 34, 43, ++ 10, 221, 195, 105, 93, 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 229, ++ 222, 1, 70, 32, 70, 1, 224, 32, 70, 0, 33, 64, 242, 20, 98, 3, 240, ++ 44, 222, 99, 105, 5, 104, 34, 43, 32, 70, 10, 221, 227, 105, 89, 6, ++ 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 207, 222, 1, 70, 32, 70, 0, 224, ++ 0, 33, 64, 242, 20, 98, 3, 240, 23, 222, 3, 104, 157, 66, 20, 208, 99, ++ 105, 32, 70, 34, 43, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, ++ 1, 0, 34, 3, 240, 184, 222, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 20, ++ 98, 3, 240, 0, 222, 5, 104, 40, 70, 56, 189, 56, 181, 28, 70, 29, 104, ++ 255, 247, 182, 255, 3, 70, 35, 96, 64, 27, 56, 189, 45, 233, 247, 67, ++ 0, 37, 4, 70, 15, 70, 22, 70, 152, 70, 157, 248, 40, 144, 1, 149, 255, ++ 247, 166, 255, 1, 144, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 91, ++ 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 139, 222, 1, 70, 32, 70, 0, ++ 224, 0, 33, 79, 244, 194, 98, 3, 240, 211, 221, 185, 241, 1, 15, 0, ++ 104, 1, 209, 8, 185, 14, 224, 80, 185, 184, 235, 69, 31, 9, 217, 32, ++ 70, 57, 70, 50, 70, 1, 171, 255, 247, 198, 255, 45, 24, 217, 231, 0, ++ 32, 0, 224, 1, 32, 11, 155, 109, 1, 29, 96, 189, 232, 254, 131, 45, ++ 233, 240, 79, 0, 38, 133, 176, 128, 70, 137, 70, 146, 70, 3, 150, 1, ++ 37, 3, 175, 64, 70, 73, 70, 82, 70, 67, 246, 152, 35, 0, 149, 1, 151, ++ 255, 247, 178, 255, 4, 70, 136, 185, 141, 232, 129, 0, 64, 35, 64, 70, ++ 73, 70, 82, 70, 221, 248, 12, 176, 255, 247, 166, 255, 3, 155, 56, 185, ++ 155, 68, 94, 68, 67, 246, 151, 35, 158, 66, 224, 217, 40, 70, 0, 224, ++ 32, 70, 5, 176, 189, 232, 240, 143, 45, 233, 248, 67, 153, 70, 67, 105, ++ 4, 70, 34, 43, 14, 70, 21, 70, 221, 248, 32, 128, 9, 159, 10, 221, 195, ++ 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 40, 222, 1, 70, 32, ++ 70, 1, 224, 32, 70, 0, 33, 79, 244, 195, 98, 3, 240, 111, 221, 3, 104, ++ 32, 70, 201, 248, 0, 48, 99, 105, 34, 43, 10, 221, 227, 105, 91, 6, ++ 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 16, 222, 1, 70, 32, 70, 0, 224, ++ 0, 33, 64, 242, 28, 98, 3, 240, 88, 221, 3, 104, 32, 70, 200, 248, 0, ++ 48, 213, 248, 224, 49, 59, 96, 255, 247, 177, 251, 7, 70, 0, 40, 114, ++ 208, 213, 248, 224, 49, 153, 3, 4, 212, 32, 70, 49, 70, 42, 70, 255, ++ 247, 138, 255, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 90, 6, 7, ++ 213, 64, 246, 39, 1, 0, 34, 3, 240, 231, 221, 1, 70, 32, 70, 0, 224, ++ 0, 33, 79, 244, 195, 98, 3, 240, 47, 221, 99, 105, 6, 70, 34, 43, 32, ++ 70, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, ++ 210, 221, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 195, 98, 3, 240, 26, ++ 221, 3, 104, 255, 67, 59, 64, 51, 96, 99, 105, 32, 70, 34, 43, 10, 221, ++ 227, 105, 94, 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 186, 221, 1, ++ 70, 32, 70, 0, 224, 0, 33, 64, 242, 28, 98, 3, 240, 2, 221, 99, 105, ++ 6, 70, 34, 43, 32, 70, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, ++ 1, 0, 34, 3, 240, 165, 221, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 28, ++ 98, 3, 240, 237, 220, 3, 104, 64, 242, 221, 84, 31, 64, 55, 96, 2, 224, ++ 10, 32, 253, 243, 174, 242, 213, 248, 224, 49, 154, 3, 1, 213, 1, 60, ++ 246, 209, 100, 32, 189, 232, 248, 67, 253, 243, 163, 178, 189, 232, ++ 248, 131, 55, 181, 4, 70, 1, 171, 79, 244, 0, 97, 106, 70, 4, 240, 37, ++ 216, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 93, 6, 7, 213, 64, ++ 246, 39, 1, 0, 34, 3, 240, 115, 221, 1, 70, 32, 70, 0, 224, 0, 33, 79, ++ 244, 206, 98, 3, 240, 187, 220, 5, 104, 21, 240, 0, 83, 22, 208, 99, ++ 105, 32, 70, 34, 43, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, ++ 1, 0, 34, 3, 240, 91, 221, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 206, ++ 98, 3, 240, 163, 220, 5, 96, 1, 37, 0, 224, 29, 70, 32, 70, 157, 232, ++ 6, 0, 3, 240, 46, 223, 40, 70, 62, 189, 112, 181, 4, 70, 14, 70, 3, ++ 240, 141, 220, 0, 33, 5, 70, 32, 70, 3, 240, 214, 223, 49, 70, 2, 70, ++ 32, 70, 255, 247, 129, 251, 41, 70, 6, 70, 32, 70, 3, 240, 204, 223, ++ 48, 70, 112, 189, 1, 75, 24, 96, 112, 71, 0, 191, 4, 111, 4, 0, 248, ++ 181, 72, 79, 4, 70, 58, 104, 0, 42, 64, 240, 137, 128, 67, 105, 34, ++ 43, 9, 221, 195, 105, 91, 6, 6, 213, 64, 246, 39, 1, 3, 240, 27, 221, ++ 1, 70, 32, 70, 1, 224, 32, 70, 0, 33, 64, 242, 20, 98, 3, 240, 98, 220, ++ 99, 105, 5, 104, 34, 43, 32, 70, 10, 221, 227, 105, 94, 6, 7, 213, 64, ++ 246, 39, 1, 0, 34, 3, 240, 5, 221, 1, 70, 32, 70, 0, 224, 0, 33, 64, ++ 242, 20, 98, 3, 240, 77, 220, 3, 104, 157, 66, 20, 208, 99, 105, 32, ++ 70, 34, 43, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, ++ 3, 240, 238, 220, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 20, 98, 3, ++ 240, 54, 220, 5, 104, 66, 242, 16, 112, 253, 243, 251, 241, 99, 105, ++ 32, 70, 34, 43, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, ++ 34, 3, 240, 213, 220, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 20, 98, ++ 3, 240, 29, 220, 99, 105, 6, 104, 34, 43, 32, 70, 10, 221, 227, 105, ++ 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 192, 220, 1, 70, 32, 70, ++ 0, 224, 0, 33, 64, 242, 20, 98, 3, 240, 8, 220, 3, 104, 158, 66, 20, ++ 208, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 94, 6, 7, 213, 64, ++ 246, 39, 1, 0, 34, 3, 240, 169, 220, 1, 70, 32, 70, 0, 224, 0, 33, 64, ++ 242, 20, 98, 3, 240, 241, 219, 6, 104, 117, 27, 100, 38, 117, 67, 61, ++ 96, 56, 104, 248, 189, 4, 111, 4, 0, 45, 233, 247, 79, 4, 70, 136, 70, ++ 145, 70, 31, 70, 3, 240, 230, 221, 131, 70, 0, 40, 64, 240, 217, 128, ++ 32, 70, 3, 240, 211, 219, 89, 70, 130, 70, 32, 70, 3, 240, 28, 223, ++ 99, 105, 5, 70, 45, 43, 12, 209, 208, 248, 244, 48, 185, 241, 0, 15, ++ 2, 208, 35, 240, 0, 115, 1, 224, 67, 240, 0, 115, 197, 248, 244, 48, ++ 184, 224, 32, 70, 255, 247, 24, 250, 195, 120, 1, 38, 158, 64, 0, 240, ++ 177, 128, 185, 241, 0, 15, 94, 208, 99, 105, 32, 70, 34, 43, 10, 221, ++ 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 90, 70, 3, 240, 92, 220, 1, ++ 70, 32, 70, 0, 224, 0, 33, 79, 244, 195, 98, 3, 240, 164, 219, 3, 104, ++ 65, 70, 59, 96, 67, 234, 6, 7, 1, 35, 0, 147, 32, 70, 59, 70, 42, 70, ++ 255, 247, 10, 250, 99, 105, 7, 67, 34, 43, 32, 70, 10, 221, 227, 105, ++ 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 59, 220, 1, 70, 32, 70, ++ 0, 224, 0, 33, 79, 244, 195, 98, 3, 240, 131, 219, 65, 70, 7, 96, 42, ++ 70, 32, 70, 255, 247, 196, 253, 79, 244, 122, 112, 253, 243, 67, 241, ++ 64, 242, 221, 87, 2, 224, 10, 32, 253, 243, 61, 241, 99, 105, 32, 70, ++ 34, 43, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, ++ 240, 23, 220, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 12, 98, 3, 240, ++ 95, 219, 3, 104, 51, 66, 66, 209, 1, 63, 227, 209, 63, 224, 58, 104, ++ 154, 185, 99, 105, 32, 70, 34, 43, 9, 221, 227, 105, 95, 6, 6, 213, ++ 64, 246, 39, 1, 3, 240, 252, 219, 1, 70, 32, 70, 0, 224, 0, 33, 79, ++ 244, 195, 98, 3, 240, 68, 219, 2, 104, 34, 234, 6, 7, 1, 35, 0, 147, ++ 32, 70, 59, 70, 65, 70, 42, 70, 255, 247, 171, 249, 99, 105, 7, 67, ++ 55, 66, 12, 191, 0, 38, 1, 38, 34, 43, 32, 70, 10, 221, 227, 105, 89, ++ 6, 7, 213, 64, 246, 39, 1, 0, 34, 3, 240, 216, 219, 1, 70, 32, 70, 0, ++ 224, 0, 33, 79, 244, 195, 98, 3, 240, 32, 219, 65, 70, 7, 96, 42, 70, ++ 32, 70, 255, 247, 97, 253, 0, 224, 1, 38, 64, 242, 45, 23, 2, 224, 10, ++ 32, 253, 243, 220, 240, 43, 105, 3, 244, 128, 83, 179, 235, 6, 63, 1, ++ 208, 1, 63, 244, 209, 32, 70, 81, 70, 3, 176, 189, 232, 240, 79, 3, ++ 240, 75, 158, 3, 176, 189, 232, 240, 143, 240, 181, 137, 176, 4, 70, ++ 13, 70, 6, 170, 7, 171, 79, 244, 0, 97, 3, 240, 76, 222, 41, 70, 32, ++ 70, 255, 247, 90, 254, 79, 244, 122, 118, 0, 34, 176, 251, 246, 246, ++ 19, 70, 2, 33, 32, 70, 255, 247, 157, 251, 0, 34, 7, 70, 19, 70, 0, ++ 240, 15, 5, 3, 33, 32, 70, 255, 247, 148, 251, 79, 246, 128, 115, 59, ++ 64, 223, 9, 79, 244, 0, 3, 32, 240, 127, 66, 0, 147, 3, 168, 4, 169, ++ 51, 70, 249, 243, 233, 241, 5, 168, 3, 153, 4, 154, 24, 35, 119, 67, ++ 249, 243, 38, 242, 5, 185, 45, 96, 5, 154, 79, 244, 0, 99, 0, 147, 79, ++ 244, 128, 83, 3, 168, 4, 169, 186, 24, 147, 251, 245, 243, 249, 243, ++ 211, 241, 2, 168, 3, 153, 4, 154, 12, 35, 249, 243, 17, 242, 32, 70, ++ 6, 153, 7, 154, 3, 240, 68, 221, 2, 152, 9, 176, 240, 189, 16, 181, ++ 4, 70, 3, 240, 229, 220, 1, 70, 32, 70, 189, 232, 16, 64, 255, 247, ++ 163, 191, 112, 181, 4, 70, 22, 70, 255, 247, 241, 255, 99, 105, 5, 70, ++ 34, 43, 32, 70, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, ++ 34, 3, 240, 65, 219, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 204, 98, ++ 3, 240, 137, 218, 4, 35, 3, 96, 214, 248, 100, 54, 79, 244, 122, 112, ++ 219, 178, 181, 251, 243, 245, 104, 67, 112, 189, 112, 181, 4, 70, 14, ++ 70, 3, 240, 115, 218, 0, 33, 5, 70, 32, 70, 3, 240, 188, 221, 49, 70, ++ 2, 70, 32, 70, 255, 247, 204, 255, 41, 70, 6, 70, 32, 70, 3, 240, 178, ++ 221, 48, 70, 112, 189, 255, 247, 232, 191, 55, 181, 4, 70, 255, 247, ++ 181, 255, 79, 244, 0, 97, 106, 70, 1, 171, 5, 70, 32, 70, 3, 240, 176, ++ 221, 0, 34, 19, 70, 32, 70, 4, 33, 255, 247, 9, 251, 0, 244, 127, 64, ++ 3, 10, 0, 185, 27, 96, 181, 251, 243, 245, 32, 70, 157, 232, 6, 0, 3, ++ 240, 220, 220, 40, 70, 62, 189, 112, 181, 4, 70, 14, 70, 3, 240, 59, ++ 218, 0, 33, 5, 70, 32, 70, 3, 240, 132, 221, 49, 70, 2, 70, 32, 70, ++ 255, 247, 126, 252, 32, 70, 255, 247, 140, 248, 99, 105, 6, 70, 34, ++ 43, 32, 70, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, ++ 3, 240, 215, 218, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 12, 98, 3, ++ 240, 31, 218, 243, 120, 1, 33, 17, 250, 3, 243, 2, 104, 41, 70, 26, ++ 66, 12, 191, 0, 38, 1, 38, 32, 70, 3, 240, 90, 221, 48, 70, 112, 189, ++ 112, 71, 45, 233, 255, 71, 131, 110, 0, 34, 4, 70, 13, 70, 2, 146, 3, ++ 146, 99, 177, 208, 248, 204, 16, 0, 235, 129, 1, 209, 248, 212, 0, 33, ++ 110, 136, 66, 5, 209, 96, 110, 152, 71, 129, 70, 2, 224, 153, 70, 0, ++ 224, 145, 70, 32, 70, 3, 240, 237, 217, 0, 33, 130, 70, 32, 70, 3, 240, ++ 54, 221, 2, 169, 128, 70, 3, 170, 32, 70, 255, 247, 14, 249, 2, 159, ++ 0, 38, 3, 150, 247, 177, 59, 70, 32, 70, 41, 70, 66, 70, 0, 150, 255, ++ 247, 79, 248, 99, 105, 56, 67, 34, 43, 2, 144, 32, 70, 10, 221, 227, ++ 105, 89, 6, 7, 213, 64, 246, 39, 1, 50, 70, 3, 240, 127, 218, 1, 70, ++ 32, 70, 0, 224, 0, 33, 79, 244, 195, 98, 3, 240, 199, 217, 2, 155, 3, ++ 96, 3, 158, 254, 177, 0, 39, 51, 70, 32, 70, 41, 70, 66, 70, 0, 151, ++ 255, 247, 45, 248, 99, 105, 48, 67, 34, 43, 3, 144, 32, 70, 10, 221, ++ 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 58, 70, 3, 240, 93, 218, 1, ++ 70, 32, 70, 0, 224, 0, 33, 64, 242, 28, 98, 3, 240, 165, 217, 3, 155, ++ 3, 96, 41, 70, 66, 70, 32, 70, 255, 247, 229, 251, 32, 70, 81, 70, 3, ++ 240, 226, 220, 227, 110, 91, 177, 212, 248, 204, 32, 4, 235, 130, 2, ++ 210, 248, 212, 16, 34, 110, 145, 66, 2, 209, 96, 110, 73, 70, 152, 71, ++ 189, 232, 255, 135, 0, 33, 247, 247, 223, 184, 247, 247, 101, 185, 0, ++ 32, 112, 71, 16, 181, 4, 70, 8, 70, 17, 70, 26, 70, 247, 247, 30, 252, ++ 16, 177, 35, 104, 1, 51, 35, 96, 16, 189, 0, 0, 16, 181, 0, 34, 12, ++ 70, 253, 243, 229, 241, 160, 185, 10, 75, 27, 104, 139, 177, 26, 120, ++ 122, 177, 218, 137, 148, 66, 12, 216, 24, 70, 253, 247, 97, 255, 32, ++ 177, 5, 75, 26, 104, 1, 50, 26, 96, 16, 189, 4, 75, 26, 104, 1, 50, ++ 26, 96, 16, 189, 116, 7, 0, 0, 8, 111, 4, 0, 12, 111, 4, 0, 56, 181, ++ 4, 70, 13, 70, 34, 177, 131, 104, 19, 177, 192, 104, 0, 34, 152, 71, ++ 9, 75, 26, 104, 43, 70, 7, 224, 217, 120, 17, 185, 33, 104, 1, 57, 33, ++ 96, 155, 138, 82, 248, 35, 48, 0, 43, 245, 209, 40, 70, 189, 232, 56, ++ 64, 247, 247, 14, 189, 32, 7, 0, 0, 16, 181, 4, 70, 8, 70, 247, 247, ++ 95, 252, 16, 177, 35, 104, 1, 51, 35, 96, 16, 189, 8, 74, 3, 70, 16, ++ 181, 16, 104, 10, 70, 7, 224, 212, 120, 20, 185, 28, 104, 1, 52, 28, ++ 96, 146, 138, 80, 248, 34, 32, 0, 42, 245, 209, 8, 70, 16, 189, 32, ++ 7, 0, 0, 8, 74, 3, 70, 16, 181, 16, 104, 10, 70, 7, 224, 212, 120, 20, ++ 185, 28, 104, 1, 60, 28, 96, 146, 138, 80, 248, 34, 32, 0, 42, 245, ++ 209, 8, 70, 16, 189, 32, 7, 0, 0, 3, 126, 43, 177, 64, 105, 208, 241, ++ 1, 0, 56, 191, 0, 32, 112, 71, 1, 32, 112, 71, 112, 181, 3, 105, 205, ++ 28, 37, 240, 3, 5, 157, 66, 4, 70, 14, 70, 18, 216, 0, 104, 3, 240, ++ 42, 219, 225, 104, 50, 70, 0, 35, 255, 247, 102, 255, 80, 177, 227, ++ 104, 91, 25, 227, 96, 35, 105, 93, 27, 99, 105, 37, 97, 1, 51, 99, 97, ++ 112, 189, 0, 32, 112, 189, 75, 104, 65, 104, 195, 243, 20, 3, 139, 66, ++ 9, 211, 129, 104, 139, 66, 6, 210, 67, 105, 18, 177, 1, 51, 67, 97, ++ 112, 71, 1, 59, 67, 97, 112, 71, 0, 0, 1, 75, 3, 235, 192, 0, 112, 71, ++ 20, 111, 4, 0, 1, 75, 3, 235, 192, 0, 112, 71, 56, 111, 4, 0, 45, 233, ++ 248, 67, 4, 70, 13, 70, 22, 70, 153, 70, 3, 240, 176, 216, 167, 110, ++ 128, 70, 111, 177, 212, 248, 204, 48, 4, 235, 131, 3, 211, 248, 212, ++ 32, 35, 110, 154, 66, 3, 209, 96, 110, 184, 71, 7, 70, 0, 224, 0, 39, ++ 32, 70, 0, 33, 3, 240, 233, 219, 29, 185, 0, 245, 160, 96, 4, 48, 1, ++ 224, 0, 245, 161, 96, 5, 104, 62, 177, 3, 104, 35, 234, 6, 6, 6, 96, ++ 3, 104, 67, 234, 9, 3, 3, 96, 32, 70, 65, 70, 3, 240, 212, 219, 227, ++ 110, 91, 177, 212, 248, 204, 32, 4, 235, 130, 2, 210, 248, 212, 16, ++ 34, 110, 145, 66, 2, 209, 96, 110, 57, 70, 152, 71, 40, 70, 189, 232, ++ 248, 131, 16, 181, 12, 70, 19, 70, 4, 33, 34, 70, 189, 232, 16, 64, ++ 255, 247, 187, 184, 16, 181, 12, 70, 19, 70, 2, 33, 34, 70, 189, 232, ++ 16, 64, 255, 247, 178, 184, 16, 181, 12, 70, 19, 70, 6, 33, 34, 70, ++ 189, 232, 16, 64, 255, 247, 169, 184, 45, 233, 240, 65, 133, 110, 4, ++ 70, 15, 70, 22, 70, 109, 177, 208, 248, 204, 48, 0, 235, 131, 3, 211, ++ 248, 212, 32, 3, 110, 154, 66, 3, 209, 64, 110, 168, 71, 5, 70, 0, 224, ++ 0, 37, 32, 70, 3, 240, 66, 216, 128, 70, 71, 185, 32, 70, 57, 70, 58, ++ 70, 59, 70, 255, 247, 130, 255, 0, 240, 1, 6, 21, 224, 0, 46, 79, 240, ++ 1, 2, 12, 191, 51, 70, 19, 70, 20, 191, 0, 39, 79, 244, 128, 39, 79, ++ 240, 0, 1, 32, 70, 255, 247, 112, 255, 32, 70, 2, 33, 79, 244, 128, ++ 34, 59, 70, 255, 247, 112, 248, 32, 70, 65, 70, 3, 240, 107, 219, 227, ++ 110, 91, 177, 212, 248, 204, 32, 4, 235, 130, 2, 210, 248, 212, 16, ++ 34, 110, 145, 66, 2, 209, 96, 110, 41, 70, 152, 71, 48, 70, 189, 232, ++ 240, 129, 112, 71, 0, 33, 8, 181, 10, 70, 11, 70, 255, 247, 77, 255, ++ 0, 240, 1, 0, 8, 189, 1, 32, 112, 71, 112, 181, 6, 70, 255, 247, 250, ++ 255, 216, 177, 0, 37, 40, 70, 255, 247, 57, 255, 3, 104, 19, 177, 64, ++ 104, 152, 71, 40, 177, 1, 53, 237, 178, 4, 45, 243, 209, 1, 36, 0, 224, ++ 4, 70, 48, 70, 255, 247, 221, 255, 160, 66, 6, 208, 48, 70, 1, 33, 34, ++ 70, 189, 232, 112, 64, 255, 247, 133, 191, 112, 189, 3, 75, 24, 112, ++ 24, 177, 3, 75, 26, 104, 1, 50, 26, 96, 112, 71, 52, 111, 4, 0, 88, ++ 111, 4, 0, 16, 181, 4, 70, 0, 32, 255, 247, 239, 255, 32, 70, 161, 109, ++ 255, 247, 248, 250, 32, 177, 1, 32, 189, 232, 16, 64, 255, 247, 229, ++ 191, 16, 189, 1, 75, 24, 120, 112, 71, 0, 191, 52, 111, 4, 0, 248, 181, ++ 4, 70, 255, 247, 182, 255, 0, 40, 55, 208, 32, 70, 255, 247, 225, 255, ++ 165, 110, 109, 177, 212, 248, 204, 48, 4, 235, 131, 3, 211, 248, 212, ++ 32, 35, 110, 154, 66, 3, 209, 96, 110, 168, 71, 5, 70, 0, 224, 0, 37, ++ 32, 70, 2, 240, 160, 223, 7, 70, 255, 247, 219, 255, 88, 177, 0, 38, ++ 48, 70, 255, 247, 212, 254, 3, 104, 11, 177, 64, 104, 152, 71, 1, 54, ++ 246, 178, 4, 46, 244, 209, 32, 70, 57, 70, 3, 240, 218, 218, 227, 110, ++ 91, 177, 212, 248, 204, 32, 4, 235, 130, 2, 210, 248, 212, 16, 34, 110, ++ 145, 66, 2, 209, 96, 110, 41, 70, 152, 71, 248, 189, 0, 0, 11, 75, 16, ++ 181, 26, 104, 28, 70, 144, 66, 4, 209, 90, 104, 145, 66, 1, 209, 24, ++ 70, 16, 189, 99, 105, 5, 74, 152, 66, 6, 209, 144, 105, 20, 50, 129, ++ 66, 12, 191, 16, 70, 0, 32, 16, 189, 0, 32, 16, 189, 216, 156, 5, 0, ++ 79, 244, 64, 34, 56, 181, 64, 246, 12, 65, 19, 70, 5, 70, 3, 240, 99, ++ 216, 0, 34, 19, 70, 64, 246, 12, 65, 40, 70, 3, 240, 92, 216, 0, 34, ++ 19, 70, 64, 246, 12, 65, 40, 70, 3, 240, 85, 216, 64, 246, 3, 2, 40, ++ 70, 64, 246, 12, 65, 19, 70, 3, 240, 77, 216, 10, 36, 0, 34, 40, 70, ++ 64, 246, 12, 65, 19, 70, 3, 240, 69, 216, 1, 60, 246, 209, 35, 70, 64, ++ 246, 12, 65, 64, 246, 3, 2, 40, 70, 3, 240, 59, 216, 34, 70, 35, 70, ++ 64, 246, 12, 65, 40, 70, 3, 240, 52, 216, 34, 70, 35, 70, 64, 246, 12, ++ 65, 40, 70, 3, 240, 45, 216, 35, 70, 40, 70, 64, 246, 12, 65, 79, 244, ++ 64, 34, 3, 240, 37, 216, 79, 244, 78, 100, 33, 70, 0, 35, 40, 70, 79, ++ 240, 255, 50, 4, 52, 3, 240, 27, 216, 180, 245, 86, 111, 244, 209, 56, ++ 189, 55, 181, 21, 70, 64, 246, 60, 98, 145, 66, 12, 70, 6, 216, 0, 147, ++ 0, 33, 34, 70, 43, 70, 2, 240, 4, 223, 0, 224, 0, 32, 62, 189, 0, 0, ++ 55, 181, 4, 70, 255, 247, 150, 255, 20, 35, 116, 34, 64, 246, 12, 65, ++ 32, 70, 2, 240, 251, 223, 1, 33, 4, 34, 32, 70, 3, 240, 122, 216, 4, ++ 33, 1, 34, 32, 70, 3, 240, 117, 216, 16, 33, 0, 35, 32, 70, 10, 70, ++ 3, 240, 135, 216, 148, 248, 85, 48, 32, 70, 27, 7, 1, 213, 0, 33, 0, ++ 224, 2, 33, 4, 34, 3, 240, 100, 216, 1, 35, 0, 147, 0, 33, 32, 70, 64, ++ 246, 28, 98, 79, 240, 255, 51, 3, 240, 16, 216, 148, 248, 85, 80, 21, ++ 240, 8, 5, 14, 208, 33, 35, 0, 147, 0, 33, 79, 240, 255, 51, 32, 70, ++ 64, 246, 24, 98, 3, 240, 1, 216, 83, 75, 32, 70, 0, 147, 0, 33, 14, ++ 224, 17, 35, 0, 147, 41, 70, 79, 240, 255, 51, 32, 70, 64, 246, 24, ++ 98, 2, 240, 242, 223, 65, 242, 2, 19, 0, 147, 32, 70, 41, 70, 64, 246, ++ 68, 66, 79, 240, 255, 51, 2, 240, 231, 223, 148, 248, 85, 48, 32, 70, ++ 93, 7, 79, 244, 94, 97, 79, 240, 255, 50, 1, 213, 245, 35, 0, 224, 243, ++ 35, 2, 240, 159, 223, 0, 35, 32, 70, 64, 246, 248, 81, 79, 240, 255, ++ 50, 2, 240, 151, 223, 0, 35, 32, 70, 64, 246, 228, 81, 79, 240, 255, ++ 50, 2, 240, 143, 223, 8, 35, 32, 70, 64, 246, 236, 81, 79, 240, 255, ++ 50, 2, 240, 135, 223, 0, 35, 32, 70, 64, 246, 232, 81, 79, 240, 255, ++ 50, 2, 240, 127, 223, 219, 35, 32, 70, 79, 244, 93, 97, 79, 240, 255, ++ 50, 2, 240, 119, 223, 12, 34, 0, 35, 32, 70, 64, 246, 84, 65, 2, 240, ++ 112, 223, 40, 75, 0, 33, 0, 147, 32, 70, 64, 246, 188, 82, 79, 240, ++ 255, 51, 2, 240, 160, 223, 36, 75, 1, 33, 0, 147, 32, 70, 64, 246, 188, ++ 82, 79, 240, 255, 51, 2, 240, 150, 223, 32, 75, 2, 33, 0, 147, 32, 70, ++ 64, 246, 188, 82, 79, 240, 255, 51, 2, 240, 140, 223, 1, 34, 19, 70, ++ 32, 70, 64, 246, 36, 97, 2, 240, 75, 223, 64, 246, 255, 115, 0, 147, ++ 0, 33, 23, 77, 32, 70, 64, 246, 180, 82, 79, 240, 255, 51, 2, 240, 121, ++ 223, 0, 33, 32, 70, 64, 246, 184, 82, 79, 240, 255, 51, 0, 149, 2, 240, ++ 112, 223, 75, 246, 152, 35, 0, 147, 1, 33, 32, 70, 64, 246, 184, 82, ++ 79, 240, 255, 51, 2, 240, 101, 223, 32, 70, 79, 244, 92, 97, 79, 240, ++ 255, 50, 43, 70, 3, 176, 189, 232, 48, 64, 2, 240, 32, 159, 2, 0, 17, ++ 0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 16, 50, 84, 118, ++ 19, 181, 12, 70, 2, 185, 73, 177, 8, 73, 19, 177, 11, 104, 28, 64, 3, ++ 224, 11, 104, 28, 67, 36, 234, 3, 4, 34, 64, 0, 146, 0, 33, 112, 34, ++ 35, 70, 2, 240, 252, 221, 28, 189, 0, 191, 8, 8, 0, 0, 19, 181, 20, ++ 70, 66, 105, 10, 42, 15, 221, 41, 177, 1, 41, 5, 208, 2, 41, 10, 209, ++ 132, 34, 2, 224, 120, 34, 0, 224, 124, 34, 0, 147, 0, 33, 35, 70, 2, ++ 240, 228, 221, 1, 224, 79, 240, 255, 48, 28, 189, 45, 233, 240, 65, ++ 4, 70, 2, 240, 151, 223, 0, 33, 10, 70, 11, 70, 7, 70, 32, 70, 255, ++ 247, 196, 255, 0, 33, 10, 70, 11, 70, 6, 70, 32, 70, 255, 247, 213, ++ 255, 0, 34, 5, 70, 2, 33, 32, 70, 19, 70, 255, 247, 206, 255, 212, 248, ++ 120, 128, 21, 224, 216, 248, 8, 48, 131, 177, 152, 248, 4, 32, 0, 42, ++ 216, 248, 12, 32, 12, 191, 40, 70, 56, 70, 0, 234, 2, 0, 18, 208, 50, ++ 64, 144, 66, 2, 208, 216, 248, 0, 16, 152, 71, 216, 248, 16, 128, 184, ++ 241, 0, 15, 230, 209, 32, 70, 65, 70, 42, 70, 43, 70, 189, 232, 240, ++ 65, 255, 247, 170, 191, 0, 40, 237, 209, 239, 231, 79, 244, 128, 48, ++ 112, 71, 192, 105, 0, 240, 8, 0, 112, 71, 115, 181, 4, 70, 13, 70, 3, ++ 240, 61, 216, 24, 185, 32, 70, 255, 247, 243, 255, 72, 179, 0, 45, 20, ++ 191, 79, 244, 128, 115, 0, 35, 0, 147, 32, 70, 0, 33, 79, 244, 240, ++ 114, 79, 244, 128, 115, 2, 240, 128, 221, 213, 177, 64, 242, 221, 86, ++ 2, 224, 10, 32, 252, 243, 69, 243, 0, 37, 43, 70, 32, 70, 41, 70, 79, ++ 244, 240, 114, 0, 149, 2, 240, 112, 221, 195, 1, 1, 212, 1, 62, 239, ++ 209, 0, 33, 32, 70, 79, 244, 240, 114, 11, 70, 0, 149, 2, 240, 100, ++ 221, 124, 189, 56, 181, 0, 37, 29, 112, 209, 248, 204, 48, 79, 244, ++ 0, 97, 19, 96, 42, 70, 4, 70, 3, 240, 147, 216, 5, 70, 56, 177, 208, ++ 248, 224, 49, 218, 1, 3, 212, 32, 70, 1, 33, 255, 247, 181, 255, 40, ++ 70, 56, 189, 0, 0, 115, 181, 131, 105, 0, 37, 154, 0, 4, 70, 173, 248, ++ 6, 80, 72, 213, 79, 244, 0, 97, 42, 70, 208, 248, 204, 96, 3, 240, 119, ++ 216, 0, 40, 63, 208, 99, 105, 34, 43, 216, 191, 192, 248, 104, 81, 192, ++ 248, 100, 81, 192, 248, 96, 81, 99, 105, 34, 43, 3, 220, 28, 75, 192, ++ 248, 68, 49, 5, 224, 1, 35, 192, 248, 72, 49, 255, 35, 192, 248, 76, ++ 49, 99, 105, 34, 43, 79, 240, 0, 3, 6, 220, 192, 248, 128, 49, 192, ++ 248, 124, 49, 192, 248, 120, 49, 3, 224, 192, 248, 116, 49, 192, 248, ++ 112, 49, 49, 70, 32, 70, 3, 240, 89, 216, 32, 70, 13, 241, 6, 1, 3, ++ 240, 138, 218, 144, 185, 189, 248, 6, 0, 128, 177, 99, 105, 32, 70, ++ 34, 43, 217, 191, 79, 244, 128, 33, 10, 70, 6, 73, 64, 34, 0, 35, 2, ++ 240, 92, 221, 2, 224, 79, 240, 255, 48, 0, 224, 0, 32, 124, 189, 0, ++ 0, 251, 191, 64, 0, 85, 85, 115, 181, 4, 70, 2, 240, 150, 223, 24, 185, ++ 32, 70, 255, 247, 76, 255, 96, 179, 32, 70, 33, 70, 106, 70, 13, 241, ++ 7, 3, 255, 247, 125, 255, 6, 70, 192, 177, 64, 242, 45, 21, 2, 224, ++ 10, 32, 252, 243, 164, 242, 214, 248, 212, 49, 24, 7, 6, 212, 1, 61, ++ 246, 209, 3, 224, 10, 32, 252, 243, 154, 242, 1, 224, 64, 242, 45, 21, ++ 214, 248, 212, 49, 89, 7, 1, 213, 1, 61, 243, 209, 32, 70, 0, 33, 255, ++ 247, 41, 255, 157, 248, 7, 48, 27, 185, 32, 70, 0, 153, 3, 240, 4, 216, ++ 124, 189, 16, 181, 4, 70, 252, 243, 37, 244, 32, 70, 255, 247, 194, ++ 255, 1, 32, 16, 189, 240, 181, 133, 176, 4, 70, 13, 70, 23, 70, 255, ++ 247, 13, 255, 0, 40, 0, 240, 148, 128, 166, 110, 110, 177, 212, 248, ++ 204, 48, 4, 235, 131, 3, 211, 248, 212, 32, 35, 110, 154, 66, 3, 209, ++ 96, 110, 176, 71, 6, 70, 0, 224, 0, 38, 32, 70, 33, 70, 2, 170, 13, ++ 241, 15, 3, 255, 247, 44, 255, 0, 40, 99, 208, 8, 47, 97, 216, 223, ++ 232, 7, 240, 5, 20, 28, 39, 53, 64, 74, 85, 13, 0, 0, 149, 32, 70, 0, ++ 33, 79, 244, 156, 114, 79, 240, 255, 51, 78, 224, 0, 33, 0, 145, 32, ++ 70, 79, 244, 156, 114, 11, 70, 71, 224, 79, 240, 255, 51, 0, 147, 32, ++ 70, 0, 33, 79, 244, 154, 114, 63, 224, 0, 33, 32, 70, 79, 244, 236, ++ 114, 11, 70, 0, 145, 2, 240, 101, 220, 0, 240, 1, 5, 57, 224, 37, 177, ++ 32, 35, 0, 147, 32, 70, 0, 33, 3, 224, 2, 35, 0, 147, 32, 70, 41, 70, ++ 79, 244, 232, 114, 34, 35, 38, 224, 0, 33, 32, 70, 79, 244, 154, 114, ++ 11, 70, 0, 145, 2, 240, 76, 220, 192, 243, 192, 37, 32, 224, 0, 33, ++ 32, 70, 79, 244, 224, 114, 11, 70, 0, 145, 2, 240, 65, 220, 197, 178, ++ 22, 224, 0, 33, 32, 70, 79, 244, 154, 114, 11, 70, 0, 145, 2, 240, 55, ++ 220, 192, 243, 64, 37, 11, 224, 237, 178, 0, 149, 32, 70, 0, 33, 79, ++ 244, 224, 114, 255, 35, 2, 240, 43, 220, 5, 70, 0, 224, 1, 37, 157, ++ 248, 15, 48, 27, 185, 32, 70, 2, 153, 2, 240, 107, 223, 227, 110, 107, ++ 177, 212, 248, 204, 32, 4, 235, 130, 2, 210, 248, 212, 16, 34, 110, ++ 145, 66, 4, 209, 96, 110, 49, 70, 152, 71, 0, 224, 5, 70, 40, 70, 5, ++ 176, 240, 189, 67, 105, 45, 233, 247, 67, 34, 43, 5, 70, 14, 70, 64, ++ 243, 153, 128, 25, 185, 255, 247, 103, 254, 64, 185, 145, 224, 2, 240, ++ 169, 222, 0, 40, 0, 240, 141, 128, 7, 46, 0, 242, 140, 128, 40, 70, ++ 79, 244, 0, 97, 0, 34, 213, 248, 204, 144, 2, 240, 45, 223, 4, 70, 0, ++ 40, 0, 240, 129, 128, 3, 46, 3, 208, 40, 70, 1, 33, 255, 247, 79, 254, ++ 212, 248, 48, 49, 35, 240, 4, 3, 196, 248, 48, 49, 1, 35, 158, 66, 196, ++ 248, 48, 49, 4, 217, 4, 46, 12, 191, 13, 35, 9, 35, 0, 224, 13, 35, ++ 3, 46, 196, 248, 48, 49, 79, 208, 212, 248, 48, 49, 1, 46, 35, 240, ++ 1, 3, 196, 248, 48, 49, 1, 217, 4, 46, 69, 209, 79, 240, 255, 8, 0, ++ 33, 79, 244, 226, 114, 67, 70, 40, 70, 205, 248, 0, 128, 2, 240, 189, ++ 219, 40, 70, 2, 240, 34, 219, 79, 244, 225, 49, 255, 247, 54, 252, 7, ++ 70, 136, 177, 131, 104, 0, 33, 0, 147, 79, 244, 226, 114, 67, 70, 40, ++ 70, 2, 240, 171, 219, 59, 105, 40, 70, 0, 147, 0, 33, 79, 244, 238, ++ 114, 67, 70, 2, 240, 162, 219, 1, 35, 0, 147, 0, 33, 255, 35, 79, 244, ++ 198, 114, 40, 70, 2, 240, 153, 219, 24, 73, 42, 70, 40, 70, 66, 240, ++ 206, 251, 40, 35, 0, 147, 0, 33, 79, 244, 230, 114, 255, 35, 40, 70, ++ 2, 240, 139, 219, 129, 35, 0, 147, 40, 70, 0, 33, 79, 244, 232, 114, ++ 255, 35, 2, 240, 130, 219, 212, 248, 48, 49, 40, 70, 35, 240, 112, 3, ++ 67, 234, 6, 22, 196, 248, 48, 97, 212, 248, 48, 49, 73, 70, 35, 240, ++ 8, 3, 196, 248, 48, 49, 2, 240, 186, 222, 2, 224, 4, 70, 0, 224, 0, ++ 36, 32, 70, 189, 232, 254, 131, 0, 191, 231, 188, 0, 0, 195, 105, 16, ++ 181, 91, 7, 4, 70, 19, 213, 255, 247, 249, 251, 79, 244, 127, 66, 19, ++ 70, 64, 246, 116, 81, 32, 70, 2, 240, 93, 220, 32, 70, 255, 247, 84, ++ 252, 32, 70, 64, 246, 84, 65, 16, 34, 0, 35, 2, 240, 83, 220, 0, 32, ++ 16, 189, 56, 181, 4, 70, 2, 240, 67, 219, 79, 244, 0, 97, 5, 70, 0, ++ 34, 32, 70, 2, 240, 124, 222, 0, 35, 192, 248, 64, 60, 208, 248, 0, ++ 62, 41, 70, 35, 240, 127, 67, 35, 244, 112, 3, 67, 240, 136, 83, 67, ++ 244, 128, 19, 192, 248, 0, 62, 1, 35, 192, 248, 64, 60, 79, 240, 17, ++ 51, 192, 248, 0, 62, 131, 109, 3, 240, 31, 3, 131, 101, 195, 109, 3, ++ 240, 31, 3, 195, 101, 131, 110, 3, 240, 31, 3, 131, 102, 195, 110, 3, ++ 240, 31, 3, 195, 102, 32, 70, 189, 232, 56, 64, 2, 240, 94, 158, 112, ++ 71, 16, 181, 4, 70, 255, 247, 0, 251, 144, 177, 0, 34, 8, 33, 19, 70, ++ 32, 70, 254, 247, 191, 251, 130, 7, 10, 213, 32, 70, 8, 33, 2, 34, 0, ++ 35, 254, 247, 183, 251, 32, 70, 189, 232, 16, 64, 254, 247, 232, 187, ++ 16, 189, 45, 233, 240, 65, 7, 70, 14, 70, 21, 70, 28, 70, 2, 240, 182, ++ 220, 56, 70, 49, 70, 42, 70, 35, 70, 189, 232, 240, 65, 2, 240, 200, ++ 156, 0, 34, 79, 246, 255, 113, 19, 70, 2, 240, 134, 156, 45, 233, 248, ++ 67, 153, 70, 45, 75, 143, 137, 21, 70, 27, 104, 138, 138, 13, 47, 12, ++ 70, 142, 104, 83, 248, 34, 128, 70, 221, 50, 123, 115, 123, 67, 234, ++ 2, 35, 179, 245, 192, 111, 3, 219, 6, 241, 12, 3, 0, 33, 12, 224, 21, ++ 47, 57, 221, 34, 72, 6, 241, 14, 1, 6, 34, 246, 247, 142, 249, 0, 40, ++ 49, 209, 6, 241, 20, 3, 1, 33, 24, 120, 90, 120, 66, 234, 0, 34, 178, ++ 245, 1, 79, 8, 209, 152, 29, 242, 25, 144, 66, 35, 216, 24, 121, 90, ++ 121, 4, 51, 66, 234, 0, 34, 64, 246, 6, 0, 130, 66, 26, 209, 160, 137, ++ 184, 241, 0, 15, 10, 208, 14, 40, 184, 248, 12, 32, 2, 209, 216, 248, ++ 8, 48, 6, 224, 15, 56, 26, 40, 12, 217, 191, 24, 2, 51, 246, 26, 186, ++ 25, 28, 42, 0, 220, 9, 209, 43, 96, 28, 32, 137, 248, 0, 16, 189, 232, ++ 248, 131, 79, 240, 255, 48, 189, 232, 248, 131, 111, 240, 1, 0, 189, ++ 232, 248, 131, 0, 191, 32, 7, 0, 0, 192, 179, 135, 0, 115, 181, 4, 34, ++ 5, 70, 1, 168, 14, 70, 246, 247, 89, 249, 1, 152, 112, 177, 0, 36, 160, ++ 28, 5, 235, 128, 0, 49, 70, 4, 34, 246, 247, 60, 249, 32, 177, 1, 52, ++ 8, 44, 244, 209, 0, 32, 0, 224, 1, 32, 124, 189, 0, 0, 3, 104, 45, 233, ++ 247, 79, 1, 42, 20, 191, 79, 240, 42, 8, 79, 240, 50, 8, 5, 70, 14, ++ 70, 88, 104, 65, 70, 146, 70, 255, 247, 228, 248, 7, 70, 64, 185, 43, ++ 104, 5, 32, 27, 104, 211, 248, 136, 48, 26, 109, 1, 50, 26, 101, 109, ++ 224, 6, 241, 14, 11, 4, 34, 132, 104, 89, 70, 1, 168, 246, 247, 35, ++ 249, 1, 154, 74, 246, 254, 19, 18, 186, 179, 235, 18, 79, 7, 208, 6, ++ 241, 8, 9, 72, 70, 47, 73, 6, 34, 246, 247, 2, 249, 16, 185, 32, 70, ++ 45, 73, 1, 224, 32, 70, 73, 70, 6, 34, 5, 241, 40, 9, 246, 247, 10, ++ 249, 160, 29, 73, 70, 6, 34, 246, 247, 5, 249, 186, 241, 0, 15, 14, ++ 208, 0, 35, 35, 115, 132, 248, 13, 128, 4, 241, 14, 0, 34, 73, 6, 34, ++ 246, 247, 248, 248, 8, 35, 35, 117, 6, 35, 99, 117, 3, 224, 8, 35, 35, ++ 115, 6, 35, 99, 115, 168, 241, 28, 8, 68, 68, 49, 70, 6, 34, 32, 70, ++ 246, 247, 231, 248, 0, 35, 163, 113, 2, 35, 227, 113, 73, 70, 6, 34, ++ 4, 241, 8, 0, 246, 247, 221, 248, 6, 241, 24, 1, 4, 34, 4, 241, 14, ++ 0, 246, 247, 214, 248, 6, 241, 8, 1, 6, 34, 4, 241, 18, 0, 246, 247, ++ 207, 248, 89, 70, 4, 34, 4, 241, 24, 0, 246, 247, 201, 248, 213, 248, ++ 92, 49, 40, 104, 1, 51, 197, 248, 92, 49, 57, 70, 213, 248, 104, 33, ++ 11, 240, 164, 249, 1, 32, 189, 232, 254, 143, 0, 191, 248, 125, 135, ++ 0, 236, 125, 135, 0, 192, 179, 135, 0, 45, 233, 240, 67, 134, 77, 135, ++ 176, 43, 104, 4, 70, 219, 7, 64, 241, 0, 129, 3, 104, 0, 43, 0, 240, ++ 252, 128, 1, 170, 13, 241, 23, 3, 255, 247, 224, 254, 0, 40, 192, 242, ++ 244, 128, 148, 248, 100, 49, 1, 43, 0, 240, 242, 128, 1, 153, 3, 170, ++ 14, 49, 32, 70, 7, 240, 196, 217, 1, 153, 2, 170, 24, 49, 7, 70, 32, ++ 70, 7, 240, 189, 217, 1, 153, 129, 70, 14, 49, 32, 70, 255, 247, 39, ++ 255, 1, 153, 128, 70, 24, 49, 32, 70, 255, 247, 33, 255, 0, 47, 20, ++ 191, 8, 38, 0, 38, 185, 241, 0, 15, 20, 191, 79, 240, 4, 9, 79, 240, ++ 0, 9, 184, 241, 0, 15, 20, 191, 79, 240, 2, 8, 79, 240, 0, 8, 1, 153, ++ 78, 68, 70, 68, 14, 49, 0, 40, 24, 191, 1, 54, 4, 34, 4, 168, 246, 247, ++ 100, 248, 1, 153, 203, 136, 179, 245, 128, 127, 104, 209, 212, 248, ++ 76, 49, 4, 241, 40, 0, 1, 51, 196, 248, 76, 49, 253, 247, 146, 248, ++ 0, 40, 64, 240, 166, 128, 12, 46, 0, 242, 168, 128, 223, 232, 6, 240, ++ 62, 7, 166, 166, 65, 166, 166, 166, 47, 71, 166, 166, 47, 0, 1, 154, ++ 32, 70, 2, 241, 14, 1, 8, 50, 7, 240, 206, 217, 43, 104, 26, 7, 5, 213, ++ 32, 70, 1, 153, 157, 248, 23, 32, 255, 247, 241, 254, 4, 157, 0, 45, ++ 64, 240, 139, 128, 1, 153, 4, 34, 1, 241, 14, 0, 24, 49, 246, 247, 44, ++ 248, 1, 152, 6, 34, 8, 48, 67, 73, 246, 247, 38, 248, 32, 70, 1, 153, ++ 157, 248, 23, 32, 255, 247, 218, 254, 86, 224, 32, 70, 1, 153, 7, 240, ++ 127, 217, 1, 40, 112, 208, 1, 153, 4, 34, 1, 241, 14, 0, 24, 49, 245, ++ 247, 255, 255, 0, 40, 104, 208, 43, 104, 155, 7, 100, 212, 212, 248, ++ 80, 49, 1, 51, 196, 248, 80, 49, 87, 224, 32, 70, 1, 153, 7, 240, 103, ++ 217, 1, 40, 88, 208, 40, 104, 16, 240, 8, 0, 85, 208, 32, 70, 1, 153, ++ 157, 248, 23, 32, 255, 247, 177, 254, 78, 224, 179, 245, 0, 127, 71, ++ 209, 212, 248, 84, 49, 1, 51, 196, 248, 84, 49, 12, 46, 67, 216, 223, ++ 232, 6, 240, 7, 18, 66, 66, 66, 66, 59, 66, 36, 36, 66, 66, 49, 0, 4, ++ 154, 74, 246, 254, 19, 18, 186, 179, 235, 18, 79, 51, 209, 43, 104, ++ 152, 7, 48, 212, 35, 224, 1, 241, 18, 0, 6, 34, 4, 241, 40, 1, 245, ++ 247, 190, 255, 5, 70, 48, 187, 1, 154, 32, 70, 2, 241, 14, 1, 8, 50, ++ 7, 240, 86, 217, 40, 70, 30, 224, 32, 70, 7, 240, 39, 217, 1, 40, 24, ++ 208, 1, 154, 32, 70, 2, 241, 14, 1, 8, 50, 7, 240, 72, 217, 16, 224, ++ 32, 70, 7, 240, 26, 217, 1, 40, 11, 208, 212, 248, 88, 49, 1, 51, 196, ++ 248, 88, 49, 4, 32, 5, 224, 5, 32, 3, 224, 79, 240, 255, 48, 0, 224, ++ 0, 32, 7, 176, 189, 232, 240, 131, 84, 8, 0, 0, 248, 125, 135, 0, 45, ++ 233, 240, 65, 5, 70, 240, 177, 208, 248, 92, 50, 251, 177, 0, 36, 213, ++ 248, 92, 114, 102, 1, 23, 235, 6, 8, 14, 208, 184, 89, 96, 177, 254, ++ 247, 43, 255, 0, 33, 200, 248, 4, 16, 185, 81, 200, 248, 8, 16, 8, 241, ++ 12, 0, 16, 34, 247, 243, 3, 243, 1, 52, 10, 44, 231, 209, 0, 32, 189, ++ 232, 240, 129, 79, 240, 255, 48, 189, 232, 240, 129, 79, 240, 255, 48, ++ 189, 232, 240, 129, 0, 0, 0, 72, 112, 71, 240, 98, 4, 0, 139, 124, 138, ++ 104, 210, 24, 138, 96, 138, 137, 211, 26, 139, 129, 112, 71, 112, 181, ++ 145, 104, 136, 137, 4, 10, 68, 234, 0, 32, 0, 178, 176, 245, 0, 111, ++ 5, 209, 200, 125, 6, 40, 10, 208, 17, 40, 50, 209, 7, 224, 26, 76, 160, ++ 66, 46, 209, 8, 125, 6, 40, 1, 208, 17, 40, 43, 209, 76, 136, 99, 185, ++ 10, 136, 20, 67, 138, 136, 20, 67, 164, 178, 36, 177, 11, 120, 3, 240, ++ 1, 3, 131, 240, 1, 3, 216, 178, 112, 189, 152, 104, 69, 136, 6, 136, ++ 108, 64, 13, 136, 128, 136, 137, 136, 117, 64, 44, 67, 65, 64, 12, 67, ++ 164, 178, 84, 185, 208, 137, 219, 137, 0, 240, 7, 0, 3, 240, 7, 3, 195, ++ 26, 88, 66, 64, 235, 3, 0, 0, 224, 0, 32, 192, 178, 112, 189, 0, 32, ++ 112, 189, 0, 32, 112, 189, 221, 134, 255, 255, 0, 32, 112, 71, 19, 181, ++ 195, 104, 4, 70, 147, 248, 172, 0, 56, 177, 2, 170, 0, 35, 66, 248, ++ 4, 61, 160, 104, 1, 33, 30, 240, 136, 248, 227, 104, 147, 248, 172, ++ 48, 83, 177, 48, 177, 0, 33, 4, 241, 64, 0, 10, 70, 251, 243, 141, 242, ++ 2, 224, 160, 104, 73, 240, 61, 223, 28, 189, 16, 181, 12, 70, 65, 177, ++ 139, 104, 35, 185, 192, 111, 9, 104, 6, 240, 71, 219, 160, 96, 160, ++ 104, 16, 189, 192, 111, 16, 189, 45, 233, 240, 79, 140, 105, 133, 176, ++ 35, 105, 21, 70, 153, 66, 7, 208, 209, 248, 44, 144, 185, 241, 0, 15, ++ 4, 208, 217, 248, 0, 160, 2, 224, 79, 240, 0, 9, 202, 70, 166, 104, ++ 81, 70, 48, 70, 26, 240, 72, 248, 98, 104, 2, 144, 146, 249, 62, 48, ++ 115, 177, 150, 248, 33, 50, 11, 177, 131, 121, 107, 177, 150, 248, 34, ++ 50, 75, 185, 146, 248, 69, 48, 211, 241, 1, 3, 56, 191, 0, 35, 3, 224, ++ 1, 33, 1, 145, 1, 224, 0, 35, 1, 147, 0, 38, 55, 70, 179, 70, 176, 70, ++ 41, 70, 98, 224, 59, 75, 202, 138, 27, 104, 83, 248, 34, 48, 3, 147, ++ 0, 35, 203, 130, 99, 104, 88, 105, 254, 247, 167, 254, 5, 70, 41, 70, ++ 32, 70, 255, 247, 58, 255, 99, 104, 147, 248, 46, 48, 131, 177, 32, ++ 70, 73, 70, 255, 247, 162, 255, 88, 177, 41, 70, 6, 240, 48, 220, 2, ++ 40, 6, 209, 99, 104, 41, 70, 88, 105, 1, 34, 254, 247, 102, 254, 59, ++ 224, 99, 104, 147, 249, 62, 48, 0, 43, 42, 208, 1, 153, 129, 177, 32, ++ 70, 2, 153, 42, 70, 59, 70, 255, 247, 32, 255, 131, 70, 104, 177, 235, ++ 137, 67, 244, 128, 83, 235, 129, 54, 177, 43, 136, 243, 130, 46, 70, ++ 4, 224, 221, 248, 4, 176, 1, 224, 46, 70, 47, 70, 143, 177, 3, 153, ++ 17, 177, 187, 241, 0, 15, 24, 209, 57, 70, 160, 104, 82, 70, 10, 240, ++ 83, 255, 0, 40, 12, 191, 7, 70, 0, 39, 62, 70, 24, 191, 79, 240, 1, ++ 8, 187, 241, 0, 15, 8, 209, 160, 104, 41, 70, 82, 70, 10, 240, 67, 255, ++ 0, 40, 24, 191, 79, 240, 1, 8, 3, 153, 0, 41, 154, 209, 99, 104, 147, ++ 249, 62, 48, 75, 177, 71, 177, 160, 104, 57, 70, 82, 70, 10, 240, 50, ++ 255, 0, 40, 24, 191, 79, 240, 1, 8, 64, 70, 5, 176, 189, 232, 240, 143, ++ 32, 7, 0, 0, 45, 233, 248, 67, 67, 104, 23, 70, 138, 104, 12, 70, 145, ++ 248, 35, 128, 73, 104, 94, 105, 34, 240, 127, 67, 193, 243, 20, 1, 35, ++ 244, 96, 3, 91, 26, 3, 43, 46, 216, 180, 248, 12, 144, 48, 70, 9, 241, ++ 4, 1, 254, 247, 214, 253, 5, 70, 48, 185, 33, 70, 48, 70, 1, 34, 254, ++ 247, 241, 253, 44, 70, 44, 224, 195, 137, 226, 137, 35, 240, 7, 3, 27, ++ 4, 2, 240, 7, 2, 27, 12, 19, 67, 195, 129, 226, 137, 161, 104, 210, ++ 6, 76, 191, 67, 240, 16, 3, 35, 240, 16, 3, 195, 129, 128, 104, 74, ++ 70, 4, 48, 245, 247, 7, 254, 33, 70, 48, 70, 1, 34, 254, 247, 210, 253, ++ 44, 70, 4, 224, 163, 137, 4, 58, 4, 51, 162, 96, 163, 129, 163, 104, ++ 0, 33, 1, 34, 25, 112, 90, 112, 131, 248, 2, 128, 217, 112, 58, 112, ++ 32, 70, 189, 232, 248, 131, 0, 0, 45, 233, 243, 71, 31, 70, 3, 105, ++ 5, 70, 211, 248, 36, 128, 138, 70, 145, 70, 184, 241, 0, 15, 47, 208, ++ 68, 32, 254, 247, 121, 253, 4, 70, 0, 40, 42, 208, 68, 34, 0, 33, 4, ++ 241, 20, 6, 247, 243, 86, 241, 102, 96, 39, 96, 255, 247, 94, 254, 107, ++ 104, 186, 241, 2, 15, 96, 98, 229, 98, 205, 248, 0, 144, 12, 191, 16, ++ 74, 17, 74, 79, 240, 16, 1, 219, 104, 48, 70, 247, 243, 168, 241, 14, ++ 75, 36, 100, 27, 104, 64, 70, 91, 104, 49, 70, 152, 71, 0, 40, 10, 221, ++ 120, 113, 232, 111, 57, 70, 6, 240, 4, 218, 160, 96, 0, 224, 68, 70, ++ 32, 70, 189, 232, 252, 135, 32, 70, 254, 247, 72, 253, 0, 36, 247, 231, ++ 0, 191, 244, 49, 4, 0, 39, 56, 136, 0, 188, 7, 0, 0, 56, 181, 4, 70, ++ 99, 104, 128, 104, 27, 126, 203, 185, 5, 240, 220, 253, 5, 70, 32, 185, ++ 212, 248, 128, 0, 7, 240, 114, 220, 5, 70, 245, 247, 21, 255, 99, 104, ++ 211, 248, 152, 16, 89, 177, 11, 120, 75, 177, 6, 75, 0, 34, 24, 104, ++ 252, 247, 216, 252, 32, 70, 13, 240, 19, 217, 0, 224, 0, 37, 40, 70, ++ 56, 189, 0, 191, 252, 109, 4, 0, 31, 181, 8, 74, 3, 70, 0, 146, 7, 74, ++ 8, 70, 1, 146, 7, 74, 7, 73, 18, 104, 2, 146, 26, 104, 6, 75, 247, 243, ++ 101, 243, 5, 176, 0, 189, 0, 191, 57, 50, 4, 0, 211, 22, 4, 0, 0, 110, ++ 4, 0, 10, 50, 4, 0, 45, 50, 4, 0, 8, 177, 208, 248, 136, 0, 112, 71, ++ 0, 32, 112, 71, 45, 233, 240, 79, 4, 70, 208, 248, 136, 0, 21, 70, 3, ++ 136, 139, 176, 94, 25, 120, 46, 10, 120, 0, 243, 180, 128, 4, 42, 64, ++ 240, 165, 128, 162, 104, 146, 248, 0, 39, 0, 42, 0, 240, 159, 128, 209, ++ 248, 2, 48, 30, 14, 218, 178, 27, 10, 155, 178, 7, 147, 19, 35, 11, ++ 112, 75, 120, 5, 146, 1, 51, 75, 112, 148, 248, 140, 48, 6, 150, 79, ++ 234, 211, 12, 28, 240, 1, 12, 11, 208, 207, 136, 79, 240, 8, 9, 79, ++ 234, 87, 56, 63, 5, 8, 240, 1, 8, 63, 13, 205, 248, 16, 144, 3, 224, ++ 6, 34, 103, 70, 224, 70, 4, 146, 212, 248, 136, 0, 155, 8, 6, 136, 3, ++ 240, 1, 3, 0, 34, 9, 147, 2, 150, 147, 70, 19, 70, 162, 70, 1, 145, ++ 0, 149, 82, 224, 196, 24, 164, 120, 19, 44, 73, 209, 221, 248, 16, 144, ++ 196, 24, 153, 68, 0, 235, 9, 6, 100, 104, 182, 120, 205, 248, 12, 144, ++ 6, 235, 4, 9, 95, 250, 137, 249, 9, 153, 205, 248, 32, 144, 79, 234, ++ 20, 41, 31, 250, 137, 249, 17, 185, 177, 68, 31, 250, 137, 249, 188, ++ 241, 0, 15, 8, 208, 194, 24, 18, 137, 79, 234, 82, 59, 178, 24, 18, ++ 5, 11, 240, 1, 11, 18, 13, 5, 157, 8, 153, 141, 66, 32, 209, 7, 157, ++ 77, 69, 29, 209, 221, 248, 24, 144, 185, 235, 20, 111, 24, 209, 188, ++ 241, 0, 15, 6, 208, 216, 69, 19, 209, 184, 241, 0, 15, 1, 208, 151, ++ 66, 12, 209, 3, 153, 1, 54, 64, 24, 84, 70, 134, 112, 212, 248, 136, ++ 48, 211, 248, 172, 32, 1, 50, 195, 248, 172, 32, 40, 224, 79, 240, 1, ++ 11, 196, 24, 228, 120, 2, 52, 27, 25, 219, 178, 2, 157, 171, 66, 169, ++ 211, 2, 158, 0, 157, 128, 25, 84, 70, 42, 70, 1, 153, 2, 48, 245, 247, ++ 177, 252, 212, 248, 136, 48, 26, 136, 91, 25, 155, 24, 1, 34, 154, 112, ++ 212, 248, 136, 48, 26, 136, 1, 50, 7, 224, 192, 24, 42, 70, 2, 48, 245, ++ 247, 160, 252, 212, 248, 136, 48, 26, 136, 173, 24, 29, 128, 0, 32, ++ 1, 224, 79, 240, 255, 48, 11, 176, 189, 232, 240, 143, 248, 181, 31, ++ 70, 131, 104, 21, 70, 147, 248, 1, 38, 14, 70, 18, 240, 2, 2, 64, 242, ++ 198, 99, 9, 120, 24, 191, 26, 70, 1, 35, 139, 64, 19, 64, 4, 70, 25, ++ 208, 208, 248, 136, 48, 27, 136, 91, 25, 120, 43, 2, 221, 255, 247, ++ 29, 255, 136, 185, 49, 70, 32, 70, 42, 70, 255, 247, 25, 255, 163, 104, ++ 32, 70, 147, 248, 0, 23, 0, 41, 20, 191, 57, 70, 0, 33, 189, 232, 248, ++ 64, 13, 240, 59, 154, 24, 70, 248, 189, 1, 41, 1, 209, 144, 104, 112, ++ 71, 2, 41, 12, 191, 208, 104, 0, 32, 112, 71, 45, 233, 243, 71, 4, 70, ++ 23, 70, 137, 70, 9, 185, 6, 105, 0, 224, 78, 104, 215, 248, 8, 128, ++ 117, 106, 152, 248, 13, 48, 152, 248, 12, 160, 67, 234, 10, 42, 72, ++ 246, 108, 3, 195, 235, 10, 2, 210, 241, 0, 10, 74, 235, 2, 10, 186, ++ 241, 0, 15, 89, 209, 32, 70, 57, 70, 12, 240, 21, 221, 152, 248, 12, ++ 32, 152, 248, 13, 48, 67, 234, 2, 35, 179, 245, 1, 79, 5, 209, 152, ++ 248, 4, 32, 152, 248, 5, 48, 67, 234, 2, 35, 98, 104, 146, 248, 46, ++ 32, 0, 42, 47, 208, 179, 245, 192, 111, 3, 211, 64, 246, 6, 2, 147, ++ 66, 45, 209, 32, 70, 73, 70, 255, 247, 28, 253, 128, 70, 185, 241, 0, ++ 15, 8, 208, 217, 248, 0, 16, 33, 177, 160, 104, 25, 240, 128, 253, 129, ++ 70, 0, 224, 137, 70, 184, 241, 0, 15, 27, 208, 64, 70, 57, 70, 255, ++ 247, 84, 251, 4, 40, 4, 208, 5, 40, 14, 208, 1, 40, 15, 209, 22, 224, ++ 185, 241, 0, 15, 19, 208, 153, 248, 6, 48, 131, 177, 153, 248, 59, 48, ++ 43, 185, 12, 224, 144, 70, 4, 224, 79, 240, 1, 8, 1, 224, 79, 240, 0, ++ 8, 212, 248, 180, 0, 57, 70, 0, 240, 171, 251, 48, 177, 99, 104, 57, ++ 70, 88, 105, 0, 34, 72, 224, 79, 240, 0, 8, 0, 45, 64, 208, 186, 241, ++ 0, 15, 32, 209, 235, 105, 219, 7, 11, 213, 99, 125, 75, 177, 32, 70, ++ 57, 70, 12, 240, 121, 222, 32, 185, 99, 104, 57, 70, 88, 105, 82, 70, ++ 50, 224, 184, 241, 0, 15, 14, 209, 99, 104, 147, 248, 146, 48, 83, 177, ++ 212, 248, 132, 0, 57, 70, 42, 240, 251, 253, 32, 185, 99, 104, 57, 70, ++ 88, 105, 66, 70, 32, 224, 2, 170, 0, 35, 57, 70, 2, 248, 1, 61, 32, ++ 70, 255, 247, 115, 253, 1, 70, 192, 177, 157, 248, 7, 48, 131, 116, ++ 99, 104, 88, 105, 254, 247, 184, 251, 43, 105, 4, 70, 219, 104, 48, ++ 70, 41, 70, 34, 70, 152, 71, 72, 177, 32, 70, 246, 247, 155, 248, 5, ++ 224, 99, 104, 57, 70, 88, 105, 42, 70, 254, 247, 106, 251, 189, 232, ++ 252, 135, 45, 233, 240, 65, 151, 137, 131, 104, 6, 63, 6, 70, 57, 70, ++ 88, 104, 21, 70, 254, 247, 59, 251, 4, 70, 184, 177, 169, 104, 58, 70, ++ 6, 49, 128, 104, 245, 247, 133, 251, 149, 248, 32, 48, 48, 70, 132, ++ 248, 32, 48, 149, 248, 35, 48, 0, 33, 132, 248, 35, 48, 235, 106, 34, ++ 70, 227, 98, 1, 35, 189, 232, 240, 65, 255, 247, 23, 191, 189, 232, ++ 240, 129, 1, 105, 16, 181, 72, 106, 40, 177, 1, 105, 140, 105, 20, 177, ++ 17, 70, 26, 70, 160, 71, 16, 189, 83, 104, 115, 181, 18, 43, 4, 70, ++ 21, 70, 46, 208, 5, 216, 16, 43, 43, 208, 52, 216, 11, 43, 74, 209, ++ 6, 224, 33, 43, 11, 208, 46, 43, 25, 208, 25, 43, 67, 209, 15, 224, ++ 67, 104, 211, 248, 28, 33, 145, 7, 61, 213, 2, 34, 5, 224, 67, 104, ++ 211, 248, 28, 33, 210, 7, 54, 213, 1, 34, 195, 248, 32, 33, 50, 224, ++ 67, 104, 211, 248, 28, 33, 16, 7, 45, 213, 8, 34, 245, 231, 67, 104, ++ 211, 248, 28, 33, 81, 7, 38, 213, 234, 104, 1, 42, 35, 209, 4, 34, 235, ++ 231, 171, 120, 3, 240, 1, 3, 35, 117, 227, 177, 212, 248, 144, 0, 255, ++ 247, 136, 251, 23, 224, 2, 170, 0, 35, 66, 248, 4, 61, 128, 104, 149, ++ 248, 47, 16, 25, 240, 119, 252, 6, 70, 96, 177, 131, 121, 35, 185, 105, ++ 136, 193, 243, 128, 1, 34, 240, 199, 223, 179, 121, 27, 177, 160, 104, ++ 49, 70, 54, 240, 187, 222, 124, 189, 112, 71, 16, 181, 67, 104, 4, 70, ++ 27, 126, 123, 177, 208, 248, 128, 0, 7, 240, 206, 217, 160, 104, 5, ++ 240, 76, 254, 99, 104, 0, 33, 32, 70, 131, 248, 32, 16, 189, 232, 16, ++ 64, 12, 240, 94, 155, 16, 189, 36, 48, 112, 71, 67, 124, 0, 43, 20, ++ 191, 48, 35, 36, 35, 192, 24, 4, 48, 112, 71, 67, 124, 0, 43, 20, 191, ++ 64, 35, 40, 35, 192, 24, 4, 48, 112, 71, 67, 124, 2, 140, 0, 43, 20, ++ 191, 32, 35, 8, 35, 155, 24, 192, 24, 36, 48, 112, 71, 45, 233, 247, ++ 79, 189, 248, 48, 128, 189, 248, 52, 160, 131, 70, 1, 146, 153, 70, ++ 15, 70, 0, 41, 12, 191, 4, 38, 16, 38, 0, 37, 11, 235, 5, 3, 28, 105, ++ 196, 177, 99, 124, 187, 66, 21, 209, 32, 70, 255, 247, 203, 255, 1, ++ 153, 50, 70, 245, 247, 171, 250, 104, 185, 32, 70, 255, 247, 197, 255, ++ 73, 70, 50, 70, 245, 247, 163, 250, 40, 185, 99, 138, 67, 69, 2, 209, ++ 163, 138, 83, 69, 4, 208, 4, 53, 16, 45, 223, 209, 0, 32, 0, 224, 32, ++ 70, 189, 232, 254, 143, 3, 42, 16, 181, 4, 70, 60, 217, 72, 136, 4, ++ 58, 144, 66, 56, 216, 8, 136, 24, 128, 10, 136, 4, 42, 54, 216, 223, ++ 232, 2, 240, 3, 6, 12, 27, 32, 0, 4, 34, 90, 128, 23, 224, 8, 34, 90, ++ 128, 24, 29, 161, 29, 8, 34, 11, 224, 10, 121, 3, 42, 40, 216, 4, 50, ++ 84, 248, 34, 16, 0, 41, 38, 208, 202, 137, 24, 29, 90, 128, 16, 49, ++ 245, 247, 126, 250, 20, 224, 4, 32, 88, 128, 34, 121, 26, 113, 15, 224, ++ 5, 34, 90, 128, 4, 34, 26, 113, 0, 34, 33, 105, 9, 177, 9, 121, 0, 224, ++ 255, 33, 152, 24, 1, 50, 4, 52, 4, 42, 65, 113, 244, 209, 0, 32, 16, ++ 189, 111, 240, 13, 0, 16, 189, 111, 240, 22, 0, 16, 189, 111, 240, 28, ++ 0, 16, 189, 111, 240, 29, 0, 16, 189, 248, 181, 3, 104, 5, 70, 14, 70, ++ 88, 104, 17, 70, 23, 70, 254, 247, 255, 249, 4, 70, 88, 177, 49, 70, ++ 58, 70, 128, 104, 245, 247, 74, 250, 40, 104, 33, 70, 0, 34, 10, 240, ++ 43, 251, 0, 32, 248, 189, 79, 240, 255, 48, 248, 189, 3, 104, 137, 104, ++ 152, 104, 12, 240, 31, 154, 1, 35, 112, 181, 10, 113, 4, 70, 67, 113, ++ 5, 70, 0, 241, 16, 6, 41, 105, 17, 177, 32, 70, 255, 247, 238, 255, ++ 4, 53, 181, 66, 247, 209, 112, 189, 3, 104, 112, 181, 5, 70, 12, 70, ++ 152, 104, 137, 104, 22, 70, 12, 240, 5, 218, 79, 244, 122, 114, 43, ++ 104, 114, 67, 152, 104, 161, 104, 0, 35, 189, 232, 112, 64, 12, 240, ++ 212, 153, 45, 233, 240, 67, 142, 137, 133, 176, 13, 46, 5, 70, 140, ++ 104, 64, 243, 228, 128, 34, 123, 99, 123, 67, 234, 2, 35, 179, 245, ++ 192, 111, 2, 219, 4, 241, 12, 7, 13, 224, 21, 46, 64, 243, 215, 128, ++ 111, 72, 4, 241, 14, 1, 6, 34, 245, 247, 231, 249, 0, 40, 64, 240, 206, ++ 128, 4, 241, 20, 7, 57, 120, 122, 120, 163, 25, 66, 234, 1, 34, 178, ++ 245, 0, 111, 7, 241, 2, 8, 5, 208, 72, 242, 221, 97, 138, 66, 64, 240, ++ 189, 128, 57, 224, 185, 120, 1, 240, 15, 1, 137, 0, 8, 235, 1, 4, 156, ++ 66, 0, 242, 179, 128, 250, 122, 6, 42, 64, 240, 175, 128, 58, 137, 79, ++ 234, 18, 41, 73, 234, 2, 41, 79, 234, 137, 73, 79, 234, 153, 73, 185, ++ 241, 0, 15, 64, 240, 162, 128, 186, 136, 22, 10, 70, 234, 2, 38, 118, ++ 26, 182, 178, 162, 25, 147, 66, 192, 240, 156, 128, 64, 70, 252, 247, ++ 9, 251, 187, 137, 131, 66, 64, 240, 149, 128, 64, 70, 33, 70, 50, 70, ++ 252, 247, 16, 251, 35, 138, 131, 66, 64, 240, 140, 128, 7, 241, 14, ++ 3, 7, 241, 18, 2, 73, 70, 27, 224, 7, 241, 42, 4, 156, 66, 125, 216, ++ 58, 122, 6, 42, 122, 209, 250, 136, 22, 10, 70, 234, 2, 38, 182, 178, ++ 162, 25, 147, 66, 114, 211, 64, 70, 33, 70, 50, 70, 252, 247, 28, 251, ++ 123, 143, 131, 66, 106, 209, 7, 241, 10, 3, 7, 241, 26, 2, 1, 33, 0, ++ 44, 102, 208, 180, 248, 2, 224, 32, 136, 79, 234, 30, 44, 76, 234, 14, ++ 46, 31, 250, 142, 254, 167, 104, 212, 248, 4, 128, 205, 248, 0, 224, ++ 79, 234, 16, 46, 78, 234, 0, 32, 128, 178, 1, 144, 40, 70, 255, 247, ++ 155, 254, 63, 186, 152, 250, 136, 248, 129, 70, 0, 40, 74, 208, 4, 241, ++ 12, 1, 2, 34, 3, 168, 245, 247, 106, 249, 157, 248, 13, 48, 19, 240, ++ 16, 4, 5, 209, 40, 70, 73, 70, 2, 34, 255, 247, 37, 255, 56, 224, 157, ++ 248, 12, 32, 18, 9, 182, 235, 130, 15, 3, 208, 40, 70, 73, 70, 6, 34, ++ 41, 224, 16, 43, 3, 208, 40, 70, 73, 70, 3, 34, 35, 224, 217, 248, 24, ++ 48, 187, 66, 24, 209, 217, 248, 28, 48, 67, 69, 9, 208, 23, 217, 72, ++ 70, 255, 247, 94, 254, 185, 248, 34, 32, 1, 70, 40, 70, 255, 247, 227, ++ 254, 107, 137, 73, 70, 169, 248, 12, 48, 40, 70, 234, 136, 255, 247, ++ 11, 255, 79, 240, 1, 9, 12, 224, 40, 70, 73, 70, 4, 34, 2, 224, 40, ++ 70, 73, 70, 5, 34, 255, 247, 238, 254, 79, 240, 0, 9, 0, 224, 161, 70, ++ 72, 70, 5, 176, 189, 232, 240, 131, 0, 191, 66, 50, 4, 0, 0, 35, 112, ++ 181, 4, 70, 67, 113, 5, 70, 0, 241, 16, 6, 41, 105, 49, 177, 0, 34, ++ 10, 113, 99, 137, 32, 70, 139, 129, 255, 247, 228, 254, 4, 53, 181, ++ 66, 243, 209, 112, 189, 11, 29, 112, 181, 80, 248, 35, 64, 5, 70, 14, ++ 70, 132, 177, 163, 104, 59, 177, 33, 70, 255, 247, 190, 254, 43, 104, ++ 161, 104, 152, 104, 12, 240, 85, 217, 32, 70, 254, 247, 147, 248, 4, ++ 54, 0, 35, 69, 248, 38, 48, 112, 189, 56, 181, 5, 70, 0, 36, 225, 178, ++ 40, 70, 1, 52, 255, 247, 223, 255, 4, 44, 248, 209, 56, 189, 45, 233, ++ 248, 67, 2, 241, 36, 9, 31, 250, 137, 249, 5, 70, 72, 70, 136, 70, 23, ++ 70, 14, 120, 254, 247, 115, 248, 4, 70, 32, 179, 0, 33, 74, 70, 246, ++ 243, 83, 244, 65, 70, 58, 70, 37, 96, 231, 129, 4, 241, 16, 0, 245, ++ 247, 203, 248, 43, 104, 13, 73, 152, 104, 34, 70, 0, 35, 12, 240, 46, ++ 217, 160, 96, 48, 185, 32, 70, 254, 247, 92, 248, 79, 240, 255, 48, ++ 189, 232, 248, 131, 0, 32, 32, 113, 107, 137, 4, 54, 163, 129, 69, 248, ++ 38, 64, 189, 232, 248, 131, 111, 240, 26, 0, 189, 232, 248, 131, 175, ++ 211, 0, 0, 3, 42, 112, 181, 5, 70, 12, 70, 50, 217, 75, 136, 4, 58, ++ 147, 66, 46, 216, 10, 136, 2, 42, 14, 208, 3, 42, 27, 208, 1, 42, 42, ++ 209, 7, 43, 49, 217, 6, 121, 0, 46, 43, 209, 6, 48, 4, 49, 8, 34, 245, ++ 247, 146, 248, 44, 224, 9, 121, 3, 41, 31, 216, 3, 121, 0, 43, 31, 209, ++ 255, 247, 127, 255, 98, 136, 40, 70, 33, 29, 189, 232, 112, 64, 255, ++ 247, 156, 191, 3, 43, 23, 217, 14, 121, 3, 121, 179, 66, 22, 208, 6, ++ 113, 22, 177, 255, 247, 90, 255, 17, 224, 255, 247, 132, 255, 15, 224, ++ 111, 240, 13, 6, 12, 224, 111, 240, 22, 6, 9, 224, 111, 240, 28, 6, ++ 6, 224, 111, 240, 15, 6, 3, 224, 111, 240, 23, 6, 0, 224, 0, 38, 48, ++ 70, 112, 189, 48, 181, 3, 153, 4, 157, 5, 155, 6, 156, 18, 177, 1, 42, ++ 12, 209, 5, 224, 42, 70, 3, 148, 189, 232, 48, 64, 255, 247, 172, 189, ++ 25, 70, 34, 70, 189, 232, 48, 64, 255, 247, 161, 191, 111, 240, 22, ++ 0, 48, 189, 3, 121, 43, 177, 64, 121, 208, 241, 1, 0, 56, 191, 0, 32, ++ 112, 71, 24, 70, 112, 71, 56, 181, 4, 70, 13, 70, 255, 247, 241, 255, ++ 40, 177, 32, 70, 41, 70, 189, 232, 56, 64, 255, 247, 30, 190, 56, 189, ++ 240, 181, 5, 104, 4, 70, 135, 176, 40, 70, 255, 247, 226, 255, 0, 40, ++ 45, 208, 166, 137, 222, 185, 40, 70, 33, 70, 1, 34, 5, 175, 255, 247, ++ 231, 253, 49, 70, 4, 34, 56, 70, 246, 243, 157, 243, 35, 124, 151, 33, ++ 141, 248, 20, 48, 40, 104, 4, 35, 208, 248, 108, 34, 3, 147, 194, 50, ++ 5, 35, 0, 150, 1, 150, 2, 151, 29, 240, 25, 223, 15, 224, 32, 70, 255, ++ 247, 28, 253, 34, 140, 1, 70, 40, 70, 255, 247, 170, 253, 163, 137, ++ 40, 70, 1, 59, 163, 129, 33, 70, 42, 137, 255, 247, 210, 253, 7, 176, ++ 240, 189, 144, 249, 33, 0, 112, 71, 79, 244, 192, 112, 112, 71, 8, 181, ++ 0, 104, 255, 247, 249, 255, 0, 40, 56, 191, 0, 32, 0, 40, 8, 191, 2, ++ 32, 128, 178, 8, 189, 2, 104, 48, 181, 210, 248, 108, 50, 212, 104, ++ 152, 66, 40, 209, 146, 248, 114, 50, 43, 187, 208, 248, 4, 17, 73, 123, ++ 25, 187, 208, 248, 244, 16, 0, 124, 205, 141, 107, 0, 96, 177, 145, ++ 248, 96, 0, 67, 67, 146, 248, 45, 2, 8, 177, 67, 67, 4, 224, 146, 248, ++ 44, 34, 10, 177, 83, 0, 107, 67, 9, 142, 212, 248, 128, 1, 212, 248, ++ 140, 33, 9, 185, 130, 66, 10, 211, 155, 2, 24, 24, 130, 66, 148, 191, ++ 0, 32, 1, 32, 48, 189, 0, 32, 48, 189, 24, 70, 48, 189, 1, 32, 48, 189, ++ 100, 41, 16, 220, 99, 41, 33, 218, 74, 41, 31, 208, 5, 220, 7, 41, 31, ++ 219, 8, 41, 26, 221, 60, 41, 18, 224, 80, 41, 22, 208, 24, 219, 92, ++ 57, 3, 41, 17, 224, 195, 41, 4, 220, 194, 41, 14, 218, 168, 57, 2, 41, ++ 10, 224, 177, 245, 132, 127, 8, 208, 3, 220, 177, 245, 128, 127, 7, ++ 209, 3, 224, 161, 245, 137, 113, 1, 41, 2, 216, 111, 240, 22, 0, 112, ++ 71, 0, 32, 112, 71, 0, 32, 112, 71, 200, 136, 16, 240, 8, 0, 24, 191, ++ 111, 240, 22, 0, 112, 71, 208, 248, 164, 53, 88, 137, 112, 71, 72, 242, ++ 243, 3, 153, 66, 6, 208, 72, 242, 55, 16, 9, 26, 72, 66, 64, 235, 1, ++ 0, 112, 71, 1, 32, 112, 71, 67, 137, 3, 240, 3, 3, 2, 43, 3, 209, 195, ++ 106, 216, 120, 192, 9, 112, 71, 3, 43, 4, 209, 195, 106, 216, 120, 0, ++ 240, 1, 0, 112, 71, 0, 32, 112, 71, 131, 122, 3, 240, 3, 3, 2, 43, 7, ++ 209, 195, 106, 219, 120, 19, 240, 48, 15, 12, 191, 0, 32, 1, 32, 112, ++ 71, 3, 43, 4, 209, 195, 106, 24, 120, 192, 243, 192, 0, 112, 71, 0, ++ 32, 112, 71, 200, 136, 192, 243, 192, 16, 112, 71, 200, 136, 192, 243, ++ 128, 0, 112, 71, 208, 248, 104, 49, 216, 121, 16, 241, 255, 48, 24, ++ 191, 1, 32, 112, 71, 8, 124, 168, 177, 209, 248, 244, 16, 73, 142, 81, ++ 64, 17, 244, 96, 80, 14, 208, 2, 244, 96, 82, 178, 245, 128, 95, 6, ++ 208, 178, 245, 192, 95, 5, 209, 24, 28, 24, 191, 1, 32, 112, 71, 1, ++ 32, 112, 71, 0, 32, 112, 71, 11, 105, 19, 177, 147, 248, 37, 19, 185, ++ 185, 153, 121, 25, 185, 0, 104, 144, 248, 44, 0, 120, 185, 2, 244, 64, ++ 112, 176, 245, 64, 127, 12, 208, 112, 177, 211, 248, 4, 49, 24, 120, ++ 72, 177, 160, 241, 2, 1, 72, 66, 64, 235, 1, 0, 112, 71, 8, 70, 112, ++ 71, 0, 32, 112, 71, 1, 32, 112, 71, 203, 104, 72, 177, 1, 136, 79, 246, ++ 255, 114, 145, 66, 4, 209, 27, 177, 90, 120, 10, 177, 155, 120, 3, 128, ++ 0, 32, 112, 71, 0, 34, 10, 96, 16, 240, 64, 114, 195, 178, 11, 208, ++ 178, 241, 128, 127, 2, 209, 67, 240, 128, 115, 5, 224, 178, 241, 0, ++ 127, 45, 209, 195, 178, 67, 240, 0, 115, 0, 244, 64, 114, 19, 67, 194, ++ 2, 72, 191, 67, 244, 128, 19, 66, 2, 72, 191, 67, 244, 128, 3, 2, 2, ++ 0, 244, 224, 32, 72, 191, 67, 244, 0, 3, 176, 245, 128, 63, 2, 209, ++ 67, 244, 128, 51, 16, 224, 176, 245, 0, 63, 2, 209, 67, 244, 0, 51, ++ 10, 224, 176, 245, 64, 63, 2, 209, 67, 244, 64, 51, 4, 224, 176, 245, ++ 128, 47, 8, 191, 67, 244, 128, 35, 11, 96, 0, 32, 112, 71, 111, 240, ++ 1, 0, 112, 71, 0, 0, 112, 181, 5, 104, 208, 248, 8, 5, 213, 248, 136, ++ 64, 102, 104, 1, 54, 102, 96, 166, 104, 182, 24, 166, 96, 16, 177, 132, ++ 105, 1, 52, 132, 97, 209, 248, 248, 0, 16, 185, 12, 105, 228, 104, 0, ++ 224, 4, 70, 102, 105, 1, 54, 102, 97, 8, 185, 9, 105, 200, 104, 129, ++ 105, 137, 24, 129, 97, 105, 107, 105, 177, 7, 72, 213, 248, 140, 16, ++ 195, 92, 6, 72, 195, 92, 1, 235, 195, 3, 89, 104, 1, 49, 89, 96, 153, ++ 104, 82, 24, 154, 96, 112, 189, 0, 191, 138, 182, 135, 0, 84, 194, 135, ++ 0, 3, 104, 88, 107, 112, 177, 211, 248, 140, 0, 7, 75, 155, 92, 7, 74, ++ 211, 92, 4, 51, 0, 235, 195, 3, 90, 104, 1, 50, 90, 96, 154, 104, 137, ++ 24, 153, 96, 112, 71, 0, 191, 138, 182, 135, 0, 84, 194, 135, 0, 74, ++ 104, 16, 181, 147, 66, 76, 136, 41, 219, 227, 6, 3, 213, 3, 104, 27, ++ 126, 0, 43, 38, 209, 33, 7, 3, 213, 3, 104, 27, 126, 0, 43, 35, 208, ++ 162, 6, 2, 213, 67, 126, 0, 43, 33, 208, 99, 7, 34, 212, 20, 240, 3, ++ 3, 34, 208, 2, 153, 24, 240, 174, 255, 0, 40, 31, 208, 225, 7, 2, 213, ++ 131, 121, 0, 43, 29, 209, 20, 240, 2, 4, 29, 208, 131, 121, 0, 43, 12, ++ 191, 111, 240, 5, 0, 0, 32, 16, 189, 111, 240, 1, 0, 16, 189, 111, 240, ++ 4, 0, 16, 189, 111, 240, 3, 0, 16, 189, 111, 240, 10, 0, 16, 189, 111, ++ 240, 22, 0, 16, 189, 24, 70, 16, 189, 111, 240, 29, 0, 16, 189, 111, ++ 240, 6, 0, 16, 189, 32, 70, 16, 189, 136, 110, 56, 181, 12, 70, 21, ++ 70, 40, 177, 253, 247, 172, 253, 0, 35, 163, 102, 164, 248, 108, 48, ++ 32, 70, 41, 70, 79, 244, 146, 114, 189, 232, 56, 64, 244, 247, 3, 190, ++ 45, 233, 248, 67, 6, 70, 13, 70, 23, 70, 152, 70, 209, 248, 204, 144, ++ 208, 248, 160, 69, 16, 224, 213, 248, 204, 48, 153, 69, 14, 209, 227, ++ 104, 171, 66, 8, 209, 163, 121, 155, 7, 5, 213, 176, 104, 161, 104, ++ 58, 70, 67, 70, 255, 247, 119, 250, 36, 104, 0, 44, 236, 209, 189, 232, ++ 248, 131, 0, 0, 248, 181, 64, 104, 12, 70, 21, 70, 30, 70, 251, 247, ++ 109, 253, 5, 241, 107, 2, 144, 66, 163, 104, 124, 211, 167, 137, 5, ++ 241, 8, 2, 151, 66, 119, 211, 90, 25, 91, 93, 170, 43, 115, 209, 83, ++ 120, 170, 43, 112, 209, 147, 120, 3, 43, 109, 209, 208, 120, 0, 40, ++ 106, 209, 17, 121, 0, 41, 106, 209, 83, 121, 0, 43, 96, 209, 209, 136, ++ 8, 10, 64, 234, 1, 33, 50, 72, 9, 178, 129, 66, 90, 209, 167, 241, 8, ++ 3, 93, 27, 2, 208, 2, 241, 8, 3, 8, 224, 46, 75, 162, 138, 27, 104, ++ 83, 248, 34, 0, 0, 40, 81, 208, 131, 104, 133, 137, 98, 45, 74, 217, ++ 26, 120, 1, 58, 210, 178, 1, 42, 69, 216, 90, 120, 3, 42, 66, 209, 90, ++ 136, 17, 10, 65, 234, 2, 34, 146, 178, 94, 42, 61, 217, 26, 121, 2, ++ 42, 1, 208, 254, 42, 41, 209, 89, 121, 154, 121, 66, 234, 1, 34, 194, ++ 243, 192, 5, 194, 243, 192, 17, 194, 243, 0, 32, 194, 243, 128, 39, ++ 194, 243, 192, 36, 110, 177, 3, 46, 24, 209, 173, 177, 180, 185, 184, ++ 177, 193, 185, 207, 185, 179, 248, 97, 96, 214, 241, 1, 6, 56, 191, ++ 0, 38, 19, 224, 147, 5, 17, 212, 128, 185, 121, 177, 82, 6, 13, 212, ++ 101, 177, 95, 185, 132, 240, 1, 6, 8, 224, 46, 70, 6, 224, 0, 38, 4, ++ 224, 6, 70, 2, 224, 38, 70, 0, 224, 14, 70, 48, 70, 248, 189, 8, 70, ++ 248, 189, 24, 70, 248, 189, 0, 32, 248, 189, 0, 32, 248, 189, 0, 191, ++ 142, 136, 255, 255, 32, 7, 0, 0, 45, 233, 248, 67, 0, 235, 66, 2, 5, ++ 70, 12, 70, 152, 70, 8, 159, 163, 241, 14, 6, 178, 248, 76, 148, 58, ++ 240, 236, 221, 1, 56, 1, 40, 7, 216, 40, 70, 33, 70, 58, 240, 207, 221, ++ 16, 177, 129, 69, 40, 191, 129, 70, 169, 241, 42, 3, 158, 66, 3, 210, ++ 62, 96, 1, 32, 189, 232, 248, 131, 212, 248, 164, 49, 98, 104, 217, ++ 7, 15, 75, 88, 191, 169, 241, 28, 9, 2, 234, 3, 3, 72, 191, 169, 241, ++ 34, 9, 11, 177, 169, 241, 2, 9, 78, 69, 12, 217, 35, 125, 218, 7, 9, ++ 212, 41, 240, 1, 3, 168, 241, 15, 0, 192, 24, 59, 96, 176, 251, 243, ++ 240, 189, 232, 248, 131, 62, 96, 1, 32, 189, 232, 248, 131, 64, 0, 1, ++ 0, 45, 233, 248, 67, 137, 104, 139, 137, 8, 43, 92, 209, 200, 125, 139, ++ 123, 6, 40, 88, 209, 3, 240, 15, 3, 155, 0, 1, 241, 14, 4, 228, 24, ++ 103, 123, 77, 124, 16, 47, 8, 124, 38, 123, 76, 209, 0, 2, 54, 9, 40, ++ 24, 3, 235, 134, 3, 128, 178, 131, 66, 68, 209, 148, 248, 8, 128, 99, ++ 122, 148, 248, 10, 192, 231, 122, 0, 42, 57, 208, 144, 104, 130, 137, ++ 8, 42, 56, 209, 197, 125, 6, 45, 53, 209, 133, 123, 0, 241, 14, 6, 5, ++ 240, 15, 5, 6, 235, 133, 5, 110, 123, 16, 46, 43, 209, 149, 248, 8, ++ 144, 110, 122, 79, 234, 9, 105, 54, 4, 78, 68, 149, 248, 10, 144, 27, ++ 4, 79, 234, 9, 41, 79, 234, 8, 104, 78, 68, 67, 68, 149, 248, 11, 144, ++ 79, 234, 12, 44, 99, 68, 78, 68, 219, 25, 158, 66, 18, 217, 26, 48, ++ 26, 49, 244, 247, 163, 252, 128, 185, 4, 34, 40, 70, 33, 70, 244, 247, ++ 157, 252, 208, 241, 1, 0, 56, 191, 0, 32, 189, 232, 248, 131, 16, 70, ++ 189, 232, 248, 131, 0, 32, 189, 232, 248, 131, 0, 32, 189, 232, 248, ++ 131, 0, 0, 48, 181, 19, 72, 145, 176, 0, 104, 21, 156, 15, 144, 17, ++ 72, 18, 77, 7, 144, 32, 104, 11, 149, 8, 144, 16, 72, 9, 144, 160, 104, ++ 100, 104, 10, 144, 14, 144, 7, 168, 0, 144, 4, 147, 4, 32, 20, 155, ++ 12, 148, 1, 144, 11, 76, 0, 32, 2, 144, 3, 144, 5, 147, 8, 70, 1, 35, ++ 17, 70, 15, 170, 13, 148, 71, 240, 173, 216, 17, 176, 48, 189, 0, 191, ++ 250, 20, 4, 0, 13, 195, 129, 0, 233, 194, 129, 0, 209, 194, 129, 0, ++ 31, 214, 0, 0, 45, 233, 243, 71, 4, 70, 8, 70, 22, 70, 31, 70, 13, 70, ++ 221, 248, 40, 128, 255, 247, 105, 252, 1, 170, 1, 70, 32, 70, 24, 240, ++ 183, 253, 214, 248, 40, 160, 129, 70, 154, 248, 0, 48, 218, 7, 21, 213, ++ 0, 40, 49, 208, 208, 248, 204, 48, 91, 5, 55, 212, 208, 248, 244, 48, ++ 91, 142, 3, 244, 64, 67, 163, 245, 64, 76, 220, 241, 0, 3, 67, 235, ++ 12, 3, 14, 51, 0, 235, 131, 3, 88, 104, 25, 224, 120, 177, 49, 70, 32, ++ 70, 255, 247, 247, 252, 3, 28, 24, 191, 1, 35, 32, 70, 73, 70, 82, 70, ++ 47, 240, 0, 252, 16, 177, 208, 248, 16, 144, 5, 224, 32, 70, 177, 106, ++ 24, 240, 212, 253, 129, 70, 0, 32, 185, 241, 0, 15, 3, 208, 153, 248, ++ 68, 48, 133, 248, 33, 48, 168, 98, 15, 177, 199, 248, 0, 144, 184, 241, ++ 0, 15, 4, 208, 200, 248, 0, 0, 1, 224, 0, 32, 239, 231, 189, 232, 252, ++ 135, 0, 0, 248, 181, 205, 178, 107, 30, 14, 45, 140, 191, 79, 244, 64, ++ 71, 0, 39, 222, 43, 6, 70, 18, 216, 14, 45, 7, 216, 30, 72, 41, 70, ++ 246, 243, 37, 246, 4, 28, 24, 191, 1, 36, 9, 224, 27, 72, 41, 70, 246, ++ 243, 29, 246, 0, 40, 20, 191, 5, 36, 0, 36, 0, 224, 0, 36, 224, 7, 37, ++ 213, 69, 244, 128, 85, 61, 67, 214, 248, 92, 1, 41, 70, 66, 240, 115, ++ 217, 8, 177, 68, 240, 2, 4, 161, 7, 24, 213, 41, 70, 214, 248, 92, 1, ++ 66, 240, 5, 216, 41, 70, 1, 40, 214, 248, 92, 1, 8, 191, 68, 240, 8, ++ 4, 66, 240, 104, 216, 8, 177, 68, 240, 64, 4, 214, 248, 92, 1, 41, 70, ++ 65, 240, 198, 223, 8, 177, 68, 240, 32, 4, 32, 70, 248, 189, 0, 191, ++ 170, 201, 135, 0, 198, 201, 135, 0, 56, 181, 4, 70, 212, 248, 52, 19, ++ 128, 104, 11, 240, 163, 219, 212, 248, 60, 21, 208, 241, 1, 5, 160, ++ 104, 56, 191, 0, 37, 11, 240, 154, 219, 0, 185, 1, 53, 212, 248, 116, ++ 52, 160, 104, 211, 248, 48, 17, 11, 240, 145, 219, 0, 185, 1, 53, 40, ++ 70, 56, 189, 56, 181, 13, 70, 128, 179, 121, 179, 131, 121, 4, 104, ++ 99, 187, 212, 248, 108, 50, 26, 122, 66, 179, 211, 248, 4, 49, 27, 120, ++ 35, 179, 35, 104, 147, 248, 120, 48, 3, 179, 148, 248, 160, 55, 235, ++ 185, 148, 248, 208, 55, 211, 177, 148, 248, 184, 55, 35, 177, 160, 104, ++ 212, 248, 180, 23, 11, 240, 108, 219, 170, 139, 160, 104, 18, 244, 0, ++ 82, 24, 191, 13, 34, 212, 248, 180, 23, 0, 35, 11, 240, 59, 219, 1, ++ 35, 0, 34, 132, 248, 184, 55, 132, 248, 208, 39, 132, 248, 160, 55, ++ 56, 189, 45, 233, 240, 65, 6, 159, 5, 70, 6, 47, 20, 70, 30, 70, 17, ++ 221, 88, 28, 9, 73, 3, 34, 244, 247, 84, 251, 88, 185, 51, 121, 9, 43, ++ 8, 209, 213, 248, 80, 1, 33, 70, 50, 70, 59, 70, 189, 232, 240, 65, ++ 84, 240, 252, 156, 189, 232, 240, 129, 68, 29, 136, 0, 45, 233, 240, ++ 65, 164, 176, 144, 70, 6, 70, 42, 168, 37, 200, 205, 248, 32, 128, 3, ++ 144, 7, 136, 12, 70, 181, 248, 0, 192, 184, 248, 12, 128, 7, 244, 128, ++ 78, 9, 147, 180, 248, 68, 48, 205, 248, 64, 224, 0, 235, 12, 14, 204, ++ 235, 8, 12, 205, 248, 20, 192, 173, 248, 116, 48, 178, 248, 12, 192, ++ 62, 248, 2, 60, 141, 248, 108, 192, 195, 243, 192, 19, 79, 240, 0, 12, ++ 23, 244, 128, 127, 141, 248, 57, 48, 113, 104, 173, 248, 40, 112, 205, ++ 248, 16, 224, 205, 248, 24, 128, 141, 248, 56, 192, 0, 241, 16, 3, 3, ++ 209, 4, 48, 31, 147, 32, 144, 2, 224, 10, 48, 31, 144, 32, 147, 0, 35, ++ 17, 147, 19, 123, 48, 70, 0, 147, 34, 70, 3, 171, 94, 240, 65, 220, ++ 16, 155, 48, 185, 243, 177, 212, 248, 116, 49, 1, 51, 196, 248, 116, ++ 49, 24, 224, 35, 177, 212, 248, 112, 49, 1, 51, 196, 248, 112, 49, 8, ++ 155, 17, 152, 155, 104, 30, 147, 136, 177, 3, 122, 4, 43, 13, 209, 48, ++ 70, 3, 169, 94, 240, 192, 220, 17, 155, 42, 136, 147, 249, 14, 48, 211, ++ 24, 43, 128, 2, 224, 79, 240, 255, 48, 0, 224, 0, 32, 36, 176, 189, ++ 232, 240, 129, 56, 181, 160, 248, 72, 20, 4, 70, 208, 248, 92, 1, 13, ++ 70, 25, 240, 35, 254, 212, 248, 116, 20, 75, 123, 35, 177, 32, 70, 14, ++ 49, 42, 70, 48, 240, 118, 253, 33, 106, 32, 70, 48, 240, 109, 254, 32, ++ 70, 21, 240, 239, 216, 212, 248, 16, 7, 189, 232, 56, 64, 51, 240, 137, ++ 186, 112, 181, 4, 104, 13, 70, 212, 248, 108, 50, 152, 66, 62, 209, ++ 35, 104, 26, 126, 0, 42, 58, 208, 147, 248, 120, 48, 0, 43, 54, 208, ++ 148, 248, 46, 50, 65, 185, 115, 179, 160, 104, 212, 248, 236, 17, 11, ++ 240, 145, 218, 132, 248, 46, 82, 38, 224, 147, 177, 212, 248, 236, 17, ++ 160, 104, 11, 240, 136, 218, 0, 35, 132, 248, 46, 50, 250, 243, 39, ++ 240, 196, 248, 48, 2, 5, 224, 160, 104, 212, 248, 236, 17, 79, 244, ++ 122, 114, 11, 224, 148, 248, 46, 50, 155, 185, 32, 70, 166, 104, 212, ++ 248, 236, 81, 21, 240, 129, 220, 41, 70, 2, 70, 48, 70, 1, 35, 11, 240, ++ 69, 218, 1, 35, 132, 248, 46, 50, 112, 189, 148, 248, 46, 50, 0, 43, ++ 226, 208, 112, 189, 112, 181, 5, 104, 6, 70, 255, 247, 133, 250, 43, ++ 104, 4, 70, 147, 248, 60, 48, 35, 177, 213, 248, 84, 1, 78, 240, 90, ++ 217, 36, 24, 40, 70, 49, 70, 34, 70, 56, 240, 10, 222, 128, 178, 112, ++ 189, 45, 233, 248, 67, 7, 104, 12, 70, 21, 70, 152, 70, 215, 248, 180, ++ 98, 79, 240, 0, 9, 12, 224, 32, 70, 49, 104, 245, 243, 101, 246, 40, ++ 185, 115, 104, 157, 66, 2, 209, 179, 104, 152, 69, 25, 208, 177, 70, ++ 246, 104, 0, 46, 240, 209, 16, 32, 253, 247, 229, 249, 120, 177, 128, ++ 232, 48, 1, 198, 96, 185, 241, 0, 15, 4, 208, 201, 248, 12, 0, 48, 70, ++ 189, 232, 248, 131, 199, 248, 180, 2, 72, 70, 189, 232, 248, 131, 111, ++ 240, 21, 0, 189, 232, 248, 131, 45, 233, 240, 79, 208, 248, 160, 81, ++ 143, 176, 153, 70, 0, 35, 11, 149, 4, 70, 15, 70, 221, 248, 100, 160, ++ 12, 147, 155, 70, 29, 70, 148, 70, 152, 70, 54, 224, 212, 248, 4, 39, ++ 238, 0, 82, 248, 53, 0, 176, 177, 57, 70, 205, 248, 28, 192, 16, 240, ++ 185, 222, 221, 248, 28, 192, 3, 70, 32, 179, 193, 136, 79, 246, 255, ++ 114, 145, 66, 29, 208, 212, 248, 4, 55, 50, 70, 154, 24, 82, 104, 6, ++ 70, 224, 70, 9, 146, 36, 224, 212, 248, 168, 34, 90, 68, 16, 106, 136, ++ 177, 57, 70, 205, 248, 28, 192, 16, 240, 157, 222, 221, 248, 28, 192, ++ 3, 70, 64, 177, 212, 248, 168, 50, 6, 70, 91, 68, 224, 70, 155, 106, ++ 14, 224, 79, 240, 1, 8, 1, 53, 11, 241, 56, 11, 34, 104, 146, 248, 184, ++ 32, 149, 66, 195, 219, 30, 70, 67, 70, 224, 70, 0, 43, 46, 209, 9, 147, ++ 35, 104, 147, 248, 184, 48, 157, 66, 26, 218, 42, 224, 212, 248, 168, ++ 50, 91, 68, 27, 106, 131, 177, 212, 248, 4, 39, 82, 248, 53, 32, 90, ++ 177, 24, 70, 57, 70, 16, 240, 110, 222, 48, 177, 212, 248, 168, 50, ++ 6, 70, 91, 68, 155, 106, 9, 147, 12, 224, 1, 53, 11, 241, 56, 11, 2, ++ 224, 0, 37, 171, 70, 48, 70, 35, 104, 147, 248, 184, 48, 157, 66, 221, ++ 219, 6, 70, 35, 104, 147, 248, 184, 48, 157, 66, 2, 219, 111, 240, 22, ++ 3, 32, 224, 184, 241, 0, 15, 2, 209, 221, 248, 96, 128, 209, 70, 51, ++ 137, 27, 177, 8, 43, 12, 191, 83, 70, 4, 35, 10, 147, 157, 248, 104, ++ 32, 179, 136, 91, 0, 2, 177, 1, 51, 67, 72, 57, 70, 7, 34, 8, 147, 245, ++ 243, 212, 245, 132, 70, 0, 40, 70, 209, 185, 241, 3, 15, 3, 220, 111, ++ 240, 13, 3, 12, 147, 107, 224, 4, 34, 65, 70, 13, 168, 205, 248, 28, ++ 192, 244, 247, 135, 249, 32, 70, 13, 153, 12, 170, 24, 240, 219, 250, ++ 12, 155, 131, 70, 30, 51, 221, 248, 28, 192, 26, 209, 8, 154, 208, 7, ++ 23, 213, 1, 35, 0, 147, 32, 70, 13, 153, 98, 70, 99, 70, 57, 240, 195, ++ 218, 131, 70, 24, 185, 111, 240, 26, 3, 12, 147, 9, 224, 32, 70, 89, ++ 70, 24, 240, 153, 252, 12, 144, 24, 177, 32, 70, 89, 70, 57, 240, 181, ++ 220, 12, 155, 0, 43, 59, 209, 8, 155, 7, 55, 217, 7, 8, 241, 4, 8, 169, ++ 241, 4, 9, 4, 213, 24, 154, 170, 241, 4, 10, 4, 50, 24, 146, 219, 248, ++ 12, 48, 27, 147, 8, 154, 27, 155, 2, 240, 1, 11, 1, 147, 32, 70, 49, ++ 70, 24, 154, 83, 70, 205, 248, 0, 176, 28, 240, 155, 220, 12, 144, 224, ++ 185, 24, 154, 141, 232, 0, 3, 2, 146, 10, 154, 212, 248, 172, 50, 4, ++ 146, 27, 154, 205, 248, 12, 160, 5, 146, 83, 248, 37, 0, 49, 70, 8, ++ 154, 59, 70, 9, 157, 168, 71, 12, 144, 187, 241, 0, 15, 5, 208, 11, ++ 157, 43, 120, 19, 177, 40, 70, 103, 240, 164, 223, 12, 152, 40, 177, ++ 0, 241, 52, 3, 52, 43, 156, 191, 35, 104, 152, 102, 15, 176, 189, 232, ++ 240, 143, 0, 191, 70, 62, 136, 0, 139, 105, 67, 244, 0, 115, 139, 97, ++ 195, 104, 211, 248, 128, 49, 211, 24, 75, 98, 112, 71, 19, 181, 0, 36, ++ 0, 148, 29, 240, 87, 220, 28, 189, 145, 248, 33, 0, 145, 248, 32, 48, ++ 130, 248, 33, 0, 136, 106, 130, 248, 32, 48, 144, 98, 200, 106, 0, 35, ++ 208, 98, 136, 139, 129, 248, 32, 48, 144, 131, 72, 106, 80, 98, 72, ++ 107, 80, 99, 75, 99, 139, 139, 136, 105, 147, 131, 9, 75, 3, 64, 136, ++ 127, 147, 97, 0, 240, 79, 0, 144, 119, 200, 127, 32, 240, 49, 0, 208, ++ 119, 136, 105, 0, 240, 0, 64, 3, 67, 147, 97, 11, 107, 19, 99, 112, ++ 71, 242, 70, 128, 95, 45, 233, 240, 79, 137, 176, 8, 171, 7, 70, 0, ++ 32, 67, 248, 4, 13, 144, 104, 14, 105, 4, 137, 176, 248, 6, 192, 176, ++ 248, 0, 144, 176, 248, 2, 160, 176, 248, 4, 176, 4, 148, 68, 137, 14, ++ 48, 144, 96, 144, 137, 21, 70, 14, 56, 144, 129, 215, 248, 160, 1, 5, ++ 148, 205, 248, 12, 192, 136, 70, 103, 240, 153, 222, 50, 124, 4, 70, ++ 3, 136, 221, 248, 12, 192, 26, 179, 216, 248, 164, 33, 210, 7, 14, 213, ++ 4, 154, 160, 248, 134, 144, 160, 248, 144, 32, 5, 154, 160, 248, 136, ++ 160, 160, 248, 138, 176, 160, 248, 142, 192, 160, 248, 146, 32, 16, ++ 224, 178, 121, 50, 185, 160, 248, 134, 144, 160, 248, 136, 160, 160, ++ 248, 138, 176, 7, 224, 4, 154, 160, 248, 134, 192, 160, 248, 136, 32, ++ 5, 154, 160, 248, 138, 32, 180, 248, 76, 32, 2, 240, 7, 9, 185, 241, ++ 4, 15, 6, 209, 56, 70, 49, 70, 3, 147, 11, 240, 165, 222, 3, 155, 14, ++ 224, 183, 248, 62, 19, 34, 244, 254, 66, 72, 28, 167, 248, 62, 3, 72, ++ 2, 71, 246, 224, 113, 34, 240, 224, 2, 1, 64, 66, 234, 1, 0, 164, 248, ++ 76, 0, 170, 139, 208, 4, 2, 212, 169, 105, 73, 5, 3, 213, 18, 1, 164, ++ 248, 140, 32, 15, 224, 3, 240, 16, 3, 155, 178, 91, 185, 234, 137, 2, ++ 240, 7, 2, 96, 50, 8, 235, 66, 2, 211, 136, 89, 28, 27, 1, 209, 128, ++ 164, 248, 140, 48, 171, 139, 180, 248, 140, 32, 35, 244, 126, 99, 35, ++ 240, 31, 3, 67, 234, 18, 19, 171, 131, 184, 104, 11, 240, 61, 221, 2, ++ 7, 3, 213, 171, 139, 67, 244, 0, 83, 171, 131, 171, 105, 155, 5, 9, ++ 213, 171, 140, 164, 248, 66, 48, 235, 140, 164, 248, 68, 48, 35, 136, ++ 67, 244, 0, 83, 35, 128, 59, 104, 147, 248, 69, 48, 99, 177, 185, 241, ++ 3, 15, 9, 216, 42, 75, 215, 248, 100, 1, 19, 248, 9, 16, 79, 240, 255, ++ 50, 67, 70, 61, 240, 221, 219, 170, 105, 7, 155, 19, 67, 171, 97, 179, ++ 121, 43, 185, 214, 248, 72, 51, 251, 177, 155, 123, 216, 7, 28, 213, ++ 152, 248, 231, 48, 203, 177, 185, 241, 4, 15, 22, 208, 28, 74, 152, ++ 248, 218, 16, 18, 248, 9, 32, 4, 241, 118, 3, 81, 250, 2, 242, 18, 240, ++ 1, 15, 79, 240, 1, 2, 0, 146, 56, 70, 65, 70, 42, 70, 2, 208, 44, 240, ++ 21, 220, 1, 224, 44, 240, 110, 222, 214, 248, 28, 49, 67, 185, 214, ++ 248, 24, 35, 198, 248, 32, 33, 214, 248, 28, 35, 198, 248, 36, 33, 13, ++ 224, 3, 241, 35, 2, 86, 248, 50, 16, 3, 241, 36, 2, 70, 248, 50, 16, ++ 6, 235, 195, 2, 210, 248, 28, 17, 194, 248, 36, 17, 1, 51, 3, 240, 63, ++ 3, 198, 248, 28, 49, 9, 176, 189, 232, 240, 143, 84, 194, 135, 0, 112, ++ 181, 4, 70, 144, 137, 157, 104, 6, 10, 70, 234, 0, 38, 165, 241, 8, ++ 0, 152, 96, 152, 137, 182, 178, 8, 48, 152, 129, 16, 136, 37, 248, 8, ++ 12, 80, 136, 37, 248, 6, 12, 144, 136, 37, 248, 4, 12, 208, 136, 37, ++ 248, 2, 12, 16, 137, 40, 128, 82, 137, 8, 70, 106, 128, 25, 70, 250, ++ 247, 66, 255, 14, 56, 128, 178, 3, 10, 67, 234, 0, 32, 170, 35, 171, ++ 113, 235, 113, 3, 35, 43, 114, 0, 35, 168, 128, 107, 114, 171, 114, ++ 49, 70, 32, 70, 255, 247, 36, 248, 51, 10, 0, 40, 20, 191, 248, 32, ++ 0, 32, 67, 234, 6, 38, 232, 114, 174, 129, 112, 189, 45, 233, 240, 67, ++ 139, 104, 12, 70, 23, 70, 202, 137, 73, 104, 35, 240, 127, 67, 193, ++ 243, 20, 1, 35, 244, 96, 3, 91, 26, 179, 43, 133, 176, 6, 70, 208, 248, ++ 4, 144, 2, 240, 7, 8, 4, 217, 80, 6, 2, 212, 163, 120, 1, 43, 61, 217, ++ 72, 70, 180, 33, 252, 247, 35, 255, 5, 70, 152, 185, 51, 104, 211, 248, ++ 136, 48, 26, 106, 1, 50, 26, 98, 47, 177, 59, 105, 27, 177, 219, 104, ++ 26, 106, 1, 50, 26, 98, 215, 248, 92, 49, 0, 36, 1, 51, 199, 248, 92, ++ 49, 122, 224, 131, 104, 33, 70, 180, 51, 131, 96, 131, 137, 42, 70, ++ 180, 59, 131, 129, 48, 104, 255, 247, 80, 254, 235, 137, 161, 104, 35, ++ 240, 7, 3, 72, 234, 3, 3, 235, 129, 1, 241, 14, 3, 163, 96, 163, 137, ++ 168, 104, 14, 59, 163, 129, 171, 137, 14, 56, 14, 51, 168, 96, 171, ++ 129, 14, 34, 243, 247, 62, 255, 36, 136, 172, 130, 44, 70, 161, 104, ++ 184, 241, 0, 15, 44, 208, 122, 104, 42, 75, 19, 64, 67, 187, 214, 248, ++ 84, 50, 219, 177, 139, 137, 26, 10, 66, 234, 3, 35, 27, 178, 19, 245, ++ 254, 79, 19, 208, 12, 34, 104, 70, 243, 247, 36, 255, 165, 104, 163, ++ 137, 40, 31, 4, 51, 163, 129, 160, 96, 105, 70, 12, 34, 243, 247, 26, ++ 255, 79, 234, 72, 24, 129, 35, 43, 129, 165, 248, 10, 128, 51, 104, ++ 91, 107, 51, 177, 150, 248, 56, 50, 27, 185, 227, 137, 35, 240, 7, 3, ++ 227, 129, 162, 104, 147, 137, 25, 10, 65, 234, 3, 35, 155, 178, 64, ++ 242, 220, 81, 139, 66, 27, 217, 72, 246, 142, 1, 139, 66, 161, 105, ++ 2, 209, 65, 240, 16, 1, 5, 224, 72, 246, 180, 0, 131, 66, 6, 209, 65, ++ 240, 0, 65, 163, 127, 161, 97, 99, 240, 127, 3, 163, 119, 163, 105, ++ 48, 70, 67, 240, 8, 3, 163, 97, 73, 70, 35, 70, 255, 247, 18, 255, 32, ++ 70, 5, 176, 189, 232, 240, 131, 64, 0, 1, 0, 56, 181, 147, 137, 21, ++ 70, 7, 43, 24, 217, 148, 104, 4, 241, 14, 1, 13, 240, 212, 222, 144, ++ 177, 171, 104, 3, 241, 8, 2, 170, 96, 170, 137, 8, 58, 170, 129, 226, ++ 136, 218, 129, 34, 137, 26, 130, 98, 137, 90, 130, 34, 136, 26, 129, ++ 98, 136, 90, 129, 164, 136, 156, 129, 56, 189, 0, 0, 56, 181, 12, 70, ++ 5, 70, 8, 70, 72, 73, 245, 243, 175, 244, 72, 73, 32, 70, 245, 243, ++ 171, 244, 71, 73, 32, 70, 245, 243, 167, 244, 70, 73, 32, 70, 245, 243, ++ 163, 244, 69, 73, 32, 70, 245, 243, 159, 244, 68, 73, 32, 70, 245, 243, ++ 155, 244, 32, 70, 66, 73, 245, 243, 151, 244, 213, 248, 52, 1, 15, 240, ++ 214, 248, 32, 185, 213, 248, 56, 1, 39, 240, 52, 219, 24, 177, 32, 70, ++ 60, 73, 245, 243, 137, 244, 213, 248, 52, 1, 15, 240, 200, 248, 24, ++ 177, 32, 70, 57, 73, 245, 243, 128, 244, 213, 248, 56, 1, 39, 240, 34, ++ 219, 24, 177, 32, 70, 53, 73, 245, 243, 119, 244, 213, 248, 48, 1, 40, ++ 240, 239, 219, 24, 177, 32, 70, 50, 73, 245, 243, 110, 244, 213, 248, ++ 48, 1, 16, 240, 56, 253, 24, 177, 32, 70, 46, 73, 245, 243, 101, 244, ++ 32, 70, 45, 73, 245, 243, 97, 244, 213, 248, 80, 1, 83, 240, 103, 221, ++ 24, 177, 32, 70, 42, 73, 245, 243, 88, 244, 43, 104, 147, 248, 60, 48, ++ 27, 177, 32, 70, 39, 73, 245, 243, 80, 244, 38, 73, 32, 70, 245, 243, ++ 76, 244, 37, 73, 32, 70, 245, 243, 72, 244, 36, 73, 32, 70, 245, 243, ++ 68, 244, 35, 73, 32, 70, 245, 243, 64, 244, 43, 106, 24, 105, 32, 240, ++ 124, 249, 130, 7, 7, 213, 31, 73, 32, 70, 245, 243, 54, 244, 32, 70, ++ 30, 73, 245, 243, 50, 244, 32, 70, 29, 73, 245, 243, 46, 244, 32, 70, ++ 28, 73, 245, 243, 42, 244, 32, 70, 27, 73, 245, 243, 38, 244, 26, 73, ++ 32, 70, 189, 232, 56, 64, 245, 243, 32, 180, 124, 50, 4, 0, 128, 50, ++ 4, 0, 133, 50, 4, 0, 138, 50, 4, 0, 147, 50, 4, 0, 156, 50, 4, 0, 160, ++ 50, 4, 0, 165, 50, 4, 0, 172, 50, 4, 0, 182, 50, 4, 0, 192, 50, 4, 0, ++ 201, 50, 4, 0, 210, 50, 4, 0, 225, 50, 4, 0, 230, 50, 4, 0, 237, 50, ++ 4, 0, 243, 50, 4, 0, 250, 50, 4, 0, 1, 51, 4, 0, 13, 51, 4, 0, 22, 51, ++ 4, 0, 35, 51, 4, 0, 40, 51, 4, 0, 50, 51, 4, 0, 55, 51, 4, 0, 48, 181, ++ 133, 176, 5, 70, 104, 70, 12, 70, 245, 243, 209, 243, 40, 70, 105, 70, ++ 255, 247, 45, 255, 32, 70, 5, 176, 48, 189, 45, 233, 248, 67, 144, 248, ++ 1, 118, 4, 70, 23, 240, 8, 7, 13, 70, 22, 70, 152, 70, 111, 208, 147, ++ 105, 19, 240, 128, 87, 106, 209, 3, 240, 64, 9, 95, 250, 137, 249, 171, ++ 104, 217, 4, 52, 213, 184, 241, 0, 15, 14, 209, 113, 107, 3, 244, 0, ++ 82, 82, 11, 178, 235, 209, 127, 7, 209, 35, 244, 128, 83, 171, 96, 79, ++ 240, 255, 51, 165, 248, 44, 50, 60, 224, 160, 104, 11, 240, 183, 218, ++ 194, 6, 7, 212, 181, 248, 44, 34, 150, 248, 52, 48, 154, 66, 1, 209, ++ 171, 104, 34, 224, 160, 104, 11, 240, 170, 218, 195, 6, 41, 213, 114, ++ 107, 16, 1, 38, 213, 171, 104, 210, 15, 3, 244, 0, 81, 178, 235, 81, ++ 63, 31, 209, 130, 240, 1, 2, 35, 244, 0, 83, 67, 234, 66, 51, 22, 224, ++ 184, 241, 0, 15, 22, 208, 114, 107, 17, 1, 19, 213, 67, 244, 128, 83, ++ 171, 96, 150, 248, 52, 32, 165, 248, 44, 34, 3, 244, 0, 82, 0, 42, 12, ++ 191, 79, 244, 0, 82, 0, 34, 35, 244, 0, 83, 19, 67, 171, 96, 0, 224, ++ 1, 39, 171, 104, 114, 107, 3, 244, 0, 83, 34, 240, 0, 66, 91, 11, 66, ++ 234, 195, 115, 115, 99, 185, 241, 0, 15, 8, 208, 5, 75, 178, 138, 27, ++ 104, 83, 248, 34, 96, 0, 46, 153, 209, 0, 224, 0, 39, 56, 70, 189, 232, ++ 248, 131, 32, 7, 0, 0, 45, 233, 240, 65, 31, 70, 147, 105, 136, 176, ++ 3, 240, 64, 8, 5, 70, 14, 70, 20, 70, 95, 250, 136, 248, 99, 107, 27, ++ 1, 29, 213, 163, 105, 216, 0, 1, 213, 5, 46, 32, 209, 67, 240, 128, ++ 83, 8, 169, 163, 97, 1, 34, 1, 248, 28, 109, 168, 104, 59, 70, 254, ++ 247, 181, 248, 1, 46, 2, 209, 168, 104, 253, 247, 232, 255, 168, 104, ++ 253, 247, 225, 255, 208, 248, 152, 48, 1, 51, 192, 248, 152, 48, 7, ++ 224, 168, 104, 253, 247, 216, 255, 208, 248, 156, 48, 1, 51, 192, 248, ++ 156, 48, 184, 241, 0, 15, 6, 208, 4, 75, 162, 138, 27, 104, 83, 248, ++ 34, 64, 0, 44, 204, 209, 8, 176, 189, 232, 240, 129, 32, 7, 0, 0, 203, ++ 136, 19, 244, 192, 111, 12, 191, 0, 32, 1, 32, 112, 71, 112, 181, 21, ++ 70, 0, 41, 66, 208, 0, 42, 64, 208, 140, 104, 0, 44, 61, 208, 0, 38, ++ 22, 98, 86, 98, 148, 248, 77, 32, 148, 248, 76, 48, 64, 104, 67, 234, ++ 2, 35, 171, 128, 180, 248, 68, 32, 180, 248, 66, 48, 67, 234, 2, 67, ++ 43, 96, 98, 120, 35, 120, 67, 234, 2, 35, 235, 128, 226, 120, 163, 120, ++ 172, 97, 67, 234, 2, 35, 43, 129, 112, 35, 107, 97, 4, 241, 118, 3, ++ 235, 97, 4, 241, 38, 3, 171, 98, 4, 241, 112, 3, 235, 98, 98, 122, 35, ++ 122, 67, 234, 2, 35, 107, 129, 163, 122, 226, 122, 67, 234, 2, 35, 171, ++ 129, 180, 248, 140, 48, 27, 9, 43, 134, 250, 247, 110, 252, 118, 56, ++ 104, 130, 238, 129, 180, 248, 70, 48, 43, 130, 112, 189, 48, 181, 145, ++ 176, 5, 70, 12, 70, 3, 170, 255, 247, 177, 255, 0, 35, 40, 70, 33, 70, ++ 3, 170, 0, 147, 255, 247, 89, 248, 17, 176, 48, 189, 139, 122, 200, ++ 106, 3, 240, 3, 3, 2, 43, 3, 209, 0, 120, 0, 240, 127, 0, 112, 71, 42, ++ 240, 101, 184, 16, 181, 12, 70, 137, 105, 33, 240, 186, 220, 163, 105, ++ 27, 136, 227, 128, 16, 189, 208, 248, 104, 18, 0, 34, 139, 88, 83, 177, ++ 152, 121, 64, 185, 24, 122, 48, 177, 24, 124, 32, 185, 211, 248, 252, ++ 48, 147, 248, 137, 48, 35, 177, 4, 50, 32, 42, 239, 209, 0, 32, 112, ++ 71, 1, 32, 112, 71, 144, 248, 115, 34, 10, 177, 255, 247, 228, 191, ++ 144, 248, 113, 2, 112, 71, 0, 0, 10, 75, 16, 181, 1, 240, 96, 4, 100, ++ 17, 51, 248, 20, 64, 8, 75, 1, 240, 15, 1, 91, 92, 160, 248, 214, 64, ++ 128, 248, 216, 48, 26, 177, 128, 248, 217, 48, 128, 248, 218, 48, 16, ++ 189, 0, 191, 116, 50, 4, 0, 100, 50, 4, 0, 45, 233, 240, 79, 3, 240, ++ 1, 3, 169, 176, 4, 70, 20, 147, 212, 248, 108, 52, 16, 105, 27, 104, ++ 14, 70, 195, 88, 208, 248, 68, 19, 27, 120, 145, 70, 15, 147, 212, 248, ++ 112, 52, 178, 104, 27, 104, 25, 145, 195, 88, 8, 144, 27, 120, 9, 146, ++ 21, 147, 19, 136, 96, 104, 11, 147, 3, 240, 12, 3, 155, 8, 2, 43, 8, ++ 191, 11, 153, 19, 147, 11, 154, 12, 191, 193, 243, 192, 19, 0, 35, 219, ++ 178, 26, 147, 2, 244, 64, 115, 163, 245, 64, 117, 107, 66, 67, 235, ++ 5, 3, 49, 70, 28, 147, 55, 159, 250, 247, 207, 251, 54, 155, 4, 48, ++ 14, 144, 131, 177, 27, 122, 11, 43, 7, 209, 35, 104, 147, 248, 177, ++ 48, 75, 177, 54, 152, 131, 121, 7, 43, 5, 216, 54, 153, 14, 154, 145, ++ 249, 15, 48, 210, 24, 14, 146, 212, 248, 180, 49, 0, 43, 45, 218, 54, ++ 155, 3, 179, 27, 122, 2, 43, 31, 209, 148, 248, 148, 34, 242, 185, 8, ++ 152, 3, 109, 19, 240, 8, 3, 28, 209, 54, 153, 138, 121, 33, 104, 209, ++ 248, 188, 16, 138, 66, 23, 210, 3, 42, 21, 217, 11, 42, 19, 216, 178, ++ 105, 144, 0, 16, 212, 51, 154, 1, 42, 15, 209, 14, 155, 1, 32, 8, 51, ++ 14, 147, 4, 224, 54, 154, 4, 224, 0, 35, 4, 224, 0, 32, 12, 144, 5, ++ 224, 12, 146, 3, 224, 12, 147, 1, 224, 0, 33, 12, 145, 181, 104, 179, ++ 137, 170, 31, 118, 51, 165, 241, 118, 0, 29, 146, 179, 129, 0, 33, 112, ++ 34, 176, 96, 24, 144, 244, 243, 102, 247, 179, 139, 217, 4, 2, 212, ++ 178, 105, 82, 5, 2, 213, 27, 5, 27, 13, 32, 224, 217, 248, 4, 32, 160, ++ 75, 19, 64, 187, 177, 11, 153, 1, 240, 252, 3, 136, 43, 18, 209, 9, ++ 154, 19, 121, 216, 7, 14, 212, 51, 152, 242, 137, 65, 30, 2, 240, 7, ++ 2, 50, 152, 96, 50, 9, 235, 66, 2, 136, 66, 211, 136, 6, 209, 89, 28, ++ 209, 128, 3, 224, 19, 153, 1, 41, 6, 209, 17, 224, 19, 152, 1, 40, 14, ++ 208, 0, 33, 7, 145, 2, 224, 16, 34, 7, 146, 0, 35, 50, 152, 27, 1, 155, ++ 178, 0, 240, 15, 2, 9, 153, 19, 67, 203, 130, 1, 224, 0, 34, 7, 146, ++ 9, 155, 160, 104, 218, 138, 179, 139, 35, 244, 126, 99, 35, 240, 31, ++ 3, 67, 234, 18, 19, 179, 131, 11, 240, 149, 216, 1, 7, 3, 213, 179, ++ 139, 67, 244, 0, 83, 179, 131, 52, 152, 4, 40, 8, 209, 32, 70, 8, 153, ++ 53, 248, 42, 44, 11, 240, 180, 217, 173, 248, 152, 0, 25, 224, 50, 153, ++ 51, 152, 1, 240, 15, 2, 180, 248, 62, 51, 65, 30, 50, 152, 66, 234, ++ 3, 18, 136, 66, 146, 178, 2, 209, 1, 51, 164, 248, 62, 51, 52, 153, ++ 82, 1, 71, 246, 224, 115, 19, 64, 1, 240, 7, 2, 19, 67, 173, 248, 152, ++ 48, 153, 248, 231, 48, 59, 185, 11, 154, 2, 240, 252, 3, 128, 43, 2, ++ 208, 8, 152, 131, 121, 27, 185, 7, 153, 65, 240, 32, 1, 7, 145, 99, ++ 75, 59, 64, 0, 43, 64, 240, 130, 128, 7, 240, 64, 114, 178, 241, 128, ++ 127, 0, 240, 129, 128, 19, 154, 1, 42, 48, 217, 179, 105, 218, 6, 45, ++ 212, 0, 43, 43, 219, 150, 249, 31, 48, 0, 43, 39, 219, 34, 106, 87, ++ 75, 210, 248, 72, 128, 8, 234, 3, 3, 35, 185, 8, 240, 64, 115, 179, ++ 241, 128, 127, 3, 209, 9, 152, 3, 121, 223, 7, 102, 212, 210, 248, 68, ++ 128, 79, 75, 8, 234, 3, 3, 35, 185, 8, 240, 64, 115, 179, 241, 128, ++ 127, 4, 209, 9, 153, 11, 121, 19, 240, 1, 3, 89, 208, 9, 154, 19, 121, ++ 216, 7, 3, 212, 217, 248, 8, 48, 25, 7, 5, 213, 153, 248, 80, 112, 7, ++ 240, 127, 7, 184, 70, 73, 224, 2, 35, 141, 248, 134, 48, 39, 171, 0, ++ 147, 212, 248, 96, 1, 31, 171, 73, 70, 38, 170, 46, 240, 1, 252, 11, ++ 152, 221, 248, 124, 128, 0, 240, 252, 3, 72, 43, 32, 159, 1, 208, 200, ++ 43, 11, 209, 65, 70, 8, 152, 0, 34, 30, 240, 18, 218, 153, 248, 80, ++ 112, 128, 70, 7, 240, 127, 7, 0, 35, 8, 224, 179, 105, 50, 153, 67, ++ 240, 0, 99, 179, 97, 209, 241, 1, 3, 56, 191, 0, 35, 189, 248, 156, ++ 32, 210, 7, 3, 213, 178, 105, 66, 244, 0, 82, 178, 97, 34, 104, 146, ++ 248, 229, 32, 186, 177, 212, 248, 228, 6, 73, 70, 189, 248, 152, 32, ++ 5, 147, 92, 240, 228, 218, 5, 155, 18, 144, 13, 224, 0, 34, 184, 70, ++ 18, 146, 19, 70, 8, 224, 184, 70, 3, 224, 71, 70, 0, 35, 0, 224, 71, ++ 70, 18, 147, 0, 224, 18, 146, 34, 104, 212, 248, 116, 4, 146, 248, 79, ++ 32, 144, 248, 12, 176, 18, 240, 3, 2, 0, 240, 156, 129, 130, 120, 1, ++ 42, 9, 217, 33, 106, 145, 249, 77, 16, 161, 241, 1, 14, 222, 241, 0, ++ 1, 65, 235, 14, 1, 0, 224, 0, 33, 1, 42, 95, 250, 129, 250, 23, 217, ++ 34, 106, 146, 249, 77, 32, 1, 50, 18, 209, 217, 248, 4, 32, 18, 240, ++ 128, 66, 14, 208, 14, 48, 2, 33, 5, 147, 245, 243, 193, 244, 2, 28, ++ 24, 191, 1, 34, 5, 155, 4, 224, 64, 0, 1, 0, 255, 0, 0, 192, 0, 34, ++ 24, 240, 64, 127, 208, 178, 95, 250, 136, 242, 7, 208, 31, 42, 2, 217, ++ 32, 42, 7, 208, 85, 58, 7, 42, 4, 217, 28, 224, 160, 73, 138, 86, 0, ++ 42, 24, 218, 184, 241, 0, 15, 21, 219, 40, 244, 128, 24, 40, 244, 64, ++ 120, 24, 240, 64, 114, 9, 208, 186, 241, 0, 15, 3, 209, 178, 241, 128, ++ 127, 3, 209, 16, 177, 72, 244, 128, 24, 4, 224, 187, 241, 1, 15, 8, ++ 191, 72, 244, 128, 120, 23, 240, 64, 127, 250, 178, 7, 208, 31, 42, ++ 2, 217, 32, 42, 7, 208, 85, 58, 7, 42, 4, 217, 27, 224, 139, 73, 138, ++ 86, 0, 42, 23, 218, 0, 47, 21, 219, 39, 244, 128, 23, 39, 244, 64, 119, ++ 23, 240, 64, 114, 9, 208, 186, 241, 0, 15, 3, 209, 178, 241, 128, 127, ++ 3, 209, 16, 177, 71, 244, 128, 23, 4, 224, 187, 241, 1, 15, 8, 191, ++ 71, 244, 128, 119, 180, 248, 72, 36, 2, 244, 96, 82, 178, 245, 192, ++ 95, 44, 209, 24, 244, 224, 34, 31, 209, 24, 240, 64, 127, 23, 208, 217, ++ 248, 4, 32, 18, 3, 19, 213, 34, 104, 146, 248, 60, 32, 146, 177, 8, ++ 152, 130, 121, 122, 177, 208, 248, 244, 32, 82, 142, 2, 244, 96, 82, ++ 178, 245, 192, 95, 12, 191, 79, 244, 0, 50, 79, 244, 128, 50, 4, 224, ++ 79, 244, 128, 50, 1, 224, 79, 244, 0, 50, 24, 240, 64, 127, 19, 208, ++ 95, 250, 136, 241, 32, 41, 8, 191, 79, 244, 0, 50, 12, 224, 95, 250, ++ 136, 242, 249, 178, 32, 42, 8, 191, 79, 240, 128, 120, 32, 41, 8, 191, ++ 79, 240, 128, 119, 79, 244, 128, 50, 39, 244, 224, 42, 23, 240, 64, ++ 127, 40, 244, 224, 40, 72, 234, 2, 8, 24, 191, 74, 234, 2, 10, 34, 106, ++ 8, 191, 74, 244, 128, 58, 81, 108, 86, 74, 10, 64, 0, 42, 83, 209, 1, ++ 240, 64, 113, 177, 241, 128, 127, 78, 208, 24, 240, 64, 127, 148, 248, ++ 32, 34, 4, 208, 1, 42, 2, 209, 72, 244, 0, 8, 2, 224, 10, 185, 40, 244, ++ 0, 8, 26, 240, 64, 127, 148, 248, 32, 34, 5, 208, 1, 42, 3, 209, 74, ++ 244, 0, 10, 0, 240, 11, 190, 0, 42, 64, 240, 8, 134, 42, 244, 0, 10, ++ 0, 240, 4, 190, 217, 248, 4, 16, 200, 3, 43, 213, 217, 248, 8, 16, 9, ++ 6, 39, 213, 1, 50, 37, 209, 24, 240, 64, 127, 15, 208, 95, 250, 136, ++ 242, 162, 241, 87, 1, 1, 41, 9, 217, 99, 42, 7, 208, 100, 42, 5, 208, ++ 101, 42, 3, 208, 102, 42, 24, 191, 72, 244, 128, 8, 26, 240, 64, 127, ++ 15, 208, 95, 250, 138, 242, 162, 241, 87, 1, 1, 41, 9, 217, 99, 42, ++ 7, 208, 100, 42, 5, 208, 101, 42, 3, 208, 102, 42, 24, 191, 74, 244, ++ 128, 10, 32, 70, 73, 70, 5, 147, 16, 240, 162, 222, 24, 240, 64, 114, ++ 5, 155, 69, 208, 21, 153, 2, 41, 8, 209, 8, 244, 224, 43, 171, 245, ++ 0, 50, 210, 241, 0, 11, 75, 235, 2, 11, 1, 224, 79, 240, 0, 11, 95, ++ 250, 136, 242, 31, 42, 4, 216, 7, 42, 148, 191, 0, 33, 1, 33, 10, 224, ++ 32, 42, 6, 208, 162, 241, 85, 1, 7, 41, 148, 191, 0, 33, 1, 33, 0, 224, ++ 0, 33, 201, 178, 57, 177, 153, 248, 14, 17, 33, 177, 153, 248, 15, 17, ++ 0, 49, 24, 191, 1, 33, 24, 244, 0, 15, 17, 145, 30, 208, 31, 42, 4, ++ 216, 7, 42, 140, 191, 0, 34, 1, 34, 9, 224, 32, 42, 5, 208, 85, 58, ++ 7, 42, 140, 191, 0, 34, 1, 34, 0, 224, 1, 34, 210, 178, 0, 42, 12, 191, ++ 2, 70, 4, 34, 13, 146, 8, 224, 13, 146, 147, 70, 17, 146, 4, 224, 224, ++ 248, 135, 0, 255, 0, 0, 192, 13, 144, 26, 240, 64, 114, 38, 208, 26, ++ 244, 0, 15, 37, 208, 95, 250, 138, 242, 31, 42, 4, 216, 7, 42, 140, ++ 191, 0, 34, 1, 34, 9, 224, 32, 42, 5, 208, 85, 58, 7, 42, 140, 191, ++ 0, 34, 1, 34, 0, 224, 1, 34, 210, 178, 0, 42, 24, 191, 4, 32, 14, 224, ++ 40, 244, 224, 40, 39, 244, 224, 42, 72, 244, 128, 56, 74, 244, 128, ++ 58, 16, 146, 13, 146, 147, 70, 17, 146, 2, 224, 16, 146, 0, 224, 16, ++ 144, 163, 177, 8, 154, 51, 152, 210, 248, 28, 17, 1, 241, 36, 3, 66, ++ 248, 51, 128, 2, 235, 193, 3, 194, 178, 195, 248, 36, 33, 1, 49, 8, ++ 154, 1, 240, 63, 1, 194, 248, 28, 17, 201, 248, 48, 162, 24, 240, 64, ++ 119, 3, 209, 95, 250, 136, 243, 27, 147, 3, 224, 64, 70, 41, 240, 190, ++ 251, 27, 144, 19, 152, 2, 40, 0, 208, 136, 185, 180, 248, 88, 52, 14, ++ 153, 153, 66, 2, 220, 179, 105, 91, 1, 12, 213, 9, 154, 17, 152, 19, ++ 121, 3, 240, 1, 3, 0, 43, 8, 191, 1, 32, 23, 144, 4, 224, 17, 153, 23, ++ 145, 1, 224, 17, 154, 23, 146, 35, 106, 89, 125, 65, 177, 15, 155, 51, ++ 177, 47, 185, 136, 74, 95, 250, 136, 243, 211, 86, 0, 43, 7, 219, 35, ++ 104, 147, 248, 79, 48, 152, 7, 39, 208, 55, 179, 21, 152, 32, 179, 51, ++ 154, 1, 42, 14, 217, 15, 155, 0, 43, 12, 191, 79, 240, 48, 10, 79, 240, ++ 22, 10, 179, 105, 74, 244, 128, 58, 35, 240, 0, 99, 179, 97, 208, 70, ++ 18, 224, 137, 177, 15, 152, 120, 177, 103, 185, 8, 240, 127, 3, 2, 43, ++ 10, 208, 4, 43, 8, 208, 11, 43, 6, 208, 22, 43, 24, 191, 79, 240, 1, ++ 11, 1, 224, 79, 240, 1, 11, 24, 240, 64, 113, 15, 145, 26, 209, 8, 240, ++ 127, 3, 22, 43, 22, 216, 108, 74, 154, 64, 19, 213, 20, 154, 98, 177, ++ 95, 250, 136, 243, 2, 43, 11, 208, 217, 248, 16, 48, 147, 249, 24, 49, ++ 19, 241, 255, 51, 24, 191, 1, 35, 0, 224, 20, 155, 13, 147, 1, 224, ++ 15, 152, 13, 144, 26, 240, 64, 113, 22, 145, 27, 209, 10, 240, 127, ++ 3, 22, 43, 23, 216, 92, 74, 154, 64, 20, 213, 20, 154, 106, 177, 95, ++ 250, 138, 243, 2, 43, 12, 208, 217, 248, 16, 48, 147, 249, 24, 33, 18, ++ 241, 255, 50, 24, 191, 1, 34, 16, 146, 4, 224, 22, 155, 16, 147, 1, ++ 224, 22, 152, 16, 144, 19, 153, 217, 248, 4, 48, 2, 41, 8, 191, 201, ++ 248, 104, 129, 19, 244, 128, 51, 74, 208, 148, 248, 17, 50, 0, 43, 70, ++ 208, 148, 248, 21, 50, 0, 43, 66, 208, 21, 154, 3, 42, 48, 208, 15, ++ 155, 75, 185, 8, 240, 127, 3, 2, 43, 44, 208, 4, 43, 44, 208, 11, 43, ++ 45, 208, 22, 43, 46, 208, 9, 152, 3, 121, 19, 240, 1, 3, 43, 209, 11, ++ 153, 1, 240, 252, 2, 136, 42, 41, 209, 52, 154, 3, 42, 38, 216, 179, ++ 105, 28, 152, 67, 244, 128, 83, 179, 97, 7, 155, 9, 153, 0, 40, 12, ++ 191, 24, 34, 30, 34, 67, 244, 160, 67, 7, 147, 139, 90, 35, 240, 96, ++ 3, 27, 4, 27, 12, 67, 240, 32, 3, 139, 82, 1, 34, 7, 224, 0, 35, 12, ++ 224, 15, 152, 8, 224, 15, 153, 10, 145, 8, 224, 15, 154, 10, 146, 5, ++ 224, 15, 155, 2, 224, 0, 32, 10, 144, 0, 224, 10, 147, 29, 153, 32, ++ 70, 0, 145, 14, 154, 65, 70, 11, 155, 22, 240, 34, 217, 34, 175, 32, ++ 70, 81, 70, 14, 154, 11, 155, 0, 151, 22, 240, 26, 217, 6, 34, 165, ++ 241, 64, 0, 57, 70, 242, 247, 244, 255, 22, 154, 98, 185, 10, 240, 127, ++ 3, 22, 43, 8, 216, 23, 74, 154, 64, 5, 213, 14, 155, 5, 248, 60, 60, ++ 27, 10, 5, 248, 59, 60, 179, 105, 15, 153, 90, 5, 18, 213, 145, 177, ++ 54, 154, 34, 177, 18, 122, 4, 42, 1, 208, 11, 42, 28, 209, 67, 244, ++ 0, 99, 179, 97, 23, 152, 148, 248, 190, 50, 0, 43, 24, 191, 1, 32, 23, ++ 144, 17, 224, 129, 185, 6, 74, 95, 250, 136, 243, 211, 86, 0, 43, 10, ++ 218, 21, 248, 6, 60, 3, 240, 15, 3, 20, 147, 7, 224, 0, 191, 224, 248, ++ 135, 0, 0, 2, 16, 40, 21, 248, 6, 44, 20, 146, 11, 155, 164, 43, 20, ++ 208, 9, 152, 3, 121, 219, 7, 16, 212, 10, 153, 129, 185, 179, 105, 32, ++ 70, 95, 5, 65, 70, 2, 213, 13, 240, 83, 223, 3, 224, 13, 154, 53, 155, ++ 22, 240, 158, 216, 9, 154, 80, 128, 20, 224, 10, 155, 83, 177, 65, 70, ++ 32, 70, 13, 154, 64, 246, 42, 19, 21, 240, 114, 222, 9, 153, 128, 178, ++ 2, 48, 72, 128, 11, 154, 164, 42, 4, 209, 9, 152, 67, 136, 37, 248, ++ 58, 60, 25, 224, 9, 153, 11, 121, 217, 7, 1, 212, 10, 154, 42, 177, ++ 0, 35, 5, 248, 58, 60, 5, 248, 57, 60, 13, 224, 179, 105, 32, 70, 90, ++ 5, 81, 70, 2, 213, 13, 240, 35, 223, 3, 224, 16, 154, 53, 155, 22, 240, ++ 110, 216, 37, 248, 58, 12, 178, 105, 147, 5, 9, 213, 179, 140, 37, 248, ++ 52, 60, 243, 140, 37, 248, 50, 60, 7, 155, 67, 244, 0, 83, 7, 147, 50, ++ 152, 24, 185, 7, 153, 65, 240, 8, 1, 7, 145, 9, 152, 3, 121, 223, 7, ++ 18, 212, 208, 4, 16, 212, 148, 248, 20, 50, 11, 177, 81, 6, 11, 212, ++ 82, 5, 5, 212, 26, 153, 25, 177, 25, 154, 146, 248, 40, 48, 27, 185, ++ 7, 155, 67, 240, 1, 3, 7, 147, 146, 75, 52, 152, 19, 153, 24, 92, 2, ++ 41, 21, 144, 28, 209, 52, 154, 3, 42, 25, 216, 148, 248, 17, 50, 179, ++ 177, 27, 155, 4, 43, 19, 217, 212, 248, 52, 1, 11, 240, 120, 254, 112, ++ 185, 25, 152, 21, 153, 0, 235, 65, 3, 155, 139, 19, 177, 179, 105, 91, ++ 5, 5, 213, 17, 154, 26, 185, 7, 155, 67, 244, 128, 83, 7, 147, 35, 106, ++ 24, 105, 30, 240, 46, 253, 0, 244, 96, 80, 176, 245, 192, 95, 3, 209, ++ 7, 152, 64, 244, 128, 112, 7, 144, 12, 153, 25, 177, 7, 154, 66, 244, ++ 0, 66, 7, 146, 7, 155, 37, 248, 118, 60, 54, 152, 16, 179, 148, 248, ++ 148, 50, 19, 187, 8, 153, 10, 109, 18, 240, 8, 2, 33, 209, 3, 122, 11, ++ 43, 6, 209, 35, 104, 147, 248, 177, 48, 211, 177, 131, 121, 7, 43, 20, ++ 216, 54, 154, 147, 121, 34, 104, 210, 248, 188, 32, 147, 66, 15, 210, ++ 178, 105, 151, 0, 15, 212, 54, 152, 2, 123, 2, 240, 7, 2, 66, 234, 3, ++ 18, 3, 224, 54, 153, 7, 145, 7, 224, 0, 34, 7, 146, 4, 224, 0, 35, 7, ++ 147, 1, 224, 0, 32, 7, 144, 16, 153, 75, 30, 219, 178, 1, 43, 4, 216, ++ 7, 154, 66, 244, 0, 83, 155, 178, 7, 147, 165, 241, 114, 0, 9, 153, ++ 2, 34, 242, 247, 206, 254, 0, 35, 5, 248, 112, 60, 5, 248, 111, 60, ++ 5, 248, 74, 60, 5, 248, 73, 60, 54, 155, 0, 43, 47, 208, 148, 248, 148, ++ 50, 0, 43, 43, 209, 8, 152, 3, 109, 24, 7, 39, 212, 54, 153, 11, 122, ++ 11, 43, 6, 209, 35, 104, 147, 248, 177, 48, 251, 177, 139, 121, 7, 43, ++ 28, 216, 54, 155, 154, 121, 35, 104, 211, 248, 188, 48, 154, 66, 21, ++ 210, 179, 105, 153, 0, 18, 212, 28, 152, 24, 185, 9, 153, 1, 241, 24, ++ 2, 2, 224, 9, 155, 3, 241, 30, 2, 26, 152, 0, 177, 2, 50, 0, 35, 0, ++ 147, 32, 70, 24, 153, 54, 155, 32, 240, 116, 222, 9, 153, 6, 34, 4, ++ 49, 165, 241, 80, 0, 19, 145, 242, 247, 138, 254, 189, 248, 152, 48, ++ 37, 248, 42, 60, 212, 248, 72, 1, 8, 153, 77, 240, 9, 221, 53, 248, ++ 48, 60, 128, 178, 67, 234, 0, 35, 37, 248, 48, 60, 0, 35, 5, 248, 40, ++ 60, 5, 248, 39, 60, 5, 248, 38, 60, 5, 248, 37, 60, 5, 248, 36, 60, ++ 5, 248, 35, 60, 5, 248, 34, 60, 5, 248, 33, 60, 5, 248, 32, 60, 5, 248, ++ 31, 60, 23, 154, 26, 185, 187, 241, 0, 15, 1, 209, 225, 224, 155, 70, ++ 0, 34, 65, 70, 8, 152, 29, 240, 107, 221, 0, 34, 6, 144, 81, 70, 8, ++ 152, 29, 240, 101, 221, 6, 155, 8, 144, 19, 240, 64, 115, 24, 147, 6, ++ 209, 6, 153, 21, 75, 200, 178, 27, 86, 0, 43, 3, 218, 20, 224, 6, 152, ++ 41, 240, 13, 249, 2, 56, 24, 191, 1, 32, 112, 177, 217, 248, 16, 48, ++ 147, 249, 24, 49, 1, 43, 10, 208, 7, 154, 66, 244, 128, 67, 155, 178, ++ 7, 147, 1, 35, 12, 147, 4, 224, 24, 152, 12, 144, 1, 224, 0, 33, 12, ++ 145, 8, 155, 19, 240, 64, 114, 9, 209, 216, 178, 3, 75, 27, 86, 0, 43, ++ 7, 218, 29, 224, 84, 194, 135, 0, 224, 248, 135, 0, 8, 152, 41, 240, ++ 229, 248, 2, 56, 24, 191, 1, 32, 120, 177, 217, 248, 16, 48, 147, 249, ++ 24, 49, 1, 43, 11, 208, 7, 152, 1, 33, 111, 234, 64, 67, 111, 234, 83, ++ 67, 155, 178, 7, 147, 17, 145, 3, 224, 17, 144, 1, 224, 0, 34, 17, 146, ++ 53, 248, 118, 60, 187, 241, 0, 15, 2, 208, 67, 244, 0, 99, 1, 224, 67, ++ 240, 6, 3, 37, 248, 118, 60, 187, 241, 0, 15, 12, 191, 79, 240, 20, ++ 12, 79, 240, 14, 12, 165, 241, 30, 3, 98, 70, 0, 147, 32, 70, 6, 153, ++ 11, 155, 205, 248, 20, 192, 21, 240, 5, 223, 221, 248, 20, 192, 36, ++ 175, 98, 70, 11, 155, 32, 70, 8, 153, 0, 151, 21, 240, 251, 222, 57, ++ 70, 6, 34, 165, 241, 72, 0, 242, 247, 213, 253, 12, 152, 13, 153, 14, ++ 154, 165, 241, 24, 3, 11, 147, 0, 144, 1, 145, 2, 146, 0, 39, 89, 70, ++ 6, 154, 67, 70, 32, 70, 3, 151, 21, 240, 2, 223, 37, 248, 22, 12, 17, ++ 155, 16, 152, 14, 153, 0, 147, 1, 144, 2, 145, 32, 70, 89, 70, 8, 154, ++ 83, 70, 3, 151, 21, 240, 243, 222, 37, 248, 66, 12, 165, 241, 20, 0, ++ 187, 241, 0, 15, 9, 208, 111, 240, 59, 3, 5, 248, 24, 60, 5, 248, 23, ++ 124, 9, 154, 2, 241, 10, 1, 14, 224, 111, 240, 75, 3, 5, 248, 24, 60, ++ 5, 248, 23, 188, 19, 153, 6, 34, 242, 247, 154, 253, 9, 155, 165, 241, ++ 14, 0, 3, 241, 10, 1, 6, 34, 242, 247, 146, 253, 20, 152, 24, 154, 129, ++ 178, 82, 185, 6, 152, 159, 74, 195, 178, 211, 86, 0, 43, 4, 218, 21, ++ 248, 30, 60, 3, 240, 15, 3, 1, 224, 21, 248, 30, 60, 27, 2, 25, 67, ++ 20, 145, 31, 224, 89, 70, 6, 34, 165, 241, 30, 0, 244, 243, 247, 240, ++ 89, 70, 16, 34, 165, 241, 24, 0, 244, 243, 241, 240, 165, 241, 72, 0, ++ 89, 70, 6, 34, 244, 243, 235, 240, 5, 248, 66, 188, 5, 248, 65, 188, ++ 205, 248, 32, 176, 205, 248, 24, 176, 205, 248, 44, 176, 205, 248, 68, ++ 176, 205, 248, 48, 176, 179, 105, 90, 5, 15, 213, 15, 153, 105, 177, ++ 40, 171, 0, 34, 35, 248, 2, 45, 0, 147, 212, 248, 52, 1, 73, 70, 66, ++ 70, 14, 155, 13, 240, 239, 255, 5, 248, 67, 12, 7, 155, 37, 248, 116, ++ 60, 20, 152, 37, 248, 100, 12, 22, 153, 177, 241, 128, 127, 11, 208, ++ 49, 185, 10, 240, 127, 3, 22, 43, 2, 216, 119, 74, 154, 64, 1, 212, ++ 1, 32, 2, 224, 22, 152, 0, 224, 2, 32, 6, 154, 128, 178, 2, 240, 64, ++ 115, 179, 241, 128, 127, 11, 208, 51, 185, 2, 240, 127, 2, 22, 42, 2, ++ 216, 109, 73, 145, 64, 0, 212, 1, 35, 155, 0, 155, 178, 0, 224, 8, 35, ++ 8, 153, 24, 67, 1, 240, 64, 115, 179, 241, 128, 127, 11, 208, 51, 185, ++ 1, 240, 127, 2, 22, 42, 2, 216, 99, 73, 145, 64, 0, 212, 1, 35, 27, ++ 1, 159, 178, 0, 224, 32, 39, 35, 106, 7, 67, 24, 105, 30, 240, 20, 251, ++ 192, 178, 71, 234, 0, 39, 37, 248, 98, 124, 15, 154, 178, 241, 128, ++ 127, 12, 208, 50, 185, 8, 240, 127, 3, 22, 43, 2, 216, 85, 74, 154, ++ 64, 1, 212, 1, 35, 0, 224, 15, 155, 155, 178, 0, 224, 2, 35, 13, 152, ++ 173, 248, 154, 48, 66, 30, 210, 178, 1, 42, 9, 216, 67, 240, 16, 3, ++ 173, 248, 154, 48, 35, 104, 211, 248, 136, 48, 154, 105, 1, 50, 154, ++ 97, 65, 70, 32, 70, 189, 248, 154, 112, 47, 240, 155, 254, 179, 105, ++ 7, 67, 185, 178, 27, 1, 173, 248, 154, 16, 14, 213, 35, 104, 147, 248, ++ 229, 48, 83, 177, 35, 106, 24, 105, 31, 240, 20, 252, 35, 106, 13, 241, ++ 154, 1, 24, 105, 18, 154, 31, 240, 22, 252, 189, 248, 154, 48, 65, 70, ++ 37, 248, 110, 60, 180, 248, 72, 36, 32, 70, 27, 240, 198, 221, 37, 248, ++ 108, 12, 81, 70, 32, 70, 180, 248, 72, 36, 27, 240, 190, 221, 37, 248, ++ 106, 12, 23, 153, 17, 185, 187, 241, 0, 15, 15, 208, 6, 153, 180, 248, ++ 72, 36, 32, 70, 27, 240, 177, 221, 37, 248, 104, 12, 8, 153, 32, 70, ++ 180, 248, 72, 36, 27, 240, 169, 221, 37, 248, 102, 12, 15, 154, 74, ++ 177, 13, 155, 4, 43, 6, 209, 32, 70, 65, 70, 14, 154, 21, 240, 13, 220, ++ 37, 248, 56, 12, 22, 152, 72, 177, 16, 153, 4, 41, 6, 209, 32, 70, 81, ++ 70, 14, 154, 21, 240, 1, 220, 37, 248, 54, 12, 217, 248, 4, 48, 88, ++ 6, 64, 241, 174, 128, 26, 154, 0, 42, 0, 240, 170, 128, 25, 152, 21, ++ 153, 0, 235, 65, 3, 155, 139, 0, 43, 123, 208, 179, 105, 89, 5, 0, 241, ++ 159, 128, 50, 154, 0, 42, 64, 240, 155, 128, 14, 155, 32, 70, 65, 70, ++ 13, 154, 21, 240, 61, 219, 11, 155, 9, 144, 171, 177, 6, 153, 12, 154, ++ 32, 70, 13, 240, 115, 218, 8, 153, 7, 70, 17, 154, 32, 70, 13, 240, ++ 109, 218, 11, 153, 177, 248, 2, 176, 187, 68, 53, 248, 66, 124, 27, ++ 224, 224, 248, 135, 0, 0, 2, 16, 40, 10, 154, 186, 185, 65, 70, 13, ++ 154, 10, 155, 32, 70, 21, 240, 60, 221, 9, 155, 81, 70, 0, 235, 3, 11, ++ 16, 154, 14, 155, 32, 70, 21, 240, 19, 219, 81, 70, 7, 70, 16, 154, ++ 32, 70, 10, 155, 21, 240, 44, 221, 199, 25, 2, 224, 221, 248, 36, 176, ++ 11, 159, 31, 250, 139, 242, 37, 248, 112, 44, 37, 248, 74, 124, 25, ++ 152, 21, 153, 0, 235, 65, 3, 155, 139, 9, 152, 195, 24, 155, 26, 155, ++ 178, 26, 4, 25, 212, 32, 70, 65, 70, 13, 154, 13, 240, 49, 218, 255, ++ 40, 5, 217, 180, 248, 74, 36, 144, 66, 56, 191, 2, 70, 1, 224, 79, 244, ++ 128, 114, 52, 153, 146, 178, 4, 235, 65, 3, 179, 248, 76, 52, 147, 66, ++ 2, 208, 32, 70, 14, 240, 58, 218, 35, 104, 147, 248, 69, 48, 0, 43, ++ 46, 208, 52, 154, 3, 42, 43, 216, 212, 248, 100, 1, 21, 153, 90, 70, ++ 35, 224, 35, 104, 147, 248, 69, 48, 19, 179, 52, 155, 3, 43, 31, 216, ++ 26, 72, 11, 153, 199, 92, 32, 70, 57, 177, 12, 154, 6, 153, 13, 240, ++ 253, 217, 11, 155, 90, 136, 130, 24, 12, 224, 65, 70, 13, 154, 14, 155, ++ 21, 240, 182, 218, 13, 154, 5, 70, 65, 70, 32, 70, 11, 155, 21, 240, ++ 207, 220, 66, 25, 212, 248, 100, 1, 57, 70, 75, 70, 59, 240, 140, 223, ++ 179, 105, 189, 248, 152, 0, 67, 240, 132, 3, 179, 97, 41, 176, 189, ++ 232, 240, 143, 212, 248, 116, 36, 40, 244, 128, 8, 146, 249, 19, 32, ++ 42, 244, 128, 10, 1, 42, 127, 244, 241, 169, 255, 247, 249, 185, 84, ++ 194, 135, 0, 45, 233, 240, 79, 147, 176, 157, 248, 120, 112, 6, 70, ++ 13, 151, 157, 248, 132, 112, 221, 248, 116, 192, 11, 151, 221, 248, ++ 128, 128, 119, 104, 0, 32, 12, 70, 10, 146, 154, 70, 221, 248, 112, ++ 144, 173, 248, 68, 0, 173, 248, 70, 0, 220, 248, 16, 80, 12, 151, 184, ++ 241, 0, 15, 50, 208, 152, 248, 8, 48, 2, 43, 46, 209, 214, 248, 180, ++ 49, 0, 43, 19, 218, 150, 248, 148, 50, 131, 185, 43, 109, 24, 7, 13, ++ 212, 50, 104, 152, 248, 6, 48, 210, 248, 188, 32, 147, 66, 6, 210, 3, ++ 43, 4, 217, 11, 43, 2, 216, 186, 241, 1, 15, 22, 208, 163, 104, 12, ++ 159, 3, 147, 34, 155, 0, 151, 11, 159, 6, 147, 48, 104, 33, 70, 10, ++ 154, 83, 70, 205, 248, 8, 192, 205, 248, 36, 192, 1, 149, 205, 248, ++ 16, 128, 5, 151, 91, 240, 70, 220, 221, 248, 36, 192, 21, 177, 149, ++ 248, 37, 51, 203, 185, 11, 159, 10, 241, 255, 51, 1, 151, 31, 159, 13, ++ 241, 70, 2, 3, 151, 10, 159, 2, 146, 251, 26, 98, 70, 48, 70, 33, 70, ++ 24, 191, 1, 35, 205, 248, 36, 192, 205, 248, 0, 128, 12, 240, 196, 219, ++ 221, 248, 36, 192, 131, 70, 1, 224, 79, 240, 0, 11, 185, 241, 0, 15, ++ 25, 208, 220, 248, 164, 49, 220, 248, 4, 32, 217, 7, 129, 75, 88, 191, ++ 9, 241, 28, 9, 2, 234, 3, 3, 72, 191, 9, 241, 34, 9, 11, 177, 9, 241, ++ 2, 9, 184, 241, 0, 15, 5, 208, 152, 249, 14, 32, 152, 249, 15, 48, 211, ++ 24, 153, 68, 214, 248, 104, 52, 27, 104, 235, 92, 27, 177, 220, 248, ++ 4, 48, 195, 243, 128, 3, 10, 159, 0, 34, 141, 232, 128, 4, 5, 146, 31, ++ 159, 17, 170, 6, 146, 33, 70, 98, 70, 48, 70, 2, 151, 205, 248, 36, ++ 192, 205, 248, 12, 144, 205, 248, 16, 128, 13, 240, 254, 220, 189, 248, ++ 68, 16, 171, 121, 189, 248, 70, 112, 15, 145, 221, 248, 36, 192, 163, ++ 185, 149, 248, 148, 48, 139, 177, 185, 241, 0, 15, 14, 209, 13, 154, ++ 98, 177, 79, 246, 255, 115, 152, 66, 5, 208, 163, 127, 35, 240, 15, ++ 3, 67, 240, 5, 3, 163, 119, 0, 35, 133, 248, 148, 48, 184, 241, 0, 15, ++ 60, 208, 150, 248, 148, 50, 195, 185, 43, 109, 26, 7, 21, 212, 152, ++ 248, 8, 48, 11, 43, 7, 209, 51, 104, 147, 248, 177, 48, 107, 177, 152, ++ 248, 6, 48, 7, 43, 9, 216, 51, 104, 152, 248, 6, 32, 211, 248, 188, ++ 48, 154, 66, 2, 210, 163, 105, 155, 0, 32, 213, 189, 248, 68, 144, 163, ++ 104, 9, 241, 118, 9, 75, 68, 163, 96, 163, 137, 48, 70, 201, 235, 3, ++ 3, 163, 129, 12, 153, 43, 70, 34, 70, 205, 248, 0, 192, 205, 248, 36, ++ 192, 205, 248, 4, 128, 92, 240, 156, 220, 163, 104, 221, 248, 36, 192, ++ 201, 235, 3, 3, 163, 96, 163, 137, 153, 68, 164, 248, 12, 144, 171, ++ 121, 51, 185, 213, 248, 72, 51, 0, 43, 66, 208, 155, 123, 216, 7, 63, ++ 213, 31, 155, 4, 43, 35, 208, 156, 248, 231, 48, 0, 43, 56, 208, 10, ++ 152, 10, 241, 255, 51, 193, 26, 48, 74, 31, 152, 75, 66, 67, 235, 1, ++ 3, 18, 92, 156, 248, 218, 16, 48, 70, 81, 250, 2, 242, 18, 240, 1, 15, ++ 0, 147, 97, 70, 34, 70, 91, 70, 205, 248, 36, 192, 2, 208, 42, 240, ++ 158, 222, 1, 224, 43, 240, 247, 216, 221, 248, 36, 192, 24, 224, 181, ++ 248, 90, 0, 205, 248, 36, 192, 245, 243, 4, 243, 221, 248, 36, 192, ++ 72, 177, 171, 110, 90, 28, 6, 208, 5, 235, 131, 3, 219, 110, 19, 177, ++ 27, 122, 4, 43, 5, 208, 187, 248, 0, 48, 67, 244, 0, 83, 171, 248, 0, ++ 48, 13, 153, 41, 177, 220, 248, 164, 49, 3, 240, 5, 3, 1, 43, 31, 208, ++ 214, 248, 160, 1, 3, 120, 219, 177, 186, 241, 1, 15, 24, 209, 148, 249, ++ 30, 48, 0, 43, 20, 219, 149, 248, 37, 51, 139, 185, 15, 154, 97, 70, ++ 187, 24, 189, 248, 68, 32, 31, 159, 2, 146, 189, 248, 70, 32, 118, 51, ++ 0, 151, 11, 159, 3, 146, 155, 178, 34, 70, 1, 151, 101, 240, 185, 223, ++ 19, 176, 189, 232, 240, 143, 64, 0, 1, 0, 84, 194, 135, 0, 136, 138, ++ 139, 105, 4, 56, 128, 178, 27, 26, 27, 12, 27, 4, 24, 67, 112, 71, 0, ++ 0, 45, 233, 240, 65, 144, 176, 12, 70, 6, 70, 144, 70, 255, 247, 238, ++ 255, 64, 34, 5, 70, 0, 33, 104, 70, 243, 243, 156, 245, 163, 136, 33, ++ 70, 195, 243, 64, 19, 48, 70, 205, 248, 22, 80, 205, 248, 14, 48, 73, ++ 240, 1, 216, 227, 138, 205, 248, 30, 0, 173, 248, 8, 48, 3, 244, 64, ++ 67, 163, 245, 64, 66, 83, 66, 67, 235, 2, 3, 10, 51, 86, 248, 35, 48, ++ 24, 105, 30, 240, 166, 252, 216, 248, 8, 112, 205, 248, 34, 0, 57, 70, ++ 32, 70, 40, 240, 215, 253, 251, 136, 5, 70, 3, 240, 240, 3, 27, 9, 8, ++ 43, 1, 208, 12, 43, 30, 209, 163, 136, 3, 240, 3, 3, 2, 43, 25, 209, ++ 251, 120, 27, 7, 8, 213, 221, 248, 46, 48, 198, 248, 52, 86, 67, 240, ++ 1, 3, 205, 248, 46, 48, 13, 224, 59, 120, 122, 120, 26, 67, 187, 120, ++ 19, 67, 7, 209, 221, 248, 46, 48, 214, 248, 52, 86, 67, 240, 2, 3, 205, ++ 248, 46, 48, 99, 138, 216, 7, 5, 213, 221, 248, 46, 48, 67, 240, 12, ++ 3, 205, 248, 46, 48, 5, 240, 64, 119, 183, 241, 128, 127, 60, 209, 189, ++ 248, 8, 32, 141, 248, 12, 80, 2, 244, 96, 83, 179, 245, 192, 95, 17, ++ 209, 5, 244, 224, 35, 179, 245, 128, 63, 6, 209, 18, 244, 224, 111, ++ 1, 209, 2, 35, 5, 224, 4, 35, 3, 224, 179, 245, 0, 63, 2, 209, 1, 35, ++ 141, 248, 13, 48, 41, 2, 5, 213, 157, 248, 13, 48, 67, 240, 8, 3, 141, ++ 248, 13, 48, 106, 2, 5, 213, 157, 248, 13, 48, 67, 240, 64, 3, 141, ++ 248, 13, 48, 235, 2, 5, 213, 157, 248, 13, 48, 67, 240, 16, 3, 141, ++ 248, 13, 48, 48, 70, 157, 248, 13, 16, 157, 248, 12, 32, 14, 240, 241, ++ 219, 173, 248, 10, 0, 8, 224, 40, 70, 40, 240, 75, 252, 79, 244, 250, ++ 115, 144, 251, 243, 243, 173, 248, 10, 48, 35, 136, 6, 59, 205, 248, ++ 18, 48, 227, 136, 27, 10, 205, 248, 26, 48, 189, 248, 8, 48, 19, 244, ++ 64, 79, 12, 191, 179, 106, 243, 106, 27, 137, 1, 147, 1, 155, 7, 43, ++ 13, 216, 79, 240, 104, 66, 154, 64, 11, 212, 79, 240, 64, 114, 154, ++ 64, 5, 212, 79, 240, 128, 98, 154, 64, 1, 213, 2, 35, 0, 224, 4, 35, ++ 1, 147, 47, 187, 5, 240, 127, 3, 22, 43, 15, 216, 34, 74, 154, 64, 12, ++ 213, 1, 35, 173, 248, 42, 48, 163, 136, 173, 248, 44, 112, 3, 240, 128, ++ 3, 0, 43, 12, 191, 2, 35, 1, 35, 30, 224, 27, 75, 237, 178, 91, 87, ++ 0, 43, 12, 218, 2, 35, 173, 248, 42, 48, 0, 35, 173, 248, 44, 48, 1, ++ 35, 173, 248, 38, 48, 0, 35, 173, 248, 40, 48, 14, 224, 3, 35, 173, ++ 248, 42, 48, 0, 35, 173, 248, 44, 48, 99, 137, 27, 5, 27, 13, 0, 43, ++ 12, 191, 4, 35, 3, 35, 205, 248, 38, 48, 35, 138, 216, 6, 3, 213, 0, ++ 154, 66, 240, 128, 2, 0, 146, 217, 7, 3, 213, 0, 155, 67, 240, 1, 3, ++ 0, 147, 176, 104, 105, 70, 66, 70, 252, 247, 119, 253, 16, 176, 189, ++ 232, 240, 129, 0, 2, 16, 40, 224, 248, 135, 0, 248, 181, 31, 70, 0, ++ 35, 59, 112, 1, 35, 123, 112, 12, 70, 22, 70, 5, 70, 16, 240, 185, 222, ++ 64, 244, 128, 83, 155, 178, 14, 40, 140, 191, 79, 244, 64, 64, 0, 32, ++ 24, 67, 3, 10, 67, 234, 0, 32, 120, 128, 33, 70, 40, 70, 72, 240, 220, ++ 222, 3, 6, 0, 244, 127, 66, 67, 234, 16, 99, 67, 234, 2, 35, 0, 244, ++ 127, 0, 67, 234, 16, 32, 120, 96, 33, 70, 40, 70, 255, 247, 168, 254, ++ 0, 186, 184, 96, 49, 70, 32, 70, 40, 240, 182, 252, 0, 186, 248, 96, ++ 248, 189, 56, 181, 29, 70, 20, 70, 255, 247, 154, 254, 43, 104, 131, ++ 66, 2, 210, 35, 104, 1, 59, 35, 96, 40, 96, 56, 189, 240, 181, 4, 104, ++ 173, 245, 59, 125, 5, 70, 0, 33, 208, 248, 244, 96, 79, 244, 55, 114, ++ 1, 168, 185, 145, 39, 106, 243, 243, 55, 244, 42, 122, 66, 177, 115, ++ 142, 19, 244, 64, 79, 12, 191, 0, 35, 1, 35, 10, 51, 84, 248, 35, 112, ++ 123, 108, 184, 147, 0, 43, 59, 208, 3, 240, 64, 113, 177, 241, 128, ++ 127, 38, 209, 19, 244, 224, 47, 27, 209, 10, 177, 112, 142, 3, 224, ++ 35, 106, 24, 105, 29, 240, 167, 254, 0, 244, 96, 80, 176, 245, 128, ++ 95, 184, 155, 2, 209, 67, 244, 128, 51, 10, 224, 176, 245, 192, 95, ++ 2, 209, 67, 244, 0, 51, 4, 224, 176, 245, 32, 95, 2, 209, 67, 244, 128, ++ 35, 184, 147, 148, 249, 32, 50, 1, 43, 3, 209, 184, 155, 67, 244, 0, ++ 3, 184, 147, 184, 153, 32, 70, 33, 244, 64, 113, 184, 145, 46, 240, ++ 53, 254, 184, 156, 5, 70, 32, 70, 40, 240, 210, 250, 40, 26, 68, 234, ++ 0, 32, 15, 224, 40, 70, 1, 169, 184, 170, 185, 171, 22, 240, 32, 252, ++ 184, 152, 24, 185, 40, 70, 25, 240, 239, 222, 3, 224, 148, 248, 229, ++ 53, 3, 177, 185, 152, 13, 245, 59, 125, 240, 189, 45, 233, 247, 67, ++ 136, 70, 17, 70, 5, 70, 23, 70, 22, 240, 191, 249, 6, 70, 0, 40, 91, ++ 208, 213, 248, 124, 2, 0, 40, 87, 208, 54, 33, 65, 240, 55, 218, 4, ++ 70, 0, 40, 81, 208, 0, 241, 24, 9, 6, 241, 194, 1, 6, 34, 72, 70, 242, ++ 247, 60, 248, 54, 35, 5, 34, 196, 248, 48, 144, 99, 96, 98, 97, 213, ++ 248, 124, 2, 105, 104, 65, 240, 45, 218, 160, 99, 56, 185, 213, 248, ++ 124, 2, 33, 70, 3, 176, 189, 232, 240, 67, 65, 240, 45, 154, 123, 121, ++ 128, 248, 1, 128, 3, 112, 0, 35, 131, 112, 214, 248, 204, 48, 25, 5, ++ 1, 213, 1, 35, 131, 112, 150, 248, 68, 48, 195, 112, 59, 121, 1, 43, ++ 15, 209, 178, 121, 214, 248, 204, 48, 50, 177, 3, 244, 0, 83, 0, 43, ++ 12, 191, 1, 35, 3, 35, 5, 224, 19, 244, 0, 83, 24, 191, 4, 35, 0, 224, ++ 2, 35, 3, 113, 213, 248, 108, 50, 40, 70, 219, 104, 33, 70, 0, 147, ++ 50, 70, 59, 70, 9, 240, 7, 223, 40, 70, 33, 70, 3, 176, 189, 232, 240, ++ 67, 28, 240, 42, 153, 3, 176, 189, 232, 240, 131, 45, 233, 240, 79, ++ 16, 41, 171, 176, 4, 70, 13, 70, 147, 70, 0, 240, 161, 128, 208, 248, ++ 104, 49, 219, 121, 1, 43, 20, 209, 176, 248, 148, 53, 12, 33, 42, 170, ++ 173, 248, 36, 48, 109, 35, 66, 248, 140, 29, 8, 147, 0, 35, 3, 146, ++ 4, 145, 173, 248, 38, 48, 0, 149, 1, 147, 2, 147, 89, 70, 69, 34, 84, ++ 224, 3, 104, 147, 248, 23, 49, 0, 43, 72, 208, 208, 248, 16, 35, 12, ++ 38, 16, 104, 0, 35, 11, 224, 145, 104, 128, 54, 177, 248, 108, 16, 12, ++ 41, 3, 217, 9, 57, 33, 240, 3, 1, 118, 24, 1, 51, 4, 50, 131, 66, 241, ++ 209, 48, 70, 250, 247, 74, 255, 129, 70, 0, 40, 103, 208, 0, 241, 12, ++ 7, 178, 70, 79, 240, 0, 8, 17, 224, 1, 33, 8, 241, 2, 2, 0, 145, 83, ++ 248, 34, 16, 32, 70, 58, 70, 83, 70, 20, 240, 208, 218, 80, 185, 123, ++ 104, 8, 241, 1, 8, 195, 235, 10, 10, 255, 24, 212, 248, 16, 51, 26, ++ 104, 144, 69, 232, 211, 201, 248, 8, 128, 0, 35, 32, 70, 89, 70, 26, ++ 34, 0, 149, 1, 147, 2, 147, 205, 248, 12, 144, 4, 150, 20, 240, 144, ++ 220, 72, 70, 250, 247, 28, 255, 8, 224, 141, 232, 10, 0, 2, 147, 17, ++ 70, 3, 147, 4, 147, 26, 34, 20, 240, 131, 220, 212, 248, 32, 51, 2, ++ 43, 4, 209, 160, 104, 212, 248, 52, 19, 8, 240, 80, 223, 8, 45, 11, ++ 208, 93, 177, 212, 248, 32, 51, 2, 43, 79, 240, 3, 3, 12, 191, 196, ++ 248, 32, 51, 196, 248, 28, 51, 24, 224, 1, 37, 32, 70, 212, 248, 24, ++ 19, 20, 240, 54, 220, 212, 248, 16, 3, 212, 248, 24, 19, 20, 240, 72, ++ 220, 212, 248, 32, 51, 2, 43, 2, 209, 196, 248, 32, 83, 5, 224, 212, ++ 248, 28, 51, 2, 43, 8, 191, 196, 248, 28, 83, 43, 176, 189, 232, 240, ++ 143, 45, 233, 240, 79, 219, 176, 221, 248, 144, 177, 8, 145, 11, 146, ++ 153, 70, 208, 248, 104, 81, 187, 248, 10, 48, 4, 70, 221, 248, 148, ++ 129, 7, 147, 157, 177, 175, 121, 151, 177, 40, 70, 89, 240, 134, 219, ++ 7, 70, 104, 177, 212, 248, 104, 6, 57, 70, 9, 241, 16, 2, 72, 240, 205, ++ 222, 1, 40, 0, 240, 206, 129, 4, 40, 1, 209, 202, 225, 47, 70, 185, ++ 248, 0, 160, 10, 240, 252, 10, 170, 241, 128, 1, 209, 241, 0, 10, 74, ++ 235, 1, 10, 186, 241, 0, 15, 14, 208, 171, 136, 90, 7, 13, 212, 8, 158, ++ 212, 248, 92, 1, 241, 138, 201, 178, 63, 240, 251, 218, 208, 241, 1, ++ 6, 56, 191, 0, 38, 2, 224, 86, 70, 0, 224, 0, 38, 168, 241, 12, 1, 0, ++ 34, 11, 241, 12, 0, 248, 247, 224, 255, 171, 104, 1, 70, 2, 43, 11, ++ 208, 27, 185, 7, 155, 155, 7, 7, 213, 154, 225, 1, 43, 64, 240, 152, ++ 129, 7, 155, 152, 7, 64, 241, 148, 129, 40, 70, 50, 70, 89, 240, 60, ++ 221, 0, 40, 0, 240, 141, 129, 43, 123, 217, 7, 9, 212, 5, 241, 12, 0, ++ 9, 241, 16, 1, 6, 34, 241, 247, 194, 254, 0, 40, 64, 240, 128, 129, ++ 9, 241, 16, 6, 7, 150, 32, 70, 13, 174, 8, 153, 7, 154, 83, 70, 205, ++ 248, 0, 176, 205, 248, 4, 128, 2, 150, 28, 240, 197, 219, 0, 40, 64, ++ 240, 110, 129, 212, 248, 104, 1, 113, 142, 89, 240, 189, 219, 0, 40, ++ 0, 240, 102, 129, 212, 248, 104, 49, 123, 177, 155, 121, 107, 177, 212, ++ 248, 80, 1, 57, 70, 82, 70, 27, 171, 205, 248, 0, 176, 205, 248, 4, ++ 128, 82, 240, 22, 217, 0, 40, 64, 240, 83, 129, 157, 248, 60, 48, 189, ++ 248, 102, 32, 0, 147, 32, 70, 7, 153, 13, 241, 61, 3, 12, 240, 114, ++ 217, 6, 70, 8, 179, 195, 136, 186, 241, 0, 15, 2, 208, 218, 5, 2, 212, ++ 62, 225, 219, 5, 24, 212, 189, 248, 94, 16, 0, 41, 0, 240, 56, 129, ++ 243, 136, 152, 7, 4, 213, 189, 248, 58, 32, 146, 7, 64, 241, 48, 129, ++ 189, 248, 58, 32, 83, 64, 152, 7, 15, 212, 115, 141, 107, 177, 27, 178, ++ 9, 178, 139, 66, 9, 219, 35, 225, 212, 248, 20, 51, 43, 177, 189, 249, ++ 94, 32, 27, 178, 154, 66, 192, 242, 27, 129, 35, 104, 147, 248, 175, ++ 48, 51, 177, 212, 248, 136, 1, 13, 169, 90, 70, 67, 70, 32, 240, 10, ++ 220, 212, 248, 104, 49, 219, 121, 1, 43, 69, 209, 171, 136, 0, 34, 173, ++ 248, 160, 32, 154, 7, 12, 213, 64, 70, 250, 247, 238, 253, 39, 144, ++ 0, 40, 0, 240, 254, 128, 89, 70, 66, 70, 241, 247, 76, 254, 173, 248, ++ 160, 128, 189, 248, 160, 0, 140, 48, 250, 247, 223, 253, 189, 248, 160, ++ 48, 5, 70, 32, 179, 1, 38, 32, 70, 13, 169, 5, 241, 12, 2, 128, 51, ++ 0, 150, 20, 240, 108, 217, 168, 185, 180, 248, 148, 53, 8, 34, 43, 129, ++ 109, 35, 107, 96, 43, 105, 110, 129, 12, 51, 43, 96, 57, 70, 0, 146, ++ 1, 144, 2, 144, 4, 147, 32, 70, 69, 34, 9, 241, 10, 3, 3, 149, 20, 240, ++ 47, 219, 40, 70, 250, 247, 187, 253, 189, 248, 160, 48, 0, 43, 0, 240, ++ 199, 128, 39, 152, 134, 224, 190, 185, 212, 248, 32, 51, 2, 43, 22, ++ 209, 8, 154, 32, 70, 211, 138, 189, 248, 102, 32, 219, 178, 2, 244, ++ 127, 66, 26, 67, 157, 248, 60, 48, 7, 153, 0, 147, 13, 241, 61, 3, 10, ++ 146, 12, 240, 4, 216, 32, 177, 171, 224, 0, 34, 10, 146, 0, 224, 10, ++ 150, 171, 136, 19, 240, 2, 3, 14, 208, 64, 70, 250, 247, 141, 253, 9, ++ 144, 0, 40, 0, 240, 157, 128, 89, 70, 66, 70, 39, 144, 241, 247, 234, ++ 253, 173, 248, 160, 128, 0, 224, 9, 147, 222, 185, 32, 70, 13, 169, ++ 252, 247, 164, 254, 0, 40, 0, 240, 137, 128, 32, 70, 11, 240, 169, 223, ++ 6, 70, 0, 40, 0, 240, 130, 128, 212, 248, 32, 51, 2, 43, 9, 209, 157, ++ 248, 60, 48, 32, 70, 0, 147, 7, 153, 10, 154, 13, 241, 61, 3, 11, 240, ++ 105, 223, 13, 170, 49, 70, 32, 70, 252, 247, 174, 255, 247, 243, 74, ++ 243, 11, 153, 112, 102, 8, 152, 40, 240, 157, 249, 8, 153, 3, 70, 32, ++ 70, 6, 147, 255, 247, 131, 251, 6, 155, 131, 70, 198, 248, 172, 0, 25, ++ 70, 32, 70, 20, 240, 97, 222, 88, 68, 198, 248, 172, 0, 212, 248, 104, ++ 1, 3, 123, 219, 7, 25, 212, 12, 48, 248, 247, 224, 253, 168, 185, 212, ++ 248, 104, 1, 89, 240, 253, 217, 1, 40, 15, 209, 0, 47, 72, 208, 215, ++ 248, 204, 16, 17, 244, 0, 81, 10, 209, 212, 248, 104, 1, 89, 240, 76, ++ 220, 5, 224, 9, 152, 250, 247, 43, 253, 58, 224, 0, 47, 56, 208, 212, ++ 248, 124, 2, 71, 33, 65, 240, 148, 216, 184, 177, 86, 174, 32, 70, 8, ++ 153, 11, 154, 51, 70, 255, 247, 118, 252, 0, 35, 0, 147, 1, 147, 2, ++ 147, 8, 241, 24, 3, 4, 147, 32, 70, 57, 70, 71, 34, 9, 241, 10, 3, 205, ++ 248, 12, 144, 5, 150, 20, 240, 141, 218, 215, 248, 204, 48, 153, 4, ++ 22, 213, 215, 248, 248, 48, 155, 177, 155, 104, 139, 177, 5, 241, 12, ++ 0, 7, 153, 6, 34, 241, 247, 75, 253, 80, 185, 186, 241, 0, 15, 7, 209, ++ 40, 70, 81, 70, 89, 240, 16, 220, 2, 224, 9, 155, 0, 43, 192, 209, 91, ++ 176, 189, 232, 240, 143, 45, 233, 247, 79, 221, 248, 48, 176, 6, 70, ++ 1, 146, 28, 70, 211, 248, 244, 112, 136, 70, 41, 185, 211, 248, 248, ++ 48, 25, 116, 132, 248, 234, 19, 4, 224, 144, 248, 198, 53, 0, 43, 64, ++ 240, 152, 128, 0, 35, 132, 248, 152, 51, 184, 241, 0, 15, 13, 208, 212, ++ 248, 252, 48, 147, 248, 60, 48, 83, 177, 187, 241, 0, 15, 7, 209, 32, ++ 70, 1, 153, 22, 240, 48, 249, 16, 177, 131, 224, 132, 248, 118, 131, ++ 214, 248, 124, 2, 16, 33, 64, 240, 14, 223, 5, 70, 0, 40, 121, 208, ++ 16, 35, 67, 96, 24, 241, 0, 3, 24, 191, 1, 35, 67, 128, 192, 248, 12, ++ 176, 163, 121, 0, 43, 96, 209, 35, 122, 0, 43, 93, 208, 34, 109, 64, ++ 242, 55, 19, 19, 64, 0, 43, 87, 208, 187, 110, 0, 43, 84, 208, 183, ++ 248, 108, 160, 186, 241, 12, 15, 79, 217, 180, 248, 90, 0, 3, 241, 12, ++ 9, 170, 241, 12, 10, 244, 243, 132, 245, 40, 177, 72, 70, 81, 70, 244, ++ 243, 9, 244, 7, 70, 216, 185, 180, 248, 90, 0, 248, 247, 39, 255, 48, ++ 177, 72, 70, 81, 70, 48, 34, 248, 247, 207, 253, 7, 70, 120, 185, 180, ++ 248, 90, 48, 179, 245, 128, 111, 2, 208, 179, 245, 0, 111, 44, 209, ++ 72, 70, 81, 70, 68, 34, 248, 247, 192, 253, 7, 70, 0, 40, 36, 208, 214, ++ 248, 108, 50, 179, 248, 90, 0, 248, 247, 9, 255, 104, 177, 184, 241, ++ 0, 15, 10, 208, 187, 241, 0, 15, 7, 208, 214, 248, 124, 2, 41, 70, 3, ++ 176, 189, 232, 240, 79, 64, 240, 196, 158, 122, 120, 214, 248, 124, ++ 2, 113, 104, 2, 50, 16, 35, 64, 240, 178, 222, 168, 99, 40, 177, 122, ++ 120, 57, 70, 2, 50, 106, 97, 241, 247, 174, 252, 48, 70, 33, 70, 42, ++ 70, 1, 155, 25, 240, 68, 217, 48, 70, 41, 70, 3, 176, 189, 232, 240, ++ 79, 27, 240, 217, 157, 3, 176, 189, 232, 240, 143, 45, 233, 240, 79, ++ 78, 104, 147, 176, 209, 248, 8, 176, 5, 70, 198, 243, 192, 64, 12, 70, ++ 3, 144, 23, 70, 153, 70, 4, 168, 198, 243, 0, 67, 0, 33, 40, 34, 38, ++ 240, 134, 70, 2, 147, 38, 244, 234, 22, 243, 243, 5, 240, 43, 240, 131, ++ 3, 212, 248, 16, 160, 102, 96, 163, 96, 0, 47, 0, 240, 208, 128, 59, ++ 120, 151, 248, 1, 128, 67, 234, 8, 40, 164, 248, 16, 129, 187, 120, ++ 132, 248, 18, 49, 70, 244, 128, 51, 99, 96, 43, 104, 147, 248, 66, 32, ++ 178, 177, 147, 248, 67, 48, 155, 177, 70, 244, 160, 38, 212, 248, 52, ++ 49, 102, 96, 147, 248, 93, 48, 123, 185, 27, 244, 0, 127, 3, 208, 148, ++ 248, 36, 48, 218, 6, 8, 213, 40, 70, 33, 70, 35, 240, 71, 221, 3, 224, ++ 40, 70, 33, 70, 35, 240, 52, 221, 162, 104, 18, 240, 0, 98, 34, 209, ++ 8, 240, 12, 3, 155, 16, 1, 43, 148, 248, 14, 1, 148, 248, 15, 17, 6, ++ 208, 3, 43, 9, 208, 67, 185, 1, 34, 132, 248, 14, 33, 1, 224, 132, 248, ++ 14, 49, 132, 248, 15, 49, 3, 224, 132, 248, 14, 33, 132, 248, 15, 33, ++ 148, 248, 14, 49, 131, 66, 7, 209, 148, 248, 15, 97, 118, 26, 24, 191, ++ 1, 38, 2, 224, 0, 38, 0, 224, 1, 38, 24, 244, 64, 127, 3, 208, 99, 104, ++ 67, 240, 128, 67, 99, 96, 24, 240, 1, 15, 3, 208, 163, 104, 67, 240, ++ 128, 3, 163, 96, 24, 240, 32, 15, 3, 208, 163, 104, 67, 240, 1, 3, 163, ++ 96, 24, 240, 64, 15, 3, 208, 163, 104, 67, 240, 2, 3, 163, 96, 163, ++ 104, 11, 240, 3, 11, 3, 240, 3, 3, 155, 69, 24, 191, 1, 38, 24, 240, ++ 16, 15, 3, 209, 99, 104, 67, 244, 128, 19, 99, 96, 24, 244, 128, 79, ++ 3, 208, 99, 104, 67, 240, 0, 115, 99, 96, 200, 243, 64, 8, 185, 241, ++ 0, 15, 42, 208, 5, 245, 54, 112, 7, 48, 73, 70, 22, 34, 241, 247, 232, ++ 251, 184, 241, 0, 15, 3, 208, 153, 248, 1, 128, 200, 243, 128, 8, 153, ++ 248, 1, 48, 27, 7, 3, 213, 99, 104, 67, 240, 128, 115, 99, 96, 153, ++ 248, 2, 48, 19, 240, 8, 3, 13, 208, 218, 248, 244, 48, 64, 246, 8, 66, ++ 91, 142, 65, 246, 16, 1, 3, 244, 64, 67, 179, 245, 64, 79, 20, 191, ++ 11, 70, 19, 70, 165, 248, 192, 50, 43, 104, 147, 249, 82, 48, 251, 177, ++ 28, 155, 235, 177, 154, 248, 6, 48, 211, 185, 28, 153, 14, 34, 14, 168, ++ 241, 247, 182, 251, 40, 70, 14, 169, 1, 34, 25, 240, 181, 221, 80, 70, ++ 14, 169, 13, 240, 209, 221, 11, 224, 40, 70, 33, 70, 6, 34, 31, 240, ++ 221, 219, 40, 70, 33, 70, 35, 240, 135, 220, 62, 70, 184, 70, 25, 224, ++ 16, 34, 249, 28, 13, 241, 37, 0, 241, 247, 154, 251, 213, 248, 116, ++ 52, 4, 168, 153, 120, 39, 240, 177, 254, 213, 248, 108, 18, 40, 70, ++ 25, 240, 141, 218, 255, 35, 1, 144, 0, 34, 4, 168, 0, 147, 1, 70, 19, ++ 70, 40, 240, 66, 248, 2, 152, 136, 177, 99, 104, 19, 244, 128, 51, 16, ++ 208, 9, 170, 0, 35, 225, 24, 18, 248, 1, 15, 145, 248, 97, 16, 136, ++ 66, 6, 209, 1, 51, 16, 43, 245, 209, 0, 35, 2, 224, 2, 155, 0, 224, ++ 1, 35, 98, 104, 2, 152, 2, 244, 128, 49, 194, 243, 0, 66, 144, 66, 0, ++ 209, 99, 177, 4, 241, 97, 0, 41, 177, 13, 241, 37, 1, 16, 34, 241, 247, ++ 94, 251, 2, 224, 16, 34, 242, 243, 218, 246, 1, 38, 184, 241, 0, 15, ++ 3, 208, 99, 104, 67, 244, 0, 35, 99, 96, 3, 155, 67, 69, 0, 209, 70, ++ 177, 213, 248, 116, 52, 147, 248, 123, 48, 27, 185, 40, 70, 33, 70, ++ 44, 240, 231, 252, 19, 176, 189, 232, 240, 143, 240, 181, 135, 176, ++ 4, 70, 13, 70, 14, 240, 202, 220, 6, 70, 0, 40, 64, 240, 133, 128, 107, ++ 28, 4, 43, 0, 242, 129, 128, 223, 232, 3, 240, 71, 3, 78, 127, 78, 0, ++ 35, 104, 0, 39, 131, 248, 79, 112, 35, 104, 131, 248, 81, 112, 212, ++ 248, 56, 3, 195, 136, 35, 240, 32, 3, 195, 128, 56, 48, 39, 240, 210, ++ 255, 37, 106, 57, 70, 5, 241, 101, 0, 16, 34, 242, 243, 152, 246, 107, ++ 108, 51, 177, 19, 240, 64, 127, 3, 208, 111, 100, 32, 70, 28, 240, 109, ++ 217, 171, 108, 35, 177, 19, 240, 64, 127, 1, 208, 0, 35, 171, 100, 0, ++ 37, 212, 248, 104, 50, 90, 89, 154, 177, 212, 248, 36, 1, 3, 169, 89, ++ 240, 234, 221, 5, 224, 0, 34, 32, 70, 19, 70, 0, 146, 255, 247, 89, ++ 254, 3, 169, 212, 248, 36, 1, 44, 240, 134, 250, 1, 70, 0, 40, 241, ++ 209, 4, 53, 32, 45, 228, 209, 55, 224, 212, 248, 116, 52, 157, 120, ++ 3, 45, 12, 191, 3, 37, 1, 37, 1, 33, 32, 70, 10, 70, 29, 240, 15, 221, ++ 3, 45, 35, 104, 1, 209, 7, 34, 0, 224, 3, 34, 131, 248, 79, 32, 212, ++ 248, 56, 3, 195, 136, 67, 240, 32, 3, 195, 128, 212, 248, 116, 52, 56, ++ 48, 25, 121, 39, 240, 235, 255, 0, 33, 32, 70, 212, 248, 56, 83, 25, ++ 240, 195, 217, 56, 53, 0, 34, 255, 35, 0, 147, 1, 144, 41, 70, 40, 70, ++ 19, 70, 39, 240, 119, 255, 32, 106, 212, 248, 56, 19, 101, 48, 77, 49, ++ 16, 34, 241, 247, 179, 250, 48, 70, 7, 176, 240, 189, 248, 181, 3, 104, ++ 6, 70, 147, 248, 69, 48, 12, 70, 21, 70, 26, 79, 59, 177, 11, 104, 208, ++ 248, 100, 1, 249, 92, 58, 240, 83, 221, 0, 40, 40, 209, 43, 105, 33, ++ 104, 211, 248, 68, 35, 121, 92, 146, 248, 41, 0, 8, 65, 16, 240, 1, ++ 0, 30, 208, 33, 104, 137, 185, 50, 104, 219, 104, 210, 248, 136, 32, ++ 79, 240, 255, 48, 17, 106, 1, 49, 17, 98, 26, 106, 1, 50, 26, 98, 213, ++ 248, 92, 49, 1, 51, 197, 248, 92, 49, 248, 189, 1, 57, 33, 96, 146, ++ 248, 41, 0, 121, 92, 8, 65, 16, 240, 1, 0, 226, 209, 248, 189, 0, 32, ++ 248, 189, 84, 194, 135, 0, 45, 233, 240, 79, 153, 70, 153, 176, 0, 35, ++ 20, 146, 22, 147, 66, 104, 3, 104, 13, 104, 14, 146, 26, 126, 4, 70, ++ 138, 70, 213, 248, 40, 128, 50, 185, 211, 248, 136, 48, 12, 146, 89, ++ 106, 1, 49, 89, 98, 97, 227, 144, 248, 116, 34, 0, 42, 64, 240, 126, ++ 131, 216, 248, 16, 112, 174, 105, 58, 124, 122, 177, 152, 248, 20, 16, ++ 200, 7, 11, 212, 152, 248, 36, 16, 17, 240, 2, 1, 6, 209, 211, 248, ++ 136, 48, 12, 145, 90, 106, 1, 50, 90, 98, 71, 227, 33, 106, 216, 248, ++ 48, 0, 73, 104, 136, 66, 7, 208, 211, 248, 136, 48, 90, 106, 1, 50, ++ 90, 98, 0, 35, 12, 147, 57, 227, 216, 248, 4, 48, 143, 73, 25, 64, 17, ++ 177, 233, 137, 1, 240, 7, 1, 12, 145, 185, 121, 1, 185, 210, 185, 152, ++ 248, 20, 32, 209, 7, 22, 213, 215, 248, 204, 32, 82, 5, 18, 212, 215, ++ 248, 244, 32, 82, 142, 2, 244, 64, 66, 162, 245, 64, 76, 220, 241, 0, ++ 2, 66, 235, 12, 2, 14, 50, 7, 235, 130, 2, 82, 104, 18, 177, 146, 248, ++ 231, 32, 178, 185, 88, 6, 23, 213, 24, 171, 0, 34, 67, 248, 4, 45, 0, ++ 147, 32, 70, 12, 155, 65, 70, 42, 70, 31, 240, 32, 221, 23, 155, 131, ++ 70, 0, 43, 64, 240, 1, 131, 235, 137, 3, 240, 7, 3, 12, 147, 4, 224, ++ 79, 240, 4, 11, 1, 224, 79, 240, 1, 11, 157, 248, 136, 32, 201, 248, ++ 0, 176, 35, 104, 18, 177, 179, 248, 98, 48, 1, 224, 179, 248, 96, 48, ++ 187, 241, 3, 15, 7, 216, 226, 105, 2, 235, 75, 2, 178, 249, 28, 32, ++ 154, 66, 128, 242, 190, 128, 14, 152, 41, 70, 248, 247, 103, 249, 21, ++ 40, 129, 70, 18, 216, 35, 104, 211, 248, 136, 48, 154, 106, 1, 50, 154, ++ 98, 216, 248, 16, 48, 27, 177, 219, 104, 90, 106, 1, 50, 90, 98, 216, ++ 248, 92, 49, 1, 51, 200, 248, 92, 49, 198, 226, 170, 104, 187, 121, ++ 18, 146, 91, 177, 19, 120, 217, 7, 8, 213, 212, 248, 8, 5, 57, 70, 75, ++ 70, 41, 240, 50, 216, 0, 40, 64, 240, 183, 130, 6, 240, 16, 3, 219, ++ 178, 17, 147, 151, 248, 89, 48, 91, 177, 152, 248, 20, 48, 218, 7, 7, ++ 212, 152, 248, 36, 48, 219, 6, 3, 212, 17, 155, 0, 43, 0, 240, 164, ++ 130, 212, 248, 156, 33, 6, 240, 0, 67, 186, 92, 82, 177, 152, 248, 20, ++ 32, 208, 7, 6, 212, 152, 248, 36, 32, 209, 6, 2, 212, 0, 43, 0, 240, ++ 147, 130, 58, 109, 64, 242, 55, 22, 22, 64, 254, 177, 151, 248, 37, ++ 35, 202, 185, 17, 154, 82, 177, 184, 248, 68, 96, 190, 177, 216, 248, ++ 12, 96, 166, 177, 51, 105, 0, 43, 8, 191, 0, 38, 15, 224, 107, 185, ++ 216, 248, 12, 96, 94, 185, 187, 110, 90, 28, 0, 240, 118, 130, 7, 235, ++ 131, 3, 222, 110, 30, 185, 112, 226, 0, 38, 0, 224, 17, 158, 151, 248, ++ 80, 51, 155, 177, 17, 155, 139, 177, 151, 248, 37, 51, 115, 185, 32, ++ 70, 41, 70, 14, 34, 3, 35, 252, 247, 118, 251, 56, 177, 212, 248, 120, ++ 4, 35, 73, 183, 248, 26, 33, 43, 70, 82, 240, 131, 216, 62, 177, 51, ++ 122, 2, 43, 6, 209, 1, 34, 9, 241, 8, 9, 16, 146, 3, 224, 16, 150, 1, ++ 224, 0, 35, 16, 147, 171, 105, 19, 244, 136, 111, 14, 209, 151, 248, ++ 37, 51, 91, 185, 22, 171, 0, 147, 32, 70, 65, 70, 90, 70, 75, 70, 252, ++ 247, 227, 251, 1, 40, 13, 144, 9, 209, 2, 224, 169, 241, 14, 3, 22, ++ 147, 14, 152, 41, 70, 248, 247, 200, 248, 1, 34, 13, 146, 148, 248, ++ 74, 54, 3, 177, 64, 0, 227, 105, 3, 235, 139, 3, 91, 104, 27, 104, 131, ++ 66, 14, 216, 4, 235, 75, 3, 179, 248, 90, 34, 180, 248, 88, 50, 35, ++ 234, 2, 3, 164, 248, 88, 50, 56, 226, 64, 0, 1, 0, 125, 32, 1, 0, 13, ++ 154, 79, 240, 0, 12, 162, 241, 1, 14, 222, 241, 0, 3, 67, 235, 14, 3, ++ 14, 34, 205, 248, 84, 176, 19, 146, 195, 70, 205, 248, 60, 192, 184, ++ 70, 25, 70, 103, 70, 149, 225, 0, 46, 126, 208, 148, 248, 148, 50, 155, ++ 185, 216, 248, 80, 48, 24, 7, 15, 212, 51, 122, 11, 43, 6, 209, 35, ++ 104, 147, 248, 177, 48, 67, 177, 179, 121, 7, 43, 5, 216, 35, 104, 178, ++ 121, 211, 248, 188, 48, 154, 66, 7, 211, 150, 249, 14, 48, 150, 249, ++ 15, 0, 180, 51, 10, 147, 0, 33, 2, 224, 180, 35, 0, 32, 10, 147, 16, ++ 154, 0, 42, 94, 208, 15, 155, 144, 74, 2, 51, 156, 70, 13, 155, 210, ++ 248, 0, 224, 170, 138, 156, 69, 94, 248, 34, 32, 53, 211, 8, 48, 202, ++ 177, 178, 248, 20, 192, 94, 248, 44, 224, 190, 241, 0, 15, 43, 209, ++ 210, 248, 4, 192, 178, 248, 6, 224, 147, 104, 204, 243, 20, 12, 12, ++ 235, 94, 28, 79, 234, 83, 94, 79, 234, 78, 94, 12, 241, 1, 12, 244, ++ 68, 178, 248, 12, 224, 17, 224, 213, 248, 4, 192, 181, 248, 6, 224, ++ 171, 104, 204, 243, 20, 12, 12, 235, 94, 28, 79, 234, 83, 94, 79, 234, ++ 78, 94, 12, 241, 1, 12, 244, 68, 181, 248, 12, 224, 158, 68, 206, 235, ++ 12, 14, 134, 69, 56, 191, 0, 33, 0, 224, 0, 33, 181, 248, 14, 224, 30, ++ 240, 64, 15, 64, 240, 170, 128, 149, 248, 2, 224, 190, 241, 1, 15, 0, ++ 242, 164, 128, 122, 177, 178, 248, 14, 224, 30, 240, 64, 15, 64, 240, ++ 157, 128, 146, 120, 1, 42, 0, 242, 153, 128, 4, 224, 79, 240, 180, 12, ++ 48, 70, 205, 248, 40, 192, 0, 41, 0, 240, 144, 128, 152, 248, 37, 51, ++ 0, 43, 64, 240, 135, 128, 171, 105, 26, 4, 0, 241, 131, 128, 149, 249, ++ 30, 48, 0, 43, 126, 219, 212, 248, 160, 193, 156, 248, 0, 48, 0, 43, ++ 120, 208, 16, 154, 218, 177, 212, 248, 180, 49, 0, 43, 23, 218, 182, ++ 177, 51, 122, 2, 43, 19, 209, 148, 248, 148, 50, 131, 185, 216, 248, ++ 80, 48, 27, 7, 12, 212, 34, 104, 179, 121, 210, 248, 188, 32, 147, 66, ++ 6, 210, 3, 43, 4, 217, 11, 43, 2, 216, 169, 241, 8, 3, 0, 224, 75, 70, ++ 21, 154, 96, 70, 0, 146, 12, 154, 89, 70, 1, 146, 42, 70, 205, 248, ++ 44, 192, 100, 240, 52, 222, 221, 248, 44, 192, 0, 40, 64, 208, 71, 70, ++ 216, 70, 0, 46, 44, 208, 0, 35, 96, 70, 89, 70, 50, 70, 100, 240, 184, ++ 222, 51, 122, 2, 43, 35, 209, 212, 248, 180, 49, 0, 43, 15, 218, 148, ++ 248, 148, 50, 99, 185, 59, 109, 24, 7, 9, 212, 34, 104, 179, 121, 210, ++ 248, 188, 32, 147, 66, 3, 210, 3, 43, 1, 217, 11, 43, 15, 217, 14, 155, ++ 18, 154, 141, 232, 136, 1, 12, 155, 3, 146, 5, 147, 32, 104, 41, 70, ++ 0, 34, 1, 35, 4, 150, 205, 248, 24, 144, 90, 240, 221, 216, 42, 70, ++ 75, 70, 32, 70, 65, 70, 252, 247, 33, 255, 35, 104, 211, 248, 136, 48, ++ 218, 106, 1, 50, 218, 98, 20, 154, 1, 35, 19, 96, 222, 224, 171, 105, ++ 67, 244, 0, 67, 171, 97, 35, 104, 211, 248, 136, 48, 26, 107, 1, 50, ++ 26, 99, 202, 248, 0, 80, 1, 33, 117, 224, 22, 154, 1, 144, 0, 146, 14, ++ 152, 41, 70, 19, 154, 10, 155, 11, 240, 162, 219, 74, 248, 7, 0, 48, ++ 187, 216, 70, 86, 70, 7, 70, 6, 224, 14, 152, 86, 248, 4, 27, 1, 34, ++ 249, 247, 153, 255, 1, 55, 221, 248, 60, 192, 103, 69, 244, 209, 202, ++ 248, 0, 80, 35, 104, 211, 248, 136, 48, 26, 106, 1, 50, 26, 98, 216, ++ 248, 16, 48, 27, 177, 219, 104, 26, 106, 1, 50, 26, 98, 216, 248, 92, ++ 49, 1, 51, 200, 248, 92, 49, 215, 224, 0, 191, 32, 7, 0, 0, 190, 177, ++ 51, 122, 11, 43, 20, 209, 148, 248, 148, 50, 115, 185, 216, 248, 80, ++ 48, 25, 7, 10, 212, 34, 104, 146, 248, 177, 48, 51, 177, 179, 121, 7, ++ 43, 3, 216, 210, 248, 188, 32, 147, 66, 2, 211, 131, 137, 16, 51, 131, ++ 129, 131, 104, 18, 153, 14, 59, 131, 96, 90, 248, 7, 48, 154, 137, 152, ++ 104, 14, 50, 154, 129, 14, 34, 240, 247, 134, 255, 13, 154, 221, 248, ++ 60, 192, 83, 30, 156, 69, 5, 209, 32, 104, 41, 70, 90, 248, 7, 32, 252, ++ 247, 118, 254, 90, 248, 7, 48, 233, 137, 218, 137, 1, 240, 7, 1, 34, ++ 240, 7, 2, 10, 67, 221, 248, 76, 192, 218, 129, 22, 155, 0, 33, 156, ++ 68, 205, 248, 76, 192, 221, 248, 60, 192, 4, 55, 12, 241, 1, 12, 205, ++ 248, 60, 192, 221, 248, 60, 192, 13, 154, 148, 69, 127, 244, 100, 174, ++ 216, 70, 67, 70, 79, 240, 0, 12, 205, 248, 60, 144, 176, 70, 169, 70, ++ 221, 248, 84, 176, 87, 70, 101, 70, 30, 70, 42, 224, 157, 66, 17, 210, ++ 16, 154, 74, 177, 22, 155, 32, 104, 14, 51, 0, 147, 14, 153, 151, 232, ++ 12, 0, 91, 240, 5, 218, 3, 224, 14, 152, 121, 104, 247, 247, 206, 254, ++ 14, 56, 0, 224, 0, 32, 17, 155, 57, 104, 12, 154, 2, 147, 22, 155, 141, ++ 232, 65, 0, 5, 146, 6, 147, 42, 70, 13, 155, 32, 70, 205, 248, 12, 176, ++ 205, 248, 16, 128, 254, 247, 113, 251, 87, 248, 4, 59, 1, 53, 158, 98, ++ 13, 155, 157, 66, 3, 241, 255, 51, 207, 209, 90, 248, 35, 48, 77, 70, ++ 171, 66, 221, 248, 60, 144, 176, 70, 4, 208, 14, 152, 41, 70, 1, 34, ++ 249, 247, 225, 254, 13, 154, 20, 155, 26, 96, 216, 248, 88, 49, 65, ++ 70, 1, 51, 200, 248, 88, 49, 241, 233, 96, 35, 18, 235, 9, 2, 67, 241, ++ 0, 3, 193, 233, 0, 35, 32, 70, 65, 70, 74, 70, 12, 155, 252, 247, 78, ++ 248, 0, 32, 34, 224, 20, 154, 0, 35, 19, 96, 41, 70, 14, 152, 247, 247, ++ 131, 254, 12, 154, 1, 70, 32, 70, 252, 247, 118, 248, 35, 104, 147, ++ 248, 66, 32, 66, 177, 147, 248, 67, 48, 43, 177, 212, 248, 52, 1, 65, ++ 70, 42, 70, 12, 240, 127, 254, 14, 152, 41, 70, 1, 34, 249, 247, 170, ++ 254, 79, 240, 255, 48, 1, 224, 111, 240, 15, 0, 25, 176, 189, 232, 240, ++ 143, 112, 181, 4, 70, 64, 33, 32, 70, 27, 240, 202, 219, 22, 34, 20, ++ 33, 5, 70, 32, 105, 51, 240, 252, 220, 79, 244, 209, 113, 6, 70, 32, ++ 70, 27, 240, 190, 219, 79, 244, 210, 113, 32, 70, 27, 240, 185, 219, ++ 64, 33, 32, 70, 27, 240, 181, 219, 133, 66, 228, 209, 7, 45, 226, 208, ++ 212, 248, 64, 55, 79, 244, 122, 114, 246, 26, 182, 251, 242, 246, 2, ++ 251, 6, 51, 212, 248, 56, 7, 64, 246, 184, 49, 48, 24, 196, 248, 56, ++ 7, 164, 248, 60, 23, 196, 248, 64, 55, 112, 189, 45, 233, 240, 65, 197, ++ 104, 12, 70, 213, 248, 84, 49, 134, 176, 75, 96, 213, 248, 88, 49, 6, ++ 70, 11, 96, 181, 248, 144, 52, 0, 105, 139, 129, 181, 248, 216, 52, ++ 79, 240, 0, 8, 203, 129, 184, 33, 52, 240, 174, 218, 64, 33, 164, 248, ++ 186, 0, 48, 105, 52, 240, 168, 218, 213, 248, 32, 17, 164, 248, 188, ++ 0, 161, 96, 181, 248, 144, 38, 167, 137, 146, 178, 0, 151, 3, 146, 231, ++ 137, 162, 131, 180, 248, 186, 32, 51, 104, 1, 151, 4, 146, 5, 144, 2, ++ 145, 217, 104, 98, 104, 35, 104, 99, 72, 242, 243, 12, 242, 181, 248, ++ 192, 23, 137, 178, 33, 130, 181, 248, 208, 39, 146, 178, 98, 130, 181, ++ 248, 210, 55, 155, 178, 163, 130, 181, 248, 72, 4, 164, 248, 210, 0, ++ 181, 248, 74, 4, 164, 248, 212, 0, 181, 248, 76, 4, 164, 248, 214, 0, ++ 86, 72, 242, 243, 241, 241, 181, 248, 0, 53, 48, 70, 227, 131, 181, ++ 248, 14, 53, 35, 131, 181, 248, 238, 51, 99, 131, 181, 248, 26, 52, ++ 164, 248, 172, 48, 181, 248, 28, 52, 181, 248, 2, 116, 164, 248, 174, ++ 48, 191, 178, 121, 0, 27, 240, 49, 219, 121, 28, 164, 248, 166, 0, 73, ++ 0, 48, 70, 27, 240, 42, 219, 249, 28, 164, 248, 168, 0, 73, 0, 48, 70, ++ 27, 240, 35, 219, 0, 33, 164, 248, 170, 0, 128, 34, 4, 241, 34, 0, 242, ++ 243, 157, 241, 8, 235, 71, 1, 48, 70, 27, 240, 22, 219, 4, 235, 8, 3, ++ 8, 241, 2, 8, 184, 241, 128, 15, 88, 132, 242, 209, 56, 72, 242, 243, ++ 179, 241, 160, 70, 34, 70, 0, 35, 67, 244, 0, 49, 197, 248, 96, 17, ++ 213, 248, 96, 17, 213, 248, 100, 17, 1, 51, 81, 132, 2, 50, 64, 43, ++ 242, 209, 48, 72, 242, 243, 160, 241, 0, 39, 57, 70, 48, 70, 54, 240, ++ 179, 222, 1, 55, 64, 47, 168, 248, 34, 0, 8, 241, 2, 8, 244, 209, 41, ++ 72, 242, 243, 145, 241, 35, 104, 83, 177, 40, 72, 242, 243, 140, 241, ++ 0, 35, 226, 24, 213, 248, 88, 17, 2, 51, 128, 43, 81, 132, 248, 209, ++ 35, 72, 242, 243, 129, 241, 0, 35, 226, 24, 213, 248, 84, 17, 2, 51, ++ 128, 43, 81, 132, 248, 209, 181, 248, 152, 54, 164, 248, 190, 48, 243, ++ 104, 211, 248, 40, 33, 196, 248, 192, 32, 211, 248, 44, 33, 211, 248, ++ 80, 49, 196, 248, 196, 32, 196, 248, 200, 48, 51, 105, 211, 248, 240, ++ 48, 196, 248, 204, 48, 79, 244, 248, 115, 165, 248, 252, 51, 181, 248, ++ 254, 51, 164, 248, 208, 48, 181, 248, 70, 54, 164, 248, 216, 48, 181, ++ 248, 72, 54, 164, 248, 218, 48, 181, 248, 102, 54, 164, 248, 220, 48, ++ 181, 248, 112, 54, 164, 248, 222, 48, 6, 176, 189, 232, 240, 129, 87, ++ 68, 136, 0, 235, 68, 136, 0, 134, 69, 136, 0, 147, 69, 136, 0, 158, ++ 69, 136, 0, 176, 69, 136, 0, 186, 69, 136, 0, 127, 181, 5, 70, 228, ++ 32, 14, 70, 246, 243, 26, 247, 4, 70, 32, 177, 40, 70, 33, 70, 255, ++ 247, 234, 254, 2, 224, 11, 72, 242, 243, 42, 241, 0, 34, 228, 35, 3, ++ 147, 40, 70, 41, 33, 19, 70, 0, 150, 1, 146, 2, 148, 25, 240, 133, 220, ++ 44, 177, 32, 70, 4, 176, 189, 232, 112, 64, 249, 247, 15, 189, 4, 176, ++ 112, 189, 9, 70, 136, 0, 112, 181, 13, 70, 0, 33, 4, 70, 27, 240, 102, ++ 218, 2, 33, 6, 70, 32, 70, 27, 240, 97, 218, 49, 70, 2, 70, 25, 72, ++ 242, 243, 4, 241, 34, 104, 212, 248, 36, 24, 147, 106, 89, 26, 3, 41, ++ 20, 216, 209, 104, 20, 72, 42, 70, 242, 243, 248, 240, 2, 45, 20, 191, ++ 41, 70, 3, 33, 32, 70, 255, 247, 183, 255, 16, 72, 242, 243, 238, 240, ++ 35, 104, 147, 248, 156, 48, 1, 43, 15, 209, 10, 224, 210, 248, 136, ++ 48, 209, 104, 211, 248, 20, 50, 42, 70, 1, 51, 9, 72, 242, 243, 222, ++ 240, 3, 224, 32, 70, 0, 33, 11, 240, 31, 253, 35, 104, 155, 106, 196, ++ 248, 36, 56, 112, 189, 190, 69, 136, 0, 60, 51, 4, 0, 39, 70, 136, 0, ++ 117, 51, 4, 0, 45, 233, 240, 67, 3, 106, 143, 176, 27, 104, 4, 70, 1, ++ 43, 20, 191, 79, 240, 10, 9, 79, 240, 16, 9, 136, 70, 14, 240, 77, 219, ++ 2, 169, 39, 240, 49, 249, 212, 248, 116, 52, 2, 168, 153, 120, 39, 240, ++ 43, 248, 212, 248, 108, 18, 32, 70, 24, 240, 7, 220, 255, 35, 1, 144, ++ 0, 34, 2, 168, 0, 147, 1, 70, 19, 70, 39, 240, 188, 249, 0, 37, 58, ++ 224, 14, 170, 83, 25, 19, 248, 44, 124, 32, 70, 7, 240, 127, 7, 57, ++ 70, 27, 240, 210, 216, 12, 171, 6, 70, 57, 70, 0, 147, 32, 70, 66, 70, ++ 79, 244, 0, 115, 19, 240, 10, 222, 57, 70, 0, 34, 67, 70, 32, 70, 19, ++ 240, 190, 219, 157, 248, 49, 32, 157, 248, 48, 48, 18, 2, 210, 24, 72, ++ 68, 135, 178, 6, 241, 10, 1, 32, 70, 146, 178, 31, 240, 94, 216, 157, ++ 248, 51, 32, 157, 248, 50, 48, 18, 2, 210, 24, 32, 70, 6, 241, 12, 1, ++ 146, 178, 31, 240, 82, 216, 32, 70, 6, 241, 16, 1, 58, 70, 31, 240, ++ 76, 216, 1, 53, 2, 155, 157, 66, 193, 211, 15, 176, 189, 232, 240, 131, ++ 240, 181, 141, 176, 4, 70, 14, 240, 238, 218, 2, 169, 39, 240, 210, ++ 248, 212, 248, 116, 52, 2, 168, 153, 120, 38, 240, 204, 255, 212, 248, ++ 108, 18, 32, 70, 24, 240, 168, 219, 255, 35, 1, 144, 0, 34, 2, 168, ++ 0, 147, 1, 70, 19, 70, 39, 240, 93, 249, 0, 37, 22, 224, 12, 170, 83, ++ 25, 19, 248, 36, 108, 39, 106, 6, 240, 127, 6, 48, 70, 38, 240, 169, ++ 255, 56, 24, 144, 248, 120, 32, 26, 185, 157, 248, 12, 32, 2, 240, 127, ++ 2, 32, 70, 49, 70, 18, 240, 41, 216, 1, 53, 2, 155, 157, 66, 229, 211, ++ 13, 176, 240, 189, 144, 248, 45, 50, 1, 43, 2, 209, 182, 33, 0, 34, ++ 4, 224, 144, 248, 44, 34, 182, 33, 66, 234, 3, 34, 30, 240, 253, 159, ++ 16, 181, 131, 121, 4, 104, 91, 177, 251, 247, 123, 252, 227, 104, 2, ++ 70, 163, 248, 18, 6, 150, 33, 32, 70, 189, 232, 16, 64, 30, 240, 237, ++ 159, 16, 189, 112, 181, 4, 70, 14, 70, 30, 240, 123, 216, 79, 240, 128, ++ 97, 5, 70, 0, 40, 20, 191, 79, 240, 128, 98, 0, 34, 32, 70, 25, 240, ++ 74, 220, 53, 177, 114, 1, 4, 212, 32, 105, 189, 232, 112, 64, 19, 240, ++ 130, 187, 112, 189, 112, 181, 4, 104, 6, 70, 99, 126, 0, 43, 51, 208, ++ 26, 240, 241, 221, 212, 248, 108, 50, 2, 70, 158, 66, 34, 209, 51, 124, ++ 3, 179, 212, 248, 28, 55, 0, 40, 20, 191, 79, 240, 0, 117, 0, 37, 26, ++ 104, 130, 177, 219, 104, 115, 177, 246, 243, 183, 241, 212, 248, 28, ++ 55, 218, 104, 130, 26, 178, 245, 122, 127, 1, 217, 1, 34, 26, 114, 212, ++ 248, 28, 55, 0, 34, 218, 96, 32, 70, 79, 240, 0, 113, 42, 70, 25, 240, ++ 18, 220, 4, 224, 212, 248, 72, 1, 49, 70, 75, 240, 26, 220, 32, 70, ++ 189, 232, 112, 64, 10, 240, 7, 156, 112, 189, 208, 248, 4, 49, 16, 181, ++ 25, 114, 3, 104, 4, 70, 27, 106, 24, 105, 28, 240, 32, 254, 32, 70, ++ 189, 232, 16, 64, 255, 247, 182, 191, 16, 181, 144, 248, 114, 50, 4, ++ 70, 59, 177, 3, 104, 147, 248, 79, 48, 155, 7, 7, 209, 3, 106, 91, 125, ++ 35, 185, 212, 248, 12, 34, 50, 240, 127, 66, 4, 208, 79, 244, 128, 17, ++ 32, 70, 10, 70, 2, 224, 32, 70, 79, 244, 128, 17, 25, 240, 219, 219, ++ 32, 70, 90, 33, 63, 34, 189, 232, 16, 64, 30, 240, 102, 159, 45, 233, ++ 240, 67, 133, 176, 15, 70, 12, 153, 4, 70, 22, 70, 152, 70, 20, 240, ++ 66, 253, 57, 70, 5, 70, 50, 70, 32, 70, 67, 70, 251, 247, 27, 252, 176, ++ 241, 0, 9, 192, 242, 218, 129, 35, 104, 91, 126, 59, 185, 32, 105, 66, ++ 240, 237, 217, 24, 177, 160, 104, 251, 247, 178, 248, 192, 225, 70, ++ 177, 184, 241, 3, 15, 5, 217, 2, 168, 49, 70, 4, 34, 240, 247, 181, ++ 251, 1, 224, 0, 35, 2, 147, 163, 47, 226, 104, 33, 208, 9, 220, 28, ++ 47, 5, 220, 27, 47, 28, 218, 187, 30, 1, 43, 18, 216, 24, 224, 52, 47, ++ 14, 224, 64, 242, 11, 19, 159, 66, 18, 208, 3, 220, 214, 47, 15, 208, ++ 251, 47, 5, 224, 183, 245, 139, 127, 10, 208, 64, 242, 27, 19, 159, ++ 66, 6, 208, 0, 46, 0, 240, 154, 129, 184, 241, 0, 15, 64, 243, 150, ++ 129, 63, 47, 0, 240, 178, 128, 14, 220, 22, 47, 69, 208, 5, 220, 20, ++ 47, 34, 208, 21, 47, 64, 240, 141, 129, 48, 224, 61, 47, 97, 208, 62, ++ 47, 64, 240, 135, 129, 104, 224, 127, 47, 0, 240, 1, 129, 6, 220, 64, ++ 47, 0, 240, 184, 128, 113, 47, 64, 240, 124, 129, 219, 224, 64, 242, ++ 29, 19, 159, 66, 0, 240, 88, 129, 183, 245, 162, 127, 0, 240, 32, 129, ++ 183, 245, 134, 127, 64, 240, 110, 129, 43, 225, 171, 121, 2, 154, 19, ++ 177, 0, 42, 0, 240, 83, 129, 0, 50, 212, 248, 56, 51, 24, 191, 1, 34, ++ 131, 248, 52, 32, 32, 70, 41, 70, 20, 240, 136, 252, 21, 224, 181, 249, ++ 84, 48, 3, 43, 0, 240, 210, 128, 181, 249, 86, 32, 26, 185, 0, 51, 24, ++ 191, 1, 35, 202, 224, 2, 35, 200, 224, 2, 155, 1, 43, 7, 216, 165, 248, ++ 84, 48, 0, 35, 165, 248, 86, 48, 79, 240, 0, 9, 70, 225, 34, 104, 146, ++ 248, 102, 113, 127, 177, 3, 43, 246, 209, 165, 248, 84, 48, 181, 248, ++ 90, 48, 212, 248, 80, 8, 67, 240, 32, 3, 165, 248, 90, 48, 41, 70, 42, ++ 240, 151, 249, 232, 231, 1, 35, 165, 248, 84, 112, 165, 248, 86, 48, ++ 204, 224, 212, 248, 116, 52, 147, 248, 28, 81, 21, 177, 147, 248, 69, ++ 49, 155, 224, 147, 249, 8, 48, 78, 224, 35, 104, 29, 126, 0, 45, 0, ++ 240, 7, 129, 212, 248, 116, 36, 2, 153, 146, 248, 28, 49, 147, 177, ++ 203, 178, 130, 248, 70, 49, 212, 248, 116, 36, 0, 37, 17, 114, 212, ++ 248, 116, 36, 146, 248, 172, 16, 1, 34, 141, 232, 36, 0, 42, 70, 32, ++ 105, 19, 240, 109, 250, 237, 224, 32, 70, 73, 178, 45, 240, 157, 252, ++ 176, 241, 0, 9, 192, 242, 252, 128, 212, 248, 116, 52, 2, 154, 32, 70, ++ 26, 114, 29, 240, 158, 223, 32, 70, 45, 240, 160, 252, 32, 70, 212, ++ 248, 160, 20, 18, 240, 2, 222, 32, 70, 23, 240, 73, 223, 232, 224, 212, ++ 248, 116, 52, 147, 248, 28, 81, 21, 177, 147, 248, 172, 48, 87, 224, ++ 34, 104, 23, 126, 15, 185, 219, 121, 122, 224, 35, 106, 13, 241, 15, ++ 1, 24, 105, 28, 240, 221, 251, 24, 177, 157, 248, 15, 48, 51, 96, 186, ++ 224, 212, 248, 116, 52, 219, 121, 51, 96, 166, 224, 2, 155, 90, 28, ++ 4, 42, 0, 242, 179, 128, 1, 51, 1, 209, 3, 35, 2, 147, 212, 248, 116, ++ 52, 2, 153, 147, 248, 28, 33, 114, 177, 201, 178, 131, 248, 173, 16, ++ 212, 248, 116, 52, 0, 34, 147, 248, 69, 49, 0, 146, 1, 146, 32, 105, ++ 1, 34, 19, 240, 23, 250, 4, 224, 35, 106, 201, 178, 24, 105, 28, 240, ++ 182, 251, 212, 248, 116, 52, 2, 154, 218, 113, 89, 231, 35, 104, 27, ++ 126, 0, 43, 0, 240, 142, 128, 212, 248, 116, 52, 147, 248, 28, 17, 17, ++ 177, 147, 248, 175, 48, 13, 224, 178, 248, 232, 51, 77, 246, 173, 98, ++ 155, 178, 147, 66, 0, 240, 129, 128, 79, 246, 255, 114, 147, 66, 124, ++ 208, 195, 243, 64, 19, 51, 96, 60, 231, 184, 241, 12, 15, 37, 209, 55, ++ 121, 23, 240, 1, 7, 119, 209, 32, 70, 41, 70, 50, 29, 43, 240, 50, 250, ++ 4, 70, 136, 177, 3, 105, 155, 121, 67, 177, 1, 33, 58, 70, 88, 240, ++ 191, 221, 32, 70, 88, 240, 122, 221, 48, 96, 12, 224, 213, 248, 0, 33, ++ 153, 70, 18, 105, 50, 96, 102, 224, 175, 121, 0, 47, 88, 209, 213, 248, ++ 0, 49, 27, 105, 51, 96, 185, 70, 93, 224, 184, 241, 4, 15, 82, 209, ++ 175, 121, 0, 47, 79, 209, 242, 231, 171, 121, 0, 43, 78, 209, 212, 248, ++ 188, 6, 3, 104, 235, 88, 0, 43, 72, 208, 27, 121, 0, 43, 69, 208, 41, ++ 70, 50, 70, 46, 240, 156, 250, 32, 224, 5, 245, 104, 112, 6, 48, 49, ++ 70, 68, 34, 240, 247, 46, 250, 171, 121, 155, 185, 212, 248, 188, 6, ++ 3, 104, 234, 88, 43, 122, 50, 177, 18, 121, 34, 177, 41, 70, 50, 70, ++ 91, 240, 226, 223, 10, 224, 212, 248, 192, 6, 41, 70, 50, 70, 65, 240, ++ 65, 216, 3, 224, 104, 105, 49, 70, 49, 240, 126, 221, 129, 70, 34, 224, ++ 184, 245, 10, 127, 29, 211, 48, 70, 161, 106, 79, 244, 10, 114, 240, ++ 247, 9, 250, 206, 230, 111, 240, 6, 9, 21, 224, 169, 70, 19, 224, 111, ++ 240, 28, 9, 16, 224, 111, 240, 3, 9, 13, 224, 79, 240, 255, 57, 10, ++ 224, 111, 240, 29, 9, 7, 224, 111, 240, 1, 9, 4, 224, 111, 240, 22, ++ 9, 1, 224, 111, 240, 13, 9, 72, 70, 5, 176, 189, 232, 240, 131, 45, ++ 233, 243, 65, 8, 156, 7, 70, 14, 70, 21, 70, 152, 70, 0, 148, 255, 247, ++ 3, 254, 16, 241, 47, 15, 12, 208, 16, 241, 23, 15, 11, 209, 56, 70, ++ 49, 70, 42, 70, 67, 70, 8, 148, 2, 176, 189, 232, 240, 65, 13, 240, ++ 145, 153, 111, 240, 22, 0, 2, 176, 189, 232, 240, 129, 45, 233, 240, ++ 71, 12, 70, 136, 176, 145, 178, 129, 70, 20, 240, 214, 251, 7, 70, 0, ++ 40, 64, 208, 162, 7, 62, 213, 208, 248, 84, 67, 0, 44, 58, 208, 37, ++ 70, 0, 38, 0, 35, 4, 235, 6, 8, 7, 147, 152, 248, 2, 48, 19, 179, 164, ++ 33, 113, 67, 96, 24, 97, 24, 1, 241, 176, 10, 213, 248, 152, 16, 170, ++ 105, 107, 105, 213, 248, 136, 192, 213, 248, 132, 224, 28, 48, 17, 177, ++ 4, 235, 198, 1, 4, 49, 4, 145, 7, 169, 2, 144, 5, 145, 72, 70, 57, 70, ++ 141, 232, 0, 80, 205, 248, 12, 160, 24, 240, 155, 253, 136, 185, 136, ++ 248, 2, 0, 32, 112, 1, 54, 164, 53, 2, 46, 209, 209, 251, 104, 72, 70, ++ 0, 147, 121, 33, 6, 35, 7, 241, 188, 2, 255, 247, 151, 255, 1, 35, 99, ++ 112, 8, 176, 189, 232, 240, 135, 19, 181, 208, 248, 44, 70, 10, 64, ++ 36, 234, 1, 1, 17, 67, 3, 104, 192, 248, 44, 22, 27, 126, 107, 177, ++ 3, 35, 0, 147, 33, 177, 4, 33, 79, 244, 0, 66, 0, 35, 3, 224, 79, 244, ++ 0, 66, 4, 33, 19, 70, 25, 240, 109, 217, 28, 189, 19, 181, 4, 70, 255, ++ 247, 161, 252, 32, 70, 16, 240, 181, 223, 212, 248, 116, 52, 0, 32, ++ 147, 248, 173, 16, 1, 34, 147, 248, 70, 49, 1, 144, 32, 105, 0, 146, ++ 19, 240, 199, 248, 32, 105, 2, 176, 189, 232, 16, 64, 65, 240, 132, ++ 159, 195, 105, 115, 181, 1, 241, 12, 5, 3, 235, 69, 5, 174, 136, 0, ++ 235, 65, 1, 178, 26, 170, 128, 177, 248, 90, 18, 176, 248, 88, 34, 4, ++ 70, 10, 67, 160, 248, 88, 34, 179, 249, 28, 16, 179, 249, 30, 32, 138, ++ 24, 179, 249, 32, 16, 179, 249, 34, 48, 82, 24, 218, 66, 43, 209, 144, ++ 248, 116, 50, 219, 6, 1, 213, 53, 240, 127, 222, 148, 248, 116, 50, ++ 25, 7, 2, 213, 32, 70, 14, 240, 236, 253, 148, 248, 116, 50, 154, 6, ++ 13, 213, 212, 248, 116, 52, 147, 248, 80, 48, 67, 177, 32, 70, 44, 240, ++ 66, 253, 148, 248, 116, 50, 35, 240, 32, 3, 132, 248, 116, 50, 148, ++ 248, 116, 50, 91, 6, 8, 213, 32, 70, 45, 240, 67, 250, 148, 248, 116, ++ 50, 35, 240, 64, 3, 132, 248, 116, 50, 35, 104, 147, 248, 47, 48, 115, ++ 177, 148, 248, 117, 50, 91, 177, 227, 105, 179, 249, 36, 48, 59, 185, ++ 132, 248, 117, 50, 32, 70, 1, 33, 64, 34, 0, 147, 25, 240, 244, 216, ++ 212, 248, 168, 4, 8, 179, 208, 248, 248, 48, 155, 104, 6, 43, 28, 209, ++ 195, 104, 219, 104, 91, 137, 195, 185, 227, 105, 179, 249, 28, 16, 179, ++ 249, 30, 32, 138, 24, 179, 249, 32, 16, 179, 249, 34, 48, 82, 24, 218, ++ 66, 11, 209, 212, 248, 208, 36, 212, 248, 204, 52, 2, 50, 83, 248, 34, ++ 16, 2, 176, 189, 232, 112, 64, 15, 240, 47, 189, 2, 176, 112, 189, 45, ++ 233, 240, 65, 6, 104, 4, 70, 138, 176, 33, 70, 214, 248, 72, 1, 74, ++ 240, 65, 223, 2, 173, 7, 70, 0, 33, 32, 34, 40, 70, 241, 243, 50, 244, ++ 48, 70, 2, 33, 28, 34, 79, 244, 128, 115, 4, 241, 188, 8, 0, 149, 19, ++ 240, 200, 217, 72, 35, 173, 248, 14, 48, 65, 70, 0, 35, 6, 34, 13, 241, ++ 18, 0, 173, 248, 16, 48, 240, 247, 156, 248, 4, 241, 194, 1, 6, 34, ++ 6, 168, 240, 247, 150, 248, 65, 70, 6, 34, 13, 241, 30, 0, 240, 247, ++ 144, 248, 7, 241, 52, 1, 48, 70, 73, 1, 32, 34, 43, 70, 30, 240, 20, ++ 220, 10, 176, 189, 232, 240, 129, 0, 105, 18, 240, 194, 190, 45, 233, ++ 240, 65, 134, 176, 0, 147, 11, 124, 0, 39, 4, 70, 1, 146, 12, 158, 221, ++ 248, 52, 128, 2, 151, 3, 151, 197, 104, 43, 185, 209, 248, 244, 48, ++ 31, 142, 0, 55, 24, 191, 1, 39, 212, 248, 72, 1, 75, 240, 243, 216, ++ 157, 248, 64, 48, 163, 177, 32, 70, 5, 169, 4, 170, 255, 247, 220, 255, ++ 4, 155, 2, 168, 2, 147, 5, 155, 3, 169, 3, 147, 50, 70, 67, 70, 99, ++ 240, 189, 223, 1, 168, 105, 70, 2, 154, 3, 155, 99, 240, 159, 223, 79, ++ 240, 128, 81, 32, 70, 10, 70, 25, 240, 65, 216, 15, 153, 0, 155, 1, ++ 154, 71, 234, 129, 23, 14, 153, 197, 248, 128, 49, 5, 168, 197, 248, ++ 132, 33, 197, 248, 136, 113, 197, 248, 140, 17, 5, 146, 4, 147, 4, 169, ++ 2, 154, 3, 155, 99, 240, 155, 223, 67, 70, 5, 168, 4, 169, 50, 70, 99, ++ 240, 149, 223, 5, 153, 4, 154, 212, 248, 72, 1, 2, 145, 3, 146, 75, ++ 240, 35, 218, 32, 70, 79, 240, 128, 81, 0, 34, 25, 240, 23, 216, 212, ++ 248, 72, 1, 75, 240, 151, 216, 6, 176, 189, 232, 240, 129, 208, 248, ++ 96, 1, 1, 240, 1, 1, 43, 240, 74, 185, 16, 181, 4, 70, 245, 243, 152, ++ 245, 212, 248, 40, 53, 196, 248, 44, 5, 1, 51, 196, 248, 40, 53, 16, ++ 189, 16, 181, 4, 70, 245, 243, 140, 245, 212, 248, 44, 53, 66, 242, ++ 16, 114, 195, 26, 147, 66, 4, 217, 0, 35, 196, 248, 40, 53, 196, 248, ++ 44, 53, 16, 189, 0, 35, 55, 181, 4, 70, 29, 70, 226, 24, 210, 248, 152, ++ 34, 4, 51, 0, 42, 24, 191, 1, 37, 16, 43, 246, 209, 212, 248, 16, 53, ++ 3, 185, 69, 177, 0, 35, 0, 41, 164, 248, 36, 53, 12, 191, 13, 70, 111, ++ 240, 25, 5, 1, 224, 164, 248, 36, 21, 35, 104, 27, 126, 187, 177, 32, ++ 70, 29, 240, 143, 220, 32, 70, 124, 33, 180, 248, 36, 37, 30, 240, 87, ++ 219, 180, 248, 36, 53, 32, 34, 3, 33, 32, 70, 0, 43, 20, 191, 19, 70, ++ 0, 35, 0, 145, 24, 240, 205, 223, 32, 70, 23, 240, 48, 220, 40, 70, ++ 62, 189, 55, 181, 3, 104, 4, 70, 91, 126, 0, 43, 64, 240, 33, 129, 0, ++ 105, 65, 240, 222, 221, 0, 40, 64, 240, 27, 129, 35, 104, 147, 248, ++ 32, 48, 51, 185, 32, 105, 18, 240, 178, 254, 35, 104, 1, 34, 131, 248, ++ 32, 32, 32, 105, 18, 240, 109, 253, 32, 70, 54, 240, 50, 216, 212, 248, ++ 116, 52, 3, 34, 147, 248, 81, 48, 0, 146, 128, 34, 0, 43, 20, 191, 19, ++ 70, 0, 35, 32, 70, 4, 33, 24, 240, 155, 223, 35, 104, 219, 110, 227, ++ 185, 32, 105, 51, 240, 229, 223, 9, 48, 23, 209, 34, 104, 211, 110, ++ 19, 240, 2, 5, 18, 209, 67, 240, 2, 3, 211, 102, 212, 248, 104, 50, ++ 89, 89, 65, 177, 139, 121, 51, 185, 75, 121, 35, 177, 11, 124, 19, 177, ++ 32, 70, 53, 240, 98, 217, 4, 53, 32, 45, 239, 209, 35, 104, 219, 110, ++ 27, 177, 32, 70, 13, 240, 213, 220, 209, 224, 32, 105, 51, 240, 97, ++ 221, 32, 105, 144, 249, 52, 17, 77, 28, 3, 209, 1, 33, 51, 240, 87, ++ 221, 1, 224, 51, 240, 172, 220, 1, 35, 99, 118, 32, 70, 26, 240, 77, ++ 218, 35, 104, 32, 70, 89, 107, 3, 35, 0, 147, 33, 177, 79, 244, 128, ++ 114, 0, 33, 19, 70, 2, 224, 79, 244, 128, 114, 11, 70, 24, 240, 81, ++ 223, 160, 104, 6, 240, 172, 223, 35, 104, 1, 34, 26, 118, 148, 248, ++ 211, 49, 115, 177, 32, 70, 29, 240, 245, 219, 212, 248, 56, 51, 32, ++ 70, 89, 142, 28, 240, 193, 216, 0, 35, 132, 248, 211, 49, 32, 70, 23, ++ 240, 159, 219, 212, 248, 44, 38, 3, 33, 32, 70, 255, 247, 172, 253, ++ 32, 70, 10, 240, 40, 223, 180, 248, 36, 21, 32, 70, 255, 247, 42, 255, ++ 32, 105, 51, 240, 100, 223, 3, 35, 32, 34, 0, 147, 32, 70, 19, 70, 1, ++ 33, 24, 240, 32, 223, 35, 104, 147, 248, 47, 48, 27, 177, 212, 248, ++ 8, 5, 39, 240, 78, 221, 35, 104, 147, 248, 49, 48, 147, 177, 0, 37, ++ 212, 248, 104, 50, 89, 89, 81, 177, 139, 121, 67, 185, 75, 121, 51, ++ 177, 209, 248, 204, 48, 216, 7, 2, 213, 32, 70, 47, 240, 86, 216, 4, ++ 53, 32, 45, 237, 209, 32, 70, 17, 240, 192, 217, 32, 70, 88, 240, 219, ++ 222, 1, 37, 79, 244, 122, 114, 1, 35, 212, 248, 236, 17, 160, 104, 6, ++ 240, 166, 222, 212, 248, 160, 1, 132, 248, 46, 82, 46, 240, 168, 254, ++ 32, 70, 45, 240, 158, 248, 212, 248, 116, 52, 32, 70, 147, 249, 18, ++ 16, 12, 240, 32, 218, 32, 70, 30, 240, 39, 216, 32, 70, 30, 240, 16, ++ 216, 32, 70, 41, 70, 30, 240, 200, 216, 227, 104, 132, 248, 72, 86, ++ 211, 248, 36, 33, 41, 70, 66, 240, 64, 2, 195, 248, 36, 33, 35, 106, ++ 0, 34, 24, 105, 28, 240, 35, 254, 32, 70, 132, 248, 116, 86, 53, 240, ++ 104, 223, 126, 33, 32, 105, 51, 240, 222, 218, 66, 30, 146, 178, 79, ++ 246, 253, 115, 154, 66, 7, 216, 16, 250, 5, 243, 64, 25, 168, 64, 164, ++ 248, 64, 56, 164, 248, 66, 8, 180, 248, 64, 24, 33, 177, 32, 70, 180, ++ 248, 92, 39, 30, 240, 40, 218, 180, 248, 66, 24, 73, 177, 32, 70, 180, ++ 248, 68, 40, 30, 240, 32, 218, 0, 32, 3, 224, 111, 240, 8, 0, 0, 224, ++ 8, 70, 62, 189, 83, 28, 3, 208, 1, 35, 19, 250, 2, 242, 0, 224, 255, ++ 34, 209, 248, 204, 0, 16, 64, 194, 235, 0, 12, 220, 241, 0, 0, 64, 235, ++ 12, 0, 112, 71, 209, 248, 204, 48, 26, 66, 12, 191, 0, 32, 1, 32, 112, ++ 71, 112, 181, 92, 28, 2, 208, 1, 36, 156, 64, 0, 224, 255, 36, 209, ++ 248, 204, 80, 4, 234, 5, 6, 26, 177, 166, 66, 15, 208, 44, 67, 2, 224, ++ 102, 177, 37, 234, 4, 4, 193, 248, 204, 64, 209, 248, 204, 64, 52, 240, ++ 255, 5, 3, 209, 189, 232, 112, 64, 251, 247, 88, 184, 112, 189, 45, ++ 233, 240, 71, 23, 70, 209, 248, 248, 32, 4, 70, 14, 70, 10, 185, 10, ++ 105, 210, 104, 213, 104, 186, 105, 41, 29, 18, 244, 128, 111, 34, 104, ++ 32, 70, 210, 105, 183, 248, 14, 144, 20, 191, 210, 248, 52, 128, 210, ++ 248, 48, 128, 58, 70, 251, 247, 52, 253, 168, 185, 1, 34, 96, 104, 57, ++ 70, 248, 247, 8, 254, 35, 104, 211, 248, 136, 48, 26, 106, 1, 50, 26, ++ 98, 51, 105, 27, 177, 219, 104, 26, 106, 1, 50, 26, 98, 214, 248, 92, ++ 49, 1, 51, 198, 248, 92, 49, 35, 104, 90, 107, 18, 177, 154, 109, 18, ++ 7, 8, 213, 107, 137, 67, 69, 25, 219, 32, 70, 41, 70, 1, 34, 79, 240, ++ 255, 51, 15, 224, 147, 248, 83, 48, 131, 177, 9, 74, 9, 240, 7, 3, 210, ++ 92, 12, 33, 1, 251, 2, 82, 146, 138, 66, 69, 6, 219, 32, 70, 41, 70, ++ 1, 34, 189, 232, 240, 71, 255, 247, 139, 191, 189, 232, 240, 135, 72, ++ 194, 135, 0, 45, 233, 240, 65, 209, 248, 204, 64, 6, 70, 13, 70, 36, ++ 240, 255, 7, 42, 177, 35, 67, 193, 248, 204, 48, 239, 185, 1, 34, 6, ++ 224, 36, 234, 3, 4, 159, 66, 193, 248, 204, 64, 21, 209, 44, 185, 79, ++ 240, 255, 51, 189, 232, 240, 65, 250, 247, 225, 191, 7, 36, 1, 34, 162, ++ 64, 213, 248, 204, 48, 26, 64, 4, 209, 48, 70, 41, 70, 35, 70, 250, ++ 247, 213, 255, 20, 241, 255, 52, 241, 210, 189, 232, 240, 129, 209, ++ 248, 204, 48, 16, 181, 12, 70, 59, 177, 79, 240, 255, 51, 0, 34, 250, ++ 247, 198, 255, 0, 35, 196, 248, 204, 48, 16, 189, 56, 181, 5, 70, 208, ++ 248, 120, 66, 4, 224, 33, 70, 40, 70, 255, 247, 233, 255, 36, 104, 0, ++ 44, 248, 209, 56, 189, 121, 177, 114, 177, 72, 106, 11, 106, 195, 24, ++ 203, 97, 8, 109, 203, 108, 195, 24, 72, 109, 27, 24, 139, 100, 16, 70, ++ 20, 49, 72, 34, 239, 247, 167, 189, 112, 71, 45, 233, 240, 71, 0, 38, ++ 142, 176, 5, 70, 138, 70, 144, 70, 15, 70, 52, 70, 30, 224, 249, 7, ++ 26, 213, 107, 105, 83, 248, 38, 144, 185, 241, 0, 15, 12, 209, 19, 224, ++ 184, 241, 1, 15, 4, 209, 104, 104, 66, 70, 248, 247, 92, 253, 3, 224, ++ 4, 177, 36, 136, 204, 130, 12, 70, 74, 75, 1, 33, 72, 70, 219, 107, ++ 152, 71, 1, 70, 0, 40, 235, 209, 1, 54, 127, 8, 0, 47, 222, 209, 213, ++ 248, 180, 117, 7, 241, 4, 9, 82, 224, 66, 75, 226, 138, 27, 104, 40, ++ 70, 83, 248, 34, 128, 0, 35, 33, 70, 1, 170, 227, 130, 252, 247, 77, ++ 248, 40, 70, 33, 70, 1, 170, 13, 240, 249, 219, 16, 177, 227, 127, 218, ++ 6, 5, 213, 104, 104, 33, 70, 1, 34, 248, 247, 44, 253, 54, 224, 227, ++ 137, 53, 74, 3, 240, 7, 3, 209, 92, 163, 105, 67, 244, 128, 115, 35, ++ 244, 0, 66, 162, 97, 12, 34, 2, 251, 1, 114, 144, 138, 210, 138, 144, ++ 66, 32, 211, 91, 5, 166, 106, 5, 213, 213, 248, 52, 1, 49, 70, 34, 70, ++ 11, 240, 224, 252, 1, 34, 104, 104, 33, 70, 248, 247, 11, 253, 43, 104, ++ 211, 248, 136, 48, 26, 106, 1, 50, 26, 98, 46, 177, 51, 105, 27, 177, ++ 219, 104, 26, 106, 1, 50, 26, 98, 214, 248, 92, 49, 1, 51, 198, 248, ++ 92, 49, 3, 224, 72, 70, 34, 70, 242, 243, 150, 241, 68, 70, 0, 44, 170, ++ 209, 86, 70, 18, 224, 240, 7, 14, 213, 107, 105, 83, 248, 36, 48, 83, ++ 177, 235, 105, 3, 235, 68, 3, 154, 139, 19, 178, 0, 43, 3, 221, 40, ++ 70, 33, 70, 255, 247, 198, 251, 1, 52, 118, 8, 0, 46, 234, 209, 213, ++ 248, 128, 65, 197, 248, 180, 101, 133, 248, 177, 101, 100, 177, 40, ++ 70, 19, 240, 107, 254, 1, 70, 32, 70, 83, 240, 46, 221, 129, 7, 3, 213, ++ 213, 248, 128, 1, 83, 240, 44, 221, 14, 176, 189, 232, 240, 135, 0, ++ 191, 208, 134, 135, 0, 32, 7, 0, 0, 72, 194, 135, 0, 56, 181, 144, 248, ++ 177, 53, 203, 185, 26, 70, 63, 36, 20, 240, 1, 15, 5, 208, 197, 105, ++ 5, 235, 67, 5, 181, 249, 28, 80, 82, 25, 1, 51, 100, 8, 6, 43, 242, ++ 209, 1, 35, 82, 177, 192, 248, 180, 21, 128, 248, 177, 53, 63, 33, 0, ++ 105, 0, 34, 18, 240, 36, 254, 0, 32, 56, 189, 24, 70, 56, 189, 144, ++ 248, 176, 53, 131, 185, 3, 104, 147, 248, 60, 48, 43, 177, 208, 248, ++ 172, 37, 208, 248, 164, 53, 154, 66, 6, 208, 208, 248, 172, 21, 1, 35, ++ 128, 248, 176, 53, 10, 240, 78, 153, 112, 71, 247, 181, 144, 248, 214, ++ 49, 4, 70, 0, 43, 64, 240, 175, 128, 3, 104, 30, 126, 0, 46, 0, 240, ++ 171, 128, 23, 240, 241, 218, 1, 35, 132, 248, 214, 49, 32, 105, 19, ++ 240, 248, 251, 6, 70, 32, 105, 65, 240, 199, 218, 5, 70, 16, 177, 0, ++ 39, 61, 70, 66, 224, 212, 248, 104, 1, 4, 33, 87, 240, 149, 216, 212, ++ 248, 104, 50, 95, 89, 71, 179, 187, 121, 59, 177, 59, 121, 35, 179, ++ 32, 70, 57, 70, 52, 240, 183, 222, 54, 24, 30, 224, 56, 70, 44, 240, ++ 202, 220, 123, 121, 54, 24, 195, 177, 35, 104, 32, 70, 147, 248, 49, ++ 48, 57, 70, 91, 177, 215, 248, 204, 48, 223, 7, 7, 213, 52, 240, 163, ++ 222, 54, 24, 212, 248, 92, 1, 61, 240, 92, 216, 6, 224, 52, 240, 89, ++ 222, 54, 24, 79, 244, 122, 96, 245, 243, 84, 243, 4, 53, 32, 45, 207, ++ 209, 198, 231, 212, 248, 168, 50, 219, 25, 27, 107, 43, 177, 212, 248, ++ 172, 34, 82, 248, 37, 0, 152, 71, 54, 24, 1, 53, 56, 55, 35, 104, 147, ++ 248, 184, 48, 157, 66, 237, 219, 148, 248, 46, 50, 75, 177, 160, 104, ++ 212, 248, 236, 17, 6, 240, 44, 220, 0, 185, 1, 54, 0, 35, 132, 248, ++ 46, 50, 32, 70, 251, 247, 122, 248, 35, 104, 0, 33, 25, 118, 35, 106, ++ 79, 240, 255, 50, 134, 25, 24, 105, 27, 240, 215, 249, 32, 70, 12, 240, ++ 155, 221, 32, 70, 255, 247, 107, 254, 212, 248, 120, 82, 7, 224, 0, ++ 35, 41, 29, 96, 104, 1, 34, 0, 147, 241, 243, 160, 247, 45, 104, 0, ++ 45, 245, 209, 212, 248, 124, 2, 16, 177, 62, 240, 54, 222, 54, 24, 32, ++ 105, 50, 240, 124, 220, 0, 37, 134, 25, 212, 248, 104, 50, 89, 89, 97, ++ 177, 139, 121, 83, 185, 35, 104, 147, 248, 49, 48, 27, 177, 209, 248, ++ 204, 48, 216, 7, 2, 212, 32, 70, 69, 240, 39, 217, 4, 53, 32, 45, 235, ++ 209, 0, 35, 99, 118, 132, 248, 214, 49, 0, 224, 0, 38, 48, 70, 254, ++ 189, 45, 233, 247, 67, 11, 158, 23, 70, 179, 137, 72, 246, 142, 2, 79, ++ 234, 19, 40, 72, 234, 3, 40, 31, 250, 136, 248, 194, 235, 8, 12, 220, ++ 241, 0, 8, 72, 235, 12, 8, 5, 70, 12, 70, 184, 241, 0, 15, 13, 208, ++ 97, 177, 145, 248, 80, 51, 75, 177, 57, 70, 6, 34, 0, 35, 250, 247, ++ 249, 253, 24, 177, 40, 70, 33, 70, 53, 240, 180, 219, 148, 248, 6, 144, ++ 185, 241, 0, 15, 20, 209, 32, 70, 12, 153, 81, 240, 249, 216, 212, 248, ++ 4, 49, 147, 248, 72, 48, 91, 177, 57, 70, 104, 104, 246, 247, 86, 251, ++ 1, 33, 3, 70, 74, 70, 32, 70, 205, 248, 0, 144, 81, 240, 84, 217, 184, ++ 241, 0, 15, 51, 208, 213, 248, 188, 54, 27, 104, 224, 88, 0, 40, 46, ++ 208, 0, 104, 96, 179, 104, 104, 57, 70, 50, 70, 18, 35, 29, 240, 211, ++ 221, 88, 177, 51, 138, 104, 104, 26, 10, 66, 234, 3, 35, 57, 70, 6, ++ 241, 18, 2, 155, 178, 29, 240, 199, 221, 64, 185, 43, 104, 79, 240, ++ 255, 48, 211, 248, 136, 48, 90, 110, 1, 50, 90, 102, 16, 224, 10, 155, ++ 213, 248, 188, 6, 27, 136, 33, 70, 50, 70, 195, 243, 128, 51, 45, 240, ++ 35, 252, 0, 40, 20, 191, 79, 240, 255, 48, 0, 32, 0, 224, 64, 70, 189, ++ 232, 254, 131, 68, 242, 33, 51, 152, 66, 82, 208, 68, 242, 19, 51, 152, ++ 66, 78, 208, 68, 242, 26, 51, 152, 66, 74, 208, 68, 242, 42, 51, 152, ++ 66, 70, 208, 68, 242, 22, 51, 152, 66, 66, 208, 68, 242, 29, 51, 152, ++ 66, 62, 208, 68, 242, 45, 51, 152, 66, 58, 208, 68, 242, 82, 51, 152, ++ 66, 54, 208, 68, 242, 90, 51, 152, 66, 50, 208, 68, 242, 72, 51, 152, ++ 66, 46, 208, 68, 242, 51, 51, 152, 66, 42, 208, 68, 242, 162, 51, 152, ++ 66, 38, 208, 68, 242, 176, 51, 152, 66, 34, 208, 68, 242, 173, 51, 152, ++ 66, 30, 208, 68, 242, 229, 51, 152, 66, 26, 208, 68, 242, 179, 51, 152, ++ 66, 22, 208, 68, 242, 165, 51, 152, 66, 18, 208, 68, 242, 185, 51, 152, ++ 66, 14, 208, 68, 242, 194, 51, 152, 66, 10, 208, 68, 242, 79, 51, 152, ++ 66, 8, 208, 68, 242, 188, 51, 195, 26, 88, 66, 64, 235, 3, 0, 112, 71, ++ 1, 32, 112, 71, 1, 32, 112, 71, 45, 233, 240, 71, 144, 248, 116, 50, ++ 162, 176, 219, 6, 4, 70, 14, 70, 0, 241, 183, 128, 144, 248, 177, 53, ++ 0, 43, 64, 240, 178, 128, 208, 248, 164, 53, 153, 66, 64, 240, 173, ++ 128, 144, 248, 32, 49, 0, 43, 64, 240, 168, 128, 1, 35, 128, 248, 32, ++ 49, 208, 248, 4, 160, 1, 241, 4, 9, 176, 248, 88, 82, 139, 224, 151, ++ 106, 57, 105, 209, 248, 204, 48, 152, 3, 27, 213, 209, 248, 148, 51, ++ 91, 7, 2, 213, 147, 105, 152, 7, 20, 212, 32, 70, 31, 155, 53, 240, ++ 61, 216, 0, 40, 120, 208, 2, 154, 147, 105, 91, 5, 4, 213, 212, 248, ++ 52, 1, 57, 70, 11, 240, 139, 250, 80, 70, 2, 153, 1, 34, 248, 247, 179, ++ 250, 105, 224, 147, 105, 88, 5, 7, 213, 212, 248, 52, 1, 49, 70, 2, ++ 170, 31, 155, 10, 240, 248, 249, 69, 224, 19, 240, 4, 3, 7, 208, 1, ++ 35, 17, 70, 32, 70, 33, 170, 32, 147, 24, 240, 179, 222, 6, 224, 0, ++ 147, 32, 70, 2, 169, 32, 170, 33, 171, 254, 247, 83, 248, 0, 40, 49, ++ 209, 33, 153, 3, 41, 9, 216, 35, 104, 147, 248, 156, 48, 1, 43, 4, 209, ++ 212, 248, 52, 1, 3, 34, 9, 240, 228, 250, 1, 175, 79, 240, 0, 8, 28, ++ 224, 121, 104, 18, 170, 32, 70, 251, 247, 144, 253, 189, 248, 76, 32, ++ 17, 4, 7, 213, 121, 104, 0, 35, 0, 147, 212, 248, 96, 1, 137, 106, 42, ++ 240, 163, 251, 1, 35, 0, 147, 1, 147, 32, 70, 33, 153, 87, 248, 4, 47, ++ 18, 171, 1, 240, 81, 252, 8, 241, 1, 8, 32, 155, 152, 69, 223, 219, ++ 24, 224, 16, 48, 22, 209, 72, 70, 31, 153, 2, 154, 241, 243, 252, 246, ++ 148, 248, 116, 50, 75, 177, 180, 248, 88, 50, 1, 34, 29, 64, 31, 155, ++ 18, 250, 3, 243, 37, 234, 3, 5, 4, 224, 180, 248, 88, 50, 157, 66, 11, ++ 208, 29, 70, 77, 177, 31, 170, 72, 70, 41, 70, 241, 243, 26, 246, 2, ++ 70, 2, 144, 0, 40, 127, 244, 105, 175, 32, 70, 49, 70, 18, 240, 99, ++ 218, 0, 35, 132, 248, 32, 49, 34, 176, 189, 232, 240, 135, 0, 0, 45, ++ 233, 243, 65, 12, 70, 25, 105, 144, 70, 5, 70, 30, 70, 8, 154, 0, 41, ++ 72, 208, 88, 104, 44, 75, 231, 137, 3, 64, 7, 240, 7, 7, 35, 177, 43, ++ 104, 91, 107, 11, 177, 40, 75, 218, 93, 166, 98, 145, 248, 68, 48, 1, ++ 146, 132, 248, 33, 48, 9, 155, 0, 34, 0, 147, 33, 70, 19, 70, 40, 70, ++ 12, 240, 34, 220, 50, 105, 33, 75, 145, 121, 25, 185, 210, 248, 148, ++ 35, 81, 7, 17, 213, 150, 248, 231, 32, 114, 177, 162, 105, 146, 7, 11, ++ 212, 218, 93, 13, 42, 1, 220, 1, 50, 0, 224, 15, 34, 40, 70, 33, 70, ++ 13, 240, 77, 254, 168, 177, 33, 224, 219, 93, 8, 241, 4, 1, 13, 43, ++ 1, 220, 1, 51, 0, 224, 15, 35, 40, 70, 34, 70, 251, 247, 14, 249, 56, ++ 177, 157, 248, 40, 48, 139, 185, 40, 70, 65, 70, 255, 247, 233, 254, ++ 12, 224, 104, 104, 1, 34, 33, 70, 248, 247, 218, 249, 43, 104, 0, 32, ++ 211, 248, 136, 48, 26, 106, 1, 50, 26, 98, 0, 224, 1, 32, 189, 232, ++ 252, 129, 0, 191, 64, 0, 1, 0, 138, 182, 135, 0, 72, 194, 135, 0, 45, ++ 233, 240, 79, 181, 176, 221, 248, 252, 128, 13, 147, 184, 248, 10, 112, ++ 13, 70, 173, 248, 88, 112, 17, 70, 191, 178, 145, 70, 18, 151, 4, 70, ++ 13, 240, 162, 223, 185, 248, 22, 112, 192, 178, 26, 151, 185, 248, 4, ++ 112, 16, 144, 13, 153, 72, 70, 27, 151, 37, 240, 186, 253, 65, 159, ++ 79, 240, 0, 10, 135, 248, 0, 160, 8, 241, 12, 7, 21, 151, 64, 159, 15, ++ 144, 12, 63, 24, 151, 16, 159, 221, 248, 96, 176, 12, 151, 21, 158, ++ 205, 248, 68, 160, 205, 248, 36, 160, 205, 248, 100, 160, 205, 248, ++ 40, 160, 205, 248, 56, 160, 205, 248, 44, 160, 205, 248, 80, 160, 205, ++ 248, 76, 160, 205, 248, 32, 160, 205, 248, 28, 160, 47, 70, 79, 224, ++ 51, 120, 149, 28, 45, 43, 33, 208, 7, 216, 1, 43, 19, 208, 67, 211, ++ 3, 43, 18, 208, 42, 43, 64, 209, 20, 224, 61, 43, 29, 208, 5, 216, 8, ++ 153, 50, 43, 8, 191, 49, 70, 8, 145, 54, 224, 74, 43, 27, 208, 221, ++ 43, 50, 209, 31, 224, 7, 150, 47, 224, 178, 120, 79, 240, 1, 10, 12, ++ 146, 42, 224, 179, 28, 19, 147, 20, 146, 38, 224, 32, 70, 49, 70, 42, ++ 70, 66, 240, 18, 223, 10, 144, 31, 224, 32, 70, 49, 70, 42, 70, 66, ++ 240, 225, 222, 14, 144, 24, 224, 32, 70, 49, 70, 42, 70, 65, 240, 82, ++ 223, 25, 144, 17, 224, 3, 42, 15, 217, 176, 28, 4, 34, 143, 73, 239, ++ 247, 94, 249, 17, 155, 0, 40, 8, 191, 43, 70, 17, 147, 9, 155, 8, 191, ++ 51, 70, 9, 147, 0, 224, 11, 150, 118, 25, 197, 235, 11, 11, 187, 241, ++ 1, 15, 3, 221, 114, 120, 83, 28, 91, 69, 168, 219, 61, 70, 9, 159, 63, ++ 177, 10, 159, 47, 185, 32, 70, 9, 153, 17, 154, 66, 240, 144, 222, 10, ++ 144, 0, 45, 119, 209, 18, 159, 187, 7, 64, 241, 214, 131, 11, 155, 0, ++ 43, 0, 240, 210, 131, 32, 70, 153, 28, 90, 120, 19, 240, 55, 251, 49, ++ 144, 0, 40, 0, 240, 201, 131, 3, 124, 0, 43, 64, 240, 197, 131, 3, 122, ++ 0, 43, 0, 240, 193, 131, 208, 248, 244, 48, 88, 142, 241, 243, 43, 247, ++ 12, 159, 135, 66, 64, 240, 184, 131, 49, 158, 32, 70, 49, 70, 11, 240, ++ 42, 221, 0, 40, 69, 208, 48, 70, 73, 70, 13, 154, 67, 70, 17, 240, 0, ++ 220, 0, 40, 61, 208, 64, 153, 62, 155, 214, 248, 240, 112, 3, 241, 16, ++ 2, 1, 145, 32, 70, 73, 70, 1, 35, 205, 248, 0, 128, 2, 151, 25, 240, ++ 17, 222, 0, 40, 46, 209, 59, 142, 35, 177, 35, 104, 147, 248, 73, 49, ++ 0, 43, 42, 208, 33, 106, 212, 248, 116, 52, 80, 49, 0, 34, 7, 241, 56, ++ 0, 155, 120, 37, 240, 96, 252, 64, 159, 48, 70, 73, 70, 13, 154, 67, ++ 70, 0, 151, 16, 240, 172, 254, 0, 35, 0, 147, 1, 147, 50, 124, 32, 70, ++ 215, 26, 122, 66, 66, 235, 7, 2, 2, 146, 3, 147, 4, 147, 49, 70, 125, ++ 34, 6, 241, 188, 3, 17, 240, 240, 221, 1, 39, 2, 224, 11, 149, 3, 224, ++ 0, 39, 11, 151, 0, 224, 11, 147, 78, 179, 53, 70, 1, 224, 0, 39, 11, ++ 151, 26, 159, 62, 153, 23, 244, 64, 79, 12, 191, 79, 240, 0, 11, 79, ++ 240, 1, 11, 1, 241, 10, 7, 32, 70, 41, 70, 58, 70, 91, 70, 42, 240, ++ 144, 248, 6, 70, 0, 187, 43, 124, 0, 43, 64, 240, 76, 131, 32, 70, 41, ++ 70, 58, 70, 91, 70, 42, 240, 55, 249, 6, 70, 0, 40, 0, 240, 66, 131, ++ 32, 70, 49, 70, 87, 240, 102, 223, 13, 224, 148, 248, 114, 50, 0, 43, ++ 0, 240, 56, 131, 62, 159, 32, 70, 7, 241, 10, 1, 49, 170, 87, 240, 145, ++ 223, 6, 70, 16, 177, 115, 104, 216, 7, 32, 212, 8, 159, 39, 177, 120, ++ 120, 185, 28, 25, 240, 124, 221, 88, 185, 7, 159, 103, 177, 185, 28, ++ 120, 120, 25, 240, 117, 221, 16, 241, 0, 11, 24, 191, 79, 240, 1, 11, ++ 4, 224, 79, 240, 1, 11, 1, 224, 221, 248, 28, 176, 102, 177, 187, 241, ++ 0, 15, 7, 209, 115, 104, 67, 240, 1, 3, 115, 96, 4, 224, 79, 240, 0, ++ 11, 1, 224, 79, 240, 1, 11, 205, 177, 171, 121, 219, 185, 43, 122, 3, ++ 179, 213, 248, 244, 48, 91, 142, 7, 147, 3, 244, 96, 83, 163, 245, 192, ++ 82, 83, 66, 67, 235, 2, 3, 7, 152, 8, 147, 241, 243, 94, 246, 12, 159, ++ 193, 27, 72, 66, 64, 235, 1, 0, 9, 144, 13, 224, 8, 149, 7, 149, 9, ++ 149, 9, 224, 0, 39, 8, 151, 7, 151, 9, 151, 4, 224, 254, 20, 4, 0, 8, ++ 147, 7, 147, 9, 147, 180, 248, 114, 50, 0, 43, 127, 208, 35, 106, 91, ++ 125, 195, 177, 12, 159, 212, 248, 108, 4, 14, 47, 140, 191, 79, 244, ++ 64, 66, 0, 34, 71, 244, 128, 81, 18, 159, 17, 67, 7, 240, 32, 3, 211, ++ 241, 1, 3, 56, 191, 0, 35, 1, 147, 19, 154, 20, 155, 205, 248, 0, 176, ++ 81, 240, 155, 223, 35, 104, 147, 248, 79, 48, 155, 7, 18, 208, 12, 159, ++ 212, 248, 112, 4, 14, 47, 140, 191, 79, 244, 64, 67, 0, 35, 71, 244, ++ 128, 81, 8, 159, 25, 67, 14, 154, 10, 155, 205, 248, 0, 176, 1, 151, ++ 82, 240, 181, 220, 148, 248, 114, 50, 0, 43, 71, 208, 0, 33, 12, 34, ++ 46, 168, 240, 243, 142, 243, 148, 75, 29, 175, 46, 147, 148, 75, 56, ++ 70, 0, 33, 36, 34, 47, 147, 48, 148, 240, 243, 131, 243, 189, 248, 88, ++ 16, 13, 241, 152, 12, 221, 248, 48, 224, 173, 248, 122, 16, 96, 70, ++ 0, 33, 32, 34, 205, 248, 24, 192, 29, 150, 141, 248, 120, 224, 141, ++ 248, 124, 176, 240, 243, 111, 243, 45, 151, 13, 159, 35, 104, 39, 151, ++ 62, 159, 147, 248, 79, 48, 40, 151, 16, 159, 3, 240, 3, 3, 141, 248, ++ 168, 112, 15, 159, 221, 248, 24, 192, 43, 151, 21, 159, 141, 248, 176, ++ 48, 1, 151, 24, 159, 212, 248, 124, 6, 0, 33, 144, 34, 46, 171, 205, ++ 248, 152, 144, 205, 248, 164, 128, 205, 248, 0, 192, 2, 151, 64, 240, ++ 195, 223, 148, 248, 112, 50, 0, 43, 0, 240, 86, 130, 9, 159, 0, 47, ++ 0, 240, 82, 130, 35, 104, 147, 248, 79, 32, 151, 7, 0, 240, 138, 128, ++ 14, 159, 0, 47, 0, 240, 134, 128, 10, 159, 0, 47, 0, 240, 130, 128, ++ 147, 248, 173, 48, 51, 177, 212, 248, 124, 1, 41, 70, 61, 240, 186, ++ 222, 0, 40, 119, 209, 14, 159, 32, 70, 122, 120, 57, 120, 23, 240, 94, ++ 216, 7, 159, 3, 70, 23, 244, 64, 79, 12, 191, 0, 34, 1, 34, 10, 50, ++ 84, 248, 34, 32, 17, 146, 213, 248, 244, 32, 98, 177, 210, 136, 18, ++ 240, 32, 2, 8, 208, 10, 159, 58, 120, 18, 240, 2, 2, 3, 208, 14, 159, ++ 122, 120, 194, 243, 128, 2, 9, 146, 186, 241, 0, 15, 11, 209, 16, 159, ++ 218, 178, 186, 66, 7, 208, 24, 70, 6, 147, 241, 243, 119, 245, 184, ++ 66, 6, 155, 64, 240, 9, 130, 213, 248, 244, 32, 0, 42, 45, 208, 24, ++ 70, 6, 147, 241, 243, 107, 245, 7, 70, 7, 152, 241, 243, 103, 245, 135, ++ 66, 6, 155, 34, 209, 213, 248, 244, 32, 82, 142, 154, 66, 50, 208, 0, ++ 46, 48, 208, 42, 122, 0, 42, 45, 208, 32, 70, 17, 153, 42, 70, 23, 240, ++ 3, 223, 255, 40, 7, 70, 0, 240, 231, 129, 221, 248, 36, 224, 32, 70, ++ 41, 70, 58, 70, 95, 250, 142, 243, 250, 247, 25, 248, 208, 177, 32, ++ 70, 41, 70, 58, 70, 29, 240, 48, 216, 20, 224, 186, 241, 0, 15, 17, ++ 208, 24, 70, 6, 147, 241, 243, 58, 245, 12, 159, 6, 155, 184, 66, 0, ++ 240, 203, 129, 3, 244, 96, 83, 179, 245, 128, 95, 3, 208, 179, 245, ++ 192, 95, 64, 240, 194, 129, 65, 159, 1, 35, 59, 112, 35, 104, 213, 248, ++ 4, 161, 147, 248, 79, 48, 152, 7, 22, 208, 174, 177, 10, 159, 55, 177, ++ 25, 159, 32, 70, 0, 151, 49, 70, 10, 154, 14, 155, 10, 224, 43, 124, ++ 83, 185, 115, 104, 217, 3, 7, 213, 10, 159, 32, 70, 0, 151, 49, 70, ++ 58, 70, 59, 70, 11, 240, 3, 216, 43, 124, 0, 43, 0, 240, 191, 128, 62, ++ 159, 13, 155, 32, 70, 41, 70, 74, 70, 141, 232, 128, 1, 9, 240, 202, ++ 221, 35, 104, 147, 248, 60, 48, 67, 177, 13, 159, 32, 70, 41, 70, 50, ++ 70, 75, 70, 141, 232, 128, 1, 72, 240, 139, 222, 154, 248, 9, 48, 27, ++ 177, 40, 70, 0, 33, 27, 240, 70, 219, 154, 248, 13, 48, 219, 177, 212, ++ 248, 28, 55, 26, 104, 10, 177, 31, 122, 55, 177, 40, 70, 0, 33, 16, ++ 224, 37, 206, 129, 0, 41, 206, 129, 0, 244, 243, 102, 244, 212, 248, ++ 28, 55, 26, 105, 130, 26, 178, 245, 122, 127, 5, 217, 1, 34, 26, 114, ++ 40, 70, 57, 70, 27, 240, 255, 221, 212, 248, 28, 55, 27, 104, 0, 43, ++ 72, 208, 27, 159, 1, 35, 199, 243, 192, 18, 15, 153, 32, 70, 17, 240, ++ 146, 223, 152, 248, 2, 48, 152, 248, 1, 16, 27, 4, 67, 234, 1, 35, 152, ++ 248, 0, 16, 184, 248, 8, 112, 11, 67, 152, 248, 3, 16, 2, 70, 67, 234, ++ 1, 99, 50, 147, 152, 248, 6, 48, 152, 248, 5, 16, 27, 4, 67, 234, 1, ++ 35, 152, 248, 4, 16, 52, 168, 11, 67, 152, 248, 7, 16, 0, 47, 8, 191, ++ 100, 39, 67, 234, 1, 99, 64, 248, 4, 61, 50, 169, 245, 247, 221, 255, ++ 56, 70, 50, 154, 51, 153, 98, 240, 98, 221, 212, 248, 28, 55, 191, 2, ++ 26, 104, 186, 26, 144, 66, 11, 217, 90, 104, 186, 26, 144, 66, 7, 210, ++ 63, 26, 95, 96, 212, 248, 72, 1, 41, 70, 1, 34, 74, 240, 165, 217, 35, ++ 106, 91, 125, 43, 177, 18, 159, 32, 70, 199, 243, 128, 33, 28, 240, ++ 56, 219, 212, 248, 92, 1, 7, 153, 60, 240, 107, 218, 128, 177, 212, ++ 248, 92, 1, 7, 153, 59, 240, 85, 221, 35, 106, 24, 105, 26, 240, 121, ++ 252, 7, 159, 184, 66, 4, 209, 0, 33, 32, 70, 10, 70, 23, 240, 19, 223, ++ 74, 70, 13, 155, 212, 248, 72, 1, 41, 70, 205, 248, 0, 128, 73, 240, ++ 254, 220, 213, 248, 204, 48, 154, 4, 88, 213, 212, 248, 80, 1, 41, 70, ++ 66, 70, 64, 155, 25, 240, 254, 252, 80, 224, 187, 241, 0, 15, 3, 209, ++ 18, 159, 199, 243, 64, 19, 0, 224, 1, 35, 219, 178, 62, 177, 114, 104, ++ 19, 177, 66, 240, 4, 2, 1, 224, 34, 240, 4, 2, 114, 96, 34, 106, 82, ++ 125, 74, 177, 1, 147, 212, 248, 108, 4, 41, 70, 19, 154, 20, 155, 205, ++ 248, 0, 176, 81, 240, 243, 221, 35, 104, 147, 248, 79, 48, 155, 7, 10, ++ 208, 8, 159, 212, 248, 112, 4, 41, 70, 14, 154, 10, 155, 205, 248, 0, ++ 176, 1, 151, 82, 240, 21, 219, 11, 159, 255, 185, 212, 248, 108, 50, ++ 157, 66, 12, 208, 40, 70, 73, 70, 13, 154, 67, 70, 17, 240, 243, 216, ++ 40, 177, 40, 70, 73, 70, 13, 154, 67, 70, 28, 240, 152, 219, 148, 248, ++ 114, 50, 91, 185, 212, 248, 108, 50, 157, 66, 7, 209, 40, 70, 249, 247, ++ 26, 254, 24, 177, 32, 70, 65, 70, 15, 240, 127, 216, 0, 33, 12, 34, ++ 46, 168, 240, 243, 120, 241, 69, 75, 29, 175, 46, 147, 69, 75, 0, 33, ++ 36, 34, 56, 70, 47, 147, 48, 148, 240, 243, 109, 241, 189, 248, 88, ++ 16, 221, 248, 48, 224, 29, 150, 38, 174, 32, 34, 173, 248, 122, 16, ++ 48, 70, 0, 33, 141, 248, 120, 224, 141, 248, 124, 176, 240, 243, 92, ++ 241, 45, 151, 13, 159, 35, 104, 39, 151, 62, 159, 147, 248, 79, 48, ++ 40, 151, 16, 159, 3, 240, 3, 3, 141, 248, 168, 112, 15, 159, 141, 248, ++ 176, 48, 43, 151, 21, 159, 128, 34, 1, 151, 24, 159, 46, 171, 212, 248, ++ 124, 6, 41, 70, 205, 248, 152, 144, 205, 248, 164, 128, 0, 150, 2, 151, ++ 64, 240, 179, 221, 154, 248, 2, 48, 1, 59, 219, 178, 1, 43, 19, 216, ++ 171, 121, 139, 185, 42, 124, 122, 177, 213, 248, 4, 33, 146, 248, 108, ++ 32, 2, 42, 9, 209, 79, 240, 255, 50, 1, 146, 32, 70, 41, 70, 5, 241, ++ 188, 2, 0, 147, 26, 240, 157, 219, 15, 159, 23, 240, 64, 127, 1, 209, ++ 56, 70, 2, 224, 15, 152, 37, 240, 98, 248, 0, 240, 127, 0, 2, 40, 10, ++ 208, 4, 40, 8, 208, 11, 40, 6, 208, 160, 241, 22, 12, 220, 241, 0, 0, ++ 64, 235, 12, 0, 0, 224, 1, 32, 1, 144, 185, 248, 4, 0, 185, 248, 6, ++ 16, 128, 11, 2, 144, 1, 32, 0, 34, 3, 144, 153, 249, 28, 48, 32, 70, ++ 9, 10, 0, 146, 4, 149, 45, 240, 252, 249, 4, 224, 0, 39, 11, 151, 194, ++ 228, 0, 38, 209, 228, 53, 176, 189, 232, 240, 143, 0, 191, 37, 206, ++ 129, 0, 41, 206, 129, 0, 45, 233, 240, 79, 145, 249, 21, 48, 159, 176, ++ 0, 37, 4, 70, 137, 70, 28, 149, 29, 149, 123, 177, 15, 240, 173, 219, ++ 96, 177, 35, 104, 185, 248, 28, 32, 211, 248, 136, 48, 171, 70, 211, ++ 248, 200, 17, 138, 24, 195, 248, 200, 33, 0, 240, 79, 188, 185, 248, ++ 2, 48, 96, 104, 3, 240, 7, 3, 5, 43, 9, 144, 8, 147, 0, 242, 67, 132, ++ 99, 105, 8, 153, 83, 248, 33, 0, 0, 40, 0, 240, 60, 132, 153, 248, 24, ++ 32, 2, 42, 7, 146, 0, 240, 51, 132, 112, 75, 2, 33, 219, 107, 152, 71, ++ 128, 70, 56, 185, 32, 70, 8, 153, 8, 240, 94, 221, 128, 70, 0, 40, 0, ++ 240, 40, 132, 32, 70, 65, 70, 15, 170, 251, 247, 6, 248, 35, 104, 147, ++ 248, 156, 48, 1, 43, 6, 208, 185, 248, 2, 32, 189, 248, 64, 48, 154, ++ 66, 64, 240, 29, 132, 184, 248, 14, 48, 97, 78, 3, 240, 7, 3, 243, 92, ++ 96, 77, 65, 70, 235, 92, 15, 170, 10, 147, 22, 155, 11, 147, 24, 136, ++ 28, 171, 12, 144, 0, 147, 32, 70, 29, 171, 250, 247, 148, 248, 35, 104, ++ 147, 248, 79, 48, 153, 7, 23, 208, 15, 168, 249, 247, 141, 253, 56, ++ 177, 35, 104, 211, 248, 136, 48, 211, 248, 164, 34, 1, 50, 195, 248, ++ 164, 34, 15, 168, 249, 247, 147, 253, 56, 177, 35, 104, 211, 248, 136, ++ 48, 211, 248, 172, 34, 1, 50, 195, 248, 172, 34, 216, 248, 24, 48, 90, ++ 5, 108, 213, 15, 173, 32, 70, 41, 70, 250, 247, 184, 255, 8, 187, 75, ++ 70, 212, 248, 52, 1, 28, 153, 66, 70, 0, 149, 9, 240, 65, 252, 35, 104, ++ 147, 248, 229, 48, 0, 43, 89, 208, 28, 153, 0, 41, 86, 208, 189, 248, ++ 72, 0, 185, 248, 2, 32, 0, 144, 189, 248, 70, 48, 212, 248, 228, 6, ++ 87, 240, 2, 221, 212, 248, 96, 1, 28, 153, 10, 154, 41, 240, 136, 255, ++ 68, 224, 29, 153, 161, 177, 7, 154, 7, 42, 17, 209, 209, 248, 204, 48, ++ 155, 3, 13, 212, 212, 248, 80, 1, 78, 240, 204, 221, 40, 185, 212, 248, ++ 80, 1, 29, 153, 78, 240, 40, 222, 16, 177, 29, 152, 52, 240, 116, 218, ++ 15, 171, 0, 147, 212, 248, 52, 1, 75, 70, 28, 153, 66, 70, 9, 240, 9, ++ 252, 35, 104, 131, 70, 147, 248, 229, 48, 147, 177, 28, 153, 129, 177, ++ 189, 248, 72, 0, 185, 248, 2, 32, 0, 144, 189, 248, 70, 48, 212, 248, ++ 228, 6, 87, 240, 201, 220, 212, 248, 96, 1, 28, 153, 10, 154, 41, 240, ++ 79, 255, 29, 152, 0, 40, 0, 240, 127, 131, 131, 121, 0, 43, 64, 240, ++ 123, 131, 9, 241, 8, 1, 80, 240, 161, 217, 117, 227, 32, 70, 15, 169, ++ 216, 248, 52, 112, 249, 247, 45, 253, 185, 248, 28, 96, 255, 14, 7, ++ 240, 1, 7, 13, 144, 185, 248, 26, 80, 230, 177, 35, 104, 211, 248, 136, ++ 48, 218, 104, 1, 58, 146, 25, 218, 96, 28, 155, 155, 177, 103, 177, ++ 211, 248, 60, 34, 1, 58, 146, 25, 195, 248, 60, 34, 11, 224, 208, 134, ++ 135, 0, 138, 182, 135, 0, 84, 194, 135, 0, 211, 248, 72, 34, 1, 58, ++ 146, 25, 195, 248, 72, 34, 53, 177, 35, 104, 211, 248, 136, 48, 218, ++ 104, 1, 58, 82, 25, 218, 96, 12, 155, 9, 152, 3, 244, 128, 107, 219, ++ 241, 1, 11, 65, 70, 56, 191, 79, 240, 0, 11, 245, 247, 198, 251, 216, ++ 248, 24, 48, 153, 249, 25, 32, 195, 243, 192, 106, 0, 42, 121, 208, ++ 35, 104, 211, 248, 136, 48, 211, 248, 168, 33, 1, 50, 195, 248, 168, ++ 33, 211, 248, 200, 33, 1, 58, 146, 25, 195, 248, 200, 33, 28, 155, 43, ++ 177, 26, 105, 26, 177, 210, 104, 209, 107, 1, 49, 209, 99, 1, 46, 5, ++ 221, 212, 248, 124, 84, 1, 61, 173, 25, 196, 248, 124, 84, 187, 241, ++ 0, 15, 66, 208, 34, 104, 210, 248, 136, 32, 210, 248, 216, 17, 1, 49, ++ 194, 248, 216, 17, 43, 177, 26, 105, 26, 177, 210, 104, 81, 107, 1, ++ 49, 81, 99, 212, 248, 124, 36, 114, 177, 34, 104, 210, 248, 136, 32, ++ 210, 248, 180, 17, 1, 49, 194, 248, 180, 17, 43, 177, 27, 105, 27, 177, ++ 219, 104, 218, 106, 1, 50, 218, 98, 212, 248, 124, 52, 1, 43, 15, 217, ++ 35, 104, 211, 248, 136, 48, 211, 248, 184, 33, 1, 50, 195, 248, 184, ++ 33, 28, 155, 43, 177, 27, 105, 27, 177, 219, 104, 26, 107, 1, 50, 26, ++ 99, 28, 155, 91, 177, 47, 177, 211, 248, 56, 34, 1, 50, 195, 248, 56, ++ 34, 4, 224, 211, 248, 68, 34, 1, 50, 195, 248, 68, 34, 28, 155, 19, ++ 177, 34, 104, 146, 106, 154, 98, 29, 155, 0, 43, 0, 240, 230, 129, 154, ++ 121, 0, 42, 64, 240, 208, 130, 29, 124, 0, 45, 0, 240, 205, 130, 211, ++ 248, 252, 48, 21, 70, 154, 113, 199, 226, 19, 244, 130, 83, 63, 208, ++ 35, 104, 211, 248, 136, 48, 211, 248, 168, 33, 1, 50, 195, 248, 168, ++ 33, 28, 155, 43, 177, 26, 105, 26, 177, 210, 104, 209, 107, 1, 49, 209, ++ 99, 187, 241, 0, 15, 28, 208, 34, 104, 210, 248, 136, 32, 210, 248, ++ 216, 17, 1, 49, 194, 248, 216, 17, 155, 177, 26, 105, 0, 42, 0, 240, ++ 155, 130, 210, 104, 81, 107, 1, 49, 81, 99, 149, 226, 211, 248, 56, ++ 34, 1, 50, 195, 248, 56, 34, 4, 224, 211, 248, 68, 34, 1, 50, 195, 248, ++ 68, 34, 28, 154, 0, 42, 0, 240, 164, 129, 29, 155, 0, 43, 0, 240, 165, ++ 129, 157, 121, 0, 45, 64, 240, 165, 129, 35, 104, 155, 106, 147, 98, ++ 161, 225, 7, 152, 3, 40, 0, 240, 161, 129, 4, 40, 8, 209, 34, 104, 210, ++ 248, 136, 32, 210, 248, 16, 18, 1, 49, 194, 248, 16, 18, 149, 225, 7, ++ 153, 5, 41, 35, 209, 35, 104, 90, 107, 211, 248, 140, 16, 58, 177, 184, ++ 248, 14, 32, 140, 72, 2, 240, 7, 2, 130, 92, 139, 72, 130, 92, 20, 50, ++ 1, 235, 194, 1, 74, 104, 211, 248, 136, 48, 1, 50, 74, 96, 211, 248, ++ 160, 34, 180, 248, 36, 85, 1, 50, 195, 248, 160, 34, 0, 45, 0, 240, ++ 121, 129, 32, 70, 254, 247, 39, 251, 0, 37, 115, 225, 7, 153, 1, 41, ++ 31, 209, 29, 155, 139, 177, 155, 121, 123, 177, 28, 155, 107, 177, 26, ++ 125, 208, 7, 3, 212, 147, 248, 36, 48, 153, 7, 8, 213, 32, 70, 65, 70, ++ 74, 70, 91, 70, 13, 240, 159, 249, 82, 224, 7, 159, 0, 224, 1, 39, 32, ++ 70, 9, 241, 20, 1, 15, 240, 98, 217, 0, 37, 46, 70, 170, 70, 94, 225, ++ 7, 154, 6, 42, 0, 240, 72, 129, 7, 42, 69, 209, 29, 153, 0, 41, 236, ++ 208, 209, 248, 204, 48, 154, 0, 232, 213, 155, 3, 13, 212, 212, 248, ++ 80, 1, 78, 240, 35, 220, 40, 185, 212, 248, 80, 1, 29, 153, 78, 240, ++ 127, 220, 16, 177, 29, 152, 52, 240, 203, 216, 28, 153, 0, 41, 213, ++ 208, 29, 155, 155, 121, 91, 177, 145, 248, 36, 48, 159, 7, 7, 213, 139, ++ 104, 94, 6, 4, 213, 1, 34, 32, 70, 19, 70, 39, 240, 89, 219, 216, 248, ++ 24, 48, 93, 5, 68, 191, 67, 244, 128, 115, 200, 248, 24, 48, 216, 248, ++ 24, 48, 35, 244, 0, 67, 200, 248, 24, 48, 29, 155, 211, 248, 204, 48, ++ 152, 3, 179, 213, 32, 70, 28, 153, 66, 70, 23, 240, 107, 220, 7, 70, ++ 0, 40, 0, 240, 9, 129, 170, 231, 185, 248, 6, 32, 50, 177, 34, 104, ++ 210, 248, 136, 32, 145, 107, 1, 49, 145, 99, 245, 224, 25, 155, 27, ++ 120, 217, 7, 60, 213, 126, 177, 35, 104, 211, 248, 136, 48, 211, 248, ++ 168, 33, 1, 50, 195, 248, 168, 33, 28, 155, 43, 177, 27, 105, 27, 177, ++ 219, 104, 218, 107, 1, 50, 218, 99, 187, 241, 0, 15, 0, 240, 233, 128, ++ 35, 104, 211, 248, 136, 48, 211, 248, 216, 33, 1, 50, 195, 248, 216, ++ 33, 28, 155, 43, 177, 27, 105, 27, 177, 219, 104, 90, 107, 1, 50, 90, ++ 99, 0, 46, 0, 240, 216, 128, 35, 104, 28, 157, 211, 248, 136, 48, 211, ++ 248, 172, 33, 1, 50, 195, 248, 172, 33, 0, 45, 0, 240, 158, 129, 45, ++ 105, 0, 45, 0, 240, 154, 129, 235, 104, 154, 107, 1, 50, 154, 99, 147, ++ 225, 29, 155, 0, 43, 67, 208, 154, 121, 0, 42, 64, 209, 27, 124, 0, ++ 43, 61, 208, 11, 152, 3, 124, 218, 7, 57, 213, 62, 177, 35, 104, 211, ++ 248, 136, 48, 211, 248, 168, 33, 1, 50, 195, 248, 168, 33, 187, 241, ++ 0, 15, 0, 240, 167, 128, 35, 104, 211, 248, 136, 48, 211, 248, 216, ++ 33, 1, 50, 195, 248, 216, 33, 28, 155, 43, 177, 27, 105, 27, 177, 219, ++ 104, 90, 107, 1, 50, 90, 99, 0, 46, 0, 240, 150, 128, 35, 104, 28, 157, ++ 211, 248, 136, 48, 211, 248, 172, 33, 1, 50, 195, 248, 172, 33, 0, 45, ++ 0, 240, 92, 129, 43, 105, 0, 43, 0, 240, 82, 129, 219, 104, 154, 107, ++ 1, 50, 154, 99, 76, 225, 0, 191, 138, 182, 135, 0, 84, 194, 135, 0, ++ 13, 154, 180, 248, 90, 52, 26, 177, 157, 66, 3, 218, 180, 248, 92, 52, ++ 158, 66, 74, 219, 35, 104, 211, 248, 136, 48, 211, 248, 200, 81, 173, ++ 25, 195, 248, 200, 81, 187, 241, 0, 15, 104, 208, 211, 248, 176, 33, ++ 212, 248, 116, 20, 1, 50, 195, 248, 176, 33, 145, 248, 29, 49, 155, ++ 177, 32, 70, 1, 245, 130, 113, 45, 240, 16, 248, 212, 248, 116, 52, ++ 1, 34, 131, 248, 40, 33, 212, 248, 116, 52, 160, 104, 211, 248, 48, ++ 17, 211, 248, 36, 33, 0, 35, 5, 240, 195, 217, 28, 155, 131, 177, 47, ++ 177, 211, 248, 64, 34, 1, 50, 195, 248, 64, 34, 20, 225, 211, 248, 76, ++ 34, 1, 50, 195, 248, 76, 34, 14, 225, 219, 104, 154, 106, 1, 50, 154, ++ 98, 0, 38, 2, 35, 141, 232, 72, 0, 32, 70, 29, 153, 20, 34, 25, 155, ++ 2, 150, 3, 150, 4, 150, 1, 37, 16, 240, 242, 222, 42, 224, 35, 104, ++ 0, 37, 211, 248, 136, 48, 46, 70, 218, 105, 1, 39, 1, 50, 218, 97, 192, ++ 230, 29, 70, 236, 224, 1, 38, 21, 70, 55, 70, 146, 70, 26, 224, 1, 38, ++ 29, 70, 55, 70, 6, 224, 0, 37, 1, 38, 55, 70, 177, 230, 29, 70, 30, ++ 70, 1, 39, 154, 70, 13, 224, 46, 70, 1, 39, 10, 224, 5, 70, 6, 70, 130, ++ 70, 6, 224, 93, 70, 209, 224, 53, 70, 207, 224, 1, 37, 94, 70, 47, 70, ++ 180, 248, 36, 53, 67, 177, 212, 248, 40, 53, 43, 177, 7, 155, 5, 43, ++ 2, 208, 32, 70, 254, 247, 163, 249, 186, 241, 0, 15, 78, 208, 28, 155, ++ 0, 43, 75, 208, 15, 168, 249, 247, 53, 250, 157, 248, 70, 48, 130, 70, ++ 3, 240, 3, 3, 2, 59, 219, 178, 1, 43, 4, 216, 32, 70, 15, 169, 250, ++ 247, 208, 252, 0, 224, 255, 32, 8, 153, 3, 41, 10, 216, 89, 74, 83, ++ 92, 4, 235, 67, 3, 179, 248, 58, 34, 19, 9, 3, 240, 15, 3, 18, 11, 3, ++ 224, 180, 248, 94, 52, 180, 248, 96, 36, 0, 146, 0, 34, 3, 146, 189, ++ 248, 68, 32, 1, 144, 194, 243, 0, 50, 4, 146, 212, 248, 96, 1, 28, 153, ++ 74, 70, 205, 248, 8, 160, 41, 240, 133, 250, 35, 104, 147, 248, 229, ++ 48, 147, 177, 28, 153, 129, 177, 189, 248, 72, 0, 185, 248, 2, 32, 0, ++ 144, 189, 248, 70, 48, 212, 248, 228, 6, 87, 240, 161, 217, 212, 248, ++ 96, 1, 28, 153, 10, 154, 41, 240, 39, 252, 32, 70, 8, 153, 1, 34, 254, ++ 247, 12, 248, 221, 248, 116, 160, 186, 241, 0, 15, 23, 208, 9, 241, ++ 20, 1, 32, 70, 28, 240, 254, 217, 1, 70, 80, 70, 28, 240, 170, 218, ++ 12, 152, 0, 240, 252, 3, 8, 43, 1, 208, 136, 43, 7, 209, 187, 241, 0, ++ 15, 4, 208, 29, 152, 9, 241, 8, 1, 79, 240, 99, 222, 28, 153, 193, 177, ++ 11, 125, 219, 7, 21, 212, 29, 155, 155, 177, 154, 121, 138, 185, 26, ++ 124, 122, 177, 26, 122, 106, 177, 211, 248, 204, 32, 144, 4, 9, 212, ++ 211, 248, 252, 48, 91, 121, 43, 185, 32, 70, 74, 70, 51, 70, 0, 149, ++ 46, 240, 2, 218, 127, 177, 9, 241, 20, 1, 32, 70, 28, 240, 202, 217, ++ 65, 70, 2, 70, 212, 248, 120, 4, 79, 240, 28, 216, 9, 152, 65, 70, 1, ++ 34, 247, 247, 219, 248, 187, 241, 0, 15, 9, 208, 79, 240, 0, 11, 196, ++ 248, 124, 180, 4, 224, 79, 240, 0, 11, 1, 224, 79, 240, 1, 11, 88, 70, ++ 31, 176, 189, 232, 240, 143, 9, 152, 65, 70, 1, 34, 247, 247, 197, 248, ++ 243, 231, 0, 47, 127, 244, 103, 173, 107, 229, 213, 248, 120, 49, 1, ++ 51, 197, 248, 120, 49, 0, 37, 1, 38, 55, 70, 47, 231, 211, 248, 92, ++ 33, 1, 50, 195, 248, 92, 33, 27, 105, 0, 43, 127, 244, 232, 174, 234, ++ 230, 0, 191, 84, 194, 135, 0, 247, 181, 5, 70, 8, 70, 12, 70, 209, 248, ++ 252, 96, 209, 248, 244, 112, 16, 240, 206, 220, 43, 104, 147, 248, 173, ++ 48, 43, 177, 213, 248, 92, 1, 121, 142, 59, 240, 235, 220, 40, 185, ++ 213, 248, 92, 1, 121, 142, 59, 240, 81, 221, 32, 177, 213, 248, 92, ++ 1, 121, 142, 59, 240, 183, 221, 40, 70, 21, 240, 200, 222, 179, 107, ++ 9, 43, 5, 216, 79, 240, 79, 82, 154, 64, 1, 213, 2, 35, 0, 224, 1, 35, ++ 148, 248, 117, 35, 122, 177, 1, 43, 13, 209, 212, 248, 204, 32, 144, ++ 4, 9, 212, 212, 248, 248, 32, 81, 104, 2, 41, 4, 209, 146, 104, 18, ++ 177, 132, 248, 118, 51, 13, 224, 148, 248, 155, 19, 0, 147, 40, 70, ++ 25, 177, 0, 33, 4, 245, 104, 114, 1, 224, 4, 241, 216, 2, 35, 70, 252, ++ 247, 62, 251, 0, 34, 1, 35, 134, 248, 137, 48, 40, 70, 33, 70, 19, 70, ++ 0, 146, 68, 240, 175, 222, 32, 70, 3, 176, 189, 232, 240, 64, 68, 240, ++ 19, 158, 45, 233, 240, 79, 6, 70, 137, 176, 79, 240, 0, 8, 214, 248, ++ 104, 50, 83, 248, 8, 80, 0, 45, 0, 240, 51, 129, 171, 121, 0, 43, 64, ++ 240, 47, 129, 43, 122, 0, 43, 0, 240, 43, 129, 213, 248, 108, 35, 43, ++ 124, 213, 248, 252, 64, 213, 248, 244, 176, 7, 146, 0, 43, 0, 240, 218, ++ 128, 5, 241, 188, 7, 41, 70, 58, 70, 48, 70, 41, 240, 30, 248, 129, ++ 70, 243, 243, 219, 245, 212, 248, 220, 48, 195, 26, 179, 245, 72, 127, ++ 4, 211, 1, 35, 196, 248, 220, 0, 6, 147, 1, 224, 0, 34, 6, 146, 227, ++ 106, 59, 177, 148, 248, 60, 48, 35, 177, 6, 155, 19, 177, 35, 108, 1, ++ 51, 35, 100, 148, 248, 92, 48, 179, 177, 185, 241, 0, 15, 19, 208, 51, ++ 104, 154, 106, 217, 248, 44, 48, 211, 26, 10, 43, 12, 217, 99, 109, ++ 43, 185, 187, 249, 42, 48, 19, 241, 50, 15, 184, 191, 99, 101, 99, 109, ++ 19, 177, 40, 70, 13, 240, 169, 249, 161, 121, 0, 41, 72, 208, 187, 248, ++ 46, 160, 212, 248, 0, 144, 149, 248, 117, 195, 79, 244, 122, 115, 79, ++ 234, 138, 42, 213, 248, 4, 33, 186, 251, 243, 250, 180, 248, 152, 0, ++ 3, 251, 9, 249, 188, 241, 0, 15, 2, 208, 169, 245, 122, 121, 1, 224, ++ 79, 234, 89, 9, 79, 244, 250, 115, 3, 251, 1, 161, 129, 69, 40, 191, ++ 129, 70, 185, 235, 65, 15, 27, 216, 19, 122, 75, 177, 83, 120, 59, 185, ++ 56, 70, 245, 247, 48, 248, 24, 185, 40, 70, 1, 33, 26, 240, 29, 223, ++ 148, 248, 200, 48, 99, 185, 148, 248, 228, 48, 75, 185, 176, 104, 212, ++ 248, 196, 16, 79, 234, 74, 2, 4, 240, 160, 223, 1, 35, 132, 248, 200, ++ 48, 163, 121, 79, 244, 122, 114, 83, 67, 75, 69, 2, 210, 0, 35, 132, ++ 248, 138, 48, 163, 121, 5, 43, 5, 217, 148, 248, 137, 48, 19, 185, 48, ++ 70, 9, 240, 107, 223, 148, 248, 6, 160, 186, 241, 0, 15, 24, 209, 148, ++ 248, 137, 48, 171, 177, 5, 241, 216, 9, 73, 70, 6, 34, 132, 248, 137, ++ 160, 56, 70, 237, 247, 188, 255, 73, 70, 6, 34, 88, 70, 237, 247, 183, ++ 255, 48, 70, 1, 33, 58, 70, 43, 70, 205, 248, 0, 160, 252, 247, 96, ++ 250, 162, 121, 35, 104, 154, 66, 15, 217, 148, 248, 137, 48, 99, 185, ++ 48, 70, 41, 70, 43, 240, 62, 217, 56, 177, 213, 248, 248, 48, 91, 104, ++ 27, 185, 48, 70, 41, 70, 255, 247, 193, 254, 99, 106, 27, 177, 6, 154, ++ 10, 177, 1, 59, 99, 98, 163, 106, 11, 177, 1, 59, 163, 98, 214, 248, ++ 168, 52, 83, 185, 214, 248, 104, 49, 11, 177, 155, 121, 43, 185, 212, ++ 248, 204, 16, 17, 177, 40, 70, 45, 240, 11, 219, 43, 124, 235, 185, ++ 162, 121, 35, 104, 154, 66, 25, 217, 148, 248, 137, 144, 185, 241, 0, ++ 15, 20, 209, 48, 70, 41, 70, 10, 240, 109, 248, 1, 39, 48, 70, 41, 70, ++ 15, 34, 75, 70, 141, 232, 128, 2, 205, 248, 8, 144, 205, 248, 12, 144, ++ 205, 248, 16, 144, 16, 240, 115, 220, 132, 248, 137, 112, 7, 154, 19, ++ 104, 115, 185, 163, 121, 34, 104, 147, 66, 10, 216, 50, 104, 146, 248, ++ 49, 32, 34, 177, 213, 248, 248, 32, 82, 104, 3, 42, 1, 208, 1, 51, 163, ++ 113, 148, 248, 80, 48, 131, 177, 224, 108, 35, 70, 0, 34, 9, 224, 179, ++ 248, 104, 16, 33, 177, 1, 57, 137, 178, 163, 248, 104, 16, 33, 185, ++ 1, 50, 10, 51, 130, 66, 243, 219, 6, 224, 8, 241, 4, 8, 184, 241, 32, ++ 15, 127, 244, 192, 174, 3, 224, 0, 35, 132, 248, 80, 48, 244, 231, 9, ++ 176, 189, 232, 240, 143, 45, 233, 243, 65, 4, 70, 13, 70, 208, 248, ++ 0, 128, 208, 248, 4, 97, 16, 240, 255, 222, 163, 121, 0, 43, 64, 240, ++ 138, 128, 35, 124, 35, 185, 212, 248, 148, 51, 89, 7, 64, 241, 131, ++ 128, 133, 185, 51, 127, 0, 43, 116, 208, 32, 70, 41, 70, 26, 240, 72, ++ 216, 111, 224, 161, 121, 49, 185, 35, 124, 35, 177, 35, 122, 19, 177, ++ 32, 70, 79, 240, 52, 220, 41, 70, 32, 70, 253, 247, 244, 250, 32, 70, ++ 24, 240, 175, 216, 1, 70, 32, 70, 26, 240, 145, 219, 216, 248, 0, 48, ++ 27, 126, 0, 43, 96, 208, 35, 122, 0, 43, 93, 208, 32, 70, 23, 240, 52, ++ 218, 40, 185, 216, 248, 0, 48, 147, 248, 61, 48, 0, 43, 83, 208, 182, ++ 122, 35, 122, 0, 46, 20, 191, 130, 38, 2, 38, 75, 177, 39, 124, 71, ++ 177, 4, 241, 188, 0, 244, 247, 26, 255, 7, 28, 24, 191, 1, 39, 0, 224, ++ 1, 39, 212, 248, 148, 51, 90, 7, 2, 213, 0, 45, 8, 191, 1, 39, 152, ++ 248, 176, 53, 216, 248, 128, 1, 0, 43, 24, 191, 1, 39, 32, 177, 33, ++ 70, 81, 240, 249, 222, 195, 7, 20, 212, 159, 185, 216, 248, 104, 49, ++ 4, 241, 188, 2, 35, 177, 155, 121, 19, 177, 47, 28, 24, 191, 1, 39, ++ 7, 35, 0, 147, 255, 178, 64, 70, 33, 70, 0, 35, 1, 151, 14, 240, 33, ++ 219, 24, 185, 32, 70, 49, 70, 8, 240, 204, 219, 41, 70, 32, 70, 24, ++ 240, 168, 216, 32, 70, 41, 70, 2, 176, 189, 232, 240, 65, 15, 240, 27, ++ 158, 0, 35, 134, 248, 108, 48, 115, 96, 216, 248, 0, 48, 27, 126, 0, ++ 43, 134, 209, 142, 231, 2, 176, 189, 232, 240, 129, 2, 240, 79, 3, 112, ++ 181, 13, 109, 12, 70, 11, 101, 2, 244, 192, 97, 177, 245, 128, 111, ++ 6, 70, 3, 209, 37, 101, 111, 240, 1, 0, 112, 189, 2, 244, 96, 97, 11, ++ 67, 180, 248, 90, 16, 35, 101, 17, 244, 16, 79, 28, 191, 67, 244, 0, ++ 99, 35, 101, 35, 109, 2, 244, 128, 114, 26, 67, 163, 121, 34, 101, 91, ++ 185, 212, 248, 4, 49, 32, 70, 25, 122, 255, 247, 60, 255, 35, 122, 27, ++ 185, 32, 70, 1, 33, 16, 240, 63, 222, 51, 104, 24, 126, 208, 177, 32, ++ 109, 69, 64, 21, 240, 8, 0, 14, 209, 112, 189, 214, 248, 128, 50, 83, ++ 248, 37, 48, 51, 177, 27, 105, 35, 177, 48, 70, 41, 70, 34, 70, 22, ++ 240, 226, 248, 1, 53, 0, 224, 0, 37, 51, 104, 211, 248, 188, 48, 157, ++ 66, 235, 219, 0, 32, 112, 189, 45, 233, 247, 67, 14, 70, 145, 106, 21, ++ 70, 10, 105, 4, 70, 31, 70, 144, 121, 219, 105, 157, 248, 40, 128, 157, ++ 249, 44, 144, 27, 136, 232, 185, 232, 127, 64, 7, 26, 212, 3, 240, 12, ++ 0, 128, 16, 1, 40, 4, 209, 27, 9, 19, 240, 10, 15, 11, 208, 16, 224, ++ 2, 40, 8, 209, 88, 6, 6, 213, 210, 248, 4, 33, 18, 120, 1, 42, 7, 209, ++ 27, 7, 5, 213, 32, 70, 42, 70, 1, 35, 0, 150, 11, 240, 178, 217, 171, ++ 105, 152, 5, 11, 213, 107, 106, 32, 70, 57, 70, 1, 34, 59, 96, 250, ++ 247, 85, 249, 32, 70, 41, 70, 58, 70, 26, 240, 33, 221, 4, 46, 12, 191, ++ 186, 136, 79, 246, 255, 114, 184, 241, 0, 15, 7, 208, 227, 105, 6, 241, ++ 12, 1, 3, 235, 65, 3, 153, 136, 73, 68, 153, 128, 79, 246, 255, 115, ++ 154, 66, 3, 208, 32, 105, 168, 33, 49, 240, 199, 223, 99, 105, 41, 70, ++ 83, 248, 38, 0, 10, 75, 66, 70, 155, 106, 152, 71, 0, 40, 11, 218, 184, ++ 241, 0, 15, 8, 208, 227, 105, 12, 54, 3, 235, 70, 6, 179, 136, 201, ++ 235, 3, 9, 166, 248, 4, 144, 189, 232, 254, 131, 0, 191, 208, 134, 135, ++ 0, 2, 41, 248, 181, 4, 70, 14, 70, 21, 70, 210, 248, 4, 113, 54, 216, ++ 58, 120, 203, 178, 154, 66, 53, 208, 59, 112, 3, 104, 27, 126, 75, 177, ++ 40, 70, 79, 240, 83, 219, 213, 248, 4, 49, 219, 139, 19, 177, 40, 70, ++ 79, 240, 166, 218, 123, 127, 11, 177, 118, 177, 19, 224, 2, 46, 11, ++ 209, 171, 121, 75, 185, 43, 124, 27, 185, 213, 248, 148, 51, 91, 7, ++ 3, 213, 40, 70, 35, 240, 246, 248, 5, 224, 49, 28, 40, 70, 24, 191, ++ 1, 33, 255, 247, 117, 254, 40, 70, 23, 240, 79, 223, 1, 70, 40, 70, ++ 249, 247, 216, 250, 32, 70, 57, 120, 9, 240, 46, 253, 0, 32, 248, 189, ++ 79, 240, 255, 48, 248, 189, 0, 32, 248, 189, 112, 181, 3, 104, 0, 38, ++ 128, 248, 35, 98, 147, 248, 63, 48, 4, 70, 179, 177, 212, 248, 104, ++ 50, 157, 89, 125, 177, 169, 121, 105, 185, 43, 122, 91, 177, 43, 121, ++ 75, 177, 40, 70, 255, 247, 77, 254, 40, 70, 1, 33, 26, 240, 166, 220, ++ 1, 35, 132, 248, 228, 53, 4, 54, 32, 46, 232, 209, 32, 70, 26, 240, ++ 187, 222, 227, 105, 128, 34, 152, 106, 0, 33, 239, 243, 233, 240, 1, ++ 33, 212, 248, 120, 4, 24, 240, 122, 252, 32, 105, 49, 240, 63, 218, ++ 212, 248, 120, 4, 0, 33, 24, 240, 114, 252, 32, 105, 0, 33, 48, 240, ++ 246, 220, 212, 248, 52, 1, 8, 240, 22, 254, 0, 35, 196, 248, 124, 52, ++ 112, 189, 45, 233, 240, 79, 207, 176, 92, 155, 137, 70, 144, 70, 93, ++ 153, 0, 34, 72, 146, 73, 146, 7, 147, 5, 70, 221, 248, 96, 161, 221, ++ 248, 100, 177, 90, 156, 91, 159, 17, 240, 170, 254, 208, 248, 4, 33, ++ 208, 248, 252, 16, 8, 146, 185, 249, 6, 32, 6, 70, 0, 42, 9, 145, 7, ++ 155, 28, 218, 24, 240, 1, 15, 185, 248, 4, 16, 185, 248, 8, 32, 8, 208, ++ 3, 147, 73, 0, 0, 151, 1, 148, 2, 151, 40, 105, 1, 49, 35, 70, 7, 224, ++ 3, 147, 205, 248, 0, 176, 1, 148, 2, 151, 40, 105, 73, 0, 83, 70, 16, ++ 240, 52, 255, 129, 70, 0, 240, 57, 189, 187, 241, 3, 15, 13, 217, 4, ++ 34, 72, 168, 81, 70, 237, 247, 11, 253, 187, 241, 7, 15, 5, 217, 73, ++ 168, 10, 241, 4, 1, 4, 34, 237, 247, 2, 253, 184, 241, 163, 15, 221, ++ 248, 32, 145, 0, 240, 101, 131, 64, 216, 184, 241, 88, 15, 0, 240, 145, ++ 128, 30, 216, 184, 241, 57, 15, 0, 240, 86, 129, 12, 216, 184, 241, ++ 5, 15, 0, 240, 196, 130, 184, 241, 56, 15, 0, 240, 20, 129, 184, 241, ++ 4, 15, 64, 240, 255, 132, 171, 226, 184, 241, 78, 15, 0, 240, 143, 130, ++ 184, 241, 79, 15, 0, 240, 142, 130, 184, 241, 61, 15, 64, 240, 242, ++ 132, 2, 226, 184, 241, 147, 15, 0, 240, 205, 130, 12, 216, 184, 241, ++ 92, 15, 0, 240, 177, 128, 184, 241, 93, 15, 0, 240, 182, 128, 184, 241, ++ 89, 15, 64, 240, 224, 132, 118, 224, 184, 241, 161, 15, 0, 240, 88, ++ 131, 0, 242, 37, 131, 184, 241, 160, 15, 64, 240, 213, 132, 68, 227, ++ 64, 242, 19, 35, 152, 69, 0, 240, 207, 131, 33, 216, 64, 242, 211, 19, ++ 152, 69, 0, 240, 19, 129, 13, 216, 64, 242, 17, 19, 152, 69, 0, 240, ++ 187, 131, 184, 245, 233, 127, 0, 240, 212, 128, 184, 245, 136, 127, ++ 64, 240, 187, 132, 174, 227, 184, 245, 241, 127, 0, 240, 71, 131, 64, ++ 242, 18, 35, 152, 69, 0, 240, 199, 131, 184, 245, 235, 127, 64, 240, ++ 173, 132, 218, 226, 184, 245, 10, 127, 0, 240, 61, 132, 15, 216, 64, ++ 242, 35, 35, 152, 69, 0, 240, 219, 131, 64, 242, 39, 35, 152, 69, 0, ++ 240, 9, 132, 64, 242, 34, 35, 152, 69, 64, 240, 152, 132, 255, 227, ++ 64, 242, 43, 35, 152, 69, 0, 240, 171, 131, 5, 216, 64, 242, 42, 35, ++ 152, 69, 64, 240, 140, 132, 192, 227, 184, 245, 11, 127, 0, 240, 116, ++ 132, 64, 242, 45, 35, 152, 69, 64, 240, 130, 132, 0, 240, 100, 188, ++ 43, 106, 77, 170, 24, 105, 76, 169, 3, 50, 25, 240, 225, 250, 129, 70, ++ 0, 40, 64, 240, 129, 132, 157, 248, 55, 49, 157, 248, 48, 33, 0, 43, ++ 20, 191, 79, 240, 0, 67, 0, 35, 19, 67, 35, 96, 0, 240, 116, 188, 43, ++ 106, 24, 105, 26, 240, 78, 253, 35, 240, 175, 252, 181, 248, 72, 20, ++ 104, 104, 1, 244, 96, 81, 161, 245, 192, 84, 97, 66, 65, 235, 4, 1, ++ 35, 240, 131, 249, 4, 70, 0, 40, 0, 240, 67, 132, 34, 70, 213, 248, ++ 92, 1, 181, 248, 72, 20, 18, 240, 27, 254, 127, 33, 32, 70, 35, 240, ++ 95, 250, 43, 106, 79, 250, 137, 241, 79, 234, 217, 114, 24, 105, 35, ++ 70, 25, 240, 75, 252, 33, 70, 129, 70, 104, 104, 35, 240, 116, 249, ++ 0, 240, 67, 188, 182, 248, 90, 48, 32, 43, 64, 240, 34, 132, 79, 244, ++ 128, 35, 0, 240, 30, 188, 179, 121, 3, 187, 48, 70, 23, 240, 189, 221, ++ 189, 248, 32, 49, 4, 70, 166, 248, 90, 48, 213, 248, 192, 6, 49, 70, ++ 62, 240, 67, 217, 48, 70, 23, 240, 176, 221, 132, 66, 4, 208, 8, 155, ++ 48, 70, 25, 122, 255, 247, 204, 252, 214, 248, 8, 49, 211, 248, 220, ++ 64, 68, 185, 48, 70, 44, 240, 61, 221, 161, 70, 8, 224, 51, 121, 35, ++ 185, 166, 248, 90, 144, 79, 240, 0, 9, 1, 224, 111, 240, 22, 9, 72, ++ 155, 179, 245, 128, 47, 2, 209, 32, 33, 166, 248, 90, 16, 43, 104, 147, ++ 248, 102, 49, 0, 43, 0, 240, 1, 132, 213, 248, 80, 8, 49, 70, 39, 240, ++ 74, 250, 250, 227, 79, 240, 255, 51, 74, 147, 12, 224, 187, 241, 4, ++ 15, 64, 242, 247, 131, 4, 34, 74, 168, 81, 70, 237, 247, 200, 251, 154, ++ 248, 4, 32, 221, 42, 22, 209, 56, 70, 246, 247, 91, 251, 5, 70, 0, 40, ++ 0, 240, 225, 131, 41, 70, 58, 70, 74, 155, 48, 70, 51, 240, 25, 220, ++ 41, 70, 129, 70, 58, 70, 32, 70, 237, 247, 177, 251, 40, 70, 246, 247, ++ 75, 251, 210, 227, 49, 70, 40, 70, 50, 240, 109, 223, 1, 70, 0, 40, ++ 0, 240, 179, 131, 66, 120, 2, 50, 151, 66, 192, 242, 202, 131, 32, 70, ++ 237, 247, 157, 251, 166, 227, 79, 240, 0, 9, 13, 47, 141, 248, 55, 145, ++ 141, 248, 48, 145, 64, 243, 189, 131, 35, 123, 221, 43, 47, 208, 64, ++ 242, 211, 19, 152, 69, 43, 209, 33, 29, 74, 168, 4, 34, 4, 241, 12, ++ 8, 237, 247, 133, 251, 79, 240, 8, 10, 76, 70, 25, 224, 10, 241, 6, ++ 10, 87, 69, 192, 242, 166, 131, 152, 248, 1, 48, 154, 68, 87, 69, 192, ++ 242, 160, 131, 76, 171, 0, 147, 77, 171, 66, 70, 3, 51, 40, 70, 49, ++ 70, 51, 240, 17, 216, 152, 248, 1, 48, 129, 70, 6, 51, 152, 68, 1, 52, ++ 74, 155, 156, 66, 117, 218, 185, 241, 0, 15, 223, 208, 133, 227, 16, ++ 47, 64, 243, 135, 131, 56, 70, 246, 247, 244, 250, 128, 70, 0, 40, 0, ++ 240, 122, 131, 33, 70, 58, 70, 237, 247, 82, 251, 8, 241, 4, 9, 167, ++ 241, 4, 10, 72, 70, 81, 70, 74, 170, 75, 171, 97, 240, 186, 218, 4, ++ 30, 80, 219, 227, 28, 187, 66, 79, 218, 157, 248, 55, 49, 43, 185, 74, ++ 155, 0, 43, 2, 221, 1, 35, 141, 248, 55, 49, 157, 248, 48, 49, 43, 185, ++ 75, 155, 0, 43, 2, 221, 1, 35, 141, 248, 48, 49, 64, 70, 146, 73, 238, ++ 243, 57, 247, 40, 185, 48, 70, 73, 70, 82, 70, 51, 240, 101, 219, 9, ++ 224, 64, 70, 142, 73, 238, 243, 46, 247, 56, 185, 48, 70, 73, 70, 82, ++ 70, 51, 240, 102, 219, 129, 70, 80, 177, 1, 224, 111, 240, 1, 9, 51, ++ 124, 27, 187, 25, 241, 30, 15, 8, 191, 79, 240, 0, 9, 29, 224, 111, ++ 240, 3, 3, 27, 27, 255, 24, 24, 208, 33, 29, 64, 70, 65, 68, 58, 70, ++ 238, 243, 96, 246, 16, 47, 16, 221, 64, 70, 123, 73, 238, 243, 10, 247, ++ 0, 40, 169, 208, 64, 70, 121, 73, 238, 243, 4, 247, 0, 40, 163, 208, ++ 3, 224, 161, 70, 1, 224, 111, 240, 13, 9, 64, 70, 246, 247, 139, 250, ++ 185, 241, 0, 15, 64, 240, 16, 131, 51, 121, 0, 43, 0, 240, 12, 131, ++ 157, 248, 55, 49, 27, 177, 40, 70, 49, 70, 16, 240, 9, 217, 157, 248, ++ 48, 49, 0, 43, 0, 240, 0, 131, 40, 70, 49, 70, 1, 34, 16, 240, 71, 217, ++ 249, 226, 164, 34, 11, 168, 33, 70, 237, 247, 207, 250, 11, 155, 26, ++ 31, 1, 42, 6, 216, 213, 248, 100, 6, 49, 70, 11, 170, 23, 240, 54, 255, ++ 206, 226, 3, 43, 0, 242, 210, 130, 157, 248, 200, 16, 17, 240, 1, 1, ++ 64, 240, 218, 130, 12, 159, 55, 185, 40, 70, 49, 70, 11, 170, 66, 240, ++ 128, 223, 185, 70, 215, 226, 70, 168, 8, 34, 76, 145, 238, 243, 45, ++ 246, 44, 155, 51, 177, 46, 155, 189, 248, 188, 32, 70, 147, 173, 248, ++ 28, 33, 70, 171, 150, 248, 80, 35, 90, 179, 182, 248, 90, 32, 42, 185, ++ 178, 110, 1, 50, 2, 209, 50, 109, 210, 7, 34, 212, 214, 248, 84, 115, ++ 58, 120, 242, 177, 151, 248, 1, 144, 185, 241, 0, 15, 23, 209, 50, 168, ++ 244, 247, 200, 250, 4, 28, 24, 191, 1, 36, 70, 154, 7, 235, 196, 3, ++ 90, 96, 164, 34, 2, 251, 4, 112, 189, 248, 28, 17, 20, 48, 25, 129, ++ 11, 169, 237, 247, 123, 250, 63, 25, 1, 35, 187, 112, 156, 226, 0, 34, ++ 58, 112, 40, 154, 4, 147, 0, 146, 39, 154, 76, 171, 1, 146, 13, 170, ++ 2, 146, 50, 170, 3, 146, 5, 147, 40, 70, 49, 70, 12, 154, 11, 155, 21, ++ 240, 108, 254, 129, 70, 0, 40, 64, 240, 134, 130, 76, 153, 0, 41, 0, ++ 240, 130, 130, 138, 121, 11, 155, 154, 66, 0, 240, 125, 130, 32, 70, ++ 6, 49, 4, 34, 237, 247, 82, 250, 118, 226, 181, 248, 74, 52, 87, 226, ++ 31, 250, 137, 249, 169, 245, 128, 114, 146, 178, 64, 246, 42, 3, 154, ++ 66, 0, 242, 91, 130, 165, 248, 74, 148, 0, 36, 33, 70, 40, 70, 74, 70, ++ 1, 52, 9, 240, 115, 216, 6, 44, 247, 209, 66, 226, 182, 249, 84, 48, ++ 3, 43, 6, 208, 182, 249, 86, 32, 42, 185, 0, 51, 24, 191, 1, 35, 54, ++ 226, 3, 35, 52, 226, 2, 35, 50, 226, 185, 241, 1, 15, 3, 216, 166, 248, ++ 84, 144, 0, 34, 20, 224, 43, 104, 147, 248, 102, 49, 99, 177, 185, 241, ++ 3, 15, 9, 209, 3, 35, 166, 248, 84, 48, 182, 248, 90, 48, 67, 240, 32, ++ 3, 166, 248, 90, 48, 27, 226, 0, 33, 166, 248, 84, 16, 1, 34, 166, 248, ++ 86, 32, 20, 226, 41, 49, 136, 0, 31, 96, 136, 0, 43, 104, 40, 70, 211, ++ 248, 136, 112, 26, 240, 76, 219, 215, 248, 156, 32, 215, 248, 192, 49, ++ 240, 104, 211, 24, 199, 248, 156, 48, 215, 248, 160, 32, 215, 248, 212, ++ 49, 0, 36, 211, 24, 199, 248, 160, 48, 215, 248, 164, 32, 215, 248, ++ 196, 49, 199, 248, 180, 66, 211, 24, 199, 248, 164, 48, 199, 248, 220, ++ 65, 199, 248, 216, 65, 199, 248, 212, 65, 199, 248, 88, 65, 199, 248, ++ 208, 65, 199, 248, 204, 65, 188, 100, 60, 100, 199, 248, 200, 65, 199, ++ 248, 196, 65, 199, 248, 192, 65, 199, 248, 216, 64, 199, 248, 76, 67, ++ 199, 248, 188, 65, 199, 248, 184, 65, 199, 248, 180, 65, 252, 97, 60, ++ 97, 199, 248, 176, 65, 199, 248, 172, 65, 199, 248, 168, 65, 124, 96, ++ 0, 40, 63, 244, 167, 172, 20, 48, 33, 70, 72, 34, 238, 243, 56, 245, ++ 228, 224, 43, 104, 211, 248, 136, 112, 107, 126, 19, 177, 40, 70, 26, ++ 240, 251, 218, 0, 33, 56, 70, 79, 244, 84, 114, 238, 243, 41, 245, 240, ++ 104, 10, 35, 79, 244, 84, 113, 59, 128, 121, 128, 32, 177, 20, 48, 0, ++ 33, 72, 34, 238, 243, 29, 245, 0, 35, 35, 96, 187, 225, 149, 249, 32, ++ 50, 160, 225, 9, 241, 1, 3, 1, 43, 3, 217, 185, 241, 1, 15, 64, 240, ++ 166, 129, 43, 106, 24, 105, 25, 240, 195, 252, 64, 7, 64, 241, 162, ++ 129, 72, 155, 149, 248, 32, 34, 89, 28, 82, 178, 2, 208, 1, 50, 7, 209, ++ 1, 224, 1, 50, 4, 208, 42, 104, 18, 126, 0, 42, 64, 240, 140, 129, 133, ++ 248, 32, 50, 127, 225, 181, 248, 197, 50, 195, 243, 64, 18, 3, 240, ++ 64, 3, 0, 43, 20, 191, 2, 35, 0, 35, 19, 67, 114, 225, 185, 241, 3, ++ 15, 0, 243, 124, 129, 43, 106, 24, 105, 25, 240, 153, 252, 66, 7, 64, ++ 241, 120, 129, 40, 70, 72, 153, 9, 240, 212, 220, 43, 106, 24, 105, ++ 25, 240, 142, 252, 95, 225, 79, 240, 0, 8, 196, 248, 0, 128, 149, 248, ++ 188, 114, 205, 248, 24, 129, 1, 47, 21, 208, 3, 211, 2, 47, 64, 240, ++ 82, 129, 55, 224, 70, 174, 0, 150, 213, 248, 92, 1, 33, 70, 79, 244, ++ 128, 82, 1, 35, 58, 240, 20, 219, 0, 150, 213, 248, 92, 1, 33, 70, 79, ++ 244, 128, 82, 33, 224, 70, 174, 0, 150, 213, 248, 92, 1, 33, 70, 79, ++ 244, 128, 82, 59, 70, 58, 240, 3, 219, 0, 150, 213, 248, 92, 1, 33, ++ 70, 79, 244, 192, 82, 59, 70, 58, 240, 250, 218, 0, 150, 213, 248, 92, ++ 1, 33, 70, 79, 244, 128, 82, 67, 70, 58, 240, 241, 218, 0, 150, 213, ++ 248, 92, 1, 33, 70, 79, 244, 192, 82, 67, 70, 58, 240, 232, 218, 193, ++ 70, 51, 225, 70, 174, 0, 150, 213, 248, 92, 1, 33, 70, 1, 35, 79, 244, ++ 128, 82, 58, 240, 220, 218, 0, 150, 213, 248, 92, 1, 33, 70, 0, 35, ++ 79, 244, 128, 82, 58, 240, 211, 218, 0, 150, 213, 248, 92, 1, 33, 70, ++ 79, 244, 192, 82, 0, 35, 58, 240, 202, 218, 251, 224, 8, 154, 211, 137, ++ 247, 224, 8, 155, 48, 70, 163, 248, 14, 144, 1, 33, 23, 240, 231, 218, ++ 240, 224, 31, 250, 137, 242, 43, 104, 165, 248, 92, 39, 147, 248, 32, ++ 48, 0, 43, 0, 240, 254, 128, 149, 248, 94, 71, 0, 44, 64, 240, 226, ++ 128, 40, 70, 181, 248, 64, 24, 27, 240, 90, 220, 161, 70, 245, 224, ++ 181, 248, 92, 55, 214, 224, 185, 245, 0, 79, 4, 219, 79, 246, 255, 115, ++ 153, 69, 64, 240, 228, 128, 43, 104, 165, 248, 68, 152, 211, 248, 216, ++ 0, 249, 243, 26, 244, 0, 40, 63, 244, 165, 171, 181, 248, 66, 24, 0, ++ 41, 0, 240, 211, 128, 40, 70, 181, 248, 68, 40, 27, 240, 57, 220, 186, ++ 224, 181, 248, 68, 56, 182, 224, 185, 241, 2, 15, 0, 242, 200, 128, ++ 185, 241, 0, 15, 23, 208, 150, 248, 155, 51, 0, 43, 64, 240, 172, 128, ++ 40, 70, 102, 73, 1, 34, 21, 240, 222, 221, 129, 70, 0, 40, 64, 240, ++ 190, 128, 72, 155, 49, 70, 134, 248, 155, 51, 213, 248, 188, 6, 43, ++ 240, 83, 252, 255, 247, 120, 187, 134, 248, 155, 147, 40, 70, 92, 73, ++ 74, 70, 21, 240, 201, 221, 214, 248, 156, 3, 0, 40, 0, 240, 141, 128, ++ 246, 247, 29, 248, 198, 248, 156, 147, 135, 224, 150, 248, 155, 51, ++ 131, 224, 214, 248, 156, 3, 32, 177, 246, 247, 18, 248, 0, 35, 198, ++ 248, 156, 51, 72, 168, 33, 70, 4, 34, 237, 247, 109, 248, 72, 155, 0, ++ 43, 0, 240, 139, 128, 100, 43, 1, 221, 100, 35, 72, 147, 72, 155, 6, ++ 37, 93, 67, 4, 53, 40, 70, 245, 247, 248, 255, 198, 248, 156, 3, 0, ++ 40, 125, 208, 42, 70, 33, 70, 237, 247, 86, 248, 214, 248, 156, 51, ++ 72, 154, 26, 96, 91, 224, 93, 153, 52, 170, 40, 70, 253, 247, 148, 250, ++ 52, 155, 1, 33, 163, 96, 53, 155, 33, 128, 35, 97, 54, 155, 0, 33, 163, ++ 97, 55, 155, 176, 34, 35, 98, 56, 155, 98, 128, 163, 98, 57, 155, 225, ++ 96, 35, 99, 58, 155, 97, 97, 163, 99, 59, 155, 225, 97, 35, 100, 60, ++ 155, 97, 98, 163, 100, 61, 155, 225, 98, 35, 101, 62, 155, 97, 99, 225, ++ 99, 97, 100, 225, 100, 97, 101, 163, 101, 63, 155, 0, 34, 35, 102, 64, ++ 155, 225, 101, 163, 102, 65, 155, 97, 102, 35, 103, 66, 155, 225, 102, ++ 163, 103, 67, 155, 97, 103, 196, 248, 128, 48, 68, 155, 225, 103, 196, ++ 248, 136, 48, 69, 155, 196, 248, 132, 16, 196, 248, 144, 48, 0, 35, ++ 196, 248, 140, 16, 196, 248, 148, 16, 196, 233, 38, 35, 196, 233, 40, ++ 35, 196, 233, 42, 35, 30, 224, 25, 241, 0, 9, 9, 155, 24, 191, 79, 240, ++ 1, 9, 131, 248, 228, 144, 3, 224, 9, 153, 145, 248, 228, 48, 35, 96, ++ 79, 240, 0, 9, 23, 224, 111, 240, 29, 9, 20, 224, 111, 240, 7, 9, 17, ++ 224, 111, 240, 4, 9, 14, 224, 111, 240, 28, 9, 11, 224, 111, 240, 22, ++ 9, 8, 224, 137, 70, 6, 224, 111, 240, 1, 9, 3, 224, 153, 70, 1, 224, ++ 111, 240, 26, 9, 72, 70, 79, 176, 189, 232, 240, 143, 111, 240, 13, ++ 9, 248, 231, 0, 191, 233, 79, 136, 0, 45, 233, 247, 79, 12, 159, 6, ++ 70, 12, 70, 146, 70, 29, 70, 27, 185, 3, 106, 157, 105, 23, 185, 47, ++ 105, 0, 47, 116, 208, 105, 104, 72, 75, 180, 248, 14, 128, 162, 104, ++ 11, 64, 8, 240, 7, 8, 178, 248, 0, 176, 51, 177, 51, 104, 91, 107, 27, ++ 177, 66, 75, 19, 248, 8, 144, 1, 224, 79, 240, 3, 9, 163, 105, 155, ++ 0, 10, 213, 19, 121, 216, 7, 7, 212, 214, 248, 100, 6, 33, 70, 42, 70, ++ 73, 240, 60, 217, 0, 40, 82, 209, 165, 98, 11, 240, 252, 11, 151, 248, ++ 68, 48, 187, 241, 208, 15, 132, 248, 33, 48, 14, 208, 187, 241, 160, ++ 15, 11, 208, 187, 241, 192, 15, 8, 208, 187, 241, 80, 15, 1, 209, 59, ++ 124, 27, 177, 163, 105, 67, 240, 2, 3, 163, 97, 157, 248, 52, 32, 15, ++ 155, 0, 50, 141, 232, 8, 2, 24, 191, 1, 34, 14, 155, 48, 70, 33, 70, ++ 10, 240, 94, 217, 186, 121, 38, 75, 26, 185, 215, 248, 148, 35, 81, ++ 7, 18, 213, 149, 248, 231, 32, 122, 177, 162, 105, 146, 7, 12, 212, ++ 19, 248, 8, 32, 13, 42, 1, 220, 1, 50, 0, 224, 15, 34, 48, 70, 33, 70, ++ 11, 240, 137, 251, 152, 177, 36, 224, 19, 248, 8, 48, 10, 241, 4, 1, ++ 13, 43, 1, 220, 1, 51, 0, 224, 15, 35, 48, 70, 34, 70, 248, 247, 73, ++ 254, 32, 177, 48, 70, 81, 70, 253, 247, 39, 252, 17, 224, 1, 34, 112, ++ 104, 33, 70, 245, 247, 24, 255, 51, 104, 211, 248, 136, 48, 26, 106, ++ 1, 50, 26, 98, 43, 105, 59, 177, 219, 104, 26, 106, 1, 50, 26, 98, 2, ++ 224, 1, 32, 189, 232, 254, 143, 213, 248, 92, 49, 0, 32, 1, 51, 197, ++ 248, 92, 49, 246, 231, 0, 191, 64, 0, 1, 0, 138, 182, 135, 0, 72, 194, ++ 135, 0, 127, 181, 20, 70, 146, 104, 6, 70, 19, 121, 13, 70, 219, 7, ++ 11, 212, 4, 50, 39, 240, 231, 254, 3, 70, 56, 177, 144, 248, 36, 32, ++ 18, 240, 2, 2, 8, 191, 19, 70, 0, 224, 0, 35, 213, 248, 204, 32, 0, ++ 149, 18, 244, 0, 82, 12, 191, 17, 70, 12, 33, 162, 127, 3, 145, 34, ++ 240, 15, 2, 66, 240, 3, 2, 162, 119, 0, 34, 1, 146, 2, 146, 48, 70, ++ 33, 70, 214, 248, 164, 37, 255, 247, 45, 255, 0, 40, 12, 191, 79, 240, ++ 255, 48, 0, 32, 4, 176, 112, 189, 248, 181, 6, 70, 8, 70, 12, 70, 23, ++ 70, 84, 240, 73, 219, 227, 121, 5, 70, 2, 43, 19, 209, 97, 105, 137, ++ 177, 208, 248, 204, 48, 154, 4, 6, 213, 59, 104, 79, 244, 250, 98, 48, ++ 70, 90, 67, 248, 247, 202, 253, 48, 70, 41, 70, 98, 105, 255, 247, 175, ++ 255, 0, 35, 99, 97, 248, 189, 45, 233, 240, 79, 0, 43, 179, 176, 7, ++ 147, 12, 191, 4, 35, 10, 35, 9, 147, 7, 155, 21, 105, 13, 241, 40, 9, ++ 24, 191, 32, 35, 4, 70, 20, 175, 136, 70, 147, 70, 0, 33, 40, 34, 72, ++ 70, 6, 147, 213, 248, 248, 96, 13, 241, 176, 10, 238, 243, 57, 242, ++ 0, 33, 40, 34, 56, 70, 238, 243, 52, 242, 0, 33, 12, 34, 80, 70, 238, ++ 243, 47, 242, 51, 107, 32, 70, 141, 232, 8, 4, 41, 70, 6, 154, 243, ++ 106, 205, 248, 176, 144, 45, 151, 7, 240, 245, 218, 0, 40, 64, 240, ++ 248, 128, 184, 248, 6, 48, 216, 7, 21, 213, 33, 106, 75, 125, 147, 177, ++ 10, 109, 11, 168, 84, 49, 10, 146, 236, 247, 147, 254, 213, 248, 204, ++ 48, 153, 4, 5, 213, 212, 248, 80, 1, 41, 70, 74, 70, 77, 240, 225, 216, ++ 0, 35, 20, 147, 8, 224, 20, 171, 0, 147, 32, 70, 41, 70, 8, 241, 56, ++ 2, 10, 171, 23, 240, 109, 218, 243, 106, 131, 177, 38, 168, 0, 33, 24, ++ 34, 238, 243, 246, 241, 243, 106, 43, 148, 38, 147, 51, 107, 39, 147, ++ 103, 75, 41, 147, 103, 75, 40, 147, 103, 75, 42, 147, 38, 171, 30, 175, ++ 0, 33, 32, 34, 56, 70, 8, 147, 238, 243, 227, 241, 10, 171, 0, 33, 8, ++ 34, 32, 147, 47, 168, 20, 171, 33, 147, 205, 248, 120, 176, 205, 248, ++ 124, 128, 238, 243, 214, 241, 35, 104, 41, 70, 147, 248, 79, 32, 50, ++ 171, 18, 240, 3, 2, 24, 191, 219, 248, 4, 32, 212, 248, 124, 6, 24, ++ 191, 194, 243, 0, 66, 3, 248, 12, 45, 0, 147, 6, 154, 8, 155, 48, 151, ++ 62, 240, 15, 222, 9, 155, 6, 153, 0, 235, 3, 10, 49, 171, 2, 147, 32, ++ 70, 66, 70, 5, 241, 194, 3, 141, 232, 0, 5, 20, 240, 223, 219, 7, 70, ++ 48, 185, 32, 70, 57, 70, 181, 248, 26, 33, 42, 240, 51, 217, 128, 224, ++ 32, 70, 41, 70, 66, 70, 221, 248, 196, 144, 14, 240, 41, 222, 169, 248, ++ 0, 0, 115, 140, 169, 248, 2, 48, 49, 155, 4, 51, 49, 147, 7, 155, 19, ++ 185, 170, 241, 4, 10, 19, 224, 6, 241, 36, 9, 72, 70, 243, 247, 75, ++ 254, 16, 185, 49, 152, 73, 70, 2, 224, 49, 152, 5, 241, 216, 1, 6, 34, ++ 236, 247, 5, 254, 49, 155, 170, 241, 10, 10, 6, 51, 49, 147, 47, 171, ++ 0, 147, 49, 155, 212, 248, 124, 6, 1, 147, 41, 70, 6, 154, 8, 155, 205, ++ 248, 8, 160, 62, 240, 49, 221, 129, 70, 40, 177, 96, 104, 57, 70, 1, ++ 34, 245, 247, 188, 253, 66, 224, 49, 155, 0, 144, 1, 144, 2, 144, 3, ++ 147, 32, 70, 41, 70, 87, 34, 75, 70, 205, 248, 16, 160, 15, 240, 236, ++ 218, 112, 107, 24, 177, 245, 247, 119, 253, 198, 248, 52, 144, 7, 155, ++ 35, 177, 49, 155, 10, 241, 6, 10, 6, 59, 49, 147, 49, 155, 10, 241, ++ 4, 10, 4, 59, 49, 147, 7, 155, 80, 70, 134, 248, 60, 48, 245, 247, 96, ++ 253, 112, 99, 8, 185, 176, 99, 5, 224, 49, 153, 82, 70, 236, 247, 190, ++ 253, 198, 248, 56, 160, 184, 248, 98, 48, 0, 149, 195, 243, 64, 19, ++ 1, 147, 0, 35, 2, 147, 3, 147, 57, 70, 32, 70, 212, 248, 164, 37, 91, ++ 70, 255, 247, 220, 253, 0, 40, 8, 191, 0, 39, 0, 224, 0, 39, 56, 70, ++ 51, 176, 189, 232, 240, 143, 0, 191, 9, 205, 129, 0, 25, 205, 129, 0, ++ 57, 205, 129, 0, 45, 233, 240, 79, 149, 176, 4, 70, 6, 145, 7, 146, ++ 221, 248, 128, 128, 33, 158, 5, 104, 154, 70, 0, 43, 0, 240, 223, 128, ++ 184, 241, 0, 15, 28, 209, 30, 154, 1, 42, 27, 209, 31, 154, 147, 30, ++ 1, 43, 23, 216, 3, 42, 21, 209, 0, 46, 64, 240, 213, 128, 131, 110, ++ 95, 28, 5, 208, 0, 235, 131, 3, 222, 110, 0, 46, 64, 240, 204, 128, ++ 40, 70, 0, 33, 180, 248, 26, 33, 14, 240, 202, 252, 0, 39, 191, 224, ++ 0, 38, 0, 224, 70, 70, 79, 240, 176, 11, 6, 39, 43, 104, 147, 248, 102, ++ 49, 99, 177, 30, 155, 3, 43, 9, 209, 205, 248, 0, 128, 213, 248, 80, ++ 8, 33, 70, 82, 70, 31, 155, 38, 240, 158, 253, 32, 224, 9, 171, 24, ++ 70, 0, 33, 32, 34, 5, 147, 238, 243, 208, 240, 30, 154, 13, 241, 68, ++ 9, 9, 146, 31, 154, 0, 33, 10, 146, 34, 154, 72, 70, 12, 146, 8, 34, ++ 205, 248, 44, 160, 238, 243, 193, 240, 5, 155, 205, 248, 0, 144, 18, ++ 147, 213, 248, 124, 6, 33, 70, 176, 34, 0, 35, 62, 240, 6, 221, 7, 155, ++ 0, 235, 7, 9, 141, 232, 8, 2, 19, 171, 2, 147, 40, 70, 89, 70, 6, 154, ++ 4, 241, 194, 3, 20, 240, 214, 218, 7, 70, 0, 40, 118, 208, 43, 104, ++ 147, 248, 102, 49, 51, 177, 30, 154, 3, 42, 5, 209, 19, 155, 3, 235, ++ 9, 12, 3, 224, 156, 70, 1, 224, 79, 240, 0, 12, 158, 177, 0, 35, 0, ++ 147, 1, 147, 50, 70, 19, 155, 40, 70, 33, 70, 205, 248, 20, 192, 66, ++ 240, 200, 216, 150, 249, 14, 48, 19, 154, 221, 248, 20, 192, 210, 24, ++ 19, 146, 195, 235, 9, 9, 221, 248, 76, 176, 30, 155, 171, 248, 0, 48, ++ 31, 154, 171, 248, 4, 128, 171, 248, 2, 32, 42, 104, 11, 241, 6, 3, ++ 146, 248, 102, 33, 19, 147, 162, 177, 30, 154, 3, 42, 17, 209, 156, ++ 69, 44, 191, 195, 235, 12, 2, 0, 34, 213, 248, 80, 8, 33, 70, 1, 147, ++ 2, 146, 31, 155, 82, 70, 205, 248, 0, 128, 38, 240, 59, 253, 19, 144, ++ 20, 224, 17, 170, 141, 232, 12, 0, 169, 241, 6, 3, 2, 147, 213, 248, ++ 124, 6, 33, 70, 176, 34, 0, 35, 62, 240, 12, 220, 184, 241, 0, 15, 4, ++ 209, 189, 248, 52, 48, 11, 177, 171, 248, 4, 48, 163, 121, 19, 177, ++ 227, 104, 218, 104, 1, 224, 213, 248, 164, 37, 157, 248, 140, 48, 57, ++ 70, 1, 147, 0, 35, 3, 147, 40, 70, 83, 70, 0, 148, 2, 150, 255, 247, ++ 227, 252, 0, 40, 8, 191, 0, 39, 0, 224, 31, 70, 56, 70, 21, 176, 189, ++ 232, 240, 143, 150, 249, 14, 112, 68, 242, 176, 11, 6, 55, 59, 231, ++ 45, 233, 240, 79, 3, 104, 135, 176, 147, 248, 63, 48, 4, 70, 198, 104, ++ 19, 177, 176, 248, 70, 84, 2, 224, 9, 240, 194, 216, 5, 70, 35, 106, ++ 212, 248, 56, 35, 0, 33, 32, 70, 3, 241, 28, 10, 179, 248, 8, 144, 211, ++ 248, 0, 128, 2, 241, 56, 11, 20, 240, 132, 219, 5, 244, 96, 83, 179, ++ 245, 32, 95, 8, 208, 179, 245, 192, 95, 7, 208, 179, 245, 128, 95, 20, ++ 191, 10, 35, 20, 35, 2, 224, 160, 35, 0, 224, 40, 35, 0, 39, 255, 34, ++ 3, 147, 212, 248, 116, 52, 1, 146, 2, 144, 0, 151, 27, 121, 88, 70, ++ 4, 147, 81, 70, 74, 70, 67, 70, 35, 240, 159, 249, 59, 70, 41, 70, 58, ++ 70, 32, 105, 16, 240, 227, 250, 32, 70, 10, 240, 210, 218, 86, 33, 32, ++ 105, 48, 240, 128, 216, 212, 248, 180, 49, 64, 0, 187, 66, 196, 248, ++ 252, 2, 6, 218, 32, 105, 178, 33, 48, 240, 117, 216, 64, 0, 196, 248, ++ 0, 3, 32, 70, 251, 247, 196, 255, 148, 248, 16, 50, 51, 185, 32, 105, ++ 76, 33, 48, 240, 104, 216, 192, 9, 132, 248, 16, 2, 32, 70, 23, 240, ++ 152, 218, 79, 240, 0, 8, 32, 70, 65, 240, 111, 219, 71, 70, 12, 224, ++ 212, 248, 168, 50, 67, 68, 219, 106, 35, 177, 212, 248, 172, 34, 82, ++ 248, 39, 0, 152, 71, 1, 55, 8, 241, 56, 8, 35, 104, 147, 248, 184, 48, ++ 159, 66, 237, 219, 0, 39, 212, 248, 104, 50, 83, 248, 7, 128, 184, 241, ++ 0, 15, 5, 208, 64, 70, 24, 240, 152, 223, 64, 70, 24, 240, 117, 221, ++ 4, 55, 32, 47, 239, 209, 32, 70, 41, 70, 7, 240, 174, 216, 116, 33, ++ 32, 70, 180, 248, 88, 35, 26, 240, 142, 223, 148, 248, 21, 34, 66, 242, ++ 16, 115, 0, 42, 12, 191, 26, 70, 79, 244, 188, 98, 130, 33, 32, 70, ++ 26, 240, 129, 223, 35, 106, 148, 248, 21, 18, 24, 105, 25, 240, 161, ++ 249, 32, 70, 41, 240, 183, 253, 35, 104, 65, 242, 107, 1, 211, 248, ++ 216, 48, 26, 107, 138, 66, 23, 209, 219, 107, 68, 242, 49, 50, 147, ++ 66, 35, 208, 68, 242, 96, 50, 147, 66, 28, 208, 74, 246, 196, 18, 147, ++ 66, 24, 208, 74, 246, 6, 34, 147, 66, 20, 208, 68, 242, 82, 50, 147, ++ 66, 20, 191, 7, 34, 1, 34, 14, 224, 65, 242, 228, 65, 138, 66, 19, 209, ++ 155, 106, 64, 242, 39, 82, 147, 66, 7, 208, 64, 242, 198, 82, 147, 66, ++ 10, 209, 2, 224, 1, 34, 0, 37, 1, 224, 5, 34, 1, 37, 32, 70, 106, 73, ++ 21, 240, 251, 216, 0, 224, 0, 37, 105, 73, 42, 70, 32, 70, 21, 240, ++ 244, 216, 212, 248, 56, 1, 32, 240, 212, 216, 35, 104, 147, 248, 79, ++ 32, 145, 7, 8, 208, 212, 248, 116, 36, 179, 248, 204, 48, 32, 70, 83, ++ 133, 1, 33, 41, 240, 108, 249, 32, 70, 252, 247, 59, 250, 35, 104, 91, ++ 107, 203, 177, 182, 248, 136, 54, 0, 37, 155, 178, 67, 240, 4, 3, 166, ++ 248, 136, 54, 212, 248, 104, 50, 89, 89, 81, 177, 35, 104, 91, 107, ++ 59, 177, 209, 248, 204, 32, 18, 240, 2, 2, 2, 209, 32, 70, 19, 240, ++ 193, 223, 4, 53, 32, 45, 237, 209, 32, 70, 13, 240, 125, 217, 212, 248, ++ 176, 17, 97, 185, 32, 70, 23, 240, 117, 216, 5, 4, 196, 248, 176, 81, ++ 32, 70, 2, 33, 23, 240, 110, 216, 40, 67, 196, 248, 176, 1, 15, 33, ++ 212, 248, 52, 1, 7, 240, 186, 254, 32, 70, 19, 240, 213, 223, 32, 70, ++ 6, 240, 88, 219, 180, 248, 36, 21, 32, 70, 252, 247, 102, 251, 32, 70, ++ 252, 247, 149, 253, 227, 104, 59, 74, 0, 38, 132, 248, 52, 96, 37, 70, ++ 195, 248, 220, 35, 32, 70, 6, 245, 64, 113, 23, 240, 75, 216, 181, 248, ++ 58, 50, 26, 7, 6, 209, 35, 240, 15, 3, 0, 240, 15, 2, 19, 67, 165, 248, ++ 58, 50, 181, 248, 58, 50, 19, 240, 240, 15, 6, 209, 35, 240, 240, 3, ++ 0, 240, 240, 2, 19, 67, 165, 248, 58, 50, 181, 248, 58, 50, 19, 244, ++ 112, 111, 6, 209, 35, 244, 112, 99, 0, 244, 112, 98, 19, 67, 165, 248, ++ 58, 50, 181, 248, 58, 50, 26, 11, 8, 209, 27, 5, 32, 244, 126, 96, 27, ++ 13, 32, 240, 31, 0, 24, 67, 165, 248, 58, 2, 2, 54, 2, 53, 8, 46, 198, ++ 209, 35, 104, 32, 70, 147, 249, 82, 16, 8, 240, 69, 222, 148, 248, 116, ++ 50, 3, 240, 2, 3, 132, 248, 116, 50, 35, 104, 26, 126, 98, 177, 147, ++ 248, 47, 48, 51, 177, 0, 35, 132, 248, 114, 50, 212, 248, 8, 5, 36, ++ 240, 64, 217, 32, 70, 12, 240, 199, 221, 0, 37, 212, 248, 104, 50, 88, ++ 89, 24, 177, 131, 121, 11, 185, 41, 240, 60, 219, 4, 53, 32, 45, 244, ++ 209, 212, 248, 104, 1, 4, 33, 83, 240, 238, 222, 0, 35, 132, 248, 42, ++ 56, 7, 176, 189, 232, 240, 143, 154, 51, 4, 0, 244, 75, 136, 0, 128, ++ 150, 152, 0, 45, 233, 240, 79, 139, 70, 17, 136, 139, 176, 20, 70, 219, ++ 248, 0, 32, 5, 145, 1, 240, 252, 8, 20, 153, 9, 146, 219, 138, 14, 104, ++ 5, 153, 19, 244, 64, 79, 193, 243, 129, 1, 12, 191, 0, 35, 1, 35, 1, ++ 41, 7, 70, 21, 157, 6, 147, 7, 145, 2, 221, 2, 41, 99, 209, 76, 224, ++ 5, 154, 18, 244, 64, 127, 7, 208, 184, 241, 80, 15, 0, 240, 106, 129, ++ 184, 241, 164, 15, 87, 209, 51, 224, 184, 241, 132, 15, 48, 208, 13, ++ 216, 184, 241, 16, 15, 87, 208, 3, 216, 184, 241, 0, 15, 83, 208, 89, ++ 225, 184, 241, 32, 15, 79, 208, 184, 241, 48, 15, 8, 224, 184, 241, ++ 164, 15, 30, 208, 7, 216, 184, 241, 148, 15, 26, 208, 184, 241, 160, ++ 15, 64, 240, 73, 129, 64, 224, 184, 241, 192, 15, 61, 208, 184, 241, ++ 208, 15, 64, 240, 65, 129, 32, 70, 41, 70, 9, 240, 107, 216, 0, 40, ++ 64, 240, 58, 129, 56, 70, 33, 70, 42, 70, 9, 240, 77, 216, 0, 40, 64, ++ 240, 50, 129, 9, 155, 99, 187, 9, 171, 0, 147, 56, 70, 33, 29, 4, 241, ++ 10, 2, 6, 155, 39, 240, 67, 250, 6, 70, 33, 224, 5, 155, 19, 244, 64, ++ 117, 0, 240, 39, 129, 181, 245, 64, 127, 25, 209, 226, 185, 6, 155, ++ 33, 29, 4, 241, 10, 2, 205, 248, 0, 176, 39, 240, 48, 250, 219, 248, ++ 0, 48, 6, 70, 9, 147, 15, 224, 59, 104, 1, 37, 211, 248, 136, 48, 218, ++ 109, 1, 50, 218, 101, 13, 225, 79, 240, 2, 10, 6, 37, 6, 224, 79, 240, ++ 3, 10, 7, 37, 2, 224, 79, 240, 4, 10, 1, 37, 9, 153, 57, 177, 70, 185, ++ 56, 70, 4, 241, 10, 2, 6, 155, 39, 240, 13, 250, 6, 70, 0, 46, 71, 208, ++ 9, 152, 130, 121, 18, 187, 3, 124, 27, 187, 2, 122, 10, 179, 184, 241, ++ 148, 15, 32, 208, 184, 241, 132, 15, 29, 208, 184, 241, 208, 15, 29, ++ 209, 176, 248, 190, 48, 97, 138, 34, 138, 89, 64, 176, 248, 188, 48, ++ 90, 64, 10, 67, 176, 248, 192, 48, 161, 138, 75, 64, 19, 67, 31, 250, ++ 131, 249, 217, 241, 1, 9, 56, 191, 79, 240, 0, 9, 8, 224, 79, 240, 0, ++ 9, 5, 224, 145, 70, 3, 224, 79, 240, 1, 9, 0, 224, 153, 70, 208, 248, ++ 204, 48, 19, 244, 0, 3, 22, 208, 184, 241, 148, 15, 21, 208, 184, 241, ++ 132, 15, 18, 208, 184, 241, 208, 15, 17, 209, 188, 48, 6, 34, 4, 241, ++ 16, 1, 236, 247, 232, 249, 208, 241, 1, 0, 56, 191, 0, 32, 7, 224, 48, ++ 70, 177, 70, 4, 224, 24, 70, 2, 224, 1, 32, 0, 224, 0, 32, 186, 241, ++ 4, 15, 8, 209, 0, 46, 0, 240, 147, 128, 214, 248, 164, 49, 217, 7, 0, ++ 241, 149, 128, 140, 224, 126, 177, 150, 248, 36, 48, 19, 240, 2, 2, ++ 64, 240, 141, 128, 0, 40, 64, 240, 140, 128, 185, 241, 0, 15, 64, 240, ++ 138, 128, 218, 7, 4, 213, 95, 224, 184, 241, 192, 15, 0, 240, 134, 128, ++ 35, 121, 216, 7, 116, 212, 30, 177, 150, 248, 36, 48, 89, 7, 111, 212, ++ 59, 106, 6, 153, 91, 104, 153, 66, 106, 209, 5, 154, 2, 244, 64, 115, ++ 179, 245, 128, 127, 2, 209, 4, 241, 4, 8, 12, 224, 179, 245, 0, 127, ++ 2, 209, 4, 241, 10, 8, 6, 224, 7, 155, 1, 43, 20, 191, 4, 241, 16, 8, ++ 79, 240, 0, 8, 9, 155, 99, 185, 6, 155, 56, 70, 33, 29, 4, 241, 10, ++ 2, 205, 248, 0, 176, 39, 240, 109, 249, 219, 248, 0, 48, 6, 70, 9, 147, ++ 9, 155, 59, 177, 3, 241, 194, 2, 184, 241, 0, 15, 11, 209, 3, 241, 188, ++ 8, 8, 224, 34, 29, 184, 241, 0, 15, 1, 209, 4, 241, 10, 8, 215, 248, ++ 108, 50, 9, 147, 14, 185, 59, 106, 158, 105, 10, 52, 1, 146, 9, 153, ++ 50, 70, 35, 70, 56, 70, 205, 248, 0, 128, 2, 149, 23, 240, 184, 222, ++ 0, 34, 56, 70, 9, 153, 35, 70, 0, 149, 1, 146, 42, 240, 68, 218, 27, ++ 224, 186, 241, 3, 15, 37, 209, 34, 121, 210, 7, 21, 212, 27, 7, 19, ++ 212, 59, 106, 6, 153, 91, 104, 153, 66, 14, 209, 49, 105, 56, 70, 1, ++ 241, 188, 3, 0, 147, 1, 241, 194, 3, 1, 147, 50, 70, 4, 241, 10, 3, ++ 9, 145, 2, 149, 23, 240, 235, 222, 59, 104, 211, 248, 136, 48, 26, 111, ++ 1, 50, 26, 103, 6, 224, 0, 37, 4, 224, 21, 70, 2, 224, 5, 70, 0, 224, ++ 77, 70, 20, 154, 40, 70, 22, 96, 11, 176, 189, 232, 240, 143, 45, 233, ++ 240, 71, 4, 70, 164, 176, 144, 70, 154, 70, 13, 70, 0, 41, 109, 208, ++ 209, 248, 88, 51, 0, 43, 105, 208, 5, 175, 15, 174, 51, 70, 58, 70, ++ 13, 241, 100, 9, 20, 240, 38, 217, 0, 33, 32, 34, 72, 70, 237, 243, ++ 167, 244, 35, 106, 0, 33, 101, 51, 8, 34, 33, 168, 25, 147, 205, 248, ++ 104, 128, 141, 248, 108, 160, 28, 151, 29, 150, 237, 243, 153, 244, ++ 35, 104, 205, 248, 136, 144, 147, 248, 79, 48, 19, 240, 3, 3, 7, 208, ++ 213, 248, 204, 48, 3, 244, 128, 83, 211, 241, 1, 3, 56, 191, 0, 35, ++ 36, 175, 7, 248, 12, 61, 41, 70, 64, 34, 0, 35, 212, 248, 124, 6, 0, ++ 151, 62, 240, 206, 216, 45, 155, 1, 144, 0, 147, 35, 171, 2, 147, 128, ++ 70, 64, 33, 32, 70, 44, 154, 5, 241, 194, 3, 19, 240, 159, 222, 6, 70, ++ 32, 179, 35, 155, 212, 248, 124, 6, 1, 147, 41, 70, 64, 34, 0, 35, 0, ++ 151, 205, 248, 8, 128, 62, 240, 33, 216, 40, 177, 96, 104, 49, 70, 1, ++ 34, 245, 247, 173, 248, 17, 224, 213, 248, 204, 48, 19, 244, 0, 83, ++ 6, 208, 212, 248, 80, 1, 41, 70, 50, 70, 76, 240, 185, 221, 5, 224, ++ 32, 70, 49, 70, 212, 248, 164, 37, 23, 240, 184, 222, 36, 176, 189, ++ 232, 240, 135, 45, 233, 240, 79, 143, 176, 139, 70, 25, 153, 144, 70, ++ 31, 70, 24, 158, 4, 70, 66, 240, 172, 222, 26, 153, 9, 144, 25, 152, ++ 34, 240, 151, 252, 0, 46, 7, 144, 64, 243, 16, 129, 1, 46, 61, 120, ++ 20, 191, 151, 248, 1, 160, 79, 240, 0, 10, 187, 241, 0, 15, 2, 208, ++ 219, 248, 16, 144, 12, 224, 32, 70, 8, 241, 16, 1, 16, 240, 73, 250, ++ 129, 70, 40, 185, 32, 70, 8, 241, 4, 1, 16, 240, 24, 250, 129, 70, 4, ++ 45, 6, 208, 1, 216, 1, 45, 2, 224, 10, 45, 1, 208, 127, 45, 48, 209, ++ 8, 241, 10, 3, 8, 147, 0, 35, 0, 147, 1, 147, 2, 147, 59, 34, 32, 70, ++ 73, 70, 8, 155, 3, 151, 4, 150, 14, 240, 143, 221, 4, 45, 5, 209, 170, ++ 241, 32, 3, 1, 43, 1, 216, 7, 45, 27, 224, 13, 241, 40, 12, 99, 70, ++ 32, 70, 25, 153, 26, 154, 205, 248, 24, 192, 249, 247, 103, 255, 0, ++ 35, 221, 248, 24, 192, 0, 147, 1, 147, 2, 147, 32, 70, 73, 70, 75, 34, ++ 8, 155, 3, 151, 4, 150, 205, 248, 20, 192, 14, 240, 127, 221, 7, 45, ++ 104, 208, 14, 216, 4, 45, 115, 208, 4, 216, 221, 177, 1, 45, 64, 240, ++ 151, 128, 131, 224, 5, 45, 0, 240, 180, 128, 6, 45, 64, 240, 144, 128, ++ 74, 224, 11, 45, 6, 216, 10, 45, 128, 240, 171, 128, 8, 45, 64, 240, ++ 135, 128, 105, 224, 21, 45, 0, 240, 164, 128, 127, 45, 48, 208, 17, ++ 45, 126, 209, 20, 224, 35, 104, 147, 248, 173, 48, 0, 43, 0, 240, 153, ++ 128, 1, 46, 0, 240, 138, 128, 9, 155, 212, 248, 116, 1, 0, 147, 7, 155, ++ 65, 70, 1, 147, 58, 70, 51, 70, 27, 240, 128, 217, 137, 224, 185, 241, ++ 0, 15, 4, 208, 35, 104, 91, 107, 0, 43, 0, 240, 130, 128, 66, 46, 115, ++ 221, 35, 104, 147, 248, 69, 48, 0, 43, 122, 208, 72, 70, 81, 70, 212, ++ 248, 100, 33, 67, 70, 0, 151, 1, 150, 53, 240, 157, 221, 112, 224, 25, ++ 155, 32, 70, 1, 147, 7, 155, 73, 70, 2, 147, 66, 70, 59, 70, 0, 150, ++ 247, 247, 143, 252, 100, 224, 185, 241, 0, 15, 97, 208, 15, 46, 83, ++ 221, 212, 248, 192, 6, 73, 70, 66, 70, 59, 70, 0, 150, 60, 240, 237, ++ 219, 86, 224, 35, 104, 147, 248, 79, 48, 155, 7, 81, 208, 32, 70, 81, ++ 70, 90, 70, 67, 70, 0, 151, 1, 150, 7, 240, 111, 222, 72, 224, 25, 155, ++ 32, 70, 1, 147, 7, 155, 73, 70, 2, 147, 66, 70, 59, 70, 0, 150, 7, 240, ++ 195, 222, 60, 224, 212, 248, 100, 6, 89, 70, 82, 70, 67, 70, 0, 151, ++ 1, 150, 71, 240, 177, 223, 50, 224, 35, 104, 147, 248, 176, 48, 0, 43, ++ 45, 208, 186, 241, 4, 15, 42, 209, 2, 46, 40, 221, 212, 248, 144, 1, ++ 73, 70, 186, 28, 179, 30, 27, 240, 75, 220, 32, 224, 5, 240, 127, 3, ++ 3, 43, 7, 209, 32, 70, 89, 70, 66, 70, 59, 70, 0, 150, 30, 240, 73, ++ 216, 20, 224, 40, 6, 18, 212, 32, 70, 65, 70, 58, 70, 51, 70, 23, 240, ++ 238, 216, 11, 224, 32, 70, 65, 70, 58, 70, 51, 70, 23, 240, 231, 216, ++ 35, 104, 211, 248, 136, 48, 26, 111, 1, 50, 26, 103, 0, 32, 15, 176, ++ 189, 232, 240, 143, 45, 233, 240, 67, 144, 248, 144, 55, 135, 176, 4, ++ 70, 43, 177, 0, 35, 128, 248, 144, 55, 79, 240, 1, 8, 0, 224, 152, 70, ++ 35, 104, 26, 126, 50, 185, 184, 241, 0, 15, 0, 240, 107, 130, 32, 70, ++ 2, 33, 101, 226, 32, 105, 61, 240, 168, 221, 24, 177, 160, 104, 246, ++ 247, 109, 252, 87, 226, 34, 105, 210, 248, 68, 49, 131, 177, 33, 104, ++ 7, 43, 136, 191, 0, 35, 209, 248, 136, 16, 202, 51, 1, 235, 131, 3, ++ 89, 104, 1, 49, 89, 96, 194, 248, 68, 1, 32, 70, 19, 240, 134, 220, ++ 35, 105, 211, 248, 136, 48, 179, 248, 208, 52, 93, 6, 2, 213, 32, 70, ++ 19, 240, 124, 220, 32, 70, 13, 240, 183, 217, 35, 106, 32, 70, 31, 105, ++ 212, 248, 108, 50, 211, 248, 0, 33, 157, 121, 22, 124, 13, 240, 238, ++ 223, 3, 28, 24, 191, 1, 35, 56, 70, 113, 178, 42, 70, 25, 240, 94, 248, ++ 148, 248, 116, 54, 171, 177, 35, 105, 211, 248, 136, 48, 211, 248, 36, ++ 81, 21, 240, 64, 5, 13, 209, 32, 70, 25, 240, 240, 219, 35, 106, 132, ++ 248, 116, 86, 24, 105, 41, 70, 42, 70, 24, 240, 146, 254, 32, 70, 19, ++ 240, 155, 219, 35, 104, 32, 70, 154, 106, 1, 50, 154, 98, 13, 240, 198, ++ 223, 24, 185, 212, 248, 116, 52, 131, 248, 41, 1, 32, 70, 42, 240, 71, ++ 253, 35, 106, 24, 105, 24, 240, 191, 249, 1, 70, 32, 70, 66, 240, 144, ++ 220, 35, 106, 24, 105, 24, 240, 199, 249, 1, 70, 32, 70, 20, 240, 42, ++ 254, 35, 104, 147, 249, 62, 48, 123, 177, 212, 248, 36, 1, 3, 169, 0, ++ 34, 84, 240, 238, 217, 1, 224, 0, 35, 195, 97, 212, 248, 36, 1, 3, 169, ++ 38, 240, 142, 254, 0, 40, 246, 209, 148, 248, 216, 49, 75, 177, 32, ++ 70, 8, 240, 118, 220, 40, 177, 148, 248, 232, 49, 19, 177, 1, 59, 132, ++ 248, 232, 49, 32, 70, 22, 240, 242, 217, 32, 70, 9, 240, 57, 220, 32, ++ 70, 22, 240, 70, 218, 148, 248, 216, 49, 19, 177, 32, 70, 20, 240, 136, ++ 220, 35, 104, 221, 110, 0, 45, 64, 240, 182, 129, 32, 70, 16, 240, 157, ++ 253, 32, 70, 47, 240, 237, 223, 35, 104, 147, 248, 47, 32, 194, 177, ++ 147, 248, 48, 48, 171, 177, 32, 70, 13, 240, 145, 222, 136, 177, 212, ++ 248, 104, 34, 83, 89, 43, 177, 153, 121, 25, 177, 89, 121, 9, 177, 27, ++ 121, 27, 177, 4, 53, 32, 45, 244, 209, 3, 224, 212, 248, 8, 5, 35, 240, ++ 244, 220, 212, 248, 24, 53, 27, 104, 163, 177, 32, 70, 24, 240, 249, ++ 223, 212, 248, 24, 53, 90, 104, 27, 104, 178, 251, 243, 241, 3, 251, ++ 17, 35, 19, 185, 32, 70, 7, 240, 155, 216, 212, 248, 24, 53, 90, 104, ++ 1, 50, 90, 96, 10, 224, 35, 104, 154, 106, 30, 35, 178, 251, 243, 241, ++ 3, 251, 17, 35, 19, 185, 32, 70, 24, 240, 220, 223, 148, 248, 112, 50, ++ 67, 177, 148, 248, 224, 52, 1, 59, 219, 178, 2, 43, 2, 216, 32, 70, ++ 7, 240, 58, 222, 0, 37, 212, 248, 104, 50, 95, 89, 31, 179, 187, 121, ++ 11, 187, 59, 122, 251, 177, 215, 248, 4, 49, 155, 122, 219, 177, 56, ++ 70, 22, 240, 34, 216, 184, 177, 59, 124, 171, 177, 215, 248, 4, 49, ++ 155, 122, 139, 177, 59, 122, 123, 177, 7, 241, 188, 6, 48, 70, 242, ++ 247, 162, 254, 3, 70, 64, 185, 79, 240, 255, 50, 0, 144, 1, 146, 32, ++ 70, 57, 70, 50, 70, 23, 240, 87, 220, 4, 53, 32, 45, 212, 209, 32, 70, ++ 253, 247, 216, 253, 35, 106, 91, 125, 179, 177, 35, 104, 154, 106, 60, ++ 35, 178, 251, 243, 245, 3, 251, 21, 37, 117, 185, 212, 248, 104, 50, ++ 88, 89, 56, 177, 131, 121, 43, 185, 3, 122, 27, 177, 3, 124, 11, 185, ++ 9, 240, 72, 220, 4, 53, 32, 45, 240, 209, 32, 70, 248, 247, 159, 249, ++ 32, 185, 212, 248, 8, 5, 35, 240, 159, 217, 32, 177, 35, 106, 32, 33, ++ 24, 105, 0, 34, 3, 224, 35, 106, 32, 33, 24, 105, 1, 34, 23, 240, 179, ++ 251, 0, 38, 212, 248, 104, 50, 157, 89, 197, 177, 43, 122, 179, 177, ++ 35, 104, 147, 248, 79, 48, 152, 7, 17, 208, 213, 248, 92, 51, 27, 120, ++ 107, 177, 171, 121, 19, 185, 40, 70, 7, 240, 224, 223, 171, 121, 27, ++ 185, 213, 248, 92, 51, 27, 121, 19, 177, 40, 70, 7, 240, 201, 223, 4, ++ 54, 32, 46, 223, 209, 0, 38, 212, 248, 104, 50, 157, 89, 253, 177, 213, ++ 248, 136, 48, 19, 177, 1, 59, 197, 248, 136, 48, 213, 248, 140, 112, ++ 31, 177, 1, 63, 197, 248, 140, 112, 18, 224, 171, 121, 131, 177, 43, ++ 109, 153, 7, 13, 213, 149, 248, 132, 48, 83, 177, 241, 243, 114, 243, ++ 213, 248, 144, 16, 41, 240, 172, 222, 24, 177, 197, 248, 136, 112, 133, ++ 248, 132, 112, 4, 54, 32, 46, 216, 209, 180, 248, 60, 55, 27, 177, 1, ++ 59, 164, 248, 60, 55, 2, 224, 32, 70, 19, 240, 30, 220, 0, 38, 53, 70, ++ 11, 224, 212, 248, 168, 50, 155, 25, 91, 106, 35, 177, 212, 248, 172, ++ 34, 82, 248, 37, 0, 152, 71, 1, 53, 56, 54, 35, 104, 147, 248, 184, ++ 32, 149, 66, 238, 219, 147, 248, 60, 80, 69, 177, 147, 248, 61, 80, ++ 45, 177, 148, 248, 228, 85, 21, 177, 227, 104, 211, 248, 128, 81, 0, ++ 38, 212, 248, 104, 50, 83, 248, 6, 144, 185, 241, 0, 15, 64, 208, 153, ++ 248, 6, 48, 0, 43, 60, 209, 153, 248, 8, 48, 0, 43, 56, 208, 153, 248, ++ 66, 51, 218, 7, 4, 213, 32, 70, 73, 70, 153, 248, 64, 35, 5, 224, 152, ++ 7, 5, 213, 153, 248, 65, 35, 32, 70, 73, 70, 20, 240, 161, 221, 148, ++ 248, 228, 53, 35, 179, 153, 248, 4, 48, 11, 179, 217, 248, 4, 49, 74, ++ 70, 25, 120, 32, 70, 253, 247, 176, 255, 35, 104, 147, 248, 60, 32, ++ 178, 177, 147, 248, 61, 48, 155, 177, 148, 248, 114, 50, 131, 185, 217, ++ 248, 244, 48, 212, 248, 84, 1, 223, 141, 147, 248, 96, 48, 191, 2, 1, ++ 51, 95, 67, 153, 248, 68, 16, 43, 70, 58, 70, 69, 240, 36, 221, 237, ++ 25, 4, 54, 32, 46, 180, 209, 35, 104, 147, 248, 60, 32, 106, 177, 147, ++ 248, 61, 48, 83, 177, 148, 248, 114, 34, 58, 185, 148, 248, 228, 53, ++ 35, 177, 212, 248, 84, 1, 1, 33, 20, 240, 228, 254, 0, 35, 132, 248, ++ 228, 53, 32, 70, 39, 240, 191, 255, 212, 248, 108, 50, 35, 177, 211, ++ 248, 4, 33, 10, 177, 18, 120, 26, 177, 212, 248, 104, 2, 0, 34, 2, 224, ++ 27, 122, 203, 185, 248, 231, 131, 88, 147, 177, 157, 121, 211, 248, ++ 204, 16, 21, 177, 137, 4, 5, 212, 11, 224, 17, 244, 0, 95, 8, 208, 201, ++ 3, 6, 212, 25, 122, 33, 177, 211, 248, 4, 49, 11, 177, 27, 120, 27, ++ 177, 4, 50, 32, 42, 231, 209, 3, 224, 160, 104, 2, 33, 2, 240, 138, ++ 221, 32, 70, 12, 240, 141, 217, 184, 241, 0, 15, 4, 208, 32, 70, 2, ++ 33, 0, 34, 25, 240, 45, 223, 7, 176, 189, 232, 240, 131, 45, 233, 240, ++ 79, 139, 176, 7, 147, 221, 248, 80, 128, 0, 35, 141, 248, 39, 48, 4, ++ 70, 21, 158, 221, 248, 28, 160, 184, 248, 4, 0, 22, 159, 154, 66, 24, ++ 191, 146, 70, 145, 70, 0, 240, 3, 0, 242, 136, 6, 63, 2, 40, 17, 70, ++ 7, 209, 18, 178, 154, 66, 4, 218, 17, 240, 12, 15, 20, 191, 0, 35, 1, ++ 35, 27, 185, 6, 241, 30, 5, 28, 35, 2, 224, 6, 241, 34, 5, 32, 35, 255, ++ 26, 11, 47, 64, 243, 4, 129, 179, 29, 6, 147, 35, 104, 147, 248, 21, ++ 49, 115, 177, 148, 248, 1, 55, 91, 185, 212, 248, 92, 1, 57, 240, 62, ++ 216, 48, 177, 32, 70, 65, 70, 6, 154, 43, 70, 0, 151, 6, 240, 242, 220, ++ 212, 248, 104, 49, 75, 177, 155, 121, 59, 177, 32, 70, 65, 70, 50, 70, ++ 6, 155, 141, 232, 160, 0, 249, 247, 131, 253, 6, 155, 32, 70, 141, 232, ++ 168, 0, 13, 241, 39, 3, 3, 147, 73, 70, 51, 70, 66, 70, 252, 247, 193, ++ 250, 212, 248, 108, 50, 153, 69, 78, 209, 148, 248, 144, 55, 0, 43, ++ 74, 208, 148, 248, 46, 50, 59, 177, 160, 104, 212, 248, 236, 17, 2, ++ 240, 141, 220, 0, 35, 132, 248, 46, 50, 148, 248, 184, 55, 59, 177, ++ 160, 104, 212, 248, 180, 23, 2, 240, 130, 220, 0, 35, 132, 248, 184, ++ 55, 148, 248, 160, 55, 79, 240, 0, 11, 1, 43, 5, 209, 32, 70, 255, 247, ++ 249, 252, 132, 248, 208, 183, 23, 224, 79, 240, 1, 12, 132, 248, 208, ++ 199, 32, 70, 2, 33, 90, 70, 132, 248, 144, 183, 205, 248, 20, 192, 25, ++ 240, 150, 222, 160, 104, 212, 248, 180, 23, 13, 34, 91, 70, 2, 240, ++ 57, 220, 221, 248, 20, 192, 132, 248, 184, 199, 212, 248, 236, 17, 32, ++ 70, 212, 248, 8, 176, 5, 145, 12, 240, 99, 222, 1, 35, 2, 70, 5, 153, ++ 88, 70, 2, 240, 39, 220, 1, 35, 132, 248, 46, 50, 157, 248, 39, 48, ++ 91, 177, 157, 248, 92, 48, 67, 177, 6, 155, 32, 70, 141, 232, 168, 0, ++ 73, 70, 66, 70, 51, 70, 11, 240, 87, 223, 107, 137, 219, 7, 58, 213, ++ 212, 248, 124, 1, 41, 70, 58, 70, 58, 240, 96, 219, 0, 40, 50, 209, ++ 148, 248, 1, 55, 1, 43, 46, 208, 184, 248, 22, 48, 19, 244, 64, 79, ++ 95, 250, 131, 251, 21, 209, 5, 241, 12, 0, 167, 241, 12, 1, 3, 34, 242, ++ 247, 36, 253, 248, 177, 67, 120, 235, 177, 131, 120, 91, 69, 26, 209, ++ 34, 106, 16, 105, 5, 147, 23, 240, 61, 250, 5, 155, 192, 178, 131, 66, ++ 12, 224, 35, 106, 24, 105, 23, 240, 53, 250, 192, 178, 131, 69, 10, ++ 209, 32, 70, 41, 70, 58, 70, 7, 240, 165, 220, 131, 69, 3, 209, 212, ++ 248, 104, 1, 83, 240, 35, 218, 7, 155, 59, 185, 6, 241, 22, 1, 32, 70, ++ 15, 240, 224, 253, 1, 70, 8, 185, 10, 224, 7, 153, 139, 121, 59, 185, ++ 32, 70, 42, 70, 43, 70, 141, 232, 128, 1, 2, 150, 9, 240, 194, 216, ++ 185, 241, 0, 15, 29, 208, 218, 248, 248, 48, 155, 104, 15, 43, 24, 209, ++ 43, 70, 80, 70, 65, 70, 50, 70, 25, 240, 130, 217, 80, 70, 0, 33, 12, ++ 240, 56, 249, 35, 104, 147, 248, 47, 48, 35, 177, 212, 248, 8, 5, 35, ++ 240, 42, 218, 5, 224, 218, 248, 4, 49, 80, 70, 25, 122, 253, 247, 180, ++ 252, 11, 176, 189, 232, 240, 143, 45, 233, 240, 79, 31, 70, 155, 176, ++ 0, 35, 189, 104, 16, 145, 23, 147, 24, 147, 25, 147, 146, 70, 234, 136, ++ 4, 70, 144, 178, 6, 144, 186, 248, 4, 16, 0, 240, 12, 8, 13, 145, 1, ++ 240, 3, 1, 2, 41, 79, 234, 152, 8, 7, 209, 18, 178, 154, 66, 4, 218, ++ 195, 235, 8, 0, 67, 66, 67, 235, 0, 3, 219, 178, 8, 147, 186, 137, 8, ++ 152, 162, 241, 10, 3, 9, 147, 14, 146, 131, 0, 184, 241, 0, 15, 3, 209, ++ 9, 153, 23, 51, 139, 66, 11, 218, 6, 154, 2, 240, 252, 6, 148, 46, 3, ++ 208, 164, 46, 1, 208, 132, 46, 4, 209, 9, 155, 15, 43, 1, 220, 35, 104, ++ 236, 225, 171, 122, 19, 240, 1, 3, 11, 147, 10, 209, 32, 70, 5, 241, ++ 10, 1, 15, 240, 20, 253, 12, 144, 0, 48, 24, 191, 1, 32, 10, 144, 2, ++ 224, 0, 33, 12, 145, 10, 145, 184, 241, 0, 15, 69, 209, 11, 155, 5, ++ 241, 22, 2, 7, 146, 139, 185, 186, 248, 22, 48, 24, 170, 219, 178, 14, ++ 43, 0, 146, 32, 70, 5, 241, 10, 1, 5, 241, 16, 2, 148, 191, 0, 35, 1, ++ 35, 38, 240, 67, 251, 23, 144, 36, 224, 195, 70, 193, 70, 176, 70, 212, ++ 248, 104, 50, 83, 248, 11, 96, 174, 177, 6, 241, 188, 0, 7, 153, 6, ++ 34, 235, 247, 82, 251, 112, 185, 51, 124, 59, 177, 32, 70, 49, 70, 5, ++ 241, 16, 2, 38, 240, 36, 251, 23, 144, 32, 177, 51, 70, 24, 147, 70, ++ 70, 200, 70, 6, 224, 11, 241, 4, 11, 187, 241, 32, 15, 223, 209, 70, ++ 70, 200, 70, 24, 155, 25, 147, 75, 185, 32, 70, 7, 153, 15, 240, 21, ++ 253, 7, 144, 25, 144, 4, 224, 0, 32, 7, 144, 1, 224, 0, 33, 7, 145, ++ 212, 248, 8, 50, 27, 185, 35, 104, 147, 248, 44, 32, 10, 179, 148, 46, ++ 3, 208, 164, 46, 1, 208, 132, 46, 2, 209, 10, 154, 26, 187, 3, 224, ++ 128, 46, 32, 208, 80, 46, 30, 208, 184, 241, 0, 15, 64, 240, 224, 131, ++ 10, 155, 195, 185, 5, 241, 10, 0, 242, 247, 81, 251, 0, 40, 0, 240, ++ 215, 131, 25, 155, 123, 185, 5, 241, 22, 0, 242, 247, 72, 251, 80, 185, ++ 206, 227, 11, 152, 56, 185, 10, 153, 41, 185, 211, 248, 136, 48, 154, ++ 111, 1, 50, 154, 103, 196, 227, 212, 248, 8, 50, 99, 185, 25, 155, 11, ++ 185, 212, 248, 108, 50, 147, 248, 233, 32, 42, 177, 32, 70, 81, 70, ++ 58, 70, 219, 104, 249, 247, 210, 248, 184, 241, 1, 15, 14, 209, 196, ++ 46, 12, 208, 212, 46, 10, 208, 5, 241, 16, 0, 242, 247, 45, 251, 0, ++ 40, 64, 240, 167, 131, 43, 124, 217, 7, 0, 241, 163, 131, 187, 104, ++ 9, 154, 6, 51, 187, 96, 147, 178, 34, 104, 187, 129, 210, 248, 136, ++ 32, 5, 241, 6, 11, 209, 108, 32, 70, 1, 49, 209, 100, 23, 170, 141, ++ 232, 12, 0, 25, 169, 90, 70, 83, 70, 254, 247, 243, 255, 48, 177, 35, ++ 104, 211, 248, 136, 48, 218, 111, 1, 50, 218, 103, 131, 227, 23, 153, ++ 17, 177, 35, 104, 155, 106, 139, 98, 184, 241, 1, 15, 60, 209, 148, ++ 46, 4, 208, 164, 46, 2, 208, 132, 46, 64, 240, 117, 131, 187, 137, 184, ++ 104, 163, 241, 16, 5, 189, 129, 8, 157, 0, 241, 16, 2, 186, 96, 37, ++ 177, 0, 241, 20, 2, 20, 59, 186, 96, 187, 129, 164, 46, 187, 137, 14, ++ 209, 11, 105, 155, 121, 0, 43, 0, 240, 94, 131, 145, 248, 231, 48, 0, ++ 43, 0, 240, 89, 131, 32, 70, 6, 154, 10, 240, 181, 248, 83, 227, 32, ++ 104, 144, 248, 66, 80, 0, 45, 0, 240, 78, 131, 144, 248, 67, 0, 0, 40, ++ 0, 240, 73, 131, 132, 46, 2, 208, 148, 46, 64, 240, 68, 131, 32, 70, ++ 0, 150, 29, 240, 211, 218, 62, 227, 186, 248, 22, 48, 11, 154, 19, 244, ++ 64, 79, 12, 191, 0, 32, 1, 32, 15, 144, 0, 42, 64, 240, 132, 128, 171, ++ 139, 152, 178, 173, 248, 36, 48, 11, 144, 89, 185, 25, 155, 59, 177, ++ 25, 70, 32, 70, 5, 241, 16, 2, 15, 155, 38, 240, 55, 250, 0, 224, 8, ++ 70, 23, 144, 6, 155, 19, 244, 0, 99, 17, 147, 19, 208, 35, 104, 211, ++ 248, 136, 48, 211, 248, 76, 35, 1, 50, 195, 248, 76, 35, 23, 154, 74, ++ 177, 210, 248, 52, 18, 11, 152, 1, 49, 194, 248, 52, 18, 178, 248, 196, ++ 32, 130, 66, 51, 208, 23, 155, 195, 177, 189, 248, 36, 16, 163, 248, ++ 196, 16, 81, 224, 9, 241, 168, 8, 4, 235, 200, 8, 64, 70, 242, 247, ++ 125, 250, 128, 185, 5, 241, 16, 0, 65, 70, 6, 34, 235, 247, 39, 250, ++ 88, 177, 9, 241, 1, 9, 95, 250, 137, 249, 0, 224, 153, 70, 148, 248, ++ 144, 53, 75, 69, 230, 210, 79, 240, 0, 8, 17, 155, 171, 177, 35, 104, ++ 211, 248, 136, 48, 211, 248, 76, 35, 1, 50, 195, 248, 76, 35, 184, 241, ++ 0, 15, 13, 208, 184, 248, 6, 32, 11, 152, 130, 66, 32, 209, 211, 248, ++ 188, 33, 1, 50, 195, 248, 188, 33, 205, 226, 184, 241, 0, 15, 23, 209, ++ 148, 248, 144, 53, 5, 241, 16, 1, 3, 241, 168, 8, 4, 235, 200, 8, 1, ++ 51, 132, 248, 144, 53, 6, 34, 64, 70, 235, 247, 3, 250, 148, 248, 144, ++ 37, 10, 35, 178, 251, 243, 241, 3, 251, 17, 35, 132, 248, 144, 53, 189, ++ 248, 36, 16, 168, 248, 6, 16, 10, 154, 90, 177, 24, 155, 75, 177, 25, ++ 152, 131, 121, 51, 185, 208, 248, 4, 49, 27, 123, 19, 177, 6, 153, 9, ++ 240, 182, 216, 186, 104, 187, 137, 8, 152, 2, 241, 24, 9, 163, 241, ++ 24, 1, 199, 248, 8, 144, 185, 129, 40, 177, 2, 241, 28, 9, 28, 59, 199, ++ 248, 8, 144, 187, 129, 13, 153, 192, 46, 193, 243, 192, 17, 8, 145, ++ 187, 137, 3, 208, 208, 46, 1, 208, 160, 46, 17, 209, 205, 248, 0, 176, ++ 1, 151, 212, 248, 100, 6, 25, 153, 23, 154, 83, 70, 71, 240, 130, 218, ++ 0, 40, 0, 240, 120, 130, 215, 248, 8, 144, 183, 248, 12, 128, 22, 224, ++ 6, 154, 152, 70, 82, 4, 18, 213, 7, 43, 35, 104, 5, 220, 211, 248, 136, ++ 48, 90, 110, 1, 50, 90, 102, 101, 226, 176, 46, 49, 208, 211, 248, 136, ++ 48, 211, 248, 220, 33, 1, 50, 195, 248, 220, 33, 91, 226, 80, 46, 0, ++ 240, 230, 128, 16, 216, 32, 46, 0, 240, 37, 130, 6, 216, 0, 46, 0, 240, ++ 33, 130, 16, 46, 64, 240, 78, 130, 120, 224, 48, 46, 118, 208, 64, 46, ++ 64, 240, 72, 130, 134, 224, 176, 46, 14, 208, 6, 216, 128, 46, 0, 240, ++ 14, 129, 160, 46, 64, 240, 62, 130, 23, 225, 192, 46, 0, 240, 121, 129, ++ 208, 46, 64, 240, 55, 130, 35, 226, 184, 241, 5, 15, 64, 243, 44, 130, ++ 35, 104, 147, 248, 102, 49, 27, 177, 185, 248, 0, 48, 3, 43, 9, 208, ++ 185, 248, 2, 48, 1, 43, 5, 209, 32, 70, 5, 241, 22, 1, 15, 240, 16, ++ 251, 25, 144, 25, 153, 0, 41, 0, 240, 28, 130, 139, 121, 0, 43, 52, ++ 208, 11, 121, 0, 43, 0, 240, 21, 130, 23, 155, 243, 177, 154, 104, 144, ++ 5, 27, 213, 147, 248, 36, 32, 210, 7, 23, 213, 216, 104, 3, 241, 20, ++ 4, 209, 248, 240, 32, 24, 177, 5, 105, 0, 45, 8, 191, 0, 32, 3, 144, ++ 32, 32, 0, 37, 2, 38, 5, 144, 8, 70, 33, 70, 141, 232, 96, 0, 2, 149, ++ 4, 149, 254, 247, 160, 251, 243, 225, 8, 157, 205, 248, 0, 128, 1, 149, ++ 186, 248, 16, 48, 90, 70, 3, 240, 8, 3, 2, 147, 212, 248, 8, 5, 75, ++ 70, 8, 240, 222, 252, 227, 225, 212, 248, 56, 51, 147, 249, 52, 48, ++ 0, 43, 0, 240, 221, 129, 8, 157, 8, 70, 74, 70, 89, 70, 67, 70, 0, 149, ++ 12, 240, 146, 255, 211, 225, 184, 241, 5, 15, 64, 243, 202, 129, 25, ++ 152, 0, 40, 0, 240, 204, 129, 131, 121, 0, 43, 64, 240, 200, 129, 23, ++ 153, 90, 70, 75, 70, 205, 248, 0, 128, 12, 240, 144, 253, 191, 225, ++ 212, 248, 124, 2, 44, 33, 58, 240, 16, 220, 128, 177, 0, 35, 0, 147, ++ 1, 147, 2, 147, 8, 241, 24, 3, 4, 147, 205, 248, 12, 176, 32, 70, 212, ++ 248, 108, 18, 44, 34, 5, 241, 16, 3, 13, 240, 254, 221, 212, 248, 124, ++ 2, 137, 33, 58, 240, 249, 219, 192, 177, 19, 174, 32, 70, 81, 70, 42, ++ 70, 51, 70, 248, 247, 219, 255, 0, 35, 0, 147, 1, 147, 2, 147, 8, 241, ++ 24, 3, 4, 147, 205, 248, 12, 176, 5, 150, 32, 70, 212, 248, 108, 18, ++ 137, 34, 5, 241, 16, 3, 13, 240, 241, 221, 32, 70, 81, 70, 42, 70, 91, ++ 70, 205, 248, 0, 144, 205, 248, 4, 128, 10, 240, 157, 220, 0, 35, 2, ++ 147, 205, 248, 0, 160, 1, 149, 212, 248, 80, 1, 89, 70, 74, 70, 67, ++ 70, 75, 240, 151, 219, 114, 225, 184, 241, 11, 15, 64, 243, 105, 129, ++ 35, 104, 147, 248, 21, 49, 123, 177, 148, 248, 1, 55, 99, 185, 212, ++ 248, 92, 1, 56, 240, 15, 220, 56, 177, 32, 70, 81, 70, 90, 70, 75, 70, ++ 205, 248, 0, 128, 6, 240, 194, 216, 91, 70, 32, 70, 81, 70, 42, 70, ++ 205, 248, 0, 144, 205, 248, 4, 128, 10, 240, 112, 220, 212, 248, 80, ++ 1, 73, 70, 66, 70, 75, 240, 86, 221, 212, 248, 104, 49, 0, 43, 0, 240, ++ 70, 129, 155, 121, 0, 43, 0, 240, 66, 129, 10, 152, 0, 40, 0, 240, 62, ++ 129, 32, 70, 81, 70, 42, 70, 91, 70, 205, 248, 0, 144, 205, 248, 4, ++ 128, 249, 247, 57, 249, 50, 225, 1, 35, 1, 149, 14, 157, 3, 147, 32, ++ 70, 16, 153, 24, 154, 7, 155, 205, 248, 0, 160, 2, 149, 255, 247, 87, ++ 251, 36, 225, 184, 241, 1, 15, 64, 243, 27, 129, 25, 155, 0, 43, 0, ++ 240, 29, 129, 154, 121, 185, 248, 0, 96, 90, 187, 32, 70, 23, 153, 22, ++ 240, 74, 217, 23, 152, 144, 248, 36, 48, 155, 7, 20, 213, 2, 33, 83, ++ 240, 6, 219, 23, 155, 147, 248, 36, 32, 18, 240, 8, 2, 11, 209, 32, ++ 70, 25, 153, 5, 241, 16, 3, 0, 150, 1, 146, 205, 248, 8, 144, 205, 248, ++ 12, 128, 41, 240, 52, 218, 24, 155, 0, 43, 0, 240, 247, 128, 25, 152, ++ 208, 248, 248, 48, 155, 104, 11, 177, 40, 240, 127, 216, 25, 152, 3, ++ 33, 157, 224, 23, 153, 10, 105, 154, 66, 64, 240, 232, 128, 32, 70, ++ 22, 240, 26, 217, 23, 152, 144, 248, 36, 48, 153, 7, 26, 213, 18, 33, ++ 83, 240, 214, 218, 0, 34, 5, 241, 16, 3, 32, 70, 25, 153, 1, 146, 0, ++ 150, 205, 248, 8, 144, 205, 248, 12, 128, 41, 240, 9, 218, 25, 155, ++ 154, 121, 0, 42, 0, 240, 150, 128, 211, 248, 204, 48, 154, 4, 0, 241, ++ 198, 128, 143, 224, 16, 33, 83, 240, 187, 218, 192, 224, 184, 241, 1, ++ 15, 64, 243, 183, 128, 25, 158, 38, 185, 12, 152, 0, 40, 0, 240, 183, ++ 128, 6, 70, 23, 155, 185, 248, 0, 160, 59, 185, 32, 70, 49, 70, 5, 241, ++ 16, 2, 15, 155, 37, 240, 190, 255, 23, 144, 23, 153, 17, 177, 32, 70, ++ 22, 240, 218, 216, 179, 121, 23, 152, 0, 43, 84, 209, 0, 40, 59, 208, ++ 18, 33, 83, 240, 149, 218, 23, 152, 144, 248, 36, 48, 219, 7, 2, 212, ++ 67, 104, 153, 0, 48, 213, 1, 33, 83, 240, 138, 218, 170, 241, 13, 3, ++ 155, 178, 9, 43, 7, 216, 35, 104, 211, 248, 136, 48, 211, 248, 248, ++ 33, 1, 50, 195, 248, 248, 33, 14, 34, 212, 248, 188, 6, 49, 70, 86, ++ 240, 151, 222, 23, 155, 147, 248, 36, 32, 18, 240, 4, 2, 15, 209, 205, ++ 248, 0, 160, 91, 104, 32, 70, 195, 243, 64, 115, 1, 147, 49, 70, 5, ++ 241, 16, 3, 205, 248, 8, 144, 205, 248, 12, 128, 41, 240, 175, 216, ++ 23, 155, 90, 104, 34, 240, 0, 82, 90, 96, 24, 155, 0, 43, 95, 208, 25, ++ 152, 3, 124, 0, 43, 91, 208, 208, 248, 248, 48, 90, 104, 155, 104, 2, ++ 42, 1, 209, 10, 43, 83, 216, 11, 177, 39, 240, 224, 223, 25, 152, 2, ++ 33, 11, 240, 114, 255, 75, 224, 0, 40, 73, 208, 3, 105, 179, 66, 70, ++ 209, 144, 248, 36, 48, 218, 7, 66, 213, 0, 34, 32, 70, 49, 70, 5, 241, ++ 16, 3, 205, 248, 0, 160, 1, 146, 205, 248, 8, 144, 205, 248, 12, 128, ++ 41, 240, 124, 216, 32, 70, 23, 153, 83, 240, 132, 222, 47, 224, 184, ++ 241, 3, 15, 38, 221, 25, 153, 81, 179, 11, 121, 67, 179, 139, 121, 51, ++ 179, 5, 241, 22, 0, 188, 49, 6, 34, 234, 247, 85, 255, 248, 185, 23, ++ 155, 8, 157, 1, 147, 205, 248, 0, 128, 2, 149, 212, 248, 8, 5, 25, 153, ++ 90, 70, 75, 70, 8, 240, 120, 254, 17, 224, 32, 70, 23, 153, 90, 70, ++ 75, 70, 141, 232, 0, 5, 2, 149, 3, 151, 254, 247, 136, 254, 48, 177, ++ 10, 224, 35, 104, 211, 248, 136, 48, 26, 111, 1, 50, 26, 103, 16, 152, ++ 57, 70, 0, 34, 243, 247, 18, 255, 27, 176, 189, 232, 240, 143, 112, ++ 181, 144, 248, 46, 50, 0, 37, 4, 70, 128, 248, 184, 87, 51, 177, 128, ++ 104, 212, 248, 236, 17, 1, 240, 22, 223, 132, 248, 46, 82, 32, 70, 254, ++ 247, 148, 255, 0, 35, 132, 248, 208, 55, 32, 70, 166, 104, 212, 248, ++ 236, 81, 12, 240, 24, 217, 1, 35, 2, 70, 41, 70, 48, 70, 1, 240, 220, ++ 222, 1, 35, 132, 248, 46, 50, 112, 189, 45, 233, 240, 79, 139, 137, ++ 137, 176, 13, 43, 6, 70, 15, 70, 146, 70, 13, 217, 16, 224, 114, 75, ++ 250, 138, 27, 104, 57, 70, 83, 248, 34, 64, 0, 35, 251, 130, 112, 104, ++ 1, 34, 243, 247, 212, 254, 39, 70, 0, 47, 240, 209, 1, 32, 202, 225, ++ 67, 104, 17, 70, 7, 147, 15, 240, 104, 248, 48, 70, 81, 70, 215, 248, ++ 8, 176, 15, 240, 98, 248, 5, 70, 186, 241, 0, 15, 1, 209, 208, 248, ++ 12, 160, 51, 104, 147, 248, 176, 48, 43, 177, 214, 248, 144, 1, 41, ++ 70, 58, 70, 26, 240, 84, 219, 154, 248, 4, 48, 2, 43, 5, 209, 218, 248, ++ 16, 64, 20, 241, 20, 8, 31, 209, 0, 224, 0, 36, 43, 121, 0, 43, 0, 240, ++ 135, 128, 171, 121, 67, 185, 5, 241, 188, 0, 241, 247, 11, 255, 24, ++ 177, 126, 224, 71, 70, 0, 32, 147, 225, 170, 121, 26, 177, 217, 70, ++ 79, 240, 0, 8, 9, 224, 43, 124, 27, 177, 5, 241, 188, 9, 144, 70, 3, ++ 224, 217, 70, 152, 70, 0, 224, 193, 70, 213, 248, 244, 48, 91, 142, ++ 3, 244, 64, 67, 163, 245, 64, 66, 83, 66, 67, 235, 2, 3, 6, 147, 184, ++ 241, 0, 15, 46, 209, 171, 121, 99, 179, 153, 248, 0, 48, 219, 7, 40, ++ 213, 187, 248, 12, 48, 26, 10, 66, 234, 3, 35, 27, 178, 6, 43, 32, 209, ++ 187, 105, 216, 5, 29, 213, 48, 70, 41, 70, 11, 241, 6, 2, 6, 155, 37, ++ 240, 96, 254, 4, 70, 160, 177, 8, 35, 1, 147, 48, 70, 41, 70, 12, 34, ++ 4, 241, 20, 3, 205, 248, 0, 128, 205, 248, 8, 128, 205, 248, 12, 128, ++ 205, 248, 16, 128, 13, 240, 143, 219, 48, 70, 33, 70, 83, 240, 137, ++ 221, 187, 105, 35, 244, 128, 115, 187, 97, 184, 241, 0, 15, 15, 209, ++ 43, 124, 107, 177, 153, 248, 0, 48, 217, 7, 9, 212, 48, 70, 41, 70, ++ 74, 70, 6, 155, 37, 240, 54, 254, 4, 70, 0, 40, 66, 209, 23, 224, 153, ++ 248, 0, 48, 218, 7, 26, 213, 213, 248, 204, 48, 91, 5, 15, 212, 213, ++ 248, 244, 48, 91, 142, 3, 244, 64, 67, 163, 245, 64, 64, 67, 66, 67, ++ 235, 0, 3, 14, 51, 5, 235, 131, 3, 92, 104, 0, 44, 41, 209, 51, 104, ++ 211, 248, 136, 48, 90, 106, 1, 50, 90, 98, 122, 231, 12, 187, 48, 70, ++ 41, 70, 74, 70, 6, 155, 37, 240, 12, 254, 4, 70, 200, 185, 48, 70, 41, ++ 70, 74, 70, 6, 155, 37, 240, 183, 254, 4, 70, 104, 185, 51, 104, 211, ++ 248, 136, 48, 26, 106, 1, 50, 26, 98, 218, 248, 32, 48, 1, 51, 202, ++ 248, 32, 48, 93, 231, 32, 7, 0, 0, 48, 70, 33, 70, 83, 240, 218, 220, ++ 48, 70, 57, 70, 34, 70, 246, 247, 139, 254, 128, 70, 0, 40, 63, 244, ++ 79, 175, 149, 248, 37, 51, 187, 185, 42, 109, 64, 242, 55, 19, 19, 64, ++ 147, 177, 81, 6, 16, 212, 131, 105, 218, 6, 13, 212, 0, 43, 11, 219, ++ 227, 104, 75, 185, 171, 110, 88, 28, 63, 244, 57, 175, 5, 235, 131, ++ 3, 219, 110, 0, 43, 63, 244, 51, 175, 149, 248, 68, 48, 200, 248, 40, ++ 64, 136, 248, 33, 48, 51, 104, 147, 248, 69, 48, 19, 179, 184, 248, ++ 14, 48, 97, 79, 3, 240, 7, 3, 223, 248, 132, 145, 251, 92, 214, 248, ++ 100, 1, 25, 248, 3, 16, 34, 70, 52, 240, 153, 216, 0, 40, 63, 244, 23, ++ 175, 171, 121, 115, 177, 35, 125, 217, 7, 11, 212, 184, 248, 14, 48, ++ 214, 248, 100, 1, 3, 240, 7, 3, 251, 92, 34, 70, 25, 248, 3, 16, 52, ++ 240, 135, 217, 216, 248, 24, 48, 154, 5, 23, 212, 99, 104, 19, 240, ++ 64, 3, 7, 208, 184, 248, 14, 48, 76, 74, 3, 240, 7, 3, 211, 92, 75, ++ 74, 211, 92, 166, 51, 86, 248, 35, 144, 185, 241, 0, 15, 7, 208, 48, ++ 70, 65, 70, 74, 70, 246, 247, 164, 252, 1, 224, 79, 240, 0, 9, 216, ++ 248, 24, 48, 67, 240, 128, 67, 200, 248, 24, 48, 213, 248, 4, 49, 147, ++ 248, 72, 48, 83, 177, 65, 70, 112, 104, 241, 247, 56, 253, 0, 33, 0, ++ 144, 1, 34, 40, 70, 11, 70, 76, 240, 55, 219, 184, 248, 14, 48, 56, ++ 74, 3, 240, 7, 3, 18, 248, 3, 176, 212, 248, 52, 49, 26, 122, 7, 42, ++ 6, 209, 29, 104, 88, 104, 33, 70, 66, 70, 91, 70, 168, 71, 33, 224, ++ 48, 75, 69, 70, 234, 138, 27, 104, 83, 248, 34, 128, 0, 35, 235, 130, ++ 235, 137, 35, 244, 128, 83, 235, 129, 184, 241, 0, 15, 7, 208, 48, 70, ++ 33, 70, 42, 70, 67, 70, 205, 248, 0, 144, 19, 240, 111, 223, 212, 248, ++ 52, 49, 33, 70, 31, 104, 88, 104, 42, 70, 91, 70, 184, 71, 184, 241, ++ 0, 15, 221, 209, 48, 70, 218, 248, 12, 16, 251, 247, 62, 250, 0, 32, ++ 46, 224, 28, 75, 250, 138, 27, 104, 83, 248, 34, 64, 0, 35, 251, 130, ++ 251, 137, 50, 104, 35, 244, 128, 83, 27, 4, 81, 107, 27, 12, 251, 129, ++ 169, 177, 17, 73, 3, 240, 7, 3, 203, 92, 16, 73, 210, 248, 140, 32, ++ 205, 92, 7, 152, 4, 53, 2, 235, 197, 5, 107, 104, 57, 70, 1, 51, 107, ++ 96, 213, 248, 8, 128, 241, 247, 209, 252, 64, 68, 168, 96, 7, 152, 57, ++ 70, 1, 34, 243, 247, 8, 253, 39, 70, 1, 32, 0, 47, 208, 209, 9, 176, ++ 189, 232, 240, 143, 0, 191, 138, 182, 135, 0, 84, 194, 135, 0, 72, 194, ++ 135, 0, 32, 7, 0, 0, 45, 233, 240, 79, 141, 176, 22, 156, 7, 146, 212, ++ 248, 8, 128, 155, 70, 184, 248, 12, 48, 208, 248, 4, 144, 26, 10, 66, ++ 234, 3, 35, 14, 105, 155, 178, 5, 70, 15, 70, 72, 70, 33, 70, 4, 147, ++ 241, 247, 162, 252, 5, 144, 4, 152, 176, 245, 1, 79, 53, 209, 30, 177, ++ 150, 248, 37, 51, 0, 43, 73, 209, 213, 248, 84, 50, 0, 43, 69, 208, ++ 184, 248, 14, 48, 26, 10, 66, 234, 3, 34, 146, 178, 19, 5, 27, 13, 0, ++ 43, 59, 209, 227, 137, 65, 70, 35, 240, 7, 3, 67, 234, 82, 50, 226, ++ 129, 8, 168, 12, 34, 234, 247, 237, 252, 163, 104, 162, 137, 3, 241, ++ 4, 8, 4, 58, 162, 129, 196, 248, 8, 128, 27, 138, 33, 70, 26, 10, 66, ++ 234, 3, 35, 155, 178, 72, 70, 4, 147, 241, 247, 109, 252, 8, 169, 5, ++ 144, 12, 34, 64, 70, 234, 247, 213, 252, 4, 153, 72, 246, 108, 3, 153, ++ 66, 19, 209, 0, 34, 64, 70, 5, 153, 19, 70, 241, 247, 230, 250, 30, ++ 48, 11, 208, 0, 34, 72, 70, 33, 70, 243, 247, 147, 252, 43, 104, 211, ++ 248, 136, 48, 26, 111, 1, 50, 26, 103, 29, 225, 152, 248, 0, 48, 3, ++ 240, 1, 3, 6, 147, 179, 121, 0, 43, 0, 240, 153, 128, 6, 154, 40, 70, ++ 0, 146, 49, 70, 58, 70, 35, 70, 5, 240, 77, 218, 0, 40, 64, 240, 10, ++ 129, 7, 155, 19, 185, 214, 248, 12, 160, 0, 224, 130, 70, 150, 248, ++ 59, 48, 216, 7, 0, 241, 131, 128, 7, 152, 0, 40, 127, 209, 6, 153, 81, ++ 179, 153, 7, 4, 213, 88, 70, 241, 247, 195, 252, 0, 40, 118, 208, 214, ++ 248, 204, 48, 154, 4, 19, 213, 88, 70, 241, 247, 186, 252, 120, 185, ++ 150, 248, 69, 48, 99, 185, 213, 248, 8, 50, 75, 185, 43, 104, 147, 248, ++ 44, 48, 43, 185, 48, 70, 89, 70, 48, 240, 93, 216, 0, 40, 88, 209, 33, ++ 70, 72, 70, 243, 247, 99, 252, 1, 70, 0, 40, 87, 208, 40, 70, 82, 70, ++ 10, 240, 28, 221, 82, 224, 182, 248, 196, 48, 184, 248, 2, 32, 184, ++ 248, 0, 16, 90, 64, 182, 248, 194, 48, 75, 64, 26, 67, 184, 248, 4, ++ 16, 182, 248, 198, 48, 75, 64, 19, 67, 155, 178, 0, 43, 62, 208, 40, ++ 70, 49, 70, 66, 70, 37, 240, 28, 252, 0, 40, 55, 208, 144, 248, 36, ++ 48, 155, 7, 51, 213, 43, 104, 90, 107, 202, 177, 226, 137, 87, 73, 2, ++ 240, 7, 2, 138, 92, 86, 73, 211, 248, 140, 48, 138, 92, 72, 70, 16, ++ 50, 3, 235, 194, 2, 81, 104, 19, 29, 1, 49, 81, 96, 33, 70, 210, 248, ++ 8, 176, 3, 147, 241, 247, 198, 251, 3, 155, 88, 68, 88, 96, 43, 104, ++ 147, 248, 44, 48, 99, 177, 33, 70, 72, 70, 243, 247, 23, 252, 1, 70, ++ 48, 177, 40, 70, 82, 70, 10, 240, 209, 220, 79, 240, 0, 9, 7, 224, 40, ++ 70, 33, 70, 82, 70, 10, 240, 201, 220, 123, 224, 79, 240, 1, 9, 42, ++ 104, 5, 152, 210, 248, 136, 48, 25, 108, 1, 49, 25, 100, 89, 108, 9, ++ 24, 89, 100, 213, 248, 8, 53, 19, 177, 89, 105, 1, 49, 89, 97, 215, ++ 248, 248, 48, 19, 185, 57, 105, 201, 104, 0, 224, 25, 70, 8, 108, 1, ++ 48, 8, 100, 11, 185, 59, 105, 219, 104, 89, 108, 5, 152, 9, 24, 89, ++ 100, 83, 107, 139, 177, 227, 137, 44, 73, 3, 240, 7, 3, 203, 92, 43, ++ 73, 210, 248, 140, 32, 203, 92, 8, 51, 2, 235, 195, 3, 90, 104, 1, 50, ++ 90, 96, 154, 104, 130, 24, 154, 96, 4, 153, 72, 246, 142, 3, 153, 66, ++ 3, 208, 72, 246, 180, 3, 153, 66, 7, 209, 40, 70, 33, 70, 58, 70, 51, ++ 70, 205, 248, 0, 128, 13, 240, 90, 216, 43, 104, 90, 107, 26, 185, 147, ++ 248, 79, 48, 152, 7, 6, 208, 225, 137, 17, 240, 7, 1, 2, 209, 32, 70, ++ 241, 247, 12, 252, 6, 154, 210, 185, 215, 248, 164, 49, 153, 4, 22, ++ 213, 185, 241, 0, 15, 19, 208, 178, 121, 213, 248, 96, 22, 56, 105, ++ 0, 42, 20, 191, 24, 34, 0, 34, 139, 24, 136, 80, 226, 137, 10, 73, 2, ++ 240, 7, 2, 154, 129, 138, 92, 9, 73, 95, 96, 138, 92, 26, 117, 251, ++ 105, 40, 70, 1, 51, 251, 97, 49, 70, 58, 70, 35, 70, 22, 240, 20, 218, ++ 13, 176, 189, 232, 240, 143, 0, 191, 138, 182, 135, 0, 84, 194, 135, ++ 0, 45, 233, 240, 79, 194, 104, 147, 176, 210, 248, 128, 33, 0, 35, 15, ++ 146, 208, 248, 96, 38, 4, 70, 19, 99, 146, 248, 52, 32, 173, 248, 68, ++ 48, 213, 26, 106, 66, 66, 235, 5, 2, 1, 37, 14, 145, 141, 248, 71, 32, ++ 12, 149, 8, 147, 154, 70, 7, 147, 9, 147, 31, 70, 11, 145, 231, 225, ++ 158, 104, 15, 154, 49, 138, 178, 97, 212, 248, 200, 5, 17, 240, 4, 2, ++ 14, 153, 24, 191, 2, 34, 18, 24, 136, 104, 128, 24, 136, 96, 153, 137, ++ 211, 248, 8, 128, 138, 26, 154, 129, 65, 70, 48, 70, 32, 240, 62, 255, ++ 14, 153, 131, 70, 141, 104, 139, 137, 175, 29, 6, 59, 26, 32, 139, 129, ++ 173, 248, 66, 0, 143, 96, 96, 104, 10, 151, 241, 247, 225, 250, 13, ++ 144, 115, 138, 216, 7, 4, 212, 96, 104, 14, 153, 4, 34, 240, 243, 178, ++ 244, 235, 136, 212, 248, 96, 38, 19, 244, 128, 115, 24, 191, 24, 35, ++ 210, 24, 87, 104, 14, 155, 13, 152, 159, 98, 215, 248, 96, 49, 57, 70, ++ 1, 51, 199, 248, 96, 49, 7, 146, 241, 233, 100, 35, 18, 24, 67, 241, ++ 0, 3, 193, 233, 0, 35, 152, 248, 1, 32, 152, 248, 0, 48, 215, 248, 16, ++ 160, 19, 67, 152, 248, 2, 32, 26, 67, 7, 208, 212, 248, 96, 1, 89, 70, ++ 114, 138, 37, 240, 45, 252, 199, 248, 108, 177, 154, 248, 6, 48, 0, ++ 43, 86, 209, 218, 248, 252, 32, 49, 70, 147, 113, 35, 105, 211, 248, ++ 148, 48, 88, 106, 22, 240, 196, 253, 32, 70, 49, 70, 65, 240, 247, 216, ++ 128, 70, 152, 177, 65, 70, 150, 249, 29, 32, 1, 35, 80, 70, 65, 240, ++ 78, 217, 49, 70, 212, 248, 172, 38, 32, 70, 65, 240, 140, 216, 129, ++ 70, 73, 70, 80, 70, 1, 34, 65, 240, 144, 217, 0, 224, 129, 70, 14, 155, ++ 12, 153, 131, 248, 35, 128, 131, 248, 34, 144, 81, 179, 27, 240, 64, ++ 127, 88, 70, 1, 208, 32, 240, 173, 253, 0, 240, 127, 2, 2, 42, 9, 208, ++ 4, 42, 7, 208, 11, 42, 5, 208, 162, 241, 22, 1, 74, 66, 66, 235, 1, ++ 2, 0, 224, 1, 34, 79, 240, 0, 8, 241, 136, 150, 249, 28, 48, 205, 248, ++ 0, 128, 1, 146, 178, 136, 32, 70, 146, 11, 2, 146, 9, 10, 66, 70, 205, ++ 248, 12, 128, 205, 248, 16, 160, 40, 240, 70, 255, 205, 248, 48, 128, ++ 235, 136, 223, 248, 164, 131, 19, 244, 128, 79, 8, 209, 218, 248, 80, ++ 32, 64, 242, 55, 19, 19, 64, 147, 177, 154, 248, 88, 48, 123, 177, 7, ++ 155, 10, 154, 1, 147, 13, 241, 66, 3, 0, 146, 2, 147, 32, 70, 57, 70, ++ 14, 154, 51, 70, 245, 247, 76, 255, 0, 40, 64, 240, 215, 128, 7, 152, ++ 41, 127, 130, 137, 104, 127, 7, 235, 66, 3, 65, 234, 0, 33, 163, 248, ++ 180, 16, 14, 155, 216, 248, 0, 16, 216, 138, 2, 240, 7, 2, 81, 248, ++ 32, 176, 217, 137, 212, 248, 56, 1, 33, 240, 7, 1, 10, 67, 218, 129, ++ 177, 136, 58, 70, 1, 240, 3, 1, 10, 155, 6, 240, 183, 252, 14, 153, ++ 139, 105, 138, 104, 19, 240, 128, 15, 189, 248, 66, 48, 21, 208, 210, ++ 24, 138, 96, 138, 137, 212, 248, 48, 1, 211, 26, 139, 129, 13, 241, ++ 71, 3, 141, 232, 136, 0, 0, 35, 2, 147, 14, 169, 7, 154, 17, 171, 7, ++ 240, 3, 250, 0, 40, 64, 240, 154, 128, 147, 224, 2, 235, 3, 9, 211, ++ 92, 170, 43, 51, 209, 153, 248, 1, 48, 170, 43, 47, 209, 153, 248, 2, ++ 48, 3, 43, 43, 209, 153, 248, 3, 48, 67, 187, 153, 248, 4, 48, 43, 187, ++ 153, 248, 5, 48, 75, 185, 185, 248, 6, 48, 32, 70, 25, 10, 65, 234, ++ 3, 33, 137, 178, 245, 247, 200, 250, 104, 177, 153, 248, 5, 48, 248, ++ 43, 20, 209, 185, 248, 6, 48, 32, 70, 25, 10, 65, 234, 3, 33, 137, 178, ++ 245, 247, 186, 250, 80, 177, 14, 154, 189, 248, 66, 16, 147, 104, 144, ++ 137, 6, 57, 91, 24, 65, 26, 147, 96, 145, 129, 18, 224, 14, 154, 189, ++ 248, 66, 16, 144, 137, 161, 241, 14, 14, 147, 104, 65, 26, 137, 178, ++ 115, 68, 206, 235, 0, 14, 8, 10, 64, 234, 1, 33, 147, 96, 162, 248, ++ 12, 224, 153, 129, 234, 136, 210, 5, 11, 212, 233, 138, 217, 128, 42, ++ 139, 26, 129, 104, 139, 88, 129, 233, 137, 153, 128, 170, 137, 90, 128, ++ 109, 137, 10, 224, 40, 138, 216, 128, 105, 138, 25, 129, 170, 138, 90, ++ 129, 104, 139, 152, 128, 41, 139, 89, 128, 237, 138, 29, 128, 157, 248, ++ 71, 32, 98, 177, 154, 137, 8, 42, 6, 208, 77, 246, 134, 81, 85, 26, ++ 106, 66, 66, 235, 5, 2, 0, 224, 1, 34, 141, 248, 71, 32, 1, 147, 15, ++ 171, 2, 147, 189, 248, 66, 48, 10, 157, 3, 147, 32, 70, 81, 70, 14, ++ 154, 51, 70, 0, 149, 250, 247, 224, 253, 144, 185, 14, 155, 9, 157, ++ 218, 137, 13, 152, 66, 244, 128, 82, 218, 129, 189, 248, 68, 48, 45, ++ 24, 1, 51, 173, 248, 68, 48, 9, 149, 14, 157, 205, 248, 56, 176, 8, ++ 149, 57, 224, 14, 157, 216, 248, 0, 32, 235, 138, 8, 152, 82, 248, 35, ++ 48, 32, 177, 3, 177, 27, 136, 8, 153, 203, 130, 0, 224, 11, 147, 234, ++ 138, 216, 248, 0, 48, 7, 152, 83, 248, 34, 48, 0, 34, 14, 147, 235, ++ 137, 234, 130, 35, 244, 128, 83, 235, 129, 35, 104, 2, 125, 211, 248, ++ 140, 48, 12, 50, 3, 235, 194, 2, 81, 104, 1, 49, 81, 96, 6, 125, 41, ++ 70, 12, 54, 3, 235, 198, 6, 96, 104, 214, 248, 8, 128, 241, 247, 43, ++ 249, 64, 68, 176, 96, 41, 70, 96, 104, 0, 34, 243, 247, 98, 249, 11, ++ 157, 0, 45, 0, 240, 160, 128, 14, 155, 0, 43, 127, 244, 20, 174, 157, ++ 248, 71, 80, 184, 70, 11, 158, 0, 45, 115, 208, 32, 104, 189, 248, 68, ++ 16, 208, 248, 136, 32, 9, 159, 210, 248, 24, 51, 194, 248, 28, 19, 139, ++ 66, 44, 191, 194, 248, 24, 51, 194, 248, 24, 19, 19, 108, 208, 248, ++ 140, 80, 91, 24, 19, 100, 83, 108, 219, 25, 7, 159, 83, 100, 59, 125, ++ 8, 51, 5, 235, 195, 3, 95, 104, 207, 25, 95, 96, 7, 159, 59, 125, 9, ++ 159, 8, 51, 5, 235, 195, 3, 157, 104, 125, 25, 157, 96, 212, 248, 8, ++ 53, 19, 177, 93, 105, 109, 24, 93, 97, 218, 248, 12, 48, 9, 159, 29, ++ 108, 128, 106, 109, 24, 29, 100, 93, 108, 237, 25, 93, 100, 200, 248, ++ 40, 0, 210, 248, 12, 3, 65, 24, 194, 248, 12, 19, 160, 104, 153, 104, ++ 50, 70, 1, 35, 244, 247, 226, 252, 78, 224, 41, 75, 242, 138, 27, 104, ++ 0, 32, 83, 248, 34, 112, 240, 130, 96, 104, 49, 70, 241, 247, 196, 248, ++ 142, 40, 22, 216, 175, 177, 96, 104, 57, 70, 241, 247, 189, 248, 142, ++ 40, 15, 216, 32, 70, 49, 70, 58, 70, 245, 247, 26, 252, 72, 177, 243, ++ 137, 96, 104, 35, 244, 128, 83, 243, 129, 49, 70, 0, 34, 243, 247, 234, ++ 248, 6, 224, 29, 177, 49, 136, 233, 130, 53, 70, 1, 224, 53, 70, 176, ++ 70, 62, 70, 0, 224, 168, 70, 0, 46, 207, 209, 67, 70, 26, 224, 16, 74, ++ 217, 138, 18, 104, 32, 70, 82, 248, 33, 80, 0, 34, 218, 130, 218, 137, ++ 34, 244, 128, 82, 218, 129, 34, 104, 210, 248, 136, 32, 210, 248, 16, ++ 19, 1, 49, 194, 248, 16, 19, 0, 147, 153, 106, 0, 34, 155, 104, 255, ++ 247, 201, 251, 43, 70, 0, 43, 226, 209, 19, 176, 189, 232, 240, 143, ++ 0, 191, 32, 7, 0, 0, 45, 233, 240, 79, 147, 139, 14, 105, 141, 176, ++ 7, 70, 13, 70, 20, 70, 208, 248, 4, 160, 195, 243, 128, 43, 46, 177, ++ 150, 248, 37, 35, 0, 42, 24, 191, 79, 240, 0, 11, 148, 248, 42, 32, ++ 18, 177, 148, 248, 34, 128, 0, 224, 144, 70, 148, 248, 44, 32, 226, ++ 185, 24, 5, 26, 213, 59, 104, 211, 248, 136, 48, 211, 248, 76, 35, 1, ++ 50, 195, 248, 76, 35, 213, 248, 52, 34, 1, 50, 197, 248, 52, 34, 5, ++ 235, 72, 2, 178, 248, 180, 16, 180, 248, 126, 32, 145, 66, 5, 209, 211, ++ 248, 188, 33, 1, 50, 195, 248, 188, 33, 127, 227, 179, 121, 147, 187, ++ 214, 248, 4, 145, 153, 248, 12, 48, 131, 177, 148, 248, 44, 48, 107, ++ 185, 187, 241, 0, 15, 10, 209, 149, 248, 218, 32, 99, 106, 82, 250, ++ 3, 243, 217, 7, 3, 212, 48, 70, 161, 139, 7, 240, 100, 223, 59, 104, ++ 91, 107, 203, 177, 153, 248, 28, 48, 179, 177, 148, 248, 42, 48, 155, ++ 177, 148, 248, 40, 48, 131, 177, 0, 33, 48, 70, 22, 240, 188, 217, 214, ++ 248, 204, 48, 154, 4, 8, 213, 162, 139, 18, 244, 0, 82, 4, 209, 215, ++ 248, 80, 1, 49, 70, 73, 240, 111, 223, 35, 140, 19, 240, 4, 2, 64, 240, ++ 70, 131, 163, 139, 3, 244, 128, 67, 99, 99, 150, 248, 37, 19, 9, 177, ++ 162, 99, 35, 224, 59, 185, 50, 109, 64, 242, 55, 19, 19, 64, 235, 177, ++ 150, 248, 88, 48, 211, 177, 0, 35, 163, 99, 56, 70, 35, 70, 81, 70, ++ 42, 70, 205, 248, 0, 128, 84, 240, 140, 217, 99, 107, 64, 185, 0, 43, ++ 0, 240, 37, 131, 213, 248, 116, 49, 1, 51, 197, 248, 116, 49, 30, 227, ++ 35, 177, 213, 248, 112, 49, 1, 51, 197, 248, 112, 49, 148, 248, 44, ++ 48, 67, 185, 8, 241, 88, 3, 180, 248, 126, 0, 5, 235, 67, 3, 154, 136, ++ 152, 128, 0, 224, 0, 34, 148, 248, 44, 48, 0, 43, 64, 240, 73, 129, ++ 180, 248, 126, 0, 8, 241, 28, 9, 16, 240, 15, 3, 64, 240, 154, 128, ++ 5, 235, 137, 9, 217, 248, 4, 16, 121, 177, 26, 70, 80, 70, 2, 147, 242, ++ 247, 243, 255, 2, 155, 5, 235, 136, 2, 194, 248, 148, 48, 8, 241, 78, ++ 2, 201, 248, 4, 48, 69, 248, 34, 48, 187, 241, 0, 15, 0, 240, 40, 129, ++ 212, 248, 20, 224, 8, 241, 28, 9, 227, 104, 5, 235, 137, 9, 201, 248, ++ 4, 224, 3, 147, 222, 248, 8, 48, 222, 248, 4, 0, 90, 13, 190, 248, 6, ++ 192, 82, 5, 192, 243, 20, 0, 16, 24, 57, 104, 190, 248, 12, 32, 204, ++ 243, 74, 28, 12, 241, 1, 12, 3, 235, 2, 14, 201, 105, 132, 68, 206, ++ 235, 12, 14, 27, 26, 137, 104, 115, 68, 154, 24, 138, 66, 48, 218, 80, ++ 70, 242, 247, 151, 255, 201, 248, 4, 0, 0, 40, 0, 240, 182, 130, 98, ++ 105, 128, 104, 145, 104, 83, 104, 33, 240, 127, 78, 46, 244, 96, 14, ++ 146, 137, 195, 243, 20, 3, 195, 235, 14, 3, 201, 26, 154, 24, 233, 247, ++ 211, 255, 97, 105, 139, 104, 74, 104, 35, 240, 127, 67, 35, 244, 96, ++ 3, 194, 243, 20, 2, 154, 26, 217, 248, 4, 48, 152, 104, 128, 24, 152, ++ 96, 152, 137, 130, 26, 154, 129, 136, 137, 0, 34, 152, 129, 80, 70, ++ 242, 247, 139, 255, 58, 104, 3, 153, 210, 105, 5, 235, 136, 3, 146, ++ 104, 165, 72, 82, 26, 215, 248, 200, 21, 6, 58, 82, 26, 195, 248, 148, ++ 32, 97, 104, 8, 34, 233, 247, 150, 255, 107, 104, 16, 185, 67, 240, ++ 8, 3, 1, 224, 35, 240, 8, 3, 107, 96, 156, 72, 97, 104, 8, 34, 233, ++ 247, 137, 255, 171, 104, 16, 185, 67, 240, 32, 3, 1, 224, 35, 240, 32, ++ 3, 171, 96, 166, 224, 5, 235, 137, 1, 73, 104, 33, 185, 150, 248, 37, ++ 195, 188, 241, 0, 15, 60, 208, 80, 64, 32, 240, 15, 0, 32, 185, 2, 240, ++ 15, 2, 1, 50, 147, 66, 19, 208, 0, 34, 80, 70, 242, 247, 77, 255, 8, ++ 241, 28, 2, 0, 35, 5, 235, 130, 2, 83, 96, 8, 241, 36, 2, 5, 235, 130, ++ 2, 8, 241, 78, 8, 83, 96, 69, 248, 40, 48, 31, 224, 150, 248, 37, 147, ++ 185, 241, 0, 15, 123, 209, 8, 241, 36, 12, 5, 235, 140, 12, 163, 104, ++ 220, 248, 4, 32, 147, 66, 32, 217, 80, 70, 74, 70, 205, 248, 8, 192, ++ 242, 247, 41, 255, 221, 248, 8, 192, 5, 235, 136, 3, 8, 241, 78, 8, ++ 195, 248, 116, 144, 204, 248, 4, 144, 69, 248, 40, 144, 59, 104, 211, ++ 248, 136, 48, 26, 110, 1, 50, 26, 102, 43, 105, 0, 43, 0, 240, 21, 130, ++ 219, 104, 90, 109, 1, 50, 90, 101, 15, 226, 12, 241, 4, 2, 141, 232, ++ 8, 4, 56, 70, 99, 104, 205, 248, 8, 192, 4, 240, 116, 219, 80, 70, 97, ++ 105, 74, 70, 242, 247, 255, 254, 221, 248, 8, 192, 187, 241, 0, 15, ++ 61, 209, 8, 241, 28, 3, 5, 235, 131, 3, 90, 104, 98, 97, 195, 248, 4, ++ 176, 8, 241, 78, 3, 69, 248, 35, 176, 147, 104, 146, 137, 3, 241, 24, ++ 1, 204, 248, 4, 176, 97, 96, 162, 241, 24, 1, 161, 96, 148, 248, 41, ++ 16, 35, 96, 226, 96, 33, 177, 3, 241, 30, 1, 30, 58, 97, 96, 162, 96, ++ 148, 248, 42, 32, 58, 177, 98, 104, 132, 248, 34, 128, 2, 50, 98, 96, ++ 162, 104, 2, 58, 162, 96, 26, 120, 91, 120, 66, 234, 3, 35, 163, 131, ++ 99, 107, 91, 177, 163, 107, 75, 177, 147, 249, 14, 32, 97, 104, 138, ++ 24, 98, 96, 147, 249, 14, 48, 162, 104, 211, 26, 163, 96, 163, 107, ++ 99, 177, 27, 122, 4, 43, 4, 209, 56, 70, 33, 70, 84, 240, 177, 216, ++ 4, 224, 11, 43, 2, 209, 32, 70, 10, 240, 35, 222, 187, 241, 0, 15, 64, ++ 240, 201, 129, 98, 105, 147, 105, 91, 6, 24, 213, 150, 248, 37, 51, ++ 0, 43, 64, 240, 162, 129, 179, 121, 43, 185, 212, 248, 128, 16, 48, ++ 70, 24, 49, 75, 240, 244, 219, 99, 105, 155, 105, 24, 6, 64, 241, 149, ++ 129, 215, 248, 48, 1, 41, 70, 34, 70, 30, 240, 101, 217, 171, 225, 35, ++ 104, 152, 136, 217, 136, 173, 248, 16, 0, 173, 248, 18, 16, 24, 137, ++ 89, 137, 173, 248, 20, 0, 173, 248, 24, 16, 152, 137, 217, 137, 173, ++ 248, 26, 0, 173, 248, 28, 16, 24, 138, 89, 138, 173, 248, 32, 0, 173, ++ 248, 34, 16, 152, 138, 148, 248, 41, 16, 173, 248, 36, 0, 65, 177, 25, ++ 139, 88, 139, 155, 139, 173, 248, 40, 16, 173, 248, 42, 0, 173, 248, ++ 44, 48, 163, 139, 19, 244, 128, 127, 3, 244, 0, 115, 4, 209, 4, 169, ++ 97, 103, 35, 177, 8, 171, 5, 224, 8, 169, 97, 103, 11, 185, 6, 171, ++ 0, 224, 10, 171, 97, 104, 35, 103, 147, 104, 56, 70, 195, 235, 1, 8, ++ 3, 240, 123, 222, 99, 105, 153, 137, 136, 177, 7, 41, 64, 242, 71, 129, ++ 154, 104, 168, 241, 6, 8, 66, 68, 200, 235, 1, 8, 154, 96, 163, 248, ++ 12, 128, 226, 102, 21, 224, 84, 251, 135, 0, 3, 21, 4, 0, 13, 41, 64, ++ 242, 53, 129, 154, 104, 168, 241, 14, 8, 66, 68, 200, 235, 1, 8, 154, ++ 96, 163, 248, 12, 128, 35, 137, 226, 102, 25, 10, 65, 234, 3, 35, 147, ++ 129, 163, 107, 107, 177, 27, 122, 1, 43, 10, 208, 3, 43, 8, 208, 56, ++ 70, 81, 70, 42, 70, 35, 70, 83, 240, 49, 221, 0, 40, 0, 240, 22, 129, ++ 163, 107, 51, 177, 27, 122, 2, 43, 3, 209, 56, 70, 33, 70, 84, 240, ++ 9, 216, 150, 248, 80, 51, 155, 177, 227, 110, 155, 137, 26, 10, 66, ++ 234, 3, 35, 147, 74, 27, 178, 147, 66, 10, 209, 56, 70, 97, 105, 6, ++ 34, 0, 35, 245, 247, 71, 248, 24, 177, 56, 70, 49, 70, 47, 240, 2, 222, ++ 98, 111, 227, 110, 17, 136, 25, 128, 80, 136, 88, 128, 145, 136, 153, ++ 128, 33, 111, 8, 136, 216, 128, 72, 136, 24, 129, 137, 136, 89, 129, ++ 97, 105, 148, 248, 34, 224, 200, 137, 14, 240, 7, 14, 32, 240, 7, 0, ++ 78, 234, 0, 0, 200, 129, 17, 120, 201, 7, 11, 213, 57, 104, 209, 248, ++ 136, 16, 209, 248, 208, 1, 1, 48, 193, 248, 208, 1, 241, 104, 136, 109, ++ 1, 48, 136, 101, 150, 248, 89, 16, 97, 177, 149, 248, 36, 16, 200, 6, ++ 8, 212, 153, 137, 8, 10, 64, 234, 1, 33, 113, 72, 9, 178, 129, 66, 64, ++ 240, 189, 128, 215, 248, 156, 17, 113, 92, 121, 177, 149, 248, 36, 16, ++ 201, 6, 11, 212, 155, 137, 25, 10, 65, 234, 3, 35, 106, 73, 27, 178, ++ 139, 66, 3, 208, 38, 57, 139, 66, 64, 240, 169, 128, 179, 121, 235, ++ 185, 146, 248, 0, 128, 24, 240, 1, 8, 24, 209, 214, 248, 4, 49, 48, ++ 70, 147, 248, 116, 32, 1, 50, 131, 248, 116, 32, 212, 248, 128, 16, ++ 24, 49, 75, 240, 239, 218, 97, 105, 80, 70, 240, 247, 81, 253, 1, 33, ++ 3, 70, 66, 70, 48, 70, 205, 248, 0, 128, 75, 240, 79, 219, 215, 248, ++ 188, 54, 27, 104, 243, 88, 0, 43, 53, 208, 27, 104, 0, 43, 50, 208, ++ 212, 248, 108, 128, 184, 248, 12, 48, 26, 10, 66, 234, 3, 35, 77, 74, ++ 27, 178, 147, 66, 39, 209, 150, 248, 155, 51, 19, 177, 150, 248, 234, ++ 51, 11, 179, 80, 70, 97, 105, 66, 70, 18, 35, 23, 240, 191, 223, 0, ++ 40, 59, 208, 184, 248, 16, 48, 80, 70, 26, 10, 66, 234, 3, 35, 97, 105, ++ 8, 241, 18, 2, 155, 178, 23, 240, 177, 223, 0, 40, 45, 208, 99, 107, ++ 215, 248, 188, 6, 0, 51, 24, 191, 1, 35, 49, 70, 66, 70, 39, 240, 21, ++ 254, 0, 40, 76, 209, 115, 105, 0, 43, 47, 208, 212, 248, 108, 128, 184, ++ 248, 12, 48, 26, 10, 66, 234, 3, 35, 50, 74, 27, 178, 147, 66, 36, 209, ++ 80, 70, 97, 105, 66, 70, 18, 35, 23, 240, 143, 223, 96, 177, 184, 248, ++ 16, 48, 80, 70, 26, 10, 66, 234, 3, 35, 97, 105, 8, 241, 18, 2, 155, ++ 178, 23, 240, 130, 223, 48, 185, 59, 104, 211, 248, 136, 48, 90, 110, ++ 1, 50, 90, 102, 35, 224, 98, 107, 112, 105, 0, 50, 24, 191, 1, 34, 65, ++ 70, 43, 70, 42, 240, 219, 223, 200, 185, 213, 248, 164, 49, 219, 7, ++ 11, 213, 148, 248, 41, 48, 67, 185, 227, 110, 155, 137, 26, 10, 66, ++ 234, 3, 35, 23, 74, 27, 178, 147, 66, 9, 209, 99, 105, 148, 248, 41, ++ 32, 0, 147, 56, 70, 41, 70, 99, 111, 255, 247, 7, 248, 29, 224, 59, ++ 104, 90, 107, 170, 177, 97, 105, 16, 72, 202, 137, 211, 248, 140, 48, ++ 2, 240, 7, 2, 130, 92, 14, 72, 133, 92, 80, 70, 12, 53, 3, 235, 197, ++ 5, 107, 104, 174, 104, 1, 51, 107, 96, 240, 247, 169, 252, 128, 25, ++ 168, 96, 80, 70, 97, 105, 0, 34, 242, 247, 224, 252, 13, 176, 189, 232, ++ 240, 143, 0, 191, 142, 136, 255, 255, 180, 136, 255, 255, 138, 182, ++ 135, 0, 84, 194, 135, 0, 45, 233, 240, 79, 79, 240, 0, 9, 177, 176, ++ 205, 248, 184, 144, 205, 248, 188, 144, 214, 138, 152, 70, 18, 147, ++ 155, 137, 4, 70, 33, 43, 15, 70, 21, 70, 205, 248, 108, 144, 141, 248, ++ 86, 144, 205, 248, 88, 144, 141, 248, 95, 144, 141, 248, 92, 144, 141, ++ 248, 148, 144, 141, 248, 96, 144, 141, 248, 99, 144, 19, 146, 45, 146, ++ 205, 248, 144, 144, 1, 216, 3, 104, 74, 224, 216, 248, 8, 176, 16, 70, ++ 89, 70, 32, 240, 182, 248, 11, 241, 6, 3, 10, 144, 200, 248, 44, 0, ++ 13, 147, 187, 248, 6, 48, 25, 70, 173, 248, 80, 48, 1, 240, 12, 2, 24, ++ 70, 1, 240, 240, 3, 1, 244, 64, 113, 161, 245, 64, 126, 146, 8, 27, ++ 9, 222, 241, 0, 1, 65, 235, 14, 1, 2, 42, 8, 191, 79, 234, 211, 9, 173, ++ 248, 82, 32, 95, 250, 137, 242, 173, 248, 84, 48, 141, 248, 93, 16, ++ 141, 248, 94, 32, 181, 248, 4, 224, 14, 240, 3, 14, 190, 241, 2, 15, ++ 4, 209, 0, 178, 0, 40, 1, 218, 219, 8, 0, 224, 0, 35, 216, 178, 141, ++ 248, 95, 0, 0, 41, 20, 191, 40, 35, 34, 35, 2, 177, 2, 51, 0, 177, 4, ++ 51, 18, 152, 128, 137, 152, 66, 6, 210, 35, 104, 211, 248, 136, 48, ++ 90, 110, 1, 50, 90, 102, 205, 227, 155, 248, 10, 48, 3, 240, 1, 3, 141, ++ 248, 96, 48, 11, 241, 30, 3, 14, 147, 17, 177, 11, 241, 36, 3, 14, 147, ++ 0, 35, 141, 248, 97, 48, 74, 177, 14, 155, 90, 120, 27, 120, 67, 234, ++ 2, 34, 219, 9, 9, 146, 141, 248, 97, 48, 0, 224, 9, 146, 65, 70, 56, ++ 70, 240, 247, 253, 251, 18, 153, 11, 144, 139, 104, 56, 70, 6, 51, 139, ++ 96, 139, 137, 6, 59, 139, 129, 157, 248, 97, 48, 27, 177, 235, 243, ++ 39, 247, 1, 70, 56, 70, 4, 34, 239, 243, 196, 245, 22, 244, 64, 79, ++ 157, 248, 93, 32, 12, 191, 0, 33, 1, 33, 0, 35, 8, 145, 47, 147, 2, ++ 187, 189, 248, 80, 48, 13, 153, 19, 244, 64, 127, 9, 209, 1, 241, 16, ++ 6, 32, 70, 10, 49, 8, 154, 47, 171, 82, 240, 11, 220, 46, 144, 5, 224, ++ 216, 5, 1, 213, 14, 29, 1, 224, 1, 241, 10, 6, 47, 155, 35, 185, 32, ++ 70, 49, 70, 13, 240, 217, 253, 47, 144, 47, 155, 0, 51, 24, 191, 1, ++ 35, 141, 248, 100, 48, 47, 155, 19, 241, 0, 9, 157, 248, 96, 48, 24, ++ 191, 79, 240, 1, 9, 67, 185, 13, 153, 32, 70, 4, 49, 13, 240, 154, 253, ++ 6, 28, 24, 191, 1, 38, 0, 224, 0, 38, 212, 248, 8, 50, 27, 185, 35, ++ 104, 147, 248, 44, 48, 107, 179, 35, 104, 147, 248, 63, 32, 0, 42, 8, ++ 191, 79, 240, 0, 9, 126, 187, 189, 248, 80, 32, 210, 5, 6, 212, 157, ++ 248, 96, 32, 26, 177, 185, 241, 0, 15, 64, 240, 70, 131, 157, 248, 93, ++ 32, 18, 177, 157, 248, 96, 32, 58, 187, 147, 248, 44, 48, 0, 43, 0, ++ 240, 25, 131, 185, 241, 0, 15, 4, 209, 32, 70, 41, 70, 64, 240, 219, ++ 217, 16, 227, 47, 155, 155, 121, 0, 43, 64, 240, 12, 131, 79, 240, 1, ++ 10, 20, 224, 157, 248, 96, 48, 27, 185, 0, 46, 0, 240, 3, 131, 2, 224, ++ 0, 46, 0, 240, 33, 131, 157, 248, 93, 48, 43, 185, 185, 241, 0, 15, ++ 0, 240, 248, 130, 154, 70, 1, 224, 79, 240, 0, 10, 157, 248, 94, 48, ++ 67, 179, 157, 248, 97, 48, 131, 177, 47, 155, 35, 177, 147, 248, 37, ++ 51, 0, 43, 64, 240, 231, 130, 148, 248, 18, 50, 0, 43, 0, 240, 226, ++ 130, 18, 155, 154, 105, 66, 240, 64, 2, 154, 97, 9, 154, 111, 73, 2, ++ 240, 7, 3, 110, 74, 141, 248, 86, 48, 210, 92, 141, 248, 148, 48, 138, ++ 92, 9, 153, 22, 146, 1, 240, 16, 2, 18, 17, 141, 248, 92, 32, 14, 154, ++ 2, 50, 14, 146, 18, 155, 217, 137, 152, 137, 17, 244, 0, 82, 24, 191, ++ 179, 248, 80, 32, 14, 153, 155, 104, 130, 24, 195, 235, 1, 9, 16, 146, ++ 65, 70, 201, 235, 2, 2, 56, 70, 15, 146, 240, 247, 30, 251, 13, 154, ++ 201, 235, 0, 0, 17, 144, 147, 125, 209, 125, 67, 234, 1, 35, 173, 248, ++ 178, 48, 186, 241, 0, 15, 92, 209, 46, 171, 0, 147, 16, 155, 32, 70, ++ 1, 147, 47, 169, 43, 70, 253, 247, 150, 248, 0, 40, 64, 240, 154, 130, ++ 188, 226, 47, 153, 0, 41, 0, 240, 149, 130, 13, 154, 32, 70, 10, 50, ++ 8, 155, 36, 240, 52, 251, 46, 144, 40, 187, 47, 155, 27, 124, 19, 179, ++ 180, 70, 209, 70, 212, 248, 104, 34, 82, 248, 9, 96, 174, 177, 178, ++ 121, 154, 185, 50, 122, 138, 177, 214, 248, 204, 32, 19, 2, 13, 212, ++ 13, 152, 214, 248, 244, 16, 16, 48, 6, 34, 205, 248, 28, 192, 233, 247, ++ 56, 251, 221, 248, 28, 192, 8, 185, 50, 124, 138, 185, 9, 241, 4, 9, ++ 185, 241, 32, 15, 223, 209, 102, 70, 46, 155, 155, 185, 13, 154, 47, ++ 153, 32, 70, 10, 50, 8, 155, 36, 240, 182, 251, 1, 70, 46, 144, 48, ++ 185, 35, 104, 211, 248, 136, 48, 218, 110, 1, 50, 218, 102, 83, 226, ++ 32, 70, 82, 240, 224, 217, 47, 155, 211, 248, 204, 48, 195, 243, 192, ++ 83, 141, 248, 99, 48, 114, 226, 189, 248, 80, 48, 19, 244, 64, 127, ++ 4, 209, 47, 155, 27, 124, 0, 43, 58, 209, 6, 224, 157, 248, 93, 48, ++ 27, 185, 47, 155, 27, 124, 0, 43, 50, 208, 32, 70, 47, 153, 10, 50, ++ 8, 155, 36, 240, 138, 251, 46, 144, 24, 185, 46, 226, 46, 155, 27, 105, ++ 47, 147, 30, 177, 35, 104, 154, 106, 46, 155, 154, 98, 47, 155, 211, ++ 248, 252, 32, 8, 146, 186, 241, 0, 15, 38, 209, 157, 248, 93, 32, 26, ++ 187, 157, 248, 96, 32, 26, 177, 189, 248, 80, 32, 208, 5, 16, 212, 153, ++ 121, 189, 248, 80, 32, 17, 177, 209, 5, 10, 213, 21, 224, 27, 124, 2, ++ 244, 64, 114, 0, 43, 20, 191, 79, 244, 0, 115, 0, 35, 154, 66, 11, 208, ++ 35, 104, 211, 248, 136, 48, 154, 109, 1, 50, 154, 101, 253, 225, 0, ++ 191, 84, 194, 135, 0, 138, 182, 135, 0, 32, 70, 41, 70, 64, 240, 190, ++ 216, 0, 35, 136, 248, 35, 0, 129, 70, 47, 152, 136, 248, 34, 48, 131, ++ 121, 195, 185, 157, 248, 99, 48, 171, 185, 185, 241, 0, 15, 18, 208, ++ 73, 70, 149, 249, 29, 32, 51, 70, 64, 240, 9, 217, 41, 70, 212, 248, ++ 172, 38, 32, 70, 64, 240, 71, 216, 50, 70, 1, 70, 136, 248, 34, 0, 47, ++ 152, 64, 240, 74, 217, 46, 155, 147, 248, 162, 33, 42, 185, 157, 248, ++ 99, 32, 18, 185, 211, 248, 4, 33, 82, 179, 185, 241, 0, 15, 39, 208, ++ 211, 248, 0, 17, 211, 248, 252, 32, 66, 248, 33, 144, 212, 248, 116, ++ 36, 81, 121, 17, 240, 1, 0, 211, 248, 0, 17, 24, 191, 149, 249, 31, ++ 0, 3, 235, 129, 1, 193, 248, 172, 1, 82, 121, 82, 16, 18, 240, 1, 1, ++ 211, 248, 0, 33, 24, 191, 149, 249, 32, 16, 3, 235, 130, 2, 194, 248, ++ 204, 17, 211, 248, 0, 33, 1, 50, 2, 240, 7, 2, 195, 248, 0, 33, 157, ++ 248, 93, 32, 47, 155, 18, 177, 179, 248, 90, 48, 84, 224, 154, 121, ++ 50, 185, 211, 248, 72, 35, 0, 42, 67, 208, 146, 123, 210, 7, 64, 213, ++ 46, 153, 177, 248, 68, 32, 173, 248, 156, 32, 74, 104, 80, 6, 43, 213, ++ 157, 248, 94, 0, 64, 179, 189, 248, 178, 0, 0, 7, 36, 209, 145, 248, ++ 231, 0, 8, 179, 8, 125, 192, 7, 30, 212, 189, 248, 80, 0, 192, 4, 26, ++ 213, 144, 3, 24, 213, 145, 248, 217, 0, 22, 154, 80, 250, 2, 242, 210, ++ 7, 17, 213, 211, 248, 72, 51, 75, 177, 155, 123, 216, 7, 6, 213, 157, ++ 248, 92, 48, 27, 177, 32, 70, 8, 240, 85, 249, 32, 177, 32, 70, 46, ++ 153, 22, 154, 33, 240, 23, 223, 189, 248, 80, 48, 19, 244, 128, 95, ++ 46, 155, 90, 104, 20, 191, 66, 244, 0, 50, 34, 244, 0, 50, 90, 96, 12, ++ 224, 46, 154, 178, 248, 68, 32, 173, 248, 156, 32, 26, 124, 42, 185, ++ 179, 248, 90, 48, 217, 7, 1, 213, 173, 248, 156, 48, 47, 155, 154, 121, ++ 82, 185, 27, 124, 67, 177, 157, 248, 96, 48, 43, 185, 186, 241, 0, 15, ++ 2, 209, 8, 155, 131, 248, 6, 160, 157, 248, 96, 48, 251, 177, 47, 153, ++ 139, 121, 0, 43, 64, 240, 42, 129, 11, 124, 67, 177, 13, 152, 194, 49, ++ 16, 48, 6, 34, 233, 247, 232, 249, 0, 40, 0, 240, 31, 129, 13, 152, ++ 4, 48, 240, 247, 36, 250, 80, 185, 47, 152, 144, 248, 69, 48, 51, 185, ++ 13, 153, 4, 49, 46, 240, 205, 221, 0, 40, 64, 240, 15, 129, 10, 153, ++ 189, 248, 178, 32, 13, 155, 200, 248, 44, 16, 168, 248, 28, 32, 27, ++ 124, 46, 153, 19, 240, 1, 15, 11, 158, 79, 240, 0, 7, 7, 208, 209, 248, ++ 100, 49, 1, 51, 193, 248, 100, 49, 241, 233, 102, 35, 6, 224, 209, 248, ++ 96, 49, 1, 51, 193, 248, 96, 49, 241, 233, 100, 35, 146, 25, 67, 235, ++ 7, 3, 193, 233, 0, 35, 157, 248, 96, 48, 155, 185, 155, 248, 0, 48, ++ 155, 248, 1, 32, 26, 67, 155, 248, 2, 48, 19, 67, 10, 208, 216, 248, ++ 44, 16, 212, 248, 96, 1, 106, 138, 36, 240, 195, 250, 46, 155, 10, 153, ++ 195, 248, 108, 17, 155, 249, 3, 48, 0, 43, 7, 218, 35, 104, 211, 248, ++ 136, 48, 211, 248, 168, 34, 1, 50, 195, 248, 168, 34, 155, 248, 3, 48, ++ 19, 240, 48, 15, 7, 208, 35, 104, 211, 248, 136, 48, 211, 248, 176, ++ 34, 1, 50, 195, 248, 176, 34, 157, 248, 96, 48, 0, 43, 113, 209, 216, ++ 248, 44, 0, 35, 104, 16, 240, 64, 127, 211, 248, 136, 96, 1, 209, 192, ++ 178, 1, 224, 31, 240, 78, 252, 22, 40, 58, 208, 12, 216, 11, 40, 37, ++ 208, 4, 216, 2, 40, 22, 208, 4, 40, 91, 209, 25, 224, 12, 40, 35, 208, ++ 18, 40, 86, 209, 38, 224, 48, 40, 60, 208, 4, 216, 24, 40, 45, 208, ++ 36, 40, 78, 209, 48, 224, 96, 40, 64, 208, 108, 40, 68, 208, 72, 40, ++ 71, 209, 53, 224, 214, 248, 56, 50, 1, 51, 198, 248, 56, 50, 64, 224, ++ 214, 248, 60, 50, 1, 51, 198, 248, 60, 50, 58, 224, 214, 248, 64, 50, ++ 1, 51, 198, 248, 64, 50, 52, 224, 214, 248, 68, 50, 1, 51, 198, 248, ++ 68, 50, 46, 224, 214, 248, 72, 50, 1, 51, 198, 248, 72, 50, 40, 224, ++ 214, 248, 76, 50, 1, 51, 198, 248, 76, 50, 34, 224, 214, 248, 80, 50, ++ 1, 51, 198, 248, 80, 50, 28, 224, 214, 248, 84, 50, 1, 51, 198, 248, ++ 84, 50, 22, 224, 214, 248, 88, 50, 1, 51, 198, 248, 88, 50, 16, 224, ++ 214, 248, 92, 50, 1, 51, 198, 248, 92, 50, 10, 224, 214, 248, 96, 50, ++ 1, 51, 198, 248, 96, 50, 4, 224, 214, 248, 100, 50, 1, 51, 198, 248, ++ 100, 50, 157, 248, 96, 48, 27, 177, 47, 152, 13, 169, 244, 247, 110, ++ 253, 157, 248, 96, 48, 43, 187, 216, 248, 44, 0, 16, 240, 64, 127, 1, ++ 208, 31, 240, 215, 251, 0, 240, 127, 0, 2, 40, 9, 208, 4, 40, 7, 208, ++ 11, 40, 5, 208, 160, 241, 22, 2, 80, 66, 64, 235, 2, 0, 0, 224, 1, 32, ++ 0, 34, 233, 136, 149, 249, 28, 48, 0, 146, 1, 144, 168, 136, 9, 10, ++ 128, 11, 2, 144, 47, 152, 3, 146, 4, 144, 32, 70, 39, 240, 116, 253, ++ 46, 153, 75, 104, 91, 3, 11, 213, 157, 248, 96, 48, 67, 185, 186, 241, ++ 0, 15, 5, 209, 212, 248, 56, 1, 13, 170, 5, 240, 149, 251, 51, 224, ++ 32, 70, 13, 170, 254, 247, 242, 255, 46, 224, 35, 104, 90, 107, 194, ++ 177, 157, 248, 96, 32, 170, 185, 18, 153, 21, 72, 202, 137, 211, 248, ++ 140, 48, 2, 240, 7, 2, 130, 92, 19, 72, 132, 92, 56, 70, 12, 52, 3, ++ 235, 196, 4, 99, 104, 165, 104, 1, 51, 99, 96, 240, 247, 81, 248, 64, ++ 25, 160, 96, 56, 70, 18, 153, 0, 34, 242, 247, 136, 248, 12, 224, 178, ++ 70, 231, 228, 189, 248, 80, 48, 19, 244, 64, 127, 63, 244, 61, 173, ++ 47, 155, 0, 43, 127, 244, 166, 173, 161, 229, 49, 176, 189, 232, 240, ++ 143, 0, 191, 138, 182, 135, 0, 84, 194, 135, 0, 208, 248, 96, 54, 0, ++ 34, 45, 233, 240, 71, 142, 104, 71, 104, 26, 99, 208, 248, 200, 53, ++ 13, 70, 242, 24, 138, 96, 137, 137, 4, 70, 203, 26, 155, 178, 171, 129, ++ 49, 138, 73, 7, 7, 213, 1, 43, 1, 216, 3, 104, 79, 224, 2, 50, 2, 59, ++ 170, 96, 171, 129, 35, 106, 181, 248, 14, 144, 26, 137, 25, 244, 0, ++ 89, 24, 191, 181, 248, 80, 144, 12, 42, 213, 248, 8, 128, 181, 248, ++ 12, 160, 13, 216, 179, 249, 8, 48, 79, 244, 40, 2, 154, 64, 7, 213, ++ 179, 136, 217, 5, 4, 213, 35, 244, 128, 115, 27, 4, 27, 12, 179, 128, ++ 179, 136, 19, 244, 68, 127, 64, 240, 146, 128, 212, 248, 8, 50, 195, ++ 177, 212, 248, 220, 6, 69, 240, 96, 218, 152, 177, 115, 138, 32, 70, ++ 19, 240, 1, 3, 49, 70, 42, 70, 2, 208, 6, 240, 98, 217, 1, 224, 246, ++ 247, 37, 254, 212, 248, 8, 50, 35, 177, 35, 104, 147, 248, 63, 48, 0, ++ 43, 124, 208, 51, 138, 218, 7, 114, 212, 209, 68, 185, 241, 7, 15, 5, ++ 217, 184, 248, 6, 144, 25, 244, 0, 111, 7, 209, 14, 224, 35, 104, 211, ++ 248, 136, 48, 90, 110, 1, 50, 90, 102, 97, 224, 35, 104, 211, 248, 136, ++ 48, 211, 248, 148, 33, 1, 50, 195, 248, 148, 33, 182, 248, 18, 160, ++ 26, 240, 1, 10, 33, 209, 9, 240, 12, 3, 155, 16, 2, 43, 0, 208, 187, ++ 185, 8, 241, 16, 0, 240, 247, 88, 248, 24, 185, 152, 248, 16, 48, 219, ++ 7, 6, 213, 35, 104, 211, 248, 136, 48, 90, 111, 1, 50, 90, 103, 62, ++ 224, 35, 104, 211, 248, 136, 48, 211, 248, 204, 33, 1, 50, 195, 248, ++ 204, 33, 212, 248, 48, 1, 5, 240, 204, 254, 171, 105, 19, 240, 128, ++ 3, 21, 209, 186, 241, 0, 15, 11, 208, 148, 248, 18, 34, 0, 42, 39, 208, ++ 212, 248, 48, 1, 49, 70, 42, 70, 189, 232, 240, 71, 5, 240, 203, 190, ++ 9, 240, 12, 9, 79, 234, 169, 9, 185, 241, 2, 15, 7, 209, 32, 70, 57, ++ 70, 50, 70, 43, 70, 189, 232, 240, 71, 255, 247, 222, 186, 185, 241, ++ 1, 15, 7, 216, 32, 70, 57, 70, 50, 70, 43, 70, 189, 232, 240, 71, 253, ++ 247, 247, 187, 35, 104, 211, 248, 136, 48, 26, 111, 1, 50, 26, 103, ++ 56, 70, 41, 70, 0, 34, 189, 232, 240, 71, 241, 247, 154, 191, 189, 232, ++ 240, 135, 56, 181, 5, 70, 0, 36, 213, 248, 104, 50, 83, 248, 36, 32, ++ 74, 177, 210, 248, 4, 49, 40, 70, 25, 120, 43, 25, 131, 248, 43, 24, ++ 0, 33, 251, 247, 224, 249, 1, 52, 8, 44, 237, 209, 56, 189, 56, 181, ++ 5, 70, 0, 36, 213, 248, 104, 50, 83, 248, 36, 32, 42, 177, 43, 25, 40, ++ 70, 147, 248, 43, 24, 251, 247, 206, 249, 1, 52, 8, 44, 241, 209, 56, ++ 189, 45, 233, 240, 67, 0, 35, 133, 176, 1, 147, 13, 155, 5, 70, 3, 43, ++ 22, 70, 14, 159, 221, 248, 60, 128, 4, 104, 4, 217, 1, 168, 12, 153, ++ 4, 34, 232, 247, 141, 255, 221, 248, 4, 144, 3, 46, 0, 242, 129, 128, ++ 223, 232, 6, 240, 2, 18, 58, 64, 4, 53, 40, 70, 234, 243, 180, 243, ++ 1, 48, 128, 69, 108, 217, 56, 70, 41, 70, 8, 241, 255, 50, 234, 243, ++ 215, 243, 45, 224, 1, 54, 0, 224, 0, 38, 70, 69, 2, 218, 187, 93, 0, ++ 43, 247, 209, 3, 46, 94, 220, 0, 33, 4, 34, 3, 168, 234, 243, 231, 242, ++ 3, 168, 57, 70, 50, 70, 234, 243, 194, 243, 0, 46, 85, 208, 32, 70, ++ 3, 169, 2, 170, 53, 240, 137, 222, 6, 70, 0, 40, 77, 209, 32, 70, 14, ++ 240, 88, 248, 0, 40, 75, 208, 40, 29, 3, 169, 3, 34, 234, 243, 174, ++ 243, 48, 70, 73, 224, 35, 104, 147, 248, 175, 48, 59, 96, 0, 32, 67, ++ 224, 32, 70, 14, 240, 70, 248, 0, 40, 57, 208, 212, 248, 104, 18, 0, ++ 35, 202, 88, 34, 177, 144, 121, 16, 185, 18, 122, 0, 42, 50, 209, 4, ++ 51, 32, 43, 245, 209, 51, 224, 131, 121, 19, 177, 4, 33, 80, 240, 48, ++ 219, 25, 241, 0, 3, 34, 104, 24, 191, 1, 35, 146, 248, 175, 128, 111, ++ 122, 130, 248, 175, 48, 107, 114, 43, 177, 212, 248, 92, 1, 41, 29, ++ 54, 240, 217, 219, 3, 224, 212, 248, 140, 1, 54, 240, 176, 223, 32, ++ 177, 35, 104, 131, 248, 175, 128, 111, 114, 15, 224, 40, 114, 13, 224, ++ 111, 240, 13, 0, 10, 224, 111, 240, 14, 0, 7, 224, 111, 240, 1, 0, 4, ++ 224, 111, 240, 22, 0, 1, 224, 111, 240, 27, 0, 5, 176, 189, 232, 240, ++ 131, 212, 248, 104, 1, 0, 40, 199, 209, 203, 231, 45, 233, 255, 65, ++ 145, 232, 12, 0, 82, 104, 4, 104, 210, 248, 4, 128, 0, 34, 141, 248, ++ 15, 32, 34, 104, 14, 70, 146, 248, 173, 32, 0, 42, 81, 208, 211, 248, ++ 204, 112, 23, 244, 128, 71, 76, 209, 96, 104, 57, 70, 30, 240, 39, 252, ++ 5, 70, 144, 177, 35, 106, 184, 248, 50, 16, 0, 151, 24, 105, 13, 241, ++ 15, 2, 43, 70, 20, 240, 106, 253, 40, 70, 30, 240, 26, 253, 41, 70, ++ 199, 178, 96, 104, 30, 240, 33, 252, 0, 224, 7, 70, 35, 106, 24, 105, ++ 21, 240, 205, 255, 5, 70, 212, 248, 92, 1, 53, 240, 215, 220, 16, 240, ++ 1, 15, 157, 248, 15, 48, 14, 208, 34, 106, 4, 51, 146, 248, 4, 33, 211, ++ 24, 237, 24, 109, 178, 0, 45, 184, 191, 3, 53, 173, 16, 141, 248, 12, ++ 80, 191, 24, 8, 224, 4, 51, 237, 24, 109, 178, 0, 45, 184, 191, 3, 53, ++ 173, 16, 141, 248, 12, 80, 127, 178, 0, 47, 184, 191, 3, 55, 191, 16, ++ 33, 32, 3, 169, 2, 34, 179, 105, 141, 248, 13, 112, 234, 243, 45, 247, ++ 0, 32, 4, 176, 189, 232, 240, 129, 16, 181, 68, 104, 12, 25, 224, 104, ++ 24, 177, 241, 247, 41, 254, 0, 35, 227, 96, 32, 70, 0, 33, 20, 34, 189, ++ 232, 16, 64, 234, 243, 3, 178, 64, 104, 8, 181, 8, 24, 20, 34, 0, 33, ++ 234, 243, 252, 241, 0, 32, 8, 189, 56, 181, 3, 104, 76, 104, 27, 104, ++ 147, 248, 176, 48, 91, 177, 69, 104, 96, 89, 72, 177, 32, 70, 107, 33, ++ 46, 240, 202, 222, 96, 81, 24, 177, 64, 120, 2, 48, 56, 189, 24, 70, ++ 56, 189, 0, 0, 248, 181, 20, 70, 57, 179, 50, 179, 13, 125, 21, 240, ++ 1, 5, 34, 209, 147, 127, 35, 240, 15, 3, 67, 240, 12, 3, 147, 119, 6, ++ 104, 142, 25, 1, 224, 37, 70, 60, 70, 12, 75, 226, 138, 27, 104, 83, ++ 248, 34, 112, 0, 35, 227, 130, 243, 137, 1, 51, 243, 129, 227, 137, ++ 3, 240, 7, 3, 4, 59, 3, 43, 2, 216, 238, 243, 199, 243, 112, 97, 13, ++ 177, 35, 136, 235, 130, 0, 47, 229, 209, 248, 189, 32, 7, 0, 0, 248, ++ 181, 22, 70, 208, 248, 136, 38, 1, 43, 5, 70, 12, 70, 82, 104, 65, 221, ++ 3, 104, 91, 107, 59, 177, 209, 248, 204, 48, 3, 240, 2, 3, 0, 43, 12, ++ 191, 3, 35, 0, 35, 155, 0, 219, 178, 51, 112, 161, 121, 73, 177, 180, ++ 248, 90, 16, 73, 6, 5, 213, 162, 92, 1, 42, 4, 191, 67, 240, 1, 3, 51, ++ 112, 0, 35, 115, 112, 213, 248, 100, 6, 33, 109, 55, 120, 68, 240, 225, ++ 223, 56, 67, 48, 112, 43, 104, 147, 248, 102, 49, 107, 177, 180, 248, ++ 90, 48, 155, 6, 9, 213, 213, 248, 80, 8, 33, 70, 34, 240, 106, 252, ++ 24, 177, 51, 120, 99, 240, 63, 3, 51, 112, 212, 248, 204, 0, 16, 244, ++ 0, 0, 8, 208, 115, 120, 0, 32, 67, 240, 2, 3, 48, 112, 115, 112, 248, ++ 189, 79, 240, 255, 48, 248, 189, 45, 233, 248, 79, 177, 248, 90, 160, ++ 131, 70, 80, 70, 13, 70, 20, 70, 152, 70, 15, 109, 235, 243, 78, 246, ++ 0, 40, 0, 240, 197, 128, 64, 242, 55, 19, 59, 64, 0, 43, 0, 240, 191, ++ 128, 213, 248, 244, 48, 147, 249, 52, 48, 0, 43, 56, 209, 184, 241, ++ 23, 15, 64, 243, 181, 128, 24, 34, 32, 70, 91, 73, 232, 247, 196, 253, ++ 120, 7, 11, 213, 213, 248, 244, 48, 147, 248, 112, 32, 4, 42, 3, 208, ++ 147, 248, 132, 48, 4, 43, 1, 209, 4, 35, 20, 224, 185, 7, 1, 213, 2, ++ 35, 16, 224, 171, 110, 90, 28, 12, 208, 5, 235, 131, 3, 219, 110, 67, ++ 177, 27, 122, 1, 43, 6, 208, 3, 43, 1, 209, 5, 35, 2, 224, 4, 43, 0, ++ 208, 1, 35, 99, 116, 227, 114, 0, 35, 227, 117, 41, 70, 88, 70, 4, 241, ++ 24, 2, 2, 35, 255, 247, 96, 255, 22, 37, 125, 224, 184, 241, 13, 15, ++ 124, 221, 221, 35, 32, 70, 3, 34, 0, 248, 2, 59, 62, 73, 232, 247, 137, ++ 253, 79, 240, 1, 9, 0, 35, 227, 113, 3, 34, 58, 73, 132, 248, 5, 144, ++ 132, 248, 6, 144, 4, 241, 8, 0, 232, 247, 123, 253, 88, 70, 41, 70, ++ 23, 240, 187, 216, 23, 240, 4, 3, 168, 241, 14, 6, 224, 114, 13, 208, ++ 3, 46, 90, 221, 4, 241, 14, 0, 47, 73, 3, 34, 232, 247, 105, 253, 4, ++ 35, 99, 116, 168, 241, 18, 6, 16, 37, 1, 224, 153, 70, 12, 37, 184, ++ 7, 18, 213, 3, 46, 72, 221, 79, 234, 137, 7, 224, 25, 14, 48, 37, 73, ++ 3, 34, 232, 247, 85, 253, 231, 25, 2, 35, 9, 241, 1, 9, 123, 116, 31, ++ 250, 137, 249, 4, 53, 4, 62, 0, 35, 1, 46, 132, 248, 12, 144, 99, 115, ++ 49, 221, 4, 241, 12, 3, 3, 235, 137, 9, 179, 30, 26, 240, 2, 2, 9, 241, ++ 2, 7, 1, 209, 2, 53, 10, 224, 3, 43, 35, 221, 3, 34, 184, 28, 19, 73, ++ 232, 247, 51, 253, 1, 34, 122, 113, 6, 53, 179, 31, 26, 240, 4, 15, ++ 22, 70, 15, 208, 3, 43, 20, 221, 7, 235, 130, 8, 8, 241, 2, 0, 11, 73, ++ 3, 34, 232, 247, 33, 253, 1, 54, 2, 35, 136, 248, 5, 48, 182, 178, 4, ++ 53, 0, 35, 137, 248, 2, 96, 123, 112, 101, 112, 2, 53, 100, 25, 32, ++ 70, 189, 232, 248, 143, 0, 191, 188, 53, 4, 0, 26, 21, 4, 0, 45, 233, ++ 240, 79, 177, 248, 90, 176, 133, 176, 20, 70, 10, 109, 2, 144, 88, 70, ++ 1, 145, 30, 70, 0, 146, 239, 247, 88, 255, 0, 40, 0, 240, 7, 129, 0, ++ 154, 64, 242, 55, 19, 19, 64, 0, 43, 0, 240, 0, 129, 9, 46, 64, 243, ++ 253, 128, 48, 35, 35, 112, 1, 35, 163, 112, 3, 34, 0, 35, 187, 245, ++ 0, 95, 166, 241, 10, 9, 227, 112, 122, 73, 4, 241, 4, 0, 4, 209, 232, ++ 247, 224, 252, 7, 35, 227, 113, 6, 224, 232, 247, 219, 252, 2, 152, ++ 1, 153, 23, 240, 27, 216, 224, 113, 0, 155, 19, 240, 4, 5, 17, 208, ++ 185, 241, 3, 15, 64, 243, 218, 128, 4, 241, 10, 0, 109, 73, 3, 34, 232, ++ 247, 200, 252, 4, 35, 99, 115, 166, 241, 14, 9, 1, 37, 79, 240, 12, ++ 10, 1, 224, 79, 240, 8, 10, 0, 154, 144, 7, 19, 213, 185, 241, 3, 15, ++ 64, 243, 195, 128, 174, 0, 160, 25, 10, 48, 97, 73, 3, 34, 232, 247, ++ 176, 252, 166, 25, 2, 35, 1, 53, 115, 115, 173, 178, 10, 241, 4, 10, ++ 169, 241, 4, 9, 0, 35, 185, 241, 1, 15, 37, 114, 99, 114, 64, 243, 172, ++ 128, 4, 241, 8, 2, 2, 235, 133, 2, 151, 28, 27, 240, 64, 6, 3, 146, ++ 10, 241, 2, 8, 169, 241, 2, 5, 44, 208, 0, 154, 81, 5, 14, 212, 3, 45, ++ 64, 243, 153, 128, 184, 28, 77, 73, 3, 34, 1, 38, 232, 247, 135, 252, ++ 10, 241, 6, 8, 126, 113, 169, 241, 6, 5, 0, 224, 30, 70, 0, 155, 19, ++ 244, 64, 111, 2, 209, 27, 244, 128, 95, 18, 208, 3, 45, 64, 243, 130, ++ 128, 7, 235, 134, 9, 9, 241, 2, 0, 64, 73, 3, 34, 232, 247, 110, 252, ++ 1, 54, 5, 35, 137, 248, 5, 48, 182, 178, 8, 241, 4, 8, 4, 61, 27, 240, ++ 128, 15, 45, 208, 0, 154, 82, 5, 17, 212, 3, 45, 105, 221, 7, 235, 134, ++ 9, 9, 241, 2, 0, 52, 73, 3, 34, 232, 247, 86, 252, 1, 54, 2, 35, 137, ++ 248, 5, 48, 182, 178, 8, 241, 4, 8, 4, 61, 0, 155, 19, 244, 64, 111, ++ 2, 209, 27, 244, 0, 79, 17, 208, 3, 45, 80, 221, 7, 235, 134, 9, 9, ++ 241, 2, 0, 40, 73, 3, 34, 232, 247, 61, 252, 1, 54, 6, 35, 137, 248, ++ 5, 48, 182, 178, 8, 241, 4, 8, 4, 61, 27, 244, 0, 95, 17, 208, 3, 45, ++ 59, 221, 7, 235, 134, 9, 9, 241, 2, 0, 29, 73, 3, 34, 232, 247, 40, ++ 252, 1, 54, 7, 35, 137, 248, 5, 48, 182, 178, 8, 241, 4, 8, 4, 61, 3, ++ 155, 79, 240, 0, 9, 1, 45, 158, 112, 135, 248, 1, 144, 35, 221, 7, 235, ++ 134, 6, 183, 28, 58, 70, 2, 35, 2, 152, 1, 153, 255, 247, 217, 253, ++ 0, 154, 147, 5, 2, 212, 8, 241, 2, 8, 15, 224, 3, 45, 18, 221, 184, ++ 28, 2, 34, 73, 70, 233, 243, 130, 247, 7, 45, 11, 221, 176, 29, 8, 73, ++ 4, 34, 232, 247, 251, 251, 8, 241, 8, 8, 132, 248, 1, 128, 8, 241, 2, ++ 8, 68, 68, 32, 70, 5, 176, 189, 232, 240, 143, 34, 21, 4, 0, 38, 21, ++ 4, 0, 45, 233, 247, 79, 145, 248, 1, 128, 1, 144, 184, 241, 1, 15, 13, ++ 70, 20, 70, 64, 243, 246, 128, 202, 120, 139, 120, 67, 234, 2, 35, 1, ++ 43, 64, 240, 239, 128, 4, 34, 184, 241, 5, 15, 132, 248, 131, 48, 132, ++ 248, 132, 32, 132, 248, 133, 48, 132, 248, 134, 32, 132, 248, 138, 48, ++ 132, 248, 139, 48, 64, 243, 225, 128, 136, 24, 113, 73, 3, 34, 232, ++ 247, 177, 251, 88, 185, 235, 121, 1, 43, 6, 217, 7, 43, 6, 216, 90, ++ 178, 79, 240, 116, 81, 145, 64, 1, 213, 132, 248, 132, 48, 184, 241, ++ 7, 15, 64, 243, 203, 128, 149, 248, 9, 160, 43, 122, 0, 38, 67, 234, ++ 10, 42, 168, 241, 8, 8, 55, 70, 28, 224, 5, 241, 8, 9, 9, 235, 135, ++ 9, 9, 241, 2, 0, 95, 73, 3, 34, 232, 247, 140, 251, 112, 185, 153, 248, ++ 5, 48, 1, 43, 6, 217, 7, 43, 8, 216, 90, 178, 79, 240, 116, 81, 145, ++ 64, 3, 213, 162, 25, 130, 248, 134, 48, 1, 54, 1, 55, 168, 241, 4, 8, ++ 87, 69, 4, 210, 3, 46, 2, 216, 184, 241, 3, 15, 219, 220, 199, 235, ++ 10, 7, 191, 0, 199, 235, 8, 8, 184, 241, 1, 15, 132, 248, 133, 96, 64, ++ 243, 146, 128, 8, 53, 5, 235, 138, 5, 5, 241, 2, 11, 171, 120, 155, ++ 248, 1, 160, 0, 37, 67, 234, 10, 42, 168, 241, 2, 8, 46, 70, 63, 224, ++ 11, 235, 134, 9, 9, 241, 2, 7, 56, 70, 64, 73, 3, 34, 232, 247, 79, ++ 251, 104, 187, 153, 248, 5, 48, 90, 30, 210, 178, 1, 42, 34, 217, 218, ++ 30, 210, 178, 1, 42, 8, 216, 98, 25, 130, 248, 139, 48, 148, 248, 131, ++ 48, 1, 53, 67, 240, 4, 3, 11, 224, 90, 31, 210, 178, 1, 42, 10, 216, ++ 98, 25, 130, 248, 139, 48, 148, 248, 131, 48, 1, 53, 67, 240, 32, 3, ++ 132, 248, 131, 48, 16, 224, 1, 153, 10, 104, 146, 248, 102, 33, 90, ++ 177, 8, 43, 9, 209, 98, 25, 130, 248, 139, 48, 1, 53, 4, 224, 56, 70, ++ 39, 73, 3, 34, 232, 247, 27, 251, 1, 54, 168, 241, 4, 8, 86, 69, 4, ++ 210, 3, 45, 2, 216, 184, 241, 3, 15, 184, 220, 198, 235, 10, 6, 227, ++ 136, 182, 0, 198, 235, 8, 8, 67, 240, 128, 3, 184, 241, 1, 15, 132, ++ 248, 138, 80, 227, 128, 45, 221, 11, 235, 138, 5, 170, 120, 171, 28, ++ 210, 7, 5, 213, 148, 248, 131, 32, 66, 240, 2, 2, 132, 248, 131, 32, ++ 91, 120, 158, 7, 5, 213, 148, 248, 131, 48, 67, 240, 64, 3, 132, 248, ++ 131, 48, 1, 155, 169, 120, 211, 248, 100, 6, 148, 248, 131, 96, 68, ++ 240, 175, 219, 6, 67, 132, 248, 131, 96, 171, 120, 184, 241, 2, 15, ++ 132, 248, 147, 48, 7, 208, 102, 240, 127, 6, 132, 248, 131, 96, 2, 224, ++ 111, 240, 22, 0, 0, 224, 0, 32, 189, 232, 254, 143, 0, 191, 34, 21, ++ 4, 0, 30, 21, 4, 0, 45, 233, 247, 79, 29, 70, 146, 248, 1, 128, 20, ++ 70, 170, 104, 177, 248, 90, 48, 34, 244, 192, 98, 184, 241, 1, 15, 7, ++ 70, 14, 70, 0, 147, 170, 96, 64, 242, 203, 128, 148, 248, 3, 192, 162, ++ 120, 66, 234, 12, 34, 1, 42, 64, 240, 195, 128, 168, 241, 2, 2, 210, ++ 178, 3, 42, 14, 216, 90, 6, 64, 241, 187, 128, 4, 34, 26, 240, 184, ++ 217, 0, 40, 0, 240, 181, 128, 64, 35, 165, 248, 68, 48, 4, 35, 171, ++ 100, 172, 224, 4, 241, 4, 9, 72, 70, 88, 73, 3, 34, 232, 247, 151, 250, ++ 130, 70, 0, 40, 64, 240, 164, 128, 56, 70, 49, 70, 226, 121, 26, 240, ++ 159, 217, 0, 40, 0, 240, 156, 128, 5, 241, 72, 11, 72, 70, 89, 70, 235, ++ 243, 202, 242, 168, 241, 6, 3, 219, 178, 1, 43, 18, 216, 0, 155, 91, ++ 6, 64, 241, 141, 128, 56, 70, 49, 70, 4, 34, 26, 240, 136, 217, 0, 40, ++ 0, 240, 133, 128, 64, 35, 165, 248, 68, 48, 4, 35, 171, 100, 80, 70, ++ 128, 224, 98, 122, 35, 122, 67, 234, 2, 35, 1, 43, 119, 209, 4, 241, ++ 10, 9, 72, 70, 61, 73, 3, 34, 232, 247, 96, 250, 0, 40, 110, 209, 56, ++ 70, 49, 70, 98, 123, 26, 240, 106, 217, 0, 40, 103, 208, 72, 70, 89, ++ 70, 235, 243, 152, 242, 168, 241, 12, 3, 219, 178, 1, 43, 6, 216, 0, ++ 155, 88, 6, 91, 213, 64, 35, 165, 248, 68, 48, 85, 224, 226, 123, 163, ++ 123, 67, 234, 2, 35, 1, 43, 81, 209, 4, 241, 16, 0, 42, 73, 3, 34, 232, ++ 247, 59, 250, 0, 40, 73, 209, 227, 124, 1, 43, 1, 208, 5, 43, 2, 209, ++ 0, 154, 81, 6, 6, 212, 6, 43, 1, 208, 2, 43, 61, 209, 0, 154, 18, 6, ++ 58, 213, 5, 59, 219, 178, 1, 43, 10, 216, 51, 109, 88, 5, 3, 212, 0, ++ 155, 19, 244, 16, 79, 49, 208, 171, 104, 67, 244, 128, 99, 171, 96, ++ 51, 109, 89, 5, 2, 213, 171, 104, 90, 5, 39, 213, 4, 241, 16, 0, 105, ++ 70, 0, 34, 239, 247, 224, 251, 240, 177, 189, 248, 0, 48, 168, 241, ++ 18, 8, 95, 250, 136, 248, 184, 241, 1, 15, 165, 248, 68, 48, 136, 191, ++ 34, 125, 215, 248, 100, 6, 152, 191, 0, 34, 49, 109, 13, 241, 7, 3, ++ 18, 240, 171, 254, 80, 177, 157, 248, 7, 0, 64, 177, 171, 104, 67, 244, ++ 0, 115, 171, 96, 0, 32, 2, 224, 12, 32, 0, 224, 31, 32, 189, 232, 254, ++ 143, 0, 191, 34, 21, 4, 0, 248, 181, 28, 70, 83, 120, 7, 70, 227, 112, ++ 0, 35, 99, 114, 11, 109, 14, 70, 91, 7, 21, 70, 6, 213, 16, 70, 4, 33, ++ 92, 240, 2, 217, 8, 177, 4, 35, 60, 224, 51, 109, 152, 7, 6, 213, 40, ++ 70, 2, 33, 92, 240, 248, 216, 8, 177, 2, 35, 50, 224, 182, 248, 90, ++ 48, 25, 7, 47, 213, 40, 70, 9, 33, 92, 240, 237, 216, 8, 177, 9, 35, ++ 26, 224, 40, 70, 8, 33, 92, 240, 230, 216, 8, 177, 8, 35, 19, 224, 40, ++ 70, 10, 33, 92, 240, 223, 216, 8, 177, 10, 35, 12, 224, 40, 70, 5, 33, ++ 92, 240, 216, 216, 8, 177, 5, 35, 5, 224, 40, 70, 1, 33, 92, 240, 209, ++ 216, 8, 177, 1, 35, 99, 114, 99, 122, 8, 59, 219, 178, 2, 43, 7, 216, ++ 160, 29, 44, 73, 3, 34, 232, 247, 172, 249, 99, 122, 8, 59, 99, 114, ++ 182, 248, 90, 48, 154, 7, 20, 212, 88, 7, 39, 212, 89, 6, 18, 213, 90, ++ 4, 4, 213, 43, 120, 91, 7, 1, 213, 3, 35, 51, 224, 51, 109, 24, 5, 4, ++ 212, 40, 70, 5, 33, 92, 240, 155, 216, 8, 177, 5, 35, 41, 224, 1, 35, ++ 39, 224, 25, 6, 18, 213, 90, 4, 4, 213, 43, 120, 91, 7, 1, 213, 4, 35, ++ 30, 224, 51, 109, 24, 5, 4, 212, 40, 70, 6, 33, 92, 240, 134, 216, 8, ++ 177, 6, 35, 20, 224, 2, 35, 18, 224, 58, 104, 146, 248, 102, 33, 26, ++ 177, 153, 6, 1, 213, 8, 35, 10, 224, 8, 43, 1, 208, 16, 43, 7, 209, ++ 4, 241, 12, 0, 10, 73, 3, 34, 232, 247, 103, 249, 0, 35, 227, 115, 4, ++ 241, 16, 2, 2, 35, 56, 70, 49, 70, 255, 247, 40, 251, 43, 124, 34, 124, ++ 67, 240, 127, 3, 19, 64, 35, 116, 248, 189, 0, 191, 30, 21, 4, 0, 45, ++ 233, 247, 79, 177, 248, 90, 160, 221, 248, 48, 176, 26, 244, 128, 71, ++ 24, 191, 146, 248, 131, 112, 5, 70, 24, 191, 199, 243, 128, 7, 12, 70, ++ 145, 70, 30, 70, 221, 248, 52, 128, 255, 178, 187, 241, 0, 15, 24, 208, ++ 15, 177, 11, 177, 21, 224, 19, 185, 202, 243, 0, 26, 1, 224, 79, 240, ++ 1, 10, 186, 241, 0, 15, 5, 208, 40, 70, 89, 70, 18, 240, 62, 223, 79, ++ 240, 1, 10, 88, 70, 65, 70, 233, 243, 92, 247, 223, 177, 0, 39, 21, ++ 224, 65, 70, 28, 72, 233, 243, 85, 247, 40, 70, 33, 70, 9, 241, 131, ++ 2, 8, 241, 4, 3, 255, 247, 29, 255, 87, 177, 0, 46, 38, 208, 213, 248, ++ 192, 6, 33, 70, 56, 240, 177, 220, 7, 70, 32, 224, 22, 185, 20, 224, ++ 79, 240, 1, 10, 180, 248, 90, 0, 239, 247, 65, 251, 104, 177, 186, 241, ++ 0, 15, 10, 208, 180, 248, 90, 48, 213, 248, 200, 6, 1, 147, 33, 70, ++ 74, 70, 67, 70, 0, 151, 29, 240, 105, 252, 213, 248, 192, 6, 33, 70, ++ 74, 70, 3, 176, 189, 232, 240, 79, 56, 240, 57, 158, 55, 70, 79, 240, ++ 1, 10, 219, 231, 0, 191, 74, 195, 135, 0, 144, 248, 116, 2, 0, 240, ++ 2, 0, 208, 241, 1, 0, 56, 191, 0, 32, 112, 71, 48, 181, 141, 104, 67, ++ 104, 44, 5, 203, 88, 12, 213, 177, 248, 114, 64, 34, 9, 2, 240, 3, 2, ++ 3, 58, 24, 191, 1, 34, 164, 8, 4, 240, 3, 4, 3, 60, 7, 224, 145, 248, ++ 99, 32, 145, 248, 98, 64, 0, 50, 24, 191, 1, 34, 0, 52, 73, 104, 24, ++ 191, 1, 36, 201, 5, 10, 213, 105, 7, 8, 212, 66, 185, 2, 104, 18, 104, ++ 210, 105, 82, 105, 11, 42, 168, 191, 11, 34, 13, 224, 34, 177, 2, 104, ++ 18, 104, 210, 105, 146, 105, 7, 224, 2, 104, 18, 104, 210, 105, 12, ++ 177, 82, 105, 1, 224, 210, 248, 188, 32, 90, 113, 90, 121, 0, 241, 208, ++ 1, 128, 248, 222, 35, 2, 70, 178, 248, 240, 66, 180, 245, 122, 127, ++ 132, 191, 144, 248, 222, 67, 92, 113, 52, 50, 138, 66, 244, 209, 144, ++ 248, 40, 32, 81, 178, 1, 49, 24, 191, 90, 113, 89, 121, 144, 248, 226, ++ 35, 145, 66, 56, 191, 10, 70, 217, 104, 154, 113, 57, 177, 79, 244, ++ 200, 100, 177, 251, 244, 241, 138, 66, 40, 191, 10, 70, 154, 113, 153, ++ 121, 144, 248, 61, 35, 145, 66, 56, 191, 10, 70, 154, 113, 48, 189, ++ 48, 181, 0, 34, 52, 33, 81, 67, 0, 36, 1, 245, 60, 113, 67, 24, 68, ++ 82, 0, 33, 92, 24, 1, 49, 255, 37, 31, 41, 165, 112, 249, 209, 1, 50, ++ 0, 33, 4, 42, 25, 99, 153, 98, 89, 132, 89, 98, 233, 209, 48, 189, 128, ++ 248, 196, 19, 112, 71, 208, 248, 0, 50, 90, 104, 192, 248, 0, 34, 0, ++ 34, 90, 96, 24, 70, 112, 71, 208, 248, 4, 50, 35, 185, 79, 240, 255, ++ 50, 10, 128, 24, 70, 112, 71, 26, 136, 10, 128, 90, 104, 208, 248, 0, ++ 18, 89, 96, 192, 248, 0, 50, 192, 248, 4, 34, 1, 32, 112, 71, 112, 181, ++ 4, 70, 13, 70, 22, 70, 255, 247, 221, 255, 212, 248, 4, 50, 0, 34, 5, ++ 128, 14, 224, 25, 136, 141, 66, 4, 217, 105, 26, 137, 178, 177, 66, ++ 4, 217, 8, 224, 73, 27, 137, 178, 177, 66, 4, 217, 89, 104, 26, 70, ++ 11, 70, 0, 43, 238, 209, 18, 185, 196, 248, 4, 2, 0, 224, 80, 96, 67, ++ 96, 112, 189, 247, 181, 79, 240, 255, 51, 12, 70, 209, 248, 244, 96, ++ 143, 120, 131, 131, 2, 169, 0, 35, 5, 70, 33, 248, 2, 61, 4, 241, 252, ++ 0, 255, 247, 184, 255, 48, 177, 189, 248, 6, 48, 1, 32, 67, 244, 128, ++ 83, 171, 131, 10, 224, 96, 55, 6, 235, 71, 6, 242, 136, 19, 5, 27, 13, ++ 1, 50, 171, 131, 242, 128, 164, 248, 92, 48, 254, 189, 3, 104, 27, 104, ++ 147, 248, 156, 48, 1, 43, 17, 209, 36, 35, 3, 251, 1, 1, 177, 248, 92, ++ 50, 177, 248, 94, 2, 131, 66, 195, 235, 0, 0, 1, 210, 1, 56, 112, 71, ++ 145, 248, 98, 50, 1, 59, 24, 24, 112, 71, 0, 32, 112, 71, 45, 233, 240, ++ 65, 23, 70, 10, 104, 4, 70, 210, 248, 248, 48, 14, 70, 11, 185, 19, ++ 105, 219, 104, 221, 104, 79, 244, 0, 114, 41, 70, 32, 70, 248, 247, ++ 70, 249, 35, 104, 241, 138, 183, 248, 84, 32, 219, 105, 138, 24, 91, ++ 107, 40, 177, 154, 66, 14, 220, 32, 70, 41, 70, 0, 34, 4, 224, 154, ++ 66, 8, 219, 32, 70, 41, 70, 1, 34, 79, 244, 0, 115, 189, 232, 240, 65, ++ 248, 247, 173, 185, 189, 232, 240, 129, 31, 181, 3, 104, 4, 70, 1, 169, ++ 211, 248, 36, 1, 0, 34, 80, 240, 142, 218, 5, 224, 75, 104, 91, 3, 2, ++ 213, 32, 70, 255, 247, 190, 254, 35, 104, 1, 169, 211, 248, 36, 1, 34, ++ 240, 41, 255, 1, 70, 0, 40, 240, 209, 31, 189, 48, 181, 3, 104, 133, ++ 176, 4, 70, 1, 169, 211, 248, 36, 1, 0, 34, 80, 240, 115, 218, 0, 37, ++ 6, 224, 67, 104, 90, 3, 3, 213, 99, 104, 195, 88, 219, 138, 237, 24, ++ 35, 104, 1, 169, 211, 248, 36, 1, 34, 240, 12, 255, 0, 40, 240, 209, ++ 40, 70, 5, 176, 48, 189, 147, 105, 112, 181, 91, 5, 5, 70, 57, 213, ++ 0, 41, 55, 208, 75, 104, 91, 3, 52, 213, 67, 104, 203, 88, 209, 137, ++ 1, 240, 7, 1, 54, 49, 83, 248, 33, 64, 0, 44, 42, 208, 3, 104, 150, ++ 139, 152, 104, 255, 243, 84, 244, 54, 5, 54, 13, 1, 7, 16, 213, 180, ++ 248, 84, 48, 4, 241, 252, 0, 1, 59, 164, 248, 84, 48, 49, 70, 98, 120, ++ 255, 247, 17, 255, 180, 248, 248, 48, 1, 51, 164, 248, 248, 48, 112, ++ 189, 149, 248, 225, 83, 4, 241, 67, 0, 1, 61, 53, 64, 41, 70, 234, 243, ++ 94, 241, 48, 177, 4, 241, 75, 0, 41, 70, 189, 232, 112, 64, 234, 243, ++ 126, 180, 112, 189, 16, 181, 79, 244, 0, 114, 0, 33, 4, 70, 233, 243, ++ 172, 242, 0, 34, 1, 35, 4, 235, 195, 0, 1, 51, 161, 24, 8, 50, 64, 43, ++ 72, 96, 247, 209, 0, 35, 196, 248, 0, 66, 196, 248, 4, 50, 16, 189, ++ 248, 181, 36, 35, 83, 67, 3, 245, 22, 118, 132, 25, 5, 70, 0, 104, 226, ++ 122, 3, 104, 147, 248, 156, 48, 1, 43, 27, 209, 163, 136, 180, 248, ++ 2, 192, 0, 42, 20, 191, 79, 244, 128, 66, 0, 34, 156, 69, 231, 136, ++ 1, 209, 174, 91, 1, 224, 94, 28, 182, 178, 190, 66, 27, 208, 10, 67, ++ 146, 178, 89, 0, 22, 240, 128, 218, 166, 128, 40, 104, 33, 137, 50, ++ 70, 22, 240, 122, 218, 213, 248, 80, 50, 0, 32, 211, 248, 152, 32, 1, ++ 50, 195, 248, 152, 32, 211, 248, 160, 32, 1, 50, 195, 248, 160, 32, ++ 227, 105, 1, 51, 227, 97, 248, 189, 79, 240, 255, 48, 248, 189, 45, ++ 233, 247, 79, 146, 248, 241, 48, 4, 70, 22, 70, 0, 43, 71, 208, 208, ++ 248, 52, 49, 211, 248, 252, 83, 0, 45, 65, 208, 224, 33, 18, 240, 203, ++ 219, 234, 33, 131, 70, 32, 70, 18, 240, 198, 219, 226, 33, 130, 70, ++ 32, 70, 18, 240, 193, 219, 79, 244, 141, 113, 129, 70, 32, 70, 18, 240, ++ 187, 219, 79, 244, 154, 113, 128, 70, 32, 70, 18, 240, 181, 219, 79, ++ 244, 136, 113, 7, 70, 32, 70, 18, 240, 175, 219, 64, 242, 218, 97, 3, ++ 70, 32, 70, 1, 147, 18, 240, 168, 219, 32, 70, 79, 244, 219, 97, 18, ++ 240, 163, 219, 150, 248, 241, 32, 1, 155, 1, 42, 6, 217, 226, 104, 178, ++ 248, 70, 21, 178, 248, 104, 21, 178, 248, 34, 37, 165, 248, 0, 176, ++ 165, 248, 2, 160, 165, 248, 4, 144, 165, 248, 6, 128, 47, 129, 107, ++ 129, 232, 96, 189, 232, 254, 143, 0, 35, 45, 233, 240, 65, 5, 70, 12, ++ 70, 11, 112, 11, 224, 212, 248, 244, 16, 163, 120, 209, 248, 52, 1, ++ 15, 79, 3, 240, 7, 3, 70, 109, 251, 92, 128, 109, 176, 71, 5, 241, 16, ++ 0, 161, 120, 234, 243, 114, 242, 2, 70, 0, 40, 235, 209, 213, 248, 56, ++ 49, 42, 104, 24, 104, 210, 248, 248, 48, 11, 185, 19, 105, 219, 104, ++ 217, 104, 0, 34, 79, 244, 0, 115, 189, 232, 240, 65, 248, 247, 96, 184, ++ 72, 194, 135, 0, 56, 181, 208, 248, 0, 68, 13, 70, 225, 66, 5, 208, ++ 8, 89, 24, 177, 240, 247, 241, 253, 0, 35, 43, 81, 56, 189, 0, 181, ++ 143, 176, 1, 170, 244, 247, 47, 249, 189, 248, 52, 0, 15, 176, 0, 189, ++ 45, 233, 240, 79, 178, 248, 2, 128, 143, 176, 7, 70, 13, 70, 22, 70, ++ 4, 104, 178, 248, 4, 176, 8, 240, 7, 8, 79, 240, 0, 9, 44, 224, 32, ++ 70, 41, 70, 1, 170, 244, 247, 22, 249, 215, 248, 80, 50, 96, 104, 154, ++ 110, 41, 70, 1, 50, 154, 102, 1, 34, 189, 248, 10, 160, 240, 247, 247, ++ 253, 35, 104, 147, 248, 156, 32, 1, 42, 4, 208, 10, 244, 192, 106, 186, ++ 245, 192, 111, 8, 224, 9, 241, 1, 9, 32, 70, 65, 70, 31, 250, 137, 249, ++ 247, 247, 205, 252, 217, 69, 9, 208, 99, 105, 2, 33, 83, 248, 40, 0, ++ 18, 75, 219, 107, 152, 71, 5, 70, 0, 45, 208, 209, 35, 104, 147, 248, ++ 156, 48, 1, 43, 5, 208, 32, 70, 65, 70, 151, 248, 46, 32, 247, 247, ++ 182, 252, 150, 249, 25, 48, 59, 185, 12, 224, 1, 61, 1, 32, 237, 178, ++ 237, 243, 227, 244, 13, 185, 5, 224, 11, 37, 227, 104, 211, 248, 112, ++ 49, 218, 7, 242, 213, 15, 176, 189, 232, 240, 143, 208, 134, 135, 0, ++ 52, 35, 75, 67, 45, 233, 240, 65, 3, 245, 60, 115, 197, 24, 105, 126, ++ 144, 249, 222, 35, 79, 244, 225, 102, 145, 66, 184, 191, 10, 70, 210, ++ 178, 114, 67, 27, 79, 193, 90, 215, 248, 208, 97, 100, 35, 81, 26, 182, ++ 251, 243, 246, 78, 67, 182, 251, 242, 246, 94, 67, 79, 240, 255, 52, ++ 46, 99, 246, 9, 23, 44, 4, 208, 1, 52, 102, 44, 2, 221, 189, 232, 240, ++ 129, 87, 36, 20, 35, 3, 251, 4, 115, 91, 104, 219, 9, 179, 66, 240, ++ 217, 181, 248, 0, 128, 79, 244, 225, 98, 3, 251, 8, 248, 155, 27, 83, ++ 67, 32, 70, 184, 251, 243, 248, 25, 240, 207, 220, 8, 241, 1, 8, 40, ++ 24, 184, 241, 255, 15, 40, 191, 79, 240, 255, 8, 128, 248, 2, 128, 216, ++ 231, 172, 240, 135, 0, 45, 233, 247, 79, 79, 240, 52, 8, 8, 251, 1, ++ 248, 15, 70, 73, 0, 236, 49, 208, 248, 52, 81, 6, 70, 18, 240, 142, ++ 218, 8, 245, 60, 120, 5, 235, 8, 4, 180, 248, 34, 160, 202, 235, 0, ++ 10, 31, 250, 138, 250, 186, 241, 0, 15, 0, 240, 136, 128, 213, 248, ++ 236, 50, 96, 132, 0, 43, 0, 240, 133, 128, 7, 241, 220, 3, 106, 107, ++ 54, 248, 19, 48, 214, 248, 84, 150, 1, 146, 9, 251, 3, 242, 1, 152, ++ 130, 66, 119, 217, 50, 104, 146, 248, 156, 32, 1, 42, 9, 209, 48, 70, ++ 250, 33, 213, 248, 80, 178, 0, 147, 18, 240, 97, 218, 0, 155, 203, 248, ++ 0, 0, 213, 248, 80, 34, 225, 106, 16, 104, 98, 106, 82, 68, 9, 42, 98, ++ 98, 97, 217, 65, 26, 213, 248, 236, 98, 177, 251, 242, 242, 178, 66, ++ 8, 217, 65, 242, 135, 51, 153, 66, 79, 240, 0, 3, 86, 217, 224, 98, ++ 99, 98, 83, 224, 149, 248, 222, 195, 98, 126, 79, 250, 140, 246, 178, ++ 66, 184, 191, 22, 70, 246, 178, 79, 244, 225, 106, 10, 251, 6, 246, ++ 53, 248, 8, 16, 177, 66, 1, 219, 224, 98, 54, 224, 9, 251, 3, 243, 1, ++ 152, 27, 26, 155, 178, 153, 66, 25, 210, 1, 245, 122, 113, 137, 178, ++ 153, 66, 56, 191, 11, 70, 37, 248, 8, 48, 40, 70, 255, 247, 119, 253, ++ 24, 74, 53, 248, 8, 16, 210, 248, 208, 33, 100, 35, 113, 26, 178, 251, ++ 243, 242, 74, 67, 178, 251, 246, 246, 115, 67, 35, 99, 17, 224, 1, 42, ++ 15, 217, 255, 42, 4, 209, 12, 241, 255, 60, 132, 248, 25, 192, 1, 224, ++ 1, 58, 98, 118, 40, 70, 57, 70, 255, 247, 28, 255, 40, 70, 255, 247, ++ 86, 253, 213, 248, 80, 50, 27, 104, 227, 98, 0, 32, 96, 98, 7, 224, ++ 79, 240, 255, 48, 4, 224, 1, 32, 2, 224, 0, 32, 0, 224, 24, 70, 189, ++ 232, 254, 143, 172, 240, 135, 0, 45, 233, 240, 65, 4, 70, 0, 43, 59, ++ 208, 194, 243, 192, 23, 206, 9, 1, 240, 127, 5, 30, 74, 20, 33, 55, ++ 177, 1, 251, 5, 34, 14, 177, 210, 104, 8, 224, 146, 104, 6, 224, 30, ++ 177, 1, 251, 5, 34, 82, 104, 1, 224, 105, 67, 82, 88, 79, 234, 146, ++ 40, 219, 8, 31, 250, 136, 248, 40, 70, 3, 251, 8, 248, 25, 240, 237, ++ 219, 6, 235, 64, 2, 7, 235, 66, 2, 14, 50, 227, 124, 84, 248, 34, 32, ++ 31, 250, 136, 248, 83, 67, 152, 69, 18, 211, 40, 70, 25, 240, 221, 219, ++ 6, 235, 64, 6, 7, 235, 70, 7, 14, 55, 84, 248, 39, 48, 224, 124, 88, ++ 67, 128, 178, 189, 232, 240, 129, 79, 246, 255, 112, 189, 232, 240, ++ 129, 64, 70, 189, 232, 240, 129, 172, 240, 135, 0, 112, 181, 5, 121, ++ 1, 35, 197, 241, 16, 5, 19, 250, 5, 245, 6, 70, 79, 240, 255, 52, 23, ++ 44, 3, 208, 1, 52, 102, 44, 1, 221, 54, 224, 87, 36, 32, 70, 25, 240, ++ 180, 219, 0, 35, 124, 48, 38, 248, 16, 48, 51, 121, 5, 43, 238, 216, ++ 164, 241, 12, 3, 3, 43, 7, 216, 32, 70, 25, 240, 166, 219, 22, 75, 124, ++ 48, 211, 248, 168, 49, 24, 224, 164, 241, 21, 3, 1, 43, 7, 216, 32, ++ 70, 25, 240, 154, 219, 16, 75, 124, 48, 211, 248, 208, 49, 12, 224, ++ 164, 241, 87, 3, 15, 43, 210, 216, 32, 70, 25, 240, 142, 219, 10, 75, ++ 20, 34, 2, 251, 4, 51, 91, 104, 124, 48, 1, 59, 91, 25, 179, 251, 245, ++ 243, 38, 248, 16, 48, 194, 231, 4, 75, 211, 248, 216, 49, 1, 59, 91, ++ 25, 179, 251, 245, 245, 53, 129, 112, 189, 172, 240, 135, 0, 45, 233, ++ 240, 65, 4, 70, 142, 10, 79, 240, 255, 53, 23, 45, 4, 208, 1, 53, 102, ++ 45, 2, 221, 189, 232, 240, 129, 87, 37, 20, 35, 107, 67, 23, 74, 40, ++ 70, 215, 24, 82, 248, 3, 128, 25, 240, 95, 219, 8, 251, 6, 248, 4, 235, ++ 0, 16, 79, 234, 216, 3, 131, 99, 40, 70, 215, 248, 4, 128, 25, 240, ++ 83, 219, 8, 251, 6, 248, 4, 235, 0, 16, 79, 234, 216, 3, 3, 100, 40, ++ 70, 215, 248, 8, 128, 25, 240, 71, 219, 8, 251, 6, 248, 4, 235, 0, 16, ++ 79, 234, 216, 3, 195, 99, 40, 70, 255, 104, 25, 240, 60, 219, 119, 67, ++ 4, 235, 0, 16, 255, 8, 71, 100, 197, 231, 172, 240, 135, 0, 56, 181, ++ 149, 105, 145, 98, 69, 244, 128, 117, 37, 244, 0, 69, 149, 97, 157, ++ 248, 16, 80, 53, 177, 16, 240, 159, 221, 208, 241, 1, 0, 56, 191, 0, ++ 32, 56, 189, 17, 70, 26, 70, 1, 35, 6, 240, 117, 250, 208, 241, 1, 0, ++ 56, 191, 0, 32, 56, 189, 45, 233, 240, 79, 20, 70, 210, 248, 244, 144, ++ 146, 248, 2, 160, 2, 104, 187, 176, 21, 104, 7, 70, 7, 149, 152, 70, ++ 0, 43, 0, 240, 46, 129, 9, 235, 74, 3, 180, 248, 92, 96, 179, 248, 198, ++ 48, 246, 67, 158, 25, 54, 5, 53, 13, 5, 235, 8, 6, 2, 149, 180, 248, ++ 96, 0, 180, 248, 248, 80, 69, 25, 174, 66, 13, 221, 101, 120, 133, 66, ++ 0, 242, 24, 129, 180, 248, 84, 0, 0, 40, 64, 240, 19, 129, 1, 59, 27, ++ 5, 27, 13, 164, 248, 92, 48, 16, 49, 82, 104, 184, 241, 1, 15, 148, ++ 191, 0, 37, 1, 37, 4, 145, 5, 146, 6, 149, 0, 45, 0, 240, 148, 128, ++ 95, 250, 136, 245, 8, 168, 1, 33, 79, 244, 128, 98, 3, 149, 0, 38, 233, ++ 243, 63, 247, 163, 70, 127, 224, 4, 152, 81, 70, 233, 243, 163, 247, ++ 133, 137, 4, 70, 142, 45, 87, 220, 0, 46, 85, 208, 178, 137, 119, 75, ++ 81, 28, 11, 64, 3, 241, 64, 14, 115, 104, 176, 104, 241, 136, 195, 243, ++ 20, 3, 3, 235, 81, 19, 65, 13, 73, 5, 1, 51, 128, 24, 194, 235, 14, ++ 14, 91, 24, 31, 250, 142, 254, 27, 26, 49, 70, 5, 152, 114, 68, 206, ++ 235, 3, 3, 237, 243, 37, 245, 6, 70, 0, 40, 52, 208, 128, 104, 179, ++ 137, 192, 48, 192, 59, 176, 96, 179, 129, 161, 104, 42, 70, 231, 247, ++ 116, 251, 50, 70, 181, 129, 7, 152, 33, 70, 243, 247, 106, 250, 226, ++ 137, 243, 137, 2, 240, 7, 2, 35, 240, 7, 3, 19, 67, 243, 129, 92, 75, ++ 162, 138, 27, 104, 83, 248, 34, 48, 3, 177, 27, 136, 0, 32, 179, 130, ++ 1, 34, 160, 130, 33, 70, 5, 152, 240, 247, 39, 251, 179, 127, 3, 240, ++ 15, 3, 12, 43, 6, 209, 59, 104, 73, 70, 211, 248, 104, 7, 50, 70, 254, ++ 247, 231, 252, 52, 70, 0, 38, 8, 168, 0, 33, 34, 70, 233, 243, 152, ++ 247, 206, 185, 75, 75, 38, 70, 25, 104, 19, 224, 112, 104, 178, 104, ++ 243, 136, 192, 243, 20, 0, 0, 235, 83, 16, 83, 13, 1, 48, 91, 5, 195, ++ 24, 176, 137, 18, 24, 155, 26, 179, 245, 0, 127, 4, 220, 179, 138, 81, ++ 248, 35, 96, 0, 46, 233, 209, 3, 157, 107, 30, 219, 178, 255, 43, 3, ++ 147, 127, 244, 121, 175, 92, 70, 0, 38, 67, 70, 53, 70, 176, 70, 78, ++ 70, 153, 70, 6, 152, 16, 177, 8, 168, 0, 33, 1, 224, 4, 152, 81, 70, ++ 233, 243, 16, 247, 131, 70, 0, 40, 55, 208, 131, 105, 1, 53, 67, 244, ++ 128, 99, 131, 97, 33, 70, 173, 178, 255, 247, 239, 250, 24, 177, 8, ++ 241, 1, 8, 31, 250, 136, 248, 187, 248, 28, 48, 58, 104, 27, 5, 27, ++ 13, 144, 104, 1, 147, 254, 243, 242, 247, 16, 240, 8, 15, 1, 155, 5, ++ 208, 187, 248, 28, 32, 66, 244, 0, 82, 171, 248, 28, 32, 151, 248, 225, ++ 19, 4, 241, 67, 0, 1, 57, 25, 64, 234, 243, 48, 240, 214, 248, 52, 49, ++ 10, 240, 7, 14, 211, 248, 84, 192, 152, 109, 26, 75, 49, 70, 90, 70, ++ 19, 248, 14, 48, 224, 71, 77, 69, 187, 209, 180, 248, 84, 48, 70, 70, ++ 235, 24, 164, 248, 84, 48, 59, 104, 152, 104, 254, 243, 199, 247, 1, ++ 7, 11, 213, 180, 248, 248, 48, 67, 69, 3, 216, 0, 34, 164, 248, 248, ++ 32, 3, 224, 200, 235, 3, 3, 164, 248, 248, 48, 180, 248, 96, 48, 2, ++ 152, 27, 26, 246, 24, 118, 27, 164, 248, 96, 96, 2, 224, 29, 70, 0, ++ 224, 0, 37, 40, 70, 59, 176, 189, 232, 240, 143, 0, 191, 254, 255, 1, ++ 0, 32, 7, 0, 0, 72, 194, 135, 0, 45, 233, 248, 67, 144, 232, 8, 2, 27, ++ 104, 6, 70, 211, 248, 28, 128, 12, 70, 233, 177, 143, 104, 23, 240, ++ 8, 7, 28, 209, 79, 244, 160, 112, 240, 247, 48, 250, 5, 70, 200, 177, ++ 57, 70, 79, 244, 160, 114, 232, 243, 15, 246, 68, 248, 9, 80, 5, 241, ++ 16, 0, 44, 96, 197, 248, 56, 97, 8, 33, 216, 248, 108, 32, 233, 243, ++ 23, 246, 56, 70, 189, 232, 248, 131, 8, 70, 189, 232, 248, 131, 0, 32, ++ 189, 232, 248, 131, 111, 240, 26, 0, 189, 232, 248, 131, 112, 181, 4, ++ 70, 208, 248, 0, 100, 12, 32, 13, 70, 237, 243, 250, 243, 112, 177, ++ 168, 81, 128, 232, 48, 0, 148, 248, 192, 51, 35, 177, 255, 35, 3, 114, ++ 67, 129, 0, 32, 112, 189, 3, 114, 67, 129, 24, 70, 112, 189, 111, 240, ++ 26, 0, 112, 189, 45, 233, 243, 71, 23, 70, 2, 122, 5, 70, 14, 70, 208, ++ 248, 0, 144, 209, 248, 0, 128, 10, 177, 0, 43, 81, 208, 235, 25, 156, ++ 122, 0, 44, 78, 208, 152, 248, 18, 49, 149, 248, 39, 32, 3, 240, 28, ++ 3, 155, 8, 147, 66, 56, 191, 19, 70, 51, 113, 48, 70, 255, 247, 152, ++ 253, 152, 248, 18, 49, 79, 244, 0, 82, 3, 240, 3, 3, 18, 250, 3, 243, ++ 243, 96, 152, 248, 18, 49, 40, 70, 3, 240, 3, 3, 13, 51, 134, 248, 61, ++ 49, 65, 70, 7, 241, 54, 10, 255, 247, 73, 249, 86, 248, 42, 64, 60, ++ 185, 79, 244, 65, 112, 240, 247, 185, 249, 4, 70, 8, 179, 70, 248, 42, ++ 0, 0, 33, 79, 244, 65, 114, 32, 70, 232, 243, 149, 245, 2, 35, 35, 112, ++ 0, 35, 167, 112, 196, 248, 244, 128, 132, 248, 237, 48, 170, 124, 235, ++ 124, 0, 146, 149, 248, 47, 32, 72, 70, 1, 146, 65, 70, 58, 70, 3, 240, ++ 14, 250, 213, 248, 80, 50, 26, 109, 1, 50, 26, 101, 0, 224, 28, 70, ++ 32, 70, 189, 232, 252, 135, 45, 233, 240, 79, 4, 70, 0, 104, 152, 70, ++ 3, 104, 133, 176, 93, 105, 148, 248, 196, 51, 139, 70, 22, 70, 35, 185, ++ 144, 248, 132, 55, 0, 43, 0, 240, 37, 129, 49, 70, 18, 240, 31, 219, ++ 8, 40, 64, 240, 31, 129, 40, 70, 49, 70, 238, 247, 110, 249, 49, 70, ++ 5, 70, 32, 104, 18, 240, 1, 219, 3, 120, 7, 70, 3, 240, 15, 3, 155, ++ 0, 3, 241, 22, 2, 149, 66, 192, 240, 12, 129, 66, 122, 6, 42, 64, 240, ++ 8, 129, 197, 24, 106, 123, 210, 6, 45, 213, 130, 120, 193, 120, 18, ++ 2, 82, 24, 41, 123, 146, 178, 9, 9, 3, 235, 129, 3, 154, 66, 34, 209, ++ 212, 248, 200, 51, 1, 51, 196, 248, 200, 51, 148, 248, 216, 51, 27, ++ 177, 243, 127, 67, 240, 2, 3, 243, 119, 107, 123, 16, 43, 10, 209, 243, ++ 127, 67, 240, 32, 3, 243, 119, 148, 248, 196, 51, 212, 248, 212, 35, ++ 154, 66, 9, 211, 219, 224, 35, 104, 147, 248, 132, 55, 35, 177, 243, ++ 127, 67, 240, 32, 3, 243, 119, 213, 224, 243, 127, 153, 6, 64, 241, ++ 210, 128, 148, 248, 196, 51, 0, 43, 0, 240, 205, 128, 42, 122, 107, ++ 122, 18, 6, 27, 4, 210, 24, 171, 122, 27, 2, 210, 24, 235, 122, 211, ++ 24, 2, 147, 12, 35, 3, 251, 8, 179, 211, 248, 28, 144, 185, 241, 0, ++ 15, 68, 208, 153, 248, 31, 48, 154, 6, 64, 213, 217, 248, 24, 48, 91, ++ 6, 60, 212, 73, 70, 32, 104, 18, 240, 153, 218, 6, 120, 185, 248, 28, ++ 144, 6, 240, 15, 6, 0, 235, 134, 6, 25, 244, 128, 95, 150, 248, 8, 192, ++ 113, 122, 178, 122, 243, 122, 64, 240, 158, 128, 9, 4, 79, 234, 12, ++ 108, 97, 68, 18, 2, 138, 24, 2, 153, 211, 24, 153, 66, 30, 217, 12, ++ 48, 7, 241, 12, 1, 8, 34, 231, 247, 60, 249, 184, 185, 48, 70, 41, 70, ++ 4, 34, 231, 247, 54, 249, 136, 185, 65, 70, 11, 241, 16, 0, 233, 243, ++ 93, 245, 35, 104, 1, 70, 27, 104, 1, 34, 88, 105, 240, 247, 12, 249, ++ 212, 248, 204, 51, 1, 51, 196, 248, 204, 51, 93, 224, 12, 35, 3, 251, ++ 8, 179, 148, 248, 216, 35, 25, 140, 145, 66, 105, 210, 79, 240, 0, 10, ++ 193, 70, 158, 105, 168, 70, 205, 248, 4, 160, 37, 70, 89, 224, 243, ++ 127, 156, 6, 77, 213, 179, 105, 88, 6, 74, 212, 49, 70, 40, 104, 18, ++ 240, 69, 218, 4, 120, 4, 240, 15, 4, 0, 235, 132, 4, 225, 122, 34, 122, ++ 3, 145, 177, 139, 99, 122, 1, 244, 128, 81, 137, 178, 148, 248, 10, ++ 192, 0, 41, 72, 209, 27, 4, 18, 6, 210, 24, 79, 234, 12, 44, 3, 155, ++ 98, 68, 210, 24, 2, 155, 147, 66, 42, 217, 12, 48, 7, 241, 12, 1, 8, ++ 34, 231, 247, 230, 248, 24, 187, 32, 70, 65, 70, 4, 34, 231, 247, 224, ++ 248, 232, 185, 44, 70, 11, 241, 16, 0, 73, 70, 186, 241, 0, 15, 2, 209, ++ 233, 243, 231, 244, 2, 224, 82, 70, 238, 247, 147, 248, 1, 70, 8, 179, ++ 35, 104, 1, 34, 27, 104, 88, 105, 240, 247, 173, 248, 212, 248, 208, ++ 51, 1, 51, 196, 248, 208, 51, 212, 248, 212, 51, 1, 51, 16, 224, 10, ++ 75, 1, 153, 242, 138, 27, 104, 1, 49, 178, 70, 83, 248, 34, 96, 1, 145, ++ 38, 177, 149, 248, 216, 51, 1, 154, 154, 66, 159, 219, 44, 70, 0, 35, ++ 196, 248, 212, 51, 5, 176, 189, 232, 240, 143, 32, 7, 0, 0, 8, 177, ++ 144, 248, 223, 3, 112, 71, 128, 248, 39, 16, 112, 71, 193, 116, 112, ++ 71, 192, 124, 112, 71, 144, 248, 225, 3, 112, 71, 208, 248, 0, 52, 203, ++ 88, 152, 122, 112, 71, 0, 0, 45, 233, 255, 71, 4, 70, 0, 104, 13, 70, ++ 3, 146, 152, 70, 12, 158, 254, 247, 184, 255, 3, 154, 0, 40, 100, 208, ++ 19, 120, 1, 43, 92, 209, 146, 248, 2, 160, 12, 35, 3, 251, 10, 83, 24, ++ 140, 0, 40, 89, 208, 178, 248, 96, 16, 149, 248, 6, 192, 178, 248, 248, ++ 48, 132, 69, 56, 191, 96, 70, 203, 24, 152, 66, 184, 191, 3, 70, 40, ++ 104, 155, 178, 208, 248, 248, 16, 146, 248, 1, 144, 178, 248, 84, 112, ++ 9, 185, 1, 105, 201, 104, 34, 72, 10, 240, 7, 10, 201, 104, 16, 248, ++ 10, 0, 79, 240, 12, 10, 10, 251, 0, 16, 176, 248, 22, 160, 129, 138, ++ 193, 235, 10, 1, 137, 178, 153, 66, 42, 217, 0, 43, 42, 208, 94, 185, ++ 148, 248, 48, 0, 184, 66, 7, 216, 225, 69, 56, 191, 204, 70, 99, 69, ++ 2, 208, 184, 241, 0, 15, 31, 208, 141, 232, 66, 0, 32, 70, 41, 70, 255, ++ 247, 93, 252, 134, 185, 148, 248, 48, 48, 187, 66, 4, 217, 212, 248, ++ 80, 50, 218, 106, 18, 24, 218, 98, 171, 121, 131, 66, 4, 209, 212, 248, ++ 80, 50, 26, 107, 18, 24, 26, 99, 0, 48, 24, 191, 1, 32, 4, 224, 0, 32, ++ 2, 224, 24, 70, 0, 224, 64, 70, 4, 176, 189, 232, 240, 135, 0, 191, ++ 72, 194, 135, 0, 19, 181, 0, 36, 0, 148, 255, 247, 131, 255, 28, 189, ++ 45, 233, 240, 71, 83, 120, 4, 70, 13, 70, 22, 70, 0, 43, 69, 208, 178, ++ 248, 92, 144, 178, 248, 90, 48, 9, 241, 1, 9, 144, 248, 225, 131, 195, ++ 235, 9, 9, 79, 234, 9, 89, 8, 241, 255, 56, 79, 234, 25, 89, 8, 234, ++ 3, 8, 0, 39, 10, 224, 148, 248, 225, 51, 8, 241, 1, 8, 1, 59, 1, 55, ++ 8, 234, 3, 8, 191, 178, 31, 250, 136, 248, 79, 69, 12, 208, 6, 241, ++ 67, 0, 65, 70, 233, 243, 30, 242, 48, 185, 6, 241, 75, 0, 65, 70, 233, ++ 243, 24, 242, 0, 40, 229, 208, 182, 248, 90, 48, 251, 24, 27, 5, 27, ++ 13, 166, 248, 90, 48, 182, 248, 96, 48, 251, 24, 166, 248, 96, 48, 23, ++ 177, 1, 35, 134, 248, 236, 48, 32, 70, 41, 70, 50, 70, 0, 35, 189, 232, ++ 240, 71, 255, 247, 172, 191, 189, 232, 240, 135, 255, 247, 174, 191, ++ 45, 233, 248, 67, 0, 35, 137, 7, 208, 248, 52, 81, 6, 70, 20, 70, 130, ++ 248, 234, 48, 54, 213, 178, 248, 90, 112, 39, 224, 149, 248, 225, 131, ++ 4, 241, 75, 9, 8, 241, 255, 56, 7, 234, 8, 8, 72, 70, 65, 70, 233, 243, ++ 224, 241, 184, 177, 72, 70, 65, 70, 4, 241, 67, 9, 233, 243, 127, 241, ++ 72, 70, 65, 70, 233, 243, 213, 241, 96, 177, 72, 70, 65, 70, 233, 243, ++ 118, 241, 4, 235, 8, 3, 0, 34, 218, 112, 180, 248, 84, 48, 1, 59, 164, ++ 248, 84, 48, 1, 55, 63, 5, 63, 13, 180, 248, 98, 48, 187, 66, 211, 209, ++ 212, 248, 244, 32, 107, 104, 40, 70, 209, 88, 34, 70, 255, 247, 188, ++ 255, 212, 248, 244, 32, 107, 104, 48, 70, 209, 88, 34, 70, 254, 247, ++ 182, 255, 214, 248, 52, 1, 33, 70, 0, 34, 189, 232, 248, 67, 0, 240, ++ 0, 184, 45, 233, 240, 65, 0, 35, 129, 248, 237, 48, 145, 248, 234, 48, ++ 134, 176, 5, 70, 12, 70, 0, 43, 64, 240, 141, 128, 11, 120, 1, 43, 64, ++ 240, 137, 128, 145, 248, 238, 48, 49, 43, 0, 242, 132, 128, 25, 43, ++ 6, 209, 26, 35, 129, 248, 238, 48, 3, 35, 129, 248, 237, 48, 122, 224, ++ 177, 248, 90, 96, 66, 187, 144, 248, 225, 51, 79, 240, 255, 55, 1, 59, ++ 30, 64, 144, 70, 14, 224, 49, 70, 4, 241, 75, 0, 233, 243, 121, 241, ++ 149, 248, 225, 51, 1, 54, 1, 59, 0, 40, 24, 191, 71, 70, 30, 64, 8, ++ 241, 1, 8, 98, 120, 180, 248, 96, 48, 211, 26, 152, 69, 234, 219, 120, ++ 28, 3, 209, 0, 35, 132, 248, 238, 48, 84, 224, 180, 248, 90, 96, 1, ++ 54, 246, 25, 54, 5, 54, 13, 107, 122, 0, 43, 48, 209, 0, 147, 13, 241, ++ 23, 3, 2, 147, 162, 120, 51, 70, 1, 39, 40, 104, 212, 248, 244, 16, ++ 1, 151, 2, 240, 193, 255, 157, 248, 23, 48, 128, 70, 11, 177, 4, 35, ++ 21, 224, 16, 185, 132, 248, 237, 112, 52, 224, 43, 104, 27, 73, 211, ++ 248, 120, 4, 34, 70, 59, 70, 17, 240, 11, 254, 43, 104, 23, 73, 211, ++ 248, 120, 4, 34, 70, 67, 70, 71, 240, 69, 222, 24, 177, 2, 35, 132, ++ 248, 237, 48, 31, 224, 213, 248, 80, 50, 154, 109, 1, 50, 154, 101, ++ 148, 248, 238, 48, 164, 248, 98, 96, 1, 51, 132, 248, 238, 48, 1, 35, ++ 132, 248, 234, 48, 164, 248, 86, 96, 107, 122, 1, 43, 11, 209, 42, 104, ++ 7, 73, 210, 248, 120, 4, 34, 70, 17, 240, 227, 253, 40, 104, 2, 33, ++ 34, 70, 255, 247, 20, 255, 6, 176, 189, 232, 240, 129, 0, 191, 101, ++ 180, 1, 0, 45, 233, 248, 67, 157, 248, 32, 192, 5, 70, 12, 70, 22, 70, ++ 188, 241, 0, 15, 14, 208, 177, 248, 94, 48, 211, 26, 27, 5, 27, 13, ++ 179, 245, 0, 111, 128, 242, 203, 128, 86, 28, 54, 5, 54, 13, 161, 248, ++ 94, 96, 210, 224, 144, 248, 225, 115, 122, 30, 50, 64, 138, 24, 208, ++ 120, 0, 40, 71, 209, 177, 248, 94, 32, 178, 66, 61, 208, 183, 26, 63, ++ 5, 63, 13, 1, 33, 183, 245, 0, 111, 25, 96, 4, 217, 213, 248, 80, 50, ++ 154, 108, 82, 24, 11, 224, 180, 248, 90, 48, 97, 120, 243, 26, 27, 5, ++ 27, 13, 139, 66, 213, 248, 80, 50, 4, 219, 154, 108, 1, 50, 154, 100, ++ 189, 232, 248, 131, 25, 108, 128, 70, 201, 25, 25, 100, 149, 248, 225, ++ 147, 9, 241, 255, 57, 9, 234, 2, 9, 15, 224, 73, 70, 4, 241, 75, 0, ++ 233, 243, 223, 243, 149, 248, 225, 51, 9, 241, 1, 9, 1, 59, 9, 234, ++ 3, 9, 8, 241, 1, 8, 31, 250, 137, 249, 184, 69, 237, 211, 40, 70, 33, ++ 70, 0, 34, 255, 247, 253, 254, 1, 54, 54, 5, 54, 13, 164, 248, 94, 96, ++ 130, 224, 177, 248, 232, 16, 169, 177, 180, 248, 228, 48, 3, 241, 48, ++ 2, 4, 235, 66, 2, 144, 136, 176, 66, 12, 209, 162, 248, 4, 192, 149, ++ 248, 225, 35, 1, 51, 1, 58, 19, 64, 1, 57, 164, 248, 228, 48, 164, 248, ++ 232, 16, 102, 224, 180, 248, 228, 32, 0, 35, 10, 224, 4, 235, 66, 0, ++ 176, 248, 100, 0, 176, 66, 39, 208, 1, 50, 120, 30, 2, 64, 1, 51, 146, ++ 178, 139, 66, 242, 211, 76, 224, 149, 248, 225, 19, 4, 241, 75, 0, 1, ++ 57, 25, 64, 233, 243, 148, 243, 213, 248, 80, 50, 0, 33, 90, 108, 1, ++ 50, 90, 100, 180, 248, 228, 48, 4, 235, 67, 2, 162, 248, 100, 16, 149, ++ 248, 225, 35, 1, 51, 1, 58, 19, 64, 164, 248, 228, 48, 180, 248, 232, ++ 48, 1, 59, 164, 248, 232, 48, 180, 248, 228, 48, 4, 235, 67, 3, 179, ++ 248, 100, 48, 179, 66, 215, 209, 33, 70, 0, 34, 40, 70, 255, 247, 159, ++ 254, 180, 248, 228, 48, 0, 33, 4, 235, 67, 2, 162, 248, 100, 16, 149, ++ 248, 225, 35, 1, 51, 1, 58, 19, 64, 164, 248, 228, 48, 180, 248, 232, ++ 48, 1, 59, 164, 248, 232, 48, 19, 224, 149, 248, 225, 19, 4, 241, 75, ++ 0, 1, 57, 49, 64, 233, 243, 83, 243, 7, 224, 1, 32, 189, 232, 248, 131, ++ 213, 248, 80, 50, 154, 108, 1, 50, 154, 100, 0, 32, 189, 232, 248, 131, ++ 35, 120, 3, 43, 232, 208, 1, 32, 189, 232, 248, 131, 16, 181, 157, 248, ++ 8, 64, 2, 148, 189, 232, 16, 64, 255, 247, 9, 191, 0, 0, 45, 233, 240, ++ 79, 171, 176, 15, 70, 5, 70, 146, 70, 4, 104, 0, 33, 37, 168, 11, 34, ++ 9, 147, 221, 248, 208, 176, 221, 248, 212, 144, 232, 243, 93, 241, 231, ++ 177, 123, 104, 91, 3, 25, 213, 107, 104, 251, 88, 30, 147, 186, 248, ++ 14, 48, 30, 152, 3, 240, 7, 3, 21, 147, 221, 248, 84, 192, 54, 51, 80, ++ 248, 35, 96, 5, 235, 12, 3, 147, 248, 23, 192, 219, 127, 205, 248, 128, ++ 192, 33, 147, 22, 177, 51, 120, 2, 43, 7, 209, 40, 70, 81, 70, 9, 154, ++ 0, 35, 254, 247, 113, 255, 0, 240, 19, 188, 0, 33, 8, 34, 40, 168, 232, ++ 243, 50, 241, 9, 152, 57, 105, 67, 136, 144, 248, 24, 128, 3, 240, 7, ++ 3, 26, 147, 218, 248, 24, 48, 34, 145, 195, 243, 192, 99, 10, 147, 35, ++ 104, 147, 248, 156, 32, 1, 42, 65, 208, 144, 249, 25, 48, 0, 43, 0, ++ 240, 188, 128, 184, 241, 6, 15, 6, 208, 10, 154, 184, 241, 7, 15, 8, ++ 191, 0, 34, 10, 146, 1, 224, 0, 35, 10, 147, 9, 152, 11, 240, 30, 2, ++ 131, 136, 27, 9, 27, 147, 3, 140, 141, 248, 164, 144, 27, 11, 67, 234, ++ 194, 3, 141, 248, 160, 48, 79, 234, 27, 35, 141, 248, 161, 48, 79, 234, ++ 27, 67, 141, 248, 162, 48, 79, 234, 25, 35, 141, 248, 165, 48, 79, 234, ++ 25, 67, 79, 234, 25, 105, 79, 234, 27, 107, 141, 248, 167, 144, 79, ++ 240, 0, 9, 141, 248, 163, 176, 141, 248, 166, 48, 205, 248, 52, 144, ++ 205, 248, 68, 144, 205, 248, 48, 144, 205, 248, 88, 144, 117, 224, 182, ++ 248, 90, 192, 9, 152, 205, 248, 108, 192, 128, 136, 9, 153, 22, 144, ++ 8, 140, 11, 240, 30, 3, 0, 11, 64, 234, 195, 0, 79, 234, 27, 33, 79, ++ 234, 27, 67, 201, 178, 219, 178, 79, 234, 27, 107, 141, 248, 160, 0, ++ 141, 248, 161, 16, 141, 248, 162, 48, 141, 248, 163, 176, 40, 185, 33, ++ 185, 27, 185, 27, 241, 0, 2, 24, 191, 1, 34, 79, 234, 25, 35, 219, 178, ++ 17, 147, 79, 234, 25, 67, 219, 178, 13, 147, 213, 248, 80, 50, 95, 250, ++ 137, 252, 217, 104, 17, 152, 1, 49, 217, 96, 213, 248, 80, 50, 79, 234, ++ 25, 105, 211, 248, 136, 16, 205, 248, 48, 192, 97, 68, 195, 248, 136, ++ 16, 211, 248, 144, 16, 9, 24, 195, 248, 144, 16, 13, 152, 211, 248, ++ 140, 16, 9, 24, 195, 248, 140, 16, 211, 248, 148, 16, 17, 152, 73, 68, ++ 195, 248, 148, 16, 35, 104, 17, 153, 211, 248, 136, 48, 1, 235, 9, 14, ++ 211, 248, 168, 17, 192, 235, 12, 11, 113, 68, 195, 248, 168, 17, 211, ++ 248, 216, 17, 13, 152, 113, 68, 195, 248, 216, 17, 201, 235, 0, 1, 11, ++ 235, 1, 0, 217, 104, 9, 24, 217, 96, 215, 248, 56, 50, 215, 248, 60, ++ 18, 115, 68, 8, 24, 199, 248, 56, 50, 199, 248, 60, 2, 114, 177, 35, ++ 104, 147, 248, 156, 48, 1, 43, 17, 208, 1, 33, 16, 145, 11, 145, 102, ++ 224, 153, 70, 13, 147, 17, 147, 12, 147, 22, 147, 27, 147, 213, 248, ++ 80, 50, 26, 110, 1, 50, 26, 102, 0, 34, 16, 146, 0, 224, 16, 147, 184, ++ 241, 0, 15, 64, 208, 213, 248, 232, 50, 8, 241, 180, 2, 83, 248, 34, ++ 16, 1, 49, 184, 241, 4, 15, 67, 248, 34, 16, 10, 209, 35, 104, 211, ++ 248, 136, 48, 211, 248, 16, 34, 1, 50, 195, 248, 16, 34, 0, 35, 10, ++ 147, 60, 224, 184, 241, 5, 15, 14, 209, 35, 104, 211, 248, 136, 48, ++ 211, 248, 160, 34, 1, 50, 195, 248, 160, 34, 180, 248, 36, 53, 75, 179, ++ 32, 70, 246, 247, 144, 252, 10, 224, 184, 241, 3, 15, 32, 70, 11, 209, ++ 179, 75, 221, 248, 84, 192, 19, 248, 12, 16, 254, 247, 250, 254, 1, ++ 32, 0, 33, 11, 144, 10, 145, 27, 224, 66, 70, 81, 70, 19, 240, 21, 220, ++ 1, 34, 11, 146, 0, 35, 15, 224, 9, 152, 195, 136, 115, 177, 35, 104, ++ 1, 33, 211, 248, 136, 48, 11, 145, 154, 107, 205, 248, 40, 128, 1, 50, ++ 154, 99, 5, 224, 1, 34, 11, 146, 10, 147, 1, 224, 1, 35, 11, 147, 180, ++ 248, 36, 53, 0, 43, 0, 240, 43, 130, 212, 248, 40, 53, 0, 43, 0, 240, ++ 38, 130, 184, 241, 5, 15, 0, 240, 34, 130, 32, 70, 246, 247, 94, 252, ++ 29, 226, 218, 248, 8, 176, 14, 152, 187, 248, 0, 192, 205, 248, 140, ++ 192, 187, 248, 140, 48, 27, 9, 18, 147, 0, 40, 64, 240, 174, 128, 155, ++ 248, 112, 48, 34, 104, 3, 240, 127, 3, 15, 147, 146, 248, 156, 32, 155, ++ 248, 115, 48, 217, 9, 1, 42, 20, 145, 64, 240, 159, 128, 187, 248, 76, ++ 192, 24, 6, 205, 248, 100, 192, 22, 213, 213, 248, 80, 50, 221, 248, ++ 48, 192, 26, 106, 98, 68, 26, 98, 213, 248, 232, 50, 99, 177, 15, 152, ++ 24, 240, 89, 219, 213, 248, 232, 50, 86, 48, 3, 235, 128, 3, 90, 104, ++ 221, 248, 48, 192, 98, 68, 90, 96, 155, 248, 115, 48, 19, 240, 48, 15, ++ 22, 208, 213, 248, 80, 50, 221, 248, 48, 192, 90, 106, 98, 68, 90, 98, ++ 213, 248, 232, 50, 99, 177, 15, 152, 24, 240, 61, 219, 213, 248, 232, ++ 50, 118, 48, 83, 248, 32, 32, 221, 248, 48, 192, 98, 68, 67, 248, 32, ++ 32, 213, 248, 232, 50, 195, 177, 15, 152, 24, 240, 45, 219, 213, 248, ++ 232, 50, 44, 48, 83, 248, 32, 32, 221, 248, 48, 192, 98, 68, 67, 248, ++ 32, 32, 15, 152, 24, 240, 32, 219, 213, 248, 232, 50, 148, 48, 3, 235, ++ 128, 3, 90, 104, 17, 152, 18, 24, 90, 96, 187, 248, 20, 48, 153, 7, ++ 69, 208, 155, 248, 54, 128, 213, 248, 232, 50, 8, 240, 127, 8, 91, 177, ++ 64, 70, 24, 240, 9, 219, 213, 248, 232, 50, 44, 48, 83, 248, 32, 32, ++ 13, 153, 82, 24, 67, 248, 32, 32, 155, 249, 57, 48, 0, 43, 20, 218, ++ 213, 248, 80, 50, 13, 152, 26, 106, 18, 24, 26, 98, 213, 248, 232, 50, ++ 91, 177, 64, 70, 24, 240, 240, 218, 213, 248, 232, 50, 86, 48, 3, 235, ++ 128, 3, 90, 104, 13, 153, 82, 24, 90, 96, 155, 248, 57, 48, 19, 240, ++ 48, 15, 20, 208, 213, 248, 80, 50, 13, 152, 90, 106, 18, 24, 90, 98, ++ 213, 248, 232, 50, 91, 177, 64, 70, 24, 240, 214, 218, 213, 248, 232, ++ 50, 118, 48, 83, 248, 32, 32, 13, 153, 82, 24, 67, 248, 32, 32, 35, ++ 104, 149, 248, 225, 131, 147, 248, 156, 48, 18, 154, 8, 241, 255, 56, ++ 1, 43, 8, 234, 2, 8, 3, 208, 6, 235, 8, 3, 219, 120, 24, 147, 182, 248, ++ 90, 48, 221, 248, 72, 192, 114, 120, 195, 235, 12, 3, 27, 5, 27, 13, ++ 147, 66, 128, 242, 6, 129, 6, 241, 67, 12, 96, 70, 65, 70, 205, 248, ++ 76, 192, 232, 243, 167, 245, 16, 152, 32, 185, 35, 104, 147, 248, 156, ++ 48, 1, 43, 71, 209, 35, 104, 147, 248, 156, 48, 1, 43, 1, 209, 14, 153, ++ 6, 224, 18, 154, 221, 248, 108, 192, 204, 235, 2, 1, 9, 5, 9, 13, 63, ++ 41, 55, 216, 40, 168, 232, 243, 141, 245, 0, 40, 50, 208, 19, 152, 65, ++ 70, 232, 243, 135, 245, 184, 177, 19, 152, 65, 70, 6, 241, 75, 11, 232, ++ 243, 38, 245, 88, 70, 65, 70, 232, 243, 124, 245, 24, 177, 88, 70, 65, ++ 70, 232, 243, 29, 245, 6, 235, 8, 3, 0, 34, 218, 112, 182, 248, 84, ++ 48, 1, 59, 166, 248, 84, 48, 2, 34, 212, 248, 120, 4, 81, 70, 71, 240, ++ 82, 218, 221, 248, 92, 192, 12, 241, 1, 3, 219, 178, 23, 147, 35, 104, ++ 147, 248, 156, 48, 1, 43, 64, 240, 179, 128, 179, 224, 0, 191, 138, ++ 182, 135, 0, 11, 152, 202, 248, 40, 112, 0, 40, 49, 208, 35, 104, 147, ++ 248, 156, 48, 1, 43, 44, 209, 43, 104, 147, 248, 1, 198, 28, 240, 8, ++ 12, 38, 209, 185, 241, 1, 15, 35, 209, 32, 70, 57, 70, 82, 70, 9, 155, ++ 205, 248, 0, 192, 205, 248, 32, 192, 254, 247, 9, 255, 221, 248, 32, ++ 192, 11, 144, 0, 40, 64, 240, 144, 128, 6, 235, 8, 3, 216, 112, 182, ++ 248, 84, 48, 19, 152, 1, 59, 166, 248, 84, 48, 65, 70, 232, 243, 41, ++ 245, 0, 40, 0, 240, 131, 128, 19, 152, 65, 70, 232, 243, 200, 244, 125, ++ 224, 35, 104, 147, 248, 156, 48, 1, 43, 62, 208, 11, 153, 0, 41, 59, ++ 208, 221, 248, 96, 192, 32, 152, 132, 69, 54, 218, 185, 241, 0, 15, ++ 2, 208, 185, 241, 3, 15, 48, 209, 187, 248, 118, 48, 67, 244, 0, 99, ++ 171, 248, 118, 48, 6, 235, 8, 3, 218, 120, 221, 248, 72, 192, 1, 50, ++ 218, 112, 182, 248, 230, 48, 21, 153, 6, 235, 67, 2, 162, 248, 100, ++ 192, 149, 248, 225, 35, 1, 51, 1, 58, 19, 64, 166, 248, 230, 48, 182, ++ 248, 232, 48, 1, 51, 166, 248, 232, 48, 215, 248, 52, 49, 211, 248, ++ 84, 192, 152, 109, 147, 75, 91, 92, 13, 43, 1, 220, 1, 51, 0, 224, 15, ++ 35, 57, 70, 82, 70, 224, 71, 0, 35, 58, 224, 160, 104, 253, 243, 178, ++ 247, 2, 7, 21, 213, 31, 154, 154, 185, 6, 235, 8, 3, 218, 112, 182, ++ 248, 84, 48, 6, 241, 252, 0, 1, 59, 166, 248, 84, 48, 18, 153, 114, ++ 120, 254, 247, 108, 250, 182, 248, 248, 48, 1, 51, 166, 248, 248, 48, ++ 6, 224, 6, 241, 75, 0, 65, 70, 232, 243, 229, 247, 1, 35, 29, 147, 35, ++ 104, 211, 248, 136, 48, 211, 248, 176, 33, 1, 50, 195, 248, 176, 33, ++ 215, 248, 64, 50, 1, 51, 199, 248, 64, 50, 215, 248, 92, 49, 1, 51, ++ 199, 248, 92, 49, 1, 35, 4, 224, 16, 147, 2, 224, 99, 70, 0, 224, 75, ++ 70, 14, 152, 66, 28, 210, 178, 14, 146, 35, 177, 96, 104, 81, 70, 1, ++ 34, 239, 247, 70, 250, 35, 104, 147, 248, 156, 32, 1, 42, 20, 209, 213, ++ 248, 80, 50, 32, 70, 211, 248, 160, 16, 1, 57, 195, 248, 160, 16, 211, ++ 248, 156, 16, 1, 49, 195, 248, 156, 16, 26, 153, 246, 247, 25, 249, ++ 14, 153, 221, 248, 88, 192, 97, 69, 5, 224, 221, 248, 140, 192, 12, ++ 244, 192, 99, 179, 245, 192, 111, 37, 208, 99, 105, 221, 248, 104, 192, ++ 2, 33, 83, 248, 44, 0, 88, 75, 219, 107, 152, 71, 130, 70, 0, 40, 127, ++ 244, 227, 173, 23, 224, 73, 35, 67, 250, 8, 243, 79, 246, 255, 124, ++ 0, 32, 3, 240, 1, 3, 205, 248, 100, 192, 79, 240, 255, 60, 205, 248, ++ 112, 144, 31, 147, 205, 248, 96, 192, 14, 144, 23, 144, 29, 144, 20, ++ 144, 15, 144, 193, 70, 201, 229, 35, 104, 221, 248, 112, 144, 147, 248, ++ 156, 48, 1, 43, 4, 208, 213, 248, 232, 50, 26, 110, 1, 50, 26, 102, ++ 29, 153, 33, 177, 40, 70, 49, 70, 0, 34, 255, 247, 150, 250, 35, 104, ++ 147, 248, 156, 48, 1, 43, 42, 209, 12, 154, 13, 152, 19, 24, 17, 209, ++ 10, 153, 0, 41, 64, 208, 15, 154, 20, 152, 0, 147, 1, 147, 2, 147, 3, ++ 147, 4, 146, 6, 147, 5, 144, 212, 248, 96, 1, 57, 70, 25, 154, 22, 155, ++ 17, 224, 17, 153, 13, 154, 0, 145, 15, 152, 20, 153, 0, 35, 1, 146, ++ 3, 147, 5, 145, 6, 147, 205, 248, 8, 144, 4, 144, 212, 248, 96, 1, 25, ++ 154, 12, 155, 57, 70, 33, 240, 49, 251, 28, 224, 10, 154, 210, 177, ++ 14, 155, 16, 152, 221, 248, 96, 192, 0, 147, 128, 240, 1, 3, 1, 147, ++ 33, 152, 95, 250, 140, 243, 15, 153, 20, 154, 2, 147, 0, 35, 4, 147, ++ 5, 145, 6, 146, 7, 147, 3, 144, 212, 248, 96, 1, 57, 70, 9, 154, 23, ++ 155, 33, 240, 57, 251, 35, 104, 147, 248, 156, 48, 1, 43, 5, 208, 32, ++ 70, 26, 153, 149, 248, 46, 32, 246, 247, 124, 248, 187, 104, 3, 244, ++ 128, 83, 79, 234, 19, 56, 43, 177, 148, 248, 116, 130, 72, 240, 2, 3, ++ 132, 248, 116, 50, 40, 70, 30, 153, 50, 70, 255, 247, 217, 249, 187, ++ 104, 32, 70, 219, 4, 9, 155, 72, 191, 132, 248, 116, 130, 3, 241, 20, ++ 1, 20, 240, 92, 218, 1, 70, 34, 152, 20, 240, 8, 219, 43, 176, 189, ++ 232, 240, 143, 0, 191, 72, 194, 135, 0, 208, 134, 135, 0, 45, 233, 240, ++ 71, 4, 70, 153, 70, 0, 41, 0, 240, 135, 128, 75, 104, 91, 3, 64, 241, ++ 131, 128, 67, 104, 206, 88, 211, 137, 3, 240, 7, 3, 54, 51, 86, 248, ++ 35, 80, 0, 45, 120, 208, 43, 120, 2, 43, 117, 208, 17, 70, 0, 104, 254, ++ 247, 47, 251, 181, 248, 90, 48, 106, 120, 195, 26, 27, 5, 27, 13, 147, ++ 66, 128, 70, 104, 218, 148, 248, 225, 115, 5, 241, 67, 10, 1, 63, 7, ++ 64, 191, 178, 80, 70, 57, 70, 232, 243, 142, 243, 0, 40, 91, 208, 153, ++ 249, 25, 48, 251, 177, 80, 70, 57, 70, 5, 241, 75, 8, 232, 243, 41, ++ 243, 64, 70, 57, 70, 232, 243, 127, 243, 24, 177, 64, 70, 57, 70, 232, ++ 243, 32, 243, 0, 35, 239, 25, 251, 112, 181, 248, 84, 48, 213, 248, ++ 244, 32, 1, 59, 165, 248, 84, 48, 99, 104, 32, 70, 209, 88, 42, 70, ++ 255, 247, 110, 249, 49, 224, 212, 248, 80, 50, 218, 108, 1, 50, 218, ++ 100, 35, 104, 27, 104, 147, 248, 47, 32, 153, 248, 24, 48, 10, 177, ++ 1, 43, 1, 208, 7, 43, 23, 209, 239, 25, 251, 120, 1, 51, 251, 112, 181, ++ 248, 230, 48, 5, 235, 67, 2, 162, 248, 100, 128, 148, 248, 225, 35, ++ 1, 51, 1, 58, 19, 64, 165, 248, 230, 48, 181, 248, 232, 48, 1, 51, 165, ++ 248, 232, 48, 189, 232, 240, 135, 5, 241, 75, 0, 57, 70, 232, 243, 100, ++ 246, 32, 70, 41, 70, 0, 34, 255, 247, 143, 249, 32, 104, 49, 70, 42, ++ 70, 189, 232, 240, 71, 254, 247, 54, 185, 189, 232, 240, 135, 45, 233, ++ 240, 65, 13, 70, 20, 70, 17, 70, 26, 70, 30, 70, 157, 248, 24, 112, ++ 254, 247, 41, 249, 40, 70, 33, 70, 50, 70, 59, 70, 189, 232, 240, 65, ++ 255, 247, 201, 184, 0, 0, 45, 233, 240, 79, 7, 70, 13, 105, 154, 70, ++ 215, 248, 0, 52, 137, 176, 85, 248, 3, 192, 0, 32, 156, 249, 8, 144, ++ 14, 70, 20, 70, 7, 144, 61, 104, 211, 137, 185, 241, 0, 15, 0, 240, ++ 3, 129, 188, 248, 10, 144, 3, 240, 7, 3, 73, 250, 3, 249, 25, 240, 1, ++ 9, 4, 209, 248, 224, 129, 70, 246, 224, 193, 70, 244, 224, 146, 248, ++ 31, 128, 24, 240, 8, 8, 246, 209, 7, 168, 0, 144, 40, 70, 20, 240, 236, ++ 219, 7, 154, 0, 42, 240, 209, 227, 137, 3, 240, 7, 3, 4, 147, 163, 105, ++ 153, 5, 8, 212, 115, 74, 4, 152, 115, 73, 18, 92, 138, 92, 166, 50, ++ 85, 248, 34, 144, 0, 224, 145, 70, 122, 104, 4, 153, 178, 88, 3, 146, ++ 3, 152, 1, 241, 54, 2, 80, 248, 34, 128, 184, 241, 0, 15, 12, 209, 218, ++ 6, 0, 241, 200, 128, 67, 70, 56, 70, 3, 153, 4, 154, 254, 247, 70, 254, ++ 128, 70, 0, 40, 0, 240, 190, 128, 152, 248, 0, 48, 1, 43, 64, 240, 185, ++ 128, 205, 248, 20, 128, 79, 240, 0, 11, 176, 70, 46, 70, 223, 248, 120, ++ 161, 226, 138, 218, 248, 0, 48, 0, 33, 83, 248, 34, 80, 225, 130, 112, ++ 104, 33, 70, 237, 247, 23, 248, 142, 40, 5, 216, 56, 70, 3, 153, 34, ++ 70, 4, 155, 254, 247, 133, 254, 163, 139, 3, 244, 128, 83, 155, 178, ++ 0, 43, 24, 191, 79, 240, 1, 11, 59, 104, 147, 248, 132, 55, 51, 177, ++ 227, 127, 3, 240, 32, 3, 0, 43, 24, 191, 79, 240, 1, 11, 0, 35, 0, 147, ++ 3, 155, 48, 70, 3, 241, 16, 1, 34, 70, 4, 155, 15, 240, 178, 219, 184, ++ 185, 170, 70, 53, 70, 70, 70, 221, 248, 20, 128, 186, 241, 0, 15, 1, ++ 208, 186, 248, 0, 160, 164, 248, 22, 160, 57, 70, 67, 70, 40, 70, 3, ++ 154, 205, 248, 0, 176, 79, 240, 0, 8, 255, 247, 61, 255, 33, 70, 49, ++ 224, 227, 137, 35, 244, 128, 83, 227, 129, 77, 177, 34, 70, 48, 70, ++ 65, 70, 43, 70, 205, 248, 0, 144, 44, 70, 15, 240, 51, 218, 165, 231, ++ 221, 248, 20, 128, 48, 70, 57, 70, 3, 154, 67, 70, 205, 248, 0, 176, ++ 255, 247, 34, 255, 80, 224, 44, 72, 202, 138, 3, 104, 83, 248, 34, 144, ++ 0, 35, 203, 130, 203, 137, 104, 104, 35, 244, 128, 83, 203, 129, 1, ++ 34, 238, 247, 238, 255, 51, 105, 27, 177, 219, 104, 26, 106, 1, 50, ++ 26, 98, 8, 241, 1, 8, 73, 70, 0, 41, 229, 209, 184, 241, 0, 15, 51, ++ 208, 43, 104, 211, 248, 136, 48, 26, 106, 66, 68, 26, 98, 215, 248, ++ 80, 50, 218, 107, 66, 68, 218, 99, 214, 248, 92, 49, 67, 68, 198, 248, ++ 92, 49, 34, 224, 21, 75, 226, 138, 27, 104, 0, 32, 83, 248, 34, 128, ++ 227, 137, 224, 130, 35, 244, 128, 83, 227, 129, 184, 241, 0, 15, 7, ++ 208, 56, 70, 49, 70, 34, 70, 67, 70, 205, 248, 0, 144, 15, 240, 227, ++ 217, 214, 248, 52, 49, 34, 70, 93, 109, 152, 109, 49, 70, 83, 70, 168, ++ 71, 68, 70, 0, 224, 47, 70, 0, 44, 220, 209, 9, 176, 189, 232, 240, ++ 143, 0, 191, 138, 182, 135, 0, 84, 194, 135, 0, 32, 7, 0, 0, 36, 35, ++ 3, 251, 1, 3, 1, 34, 131, 248, 100, 34, 112, 71, 0, 0, 45, 233, 240, ++ 79, 208, 248, 0, 128, 245, 176, 216, 248, 4, 112, 37, 145, 17, 104, ++ 5, 70, 28, 146, 0, 36, 97, 170, 64, 70, 21, 147, 11, 151, 115, 148, ++ 112, 145, 242, 247, 153, 250, 112, 155, 218, 137, 155, 106, 2, 240, ++ 7, 2, 15, 146, 15, 159, 165, 74, 8, 147, 210, 93, 9, 146, 9, 159, 52, ++ 34, 122, 67, 2, 245, 60, 114, 175, 24, 16, 151, 31, 105, 107, 104, 35, ++ 151, 8, 159, 42, 146, 251, 88, 15, 159, 20, 147, 7, 241, 54, 3, 20, ++ 159, 87, 248, 35, 176, 15, 159, 235, 25, 219, 127, 9, 159, 31, 147, ++ 36, 35, 3, 251, 7, 83, 3, 245, 22, 115, 7, 147, 216, 248, 0, 48, 147, ++ 248, 156, 48, 1, 43, 45, 209, 40, 70, 57, 70, 253, 247, 144, 255, 3, ++ 70, 213, 248, 232, 34, 11, 43, 40, 191, 11, 35, 74, 51, 2, 235, 131, ++ 3, 90, 104, 19, 144, 1, 50, 90, 96, 0, 40, 0, 240, 136, 134, 152, 248, ++ 74, 54, 11, 152, 112, 153, 19, 177, 232, 243, 77, 244, 1, 224, 236, ++ 247, 8, 255, 216, 248, 28, 48, 9, 159, 3, 235, 135, 3, 91, 104, 27, ++ 104, 131, 66, 7, 216, 213, 248, 80, 50, 90, 105, 1, 50, 90, 97, 0, 240, ++ 110, 190, 19, 148, 9, 159, 121, 75, 219, 93, 35, 159, 41, 147, 215, ++ 248, 68, 51, 41, 159, 3, 235, 71, 3, 155, 139, 12, 147, 12, 159, 184, ++ 248, 192, 50, 39, 177, 27, 177, 159, 66, 40, 191, 31, 70, 3, 224, 12, ++ 159, 0, 43, 24, 191, 31, 70, 12, 151, 31, 159, 79, 240, 0, 9, 63, 2, ++ 44, 151, 12, 159, 43, 70, 255, 8, 45, 151, 79, 240, 255, 55, 69, 70, ++ 205, 248, 160, 144, 205, 248, 156, 144, 205, 248, 56, 144, 205, 248, ++ 152, 144, 205, 248, 72, 144, 205, 248, 104, 144, 205, 248, 68, 144, ++ 205, 248, 136, 144, 202, 70, 205, 248, 100, 144, 205, 248, 120, 144, ++ 205, 248, 132, 144, 205, 248, 96, 144, 205, 248, 24, 144, 205, 248, ++ 92, 144, 205, 248, 116, 144, 205, 248, 88, 144, 13, 151, 205, 248, 172, ++ 144, 152, 70, 0, 240, 134, 188, 140, 139, 136, 105, 36, 5, 36, 13, 16, ++ 240, 4, 0, 4, 208, 40, 70, 113, 170, 15, 240, 229, 218, 17, 224, 43, ++ 104, 147, 248, 156, 48, 1, 43, 5, 209, 213, 248, 96, 1, 8, 153, 41, ++ 154, 32, 240, 199, 255, 0, 144, 112, 169, 40, 70, 114, 170, 113, 171, ++ 244, 247, 122, 252, 10, 144, 10, 159, 111, 179, 67, 70, 16, 55, 168, ++ 70, 29, 70, 211, 248, 80, 50, 8, 209, 90, 107, 28, 159, 1, 50, 90, 99, ++ 112, 155, 0, 38, 59, 96, 0, 240, 94, 188, 154, 107, 1, 50, 154, 99, ++ 187, 248, 94, 48, 163, 66, 17, 209, 149, 248, 225, 19, 11, 241, 75, ++ 0, 1, 57, 33, 64, 1, 52, 36, 5, 232, 243, 18, 244, 36, 13, 40, 70, 89, ++ 70, 0, 34, 254, 247, 60, 255, 171, 248, 94, 64, 28, 159, 0, 38, 62, ++ 96, 0, 240, 64, 188, 112, 155, 156, 104, 152, 248, 225, 51, 180, 248, ++ 140, 96, 1, 59, 54, 9, 51, 64, 4, 241, 122, 0, 27, 147, 236, 247, 233, ++ 254, 8, 179, 67, 70, 168, 70, 29, 70, 211, 248, 80, 50, 187, 248, 94, ++ 64, 218, 107, 1, 50, 180, 66, 218, 99, 14, 209, 1, 52, 11, 241, 75, ++ 0, 27, 153, 36, 5, 232, 243, 227, 243, 36, 13, 40, 70, 89, 70, 10, 154, ++ 254, 247, 13, 255, 171, 248, 94, 64, 11, 152, 112, 153, 1, 34, 238, ++ 247, 92, 254, 0, 38, 31, 224, 112, 155, 154, 139, 2, 244, 128, 81, 137, ++ 178, 33, 177, 34, 244, 128, 82, 1, 32, 154, 131, 43, 144, 155, 105, ++ 223, 5, 27, 212, 43, 153, 64, 70, 0, 145, 50, 70, 89, 70, 115, 171, ++ 255, 247, 125, 248, 144, 185, 67, 70, 6, 70, 112, 153, 11, 152, 1, 34, ++ 168, 70, 29, 70, 238, 247, 58, 254, 28, 159, 62, 96, 79, 240, 255, 55, ++ 10, 151, 232, 227, 138, 182, 135, 0, 84, 194, 135, 0, 112, 155, 27, ++ 153, 154, 105, 79, 246, 255, 22, 208, 5, 68, 191, 34, 244, 128, 114, ++ 154, 97, 11, 241, 67, 0, 232, 243, 116, 240, 35, 136, 30, 64, 163, 138, ++ 3, 240, 3, 3, 211, 241, 1, 3, 56, 191, 0, 35, 32, 147, 0, 35, 132, 248, ++ 72, 48, 132, 248, 73, 48, 43, 104, 147, 248, 156, 48, 1, 43, 45, 208, ++ 13, 159, 1, 55, 9, 209, 27, 159, 11, 235, 7, 3, 219, 120, 13, 147, 112, ++ 155, 155, 105, 195, 243, 64, 51, 23, 147, 13, 159, 207, 177, 31, 152, ++ 135, 66, 4, 218, 23, 159, 167, 177, 152, 248, 45, 48, 155, 177, 32, ++ 159, 231, 177, 67, 70, 168, 70, 29, 70, 79, 242, 249, 19, 51, 64, 67, ++ 240, 8, 3, 35, 128, 99, 136, 1, 38, 67, 244, 128, 83, 99, 128, 29, 150, ++ 153, 227, 1, 39, 1, 224, 1, 39, 23, 151, 22, 151, 32, 159, 63, 177, ++ 148, 248, 59, 112, 148, 248, 58, 48, 63, 2, 6, 224, 1, 39, 29, 151, ++ 148, 248, 56, 112, 148, 248, 55, 48, 63, 2, 112, 153, 255, 24, 138, ++ 105, 191, 178, 18, 244, 0, 98, 33, 208, 155, 248, 0, 48, 3, 43, 4, 208, ++ 27, 177, 8, 152, 144, 248, 231, 48, 35, 179, 67, 70, 168, 70, 29, 70, ++ 186, 177, 8, 153, 145, 248, 231, 48, 35, 185, 155, 248, 0, 48, 3, 43, ++ 0, 208, 115, 185, 148, 248, 115, 48, 132, 248, 113, 112, 35, 240, 8, ++ 3, 63, 10, 132, 248, 115, 48, 132, 248, 114, 112, 2, 224, 67, 70, 168, ++ 70, 29, 70, 38, 244, 96, 102, 38, 240, 6, 6, 54, 4, 54, 12, 38, 128, ++ 1, 38, 80, 227, 27, 154, 11, 235, 2, 3, 219, 120, 35, 177, 216, 248, ++ 80, 50, 218, 104, 1, 50, 218, 96, 148, 248, 51, 48, 11, 152, 36, 147, ++ 149, 248, 74, 54, 43, 177, 232, 243, 155, 242, 24, 153, 9, 24, 24, 145, ++ 4, 224, 236, 247, 83, 253, 24, 154, 18, 24, 24, 146, 43, 104, 147, 248, ++ 156, 48, 1, 43, 64, 240, 205, 128, 7, 152, 8, 153, 3, 105, 153, 66, ++ 3, 209, 3, 125, 15, 154, 147, 66, 9, 208, 7, 152, 15, 153, 8, 155, 1, ++ 117, 3, 97, 9, 153, 64, 70, 4, 34, 255, 247, 197, 253, 148, 248, 115, ++ 32, 7, 152, 66, 240, 8, 2, 132, 248, 115, 32, 148, 248, 112, 48, 129, ++ 126, 153, 66, 4, 209, 193, 126, 2, 240, 240, 2, 138, 66, 11, 208, 7, ++ 153, 64, 70, 139, 118, 148, 248, 115, 48, 0, 34, 35, 240, 15, 3, 203, ++ 118, 9, 153, 255, 247, 168, 253, 180, 248, 76, 48, 31, 250, 131, 249, ++ 27, 178, 0, 43, 13, 218, 64, 70, 9, 153, 1, 34, 255, 247, 156, 253, ++ 0, 35, 0, 147, 213, 248, 96, 1, 8, 153, 74, 70, 1, 35, 32, 240, 103, ++ 254, 180, 248, 140, 48, 148, 248, 112, 160, 164, 248, 74, 48, 20, 154, ++ 147, 75, 10, 240, 127, 10, 146, 248, 5, 144, 20, 34, 2, 251, 10, 51, ++ 16, 152, 90, 104, 3, 107, 70, 244, 0, 118, 154, 66, 18, 211, 3, 136, ++ 80, 70, 155, 8, 164, 248, 72, 48, 23, 240, 108, 220, 16, 153, 8, 24, ++ 131, 120, 75, 69, 6, 210, 80, 70, 23, 240, 100, 220, 16, 154, 16, 24, ++ 144, 248, 2, 144, 12, 155, 64, 70, 148, 248, 112, 16, 148, 248, 115, ++ 32, 254, 247, 70, 248, 164, 248, 82, 0, 32, 155, 83, 185, 64, 70, 148, ++ 248, 54, 16, 148, 248, 57, 32, 12, 155, 254, 247, 58, 248, 164, 248, ++ 84, 0, 4, 224, 0, 35, 132, 248, 84, 48, 132, 248, 85, 48, 79, 234, 9, ++ 35, 67, 234, 9, 9, 164, 248, 80, 144, 112, 154, 15, 152, 146, 105, 18, ++ 244, 0, 95, 8, 235, 0, 2, 10, 208, 210, 125, 66, 244, 128, 114, 164, ++ 248, 64, 32, 152, 248, 45, 32, 19, 67, 164, 248, 80, 48, 4, 224, 211, ++ 125, 44, 153, 11, 67, 164, 248, 64, 48, 43, 104, 147, 248, 156, 48, ++ 1, 43, 9, 209, 36, 154, 42, 177, 83, 28, 3, 55, 3, 235, 151, 7, 191, ++ 0, 0, 224, 4, 55, 191, 178, 7, 152, 3, 123, 99, 177, 195, 122, 211, ++ 241, 1, 3, 56, 191, 0, 35, 195, 114, 0, 35, 3, 115, 216, 248, 80, 50, ++ 218, 110, 1, 50, 218, 102, 64, 70, 57, 70, 9, 154, 253, 247, 194, 253, ++ 48, 224, 6, 153, 177, 185, 4, 241, 94, 2, 39, 146, 180, 248, 94, 48, ++ 70, 244, 2, 118, 3, 240, 252, 3, 180, 43, 4, 209, 1, 35, 70, 240, 4, ++ 6, 34, 147, 11, 224, 196, 43, 9, 209, 1, 32, 70, 244, 0, 102, 17, 144, ++ 4, 224, 70, 244, 128, 99, 79, 242, 243, 86, 30, 64, 3, 55, 79, 246, ++ 252, 115, 59, 64, 36, 159, 11, 152, 122, 28, 30, 159, 3, 235, 130, 3, ++ 255, 24, 112, 153, 30, 151, 236, 247, 66, 252, 33, 159, 56, 24, 128, ++ 178, 33, 144, 38, 128, 6, 152, 112, 154, 47, 171, 67, 248, 32, 32, 43, ++ 104, 1, 48, 147, 248, 156, 48, 6, 144, 1, 43, 0, 240, 97, 129, 1, 40, ++ 64, 240, 94, 129, 22, 159, 39, 177, 148, 248, 112, 160, 148, 248, 115, ++ 96, 178, 224, 27, 159, 148, 248, 54, 160, 11, 235, 7, 3, 219, 120, 31, ++ 159, 148, 248, 57, 96, 187, 66, 64, 242, 167, 128, 152, 248, 84, 50, ++ 0, 43, 0, 240, 162, 128, 148, 248, 112, 48, 83, 69, 0, 240, 157, 128, ++ 6, 240, 207, 6, 132, 248, 57, 96, 83, 70, 213, 248, 96, 1, 8, 153, 180, ++ 248, 76, 32, 32, 240, 171, 253, 163, 137, 199, 178, 3, 240, 7, 3, 2, ++ 59, 32, 244, 224, 41, 3, 43, 8, 216, 223, 232, 3, 240, 2, 2, 5, 5, 73, ++ 244, 128, 57, 1, 224, 73, 244, 0, 57, 9, 244, 224, 35, 179, 245, 0, ++ 63, 6, 209, 181, 248, 72, 52, 3, 244, 96, 83, 179, 245, 128, 95, 9, ++ 208, 25, 240, 64, 127, 10, 209, 9, 240, 127, 3, 22, 43, 6, 216, 12, ++ 74, 154, 64, 3, 213, 41, 244, 224, 41, 73, 244, 128, 57, 31, 47, 4, ++ 216, 7, 47, 140, 191, 0, 35, 1, 35, 14, 224, 32, 47, 10, 208, 167, 241, ++ 78, 3, 14, 43, 140, 191, 0, 35, 1, 35, 4, 224, 172, 240, 135, 0, 0, ++ 2, 16, 40, 1, 35, 219, 178, 0, 43, 55, 208, 213, 248, 116, 4, 41, 244, ++ 128, 25, 131, 120, 41, 244, 64, 121, 1, 43, 4, 217, 42, 106, 146, 249, ++ 77, 32, 1, 42, 20, 208, 9, 240, 64, 114, 178, 241, 128, 127, 29, 209, ++ 1, 43, 27, 217, 43, 106, 147, 249, 77, 48, 1, 51, 22, 209, 8, 153, 75, ++ 104, 89, 0, 18, 213, 14, 48, 2, 33, 231, 243, 46, 246, 104, 177, 6, ++ 240, 207, 6, 70, 240, 16, 6, 132, 248, 57, 96, 216, 248, 80, 50, 73, ++ 244, 128, 25, 154, 106, 1, 50, 154, 98, 6, 224, 213, 248, 116, 52, 27, ++ 123, 1, 43, 8, 191, 73, 244, 128, 121, 149, 249, 32, 50, 40, 70, 1, ++ 43, 8, 191, 73, 244, 0, 9, 73, 70, 181, 248, 72, 36, 14, 240, 248, 220, ++ 42, 240, 127, 10, 71, 234, 10, 10, 1, 39, 160, 129, 132, 248, 54, 160, ++ 40, 151, 20, 152, 79, 234, 218, 23, 10, 240, 127, 10, 208, 248, 12, ++ 144, 80, 70, 23, 240, 251, 218, 246, 9, 7, 235, 64, 3, 6, 235, 67, 3, ++ 14, 51, 88, 248, 35, 48, 153, 69, 3, 210, 20, 153, 201, 104, 25, 145, ++ 10, 224, 80, 70, 23, 240, 234, 218, 7, 235, 64, 3, 6, 235, 67, 3, 14, ++ 51, 88, 248, 35, 48, 25, 147, 12, 154, 202, 177, 147, 75, 20, 34, 54, ++ 177, 2, 251, 10, 51, 15, 177, 219, 104, 9, 224, 155, 104, 7, 224, 31, ++ 177, 2, 251, 10, 51, 91, 104, 2, 224, 2, 251, 10, 242, 155, 88, 45, ++ 159, 155, 10, 123, 67, 25, 159, 159, 66, 40, 191, 31, 70, 25, 151, 148, ++ 248, 112, 32, 2, 240, 127, 3, 67, 240, 128, 119, 26, 151, 18, 6, 32, ++ 159, 68, 191, 67, 240, 129, 115, 26, 147, 148, 248, 54, 48, 39, 177, ++ 5, 34, 179, 251, 242, 243, 18, 147, 9, 224, 3, 240, 127, 2, 66, 240, ++ 128, 119, 18, 151, 31, 6, 68, 191, 66, 240, 129, 114, 18, 146, 34, 159, ++ 23, 185, 17, 159, 0, 47, 64, 208, 26, 153, 0, 34, 35, 152, 16, 240, ++ 139, 218, 18, 153, 38, 144, 0, 34, 35, 152, 16, 240, 133, 218, 40, 159, ++ 14, 144, 0, 47, 49, 208, 14, 153, 181, 248, 72, 36, 40, 70, 148, 248, ++ 51, 144, 14, 240, 117, 220, 32, 130, 39, 159, 110, 174, 59, 136, 17, ++ 159, 40, 70, 0, 47, 12, 191, 20, 34, 14, 34, 14, 153, 0, 150, 8, 240, ++ 121, 220, 6, 34, 49, 70, 4, 241, 46, 0, 229, 247, 83, 251, 14, 159, ++ 162, 138, 79, 246, 207, 115, 23, 240, 64, 113, 132, 248, 51, 144, 2, ++ 234, 3, 3, 6, 209, 7, 240, 127, 2, 22, 42, 2, 216, 88, 72, 144, 64, ++ 0, 212, 1, 33, 67, 234, 1, 17, 161, 130, 43, 104, 147, 248, 156, 48, ++ 1, 43, 31, 208, 81, 75, 20, 34, 2, 251, 10, 51, 16, 159, 90, 104, 59, ++ 107, 154, 66, 8, 211, 80, 70, 23, 240, 80, 218, 56, 24, 131, 120, 6, ++ 152, 152, 66, 0, 240, 176, 128, 23, 159, 47, 177, 152, 248, 45, 48, ++ 6, 152, 152, 66, 0, 240, 168, 128, 20, 159, 6, 152, 123, 121, 152, 66, ++ 13, 209, 161, 224, 6, 153, 19, 159, 185, 66, 8, 211, 64, 70, 9, 153, ++ 253, 247, 30, 251, 0, 40, 0, 240, 151, 128, 63, 24, 19, 151, 6, 152, ++ 50, 40, 0, 240, 145, 128, 21, 159, 37, 152, 12, 35, 3, 251, 7, 2, 152, ++ 248, 44, 16, 210, 104, 112, 146, 73, 177, 66, 185, 254, 7, 6, 213, 39, ++ 240, 1, 7, 3, 251, 7, 3, 219, 104, 21, 151, 112, 147, 112, 153, 0, 41, ++ 107, 208, 139, 105, 88, 5, 92, 213, 139, 106, 8, 159, 187, 66, 88, 209, ++ 203, 137, 15, 159, 3, 240, 7, 3, 187, 66, 82, 209, 149, 248, 74, 54, ++ 11, 152, 19, 177, 231, 243, 191, 247, 1, 224, 236, 247, 122, 250, 235, ++ 105, 113, 154, 24, 159, 3, 235, 130, 3, 91, 104, 192, 25, 27, 104, 131, ++ 66, 5, 216, 216, 248, 80, 50, 90, 105, 1, 50, 90, 97, 67, 224, 43, 104, ++ 147, 248, 156, 48, 1, 43, 41, 208, 11, 152, 112, 153, 236, 247, 83, ++ 250, 20, 159, 59, 48, 59, 137, 30, 159, 128, 178, 152, 66, 44, 191, ++ 63, 24, 255, 24, 59, 70, 25, 159, 187, 66, 45, 216, 112, 155, 152, 248, ++ 225, 35, 155, 139, 1, 58, 27, 5, 27, 13, 19, 64, 152, 248, 44, 32, 91, ++ 68, 219, 120, 50, 177, 31, 159, 187, 66, 52, 191, 29, 159, 22, 159, ++ 47, 177, 25, 224, 13, 159, 159, 66, 1, 208, 112, 146, 22, 224, 37, 159, ++ 21, 153, 56, 29, 231, 243, 148, 246, 112, 144, 15, 224, 172, 240, 135, ++ 0, 0, 2, 16, 40, 43, 104, 147, 248, 156, 48, 1, 43, 4, 209, 64, 70, ++ 9, 153, 4, 34, 255, 247, 180, 250, 0, 35, 112, 147, 112, 153, 0, 41, ++ 127, 244, 118, 171, 67, 70, 14, 70, 168, 70, 10, 145, 29, 70, 6, 152, ++ 0, 40, 0, 240, 98, 129, 3, 224, 67, 70, 0, 38, 168, 70, 29, 70, 213, ++ 248, 80, 50, 6, 153, 90, 104, 82, 24, 90, 96, 216, 248, 0, 32, 146, ++ 248, 156, 32, 1, 42, 0, 240, 31, 129, 26, 104, 213, 248, 232, 66, 1, ++ 50, 26, 96, 68, 177, 80, 70, 23, 240, 128, 217, 44, 48, 84, 248, 32, ++ 48, 1, 51, 68, 248, 32, 48, 6, 155, 90, 30, 47, 171, 83, 248, 34, 48, ++ 79, 246, 255, 18, 155, 104, 25, 136, 10, 64, 66, 244, 192, 98, 0, 33, ++ 26, 128, 147, 248, 51, 32, 131, 248, 51, 16, 153, 138, 30, 159, 146, ++ 0, 137, 7, 194, 235, 7, 2, 5, 209, 147, 248, 59, 16, 147, 248, 58, 48, ++ 9, 2, 4, 224, 147, 248, 56, 16, 147, 248, 55, 48, 9, 2, 203, 24, 155, ++ 178, 223, 28, 39, 240, 3, 7, 223, 27, 47, 155, 215, 25, 156, 104, 59, ++ 10, 132, 248, 114, 48, 148, 248, 115, 48, 132, 248, 113, 112, 67, 240, ++ 8, 3, 132, 248, 115, 48, 227, 143, 67, 177, 64, 70, 26, 153, 58, 70, ++ 8, 240, 149, 217, 79, 240, 4, 9, 224, 135, 1, 224, 79, 240, 2, 9, 180, ++ 248, 64, 48, 75, 177, 64, 70, 18, 153, 58, 70, 8, 240, 135, 217, 164, ++ 248, 64, 0, 4, 32, 7, 144, 1, 224, 2, 33, 7, 145, 143, 75, 20, 34, 2, ++ 251, 10, 51, 16, 152, 90, 104, 3, 107, 154, 66, 9, 211, 42, 153, 33, ++ 154, 104, 90, 130, 66, 56, 191, 16, 70, 128, 8, 164, 248, 72, 0, 4, ++ 224, 0, 35, 132, 248, 72, 48, 132, 248, 73, 48, 180, 248, 2, 176, 34, ++ 155, 31, 250, 139, 252, 11, 185, 17, 152, 72, 179, 204, 243, 128, 51, ++ 141, 232, 8, 2, 17, 153, 79, 240, 1, 9, 38, 154, 26, 155, 64, 70, 205, ++ 248, 20, 192, 2, 151, 205, 248, 12, 144, 8, 240, 15, 219, 164, 248, ++ 96, 0, 7, 153, 31, 250, 139, 251, 79, 234, 219, 51, 0, 147, 1, 145, ++ 18, 155, 64, 70, 17, 153, 14, 154, 2, 151, 205, 248, 12, 144, 8, 240, ++ 253, 218, 180, 248, 96, 48, 160, 134, 227, 128, 160, 133, 221, 248, ++ 20, 192, 29, 159, 119, 179, 213, 248, 80, 50, 6, 152, 154, 105, 76, ++ 244, 128, 92, 18, 24, 154, 97, 218, 105, 1, 50, 218, 97, 148, 248, 115, ++ 48, 164, 248, 2, 192, 67, 240, 8, 3, 132, 248, 115, 48, 148, 248, 57, ++ 48, 67, 240, 8, 3, 31, 6, 132, 248, 57, 48, 16, 213, 213, 248, 80, 50, ++ 26, 106, 1, 50, 26, 98, 213, 248, 232, 114, 71, 177, 80, 70, 23, 240, ++ 180, 216, 86, 48, 7, 235, 128, 7, 123, 104, 1, 51, 123, 96, 148, 248, ++ 57, 48, 22, 224, 148, 249, 115, 48, 0, 43, 16, 218, 213, 248, 80, 50, ++ 26, 106, 1, 50, 26, 98, 213, 248, 232, 114, 71, 177, 80, 70, 23, 240, ++ 156, 216, 86, 48, 7, 235, 128, 7, 123, 104, 1, 51, 123, 96, 148, 248, ++ 115, 48, 19, 240, 48, 15, 16, 208, 213, 248, 80, 50, 90, 106, 1, 50, ++ 90, 98, 213, 248, 232, 114, 71, 177, 80, 70, 23, 240, 134, 216, 118, ++ 48, 87, 248, 32, 48, 1, 51, 71, 248, 32, 48, 13, 159, 39, 177, 213, ++ 248, 80, 50, 26, 105, 1, 50, 26, 97, 180, 248, 76, 48, 154, 178, 27, ++ 178, 0, 43, 8, 218, 13, 159, 8, 153, 251, 178, 0, 147, 216, 248, 96, ++ 1, 1, 35, 32, 240, 72, 250, 216, 248, 0, 48, 147, 248, 156, 48, 1, 43, ++ 4, 208, 46, 175, 0, 36, 221, 248, 24, 144, 35, 224, 46, 172, 0, 39, ++ 10, 224, 1, 35, 0, 147, 1, 147, 64, 70, 113, 153, 84, 248, 4, 47, 97, ++ 171, 247, 247, 232, 250, 1, 55, 6, 154, 151, 66, 241, 209, 19, 224, ++ 9, 241, 255, 51, 224, 26, 67, 66, 67, 235, 0, 3, 0, 147, 149, 249, 46, ++ 48, 64, 70, 1, 147, 113, 153, 87, 248, 4, 47, 97, 171, 247, 247, 210, ++ 250, 1, 52, 76, 69, 235, 209, 0, 46, 43, 208, 112, 155, 155, 104, 179, ++ 248, 76, 48, 154, 178, 27, 178, 0, 43, 6, 218, 0, 35, 0, 147, 216, 248, ++ 96, 1, 8, 153, 32, 240, 6, 250, 213, 248, 80, 50, 64, 70, 154, 104, ++ 113, 153, 1, 50, 154, 96, 1, 35, 0, 147, 1, 147, 112, 154, 97, 171, ++ 247, 247, 176, 250, 216, 248, 0, 48, 147, 248, 156, 48, 1, 43, 8, 209, ++ 40, 70, 9, 153, 2, 34, 255, 247, 25, 249, 2, 224, 111, 240, 15, 7, 10, ++ 151, 10, 152, 117, 176, 189, 232, 240, 143, 0, 191, 172, 240, 135, 0, ++ 45, 233, 240, 71, 208, 248, 0, 144, 20, 104, 6, 70, 144, 70, 217, 248, ++ 4, 192, 0, 44, 59, 208, 165, 106, 111, 104, 23, 244, 128, 39, 14, 209, ++ 208, 248, 80, 50, 33, 70, 154, 110, 96, 70, 1, 50, 154, 102, 1, 34, ++ 238, 247, 150, 248, 200, 248, 0, 112, 56, 70, 189, 232, 240, 135, 71, ++ 104, 239, 89, 229, 137, 5, 240, 7, 5, 54, 53, 87, 248, 37, 80, 21, 177, ++ 47, 120, 2, 47, 20, 209, 214, 248, 80, 50, 154, 110, 1, 50, 154, 102, ++ 37, 177, 181, 248, 84, 48, 1, 59, 165, 248, 84, 48, 96, 70, 33, 70, ++ 1, 34, 238, 247, 117, 248, 0, 32, 200, 248, 0, 0, 189, 232, 240, 135, ++ 153, 248, 116, 66, 52, 185, 189, 232, 240, 71, 255, 247, 207, 184, 32, ++ 70, 189, 232, 240, 135, 111, 240, 15, 0, 189, 232, 240, 135, 254, 247, ++ 244, 190, 45, 233, 240, 79, 6, 104, 137, 70, 49, 104, 31, 70, 145, 248, ++ 156, 48, 133, 176, 1, 43, 4, 70, 144, 70, 26, 209, 122, 136, 36, 35, ++ 2, 240, 7, 2, 90, 67, 2, 245, 22, 114, 131, 24, 52, 248, 2, 224, 184, ++ 136, 218, 136, 93, 136, 130, 24, 146, 178, 170, 66, 218, 128, 5, 217, ++ 14, 241, 255, 62, 197, 235, 14, 5, 82, 25, 218, 128, 218, 105, 16, 26, ++ 216, 97, 185, 241, 0, 15, 20, 208, 217, 248, 4, 48, 88, 3, 16, 213, ++ 99, 104, 89, 248, 3, 176, 184, 248, 14, 48, 3, 240, 7, 3, 54, 51, 91, ++ 248, 35, 160, 186, 241, 0, 15, 3, 208, 154, 248, 0, 48, 2, 43, 7, 209, ++ 32, 70, 65, 70, 58, 70, 0, 35, 253, 247, 2, 250, 0, 32, 47, 224, 151, ++ 249, 25, 48, 211, 177, 139, 106, 11, 37, 201, 248, 40, 48, 13, 224, ++ 1, 61, 1, 32, 237, 178, 234, 243, 41, 247, 61, 185, 32, 70, 65, 70, ++ 58, 70, 43, 70, 253, 247, 236, 249, 1, 32, 25, 224, 243, 104, 211, 248, ++ 112, 33, 209, 7, 236, 213, 211, 248, 116, 49, 0, 224, 26, 70, 141, 232, ++ 12, 0, 0, 37, 32, 70, 73, 70, 66, 70, 59, 70, 2, 149, 3, 149, 254, 247, ++ 48, 250, 48, 70, 89, 70, 82, 70, 253, 247, 65, 248, 40, 70, 5, 176, ++ 189, 232, 240, 143, 0, 0, 45, 233, 248, 67, 67, 126, 5, 70, 35, 185, ++ 33, 73, 33, 72, 230, 243, 177, 243, 58, 224, 32, 72, 30, 73, 230, 243, ++ 172, 243, 43, 104, 147, 248, 156, 48, 1, 43, 36, 209, 213, 248, 52, ++ 65, 0, 38, 27, 72, 49, 70, 180, 248, 94, 34, 180, 248, 92, 50, 230, ++ 243, 156, 243, 0, 39, 180, 248, 88, 130, 11, 224, 79, 234, 73, 1, 40, ++ 70, 15, 240, 235, 220, 57, 70, 3, 70, 74, 70, 18, 72, 230, 243, 141, ++ 243, 1, 55, 180, 248, 90, 50, 7, 235, 8, 9, 153, 69, 237, 221, 1, 54, ++ 36, 52, 4, 46, 221, 209, 213, 248, 52, 49, 11, 72, 211, 248, 80, 50, ++ 211, 248, 160, 16, 211, 248, 152, 32, 211, 248, 156, 48, 230, 243, 117, ++ 243, 0, 32, 189, 232, 248, 131, 212, 53, 4, 0, 225, 54, 4, 0, 142, 31, ++ 136, 0, 238, 54, 4, 0, 8, 55, 4, 0, 35, 55, 4, 0, 45, 233, 247, 67, ++ 152, 70, 67, 104, 7, 42, 5, 70, 207, 88, 7, 217, 208, 248, 80, 50, 211, ++ 248, 164, 32, 1, 50, 195, 248, 164, 32, 108, 224, 54, 50, 87, 248, 34, ++ 64, 0, 44, 103, 208, 148, 248, 234, 96, 3, 35, 35, 112, 46, 179, 40, ++ 224, 4, 241, 75, 9, 72, 70, 49, 70, 231, 243, 193, 241, 176, 177, 72, ++ 70, 49, 70, 4, 241, 67, 9, 231, 243, 96, 241, 72, 70, 49, 70, 231, 243, ++ 182, 241, 88, 177, 72, 70, 49, 70, 231, 243, 87, 241, 163, 25, 0, 34, ++ 218, 112, 180, 248, 84, 48, 1, 59, 164, 248, 84, 48, 40, 70, 57, 70, ++ 34, 70, 253, 247, 168, 255, 1, 54, 182, 178, 149, 248, 225, 51, 179, ++ 66, 214, 216, 180, 248, 84, 48, 27, 177, 184, 241, 0, 15, 4, 209, 49, ++ 224, 43, 104, 152, 104, 252, 243, 107, 244, 212, 248, 244, 32, 107, ++ 104, 214, 88, 162, 120, 0, 35, 54, 50, 70, 248, 34, 48, 41, 104, 162, ++ 120, 0, 147, 1, 147, 72, 104, 1, 35, 6, 241, 16, 1, 231, 243, 234, 243, ++ 43, 104, 34, 70, 211, 248, 120, 4, 12, 73, 1, 35, 15, 240, 72, 254, ++ 32, 70, 237, 247, 240, 254, 50, 104, 40, 104, 210, 248, 248, 48, 11, ++ 185, 19, 105, 219, 104, 217, 104, 0, 34, 79, 244, 0, 115, 3, 176, 189, ++ 232, 240, 67, 245, 247, 67, 185, 3, 176, 189, 232, 240, 131, 101, 180, ++ 1, 0, 240, 181, 3, 104, 133, 176, 4, 70, 1, 169, 211, 248, 36, 1, 0, ++ 34, 77, 240, 32, 218, 24, 224, 107, 104, 91, 3, 21, 213, 99, 104, 0, ++ 38, 239, 88, 215, 248, 216, 32, 82, 177, 19, 120, 1, 43, 7, 209, 178, ++ 248, 84, 32, 34, 177, 32, 70, 41, 70, 50, 70, 255, 247, 95, 255, 1, ++ 54, 246, 178, 4, 55, 8, 46, 236, 209, 35, 104, 1, 169, 211, 248, 36, ++ 1, 31, 240, 168, 254, 5, 70, 0, 40, 221, 209, 5, 176, 240, 189, 67, ++ 104, 247, 181, 207, 88, 5, 70, 14, 70, 0, 36, 34, 70, 1, 52, 1, 35, ++ 40, 70, 49, 70, 228, 178, 255, 247, 65, 255, 8, 44, 245, 209, 42, 104, ++ 0, 35, 0, 147, 80, 104, 7, 241, 16, 1, 1, 34, 231, 243, 112, 242, 254, ++ 189, 255, 247, 228, 191, 48, 181, 3, 104, 133, 176, 4, 70, 1, 169, 211, ++ 248, 36, 1, 0, 34, 77, 240, 213, 217, 6, 224, 107, 104, 90, 3, 3, 213, ++ 32, 70, 41, 70, 255, 247, 210, 255, 35, 104, 1, 169, 211, 248, 36, 1, ++ 31, 240, 111, 254, 5, 70, 0, 40, 239, 209, 32, 70, 252, 247, 98, 254, ++ 40, 70, 5, 176, 48, 189, 112, 181, 68, 104, 13, 70, 225, 66, 8, 208, ++ 14, 89, 54, 177, 255, 247, 186, 255, 48, 70, 237, 247, 99, 254, 0, 35, ++ 43, 81, 112, 189, 0, 0, 45, 233, 240, 79, 67, 104, 133, 176, 81, 248, ++ 3, 160, 146, 249, 0, 48, 5, 70, 0, 43, 14, 70, 208, 248, 0, 144, 2, ++ 218, 208, 248, 80, 50, 40, 224, 148, 121, 83, 121, 209, 120, 67, 234, ++ 4, 35, 3, 240, 60, 8, 79, 234, 152, 8, 184, 241, 7, 15, 16, 121, 25, ++ 216, 8, 241, 54, 2, 90, 248, 34, 64, 164, 177, 34, 120, 2, 42, 17, 209, ++ 81, 234, 0, 33, 10, 209, 168, 124, 195, 243, 64, 2, 144, 66, 5, 209, ++ 155, 9, 149, 248, 225, 3, 218, 178, 144, 66, 13, 210, 80, 70, 33, 70, ++ 252, 247, 254, 255, 213, 248, 80, 50, 211, 248, 164, 32, 1, 50, 195, ++ 248, 164, 32, 5, 176, 189, 232, 240, 143, 99, 112, 164, 248, 96, 32, ++ 164, 248, 248, 16, 4, 241, 252, 0, 252, 247, 68, 255, 6, 235, 72, 3, ++ 179, 248, 198, 48, 1, 34, 27, 5, 27, 13, 164, 248, 90, 48, 164, 248, ++ 94, 48, 1, 59, 27, 5, 34, 112, 27, 13, 164, 248, 92, 48, 164, 248, 88, ++ 48, 213, 248, 80, 50, 40, 70, 89, 109, 137, 24, 89, 101, 33, 70, 253, ++ 247, 213, 254, 214, 248, 248, 48, 11, 185, 51, 105, 219, 104, 218, 104, ++ 12, 32, 19, 29, 2, 147, 46, 75, 47, 70, 19, 248, 8, 16, 77, 70, 0, 251, ++ 1, 34, 146, 138, 79, 240, 0, 11, 3, 146, 161, 70, 68, 224, 223, 248, ++ 160, 224, 2, 152, 30, 248, 8, 16, 231, 243, 60, 242, 4, 70, 0, 40, 61, ++ 208, 131, 105, 89, 0, 5, 213, 130, 106, 150, 66, 2, 209, 19, 244, 128, ++ 99, 9, 208, 223, 248, 120, 224, 40, 70, 2, 153, 34, 70, 30, 248, 8, ++ 48, 240, 247, 31, 253, 7, 224, 0, 147, 40, 70, 10, 241, 16, 1, 34, 70, ++ 67, 70, 14, 240, 114, 217, 208, 185, 1, 34, 104, 104, 33, 70, 237, 247, ++ 234, 253, 43, 104, 211, 248, 136, 48, 26, 106, 1, 50, 26, 98, 215, 248, ++ 80, 50, 218, 107, 1, 50, 218, 99, 51, 105, 27, 177, 219, 104, 26, 106, ++ 1, 50, 26, 98, 214, 248, 92, 49, 1, 51, 198, 248, 92, 49, 11, 241, 1, ++ 11, 31, 250, 139, 251, 3, 155, 155, 69, 183, 209, 56, 70, 81, 70, 74, ++ 70, 0, 35, 5, 176, 189, 232, 240, 79, 253, 247, 196, 189, 72, 194, 135, ++ 0, 208, 248, 80, 50, 218, 109, 1, 50, 218, 101, 112, 71, 16, 181, 67, ++ 104, 4, 70, 200, 88, 211, 120, 3, 240, 60, 3, 155, 8, 7, 43, 7, 217, ++ 212, 248, 80, 50, 211, 248, 164, 32, 1, 50, 195, 248, 164, 32, 16, 189, ++ 146, 249, 0, 32, 0, 42, 15, 218, 54, 51, 80, 248, 35, 16, 33, 177, 11, ++ 120, 2, 43, 1, 209, 252, 247, 65, 255, 212, 248, 80, 50, 211, 248, 164, ++ 32, 1, 50, 195, 248, 164, 32, 16, 189, 1, 32, 112, 71, 45, 233, 243, ++ 65, 4, 104, 0, 34, 35, 104, 6, 70, 131, 248, 66, 32, 144, 248, 221, ++ 131, 13, 70, 79, 250, 136, 243, 179, 241, 255, 63, 8, 191, 79, 240, ++ 2, 8, 225, 177, 35, 104, 147, 248, 79, 112, 23, 240, 3, 7, 44, 208, ++ 255, 247, 227, 255, 104, 179, 184, 241, 2, 15, 16, 209, 79, 244, 0, ++ 114, 3, 35, 0, 147, 32, 70, 19, 70, 4, 33, 13, 240, 165, 221, 35, 104, ++ 64, 34, 163, 248, 96, 32, 79, 240, 1, 8, 64, 39, 6, 224, 35, 104, 6, ++ 34, 79, 240, 0, 8, 163, 248, 96, 32, 71, 70, 35, 104, 147, 248, 66, ++ 48, 171, 66, 18, 208, 214, 248, 80, 2, 0, 33, 188, 34, 230, 243, 1, ++ 241, 35, 104, 131, 248, 66, 80, 8, 224, 111, 240, 22, 5, 184, 70, 5, ++ 224, 111, 240, 22, 5, 7, 70, 128, 70, 0, 224, 0, 37, 35, 104, 147, 248, ++ 156, 32, 66, 69, 13, 208, 131, 248, 156, 128, 3, 35, 0, 147, 32, 70, ++ 2, 33, 64, 34, 59, 70, 13, 240, 110, 221, 32, 70, 1, 33, 6, 240, 90, ++ 220, 40, 70, 189, 232, 252, 129, 45, 233, 240, 65, 30, 70, 67, 104, ++ 4, 70, 81, 248, 3, 128, 21, 70, 152, 248, 4, 112, 0, 47, 51, 208, 0, ++ 104, 42, 240, 90, 222, 2, 40, 52, 220, 5, 47, 15, 216, 35, 104, 147, ++ 248, 17, 50, 91, 177, 5, 244, 224, 35, 179, 245, 0, 63, 6, 209, 235, ++ 178, 23, 43, 3, 220, 124, 51, 56, 248, 19, 0, 128, 185, 1, 35, 199, ++ 241, 16, 7, 19, 250, 7, 247, 21, 240, 64, 127, 1, 209, 232, 178, 2, ++ 224, 40, 70, 26, 240, 247, 255, 125, 30, 40, 24, 176, 251, 247, 240, ++ 6, 155, 176, 66, 24, 128, 10, 221, 134, 27, 240, 28, 72, 191, 176, 29, ++ 128, 16, 192, 178, 189, 232, 240, 129, 56, 70, 189, 232, 240, 129, 0, ++ 32, 189, 232, 240, 129, 6, 39, 218, 231, 19, 181, 8, 34, 4, 70, 0, 33, ++ 104, 70, 230, 243, 142, 240, 33, 104, 6, 34, 4, 49, 104, 70, 228, 247, ++ 8, 253, 32, 70, 72, 33, 8, 34, 107, 70, 19, 240, 142, 216, 28, 189, ++ 0, 0, 45, 233, 240, 65, 208, 248, 232, 34, 0, 37, 7, 70, 14, 70, 168, ++ 70, 43, 70, 210, 248, 176, 16, 4, 50, 0, 41, 24, 191, 152, 70, 1, 51, ++ 24, 43, 13, 68, 245, 209, 40, 240, 7, 8, 48, 70, 24, 73, 8, 241, 7, ++ 8, 230, 243, 221, 242, 5, 187, 34, 224, 215, 248, 232, 50, 4, 241, 44, ++ 2, 83, 248, 34, 32, 100, 35, 83, 67, 48, 70, 179, 251, 245, 243, 16, ++ 73, 230, 243, 205, 242, 16, 75, 35, 64, 0, 43, 3, 218, 1, 59, 99, 240, ++ 7, 3, 1, 51, 7, 43, 5, 209, 68, 69, 3, 208, 48, 70, 10, 73, 230, 243, ++ 189, 242, 1, 52, 0, 224, 0, 36, 68, 69, 220, 221, 48, 70, 7, 73, 230, ++ 243, 180, 242, 0, 32, 189, 232, 240, 129, 0, 191, 91, 55, 4, 0, 101, ++ 55, 4, 0, 7, 0, 0, 128, 112, 55, 4, 0, 236, 252, 135, 0, 45, 233, 247, ++ 79, 59, 75, 208, 248, 0, 128, 130, 70, 24, 104, 216, 248, 0, 48, 139, ++ 70, 147, 248, 156, 48, 1, 144, 1, 43, 104, 209, 186, 248, 16, 48, 67, ++ 185, 157, 248, 7, 16, 157, 248, 5, 32, 141, 248, 7, 48, 138, 24, 141, ++ 248, 5, 32, 154, 248, 12, 48, 91, 185, 154, 248, 11, 48, 67, 185, 157, ++ 248, 4, 16, 157, 248, 5, 32, 141, 248, 4, 48, 138, 24, 141, 248, 5, ++ 32, 64, 70, 210, 33, 15, 240, 126, 217, 0, 241, 50, 7, 127, 0, 4, 70, ++ 191, 178, 0, 38, 1, 35, 179, 64, 19, 234, 11, 15, 45, 208, 36, 35, 115, ++ 67, 3, 245, 22, 115, 10, 235, 3, 5, 42, 248, 3, 64, 1, 171, 243, 92, ++ 98, 30, 154, 24, 171, 114, 106, 128, 64, 70, 57, 70, 34, 70, 172, 128, ++ 236, 128, 18, 240, 232, 223, 7, 241, 4, 9, 64, 70, 185, 28, 106, 136, ++ 18, 240, 225, 223, 64, 70, 73, 70, 170, 136, 18, 240, 220, 223, 64, ++ 70, 185, 29, 234, 136, 18, 240, 215, 223, 64, 70, 7, 241, 8, 1, 0, 34, ++ 18, 240, 209, 223, 165, 248, 8, 144, 1, 171, 243, 92, 1, 54, 228, 24, ++ 10, 55, 4, 46, 164, 178, 196, 209, 218, 248, 80, 50, 0, 34, 195, 248, ++ 160, 32, 195, 248, 156, 32, 195, 248, 152, 32, 189, 232, 254, 143, 43, ++ 21, 4, 0, 16, 181, 0, 33, 4, 70, 188, 34, 208, 248, 80, 2, 229, 243, ++ 170, 247, 212, 248, 232, 2, 192, 179, 0, 33, 48, 34, 229, 243, 163, ++ 247, 212, 248, 232, 2, 0, 33, 48, 34, 48, 48, 229, 243, 156, 247, 212, ++ 248, 232, 2, 0, 33, 48, 34, 96, 48, 229, 243, 149, 247, 212, 248, 232, ++ 2, 0, 33, 40, 34, 0, 245, 52, 112, 229, 243, 141, 247, 212, 248, 232, ++ 2, 0, 33, 124, 34, 176, 48, 229, 243, 134, 247, 212, 248, 232, 2, 0, ++ 33, 124, 34, 0, 245, 174, 112, 229, 243, 126, 247, 212, 248, 232, 2, ++ 0, 33, 124, 34, 0, 245, 236, 112, 229, 243, 118, 247, 212, 248, 232, ++ 2, 0, 33, 0, 245, 21, 112, 124, 34, 229, 243, 110, 247, 0, 33, 35, 104, ++ 196, 248, 200, 19, 196, 248, 204, 19, 196, 248, 208, 19, 91, 126, 195, ++ 177, 212, 248, 232, 2, 32, 177, 0, 245, 150, 112, 48, 34, 229, 243, ++ 92, 247, 32, 104, 3, 104, 147, 248, 156, 48, 1, 43, 10, 209, 232, 33, ++ 0, 34, 18, 240, 90, 223, 32, 104, 250, 33, 0, 34, 189, 232, 16, 64, ++ 18, 240, 83, 159, 16, 189, 247, 181, 29, 70, 0, 35, 4, 70, 15, 70, 22, ++ 70, 255, 247, 2, 252, 189, 248, 32, 48, 50, 70, 0, 147, 32, 104, 43, ++ 70, 57, 70, 22, 240, 197, 221, 212, 248, 80, 50, 211, 248, 168, 32, ++ 1, 50, 195, 248, 168, 32, 254, 189, 45, 233, 240, 79, 7, 104, 11, 70, ++ 135, 176, 6, 70, 147, 70, 215, 248, 36, 1, 3, 169, 26, 70, 76, 240, ++ 144, 222, 58, 224, 99, 104, 90, 3, 55, 213, 148, 248, 36, 48, 155, 7, ++ 51, 213, 215, 248, 52, 49, 0, 37, 91, 104, 84, 248, 3, 160, 208, 70, ++ 75, 250, 5, 243, 216, 7, 95, 250, 133, 249, 33, 213, 216, 248, 216, ++ 48, 147, 177, 27, 120, 1, 59, 219, 178, 1, 43, 7, 216, 39, 35, 0, 147, ++ 48, 70, 33, 70, 74, 70, 1, 35, 255, 247, 181, 255, 48, 70, 33, 70, 74, ++ 70, 0, 35, 255, 247, 185, 251, 51, 104, 10, 241, 16, 1, 26, 104, 0, ++ 35, 0, 147, 1, 147, 80, 105, 1, 35, 42, 70, 230, 243, 249, 247, 1, 53, ++ 8, 45, 8, 241, 4, 8, 210, 209, 215, 248, 36, 1, 3, 169, 31, 240, 247, ++ 250, 4, 70, 0, 40, 188, 209, 7, 176, 189, 232, 240, 143, 48, 181, 208, ++ 248, 0, 84, 144, 248, 192, 67, 77, 89, 180, 177, 1, 42, 4, 209, 105, ++ 137, 219, 178, 11, 67, 107, 129, 48, 189, 108, 137, 226, 178, 34, 234, ++ 3, 2, 149, 249, 8, 48, 106, 129, 1, 51, 6, 209, 98, 64, 210, 178, 26, ++ 177, 189, 232, 48, 64, 255, 247, 142, 191, 48, 189, 16, 181, 144, 248, ++ 192, 51, 208, 248, 0, 68, 12, 89, 115, 177, 148, 249, 8, 48, 1, 42, ++ 8, 191, 79, 240, 255, 50, 147, 66, 6, 208, 34, 114, 34, 185, 255, 34, ++ 189, 232, 16, 64, 255, 247, 119, 191, 16, 189, 0, 0, 45, 233, 240, 79, ++ 208, 248, 0, 128, 137, 176, 5, 70, 5, 169, 216, 248, 36, 1, 0, 34, 79, ++ 240, 0, 11, 76, 240, 4, 222, 218, 70, 236, 224, 115, 104, 3, 244, 128, ++ 50, 0, 42, 24, 191, 79, 240, 1, 11, 88, 3, 64, 241, 227, 128, 216, 248, ++ 52, 49, 0, 39, 91, 104, 86, 248, 3, 144, 205, 248, 12, 144, 3, 154, ++ 210, 248, 216, 64, 0, 44, 0, 240, 205, 128, 35, 120, 3, 43, 0, 242, ++ 201, 128, 223, 232, 19, 240, 179, 0, 4, 0, 122, 0, 155, 0, 1, 35, 40, ++ 70, 73, 70, 34, 70, 253, 247, 190, 250, 148, 248, 237, 48, 0, 43, 49, ++ 208, 1, 43, 41, 209, 163, 120, 12, 34, 2, 251, 3, 147, 105, 74, 27, ++ 140, 17, 104, 155, 8, 0, 41, 1, 220, 8, 33, 17, 96, 18, 104, 79, 240, ++ 0, 10, 147, 66, 168, 191, 19, 70, 20, 224, 161, 120, 9, 241, 16, 0, ++ 2, 147, 230, 243, 205, 246, 216, 248, 0, 32, 1, 70, 80, 105, 1, 34, ++ 237, 247, 152, 250, 213, 248, 80, 34, 2, 155, 209, 107, 10, 241, 1, ++ 10, 1, 49, 209, 99, 154, 69, 232, 219, 40, 70, 33, 70, 0, 34, 253, 247, ++ 51, 251, 132, 224, 148, 248, 238, 32, 49, 42, 8, 217, 39, 35, 0, 147, ++ 40, 70, 49, 70, 58, 70, 1, 35, 255, 247, 226, 254, 119, 224, 148, 248, ++ 236, 32, 34, 177, 132, 248, 236, 48, 132, 248, 241, 48, 111, 224, 180, ++ 248, 84, 48, 35, 177, 148, 248, 241, 48, 1, 51, 132, 248, 241, 48, 64, ++ 70, 49, 70, 34, 70, 252, 247, 184, 251, 148, 248, 241, 48, 2, 43, 94, ++ 209, 213, 248, 80, 50, 40, 70, 90, 110, 49, 70, 1, 50, 90, 102, 39, ++ 35, 0, 147, 58, 70, 1, 35, 255, 247, 187, 254, 40, 70, 49, 70, 58, 70, ++ 1, 35, 255, 247, 191, 250, 74, 224, 148, 248, 239, 48, 90, 28, 3, 43, ++ 132, 248, 239, 32, 4, 221, 72, 70, 33, 70, 252, 247, 231, 251, 64, 224, ++ 150, 248, 36, 48, 217, 6, 10, 213, 170, 124, 235, 124, 0, 146, 149, ++ 248, 47, 32, 64, 70, 1, 146, 49, 70, 58, 70, 0, 240, 111, 250, 213, ++ 248, 80, 50, 26, 109, 1, 50, 26, 101, 43, 224, 148, 248, 240, 48, 90, ++ 28, 1, 43, 132, 248, 240, 32, 9, 217, 213, 248, 80, 50, 40, 70, 90, ++ 110, 49, 70, 1, 50, 90, 102, 58, 70, 1, 35, 3, 224, 40, 70, 49, 70, ++ 58, 70, 0, 35, 255, 247, 134, 250, 19, 224, 148, 248, 242, 48, 90, 28, ++ 59, 43, 132, 248, 242, 32, 12, 217, 40, 70, 73, 70, 58, 70, 0, 35, 252, ++ 247, 221, 255, 40, 177, 4, 35, 128, 248, 239, 48, 1, 224, 79, 240, 1, ++ 10, 1, 55, 3, 155, 255, 178, 4, 51, 8, 47, 3, 147, 127, 244, 37, 175, ++ 216, 248, 36, 1, 5, 169, 31, 240, 184, 249, 6, 70, 0, 40, 127, 244, ++ 10, 175, 149, 248, 224, 51, 43, 177, 187, 241, 0, 15, 3, 208, 138, 240, ++ 1, 11, 0, 224, 155, 70, 133, 248, 223, 179, 0, 32, 9, 176, 189, 232, ++ 240, 143, 28, 99, 4, 0, 45, 233, 255, 71, 0, 35, 3, 147, 13, 155, 4, ++ 70, 3, 43, 144, 70, 12, 158, 14, 159, 4, 217, 3, 168, 49, 70, 4, 34, ++ 228, 247, 254, 249, 212, 248, 0, 144, 17, 153, 72, 70, 221, 248, 12, ++ 160, 8, 240, 100, 251, 5, 70, 184, 241, 75, 15, 0, 242, 101, 129, 223, ++ 232, 24, 240, 76, 0, 81, 0, 87, 0, 98, 0, 109, 0, 113, 0, 99, 1, 123, ++ 0, 99, 1, 174, 0, 219, 0, 221, 0, 99, 1, 99, 1, 240, 0, 243, 0, 99, ++ 1, 99, 1, 254, 0, 1, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, ++ 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, ++ 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 230, ++ 0, 224, 0, 237, 0, 233, 0, 5, 1, 99, 1, 10, 1, 13, 1, 99, 1, 99, 1, ++ 31, 1, 34, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 42, 1, 45, 1, ++ 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 49, 1, 67, 1, ++ 217, 248, 0, 48, 147, 248, 66, 48, 29, 224, 32, 70, 157, 248, 12, 16, ++ 255, 247, 214, 251, 18, 225, 51, 120, 7, 43, 0, 242, 2, 129, 228, 24, ++ 163, 122, 56, 70, 115, 112, 49, 70, 2, 34, 221, 224, 59, 120, 7, 43, ++ 0, 242, 247, 128, 228, 24, 123, 120, 0, 51, 24, 191, 1, 35, 163, 114, ++ 234, 224, 148, 248, 39, 48, 59, 96, 230, 224, 3, 155, 7, 43, 0, 243, ++ 241, 128, 4, 43, 64, 243, 238, 128, 132, 248, 39, 48, 220, 224, 217, ++ 248, 0, 48, 147, 248, 66, 32, 0, 42, 0, 240, 219, 128, 147, 248, 67, ++ 48, 0, 43, 0, 240, 214, 128, 187, 121, 7, 43, 0, 242, 210, 128, 72, ++ 70, 41, 70, 58, 70, 31, 240, 39, 249, 0, 40, 0, 240, 205, 128, 99, 104, ++ 193, 88, 0, 41, 0, 240, 203, 128, 67, 104, 90, 3, 64, 241, 199, 128, ++ 186, 121, 2, 241, 54, 3, 81, 248, 35, 48, 0, 43, 64, 240, 182, 128, ++ 32, 70, 1, 35, 252, 247, 236, 254, 0, 40, 12, 191, 79, 240, 255, 48, ++ 0, 32, 187, 224, 217, 248, 0, 48, 147, 248, 66, 32, 0, 42, 0, 240, 168, ++ 128, 147, 248, 67, 48, 0, 43, 0, 240, 163, 128, 187, 121, 7, 43, 0, ++ 242, 159, 128, 41, 70, 72, 70, 58, 70, 31, 240, 244, 248, 1, 70, 0, ++ 40, 0, 240, 153, 128, 99, 104, 195, 88, 0, 43, 0, 240, 151, 128, 67, ++ 104, 91, 3, 64, 241, 147, 128, 251, 121, 37, 32, 0, 51, 186, 121, 24, ++ 191, 1, 35, 0, 144, 32, 70, 255, 247, 75, 253, 124, 224, 35, 122, 145, ++ 231, 3, 155, 35, 114, 119, 224, 32, 70, 157, 248, 12, 16, 252, 247, ++ 176, 248, 113, 224, 148, 248, 196, 51, 133, 231, 3, 155, 132, 248, 216, ++ 51, 106, 224, 148, 248, 216, 51, 126, 231, 148, 249, 40, 48, 123, 231, ++ 3, 155, 0, 43, 111, 208, 11, 43, 109, 220, 132, 248, 40, 48, 32, 70, ++ 252, 247, 71, 249, 89, 224, 153, 248, 190, 50, 109, 231, 3, 155, 137, ++ 248, 190, 50, 82, 224, 217, 248, 0, 48, 147, 248, 156, 48, 100, 231, ++ 148, 249, 221, 51, 97, 231, 3, 155, 90, 28, 3, 42, 84, 216, 79, 240, ++ 48, 65, 145, 64, 80, 213, 132, 248, 221, 51, 217, 248, 0, 48, 32, 70, ++ 147, 248, 66, 16, 255, 247, 14, 251, 56, 224, 148, 248, 224, 51, 76, ++ 231, 26, 241, 0, 10, 24, 191, 79, 240, 1, 10, 132, 248, 224, 163, 45, ++ 224, 148, 248, 226, 51, 65, 231, 3, 155, 132, 248, 226, 51, 38, 224, ++ 212, 248, 0, 52, 0, 33, 196, 88, 6, 34, 48, 70, 229, 243, 54, 244, 35, ++ 122, 56, 70, 51, 112, 100, 137, 49, 70, 180, 128, 6, 34, 228, 247, 173, ++ 248, 20, 224, 190, 136, 122, 136, 6, 234, 2, 3, 219, 178, 34, 234, 6, ++ 6, 246, 178, 35, 177, 32, 70, 41, 70, 1, 34, 255, 247, 65, 253, 182, ++ 177, 32, 70, 41, 70, 0, 34, 51, 70, 255, 247, 58, 253, 0, 32, 15, 224, ++ 111, 240, 24, 0, 12, 224, 111, 240, 1, 0, 9, 224, 111, 240, 29, 0, 6, ++ 224, 111, 240, 22, 0, 3, 224, 111, 240, 28, 0, 0, 224, 48, 70, 4, 176, ++ 189, 232, 240, 135, 27, 6, 16, 181, 4, 70, 7, 213, 208, 248, 80, 50, ++ 211, 248, 164, 32, 1, 50, 195, 248, 164, 32, 16, 189, 0, 35, 255, 247, ++ 179, 248, 212, 248, 80, 50, 211, 248, 172, 32, 1, 50, 195, 248, 172, ++ 32, 16, 189, 1, 41, 208, 248, 52, 49, 1, 209, 32, 34, 1, 224, 79, 244, ++ 128, 114, 163, 248, 228, 35, 112, 71, 1, 35, 252, 247, 234, 184, 0, ++ 35, 252, 247, 231, 184, 248, 181, 6, 70, 145, 177, 75, 104, 91, 3, 15, ++ 213, 67, 104, 204, 88, 100, 177, 37, 70, 4, 241, 32, 7, 213, 248, 216, ++ 32, 26, 177, 48, 104, 33, 70, 252, 247, 111, 248, 4, 53, 189, 66, 245, ++ 209, 248, 189, 127, 181, 3, 104, 4, 70, 13, 70, 211, 248, 36, 1, 1, ++ 169, 0, 34, 76, 240, 37, 219, 15, 224, 51, 105, 171, 66, 12, 209, 115, ++ 104, 90, 3, 9, 213, 99, 104, 32, 104, 241, 88, 16, 49, 14, 240, 25, ++ 254, 32, 70, 49, 70, 255, 247, 206, 255, 35, 104, 1, 169, 211, 248, ++ 36, 1, 30, 240, 182, 255, 6, 70, 0, 40, 230, 209, 127, 189, 55, 181, ++ 0, 35, 1, 147, 7, 155, 4, 70, 3, 43, 21, 70, 4, 217, 1, 168, 6, 153, ++ 4, 34, 228, 247, 17, 248, 7, 45, 9, 209, 212, 248, 52, 1, 255, 247, ++ 217, 251, 212, 248, 56, 1, 0, 240, 42, 254, 0, 32, 1, 224, 111, 240, ++ 22, 0, 62, 189, 56, 181, 4, 70, 13, 70, 208, 248, 52, 1, 255, 247, 251, ++ 250, 212, 248, 56, 1, 41, 70, 0, 240, 254, 252, 0, 32, 56, 189, 45, ++ 233, 240, 67, 144, 248, 116, 114, 135, 176, 5, 70, 12, 70, 22, 70, 153, ++ 70, 0, 47, 112, 209, 11, 105, 1, 241, 20, 8, 3, 241, 188, 2, 0, 146, ++ 9, 34, 1, 146, 5, 170, 2, 146, 208, 33, 66, 70, 194, 51, 11, 240, 136, ++ 221, 1, 70, 0, 40, 97, 208, 5, 155, 3, 34, 26, 112, 95, 112, 149, 248, ++ 62, 35, 154, 112, 58, 185, 181, 248, 62, 35, 1, 50, 165, 248, 62, 35, ++ 154, 120, 1, 50, 154, 112, 178, 0, 2, 240, 60, 2, 66, 234, 137, 25, ++ 157, 248, 56, 32, 82, 0, 2, 240, 2, 2, 73, 234, 2, 9, 157, 248, 60, ++ 32, 31, 250, 137, 249, 131, 248, 3, 144, 90, 113, 79, 234, 25, 41, 0, ++ 34, 154, 113, 131, 248, 4, 144, 4, 235, 70, 2, 178, 248, 198, 32, 18, ++ 1, 146, 178, 218, 113, 18, 10, 26, 114, 203, 137, 6, 240, 7, 2, 35, ++ 240, 7, 3, 19, 67, 203, 129, 212, 248, 248, 48, 11, 185, 35, 105, 219, ++ 104, 218, 104, 40, 70, 35, 70, 15, 240, 130, 221, 33, 105, 143, 121, ++ 247, 185, 8, 124, 232, 177, 209, 248, 4, 49, 24, 120, 200, 177, 14, ++ 75, 14, 74, 155, 93, 148, 248, 218, 0, 211, 92, 24, 65, 16, 240, 1, ++ 0, 15, 208, 40, 70, 66, 70, 59, 70, 0, 151, 1, 150, 15, 240, 118, 221, ++ 56, 70, 6, 224, 111, 240, 24, 0, 3, 224, 111, 240, 26, 0, 0, 224, 0, ++ 32, 7, 176, 189, 232, 240, 131, 138, 182, 135, 0, 84, 194, 135, 0, 45, ++ 233, 255, 71, 144, 248, 116, 162, 153, 70, 6, 70, 13, 70, 23, 70, 14, ++ 155, 186, 241, 0, 15, 3, 208, 1, 34, 26, 112, 0, 36, 78, 224, 131, 248, ++ 0, 160, 20, 33, 11, 240, 219, 220, 4, 70, 0, 40, 70, 208, 208, 248, ++ 8, 128, 111, 240, 123, 3, 136, 248, 0, 48, 5, 241, 20, 1, 6, 34, 136, ++ 248, 1, 160, 136, 248, 2, 160, 136, 248, 3, 160, 8, 241, 4, 0, 227, ++ 247, 63, 255, 41, 105, 6, 34, 8, 241, 10, 0, 194, 49, 227, 247, 56, ++ 255, 189, 248, 48, 32, 79, 242, 1, 3, 2, 240, 1, 2, 66, 234, 7, 50, ++ 19, 64, 67, 240, 4, 3, 79, 234, 9, 25, 168, 248, 16, 48, 168, 248, 18, ++ 144, 227, 137, 7, 240, 7, 7, 35, 240, 7, 3, 31, 67, 213, 248, 248, 48, ++ 231, 129, 11, 185, 43, 105, 219, 104, 3, 33, 0, 34, 141, 232, 6, 0, ++ 157, 248, 52, 32, 33, 70, 2, 146, 218, 104, 48, 70, 43, 70, 244, 247, ++ 172, 252, 0, 40, 8, 191, 0, 36, 32, 70, 4, 176, 189, 232, 240, 135, ++ 48, 181, 133, 176, 4, 70, 10, 70, 208, 248, 36, 1, 1, 169, 76, 240, ++ 234, 217, 12, 224, 107, 104, 88, 3, 9, 213, 212, 248, 52, 1, 41, 70, ++ 254, 247, 230, 255, 212, 248, 56, 1, 41, 70, 22, 240, 146, 217, 212, ++ 248, 36, 1, 1, 169, 30, 240, 127, 254, 5, 70, 0, 40, 234, 209, 5, 176, ++ 48, 189, 45, 233, 240, 79, 1, 235, 130, 3, 91, 104, 167, 176, 4, 70, ++ 136, 70, 145, 70, 14, 104, 0, 43, 96, 208, 208, 248, 56, 33, 0, 39, ++ 146, 248, 42, 80, 218, 136, 1, 61, 21, 64, 73, 224, 153, 120, 1, 57, ++ 153, 112, 33, 104, 145, 248, 213, 16, 49, 185, 41, 72, 0, 104, 80, 248, ++ 34, 112, 42, 29, 35, 248, 18, 16, 1, 34, 26, 113, 218, 136, 1, 50, 18, ++ 5, 18, 13, 218, 128, 34, 104, 146, 248, 213, 32, 34, 177, 90, 25, 0, ++ 33, 130, 248, 136, 16, 35, 224, 123, 106, 32, 70, 0, 147, 49, 70, 59, ++ 70, 3, 170, 22, 240, 169, 222, 214, 248, 16, 160, 214, 248, 48, 176, ++ 6, 241, 20, 1, 6, 34, 36, 168, 227, 247, 161, 254, 32, 70, 49, 70, 3, ++ 170, 249, 247, 180, 253, 32, 70, 81, 70, 36, 170, 91, 70, 30, 240, 98, ++ 254, 216, 177, 176, 66, 25, 209, 8, 235, 137, 3, 91, 104, 171, 177, ++ 212, 248, 56, 33, 1, 53, 146, 248, 42, 32, 1, 58, 21, 64, 173, 178, ++ 42, 29, 51, 248, 18, 32, 0, 42, 176, 209, 33, 104, 145, 248, 213, 16, ++ 33, 177, 89, 25, 145, 248, 136, 16, 1, 41, 167, 208, 39, 176, 189, 232, ++ 240, 143, 32, 7, 0, 0, 45, 233, 240, 71, 31, 70, 1, 235, 130, 3, 144, ++ 70, 90, 104, 166, 176, 5, 70, 14, 70, 12, 104, 0, 42, 91, 209, 92, 224, ++ 213, 248, 56, 49, 208, 136, 147, 248, 42, 16, 1, 57, 1, 64, 8, 29, 50, ++ 248, 16, 192, 188, 241, 0, 15, 9, 209, 40, 104, 144, 248, 213, 0, 0, ++ 40, 59, 208, 80, 24, 144, 248, 136, 0, 1, 40, 54, 209, 147, 120, 1, ++ 59, 147, 112, 43, 104, 147, 248, 213, 0, 32, 177, 81, 24, 0, 35, 129, ++ 248, 136, 48, 46, 224, 30, 75, 4, 49, 27, 104, 83, 248, 44, 48, 34, ++ 248, 17, 0, 90, 106, 40, 70, 0, 146, 33, 70, 3, 170, 22, 240, 51, 222, ++ 212, 248, 16, 144, 212, 248, 48, 160, 4, 241, 20, 1, 6, 34, 36, 168, ++ 227, 247, 43, 254, 40, 70, 33, 70, 3, 170, 249, 247, 62, 253, 40, 70, ++ 73, 70, 36, 170, 83, 70, 30, 240, 236, 253, 168, 177, 160, 66, 19, 209, ++ 6, 235, 136, 3, 90, 104, 34, 185, 14, 224, 155, 105, 217, 105, 1, 49, ++ 217, 97, 1, 35, 19, 113, 211, 136, 1, 63, 1, 51, 27, 5, 27, 13, 211, ++ 128, 191, 178, 0, 47, 162, 209, 38, 176, 189, 232, 240, 135, 32, 7, ++ 0, 0, 1, 235, 130, 3, 45, 233, 240, 67, 94, 104, 5, 70, 12, 70, 23, ++ 70, 0, 46, 47, 208, 3, 104, 147, 248, 213, 48, 27, 177, 75, 107, 147, ++ 248, 42, 48, 35, 224, 208, 248, 56, 33, 241, 136, 146, 248, 42, 192, ++ 8, 70, 12, 241, 255, 56, 31, 250, 136, 248, 10, 70, 14, 224, 2, 234, ++ 8, 9, 9, 241, 4, 9, 54, 248, 25, 144, 1, 51, 185, 241, 0, 15, 24, 191, ++ 16, 70, 1, 50, 18, 5, 155, 178, 18, 13, 99, 69, 238, 211, 67, 26, 27, ++ 5, 27, 13, 40, 70, 33, 70, 58, 70, 1, 51, 189, 232, 240, 67, 255, 247, ++ 86, 191, 189, 232, 240, 131, 2, 41, 112, 181, 4, 70, 29, 70, 115, 209, ++ 19, 248, 5, 44, 19, 248, 6, 60, 26, 67, 21, 248, 4, 60, 19, 67, 131, ++ 105, 101, 208, 26, 104, 1, 50, 26, 96, 90, 104, 1, 50, 90, 96, 21, 248, ++ 3, 44, 18, 7, 2, 212, 154, 104, 1, 50, 154, 96, 230, 105, 166, 177, ++ 21, 248, 6, 12, 0, 240, 127, 0, 32, 40, 7, 221, 160, 241, 87, 3, 1, ++ 43, 3, 217, 160, 241, 99, 3, 3, 43, 6, 216, 21, 240, 190, 220, 86, 248, ++ 32, 48, 1, 51, 70, 248, 32, 48, 21, 249, 3, 60, 0, 43, 27, 218, 163, ++ 105, 230, 105, 26, 105, 1, 50, 26, 97, 174, 177, 21, 248, 6, 12, 0, ++ 240, 127, 0, 32, 40, 7, 221, 160, 241, 87, 3, 1, 43, 3, 217, 160, 241, ++ 99, 3, 3, 43, 7, 216, 21, 240, 159, 220, 30, 48, 6, 235, 128, 6, 115, ++ 104, 1, 51, 115, 96, 21, 248, 3, 60, 19, 240, 48, 15, 36, 208, 163, ++ 105, 228, 105, 90, 105, 1, 50, 90, 97, 244, 177, 21, 248, 6, 12, 0, ++ 240, 127, 0, 32, 40, 7, 221, 160, 241, 87, 3, 1, 43, 3, 217, 160, 241, ++ 99, 3, 3, 43, 16, 216, 21, 240, 126, 220, 62, 48, 84, 248, 32, 48, 1, ++ 51, 68, 248, 32, 48, 112, 189, 90, 104, 1, 50, 90, 96, 112, 189, 131, ++ 105, 218, 104, 1, 50, 218, 96, 112, 189, 45, 233, 240, 79, 19, 140, ++ 137, 176, 8, 43, 6, 70, 136, 70, 21, 70, 146, 248, 34, 160, 4, 104, ++ 1, 208, 32, 70, 38, 224, 67, 104, 210, 248, 0, 144, 81, 248, 3, 176, ++ 147, 105, 66, 70, 153, 136, 75, 70, 1, 240, 3, 1, 255, 247, 103, 255, ++ 11, 235, 138, 3, 95, 104, 199, 185, 171, 105, 155, 136, 3, 240, 3, 3, ++ 2, 43, 12, 209, 25, 248, 3, 60, 27, 7, 8, 213, 11, 235, 74, 3, 1, 34, ++ 131, 248, 36, 32, 179, 105, 154, 105, 1, 50, 154, 97, 32, 70, 65, 70, ++ 42, 70, 249, 247, 43, 252, 90, 225, 216, 248, 4, 48, 216, 3, 18, 212, ++ 171, 105, 155, 136, 3, 240, 3, 3, 2, 43, 12, 209, 25, 248, 3, 60, 25, ++ 7, 8, 213, 11, 235, 74, 3, 1, 34, 131, 248, 36, 32, 179, 105, 154, 105, ++ 1, 50, 154, 97, 181, 248, 126, 48, 26, 7, 64, 240, 46, 129, 150, 248, ++ 42, 144, 250, 136, 27, 9, 9, 241, 255, 57, 147, 66, 9, 234, 3, 9, 69, ++ 209, 1, 34, 155, 24, 27, 5, 58, 113, 27, 13, 251, 128, 216, 248, 48, ++ 48, 6, 168, 8, 241, 20, 1, 6, 34, 4, 147, 216, 248, 16, 96, 227, 247, ++ 219, 252, 35, 104, 147, 248, 213, 48, 131, 185, 32, 70, 65, 70, 42, ++ 70, 249, 247, 234, 251, 32, 70, 49, 70, 6, 170, 4, 155, 30, 240, 152, ++ 252, 0, 40, 0, 240, 18, 129, 64, 69, 64, 240, 15, 129, 35, 104, 147, ++ 248, 213, 96, 30, 177, 190, 120, 0, 54, 24, 191, 1, 38, 32, 70, 89, ++ 70, 82, 70, 255, 247, 211, 253, 35, 104, 147, 248, 213, 48, 0, 43, 0, ++ 240, 252, 128, 0, 46, 152, 208, 0, 35, 0, 147, 1, 147, 2, 147, 32, 70, ++ 57, 70, 106, 105, 75, 70, 23, 240, 159, 216, 141, 231, 155, 26, 27, ++ 5, 122, 120, 27, 13, 147, 66, 15, 210, 9, 241, 4, 1, 55, 248, 17, 16, ++ 105, 185, 33, 104, 145, 248, 213, 16, 217, 177, 7, 235, 9, 1, 145, 248, ++ 136, 16, 1, 41, 21, 209, 2, 224, 179, 245, 0, 111, 17, 217, 0, 34, 96, ++ 104, 105, 105, 236, 247, 88, 252, 35, 104, 211, 248, 136, 48, 211, 248, ++ 188, 33, 1, 50, 195, 248, 188, 33, 179, 105, 90, 106, 1, 50, 90, 98, ++ 195, 224, 185, 120, 209, 241, 1, 0, 56, 191, 0, 32, 147, 66, 4, 144, ++ 102, 211, 194, 241, 1, 2, 155, 24, 155, 178, 32, 70, 89, 70, 82, 70, ++ 5, 147, 255, 247, 245, 253, 11, 235, 138, 3, 95, 104, 135, 179, 35, ++ 104, 147, 248, 213, 48, 171, 177, 7, 235, 9, 3, 1, 34, 131, 248, 136, ++ 32, 105, 105, 96, 104, 238, 247, 74, 249, 107, 105, 9, 241, 4, 2, 25, ++ 138, 39, 248, 18, 16, 218, 137, 111, 234, 66, 66, 111, 234, 82, 66, ++ 218, 129, 8, 224, 107, 105, 9, 241, 4, 2, 24, 136, 39, 248, 18, 0, 213, ++ 248, 128, 32, 90, 98, 187, 120, 1, 51, 187, 112, 150, 248, 41, 48, 59, ++ 185, 1, 35, 134, 248, 41, 48, 160, 104, 113, 105, 100, 34, 250, 243, ++ 242, 243, 32, 70, 89, 70, 82, 70, 255, 247, 73, 253, 35, 104, 147, 248, ++ 213, 48, 203, 177, 123, 120, 5, 153, 139, 66, 79, 240, 0, 3, 4, 210, ++ 4, 154, 141, 232, 12, 0, 1, 35, 2, 224, 4, 152, 141, 232, 9, 0, 2, 147, ++ 32, 70, 57, 70, 106, 105, 75, 70, 23, 240, 14, 216, 32, 70, 65, 70, ++ 42, 70, 249, 247, 41, 251, 179, 105, 218, 106, 1, 50, 218, 98, 84, 224, ++ 1, 49, 185, 112, 35, 104, 147, 248, 213, 48, 35, 179, 7, 235, 9, 3, ++ 1, 34, 131, 248, 136, 32, 96, 104, 105, 105, 238, 247, 239, 248, 106, ++ 105, 9, 241, 4, 3, 17, 138, 32, 70, 39, 248, 19, 16, 211, 137, 57, 70, ++ 111, 234, 67, 67, 111, 234, 83, 67, 211, 129, 4, 155, 0, 147, 0, 35, ++ 1, 147, 2, 147, 75, 70, 22, 240, 223, 223, 32, 70, 65, 70, 42, 70, 249, ++ 247, 250, 250, 8, 224, 107, 105, 213, 248, 128, 32, 24, 136, 9, 241, ++ 4, 9, 39, 248, 25, 0, 90, 98, 150, 248, 41, 48, 59, 185, 1, 35, 134, ++ 248, 41, 48, 160, 104, 113, 105, 100, 34, 250, 243, 139, 243, 179, 105, ++ 26, 106, 1, 50, 26, 98, 16, 224, 96, 104, 105, 105, 0, 34, 236, 247, ++ 147, 251, 179, 105, 48, 70, 90, 108, 65, 70, 1, 50, 90, 100, 1, 35, ++ 0, 147, 82, 70, 0, 35, 23, 240, 141, 216, 9, 176, 189, 232, 240, 143, ++ 45, 233, 240, 67, 31, 70, 3, 104, 133, 176, 147, 248, 213, 64, 5, 70, ++ 14, 70, 145, 70, 157, 248, 48, 128, 36, 177, 64, 104, 180, 33, 236, ++ 247, 81, 251, 4, 70, 40, 70, 57, 70, 66, 70, 255, 247, 153, 253, 43, ++ 104, 147, 248, 213, 48, 0, 43, 46, 208, 12, 179, 0, 35, 0, 147, 1, 147, ++ 1, 35, 2, 147, 40, 70, 79, 246, 255, 115, 73, 70, 34, 70, 22, 240, 131, ++ 223, 163, 104, 180, 51, 163, 96, 163, 137, 180, 59, 163, 129, 51, 105, ++ 147, 248, 68, 48, 132, 248, 33, 48, 214, 248, 248, 48, 168, 104, 11, ++ 185, 51, 105, 219, 104, 153, 104, 34, 70, 1, 35, 237, 247, 25, 255, ++ 1, 35, 12, 147, 213, 248, 56, 1, 57, 104, 66, 70, 0, 35, 5, 176, 189, ++ 232, 240, 67, 23, 240, 63, 152, 5, 176, 189, 232, 240, 131, 45, 233, ++ 240, 71, 5, 104, 134, 176, 43, 104, 4, 70, 27, 126, 59, 185, 144, 248, ++ 41, 32, 1, 42, 89, 209, 128, 248, 41, 48, 168, 104, 82, 224, 213, 248, ++ 36, 1, 3, 169, 0, 34, 75, 240, 60, 222, 79, 240, 0, 10, 54, 224, 115, ++ 104, 90, 3, 51, 213, 99, 104, 0, 39, 86, 248, 3, 128, 193, 70, 89, 248, ++ 4, 47, 58, 179, 147, 120, 17, 121, 0, 43, 24, 191, 79, 240, 1, 10, 25, ++ 177, 0, 35, 19, 113, 211, 112, 28, 224, 219, 177, 209, 120, 1, 49, 201, ++ 178, 209, 112, 115, 104, 19, 244, 128, 127, 20, 191, 224, 137, 32, 138, ++ 79, 240, 100, 3, 176, 251, 243, 243, 153, 66, 9, 211, 163, 105, 40, ++ 70, 153, 106, 1, 49, 153, 98, 49, 70, 67, 70, 0, 151, 255, 247, 104, ++ 255, 79, 240, 1, 10, 1, 55, 255, 178, 8, 47, 208, 209, 213, 248, 36, ++ 1, 3, 169, 30, 240, 165, 250, 6, 70, 0, 40, 192, 209, 186, 241, 0, 15, ++ 10, 209, 148, 248, 41, 48, 1, 43, 6, 209, 35, 104, 132, 248, 41, 160, ++ 152, 104, 97, 105, 250, 243, 228, 242, 6, 176, 189, 232, 240, 135, 208, ++ 248, 56, 49, 155, 105, 216, 106, 112, 71, 248, 181, 194, 105, 0, 35, ++ 7, 70, 13, 70, 30, 70, 209, 88, 4, 51, 96, 43, 14, 68, 250, 209, 40, ++ 70, 17, 73, 229, 243, 225, 240, 198, 177, 0, 36, 251, 105, 40, 70, 83, ++ 248, 36, 32, 100, 35, 83, 67, 13, 73, 179, 251, 246, 243, 229, 243, ++ 212, 240, 4, 240, 7, 3, 7, 43, 5, 209, 23, 44, 3, 208, 40, 70, 8, 73, ++ 229, 243, 202, 240, 1, 52, 24, 44, 231, 209, 40, 70, 5, 73, 229, 243, ++ 195, 240, 0, 32, 248, 189, 0, 191, 177, 56, 4, 0, 101, 55, 4, 0, 112, ++ 55, 4, 0, 236, 252, 135, 0, 45, 233, 240, 79, 67, 104, 21, 70, 203, ++ 88, 135, 176, 14, 70, 3, 147, 11, 105, 233, 121, 47, 121, 4, 145, 41, ++ 122, 66, 107, 5, 145, 233, 120, 4, 70, 65, 234, 7, 39, 7, 240, 60, 10, ++ 79, 234, 154, 10, 186, 241, 7, 15, 154, 88, 104, 121, 149, 248, 6, 144, ++ 161, 122, 4, 217, 163, 105, 90, 108, 1, 50, 90, 100, 187, 224, 64, 234, ++ 9, 41, 137, 69, 40, 191, 137, 70, 146, 249, 8, 16, 33, 177, 82, 137, ++ 66, 250, 10, 242, 210, 7, 9, 212, 171, 120, 32, 104, 49, 70, 37, 34, ++ 205, 248, 0, 144, 1, 151, 22, 240, 242, 223, 164, 224, 32, 104, 2, 104, ++ 146, 248, 66, 16, 97, 177, 146, 248, 67, 32, 74, 177, 27, 124, 19, 177, ++ 115, 104, 219, 3, 4, 213, 4, 235, 10, 3, 147, 248, 32, 48, 51, 185, ++ 171, 120, 205, 248, 0, 144, 1, 151, 49, 70, 37, 34, 50, 224, 34, 122, ++ 199, 243, 64, 3, 154, 66, 6, 208, 171, 120, 205, 248, 0, 144, 1, 151, ++ 49, 70, 38, 34, 38, 224, 82, 70, 32, 70, 49, 70, 21, 240, 169, 220, ++ 216, 32, 236, 247, 242, 249, 34, 104, 128, 70, 19, 104, 147, 248, 213, ++ 48, 43, 177, 80, 104, 180, 33, 236, 247, 252, 249, 131, 70, 0, 224, ++ 155, 70, 184, 241, 0, 15, 7, 208, 35, 104, 27, 104, 147, 248, 213, 48, ++ 131, 177, 187, 241, 0, 15, 13, 209, 171, 120, 32, 104, 205, 248, 0, ++ 144, 1, 151, 49, 70, 1, 34, 22, 240, 163, 223, 163, 105, 154, 107, 1, ++ 50, 154, 99, 81, 224, 64, 70, 0, 33, 216, 34, 228, 243, 173, 245, 32, ++ 104, 3, 104, 147, 248, 213, 48, 11, 177, 200, 248, 204, 176, 187, 9, ++ 219, 178, 148, 248, 9, 176, 19, 177, 91, 69, 56, 191, 155, 70, 7, 240, ++ 113, 255, 32, 177, 88, 69, 56, 191, 131, 70, 95, 250, 139, 251, 3, 154, ++ 4, 153, 2, 235, 138, 3, 5, 154, 195, 248, 4, 128, 65, 234, 2, 35, 27, ++ 9, 168, 248, 6, 48, 1, 35, 136, 248, 1, 176, 136, 248, 0, 48, 35, 104, ++ 7, 240, 63, 7, 27, 104, 71, 234, 139, 23, 147, 248, 213, 48, 35, 177, ++ 32, 70, 22, 240, 9, 219, 168, 248, 200, 0, 163, 105, 32, 104, 90, 107, ++ 49, 70, 1, 50, 90, 99, 79, 246, 254, 114, 58, 64, 171, 120, 1, 146, ++ 0, 34, 205, 248, 0, 144, 22, 240, 83, 223, 163, 105, 154, 107, 1, 50, ++ 154, 99, 99, 138, 1, 51, 99, 130, 7, 176, 189, 232, 240, 143, 16, 181, ++ 0, 33, 4, 70, 80, 34, 128, 105, 228, 243, 86, 245, 224, 105, 120, 177, ++ 0, 33, 124, 34, 228, 243, 80, 245, 224, 105, 0, 33, 124, 34, 124, 48, ++ 228, 243, 74, 245, 224, 105, 0, 33, 248, 48, 124, 34, 228, 243, 68, ++ 245, 32, 104, 3, 104, 147, 248, 156, 48, 1, 43, 8, 209, 67, 126, 51, ++ 177, 79, 244, 170, 113, 0, 34, 189, 232, 16, 64, 17, 240, 61, 157, 16, ++ 189, 248, 181, 12, 38, 78, 67, 7, 110, 4, 70, 189, 25, 105, 104, 33, ++ 177, 67, 104, 0, 34, 88, 105, 236, 247, 119, 249, 0, 35, 187, 81, 171, ++ 96, 107, 96, 227, 110, 26, 109, 1, 50, 26, 101, 248, 189, 16, 181, 0, ++ 33, 4, 70, 255, 247, 229, 255, 32, 70, 1, 33, 255, 247, 225, 255, 0, ++ 32, 16, 189, 55, 181, 0, 35, 1, 147, 7, 155, 5, 70, 3, 43, 20, 70, 4, ++ 217, 1, 168, 6, 153, 4, 34, 227, 247, 134, 249, 24, 44, 43, 104, 11, ++ 209, 27, 104, 2, 169, 147, 248, 68, 48, 8, 152, 65, 248, 4, 61, 10, ++ 154, 227, 247, 121, 249, 0, 32, 1, 224, 111, 240, 22, 0, 62, 189, 147, ++ 137, 45, 233, 240, 65, 45, 43, 4, 70, 136, 70, 21, 70, 7, 110, 6, 216, ++ 67, 104, 211, 248, 136, 48, 90, 110, 1, 50, 90, 102, 34, 224, 150, 104, ++ 50, 70, 50, 248, 6, 31, 23, 240, 158, 217, 32, 185, 227, 110, 90, 107, ++ 1, 50, 90, 99, 22, 224, 6, 241, 16, 0, 234, 247, 144, 249, 16, 185, ++ 51, 124, 219, 7, 6, 213, 99, 104, 211, 248, 136, 48, 90, 111, 1, 50, ++ 90, 103, 7, 224, 12, 35, 3, 251, 8, 119, 1, 32, 125, 96, 189, 96, 189, ++ 232, 240, 129, 227, 110, 0, 32, 154, 108, 1, 50, 154, 100, 189, 232, ++ 240, 129, 0, 32, 112, 71, 3, 110, 16, 181, 27, 104, 4, 70, 19, 177, ++ 0, 33, 255, 247, 124, 255, 35, 110, 219, 104, 43, 177, 32, 70, 1, 33, ++ 189, 232, 16, 64, 255, 247, 115, 191, 16, 189, 45, 233, 247, 79, 215, ++ 137, 1, 147, 67, 104, 23, 244, 0, 87, 5, 70, 139, 70, 20, 70, 211, 248, ++ 20, 160, 44, 209, 3, 104, 145, 137, 27, 104, 219, 105, 155, 110, 153, ++ 66, 37, 218, 147, 104, 82, 104, 35, 240, 127, 67, 194, 243, 20, 8, 35, ++ 244, 96, 3, 200, 235, 3, 8, 80, 70, 65, 68, 236, 247, 178, 248, 6, 70, ++ 168, 177, 128, 104, 179, 137, 64, 68, 200, 235, 3, 3, 176, 96, 179, ++ 129, 161, 104, 162, 137, 200, 241, 0, 3, 201, 24, 192, 24, 66, 68, 227, ++ 247, 242, 248, 33, 70, 80, 70, 58, 70, 236, 247, 189, 248, 52, 70, 187, ++ 248, 2, 144, 187, 248, 18, 16, 12, 38, 235, 110, 6, 251, 9, 246, 218, ++ 106, 1, 240, 6, 1, 47, 110, 73, 16, 1, 50, 2, 41, 218, 98, 7, 235, 6, ++ 8, 186, 89, 23, 208, 3, 41, 46, 208, 1, 41, 9, 209, 50, 177, 154, 107, ++ 40, 70, 1, 50, 154, 99, 73, 70, 255, 247, 24, 255, 1, 35, 43, 224, 1, ++ 42, 9, 209, 163, 137, 14, 43, 15, 217, 216, 248, 8, 48, 33, 136, 153, ++ 130, 21, 224, 1, 42, 3, 208, 154, 107, 1, 50, 154, 99, 71, 224, 3, 35, ++ 187, 81, 163, 137, 17, 43, 6, 216, 107, 104, 211, 248, 136, 48, 90, ++ 110, 1, 50, 90, 102, 59, 224, 216, 248, 8, 48, 34, 136, 154, 130, 200, ++ 248, 8, 64, 15, 224, 50, 177, 154, 107, 40, 70, 1, 50, 154, 99, 73, ++ 70, 255, 247, 235, 254, 3, 35, 187, 81, 40, 70, 73, 70, 34, 70, 255, ++ 247, 36, 255, 32, 179, 187, 89, 79, 240, 0, 4, 3, 43, 42, 209, 216, ++ 248, 4, 48, 200, 248, 8, 64, 154, 105, 200, 248, 4, 64, 66, 240, 128, ++ 2, 188, 81, 154, 97, 106, 104, 210, 248, 136, 16, 209, 248, 204, 1, ++ 1, 48, 193, 248, 204, 1, 233, 110, 8, 107, 1, 48, 8, 99, 1, 153, 1, ++ 41, 17, 208, 81, 105, 40, 104, 90, 70, 249, 247, 111, 251, 10, 224, ++ 40, 70, 73, 70, 255, 247, 186, 254, 80, 70, 33, 70, 0, 34, 236, 247, ++ 57, 248, 0, 35, 0, 224, 35, 70, 24, 70, 189, 232, 254, 143, 0, 0, 45, ++ 233, 240, 79, 137, 176, 5, 147, 3, 104, 14, 104, 3, 147, 67, 104, 4, ++ 70, 95, 105, 2, 145, 56, 70, 49, 70, 6, 146, 233, 247, 228, 255, 4, ++ 56, 1, 144, 178, 70, 53, 70, 79, 240, 0, 8, 161, 70, 209, 224, 137, ++ 76, 170, 138, 35, 104, 83, 248, 34, 48, 35, 185, 56, 70, 41, 70, 4, ++ 34, 233, 243, 171, 241, 184, 241, 100, 15, 0, 240, 198, 128, 213, 248, ++ 8, 192, 232, 137, 188, 248, 12, 48, 16, 244, 0, 80, 12, 241, 14, 12, ++ 20, 191, 181, 248, 80, 32, 2, 70, 28, 240, 3, 15, 169, 137, 5, 208, ++ 76, 70, 227, 110, 26, 108, 1, 50, 26, 100, 195, 224, 82, 24, 79, 234, ++ 19, 44, 146, 178, 76, 234, 3, 35, 4, 146, 181, 248, 20, 192, 34, 104, ++ 14, 51, 82, 248, 44, 32, 155, 178, 42, 177, 112, 74, 3, 241, 3, 12, ++ 12, 234, 2, 2, 0, 224, 26, 70, 221, 248, 16, 192, 148, 69, 5, 208, 76, ++ 70, 227, 110, 218, 107, 1, 50, 218, 99, 163, 224, 48, 177, 181, 248, ++ 80, 32, 26, 177, 91, 26, 165, 248, 80, 48, 0, 224, 171, 129, 3, 152, ++ 57, 70, 42, 70, 239, 247, 24, 249, 171, 104, 25, 136, 88, 136, 179, ++ 248, 4, 176, 64, 234, 1, 2, 91, 234, 2, 2, 0, 145, 0, 240, 138, 128, ++ 18, 154, 17, 120, 0, 41, 56, 208, 3, 153, 209, 248, 96, 38, 210, 248, ++ 48, 192, 188, 241, 0, 15, 0, 209, 19, 99, 147, 248, 0, 192, 28, 240, ++ 1, 12, 205, 248, 28, 192, 29, 209, 18, 107, 0, 153, 178, 248, 2, 192, ++ 128, 234, 12, 12, 16, 136, 72, 64, 76, 234, 0, 0, 178, 248, 4, 192, ++ 139, 234, 12, 12, 64, 234, 12, 0, 128, 178, 112, 185, 155, 137, 8, 43, ++ 14, 208, 77, 246, 134, 92, 204, 235, 3, 1, 209, 241, 0, 12, 76, 235, ++ 1, 12, 7, 224, 79, 240, 0, 12, 4, 224, 221, 248, 28, 192, 1, 224, 79, ++ 240, 1, 12, 18, 155, 131, 248, 0, 192, 34, 104, 171, 138, 82, 248, 35, ++ 48, 184, 241, 0, 15, 30, 208, 11, 177, 25, 136, 0, 224, 25, 70, 177, ++ 130, 79, 240, 0, 12, 186, 248, 22, 16, 165, 248, 20, 192, 82, 248, 33, ++ 32, 2, 177, 18, 136, 41, 136, 234, 130, 170, 248, 22, 16, 234, 137, ++ 241, 137, 34, 240, 7, 2, 1, 240, 7, 1, 10, 67, 6, 153, 234, 129, 74, ++ 104, 170, 70, 170, 98, 2, 154, 1, 153, 21, 96, 221, 248, 16, 192, 234, ++ 137, 204, 235, 1, 1, 66, 244, 128, 82, 234, 129, 8, 241, 1, 8, 1, 145, ++ 29, 70, 0, 45, 127, 244, 43, 175, 1, 155, 76, 70, 35, 177, 227, 110, ++ 90, 108, 1, 50, 90, 100, 12, 224, 37, 177, 56, 70, 41, 70, 1, 154, 235, ++ 247, 55, 255, 5, 153, 0, 32, 11, 136, 152, 68, 161, 248, 0, 128, 38, ++ 224, 20, 77, 178, 138, 43, 104, 83, 248, 34, 16, 41, 177, 0, 34, 56, ++ 70, 235, 247, 38, 255, 0, 34, 178, 130, 86, 69, 16, 209, 21, 224, 226, ++ 138, 83, 248, 34, 48, 3, 177, 27, 136, 0, 34, 243, 130, 56, 70, 33, ++ 70, 235, 247, 22, 255, 84, 69, 2, 209, 2, 155, 30, 96, 5, 224, 43, 104, ++ 242, 138, 83, 248, 34, 64, 0, 44, 233, 209, 79, 240, 255, 48, 9, 176, ++ 189, 232, 240, 143, 32, 7, 0, 0, 252, 255, 1, 0, 16, 181, 11, 70, 9, ++ 105, 134, 176, 0, 106, 185, 177, 138, 121, 170, 177, 147, 248, 36, 32, ++ 146, 7, 17, 213, 208, 248, 124, 34, 114, 177, 209, 248, 204, 32, 18, ++ 244, 0, 82, 9, 209, 0, 146, 8, 36, 2, 146, 3, 146, 4, 146, 20, 51, 12, ++ 34, 1, 148, 5, 240, 34, 220, 6, 176, 16, 189, 45, 233, 240, 79, 177, ++ 176, 221, 248, 244, 128, 155, 70, 0, 35, 15, 146, 47, 147, 8, 241, 56, ++ 2, 58, 155, 10, 146, 91, 136, 209, 248, 244, 32, 14, 147, 187, 248, ++ 0, 48, 129, 70, 3, 240, 252, 3, 163, 241, 32, 7, 123, 66, 67, 235, 7, ++ 3, 12, 70, 60, 158, 5, 106, 11, 146, 7, 147, 43, 177, 58, 155, 79, 240, ++ 48, 10, 4, 51, 9, 147, 3, 224, 7, 154, 79, 240, 16, 10, 9, 146, 0, 33, ++ 40, 34, 17, 168, 228, 243, 98, 242, 27, 168, 0, 33, 40, 34, 228, 243, ++ 93, 242, 213, 248, 92, 51, 43, 177, 17, 168, 5, 245, 87, 113, 40, 34, ++ 226, 247, 212, 254, 11, 155, 13, 241, 68, 12, 3, 241, 56, 7, 27, 170, ++ 99, 70, 0, 146, 40, 70, 58, 70, 33, 70, 205, 248, 24, 192, 13, 240, ++ 181, 218, 213, 248, 116, 52, 57, 70, 155, 120, 37, 175, 0, 34, 10, 152, ++ 25, 240, 32, 250, 56, 70, 0, 33, 32, 34, 228, 243, 55, 242, 8, 241, ++ 77, 3, 38, 147, 184, 248, 104, 48, 221, 248, 24, 192, 41, 147, 27, 171, ++ 40, 147, 45, 171, 24, 70, 0, 33, 8, 34, 205, 248, 156, 192, 6, 147, ++ 37, 150, 228, 243, 35, 242, 114, 104, 6, 155, 194, 243, 0, 66, 0, 147, ++ 141, 248, 180, 32, 33, 70, 82, 70, 0, 35, 213, 248, 124, 6, 46, 151, ++ 52, 240, 100, 222, 130, 29, 12, 146, 11, 241, 10, 3, 8, 147, 12, 155, ++ 4, 241, 188, 2, 1, 147, 47, 171, 13, 146, 0, 146, 2, 147, 7, 70, 81, ++ 70, 40, 70, 8, 154, 4, 241, 194, 3, 10, 240, 45, 220, 132, 70, 24, 185, ++ 17, 34, 168, 248, 104, 32, 223, 224, 47, 155, 0, 34, 1, 33, 25, 112, ++ 90, 112, 42, 106, 18, 104, 2, 42, 4, 209, 148, 249, 24, 33, 10, 185, ++ 33, 34, 26, 112, 33, 109, 64, 242, 55, 18, 10, 64, 50, 177, 148, 248, ++ 88, 32, 26, 177, 26, 136, 66, 240, 16, 2, 26, 128, 149, 248, 98, 36, ++ 50, 177, 42, 106, 82, 125, 26, 177, 26, 136, 66, 244, 128, 98, 26, 128, ++ 184, 248, 104, 32, 33, 70, 90, 128, 184, 248, 32, 32, 154, 128, 47, ++ 155, 45, 170, 6, 51, 141, 232, 140, 0, 47, 147, 213, 248, 124, 6, 82, ++ 70, 0, 35, 205, 248, 24, 192, 52, 240, 126, 221, 221, 248, 24, 192, ++ 0, 40, 64, 240, 145, 128, 0, 148, 152, 248, 24, 32, 227, 104, 2, 144, ++ 3, 144, 1, 146, 218, 104, 40, 70, 51, 70, 97, 70, 245, 247, 94, 254, ++ 47, 155, 6, 59, 47, 147, 179, 104, 152, 5, 12, 213, 150, 248, 36, 48, ++ 3, 240, 3, 3, 3, 43, 6, 209, 213, 248, 100, 6, 33, 70, 50, 70, 62, 240, ++ 120, 223, 129, 224, 184, 248, 104, 48, 0, 43, 125, 209, 184, 248, 32, ++ 48, 49, 70, 166, 248, 220, 48, 40, 70, 75, 240, 197, 220, 11, 154, 2, ++ 33, 146, 248, 96, 48, 14, 154, 48, 70, 147, 66, 56, 191, 19, 70, 166, ++ 248, 10, 49, 75, 240, 16, 219, 212, 248, 204, 48, 25, 3, 9, 213, 40, ++ 70, 33, 70, 5, 240, 242, 217, 1, 40, 3, 209, 40, 70, 33, 70, 39, 240, ++ 212, 223, 43, 104, 155, 106, 243, 98, 7, 155, 83, 177, 13, 152, 9, 153, ++ 6, 34, 226, 247, 215, 253, 32, 177, 72, 70, 8, 153, 226, 104, 25, 240, ++ 2, 218, 8, 153, 226, 104, 72, 70, 24, 240, 53, 223, 42, 104, 212, 248, ++ 204, 16, 146, 248, 79, 32, 17, 244, 0, 83, 24, 191, 2, 35, 18, 240, ++ 3, 2, 5, 208, 202, 4, 90, 191, 114, 104, 194, 243, 0, 66, 0, 34, 127, ++ 33, 141, 232, 6, 0, 10, 152, 6, 241, 76, 1, 0, 34, 25, 240, 128, 250, ++ 40, 70, 49, 70, 29, 240, 98, 255, 96, 105, 32, 177, 6, 241, 20, 1, 1, ++ 34, 36, 240, 123, 216, 212, 248, 204, 48, 159, 4, 4, 213, 213, 248, ++ 80, 1, 33, 70, 66, 240, 198, 220, 40, 70, 33, 70, 1, 34, 7, 240, 77, ++ 251, 12, 159, 59, 155, 58, 154, 1, 147, 47, 155, 0, 146, 2, 147, 72, ++ 70, 33, 70, 15, 154, 91, 70, 3, 151, 4, 150, 205, 248, 20, 128, 24, ++ 240, 64, 218, 5, 224, 72, 70, 33, 70, 90, 70, 67, 70, 23, 240, 203, ++ 219, 49, 176, 189, 232, 240, 143, 247, 181, 30, 70, 83, 104, 20, 70, ++ 35, 244, 0, 83, 83, 96, 17, 240, 254, 2, 5, 70, 8, 209, 1, 104, 208, ++ 248, 248, 52, 143, 106, 161, 106, 121, 26, 153, 66, 0, 217, 75, 185, ++ 0, 35, 196, 248, 236, 48, 212, 248, 168, 49, 19, 179, 42, 104, 146, ++ 106, 154, 98, 30, 224, 212, 248, 236, 48, 208, 248, 0, 21, 1, 51, 139, ++ 66, 196, 248, 236, 48, 3, 210, 1, 35, 128, 248, 252, 52, 17, 224, 148, ++ 248, 36, 48, 219, 7, 7, 213, 4, 35, 0, 147, 33, 105, 4, 241, 20, 3, ++ 1, 146, 32, 240, 43, 222, 40, 70, 33, 70, 75, 240, 97, 220, 0, 35, 179, ++ 98, 254, 189, 45, 233, 240, 67, 4, 106, 137, 176, 0, 35, 32, 70, 21, ++ 153, 221, 248, 68, 128, 22, 70, 221, 248, 64, 144, 18, 159, 5, 147, ++ 6, 147, 7, 147, 6, 240, 174, 254, 184, 241, 3, 15, 5, 70, 13, 217, 4, ++ 34, 6, 168, 73, 70, 226, 247, 55, 253, 184, 241, 7, 15, 5, 217, 7, 168, ++ 9, 241, 4, 1, 4, 34, 226, 247, 46, 253, 78, 46, 6, 154, 14, 208, 5, ++ 216, 12, 46, 17, 208, 13, 46, 64, 240, 210, 128, 34, 224, 80, 46, 0, ++ 240, 167, 128, 6, 211, 81, 46, 64, 240, 202, 128, 174, 224, 212, 248, ++ 0, 53, 15, 224, 196, 248, 0, 37, 192, 224, 184, 241, 3, 15, 20, 217, ++ 0, 42, 5, 219, 17, 70, 32, 70, 5, 170, 6, 240, 101, 254, 5, 70, 21, ++ 177, 43, 121, 59, 96, 177, 224, 5, 155, 30, 51, 64, 240, 174, 128, 61, ++ 96, 171, 224, 19, 155, 7, 43, 2, 220, 111, 240, 13, 3, 164, 224, 7, ++ 158, 3, 46, 5, 208, 166, 241, 2, 1, 78, 66, 70, 235, 1, 6, 0, 224, 0, ++ 38, 0, 42, 57, 219, 17, 70, 32, 70, 5, 170, 6, 240, 67, 254, 7, 155, ++ 5, 70, 0, 43, 48, 221, 224, 185, 5, 155, 30, 51, 44, 209, 42, 70, 43, ++ 70, 134, 240, 1, 6, 32, 70, 6, 153, 0, 150, 39, 240, 43, 222, 5, 70, ++ 24, 185, 111, 240, 26, 3, 5, 147, 29, 224, 32, 70, 41, 70, 7, 240, 1, ++ 248, 5, 144, 184, 177, 32, 70, 41, 70, 40, 240, 29, 216, 114, 224, 3, ++ 43, 2, 209, 131, 121, 43, 177, 13, 224, 2, 43, 11, 209, 131, 121, 1, ++ 43, 8, 209, 170, 121, 32, 70, 210, 241, 1, 2, 41, 70, 56, 191, 0, 34, ++ 40, 240, 229, 216, 7, 155, 3, 43, 92, 208, 2, 43, 90, 208, 53, 185, ++ 5, 154, 30, 50, 86, 209, 0, 43, 84, 209, 5, 149, 82, 224, 0, 43, 36, ++ 221, 43, 121, 0, 43, 77, 209, 35, 104, 219, 110, 154, 7, 2, 208, 111, ++ 240, 8, 3, 69, 224, 171, 121, 43, 177, 32, 70, 41, 70, 6, 240, 188, ++ 253, 5, 144, 62, 224, 213, 248, 204, 32, 18, 244, 0, 82, 2, 208, 79, ++ 240, 255, 51, 53, 224, 43, 126, 32, 70, 0, 146, 1, 146, 2, 146, 41, ++ 70, 5, 241, 25, 2, 32, 240, 140, 223, 43, 224, 107, 121, 75, 179, 32, ++ 70, 41, 70, 39, 240, 105, 222, 36, 224, 171, 121, 251, 177, 5, 245, ++ 88, 112, 1, 48, 12, 33, 228, 243, 148, 246, 0, 48, 24, 191, 1, 32, 56, ++ 96, 23, 224, 171, 121, 147, 177, 12, 33, 0, 50, 40, 70, 24, 191, 1, ++ 34, 40, 240, 248, 216, 43, 121, 99, 177, 32, 70, 41, 70, 5, 240, 136, ++ 218, 32, 70, 41, 70, 1, 34, 5, 240, 203, 218, 2, 224, 111, 240, 5, 3, ++ 5, 147, 5, 152, 1, 224, 111, 240, 22, 0, 9, 176, 189, 232, 240, 131, ++ 45, 233, 240, 79, 5, 106, 229, 176, 146, 70, 152, 70, 157, 248, 188, ++ 33, 213, 248, 104, 49, 12, 70, 9, 146, 27, 177, 155, 121, 0, 43, 64, ++ 240, 96, 129, 43, 104, 147, 248, 47, 48, 171, 177, 35, 109, 153, 7, ++ 18, 213, 148, 248, 132, 48, 123, 177, 232, 243, 185, 241, 212, 248, ++ 144, 16, 32, 240, 243, 220, 0, 40, 0, 240, 77, 129, 0, 35, 196, 248, ++ 136, 48, 196, 248, 140, 48, 132, 248, 132, 48, 163, 121, 27, 177, 35, ++ 121, 0, 43, 0, 240, 64, 129, 186, 248, 0, 48, 19, 244, 128, 67, 8, 147, ++ 99, 208, 10, 241, 10, 11, 40, 70, 33, 70, 90, 70, 29, 240, 216, 251, ++ 7, 70, 0, 40, 0, 240, 47, 129, 208, 248, 224, 48, 0, 43, 0, 240, 42, ++ 129, 152, 248, 3, 144, 157, 248, 192, 49, 79, 234, 153, 25, 11, 179, ++ 213, 248, 128, 50, 83, 248, 41, 96, 230, 177, 51, 105, 211, 177, 51, ++ 122, 195, 177, 65, 70, 3, 34, 93, 168, 226, 247, 242, 251, 93, 168, ++ 6, 241, 20, 1, 50, 105, 3, 48, 226, 247, 235, 251, 49, 105, 93, 168, ++ 3, 49, 11, 170, 235, 243, 9, 242, 110, 155, 8, 241, 4, 0, 25, 31, 11, ++ 170, 235, 243, 36, 242, 4, 235, 137, 3, 219, 110, 147, 177, 26, 105, ++ 110, 152, 65, 70, 20, 51, 242, 243, 30, 243, 192, 185, 1, 35, 0, 144, ++ 1, 147, 2, 144, 3, 144, 4, 144, 33, 70, 40, 70, 23, 34, 91, 70, 5, 240, ++ 213, 216, 215, 248, 224, 0, 235, 247, 96, 251, 0, 35, 199, 248, 224, ++ 48, 15, 38, 79, 240, 3, 11, 79, 240, 1, 9, 196, 224, 110, 154, 8, 241, ++ 4, 8, 8, 58, 110, 146, 15, 38, 1, 224, 8, 158, 55, 70, 43, 104, 184, ++ 248, 0, 144, 147, 248, 102, 49, 184, 248, 2, 176, 115, 177, 185, 241, ++ 3, 15, 11, 209, 110, 155, 9, 154, 0, 147, 1, 146, 213, 248, 80, 8, 33, ++ 70, 82, 70, 67, 70, 28, 240, 237, 254, 188, 224, 187, 241, 3, 15, 0, ++ 242, 185, 128, 8, 155, 0, 43, 90, 209, 187, 241, 1, 15, 64, 240, 174, ++ 128, 181, 248, 174, 1, 243, 247, 9, 248, 3, 28, 10, 241, 10, 2, 33, ++ 70, 24, 191, 1, 35, 40, 70, 8, 146, 29, 240, 77, 251, 1, 70, 16, 177, ++ 40, 70, 75, 240, 136, 218, 40, 70, 33, 70, 8, 154, 29, 240, 248, 251, ++ 7, 70, 0, 40, 0, 240, 148, 128, 67, 104, 218, 4, 8, 213, 42, 104, 146, ++ 248, 48, 32, 0, 42, 64, 240, 139, 128, 35, 244, 128, 83, 67, 96, 40, ++ 70, 57, 70, 13, 240, 81, 220, 185, 241, 0, 15, 3, 208, 185, 241, 1, ++ 15, 19, 209, 33, 224, 180, 249, 84, 48, 148, 249, 68, 32, 56, 70, 1, ++ 33, 27, 185, 22, 185, 75, 240, 138, 216, 1, 224, 74, 240, 27, 222, 151, ++ 248, 36, 48, 19, 240, 1, 3, 15, 209, 0, 224, 0, 35, 1, 34, 0, 147, 1, ++ 146, 2, 147, 3, 147, 4, 147, 40, 70, 33, 70, 23, 34, 8, 155, 5, 240, ++ 74, 216, 13, 38, 68, 224, 0, 46, 66, 209, 0, 33, 12, 34, 97, 168, 227, ++ 243, 179, 246, 44, 75, 0, 33, 97, 147, 43, 75, 36, 34, 98, 147, 76, ++ 171, 24, 70, 7, 147, 99, 149, 227, 243, 167, 246, 173, 248, 64, 97, ++ 85, 174, 48, 70, 0, 33, 32, 34, 205, 248, 48, 145, 205, 248, 52, 177, ++ 78, 151, 227, 243, 154, 246, 7, 155, 110, 154, 92, 147, 8, 241, 6, 3, ++ 1, 147, 147, 31, 0, 150, 2, 147, 213, 248, 124, 6, 33, 70, 176, 34, ++ 97, 171, 52, 240, 2, 219, 189, 248, 64, 97, 142, 185, 135, 177, 151, ++ 248, 36, 48, 217, 7, 12, 213, 40, 70, 33, 70, 4, 34, 10, 241, 10, 3, ++ 0, 150, 1, 150, 205, 248, 8, 144, 3, 150, 4, 150, 5, 240, 3, 216, 11, ++ 241, 1, 3, 1, 147, 0, 35, 3, 147, 4, 147, 9, 155, 32, 70, 5, 147, 10, ++ 241, 10, 1, 4, 241, 188, 2, 59, 70, 205, 248, 0, 144, 2, 150, 245, 247, ++ 70, 253, 3, 224, 14, 38, 233, 231, 1, 38, 231, 231, 101, 176, 189, 232, ++ 240, 143, 177, 136, 131, 0, 181, 136, 131, 0, 56, 181, 4, 106, 10, 114, ++ 35, 104, 13, 70, 147, 248, 60, 48, 91, 177, 1, 42, 6, 209, 209, 248, ++ 244, 48, 32, 70, 90, 142, 11, 240, 166, 255, 2, 224, 32, 70, 60, 240, ++ 242, 216, 32, 70, 38, 240, 53, 222, 132, 248, 114, 2, 40, 70, 25, 240, ++ 236, 221, 32, 70, 241, 247, 182, 254, 148, 248, 114, 34, 1, 42, 3, 216, ++ 32, 105, 1, 33, 37, 240, 159, 219, 212, 248, 112, 34, 35, 104, 18, 240, ++ 255, 31, 12, 191, 0, 34, 1, 34, 131, 248, 63, 32, 212, 248, 112, 34, ++ 35, 104, 18, 240, 255, 31, 12, 191, 0, 34, 1, 34, 131, 248, 63, 32, ++ 212, 248, 120, 1, 85, 240, 135, 223, 1, 70, 212, 248, 92, 1, 189, 232, ++ 56, 64, 7, 240, 152, 189, 240, 181, 4, 106, 135, 176, 13, 70, 0, 34, ++ 6, 70, 212, 248, 72, 1, 12, 240, 255, 253, 212, 248, 36, 1, 3, 169, ++ 42, 70, 74, 240, 108, 221, 0, 39, 8, 224, 146, 248, 36, 48, 152, 7, ++ 4, 213, 32, 70, 17, 70, 75, 240, 130, 217, 1, 55, 212, 248, 36, 1, 3, ++ 169, 29, 240, 4, 250, 2, 70, 0, 40, 238, 209, 63, 177, 3, 35, 0, 147, ++ 1, 144, 41, 70, 32, 70, 16, 75, 32, 240, 54, 219, 0, 34, 48, 70, 41, ++ 70, 255, 247, 137, 255, 32, 70, 0, 33, 11, 240, 163, 217, 4, 35, 0, ++ 33, 5, 241, 194, 2, 0, 147, 32, 70, 43, 70, 240, 247, 3, 253, 48, 70, ++ 24, 240, 73, 223, 5, 241, 188, 0, 0, 33, 6, 34, 227, 243, 201, 245, ++ 0, 32, 7, 176, 240, 189, 236, 125, 135, 0, 45, 233, 255, 65, 4, 106, ++ 5, 70, 35, 104, 147, 248, 47, 48, 11, 185, 0, 38, 62, 224, 35, 106, ++ 24, 105, 13, 240, 210, 255, 6, 70, 40, 187, 43, 138, 27, 179, 32, 70, ++ 38, 240, 165, 221, 0, 40, 30, 221, 234, 33, 32, 70, 12, 240, 39, 223, ++ 181, 248, 110, 48, 131, 66, 18, 209, 181, 248, 108, 48, 42, 138, 1, ++ 51, 155, 178, 154, 66, 165, 248, 108, 48, 11, 216, 32, 70, 165, 248, ++ 108, 96, 165, 248, 110, 96, 9, 240, 55, 223, 79, 240, 255, 48, 182, ++ 224, 165, 248, 108, 96, 165, 248, 110, 0, 212, 248, 36, 1, 1, 169, 0, ++ 34, 74, 240, 244, 220, 3, 224, 67, 104, 35, 240, 32, 3, 67, 96, 212, ++ 248, 36, 1, 1, 169, 29, 240, 146, 249, 0, 40, 244, 209, 190, 231, 212, ++ 248, 104, 50, 159, 89, 0, 47, 46, 208, 187, 121, 99, 179, 59, 121, 83, ++ 179, 215, 248, 92, 51, 27, 120, 51, 179, 215, 248, 244, 48, 91, 142, ++ 3, 244, 96, 83, 179, 245, 128, 95, 30, 209, 212, 248, 112, 4, 57, 70, ++ 69, 240, 111, 221, 128, 70, 24, 177, 56, 70, 25, 240, 140, 223, 19, ++ 224, 215, 248, 92, 51, 34, 104, 145, 106, 154, 104, 138, 26, 153, 138, ++ 91, 139, 75, 67, 154, 66, 8, 217, 56, 70, 1, 33, 25, 240, 132, 223, ++ 56, 70, 65, 70, 66, 70, 25, 240, 249, 222, 4, 54, 32, 46, 200, 209, ++ 35, 104, 147, 248, 47, 32, 0, 42, 72, 208, 212, 248, 104, 33, 10, 177, ++ 146, 121, 138, 187, 32, 70, 27, 240, 79, 216, 34, 104, 212, 248, 244, ++ 52, 145, 106, 210, 248, 40, 1, 78, 30, 48, 26, 176, 251, 243, 246, 3, ++ 251, 22, 0, 177, 251, 243, 246, 3, 251, 22, 17, 136, 66, 2, 217, 1, ++ 33, 132, 248, 252, 20, 0, 33, 194, 248, 40, 17, 43, 177, 146, 106, 178, ++ 251, 243, 241, 3, 251, 17, 35, 67, 177, 212, 248, 80, 1, 16, 177, 66, ++ 240, 221, 216, 16, 185, 148, 248, 252, 52, 91, 177, 40, 70, 24, 240, ++ 50, 217, 0, 35, 132, 248, 252, 52, 4, 224, 211, 248, 40, 33, 1, 50, ++ 195, 248, 40, 33, 149, 248, 81, 48, 27, 177, 40, 70, 2, 33, 24, 240, ++ 230, 220, 149, 248, 80, 48, 19, 177, 171, 109, 1, 51, 171, 101, 0, 37, ++ 212, 248, 104, 50, 94, 89, 142, 177, 179, 121, 123, 177, 51, 121, 107, ++ 177, 32, 70, 49, 70, 4, 240, 153, 223, 64, 177, 32, 70, 49, 70, 4, 240, ++ 142, 223, 32, 70, 49, 70, 1, 34, 4, 240, 209, 223, 4, 53, 32, 45, 230, ++ 209, 0, 32, 4, 176, 189, 232, 240, 129, 45, 233, 240, 71, 3, 104, 14, ++ 70, 147, 248, 79, 48, 7, 70, 153, 7, 104, 208, 208, 248, 104, 49, 19, ++ 177, 155, 121, 0, 43, 98, 209, 244, 104, 0, 44, 95, 209, 51, 104, 219, ++ 105, 27, 121, 67, 244, 128, 85, 14, 43, 140, 191, 79, 244, 64, 67, 0, ++ 35, 29, 67, 215, 248, 104, 50, 83, 248, 4, 128, 184, 241, 0, 15, 74, ++ 208, 152, 248, 6, 48, 0, 43, 70, 208, 152, 248, 4, 48, 0, 43, 66, 208, ++ 216, 248, 244, 48, 179, 248, 50, 144, 216, 248, 92, 51, 27, 120, 0, ++ 43, 57, 208, 72, 70, 228, 243, 26, 247, 130, 70, 40, 70, 228, 243, 22, ++ 247, 192, 235, 10, 0, 0, 40, 5, 218, 40, 70, 228, 243, 15, 247, 130, ++ 70, 72, 70, 4, 224, 72, 70, 228, 243, 9, 247, 130, 70, 40, 70, 228, ++ 243, 5, 247, 192, 235, 10, 10, 186, 241, 3, 15, 212, 191, 79, 240, 0, ++ 10, 79, 240, 1, 10, 186, 241, 0, 15, 21, 209, 64, 70, 241, 104, 25, ++ 240, 173, 221, 128, 177, 64, 70, 81, 70, 25, 240, 174, 222, 9, 244, ++ 96, 89, 64, 70, 25, 240, 161, 222, 185, 245, 128, 95, 4, 208, 1, 33, ++ 64, 70, 10, 70, 25, 240, 27, 222, 4, 52, 32, 44, 170, 209, 0, 32, 189, ++ 232, 240, 135, 0, 0, 45, 233, 240, 79, 173, 245, 1, 125, 11, 147, 3, ++ 111, 128, 70, 203, 88, 13, 70, 10, 146, 6, 106, 108, 34, 44, 168, 0, ++ 33, 139, 156, 14, 147, 227, 243, 80, 244, 138, 155, 10, 152, 48, 147, ++ 157, 248, 48, 50, 11, 154, 141, 248, 200, 48, 180, 248, 220, 48, 46, ++ 144, 47, 146, 205, 248, 176, 128, 45, 149, 49, 148, 35, 185, 32, 105, ++ 39, 240, 178, 220, 164, 248, 220, 0, 180, 248, 220, 0, 213, 248, 244, ++ 32, 173, 248, 208, 0, 13, 146, 0, 33, 40, 34, 71, 168, 227, 243, 46, ++ 244, 10, 155, 11, 152, 31, 136, 0, 136, 7, 240, 252, 7, 167, 241, 32, ++ 14, 222, 241, 0, 7, 71, 235, 14, 7, 123, 1, 12, 147, 148, 248, 36, 48, ++ 173, 248, 36, 0, 3, 240, 3, 3, 3, 43, 31, 250, 128, 251, 3, 209, 163, ++ 104, 152, 5, 0, 241, 13, 130, 214, 248, 104, 49, 27, 177, 155, 121, ++ 0, 43, 64, 240, 35, 130, 51, 104, 147, 248, 47, 48, 171, 177, 43, 109, ++ 153, 7, 18, 213, 149, 248, 132, 48, 123, 177, 231, 243, 7, 246, 213, ++ 248, 144, 16, 32, 240, 65, 217, 0, 40, 0, 240, 22, 130, 0, 35, 197, ++ 248, 136, 48, 197, 248, 140, 48, 133, 248, 132, 48, 39, 177, 138, 152, ++ 9, 40, 64, 242, 4, 130, 9, 224, 138, 154, 3, 42, 64, 242, 255, 129, ++ 11, 155, 162, 241, 4, 10, 3, 241, 4, 9, 5, 224, 11, 152, 138, 154, 0, ++ 241, 10, 9, 162, 241, 10, 10, 0, 39, 186, 241, 1, 15, 164, 248, 68, ++ 112, 167, 100, 205, 248, 224, 144, 205, 248, 228, 160, 205, 248, 216, ++ 144, 64, 243, 229, 129, 153, 248, 1, 48, 2, 51, 154, 69, 192, 242, 223, ++ 129, 57, 70, 12, 34, 125, 168, 227, 243, 194, 243, 163, 75, 57, 70, ++ 125, 147, 163, 75, 36, 34, 126, 147, 101, 171, 24, 70, 8, 147, 127, ++ 150, 227, 243, 182, 243, 81, 170, 13, 245, 220, 124, 102, 146, 91, 170, ++ 103, 146, 96, 70, 57, 70, 32, 34, 205, 248, 28, 192, 101, 148, 173, ++ 248, 180, 113, 227, 243, 166, 243, 8, 155, 221, 248, 28, 192, 117, 147, ++ 51, 104, 41, 70, 147, 248, 79, 48, 205, 248, 0, 192, 3, 240, 3, 3, 205, ++ 248, 4, 144, 205, 248, 8, 160, 141, 248, 208, 49, 214, 248, 124, 6, ++ 12, 154, 125, 171, 52, 240, 6, 216, 0, 40, 64, 240, 163, 129, 189, 248, ++ 36, 0, 189, 248, 180, 49, 164, 248, 8, 1, 212, 248, 240, 0, 12, 147, ++ 56, 177, 65, 120, 2, 49, 228, 243, 49, 247, 194, 27, 80, 66, 64, 235, ++ 2, 0, 9, 144, 9, 154, 48, 70, 141, 248, 210, 32, 81, 169, 91, 170, 71, ++ 171, 5, 240, 95, 216, 0, 40, 64, 240, 107, 129, 150, 248, 12, 37, 157, ++ 248, 48, 49, 154, 66, 64, 240, 100, 129, 148, 248, 36, 48, 155, 7, 11, ++ 213, 148, 248, 231, 48, 35, 177, 48, 70, 33, 70, 1, 34, 0, 240, 24, ++ 251, 32, 70, 254, 33, 74, 240, 135, 218, 149, 249, 68, 16, 0, 41, 192, ++ 242, 87, 129, 148, 248, 36, 48, 223, 7, 64, 241, 82, 129, 4, 241, 32, ++ 0, 228, 243, 233, 241, 0, 40, 0, 240, 75, 129, 51, 104, 147, 248, 173, ++ 48, 75, 177, 214, 248, 116, 1, 17, 240, 188, 216, 2, 40, 3, 209, 27, ++ 244, 128, 127, 0, 240, 51, 129, 109, 34, 16, 168, 0, 33, 227, 243, 49, ++ 243, 0, 35, 221, 248, 28, 225, 26, 70, 18, 224, 128, 168, 193, 24, 17, ++ 248, 224, 28, 1, 240, 127, 1, 108, 41, 9, 216, 86, 72, 64, 92, 48, 177, ++ 16, 175, 64, 178, 121, 84, 50, 234, 32, 2, 40, 191, 1, 34, 1, 51, 115, ++ 69, 234, 209, 97, 104, 51, 106, 33, 240, 7, 1, 97, 96, 88, 125, 18, ++ 241, 0, 12, 24, 191, 79, 240, 1, 12, 24, 177, 18, 185, 65, 240, 1, 1, ++ 97, 96, 91, 125, 51, 177, 27, 244, 128, 111, 3, 209, 99, 104, 67, 240, ++ 2, 3, 99, 96, 27, 240, 32, 2, 15, 146, 3, 208, 99, 104, 67, 240, 4, ++ 3, 99, 96, 13, 155, 154, 107, 0, 35, 13, 224, 13, 152, 193, 24, 145, ++ 248, 60, 16, 8, 6, 6, 213, 1, 240, 127, 1, 16, 168, 65, 92, 0, 41, 0, ++ 240, 228, 128, 1, 51, 147, 66, 239, 209, 51, 104, 147, 248, 79, 48, ++ 159, 7, 42, 208, 104, 153, 65, 179, 74, 120, 48, 70, 2, 50, 205, 248, ++ 28, 192, 53, 240, 222, 220, 0, 34, 7, 70, 0, 146, 48, 70, 33, 70, 58, ++ 70, 0, 35, 240, 247, 173, 250, 221, 248, 28, 192, 175, 177, 76, 168, ++ 16, 34, 1, 48, 249, 28, 225, 247, 66, 255, 76, 170, 0, 35, 241, 24, ++ 145, 248, 229, 18, 18, 248, 1, 15, 8, 64, 136, 66, 64, 240, 182, 128, ++ 1, 51, 16, 43, 243, 209, 79, 240, 2, 12, 14, 155, 156, 69, 192, 240, ++ 173, 128, 181, 248, 90, 32, 34, 177, 41, 109, 64, 242, 55, 19, 11, 64, ++ 19, 185, 43, 109, 88, 6, 12, 213, 180, 248, 68, 48, 35, 177, 161, 108, ++ 64, 242, 55, 19, 11, 64, 35, 185, 43, 109, 19, 240, 65, 15, 0, 240, ++ 157, 128, 27, 240, 16, 15, 30, 208, 41, 109, 64, 242, 55, 19, 11, 64, ++ 203, 185, 73, 6, 1, 213, 9, 152, 168, 177, 48, 70, 10, 158, 0, 35, 1, ++ 34, 0, 147, 1, 146, 2, 147, 3, 147, 4, 147, 41, 70, 23, 34, 6, 241, ++ 10, 3, 4, 240, 9, 220, 128, 224, 189, 134, 131, 0, 109, 136, 131, 0, ++ 224, 248, 135, 0, 234, 177, 42, 109, 64, 242, 55, 19, 19, 64, 195, 177, ++ 211, 7, 22, 213, 148, 248, 230, 48, 1, 43, 18, 209, 180, 248, 68, 48, ++ 123, 177, 5, 241, 188, 3, 0, 147, 5, 241, 194, 3, 1, 147, 2, 39, 48, ++ 70, 41, 70, 34, 70, 4, 241, 20, 3, 2, 151, 13, 240, 20, 220, 92, 224, ++ 51, 104, 147, 248, 48, 48, 75, 185, 51, 106, 27, 104, 2, 43, 5, 209, ++ 149, 249, 24, 49, 19, 185, 15, 152, 0, 40, 71, 208, 51, 106, 27, 104, ++ 2, 43, 5, 209, 152, 248, 0, 48, 19, 177, 27, 244, 128, 111, 63, 208, ++ 48, 70, 3, 240, 92, 223, 216, 248, 48, 48, 152, 66, 58, 210, 48, 70, ++ 41, 70, 4, 240, 170, 218, 213, 248, 128, 48, 152, 66, 50, 210, 213, ++ 248, 204, 48, 159, 4, 7, 213, 214, 248, 80, 1, 33, 70, 74, 70, 83, 70, ++ 66, 240, 127, 216, 64, 187, 12, 154, 71, 169, 173, 248, 24, 33, 58, ++ 168, 40, 34, 225, 247, 154, 254, 1, 35, 141, 248, 216, 49, 4, 241, 20, ++ 1, 0, 35, 6, 34, 119, 168, 173, 248, 218, 49, 44, 175, 225, 247, 141, ++ 254, 48, 70, 41, 70, 118, 170, 35, 70, 0, 151, 23, 240, 84, 220, 34, ++ 224, 30, 39, 10, 224, 22, 39, 8, 224, 18, 39, 6, 224, 19, 39, 4, 224, ++ 25, 39, 2, 224, 17, 39, 0, 224, 12, 39, 11, 158, 44, 171, 0, 150, 138, ++ 158, 3, 147, 64, 70, 41, 70, 118, 170, 10, 155, 173, 248, 24, 113, 1, ++ 150, 2, 148, 254, 247, 87, 255, 5, 224, 64, 70, 41, 70, 10, 154, 44, ++ 171, 22, 240, 154, 220, 13, 245, 1, 125, 189, 232, 240, 143, 2, 75, ++ 0, 240, 15, 0, 83, 248, 32, 0, 112, 71, 240, 114, 4, 0, 56, 181, 208, ++ 248, 4, 53, 145, 248, 218, 0, 12, 70, 157, 105, 56, 177, 255, 247, 238, ++ 255, 1, 70, 96, 25, 189, 232, 56, 64, 228, 243, 52, 178, 56, 189, 56, ++ 181, 208, 248, 4, 53, 145, 248, 218, 0, 12, 70, 15, 40, 157, 105, 10, ++ 208, 192, 67, 0, 240, 15, 0, 255, 247, 217, 255, 1, 70, 96, 25, 189, ++ 232, 56, 64, 228, 243, 31, 178, 0, 32, 56, 189, 112, 181, 20, 70, 209, ++ 248, 248, 32, 5, 70, 10, 185, 10, 105, 210, 104, 9, 125, 210, 104, 201, ++ 7, 213, 248, 4, 5, 3, 212, 65, 104, 9, 177, 1, 57, 65, 96, 161, 105, ++ 40, 70, 33, 240, 1, 1, 161, 97, 17, 29, 34, 70, 237, 247, 10, 253, 6, ++ 70, 48, 185, 104, 104, 33, 70, 1, 34, 234, 247, 221, 253, 48, 70, 112, ++ 189, 1, 32, 112, 189, 45, 233, 240, 65, 208, 248, 4, 53, 10, 105, 159, ++ 105, 146, 249, 68, 32, 27, 104, 79, 244, 136, 116, 177, 248, 220, 80, ++ 4, 251, 2, 52, 145, 248, 218, 48, 173, 4, 128, 70, 14, 70, 207, 25, ++ 173, 12, 11, 177, 15, 43, 1, 209, 248, 136, 1, 224, 255, 247, 167, 255, ++ 0, 40, 151, 248, 203, 48, 20, 221, 0, 43, 84, 209, 32, 70, 41, 70, 228, ++ 243, 44, 243, 180, 248, 252, 48, 157, 66, 0, 211, 11, 185, 164, 248, ++ 252, 80, 180, 248, 254, 48, 171, 66, 56, 191, 164, 248, 254, 80, 1, ++ 35, 52, 224, 0, 43, 63, 208, 32, 70, 41, 70, 227, 243, 149, 247, 212, ++ 248, 4, 49, 35, 185, 164, 248, 254, 48, 164, 248, 252, 48, 37, 224, ++ 180, 248, 254, 48, 171, 66, 11, 209, 5, 224, 32, 70, 41, 70, 227, 243, ++ 222, 247, 0, 40, 37, 209, 1, 61, 173, 178, 0, 45, 245, 209, 30, 224, ++ 180, 248, 252, 48, 171, 66, 17, 209, 1, 53, 9, 224, 32, 70, 41, 70, ++ 227, 243, 205, 247, 16, 177, 164, 248, 252, 80, 7, 224, 1, 53, 173, ++ 178, 216, 248, 0, 48, 219, 105, 27, 105, 157, 66, 239, 219, 0, 35, 135, ++ 248, 203, 48, 49, 105, 64, 70, 189, 232, 240, 65, 4, 240, 192, 155, ++ 164, 248, 252, 80, 164, 248, 254, 80, 241, 231, 189, 232, 240, 129, ++ 56, 181, 208, 248, 4, 53, 5, 70, 155, 105, 12, 70, 203, 24, 147, 248, ++ 220, 48, 19, 185, 255, 247, 45, 255, 40, 185, 40, 70, 33, 70, 189, 232, ++ 56, 64, 25, 240, 208, 156, 148, 248, 218, 0, 255, 247, 26, 255, 33, ++ 70, 2, 70, 32, 35, 40, 70, 25, 240, 156, 222, 40, 185, 40, 70, 33, 70, ++ 189, 232, 56, 64, 25, 240, 23, 157, 56, 189, 11, 104, 10, 121, 25, 105, ++ 137, 121, 65, 177, 145, 7, 6, 213, 147, 248, 36, 32, 146, 7, 2, 212, ++ 25, 70, 255, 247, 83, 191, 112, 71, 45, 233, 240, 79, 208, 248, 4, 117, ++ 133, 176, 187, 105, 128, 70, 205, 24, 234, 136, 12, 70, 0, 42, 76, 208, ++ 49, 248, 3, 176, 79, 240, 0, 10, 11, 241, 255, 54, 60, 224, 49, 70, ++ 40, 70, 228, 243, 66, 241, 131, 105, 2, 70, 217, 7, 11, 212, 67, 240, ++ 1, 3, 131, 97, 185, 241, 0, 15, 8, 191, 129, 70, 49, 70, 40, 70, 228, ++ 243, 137, 241, 29, 224, 123, 104, 11, 177, 1, 59, 123, 96, 251, 104, ++ 1, 51, 251, 96, 4, 241, 20, 3, 147, 232, 3, 0, 35, 105, 2, 144, 173, ++ 248, 12, 16, 64, 70, 33, 70, 1, 147, 25, 240, 56, 222, 1, 155, 64, 70, ++ 25, 70, 2, 170, 28, 240, 226, 252, 16, 185, 21, 224, 79, 240, 0, 9, ++ 12, 35, 3, 251, 11, 83, 83, 68, 83, 248, 4, 60, 75, 69, 197, 209, 1, ++ 62, 170, 241, 12, 10, 114, 28, 240, 209, 149, 248, 203, 48, 27, 177, ++ 64, 70, 33, 70, 255, 247, 249, 254, 5, 176, 189, 232, 240, 143, 45, ++ 233, 243, 65, 5, 70, 213, 248, 4, 101, 12, 70, 183, 105, 1, 241, 20, ++ 3, 147, 232, 3, 0, 212, 248, 16, 128, 0, 144, 173, 248, 4, 16, 231, ++ 25, 24, 224, 35, 125, 219, 7, 3, 212, 115, 104, 11, 177, 1, 59, 115, ++ 96, 139, 105, 104, 104, 35, 240, 1, 3, 139, 97, 1, 34, 234, 247, 174, ++ 252, 157, 248, 0, 48, 216, 7, 5, 212, 40, 70, 65, 70, 106, 70, 28, 240, ++ 157, 252, 128, 177, 0, 33, 56, 70, 227, 243, 230, 247, 1, 70, 0, 40, ++ 223, 209, 180, 248, 220, 48, 51, 177, 151, 248, 203, 48, 27, 177, 40, ++ 70, 33, 70, 255, 247, 186, 254, 189, 232, 252, 129, 45, 233, 255, 71, ++ 208, 248, 4, 53, 146, 70, 158, 105, 15, 105, 142, 25, 150, 248, 221, ++ 32, 4, 70, 13, 70, 211, 248, 0, 192, 151, 248, 68, 144, 0, 42, 115, ++ 209, 79, 244, 136, 126, 79, 250, 137, 249, 14, 251, 9, 201, 79, 240, ++ 1, 8, 134, 248, 221, 128, 217, 248, 4, 225, 14, 241, 255, 62, 201, 248, ++ 4, 225, 211, 248, 28, 224, 14, 241, 255, 62, 195, 248, 28, 224, 129, ++ 248, 231, 32, 3, 34, 15, 240, 202, 220, 217, 248, 4, 49, 35, 187, 215, ++ 248, 204, 48, 19, 244, 128, 99, 31, 209, 215, 248, 244, 32, 82, 142, ++ 2, 244, 64, 66, 162, 245, 64, 64, 66, 66, 66, 235, 0, 2, 14, 50, 7, ++ 235, 130, 2, 82, 104, 130, 248, 231, 48, 227, 105, 179, 249, 36, 48, ++ 91, 177, 148, 248, 117, 50, 67, 185, 64, 34, 0, 147, 132, 248, 117, ++ 130, 32, 70, 65, 70, 19, 70, 10, 240, 118, 220, 79, 240, 0, 8, 32, 70, ++ 41, 70, 134, 248, 200, 128, 134, 248, 202, 128, 25, 240, 14, 220, 198, ++ 248, 208, 128, 5, 241, 20, 3, 147, 232, 3, 0, 2, 144, 173, 248, 12, ++ 16, 186, 241, 0, 15, 9, 209, 32, 70, 41, 70, 79, 246, 255, 114, 0, 35, ++ 25, 240, 121, 221, 0, 40, 246, 209, 3, 224, 32, 70, 41, 70, 255, 247, ++ 73, 255, 157, 248, 8, 48, 217, 7, 5, 212, 32, 70, 57, 70, 2, 170, 28, ++ 240, 7, 252, 16, 177, 0, 35, 134, 248, 221, 48, 189, 232, 255, 135, ++ 45, 233, 240, 65, 208, 248, 4, 117, 180, 176, 187, 105, 6, 70, 13, 70, ++ 1, 235, 3, 8, 1, 168, 16, 33, 128, 34, 227, 243, 190, 247, 36, 224, ++ 43, 125, 217, 7, 3, 212, 123, 104, 11, 177, 1, 59, 123, 96, 99, 107, ++ 26, 1, 5, 212, 1, 168, 51, 153, 34, 70, 228, 243, 110, 240, 20, 224, ++ 163, 105, 41, 70, 35, 240, 1, 3, 163, 97, 34, 70, 1, 35, 48, 70, 237, ++ 247, 39, 254, 48, 70, 2, 33, 34, 70, 0, 35, 237, 247, 161, 254, 48, ++ 70, 41, 70, 34, 70, 25, 240, 28, 221, 64, 70, 51, 169, 227, 243, 22, ++ 247, 4, 70, 0, 40, 211, 209, 14, 224, 53, 185, 51, 104, 17, 70, 88, ++ 105, 1, 34, 234, 247, 197, 251, 6, 224, 64, 70, 51, 153, 228, 243, 68, ++ 240, 123, 104, 1, 51, 123, 96, 1, 168, 51, 169, 227, 243, 255, 246, ++ 2, 70, 0, 40, 233, 209, 181, 248, 220, 48, 51, 177, 152, 248, 203, 48, ++ 27, 177, 48, 70, 41, 70, 255, 247, 211, 253, 52, 176, 189, 232, 240, ++ 129, 45, 233, 240, 65, 141, 106, 7, 70, 149, 248, 36, 0, 11, 70, 16, ++ 240, 2, 0, 148, 70, 3, 209, 42, 105, 18, 124, 0, 42, 46, 209, 215, 248, ++ 4, 69, 152, 105, 166, 105, 16, 244, 128, 96, 46, 68, 182, 248, 6, 128, ++ 6, 209, 34, 105, 144, 69, 3, 221, 97, 104, 98, 105, 145, 66, 29, 216, ++ 26, 70, 56, 70, 49, 70, 99, 70, 237, 247, 169, 250, 176, 177, 243, 136, ++ 200, 235, 3, 8, 184, 241, 1, 15, 2, 209, 99, 104, 1, 51, 99, 96, 181, ++ 248, 220, 48, 51, 177, 150, 248, 203, 48, 51, 185, 56, 70, 41, 70, 255, ++ 247, 150, 253, 1, 32, 189, 232, 240, 129, 1, 32, 189, 232, 240, 129, ++ 210, 248, 24, 192, 248, 181, 28, 240, 2, 15, 7, 70, 13, 70, 20, 70, ++ 208, 248, 4, 101, 5, 208, 209, 248, 52, 1, 68, 106, 128, 106, 160, 71, ++ 248, 189, 17, 70, 26, 70, 255, 247, 171, 255, 128, 185, 179, 104, 56, ++ 70, 1, 51, 179, 96, 179, 105, 41, 70, 235, 24, 211, 248, 216, 32, 1, ++ 50, 195, 248, 216, 32, 34, 70, 189, 232, 248, 64, 25, 240, 138, 156, ++ 248, 189, 45, 233, 248, 67, 12, 136, 12, 39, 1, 60, 7, 251, 4, 23, 129, ++ 70, 13, 70, 144, 70, 8, 55, 30, 224, 40, 70, 33, 70, 227, 243, 95, 247, ++ 131, 106, 2, 70, 152, 69, 2, 209, 131, 105, 155, 7, 7, 213, 40, 70, ++ 33, 70, 0, 46, 8, 191, 22, 70, 227, 243, 167, 247, 6, 224, 72, 70, 65, ++ 70, 35, 70, 255, 247, 180, 255, 0, 224, 0, 38, 59, 104, 179, 66, 226, ++ 209, 1, 60, 12, 63, 96, 28, 247, 209, 189, 232, 248, 131, 208, 248, ++ 4, 53, 112, 181, 158, 105, 5, 70, 12, 70, 3, 34, 142, 25, 15, 240, 74, ++ 219, 40, 70, 33, 70, 25, 240, 22, 223, 1, 35, 134, 248, 245, 48, 112, ++ 189, 195, 105, 48, 181, 179, 249, 30, 32, 179, 249, 28, 80, 133, 176, ++ 173, 24, 179, 249, 32, 32, 179, 249, 34, 48, 173, 24, 237, 24, 4, 70, ++ 90, 209, 144, 248, 116, 50, 41, 70, 35, 240, 8, 3, 128, 248, 116, 50, ++ 111, 240, 63, 2, 0, 105, 36, 240, 26, 222, 212, 248, 104, 50, 89, 89, ++ 193, 177, 209, 248, 204, 48, 91, 5, 20, 212, 209, 248, 244, 48, 91, ++ 142, 3, 244, 64, 67, 163, 245, 64, 64, 67, 66, 67, 235, 0, 3, 14, 51, ++ 1, 235, 131, 3, 91, 104, 43, 177, 147, 248, 231, 48, 19, 177, 32, 70, ++ 25, 240, 217, 218, 4, 53, 32, 45, 223, 209, 212, 248, 36, 1, 1, 169, ++ 0, 34, 73, 240, 218, 221, 23, 224, 149, 248, 231, 48, 163, 177, 43, ++ 125, 218, 7, 17, 212, 212, 248, 4, 53, 155, 105, 235, 24, 147, 248, ++ 245, 48, 27, 185, 32, 70, 41, 70, 255, 247, 154, 255, 149, 248, 232, ++ 32, 26, 185, 32, 70, 41, 70, 255, 247, 20, 254, 212, 248, 36, 1, 1, ++ 169, 28, 240, 100, 250, 5, 70, 0, 40, 223, 209, 212, 248, 164, 21, 33, ++ 177, 75, 137, 19, 177, 32, 70, 241, 247, 158, 255, 5, 176, 48, 189, ++ 115, 181, 10, 105, 4, 70, 147, 121, 13, 70, 19, 185, 19, 124, 0, 43, ++ 95, 209, 212, 248, 4, 53, 146, 249, 68, 16, 24, 104, 79, 244, 136, 118, ++ 6, 251, 1, 1, 209, 248, 4, 1, 1, 48, 193, 248, 4, 1, 216, 105, 1, 48, ++ 216, 97, 1, 32, 133, 248, 231, 0, 133, 248, 232, 0, 158, 105, 0, 32, ++ 174, 25, 165, 248, 228, 0, 134, 248, 202, 0, 209, 248, 4, 17, 1, 41, ++ 31, 209, 210, 248, 204, 48, 19, 244, 128, 99, 26, 209, 210, 248, 244, ++ 0, 64, 142, 0, 244, 64, 64, 160, 245, 64, 76, 220, 241, 0, 0, 64, 235, ++ 12, 0, 14, 48, 2, 235, 128, 2, 82, 104, 130, 248, 231, 16, 148, 248, ++ 117, 34, 50, 177, 132, 248, 117, 50, 32, 70, 64, 34, 0, 147, 10, 240, ++ 131, 218, 227, 105, 179, 249, 30, 32, 179, 249, 28, 16, 137, 24, 179, ++ 249, 32, 32, 137, 24, 179, 249, 34, 32, 139, 24, 0, 43, 9, 221, 148, ++ 248, 116, 50, 67, 240, 8, 3, 132, 248, 116, 50, 0, 35, 134, 248, 245, ++ 48, 6, 224, 32, 70, 41, 70, 2, 176, 189, 232, 112, 64, 255, 247, 24, ++ 191, 2, 176, 112, 189, 255, 247, 189, 190, 45, 233, 248, 67, 5, 70, ++ 137, 70, 22, 70, 79, 240, 0, 8, 213, 248, 104, 50, 83, 248, 8, 112, ++ 103, 177, 187, 121, 11, 177, 59, 121, 11, 185, 59, 124, 51, 185, 40, ++ 70, 57, 70, 74, 70, 28, 240, 7, 250, 4, 70, 40, 185, 8, 241, 4, 8, 184, ++ 241, 32, 15, 232, 209, 5, 224, 144, 248, 36, 48, 152, 7, 13, 212, 59, ++ 124, 91, 177, 149, 248, 116, 34, 40, 105, 2, 240, 8, 2, 0, 42, 20, 191, ++ 32, 34, 160, 34, 73, 70, 82, 178, 56, 224, 213, 248, 4, 53, 155, 105, ++ 227, 24, 182, 177, 147, 248, 244, 32, 22, 240, 2, 15, 20, 191, 66, 240, ++ 1, 2, 34, 240, 1, 2, 131, 248, 244, 32, 148, 248, 231, 48, 35, 185, ++ 40, 70, 33, 70, 255, 247, 75, 255, 22, 224, 1, 35, 132, 248, 232, 48, ++ 18, 224, 147, 248, 244, 48, 217, 7, 14, 212, 149, 248, 116, 50, 26, ++ 7, 2, 213, 132, 248, 232, 96, 7, 224, 148, 248, 231, 48, 35, 177, 40, ++ 70, 33, 70, 50, 70, 255, 247, 53, 253, 149, 248, 116, 50, 40, 105, 27, ++ 7, 88, 191, 102, 240, 127, 6, 4, 241, 20, 1, 50, 70, 36, 240, 240, 220, ++ 0, 32, 189, 232, 248, 131, 208, 248, 4, 53, 247, 181, 156, 105, 6, 70, ++ 12, 25, 212, 248, 212, 48, 13, 70, 23, 70, 0, 43, 84, 209, 148, 248, ++ 201, 48, 90, 7, 80, 212, 67, 240, 4, 3, 132, 248, 201, 48, 227, 136, ++ 19, 177, 255, 247, 138, 251, 216, 185, 2, 35, 0, 147, 48, 70, 0, 35, ++ 41, 105, 5, 241, 20, 2, 1, 147, 12, 240, 192, 223, 16, 185, 132, 248, ++ 200, 0, 8, 224, 131, 127, 35, 240, 48, 3, 67, 240, 32, 3, 131, 119, ++ 1, 35, 132, 248, 200, 48, 148, 248, 201, 48, 35, 240, 1, 3, 13, 224, ++ 148, 248, 200, 48, 107, 177, 43, 125, 216, 7, 10, 212, 148, 248, 201, ++ 48, 217, 7, 33, 213, 58, 5, 31, 212, 67, 240, 2, 3, 132, 248, 201, 48, ++ 26, 224, 48, 70, 41, 70, 255, 247, 71, 251, 0, 40, 10, 221, 149, 248, ++ 218, 0, 192, 67, 0, 240, 15, 0, 255, 247, 54, 251, 41, 70, 2, 70, 48, ++ 70, 3, 224, 48, 70, 41, 70, 79, 246, 255, 114, 0, 35, 3, 176, 189, 232, ++ 240, 64, 25, 240, 176, 154, 3, 176, 240, 189, 45, 233, 240, 79, 145, ++ 176, 1, 147, 178, 248, 2, 144, 178, 248, 32, 128, 142, 106, 79, 234, ++ 89, 25, 5, 70, 12, 70, 147, 70, 9, 240, 15, 9, 8, 244, 127, 72, 208, ++ 248, 4, 165, 22, 177, 150, 248, 231, 48, 43, 185, 40, 70, 6, 241, 20, ++ 1, 2, 34, 255, 247, 16, 255, 33, 70, 3, 170, 40, 70, 237, 247, 68, 252, ++ 213, 248, 4, 21, 10, 155, 143, 105, 26, 136, 247, 25, 151, 248, 202, ++ 16, 1, 187, 185, 241, 0, 15, 2, 209, 184, 241, 0, 15, 26, 208, 2, 240, ++ 12, 2, 4, 42, 22, 208, 189, 248, 18, 32, 2, 240, 16, 2, 146, 178, 18, ++ 177, 187, 248, 4, 32, 1, 224, 218, 138, 18, 9, 73, 234, 2, 18, 218, ++ 130, 9, 154, 19, 136, 162, 248, 78, 128, 35, 240, 16, 3, 27, 4, 27, ++ 12, 19, 128, 1, 155, 43, 185, 185, 241, 0, 15, 5, 209, 184, 241, 0, ++ 15, 2, 209, 1, 35, 135, 248, 202, 48, 34, 74, 22, 179, 150, 248, 231, ++ 48, 251, 177, 51, 125, 216, 7, 28, 212, 163, 105, 153, 7, 25, 212, 227, ++ 137, 3, 240, 7, 3, 210, 92, 13, 42, 1, 220, 1, 50, 0, 224, 15, 34, 40, ++ 70, 33, 70, 255, 247, 59, 253, 64, 187, 218, 248, 8, 48, 1, 32, 1, 51, ++ 202, 248, 8, 48, 215, 248, 216, 48, 1, 51, 199, 248, 216, 48, 29, 224, ++ 227, 127, 67, 240, 1, 3, 227, 119, 214, 248, 248, 48, 11, 185, 51, 105, ++ 219, 104, 217, 104, 227, 137, 4, 49, 3, 240, 7, 3, 211, 92, 13, 43, ++ 1, 220, 1, 51, 0, 224, 15, 35, 40, 70, 34, 70, 236, 247, 229, 255, 208, ++ 241, 1, 0, 56, 191, 0, 32, 0, 224, 0, 32, 17, 176, 189, 232, 240, 143, ++ 72, 194, 135, 0, 248, 181, 208, 248, 4, 53, 0, 36, 159, 105, 37, 70, ++ 207, 25, 1, 38, 166, 64, 240, 178, 255, 247, 122, 250, 1, 70, 56, 70, ++ 227, 243, 194, 244, 8, 177, 53, 67, 237, 178, 1, 52, 4, 44, 240, 209, ++ 40, 70, 248, 189, 3, 106, 211, 248, 16, 33, 154, 177, 209, 248, 252, ++ 48, 179, 249, 210, 0, 217, 106, 2, 235, 0, 18, 208, 137, 80, 177, 146, ++ 137, 66, 177, 74, 67, 130, 66, 40, 191, 2, 70, 88, 106, 218, 98, 65, ++ 26, 138, 24, 90, 98, 112, 71, 45, 233, 248, 67, 5, 70, 177, 248, 90, ++ 0, 12, 70, 145, 70, 232, 247, 230, 250, 0, 40, 108, 208, 153, 248, 131, ++ 96, 22, 240, 1, 6, 104, 208, 79, 240, 0, 8, 79, 70, 70, 70, 90, 224, ++ 151, 248, 139, 48, 180, 248, 90, 32, 1, 43, 2, 209, 81, 6, 76, 212, ++ 3, 224, 2, 43, 1, 209, 18, 6, 73, 212, 180, 248, 90, 32, 80, 4, 9, 213, ++ 3, 43, 2, 209, 18, 240, 64, 15, 3, 224, 4, 43, 2, 209, 18, 240, 128, ++ 15, 59, 209, 33, 104, 9, 104, 145, 248, 102, 17, 233, 177, 18, 240, ++ 160, 15, 26, 208, 8, 43, 14, 209, 213, 248, 80, 8, 33, 70, 26, 240, ++ 215, 254, 64, 177, 213, 248, 80, 8, 33, 70, 26, 240, 220, 254, 40, 179, ++ 35, 109, 153, 5, 34, 212, 151, 248, 139, 48, 2, 43, 5, 209, 213, 248, ++ 80, 8, 33, 70, 26, 240, 221, 254, 192, 185, 151, 248, 139, 48, 5, 43, ++ 7, 209, 180, 248, 90, 48, 19, 244, 130, 95, 12, 191, 0, 38, 1, 38, 13, ++ 224, 6, 43, 11, 209, 180, 248, 90, 48, 72, 242, 128, 6, 30, 64, 0, 54, ++ 24, 191, 1, 38, 2, 224, 30, 70, 0, 224, 1, 38, 8, 241, 1, 8, 1, 55, ++ 153, 248, 138, 48, 152, 69, 4, 218, 0, 46, 158, 208, 1, 38, 0, 224, ++ 6, 70, 48, 70, 189, 232, 248, 131, 45, 233, 247, 79, 76, 141, 156, 70, ++ 79, 246, 56, 115, 0, 44, 8, 191, 28, 70, 36, 178, 177, 248, 50, 144, ++ 111, 240, 199, 3, 4, 234, 228, 116, 156, 66, 184, 191, 28, 70, 9, 244, ++ 64, 73, 144, 248, 12, 49, 185, 245, 64, 79, 20, 191, 79, 240, 2, 9, ++ 79, 240, 1, 9, 75, 69, 5, 70, 14, 70, 208, 248, 8, 161, 164, 178, 14, ++ 209, 0, 42, 46, 208, 144, 248, 13, 49, 83, 177, 34, 178, 65, 50, 7, ++ 219, 91, 178, 228, 24, 36, 178, 4, 234, 228, 116, 164, 178, 0, 224, ++ 2, 179, 213, 248, 244, 48, 91, 142, 3, 244, 64, 67, 179, 245, 64, 79, ++ 20, 191, 2, 35, 1, 35, 75, 69, 20, 208, 213, 248, 252, 32, 146, 248, ++ 216, 48, 123, 177, 146, 249, 209, 16, 34, 178, 145, 66, 10, 220, 91, ++ 178, 228, 24, 36, 178, 4, 234, 228, 116, 111, 240, 199, 2, 148, 66, ++ 184, 191, 20, 70, 164, 178, 79, 240, 0, 8, 87, 70, 195, 70, 41, 224, ++ 59, 120, 2, 43, 14, 208, 3, 43, 15, 208, 1, 43, 22, 209, 99, 70, 40, ++ 70, 49, 70, 34, 178, 205, 248, 4, 192, 28, 240, 53, 216, 221, 248, 4, ++ 192, 12, 224, 150, 248, 186, 0, 9, 224, 154, 248, 224, 0, 48, 177, 192, ++ 235, 9, 3, 88, 66, 64, 235, 3, 0, 0, 224, 0, 32, 187, 120, 1, 34, 18, ++ 250, 3, 243, 1, 59, 24, 64, 123, 120, 147, 68, 152, 64, 4, 55, 128, ++ 68, 218, 248, 20, 48, 155, 69, 209, 219, 67, 185, 40, 70, 49, 70, 34, ++ 178, 99, 70, 3, 176, 189, 232, 240, 79, 28, 240, 12, 152, 64, 70, 3, ++ 176, 189, 232, 240, 143, 45, 233, 247, 79, 208, 248, 0, 160, 7, 70, ++ 1, 145, 208, 248, 252, 96, 21, 70, 218, 248, 204, 68, 79, 240, 0, 11, ++ 67, 224, 115, 107, 11, 43, 10, 209, 160, 104, 7, 241, 188, 1, 6, 34, ++ 224, 247, 118, 255, 24, 185, 40, 70, 29, 240, 201, 223, 6, 224, 56, ++ 70, 161, 104, 1, 34, 43, 29, 255, 247, 71, 255, 40, 96, 1, 155, 67, ++ 179, 150, 248, 61, 48, 43, 179, 243, 108, 27, 179, 177, 70, 79, 240, ++ 0, 8, 28, 224, 10, 33, 1, 251, 8, 97, 160, 104, 98, 49, 6, 34, 224, ++ 247, 87, 255, 120, 185, 162, 104, 185, 248, 96, 48, 80, 142, 0, 147, ++ 227, 243, 124, 245, 0, 155, 131, 66, 5, 209, 185, 248, 104, 48, 19, ++ 177, 40, 70, 29, 240, 157, 223, 8, 241, 1, 8, 9, 241, 10, 9, 243, 108, ++ 152, 69, 223, 219, 11, 241, 1, 11, 8, 53, 4, 52, 218, 248, 204, 52, ++ 27, 104, 155, 69, 182, 219, 189, 232, 254, 143, 45, 233, 248, 67, 4, ++ 70, 136, 70, 6, 104, 208, 248, 240, 112, 0, 37, 26, 224, 170, 28, 83, ++ 248, 34, 144, 184, 241, 0, 15, 11, 208, 153, 248, 8, 48, 58, 122, 154, ++ 66, 14, 209, 9, 241, 9, 0, 7, 241, 9, 1, 224, 247, 26, 255, 56, 185, ++ 74, 70, 214, 248, 200, 6, 33, 70, 146, 248, 131, 48, 66, 240, 172, 222, ++ 1, 53, 214, 248, 16, 51, 26, 104, 149, 66, 223, 211, 148, 248, 92, 48, ++ 27, 185, 180, 248, 90, 48, 154, 6, 6, 213, 214, 248, 200, 6, 33, 70, ++ 189, 232, 248, 67, 66, 240, 70, 158, 189, 232, 248, 131, 248, 181, 4, ++ 104, 7, 122, 1, 114, 35, 104, 5, 70, 147, 249, 82, 48, 14, 70, 51, 177, ++ 49, 185, 208, 248, 92, 3, 16, 48, 9, 240, 234, 216, 4, 224, 25, 177, ++ 32, 70, 0, 33, 5, 240, 15, 254, 35, 104, 147, 248, 60, 48, 187, 177, ++ 213, 248, 148, 51, 25, 7, 19, 212, 38, 185, 32, 70, 41, 70, 58, 240, ++ 27, 221, 13, 224, 213, 248, 40, 35, 213, 248, 244, 48, 32, 70, 41, 70, ++ 26, 185, 90, 142, 10, 240, 192, 251, 2, 224, 90, 142, 58, 240, 68, 223, ++ 47, 114, 40, 70, 22, 185, 11, 240, 135, 221, 3, 224, 148, 248, 38, 18, ++ 13, 240, 40, 219, 46, 114, 0, 33, 212, 248, 104, 34, 132, 248, 112, ++ 18, 132, 248, 115, 18, 83, 88, 123, 177, 152, 121, 104, 185, 24, 122, ++ 88, 177, 148, 248, 112, 2, 1, 48, 132, 248, 112, 2, 27, 124, 35, 185, ++ 148, 248, 115, 50, 1, 51, 132, 248, 115, 50, 4, 49, 32, 41, 234, 209, ++ 212, 248, 112, 34, 35, 104, 18, 240, 255, 31, 12, 191, 0, 34, 1, 34, ++ 131, 248, 63, 32, 34, 104, 35, 106, 146, 248, 63, 32, 24, 105, 210, ++ 241, 1, 2, 56, 191, 0, 34, 12, 240, 44, 252, 32, 70, 13, 240, 207, 223, ++ 132, 248, 113, 2, 40, 70, 24, 240, 202, 217, 40, 70, 240, 247, 74, 250, ++ 40, 70, 11, 240, 64, 216, 1, 70, 40, 70, 236, 247, 201, 251, 32, 70, ++ 41, 70, 50, 70, 5, 240, 43, 252, 35, 104, 147, 248, 173, 48, 83, 177, ++ 148, 248, 114, 50, 59, 177, 148, 248, 112, 50, 35, 185, 32, 70, 189, ++ 232, 248, 64, 29, 240, 64, 158, 248, 189, 16, 181, 208, 248, 252, 48, ++ 1, 104, 147, 248, 81, 32, 234, 185, 208, 248, 244, 0, 176, 249, 42, ++ 64, 88, 109, 36, 26, 147, 248, 92, 0, 0, 44, 184, 191, 100, 66, 132, ++ 66, 16, 219, 1, 32, 131, 248, 81, 0, 131, 248, 61, 32, 90, 98, 10, 106, ++ 210, 248, 240, 0, 10, 48, 194, 248, 240, 0, 210, 248, 244, 0, 5, 56, ++ 194, 248, 244, 0, 147, 248, 81, 32, 18, 179, 179, 248, 88, 32, 179, ++ 248, 90, 0, 1, 50, 146, 178, 144, 66, 163, 248, 88, 32, 24, 210, 0, ++ 34, 131, 248, 81, 32, 90, 101, 163, 248, 88, 32, 11, 106, 211, 248, ++ 240, 16, 211, 248, 252, 32, 145, 66, 11, 221, 211, 248, 244, 32, 211, ++ 248, 0, 1, 130, 66, 5, 210, 10, 57, 5, 50, 195, 248, 240, 16, 195, 248, ++ 244, 32, 16, 189, 45, 233, 240, 67, 135, 176, 14, 70, 7, 70, 21, 70, ++ 255, 247, 114, 253, 4, 70, 182, 248, 90, 0, 227, 243, 174, 246, 48, ++ 177, 149, 248, 111, 48, 219, 7, 2, 213, 5, 241, 111, 4, 41, 224, 182, ++ 248, 90, 0, 232, 247, 80, 248, 56, 177, 149, 248, 131, 48, 216, 7, 3, ++ 213, 20, 177, 5, 241, 131, 4, 28, 224, 182, 248, 90, 48, 179, 245, 128, ++ 111, 2, 208, 179, 245, 0, 111, 6, 209, 149, 248, 151, 48, 217, 7, 2, ++ 213, 5, 241, 151, 4, 13, 224, 0, 35, 8, 34, 0, 147, 1, 146, 2, 147, ++ 3, 147, 4, 147, 56, 70, 49, 70, 23, 34, 43, 70, 3, 240, 253, 218, 210, ++ 224, 51, 109, 90, 5, 4, 213, 149, 248, 131, 32, 16, 7, 64, 241, 203, ++ 128, 149, 248, 131, 32, 209, 6, 2, 213, 154, 5, 64, 241, 196, 128, 32, ++ 70, 31, 240, 176, 253, 51, 109, 0, 234, 3, 8, 214, 248, 140, 48, 83, ++ 177, 230, 243, 92, 243, 214, 248, 144, 16, 30, 240, 150, 222, 1, 40, ++ 2, 209, 0, 35, 198, 248, 140, 48, 24, 240, 4, 15, 29, 208, 163, 120, ++ 97, 120, 1, 43, 4, 209, 227, 120, 19, 185, 4, 41, 0, 240, 166, 128, ++ 4, 41, 5, 209, 32, 70, 84, 240, 210, 220, 0, 40, 64, 240, 162, 128, ++ 214, 248, 140, 144, 185, 241, 0, 15, 64, 240, 134, 128, 99, 120, 0, ++ 43, 0, 240, 130, 128, 32, 70, 4, 33, 92, 224, 24, 240, 2, 15, 21, 208, ++ 214, 248, 140, 48, 0, 43, 119, 209, 163, 120, 98, 120, 1, 43, 4, 209, ++ 227, 120, 19, 185, 2, 42, 0, 240, 129, 128, 0, 42, 108, 208, 32, 70, ++ 2, 33, 84, 240, 172, 220, 0, 40, 124, 209, 101, 224, 24, 240, 1, 9, ++ 69, 208, 214, 248, 140, 48, 0, 43, 94, 209, 182, 248, 90, 48, 8, 43, ++ 90, 209, 163, 120, 1, 43, 6, 209, 227, 120, 35, 185, 98, 120, 8, 58, ++ 210, 178, 2, 42, 98, 217, 99, 120, 155, 177, 32, 70, 9, 33, 84, 240, ++ 142, 220, 129, 70, 0, 40, 93, 209, 32, 70, 8, 33, 84, 240, 135, 220, ++ 128, 70, 0, 40, 88, 209, 32, 70, 10, 33, 84, 240, 128, 220, 0, 40, 78, ++ 209, 163, 120, 1, 43, 9, 209, 148, 248, 3, 144, 185, 241, 0, 15, 4, ++ 209, 99, 120, 1, 43, 71, 208, 5, 43, 69, 208, 99, 120, 0, 43, 42, 208, ++ 32, 70, 5, 33, 84, 240, 106, 220, 129, 70, 0, 40, 57, 209, 32, 70, 1, ++ 33, 84, 240, 99, 220, 0, 40, 53, 209, 28, 224, 24, 244, 128, 127, 9, ++ 208, 32, 70, 11, 33, 84, 240, 89, 220, 75, 70, 160, 177, 98, 120, 11, ++ 42, 17, 209, 39, 224, 214, 248, 140, 48, 99, 185, 163, 120, 1, 43, 9, ++ 209, 148, 248, 3, 144, 185, 241, 0, 15, 4, 209, 99, 120, 1, 43, 25, ++ 208, 5, 43, 23, 208, 0, 35, 149, 248, 50, 32, 0, 147, 1, 36, 2, 146, ++ 3, 147, 4, 147, 56, 70, 49, 70, 23, 34, 43, 70, 1, 148, 3, 240, 42, ++ 218, 8, 224, 1, 36, 6, 224, 28, 70, 4, 224, 68, 70, 2, 224, 0, 36, 0, ++ 224, 76, 70, 32, 70, 7, 176, 189, 232, 240, 131, 45, 233, 240, 79, 6, ++ 104, 4, 70, 214, 248, 204, 52, 208, 248, 252, 0, 135, 176, 3, 144, 24, ++ 104, 15, 70, 192, 0, 1, 146, 230, 243, 138, 246, 5, 70, 0, 40, 0, 240, ++ 232, 128, 32, 70, 57, 70, 42, 70, 214, 248, 204, 148, 255, 247, 83, ++ 253, 32, 70, 41, 70, 29, 240, 183, 219, 0, 47, 0, 240, 215, 128, 212, ++ 248, 244, 32, 32, 70, 2, 146, 3, 240, 12, 217, 40, 177, 32, 70, 2, 153, ++ 0, 34, 4, 171, 255, 247, 168, 252, 128, 70, 32, 70, 3, 240, 1, 217, ++ 56, 177, 3, 152, 67, 107, 1, 43, 3, 209, 51, 106, 211, 248, 244, 176, ++ 6, 224, 32, 70, 3, 240, 245, 216, 0, 35, 4, 147, 152, 70, 155, 70, 214, ++ 248, 204, 52, 27, 104, 3, 241, 1, 10, 9, 235, 138, 10, 95, 30, 35, 70, ++ 84, 70, 194, 70, 152, 70, 35, 224, 84, 248, 4, 9, 8, 241, 188, 1, 6, ++ 34, 224, 247, 164, 252, 208, 185, 99, 104, 88, 142, 227, 243, 172, 242, ++ 2, 154, 3, 70, 80, 142, 0, 147, 227, 243, 166, 242, 0, 155, 131, 66, ++ 13, 209, 5, 235, 199, 3, 91, 104, 68, 70, 85, 248, 55, 128, 2, 55, 4, ++ 147, 89, 248, 39, 48, 179, 249, 42, 48, 1, 147, 4, 224, 1, 63, 0, 47, ++ 217, 218, 68, 70, 208, 70, 3, 152, 67, 107, 154, 31, 1, 42, 1, 217, ++ 11, 43, 2, 209, 0, 35, 4, 147, 152, 70, 48, 70, 33, 70, 0, 34, 32, 240, ++ 33, 219, 120, 185, 51, 106, 1, 154, 211, 248, 240, 48, 154, 66, 9, 220, ++ 187, 241, 10, 15, 6, 217, 211, 26, 155, 68, 187, 241, 10, 15, 184, 191, ++ 79, 240, 10, 11, 214, 248, 204, 52, 0, 39, 27, 104, 17, 224, 85, 248, ++ 55, 16, 11, 235, 8, 2, 145, 66, 10, 217, 79, 240, 0, 8, 205, 248, 4, ++ 176, 194, 70, 179, 70, 38, 70, 76, 70, 169, 70, 61, 70, 65, 224, 1, ++ 55, 159, 66, 235, 219, 240, 231, 48, 70, 3, 240, 127, 216, 24, 179, ++ 4, 235, 133, 3, 67, 68, 153, 104, 2, 152, 74, 142, 67, 142, 2, 244, ++ 64, 66, 3, 244, 64, 67, 178, 245, 64, 79, 20, 191, 2, 34, 1, 34, 179, ++ 245, 64, 79, 20, 191, 2, 35, 1, 35, 154, 66, 12, 209, 0, 34, 6, 171, ++ 67, 248, 4, 45, 48, 70, 255, 247, 3, 252, 1, 154, 4, 155, 211, 24, 5, ++ 154, 154, 66, 18, 217, 9, 235, 197, 3, 83, 248, 24, 48, 10, 241, 2, ++ 2, 73, 248, 58, 48, 4, 235, 133, 3, 67, 68, 84, 248, 34, 16, 152, 104, ++ 10, 241, 1, 10, 68, 248, 34, 0, 153, 96, 1, 55, 8, 241, 4, 8, 219, 248, ++ 204, 52, 27, 104, 159, 66, 188, 219, 94, 70, 77, 70, 198, 248, 208, ++ 164, 40, 70, 233, 247, 175, 251, 7, 176, 189, 232, 240, 143, 240, 181, ++ 4, 106, 209, 248, 252, 48, 212, 248, 16, 81, 0, 45, 81, 208, 209, 248, ++ 0, 17, 179, 248, 210, 96, 209, 248, 16, 192, 194, 185, 144, 248, 8, ++ 118, 212, 248, 240, 16, 121, 24, 140, 69, 49, 178, 3, 219, 0, 41, 1, ++ 221, 113, 30, 13, 224, 5, 235, 1, 23, 151, 249, 2, 112, 23, 241, 128, ++ 15, 55, 208, 188, 69, 53, 218, 2, 41, 51, 220, 113, 28, 0, 224, 0, 33, ++ 163, 248, 210, 16, 9, 178, 14, 1, 169, 25, 173, 93, 94, 106, 21, 240, ++ 2, 15, 147, 248, 191, 80, 20, 191, 101, 240, 127, 5, 5, 240, 127, 5, ++ 131, 248, 191, 80, 145, 249, 1, 80, 196, 248, 240, 80, 145, 249, 3, ++ 80, 196, 248, 244, 80, 220, 106, 77, 137, 52, 27, 44, 25, 205, 136, ++ 131, 248, 140, 80, 13, 137, 73, 137, 29, 99, 217, 98, 36, 234, 228, ++ 113, 89, 98, 58, 177, 2, 104, 210, 105, 210, 248, 248, 32, 145, 66, ++ 44, 191, 89, 98, 90, 98, 240, 189, 112, 181, 146, 248, 131, 64, 157, ++ 248, 20, 80, 20, 240, 1, 0, 20, 208, 146, 248, 138, 0, 0, 33, 9, 224, ++ 86, 24, 150, 248, 139, 96, 158, 66, 3, 209, 61, 177, 20, 240, 8, 15, ++ 6, 209, 1, 49, 129, 66, 243, 219, 0, 32, 112, 189, 1, 32, 112, 189, ++ 1, 32, 112, 189, 45, 233, 240, 79, 203, 136, 141, 176, 155, 6, 5, 70, ++ 14, 70, 4, 104, 208, 248, 248, 112, 208, 248, 252, 176, 208, 248, 240, ++ 144, 68, 213, 3, 109, 154, 7, 18, 213, 91, 7, 11, 213, 1, 241, 111, ++ 0, 4, 33, 84, 240, 149, 218, 200, 185, 6, 241, 131, 0, 4, 33, 84, 240, ++ 143, 218, 152, 185, 148, 248, 49, 53, 19, 240, 2, 15, 13, 224, 216, ++ 7, 12, 213, 145, 248, 111, 48, 218, 7, 8, 212, 145, 248, 131, 48, 219, ++ 7, 4, 212, 148, 248, 49, 53, 19, 240, 1, 15, 2, 209, 149, 248, 37, 51, ++ 227, 177, 243, 136, 112, 142, 35, 244, 102, 99, 243, 128, 227, 243, ++ 82, 241, 64, 244, 128, 80, 31, 250, 128, 248, 112, 142, 227, 243, 75, ++ 241, 182, 248, 190, 48, 14, 40, 140, 191, 79, 244, 64, 64, 0, 32, 72, ++ 234, 0, 8, 35, 240, 10, 3, 166, 248, 50, 128, 166, 248, 190, 48, 32, ++ 70, 41, 70, 114, 142, 22, 35, 28, 240, 10, 219, 0, 40, 64, 240, 27, ++ 131, 115, 142, 32, 70, 19, 244, 64, 79, 12, 191, 0, 34, 1, 34, 10, 50, ++ 84, 248, 34, 32, 9, 146, 17, 70, 42, 70, 9, 240, 210, 218, 255, 40, ++ 128, 70, 0, 240, 8, 131, 148, 248, 116, 50, 67, 240, 4, 3, 132, 248, ++ 116, 50, 35, 104, 147, 248, 60, 48, 59, 177, 32, 70, 41, 70, 66, 70, ++ 9, 240, 247, 255, 0, 40, 64, 240, 246, 130, 35, 106, 24, 105, 12, 240, ++ 30, 249, 64, 69, 77, 208, 35, 106, 24, 105, 12, 240, 24, 249, 227, 243, ++ 2, 241, 130, 70, 64, 70, 227, 243, 254, 240, 130, 69, 9, 209, 35, 106, ++ 24, 105, 12, 240, 12, 249, 8, 244, 96, 83, 0, 244, 96, 80, 152, 66, ++ 55, 220, 123, 104, 2, 43, 10, 209, 185, 248, 190, 48, 216, 7, 6, 213, ++ 187, 104, 24, 43, 3, 208, 219, 248, 52, 48, 4, 43, 41, 209, 212, 248, ++ 92, 1, 65, 70, 45, 240, 203, 217, 32, 70, 13, 240, 156, 223, 123, 104, ++ 2, 43, 8, 209, 181, 249, 84, 48, 43, 185, 212, 248, 192, 6, 41, 70, ++ 50, 70, 48, 240, 142, 222, 32, 70, 65, 70, 12, 240, 94, 220, 35, 104, ++ 147, 248, 60, 48, 75, 177, 213, 248, 40, 51, 89, 104, 212, 248, 168, ++ 53, 153, 66, 2, 208, 32, 70, 10, 240, 144, 219, 32, 70, 7, 240, 49, ++ 223, 15, 224, 212, 248, 92, 1, 65, 70, 45, 240, 177, 222, 72, 177, 212, ++ 248, 92, 1, 65, 70, 45, 240, 155, 217, 0, 33, 32, 70, 10, 70, 9, 240, ++ 96, 219, 35, 104, 147, 248, 60, 48, 147, 177, 213, 248, 40, 51, 90, ++ 104, 212, 248, 168, 53, 154, 66, 11, 208, 32, 70, 13, 240, 92, 223, ++ 213, 248, 40, 51, 32, 70, 89, 104, 10, 240, 104, 219, 32, 70, 7, 240, ++ 9, 223, 9, 153, 79, 244, 146, 114, 80, 49, 11, 145, 72, 70, 49, 70, ++ 224, 247, 144, 250, 9, 154, 169, 248, 50, 128, 19, 104, 2, 43, 7, 209, ++ 146, 248, 21, 128, 216, 241, 1, 8, 56, 191, 79, 240, 0, 8, 1, 224, 79, ++ 240, 0, 8, 243, 136, 19, 240, 32, 3, 13, 208, 35, 104, 147, 248, 79, ++ 48, 19, 240, 3, 3, 7, 208, 213, 248, 204, 48, 3, 244, 128, 83, 211, ++ 241, 1, 3, 56, 191, 0, 35, 219, 178, 9, 241, 56, 10, 10, 147, 255, 34, ++ 184, 241, 0, 15, 24, 191, 0, 35, 141, 232, 12, 0, 80, 70, 81, 70, 0, ++ 34, 67, 70, 22, 240, 25, 255, 212, 248, 116, 52, 80, 70, 11, 153, 1, ++ 34, 155, 120, 22, 240, 185, 253, 0, 40, 48, 209, 9, 155, 26, 137, 27, ++ 104, 184, 241, 0, 15, 7, 209, 32, 70, 65, 70, 8, 146, 7, 147, 8, 240, ++ 69, 217, 8, 154, 7, 155, 185, 248, 50, 16, 1, 244, 96, 81, 177, 245, ++ 32, 95, 8, 208, 177, 245, 192, 95, 7, 208, 177, 245, 128, 95, 20, 191, ++ 10, 33, 20, 33, 2, 224, 160, 33, 0, 224, 40, 33, 79, 240, 255, 14, 2, ++ 144, 205, 248, 0, 128, 205, 248, 4, 224, 3, 145, 212, 248, 116, 20, ++ 80, 70, 9, 121, 4, 145, 11, 153, 22, 240, 92, 255, 213, 248, 204, 48, ++ 153, 4, 12, 213, 41, 70, 32, 70, 8, 240, 24, 217, 255, 35, 0, 147, 1, ++ 144, 81, 70, 80, 70, 0, 34, 2, 35, 22, 240, 205, 254, 32, 70, 81, 70, ++ 10, 240, 147, 221, 150, 249, 52, 32, 32, 70, 0, 50, 41, 70, 24, 191, ++ 1, 34, 4, 240, 60, 251, 150, 249, 52, 48, 227, 185, 213, 248, 244, 48, ++ 1, 34, 131, 248, 96, 32, 212, 248, 72, 1, 41, 70, 10, 240, 112, 253, ++ 40, 70, 49, 70, 27, 240, 113, 220, 40, 70, 14, 33, 0, 240, 53, 255, ++ 41, 70, 32, 70, 38, 240, 139, 216, 32, 70, 41, 70, 122, 104, 187, 104, ++ 36, 240, 109, 221, 194, 225, 213, 248, 204, 48, 154, 4, 5, 213, 212, ++ 248, 80, 1, 41, 70, 74, 70, 64, 240, 132, 216, 32, 70, 41, 70, 50, 70, ++ 27, 240, 86, 250, 128, 70, 56, 185, 32, 70, 41, 70, 58, 70, 13, 176, ++ 189, 232, 240, 79, 28, 240, 205, 153, 10, 153, 65, 179, 217, 248, 104, ++ 48, 185, 248, 108, 144, 12, 51, 169, 241, 12, 9, 25, 70, 74, 70, 32, ++ 70, 7, 147, 51, 240, 96, 223, 7, 155, 9, 144, 25, 70, 74, 70, 32, 70, ++ 51, 240, 47, 223, 34, 104, 132, 70, 146, 249, 82, 0, 7, 155, 64, 177, ++ 32, 70, 25, 70, 74, 70, 205, 248, 32, 192, 50, 240, 128, 223, 221, 248, ++ 32, 192, 0, 144, 65, 70, 32, 70, 9, 154, 99, 70, 10, 224, 67, 104, 219, ++ 3, 9, 213, 243, 136, 152, 6, 6, 212, 10, 154, 32, 70, 0, 146, 65, 70, ++ 19, 70, 238, 247, 245, 252, 216, 248, 4, 48, 213, 248, 204, 32, 67, ++ 244, 128, 83, 200, 248, 4, 48, 79, 240, 127, 3, 0, 147, 10, 155, 18, ++ 244, 0, 82, 8, 241, 76, 1, 1, 147, 80, 70, 2, 208, 0, 34, 2, 35, 0, ++ 224, 19, 70, 22, 240, 54, 254, 32, 70, 65, 70, 27, 240, 24, 251, 32, ++ 70, 41, 70, 26, 240, 184, 223, 152, 248, 36, 48, 19, 240, 12, 15, 64, ++ 240, 69, 129, 181, 249, 84, 160, 35, 104, 197, 248, 236, 160, 147, 248, ++ 102, 49, 0, 43, 91, 208, 181, 248, 90, 48, 25, 6, 5, 213, 212, 248, ++ 80, 8, 41, 70, 25, 240, 214, 255, 24, 185, 181, 248, 90, 48, 154, 6, ++ 60, 213, 0, 35, 41, 70, 197, 248, 236, 48, 212, 248, 80, 8, 25, 240, ++ 187, 255, 41, 70, 130, 70, 212, 248, 80, 8, 25, 240, 170, 255, 136, ++ 177, 79, 240, 32, 9, 32, 70, 41, 70, 50, 70, 8, 35, 141, 232, 0, 6, ++ 255, 247, 136, 253, 48, 177, 3, 35, 197, 248, 236, 48, 165, 248, 90, ++ 144, 154, 70, 27, 224, 212, 248, 80, 8, 41, 70, 25, 240, 171, 255, 160, ++ 177, 79, 240, 128, 10, 79, 240, 0, 9, 32, 70, 41, 70, 50, 70, 2, 35, ++ 205, 248, 0, 160, 205, 248, 4, 144, 255, 247, 108, 253, 40, 177, 165, ++ 248, 90, 160, 197, 248, 236, 144, 202, 70, 0, 224, 130, 70, 213, 248, ++ 236, 48, 3, 43, 12, 209, 212, 248, 200, 6, 41, 70, 50, 70, 181, 248, ++ 90, 48, 21, 240, 99, 252, 24, 177, 0, 35, 197, 248, 236, 48, 154, 70, ++ 215, 248, 4, 144, 185, 241, 2, 15, 29, 209, 186, 241, 0, 15, 26, 209, ++ 212, 248, 192, 6, 41, 70, 50, 70, 48, 240, 201, 220, 152, 177, 213, ++ 248, 244, 0, 231, 247, 48, 249, 112, 185, 212, 248, 188, 6, 41, 70, ++ 50, 70, 197, 248, 236, 144, 75, 240, 161, 222, 212, 248, 192, 6, 41, ++ 70, 50, 70, 48, 240, 247, 222, 202, 70, 12, 33, 64, 70, 72, 240, 238, ++ 221, 123, 104, 2, 43, 45, 209, 219, 248, 52, 48, 9, 59, 1, 43, 40, 216, ++ 91, 70, 212, 70, 163, 70, 186, 70, 79, 240, 0, 9, 31, 70, 28, 70, 23, ++ 224, 10, 32, 0, 251, 9, 64, 213, 248, 244, 16, 98, 48, 6, 34, 205, 248, ++ 32, 192, 224, 247, 177, 248, 221, 248, 32, 192, 48, 185, 79, 244, 150, ++ 113, 1, 34, 167, 248, 104, 16, 132, 248, 80, 32, 9, 241, 1, 9, 10, 55, ++ 226, 108, 145, 69, 228, 211, 35, 70, 87, 70, 92, 70, 226, 70, 155, 70, ++ 35, 104, 147, 248, 102, 49, 147, 177, 213, 248, 236, 48, 3, 43, 14, ++ 209, 212, 248, 80, 8, 41, 70, 66, 70, 51, 70, 26, 240, 189, 251, 48, ++ 177, 40, 70, 8, 33, 13, 176, 189, 232, 240, 79, 0, 240, 222, 189, 123, ++ 104, 2, 43, 51, 209, 43, 122, 0, 43, 48, 208, 186, 241, 2, 15, 45, 209, ++ 182, 248, 190, 48, 219, 7, 41, 213, 219, 248, 52, 48, 4, 43, 37, 208, ++ 187, 104, 24, 43, 34, 208, 40, 70, 10, 240, 47, 218, 24, 177, 40, 70, ++ 0, 33, 242, 247, 77, 249, 40, 70, 24, 33, 0, 240, 190, 253, 216, 248, ++ 12, 48, 212, 248, 192, 6, 213, 248, 244, 32, 27, 177, 25, 105, 0, 41, ++ 8, 191, 0, 35, 0, 147, 182, 248, 98, 48, 41, 70, 195, 243, 64, 19, 1, ++ 147, 67, 70, 48, 240, 211, 221, 6, 70, 41, 224, 40, 70, 8, 33, 0, 240, ++ 163, 253, 79, 240, 0, 9, 205, 248, 0, 160, 79, 240, 1, 10, 205, 248, ++ 4, 160, 205, 248, 8, 144, 205, 248, 12, 144, 205, 248, 16, 144, 182, ++ 248, 98, 48, 50, 70, 195, 243, 64, 19, 5, 147, 8, 241, 20, 1, 67, 70, ++ 40, 70, 243, 247, 167, 250, 81, 70, 6, 70, 32, 70, 4, 240, 85, 255, ++ 160, 104, 57, 104, 79, 244, 150, 114, 75, 70, 246, 243, 245, 247, 70, ++ 177, 212, 248, 120, 4, 12, 73, 181, 248, 26, 33, 51, 70, 64, 240, 98, ++ 223, 11, 224, 160, 104, 57, 104, 79, 244, 155, 114, 51, 70, 3, 224, ++ 0, 34, 160, 104, 57, 104, 19, 70, 246, 243, 223, 247, 187, 127, 1, 51, ++ 187, 119, 13, 176, 189, 232, 240, 143, 0, 191, 201, 66, 2, 0, 45, 233, ++ 240, 79, 137, 176, 154, 70, 18, 155, 6, 41, 4, 70, 136, 70, 6, 146, ++ 7, 147, 5, 104, 208, 248, 248, 112, 208, 248, 240, 144, 0, 240, 11, ++ 129, 187, 104, 24, 43, 0, 242, 7, 129, 132, 73, 153, 64, 64, 241, 3, ++ 129, 74, 177, 40, 70, 33, 70, 26, 240, 194, 255, 6, 70, 32, 177, 12, ++ 33, 72, 240, 167, 218, 0, 224, 6, 158, 184, 241, 2, 15, 0, 240, 46, ++ 129, 40, 70, 33, 70, 26, 240, 49, 222, 184, 241, 0, 15, 55, 209, 48, ++ 70, 9, 33, 135, 248, 73, 128, 72, 240, 240, 220, 115, 104, 185, 248, ++ 98, 32, 35, 240, 4, 3, 146, 6, 115, 96, 68, 191, 67, 240, 4, 3, 115, ++ 96, 115, 104, 32, 70, 67, 244, 128, 83, 115, 96, 11, 33, 0, 240, 21, ++ 253, 35, 122, 33, 70, 0, 147, 50, 70, 40, 70, 75, 70, 27, 240, 91, 219, ++ 33, 70, 6, 70, 40, 70, 26, 240, 8, 222, 70, 177, 213, 248, 120, 4, 99, ++ 73, 180, 248, 26, 33, 51, 70, 64, 240, 237, 222, 187, 224, 168, 104, ++ 57, 104, 79, 244, 155, 114, 51, 70, 246, 243, 111, 247, 188, 224, 184, ++ 241, 5, 15, 53, 209, 185, 248, 190, 48, 216, 7, 15, 213, 187, 104, 24, ++ 43, 12, 209, 213, 248, 208, 36, 213, 248, 204, 52, 2, 50, 83, 248, 34, ++ 16, 32, 70, 9, 176, 189, 232, 240, 79, 255, 247, 3, 188, 212, 248, 204, ++ 48, 153, 4, 64, 241, 211, 128, 151, 248, 73, 48, 90, 28, 3, 43, 135, ++ 248, 73, 32, 0, 242, 203, 128, 213, 248, 208, 36, 213, 248, 204, 52, ++ 2, 50, 65, 246, 88, 48, 83, 248, 34, 128, 229, 243, 111, 246, 32, 70, ++ 8, 33, 0, 240, 195, 252, 180, 249, 84, 48, 0, 147, 1, 35, 1, 147, 85, ++ 224, 184, 241, 1, 15, 119, 209, 163, 110, 48, 70, 90, 28, 26, 191, 4, ++ 235, 131, 3, 211, 248, 108, 176, 79, 240, 0, 11, 1, 33, 72, 240, 25, ++ 218, 0, 35, 135, 248, 73, 48, 180, 248, 90, 48, 88, 4, 16, 213, 186, ++ 241, 28, 15, 2, 208, 186, 241, 53, 15, 10, 209, 213, 248, 192, 6, 33, ++ 70, 7, 240, 144, 252, 186, 241, 28, 15, 2, 209, 32, 70, 28, 240, 151, ++ 223, 180, 249, 86, 48, 0, 43, 86, 208, 212, 248, 236, 48, 0, 43, 82, ++ 209, 186, 241, 13, 15, 79, 209, 185, 248, 98, 48, 217, 6, 75, 213, 35, ++ 109, 218, 7, 72, 213, 187, 241, 0, 15, 69, 208, 155, 248, 8, 48, 1, ++ 43, 1, 208, 3, 43, 63, 209, 213, 248, 208, 36, 213, 248, 204, 52, 2, ++ 50, 79, 240, 1, 9, 83, 248, 34, 128, 32, 70, 196, 248, 236, 144, 8, ++ 33, 0, 240, 107, 252, 212, 248, 236, 48, 141, 232, 8, 2, 0, 35, 2, 147, ++ 3, 147, 4, 147, 184, 248, 98, 48, 32, 70, 195, 243, 64, 19, 5, 147, ++ 6, 241, 20, 1, 51, 70, 66, 70, 243, 247, 117, 249, 3, 70, 72, 177, 213, ++ 248, 120, 4, 11, 73, 180, 248, 26, 33, 9, 176, 189, 232, 240, 79, 64, ++ 240, 57, 158, 168, 104, 57, 104, 79, 244, 155, 114, 9, 176, 189, 232, ++ 240, 79, 246, 243, 186, 182, 0, 38, 6, 224, 128, 0, 160, 0, 41, 250, ++ 131, 0, 201, 66, 2, 0, 1, 38, 212, 248, 252, 48, 147, 248, 60, 48, 59, ++ 177, 184, 241, 0, 15, 4, 209, 32, 70, 6, 153, 4, 240, 240, 250, 96, ++ 185, 7, 155, 40, 70, 2, 147, 0, 35, 3, 147, 4, 147, 33, 70, 3, 34, 6, ++ 155, 141, 232, 0, 5, 2, 240, 231, 219, 0, 46, 25, 208, 184, 241, 5, ++ 15, 2, 208, 184, 241, 2, 15, 9, 209, 186, 127, 59, 127, 154, 66, 5, ++ 210, 32, 70, 9, 176, 189, 232, 240, 79, 27, 240, 51, 158, 32, 70, 9, ++ 176, 189, 232, 240, 79, 0, 240, 165, 191, 0, 35, 135, 248, 73, 48, 200, ++ 231, 9, 176, 189, 232, 240, 143, 45, 233, 240, 79, 155, 70, 5, 104, ++ 208, 248, 240, 48, 137, 176, 4, 147, 43, 104, 4, 70, 147, 248, 63, 48, ++ 5, 145, 145, 70, 208, 248, 248, 96, 208, 248, 244, 112, 0, 43, 0, 240, ++ 89, 129, 3, 122, 0, 43, 0, 240, 85, 129, 3, 124, 6, 168, 19, 177, 4, ++ 241, 216, 1, 0, 224, 57, 70, 6, 34, 223, 247, 151, 254, 43, 104, 147, ++ 248, 69, 48, 27, 177, 213, 248, 100, 1, 41, 240, 253, 217, 34, 124, ++ 213, 248, 72, 1, 33, 70, 26, 177, 0, 34, 58, 240, 131, 221, 1, 224, ++ 10, 240, 253, 249, 40, 105, 49, 240, 171, 220, 160, 177, 32, 70, 0, ++ 33, 254, 247, 110, 255, 32, 70, 1, 33, 29, 240, 214, 222, 35, 124, 32, ++ 70, 211, 241, 1, 3, 56, 191, 0, 35, 0, 147, 0, 33, 6, 170, 8, 35, 30, ++ 240, 10, 216, 28, 225, 35, 124, 0, 43, 0, 240, 158, 128, 179, 104, 35, ++ 177, 16, 43, 2, 208, 32, 70, 28, 240, 168, 222, 6, 174, 50, 70, 33, ++ 70, 40, 70, 26, 240, 34, 254, 79, 240, 0, 10, 81, 70, 128, 70, 132, ++ 248, 148, 160, 32, 70, 13, 240, 133, 223, 81, 70, 32, 70, 10, 240, 77, ++ 216, 32, 70, 81, 70, 1, 240, 195, 221, 5, 155, 0, 43, 100, 208, 4, 241, ++ 188, 0, 230, 247, 126, 254, 0, 40, 94, 209, 213, 248, 92, 1, 121, 142, ++ 45, 240, 95, 218, 48, 185, 213, 248, 92, 1, 121, 142, 45, 240, 197, ++ 218, 0, 40, 41, 208, 185, 241, 0, 15, 78, 209, 213, 248, 92, 1, 121, ++ 142, 45, 240, 33, 218, 0, 40, 71, 209, 43, 106, 126, 142, 24, 105, 11, ++ 240, 50, 252, 134, 66, 64, 209, 4, 241, 194, 2, 1, 146, 8, 34, 6, 171, ++ 2, 146, 40, 70, 33, 70, 66, 70, 0, 147, 11, 240, 172, 219, 3, 70, 0, ++ 40, 49, 208, 213, 248, 120, 4, 101, 73, 74, 70, 64, 240, 65, 221, 6, ++ 28, 24, 191, 1, 38, 40, 224, 43, 106, 183, 248, 50, 160, 24, 105, 11, ++ 240, 17, 252, 130, 69, 31, 209, 4, 241, 194, 3, 1, 147, 8, 35, 2, 147, ++ 40, 70, 51, 70, 33, 70, 66, 70, 0, 150, 11, 240, 139, 219, 6, 70, 136, ++ 177, 185, 241, 0, 15, 14, 208, 213, 248, 120, 4, 73, 70, 90, 70, 51, ++ 70, 64, 240, 29, 221, 48, 185, 148, 248, 68, 48, 129, 70, 134, 248, ++ 33, 48, 1, 38, 0, 224, 1, 38, 184, 241, 0, 15, 24, 208, 64, 70, 14, ++ 33, 72, 240, 139, 216, 43, 104, 147, 248, 69, 48, 35, 177, 213, 248, ++ 100, 1, 65, 70, 41, 240, 76, 217, 65, 70, 40, 70, 10, 240, 186, 222, ++ 79, 240, 0, 8, 4, 224, 32, 70, 8, 240, 0, 216, 1, 38, 176, 70, 33, 70, ++ 1, 34, 40, 70, 3, 240, 247, 254, 32, 70, 0, 33, 254, 247, 173, 254, ++ 43, 104, 147, 248, 63, 48, 43, 185, 149, 249, 99, 36, 1, 50, 8, 191, ++ 133, 248, 98, 52, 213, 248, 108, 4, 33, 70, 66, 240, 132, 219, 43, 104, ++ 147, 248, 79, 48, 154, 7, 4, 208, 213, 248, 112, 4, 33, 70, 67, 240, ++ 162, 216, 4, 241, 188, 10, 80, 70, 230, 247, 217, 253, 1, 70, 48, 185, ++ 32, 70, 6, 170, 8, 35, 205, 248, 0, 128, 29, 240, 50, 223, 149, 248, ++ 114, 50, 32, 70, 59, 185, 213, 248, 108, 50, 156, 66, 3, 209, 49, 70, ++ 29, 240, 231, 221, 4, 224, 2, 240, 200, 221, 32, 70, 2, 240, 129, 217, ++ 184, 110, 40, 177, 232, 247, 28, 253, 0, 35, 187, 102, 167, 248, 108, ++ 48, 2, 35, 0, 38, 0, 147, 40, 70, 0, 33, 6, 170, 35, 70, 238, 247, 35, ++ 248, 33, 70, 50, 70, 51, 70, 40, 70, 0, 150, 54, 240, 151, 219, 32, ++ 70, 54, 240, 254, 218, 40, 70, 33, 70, 50, 70, 51, 70, 36, 240, 234, ++ 216, 40, 70, 10, 240, 105, 216, 185, 241, 0, 15, 3, 208, 40, 70, 49, ++ 70, 90, 70, 200, 71, 0, 33, 6, 34, 4, 152, 225, 243, 211, 240, 80, 70, ++ 0, 33, 6, 34, 225, 243, 206, 240, 0, 32, 1, 224, 79, 240, 255, 48, 9, ++ 176, 189, 232, 240, 143, 0, 191, 105, 216, 131, 0, 240, 181, 209, 176, ++ 12, 70, 79, 244, 146, 114, 209, 248, 240, 16, 5, 70, 7, 168, 223, 247, ++ 57, 253, 7, 168, 4, 241, 188, 1, 6, 34, 223, 247, 51, 253, 7, 168, 230, ++ 247, 108, 253, 96, 177, 40, 70, 7, 169, 6, 34, 7, 240, 84, 221, 157, ++ 248, 28, 48, 67, 240, 2, 3, 35, 240, 1, 3, 141, 248, 28, 48, 5, 245, ++ 82, 118, 48, 70, 230, 247, 89, 253, 32, 185, 7, 168, 49, 70, 6, 34, ++ 223, 247, 23, 253, 0, 33, 32, 34, 13, 241, 37, 0, 141, 248, 80, 16, ++ 225, 243, 143, 240, 34, 126, 13, 241, 37, 0, 141, 248, 36, 32, 4, 241, ++ 25, 1, 31, 42, 136, 191, 32, 34, 223, 247, 3, 253, 189, 248, 78, 48, ++ 19, 244, 64, 79, 12, 191, 0, 34, 1, 34, 3, 244, 96, 83, 10, 50, 179, ++ 245, 192, 95, 85, 248, 34, 96, 29, 209, 43, 104, 147, 248, 79, 48, 154, ++ 7, 10, 208, 213, 248, 92, 1, 113, 104, 44, 240, 10, 219, 3, 7, 3, 212, ++ 150, 248, 236, 48, 152, 7, 13, 212, 189, 248, 78, 0, 226, 243, 218, ++ 242, 64, 244, 128, 83, 14, 40, 140, 191, 79, 244, 64, 64, 0, 32, 24, ++ 67, 173, 248, 78, 0, 213, 248, 92, 1, 189, 248, 78, 16, 45, 240, 88, ++ 218, 48, 177, 213, 248, 92, 1, 189, 248, 78, 16, 45, 240, 191, 216, ++ 160, 177, 1, 34, 213, 248, 92, 1, 189, 248, 78, 16, 19, 70, 45, 240, ++ 70, 216, 255, 40, 8, 209, 32, 70, 3, 33, 7, 170, 1, 35, 28, 240, 118, ++ 218, 79, 240, 255, 48, 147, 224, 173, 248, 78, 0, 43, 106, 147, 248, ++ 236, 16, 17, 240, 2, 1, 18, 208, 189, 248, 78, 16, 1, 244, 96, 81, 177, ++ 245, 32, 95, 8, 208, 177, 245, 192, 95, 7, 208, 177, 245, 128, 95, 20, ++ 191, 10, 33, 20, 33, 2, 224, 160, 33, 0, 224, 40, 33, 21, 168, 22, 240, ++ 199, 249, 34, 109, 64, 242, 55, 19, 19, 64, 67, 177, 148, 248, 88, 48, ++ 43, 177, 189, 248, 126, 48, 67, 240, 16, 3, 173, 248, 126, 48, 189, ++ 248, 126, 48, 0, 34, 67, 240, 2, 3, 173, 248, 126, 48, 212, 248, 244, ++ 48, 173, 248, 76, 32, 26, 134, 212, 248, 240, 48, 40, 70, 26, 134, 13, ++ 240, 49, 217, 34, 70, 7, 169, 1, 35, 40, 70, 1, 240, 197, 216, 40, 70, ++ 7, 240, 222, 216, 212, 248, 252, 48, 1, 38, 158, 113, 212, 248, 252, ++ 48, 32, 70, 131, 248, 137, 96, 49, 70, 254, 247, 84, 253, 212, 248, ++ 244, 48, 33, 70, 131, 248, 96, 96, 213, 248, 72, 1, 50, 70, 9, 240, ++ 209, 255, 40, 70, 33, 70, 37, 240, 244, 218, 43, 104, 91, 107, 99, 177, ++ 212, 248, 204, 48, 153, 7, 8, 212, 67, 244, 128, 115, 196, 248, 204, ++ 48, 40, 70, 33, 70, 50, 70, 7, 240, 130, 216, 212, 248, 248, 48, 40, ++ 70, 90, 104, 33, 70, 155, 104, 35, 240, 196, 223, 0, 38, 1, 39, 40, ++ 70, 33, 70, 2, 34, 7, 171, 0, 150, 1, 150, 2, 151, 3, 150, 4, 150, 2, ++ 240, 61, 217, 40, 70, 57, 70, 7, 170, 35, 70, 0, 150, 237, 247, 217, ++ 254, 32, 70, 49, 70, 7, 170, 59, 70, 28, 240, 224, 217, 48, 70, 81, ++ 176, 240, 189, 0, 0, 45, 233, 247, 79, 137, 70, 208, 248, 104, 18, 5, ++ 70, 20, 70, 0, 35, 202, 88, 10, 177, 162, 66, 3, 208, 4, 51, 32, 43, ++ 248, 209, 80, 225, 212, 248, 248, 128, 212, 248, 252, 112, 216, 248, ++ 4, 96, 212, 248, 240, 48, 183, 248, 218, 32, 22, 241, 255, 54, 1, 147, ++ 24, 191, 1, 38, 50, 177, 138, 73, 40, 70, 8, 240, 60, 217, 0, 33, 167, ++ 248, 218, 16, 123, 106, 10, 43, 56, 191, 10, 35, 123, 98, 185, 241, ++ 0, 15, 7, 209, 215, 248, 204, 0, 208, 177, 232, 247, 135, 251, 199, ++ 248, 204, 144, 21, 224, 46, 177, 185, 241, 4, 15, 2, 209, 0, 35, 135, ++ 248, 189, 48, 1, 154, 146, 249, 52, 48, 1, 43, 2, 208, 185, 241, 12, ++ 15, 6, 208, 185, 241, 4, 15, 0, 240, 23, 129, 32, 70, 73, 70, 14, 225, ++ 180, 248, 90, 48, 154, 6, 3, 212, 88, 6, 5, 213, 89, 4, 3, 212, 32, ++ 70, 0, 33, 254, 247, 126, 252, 212, 248, 8, 49, 107, 177, 211, 248, ++ 220, 48, 83, 177, 32, 70, 213, 248, 16, 19, 213, 248, 204, 36, 26, 240, ++ 86, 218, 64, 177, 32, 70, 1, 33, 241, 224, 213, 248, 16, 3, 213, 248, ++ 204, 20, 2, 240, 164, 216, 213, 248, 204, 180, 219, 248, 0, 48, 197, ++ 248, 208, 52, 0, 43, 87, 208, 35, 122, 3, 177, 94, 185, 7, 241, 154, ++ 0, 0, 33, 28, 34, 224, 243, 29, 247, 0, 35, 135, 248, 182, 48, 135, ++ 248, 61, 48, 251, 100, 79, 240, 0, 9, 75, 70, 202, 70, 30, 224, 219, ++ 248, 8, 32, 80, 142, 0, 244, 64, 66, 178, 245, 64, 79, 2, 209, 1, 51, ++ 219, 178, 3, 224, 10, 241, 1, 10, 95, 250, 138, 250, 151, 248, 182, ++ 32, 66, 185, 0, 147, 226, 243, 119, 241, 1, 70, 7, 241, 154, 0, 226, ++ 243, 194, 240, 0, 155, 9, 241, 1, 9, 11, 241, 4, 11, 213, 248, 204, ++ 36, 18, 104, 145, 69, 219, 211, 186, 241, 1, 15, 1, 216, 1, 43, 1, 217, ++ 1, 35, 1, 224, 35, 122, 11, 185, 135, 248, 188, 48, 40, 70, 33, 70, ++ 31, 240, 113, 217, 78, 177, 216, 248, 12, 48, 26, 7, 5, 212, 212, 248, ++ 0, 49, 32, 70, 1, 33, 26, 105, 2, 224, 0, 33, 32, 70, 10, 70, 254, 247, ++ 65, 254, 10, 224, 78, 177, 151, 248, 61, 32, 50, 177, 250, 108, 34, ++ 177, 135, 248, 61, 48, 135, 248, 60, 48, 123, 98, 216, 248, 12, 48, ++ 213, 248, 208, 36, 35, 240, 8, 3, 200, 248, 12, 48, 210, 177, 40, 70, ++ 1, 33, 34, 70, 79, 240, 255, 51, 49, 240, 55, 217, 46, 177, 213, 248, ++ 204, 52, 32, 70, 25, 104, 28, 240, 156, 216, 32, 70, 0, 240, 13, 252, ++ 40, 70, 0, 33, 34, 70, 79, 240, 255, 51, 3, 176, 189, 232, 240, 79, ++ 49, 240, 35, 153, 1, 153, 145, 249, 52, 32, 1, 42, 27, 208, 149, 248, ++ 164, 148, 185, 241, 0, 15, 22, 209, 10, 122, 162, 177, 73, 70, 4, 241, ++ 188, 0, 6, 34, 224, 243, 141, 246, 40, 70, 33, 70, 255, 247, 197, 253, ++ 0, 40, 73, 208, 1, 33, 32, 70, 74, 70, 11, 70, 3, 176, 189, 232, 240, ++ 79, 28, 240, 188, 152, 70, 177, 151, 248, 60, 48, 155, 177, 251, 106, ++ 139, 177, 32, 70, 28, 240, 139, 216, 13, 224, 149, 248, 215, 33, 82, ++ 177, 155, 7, 8, 213, 32, 70, 3, 176, 189, 232, 240, 79, 25, 240, 181, ++ 152, 0, 191, 70, 108, 136, 0, 216, 248, 12, 48, 88, 7, 5, 213, 32, 70, ++ 3, 176, 189, 232, 240, 79, 28, 240, 208, 153, 212, 248, 204, 48, 153, ++ 4, 19, 213, 150, 177, 216, 248, 4, 48, 2, 43, 14, 209, 40, 70, 33, 70, ++ 241, 247, 245, 249, 32, 70, 3, 33, 25, 240, 231, 217, 40, 70, 33, 70, ++ 3, 176, 189, 232, 240, 79, 36, 240, 178, 156, 32, 70, 3, 33, 3, 176, ++ 189, 232, 240, 79, 25, 240, 217, 153, 3, 176, 189, 232, 240, 143, 45, ++ 233, 240, 71, 208, 248, 248, 96, 5, 70, 214, 248, 8, 128, 15, 70, 65, ++ 69, 4, 104, 82, 208, 3, 41, 10, 209, 212, 248, 28, 151, 229, 243, 49, ++ 240, 212, 248, 28, 55, 0, 34, 201, 248, 12, 0, 90, 96, 26, 114, 183, ++ 96, 184, 241, 0, 15, 4, 209, 40, 124, 57, 70, 25, 240, 126, 216, 40, ++ 185, 40, 124, 65, 70, 25, 240, 121, 216, 40, 177, 39, 185, 32, 70, 189, ++ 232, 240, 71, 12, 240, 240, 153, 184, 241, 0, 15, 4, 208, 40, 124, 65, ++ 70, 25, 240, 107, 216, 104, 177, 35, 106, 1, 33, 24, 105, 10, 70, 11, ++ 240, 12, 248, 114, 104, 32, 70, 41, 70, 1, 35, 189, 232, 240, 71, 25, ++ 240, 48, 154, 39, 177, 40, 124, 57, 70, 25, 240, 87, 216, 168, 177, ++ 41, 70, 32, 70, 25, 240, 146, 218, 5, 70, 120, 185, 32, 70, 212, 248, ++ 204, 20, 1, 240, 69, 223, 35, 106, 1, 33, 24, 105, 42, 70, 10, 240, ++ 237, 255, 32, 70, 189, 232, 240, 71, 25, 240, 110, 154, 189, 232, 240, ++ 135, 45, 233, 240, 79, 5, 70, 145, 176, 23, 70, 154, 70, 4, 104, 208, ++ 248, 248, 144, 208, 248, 252, 128, 14, 70, 97, 177, 1, 41, 10, 209, ++ 208, 248, 244, 48, 41, 70, 90, 142, 32, 70, 23, 35, 27, 240, 17, 218, ++ 0, 40, 64, 240, 210, 128, 32, 70, 212, 248, 204, 20, 1, 240, 25, 223, ++ 35, 104, 147, 248, 49, 48, 51, 177, 217, 248, 4, 48, 163, 241, 3, 2, ++ 83, 66, 67, 235, 2, 3, 0, 33, 201, 248, 4, 16, 40, 70, 6, 147, 255, ++ 247, 111, 255, 1, 46, 82, 209, 213, 248, 244, 48, 7, 147, 179, 248, ++ 50, 144, 35, 104, 147, 248, 60, 48, 51, 177, 32, 70, 41, 70, 74, 70, ++ 8, 240, 249, 254, 131, 70, 1, 224, 111, 240, 26, 11, 35, 106, 24, 105, ++ 11, 240, 31, 248, 72, 69, 26, 208, 32, 70, 12, 240, 198, 222, 32, 70, ++ 73, 70, 11, 240, 148, 219, 35, 104, 147, 248, 60, 48, 99, 177, 187, ++ 241, 0, 15, 9, 209, 213, 248, 40, 51, 89, 104, 212, 248, 168, 53, 153, ++ 66, 2, 208, 32, 70, 9, 240, 195, 218, 32, 70, 6, 240, 100, 222, 35, ++ 104, 147, 248, 60, 48, 171, 177, 187, 241, 0, 15, 18, 209, 213, 248, ++ 40, 51, 90, 104, 212, 248, 168, 53, 154, 66, 11, 208, 32, 70, 12, 240, ++ 157, 222, 213, 248, 40, 51, 32, 70, 89, 104, 9, 240, 169, 218, 32, 70, ++ 6, 240, 74, 222, 7, 155, 32, 70, 3, 241, 56, 1, 9, 240, 90, 221, 35, ++ 104, 147, 248, 47, 32, 50, 177, 147, 248, 48, 48, 27, 177, 212, 248, ++ 8, 5, 23, 240, 9, 216, 32, 70, 0, 33, 42, 70, 79, 240, 255, 51, 48, ++ 240, 198, 223, 94, 187, 40, 70, 57, 70, 3, 240, 198, 253, 48, 187, 181, ++ 248, 90, 48, 91, 4, 16, 213, 13, 241, 32, 9, 212, 248, 192, 6, 41, 70, ++ 74, 70, 47, 240, 60, 221, 32, 35, 0, 150, 1, 150, 205, 248, 8, 160, ++ 205, 248, 12, 144, 4, 147, 5, 224, 0, 150, 1, 150, 205, 248, 8, 160, ++ 3, 150, 4, 150, 32, 70, 41, 70, 125, 34, 59, 70, 1, 240, 169, 222, 5, ++ 245, 104, 112, 57, 70, 6, 34, 223, 247, 149, 249, 0, 150, 216, 248, ++ 52, 48, 79, 240, 0, 9, 1, 147, 32, 70, 59, 70, 41, 70, 19, 34, 205, ++ 248, 8, 160, 205, 248, 12, 144, 205, 248, 16, 144, 1, 240, 145, 222, ++ 35, 104, 147, 248, 49, 48, 131, 177, 6, 155, 115, 177, 110, 177, 3, ++ 35, 0, 147, 32, 70, 43, 70, 73, 70, 5, 241, 216, 2, 237, 247, 36, 252, ++ 1, 35, 136, 248, 137, 48, 136, 248, 6, 48, 17, 176, 189, 232, 240, 143, ++ 45, 233, 243, 65, 5, 104, 208, 248, 248, 48, 149, 248, 116, 34, 208, ++ 248, 252, 112, 34, 240, 4, 2, 208, 248, 240, 96, 133, 248, 116, 34, ++ 91, 104, 79, 240, 0, 8, 1, 43, 4, 70, 199, 248, 84, 128, 8, 209, 215, ++ 248, 204, 0, 199, 248, 52, 128, 24, 177, 232, 247, 234, 248, 199, 248, ++ 204, 128, 182, 249, 42, 48, 187, 100, 0, 35, 135, 248, 189, 48, 135, ++ 248, 182, 48, 35, 124, 67, 177, 3, 35, 0, 147, 40, 70, 1, 33, 34, 70, ++ 79, 240, 255, 51, 48, 240, 128, 223, 40, 70, 12, 240, 239, 221, 0, 35, ++ 49, 70, 34, 70, 40, 70, 0, 240, 131, 221, 40, 70, 6, 240, 156, 221, ++ 32, 70, 1, 33, 254, 247, 26, 250, 43, 104, 91, 107, 91, 177, 212, 248, ++ 204, 48, 3, 244, 129, 115, 179, 245, 128, 127, 4, 209, 40, 70, 33, 70, ++ 1, 34, 6, 240, 87, 221, 35, 124, 43, 177, 213, 248, 72, 1, 33, 70, 1, ++ 34, 58, 240, 13, 216, 43, 104, 147, 248, 79, 32, 145, 7, 5, 208, 147, ++ 249, 82, 48, 19, 177, 32, 70, 7, 240, 212, 218, 180, 248, 90, 0, 230, ++ 247, 62, 251, 40, 177, 212, 248, 236, 0, 2, 40, 12, 191, 11, 32, 0, ++ 32, 4, 241, 188, 2, 35, 70, 0, 144, 1, 33, 40, 70, 237, 247, 164, 251, ++ 32, 70, 13, 33, 255, 247, 53, 254, 212, 248, 248, 48, 40, 70, 90, 104, ++ 33, 70, 155, 104, 35, 240, 111, 220, 150, 249, 52, 48, 27, 177, 32, ++ 70, 14, 33, 255, 247, 38, 254, 32, 70, 27, 240, 69, 222, 50, 122, 32, ++ 70, 6, 241, 9, 1, 36, 240, 17, 218, 213, 248, 204, 52, 32, 70, 25, 104, ++ 27, 240, 65, 222, 40, 70, 33, 70, 1, 34, 2, 176, 189, 232, 240, 65, ++ 254, 247, 186, 188, 247, 181, 6, 104, 4, 70, 13, 70, 8, 70, 12, 33, ++ 71, 240, 115, 219, 48, 70, 33, 70, 25, 240, 3, 223, 35, 124, 107, 179, ++ 35, 122, 91, 179, 212, 248, 244, 48, 48, 70, 91, 142, 33, 70, 3, 244, ++ 64, 67, 163, 245, 64, 71, 123, 66, 67, 235, 7, 3, 4, 241, 216, 2, 26, ++ 240, 117, 248, 7, 70, 200, 177, 180, 248, 90, 48, 88, 4, 10, 213, 51, ++ 104, 147, 248, 69, 48, 51, 177, 214, 248, 100, 1, 24, 177, 57, 70, 42, ++ 70, 3, 240, 198, 255, 56, 70, 175, 66, 20, 191, 19, 33, 18, 33, 71, ++ 240, 67, 219, 48, 70, 57, 70, 10, 240, 123, 217, 171, 104, 34, 109, ++ 35, 244, 192, 99, 145, 5, 171, 96, 8, 213, 212, 248, 240, 32, 146, 248, ++ 131, 32, 18, 7, 68, 191, 67, 244, 0, 115, 171, 96, 35, 109, 155, 5, ++ 9, 213, 212, 248, 240, 48, 147, 248, 131, 48, 152, 6, 3, 213, 171, 104, ++ 67, 244, 128, 99, 171, 96, 180, 248, 90, 32, 73, 242, 32, 3, 19, 64, ++ 75, 177, 212, 248, 240, 48, 147, 248, 131, 48, 153, 6, 3, 213, 171, ++ 104, 67, 244, 128, 99, 171, 96, 0, 33, 32, 70, 11, 240, 224, 220, 0, ++ 33, 32, 70, 13, 240, 140, 217, 2, 33, 40, 70, 71, 240, 98, 221, 180, ++ 248, 90, 48, 32, 70, 165, 248, 68, 48, 255, 247, 226, 254, 107, 104, ++ 79, 240, 3, 1, 19, 244, 128, 63, 7, 209, 171, 108, 2, 43, 4, 209, 1, ++ 34, 0, 145, 48, 70, 19, 70, 4, 224, 0, 145, 48, 70, 3, 33, 1, 34, 0, ++ 35, 8, 240, 66, 216, 107, 104, 218, 3, 17, 212, 51, 104, 211, 248, 216, ++ 48, 155, 105, 155, 0, 3, 213, 214, 248, 180, 49, 152, 0, 7, 212, 2, ++ 33, 48, 70, 79, 244, 128, 114, 0, 35, 0, 145, 8, 240, 45, 216, 254, ++ 189, 139, 30, 1, 43, 45, 233, 240, 71, 7, 70, 137, 70, 5, 104, 208, ++ 248, 248, 128, 208, 248, 252, 64, 7, 216, 0, 33, 13, 240, 71, 217, 0, ++ 35, 99, 98, 56, 70, 1, 240, 12, 220, 227, 106, 0, 43, 0, 240, 197, 128, ++ 224, 108, 1, 40, 18, 217, 169, 241, 9, 3, 1, 43, 14, 216, 0, 34, 33, ++ 70, 19, 70, 177, 248, 104, 96, 6, 177, 1, 50, 1, 51, 10, 49, 131, 66, ++ 247, 209, 154, 66, 99, 209, 189, 232, 240, 135, 185, 241, 1, 15, 94, ++ 209, 215, 248, 0, 49, 30, 105, 43, 106, 211, 248, 16, 49, 35, 177, 40, ++ 70, 57, 70, 0, 34, 254, 247, 214, 251, 162, 108, 148, 248, 191, 48, ++ 145, 27, 153, 66, 8, 220, 148, 248, 61, 16, 0, 41, 0, 240, 177, 128, ++ 178, 26, 154, 66, 64, 243, 173, 128, 216, 248, 4, 48, 2, 43, 11, 209, ++ 213, 248, 104, 49, 27, 177, 155, 121, 0, 43, 64, 240, 172, 128, 216, ++ 248, 8, 48, 14, 43, 0, 240, 167, 128, 0, 35, 132, 248, 61, 48, 99, 98, ++ 166, 100, 150, 224, 148, 248, 60, 16, 0, 41, 0, 240, 156, 128, 97, 107, ++ 1, 41, 64, 240, 152, 128, 149, 248, 8, 22, 211, 26, 139, 66, 192, 242, ++ 146, 128, 216, 248, 4, 48, 2, 43, 11, 209, 213, 248, 104, 49, 67, 177, ++ 155, 121, 51, 177, 102, 106, 56, 70, 27, 240, 236, 223, 0, 35, 102, ++ 98, 99, 99, 0, 35, 132, 248, 60, 48, 43, 106, 211, 248, 16, 49, 0, 43, ++ 121, 208, 40, 70, 57, 70, 1, 34, 189, 232, 240, 71, 254, 247, 131, 187, ++ 99, 107, 9, 59, 1, 43, 25, 216, 98, 105, 163, 105, 154, 66, 21, 217, ++ 216, 248, 4, 48, 2, 43, 7, 209, 213, 248, 104, 49, 35, 177, 155, 121, ++ 19, 177, 56, 70, 27, 240, 198, 223, 0, 35, 132, 248, 61, 48, 132, 248, ++ 60, 48, 99, 98, 99, 97, 99, 99, 189, 232, 240, 135, 99, 106, 0, 43, ++ 81, 209, 33, 108, 34, 107, 148, 248, 61, 80, 145, 66, 166, 143, 4, 210, ++ 213, 241, 1, 5, 56, 191, 0, 37, 2, 224, 132, 248, 61, 48, 1, 37, 216, ++ 248, 4, 48, 2, 43, 3, 209, 216, 248, 8, 48, 14, 43, 58, 209, 0, 34, ++ 56, 70, 73, 70, 19, 70, 30, 240, 156, 221, 0, 40, 50, 209, 226, 106, ++ 1, 35, 132, 248, 60, 48, 98, 98, 13, 185, 0, 46, 42, 209, 99, 100, 0, ++ 35, 35, 100, 189, 232, 240, 135, 185, 241, 1, 15, 8, 191, 215, 248, ++ 0, 49, 42, 106, 8, 191, 27, 105, 210, 248, 240, 32, 24, 191, 111, 240, ++ 199, 3, 147, 66, 22, 218, 99, 106, 163, 185, 98, 121, 146, 185, 35, ++ 107, 56, 70, 99, 98, 1, 33, 19, 70, 189, 232, 240, 71, 30, 240, 113, ++ 157, 215, 248, 0, 49, 26, 105, 43, 106, 211, 248, 240, 48, 154, 66, ++ 191, 246, 96, 175, 140, 231, 189, 232, 240, 135, 0, 0, 45, 233, 240, ++ 79, 5, 104, 4, 70, 208, 248, 248, 160, 208, 248, 8, 129, 208, 248, 240, ++ 176, 149, 176, 40, 70, 11, 240, 112, 222, 40, 70, 33, 70, 25, 240, 80, ++ 221, 237, 225, 213, 248, 204, 36, 1, 51, 82, 248, 35, 96, 40, 70, 115, ++ 142, 3, 244, 64, 66, 162, 245, 64, 71, 122, 66, 66, 235, 7, 2, 10, 50, ++ 85, 248, 34, 112, 34, 70, 57, 70, 7, 240, 156, 222, 255, 40, 0, 240, ++ 209, 129, 112, 142, 225, 243, 232, 244, 64, 244, 128, 80, 31, 250, 128, ++ 249, 112, 142, 225, 243, 225, 244, 14, 40, 140, 191, 79, 244, 64, 65, ++ 0, 33, 73, 234, 1, 1, 32, 70, 26, 240, 141, 222, 0, 40, 0, 240, 186, ++ 129, 79, 240, 0, 9, 213, 248, 104, 50, 83, 248, 9, 16, 105, 177, 139, ++ 121, 91, 185, 11, 122, 75, 177, 161, 66, 7, 208, 48, 70, 188, 49, 6, ++ 34, 222, 247, 181, 254, 0, 40, 0, 240, 165, 129, 9, 241, 4, 9, 185, ++ 241, 32, 15, 231, 209, 59, 226, 211, 248, 220, 48, 0, 43, 127, 208, ++ 0, 35, 164, 248, 84, 48, 150, 248, 186, 0, 79, 240, 12, 9, 9, 251, 0, ++ 128, 242, 136, 28, 48, 2, 240, 128, 2, 210, 241, 1, 2, 56, 191, 0, 34, ++ 18, 169, 230, 247, 101, 248, 189, 248, 72, 48, 17, 169, 164, 248, 90, ++ 48, 150, 248, 186, 0, 9, 251, 0, 128, 32, 48, 225, 243, 205, 246, 17, ++ 155, 43, 187, 150, 248, 186, 48, 4, 34, 9, 251, 3, 137, 19, 168, 9, ++ 241, 36, 1, 222, 247, 143, 254, 19, 168, 150, 73, 4, 34, 222, 247, 119, ++ 254, 72, 185, 150, 248, 185, 48, 163, 241, 8, 2, 210, 178, 2, 42, 64, ++ 242, 97, 129, 141, 248, 79, 48, 19, 168, 17, 169, 225, 243, 173, 246, ++ 48, 185, 12, 35, 0, 144, 1, 147, 150, 248, 50, 48, 2, 147, 49, 225, ++ 213, 248, 188, 54, 27, 104, 227, 88, 171, 177, 27, 121, 155, 177, 17, ++ 155, 88, 7, 68, 191, 67, 240, 2, 3, 17, 147, 17, 155, 153, 7, 68, 191, ++ 67, 240, 1, 3, 17, 147, 35, 109, 17, 154, 35, 244, 130, 115, 35, 240, ++ 3, 3, 19, 67, 17, 147, 17, 171, 0, 147, 4, 35, 1, 147, 1, 35, 2, 147, ++ 227, 104, 0, 34, 3, 147, 120, 73, 19, 70, 40, 70, 234, 247, 20, 252, ++ 7, 35, 0, 147, 0, 35, 1, 147, 150, 248, 186, 32, 40, 70, 2, 146, 3, ++ 147, 4, 147, 33, 70, 24, 34, 51, 70, 1, 240, 73, 219, 182, 248, 98, ++ 48, 219, 6, 10, 213, 34, 109, 64, 242, 55, 19, 19, 64, 43, 185, 148, ++ 248, 124, 48, 19, 185, 0, 147, 1, 34, 73, 224, 48, 70, 229, 247, 89, ++ 254, 129, 70, 24, 177, 0, 35, 0, 147, 2, 34, 64, 224, 213, 248, 104, ++ 6, 33, 70, 50, 70, 53, 240, 199, 221, 1, 40, 3, 209, 205, 248, 0, 144, ++ 3, 35, 90, 224, 4, 40, 3, 209, 205, 248, 0, 144, 1, 144, 85, 224, 43, ++ 104, 147, 248, 173, 48, 195, 177, 213, 248, 116, 1, 13, 240, 9, 223, ++ 2, 40, 18, 209, 150, 249, 52, 48, 123, 177, 182, 248, 98, 144, 25, 244, ++ 128, 121, 10, 209, 213, 248, 92, 1, 121, 104, 43, 240, 26, 220, 128, ++ 7, 3, 213, 205, 248, 0, 144, 6, 35, 55, 224, 43, 104, 147, 248, 173, ++ 48, 147, 177, 150, 249, 52, 48, 123, 177, 213, 248, 124, 1, 177, 110, ++ 182, 248, 108, 32, 45, 240, 248, 220, 56, 177, 0, 35, 0, 147, 6, 34, ++ 1, 146, 150, 248, 50, 32, 2, 146, 180, 224, 43, 104, 147, 248, 173, ++ 48, 115, 177, 150, 249, 52, 144, 185, 241, 0, 15, 9, 209, 213, 248, ++ 92, 1, 113, 142, 44, 240, 243, 217, 24, 177, 205, 248, 0, 144, 7, 35, ++ 13, 224, 150, 249, 52, 144, 185, 241, 0, 15, 17, 209, 213, 248, 92, ++ 1, 113, 142, 44, 240, 80, 218, 88, 177, 205, 248, 0, 144, 5, 35, 1, ++ 147, 150, 248, 50, 48, 205, 248, 12, 144, 2, 147, 205, 248, 16, 144, ++ 140, 224, 180, 248, 90, 48, 99, 177, 34, 109, 64, 242, 55, 19, 19, 64, ++ 59, 177, 40, 70, 33, 70, 50, 70, 253, 247, 121, 255, 0, 40, 64, 240, ++ 131, 128, 59, 104, 2, 43, 9, 209, 122, 125, 58, 185, 255, 35, 0, 147, ++ 1, 146, 6, 241, 56, 0, 7, 169, 1, 35, 11, 224, 33, 70, 40, 70, 6, 240, ++ 144, 220, 255, 35, 0, 34, 0, 147, 1, 144, 7, 169, 6, 241, 56, 0, 19, ++ 70, 21, 240, 68, 250, 43, 106, 80, 55, 147, 248, 236, 16, 17, 240, 2, ++ 1, 17, 208, 113, 142, 1, 244, 96, 81, 177, 245, 32, 95, 8, 208, 177, ++ 245, 192, 95, 7, 208, 177, 245, 128, 95, 20, 191, 10, 33, 20, 33, 2, ++ 224, 160, 33, 0, 224, 40, 33, 56, 70, 21, 240, 156, 250, 213, 248, 116, ++ 52, 7, 168, 57, 70, 0, 34, 155, 120, 21, 240, 200, 248, 48, 185, 0, ++ 144, 9, 35, 28, 224, 59, 21, 4, 0, 32, 77, 136, 0, 157, 248, 48, 32, ++ 149, 248, 12, 53, 154, 66, 53, 209, 150, 249, 52, 48, 163, 185, 114, ++ 142, 40, 70, 2, 244, 64, 66, 6, 241, 56, 1, 178, 245, 64, 79, 20, 191, ++ 2, 34, 1, 34, 26, 240, 154, 220, 48, 185, 0, 144, 10, 35, 1, 147, 2, ++ 144, 3, 144, 4, 144, 23, 224, 43, 104, 147, 248, 48, 48, 27, 179, 40, ++ 70, 33, 70, 50, 70, 25, 240, 253, 252, 232, 177, 144, 248, 36, 48, 153, ++ 7, 25, 213, 67, 104, 19, 244, 128, 83, 21, 209, 13, 34, 0, 147, 1, 146, ++ 2, 147, 3, 147, 4, 147, 40, 70, 33, 70, 23, 34, 51, 70, 1, 240, 46, ++ 218, 213, 248, 208, 52, 1, 59, 197, 248, 208, 52, 213, 248, 208, 52, ++ 0, 43, 127, 244, 13, 174, 213, 248, 208, 52, 0, 43, 57, 208, 0, 35, ++ 138, 248, 30, 48, 213, 248, 208, 36, 213, 248, 204, 20, 80, 30, 1, 50, ++ 81, 248, 34, 96, 218, 248, 4, 32, 197, 248, 208, 4, 1, 42, 10, 208, ++ 0, 147, 1, 147, 2, 147, 3, 147, 4, 147, 40, 70, 33, 70, 32, 34, 51, ++ 70, 1, 240, 4, 218, 213, 248, 188, 6, 3, 104, 227, 88, 163, 177, 27, ++ 104, 2, 43, 17, 209, 33, 70, 6, 241, 9, 2, 51, 122, 74, 240, 128, 219, ++ 80, 177, 1, 40, 32, 70, 3, 209, 17, 33, 255, 247, 39, 250, 98, 224, ++ 1, 33, 24, 240, 249, 219, 94, 224, 32, 70, 29, 240, 189, 219, 90, 224, ++ 212, 248, 204, 48, 154, 4, 6, 213, 35, 122, 35, 185, 213, 248, 80, 1, ++ 33, 70, 63, 240, 147, 217, 43, 104, 147, 248, 60, 48, 67, 177, 212, ++ 248, 40, 51, 43, 177, 35, 122, 27, 185, 40, 70, 33, 70, 56, 240, 240, ++ 218, 35, 122, 147, 177, 148, 248, 118, 35, 34, 177, 32, 70, 1, 33, 24, ++ 240, 211, 219, 34, 224, 155, 249, 52, 48, 1, 33, 211, 241, 1, 3, 32, ++ 70, 56, 191, 0, 35, 255, 247, 82, 250, 23, 224, 149, 248, 215, 49, 59, ++ 177, 218, 248, 12, 48, 155, 7, 3, 208, 32, 70, 24, 240, 109, 218, 34, ++ 224, 155, 249, 52, 48, 0, 34, 194, 235, 3, 14, 1, 33, 222, 241, 0, 3, ++ 32, 70, 67, 235, 14, 3, 27, 240, 81, 218, 213, 248, 188, 6, 33, 70, ++ 0, 34, 74, 240, 95, 219, 149, 248, 116, 50, 32, 70, 35, 240, 4, 3, 133, ++ 248, 116, 50, 27, 240, 236, 217, 5, 224, 212, 248, 8, 49, 0, 43, 127, ++ 244, 191, 173, 65, 230, 21, 176, 189, 232, 240, 143, 45, 233, 240, 79, ++ 139, 176, 7, 147, 21, 155, 6, 41, 5, 70, 14, 70, 147, 70, 157, 248, ++ 80, 160, 9, 147, 4, 104, 208, 248, 248, 128, 0, 240, 169, 128, 0, 41, ++ 64, 240, 138, 128, 186, 241, 0, 15, 13, 209, 32, 70, 41, 70, 36, 240, ++ 255, 218, 187, 241, 0, 15, 9, 208, 5, 245, 104, 112, 89, 70, 6, 34, ++ 222, 247, 86, 252, 2, 224, 1, 35, 128, 248, 234, 51, 148, 248, 114, ++ 50, 0, 43, 98, 208, 35, 104, 147, 248, 60, 48, 59, 177, 212, 248, 84, ++ 1, 56, 240, 36, 220, 0, 48, 24, 191, 1, 32, 0, 224, 1, 32, 35, 104, ++ 192, 178, 147, 248, 60, 112, 8, 144, 31, 177, 79, 240, 0, 9, 47, 70, ++ 29, 224, 212, 248, 104, 50, 83, 248, 7, 144, 185, 241, 0, 15, 18, 208, ++ 153, 248, 6, 48, 123, 177, 153, 248, 4, 48, 99, 177, 35, 106, 24, 105, ++ 10, 240, 52, 250, 217, 248, 244, 48, 91, 142, 131, 66, 3, 208, 32, 70, ++ 73, 70, 21, 240, 69, 219, 4, 55, 32, 47, 226, 209, 221, 231, 212, 248, ++ 104, 50, 83, 248, 9, 80, 245, 177, 171, 121, 227, 177, 43, 121, 211, ++ 177, 35, 104, 147, 248, 60, 48, 43, 177, 213, 248, 204, 48, 154, 4, ++ 1, 213, 8, 155, 131, 177, 235, 104, 0, 34, 217, 104, 32, 70, 79, 244, ++ 128, 115, 238, 247, 254, 253, 35, 106, 24, 105, 10, 240, 8, 250, 41, ++ 70, 2, 70, 32, 70, 71, 240, 77, 218, 9, 241, 4, 9, 185, 241, 32, 15, ++ 214, 209, 212, 248, 8, 5, 61, 70, 22, 240, 43, 218, 181, 248, 90, 112, ++ 23, 244, 128, 71, 38, 208, 186, 241, 0, 15, 39, 208, 212, 248, 188, ++ 6, 41, 70, 28, 240, 140, 255, 0, 39, 35, 224, 216, 248, 8, 48, 11, 59, ++ 1, 43, 22, 216, 58, 177, 32, 70, 41, 70, 25, 240, 154, 251, 16, 177, ++ 12, 33, 70, 240, 128, 222, 2, 46, 9, 208, 32, 70, 41, 70, 25, 240, 14, ++ 218, 5, 46, 5, 216, 79, 240, 200, 67, 179, 64, 1, 213, 1, 39, 0, 224, ++ 0, 39, 186, 241, 0, 15, 3, 209, 0, 224, 87, 70, 7, 34, 0, 224, 9, 34, ++ 7, 155, 0, 150, 1, 147, 9, 155, 32, 70, 2, 147, 216, 248, 64, 48, 41, ++ 70, 3, 147, 216, 248, 68, 48, 4, 147, 91, 70, 1, 240, 181, 216, 0, 47, ++ 40, 208, 35, 104, 147, 248, 102, 49, 115, 177, 181, 248, 90, 48, 155, ++ 6, 10, 213, 7, 155, 67, 177, 213, 248, 236, 48, 43, 185, 212, 248, 200, ++ 6, 41, 70, 64, 240, 13, 219, 9, 224, 5, 46, 1, 208, 2, 46, 11, 209, ++ 152, 248, 30, 32, 152, 248, 28, 48, 154, 66, 5, 210, 40, 70, 11, 176, ++ 189, 232, 240, 79, 26, 240, 238, 154, 40, 70, 11, 176, 189, 232, 240, ++ 79, 255, 247, 96, 188, 11, 176, 189, 232, 240, 143, 0, 0, 45, 233, 240, ++ 79, 154, 70, 19, 136, 208, 248, 248, 96, 161, 176, 3, 240, 252, 3, 9, ++ 147, 179, 104, 148, 70, 11, 59, 186, 248, 2, 32, 1, 43, 4, 70, 139, ++ 70, 221, 248, 168, 144, 5, 104, 208, 248, 240, 128, 173, 248, 40, 32, ++ 151, 178, 11, 216, 12, 241, 16, 0, 65, 70, 6, 34, 205, 248, 24, 192, ++ 222, 247, 66, 251, 221, 248, 24, 192, 3, 70, 96, 177, 9, 154, 32, 70, ++ 178, 241, 16, 3, 24, 191, 1, 35, 0, 147, 0, 35, 1, 147, 6, 33, 12, 241, ++ 10, 2, 68, 224, 48, 108, 32, 177, 6, 147, 231, 247, 220, 250, 6, 155, ++ 115, 100, 72, 70, 231, 247, 212, 250, 48, 100, 40, 177, 198, 248, 68, ++ 144, 81, 70, 74, 70, 222, 247, 50, 251, 43, 104, 147, 248, 69, 48, 59, ++ 177, 213, 248, 100, 1, 186, 248, 2, 16, 39, 240, 142, 221, 170, 248, ++ 2, 0, 11, 47, 16, 209, 115, 104, 1, 43, 16, 208, 179, 104, 12, 43, 13, ++ 208, 0, 35, 0, 147, 33, 70, 40, 70, 90, 70, 67, 70, 25, 240, 170, 222, ++ 32, 70, 12, 33, 112, 224, 175, 177, 30, 47, 19, 208, 115, 104, 32, 70, ++ 19, 241, 255, 51, 24, 191, 1, 35, 0, 147, 152, 249, 52, 48, 66, 70, ++ 211, 241, 1, 3, 56, 191, 0, 35, 1, 147, 1, 33, 59, 70, 255, 247, 131, ++ 254, 171, 224, 43, 104, 0, 39, 155, 106, 169, 241, 6, 2, 203, 248, 44, ++ 48, 10, 241, 6, 3, 7, 147, 8, 146, 3, 147, 4, 146, 59, 70, 40, 70, 33, ++ 70, 88, 34, 0, 151, 1, 151, 2, 151, 0, 240, 244, 223, 57, 70, 12, 34, ++ 29, 168, 223, 243, 97, 246, 74, 75, 57, 70, 29, 147, 73, 75, 36, 34, ++ 30, 147, 12, 171, 24, 70, 6, 147, 31, 149, 223, 243, 85, 246, 189, 248, ++ 40, 32, 13, 241, 84, 9, 57, 70, 173, 248, 52, 32, 72, 70, 32, 34, 205, ++ 248, 48, 176, 223, 243, 72, 246, 6, 155, 8, 154, 28, 147, 7, 155, 2, ++ 146, 1, 147, 205, 248, 0, 144, 213, 248, 124, 6, 33, 70, 9, 154, 29, ++ 171, 48, 240, 177, 218, 7, 70, 0, 40, 101, 209, 189, 248, 52, 144, 185, ++ 241, 30, 15, 17, 209, 17, 155, 40, 70, 243, 100, 33, 70, 25, 240, 241, ++ 216, 242, 108, 168, 104, 49, 104, 30, 50, 59, 70, 245, 243, 98, 242, ++ 32, 70, 25, 33, 254, 247, 230, 255, 78, 224, 212, 248, 204, 48, 155, ++ 4, 6, 213, 213, 248, 80, 1, 89, 70, 7, 154, 8, 155, 62, 240, 208, 220, ++ 186, 248, 4, 48, 32, 70, 164, 248, 214, 48, 165, 248, 60, 51, 115, 104, ++ 66, 70, 19, 241, 255, 51, 24, 191, 1, 35, 0, 147, 152, 249, 52, 48, ++ 211, 241, 1, 3, 56, 191, 0, 35, 1, 147, 0, 33, 75, 70, 255, 247, 1, ++ 254, 32, 70, 89, 70, 255, 247, 174, 249, 213, 248, 108, 50, 156, 66, ++ 34, 208, 180, 248, 90, 48, 251, 185, 35, 109, 216, 7, 28, 213, 163, ++ 110, 89, 28, 25, 208, 4, 235, 131, 3, 218, 110, 170, 177, 17, 122, 1, ++ 41, 1, 208, 3, 41, 16, 209, 80, 137, 211, 121, 141, 232, 3, 0, 2, 241, ++ 20, 1, 2, 145, 0, 33, 4, 145, 5, 145, 205, 248, 12, 128, 40, 70, 33, ++ 70, 18, 105, 6, 240, 88, 254, 33, 176, 189, 232, 240, 143, 0, 191, 49, ++ 195, 131, 0, 185, 208, 131, 0, 45, 233, 240, 79, 208, 248, 248, 96, ++ 208, 248, 4, 113, 208, 248, 240, 160, 139, 176, 155, 70, 7, 150, 6, ++ 151, 4, 70, 5, 104, 208, 248, 244, 96, 11, 240, 194, 223, 154, 249, ++ 52, 144, 20, 154, 185, 241, 1, 15, 11, 241, 12, 7, 162, 241, 12, 8, ++ 24, 209, 56, 70, 65, 70, 5, 34, 229, 247, 17, 251, 104, 177, 195, 120, ++ 73, 70, 32, 70, 134, 248, 96, 48, 12, 240, 83, 219, 213, 248, 72, 1, ++ 33, 70, 74, 70, 57, 240, 211, 217, 26, 224, 32, 70, 73, 70, 10, 240, ++ 152, 222, 21, 224, 43, 104, 91, 107, 115, 177, 212, 248, 204, 48, 152, ++ 7, 10, 212, 56, 70, 65, 70, 5, 240, 116, 223, 40, 177, 212, 248, 204, ++ 48, 67, 244, 128, 115, 196, 248, 204, 48, 40, 70, 33, 70, 29, 240, 195, ++ 216, 20, 155, 182, 248, 108, 32, 0, 147, 8, 171, 1, 147, 9, 171, 2, ++ 147, 40, 70, 91, 70, 177, 110, 26, 240, 0, 222, 8, 155, 75, 177, 176, ++ 110, 8, 177, 231, 247, 135, 249, 8, 155, 189, 248, 36, 32, 179, 102, ++ 166, 248, 108, 32, 43, 104, 147, 248, 173, 32, 26, 177, 212, 248, 204, ++ 32, 81, 4, 2, 213, 147, 248, 175, 48, 83, 177, 154, 249, 52, 48, 1, ++ 43, 6, 209, 213, 248, 140, 1, 33, 70, 58, 70, 67, 70, 44, 240, 128, ++ 217, 163, 121, 19, 185, 1, 35, 133, 248, 160, 55, 212, 248, 4, 49, 219, ++ 139, 51, 177, 6, 158, 51, 120, 2, 43, 2, 209, 32, 70, 63, 240, 168, ++ 222, 32, 70, 8, 240, 105, 219, 32, 177, 32, 70, 1, 33, 240, 247, 135, ++ 250, 9, 224, 6, 159, 59, 120, 2, 43, 2, 209, 32, 70, 19, 240, 80, 252, ++ 32, 70, 237, 247, 96, 253, 7, 158, 179, 104, 179, 177, 0, 38, 0, 150, ++ 1, 150, 154, 249, 52, 48, 40, 70, 154, 27, 83, 66, 67, 235, 2, 3, 2, ++ 147, 33, 70, 1, 34, 4, 241, 188, 3, 3, 150, 4, 150, 0, 240, 163, 222, ++ 32, 70, 49, 70, 24, 240, 173, 216, 40, 70, 28, 240, 248, 255, 11, 176, ++ 189, 232, 240, 143, 0, 0, 45, 233, 240, 79, 163, 176, 146, 70, 12, 147, ++ 157, 248, 176, 32, 208, 248, 248, 48, 13, 146, 9, 147, 186, 248, 2, ++ 32, 208, 248, 240, 48, 1, 241, 10, 7, 186, 248, 4, 144, 4, 70, 11, 145, ++ 5, 104, 8, 146, 56, 70, 25, 70, 6, 34, 186, 248, 0, 176, 31, 250, 137, ++ 248, 10, 147, 222, 247, 86, 249, 0, 40, 46, 209, 40, 70, 33, 70, 58, ++ 70, 25, 240, 42, 249, 6, 70, 0, 40, 38, 208, 9, 154, 147, 104, 8, 43, ++ 1, 208, 10, 43, 32, 209, 114, 104, 66, 244, 128, 82, 114, 96, 42, 104, ++ 146, 248, 102, 33, 114, 177, 187, 241, 3, 15, 11, 209, 12, 155, 13, ++ 154, 0, 147, 1, 146, 213, 248, 80, 8, 33, 70, 11, 154, 83, 70, 24, 240, ++ 149, 252, 146, 224, 8, 43, 2, 209, 8, 155, 2, 43, 3, 224, 10, 43, 7, ++ 209, 8, 154, 4, 42, 4, 208, 0, 35, 0, 147, 32, 70, 6, 33, 128, 224, ++ 184, 241, 0, 15, 6, 208, 205, 248, 0, 176, 32, 70, 1, 33, 58, 70, 67, ++ 70, 119, 224, 65, 70, 12, 34, 31, 168, 223, 243, 164, 244, 59, 75, 65, ++ 70, 31, 147, 59, 75, 36, 34, 32, 147, 14, 171, 24, 70, 7, 147, 33, 149, ++ 223, 243, 152, 244, 8, 154, 173, 248, 72, 144, 13, 241, 92, 9, 15, 146, ++ 65, 70, 32, 34, 72, 70, 205, 248, 56, 176, 16, 150, 223, 243, 138, 244, ++ 7, 155, 12, 154, 30, 147, 10, 241, 6, 3, 1, 147, 147, 31, 2, 147, 205, ++ 248, 0, 144, 213, 248, 124, 6, 33, 70, 176, 34, 31, 171, 48, 240, 241, ++ 216, 0, 40, 71, 209, 189, 248, 72, 48, 0, 43, 58, 209, 187, 241, 1, ++ 15, 55, 209, 8, 154, 2, 42, 52, 209, 10, 33, 32, 70, 254, 247, 47, 254, ++ 243, 104, 17, 154, 6, 241, 20, 1, 27, 177, 24, 105, 0, 40, 8, 191, 0, ++ 35, 3, 147, 13, 155, 1, 32, 79, 240, 3, 12, 79, 240, 0, 14, 141, 232, ++ 1, 80, 4, 146, 5, 147, 32, 70, 51, 70, 10, 154, 241, 247, 52, 251, 33, ++ 70, 6, 70, 40, 70, 24, 240, 17, 223, 70, 177, 213, 248, 120, 4, 15, ++ 73, 180, 248, 26, 33, 51, 70, 62, 240, 246, 223, 17, 224, 9, 154, 168, ++ 104, 17, 104, 51, 70, 79, 244, 155, 114, 245, 243, 119, 240, 8, 224, ++ 25, 28, 205, 248, 0, 176, 32, 70, 24, 191, 1, 33, 58, 70, 254, 247, ++ 151, 248, 35, 176, 189, 232, 240, 143, 197, 208, 131, 0, 201, 208, 131, ++ 0, 201, 66, 2, 0, 247, 181, 13, 70, 145, 178, 4, 70, 2, 240, 178, 250, ++ 6, 70, 0, 40, 35, 208, 208, 248, 248, 112, 208, 248, 240, 32, 187, 104, ++ 24, 43, 28, 216, 15, 73, 153, 64, 25, 213, 21, 240, 2, 3, 4, 209, 5, ++ 33, 0, 147, 254, 247, 116, 248, 17, 224, 32, 70, 49, 70, 24, 240, 205, ++ 222, 214, 248, 236, 48, 3, 43, 9, 208, 160, 104, 57, 104, 79, 244, 155, ++ 114, 0, 35, 3, 176, 189, 232, 240, 64, 245, 243, 55, 176, 3, 176, 240, ++ 189, 0, 191, 128, 0, 160, 0, 45, 233, 240, 65, 5, 104, 142, 176, 43, ++ 104, 4, 70, 27, 126, 208, 248, 248, 128, 208, 248, 240, 96, 0, 43, 0, ++ 240, 154, 128, 0, 33, 40, 70, 2, 240, 121, 255, 40, 105, 47, 240, 137, ++ 222, 1, 70, 24, 177, 168, 104, 232, 247, 77, 253, 140, 224, 43, 104, ++ 147, 248, 49, 48, 139, 177, 216, 248, 4, 48, 3, 43, 13, 209, 216, 248, ++ 8, 48, 18, 43, 3, 209, 32, 70, 23, 240, 218, 223, 124, 224, 19, 43, ++ 3, 209, 200, 248, 4, 0, 32, 70, 116, 224, 216, 248, 8, 112, 24, 47, ++ 12, 216, 59, 75, 187, 64, 9, 213, 180, 249, 84, 48, 32, 70, 0, 147, ++ 2, 33, 50, 70, 0, 35, 254, 247, 27, 248, 101, 224, 167, 241, 11, 3, ++ 1, 43, 20, 216, 216, 248, 4, 48, 32, 70, 19, 241, 255, 51, 24, 191, ++ 1, 35, 0, 147, 150, 249, 52, 48, 50, 70, 211, 241, 1, 3, 56, 191, 0, ++ 35, 1, 147, 2, 33, 0, 35, 255, 247, 160, 251, 76, 224, 239, 185, 213, ++ 248, 200, 52, 0, 43, 71, 208, 163, 121, 0, 43, 68, 209, 99, 121, 0, ++ 43, 65, 208, 35, 122, 0, 43, 62, 209, 34, 126, 4, 241, 25, 1, 6, 168, ++ 5, 146, 222, 247, 4, 248, 40, 70, 33, 70, 6, 170, 5, 155, 0, 151, 1, ++ 151, 2, 151, 28, 240, 5, 219, 45, 224, 6, 47, 14, 209, 32, 70, 7, 33, ++ 254, 247, 58, 253, 213, 248, 208, 36, 213, 248, 204, 52, 2, 50, 32, ++ 70, 83, 248, 34, 16, 253, 247, 84, 252, 28, 224, 25, 47, 26, 209, 40, ++ 70, 33, 70, 50, 70, 24, 240, 170, 255, 7, 70, 152, 177, 168, 104, 216, ++ 248, 0, 16, 79, 244, 155, 114, 0, 35, 244, 243, 150, 247, 0, 35, 0, ++ 147, 33, 70, 40, 70, 58, 70, 51, 70, 25, 240, 100, 219, 32, 70, 11, ++ 33, 254, 247, 18, 253, 14, 176, 189, 232, 240, 129, 0, 191, 128, 0, ++ 160, 0, 45, 233, 240, 79, 5, 70, 155, 176, 15, 70, 208, 248, 0, 176, ++ 153, 70, 0, 43, 0, 240, 45, 130, 131, 104, 91, 104, 89, 248, 3, 48, ++ 94, 104, 155, 104, 3, 147, 6, 42, 0, 242, 37, 130, 223, 232, 18, 240, ++ 7, 0, 35, 2, 57, 0, 35, 2, 235, 0, 35, 2, 101, 1, 88, 70, 105, 104, ++ 9, 241, 20, 2, 113, 35, 82, 240, 43, 222, 128, 70, 0, 40, 0, 240, 21, ++ 130, 132, 104, 0, 35, 95, 34, 4, 241, 18, 10, 35, 116, 25, 70, 98, 116, ++ 80, 70, 2, 147, 223, 243, 17, 243, 71, 240, 136, 2, 17, 10, 225, 116, ++ 34, 117, 50, 139, 6, 241, 28, 9, 17, 10, 97, 117, 162, 117, 73, 70, ++ 88, 70, 32, 34, 5, 240, 171, 223, 73, 70, 32, 34, 4, 241, 31, 0, 221, ++ 247, 123, 255, 2, 155, 11, 34, 50, 96, 153, 70, 241, 225, 182, 248, ++ 206, 48, 128, 43, 4, 209, 65, 244, 158, 87, 71, 240, 8, 7, 3, 224, 4, ++ 43, 8, 191, 65, 244, 228, 119, 180, 136, 128, 43, 173, 248, 102, 64, ++ 37, 209, 23, 244, 128, 83, 35, 208, 181, 248, 16, 128, 24, 240, 1, 8, ++ 8, 209, 40, 70, 30, 240, 31, 219, 40, 70, 30, 240, 64, 219, 1, 48, 0, ++ 240, 203, 129, 43, 104, 105, 104, 211, 248, 100, 6, 57, 240, 127, 223, ++ 181, 248, 124, 48, 189, 248, 102, 32, 38, 51, 195, 24, 18, 240, 7, 2, ++ 155, 178, 5, 208, 194, 241, 8, 2, 155, 24, 155, 178, 0, 224, 0, 35, ++ 113, 52, 27, 25, 88, 70, 105, 104, 9, 241, 20, 2, 155, 178, 82, 240, ++ 190, 221, 128, 70, 0, 40, 0, 240, 168, 129, 132, 104, 0, 33, 95, 34, ++ 4, 241, 18, 10, 34, 116, 97, 116, 80, 70, 223, 243, 166, 242, 59, 10, ++ 227, 116, 39, 117, 51, 139, 6, 241, 28, 1, 26, 10, 163, 117, 98, 117, ++ 4, 241, 31, 0, 32, 34, 221, 247, 24, 255, 178, 136, 4, 241, 113, 0, ++ 177, 104, 221, 247, 18, 255, 189, 248, 102, 48, 26, 10, 66, 234, 3, ++ 35, 164, 248, 111, 48, 182, 248, 206, 48, 128, 43, 51, 209, 248, 4, ++ 49, 213, 33, 70, 13, 241, 102, 2, 40, 70, 30, 240, 117, 218, 189, 248, ++ 102, 48, 26, 10, 66, 234, 3, 35, 164, 248, 111, 48, 217, 248, 8, 48, ++ 153, 5, 15, 213, 43, 104, 34, 70, 211, 248, 100, 6, 105, 104, 13, 241, ++ 102, 3, 57, 240, 85, 223, 189, 248, 102, 48, 26, 10, 66, 234, 3, 35, ++ 164, 248, 111, 48, 163, 123, 40, 70, 0, 147, 49, 70, 82, 70, 59, 70, ++ 30, 240, 172, 216, 1, 48, 6, 209, 219, 248, 4, 0, 65, 70, 0, 34, 230, ++ 247, 164, 254, 70, 225, 148, 248, 111, 32, 148, 248, 112, 48, 67, 234, ++ 2, 35, 34, 138, 211, 24, 155, 178, 26, 10, 66, 234, 3, 35, 35, 130, ++ 12, 35, 15, 225, 144, 248, 122, 48, 176, 248, 124, 192, 27, 1, 3, 240, ++ 48, 3, 65, 234, 3, 7, 71, 244, 96, 119, 191, 178, 0, 35, 186, 7, 84, ++ 191, 12, 241, 113, 12, 12, 241, 121, 12, 31, 250, 140, 252, 173, 248, ++ 102, 48, 88, 70, 99, 70, 105, 104, 9, 241, 20, 2, 205, 248, 8, 192, ++ 82, 240, 46, 221, 221, 248, 8, 192, 128, 70, 0, 40, 0, 240, 22, 129, ++ 132, 104, 95, 35, 79, 240, 0, 9, 4, 241, 18, 10, 172, 241, 18, 2, 35, ++ 116, 73, 70, 132, 248, 17, 144, 80, 70, 223, 243, 15, 242, 59, 10, 227, ++ 116, 39, 117, 181, 248, 124, 48, 5, 241, 190, 1, 26, 10, 163, 117, 98, ++ 117, 4, 241, 31, 0, 32, 34, 221, 247, 128, 254, 16, 34, 5, 241, 142, ++ 1, 4, 241, 63, 0, 221, 247, 121, 254, 8, 34, 5, 241, 254, 1, 4, 241, ++ 79, 0, 221, 247, 114, 254, 181, 248, 124, 32, 5, 241, 90, 1, 4, 241, ++ 113, 0, 173, 248, 102, 32, 221, 247, 104, 254, 189, 248, 102, 48, 40, ++ 70, 26, 10, 66, 234, 3, 35, 164, 248, 111, 48, 163, 123, 49, 70, 0, ++ 147, 82, 70, 7, 240, 3, 3, 30, 240, 40, 216, 1, 48, 7, 209, 65, 70, ++ 219, 248, 4, 0, 74, 70, 230, 247, 32, 254, 200, 70, 197, 224, 34, 138, ++ 189, 248, 102, 48, 142, 224, 182, 248, 206, 48, 128, 43, 64, 240, 185, ++ 128, 180, 136, 219, 248, 100, 6, 105, 104, 173, 248, 102, 64, 57, 240, ++ 111, 222, 181, 248, 124, 48, 189, 248, 102, 32, 38, 51, 113, 52, 195, ++ 24, 18, 240, 7, 2, 164, 178, 155, 178, 3, 208, 194, 241, 8, 2, 155, ++ 24, 155, 178, 227, 24, 88, 70, 105, 104, 9, 241, 20, 2, 155, 178, 82, ++ 240, 175, 220, 128, 70, 0, 40, 0, 240, 153, 128, 132, 104, 79, 240, ++ 0, 12, 95, 34, 4, 241, 18, 10, 132, 248, 17, 192, 97, 70, 71, 244, 156, ++ 87, 34, 116, 80, 70, 205, 248, 8, 192, 223, 243, 144, 241, 59, 10, 227, ++ 116, 39, 117, 51, 139, 6, 241, 28, 1, 26, 10, 163, 117, 98, 117, 4, ++ 241, 31, 0, 32, 34, 221, 247, 2, 254, 13, 241, 104, 9, 177, 104, 178, ++ 136, 4, 241, 113, 0, 221, 247, 250, 253, 57, 248, 2, 61, 33, 70, 26, ++ 10, 66, 234, 3, 35, 164, 248, 111, 48, 74, 70, 40, 70, 30, 240, 100, ++ 217, 189, 248, 102, 48, 26, 10, 66, 234, 3, 35, 164, 248, 111, 48, 43, ++ 104, 105, 104, 211, 248, 100, 6, 34, 70, 75, 70, 57, 240, 73, 222, 189, ++ 248, 102, 48, 40, 70, 26, 10, 66, 234, 3, 35, 164, 248, 111, 48, 163, ++ 123, 49, 70, 0, 147, 82, 70, 59, 70, 29, 240, 160, 223, 1, 48, 221, ++ 248, 8, 192, 9, 209, 65, 70, 98, 70, 219, 248, 4, 0, 230, 247, 150, ++ 253, 221, 248, 8, 192, 224, 70, 57, 224, 148, 248, 111, 32, 148, 248, ++ 112, 48, 67, 234, 2, 35, 34, 138, 211, 24, 155, 178, 26, 10, 66, 234, ++ 3, 35, 35, 130, 13, 35, 51, 96, 79, 240, 1, 9, 43, 224, 32, 70, 7, 240, ++ 3, 1, 6, 241, 140, 2, 5, 171, 225, 243, 188, 242, 232, 177, 10, 241, ++ 77, 0, 5, 169, 16, 34, 221, 247, 161, 253, 107, 104, 65, 70, 218, 104, ++ 88, 70, 242, 247, 129, 254, 3, 155, 219, 248, 8, 0, 211, 248, 192, 16, ++ 79, 244, 122, 114, 0, 35, 244, 243, 79, 245, 79, 240, 1, 8, 5, 224, ++ 152, 70, 3, 224, 79, 240, 0, 8, 0, 224, 128, 70, 64, 70, 27, 176, 189, ++ 232, 240, 143, 3, 35, 227, 115, 182, 248, 206, 48, 80, 70, 128, 43, ++ 20, 191, 254, 35, 2, 35, 0, 248, 5, 59, 6, 241, 92, 1, 8, 34, 221, 247, ++ 116, 253, 185, 241, 0, 15, 207, 208, 191, 231, 45, 233, 240, 65, 4, ++ 70, 0, 40, 95, 208, 3, 105, 0, 43, 92, 208, 94, 105, 0, 46, 89, 208, ++ 179, 104, 0, 43, 86, 208, 91, 104, 195, 88, 0, 43, 82, 208, 93, 104, ++ 0, 45, 79, 208, 131, 104, 95, 5, 7, 212, 135, 108, 7, 240, 2, 7, 0, ++ 47, 20, 191, 1, 39, 2, 39, 0, 224, 3, 39, 43, 104, 12, 43, 19, 208, ++ 13, 43, 33, 208, 11, 43, 60, 209, 149, 248, 208, 48, 90, 28, 2, 43, ++ 133, 248, 208, 32, 31, 216, 5, 241, 92, 0, 8, 33, 225, 243, 70, 242, ++ 48, 70, 57, 70, 0, 34, 39, 224, 149, 248, 208, 48, 90, 28, 2, 43, 133, ++ 248, 208, 32, 15, 216, 5, 241, 92, 0, 8, 33, 225, 243, 54, 242, 48, ++ 70, 57, 70, 2, 34, 23, 224, 149, 248, 208, 48, 90, 28, 2, 43, 133, 248, ++ 208, 32, 4, 217, 48, 70, 189, 232, 240, 65, 29, 240, 70, 159, 8, 33, ++ 5, 241, 92, 0, 225, 243, 33, 242, 181, 248, 206, 32, 48, 70, 4, 42, ++ 57, 70, 24, 191, 6, 34, 35, 70, 189, 232, 240, 65, 255, 247, 69, 189, ++ 189, 232, 240, 129, 45, 233, 255, 65, 4, 70, 0, 33, 1, 168, 12, 34, ++ 223, 243, 129, 240, 0, 44, 81, 208, 35, 104, 0, 43, 78, 208, 98, 104, ++ 0, 42, 75, 208, 211, 248, 36, 1, 1, 169, 69, 240, 224, 223, 0, 37, 43, ++ 224, 150, 248, 36, 48, 218, 6, 39, 213, 163, 104, 91, 104, 243, 88, ++ 27, 179, 211, 248, 4, 128, 184, 241, 0, 15, 30, 208, 21, 185, 32, 70, ++ 30, 240, 167, 216, 13, 35, 200, 248, 0, 48, 179, 104, 91, 5, 7, 212, ++ 183, 108, 7, 240, 2, 7, 0, 47, 20, 191, 1, 39, 2, 39, 0, 224, 3, 39, ++ 8, 241, 92, 0, 8, 33, 225, 243, 215, 241, 32, 70, 57, 70, 6, 34, 51, ++ 70, 255, 247, 1, 253, 1, 53, 35, 104, 1, 169, 211, 248, 36, 1, 24, 240, ++ 84, 252, 6, 70, 0, 40, 202, 209, 85, 177, 212, 248, 12, 33, 90, 177, ++ 35, 104, 212, 248, 8, 17, 152, 104, 51, 70, 244, 243, 112, 244, 3, 224, ++ 35, 138, 35, 240, 1, 3, 35, 130, 189, 232, 255, 129, 45, 233, 240, 79, ++ 5, 70, 137, 176, 14, 70, 208, 248, 0, 160, 31, 70, 0, 43, 0, 240, 93, ++ 129, 131, 104, 91, 104, 251, 88, 92, 104, 211, 248, 8, 128, 0, 44, 0, ++ 240, 86, 129, 184, 241, 0, 15, 0, 240, 84, 129, 187, 104, 88, 5, 7, ++ 212, 187, 108, 3, 240, 2, 3, 0, 43, 20, 191, 1, 35, 2, 35, 0, 224, 3, ++ 35, 180, 248, 206, 0, 7, 147, 4, 40, 2, 208, 128, 40, 64, 240, 66, 129, ++ 51, 125, 150, 248, 19, 144, 67, 234, 9, 41, 25, 240, 3, 3, 6, 147, 2, ++ 209, 228, 247, 35, 254, 6, 144, 4, 241, 92, 11, 1, 32, 8, 35, 6, 241, ++ 23, 1, 90, 70, 224, 243, 180, 245, 131, 69, 0, 240, 44, 129, 35, 104, ++ 12, 43, 0, 240, 158, 128, 13, 43, 0, 240, 245, 128, 11, 43, 64, 240, ++ 34, 129, 9, 244, 220, 115, 179, 245, 132, 127, 64, 240, 28, 129, 4, ++ 241, 60, 12, 96, 70, 6, 241, 31, 1, 32, 34, 205, 248, 16, 192, 221, ++ 247, 77, 252, 187, 104, 105, 104, 19, 244, 128, 111, 221, 248, 16, 192, ++ 7, 241, 20, 3, 18, 208, 8, 241, 72, 2, 0, 146, 184, 248, 6, 32, 24, ++ 70, 1, 146, 4, 241, 140, 2, 2, 146, 162, 138, 194, 49, 3, 146, 99, 70, ++ 4, 241, 28, 2, 224, 243, 16, 245, 32, 224, 24, 70, 194, 49, 6, 34, 5, ++ 147, 205, 248, 16, 192, 221, 247, 22, 252, 5, 155, 221, 248, 16, 192, ++ 0, 40, 0, 240, 232, 128, 8, 241, 72, 2, 0, 146, 184, 248, 6, 32, 105, ++ 104, 1, 146, 4, 241, 140, 2, 2, 146, 162, 138, 24, 70, 3, 146, 194, ++ 49, 4, 241, 28, 2, 99, 70, 224, 243, 238, 246, 25, 244, 128, 127, 16, ++ 208, 51, 138, 26, 10, 66, 234, 3, 35, 155, 178, 92, 43, 64, 242, 164, ++ 128, 48, 70, 6, 153, 4, 241, 140, 2, 224, 243, 237, 247, 0, 40, 0, 240, ++ 193, 128, 51, 138, 26, 10, 66, 234, 3, 34, 146, 178, 94, 42, 64, 242, ++ 147, 128, 150, 248, 111, 16, 150, 248, 112, 48, 67, 234, 1, 35, 3, 241, ++ 95, 1, 138, 66, 192, 240, 136, 128, 67, 177, 226, 136, 154, 66, 5, 209, ++ 6, 241, 113, 0, 225, 104, 221, 247, 205, 251, 48, 177, 104, 104, 7, ++ 241, 20, 1, 17, 34, 82, 240, 247, 219, 156, 224, 132, 248, 208, 0, 43, ++ 104, 216, 248, 192, 16, 152, 104, 244, 243, 180, 243, 88, 70, 8, 33, ++ 225, 243, 214, 240, 40, 70, 7, 153, 2, 34, 59, 70, 255, 247, 0, 252, ++ 137, 224, 9, 244, 216, 115, 179, 245, 128, 127, 64, 240, 132, 128, 25, ++ 244, 128, 127, 7, 208, 48, 70, 6, 153, 4, 241, 140, 2, 224, 243, 164, ++ 247, 0, 40, 120, 208, 0, 35, 132, 248, 208, 48, 43, 104, 216, 248, 192, ++ 16, 152, 104, 244, 243, 143, 243, 34, 138, 7, 241, 20, 6, 35, 139, 80, ++ 70, 141, 232, 68, 0, 105, 104, 4, 241, 172, 2, 82, 240, 93, 219, 180, ++ 248, 206, 48, 128, 43, 2, 209, 16, 35, 35, 96, 24, 224, 4, 43, 22, 209, ++ 13, 35, 35, 96, 43, 138, 217, 7, 7, 212, 40, 70, 29, 240, 84, 223, 40, ++ 70, 29, 240, 117, 223, 1, 48, 77, 208, 88, 70, 8, 33, 225, 243, 143, ++ 240, 40, 70, 7, 153, 4, 34, 59, 70, 255, 247, 185, 251, 180, 248, 206, ++ 48, 128, 43, 1, 208, 4, 43, 8, 209, 107, 104, 80, 70, 219, 104, 121, ++ 33, 0, 147, 50, 70, 6, 35, 237, 247, 133, 249, 180, 248, 206, 48, 128, ++ 43, 48, 209, 35, 224, 25, 244, 128, 127, 21, 208, 51, 138, 26, 10, 66, ++ 234, 3, 35, 155, 178, 92, 43, 7, 216, 218, 248, 0, 48, 211, 248, 136, ++ 48, 90, 110, 1, 50, 90, 102, 29, 224, 48, 70, 6, 153, 4, 241, 140, 2, ++ 224, 243, 65, 247, 176, 177, 0, 35, 132, 248, 208, 48, 43, 104, 216, ++ 248, 192, 16, 152, 104, 244, 243, 45, 243, 16, 35, 35, 96, 40, 70, 29, ++ 240, 110, 221, 7, 224, 24, 70, 6, 224, 32, 70, 4, 224, 64, 70, 2, 224, ++ 0, 32, 0, 224, 1, 32, 9, 176, 189, 232, 240, 143, 45, 233, 243, 71, ++ 11, 158, 4, 70, 144, 70, 154, 70, 137, 70, 0, 41, 71, 208, 0, 46, 71, ++ 208, 131, 104, 0, 104, 91, 104, 243, 88, 93, 104, 159, 104, 41, 70, ++ 28, 240, 119, 251, 9, 35, 43, 96, 153, 248, 0, 48, 32, 104, 48, 43, ++ 99, 104, 41, 70, 179, 248, 90, 48, 74, 70, 12, 191, 3, 240, 128, 3, ++ 3, 240, 4, 3, 165, 248, 206, 48, 10, 155, 205, 248, 0, 160, 1, 147, ++ 67, 70, 82, 240, 126, 219, 40, 179, 99, 105, 1, 43, 1, 209, 248, 136, ++ 0, 179, 0, 35, 133, 248, 208, 48, 35, 104, 215, 248, 192, 16, 152, 104, ++ 244, 243, 223, 242, 10, 35, 43, 96, 179, 104, 91, 5, 7, 212, 177, 108, ++ 1, 240, 2, 1, 0, 41, 20, 191, 1, 33, 2, 33, 0, 224, 3, 33, 32, 70, 0, ++ 34, 51, 70, 255, 247, 34, 251, 1, 32, 2, 224, 8, 70, 0, 224, 48, 70, ++ 189, 232, 252, 135, 112, 71, 112, 181, 12, 70, 25, 179, 145, 248, 172, ++ 48, 3, 179, 145, 248, 55, 49, 235, 185, 209, 248, 64, 81, 173, 185, ++ 13, 78, 72, 105, 214, 248, 200, 48, 152, 71, 3, 40, 9, 217, 13, 224, ++ 212, 248, 64, 49, 19, 185, 196, 248, 64, 1, 1, 224, 3, 136, 235, 130, ++ 5, 70, 51, 111, 96, 105, 152, 71, 0, 40, 241, 209, 96, 105, 16, 177, ++ 1, 75, 91, 111, 152, 71, 112, 189, 208, 134, 135, 0, 208, 248, 148, ++ 48, 24, 106, 4, 75, 152, 66, 12, 191, 79, 244, 22, 96, 79, 244, 150, ++ 112, 112, 71, 0, 191, 80, 32, 8, 0, 11, 104, 210, 43, 7, 216, 130, 111, ++ 80, 139, 40, 177, 0, 235, 67, 0, 8, 96, 1, 32, 112, 71, 0, 32, 112, ++ 71, 0, 0, 45, 233, 248, 67, 12, 70, 208, 248, 136, 144, 6, 70, 1, 70, ++ 35, 70, 0, 34, 10, 224, 221, 7, 5, 213, 77, 105, 29, 185, 1, 37, 149, ++ 64, 36, 234, 5, 4, 1, 50, 91, 8, 4, 49, 0, 43, 242, 209, 7, 70, 37, ++ 70, 21, 224, 234, 7, 17, 213, 17, 75, 120, 105, 27, 106, 152, 71, 65, ++ 246, 65, 120, 2, 224, 10, 32, 227, 243, 98, 241, 217, 248, 80, 49, 19, ++ 244, 127, 79, 2, 208, 184, 241, 1, 8, 244, 209, 109, 8, 4, 55, 0, 45, ++ 231, 209, 7, 224, 227, 7, 3, 213, 5, 75, 112, 105, 91, 106, 152, 71, ++ 100, 8, 4, 54, 0, 44, 245, 209, 189, 232, 248, 131, 0, 191, 208, 134, ++ 135, 0, 16, 181, 4, 70, 192, 111, 10, 70, 1, 107, 65, 242, 107, 3, 153, ++ 66, 20, 209, 131, 106, 163, 245, 153, 115, 24, 43, 15, 216, 8, 73, 153, ++ 64, 12, 213, 90, 185, 4, 33, 2, 35, 233, 243, 66, 245, 4, 33, 224, 111, ++ 10, 70, 2, 35, 189, 232, 16, 64, 233, 243, 32, 181, 16, 189, 0, 191, ++ 128, 64, 0, 192, 79, 240, 255, 48, 112, 71, 3, 104, 45, 233, 240, 65, ++ 79, 244, 64, 65, 4, 70, 0, 34, 211, 248, 116, 100, 208, 248, 136, 112, ++ 32, 240, 22, 220, 163, 111, 27, 105, 19, 177, 32, 70, 31, 240, 4, 216, ++ 37, 109, 150, 248, 28, 49, 21, 240, 2, 5, 24, 191, 79, 244, 0, 117, ++ 59, 179, 214, 248, 32, 49, 35, 187, 150, 248, 232, 16, 1, 34, 224, 111, ++ 233, 243, 186, 244, 150, 248, 88, 17, 255, 41, 3, 208, 224, 111, 1, ++ 34, 233, 243, 178, 244, 150, 248, 232, 48, 150, 248, 88, 33, 1, 33, ++ 17, 250, 3, 243, 255, 42, 2, 208, 17, 250, 2, 242, 19, 67, 183, 248, ++ 158, 4, 67, 234, 5, 2, 3, 67, 66, 234, 5, 1, 167, 248, 158, 52, 21, ++ 70, 0, 224, 41, 70, 224, 111, 42, 70, 0, 35, 189, 232, 240, 65, 233, ++ 243, 171, 180, 56, 181, 208, 248, 68, 49, 4, 70, 208, 248, 136, 80, ++ 243, 185, 208, 248, 240, 48, 1, 59, 192, 248, 240, 48, 195, 185, 213, ++ 248, 32, 49, 3, 104, 147, 248, 42, 56, 11, 177, 3, 33, 0, 224, 1, 33, ++ 10, 70, 32, 240, 190, 219, 1, 35, 197, 248, 40, 49, 213, 248, 32, 49, ++ 213, 248, 40, 49, 32, 70, 4, 33, 189, 232, 56, 64, 33, 240, 19, 157, ++ 56, 189, 208, 248, 136, 48, 211, 248, 128, 1, 1, 177, 8, 96, 18, 177, ++ 211, 248, 132, 49, 19, 96, 112, 71, 0, 0, 45, 233, 240, 79, 153, 70, ++ 3, 104, 133, 176, 27, 104, 4, 70, 140, 70, 147, 248, 62, 160, 26, 177, ++ 219, 105, 211, 248, 64, 176, 1, 224, 79, 240, 255, 59, 79, 240, 0, 8, ++ 67, 70, 71, 70, 70, 70, 69, 70, 212, 248, 64, 33, 82, 177, 78, 73, 208, ++ 138, 9, 104, 2, 146, 81, 248, 32, 16, 196, 248, 64, 17, 0, 33, 209, ++ 130, 13, 224, 4, 235, 140, 2, 80, 105, 72, 74, 1, 147, 205, 248, 0, ++ 192, 18, 111, 144, 71, 1, 155, 2, 144, 221, 248, 0, 192, 40, 179, 2, ++ 154, 146, 104, 162, 248, 2, 192, 186, 241, 0, 15, 17, 208, 154, 178, ++ 32, 104, 2, 169, 1, 147, 205, 248, 0, 192, 8, 240, 222, 216, 1, 155, ++ 221, 248, 0, 192, 40, 185, 14, 185, 178, 70, 2, 224, 168, 70, 130, 70, ++ 6, 70, 2, 154, 58, 177, 1, 51, 30, 177, 17, 136, 241, 130, 22, 70, 1, ++ 224, 22, 70, 21, 70, 1, 55, 95, 69, 189, 211, 4, 235, 140, 3, 88, 105, ++ 46, 75, 91, 111, 152, 71, 184, 241, 0, 15, 4, 208, 32, 104, 65, 70, ++ 242, 247, 184, 253, 8, 224, 186, 241, 0, 15, 5, 208, 37, 177, 32, 104, ++ 41, 70, 242, 247, 175, 253, 58, 224, 32, 70, 3, 169, 0, 34, 255, 247, ++ 127, 255, 49, 224, 32, 75, 234, 138, 27, 104, 83, 248, 34, 96, 0, 35, ++ 235, 130, 35, 104, 173, 104, 27, 104, 41, 70, 211, 248, 136, 48, 211, ++ 248, 20, 35, 1, 50, 195, 248, 20, 35, 3, 155, 171, 97, 212, 248, 148, ++ 48, 88, 106, 9, 240, 222, 251, 235, 138, 19, 244, 0, 98, 3, 244, 255, ++ 97, 24, 191, 79, 244, 64, 66, 3, 244, 128, 83, 66, 234, 209, 2, 0, 43, ++ 12, 191, 79, 244, 128, 83, 79, 244, 192, 83, 19, 67, 235, 130, 32, 104, ++ 2, 153, 244, 247, 107, 248, 53, 70, 2, 149, 0, 45, 202, 209, 217, 248, ++ 0, 48, 95, 69, 59, 68, 201, 248, 0, 48, 52, 191, 0, 32, 1, 32, 5, 176, ++ 189, 232, 240, 143, 0, 191, 32, 7, 0, 0, 208, 134, 135, 0, 56, 181, ++ 3, 104, 4, 70, 27, 104, 147, 248, 32, 80, 0, 45, 36, 209, 192, 111, ++ 230, 247, 251, 254, 1, 33, 32, 70, 33, 240, 239, 218, 224, 111, 233, ++ 243, 198, 241, 41, 70, 32, 70, 31, 240, 80, 217, 224, 111, 233, 243, ++ 83, 244, 32, 70, 30, 240, 132, 222, 212, 248, 148, 48, 88, 106, 8, 240, ++ 20, 252, 35, 104, 132, 248, 118, 80, 27, 104, 1, 34, 131, 248, 32, 32, ++ 224, 111, 189, 232, 56, 64, 230, 247, 162, 190, 56, 189, 208, 248, 148, ++ 48, 112, 181, 4, 70, 0, 43, 45, 208, 40, 32, 226, 243, 175, 247, 0, ++ 37, 180, 248, 18, 97, 2, 224, 10, 32, 226, 243, 168, 247, 64, 33, 32, ++ 70, 32, 240, 222, 220, 4, 40, 5, 208, 64, 33, 32, 70, 32, 240, 216, ++ 220, 7, 40, 5, 209, 10, 61, 6, 241, 19, 3, 91, 25, 9, 43, 234, 216, ++ 64, 33, 32, 70, 32, 240, 204, 220, 4, 40, 1, 208, 7, 40, 3, 209, 3, ++ 35, 196, 248, 68, 49, 112, 189, 32, 70, 64, 33, 189, 232, 112, 64, 32, ++ 240, 190, 156, 112, 189, 144, 248, 172, 32, 160, 248, 160, 16, 58, 177, ++ 3, 104, 211, 248, 116, 52, 147, 248, 28, 49, 11, 185, 31, 240, 232, ++ 154, 112, 71, 45, 233, 240, 65, 4, 70, 0, 104, 13, 70, 208, 248, 116, ++ 100, 157, 248, 24, 16, 150, 248, 28, 1, 157, 248, 28, 112, 0, 40, 115, ++ 208, 10, 177, 134, 248, 172, 80, 9, 177, 134, 248, 69, 49, 148, 248, ++ 10, 49, 0, 43, 105, 208, 142, 33, 32, 70, 32, 240, 146, 220, 65, 0, ++ 137, 178, 1, 241, 78, 8, 76, 49, 1, 45, 148, 191, 0, 35, 1, 35, 1, 61, ++ 237, 178, 214, 248, 32, 33, 1, 45, 134, 248, 29, 49, 134, 248, 72, 49, ++ 150, 248, 172, 48, 140, 191, 0, 37, 1, 37, 1, 42, 31, 250, 136, 248, ++ 137, 178, 134, 248, 74, 81, 134, 248, 69, 49, 24, 208, 2, 211, 2, 42, ++ 41, 209, 31, 224, 1, 34, 32, 70, 33, 240, 24, 218, 150, 248, 232, 48, ++ 150, 248, 88, 33, 21, 250, 3, 243, 255, 42, 219, 178, 134, 248, 176, ++ 48, 25, 208, 133, 240, 1, 1, 17, 250, 2, 242, 19, 67, 17, 224, 32, 70, ++ 2, 34, 33, 240, 3, 218, 21, 177, 150, 248, 46, 49, 9, 224, 150, 248, ++ 44, 49, 6, 224, 32, 70, 33, 240, 249, 217, 150, 248, 232, 48, 21, 250, ++ 3, 243, 134, 248, 176, 48, 32, 70, 65, 70, 150, 248, 176, 32, 33, 240, ++ 237, 217, 143, 177, 212, 248, 136, 48, 211, 248, 88, 33, 208, 7, 11, ++ 212, 179, 248, 182, 54, 217, 7, 7, 212, 35, 104, 41, 70, 27, 106, 24, ++ 105, 189, 232, 240, 65, 9, 240, 14, 185, 189, 232, 240, 129, 112, 181, ++ 4, 70, 208, 248, 136, 0, 0, 34, 7, 33, 212, 248, 216, 48, 13, 10, 51, ++ 248, 18, 48, 206, 178, 203, 24, 155, 178, 1, 59, 70, 234, 3, 38, 5, ++ 240, 3, 5, 3, 244, 64, 115, 29, 67, 111, 234, 66, 99, 111, 234, 83, ++ 67, 160, 248, 64, 53, 160, 248, 32, 101, 160, 248, 44, 85, 160, 248, ++ 64, 53, 212, 248, 216, 48, 51, 248, 18, 80, 1, 50, 73, 25, 6, 42, 137, ++ 178, 218, 209, 32, 70, 152, 33, 90, 136, 33, 240, 168, 217, 212, 248, ++ 216, 48, 32, 70, 154, 33, 154, 136, 33, 240, 161, 217, 212, 248, 216, ++ 48, 32, 70, 218, 136, 27, 136, 156, 33, 67, 234, 2, 34, 146, 178, 33, ++ 240, 150, 217, 212, 248, 216, 48, 32, 70, 90, 137, 27, 137, 158, 33, ++ 67, 234, 2, 34, 146, 178, 33, 240, 139, 217, 32, 70, 189, 232, 112, ++ 64, 30, 240, 92, 159, 112, 181, 146, 33, 4, 70, 133, 111, 6, 104, 32, ++ 240, 209, 219, 163, 111, 64, 0, 104, 131, 90, 139, 0, 42, 69, 208, 26, ++ 106, 114, 177, 218, 127, 98, 177, 0, 37, 163, 111, 32, 70, 89, 139, ++ 27, 106, 73, 25, 90, 91, 2, 53, 33, 240, 107, 217, 236, 45, 244, 209, ++ 47, 224, 1, 34, 218, 119, 214, 248, 68, 54, 0, 43, 46, 208, 0, 37, 29, ++ 224, 3, 235, 133, 3, 218, 136, 178, 245, 122, 127, 11, 211, 161, 111, ++ 73, 106, 145, 177, 162, 245, 122, 114, 146, 178, 7, 42, 13, 216, 27, ++ 137, 33, 248, 18, 48, 9, 224, 210, 42, 7, 216, 161, 111, 32, 70, 73, ++ 139, 1, 235, 66, 1, 26, 137, 33, 240, 68, 217, 1, 53, 173, 178, 214, ++ 248, 68, 54, 154, 136, 170, 66, 220, 216, 26, 120, 18, 177, 162, 111, ++ 91, 136, 19, 129, 32, 70, 189, 232, 112, 64, 30, 240, 109, 156, 112, ++ 189, 3, 104, 112, 181, 142, 33, 211, 248, 116, 84, 4, 70, 32, 240, 124, ++ 219, 149, 248, 28, 33, 70, 0, 182, 178, 0, 42, 59, 208, 213, 248, 32, ++ 49, 6, 241, 80, 1, 148, 54, 1, 43, 137, 178, 182, 178, 28, 208, 2, 211, ++ 2, 43, 56, 209, 34, 224, 149, 248, 232, 32, 1, 32, 16, 250, 2, 242, ++ 149, 248, 88, 49, 146, 178, 255, 43, 3, 208, 16, 250, 3, 243, 26, 67, ++ 146, 178, 32, 70, 33, 240, 6, 217, 149, 248, 232, 48, 1, 34, 154, 64, ++ 32, 70, 49, 70, 146, 178, 26, 224, 32, 70, 181, 248, 42, 33, 33, 240, ++ 249, 216, 32, 70, 49, 70, 181, 248, 44, 33, 16, 224, 149, 248, 232, ++ 48, 1, 34, 154, 64, 32, 70, 146, 178, 33, 240, 236, 216, 32, 70, 49, ++ 70, 0, 34, 4, 224, 76, 54, 79, 246, 254, 113, 32, 70, 49, 64, 189, 232, ++ 112, 64, 33, 240, 223, 152, 112, 189, 208, 248, 148, 16, 16, 181, 8, ++ 49, 4, 70, 31, 240, 71, 218, 3, 73, 32, 70, 189, 232, 16, 64, 31, 240, ++ 41, 154, 0, 191, 244, 44, 4, 0, 208, 248, 240, 48, 112, 181, 1, 51, ++ 1, 43, 4, 70, 208, 248, 136, 80, 192, 248, 240, 48, 65, 216, 3, 104, ++ 147, 248, 42, 56, 91, 177, 2, 33, 0, 34, 32, 240, 213, 216, 32, 70, ++ 64, 242, 35, 17, 0, 34, 189, 232, 112, 64, 33, 240, 165, 152, 4, 33, ++ 33, 240, 58, 218, 213, 248, 32, 49, 1, 51, 36, 208, 213, 248, 40, 33, ++ 81, 28, 32, 208, 18, 240, 1, 2, 1, 208, 4, 35, 20, 224, 32, 70, 1, 33, ++ 32, 240, 185, 216, 66, 242, 109, 6, 2, 224, 10, 32, 226, 243, 177, 245, ++ 213, 248, 40, 49, 219, 7, 1, 212, 1, 62, 246, 209, 213, 248, 40, 49, ++ 216, 7, 3, 212, 5, 35, 196, 248, 68, 49, 112, 189, 213, 248, 32, 49, ++ 1, 51, 5, 209, 35, 104, 152, 104, 189, 232, 112, 64, 231, 247, 158, ++ 187, 112, 189, 112, 181, 4, 70, 13, 70, 22, 70, 255, 247, 172, 255, ++ 32, 70, 41, 70, 255, 247, 6, 252, 32, 70, 30, 240, 47, 222, 35, 104, ++ 26, 104, 146, 248, 156, 32, 1, 42, 4, 209, 211, 248, 52, 1, 41, 70, ++ 248, 247, 228, 249, 32, 70, 255, 247, 168, 252, 32, 104, 41, 70, 50, ++ 70, 237, 247, 228, 248, 32, 70, 41, 70, 189, 232, 112, 64, 30, 240, ++ 78, 157, 45, 233, 240, 65, 144, 248, 9, 113, 4, 70, 13, 70, 22, 70, ++ 152, 70, 23, 185, 57, 70, 30, 240, 230, 222, 212, 248, 148, 48, 214, ++ 241, 1, 1, 88, 106, 164, 248, 188, 80, 56, 191, 0, 33, 8, 240, 180, ++ 249, 148, 248, 172, 48, 131, 185, 148, 248, 10, 49, 51, 177, 212, 248, ++ 148, 48, 65, 70, 88, 106, 42, 70, 8, 240, 194, 254, 212, 248, 148, 48, ++ 41, 70, 88, 106, 8, 240, 101, 252, 86, 224, 180, 248, 70, 48, 68, 242, ++ 192, 50, 147, 66, 62, 208, 26, 216, 68, 242, 174, 50, 147, 66, 57, 208, ++ 10, 216, 68, 242, 163, 50, 147, 66, 52, 208, 68, 242, 171, 50, 147, ++ 66, 48, 208, 68, 242, 160, 50, 36, 224, 68, 242, 183, 50, 147, 66, 41, ++ 208, 68, 242, 186, 50, 147, 66, 37, 208, 68, 242, 177, 50, 25, 224, ++ 68, 242, 223, 50, 147, 66, 30, 208, 10, 216, 68, 242, 214, 50, 147, ++ 66, 25, 208, 68, 242, 217, 50, 147, 66, 21, 208, 68, 242, 211, 50, 9, ++ 224, 68, 242, 233, 50, 147, 66, 14, 208, 68, 242, 236, 50, 147, 66, ++ 10, 208, 68, 242, 227, 50, 147, 66, 6, 208, 212, 248, 148, 48, 88, 106, ++ 8, 240, 36, 252, 133, 66, 5, 208, 212, 248, 148, 48, 41, 70, 88, 106, ++ 9, 240, 79, 252, 212, 248, 148, 48, 65, 70, 88, 106, 42, 70, 8, 240, ++ 105, 254, 32, 70, 49, 70, 0, 34, 32, 240, 108, 216, 47, 185, 32, 70, ++ 2, 33, 189, 232, 240, 65, 30, 240, 105, 158, 189, 232, 240, 129, 56, ++ 181, 67, 124, 4, 70, 139, 66, 13, 70, 6, 208, 57, 177, 32, 240, 172, ++ 216, 56, 185, 79, 240, 255, 48, 56, 189, 0, 32, 56, 189, 79, 240, 255, ++ 48, 56, 189, 0, 32, 132, 248, 118, 0, 101, 116, 56, 189, 45, 233, 240, ++ 65, 138, 176, 16, 159, 152, 70, 0, 35, 3, 47, 4, 70, 13, 70, 17, 158, ++ 8, 147, 9, 147, 12, 217, 4, 34, 8, 168, 65, 70, 220, 247, 208, 253, ++ 7, 47, 5, 217, 9, 168, 8, 241, 4, 1, 4, 34, 220, 247, 200, 253, 93, ++ 45, 8, 153, 112, 208, 39, 216, 38, 45, 0, 240, 168, 128, 16, 216, 23, ++ 45, 8, 216, 20, 45, 128, 240, 81, 129, 12, 45, 74, 208, 14, 45, 64, ++ 240, 64, 129, 74, 224, 32, 45, 124, 208, 33, 45, 64, 240, 58, 129, 106, ++ 224, 82, 45, 0, 240, 224, 128, 6, 216, 39, 45, 0, 240, 129, 128, 68, ++ 45, 64, 240, 47, 129, 156, 224, 90, 45, 59, 208, 92, 45, 72, 208, 84, ++ 45, 64, 240, 39, 129, 210, 224, 112, 45, 0, 240, 47, 129, 20, 216, 102, ++ 45, 0, 240, 241, 128, 6, 216, 99, 45, 0, 240, 203, 128, 100, 45, 64, ++ 240, 24, 129, 228, 224, 105, 45, 0, 240, 238, 128, 106, 45, 0, 240, ++ 254, 128, 104, 45, 64, 240, 14, 129, 227, 224, 121, 45, 0, 240, 4, 129, ++ 6, 216, 113, 45, 0, 240, 247, 128, 120, 45, 64, 240, 3, 129, 254, 224, ++ 124, 45, 192, 240, 255, 128, 125, 45, 64, 242, 8, 129, 140, 45, 64, ++ 240, 249, 128, 31, 224, 224, 111, 233, 243, 73, 240, 64, 224, 212, 248, ++ 128, 0, 131, 73, 2, 224, 212, 248, 128, 0, 130, 73, 222, 243, 89, 247, ++ 32, 177, 0, 33, 10, 70, 227, 247, 42, 253, 49, 224, 79, 240, 255, 51, ++ 51, 96, 224, 224, 148, 248, 28, 49, 177, 224, 0, 49, 24, 191, 1, 33, ++ 132, 248, 28, 17, 172, 224, 9, 154, 18, 155, 154, 66, 0, 243, 214, 128, ++ 32, 70, 51, 70, 30, 240, 23, 218, 197, 224, 7, 47, 64, 242, 206, 128, ++ 0, 41, 192, 242, 206, 128, 2, 35, 0, 147, 224, 111, 1, 34, 9, 155, 233, ++ 243, 177, 240, 148, 224, 3, 47, 64, 242, 192, 128, 0, 41, 192, 242, ++ 192, 128, 2, 35, 0, 147, 0, 34, 224, 111, 19, 70, 233, 243, 163, 240, ++ 48, 96, 133, 224, 11, 47, 64, 242, 177, 128, 0, 41, 192, 242, 177, 128, ++ 9, 155, 0, 43, 172, 191, 111, 240, 22, 5, 111, 240, 1, 5, 179, 224, ++ 7, 47, 64, 242, 163, 128, 0, 41, 192, 242, 163, 128, 9, 154, 0, 42, ++ 192, 242, 159, 128, 0, 37, 0, 149, 224, 111, 43, 70, 233, 243, 143, ++ 240, 48, 96, 161, 224, 35, 104, 152, 104, 243, 243, 117, 245, 128, 70, ++ 224, 111, 233, 243, 53, 240, 16, 179, 224, 111, 233, 243, 77, 240, 7, ++ 70, 24, 185, 224, 111, 1, 33, 233, 243, 99, 241, 51, 104, 224, 111, ++ 0, 147, 115, 104, 8, 54, 1, 147, 0, 35, 2, 150, 3, 147, 65, 104, 212, ++ 248, 136, 32, 163, 104, 222, 243, 12, 240, 0, 40, 20, 191, 79, 240, ++ 255, 53, 0, 37, 111, 185, 224, 111, 57, 70, 233, 243, 74, 241, 8, 224, ++ 224, 111, 233, 243, 2, 240, 0, 40, 20, 191, 111, 240, 29, 5, 111, 240, ++ 22, 5, 35, 104, 65, 70, 152, 104, 243, 243, 71, 245, 102, 224, 212, ++ 248, 92, 49, 38, 224, 212, 248, 96, 49, 35, 224, 49, 70, 16, 34, 4, ++ 168, 220, 247, 193, 252, 5, 157, 12, 53, 40, 70, 229, 247, 86, 252, ++ 4, 70, 0, 40, 75, 208, 49, 70, 42, 70, 220, 247, 181, 252, 35, 136, ++ 32, 70, 27, 11, 1, 43, 4, 208, 229, 247, 75, 252, 79, 240, 255, 53, ++ 69, 224, 229, 247, 70, 252, 61, 224, 35, 104, 147, 248, 0, 54, 1, 224, ++ 79, 244, 176, 99, 51, 96, 0, 37, 57, 224, 180, 248, 30, 49, 249, 231, ++ 141, 178, 1, 45, 46, 216, 3, 35, 164, 248, 30, 81, 32, 70, 0, 147, 2, ++ 33, 32, 34, 29, 177, 19, 70, 31, 240, 142, 222, 235, 231, 43, 70, 31, ++ 240, 138, 222, 35, 224, 32, 70, 30, 240, 50, 219, 91, 231, 75, 28, 2, ++ 43, 26, 216, 32, 70, 73, 178, 32, 240, 206, 217, 5, 70, 22, 224, 196, ++ 248, 56, 17, 215, 231, 212, 248, 56, 49, 211, 231, 111, 240, 29, 5, ++ 13, 224, 111, 240, 13, 5, 10, 224, 111, 240, 1, 5, 7, 224, 111, 240, ++ 26, 5, 4, 224, 111, 240, 22, 5, 1, 224, 111, 240, 28, 5, 40, 70, 10, ++ 176, 189, 232, 240, 129, 0, 191, 173, 86, 136, 0, 181, 86, 136, 0, 56, ++ 181, 3, 104, 4, 70, 24, 105, 46, 240, 128, 218, 0, 40, 53, 209, 148, ++ 248, 8, 81, 0, 45, 49, 209, 16, 33, 10, 70, 43, 70, 224, 111, 230, 247, ++ 114, 250, 224, 111, 230, 247, 127, 250, 212, 248, 148, 48, 41, 70, 88, ++ 106, 8, 240, 29, 250, 212, 248, 148, 48, 41, 70, 88, 106, 7, 240, 107, ++ 255, 32, 70, 41, 70, 31, 240, 213, 219, 180, 248, 116, 48, 51, 177, ++ 224, 111, 79, 240, 255, 49, 42, 70, 43, 70, 232, 243, 241, 246, 0, 37, ++ 224, 111, 41, 70, 132, 248, 10, 81, 232, 243, 54, 245, 212, 248, 148, ++ 48, 41, 70, 88, 106, 189, 232, 56, 64, 7, 240, 102, 191, 56, 189, 45, ++ 233, 240, 71, 154, 70, 131, 111, 4, 70, 95, 139, 13, 70, 22, 70, 208, ++ 248, 136, 144, 15, 179, 7, 241, 8, 1, 32, 240, 54, 216, 128, 70, 216, ++ 177, 35, 109, 219, 7, 17, 213, 99, 109, 24, 6, 14, 212, 227, 111, 154, ++ 105, 145, 0, 2, 213, 218, 105, 210, 7, 4, 213, 219, 105, 216, 7, 1, ++ 212, 89, 7, 2, 213, 227, 110, 154, 0, 70, 212, 32, 70, 7, 241, 144, ++ 1, 32, 240, 26, 216, 4, 40, 63, 216, 163, 111, 154, 127, 1, 50, 154, ++ 119, 163, 111, 154, 127, 5, 42, 2, 216, 179, 248, 28, 128, 3, 224, 5, ++ 34, 154, 119, 79, 240, 0, 8, 163, 111, 32, 70, 163, 248, 28, 128, 7, ++ 241, 248, 1, 165, 248, 0, 128, 31, 240, 255, 223, 217, 248, 32, 49, ++ 170, 248, 0, 0, 155, 7, 26, 213, 163, 111, 185, 248, 194, 6, 154, 125, ++ 128, 178, 79, 246, 255, 113, 42, 177, 136, 66, 16, 209, 0, 34, 154, ++ 117, 163, 111, 1, 224, 136, 66, 1, 209, 218, 117, 8, 224, 218, 125, ++ 1, 50, 210, 178, 4, 42, 218, 117, 2, 217, 163, 111, 1, 34, 154, 117, ++ 163, 111, 0, 32, 155, 125, 51, 112, 189, 232, 240, 135, 163, 111, 0, ++ 34, 154, 119, 202, 231, 240, 181, 8, 41, 135, 176, 4, 70, 13, 70, 0, ++ 243, 238, 128, 25, 209, 3, 109, 221, 7, 17, 213, 67, 109, 25, 6, 14, ++ 212, 195, 111, 154, 105, 146, 0, 2, 213, 218, 105, 213, 7, 4, 213, 219, ++ 105, 216, 7, 1, 212, 89, 7, 2, 213, 227, 110, 154, 0, 6, 212, 101, 109, ++ 21, 240, 128, 5, 2, 209, 10, 224, 9, 185, 8, 224, 1, 37, 163, 111, 91, ++ 104, 2, 43, 3, 221, 35, 111, 155, 0, 64, 241, 203, 128, 0, 33, 3, 168, ++ 10, 34, 221, 243, 250, 246, 163, 111, 0, 33, 25, 129, 148, 248, 172, ++ 112, 47, 177, 212, 248, 136, 32, 210, 248, 32, 113, 7, 240, 1, 7, 189, ++ 248, 12, 32, 0, 45, 79, 208, 66, 240, 16, 2, 173, 248, 12, 32, 90, 104, ++ 2, 42, 34, 109, 18, 209, 18, 244, 128, 79, 189, 248, 14, 32, 8, 208, ++ 66, 244, 128, 114, 173, 248, 14, 32, 48, 34, 218, 96, 32, 34, 26, 97, ++ 61, 224, 34, 244, 128, 114, 173, 248, 14, 32, 56, 224, 5, 45, 1, 209, ++ 8, 33, 8, 224, 3, 45, 1, 209, 136, 33, 4, 224, 4, 45, 12, 191, 79, 244, ++ 132, 113, 20, 33, 214, 7, 25, 129, 21, 213, 98, 109, 16, 6, 18, 212, ++ 226, 111, 145, 105, 137, 0, 2, 213, 209, 105, 206, 7, 4, 213, 210, 105, ++ 208, 7, 1, 212, 81, 7, 6, 213, 226, 110, 146, 0, 3, 213, 26, 137, 66, ++ 240, 64, 2, 12, 224, 90, 104, 4, 42, 6, 209, 189, 248, 16, 48, 67, 244, ++ 0, 83, 173, 248, 16, 48, 8, 224, 26, 137, 66, 240, 1, 2, 26, 129, 3, ++ 224, 34, 240, 16, 2, 173, 248, 12, 32, 163, 111, 29, 96, 148, 248, 172, ++ 48, 27, 177, 23, 177, 32, 70, 255, 247, 21, 252, 2, 38, 189, 248, 12, ++ 48, 32, 70, 0, 33, 16, 34, 0, 150, 31, 240, 4, 221, 189, 248, 14, 48, ++ 32, 70, 1, 33, 79, 244, 128, 114, 0, 150, 31, 240, 251, 220, 189, 248, ++ 16, 48, 32, 70, 49, 70, 79, 244, 0, 82, 0, 150, 31, 240, 242, 220, 32, ++ 70, 29, 240, 255, 223, 148, 248, 172, 48, 27, 177, 23, 177, 32, 70, ++ 255, 247, 1, 249, 212, 248, 148, 48, 41, 70, 88, 106, 9, 240, 237, 251, ++ 32, 109, 16, 240, 1, 0, 45, 208, 101, 109, 21, 240, 128, 5, 40, 209, ++ 227, 111, 216, 105, 16, 240, 4, 0, 36, 208, 224, 110, 16, 240, 0, 80, ++ 32, 208, 35, 104, 79, 244, 112, 2, 27, 104, 64, 246, 116, 81, 211, 248, ++ 216, 0, 19, 70, 232, 243, 238, 244, 35, 104, 64, 246, 100, 81, 26, 104, ++ 163, 111, 210, 248, 216, 0, 27, 104, 79, 244, 112, 2, 27, 5, 232, 243, ++ 225, 244, 40, 70, 6, 224, 111, 240, 1, 0, 3, 224, 111, 240, 2, 0, 0, ++ 224, 0, 32, 7, 176, 240, 189, 45, 233, 240, 67, 135, 176, 4, 70, 208, ++ 248, 136, 80, 6, 104, 0, 33, 12, 34, 2, 168, 221, 243, 34, 246, 0, 39, ++ 79, 240, 255, 49, 111, 74, 13, 241, 24, 9, 32, 70, 73, 248, 4, 125, ++ 31, 240, 135, 220, 32, 70, 30, 240, 150, 216, 32, 70, 32, 240, 219, ++ 219, 79, 244, 0, 56, 32, 70, 255, 247, 89, 248, 205, 248, 0, 128, 4, ++ 35, 36, 33, 48, 105, 74, 70, 31, 240, 102, 217, 58, 70, 57, 70, 224, ++ 111, 232, 243, 147, 243, 96, 73, 32, 70, 30, 240, 169, 221, 32, 70, ++ 255, 247, 118, 250, 2, 169, 32, 70, 30, 240, 44, 219, 128, 33, 8, 34, ++ 32, 70, 32, 240, 69, 220, 10, 34, 92, 33, 32, 70, 32, 240, 64, 220, ++ 32, 70, 212, 248, 32, 17, 30, 240, 197, 217, 84, 74, 32, 70, 84, 73, ++ 31, 240, 80, 220, 79, 240, 0, 67, 197, 248, 136, 49, 79, 240, 0, 115, ++ 197, 248, 140, 49, 79, 244, 128, 67, 197, 248, 40, 49, 79, 244, 128, ++ 51, 107, 98, 1, 33, 32, 70, 31, 240, 51, 220, 224, 111, 232, 243, 2, ++ 243, 164, 248, 18, 1, 165, 248, 168, 6, 22, 33, 32, 70, 180, 248, 72, ++ 32, 32, 240, 22, 220, 192, 33, 32, 70, 180, 248, 108, 32, 32, 240, 16, ++ 220, 194, 33, 32, 70, 180, 248, 110, 32, 32, 240, 10, 220, 24, 33, 32, ++ 70, 2, 35, 4, 241, 164, 2, 205, 248, 0, 128, 31, 240, 89, 217, 2, 35, ++ 32, 70, 28, 33, 4, 241, 166, 2, 205, 248, 0, 128, 31, 240, 80, 217, ++ 150, 248, 64, 54, 19, 177, 134, 248, 64, 118, 7, 224, 205, 248, 0, 128, ++ 48, 105, 36, 33, 74, 70, 4, 35, 31, 240, 66, 217, 32, 70, 68, 33, 180, ++ 248, 168, 32, 32, 240, 228, 219, 32, 70, 70, 33, 180, 248, 170, 32, ++ 32, 240, 222, 219, 181, 248, 136, 54, 27, 5, 27, 13, 165, 248, 136, ++ 54, 1, 35, 165, 248, 156, 54, 0, 37, 181, 99, 99, 25, 88, 105, 16, 177, ++ 32, 75, 91, 104, 152, 71, 4, 53, 24, 45, 246, 209, 29, 77, 96, 105, ++ 171, 109, 152, 71, 107, 111, 96, 105, 152, 71, 0, 33, 32, 70, 32, 240, ++ 237, 216, 32, 70, 255, 247, 54, 250, 163, 111, 32, 70, 89, 139, 79, ++ 244, 128, 114, 204, 49, 32, 240, 180, 219, 99, 124, 3, 34, 0, 146, 16, ++ 34, 0, 43, 20, 191, 19, 70, 0, 35, 32, 70, 4, 33, 31, 240, 210, 219, ++ 32, 70, 174, 33, 31, 240, 246, 221, 79, 244, 216, 99, 64, 0, 196, 248, ++ 36, 1, 196, 248, 40, 49, 48, 70, 30, 240, 246, 219, 7, 176, 189, 232, ++ 240, 131, 0, 191, 4, 4, 0, 4, 44, 28, 4, 0, 0, 0, 2, 64, 0, 0, 6, 64, ++ 208, 134, 135, 0, 115, 181, 27, 74, 4, 70, 81, 104, 16, 104, 107, 70, ++ 3, 195, 0, 37, 29, 248, 5, 16, 32, 70, 30, 240, 221, 216, 0, 241, 18, ++ 6, 49, 70, 32, 70, 31, 240, 203, 221, 1, 53, 2, 70, 49, 70, 32, 70, ++ 32, 240, 115, 219, 8, 45, 236, 209, 32, 70, 30, 240, 80, 221, 168, 177, ++ 163, 111, 34, 33, 32, 70, 29, 126, 31, 240, 185, 221, 79, 246, 63, 67, ++ 3, 64, 1, 45, 20, 191, 128, 37, 64, 37, 32, 70, 34, 33, 67, 234, 5, ++ 2, 2, 176, 189, 232, 112, 64, 32, 240, 87, 155, 2, 176, 112, 189, 0, ++ 191, 90, 21, 4, 0, 45, 233, 248, 67, 144, 248, 9, 113, 4, 70, 14, 70, ++ 145, 70, 5, 104, 23, 185, 57, 70, 30, 240, 222, 217, 168, 104, 243, ++ 243, 223, 241, 6, 244, 64, 65, 161, 245, 64, 78, 222, 241, 0, 1, 65, ++ 235, 14, 1, 128, 70, 32, 70, 32, 240, 149, 220, 212, 248, 148, 48, 49, ++ 70, 88, 106, 7, 240, 102, 255, 212, 248, 148, 48, 164, 248, 188, 96, ++ 88, 106, 7, 240, 166, 252, 32, 70, 255, 247, 163, 254, 32, 70, 255, ++ 247, 242, 249, 1, 33, 196, 248, 240, 16, 185, 241, 0, 15, 3, 208, 32, ++ 70, 10, 70, 31, 240, 174, 219, 35, 109, 218, 7, 21, 213, 212, 248, 84, ++ 17, 40, 70, 17, 240, 1, 1, 24, 191, 1, 33, 79, 244, 0, 82, 1, 240, 27, ++ 248, 212, 248, 84, 17, 40, 70, 17, 240, 2, 1, 24, 191, 1, 33, 79, 244, ++ 0, 66, 1, 240, 16, 248, 35, 109, 219, 7, 7, 213, 148, 248, 88, 17, 40, ++ 70, 1, 177, 1, 33, 64, 34, 1, 240, 5, 248, 32, 70, 0, 33, 32, 240, 32, ++ 216, 32, 70, 49, 70, 0, 34, 29, 240, 161, 221, 168, 104, 65, 70, 243, ++ 243, 141, 241, 212, 248, 244, 48, 67, 240, 4, 3, 196, 248, 244, 48, ++ 31, 185, 32, 70, 2, 33, 30, 240, 118, 217, 0, 35, 132, 248, 55, 49, ++ 189, 232, 248, 131, 55, 181, 177, 245, 122, 127, 4, 70, 1, 145, 21, ++ 70, 9, 219, 131, 111, 91, 106, 243, 177, 161, 245, 122, 113, 6, 41, ++ 29, 220, 35, 248, 17, 32, 21, 224, 144, 248, 172, 48, 67, 185, 130, ++ 111, 18, 106, 138, 177, 117, 41, 18, 220, 34, 248, 17, 80, 24, 70, 19, ++ 224, 1, 169, 254, 247, 59, 254, 104, 177, 32, 70, 189, 248, 4, 16, 170, ++ 178, 32, 240, 178, 218, 0, 32, 7, 224, 79, 240, 255, 48, 4, 224, 111, ++ 240, 20, 0, 1, 224, 111, 240, 1, 0, 62, 189, 19, 181, 177, 245, 122, ++ 127, 4, 70, 1, 145, 6, 219, 131, 111, 91, 106, 195, 177, 161, 245, 122, ++ 113, 6, 41, 6, 224, 144, 248, 172, 48, 59, 185, 131, 111, 27, 106, 139, ++ 177, 117, 41, 15, 220, 51, 248, 17, 0, 14, 224, 1, 169, 254, 247, 14, ++ 254, 64, 177, 32, 70, 189, 248, 4, 16, 31, 240, 216, 220, 4, 224, 79, ++ 240, 255, 48, 1, 224, 64, 246, 173, 48, 28, 189, 56, 181, 4, 70, 144, ++ 248, 172, 0, 0, 40, 36, 208, 35, 104, 24, 105, 45, 240, 201, 222, 5, ++ 70, 16, 177, 0, 35, 227, 101, 13, 224, 35, 104, 152, 104, 243, 243, ++ 8, 241, 32, 70, 41, 70, 30, 240, 0, 217, 148, 248, 8, 49, 19, 185, 32, ++ 70, 29, 240, 52, 222, 32, 70, 0, 33, 254, 247, 48, 254, 32, 70, 30, ++ 240, 65, 221, 212, 248, 148, 48, 88, 106, 189, 232, 56, 64, 7, 240, ++ 71, 188, 56, 189, 0, 0, 45, 233, 240, 65, 196, 111, 23, 70, 8, 34, 6, ++ 70, 13, 70, 152, 70, 64, 246, 116, 81, 19, 70, 32, 70, 232, 243, 150, ++ 242, 32, 70, 64, 246, 100, 81, 8, 34, 37, 177, 21, 244, 64, 79, 1, 209, ++ 19, 70, 0, 224, 0, 35, 232, 243, 137, 242, 51, 109, 216, 7, 93, 213, ++ 115, 109, 25, 6, 90, 212, 243, 111, 154, 105, 146, 0, 2, 213, 218, 105, ++ 208, 7, 4, 213, 219, 105, 217, 7, 1, 212, 90, 7, 78, 213, 243, 110, ++ 155, 0, 75, 213, 0, 47, 73, 209, 184, 241, 0, 15, 70, 209, 0, 45, 55, ++ 208, 21, 244, 64, 66, 99, 105, 38, 209, 34, 43, 32, 73, 204, 191, 12, ++ 35, 0, 35, 234, 178, 216, 191, 15, 33, 32, 70, 154, 64, 5, 244, 96, ++ 85, 1, 35, 232, 243, 182, 241, 181, 245, 192, 95, 99, 105, 9, 209, 24, ++ 73, 34, 43, 32, 70, 216, 191, 112, 33, 204, 191, 79, 244, 32, 98, 80, ++ 34, 30, 224, 19, 73, 34, 43, 32, 70, 216, 191, 112, 33, 204, 191, 79, ++ 244, 0, 114, 16, 34, 20, 224, 178, 245, 64, 79, 9, 209, 34, 43, 2, 220, ++ 15, 33, 10, 70, 2, 224, 9, 73, 79, 244, 112, 66, 32, 70, 7, 224, 97, ++ 105, 6, 75, 32, 70, 34, 41, 204, 191, 25, 70, 15, 33, 0, 34, 1, 35, ++ 189, 232, 240, 65, 232, 243, 132, 177, 189, 232, 240, 129, 0, 240, 85, ++ 85, 0, 14, 85, 85, 56, 181, 3, 109, 4, 70, 218, 7, 116, 213, 67, 109, ++ 27, 6, 113, 212, 195, 111, 154, 105, 144, 0, 2, 213, 218, 105, 209, ++ 7, 4, 213, 219, 105, 218, 7, 1, 212, 88, 7, 101, 213, 227, 110, 153, ++ 0, 98, 213, 212, 248, 136, 48, 79, 244, 150, 117, 179, 248, 180, 38, ++ 146, 178, 66, 240, 3, 2, 163, 248, 180, 38, 212, 248, 136, 32, 178, ++ 248, 184, 54, 35, 240, 192, 3, 27, 4, 27, 12, 162, 248, 184, 54, 35, ++ 109, 218, 7, 25, 213, 99, 109, 27, 6, 22, 212, 227, 111, 219, 105, 88, ++ 7, 18, 213, 227, 110, 153, 0, 15, 213, 212, 248, 136, 48, 1, 33, 163, ++ 248, 240, 22, 212, 248, 136, 48, 179, 248, 242, 38, 146, 178, 19, 10, ++ 3, 240, 15, 3, 2, 240, 63, 2, 19, 224, 212, 248, 136, 48, 0, 34, 163, ++ 248, 240, 38, 212, 248, 136, 48, 1, 33, 179, 248, 242, 38, 163, 248, ++ 240, 22, 212, 248, 136, 48, 194, 243, 5, 18, 179, 248, 242, 54, 195, ++ 243, 3, 19, 4, 42, 5, 209, 35, 177, 100, 32, 225, 243, 133, 246, 1, ++ 61, 198, 209, 79, 244, 251, 117, 4, 224, 1, 61, 8, 208, 10, 32, 225, ++ 243, 123, 246, 212, 248, 136, 48, 179, 248, 182, 38, 210, 7, 244, 212, ++ 179, 248, 184, 38, 146, 178, 66, 240, 192, 2, 163, 248, 184, 38, 56, ++ 189, 48, 181, 135, 176, 4, 70, 13, 70, 3, 168, 0, 33, 10, 34, 221, 243, ++ 246, 242, 148, 248, 172, 48, 51, 177, 212, 248, 136, 32, 210, 248, 32, ++ 33, 2, 240, 1, 2, 0, 224, 26, 70, 189, 248, 12, 16, 1, 45, 12, 191, ++ 65, 240, 2, 1, 33, 240, 2, 1, 173, 248, 12, 16, 155, 177, 146, 177, ++ 32, 70, 255, 247, 100, 248, 2, 34, 32, 70, 189, 248, 12, 48, 0, 33, ++ 0, 146, 31, 240, 84, 217, 148, 248, 172, 0, 48, 177, 32, 70, 254, 247, ++ 103, 253, 0, 32, 1, 224, 79, 240, 255, 48, 7, 176, 48, 189, 208, 248, ++ 40, 49, 112, 181, 6, 70, 88, 104, 226, 243, 205, 240, 4, 70, 0, 40, ++ 92, 208, 192, 32, 226, 243, 199, 240, 224, 100, 0, 40, 86, 208, 80, ++ 32, 226, 243, 193, 240, 196, 248, 248, 0, 0, 40, 79, 208, 244, 32, 226, ++ 243, 186, 240, 196, 248, 252, 0, 0, 40, 72, 208, 4, 32, 226, 243, 179, ++ 240, 196, 248, 108, 3, 0, 40, 65, 208, 84, 32, 226, 243, 172, 240, 5, ++ 70, 196, 248, 0, 1, 208, 179, 32, 32, 226, 243, 165, 240, 40, 96, 168, ++ 179, 212, 248, 0, 81, 8, 35, 235, 129, 107, 135, 16, 32, 226, 243, 155, ++ 240, 232, 98, 88, 179, 79, 244, 146, 112, 226, 243, 149, 240, 196, 248, ++ 244, 0, 32, 179, 79, 244, 146, 112, 226, 243, 142, 240, 196, 248, 240, ++ 0, 232, 177, 120, 32, 226, 243, 136, 240, 196, 248, 4, 1, 184, 177, ++ 44, 32, 226, 243, 130, 240, 196, 248, 68, 3, 136, 177, 32, 32, 226, ++ 243, 124, 240, 196, 248, 88, 3, 88, 177, 32, 32, 226, 243, 118, 240, ++ 196, 248, 92, 3, 40, 177, 20, 32, 226, 243, 112, 240, 196, 248, 112, ++ 3, 32, 185, 33, 70, 48, 70, 32, 240, 171, 221, 0, 36, 32, 70, 112, 189, ++ 139, 121, 43, 177, 144, 248, 114, 34, 58, 185, 144, 248, 115, 34, 34, ++ 185, 1, 34, 74, 113, 35, 177, 33, 240, 109, 157, 79, 240, 255, 48, 112, ++ 71, 24, 70, 112, 71, 16, 181, 0, 50, 11, 124, 24, 191, 1, 34, 154, 66, ++ 12, 70, 10, 116, 3, 208, 3, 33, 226, 104, 233, 247, 98, 254, 163, 121, ++ 123, 185, 35, 124, 59, 185, 212, 248, 204, 48, 19, 240, 24, 15, 2, 209, ++ 67, 240, 96, 3, 3, 224, 212, 248, 204, 48, 35, 240, 96, 3, 196, 248, ++ 204, 48, 0, 32, 16, 189, 7, 41, 4, 217, 111, 240, 28, 3, 19, 96, 0, ++ 32, 112, 71, 208, 248, 104, 50, 83, 248, 33, 0, 0, 40, 12, 191, 111, ++ 240, 29, 3, 0, 35, 19, 96, 112, 71, 208, 248, 108, 2, 112, 71, 9, 185, ++ 255, 247, 250, 191, 11, 121, 1, 43, 2, 208, 2, 43, 5, 209, 1, 224, 8, ++ 105, 112, 71, 11, 105, 24, 105, 112, 71, 0, 32, 112, 71, 112, 181, 4, ++ 70, 8, 70, 13, 70, 226, 247, 184, 254, 0, 187, 43, 120, 19, 240, 1, ++ 3, 29, 209, 212, 248, 104, 34, 208, 88, 152, 177, 105, 136, 176, 248, ++ 196, 64, 176, 248, 194, 96, 76, 64, 41, 136, 113, 64, 12, 67, 176, 248, ++ 198, 96, 169, 136, 113, 64, 33, 67, 137, 178, 25, 185, 208, 248, 204, ++ 16, 9, 6, 5, 213, 4, 51, 32, 43, 230, 209, 0, 32, 112, 189, 0, 32, 112, ++ 189, 112, 181, 4, 70, 8, 70, 13, 70, 226, 247, 142, 254, 224, 185, 43, ++ 120, 19, 240, 1, 3, 25, 209, 212, 248, 104, 34, 208, 88, 120, 177, 105, ++ 136, 176, 248, 190, 64, 176, 248, 188, 96, 76, 64, 41, 136, 113, 64, ++ 12, 67, 176, 248, 192, 96, 169, 136, 113, 64, 33, 67, 137, 178, 41, ++ 177, 4, 51, 32, 43, 234, 209, 0, 32, 112, 189, 0, 32, 112, 189, 248, ++ 181, 4, 70, 8, 70, 13, 70, 226, 247, 104, 254, 232, 185, 43, 120, 19, ++ 240, 1, 3, 26, 209, 212, 248, 104, 18, 200, 88, 128, 177, 130, 121, ++ 114, 185, 208, 248, 240, 32, 110, 136, 84, 136, 47, 136, 102, 64, 20, ++ 136, 146, 136, 124, 64, 52, 67, 174, 136, 114, 64, 34, 67, 146, 178, ++ 42, 177, 4, 51, 32, 43, 233, 209, 0, 32, 248, 189, 0, 32, 248, 189, ++ 45, 233, 240, 65, 128, 70, 15, 70, 22, 70, 0, 37, 216, 248, 104, 50, ++ 92, 89, 92, 177, 0, 46, 9, 221, 35, 126, 158, 66, 6, 209, 56, 70, 4, ++ 241, 25, 1, 50, 70, 219, 247, 227, 253, 24, 177, 4, 53, 32, 45, 236, ++ 209, 0, 36, 32, 70, 189, 232, 240, 129, 16, 181, 208, 248, 104, 34, ++ 0, 35, 208, 88, 24, 177, 176, 248, 26, 65, 140, 66, 3, 208, 4, 51, 32, ++ 43, 246, 209, 0, 32, 16, 189, 209, 248, 204, 48, 112, 181, 67, 240, ++ 96, 3, 26, 3, 193, 248, 204, 48, 68, 191, 35, 240, 32, 3, 193, 248, ++ 204, 48, 3, 104, 5, 70, 219, 105, 12, 70, 27, 105, 209, 248, 68, 99, ++ 193, 248, 128, 48, 1, 35, 139, 113, 11, 116, 0, 35, 129, 248, 80, 51, ++ 209, 248, 204, 48, 91, 0, 4, 212, 29, 240, 159, 217, 96, 97, 0, 40, ++ 38, 208, 46, 177, 24, 32, 225, 243, 66, 247, 176, 97, 0, 40, 34, 208, ++ 40, 70, 33, 70, 32, 240, 205, 222, 212, 248, 32, 51, 107, 185, 212, ++ 248, 204, 48, 152, 0, 9, 213, 200, 32, 225, 243, 49, 247, 196, 248, ++ 32, 3, 160, 177, 16, 33, 128, 34, 222, 243, 50, 241, 32, 70, 2, 33, ++ 1, 34, 33, 240, 45, 218, 40, 70, 33, 70, 189, 232, 112, 64, 32, 240, ++ 191, 155, 79, 240, 255, 48, 112, 189, 111, 240, 26, 0, 112, 189, 111, ++ 240, 26, 0, 112, 189, 45, 233, 240, 71, 209, 248, 252, 96, 0, 36, 209, ++ 248, 248, 144, 128, 70, 209, 248, 4, 113, 13, 70, 140, 113, 244, 34, ++ 33, 70, 48, 70, 221, 243, 249, 240, 33, 70, 80, 34, 72, 70, 221, 243, ++ 244, 240, 33, 70, 120, 34, 56, 70, 221, 243, 239, 240, 8, 35, 51, 96, ++ 70, 35, 51, 99, 120, 35, 166, 248, 90, 48, 3, 35, 134, 248, 140, 48, ++ 7, 35, 134, 248, 191, 48, 6, 35, 134, 248, 136, 64, 134, 248, 183, 48, ++ 216, 248, 0, 48, 79, 240, 10, 10, 219, 105, 116, 98, 179, 248, 216, ++ 48, 198, 248, 44, 160, 166, 248, 152, 48, 191, 35, 134, 248, 209, 48, ++ 216, 248, 8, 0, 58, 73, 42, 70, 35, 70, 242, 243, 177, 245, 201, 248, ++ 0, 0, 0, 40, 99, 208, 79, 244, 122, 115, 137, 248, 28, 64, 201, 248, ++ 20, 160, 169, 248, 34, 160, 201, 248, 24, 48, 228, 32, 225, 243, 194, ++ 246, 197, 248, 8, 1, 0, 40, 78, 208, 128, 248, 224, 64, 216, 248, 8, ++ 0, 44, 73, 42, 70, 35, 70, 242, 243, 147, 245, 184, 97, 0, 40, 70, 208, ++ 216, 248, 8, 0, 40, 73, 42, 70, 35, 70, 242, 243, 137, 245, 56, 97, ++ 0, 40, 60, 208, 216, 248, 8, 0, 36, 73, 42, 70, 35, 70, 242, 243, 127, ++ 245, 198, 248, 196, 0, 0, 40, 49, 208, 216, 248, 208, 5, 44, 240, 209, ++ 223, 248, 99, 0, 40, 42, 208, 216, 248, 208, 5, 44, 240, 202, 223, 184, ++ 99, 0, 40, 39, 208, 200, 35, 187, 98, 251, 98, 1, 35, 135, 248, 111, ++ 48, 64, 70, 41, 70, 167, 248, 114, 64, 135, 248, 110, 64, 135, 248, ++ 112, 64, 32, 240, 17, 222, 213, 248, 68, 51, 15, 34, 131, 248, 36, 32, ++ 40, 70, 2, 33, 34, 70, 33, 240, 125, 217, 64, 70, 41, 70, 189, 232, ++ 240, 71, 32, 240, 15, 155, 111, 240, 26, 0, 189, 232, 240, 135, 111, ++ 240, 21, 0, 189, 232, 240, 135, 111, 240, 21, 0, 189, 232, 240, 135, ++ 0, 191, 45, 67, 2, 0, 145, 66, 130, 0, 17, 200, 130, 0, 165, 33, 132, ++ 0, 139, 121, 11, 177, 255, 247, 235, 190, 255, 247, 62, 191, 45, 233, ++ 240, 67, 4, 104, 137, 176, 0, 35, 32, 70, 21, 153, 221, 248, 68, 144, ++ 23, 70, 221, 248, 64, 128, 18, 157, 6, 147, 7, 147, 255, 247, 37, 254, ++ 185, 241, 3, 15, 6, 70, 13, 217, 4, 34, 6, 168, 65, 70, 219, 247, 174, ++ 252, 185, 241, 7, 15, 5, 217, 7, 168, 8, 241, 4, 1, 4, 34, 219, 247, ++ 165, 252, 23, 177, 3, 47, 78, 209, 62, 224, 19, 155, 15, 43, 77, 217, ++ 16, 34, 65, 70, 2, 168, 219, 247, 153, 252, 32, 70, 33, 240, 78, 216, ++ 6, 70, 1, 48, 69, 208, 3, 155, 32, 70, 3, 240, 1, 2, 153, 7, 84, 191, ++ 59, 70, 4, 171, 0, 146, 49, 70, 0, 34, 32, 240, 216, 221, 7, 70, 0, ++ 40, 57, 208, 32, 70, 57, 70, 255, 247, 177, 255, 128, 70, 16, 177, 32, ++ 70, 57, 70, 34, 224, 117, 179, 46, 118, 251, 104, 58, 104, 153, 104, ++ 144, 104, 242, 243, 210, 244, 15, 34, 1, 70, 5, 241, 8, 0, 221, 243, ++ 204, 240, 133, 248, 23, 128, 168, 28, 7, 241, 194, 1, 6, 34, 219, 247, ++ 100, 252, 64, 70, 24, 224, 150, 249, 68, 0, 168, 177, 115, 121, 27, ++ 177, 32, 70, 49, 70, 32, 240, 71, 222, 32, 70, 49, 70, 32, 240, 169, ++ 223, 0, 32, 9, 224, 111, 240, 22, 0, 6, 224, 111, 240, 13, 0, 3, 224, ++ 111, 240, 21, 0, 0, 224, 40, 70, 9, 176, 189, 232, 240, 131, 45, 233, ++ 248, 79, 21, 70, 0, 34, 42, 96, 12, 70, 155, 70, 26, 96, 128, 70, 79, ++ 240, 64, 10, 145, 70, 23, 70, 216, 248, 32, 97, 0, 46, 54, 208, 22, ++ 240, 64, 127, 243, 178, 31, 208, 163, 241, 87, 2, 1, 42, 3, 217, 163, ++ 241, 99, 1, 3, 41, 12, 216, 166, 50, 4, 235, 130, 2, 81, 104, 216, 248, ++ 36, 49, 203, 24, 187, 66, 83, 96, 24, 217, 46, 96, 31, 70, 21, 224, ++ 23, 43, 27, 216, 108, 51, 4, 235, 131, 3, 89, 104, 216, 248, 36, 33, ++ 138, 24, 90, 96, 6, 224, 84, 248, 35, 16, 216, 248, 36, 33, 138, 24, ++ 68, 248, 35, 32, 186, 66, 132, 191, 46, 96, 23, 70, 48, 70, 17, 240, ++ 205, 254, 72, 69, 132, 191, 203, 248, 0, 96, 129, 70, 186, 241, 1, 10, ++ 8, 241, 8, 8, 191, 209, 189, 232, 248, 143, 240, 181, 144, 248, 155, ++ 51, 35, 179, 208, 248, 156, 67, 12, 177, 32, 104, 200, 185, 19, 241, ++ 255, 48, 24, 191, 1, 32, 240, 189, 37, 29, 175, 90, 78, 136, 173, 24, ++ 126, 64, 111, 136, 141, 136, 6, 50, 125, 64, 46, 67, 6, 37, 5, 251, ++ 3, 69, 15, 136, 173, 136, 125, 64, 53, 67, 173, 178, 77, 177, 1, 51, ++ 1, 224, 2, 34, 0, 35, 131, 66, 230, 219, 0, 32, 240, 189, 24, 70, 240, ++ 189, 1, 32, 240, 189, 0, 35, 131, 135, 0, 32, 112, 71, 112, 71, 0, 32, ++ 112, 71, 0, 32, 112, 71, 0, 32, 112, 71, 0, 40, 12, 191, 79, 240, 255, ++ 48, 0, 32, 112, 71, 56, 181, 4, 108, 13, 70, 8, 89, 24, 177, 228, 247, ++ 79, 251, 0, 35, 43, 81, 56, 189, 112, 181, 145, 248, 111, 32, 3, 70, ++ 140, 143, 146, 177, 208, 248, 108, 82, 213, 248, 0, 97, 85, 178, 54, ++ 105, 174, 66, 10, 218, 145, 248, 112, 80, 61, 185, 1, 35, 128, 34, 129, ++ 248, 112, 48, 4, 241, 206, 1, 19, 70, 17, 224, 211, 248, 108, 2, 82, ++ 178, 208, 248, 0, 1, 0, 105, 144, 66, 13, 219, 145, 248, 112, 32, 82, ++ 177, 0, 34, 129, 248, 112, 32, 24, 70, 4, 241, 206, 1, 128, 35, 189, ++ 232, 112, 64, 9, 240, 144, 157, 112, 189, 45, 233, 240, 65, 4, 70, 22, ++ 70, 31, 70, 13, 70, 0, 41, 0, 240, 131, 128, 248, 247, 119, 248, 212, ++ 248, 164, 49, 128, 70, 147, 248, 102, 16, 147, 248, 108, 32, 0, 41, ++ 110, 209, 0, 42, 108, 209, 153, 136, 66, 242, 14, 114, 1, 57, 137, 178, ++ 145, 66, 45, 216, 32, 105, 64, 242, 234, 49, 255, 247, 140, 250, 144, ++ 177, 32, 105, 79, 244, 123, 113, 255, 247, 134, 250, 212, 248, 164, ++ 49, 154, 136, 65, 246, 75, 83, 154, 66, 4, 217, 32, 105, 64, 242, 237, ++ 49, 255, 247, 122, 250, 197, 178, 0, 224, 5, 70, 32, 105, 64, 242, 235, ++ 49, 255, 247, 114, 250, 1, 35, 48, 177, 59, 112, 212, 248, 164, 49, ++ 0, 34, 131, 248, 110, 32, 28, 224, 56, 112, 212, 248, 164, 33, 130, ++ 248, 110, 48, 22, 224, 91, 141, 19, 240, 2, 3, 6, 208, 32, 105, 64, ++ 242, 238, 49, 255, 247, 90, 250, 197, 178, 11, 224, 51, 112, 59, 112, ++ 212, 248, 164, 33, 1, 35, 130, 248, 108, 48, 212, 248, 164, 33, 130, ++ 248, 110, 48, 0, 224, 61, 185, 0, 35, 51, 112, 212, 248, 164, 49, 1, ++ 34, 131, 248, 108, 32, 26, 224, 212, 248, 164, 49, 147, 248, 109, 32, ++ 2, 42, 7, 217, 1, 34, 131, 248, 102, 32, 212, 248, 164, 49, 131, 248, ++ 103, 80, 1, 224, 0, 35, 51, 112, 212, 248, 164, 49, 147, 248, 109, 32, ++ 1, 50, 131, 248, 109, 32, 2, 224, 10, 177, 0, 35, 51, 112, 212, 248, ++ 164, 49, 195, 248, 104, 128, 189, 232, 240, 129, 208, 248, 164, 49, ++ 147, 248, 102, 32, 42, 185, 219, 110, 19, 240, 255, 31, 13, 209, 189, ++ 232, 240, 129, 2, 34, 19, 70, 13, 240, 100, 218, 212, 248, 164, 49, ++ 131, 248, 102, 80, 212, 248, 164, 49, 131, 248, 103, 80, 212, 248, 164, ++ 33, 0, 35, 130, 248, 108, 48, 212, 248, 164, 33, 130, 248, 110, 48, ++ 212, 248, 164, 33, 130, 248, 109, 48, 189, 232, 240, 129, 112, 181, ++ 4, 70, 0, 105, 29, 240, 82, 222, 5, 70, 32, 105, 212, 248, 164, 97, ++ 29, 240, 42, 222, 48, 102, 40, 70, 112, 189, 112, 181, 4, 70, 0, 105, ++ 254, 247, 14, 255, 5, 70, 32, 105, 212, 248, 164, 97, 29, 240, 108, ++ 222, 48, 97, 32, 105, 212, 248, 164, 97, 29, 240, 22, 222, 48, 102, ++ 40, 70, 112, 189, 208, 248, 164, 49, 147, 248, 102, 0, 8, 177, 147, ++ 248, 103, 0, 112, 71, 208, 248, 164, 49, 24, 110, 112, 71, 11, 70, 208, ++ 248, 164, 17, 16, 181, 0, 41, 49, 208, 82, 177, 90, 28, 1, 209, 0, 34, ++ 4, 224, 11, 177, 26, 7, 44, 208, 11, 131, 1, 34, 129, 248, 44, 32, 145, ++ 248, 44, 32, 194, 185, 179, 241, 255, 63, 20, 209, 4, 104, 212, 248, ++ 128, 48, 19, 244, 128, 3, 14, 208, 3, 105, 155, 111, 27, 126, 3, 43, ++ 8, 209, 212, 248, 132, 48, 3, 244, 0, 3, 0, 43, 12, 191, 1, 35, 2, 35, ++ 0, 224, 19, 70, 11, 131, 66, 126, 106, 177, 0, 105, 64, 242, 242, 97, ++ 154, 178, 31, 240, 63, 220, 0, 32, 16, 189, 79, 240, 255, 48, 16, 189, ++ 111, 240, 1, 0, 16, 189, 16, 70, 16, 189, 0, 0, 247, 181, 3, 104, 4, ++ 70, 147, 248, 61, 48, 0, 43, 64, 240, 161, 128, 33, 240, 96, 219, 2, ++ 40, 64, 243, 156, 128, 32, 70, 33, 240, 248, 218, 0, 40, 0, 240, 150, ++ 128, 32, 105, 29, 240, 176, 221, 35, 104, 6, 70, 218, 110, 212, 248, ++ 108, 114, 0, 42, 64, 240, 139, 128, 27, 126, 0, 43, 0, 240, 135, 128, ++ 148, 248, 216, 49, 35, 177, 32, 70, 3, 240, 226, 223, 0, 40, 126, 209, ++ 212, 248, 164, 49, 221, 121, 77, 177, 212, 248, 108, 50, 211, 248, 0, ++ 49, 27, 105, 91, 66, 171, 66, 204, 191, 8, 37, 0, 37, 6, 240, 4, 3, ++ 0, 43, 24, 191, 8, 37, 187, 121, 22, 240, 16, 6, 24, 191, 79, 244, 0, ++ 118, 43, 187, 215, 248, 244, 48, 147, 249, 52, 48, 3, 179, 59, 122, ++ 243, 177, 59, 124, 35, 177, 7, 241, 188, 0, 226, 247, 73, 250, 184, ++ 185, 148, 248, 113, 50, 1, 43, 19, 209, 148, 248, 114, 50, 35, 177, ++ 212, 248, 8, 5, 18, 240, 109, 221, 88, 185, 183, 248, 90, 48, 163, 177, ++ 58, 109, 64, 242, 55, 19, 19, 64, 123, 177, 151, 248, 92, 48, 211, 177, ++ 11, 224, 148, 248, 113, 50, 91, 177, 212, 248, 112, 34, 30, 75, 19, ++ 64, 179, 245, 128, 127, 16, 209, 59, 124, 115, 177, 53, 67, 173, 178, ++ 11, 224, 148, 248, 114, 50, 59, 177, 212, 248, 8, 5, 18, 240, 74, 221, ++ 0, 40, 8, 191, 0, 37, 0, 224, 29, 70, 2, 33, 32, 70, 79, 244, 2, 114, ++ 43, 70, 0, 145, 4, 240, 219, 217, 53, 66, 25, 208, 0, 35, 212, 248, ++ 104, 34, 209, 88, 137, 177, 138, 121, 122, 185, 10, 122, 106, 177, 10, ++ 124, 90, 177, 212, 248, 72, 1, 54, 240, 72, 216, 1, 70, 212, 248, 72, ++ 1, 3, 176, 189, 232, 240, 64, 54, 240, 78, 155, 4, 51, 32, 43, 230, ++ 209, 3, 176, 240, 189, 0, 191, 0, 255, 255, 0, 115, 181, 4, 104, 6, ++ 70, 32, 70, 33, 240, 84, 218, 212, 248, 164, 49, 5, 70, 147, 248, 62, ++ 32, 1, 50, 131, 248, 62, 32, 144, 177, 35, 106, 27, 104, 2, 43, 14, ++ 209, 1, 40, 3, 209, 32, 70, 49, 70, 255, 247, 232, 253, 32, 70, 33, ++ 240, 88, 219, 32, 70, 212, 248, 108, 18, 1, 34, 255, 247, 48, 255, 35, ++ 106, 27, 104, 2, 43, 80, 209, 1, 35, 141, 248, 6, 48, 141, 248, 7, 48, ++ 93, 179, 4, 45, 41, 208, 35, 104, 147, 248, 66, 32, 42, 179, 147, 248, ++ 67, 32, 18, 179, 212, 248, 104, 33, 10, 177, 146, 121, 234, 185, 147, ++ 248, 63, 48, 211, 177, 212, 248, 164, 49, 66, 242, 14, 114, 153, 136, ++ 1, 57, 137, 178, 145, 66, 4, 217, 91, 141, 19, 185, 150, 248, 93, 16, ++ 41, 177, 1, 61, 1, 45, 9, 216, 32, 70, 1, 33, 0, 224, 32, 70, 13, 241, ++ 7, 2, 13, 241, 6, 3, 255, 247, 217, 253, 157, 248, 7, 16, 157, 248, ++ 6, 48, 161, 241, 1, 0, 65, 66, 163, 241, 1, 14, 65, 235, 0, 1, 222, ++ 241, 0, 3, 67, 235, 14, 3, 2, 34, 141, 248, 6, 48, 32, 70, 19, 70, 141, ++ 248, 7, 16, 13, 240, 192, 216, 32, 70, 157, 248, 6, 16, 2, 34, 1, 35, ++ 13, 240, 185, 216, 0, 32, 124, 189, 56, 181, 67, 126, 208, 248, 164, ++ 65, 171, 177, 4, 241, 42, 3, 0, 105, 33, 29, 162, 29, 254, 247, 14, ++ 253, 163, 121, 99, 185, 148, 248, 56, 80, 77, 185, 4, 241, 45, 0, 41, ++ 70, 8, 34, 220, 243, 160, 244, 132, 248, 56, 80, 132, 248, 57, 80, 56, ++ 189, 248, 181, 67, 126, 4, 70, 13, 70, 23, 70, 187, 177, 146, 33, 0, ++ 105, 30, 240, 57, 221, 70, 0, 182, 178, 164, 54, 32, 105, 49, 70, 30, ++ 240, 50, 221, 21, 177, 64, 234, 7, 2, 1, 224, 32, 234, 7, 2, 32, 105, ++ 146, 178, 49, 70, 189, 232, 248, 64, 31, 240, 211, 154, 248, 189, 56, ++ 181, 131, 143, 4, 70, 5, 104, 43, 185, 40, 105, 146, 33, 30, 240, 27, ++ 221, 64, 0, 160, 135, 40, 70, 1, 33, 79, 244, 128, 114, 255, 247, 208, ++ 255, 0, 32, 56, 189, 1, 41, 0, 105, 24, 191, 0, 33, 255, 247, 100, 185, ++ 56, 181, 17, 70, 4, 70, 0, 104, 21, 70, 255, 247, 132, 250, 41, 70, ++ 196, 248, 44, 1, 6, 34, 4, 245, 146, 112, 189, 232, 56, 64, 219, 247, ++ 210, 184, 138, 66, 16, 181, 16, 208, 208, 248, 48, 1, 12, 24, 33, 70, ++ 16, 24, 79, 244, 138, 114, 219, 247, 198, 248, 32, 70, 0, 33, 79, 244, ++ 138, 114, 189, 232, 16, 64, 220, 243, 62, 180, 16, 189, 2, 104, 1, 70, ++ 210, 248, 112, 49, 210, 248, 196, 6, 3, 245, 198, 114, 3, 245, 206, ++ 115, 25, 240, 146, 188, 0, 0, 56, 181, 5, 70, 0, 36, 6, 72, 41, 70, ++ 0, 25, 220, 243, 180, 244, 32, 177, 4, 52, 40, 44, 246, 209, 0, 32, ++ 56, 189, 1, 32, 56, 189, 243, 57, 4, 0, 67, 104, 112, 181, 4, 70, 211, ++ 177, 131, 105, 75, 185, 18, 224, 163, 105, 91, 25, 88, 104, 8, 177, ++ 228, 247, 46, 248, 1, 54, 12, 53, 1, 224, 0, 37, 46, 70, 35, 106, 158, ++ 66, 241, 211, 160, 105, 228, 247, 35, 248, 0, 35, 163, 97, 96, 104, ++ 228, 247, 30, 248, 0, 35, 99, 96, 112, 189, 45, 233, 247, 79, 30, 70, ++ 3, 104, 4, 70, 1, 147, 139, 7, 139, 70, 21, 70, 102, 213, 255, 247, ++ 212, 255, 19, 46, 64, 242, 228, 128, 107, 104, 158, 66, 192, 240, 224, ++ 128, 40, 70, 114, 73, 4, 34, 219, 247, 83, 248, 7, 70, 0, 40, 64, 240, ++ 219, 128, 105, 104, 5, 241, 12, 0, 12, 57, 79, 240, 255, 50, 221, 243, ++ 94, 242, 171, 104, 192, 67, 131, 66, 64, 240, 198, 128, 104, 104, 160, ++ 96, 227, 247, 235, 255, 96, 96, 0, 40, 0, 240, 192, 128, 41, 70, 162, ++ 104, 219, 247, 73, 248, 99, 104, 12, 32, 27, 105, 88, 67, 224, 97, 227, ++ 247, 220, 255, 160, 97, 0, 40, 0, 240, 177, 128, 163, 104, 39, 98, 184, ++ 70, 170, 70, 50, 70, 30, 224, 20, 32, 0, 251, 8, 17, 209, 248, 24, 144, ++ 153, 69, 192, 240, 169, 128, 163, 105, 205, 105, 73, 105, 222, 25, 217, ++ 81, 181, 96, 40, 70, 0, 146, 227, 247, 192, 255, 12, 55, 112, 96, 0, ++ 154, 0, 40, 0, 240, 147, 128, 33, 106, 5, 235, 9, 3, 1, 49, 33, 98, ++ 8, 241, 1, 8, 97, 104, 8, 105, 128, 69, 220, 211, 0, 35, 227, 96, 35, ++ 97, 79, 240, 255, 51, 85, 70, 22, 70, 99, 97, 99, 104, 0, 43, 126, 208, ++ 227, 104, 243, 24, 152, 70, 69, 224, 33, 105, 35, 106, 153, 66, 59, ++ 210, 103, 104, 20, 35, 3, 251, 1, 119, 224, 104, 186, 105, 130, 66, ++ 4, 217, 23, 26, 190, 66, 56, 191, 55, 70, 47, 224, 212, 248, 24, 224, ++ 79, 240, 12, 12, 255, 105, 12, 251, 1, 225, 2, 235, 7, 10, 208, 69, ++ 52, 191, 193, 70, 209, 70, 192, 235, 9, 7, 130, 26, 72, 104, 41, 70, ++ 128, 24, 58, 70, 0, 147, 218, 247, 222, 255, 40, 70, 57, 70, 98, 105, ++ 221, 243, 221, 241, 209, 69, 96, 97, 0, 155, 15, 211, 34, 105, 97, 104, ++ 192, 67, 3, 251, 2, 19, 27, 106, 96, 97, 131, 66, 66, 209, 1, 50, 79, ++ 240, 255, 51, 34, 97, 99, 97, 0, 224, 55, 70, 227, 104, 237, 25, 219, ++ 25, 227, 96, 246, 27, 0, 46, 183, 209, 27, 240, 4, 15, 39, 208, 34, ++ 105, 35, 106, 154, 66, 47, 209, 96, 104, 227, 247, 81, 255, 1, 155, ++ 102, 96, 211, 248, 92, 1, 161, 105, 34, 106, 12, 155, 152, 71, 55, 70, ++ 5, 70, 7, 224, 163, 105, 155, 25, 88, 104, 8, 177, 227, 247, 64, 255, ++ 1, 55, 12, 54, 35, 106, 159, 66, 244, 211, 160, 105, 227, 247, 56, 255, ++ 0, 35, 1, 45, 163, 97, 4, 217, 32, 70, 255, 247, 246, 254, 0, 224, 1, ++ 37, 40, 70, 189, 232, 254, 143, 4, 37, 245, 231, 5, 37, 243, 231, 2, ++ 37, 241, 231, 6, 37, 239, 231, 3, 37, 237, 231, 0, 191, 212, 57, 4, ++ 0, 240, 181, 137, 176, 15, 158, 0, 35, 3, 46, 4, 70, 23, 70, 14, 157, ++ 7, 147, 4, 217, 7, 168, 41, 70, 4, 34, 218, 247, 115, 255, 5, 47, 2, ++ 208, 6, 47, 38, 209, 31, 224, 15, 46, 9, 217, 41, 70, 16, 34, 3, 168, ++ 218, 247, 103, 255, 189, 248, 12, 16, 11, 11, 1, 43, 3, 208, 2, 35, ++ 196, 248, 48, 49, 12, 224, 12, 75, 212, 248, 52, 1, 0, 147, 5, 241, ++ 12, 2, 4, 155, 255, 247, 215, 254, 1, 40, 196, 248, 48, 1, 6, 217, 79, ++ 240, 255, 48, 7, 224, 212, 248, 48, 33, 16, 155, 26, 96, 0, 32, 1, 224, ++ 111, 240, 22, 0, 9, 176, 240, 189, 37, 124, 2, 0, 1, 240, 0, 191, 247, ++ 181, 0, 35, 22, 70, 2, 170, 15, 120, 66, 248, 4, 61, 12, 75, 5, 70, ++ 0, 47, 20, 191, 15, 70, 31, 70, 56, 70, 49, 70, 255, 247, 237, 255, ++ 4, 70, 64, 185, 5, 241, 8, 0, 57, 70, 3, 34, 220, 243, 135, 243, 238, ++ 96, 32, 70, 1, 224, 111, 240, 1, 0, 254, 189, 0, 191, 162, 153, 136, ++ 0, 1, 240, 237, 190, 247, 181, 6, 70, 21, 70, 31, 70, 2, 170, 0, 35, ++ 12, 70, 66, 248, 4, 61, 241, 104, 8, 48, 255, 247, 205, 255, 6, 70, ++ 80, 185, 33, 70, 58, 70, 1, 152, 255, 247, 234, 255, 33, 70, 6, 70, ++ 4, 34, 40, 70, 220, 243, 98, 243, 214, 241, 1, 0, 56, 191, 0, 32, 254, ++ 189, 7, 181, 0, 35, 2, 170, 66, 248, 4, 61, 208, 248, 92, 49, 3, 241, ++ 8, 0, 217, 104, 255, 247, 175, 255, 208, 241, 1, 0, 56, 191, 0, 32, ++ 14, 189, 1, 240, 153, 190, 45, 233, 248, 67, 208, 248, 12, 144, 7, 70, ++ 8, 70, 14, 70, 21, 70, 28, 70, 221, 248, 32, 128, 220, 243, 17, 243, ++ 3, 40, 37, 216, 49, 70, 40, 70, 4, 34, 220, 243, 54, 243, 0, 35, 35, ++ 96, 7, 241, 8, 0, 49, 70, 220, 243, 219, 242, 16, 185, 196, 248, 0, ++ 144, 5, 224, 56, 70, 49, 70, 42, 70, 35, 70, 255, 247, 169, 255, 40, ++ 70, 33, 104, 66, 70, 255, 247, 212, 255, 80, 177, 35, 104, 67, 177, ++ 0, 33, 40, 70, 66, 70, 33, 96, 189, 232, 248, 67, 255, 247, 201, 191, ++ 1, 32, 189, 232, 248, 131, 240, 181, 75, 104, 159, 176, 6, 70, 12, 70, ++ 19, 185, 3, 106, 27, 104, 139, 96, 161, 104, 75, 30, 1, 43, 0, 242, ++ 138, 128, 51, 106, 26, 104, 145, 66, 2, 208, 0, 32, 224, 96, 132, 224, ++ 24, 105, 14, 170, 6, 240, 207, 252, 26, 168, 1, 240, 95, 248, 232, 177, ++ 0, 37, 35, 224, 26, 152, 21, 169, 39, 240, 177, 223, 3, 70, 176, 185, ++ 161, 104, 21, 168, 1, 41, 24, 191, 25, 70, 106, 70, 7, 171, 40, 240, ++ 242, 217, 0, 35, 14, 170, 29, 248, 3, 16, 154, 92, 17, 66, 1, 208, 1, ++ 53, 4, 224, 1, 51, 28, 43, 244, 209, 0, 224, 5, 70, 26, 168, 28, 169, ++ 27, 170, 1, 240, 19, 254, 0, 40, 219, 208, 5, 53, 35, 104, 173, 0, 157, ++ 66, 3, 217, 37, 96, 111, 240, 13, 0, 77, 224, 26, 168, 1, 240, 44, 248, ++ 0, 40, 66, 209, 173, 248, 116, 0, 5, 70, 54, 224, 26, 152, 21, 169, ++ 39, 240, 123, 223, 3, 70, 0, 40, 47, 209, 161, 104, 21, 168, 1, 41, ++ 24, 191, 25, 70, 106, 70, 7, 171, 40, 240, 187, 217, 0, 35, 14, 170, ++ 29, 248, 3, 16, 154, 92, 17, 66, 28, 208, 48, 70, 28, 169, 39, 240, ++ 56, 217, 208, 177, 28, 168, 29, 169, 2, 34, 218, 247, 41, 254, 160, ++ 177, 175, 0, 4, 241, 16, 0, 192, 25, 28, 169, 2, 34, 220, 243, 147, ++ 242, 231, 25, 0, 35, 187, 116, 29, 168, 28, 169, 2, 34, 218, 247, 43, ++ 254, 1, 53, 2, 224, 1, 51, 28, 43, 217, 209, 26, 168, 28, 169, 27, 170, ++ 1, 240, 195, 253, 0, 40, 193, 208, 0, 224, 0, 37, 229, 96, 0, 32, 1, ++ 224, 111, 240, 12, 0, 31, 176, 240, 189, 45, 233, 240, 71, 68, 104, ++ 234, 176, 129, 70, 16, 70, 15, 70, 21, 70, 16, 240, 50, 251, 100, 168, ++ 0, 240, 217, 255, 0, 40, 64, 240, 11, 129, 7, 244, 64, 67, 163, 245, ++ 64, 70, 115, 66, 67, 235, 6, 3, 10, 51, 72, 70, 57, 70, 84, 248, 35, ++ 96, 40, 240, 128, 219, 128, 185, 35, 104, 147, 248, 175, 48, 0, 43, ++ 0, 240, 246, 128, 212, 248, 136, 1, 9, 240, 53, 219, 104, 170, 1, 70, ++ 32, 70, 39, 240, 22, 221, 24, 177, 234, 224, 217, 248, 16, 48, 104, ++ 147, 127, 35, 101, 147, 150, 248, 6, 49, 150, 248, 4, 129, 134, 248, ++ 5, 49, 153, 248, 245, 32, 10, 177, 91, 178, 101, 147, 95, 169, 104, ++ 152, 39, 240, 244, 222, 1, 70, 0, 40, 64, 240, 211, 128, 105, 170, 95, ++ 168, 3, 50, 39, 240, 167, 222, 0, 40, 64, 240, 203, 128, 153, 248, 244, ++ 16, 254, 178, 113, 177, 157, 249, 167, 49, 0, 43, 7, 218, 1, 46, 7, ++ 208, 166, 241, 13, 0, 65, 66, 65, 235, 0, 1, 2, 224, 1, 70, 0, 224, ++ 49, 70, 32, 105, 29, 240, 48, 223, 35, 104, 147, 248, 47, 32, 138, 177, ++ 147, 248, 48, 48, 115, 185, 180, 248, 72, 4, 221, 243, 159, 243, 1, ++ 34, 1, 70, 212, 248, 92, 1, 39, 240, 195, 222, 193, 178, 212, 248, 120, ++ 1, 78, 240, 210, 218, 7, 244, 96, 83, 179, 245, 128, 95, 79, 250, 136, ++ 248, 37, 209, 100, 171, 0, 33, 1, 147, 50, 70, 5, 172, 95, 168, 67, ++ 70, 100, 145, 0, 145, 2, 148, 38, 240, 121, 222, 6, 70, 0, 40, 64, 240, ++ 136, 128, 35, 70, 49, 70, 1, 34, 40, 70, 16, 240, 94, 251, 35, 29, 0, ++ 147, 49, 70, 50, 70, 1, 35, 40, 70, 16, 240, 105, 251, 12, 52, 1, 34, ++ 0, 146, 1, 148, 40, 70, 49, 70, 51, 70, 111, 224, 179, 245, 192, 95, ++ 110, 209, 0, 33, 1, 36, 13, 245, 200, 122, 13, 241, 20, 9, 95, 168, ++ 50, 70, 67, 70, 0, 145, 100, 148, 205, 248, 4, 160, 205, 248, 8, 144, ++ 38, 240, 75, 222, 1, 70, 0, 40, 90, 209, 7, 244, 124, 87, 183, 245, ++ 200, 95, 20, 191, 39, 70, 2, 39, 141, 232, 128, 4, 67, 70, 13, 241, ++ 200, 10, 95, 168, 50, 70, 205, 248, 8, 160, 38, 240, 54, 222, 128, 70, ++ 0, 40, 69, 209, 9, 241, 4, 6, 33, 70, 66, 70, 35, 70, 40, 70, 0, 150, ++ 16, 240, 44, 251, 33, 70, 66, 70, 35, 70, 40, 70, 0, 150, 16, 240, 37, ++ 251, 9, 241, 12, 3, 1, 147, 33, 70, 34, 70, 67, 70, 40, 70, 0, 148, ++ 16, 240, 68, 251, 65, 70, 34, 70, 83, 70, 40, 70, 16, 240, 2, 251, 51, ++ 175, 65, 70, 66, 70, 35, 70, 40, 70, 53, 174, 0, 151, 16, 240, 12, 251, ++ 65, 70, 34, 70, 67, 70, 40, 70, 0, 148, 1, 150, 16, 240, 45, 251, 3, ++ 33, 34, 70, 83, 70, 40, 70, 16, 240, 235, 250, 3, 33, 66, 70, 35, 70, ++ 40, 70, 0, 151, 16, 240, 247, 250, 141, 232, 80, 0, 40, 70, 3, 33, 34, ++ 70, 67, 70, 16, 240, 24, 251, 106, 176, 189, 232, 240, 135, 248, 181, ++ 69, 104, 6, 70, 107, 126, 15, 70, 0, 43, 49, 208, 181, 248, 72, 20, ++ 3, 104, 1, 244, 96, 81, 161, 245, 192, 94, 222, 241, 0, 1, 88, 105, ++ 65, 235, 14, 1, 16, 240, 42, 250, 4, 70, 32, 179, 34, 70, 181, 248, ++ 72, 20, 48, 70, 255, 247, 197, 254, 43, 106, 24, 105, 7, 240, 219, 253, ++ 16, 240, 60, 253, 121, 178, 32, 70, 16, 240, 24, 251, 33, 70, 48, 70, ++ 38, 240, 119, 222, 43, 106, 33, 70, 24, 105, 181, 248, 72, 36, 6, 240, ++ 40, 253, 51, 104, 33, 70, 88, 105, 16, 240, 22, 250, 0, 32, 248, 189, ++ 111, 240, 10, 0, 248, 189, 79, 240, 255, 48, 248, 189, 0, 0, 45, 233, ++ 240, 71, 71, 104, 4, 70, 59, 106, 14, 70, 24, 105, 7, 240, 179, 253, ++ 49, 70, 5, 70, 16, 240, 247, 252, 1, 40, 223, 248, 212, 144, 22, 208, ++ 185, 248, 0, 16, 121, 177, 40, 70, 16, 240, 244, 252, 128, 70, 80, 177, ++ 65, 70, 1, 34, 40, 70, 16, 240, 77, 252, 35, 104, 41, 70, 88, 105, 66, ++ 70, 16, 240, 237, 252, 40, 70, 49, 70, 16, 240, 61, 253, 0, 34, 40, ++ 70, 49, 70, 169, 248, 0, 96, 16, 240, 203, 252, 128, 48, 18, 208, 0, ++ 33, 32, 70, 38, 240, 45, 222, 49, 70, 32, 70, 61, 105, 40, 240, 116, ++ 216, 2, 28, 24, 191, 1, 34, 40, 70, 49, 70, 0, 35, 189, 232, 240, 71, ++ 253, 247, 240, 189, 6, 244, 96, 81, 161, 245, 192, 92, 35, 104, 220, ++ 241, 0, 1, 88, 105, 65, 235, 12, 1, 16, 240, 175, 249, 5, 70, 0, 40, ++ 36, 208, 42, 70, 49, 70, 32, 70, 255, 247, 74, 254, 215, 248, 120, 1, ++ 78, 240, 76, 217, 65, 178, 40, 70, 16, 240, 159, 250, 41, 70, 32, 70, ++ 38, 240, 254, 221, 49, 70, 32, 70, 63, 105, 40, 240, 69, 216, 2, 28, ++ 49, 70, 56, 70, 43, 70, 24, 191, 1, 34, 253, 247, 195, 253, 35, 104, ++ 41, 70, 88, 105, 189, 232, 240, 71, 16, 240, 149, 185, 189, 232, 240, ++ 135, 120, 8, 0, 0, 45, 233, 243, 65, 69, 104, 6, 70, 23, 70, 40, 70, ++ 1, 170, 12, 70, 39, 240, 96, 219, 128, 70, 184, 177, 1, 63, 24, 73, ++ 58, 70, 32, 70, 220, 243, 138, 240, 40, 70, 33, 70, 1, 170, 39, 240, ++ 83, 219, 128, 70, 80, 177, 19, 73, 58, 70, 32, 70, 220, 243, 126, 240, ++ 40, 70, 33, 70, 1, 170, 39, 240, 71, 219, 128, 70, 213, 248, 140, 1, ++ 33, 70, 40, 240, 167, 220, 32, 70, 255, 247, 96, 251, 24, 177, 213, ++ 248, 136, 1, 33, 70, 2, 224, 213, 248, 136, 1, 7, 73, 9, 240, 200, 217, ++ 48, 70, 33, 70, 40, 240, 190, 216, 64, 70, 189, 232, 252, 129, 0, 191, ++ 146, 153, 136, 0, 154, 206, 135, 0, 41, 155, 136, 0, 1, 42, 247, 181, ++ 4, 70, 88, 217, 75, 105, 4, 43, 85, 209, 11, 105, 154, 120, 88, 120, ++ 18, 4, 66, 234, 0, 34, 24, 120, 219, 120, 2, 67, 66, 234, 3, 98, 74, ++ 246, 166, 19, 154, 66, 72, 209, 212, 248, 156, 48, 0, 38, 77, 104, 143, ++ 104, 78, 96, 99, 177, 48, 70, 0, 240, 158, 253, 212, 248, 156, 0, 227, ++ 247, 113, 251, 196, 248, 164, 96, 196, 248, 156, 96, 196, 248, 160, ++ 96, 212, 248, 148, 0, 8, 177, 227, 247, 102, 251, 69, 177, 40, 70, 0, ++ 240, 129, 253, 0, 40, 44, 208, 40, 70, 227, 247, 93, 251, 9, 37, 23, ++ 72, 0, 240, 120, 253, 0, 35, 196, 248, 152, 48, 196, 248, 148, 48, 4, ++ 241, 20, 0, 161, 105, 106, 70, 255, 247, 197, 252, 8, 185, 0, 155, 0, ++ 224, 0, 35, 35, 97, 0, 33, 4, 34, 1, 168, 219, 243, 39, 247, 4, 241, ++ 8, 1, 3, 34, 1, 168, 220, 243, 1, 240, 32, 70, 1, 169, 4, 34, 255, 247, ++ 96, 255, 2, 224, 7, 37, 0, 224, 8, 37, 40, 70, 254, 189, 196, 248, 148, ++ 80, 196, 248, 152, 112, 5, 70, 216, 231, 40, 60, 4, 0, 1, 244, 96, 83, ++ 179, 245, 0, 95, 112, 181, 6, 70, 0, 241, 196, 5, 204, 178, 27, 209, ++ 6, 44, 1, 217, 161, 31, 0, 224, 0, 33, 40, 70, 220, 243, 68, 245, 2, ++ 44, 1, 217, 161, 30, 0, 224, 0, 33, 40, 70, 220, 243, 60, 245, 221, ++ 44, 1, 216, 161, 28, 0, 224, 0, 33, 40, 70, 220, 243, 52, 245, 217, ++ 44, 16, 216, 161, 29, 15, 224, 179, 245, 192, 95, 14, 209, 2, 44, 1, ++ 217, 161, 30, 0, 224, 0, 33, 40, 70, 220, 243, 37, 245, 221, 44, 1, ++ 216, 161, 28, 0, 224, 0, 33, 40, 70, 1, 224, 40, 70, 33, 70, 220, 243, ++ 26, 245, 48, 70, 189, 232, 112, 64, 39, 240, 89, 152, 0, 0, 31, 181, ++ 12, 70, 22, 75, 208, 248, 148, 16, 0, 41, 8, 191, 25, 70, 1, 241, 14, ++ 0, 177, 249, 10, 32, 177, 249, 12, 48, 0, 144, 1, 241, 34, 0, 52, 49, ++ 1, 144, 2, 145, 32, 70, 14, 73, 220, 243, 44, 241, 1, 240, 130, 250, ++ 2, 70, 24, 177, 32, 70, 11, 73, 220, 243, 36, 241, 4, 32, 0, 33, 1, ++ 240, 124, 250, 2, 70, 48, 177, 7, 73, 32, 70, 4, 176, 189, 232, 16, ++ 64, 220, 243, 23, 177, 4, 176, 16, 189, 0, 191, 40, 60, 4, 0, 96, 156, ++ 136, 0, 133, 156, 136, 0, 152, 156, 136, 0, 16, 181, 16, 248, 1, 59, ++ 12, 70, 35, 177, 17, 248, 1, 43, 10, 177, 147, 66, 246, 208, 32, 120, ++ 24, 26, 16, 189, 11, 224, 75, 30, 75, 64, 33, 234, 3, 1, 91, 8, 3, 234, ++ 0, 2, 64, 8, 32, 234, 3, 0, 16, 67, 73, 8, 0, 41, 241, 209, 112, 71, ++ 1, 224, 0, 248, 1, 27, 18, 241, 255, 50, 250, 210, 112, 71, 2, 75, 84, ++ 34, 2, 251, 0, 48, 112, 71, 0, 191, 48, 115, 4, 0, 0, 72, 112, 71, 220, ++ 115, 4, 0, 16, 181, 12, 70, 255, 247, 240, 255, 3, 104, 35, 177, 27, ++ 89, 35, 177, 64, 104, 24, 24, 16, 189, 24, 70, 16, 189, 24, 70, 16, ++ 189, 16, 181, 12, 70, 33, 177, 255, 247, 224, 255, 64, 104, 32, 24, ++ 16, 189, 8, 70, 16, 189, 1, 56, 17, 177, 192, 243, 128, 115, 11, 96, ++ 18, 177, 32, 240, 64, 64, 16, 96, 112, 71, 72, 177, 1, 41, 12, 191, ++ 79, 240, 128, 65, 0, 33, 34, 240, 64, 66, 10, 67, 1, 50, 2, 96, 112, ++ 71, 2, 224, 3, 120, 1, 51, 192, 24, 17, 241, 255, 49, 249, 210, 112, ++ 71, 45, 233, 243, 65, 14, 70, 5, 70, 20, 70, 16, 70, 0, 33, 44, 34, ++ 255, 247, 172, 255, 3, 46, 116, 216, 223, 232, 6, 240, 2, 10, 17, 25, ++ 40, 104, 105, 70, 1, 170, 255, 247, 205, 255, 0, 37, 1, 39, 21, 224, ++ 104, 104, 105, 70, 1, 170, 255, 247, 197, 255, 1, 37, 5, 224, 168, 104, ++ 105, 70, 1, 170, 255, 247, 190, 255, 0, 37, 47, 70, 6, 224, 232, 104, ++ 105, 70, 1, 170, 255, 247, 182, 255, 1, 37, 0, 39, 1, 155, 64, 242, ++ 255, 50, 147, 66, 75, 208, 64, 242, 254, 50, 147, 66, 73, 208, 0, 152, ++ 255, 247, 131, 255, 3, 104, 6, 54, 128, 70, 83, 248, 38, 16, 0, 152, ++ 255, 247, 150, 255, 17, 224, 31, 177, 195, 120, 0, 235, 67, 0, 4, 48, ++ 3, 70, 19, 248, 1, 27, 64, 120, 1, 240, 48, 2, 18, 17, 3, 50, 0, 251, ++ 2, 48, 1, 48, 75, 7, 242, 212, 1, 155, 90, 30, 1, 146, 0, 43, 232, 209, ++ 8, 241, 60, 3, 99, 96, 5, 241, 8, 3, 8, 235, 195, 8, 8, 241, 4, 3, 163, ++ 96, 32, 96, 16, 33, 0, 152, 255, 247, 96, 255, 12, 33, 224, 96, 0, 152, ++ 255, 247, 91, 255, 32, 97, 0, 152, 255, 247, 75, 255, 8, 48, 110, 0, ++ 0, 235, 5, 21, 101, 97, 0, 152, 255, 247, 67, 255, 1, 54, 8, 48, 0, ++ 235, 198, 6, 166, 97, 1, 32, 0, 224, 0, 32, 189, 232, 252, 129, 0, 0, ++ 45, 233, 247, 67, 4, 70, 255, 247, 51, 255, 5, 104, 32, 70, 125, 185, ++ 255, 247, 46, 255, 133, 96, 32, 70, 255, 247, 42, 255, 5, 97, 32, 70, ++ 255, 247, 38, 255, 133, 97, 32, 70, 255, 247, 34, 255, 5, 98, 83, 224, ++ 0, 33, 255, 247, 41, 255, 4, 33, 5, 70, 0, 144, 32, 70, 255, 247, 35, ++ 255, 46, 104, 1, 144, 118, 185, 3, 104, 0, 43, 64, 208, 11, 224, 1, ++ 32, 255, 247, 13, 255, 8, 48, 0, 144, 1, 32, 255, 247, 8, 255, 24, 48, ++ 1, 144, 54, 224, 0, 38, 173, 241, 4, 8, 0, 37, 32, 70, 255, 247, 254, ++ 254, 88, 248, 4, 127, 0, 235, 5, 19, 8, 51, 151, 232, 3, 0, 131, 232, ++ 3, 0, 6, 177, 84, 177, 32, 70, 255, 247, 240, 254, 121, 104, 129, 70, ++ 32, 70, 255, 247, 6, 255, 9, 235, 5, 19, 216, 96, 1, 53, 2, 45, 227, ++ 209, 32, 70, 255, 247, 226, 254, 11, 74, 0, 241, 16, 3, 146, 232, 3, ++ 0, 131, 232, 3, 0, 32, 70, 255, 247, 216, 254, 7, 74, 0, 241, 32, 3, ++ 146, 232, 3, 0, 131, 232, 3, 0, 3, 224, 0, 44, 189, 208, 1, 38, 199, ++ 231, 189, 232, 254, 131, 156, 58, 4, 0, 40, 58, 4, 0, 10, 104, 3, 70, ++ 72, 104, 2, 235, 66, 2, 48, 181, 130, 24, 13, 224, 4, 120, 163, 66, ++ 9, 219, 65, 120, 139, 66, 6, 220, 129, 120, 28, 27, 148, 251, 241, 245, ++ 1, 251, 21, 65, 25, 177, 3, 48, 144, 66, 239, 209, 0, 32, 48, 189, 6, ++ 201, 1, 235, 65, 1, 3, 70, 48, 181, 81, 24, 0, 32, 10, 224, 20, 120, ++ 156, 66, 6, 221, 32, 177, 5, 120, 165, 66, 136, 191, 16, 70, 0, 224, ++ 16, 70, 3, 50, 138, 66, 242, 209, 48, 189, 45, 233, 248, 79, 10, 159, ++ 13, 70, 20, 70, 152, 70, 6, 70, 0, 40, 91, 208, 0, 33, 25, 34, 255, ++ 247, 130, 254, 0, 45, 85, 208, 255, 44, 83, 208, 33, 70, 40, 70, 255, ++ 247, 188, 254, 144, 248, 0, 176, 4, 70, 131, 68, 72, 224, 20, 248, 1, ++ 63, 255, 43, 31, 209, 120, 104, 57, 104, 0, 34, 23, 224, 131, 92, 15, ++ 224, 3, 240, 7, 9, 79, 240, 1, 10, 10, 250, 9, 250, 79, 234, 227, 12, ++ 22, 248, 12, 144, 74, 234, 9, 9, 6, 248, 12, 144, 173, 120, 91, 25, ++ 133, 24, 149, 248, 1, 192, 99, 69, 234, 221, 3, 50, 17, 241, 255, 49, ++ 228, 210, 36, 224, 24, 248, 19, 80, 8, 235, 67, 2, 40, 70, 57, 70, 146, ++ 248, 1, 144, 255, 247, 136, 255, 200, 177, 1, 33, 5, 240, 7, 2, 17, ++ 250, 2, 242, 235, 16, 241, 92, 77, 69, 66, 234, 1, 2, 242, 84, 13, 218, ++ 67, 120, 157, 66, 2, 218, 131, 120, 237, 24, 237, 231, 40, 70, 57, 70, ++ 255, 247, 139, 255, 16, 177, 5, 120, 77, 69, 229, 221, 92, 69, 180, ++ 209, 189, 232, 248, 143, 56, 181, 21, 70, 18, 104, 4, 70, 8, 120, 58, ++ 185, 132, 66, 34, 209, 74, 120, 154, 26, 80, 66, 64, 235, 2, 0, 56, ++ 189, 132, 66, 33, 219, 75, 120, 156, 66, 25, 220, 41, 70, 255, 247, ++ 83, 255, 3, 224, 24, 70, 41, 70, 255, 247, 104, 255, 136, 177, 67, 120, ++ 163, 66, 247, 219, 14, 224, 130, 120, 228, 26, 148, 251, 242, 240, 2, ++ 251, 16, 68, 212, 241, 1, 0, 56, 191, 0, 32, 56, 189, 16, 70, 56, 189, ++ 0, 32, 56, 189, 3, 120, 163, 66, 237, 221, 0, 32, 56, 189, 0, 0, 45, ++ 233, 240, 71, 18, 76, 4, 241, 108, 8, 84, 248, 8, 92, 84, 248, 4, 60, ++ 212, 248, 0, 144, 5, 235, 3, 10, 255, 247, 243, 253, 5, 240, 3, 7, 127, ++ 0, 3, 35, 187, 64, 174, 8, 130, 93, 9, 250, 7, 247, 34, 234, 3, 3, 131, ++ 85, 255, 247, 229, 253, 131, 93, 1, 53, 31, 67, 85, 69, 135, 85, 233, ++ 219, 12, 52, 68, 69, 222, 209, 189, 232, 240, 135, 56, 58, 4, 0, 248, ++ 181, 6, 70, 8, 70, 13, 70, 255, 247, 202, 253, 4, 70, 0, 46, 118, 208, ++ 48, 70, 67, 73, 255, 247, 159, 253, 0, 40, 126, 209, 115, 137, 5, 43, ++ 3, 209, 182, 249, 12, 32, 1, 42, 5, 208, 7, 59, 155, 178, 5, 43, 115, ++ 216, 1, 39, 0, 224, 7, 70, 243, 106, 40, 70, 243, 26, 99, 96, 49, 107, ++ 255, 247, 199, 253, 32, 96, 39, 177, 144, 248, 53, 48, 11, 177, 178, ++ 43, 100, 209, 102, 99, 31, 177, 67, 107, 3, 240, 1, 3, 0, 224, 59, 70, ++ 227, 98, 163, 98, 63, 177, 67, 107, 3, 240, 1, 3, 0, 43, 20, 191, 9, ++ 35, 7, 35, 0, 224, 7, 35, 35, 99, 31, 177, 67, 107, 195, 243, 192, 3, ++ 0, 224, 59, 70, 163, 99, 71, 179, 67, 107, 216, 6, 37, 213, 8, 33, 40, ++ 70, 255, 247, 142, 253, 64, 33, 224, 99, 40, 70, 255, 247, 137, 253, ++ 20, 33, 32, 100, 40, 70, 255, 247, 132, 253, 76, 33, 224, 100, 40, 70, ++ 255, 247, 127, 253, 35, 104, 32, 101, 91, 107, 153, 6, 9, 213, 88, 33, ++ 40, 70, 255, 247, 118, 253, 92, 33, 96, 100, 40, 70, 255, 247, 113, ++ 253, 1, 224, 227, 108, 99, 100, 160, 100, 17, 224, 8, 33, 40, 70, 255, ++ 247, 104, 253, 20, 33, 6, 70, 40, 70, 255, 247, 99, 253, 230, 99, 96, ++ 100, 224, 100, 38, 100, 160, 100, 32, 101, 1, 224, 70, 96, 6, 96, 40, ++ 70, 255, 247, 19, 254, 1, 45, 2, 209, 0, 32, 255, 247, 14, 254, 255, ++ 247, 74, 255, 0, 32, 248, 189, 1, 32, 248, 189, 1, 32, 248, 189, 164, ++ 203, 135, 0, 2, 120, 11, 120, 154, 66, 12, 209, 66, 120, 75, 120, 154, ++ 66, 10, 209, 128, 120, 139, 120, 195, 235, 0, 12, 220, 241, 0, 0, 64, ++ 235, 12, 0, 112, 71, 0, 32, 112, 71, 0, 32, 112, 71, 2, 120, 11, 120, ++ 154, 66, 6, 209, 64, 120, 75, 120, 195, 26, 88, 66, 64, 235, 3, 0, 112, ++ 71, 0, 32, 112, 71, 11, 120, 3, 112, 75, 120, 67, 112, 112, 71, 0, 0, ++ 3, 104, 26, 120, 26, 185, 91, 120, 11, 185, 1, 75, 3, 96, 112, 71, 164, ++ 58, 4, 0, 45, 233, 240, 65, 13, 70, 48, 33, 4, 70, 144, 70, 255, 247, ++ 14, 253, 6, 70, 8, 179, 65, 104, 9, 179, 32, 70, 255, 247, 22, 253, ++ 51, 104, 12, 38, 7, 70, 6, 251, 3, 6, 4, 70, 0, 224, 12, 52, 180, 66, ++ 5, 210, 32, 70, 41, 70, 255, 247, 177, 255, 0, 40, 246, 208, 184, 241, ++ 0, 15, 5, 208, 231, 27, 7, 75, 191, 16, 95, 67, 200, 248, 0, 112, 180, ++ 66, 40, 191, 0, 36, 2, 224, 4, 70, 0, 224, 12, 70, 32, 70, 189, 232, ++ 240, 129, 171, 170, 170, 170, 112, 181, 22, 70, 13, 70, 153, 177, 137, ++ 104, 255, 247, 234, 252, 4, 70, 136, 177, 109, 104, 5, 235, 69, 5, 69, ++ 25, 0, 224, 3, 52, 172, 66, 8, 210, 48, 70, 33, 70, 255, 247, 154, 255, ++ 0, 40, 246, 208, 2, 224, 12, 70, 0, 224, 0, 36, 32, 70, 112, 189, 112, ++ 181, 139, 24, 221, 120, 12, 70, 22, 70, 255, 247, 178, 252, 131, 106, ++ 75, 177, 227, 121, 198, 241, 4, 6, 118, 0, 19, 250, 6, 246, 6, 244, ++ 64, 118, 53, 67, 13, 224, 254, 45, 6, 208, 8, 216, 64, 242, 253, 51, ++ 253, 45, 8, 191, 29, 70, 4, 224, 64, 242, 254, 53, 1, 224, 64, 242, ++ 255, 53, 40, 70, 112, 189, 8, 181, 0, 34, 255, 247, 217, 255, 64, 242, ++ 253, 51, 194, 26, 80, 66, 64, 235, 2, 0, 8, 189, 112, 181, 13, 70, 40, ++ 33, 4, 70, 255, 247, 145, 252, 3, 70, 80, 177, 89, 104, 32, 70, 255, ++ 247, 154, 252, 6, 70, 32, 70, 255, 247, 123, 252, 0, 107, 0, 251, 5, ++ 96, 112, 189, 45, 233, 248, 67, 13, 70, 40, 33, 4, 70, 23, 70, 255, ++ 247, 123, 252, 0, 33, 128, 70, 32, 70, 255, 247, 223, 255, 6, 70, 32, ++ 70, 255, 247, 102, 252, 208, 248, 48, 144, 134, 177, 0, 36, 9, 224, ++ 48, 70, 41, 70, 255, 247, 33, 255, 16, 177, 71, 177, 60, 96, 6, 224, ++ 1, 52, 78, 68, 216, 248, 0, 48, 156, 66, 241, 219, 0, 38, 48, 70, 189, ++ 232, 248, 131, 45, 233, 240, 65, 68, 124, 7, 70, 4, 240, 1, 4, 32, 70, ++ 13, 70, 255, 247, 69, 252, 0, 33, 6, 70, 20, 34, 40, 70, 255, 247, 56, ++ 252, 6, 241, 60, 3, 43, 96, 56, 124, 16, 240, 71, 0, 53, 208, 56, 33, ++ 255, 247, 30, 252, 56, 33, 71, 30, 32, 70, 255, 247, 60, 252, 3, 70, ++ 136, 177, 2, 104, 151, 66, 14, 210, 89, 104, 32, 70, 255, 247, 66, 252, ++ 0, 235, 199, 3, 128, 70, 89, 104, 32, 70, 255, 247, 59, 252, 88, 248, ++ 55, 48, 168, 96, 107, 96, 179, 107, 187, 177, 32, 70, 60, 33, 255, 247, ++ 34, 252, 3, 70, 136, 177, 2, 104, 151, 66, 14, 210, 89, 104, 32, 70, ++ 255, 247, 40, 252, 0, 235, 199, 3, 6, 70, 89, 104, 32, 70, 255, 247, ++ 33, 252, 86, 248, 55, 48, 40, 97, 235, 96, 189, 232, 240, 129, 45, 233, ++ 248, 67, 20, 70, 21, 74, 4, 39, 18, 248, 3, 144, 79, 240, 1, 8, 79, ++ 234, 25, 19, 167, 64, 8, 250, 3, 248, 13, 70, 7, 235, 215, 119, 0, 33, ++ 2, 34, 6, 70, 95, 250, 136, 248, 127, 16, 255, 247, 224, 251, 95, 234, ++ 88, 8, 53, 85, 9, 208, 1, 60, 10, 212, 127, 16, 24, 234, 9, 15, 20, ++ 191, 237, 25, 199, 235, 5, 5, 241, 231, 1, 32, 189, 232, 248, 131, 0, ++ 32, 189, 232, 248, 131, 0, 191, 243, 58, 4, 0, 16, 181, 255, 247, 205, ++ 251, 3, 104, 92, 107, 20, 240, 2, 4, 8, 208, 68, 107, 5, 73, 82, 52, ++ 32, 70, 255, 247, 158, 251, 0, 40, 8, 191, 0, 36, 32, 70, 16, 189, 0, ++ 191, 246, 203, 135, 0, 16, 181, 4, 70, 255, 247, 182, 251, 0, 104, 32, ++ 177, 32, 70, 189, 232, 16, 64, 255, 247, 223, 191, 16, 189, 45, 233, ++ 248, 79, 5, 70, 12, 70, 22, 70, 154, 70, 0, 43, 78, 209, 152, 70, 64, ++ 70, 255, 247, 162, 251, 195, 106, 83, 177, 3, 104, 67, 177, 91, 107, ++ 153, 1, 5, 213, 64, 70, 180, 33, 255, 247, 163, 251, 129, 70, 40, 185, ++ 8, 241, 1, 8, 184, 241, 2, 15, 56, 208, 233, 231, 3, 104, 0, 43, 52, ++ 208, 64, 70, 217, 248, 4, 16, 255, 247, 162, 251, 217, 248, 0, 48, 7, ++ 70, 0, 235, 131, 11, 5, 224, 40, 70, 57, 70, 255, 247, 86, 254, 24, ++ 185, 4, 55, 95, 69, 247, 211, 32, 224, 217, 248, 8, 16, 64, 70, 255, ++ 247, 142, 251, 123, 136, 249, 136, 3, 235, 67, 2, 130, 24, 203, 26, ++ 15, 224, 17, 120, 80, 120, 9, 2, 9, 24, 37, 104, 14, 185, 144, 120, ++ 0, 224, 8, 70, 133, 66, 3, 209, 6, 177, 145, 120, 33, 96, 5, 224, 3, ++ 50, 19, 241, 255, 51, 236, 210, 79, 240, 1, 10, 80, 70, 189, 232, 248, ++ 143, 2, 74, 3, 75, 1, 33, 26, 96, 255, 247, 126, 189, 166, 58, 4, 0, ++ 216, 115, 4, 0, 0, 33, 255, 247, 119, 189, 24, 177, 0, 35, 3, 96, 24, ++ 70, 112, 71, 1, 32, 112, 71, 56, 177, 0, 35, 127, 34, 3, 96, 131, 96, ++ 66, 96, 195, 96, 24, 70, 112, 71, 1, 32, 112, 71, 45, 233, 247, 79, ++ 14, 70, 20, 70, 5, 70, 0, 40, 98, 208, 0, 41, 96, 208, 0, 42, 94, 208, ++ 0, 104, 16, 185, 0, 144, 1, 144, 6, 224, 105, 70, 1, 170, 255, 247, ++ 70, 251, 1, 155, 1, 51, 1, 147, 0, 152, 40, 33, 255, 247, 38, 251, 24, ++ 177, 1, 153, 3, 104, 153, 66, 10, 219, 0, 155, 19, 185, 1, 34, 0, 146, ++ 240, 231, 0, 177, 0, 104, 1, 144, 79, 240, 255, 52, 56, 224, 0, 152, ++ 255, 247, 124, 254, 128, 70, 65, 70, 0, 152, 255, 247, 108, 254, 7, ++ 70, 0, 40, 221, 209, 0, 155, 1, 43, 34, 209, 255, 247, 250, 250, 3, ++ 104, 243, 177, 40, 33, 56, 70, 255, 247, 0, 251, 57, 70, 130, 70, 56, ++ 70, 255, 247, 100, 254, 129, 70, 56, 70, 255, 247, 235, 250, 208, 248, ++ 48, 176, 6, 224, 64, 70, 73, 70, 255, 247, 168, 253, 40, 185, 1, 55, ++ 217, 68, 218, 248, 0, 48, 159, 66, 244, 219, 218, 248, 0, 48, 159, 66, ++ 183, 219, 48, 70, 65, 70, 255, 247, 187, 253, 152, 248, 2, 48, 35, 96, ++ 0, 36, 40, 70, 157, 232, 6, 0, 255, 247, 251, 250, 0, 224, 1, 36, 32, ++ 70, 189, 232, 254, 143, 127, 181, 12, 70, 1, 144, 21, 70, 48, 179, 42, ++ 179, 1, 168, 255, 247, 170, 253, 3, 168, 1, 153, 255, 247, 160, 253, ++ 3, 169, 0, 32, 2, 170, 141, 248, 14, 64, 255, 247, 60, 254, 1, 70, 64, ++ 185, 3, 169, 1, 32, 2, 170, 255, 247, 53, 254, 1, 70, 128, 177, 1, 38, ++ 0, 224, 0, 38, 48, 70, 255, 247, 14, 254, 4, 70, 64, 185, 40, 70, 49, ++ 70, 2, 154, 255, 247, 204, 250, 32, 70, 3, 224, 1, 32, 1, 224, 79, 240, ++ 255, 48, 4, 176, 112, 189, 0, 0, 45, 233, 243, 71, 14, 70, 0, 41, 75, ++ 208, 105, 70, 1, 170, 255, 247, 176, 250, 0, 152, 40, 33, 255, 247, ++ 147, 250, 0, 40, 67, 208, 1, 153, 3, 104, 153, 66, 63, 210, 0, 152, ++ 255, 247, 243, 253, 0, 36, 128, 70, 37, 70, 223, 248, 124, 160, 0, 159, ++ 10, 235, 4, 3, 211, 248, 4, 144, 56, 70, 74, 70, 65, 70, 255, 247, 182, ++ 253, 64, 242, 254, 51, 152, 66, 2, 70, 17, 209, 53, 185, 42, 70, 1, ++ 32, 65, 70, 255, 247, 237, 253, 5, 70, 48, 177, 74, 70, 1, 32, 41, 70, ++ 255, 247, 164, 253, 2, 70, 1, 224, 64, 242, 255, 50, 1, 39, 90, 248, ++ 4, 0, 57, 70, 48, 24, 8, 52, 255, 247, 128, 250, 32, 44, 211, 209, 0, ++ 152, 255, 247, 76, 250, 195, 106, 11, 177, 152, 248, 8, 48, 51, 116, ++ 0, 155, 0, 32, 115, 116, 3, 224, 1, 32, 1, 224, 79, 240, 255, 48, 189, ++ 232, 252, 135, 0, 191, 248, 58, 4, 0, 112, 181, 22, 70, 148, 176, 29, ++ 70, 0, 40, 61, 208, 1, 41, 59, 216, 11, 185, 18, 185, 54, 224, 2, 185, ++ 13, 174, 2, 170, 255, 247, 109, 250, 0, 40, 49, 208, 2, 156, 236, 177, ++ 7, 155, 34, 120, 0, 147, 3, 155, 48, 70, 5, 153, 27, 104, 255, 247, ++ 135, 251, 2, 155, 40, 70, 154, 120, 7, 155, 6, 153, 0, 147, 3, 155, ++ 27, 104, 255, 247, 125, 251, 237, 177, 0, 35, 241, 92, 234, 92, 10, ++ 64, 234, 84, 1, 51, 25, 43, 248, 209, 0, 32, 20, 224, 48, 70, 33, 70, ++ 34, 70, 35, 70, 0, 148, 255, 247, 107, 251, 40, 70, 33, 70, 34, 70, ++ 35, 70, 0, 148, 255, 247, 100, 251, 32, 70, 4, 224, 16, 70, 2, 224, ++ 1, 32, 0, 224, 40, 70, 20, 176, 112, 189, 0, 0, 45, 233, 240, 79, 14, ++ 70, 157, 176, 20, 70, 5, 70, 0, 40, 0, 240, 234, 128, 0, 42, 0, 240, ++ 231, 128, 1, 41, 0, 242, 228, 128, 79, 240, 102, 67, 19, 96, 6, 170, ++ 255, 247, 30, 250, 0, 40, 0, 240, 219, 128, 6, 155, 235, 177, 90, 120, ++ 2, 240, 3, 2, 1, 42, 2, 208, 2, 42, 8, 209, 3, 224, 34, 104, 66, 240, ++ 1, 2, 2, 224, 34, 104, 66, 240, 2, 2, 34, 96, 90, 120, 81, 7, 3, 213, ++ 34, 104, 66, 240, 4, 2, 34, 96, 218, 28, 6, 146, 219, 120, 2, 235, 67, ++ 2, 1, 50, 6, 146, 40, 70, 0, 46, 20, 191, 3, 33, 2, 33, 17, 170, 255, ++ 247, 243, 249, 0, 40, 0, 240, 176, 128, 0, 39, 171, 70, 7, 241, 24, ++ 1, 104, 70, 11, 88, 0, 43, 0, 240, 138, 128, 186, 70, 30, 120, 6, 240, ++ 73, 5, 1, 45, 9, 208, 8, 45, 10, 208, 72, 45, 11, 208, 9, 45, 12, 191, ++ 79, 240, 128, 101, 0, 37, 7, 224, 79, 240, 128, 69, 4, 224, 79, 240, ++ 0, 69, 1, 224, 79, 240, 0, 117, 6, 240, 48, 2, 18, 17, 208, 28, 2, 144, ++ 26, 177, 34, 104, 66, 240, 16, 2, 34, 96, 90, 120, 2, 51, 3, 146, 67, ++ 74, 4, 147, 18, 104, 6, 240, 73, 3, 211, 92, 198, 243, 64, 9, 155, 0, ++ 5, 147, 3, 155, 4, 159, 3, 241, 255, 56, 73, 224, 28, 168, 0, 235, 10, ++ 3, 83, 248, 80, 60, 5, 154, 185, 120, 152, 88, 255, 247, 161, 249, 59, ++ 120, 1, 120, 128, 43, 55, 208, 29, 177, 35, 104, 35, 234, 5, 5, 37, ++ 96, 65, 24, 90, 70, 5, 70, 179, 70, 14, 70, 39, 224, 21, 248, 1, 31, ++ 0, 146, 1, 145, 255, 247, 89, 249, 1, 153, 0, 154, 139, 8, 195, 92, ++ 1, 240, 3, 1, 73, 0, 83, 250, 1, 241, 1, 240, 3, 1, 1, 41, 9, 208, 2, ++ 41, 14, 208, 137, 185, 185, 241, 0, 15, 14, 208, 35, 104, 67, 240, 128, ++ 83, 9, 224, 185, 241, 0, 15, 7, 208, 35, 104, 67, 240, 0, 99, 2, 224, ++ 35, 104, 35, 240, 0, 83, 35, 96, 181, 66, 213, 209, 94, 70, 0, 37, 147, ++ 70, 2, 155, 8, 241, 255, 56, 255, 24, 184, 241, 255, 63, 178, 209, 2, ++ 154, 3, 152, 4, 153, 0, 251, 2, 19, 114, 7, 63, 245, 120, 175, 87, 70, ++ 44, 55, 88, 47, 127, 244, 107, 175, 93, 70, 43, 124, 27, 7, 3, 213, ++ 35, 104, 67, 240, 8, 3, 35, 96, 43, 124, 216, 6, 3, 213, 35, 104, 67, ++ 240, 32, 3, 35, 96, 40, 124, 16, 240, 32, 0, 6, 208, 35, 104, 0, 32, ++ 67, 240, 64, 3, 35, 96, 0, 224, 1, 32, 29, 176, 189, 232, 240, 143, ++ 0, 191, 216, 115, 4, 0, 45, 233, 240, 79, 12, 70, 133, 176, 0, 41, 75, ++ 208, 2, 169, 3, 170, 255, 247, 17, 249, 2, 152, 40, 33, 255, 247, 244, ++ 248, 0, 40, 65, 208, 3, 153, 3, 104, 153, 66, 61, 210, 2, 152, 255, ++ 247, 84, 252, 0, 37, 1, 144, 40, 70, 44, 33, 255, 247, 229, 248, 128, ++ 70, 72, 179, 40, 70, 216, 248, 4, 16, 255, 247, 237, 248, 24, 179, 6, ++ 70, 0, 39, 28, 224, 214, 248, 4, 176, 40, 70, 177, 104, 255, 247, 227, ++ 248, 187, 241, 255, 63, 17, 208, 130, 70, 79, 240, 0, 9, 11, 224, 80, ++ 70, 1, 153, 255, 247, 129, 251, 10, 241, 3, 10, 16, 177, 32, 70, 49, ++ 70, 14, 224, 9, 241, 1, 9, 217, 69, 241, 219, 1, 55, 12, 54, 216, 248, ++ 0, 48, 159, 66, 222, 219, 1, 53, 2, 45, 204, 209, 1, 153, 32, 70, 255, ++ 247, 140, 251, 0, 32, 0, 224, 1, 32, 5, 176, 189, 232, 240, 143, 45, ++ 233, 240, 79, 177, 176, 15, 70, 11, 146, 17, 147, 59, 157, 60, 158, ++ 4, 70, 0, 40, 0, 240, 119, 129, 0, 46, 0, 240, 116, 129, 1, 41, 0, 242, ++ 113, 129, 0, 45, 0, 240, 110, 129, 42, 104, 1, 42, 0, 242, 106, 129, ++ 58, 153, 2, 41, 0, 242, 102, 129, 171, 104, 2, 43, 0, 242, 98, 129, ++ 46, 168, 11, 153, 58, 155, 255, 247, 122, 252, 0, 40, 0, 240, 90, 129, ++ 47, 185, 43, 104, 51, 177, 157, 248, 184, 32, 3, 146, 4, 224, 0, 35, ++ 3, 147, 1, 224, 0, 33, 3, 145, 48, 70, 129, 33, 178, 34, 255, 247, 95, ++ 248, 32, 70, 57, 70, 19, 170, 255, 247, 164, 248, 0, 40, 0, 240, 65, ++ 129, 19, 155, 51, 177, 218, 28, 19, 146, 219, 120, 2, 235, 67, 2, 1, ++ 50, 19, 146, 32, 70, 0, 47, 20, 191, 3, 33, 2, 33, 30, 170, 255, 247, ++ 144, 248, 0, 40, 0, 240, 45, 129, 32, 70, 41, 169, 79, 240, 0, 10, 255, ++ 247, 245, 251, 205, 248, 24, 160, 6, 153, 44, 35, 75, 67, 19, 170, 212, ++ 88, 2, 235, 3, 9, 0, 44, 0, 240, 3, 129, 2, 34, 47, 168, 0, 33, 255, ++ 247, 44, 248, 58, 154, 43, 104, 42, 185, 48, 169, 11, 154, 203, 24, ++ 3, 248, 4, 44, 4, 224, 1, 43, 4, 191, 11, 155, 141, 248, 189, 48, 79, ++ 70, 176, 70, 134, 74, 33, 120, 18, 104, 1, 240, 73, 3, 18, 248, 3, 144, ++ 48, 170, 7, 235, 137, 3, 91, 105, 4, 145, 12, 147, 2, 235, 9, 3, 19, ++ 248, 4, 60, 5, 147, 1, 240, 48, 3, 27, 17, 217, 28, 9, 145, 35, 177, ++ 170, 104, 122, 75, 83, 248, 34, 32, 0, 224, 0, 34, 123, 104, 8, 146, ++ 83, 248, 41, 48, 16, 147, 187, 104, 83, 248, 41, 48, 13, 147, 99, 120, ++ 2, 52, 89, 30, 14, 147, 15, 148, 7, 145, 38, 70, 176, 224, 115, 120, ++ 16, 154, 9, 153, 2, 235, 67, 3, 10, 147, 8, 155, 139, 66, 24, 219, 186, ++ 241, 0, 15, 64, 240, 159, 128, 5, 154, 0, 42, 0, 240, 155, 128, 16, ++ 70, 10, 153, 12, 154, 235, 104, 255, 247, 174, 249, 0, 40, 0, 240, 146, ++ 128, 150, 248, 0, 160, 186, 241, 128, 10, 24, 191, 79, 240, 1, 10, 137, ++ 224, 8, 155, 244, 92, 128, 44, 9, 208, 4, 153, 139, 7, 2, 213, 17, 154, ++ 164, 26, 228, 178, 107, 104, 156, 66, 200, 191, 220, 178, 5, 155, 0, ++ 43, 59, 208, 24, 70, 10, 153, 12, 154, 235, 104, 255, 247, 140, 249, ++ 0, 40, 51, 208, 177, 120, 13, 152, 254, 247, 240, 255, 144, 248, 0, ++ 192, 41, 70, 132, 68, 131, 70, 82, 70, 101, 70, 31, 224, 3, 155, 27, ++ 248, 1, 175, 131, 177, 2, 145, 1, 146, 254, 247, 173, 255, 79, 234, ++ 154, 3, 192, 92, 10, 240, 3, 3, 91, 0, 80, 250, 3, 243, 19, 240, 3, ++ 15, 2, 153, 1, 154, 10, 208, 24, 249, 10, 48, 19, 241, 127, 15, 3, 208, ++ 163, 66, 3, 221, 128, 51, 1, 208, 8, 248, 10, 64, 171, 69, 221, 209, ++ 146, 70, 13, 70, 128, 44, 24, 191, 79, 240, 1, 10, 3, 153, 0, 41, 57, ++ 208, 185, 241, 0, 15, 54, 209, 8, 70, 122, 105, 10, 153, 75, 70, 255, ++ 247, 74, 249, 0, 40, 46, 208, 177, 120, 13, 152, 254, 247, 174, 255, ++ 1, 120, 172, 70, 9, 24, 131, 70, 82, 70, 13, 70, 31, 224, 27, 248, 1, ++ 175, 1, 146, 205, 248, 8, 192, 254, 247, 109, 255, 79, 234, 154, 3, ++ 192, 92, 10, 240, 3, 3, 91, 0, 80, 250, 3, 243, 19, 240, 3, 15, 1, 154, ++ 221, 248, 8, 192, 10, 209, 24, 249, 10, 48, 19, 241, 127, 15, 3, 208, ++ 163, 66, 3, 221, 128, 51, 1, 208, 8, 248, 10, 64, 171, 69, 221, 209, ++ 146, 70, 101, 70, 7, 155, 9, 154, 1, 59, 182, 24, 7, 147, 7, 153, 1, ++ 49, 127, 244, 75, 175, 9, 154, 14, 155, 15, 153, 3, 251, 2, 20, 4, 154, ++ 80, 7, 63, 245, 19, 175, 70, 70, 6, 155, 1, 51, 2, 43, 6, 147, 127, ++ 244, 237, 174, 186, 241, 0, 15, 16, 208, 6, 241, 178, 3, 22, 248, 1, ++ 43, 130, 240, 128, 2, 1, 42, 2, 216, 128, 34, 6, 248, 1, 44, 179, 66, ++ 244, 216, 0, 32, 3, 224, 1, 32, 1, 224, 79, 240, 255, 48, 49, 176, 189, ++ 232, 240, 143, 216, 115, 4, 0, 28, 58, 4, 0, 45, 233, 240, 79, 139, ++ 70, 161, 176, 146, 70, 4, 70, 0, 40, 0, 240, 168, 128, 0, 41, 0, 240, ++ 165, 128, 0, 42, 0, 240, 162, 128, 8, 70, 25, 34, 0, 33, 254, 247, 247, ++ 254, 80, 70, 0, 33, 25, 34, 254, 247, 242, 254, 32, 70, 1, 33, 10, 170, ++ 254, 247, 55, 255, 0, 40, 0, 240, 144, 128, 10, 155, 51, 177, 218, 28, ++ 10, 146, 219, 120, 2, 235, 67, 2, 1, 50, 10, 146, 32, 70, 3, 33, 21, ++ 170, 254, 247, 38, 255, 0, 40, 127, 208, 79, 240, 0, 9, 44, 35, 3, 251, ++ 9, 243, 10, 168, 0, 235, 3, 8, 195, 88, 0, 43, 109, 208, 71, 70, 205, ++ 248, 36, 144, 25, 120, 185, 70, 1, 240, 73, 2, 1, 145, 56, 73, 1, 152, ++ 9, 104, 142, 92, 90, 120, 2, 51, 4, 147, 0, 240, 48, 3, 27, 17, 3, 51, ++ 5, 147, 123, 104, 221, 248, 16, 128, 83, 248, 38, 48, 0, 46, 20, 191, ++ 81, 70, 89, 70, 7, 147, 7, 235, 134, 3, 91, 105, 2, 241, 255, 60, 6, ++ 147, 51, 70, 103, 70, 70, 70, 220, 70, 3, 146, 2, 145, 211, 70, 152, ++ 70, 50, 224, 115, 120, 7, 154, 2, 235, 67, 3, 8, 147, 9, 235, 136, 3, ++ 91, 105, 93, 104, 51, 120, 128, 43, 35, 208, 6, 155, 211, 248, 0, 160, ++ 28, 224, 44, 120, 22, 224, 156, 177, 32, 70, 8, 153, 6, 154, 0, 35, ++ 205, 248, 0, 192, 255, 247, 95, 248, 221, 248, 0, 192, 64, 177, 4, 240, ++ 7, 2, 1, 33, 145, 64, 2, 152, 227, 16, 194, 92, 10, 67, 194, 84, 171, ++ 120, 228, 24, 107, 120, 156, 66, 229, 221, 3, 53, 26, 241, 255, 58, ++ 223, 210, 5, 153, 1, 63, 118, 24, 121, 28, 202, 209, 3, 168, 7, 200, ++ 0, 251, 2, 19, 1, 154, 218, 70, 82, 7, 79, 70, 227, 70, 150, 212, 221, ++ 248, 36, 144, 9, 241, 1, 9, 185, 241, 2, 15, 131, 209, 0, 32, 0, 224, ++ 1, 32, 33, 176, 189, 232, 240, 143, 0, 191, 216, 115, 4, 0, 45, 233, ++ 240, 67, 23, 70, 141, 176, 30, 70, 32, 179, 1, 41, 34, 216, 11, 179, ++ 1, 170, 254, 247, 145, 254, 232, 177, 1, 155, 219, 177, 2, 154, 220, ++ 120, 210, 248, 0, 128, 221, 248, 24, 144, 29, 29, 1, 60, 14, 224, 105, ++ 120, 56, 70, 8, 235, 65, 1, 74, 70, 0, 35, 255, 247, 11, 248, 1, 60, ++ 24, 177, 43, 120, 0, 32, 51, 96, 5, 224, 2, 53, 96, 28, 238, 209, 32, ++ 70, 0, 224, 1, 32, 13, 176, 189, 232, 240, 131, 48, 181, 133, 176, 1, ++ 144, 13, 70, 20, 70, 8, 179, 2, 179, 1, 168, 255, 247, 13, 249, 3, 168, ++ 1, 153, 255, 247, 3, 249, 0, 32, 3, 169, 2, 170, 141, 248, 14, 80, 255, ++ 247, 12, 249, 56, 185, 1, 32, 3, 169, 2, 170, 255, 247, 6, 249, 104, ++ 177, 1, 33, 0, 224, 0, 33, 64, 104, 67, 28, 9, 208, 32, 70, 2, 154, ++ 254, 247, 52, 254, 0, 32, 3, 224, 1, 32, 1, 224, 79, 240, 255, 48, 5, ++ 176, 48, 189, 48, 181, 133, 176, 4, 70, 1, 145, 21, 70, 0, 41, 47, 208, ++ 0, 42, 45, 208, 1, 168, 255, 247, 221, 248, 32, 70, 3, 170, 2, 169, ++ 254, 247, 17, 254, 48, 33, 2, 152, 254, 247, 244, 253, 3, 70, 89, 104, ++ 2, 152, 254, 247, 254, 253, 3, 155, 12, 36, 4, 251, 3, 4, 1, 154, 2, ++ 152, 33, 70, 255, 247, 4, 249, 2, 70, 40, 177, 131, 120, 255, 43, 16, ++ 208, 43, 96, 0, 32, 15, 224, 2, 155, 1, 43, 10, 208, 1, 32, 33, 70, ++ 2, 144, 255, 247, 192, 248, 4, 70, 0, 40, 231, 209, 1, 224, 1, 32, 1, ++ 224, 79, 240, 255, 48, 5, 176, 48, 189, 1, 32, 255, 247, 3, 186, 0, ++ 0, 248, 181, 5, 70, 15, 70, 81, 177, 2, 41, 10, 209, 0, 32, 254, 247, ++ 179, 253, 6, 104, 214, 241, 1, 6, 56, 191, 0, 38, 2, 224, 1, 38, 0, ++ 224, 0, 38, 48, 70, 254, 247, 167, 253, 2, 47, 66, 107, 45, 216, 3, ++ 104, 75, 179, 4, 45, 41, 216, 223, 232, 5, 240, 3, 6, 9, 12, 20, 0, ++ 2, 241, 14, 4, 22, 224, 2, 241, 34, 4, 19, 224, 2, 241, 52, 4, 16, 224, ++ 92, 107, 20, 240, 2, 4, 24, 208, 2, 241, 82, 4, 12, 73, 9, 224, 92, ++ 107, 20, 240, 64, 4, 16, 208, 48, 70, 25, 110, 254, 247, 157, 253, 4, ++ 70, 8, 73, 76, 177, 32, 70, 254, 247, 88, 253, 0, 40, 8, 191, 0, 36, ++ 2, 224, 28, 70, 0, 224, 0, 36, 32, 70, 248, 189, 0, 191, 246, 203, 135, ++ 0, 60, 199, 136, 0, 112, 181, 13, 70, 20, 70, 255, 247, 52, 250, 33, ++ 70, 3, 70, 0, 34, 40, 70, 189, 232, 112, 64, 255, 247, 179, 185, 55, ++ 181, 2, 171, 67, 248, 4, 29, 5, 70, 20, 70, 25, 70, 1, 34, 0, 35, 255, ++ 247, 168, 249, 40, 70, 1, 153, 34, 70, 255, 247, 138, 250, 62, 189, ++ 55, 181, 2, 171, 67, 248, 4, 29, 5, 70, 20, 70, 25, 70, 1, 34, 0, 35, ++ 255, 247, 151, 249, 40, 70, 1, 153, 34, 70, 255, 247, 21, 255, 62, 189, ++ 112, 181, 13, 70, 20, 70, 255, 247, 61, 255, 33, 70, 3, 70, 0, 34, 40, ++ 70, 189, 232, 112, 64, 255, 247, 132, 185, 45, 233, 240, 79, 137, 176, ++ 221, 248, 76, 144, 0, 35, 20, 172, 185, 241, 3, 15, 130, 70, 144, 70, ++ 18, 158, 148, 232, 144, 8, 5, 104, 1, 147, 2, 147, 12, 217, 4, 34, 1, ++ 168, 49, 70, 217, 247, 11, 248, 185, 241, 7, 15, 4, 217, 2, 168, 49, ++ 29, 4, 34, 217, 247, 3, 248, 184, 241, 1, 15, 50, 208, 4, 211, 184, ++ 241, 6, 15, 64, 240, 203, 128, 159, 224, 213, 248, 92, 1, 37, 240, 218, ++ 221, 218, 243, 40, 244, 8, 63, 1, 48, 135, 66, 192, 240, 194, 128, 213, ++ 248, 92, 1, 37, 240, 209, 221, 0, 38, 1, 70, 3, 34, 32, 70, 218, 243, ++ 69, 244, 230, 112, 213, 248, 92, 1, 37, 240, 6, 222, 96, 96, 213, 248, ++ 92, 1, 37, 240, 191, 221, 7, 70, 213, 248, 92, 1, 37, 240, 186, 221, ++ 218, 243, 8, 244, 57, 70, 66, 28, 4, 241, 8, 0, 218, 243, 46, 244, 161, ++ 224, 32, 70, 82, 73, 218, 243, 213, 243, 176, 185, 4, 241, 8, 1, 4, ++ 34, 5, 168, 216, 247, 194, 255, 163, 121, 98, 121, 27, 4, 67, 234, 2, ++ 35, 34, 121, 213, 248, 92, 1, 19, 67, 226, 121, 5, 169, 67, 234, 2, ++ 98, 254, 247, 115, 248, 6, 70, 133, 224, 0, 33, 4, 34, 3, 168, 218, ++ 243, 44, 243, 33, 70, 3, 47, 180, 191, 58, 70, 3, 34, 3, 168, 218, 243, ++ 4, 244, 3, 169, 4, 34, 4, 168, 216, 247, 159, 255, 3, 168, 4, 33, 38, ++ 240, 181, 223, 6, 70, 0, 40, 108, 209, 11, 47, 16, 221, 167, 121, 99, ++ 121, 63, 4, 71, 234, 3, 39, 35, 121, 5, 168, 31, 67, 227, 121, 4, 241, ++ 8, 1, 4, 34, 71, 234, 3, 103, 216, 247, 134, 255, 3, 224, 141, 248, ++ 20, 0, 79, 240, 255, 55, 5, 168, 4, 33, 38, 240, 151, 223, 6, 70, 0, ++ 40, 78, 209, 157, 248, 20, 48, 213, 248, 92, 1, 27, 185, 3, 169, 38, ++ 240, 46, 220, 3, 224, 5, 169, 58, 70, 38, 240, 45, 220, 6, 70, 0, 40, ++ 62, 209, 40, 70, 3, 240, 203, 218, 10, 241, 4, 0, 4, 169, 4, 34, 216, ++ 247, 97, 255, 213, 248, 136, 1, 0, 40, 49, 208, 7, 240, 167, 220, 46, ++ 224, 0, 33, 4, 34, 5, 168, 218, 243, 213, 242, 5, 168, 49, 70, 3, 34, ++ 218, 243, 176, 243, 0, 35, 35, 96, 6, 168, 255, 247, 20, 249, 16, 224, ++ 4, 168, 5, 169, 2, 34, 218, 243, 129, 243, 80, 185, 35, 104, 11, 241, ++ 255, 50, 147, 66, 5, 210, 7, 153, 4, 235, 131, 2, 1, 51, 81, 96, 35, ++ 96, 6, 168, 4, 169, 7, 170, 255, 247, 214, 254, 0, 40, 231, 208, 0, ++ 38, 4, 224, 111, 240, 22, 6, 1, 224, 111, 240, 13, 6, 48, 70, 9, 176, ++ 189, 232, 240, 143, 0, 191, 105, 86, 136, 0, 45, 233, 240, 65, 4, 104, ++ 138, 176, 212, 248, 124, 129, 5, 70, 216, 248, 4, 48, 212, 248, 168, ++ 116, 198, 88, 35, 104, 27, 126, 0, 43, 0, 240, 229, 128, 32, 105, 42, ++ 240, 58, 221, 3, 70, 24, 177, 160, 104, 227, 247, 254, 251, 219, 224, ++ 143, 179, 215, 248, 248, 32, 146, 104, 22, 58, 1, 42, 43, 216, 2, 34, ++ 212, 248, 116, 1, 57, 70, 8, 240, 29, 216, 1, 33, 79, 240, 255, 51, ++ 32, 70, 58, 70, 42, 240, 250, 220, 215, 248, 248, 48, 155, 104, 22, ++ 43, 10, 209, 212, 248, 208, 36, 212, 248, 204, 52, 2, 50, 56, 70, 83, ++ 248, 34, 16, 248, 247, 81, 251, 183, 224, 215, 248, 240, 48, 1, 33, ++ 147, 249, 52, 48, 56, 70, 211, 241, 1, 3, 7, 241, 188, 2, 56, 191, 0, ++ 35, 249, 247, 126, 252, 168, 224, 171, 121, 3, 179, 115, 122, 1, 43, ++ 29, 209, 212, 248, 36, 1, 7, 169, 42, 70, 65, 240, 184, 217, 15, 224, ++ 2, 125, 216, 248, 8, 48, 210, 7, 195, 88, 9, 212, 144, 248, 36, 32, ++ 151, 7, 5, 213, 208, 248, 168, 113, 23, 185, 27, 120, 2, 43, 7, 209, ++ 212, 248, 36, 1, 7, 169, 19, 240, 74, 254, 0, 40, 232, 209, 1, 39, 171, ++ 121, 0, 43, 43, 208, 115, 122, 1, 43, 44, 209, 40, 70, 241, 136, 252, ++ 243, 181, 241, 212, 248, 116, 1, 41, 70, 2, 34, 0, 35, 7, 240, 194, ++ 223, 212, 248, 36, 1, 7, 169, 42, 70, 65, 240, 136, 217, 14, 224, 216, ++ 248, 8, 48, 194, 88, 3, 125, 217, 7, 8, 212, 144, 248, 36, 48, 155, ++ 7, 4, 213, 208, 248, 168, 49, 11, 185, 19, 112, 83, 112, 212, 248, 36, ++ 1, 7, 169, 19, 240, 27, 254, 0, 40, 233, 209, 24, 224, 115, 121, 11, ++ 177, 51, 105, 163, 177, 212, 248, 116, 1, 41, 70, 7, 240, 125, 223, ++ 128, 7, 13, 213, 171, 121, 3, 185, 51, 97, 40, 70, 241, 136, 252, 243, ++ 126, 241, 212, 248, 116, 1, 41, 70, 2, 34, 0, 35, 7, 240, 139, 223, ++ 171, 121, 59, 179, 115, 122, 1, 43, 36, 209, 31, 187, 212, 248, 116, ++ 1, 41, 70, 2, 34, 59, 70, 7, 240, 126, 223, 212, 248, 36, 1, 7, 169, ++ 42, 70, 65, 240, 68, 217, 14, 224, 216, 248, 8, 48, 194, 88, 3, 125, ++ 217, 7, 8, 212, 144, 248, 36, 48, 155, 7, 4, 213, 208, 248, 168, 49, ++ 11, 185, 19, 112, 83, 112, 212, 248, 36, 1, 7, 169, 19, 240, 215, 253, ++ 0, 40, 233, 209, 171, 121, 3, 177, 103, 177, 50, 29, 3, 146, 1, 34, ++ 0, 35, 4, 146, 32, 70, 41, 70, 80, 34, 0, 147, 1, 147, 2, 147, 251, ++ 243, 63, 243, 0, 35, 115, 113, 51, 113, 10, 176, 189, 232, 240, 129, ++ 0, 0, 45, 233, 240, 79, 135, 176, 31, 70, 16, 155, 7, 241, 2, 9, 163, ++ 241, 2, 8, 208, 248, 0, 160, 6, 70, 12, 70, 147, 70, 72, 70, 37, 34, ++ 65, 70, 3, 147, 223, 247, 0, 255, 218, 248, 0, 32, 5, 70, 3, 155, 16, ++ 177, 65, 120, 2, 41, 10, 216, 210, 248, 136, 32, 80, 70, 17, 111, 1, ++ 49, 17, 103, 89, 70, 58, 70, 3, 240, 72, 223, 70, 224, 146, 248, 79, ++ 112, 23, 240, 3, 7, 30, 208, 72, 70, 65, 70, 62, 34, 223, 247, 227, ++ 254, 32, 177, 67, 120, 1, 43, 1, 209, 135, 120, 19, 224, 53, 34, 6, ++ 171, 3, 248, 1, 45, 1, 34, 0, 146, 72, 70, 65, 70, 25, 74, 218, 243, ++ 110, 244, 32, 177, 67, 120, 5, 43, 3, 209, 135, 121, 2, 224, 7, 70, ++ 0, 224, 0, 39, 163, 121, 3, 187, 35, 122, 243, 177, 11, 241, 16, 0, ++ 4, 241, 188, 1, 6, 34, 216, 247, 193, 253, 129, 70, 168, 185, 115, 104, ++ 80, 70, 84, 248, 3, 128, 171, 120, 58, 70, 136, 248, 4, 48, 43, 121, ++ 136, 248, 5, 48, 233, 120, 0, 240, 126, 222, 136, 248, 8, 144, 168, ++ 248, 6, 0, 33, 70, 48, 70, 39, 240, 132, 216, 7, 176, 189, 232, 240, ++ 143, 0, 191, 98, 21, 4, 0, 45, 233, 240, 65, 67, 104, 6, 104, 205, 88, ++ 209, 248, 244, 112, 108, 121, 60, 185, 150, 248, 116, 50, 35, 240, 2, ++ 3, 134, 248, 116, 50, 189, 232, 240, 129, 1, 60, 228, 178, 108, 113, ++ 116, 185, 41, 104, 176, 104, 239, 243, 129, 245, 250, 141, 176, 104, ++ 41, 104, 9, 42, 136, 191, 10, 34, 35, 70, 189, 232, 240, 65, 239, 243, ++ 80, 181, 189, 232, 240, 129, 45, 233, 240, 65, 152, 70, 67, 104, 5, ++ 104, 7, 70, 203, 88, 16, 104, 22, 70, 88, 96, 146, 136, 56, 70, 26, ++ 129, 12, 70, 39, 240, 136, 221, 184, 241, 0, 15, 4, 208, 32, 70, 113, ++ 136, 252, 243, 133, 240, 12, 224, 3, 34, 19, 70, 213, 248, 116, 1, 33, ++ 70, 7, 240, 145, 222, 149, 248, 116, 50, 67, 240, 2, 3, 133, 248, 116, ++ 50, 40, 70, 33, 70, 251, 243, 145, 243, 40, 70, 33, 70, 1, 34, 189, ++ 232, 240, 65, 251, 243, 210, 179, 3, 104, 2, 70, 112, 181, 24, 70, 11, ++ 179, 1, 120, 16, 76, 3, 70, 101, 92, 1, 48, 173, 6, 1, 212, 33, 185, ++ 1, 224, 0, 41, 244, 209, 0, 32, 0, 224, 24, 70, 29, 70, 19, 248, 1, ++ 27, 102, 92, 22, 240, 32, 15, 1, 208, 25, 185, 7, 224, 0, 41, 244, 209, ++ 4, 224, 43, 70, 0, 33, 3, 248, 1, 27, 0, 224, 0, 35, 19, 96, 112, 189, ++ 112, 189, 22, 119, 135, 0, 248, 181, 12, 70, 23, 70, 208, 248, 180, ++ 98, 111, 240, 22, 5, 18, 224, 32, 70, 49, 104, 218, 243, 54, 241, 96, ++ 185, 115, 104, 176, 104, 57, 70, 152, 71, 123, 104, 21, 241, 23, 15, ++ 8, 191, 0, 37, 51, 177, 0, 40, 24, 191, 5, 70, 246, 104, 0, 46, 234, ++ 209, 1, 224, 111, 240, 13, 5, 40, 70, 248, 189, 240, 181, 135, 176, ++ 12, 70, 22, 70, 25, 70, 5, 70, 12, 154, 1, 168, 218, 243, 236, 242, ++ 166, 25, 35, 70, 179, 66, 26, 70, 65, 208, 17, 120, 1, 51, 0, 41, 248, ++ 209, 68, 224, 33, 70, 50, 70, 6, 174, 216, 247, 251, 252, 70, 248, 4, ++ 125, 48, 70, 255, 247, 150, 255, 4, 70, 48, 70, 255, 247, 146, 255, ++ 6, 70, 4, 179, 32, 177, 1, 168, 29, 73, 34, 70, 218, 243, 226, 242, ++ 33, 70, 40, 70, 1, 170, 255, 247, 175, 255, 4, 70, 152, 185, 14, 224, ++ 23, 73, 50, 70, 1, 168, 218, 243, 213, 242, 40, 70, 49, 70, 1, 170, ++ 255, 247, 162, 255, 48, 185, 5, 168, 255, 247, 116, 255, 6, 70, 0, 46, ++ 238, 209, 0, 224, 4, 70, 56, 70, 225, 247, 105, 252, 3, 155, 1, 154, ++ 147, 66, 9, 209, 2, 154, 58, 177, 0, 34, 26, 112, 4, 224, 111, 240, ++ 1, 4, 1, 224, 111, 240, 26, 4, 32, 70, 7, 176, 240, 189, 22, 27, 1, ++ 54, 48, 70, 225, 247, 80, 252, 7, 70, 0, 40, 178, 209, 241, 231, 204, ++ 60, 4, 0, 45, 233, 255, 65, 11, 158, 0, 35, 3, 46, 128, 70, 20, 70, ++ 10, 159, 12, 157, 3, 147, 4, 217, 3, 168, 57, 70, 4, 34, 216, 247, 160, ++ 252, 64, 70, 15, 153, 252, 247, 10, 254, 124, 185, 10, 75, 27, 104, ++ 219, 3, 2, 213, 44, 112, 32, 70, 10, 224, 13, 155, 64, 70, 0, 147, 57, ++ 70, 50, 70, 43, 70, 255, 247, 120, 255, 1, 224, 111, 240, 22, 0, 4, ++ 176, 189, 232, 240, 129, 8, 7, 0, 0, 56, 181, 139, 120, 28, 29, 162, ++ 66, 48, 211, 10, 120, 1, 42, 48, 209, 19, 43, 52, 191, 26, 70, 19, 34, ++ 75, 120, 2, 43, 4, 208, 3, 43, 30, 208, 1, 43, 40, 209, 1, 224, 0, 35, ++ 21, 224, 0, 35, 7, 224, 204, 24, 37, 121, 144, 248, 35, 64, 1, 51, 44, ++ 67, 128, 248, 35, 64, 1, 48, 147, 66, 244, 219, 15, 224, 204, 24, 37, ++ 121, 144, 248, 35, 64, 1, 51, 44, 64, 128, 248, 35, 64, 1, 48, 147, ++ 66, 244, 219, 3, 224, 36, 48, 4, 49, 216, 247, 80, 252, 0, 32, 56, 189, ++ 111, 240, 13, 0, 56, 189, 111, 240, 36, 0, 56, 189, 0, 32, 56, 189, ++ 56, 181, 4, 70, 16, 70, 138, 120, 21, 29, 171, 66, 15, 211, 11, 120, ++ 1, 43, 15, 209, 19, 42, 40, 191, 19, 34, 19, 35, 130, 112, 195, 112, ++ 4, 241, 36, 1, 4, 48, 216, 247, 49, 252, 0, 32, 56, 189, 111, 240, 13, ++ 0, 56, 189, 111, 240, 36, 0, 56, 189, 8, 181, 0, 241, 36, 3, 16, 34, ++ 8, 70, 25, 70, 216, 247, 33, 252, 0, 32, 8, 189, 56, 181, 16, 34, 4, ++ 70, 36, 48, 216, 247, 25, 252, 44, 33, 32, 70, 165, 104, 39, 240, 34, ++ 223, 2, 28, 24, 191, 1, 34, 40, 70, 1, 33, 232, 247, 144, 250, 0, 32, ++ 56, 189, 0, 0, 45, 233, 240, 79, 133, 176, 155, 70, 16, 157, 14, 155, ++ 4, 70, 14, 70, 145, 70, 3, 147, 15, 159, 208, 248, 8, 128, 245, 185, ++ 216, 248, 4, 16, 7, 245, 140, 114, 115, 104, 39, 240, 255, 221, 5, 70, ++ 56, 185, 32, 70, 49, 70, 42, 70, 5, 176, 189, 232, 240, 79, 39, 240, ++ 157, 157, 32, 70, 49, 70, 1, 34, 39, 240, 152, 221, 171, 104, 79, 240, ++ 1, 10, 206, 51, 171, 96, 171, 137, 206, 59, 171, 129, 1, 224, 79, 240, ++ 0, 10, 172, 104, 73, 70, 6, 34, 4, 241, 6, 9, 32, 70, 216, 247, 211, ++ 251, 89, 70, 6, 34, 72, 70, 216, 247, 206, 251, 72, 70, 33, 70, 6, 34, ++ 216, 247, 182, 251, 24, 185, 163, 121, 131, 240, 2, 3, 163, 113, 111, ++ 240, 119, 3, 35, 115, 108, 35, 79, 240, 0, 9, 99, 115, 79, 240, 1, 11, ++ 111, 240, 127, 3, 163, 115, 37, 73, 3, 34, 132, 248, 15, 176, 132, 248, ++ 18, 144, 4, 241, 19, 0, 216, 247, 174, 251, 7, 241, 56, 3, 155, 178, ++ 26, 10, 66, 234, 3, 35, 35, 130, 132, 248, 22, 144, 132, 248, 23, 176, ++ 4, 241, 24, 1, 186, 241, 0, 15, 5, 208, 141, 232, 128, 2, 64, 70, 50, ++ 70, 3, 155, 6, 224, 205, 248, 0, 160, 205, 248, 4, 160, 64, 70, 50, ++ 70, 83, 70, 39, 240, 247, 219, 79, 240, 0, 9, 7, 241, 74, 3, 72, 52, ++ 171, 129, 4, 248, 7, 144, 228, 25, 64, 70, 41, 70, 132, 248, 1, 144, ++ 39, 240, 50, 220, 113, 107, 64, 70, 252, 247, 234, 252, 115, 107, 1, ++ 70, 26, 121, 64, 70, 2, 42, 12, 191, 26, 105, 74, 70, 43, 70, 4, 240, ++ 231, 217, 0, 32, 5, 176, 189, 232, 240, 143, 0, 191, 102, 21, 4, 0, ++ 151, 41, 112, 181, 4, 70, 13, 70, 22, 70, 17, 216, 36, 48, 18, 177, ++ 219, 243, 170, 240, 1, 224, 218, 243, 37, 245, 44, 45, 11, 209, 1, 33, ++ 50, 28, 160, 104, 24, 191, 1, 34, 232, 247, 215, 249, 0, 32, 112, 189, ++ 79, 240, 255, 48, 112, 189, 0, 32, 112, 189, 3, 104, 16, 181, 203, 88, ++ 131, 177, 130, 138, 156, 24, 148, 248, 97, 16, 1, 41, 10, 209, 152, ++ 88, 161, 105, 23, 240, 147, 251, 225, 105, 0, 35, 203, 128, 163, 97, ++ 227, 97, 132, 248, 97, 48, 16, 189, 56, 181, 133, 105, 4, 70, 101, 177, ++ 232, 104, 8, 177, 225, 247, 204, 250, 168, 104, 8, 177, 225, 247, 200, ++ 250, 160, 105, 225, 247, 197, 250, 0, 35, 163, 97, 224, 105, 24, 177, ++ 225, 247, 191, 250, 0, 35, 227, 97, 56, 189, 112, 181, 5, 70, 12, 70, ++ 40, 240, 134, 217, 6, 70, 128, 177, 144, 248, 97, 48, 155, 185, 131, ++ 105, 35, 185, 212, 32, 222, 243, 156, 244, 176, 97, 48, 177, 243, 105, ++ 83, 185, 232, 32, 222, 243, 149, 244, 240, 97, 40, 185, 40, 70, 33, ++ 70, 189, 232, 112, 64, 39, 240, 93, 159, 112, 189, 240, 181, 3, 104, ++ 135, 176, 205, 88, 0, 45, 47, 208, 134, 138, 171, 25, 46, 208, 156, ++ 105, 3, 171, 0, 147, 5, 171, 1, 147, 0, 32, 2, 170, 4, 171, 66, 240, ++ 221, 221, 2, 152, 4, 153, 48, 34, 223, 247, 210, 251, 7, 70, 240, 177, ++ 224, 104, 8, 177, 225, 247, 127, 250, 120, 120, 2, 48, 224, 128, 225, ++ 247, 119, 250, 224, 96, 152, 177, 57, 70, 226, 136, 216, 247, 215, 250, ++ 168, 89, 4, 241, 60, 1, 32, 34, 0, 240, 251, 218, 48, 35, 163, 130, ++ 16, 35, 35, 131, 2, 35, 99, 131, 1, 224, 40, 70, 0, 224, 1, 32, 7, 176, ++ 240, 189, 2, 104, 112, 181, 140, 88, 100, 177, 134, 138, 40, 240, 142, ++ 216, 165, 25, 169, 105, 17, 177, 160, 89, 23, 240, 12, 251, 235, 105, ++ 11, 177, 0, 34, 218, 128, 112, 189, 11, 121, 19, 185, 9, 104, 255, 247, ++ 233, 191, 112, 71, 45, 233, 240, 71, 20, 70, 2, 104, 5, 70, 136, 88, ++ 14, 70, 0, 40, 64, 208, 175, 138, 83, 43, 7, 68, 215, 248, 24, 160, ++ 54, 217, 99, 120, 2, 51, 83, 43, 50, 217, 120, 107, 8, 177, 225, 247, ++ 51, 250, 96, 120, 2, 48, 56, 134, 225, 247, 43, 250, 120, 99, 16, 185, ++ 56, 134, 189, 232, 240, 135, 33, 70, 58, 142, 216, 247, 136, 250, 123, ++ 107, 183, 248, 48, 128, 3, 241, 84, 9, 168, 241, 84, 8, 65, 70, 1, 34, ++ 72, 70, 223, 247, 102, 251, 65, 70, 248, 99, 3, 34, 72, 70, 223, 247, ++ 96, 251, 184, 99, 96, 177, 251, 107, 107, 177, 4, 241, 20, 1, 10, 241, ++ 28, 0, 32, 34, 216, 247, 107, 250, 40, 70, 49, 70, 40, 240, 149, 221, ++ 1, 32, 189, 232, 240, 135, 1, 32, 189, 232, 240, 135, 3, 104, 45, 233, ++ 240, 65, 206, 88, 128, 70, 12, 70, 0, 46, 46, 208, 177, 248, 90, 48, ++ 135, 138, 91, 4, 41, 213, 209, 248, 236, 48, 2, 43, 3, 209, 189, 232, ++ 240, 65, 40, 240, 128, 154, 245, 25, 149, 248, 97, 48, 19, 185, 255, ++ 247, 129, 255, 1, 224, 40, 240, 19, 216, 33, 70, 64, 70, 255, 247, 63, ++ 255, 33, 70, 64, 70, 40, 240, 241, 216, 64, 70, 33, 70, 4, 241, 188, ++ 2, 41, 240, 71, 216, 149, 248, 97, 48, 59, 185, 171, 105, 180, 248, ++ 90, 64, 242, 89, 163, 248, 206, 64, 235, 105, 26, 96, 189, 232, 240, ++ 129, 3, 137, 32, 43, 9, 208, 3, 216, 59, 177, 16, 43, 15, 209, 4, 224, ++ 48, 43, 2, 208, 128, 43, 10, 209, 2, 224, 3, 104, 219, 105, 4, 224, ++ 66, 104, 3, 104, 146, 121, 219, 105, 26, 185, 24, 104, 112, 71, 0, 32, ++ 112, 71, 0, 32, 112, 71, 0, 0, 45, 233, 243, 65, 176, 248, 18, 128, ++ 135, 138, 198, 138, 132, 121, 128, 68, 199, 25, 134, 25, 244, 185, 37, ++ 70, 5, 240, 15, 3, 54, 248, 19, 16, 1, 51, 54, 248, 19, 32, 138, 66, ++ 14, 208, 12, 75, 82, 26, 24, 25, 128, 136, 79, 240, 12, 14, 0, 144, ++ 146, 178, 8, 235, 1, 0, 227, 88, 14, 251, 1, 113, 42, 240, 216, 222, ++ 1, 53, 8, 52, 13, 45, 227, 209, 0, 32, 1, 224, 111, 240, 22, 0, 189, ++ 232, 252, 129, 252, 60, 4, 0, 112, 181, 75, 120, 12, 70, 4, 43, 15, ++ 217, 0, 37, 29, 75, 6, 38, 6, 251, 5, 54, 160, 28, 49, 70, 5, 34, 216, ++ 247, 186, 249, 8, 185, 112, 121, 112, 189, 1, 53, 3, 45, 240, 209, 99, ++ 120, 3, 43, 15, 217, 0, 37, 21, 78, 5, 235, 133, 3, 246, 24, 160, 28, ++ 49, 70, 4, 34, 216, 247, 167, 249, 8, 185, 48, 121, 112, 189, 1, 53, ++ 15, 45, 240, 209, 99, 120, 2, 43, 18, 217, 2, 52, 32, 70, 12, 73, 3, ++ 34, 216, 247, 152, 249, 10, 77, 48, 177, 32, 70, 41, 29, 3, 34, 216, ++ 247, 145, 249, 48, 185, 1, 32, 5, 235, 128, 5, 232, 120, 112, 189, 250, ++ 32, 112, 189, 250, 32, 112, 189, 123, 233, 135, 0, 104, 61, 4, 0, 141, ++ 233, 135, 0, 248, 181, 6, 158, 7, 159, 0, 35, 51, 112, 5, 70, 59, 96, ++ 12, 70, 49, 177, 74, 120, 2, 42, 3, 217, 137, 120, 226, 120, 145, 66, ++ 4, 211, 40, 70, 1, 33, 4, 240, 4, 222, 42, 224, 208, 248, 4, 33, 82, ++ 120, 18, 177, 25, 70, 4, 240, 252, 221, 107, 124, 27, 185, 40, 70, 225, ++ 120, 17, 240, 90, 219, 163, 120, 59, 96, 35, 121, 3, 240, 1, 3, 51, ++ 112, 181, 248, 214, 16, 35, 121, 138, 4, 146, 12, 3, 240, 254, 3, 210, ++ 16, 154, 66, 96, 120, 12, 211, 3, 56, 192, 24, 130, 66, 10, 210, 164, ++ 24, 227, 26, 88, 121, 1, 240, 7, 1, 8, 65, 0, 240, 1, 0, 248, 189, 0, ++ 32, 248, 189, 0, 32, 248, 189, 45, 233, 240, 71, 77, 104, 7, 70, 8, ++ 70, 137, 70, 206, 104, 213, 248, 68, 131, 255, 247, 29, 255, 4, 70, ++ 238, 177, 115, 120, 24, 43, 26, 208, 7, 43, 24, 208, 59, 104, 91, 107, ++ 0, 43, 0, 240, 215, 128, 213, 248, 204, 48, 19, 240, 2, 1, 64, 240, ++ 209, 128, 66, 104, 35, 244, 128, 115, 34, 244, 0, 18, 34, 240, 64, 2, ++ 66, 96, 197, 248, 204, 48, 1, 34, 228, 247, 150, 252, 194, 224, 185, ++ 248, 8, 48, 32, 43, 11, 208, 4, 216, 75, 177, 16, 43, 64, 240, 186, ++ 128, 52, 224, 48, 43, 50, 208, 128, 43, 64, 240, 180, 128, 138, 224, ++ 99, 104, 35, 244, 0, 19, 35, 240, 64, 3, 99, 96, 59, 104, 91, 107, 0, ++ 43, 0, 240, 168, 128, 213, 248, 204, 16, 17, 240, 2, 1, 64, 240, 162, ++ 128, 32, 70, 1, 34, 228, 247, 112, 252, 0, 46, 0, 240, 155, 128, 99, ++ 104, 67, 240, 64, 3, 99, 96, 152, 248, 39, 48, 0, 43, 0, 240, 146, 128, ++ 32, 70, 1, 34, 49, 122, 228, 247, 95, 252, 148, 248, 217, 48, 24, 7, ++ 0, 240, 136, 128, 99, 104, 67, 244, 0, 19, 108, 224, 98, 104, 213, 248, ++ 4, 145, 34, 240, 64, 2, 98, 96, 213, 248, 204, 32, 34, 244, 128, 113, ++ 197, 248, 204, 16, 57, 104, 73, 107, 0, 41, 115, 208, 145, 7, 113, 212, ++ 48, 43, 10, 209, 6, 34, 5, 241, 216, 0, 213, 248, 240, 16, 216, 247, ++ 184, 248, 0, 48, 24, 191, 1, 32, 0, 224, 1, 32, 95, 250, 128, 250, 0, ++ 33, 32, 70, 82, 70, 228, 247, 47, 252, 0, 46, 90, 208, 99, 104, 177, ++ 28, 67, 240, 64, 3, 99, 96, 213, 248, 204, 48, 64, 70, 67, 244, 128, ++ 115, 197, 248, 204, 48, 114, 120, 216, 247, 174, 248, 152, 249, 6, 48, ++ 0, 43, 6, 218, 32, 70, 152, 248, 38, 16, 82, 70, 228, 247, 20, 252, ++ 16, 224, 59, 104, 91, 107, 1, 51, 60, 209, 97, 104, 202, 5, 57, 213, ++ 17, 240, 128, 97, 6, 209, 1, 35, 137, 248, 29, 48, 40, 70, 234, 247, ++ 100, 249, 47, 224, 153, 248, 0, 16, 0, 35, 1, 41, 137, 248, 29, 48, ++ 40, 209, 243, 231, 59, 104, 91, 107, 35, 179, 213, 248, 204, 48, 3, ++ 244, 129, 115, 179, 245, 128, 127, 29, 209, 60, 177, 43, 124, 43, 185, ++ 206, 177, 99, 104, 67, 240, 64, 3, 99, 96, 20, 224, 30, 185, 2, 35, ++ 136, 248, 8, 48, 10, 224, 152, 248, 6, 32, 51, 122, 83, 64, 27, 7, 9, ++ 208, 64, 70, 177, 28, 24, 34, 216, 247, 103, 248, 56, 70, 41, 70, 1, ++ 34, 255, 243, 160, 244, 0, 32, 189, 232, 240, 135, 83, 104, 112, 181, ++ 35, 240, 128, 83, 83, 96, 147, 104, 12, 70, 35, 240, 254, 99, 147, 96, ++ 75, 120, 21, 70, 67, 177, 136, 28, 0, 33, 218, 243, 112, 242, 24, 177, ++ 107, 104, 67, 240, 128, 83, 107, 96, 99, 120, 4, 43, 54, 217, 166, 28, ++ 48, 70, 38, 33, 218, 243, 99, 242, 24, 177, 171, 104, 67, 244, 128, ++ 19, 171, 96, 48, 70, 39, 33, 218, 243, 90, 242, 24, 177, 171, 104, 67, ++ 244, 0, 19, 171, 96, 48, 70, 37, 33, 218, 243, 81, 242, 24, 177, 171, ++ 104, 67, 244, 128, 3, 171, 96, 48, 70, 28, 33, 218, 243, 72, 242, 24, ++ 177, 171, 104, 67, 244, 0, 3, 171, 96, 48, 70, 20, 33, 218, 243, 63, ++ 242, 24, 177, 171, 104, 67, 240, 128, 115, 171, 96, 48, 70, 30, 33, ++ 218, 243, 54, 242, 24, 177, 171, 104, 67, 240, 0, 115, 171, 96, 99, ++ 120, 7, 43, 10, 217, 160, 28, 62, 33, 218, 243, 42, 242, 40, 177, 213, ++ 248, 164, 49, 67, 244, 128, 67, 197, 248, 164, 49, 99, 120, 8, 43, 10, ++ 217, 160, 28, 70, 33, 218, 243, 28, 242, 40, 177, 213, 248, 164, 49, ++ 67, 240, 32, 3, 197, 248, 164, 49, 99, 120, 8, 43, 10, 217, 160, 28, ++ 71, 33, 218, 243, 14, 242, 40, 177, 213, 248, 164, 49, 67, 240, 16, ++ 3, 197, 248, 164, 49, 99, 120, 8, 43, 10, 217, 160, 28, 70, 33, 218, ++ 243, 0, 242, 40, 177, 213, 248, 164, 49, 67, 240, 32, 3, 197, 248, 164, ++ 49, 99, 120, 8, 43, 10, 217, 160, 28, 71, 33, 218, 243, 242, 241, 40, ++ 177, 213, 248, 164, 49, 67, 240, 16, 3, 197, 248, 164, 49, 112, 189, ++ 248, 181, 208, 248, 240, 48, 4, 70, 13, 70, 152, 110, 179, 248, 108, ++ 16, 12, 48, 12, 57, 127, 34, 223, 247, 165, 248, 184, 177, 148, 248, ++ 96, 35, 170, 177, 70, 120, 0, 35, 150, 66, 40, 191, 22, 70, 26, 70, ++ 10, 224, 231, 24, 193, 24, 151, 248, 97, 115, 137, 120, 57, 64, 233, ++ 84, 1, 51, 0, 41, 24, 191, 26, 70, 179, 66, 242, 211, 0, 224, 2, 70, ++ 16, 70, 248, 189, 31, 181, 72, 104, 12, 70, 2, 169, 255, 247, 209, 255, ++ 2, 70, 96, 177, 227, 105, 127, 32, 0, 147, 2, 169, 163, 105, 218, 243, ++ 58, 240, 163, 105, 131, 66, 12, 191, 111, 240, 13, 0, 0, 32, 4, 176, ++ 16, 189, 19, 181, 12, 70, 73, 104, 145, 248, 96, 35, 218, 177, 35, 137, ++ 32, 43, 2, 208, 176, 43, 0, 208, 43, 185, 33, 70, 2, 176, 189, 232, ++ 16, 64, 255, 247, 215, 191, 227, 105, 1, 245, 88, 113, 0, 147, 127, ++ 32, 1, 49, 163, 105, 218, 243, 23, 240, 163, 105, 131, 66, 20, 191, ++ 0, 32, 111, 240, 13, 0, 0, 224, 16, 70, 2, 176, 16, 189, 7, 181, 72, ++ 104, 105, 70, 255, 247, 150, 255, 0, 40, 200, 191, 2, 48, 14, 189, 75, ++ 104, 147, 248, 96, 51, 75, 177, 10, 137, 32, 42, 2, 208, 176, 42, 0, ++ 208, 10, 185, 255, 247, 235, 191, 152, 28, 112, 71, 24, 70, 112, 71, ++ 16, 181, 8, 70, 12, 70, 0, 33, 234, 247, 21, 248, 212, 248, 4, 49, 0, ++ 34, 131, 248, 116, 32, 212, 248, 4, 49, 179, 248, 114, 32, 2, 177, 218, ++ 98, 32, 70, 13, 240, 216, 249, 212, 248, 4, 49, 219, 139, 35, 177, 32, ++ 70, 189, 232, 16, 64, 57, 240, 55, 156, 16, 189, 45, 233, 255, 65, 11, ++ 104, 76, 104, 10, 70, 217, 105, 6, 70, 15, 104, 161, 121, 212, 248, ++ 4, 81, 212, 248, 68, 131, 0, 41, 64, 240, 143, 128, 33, 124, 0, 41, ++ 0, 240, 139, 128, 13, 241, 15, 1, 0, 145, 2, 169, 1, 145, 209, 104, ++ 219, 104, 18, 105, 32, 70, 255, 247, 121, 253, 51, 104, 1, 70, 147, ++ 248, 60, 32, 26, 177, 189, 248, 8, 32, 164, 248, 44, 35, 106, 108, 0, ++ 42, 115, 209, 0, 41, 52, 208, 42, 120, 2, 42, 4, 209, 48, 70, 33, 70, ++ 255, 247, 174, 255, 64, 224, 91, 107, 59, 177, 152, 248, 39, 48, 35, ++ 177, 175, 177, 151, 248, 218, 48, 15, 43, 17, 208, 43, 122, 35, 177, ++ 48, 70, 33, 70, 3, 240, 233, 220, 47, 224, 79, 240, 255, 50, 1, 146, ++ 48, 70, 33, 70, 4, 241, 188, 2, 0, 147, 3, 240, 216, 220, 36, 224, 152, ++ 248, 37, 48, 11, 179, 43, 122, 59, 177, 31, 177, 123, 104, 35, 240, ++ 0, 99, 123, 96, 32, 70, 249, 243, 12, 246, 32, 70, 231, 247, 128, 250, ++ 19, 224, 43, 123, 35, 177, 235, 137, 19, 185, 32, 70, 4, 240, 111, 220, ++ 212, 248, 4, 49, 219, 139, 67, 177, 43, 120, 2, 43, 5, 209, 43, 106, ++ 1, 43, 2, 209, 32, 70, 57, 240, 160, 219, 214, 248, 104, 49, 43, 179, ++ 155, 121, 27, 179, 43, 120, 2, 43, 32, 209, 48, 70, 33, 70, 1, 34, 23, ++ 240, 67, 221, 208, 177, 212, 248, 244, 48, 181, 248, 114, 32, 219, 141, ++ 48, 70, 219, 8, 154, 66, 44, 191, 234, 98, 235, 98, 33, 70, 23, 240, ++ 158, 217, 64, 177, 2, 155, 1, 43, 5, 209, 212, 248, 244, 48, 234, 106, ++ 219, 141, 211, 24, 235, 98, 32, 70, 13, 240, 47, 249, 0, 32, 4, 176, ++ 189, 232, 240, 129, 0, 0, 45, 233, 247, 67, 5, 105, 4, 70, 208, 248, ++ 12, 128, 0, 38, 40, 70, 15, 70, 145, 70, 141, 248, 7, 96, 41, 240, 164, ++ 220, 32, 177, 160, 104, 226, 247, 105, 251, 48, 70, 250, 224, 174, 109, ++ 50, 1, 4, 213, 213, 248, 148, 48, 88, 106, 4, 240, 13, 249, 0, 35, 171, ++ 101, 51, 2, 2, 213, 40, 70, 26, 240, 17, 220, 119, 75, 51, 64, 67, 177, ++ 32, 70, 198, 243, 192, 65, 15, 240, 45, 220, 32, 70, 65, 70, 5, 240, ++ 73, 219, 176, 7, 12, 213, 35, 104, 147, 248, 47, 32, 66, 177, 147, 248, ++ 48, 48, 19, 177, 148, 248, 114, 50, 19, 177, 32, 70, 5, 240, 136, 223, ++ 113, 6, 8, 213, 40, 70, 57, 70, 27, 240, 90, 217, 24, 177, 171, 109, ++ 67, 240, 64, 3, 171, 101, 178, 0, 17, 213, 40, 70, 57, 70, 13, 241, ++ 7, 2, 27, 240, 7, 222, 24, 177, 171, 109, 67, 240, 0, 83, 171, 101, ++ 157, 248, 7, 48, 27, 177, 32, 70, 255, 243, 78, 243, 173, 224, 179, ++ 6, 6, 213, 212, 248, 28, 49, 200, 248, 36, 49, 0, 35, 196, 248, 28, ++ 49, 22, 244, 0, 99, 8, 208, 35, 104, 211, 248, 136, 48, 154, 107, 1, ++ 50, 154, 99, 213, 248, 180, 48, 1, 51, 48, 4, 197, 248, 180, 48, 10, ++ 213, 40, 70, 0, 33, 58, 70, 75, 70, 250, 247, 88, 252, 24, 177, 171, ++ 109, 67, 244, 0, 67, 171, 101, 241, 3, 7, 213, 40, 70, 1, 33, 27, 240, ++ 133, 221, 16, 177, 32, 70, 5, 240, 179, 222, 114, 3, 4, 213, 213, 248, ++ 148, 48, 88, 106, 4, 240, 152, 248, 179, 4, 4, 212, 43, 104, 147, 248, ++ 42, 56, 0, 43, 66, 208, 35, 104, 60, 72, 154, 106, 217, 104, 217, 243, ++ 143, 241, 43, 104, 147, 248, 42, 40, 74, 177, 179, 248, 40, 40, 32, ++ 70, 1, 50, 163, 248, 40, 40, 238, 247, 21, 254, 2, 39, 0, 224, 3, 39, ++ 32, 70, 57, 70, 231, 247, 104, 248, 35, 104, 211, 248, 136, 48, 211, ++ 248, 20, 34, 1, 50, 195, 248, 20, 34, 45, 75, 27, 104, 1, 43, 15, 209, ++ 132, 248, 213, 49, 132, 248, 95, 55, 32, 70, 0, 240, 119, 222, 40, 70, ++ 2, 33, 0, 34, 26, 240, 174, 223, 0, 35, 132, 248, 95, 55, 60, 224, 2, ++ 47, 3, 209, 43, 104, 0, 34, 131, 248, 42, 40, 32, 70, 255, 243, 211, ++ 242, 2, 47, 2, 209, 32, 70, 238, 247, 250, 253, 213, 248, 68, 49, 163, ++ 177, 35, 104, 32, 70, 211, 248, 136, 32, 35, 105, 211, 248, 68, 49, ++ 7, 43, 136, 191, 0, 35, 202, 51, 2, 235, 131, 3, 90, 104, 1, 50, 90, ++ 96, 0, 35, 197, 248, 68, 49, 255, 243, 182, 242, 0, 46, 3, 218, 212, ++ 248, 208, 5, 41, 240, 190, 216, 240, 0, 2, 213, 32, 70, 2, 240, 97, ++ 220, 177, 1, 2, 213, 40, 70, 28, 240, 2, 216, 212, 248, 164, 21, 75, ++ 137, 19, 177, 32, 70, 232, 247, 86, 250, 168, 109, 0, 48, 24, 191, 1, ++ 32, 189, 232, 254, 131, 0, 191, 4, 0, 8, 0, 135, 165, 136, 0, 108, 7, ++ 0, 0, 6, 32, 112, 71, 45, 233, 240, 79, 144, 248, 148, 66, 133, 176, ++ 5, 70, 136, 70, 22, 70, 180, 185, 19, 109, 19, 240, 8, 9, 19, 209, 208, ++ 248, 128, 50, 83, 248, 33, 64, 116, 177, 35, 105, 0, 43, 64, 240, 33, ++ 129, 28, 70, 153, 70, 8, 224, 32, 70, 222, 247, 142, 253, 32, 185, 148, ++ 248, 12, 144, 1, 224, 0, 36, 161, 70, 184, 241, 3, 15, 5, 221, 12, 185, ++ 71, 70, 12, 225, 103, 122, 4, 55, 9, 225, 43, 104, 194, 70, 211, 248, ++ 192, 112, 4, 55, 3, 47, 11, 217, 43, 104, 211, 248, 192, 48, 4, 51, ++ 159, 66, 5, 210, 40, 70, 57, 31, 7, 240, 246, 217, 3, 144, 1, 224, 0, ++ 35, 3, 147, 73, 234, 8, 25, 31, 250, 137, 249, 31, 250, 137, 251, 68, ++ 179, 213, 248, 108, 50, 158, 66, 0, 240, 240, 128, 179, 121, 0, 43, ++ 64, 240, 236, 128, 51, 124, 0, 43, 0, 240, 232, 128, 32, 70, 222, 247, ++ 83, 253, 0, 40, 64, 240, 226, 128, 51, 24, 219, 110, 83, 177, 26, 105, ++ 66, 177, 27, 123, 2, 43, 0, 240, 217, 128, 73, 234, 131, 41, 31, 250, ++ 137, 251, 211, 224, 4, 48, 16, 40, 238, 209, 207, 224, 227, 121, 11, ++ 177, 75, 240, 8, 11, 43, 104, 211, 248, 200, 48, 154, 69, 4, 210, 40, ++ 70, 81, 70, 90, 70, 6, 240, 116, 216, 0, 44, 0, 240, 158, 128, 35, 123, ++ 0, 43, 0, 240, 192, 128, 213, 248, 252, 18, 79, 234, 8, 27, 16, 35, ++ 40, 70, 89, 68, 4, 241, 20, 2, 250, 243, 78, 246, 213, 248, 180, 49, ++ 0, 43, 68, 218, 35, 122, 2, 43, 65, 209, 149, 248, 148, 50, 0, 43, 61, ++ 209, 51, 109, 26, 7, 58, 212, 42, 104, 163, 121, 210, 248, 188, 32, ++ 147, 66, 52, 210, 3, 43, 50, 217, 11, 43, 48, 216, 184, 241, 3, 15, ++ 10, 221, 32, 70, 222, 247, 0, 253, 48, 185, 40, 70, 49, 70, 34, 70, ++ 18, 240, 134, 252, 130, 70, 1, 224, 79, 240, 0, 10, 213, 248, 0, 51, ++ 49, 70, 82, 70, 40, 104, 11, 235, 3, 9, 65, 240, 141, 223, 34, 24, 73, ++ 70, 40, 70, 20, 50, 8, 35, 250, 243, 22, 246, 213, 248, 0, 51, 49, 70, ++ 8, 51, 82, 70, 40, 104, 155, 68, 65, 240, 93, 222, 34, 24, 89, 70, 40, ++ 70, 20, 50, 8, 35, 250, 243, 6, 246, 107, 224, 35, 122, 11, 43, 104, ++ 209, 43, 104, 147, 248, 177, 48, 0, 43, 99, 208, 163, 121, 7, 43, 96, ++ 216, 213, 248, 152, 1, 65, 70, 34, 70, 76, 240, 10, 219, 89, 224, 43, ++ 104, 211, 248, 192, 48, 4, 51, 159, 66, 45, 210, 35, 122, 2, 43, 36, ++ 209, 79, 240, 14, 10, 10, 251, 7, 250, 79, 240, 0, 9, 41, 240, 1, 3, ++ 227, 24, 10, 245, 56, 113, 73, 68, 40, 70, 179, 248, 100, 32, 9, 241, ++ 2, 9, 5, 240, 243, 223, 185, 241, 10, 15, 239, 209, 10, 245, 58, 113, ++ 40, 70, 2, 49, 180, 248, 136, 32, 5, 240, 232, 223, 40, 70, 10, 245, ++ 59, 113, 180, 248, 138, 32, 5, 240, 225, 223, 40, 70, 57, 70, 34, 70, ++ 3, 155, 44, 240, 67, 216, 184, 241, 3, 15, 37, 220, 40, 70, 44, 240, ++ 161, 216, 50, 124, 3, 70, 58, 185, 182, 248, 90, 32, 2, 240, 1, 2, 0, ++ 42, 24, 191, 79, 244, 128, 67, 3, 34, 0, 146, 40, 70, 0, 33, 79, 244, ++ 128, 66, 0, 240, 68, 220, 14, 224, 186, 70, 250, 230, 35, 122, 2, 43, ++ 127, 244, 226, 174, 220, 230, 35, 122, 11, 43, 127, 244, 48, 175, 42, ++ 231, 3, 47, 163, 216, 214, 231, 5, 176, 189, 232, 240, 143, 248, 181, ++ 12, 105, 208, 248, 108, 50, 5, 70, 156, 66, 14, 70, 6, 208, 163, 121, ++ 35, 185, 35, 124, 19, 177, 33, 70, 44, 240, 194, 216, 242, 104, 162, ++ 177, 40, 70, 33, 70, 151, 121, 44, 240, 227, 216, 43, 104, 211, 248, ++ 188, 48, 159, 66, 10, 218, 149, 248, 148, 50, 59, 185, 35, 109, 25, ++ 7, 4, 212, 40, 70, 57, 70, 34, 70, 44, 240, 153, 219, 213, 248, 152, ++ 1, 49, 70, 34, 70, 189, 232, 248, 64, 76, 240, 247, 153, 0, 0, 45, 233, ++ 240, 79, 155, 70, 83, 31, 27, 43, 135, 176, 6, 70, 13, 70, 146, 70, ++ 0, 242, 92, 130, 159, 74, 154, 64, 64, 241, 88, 130, 187, 241, 3, 15, ++ 0, 242, 87, 130, 19, 152, 222, 247, 30, 252, 7, 70, 0, 40, 64, 208, ++ 214, 248, 108, 50, 157, 66, 14, 209, 11, 241, 26, 3, 5, 235, 131, 3, ++ 90, 104, 34, 185, 6, 235, 139, 2, 210, 248, 132, 34, 90, 96, 95, 70, ++ 205, 248, 8, 176, 16, 224, 171, 121, 27, 185, 79, 234, 91, 2, 2, 146, ++ 1, 224, 205, 248, 8, 176, 2, 155, 3, 241, 26, 8, 5, 235, 136, 8, 216, ++ 248, 4, 64, 52, 177, 167, 121, 79, 240, 0, 9, 205, 248, 4, 144, 200, ++ 70, 139, 224, 42, 124, 4, 33, 0, 42, 12, 191, 16, 34, 128, 34, 1, 35, ++ 48, 70, 43, 240, 79, 222, 7, 30, 192, 242, 41, 130, 214, 248, 128, 50, ++ 161, 70, 83, 248, 39, 48, 1, 148, 200, 248, 4, 48, 160, 70, 116, 224, ++ 43, 122, 243, 177, 213, 248, 244, 48, 41, 70, 92, 142, 19, 154, 4, 244, ++ 64, 68, 164, 245, 64, 64, 68, 66, 68, 235, 0, 4, 35, 70, 48, 70, 18, ++ 240, 88, 251, 128, 70, 192, 185, 48, 70, 41, 70, 19, 154, 35, 70, 18, ++ 240, 3, 252, 128, 70, 0, 40, 0, 240, 245, 129, 1, 34, 1, 146, 12, 224, ++ 48, 70, 41, 70, 19, 154, 18, 240, 249, 251, 128, 70, 0, 40, 0, 240, ++ 233, 129, 1, 35, 1, 147, 0, 224, 1, 151, 216, 248, 12, 48, 83, 177, ++ 159, 121, 214, 248, 152, 1, 65, 70, 17, 154, 91, 70, 76, 240, 65, 217, ++ 129, 70, 56, 179, 1, 224, 79, 240, 1, 9, 48, 70, 41, 70, 16, 154, 19, ++ 155, 43, 240, 204, 221, 7, 30, 192, 242, 216, 129, 214, 248, 128, 50, ++ 214, 248, 72, 1, 83, 248, 39, 32, 41, 70, 200, 248, 12, 32, 83, 248, ++ 39, 64, 50, 240, 150, 220, 171, 121, 51, 185, 51, 104, 211, 248, 192, ++ 48, 152, 66, 1, 218, 96, 114, 5, 224, 163, 121, 3, 43, 64, 242, 181, ++ 129, 4, 59, 99, 114, 214, 248, 108, 50, 157, 66, 6, 208, 171, 121, 35, ++ 185, 48, 70, 41, 70, 58, 70, 43, 240, 54, 222, 214, 248, 160, 1, 65, ++ 70, 75, 240, 161, 217, 0, 34, 2, 146, 214, 248, 128, 50, 83, 248, 39, ++ 64, 185, 241, 0, 15, 14, 209, 227, 121, 155, 69, 11, 209, 35, 105, 154, ++ 69, 8, 209, 18, 152, 4, 241, 20, 1, 82, 70, 215, 247, 3, 251, 0, 40, ++ 0, 240, 142, 129, 99, 122, 96, 107, 3, 147, 8, 177, 224, 247, 170, 250, ++ 212, 248, 224, 144, 32, 70, 0, 33, 228, 34, 216, 243, 134, 246, 196, ++ 248, 224, 144, 185, 241, 0, 15, 8, 208, 51, 104, 72, 70, 219, 105, 0, ++ 33, 211, 248, 212, 32, 82, 1, 216, 243, 120, 246, 3, 155, 4, 241, 20, ++ 9, 99, 114, 18, 153, 82, 70, 167, 113, 72, 70, 215, 247, 238, 250, 95, ++ 250, 138, 243, 35, 97, 6, 34, 132, 248, 7, 176, 32, 70, 19, 153, 215, ++ 247, 228, 250, 0, 35, 186, 241, 13, 15, 99, 115, 32, 208, 4, 216, 186, ++ 241, 5, 15, 64, 240, 134, 128, 6, 224, 186, 241, 16, 15, 66, 208, 186, ++ 241, 32, 15, 126, 209, 37, 224, 1, 35, 35, 114, 35, 115, 4, 35, 163, ++ 115, 227, 115, 73, 70, 82, 70, 4, 241, 25, 0, 215, 247, 198, 250, 4, ++ 241, 30, 0, 73, 70, 82, 70, 215, 247, 192, 250, 35, 125, 12, 224, 3, ++ 35, 35, 114, 4, 35, 35, 115, 163, 115, 227, 115, 35, 125, 132, 248, ++ 33, 48, 99, 125, 132, 248, 34, 48, 163, 125, 132, 248, 35, 48, 89, 224, ++ 16, 0, 144, 128, 17, 154, 11, 42, 14, 209, 34, 114, 48, 70, 255, 247, ++ 53, 253, 18, 35, 163, 115, 16, 35, 32, 115, 227, 115, 72, 70, 18, 153, ++ 82, 70, 215, 247, 155, 250, 69, 224, 2, 35, 35, 114, 35, 115, 8, 35, ++ 163, 115, 4, 35, 17, 224, 17, 154, 83, 31, 3, 43, 29, 216, 223, 232, ++ 3, 240, 14, 14, 2, 2, 181, 248, 90, 48, 8, 43, 64, 240, 3, 129, 3, 35, ++ 35, 114, 4, 35, 35, 115, 163, 115, 227, 115, 42, 224, 17, 154, 211, ++ 178, 4, 34, 34, 115, 162, 115, 8, 34, 5, 43, 35, 114, 226, 115, 1, 209, ++ 2, 35, 29, 224, 3, 35, 27, 224, 4, 35, 35, 114, 3, 35, 35, 115, 184, ++ 241, 0, 15, 2, 208, 216, 248, 4, 48, 9, 224, 171, 121, 91, 185, 48, ++ 70, 41, 70, 213, 248, 244, 32, 18, 240, 39, 250, 32, 177, 67, 104, 89, ++ 5, 1, 213, 5, 35, 35, 115, 8, 35, 163, 115, 227, 115, 1, 35, 99, 115, ++ 1, 155, 171, 177, 35, 122, 1, 59, 10, 43, 17, 216, 223, 232, 3, 240, ++ 6, 8, 6, 10, 16, 16, 16, 16, 16, 16, 12, 0, 1, 35, 5, 224, 2, 35, 3, ++ 224, 4, 35, 1, 224, 79, 244, 128, 115, 200, 248, 72, 48, 19, 152, 222, ++ 247, 117, 250, 216, 177, 16, 155, 19, 240, 2, 15, 171, 110, 16, 208, ++ 90, 28, 7, 208, 5, 235, 131, 3, 219, 110, 27, 177, 90, 137, 34, 240, ++ 2, 2, 90, 129, 99, 137, 2, 154, 67, 240, 2, 3, 170, 102, 99, 129, 5, ++ 224, 2, 154, 147, 66, 4, 191, 79, 240, 255, 51, 171, 102, 48, 70, 41, ++ 70, 34, 70, 20, 155, 44, 240, 74, 221, 128, 70, 40, 177, 48, 70, 33, ++ 70, 43, 240, 238, 221, 71, 70, 142, 224, 35, 122, 2, 43, 43, 209, 181, ++ 248, 90, 48, 219, 7, 7, 213, 32, 70, 222, 247, 64, 250, 24, 177, 4, ++ 168, 5, 241, 96, 1, 2, 224, 4, 168, 4, 241, 56, 1, 8, 34, 215, 247, ++ 249, 249, 4, 155, 4, 241, 64, 0, 73, 70, 5, 241, 194, 2, 230, 243, 43, ++ 246, 32, 70, 222, 247, 42, 250, 4, 241, 100, 3, 24, 185, 24, 70, 73, ++ 70, 34, 70, 3, 224, 24, 70, 73, 70, 5, 241, 188, 2, 212, 248, 136, 48, ++ 230, 243, 25, 246, 48, 70, 57, 70, 42, 70, 44, 240, 98, 223, 214, 248, ++ 108, 50, 157, 66, 31, 208, 171, 121, 235, 185, 43, 124, 219, 177, 32, ++ 70, 222, 247, 11, 250, 184, 177, 213, 248, 244, 48, 48, 70, 91, 142, ++ 41, 70, 3, 244, 64, 67, 163, 245, 64, 71, 123, 66, 67, 235, 7, 3, 5, ++ 241, 188, 2, 18, 240, 138, 249, 48, 177, 195, 104, 35, 177, 48, 70, ++ 153, 121, 42, 70, 44, 240, 62, 223, 171, 121, 235, 185, 213, 248, 204, ++ 48, 91, 5, 3, 212, 32, 70, 222, 247, 233, 249, 168, 177, 40, 70, 1, ++ 240, 87, 219, 1, 34, 7, 70, 133, 248, 92, 32, 48, 70, 41, 70, 251, 247, ++ 67, 255, 79, 185, 40, 70, 1, 240, 75, 219, 40, 177, 213, 248, 4, 49, ++ 40, 70, 25, 122, 233, 247, 103, 250, 21, 155, 155, 177, 28, 96, 0, 39, ++ 17, 224, 111, 240, 23, 7, 14, 224, 111, 240, 7, 7, 11, 224, 111, 240, ++ 29, 7, 8, 224, 79, 240, 255, 55, 5, 224, 79, 70, 3, 224, 111, 240, 28, ++ 7, 0, 224, 21, 159, 56, 70, 7, 176, 189, 232, 240, 143, 0, 191, 240, ++ 181, 208, 248, 116, 52, 144, 248, 68, 68, 91, 121, 16, 37, 3, 240, 1, ++ 7, 91, 16, 3, 240, 1, 6, 0, 35, 26, 70, 39, 177, 0, 235, 68, 12, 188, ++ 249, 196, 195, 98, 68, 38, 177, 0, 235, 68, 12, 188, 249, 228, 195, ++ 99, 68, 1, 52, 1, 61, 4, 240, 15, 4, 238, 209, 0, 42, 184, 191, 15, ++ 50, 18, 17, 0, 43, 184, 191, 15, 51, 27, 17, 10, 112, 75, 112, 240, ++ 189, 112, 181, 0, 35, 138, 176, 193, 88, 1, 170, 153, 80, 4, 51, 36, ++ 43, 249, 209, 0, 35, 25, 70, 1, 49, 201, 178, 10, 70, 10, 168, 0, 235, ++ 130, 6, 1, 168, 86, 248, 36, 92, 28, 88, 1, 50, 210, 178, 165, 66, 212, ++ 191, 70, 248, 36, 92, 70, 248, 36, 76, 165, 66, 172, 191, 29, 80, 28, ++ 80, 8, 42, 234, 217, 4, 51, 5, 41, 228, 209, 5, 152, 10, 176, 112, 189, ++ 112, 181, 134, 176, 0, 35, 15, 153, 4, 147, 5, 70, 20, 70, 12, 158, ++ 251, 247, 139, 250, 11, 155, 3, 43, 4, 217, 4, 168, 10, 153, 4, 34, ++ 215, 247, 21, 249, 20, 177, 6, 44, 43, 209, 37, 224, 12, 34, 33, 70, ++ 1, 168, 216, 243, 140, 244, 6, 169, 1, 35, 65, 248, 4, 77, 40, 70, 1, ++ 147, 255, 247, 138, 255, 2, 35, 2, 147, 213, 248, 116, 52, 48, 70, 90, ++ 121, 1, 169, 210, 7, 68, 191, 157, 248, 20, 32, 141, 248, 12, 32, 91, ++ 121, 155, 7, 68, 191, 157, 248, 21, 48, 141, 248, 13, 48, 12, 34, 215, ++ 247, 237, 248, 0, 32, 6, 224, 0, 32, 197, 248, 36, 7, 48, 96, 1, 224, ++ 111, 240, 22, 0, 6, 176, 112, 189, 56, 181, 4, 70, 13, 70, 241, 177, ++ 144, 248, 32, 56, 0, 235, 131, 2, 1, 51, 219, 178, 8, 43, 194, 248, ++ 252, 23, 128, 248, 32, 56, 2, 217, 0, 35, 128, 248, 32, 56, 4, 245, ++ 254, 96, 12, 48, 255, 247, 122, 255, 0, 40, 8, 191, 40, 70, 196, 248, ++ 36, 7, 95, 48, 188, 191, 111, 240, 94, 3, 196, 248, 36, 55, 212, 248, ++ 36, 7, 56, 189, 144, 248, 174, 32, 176, 248, 122, 48, 42, 177, 0, 34, ++ 128, 248, 174, 32, 3, 245, 122, 115, 0, 224, 200, 59, 160, 248, 122, ++ 48, 176, 248, 122, 48, 66, 242, 40, 50, 147, 66, 2, 217, 160, 248, 122, ++ 32, 112, 71, 65, 242, 111, 114, 147, 66, 156, 191, 65, 242, 112, 115, ++ 160, 248, 122, 48, 112, 71, 112, 181, 144, 249, 32, 48, 2, 104, 88, ++ 28, 23, 208, 210, 248, 104, 2, 0, 34, 0, 235, 131, 5, 131, 88, 107, ++ 177, 46, 104, 211, 248, 40, 67, 214, 248, 40, 99, 180, 66, 6, 208, 9, ++ 177, 139, 66, 3, 208, 20, 177, 147, 248, 68, 0, 3, 224, 4, 50, 32, 42, ++ 236, 209, 255, 32, 64, 178, 112, 189, 144, 248, 32, 48, 48, 181, 89, ++ 178, 74, 28, 4, 104, 39, 208, 144, 248, 33, 32, 85, 178, 181, 241, 255, ++ 63, 33, 208, 7, 43, 154, 191, 212, 248, 104, 82, 85, 248, 33, 16, 0, ++ 33, 7, 42, 158, 191, 212, 248, 104, 66, 85, 178, 84, 248, 37, 64, 141, ++ 121, 136, 191, 0, 36, 125, 185, 212, 248, 204, 64, 20, 244, 0, 95, 10, ++ 208, 209, 248, 204, 16, 137, 4, 6, 212, 90, 64, 83, 64, 90, 64, 128, ++ 248, 32, 48, 128, 248, 33, 32, 48, 189, 45, 233, 248, 67, 177, 248, ++ 46, 83, 4, 70, 14, 70, 79, 240, 0, 8, 212, 248, 104, 50, 83, 248, 8, ++ 112, 143, 177, 183, 66, 15, 208, 183, 248, 46, 3, 217, 243, 50, 246, ++ 129, 70, 182, 248, 46, 3, 217, 243, 45, 246, 129, 69, 4, 209, 215, 248, ++ 244, 48, 93, 142, 0, 39, 5, 224, 8, 241, 4, 8, 184, 241, 32, 15, 227, ++ 209, 247, 231, 212, 248, 104, 50, 83, 248, 7, 128, 184, 241, 0, 15, ++ 22, 208, 176, 69, 20, 208, 184, 248, 46, 3, 217, 243, 19, 246, 129, ++ 70, 182, 248, 46, 3, 217, 243, 14, 246, 129, 69, 9, 209, 216, 248, 244, ++ 48, 5, 244, 96, 82, 91, 142, 3, 244, 96, 81, 145, 66, 200, 191, 29, ++ 70, 4, 55, 32, 47, 222, 209, 40, 70, 189, 232, 248, 131, 248, 181, 5, ++ 104, 6, 70, 15, 70, 0, 36, 213, 248, 104, 50, 25, 89, 0, 41, 52, 208, ++ 139, 121, 0, 43, 49, 209, 11, 122, 0, 43, 46, 208, 209, 248, 40, 51, ++ 187, 66, 42, 209, 209, 248, 4, 49, 90, 108, 80, 7, 37, 212, 34, 240, ++ 2, 2, 90, 100, 26, 120, 50, 177, 2, 42, 4, 208, 88, 127, 16, 185, 150, ++ 248, 74, 0, 200, 177, 24, 122, 184, 177, 40, 104, 144, 248, 61, 0, 48, ++ 177, 209, 248, 204, 0, 128, 4, 2, 213, 145, 248, 57, 3, 96, 185, 2, ++ 42, 6, 209, 91, 104, 216, 7, 7, 213, 40, 70, 255, 247, 126, 248, 3, ++ 224, 8, 70, 0, 33, 233, 247, 148, 248, 4, 52, 32, 44, 194, 209, 248, ++ 189, 115, 181, 0, 35, 6, 70, 214, 248, 104, 34, 213, 88, 0, 45, 58, ++ 208, 213, 248, 40, 35, 138, 66, 54, 209, 48, 70, 251, 247, 13, 253, ++ 170, 121, 16, 240, 4, 3, 24, 191, 8, 35, 16, 240, 16, 0, 24, 191, 79, ++ 244, 0, 112, 34, 185, 44, 124, 60, 177, 64, 234, 3, 4, 4, 224, 44, 121, ++ 0, 44, 20, 191, 28, 70, 0, 36, 41, 70, 214, 248, 72, 1, 49, 240, 30, ++ 222, 1, 70, 214, 248, 72, 1, 50, 240, 39, 217, 51, 104, 147, 248, 61, ++ 48, 67, 177, 2, 33, 48, 70, 79, 244, 2, 114, 35, 70, 0, 145, 255, 243, ++ 143, 247, 10, 224, 48, 70, 41, 70, 1, 34, 2, 176, 189, 232, 112, 64, ++ 251, 247, 30, 189, 4, 51, 32, 43, 188, 209, 2, 176, 112, 189, 56, 181, ++ 5, 104, 42, 104, 146, 248, 60, 48, 27, 179, 146, 248, 61, 48, 3, 179, ++ 144, 248, 32, 48, 7, 43, 157, 191, 213, 248, 104, 34, 91, 178, 82, 248, ++ 35, 48, 0, 35, 156, 121, 180, 185, 213, 248, 104, 50, 25, 89, 97, 177, ++ 139, 121, 83, 185, 11, 122, 67, 177, 209, 248, 204, 48, 155, 4, 4, 213, ++ 213, 248, 80, 1, 55, 240, 114, 216, 56, 185, 4, 52, 32, 44, 235, 209, ++ 1, 224, 24, 70, 56, 189, 0, 32, 56, 189, 1, 32, 56, 189, 8, 181, 3, ++ 104, 27, 104, 147, 248, 61, 48, 51, 177, 255, 247, 200, 255, 208, 241, ++ 1, 0, 56, 191, 0, 32, 8, 189, 1, 32, 8, 189, 56, 181, 3, 104, 4, 70, ++ 27, 104, 147, 248, 61, 80, 101, 185, 209, 248, 4, 49, 88, 108, 32, 234, ++ 2, 2, 90, 100, 8, 70, 41, 70, 5, 240, 139, 216, 132, 248, 48, 80, 165, ++ 98, 56, 189, 115, 181, 0, 35, 1, 147, 7, 155, 4, 70, 3, 43, 21, 70, ++ 6, 104, 4, 217, 1, 168, 6, 153, 4, 34, 214, 247, 21, 255, 1, 45, 3, ++ 217, 51, 104, 147, 248, 60, 48, 243, 177, 28, 45, 2, 208, 29, 45, 29, ++ 209, 3, 224, 226, 109, 8, 155, 26, 96, 33, 224, 1, 155, 3, 43, 24, 216, ++ 32, 70, 255, 247, 185, 255, 184, 177, 227, 109, 1, 154, 154, 66, 22, ++ 208, 3, 43, 2, 209, 32, 70, 47, 240, 76, 216, 1, 155, 227, 101, 1, 35, ++ 132, 248, 104, 48, 11, 224, 79, 240, 255, 48, 9, 224, 111, 240, 22, ++ 0, 6, 224, 111, 240, 28, 0, 3, 224, 111, 240, 15, 0, 0, 224, 0, 32, ++ 124, 189, 0, 35, 65, 242, 112, 114, 128, 248, 173, 48, 128, 248, 172, ++ 48, 160, 248, 122, 32, 128, 248, 174, 48, 112, 71, 248, 181, 2, 104, ++ 203, 105, 4, 70, 13, 70, 146, 248, 61, 112, 27, 177, 27, 104, 0, 51, ++ 24, 191, 1, 35, 130, 248, 61, 48, 0, 35, 197, 248, 164, 48, 35, 104, ++ 147, 248, 61, 48, 67, 185, 40, 70, 255, 247, 220, 255, 235, 109, 3, ++ 43, 2, 209, 40, 70, 47, 240, 14, 216, 0, 38, 212, 248, 104, 50, 153, ++ 89, 41, 177, 11, 122, 27, 177, 212, 248, 76, 1, 68, 240, 7, 218, 4, ++ 54, 32, 46, 242, 209, 35, 104, 147, 248, 61, 48, 187, 66, 48, 208, 0, ++ 33, 10, 70, 212, 248, 72, 1, 50, 240, 155, 216, 35, 104, 4, 33, 147, ++ 248, 61, 32, 32, 105, 0, 42, 20, 191, 10, 70, 0, 34, 25, 240, 132, 223, ++ 149, 248, 74, 48, 227, 177, 35, 104, 147, 248, 61, 80, 197, 185, 212, ++ 248, 104, 50, 88, 89, 136, 177, 131, 121, 123, 185, 3, 122, 107, 177, ++ 208, 248, 4, 49, 26, 122, 74, 185, 25, 120, 2, 41, 2, 209, 12, 240, ++ 30, 249, 3, 224, 1, 41, 1, 209, 232, 247, 72, 255, 4, 53, 32, 45, 230, ++ 209, 248, 189, 0, 0, 45, 233, 240, 65, 4, 70, 13, 70, 6, 104, 3, 42, ++ 39, 216, 223, 232, 2, 240, 17, 2, 7, 12, 208, 248, 24, 128, 2, 36, 26, ++ 79, 34, 224, 208, 248, 16, 128, 4, 36, 25, 79, 29, 224, 208, 248, 124, ++ 128, 64, 36, 23, 79, 24, 224, 144, 248, 120, 48, 115, 177, 199, 111, ++ 56, 70, 40, 240, 41, 217, 180, 248, 122, 16, 56, 70, 141, 66, 56, 191, ++ 13, 70, 105, 26, 15, 74, 51, 70, 40, 240, 208, 216, 212, 248, 20, 128, ++ 1, 224, 208, 248, 20, 128, 12, 79, 1, 36, 64, 70, 40, 240, 20, 217, ++ 41, 70, 58, 70, 64, 70, 51, 70, 40, 240, 192, 216, 48, 70, 33, 70, 1, ++ 34, 189, 232, 240, 65, 254, 243, 109, 182, 0, 191, 113, 188, 133, 0, ++ 173, 187, 133, 0, 65, 196, 2, 0, 91, 195, 2, 0, 2, 41, 112, 181, 5, ++ 104, 13, 208, 3, 41, 17, 208, 1, 41, 18, 209, 255, 34, 128, 248, 35, ++ 32, 2, 33, 0, 34, 132, 105, 2, 38, 47, 240, 107, 217, 10, 224, 255, ++ 34, 4, 105, 128, 248, 36, 32, 4, 38, 4, 224, 196, 111, 64, 38, 1, 224, ++ 68, 105, 1, 38, 32, 70, 40, 240, 222, 216, 40, 70, 49, 70, 0, 34, 189, ++ 232, 112, 64, 254, 243, 61, 182, 240, 181, 4, 70, 133, 176, 21, 70, ++ 31, 70, 14, 70, 0, 41, 49, 208, 138, 121, 226, 177, 208, 248, 36, 1, ++ 1, 169, 0, 34, 63, 240, 219, 216, 13, 224, 3, 105, 179, 66, 10, 209, ++ 144, 248, 36, 48, 154, 7, 6, 213, 9, 45, 4, 209, 214, 248, 204, 48, ++ 155, 4, 0, 213, 215, 177, 212, 248, 36, 1, 1, 169, 17, 240, 111, 253, ++ 0, 40, 234, 209, 15, 224, 1, 61, 237, 178, 1, 45, 11, 216, 208, 248, ++ 36, 1, 1, 169, 63, 240, 187, 216, 212, 248, 36, 1, 1, 169, 17, 240, ++ 94, 253, 0, 40, 248, 209, 160, 104, 225, 247, 105, 248, 0, 32, 5, 176, ++ 240, 189, 45, 233, 240, 71, 4, 70, 13, 70, 106, 177, 144, 248, 116, ++ 50, 89, 7, 2, 212, 46, 240, 47, 218, 48, 177, 212, 248, 84, 49, 147, ++ 248, 48, 48, 0, 43, 0, 240, 148, 128, 111, 104, 32, 70, 57, 70, 181, ++ 248, 8, 128, 180, 248, 72, 148, 48, 240, 46, 220, 148, 248, 176, 53, ++ 6, 70, 164, 248, 70, 132, 43, 177, 32, 70, 57, 70, 189, 232, 240, 71, ++ 0, 240, 102, 158, 212, 248, 168, 53, 187, 66, 8, 209, 72, 70, 217, 243, ++ 141, 243, 130, 70, 64, 70, 217, 243, 137, 243, 130, 69, 113, 208, 212, ++ 248, 168, 53, 187, 66, 5, 209, 72, 70, 217, 243, 128, 243, 64, 70, 217, ++ 243, 125, 243, 32, 70, 4, 240, 58, 218, 212, 248, 168, 53, 187, 66, ++ 3, 208, 32, 70, 57, 70, 0, 240, 68, 222, 193, 69, 67, 208, 35, 106, ++ 1, 34, 24, 105, 79, 244, 128, 81, 2, 240, 251, 250, 32, 70, 65, 70, ++ 2, 240, 247, 222, 35, 106, 0, 34, 24, 105, 79, 244, 128, 81, 2, 240, ++ 240, 250, 212, 248, 84, 49, 219, 109, 3, 43, 13, 209, 32, 70, 57, 70, ++ 48, 240, 227, 219, 64, 177, 208, 248, 204, 16, 32, 70, 193, 243, 64, ++ 49, 129, 240, 1, 1, 46, 240, 229, 222, 148, 248, 114, 50, 179, 177, ++ 32, 70, 57, 70, 48, 240, 210, 219, 2, 70, 32, 177, 131, 121, 19, 177, ++ 32, 70, 0, 33, 7, 224, 32, 70, 57, 70, 48, 240, 239, 219, 2, 70, 40, ++ 177, 32, 70, 1, 33, 79, 240, 255, 51, 40, 240, 59, 219, 212, 248, 84, ++ 1, 41, 70, 255, 247, 48, 253, 32, 70, 28, 240, 217, 221, 24, 177, 32, ++ 70, 41, 70, 255, 247, 107, 253, 32, 70, 254, 243, 151, 241, 150, 248, ++ 57, 51, 67, 185, 212, 248, 164, 21, 75, 137, 35, 177, 32, 70, 189, 232, ++ 240, 71, 231, 247, 244, 185, 189, 232, 240, 135, 45, 233, 248, 67, 5, ++ 104, 4, 70, 149, 248, 116, 50, 14, 70, 88, 7, 3, 212, 40, 70, 46, 240, ++ 133, 217, 56, 177, 35, 104, 211, 248, 84, 49, 147, 248, 48, 48, 0, 43, ++ 0, 240, 154, 128, 148, 248, 48, 112, 0, 47, 64, 240, 149, 128, 214, ++ 248, 40, 51, 24, 137, 217, 243, 244, 242, 128, 70, 181, 248, 70, 4, ++ 217, 243, 239, 242, 128, 69, 10, 208, 181, 248, 70, 4, 217, 243, 233, ++ 242, 128, 70, 181, 248, 72, 4, 217, 243, 228, 242, 128, 69, 4, 208, ++ 32, 104, 214, 248, 40, 19, 0, 34, 116, 224, 32, 70, 181, 248, 72, 20, ++ 46, 240, 72, 222, 128, 70, 0, 40, 112, 208, 99, 108, 99, 177, 179, 66, ++ 11, 208, 148, 248, 144, 48, 1, 59, 219, 178, 132, 248, 144, 48, 0, 43, ++ 100, 209, 99, 100, 189, 232, 248, 131, 31, 70, 213, 248, 104, 50, 83, ++ 248, 7, 144, 185, 241, 0, 15, 59, 208, 153, 248, 6, 48, 0, 43, 55, 209, ++ 153, 248, 8, 48, 0, 43, 51, 208, 217, 248, 40, 51, 67, 69, 47, 209, ++ 213, 248, 80, 1, 73, 70, 54, 240, 211, 221, 217, 248, 4, 49, 90, 108, ++ 16, 177, 66, 240, 4, 2, 1, 224, 66, 240, 2, 2, 90, 100, 26, 122, 18, ++ 177, 155, 122, 227, 177, 13, 224, 153, 248, 57, 35, 194, 185, 27, 120, ++ 2, 43, 2, 209, 72, 70, 56, 240, 43, 218, 1, 33, 72, 70, 10, 70, 255, ++ 243, 50, 245, 196, 248, 44, 128, 152, 248, 10, 48, 132, 248, 48, 48, ++ 51, 177, 214, 248, 40, 51, 163, 98, 150, 248, 68, 48, 132, 248, 37, ++ 48, 4, 55, 32, 47, 185, 209, 148, 248, 48, 48, 35, 177, 32, 104, 189, ++ 232, 248, 67, 255, 243, 91, 183, 148, 248, 73, 32, 66, 177, 150, 248, ++ 68, 48, 32, 70, 132, 248, 37, 48, 189, 232, 248, 67, 46, 240, 33, 154, ++ 32, 104, 214, 248, 40, 19, 189, 232, 248, 67, 255, 247, 168, 190, 189, ++ 232, 248, 131, 45, 233, 255, 65, 6, 70, 80, 248, 28, 75, 15, 70, 177, ++ 248, 8, 128, 77, 104, 46, 240, 59, 222, 243, 106, 187, 66, 1, 209, 0, ++ 35, 243, 98, 56, 70, 223, 247, 242, 251, 35, 106, 65, 70, 24, 105, 3, ++ 240, 30, 250, 243, 105, 51, 185, 0, 147, 96, 104, 41, 29, 1, 34, 216, ++ 243, 194, 247, 41, 224, 212, 248, 168, 37, 149, 66, 4, 209, 32, 70, ++ 25, 70, 0, 34, 255, 247, 124, 254, 212, 248, 104, 18, 0, 35, 202, 88, ++ 50, 177, 210, 104, 208, 104, 168, 66, 4, 191, 212, 248, 168, 5, 208, ++ 96, 4, 51, 32, 43, 243, 209, 4, 224, 35, 104, 1, 34, 88, 105, 223, 247, ++ 249, 251, 3, 169, 40, 29, 216, 243, 59, 247, 1, 70, 0, 40, 243, 209, ++ 32, 70, 97, 104, 42, 70, 4, 240, 175, 220, 189, 232, 255, 129, 45, 233, ++ 240, 79, 209, 248, 40, 115, 11, 122, 135, 176, 5, 70, 14, 70, 146, 70, ++ 208, 248, 84, 65, 5, 147, 0, 47, 0, 240, 232, 128, 203, 104, 217, 104, ++ 48, 240, 184, 218, 0, 35, 51, 114, 198, 248, 40, 51, 123, 104, 128, ++ 70, 211, 248, 204, 48, 67, 179, 186, 241, 0, 15, 2, 208, 202, 248, 0, ++ 48, 34, 224, 105, 104, 40, 70, 4, 240, 103, 220, 122, 104, 243, 104, ++ 210, 248, 204, 32, 129, 70, 211, 248, 12, 176, 73, 70, 192, 248, 204, ++ 32, 216, 96, 40, 70, 230, 247, 20, 254, 83, 70, 104, 104, 9, 241, 4, ++ 1, 1, 34, 205, 248, 0, 160, 216, 243, 88, 247, 40, 70, 105, 104, 74, ++ 70, 4, 240, 107, 220, 243, 104, 195, 248, 12, 176, 32, 70, 57, 70, 50, ++ 70, 48, 240, 239, 216, 64, 185, 32, 70, 57, 70, 46, 240, 154, 216, 32, ++ 70, 57, 70, 255, 247, 96, 255, 16, 224, 49, 70, 40, 70, 255, 247, 120, ++ 251, 129, 70, 1, 35, 32, 70, 57, 70, 74, 70, 46, 240, 88, 217, 43, 104, ++ 147, 248, 61, 48, 11, 185, 165, 248, 70, 148, 5, 155, 40, 70, 51, 114, ++ 33, 70, 255, 247, 218, 252, 0, 35, 99, 103, 148, 249, 32, 32, 213, 248, ++ 104, 50, 83, 248, 34, 144, 185, 241, 0, 15, 27, 208, 153, 248, 6, 48, ++ 195, 177, 217, 248, 204, 48, 153, 4, 20, 213, 43, 104, 147, 248, 61, ++ 112, 135, 185, 73, 70, 58, 70, 59, 70, 40, 70, 0, 151, 1, 151, 2, 151, ++ 3, 151, 46, 240, 244, 221, 40, 70, 57, 70, 74, 70, 79, 240, 255, 51, ++ 40, 240, 141, 217, 184, 241, 0, 15, 26, 208, 152, 248, 6, 48, 123, 185, ++ 216, 248, 204, 48, 154, 4, 11, 213, 216, 3, 9, 212, 213, 248, 80, 1, ++ 65, 70, 54, 240, 152, 220, 64, 177, 32, 70, 65, 70, 4, 34, 2, 224, 32, ++ 70, 65, 70, 2, 34, 255, 247, 54, 252, 64, 70, 28, 240, 231, 216, 148, ++ 249, 32, 32, 150, 249, 68, 48, 154, 66, 47, 209, 213, 248, 104, 194, ++ 0, 33, 79, 246, 255, 112, 255, 34, 92, 248, 1, 48, 195, 177, 211, 248, ++ 40, 115, 175, 177, 179, 66, 19, 208, 147, 248, 6, 128, 184, 241, 0, ++ 15, 3, 209, 214, 248, 40, 131, 71, 69, 2, 209, 147, 248, 68, 32, 10, ++ 224, 211, 248, 244, 112, 255, 141, 135, 66, 60, 191, 147, 248, 68, 32, ++ 56, 70, 4, 49, 32, 41, 224, 209, 83, 178, 89, 28, 9, 191, 148, 248, ++ 33, 32, 132, 248, 32, 32, 132, 248, 32, 32, 132, 248, 33, 48, 43, 104, ++ 147, 248, 61, 48, 75, 177, 32, 70, 49, 70, 255, 247, 145, 250, 132, ++ 248, 33, 0, 32, 70, 255, 247, 173, 250, 2, 224, 255, 35, 132, 248, 33, ++ 48, 0, 32, 7, 176, 189, 232, 240, 143, 45, 233, 240, 79, 203, 104, 208, ++ 248, 84, 65, 133, 176, 13, 70, 209, 248, 40, 147, 211, 248, 12, 160, ++ 6, 70, 0, 35, 32, 70, 17, 70, 23, 70, 3, 147, 46, 240, 119, 220, 165, ++ 248, 46, 115, 128, 70, 185, 241, 0, 15, 67, 208, 235, 104, 79, 244, ++ 128, 114, 217, 104, 48, 70, 230, 247, 128, 252, 16, 241, 0, 11, 185, ++ 248, 8, 0, 24, 191, 79, 240, 1, 11, 217, 243, 241, 240, 3, 70, 56, 70, ++ 1, 147, 217, 243, 236, 240, 1, 155, 131, 66, 31, 209, 185, 248, 8, 48, ++ 187, 66, 0, 240, 136, 128, 32, 70, 73, 70, 42, 70, 48, 240, 3, 216, ++ 56, 177, 32, 70, 73, 70, 58, 70, 45, 240, 209, 223, 0, 40, 0, 240, 130, ++ 128, 48, 70, 41, 70, 254, 243, 44, 241, 135, 66, 115, 209, 32, 70, 73, ++ 70, 58, 70, 1, 35, 46, 240, 108, 216, 108, 224, 32, 70, 73, 70, 42, ++ 70, 47, 240, 232, 223, 48, 185, 48, 70, 41, 70, 3, 170, 255, 247, 169, ++ 254, 0, 224, 203, 70, 184, 241, 0, 15, 6, 209, 32, 70, 57, 70, 45, 240, ++ 207, 223, 128, 70, 0, 40, 91, 208, 216, 248, 4, 16, 235, 104, 138, 69, ++ 217, 96, 197, 248, 40, 131, 24, 208, 95, 250, 139, 242, 114, 177, 48, ++ 70, 1, 34, 79, 244, 128, 115, 230, 247, 167, 252, 48, 70, 81, 70, 46, ++ 240, 51, 223, 80, 177, 48, 70, 81, 70, 0, 34, 2, 224, 3, 155, 35, 177, ++ 48, 70, 79, 244, 128, 115, 230, 247, 151, 252, 184, 248, 8, 48, 7, 244, ++ 96, 82, 3, 244, 96, 83, 154, 66, 5, 221, 32, 70, 65, 70, 58, 70, 1, ++ 35, 46, 240, 37, 216, 48, 70, 33, 70, 255, 247, 175, 251, 171, 121, ++ 123, 185, 148, 249, 32, 48, 88, 28, 11, 208, 214, 248, 104, 18, 213, ++ 248, 244, 32, 81, 248, 35, 48, 210, 141, 211, 248, 244, 48, 219, 141, ++ 154, 66, 3, 210, 149, 248, 68, 48, 132, 248, 32, 48, 51, 104, 147, 248, ++ 61, 0, 80, 177, 32, 70, 0, 33, 255, 247, 203, 249, 132, 248, 33, 0, ++ 32, 70, 255, 247, 231, 249, 0, 32, 5, 224, 255, 35, 132, 248, 33, 48, ++ 1, 224, 111, 240, 26, 0, 5, 176, 189, 232, 240, 143, 112, 181, 144, ++ 248, 48, 48, 4, 70, 6, 104, 0, 43, 32, 208, 195, 106, 19, 177, 155, ++ 122, 0, 43, 27, 209, 32, 70, 255, 247, 140, 249, 148, 248, 73, 80, 0, ++ 35, 161, 106, 132, 248, 48, 48, 163, 98, 227, 98, 37, 177, 32, 70, 189, ++ 232, 112, 64, 45, 240, 234, 159, 48, 70, 1, 34, 255, 247, 116, 252, ++ 32, 70, 2, 33, 42, 70, 189, 232, 112, 64, 46, 240, 133, 157, 112, 189, ++ 45, 233, 240, 79, 145, 176, 10, 147, 11, 121, 128, 70, 13, 70, 9, 146, ++ 208, 248, 84, 65, 0, 43, 0, 240, 150, 129, 148, 248, 49, 112, 31, 177, ++ 1, 63, 132, 248, 49, 112, 127, 225, 148, 248, 33, 48, 7, 43, 0, 242, ++ 141, 129, 208, 248, 104, 34, 91, 178, 82, 248, 35, 96, 0, 46, 0, 240, ++ 133, 129, 51, 122, 0, 43, 0, 240, 132, 129, 208, 248, 72, 1, 49, 70, ++ 49, 240, 60, 221, 2, 70, 168, 185, 212, 248, 164, 48, 64, 70, 9, 43, ++ 9, 220, 214, 248, 40, 19, 255, 247, 55, 252, 212, 248, 164, 48, 1, 51, ++ 196, 248, 164, 48, 3, 224, 213, 248, 40, 19, 255, 247, 45, 252, 0, 35, ++ 99, 99, 81, 225, 148, 249, 35, 48, 196, 248, 164, 112, 1, 51, 5, 209, ++ 216, 248, 84, 1, 41, 70, 9, 154, 255, 247, 199, 252, 214, 248, 244, ++ 48, 12, 175, 219, 141, 13, 241, 52, 10, 49, 70, 11, 147, 216, 248, 72, ++ 1, 10, 154, 9, 155, 0, 151, 205, 248, 4, 160, 49, 240, 7, 218, 214, ++ 248, 244, 48, 57, 70, 216, 141, 82, 70, 74, 240, 0, 217, 49, 70, 13, ++ 154, 216, 248, 72, 1, 49, 240, 142, 218, 213, 248, 244, 48, 6, 70, 179, ++ 248, 46, 144, 216, 248, 72, 1, 41, 70, 10, 154, 9, 155, 141, 232, 128, ++ 4, 49, 240, 236, 217, 213, 248, 244, 48, 57, 70, 216, 141, 82, 70, 74, ++ 240, 229, 216, 13, 154, 41, 70, 216, 248, 72, 1, 49, 240, 115, 218, ++ 79, 234, 137, 41, 7, 70, 0, 235, 9, 10, 32, 70, 46, 240, 255, 221, 59, ++ 26, 32, 70, 7, 147, 46, 240, 250, 221, 32, 70, 46, 240, 247, 221, 192, ++ 235, 10, 10, 32, 70, 46, 240, 242, 221, 7, 155, 55, 26, 199, 235, 10, ++ 12, 195, 235, 7, 11, 139, 234, 235, 114, 162, 235, 235, 114, 140, 234, ++ 236, 118, 166, 235, 236, 118, 150, 66, 168, 191, 22, 70, 71, 242, 48, ++ 82, 150, 66, 68, 216, 226, 109, 2, 42, 65, 208, 179, 69, 4, 208, 27, ++ 235, 6, 15, 24, 191, 202, 235, 7, 11, 10, 153, 9, 154, 187, 241, 0, ++ 15, 79, 234, 89, 3, 204, 191, 198, 235, 3, 3, 243, 24, 14, 145, 15, ++ 146, 14, 168, 15, 169, 0, 34, 74, 240, 176, 216, 12, 175, 13, 174, 216, ++ 248, 72, 1, 41, 70, 14, 154, 15, 155, 0, 151, 1, 150, 49, 240, 143, ++ 217, 213, 248, 244, 48, 57, 70, 216, 141, 50, 70, 74, 240, 136, 216, ++ 216, 248, 72, 1, 41, 70, 12, 154, 13, 155, 0, 151, 1, 150, 49, 240, ++ 25, 218, 10, 155, 9, 153, 0, 147, 13, 155, 1, 145, 2, 147, 0, 35, 4, ++ 147, 205, 248, 12, 144, 64, 70, 41, 70, 14, 154, 15, 155, 152, 224, ++ 213, 248, 204, 0, 16, 244, 0, 80, 0, 240, 175, 128, 216, 248, 80, 1, ++ 41, 70, 7, 147, 205, 248, 32, 192, 54, 240, 74, 218, 7, 155, 221, 248, ++ 32, 192, 104, 177, 98, 107, 90, 177, 146, 27, 18, 245, 122, 127, 7, ++ 219, 178, 245, 122, 127, 4, 220, 148, 248, 104, 0, 0, 40, 0, 240, 149, ++ 128, 0, 34, 132, 248, 104, 32, 226, 109, 1, 42, 1, 208, 3, 42, 44, 209, ++ 35, 110, 195, 241, 100, 3, 75, 43, 3, 216, 24, 43, 152, 191, 25, 35, ++ 0, 224, 75, 35, 11, 153, 195, 241, 100, 3, 138, 2, 83, 67, 100, 33, ++ 227, 69, 179, 251, 241, 243, 7, 216, 218, 25, 82, 69, 12, 217, 178, ++ 235, 10, 3, 9, 208, 251, 26, 9, 224, 195, 235, 10, 3, 187, 66, 5, 217, ++ 218, 27, 3, 208, 194, 235, 10, 2, 59, 70, 0, 224, 82, 70, 210, 26, 141, ++ 232, 12, 0, 2, 35, 2, 147, 106, 224, 2, 42, 73, 209, 79, 244, 200, 66, ++ 187, 245, 224, 79, 162, 101, 2, 218, 203, 245, 24, 67, 6, 224, 187, ++ 245, 60, 79, 84, 221, 9, 245, 24, 67, 203, 235, 3, 3, 10, 154, 9, 153, ++ 15, 146, 14, 145, 15, 168, 14, 169, 0, 34, 74, 240, 22, 216, 12, 175, ++ 13, 174, 216, 248, 72, 1, 41, 70, 15, 154, 14, 155, 0, 151, 1, 150, ++ 49, 240, 245, 216, 213, 248, 244, 48, 57, 70, 216, 141, 50, 70, 73, ++ 240, 238, 223, 216, 248, 72, 1, 41, 70, 12, 154, 13, 155, 0, 151, 1, ++ 150, 49, 240, 127, 217, 9, 155, 10, 154, 1, 147, 13, 155, 0, 146, 2, ++ 147, 0, 35, 4, 147, 15, 154, 14, 155, 205, 248, 12, 144, 64, 70, 41, ++ 70, 230, 247, 27, 248, 2, 35, 132, 248, 49, 48, 111, 240, 24, 0, 19, ++ 224, 1, 34, 3, 146, 64, 70, 41, 70, 74, 70, 205, 248, 0, 160, 1, 151, ++ 2, 150, 46, 240, 240, 218, 7, 224, 111, 240, 3, 0, 4, 224, 79, 240, ++ 255, 48, 1, 224, 111, 240, 16, 0, 17, 176, 189, 232, 240, 143, 0, 146, ++ 185, 251, 242, 242, 3, 245, 200, 67, 210, 178, 1, 147, 2, 146, 64, 70, ++ 41, 70, 74, 70, 51, 70, 46, 240, 110, 219, 237, 231, 8, 181, 208, 248, ++ 84, 49, 147, 248, 48, 32, 98, 177, 1, 34, 131, 248, 174, 32, 219, 106, ++ 59, 177, 89, 104, 47, 240, 235, 222, 130, 33, 189, 232, 8, 64, 4, 240, ++ 194, 153, 8, 189, 45, 233, 248, 67, 3, 104, 5, 70, 27, 126, 0, 43, 105, ++ 208, 0, 105, 39, 240, 125, 222, 128, 70, 32, 177, 168, 104, 189, 232, ++ 248, 67, 224, 247, 63, 189, 213, 248, 84, 65, 32, 70, 46, 240, 251, ++ 220, 6, 70, 40, 185, 32, 70, 49, 70, 189, 232, 248, 67, 255, 247, 25, ++ 186, 132, 248, 172, 128, 2, 121, 7, 42, 67, 216, 213, 248, 104, 50, ++ 82, 178, 83, 248, 34, 112, 0, 47, 60, 208, 215, 248, 40, 147, 185, 241, ++ 0, 15, 55, 208, 148, 248, 32, 32, 7, 42, 154, 191, 82, 178, 83, 248, ++ 34, 48, 67, 70, 155, 121, 35, 185, 32, 70, 255, 247, 170, 248, 2, 70, ++ 104, 177, 40, 70, 255, 247, 171, 255, 40, 70, 73, 70, 0, 34, 255, 247, ++ 85, 250, 32, 70, 2, 33, 0, 34, 46, 240, 104, 219, 4, 224, 213, 248, ++ 84, 1, 57, 70, 255, 247, 243, 250, 179, 104, 155, 177, 234, 104, 32, ++ 70, 210, 248, 128, 17, 242, 104, 145, 66, 140, 191, 194, 235, 1, 1, ++ 0, 33, 200, 49, 139, 66, 140, 191, 193, 235, 3, 1, 1, 33, 0, 34, 255, ++ 247, 133, 249, 3, 224, 32, 70, 0, 33, 255, 247, 204, 249, 32, 70, 49, ++ 70, 189, 232, 248, 67, 46, 240, 144, 156, 189, 232, 248, 131, 56, 181, ++ 208, 248, 168, 21, 4, 70, 47, 240, 108, 222, 3, 33, 5, 70, 212, 248, ++ 84, 1, 255, 247, 184, 249, 32, 70, 41, 70, 10, 34, 0, 35, 255, 247, ++ 217, 249, 117, 177, 173, 121, 101, 185, 212, 248, 168, 21, 32, 70, 47, ++ 240, 128, 222, 1, 70, 212, 248, 84, 1, 42, 70, 189, 232, 56, 64, 255, ++ 247, 175, 186, 56, 189, 45, 233, 240, 65, 3, 104, 7, 70, 147, 248, 60, ++ 32, 208, 248, 84, 81, 14, 104, 140, 104, 209, 248, 12, 128, 0, 42, 84, ++ 208, 147, 248, 61, 48, 0, 43, 80, 208, 208, 248, 72, 1, 49, 70, 49, ++ 240, 232, 218, 0, 40, 73, 208, 151, 248, 114, 50, 91, 185, 150, 248, ++ 48, 35, 149, 248, 67, 48, 154, 66, 5, 217, 107, 108, 27, 185, 3, 35, ++ 110, 100, 133, 248, 144, 48, 179, 121, 75, 185, 51, 124, 59, 177, 149, ++ 248, 72, 48, 35, 177, 150, 248, 48, 51, 1, 51, 134, 248, 48, 51, 40, ++ 70, 255, 247, 25, 248, 149, 248, 173, 16, 120, 177, 0, 41, 38, 209, ++ 1, 35, 40, 70, 133, 248, 173, 48, 133, 248, 172, 16, 233, 101, 255, ++ 247, 92, 249, 40, 70, 189, 232, 240, 65, 47, 240, 81, 159, 17, 177, ++ 40, 70, 255, 247, 151, 248, 149, 249, 32, 32, 150, 249, 68, 48, 154, ++ 66, 14, 209, 179, 121, 56, 70, 49, 70, 66, 70, 35, 177, 35, 70, 189, ++ 232, 240, 65, 255, 247, 59, 189, 35, 70, 189, 232, 240, 65, 46, 240, ++ 132, 156, 189, 232, 240, 129, 45, 233, 240, 71, 145, 248, 6, 144, 5, ++ 70, 136, 70, 23, 70, 208, 248, 84, 65, 185, 241, 0, 15, 4, 209, 1, 35, ++ 129, 248, 56, 147, 129, 248, 57, 51, 43, 104, 147, 248, 60, 32, 0, 42, ++ 0, 240, 131, 128, 147, 248, 61, 48, 0, 43, 126, 208, 213, 248, 84, 1, ++ 152, 248, 68, 32, 144, 248, 32, 48, 147, 66, 89, 178, 8, 191, 144, 249, ++ 33, 16, 7, 41, 13, 220, 0, 41, 11, 219, 147, 66, 213, 248, 104, 18, ++ 94, 178, 3, 209, 144, 249, 33, 48, 155, 0, 0, 224, 179, 0, 206, 88, ++ 0, 224, 0, 38, 185, 241, 0, 15, 26, 208, 163, 107, 163, 177, 99, 104, ++ 51, 177, 32, 70, 0, 33, 255, 247, 250, 248, 32, 70, 47, 240, 241, 222, ++ 32, 70, 161, 107, 0, 34, 255, 247, 166, 248, 0, 34, 32, 70, 152, 248, ++ 68, 16, 19, 70, 47, 240, 201, 222, 213, 248, 84, 1, 49, 70, 63, 224, ++ 216, 248, 244, 48, 179, 248, 46, 160, 148, 248, 172, 48, 0, 43, 60, ++ 209, 99, 108, 67, 69, 51, 208, 58, 70, 49, 70, 255, 247, 229, 249, 235, ++ 104, 73, 70, 32, 70, 211, 248, 128, 97, 255, 247, 209, 248, 32, 70, ++ 47, 240, 200, 222, 213, 248, 72, 81, 65, 70, 40, 70, 48, 240, 118, 221, ++ 24, 33, 65, 67, 40, 70, 74, 49, 49, 240, 60, 216, 227, 143, 79, 234, ++ 138, 42, 246, 24, 198, 235, 10, 6, 192, 1, 247, 25, 63, 24, 57, 70, ++ 32, 70, 74, 70, 255, 247, 104, 248, 59, 70, 32, 70, 152, 248, 68, 16, ++ 74, 70, 47, 240, 139, 222, 1, 35, 132, 248, 172, 48, 189, 232, 240, ++ 135, 65, 70, 58, 70, 189, 232, 240, 71, 255, 247, 175, 185, 189, 232, ++ 240, 135, 45, 233, 247, 79, 139, 121, 6, 70, 12, 70, 145, 70, 67, 185, ++ 2, 104, 146, 106, 129, 248, 57, 51, 193, 248, 52, 35, 1, 34, 129, 248, ++ 56, 35, 51, 104, 147, 248, 60, 32, 0, 42, 0, 240, 163, 128, 147, 248, ++ 61, 48, 0, 43, 0, 240, 158, 128, 214, 248, 84, 33, 148, 248, 68, 16, ++ 146, 248, 32, 48, 139, 66, 88, 178, 8, 191, 146, 249, 33, 0, 7, 40, ++ 13, 220, 0, 40, 11, 219, 139, 66, 214, 248, 104, 2, 93, 178, 3, 209, ++ 146, 249, 33, 48, 155, 0, 0, 224, 171, 0, 199, 88, 0, 224, 0, 39, 212, ++ 248, 244, 48, 88, 142, 216, 243, 132, 244, 182, 248, 72, 4, 216, 243, ++ 128, 244, 163, 121, 214, 248, 84, 81, 75, 177, 149, 249, 35, 48, 1, ++ 51, 87, 209, 40, 70, 33, 70, 74, 70, 255, 247, 96, 249, 81, 224, 149, ++ 248, 172, 128, 181, 248, 62, 160, 184, 241, 0, 15, 99, 209, 107, 108, ++ 187, 66, 65, 208, 66, 70, 48, 70, 212, 248, 40, 19, 255, 247, 166, 248, ++ 214, 248, 84, 1, 33, 70, 46, 240, 207, 218, 214, 248, 72, 177, 33, 70, ++ 88, 70, 48, 240, 229, 220, 24, 33, 65, 67, 88, 70, 72, 49, 48, 240, ++ 171, 223, 2, 169, 192, 1, 65, 248, 4, 13, 72, 70, 49, 240, 224, 217, ++ 148, 248, 68, 48, 65, 70, 133, 248, 36, 48, 243, 104, 40, 70, 211, 248, ++ 128, 145, 255, 247, 31, 248, 40, 70, 47, 240, 22, 222, 1, 155, 40, 70, ++ 200, 59, 201, 235, 3, 9, 202, 235, 9, 10, 81, 70, 66, 70, 254, 247, ++ 197, 255, 83, 70, 40, 70, 151, 248, 68, 16, 66, 70, 47, 240, 232, 221, ++ 1, 35, 133, 248, 172, 48, 5, 224, 40, 70, 57, 70, 74, 70, 255, 247, ++ 14, 249, 24, 224, 163, 121, 179, 177, 214, 248, 84, 1, 195, 143, 176, ++ 248, 122, 32, 210, 24, 111, 240, 199, 3, 155, 26, 212, 248, 244, 32, ++ 209, 141, 208, 248, 140, 32, 137, 2, 177, 251, 242, 241, 130, 107, 137, ++ 26, 89, 24, 3, 34, 254, 247, 155, 255, 189, 232, 254, 143, 248, 181, ++ 22, 70, 66, 126, 4, 70, 15, 70, 194, 177, 72, 242, 2, 2, 72, 242, 14, ++ 5, 48, 70, 0, 43, 8, 191, 21, 70, 220, 247, 55, 254, 0, 40, 24, 191, ++ 0, 37, 122, 28, 20, 191, 57, 70, 111, 240, 1, 1, 32, 70, 50, 70, 43, ++ 70, 5, 240, 184, 218, 0, 32, 248, 189, 111, 240, 10, 0, 248, 189, 45, ++ 233, 240, 65, 12, 70, 7, 104, 5, 70, 48, 240, 50, 223, 6, 70, 4, 241, ++ 194, 2, 56, 70, 49, 70, 48, 240, 53, 220, 212, 248, 204, 48, 218, 3, ++ 13, 212, 162, 121, 114, 185, 3, 244, 0, 83, 0, 43, 12, 191, 17, 39, ++ 129, 39, 12, 191, 79, 240, 25, 8, 79, 240, 193, 8, 5, 224, 33, 39, 184, ++ 70, 2, 224, 65, 39, 79, 240, 193, 8, 33, 70, 40, 70, 48, 240, 71, 220, ++ 128, 178, 71, 234, 0, 36, 79, 246, 241, 115, 40, 70, 49, 70, 72, 244, ++ 64, 114, 35, 64, 48, 240, 245, 218, 0, 32, 189, 232, 240, 129, 45, 233, ++ 240, 79, 155, 70, 67, 104, 139, 176, 203, 88, 4, 70, 13, 70, 147, 248, ++ 6, 160, 22, 70, 79, 240, 24, 9, 0, 42, 110, 208, 9, 251, 10, 249, 31, ++ 139, 9, 241, 62, 3, 25, 70, 3, 147, 48, 240, 236, 222, 79, 246, 254, ++ 118, 5, 171, 41, 70, 4, 170, 6, 64, 32, 70, 48, 240, 233, 222, 4, 153, ++ 5, 154, 56, 70, 73, 240, 86, 220, 4, 155, 128, 70, 6, 147, 5, 155, 6, ++ 168, 7, 147, 7, 169, 67, 70, 0, 34, 73, 240, 229, 220, 43, 122, 27, ++ 185, 171, 121, 11, 185, 43, 124, 67, 185, 191, 2, 6, 168, 7, 169, 0, ++ 34, 59, 70, 73, 240, 192, 220, 200, 235, 7, 8, 8, 171, 0, 147, 9, 171, ++ 1, 147, 32, 70, 7, 155, 41, 70, 6, 154, 48, 240, 56, 222, 43, 122, 51, ++ 187, 79, 234, 219, 19, 179, 235, 216, 31, 32, 70, 16, 217, 9, 241, 66, ++ 1, 48, 240, 174, 222, 64, 185, 9, 154, 32, 70, 90, 68, 210, 9, 9, 241, ++ 68, 1, 146, 178, 49, 240, 142, 216, 70, 240, 1, 6, 15, 224, 41, 70, ++ 48, 240, 52, 221, 1, 35, 10, 241, 4, 2, 19, 250, 2, 242, 3, 250, 10, ++ 250, 66, 234, 10, 3, 152, 66, 8, 191, 70, 240, 2, 6, 79, 234, 219, 18, ++ 32, 70, 9, 241, 66, 1, 146, 178, 49, 240, 115, 216, 32, 70, 3, 153, ++ 8, 224, 9, 251, 10, 250, 10, 241, 66, 1, 49, 240, 106, 216, 32, 70, ++ 10, 241, 68, 1, 50, 70, 49, 240, 100, 216, 11, 176, 189, 232, 240, 143, ++ 45, 233, 240, 71, 136, 176, 4, 70, 13, 70, 23, 70, 208, 248, 0, 160, ++ 48, 240, 161, 219, 6, 70, 0, 47, 106, 208, 99, 104, 85, 248, 3, 128, ++ 43, 122, 19, 177, 213, 248, 244, 48, 1, 224, 213, 248, 240, 48, 223, ++ 141, 32, 70, 3, 171, 168, 248, 24, 112, 41, 70, 2, 170, 48, 240, 93, ++ 222, 56, 70, 2, 153, 3, 154, 73, 240, 202, 219, 2, 155, 129, 70, 4, ++ 147, 3, 155, 4, 168, 5, 147, 5, 169, 75, 70, 0, 34, 73, 240, 89, 220, ++ 43, 122, 191, 2, 27, 185, 171, 121, 11, 185, 43, 124, 155, 185, 216, ++ 248, 36, 48, 4, 168, 5, 169, 83, 177, 0, 34, 73, 240, 50, 220, 216, ++ 248, 36, 48, 75, 69, 7, 210, 4, 168, 5, 169, 0, 34, 0, 224, 26, 70, ++ 59, 70, 73, 240, 38, 220, 6, 171, 0, 147, 7, 171, 41, 70, 4, 154, 1, ++ 147, 32, 70, 5, 155, 48, 240, 160, 221, 40, 70, 225, 247, 77, 250, 218, ++ 248, 28, 55, 7, 157, 25, 104, 2, 70, 45, 26, 9, 177, 91, 104, 237, 26, ++ 6, 241, 95, 1, 32, 70, 73, 0, 48, 240, 250, 223, 24, 35, 94, 67, 234, ++ 9, 32, 70, 6, 241, 64, 1, 146, 178, 48, 240, 241, 223, 255, 9, 79, 246, ++ 248, 114, 32, 70, 6, 241, 58, 1, 58, 64, 30, 224, 218, 248, 16, 0, 39, ++ 240, 209, 218, 5, 70, 208, 185, 24, 39, 119, 67, 32, 70, 7, 241, 58, ++ 1, 42, 70, 48, 240, 219, 223, 32, 70, 7, 241, 64, 1, 42, 70, 48, 240, ++ 213, 223, 6, 241, 95, 1, 32, 70, 73, 0, 42, 70, 48, 240, 206, 223, 32, ++ 70, 7, 241, 62, 1, 42, 70, 48, 240, 200, 223, 8, 176, 189, 232, 240, ++ 135, 240, 181, 22, 70, 133, 176, 5, 70, 12, 70, 7, 104, 48, 240, 41, ++ 222, 38, 185, 40, 70, 33, 70, 48, 240, 230, 221, 39, 224, 107, 104, ++ 212, 248, 244, 32, 227, 88, 210, 141, 56, 70, 26, 131, 2, 169, 3, 170, ++ 229, 247, 233, 251, 163, 121, 11, 185, 34, 124, 90, 185, 40, 70, 33, ++ 70, 3, 154, 2, 155, 48, 240, 198, 217, 40, 70, 33, 70, 1, 34, 48, 240, ++ 129, 223, 7, 224, 0, 147, 1, 147, 40, 70, 33, 70, 3, 154, 2, 155, 48, ++ 240, 82, 223, 40, 70, 33, 70, 1, 34, 48, 240, 11, 220, 40, 70, 33, 70, ++ 50, 70, 48, 240, 68, 216, 5, 176, 240, 189, 11, 104, 16, 181, 72, 105, ++ 56, 34, 137, 105, 220, 105, 220, 247, 44, 253, 64, 177, 67, 120, 5, ++ 43, 5, 209, 131, 120, 3, 43, 4, 191, 208, 248, 3, 48, 99, 97, 0, 32, ++ 16, 189, 45, 233, 240, 79, 5, 70, 0, 137, 135, 176, 147, 70, 153, 70, ++ 221, 248, 64, 160, 0, 40, 65, 208, 24, 70, 81, 70, 76, 34, 220, 247, ++ 16, 253, 4, 70, 0, 40, 57, 208, 67, 120, 16, 43, 51, 209, 66, 136, 43, ++ 136, 154, 66, 47, 209, 70, 122, 2, 121, 65, 121, 144, 248, 6, 128, 195, ++ 121, 0, 122, 64, 234, 6, 38, 104, 136, 176, 66, 35, 216, 79, 234, 8, ++ 72, 72, 234, 1, 40, 72, 234, 2, 8, 72, 234, 3, 104, 2, 209, 107, 104, ++ 67, 69, 23, 216, 2, 175, 88, 70, 73, 70, 82, 70, 5, 241, 10, 3, 0, 151, ++ 48, 240, 159, 223, 56, 70, 4, 241, 10, 1, 8, 34, 213, 247, 226, 251, ++ 56, 185, 8, 241, 1, 3, 110, 128, 107, 96, 35, 185, 1, 54, 110, 128, ++ 1, 224, 0, 32, 0, 224, 1, 32, 7, 176, 189, 232, 240, 143, 16, 181, 0, ++ 104, 20, 70, 7, 153, 249, 247, 78, 253, 3, 44, 9, 209, 4, 34, 6, 72, ++ 4, 153, 213, 247, 198, 251, 0, 40, 24, 191, 111, 240, 1, 0, 16, 189, ++ 111, 240, 22, 0, 16, 189, 0, 191, 106, 21, 4, 0, 248, 181, 70, 104, ++ 146, 248, 112, 48, 15, 70, 141, 25, 146, 248, 111, 16, 2, 241, 113, ++ 0, 67, 234, 1, 33, 9, 34, 217, 243, 173, 240, 4, 70, 8, 185, 40, 129, ++ 248, 189, 66, 120, 12, 58, 146, 178, 15, 42, 42, 129, 3, 216, 0, 35, ++ 43, 129, 0, 32, 248, 189, 193, 136, 187, 91, 153, 66, 7, 209, 16, 42, ++ 5, 209, 14, 48, 5, 241, 10, 1, 213, 247, 147, 251, 152, 177, 226, 121, ++ 163, 121, 5, 241, 10, 0, 67, 234, 2, 35, 187, 83, 163, 104, 4, 241, ++ 14, 1, 107, 96, 163, 137, 16, 34, 107, 128, 16, 35, 43, 129, 213, 247, ++ 147, 251, 1, 32, 248, 189, 1, 32, 248, 189, 45, 233, 240, 65, 71, 104, ++ 86, 104, 20, 70, 35, 136, 202, 91, 16, 46, 148, 191, 182, 178, 16, 38, ++ 154, 66, 136, 70, 1, 235, 7, 5, 10, 209, 43, 137, 179, 66, 7, 209, 4, ++ 241, 8, 0, 5, 241, 10, 1, 50, 70, 213, 247, 98, 251, 80, 177, 46, 129, ++ 5, 241, 10, 0, 4, 241, 8, 1, 50, 70, 213, 247, 108, 251, 35, 136, 40, ++ 248, 7, 48, 212, 248, 140, 48, 180, 248, 144, 64, 107, 96, 108, 128, ++ 189, 232, 240, 129, 0, 32, 24, 112, 17, 244, 0, 112, 5, 208, 18, 240, ++ 128, 15, 2, 208, 1, 32, 24, 112, 112, 71, 73, 5, 1, 213, 19, 6, 7, 213, ++ 64, 185, 2, 240, 64, 2, 210, 241, 1, 0, 56, 191, 0, 32, 112, 71, 0, ++ 32, 112, 71, 1, 32, 112, 71, 240, 181, 5, 104, 135, 176, 14, 70, 0, ++ 147, 64, 242, 238, 81, 4, 171, 5, 145, 1, 145, 2, 147, 7, 70, 80, 33, ++ 40, 70, 6, 241, 194, 3, 253, 243, 226, 240, 4, 70, 0, 40, 52, 208, 5, ++ 171, 0, 147, 0, 35, 1, 147, 40, 70, 4, 155, 80, 33, 50, 70, 247, 243, ++ 15, 244, 5, 155, 24, 51, 163, 129, 43, 104, 147, 248, 60, 48, 67, 177, ++ 123, 104, 158, 66, 5, 209, 251, 123, 1, 43, 2, 209, 213, 248, 164, 117, ++ 1, 224, 243, 104, 223, 104, 40, 70, 33, 70, 79, 244, 122, 34, 225, 247, ++ 251, 249, 163, 105, 0, 34, 67, 240, 2, 3, 163, 97, 12, 155, 1, 146, ++ 2, 146, 12, 34, 3, 146, 6, 235, 131, 3, 0, 150, 40, 70, 33, 70, 58, ++ 70, 219, 107, 232, 247, 44, 251, 7, 176, 240, 189, 248, 181, 2, 105, ++ 13, 104, 6, 70, 172, 88, 42, 121, 3, 104, 0, 42, 47, 208, 170, 121, ++ 50, 177, 213, 248, 204, 32, 144, 4, 2, 213, 98, 120, 74, 185, 248, 189, ++ 42, 122, 0, 42, 35, 208, 98, 136, 145, 7, 32, 213, 34, 127, 0, 42, 29, ++ 208, 211, 248, 72, 113, 41, 70, 56, 70, 48, 240, 97, 217, 171, 121, ++ 115, 177, 213, 248, 204, 48, 154, 4, 10, 213, 1, 34, 130, 64, 0, 35, ++ 56, 70, 41, 70, 210, 178, 48, 240, 229, 218, 0, 35, 99, 112, 248, 189, ++ 48, 70, 33, 70, 1, 34, 189, 232, 248, 64, 50, 240, 189, 153, 248, 189, ++ 45, 233, 240, 65, 6, 104, 134, 176, 13, 159, 0, 35, 5, 70, 17, 153, ++ 48, 70, 144, 70, 12, 156, 5, 147, 249, 247, 32, 252, 3, 47, 4, 217, ++ 5, 168, 33, 70, 4, 34, 213, 247, 171, 250, 184, 241, 9, 15, 34, 209, ++ 107, 104, 27, 179, 170, 123, 34, 240, 2, 2, 170, 115, 34, 120, 69, 42, ++ 10, 208, 83, 42, 29, 209, 219, 104, 48, 70, 0, 147, 50, 33, 34, 29, ++ 59, 31, 229, 247, 170, 248, 22, 224, 1, 34, 4, 52, 4, 63, 2, 146, 0, ++ 148, 1, 151, 219, 104, 0, 34, 3, 147, 48, 70, 7, 73, 19, 70, 225, 247, ++ 80, 248, 7, 224, 111, 240, 22, 0, 4, 224, 79, 240, 255, 48, 1, 224, ++ 111, 240, 1, 0, 6, 176, 189, 232, 240, 129, 9, 80, 136, 0, 45, 233, ++ 243, 65, 144, 232, 160, 0, 59, 28, 4, 70, 24, 191, 1, 35, 213, 248, ++ 72, 97, 136, 70, 0, 41, 45, 208, 0, 43, 69, 209, 0, 241, 8, 7, 57, 70, ++ 40, 70, 249, 247, 225, 251, 128, 70, 0, 40, 63, 209, 40, 70, 26, 240, ++ 21, 222, 1, 70, 1, 48, 60, 208, 59, 70, 40, 70, 79, 244, 148, 50, 205, ++ 248, 0, 128, 26, 240, 164, 219, 7, 70, 0, 40, 52, 208, 32, 70, 57, 70, ++ 50, 240, 135, 219, 128, 70, 192, 185, 56, 70, 4, 241, 32, 1, 103, 96, ++ 226, 105, 26, 240, 124, 219, 48, 70, 57, 70, 255, 247, 85, 252, 22, ++ 224, 35, 179, 213, 248, 104, 1, 57, 70, 4, 34, 60, 240, 134, 222, 48, ++ 70, 57, 70, 48, 240, 104, 219, 23, 185, 6, 224, 79, 240, 255, 56, 40, ++ 70, 57, 70, 26, 240, 126, 221, 0, 224, 184, 70, 0, 35, 99, 96, 0, 35, ++ 227, 115, 12, 224, 79, 240, 0, 8, 9, 224, 111, 240, 15, 8, 6, 224, 111, ++ 240, 21, 8, 3, 224, 111, 240, 26, 8, 0, 224, 152, 70, 64, 70, 189, 232, ++ 252, 129, 45, 233, 240, 65, 136, 70, 180, 176, 5, 70, 9, 136, 1, 168, ++ 184, 248, 4, 32, 215, 243, 156, 245, 41, 224, 99, 107, 166, 106, 27, ++ 1, 4, 213, 30, 177, 55, 125, 23, 240, 1, 7, 5, 208, 1, 168, 51, 153, ++ 34, 70, 215, 243, 77, 246, 26, 224, 1, 35, 49, 70, 34, 70, 40, 70, 225, ++ 247, 10, 252, 40, 70, 2, 33, 59, 70, 34, 70, 225, 247, 132, 252, 163, ++ 105, 88, 5, 5, 213, 213, 248, 52, 1, 49, 70, 34, 70, 241, 247, 131, ++ 249, 43, 104, 33, 70, 88, 105, 1, 34, 222, 247, 173, 249, 64, 70, 51, ++ 169, 215, 243, 239, 244, 4, 70, 0, 40, 206, 209, 12, 224, 147, 106, ++ 51, 185, 43, 104, 17, 70, 88, 105, 1, 34, 222, 247, 157, 249, 3, 224, ++ 64, 70, 51, 153, 215, 243, 28, 246, 1, 168, 51, 169, 215, 243, 218, ++ 244, 2, 70, 0, 40, 235, 209, 52, 176, 189, 232, 240, 129, 45, 233, 248, ++ 67, 5, 104, 140, 107, 213, 248, 72, 129, 6, 70, 15, 70, 64, 70, 33, ++ 70, 48, 240, 58, 216, 57, 70, 129, 70, 0, 34, 48, 70, 50, 240, 168, ++ 216, 163, 121, 3, 179, 212, 248, 204, 48, 154, 4, 28, 213, 251, 127, ++ 1, 43, 2, 208, 2, 43, 17, 209, 9, 224, 9, 241, 4, 9, 3, 250, 9, 242, ++ 64, 70, 33, 70, 210, 178, 48, 240, 177, 217, 6, 224, 40, 70, 1, 33, ++ 34, 70, 79, 240, 255, 51, 38, 240, 147, 223, 48, 70, 33, 70, 1, 34, ++ 52, 240, 144, 221, 26, 224, 212, 248, 4, 49, 155, 122, 27, 177, 32, ++ 70, 0, 33, 3, 240, 229, 218, 43, 104, 91, 107, 59, 177, 212, 248, 4, ++ 49, 27, 127, 27, 177, 32, 70, 0, 33, 1, 240, 172, 218, 212, 248, 4, ++ 49, 27, 123, 27, 177, 32, 70, 0, 33, 1, 240, 26, 223, 40, 70, 33, 70, ++ 189, 232, 248, 67, 53, 240, 254, 158, 16, 181, 68, 104, 3, 70, 140, ++ 177, 161, 66, 15, 209, 193, 123, 2, 41, 7, 209, 16, 70, 3, 241, 28, ++ 1, 36, 34, 189, 232, 16, 64, 213, 247, 87, 185, 25, 185, 130, 123, 66, ++ 240, 2, 2, 130, 115, 16, 189, 240, 181, 0, 36, 133, 176, 141, 248, 15, ++ 64, 4, 105, 5, 70, 12, 89, 6, 104, 97, 136, 17, 240, 8, 1, 31, 208, ++ 13, 241, 15, 1, 0, 145, 33, 70, 50, 240, 94, 217, 7, 70, 192, 185, 157, ++ 248, 15, 48, 171, 177, 51, 104, 147, 248, 60, 48, 27, 177, 214, 248, ++ 84, 1, 254, 247, 79, 250, 33, 70, 40, 70, 52, 240, 131, 216, 33, 70, ++ 40, 70, 52, 240, 113, 217, 40, 70, 33, 70, 51, 240, 177, 217, 0, 224, ++ 15, 70, 56, 70, 5, 176, 240, 189, 112, 71, 112, 181, 3, 125, 4, 70, ++ 13, 70, 22, 70, 19, 177, 0, 104, 225, 247, 65, 252, 32, 70, 41, 70, ++ 50, 70, 189, 232, 112, 64, 53, 240, 139, 159, 0, 0, 45, 233, 240, 65, ++ 208, 248, 4, 128, 12, 36, 0, 38, 1, 39, 20, 224, 208, 248, 8, 192, 12, ++ 235, 4, 5, 92, 248, 4, 192, 140, 69, 10, 209, 213, 248, 4, 192, 148, ++ 69, 6, 209, 1, 54, 35, 177, 223, 248, 20, 192, 109, 96, 197, 248, 0, ++ 192, 1, 55, 12, 52, 71, 69, 232, 221, 48, 70, 189, 232, 240, 129, 213, ++ 209, 2, 0, 1, 117, 112, 71, 1, 41, 3, 70, 10, 208, 208, 248, 232, 32, ++ 162, 248, 216, 19, 178, 248, 218, 3, 0, 34, 128, 178, 163, 248, 44, ++ 33, 112, 71, 79, 246, 255, 112, 112, 71, 208, 248, 232, 48, 163, 248, ++ 216, 19, 163, 248, 218, 35, 112, 71, 208, 248, 232, 32, 0, 35, 162, ++ 248, 216, 51, 178, 248, 218, 35, 160, 248, 44, 49, 16, 4, 64, 244, 118, ++ 112, 64, 240, 2, 0, 112, 71, 208, 248, 232, 48, 0, 34, 163, 248, 252, ++ 19, 160, 248, 44, 33, 179, 248, 254, 3, 128, 178, 112, 71, 208, 248, ++ 232, 48, 65, 234, 2, 66, 195, 248, 252, 35, 112, 71, 0, 35, 128, 248, ++ 255, 48, 255, 35, 128, 248, 138, 49, 128, 248, 44, 50, 112, 71, 112, ++ 71, 176, 248, 246, 48, 19, 244, 64, 79, 3, 191, 219, 178, 192, 24, 144, ++ 248, 250, 3, 0, 32, 64, 178, 112, 71, 112, 71, 111, 240, 22, 0, 112, ++ 71, 111, 240, 22, 0, 112, 71, 111, 240, 22, 0, 112, 71, 111, 240, 22, ++ 0, 112, 71, 111, 240, 22, 0, 112, 71, 111, 240, 22, 0, 112, 71, 112, ++ 71, 112, 71, 144, 248, 125, 50, 112, 181, 139, 66, 4, 70, 13, 70, 22, ++ 70, 3, 208, 208, 248, 164, 48, 3, 177, 152, 71, 164, 248, 128, 98, 132, ++ 248, 125, 82, 112, 189, 112, 181, 0, 36, 78, 66, 0, 240, 15, 5, 117, ++ 27, 2, 235, 69, 5, 29, 85, 1, 52, 0, 9, 10, 44, 244, 209, 89, 122, 157, ++ 249, 16, 32, 138, 26, 90, 114, 112, 189, 7, 181, 0, 34, 1, 146, 4, 154, ++ 3, 42, 4, 217, 1, 168, 25, 70, 4, 34, 213, 247, 85, 248, 111, 240, 22, ++ 0, 14, 189, 16, 181, 189, 232, 16, 64, 255, 247, 237, 191, 7, 181, 0, ++ 34, 1, 146, 4, 154, 3, 42, 4, 217, 1, 168, 25, 70, 4, 34, 213, 247, ++ 66, 248, 111, 240, 22, 0, 14, 189, 7, 181, 0, 34, 1, 146, 4, 154, 3, ++ 42, 4, 217, 1, 168, 25, 70, 4, 34, 213, 247, 52, 248, 111, 240, 22, ++ 0, 14, 189, 7, 181, 0, 34, 1, 146, 4, 154, 3, 42, 4, 217, 1, 168, 25, ++ 70, 4, 34, 213, 247, 38, 248, 111, 240, 22, 0, 14, 189, 16, 181, 144, ++ 248, 7, 49, 138, 176, 67, 240, 1, 3, 128, 248, 7, 49, 4, 70, 0, 33, ++ 12, 34, 1, 168, 214, 243, 149, 243, 0, 33, 4, 34, 4, 168, 214, 243, ++ 144, 243, 0, 33, 1, 34, 9, 168, 214, 243, 139, 243, 0, 33, 2, 34, 8, ++ 168, 214, 243, 134, 243, 0, 33, 2, 34, 7, 168, 214, 243, 129, 243, 0, ++ 33, 2, 34, 5, 168, 214, 243, 124, 243, 6, 168, 0, 33, 2, 34, 214, 243, ++ 119, 243, 148, 248, 7, 49, 0, 32, 35, 240, 1, 3, 132, 248, 7, 49, 10, ++ 176, 16, 189, 55, 181, 0, 36, 13, 70, 12, 96, 1, 33, 9, 240, 105, 255, ++ 2, 169, 65, 248, 4, 13, 4, 34, 40, 70, 212, 247, 224, 255, 32, 70, 62, ++ 189, 115, 181, 0, 34, 1, 146, 6, 154, 5, 70, 3, 42, 12, 70, 7, 158, ++ 4, 217, 1, 168, 25, 70, 4, 34, 212, 247, 208, 255, 64, 242, 21, 51, ++ 156, 66, 94, 208, 49, 216, 64, 242, 214, 35, 156, 66, 84, 208, 21, 216, ++ 64, 242, 181, 35, 156, 66, 0, 240, 150, 128, 4, 216, 180, 245, 45, 127, ++ 64, 240, 174, 128, 138, 224, 64, 242, 182, 35, 156, 66, 0, 240, 146, ++ 128, 64, 242, 183, 35, 156, 66, 64, 240, 163, 128, 143, 224, 180, 245, ++ 66, 127, 0, 240, 148, 128, 8, 216, 180, 245, 64, 127, 62, 208, 64, 242, ++ 6, 51, 156, 66, 64, 240, 149, 128, 137, 224, 64, 242, 9, 51, 156, 66, ++ 52, 208, 180, 245, 69, 127, 64, 240, 140, 128, 49, 224, 64, 242, 26, ++ 51, 156, 66, 84, 208, 12, 216, 64, 242, 23, 51, 156, 66, 43, 208, 48, ++ 211, 180, 245, 70, 127, 64, 208, 64, 242, 25, 51, 156, 66, 121, 209, ++ 53, 224, 64, 242, 29, 51, 156, 66, 41, 208, 7, 216, 64, 242, 27, 51, ++ 156, 66, 55, 208, 180, 245, 71, 127, 108, 209, 37, 224, 180, 245, 72, ++ 127, 65, 208, 64, 242, 33, 51, 156, 66, 100, 209, 54, 224, 40, 70, 49, ++ 70, 255, 247, 128, 255, 99, 224, 189, 248, 4, 48, 165, 248, 48, 51, ++ 0, 32, 93, 224, 181, 249, 48, 51, 65, 224, 213, 248, 228, 48, 1, 154, ++ 131, 248, 130, 40, 244, 231, 213, 248, 228, 48, 147, 248, 130, 56, 54, ++ 224, 189, 248, 4, 48, 165, 248, 50, 51, 234, 231, 181, 249, 50, 51, ++ 46, 224, 213, 248, 228, 48, 1, 154, 131, 248, 131, 40, 225, 231, 213, ++ 248, 228, 48, 147, 248, 131, 56, 35, 224, 213, 248, 228, 48, 1, 154, ++ 131, 248, 132, 40, 214, 231, 213, 248, 228, 48, 147, 248, 132, 56, 24, ++ 224, 213, 248, 228, 48, 1, 154, 131, 248, 134, 40, 203, 231, 213, 248, ++ 228, 48, 147, 248, 134, 56, 13, 224, 40, 70, 1, 153, 50, 70, 0, 35, ++ 3, 224, 1, 153, 40, 70, 50, 70, 1, 35, 255, 247, 141, 254, 186, 231, ++ 181, 248, 102, 50, 51, 96, 182, 231, 1, 155, 90, 30, 178, 245, 250, ++ 111, 15, 210, 165, 248, 102, 50, 174, 231, 0, 36, 2, 169, 65, 248, 4, ++ 77, 48, 70, 4, 34, 212, 247, 16, 255, 32, 70, 4, 224, 111, 240, 22, ++ 0, 1, 224, 111, 240, 28, 0, 124, 189, 56, 181, 208, 248, 148, 52, 4, ++ 70, 147, 248, 154, 33, 18, 177, 211, 248, 172, 33, 106, 185, 163, 107, ++ 79, 244, 135, 113, 24, 105, 9, 240, 192, 255, 212, 248, 148, 52, 211, ++ 248, 112, 34, 195, 248, 112, 2, 130, 26, 13, 224, 0, 34, 131, 248, 154, ++ 33, 208, 248, 148, 52, 79, 244, 122, 113, 211, 248, 156, 33, 211, 248, ++ 172, 49, 74, 67, 178, 251, 243, 242, 0, 42, 31, 219, 212, 248, 148, ++ 52, 211, 248, 136, 18, 179, 248, 116, 82, 1, 245, 156, 112, 3, 235, ++ 64, 0, 196, 136, 194, 128, 44, 27, 164, 24, 164, 178, 179, 248, 108, ++ 82, 74, 28, 163, 248, 116, 66, 228, 8, 7, 42, 163, 248, 110, 82, 163, ++ 248, 108, 66, 195, 248, 136, 34, 2, 221, 0, 34, 195, 248, 136, 34, 56, ++ 189, 16, 181, 4, 70, 255, 247, 179, 255, 163, 107, 218, 110, 4, 42, ++ 7, 209, 147, 248, 44, 49, 35, 177, 32, 70, 189, 232, 16, 64, 7, 240, ++ 23, 185, 16, 189, 16, 181, 144, 248, 38, 49, 4, 70, 83, 177, 176, 249, ++ 60, 49, 1, 51, 6, 209, 131, 107, 50, 33, 24, 105, 9, 240, 104, 255, ++ 164, 248, 62, 1, 1, 32, 16, 189, 56, 181, 4, 70, 13, 70, 82, 177, 0, ++ 35, 192, 248, 84, 49, 160, 248, 88, 49, 6, 240, 208, 251, 16, 177, 32, ++ 70, 6, 240, 18, 252, 32, 70, 41, 70, 6, 240, 200, 251, 48, 177, 32, ++ 70, 41, 70, 6, 240, 221, 251, 196, 248, 144, 81, 1, 32, 56, 189, 8, ++ 181, 9, 240, 97, 254, 0, 32, 8, 189, 16, 181, 4, 70, 180, 248, 246, ++ 16, 0, 34, 208, 248, 156, 4, 10, 240, 126, 254, 180, 248, 246, 16, 132, ++ 248, 34, 1, 0, 34, 212, 248, 156, 4, 10, 240, 144, 254, 0, 35, 132, ++ 248, 58, 49, 163, 108, 132, 248, 35, 1, 132, 248, 53, 1, 11, 177, 32, ++ 70, 152, 71, 16, 189, 112, 181, 8, 70, 134, 176, 25, 70, 29, 70, 1, ++ 36, 10, 240, 234, 252, 0, 33, 11, 70, 3, 174, 40, 70, 34, 70, 0, 148, ++ 1, 150, 10, 240, 245, 251, 157, 249, 20, 48, 128, 51, 13, 209, 157, ++ 248, 19, 48, 0, 33, 141, 248, 20, 48, 141, 248, 21, 48, 40, 70, 34, ++ 70, 11, 70, 141, 232, 80, 0, 10, 240, 66, 252, 6, 176, 112, 189, 4, ++ 75, 27, 120, 1, 43, 2, 209, 0, 32, 0, 112, 112, 71, 39, 240, 119, 191, ++ 0, 191, 52, 7, 0, 0, 16, 181, 20, 70, 255, 247, 240, 255, 40, 177, 0, ++ 33, 10, 70, 189, 232, 16, 64, 219, 247, 239, 189, 32, 70, 16, 189, 0, ++ 34, 255, 247, 240, 191, 45, 233, 240, 65, 5, 70, 12, 70, 23, 70, 30, ++ 70, 255, 247, 220, 255, 56, 177, 40, 70, 33, 70, 58, 70, 51, 70, 189, ++ 232, 240, 65, 39, 240, 139, 191, 48, 70, 189, 232, 240, 129, 0, 35, ++ 255, 247, 233, 191, 144, 248, 116, 51, 1, 51, 219, 178, 1, 43, 128, ++ 248, 116, 51, 3, 216, 131, 107, 24, 105, 9, 240, 221, 190, 112, 71, ++ 144, 248, 116, 51, 1, 59, 219, 178, 128, 248, 116, 51, 27, 185, 131, ++ 107, 24, 105, 9, 240, 213, 190, 112, 71, 240, 181, 31, 70, 147, 176, ++ 0, 35, 17, 147, 24, 155, 4, 70, 3, 43, 13, 70, 25, 158, 4, 217, 17, ++ 168, 57, 70, 4, 34, 212, 247, 220, 253, 64, 242, 238, 35, 157, 66, 24, ++ 208, 3, 216, 181, 245, 28, 127, 57, 209, 8, 224, 64, 242, 234, 51, 157, ++ 66, 45, 208, 64, 242, 2, 67, 157, 66, 48, 209, 43, 224, 32, 70, 255, ++ 247, 194, 255, 32, 70, 49, 70, 255, 247, 42, 253, 32, 70, 255, 247, ++ 200, 255, 39, 224, 64, 34, 1, 168, 57, 70, 212, 247, 186, 253, 189, ++ 248, 4, 48, 189, 248, 6, 0, 189, 248, 8, 32, 12, 43, 51, 128, 112, 128, ++ 178, 128, 2, 208, 15, 35, 51, 128, 20, 224, 152, 185, 180, 248, 38, ++ 36, 242, 128, 180, 248, 34, 52, 51, 129, 180, 248, 36, 68, 116, 129, ++ 10, 224, 0, 32, 48, 96, 7, 224, 163, 107, 91, 107, 51, 96, 2, 224, 111, ++ 240, 22, 0, 0, 224, 0, 32, 19, 176, 240, 189, 112, 181, 5, 70, 12, 70, ++ 22, 70, 255, 247, 166, 252, 33, 70, 0, 234, 6, 2, 40, 70, 189, 232, ++ 112, 64, 255, 247, 175, 188, 112, 181, 5, 70, 12, 70, 22, 70, 255, 247, ++ 152, 252, 64, 234, 6, 2, 33, 70, 40, 70, 146, 178, 189, 232, 112, 64, ++ 255, 247, 160, 188, 248, 181, 5, 70, 12, 70, 22, 70, 31, 70, 255, 247, ++ 136, 252, 32, 234, 6, 2, 62, 64, 50, 67, 40, 70, 33, 70, 146, 178, 189, ++ 232, 248, 64, 255, 247, 142, 188, 0, 35, 160, 248, 44, 49, 208, 248, ++ 232, 48, 179, 248, 254, 3, 128, 178, 112, 71, 208, 248, 232, 48, 163, ++ 248, 254, 19, 112, 71, 208, 248, 232, 48, 163, 248, 252, 19, 179, 248, ++ 254, 19, 10, 64, 163, 248, 254, 35, 0, 35, 160, 248, 44, 49, 112, 71, ++ 208, 248, 232, 48, 163, 248, 252, 19, 179, 248, 254, 19, 137, 178, 10, ++ 67, 163, 248, 254, 35, 0, 35, 160, 248, 44, 49, 112, 71, 16, 181, 208, ++ 248, 232, 64, 19, 64, 164, 248, 252, 19, 180, 248, 254, 19, 137, 178, ++ 33, 234, 2, 2, 26, 67, 0, 35, 164, 248, 254, 35, 160, 248, 44, 49, 16, ++ 189, 112, 181, 11, 70, 5, 70, 82, 224, 28, 70, 86, 30, 52, 248, 2, 43, ++ 209, 4, 2, 244, 96, 66, 201, 12, 178, 245, 192, 79, 60, 208, 7, 216, ++ 178, 245, 0, 95, 46, 208, 178, 245, 128, 79, 33, 208, 122, 177, 60, ++ 224, 178, 245, 32, 79, 43, 208, 3, 216, 178, 245, 0, 79, 53, 209, 14, ++ 224, 178, 245, 64, 79, 25, 208, 178, 245, 96, 79, 46, 209, 41, 224, ++ 28, 70, 90, 136, 40, 70, 52, 248, 4, 63, 255, 247, 192, 255, 6, 224, ++ 28, 70, 90, 136, 40, 70, 52, 248, 4, 63, 255, 247, 125, 255, 1, 62, ++ 28, 224, 40, 70, 90, 136, 255, 247, 56, 252, 23, 224, 40, 70, 90, 136, ++ 255, 247, 18, 252, 18, 224, 40, 70, 90, 136, 255, 247, 141, 255, 13, ++ 224, 40, 70, 90, 136, 255, 247, 75, 255, 8, 224, 40, 70, 90, 136, 255, ++ 247, 144, 255, 3, 224, 40, 70, 90, 136, 255, 247, 79, 255, 163, 28, ++ 114, 30, 0, 42, 170, 220, 112, 189, 208, 248, 180, 48, 16, 181, 11, ++ 177, 152, 71, 16, 189, 208, 248, 232, 32, 1, 185, 244, 35, 162, 248, ++ 230, 51, 16, 189, 1, 35, 128, 248, 253, 48, 112, 71, 128, 248, 48, 17, ++ 112, 71, 144, 249, 48, 1, 112, 71, 112, 71, 16, 177, 131, 107, 3, 177, ++ 89, 119, 112, 71, 16, 177, 131, 107, 3, 177, 25, 119, 112, 71, 144, ++ 248, 255, 32, 16, 181, 4, 70, 0, 42, 111, 209, 208, 248, 148, 52, 100, ++ 33, 163, 248, 108, 18, 163, 248, 110, 18, 79, 244, 72, 113, 163, 248, ++ 116, 18, 100, 33, 163, 248, 118, 18, 163, 248, 120, 18, 163, 248, 122, ++ 18, 163, 248, 124, 18, 163, 248, 126, 18, 163, 248, 128, 18, 163, 248, ++ 130, 18, 163, 248, 132, 18, 10, 33, 163, 248, 210, 17, 163, 248, 240, ++ 17, 163, 248, 214, 17, 163, 248, 248, 17, 163, 248, 212, 17, 163, 248, ++ 242, 17, 163, 248, 216, 17, 163, 248, 250, 17, 163, 248, 198, 17, 163, ++ 248, 196, 17, 163, 248, 200, 17, 163, 248, 202, 17, 20, 33, 163, 248, ++ 206, 17, 163, 248, 208, 17, 10, 33, 163, 248, 202, 16, 163, 248, 204, ++ 16, 80, 33, 163, 248, 206, 16, 10, 33, 195, 248, 112, 34, 163, 248, ++ 204, 33, 163, 248, 228, 32, 163, 248, 230, 32, 163, 248, 230, 17, 163, ++ 248, 228, 17, 163, 248, 232, 17, 163, 248, 234, 17, 131, 248, 154, 33, ++ 20, 33, 163, 248, 236, 17, 163, 248, 238, 17, 195, 248, 244, 33, 195, ++ 248, 252, 33, 208, 248, 148, 52, 195, 248, 156, 33, 195, 248, 160, 33, ++ 195, 248, 164, 33, 195, 248, 168, 33, 195, 248, 172, 33, 3, 108, 3, ++ 177, 152, 71, 1, 35, 132, 248, 255, 48, 16, 189, 208, 248, 36, 19, 8, ++ 181, 65, 177, 131, 107, 24, 105, 9, 240, 241, 252, 208, 241, 1, 0, 56, ++ 191, 0, 32, 8, 189, 8, 70, 8, 189, 45, 233, 240, 79, 133, 176, 30, 70, ++ 189, 248, 56, 48, 13, 70, 2, 147, 189, 248, 60, 48, 209, 248, 12, 144, ++ 3, 147, 189, 248, 64, 48, 15, 104, 4, 70, 209, 248, 16, 128, 17, 70, ++ 42, 137, 1, 147, 255, 247, 90, 251, 49, 70, 32, 70, 31, 250, 137, 242, ++ 255, 247, 84, 251, 43, 70, 186, 70, 0, 38, 61, 70, 155, 70, 93, 224, ++ 184, 241, 32, 15, 64, 208, 6, 216, 184, 241, 8, 15, 77, 208, 184, 241, ++ 16, 15, 79, 209, 68, 224, 184, 241, 60, 15, 6, 208, 184, 241, 64, 15, ++ 3, 208, 184, 241, 48, 15, 69, 209, 25, 224, 218, 248, 0, 144, 32, 70, ++ 31, 250, 137, 242, 2, 153, 255, 247, 49, 251, 32, 70, 79, 234, 25, 65, ++ 255, 247, 134, 254, 218, 248, 4, 144, 32, 70, 31, 250, 137, 241, 255, ++ 247, 127, 254, 32, 70, 79, 234, 25, 65, 255, 247, 122, 254, 42, 224, ++ 79, 240, 0, 9, 32, 70, 185, 241, 0, 15, 4, 209, 2, 153, 42, 136, 255, ++ 247, 21, 251, 3, 224, 53, 248, 25, 16, 255, 247, 106, 254, 9, 241, 1, ++ 9, 185, 241, 3, 15, 237, 209, 21, 224, 87, 248, 38, 32, 32, 70, 3, 153, ++ 18, 12, 255, 247, 3, 251, 32, 70, 1, 153, 55, 248, 38, 32, 7, 224, 32, ++ 70, 1, 153, 55, 248, 22, 32, 2, 224, 1, 153, 186, 93, 32, 70, 255, 247, ++ 244, 250, 1, 54, 10, 241, 8, 10, 6, 53, 219, 248, 4, 48, 158, 66, 157, ++ 211, 5, 176, 189, 232, 240, 143, 45, 233, 240, 79, 133, 176, 152, 70, ++ 189, 248, 56, 48, 209, 248, 12, 144, 2, 147, 189, 248, 60, 48, 13, 70, ++ 3, 147, 189, 248, 64, 48, 14, 104, 4, 70, 15, 105, 17, 70, 42, 137, ++ 1, 147, 255, 247, 210, 250, 65, 70, 32, 70, 31, 250, 137, 242, 255, ++ 247, 204, 250, 179, 70, 178, 70, 79, 240, 0, 8, 95, 224, 32, 47, 58, ++ 208, 4, 216, 8, 47, 78, 208, 16, 47, 82, 209, 68, 224, 60, 47, 4, 208, ++ 64, 47, 2, 208, 48, 47, 75, 209, 23, 224, 2, 153, 32, 70, 255, 247, ++ 169, 250, 129, 70, 32, 70, 255, 247, 1, 254, 73, 234, 0, 64, 203, 248, ++ 0, 0, 32, 70, 255, 247, 250, 253, 129, 70, 32, 70, 255, 247, 246, 253, ++ 73, 234, 0, 64, 203, 248, 4, 0, 50, 224, 79, 240, 0, 9, 32, 70, 185, ++ 241, 0, 15, 5, 209, 2, 153, 255, 247, 140, 250, 170, 248, 0, 0, 3, 224, ++ 255, 247, 227, 253, 42, 248, 25, 0, 9, 241, 1, 9, 185, 241, 3, 15, 236, ++ 209, 28, 224, 1, 153, 32, 70, 255, 247, 123, 250, 3, 153, 129, 70, 70, ++ 248, 40, 0, 32, 70, 255, 247, 116, 250, 73, 234, 0, 64, 70, 248, 40, ++ 0, 12, 224, 32, 70, 1, 153, 255, 247, 107, 250, 38, 248, 24, 0, 5, 224, ++ 32, 70, 1, 153, 255, 247, 100, 250, 6, 248, 8, 0, 8, 241, 1, 8, 11, ++ 241, 8, 11, 10, 241, 6, 10, 107, 104, 152, 69, 156, 211, 5, 176, 189, ++ 232, 240, 143, 127, 181, 2, 147, 8, 155, 3, 145, 5, 147, 9, 155, 1, ++ 146, 4, 147, 1, 169, 10, 155, 152, 71, 7, 176, 0, 189, 127, 181, 2, ++ 147, 8, 155, 3, 145, 5, 147, 9, 155, 1, 146, 4, 147, 1, 169, 10, 155, ++ 152, 71, 7, 176, 0, 189, 0, 0, 240, 181, 65, 75, 139, 176, 208, 248, ++ 232, 64, 7, 70, 13, 70, 106, 70, 3, 241, 16, 14, 24, 104, 89, 104, 22, ++ 70, 3, 198, 8, 51, 115, 69, 50, 70, 247, 209, 24, 104, 57, 75, 48, 96, ++ 5, 170, 3, 241, 16, 14, 24, 104, 89, 104, 22, 70, 3, 198, 8, 51, 115, ++ 69, 50, 70, 247, 209, 24, 104, 0, 35, 48, 96, 164, 248, 112, 53, 13, ++ 177, 107, 70, 0, 224, 5, 171, 186, 107, 0, 33, 16, 105, 20, 34, 9, 240, ++ 185, 251, 0, 35, 164, 248, 104, 53, 0, 45, 79, 244, 128, 115, 164, 248, ++ 192, 55, 12, 191, 64, 35, 65, 35, 164, 248, 12, 53, 65, 246, 2, 35, ++ 164, 248, 20, 53, 79, 240, 0, 3, 164, 248, 8, 53, 164, 248, 10, 53, ++ 164, 248, 76, 53, 79, 240, 20, 3, 164, 248, 106, 53, 64, 246, 38, 3, ++ 164, 248, 104, 53, 79, 240, 0, 3, 164, 248, 0, 53, 79, 240, 208, 3, ++ 164, 248, 2, 53, 12, 191, 250, 38, 30, 38, 180, 248, 2, 53, 0, 37, 2, ++ 224, 10, 32, 218, 243, 136, 241, 181, 66, 9, 218, 180, 248, 14, 53, ++ 1, 53, 24, 6, 245, 212, 3, 224, 10, 32, 218, 243, 125, 241, 0, 224, ++ 11, 37, 1, 61, 8, 208, 180, 248, 14, 53, 89, 5, 244, 213, 3, 224, 10, ++ 32, 218, 243, 113, 241, 1, 224, 64, 242, 245, 21, 1, 61, 3, 208, 180, ++ 248, 144, 54, 218, 5, 243, 212, 11, 176, 240, 189, 116, 21, 4, 0, 136, ++ 21, 4, 0, 11, 70, 208, 248, 20, 17, 10, 177, 25, 67, 1, 224, 33, 234, ++ 3, 1, 155, 7, 192, 248, 20, 17, 2, 213, 17, 70, 255, 247, 191, 185, ++ 112, 71, 208, 248, 20, 1, 192, 243, 0, 16, 112, 71, 16, 181, 208, 248, ++ 20, 49, 33, 177, 67, 240, 16, 3, 192, 248, 20, 49, 16, 189, 35, 240, ++ 16, 3, 210, 7, 192, 248, 20, 49, 10, 213, 131, 107, 208, 248, 48, 66, ++ 26, 106, 155, 110, 154, 66, 136, 191, 195, 235, 2, 1, 196, 248, 128, ++ 16, 16, 189, 131, 107, 16, 181, 88, 33, 4, 70, 71, 246, 127, 114, 24, ++ 105, 9, 240, 0, 251, 163, 107, 90, 33, 24, 105, 71, 246, 127, 114, 9, ++ 240, 249, 250, 163, 107, 112, 33, 24, 105, 71, 246, 127, 114, 9, 240, ++ 242, 250, 163, 107, 114, 33, 24, 105, 71, 246, 127, 114, 9, 240, 235, ++ 250, 0, 32, 16, 189, 56, 181, 208, 248, 232, 48, 4, 70, 211, 248, 32, ++ 49, 208, 248, 20, 49, 128, 107, 64, 246, 2, 2, 13, 70, 26, 64, 0, 105, ++ 9, 177, 180, 248, 246, 16, 0, 50, 195, 243, 128, 3, 24, 191, 1, 34, ++ 9, 240, 1, 251, 212, 248, 176, 48, 19, 177, 32, 70, 41, 70, 152, 71, ++ 56, 189, 160, 248, 250, 16, 112, 71, 131, 107, 202, 178, 1, 244, 96, ++ 81, 177, 245, 192, 95, 24, 105, 8, 191, 66, 244, 0, 114, 160, 33, 9, ++ 240, 186, 186, 160, 248, 246, 16, 112, 71, 176, 248, 246, 0, 112, 71, ++ 112, 71, 64, 246, 195, 19, 152, 66, 140, 191, 79, 240, 255, 48, 0, 32, ++ 112, 71, 112, 71, 0, 0, 16, 181, 0, 35, 6, 74, 153, 0, 50, 248, 35, ++ 64, 132, 66, 2, 209, 82, 24, 80, 136, 16, 189, 1, 51, 14, 43, 243, 209, ++ 0, 32, 16, 189, 176, 62, 4, 0, 8, 181, 200, 178, 255, 247, 234, 255, ++ 189, 232, 8, 64, 255, 247, 220, 191, 248, 181, 6, 70, 13, 70, 16, 70, ++ 20, 70, 0, 33, 28, 34, 213, 243, 65, 245, 0, 39, 13, 75, 249, 90, 150, ++ 248, 136, 50, 35, 177, 148, 41, 2, 217, 165, 41, 14, 217, 1, 224, 144, ++ 41, 11, 208, 2, 45, 2, 209, 14, 41, 4, 217, 6, 224, 1, 45, 4, 209, 14, ++ 41, 2, 217, 32, 70, 214, 243, 242, 246, 4, 55, 56, 47, 228, 209, 248, ++ 189, 176, 62, 4, 0, 48, 181, 144, 248, 136, 66, 0, 34, 14, 75, 211, ++ 90, 67, 244, 128, 80, 14, 43, 140, 191, 79, 244, 64, 69, 0, 37, 40, ++ 67, 28, 177, 148, 43, 1, 217, 165, 43, 8, 217, 2, 41, 2, 209, 14, 43, ++ 4, 216, 48, 189, 1, 41, 1, 209, 14, 43, 3, 216, 4, 50, 56, 42, 228, ++ 209, 255, 32, 48, 189, 0, 191, 176, 62, 4, 0, 16, 181, 144, 248, 31, ++ 49, 11, 112, 144, 248, 54, 49, 51, 177, 144, 248, 58, 65, 144, 248, ++ 53, 49, 4, 177, 91, 66, 11, 112, 18, 177, 144, 248, 56, 49, 19, 112, ++ 0, 32, 16, 189, 48, 181, 20, 70, 26, 70, 157, 248, 12, 48, 80, 177, ++ 28, 177, 144, 248, 11, 84, 173, 0, 37, 112, 34, 177, 201, 178, 189, ++ 232, 48, 64, 8, 240, 230, 188, 48, 189, 45, 233, 240, 79, 146, 70, 130, ++ 107, 13, 70, 82, 108, 64, 242, 57, 81, 0, 35, 135, 176, 138, 66, 4, ++ 70, 141, 248, 23, 48, 3, 208, 64, 242, 139, 81, 138, 66, 8, 209, 180, ++ 248, 246, 48, 3, 244, 64, 67, 163, 245, 64, 65, 75, 66, 67, 235, 1, ++ 3, 212, 248, 136, 36, 3, 147, 90, 177, 212, 248, 156, 4, 1, 33, 10, ++ 240, 32, 249, 40, 185, 163, 107, 212, 248, 136, 20, 152, 104, 9, 240, ++ 129, 254, 148, 248, 56, 49, 131, 185, 212, 248, 156, 4, 180, 248, 246, ++ 16, 1, 34, 10, 240, 194, 248, 196, 248, 136, 4, 48, 177, 186, 241, 0, ++ 15, 3, 209, 32, 70, 255, 247, 158, 250, 59, 225, 180, 248, 246, 16, ++ 0, 35, 196, 248, 136, 52, 1, 244, 96, 81, 163, 107, 177, 245, 0, 95, ++ 152, 104, 5, 208, 161, 245, 192, 82, 81, 66, 65, 235, 2, 1, 0, 224, ++ 2, 33, 9, 240, 74, 254, 6, 70, 0, 40, 0, 240, 35, 129, 53, 177, 32, ++ 70, 41, 70, 180, 248, 246, 32, 51, 70, 255, 247, 154, 250, 180, 248, ++ 246, 144, 72, 70, 214, 243, 236, 246, 9, 244, 96, 87, 163, 107, 183, ++ 245, 0, 95, 152, 104, 5, 208, 167, 245, 192, 83, 89, 66, 65, 235, 3, ++ 1, 0, 224, 2, 33, 9, 240, 41, 254, 163, 107, 5, 70, 16, 185, 152, 104, ++ 49, 70, 23, 224, 183, 245, 0, 95, 152, 104, 6, 208, 167, 245, 192, 88, ++ 216, 241, 0, 1, 65, 235, 8, 1, 0, 224, 2, 33, 9, 240, 21, 254, 128, ++ 70, 80, 185, 163, 107, 49, 70, 152, 104, 9, 240, 28, 254, 163, 107, ++ 41, 70, 152, 104, 9, 240, 23, 254, 228, 224, 212, 248, 136, 4, 184, ++ 177, 9, 240, 45, 254, 183, 245, 0, 95, 6, 208, 167, 245, 192, 92, 220, ++ 241, 0, 3, 67, 235, 12, 3, 0, 224, 2, 35, 152, 66, 8, 208, 163, 107, ++ 212, 248, 136, 20, 152, 104, 9, 240, 254, 253, 0, 35, 196, 248, 136, ++ 52, 212, 248, 136, 52, 251, 185, 163, 107, 183, 245, 0, 95, 152, 104, ++ 6, 208, 167, 245, 192, 94, 222, 241, 0, 1, 65, 235, 14, 1, 0, 224, 2, ++ 33, 9, 240, 219, 253, 196, 248, 136, 4, 104, 185, 163, 107, 49, 70, ++ 152, 104, 9, 240, 225, 253, 163, 107, 41, 70, 152, 104, 9, 240, 220, ++ 253, 163, 107, 65, 70, 152, 104, 190, 231, 212, 248, 136, 4, 9, 240, ++ 165, 253, 32, 70, 254, 247, 215, 255, 40, 70, 148, 249, 31, 17, 9, 240, ++ 254, 254, 0, 35, 13, 241, 23, 2, 0, 147, 32, 70, 67, 70, 73, 70, 255, ++ 247, 4, 255, 64, 70, 49, 70, 9, 240, 167, 255, 64, 70, 148, 249, 9, ++ 20, 9, 240, 120, 255, 65, 70, 40, 70, 9, 240, 158, 255, 148, 248, 252, ++ 16, 99, 41, 2, 216, 40, 70, 9, 240, 129, 255, 40, 70, 9, 240, 156, 254, ++ 40, 70, 9, 240, 157, 254, 148, 248, 11, 52, 7, 70, 155, 0, 152, 66, ++ 111, 240, 127, 1, 40, 70, 184, 191, 223, 178, 9, 240, 164, 254, 255, ++ 178, 95, 250, 128, 249, 131, 70, 132, 248, 34, 113, 132, 248, 35, 145, ++ 212, 248, 156, 4, 180, 248, 246, 16, 10, 240, 134, 248, 1, 40, 15, 209, ++ 180, 248, 246, 16, 0, 34, 75, 70, 212, 248, 156, 4, 10, 240, 98, 248, ++ 212, 248, 156, 4, 180, 248, 246, 16, 0, 34, 59, 70, 10, 240, 63, 248, ++ 0, 35, 132, 248, 53, 177, 132, 248, 58, 49, 132, 248, 36, 49, 186, 241, ++ 0, 15, 3, 208, 40, 70, 81, 70, 9, 240, 175, 254, 148, 248, 38, 49, 40, ++ 70, 11, 177, 3, 155, 35, 177, 148, 249, 34, 17, 9, 240, 15, 255, 3, ++ 224, 148, 249, 35, 17, 9, 240, 30, 255, 212, 248, 136, 4, 41, 70, 9, ++ 240, 93, 255, 212, 248, 156, 4, 180, 248, 246, 16, 10, 240, 76, 248, ++ 1, 40, 3, 70, 10, 209, 212, 248, 136, 4, 161, 107, 0, 144, 136, 104, ++ 180, 248, 246, 32, 212, 248, 156, 20, 9, 240, 178, 255, 163, 107, 49, ++ 70, 152, 104, 9, 240, 66, 253, 163, 107, 41, 70, 152, 104, 9, 240, 61, ++ 253, 163, 107, 65, 70, 152, 104, 9, 240, 56, 253, 186, 241, 0, 15, 3, ++ 209, 163, 108, 11, 177, 32, 70, 152, 71, 7, 176, 189, 232, 240, 143, ++ 112, 181, 130, 107, 30, 70, 0, 35, 128, 248, 31, 17, 128, 248, 56, 49, ++ 19, 127, 4, 70, 243, 177, 208, 248, 20, 17, 64, 246, 2, 3, 11, 64, 195, ++ 185, 208, 248, 232, 48, 211, 248, 32, 49, 3, 240, 1, 3, 131, 240, 1, ++ 5, 19, 177, 16, 105, 9, 240, 141, 248, 32, 70, 49, 70, 0, 34, 255, 247, ++ 95, 254, 32, 70, 255, 247, 6, 249, 29, 185, 163, 107, 24, 105, 9, 240, ++ 131, 248, 0, 32, 112, 189, 144, 248, 35, 1, 127, 40, 40, 191, 127, 32, ++ 112, 71, 144, 248, 34, 1, 0, 40, 56, 191, 0, 32, 112, 71, 128, 248, ++ 252, 16, 112, 71, 56, 181, 131, 107, 4, 70, 13, 70, 24, 105, 9, 240, ++ 104, 248, 32, 70, 41, 70, 0, 34, 255, 247, 58, 254, 32, 70, 255, 247, ++ 225, 248, 163, 107, 24, 105, 189, 232, 56, 64, 9, 240, 93, 184, 128, ++ 248, 245, 16, 112, 71, 112, 71, 248, 181, 31, 70, 0, 35, 59, 112, 144, ++ 248, 38, 49, 4, 70, 13, 70, 22, 70, 131, 177, 131, 107, 27, 127, 107, ++ 177, 255, 247, 113, 249, 32, 70, 41, 70, 58, 70, 8, 240, 207, 250, 43, ++ 120, 32, 70, 51, 112, 189, 232, 248, 64, 255, 247, 114, 185, 248, 189, ++ 1, 35, 240, 181, 19, 114, 19, 104, 21, 70, 67, 240, 8, 2, 42, 96, 176, ++ 249, 60, 33, 133, 176, 1, 50, 4, 191, 67, 240, 9, 3, 43, 96, 144, 248, ++ 38, 49, 4, 70, 15, 70, 27, 177, 43, 104, 67, 240, 2, 3, 43, 96, 180, ++ 248, 246, 16, 163, 107, 1, 244, 96, 81, 177, 245, 0, 95, 152, 104, 5, ++ 208, 161, 245, 192, 86, 113, 66, 65, 235, 6, 1, 0, 224, 2, 33, 9, 240, ++ 133, 252, 6, 70, 144, 177, 0, 35, 180, 248, 246, 16, 0, 147, 32, 70, ++ 51, 70, 13, 241, 15, 2, 255, 247, 200, 253, 48, 70, 169, 106, 9, 240, ++ 195, 253, 163, 107, 49, 70, 152, 104, 9, 240, 126, 252, 32, 70, 57, ++ 70, 234, 106, 255, 247, 204, 253, 148, 248, 36, 49, 32, 70, 107, 114, ++ 5, 241, 10, 1, 5, 241, 18, 3, 5, 241, 14, 2, 255, 247, 147, 255, 148, ++ 248, 38, 49, 227, 177, 163, 107, 27, 127, 203, 177, 32, 70, 255, 247, ++ 10, 249, 148, 248, 34, 49, 235, 116, 148, 248, 34, 49, 43, 117, 212, ++ 248, 156, 48, 51, 177, 32, 70, 152, 71, 24, 177, 43, 104, 67, 240, 3, ++ 3, 2, 224, 43, 104, 35, 240, 3, 3, 43, 96, 32, 70, 255, 247, 0, 249, ++ 5, 176, 240, 189, 131, 107, 91, 127, 11, 177, 8, 240, 143, 190, 24, ++ 70, 112, 71, 131, 107, 91, 127, 11, 177, 8, 240, 184, 190, 24, 70, 112, ++ 71, 131, 107, 1, 32, 147, 248, 134, 48, 11, 112, 112, 71, 131, 107, ++ 131, 248, 134, 16, 112, 71, 112, 181, 144, 248, 254, 80, 4, 70, 14, ++ 70, 0, 45, 116, 209, 1, 35, 128, 248, 254, 48, 255, 247, 221, 252, 132, ++ 248, 7, 81, 32, 70, 49, 70, 255, 247, 202, 252, 212, 248, 232, 48, 211, ++ 248, 32, 49, 212, 248, 20, 49, 196, 248, 144, 81, 154, 7, 11, 212, 212, ++ 248, 148, 36, 210, 248, 40, 40, 50, 177, 146, 248, 74, 32, 26, 185, ++ 67, 240, 32, 3, 196, 248, 20, 49, 229, 107, 0, 45, 80, 208, 1, 33, 32, ++ 70, 255, 247, 223, 249, 180, 248, 246, 16, 180, 248, 250, 48, 1, 244, ++ 96, 81, 153, 66, 3, 208, 163, 107, 24, 105, 8, 240, 122, 255, 1, 33, ++ 132, 248, 41, 19, 32, 70, 255, 247, 121, 252, 163, 107, 147, 248, 132, ++ 32, 1, 42, 180, 248, 246, 32, 10, 209, 18, 244, 64, 79, 1, 209, 218, ++ 111, 10, 224, 211, 248, 128, 32, 1, 42, 136, 191, 0, 34, 4, 224, 18, ++ 244, 64, 79, 12, 191, 26, 111, 154, 111, 218, 102, 217, 110, 0, 34, ++ 32, 70, 254, 247, 228, 255, 32, 70, 168, 71, 0, 37, 163, 107, 132, 248, ++ 253, 80, 147, 248, 134, 16, 32, 70, 255, 247, 147, 255, 163, 107, 132, ++ 248, 254, 80, 24, 105, 146, 33, 8, 240, 54, 255, 148, 248, 160, 58, ++ 64, 0, 1, 43, 164, 248, 130, 2, 4, 209, 60, 35, 164, 248, 102, 50, 196, ++ 248, 204, 83, 112, 189, 16, 181, 208, 248, 148, 52, 201, 178, 28, 120, ++ 140, 66, 5, 209, 208, 248, 228, 16, 161, 248, 118, 34, 131, 248, 180, ++ 32, 16, 189, 0, 0, 240, 181, 30, 70, 50, 75, 139, 176, 13, 70, 20, 70, ++ 1, 175, 3, 241, 16, 14, 24, 104, 89, 104, 58, 70, 3, 194, 8, 51, 115, ++ 69, 23, 70, 247, 209, 44, 75, 5, 175, 3, 241, 16, 14, 24, 104, 89, 104, ++ 58, 70, 3, 194, 8, 51, 115, 69, 23, 70, 247, 209, 0, 33, 2, 34, 9, 168, ++ 213, 243, 176, 241, 41, 104, 0, 35, 10, 70, 24, 70, 7, 224, 82, 8, 1, ++ 48, 192, 178, 2, 240, 1, 5, 0, 45, 24, 191, 3, 70, 0, 42, 245, 209, ++ 4, 43, 3, 216, 195, 241, 4, 2, 145, 64, 11, 224, 1, 32, 90, 31, 16, ++ 250, 2, 242, 81, 24, 26, 24, 144, 64, 1, 66, 24, 191, 211, 178, 26, ++ 31, 209, 64, 10, 170, 1, 240, 15, 1, 81, 24, 17, 248, 36, 44, 3, 235, ++ 67, 0, 17, 248, 20, 28, 2, 235, 128, 2, 153, 66, 140, 191, 19, 70, 83, ++ 28, 155, 178, 26, 178, 64, 246, 161, 33, 74, 67, 18, 19, 32, 50, 34, ++ 128, 17, 154, 18, 136, 194, 241, 127, 66, 2, 245, 126, 2, 2, 245, 255, ++ 50, 242, 50, 155, 24, 51, 128, 11, 176, 240, 189, 164, 21, 4, 0, 180, ++ 21, 4, 0, 128, 248, 216, 26, 112, 71, 16, 181, 144, 248, 7, 49, 0, 43, ++ 55, 208, 219, 7, 201, 178, 39, 213, 208, 248, 12, 49, 139, 66, 29, 209, ++ 144, 248, 201, 58, 83, 177, 0, 35, 132, 107, 228, 24, 1, 51, 8, 43, ++ 132, 248, 32, 33, 248, 209, 0, 35, 128, 248, 201, 58, 131, 107, 211, ++ 248, 40, 65, 27, 25, 131, 248, 32, 33, 131, 107, 211, 248, 40, 65, 7, ++ 44, 1, 208, 1, 52, 0, 224, 0, 36, 195, 248, 40, 65, 144, 248, 7, 49, ++ 35, 240, 1, 3, 128, 248, 7, 49, 144, 248, 7, 49, 19, 240, 2, 15, 7, ++ 208, 35, 240, 2, 3, 128, 248, 7, 49, 131, 107, 24, 105, 8, 240, 152, ++ 254, 0, 32, 16, 189, 56, 181, 144, 248, 7, 49, 4, 70, 0, 43, 45, 209, ++ 1, 41, 2, 208, 2, 41, 44, 209, 1, 224, 192, 248, 12, 33, 163, 107, 128, ++ 248, 7, 17, 26, 106, 148, 248, 125, 1, 196, 248, 8, 33, 160, 185, 148, ++ 248, 16, 81, 0, 45, 30, 209, 24, 105, 142, 33, 8, 240, 78, 254, 163, ++ 107, 65, 0, 137, 178, 24, 105, 116, 49, 1, 34, 8, 240, 67, 254, 32, ++ 70, 8, 240, 131, 252, 40, 70, 56, 189, 180, 248, 246, 16, 32, 70, 111, ++ 240, 94, 2, 189, 232, 56, 64, 255, 247, 141, 191, 111, 240, 24, 0, 56, ++ 189, 111, 240, 2, 0, 56, 189, 16, 181, 4, 70, 255, 247, 116, 251, 2, ++ 33, 194, 178, 32, 70, 189, 232, 16, 64, 255, 247, 187, 191, 112, 71, ++ 0, 33, 111, 240, 91, 2, 255, 247, 118, 191, 0, 35, 129, 107, 26, 70, ++ 200, 24, 144, 249, 32, 1, 1, 51, 8, 43, 2, 68, 248, 209, 0, 42, 184, ++ 191, 7, 50, 210, 8, 80, 178, 112, 71, 0, 32, 112, 71, 48, 181, 208, ++ 248, 228, 32, 205, 136, 146, 248, 41, 54, 75, 185, 131, 107, 91, 105, ++ 10, 43, 5, 217, 76, 138, 20, 244, 128, 115, 1, 209, 1, 34, 28, 224, ++ 140, 136, 235, 178, 20, 240, 3, 15, 1, 208, 157, 43, 7, 208, 133, 107, ++ 109, 105, 35, 45, 7, 209, 77, 138, 21, 240, 32, 15, 3, 208, 1, 35, 139, ++ 119, 0, 35, 10, 224, 144, 249, 208, 3, 27, 24, 224, 4, 68, 191, 146, ++ 249, 30, 38, 155, 24, 203, 119, 0, 34, 138, 119, 11, 119, 0, 35, 75, ++ 119, 48, 189, 45, 233, 240, 79, 35, 79, 143, 176, 28, 70, 5, 173, 0, ++ 35, 6, 70, 136, 70, 147, 70, 13, 147, 15, 207, 15, 197, 151, 232, 15, ++ 0, 221, 248, 96, 144, 133, 232, 15, 0, 185, 241, 3, 15, 4, 217, 13, ++ 168, 33, 70, 4, 34, 211, 247, 249, 252, 221, 248, 52, 160, 5, 173, 55, ++ 70, 25, 155, 205, 248, 0, 144, 1, 147, 26, 155, 56, 70, 2, 147, 27, ++ 155, 65, 70, 3, 147, 46, 104, 35, 70, 90, 70, 176, 71, 85, 248, 4, 63, ++ 27, 177, 16, 241, 23, 15, 235, 208, 17, 224, 16, 241, 23, 15, 14, 209, ++ 27, 155, 56, 70, 0, 147, 13, 155, 65, 70, 1, 147, 26, 241, 0, 3, 24, ++ 191, 1, 35, 2, 147, 34, 70, 25, 155, 254, 247, 69, 252, 15, 176, 189, ++ 232, 240, 143, 0, 191, 196, 21, 4, 0, 195, 105, 4, 59, 8, 43, 6, 216, ++ 223, 232, 3, 240, 24, 5, 9, 7, 9, 5, 11, 5, 13, 0, 0, 32, 112, 71, 23, ++ 32, 112, 71, 4, 32, 112, 71, 7, 32, 112, 71, 144, 248, 226, 3, 1, 40, ++ 8, 208, 3, 40, 20, 191, 79, 244, 131, 112, 79, 244, 139, 112, 112, 71, ++ 1, 32, 112, 71, 79, 244, 139, 112, 112, 71, 247, 181, 4, 70, 13, 70, ++ 22, 70, 31, 70, 59, 177, 3, 42, 5, 217, 1, 168, 25, 70, 4, 34, 211, ++ 247, 152, 252, 1, 224, 0, 35, 1, 147, 27, 45, 3, 208, 0, 47, 85, 208, ++ 0, 46, 83, 221, 211, 45, 26, 208, 4, 220, 27, 45, 15, 208, 135, 45, ++ 79, 209, 7, 224, 212, 45, 35, 208, 165, 245, 154, 117, 3, 61, 1, 45, ++ 71, 216, 79, 224, 32, 70, 255, 247, 35, 255, 56, 96, 74, 224, 163, 107, ++ 29, 127, 0, 45, 64, 209, 32, 70, 254, 247, 196, 251, 67, 224, 163, 107, ++ 219, 110, 59, 96, 212, 248, 104, 81, 21, 240, 1, 5, 59, 208, 67, 240, ++ 128, 3, 59, 96, 212, 248, 108, 33, 67, 234, 2, 19, 59, 96, 49, 224, ++ 1, 154, 0, 42, 43, 219, 4, 42, 41, 220, 163, 107, 217, 110, 145, 66, ++ 40, 208, 29, 127, 61, 179, 218, 102, 24, 105, 8, 240, 35, 253, 1, 155, ++ 35, 177, 32, 70, 0, 33, 1, 34, 254, 247, 175, 253, 163, 107, 1, 34, ++ 217, 110, 32, 70, 254, 247, 169, 253, 163, 107, 0, 40, 24, 105, 12, ++ 191, 111, 240, 2, 5, 0, 37, 8, 240, 16, 253, 12, 224, 111, 240, 1, 5, ++ 9, 224, 111, 240, 22, 5, 6, 224, 111, 240, 4, 5, 3, 224, 111, 240, 28, ++ 5, 0, 224, 0, 37, 40, 70, 254, 189, 131, 107, 19, 181, 26, 106, 4, 70, ++ 1, 50, 26, 98, 144, 248, 4, 33, 0, 42, 0, 240, 178, 128, 176, 248, 108, ++ 35, 42, 177, 208, 248, 148, 20, 161, 248, 54, 34, 161, 248, 58, 34, ++ 180, 248, 112, 35, 42, 177, 212, 248, 148, 20, 161, 248, 40, 34, 161, ++ 248, 36, 34, 180, 248, 110, 35, 42, 177, 212, 248, 148, 20, 161, 248, ++ 34, 34, 161, 248, 38, 34, 212, 248, 20, 17, 64, 246, 6, 34, 10, 64, ++ 42, 185, 147, 248, 44, 49, 19, 177, 32, 70, 254, 247, 59, 253, 163, ++ 107, 26, 106, 27, 110, 178, 251, 243, 241, 3, 251, 17, 35, 171, 185, ++ 32, 70, 254, 247, 234, 253, 212, 248, 20, 49, 64, 246, 2, 2, 161, 107, ++ 26, 64, 0, 50, 8, 105, 24, 191, 1, 34, 180, 248, 246, 16, 195, 243, ++ 128, 3, 8, 240, 212, 252, 32, 70, 254, 247, 228, 253, 212, 248, 20, ++ 33, 64, 246, 14, 35, 19, 64, 179, 185, 163, 107, 212, 248, 48, 34, 25, ++ 106, 210, 248, 144, 32, 211, 248, 24, 49, 138, 26, 154, 66, 11, 211, ++ 148, 248, 246, 32, 32, 70, 1, 33, 255, 247, 33, 254, 162, 107, 212, ++ 248, 48, 50, 18, 106, 195, 248, 144, 32, 148, 248, 7, 49, 75, 177, 163, ++ 107, 26, 106, 212, 248, 8, 49, 211, 26, 5, 43, 2, 217, 0, 35, 132, 248, ++ 7, 49, 212, 248, 152, 33, 42, 177, 163, 107, 25, 106, 27, 110, 138, ++ 26, 154, 66, 13, 211, 212, 248, 20, 33, 64, 246, 2, 3, 19, 64, 59, 185, ++ 32, 70, 254, 247, 242, 252, 24, 177, 163, 107, 27, 106, 196, 248, 152, ++ 49, 212, 248, 20, 33, 64, 246, 15, 35, 19, 64, 43, 187, 32, 70, 254, ++ 247, 13, 251, 32, 70, 254, 247, 9, 251, 212, 248, 48, 50, 211, 248, ++ 136, 32, 18, 177, 1, 58, 195, 248, 136, 32, 212, 248, 168, 48, 11, 177, ++ 32, 70, 152, 71, 163, 107, 24, 105, 8, 240, 88, 252, 104, 177, 163, ++ 107, 1, 169, 24, 105, 13, 241, 7, 2, 8, 240, 83, 252, 32, 70, 157, 248, ++ 7, 16, 189, 248, 4, 32, 254, 247, 235, 250, 0, 32, 28, 189, 3, 70, 0, ++ 33, 152, 107, 64, 24, 1, 49, 8, 41, 128, 248, 32, 33, 248, 209, 154, ++ 107, 0, 33, 194, 248, 40, 17, 209, 110, 3, 41, 7, 209, 211, 248, 104, ++ 17, 201, 7, 3, 213, 18, 106, 8, 50, 195, 248, 92, 33, 0, 34, 153, 24, ++ 2, 50, 79, 246, 164, 112, 32, 42, 161, 248, 168, 10, 247, 209, 0, 32, ++ 131, 248, 200, 10, 112, 71, 67, 11, 179, 245, 128, 95, 19, 96, 164, ++ 191, 163, 245, 0, 83, 19, 96, 192, 4, 192, 12, 176, 245, 128, 95, 8, ++ 96, 164, 191, 160, 245, 0, 80, 8, 96, 112, 71, 73, 246, 117, 51, 75, ++ 96, 0, 35, 11, 96, 79, 244, 52, 2, 152, 66, 172, 191, 1, 35, 79, 240, ++ 255, 51, 2, 251, 3, 2, 45, 233, 240, 65, 79, 240, 180, 116, 146, 251, ++ 244, 240, 4, 251, 16, 34, 33, 72, 0, 251, 3, 35, 0, 43, 5, 219, 218, ++ 19, 1, 50, 181, 42, 13, 221, 27, 24, 8, 224, 90, 66, 210, 19, 1, 50, ++ 82, 16, 82, 66, 90, 50, 4, 218, 3, 245, 52, 3, 79, 240, 255, 52, 0, ++ 224, 1, 36, 0, 32, 2, 70, 5, 70, 78, 104, 171, 66, 15, 104, 223, 248, ++ 76, 192, 70, 250, 2, 248, 9, 221, 184, 68, 23, 65, 246, 27, 78, 96, ++ 92, 248, 0, 96, 193, 248, 0, 128, 173, 25, 9, 224, 200, 235, 7, 8, 23, ++ 65, 246, 25, 78, 96, 92, 248, 0, 96, 193, 248, 0, 128, 173, 27, 1, 50, ++ 4, 48, 18, 42, 223, 209, 75, 104, 99, 67, 75, 96, 11, 104, 92, 67, 12, ++ 96, 189, 232, 240, 129, 0, 191, 0, 0, 76, 255, 104, 62, 4, 0, 247, 181, ++ 2, 171, 3, 233, 3, 0, 1, 156, 0, 155, 0, 32, 16, 96, 36, 1, 27, 1, 1, ++ 70, 0, 43, 67, 250, 1, 245, 68, 250, 1, 247, 9, 78, 6, 218, 219, 25, ++ 54, 88, 23, 104, 100, 27, 190, 27, 22, 96, 5, 224, 219, 27, 54, 88, ++ 23, 104, 100, 25, 190, 25, 22, 96, 1, 49, 4, 48, 18, 41, 231, 209, 254, ++ 189, 104, 62, 4, 0, 16, 181, 4, 70, 208, 248, 52, 2, 6, 224, 3, 104, ++ 196, 248, 52, 50, 220, 247, 69, 250, 212, 248, 52, 2, 0, 40, 246, 209, ++ 4, 245, 36, 115, 196, 248, 48, 50, 79, 246, 206, 115, 196, 248, 52, ++ 2, 164, 248, 28, 51, 196, 248, 16, 3, 196, 248, 20, 3, 16, 189, 112, ++ 71, 128, 234, 224, 115, 163, 235, 224, 115, 0, 32, 1, 224, 1, 48, 192, ++ 178, 83, 250, 0, 242, 0, 42, 249, 220, 112, 71, 16, 181, 0, 35, 2, 70, ++ 24, 70, 79, 240, 128, 65, 25, 65, 12, 24, 148, 66, 79, 234, 80, 0, 156, ++ 191, 196, 235, 2, 2, 8, 67, 2, 51, 32, 43, 241, 209, 144, 66, 56, 191, ++ 1, 48, 16, 189, 131, 107, 131, 248, 135, 16, 131, 107, 131, 248, 136, ++ 32, 131, 107, 131, 248, 137, 16, 131, 107, 131, 248, 138, 32, 112, 71, ++ 131, 107, 131, 248, 137, 16, 112, 71, 0, 72, 112, 71, 232, 62, 4, 0, ++ 16, 181, 12, 70, 1, 33, 8, 240, 217, 249, 32, 128, 1, 32, 16, 189, 6, ++ 240, 76, 189, 112, 71, 0, 32, 112, 71, 0, 35, 11, 113, 202, 128, 130, ++ 107, 24, 70, 18, 106, 193, 248, 244, 50, 138, 96, 79, 246, 206, 114, ++ 161, 248, 0, 35, 1, 34, 193, 248, 240, 50, 129, 248, 8, 35, 112, 71, ++ 208, 248, 52, 2, 3, 224, 195, 136, 139, 66, 2, 208, 0, 104, 0, 40, 249, ++ 209, 112, 71, 8, 181, 255, 247, 243, 255, 24, 177, 0, 35, 3, 113, 128, ++ 248, 8, 51, 8, 189, 112, 181, 5, 70, 14, 70, 208, 248, 52, 66, 255, ++ 247, 230, 255, 136, 185, 12, 224, 35, 121, 75, 185, 148, 248, 8, 51, ++ 51, 185, 40, 70, 33, 70, 50, 70, 255, 247, 199, 255, 2, 32, 112, 189, ++ 36, 104, 0, 44, 240, 209, 32, 70, 112, 189, 1, 32, 112, 189, 248, 181, ++ 4, 70, 14, 70, 255, 247, 223, 255, 7, 70, 96, 187, 79, 244, 67, 112, ++ 220, 247, 156, 249, 5, 70, 64, 179, 57, 70, 79, 244, 67, 114, 212, 243, ++ 123, 245, 163, 107, 238, 128, 27, 106, 171, 96, 79, 246, 206, 115, 165, ++ 248, 0, 51, 148, 248, 147, 50, 133, 248, 119, 50, 1, 35, 133, 248, 8, ++ 51, 212, 248, 52, 50, 43, 96, 59, 185, 180, 248, 246, 48, 179, 66, 4, ++ 191, 5, 245, 29, 115, 196, 248, 48, 50, 148, 248, 56, 50, 196, 248, ++ 52, 82, 1, 51, 132, 248, 56, 50, 0, 32, 248, 189, 111, 240, 26, 0, 248, ++ 189, 16, 181, 176, 248, 246, 16, 4, 70, 255, 247, 146, 255, 212, 248, ++ 48, 34, 0, 35, 194, 248, 136, 48, 1, 34, 132, 248, 5, 33, 132, 248, ++ 6, 49, 111, 240, 22, 0, 16, 189, 0, 32, 112, 71, 112, 181, 4, 70, 13, ++ 70, 255, 247, 126, 255, 41, 70, 6, 70, 32, 70, 254, 247, 179, 255, 99, ++ 108, 22, 177, 6, 245, 29, 114, 1, 224, 4, 245, 36, 114, 196, 248, 48, ++ 34, 19, 177, 32, 70, 41, 70, 152, 71, 54, 179, 32, 70, 255, 247, 227, ++ 255, 212, 248, 48, 34, 83, 120, 115, 177, 163, 107, 212, 248, 36, 19, ++ 24, 105, 8, 240, 92, 250, 163, 107, 0, 34, 24, 105, 212, 248, 36, 19, ++ 19, 70, 8, 240, 81, 250, 16, 224, 148, 248, 101, 50, 107, 177, 3, 43, ++ 11, 208, 163, 107, 210, 248, 128, 32, 25, 106, 155, 110, 138, 26, 154, ++ 66, 3, 211, 32, 70, 2, 33, 255, 247, 172, 255, 1, 35, 132, 248, 201, ++ 58, 212, 248, 20, 49, 161, 107, 64, 246, 2, 2, 26, 64, 8, 105, 0, 50, ++ 41, 70, 24, 191, 1, 34, 195, 243, 128, 3, 189, 232, 112, 64, 8, 240, ++ 97, 186, 8, 181, 208, 248, 144, 48, 11, 177, 152, 71, 8, 189, 111, 240, ++ 22, 0, 8, 189, 45, 233, 247, 67, 134, 70, 79, 240, 0, 8, 2, 168, 12, ++ 70, 21, 70, 64, 248, 4, 141, 113, 70, 4, 34, 30, 70, 10, 159, 221, 248, ++ 44, 144, 211, 247, 81, 249, 1, 155, 19, 224, 184, 241, 0, 15, 1, 208, ++ 184, 69, 7, 217, 3, 240, 15, 2, 82, 0, 170, 26, 6, 248, 8, 32, 27, 9, ++ 2, 224, 50, 120, 6, 248, 8, 32, 8, 241, 1, 8, 95, 250, 136, 248, 200, ++ 69, 233, 211, 47, 177, 123, 30, 242, 92, 100, 0, 20, 27, 244, 84, 244, ++ 85, 189, 232, 254, 131, 0, 32, 112, 71, 19, 181, 12, 70, 19, 70, 0, ++ 33, 34, 70, 0, 145, 254, 247, 179, 248, 28, 189, 131, 107, 16, 181, ++ 154, 105, 4, 70, 146, 0, 25, 213, 176, 248, 246, 32, 18, 244, 64, 79, ++ 20, 209, 24, 105, 8, 240, 15, 250, 212, 248, 232, 48, 179, 248, 180, ++ 38, 146, 178, 66, 240, 3, 2, 163, 248, 180, 38, 212, 248, 232, 48, 179, ++ 248, 184, 38, 146, 178, 66, 240, 192, 2, 163, 248, 184, 38, 16, 189, ++ 131, 107, 155, 105, 153, 0, 23, 213, 176, 248, 246, 48, 19, 244, 64, ++ 79, 18, 209, 208, 248, 232, 48, 179, 248, 180, 38, 146, 178, 66, 240, ++ 3, 2, 163, 248, 180, 38, 208, 248, 232, 32, 178, 248, 184, 54, 35, 240, ++ 192, 3, 27, 4, 27, 12, 162, 248, 184, 54, 112, 71, 3, 70, 1, 224, 11, ++ 70, 17, 70, 179, 251, 241, 242, 1, 251, 18, 50, 0, 42, 247, 209, 8, ++ 70, 112, 71, 248, 181, 13, 70, 176, 248, 246, 16, 4, 70, 22, 70, 31, ++ 70, 254, 247, 0, 255, 64, 185, 180, 249, 34, 52, 51, 96, 180, 249, 36, ++ 52, 59, 96, 180, 249, 38, 52, 43, 96, 248, 189, 208, 248, 228, 0, 112, ++ 71, 208, 248, 196, 0, 8, 181, 0, 177, 128, 71, 8, 189, 8, 181, 208, ++ 248, 200, 48, 19, 177, 8, 70, 152, 71, 8, 189, 24, 70, 8, 189, 8, 181, ++ 208, 248, 204, 48, 19, 177, 8, 70, 152, 71, 8, 189, 24, 70, 8, 189, ++ 8, 181, 208, 248, 208, 48, 19, 177, 8, 70, 17, 70, 152, 71, 8, 189, ++ 8, 181, 208, 248, 212, 48, 128, 248, 114, 19, 3, 177, 152, 71, 8, 189, ++ 0, 49, 24, 191, 1, 33, 128, 248, 117, 19, 112, 71, 0, 35, 192, 248, ++ 136, 52, 112, 71, 7, 181, 131, 107, 2, 34, 0, 146, 24, 105, 0, 33, 19, ++ 70, 8, 240, 84, 249, 14, 189, 7, 181, 131, 107, 2, 34, 0, 146, 0, 33, ++ 24, 105, 11, 70, 8, 240, 74, 249, 14, 189, 240, 181, 0, 34, 137, 176, ++ 7, 146, 14, 154, 4, 70, 3, 42, 13, 70, 15, 158, 17, 159, 4, 217, 7, ++ 168, 25, 70, 4, 34, 211, 247, 110, 248, 64, 242, 126, 51, 157, 66, 0, ++ 240, 54, 129, 40, 216, 181, 245, 33, 127, 0, 240, 2, 129, 12, 216, 181, ++ 245, 32, 127, 74, 208, 2, 216, 82, 61, 1, 45, 67, 224, 64, 242, 129, ++ 35, 157, 66, 64, 240, 78, 129, 187, 224, 64, 242, 138, 35, 157, 66, ++ 0, 240, 6, 129, 5, 216, 64, 242, 134, 35, 157, 66, 64, 240, 66, 129, ++ 237, 224, 64, 242, 139, 35, 157, 66, 0, 240, 246, 128, 64, 242, 142, ++ 35, 157, 66, 64, 240, 55, 129, 251, 224, 64, 242, 131, 51, 157, 66, ++ 0, 240, 253, 128, 16, 216, 181, 245, 96, 127, 0, 240, 12, 129, 192, ++ 240, 5, 129, 64, 242, 129, 51, 157, 66, 0, 240, 10, 129, 64, 242, 130, ++ 51, 157, 66, 64, 240, 32, 129, 238, 224, 64, 242, 219, 51, 157, 66, ++ 0, 240, 11, 129, 5, 216, 64, 242, 218, 51, 157, 66, 64, 240, 20, 129, ++ 252, 224, 165, 245, 120, 117, 2, 61, 3, 45, 64, 242, 8, 129, 11, 225, ++ 163, 107, 27, 127, 0, 43, 0, 240, 4, 129, 32, 70, 255, 247, 123, 255, ++ 212, 248, 232, 48, 211, 248, 32, 49, 3, 240, 1, 3, 131, 240, 1, 7, 27, ++ 177, 163, 107, 24, 105, 8, 240, 209, 248, 32, 70, 254, 247, 248, 249, ++ 212, 248, 228, 48, 147, 248, 132, 56, 1, 43, 7, 209, 148, 248, 72, 34, ++ 34, 185, 148, 248, 95, 34, 10, 185, 132, 248, 72, 50, 148, 248, 69, ++ 2, 148, 248, 68, 50, 0, 144, 148, 248, 70, 2, 0, 37, 1, 144, 148, 248, ++ 71, 2, 148, 248, 66, 18, 2, 144, 148, 248, 95, 2, 148, 248, 67, 34, ++ 3, 144, 148, 248, 72, 2, 4, 149, 5, 144, 32, 70, 253, 247, 178, 255, ++ 48, 96, 212, 248, 228, 48, 147, 248, 132, 56, 1, 43, 39, 209, 148, 248, ++ 72, 50, 1, 43, 35, 209, 148, 248, 68, 50, 1, 43, 31, 209, 194, 224, ++ 148, 248, 69, 226, 9, 32, 205, 248, 0, 224, 148, 248, 70, 226, 132, ++ 248, 72, 2, 205, 248, 4, 224, 148, 248, 71, 226, 5, 144, 205, 248, 8, ++ 224, 148, 248, 95, 226, 148, 248, 66, 18, 148, 248, 67, 34, 32, 70, ++ 205, 248, 12, 224, 4, 149, 253, 247, 134, 255, 128, 5, 128, 13, 48, ++ 96, 32, 70, 254, 247, 171, 249, 31, 185, 163, 107, 24, 105, 8, 240, ++ 114, 248, 32, 70, 255, 247, 19, 255, 139, 224, 7, 155, 26, 22, 2, 240, ++ 15, 2, 4, 42, 0, 242, 141, 128, 24, 21, 0, 240, 3, 0, 1, 40, 0, 242, ++ 135, 128, 153, 21, 1, 240, 3, 1, 3, 41, 0, 240, 129, 128, 29, 20, 5, ++ 240, 15, 5, 1, 45, 123, 216, 31, 18, 255, 178, 167, 241, 10, 6, 246, ++ 178, 5, 46, 116, 216, 3, 240, 15, 6, 3, 46, 112, 216, 132, 248, 71, ++ 34, 26, 15, 27, 17, 3, 240, 15, 3, 132, 248, 66, 114, 132, 248, 67, ++ 98, 132, 248, 68, 82, 132, 248, 69, 2, 132, 248, 70, 18, 132, 248, 95, ++ 34, 132, 248, 72, 50, 83, 224, 8, 169, 79, 240, 255, 51, 65, 248, 4, ++ 61, 7, 224, 180, 248, 246, 16, 32, 70, 254, 247, 133, 253, 8, 169, 65, ++ 248, 4, 13, 48, 70, 58, 70, 210, 247, 80, 255, 64, 224, 7, 155, 132, ++ 248, 11, 52, 60, 224, 148, 248, 11, 52, 8, 169, 65, 248, 4, 61, 48, ++ 70, 4, 34, 240, 231, 212, 248, 20, 49, 195, 243, 0, 19, 51, 96, 46, ++ 224, 32, 70, 7, 169, 1, 34, 2, 224, 32, 70, 49, 70, 0, 34, 254, 247, ++ 180, 248, 46, 224, 32, 70, 49, 70, 253, 247, 157, 254, 41, 224, 32, ++ 70, 7, 153, 253, 247, 149, 254, 36, 224, 32, 70, 49, 70, 253, 247, 153, ++ 254, 31, 224, 32, 70, 7, 153, 253, 247, 145, 254, 26, 224, 212, 248, ++ 220, 48, 147, 177, 32, 70, 152, 71, 48, 96, 9, 224, 212, 248, 216, 48, ++ 91, 177, 7, 153, 74, 28, 2, 42, 10, 216, 32, 70, 73, 178, 152, 71, 0, ++ 32, 7, 224, 111, 240, 3, 0, 4, 224, 111, 240, 22, 0, 1, 224, 111, 240, ++ 28, 0, 9, 176, 240, 189, 64, 243, 135, 0, 82, 48, 255, 246, 56, 175, ++ 85, 231, 208, 248, 156, 4, 112, 71, 144, 248, 9, 4, 112, 71, 112, 71, ++ 112, 71, 128, 248, 160, 26, 112, 71, 0, 0, 2, 75, 24, 96, 2, 75, 25, ++ 96, 112, 71, 0, 191, 16, 116, 4, 0, 12, 116, 4, 0, 67, 177, 26, 177, ++ 208, 248, 148, 20, 145, 248, 180, 16, 33, 177, 128, 248, 230, 26, 1, ++ 224, 128, 248, 230, 58, 211, 241, 1, 3, 56, 191, 0, 35, 128, 248, 228, ++ 42, 128, 248, 229, 58, 112, 71, 16, 181, 12, 137, 3, 153, 2, 155, 2, ++ 145, 4, 153, 3, 145, 5, 153, 4, 145, 6, 153, 5, 145, 0, 105, 17, 70, ++ 34, 70, 189, 232, 16, 64, 22, 240, 129, 153, 3, 120, 51, 185, 177, 245, ++ 128, 111, 5, 216, 1, 35, 0, 248, 1, 59, 112, 71, 0, 32, 112, 71, 24, ++ 70, 112, 71, 3, 120, 11, 177, 0, 35, 3, 112, 112, 71, 112, 71, 112, ++ 71, 130, 107, 208, 248, 120, 1, 19, 106, 131, 66, 1, 211, 27, 26, 1, ++ 224, 192, 67, 195, 24, 144, 110, 131, 66, 52, 191, 0, 32, 1, 32, 112, ++ 71, 112, 71, 112, 71, 112, 71, 19, 32, 112, 71, 112, 71, 112, 71, 128, ++ 10, 112, 71, 3, 136, 155, 5, 155, 13, 67, 234, 129, 35, 3, 128, 112, ++ 71, 65, 67, 146, 2, 155, 1, 0, 251, 3, 32, 1, 245, 0, 65, 1, 235, 64, ++ 0, 73, 0, 144, 251, 241, 240, 112, 71, 208, 248, 228, 48, 1, 34, 163, ++ 248, 52, 36, 112, 71, 112, 71, 0, 0, 48, 181, 137, 177, 9, 75, 90, 67, ++ 1, 35, 2, 251, 3, 244, 129, 234, 225, 117, 165, 235, 225, 117, 180, ++ 251, 245, 240, 128, 178, 69, 67, 1, 51, 165, 66, 155, 178, 241, 209, ++ 48, 189, 2, 32, 48, 189, 64, 66, 15, 0, 129, 66, 184, 191, 8, 70, 112, ++ 71, 45, 233, 240, 71, 1, 41, 184, 191, 1, 33, 79, 240, 128, 116, 148, ++ 251, 241, 244, 36, 240, 127, 68, 36, 244, 112, 4, 0, 44, 8, 191, 1, ++ 36, 4, 251, 4, 243, 79, 72, 27, 19, 1, 43, 184, 191, 1, 35, 144, 251, ++ 243, 243, 77, 72, 1, 51, 144, 251, 243, 240, 127, 33, 1, 48, 21, 70, ++ 255, 247, 218, 255, 130, 70, 73, 72, 73, 78, 144, 251, 244, 240, 1, ++ 48, 150, 251, 240, 240, 127, 33, 1, 48, 255, 247, 206, 255, 129, 70, ++ 69, 72, 127, 33, 144, 251, 244, 240, 1, 48, 150, 251, 240, 240, 1, 48, ++ 255, 247, 195, 255, 127, 33, 128, 70, 16, 32, 255, 247, 190, 255, 40, ++ 128, 62, 72, 127, 33, 144, 251, 244, 240, 32, 240, 127, 64, 32, 244, ++ 112, 0, 160, 245, 248, 80, 63, 56, 1, 40, 184, 191, 1, 32, 150, 251, ++ 240, 240, 1, 48, 255, 247, 170, 255, 168, 129, 53, 72, 127, 33, 144, ++ 251, 244, 240, 32, 240, 127, 64, 32, 244, 112, 0, 160, 245, 120, 96, ++ 31, 56, 1, 40, 184, 191, 1, 32, 150, 251, 240, 240, 1, 48, 255, 247, ++ 150, 255, 232, 129, 44, 72, 127, 33, 144, 251, 244, 240, 32, 240, 127, ++ 64, 32, 244, 112, 0, 160, 245, 248, 64, 255, 56, 1, 40, 184, 191, 1, ++ 32, 150, 251, 240, 240, 1, 48, 255, 247, 130, 255, 255, 33, 40, 130, ++ 10, 32, 255, 247, 125, 255, 127, 33, 104, 130, 42, 32, 255, 247, 120, ++ 255, 7, 70, 30, 72, 79, 244, 122, 99, 144, 251, 244, 240, 160, 245, ++ 250, 48, 144, 251, 243, 240, 1, 48, 127, 33, 1, 40, 184, 191, 1, 32, ++ 255, 247, 103, 255, 23, 75, 6, 70, 147, 251, 244, 244, 164, 245, 248, ++ 100, 21, 75, 15, 60, 1, 44, 184, 191, 1, 36, 147, 251, 244, 244, 96, ++ 28, 127, 33, 255, 247, 86, 255, 165, 248, 2, 160, 165, 248, 4, 144, ++ 165, 248, 6, 128, 47, 129, 110, 129, 168, 130, 189, 232, 240, 135, 0, ++ 191, 255, 95, 16, 4, 255, 207, 7, 0, 255, 191, 30, 3, 255, 231, 3, 0, ++ 255, 95, 85, 3, 255, 255, 166, 9, 255, 127, 66, 8, 255, 31, 55, 14, ++ 255, 63, 233, 118, 255, 255, 243, 1, 255, 243, 1, 0, 112, 181, 128, ++ 34, 4, 70, 208, 248, 228, 80, 19, 70, 79, 244, 241, 97, 254, 247, 76, ++ 248, 32, 70, 2, 34, 0, 35, 79, 244, 241, 97, 254, 247, 69, 248, 181, ++ 248, 2, 54, 79, 244, 127, 66, 27, 2, 32, 70, 19, 64, 64, 242, 135, 113, ++ 254, 247, 58, 248, 181, 248, 4, 54, 79, 244, 127, 66, 27, 2, 32, 70, ++ 64, 242, 50, 65, 19, 64, 189, 232, 112, 64, 254, 247, 45, 184, 112, ++ 181, 12, 28, 24, 191, 1, 36, 227, 1, 128, 34, 79, 244, 150, 97, 5, 70, ++ 254, 247, 34, 248, 40, 70, 64, 242, 58, 65, 64, 34, 163, 1, 189, 232, ++ 112, 64, 254, 247, 25, 184, 11, 2, 79, 244, 127, 66, 64, 242, 251, 65, ++ 19, 64, 254, 247, 17, 184, 203, 67, 3, 240, 7, 3, 91, 0, 112, 181, 64, ++ 246, 117, 17, 21, 70, 67, 240, 1, 3, 79, 34, 4, 70, 254, 247, 3, 248, ++ 235, 2, 32, 70, 64, 246, 105, 17, 79, 244, 96, 82, 3, 244, 120, 67, ++ 189, 232, 112, 64, 253, 247, 247, 191, 1, 34, 16, 181, 19, 70, 4, 70, ++ 64, 246, 172, 17, 253, 247, 239, 255, 32, 70, 192, 35, 64, 246, 172, ++ 17, 79, 244, 112, 114, 253, 247, 231, 255, 32, 70, 0, 35, 64, 242, 164, ++ 65, 79, 244, 128, 82, 253, 247, 223, 255, 79, 244, 0, 82, 32, 70, 19, ++ 70, 64, 242, 116, 81, 253, 247, 215, 255, 79, 244, 0, 114, 32, 70, 19, ++ 70, 64, 242, 117, 81, 253, 247, 207, 255, 32, 70, 1, 34, 0, 35, 64, ++ 246, 7, 1, 253, 247, 200, 255, 79, 244, 128, 66, 32, 70, 19, 70, 64, ++ 242, 76, 65, 253, 247, 192, 255, 79, 244, 128, 66, 32, 70, 19, 70, 64, ++ 242, 77, 65, 253, 247, 184, 255, 79, 244, 128, 98, 32, 70, 19, 70, 64, ++ 246, 56, 17, 253, 247, 176, 255, 79, 244, 128, 98, 32, 70, 19, 70, 64, ++ 246, 57, 17, 253, 247, 168, 255, 79, 244, 128, 98, 32, 70, 19, 70, 64, ++ 242, 117, 81, 253, 247, 160, 255, 79, 244, 128, 66, 32, 70, 19, 70, ++ 64, 242, 116, 81, 253, 247, 152, 255, 79, 244, 0, 98, 32, 70, 19, 70, ++ 64, 246, 56, 17, 253, 247, 144, 255, 79, 244, 0, 98, 32, 70, 64, 246, ++ 57, 17, 19, 70, 189, 232, 16, 64, 253, 247, 134, 191, 45, 233, 240, ++ 71, 23, 70, 30, 70, 79, 244, 0, 66, 203, 3, 19, 64, 64, 242, 177, 65, ++ 4, 70, 189, 248, 32, 80, 189, 248, 36, 128, 189, 248, 40, 144, 189, ++ 248, 44, 160, 253, 247, 113, 255, 59, 2, 32, 70, 64, 242, 250, 65, 79, ++ 244, 112, 98, 3, 244, 127, 67, 253, 247, 103, 255, 243, 2, 32, 70, 64, ++ 242, 177, 65, 79, 244, 96, 82, 3, 244, 120, 67, 253, 247, 93, 255, 32, ++ 70, 15, 34, 43, 70, 64, 242, 60, 81, 253, 247, 86, 255, 79, 234, 72, ++ 35, 32, 70, 64, 242, 60, 81, 79, 244, 240, 82, 3, 244, 126, 67, 253, ++ 247, 75, 255, 79, 234, 137, 25, 79, 246, 192, 115, 32, 70, 9, 234, 3, ++ 3, 64, 246, 172, 17, 79, 244, 112, 114, 253, 247, 62, 255, 79, 234, ++ 74, 10, 79, 246, 254, 115, 32, 70, 64, 246, 121, 17, 79, 244, 255, 114, ++ 10, 234, 3, 3, 189, 232, 240, 71, 253, 247, 47, 191, 112, 181, 12, 28, ++ 24, 191, 1, 36, 5, 70, 35, 3, 79, 244, 150, 97, 79, 244, 128, 82, 253, ++ 247, 35, 255, 40, 70, 128, 34, 227, 1, 64, 242, 249, 65, 253, 247, 28, ++ 255, 40, 70, 163, 2, 79, 244, 150, 97, 79, 244, 128, 98, 253, 247, 20, ++ 255, 40, 70, 1, 34, 35, 70, 64, 242, 61, 81, 253, 247, 13, 255, 40, ++ 70, 8, 34, 227, 0, 64, 242, 61, 81, 253, 247, 6, 255, 40, 70, 1, 34, ++ 35, 70, 64, 246, 172, 17, 253, 247, 255, 254, 40, 70, 64, 246, 121, ++ 17, 1, 34, 35, 70, 189, 232, 112, 64, 253, 247, 246, 190, 45, 233, 240, ++ 71, 142, 70, 157, 248, 40, 112, 4, 70, 22, 70, 29, 70, 7, 34, 115, 70, ++ 64, 246, 207, 17, 157, 248, 32, 128, 157, 248, 36, 144, 253, 247, 228, ++ 254, 32, 70, 8, 34, 251, 0, 64, 246, 207, 17, 253, 247, 221, 254, 243, ++ 2, 32, 70, 64, 246, 211, 17, 79, 244, 0, 98, 3, 244, 120, 67, 253, 247, ++ 211, 254, 43, 3, 32, 70, 64, 246, 211, 17, 79, 244, 128, 82, 3, 244, ++ 112, 67, 253, 247, 201, 254, 32, 70, 24, 34, 79, 234, 200, 3, 64, 246, ++ 211, 17, 253, 247, 193, 254, 32, 70, 64, 246, 211, 17, 96, 34, 79, 234, ++ 73, 19, 189, 232, 240, 71, 253, 247, 183, 190, 79, 244, 0, 66, 16, 181, ++ 19, 70, 79, 244, 137, 97, 4, 70, 253, 247, 174, 254, 32, 70, 79, 244, ++ 129, 97, 79, 244, 128, 114, 0, 35, 189, 232, 16, 64, 253, 247, 164, ++ 190, 112, 181, 208, 248, 228, 48, 66, 34, 211, 248, 32, 54, 1, 57, 2, ++ 251, 1, 49, 77, 136, 5, 35, 170, 0, 146, 251, 243, 243, 1, 51, 91, 16, ++ 64, 242, 87, 97, 64, 246, 255, 114, 155, 178, 4, 70, 253, 247, 140, ++ 254, 79, 244, 160, 3, 147, 251, 245, 243, 1, 51, 91, 16, 32, 70, 79, ++ 244, 203, 97, 64, 246, 255, 114, 155, 178, 189, 232, 112, 64, 253, 247, ++ 124, 190, 112, 181, 11, 2, 20, 70, 79, 244, 127, 66, 19, 64, 64, 246, ++ 87, 33, 5, 70, 253, 247, 113, 254, 40, 70, 64, 246, 87, 33, 255, 34, ++ 163, 178, 189, 232, 112, 64, 253, 247, 104, 190, 248, 181, 64, 242, ++ 118, 65, 7, 70, 253, 247, 221, 250, 64, 242, 119, 65, 198, 5, 56, 70, ++ 253, 247, 215, 250, 64, 242, 121, 65, 197, 5, 56, 70, 253, 247, 209, ++ 250, 64, 242, 122, 65, 196, 5, 56, 70, 253, 247, 203, 250, 246, 13, ++ 192, 5, 237, 13, 228, 13, 192, 13, 255, 46, 136, 191, 166, 245, 0, 118, ++ 255, 45, 136, 191, 165, 245, 0, 117, 255, 44, 136, 191, 164, 245, 0, ++ 116, 255, 40, 136, 191, 160, 245, 0, 112, 54, 178, 36, 178, 45, 178, ++ 0, 178, 173, 27, 0, 27, 40, 24, 64, 8, 0, 178, 248, 189, 112, 181, 12, ++ 70, 64, 242, 57, 65, 6, 70, 253, 247, 165, 250, 0, 244, 240, 96, 192, ++ 17, 224, 128, 64, 242, 181, 65, 48, 70, 253, 247, 156, 250, 64, 242, ++ 251, 65, 5, 70, 48, 70, 253, 247, 150, 250, 5, 240, 31, 3, 192, 178, ++ 45, 10, 35, 128, 101, 128, 160, 128, 112, 189, 8, 181, 64, 242, 251, ++ 65, 253, 247, 137, 250, 0, 10, 128, 178, 8, 189, 112, 181, 13, 70, 64, ++ 242, 57, 65, 4, 70, 253, 247, 127, 250, 32, 244, 240, 99, 67, 234, 197, ++ 19, 32, 70, 64, 242, 57, 65, 64, 246, 255, 114, 155, 178, 189, 232, ++ 112, 64, 253, 247, 246, 189, 112, 181, 13, 70, 4, 70, 255, 247, 222, ++ 255, 106, 136, 43, 136, 6, 70, 67, 234, 2, 35, 32, 70, 64, 242, 181, ++ 65, 79, 246, 255, 114, 155, 178, 253, 247, 228, 253, 171, 136, 32, 70, ++ 67, 234, 6, 38, 79, 246, 255, 114, 179, 178, 64, 242, 251, 65, 253, ++ 247, 217, 253, 32, 70, 233, 136, 255, 247, 202, 255, 32, 70, 1, 33, ++ 189, 232, 112, 64, 255, 247, 162, 189, 0, 0, 1, 73, 14, 34, 253, 247, ++ 220, 189, 0, 69, 4, 0, 3, 41, 248, 181, 4, 70, 23, 70, 4, 216, 25, 75, ++ 94, 92, 25, 75, 93, 92, 1, 224, 0, 37, 46, 70, 79, 244, 0, 114, 19, ++ 70, 32, 70, 64, 246, 56, 17, 253, 247, 180, 253, 115, 2, 32, 70, 64, ++ 246, 57, 17, 79, 244, 0, 114, 3, 244, 126, 67, 253, 247, 170, 253, 79, ++ 244, 128, 98, 19, 70, 32, 70, 64, 246, 56, 17, 253, 247, 162, 253, 171, ++ 2, 32, 70, 64, 246, 57, 17, 79, 244, 128, 98, 3, 244, 124, 67, 253, ++ 247, 152, 253, 39, 177, 32, 70, 189, 232, 248, 64, 255, 247, 196, 191, ++ 248, 189, 0, 191, 74, 71, 4, 0, 138, 72, 4, 0, 112, 181, 4, 70, 22, ++ 70, 13, 70, 0, 41, 61, 209, 64, 246, 56, 17, 79, 244, 0, 98, 43, 70, ++ 253, 247, 127, 253, 32, 70, 64, 242, 76, 65, 79, 244, 128, 66, 43, 70, ++ 253, 247, 119, 253, 32, 70, 64, 246, 56, 17, 79, 244, 128, 98, 43, 70, ++ 253, 247, 111, 253, 32, 70, 64, 242, 117, 81, 79, 244, 128, 98, 43, ++ 70, 253, 247, 103, 253, 32, 70, 64, 242, 76, 65, 79, 244, 0, 82, 43, ++ 70, 253, 247, 95, 253, 32, 70, 79, 244, 150, 97, 79, 244, 0, 98, 43, ++ 70, 253, 247, 87, 253, 32, 70, 64, 246, 56, 17, 79, 244, 0, 114, 43, ++ 70, 253, 247, 79, 253, 32, 70, 64, 246, 56, 17, 79, 244, 128, 98, 43, ++ 70, 108, 224, 79, 244, 0, 82, 64, 242, 76, 65, 19, 70, 253, 247, 65, ++ 253, 32, 70, 64, 242, 77, 65, 79, 244, 0, 82, 14, 185, 51, 70, 0, 224, ++ 19, 70, 253, 247, 54, 253, 79, 244, 0, 98, 19, 70, 32, 70, 79, 244, ++ 150, 97, 253, 247, 46, 253, 0, 35, 32, 70, 64, 242, 177, 65, 79, 244, ++ 128, 66, 253, 247, 38, 253, 0, 33, 10, 70, 32, 70, 255, 247, 89, 255, ++ 79, 244, 128, 66, 19, 70, 32, 70, 64, 242, 77, 65, 253, 247, 25, 253, ++ 79, 244, 128, 66, 19, 70, 32, 70, 64, 242, 76, 65, 253, 247, 17, 253, ++ 79, 244, 128, 98, 19, 70, 32, 70, 64, 246, 56, 17, 253, 247, 9, 253, ++ 79, 244, 128, 98, 19, 70, 32, 70, 64, 246, 57, 17, 253, 247, 1, 253, ++ 32, 70, 64, 242, 116, 81, 79, 244, 128, 66, 0, 35, 253, 247, 249, 252, ++ 79, 244, 128, 98, 19, 70, 32, 70, 64, 242, 117, 81, 253, 247, 241, 252, ++ 79, 244, 128, 66, 19, 70, 32, 70, 64, 242, 116, 81, 253, 247, 233, 252, ++ 79, 244, 0, 98, 19, 70, 32, 70, 64, 246, 57, 17, 253, 247, 225, 252, ++ 79, 244, 0, 98, 32, 70, 64, 246, 56, 17, 19, 70, 189, 232, 112, 64, ++ 253, 247, 215, 188, 112, 181, 4, 70, 13, 70, 0, 41, 47, 209, 1, 34, ++ 43, 70, 64, 242, 117, 81, 253, 247, 204, 252, 32, 70, 43, 70, 64, 242, ++ 76, 65, 79, 244, 0, 82, 253, 247, 196, 252, 32, 70, 43, 70, 79, 244, ++ 150, 97, 79, 244, 0, 98, 253, 247, 188, 252, 32, 70, 43, 70, 64, 246, ++ 56, 17, 79, 244, 0, 114, 253, 247, 180, 252, 32, 70, 43, 70, 64, 246, ++ 56, 17, 79, 244, 128, 98, 253, 247, 172, 252, 32, 70, 64, 246, 56, 17, ++ 79, 244, 0, 98, 43, 70, 189, 232, 112, 64, 253, 247, 162, 188, 0, 35, ++ 64, 246, 57, 17, 79, 244, 0, 98, 253, 247, 155, 252, 79, 244, 0, 98, ++ 32, 70, 19, 70, 64, 246, 56, 17, 253, 247, 147, 252, 31, 34, 32, 70, ++ 19, 70, 64, 242, 116, 81, 253, 247, 140, 252, 1, 34, 32, 70, 19, 70, ++ 64, 242, 117, 81, 253, 247, 133, 252, 79, 244, 0, 82, 32, 70, 19, 70, ++ 64, 242, 77, 65, 253, 247, 125, 252, 79, 244, 0, 82, 32, 70, 19, 70, ++ 64, 242, 76, 65, 253, 247, 117, 252, 79, 244, 128, 66, 32, 70, 19, 70, ++ 64, 242, 177, 65, 253, 247, 109, 252, 79, 244, 0, 98, 32, 70, 19, 70, ++ 79, 244, 150, 97, 253, 247, 101, 252, 32, 70, 1, 33, 0, 34, 189, 232, ++ 112, 64, 255, 247, 150, 190, 1, 41, 112, 181, 5, 70, 12, 70, 2, 209, ++ 17, 73, 6, 34, 3, 224, 3, 41, 4, 209, 15, 73, 15, 34, 253, 247, 98, ++ 252, 13, 224, 97, 185, 4, 34, 19, 70, 64, 242, 217, 65, 253, 247, 72, ++ 252, 40, 70, 64, 242, 217, 65, 8, 34, 35, 70, 253, 247, 65, 252, 40, ++ 70, 64, 242, 55, 97, 79, 244, 64, 66, 0, 35, 189, 232, 112, 64, 253, ++ 247, 55, 188, 0, 191, 4, 71, 4, 0, 142, 71, 4, 0, 112, 181, 208, 248, ++ 228, 48, 4, 70, 147, 248, 188, 100, 147, 248, 189, 84, 9, 34, 69, 234, ++ 6, 53, 173, 178, 23, 73, 253, 247, 53, 252, 32, 70, 43, 70, 64, 242, ++ 219, 65, 71, 242, 255, 50, 253, 247, 27, 252, 32, 70, 43, 70, 64, 242, ++ 220, 65, 71, 242, 255, 50, 253, 247, 19, 252, 32, 70, 43, 70, 64, 242, ++ 10, 65, 71, 242, 255, 50, 253, 247, 11, 252, 32, 70, 64, 242, 11, 65, ++ 71, 242, 255, 50, 67, 242, 164, 3, 253, 247, 2, 252, 32, 70, 64, 242, ++ 12, 65, 71, 242, 255, 50, 67, 242, 164, 3, 189, 232, 112, 64, 253, 247, ++ 247, 187, 0, 191, 254, 72, 4, 0, 1, 73, 12, 34, 253, 247, 2, 188, 236, ++ 70, 4, 0, 112, 181, 21, 70, 4, 34, 19, 70, 14, 70, 64, 246, 101, 17, ++ 4, 70, 253, 247, 228, 251, 8, 34, 19, 70, 32, 70, 64, 246, 101, 17, ++ 253, 247, 221, 251, 32, 70, 49, 70, 0, 34, 255, 247, 199, 251, 4, 34, ++ 32, 70, 79, 244, 136, 97, 19, 70, 253, 247, 209, 251, 1, 34, 19, 70, ++ 32, 70, 64, 242, 74, 65, 253, 247, 202, 251, 32, 70, 64, 242, 74, 65, ++ 1, 34, 0, 35, 253, 247, 195, 251, 32, 32, 215, 243, 234, 247, 181, 177, ++ 32, 70, 64, 246, 120, 17, 253, 247, 53, 248, 192, 178, 255, 40, 10, ++ 209, 32, 70, 64, 246, 111, 17, 253, 247, 45, 248, 0, 5, 0, 13, 64, 246, ++ 255, 115, 152, 66, 3, 208, 1, 61, 109, 178, 0, 45, 214, 209, 0, 33, ++ 32, 70, 10, 70, 255, 247, 146, 251, 32, 70, 79, 244, 136, 97, 4, 34, ++ 0, 35, 189, 232, 112, 64, 253, 247, 154, 187, 248, 181, 23, 70, 4, 70, ++ 30, 70, 79, 246, 255, 114, 59, 70, 13, 70, 64, 242, 131, 65, 253, 247, ++ 142, 251, 51, 70, 32, 70, 64, 242, 130, 65, 255, 34, 253, 247, 135, ++ 251, 157, 248, 24, 48, 32, 70, 64, 242, 129, 65, 2, 34, 91, 0, 253, ++ 247, 126, 251, 1, 34, 32, 70, 64, 242, 129, 65, 19, 70, 253, 247, 119, ++ 251, 66, 242, 17, 118, 2, 224, 10, 32, 215, 243, 155, 247, 32, 70, 64, ++ 242, 129, 65, 252, 247, 231, 255, 194, 7, 1, 213, 1, 62, 243, 209, 32, ++ 70, 64, 242, 129, 65, 252, 247, 222, 255, 195, 7, 41, 212, 64, 242, ++ 135, 65, 32, 70, 252, 247, 215, 255, 64, 242, 134, 65, 6, 70, 32, 70, ++ 252, 247, 209, 255, 64, 234, 6, 64, 104, 96, 64, 246, 154, 33, 32, 70, ++ 252, 247, 201, 255, 79, 244, 145, 97, 6, 70, 32, 70, 252, 247, 195, ++ 255, 64, 234, 6, 64, 168, 96, 64, 242, 133, 65, 32, 70, 252, 247, 187, ++ 255, 64, 242, 132, 65, 6, 70, 32, 70, 252, 247, 181, 255, 64, 234, 6, ++ 64, 40, 96, 248, 189, 112, 181, 29, 70, 4, 70, 22, 70, 11, 70, 25, 185, ++ 79, 244, 150, 97, 7, 34, 10, 224, 1, 34, 19, 70, 64, 242, 177, 65, 253, ++ 247, 38, 251, 7, 34, 32, 70, 79, 244, 150, 97, 19, 70, 253, 247, 31, ++ 251, 134, 177, 234, 5, 32, 70, 210, 13, 64, 242, 188, 65, 252, 247, ++ 157, 255, 106, 10, 210, 5, 32, 70, 64, 242, 187, 65, 210, 13, 189, 232, ++ 112, 64, 252, 247, 147, 191, 112, 189, 1, 41, 56, 181, 5, 70, 20, 70, ++ 15, 208, 2, 211, 2, 41, 35, 209, 21, 224, 64, 246, 222, 17, 252, 247, ++ 122, 255, 64, 246, 223, 17, 32, 128, 40, 70, 252, 247, 116, 255, 96, ++ 128, 56, 189, 64, 246, 222, 17, 18, 136, 252, 247, 120, 255, 40, 70, ++ 64, 246, 223, 17, 98, 136, 8, 224, 64, 246, 222, 17, 0, 34, 252, 247, ++ 110, 255, 40, 70, 64, 246, 223, 17, 0, 34, 189, 232, 56, 64, 252, 247, ++ 102, 191, 56, 189, 1, 41, 56, 181, 5, 70, 20, 70, 32, 209, 64, 246, ++ 216, 17, 18, 120, 252, 247, 91, 255, 40, 70, 64, 246, 217, 17, 98, 120, ++ 252, 247, 85, 255, 40, 70, 64, 246, 218, 17, 162, 120, 252, 247, 79, ++ 255, 40, 70, 64, 246, 186, 33, 226, 120, 252, 247, 73, 255, 40, 70, ++ 64, 246, 187, 33, 34, 121, 252, 247, 67, 255, 40, 70, 64, 246, 188, ++ 33, 33, 224, 2, 41, 36, 209, 64, 246, 219, 17, 18, 120, 252, 247, 56, ++ 255, 40, 70, 64, 246, 220, 17, 98, 120, 252, 247, 50, 255, 40, 70, 64, ++ 246, 221, 17, 162, 120, 252, 247, 44, 255, 40, 70, 64, 246, 189, 33, ++ 226, 120, 252, 247, 38, 255, 40, 70, 64, 246, 190, 33, 34, 121, 252, ++ 247, 32, 255, 40, 70, 64, 246, 245, 33, 98, 121, 189, 232, 56, 64, 252, ++ 247, 24, 191, 56, 189, 0, 0, 45, 233, 240, 65, 208, 248, 228, 48, 4, ++ 70, 147, 249, 112, 53, 0, 43, 51, 221, 27, 74, 79, 244, 19, 97, 7, 43, ++ 212, 191, 211, 24, 211, 29, 19, 248, 1, 92, 252, 247, 247, 254, 64, ++ 246, 49, 17, 128, 70, 32, 70, 252, 247, 241, 254, 64, 246, 50, 17, 7, ++ 70, 32, 70, 252, 247, 235, 254, 5, 251, 8, 248, 111, 67, 79, 234, 168, ++ 18, 6, 70, 79, 244, 19, 97, 32, 70, 146, 178, 252, 247, 234, 254, 186, ++ 17, 32, 70, 64, 246, 49, 17, 146, 178, 252, 247, 227, 254, 117, 67, ++ 170, 17, 32, 70, 64, 246, 50, 17, 146, 178, 189, 232, 240, 65, 252, ++ 247, 217, 190, 189, 232, 240, 129, 0, 191, 92, 101, 4, 0, 45, 233, 240, ++ 67, 44, 75, 147, 176, 6, 70, 15, 70, 108, 70, 3, 241, 32, 14, 24, 104, ++ 89, 104, 37, 70, 3, 197, 8, 51, 115, 69, 44, 70, 247, 209, 27, 136, ++ 9, 172, 43, 128, 36, 75, 3, 241, 32, 14, 24, 104, 89, 104, 37, 70, 3, ++ 197, 8, 51, 115, 69, 44, 70, 247, 209, 27, 136, 43, 128, 79, 177, 1, ++ 47, 3, 209, 9, 172, 18, 32, 28, 73, 6, 224, 0, 36, 32, 70, 33, 70, 2, ++ 224, 26, 73, 108, 70, 17, 32, 0, 35, 6, 224, 13, 70, 181, 248, 0, 224, ++ 1, 51, 36, 49, 114, 69, 6, 208, 131, 66, 31, 250, 131, 248, 244, 219, ++ 79, 246, 255, 120, 14, 224, 169, 70, 0, 37, 97, 91, 48, 70, 57, 248, ++ 2, 47, 2, 53, 252, 247, 140, 254, 34, 45, 246, 209, 23, 185, 48, 70, ++ 255, 247, 112, 255, 48, 70, 15, 250, 136, 248, 255, 247, 7, 254, 184, ++ 241, 255, 63, 12, 191, 79, 240, 255, 48, 0, 32, 19, 176, 189, 232, 240, ++ 131, 228, 21, 4, 0, 6, 22, 4, 0, 100, 101, 4, 0, 2, 106, 4, 0, 45, 233, ++ 240, 65, 208, 248, 228, 112, 1, 37, 14, 70, 135, 248, 216, 85, 161, ++ 33, 4, 70, 252, 247, 50, 254, 103, 33, 167, 248, 218, 5, 32, 70, 252, ++ 247, 44, 254, 153, 33, 167, 248, 220, 5, 32, 70, 252, 247, 38, 254, ++ 9, 33, 167, 248, 222, 5, 32, 70, 252, 247, 32, 254, 150, 33, 167, 248, ++ 224, 5, 32, 70, 252, 247, 26, 254, 2, 33, 167, 248, 226, 5, 32, 70, ++ 252, 247, 20, 254, 3, 33, 167, 248, 228, 5, 32, 70, 252, 247, 14, 254, ++ 156, 33, 167, 248, 230, 5, 32, 70, 252, 247, 8, 254, 39, 33, 167, 248, ++ 232, 5, 32, 70, 252, 247, 2, 254, 111, 33, 167, 248, 234, 5, 32, 70, ++ 252, 247, 252, 253, 157, 33, 167, 248, 236, 5, 32, 70, 252, 247, 246, ++ 253, 49, 33, 167, 248, 238, 5, 32, 70, 252, 247, 240, 253, 50, 33, 167, ++ 248, 240, 5, 32, 70, 252, 247, 234, 253, 155, 33, 167, 248, 242, 5, ++ 32, 70, 252, 247, 228, 253, 166, 33, 167, 248, 244, 5, 32, 70, 252, ++ 247, 222, 253, 47, 33, 167, 248, 246, 5, 32, 70, 252, 247, 216, 253, ++ 48, 33, 167, 248, 248, 5, 32, 70, 252, 247, 210, 253, 43, 33, 167, 248, ++ 250, 5, 32, 70, 252, 247, 204, 253, 25, 33, 167, 248, 252, 5, 32, 70, ++ 252, 247, 198, 253, 136, 33, 167, 248, 254, 5, 32, 70, 252, 247, 192, ++ 253, 153, 33, 167, 248, 0, 6, 42, 70, 32, 70, 43, 70, 253, 247, 41, ++ 249, 9, 33, 32, 70, 42, 70, 43, 70, 253, 247, 35, 249, 9, 33, 2, 34, ++ 0, 35, 32, 70, 253, 247, 29, 249, 174, 66, 34, 209, 32, 70, 161, 33, ++ 50, 70, 51, 70, 253, 247, 21, 249, 32, 70, 103, 33, 50, 70, 51, 70, ++ 253, 247, 15, 249, 32, 70, 166, 33, 50, 70, 51, 70, 253, 247, 9, 249, ++ 32, 70, 136, 33, 50, 70, 0, 35, 253, 247, 3, 249, 2, 34, 19, 70, 32, ++ 70, 153, 33, 253, 247, 253, 248, 32, 70, 9, 33, 112, 34, 16, 35, 35, ++ 224, 2, 46, 35, 209, 32, 70, 166, 33, 42, 70, 43, 70, 253, 247, 240, ++ 248, 32, 70, 136, 33, 42, 70, 43, 70, 253, 247, 234, 248, 32, 70, 161, ++ 33, 42, 70, 43, 70, 253, 247, 228, 248, 32, 70, 103, 33, 42, 70, 0, ++ 35, 253, 247, 222, 248, 32, 70, 153, 33, 50, 70, 51, 70, 253, 247, 216, ++ 248, 32, 70, 9, 33, 112, 34, 48, 35, 253, 247, 210, 248, 2, 34, 32, ++ 70, 150, 33, 19, 70, 253, 247, 204, 248, 1, 34, 32, 70, 2, 33, 19, 70, ++ 253, 247, 198, 248, 8, 34, 32, 70, 150, 33, 19, 70, 253, 247, 192, 248, ++ 32, 70, 2, 33, 79, 244, 224, 98, 79, 244, 64, 115, 253, 247, 184, 248, ++ 1, 34, 32, 70, 150, 33, 19, 70, 253, 247, 178, 248, 32, 70, 3, 33, 164, ++ 35, 64, 242, 255, 50, 253, 247, 171, 248, 4, 34, 32, 70, 150, 33, 19, ++ 70, 253, 247, 165, 248, 2, 33, 32, 70, 14, 34, 11, 70, 253, 247, 159, ++ 248, 32, 70, 2, 33, 48, 34, 0, 35, 253, 247, 153, 248, 32, 70, 111, ++ 33, 0, 35, 79, 244, 0, 82, 253, 247, 146, 248, 32, 70, 0, 35, 47, 33, ++ 79, 244, 112, 82, 253, 247, 139, 248, 156, 33, 2, 34, 32, 70, 19, 70, ++ 253, 247, 133, 248, 79, 244, 112, 98, 32, 70, 39, 33, 19, 70, 253, 247, ++ 126, 248, 64, 34, 32, 70, 157, 33, 19, 70, 253, 247, 120, 248, 32, 70, ++ 45, 33, 0, 35, 79, 244, 0, 114, 253, 247, 113, 248, 128, 34, 32, 70, ++ 157, 33, 19, 70, 253, 247, 107, 248, 32, 70, 45, 33, 0, 35, 79, 244, ++ 128, 98, 253, 247, 100, 248, 79, 244, 128, 82, 32, 70, 157, 33, 19, ++ 70, 253, 247, 93, 248, 32, 70, 43, 33, 1, 34, 0, 35, 253, 247, 87, 248, ++ 2, 34, 32, 70, 155, 33, 19, 70, 253, 247, 81, 248, 1, 34, 32, 70, 25, ++ 33, 19, 70, 253, 247, 75, 248, 4, 34, 32, 70, 156, 33, 19, 70, 253, ++ 247, 69, 248, 79, 244, 128, 82, 32, 70, 19, 70, 38, 33, 253, 247, 62, ++ 248, 8, 34, 32, 70, 156, 33, 19, 70, 253, 247, 56, 248, 1, 34, 32, 70, ++ 31, 33, 19, 70, 253, 247, 50, 248, 32, 34, 32, 70, 156, 33, 19, 70, ++ 253, 247, 44, 248, 8, 34, 32, 70, 31, 33, 19, 70, 189, 232, 240, 65, ++ 253, 247, 36, 184, 112, 181, 208, 248, 228, 96, 1, 37, 104, 33, 134, ++ 248, 144, 85, 4, 70, 252, 247, 169, 252, 162, 33, 166, 248, 146, 5, ++ 32, 70, 252, 247, 163, 252, 2, 33, 166, 248, 148, 5, 32, 70, 252, 247, ++ 157, 252, 106, 33, 166, 248, 150, 5, 32, 70, 252, 247, 151, 252, 39, ++ 33, 166, 248, 152, 5, 32, 70, 252, 247, 145, 252, 150, 33, 166, 248, ++ 154, 5, 32, 70, 252, 247, 139, 252, 153, 33, 166, 248, 156, 5, 32, 70, ++ 252, 247, 133, 252, 121, 33, 166, 248, 158, 5, 32, 70, 252, 247, 127, ++ 252, 156, 33, 166, 248, 160, 5, 32, 70, 252, 247, 121, 252, 159, 33, ++ 166, 248, 162, 5, 32, 70, 252, 247, 115, 252, 165, 33, 166, 248, 164, ++ 5, 32, 70, 252, 247, 109, 252, 157, 33, 166, 248, 166, 5, 32, 70, 252, ++ 247, 103, 252, 158, 33, 166, 248, 168, 5, 32, 70, 252, 247, 97, 252, ++ 155, 33, 166, 248, 170, 5, 32, 70, 252, 247, 91, 252, 240, 34, 166, ++ 248, 172, 5, 128, 35, 32, 70, 104, 33, 252, 247, 196, 255, 121, 33, ++ 32, 70, 32, 34, 0, 35, 252, 247, 190, 255, 32, 70, 104, 33, 0, 35, 79, ++ 244, 64, 114, 252, 247, 183, 255, 2, 34, 32, 70, 162, 33, 19, 70, 252, ++ 247, 177, 255, 2, 34, 32, 70, 104, 33, 19, 70, 252, 247, 171, 255, 32, ++ 70, 162, 33, 42, 70, 43, 70, 252, 247, 165, 255, 32, 70, 104, 33, 42, ++ 70, 0, 35, 252, 247, 159, 255, 64, 34, 32, 70, 165, 33, 19, 70, 252, ++ 247, 153, 255, 16, 34, 32, 70, 129, 33, 19, 70, 252, 247, 147, 255, ++ 32, 34, 32, 70, 165, 33, 19, 70, 252, 247, 141, 255, 32, 70, 129, 33, ++ 8, 34, 0, 35, 252, 247, 135, 255, 32, 70, 129, 33, 79, 244, 240, 114, ++ 96, 35, 252, 247, 128, 255, 32, 70, 153, 33, 42, 70, 43, 70, 252, 247, ++ 122, 255, 32, 70, 9, 33, 42, 70, 43, 70, 252, 247, 116, 255, 2, 34, ++ 32, 70, 153, 33, 19, 70, 252, 247, 110, 255, 32, 70, 9, 33, 112, 34, ++ 0, 35, 252, 247, 104, 255, 2, 34, 32, 70, 150, 33, 19, 70, 252, 247, ++ 98, 255, 32, 70, 2, 33, 42, 70, 43, 70, 252, 247, 92, 255, 4, 34, 32, ++ 70, 150, 33, 19, 70, 252, 247, 86, 255, 32, 70, 2, 33, 14, 34, 0, 35, ++ 252, 247, 80, 255, 8, 34, 32, 70, 150, 33, 19, 70, 252, 247, 74, 255, ++ 150, 248, 190, 52, 32, 70, 2, 33, 27, 2, 79, 244, 224, 98, 252, 247, ++ 65, 255, 32, 70, 150, 33, 42, 70, 43, 70, 252, 247, 59, 255, 32, 70, ++ 150, 248, 191, 52, 3, 33, 64, 242, 255, 50, 252, 247, 51, 255, 2, 34, ++ 32, 70, 156, 33, 19, 70, 252, 247, 45, 255, 79, 244, 112, 98, 32, 70, ++ 39, 33, 19, 70, 252, 247, 38, 255, 32, 70, 47, 33, 0, 35, 79, 244, 112, ++ 82, 252, 247, 31, 255, 32, 70, 111, 33, 0, 35, 79, 244, 0, 82, 252, ++ 247, 24, 255, 8, 34, 32, 70, 156, 33, 19, 70, 252, 247, 18, 255, 32, ++ 70, 31, 33, 42, 70, 43, 70, 252, 247, 12, 255, 32, 34, 32, 70, 156, ++ 33, 19, 70, 252, 247, 6, 255, 8, 34, 32, 70, 31, 33, 19, 70, 252, 247, ++ 0, 255, 128, 34, 32, 70, 159, 33, 19, 70, 252, 247, 250, 254, 32, 70, ++ 56, 33, 42, 70, 0, 35, 252, 247, 244, 254, 16, 34, 32, 70, 159, 33, ++ 19, 70, 252, 247, 238, 254, 32, 70, 61, 33, 79, 244, 0, 82, 0, 35, 252, ++ 247, 231, 254, 32, 70, 61, 33, 0, 35, 79, 244, 128, 82, 252, 247, 224, ++ 254, 79, 244, 128, 114, 32, 70, 157, 33, 19, 70, 252, 247, 217, 254, ++ 32, 70, 45, 33, 0, 35, 79, 244, 0, 98, 252, 247, 210, 254, 64, 34, 32, ++ 70, 157, 33, 19, 70, 252, 247, 204, 254, 32, 70, 45, 33, 0, 35, 79, ++ 244, 0, 114, 252, 247, 197, 254, 128, 34, 32, 70, 157, 33, 19, 70, 252, ++ 247, 191, 254, 32, 70, 45, 33, 0, 35, 79, 244, 128, 98, 252, 247, 184, ++ 254, 79, 244, 128, 82, 32, 70, 157, 33, 19, 70, 252, 247, 177, 254, ++ 32, 70, 43, 33, 42, 70, 0, 35, 252, 247, 171, 254, 64, 34, 32, 70, 159, ++ 33, 19, 70, 252, 247, 165, 254, 32, 70, 58, 33, 32, 34, 0, 35, 252, ++ 247, 159, 254, 32, 70, 158, 33, 42, 70, 43, 70, 252, 247, 153, 254, ++ 32, 70, 53, 33, 42, 70, 0, 35, 189, 232, 112, 64, 252, 247, 145, 190, ++ 112, 181, 0, 35, 4, 70, 13, 70, 79, 244, 0, 98, 157, 33, 252, 247, 136, ++ 254, 32, 70, 157, 33, 16, 34, 0, 35, 252, 247, 130, 254, 32, 70, 157, ++ 33, 8, 34, 0, 35, 252, 247, 124, 254, 32, 70, 157, 33, 4, 34, 0, 35, ++ 252, 247, 118, 254, 32, 70, 157, 33, 2, 34, 0, 35, 252, 247, 112, 254, ++ 32, 70, 157, 33, 1, 34, 0, 35, 252, 247, 106, 254, 32, 70, 157, 33, ++ 0, 35, 79, 244, 128, 66, 252, 247, 99, 254, 32, 70, 157, 33, 0, 35, ++ 79, 244, 0, 114, 252, 247, 92, 254, 32, 70, 128, 34, 0, 35, 157, 33, ++ 252, 247, 86, 254, 157, 33, 32, 70, 0, 35, 79, 244, 128, 82, 252, 247, ++ 79, 254, 32, 70, 157, 33, 0, 35, 79, 244, 0, 82, 252, 247, 72, 254, ++ 8, 34, 32, 70, 19, 70, 64, 242, 61, 81, 252, 247, 124, 254, 107, 2, ++ 32, 70, 64, 242, 60, 81, 79, 244, 240, 82, 3, 244, 126, 67, 189, 232, ++ 112, 64, 252, 247, 112, 190, 112, 181, 208, 248, 228, 96, 1, 37, 156, ++ 33, 134, 248, 254, 84, 4, 70, 252, 247, 186, 250, 164, 33, 166, 248, ++ 0, 5, 32, 70, 252, 247, 180, 250, 165, 33, 166, 248, 2, 5, 32, 70, 252, ++ 247, 174, 250, 159, 33, 166, 248, 4, 5, 32, 70, 252, 247, 168, 250, ++ 157, 33, 166, 248, 6, 5, 32, 70, 252, 247, 162, 250, 155, 33, 166, 248, ++ 8, 5, 32, 70, 252, 247, 156, 250, 2, 34, 166, 248, 10, 5, 156, 33, 32, ++ 70, 19, 70, 252, 247, 5, 254, 32, 70, 39, 33, 0, 35, 79, 244, 112, 98, ++ 252, 247, 254, 253, 32, 70, 50, 33, 0, 35, 79, 244, 0, 98, 252, 247, ++ 247, 253, 32, 70, 50, 33, 0, 35, 79, 244, 128, 98, 252, 247, 240, 253, ++ 32, 70, 164, 33, 42, 70, 43, 70, 252, 247, 234, 253, 79, 244, 128, 114, ++ 32, 70, 126, 33, 19, 70, 252, 247, 227, 253, 2, 34, 32, 70, 164, 33, ++ 19, 70, 252, 247, 221, 253, 79, 244, 128, 66, 32, 70, 19, 70, 126, 33, ++ 252, 247, 214, 253, 79, 244, 0, 114, 32, 70, 159, 33, 19, 70, 252, 247, ++ 207, 253, 32, 70, 56, 33, 4, 34, 0, 35, 252, 247, 201, 253, 79, 244, ++ 128, 98, 32, 70, 165, 33, 19, 70, 252, 247, 194, 253, 64, 34, 32, 70, ++ 128, 33, 19, 70, 252, 247, 188, 253, 79, 244, 0, 114, 32, 70, 165, 33, ++ 19, 70, 252, 247, 181, 253, 32, 34, 32, 70, 128, 33, 19, 70, 252, 247, ++ 175, 253, 32, 70, 129, 33, 42, 70, 43, 70, 252, 247, 169, 253, 4, 34, ++ 32, 70, 62, 33, 19, 70, 252, 247, 163, 253, 6, 34, 32, 70, 129, 33, ++ 19, 70, 252, 247, 157, 253, 3, 34, 32, 70, 62, 33, 19, 70, 252, 247, ++ 151, 253, 128, 34, 32, 70, 159, 33, 19, 70, 252, 247, 145, 253, 32, ++ 70, 42, 70, 56, 33, 0, 35, 252, 247, 139, 253, 79, 244, 128, 114, 32, ++ 70, 159, 33, 19, 70, 252, 247, 132, 253, 2, 34, 32, 70, 56, 33, 19, ++ 70, 252, 247, 126, 253, 16, 34, 32, 70, 159, 33, 19, 70, 252, 247, 120, ++ 253, 32, 70, 61, 33, 0, 35, 79, 244, 0, 82, 252, 247, 113, 253, 79, ++ 244, 128, 82, 32, 70, 61, 33, 19, 70, 252, 247, 106, 253, 32, 34, 32, ++ 70, 159, 33, 19, 70, 252, 247, 100, 253, 79, 244, 128, 66, 32, 70, 61, ++ 33, 19, 70, 252, 247, 93, 253, 4, 34, 32, 70, 159, 33, 19, 70, 252, ++ 247, 87, 253, 32, 34, 32, 70, 62, 33, 19, 70, 252, 247, 81, 253, 79, ++ 244, 128, 114, 32, 70, 157, 33, 19, 70, 252, 247, 74, 253, 79, 244, ++ 0, 98, 32, 70, 45, 33, 19, 70, 252, 247, 67, 253, 64, 34, 32, 70, 157, ++ 33, 19, 70, 252, 247, 61, 253, 79, 244, 0, 114, 32, 70, 19, 70, 45, ++ 33, 252, 247, 54, 253, 128, 34, 32, 70, 157, 33, 19, 70, 252, 247, 48, ++ 253, 79, 244, 128, 98, 19, 70, 32, 70, 45, 33, 252, 247, 41, 253, 32, ++ 70, 3, 33, 255, 247, 148, 254, 2, 34, 32, 70, 155, 33, 19, 70, 252, ++ 247, 31, 253, 32, 70, 25, 33, 42, 70, 43, 70, 252, 247, 25, 253, 4, ++ 34, 32, 70, 156, 33, 19, 70, 252, 247, 19, 253, 79, 244, 128, 82, 32, ++ 70, 38, 33, 19, 70, 252, 247, 12, 253, 8, 34, 32, 70, 156, 33, 19, 70, ++ 252, 247, 6, 253, 32, 70, 31, 33, 42, 70, 43, 70, 252, 247, 0, 253, ++ 32, 34, 32, 70, 156, 33, 19, 70, 252, 247, 250, 252, 8, 34, 32, 70, ++ 31, 33, 19, 70, 189, 232, 112, 64, 252, 247, 242, 188, 1, 34, 16, 181, ++ 12, 33, 4, 70, 19, 70, 252, 247, 235, 252, 32, 70, 29, 33, 32, 34, 0, ++ 35, 252, 247, 229, 252, 32, 70, 10, 33, 0, 35, 79, 246, 255, 114, 252, ++ 247, 222, 252, 32, 70, 11, 33, 0, 35, 79, 246, 255, 114, 252, 247, 215, ++ 252, 32, 70, 10, 33, 0, 35, 79, 246, 255, 114, 252, 247, 208, 252, 32, ++ 70, 11, 33, 0, 35, 79, 246, 255, 114, 252, 247, 201, 252, 32, 70, 104, ++ 33, 240, 34, 0, 35, 252, 247, 195, 252, 32, 70, 121, 33, 32, 34, 0, ++ 35, 252, 247, 189, 252, 32, 70, 104, 33, 4, 34, 0, 35, 189, 232, 16, ++ 64, 252, 247, 181, 188, 45, 233, 240, 71, 4, 70, 208, 248, 228, 0, 176, ++ 248, 174, 85, 176, 248, 176, 197, 0, 32, 73, 78, 134, 87, 150, 66, 4, ++ 208, 1, 48, 15, 40, 248, 209, 189, 232, 240, 135, 0, 235, 1, 16, 69, ++ 74, 64, 26, 50, 248, 16, 112, 68, 74, 111, 67, 50, 248, 17, 96, 67, ++ 74, 110, 67, 50, 248, 16, 128, 66, 74, 5, 251, 8, 248, 50, 248, 16, ++ 144, 64, 74, 32, 70, 50, 248, 19, 160, 63, 75, 16, 34, 5, 251, 9, 249, ++ 51, 248, 17, 80, 163, 33, 19, 70, 12, 251, 10, 250, 252, 247, 127, 252, ++ 8, 34, 32, 70, 163, 33, 19, 70, 252, 247, 121, 252, 4, 34, 32, 70, 163, ++ 33, 19, 70, 252, 247, 115, 252, 1, 34, 32, 70, 163, 33, 19, 70, 252, ++ 247, 109, 252, 2, 34, 32, 70, 163, 33, 19, 70, 252, 247, 103, 252, 255, ++ 19, 79, 244, 0, 82, 32, 70, 163, 33, 19, 70, 191, 178, 246, 19, 252, ++ 247, 93, 252, 182, 178, 32, 70, 114, 33, 59, 70, 65, 246, 255, 114, ++ 79, 234, 232, 56, 252, 247, 83, 252, 31, 250, 136, 248, 32, 70, 118, ++ 33, 51, 70, 65, 246, 255, 114, 79, 234, 233, 57, 252, 247, 72, 252, ++ 31, 250, 137, 249, 32, 70, 115, 33, 67, 70, 65, 246, 255, 114, 79, 234, ++ 234, 58, 252, 247, 61, 252, 31, 250, 138, 250, 32, 70, 116, 33, 75, ++ 70, 65, 246, 255, 114, 252, 247, 52, 252, 32, 70, 117, 33, 83, 70, 64, ++ 242, 255, 18, 252, 247, 45, 252, 32, 70, 43, 70, 119, 33, 255, 34, 252, ++ 247, 39, 252, 32, 70, 113, 33, 0, 35, 79, 244, 128, 82, 252, 247, 32, ++ 252, 32, 70, 114, 33, 79, 244, 0, 82, 0, 35, 189, 232, 240, 71, 252, ++ 247, 23, 188, 220, 69, 4, 0, 88, 67, 4, 0, 12, 68, 4, 0, 24, 68, 4, ++ 0, 40, 69, 4, 0, 236, 69, 4, 0, 28, 69, 4, 0, 112, 181, 8, 34, 4, 70, ++ 13, 70, 0, 35, 156, 33, 252, 247, 1, 252, 32, 70, 156, 33, 4, 34, 0, ++ 35, 252, 247, 251, 251, 32, 70, 31, 33, 224, 34, 128, 35, 252, 247, ++ 245, 251, 32, 70, 38, 33, 0, 35, 79, 244, 0, 98, 252, 247, 238, 251, ++ 32, 70, 36, 33, 255, 34, 16, 35, 252, 247, 232, 251, 32, 70, 36, 33, ++ 79, 244, 127, 66, 79, 244, 0, 99, 252, 247, 224, 251, 32, 70, 37, 33, ++ 255, 34, 8, 35, 252, 247, 218, 251, 32, 70, 37, 33, 79, 244, 127, 66, ++ 79, 244, 0, 99, 252, 247, 210, 251, 32, 70, 38, 33, 79, 244, 64, 114, ++ 79, 244, 128, 115, 252, 247, 202, 251, 32, 70, 255, 34, 64, 35, 38, ++ 33, 252, 247, 196, 251, 32, 33, 32, 70, 127, 34, 43, 136, 252, 247, ++ 190, 251, 32, 70, 33, 33, 127, 34, 107, 136, 252, 247, 184, 251, 171, ++ 136, 32, 70, 27, 2, 33, 33, 79, 244, 254, 66, 3, 244, 127, 67, 252, ++ 247, 174, 251, 32, 70, 34, 33, 127, 34, 235, 136, 252, 247, 168, 251, ++ 32, 70, 40, 33, 127, 34, 171, 137, 252, 247, 162, 251, 235, 137, 32, ++ 70, 27, 2, 40, 33, 79, 244, 254, 66, 3, 244, 127, 67, 252, 247, 152, ++ 251, 32, 70, 41, 33, 127, 34, 43, 138, 252, 247, 146, 251, 107, 138, ++ 79, 244, 127, 66, 27, 2, 32, 70, 41, 33, 19, 64, 252, 247, 137, 251, ++ 43, 137, 32, 70, 27, 2, 35, 33, 79, 244, 254, 66, 3, 244, 127, 67, 252, ++ 247, 127, 251, 32, 70, 35, 33, 127, 34, 107, 137, 252, 247, 121, 251, ++ 171, 138, 32, 70, 27, 2, 34, 33, 79, 244, 254, 66, 3, 244, 127, 67, ++ 252, 247, 111, 251, 42, 33, 32, 70, 79, 244, 248, 82, 79, 244, 0, 115, ++ 252, 247, 103, 251, 32, 70, 42, 33, 79, 244, 192, 66, 79, 244, 0, 83, ++ 252, 247, 95, 251, 16, 34, 32, 70, 156, 33, 19, 70, 252, 247, 89, 251, ++ 4, 34, 32, 70, 31, 33, 19, 70, 252, 247, 83, 251, 32, 70, 31, 33, 4, ++ 34, 0, 35, 252, 247, 77, 251, 32, 70, 156, 33, 16, 34, 0, 35, 189, 232, ++ 112, 64, 252, 247, 69, 187, 16, 181, 208, 248, 228, 48, 134, 176, 4, ++ 70, 179, 248, 180, 21, 106, 70, 254, 247, 88, 250, 32, 70, 105, 70, ++ 255, 247, 46, 255, 6, 176, 16, 189, 56, 181, 208, 248, 228, 64, 0, 35, ++ 5, 70, 132, 248, 216, 53, 161, 33, 180, 248, 218, 37, 251, 247, 201, ++ 255, 40, 70, 103, 33, 180, 248, 220, 37, 251, 247, 195, 255, 40, 70, ++ 153, 33, 180, 248, 222, 37, 251, 247, 189, 255, 40, 70, 9, 33, 180, ++ 248, 224, 37, 251, 247, 183, 255, 40, 70, 150, 33, 180, 248, 226, 37, ++ 251, 247, 177, 255, 40, 70, 2, 33, 180, 248, 228, 37, 251, 247, 171, ++ 255, 40, 70, 3, 33, 180, 248, 230, 37, 251, 247, 165, 255, 40, 70, 156, ++ 33, 180, 248, 232, 37, 251, 247, 159, 255, 40, 70, 39, 33, 180, 248, ++ 234, 37, 251, 247, 153, 255, 40, 70, 111, 33, 180, 248, 236, 37, 251, ++ 247, 147, 255, 40, 70, 157, 33, 180, 248, 238, 37, 251, 247, 141, 255, ++ 40, 70, 49, 33, 180, 248, 240, 37, 251, 247, 135, 255, 40, 70, 50, 33, ++ 180, 248, 242, 37, 251, 247, 129, 255, 40, 70, 155, 33, 180, 248, 244, ++ 37, 251, 247, 123, 255, 40, 70, 166, 33, 180, 248, 246, 37, 251, 247, ++ 117, 255, 40, 70, 180, 248, 248, 37, 47, 33, 251, 247, 111, 255, 48, ++ 33, 40, 70, 180, 248, 250, 37, 251, 247, 105, 255, 40, 70, 43, 33, 180, ++ 248, 252, 37, 251, 247, 99, 255, 40, 70, 25, 33, 180, 248, 254, 37, ++ 251, 247, 93, 255, 180, 248, 0, 38, 40, 70, 136, 33, 189, 232, 56, 64, ++ 251, 247, 85, 191, 56, 181, 208, 248, 228, 64, 0, 35, 5, 70, 132, 248, ++ 144, 53, 104, 33, 180, 248, 146, 37, 251, 247, 73, 255, 40, 70, 162, ++ 33, 180, 248, 148, 37, 251, 247, 67, 255, 40, 70, 2, 33, 180, 248, 150, ++ 37, 251, 247, 61, 255, 40, 70, 106, 33, 180, 248, 152, 37, 251, 247, ++ 55, 255, 40, 70, 39, 33, 180, 248, 154, 37, 251, 247, 49, 255, 40, 70, ++ 150, 33, 180, 248, 156, 37, 251, 247, 43, 255, 40, 70, 153, 33, 180, ++ 248, 158, 37, 251, 247, 37, 255, 40, 70, 121, 33, 180, 248, 160, 37, ++ 251, 247, 31, 255, 40, 70, 156, 33, 180, 248, 162, 37, 251, 247, 25, ++ 255, 40, 70, 159, 33, 180, 248, 164, 37, 251, 247, 19, 255, 40, 70, ++ 165, 33, 180, 248, 166, 37, 251, 247, 13, 255, 40, 70, 157, 33, 180, ++ 248, 168, 37, 251, 247, 7, 255, 40, 70, 158, 33, 180, 248, 170, 37, ++ 251, 247, 1, 255, 180, 248, 172, 37, 40, 70, 155, 33, 189, 232, 56, ++ 64, 251, 247, 249, 190, 112, 181, 208, 248, 228, 96, 0, 37, 4, 70, 156, ++ 33, 182, 248, 0, 37, 134, 248, 254, 84, 251, 247, 237, 254, 32, 70, ++ 164, 33, 182, 248, 2, 37, 251, 247, 231, 254, 32, 70, 165, 33, 182, ++ 248, 4, 37, 251, 247, 225, 254, 32, 70, 159, 33, 182, 248, 6, 37, 251, ++ 247, 219, 254, 32, 70, 157, 33, 182, 248, 8, 37, 251, 247, 213, 254, ++ 32, 70, 155, 33, 182, 248, 10, 37, 251, 247, 207, 254, 32, 70, 129, ++ 33, 1, 34, 43, 70, 252, 247, 41, 250, 32, 70, 62, 33, 4, 34, 43, 70, ++ 252, 247, 35, 250, 32, 70, 61, 33, 79, 244, 128, 82, 43, 70, 189, 232, ++ 112, 64, 252, 247, 26, 186, 16, 181, 138, 33, 4, 70, 251, 247, 164, ++ 254, 64, 244, 128, 114, 138, 33, 32, 70, 146, 178, 251, 247, 174, 254, ++ 32, 70, 27, 33, 0, 35, 79, 244, 224, 98, 252, 247, 7, 250, 81, 33, 1, ++ 34, 0, 35, 32, 70, 252, 247, 1, 250, 1, 32, 214, 243, 99, 246, 1, 34, ++ 32, 70, 81, 33, 19, 70, 252, 247, 248, 249, 79, 244, 128, 114, 32, 70, ++ 160, 33, 19, 70, 252, 247, 241, 249, 32, 70, 66, 33, 16, 34, 0, 35, ++ 252, 247, 235, 249, 79, 244, 0, 114, 32, 70, 160, 33, 19, 70, 252, 247, ++ 228, 249, 66, 33, 32, 34, 0, 35, 32, 70, 252, 247, 222, 249, 1, 32, ++ 214, 243, 64, 246, 16, 34, 32, 70, 19, 70, 66, 33, 252, 247, 213, 249, ++ 66, 33, 32, 34, 19, 70, 32, 70, 252, 247, 207, 249, 1, 32, 214, 243, ++ 49, 246, 128, 34, 32, 70, 66, 33, 19, 70, 252, 247, 198, 249, 64, 34, ++ 66, 33, 19, 70, 32, 70, 252, 247, 192, 249, 1, 32, 214, 243, 34, 246, ++ 32, 70, 66, 33, 128, 34, 0, 35, 252, 247, 183, 249, 32, 70, 66, 33, ++ 64, 34, 0, 35, 252, 247, 177, 249, 50, 32, 189, 232, 16, 64, 214, 243, ++ 17, 182, 112, 181, 4, 70, 14, 70, 100, 37, 10, 32, 214, 243, 10, 246, ++ 101, 33, 32, 70, 251, 247, 48, 254, 193, 7, 3, 212, 1, 61, 237, 178, ++ 0, 45, 242, 209, 1, 46, 2, 209, 100, 32, 214, 243, 251, 245, 138, 33, ++ 32, 70, 251, 247, 33, 254, 79, 246, 255, 98, 2, 64, 138, 33, 32, 70, ++ 189, 232, 112, 64, 251, 247, 41, 190, 56, 181, 208, 248, 228, 48, 1, ++ 57, 211, 248, 32, 54, 66, 37, 5, 251, 1, 53, 4, 70, 98, 33, 170, 136, ++ 251, 247, 27, 254, 32, 70, 83, 33, 234, 136, 251, 247, 22, 254, 32, ++ 70, 84, 33, 42, 137, 251, 247, 17, 254, 32, 70, 87, 33, 106, 137, 251, ++ 247, 12, 254, 32, 70, 88, 33, 170, 137, 251, 247, 7, 254, 32, 70, 100, ++ 33, 234, 137, 251, 247, 2, 254, 32, 70, 81, 33, 42, 138, 251, 247, 253, ++ 253, 32, 70, 92, 33, 106, 138, 251, 247, 248, 253, 32, 70, 93, 33, 170, ++ 138, 251, 247, 243, 253, 32, 70, 90, 33, 234, 138, 251, 247, 238, 253, ++ 32, 70, 91, 33, 42, 139, 251, 247, 233, 253, 32, 70, 99, 33, 106, 139, ++ 251, 247, 228, 253, 32, 70, 86, 33, 170, 139, 251, 247, 223, 253, 32, ++ 70, 89, 33, 234, 139, 251, 247, 218, 253, 32, 70, 97, 33, 42, 140, 251, ++ 247, 213, 253, 32, 70, 106, 140, 85, 33, 251, 247, 208, 253, 32, 70, ++ 95, 33, 170, 140, 251, 247, 203, 253, 32, 70, 82, 33, 234, 140, 251, ++ 247, 198, 253, 32, 70, 78, 33, 42, 141, 251, 247, 193, 253, 32, 70, ++ 79, 33, 106, 141, 251, 247, 188, 253, 32, 70, 77, 33, 170, 141, 251, ++ 247, 183, 253, 32, 70, 76, 33, 234, 141, 251, 247, 178, 253, 32, 70, ++ 74, 33, 42, 142, 251, 247, 173, 253, 32, 70, 75, 33, 106, 142, 251, ++ 247, 168, 253, 32, 70, 72, 33, 170, 142, 251, 247, 163, 253, 32, 70, ++ 73, 33, 234, 142, 251, 247, 158, 253, 32, 70, 69, 33, 42, 143, 251, ++ 247, 153, 253, 32, 70, 70, 33, 106, 143, 251, 247, 148, 253, 32, 70, ++ 24, 33, 170, 143, 251, 247, 143, 253, 32, 70, 60, 33, 234, 143, 251, ++ 247, 138, 253, 32, 70, 134, 33, 181, 248, 64, 32, 251, 247, 132, 253, ++ 32, 70, 61, 33, 79, 244, 128, 82, 0, 35, 252, 247, 221, 248, 32, 70, ++ 113, 33, 0, 35, 79, 244, 128, 82, 252, 247, 214, 248, 114, 33, 32, 70, ++ 79, 244, 0, 82, 0, 35, 252, 247, 207, 248, 32, 70, 255, 247, 178, 254, ++ 32, 70, 1, 33, 189, 232, 56, 64, 255, 247, 26, 191, 0, 0, 45, 233, 240, ++ 65, 105, 75, 134, 176, 25, 136, 154, 120, 173, 248, 12, 16, 141, 248, ++ 14, 32, 26, 70, 50, 248, 3, 31, 4, 70, 146, 120, 173, 248, 16, 16, 141, ++ 248, 18, 32, 26, 70, 50, 248, 6, 31, 212, 248, 228, 96, 146, 120, 173, ++ 248, 20, 16, 141, 248, 22, 32, 83, 248, 10, 15, 138, 33, 155, 136, 1, ++ 144, 32, 70, 173, 248, 8, 48, 251, 247, 45, 253, 0, 244, 254, 99, 138, ++ 33, 32, 70, 79, 244, 254, 98, 67, 244, 136, 67, 252, 247, 148, 248, ++ 13, 241, 2, 7, 0, 37, 3, 171, 235, 92, 32, 70, 30, 33, 64, 34, 155, ++ 1, 252, 247, 137, 248, 4, 171, 235, 92, 32, 70, 30, 33, 48, 34, 27, ++ 1, 252, 247, 129, 248, 5, 171, 235, 92, 32, 70, 143, 33, 79, 244, 127, ++ 66, 27, 2, 252, 247, 120, 248, 32, 70, 144, 33, 65, 246, 255, 114, 55, ++ 248, 2, 63, 252, 247, 112, 248, 30, 33, 1, 34, 0, 35, 32, 70, 252, 247, ++ 106, 248, 1, 32, 214, 243, 204, 244, 1, 34, 19, 70, 30, 33, 32, 70, ++ 252, 247, 97, 248, 35, 32, 214, 243, 195, 244, 1, 34, 32, 70, 143, 33, ++ 19, 70, 252, 247, 88, 248, 79, 240, 100, 8, 100, 32, 8, 241, 255, 56, ++ 214, 243, 182, 244, 31, 250, 136, 248, 32, 70, 145, 33, 251, 247, 218, ++ 252, 184, 241, 0, 15, 1, 208, 192, 7, 239, 213, 0, 35, 1, 34, 143, 33, ++ 32, 70, 252, 247, 64, 248, 146, 33, 32, 70, 251, 247, 203, 252, 147, ++ 33, 128, 70, 32, 70, 251, 247, 198, 252, 79, 234, 200, 72, 192, 4, 192, ++ 12, 79, 234, 216, 72, 21, 240, 255, 15, 200, 235, 0, 8, 212, 248, 128, ++ 49, 10, 209, 30, 72, 27, 11, 0, 251, 8, 248, 184, 251, 243, 248, 166, ++ 248, 174, 133, 166, 248, 176, 133, 7, 224, 25, 72, 27, 11, 0, 251, 8, ++ 248, 184, 251, 243, 248, 166, 248, 180, 133, 30, 33, 1, 34, 0, 35, 32, ++ 70, 1, 53, 252, 247, 16, 248, 2, 45, 127, 244, 124, 175, 148, 33, 32, ++ 70, 251, 247, 152, 252, 0, 244, 120, 112, 64, 17, 134, 248, 178, 5, ++ 163, 33, 32, 70, 79, 244, 128, 114, 0, 35, 251, 247, 253, 255, 138, ++ 33, 32, 70, 251, 247, 136, 252, 79, 246, 255, 50, 2, 64, 138, 33, 32, ++ 70, 6, 176, 189, 232, 240, 65, 251, 247, 143, 188, 40, 22, 4, 0, 165, ++ 140, 1, 0, 163, 142, 1, 0, 248, 181, 169, 33, 6, 70, 14, 77, 0, 224, ++ 33, 70, 76, 28, 164, 178, 48, 70, 21, 248, 1, 43, 251, 247, 124, 252, ++ 221, 44, 245, 209, 9, 77, 0, 224, 60, 70, 103, 28, 48, 70, 33, 70, 53, ++ 248, 2, 43, 251, 247, 112, 252, 191, 178, 64, 242, 21, 19, 159, 66, ++ 242, 209, 248, 189, 0, 191, 204, 68, 4, 0, 142, 72, 4, 0, 203, 75, 208, ++ 248, 128, 33, 140, 33, 154, 66, 79, 240, 1, 2, 16, 181, 12, 191, 19, ++ 70, 0, 35, 4, 70, 251, 247, 183, 255, 64, 34, 32, 70, 155, 33, 19, 70, ++ 251, 247, 177, 255, 128, 34, 32, 70, 25, 33, 19, 70, 251, 247, 171, ++ 255, 16, 34, 32, 70, 155, 33, 19, 70, 251, 247, 165, 255, 8, 34, 25, ++ 33, 19, 70, 32, 70, 251, 247, 159, 255, 100, 32, 214, 243, 1, 244, 1, ++ 34, 32, 70, 167, 33, 19, 70, 251, 247, 150, 255, 1, 34, 32, 70, 137, ++ 33, 19, 70, 251, 247, 144, 255, 1, 34, 32, 70, 151, 33, 19, 70, 251, ++ 247, 138, 255, 1, 34, 4, 33, 19, 70, 32, 70, 251, 247, 132, 255, 20, ++ 32, 214, 243, 230, 243, 32, 34, 32, 70, 19, 70, 155, 33, 251, 247, 123, ++ 255, 155, 33, 8, 34, 32, 70, 19, 70, 251, 247, 117, 255, 4, 34, 32, ++ 70, 155, 33, 19, 70, 251, 247, 111, 255, 2, 34, 32, 70, 155, 33, 19, ++ 70, 251, 247, 105, 255, 16, 34, 32, 70, 25, 33, 19, 70, 251, 247, 99, ++ 255, 4, 34, 32, 70, 25, 33, 19, 70, 251, 247, 93, 255, 2, 34, 32, 70, ++ 25, 33, 19, 70, 251, 247, 87, 255, 1, 34, 25, 33, 19, 70, 32, 70, 251, ++ 247, 81, 255, 200, 32, 214, 243, 179, 243, 1, 34, 32, 70, 67, 33, 19, ++ 70, 251, 247, 72, 255, 32, 70, 81, 33, 1, 34, 0, 35, 251, 247, 66, 255, ++ 32, 34, 32, 70, 19, 70, 160, 33, 251, 247, 60, 255, 66, 33, 2, 34, 32, ++ 70, 19, 70, 251, 247, 54, 255, 64, 34, 32, 70, 160, 33, 19, 70, 251, ++ 247, 48, 255, 4, 34, 32, 70, 66, 33, 19, 70, 251, 247, 42, 255, 16, ++ 34, 32, 70, 160, 33, 19, 70, 251, 247, 36, 255, 1, 34, 32, 70, 66, 33, ++ 19, 70, 251, 247, 30, 255, 128, 34, 32, 70, 160, 33, 19, 70, 251, 247, ++ 24, 255, 8, 34, 32, 70, 66, 33, 19, 70, 251, 247, 18, 255, 4, 34, 32, ++ 70, 151, 33, 19, 70, 251, 247, 12, 255, 32, 70, 4, 33, 240, 34, 112, ++ 35, 251, 247, 6, 255, 0, 35, 32, 70, 151, 33, 2, 34, 251, 247, 0, 255, ++ 32, 70, 138, 33, 251, 247, 139, 251, 79, 246, 255, 82, 2, 64, 138, 33, ++ 32, 70, 251, 247, 149, 251, 32, 70, 255, 247, 45, 254, 32, 70, 255, ++ 247, 170, 251, 32, 70, 8, 33, 240, 34, 64, 35, 251, 247, 233, 254, 8, ++ 33, 32, 70, 14, 34, 11, 70, 251, 247, 227, 254, 79, 244, 0, 114, 32, ++ 70, 111, 33, 19, 70, 251, 247, 220, 254, 32, 70, 111, 33, 0, 35, 79, ++ 244, 64, 98, 251, 247, 213, 254, 2, 34, 32, 70, 4, 33, 19, 70, 251, ++ 247, 207, 254, 108, 33, 48, 34, 16, 35, 32, 70, 251, 247, 201, 254, ++ 32, 70, 255, 247, 221, 254, 79, 244, 64, 114, 32, 70, 137, 33, 19, 70, ++ 251, 247, 191, 254, 32, 70, 24, 33, 7, 34, 0, 35, 251, 247, 185, 254, ++ 32, 70, 24, 33, 112, 34, 0, 35, 251, 247, 179, 254, 32, 70, 23, 33, ++ 224, 34, 64, 35, 251, 247, 173, 254, 79, 244, 224, 98, 32, 70, 23, 33, ++ 19, 70, 251, 247, 166, 254, 32, 70, 141, 33, 240, 34, 16, 35, 251, 247, ++ 160, 254, 32, 70, 121, 33, 32, 34, 0, 35, 251, 247, 154, 254, 32, 70, ++ 121, 33, 16, 34, 0, 35, 251, 247, 148, 254, 32, 70, 121, 33, 8, 34, ++ 0, 35, 251, 247, 142, 254, 32, 70, 122, 33, 79, 244, 127, 66, 79, 244, ++ 64, 83, 251, 247, 134, 254, 240, 34, 32, 70, 122, 33, 19, 70, 251, 247, ++ 128, 254, 32, 70, 15, 34, 0, 35, 122, 33, 251, 247, 122, 254, 124, 33, ++ 32, 70, 63, 34, 25, 35, 251, 247, 116, 254, 32, 70, 124, 33, 79, 244, ++ 124, 82, 79, 244, 200, 83, 251, 247, 108, 254, 32, 70, 125, 33, 0, 35, ++ 79, 244, 240, 98, 251, 247, 101, 254, 32, 70, 125, 33, 63, 34, 33, 35, ++ 251, 247, 95, 254, 32, 70, 131, 33, 62, 34, 42, 35, 251, 247, 89, 254, ++ 32, 70, 135, 33, 0, 35, 79, 244, 112, 66, 251, 247, 82, 254, 32, 70, ++ 135, 33, 79, 244, 124, 98, 79, 244, 32, 99, 251, 247, 74, 254, 32, 70, ++ 135, 33, 63, 34, 22, 35, 251, 247, 68, 254, 32, 70, 123, 33, 79, 244, ++ 224, 98, 79, 244, 128, 99, 251, 247, 60, 254, 32, 70, 123, 33, 64, 35, ++ 112, 34, 251, 247, 54, 254, 32, 70, 123, 33, 3, 34, 1, 35, 251, 247, ++ 48, 254, 32, 70, 30, 33, 1, 224, 192, 173, 58, 2, 128, 34, 0, 35, 189, ++ 232, 16, 64, 251, 247, 37, 190, 45, 233, 240, 79, 151, 176, 3, 146, ++ 144, 34, 0, 37, 26, 128, 14, 70, 64, 242, 218, 97, 4, 70, 152, 70, 14, ++ 149, 15, 149, 16, 149, 251, 247, 202, 250, 64, 246, 172, 17, 131, 70, ++ 32, 70, 251, 247, 196, 250, 64, 246, 121, 17, 130, 70, 32, 70, 251, ++ 247, 190, 250, 41, 70, 18, 170, 129, 70, 32, 70, 254, 247, 49, 251, ++ 32, 34, 19, 70, 32, 70, 64, 242, 218, 97, 251, 247, 54, 254, 79, 244, ++ 128, 114, 19, 70, 32, 70, 64, 242, 218, 97, 251, 247, 46, 254, 32, 70, ++ 64, 246, 121, 17, 79, 244, 255, 114, 43, 70, 251, 247, 38, 254, 1, 34, ++ 19, 70, 32, 70, 64, 246, 121, 17, 251, 247, 31, 254, 32, 70, 64, 246, ++ 172, 17, 79, 244, 112, 114, 179, 1, 251, 247, 23, 254, 1, 34, 19, 70, ++ 32, 70, 64, 246, 172, 17, 251, 247, 16, 254, 32, 70, 2, 33, 42, 70, ++ 254, 247, 255, 250, 10, 39, 0, 35, 0, 147, 1, 147, 79, 244, 0, 114, ++ 32, 35, 32, 70, 14, 169, 254, 247, 102, 250, 16, 154, 15, 155, 211, ++ 24, 8, 208, 22, 170, 2, 235, 133, 1, 1, 53, 173, 178, 10, 45, 65, 248, ++ 72, 60, 3, 208, 1, 63, 191, 178, 0, 47, 228, 209, 1, 33, 32, 70, 18, ++ 170, 254, 247, 222, 250, 32, 70, 64, 246, 121, 17, 74, 70, 251, 247, ++ 106, 250, 32, 70, 64, 246, 172, 17, 82, 70, 251, 247, 100, 250, 32, ++ 70, 64, 242, 218, 97, 90, 70, 251, 247, 94, 250, 9, 45, 75, 217, 4, ++ 171, 24, 70, 1, 34, 65, 104, 4, 175, 0, 37, 87, 248, 4, 235, 113, 69, ++ 156, 191, 71, 248, 4, 28, 113, 70, 1, 53, 173, 178, 15, 250, 133, 252, ++ 15, 250, 130, 254, 244, 69, 240, 219, 1, 50, 146, 178, 10, 42, 64, 248, ++ 4, 31, 231, 209, 3, 241, 32, 1, 0, 34, 83, 248, 4, 15, 139, 66, 2, 68, ++ 250, 209, 3, 155, 6, 235, 70, 6, 15, 62, 2, 245, 0, 98, 18, 11, 3, 235, ++ 134, 6, 0, 35, 18, 2, 0, 147, 20, 171, 17, 146, 1, 147, 32, 70, 21, ++ 170, 19, 171, 17, 169, 173, 248, 80, 96, 252, 247, 134, 252, 189, 248, ++ 76, 0, 10, 75, 2, 178, 155, 26, 0, 43, 184, 191, 91, 66, 24, 43, 7, ++ 216, 189, 248, 80, 48, 195, 24, 3, 245, 135, 115, 168, 248, 0, 48, 1, ++ 224, 79, 246, 120, 96, 0, 178, 23, 176, 189, 232, 240, 143, 120, 254, ++ 255, 255, 45, 233, 255, 65, 14, 70, 64, 246, 165, 17, 4, 70, 251, 247, ++ 245, 249, 2, 34, 19, 70, 128, 70, 64, 246, 165, 17, 32, 70, 251, 247, ++ 114, 253, 179, 104, 33, 43, 28, 209, 32, 70, 64, 242, 116, 81, 251, ++ 247, 229, 249, 64, 242, 117, 81, 7, 70, 32, 70, 251, 247, 223, 249, ++ 79, 244, 128, 66, 19, 70, 5, 70, 64, 242, 116, 81, 32, 70, 251, 247, ++ 91, 253, 79, 244, 128, 98, 32, 70, 64, 242, 117, 81, 19, 70, 251, 247, ++ 83, 253, 1, 224, 0, 37, 47, 70, 64, 242, 87, 66, 1, 146, 64, 242, 86, ++ 66, 14, 35, 2, 146, 32, 70, 13, 34, 49, 70, 0, 147, 251, 247, 224, 254, ++ 179, 104, 33, 43, 11, 209, 32, 70, 64, 242, 116, 81, 58, 70, 251, 247, ++ 192, 249, 32, 70, 64, 242, 117, 81, 42, 70, 251, 247, 186, 249, 32, ++ 70, 64, 246, 165, 17, 66, 70, 4, 176, 189, 232, 240, 65, 251, 247, 177, ++ 185, 127, 181, 0, 35, 173, 248, 22, 48, 2, 147, 16, 35, 4, 147, 13, ++ 241, 22, 3, 0, 147, 1, 35, 1, 147, 105, 70, 98, 35, 3, 147, 255, 247, ++ 152, 255, 189, 248, 22, 0, 7, 176, 0, 189, 127, 181, 13, 241, 22, 3, ++ 0, 147, 1, 35, 1, 147, 0, 35, 2, 147, 99, 35, 3, 147, 105, 70, 8, 35, ++ 4, 147, 255, 247, 133, 255, 157, 248, 22, 0, 7, 176, 0, 189, 56, 181, ++ 208, 248, 228, 64, 1, 35, 132, 248, 114, 53, 5, 70, 255, 247, 228, 255, ++ 64, 246, 165, 17, 132, 248, 115, 5, 40, 70, 251, 247, 110, 249, 64, ++ 242, 164, 65, 164, 248, 116, 5, 40, 70, 251, 247, 103, 249, 64, 246, ++ 172, 17, 164, 248, 118, 5, 40, 70, 251, 247, 96, 249, 64, 242, 218, ++ 97, 164, 248, 120, 5, 40, 70, 251, 247, 89, 249, 64, 242, 116, 81, 164, ++ 248, 122, 5, 40, 70, 251, 247, 82, 249, 64, 242, 117, 81, 164, 248, ++ 124, 5, 40, 70, 251, 247, 75, 249, 64, 242, 75, 65, 164, 248, 126, 5, ++ 40, 70, 251, 247, 68, 249, 64, 242, 76, 65, 164, 248, 128, 5, 40, 70, ++ 251, 247, 61, 249, 64, 242, 77, 65, 164, 248, 132, 5, 40, 70, 251, 247, ++ 54, 249, 64, 246, 56, 17, 164, 248, 134, 5, 40, 70, 251, 247, 47, 249, ++ 64, 246, 57, 17, 164, 248, 136, 5, 40, 70, 251, 247, 40, 249, 64, 246, ++ 7, 1, 164, 248, 138, 5, 40, 70, 251, 247, 33, 249, 164, 248, 142, 5, ++ 56, 189, 112, 181, 208, 248, 228, 80, 1, 38, 121, 33, 133, 248, 254, ++ 100, 133, 248, 12, 101, 4, 70, 251, 247, 235, 248, 122, 33, 165, 248, ++ 14, 5, 32, 70, 251, 247, 229, 248, 61, 33, 165, 248, 16, 5, 32, 70, ++ 251, 247, 223, 248, 165, 33, 165, 248, 22, 5, 32, 70, 251, 247, 217, ++ 248, 111, 33, 165, 248, 24, 5, 32, 70, 251, 247, 211, 248, 47, 33, 165, ++ 248, 26, 5, 32, 70, 251, 247, 205, 248, 39, 33, 165, 248, 28, 5, 32, ++ 70, 251, 247, 199, 248, 50, 33, 165, 248, 30, 5, 32, 70, 251, 247, 193, ++ 248, 126, 33, 165, 248, 32, 5, 32, 70, 251, 247, 187, 248, 56, 33, 165, ++ 248, 34, 5, 32, 70, 251, 247, 181, 248, 128, 33, 165, 248, 36, 5, 32, ++ 70, 251, 247, 175, 248, 129, 33, 165, 248, 38, 5, 32, 70, 251, 247, ++ 169, 248, 62, 33, 165, 248, 40, 5, 32, 70, 251, 247, 163, 248, 45, 33, ++ 165, 248, 42, 5, 32, 70, 251, 247, 157, 248, 25, 33, 165, 248, 44, 5, ++ 32, 70, 251, 247, 151, 248, 38, 33, 165, 248, 46, 5, 32, 70, 251, 247, ++ 145, 248, 31, 33, 165, 248, 48, 5, 32, 70, 251, 247, 139, 248, 124, ++ 33, 165, 248, 50, 5, 32, 70, 251, 247, 133, 248, 125, 33, 165, 248, ++ 18, 5, 32, 70, 251, 247, 127, 248, 5, 245, 166, 97, 4, 49, 165, 248, ++ 20, 5, 32, 70, 253, 247, 242, 253, 32, 70, 255, 247, 10, 255, 165, 248, ++ 62, 5, 32, 70, 253, 247, 8, 254, 111, 33, 165, 248, 60, 5, 0, 35, 32, ++ 70, 79, 244, 0, 82, 251, 247, 215, 251, 0, 35, 79, 244, 112, 82, 32, ++ 70, 47, 33, 251, 247, 208, 251, 156, 33, 32, 70, 251, 247, 91, 248, ++ 164, 33, 165, 248, 0, 5, 32, 70, 251, 247, 85, 248, 159, 33, 165, 248, ++ 2, 5, 32, 70, 251, 247, 79, 248, 157, 33, 165, 248, 6, 5, 32, 70, 251, ++ 247, 73, 248, 155, 33, 165, 248, 8, 5, 32, 70, 251, 247, 67, 248, 2, ++ 34, 165, 248, 10, 5, 156, 33, 32, 70, 19, 70, 251, 247, 172, 251, 32, ++ 70, 39, 33, 79, 244, 112, 98, 0, 35, 251, 247, 165, 251, 32, 70, 50, ++ 33, 79, 244, 0, 98, 0, 35, 251, 247, 158, 251, 32, 70, 50, 33, 0, 35, ++ 79, 244, 128, 98, 251, 247, 151, 251, 32, 70, 164, 33, 50, 70, 51, 70, ++ 251, 247, 145, 251, 79, 244, 128, 114, 32, 70, 126, 33, 19, 70, 251, ++ 247, 138, 251, 2, 34, 32, 70, 164, 33, 19, 70, 251, 247, 132, 251, 79, ++ 244, 128, 66, 32, 70, 126, 33, 19, 70, 251, 247, 125, 251, 79, 244, ++ 0, 114, 32, 70, 159, 33, 19, 70, 251, 247, 118, 251, 32, 70, 56, 33, ++ 4, 34, 0, 35, 251, 247, 112, 251, 79, 244, 128, 98, 32, 70, 165, 33, ++ 19, 70, 251, 247, 105, 251, 64, 34, 32, 70, 128, 33, 19, 70, 251, 247, ++ 99, 251, 79, 244, 0, 114, 32, 70, 165, 33, 19, 70, 251, 247, 92, 251, ++ 32, 34, 32, 70, 128, 33, 19, 70, 251, 247, 86, 251, 32, 70, 129, 33, ++ 50, 70, 51, 70, 251, 247, 80, 251, 62, 33, 4, 34, 32, 70, 19, 70, 251, ++ 247, 74, 251, 128, 34, 32, 70, 159, 33, 19, 70, 251, 247, 68, 251, 32, ++ 70, 56, 33, 50, 70, 0, 35, 251, 247, 62, 251, 79, 244, 128, 114, 32, ++ 70, 159, 33, 19, 70, 251, 247, 55, 251, 2, 34, 32, 70, 56, 33, 19, 70, ++ 251, 247, 49, 251, 16, 34, 32, 70, 159, 33, 19, 70, 251, 247, 43, 251, ++ 32, 70, 61, 33, 0, 35, 79, 244, 0, 82, 251, 247, 36, 251, 79, 244, 128, ++ 82, 32, 70, 61, 33, 19, 70, 251, 247, 29, 251, 32, 34, 32, 70, 159, ++ 33, 19, 70, 251, 247, 23, 251, 79, 244, 128, 66, 32, 70, 61, 33, 19, ++ 70, 251, 247, 16, 251, 4, 34, 32, 70, 159, 33, 19, 70, 251, 247, 10, ++ 251, 32, 34, 32, 70, 62, 33, 19, 70, 251, 247, 4, 251, 79, 244, 128, ++ 114, 32, 70, 19, 70, 157, 33, 251, 247, 253, 250, 79, 244, 0, 98, 32, ++ 70, 45, 33, 19, 70, 251, 247, 246, 250, 64, 34, 32, 70, 157, 33, 19, ++ 70, 251, 247, 240, 250, 79, 244, 0, 114, 32, 70, 45, 33, 19, 70, 251, ++ 247, 233, 250, 128, 34, 32, 70, 157, 33, 19, 70, 251, 247, 227, 250, ++ 79, 244, 128, 98, 19, 70, 32, 70, 45, 33, 251, 247, 220, 250, 32, 70, ++ 3, 33, 254, 247, 71, 252, 2, 34, 32, 70, 155, 33, 19, 70, 251, 247, ++ 210, 250, 32, 70, 25, 33, 50, 70, 51, 70, 251, 247, 204, 250, 4, 34, ++ 32, 70, 156, 33, 19, 70, 251, 247, 198, 250, 79, 244, 128, 82, 32, 70, ++ 38, 33, 19, 70, 251, 247, 191, 250, 8, 34, 32, 70, 156, 33, 19, 70, ++ 251, 247, 185, 250, 32, 70, 31, 33, 50, 70, 51, 70, 251, 247, 179, 250, ++ 32, 34, 32, 70, 19, 70, 156, 33, 251, 247, 173, 250, 31, 33, 8, 34, ++ 32, 70, 19, 70, 189, 232, 112, 64, 251, 247, 165, 186, 48, 181, 135, ++ 176, 5, 171, 0, 147, 2, 35, 1, 147, 0, 35, 2, 147, 96, 35, 12, 70, 3, ++ 147, 105, 70, 16, 35, 21, 70, 4, 147, 255, 247, 77, 253, 189, 248, 20, ++ 48, 35, 128, 189, 248, 22, 48, 43, 128, 7, 176, 48, 189, 45, 233, 255, ++ 65, 14, 70, 64, 246, 165, 17, 4, 70, 250, 247, 58, 255, 2, 34, 19, 70, ++ 128, 70, 64, 246, 165, 17, 32, 70, 251, 247, 183, 250, 179, 104, 33, ++ 43, 28, 209, 32, 70, 64, 242, 116, 81, 250, 247, 42, 255, 64, 242, 117, ++ 81, 7, 70, 32, 70, 250, 247, 36, 255, 79, 244, 128, 66, 19, 70, 5, 70, ++ 64, 242, 116, 81, 32, 70, 251, 247, 160, 250, 79, 244, 128, 98, 32, ++ 70, 64, 242, 117, 81, 19, 70, 251, 247, 152, 250, 1, 224, 0, 37, 47, ++ 70, 64, 242, 87, 66, 1, 146, 64, 242, 86, 66, 14, 35, 2, 146, 32, 70, ++ 13, 34, 49, 70, 0, 147, 251, 247, 156, 251, 179, 104, 33, 43, 11, 209, ++ 32, 70, 64, 242, 116, 81, 58, 70, 250, 247, 5, 255, 32, 70, 64, 242, ++ 117, 81, 42, 70, 250, 247, 255, 254, 32, 70, 64, 246, 165, 17, 66, 70, ++ 4, 176, 189, 232, 240, 65, 250, 247, 246, 190, 112, 181, 198, 176, 1, ++ 173, 208, 248, 228, 96, 4, 70, 0, 33, 40, 70, 79, 244, 128, 114, 209, ++ 243, 32, 243, 7, 35, 67, 147, 32, 35, 69, 147, 150, 248, 200, 52, 65, ++ 149, 67, 185, 20, 35, 66, 147, 32, 70, 79, 244, 80, 115, 65, 169, 68, ++ 147, 255, 247, 140, 255, 64, 35, 66, 147, 32, 70, 128, 35, 65, 169, ++ 68, 147, 255, 247, 132, 255, 70, 176, 112, 189, 0, 0, 127, 181, 144, ++ 248, 114, 51, 99, 177, 7, 75, 1, 169, 1, 147, 20, 35, 2, 147, 7, 35, ++ 3, 147, 8, 35, 5, 147, 128, 35, 4, 147, 255, 247, 112, 255, 7, 176, ++ 0, 189, 0, 191, 14, 109, 4, 0, 16, 181, 134, 176, 6, 171, 35, 248, 2, ++ 29, 0, 147, 1, 35, 1, 147, 0, 35, 2, 147, 99, 35, 4, 70, 3, 147, 105, ++ 70, 16, 35, 4, 147, 255, 247, 89, 255, 115, 35, 32, 70, 105, 70, 3, ++ 147, 255, 247, 83, 255, 6, 176, 16, 189, 56, 181, 208, 248, 228, 64, ++ 0, 35, 5, 70, 132, 248, 114, 53, 148, 248, 115, 21, 255, 247, 219, 255, ++ 40, 70, 180, 248, 116, 37, 64, 246, 165, 17, 250, 247, 140, 254, 40, ++ 70, 180, 248, 118, 37, 64, 242, 164, 65, 250, 247, 133, 254, 40, 70, ++ 180, 248, 120, 37, 64, 246, 172, 17, 250, 247, 126, 254, 40, 70, 180, ++ 248, 122, 37, 64, 242, 218, 97, 250, 247, 119, 254, 40, 70, 180, 248, ++ 124, 37, 64, 242, 116, 81, 250, 247, 112, 254, 40, 70, 180, 248, 126, ++ 37, 64, 242, 117, 81, 250, 247, 105, 254, 40, 70, 180, 248, 128, 37, ++ 64, 242, 75, 65, 250, 247, 98, 254, 40, 70, 180, 248, 132, 37, 64, 242, ++ 76, 65, 250, 247, 91, 254, 40, 70, 180, 248, 134, 37, 64, 242, 77, 65, ++ 250, 247, 84, 254, 40, 70, 180, 248, 136, 37, 64, 246, 56, 17, 250, ++ 247, 77, 254, 40, 70, 180, 248, 138, 37, 64, 246, 57, 17, 250, 247, ++ 70, 254, 180, 248, 142, 37, 40, 70, 64, 246, 7, 1, 189, 232, 56, 64, ++ 250, 247, 61, 190, 56, 181, 208, 248, 228, 64, 0, 35, 5, 70, 132, 248, ++ 254, 52, 132, 248, 12, 53, 156, 33, 180, 248, 0, 37, 250, 247, 14, 254, ++ 40, 70, 164, 33, 180, 248, 2, 37, 250, 247, 8, 254, 40, 70, 159, 33, ++ 180, 248, 6, 37, 250, 247, 2, 254, 40, 70, 157, 33, 180, 248, 8, 37, ++ 250, 247, 252, 253, 40, 70, 155, 33, 180, 248, 10, 37, 250, 247, 246, ++ 253, 40, 70, 121, 33, 180, 248, 14, 37, 250, 247, 240, 253, 40, 70, ++ 122, 33, 180, 248, 16, 37, 250, 247, 234, 253, 40, 70, 61, 33, 180, ++ 248, 22, 37, 250, 247, 228, 253, 40, 70, 165, 33, 180, 248, 24, 37, ++ 250, 247, 222, 253, 40, 70, 111, 33, 180, 248, 26, 37, 250, 247, 216, ++ 253, 40, 70, 47, 33, 180, 248, 28, 37, 250, 247, 210, 253, 40, 70, 39, ++ 33, 180, 248, 30, 37, 250, 247, 204, 253, 40, 70, 50, 33, 180, 248, ++ 32, 37, 250, 247, 198, 253, 40, 70, 126, 33, 180, 248, 34, 37, 250, ++ 247, 192, 253, 40, 70, 125, 33, 180, 248, 20, 37, 250, 247, 186, 253, ++ 40, 70, 180, 248, 36, 37, 56, 33, 250, 247, 180, 253, 128, 33, 40, 70, ++ 180, 248, 38, 37, 250, 247, 174, 253, 40, 70, 129, 33, 180, 248, 40, ++ 37, 250, 247, 168, 253, 40, 70, 62, 33, 180, 248, 42, 37, 250, 247, ++ 162, 253, 40, 70, 45, 33, 180, 248, 44, 37, 250, 247, 156, 253, 40, ++ 70, 25, 33, 180, 248, 46, 37, 250, 247, 150, 253, 40, 70, 38, 33, 180, ++ 248, 48, 37, 250, 247, 144, 253, 40, 70, 31, 33, 180, 248, 50, 37, 250, ++ 247, 138, 253, 40, 70, 124, 33, 180, 248, 18, 37, 250, 247, 132, 253, ++ 180, 248, 20, 37, 40, 70, 125, 33, 250, 247, 126, 253, 4, 245, 166, ++ 97, 40, 70, 4, 49, 253, 247, 29, 251, 40, 70, 148, 248, 62, 21, 255, ++ 247, 220, 254, 180, 248, 60, 21, 40, 70, 189, 232, 56, 64, 253, 247, ++ 238, 184, 127, 181, 0, 35, 2, 147, 16, 35, 4, 147, 5, 171, 0, 147, 2, ++ 35, 173, 248, 20, 16, 1, 147, 105, 70, 96, 35, 173, 248, 22, 32, 3, ++ 147, 255, 247, 46, 254, 7, 176, 0, 189, 0, 181, 0, 35, 137, 176, 5, ++ 147, 16, 35, 7, 147, 13, 241, 6, 3, 3, 147, 1, 35, 173, 248, 6, 16, ++ 4, 147, 3, 169, 98, 35, 6, 147, 255, 247, 26, 254, 9, 176, 0, 189, 45, ++ 233, 240, 67, 208, 248, 228, 48, 141, 176, 32, 39, 131, 248, 68, 20, ++ 131, 248, 69, 20, 1, 245, 16, 115, 12, 173, 4, 147, 13, 235, 7, 3, 69, ++ 248, 44, 61, 79, 240, 1, 8, 14, 70, 79, 240, 7, 9, 41, 70, 4, 70, 205, ++ 248, 12, 144, 5, 151, 205, 248, 8, 128, 255, 247, 61, 251, 6, 241, 192, ++ 3, 4, 147, 32, 70, 9, 171, 41, 70, 1, 147, 5, 151, 255, 247, 51, 251, ++ 9, 155, 32, 70, 3, 240, 31, 2, 173, 248, 24, 32, 90, 9, 91, 11, 219, ++ 178, 173, 248, 28, 48, 8, 155, 210, 178, 91, 12, 3, 240, 15, 3, 6, 169, ++ 173, 248, 26, 32, 173, 248, 30, 48, 253, 247, 168, 250, 9, 153, 32, ++ 70, 73, 13, 201, 178, 253, 247, 127, 248, 8, 153, 32, 70, 73, 10, 201, ++ 178, 255, 247, 96, 254, 4, 34, 32, 70, 19, 70, 64, 246, 7, 1, 251, 247, ++ 139, 248, 8, 155, 65, 246, 240, 114, 219, 5, 219, 13, 27, 1, 32, 70, ++ 64, 246, 7, 1, 251, 247, 128, 248, 32, 70, 65, 70, 253, 247, 79, 248, ++ 79, 244, 160, 115, 4, 147, 32, 70, 11, 171, 41, 70, 1, 147, 205, 248, ++ 12, 144, 5, 151, 205, 248, 8, 128, 255, 247, 236, 250, 11, 154, 32, ++ 70, 145, 10, 137, 5, 146, 5, 146, 13, 137, 13, 255, 247, 94, 255, 16, ++ 35, 5, 147, 32, 70, 10, 171, 41, 70, 6, 245, 224, 118, 1, 147, 4, 150, ++ 255, 247, 216, 250, 32, 70, 189, 248, 40, 16, 255, 247, 98, 255, 32, ++ 70, 64, 242, 166, 97, 65, 246, 255, 114, 0, 35, 251, 247, 77, 248, 13, ++ 176, 189, 232, 240, 131, 45, 233, 240, 67, 64, 246, 117, 17, 135, 176, ++ 4, 70, 250, 247, 189, 252, 64, 246, 105, 17, 7, 70, 32, 70, 250, 247, ++ 183, 252, 64, 246, 120, 17, 6, 70, 32, 70, 250, 247, 177, 252, 0, 33, ++ 10, 70, 95, 250, 128, 248, 32, 70, 253, 247, 30, 248, 32, 70, 64, 246, ++ 113, 17, 255, 34, 254, 35, 251, 247, 40, 248, 8, 34, 19, 70, 32, 70, ++ 64, 246, 101, 17, 251, 247, 33, 248, 32, 70, 2, 33, 0, 34, 253, 247, ++ 11, 248, 4, 34, 19, 70, 32, 70, 79, 244, 136, 97, 251, 247, 21, 248, ++ 1, 34, 19, 70, 32, 70, 64, 242, 74, 65, 251, 247, 14, 248, 32, 70, 64, ++ 242, 74, 65, 1, 34, 0, 35, 251, 247, 7, 248, 5, 37, 1, 34, 19, 70, 32, ++ 70, 64, 242, 74, 65, 250, 247, 255, 255, 32, 70, 64, 242, 74, 65, 1, ++ 34, 0, 35, 250, 247, 248, 255, 79, 240, 11, 9, 2, 224, 10, 32, 213, ++ 243, 28, 244, 32, 70, 64, 246, 116, 17, 250, 247, 104, 252, 131, 7, ++ 2, 213, 185, 241, 1, 9, 242, 209, 32, 70, 64, 246, 120, 17, 250, 247, ++ 94, 252, 192, 178, 255, 40, 3, 208, 1, 61, 237, 178, 0, 45, 213, 209, ++ 4, 34, 32, 70, 0, 35, 79, 244, 136, 97, 250, 247, 213, 255, 5, 171, ++ 0, 147, 1, 35, 1, 147, 35, 35, 2, 147, 0, 37, 32, 35, 32, 70, 105, 70, ++ 4, 147, 3, 149, 255, 247, 69, 250, 5, 154, 32, 70, 210, 5, 210, 13, ++ 64, 242, 188, 65, 250, 247, 69, 252, 5, 154, 32, 70, 82, 10, 210, 5, ++ 210, 13, 64, 242, 187, 65, 250, 247, 60, 252, 32, 70, 105, 70, 5, 149, ++ 255, 247, 234, 252, 32, 70, 58, 70, 64, 246, 117, 17, 250, 247, 49, ++ 252, 32, 70, 50, 70, 64, 246, 105, 17, 250, 247, 43, 252, 32, 70, 255, ++ 34, 67, 70, 64, 246, 113, 17, 250, 247, 158, 255, 8, 34, 32, 70, 64, ++ 246, 101, 17, 19, 70, 250, 247, 151, 255, 7, 176, 189, 232, 240, 131, ++ 48, 181, 208, 248, 228, 80, 4, 70, 135, 176, 40, 70, 79, 244, 0, 113, ++ 65, 242, 111, 2, 252, 247, 5, 254, 0, 40, 0, 240, 158, 128, 7, 35, 3, ++ 147, 32, 35, 5, 147, 128, 35, 2, 147, 0, 35, 1, 144, 4, 147, 64, 248, ++ 4, 59, 1, 51, 128, 43, 250, 209, 32, 70, 1, 169, 255, 247, 172, 252, ++ 79, 244, 48, 115, 32, 70, 1, 169, 4, 147, 255, 247, 165, 252, 212, 248, ++ 228, 0, 65, 242, 130, 1, 252, 247, 240, 253, 32, 70, 1, 33, 253, 247, ++ 4, 251, 32, 70, 62, 73, 54, 34, 250, 247, 111, 255, 213, 248, 196, 52, ++ 32, 70, 64, 246, 244, 17, 79, 244, 128, 66, 107, 177, 19, 70, 250, 247, ++ 82, 255, 181, 248, 88, 36, 181, 248, 86, 52, 32, 70, 211, 24, 64, 242, ++ 12, 81, 64, 242, 255, 18, 155, 178, 250, 247, 69, 255, 30, 34, 48, 73, ++ 32, 70, 250, 247, 82, 255, 32, 70, 255, 247, 205, 252, 32, 70, 254, ++ 247, 13, 250, 153, 33, 1, 34, 0, 35, 32, 70, 250, 247, 249, 254, 150, ++ 33, 2, 34, 0, 35, 32, 70, 250, 247, 243, 254, 162, 33, 1, 34, 0, 35, ++ 32, 70, 250, 247, 237, 254, 165, 33, 64, 34, 0, 35, 32, 70, 250, 247, ++ 231, 254, 166, 33, 1, 34, 0, 35, 32, 70, 250, 247, 225, 254, 161, 33, ++ 1, 34, 0, 35, 32, 70, 250, 247, 219, 254, 48, 34, 0, 35, 32, 70, 2, ++ 33, 250, 247, 213, 254, 111, 33, 32, 70, 79, 244, 0, 82, 0, 35, 250, ++ 247, 206, 254, 79, 244, 128, 82, 19, 70, 32, 70, 111, 33, 250, 247, ++ 199, 254, 4, 34, 19, 70, 32, 70, 64, 242, 215, 65, 250, 247, 251, 254, ++ 64, 242, 215, 65, 79, 244, 112, 98, 79, 244, 128, 115, 32, 70, 250, ++ 247, 242, 254, 32, 70, 253, 247, 189, 250, 32, 70, 64, 242, 117, 81, ++ 79, 244, 0, 114, 0, 35, 250, 247, 231, 254, 7, 176, 48, 189, 0, 191, ++ 46, 70, 4, 0, 154, 70, 4, 0, 45, 233, 240, 67, 155, 176, 4, 70, 13, ++ 70, 22, 70, 0, 33, 48, 34, 104, 70, 31, 70, 208, 243, 144, 247, 32, ++ 70, 32, 35, 64, 246, 118, 17, 64, 246, 255, 114, 250, 247, 204, 254, ++ 232, 7, 45, 213, 32, 70, 64, 246, 102, 17, 79, 246, 247, 114, 72, 246, ++ 133, 19, 250, 247, 193, 254, 32, 70, 64, 246, 103, 17, 255, 34, 25, ++ 35, 250, 247, 186, 254, 110, 177, 0, 171, 17, 147, 12, 35, 18, 147, ++ 34, 35, 19, 147, 32, 35, 21, 147, 32, 70, 0, 35, 17, 169, 20, 147, 255, ++ 247, 228, 251, 32, 70, 64, 246, 110, 17, 64, 246, 255, 114, 0, 35, 250, ++ 247, 163, 254, 4, 34, 32, 70, 64, 246, 101, 17, 19, 70, 250, 247, 156, ++ 254, 169, 7, 105, 213, 63, 75, 13, 241, 88, 14, 3, 241, 16, 12, 24, ++ 104, 89, 104, 114, 70, 3, 194, 8, 51, 99, 69, 150, 70, 247, 209, 32, ++ 70, 64, 246, 104, 17, 79, 246, 247, 114, 69, 246, 134, 83, 250, 247, ++ 132, 254, 32, 70, 64, 246, 103, 17, 79, 244, 127, 66, 79, 244, 32, 83, ++ 250, 247, 123, 254, 32, 70, 64, 246, 105, 17, 1, 35, 255, 34, 250, 247, ++ 116, 254, 22, 171, 12, 147, 36, 35, 79, 240, 8, 9, 14, 147, 79, 240, ++ 0, 8, 16, 35, 32, 70, 12, 169, 205, 248, 52, 144, 16, 147, 205, 248, ++ 60, 128, 255, 247, 155, 251, 118, 177, 13, 235, 8, 3, 12, 147, 35, 35, ++ 14, 147, 32, 70, 32, 35, 12, 169, 205, 248, 52, 144, 16, 147, 205, 248, ++ 60, 128, 255, 247, 139, 251, 32, 70, 64, 246, 113, 17, 255, 34, 1, 35, ++ 250, 247, 75, 254, 8, 34, 19, 70, 32, 70, 64, 246, 101, 17, 250, 247, ++ 68, 254, 32, 70, 64, 242, 177, 65, 1, 34, 0, 35, 250, 247, 61, 254, ++ 32, 70, 79, 244, 150, 97, 7, 34, 0, 35, 250, 247, 54, 254, 32, 70, 50, ++ 33, 126, 34, 123, 0, 250, 247, 245, 253, 106, 7, 15, 213, 32, 70, 64, ++ 246, 107, 17, 79, 244, 127, 66, 79, 244, 32, 83, 250, 247, 37, 254, ++ 32, 70, 64, 246, 109, 17, 63, 34, 24, 35, 250, 247, 30, 254, 27, 176, ++ 189, 232, 240, 131, 0, 191, 56, 22, 4, 0, 240, 181, 7, 35, 135, 176, ++ 208, 248, 228, 96, 2, 147, 32, 35, 4, 147, 1, 35, 4, 70, 13, 70, 1, ++ 147, 48, 70, 5, 171, 79, 244, 0, 113, 65, 242, 198, 34, 0, 147, 252, ++ 247, 128, 252, 0, 40, 75, 208, 214, 248, 184, 101, 7, 70, 1, 70, 0, ++ 35, 179, 66, 44, 191, 158, 70, 182, 70, 5, 235, 206, 2, 146, 248, 3, ++ 192, 21, 248, 62, 224, 1, 51, 78, 234, 76, 94, 146, 248, 2, 192, 82, ++ 120, 78, 234, 76, 62, 78, 234, 66, 18, 128, 43, 5, 146, 65, 248, 4, ++ 43, 230, 209, 141, 232, 9, 0, 105, 70, 192, 35, 32, 70, 3, 147, 255, ++ 247, 20, 251, 0, 35, 179, 66, 44, 191, 26, 70, 50, 70, 5, 235, 194, ++ 2, 16, 121, 81, 121, 64, 2, 64, 234, 65, 64, 209, 121, 1, 51, 64, 234, ++ 1, 2, 128, 43, 5, 146, 71, 248, 4, 43, 235, 209, 79, 244, 16, 115, 32, ++ 70, 105, 70, 3, 147, 255, 247, 248, 250, 212, 248, 228, 48, 65, 242, ++ 242, 33, 195, 248, 188, 85, 212, 248, 228, 0, 252, 247, 63, 252, 7, ++ 176, 240, 189, 112, 181, 208, 248, 228, 80, 164, 176, 149, 249, 84, ++ 100, 4, 70, 110, 177, 251, 247, 56, 251, 149, 249, 84, 52, 64, 242, ++ 167, 65, 160, 235, 131, 3, 255, 34, 32, 70, 155, 178, 250, 247, 158, ++ 253, 139, 224, 208, 248, 136, 4, 0, 40, 0, 240, 135, 128, 49, 70, 1, ++ 34, 35, 171, 5, 240, 68, 248, 33, 171, 0, 147, 49, 70, 50, 70, 1, 35, ++ 212, 248, 136, 4, 5, 240, 84, 248, 30, 171, 1, 34, 1, 147, 49, 70, 51, ++ 70, 212, 248, 136, 4, 0, 146, 5, 240, 101, 248, 2, 169, 42, 70, 43, ++ 70, 35, 168, 48, 86, 1, 54, 64, 66, 65, 248, 4, 15, 195, 248, 92, 4, ++ 4, 51, 4, 46, 244, 209, 6, 168, 41, 70, 0, 35, 33, 174, 158, 87, 1, ++ 51, 118, 66, 64, 248, 4, 111, 193, 248, 108, 100, 4, 49, 8, 43, 244, ++ 209, 14, 169, 0, 35, 30, 168, 24, 86, 1, 51, 64, 66, 65, 248, 4, 15, ++ 194, 248, 140, 4, 4, 50, 10, 43, 244, 209, 149, 248, 200, 52, 115, 185, ++ 7, 35, 27, 147, 32, 35, 29, 147, 22, 35, 26, 147, 3, 171, 25, 147, 32, ++ 70, 79, 244, 80, 115, 25, 169, 28, 147, 255, 247, 126, 250, 148, 248, ++ 114, 51, 19, 177, 32, 70, 255, 247, 247, 250, 32, 70, 251, 247, 203, ++ 250, 64, 242, 167, 65, 3, 70, 255, 34, 32, 70, 250, 247, 53, 253, 149, ++ 248, 51, 54, 235, 177, 64, 242, 167, 65, 32, 70, 250, 247, 168, 249, ++ 149, 248, 49, 38, 67, 0, 149, 248, 50, 102, 219, 178, 158, 27, 155, ++ 26, 27, 2, 79, 244, 127, 66, 19, 64, 32, 70, 64, 242, 209, 65, 250, ++ 247, 28, 253, 115, 178, 32, 70, 64, 242, 209, 65, 255, 34, 155, 178, ++ 250, 247, 20, 253, 32, 70, 252, 247, 207, 251, 36, 176, 112, 189, 45, ++ 233, 240, 65, 13, 70, 64, 242, 164, 65, 4, 70, 208, 248, 228, 96, 250, ++ 247, 128, 249, 0, 244, 96, 71, 175, 66, 0, 240, 158, 128, 64, 34, 0, ++ 35, 32, 70, 64, 242, 218, 97, 250, 247, 249, 252, 16, 34, 181, 245, ++ 96, 79, 20, 191, 19, 70, 0, 35, 32, 70, 64, 242, 163, 97, 250, 247, ++ 238, 252, 79, 244, 0, 82, 181, 245, 96, 79, 12, 191, 19, 70, 0, 35, ++ 32, 70, 64, 242, 55, 97, 250, 247, 226, 252, 79, 244, 128, 82, 181, ++ 245, 96, 79, 12, 191, 19, 70, 0, 35, 32, 70, 64, 242, 55, 97, 250, 247, ++ 214, 252, 4, 34, 181, 245, 96, 79, 8, 191, 19, 70, 32, 70, 24, 191, ++ 0, 35, 79, 244, 154, 97, 250, 247, 202, 252, 3, 34, 0, 35, 32, 70, 79, ++ 244, 143, 97, 250, 247, 195, 252, 183, 245, 96, 79, 8, 209, 32, 70, ++ 255, 247, 77, 250, 32, 70, 64, 242, 110, 65, 0, 34, 250, 247, 61, 249, ++ 181, 245, 96, 79, 32, 70, 67, 209, 255, 247, 254, 254, 182, 248, 2, ++ 116, 79, 246, 254, 115, 127, 0, 32, 70, 59, 64, 64, 242, 164, 65, 64, ++ 242, 255, 18, 250, 247, 164, 252, 182, 248, 4, 116, 79, 246, 254, 115, ++ 127, 0, 32, 70, 59, 64, 79, 244, 144, 97, 64, 242, 255, 18, 250, 247, ++ 151, 252, 182, 248, 52, 52, 32, 70, 155, 2, 3, 244, 124, 67, 64, 242, ++ 165, 65, 79, 244, 224, 82, 250, 247, 139, 252, 1, 34, 32, 70, 64, 242, ++ 110, 65, 250, 247, 11, 249, 163, 107, 224, 33, 24, 105, 4, 240, 132, ++ 250, 0, 33, 166, 248, 54, 4, 32, 70, 252, 247, 77, 252, 255, 35, 134, ++ 248, 68, 52, 32, 70, 64, 246, 7, 1, 4, 34, 0, 35, 250, 247, 112, 252, ++ 2, 224, 1, 33, 252, 247, 63, 252, 32, 70, 64, 242, 164, 65, 79, 244, ++ 96, 66, 43, 70, 189, 232, 240, 65, 250, 247, 98, 188, 189, 232, 240, ++ 129, 56, 181, 64, 242, 164, 65, 4, 70, 250, 247, 213, 248, 0, 33, 5, ++ 70, 32, 70, 255, 247, 70, 255, 32, 70, 255, 247, 159, 254, 32, 70, 5, ++ 244, 96, 65, 189, 232, 56, 64, 255, 247, 60, 191, 240, 181, 208, 248, ++ 228, 112, 137, 176, 0, 35, 4, 70, 13, 70, 56, 70, 79, 244, 0, 113, 65, ++ 242, 19, 34, 5, 147, 6, 147, 7, 147, 252, 247, 183, 250, 6, 70, 0, 40, ++ 53, 208, 77, 185, 32, 70, 5, 169, 6, 170, 7, 171, 252, 247, 145, 248, ++ 3, 149, 55, 70, 0, 37, 16, 224, 151, 248, 51, 54, 0, 43, 248, 208, 180, ++ 249, 204, 58, 6, 147, 180, 249, 206, 58, 7, 147, 180, 249, 208, 58, ++ 5, 147, 79, 244, 48, 115, 3, 147, 235, 231, 5, 169, 40, 70, 14, 201, ++ 252, 247, 199, 250, 1, 53, 128, 45, 71, 248, 4, 11, 245, 209, 7, 35, ++ 2, 147, 32, 70, 32, 35, 105, 70, 4, 147, 0, 150, 1, 149, 255, 247, 64, ++ 249, 212, 248, 228, 0, 65, 242, 50, 33, 252, 247, 139, 250, 9, 176, ++ 240, 189, 45, 233, 240, 67, 144, 248, 13, 84, 137, 176, 0, 36, 0, 245, ++ 208, 121, 4, 35, 144, 70, 6, 70, 1, 147, 72, 70, 33, 70, 42, 70, 7, ++ 171, 0, 148, 251, 247, 197, 255, 33, 70, 1, 34, 7, 171, 64, 70, 4, 240, ++ 3, 255, 3, 33, 1, 34, 7, 171, 64, 70, 4, 240, 253, 254, 5, 175, 8, 35, ++ 1, 147, 9, 241, 4, 0, 33, 70, 42, 70, 59, 70, 0, 148, 251, 247, 174, ++ 255, 1, 35, 0, 151, 33, 70, 34, 70, 2, 175, 64, 70, 4, 240, 253, 254, ++ 214, 248, 168, 1, 41, 70, 58, 70, 251, 247, 213, 255, 150, 248, 172, ++ 33, 111, 240, 1, 3, 2, 240, 15, 1, 3, 251, 1, 81, 18, 9, 3, 251, 2, ++ 85, 141, 248, 16, 16, 1, 34, 64, 70, 33, 70, 35, 70, 141, 248, 17, 80, ++ 141, 232, 132, 0, 4, 240, 244, 254, 9, 176, 189, 232, 240, 131, 45, ++ 233, 243, 71, 21, 70, 36, 38, 129, 234, 225, 114, 162, 235, 225, 114, ++ 86, 67, 10, 154, 12, 70, 79, 244, 122, 113, 74, 67, 182, 251, 242, 246, ++ 54, 4, 100, 34, 79, 240, 0, 9, 189, 248, 44, 112, 150, 251, 242, 246, ++ 154, 70, 200, 70, 44, 224, 64, 70, 105, 70, 251, 247, 148, 253, 1, 154, ++ 0, 44, 204, 191, 176, 68, 198, 235, 8, 8, 106, 67, 3, 212, 210, 19, ++ 1, 50, 82, 16, 4, 224, 82, 66, 210, 19, 1, 50, 82, 16, 82, 66, 0, 155, ++ 146, 5, 146, 13, 107, 67, 3, 212, 219, 19, 1, 51, 91, 16, 4, 224, 91, ++ 66, 219, 19, 1, 51, 91, 16, 91, 66, 155, 5, 155, 13, 67, 234, 130, 35, ++ 9, 241, 1, 9, 74, 248, 4, 59, 31, 250, 137, 249, 185, 69, 208, 209, ++ 189, 232, 252, 135, 0, 0, 127, 181, 0, 35, 4, 70, 29, 70, 30, 70, 6, ++ 224, 81, 248, 8, 12, 1, 51, 54, 24, 81, 248, 4, 12, 45, 24, 12, 49, ++ 147, 66, 245, 219, 83, 8, 0, 46, 180, 191, 79, 240, 255, 49, 1, 33, ++ 3, 251, 1, 102, 237, 24, 150, 251, 242, 240, 1, 169, 149, 251, 242, ++ 245, 251, 247, 70, 253, 2, 153, 1, 154, 105, 67, 106, 67, 201, 19, 1, ++ 49, 210, 19, 73, 16, 1, 50, 161, 245, 128, 97, 82, 16, 64, 242, 255, ++ 19, 154, 66, 168, 191, 26, 70, 153, 66, 184, 191, 11, 70, 10, 73, 32, ++ 70, 138, 66, 184, 191, 10, 70, 139, 66, 184, 191, 11, 70, 146, 5, 146, ++ 13, 155, 5, 173, 248, 12, 32, 155, 13, 1, 33, 3, 170, 173, 248, 14, ++ 48, 253, 247, 12, 248, 127, 189, 0, 191, 0, 254, 255, 255, 115, 181, ++ 130, 234, 226, 115, 163, 235, 226, 115, 5, 70, 36, 32, 88, 67, 68, 246, ++ 32, 99, 144, 251, 243, 240, 0, 4, 100, 35, 144, 251, 243, 240, 0, 42, ++ 216, 191, 64, 66, 14, 70, 105, 70, 251, 247, 3, 253, 1, 155, 0, 43, ++ 5, 219, 26, 3, 210, 26, 210, 19, 1, 50, 82, 16, 5, 224, 24, 74, 90, ++ 67, 210, 19, 1, 50, 82, 16, 82, 66, 0, 155, 210, 4, 210, 12, 0, 43, ++ 5, 219, 28, 3, 228, 26, 228, 19, 1, 52, 100, 16, 5, 224, 16, 76, 92, ++ 67, 228, 19, 1, 52, 100, 16, 100, 66, 228, 4, 228, 12, 1, 46, 8, 209, ++ 40, 70, 64, 246, 212, 17, 249, 247, 90, 255, 40, 70, 64, 246, 214, 17, ++ 9, 224, 2, 46, 10, 209, 40, 70, 64, 246, 213, 17, 249, 247, 79, 255, ++ 40, 70, 64, 246, 215, 17, 34, 70, 249, 247, 73, 255, 124, 189, 1, 240, ++ 255, 255, 45, 233, 248, 67, 15, 70, 21, 70, 64, 242, 218, 97, 72, 242, ++ 128, 2, 4, 70, 152, 70, 157, 248, 32, 96, 157, 248, 36, 144, 250, 247, ++ 162, 250, 123, 30, 255, 34, 155, 178, 32, 70, 64, 242, 66, 97, 250, ++ 247, 168, 250, 79, 246, 255, 115, 157, 66, 1, 208, 1, 61, 173, 178, ++ 43, 70, 32, 70, 79, 244, 200, 97, 79, 246, 255, 114, 250, 247, 154, ++ 250, 32, 70, 64, 242, 65, 97, 79, 246, 255, 114, 67, 70, 250, 247, 146, ++ 250, 0, 46, 12, 191, 1, 39, 2, 39, 10, 37, 32, 70, 38, 177, 64, 242, ++ 83, 65, 79, 244, 0, 66, 2, 224, 64, 242, 63, 97, 1, 34, 19, 70, 250, ++ 247, 128, 250, 1, 32, 212, 243, 167, 246, 32, 70, 64, 242, 68, 97, 249, ++ 247, 243, 254, 1, 61, 1, 208, 56, 66, 230, 208, 54, 185, 32, 70, 1, ++ 33, 74, 70, 189, 232, 248, 67, 252, 247, 224, 188, 189, 232, 248, 131, ++ 56, 181, 39, 73, 4, 70, 250, 247, 130, 249, 192, 178, 40, 40, 140, 191, ++ 0, 35, 1, 35, 132, 248, 13, 4, 132, 248, 110, 4, 132, 248, 17, 52, 32, ++ 70, 32, 73, 250, 247, 115, 249, 8, 40, 32, 70, 28, 216, 30, 73, 0, 34, ++ 250, 247, 131, 249, 128, 178, 0, 34, 196, 248, 160, 1, 27, 73, 32, 70, ++ 250, 247, 123, 249, 26, 73, 196, 248, 164, 1, 32, 70, 250, 247, 94, ++ 249, 24, 73, 5, 70, 32, 70, 250, 247, 89, 249, 128, 178, 64, 234, 5, ++ 69, 196, 248, 168, 81, 19, 224, 19, 73, 0, 34, 250, 247, 102, 249, 128, ++ 178, 196, 248, 160, 1, 17, 73, 0, 34, 32, 70, 250, 247, 94, 249, 15, ++ 73, 196, 248, 164, 1, 32, 70, 250, 247, 65, 249, 196, 248, 168, 1, 32, ++ 70, 12, 73, 250, 247, 59, 249, 132, 248, 172, 1, 56, 189, 0, 191, 14, ++ 165, 5, 0, 237, 173, 5, 0, 255, 168, 5, 0, 60, 169, 5, 0, 196, 173, ++ 5, 0, 40, 169, 5, 0, 241, 169, 5, 0, 16, 174, 5, 0, 124, 169, 5, 0, ++ 180, 168, 5, 0, 208, 248, 228, 48, 211, 248, 36, 6, 8, 177, 215, 247, ++ 216, 190, 112, 71, 248, 181, 144, 248, 160, 42, 208, 248, 232, 48, 1, ++ 42, 4, 70, 211, 248, 32, 49, 50, 209, 3, 240, 1, 3, 131, 240, 1, 7, ++ 27, 177, 131, 107, 24, 105, 3, 240, 248, 255, 32, 70, 250, 247, 31, ++ 249, 32, 70, 251, 247, 252, 253, 50, 38, 0, 37, 32, 70, 64, 242, 177, ++ 81, 249, 247, 89, 254, 0, 240, 16, 0, 128, 178, 0, 177, 1, 53, 1, 62, ++ 246, 178, 0, 46, 241, 209, 100, 35, 93, 67, 64, 246, 196, 19, 157, 66, ++ 32, 70, 148, 191, 0, 37, 1, 37, 251, 247, 2, 254, 32, 70, 250, 247, ++ 11, 249, 47, 185, 163, 107, 24, 105, 3, 240, 210, 255, 0, 224, 0, 37, ++ 40, 70, 248, 189, 45, 233, 240, 71, 87, 26, 126, 28, 31, 250, 134, 249, ++ 79, 234, 137, 3, 79, 246, 252, 113, 134, 176, 4, 70, 25, 64, 208, 248, ++ 228, 0, 65, 246, 13, 50, 252, 247, 40, 248, 5, 70, 0, 40, 116, 208, ++ 16, 35, 79, 240, 96, 10, 223, 248, 232, 128, 141, 232, 8, 4, 4, 170, ++ 2, 35, 32, 70, 0, 33, 205, 248, 8, 128, 250, 247, 190, 251, 189, 248, ++ 16, 32, 189, 248, 18, 48, 146, 5, 155, 5, 155, 13, 146, 13, 67, 234, ++ 130, 34, 194, 70, 0, 35, 8, 224, 85, 248, 35, 16, 1, 240, 127, 97, 17, ++ 67, 69, 248, 35, 16, 1, 51, 155, 178, 187, 66, 244, 221, 32, 35, 79, ++ 244, 160, 120, 141, 232, 8, 1, 223, 248, 152, 128, 42, 70, 51, 70, 32, ++ 70, 7, 33, 205, 248, 8, 128, 250, 247, 164, 251, 212, 248, 228, 0, 65, ++ 246, 33, 49, 251, 247, 246, 255, 79, 234, 73, 9, 79, 246, 254, 113, ++ 212, 248, 228, 0, 9, 234, 1, 1, 65, 246, 36, 50, 251, 247, 221, 255, ++ 5, 70, 80, 179, 16, 35, 79, 240, 98, 12, 141, 232, 8, 16, 32, 70, 1, ++ 35, 0, 33, 13, 241, 22, 2, 205, 248, 8, 160, 250, 247, 117, 251, 0, ++ 35, 5, 224, 189, 248, 22, 32, 37, 248, 19, 32, 1, 51, 155, 178, 187, ++ 66, 247, 221, 16, 35, 79, 244, 224, 126, 141, 232, 8, 64, 32, 70, 7, ++ 33, 42, 70, 51, 70, 205, 248, 8, 128, 250, 247, 107, 251, 212, 248, ++ 228, 0, 65, 246, 49, 49, 251, 247, 189, 255, 6, 176, 189, 232, 240, ++ 135, 153, 30, 3, 0, 15, 36, 3, 0, 240, 181, 0, 36, 135, 176, 5, 70, ++ 5, 148, 21, 78, 32, 39, 1, 148, 33, 33, 1, 35, 40, 70, 5, 170, 1, 52, ++ 0, 151, 2, 150, 250, 247, 77, 251, 64, 44, 241, 209, 0, 151, 35, 70, ++ 0, 39, 40, 70, 28, 33, 12, 74, 1, 151, 2, 150, 250, 247, 65, 251, 60, ++ 70, 32, 35, 0, 147, 4, 245, 128, 99, 1, 52, 1, 147, 7, 33, 1, 35, 40, ++ 70, 5, 170, 228, 178, 2, 150, 250, 247, 50, 251, 128, 44, 239, 209, ++ 7, 176, 240, 189, 15, 36, 3, 0, 236, 103, 4, 0, 20, 75, 112, 181, 4, ++ 70, 30, 104, 0, 37, 7, 224, 18, 75, 20, 33, 1, 251, 5, 49, 32, 70, 254, ++ 247, 36, 254, 1, 53, 181, 66, 245, 209, 0, 37, 6, 224, 13, 75, 20, 33, ++ 1, 251, 5, 49, 254, 247, 25, 254, 1, 53, 11, 75, 32, 70, 27, 104, 157, ++ 66, 243, 211, 255, 247, 172, 255, 212, 248, 228, 48, 32, 70, 211, 248, ++ 36, 22, 189, 232, 112, 64, 255, 247, 183, 186, 0, 191, 80, 77, 4, 0, ++ 236, 76, 4, 0, 96, 73, 4, 0, 84, 77, 4, 0, 45, 233, 240, 79, 15, 104, ++ 133, 176, 56, 70, 76, 104, 142, 104, 21, 70, 251, 247, 100, 251, 130, ++ 70, 48, 70, 251, 247, 96, 251, 129, 70, 32, 70, 251, 247, 92, 251, 15, ++ 250, 137, 249, 15, 250, 128, 248, 200, 69, 184, 191, 200, 70, 15, 250, ++ 136, 249, 185, 241, 30, 15, 9, 220, 201, 241, 30, 9, 4, 250, 9, 240, ++ 251, 247, 87, 251, 131, 70, 6, 250, 9, 240, 8, 224, 169, 241, 30, 9, ++ 68, 250, 9, 240, 251, 247, 77, 251, 131, 70, 70, 250, 9, 240, 251, 247, ++ 72, 251, 15, 250, 138, 250, 0, 251, 11, 251, 15, 250, 136, 248, 10, ++ 241, 16, 0, 128, 69, 4, 220, 200, 235, 0, 0, 75, 250, 0, 240, 6, 224, ++ 111, 240, 15, 3, 202, 235, 3, 3, 152, 68, 11, 250, 8, 240, 127, 66, ++ 202, 241, 30, 10, 7, 250, 10, 247, 79, 234, 96, 11, 0, 47, 204, 191, ++ 95, 68, 203, 235, 7, 7, 8, 177, 151, 251, 240, 240, 168, 96, 64, 16, ++ 64, 67, 192, 241, 128, 64, 251, 247, 28, 251, 171, 104, 64, 0, 1, 147, ++ 2, 144, 1, 171, 147, 232, 3, 0, 3, 170, 251, 247, 193, 250, 3, 155, ++ 54, 27, 43, 96, 48, 70, 251, 247, 255, 250, 195, 7, 1, 213, 1, 48, 128, ++ 178, 0, 178, 192, 241, 30, 3, 158, 64, 10, 40, 2, 221, 10, 56, 4, 65, ++ 2, 224, 192, 241, 10, 0, 132, 64, 0, 46, 79, 234, 100, 3, 204, 191, ++ 246, 24, 195, 235, 6, 6, 28, 185, 79, 244, 128, 99, 107, 96, 6, 224, ++ 150, 251, 244, 244, 4, 245, 128, 16, 251, 247, 234, 250, 104, 96, 5, ++ 176, 189, 232, 240, 143, 48, 181, 133, 176, 20, 70, 1, 170, 29, 70, ++ 255, 247, 100, 255, 1, 155, 35, 96, 2, 155, 43, 96, 5, 176, 48, 189, ++ 56, 181, 13, 70, 176, 248, 246, 16, 208, 248, 228, 64, 250, 247, 134, ++ 251, 8, 185, 164, 248, 180, 84, 56, 189, 56, 181, 12, 70, 176, 248, ++ 246, 16, 208, 248, 228, 80, 250, 247, 122, 251, 16, 185, 149, 248, 56, ++ 52, 35, 128, 56, 189, 240, 181, 0, 35, 161, 176, 208, 248, 228, 80, ++ 173, 248, 126, 48, 28, 147, 29, 147, 30, 147, 181, 248, 70, 52, 4, 70, ++ 83, 177, 111, 240, 0, 67, 197, 248, 80, 52, 197, 248, 76, 52, 149, 248, ++ 201, 52, 0, 43, 69, 209, 140, 224, 13, 241, 126, 1, 255, 247, 214, 255, ++ 29, 170, 30, 171, 32, 70, 28, 169, 251, 247, 73, 252, 64, 246, 244, ++ 17, 32, 70, 249, 247, 94, 252, 16, 244, 128, 79, 20, 191, 64, 242, 123, ++ 65, 64, 242, 166, 65, 32, 70, 249, 247, 84, 252, 192, 5, 192, 13, 255, ++ 40, 134, 191, 160, 245, 128, 112, 128, 178, 0, 245, 128, 112, 128, 8, ++ 189, 248, 126, 48, 192, 241, 131, 0, 128, 178, 28, 169, 152, 66, 56, ++ 191, 24, 70, 14, 201, 251, 247, 116, 254, 148, 249, 24, 113, 149, 248, ++ 201, 52, 199, 25, 135, 66, 168, 191, 7, 70, 70, 16, 127, 16, 197, 248, ++ 80, 100, 197, 248, 76, 116, 67, 177, 20, 47, 168, 191, 20, 39, 20, 46, ++ 168, 191, 20, 38, 1, 224, 20, 38, 55, 70, 148, 248, 56, 49, 83, 177, ++ 148, 248, 35, 49, 183, 66, 184, 191, 62, 70, 158, 66, 168, 191, 30, ++ 70, 132, 248, 35, 97, 55, 224, 234, 24, 210, 248, 92, 20, 1, 170, 153, ++ 80, 4, 51, 88, 43, 247, 209, 32, 70, 64, 242, 167, 65, 249, 247, 11, ++ 252, 0, 35, 192, 178, 1, 170, 153, 88, 69, 26, 173, 178, 189, 66, 2, ++ 221, 237, 27, 105, 24, 153, 80, 4, 51, 16, 43, 243, 209, 5, 171, 23, ++ 173, 83, 248, 4, 43, 129, 26, 137, 178, 177, 66, 3, 221, 137, 27, 138, ++ 24, 67, 248, 4, 44, 171, 66, 243, 209, 7, 35, 25, 147, 32, 35, 27, 147, ++ 22, 35, 24, 147, 1, 171, 23, 147, 32, 70, 79, 244, 80, 115, 23, 169, ++ 26, 147, 254, 247, 158, 252, 33, 176, 240, 189, 0, 0, 112, 181, 208, ++ 248, 228, 48, 1, 57, 211, 248, 32, 54, 66, 34, 2, 251, 1, 51, 94, 136, ++ 24, 75, 2, 34, 83, 248, 33, 80, 64, 246, 135, 17, 4, 70, 249, 247, 213, ++ 251, 48, 70, 79, 244, 240, 97, 251, 247, 159, 251, 182, 251, 240, 242, ++ 46, 12, 32, 70, 246, 178, 64, 246, 134, 17, 249, 247, 199, 251, 173, ++ 178, 32, 70, 50, 70, 79, 244, 24, 97, 249, 247, 192, 251, 32, 70, 42, ++ 70, 64, 246, 129, 17, 249, 247, 186, 251, 32, 70, 50, 70, 64, 246, 132, ++ 17, 249, 247, 180, 251, 32, 70, 64, 246, 133, 17, 42, 70, 189, 232, ++ 112, 64, 249, 247, 172, 187, 172, 71, 4, 0, 112, 181, 0, 35, 4, 70, ++ 14, 70, 79, 244, 128, 98, 64, 242, 49, 97, 208, 248, 228, 80, 249, 247, ++ 24, 255, 0, 35, 32, 70, 64, 242, 49, 97, 79, 244, 0, 114, 249, 247, ++ 16, 255, 79, 244, 128, 114, 19, 70, 32, 70, 64, 242, 49, 97, 249, 247, ++ 8, 255, 32, 70, 49, 70, 255, 247, 162, 255, 255, 34, 90, 35, 32, 70, ++ 64, 242, 42, 97, 249, 247, 253, 254, 0, 34, 32, 70, 64, 246, 72, 1, ++ 249, 247, 125, 251, 181, 249, 104, 37, 1, 46, 34, 234, 226, 114, 1, ++ 208, 11, 46, 3, 209, 181, 248, 110, 53, 24, 4, 4, 213, 181, 248, 106, ++ 53, 25, 4, 72, 191, 0, 35, 165, 248, 108, 53, 0, 33, 32, 70, 18, 178, ++ 252, 247, 145, 252, 1, 33, 181, 249, 108, 37, 32, 70, 252, 247, 139, ++ 252, 32, 70, 79, 244, 137, 97, 79, 244, 64, 114, 79, 244, 0, 115, 189, ++ 232, 112, 64, 249, 247, 206, 190, 240, 181, 40, 78, 143, 176, 109, 70, ++ 4, 70, 15, 70, 15, 206, 15, 197, 15, 206, 15, 197, 15, 206, 15, 197, ++ 150, 232, 3, 0, 212, 248, 228, 48, 1, 63, 211, 248, 32, 54, 66, 34, ++ 2, 251, 7, 51, 133, 232, 3, 0, 94, 136, 14, 171, 3, 235, 135, 7, 87, ++ 248, 56, 92, 32, 70, 171, 178, 64, 246, 173, 17, 79, 246, 255, 114, ++ 249, 247, 168, 254, 32, 70, 43, 12, 64, 246, 174, 17, 64, 242, 255, ++ 50, 249, 247, 160, 254, 0, 35, 32, 70, 79, 244, 128, 66, 64, 246, 174, ++ 17, 249, 247, 152, 254, 49, 70, 79, 244, 160, 96, 251, 247, 232, 250, ++ 79, 244, 160, 99, 179, 251, 240, 243, 64, 246, 177, 17, 32, 70, 65, ++ 246, 255, 114, 249, 247, 136, 254, 79, 244, 128, 98, 32, 70, 64, 246, ++ 172, 17, 19, 70, 15, 176, 189, 232, 240, 64, 249, 247, 125, 190, 0, ++ 191, 72, 22, 4, 0, 240, 181, 4, 70, 145, 176, 13, 70, 255, 247, 166, ++ 255, 32, 70, 41, 70, 251, 247, 204, 255, 0, 34, 32, 70, 64, 246, 207, ++ 17, 249, 247, 240, 250, 104, 75, 1, 170, 3, 241, 32, 6, 24, 104, 89, ++ 104, 21, 70, 3, 197, 8, 51, 179, 66, 42, 70, 247, 209, 24, 104, 155, ++ 136, 40, 96, 171, 128, 1, 171, 8, 38, 16, 37, 3, 39, 11, 147, 32, 70, ++ 19, 35, 11, 169, 12, 147, 13, 150, 15, 149, 14, 151, 254, 247, 133, ++ 251, 60, 35, 173, 248, 4, 48, 1, 35, 173, 248, 6, 48, 32, 70, 29, 35, ++ 11, 169, 14, 147, 173, 248, 8, 96, 12, 151, 254, 247, 118, 251, 79, ++ 244, 128, 114, 32, 70, 19, 70, 64, 242, 59, 81, 249, 247, 53, 254, 79, ++ 244, 0, 114, 32, 70, 19, 70, 64, 242, 59, 81, 249, 247, 45, 254, 79, ++ 244, 128, 98, 32, 70, 19, 70, 64, 242, 59, 81, 249, 247, 37, 254, 4, ++ 34, 32, 70, 19, 70, 64, 242, 177, 65, 249, 247, 30, 254, 1, 34, 32, ++ 70, 25, 33, 19, 70, 249, 247, 221, 253, 2, 34, 32, 70, 155, 33, 19, ++ 70, 249, 247, 215, 253, 1, 34, 32, 70, 28, 33, 19, 70, 249, 247, 209, ++ 253, 79, 244, 128, 66, 32, 70, 23, 33, 19, 70, 249, 247, 202, 253, 1, ++ 34, 32, 70, 154, 33, 19, 70, 249, 247, 196, 253, 79, 244, 128, 66, 32, ++ 70, 61, 33, 19, 70, 249, 247, 189, 253, 32, 34, 32, 70, 19, 70, 159, ++ 33, 249, 247, 183, 253, 62, 33, 32, 70, 42, 70, 0, 35, 249, 247, 177, ++ 253, 2, 34, 32, 70, 159, 33, 19, 70, 249, 247, 171, 253, 32, 34, 32, ++ 70, 62, 33, 19, 70, 249, 247, 165, 253, 4, 34, 32, 70, 159, 33, 19, ++ 70, 249, 247, 159, 253, 79, 244, 128, 82, 32, 70, 38, 33, 19, 70, 249, ++ 247, 152, 253, 4, 34, 32, 70, 156, 33, 19, 70, 249, 247, 146, 253, 4, ++ 34, 32, 70, 19, 70, 64, 242, 177, 65, 249, 247, 198, 253, 64, 34, 32, ++ 70, 19, 70, 64, 246, 165, 17, 249, 247, 191, 253, 32, 70, 64, 242, 99, ++ 65, 79, 244, 127, 66, 79, 244, 228, 67, 249, 247, 182, 253, 7, 33, 1, ++ 34, 2, 35, 32, 70, 254, 247, 208, 254, 32, 70, 251, 247, 223, 255, 32, ++ 70, 48, 33, 63, 34, 51, 70, 249, 247, 108, 253, 32, 70, 126, 34, 43, ++ 70, 49, 33, 249, 247, 102, 253, 57, 33, 32, 70, 15, 34, 0, 35, 249, ++ 247, 96, 253, 17, 176, 240, 189, 0, 191, 128, 22, 4, 0, 16, 181, 64, ++ 242, 74, 65, 79, 244, 128, 114, 4, 70, 249, 247, 128, 253, 32, 70, 64, ++ 242, 74, 65, 79, 246, 255, 98, 189, 232, 16, 64, 249, 247, 106, 189, ++ 131, 107, 147, 248, 44, 33, 139, 30, 74, 177, 1, 43, 14, 217, 105, 177, ++ 161, 241, 4, 12, 220, 241, 0, 0, 64, 235, 12, 0, 112, 71, 1, 43, 6, ++ 217, 209, 241, 1, 0, 56, 191, 0, 32, 112, 71, 1, 32, 112, 71, 1, 32, ++ 112, 71, 16, 181, 4, 70, 4, 41, 36, 216, 223, 232, 1, 240, 30, 35, 15, ++ 3, 3, 0, 79, 244, 48, 97, 2, 34, 0, 35, 249, 247, 92, 253, 32, 70, 64, ++ 246, 7, 49, 1, 34, 0, 35, 10, 224, 2, 34, 79, 244, 48, 97, 19, 70, 249, ++ 247, 80, 253, 1, 34, 32, 70, 64, 246, 7, 49, 19, 70, 249, 247, 73, 253, ++ 0, 32, 16, 189, 79, 244, 48, 97, 2, 34, 0, 35, 239, 231, 111, 240, 2, ++ 0, 16, 189, 112, 181, 4, 70, 251, 247, 176, 249, 163, 107, 5, 70, 147, ++ 248, 44, 49, 155, 179, 0, 35, 196, 248, 104, 49, 128, 248, 127, 51, ++ 79, 244, 122, 115, 192, 248, 84, 51, 100, 35, 192, 248, 92, 51, 3, 35, ++ 192, 248, 88, 51, 20, 35, 192, 248, 96, 51, 55, 35, 128, 248, 120, 51, ++ 128, 248, 121, 51, 97, 35, 128, 248, 118, 51, 128, 248, 119, 51, 128, ++ 248, 116, 51, 128, 248, 117, 51, 64, 246, 87, 33, 32, 70, 255, 34, 249, ++ 247, 16, 253, 149, 248, 119, 51, 32, 70, 27, 2, 64, 246, 87, 33, 79, ++ 244, 127, 66, 249, 247, 6, 253, 163, 107, 27, 106, 197, 248, 104, 51, ++ 32, 70, 1, 34, 0, 35, 79, 244, 48, 97, 249, 247, 251, 252, 32, 70, 2, ++ 34, 0, 35, 79, 244, 48, 97, 249, 247, 244, 252, 32, 70, 4, 34, 0, 35, ++ 79, 244, 48, 97, 249, 247, 237, 252, 32, 70, 8, 34, 0, 35, 79, 244, ++ 48, 97, 249, 247, 230, 252, 240, 34, 32, 70, 19, 70, 79, 244, 48, 97, ++ 249, 247, 223, 252, 79, 244, 112, 98, 32, 70, 19, 70, 79, 244, 48, 97, ++ 249, 247, 215, 252, 32, 70, 0, 35, 79, 244, 48, 97, 79, 244, 128, 82, ++ 249, 247, 207, 252, 32, 70, 1, 34, 0, 35, 64, 246, 7, 49, 249, 247, ++ 200, 252, 32, 70, 6, 34, 4, 35, 64, 246, 7, 49, 249, 247, 193, 252, ++ 32, 70, 56, 34, 8, 35, 64, 246, 7, 49, 249, 247, 186, 252, 32, 70, 0, ++ 35, 64, 246, 7, 49, 79, 244, 224, 114, 249, 247, 178, 252, 32, 70, 48, ++ 34, 16, 35, 64, 246, 11, 49, 249, 247, 171, 252, 64, 34, 32, 70, 19, ++ 70, 64, 246, 11, 49, 249, 247, 164, 252, 32, 70, 64, 246, 11, 49, 79, ++ 244, 240, 98, 79, 244, 128, 99, 249, 247, 155, 252, 32, 70, 64, 246, ++ 11, 49, 79, 244, 240, 66, 79, 244, 0, 83, 249, 247, 146, 252, 32, 70, ++ 64, 246, 12, 49, 79, 246, 255, 114, 79, 244, 128, 83, 249, 247, 137, ++ 252, 32, 70, 64, 246, 13, 49, 79, 246, 255, 114, 79, 244, 80, 67, 249, ++ 247, 128, 252, 32, 70, 64, 246, 14, 49, 79, 246, 255, 114, 79, 244, ++ 120, 67, 249, 247, 119, 252, 32, 70, 16, 35, 64, 246, 15, 49, 79, 246, ++ 255, 114, 249, 247, 111, 252, 32, 70, 79, 244, 49, 97, 79, 246, 255, ++ 114, 79, 244, 120, 67, 249, 247, 102, 252, 32, 70, 64, 246, 17, 49, ++ 79, 246, 255, 114, 79, 244, 125, 67, 249, 247, 93, 252, 32, 70, 15, ++ 34, 0, 35, 64, 246, 18, 49, 249, 247, 86, 252, 32, 70, 240, 34, 0, 35, ++ 64, 246, 18, 49, 249, 247, 79, 252, 32, 70, 0, 35, 64, 246, 18, 49, ++ 79, 244, 112, 98, 249, 247, 71, 252, 32, 70, 15, 34, 0, 35, 64, 246, ++ 19, 49, 249, 247, 64, 252, 32, 70, 240, 34, 0, 35, 64, 246, 19, 49, ++ 249, 247, 57, 252, 32, 70, 0, 35, 64, 246, 19, 49, 79, 244, 112, 98, ++ 249, 247, 49, 252, 32, 70, 15, 34, 0, 35, 64, 246, 20, 49, 249, 247, ++ 42, 252, 32, 70, 240, 34, 0, 35, 64, 246, 20, 49, 249, 247, 35, 252, ++ 32, 70, 0, 35, 64, 246, 20, 49, 79, 244, 112, 98, 249, 247, 27, 252, ++ 15, 34, 32, 70, 0, 35, 64, 246, 21, 49, 249, 247, 20, 252, 32, 70, 240, ++ 34, 0, 35, 64, 246, 21, 49, 249, 247, 13, 252, 32, 70, 0, 35, 64, 246, ++ 21, 49, 79, 244, 112, 98, 249, 247, 5, 252, 32, 70, 3, 34, 1, 35, 64, ++ 246, 22, 49, 249, 247, 254, 251, 32, 70, 12, 34, 0, 35, 64, 246, 22, ++ 49, 249, 247, 247, 251, 32, 70, 48, 34, 16, 35, 64, 246, 22, 49, 249, ++ 247, 240, 251, 32, 70, 192, 34, 64, 35, 64, 246, 22, 49, 249, 247, 233, ++ 251, 32, 70, 0, 35, 64, 246, 22, 49, 79, 244, 64, 114, 249, 247, 225, ++ 251, 32, 70, 64, 246, 22, 49, 79, 244, 64, 98, 79, 244, 128, 99, 249, ++ 247, 216, 251, 32, 70, 3, 34, 0, 35, 64, 246, 23, 49, 249, 247, 209, ++ 251, 32, 70, 12, 34, 64, 246, 23, 49, 79, 246, 252, 115, 249, 247, 201, ++ 251, 32, 70, 48, 34, 64, 246, 23, 49, 79, 246, 240, 115, 249, 247, 193, ++ 251, 32, 70, 192, 34, 0, 35, 64, 246, 23, 49, 249, 247, 186, 251, 32, ++ 70, 64, 246, 23, 49, 79, 244, 64, 114, 79, 244, 127, 67, 249, 247, 177, ++ 251, 32, 70, 64, 246, 23, 49, 79, 244, 64, 98, 79, 244, 124, 67, 249, ++ 247, 168, 251, 32, 70, 1, 34, 0, 35, 64, 246, 6, 49, 249, 247, 161, ++ 251, 31, 34, 32, 70, 19, 70, 64, 246, 5, 49, 249, 247, 154, 251, 79, ++ 246, 255, 114, 32, 70, 19, 70, 64, 246, 4, 49, 249, 247, 146, 251, 79, ++ 246, 255, 114, 32, 70, 19, 70, 64, 246, 8, 49, 249, 247, 138, 251, 32, ++ 70, 64, 246, 9, 49, 79, 246, 255, 114, 71, 246, 255, 115, 249, 247, ++ 129, 251, 32, 70, 8, 35, 64, 246, 10, 49, 79, 246, 255, 114, 249, 247, ++ 121, 251, 32, 70, 63, 35, 64, 246, 2, 49, 79, 246, 255, 114, 249, 247, ++ 113, 251, 32, 70, 255, 35, 64, 246, 3, 49, 79, 246, 255, 114, 249, 247, ++ 105, 251, 15, 34, 32, 70, 19, 70, 64, 246, 1, 49, 249, 247, 98, 251, ++ 240, 34, 32, 70, 19, 70, 64, 246, 1, 49, 249, 247, 91, 251, 1, 34, 32, ++ 70, 79, 244, 48, 97, 19, 70, 189, 232, 112, 64, 249, 247, 82, 187, 56, ++ 181, 54, 33, 4, 70, 0, 35, 79, 244, 224, 66, 208, 248, 228, 80, 249, ++ 247, 13, 251, 54, 33, 32, 70, 79, 244, 224, 98, 79, 244, 128, 99, 249, ++ 247, 5, 251, 54, 33, 112, 34, 64, 35, 32, 70, 249, 247, 255, 250, 54, ++ 33, 7, 34, 0, 35, 32, 70, 249, 247, 249, 250, 53, 33, 0, 35, 32, 70, ++ 79, 244, 224, 66, 249, 247, 242, 250, 79, 244, 224, 98, 53, 33, 19, ++ 70, 32, 70, 249, 247, 235, 250, 53, 33, 0, 35, 32, 70, 79, 244, 0, 66, ++ 249, 247, 228, 250, 53, 33, 126, 34, 32, 35, 32, 70, 249, 247, 222, ++ 250, 58, 33, 30, 34, 16, 35, 32, 70, 249, 247, 216, 250, 58, 33, 0, ++ 35, 32, 70, 1, 34, 249, 247, 210, 250, 1, 34, 32, 70, 0, 35, 64, 242, ++ 10, 81, 249, 247, 6, 251, 15, 34, 4, 35, 32, 70, 64, 242, 113, 65, 249, ++ 247, 255, 250, 240, 34, 0, 35, 32, 70, 64, 242, 113, 65, 249, 247, 248, ++ 250, 127, 34, 65, 35, 32, 70, 64, 242, 31, 65, 249, 247, 241, 250, 255, ++ 34, 12, 35, 32, 70, 79, 244, 132, 97, 249, 247, 234, 250, 255, 34, 0, ++ 35, 32, 70, 79, 244, 188, 97, 249, 247, 227, 250, 32, 70, 79, 244, 188, ++ 97, 79, 244, 127, 66, 79, 244, 64, 83, 249, 247, 218, 250, 255, 34, ++ 39, 35, 32, 70, 64, 242, 225, 81, 249, 247, 211, 250, 32, 70, 64, 242, ++ 225, 81, 79, 244, 127, 66, 79, 244, 28, 83, 249, 247, 202, 250, 255, ++ 34, 39, 35, 32, 70, 64, 242, 226, 81, 249, 247, 195, 250, 32, 70, 64, ++ 242, 226, 81, 79, 244, 127, 66, 79, 244, 240, 83, 249, 247, 186, 250, ++ 255, 34, 30, 35, 32, 70, 64, 242, 227, 81, 249, 247, 179, 250, 32, 70, ++ 64, 242, 227, 81, 79, 244, 127, 66, 79, 244, 240, 83, 249, 247, 170, ++ 250, 32, 70, 64, 242, 228, 81, 255, 34, 30, 35, 249, 247, 163, 250, ++ 255, 34, 21, 35, 32, 70, 64, 246, 150, 33, 249, 247, 156, 250, 32, 70, ++ 64, 246, 150, 33, 79, 244, 127, 66, 79, 244, 64, 99, 249, 247, 147, ++ 250, 255, 34, 0, 35, 32, 70, 64, 246, 151, 33, 249, 247, 140, 250, 127, ++ 34, 0, 35, 32, 70, 64, 242, 229, 81, 249, 247, 133, 250, 32, 70, 64, ++ 242, 229, 81, 79, 244, 126, 82, 79, 244, 240, 99, 249, 247, 124, 250, ++ 127, 34, 21, 35, 32, 70, 64, 242, 230, 81, 249, 247, 117, 250, 0, 35, ++ 32, 70, 64, 242, 230, 81, 79, 244, 126, 82, 249, 247, 109, 250, 127, ++ 34, 0, 35, 32, 70, 64, 242, 231, 81, 249, 247, 102, 250, 32, 70, 64, ++ 242, 231, 81, 79, 244, 126, 82, 79, 244, 24, 99, 249, 247, 93, 250, ++ 127, 34, 0, 35, 32, 70, 79, 244, 189, 97, 249, 247, 86, 250, 0, 35, ++ 32, 70, 79, 244, 189, 97, 79, 244, 126, 82, 249, 247, 78, 250, 127, ++ 34, 0, 35, 32, 70, 64, 242, 233, 81, 249, 247, 71, 250, 32, 70, 64, ++ 242, 233, 81, 79, 244, 126, 82, 79, 244, 16, 99, 249, 247, 62, 250, ++ 127, 34, 22, 35, 32, 70, 64, 246, 145, 33, 249, 247, 55, 250, 32, 70, ++ 64, 246, 145, 33, 79, 244, 126, 82, 79, 244, 72, 99, 249, 247, 46, 250, ++ 255, 34, 54, 35, 32, 70, 64, 242, 250, 81, 249, 247, 39, 250, 255, 34, ++ 0, 35, 32, 70, 64, 242, 245, 81, 249, 247, 32, 250, 32, 70, 64, 242, ++ 245, 81, 79, 244, 127, 66, 79, 244, 52, 83, 249, 247, 23, 250, 255, ++ 34, 36, 35, 32, 70, 64, 242, 246, 81, 249, 247, 16, 250, 32, 70, 64, ++ 242, 246, 81, 79, 244, 127, 66, 79, 244, 16, 83, 249, 247, 7, 250, 255, ++ 34, 36, 35, 32, 70, 64, 242, 247, 81, 249, 247, 0, 250, 32, 70, 64, ++ 242, 247, 81, 79, 244, 127, 66, 79, 244, 16, 83, 249, 247, 247, 249, ++ 255, 34, 36, 35, 32, 70, 79, 244, 191, 97, 249, 247, 240, 249, 32, 70, ++ 79, 244, 191, 97, 79, 244, 127, 66, 79, 244, 16, 83, 249, 247, 231, ++ 249, 255, 34, 36, 35, 32, 70, 64, 242, 249, 81, 249, 247, 224, 249, ++ 255, 34, 27, 35, 32, 70, 64, 246, 143, 33, 249, 247, 217, 249, 32, 70, ++ 64, 246, 143, 33, 79, 244, 127, 66, 79, 244, 144, 83, 249, 247, 208, ++ 249, 255, 34, 6, 35, 32, 70, 79, 244, 41, 97, 249, 247, 201, 249, 32, ++ 70, 64, 242, 255, 81, 79, 244, 126, 82, 0, 35, 249, 247, 193, 249, 127, ++ 34, 32, 70, 40, 35, 64, 242, 209, 81, 249, 247, 186, 249, 32, 70, 64, ++ 242, 209, 81, 79, 244, 126, 82, 79, 244, 136, 83, 249, 247, 177, 249, ++ 127, 34, 0, 35, 32, 70, 64, 242, 210, 81, 249, 247, 170, 249, 0, 35, ++ 32, 70, 64, 242, 210, 81, 79, 244, 126, 82, 249, 247, 162, 249, 127, ++ 34, 0, 35, 32, 70, 64, 242, 211, 81, 249, 247, 155, 249, 0, 35, 32, ++ 70, 64, 242, 211, 81, 79, 244, 126, 82, 249, 247, 147, 249, 127, 34, ++ 0, 35, 32, 70, 64, 242, 212, 81, 249, 247, 140, 249, 0, 35, 32, 70, ++ 64, 242, 212, 81, 79, 244, 126, 82, 249, 247, 132, 249, 127, 34, 5, ++ 35, 32, 70, 64, 246, 148, 33, 249, 247, 125, 249, 32, 70, 64, 246, 148, ++ 33, 79, 244, 126, 82, 79, 244, 160, 99, 249, 247, 116, 249, 127, 34, ++ 18, 35, 32, 70, 64, 246, 149, 33, 249, 247, 109, 249, 32, 70, 64, 242, ++ 249, 81, 79, 244, 127, 66, 79, 244, 64, 83, 249, 247, 100, 249, 32, ++ 70, 64, 242, 237, 81, 79, 244, 127, 66, 79, 244, 122, 67, 249, 247, ++ 91, 249, 32, 70, 64, 242, 228, 81, 79, 244, 112, 98, 79, 244, 128, 115, ++ 249, 247, 82, 249, 24, 34, 16, 35, 32, 70, 64, 242, 101, 81, 249, 247, ++ 75, 249, 7, 34, 19, 70, 32, 70, 48, 33, 249, 247, 69, 249, 32, 70, 64, ++ 242, 113, 65, 79, 244, 127, 66, 79, 244, 150, 67, 249, 247, 60, 249, ++ 63, 34, 32, 70, 64, 242, 234, 81, 79, 246, 250, 115, 249, 247, 52, 249, ++ 32, 70, 64, 242, 234, 81, 79, 244, 127, 66, 79, 244, 119, 67, 249, 247, ++ 43, 249, 255, 34, 0, 35, 32, 70, 64, 242, 55, 65, 249, 247, 36, 249, ++ 32, 70, 64, 242, 41, 65, 79, 244, 248, 66, 79, 244, 144, 67, 249, 247, ++ 27, 249, 255, 34, 81, 35, 32, 70, 64, 242, 114, 65, 249, 247, 20, 249, ++ 32, 70, 64, 242, 66, 81, 79, 244, 127, 66, 79, 244, 168, 67, 249, 247, ++ 11, 249, 255, 34, 23, 35, 32, 70, 64, 242, 52, 81, 249, 247, 4, 249, ++ 255, 34, 0, 35, 32, 70, 64, 242, 213, 81, 249, 247, 253, 248, 32, 70, ++ 79, 244, 170, 97, 64, 242, 255, 50, 64, 242, 105, 19, 249, 247, 244, ++ 248, 64, 35, 32, 70, 64, 246, 82, 33, 79, 244, 255, 82, 249, 247, 236, ++ 248, 255, 34, 2, 35, 32, 70, 64, 246, 83, 33, 249, 247, 229, 248, 15, ++ 34, 1, 35, 32, 70, 64, 246, 88, 33, 249, 247, 222, 248, 255, 34, 46, ++ 35, 32, 70, 64, 242, 66, 81, 249, 247, 215, 248, 0, 35, 32, 70, 64, ++ 242, 65, 65, 79, 244, 127, 66, 249, 247, 207, 248, 255, 34, 32, 70, ++ 64, 242, 66, 65, 98, 35, 249, 247, 200, 248, 32, 70, 64, 242, 213, 81, ++ 79, 244, 127, 66, 79, 244, 190, 67, 249, 247, 191, 248, 32, 70, 64, ++ 246, 40, 33, 79, 244, 127, 66, 79, 244, 190, 67, 249, 247, 182, 248, ++ 32, 70, 64, 246, 40, 33, 255, 34, 95, 35, 249, 247, 175, 248, 32, 70, ++ 64, 246, 41, 33, 79, 244, 127, 66, 79, 244, 190, 67, 249, 247, 166, ++ 248, 32, 70, 64, 246, 41, 33, 255, 34, 95, 35, 249, 247, 159, 248, 32, ++ 70, 64, 246, 85, 33, 255, 34, 94, 35, 249, 247, 152, 248, 149, 248, ++ 40, 54, 32, 70, 64, 246, 79, 33, 255, 34, 211, 177, 97, 35, 249, 247, ++ 142, 248, 79, 244, 128, 114, 19, 70, 32, 70, 64, 246, 179, 17, 249, ++ 247, 134, 248, 32, 70, 64, 242, 85, 97, 79, 244, 112, 66, 79, 244, 160, ++ 67, 249, 247, 125, 248, 32, 70, 64, 242, 85, 97, 64, 246, 255, 114, ++ 0, 35, 0, 224, 91, 35, 249, 247, 115, 248, 212, 248, 228, 48, 32, 70, ++ 147, 248, 0, 60, 11, 177, 104, 33, 0, 224, 97, 33, 10, 70, 251, 247, ++ 235, 249, 32, 70, 251, 247, 14, 248, 32, 70, 255, 247, 34, 251, 32, ++ 70, 189, 232, 56, 64, 251, 247, 142, 186, 112, 181, 5, 70, 250, 247, ++ 205, 252, 171, 107, 4, 70, 79, 244, 135, 113, 24, 105, 2, 240, 85, 254, ++ 212, 248, 100, 35, 196, 248, 100, 3, 149, 248, 229, 26, 213, 248, 104, ++ 49, 41, 179, 170, 107, 17, 106, 196, 248, 104, 19, 217, 7, 64, 241, ++ 251, 128, 35, 240, 1, 3, 16, 105, 0, 33, 197, 248, 104, 49, 2, 240, ++ 100, 254, 148, 248, 118, 51, 132, 248, 116, 51, 148, 248, 119, 51, 132, ++ 248, 117, 51, 171, 107, 24, 105, 2, 240, 58, 254, 148, 248, 118, 51, ++ 40, 70, 64, 246, 87, 33, 255, 34, 249, 247, 37, 248, 148, 248, 119, ++ 51, 202, 224, 130, 26, 219, 7, 146, 178, 4, 212, 212, 248, 84, 51, 154, ++ 66, 4, 219, 7, 224, 212, 248, 92, 51, 154, 66, 3, 221, 171, 107, 27, ++ 106, 196, 248, 104, 51, 213, 248, 104, 49, 222, 7, 8, 213, 212, 248, ++ 92, 51, 154, 66, 1, 221, 1, 35, 0, 224, 0, 35, 132, 248, 127, 51, 148, ++ 249, 127, 51, 83, 177, 148, 248, 116, 51, 3, 59, 132, 248, 116, 51, ++ 148, 248, 117, 51, 3, 59, 132, 248, 117, 51, 3, 224, 213, 248, 104, ++ 49, 216, 7, 42, 213, 149, 248, 230, 58, 187, 177, 148, 248, 116, 35, ++ 195, 241, 10, 3, 219, 178, 154, 66, 56, 191, 132, 248, 116, 51, 132, ++ 248, 125, 51, 149, 248, 230, 58, 148, 248, 117, 35, 195, 241, 10, 3, ++ 219, 178, 154, 66, 132, 248, 126, 51, 56, 191, 132, 248, 117, 51, 148, ++ 248, 120, 51, 148, 248, 116, 35, 154, 66, 152, 191, 132, 248, 116, 51, ++ 148, 248, 117, 35, 148, 248, 121, 51, 154, 66, 152, 191, 132, 248, 117, ++ 51, 171, 107, 26, 106, 212, 248, 104, 51, 211, 26, 213, 248, 104, 33, ++ 209, 7, 13, 212, 212, 248, 88, 19, 139, 66, 63, 219, 66, 240, 1, 2, ++ 1, 33, 197, 248, 104, 33, 132, 248, 127, 19, 171, 107, 24, 105, 47, ++ 224, 212, 248, 96, 35, 147, 66, 49, 219, 0, 35, 132, 248, 127, 51, 148, ++ 248, 116, 51, 148, 248, 118, 35, 3, 51, 219, 178, 148, 248, 117, 19, ++ 147, 66, 132, 248, 116, 51, 40, 191, 132, 248, 116, 35, 148, 248, 119, ++ 51, 3, 49, 201, 178, 153, 66, 132, 248, 117, 19, 148, 248, 116, 19, ++ 40, 191, 132, 248, 117, 51, 145, 66, 3, 210, 148, 248, 117, 35, 154, ++ 66, 10, 211, 213, 248, 104, 49, 0, 33, 35, 240, 1, 3, 197, 248, 104, ++ 49, 171, 107, 24, 105, 2, 240, 169, 253, 171, 107, 27, 106, 196, 248, ++ 104, 51, 40, 70, 64, 246, 87, 33, 148, 248, 116, 99, 248, 247, 238, ++ 251, 192, 178, 134, 66, 10, 209, 40, 70, 64, 246, 87, 33, 148, 248, ++ 117, 99, 248, 247, 228, 251, 0, 10, 128, 178, 134, 66, 30, 208, 171, ++ 107, 24, 105, 2, 240, 110, 253, 148, 248, 116, 51, 40, 70, 64, 246, ++ 87, 33, 255, 34, 248, 247, 89, 255, 148, 248, 117, 51, 27, 2, 40, 70, ++ 64, 246, 87, 33, 79, 244, 127, 66, 248, 247, 79, 255, 40, 70, 251, 247, ++ 126, 249, 171, 107, 24, 105, 189, 232, 112, 64, 2, 240, 86, 189, 112, ++ 189, 56, 181, 12, 70, 0, 33, 5, 70, 254, 247, 48, 250, 40, 70, 33, 70, ++ 189, 232, 56, 64, 253, 247, 90, 190, 112, 181, 208, 248, 228, 80, 0, ++ 38, 4, 70, 149, 248, 233, 20, 133, 248, 202, 100, 255, 247, 233, 255, ++ 32, 70, 181, 248, 234, 20, 254, 247, 26, 250, 32, 70, 181, 248, 238, ++ 36, 64, 246, 130, 1, 248, 247, 168, 251, 32, 70, 181, 248, 236, 36, ++ 64, 246, 7, 1, 248, 247, 161, 251, 181, 248, 246, 36, 32, 70, 64, 242, ++ 49, 97, 248, 247, 154, 251, 32, 70, 149, 248, 232, 20, 253, 247, 221, ++ 252, 32, 70, 181, 248, 204, 36, 64, 242, 76, 65, 248, 247, 142, 251, ++ 32, 70, 181, 248, 206, 36, 64, 242, 77, 65, 248, 247, 135, 251, 32, ++ 70, 181, 248, 208, 36, 79, 244, 150, 97, 248, 247, 128, 251, 32, 70, ++ 181, 248, 210, 36, 64, 242, 177, 65, 248, 247, 121, 251, 32, 70, 181, ++ 248, 212, 36, 64, 242, 249, 65, 248, 247, 114, 251, 32, 70, 181, 248, ++ 214, 36, 64, 242, 250, 65, 248, 247, 107, 251, 32, 70, 181, 248, 216, ++ 36, 64, 246, 56, 17, 248, 247, 100, 251, 32, 70, 181, 248, 218, 36, ++ 64, 246, 57, 17, 248, 247, 93, 251, 32, 70, 181, 248, 220, 36, 64, 242, ++ 61, 81, 248, 247, 86, 251, 32, 70, 181, 248, 222, 36, 64, 242, 60, 81, ++ 248, 247, 79, 251, 32, 70, 181, 248, 224, 36, 64, 242, 113, 81, 248, ++ 247, 72, 251, 32, 70, 181, 248, 226, 36, 79, 244, 174, 97, 248, 247, ++ 65, 251, 32, 70, 181, 248, 228, 36, 64, 242, 115, 81, 248, 247, 58, ++ 251, 32, 70, 181, 248, 230, 36, 64, 242, 114, 81, 248, 247, 51, 251, ++ 32, 70, 181, 248, 250, 36, 64, 246, 211, 17, 248, 247, 44, 251, 32, ++ 70, 181, 248, 248, 36, 64, 242, 218, 97, 248, 247, 37, 251, 32, 70, ++ 181, 248, 240, 36, 64, 246, 172, 17, 248, 247, 30, 251, 32, 70, 181, ++ 248, 242, 36, 64, 246, 177, 17, 248, 247, 23, 251, 32, 70, 181, 248, ++ 244, 36, 64, 246, 121, 17, 248, 247, 16, 251, 32, 70, 181, 248, 252, ++ 36, 64, 246, 165, 17, 248, 247, 9, 251, 32, 70, 49, 70, 50, 70, 51, ++ 70, 189, 232, 112, 64, 251, 247, 69, 187, 48, 181, 6, 34, 133, 176, ++ 19, 70, 129, 33, 4, 70, 208, 248, 228, 80, 248, 247, 54, 254, 3, 34, ++ 19, 70, 32, 70, 62, 33, 248, 247, 48, 254, 213, 248, 84, 21, 32, 70, ++ 255, 247, 33, 255, 148, 248, 17, 20, 3, 35, 25, 177, 0, 33, 141, 232, ++ 10, 0, 2, 224, 4, 34, 0, 145, 1, 146, 2, 147, 32, 70, 10, 70, 11, 70, ++ 3, 145, 250, 247, 206, 254, 32, 70, 1, 33, 5, 176, 189, 232, 48, 64, ++ 250, 247, 30, 191, 56, 181, 208, 248, 228, 64, 1, 33, 180, 249, 108, ++ 37, 5, 70, 251, 247, 246, 251, 0, 35, 132, 248, 202, 52, 40, 70, 180, ++ 248, 66, 37, 64, 242, 116, 81, 248, 247, 192, 250, 40, 70, 180, 248, ++ 68, 37, 64, 242, 117, 81, 248, 247, 185, 250, 40, 70, 180, 248, 70, ++ 37, 64, 246, 165, 17, 248, 247, 178, 250, 40, 70, 180, 248, 204, 36, ++ 64, 242, 76, 65, 248, 247, 171, 250, 40, 70, 180, 248, 206, 36, 64, ++ 242, 77, 65, 248, 247, 164, 250, 40, 70, 180, 248, 208, 36, 79, 244, ++ 150, 97, 248, 247, 157, 250, 40, 70, 180, 248, 210, 36, 64, 242, 177, ++ 65, 248, 247, 150, 250, 40, 70, 180, 248, 212, 36, 64, 242, 249, 65, ++ 248, 247, 143, 250, 40, 70, 180, 248, 214, 36, 64, 242, 250, 65, 248, ++ 247, 136, 250, 40, 70, 180, 248, 216, 36, 64, 246, 56, 17, 248, 247, ++ 129, 250, 40, 70, 180, 248, 218, 36, 64, 246, 57, 17, 248, 247, 122, ++ 250, 40, 70, 180, 248, 220, 36, 64, 242, 61, 81, 248, 247, 115, 250, ++ 40, 70, 180, 248, 222, 36, 64, 242, 60, 81, 248, 247, 108, 250, 40, ++ 70, 180, 248, 224, 36, 64, 242, 113, 81, 248, 247, 101, 250, 40, 70, ++ 180, 248, 226, 36, 79, 244, 174, 97, 248, 247, 94, 250, 40, 70, 180, ++ 248, 228, 36, 64, 242, 115, 81, 248, 247, 87, 250, 180, 248, 230, 36, ++ 40, 70, 64, 242, 114, 81, 248, 247, 80, 250, 40, 70, 148, 248, 232, ++ 20, 253, 247, 147, 251, 40, 70, 148, 248, 233, 20, 255, 247, 123, 254, ++ 40, 70, 180, 248, 234, 20, 254, 247, 172, 248, 40, 70, 180, 248, 238, ++ 36, 64, 246, 130, 1, 248, 247, 58, 250, 40, 70, 180, 248, 236, 36, 64, ++ 246, 7, 1, 248, 247, 51, 250, 40, 70, 180, 248, 240, 36, 64, 246, 172, ++ 17, 248, 247, 44, 250, 40, 70, 180, 248, 242, 36, 64, 246, 177, 17, ++ 248, 247, 37, 250, 40, 70, 180, 248, 244, 36, 64, 246, 121, 17, 248, ++ 247, 30, 250, 40, 70, 180, 248, 246, 36, 64, 242, 49, 97, 248, 247, ++ 23, 250, 40, 70, 180, 248, 248, 36, 64, 242, 218, 97, 248, 247, 16, ++ 250, 180, 248, 250, 36, 40, 70, 64, 246, 211, 17, 189, 232, 56, 64, ++ 248, 247, 7, 186, 0, 0, 16, 181, 40, 34, 4, 70, 9, 73, 248, 247, 140, ++ 253, 32, 70, 5, 34, 7, 73, 248, 247, 135, 253, 32, 70, 6, 73, 6, 34, ++ 248, 247, 130, 253, 32, 70, 40, 33, 189, 232, 16, 64, 255, 247, 37, ++ 190, 16, 73, 4, 0, 52, 71, 4, 0, 62, 71, 4, 0, 255, 247, 226, 191, 16, ++ 181, 4, 70, 254, 247, 102, 252, 32, 70, 189, 232, 16, 64, 255, 247, ++ 245, 191, 56, 181, 64, 242, 164, 65, 4, 70, 208, 248, 228, 80, 248, ++ 247, 204, 249, 64, 11, 128, 178, 7, 40, 2, 208, 149, 248, 69, 4, 7, ++ 224, 32, 70, 64, 242, 115, 65, 248, 247, 192, 249, 192, 5, 192, 13, ++ 64, 8, 64, 178, 56, 189, 45, 233, 240, 79, 208, 248, 232, 48, 135, 176, ++ 211, 248, 32, 49, 4, 70, 3, 240, 1, 3, 131, 240, 1, 2, 15, 70, 208, ++ 248, 228, 96, 1, 146, 27, 177, 131, 107, 24, 105, 2, 240, 56, 251, 32, ++ 70, 255, 247, 207, 255, 64, 242, 127, 65, 128, 70, 32, 70, 248, 247, ++ 157, 249, 64, 242, 117, 81, 129, 70, 32, 70, 248, 247, 151, 249, 64, ++ 242, 116, 81, 2, 144, 32, 70, 248, 247, 145, 249, 64, 242, 218, 97, ++ 3, 144, 32, 70, 248, 247, 139, 249, 64, 246, 248, 17, 4, 144, 32, 70, ++ 248, 247, 133, 249, 64, 242, 12, 81, 5, 144, 32, 70, 248, 247, 127, ++ 249, 64, 246, 172, 17, 197, 5, 32, 70, 248, 247, 121, 249, 79, 244, ++ 136, 97, 130, 70, 32, 70, 248, 247, 115, 249, 64, 246, 172, 17, 79, ++ 244, 112, 114, 79, 244, 128, 115, 131, 70, 32, 70, 248, 247, 238, 252, ++ 1, 34, 19, 70, 32, 70, 64, 246, 172, 17, 248, 247, 231, 252, 0, 35, ++ 1, 34, 32, 70, 79, 244, 136, 97, 248, 247, 224, 252, 27, 34, 32, 70, ++ 69, 73, 248, 247, 237, 252, 95, 250, 136, 243, 91, 0, 32, 70, 64, 242, ++ 164, 65, 64, 242, 255, 18, 248, 247, 209, 252, 64, 242, 255, 18, 9, ++ 244, 255, 115, 32, 70, 79, 244, 144, 97, 248, 247, 200, 252, 57, 70, ++ 32, 70, 251, 247, 218, 250, 10, 32, 211, 243, 235, 240, 32, 34, 32, ++ 70, 79, 244, 154, 97, 19, 70, 248, 247, 186, 252, 10, 32, 211, 243, ++ 225, 240, 237, 13, 1, 47, 32, 70, 3, 209, 250, 247, 73, 254, 7, 70, ++ 9, 224, 64, 242, 117, 65, 248, 247, 38, 249, 199, 5, 255, 13, 255, 47, ++ 136, 191, 167, 245, 0, 119, 32, 70, 252, 247, 50, 249, 32, 70, 64, 246, ++ 172, 17, 82, 70, 248, 247, 34, 249, 32, 70, 79, 244, 136, 97, 90, 70, ++ 248, 247, 28, 249, 32, 70, 64, 242, 117, 81, 2, 154, 248, 247, 22, 249, ++ 32, 70, 64, 242, 116, 81, 3, 154, 248, 247, 16, 249, 32, 70, 64, 242, ++ 218, 97, 4, 154, 248, 247, 10, 249, 32, 70, 64, 246, 248, 17, 5, 154, ++ 248, 247, 4, 249, 43, 70, 32, 70, 64, 242, 12, 81, 64, 242, 255, 18, ++ 248, 247, 118, 252, 182, 248, 2, 84, 79, 246, 254, 115, 109, 0, 43, ++ 64, 32, 70, 64, 242, 164, 65, 64, 242, 255, 18, 248, 247, 105, 252, ++ 182, 248, 4, 84, 79, 246, 254, 115, 109, 0, 43, 64, 32, 70, 79, 244, ++ 144, 97, 64, 242, 255, 18, 248, 247, 92, 252, 1, 155, 27, 185, 163, ++ 107, 24, 105, 2, 240, 102, 250, 56, 178, 7, 176, 189, 232, 240, 143, ++ 248, 69, 4, 0, 112, 181, 208, 248, 228, 80, 1, 38, 133, 248, 202, 100, ++ 64, 242, 76, 65, 4, 70, 248, 247, 192, 248, 64, 242, 77, 65, 165, 248, ++ 204, 4, 32, 70, 248, 247, 185, 248, 79, 244, 150, 97, 165, 248, 206, ++ 4, 32, 70, 248, 247, 178, 248, 64, 242, 177, 65, 165, 248, 208, 4, 32, ++ 70, 248, 247, 171, 248, 64, 242, 249, 65, 165, 248, 210, 4, 32, 70, ++ 248, 247, 164, 248, 64, 242, 250, 65, 165, 248, 212, 4, 32, 70, 248, ++ 247, 157, 248, 64, 246, 56, 17, 165, 248, 214, 4, 32, 70, 248, 247, ++ 150, 248, 64, 246, 57, 17, 165, 248, 216, 4, 32, 70, 248, 247, 143, ++ 248, 64, 242, 61, 81, 165, 248, 218, 4, 32, 70, 248, 247, 136, 248, ++ 64, 242, 60, 81, 165, 248, 220, 4, 32, 70, 248, 247, 129, 248, 64, 242, ++ 113, 81, 165, 248, 222, 4, 32, 70, 248, 247, 122, 248, 79, 244, 174, ++ 97, 165, 248, 224, 4, 32, 70, 248, 247, 115, 248, 64, 242, 115, 81, ++ 165, 248, 226, 4, 32, 70, 248, 247, 108, 248, 64, 242, 114, 81, 165, ++ 248, 228, 4, 32, 70, 248, 247, 101, 248, 64, 242, 218, 97, 165, 248, ++ 230, 4, 32, 70, 248, 247, 94, 248, 165, 248, 248, 4, 32, 70, 252, 247, ++ 200, 254, 133, 248, 232, 4, 32, 70, 255, 247, 128, 254, 64, 242, 164, ++ 65, 133, 248, 233, 4, 32, 70, 248, 247, 77, 248, 32, 244, 254, 80, 32, ++ 240, 63, 0, 165, 248, 234, 4, 0, 33, 32, 70, 253, 247, 185, 254, 32, ++ 70, 64, 246, 7, 1, 248, 247, 62, 248, 64, 246, 130, 1, 165, 248, 236, ++ 4, 32, 70, 248, 247, 55, 248, 50, 70, 165, 248, 238, 4, 0, 35, 32, 70, ++ 64, 246, 7, 1, 248, 247, 179, 251, 32, 70, 8, 34, 0, 35, 64, 246, 130, ++ 1, 248, 247, 172, 251, 79, 244, 0, 82, 32, 70, 19, 70, 64, 242, 76, ++ 65, 248, 247, 164, 251, 79, 244, 0, 82, 19, 70, 32, 70, 64, 242, 77, ++ 65, 248, 247, 156, 251, 32, 70, 64, 246, 172, 17, 248, 247, 18, 248, ++ 64, 246, 177, 17, 165, 248, 240, 4, 32, 70, 248, 247, 11, 248, 64, 246, ++ 121, 17, 165, 248, 242, 4, 32, 70, 248, 247, 4, 248, 50, 70, 165, 248, ++ 244, 4, 51, 70, 32, 70, 64, 246, 172, 17, 248, 247, 128, 251, 50, 70, ++ 51, 70, 32, 70, 64, 246, 121, 17, 248, 247, 121, 251, 32, 70, 64, 242, ++ 49, 97, 247, 247, 239, 255, 4, 34, 165, 248, 246, 4, 19, 70, 32, 70, ++ 64, 242, 49, 97, 248, 247, 107, 251, 16, 34, 19, 70, 32, 70, 64, 242, ++ 49, 97, 248, 247, 100, 251, 32, 70, 0, 34, 64, 242, 218, 97, 247, 247, ++ 228, 255, 8, 34, 32, 70, 19, 70, 64, 242, 218, 97, 248, 247, 87, 251, ++ 32, 34, 32, 70, 19, 70, 64, 242, 218, 97, 248, 247, 80, 251, 79, 244, ++ 128, 114, 19, 70, 32, 70, 64, 242, 218, 97, 248, 247, 72, 251, 32, 70, ++ 64, 246, 211, 17, 247, 247, 190, 255, 0, 35, 165, 248, 250, 4, 64, 246, ++ 211, 17, 32, 70, 79, 244, 0, 98, 248, 247, 57, 251, 0, 35, 32, 70, 79, ++ 244, 128, 82, 64, 246, 211, 17, 248, 247, 49, 251, 32, 70, 64, 246, ++ 165, 17, 247, 247, 167, 255, 79, 244, 128, 82, 165, 248, 252, 4, 19, ++ 70, 32, 70, 64, 246, 165, 17, 248, 247, 34, 251, 32, 70, 49, 70, 50, ++ 70, 0, 35, 189, 232, 112, 64, 250, 247, 228, 191, 45, 233, 240, 79, ++ 208, 248, 232, 48, 133, 176, 211, 248, 32, 49, 4, 70, 3, 240, 1, 3, ++ 131, 240, 1, 2, 208, 248, 228, 112, 0, 146, 27, 177, 131, 107, 24, 105, ++ 2, 240, 19, 249, 64, 242, 171, 65, 32, 70, 247, 247, 124, 255, 64, 242, ++ 164, 65, 32, 70, 247, 247, 119, 255, 0, 244, 96, 64, 1, 144, 32, 70, ++ 255, 247, 157, 253, 95, 250, 128, 251, 32, 70, 252, 247, 219, 253, 64, ++ 242, 12, 81, 128, 70, 32, 70, 247, 247, 102, 255, 79, 244, 149, 97, ++ 198, 5, 32, 70, 247, 247, 96, 255, 64, 242, 58, 65, 130, 70, 32, 70, ++ 247, 247, 90, 255, 2, 169, 192, 243, 128, 25, 32, 70, 250, 247, 168, ++ 252, 32, 70, 0, 33, 253, 247, 198, 253, 32, 70, 1, 33, 250, 247, 164, ++ 250, 32, 70, 127, 33, 255, 247, 136, 251, 1, 34, 19, 70, 32, 70, 64, ++ 242, 215, 65, 248, 247, 198, 250, 64, 34, 19, 70, 64, 242, 215, 65, ++ 32, 70, 248, 247, 191, 250, 32, 70, 253, 247, 40, 251, 0, 33, 32, 70, ++ 253, 247, 134, 248, 32, 70, 249, 247, 204, 254, 0, 34, 1, 33, 32, 70, ++ 248, 247, 240, 252, 32, 70, 249, 247, 229, 254, 64, 242, 171, 65, 32, ++ 70, 247, 247, 35, 255, 32, 70, 64, 242, 62, 97, 247, 247, 30, 255, 151, ++ 248, 51, 54, 197, 5, 246, 13, 237, 13, 147, 179, 1, 34, 19, 70, 32, ++ 70, 64, 242, 215, 65, 248, 247, 150, 250, 0, 35, 64, 242, 215, 65, 64, ++ 34, 32, 70, 248, 247, 143, 250, 32, 70, 249, 247, 163, 254, 0, 34, 1, ++ 33, 32, 70, 248, 247, 199, 252, 32, 70, 249, 247, 188, 254, 64, 242, ++ 171, 65, 32, 70, 247, 247, 250, 254, 64, 242, 62, 97, 32, 70, 247, 247, ++ 245, 254, 195, 5, 219, 13, 32, 70, 64, 242, 154, 65, 64, 242, 255, 18, ++ 248, 247, 113, 250, 32, 70, 64, 242, 215, 65, 1, 34, 0, 35, 248, 247, ++ 106, 250, 43, 70, 64, 242, 255, 18, 32, 70, 64, 242, 166, 65, 248, 247, ++ 98, 250, 41, 70, 32, 70, 254, 247, 58, 250, 0, 35, 79, 244, 128, 66, ++ 32, 70, 64, 242, 76, 65, 248, 247, 86, 250, 32, 70, 65, 70, 253, 247, ++ 32, 248, 32, 70, 73, 70, 250, 247, 33, 250, 32, 70, 2, 169, 250, 247, ++ 84, 252, 32, 70, 79, 244, 149, 97, 82, 70, 247, 247, 202, 254, 64, 242, ++ 255, 18, 51, 70, 32, 70, 64, 242, 12, 81, 248, 247, 60, 250, 32, 70, ++ 89, 70, 255, 247, 243, 250, 32, 70, 1, 153, 253, 247, 37, 253, 148, ++ 249, 24, 81, 79, 246, 192, 115, 173, 1, 43, 64, 32, 70, 79, 244, 154, ++ 97, 71, 246, 192, 114, 248, 247, 39, 250, 0, 155, 27, 185, 163, 107, ++ 24, 105, 2, 240, 49, 248, 5, 176, 189, 232, 240, 143, 112, 181, 208, ++ 248, 228, 80, 4, 70, 18, 34, 1, 38, 1, 33, 250, 247, 199, 255, 133, ++ 248, 202, 100, 32, 70, 64, 242, 116, 81, 247, 247, 137, 254, 64, 242, ++ 117, 81, 165, 248, 66, 5, 32, 70, 247, 247, 130, 254, 79, 244, 128, ++ 66, 165, 248, 68, 5, 19, 70, 32, 70, 64, 242, 116, 81, 248, 247, 253, ++ 249, 79, 244, 128, 98, 19, 70, 32, 70, 64, 242, 117, 81, 248, 247, 245, ++ 249, 32, 70, 64, 242, 76, 65, 247, 247, 107, 254, 64, 242, 77, 65, 165, ++ 248, 204, 4, 32, 70, 247, 247, 100, 254, 79, 244, 150, 97, 165, 248, ++ 206, 4, 32, 70, 247, 247, 93, 254, 64, 242, 177, 65, 165, 248, 208, ++ 4, 32, 70, 247, 247, 86, 254, 64, 242, 249, 65, 165, 248, 210, 4, 32, ++ 70, 247, 247, 79, 254, 64, 242, 250, 65, 165, 248, 212, 4, 32, 70, 247, ++ 247, 72, 254, 64, 246, 56, 17, 165, 248, 214, 4, 32, 70, 247, 247, 65, ++ 254, 64, 246, 57, 17, 165, 248, 216, 4, 32, 70, 247, 247, 58, 254, 64, ++ 242, 61, 81, 165, 248, 218, 4, 32, 70, 247, 247, 51, 254, 64, 242, 60, ++ 81, 165, 248, 220, 4, 32, 70, 247, 247, 44, 254, 64, 242, 113, 81, 165, ++ 248, 222, 4, 32, 70, 247, 247, 37, 254, 79, 244, 174, 97, 165, 248, ++ 224, 4, 32, 70, 247, 247, 30, 254, 64, 242, 115, 81, 165, 248, 226, ++ 4, 32, 70, 247, 247, 23, 254, 64, 242, 114, 81, 165, 248, 228, 4, 32, ++ 70, 247, 247, 16, 254, 64, 242, 218, 97, 165, 248, 230, 4, 32, 70, 247, ++ 247, 9, 254, 165, 248, 248, 4, 32, 70, 252, 247, 115, 252, 133, 248, ++ 232, 4, 32, 70, 255, 247, 43, 252, 64, 242, 164, 65, 133, 248, 233, ++ 4, 32, 70, 247, 247, 248, 253, 32, 244, 254, 80, 32, 240, 63, 0, 165, ++ 248, 234, 4, 0, 33, 32, 70, 253, 247, 100, 252, 32, 70, 64, 246, 7, ++ 1, 247, 247, 233, 253, 64, 246, 130, 1, 165, 248, 236, 4, 32, 70, 247, ++ 247, 226, 253, 8, 34, 0, 35, 165, 248, 238, 4, 64, 246, 130, 1, 32, ++ 70, 248, 247, 94, 249, 32, 70, 64, 246, 165, 17, 247, 247, 212, 253, ++ 64, 246, 172, 17, 165, 248, 70, 5, 32, 70, 247, 247, 205, 253, 64, 246, ++ 177, 17, 165, 248, 240, 4, 32, 70, 247, 247, 198, 253, 64, 246, 121, ++ 17, 165, 248, 242, 4, 32, 70, 247, 247, 191, 253, 79, 244, 128, 82, ++ 165, 248, 244, 4, 19, 70, 32, 70, 64, 246, 165, 17, 248, 247, 58, 249, ++ 32, 70, 50, 70, 51, 70, 64, 246, 172, 17, 248, 247, 51, 249, 64, 35, ++ 32, 70, 79, 244, 112, 114, 64, 246, 172, 17, 248, 247, 43, 249, 32, ++ 70, 64, 242, 49, 97, 247, 247, 161, 253, 4, 34, 165, 248, 246, 4, 19, ++ 70, 32, 70, 64, 242, 49, 97, 248, 247, 29, 249, 16, 34, 19, 70, 32, ++ 70, 64, 242, 49, 97, 248, 247, 22, 249, 32, 70, 71, 246, 15, 2, 64, ++ 242, 218, 97, 247, 247, 149, 253, 32, 70, 64, 246, 211, 17, 247, 247, ++ 133, 253, 0, 35, 165, 248, 250, 4, 64, 246, 211, 17, 32, 70, 79, 244, ++ 0, 98, 248, 247, 0, 249, 32, 70, 0, 35, 64, 246, 211, 17, 79, 244, 128, ++ 82, 248, 247, 248, 248, 79, 244, 0, 82, 32, 70, 19, 70, 64, 242, 76, ++ 65, 248, 247, 240, 248, 79, 244, 0, 82, 32, 70, 64, 242, 77, 65, 19, ++ 70, 189, 232, 112, 64, 248, 247, 230, 184, 248, 181, 208, 248, 232, ++ 48, 4, 70, 211, 248, 32, 49, 3, 240, 1, 3, 131, 240, 1, 5, 27, 177, ++ 131, 107, 24, 105, 1, 240, 228, 254, 64, 242, 164, 65, 32, 70, 247, ++ 247, 77, 253, 6, 70, 32, 70, 255, 247, 117, 251, 0, 33, 7, 70, 32, 70, ++ 253, 247, 186, 251, 32, 70, 253, 247, 50, 249, 64, 242, 55, 97, 79, ++ 244, 64, 66, 0, 35, 32, 70, 248, 247, 190, 248, 32, 70, 254, 247, 176, ++ 248, 79, 244, 128, 66, 0, 35, 32, 70, 64, 242, 76, 65, 248, 247, 179, ++ 248, 32, 70, 249, 178, 255, 247, 106, 249, 6, 244, 96, 65, 32, 70, 253, ++ 247, 155, 251, 148, 249, 24, 97, 79, 246, 192, 115, 182, 1, 32, 70, ++ 79, 244, 154, 97, 71, 246, 192, 114, 51, 64, 248, 247, 157, 248, 45, ++ 185, 163, 107, 24, 105, 189, 232, 248, 64, 1, 240, 166, 190, 248, 189, ++ 0, 0, 248, 181, 208, 248, 232, 48, 4, 70, 211, 248, 32, 49, 208, 248, ++ 228, 80, 3, 240, 1, 3, 176, 248, 246, 96, 131, 240, 1, 7, 27, 177, 131, ++ 107, 24, 105, 1, 240, 142, 254, 148, 248, 148, 17, 32, 70, 0, 41, 0, ++ 240, 162, 128, 252, 247, 9, 254, 213, 248, 196, 52, 32, 70, 19, 177, ++ 255, 247, 141, 255, 1, 224, 255, 247, 86, 253, 32, 70, 0, 33, 253, 247, ++ 33, 252, 32, 70, 78, 73, 15, 34, 248, 247, 121, 248, 149, 248, 51, 54, ++ 35, 179, 79, 244, 64, 66, 79, 244, 0, 67, 32, 70, 64, 242, 55, 97, 248, ++ 247, 91, 248, 32, 70, 1, 33, 253, 247, 12, 252, 149, 249, 49, 54, 32, ++ 70, 64, 242, 209, 65, 255, 34, 155, 178, 248, 247, 78, 248, 149, 248, ++ 50, 54, 32, 70, 64, 242, 209, 65, 79, 244, 127, 66, 27, 2, 248, 247, ++ 68, 248, 32, 70, 59, 73, 18, 34, 248, 247, 81, 248, 32, 70, 79, 244, ++ 149, 97, 8, 34, 247, 247, 191, 252, 148, 249, 24, 225, 79, 246, 192, ++ 115, 79, 234, 142, 30, 14, 234, 3, 3, 32, 70, 79, 244, 154, 97, 71, ++ 246, 192, 114, 248, 247, 42, 248, 79, 244, 0, 66, 19, 70, 32, 70, 79, ++ 244, 144, 97, 246, 178, 248, 247, 33, 248, 1, 62, 32, 70, 79, 244, 144, ++ 97, 64, 242, 255, 18, 180, 35, 248, 247, 24, 248, 171, 25, 147, 249, ++ 6, 54, 32, 70, 91, 0, 155, 178, 165, 248, 86, 52, 64, 242, 12, 81, 64, ++ 242, 255, 18, 248, 247, 10, 248, 213, 248, 196, 52, 99, 177, 181, 248, ++ 88, 36, 181, 248, 86, 52, 32, 70, 211, 24, 64, 242, 12, 81, 64, 242, ++ 255, 18, 155, 178, 247, 247, 250, 255, 60, 35, 32, 70, 64, 242, 167, ++ 65, 255, 34, 247, 247, 243, 255, 149, 248, 51, 52, 91, 177, 171, 25, ++ 5, 235, 70, 6, 147, 248, 38, 52, 182, 248, 12, 100, 165, 248, 2, 52, ++ 165, 248, 4, 100, 7, 224, 149, 248, 8, 52, 165, 248, 2, 52, 181, 248, ++ 6, 52, 165, 248, 4, 52, 32, 70, 79, 244, 96, 65, 253, 247, 200, 250, ++ 47, 185, 163, 107, 24, 105, 189, 232, 248, 64, 1, 240, 224, 189, 248, ++ 189, 0, 191, 72, 72, 4, 0, 102, 72, 4, 0, 112, 181, 208, 248, 228, 48, ++ 5, 70, 147, 248, 192, 36, 12, 70, 138, 66, 11, 208, 79, 244, 0, 98, ++ 131, 248, 192, 20, 64, 246, 218, 33, 0, 44, 20, 191, 19, 70, 0, 35, ++ 247, 247, 181, 255, 40, 70, 79, 244, 193, 97, 255, 34, 0, 44, 12, 191, ++ 20, 35, 24, 35, 189, 232, 112, 64, 247, 247, 169, 191, 209, 241, 1, ++ 3, 56, 191, 0, 35, 79, 244, 136, 97, 1, 34, 247, 247, 160, 191, 112, ++ 181, 4, 70, 208, 248, 228, 80, 251, 247, 6, 253, 32, 70, 255, 247, 94, ++ 248, 32, 70, 0, 33, 255, 247, 234, 255, 149, 248, 101, 53, 59, 177, ++ 0, 33, 32, 70, 10, 70, 11, 70, 189, 232, 112, 64, 250, 247, 82, 188, ++ 112, 189, 0, 0, 0, 35, 112, 181, 64, 242, 68, 97, 192, 248, 116, 49, ++ 4, 70, 247, 247, 248, 251, 10, 37, 32, 70, 64, 242, 68, 97, 247, 247, ++ 242, 251, 16, 240, 1, 3, 10, 208, 0, 33, 10, 70, 32, 70, 250, 247, 227, ++ 249, 2, 34, 32, 70, 64, 242, 63, 97, 19, 70, 6, 224, 130, 7, 6, 213, ++ 32, 70, 64, 242, 83, 65, 79, 244, 0, 66, 247, 247, 96, 255, 1, 32, 210, ++ 243, 135, 243, 32, 70, 64, 242, 68, 97, 247, 247, 211, 251, 1, 61, 1, ++ 208, 128, 7, 215, 209, 11, 34, 32, 70, 7, 73, 247, 247, 97, 255, 32, ++ 70, 0, 33, 255, 247, 162, 255, 32, 70, 64, 242, 156, 65, 1, 34, 0, 35, ++ 189, 232, 112, 64, 247, 247, 66, 191, 214, 70, 4, 0, 45, 233, 240, 67, ++ 4, 70, 137, 176, 15, 70, 144, 70, 208, 248, 228, 0, 79, 244, 128, 97, ++ 65, 242, 126, 82, 153, 70, 249, 247, 174, 253, 6, 70, 0, 40, 80, 208, ++ 1, 34, 19, 70, 32, 70, 64, 242, 156, 65, 196, 248, 116, 113, 247, 247, ++ 37, 255, 32, 70, 157, 248, 64, 16, 255, 247, 119, 255, 40, 34, 32, 70, ++ 57, 70, 249, 247, 225, 253, 176, 245, 128, 127, 5, 70, 4, 217, 212, ++ 248, 228, 0, 65, 242, 154, 81, 50, 224, 32, 70, 64, 242, 214, 97, 3, ++ 34, 0, 35, 247, 247, 11, 255, 8, 34, 19, 70, 32, 70, 64, 242, 218, 97, ++ 247, 247, 4, 255, 40, 35, 66, 70, 141, 232, 40, 0, 32, 70, 51, 70, 57, ++ 70, 253, 247, 78, 251, 21, 35, 3, 150, 5, 147, 0, 38, 32, 35, 32, 70, ++ 3, 169, 7, 147, 4, 149, 6, 150, 252, 247, 40, 252, 157, 248, 68, 48, ++ 32, 70, 1, 147, 41, 70, 79, 246, 255, 114, 51, 70, 205, 248, 0, 144, ++ 253, 247, 35, 252, 212, 248, 228, 0, 65, 242, 174, 81, 249, 247, 103, ++ 253, 9, 176, 189, 232, 240, 131, 45, 233, 240, 79, 169, 77, 151, 176, ++ 4, 70, 15, 70, 40, 104, 105, 104, 13, 171, 3, 195, 42, 137, 16, 38, ++ 26, 128, 16, 170, 3, 194, 27, 136, 213, 248, 10, 0, 19, 128, 0, 33, ++ 50, 70, 19, 144, 9, 168, 205, 243, 125, 247, 32, 70, 252, 247, 187, ++ 249, 32, 70, 250, 247, 92, 254, 32, 70, 249, 247, 193, 254, 1, 33, 32, ++ 70, 255, 247, 11, 255, 32, 70, 64, 242, 218, 97, 64, 246, 8, 2, 247, ++ 247, 51, 251, 79, 244, 128, 82, 19, 70, 32, 70, 64, 242, 164, 65, 247, ++ 247, 165, 254, 0, 34, 32, 70, 64, 242, 154, 81, 247, 247, 37, 251, 0, ++ 34, 32, 70, 64, 242, 155, 81, 247, 247, 31, 251, 0, 34, 32, 70, 64, ++ 242, 156, 81, 247, 247, 25, 251, 0, 34, 32, 70, 64, 242, 157, 81, 247, ++ 247, 19, 251, 0, 34, 64, 242, 158, 81, 32, 70, 247, 247, 13, 251, 32, ++ 70, 252, 247, 110, 249, 7, 144, 32, 70, 255, 247, 250, 254, 5, 32, 210, ++ 243, 167, 242, 0, 37, 1, 35, 250, 34, 32, 70, 123, 73, 141, 232, 40, ++ 0, 255, 247, 52, 255, 32, 70, 64, 242, 83, 65, 72, 246, 9, 34, 247, ++ 247, 243, 250, 32, 70, 64, 242, 82, 65, 71, 246, 118, 18, 247, 247, ++ 236, 250, 1, 47, 20, 208, 3, 211, 2, 47, 64, 240, 70, 129, 68, 224, ++ 64, 35, 1, 147, 110, 75, 41, 70, 2, 147, 32, 70, 9, 170, 8, 35, 0, 150, ++ 248, 247, 134, 248, 5, 33, 13, 241, 52, 10, 6, 145, 66, 224, 96, 35, ++ 223, 248, 164, 129, 1, 147, 32, 70, 41, 70, 20, 170, 2, 35, 223, 248, ++ 140, 145, 0, 150, 205, 248, 8, 128, 248, 247, 101, 248, 64, 35, 1, 147, ++ 32, 70, 41, 70, 20, 170, 2, 35, 0, 150, 205, 248, 8, 144, 248, 247, ++ 103, 248, 98, 35, 1, 147, 32, 70, 41, 70, 20, 170, 59, 70, 0, 150, 205, ++ 248, 8, 128, 248, 247, 79, 248, 67, 35, 1, 147, 20, 170, 32, 70, 41, ++ 70, 59, 70, 0, 150, 205, 248, 8, 144, 248, 247, 81, 248, 5, 34, 13, ++ 241, 64, 10, 6, 146, 13, 224, 67, 35, 1, 147, 75, 75, 32, 70, 2, 147, ++ 41, 70, 9, 170, 8, 35, 0, 150, 13, 241, 76, 10, 248, 247, 63, 248, 6, ++ 151, 0, 37, 168, 70, 185, 70, 69, 75, 7, 154, 233, 92, 91, 25, 81, 67, ++ 79, 240, 100, 11, 90, 120, 177, 251, 251, 241, 66, 234, 1, 35, 22, 174, ++ 38, 248, 2, 61, 60, 79, 79, 240, 16, 12, 0, 33, 50, 70, 1, 35, 32, 70, ++ 205, 248, 0, 192, 205, 248, 4, 128, 205, 248, 20, 192, 2, 151, 248, ++ 247, 28, 248, 54, 75, 7, 153, 234, 92, 91, 25, 74, 67, 91, 120, 178, ++ 251, 251, 251, 67, 234, 11, 43, 221, 248, 20, 192, 8, 241, 32, 3, 1, ++ 147, 0, 33, 50, 70, 1, 35, 32, 70, 8, 241, 1, 8, 173, 248, 86, 176, ++ 205, 248, 0, 192, 2, 151, 2, 53, 247, 247, 255, 255, 184, 241, 18, 15, ++ 62, 70, 191, 209, 79, 70, 85, 70, 79, 240, 0, 9, 186, 70, 32, 70, 3, ++ 33, 61, 34, 247, 247, 69, 250, 53, 248, 2, 43, 32, 70, 64, 242, 81, ++ 65, 66, 244, 0, 66, 247, 247, 60, 250, 66, 242, 17, 119, 2, 224, 10, ++ 32, 210, 243, 218, 241, 32, 70, 64, 242, 81, 65, 247, 247, 38, 250, ++ 16, 244, 64, 79, 1, 208, 1, 63, 242, 209, 32, 70, 64, 242, 81, 65, 247, ++ 247, 28, 250, 16, 39, 0, 244, 112, 96, 79, 234, 16, 43, 223, 248, 64, ++ 128, 0, 151, 248, 185, 128, 35, 1, 147, 32, 70, 89, 70, 20, 170, 2, ++ 35, 205, 248, 8, 128, 247, 247, 179, 255, 64, 35, 1, 147, 0, 151, 2, ++ 150, 32, 70, 89, 70, 20, 170, 2, 35, 30, 224, 0, 191, 166, 22, 4, 0, ++ 128, 132, 30, 0, 15, 36, 3, 0, 16, 71, 4, 0, 228, 71, 4, 0, 153, 30, ++ 3, 0, 131, 35, 1, 147, 32, 70, 0, 33, 20, 170, 1, 35, 205, 248, 8, 128, ++ 247, 247, 147, 255, 67, 35, 1, 147, 0, 151, 2, 150, 32, 70, 0, 33, 20, ++ 170, 1, 35, 247, 247, 150, 255, 9, 241, 1, 9, 6, 154, 95, 250, 137, ++ 249, 145, 69, 152, 211, 186, 241, 2, 15, 31, 208, 128, 35, 16, 37, 1, ++ 147, 32, 70, 0, 33, 20, 170, 2, 35, 0, 149, 205, 248, 8, 128, 247, 247, ++ 115, 255, 96, 35, 1, 147, 32, 70, 0, 33, 20, 170, 2, 35, 0, 149, 2, ++ 150, 247, 247, 118, 255, 112, 35, 1, 147, 32, 70, 0, 33, 20, 170, 2, ++ 35, 0, 149, 2, 150, 247, 247, 108, 255, 131, 35, 16, 37, 1, 147, 32, ++ 70, 0, 33, 20, 170, 1, 35, 0, 149, 205, 248, 8, 128, 247, 247, 83, 255, ++ 98, 35, 1, 147, 32, 70, 0, 33, 20, 170, 1, 35, 0, 149, 2, 150, 247, ++ 247, 86, 255, 114, 35, 1, 147, 32, 70, 0, 33, 20, 170, 1, 35, 0, 149, ++ 2, 150, 247, 247, 76, 255, 32, 70, 255, 247, 145, 253, 32, 70, 252, ++ 247, 252, 250, 32, 70, 251, 247, 33, 250, 32, 70, 0, 33, 255, 247, 100, ++ 253, 23, 176, 189, 232, 240, 143, 112, 181, 64, 242, 164, 65, 4, 70, ++ 247, 247, 127, 249, 5, 70, 32, 70, 254, 247, 167, 255, 0, 35, 79, 244, ++ 96, 98, 6, 70, 64, 242, 121, 81, 32, 70, 247, 247, 247, 252, 32, 70, ++ 70, 33, 254, 247, 174, 253, 32, 70, 0, 33, 255, 247, 21, 254, 32, 70, ++ 0, 33, 127, 34, 253, 247, 44, 251, 32, 70, 241, 178, 254, 247, 161, ++ 253, 32, 70, 5, 244, 96, 65, 189, 232, 112, 64, 252, 247, 208, 191, ++ 0, 0, 45, 233, 240, 79, 208, 248, 228, 32, 141, 176, 146, 248, 102, ++ 21, 7, 146, 78, 75, 79, 74, 0, 39, 2, 41, 8, 191, 26, 70, 1, 35, 6, ++ 146, 0, 147, 1, 147, 75, 73, 181, 34, 59, 70, 4, 70, 9, 151, 10, 151, ++ 11, 151, 62, 70, 255, 247, 130, 253, 184, 70, 5, 151, 79, 240, 56, 9, ++ 8, 37, 7, 154, 146, 248, 102, 53, 6, 154, 2, 43, 79, 234, 133, 3, 19, ++ 68, 88, 120, 154, 120, 8, 191, 223, 120, 0, 33, 1, 144, 2, 146, 32, ++ 70, 10, 70, 11, 70, 0, 145, 3, 151, 249, 247, 33, 253, 32, 70, 1, 33, ++ 249, 247, 116, 253, 30, 185, 32, 70, 73, 70, 254, 247, 89, 253, 79, ++ 240, 8, 10, 55, 33, 32, 70, 247, 247, 236, 248, 55, 33, 131, 70, 32, ++ 70, 247, 247, 231, 248, 0, 244, 0, 96, 192, 18, 5, 155, 11, 244, 128, ++ 123, 0, 235, 27, 43, 155, 68, 95, 250, 139, 242, 186, 241, 1, 10, 5, ++ 146, 231, 209, 9, 169, 32, 35, 32, 70, 79, 244, 128, 98, 205, 248, 0, ++ 160, 205, 248, 4, 160, 250, 247, 223, 248, 10, 153, 11, 155, 1, 245, ++ 0, 113, 3, 245, 0, 115, 137, 10, 155, 10, 110, 185, 185, 241, 55, 15, ++ 10, 217, 5, 154, 66, 185, 64, 242, 87, 70, 177, 66, 4, 216, 179, 66, ++ 148, 191, 0, 38, 1, 38, 0, 224, 1, 38, 246, 178, 38, 185, 169, 241, ++ 12, 9, 95, 250, 137, 249, 20, 224, 65, 246, 88, 50, 145, 66, 1, 216, ++ 147, 66, 1, 217, 1, 61, 6, 224, 145, 66, 16, 208, 64, 242, 86, 66, 147, ++ 66, 12, 216, 1, 53, 8, 241, 1, 8, 237, 178, 95, 250, 136, 248, 1, 38, ++ 184, 241, 8, 15, 2, 208, 13, 177, 16, 45, 129, 209, 32, 70, 255, 247, ++ 182, 252, 13, 176, 189, 232, 240, 143, 0, 191, 8, 72, 4, 0, 78, 71, ++ 4, 0, 128, 132, 30, 0, 55, 181, 4, 70, 1, 33, 208, 248, 228, 80, 255, ++ 247, 130, 252, 32, 70, 254, 247, 216, 255, 32, 70, 250, 247, 181, 253, ++ 149, 248, 101, 53, 195, 177, 181, 34, 0, 35, 1, 37, 32, 70, 13, 73, ++ 0, 149, 1, 149, 255, 247, 217, 252, 0, 33, 32, 70, 252, 247, 227, 249, ++ 32, 70, 252, 247, 200, 251, 0, 34, 32, 70, 41, 70, 19, 70, 250, 247, ++ 214, 248, 32, 70, 255, 247, 131, 252, 32, 70, 3, 176, 189, 232, 48, ++ 64, 255, 247, 37, 191, 0, 191, 128, 132, 30, 0, 240, 181, 208, 248, ++ 228, 48, 2, 37, 0, 39, 149, 176, 131, 248, 102, 85, 131, 248, 101, 117, ++ 4, 70, 255, 247, 193, 255, 41, 70, 32, 70, 18, 170, 250, 247, 226, 248, ++ 254, 35, 141, 248, 77, 48, 6, 35, 141, 248, 78, 48, 250, 35, 141, 248, ++ 76, 80, 141, 248, 79, 48, 61, 70, 19, 171, 235, 92, 3, 174, 187, 85, ++ 89, 178, 1, 35, 0, 147, 1, 147, 21, 75, 181, 34, 89, 67, 32, 70, 0, ++ 35, 255, 247, 147, 252, 0, 35, 15, 169, 79, 244, 250, 82, 0, 147, 1, ++ 147, 32, 70, 32, 35, 250, 247, 47, 248, 32, 70, 255, 247, 64, 252, 12, ++ 35, 107, 67, 242, 24, 8, 51, 4, 50, 32, 70, 15, 169, 243, 24, 1, 53, ++ 253, 247, 138, 251, 12, 55, 4, 45, 213, 209, 32, 70, 49, 70, 42, 70, ++ 253, 247, 83, 248, 32, 70, 255, 247, 16, 252, 21, 176, 240, 189, 64, ++ 66, 15, 0, 45, 233, 240, 79, 157, 176, 157, 248, 152, 160, 1, 37, 10, ++ 241, 255, 59, 5, 250, 11, 251, 137, 70, 19, 146, 79, 244, 136, 97, 95, ++ 250, 139, 242, 4, 70, 5, 146, 4, 147, 247, 247, 18, 248, 4, 34, 40, ++ 64, 19, 70, 6, 144, 79, 244, 136, 97, 32, 70, 247, 247, 142, 251, 42, ++ 70, 0, 35, 79, 244, 136, 97, 32, 70, 247, 247, 135, 251, 40, 70, 209, ++ 243, 174, 247, 42, 70, 43, 70, 79, 244, 136, 97, 32, 70, 247, 247, 125, ++ 251, 40, 70, 209, 243, 164, 247, 223, 248, 180, 132, 7, 35, 32, 38, ++ 35, 33, 1, 147, 32, 70, 43, 70, 21, 170, 0, 150, 205, 248, 8, 128, 247, ++ 247, 145, 253, 42, 70, 21, 155, 41, 70, 32, 70, 250, 247, 48, 248, 64, ++ 242, 164, 65, 32, 70, 246, 247, 220, 255, 0, 244, 96, 64, 0, 33, 7, ++ 144, 32, 70, 252, 247, 75, 254, 64, 242, 81, 65, 32, 70, 246, 247, 208, ++ 255, 64, 242, 82, 65, 8, 144, 32, 70, 246, 247, 202, 255, 64, 242, 164, ++ 65, 9, 144, 32, 70, 246, 247, 196, 255, 129, 33, 10, 144, 32, 70, 246, ++ 247, 152, 255, 104, 33, 11, 144, 32, 70, 246, 247, 147, 255, 9, 33, ++ 12, 144, 32, 70, 246, 247, 142, 255, 2, 33, 13, 144, 32, 70, 246, 247, ++ 137, 255, 165, 33, 14, 144, 32, 70, 246, 247, 132, 255, 162, 33, 15, ++ 144, 32, 70, 246, 247, 127, 255, 153, 33, 16, 144, 32, 70, 246, 247, ++ 122, 255, 150, 33, 17, 144, 32, 70, 246, 247, 117, 255, 41, 70, 18, ++ 144, 32, 70, 249, 247, 69, 254, 0, 35, 32, 70, 64, 242, 77, 65, 79, ++ 244, 128, 66, 247, 247, 20, 251, 79, 244, 128, 66, 19, 70, 32, 70, 64, ++ 242, 76, 65, 247, 247, 12, 251, 129, 33, 16, 34, 0, 35, 32, 70, 247, ++ 247, 203, 250, 64, 34, 165, 33, 19, 70, 32, 70, 247, 247, 197, 250, ++ 104, 33, 2, 34, 0, 35, 32, 70, 247, 247, 191, 250, 2, 34, 162, 33, 19, ++ 70, 32, 70, 247, 247, 185, 250, 104, 33, 42, 70, 0, 35, 32, 70, 247, ++ 247, 179, 250, 162, 33, 42, 70, 43, 70, 32, 70, 247, 247, 173, 250, ++ 9, 33, 42, 70, 0, 35, 32, 70, 247, 247, 167, 250, 153, 33, 42, 70, 43, ++ 70, 32, 70, 247, 247, 161, 250, 42, 70, 32, 70, 2, 33, 0, 35, 247, 247, ++ 155, 250, 2, 34, 19, 70, 32, 70, 150, 33, 247, 247, 149, 250, 34, 35, ++ 1, 147, 32, 70, 43, 70, 13, 33, 22, 170, 0, 150, 205, 248, 8, 128, 247, ++ 247, 234, 252, 22, 159, 32, 70, 7, 244, 126, 83, 219, 9, 1, 147, 18, ++ 33, 43, 70, 22, 170, 0, 150, 205, 248, 8, 128, 247, 247, 220, 252, 22, ++ 153, 7, 244, 240, 18, 1, 240, 15, 0, 1, 244, 240, 97, 201, 9, 1, 145, ++ 157, 248, 156, 16, 7, 244, 224, 51, 0, 38, 82, 12, 155, 11, 0, 144, ++ 2, 145, 32, 70, 199, 243, 64, 81, 3, 150, 249, 247, 25, 251, 41, 70, ++ 32, 70, 249, 247, 108, 251, 79, 244, 0, 82, 19, 70, 32, 70, 64, 242, ++ 116, 81, 247, 247, 147, 250, 79, 244, 0, 114, 19, 70, 32, 70, 64, 242, ++ 117, 81, 247, 247, 139, 250, 221, 248, 16, 192, 79, 244, 122, 113, 98, ++ 70, 1, 251, 9, 241, 43, 70, 32, 70, 0, 150, 1, 150, 255, 247, 62, 251, ++ 32, 70, 64, 242, 81, 65, 79, 244, 0, 66, 51, 70, 247, 247, 118, 250, ++ 32, 70, 64, 242, 81, 65, 79, 244, 128, 66, 51, 70, 247, 247, 110, 250, ++ 32, 70, 64, 242, 81, 65, 79, 244, 112, 98, 79, 244, 0, 115, 247, 247, ++ 101, 250, 79, 244, 0, 66, 19, 70, 32, 70, 64, 242, 83, 65, 247, 247, ++ 93, 250, 32, 70, 64, 242, 82, 65, 66, 246, 34, 18, 246, 247, 220, 254, ++ 79, 244, 134, 115, 173, 248, 104, 48, 23, 150, 177, 70, 69, 70, 158, ++ 224, 79, 244, 128, 82, 19, 70, 32, 70, 64, 242, 164, 65, 247, 247, 70, ++ 250, 79, 244, 128, 66, 32, 70, 64, 242, 81, 65, 19, 70, 247, 247, 62, ++ 250, 66, 242, 17, 119, 2, 224, 10, 32, 209, 243, 98, 246, 32, 70, 64, ++ 242, 81, 65, 246, 247, 174, 254, 16, 244, 64, 79, 1, 208, 1, 63, 242, ++ 209, 156, 35, 16, 39, 1, 147, 32, 70, 0, 33, 13, 241, 106, 2, 1, 35, ++ 0, 151, 2, 149, 247, 247, 71, 252, 157, 35, 1, 147, 32, 70, 0, 33, 27, ++ 170, 1, 35, 0, 151, 189, 248, 106, 128, 2, 149, 247, 247, 59, 252, 158, ++ 35, 1, 147, 32, 70, 0, 33, 13, 241, 110, 2, 1, 35, 0, 151, 2, 149, 247, ++ 247, 48, 252, 189, 249, 110, 32, 189, 249, 108, 48, 82, 67, 3, 251, ++ 3, 35, 23, 154, 32, 70, 211, 24, 23, 147, 64, 242, 164, 65, 79, 244, ++ 128, 82, 0, 35, 247, 247, 249, 249, 79, 244, 128, 66, 32, 70, 64, 242, ++ 81, 65, 19, 70, 247, 247, 241, 249, 66, 242, 17, 119, 2, 224, 10, 32, ++ 209, 243, 21, 246, 32, 70, 64, 242, 81, 65, 246, 247, 97, 254, 16, 244, ++ 64, 79, 1, 208, 1, 63, 242, 209, 156, 35, 16, 39, 1, 147, 32, 70, 0, ++ 33, 13, 241, 106, 2, 1, 35, 0, 151, 2, 149, 247, 247, 250, 251, 189, ++ 248, 106, 48, 32, 70, 152, 68, 157, 35, 1, 147, 0, 33, 27, 170, 1, 35, ++ 0, 151, 2, 149, 247, 247, 237, 251, 158, 35, 1, 147, 13, 241, 110, 2, ++ 1, 35, 32, 70, 0, 33, 0, 151, 2, 149, 247, 247, 226, 251, 189, 249, ++ 110, 32, 189, 249, 108, 48, 82, 67, 3, 251, 3, 35, 23, 154, 193, 68, ++ 211, 24, 31, 250, 137, 249, 23, 147, 1, 54, 5, 154, 150, 66, 255, 246, ++ 93, 175, 23, 155, 73, 250, 10, 249, 91, 68, 35, 250, 10, 243, 28, 169, ++ 65, 248, 20, 61, 26, 171, 0, 37, 1, 147, 32, 70, 24, 170, 25, 171, 0, ++ 149, 248, 247, 131, 248, 189, 248, 100, 32, 189, 248, 104, 48, 32, 70, ++ 211, 24, 19, 154, 3, 245, 135, 115, 19, 128, 255, 247, 7, 250, 42, 70, ++ 43, 70, 32, 70, 41, 70, 249, 247, 81, 254, 32, 70, 41, 70, 249, 247, ++ 84, 250, 32, 70, 43, 70, 64, 242, 117, 81, 79, 244, 0, 114, 247, 247, ++ 123, 249, 43, 70, 32, 70, 79, 244, 128, 66, 64, 242, 76, 65, 247, 247, ++ 115, 249, 32, 70, 41, 70, 249, 247, 152, 252, 32, 70, 129, 33, 11, 154, ++ 246, 247, 207, 253, 32, 70, 104, 33, 12, 154, 246, 247, 202, 253, 32, ++ 70, 9, 33, 13, 154, 246, 247, 197, 253, 32, 70, 2, 33, 14, 154, 246, ++ 247, 192, 253, 32, 70, 165, 33, 15, 154, 246, 247, 187, 253, 32, 70, ++ 162, 33, 16, 154, 246, 247, 182, 253, 32, 70, 153, 33, 17, 154, 246, ++ 247, 177, 253, 32, 70, 150, 33, 18, 154, 246, 247, 172, 253, 32, 70, ++ 10, 154, 64, 242, 164, 65, 246, 247, 199, 253, 32, 70, 8, 154, 64, 242, ++ 81, 65, 246, 247, 193, 253, 9, 154, 32, 70, 64, 242, 82, 65, 246, 247, ++ 187, 253, 32, 70, 7, 153, 252, 247, 34, 252, 32, 70, 4, 34, 43, 70, ++ 79, 244, 136, 97, 247, 247, 42, 249, 32, 70, 79, 244, 136, 97, 1, 34, ++ 6, 155, 247, 247, 35, 249, 31, 250, 137, 240, 29, 176, 189, 232, 240, ++ 143, 153, 30, 3, 0, 45, 233, 240, 71, 0, 33, 142, 176, 208, 248, 228, ++ 128, 144, 248, 246, 80, 173, 248, 50, 16, 173, 248, 52, 16, 4, 70, 0, ++ 33, 9, 168, 12, 34, 205, 243, 198, 241, 0, 35, 173, 248, 54, 48, 152, ++ 248, 21, 54, 19, 177, 152, 248, 22, 54, 1, 224, 152, 248, 20, 54, 212, ++ 248, 128, 33, 153, 73, 138, 66, 10, 209, 1, 43, 5, 241, 255, 53, 1, ++ 209, 150, 75, 32, 224, 3, 43, 12, 191, 149, 75, 150, 75, 27, 224, 150, ++ 73, 138, 66, 10, 209, 1, 43, 5, 241, 255, 53, 1, 209, 147, 75, 18, 224, ++ 3, 43, 12, 191, 146, 75, 147, 75, 13, 224, 147, 73, 138, 66, 64, 240, ++ 115, 129, 1, 43, 5, 241, 255, 53, 1, 209, 144, 75, 3, 224, 3, 43, 12, ++ 191, 143, 75, 143, 75, 3, 235, 133, 5, 0, 45, 0, 240, 100, 129, 32, ++ 70, 1, 33, 255, 247, 33, 249, 46, 136, 70, 177, 54, 178, 79, 244, 122, ++ 114, 114, 67, 32, 70, 1, 33, 252, 247, 172, 253, 1, 38, 107, 136, 99, ++ 177, 1, 54, 246, 178, 27, 178, 79, 244, 122, 114, 90, 67, 32, 70, 49, ++ 70, 252, 247, 159, 253, 1, 46, 10, 209, 0, 224, 222, 177, 2, 35, 0, ++ 147, 1, 33, 0, 35, 1, 147, 2, 147, 32, 70, 10, 70, 8, 224, 2, 35, 1, ++ 33, 0, 147, 1, 147, 0, 35, 2, 147, 32, 70, 10, 70, 11, 70, 249, 247, ++ 165, 249, 32, 70, 5, 33, 79, 244, 134, 114, 13, 241, 50, 3, 251, 247, ++ 51, 250, 0, 38, 55, 70, 177, 70, 169, 91, 33, 179, 4, 32, 11, 35, 141, ++ 232, 9, 0, 9, 178, 13, 170, 79, 244, 250, 115, 32, 70, 255, 247, 215, ++ 252, 189, 248, 52, 32, 189, 248, 50, 48, 28, 58, 210, 26, 184, 249, ++ 24, 22, 19, 178, 153, 66, 14, 220, 14, 169, 6, 35, 3, 251, 7, 19, 169, ++ 91, 1, 55, 35, 248, 20, 28, 35, 248, 18, 44, 35, 248, 16, 12, 191, 178, ++ 79, 240, 1, 9, 2, 54, 4, 46, 213, 209, 2, 35, 6, 147, 16, 35, 8, 147, ++ 13, 241, 54, 3, 4, 147, 0, 37, 1, 35, 32, 70, 4, 169, 5, 147, 7, 149, ++ 251, 247, 213, 250, 16, 35, 141, 232, 40, 0, 80, 75, 2, 33, 2, 147, ++ 32, 70, 1, 35, 13, 241, 54, 2, 1, 53, 247, 247, 124, 250, 64, 45, 240, ++ 209, 0, 37, 32, 70, 41, 70, 42, 70, 43, 70, 0, 149, 1, 149, 2, 149, ++ 249, 247, 72, 249, 185, 241, 0, 15, 64, 240, 185, 128, 202, 224, 14, ++ 171, 79, 240, 6, 9, 9, 251, 5, 57, 57, 248, 20, 108, 1, 53, 237, 178, ++ 15, 250, 134, 250, 79, 244, 122, 114, 2, 251, 10, 242, 32, 70, 41, 70, ++ 252, 247, 18, 253, 184, 249, 26, 38, 57, 249, 18, 60, 154, 66, 3, 221, ++ 32, 70, 41, 70, 54, 74, 7, 224, 184, 249, 28, 38, 32, 70, 154, 66, 204, ++ 191, 52, 74, 52, 74, 41, 70, 186, 241, 0, 15, 184, 191, 202, 241, 0, ++ 10, 249, 247, 46, 253, 79, 234, 138, 10, 0, 35, 64, 242, 113, 34, 146, ++ 69, 7, 221, 1, 51, 219, 178, 170, 245, 156, 106, 32, 43, 170, 241, 2, ++ 10, 243, 209, 50, 178, 0, 42, 216, 191, 91, 66, 219, 178, 90, 178, 118, ++ 0, 111, 244, 28, 126, 14, 251, 2, 110, 0, 42, 184, 191, 82, 66, 2, 42, ++ 108, 221, 0, 33, 10, 70, 32, 78, 15, 250, 142, 240, 49, 248, 6, 144, ++ 128, 234, 224, 124, 172, 235, 224, 124, 225, 69, 91, 209, 6, 33, 1, ++ 251, 2, 98, 0, 40, 178, 248, 2, 160, 178, 248, 4, 144, 90, 178, 8, 218, ++ 0, 42, 1, 221, 94, 30, 46, 224, 222, 178, 6, 241, 64, 3, 63, 54, 41, ++ 224, 0, 42, 35, 221, 94, 28, 37, 224, 192, 173, 58, 2, 54, 105, 4, 0, ++ 36, 101, 4, 0, 236, 100, 4, 0, 128, 186, 140, 1, 102, 108, 4, 0, 202, ++ 105, 4, 0, 236, 104, 4, 0, 0, 248, 36, 1, 110, 105, 4, 0, 158, 108, ++ 4, 0, 214, 108, 4, 0, 15, 36, 3, 0, 36, 105, 4, 0, 42, 105, 4, 0, 48, ++ 105, 4, 0, 166, 105, 4, 0, 222, 178, 6, 241, 64, 3, 65, 54, 91, 178, ++ 32, 70, 4, 169, 7, 147, 251, 247, 28, 250, 189, 248, 54, 48, 32, 70, ++ 154, 68, 4, 169, 173, 248, 54, 160, 118, 178, 251, 247, 205, 252, 32, ++ 70, 4, 169, 7, 150, 251, 247, 13, 250, 189, 248, 54, 48, 32, 70, 153, ++ 68, 4, 169, 173, 248, 54, 144, 251, 247, 191, 252, 3, 224, 1, 50, 6, ++ 49, 6, 42, 148, 209, 189, 66, 255, 244, 69, 175, 79, 240, 0, 3, 1, 47, ++ 0, 147, 1, 147, 2, 147, 32, 70, 79, 240, 5, 1, 1, 209, 58, 70, 1, 224, ++ 1, 34, 19, 70, 249, 247, 120, 248, 32, 70, 0, 33, 254, 247, 193, 255, ++ 14, 176, 189, 232, 240, 135, 0, 191, 115, 181, 0, 35, 19, 112, 11, 112, ++ 144, 248, 148, 49, 6, 70, 12, 70, 21, 70, 27, 179, 64, 242, 171, 65, ++ 246, 247, 211, 251, 16, 244, 0, 79, 48, 70, 2, 208, 64, 242, 171, 65, ++ 8, 224, 64, 242, 60, 97, 246, 247, 200, 251, 3, 4, 6, 213, 48, 70, 64, ++ 242, 60, 97, 246, 247, 193, 251, 64, 8, 32, 112, 1, 34, 1, 171, 214, ++ 248, 136, 4, 0, 33, 1, 240, 238, 249, 34, 120, 157, 248, 4, 48, 211, ++ 24, 43, 112, 124, 189, 248, 181, 20, 70, 31, 70, 5, 70, 248, 247, 61, ++ 251, 6, 70, 49, 70, 40, 70, 34, 70, 252, 247, 44, 251, 7, 235, 135, ++ 7, 237, 25, 174, 25, 150, 249, 110, 20, 32, 70, 189, 232, 248, 64, 1, ++ 240, 142, 186, 56, 181, 208, 248, 228, 80, 64, 246, 7, 1, 4, 70, 246, ++ 247, 147, 251, 149, 248, 74, 53, 27, 177, 64, 240, 1, 3, 155, 178, 2, ++ 224, 79, 246, 254, 115, 3, 64, 149, 248, 75, 37, 18, 177, 67, 240, 2, ++ 2, 2, 224, 79, 246, 253, 114, 26, 64, 32, 70, 64, 246, 7, 1, 189, 232, ++ 56, 64, 246, 247, 132, 187, 127, 181, 0, 35, 64, 242, 62, 97, 6, 70, ++ 1, 147, 2, 147, 3, 147, 246, 247, 111, 251, 64, 242, 166, 65, 197, 5, ++ 48, 70, 246, 247, 105, 251, 237, 13, 196, 5, 133, 244, 128, 117, 228, ++ 13, 5, 245, 254, 117, 3, 53, 132, 244, 128, 116, 48, 70, 1, 169, 2, ++ 170, 3, 171, 45, 27, 248, 247, 62, 251, 168, 178, 1, 169, 128, 8, 14, ++ 201, 248, 247, 136, 253, 4, 176, 112, 189, 45, 233, 240, 79, 64, 242, ++ 164, 65, 133, 176, 4, 70, 208, 248, 228, 112, 246, 247, 70, 251, 0, ++ 244, 96, 75, 32, 70, 254, 247, 109, 249, 64, 246, 7, 1, 95, 250, 128, ++ 250, 32, 70, 246, 247, 58, 251, 0, 240, 1, 0, 1, 144, 64, 242, 58, 65, ++ 32, 70, 246, 247, 50, 251, 2, 169, 192, 243, 128, 24, 32, 70, 249, 247, ++ 128, 248, 32, 70, 0, 33, 252, 247, 158, 249, 1, 34, 0, 35, 32, 70, 64, ++ 246, 7, 1, 246, 247, 166, 254, 32, 70, 1, 33, 248, 247, 117, 254, 32, ++ 70, 63, 33, 253, 247, 89, 255, 5, 38, 63, 37, 79, 244, 0, 66, 19, 70, ++ 32, 70, 64, 242, 164, 65, 246, 247, 148, 254, 1, 33, 0, 34, 32, 70, ++ 247, 247, 207, 248, 100, 32, 209, 243, 182, 242, 32, 70, 255, 247, 139, ++ 255, 1, 33, 0, 34, 129, 70, 32, 70, 247, 247, 195, 248, 100, 32, 209, ++ 243, 170, 242, 32, 70, 255, 247, 127, 255, 215, 248, 92, 53, 129, 68, ++ 79, 234, 105, 9, 195, 235, 9, 3, 0, 43, 1, 221, 90, 16, 1, 224, 90, ++ 28, 82, 16, 2, 51, 4, 43, 15, 217, 173, 24, 127, 45, 168, 191, 127, ++ 37, 1, 33, 32, 70, 37, 234, 229, 117, 248, 247, 54, 254, 32, 70, 41, ++ 70, 253, 247, 26, 255, 1, 62, 192, 209, 215, 248, 96, 53, 32, 70, 65, ++ 70, 195, 235, 9, 9, 248, 247, 40, 254, 32, 70, 2, 169, 249, 247, 91, ++ 248, 9, 241, 1, 9, 32, 70, 81, 70, 253, 247, 6, 255, 5, 235, 105, 5, ++ 32, 70, 89, 70, 252, 247, 54, 249, 127, 45, 168, 191, 127, 37, 32, 70, ++ 64, 246, 7, 1, 1, 34, 1, 155, 246, 247, 59, 254, 37, 234, 229, 112, ++ 5, 176, 189, 232, 240, 143, 45, 233, 247, 67, 21, 70, 8, 34, 15, 70, ++ 30, 70, 64, 246, 7, 1, 19, 70, 4, 70, 208, 248, 228, 144, 189, 248, ++ 40, 128, 246, 247, 38, 254, 1, 34, 19, 70, 32, 70, 64, 246, 7, 1, 246, ++ 247, 31, 254, 79, 244, 0, 82, 19, 70, 32, 70, 64, 246, 70, 1, 246, 247, ++ 23, 254, 32, 70, 64, 246, 57, 1, 58, 70, 246, 247, 151, 250, 148, 248, ++ 17, 52, 32, 70, 64, 246, 53, 1, 11, 177, 128, 34, 0, 224, 32, 34, 246, ++ 247, 140, 250, 32, 70, 79, 244, 4, 97, 0, 34, 246, 247, 134, 250, 32, ++ 70, 64, 246, 52, 1, 127, 34, 51, 70, 246, 247, 249, 253, 32, 70, 79, ++ 244, 1, 97, 79, 244, 128, 67, 79, 244, 64, 66, 246, 247, 240, 253, 148, ++ 248, 17, 52, 32, 70, 64, 246, 54, 1, 19, 177, 79, 244, 128, 114, 0, ++ 224, 128, 34, 246, 247, 106, 250, 32, 70, 64, 246, 70, 1, 15, 34, 7, ++ 35, 246, 247, 221, 253, 148, 248, 17, 100, 32, 70, 64, 246, 70, 1, 240, ++ 34, 86, 177, 144, 35, 246, 247, 211, 253, 32, 70, 64, 246, 70, 1, 79, ++ 244, 112, 98, 79, 244, 16, 99, 8, 224, 51, 70, 246, 247, 200, 253, 32, ++ 70, 64, 246, 70, 1, 79, 244, 112, 98, 51, 70, 246, 247, 192, 253, 43, ++ 70, 32, 70, 64, 246, 51, 1, 127, 34, 246, 247, 185, 253, 79, 234, 8, ++ 35, 32, 70, 64, 246, 51, 1, 79, 244, 254, 66, 3, 244, 127, 67, 246, ++ 247, 174, 253, 1, 37, 32, 70, 53, 73, 100, 34, 0, 35, 0, 149, 1, 149, ++ 254, 247, 101, 254, 79, 244, 128, 82, 19, 70, 32, 70, 64, 246, 165, ++ 17, 246, 247, 157, 253, 42, 70, 43, 70, 64, 246, 136, 17, 32, 70, 246, ++ 247, 150, 253, 79, 244, 150, 112, 209, 243, 188, 241, 42, 70, 32, 70, ++ 64, 246, 55, 1, 246, 247, 18, 250, 68, 246, 33, 101, 2, 224, 10, 32, ++ 209, 243, 176, 241, 32, 70, 64, 246, 55, 1, 246, 247, 252, 249, 48, ++ 177, 1, 61, 244, 209, 3, 224, 10, 32, 209, 243, 164, 241, 1, 224, 68, ++ 246, 33, 101, 32, 70, 64, 246, 55, 1, 246, 247, 237, 249, 8, 177, 1, ++ 61, 241, 209, 32, 70, 64, 246, 55, 1, 246, 247, 229, 249, 194, 7, 5, ++ 213, 148, 248, 185, 51, 67, 240, 1, 3, 132, 248, 185, 51, 0, 35, 32, ++ 70, 64, 246, 165, 17, 79, 244, 128, 82, 246, 247, 90, 253, 32, 70, 254, ++ 247, 209, 253, 32, 70, 0, 35, 64, 242, 166, 97, 65, 246, 255, 114, 246, ++ 247, 79, 253, 185, 248, 72, 85, 79, 246, 128, 114, 237, 1, 32, 70, 64, ++ 246, 9, 1, 5, 234, 2, 3, 3, 176, 189, 232, 240, 67, 246, 247, 64, 189, ++ 160, 37, 38, 0, 45, 233, 240, 65, 208, 248, 228, 48, 144, 248, 17, 132, ++ 147, 248, 76, 85, 147, 248, 74, 53, 0, 38, 200, 176, 4, 70, 68, 150, ++ 176, 69, 20, 191, 79, 240, 64, 8, 79, 240, 16, 8, 43, 185, 64, 246, ++ 7, 1, 1, 34, 246, 247, 36, 253, 156, 224, 254, 247, 3, 251, 32, 70, ++ 251, 247, 123, 248, 32, 70, 253, 247, 160, 254, 32, 35, 75, 79, 141, ++ 232, 72, 0, 33, 33, 1, 35, 32, 70, 68, 170, 1, 54, 2, 151, 246, 247, ++ 65, 255, 64, 46, 241, 209, 5, 34, 32, 70, 65, 70, 19, 70, 0, 149, 255, ++ 247, 208, 254, 0, 38, 1, 150, 33, 33, 1, 35, 79, 240, 32, 8, 32, 70, ++ 68, 170, 1, 54, 205, 248, 0, 128, 2, 151, 246, 247, 42, 255, 5, 46, ++ 240, 209, 62, 45, 58, 78, 24, 216, 32, 70, 33, 33, 69, 170, 1, 35, 1, ++ 149, 205, 248, 0, 128, 2, 150, 246, 247, 14, 255, 1, 53, 237, 178, 32, ++ 35, 141, 232, 168, 0, 1, 53, 33, 33, 1, 35, 32, 70, 69, 170, 237, 178, ++ 246, 247, 14, 255, 64, 45, 242, 209, 64, 246, 9, 1, 127, 34, 8, 35, ++ 32, 70, 246, 247, 211, 252, 32, 70, 251, 247, 25, 251, 32, 70, 253, ++ 247, 128, 254, 8, 34, 19, 70, 64, 246, 7, 1, 32, 70, 246, 247, 198, ++ 252, 32, 70, 255, 247, 163, 253, 64, 242, 116, 81, 32, 70, 246, 247, ++ 57, 249, 64, 242, 117, 81, 7, 70, 32, 70, 246, 247, 51, 249, 79, 244, ++ 128, 66, 19, 70, 128, 70, 64, 242, 116, 81, 32, 70, 246, 247, 175, 252, ++ 79, 244, 128, 98, 19, 70, 32, 70, 64, 242, 117, 81, 246, 247, 167, 252, ++ 0, 37, 32, 35, 141, 232, 40, 0, 32, 70, 33, 33, 4, 170, 64, 35, 2, 150, ++ 246, 247, 193, 254, 32, 70, 64, 242, 116, 81, 58, 70, 246, 247, 28, ++ 249, 32, 70, 64, 242, 117, 81, 66, 70, 246, 247, 22, 249, 4, 171, 232, ++ 88, 70, 169, 71, 170, 4, 53, 247, 247, 125, 254, 181, 245, 128, 127, ++ 245, 209, 72, 176, 189, 232, 240, 129, 0, 191, 15, 36, 3, 0, 153, 30, ++ 3, 0, 208, 248, 232, 48, 45, 233, 240, 65, 211, 248, 32, 49, 4, 70, ++ 3, 240, 1, 3, 13, 70, 131, 240, 1, 6, 27, 185, 131, 107, 24, 105, 0, ++ 240, 125, 250, 32, 70, 212, 248, 228, 112, 253, 247, 15, 255, 64, 242, ++ 127, 65, 167, 248, 2, 4, 32, 70, 212, 248, 228, 112, 246, 247, 218, ++ 248, 192, 5, 192, 13, 64, 16, 167, 248, 4, 4, 212, 248, 20, 33, 65, ++ 246, 6, 35, 19, 64, 43, 185, 68, 246, 32, 98, 16, 45, 8, 191, 250, 34, ++ 0, 224, 250, 34, 163, 107, 184, 33, 24, 105, 0, 240, 73, 250, 163, 107, ++ 24, 105, 0, 240, 81, 250, 32, 70, 248, 247, 88, 248, 212, 248, 20, 33, ++ 65, 246, 6, 35, 19, 64, 27, 185, 163, 107, 27, 106, 196, 248, 120, 49, ++ 8, 45, 1, 208, 233, 6, 6, 213, 3, 33, 10, 34, 32, 70, 249, 247, 64, ++ 248, 8, 45, 1, 208, 170, 6, 4, 213, 32, 70, 254, 247, 29, 255, 8, 45, ++ 1, 208, 107, 6, 4, 213, 32, 70, 255, 247, 32, 248, 8, 45, 1, 208, 232, ++ 5, 7, 213, 212, 248, 228, 48, 147, 248, 23, 54, 19, 177, 32, 70, 255, ++ 247, 248, 250, 32, 70, 254, 247, 247, 248, 32, 70, 248, 247, 37, 248, ++ 8, 45, 1, 208, 41, 6, 12, 213, 212, 248, 228, 80, 149, 248, 100, 53, ++ 35, 177, 32, 70, 255, 247, 45, 253, 197, 248, 84, 5, 32, 70, 255, 247, ++ 191, 254, 32, 70, 248, 247, 50, 248, 30, 185, 163, 107, 24, 105, 0, ++ 240, 5, 250, 32, 70, 0, 33, 251, 247, 166, 255, 212, 248, 228, 48, 147, ++ 248, 51, 54, 115, 177, 32, 70, 1, 33, 251, 247, 157, 255, 32, 70, 64, ++ 242, 55, 97, 79, 244, 64, 66, 79, 244, 0, 67, 189, 232, 240, 65, 246, ++ 247, 221, 187, 189, 232, 240, 129, 16, 181, 4, 70, 248, 247, 104, 250, ++ 192, 177, 212, 248, 20, 33, 64, 246, 15, 35, 19, 64, 147, 185, 148, ++ 249, 132, 49, 123, 185, 16, 6, 13, 212, 148, 248, 17, 49, 83, 185, 32, ++ 70, 252, 247, 199, 249, 48, 185, 32, 70, 79, 244, 248, 113, 189, 232, ++ 16, 64, 255, 247, 63, 191, 16, 189, 240, 181, 131, 107, 135, 176, 4, ++ 70, 79, 244, 66, 113, 24, 105, 0, 240, 183, 249, 163, 107, 7, 70, 64, ++ 242, 10, 49, 24, 105, 0, 240, 176, 249, 163, 107, 5, 70, 79, 244, 67, ++ 113, 24, 105, 0, 240, 169, 249, 163, 107, 6, 70, 64, 242, 14, 49, 24, ++ 105, 0, 240, 162, 249, 190, 25, 54, 4, 45, 24, 117, 25, 27, 208, 79, ++ 244, 134, 115, 173, 248, 20, 48, 5, 245, 128, 117, 0, 35, 109, 10, 0, ++ 147, 5, 171, 45, 2, 1, 147, 3, 170, 4, 171, 32, 70, 2, 169, 2, 149, ++ 247, 247, 112, 250, 189, 249, 16, 32, 31, 75, 155, 26, 0, 43, 184, 191, ++ 91, 66, 112, 43, 10, 217, 148, 248, 201, 42, 79, 246, 120, 99, 210, ++ 241, 1, 2, 173, 248, 16, 48, 56, 191, 0, 34, 0, 224, 1, 34, 189, 249, ++ 16, 0, 148, 248, 201, 58, 128, 8, 1, 70, 91, 177, 0, 35, 165, 107, 237, ++ 24, 1, 51, 8, 43, 133, 248, 32, 17, 248, 209, 18, 177, 0, 35, 132, 248, ++ 201, 58, 163, 107, 211, 248, 40, 33, 155, 24, 131, 248, 32, 1, 163, ++ 107, 211, 248, 40, 33, 7, 42, 1, 208, 1, 50, 0, 224, 0, 34, 195, 248, ++ 40, 33, 148, 248, 7, 49, 1, 43, 2, 209, 0, 35, 132, 248, 7, 49, 64, ++ 178, 7, 176, 240, 189, 120, 254, 255, 255, 112, 181, 208, 248, 228, ++ 48, 1, 41, 211, 248, 196, 85, 211, 248, 192, 101, 211, 248, 200, 69, ++ 2, 209, 253, 247, 245, 253, 1, 224, 248, 247, 202, 252, 0, 178, 6, 251, ++ 0, 85, 99, 30, 1, 38, 22, 250, 3, 243, 237, 24, 85, 250, 4, 244, 32, ++ 178, 112, 189, 48, 181, 208, 248, 228, 32, 210, 248, 44, 54, 243, 185, ++ 146, 248, 42, 54, 146, 248, 48, 38, 1, 36, 20, 250, 3, 243, 148, 64, ++ 208, 248, 232, 0, 1, 41, 176, 248, 156, 84, 155, 178, 164, 178, 173, ++ 178, 6, 209, 255, 42, 67, 234, 5, 3, 7, 208, 35, 234, 4, 3, 4, 224, ++ 37, 234, 3, 3, 255, 42, 24, 191, 35, 67, 160, 248, 156, 52, 1, 32, 48, ++ 189, 208, 248, 228, 48, 147, 248, 41, 54, 19, 177, 0, 33, 255, 247, ++ 209, 191, 112, 71, 208, 248, 228, 48, 211, 248, 44, 38, 114, 185, 147, ++ 248, 42, 54, 208, 248, 232, 32, 1, 32, 16, 250, 3, 243, 178, 248, 156, ++ 36, 146, 178, 26, 66, 12, 191, 0, 35, 1, 35, 11, 112, 1, 32, 112, 71, ++ 1, 42, 208, 248, 228, 48, 12, 209, 10, 120, 81, 178, 17, 241, 121, 15, ++ 10, 219, 6, 58, 82, 178, 163, 248, 2, 22, 163, 248, 4, 38, 248, 247, ++ 121, 186, 179, 249, 2, 54, 11, 96, 112, 71, 176, 248, 246, 48, 7, 181, ++ 19, 244, 64, 79, 12, 191, 144, 249, 52, 51, 144, 249, 53, 51, 1, 147, ++ 10, 51, 3, 218, 1, 169, 1, 34, 255, 247, 218, 255, 14, 189, 247, 181, ++ 208, 248, 20, 33, 64, 246, 6, 35, 19, 64, 4, 70, 15, 70, 206, 178, 35, ++ 185, 208, 248, 148, 52, 176, 248, 246, 32, 26, 112, 32, 70, 248, 247, ++ 240, 251, 32, 70, 1, 33, 254, 247, 250, 250, 212, 248, 232, 48, 211, ++ 248, 32, 49, 3, 240, 1, 3, 131, 240, 1, 5, 27, 177, 163, 107, 24, 105, ++ 0, 240, 163, 248, 32, 70, 49, 70, 250, 247, 206, 248, 32, 70, 57, 70, ++ 246, 247, 213, 253, 32, 70, 49, 70, 252, 247, 102, 251, 32, 70, 49, ++ 70, 252, 247, 12, 252, 2, 33, 1, 35, 0, 147, 32, 70, 10, 70, 11, 70, ++ 249, 247, 142, 253, 212, 248, 20, 33, 65, 246, 6, 35, 19, 64, 32, 70, ++ 19, 185, 79, 244, 248, 113, 0, 224, 16, 33, 255, 247, 243, 253, 32, ++ 70, 252, 247, 28, 255, 29, 185, 163, 107, 24, 105, 0, 240, 121, 248, ++ 0, 33, 32, 70, 254, 247, 188, 250, 32, 70, 254, 247, 206, 249, 79, 244, ++ 0, 114, 19, 70, 32, 70, 79, 244, 136, 97, 246, 247, 90, 250, 16, 34, ++ 19, 70, 32, 70, 64, 246, 5, 1, 246, 247, 83, 250, 1, 34, 19, 70, 32, ++ 70, 79, 244, 65, 113, 246, 247, 76, 250, 15, 34, 10, 35, 32, 70, 64, ++ 242, 21, 49, 246, 247, 69, 250, 64, 246, 255, 114, 19, 70, 32, 70, 64, ++ 242, 39, 49, 246, 247, 61, 250, 148, 248, 160, 58, 1, 43, 2, 209, 32, ++ 70, 255, 247, 107, 255, 1, 35, 132, 248, 201, 58, 254, 189, 208, 248, ++ 148, 52, 176, 248, 246, 32, 16, 181, 4, 70, 26, 112, 252, 247, 147, ++ 252, 32, 70, 248, 247, 111, 251, 32, 70, 253, 247, 193, 252, 148, 248, ++ 114, 51, 19, 177, 32, 70, 250, 247, 213, 255, 32, 70, 248, 247, 222, ++ 248, 32, 70, 250, 247, 23, 250, 32, 70, 180, 248, 246, 16, 255, 247, ++ 89, 255, 32, 70, 255, 247, 16, 255, 148, 248, 160, 58, 1, 43, 4, 209, ++ 32, 70, 189, 232, 16, 64, 255, 247, 59, 191, 16, 189, 128, 104, 225, ++ 243, 252, 182, 128, 104, 225, 243, 31, 183, 0, 104, 15, 240, 14, 153, ++ 0, 104, 14, 240, 93, 155, 0, 104, 14, 240, 50, 153, 0, 104, 13, 240, ++ 1, 159, 0, 104, 238, 247, 52, 184, 0, 104, 237, 247, 66, 189, 0, 104, ++ 13, 240, 70, 157, 0, 104, 13, 240, 219, 154, 3, 104, 155, 111, 152, ++ 139, 8, 128, 155, 125, 19, 112, 112, 71, 0, 104, 2, 33, 15, 240, 120, ++ 154, 0, 104, 2, 33, 15, 240, 102, 154, 0, 104, 15, 240, 235, 152, 64, ++ 104, 218, 247, 244, 190, 64, 104, 33, 240, 23, 156, 0, 104, 238, 247, ++ 140, 190, 0, 104, 238, 247, 11, 191, 45, 233, 248, 67, 139, 104, 76, ++ 105, 3, 43, 129, 70, 13, 70, 210, 248, 8, 128, 150, 137, 103, 104, 81, ++ 208, 35, 104, 0, 43, 24, 70, 11, 218, 8, 224, 3, 104, 17, 70, 64, 104, ++ 0, 34, 152, 71, 0, 40, 58, 208, 4, 35, 6, 224, 240, 24, 53, 212, 195, ++ 25, 179, 66, 50, 216, 64, 68, 0, 35, 3, 241, 8, 2, 217, 25, 171, 104, ++ 8, 49, 162, 24, 97, 24, 107, 177, 3, 43, 14, 209, 9, 224, 16, 248, 3, ++ 192, 212, 92, 206, 92, 12, 234, 4, 4, 166, 66, 29, 209, 1, 51, 0, 224, ++ 0, 35, 187, 66, 242, 219, 18, 224, 1, 43, 21, 209, 99, 104, 246, 26, ++ 176, 68, 15, 224, 16, 248, 3, 192, 212, 92, 206, 92, 12, 234, 4, 4, ++ 166, 66, 6, 209, 1, 51, 0, 224, 0, 35, 187, 66, 242, 219, 1, 32, 3, ++ 224, 1, 48, 64, 69, 247, 217, 0, 32, 43, 123, 19, 177, 128, 240, 1, ++ 0, 192, 178, 16, 177, 107, 123, 137, 248, 102, 48, 189, 232, 248, 131, ++ 160, 104, 0, 40, 175, 209, 240, 231, 45, 233, 247, 79, 3, 70, 72, 105, ++ 151, 137, 4, 29, 0, 120, 210, 248, 8, 176, 1, 144, 0, 38, 66, 224, 96, ++ 136, 180, 248, 0, 160, 0, 241, 32, 2, 51, 248, 18, 32, 165, 136, 15, ++ 250, 130, 252, 188, 241, 255, 63, 4, 209, 224, 136, 16, 240, 1, 0, 55, ++ 208, 43, 224, 1, 40, 4, 209, 186, 69, 2, 220, 202, 235, 7, 10, 0, 224, ++ 146, 68, 31, 250, 138, 250, 10, 235, 5, 2, 186, 66, 39, 220, 5, 241, ++ 8, 0, 32, 24, 218, 68, 0, 34, 12, 224, 4, 235, 2, 12, 156, 248, 8, 128, ++ 26, 248, 2, 192, 16, 248, 2, 144, 8, 234, 12, 12, 225, 69, 4, 209, 1, ++ 50, 170, 66, 240, 219, 1, 32, 0, 224, 0, 32, 226, 136, 210, 7, 72, 191, ++ 128, 240, 1, 0, 80, 177, 4, 53, 1, 54, 4, 235, 69, 4, 246, 178, 1, 154, ++ 150, 66, 185, 209, 1, 32, 0, 224, 0, 32, 10, 123, 10, 177, 128, 240, ++ 1, 0, 16, 177, 74, 123, 131, 248, 102, 32, 189, 232, 254, 143, 45, 233, ++ 240, 71, 163, 241, 12, 7, 5, 70, 56, 70, 12, 70, 145, 70, 152, 70, 211, ++ 247, 211, 253, 6, 70, 0, 40, 92, 208, 9, 241, 12, 1, 58, 70, 202, 247, ++ 49, 254, 163, 104, 102, 97, 2, 43, 46, 209, 3, 47, 87, 217, 115, 136, ++ 159, 66, 81, 209, 168, 241, 16, 8, 51, 29, 150, 248, 0, 192, 0, 33, ++ 27, 224, 159, 136, 120, 0, 8, 48, 128, 69, 72, 211, 8, 55, 223, 25, ++ 0, 34, 10, 224, 3, 235, 2, 9, 153, 248, 8, 160, 23, 248, 2, 144, 10, ++ 234, 9, 9, 7, 248, 2, 144, 1, 50, 179, 248, 4, 144, 74, 69, 240, 211, ++ 192, 235, 8, 8, 27, 24, 1, 49, 140, 69, 225, 209, 51, 120, 1, 43, 51, ++ 209, 243, 136, 29, 224, 114, 104, 3, 43, 12, 191, 4, 35, 0, 35, 3, 235, ++ 66, 1, 8, 49, 143, 66, 32, 209, 154, 24, 3, 241, 8, 1, 8, 50, 113, 24, ++ 178, 24, 0, 35, 4, 224, 205, 92, 208, 92, 40, 64, 208, 84, 1, 51, 112, ++ 104, 131, 66, 247, 211, 51, 104, 0, 43, 2, 219, 163, 104, 1, 43, 17, ++ 209, 99, 123, 67, 240, 1, 3, 99, 115, 12, 224, 111, 240, 26, 4, 4, 224, ++ 111, 240, 1, 4, 1, 224, 111, 240, 13, 4, 40, 70, 49, 70, 43, 240, 145, ++ 222, 0, 224, 0, 36, 32, 70, 189, 232, 240, 135, 112, 181, 2, 121, 4, ++ 70, 18, 240, 2, 0, 14, 70, 96, 209, 35, 106, 203, 177, 139, 104, 137, ++ 137, 22, 41, 21, 217, 25, 123, 93, 123, 9, 2, 73, 25, 137, 178, 177, ++ 245, 0, 111, 13, 209, 153, 123, 9, 9, 4, 41, 9, 209, 219, 125, 1, 43, ++ 6, 209, 99, 106, 1, 51, 99, 98, 227, 104, 1, 51, 227, 96, 112, 189, ++ 99, 105, 67, 185, 163, 141, 51, 185, 2, 240, 8, 0, 208, 241, 1, 0, 56, ++ 191, 0, 32, 112, 189, 32, 70, 49, 70, 44, 240, 210, 216, 0, 35, 132, ++ 248, 102, 48, 101, 105, 1, 32, 19, 224, 171, 104, 32, 70, 2, 43, 41, ++ 70, 50, 70, 2, 209, 255, 247, 229, 254, 1, 224, 255, 247, 128, 254, ++ 48, 177, 107, 123, 132, 248, 102, 48, 43, 105, 1, 51, 43, 97, 2, 224, ++ 45, 104, 0, 45, 233, 209, 35, 121, 3, 240, 1, 3, 152, 66, 15, 209, 163, ++ 141, 67, 177, 148, 248, 102, 48, 217, 7, 4, 212, 32, 70, 49, 70, 44, ++ 240, 107, 217, 32, 185, 163, 104, 1, 32, 1, 51, 163, 96, 112, 189, 227, ++ 104, 0, 32, 1, 51, 227, 96, 112, 189, 1, 32, 112, 189, 112, 181, 208, ++ 248, 4, 81, 6, 104, 4, 70, 232, 107, 28, 240, 46, 216, 214, 248, 108, ++ 50, 156, 66, 1, 209, 35, 122, 67, 177, 233, 106, 232, 107, 3, 74, 137, ++ 2, 35, 70, 189, 232, 112, 64, 27, 240, 209, 159, 112, 189, 1, 63, 134, ++ 0, 112, 181, 6, 104, 4, 70, 208, 248, 4, 81, 48, 70, 248, 243, 134, ++ 245, 212, 248, 4, 49, 219, 139, 3, 185, 24, 187, 43, 120, 2, 43, 32, ++ 209, 35, 122, 243, 177, 107, 120, 227, 185, 107, 104, 211, 185, 214, ++ 248, 168, 52, 35, 185, 214, 248, 104, 49, 107, 177, 155, 121, 91, 177, ++ 48, 70, 33, 70, 1, 34, 10, 240, 187, 219, 96, 177, 214, 248, 104, 1, ++ 0, 33, 50, 240, 63, 220, 6, 224, 32, 70, 1, 33, 220, 247, 231, 253, ++ 32, 70, 44, 240, 159, 217, 171, 122, 11, 185, 107, 104, 139, 177, 212, ++ 248, 4, 49, 219, 139, 67, 177, 107, 104, 32, 70, 0, 43, 12, 191, 3, ++ 35, 1, 35, 43, 98, 44, 240, 38, 218, 32, 70, 189, 232, 112, 64, 44, ++ 240, 141, 154, 35, 121, 35, 177, 32, 70, 189, 232, 112, 64, 255, 247, ++ 152, 191, 112, 189, 247, 181, 208, 248, 4, 81, 4, 70, 43, 120, 6, 104, ++ 2, 43, 239, 106, 53, 209, 51, 104, 27, 126, 0, 43, 49, 208, 43, 107, ++ 2, 169, 65, 248, 4, 61, 214, 248, 208, 5, 27, 240, 220, 223, 167, 235, ++ 144, 32, 5, 40, 1, 217, 184, 66, 5, 217, 171, 106, 32, 70, 235, 98, ++ 255, 247, 145, 255, 29, 224, 232, 98, 32, 70, 255, 247, 114, 255, 214, ++ 248, 104, 49, 179, 177, 155, 121, 163, 177, 48, 70, 33, 70, 1, 34, 10, ++ 240, 96, 219, 112, 177, 48, 70, 33, 70, 9, 240, 185, 223, 48, 177, 169, ++ 106, 214, 248, 104, 1, 73, 0, 50, 240, 222, 219, 2, 224, 32, 70, 7, ++ 240, 254, 220, 254, 189, 16, 181, 208, 248, 4, 49, 28, 122, 28, 185, ++ 255, 247, 185, 255, 32, 70, 16, 189, 79, 240, 255, 48, 16, 189, 112, ++ 181, 21, 70, 194, 104, 19, 240, 32, 0, 140, 88, 11, 209, 112, 189, 22, ++ 33, 1, 251, 6, 65, 40, 70, 116, 49, 6, 34, 202, 247, 134, 252, 64, 177, ++ 1, 54, 0, 224, 0, 38, 212, 248, 212, 49, 158, 66, 239, 211, 0, 32, 112, ++ 189, 1, 32, 112, 189, 45, 233, 240, 79, 147, 176, 30, 70, 28, 156, 195, ++ 104, 13, 70, 146, 70, 189, 248, 116, 176, 207, 88, 12, 177, 1, 148, ++ 79, 224, 27, 240, 96, 3, 25, 209, 28, 70, 108, 224, 79, 240, 22, 9, ++ 9, 251, 8, 121, 80, 70, 9, 241, 116, 1, 6, 34, 9, 241, 112, 9, 202, ++ 247, 91, 252, 56, 185, 18, 170, 2, 235, 132, 3, 9, 241, 10, 2, 67, 248, ++ 68, 44, 1, 52, 8, 241, 1, 8, 0, 224, 160, 70, 215, 248, 212, 49, 152, ++ 69, 226, 211, 43, 104, 211, 248, 188, 6, 3, 104, 235, 88, 83, 177, 27, ++ 121, 67, 177, 60, 177, 27, 240, 32, 15, 4, 209, 41, 70, 82, 70, 1, 155, ++ 8, 240, 19, 254, 43, 122, 227, 177, 228, 185, 40, 104, 3, 104, 147, ++ 248, 242, 48, 0, 43, 53, 208, 208, 248, 208, 54, 219, 136, 0, 43, 48, ++ 208, 18, 171, 67, 248, 4, 77, 82, 70, 41, 70, 39, 240, 217, 216, 17, ++ 155, 90, 28, 38, 208, 22, 34, 2, 251, 3, 115, 122, 51, 1, 147, 1, 36, ++ 0, 224, 244, 177, 115, 120, 111, 70, 243, 24, 156, 112, 3, 241, 2, 8, ++ 35, 10, 136, 248, 1, 48, 115, 120, 0, 37, 2, 51, 115, 112, 10, 224, ++ 64, 68, 2, 48, 87, 248, 4, 31, 16, 34, 202, 247, 23, 252, 115, 120, ++ 1, 53, 16, 51, 115, 112, 165, 66, 79, 234, 5, 16, 240, 209, 132, 28, ++ 228, 178, 32, 70, 19, 176, 189, 232, 240, 143, 1, 32, 112, 71, 22, 32, ++ 112, 71, 0, 0, 11, 40, 154, 191, 1, 75, 24, 92, 0, 32, 112, 71, 227, ++ 81, 4, 0, 56, 181, 13, 70, 255, 247, 241, 255, 4, 70, 40, 70, 255, 247, ++ 240, 255, 96, 67, 56, 189, 9, 185, 4, 48, 112, 71, 0, 32, 112, 71, 1, ++ 41, 3, 208, 4, 211, 3, 41, 4, 209, 1, 224, 4, 48, 112, 71, 26, 48, 112, ++ 71, 0, 32, 112, 71, 5, 41, 17, 216, 79, 240, 136, 67, 139, 64, 11, 212, ++ 79, 240, 24, 67, 139, 64, 5, 212, 79, 240, 0, 83, 139, 64, 5, 213, 4, ++ 48, 112, 71, 26, 48, 112, 71, 48, 48, 112, 71, 0, 32, 112, 71, 9, 41, ++ 14, 216, 223, 232, 1, 240, 7, 9, 11, 7, 7, 9, 5, 7, 9, 11, 4, 48, 112, ++ 71, 26, 48, 112, 71, 48, 48, 112, 71, 70, 48, 112, 71, 0, 32, 112, 71, ++ 15, 41, 19, 216, 223, 232, 1, 240, 12, 14, 16, 12, 12, 14, 18, 18, 18, ++ 18, 18, 8, 10, 12, 14, 16, 4, 48, 112, 71, 26, 48, 112, 71, 70, 48, ++ 112, 71, 92, 48, 112, 71, 48, 48, 112, 71, 0, 32, 112, 71, 112, 181, ++ 120, 177, 5, 104, 0, 35, 7, 74, 220, 0, 82, 248, 51, 96, 174, 66, 3, ++ 209, 18, 25, 83, 104, 152, 71, 112, 189, 1, 51, 5, 43, 242, 209, 0, ++ 32, 112, 189, 0, 191, 168, 81, 4, 0, 1, 41, 24, 191, 0, 32, 112, 71, ++ 1, 42, 1, 209, 4, 48, 112, 71, 0, 32, 112, 71, 1, 41, 11, 209, 1, 43, ++ 9, 216, 1, 59, 6, 73, 2, 235, 131, 2, 81, 248, 34, 48, 90, 28, 3, 208, ++ 192, 24, 112, 71, 0, 32, 112, 71, 0, 32, 112, 71, 208, 81, 4, 0, 2, ++ 40, 154, 191, 1, 75, 24, 92, 0, 32, 112, 71, 224, 81, 4, 0, 20, 35, ++ 3, 251, 1, 0, 112, 71, 56, 181, 12, 70, 0, 33, 5, 70, 255, 247, 246, ++ 255, 3, 136, 163, 66, 7, 208, 40, 70, 1, 33, 255, 247, 239, 255, 3, ++ 136, 156, 66, 24, 191, 0, 32, 56, 189, 112, 181, 14, 70, 0, 33, 5, 70, ++ 255, 247, 228, 255, 3, 136, 179, 66, 6, 208, 40, 70, 0, 33, 255, 247, ++ 221, 255, 4, 70, 8, 177, 13, 224, 0, 36, 1, 33, 40, 70, 255, 247, 213, ++ 255, 3, 136, 179, 66, 5, 208, 40, 70, 1, 33, 189, 232, 112, 64, 255, ++ 247, 204, 191, 32, 70, 112, 189, 3, 70, 16, 181, 8, 104, 12, 70, 22, ++ 34, 25, 70, 202, 247, 38, 251, 35, 104, 22, 32, 22, 51, 35, 96, 16, ++ 189, 45, 233, 247, 67, 2, 35, 1, 145, 4, 70, 11, 112, 84, 248, 4, 59, ++ 13, 70, 75, 112, 23, 70, 255, 247, 11, 255, 129, 70, 255, 247, 8, 255, ++ 128, 70, 255, 247, 5, 255, 6, 70, 255, 247, 2, 255, 79, 234, 9, 105, ++ 73, 234, 16, 105, 8, 244, 127, 72, 73, 234, 8, 41, 6, 244, 127, 6, 73, ++ 234, 22, 38, 110, 96, 56, 70, 255, 247, 244, 254, 6, 70, 56, 70, 255, ++ 247, 240, 254, 0, 10, 64, 234, 6, 38, 110, 128, 0, 38, 46, 114, 110, ++ 114, 1, 155, 10, 51, 1, 147, 104, 120, 255, 247, 230, 254, 10, 37, 128, ++ 70, 7, 224, 32, 70, 1, 169, 58, 70, 255, 247, 180, 255, 22, 52, 45, ++ 24, 1, 54, 70, 69, 245, 209, 40, 70, 189, 232, 254, 131, 16, 181, 4, ++ 70, 84, 248, 4, 11, 255, 247, 104, 255, 111, 240, 127, 1, 2, 70, 32, ++ 70, 189, 232, 16, 64, 203, 243, 76, 182, 8, 181, 255, 247, 93, 255, ++ 4, 48, 8, 189, 56, 181, 4, 70, 8, 70, 13, 70, 255, 247, 245, 255, 111, ++ 240, 127, 1, 2, 70, 32, 70, 203, 243, 59, 246, 37, 96, 56, 189, 56, ++ 181, 8, 70, 13, 70, 255, 247, 232, 255, 211, 247, 76, 250, 4, 70, 16, ++ 177, 41, 70, 255, 247, 230, 255, 32, 70, 56, 189, 16, 181, 8, 104, 12, ++ 70, 255, 247, 218, 255, 32, 70, 189, 232, 16, 64, 211, 247, 62, 186, ++ 112, 181, 0, 37, 12, 70, 13, 128, 73, 104, 6, 70, 17, 177, 255, 247, ++ 237, 255, 101, 96, 161, 104, 33, 177, 48, 70, 255, 247, 231, 255, 0, ++ 35, 163, 96, 112, 189, 0, 104, 112, 71, 2, 32, 112, 71, 56, 181, 20, ++ 70, 29, 70, 255, 247, 230, 254, 80, 177, 33, 70, 255, 247, 248, 254, ++ 1, 70, 40, 177, 40, 70, 4, 34, 202, 247, 124, 250, 4, 32, 56, 189, 40, ++ 70, 111, 240, 127, 1, 4, 34, 203, 243, 244, 245, 0, 32, 56, 189, 112, ++ 181, 4, 156, 21, 70, 30, 70, 255, 247, 204, 254, 88, 177, 41, 70, 50, ++ 70, 255, 247, 225, 254, 1, 70, 40, 177, 32, 70, 8, 34, 202, 247, 97, ++ 250, 8, 32, 112, 189, 32, 70, 111, 240, 127, 1, 8, 34, 203, 243, 217, ++ 245, 0, 32, 112, 189, 112, 181, 5, 156, 21, 70, 30, 70, 255, 247, 177, ++ 254, 96, 177, 41, 70, 50, 70, 4, 155, 255, 247, 203, 254, 1, 70, 40, ++ 177, 32, 70, 10, 34, 202, 247, 69, 250, 10, 32, 112, 189, 32, 70, 111, ++ 240, 127, 1, 10, 34, 203, 243, 189, 245, 0, 32, 112, 189, 112, 181, ++ 5, 156, 21, 70, 30, 70, 255, 247, 149, 254, 96, 177, 41, 70, 50, 70, ++ 4, 155, 255, 247, 175, 254, 1, 70, 40, 177, 32, 70, 10, 34, 202, 247, ++ 41, 250, 10, 32, 112, 189, 32, 70, 111, 240, 127, 1, 10, 34, 203, 243, ++ 161, 245, 0, 32, 112, 189, 56, 181, 29, 70, 20, 70, 255, 247, 122, 254, ++ 3, 70, 72, 177, 33, 70, 255, 247, 139, 254, 3, 70, 32, 177, 41, 70, ++ 4, 34, 202, 247, 15, 250, 4, 35, 24, 70, 56, 189, 56, 181, 29, 70, 20, ++ 70, 255, 247, 103, 254, 3, 70, 80, 177, 33, 70, 42, 70, 255, 247, 123, ++ 254, 3, 70, 32, 177, 4, 153, 8, 34, 202, 247, 251, 249, 8, 35, 24, 70, ++ 56, 189, 56, 181, 29, 70, 20, 70, 255, 247, 83, 254, 3, 70, 88, 177, ++ 4, 155, 33, 70, 42, 70, 255, 247, 108, 254, 3, 70, 32, 177, 5, 153, ++ 10, 34, 202, 247, 230, 249, 10, 35, 24, 70, 56, 189, 56, 181, 29, 70, ++ 20, 70, 255, 247, 62, 254, 3, 70, 88, 177, 4, 155, 33, 70, 42, 70, 255, ++ 247, 87, 254, 3, 70, 32, 177, 5, 153, 10, 34, 202, 247, 209, 249, 10, ++ 35, 24, 70, 56, 189, 248, 181, 4, 70, 15, 70, 6, 29, 0, 37, 5, 224, ++ 115, 87, 187, 66, 168, 191, 59, 70, 115, 85, 1, 53, 32, 104, 255, 247, ++ 83, 254, 133, 66, 244, 211, 40, 70, 248, 189, 0, 32, 112, 71, 255, 247, ++ 233, 191, 248, 181, 5, 70, 7, 121, 70, 29, 1, 36, 5, 224, 22, 249, 1, ++ 123, 1, 52, 135, 66, 184, 191, 7, 70, 40, 104, 255, 247, 60, 254, 132, ++ 66, 120, 178, 243, 211, 248, 189, 45, 233, 240, 65, 4, 70, 136, 70, ++ 7, 29, 128, 38, 0, 37, 2, 224, 23, 248, 1, 107, 1, 53, 32, 104, 255, ++ 247, 42, 254, 133, 66, 18, 210, 115, 178, 19, 241, 128, 15, 243, 208, ++ 67, 69, 241, 208, 11, 224, 23, 249, 1, 59, 19, 241, 128, 15, 5, 208, ++ 67, 69, 3, 208, 118, 178, 179, 66, 184, 191, 30, 70, 1, 53, 32, 104, ++ 255, 247, 18, 254, 133, 66, 238, 211, 112, 178, 189, 232, 240, 129, ++ 56, 181, 4, 70, 84, 248, 4, 11, 13, 70, 255, 247, 6, 254, 41, 70, 2, ++ 70, 32, 70, 189, 232, 56, 64, 203, 243, 235, 180, 112, 181, 3, 104, ++ 10, 104, 5, 70, 147, 66, 12, 70, 6, 209, 24, 70, 255, 247, 245, 253, ++ 41, 29, 2, 70, 32, 29, 86, 224, 0, 33, 255, 247, 186, 253, 0, 33, 6, ++ 70, 32, 70, 255, 247, 181, 253, 38, 177, 24, 177, 49, 70, 22, 34, 202, ++ 247, 79, 249, 1, 33, 40, 70, 255, 247, 171, 253, 1, 33, 6, 70, 32, 70, ++ 255, 247, 166, 253, 38, 177, 24, 177, 49, 70, 22, 34, 202, 247, 64, ++ 249, 3, 33, 40, 70, 255, 247, 156, 253, 3, 33, 6, 70, 32, 70, 255, 247, ++ 151, 253, 38, 177, 24, 177, 49, 70, 22, 34, 202, 247, 49, 249, 2, 33, ++ 40, 70, 255, 247, 141, 253, 2, 33, 6, 70, 32, 70, 255, 247, 136, 253, ++ 38, 177, 24, 177, 49, 70, 22, 34, 202, 247, 34, 249, 4, 33, 40, 70, ++ 255, 247, 126, 253, 4, 33, 6, 70, 32, 70, 255, 247, 121, 253, 38, 177, ++ 24, 177, 49, 70, 22, 34, 202, 247, 19, 249, 40, 70, 5, 33, 255, 247, ++ 111, 253, 5, 33, 5, 70, 32, 70, 255, 247, 106, 253, 53, 177, 40, 177, ++ 41, 70, 22, 34, 189, 232, 112, 64, 202, 247, 2, 185, 112, 189, 248, ++ 181, 4, 70, 15, 70, 6, 29, 0, 37, 7, 224, 115, 93, 90, 178, 128, 50, ++ 28, 191, 195, 235, 7, 3, 115, 85, 1, 53, 32, 104, 255, 247, 132, 253, ++ 133, 66, 242, 211, 248, 189, 248, 181, 4, 70, 15, 70, 6, 29, 0, 37, ++ 7, 224, 115, 93, 90, 178, 128, 50, 28, 191, 199, 235, 3, 3, 115, 85, ++ 1, 53, 32, 104, 255, 247, 112, 253, 133, 66, 242, 211, 248, 189, 248, ++ 181, 4, 70, 15, 70, 6, 29, 0, 37, 9, 224, 115, 87, 19, 241, 128, 15, ++ 4, 208, 123, 67, 100, 34, 147, 251, 242, 243, 115, 85, 1, 53, 32, 104, ++ 255, 247, 90, 253, 133, 66, 240, 211, 248, 189, 56, 181, 4, 70, 11, ++ 104, 0, 104, 152, 66, 4, 209, 4, 52, 13, 29, 255, 247, 77, 253, 2, 224, ++ 0, 32, 5, 70, 4, 70, 0, 35, 6, 224, 225, 86, 234, 86, 145, 66, 184, ++ 191, 10, 70, 226, 84, 1, 51, 131, 66, 246, 209, 56, 189, 56, 181, 4, ++ 70, 11, 104, 0, 104, 152, 66, 4, 209, 4, 52, 13, 29, 255, 247, 51, 253, ++ 2, 224, 0, 32, 5, 70, 4, 70, 0, 35, 6, 224, 225, 86, 234, 86, 145, 66, ++ 168, 191, 10, 70, 226, 84, 1, 51, 131, 66, 246, 209, 56, 189, 0, 0, ++ 8, 42, 45, 233, 240, 65, 5, 70, 12, 70, 22, 70, 31, 70, 26, 217, 10, ++ 104, 17, 75, 209, 248, 4, 128, 18, 186, 154, 66, 152, 250, 136, 248, ++ 2, 208, 255, 247, 114, 252, 128, 70, 64, 70, 41, 104, 255, 247, 122, ++ 252, 134, 66, 12, 211, 40, 70, 33, 70, 66, 70, 255, 247, 78, 253, 56, ++ 96, 0, 32, 189, 232, 240, 129, 111, 240, 13, 0, 189, 232, 240, 129, ++ 111, 240, 13, 0, 189, 232, 240, 129, 0, 191, 255, 192, 239, 190, 1, ++ 42, 16, 181, 20, 70, 10, 216, 255, 247, 250, 252, 80, 177, 195, 123, ++ 35, 65, 217, 7, 5, 212, 0, 235, 132, 0, 64, 104, 16, 189, 0, 32, 16, ++ 189, 0, 32, 16, 189, 1, 42, 16, 181, 20, 70, 6, 216, 255, 247, 231, ++ 252, 32, 177, 0, 235, 132, 0, 64, 104, 16, 189, 0, 32, 16, 189, 45, ++ 233, 240, 65, 1, 43, 4, 70, 30, 70, 6, 159, 29, 216, 8, 70, 17, 70, ++ 255, 247, 213, 252, 5, 70, 216, 177, 79, 234, 134, 8, 0, 235, 8, 3, ++ 89, 104, 33, 177, 185, 66, 2, 208, 32, 70, 255, 247, 125, 253, 5, 235, ++ 8, 3, 95, 96, 1, 35, 19, 250, 6, 246, 235, 123, 0, 32, 35, 234, 6, 6, ++ 238, 115, 189, 232, 240, 129, 111, 240, 29, 0, 189, 232, 240, 129, 111, ++ 240, 29, 0, 189, 232, 240, 129, 1, 41, 112, 181, 5, 70, 12, 70, 22, ++ 70, 20, 216, 0, 33, 255, 247, 166, 252, 164, 0, 0, 25, 67, 104, 179, ++ 66, 14, 208, 1, 33, 40, 70, 255, 247, 157, 252, 4, 25, 96, 104, 198, ++ 235, 0, 14, 222, 241, 0, 0, 64, 235, 14, 0, 112, 189, 0, 32, 112, 189, ++ 1, 32, 112, 189, 8, 181, 34, 185, 255, 247, 144, 252, 24, 177, 0, 123, ++ 8, 189, 128, 32, 8, 189, 128, 32, 8, 189, 56, 181, 28, 70, 21, 70, 42, ++ 185, 255, 247, 131, 252, 40, 177, 4, 115, 40, 70, 56, 189, 111, 240, ++ 29, 0, 56, 189, 111, 240, 29, 0, 56, 189, 8, 181, 34, 185, 255, 247, ++ 117, 252, 24, 177, 64, 123, 8, 189, 128, 32, 8, 189, 128, 32, 8, 189, ++ 56, 181, 28, 70, 21, 70, 42, 185, 255, 247, 104, 252, 40, 177, 68, 115, ++ 40, 70, 56, 189, 111, 240, 29, 0, 56, 189, 111, 240, 29, 0, 56, 189, ++ 8, 181, 34, 185, 255, 247, 90, 252, 8, 177, 128, 123, 0, 224, 128, 32, ++ 64, 178, 8, 189, 8, 181, 255, 247, 81, 252, 0, 48, 24, 191, 1, 32, 8, ++ 189, 8, 181, 255, 247, 92, 252, 0, 177, 0, 136, 8, 189, 16, 181, 4, ++ 70, 8, 70, 17, 70, 255, 247, 65, 252, 1, 70, 32, 177, 32, 70, 189, 232, ++ 16, 64, 255, 247, 249, 188, 16, 189, 16, 181, 0, 33, 4, 70, 255, 247, ++ 48, 252, 3, 136, 59, 177, 255, 35, 128, 34, 195, 115, 127, 35, 67, 115, ++ 2, 115, 130, 115, 3, 116, 32, 70, 1, 33, 255, 247, 34, 252, 3, 136, ++ 59, 177, 255, 35, 128, 34, 195, 115, 127, 35, 67, 115, 2, 115, 130, ++ 115, 3, 116, 16, 189, 56, 181, 5, 70, 12, 70, 8, 70, 0, 33, 255, 247, ++ 16, 252, 3, 136, 1, 70, 19, 177, 40, 70, 255, 247, 205, 252, 1, 33, ++ 32, 70, 255, 247, 6, 252, 3, 136, 1, 70, 19, 177, 40, 70, 255, 247, ++ 195, 252, 32, 70, 189, 232, 56, 64, 210, 247, 252, 190, 16, 181, 40, ++ 32, 210, 247, 245, 254, 4, 70, 24, 177, 0, 33, 40, 34, 203, 243, 213, ++ 242, 32, 70, 16, 189, 16, 181, 12, 70, 0, 33, 255, 247, 238, 251, 64, ++ 177, 127, 35, 128, 34, 4, 128, 67, 115, 2, 115, 130, 115, 3, 116, 0, ++ 32, 16, 189, 111, 240, 29, 0, 16, 189, 56, 181, 2, 34, 12, 70, 0, 35, ++ 5, 70, 44, 240, 116, 217, 212, 248, 204, 48, 1, 34, 155, 4, 72, 191, ++ 19, 70, 40, 70, 88, 191, 2, 35, 33, 70, 44, 240, 104, 217, 0, 32, 56, ++ 189, 2, 104, 75, 104, 18, 104, 146, 248, 173, 32, 106, 177, 211, 248, ++ 204, 32, 82, 4, 11, 212, 154, 121, 90, 177, 66, 104, 155, 88, 24, 125, ++ 0, 40, 20, 191, 8, 32, 0, 32, 112, 71, 16, 70, 112, 71, 0, 32, 112, ++ 71, 16, 70, 112, 71, 2, 104, 75, 104, 18, 104, 146, 248, 173, 32, 178, ++ 177, 211, 248, 204, 32, 82, 4, 18, 212, 154, 121, 130, 177, 66, 104, ++ 154, 88, 19, 125, 99, 177, 139, 105, 40, 33, 25, 112, 6, 33, 89, 112, ++ 17, 125, 153, 112, 81, 125, 217, 112, 209, 138, 153, 128, 18, 139, 218, ++ 128, 0, 32, 112, 71, 67, 104, 240, 181, 206, 88, 135, 176, 115, 104, ++ 7, 104, 35, 240, 8, 3, 115, 96, 8, 70, 13, 70, 246, 243, 104, 242, 0, ++ 33, 0, 36, 10, 70, 56, 70, 242, 243, 144, 247, 35, 70, 56, 70, 41, 70, ++ 14, 34, 0, 148, 1, 148, 2, 148, 3, 148, 4, 148, 236, 243, 227, 243, ++ 59, 104, 52, 96, 116, 96, 147, 248, 60, 48, 107, 177, 171, 121, 91, ++ 185, 213, 248, 204, 48, 152, 4, 1, 213, 217, 3, 5, 213, 40, 70, 7, 176, ++ 189, 232, 240, 64, 15, 240, 61, 156, 7, 176, 240, 189, 247, 181, 67, ++ 104, 7, 104, 204, 88, 13, 70, 6, 70, 8, 70, 236, 243, 18, 247, 1, 170, ++ 107, 70, 56, 70, 41, 70, 45, 240, 116, 221, 35, 104, 35, 240, 2, 3, ++ 35, 96, 99, 104, 67, 240, 8, 3, 99, 96, 1, 155, 90, 28, 2, 209, 0, 154, ++ 1, 50, 2, 208, 226, 104, 147, 66, 4, 217, 48, 70, 41, 70, 255, 247, ++ 168, 255, 9, 224, 210, 26, 79, 244, 122, 115, 178, 251, 243, 242, 184, ++ 104, 33, 105, 0, 35, 224, 243, 78, 246, 254, 189, 67, 104, 240, 181, ++ 204, 88, 6, 104, 99, 104, 135, 176, 35, 240, 4, 3, 99, 96, 7, 70, 4, ++ 34, 48, 70, 13, 70, 9, 240, 144, 217, 3, 70, 16, 177, 0, 35, 35, 96, ++ 57, 224, 34, 104, 41, 70, 66, 240, 1, 2, 34, 96, 0, 144, 1, 144, 2, ++ 144, 3, 144, 4, 144, 13, 34, 48, 70, 236, 243, 123, 243, 51, 104, 147, ++ 248, 60, 48, 227, 177, 171, 121, 211, 185, 213, 248, 204, 48, 152, 4, ++ 1, 213, 217, 3, 20, 213, 40, 70, 15, 240, 48, 220, 235, 104, 48, 70, ++ 217, 104, 218, 247, 109, 249, 32, 185, 35, 104, 67, 240, 2, 3, 35, 96, ++ 14, 224, 56, 70, 41, 70, 7, 176, 189, 232, 240, 64, 255, 247, 141, 191, ++ 48, 105, 1, 33, 13, 240, 152, 221, 48, 105, 3, 33, 13, 240, 148, 221, ++ 99, 104, 67, 240, 1, 3, 99, 96, 7, 176, 240, 189, 67, 104, 45, 233, ++ 247, 67, 204, 88, 4, 35, 208, 248, 0, 128, 6, 70, 99, 96, 8, 70, 13, ++ 70, 215, 247, 107, 253, 0, 240, 249, 248, 79, 244, 122, 119, 144, 251, ++ 247, 247, 39, 177, 32, 35, 179, 251, 247, 247, 1, 55, 0, 224, 1, 39, ++ 1, 170, 107, 70, 64, 70, 41, 70, 212, 248, 8, 144, 45, 240, 224, 220, ++ 1, 154, 83, 28, 2, 209, 0, 155, 1, 51, 8, 208, 227, 104, 154, 66, 5, ++ 216, 79, 244, 122, 115, 3, 251, 23, 151, 186, 66, 4, 211, 48, 70, 41, ++ 70, 255, 247, 122, 255, 8, 224, 186, 26, 178, 251, 243, 242, 216, 248, ++ 8, 0, 33, 105, 0, 35, 224, 243, 189, 245, 189, 232, 254, 131, 248, 181, ++ 6, 104, 4, 70, 214, 248, 128, 81, 107, 104, 199, 88, 51, 104, 27, 126, ++ 0, 43, 33, 208, 48, 105, 27, 240, 25, 220, 32, 177, 176, 104, 189, 232, ++ 248, 64, 212, 247, 220, 186, 123, 104, 152, 7, 5, 213, 40, 70, 33, 70, ++ 189, 232, 248, 64, 255, 247, 162, 191, 89, 7, 5, 213, 40, 70, 33, 70, ++ 189, 232, 248, 64, 255, 247, 73, 191, 26, 7, 5, 213, 40, 70, 33, 70, ++ 189, 232, 248, 64, 255, 247, 221, 190, 248, 189, 2, 104, 90, 177, 97, ++ 177, 0, 35, 193, 24, 145, 249, 4, 16, 0, 41, 8, 219, 1, 51, 147, 66, ++ 247, 209, 0, 32, 112, 71, 16, 70, 112, 71, 1, 32, 112, 71, 1, 32, 112, ++ 71, 0, 240, 64, 115, 179, 241, 128, 127, 3, 209, 0, 240, 127, 0, 45, ++ 240, 10, 158, 255, 32, 112, 71, 0, 240, 64, 115, 179, 241, 128, 127, ++ 8, 209, 192, 178, 31, 40, 2, 217, 32, 40, 5, 208, 85, 56, 192, 8, 1, ++ 48, 112, 71, 1, 32, 112, 71, 1, 32, 112, 71, 0, 240, 64, 115, 179, 241, ++ 128, 127, 11, 209, 195, 178, 32, 43, 8, 208, 31, 43, 136, 191, 85, 59, ++ 219, 8, 1, 51, 194, 2, 3, 213, 88, 28, 112, 71, 1, 32, 112, 71, 24, ++ 70, 112, 71, 16, 181, 4, 70, 255, 247, 231, 255, 4, 244, 64, 115, 0, ++ 235, 19, 32, 16, 189, 32, 40, 112, 181, 7, 209, 65, 242, 112, 114, 65, ++ 246, 122, 32, 0, 43, 8, 191, 16, 70, 112, 189, 9, 40, 3, 217, 160, 241, ++ 87, 4, 1, 44, 51, 216, 87, 40, 3, 208, 88, 40, 8, 191, 9, 32, 0, 224, ++ 8, 32, 2, 244, 224, 36, 180, 245, 128, 63, 12, 208, 180, 245, 0, 63, ++ 11, 208, 178, 245, 64, 63, 10, 208, 178, 245, 128, 47, 12, 191, 79, ++ 244, 234, 114, 0, 34, 4, 224, 52, 34, 2, 224, 108, 34, 0, 224, 234, ++ 34, 12, 77, 0, 235, 64, 0, 44, 24, 102, 120, 40, 92, 164, 120, 112, ++ 67, 65, 67, 74, 67, 250, 32, 178, 251, 244, 242, 80, 67, 59, 177, 10, ++ 35, 88, 67, 9, 35, 4, 48, 176, 251, 243, 240, 112, 189, 0, 32, 112, ++ 189, 0, 191, 40, 82, 4, 0, 16, 240, 64, 115, 112, 181, 5, 70, 4, 209, ++ 197, 178, 79, 244, 250, 112, 104, 67, 29, 224, 179, 241, 128, 127, 31, ++ 209, 192, 178, 32, 40, 5, 244, 0, 4, 3, 209, 1, 33, 79, 244, 0, 50, ++ 12, 224, 31, 40, 1, 216, 198, 8, 2, 224, 160, 241, 85, 6, 246, 8, 1, ++ 54, 45, 240, 110, 221, 49, 70, 5, 244, 224, 34, 35, 28, 24, 191, 1, ++ 35, 255, 247, 142, 255, 0, 40, 8, 191, 79, 240, 255, 48, 112, 189, 79, ++ 240, 255, 48, 112, 189, 160, 241, 87, 3, 1, 43, 12, 217, 99, 40, 10, ++ 208, 100, 40, 8, 208, 101, 40, 6, 208, 102, 40, 4, 208, 31, 40, 4, 216, ++ 0, 240, 7, 0, 2, 224, 9, 32, 0, 224, 0, 32, 1, 75, 83, 248, 32, 0, 112, ++ 71, 0, 82, 4, 0, 0, 240, 64, 115, 179, 241, 128, 127, 192, 178, 1, 209, ++ 255, 247, 222, 191, 112, 71, 112, 181, 0, 35, 6, 70, 13, 70, 4, 224, ++ 114, 25, 210, 24, 0, 33, 81, 117, 1, 51, 90, 25, 3, 42, 247, 221, 87, ++ 36, 164, 241, 85, 3, 181, 235, 227, 15, 4, 220, 6, 241, 21, 0, 33, 70, ++ 203, 243, 147, 246, 1, 52, 103, 44, 242, 209, 112, 189, 240, 181, 4, ++ 70, 0, 104, 139, 176, 24, 179, 0, 33, 40, 34, 104, 70, 203, 243, 61, ++ 240, 0, 33, 37, 104, 0, 155, 10, 70, 14, 224, 160, 24, 0, 121, 0, 240, ++ 127, 6, 127, 46, 1, 209, 32, 117, 5, 224, 10, 175, 126, 24, 6, 248, ++ 36, 12, 1, 49, 1, 51, 1, 50, 170, 66, 238, 209, 32, 70, 64, 248, 4, ++ 59, 1, 169, 16, 34, 0, 147, 201, 247, 159, 252, 1, 32, 11, 176, 240, ++ 189, 240, 181, 157, 176, 4, 70, 13, 70, 22, 70, 104, 70, 0, 33, 109, ++ 34, 203, 243, 18, 240, 32, 104, 0, 35, 13, 224, 226, 24, 17, 121, 1, ++ 240, 127, 2, 108, 42, 6, 216, 25, 79, 191, 92, 31, 177, 28, 175, 186, ++ 24, 2, 248, 112, 28, 1, 51, 131, 66, 239, 209, 0, 35, 40, 104, 26, 70, ++ 12, 224, 233, 24, 9, 121, 28, 175, 1, 240, 127, 1, 121, 24, 17, 248, ++ 112, 28, 17, 177, 167, 24, 57, 113, 1, 50, 1, 51, 131, 66, 240, 209, ++ 34, 96, 0, 35, 34, 70, 233, 24, 72, 125, 81, 125, 1, 51, 1, 64, 81, ++ 117, 1, 50, 16, 43, 246, 209, 32, 70, 49, 70, 255, 247, 141, 254, 0, ++ 48, 24, 191, 1, 32, 29, 176, 240, 189, 0, 191, 224, 248, 135, 0, 66, ++ 120, 3, 120, 18, 2, 154, 24, 192, 120, 2, 244, 224, 83, 155, 10, 1, ++ 51, 0, 9, 17, 7, 72, 191, 91, 8, 64, 240, 128, 0, 64, 234, 3, 16, 112, ++ 71, 16, 181, 4, 70, 255, 247, 234, 255, 35, 120, 98, 120, 33, 121, 67, ++ 234, 2, 34, 227, 120, 0, 240, 127, 0, 67, 234, 1, 35, 64, 240, 0, 113, ++ 2, 240, 3, 0, 1, 48, 65, 234, 0, 64, 17, 7, 72, 191, 64, 244, 128, 16, ++ 218, 7, 72, 191, 64, 244, 0, 0, 91, 7, 72, 191, 64, 244, 128, 0, 16, ++ 189, 16, 181, 131, 136, 12, 70, 3, 240, 3, 3, 2, 43, 17, 208, 3, 43, ++ 45, 208, 1, 43, 4, 208, 8, 120, 5, 35, 176, 251, 243, 240, 5, 224, 246, ++ 247, 174, 249, 35, 120, 3, 240, 7, 3, 192, 92, 64, 244, 128, 48, 16, ++ 189, 10, 120, 227, 120, 9, 121, 2, 240, 127, 0, 18, 6, 88, 191, 64, ++ 240, 128, 112, 67, 234, 1, 35, 76, 191, 64, 240, 129, 112, 64, 244, ++ 128, 48, 25, 6, 72, 191, 64, 244, 0, 0, 90, 6, 72, 191, 64, 244, 128, ++ 0, 19, 240, 48, 15, 7, 208, 64, 244, 128, 16, 16, 189, 8, 70, 189, 232, ++ 16, 64, 255, 247, 162, 191, 16, 189, 3, 70, 40, 34, 8, 70, 25, 70, 201, ++ 247, 221, 187, 0, 0, 17, 74, 45, 233, 240, 65, 208, 248, 0, 192, 23, ++ 104, 0, 35, 22, 70, 21, 224, 193, 24, 181, 24, 12, 121, 45, 121, 133, ++ 234, 4, 8, 24, 240, 127, 15, 2, 209, 42, 6, 9, 213, 5, 224, 1, 50, 0, ++ 224, 0, 34, 186, 66, 238, 209, 2, 224, 100, 240, 127, 4, 12, 113, 1, ++ 51, 99, 69, 245, 209, 189, 232, 240, 129, 0, 191, 184, 248, 135, 0, ++ 16, 181, 0, 35, 7, 74, 217, 0, 82, 248, 51, 64, 160, 66, 2, 209, 82, ++ 24, 16, 121, 4, 224, 1, 51, 12, 43, 243, 209, 79, 246, 255, 112, 0, ++ 178, 16, 189, 72, 82, 4, 0, 45, 233, 247, 79, 3, 104, 79, 244, 250, ++ 121, 195, 24, 147, 248, 3, 128, 157, 248, 52, 160, 8, 240, 127, 8, 9, ++ 251, 8, 249, 4, 70, 1, 145, 147, 70, 0, 38, 163, 25, 91, 125, 0, 43, ++ 56, 208, 245, 0, 237, 178, 0, 39, 102, 45, 51, 216, 4, 241, 21, 0, 41, ++ 70, 203, 243, 154, 245, 56, 187, 31, 45, 1, 216, 235, 8, 7, 224, 32, ++ 45, 7, 208, 181, 241, 85, 3, 72, 191, 165, 241, 78, 3, 219, 16, 1, 51, ++ 0, 224, 1, 35, 83, 69, 22, 220, 1, 155, 1, 43, 6, 191, 69, 240, 128, ++ 115, 67, 244, 128, 51, 69, 240, 129, 115, 187, 241, 0, 15, 1, 208, 67, ++ 244, 0, 3, 24, 70, 0, 147, 255, 247, 40, 254, 0, 155, 72, 69, 132, 191, ++ 129, 70, 152, 70, 1, 55, 255, 178, 1, 53, 8, 47, 237, 178, 201, 209, ++ 1, 54, 16, 46, 191, 209, 64, 70, 189, 232, 254, 143, 0, 35, 194, 24, ++ 1, 51, 0, 33, 16, 43, 81, 117, 249, 209, 112, 71, 0, 0, 45, 233, 240, ++ 71, 31, 70, 0, 35, 12, 70, 5, 70, 221, 248, 32, 128, 157, 248, 36, 96, ++ 208, 248, 0, 144, 25, 70, 41, 224, 104, 24, 0, 121, 18, 177, 16, 240, ++ 128, 15, 34, 208, 1, 47, 9, 209, 223, 248, 148, 160, 0, 240, 127, 12, ++ 26, 249, 12, 192, 188, 241, 0, 15, 16, 218, 22, 224, 2, 47, 13, 209, ++ 0, 240, 127, 12, 188, 241, 2, 15, 15, 208, 188, 241, 4, 15, 12, 208, ++ 188, 241, 11, 15, 9, 208, 188, 241, 22, 15, 6, 208, 4, 235, 3, 12, 0, ++ 234, 8, 0, 140, 248, 4, 0, 1, 51, 1, 49, 73, 69, 211, 209, 2, 47, 35, ++ 96, 5, 209, 184, 241, 255, 15, 2, 209, 32, 70, 255, 247, 37, 255, 43, ++ 125, 240, 7, 35, 117, 18, 213, 1, 47, 16, 208, 165, 66, 6, 208, 4, 241, ++ 21, 0, 5, 241, 21, 1, 16, 34, 201, 247, 242, 250, 113, 7, 11, 212, 4, ++ 241, 21, 0, 189, 232, 240, 71, 45, 240, 60, 155, 32, 70, 255, 247, 154, ++ 255, 79, 240, 255, 51, 227, 132, 189, 232, 240, 135, 224, 248, 135, ++ 0, 56, 181, 16, 34, 4, 70, 13, 70, 21, 48, 4, 73, 201, 247, 216, 250, ++ 32, 70, 41, 70, 189, 232, 56, 64, 255, 247, 239, 189, 33, 240, 135, ++ 0, 40, 41, 0, 241, 21, 0, 79, 240, 32, 1, 1, 209, 204, 243, 18, 176, ++ 203, 243, 142, 180, 45, 233, 240, 65, 140, 176, 26, 75, 157, 248, 84, ++ 128, 25, 78, 7, 70, 184, 241, 20, 15, 8, 191, 30, 70, 0, 41, 24, 191, ++ 14, 70, 157, 248, 88, 64, 48, 70, 2, 169, 157, 248, 80, 80, 255, 247, ++ 204, 254, 2, 168, 65, 70, 255, 247, 219, 255, 2, 168, 33, 70, 255, 247, ++ 196, 253, 19, 155, 0, 34, 141, 232, 40, 0, 157, 248, 72, 48, 2, 168, ++ 155, 26, 24, 191, 1, 35, 57, 70, 255, 247, 86, 255, 0, 34, 56, 70, 49, ++ 70, 149, 66, 20, 191, 35, 70, 1, 35, 255, 247, 245, 253, 12, 176, 189, ++ 232, 240, 129, 12, 240, 135, 0, 228, 239, 135, 0, 111, 240, 22, 0, 112, ++ 71, 0, 0, 5, 75, 0, 32, 83, 248, 4, 47, 138, 66, 4, 208, 1, 48, 192, ++ 178, 43, 40, 247, 209, 0, 32, 112, 71, 188, 82, 4, 0, 144, 248, 194, ++ 48, 19, 240, 1, 3, 26, 191, 64, 24, 144, 248, 43, 0, 24, 70, 112, 71, ++ 240, 181, 3, 70, 144, 248, 208, 64, 144, 248, 183, 96, 13, 224, 29, ++ 25, 149, 248, 148, 112, 32, 70, 151, 66, 5, 211, 47, 122, 5, 77, 21, ++ 248, 39, 80, 141, 66, 5, 208, 1, 52, 228, 178, 180, 66, 239, 211, 79, ++ 240, 255, 48, 240, 189, 192, 82, 4, 0, 248, 181, 30, 70, 144, 248, 193, ++ 48, 21, 70, 195, 24, 36, 79, 26, 122, 1, 41, 4, 70, 147, 248, 148, 192, ++ 87, 248, 34, 0, 7, 209, 147, 248, 78, 48, 43, 112, 148, 248, 193, 32, ++ 154, 66, 41, 209, 52, 224, 1, 49, 50, 209, 147, 248, 113, 32, 42, 112, ++ 148, 248, 193, 48, 147, 66, 45, 208, 64, 234, 12, 67, 19, 240, 64, 127, ++ 26, 209, 3, 240, 127, 3, 22, 43, 22, 216, 20, 74, 154, 64, 19, 213, ++ 99, 104, 154, 126, 130, 177, 148, 248, 214, 32, 106, 177, 211, 248, ++ 140, 32, 82, 177, 32, 104, 144, 71, 99, 104, 179, 249, 24, 48, 152, ++ 66, 3, 219, 148, 248, 193, 48, 43, 112, 11, 224, 43, 120, 1, 32, 228, ++ 24, 35, 122, 148, 248, 148, 32, 87, 248, 35, 48, 67, 234, 2, 67, 51, ++ 96, 248, 189, 0, 32, 248, 189, 0, 32, 248, 189, 192, 82, 4, 0, 0, 2, ++ 16, 40, 56, 181, 144, 248, 193, 16, 4, 70, 255, 247, 128, 255, 32, 24, ++ 21, 73, 3, 122, 144, 248, 148, 32, 148, 248, 193, 0, 81, 248, 35, 48, ++ 32, 24, 67, 234, 2, 67, 2, 122, 144, 248, 148, 80, 81, 248, 34, 32, ++ 212, 248, 16, 17, 66, 234, 5, 66, 145, 66, 5, 208, 196, 248, 16, 33, ++ 79, 244, 128, 82, 196, 248, 20, 33, 212, 248, 52, 33, 154, 66, 3, 209, ++ 212, 248, 56, 33, 1, 50, 5, 209, 196, 248, 52, 49, 79, 244, 128, 83, ++ 196, 248, 56, 49, 56, 189, 192, 82, 4, 0, 144, 248, 194, 32, 67, 104, ++ 7, 42, 2, 209, 147, 248, 152, 0, 112, 71, 210, 7, 3, 213, 147, 248, ++ 152, 0, 64, 8, 112, 71, 4, 32, 112, 71, 112, 181, 144, 248, 210, 48, ++ 4, 70, 13, 70, 0, 43, 0, 240, 217, 128, 144, 248, 193, 32, 144, 248, ++ 208, 48, 154, 66, 192, 240, 212, 128, 144, 249, 211, 96, 255, 247, 221, ++ 255, 113, 28, 1, 208, 12, 46, 33, 209, 99, 104, 212, 248, 112, 33, 91, ++ 104, 155, 106, 147, 66, 4, 210, 148, 248, 116, 17, 211, 26, 139, 66, ++ 4, 217, 0, 35, 132, 248, 211, 48, 93, 185, 97, 224, 0, 45, 95, 208, ++ 12, 46, 6, 209, 148, 248, 64, 49, 131, 66, 2, 211, 0, 35, 132, 248, ++ 211, 48, 148, 249, 211, 0, 0, 40, 85, 208, 0, 38, 89, 224, 0, 46, 87, ++ 208, 0, 45, 0, 240, 167, 128, 148, 248, 211, 32, 148, 249, 106, 17, ++ 83, 178, 153, 66, 0, 240, 161, 128, 132, 248, 106, 33, 148, 248, 64, ++ 33, 130, 66, 9, 210, 212, 248, 108, 33, 10, 33, 81, 67, 212, 248, 20, ++ 33, 2, 235, 194, 2, 145, 66, 3, 210, 255, 35, 132, 248, 211, 48, 6, ++ 224, 11, 43, 4, 209, 12, 35, 132, 248, 211, 48, 1, 35, 0, 224, 0, 35, ++ 148, 248, 211, 16, 74, 30, 210, 178, 10, 42, 38, 217, 98, 104, 148, ++ 248, 116, 1, 86, 104, 182, 106, 134, 25, 196, 248, 112, 97, 148, 248, ++ 117, 97, 158, 66, 8, 209, 146, 248, 154, 48, 64, 0, 152, 66, 168, 191, ++ 24, 70, 132, 248, 116, 1, 5, 224, 146, 248, 153, 32, 132, 248, 117, ++ 49, 132, 248, 116, 33, 12, 41, 12, 209, 212, 248, 108, 49, 196, 248, ++ 20, 49, 7, 224, 46, 70, 40, 70, 6, 224, 1, 38, 4, 224, 0, 38, 1, 32, ++ 1, 224, 1, 38, 48, 70, 148, 249, 211, 48, 0, 43, 65, 209, 213, 177, ++ 79, 244, 128, 82, 196, 248, 20, 33, 196, 248, 56, 33, 98, 104, 196, ++ 248, 188, 48, 82, 104, 146, 106, 196, 248, 60, 33, 79, 240, 255, 50, ++ 196, 248, 44, 33, 196, 248, 32, 33, 148, 248, 192, 32, 2, 42, 152, 191, ++ 83, 28, 132, 248, 192, 48, 1, 38, 99, 104, 212, 248, 188, 32, 91, 123, ++ 154, 66, 31, 211, 148, 248, 64, 49, 227, 185, 148, 248, 245, 48, 218, ++ 7, 24, 212, 180, 248, 0, 49, 219, 7, 20, 212, 148, 248, 193, 48, 148, ++ 248, 210, 32, 227, 24, 147, 248, 148, 48, 82, 250, 3, 243, 217, 7, 9, ++ 213, 212, 248, 20, 49, 1, 32, 132, 248, 211, 0, 132, 248, 106, 1, 196, ++ 248, 108, 49, 0, 224, 102, 177, 212, 248, 196, 48, 75, 177, 0, 34, 26, ++ 96, 112, 189, 24, 70, 112, 189, 0, 32, 112, 189, 1, 32, 112, 189, 1, ++ 32, 112, 189, 208, 248, 204, 48, 48, 181, 1, 43, 26, 209, 144, 248, ++ 245, 32, 2, 240, 17, 1, 16, 41, 59, 209, 208, 248, 188, 16, 208, 248, ++ 228, 64, 100, 24, 144, 248, 246, 16, 180, 251, 241, 245, 1, 251, 21, ++ 65, 144, 248, 247, 80, 169, 66, 44, 209, 66, 240, 1, 2, 128, 248, 245, ++ 32, 24, 70, 48, 189, 2, 43, 36, 209, 176, 248, 0, 49, 19, 240, 1, 4, ++ 31, 209, 176, 248, 10, 33, 242, 177, 208, 248, 228, 80, 208, 248, 188, ++ 16, 105, 24, 177, 251, 242, 245, 2, 251, 21, 18, 176, 248, 12, 81, 170, ++ 66, 19, 209, 144, 248, 8, 33, 18, 185, 3, 244, 128, 114, 1, 224, 3, ++ 240, 16, 2, 146, 178, 90, 177, 67, 240, 1, 3, 160, 248, 0, 49, 1, 32, ++ 48, 189, 0, 32, 48, 189, 16, 70, 48, 189, 32, 70, 48, 189, 16, 70, 48, ++ 189, 16, 181, 144, 248, 194, 48, 4, 70, 7, 43, 7, 208, 7, 35, 128, 248, ++ 194, 48, 208, 248, 196, 48, 11, 177, 0, 34, 26, 96, 99, 104, 147, 248, ++ 145, 32, 122, 177, 210, 7, 3, 213, 90, 104, 146, 106, 196, 248, 100, ++ 33, 147, 248, 145, 32, 144, 7, 5, 213, 211, 248, 140, 48, 32, 104, 152, ++ 71, 196, 248, 96, 1, 16, 189, 112, 181, 69, 104, 4, 70, 149, 248, 145, ++ 48, 14, 70, 0, 43, 49, 208, 144, 248, 194, 32, 209, 7, 45, 213, 218, ++ 7, 8, 213, 106, 104, 145, 106, 208, 248, 100, 33, 137, 26, 181, 248, ++ 150, 32, 145, 66, 34, 219, 153, 7, 21, 213, 212, 248, 96, 49, 235, 177, ++ 213, 248, 140, 48, 32, 104, 152, 71, 16, 241, 65, 15, 22, 218, 212, ++ 248, 96, 49, 181, 249, 146, 32, 19, 241, 65, 15, 168, 191, 111, 240, ++ 64, 3, 27, 26, 147, 66, 10, 221, 148, 248, 194, 48, 3, 240, 253, 3, ++ 132, 248, 194, 48, 30, 185, 35, 240, 1, 3, 132, 248, 194, 48, 112, 189, ++ 144, 248, 41, 48, 128, 248, 70, 48, 0, 35, 67, 101, 3, 101, 195, 100, ++ 112, 71, 195, 108, 130, 108, 17, 177, 147, 66, 6, 210, 12, 224, 29, ++ 33, 74, 67, 178, 235, 67, 31, 34, 217, 6, 224, 144, 248, 70, 48, 128, ++ 248, 69, 48, 0, 35, 131, 100, 23, 224, 144, 248, 69, 48, 128, 248, 70, ++ 48, 176, 248, 88, 48, 91, 0, 179, 245, 32, 127, 168, 191, 79, 244, 32, ++ 115, 160, 248, 88, 48, 176, 248, 90, 48, 91, 0, 179, 245, 72, 111, 168, ++ 191, 79, 244, 72, 99, 160, 248, 90, 48, 0, 35, 3, 101, 67, 101, 112, ++ 71, 48, 181, 144, 248, 69, 80, 144, 248, 70, 64, 10, 70, 172, 66, 29, ++ 209, 144, 248, 41, 16, 161, 66, 50, 208, 1, 42, 10, 208, 2, 42, 12, ++ 208, 0, 42, 44, 209, 40, 34, 160, 248, 88, 32, 200, 34, 160, 248, 90, ++ 32, 8, 224, 176, 248, 88, 32, 67, 109, 2, 224, 176, 248, 90, 32, 3, ++ 109, 147, 66, 28, 211, 189, 232, 48, 64, 255, 247, 162, 191, 1, 41, ++ 2, 208, 2, 41, 20, 209, 5, 224, 176, 248, 92, 32, 67, 109, 147, 66, ++ 14, 211, 9, 224, 2, 109, 176, 248, 94, 48, 154, 66, 1, 211, 1, 33, 2, ++ 224, 4, 42, 4, 217, 0, 33, 189, 232, 48, 64, 255, 247, 146, 191, 48, ++ 189, 48, 181, 3, 70, 64, 104, 144, 248, 40, 32, 1, 42, 80, 217, 179, ++ 248, 14, 33, 1, 50, 146, 178, 10, 42, 163, 248, 14, 33, 72, 217, 0, ++ 34, 163, 248, 14, 33, 144, 248, 67, 48, 97, 240, 127, 4, 194, 24, 23, ++ 43, 130, 248, 42, 64, 2, 208, 1, 51, 219, 178, 0, 224, 0, 35, 1, 240, ++ 7, 2, 132, 24, 148, 248, 32, 80, 128, 248, 67, 48, 1, 53, 132, 248, ++ 32, 80, 179, 241, 19, 4, 72, 191, 92, 29, 4, 25, 148, 248, 42, 48, 19, ++ 240, 128, 15, 7, 208, 3, 240, 7, 3, 195, 24, 147, 248, 32, 64, 1, 60, ++ 131, 248, 32, 64, 130, 24, 146, 248, 32, 32, 144, 248, 41, 48, 13, 42, ++ 10, 217, 1, 240, 7, 1, 139, 66, 6, 208, 144, 248, 68, 48, 128, 248, ++ 41, 16, 99, 177, 0, 33, 6, 224, 144, 248, 68, 48, 59, 177, 67, 109, ++ 1, 33, 1, 51, 67, 101, 189, 232, 48, 64, 255, 247, 104, 191, 48, 189, ++ 48, 181, 100, 36, 76, 67, 180, 251, 243, 245, 84, 67, 3, 154, 237, 178, ++ 83, 67, 100, 61, 5, 235, 213, 117, 109, 16, 100, 53, 237, 178, 180, ++ 251, 243, 244, 165, 66, 128, 248, 88, 81, 140, 191, 0, 37, 1, 37, 1, ++ 35, 128, 248, 84, 81, 128, 248, 85, 49, 48, 189, 145, 66, 52, 191, 0, ++ 34, 1, 34, 1, 35, 128, 248, 86, 33, 128, 248, 87, 49, 112, 71, 45, 233, ++ 240, 65, 30, 70, 144, 248, 243, 48, 4, 70, 255, 43, 6, 157, 0, 240, ++ 188, 128, 255, 42, 0, 240, 185, 128, 0, 45, 0, 240, 185, 128, 144, 248, ++ 242, 48, 83, 64, 19, 240, 120, 15, 64, 240, 181, 128, 67, 104, 27, 122, ++ 0, 43, 97, 208, 144, 248, 209, 0, 66, 240, 128, 114, 66, 234, 0, 64, ++ 255, 247, 211, 249, 148, 248, 193, 48, 79, 244, 250, 120, 227, 24, 144, ++ 251, 248, 247, 26, 122, 147, 248, 148, 0, 81, 75, 54, 3, 83, 248, 34, ++ 48, 126, 67, 67, 234, 0, 64, 255, 247, 192, 249, 212, 248, 20, 49, 144, ++ 251, 248, 240, 67, 67, 184, 66, 182, 251, 245, 245, 3, 217, 29, 34, ++ 83, 67, 91, 9, 3, 224, 2, 210, 29, 34, 85, 67, 109, 9, 212, 248, 224, ++ 32, 34, 185, 196, 248, 68, 81, 196, 248, 72, 49, 97, 224, 17, 42, 212, ++ 248, 68, 17, 15, 216, 80, 30, 1, 251, 0, 85, 212, 248, 72, 17, 181, ++ 251, 242, 245, 1, 251, 0, 51, 179, 251, 242, 242, 196, 248, 68, 81, ++ 196, 248, 72, 33, 77, 224, 98, 104, 208, 122, 49, 250, 0, 240, 9, 26, ++ 196, 248, 68, 17, 208, 122, 197, 64, 105, 24, 196, 248, 68, 17, 212, ++ 248, 72, 1, 209, 122, 48, 250, 1, 241, 65, 26, 196, 248, 72, 17, 210, ++ 122, 211, 64, 89, 24, 196, 248, 72, 17, 51, 224, 144, 248, 240, 32, ++ 174, 27, 2, 240, 7, 7, 1, 32, 184, 64, 117, 66, 69, 235, 6, 5, 21, 250, ++ 7, 247, 4, 235, 210, 1, 145, 248, 236, 96, 192, 178, 7, 64, 38, 234, ++ 0, 0, 56, 67, 23, 42, 129, 248, 236, 0, 1, 208, 83, 28, 219, 178, 179, ++ 241, 19, 2, 72, 191, 90, 29, 132, 248, 240, 48, 1, 32, 2, 240, 7, 3, ++ 152, 64, 4, 235, 226, 2, 146, 248, 236, 16, 148, 248, 239, 96, 0, 234, ++ 1, 2, 82, 250, 3, 243, 173, 25, 237, 178, 235, 26, 132, 248, 239, 48, ++ 212, 248, 224, 48, 89, 28, 2, 208, 1, 51, 196, 248, 224, 48, 212, 248, ++ 228, 48, 90, 28, 2, 208, 1, 51, 196, 248, 228, 48, 148, 248, 243, 48, ++ 1, 32, 132, 248, 244, 48, 189, 232, 240, 129, 0, 32, 189, 232, 240, ++ 129, 40, 70, 189, 232, 240, 129, 0, 32, 189, 232, 240, 129, 0, 191, ++ 192, 82, 4, 0, 45, 233, 248, 67, 144, 248, 193, 192, 4, 70, 96, 68, ++ 117, 73, 7, 122, 9, 157, 8, 158, 81, 248, 39, 112, 144, 248, 148, 0, ++ 137, 70, 0, 45, 0, 240, 215, 128, 71, 234, 0, 71, 148, 248, 8, 17, 23, ++ 240, 64, 127, 20, 191, 255, 178, 255, 39, 49, 185, 151, 66, 2, 209, ++ 148, 248, 252, 0, 12, 224, 8, 70, 16, 224, 1, 41, 64, 240, 198, 128, ++ 151, 66, 10, 208, 122, 64, 18, 240, 120, 0, 7, 208, 148, 248, 253, 0, ++ 195, 26, 88, 66, 64, 235, 3, 0, 0, 224, 0, 32, 192, 178, 0, 40, 0, 240, ++ 184, 128, 9, 177, 148, 248, 254, 192, 99, 104, 27, 122, 0, 43, 99, 208, ++ 4, 235, 12, 3, 147, 248, 148, 0, 27, 122, 79, 244, 250, 120, 89, 248, ++ 35, 48, 54, 3, 67, 234, 0, 64, 255, 247, 215, 248, 148, 248, 193, 48, ++ 144, 251, 248, 247, 227, 24, 147, 248, 148, 0, 27, 122, 126, 67, 89, ++ 248, 35, 48, 67, 234, 0, 64, 255, 247, 200, 248, 212, 248, 20, 49, 144, ++ 251, 248, 240, 67, 67, 184, 66, 182, 251, 245, 245, 3, 217, 29, 34, ++ 83, 67, 91, 9, 3, 224, 2, 210, 29, 34, 85, 67, 109, 9, 212, 248, 224, ++ 32, 34, 185, 196, 248, 76, 81, 196, 248, 80, 49, 98, 224, 17, 42, 212, ++ 248, 76, 17, 15, 216, 80, 30, 1, 251, 0, 85, 212, 248, 80, 17, 181, ++ 251, 242, 245, 1, 251, 0, 51, 179, 251, 242, 242, 196, 248, 76, 81, ++ 196, 248, 80, 33, 78, 224, 98, 104, 208, 122, 49, 250, 0, 240, 9, 26, ++ 196, 248, 76, 17, 208, 122, 197, 64, 105, 24, 196, 248, 76, 17, 212, ++ 248, 80, 1, 209, 122, 48, 250, 1, 241, 65, 26, 196, 248, 80, 17, 210, ++ 122, 211, 64, 89, 24, 196, 248, 80, 17, 52, 224, 148, 248, 2, 33, 174, ++ 27, 2, 240, 7, 7, 1, 32, 184, 64, 117, 66, 69, 235, 6, 5, 21, 250, 7, ++ 247, 4, 235, 210, 1, 145, 248, 5, 97, 192, 178, 7, 64, 38, 234, 0, 0, ++ 56, 67, 29, 42, 129, 248, 5, 1, 1, 208, 83, 28, 219, 178, 179, 241, ++ 19, 2, 72, 191, 3, 241, 11, 2, 132, 248, 2, 49, 1, 32, 2, 240, 7, 3, ++ 152, 64, 4, 235, 226, 2, 146, 248, 5, 17, 148, 248, 3, 97, 0, 234, 1, ++ 2, 82, 250, 3, 243, 173, 25, 237, 178, 235, 26, 132, 248, 3, 49, 212, ++ 248, 224, 48, 89, 28, 2, 208, 1, 51, 196, 248, 224, 48, 212, 248, 228, ++ 48, 90, 28, 11, 208, 1, 51, 196, 248, 228, 48, 1, 32, 189, 232, 248, ++ 131, 40, 70, 189, 232, 248, 131, 0, 32, 189, 232, 248, 131, 1, 32, 189, ++ 232, 248, 131, 192, 82, 4, 0, 45, 233, 240, 79, 133, 176, 157, 248, ++ 56, 176, 154, 70, 157, 248, 76, 48, 4, 70, 0, 43, 24, 191, 79, 240, ++ 1, 11, 21, 70, 157, 248, 60, 144, 157, 248, 64, 128, 157, 248, 68, 112, ++ 157, 248, 80, 96, 255, 247, 80, 251, 148, 248, 193, 32, 105, 75, 162, ++ 24, 146, 248, 148, 16, 18, 122, 83, 248, 34, 48, 67, 234, 1, 67, 212, ++ 248, 204, 16, 218, 178, 1, 41, 11, 209, 186, 66, 44, 208, 193, 69, 17, ++ 210, 32, 70, 58, 70, 43, 70, 205, 248, 0, 160, 255, 247, 7, 254, 26, ++ 224, 2, 41, 29, 209, 186, 66, 3, 209, 148, 248, 251, 32, 178, 66, 26, ++ 208, 193, 69, 8, 211, 212, 248, 232, 48, 88, 28, 0, 240, 165, 128, 1, ++ 51, 196, 248, 232, 48, 160, 224, 32, 70, 1, 33, 58, 70, 51, 70, 141, ++ 232, 32, 4, 255, 247, 189, 254, 0, 40, 20, 191, 1, 32, 2, 32, 150, 224, ++ 151, 66, 64, 240, 145, 128, 29, 177, 193, 69, 8, 216, 0, 34, 4, 224, ++ 193, 69, 4, 211, 148, 248, 64, 33, 1, 50, 132, 248, 64, 33, 98, 104, ++ 210, 126, 18, 185, 193, 69, 127, 210, 7, 224, 193, 69, 5, 217, 186, ++ 235, 69, 15, 212, 191, 2, 32, 0, 32, 121, 224, 187, 241, 0, 15, 11, ++ 209, 186, 241, 0, 15, 8, 208, 85, 69, 6, 209, 193, 69, 4, 210, 32, 70, ++ 3, 147, 255, 247, 101, 252, 3, 155, 148, 248, 249, 32, 98, 177, 98, ++ 104, 212, 248, 216, 16, 82, 127, 145, 66, 6, 211, 212, 248, 196, 32, ++ 0, 33, 132, 248, 249, 16, 2, 177, 17, 96, 193, 69, 3, 211, 212, 248, ++ 52, 33, 154, 66, 17, 209, 157, 248, 72, 48, 91, 177, 148, 248, 211, ++ 48, 90, 30, 210, 178, 10, 42, 5, 216, 1, 51, 4, 245, 182, 118, 132, ++ 248, 211, 48, 4, 224, 4, 245, 138, 118, 1, 224, 4, 245, 156, 118, 148, ++ 248, 194, 48, 45, 3, 149, 251, 250, 245, 67, 177, 99, 104, 212, 248, ++ 188, 16, 90, 123, 145, 66, 148, 191, 31, 123, 223, 122, 0, 224, 2, 39, ++ 99, 104, 27, 104, 27, 104, 147, 248, 229, 48, 67, 177, 4, 245, 138, ++ 115, 158, 66, 4, 209, 32, 70, 41, 70, 50, 104, 255, 247, 103, 253, 51, ++ 104, 253, 64, 51, 250, 7, 247, 237, 24, 235, 27, 51, 96, 4, 245, 156, ++ 115, 158, 66, 4, 209, 99, 104, 91, 104, 155, 106, 196, 248, 60, 49, ++ 212, 248, 216, 48, 89, 28, 2, 208, 1, 51, 196, 248, 216, 48, 212, 248, ++ 188, 48, 90, 28, 5, 208, 1, 51, 196, 248, 188, 48, 1, 224, 2, 32, 0, ++ 224, 0, 32, 5, 176, 189, 232, 240, 143, 192, 82, 4, 0, 56, 181, 8, 70, ++ 29, 70, 20, 70, 254, 247, 58, 255, 168, 66, 5, 211, 52, 177, 160, 66, ++ 140, 191, 0, 32, 1, 32, 56, 189, 0, 32, 56, 189, 1, 32, 56, 189, 112, ++ 181, 5, 70, 144, 248, 183, 64, 14, 70, 129, 185, 20, 224, 43, 25, 147, ++ 248, 148, 0, 26, 122, 12, 75, 83, 248, 34, 48, 67, 234, 0, 64, 254, ++ 247, 28, 255, 134, 66, 7, 217, 1, 52, 228, 178, 0, 224, 0, 36, 149, ++ 248, 183, 48, 163, 66, 234, 216, 149, 248, 183, 48, 163, 66, 1, 209, ++ 1, 60, 228, 178, 32, 70, 112, 189, 192, 82, 4, 0, 56, 181, 0, 37, 4, ++ 70, 192, 248, 232, 80, 192, 248, 224, 80, 41, 70, 236, 48, 3, 34, 201, ++ 243, 178, 247, 132, 248, 239, 80, 132, 248, 240, 80, 196, 248, 68, 81, ++ 196, 248, 72, 81, 56, 189, 0, 0, 208, 248, 224, 48, 112, 181, 17, 43, ++ 4, 70, 77, 217, 144, 248, 243, 16, 144, 248, 193, 32, 145, 66, 71, 208, ++ 144, 248, 183, 48, 139, 66, 67, 217, 130, 24, 16, 122, 34, 75, 146, ++ 248, 148, 32, 83, 248, 32, 48, 96, 104, 0, 122, 48, 177, 212, 248, 68, ++ 81, 212, 248, 72, 1, 133, 66, 12, 217, 7, 224, 148, 249, 239, 80, 148, ++ 248, 248, 0, 197, 241, 18, 5, 133, 66, 3, 220, 132, 248, 193, 16, 1, ++ 32, 112, 189, 219, 178, 1, 51, 30, 43, 34, 216, 148, 248, 214, 16, 2, ++ 41, 6, 217, 148, 249, 241, 96, 214, 241, 1, 6, 56, 191, 0, 38, 0, 224, ++ 0, 38, 3, 235, 131, 3, 13, 73, 155, 25, 81, 248, 35, 80, 107, 28, 14, ++ 208, 32, 70, 233, 178, 255, 247, 113, 249, 0, 40, 10, 221, 132, 248, ++ 243, 0, 132, 248, 241, 96, 132, 248, 242, 80, 32, 70, 255, 247, 150, ++ 255, 0, 32, 112, 189, 0, 32, 112, 189, 192, 82, 4, 0, 180, 85, 4, 0, ++ 45, 233, 240, 71, 144, 248, 193, 48, 4, 70, 195, 24, 147, 248, 148, ++ 32, 25, 122, 164, 75, 83, 248, 33, 96, 70, 234, 2, 70, 22, 240, 64, ++ 127, 6, 208, 245, 178, 87, 45, 6, 208, 88, 45, 8, 191, 9, 37, 3, 224, ++ 79, 240, 255, 53, 0, 224, 8, 37, 212, 248, 204, 48, 111, 28, 1, 43, ++ 81, 209, 148, 248, 241, 48, 105, 28, 95, 250, 131, 248, 30, 208, 150, ++ 73, 91, 178, 7, 235, 135, 0, 192, 24, 81, 248, 32, 80, 104, 28, 15, ++ 209, 148, 248, 214, 0, 2, 40, 4, 217, 211, 241, 1, 8, 56, 191, 79, 240, ++ 0, 8, 7, 235, 135, 3, 67, 68, 81, 248, 35, 80, 104, 28, 5, 208, 32, ++ 70, 233, 178, 255, 247, 26, 249, 129, 70, 0, 224, 169, 70, 0, 35, 153, ++ 69, 132, 248, 245, 48, 34, 219, 148, 248, 242, 48, 107, 64, 19, 240, ++ 120, 15, 2, 208, 32, 70, 255, 247, 57, 255, 148, 248, 245, 48, 20, 34, ++ 67, 240, 16, 3, 132, 248, 245, 48, 123, 75, 132, 248, 241, 128, 2, 251, ++ 7, 55, 187, 104, 132, 248, 242, 80, 132, 248, 248, 48, 251, 104, 132, ++ 248, 243, 144, 132, 248, 246, 48, 59, 105, 132, 248, 247, 48, 54, 224, ++ 255, 35, 132, 248, 243, 48, 50, 224, 2, 43, 48, 209, 105, 28, 223, 248, ++ 188, 129, 9, 208, 59, 1, 88, 248, 3, 16, 0, 41, 6, 221, 32, 70, 201, ++ 178, 255, 247, 220, 248, 3, 224, 40, 70, 1, 224, 79, 240, 255, 48, 0, ++ 35, 0, 40, 164, 248, 0, 49, 5, 219, 16, 35, 132, 248, 254, 0, 164, 248, ++ 0, 49, 2, 224, 255, 35, 132, 248, 254, 48, 180, 248, 0, 49, 8, 235, ++ 7, 23, 67, 244, 128, 115, 164, 248, 0, 49, 123, 104, 132, 248, 4, 49, ++ 59, 137, 191, 137, 164, 248, 10, 49, 164, 248, 12, 113, 212, 248, 20, ++ 49, 4, 245, 148, 121, 1, 51, 4, 245, 136, 119, 4, 245, 142, 117, 4, ++ 245, 154, 120, 75, 208, 48, 70, 254, 247, 225, 253, 130, 70, 212, 248, ++ 16, 1, 254, 247, 220, 253, 79, 244, 250, 115, 154, 251, 243, 242, 144, ++ 251, 243, 243, 154, 66, 59, 221, 212, 248, 32, 49, 1, 51, 14, 208, 99, ++ 104, 212, 248, 36, 17, 90, 104, 91, 105, 146, 106, 138, 26, 154, 66, ++ 5, 210, 64, 70, 41, 70, 12, 34, 200, 247, 248, 250, 3, 224, 79, 240, ++ 255, 51, 196, 248, 56, 49, 12, 34, 57, 70, 40, 70, 200, 247, 238, 250, ++ 99, 104, 212, 248, 44, 17, 90, 104, 1, 49, 146, 106, 196, 248, 36, 33, ++ 15, 208, 212, 248, 48, 17, 91, 105, 138, 26, 154, 66, 9, 210, 212, 248, ++ 40, 49, 179, 66, 5, 209, 56, 70, 73, 70, 12, 34, 200, 247, 214, 250, ++ 3, 224, 79, 244, 128, 83, 196, 248, 20, 49, 79, 240, 255, 51, 73, 224, ++ 212, 248, 20, 49, 1, 51, 59, 208, 48, 70, 254, 247, 145, 253, 130, 70, ++ 212, 248, 16, 1, 254, 247, 140, 253, 79, 244, 250, 115, 154, 251, 243, ++ 242, 144, 251, 243, 243, 154, 66, 43, 218, 12, 34, 57, 70, 72, 70, 200, ++ 247, 181, 250, 99, 104, 212, 248, 32, 17, 90, 104, 1, 49, 146, 106, ++ 196, 248, 48, 33, 15, 208, 212, 248, 36, 17, 91, 105, 138, 26, 154, ++ 66, 9, 210, 212, 248, 28, 49, 179, 66, 5, 209, 56, 70, 41, 70, 12, 34, ++ 200, 247, 157, 250, 3, 224, 79, 244, 128, 83, 196, 248, 20, 49, 40, ++ 70, 65, 70, 12, 34, 200, 247, 147, 250, 79, 240, 255, 51, 196, 248, ++ 56, 49, 11, 224, 79, 244, 128, 83, 196, 248, 20, 49, 79, 240, 255, 51, ++ 196, 248, 56, 49, 196, 248, 32, 49, 196, 248, 44, 49, 0, 35, 196, 248, ++ 16, 97, 132, 248, 64, 49, 189, 232, 240, 135, 0, 191, 192, 82, 4, 0, ++ 180, 85, 4, 0, 108, 83, 4, 0, 56, 181, 4, 70, 65, 177, 144, 248, 192, ++ 48, 2, 43, 1, 216, 1, 51, 0, 224, 0, 35, 132, 248, 192, 48, 0, 37, 196, ++ 248, 184, 80, 196, 248, 188, 80, 196, 248, 216, 80, 196, 248, 228, 80, ++ 32, 70, 255, 247, 144, 254, 212, 248, 196, 48, 3, 177, 29, 96, 56, 189, ++ 56, 181, 0, 37, 4, 70, 192, 248, 232, 80, 192, 248, 224, 80, 0, 245, ++ 130, 112, 1, 48, 41, 70, 3, 34, 201, 243, 201, 245, 132, 248, 3, 81, ++ 132, 248, 2, 81, 196, 248, 76, 81, 196, 248, 80, 81, 56, 189, 16, 181, ++ 4, 70, 255, 247, 229, 255, 148, 248, 8, 49, 195, 241, 1, 3, 219, 178, ++ 1, 43, 132, 248, 8, 49, 6, 209, 180, 248, 0, 49, 19, 240, 16, 3, 8, ++ 191, 132, 248, 8, 49, 16, 189, 8, 181, 67, 104, 27, 122, 51, 177, 208, ++ 248, 76, 33, 208, 248, 80, 49, 154, 66, 9, 211, 48, 224, 144, 249, 3, ++ 49, 208, 248, 224, 32, 210, 26, 144, 248, 4, 49, 154, 66, 39, 217, 144, ++ 248, 8, 49, 144, 248, 250, 32, 163, 185, 144, 248, 252, 16, 1, 58, 145, ++ 66, 1, 218, 75, 28, 219, 178, 144, 248, 251, 16, 128, 248, 252, 48, ++ 153, 66, 17, 209, 147, 66, 1, 218, 1, 51, 0, 224, 0, 35, 128, 248, 252, ++ 48, 9, 224, 144, 248, 253, 48, 1, 58, 147, 66, 1, 218, 1, 51, 0, 224, ++ 0, 35, 128, 248, 253, 48, 255, 247, 177, 255, 0, 32, 8, 189, 208, 248, ++ 224, 48, 17, 43, 31, 217, 144, 248, 8, 49, 19, 185, 144, 248, 252, 48, ++ 5, 224, 144, 248, 254, 48, 128, 248, 193, 48, 144, 248, 253, 48, 128, ++ 248, 251, 48, 144, 248, 250, 32, 144, 248, 251, 48, 1, 58, 147, 66, ++ 1, 218, 90, 28, 0, 224, 0, 34, 128, 248, 252, 32, 128, 248, 253, 48, ++ 255, 247, 141, 255, 1, 32, 8, 189, 0, 32, 8, 189, 0, 0, 45, 233, 247, ++ 67, 255, 35, 141, 248, 7, 48, 67, 104, 208, 248, 188, 32, 27, 105, 4, ++ 70, 154, 66, 192, 240, 195, 128, 1, 33, 13, 241, 7, 2, 107, 70, 254, ++ 247, 99, 255, 0, 40, 0, 240, 187, 128, 148, 248, 193, 48, 223, 248, ++ 120, 145, 227, 24, 147, 248, 148, 112, 27, 122, 79, 244, 250, 120, 89, ++ 248, 35, 48, 67, 234, 7, 71, 56, 70, 254, 247, 107, 252, 144, 251, 248, ++ 245, 0, 152, 254, 247, 102, 252, 144, 251, 248, 246, 212, 248, 52, 1, ++ 254, 247, 96, 252, 212, 248, 40, 33, 0, 155, 144, 251, 248, 248, 154, ++ 66, 72, 70, 7, 208, 212, 248, 44, 49, 1, 51, 28, 191, 79, 240, 255, ++ 51, 196, 248, 44, 49, 212, 248, 44, 49, 90, 28, 13, 208, 97, 104, 74, ++ 104, 73, 105, 210, 248, 40, 192, 212, 248, 48, 33, 194, 235, 12, 2, ++ 138, 66, 140, 191, 0, 34, 1, 34, 0, 224, 0, 34, 69, 69, 123, 208, 170, ++ 185, 212, 248, 56, 17, 212, 248, 20, 49, 153, 66, 15, 217, 200, 235, ++ 6, 12, 3, 251, 12, 243, 197, 235, 6, 12, 1, 251, 28, 51, 200, 235, 5, ++ 8, 179, 251, 248, 243, 179, 245, 128, 95, 136, 191, 19, 70, 212, 248, ++ 20, 33, 115, 67, 106, 67, 147, 66, 82, 217, 148, 248, 193, 32, 162, ++ 24, 19, 122, 146, 248, 148, 16, 80, 248, 35, 48, 157, 248, 7, 32, 67, ++ 234, 1, 67, 19, 240, 64, 127, 132, 248, 193, 32, 30, 208, 219, 178, ++ 12, 43, 1, 208, 21, 43, 25, 209, 148, 249, 242, 32, 80, 28, 1, 208, ++ 154, 66, 19, 218, 212, 248, 204, 48, 2, 43, 10, 209, 148, 248, 8, 49, ++ 1, 43, 11, 209, 32, 70, 255, 247, 214, 254, 0, 35, 132, 248, 8, 49, ++ 4, 224, 1, 43, 2, 209, 32, 70, 255, 247, 230, 252, 99, 104, 154, 126, ++ 114, 177, 148, 248, 209, 32, 1, 42, 20, 191, 22, 34, 11, 34, 149, 66, ++ 6, 216, 150, 66, 4, 217, 211, 248, 136, 48, 11, 177, 32, 104, 152, 71, ++ 212, 248, 52, 1, 1, 35, 184, 66, 132, 248, 249, 48, 1, 208, 254, 247, ++ 211, 251, 148, 249, 211, 48, 0, 43, 10, 221, 0, 35, 132, 248, 211, 48, ++ 6, 224, 212, 248, 52, 1, 184, 66, 4, 208, 254, 247, 197, 251, 1, 224, ++ 1, 32, 0, 224, 0, 32, 189, 232, 254, 131, 0, 42, 158, 208, 151, 231, ++ 192, 82, 4, 0, 1, 41, 45, 233, 240, 65, 7, 70, 136, 70, 22, 70, 68, ++ 104, 46, 217, 229, 127, 101, 187, 1, 35, 227, 119, 4, 241, 32, 0, 41, ++ 70, 8, 34, 201, 243, 94, 244, 40, 35, 132, 248, 40, 128, 132, 248, 41, ++ 96, 132, 248, 67, 80, 167, 248, 14, 81, 164, 248, 88, 48, 200, 35, 164, ++ 248, 90, 48, 10, 35, 164, 248, 92, 48, 20, 35, 132, 248, 68, 80, 132, ++ 248, 69, 96, 132, 248, 70, 96, 164, 248, 94, 48, 132, 248, 96, 80, 101, ++ 103, 101, 102, 165, 103, 165, 102, 229, 103, 229, 102, 196, 248, 128, ++ 80, 37, 103, 189, 232, 240, 129, 0, 0, 45, 233, 240, 79, 133, 176, 79, ++ 240, 255, 49, 13, 241, 15, 2, 2, 171, 4, 70, 254, 247, 89, 254, 0, 40, ++ 0, 240, 229, 128, 148, 248, 193, 48, 114, 78, 227, 24, 147, 248, 148, ++ 0, 27, 122, 212, 248, 4, 128, 86, 248, 35, 48, 79, 244, 250, 117, 67, ++ 234, 0, 64, 254, 247, 97, 251, 144, 251, 245, 247, 2, 152, 254, 247, ++ 92, 251, 144, 251, 245, 245, 32, 70, 254, 247, 195, 254, 148, 248, 64, ++ 49, 177, 70, 131, 66, 78, 210, 212, 248, 28, 33, 2, 155, 154, 66, 7, ++ 208, 212, 248, 32, 49, 1, 51, 28, 191, 79, 240, 255, 51, 196, 248, 32, ++ 49, 212, 248, 52, 1, 254, 247, 65, 251, 79, 244, 250, 118, 144, 251, ++ 246, 240, 135, 66, 0, 240, 170, 128, 175, 66, 14, 217, 133, 66, 12, ++ 211, 212, 248, 56, 17, 123, 27, 75, 67, 212, 248, 20, 97, 42, 26, 6, ++ 251, 2, 54, 56, 26, 182, 251, 240, 246, 1, 224, 79, 244, 128, 86, 212, ++ 248, 32, 49, 89, 28, 9, 208, 98, 104, 81, 104, 82, 105, 136, 106, 212, ++ 248, 36, 17, 65, 26, 145, 66, 152, 191, 30, 70, 216, 248, 0, 48, 212, ++ 248, 20, 33, 27, 104, 5, 251, 6, 250, 147, 248, 229, 48, 2, 251, 7, ++ 251, 51, 177, 45, 177, 32, 70, 57, 70, 43, 70, 0, 150, 255, 247, 233, ++ 248, 218, 69, 115, 217, 0, 224, 0, 38, 148, 248, 193, 48, 227, 24, 147, ++ 248, 148, 160, 27, 122, 89, 248, 35, 48, 67, 234, 10, 74, 157, 248, ++ 15, 48, 132, 248, 193, 48, 212, 248, 204, 48, 2, 43, 23, 209, 26, 240, ++ 64, 127, 20, 208, 95, 250, 138, 243, 8, 43, 16, 209, 32, 70, 255, 247, ++ 197, 253, 148, 248, 250, 32, 148, 248, 251, 48, 1, 58, 147, 66, 1, 218, ++ 90, 28, 0, 224, 0, 34, 132, 248, 252, 32, 132, 248, 253, 48, 152, 248, ++ 26, 48, 115, 177, 148, 248, 209, 48, 1, 43, 20, 191, 22, 35, 11, 35, ++ 159, 66, 6, 217, 157, 66, 4, 216, 216, 248, 132, 48, 11, 177, 32, 104, ++ 152, 71, 0, 35, 132, 248, 249, 48, 152, 248, 30, 48, 43, 179, 212, 248, ++ 204, 48, 1, 43, 33, 209, 212, 248, 224, 48, 243, 177, 148, 248, 244, ++ 48, 227, 24, 147, 248, 148, 0, 27, 122, 89, 248, 35, 48, 67, 234, 0, ++ 64, 254, 247, 51, 250, 7, 70, 80, 70, 254, 247, 47, 250, 135, 66, 12, ++ 210, 10, 34, 85, 67, 110, 67, 212, 248, 68, 49, 3, 235, 195, 3, 179, ++ 66, 132, 191, 148, 248, 244, 48, 132, 248, 193, 48, 148, 248, 211, 48, ++ 1, 59, 219, 178, 10, 43, 5, 216, 0, 35, 132, 248, 211, 48, 1, 224, 0, ++ 32, 0, 224, 1, 32, 5, 176, 189, 232, 240, 143, 192, 82, 4, 0, 112, 181, ++ 144, 248, 193, 48, 38, 77, 195, 24, 27, 122, 4, 70, 85, 248, 35, 96, ++ 233, 177, 208, 248, 204, 48, 1, 43, 4, 209, 255, 247, 134, 251, 0, 40, ++ 46, 209, 112, 189, 2, 43, 57, 209, 255, 247, 124, 253, 0, 40, 53, 208, ++ 148, 248, 193, 48, 22, 240, 64, 127, 35, 68, 27, 122, 85, 248, 35, 48, ++ 42, 208, 19, 240, 64, 127, 20, 191, 0, 33, 1, 33, 25, 224, 17, 70, 254, ++ 247, 217, 253, 0, 40, 33, 209, 32, 70, 255, 247, 216, 254, 0, 40, 26, ++ 209, 148, 248, 194, 48, 7, 43, 16, 209, 32, 70, 255, 247, 189, 253, ++ 96, 177, 17, 224, 212, 248, 196, 48, 131, 177, 0, 34, 26, 96, 112, 189, ++ 0, 33, 32, 70, 189, 232, 112, 64, 255, 247, 3, 189, 32, 70, 254, 247, ++ 163, 254, 0, 40, 238, 209, 112, 189, 1, 33, 242, 231, 112, 189, 192, ++ 82, 4, 0, 45, 233, 248, 67, 4, 70, 5, 70, 0, 38, 36, 224, 223, 248, ++ 188, 128, 43, 122, 212, 248, 204, 32, 119, 28, 88, 248, 35, 48, 149, ++ 248, 148, 0, 162, 177, 67, 234, 0, 64, 16, 240, 64, 127, 15, 208, 254, ++ 247, 164, 249, 107, 122, 129, 70, 88, 248, 35, 48, 149, 248, 149, 0, ++ 67, 234, 0, 64, 254, 247, 154, 249, 129, 69, 8, 191, 62, 70, 0, 224, ++ 62, 70, 133, 248, 78, 96, 1, 53, 62, 70, 148, 248, 183, 48, 1, 59, 158, ++ 66, 213, 219, 163, 25, 131, 248, 78, 96, 0, 35, 132, 248, 113, 48, 38, ++ 70, 1, 39, 38, 224, 22, 75, 114, 122, 212, 248, 204, 16, 53, 27, 83, ++ 248, 34, 32, 150, 248, 149, 0, 153, 70, 185, 177, 66, 234, 0, 64, 16, ++ 240, 64, 127, 18, 208, 254, 247, 235, 249, 128, 70, 99, 25, 147, 248, ++ 148, 0, 27, 122, 89, 248, 35, 48, 67, 234, 0, 64, 254, 247, 224, 249, ++ 64, 69, 3, 211, 21, 241, 255, 53, 240, 210, 0, 37, 134, 248, 114, 80, ++ 1, 55, 1, 54, 148, 248, 183, 48, 159, 66, 212, 219, 189, 232, 248, 131, ++ 192, 82, 4, 0, 45, 233, 248, 67, 10, 156, 136, 70, 11, 157, 6, 70, 23, ++ 70, 32, 70, 0, 33, 32, 34, 201, 243, 120, 242, 0, 35, 43, 112, 184, ++ 241, 16, 15, 40, 191, 79, 240, 16, 8, 44, 224, 241, 24, 73, 125, 90, ++ 0, 2, 43, 36, 248, 19, 16, 32, 216, 34, 72, 16, 248, 19, 192, 0, 235, ++ 67, 0, 6, 235, 220, 9, 153, 248, 21, 144, 12, 240, 7, 12, 73, 250, 12, ++ 252, 28, 240, 1, 15, 28, 191, 65, 244, 128, 113, 161, 82, 65, 120, 6, ++ 235, 209, 0, 64, 125, 1, 240, 7, 1, 80, 250, 1, 241, 200, 7, 3, 213, ++ 161, 90, 65, 244, 0, 113, 161, 82, 162, 90, 1, 51, 2, 177, 43, 112, ++ 219, 178, 67, 69, 208, 219, 111, 185, 43, 120, 1, 43, 10, 217, 179, ++ 125, 35, 240, 15, 3, 99, 128, 43, 120, 2, 43, 3, 217, 243, 125, 35, ++ 240, 31, 3, 163, 128, 43, 120, 1, 43, 7, 217, 35, 136, 19, 244, 64, ++ 127, 3, 208, 4, 72, 4, 73, 201, 243, 77, 242, 0, 32, 189, 232, 248, ++ 131, 174, 85, 4, 0, 92, 85, 4, 0, 32, 88, 4, 0, 45, 233, 247, 79, 7, ++ 70, 6, 70, 79, 240, 254, 8, 0, 37, 147, 224, 2, 45, 204, 191, 67, 70, ++ 0, 35, 0, 147, 50, 122, 74, 75, 83, 248, 34, 64, 153, 70, 20, 240, 64, ++ 127, 125, 208, 123, 104, 27, 104, 147, 249, 196, 50, 1, 51, 7, 209, ++ 151, 248, 208, 176, 219, 241, 1, 11, 56, 191, 79, 240, 0, 11, 1, 224, ++ 79, 240, 0, 11, 32, 70, 254, 247, 187, 248, 87, 40, 5, 208, 88, 40, ++ 20, 191, 130, 70, 79, 240, 9, 10, 1, 224, 79, 240, 8, 10, 32, 70, 254, ++ 247, 185, 248, 150, 248, 148, 48, 4, 70, 0, 45, 88, 208, 1, 40, 2, 220, ++ 186, 241, 0, 15, 83, 208, 186, 241, 7, 15, 26, 70, 10, 208, 186, 241, ++ 2, 15, 2, 221, 170, 241, 2, 0, 5, 224, 186, 241, 0, 15, 25, 208, 0, ++ 32, 0, 224, 4, 32, 187, 241, 0, 15, 21, 208, 1, 44, 19, 209, 186, 241, ++ 2, 15, 16, 220, 3, 43, 4, 209, 186, 241, 2, 15, 11, 209, 82, 70, 8, ++ 224, 2, 43, 7, 209, 186, 241, 1, 15, 4, 209, 82, 70, 84, 70, 0, 224, ++ 1, 36, 80, 70, 0, 35, 33, 70, 18, 4, 254, 247, 177, 248, 0, 35, 1, 144, ++ 5, 241, 255, 58, 0, 147, 7, 235, 10, 11, 155, 248, 8, 48, 155, 248, ++ 148, 0, 89, 248, 35, 48, 67, 234, 0, 64, 254, 247, 234, 248, 1, 155, ++ 152, 66, 14, 216, 155, 248, 8, 32, 16, 75, 155, 248, 148, 0, 83, 248, ++ 34, 48, 205, 248, 0, 160, 67, 234, 0, 64, 254, 247, 96, 248, 160, 66, ++ 2, 217, 26, 241, 255, 58, 222, 210, 0, 155, 8, 241, 1, 8, 134, 248, ++ 43, 48, 1, 53, 1, 54, 95, 250, 136, 248, 151, 248, 183, 48, 157, 66, ++ 255, 246, 103, 175, 189, 232, 254, 143, 0, 191, 192, 82, 4, 0, 45, 233, ++ 240, 79, 22, 70, 161, 74, 155, 176, 13, 70, 4, 70, 81, 104, 16, 104, ++ 31, 70, 21, 171, 3, 195, 17, 122, 25, 112, 82, 248, 9, 15, 18, 171, ++ 81, 104, 3, 195, 17, 137, 146, 122, 25, 128, 154, 112, 42, 104, 0, 35, ++ 4, 224, 233, 24, 9, 121, 22, 41, 4, 208, 1, 51, 147, 66, 248, 209, 0, ++ 35, 0, 224, 1, 35, 6, 147, 0, 35, 132, 248, 183, 48, 196, 248, 204, ++ 48, 148, 248, 212, 32, 99, 104, 40, 70, 25, 127, 0, 146, 148, 248, 213, ++ 32, 148, 248, 209, 48, 1, 146, 10, 170, 2, 146, 4, 241, 214, 2, 3, 146, ++ 1, 34, 255, 247, 183, 254, 148, 248, 214, 48, 132, 248, 200, 0, 0, 43, ++ 0, 240, 228, 128, 129, 75, 25, 136, 154, 120, 173, 248, 100, 16, 141, ++ 248, 102, 32, 211, 248, 3, 0, 6, 155, 24, 144, 27, 177, 148, 248, 209, ++ 48, 1, 43, 3, 208, 4, 35, 13, 241, 96, 9, 2, 224, 3, 35, 13, 241, 100, ++ 9, 79, 240, 0, 8, 171, 70, 40, 224, 30, 177, 25, 248, 8, 32, 178, 66, ++ 33, 216, 25, 248, 8, 16, 185, 66, 29, 211, 219, 248, 0, 0, 0, 34, 23, ++ 224, 11, 235, 2, 5, 45, 121, 141, 66, 17, 209, 148, 248, 183, 160, 1, ++ 34, 4, 235, 10, 5, 133, 248, 148, 32, 32, 70, 5, 147, 254, 247, 246, ++ 250, 10, 241, 1, 10, 40, 114, 132, 248, 183, 160, 5, 155, 2, 224, 1, ++ 50, 130, 66, 229, 209, 8, 241, 1, 8, 152, 69, 212, 211, 148, 248, 214, ++ 32, 148, 248, 183, 48, 1, 42, 93, 70, 132, 248, 208, 48, 2, 217, 1, ++ 34, 196, 248, 204, 32, 79, 244, 250, 114, 86, 67, 122, 67, 8, 146, 148, ++ 248, 209, 32, 7, 150, 1, 42, 44, 208, 98, 104, 18, 104, 146, 249, 196, ++ 34, 1, 50, 38, 209, 43, 187, 30, 70, 189, 248, 40, 48, 51, 65, 223, ++ 7, 28, 213, 148, 248, 183, 48, 1, 34, 227, 24, 70, 240, 128, 119, 131, ++ 248, 148, 32, 32, 70, 71, 244, 128, 49, 7, 154, 8, 155, 255, 247, 198, ++ 248, 96, 177, 32, 70, 57, 70, 148, 248, 183, 128, 254, 247, 175, 250, ++ 4, 235, 8, 3, 8, 241, 1, 8, 24, 114, 132, 248, 183, 128, 1, 54, 2, 46, ++ 218, 209, 148, 248, 208, 32, 148, 248, 183, 48, 154, 66, 5, 208, 189, ++ 248, 40, 48, 35, 240, 1, 3, 173, 248, 40, 48, 0, 39, 79, 240, 1, 9, ++ 168, 70, 51, 224, 10, 171, 251, 90, 43, 65, 222, 7, 40, 213, 7, 45, ++ 5, 217, 50, 75, 219, 25, 91, 25, 19, 248, 10, 108, 2, 224, 9, 155, 238, ++ 24, 246, 178, 148, 248, 209, 16, 70, 240, 128, 118, 32, 70, 70, 234, ++ 1, 65, 7, 154, 8, 155, 255, 247, 137, 248, 136, 177, 148, 248, 183, ++ 160, 148, 248, 209, 48, 4, 235, 10, 11, 139, 248, 148, 48, 32, 70, 49, ++ 70, 254, 247, 108, 250, 10, 241, 1, 10, 139, 248, 8, 0, 132, 248, 183, ++ 160, 1, 53, 16, 45, 206, 209, 9, 241, 1, 9, 2, 55, 148, 248, 214, 48, ++ 153, 69, 3, 216, 187, 0, 9, 147, 0, 37, 195, 231, 148, 248, 183, 48, ++ 69, 70, 11, 185, 132, 248, 214, 48, 7, 155, 79, 244, 250, 119, 179, ++ 251, 247, 246, 8, 155, 179, 251, 247, 247, 148, 248, 214, 48, 0, 43, ++ 65, 209, 6, 155, 27, 177, 9, 35, 13, 241, 84, 9, 2, 224, 11, 35, 13, ++ 241, 72, 9, 79, 240, 0, 8, 171, 70, 46, 224, 30, 177, 25, 248, 8, 32, ++ 178, 66, 39, 216, 25, 248, 8, 16, 185, 66, 35, 211, 219, 248, 0, 0, ++ 0, 34, 29, 224, 180, 22, 4, 0, 200, 22, 4, 0, 176, 85, 4, 0, 11, 235, ++ 2, 5, 45, 121, 141, 66, 17, 209, 148, 248, 183, 160, 1, 34, 4, 235, ++ 10, 5, 133, 248, 148, 32, 32, 70, 5, 147, 254, 247, 22, 250, 10, 241, ++ 1, 10, 40, 114, 132, 248, 183, 160, 5, 155, 2, 224, 1, 50, 130, 66, ++ 229, 209, 8, 241, 1, 8, 152, 69, 206, 211, 148, 248, 183, 48, 132, 248, ++ 208, 48, 32, 70, 255, 247, 233, 253, 32, 70, 255, 247, 24, 253, 32, ++ 70, 36, 153, 255, 247, 28, 248, 0, 35, 132, 248, 193, 0, 132, 248, 194, ++ 48, 27, 176, 189, 232, 240, 143, 56, 181, 83, 178, 2, 240, 127, 1, 0, ++ 43, 172, 191, 1, 34, 2, 34, 4, 70, 254, 247, 255, 249, 5, 70, 1, 48, ++ 7, 208, 32, 70, 233, 178, 254, 247, 238, 249, 148, 248, 208, 48, 157, ++ 66, 1, 218, 148, 248, 208, 0, 36, 24, 34, 122, 3, 75, 148, 248, 148, ++ 0, 83, 248, 34, 48, 67, 234, 0, 64, 56, 189, 192, 82, 4, 0, 74, 136, ++ 144, 248, 192, 48, 2, 240, 24, 2, 179, 235, 210, 15, 6, 209, 144, 248, ++ 193, 0, 208, 241, 1, 0, 56, 191, 0, 32, 112, 71, 0, 32, 112, 71, 144, ++ 248, 194, 48, 154, 7, 8, 213, 35, 240, 2, 3, 128, 248, 194, 48, 208, ++ 248, 196, 48, 11, 177, 0, 34, 26, 96, 112, 71, 0, 0, 45, 233, 243, 71, ++ 157, 248, 48, 128, 21, 70, 184, 241, 0, 15, 12, 191, 152, 70, 79, 240, ++ 0, 8, 4, 70, 10, 158, 11, 159, 157, 248, 52, 144, 157, 248, 60, 160, ++ 254, 247, 34, 250, 168, 69, 3, 216, 183, 66, 40, 191, 55, 70, 3, 224, ++ 183, 66, 136, 191, 55, 70, 168, 70, 148, 248, 193, 48, 212, 248, 204, ++ 16, 227, 24, 26, 122, 105, 75, 1, 41, 19, 248, 34, 48, 9, 209, 75, 69, ++ 42, 208, 125, 177, 32, 70, 74, 70, 67, 70, 0, 149, 254, 247, 214, 252, ++ 26, 224, 2, 41, 29, 209, 75, 69, 3, 209, 148, 248, 251, 48, 83, 69, ++ 26, 208, 69, 185, 212, 248, 232, 48, 90, 28, 0, 240, 175, 128, 1, 51, ++ 196, 248, 232, 48, 170, 224, 32, 70, 1, 33, 74, 70, 83, 70, 205, 248, ++ 0, 128, 1, 149, 254, 247, 140, 253, 0, 40, 20, 191, 1, 32, 2, 32, 161, ++ 224, 153, 69, 64, 240, 154, 128, 184, 241, 0, 15, 8, 209, 63, 185, 148, ++ 248, 64, 49, 32, 70, 1, 51, 132, 248, 64, 49, 255, 247, 143, 255, 181, ++ 235, 72, 15, 3, 211, 37, 177, 182, 235, 71, 15, 1, 210, 0, 35, 3, 224, ++ 38, 177, 148, 248, 64, 49, 1, 51, 132, 248, 64, 49, 99, 104, 219, 126, ++ 19, 185, 0, 45, 121, 208, 0, 224, 37, 177, 168, 69, 2, 209, 32, 70, ++ 254, 247, 53, 251, 148, 248, 249, 48, 99, 177, 99, 104, 212, 248, 216, ++ 32, 91, 127, 154, 66, 6, 211, 212, 248, 196, 48, 0, 34, 132, 248, 249, ++ 32, 3, 177, 26, 96, 148, 248, 194, 48, 83, 177, 99, 104, 212, 248, 188, ++ 16, 90, 123, 145, 66, 148, 191, 147, 248, 12, 144, 147, 248, 11, 144, ++ 1, 224, 79, 240, 2, 9, 109, 179, 157, 248, 56, 48, 79, 234, 8, 56, 184, ++ 251, 245, 241, 155, 177, 148, 248, 211, 48, 90, 30, 210, 178, 10, 42, ++ 13, 216, 33, 250, 9, 241, 212, 248, 108, 33, 1, 51, 137, 24, 34, 250, ++ 9, 242, 138, 26, 196, 248, 108, 33, 132, 248, 211, 48, 18, 224, 33, ++ 250, 9, 242, 212, 248, 20, 49, 210, 24, 35, 250, 9, 243, 210, 26, 99, ++ 104, 196, 248, 20, 33, 27, 104, 27, 104, 147, 248, 229, 48, 19, 177, ++ 32, 70, 254, 247, 50, 252, 150, 177, 63, 3, 212, 248, 56, 49, 183, 251, ++ 246, 246, 38, 250, 9, 246, 35, 250, 9, 249, 246, 24, 201, 235, 6, 3, ++ 196, 248, 56, 49, 99, 104, 91, 104, 155, 106, 196, 248, 60, 49, 133, ++ 177, 212, 248, 216, 48, 88, 28, 2, 208, 1, 51, 196, 248, 216, 48, 212, ++ 248, 188, 48, 89, 28, 7, 208, 1, 51, 196, 248, 188, 48, 3, 224, 2, 32, ++ 2, 224, 40, 70, 0, 224, 0, 32, 189, 232, 252, 135, 0, 191, 192, 82, ++ 4, 0, 45, 233, 240, 79, 133, 176, 3, 147, 4, 70, 14, 70, 144, 70, 157, ++ 248, 56, 144, 157, 248, 64, 112, 254, 247, 47, 249, 157, 248, 68, 48, ++ 19, 177, 8, 241, 1, 11, 1, 224, 182, 248, 26, 176, 182, 248, 28, 160, ++ 95, 250, 139, 251, 95, 250, 138, 250, 186, 241, 0, 15, 4, 209, 187, ++ 241, 0, 15, 0, 240, 240, 128, 2, 224, 187, 241, 0, 15, 10, 208, 195, ++ 69, 5, 216, 3, 154, 146, 69, 140, 191, 0, 35, 1, 35, 0, 224, 0, 35, ++ 219, 178, 3, 224, 194, 69, 140, 191, 0, 35, 1, 35, 150, 249, 25, 80, ++ 0, 53, 24, 191, 1, 37, 27, 177, 21, 177, 32, 70, 254, 247, 121, 250, ++ 195, 69, 5, 216, 3, 155, 187, 241, 0, 15, 24, 191, 152, 70, 1, 224, ++ 79, 240, 0, 8, 148, 248, 193, 32, 102, 75, 162, 24, 146, 248, 148, 16, ++ 18, 122, 83, 248, 34, 48, 212, 248, 204, 32, 67, 234, 1, 67, 19, 240, ++ 64, 127, 20, 191, 219, 178, 255, 35, 1, 42, 20, 209, 75, 69, 49, 208, ++ 208, 69, 180, 191, 66, 70, 82, 70, 210, 178, 37, 177, 194, 69, 204, ++ 191, 0, 35, 1, 35, 0, 224, 43, 70, 0, 146, 32, 70, 0, 33, 74, 70, 254, ++ 247, 157, 251, 25, 224, 2, 42, 28, 209, 75, 69, 3, 209, 148, 248, 251, ++ 48, 187, 66, 22, 208, 208, 69, 180, 191, 67, 70, 83, 70, 219, 178, 29, ++ 177, 194, 69, 204, 191, 0, 37, 1, 37, 1, 147, 32, 70, 0, 33, 74, 70, ++ 59, 70, 0, 149, 254, 247, 84, 252, 0, 40, 20, 191, 1, 32, 2, 32, 131, ++ 224, 148, 248, 194, 48, 67, 177, 99, 104, 212, 248, 188, 16, 90, 123, ++ 145, 66, 52, 191, 24, 123, 216, 122, 0, 224, 2, 32, 212, 248, 52, 49, ++ 212, 248, 16, 33, 154, 66, 157, 248, 60, 48, 12, 191, 4, 245, 138, 118, ++ 4, 245, 156, 118, 75, 177, 148, 248, 211, 48, 1, 59, 219, 178, 10, 43, ++ 3, 216, 4, 245, 182, 113, 0, 34, 9, 224, 99, 104, 4, 245, 138, 113, ++ 27, 104, 27, 104, 147, 248, 229, 32, 10, 177, 212, 248, 20, 33, 186, ++ 241, 0, 15, 16, 209, 11, 104, 51, 250, 0, 240, 27, 26, 11, 96, 32, 224, ++ 67, 69, 200, 191, 49, 70, 15, 104, 1, 51, 39, 250, 0, 252, 204, 235, ++ 7, 7, 15, 96, 0, 224, 1, 35, 83, 69, 241, 221, 141, 177, 192, 241, 12, ++ 3, 1, 39, 159, 64, 11, 104, 186, 241, 1, 15, 59, 68, 11, 96, 7, 209, ++ 177, 66, 5, 208, 51, 104, 51, 250, 0, 240, 223, 25, 59, 26, 51, 96, ++ 99, 104, 27, 104, 27, 104, 147, 248, 229, 48, 35, 177, 32, 70, 212, ++ 248, 20, 17, 254, 247, 16, 251, 4, 245, 156, 115, 158, 66, 4, 209, 99, ++ 104, 91, 104, 155, 106, 196, 248, 60, 49, 29, 177, 0, 35, 132, 248, ++ 64, 49, 7, 224, 148, 248, 64, 49, 32, 70, 1, 51, 132, 248, 64, 49, 255, ++ 247, 237, 253, 212, 248, 188, 48, 89, 28, 5, 208, 1, 51, 196, 248, 188, ++ 48, 1, 224, 2, 32, 0, 224, 0, 32, 5, 176, 189, 232, 240, 143, 192, 82, ++ 4, 0, 131, 123, 67, 185, 4, 35, 25, 177, 3, 115, 5, 35, 195, 114, 112, ++ 71, 2, 34, 2, 115, 195, 114, 112, 71, 211, 185, 144, 248, 245, 32, 209, ++ 7, 3, 213, 208, 248, 196, 32, 2, 177, 19, 96, 144, 248, 245, 48, 35, ++ 240, 1, 3, 128, 248, 245, 48, 176, 248, 0, 49, 218, 7, 4, 213, 208, ++ 248, 196, 32, 10, 177, 0, 33, 17, 96, 35, 240, 1, 3, 160, 248, 0, 49, ++ 112, 71, 45, 233, 240, 79, 144, 70, 74, 136, 31, 70, 144, 248, 192, ++ 48, 2, 240, 24, 2, 133, 176, 179, 235, 210, 15, 4, 70, 14, 70, 157, ++ 248, 56, 176, 157, 248, 60, 80, 157, 248, 64, 160, 157, 248, 68, 144, ++ 36, 209, 144, 248, 251, 16, 254, 247, 48, 250, 49, 70, 32, 70, 66, 70, ++ 59, 70, 205, 248, 0, 176, 1, 149, 205, 248, 8, 160, 205, 248, 12, 144, ++ 255, 247, 149, 254, 2, 40, 1, 70, 16, 208, 161, 241, 1, 12, 220, 241, ++ 0, 1, 32, 70, 65, 235, 12, 1, 42, 70, 5, 176, 189, 232, 240, 79, 255, ++ 247, 1, 186, 1, 51, 196, 248, 184, 48, 3, 224, 212, 248, 184, 48, 90, ++ 28, 247, 209, 5, 176, 189, 232, 240, 143, 45, 233, 240, 79, 139, 176, ++ 157, 248, 104, 64, 157, 248, 80, 192, 9, 148, 157, 248, 84, 128, 157, ++ 248, 88, 144, 157, 248, 92, 176, 157, 248, 96, 160, 157, 248, 100, 80, ++ 4, 70, 0, 40, 50, 208, 144, 248, 183, 112, 0, 47, 46, 208, 79, 136, ++ 144, 248, 192, 96, 7, 240, 24, 7, 182, 235, 215, 15, 34, 209, 9, 158, ++ 205, 248, 0, 192, 205, 248, 4, 128, 205, 248, 8, 144, 205, 248, 12, ++ 160, 4, 149, 205, 248, 20, 176, 6, 150, 254, 247, 30, 252, 2, 40, 1, ++ 70, 16, 208, 161, 241, 1, 12, 220, 241, 0, 1, 32, 70, 65, 235, 12, 1, ++ 42, 70, 11, 176, 189, 232, 240, 79, 255, 247, 182, 185, 1, 51, 196, ++ 248, 184, 48, 3, 224, 212, 248, 184, 48, 90, 28, 247, 209, 11, 176, ++ 189, 232, 240, 143, 45, 233, 240, 79, 135, 176, 16, 159, 221, 248, 68, ++ 128, 157, 248, 72, 144, 157, 248, 76, 160, 157, 248, 80, 80, 157, 248, ++ 84, 176, 4, 70, 0, 40, 48, 208, 144, 248, 183, 192, 188, 241, 0, 15, ++ 43, 208, 7, 235, 2, 12, 188, 241, 0, 15, 8, 191, 1, 34, 144, 248, 192, ++ 192, 1, 240, 24, 6, 188, 235, 214, 15, 26, 209, 141, 232, 128, 7, 4, ++ 149, 205, 248, 20, 176, 255, 247, 11, 253, 2, 40, 1, 70, 16, 208, 161, ++ 241, 1, 12, 220, 241, 0, 1, 32, 70, 65, 235, 12, 1, 42, 70, 7, 176, ++ 189, 232, 240, 79, 255, 247, 113, 185, 1, 51, 196, 248, 184, 48, 3, ++ 224, 212, 248, 184, 48, 90, 28, 247, 209, 7, 176, 189, 232, 240, 143, ++ 112, 181, 144, 248, 68, 48, 4, 70, 0, 43, 79, 208, 22, 11, 144, 248, ++ 69, 48, 144, 248, 70, 32, 6, 240, 3, 6, 147, 66, 2, 208, 150, 66, 68, ++ 209, 2, 224, 158, 66, 65, 209, 2, 224, 0, 241, 76, 5, 1, 224, 0, 241, ++ 72, 5, 8, 70, 253, 247, 209, 251, 148, 248, 96, 32, 79, 244, 250, 115, ++ 144, 251, 243, 243, 138, 177, 4, 235, 134, 2, 82, 111, 24, 54, 4, 235, ++ 134, 6, 10, 185, 115, 96, 8, 224, 113, 104, 226, 122, 49, 250, 2, 240, ++ 51, 250, 2, 242, 9, 26, 138, 24, 114, 96, 34, 109, 10, 185, 43, 96, ++ 16, 224, 41, 104, 224, 122, 49, 250, 0, 240, 8, 26, 40, 96, 226, 122, ++ 51, 250, 2, 242, 18, 24, 138, 66, 42, 96, 3, 209, 147, 66, 1, 217, 1, ++ 50, 42, 96, 35, 109, 90, 28, 1, 208, 1, 51, 35, 101, 32, 70, 2, 33, ++ 189, 232, 112, 64, 254, 247, 226, 184, 112, 189, 144, 248, 193, 32, ++ 144, 248, 208, 48, 154, 66, 52, 191, 0, 32, 1, 32, 112, 71, 45, 233, ++ 248, 67, 13, 70, 145, 122, 4, 70, 2, 41, 148, 191, 0, 33, 1, 33, 22, ++ 70, 152, 70, 254, 247, 88, 248, 0, 35, 168, 248, 0, 48, 148, 248, 251, ++ 48, 51, 114, 148, 248, 251, 48, 115, 114, 42, 136, 148, 249, 211, 112, ++ 34, 240, 24, 2, 18, 4, 18, 12, 148, 248, 193, 48, 42, 128, 148, 248, ++ 192, 16, 0, 47, 204, 191, 79, 244, 0, 7, 0, 39, 201, 0, 1, 240, 24, ++ 1, 10, 67, 82, 4, 82, 12, 42, 128, 148, 248, 183, 32, 147, 66, 3, 211, ++ 83, 30, 219, 178, 132, 248, 193, 48, 226, 24, 146, 248, 148, 0, 73, ++ 73, 18, 122, 137, 70, 81, 248, 34, 32, 66, 234, 0, 66, 50, 96, 212, ++ 248, 204, 32, 1, 42, 13, 209, 148, 248, 245, 32, 210, 7, 34, 213, 42, ++ 136, 148, 248, 243, 48, 111, 234, 66, 66, 111, 234, 82, 66, 42, 128, ++ 0, 39, 24, 224, 2, 42, 22, 209, 180, 248, 0, 33, 208, 7, 18, 213, 148, ++ 248, 8, 33, 26, 185, 148, 248, 252, 32, 50, 114, 5, 224, 148, 248, 253, ++ 32, 148, 248, 254, 48, 0, 39, 50, 114, 42, 136, 111, 234, 66, 66, 111, ++ 234, 82, 66, 42, 128, 148, 248, 193, 32, 154, 66, 7, 208, 148, 248, ++ 183, 32, 147, 66, 3, 211, 83, 30, 219, 178, 132, 248, 193, 48, 148, ++ 248, 249, 32, 42, 177, 184, 248, 0, 32, 66, 240, 1, 2, 168, 248, 0, ++ 32, 148, 248, 208, 32, 154, 66, 11, 216, 226, 24, 148, 248, 210, 16, ++ 146, 248, 148, 32, 81, 250, 2, 242, 18, 240, 1, 2, 8, 191, 23, 70, 0, ++ 224, 0, 39, 227, 24, 147, 248, 148, 32, 27, 122, 32, 70, 89, 248, 35, ++ 48, 67, 234, 2, 67, 59, 67, 51, 96, 148, 248, 193, 16, 253, 247, 171, ++ 253, 35, 24, 26, 122, 147, 248, 148, 16, 89, 248, 34, 32, 66, 234, 1, ++ 66, 114, 96, 143, 177, 148, 249, 211, 16, 12, 41, 13, 209, 148, 248, ++ 208, 16, 129, 66, 9, 216, 148, 248, 210, 16, 147, 248, 148, 48, 81, ++ 250, 3, 243, 217, 7, 68, 191, 23, 67, 119, 96, 150, 232, 12, 0, 154, ++ 66, 6, 209, 50, 122, 115, 122, 154, 66, 12, 191, 1, 35, 2, 35, 0, 224, ++ 2, 35, 179, 114, 189, 232, 248, 131, 192, 82, 4, 0, 79, 244, 188, 112, ++ 112, 71, 0, 0, 16, 181, 0, 35, 128, 248, 84, 49, 128, 248, 85, 49, 128, ++ 248, 86, 49, 128, 248, 87, 49, 100, 35, 128, 248, 88, 49, 144, 248, ++ 183, 48, 4, 70, 1, 59, 195, 24, 147, 248, 148, 0, 26, 122, 5, 75, 83, ++ 248, 34, 48, 67, 234, 0, 64, 253, 247, 160, 250, 196, 248, 92, 1, 16, ++ 189, 0, 191, 192, 82, 4, 0, 45, 233, 240, 79, 135, 176, 147, 70, 24, ++ 154, 31, 70, 4, 146, 25, 154, 128, 70, 16, 155, 157, 248, 68, 144, 157, ++ 249, 72, 160, 157, 248, 88, 96, 157, 248, 92, 80, 5, 146, 12, 70, 0, ++ 41, 124, 208, 8, 70, 79, 244, 188, 114, 0, 33, 3, 147, 200, 243, 51, ++ 243, 196, 248, 4, 128, 196, 248, 0, 176, 196, 248, 196, 112, 3, 155, ++ 15, 177, 0, 34, 58, 96, 79, 234, 74, 10, 132, 248, 209, 144, 132, 248, ++ 210, 160, 0, 39, 25, 70, 32, 70, 4, 154, 5, 155, 0, 151, 255, 247, 163, ++ 249, 1, 46, 132, 248, 250, 96, 15, 217, 2, 35, 196, 248, 204, 48, 115, ++ 30, 157, 66, 184, 191, 111, 28, 0, 35, 132, 248, 251, 80, 132, 248, ++ 252, 112, 132, 248, 253, 80, 132, 248, 8, 49, 42, 70, 32, 70, 49, 70, ++ 254, 247, 146, 254, 99, 104, 6, 34, 90, 119, 0, 33, 48, 34, 4, 245, ++ 136, 112, 200, 243, 249, 242, 212, 248, 204, 80, 79, 240, 255, 51, 1, ++ 45, 196, 248, 20, 49, 28, 209, 132, 248, 242, 48, 0, 35, 132, 248, 241, ++ 48, 148, 248, 214, 48, 2, 43, 19, 217, 148, 248, 193, 48, 227, 24, 147, ++ 248, 148, 0, 26, 122, 19, 75, 83, 248, 34, 48, 67, 234, 0, 64, 1, 40, ++ 148, 191, 0, 32, 1, 32, 253, 247, 167, 249, 8, 177, 132, 248, 241, 80, ++ 32, 70, 254, 247, 133, 251, 99, 104, 91, 104, 155, 106, 196, 248, 100, ++ 49, 0, 35, 196, 248, 96, 49, 216, 248, 0, 48, 27, 104, 147, 248, 229, ++ 48, 43, 177, 32, 70, 7, 176, 189, 232, 240, 79, 255, 247, 75, 191, 7, ++ 176, 189, 232, 240, 143, 192, 82, 4, 0, 45, 233, 240, 65, 152, 70, 144, ++ 248, 193, 48, 4, 70, 195, 24, 147, 248, 148, 0, 22, 70, 26, 122, 18, ++ 75, 13, 70, 83, 248, 34, 48, 6, 159, 67, 234, 0, 64, 253, 247, 238, ++ 249, 79, 244, 250, 114, 144, 251, 242, 240, 66, 67, 50, 96, 148, 248, ++ 194, 48, 7, 43, 6, 209, 212, 248, 188, 48, 171, 66, 148, 191, 0, 37, ++ 1, 37, 0, 224, 0, 37, 56, 70, 4, 245, 170, 113, 12, 34, 136, 248, 0, ++ 80, 189, 232, 240, 65, 198, 247, 8, 191, 192, 82, 4, 0, 208, 248, 196, ++ 48, 11, 177, 0, 34, 26, 96, 112, 71, 131, 105, 218, 104, 138, 66, 24, ++ 191, 217, 96, 112, 71, 56, 181, 4, 70, 37, 105, 0, 104, 53, 177, 5, ++ 245, 7, 113, 233, 243, 207, 243, 40, 70, 207, 247, 139, 254, 0, 35, ++ 35, 97, 56, 189, 248, 181, 132, 105, 5, 70, 6, 104, 224, 106, 8, 177, ++ 207, 247, 128, 254, 233, 105, 176, 104, 0, 39, 221, 243, 194, 246, 0, ++ 33, 40, 70, 255, 247, 218, 255, 40, 70, 132, 248, 61, 112, 255, 247, ++ 219, 255, 48, 70, 243, 243, 52, 246, 39, 130, 103, 98, 167, 98, 231, ++ 98, 39, 131, 248, 189, 115, 181, 4, 104, 3, 37, 32, 70, 1, 33, 79, 244, ++ 128, 98, 0, 35, 0, 149, 239, 243, 203, 246, 0, 33, 32, 70, 10, 70, 1, ++ 35, 0, 149, 24, 240, 2, 221, 0, 38, 212, 248, 104, 50, 157, 89, 157, ++ 177, 171, 121, 139, 185, 213, 248, 4, 49, 90, 108, 34, 240, 1, 2, 90, ++ 100, 26, 120, 1, 42, 1, 209, 91, 127, 51, 177, 40, 70, 0, 33, 216, 247, ++ 117, 255, 40, 70, 252, 247, 67, 249, 4, 54, 32, 46, 228, 209, 32, 70, ++ 2, 176, 189, 232, 112, 64, 243, 243, 250, 181, 248, 181, 208, 248, 152, ++ 85, 4, 70, 174, 105, 243, 104, 0, 43, 48, 208, 1, 43, 48, 208, 40, 70, ++ 1, 33, 255, 247, 138, 255, 160, 104, 233, 105, 221, 243, 106, 246, 40, ++ 177, 40, 70, 0, 33, 255, 247, 129, 255, 1, 39, 0, 224, 7, 70, 51, 138, ++ 131, 177, 35, 106, 24, 105, 242, 247, 134, 252, 51, 138, 131, 66, 9, ++ 208, 32, 70, 244, 243, 44, 243, 32, 70, 49, 138, 242, 243, 250, 247, ++ 32, 70, 238, 243, 219, 242, 212, 248, 152, 5, 255, 247, 155, 255, 32, ++ 70, 244, 243, 168, 245, 40, 70, 255, 247, 118, 255, 56, 70, 248, 189, ++ 1, 32, 248, 189, 0, 32, 248, 189, 255, 247, 193, 191, 0, 32, 112, 71, ++ 16, 181, 12, 70, 65, 177, 177, 248, 112, 48, 43, 177, 200, 110, 207, ++ 247, 235, 253, 0, 35, 164, 248, 112, 48, 16, 189, 8, 70, 207, 247, 228, ++ 189, 1, 70, 3, 104, 209, 248, 140, 32, 48, 181, 24, 104, 250, 177, 79, ++ 244, 97, 101, 178, 251, 245, 243, 5, 251, 19, 34, 0, 36, 193, 248, 152, ++ 64, 193, 248, 144, 48, 193, 248, 148, 32, 51, 177, 128, 104, 209, 248, ++ 156, 16, 72, 246, 160, 66, 35, 70, 6, 224, 74, 177, 79, 244, 122, 116, ++ 98, 67, 128, 104, 209, 248, 156, 16, 189, 232, 48, 64, 221, 243, 222, ++ 181, 48, 189, 8, 70, 204, 243, 168, 183, 56, 181, 8, 59, 152, 178, 161, ++ 248, 112, 0, 12, 70, 21, 70, 204, 243, 159, 247, 224, 102, 56, 177, ++ 180, 248, 112, 32, 5, 241, 8, 1, 189, 232, 56, 64, 198, 247, 9, 190, ++ 56, 189, 240, 181, 31, 70, 185, 176, 0, 35, 53, 147, 54, 147, 123, 75, ++ 6, 70, 12, 70, 13, 241, 192, 14, 3, 241, 16, 12, 24, 104, 89, 104, 117, ++ 70, 3, 197, 8, 51, 99, 69, 174, 70, 247, 209, 54, 104, 1, 33, 32, 35, ++ 2, 241, 8, 5, 112, 106, 0, 34, 201, 247, 247, 252, 53, 144, 48, 105, ++ 204, 247, 7, 253, 104, 47, 54, 144, 19, 217, 180, 248, 112, 48, 19, ++ 177, 224, 110, 207, 247, 122, 253, 104, 63, 184, 178, 164, 248, 112, ++ 0, 204, 243, 99, 247, 224, 102, 0, 40, 0, 240, 168, 128, 180, 248, 112, ++ 48, 237, 24, 1, 224, 64, 240, 164, 128, 160, 111, 1, 33, 42, 70, 32, ++ 35, 201, 247, 149, 253, 160, 111, 201, 247, 199, 254, 0, 40, 64, 240, ++ 154, 128, 160, 111, 113, 105, 201, 247, 51, 254, 0, 40, 128, 242, 147, ++ 128, 1, 33, 5, 241, 32, 2, 32, 35, 212, 248, 136, 0, 201, 247, 128, ++ 253, 1, 33, 212, 248, 140, 0, 5, 241, 64, 2, 32, 35, 201, 247, 120, ++ 253, 160, 111, 97, 111, 201, 247, 28, 254, 112, 185, 212, 248, 136, ++ 0, 212, 248, 128, 16, 201, 247, 21, 254, 56, 185, 212, 248, 140, 0, ++ 212, 248, 132, 16, 201, 247, 14, 254, 0, 40, 112, 208, 212, 248, 136, ++ 16, 212, 248, 148, 0, 212, 248, 140, 32, 204, 247, 50, 253, 48, 105, ++ 212, 248, 148, 16, 204, 247, 177, 255, 0, 40, 99, 208, 212, 248, 144, ++ 0, 161, 111, 54, 154, 205, 247, 135, 251, 54, 152, 212, 248, 148, 16, ++ 2, 70, 204, 247, 245, 255, 54, 152, 225, 111, 2, 70, 32, 173, 205, 247, ++ 123, 251, 54, 152, 52, 169, 0, 34, 204, 247, 3, 253, 42, 70, 32, 35, ++ 1, 33, 52, 152, 201, 247, 155, 253, 0, 33, 32, 34, 40, 168, 200, 243, ++ 229, 240, 32, 33, 55, 171, 42, 70, 24, 175, 1, 147, 40, 168, 11, 70, ++ 0, 151, 203, 243, 129, 242, 97, 111, 162, 111, 115, 105, 53, 152, 201, ++ 247, 97, 254, 32, 35, 42, 70, 1, 33, 53, 152, 201, 247, 128, 253, 41, ++ 70, 16, 34, 4, 241, 8, 0, 198, 247, 73, 253, 48, 168, 200, 243, 122, ++ 241, 0, 149, 64, 34, 32, 37, 3, 70, 4, 174, 3, 146, 41, 70, 48, 170, ++ 56, 70, 1, 149, 2, 150, 203, 243, 57, 242, 4, 241, 24, 0, 49, 70, 42, ++ 70, 198, 247, 51, 253, 4, 241, 56, 0, 12, 169, 42, 70, 198, 247, 45, ++ 253, 0, 36, 8, 224, 4, 70, 6, 224, 4, 36, 4, 224, 3, 36, 2, 224, 1, ++ 36, 0, 224, 2, 36, 53, 168, 201, 247, 127, 253, 54, 168, 204, 247, 113, ++ 252, 0, 33, 32, 34, 24, 168, 200, 243, 151, 240, 0, 33, 80, 34, 4, 168, ++ 200, 243, 146, 240, 32, 168, 0, 33, 32, 34, 200, 243, 141, 240, 32, ++ 70, 57, 176, 240, 189, 144, 88, 4, 0, 45, 233, 240, 79, 29, 70, 209, ++ 248, 244, 48, 137, 176, 179, 248, 98, 160, 131, 104, 129, 70, 238, 88, ++ 67, 104, 15, 70, 203, 88, 144, 70, 7, 147, 24, 70, 49, 70, 18, 154, ++ 19, 155, 255, 247, 234, 254, 3, 40, 202, 243, 64, 26, 4, 70, 1, 209, ++ 0, 144, 5, 224, 2, 40, 1, 208, 4, 40, 17, 209, 3, 35, 0, 147, 1, 35, ++ 1, 147, 2, 147, 0, 35, 3, 147, 4, 147, 56, 70, 5, 241, 20, 1, 66, 70, ++ 43, 70, 205, 248, 20, 160, 217, 247, 58, 255, 70, 224, 1, 40, 67, 208, ++ 0, 40, 66, 209, 182, 248, 98, 48, 5, 241, 20, 12, 1, 51, 166, 248, 98, ++ 48, 1, 35, 79, 240, 3, 11, 97, 70, 1, 147, 2, 144, 3, 144, 4, 144, 66, ++ 70, 43, 70, 56, 70, 205, 248, 0, 176, 205, 248, 24, 192, 205, 248, 20, ++ 160, 217, 247, 27, 255, 221, 248, 24, 192, 205, 248, 0, 176, 97, 70, ++ 79, 240, 2, 11, 66, 70, 43, 70, 56, 70, 205, 248, 4, 176, 2, 148, 3, ++ 148, 4, 148, 205, 248, 20, 160, 217, 247, 8, 255, 216, 248, 0, 48, 177, ++ 110, 198, 248, 89, 48, 184, 248, 4, 48, 166, 248, 93, 48, 217, 248, ++ 0, 48, 152, 104, 7, 155, 211, 248, 136, 32, 35, 70, 221, 243, 80, 244, ++ 134, 248, 88, 176, 0, 224, 255, 36, 32, 70, 9, 176, 189, 232, 240, 143, ++ 45, 233, 240, 79, 152, 70, 209, 248, 244, 48, 135, 176, 179, 248, 98, ++ 176, 131, 104, 6, 70, 88, 248, 3, 80, 67, 104, 15, 70, 81, 248, 3, 144, ++ 146, 70, 72, 70, 41, 70, 16, 154, 17, 155, 255, 247, 107, 254, 1, 40, ++ 4, 70, 9, 209, 51, 104, 169, 110, 152, 104, 217, 248, 136, 32, 0, 35, ++ 221, 243, 38, 244, 0, 36, 54, 224, 2, 40, 203, 243, 64, 19, 1, 208, ++ 4, 40, 16, 209, 3, 34, 0, 146, 1, 34, 1, 146, 2, 146, 0, 34, 3, 146, ++ 4, 146, 5, 147, 56, 70, 8, 241, 20, 1, 82, 70, 67, 70, 217, 247, 180, ++ 254, 31, 224, 240, 185, 181, 248, 98, 32, 79, 240, 2, 11, 1, 50, 165, ++ 248, 98, 32, 3, 34, 141, 232, 4, 8, 2, 144, 3, 144, 4, 144, 5, 147, ++ 8, 241, 20, 1, 82, 70, 67, 70, 56, 70, 217, 247, 157, 254, 51, 104, ++ 169, 110, 152, 104, 217, 248, 136, 32, 35, 70, 221, 243, 239, 243, 133, ++ 248, 88, 176, 32, 70, 7, 176, 189, 232, 240, 143, 112, 181, 188, 176, ++ 12, 70, 22, 70, 17, 70, 2, 168, 2, 34, 198, 247, 34, 252, 1, 33, 13, ++ 241, 10, 2, 32, 35, 160, 111, 201, 247, 76, 252, 1, 33, 13, 241, 42, ++ 2, 32, 35, 212, 248, 136, 0, 201, 247, 68, 252, 1, 33, 13, 241, 74, ++ 2, 32, 35, 212, 248, 140, 0, 201, 247, 60, 252, 1, 33, 13, 241, 106, ++ 2, 32, 35, 96, 111, 201, 247, 53, 252, 1, 33, 13, 241, 138, 2, 32, 35, ++ 212, 248, 128, 0, 201, 247, 45, 252, 1, 33, 13, 241, 170, 2, 32, 35, ++ 212, 248, 132, 0, 201, 247, 37, 252, 59, 171, 51, 173, 1, 147, 4, 241, ++ 24, 0, 194, 35, 32, 33, 2, 170, 0, 149, 203, 243, 15, 241, 176, 28, ++ 32, 34, 41, 70, 198, 247, 209, 251, 208, 241, 1, 0, 56, 191, 0, 32, ++ 60, 176, 112, 189, 48, 181, 208, 248, 80, 56, 197, 104, 28, 106, 165, ++ 248, 92, 70, 1, 52, 28, 98, 189, 232, 48, 64, 238, 243, 251, 179, 45, ++ 233, 247, 67, 177, 248, 112, 48, 208, 248, 0, 144, 5, 70, 12, 70, 2, ++ 241, 6, 8, 217, 248, 0, 112, 214, 136, 43, 177, 200, 110, 207, 247, ++ 93, 251, 0, 35, 164, 248, 112, 48, 72, 70, 33, 70, 66, 70, 255, 247, ++ 141, 255, 184, 177, 164, 248, 100, 96, 4, 241, 56, 6, 215, 248, 188, ++ 6, 105, 104, 50, 70, 32, 35, 4, 240, 255, 251, 35, 104, 105, 104, 20, ++ 51, 0, 147, 0, 35, 1, 147, 215, 248, 188, 6, 50, 70, 32, 35, 4, 240, ++ 179, 253, 1, 32, 189, 232, 254, 131, 247, 181, 177, 248, 100, 48, 214, ++ 136, 5, 70, 0, 104, 179, 66, 12, 70, 7, 104, 32, 210, 79, 246, 255, ++ 115, 158, 66, 28, 208, 6, 50, 255, 247, 97, 255, 200, 177, 164, 248, ++ 100, 96, 4, 241, 56, 6, 215, 248, 188, 6, 105, 104, 50, 70, 32, 35, ++ 4, 240, 211, 251, 35, 104, 105, 104, 20, 51, 0, 147, 0, 35, 1, 147, ++ 215, 248, 188, 6, 50, 70, 32, 35, 4, 240, 135, 253, 1, 32, 0, 224, 0, ++ 32, 254, 189, 45, 233, 243, 65, 6, 104, 0, 35, 5, 70, 13, 153, 48, 70, ++ 1, 147, 144, 70, 10, 156, 234, 247, 210, 252, 107, 104, 7, 70, 197, ++ 88, 9, 155, 3, 43, 4, 217, 1, 168, 8, 153, 4, 34, 198, 247, 89, 251, ++ 184, 241, 11, 15, 105, 216, 223, 232, 8, 240, 6, 10, 104, 40, 18, 22, ++ 29, 32, 83, 86, 93, 96, 51, 104, 147, 248, 102, 49, 9, 224, 1, 154, ++ 51, 104, 0, 50, 24, 191, 1, 34, 131, 248, 102, 33, 83, 224, 213, 248, ++ 136, 48, 35, 96, 79, 224, 1, 155, 179, 245, 150, 127, 80, 216, 197, ++ 248, 136, 48, 72, 224, 213, 248, 140, 48, 243, 231, 1, 155, 74, 246, ++ 192, 2, 147, 66, 69, 216, 197, 248, 140, 48, 61, 224, 35, 136, 127, ++ 43, 63, 216, 8, 53, 40, 70, 199, 243, 89, 247, 184, 177, 40, 70, 180, ++ 248, 0, 128, 199, 243, 83, 247, 128, 69, 5, 209, 160, 28, 41, 70, 34, ++ 136, 198, 247, 5, 251, 80, 177, 187, 121, 43, 185, 214, 248, 188, 6, ++ 57, 70, 49, 240, 164, 222, 2, 224, 51, 104, 27, 126, 43, 187, 0, 33, ++ 128, 34, 40, 70, 199, 243, 135, 246, 40, 70, 161, 28, 34, 136, 198, ++ 247, 2, 251, 18, 224, 149, 248, 160, 48, 189, 231, 1, 155, 0, 51, 24, ++ 191, 1, 35, 133, 248, 160, 48, 8, 224, 149, 248, 161, 48, 179, 231, ++ 1, 155, 0, 51, 24, 191, 1, 35, 133, 248, 161, 48, 0, 32, 7, 224, 111, ++ 240, 22, 0, 4, 224, 111, 240, 1, 0, 1, 224, 111, 240, 4, 0, 189, 232, ++ 252, 129, 248, 181, 134, 104, 5, 70, 140, 89, 15, 70, 156, 179, 161, ++ 110, 65, 177, 3, 104, 152, 104, 221, 243, 186, 242, 43, 104, 161, 110, ++ 152, 104, 221, 243, 45, 243, 33, 70, 40, 70, 255, 247, 118, 252, 4, ++ 241, 152, 0, 204, 247, 30, 250, 4, 241, 148, 0, 204, 247, 26, 250, 4, ++ 241, 144, 0, 204, 247, 22, 250, 4, 241, 124, 0, 201, 247, 29, 251, 4, ++ 241, 140, 0, 201, 247, 25, 251, 4, 241, 136, 0, 201, 247, 21, 251, 4, ++ 241, 116, 0, 201, 247, 17, 251, 4, 241, 120, 0, 201, 247, 13, 251, 32, ++ 70, 207, 247, 71, 250, 0, 35, 187, 81, 248, 189, 248, 181, 70, 104, ++ 5, 70, 140, 89, 15, 70, 140, 177, 212, 248, 156, 16, 73, 177, 3, 104, ++ 152, 104, 221, 243, 126, 242, 43, 104, 212, 248, 156, 16, 152, 104, ++ 221, 243, 240, 242, 32, 70, 207, 247, 46, 250, 0, 35, 187, 81, 248, ++ 189, 248, 181, 135, 104, 5, 70, 156, 32, 14, 70, 204, 243, 19, 244, ++ 4, 70, 0, 40, 84, 208, 0, 33, 156, 34, 199, 243, 0, 246, 38, 96, 101, ++ 96, 0, 35, 244, 81, 104, 106, 164, 248, 112, 48, 1, 33, 0, 34, 32, 35, ++ 201, 247, 129, 249, 160, 103, 0, 40, 68, 208, 104, 106, 1, 33, 0, 34, ++ 32, 35, 201, 247, 120, 249, 96, 103, 0, 40, 59, 208, 104, 106, 1, 33, ++ 0, 34, 32, 35, 201, 247, 111, 249, 196, 248, 136, 0, 144, 179, 104, ++ 106, 1, 33, 0, 34, 32, 35, 201, 247, 102, 249, 196, 248, 140, 0, 72, ++ 179, 104, 106, 1, 33, 0, 34, 32, 35, 201, 247, 93, 249, 224, 103, 8, ++ 179, 40, 105, 204, 247, 108, 249, 196, 248, 144, 0, 216, 177, 40, 105, ++ 204, 247, 102, 249, 196, 248, 148, 0, 168, 177, 40, 105, 204, 247, 96, ++ 249, 196, 248, 152, 0, 120, 177, 19, 35, 164, 248, 102, 48, 43, 104, ++ 9, 73, 152, 104, 50, 70, 0, 35, 221, 243, 156, 242, 160, 102, 0, 36, ++ 8, 224, 111, 240, 26, 4, 1, 224, 79, 240, 255, 52, 40, 70, 49, 70, 255, ++ 247, 68, 255, 32, 70, 248, 189, 5, 202, 3, 0, 248, 181, 71, 104, 6, ++ 70, 168, 32, 13, 70, 204, 243, 167, 243, 4, 70, 224, 177, 79, 244, 47, ++ 115, 232, 81, 192, 248, 136, 48, 74, 246, 192, 3, 69, 96, 192, 248, ++ 140, 48, 0, 37, 1, 35, 5, 114, 128, 248, 161, 48, 128, 248, 160, 48, ++ 51, 104, 6, 96, 8, 73, 152, 104, 34, 70, 43, 70, 221, 243, 106, 242, ++ 196, 248, 156, 0, 40, 70, 248, 189, 48, 70, 41, 70, 255, 247, 81, 255, ++ 111, 240, 26, 0, 248, 189, 0, 191, 49, 192, 3, 0, 240, 181, 208, 248, ++ 152, 48, 208, 248, 144, 16, 1, 51, 68, 104, 139, 66, 37, 104, 141, 176, ++ 2, 70, 192, 248, 152, 48, 9, 209, 208, 248, 148, 48, 123, 177, 210, ++ 248, 156, 16, 79, 244, 122, 114, 168, 104, 90, 67, 4, 224, 7, 210, 210, ++ 248, 156, 16, 168, 104, 20, 74, 0, 35, 221, 243, 144, 241, 34, 224, ++ 213, 248, 188, 6, 33, 70, 49, 240, 96, 221, 35, 122, 219, 177, 212, ++ 248, 244, 0, 205, 247, 2, 250, 7, 70, 168, 185, 32, 70, 4, 241, 188, ++ 1, 2, 34, 59, 240, 220, 217, 34, 126, 12, 174, 70, 248, 36, 45, 4, 241, ++ 25, 1, 4, 168, 198, 247, 181, 249, 40, 70, 26, 33, 50, 70, 36, 35, 0, ++ 151, 213, 247, 195, 255, 13, 176, 240, 189, 128, 238, 54, 0, 19, 181, ++ 2, 34, 4, 70, 13, 241, 6, 1, 238, 243, 205, 241, 227, 104, 189, 248, ++ 6, 32, 163, 248, 94, 38, 28, 189, 8, 181, 67, 104, 200, 88, 40, 177, ++ 8, 48, 199, 243, 202, 245, 0, 48, 24, 191, 1, 32, 8, 189, 67, 104, 200, ++ 88, 8, 177, 144, 248, 160, 0, 112, 71, 67, 104, 203, 88, 27, 177, 177, ++ 248, 90, 32, 195, 248, 164, 32, 112, 71, 67, 104, 200, 88, 88, 177, ++ 208, 248, 164, 48, 32, 43, 5, 209, 144, 248, 161, 0, 0, 48, 24, 191, ++ 1, 32, 0, 224, 0, 32, 192, 178, 112, 71, 45, 233, 240, 65, 32, 35, 138, ++ 176, 5, 70, 15, 70, 144, 70, 64, 106, 1, 33, 0, 34, 201, 247, 117, 248, ++ 0, 36, 9, 144, 38, 70, 0, 224, 1, 38, 40, 104, 1, 169, 32, 34, 238, ++ 243, 136, 241, 1, 33, 1, 170, 32, 35, 9, 152, 201, 247, 38, 249, 9, ++ 152, 170, 105, 1, 70, 201, 247, 176, 250, 9, 152, 169, 105, 201, 247, ++ 122, 252, 54, 185, 67, 28, 4, 208, 56, 70, 9, 153, 201, 247, 240, 249, ++ 9, 224, 44, 185, 1, 40, 4, 208, 64, 70, 9, 153, 201, 247, 232, 249, ++ 1, 36, 0, 46, 217, 208, 0, 44, 214, 208, 9, 168, 201, 247, 152, 249, ++ 1, 32, 10, 176, 189, 232, 240, 129, 45, 233, 240, 79, 145, 232, 16, ++ 2, 34, 104, 251, 176, 0, 38, 208, 248, 0, 128, 6, 146, 5, 70, 15, 70, ++ 96, 106, 1, 33, 50, 70, 227, 105, 113, 150, 117, 150, 118, 150, 119, ++ 150, 120, 150, 201, 247, 42, 248, 113, 144, 0, 40, 0, 240, 45, 129, ++ 32, 105, 204, 247, 55, 248, 118, 144, 0, 40, 0, 240, 38, 129, 1, 33, ++ 32, 35, 50, 70, 96, 106, 201, 247, 25, 248, 1, 33, 32, 35, 119, 144, ++ 50, 70, 96, 106, 201, 247, 18, 248, 8, 241, 20, 8, 1, 33, 32, 35, 120, ++ 144, 62, 170, 160, 105, 9, 241, 194, 9, 201, 247, 43, 249, 6, 34, 64, ++ 70, 73, 70, 198, 247, 226, 248, 176, 66, 110, 168, 7, 221, 65, 70, 6, ++ 34, 198, 247, 238, 248, 13, 245, 223, 112, 73, 70, 6, 224, 73, 70, 6, ++ 34, 198, 247, 230, 248, 13, 245, 223, 112, 65, 70, 6, 34, 8, 55, 198, ++ 247, 223, 248, 56, 70, 199, 243, 16, 245, 0, 40, 0, 240, 237, 128, 56, ++ 70, 199, 243, 10, 245, 6, 70, 57, 70, 50, 70, 9, 168, 198, 247, 208, ++ 248, 115, 28, 0, 33, 32, 34, 86, 168, 7, 147, 199, 243, 73, 244, 32, ++ 70, 119, 153, 120, 154, 255, 247, 80, 255, 79, 240, 0, 9, 79, 240, 1, ++ 8, 47, 70, 9, 170, 114, 171, 2, 248, 6, 128, 12, 33, 13, 245, 156, 123, ++ 1, 147, 110, 168, 7, 155, 205, 248, 0, 176, 202, 243, 215, 245, 114, ++ 153, 120, 72, 5, 145, 199, 243, 224, 244, 62, 170, 3, 70, 79, 240, 32, ++ 10, 0, 146, 42, 173, 5, 153, 115, 74, 88, 70, 205, 248, 4, 160, 2, 149, ++ 205, 248, 12, 160, 202, 243, 156, 245, 1, 33, 42, 70, 83, 70, 113, 152, ++ 201, 247, 100, 248, 6, 152, 255, 247, 233, 254, 113, 152, 161, 105, ++ 201, 247, 5, 249, 0, 40, 43, 218, 120, 155, 113, 153, 0, 147, 102, 75, ++ 118, 154, 1, 147, 6, 155, 2, 147, 32, 105, 119, 155, 204, 247, 76, 251, ++ 240, 185, 185, 241, 0, 15, 25, 209, 32, 105, 118, 153, 204, 247, 161, ++ 250, 176, 177, 89, 70, 114, 154, 86, 168, 198, 247, 115, 248, 118, 152, ++ 115, 169, 116, 170, 204, 247, 1, 248, 115, 153, 116, 154, 215, 248, ++ 144, 0, 204, 247, 12, 248, 32, 104, 9, 169, 50, 70, 238, 243, 141, 240, ++ 79, 240, 1, 9, 8, 241, 1, 8, 95, 250, 136, 248, 184, 241, 41, 15, 154, ++ 209, 61, 70, 185, 241, 0, 15, 105, 208, 215, 248, 144, 0, 115, 169, ++ 116, 170, 203, 247, 227, 255, 32, 35, 1, 33, 94, 170, 116, 152, 201, ++ 247, 123, 248, 114, 155, 122, 170, 211, 24, 19, 248, 145, 44, 157, 248, ++ 151, 49, 83, 64, 218, 7, 26, 213, 227, 105, 1, 33, 0, 34, 96, 106, 200, ++ 247, 71, 255, 1, 33, 2, 70, 121, 144, 32, 105, 203, 247, 176, 251, 116, ++ 152, 121, 153, 2, 70, 0, 35, 201, 247, 83, 249, 215, 248, 144, 0, 115, ++ 153, 116, 154, 203, 247, 204, 255, 121, 168, 201, 247, 133, 248, 32, ++ 104, 102, 169, 32, 34, 238, 243, 74, 240, 32, 35, 1, 33, 102, 170, 232, ++ 111, 200, 247, 232, 255, 32, 104, 70, 169, 32, 34, 238, 243, 63, 240, ++ 96, 106, 1, 33, 0, 34, 32, 35, 200, 247, 28, 255, 117, 144, 0, 179, ++ 1, 33, 70, 170, 32, 35, 200, 247, 214, 255, 99, 105, 104, 111, 233, ++ 111, 117, 154, 201, 247, 14, 249, 213, 248, 152, 32, 213, 248, 144, ++ 0, 117, 153, 204, 247, 1, 254, 213, 248, 152, 0, 0, 36, 1, 70, 204, ++ 247, 42, 250, 213, 248, 152, 0, 5, 241, 128, 1, 5, 241, 132, 2, 203, ++ 247, 128, 255, 1, 224, 79, 240, 255, 52, 117, 168, 201, 247, 71, 248, ++ 120, 168, 201, 247, 68, 248, 119, 168, 201, 247, 65, 248, 113, 168, ++ 201, 247, 62, 248, 118, 168, 203, 247, 48, 255, 0, 33, 32, 34, 70, 168, ++ 199, 243, 86, 243, 0, 33, 80, 34, 42, 168, 199, 243, 81, 243, 0, 33, ++ 32, 34, 78, 168, 199, 243, 76, 243, 0, 33, 32, 34, 86, 168, 199, 243, ++ 71, 243, 102, 168, 0, 33, 32, 34, 199, 243, 66, 243, 32, 70, 123, 176, ++ 189, 232, 240, 143, 164, 88, 4, 0, 89, 188, 3, 0, 128, 104, 1, 43, 0, ++ 153, 18, 88, 13, 209, 57, 185, 178, 248, 112, 0, 8, 177, 2, 48, 0, 224, ++ 2, 32, 96, 48, 112, 71, 77, 41, 12, 191, 2, 32, 0, 32, 112, 71, 2, 43, ++ 12, 191, 34, 32, 0, 32, 112, 71, 112, 181, 129, 104, 182, 176, 1, 43, ++ 58, 158, 59, 156, 85, 88, 48, 209, 14, 177, 77, 46, 119, 209, 181, 248, ++ 102, 32, 54, 169, 33, 248, 4, 45, 32, 70, 2, 34, 197, 247, 142, 255, ++ 2, 52, 0, 46, 107, 209, 181, 248, 112, 32, 50, 177, 32, 70, 233, 110, ++ 197, 247, 132, 255, 181, 248, 112, 48, 228, 24, 34, 70, 1, 33, 32, 35, ++ 104, 111, 200, 247, 172, 255, 4, 241, 32, 2, 1, 33, 32, 35, 213, 248, ++ 128, 0, 200, 247, 164, 255, 4, 241, 64, 2, 213, 248, 132, 0, 1, 33, ++ 32, 35, 200, 247, 156, 255, 96, 52, 73, 224, 2, 43, 71, 209, 181, 248, ++ 98, 32, 54, 169, 33, 248, 2, 45, 32, 70, 26, 70, 197, 247, 94, 255, ++ 189, 248, 214, 48, 54, 174, 38, 248, 204, 61, 1, 33, 13, 241, 14, 2, ++ 32, 35, 104, 111, 200, 247, 131, 255, 1, 33, 13, 241, 46, 2, 32, 35, ++ 213, 248, 128, 0, 200, 247, 123, 255, 1, 33, 13, 241, 78, 2, 32, 35, ++ 213, 248, 132, 0, 200, 247, 115, 255, 1, 33, 13, 241, 110, 2, 32, 35, ++ 168, 111, 200, 247, 108, 255, 1, 33, 13, 241, 142, 2, 32, 35, 213, 248, ++ 136, 0, 200, 247, 100, 255, 1, 33, 13, 241, 174, 2, 32, 35, 213, 248, ++ 140, 0, 200, 247, 92, 255, 163, 28, 0, 147, 52, 171, 1, 147, 5, 241, ++ 24, 0, 32, 33, 50, 70, 194, 35, 202, 243, 70, 244, 34, 52, 32, 70, 54, ++ 176, 112, 189, 8, 181, 88, 177, 90, 177, 129, 104, 82, 88, 66, 177, ++ 2, 241, 8, 1, 24, 70, 16, 34, 197, 247, 16, 255, 1, 34, 0, 224, 2, 70, ++ 16, 70, 8, 189, 45, 233, 240, 79, 146, 70, 209, 248, 244, 32, 137, 176, ++ 178, 248, 98, 32, 18, 158, 194, 243, 64, 18, 7, 146, 130, 104, 29, 70, ++ 180, 88, 66, 104, 7, 70, 81, 248, 2, 128, 148, 248, 88, 32, 137, 70, ++ 221, 248, 76, 176, 20, 155, 3, 42, 0, 242, 224, 129, 223, 232, 18, 240, ++ 4, 0, 111, 0, 254, 0, 166, 1, 1, 45, 53, 209, 187, 248, 4, 32, 7, 43, ++ 145, 178, 140, 191, 187, 248, 6, 0, 255, 32, 0, 41, 64, 240, 153, 128, ++ 19, 40, 16, 208, 3, 32, 1, 34, 77, 35, 141, 232, 13, 0, 7, 154, 3, 145, ++ 4, 145, 5, 146, 72, 70, 6, 241, 20, 1, 82, 70, 51, 70, 217, 247, 46, ++ 249, 133, 224, 164, 248, 96, 32, 164, 248, 98, 32, 164, 248, 100, 32, ++ 32, 70, 65, 70, 6, 147, 255, 247, 138, 253, 6, 155, 0, 40, 119, 209, ++ 1, 147, 56, 70, 73, 70, 82, 70, 51, 70, 205, 248, 0, 176, 255, 247, ++ 170, 249, 124, 224, 0, 45, 64, 240, 159, 129, 164, 248, 96, 80, 164, ++ 248, 98, 80, 164, 248, 100, 80, 32, 70, 65, 70, 255, 247, 112, 253, ++ 0, 40, 94, 209, 3, 35, 79, 240, 1, 11, 141, 232, 8, 8, 7, 155, 6, 241, ++ 20, 1, 5, 147, 82, 70, 51, 70, 72, 70, 2, 149, 3, 149, 4, 149, 217, ++ 247, 245, 248, 218, 248, 0, 48, 161, 110, 196, 248, 89, 48, 186, 248, ++ 4, 48, 164, 248, 93, 48, 59, 104, 216, 248, 136, 32, 152, 104, 43, 70, ++ 220, 243, 63, 246, 132, 248, 88, 176, 113, 225, 1, 45, 104, 209, 2, ++ 104, 161, 110, 144, 104, 6, 147, 220, 243, 90, 246, 180, 248, 112, 32, ++ 6, 155, 50, 177, 224, 110, 206, 247, 12, 254, 0, 33, 6, 155, 164, 248, ++ 112, 16, 187, 248, 4, 80, 7, 43, 140, 191, 187, 248, 6, 32, 255, 34, ++ 76, 45, 21, 209, 0, 37, 64, 70, 33, 70, 90, 70, 164, 248, 96, 80, 255, ++ 247, 62, 248, 7, 154, 3, 35, 79, 240, 1, 12, 141, 232, 8, 16, 2, 149, ++ 3, 149, 4, 149, 5, 146, 72, 70, 6, 241, 20, 1, 172, 224, 77, 45, 8, ++ 209, 180, 248, 102, 48, 147, 66, 98, 209, 0, 35, 132, 248, 88, 48, 2, ++ 37, 52, 225, 0, 45, 91, 209, 19, 42, 13, 209, 1, 147, 56, 70, 73, 70, ++ 82, 70, 51, 70, 205, 248, 0, 176, 255, 247, 170, 249, 0, 40, 20, 191, ++ 2, 37, 0, 37, 34, 225, 180, 248, 96, 48, 5, 43, 0, 242, 20, 129, 3, ++ 32, 1, 35, 79, 240, 77, 14, 141, 232, 9, 64, 7, 155, 72, 70, 5, 147, ++ 6, 241, 20, 1, 51, 70, 82, 70, 3, 149, 4, 149, 217, 247, 125, 248, 180, ++ 248, 96, 48, 1, 51, 164, 248, 96, 48, 119, 224, 171, 30, 1, 43, 79, ++ 240, 0, 3, 0, 242, 250, 128, 180, 248, 96, 32, 5, 42, 195, 216, 3, 45, ++ 9, 209, 1, 50, 164, 248, 96, 32, 2, 104, 161, 110, 144, 104, 216, 248, ++ 136, 32, 220, 243, 187, 245, 0, 37, 3, 33, 1, 35, 141, 232, 42, 0, 7, ++ 153, 3, 149, 5, 145, 4, 149, 72, 70, 6, 241, 20, 1, 82, 70, 208, 224, ++ 1, 45, 90, 209, 2, 104, 187, 248, 4, 80, 144, 104, 161, 110, 6, 147, ++ 220, 243, 201, 245, 6, 155, 69, 177, 59, 104, 161, 110, 152, 104, 216, ++ 248, 136, 32, 0, 35, 220, 243, 153, 245, 202, 224, 180, 248, 96, 32, ++ 5, 42, 0, 242, 191, 128, 7, 43, 136, 191, 187, 248, 6, 48, 180, 248, ++ 102, 16, 152, 191, 255, 35, 153, 66, 64, 240, 187, 128, 180, 248, 98, ++ 48, 1, 50, 164, 248, 96, 32, 1, 51, 7, 154, 164, 248, 98, 48, 6, 241, ++ 20, 12, 1, 35, 0, 37, 97, 70, 79, 240, 3, 11, 1, 147, 5, 146, 51, 70, ++ 72, 70, 82, 70, 205, 248, 24, 192, 205, 248, 0, 176, 2, 149, 3, 149, ++ 4, 149, 217, 247, 16, 248, 2, 35, 1, 147, 221, 248, 24, 192, 7, 155, ++ 205, 248, 0, 176, 2, 149, 3, 149, 4, 149, 5, 147, 72, 70, 97, 70, 82, ++ 70, 51, 70, 216, 247, 255, 255, 59, 104, 161, 110, 152, 104, 216, 248, ++ 136, 32, 43, 70, 220, 243, 81, 245, 133, 224, 2, 45, 26, 209, 39, 43, ++ 126, 217, 64, 70, 33, 70, 90, 70, 255, 247, 184, 249, 5, 70, 0, 40, ++ 121, 208, 59, 104, 79, 240, 255, 49, 152, 104, 164, 248, 98, 16, 161, ++ 110, 220, 243, 97, 245, 64, 70, 254, 247, 51, 255, 3, 35, 132, 248, ++ 88, 48, 1, 37, 104, 224, 3, 45, 79, 240, 0, 11, 95, 209, 180, 248, 96, ++ 48, 5, 43, 2, 217, 132, 248, 88, 176, 38, 231, 1, 51, 164, 248, 96, ++ 48, 180, 248, 98, 48, 7, 154, 1, 51, 164, 248, 98, 48, 2, 35, 1, 147, ++ 5, 146, 6, 241, 20, 1, 82, 70, 51, 70, 72, 70, 0, 149, 205, 248, 8, ++ 176, 205, 248, 12, 176, 205, 248, 16, 176, 216, 247, 180, 255, 59, 104, ++ 161, 110, 152, 104, 216, 248, 136, 32, 91, 70, 220, 243, 6, 245, 53, ++ 224, 2, 45, 42, 209, 180, 248, 96, 32, 5, 42, 3, 217, 0, 35, 132, 248, ++ 88, 48, 48, 224, 39, 43, 43, 217, 64, 70, 33, 70, 90, 70, 255, 247, ++ 153, 249, 56, 179, 180, 248, 96, 48, 7, 153, 1, 51, 164, 248, 96, 48, ++ 79, 240, 255, 51, 164, 248, 98, 48, 3, 35, 141, 232, 40, 0, 0, 37, 5, ++ 145, 2, 149, 3, 149, 4, 149, 72, 70, 6, 241, 20, 1, 9, 241, 194, 2, ++ 51, 70, 216, 247, 127, 255, 13, 224, 3, 45, 79, 240, 0, 5, 9, 209, 132, ++ 248, 88, 80, 207, 230, 29, 70, 4, 224, 93, 70, 2, 224, 0, 37, 0, 224, ++ 5, 70, 40, 70, 9, 176, 189, 232, 240, 143, 240, 181, 4, 105, 3, 70, ++ 39, 104, 133, 176, 215, 248, 80, 8, 33, 70, 130, 104, 158, 88, 0, 147, ++ 6, 241, 89, 5, 0, 35, 1, 147, 2, 147, 42, 70, 3, 35, 255, 247, 233, ++ 253, 2, 40, 12, 209, 215, 248, 80, 8, 49, 70, 254, 247, 150, 254, 3, ++ 35, 0, 147, 32, 70, 1, 33, 42, 70, 16, 35, 229, 247, 205, 252, 5, 176, ++ 240, 189, 45, 233, 255, 71, 7, 70, 138, 70, 153, 70, 208, 248, 0, 128, ++ 20, 70, 42, 179, 131, 104, 0, 37, 214, 88, 216, 248, 8, 0, 177, 110, ++ 220, 243, 182, 244, 134, 248, 88, 80, 141, 232, 48, 0, 2, 149, 216, ++ 248, 80, 8, 81, 70, 74, 70, 43, 70, 255, 247, 187, 253, 64, 185, 32, ++ 70, 19, 33, 45, 240, 115, 223, 32, 70, 12, 33, 46, 240, 203, 217, 9, ++ 224, 2, 40, 7, 209, 56, 70, 49, 70, 254, 247, 95, 254, 40, 70, 2, 224, ++ 16, 70, 0, 224, 1, 32, 4, 176, 189, 232, 240, 135, 45, 233, 240, 79, ++ 137, 176, 152, 70, 7, 104, 18, 155, 6, 70, 7, 147, 59, 104, 13, 70, ++ 147, 248, 102, 49, 147, 70, 0, 43, 93, 208, 184, 248, 0, 48, 2, 241, ++ 10, 10, 5, 147, 184, 248, 4, 48, 56, 70, 82, 70, 6, 147, 184, 248, 2, ++ 144, 0, 240, 89, 252, 5, 155, 4, 70, 3, 43, 75, 209, 185, 241, 1, 15, ++ 3, 208, 185, 241, 2, 15, 69, 209, 29, 224, 56, 185, 56, 70, 41, 70, ++ 82, 70, 0, 240, 1, 253, 4, 70, 0, 40, 59, 208, 7, 155, 141, 232, 16, ++ 1, 2, 147, 215, 248, 80, 8, 1, 35, 41, 70, 11, 241, 16, 2, 255, 247, ++ 102, 253, 2, 40, 45, 209, 179, 104, 48, 70, 225, 88, 254, 247, 19, 254, ++ 3, 35, 21, 224, 0, 40, 36, 208, 7, 155, 141, 232, 1, 1, 2, 147, 215, ++ 248, 80, 8, 41, 70, 11, 241, 16, 2, 75, 70, 255, 247, 79, 253, 2, 40, ++ 9, 209, 179, 104, 48, 70, 225, 88, 254, 247, 252, 253, 5, 155, 18, 147, ++ 40, 70, 1, 33, 5, 224, 1, 40, 10, 209, 5, 155, 40, 70, 18, 147, 0, 33, ++ 6, 155, 82, 70, 9, 176, 189, 232, 240, 79, 229, 247, 41, 188, 9, 176, ++ 189, 232, 240, 143, 192, 121, 1, 40, 5, 217, 160, 241, 4, 3, 88, 66, ++ 64, 235, 3, 0, 112, 71, 1, 32, 112, 71, 55, 181, 0, 35, 1, 147, 7, 155, ++ 4, 70, 3, 43, 21, 70, 4, 217, 1, 168, 6, 153, 4, 34, 197, 247, 38, 252, ++ 8, 45, 2, 208, 9, 45, 11, 209, 4, 224, 180, 248, 10, 34, 8, 155, 26, ++ 96, 3, 224, 189, 248, 4, 48, 164, 248, 10, 50, 0, 32, 1, 224, 111, 240, ++ 22, 0, 62, 189, 0, 0, 45, 233, 240, 65, 144, 248, 14, 50, 134, 176, ++ 4, 70, 208, 248, 36, 130, 83, 177, 144, 249, 224, 81, 208, 248, 20, ++ 50, 1, 61, 36, 34, 2, 251, 5, 53, 144, 249, 225, 113, 3, 224, 208, 248, ++ 20, 82, 208, 248, 16, 114, 0, 38, 17, 224, 11, 75, 160, 104, 0, 147, ++ 1, 147, 0, 35, 2, 147, 3, 147, 4, 147, 43, 104, 65, 70, 42, 29, 217, ++ 247, 170, 250, 148, 248, 14, 50, 3, 185, 36, 53, 1, 54, 190, 66, 235, ++ 219, 6, 176, 189, 232, 240, 129, 0, 191, 236, 125, 135, 0, 115, 181, ++ 4, 70, 128, 104, 243, 243, 147, 240, 160, 104, 237, 243, 194, 240, 160, ++ 104, 0, 37, 176, 248, 70, 20, 241, 243, 92, 245, 163, 104, 211, 248, ++ 104, 50, 88, 89, 56, 177, 131, 121, 43, 185, 3, 122, 27, 177, 3, 124, ++ 11, 185, 237, 243, 49, 246, 4, 53, 32, 45, 239, 209, 0, 33, 10, 70, ++ 11, 70, 160, 104, 23, 240, 190, 217, 3, 37, 1, 33, 0, 35, 160, 104, ++ 79, 244, 128, 98, 0, 149, 238, 243, 187, 243, 0, 33, 10, 70, 11, 70, ++ 160, 104, 0, 149, 23, 240, 242, 217, 163, 104, 0, 34, 131, 248, 13, ++ 34, 160, 104, 212, 247, 162, 255, 160, 104, 237, 243, 16, 240, 163, ++ 104, 147, 248, 116, 34, 209, 7, 13, 213, 27, 106, 24, 105, 241, 247, ++ 83, 249, 160, 104, 243, 243, 216, 242, 163, 104, 147, 248, 116, 34, ++ 34, 240, 1, 2, 131, 248, 116, 34, 0, 38, 163, 104, 211, 248, 104, 50, ++ 157, 89, 0, 45, 57, 208, 170, 121, 0, 42, 54, 209, 213, 248, 4, 49, ++ 89, 108, 33, 240, 1, 1, 89, 100, 147, 248, 118, 16, 1, 41, 8, 191, 131, ++ 248, 118, 32, 43, 122, 67, 179, 213, 248, 4, 49, 26, 120, 1, 42, 1, ++ 209, 90, 127, 10, 179, 27, 122, 251, 177, 160, 104, 3, 104, 147, 248, ++ 60, 48, 59, 177, 213, 248, 40, 51, 35, 177, 26, 137, 176, 248, 70, 52, ++ 154, 66, 18, 209, 41, 70, 1, 34, 5, 240, 245, 217, 1, 70, 72, 177, 180, ++ 248, 228, 33, 213, 248, 4, 49, 82, 8, 218, 98, 40, 70, 250, 247, 242, ++ 253, 2, 224, 40, 70, 215, 247, 29, 252, 4, 54, 32, 46, 188, 209, 160, ++ 104, 242, 243, 168, 242, 160, 104, 2, 176, 189, 232, 112, 64, 240, 243, ++ 132, 181, 248, 181, 131, 104, 4, 70, 26, 104, 6, 104, 146, 248, 173, ++ 112, 71, 177, 211, 248, 92, 1, 179, 248, 72, 20, 18, 240, 40, 223, 7, ++ 28, 24, 191, 1, 39, 163, 104, 211, 248, 40, 53, 0, 43, 59, 209, 0, 47, ++ 57, 209, 179, 136, 67, 240, 32, 3, 179, 128, 163, 104, 211, 248, 104, ++ 34, 213, 89, 21, 179, 170, 121, 2, 187, 213, 248, 4, 33, 81, 108, 65, ++ 240, 1, 1, 81, 100, 41, 122, 193, 177, 18, 122, 178, 185, 26, 104, 146, ++ 248, 60, 32, 58, 177, 213, 248, 40, 35, 34, 177, 18, 137, 179, 248, ++ 70, 52, 154, 66, 10, 209, 40, 70, 1, 33, 215, 247, 212, 251, 213, 248, ++ 4, 49, 26, 122, 18, 177, 1, 34, 131, 248, 118, 32, 4, 55, 32, 47, 212, ++ 209, 160, 104, 238, 243, 212, 245, 163, 104, 147, 248, 36, 50, 27, 185, ++ 179, 136, 35, 240, 32, 3, 179, 128, 160, 104, 242, 243, 77, 242, 176, ++ 136, 16, 240, 32, 0, 9, 208, 163, 104, 212, 248, 248, 17, 152, 104, ++ 148, 248, 64, 34, 0, 35, 220, 243, 156, 242, 1, 32, 248, 189, 45, 233, ++ 240, 67, 5, 104, 208, 248, 8, 144, 171, 136, 4, 70, 67, 244, 0, 99, ++ 208, 248, 36, 98, 135, 176, 171, 128, 217, 248, 16, 0, 23, 240, 245, ++ 216, 216, 177, 171, 121, 163, 177, 160, 104, 208, 248, 16, 19, 231, ++ 243, 161, 247, 32, 70, 4, 33, 43, 240, 33, 222, 4, 35, 0, 147, 160, ++ 104, 0, 35, 49, 70, 26, 34, 1, 147, 2, 147, 3, 147, 4, 147, 231, 243, ++ 193, 247, 163, 104, 152, 104, 207, 247, 162, 255, 130, 225, 148, 249, ++ 224, 49, 2, 51, 3, 209, 255, 35, 132, 248, 224, 49, 122, 225, 163, 104, ++ 27, 104, 27, 126, 0, 43, 0, 240, 117, 129, 171, 136, 19, 244, 132, 111, ++ 8, 208, 35, 244, 132, 99, 171, 128, 32, 70, 44, 240, 26, 218, 0, 40, ++ 64, 240, 104, 129, 171, 136, 26, 7, 68, 191, 35, 240, 8, 3, 171, 128, ++ 148, 248, 224, 49, 1, 51, 132, 248, 224, 49, 163, 105, 4, 235, 67, 3, ++ 158, 139, 163, 104, 49, 70, 163, 248, 48, 99, 211, 248, 92, 1, 18, 240, ++ 114, 222, 72, 185, 163, 104, 49, 70, 211, 248, 92, 1, 18, 240, 253, ++ 223, 16, 177, 148, 248, 226, 129, 1, 224, 79, 240, 1, 8, 148, 249, 224, ++ 49, 79, 250, 136, 242, 147, 66, 101, 221, 1, 50, 147, 66, 3, 209, 171, ++ 136, 35, 240, 16, 3, 171, 128, 212, 248, 220, 17, 163, 105, 1, 57, 139, ++ 66, 188, 191, 4, 235, 67, 3, 223, 139, 171, 136, 168, 191, 255, 39, ++ 19, 240, 128, 1, 28, 191, 212, 248, 240, 17, 1, 49, 196, 248, 240, 17, ++ 148, 249, 224, 17, 145, 66, 54, 209, 180, 248, 228, 33, 0, 42, 50, 208, ++ 255, 47, 64, 208, 27, 4, 48, 212, 212, 248, 240, 33, 212, 248, 236, ++ 49, 154, 66, 13, 218, 163, 104, 49, 70, 211, 248, 92, 1, 18, 240, 44, ++ 222, 48, 185, 163, 104, 57, 70, 211, 248, 92, 1, 18, 240, 37, 222, 224, ++ 177, 32, 70, 255, 247, 77, 254, 170, 136, 18, 244, 0, 83, 2, 208, 212, ++ 248, 60, 114, 118, 224, 34, 240, 128, 2, 170, 128, 162, 104, 212, 248, ++ 248, 17, 144, 104, 180, 248, 228, 33, 220, 243, 215, 241, 171, 136, ++ 111, 234, 67, 67, 111, 234, 83, 67, 230, 224, 255, 47, 13, 208, 163, ++ 105, 62, 70, 1, 51, 163, 97, 163, 104, 163, 248, 48, 115, 0, 35, 132, ++ 248, 224, 49, 171, 136, 91, 4, 91, 12, 171, 128, 148, 249, 224, 49, ++ 251, 185, 171, 136, 24, 6, 25, 212, 163, 104, 179, 248, 72, 36, 179, ++ 248, 70, 4, 144, 66, 18, 209, 200, 243, 14, 240, 176, 66, 14, 208, 32, ++ 70, 43, 240, 69, 223, 32, 70, 255, 247, 172, 254, 0, 40, 64, 240, 190, ++ 128, 32, 70, 44, 240, 106, 217, 0, 40, 64, 240, 184, 128, 1, 35, 132, ++ 248, 224, 49, 148, 249, 224, 49, 0, 43, 38, 221, 79, 250, 136, 248, ++ 67, 69, 34, 220, 107, 106, 217, 7, 10, 212, 48, 70, 199, 243, 204, 247, ++ 163, 104, 7, 70, 179, 248, 72, 4, 199, 243, 198, 247, 135, 66, 15, 208, ++ 160, 104, 242, 243, 129, 246, 32, 70, 43, 240, 26, 223, 160, 104, 213, ++ 247, 247, 252, 160, 104, 49, 70, 241, 243, 73, 243, 160, 104, 236, 243, ++ 42, 246, 32, 70, 49, 70, 43, 240, 146, 221, 137, 224, 171, 136, 32, ++ 70, 67, 244, 0, 83, 171, 128, 255, 247, 208, 253, 0, 39, 171, 136, 72, ++ 70, 35, 240, 128, 3, 171, 128, 79, 240, 255, 51, 163, 97, 33, 70, 0, ++ 38, 44, 240, 29, 217, 174, 113, 163, 104, 50, 70, 27, 106, 2, 33, 24, ++ 105, 240, 247, 37, 255, 32, 70, 44, 240, 254, 216, 160, 104, 242, 243, ++ 245, 240, 160, 104, 239, 243, 154, 244, 160, 104, 239, 243, 241, 244, ++ 163, 104, 26, 104, 146, 248, 175, 32, 34, 177, 211, 248, 136, 1, 49, ++ 70, 243, 243, 213, 246, 163, 104, 27, 104, 147, 248, 79, 32, 146, 7, ++ 6, 208, 147, 249, 82, 48, 27, 177, 32, 70, 0, 33, 43, 240, 172, 219, ++ 32, 70, 57, 70, 43, 240, 212, 220, 5, 241, 12, 0, 204, 247, 158, 249, ++ 0, 179, 171, 104, 2, 43, 29, 209, 0, 38, 163, 104, 211, 248, 104, 34, ++ 144, 89, 160, 177, 130, 121, 146, 185, 2, 122, 130, 177, 208, 248, 252, ++ 32, 106, 177, 146, 248, 93, 16, 81, 177, 146, 248, 60, 16, 57, 177, ++ 81, 108, 41, 185, 1, 33, 81, 100, 211, 248, 16, 19, 3, 240, 7, 217, ++ 4, 54, 32, 46, 226, 209, 160, 104, 0, 38, 208, 248, 16, 19, 231, 243, ++ 36, 246, 163, 104, 211, 248, 104, 50, 152, 89, 112, 177, 131, 121, 99, ++ 185, 3, 122, 83, 177, 3, 124, 67, 177, 208, 248, 4, 49, 26, 120, 2, ++ 42, 3, 209, 27, 122, 11, 185, 250, 247, 212, 251, 4, 54, 32, 46, 232, ++ 209, 171, 136, 35, 244, 0, 83, 171, 128, 171, 136, 35, 244, 0, 99, 171, ++ 128, 7, 176, 189, 232, 240, 131, 17, 177, 8, 70, 206, 247, 189, 184, ++ 112, 71, 56, 181, 0, 35, 129, 104, 4, 70, 131, 96, 4, 224, 13, 104, ++ 32, 70, 255, 247, 241, 255, 41, 70, 0, 41, 248, 209, 56, 189, 24, 177, ++ 3, 104, 152, 104, 0, 177, 0, 104, 112, 71, 3, 70, 138, 0, 7, 224, 4, ++ 216, 24, 104, 208, 248, 104, 2, 128, 88, 32, 185, 1, 49, 4, 50, 7, 41, ++ 245, 221, 0, 32, 112, 71, 48, 181, 208, 248, 164, 33, 3, 105, 34, 244, ++ 0, 82, 25, 104, 192, 248, 164, 33, 145, 248, 33, 66, 20, 177, 156, 121, ++ 0, 44, 56, 208, 18, 240, 1, 15, 53, 209, 69, 104, 27, 76, 44, 64, 0, ++ 44, 48, 208, 26, 76, 44, 64, 25, 77, 172, 66, 43, 209, 144, 248, 36, ++ 64, 20, 240, 18, 15, 38, 208, 211, 248, 72, 67, 28, 177, 164, 123, 20, ++ 240, 1, 15, 31, 209, 209, 248, 8, 66, 228, 185, 179, 248, 90, 64, 28, ++ 185, 28, 109, 20, 240, 1, 15, 17, 208, 28, 109, 64, 242, 55, 19, 35, ++ 64, 131, 177, 131, 108, 91, 7, 13, 213, 195, 104, 91, 177, 27, 122, ++ 4, 43, 8, 209, 145, 248, 148, 50, 43, 185, 35, 7, 3, 212, 66, 244, 0, ++ 82, 192, 248, 164, 33, 48, 189, 0, 191, 64, 0, 1, 0, 64, 0, 4, 0, 208, ++ 248, 36, 1, 48, 181, 128, 105, 20, 121, 9, 24, 208, 120, 81, 248, 35, ++ 48, 68, 64, 80, 121, 68, 64, 8, 122, 148, 251, 240, 245, 0, 251, 21, ++ 64, 83, 248, 32, 48, 131, 177, 27, 104, 14, 224, 24, 104, 84, 136, 193, ++ 138, 21, 136, 76, 64, 129, 138, 105, 64, 12, 67, 149, 136, 1, 139, 105, ++ 64, 33, 67, 137, 178, 25, 177, 91, 104, 0, 43, 238, 209, 24, 70, 48, ++ 189, 112, 181, 12, 104, 13, 70, 6, 70, 16, 34, 8, 70, 0, 33, 198, 243, ++ 252, 243, 44, 96, 32, 70, 0, 33, 242, 104, 198, 243, 246, 243, 4, 245, ++ 20, 115, 196, 248, 252, 48, 4, 245, 28, 115, 37, 96, 196, 248, 52, 49, ++ 112, 189, 56, 181, 5, 70, 12, 70, 23, 224, 32, 104, 40, 177, 3, 104, ++ 155, 104, 3, 177, 27, 104, 35, 96, 56, 189, 34, 122, 98, 177, 147, 249, ++ 68, 16, 40, 70, 1, 49, 255, 247, 77, 255, 96, 96, 40, 177, 171, 105, ++ 192, 24, 195, 104, 35, 96, 0, 224, 98, 96, 99, 104, 0, 43, 228, 209, ++ 35, 96, 24, 70, 56, 189, 0, 177, 0, 104, 192, 104, 112, 71, 56, 181, ++ 133, 105, 12, 70, 8, 104, 1, 34, 45, 240, 207, 218, 96, 89, 24, 177, ++ 189, 232, 56, 64, 205, 247, 214, 191, 56, 189, 3, 106, 91, 104, 255, ++ 247, 134, 191, 255, 247, 132, 191, 45, 233, 240, 71, 221, 248, 32, 160, ++ 0, 37, 7, 70, 14, 70, 144, 70, 153, 70, 202, 248, 0, 80, 215, 248, 104, ++ 50, 92, 89, 212, 177, 115, 136, 180, 248, 196, 32, 180, 248, 194, 16, ++ 90, 64, 51, 136, 75, 64, 26, 67, 180, 248, 198, 16, 179, 136, 75, 64, ++ 19, 67, 155, 178, 83, 185, 56, 70, 33, 70, 66, 70, 75, 70, 255, 247, ++ 95, 255, 24, 177, 202, 248, 0, 64, 189, 232, 240, 135, 4, 53, 32, 45, ++ 221, 209, 0, 32, 189, 232, 240, 135, 45, 233, 248, 67, 153, 70, 3, 104, ++ 208, 248, 36, 65, 219, 105, 23, 70, 27, 105, 34, 137, 5, 70, 154, 66, ++ 136, 70, 12, 218, 202, 243, 160, 244, 43, 104, 219, 105, 211, 248, 252, ++ 48, 152, 66, 4, 217, 32, 70, 44, 240, 105, 223, 6, 70, 120, 185, 40, ++ 70, 45, 240, 106, 217, 1, 70, 0, 40, 51, 208, 40, 70, 45, 240, 234, ++ 222, 0, 40, 46, 208, 32, 70, 44, 240, 89, 223, 6, 70, 72, 179, 35, 137, ++ 73, 70, 1, 51, 35, 129, 52, 104, 50, 70, 196, 248, 16, 128, 56, 104, ++ 96, 97, 187, 136, 40, 70, 35, 131, 2, 35, 45, 240, 1, 217, 7, 70, 40, ++ 177, 33, 70, 40, 70, 45, 240, 205, 222, 0, 36, 18, 224, 40, 70, 49, ++ 70, 66, 70, 45, 240, 86, 216, 40, 70, 33, 70, 217, 248, 4, 32, 67, 70, ++ 45, 240, 9, 216, 39, 97, 32, 70, 65, 70, 45, 240, 222, 219, 0, 224, ++ 4, 70, 32, 70, 189, 232, 248, 131, 45, 233, 240, 65, 31, 70, 19, 120, ++ 5, 70, 219, 7, 14, 70, 20, 70, 24, 212, 208, 248, 104, 6, 27, 240, 70, ++ 223, 1, 40, 21, 208, 4, 40, 19, 208, 40, 70, 49, 70, 34, 70, 59, 70, ++ 255, 247, 228, 254, 104, 185, 10, 55, 85, 248, 39, 48, 40, 70, 49, 70, ++ 34, 70, 189, 232, 240, 65, 255, 247, 133, 191, 0, 32, 189, 232, 240, ++ 129, 0, 32, 189, 232, 240, 129, 255, 247, 214, 191, 3, 106, 91, 104, ++ 255, 247, 210, 191, 195, 104, 200, 88, 112, 71, 4, 32, 112, 71, 208, ++ 248, 4, 49, 1, 51, 192, 248, 4, 49, 112, 71, 208, 248, 4, 49, 1, 59, ++ 192, 248, 4, 49, 112, 71, 3, 105, 154, 121, 26, 185, 211, 248, 0, 49, ++ 24, 105, 112, 71, 45, 240, 125, 154, 208, 248, 96, 49, 112, 181, 220, ++ 104, 13, 70, 225, 66, 8, 208, 142, 104, 22, 240, 8, 6, 4, 209, 8, 89, ++ 16, 177, 205, 247, 239, 254, 46, 81, 112, 189, 208, 248, 96, 49, 45, ++ 233, 240, 65, 222, 104, 211, 248, 16, 128, 12, 70, 129, 177, 141, 104, ++ 21, 240, 8, 5, 15, 209, 64, 70, 205, 247, 218, 254, 7, 70, 104, 177, ++ 41, 70, 66, 70, 198, 243, 186, 242, 167, 81, 40, 70, 189, 232, 240, ++ 129, 8, 70, 189, 232, 240, 129, 0, 32, 189, 232, 240, 129, 111, 240, ++ 26, 0, 189, 232, 240, 129, 56, 181, 4, 70, 8, 70, 13, 70, 255, 247, ++ 220, 254, 144, 177, 64, 108, 9, 75, 3, 64, 0, 240, 64, 112, 19, 185, ++ 176, 241, 128, 127, 3, 209, 0, 48, 24, 191, 1, 32, 56, 189, 227, 104, ++ 232, 88, 189, 232, 56, 64, 253, 247, 69, 190, 56, 189, 0, 191, 255, ++ 0, 0, 192, 112, 181, 20, 70, 18, 136, 30, 70, 4, 157, 255, 247, 140, ++ 255, 48, 177, 33, 70, 50, 70, 43, 70, 189, 232, 112, 64, 253, 247, 59, ++ 190, 112, 189, 112, 181, 20, 70, 30, 70, 157, 248, 16, 80, 255, 247, ++ 124, 255, 48, 177, 33, 70, 50, 70, 43, 70, 189, 232, 112, 64, 253, 247, ++ 219, 188, 112, 189, 128, 104, 253, 247, 199, 189, 45, 233, 240, 71, ++ 20, 70, 82, 136, 154, 70, 189, 248, 32, 80, 157, 248, 36, 144, 157, ++ 248, 40, 128, 157, 248, 44, 112, 157, 248, 48, 96, 255, 247, 95, 255, ++ 96, 177, 33, 70, 82, 70, 43, 70, 205, 248, 32, 144, 205, 248, 36, 128, ++ 10, 151, 11, 150, 189, 232, 240, 71, 253, 247, 213, 188, 189, 232, 240, ++ 135, 128, 104, 253, 247, 167, 188, 56, 181, 20, 70, 29, 70, 255, 247, ++ 71, 255, 33, 70, 42, 70, 189, 232, 56, 64, 253, 247, 68, 186, 45, 233, ++ 247, 79, 221, 248, 48, 176, 154, 70, 221, 248, 52, 144, 221, 248, 56, ++ 128, 157, 248, 60, 112, 157, 248, 64, 96, 157, 248, 68, 80, 157, 248, ++ 72, 64, 1, 146, 255, 247, 45, 255, 221, 248, 4, 192, 82, 70, 97, 70, ++ 91, 70, 205, 248, 48, 144, 205, 248, 52, 128, 14, 151, 15, 150, 16, ++ 149, 17, 148, 3, 176, 189, 232, 240, 79, 253, 247, 45, 189, 45, 233, ++ 247, 79, 156, 70, 157, 248, 48, 48, 20, 70, 82, 136, 157, 248, 52, 144, ++ 141, 232, 8, 16, 157, 248, 56, 128, 157, 248, 60, 112, 157, 248, 64, ++ 96, 157, 248, 68, 80, 157, 248, 72, 160, 157, 248, 76, 176, 255, 247, ++ 2, 255, 221, 248, 4, 192, 0, 155, 33, 70, 98, 70, 205, 248, 48, 144, ++ 205, 248, 52, 128, 14, 151, 15, 150, 16, 149, 205, 248, 68, 160, 205, ++ 248, 72, 176, 3, 176, 189, 232, 240, 79, 253, 247, 180, 188, 16, 181, ++ 20, 70, 82, 136, 255, 247, 232, 254, 33, 70, 189, 232, 16, 64, 253, ++ 247, 10, 186, 45, 233, 240, 79, 139, 104, 149, 176, 26, 7, 5, 70, 12, ++ 70, 208, 248, 96, 145, 176, 248, 72, 132, 0, 241, 190, 128, 79, 104, ++ 62, 3, 9, 213, 8, 244, 96, 88, 184, 245, 192, 95, 12, 191, 79, 240, ++ 2, 8, 79, 240, 1, 8, 1, 224, 79, 240, 1, 8, 213, 248, 116, 36, 146, ++ 249, 19, 16, 72, 28, 7, 209, 23, 244, 128, 55, 13, 208, 19, 240, 128, ++ 7, 24, 191, 255, 39, 8, 224, 1, 41, 5, 209, 23, 244, 128, 55, 3, 208, ++ 195, 243, 192, 23, 0, 224, 0, 39, 149, 249, 32, 18, 1, 49, 11, 209, ++ 184, 241, 2, 15, 3, 240, 1, 6, 64, 240, 137, 128, 153, 7, 4, 213, 70, ++ 240, 2, 6, 246, 178, 0, 224, 0, 38, 213, 248, 160, 1, 33, 70, 56, 240, ++ 161, 220, 99, 104, 131, 70, 218, 3, 5, 213, 213, 248, 116, 52, 147, ++ 248, 123, 48, 0, 43, 77, 209, 217, 248, 12, 48, 84, 248, 3, 160, 186, ++ 241, 0, 15, 112, 208, 40, 34, 10, 168, 4, 241, 76, 1, 196, 247, 254, ++ 253, 43, 104, 147, 248, 79, 48, 155, 7, 32, 208, 35, 105, 211, 248, ++ 204, 48, 216, 4, 27, 212, 148, 248, 14, 49, 155, 185, 3, 224, 0, 35, ++ 141, 248, 62, 48, 11, 224, 213, 248, 116, 36, 147, 120, 1, 43, 246, ++ 208, 146, 248, 60, 32, 1, 42, 242, 208, 2, 43, 8, 209, 0, 35, 141, 248, ++ 63, 48, 4, 224, 148, 248, 15, 49, 0, 43, 232, 208, 235, 231, 10, 171, ++ 141, 232, 8, 1, 118, 178, 0, 35, 127, 178, 4, 147, 5, 147, 6, 147, 7, ++ 147, 8, 147, 9, 147, 2, 150, 3, 151, 217, 248, 8, 0, 81, 70, 34, 70, ++ 91, 70, 253, 247, 243, 253, 213, 248, 228, 6, 33, 70, 45, 240, 206, ++ 221, 41, 224, 34, 70, 1, 35, 213, 248, 116, 20, 145, 248, 123, 16, 153, ++ 66, 2, 216, 0, 33, 130, 248, 98, 16, 1, 51, 219, 178, 1, 50, 4, 43, ++ 241, 209, 79, 240, 2, 10, 213, 248, 116, 52, 147, 248, 123, 48, 179, ++ 235, 234, 15, 5, 220, 4, 241, 97, 0, 10, 241, 85, 1, 198, 243, 102, ++ 247, 10, 241, 1, 10, 186, 241, 18, 15, 237, 209, 140, 231, 19, 108, ++ 0, 43, 24, 191, 0, 38, 120, 231, 21, 176, 189, 232, 240, 143, 31, 181, ++ 4, 70, 1, 169, 208, 248, 36, 1, 0, 34, 45, 240, 116, 216, 2, 224, 32, ++ 70, 255, 247, 38, 255, 1, 169, 212, 248, 36, 1, 255, 247, 19, 253, 1, ++ 70, 0, 40, 244, 209, 212, 248, 228, 6, 45, 240, 146, 221, 31, 189, 48, ++ 181, 13, 70, 133, 176, 4, 70, 1, 169, 208, 248, 36, 1, 42, 70, 45, 240, ++ 89, 216, 2, 224, 32, 70, 255, 247, 11, 255, 1, 169, 212, 248, 36, 1, ++ 255, 247, 248, 252, 1, 70, 0, 40, 244, 209, 212, 248, 228, 6, 41, 70, ++ 45, 240, 134, 221, 5, 176, 48, 189, 48, 181, 133, 176, 4, 70, 10, 70, ++ 208, 248, 96, 81, 1, 169, 208, 248, 36, 1, 45, 240, 59, 216, 212, 248, ++ 36, 1, 1, 169, 255, 247, 222, 252, 32, 177, 235, 104, 192, 88, 253, ++ 247, 2, 249, 244, 231, 5, 176, 48, 189, 45, 233, 240, 65, 6, 157, 30, ++ 70, 7, 156, 8, 159, 255, 247, 191, 253, 49, 70, 42, 70, 35, 70, 6, 151, ++ 189, 232, 240, 65, 253, 247, 250, 189, 25, 177, 195, 104, 200, 88, 253, ++ 247, 59, 189, 112, 71, 8, 181, 255, 247, 174, 253, 189, 232, 8, 64, ++ 253, 247, 31, 190, 112, 181, 5, 104, 189, 248, 16, 64, 46, 104, 150, ++ 248, 213, 96, 86, 185, 149, 249, 23, 85, 181, 241, 255, 63, 3, 209, ++ 144, 248, 152, 3, 40, 177, 1, 224, 1, 45, 2, 209, 157, 248, 20, 0, 144, ++ 177, 73, 107, 1, 235, 194, 0, 81, 248, 50, 32, 147, 66, 6, 211, 7, 209, ++ 128, 136, 160, 66, 148, 191, 0, 32, 1, 32, 2, 224, 1, 32, 0, 224, 0, ++ 32, 192, 178, 112, 189, 209, 248, 224, 16, 82, 1, 138, 24, 17, 105, ++ 139, 66, 27, 211, 2, 209, 145, 138, 161, 66, 25, 216, 145, 105, 139, ++ 66, 6, 211, 7, 209, 144, 139, 160, 66, 52, 191, 0, 32, 1, 32, 2, 224, ++ 1, 32, 0, 224, 0, 32, 96, 177, 4, 240, 127, 4, 227, 8, 208, 92, 4, 240, ++ 7, 4, 32, 65, 0, 240, 1, 0, 112, 189, 1, 32, 112, 189, 1, 32, 112, 189, ++ 0, 0, 45, 233, 240, 79, 28, 70, 147, 248, 96, 176, 95, 104, 211, 104, ++ 173, 245, 17, 125, 6, 70, 5, 145, 145, 70, 21, 105, 51, 177, 27, 122, ++ 11, 43, 3, 209, 59, 120, 3, 240, 1, 3, 1, 224, 251, 120, 155, 9, 227, ++ 99, 148, 248, 44, 48, 73, 70, 0, 147, 48, 70, 42, 70, 227, 107, 26, ++ 240, 77, 217, 1, 70, 160, 99, 32, 177, 42, 109, 64, 242, 55, 19, 19, ++ 64, 43, 185, 48, 70, 33, 70, 74, 70, 46, 240, 140, 218, 229, 224, 144, ++ 249, 14, 32, 144, 249, 15, 48, 211, 24, 162, 104, 154, 66, 192, 240, ++ 221, 128, 162, 105, 19, 138, 19, 240, 8, 15, 13, 208, 0, 122, 11, 40, ++ 10, 209, 150, 248, 197, 5, 56, 177, 136, 121, 3, 40, 4, 216, 35, 240, ++ 8, 3, 27, 4, 27, 12, 19, 130, 11, 122, 4, 43, 90, 208, 11, 43, 0, 240, ++ 177, 128, 2, 43, 64, 240, 195, 128, 187, 120, 151, 248, 0, 160, 151, ++ 248, 6, 128, 67, 234, 10, 42, 123, 121, 79, 234, 8, 72, 72, 234, 3, ++ 40, 59, 121, 72, 234, 3, 8, 251, 121, 180, 248, 104, 112, 72, 234, 3, ++ 104, 23, 240, 1, 7, 64, 240, 174, 128, 148, 248, 44, 48, 40, 70, 1, ++ 147, 90, 70, 67, 70, 205, 248, 0, 160, 255, 247, 57, 255, 0, 40, 0, ++ 240, 161, 128, 171, 121, 0, 43, 64, 240, 121, 130, 51, 104, 211, 248, ++ 136, 48, 211, 248, 220, 33, 1, 50, 195, 248, 220, 33, 148, 248, 44, ++ 32, 34, 177, 211, 248, 180, 34, 1, 50, 195, 248, 180, 34, 211, 248, ++ 232, 33, 1, 50, 195, 248, 232, 33, 213, 248, 4, 49, 147, 248, 52, 48, ++ 27, 177, 40, 70, 0, 33, 38, 240, 101, 217, 148, 248, 44, 112, 0, 47, ++ 0, 240, 86, 130, 51, 104, 211, 248, 136, 48, 211, 248, 192, 34, 1, 50, ++ 195, 248, 192, 34, 107, 224, 59, 120, 151, 248, 1, 160, 151, 248, 6, ++ 128, 67, 234, 10, 42, 251, 121, 79, 234, 8, 72, 72, 234, 3, 104, 59, ++ 121, 72, 234, 3, 8, 123, 121, 72, 234, 3, 40, 43, 124, 27, 185, 181, ++ 248, 90, 48, 219, 7, 88, 212, 180, 248, 104, 112, 23, 240, 1, 7, 83, ++ 209, 148, 248, 44, 48, 40, 70, 1, 147, 90, 70, 67, 70, 205, 248, 0, ++ 160, 255, 247, 223, 254, 0, 40, 71, 208, 171, 121, 0, 43, 64, 240, 32, ++ 130, 51, 104, 211, 248, 136, 48, 211, 248, 220, 33, 1, 50, 195, 248, ++ 220, 33, 148, 248, 44, 32, 34, 177, 211, 248, 180, 34, 1, 50, 195, 248, ++ 180, 34, 211, 248, 240, 33, 1, 50, 195, 248, 240, 33, 213, 248, 4, 49, ++ 147, 248, 52, 48, 27, 177, 40, 70, 0, 33, 38, 240, 12, 217, 148, 248, ++ 44, 112, 0, 47, 0, 240, 253, 129, 51, 104, 211, 248, 136, 48, 211, 248, ++ 200, 34, 1, 50, 195, 248, 200, 34, 18, 224, 2, 55, 200, 49, 16, 34, ++ 56, 70, 198, 243, 244, 241, 0, 40, 12, 218, 140, 72, 57, 70, 16, 34, ++ 198, 243, 91, 243, 161, 107, 138, 72, 200, 49, 16, 34, 198, 243, 85, ++ 243, 0, 39, 222, 225, 79, 240, 0, 8, 194, 70, 150, 248, 148, 50, 147, ++ 185, 43, 109, 31, 7, 15, 212, 160, 107, 3, 122, 2, 43, 2, 209, 203, ++ 247, 234, 251, 64, 185, 99, 105, 155, 105, 152, 0, 4, 212, 163, 105, ++ 27, 138, 25, 7, 0, 241, 250, 128, 99, 105, 155, 105, 90, 6, 224, 212, ++ 163, 105, 26, 138, 66, 240, 8, 2, 26, 130, 161, 107, 11, 122, 1, 59, ++ 10, 43, 0, 242, 206, 128, 223, 232, 19, 240, 53, 0, 11, 0, 53, 0, 108, ++ 0, 204, 0, 204, 0, 204, 0, 204, 0, 204, 0, 204, 0, 174, 0, 8, 70, 203, ++ 247, 193, 251, 8, 177, 43, 124, 75, 177, 163, 107, 211, 248, 136, 32, ++ 144, 69, 4, 216, 15, 208, 147, 248, 140, 32, 90, 69, 11, 208, 161, 107, ++ 34, 104, 4, 241, 64, 7, 56, 70, 20, 49, 10, 50, 67, 70, 211, 243, 168, ++ 247, 231, 101, 1, 224, 100, 51, 227, 101, 161, 107, 4, 241, 74, 7, 56, ++ 70, 20, 49, 226, 109, 83, 70, 212, 243, 101, 240, 56, 70, 16, 33, 16, ++ 224, 97, 104, 3, 34, 132, 168, 196, 247, 89, 251, 163, 107, 132, 168, ++ 3, 241, 20, 1, 26, 105, 3, 48, 196, 247, 81, 251, 163, 107, 132, 168, ++ 25, 105, 3, 49, 7, 170, 205, 243, 110, 241, 163, 107, 96, 104, 147, ++ 249, 14, 48, 161, 104, 192, 24, 201, 26, 7, 170, 205, 243, 134, 241, ++ 163, 107, 96, 104, 147, 249, 14, 48, 161, 104, 192, 24, 201, 26, 79, ++ 240, 255, 50, 198, 243, 57, 245, 68, 75, 162, 105, 152, 66, 19, 138, ++ 4, 209, 35, 240, 16, 3, 27, 4, 27, 12, 1, 224, 67, 240, 16, 3, 19, 130, ++ 124, 224, 99, 104, 223, 120, 23, 240, 32, 7, 31, 208, 10, 105, 72, 168, ++ 20, 49, 210, 0, 205, 243, 228, 245, 0, 35, 33, 104, 98, 105, 72, 70, ++ 45, 240, 26, 221, 0, 39, 163, 107, 1, 144, 0, 151, 25, 105, 72, 168, ++ 35, 104, 226, 104, 194, 243, 252, 242, 131, 28, 5, 209, 163, 105, 26, ++ 138, 66, 240, 16, 2, 26, 130, 89, 224, 1, 48, 87, 209, 51, 104, 211, ++ 248, 136, 48, 211, 248, 220, 33, 1, 50, 195, 248, 220, 33, 211, 248, ++ 244, 33, 1, 50, 195, 248, 244, 33, 148, 248, 44, 32, 0, 42, 0, 240, ++ 15, 129, 211, 248, 180, 34, 1, 50, 195, 248, 180, 34, 211, 248, 204, ++ 34, 1, 50, 195, 248, 204, 34, 6, 225, 1, 241, 20, 0, 226, 104, 36, 49, ++ 35, 104, 209, 243, 50, 245, 0, 40, 127, 244, 28, 175, 162, 107, 210, ++ 248, 216, 48, 1, 51, 194, 248, 216, 48, 51, 240, 124, 67, 39, 209, 242, ++ 34, 1, 146, 214, 248, 152, 1, 41, 70, 9, 241, 20, 2, 0, 147, 57, 240, ++ 238, 216, 28, 224, 175, 121, 0, 47, 127, 244, 4, 175, 51, 104, 211, ++ 248, 136, 48, 211, 248, 220, 33, 1, 50, 195, 248, 220, 33, 148, 248, ++ 44, 32, 0, 42, 0, 240, 213, 128, 211, 248, 180, 34, 1, 50, 195, 248, ++ 180, 34, 209, 224, 62, 200, 136, 0, 68, 200, 136, 0, 227, 32, 187, 222, ++ 163, 107, 97, 104, 147, 249, 14, 32, 138, 24, 98, 96, 147, 249, 14, ++ 16, 147, 249, 15, 32, 138, 24, 161, 104, 138, 26, 162, 96, 147, 249, ++ 14, 16, 147, 249, 15, 32, 138, 24, 33, 105, 138, 26, 34, 97, 162, 105, ++ 18, 138, 2, 240, 24, 2, 24, 42, 100, 209, 171, 121, 0, 43, 127, 244, ++ 203, 174, 149, 249, 68, 32, 0, 147, 1, 147, 2, 147, 48, 70, 49, 35, ++ 213, 248, 244, 16, 45, 240, 7, 219, 51, 104, 211, 248, 136, 48, 211, ++ 248, 220, 33, 1, 50, 195, 248, 220, 33, 211, 248, 236, 33, 1, 50, 195, ++ 248, 236, 33, 211, 248, 244, 33, 1, 50, 195, 248, 244, 33, 148, 248, ++ 44, 32, 114, 177, 211, 248, 180, 34, 1, 50, 195, 248, 180, 34, 211, ++ 248, 196, 34, 1, 50, 195, 248, 196, 34, 211, 248, 204, 34, 1, 50, 195, ++ 248, 204, 34, 162, 107, 18, 122, 2, 42, 5, 208, 3, 42, 18, 208, 1, 42, ++ 127, 244, 147, 174, 14, 224, 211, 248, 8, 34, 1, 50, 195, 248, 8, 34, ++ 148, 248, 44, 112, 0, 47, 105, 208, 211, 248, 224, 34, 1, 50, 195, 248, ++ 224, 34, 130, 230, 211, 248, 0, 34, 1, 50, 195, 248, 0, 34, 211, 248, ++ 252, 33, 1, 50, 195, 248, 252, 33, 148, 248, 44, 112, 0, 47, 85, 208, ++ 211, 248, 216, 34, 1, 50, 195, 248, 216, 34, 211, 248, 212, 34, 1, 50, ++ 195, 248, 212, 34, 105, 230, 97, 105, 138, 137, 226, 96, 148, 248, 45, ++ 32, 154, 185, 147, 249, 15, 32, 5, 152, 146, 178, 202, 243, 137, 243, ++ 99, 105, 218, 137, 151, 4, 2, 213, 179, 248, 80, 48, 139, 185, 163, ++ 107, 226, 104, 147, 249, 15, 48, 211, 26, 227, 96, 10, 224, 5, 152, ++ 198, 243, 214, 244, 163, 107, 1, 70, 147, 249, 15, 32, 5, 152, 146, ++ 178, 202, 243, 112, 243, 51, 104, 196, 248, 100, 128, 211, 248, 136, ++ 48, 164, 248, 98, 160, 211, 248, 4, 34, 1, 50, 195, 248, 4, 34, 148, ++ 248, 44, 32, 34, 177, 211, 248, 220, 34, 1, 50, 195, 248, 220, 34, 163, ++ 107, 27, 122, 4, 43, 1, 208, 2, 43, 10, 209, 180, 248, 104, 48, 216, ++ 7, 6, 212, 48, 70, 33, 70, 46, 240, 20, 216, 1, 224, 23, 70, 0, 224, ++ 1, 39, 56, 70, 13, 245, 17, 125, 189, 232, 240, 143, 0, 191, 75, 28, ++ 1, 209, 3, 106, 5, 224, 203, 178, 1, 43, 5, 216, 10, 49, 80, 248, 33, ++ 48, 147, 248, 76, 0, 112, 71, 111, 240, 28, 0, 112, 71, 208, 248, 116, ++ 52, 88, 123, 112, 71, 176, 248, 197, 2, 0, 240, 12, 0, 128, 8, 112, ++ 71, 111, 240, 22, 0, 112, 71, 3, 106, 147, 249, 77, 0, 112, 71, 0, 0, ++ 112, 181, 208, 248, 116, 52, 90, 120, 6, 42, 1, 209, 2, 34, 0, 224, ++ 1, 34, 0, 33, 26, 117, 11, 70, 20, 76, 208, 248, 116, 36, 13, 93, 2, ++ 235, 67, 2, 85, 117, 208, 248, 116, 36, 146, 248, 124, 96, 142, 177, ++ 176, 248, 72, 84, 5, 244, 96, 85, 181, 245, 128, 95, 79, 234, 67, 5, ++ 2, 209, 82, 25, 2, 36, 3, 224, 2, 46, 3, 209, 82, 25, 4, 36, 148, 117, ++ 6, 224, 93, 0, 86, 25, 18, 125, 237, 24, 173, 24, 98, 93, 178, 117, ++ 1, 51, 3, 49, 6, 43, 214, 209, 112, 189, 48, 89, 4, 0, 130, 120, 67, ++ 120, 145, 66, 54, 216, 1, 41, 37, 209, 144, 248, 124, 32, 1, 42, 10, ++ 209, 3, 240, 2, 0, 192, 178, 0, 40, 12, 191, 4, 32, 2, 32, 24, 66, 8, ++ 191, 1, 32, 112, 71, 2, 42, 10, 209, 3, 240, 4, 0, 192, 178, 0, 40, ++ 12, 191, 1, 32, 4, 32, 24, 66, 8, 191, 2, 32, 112, 71, 3, 240, 1, 0, ++ 0, 40, 12, 191, 2, 32, 1, 32, 24, 66, 8, 191, 4, 32, 112, 71, 2, 41, ++ 14, 209, 3, 240, 5, 2, 5, 42, 12, 191, 5, 34, 3, 34, 2, 234, 3, 0, 144, ++ 66, 12, 191, 16, 70, 6, 32, 112, 71, 0, 32, 112, 71, 7, 32, 112, 71, ++ 16, 181, 96, 177, 3, 120, 1, 34, 6, 224, 16, 248, 1, 79, 1, 50, 156, ++ 66, 40, 191, 35, 70, 219, 178, 138, 66, 246, 211, 0, 224, 3, 70, 24, ++ 70, 16, 189, 65, 24, 129, 248, 82, 32, 144, 248, 82, 32, 3, 120, 19, ++ 64, 144, 248, 83, 32, 19, 64, 144, 248, 84, 32, 19, 64, 144, 248, 85, ++ 32, 19, 64, 144, 248, 86, 32, 3, 234, 2, 0, 112, 71, 208, 248, 116, ++ 52, 17, 244, 64, 127, 88, 137, 3, 209, 147, 249, 8, 32, 3, 42, 1, 209, ++ 88, 120, 128, 1, 0, 244, 112, 112, 112, 71, 0, 0, 45, 233, 240, 71, ++ 208, 248, 116, 52, 154, 176, 220, 106, 176, 248, 72, 100, 157, 120, ++ 138, 70, 7, 70, 1, 169, 0, 34, 154, 72, 16, 92, 3, 50, 18, 42, 65, 248, ++ 4, 15, 248, 209, 0, 44, 0, 240, 217, 129, 1, 45, 64, 242, 214, 129, ++ 6, 244, 96, 86, 166, 245, 192, 81, 147, 248, 138, 32, 78, 66, 70, 235, ++ 1, 6, 34, 177, 155, 121, 1, 43, 1, 217, 1, 35, 114, 224, 32, 70, 174, ++ 177, 3, 33, 1, 34, 23, 171, 249, 247, 77, 254, 3, 33, 2, 34, 32, 70, ++ 24, 171, 249, 247, 71, 254, 3, 45, 5, 209, 32, 70, 41, 70, 42, 70, 25, ++ 171, 249, 247, 63, 254, 79, 240, 0, 8, 15, 224, 1, 34, 49, 70, 23, 171, ++ 249, 247, 55, 254, 2, 34, 32, 70, 49, 70, 24, 171, 249, 247, 49, 254, ++ 3, 45, 239, 209, 32, 70, 49, 70, 232, 231, 23, 171, 24, 249, 3, 32, ++ 128, 50, 5, 209, 215, 248, 116, 36, 146, 248, 120, 32, 8, 248, 3, 32, ++ 24, 171, 24, 249, 3, 32, 128, 50, 5, 209, 215, 248, 116, 36, 146, 248, ++ 120, 32, 8, 248, 3, 32, 3, 45, 10, 209, 25, 171, 24, 249, 3, 32, 128, ++ 50, 5, 209, 215, 248, 116, 36, 146, 248, 120, 32, 8, 248, 3, 32, 8, ++ 241, 1, 8, 184, 241, 4, 15, 215, 209, 65, 70, 23, 168, 255, 247, 76, ++ 255, 65, 70, 192, 241, 0, 9, 24, 168, 255, 247, 70, 255, 192, 241, 6, ++ 3, 75, 69, 128, 70, 1, 219, 2, 35, 2, 147, 2, 45, 16, 208, 4, 33, 25, ++ 168, 255, 247, 57, 255, 192, 241, 9, 3, 75, 69, 8, 219, 111, 240, 2, ++ 3, 200, 235, 3, 3, 64, 66, 131, 66, 1, 220, 3, 35, 2, 147, 17, 171, ++ 0, 147, 32, 70, 206, 177, 1, 33, 0, 34, 11, 70, 249, 247, 240, 253, ++ 2, 34, 19, 171, 0, 147, 1, 33, 32, 70, 19, 70, 249, 247, 232, 253, 3, ++ 45, 7, 209, 21, 171, 0, 147, 32, 70, 1, 33, 2, 34, 43, 70, 249, 247, ++ 222, 253, 79, 240, 0, 8, 19, 224, 1, 35, 49, 70, 50, 70, 249, 247, 214, ++ 253, 2, 34, 19, 171, 0, 147, 32, 70, 49, 70, 19, 70, 249, 247, 206, ++ 253, 3, 45, 237, 209, 21, 171, 0, 147, 32, 70, 49, 70, 228, 231, 17, ++ 171, 24, 249, 3, 32, 128, 50, 5, 209, 215, 248, 116, 36, 146, 248, 120, ++ 32, 8, 248, 3, 32, 19, 171, 24, 249, 3, 32, 128, 50, 5, 209, 215, 248, ++ 116, 36, 146, 248, 120, 32, 8, 248, 3, 32, 3, 45, 10, 209, 21, 171, ++ 24, 249, 3, 32, 128, 50, 5, 209, 215, 248, 116, 36, 146, 248, 120, 32, ++ 8, 248, 3, 32, 8, 241, 1, 8, 184, 241, 8, 15, 215, 209, 65, 70, 17, ++ 168, 255, 247, 206, 254, 65, 70, 192, 241, 0, 9, 19, 168, 255, 247, ++ 200, 254, 192, 241, 6, 3, 75, 69, 128, 70, 1, 219, 2, 35, 3, 147, 2, ++ 45, 16, 208, 8, 33, 21, 168, 255, 247, 187, 254, 192, 241, 9, 3, 75, ++ 69, 8, 219, 111, 240, 2, 3, 200, 235, 3, 3, 64, 66, 131, 66, 1, 220, ++ 3, 35, 3, 147, 79, 240, 1, 8, 8, 171, 205, 248, 0, 128, 1, 147, 32, ++ 70, 6, 179, 0, 35, 65, 70, 66, 70, 249, 247, 165, 253, 79, 240, 2, 9, ++ 11, 171, 1, 147, 32, 70, 65, 70, 66, 70, 75, 70, 205, 248, 0, 144, 249, ++ 247, 153, 253, 3, 45, 8, 209, 14, 171, 0, 149, 1, 147, 32, 70, 65, 70, ++ 66, 70, 75, 70, 249, 247, 142, 253, 79, 240, 0, 8, 26, 224, 48, 89, ++ 4, 0, 49, 70, 66, 70, 51, 70, 249, 247, 132, 253, 79, 240, 2, 9, 11, ++ 171, 1, 147, 32, 70, 49, 70, 66, 70, 75, 70, 205, 248, 0, 144, 249, ++ 247, 120, 253, 3, 45, 231, 209, 14, 171, 0, 149, 1, 147, 32, 70, 49, ++ 70, 221, 231, 8, 171, 24, 249, 3, 32, 128, 50, 5, 209, 215, 248, 116, ++ 36, 146, 248, 120, 32, 8, 248, 3, 32, 11, 171, 24, 249, 3, 32, 128, ++ 50, 5, 209, 215, 248, 116, 36, 146, 248, 120, 32, 8, 248, 3, 32, 3, ++ 45, 10, 209, 14, 171, 24, 249, 3, 32, 128, 50, 5, 209, 215, 248, 116, ++ 36, 146, 248, 120, 32, 8, 248, 3, 32, 8, 241, 1, 8, 184, 241, 8, 15, ++ 215, 209, 65, 70, 8, 168, 255, 247, 64, 254, 65, 70, 192, 241, 0, 9, ++ 11, 168, 255, 247, 58, 254, 192, 241, 6, 3, 75, 69, 128, 70, 1, 219, ++ 2, 35, 4, 147, 2, 45, 87, 208, 8, 33, 14, 168, 255, 247, 45, 254, 192, ++ 241, 9, 3, 75, 69, 8, 219, 111, 240, 2, 3, 200, 235, 3, 3, 64, 66, 131, ++ 66, 1, 220, 3, 35, 4, 147, 3, 34, 14, 171, 141, 232, 12, 0, 32, 70, ++ 102, 177, 1, 33, 2, 34, 0, 35, 249, 247, 25, 253, 11, 171, 2, 34, 1, ++ 147, 0, 146, 32, 70, 1, 33, 0, 35, 11, 224, 49, 70, 2, 34, 51, 70, 249, ++ 247, 12, 253, 11, 171, 2, 34, 1, 147, 0, 146, 32, 70, 49, 70, 51, 70, ++ 249, 247, 3, 253, 0, 36, 11, 171, 226, 86, 128, 50, 4, 209, 215, 248, ++ 116, 36, 146, 248, 120, 32, 226, 84, 14, 171, 226, 86, 128, 50, 4, 209, ++ 215, 248, 116, 36, 146, 248, 120, 32, 226, 84, 1, 52, 8, 44, 234, 209, ++ 33, 70, 11, 168, 255, 247, 229, 253, 33, 70, 5, 70, 14, 168, 255, 247, ++ 224, 253, 109, 66, 192, 241, 3, 0, 168, 66, 1, 219, 3, 35, 5, 147, 85, ++ 70, 0, 36, 2, 171, 225, 88, 215, 248, 116, 4, 255, 247, 146, 253, 4, ++ 52, 24, 44, 5, 248, 1, 11, 244, 209, 26, 176, 189, 232, 240, 135, 208, ++ 248, 116, 52, 26, 122, 10, 185, 64, 34, 5, 224, 1, 42, 1, 209, 128, ++ 34, 1, 224, 90, 120, 146, 1, 90, 129, 0, 105, 89, 137, 230, 247, 98, ++ 190, 56, 181, 75, 28, 1, 43, 4, 70, 13, 70, 7, 217, 1, 41, 38, 209, ++ 208, 248, 116, 52, 155, 120, 1, 43, 1, 209, 34, 224, 81, 177, 212, 248, ++ 116, 52, 155, 120, 1, 43, 5, 208, 35, 106, 24, 105, 240, 247, 23, 250, ++ 128, 7, 6, 212, 180, 248, 197, 50, 35, 240, 128, 3, 27, 4, 27, 12, 3, ++ 224, 180, 248, 197, 50, 67, 240, 128, 3, 164, 248, 197, 50, 163, 106, ++ 1, 32, 131, 248, 77, 80, 227, 106, 131, 248, 77, 80, 56, 189, 0, 32, ++ 56, 189, 0, 32, 56, 189, 16, 181, 176, 248, 197, 50, 4, 70, 35, 244, ++ 64, 115, 67, 234, 1, 35, 160, 248, 197, 50, 3, 104, 27, 126, 59, 177, ++ 241, 243, 243, 247, 32, 70, 1, 33, 189, 232, 16, 64, 242, 243, 169, ++ 176, 16, 189, 3, 42, 112, 181, 5, 70, 12, 70, 14, 216, 2, 42, 12, 208, ++ 214, 178, 49, 70, 236, 243, 87, 240, 76, 177, 35, 122, 75, 177, 40, ++ 70, 33, 70, 50, 70, 239, 243, 123, 240, 1, 224, 0, 32, 112, 189, 1, ++ 32, 112, 189, 1, 32, 112, 189, 115, 181, 0, 35, 1, 147, 208, 248, 116, ++ 52, 5, 70, 222, 106, 20, 35, 75, 128, 1, 35, 11, 128, 3, 106, 12, 70, ++ 24, 105, 239, 247, 146, 252, 43, 104, 32, 129, 147, 248, 63, 48, 19, ++ 177, 181, 248, 70, 52, 99, 129, 20, 35, 99, 96, 213, 248, 116, 52, 216, ++ 106, 56, 177, 48, 70, 4, 241, 16, 1, 226, 104, 1, 171, 249, 247, 225, ++ 253, 1, 152, 124, 189, 115, 181, 2, 174, 6, 248, 1, 45, 4, 70, 13, 70, ++ 48, 70, 1, 33, 197, 243, 75, 244, 212, 248, 116, 52, 155, 120, 152, ++ 66, 2, 217, 0, 35, 141, 248, 7, 48, 1, 33, 48, 70, 197, 243, 63, 244, ++ 212, 248, 116, 52, 154, 120, 144, 66, 9, 209, 157, 248, 7, 16, 90, 120, ++ 49, 234, 2, 0, 1, 209, 10, 66, 1, 209, 141, 248, 7, 32, 1, 45, 157, ++ 248, 7, 32, 8, 216, 58, 185, 90, 120, 66, 177, 3, 235, 69, 3, 154, 117, ++ 141, 248, 7, 32, 2, 224, 3, 235, 69, 3, 154, 117, 35, 106, 27, 104, ++ 1, 43, 2, 209, 1, 45, 41, 209, 2, 224, 2, 43, 38, 209, 45, 187, 157, ++ 248, 7, 16, 212, 248, 116, 52, 137, 1, 89, 129, 32, 105, 230, 247, 144, ++ 253, 99, 126, 211, 177, 35, 106, 32, 70, 26, 104, 212, 248, 160, 20, ++ 0, 35, 242, 243, 91, 240, 136, 177, 32, 70, 241, 243, 209, 242, 32, ++ 70, 212, 248, 160, 20, 230, 243, 56, 241, 32, 70, 212, 248, 160, 20, ++ 180, 248, 72, 36, 230, 243, 247, 240, 32, 70, 235, 243, 120, 242, 212, ++ 248, 160, 1, 8, 177, 55, 240, 133, 220, 124, 189, 16, 181, 0, 42, 12, ++ 191, 164, 36, 180, 36, 100, 41, 14, 216, 41, 177, 193, 241, 100, 2, ++ 18, 1, 146, 251, 241, 242, 0, 224, 10, 70, 67, 177, 33, 70, 146, 178, ++ 242, 243, 118, 241, 0, 32, 16, 189, 111, 240, 28, 0, 16, 189, 24, 70, ++ 16, 189, 112, 181, 208, 248, 116, 52, 5, 70, 147, 248, 72, 32, 145, ++ 7, 5, 213, 147, 248, 122, 64, 100, 44, 40, 191, 100, 36, 0, 224, 100, ++ 36, 210, 7, 4, 213, 147, 248, 73, 48, 156, 66, 40, 191, 28, 70, 43, ++ 104, 27, 126, 107, 177, 33, 70, 0, 34, 1, 35, 40, 70, 255, 247, 198, ++ 255, 1, 34, 40, 70, 33, 70, 19, 70, 189, 232, 112, 64, 255, 247, 190, ++ 191, 112, 189, 56, 181, 208, 248, 116, 52, 179, 248, 144, 64, 44, 179, ++ 34, 177, 3, 241, 146, 4, 179, 248, 74, 48, 3, 224, 3, 241, 158, 4, 179, ++ 248, 76, 48, 37, 136, 169, 66, 1, 219, 24, 41, 1, 220, 217, 178, 13, ++ 224, 165, 136, 169, 66, 1, 218, 97, 136, 4, 224, 37, 137, 169, 66, 180, ++ 191, 225, 136, 97, 137, 19, 41, 140, 191, 201, 178, 20, 33, 153, 66, ++ 136, 191, 217, 178, 3, 104, 27, 126, 255, 247, 145, 255, 0, 32, 56, ++ 189, 208, 248, 116, 52, 19, 181, 179, 248, 144, 32, 4, 70, 18, 179, ++ 3, 106, 13, 241, 6, 1, 24, 105, 240, 247, 40, 251, 40, 179, 212, 248, ++ 116, 52, 32, 70, 179, 248, 170, 32, 209, 0, 137, 26, 189, 249, 6, 32, ++ 137, 24, 72, 191, 7, 49, 201, 16, 163, 248, 170, 16, 1, 34, 9, 178, ++ 255, 247, 177, 255, 212, 248, 116, 52, 32, 70, 179, 249, 170, 16, 0, ++ 34, 255, 247, 169, 255, 9, 224, 100, 33, 1, 35, 255, 247, 97, 255, 1, ++ 34, 32, 70, 100, 33, 19, 70, 255, 247, 91, 255, 28, 189, 16, 181, 0, ++ 35, 11, 128, 3, 104, 134, 176, 27, 126, 12, 70, 27, 185, 79, 240, 255, ++ 51, 11, 128, 21, 224, 2, 244, 96, 81, 208, 248, 116, 52, 1, 34, 161, ++ 245, 192, 94, 3, 168, 222, 241, 0, 1, 0, 146, 1, 144, 65, 235, 14, 1, ++ 216, 106, 0, 35, 249, 247, 231, 250, 32, 70, 0, 33, 198, 243, 132, 242, ++ 6, 176, 16, 189, 1, 41, 8, 181, 3, 216, 255, 247, 111, 254, 1, 32, 8, ++ 189, 0, 32, 8, 189, 176, 248, 197, 2, 0, 244, 64, 112, 0, 10, 112, 71, ++ 111, 240, 22, 0, 112, 71, 17, 244, 64, 79, 176, 248, 72, 52, 208, 248, ++ 116, 36, 2, 209, 146, 248, 87, 16, 16, 224, 219, 178, 51, 43, 2, 216, ++ 146, 248, 88, 16, 10, 224, 99, 43, 2, 216, 146, 248, 89, 16, 5, 224, ++ 148, 43, 148, 191, 146, 248, 90, 16, 146, 248, 91, 16, 73, 178, 255, ++ 247, 223, 191, 247, 181, 208, 248, 116, 100, 5, 70, 15, 70, 104, 70, ++ 0, 33, 4, 34, 197, 243, 126, 240, 0, 36, 59, 93, 90, 178, 0, 42, 28, ++ 220, 13, 248, 4, 48, 1, 52, 4, 44, 246, 209, 92, 54, 49, 70, 34, 70, ++ 1, 168, 195, 247, 238, 252, 57, 70, 34, 70, 48, 70, 195, 247, 233, 252, ++ 43, 106, 105, 70, 24, 105, 240, 247, 120, 251, 5, 70, 56, 177, 48, 70, ++ 1, 169, 34, 70, 195, 247, 221, 252, 1, 224, 111, 240, 28, 5, 40, 70, ++ 254, 189, 115, 181, 208, 248, 116, 52, 201, 178, 90, 121, 4, 70, 138, ++ 66, 141, 248, 7, 16, 106, 208, 219, 120, 49, 234, 3, 5, 99, 209, 25, ++ 66, 97, 208, 1, 33, 13, 241, 7, 0, 197, 243, 171, 242, 212, 248, 116, ++ 52, 157, 248, 7, 32, 153, 121, 94, 121, 90, 113, 192, 178, 212, 248, ++ 116, 52, 136, 66, 152, 113, 68, 208, 1, 40, 2, 208, 1, 41, 64, 209, ++ 3, 37, 212, 248, 108, 50, 131, 248, 64, 83, 35, 104, 147, 248, 47, 32, ++ 138, 177, 212, 248, 116, 52, 34, 106, 89, 120, 16, 105, 90, 121, 240, ++ 247, 61, 250, 32, 70, 41, 70, 235, 243, 81, 246, 35, 104, 147, 248, ++ 63, 0, 0, 40, 53, 208, 16, 224, 147, 248, 63, 96, 166, 177, 3, 45, 11, ++ 209, 212, 248, 116, 52, 34, 106, 89, 120, 16, 105, 90, 121, 240, 247, ++ 38, 250, 32, 70, 41, 70, 235, 243, 58, 246, 32, 70, 212, 248, 108, 18, ++ 42, 70, 236, 243, 142, 244, 27, 224, 212, 248, 116, 52, 34, 106, 89, ++ 120, 16, 105, 90, 121, 240, 247, 19, 250, 32, 70, 41, 70, 235, 243, ++ 39, 246, 48, 70, 14, 224, 150, 66, 11, 208, 212, 248, 116, 52, 34, 106, ++ 89, 120, 16, 105, 90, 121, 240, 247, 3, 250, 2, 224, 111, 240, 28, 0, ++ 0, 224, 0, 32, 124, 189, 115, 181, 208, 248, 116, 52, 4, 70, 29, 123, ++ 3, 106, 14, 70, 24, 105, 239, 247, 143, 255, 130, 7, 24, 213, 212, 248, ++ 116, 4, 67, 123, 163, 177, 194, 137, 79, 246, 255, 115, 154, 66, 15, ++ 208, 1, 124, 81, 185, 131, 120, 1, 43, 8, 208, 14, 48, 197, 243, 102, ++ 246, 208, 241, 1, 1, 56, 191, 0, 33, 0, 224, 0, 33, 201, 178, 13, 224, ++ 35, 106, 179, 66, 41, 209, 212, 248, 116, 52, 25, 124, 41, 185, 155, ++ 120, 1, 43, 3, 208, 150, 248, 76, 16, 0, 224, 0, 33, 141, 66, 5, 208, ++ 212, 248, 116, 52, 25, 115, 32, 105, 5, 240, 134, 223, 212, 248, 116, ++ 52, 147, 248, 60, 48, 75, 185, 35, 104, 211, 248, 132, 48, 3, 244, 128, ++ 67, 0, 43, 12, 191, 64, 35, 0, 35, 0, 224, 64, 35, 0, 34, 0, 146, 32, ++ 70, 3, 33, 64, 34, 236, 243, 25, 244, 0, 32, 124, 189, 56, 181, 208, ++ 248, 116, 52, 4, 70, 91, 123, 13, 70, 139, 66, 21, 208, 3, 106, 24, ++ 105, 239, 247, 57, 255, 129, 7, 8, 213, 61, 177, 212, 248, 116, 20, ++ 32, 70, 14, 49, 180, 248, 72, 36, 255, 247, 154, 254, 212, 248, 116, ++ 52, 32, 70, 93, 115, 33, 106, 255, 247, 142, 255, 0, 32, 56, 189, 8, ++ 181, 83, 28, 1, 209, 3, 106, 5, 224, 211, 178, 1, 43, 18, 216, 10, 50, ++ 80, 248, 34, 48, 1, 41, 5, 209, 208, 248, 116, 36, 146, 120, 1, 42, ++ 1, 209, 7, 224, 8, 216, 131, 248, 76, 16, 25, 70, 255, 247, 115, 255, ++ 1, 32, 8, 189, 0, 32, 8, 189, 0, 32, 8, 189, 112, 181, 4, 70, 208, 248, ++ 116, 4, 1, 33, 80, 48, 197, 243, 174, 241, 212, 248, 116, 52, 6, 70, ++ 147, 248, 80, 32, 93, 120, 90, 112, 212, 248, 116, 52, 89, 120, 0, 41, ++ 57, 208, 173, 26, 147, 248, 34, 32, 24, 191, 1, 37, 130, 177, 17, 64, ++ 145, 66, 19, 208, 131, 248, 133, 32, 212, 248, 116, 52, 0, 34, 131, ++ 248, 34, 32, 212, 248, 116, 52, 91, 111, 67, 177, 32, 70, 152, 71, 5, ++ 224, 147, 248, 133, 32, 18, 177, 13, 177, 131, 248, 34, 32, 212, 248, ++ 116, 52, 147, 248, 33, 32, 138, 177, 89, 120, 17, 64, 145, 66, 19, 208, ++ 131, 248, 132, 32, 212, 248, 116, 52, 0, 34, 131, 248, 33, 32, 212, ++ 248, 116, 52, 91, 111, 67, 177, 32, 70, 152, 71, 5, 224, 147, 248, 132, ++ 32, 18, 177, 13, 177, 131, 248, 33, 32, 212, 248, 116, 52, 0, 37, 131, ++ 248, 80, 80, 212, 248, 116, 52, 32, 70, 158, 112, 35, 106, 147, 249, ++ 77, 16, 255, 247, 123, 252, 161, 106, 32, 70, 255, 247, 13, 255, 32, ++ 70, 225, 106, 255, 247, 9, 255, 212, 248, 116, 52, 154, 120, 1, 42, ++ 7, 209, 89, 120, 1, 41, 1, 209, 29, 114, 4, 224, 2, 41, 2, 209, 0, 224, ++ 3, 34, 26, 114, 32, 70, 255, 247, 80, 252, 32, 70, 255, 247, 159, 249, ++ 32, 70, 180, 248, 72, 20, 255, 247, 42, 254, 32, 70, 254, 247, 189, ++ 253, 212, 248, 160, 1, 8, 177, 55, 240, 202, 217, 212, 248, 116, 52, ++ 34, 106, 89, 120, 16, 105, 90, 121, 189, 232, 112, 64, 240, 247, 218, ++ 184, 45, 233, 243, 65, 4, 70, 208, 248, 116, 4, 30, 70, 21, 70, 195, ++ 24, 202, 178, 49, 70, 147, 248, 82, 112, 255, 247, 3, 250, 212, 248, ++ 116, 52, 141, 248, 7, 0, 90, 120, 130, 66, 117, 208, 26, 120, 48, 234, ++ 2, 1, 1, 209, 16, 66, 5, 209, 158, 25, 134, 248, 82, 112, 111, 240, ++ 28, 0, 106, 224, 88, 28, 1, 33, 197, 243, 1, 241, 1, 33, 128, 70, 13, ++ 241, 7, 0, 197, 243, 251, 240, 1, 40, 52, 209, 184, 241, 1, 15, 49, ++ 217, 163, 106, 88, 108, 249, 247, 129, 253, 1, 40, 5, 216, 163, 106, ++ 152, 108, 249, 247, 123, 253, 1, 40, 25, 217, 61, 185, 212, 248, 116, ++ 52, 79, 240, 255, 48, 158, 25, 134, 248, 82, 112, 70, 224, 163, 106, ++ 88, 108, 249, 247, 108, 253, 1, 40, 163, 106, 1, 217, 0, 34, 90, 100, ++ 152, 108, 249, 247, 100, 253, 1, 40, 2, 217, 163, 106, 0, 34, 154, 100, ++ 32, 70, 255, 247, 42, 249, 1, 40, 6, 209, 162, 106, 0, 35, 130, 248, ++ 77, 48, 226, 106, 130, 248, 77, 48, 212, 248, 116, 52, 157, 248, 7, ++ 32, 131, 248, 80, 32, 212, 248, 116, 52, 91, 120, 26, 64, 154, 66, 19, ++ 208, 227, 105, 179, 249, 28, 16, 179, 249, 30, 32, 138, 24, 179, 249, ++ 32, 16, 179, 249, 34, 48, 82, 24, 218, 66, 6, 208, 148, 248, 116, 50, ++ 67, 240, 32, 3, 132, 248, 116, 50, 8, 224, 148, 248, 116, 50, 32, 70, ++ 35, 240, 32, 3, 132, 248, 116, 50, 255, 247, 229, 254, 0, 32, 189, 232, ++ 252, 129, 208, 248, 116, 36, 11, 70, 17, 120, 0, 34, 255, 247, 107, ++ 191, 112, 181, 208, 248, 116, 52, 12, 70, 90, 120, 30, 120, 36, 9, 178, ++ 66, 5, 70, 1, 240, 15, 1, 13, 209, 219, 120, 145, 66, 44, 191, 0, 34, ++ 1, 34, 156, 66, 0, 209, 106, 185, 156, 66, 15, 210, 114, 177, 40, 70, ++ 33, 70, 7, 224, 10, 210, 177, 66, 4, 208, 219, 120, 163, 66, 5, 209, ++ 145, 66, 3, 208, 1, 34, 19, 70, 255, 247, 69, 255, 213, 248, 116, 52, ++ 90, 121, 219, 120, 154, 66, 2, 209, 148, 66, 10, 210, 2, 224, 8, 210, ++ 156, 66, 6, 209, 40, 70, 33, 70, 1, 34, 189, 232, 112, 64, 255, 247, ++ 152, 189, 112, 189, 0, 0, 138, 2, 16, 181, 4, 70, 3, 213, 208, 248, ++ 116, 52, 152, 120, 20, 224, 17, 240, 64, 112, 14, 209, 1, 240, 127, ++ 3, 2, 43, 17, 208, 4, 43, 15, 208, 11, 43, 13, 208, 22, 43, 11, 208, ++ 11, 74, 203, 178, 211, 86, 0, 43, 5, 219, 8, 70, 249, 247, 179, 252, ++ 1, 48, 192, 178, 0, 224, 1, 32, 212, 248, 116, 52, 5, 40, 40, 191, 5, ++ 32, 192, 178, 3, 235, 64, 0, 128, 125, 16, 189, 0, 191, 224, 248, 135, ++ 0, 7, 181, 255, 247, 207, 255, 2, 171, 3, 248, 1, 13, 24, 70, 1, 33, ++ 197, 243, 30, 240, 192, 178, 14, 189, 112, 71, 45, 233, 240, 79, 161, ++ 176, 0, 35, 47, 153, 43, 159, 4, 70, 144, 70, 42, 158, 44, 157, 221, ++ 248, 180, 176, 30, 147, 31, 147, 231, 247, 145, 251, 3, 47, 129, 70, ++ 11, 217, 4, 34, 30, 168, 49, 70, 195, 247, 27, 250, 7, 47, 4, 217, 31, ++ 168, 49, 29, 4, 34, 195, 247, 20, 250, 221, 248, 120, 160, 26, 241, ++ 0, 2, 24, 191, 1, 34, 211, 178, 184, 241, 75, 15, 0, 242, 67, 131, 223, ++ 232, 24, 240, 76, 0, 82, 0, 89, 0, 93, 0, 98, 0, 102, 0, 157, 0, 161, ++ 0, 141, 0, 146, 0, 183, 0, 65, 3, 187, 0, 191, 0, 108, 0, 113, 0, 243, ++ 0, 65, 3, 247, 0, 65, 3, 255, 0, 7, 1, 3, 1, 65, 3, 50, 1, 65, 3, 99, ++ 1, 65, 3, 33, 2, 49, 2, 127, 1, 132, 1, 137, 1, 143, 1, 70, 2, 75, 2, ++ 149, 1, 65, 3, 179, 1, 184, 1, 197, 1, 202, 1, 14, 2, 18, 2, 28, 2, ++ 65, 3, 65, 3, 65, 3, 205, 0, 213, 0, 106, 2, 88, 2, 129, 2, 111, 2, ++ 148, 2, 134, 2, 170, 2, 153, 2, 203, 2, 175, 2, 208, 2, 216, 2, 27, ++ 3, 13, 3, 65, 3, 65, 3, 238, 2, 65, 3, 248, 2, 65, 3, 8, 3, 255, 2, ++ 65, 3, 65, 3, 40, 3, 35, 3, 32, 70, 79, 250, 138, 241, 254, 247, 222, ++ 255, 61, 224, 32, 70, 81, 70, 157, 249, 124, 32, 255, 247, 194, 253, ++ 87, 224, 32, 70, 254, 247, 227, 255, 50, 224, 32, 70, 25, 70, 255, 247, ++ 153, 253, 48, 225, 32, 70, 254, 247, 222, 255, 41, 224, 32, 70, 73, ++ 70, 82, 70, 255, 247, 238, 250, 68, 224, 212, 248, 116, 52, 147, 248, ++ 60, 48, 186, 226, 212, 248, 116, 20, 145, 248, 60, 0, 152, 66, 0, 240, ++ 181, 130, 131, 240, 1, 5, 129, 248, 60, 32, 32, 70, 41, 70, 255, 247, ++ 122, 253, 32, 70, 41, 70, 79, 240, 255, 50, 255, 247, 148, 253, 0, 40, ++ 0, 240, 181, 130, 32, 70, 254, 247, 235, 251, 159, 226, 32, 70, 254, ++ 247, 188, 255, 40, 96, 154, 226, 35, 106, 24, 105, 239, 247, 169, 252, ++ 133, 7, 14, 213, 32, 70, 30, 153, 255, 247, 116, 250, 19, 224, 32, 70, ++ 255, 247, 56, 252, 238, 231, 35, 106, 24, 105, 239, 247, 154, 252, 128, ++ 7, 5, 212, 30, 157, 0, 45, 24, 191, 111, 240, 22, 5, 149, 226, 32, 70, ++ 30, 153, 255, 247, 30, 252, 0, 40, 12, 191, 111, 240, 28, 5, 0, 37, ++ 139, 226, 212, 248, 116, 52, 155, 120, 112, 226, 212, 248, 116, 52, ++ 91, 120, 108, 226, 186, 241, 255, 63, 3, 209, 212, 248, 116, 52, 27, ++ 120, 30, 147, 0, 34, 32, 70, 30, 153, 19, 70, 255, 247, 253, 253, 197, ++ 224, 212, 248, 116, 52, 0, 43, 0, 240, 111, 130, 147, 249, 96, 48, 86, ++ 226, 186, 241, 1, 15, 0, 243, 101, 130, 186, 241, 255, 63, 0, 240, 80, ++ 130, 212, 248, 116, 52, 131, 248, 96, 160, 212, 248, 116, 52, 89, 121, ++ 91, 120, 67, 234, 1, 17, 186, 241, 0, 15, 2, 208, 1, 240, 240, 1, 1, ++ 224, 1, 240, 15, 1, 32, 70, 255, 247, 108, 254, 57, 226, 212, 248, 116, ++ 52, 27, 120, 52, 226, 212, 248, 116, 4, 1, 33, 5, 48, 196, 243, 242, ++ 246, 192, 178, 144, 231, 212, 248, 116, 52, 91, 121, 40, 226, 212, 248, ++ 116, 52, 219, 120, 36, 226, 32, 70, 81, 70, 1, 34, 255, 247, 35, 252, ++ 5, 70, 0, 40, 64, 240, 51, 130, 212, 248, 116, 52, 154, 121, 26, 113, ++ 212, 248, 116, 52, 212, 248, 56, 3, 153, 121, 56, 48, 249, 247, 11, ++ 254, 212, 248, 108, 18, 32, 70, 212, 248, 56, 99, 234, 243, 226, 247, ++ 56, 54, 255, 35, 0, 147, 1, 144, 49, 70, 48, 70, 42, 70, 43, 70, 249, ++ 247, 150, 253, 32, 70, 41, 70, 255, 247, 162, 254, 16, 226, 212, 248, ++ 116, 52, 154, 127, 147, 248, 32, 16, 18, 4, 66, 234, 1, 98, 153, 126, ++ 10, 67, 25, 127, 66, 234, 1, 34, 28, 146, 25, 126, 154, 125, 66, 234, ++ 1, 34, 29, 146, 98, 126, 58, 177, 32, 70, 64, 242, 212, 81, 237, 243, ++ 185, 245, 131, 178, 219, 11, 15, 224, 147, 248, 138, 16, 65, 177, 153, ++ 120, 1, 41, 7, 217, 155, 121, 1, 43, 148, 191, 0, 35, 1, 35, 2, 224, ++ 11, 70, 0, 224, 19, 70, 219, 178, 29, 154, 66, 234, 195, 83, 22, 224, ++ 212, 248, 116, 52, 147, 248, 37, 32, 147, 248, 38, 16, 18, 4, 66, 234, ++ 1, 98, 147, 248, 35, 16, 10, 67, 147, 248, 36, 16, 66, 234, 1, 34, 28, ++ 146, 147, 248, 34, 32, 147, 248, 33, 48, 67, 234, 2, 35, 29, 147, 40, ++ 70, 28, 169, 8, 34, 117, 225, 212, 248, 116, 52, 147, 248, 48, 48, 167, ++ 225, 212, 248, 116, 52, 131, 248, 48, 160, 163, 225, 212, 248, 116, ++ 20, 40, 70, 92, 49, 4, 34, 101, 225, 32, 70, 49, 70, 255, 247, 108, ++ 251, 5, 70, 173, 225, 115, 136, 19, 43, 64, 242, 156, 129, 19, 47, 64, ++ 242, 153, 129, 51, 136, 1, 43, 64, 240, 143, 129, 187, 241, 19, 15, ++ 64, 243, 142, 129, 40, 70, 49, 70, 58, 70, 195, 247, 94, 248, 41, 70, ++ 32, 70, 255, 247, 198, 249, 0, 40, 20, 191, 0, 37, 111, 240, 22, 5, ++ 143, 225, 212, 248, 116, 52, 147, 248, 79, 48, 115, 225, 186, 241, 0, ++ 15, 192, 242, 130, 129, 212, 248, 116, 52, 26, 120, 146, 69, 128, 242, ++ 124, 129, 131, 248, 79, 160, 103, 225, 212, 248, 116, 52, 147, 248, ++ 78, 48, 97, 225, 186, 241, 0, 15, 192, 242, 112, 129, 212, 248, 116, ++ 52, 26, 120, 146, 69, 0, 243, 106, 129, 147, 248, 78, 32, 95, 250, 138, ++ 250, 82, 69, 0, 240, 82, 129, 131, 248, 78, 160, 212, 248, 116, 52, ++ 147, 248, 72, 80, 0, 45, 0, 240, 95, 129, 233, 7, 11, 213, 32, 70, 2, ++ 33, 255, 247, 109, 253, 212, 248, 116, 52, 147, 248, 72, 32, 34, 240, ++ 1, 2, 131, 248, 72, 32, 212, 248, 116, 52, 147, 248, 72, 80, 21, 240, ++ 2, 5, 0, 240, 73, 129, 1, 33, 32, 70, 255, 247, 89, 253, 212, 248, 116, ++ 52, 147, 248, 72, 32, 34, 240, 2, 2, 131, 248, 72, 32, 34, 104, 212, ++ 248, 116, 52, 145, 106, 90, 107, 138, 26, 154, 99, 30, 225, 212, 248, ++ 116, 52, 91, 108, 25, 225, 10, 241, 1, 3, 2, 43, 0, 242, 39, 129, 212, ++ 248, 116, 52, 195, 248, 68, 160, 16, 225, 212, 248, 116, 52, 147, 248, ++ 72, 48, 10, 225, 187, 241, 19, 15, 64, 243, 16, 129, 212, 248, 116, ++ 36, 0, 35, 209, 24, 145, 249, 87, 16, 1, 51, 5, 43, 69, 248, 4, 27, ++ 247, 209, 251, 224, 19, 47, 64, 242, 1, 129, 0, 35, 86, 248, 4, 43, ++ 28, 169, 210, 178, 90, 84, 1, 50, 210, 178, 2, 42, 0, 242, 255, 128, ++ 1, 51, 5, 43, 242, 209, 32, 70, 254, 247, 4, 254, 76, 231, 212, 248, ++ 116, 52, 147, 248, 81, 48, 224, 224, 212, 248, 116, 20, 32, 70, 129, ++ 248, 81, 32, 3, 34, 0, 146, 4, 33, 128, 34, 219, 1, 235, 243, 186, 247, ++ 212, 224, 35, 104, 32, 70, 81, 70, 0, 34, 27, 126, 255, 247, 166, 249, ++ 5, 70, 0, 40, 64, 240, 224, 128, 212, 248, 116, 52, 157, 248, 120, 32, ++ 163, 248, 76, 32, 216, 224, 212, 248, 116, 52, 179, 248, 76, 48, 188, ++ 224, 35, 104, 32, 70, 81, 70, 1, 34, 27, 126, 255, 247, 143, 249, 5, ++ 70, 0, 40, 64, 240, 201, 128, 212, 248, 116, 52, 157, 248, 120, 32, ++ 163, 248, 74, 32, 193, 224, 212, 248, 116, 52, 179, 248, 74, 48, 165, ++ 224, 186, 241, 100, 15, 0, 242, 180, 128, 212, 248, 116, 52, 186, 241, ++ 15, 15, 184, 191, 79, 240, 15, 10, 131, 248, 73, 160, 17, 224, 212, ++ 248, 116, 52, 147, 248, 73, 48, 146, 224, 186, 241, 100, 15, 0, 242, ++ 161, 128, 212, 248, 116, 52, 186, 241, 15, 15, 184, 191, 79, 240, 15, ++ 10, 131, 248, 122, 160, 32, 70, 255, 247, 119, 249, 130, 224, 212, 248, ++ 116, 52, 147, 248, 122, 48, 124, 224, 1, 33, 212, 248, 116, 4, 196, ++ 243, 59, 245, 95, 250, 138, 250, 130, 69, 127, 210, 30, 154, 212, 248, ++ 116, 52, 32, 70, 131, 248, 123, 32, 212, 248, 108, 18, 1, 241, 188, ++ 2, 253, 247, 11, 255, 1, 70, 0, 40, 115, 208, 32, 70, 254, 247, 223, ++ 248, 97, 224, 212, 248, 116, 52, 147, 248, 123, 48, 91, 224, 32, 70, ++ 64, 242, 212, 81, 237, 243, 48, 244, 0, 178, 192, 15, 183, 229, 32, ++ 70, 64, 242, 212, 81, 237, 243, 40, 244, 26, 240, 255, 15, 5, 208, 111, ++ 234, 64, 66, 111, 234, 82, 66, 146, 178, 1, 224, 66, 4, 82, 12, 32, ++ 70, 64, 242, 212, 81, 241, 243, 162, 242, 62, 224, 32, 70, 2, 169, 1, ++ 240, 187, 253, 40, 70, 2, 169, 104, 34, 194, 247, 16, 255, 52, 224, ++ 32, 70, 1, 240, 118, 253, 0, 35, 43, 96, 29, 70, 67, 224, 10, 241, 128, ++ 3, 255, 43, 58, 216, 212, 248, 116, 52, 131, 248, 75, 161, 36, 224, ++ 212, 248, 116, 52, 147, 249, 75, 49, 30, 224, 212, 248, 116, 52, 147, ++ 248, 28, 33, 114, 179, 211, 248, 80, 33, 32, 70, 81, 70, 211, 248, 84, ++ 49, 1, 240, 233, 253, 119, 230, 212, 248, 116, 52, 147, 248, 28, 33, ++ 2, 179, 211, 248, 76, 49, 8, 224, 212, 248, 116, 52, 163, 248, 144, ++ 160, 4, 224, 212, 248, 116, 52, 179, 248, 144, 48, 43, 96, 0, 37, 19, ++ 224, 111, 240, 36, 5, 16, 224, 111, 240, 23, 5, 13, 224, 111, 240, 13, ++ 5, 10, 224, 111, 240, 1, 5, 7, 224, 79, 240, 255, 53, 4, 224, 111, 240, ++ 28, 5, 1, 224, 111, 240, 22, 5, 40, 70, 33, 176, 189, 232, 240, 143, ++ 115, 181, 208, 248, 116, 36, 0, 35, 146, 248, 40, 16, 141, 248, 7, 48, ++ 130, 248, 39, 16, 208, 248, 116, 36, 4, 70, 130, 248, 40, 48, 208, 248, ++ 116, 52, 147, 248, 39, 80, 106, 178, 1, 50, 4, 209, 105, 70, 254, 247, ++ 159, 253, 0, 37, 28, 224, 109, 185, 13, 241, 255, 54, 38, 75, 212, 248, ++ 116, 4, 89, 93, 254, 247, 30, 253, 3, 53, 18, 45, 6, 248, 1, 15, 244, ++ 209, 238, 231, 91, 120, 141, 248, 0, 48, 141, 248, 1, 48, 141, 248, ++ 2, 48, 141, 248, 3, 48, 141, 248, 4, 48, 141, 248, 5, 48, 224, 231, ++ 212, 248, 116, 52, 238, 178, 90, 25, 146, 248, 33, 32, 10, 185, 29, ++ 248, 5, 32, 141, 248, 7, 32, 3, 235, 69, 2, 82, 125, 155, 120, 154, ++ 66, 2, 217, 0, 35, 141, 248, 7, 48, 1, 33, 13, 241, 7, 0, 196, 243, ++ 87, 244, 212, 248, 116, 52, 155, 120, 152, 66, 2, 217, 0, 35, 141, 248, ++ 7, 48, 32, 70, 49, 70, 157, 248, 7, 32, 1, 53, 254, 247, 243, 255, 6, ++ 45, 213, 209, 32, 70, 0, 33, 255, 247, 38, 252, 212, 248, 160, 1, 8, ++ 177, 54, 240, 215, 220, 124, 189, 48, 89, 4, 0, 75, 28, 4, 43, 10, 216, ++ 223, 232, 3, 240, 3, 4, 4, 9, 3, 0, 3, 33, 208, 248, 116, 52, 0, 32, ++ 25, 114, 112, 71, 111, 240, 28, 0, 112, 71, 254, 247, 55, 191, 254, ++ 247, 37, 189, 208, 248, 116, 52, 88, 137, 112, 71, 3, 104, 64, 242, ++ 110, 82, 211, 248, 216, 16, 112, 181, 139, 106, 4, 70, 147, 66, 14, ++ 208, 8, 107, 65, 242, 107, 2, 144, 66, 7, 209, 209, 43, 7, 208, 163, ++ 241, 233, 5, 106, 66, 66, 235, 5, 2, 2, 224, 0, 34, 0, 224, 1, 34, 9, ++ 107, 213, 178, 65, 242, 107, 2, 145, 66, 19, 209, 214, 43, 19, 208, ++ 245, 43, 17, 208, 239, 43, 15, 208, 64, 242, 15, 18, 147, 66, 11, 208, ++ 244, 43, 9, 208, 228, 43, 7, 208, 163, 245, 135, 112, 66, 66, 66, 235, ++ 0, 2, 2, 224, 0, 34, 0, 224, 1, 34, 65, 242, 228, 64, 129, 66, 210, ++ 178, 8, 209, 64, 242, 218, 86, 198, 235, 3, 12, 220, 241, 0, 6, 70, ++ 235, 12, 6, 0, 224, 0, 38, 22, 67, 65, 242, 107, 2, 145, 66, 44, 209, ++ 179, 245, 137, 127, 43, 208, 179, 245, 154, 127, 40, 208, 64, 242, 23, ++ 18, 147, 66, 36, 208, 64, 242, 55, 18, 147, 66, 32, 208, 64, 242, 51, ++ 18, 147, 66, 28, 208, 179, 245, 153, 127, 25, 208, 179, 245, 165, 127, ++ 22, 208, 64, 242, 41, 18, 147, 66, 18, 208, 179, 245, 161, 127, 15, ++ 208, 64, 242, 53, 18, 147, 66, 11, 208, 179, 245, 155, 127, 8, 208, ++ 64, 242, 17, 18, 152, 26, 66, 66, 66, 235, 0, 2, 2, 224, 0, 34, 0, 224, ++ 1, 34, 65, 242, 228, 64, 129, 66, 210, 178, 8, 209, 64, 242, 27, 96, ++ 192, 235, 3, 12, 220, 241, 0, 0, 64, 235, 12, 0, 0, 224, 0, 32, 2, 67, ++ 65, 242, 107, 0, 129, 66, 6, 209, 64, 242, 49, 17, 89, 26, 75, 66, 67, ++ 235, 1, 3, 0, 224, 0, 35, 212, 248, 116, 20, 0, 32, 129, 248, 97, 0, ++ 212, 248, 116, 20, 219, 178, 193, 248, 140, 0, 29, 185, 22, 185, 10, ++ 185, 0, 43, 99, 208, 1, 32, 129, 248, 97, 0, 61, 177, 212, 248, 116, ++ 20, 145, 248, 97, 0, 64, 240, 2, 0, 129, 248, 97, 0, 33, 104, 209, 248, ++ 216, 16, 136, 106, 239, 40, 12, 208, 64, 242, 15, 17, 136, 66, 8, 208, ++ 228, 40, 6, 208, 160, 245, 135, 124, 220, 241, 0, 0, 64, 235, 12, 0, ++ 0, 224, 1, 32, 212, 248, 116, 20, 13, 177, 2, 35, 2, 224, 35, 177, 79, ++ 244, 0, 83, 193, 248, 140, 48, 10, 224, 10, 177, 4, 35, 249, 231, 11, ++ 70, 22, 177, 8, 177, 8, 35, 244, 231, 16, 34, 195, 248, 140, 32, 212, ++ 248, 116, 52, 0, 38, 147, 248, 72, 80, 195, 248, 140, 96, 233, 7, 17, ++ 213, 147, 248, 97, 32, 146, 7, 32, 213, 1, 34, 147, 248, 73, 16, 32, ++ 70, 19, 70, 254, 247, 71, 255, 212, 248, 116, 52, 32, 70, 147, 248, ++ 73, 16, 50, 70, 13, 224, 141, 185, 1, 34, 179, 248, 74, 16, 32, 70, ++ 19, 70, 254, 247, 56, 255, 212, 248, 116, 52, 32, 70, 179, 248, 76, ++ 16, 42, 70, 1, 35, 189, 232, 112, 64, 254, 247, 45, 191, 112, 189, 45, ++ 233, 248, 67, 4, 70, 21, 70, 153, 70, 0, 38, 26, 224, 60, 39, 119, 67, ++ 7, 241, 56, 8, 160, 68, 40, 70, 8, 241, 10, 1, 16, 34, 194, 247, 9, ++ 253, 104, 185, 72, 70, 8, 241, 4, 1, 6, 34, 194, 247, 2, 253, 48, 185, ++ 225, 25, 8, 152, 82, 49, 32, 34, 194, 247, 14, 253, 3, 224, 1, 54, 163, ++ 107, 158, 66, 225, 211, 160, 107, 51, 26, 88, 66, 64, 235, 3, 0, 189, ++ 232, 248, 131, 45, 233, 240, 65, 68, 106, 5, 70, 4, 241, 108, 7, 56, ++ 70, 79, 244, 128, 113, 202, 243, 37, 247, 0, 40, 33, 209, 4, 241, 72, ++ 6, 49, 70, 32, 34, 56, 70, 202, 243, 90, 247, 32, 35, 227, 128, 43, ++ 105, 179, 248, 90, 48, 25, 6, 5, 212, 106, 104, 146, 248, 102, 33, 82, ++ 177, 154, 6, 8, 213, 4, 241, 196, 0, 49, 70, 32, 34, 194, 247, 219, ++ 252, 227, 136, 164, 248, 228, 48, 40, 105, 189, 232, 240, 65, 1, 240, ++ 183, 155, 35, 104, 0, 34, 152, 104, 161, 110, 19, 70, 189, 232, 240, ++ 65, 217, 243, 136, 180, 45, 233, 240, 79, 1, 58, 149, 176, 4, 70, 136, ++ 70, 208, 248, 12, 176, 6, 106, 6, 42, 0, 242, 242, 128, 223, 232, 18, ++ 240, 7, 0, 240, 0, 115, 0, 240, 0, 147, 0, 240, 0, 184, 0, 245, 104, ++ 0, 45, 0, 240, 230, 128, 182, 248, 206, 160, 26, 244, 128, 74, 12, 208, ++ 3, 104, 1, 105, 211, 248, 192, 6, 3, 104, 203, 88, 27, 120, 27, 177, ++ 19, 240, 78, 216, 130, 70, 0, 224, 154, 70, 247, 136, 32, 104, 87, 68, ++ 191, 178, 7, 241, 113, 3, 33, 105, 4, 241, 24, 2, 155, 178, 55, 240, ++ 29, 219, 5, 70, 0, 40, 0, 240, 196, 128, 95, 55, 191, 178, 208, 248, ++ 8, 144, 59, 10, 67, 234, 7, 39, 169, 248, 16, 112, 9, 241, 18, 7, 0, ++ 33, 95, 34, 56, 70, 195, 243, 255, 247, 72, 244, 132, 115, 26, 10, 137, ++ 248, 19, 32, 137, 248, 20, 48, 51, 139, 6, 241, 60, 1, 26, 10, 137, ++ 248, 21, 32, 137, 248, 22, 48, 32, 34, 9, 241, 31, 0, 194, 247, 107, ++ 252, 242, 136, 9, 241, 113, 0, 146, 68, 31, 250, 138, 250, 79, 234, ++ 26, 35, 67, 234, 10, 42, 169, 248, 111, 160, 241, 104, 194, 247, 92, ++ 252, 182, 248, 206, 48, 88, 4, 64, 241, 144, 128, 35, 104, 33, 105, ++ 211, 248, 192, 6, 3, 104, 203, 88, 27, 120, 0, 43, 0, 240, 134, 128, ++ 58, 70, 18, 240, 228, 222, 129, 224, 0, 104, 33, 105, 4, 241, 24, 2, ++ 113, 35, 55, 240, 204, 218, 5, 70, 0, 40, 115, 208, 208, 248, 8, 144, ++ 95, 34, 0, 33, 9, 241, 18, 7, 137, 248, 17, 32, 137, 248, 16, 16, 56, ++ 70, 195, 243, 178, 247, 72, 244, 128, 115, 26, 10, 137, 248, 19, 32, ++ 137, 248, 20, 48, 51, 139, 30, 224, 0, 104, 33, 105, 4, 241, 24, 2, ++ 113, 35, 55, 240, 172, 218, 5, 70, 0, 40, 83, 208, 208, 248, 8, 144, ++ 95, 34, 0, 33, 9, 241, 18, 7, 137, 248, 17, 32, 137, 248, 16, 16, 56, ++ 70, 195, 243, 146, 247, 72, 244, 64, 115, 26, 10, 137, 248, 19, 32, ++ 137, 248, 20, 48, 243, 138, 26, 10, 137, 248, 21, 32, 137, 248, 22, ++ 48, 60, 224, 0, 104, 33, 105, 4, 241, 24, 2, 113, 35, 55, 240, 135, ++ 218, 5, 70, 120, 179, 208, 248, 8, 144, 0, 33, 95, 34, 9, 241, 18, 7, ++ 137, 248, 16, 16, 137, 248, 17, 32, 56, 70, 195, 243, 110, 247, 79, ++ 234, 24, 35, 137, 248, 19, 48, 137, 248, 20, 128, 31, 224, 182, 248, ++ 206, 0, 201, 247, 146, 253, 1, 70, 72, 70, 6, 241, 140, 2, 107, 70, ++ 198, 243, 240, 240, 4, 70, 48, 185, 41, 70, 88, 70, 34, 70, 203, 247, ++ 165, 251, 37, 70, 7, 224, 7, 241, 77, 0, 105, 70, 16, 34, 194, 247, ++ 205, 251, 0, 224, 0, 37, 40, 70, 21, 176, 189, 232, 240, 143, 3, 35, ++ 137, 248, 15, 48, 182, 248, 206, 0, 201, 247, 252, 253, 6, 241, 92, ++ 4, 0, 40, 12, 191, 254, 35, 2, 35, 56, 70, 8, 34, 0, 248, 5, 59, 33, ++ 70, 194, 247, 179, 251, 8, 33, 32, 70, 198, 243, 185, 240, 24, 240, ++ 3, 1, 201, 209, 195, 231, 45, 233, 240, 79, 145, 248, 19, 128, 11, 125, ++ 139, 176, 67, 234, 8, 40, 24, 240, 3, 9, 4, 70, 14, 70, 7, 146, 71, ++ 105, 5, 106, 205, 248, 32, 128, 5, 209, 181, 248, 206, 0, 201, 247, ++ 68, 253, 132, 70, 0, 224, 204, 70, 5, 241, 92, 10, 6, 241, 23, 11, 1, ++ 32, 8, 35, 89, 70, 82, 70, 205, 248, 16, 192, 197, 243, 208, 244, 130, ++ 69, 221, 248, 16, 192, 0, 240, 200, 131, 24, 244, 128, 114, 6, 146, ++ 16, 208, 51, 138, 26, 10, 66, 234, 3, 35, 155, 178, 92, 43, 64, 242, ++ 188, 131, 48, 70, 97, 70, 5, 241, 140, 2, 197, 243, 93, 247, 0, 40, ++ 0, 240, 179, 131, 51, 138, 26, 10, 66, 234, 3, 35, 155, 178, 94, 43, ++ 64, 242, 171, 131, 150, 248, 111, 16, 150, 248, 112, 32, 66, 234, 1, ++ 34, 95, 50, 147, 66, 192, 240, 161, 131, 6, 241, 18, 3, 89, 70, 8, 34, ++ 80, 70, 9, 147, 194, 247, 82, 251, 5, 241, 100, 0, 89, 70, 8, 34, 194, ++ 247, 76, 251, 181, 248, 206, 0, 201, 247, 132, 253, 0, 40, 103, 208, ++ 24, 244, 128, 95, 100, 208, 150, 248, 111, 32, 150, 248, 112, 48, 67, ++ 234, 2, 35, 179, 245, 128, 127, 11, 221, 56, 70, 33, 105, 1, 34, 46, ++ 240, 7, 218, 32, 105, 4, 241, 24, 1, 1, 34, 55, 240, 77, 219, 186, 226, ++ 79, 244, 128, 112, 203, 247, 196, 250, 130, 70, 48, 185, 56, 70, 33, ++ 105, 1, 34, 46, 240, 245, 217, 209, 70, 105, 227, 32, 32, 203, 247, ++ 184, 250, 131, 70, 72, 185, 80, 70, 203, 247, 182, 250, 56, 70, 33, ++ 105, 1, 34, 46, 240, 230, 217, 217, 70, 90, 227, 79, 244, 129, 112, ++ 203, 247, 168, 250, 5, 144, 72, 185, 80, 70, 203, 247, 166, 250, 88, ++ 70, 203, 247, 163, 250, 56, 70, 33, 105, 1, 34, 198, 226, 185, 241, ++ 0, 15, 4, 209, 181, 248, 206, 0, 201, 247, 170, 252, 129, 70, 5, 154, ++ 73, 70, 0, 35, 2, 146, 9, 152, 5, 241, 156, 2, 141, 232, 0, 12, 197, ++ 243, 13, 247, 129, 70, 80, 70, 203, 247, 136, 250, 88, 70, 203, 247, ++ 133, 250, 5, 152, 203, 247, 130, 250, 185, 241, 0, 15, 3, 209, 56, 70, ++ 33, 105, 1, 34, 243, 226, 150, 248, 21, 160, 179, 125, 181, 248, 206, ++ 0, 67, 234, 10, 42, 197, 243, 99, 243, 16, 185, 24, 240, 8, 11, 43, ++ 208, 186, 241, 13, 15, 11, 208, 3, 216, 186, 241, 5, 15, 21, 209, 13, ++ 224, 186, 241, 16, 15, 24, 208, 186, 241, 32, 15, 14, 209, 17, 224, ++ 24, 240, 8, 15, 20, 208, 56, 70, 33, 105, 2, 34, 69, 226, 24, 240, 8, ++ 15, 16, 208, 56, 70, 33, 105, 3, 34, 62, 226, 56, 70, 33, 105, 4, 34, ++ 58, 226, 79, 240, 2, 11, 7, 224, 79, 240, 4, 11, 4, 224, 79, 240, 3, ++ 11, 1, 224, 79, 240, 1, 11, 24, 240, 8, 9, 0, 240, 249, 129, 43, 138, ++ 91, 69, 3, 208, 56, 70, 33, 105, 5, 34, 36, 226, 6, 155, 0, 43, 64, ++ 240, 195, 128, 3, 35, 43, 96, 181, 248, 206, 48, 88, 6, 5, 212, 98, ++ 104, 146, 248, 102, 33, 106, 179, 153, 6, 43, 213, 19, 244, 128, 73, ++ 40, 209, 150, 248, 111, 16, 150, 248, 112, 48, 4, 34, 6, 241, 113, 0, ++ 67, 234, 1, 33, 197, 243, 106, 247, 2, 70, 80, 179, 67, 120, 19, 43, ++ 3, 216, 56, 70, 33, 105, 4, 34, 136, 226, 99, 106, 33, 105, 72, 51, ++ 0, 147, 79, 240, 32, 9, 32, 70, 6, 50, 1, 241, 188, 3, 205, 248, 4, ++ 144, 255, 247, 55, 253, 0, 40, 64, 240, 169, 130, 99, 106, 163, 248, ++ 6, 144, 14, 224, 26, 6, 12, 213, 97, 106, 177, 248, 228, 32, 66, 177, ++ 1, 241, 72, 0, 196, 49, 194, 247, 83, 250, 99, 106, 179, 248, 228, 32, ++ 218, 128, 99, 106, 219, 136, 0, 43, 0, 240, 145, 130, 5, 241, 28, 9, ++ 6, 241, 31, 1, 32, 34, 72, 70, 5, 241, 60, 6, 194, 247, 64, 250, 32, ++ 34, 32, 104, 49, 70, 234, 243, 101, 242, 181, 248, 206, 224, 30, 244, ++ 128, 79, 10, 208, 35, 104, 33, 105, 211, 248, 192, 6, 3, 104, 203, 88, ++ 27, 120, 19, 177, 18, 240, 90, 221, 69, 224, 35, 104, 27, 104, 147, ++ 248, 102, 49, 27, 179, 33, 105, 10, 109, 19, 5, 12, 212, 73, 242, 32, ++ 3, 14, 234, 3, 3, 59, 185, 209, 248, 244, 48, 147, 248, 131, 48, 152, ++ 6, 20, 213, 146, 5, 18, 213, 99, 106, 4, 241, 24, 0, 3, 241, 72, 2, ++ 0, 146, 219, 136, 194, 49, 1, 147, 5, 241, 140, 3, 2, 147, 171, 138, ++ 74, 70, 3, 147, 51, 70, 197, 243, 225, 242, 28, 224, 33, 105, 4, 241, ++ 24, 10, 80, 70, 194, 49, 6, 34, 194, 247, 231, 249, 0, 40, 0, 240, 62, ++ 130, 99, 106, 33, 105, 3, 241, 72, 2, 0, 146, 219, 136, 80, 70, 1, 147, ++ 5, 241, 140, 3, 2, 147, 171, 138, 194, 49, 3, 147, 74, 70, 51, 70, 197, ++ 243, 195, 244, 64, 246, 59, 98, 56, 70, 33, 105, 8, 234, 2, 2, 1, 35, ++ 46, 240, 242, 216, 8, 177, 4, 35, 46, 225, 56, 70, 33, 105, 13, 34, ++ 46, 240, 166, 216, 25, 226, 7, 155, 75, 185, 151, 248, 22, 144, 185, ++ 241, 0, 15, 12, 191, 79, 244, 0, 121, 79, 240, 0, 9, 1, 224, 79, 240, ++ 0, 9, 181, 248, 206, 0, 201, 247, 253, 251, 65, 242, 200, 51, 0, 40, ++ 8, 191, 79, 244, 228, 115, 3, 234, 8, 2, 24, 191, 79, 240, 0, 9, 154, ++ 66, 64, 240, 250, 129, 25, 234, 8, 15, 64, 240, 246, 129, 43, 104, 3, ++ 59, 4, 43, 0, 242, 241, 129, 41, 70, 5, 35, 65, 248, 28, 59, 6, 241, ++ 31, 0, 32, 34, 194, 247, 142, 249, 0, 40, 64, 240, 229, 129, 150, 248, ++ 111, 160, 150, 248, 112, 48, 181, 248, 206, 0, 67, 234, 10, 42, 201, ++ 247, 208, 251, 0, 40, 65, 208, 6, 241, 113, 3, 24, 70, 81, 70, 48, 34, ++ 5, 147, 201, 247, 116, 250, 129, 70, 200, 177, 181, 248, 206, 48, 66, ++ 120, 91, 4, 64, 241, 207, 129, 35, 104, 33, 105, 211, 248, 192, 54, ++ 27, 104, 203, 88, 27, 120, 0, 43, 0, 240, 197, 129, 18, 58, 146, 178, ++ 193, 225, 168, 104, 9, 241, 2, 1, 2, 48, 194, 247, 92, 249, 24, 177, ++ 56, 70, 33, 105, 7, 34, 22, 224, 5, 155, 153, 248, 1, 32, 10, 235, 3, ++ 1, 201, 235, 1, 1, 137, 178, 144, 28, 129, 66, 29, 221, 111, 240, 1, ++ 3, 155, 26, 72, 68, 201, 24, 48, 34, 201, 247, 65, 250, 160, 177, 33, ++ 105, 56, 70, 6, 34, 46, 240, 35, 216, 9, 224, 171, 136, 83, 69, 6, 209, ++ 168, 104, 6, 241, 113, 1, 82, 70, 194, 247, 52, 249, 32, 177, 32, 105, ++ 4, 241, 24, 1, 17, 34, 23, 224, 181, 248, 206, 0, 201, 247, 121, 251, ++ 168, 177, 6, 241, 113, 0, 81, 70, 201, 247, 235, 250, 24, 177, 67, 120, ++ 6, 59, 32, 43, 11, 217, 56, 70, 33, 105, 9, 34, 45, 240, 255, 223, 32, ++ 105, 4, 241, 24, 1, 1, 34, 55, 240, 69, 217, 108, 225, 64, 242, 11, ++ 34, 56, 70, 33, 105, 8, 234, 2, 2, 3, 35, 46, 240, 51, 216, 129, 70, ++ 40, 177, 6, 35, 24, 240, 64, 9, 43, 96, 4, 209, 24, 224, 56, 70, 33, ++ 105, 13, 34, 38, 225, 4, 241, 24, 2, 5, 146, 42, 138, 43, 139, 0, 146, ++ 5, 154, 32, 104, 1, 146, 33, 105, 5, 241, 172, 2, 55, 240, 193, 216, ++ 181, 248, 206, 0, 201, 247, 59, 251, 0, 40, 51, 208, 3, 224, 56, 70, ++ 33, 105, 8, 34, 13, 225, 81, 70, 6, 241, 113, 0, 201, 247, 167, 250, ++ 66, 120, 128, 70, 6, 58, 146, 178, 234, 130, 131, 121, 5, 241, 108, ++ 9, 3, 240, 3, 3, 133, 248, 204, 48, 8, 241, 8, 1, 72, 70, 194, 247, ++ 226, 248, 149, 248, 204, 32, 235, 138, 141, 232, 4, 8, 6, 241, 79, 2, ++ 2, 146, 152, 248, 6, 32, 33, 105, 2, 240, 4, 2, 3, 146, 32, 104, 74, ++ 70, 55, 240, 16, 216, 35, 104, 33, 105, 211, 248, 100, 6, 50, 70, 236, ++ 247, 251, 252, 181, 248, 206, 0, 201, 247, 1, 251, 192, 177, 8, 35, ++ 43, 96, 56, 70, 33, 105, 0, 34, 45, 240, 143, 223, 35, 105, 5, 154, ++ 219, 104, 32, 104, 0, 147, 121, 33, 6, 35, 209, 247, 201, 254, 35, 104, ++ 34, 105, 211, 248, 192, 54, 27, 104, 211, 88, 0, 34, 26, 112, 241, 224, ++ 6, 35, 43, 96, 238, 224, 43, 104, 5, 43, 64, 242, 235, 128, 35, 106, ++ 90, 138, 90, 69, 8, 208, 179, 248, 206, 0, 197, 243, 42, 241, 24, 177, ++ 56, 70, 33, 105, 10, 34, 172, 224, 8, 244, 96, 115, 179, 245, 96, 127, ++ 64, 240, 216, 128, 7, 35, 43, 96, 181, 248, 206, 0, 201, 247, 199, 250, ++ 129, 70, 0, 40, 64, 208, 150, 248, 111, 16, 150, 248, 112, 48, 6, 241, ++ 113, 0, 67, 234, 1, 33, 201, 247, 50, 250, 129, 70, 24, 177, 66, 120, ++ 6, 58, 32, 42, 7, 217, 33, 105, 56, 70, 11, 34, 45, 240, 69, 223, 79, ++ 240, 0, 9, 184, 224, 146, 178, 234, 130, 131, 121, 5, 241, 108, 10, ++ 3, 240, 3, 3, 133, 248, 204, 48, 9, 241, 8, 1, 80, 70, 194, 247, 98, ++ 248, 149, 248, 204, 32, 235, 138, 0, 146, 106, 138, 33, 105, 1, 146, ++ 6, 241, 79, 2, 2, 146, 153, 248, 6, 32, 32, 104, 2, 240, 4, 2, 3, 146, ++ 82, 70, 54, 240, 143, 223, 35, 104, 33, 105, 211, 248, 100, 6, 50, 70, ++ 236, 247, 122, 252, 112, 224, 186, 241, 32, 15, 86, 216, 79, 244, 128, ++ 112, 202, 247, 218, 255, 5, 144, 56, 185, 33, 105, 56, 70, 12, 34, 45, ++ 240, 11, 223, 221, 248, 20, 144, 126, 224, 32, 32, 202, 247, 205, 255, ++ 6, 144, 80, 185, 5, 152, 202, 247, 203, 255, 56, 70, 33, 105, 12, 34, ++ 45, 240, 251, 222, 221, 248, 24, 144, 110, 224, 79, 244, 129, 112, 202, ++ 247, 188, 255, 132, 70, 128, 185, 5, 152, 205, 248, 16, 192, 202, 247, ++ 184, 255, 6, 152, 202, 247, 181, 255, 56, 70, 33, 105, 12, 34, 45, 240, ++ 229, 222, 221, 248, 16, 192, 225, 70, 87, 224, 5, 241, 108, 3, 7, 147, ++ 5, 154, 6, 155, 65, 70, 0, 146, 1, 147, 5, 241, 156, 2, 7, 155, 2, 144, ++ 9, 152, 205, 248, 16, 192, 197, 243, 22, 244, 129, 70, 5, 152, 202, ++ 247, 151, 255, 6, 152, 202, 247, 148, 255, 221, 248, 16, 192, 96, 70, ++ 202, 247, 143, 255, 165, 248, 22, 160, 185, 241, 0, 15, 5, 209, 33, ++ 105, 56, 70, 12, 34, 45, 240, 186, 222, 47, 224, 8, 154, 8, 240, 48, ++ 3, 27, 17, 141, 232, 8, 8, 2, 240, 64, 3, 79, 54, 3, 147, 32, 104, 33, ++ 105, 7, 154, 83, 70, 2, 150, 54, 240, 22, 223, 56, 70, 33, 105, 8, 240, ++ 11, 2, 5, 35, 45, 240, 229, 222, 40, 177, 8, 35, 43, 96, 56, 70, 33, ++ 105, 0, 34, 2, 224, 33, 105, 56, 70, 13, 34, 45, 240, 149, 222, 35, ++ 105, 32, 104, 219, 104, 121, 33, 0, 147, 4, 241, 24, 2, 6, 35, 209, ++ 247, 206, 253, 79, 240, 1, 9, 72, 70, 11, 176, 189, 232, 240, 143, 169, ++ 136, 147, 28, 153, 66, 127, 244, 64, 174, 55, 230, 16, 181, 120, 177, ++ 113, 177, 4, 104, 9, 89, 89, 177, 82, 177, 128, 138, 9, 24, 72, 106, ++ 17, 70, 195, 128, 26, 70, 72, 48, 189, 232, 16, 64, 193, 247, 155, 191, ++ 16, 189, 248, 181, 21, 70, 2, 104, 131, 138, 138, 88, 211, 24, 92, 106, ++ 227, 136, 3, 179, 43, 136, 7, 43, 29, 217, 162, 136, 154, 66, 29, 209, ++ 47, 29, 56, 70, 4, 241, 8, 1, 195, 243, 193, 243, 88, 177, 18, 224, ++ 163, 25, 56, 70, 41, 136, 10, 74, 147, 248, 72, 48, 195, 243, 97, 243, ++ 1, 54, 63, 24, 0, 224, 6, 70, 227, 136, 158, 66, 240, 219, 64, 35, 43, ++ 128, 0, 32, 248, 189, 79, 240, 255, 48, 248, 189, 79, 240, 255, 48, ++ 248, 189, 242, 27, 4, 0, 240, 181, 12, 70, 17, 70, 2, 104, 135, 176, ++ 162, 88, 134, 138, 0, 42, 119, 208, 16, 104, 0, 40, 119, 208, 136, 123, ++ 149, 25, 133, 248, 40, 0, 200, 123, 3, 40, 30, 209, 23, 104, 2, 63, ++ 1, 47, 26, 216, 15, 138, 79, 234, 23, 44, 76, 234, 7, 39, 191, 178, ++ 76, 47, 7, 216, 147, 89, 27, 104, 211, 248, 136, 48, 90, 110, 1, 50, ++ 90, 102, 91, 224, 142, 124, 254, 46, 1, 208, 2, 46, 5, 209, 40, 70, ++ 26, 70, 255, 247, 141, 251, 1, 32, 81, 224, 19, 104, 2, 43, 77, 209, ++ 0, 40, 75, 209, 139, 125, 1, 43, 73, 209, 139, 124, 1, 43, 70, 209, ++ 42, 106, 178, 248, 206, 48, 153, 7, 5, 212, 8, 43, 3, 208, 16, 43, 1, ++ 208, 91, 6, 59, 213, 1, 35, 19, 96, 107, 106, 0, 37, 221, 128, 180, ++ 248, 162, 51, 180, 248, 190, 0, 180, 248, 188, 32, 88, 64, 180, 248, ++ 160, 51, 83, 64, 24, 67, 180, 248, 192, 32, 180, 248, 164, 51, 83, 64, ++ 24, 67, 128, 178, 24, 179, 4, 241, 188, 6, 32, 70, 49, 70, 230, 247, ++ 11, 251, 224, 177, 39, 124, 49, 70, 197, 235, 7, 14, 222, 241, 0, 7, ++ 71, 235, 14, 7, 4, 245, 104, 112, 6, 34, 193, 247, 244, 254, 32, 104, ++ 33, 70, 125, 34, 51, 70, 0, 149, 1, 149, 2, 151, 3, 149, 4, 149, 228, ++ 243, 247, 243, 40, 70, 2, 224, 16, 70, 0, 224, 0, 32, 7, 176, 240, 189, ++ 45, 233, 255, 71, 144, 232, 16, 2, 142, 121, 5, 70, 15, 70, 0, 46, 87, ++ 209, 64, 242, 4, 64, 202, 247, 111, 254, 128, 70, 0, 40, 83, 208, 56, ++ 81, 49, 70, 64, 242, 4, 66, 195, 243, 76, 242, 171, 138, 217, 248, 188, ++ 38, 8, 235, 3, 4, 72, 248, 3, 144, 43, 105, 79, 240, 1, 10, 227, 96, ++ 235, 104, 98, 97, 163, 96, 171, 104, 39, 97, 99, 96, 212, 32, 200, 248, ++ 0, 96, 136, 248, 4, 160, 202, 247, 78, 254, 32, 98, 0, 40, 55, 208, ++ 49, 70, 212, 34, 195, 243, 45, 242, 232, 32, 202, 247, 68, 254, 96, ++ 98, 0, 40, 45, 208, 49, 70, 232, 34, 195, 243, 35, 242, 212, 248, 36, ++ 128, 232, 104, 200, 248, 0, 144, 20, 73, 34, 70, 51, 70, 216, 243, 3, ++ 247, 200, 248, 104, 0, 224, 177, 232, 104, 17, 73, 34, 70, 51, 70, 216, ++ 243, 250, 246, 96, 99, 160, 177, 35, 106, 40, 106, 1, 147, 99, 106, ++ 105, 70, 0, 151, 2, 147, 141, 248, 12, 160, 194, 243, 103, 244, 48, ++ 70, 4, 224, 111, 240, 6, 0, 1, 224, 79, 240, 255, 48, 4, 176, 189, 232, ++ 240, 135, 40, 70, 57, 70, 44, 240, 231, 218, 245, 231, 17, 250, 3, 0, ++ 61, 208, 134, 0, 240, 181, 3, 104, 137, 176, 205, 88, 12, 70, 131, 138, ++ 0, 45, 44, 208, 42, 121, 82, 179, 238, 88, 43, 104, 59, 179, 209, 248, ++ 236, 112, 214, 248, 188, 6, 1, 241, 188, 2, 45, 240, 17, 220, 2, 47, ++ 23, 208, 5, 171, 0, 147, 7, 171, 1, 147, 214, 248, 188, 6, 33, 70, 4, ++ 170, 6, 171, 44, 240, 62, 217, 6, 155, 33, 70, 0, 147, 5, 155, 1, 147, ++ 7, 155, 2, 147, 214, 248, 188, 6, 42, 104, 4, 155, 44, 240, 61, 218, ++ 214, 248, 188, 6, 33, 70, 1, 34, 45, 240, 237, 220, 9, 176, 240, 189, ++ 45, 233, 248, 67, 21, 70, 2, 104, 153, 70, 138, 88, 131, 138, 0, 39, ++ 12, 70, 2, 235, 3, 8, 62, 70, 15, 224, 60, 38, 6, 251, 7, 134, 60, 54, ++ 40, 70, 49, 70, 6, 34, 193, 247, 16, 254, 32, 185, 180, 248, 90, 32, ++ 179, 107, 154, 66, 4, 208, 1, 55, 216, 248, 56, 48, 159, 66, 235, 211, ++ 216, 248, 56, 48, 159, 66, 14, 209, 15, 47, 6, 216, 60, 38, 6, 251, ++ 7, 134, 1, 55, 60, 54, 200, 248, 56, 112, 38, 177, 48, 70, 41, 70, 6, ++ 34, 193, 247, 5, 254, 6, 241, 22, 5, 0, 33, 32, 34, 40, 70, 195, 243, ++ 126, 241, 216, 248, 36, 16, 32, 34, 72, 49, 40, 70, 193, 247, 247, 253, ++ 176, 29, 73, 70, 16, 34, 193, 247, 242, 253, 180, 248, 90, 48, 179, ++ 99, 189, 232, 248, 131, 45, 233, 240, 79, 135, 176, 5, 147, 3, 104, ++ 221, 248, 64, 128, 176, 248, 20, 176, 81, 248, 3, 160, 64, 70, 13, 70, ++ 4, 146, 10, 235, 11, 9, 200, 247, 23, 254, 0, 40, 64, 240, 145, 128, ++ 6, 70, 4, 70, 15, 224, 60, 36, 4, 251, 6, 148, 60, 52, 64, 70, 33, 70, ++ 6, 34, 193, 247, 185, 253, 32, 185, 181, 248, 90, 32, 163, 107, 154, ++ 66, 4, 208, 1, 54, 217, 248, 56, 48, 158, 66, 235, 211, 217, 248, 56, ++ 48, 158, 66, 13, 209, 15, 46, 6, 216, 60, 36, 4, 251, 6, 148, 1, 54, ++ 60, 52, 201, 248, 56, 96, 32, 70, 65, 70, 6, 34, 193, 247, 175, 253, ++ 0, 44, 104, 208, 4, 241, 22, 6, 48, 70, 0, 33, 32, 34, 195, 243, 38, ++ 241, 48, 70, 4, 153, 5, 154, 193, 247, 161, 253, 181, 248, 90, 48, 128, ++ 32, 163, 99, 202, 247, 53, 253, 6, 70, 0, 40, 86, 208, 80, 32, 202, ++ 247, 47, 253, 7, 70, 24, 185, 48, 70, 202, 247, 45, 253, 77, 224, 90, ++ 248, 11, 0, 3, 104, 147, 248, 102, 49, 147, 177, 181, 248, 90, 48, 153, ++ 6, 14, 213, 66, 70, 41, 70, 252, 247, 2, 254, 2, 70, 64, 179, 90, 248, ++ 11, 48, 41, 70, 211, 248, 80, 8, 163, 29, 251, 247, 91, 254, 31, 224, ++ 217, 248, 16, 48, 26, 109, 18, 5, 5, 212, 211, 248, 244, 48, 147, 248, ++ 131, 48, 152, 6, 10, 213, 163, 29, 141, 232, 200, 0, 64, 70, 5, 241, ++ 194, 1, 4, 154, 5, 155, 196, 243, 1, 246, 9, 224, 163, 29, 141, 232, ++ 200, 0, 64, 70, 5, 241, 194, 1, 4, 154, 5, 155, 196, 243, 248, 247, ++ 48, 70, 202, 247, 240, 252, 56, 70, 202, 247, 237, 252, 17, 155, 123, ++ 177, 24, 70, 161, 29, 16, 34, 193, 247, 73, 253, 0, 32, 9, 224, 111, ++ 240, 1, 0, 6, 224, 79, 240, 255, 48, 3, 224, 111, 240, 26, 0, 0, 224, ++ 17, 152, 7, 176, 189, 232, 240, 143, 45, 233, 247, 79, 221, 248, 48, ++ 128, 23, 70, 184, 248, 0, 32, 131, 70, 12, 70, 29, 70, 157, 248, 52, ++ 160, 0, 42, 0, 240, 161, 128, 184, 248, 2, 144, 0, 38, 25, 240, 1, 9, ++ 206, 128, 142, 128, 87, 208, 64, 42, 68, 209, 8, 70, 51, 70, 8, 241, ++ 4, 1, 0, 150, 54, 240, 244, 219, 176, 66, 192, 242, 143, 128, 183, 248, ++ 206, 0, 200, 247, 109, 255, 16, 179, 186, 241, 0, 15, 31, 208, 219, ++ 248, 188, 6, 3, 104, 235, 88, 139, 177, 27, 121, 123, 177, 183, 248, ++ 206, 48, 91, 6, 11, 213, 5, 241, 188, 2, 141, 232, 68, 0, 227, 136, ++ 41, 70, 4, 241, 72, 2, 255, 247, 13, 255, 0, 40, 116, 209, 181, 248, ++ 90, 48, 88, 4, 4, 213, 219, 248, 192, 6, 41, 70, 18, 240, 29, 216, 183, ++ 248, 206, 0, 16, 240, 128, 0, 2, 209, 186, 241, 0, 15, 99, 209, 4, 241, ++ 196, 0, 4, 241, 72, 1, 226, 136, 193, 247, 224, 252, 227, 136, 164, ++ 248, 228, 48, 79, 224, 162, 241, 8, 3, 155, 178, 55, 43, 78, 216, 1, ++ 241, 8, 0, 8, 241, 4, 1, 193, 247, 209, 252, 184, 248, 0, 128, 48, 70, ++ 164, 248, 4, 128, 71, 224, 32, 42, 67, 216, 1, 241, 72, 6, 48, 70, 8, ++ 241, 4, 1, 193, 247, 194, 252, 183, 248, 206, 48, 184, 248, 0, 32, 25, ++ 6, 164, 248, 4, 144, 226, 128, 2, 212, 186, 241, 0, 15, 7, 209, 4, 241, ++ 196, 0, 49, 70, 193, 247, 177, 252, 227, 136, 164, 248, 228, 48, 219, ++ 248, 188, 6, 3, 104, 235, 88, 147, 177, 27, 121, 131, 177, 183, 248, ++ 206, 48, 91, 6, 12, 213, 186, 241, 0, 15, 9, 208, 5, 241, 188, 2, 0, ++ 146, 0, 34, 1, 146, 227, 136, 41, 70, 50, 70, 255, 247, 169, 254, 181, ++ 248, 90, 0, 16, 244, 128, 64, 13, 208, 219, 248, 192, 6, 41, 70, 17, ++ 240, 186, 223, 0, 32, 6, 224, 16, 70, 4, 224, 79, 240, 255, 48, 1, 224, ++ 111, 240, 1, 0, 189, 232, 254, 143, 45, 233, 240, 71, 146, 70, 2, 104, ++ 31, 70, 138, 88, 131, 138, 12, 70, 2, 235, 3, 8, 0, 37, 27, 224, 207, ++ 177, 60, 38, 6, 251, 5, 134, 6, 241, 60, 9, 80, 70, 73, 70, 6, 34, 56, ++ 54, 193, 247, 86, 252, 104, 185, 180, 248, 90, 32, 243, 107, 154, 66, ++ 8, 209, 56, 70, 6, 241, 10, 1, 16, 34, 193, 247, 93, 252, 1, 32, 189, ++ 232, 240, 135, 1, 53, 216, 248, 56, 48, 157, 66, 223, 211, 0, 32, 189, ++ 232, 240, 135, 3, 104, 16, 181, 203, 88, 123, 177, 132, 138, 0, 33, ++ 28, 25, 32, 106, 8, 34, 92, 48, 194, 243, 198, 247, 32, 106, 0, 33, ++ 100, 48, 8, 34, 189, 232, 16, 64, 194, 243, 190, 183, 16, 189, 2, 104, ++ 112, 181, 131, 138, 141, 88, 12, 70, 6, 70, 237, 24, 45, 240, 6, 217, ++ 48, 70, 33, 70, 255, 247, 192, 253, 4, 245, 104, 114, 6, 50, 35, 122, ++ 33, 70, 48, 70, 45, 240, 234, 217, 6, 70, 32, 70, 230, 247, 103, 251, ++ 43, 106, 8, 34, 26, 96, 48, 70, 112, 189, 56, 181, 29, 70, 144, 177, ++ 3, 104, 132, 138, 203, 88, 115, 177, 28, 25, 17, 70, 4, 241, 48, 0, ++ 16, 34, 193, 247, 17, 252, 4, 241, 64, 0, 41, 70, 32, 34, 189, 232, ++ 56, 64, 193, 247, 9, 188, 56, 189, 240, 181, 208, 248, 116, 68, 133, ++ 176, 148, 248, 28, 49, 6, 70, 148, 248, 233, 80, 19, 185, 132, 248, ++ 40, 49, 76, 224, 3, 106, 13, 241, 15, 1, 24, 105, 237, 247, 6, 253, ++ 157, 248, 15, 48, 1, 43, 20, 191, 2, 33, 3, 33, 211, 241, 1, 2, 56, ++ 191, 0, 34, 132, 248, 175, 32, 23, 70, 0, 34, 196, 248, 204, 32, 196, ++ 248, 200, 32, 196, 248, 208, 32, 196, 248, 212, 32, 3, 241, 24, 2, 4, ++ 235, 130, 2, 210, 248, 172, 0, 1, 48, 194, 248, 172, 0, 214, 248, 32, ++ 35, 2, 42, 22, 208, 212, 248, 224, 0, 212, 248, 228, 32, 144, 66, 16, ++ 217, 152, 28, 4, 235, 128, 0, 4, 235, 67, 3, 179, 249, 178, 32, 208, ++ 248, 176, 224, 194, 235, 14, 2, 82, 250, 5, 245, 192, 248, 176, 32, ++ 163, 248, 178, 80, 132, 248, 73, 113, 0, 37, 1, 35, 1, 147, 48, 105, ++ 42, 70, 11, 70, 0, 149, 228, 247, 41, 251, 132, 248, 40, 81, 5, 176, ++ 240, 189, 16, 181, 10, 122, 208, 248, 116, 52, 42, 179, 144, 248, 45, ++ 34, 209, 248, 244, 0, 42, 177, 144, 248, 96, 0, 144, 66, 40, 191, 2, ++ 70, 1, 224, 144, 248, 96, 32, 209, 248, 4, 1, 4, 120, 100, 177, 0, 122, ++ 209, 248, 244, 16, 24, 177, 201, 141, 74, 67, 0, 33, 1, 224, 202, 141, ++ 1, 33, 131, 248, 41, 17, 5, 224, 1, 34, 131, 248, 41, 33, 209, 248, ++ 244, 32, 210, 141, 10, 50, 3, 224, 131, 248, 41, 33, 79, 244, 155, 114, ++ 195, 248, 36, 33, 16, 189, 45, 233, 240, 79, 139, 176, 23, 70, 155, ++ 70, 157, 249, 80, 32, 157, 248, 84, 48, 208, 248, 116, 68, 3, 146, 7, ++ 147, 157, 248, 92, 32, 24, 155, 8, 146, 9, 147, 180, 248, 198, 32, 180, ++ 248, 240, 48, 5, 146, 6, 147, 212, 248, 216, 32, 148, 248, 28, 49, 5, ++ 70, 14, 70, 157, 248, 88, 128, 148, 248, 233, 160, 4, 146, 0, 43, 0, ++ 240, 77, 129, 148, 248, 40, 49, 59, 177, 128, 104, 212, 248, 48, 17, ++ 216, 243, 48, 243, 0, 35, 132, 248, 40, 49, 142, 33, 40, 105, 4, 240, ++ 109, 223, 67, 0, 78, 51, 79, 246, 254, 113, 25, 64, 40, 105, 4, 240, ++ 101, 223, 148, 248, 88, 49, 129, 70, 255, 43, 8, 208, 148, 248, 232, ++ 48, 1, 34, 18, 250, 3, 243, 0, 234, 3, 9, 31, 250, 137, 249, 148, 248, ++ 175, 48, 67, 69, 20, 208, 0, 35, 8, 241, 50, 2, 4, 235, 130, 2, 195, ++ 235, 8, 1, 147, 96, 74, 66, 66, 235, 1, 2, 50, 50, 4, 235, 130, 2, 132, ++ 248, 175, 128, 196, 248, 204, 48, 196, 248, 200, 48, 147, 96, 187, 241, ++ 0, 15, 0, 240, 11, 129, 7, 155, 203, 185, 2, 46, 64, 243, 6, 129, 198, ++ 235, 11, 11, 180, 249, 242, 32, 15, 250, 139, 251, 4, 235, 72, 3, 147, ++ 69, 168, 191, 90, 70, 163, 248, 234, 32, 213, 248, 116, 52, 91, 121, ++ 1, 43, 37, 217, 3, 154, 211, 27, 164, 248, 238, 48, 32, 224, 6, 154, ++ 19, 178, 4, 235, 72, 2, 178, 249, 234, 96, 198, 235, 11, 6, 246, 26, ++ 2, 46, 3, 221, 28, 46, 168, 191, 28, 38, 0, 224, 3, 38, 213, 248, 116, ++ 36, 82, 121, 1, 42, 11, 217, 180, 249, 238, 112, 3, 154, 215, 27, 255, ++ 26, 2, 47, 3, 221, 28, 47, 168, 191, 28, 39, 0, 224, 3, 39, 213, 248, ++ 108, 50, 155, 121, 43, 185, 8, 155, 27, 177, 40, 70, 9, 153, 255, 247, ++ 31, 255, 212, 248, 224, 48, 212, 248, 228, 32, 147, 66, 3, 217, 5, 152, ++ 0, 178, 3, 144, 7, 224, 1, 51, 212, 248, 220, 32, 196, 248, 224, 48, ++ 1, 35, 4, 146, 3, 147, 8, 241, 84, 11, 8, 241, 44, 1, 4, 235, 129, 1, ++ 4, 235, 75, 2, 209, 248, 8, 192, 178, 249, 10, 0, 1, 35, 192, 235, 12, ++ 0, 128, 25, 136, 96, 64, 250, 10, 240, 8, 241, 50, 1, 4, 235, 129, 1, ++ 80, 129, 138, 104, 3, 250, 10, 243, 1, 50, 138, 96, 212, 248, 56, 17, ++ 196, 248, 204, 32, 1, 49, 196, 248, 56, 17, 8, 241, 78, 1, 4, 235, 129, ++ 1, 72, 104, 1, 48, 72, 96, 212, 248, 192, 0, 180, 249, 182, 16, 154, ++ 66, 193, 235, 0, 1, 15, 68, 196, 248, 192, 112, 71, 250, 10, 247, 4, ++ 235, 75, 1, 164, 248, 182, 112, 180, 249, 196, 0, 177, 249, 10, 16, ++ 40, 191, 132, 248, 177, 128, 136, 66, 100, 219, 4, 152, 130, 66, 12, ++ 217, 216, 241, 1, 1, 148, 248, 232, 32, 56, 191, 0, 33, 17, 250, 2, ++ 242, 145, 69, 43, 208, 8, 241, 60, 2, 35, 224, 148, 248, 68, 1, 184, ++ 241, 0, 15, 6, 208, 180, 249, 178, 96, 64, 178, 113, 26, 0, 235, 193, ++ 1, 5, 224, 180, 249, 180, 96, 64, 178, 113, 26, 201, 0, 9, 26, 3, 152, ++ 177, 235, 192, 15, 62, 219, 154, 66, 60, 211, 216, 241, 1, 1, 148, 248, ++ 232, 32, 56, 191, 0, 33, 17, 250, 2, 242, 145, 69, 6, 208, 8, 241, 62, ++ 2, 4, 235, 130, 2, 81, 104, 1, 49, 81, 96, 1, 34, 184, 241, 0, 15, 20, ++ 191, 3, 33, 2, 33, 148, 248, 175, 0, 132, 248, 73, 1, 148, 248, 29, ++ 1, 64, 177, 66, 177, 0, 34, 40, 105, 11, 70, 0, 146, 1, 146, 228, 247, ++ 160, 249, 4, 224, 26, 185, 212, 248, 204, 32, 154, 66, 25, 210, 148, ++ 248, 29, 49, 179, 177, 1, 35, 132, 248, 40, 49, 168, 104, 212, 248, ++ 48, 17, 212, 248, 36, 33, 0, 35, 11, 176, 189, 232, 240, 79, 216, 243, ++ 206, 177, 184, 241, 0, 15, 12, 191, 66, 70, 0, 34, 20, 191, 2, 33, 3, ++ 33, 208, 231, 11, 176, 189, 232, 240, 143, 127, 181, 208, 248, 116, ++ 100, 5, 70, 150, 248, 28, 49, 12, 70, 43, 179, 3, 105, 147, 248, 10, ++ 49, 11, 179, 150, 248, 29, 49, 243, 177, 3, 106, 13, 241, 15, 1, 24, ++ 105, 237, 247, 0, 251, 157, 248, 15, 48, 0, 34, 134, 248, 175, 48, 134, ++ 248, 73, 49, 0, 43, 20, 191, 3, 33, 2, 33, 1, 35, 141, 232, 12, 0, 40, ++ 105, 11, 70, 228, 247, 86, 249, 157, 248, 15, 48, 84, 248, 35, 32, 1, ++ 50, 68, 248, 35, 32, 127, 189, 112, 181, 208, 248, 116, 68, 5, 70, 148, ++ 248, 28, 49, 235, 177, 212, 248, 204, 32, 212, 248, 200, 48, 154, 66, ++ 3, 209, 4, 245, 138, 113, 255, 247, 192, 255, 212, 248, 204, 48, 196, ++ 248, 200, 48, 148, 248, 29, 49, 99, 177, 148, 248, 41, 49, 75, 177, ++ 168, 104, 212, 248, 52, 17, 79, 244, 250, 114, 0, 35, 189, 232, 112, ++ 64, 216, 243, 110, 177, 112, 189, 56, 181, 208, 248, 116, 68, 5, 70, ++ 212, 248, 52, 17, 128, 104, 216, 243, 138, 241, 212, 248, 204, 32, 212, ++ 248, 200, 48, 154, 66, 4, 209, 40, 70, 4, 245, 138, 113, 255, 247, 151, ++ 255, 212, 248, 204, 48, 196, 248, 200, 48, 56, 189, 208, 248, 116, 52, ++ 0, 34, 79, 246, 162, 113, 195, 248, 184, 32, 195, 248, 188, 32, 195, ++ 248, 192, 32, 163, 248, 178, 32, 163, 248, 180, 32, 163, 248, 182, 32, ++ 163, 248, 234, 16, 163, 248, 236, 16, 163, 248, 238, 16, 195, 248, 204, ++ 32, 195, 248, 208, 32, 195, 248, 212, 32, 195, 248, 56, 33, 195, 248, ++ 60, 33, 195, 248, 64, 33, 195, 248, 224, 32, 195, 248, 244, 32, 195, ++ 248, 248, 32, 195, 248, 252, 32, 195, 248, 0, 33, 195, 248, 4, 33, 195, ++ 248, 8, 33, 195, 248, 12, 33, 195, 248, 16, 33, 195, 248, 20, 33, 195, ++ 248, 24, 33, 131, 248, 41, 33, 112, 71, 208, 248, 116, 52, 211, 248, ++ 204, 32, 138, 96, 211, 248, 56, 33, 138, 100, 147, 248, 29, 33, 18, ++ 177, 147, 248, 175, 32, 1, 224, 147, 248, 172, 32, 74, 96, 147, 248, ++ 29, 33, 10, 96, 147, 248, 72, 33, 74, 101, 74, 104, 138, 101, 211, 248, ++ 208, 32, 10, 100, 211, 248, 212, 32, 74, 100, 211, 248, 60, 33, 202, ++ 100, 211, 248, 64, 33, 10, 101, 179, 249, 178, 32, 202, 96, 179, 249, ++ 180, 32, 10, 97, 179, 249, 182, 32, 74, 97, 211, 248, 244, 32, 138, ++ 97, 211, 248, 248, 32, 202, 97, 211, 248, 252, 32, 10, 98, 211, 248, ++ 0, 33, 74, 98, 211, 248, 4, 33, 138, 98, 211, 248, 8, 33, 202, 98, 211, ++ 248, 12, 33, 10, 99, 211, 248, 16, 33, 74, 99, 211, 248, 20, 33, 138, ++ 99, 211, 248, 24, 33, 202, 99, 211, 248, 76, 33, 202, 101, 211, 248, ++ 80, 33, 211, 248, 84, 49, 10, 102, 75, 102, 112, 71, 247, 181, 208, ++ 248, 116, 68, 212, 248, 76, 81, 141, 66, 7, 209, 212, 248, 80, 81, 149, ++ 66, 3, 209, 212, 248, 84, 33, 154, 66, 63, 208, 1, 240, 15, 5, 4, 45, ++ 61, 216, 2, 45, 59, 208, 3, 240, 3, 2, 2, 42, 55, 208, 31, 9, 7, 240, ++ 3, 7, 2, 47, 50, 208, 10, 9, 2, 240, 15, 2, 4, 42, 45, 216, 2, 42, 43, ++ 208, 158, 8, 6, 240, 3, 6, 2, 46, 38, 208, 158, 9, 6, 240, 3, 6, 2, ++ 46, 33, 208, 196, 248, 84, 49, 3, 106, 196, 248, 76, 17, 27, 104, 196, ++ 248, 80, 17, 2, 43, 4, 191, 62, 70, 42, 70, 4, 42, 20, 191, 17, 70, ++ 49, 70, 132, 248, 173, 16, 208, 248, 116, 52, 1, 34, 0, 36, 131, 248, ++ 70, 17, 141, 232, 20, 0, 11, 70, 0, 105, 228, 247, 48, 248, 32, 70, ++ 3, 224, 0, 32, 1, 224, 111, 240, 28, 0, 254, 189, 45, 233, 243, 65, ++ 4, 104, 221, 248, 36, 128, 0, 35, 5, 70, 13, 153, 32, 70, 22, 70, 8, ++ 159, 0, 147, 1, 147, 229, 247, 15, 250, 184, 241, 3, 15, 12, 217, 4, ++ 34, 104, 70, 57, 70, 193, 247, 153, 248, 184, 241, 7, 15, 4, 217, 1, ++ 168, 57, 29, 4, 34, 193, 247, 145, 248, 9, 46, 2, 208, 12, 46, 21, 209, ++ 14, 224, 0, 155, 43, 114, 35, 104, 147, 248, 63, 0, 128, 177, 32, 70, ++ 239, 243, 193, 241, 32, 70, 1, 33, 239, 243, 121, 242, 0, 32, 7, 224, ++ 40, 70, 10, 153, 11, 154, 52, 240, 148, 220, 1, 224, 111, 240, 22, 0, ++ 189, 232, 252, 129, 45, 233, 248, 67, 31, 70, 3, 106, 4, 70, 24, 105, ++ 13, 70, 22, 70, 237, 247, 194, 248, 35, 106, 129, 70, 24, 105, 238, ++ 247, 107, 249, 128, 70, 212, 248, 92, 1, 13, 240, 117, 222, 16, 240, ++ 1, 15, 200, 68, 7, 208, 35, 106, 147, 249, 4, 65, 24, 235, 4, 8, 72, ++ 191, 8, 241, 3, 8, 48, 70, 232, 243, 162, 245, 35, 35, 45, 26, 3, 61, ++ 59, 112, 2, 35, 127, 45, 168, 191, 127, 37, 123, 112, 111, 240, 127, ++ 3, 79, 234, 168, 4, 157, 66, 184, 191, 29, 70, 188, 112, 253, 112, 189, ++ 232, 248, 131, 112, 71, 0, 0, 5, 75, 27, 136, 195, 24, 27, 122, 163, ++ 241, 1, 2, 83, 66, 67, 235, 2, 3, 3, 112, 112, 71, 0, 191, 22, 7, 0, ++ 0, 112, 181, 0, 36, 6, 70, 37, 70, 5, 224, 115, 25, 216, 120, 200, 247, ++ 83, 250, 1, 53, 4, 67, 179, 120, 157, 66, 246, 211, 32, 70, 112, 189, ++ 45, 233, 243, 65, 152, 70, 83, 120, 20, 70, 177, 248, 90, 32, 19, 43, ++ 6, 70, 13, 70, 1, 146, 92, 217, 231, 120, 163, 120, 67, 234, 7, 35, ++ 1, 43, 86, 209, 103, 121, 34, 121, 66, 234, 7, 39, 1, 47, 78, 209, 160, ++ 29, 42, 73, 3, 34, 192, 247, 236, 255, 0, 40, 74, 209, 99, 122, 1, 43, ++ 3, 209, 1, 154, 82, 5, 65, 213, 4, 224, 2, 43, 65, 209, 1, 155, 27, ++ 5, 62, 213, 160, 29, 1, 169, 0, 34, 200, 247, 170, 249, 0, 40, 54, 208, ++ 189, 248, 4, 48, 168, 248, 0, 48, 231, 122, 163, 122, 67, 234, 7, 39, ++ 1, 47, 44, 209, 4, 241, 12, 8, 64, 70, 23, 73, 3, 34, 192, 247, 198, ++ 255, 40, 187, 226, 123, 48, 104, 41, 70, 1, 42, 12, 191, 11, 34, 0, ++ 34, 53, 240, 215, 220, 216, 177, 8, 153, 64, 70, 195, 243, 252, 247, ++ 4, 241, 16, 0, 12, 73, 3, 34, 192, 247, 177, 255, 128, 185, 226, 124, ++ 48, 104, 1, 42, 12, 191, 11, 34, 0, 34, 41, 70, 53, 240, 194, 220, 208, ++ 241, 1, 7, 56, 191, 0, 39, 2, 224, 31, 70, 0, 224, 1, 39, 56, 70, 189, ++ 232, 252, 129, 0, 191, 207, 22, 4, 0, 16, 181, 12, 70, 113, 177, 136, ++ 104, 8, 177, 201, 247, 66, 255, 224, 104, 8, 177, 201, 247, 62, 255, ++ 32, 70, 0, 33, 212, 34, 189, 232, 16, 64, 194, 243, 26, 179, 16, 189, ++ 0, 0, 0, 16, 24, 0, 0, 64, 150, 0, 0, 80, 242, 0, 0, 15, 172, 0, 0, ++ 20, 114, 0, 1, 50, 1, 3, 50, 61, 0, 144, 76, 51, 0, 170, 170, 3, 0, ++ 0, 0, 136, 180, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 80, 242, 1, 0, 0, 80, ++ 242, 0, 0, 64, 150, 0, 0, 15, 172, 0, 0, 15, 172, 6, 0, 10, 32, 4, 4, ++ 0, 80, 242, 0, 0, 15, 172, 0, 0, 64, 150, 0, 0, 0, 0, 0, 0, 12, 11, ++ 18, 15, 24, 10, 36, 14, 48, 9, 72, 13, 96, 8, 108, 12, 94, 0, 96, 0, ++ 98, 0, 120, 0, 212, 0, 12, 18, 24, 36, 48, 72, 96, 108, 0, 144, 76, ++ 0, 0, 16, 24, 0, 0, 15, 172, 6, 0, 0, 15, 172, 0, 0, 204, 1, 2, 0, 0, ++ 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 110, 132, 11, 0, 0, 0, ++ 212, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 18, 24, 36, 48, 72, ++ 96, 108, 0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 13, 12, ++ 12, 13, 16, 20, 25, 5, 12, 19, 2, 11, 20, 5, 15, 1, 25, 243, 2, 0, 179, ++ 211, 2, 0, 151, 211, 2, 0, 89, 212, 2, 0, 123, 211, 2, 0, 61, 216, 2, ++ 0, 113, 211, 2, 0, 0, 0, 0, 0, 16, 9, 30, 9, 31, 9, 36, 9, 37, 9, 38, ++ 9, 32, 9, 33, 9, 39, 9, 40, 9, 41, 9, 34, 9, 35, 9, 48, 9, 49, 9, 50, ++ 9, 18, 9, 15, 9, 0, 9, 1, 9, 6, 9, 7, 9, 8, 9, 2, 9, 3, 9, 9, 9, 10, ++ 9, 11, 9, 4, 9, 5, 9, 12, 9, 13, 9, 14, 9, 17, 9, 1, 1, 0, 0, 1, 1, ++ 28, 112, 64, 0, 45, 2, 240, 0, 10, 1, 40, 0, 40, 1, 56, 1, 72, 1, 88, ++ 1, 85, 1, 80, 1, 80, 3, 102, 102, 226, 1, 102, 102, 227, 1, 102, 102, ++ 228, 1, 102, 102, 229, 1, 102, 102, 230, 1, 102, 102, 231, 1, 102, 102, ++ 232, 1, 102, 102, 233, 1, 102, 102, 234, 1, 102, 102, 235, 1, 102, 102, ++ 236, 1, 102, 102, 237, 1, 102, 102, 238, 1, 205, 204, 240, 1, 10, 0, ++ 5, 0, 8, 0, 64, 6, 8, 0, 5, 0, 8, 0, 8, 0, 119, 0, 8, 0, 138, 0, 8, ++ 0, 1, 0, 5, 0, 1, 0, 10, 0, 1, 0, 5, 0, 64, 6, 101, 2, 52, 2, 132, 0, ++ 116, 0, 86, 0, 101, 2, 52, 2, 2, 4, 11, 22, 36, 48, 72, 96, 108, 2, ++ 4, 11, 12, 18, 24, 36, 48, 72, 96, 108, 2, 4, 11, 2, 4, 11, 22, 0, 20, ++ 114, 0, 55, 46, 52, 53, 46, 57, 56, 46, 57, 53, 32, 40, 114, 55, 50, ++ 52, 51, 48, 51, 32, 67, 89, 41, 0, 114, 101, 99, 108, 97, 105, 109, ++ 32, 115, 101, 99, 116, 105, 111, 110, 32, 37, 115, 58, 32, 82, 101, ++ 116, 117, 114, 110, 101, 100, 32, 37, 100, 32, 98, 121, 116, 101, 115, ++ 32, 116, 111, 32, 116, 104, 101, 32, 104, 101, 97, 112, 10, 0, 77, 101, ++ 109, 111, 114, 121, 32, 117, 115, 97, 103, 101, 58, 10, 0, 9, 84, 101, ++ 120, 116, 58, 32, 37, 108, 100, 40, 37, 108, 100, 75, 41, 44, 32, 68, ++ 97, 116, 97, 58, 32, 37, 108, 100, 40, 37, 108, 100, 75, 41, 44, 32, ++ 66, 115, 115, 58, 32, 37, 108, 100, 40, 37, 108, 100, 75, 41, 44, 32, ++ 83, 116, 97, 99, 107, 58, 32, 37, 100, 75, 10, 0, 9, 65, 114, 101, 110, ++ 97, 32, 116, 111, 116, 97, 108, 58, 32, 37, 100, 40, 37, 100, 75, 41, ++ 44, 32, 70, 114, 101, 101, 58, 32, 37, 100, 40, 37, 100, 75, 41, 44, ++ 32, 73, 110, 32, 117, 115, 101, 58, 32, 37, 100, 40, 37, 100, 75, 41, ++ 44, 32, 72, 87, 77, 58, 32, 37, 100, 40, 37, 100, 75, 41, 10, 0, 9, ++ 73, 110, 32, 117, 115, 101, 32, 43, 32, 111, 118, 101, 114, 104, 101, ++ 97, 100, 58, 32, 37, 100, 40, 37, 100, 75, 41, 44, 32, 77, 97, 120, ++ 32, 109, 101, 109, 111, 114, 121, 32, 105, 110, 32, 117, 115, 101, 58, ++ 32, 37, 108, 100, 40, 37, 108, 100, 75, 41, 10, 0, 9, 77, 97, 108, 108, ++ 111, 99, 32, 102, 97, 105, 108, 117, 114, 101, 32, 99, 111, 117, 110, ++ 116, 58, 32, 37, 100, 10, 0, 9, 83, 116, 97, 99, 107, 32, 98, 111, 116, ++ 116, 111, 109, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 111, 118, ++ 101, 114, 119, 114, 105, 116, 116, 101, 110, 10, 0, 9, 83, 116, 97, ++ 99, 107, 32, 98, 111, 116, 116, 111, 109, 58, 32, 48, 120, 37, 112, ++ 44, 32, 108, 119, 109, 58, 32, 48, 120, 37, 112, 44, 32, 99, 117, 114, ++ 114, 58, 32, 48, 120, 37, 112, 44, 32, 116, 111, 112, 58, 32, 48, 120, ++ 37, 112, 10, 0, 9, 70, 114, 101, 101, 32, 115, 116, 97, 99, 107, 58, ++ 32, 48, 120, 37, 120, 40, 37, 100, 41, 32, 108, 119, 109, 58, 32, 48, ++ 120, 37, 120, 40, 37, 100, 41, 10, 0, 9, 73, 110, 117, 115, 101, 32, ++ 115, 116, 97, 99, 107, 58, 32, 48, 120, 37, 120, 40, 37, 100, 41, 32, ++ 104, 119, 109, 58, 32, 48, 120, 37, 120, 40, 37, 100, 41, 10, 0, 9, ++ 73, 110, 32, 117, 115, 101, 32, 112, 111, 111, 108, 32, 37, 100, 40, ++ 37, 100, 41, 58, 32, 37, 100, 40, 37, 100, 75, 41, 44, 32, 119, 47, ++ 111, 104, 58, 32, 37, 100, 40, 37, 100, 75, 41, 10, 0, 9, 73, 110, 32, ++ 117, 115, 101, 32, 45, 32, 112, 111, 111, 108, 58, 32, 37, 100, 40, ++ 37, 100, 75, 41, 44, 32, 119, 47, 111, 104, 58, 32, 37, 100, 40, 37, ++ 100, 75, 41, 10, 0, 9, 80, 107, 116, 73, 100, 32, 84, 111, 116, 97, ++ 108, 58, 32, 37, 100, 44, 32, 70, 114, 101, 101, 58, 32, 37, 100, 44, ++ 32, 70, 97, 105, 108, 101, 100, 58, 32, 37, 100, 10, 0, 109, 119, 0, ++ 109, 100, 0, 85, 78, 73, 77, 80, 76, 58, 32, 114, 97, 61, 37, 112, 10, ++ 0, 84, 67, 65, 77, 58, 32, 37, 100, 32, 117, 115, 101, 100, 58, 32, ++ 37, 100, 32, 101, 120, 99, 101, 101, 100, 58, 37, 100, 10, 0, 10, 70, ++ 87, 73, 68, 32, 48, 49, 45, 37, 120, 10, 102, 108, 97, 103, 115, 32, ++ 37, 120, 10, 0, 10, 84, 82, 65, 80, 32, 37, 120, 40, 37, 120, 41, 58, ++ 32, 112, 99, 32, 37, 120, 44, 32, 108, 114, 32, 37, 120, 44, 32, 115, ++ 112, 32, 37, 120, 44, 32, 99, 112, 115, 114, 32, 37, 120, 44, 32, 115, ++ 112, 115, 114, 32, 37, 120, 10, 0, 32, 32, 114, 48, 32, 37, 120, 44, ++ 32, 114, 49, 32, 37, 120, 44, 32, 114, 50, 32, 37, 120, 44, 32, 114, ++ 51, 32, 37, 120, 44, 32, 114, 52, 32, 37, 120, 44, 32, 114, 53, 32, ++ 37, 120, 44, 32, 114, 54, 32, 37, 120, 10, 0, 32, 32, 114, 55, 32, 37, ++ 120, 44, 32, 114, 56, 32, 37, 120, 44, 32, 114, 57, 32, 37, 120, 44, ++ 32, 114, 49, 48, 32, 37, 120, 44, 32, 114, 49, 49, 32, 37, 120, 44, ++ 32, 114, 49, 50, 32, 37, 120, 10, 0, 10, 32, 32, 32, 115, 112, 43, 48, ++ 32, 37, 48, 56, 120, 32, 37, 48, 56, 120, 32, 37, 48, 56, 120, 32, 37, ++ 48, 56, 120, 10, 0, 32, 32, 115, 112, 43, 49, 48, 32, 37, 48, 56, 120, ++ 32, 37, 48, 56, 120, 32, 37, 48, 56, 120, 32, 37, 48, 56, 120, 10, 10, ++ 0, 115, 112, 43, 37, 120, 32, 37, 48, 56, 120, 10, 0, 104, 110, 100, ++ 97, 114, 109, 95, 97, 114, 109, 114, 32, 97, 100, 100, 114, 58, 32, ++ 48, 120, 37, 120, 44, 32, 99, 114, 52, 95, 105, 100, 120, 58, 32, 37, ++ 100, 10, 0, 98, 117, 115, 115, 116, 97, 116, 115, 0, 65, 88, 73, 32, ++ 115, 108, 97, 118, 101, 32, 101, 114, 114, 111, 114, 0, 65, 88, 73, ++ 32, 116, 105, 109, 101, 111, 117, 116, 0, 65, 88, 73, 32, 100, 101, ++ 99, 111, 100, 101, 32, 101, 114, 114, 111, 114, 0, 9, 32, 101, 114, ++ 114, 108, 111, 103, 58, 32, 108, 111, 32, 48, 120, 37, 48, 56, 120, ++ 44, 32, 104, 105, 32, 48, 120, 37, 48, 56, 120, 44, 32, 105, 100, 32, ++ 48, 120, 37, 48, 56, 120, 44, 32, 102, 108, 97, 103, 115, 32, 48, 120, ++ 37, 48, 56, 120, 0, 44, 32, 115, 116, 97, 116, 117, 115, 32, 48, 120, ++ 37, 48, 56, 120, 10, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 64, 0, 0, 0, ++ 32, 0, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 1, 0, ++ 0, 128, 0, 0, 0, 64, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0, ++ 4, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 128, 0, 0, 0, 64, 0, 0, 0, 32, 0, 0, ++ 0, 16, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 128, 0, ++ 0, 0, 64, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, ++ 2, 0, 0, 0, 1, 0, 0, 0, 112, 97, 37, 100, 61, 48, 120, 37, 37, 120, ++ 0, 112, 100, 37, 100, 61, 48, 120, 37, 37, 120, 0, 112, 100, 104, 37, ++ 100, 61, 48, 120, 37, 37, 120, 0, 112, 100, 108, 37, 100, 61, 48, 120, ++ 37, 37, 120, 0, 103, 99, 114, 37, 100, 61, 48, 120, 37, 37, 120, 0, ++ 37, 48, 50, 88, 37, 48, 50, 88, 37, 48, 50, 88, 37, 48, 50, 88, 45, ++ 37, 48, 50, 88, 37, 48, 50, 88, 45, 37, 48, 50, 88, 37, 48, 50, 88, ++ 45, 37, 48, 50, 88, 37, 48, 50, 88, 45, 37, 48, 50, 88, 37, 48, 50, ++ 88, 37, 48, 50, 88, 37, 48, 50, 88, 37, 48, 50, 88, 37, 48, 50, 88, ++ 0, 85, 110, 100, 101, 102, 105, 110, 101, 100, 32, 101, 114, 114, 111, ++ 114, 32, 37, 100, 0, 32, 32, 37, 48, 52, 120, 58, 32, 0, 0, 1, 0, 2, ++ 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 16, 0, 32, 0, 1, 0, 0, 1, 0, 0, 96, ++ 1, 4, 0, 5, 0, 1, 3, 100, 1, 4, 0, 0, 0, 39, 0, 36, 1, 4, 0, 4, 0, 0, ++ 0, 40, 1, 4, 0, 0, 0, 0, 0, 44, 1, 4, 0, 0, 0, 0, 0, 48, 1, 4, 0, 0, ++ 0, 0, 0, 52, 1, 4, 0, 10, 4, 112, 0, 52, 1, 4, 0, 239, 190, 212, 0, ++ 52, 1, 4, 0, 5, 0, 0, 255, 52, 1, 4, 0, 1, 255, 2, 255, 48, 1, 4, 0, ++ 24, 0, 0, 0, 52, 1, 4, 0, 10, 4, 224, 0, 52, 1, 4, 0, 239, 190, 72, ++ 0, 52, 1, 4, 0, 5, 0, 0, 255, 52, 1, 4, 0, 1, 255, 2, 255, 52, 1, 4, ++ 0, 0, 16, 24, 1, 52, 1, 4, 0, 2, 3, 0, 16, 52, 1, 4, 0, 24, 241, 242, ++ 243, 52, 1, 4, 0, 187, 204, 0, 0, 48, 1, 4, 0, 56, 0, 0, 0, 52, 1, 4, ++ 0, 0, 0, 0, 0, 48, 1, 4, 0, 88, 0, 0, 0, 52, 1, 4, 0, 0, 0, 0, 0, 48, ++ 1, 4, 0, 56, 0, 0, 0, 52, 1, 4, 0, 15, 32, 0, 7, 52, 1, 4, 0, 0, 0, ++ 148, 0, 52, 1, 4, 0, 0, 0, 0, 144, 52, 1, 4, 0, 116, 117, 118, 119, ++ 52, 1, 4, 0, 0, 0, 0, 0, 52, 1, 4, 0, 0, 0, 5, 0, 52, 1, 4, 0, 255, ++ 255, 255, 255, 48, 1, 4, 0, 104, 2, 0, 0, 52, 1, 4, 0, 110, 132, 51, ++ 0, 52, 1, 4, 0, 220, 186, 80, 0, 52, 1, 4, 0, 212, 0, 0, 171, 52, 1, ++ 4, 0, 186, 218, 186, 218, 52, 1, 4, 0, 0, 16, 24, 241, 52, 1, 4, 0, ++ 242, 243, 0, 16, 52, 1, 4, 0, 24, 241, 242, 243, 52, 1, 4, 0, 16, 0, ++ 0, 0, 52, 1, 4, 0, 0, 0, 0, 0, 52, 1, 4, 0, 0, 0, 10, 0, 52, 1, 4, 0, ++ 1, 0, 0, 14, 52, 1, 4, 0, 66, 82, 67, 77, 52, 1, 4, 0, 95, 84, 69, 83, ++ 52, 1, 4, 0, 84, 95, 83, 83, 52, 1, 4, 0, 73, 68, 1, 4, 52, 1, 4, 0, ++ 130, 132, 139, 150, 52, 1, 4, 0, 3, 1, 1, 6, 52, 1, 4, 0, 2, 0, 0, 0, ++ 48, 1, 4, 0, 104, 0, 0, 0, 52, 1, 4, 0, 10, 4, 40, 2, 52, 1, 4, 0, 220, ++ 186, 128, 0, 52, 1, 4, 0, 0, 0, 255, 255, 52, 1, 4, 0, 255, 255, 255, ++ 255, 52, 1, 4, 0, 0, 16, 24, 241, 52, 1, 4, 0, 242, 243, 0, 16, 52, ++ 1, 4, 0, 24, 241, 242, 243, 52, 1, 4, 0, 208, 175, 0, 0, 52, 1, 4, 0, ++ 0, 0, 0, 0, 52, 1, 4, 0, 0, 0, 0, 1, 52, 1, 4, 0, 2, 0, 0, 14, 52, 1, ++ 4, 0, 66, 82, 67, 77, 52, 1, 4, 0, 95, 84, 69, 83, 52, 1, 4, 0, 84, ++ 95, 83, 83, 52, 1, 4, 0, 73, 68, 1, 4, 52, 1, 4, 0, 130, 132, 139, 150, ++ 52, 1, 4, 0, 3, 1, 1, 6, 52, 1, 4, 0, 2, 1, 0, 0, 48, 1, 4, 0, 104, ++ 4, 0, 0, 52, 1, 4, 0, 10, 4, 40, 2, 52, 1, 4, 0, 220, 186, 128, 0, 52, ++ 1, 4, 0, 0, 0, 255, 255, 52, 1, 4, 0, 255, 255, 255, 255, 52, 1, 4, ++ 0, 0, 16, 24, 241, 52, 1, 4, 0, 242, 243, 0, 16, 52, 1, 4, 0, 24, 241, ++ 242, 243, 52, 1, 4, 0, 208, 175, 0, 0, 52, 1, 4, 0, 0, 0, 0, 0, 52, ++ 1, 4, 0, 0, 0, 0, 1, 52, 1, 4, 0, 2, 0, 0, 14, 52, 1, 4, 0, 66, 82, ++ 67, 77, 52, 1, 4, 0, 95, 84, 69, 83, 52, 1, 4, 0, 84, 95, 83, 83, 52, ++ 1, 4, 0, 73, 68, 1, 4, 52, 1, 4, 0, 130, 132, 139, 150, 52, 1, 4, 0, ++ 3, 1, 1, 6, 52, 1, 4, 0, 2, 1, 0, 0, 0, 1, 4, 0, 0, 0, 0, 1, 144, 4, ++ 2, 0, 0, 0, 0, 0, 160, 4, 2, 0, 241, 243, 0, 0, 176, 4, 2, 0, 239, 253, ++ 0, 0, 168, 4, 2, 0, 255, 255, 0, 0, 168, 4, 2, 0, 0, 0, 0, 0, 162, 4, ++ 2, 0, 1, 0, 0, 0, 178, 4, 2, 0, 251, 255, 0, 0, 170, 4, 2, 0, 255, 255, ++ 0, 0, 170, 4, 2, 0, 0, 0, 0, 0, 164, 4, 2, 0, 207, 26, 0, 0, 172, 4, ++ 2, 0, 0, 0, 0, 0, 188, 4, 2, 0, 0, 0, 0, 0, 166, 4, 2, 0, 215, 2, 0, ++ 0, 182, 4, 2, 0, 255, 253, 0, 0, 174, 4, 2, 0, 255, 255, 0, 0, 6, 4, ++ 2, 0, 1, 0, 0, 0, 6, 4, 2, 0, 0, 0, 0, 0, 12, 4, 2, 0, 24, 0, 0, 0, ++ 6, 4, 2, 0, 0, 0, 0, 0, 72, 4, 2, 0, 0, 12, 0, 0, 2, 4, 2, 0, 32, 6, ++ 0, 0, 2, 5, 2, 0, 0, 0, 0, 0, 0, 5, 2, 0, 0, 64, 0, 0, 2, 5, 2, 0, 4, ++ 0, 0, 0, 0, 5, 2, 0, 0, 64, 0, 0, 2, 5, 2, 0, 8, 0, 0, 0, 0, 5, 2, 0, ++ 0, 64, 0, 0, 2, 5, 2, 0, 12, 0, 0, 0, 0, 5, 2, 0, 0, 64, 0, 0, 2, 5, ++ 2, 0, 192, 0, 0, 0, 128, 5, 2, 0, 255, 255, 0, 0, 130, 5, 2, 0, 255, ++ 255, 0, 0, 132, 5, 2, 0, 255, 255, 0, 0, 134, 5, 2, 0, 255, 255, 0, ++ 0, 136, 5, 2, 0, 255, 255, 0, 0, 138, 5, 2, 0, 255, 255, 0, 0, 140, ++ 5, 2, 0, 255, 255, 0, 0, 142, 5, 2, 0, 255, 255, 0, 0, 144, 5, 2, 0, ++ 255, 255, 0, 0, 146, 5, 2, 0, 255, 255, 0, 0, 148, 5, 2, 0, 255, 255, ++ 0, 0, 150, 5, 2, 0, 255, 255, 0, 0, 152, 5, 2, 0, 255, 255, 0, 0, 154, ++ 5, 2, 0, 255, 255, 0, 0, 158, 5, 2, 0, 255, 255, 0, 0, 160, 5, 2, 0, ++ 255, 255, 0, 0, 156, 5, 2, 0, 240, 255, 0, 0, 64, 5, 2, 0, 0, 128, 0, ++ 0, 32, 5, 2, 0, 6, 15, 0, 0, 64, 5, 2, 0, 0, 128, 0, 0, 64, 5, 2, 0, ++ 0, 129, 0, 0, 32, 5, 2, 0, 0, 255, 0, 0, 44, 5, 2, 0, 1, 1, 0, 0, 64, ++ 5, 2, 0, 0, 129, 0, 0, 64, 5, 2, 0, 0, 130, 0, 0, 32, 5, 2, 0, 30, 40, ++ 0, 0, 44, 5, 2, 0, 0, 0, 0, 0, 64, 5, 2, 0, 0, 130, 0, 0, 64, 5, 2, ++ 0, 0, 131, 0, 0, 32, 5, 2, 0, 41, 49, 0, 0, 64, 5, 2, 0, 0, 131, 0, ++ 0, 64, 5, 2, 0, 0, 132, 0, 0, 32, 5, 2, 0, 50, 63, 0, 0, 64, 5, 2, 0, ++ 0, 132, 0, 0, 64, 5, 2, 0, 0, 133, 0, 0, 32, 5, 2, 0, 64, 65, 0, 0, ++ 64, 5, 2, 0, 0, 133, 0, 0, 18, 6, 2, 0, 1, 0, 0, 0, 46, 6, 2, 0, 205, ++ 204, 0, 0, 48, 6, 2, 0, 12, 0, 0, 0, 0, 6, 2, 0, 4, 128, 0, 0, 150, ++ 6, 2, 0, 8, 0, 0, 0, 154, 6, 2, 0, 228, 0, 0, 0, 136, 6, 2, 0, 0, 0, ++ 0, 0, 156, 6, 2, 0, 2, 0, 0, 0, 136, 6, 2, 0, 0, 16, 0, 0, 156, 6, 2, ++ 0, 2, 0, 0, 0, 136, 6, 2, 0, 0, 32, 0, 0, 156, 6, 2, 0, 2, 0, 0, 0, ++ 136, 6, 2, 0, 0, 48, 0, 0, 156, 6, 2, 0, 2, 0, 0, 0, 136, 6, 2, 0, 11, ++ 15, 0, 0, 158, 6, 2, 0, 7, 0, 0, 0, 16, 5, 2, 0, 11, 0, 0, 0, 80, 4, ++ 2, 0, 1, 78, 0, 0, 82, 4, 2, 0, 91, 1, 0, 0, 228, 4, 2, 0, 144, 0, 0, ++ 0, 4, 4, 2, 0, 180, 0, 0, 0, 84, 5, 2, 0, 255, 175, 0, 0, 254, 4, 2, ++ 0, 0, 0, 0, 0, 94, 5, 2, 0, 0, 16, 0, 0, 96, 1, 4, 0, 4, 0, 1, 3, 100, ++ 1, 4, 0, 0, 0, 0, 0, 100, 1, 4, 0, 180, 0, 0, 0, 100, 1, 4, 0, 71, 0, ++ 71, 0, 100, 1, 4, 0, 0, 0, 100, 0, 100, 1, 4, 0, 48, 9, 64, 0, 96, 1, ++ 4, 0, 13, 0, 1, 3, 100, 1, 4, 0, 2, 0, 2, 0, 100, 1, 4, 0, 1, 0, 128, ++ 0, 100, 1, 4, 0, 5, 0, 0, 0, 100, 1, 4, 0, 0, 0, 128, 0, 100, 1, 4, ++ 0, 100, 0, 100, 0, 100, 1, 4, 0, 14, 0, 71, 0, 100, 1, 4, 0, 0, 5, 0, ++ 0, 96, 1, 4, 0, 21, 0, 1, 3, 100, 1, 4, 0, 64, 0, 60, 8, 100, 1, 4, ++ 0, 0, 0, 7, 0, 100, 1, 4, 0, 10, 0, 0, 0, 96, 1, 4, 0, 26, 0, 1, 3, ++ 100, 1, 4, 0, 0, 192, 0, 0, 96, 1, 4, 0, 29, 0, 1, 3, 100, 1, 4, 0, ++ 16, 39, 0, 0, 96, 1, 4, 0, 31, 0, 1, 3, 100, 1, 4, 0, 0, 0, 19, 12, ++ 100, 1, 4, 0, 6, 0, 16, 39, 96, 1, 4, 0, 37, 0, 1, 3, 100, 1, 4, 0, ++ 0, 0, 50, 0, 96, 1, 4, 0, 40, 0, 1, 3, 100, 1, 4, 0, 0, 0, 76, 10, 100, ++ 1, 4, 0, 0, 0, 63, 1, 100, 1, 4, 0, 255, 255, 0, 4, 100, 1, 4, 0, 70, ++ 4, 30, 7, 100, 1, 4, 0, 2, 0, 236, 9, 96, 1, 4, 0, 46, 0, 1, 3, 100, ++ 1, 4, 0, 0, 0, 0, 128, 96, 1, 4, 0, 146, 1, 1, 3, 100, 1, 4, 0, 100, ++ 4, 0, 0, 100, 1, 4, 0, 0, 0, 64, 0, 100, 1, 4, 0, 150, 7, 0, 0, 96, ++ 1, 4, 0, 151, 1, 1, 3, 100, 1, 4, 0, 26, 8, 0, 0, 96, 1, 4, 0, 191, ++ 1, 1, 3, 100, 1, 4, 0, 0, 0, 5, 0, 96, 1, 4, 0, 8, 4, 1, 3, 100, 1, ++ 4, 0, 7, 2, 0, 0, 96, 1, 4, 0, 16, 4, 1, 3, 100, 1, 4, 0, 0, 0, 1, 0, ++ 96, 1, 4, 0, 19, 12, 1, 0, 100, 1, 2, 0, 255, 255, 0, 0, 96, 1, 4, 0, ++ 20, 12, 1, 0, 100, 1, 2, 0, 255, 255, 0, 0, 96, 1, 4, 0, 26, 0, 1, 3, ++ 100, 1, 4, 0, 0, 0, 22, 12, 96, 1, 4, 0, 35, 0, 1, 3, 100, 1, 4, 0, ++ 0, 0, 166, 7, 100, 1, 4, 0, 0, 0, 162, 10, 96, 1, 4, 0, 38, 0, 1, 3, ++ 100, 1, 4, 0, 10, 14, 11, 9, 100, 1, 4, 0, 14, 2, 0, 0, 96, 1, 4, 0, ++ 50, 0, 1, 3, 100, 1, 4, 0, 0, 0, 136, 11, 100, 1, 4, 0, 0, 0, 160, 4, ++ 100, 1, 4, 0, 0, 0, 124, 6, 96, 1, 4, 0, 88, 0, 1, 3, 100, 1, 4, 0, ++ 66, 82, 67, 77, 100, 1, 4, 0, 95, 84, 69, 83, 100, 1, 4, 0, 84, 95, ++ 83, 83, 100, 1, 4, 0, 73, 68, 0, 0, 96, 1, 4, 0, 96, 0, 1, 3, 100, 1, ++ 4, 0, 57, 0, 0, 0, 100, 1, 4, 0, 80, 0, 0, 0, 100, 1, 4, 0, 192, 0, ++ 0, 0, 96, 1, 4, 0, 112, 0, 1, 3, 100, 1, 4, 0, 190, 3, 190, 3, 100, ++ 1, 4, 0, 190, 3, 190, 3, 100, 1, 4, 0, 190, 3, 190, 3, 100, 1, 4, 0, ++ 190, 3, 190, 3, 100, 1, 4, 0, 0, 4, 234, 3, 100, 1, 4, 0, 212, 3, 190, ++ 3, 100, 1, 4, 0, 11, 4, 245, 3, 100, 1, 4, 0, 223, 3, 201, 3, 100, 1, ++ 4, 0, 190, 3, 190, 3, 100, 1, 4, 0, 190, 3, 190, 3, 100, 1, 4, 0, 190, ++ 3, 190, 3, 100, 1, 4, 0, 190, 3, 190, 3, 100, 1, 4, 0, 0, 4, 234, 3, ++ 100, 1, 4, 0, 212, 3, 190, 3, 100, 1, 4, 0, 11, 4, 245, 3, 100, 1, 4, ++ 0, 223, 3, 201, 3, 100, 1, 4, 0, 22, 4, 22, 4, 100, 1, 4, 0, 22, 4, ++ 22, 4, 100, 1, 4, 0, 34, 4, 22, 4, 100, 1, 4, 0, 22, 4, 46, 4, 100, ++ 1, 4, 0, 22, 4, 22, 4, 100, 1, 4, 0, 22, 4, 22, 4, 100, 1, 4, 0, 22, ++ 4, 22, 4, 100, 1, 4, 0, 58, 4, 22, 4, 100, 1, 4, 0, 22, 4, 22, 4, 100, ++ 1, 4, 0, 22, 4, 22, 4, 100, 1, 4, 0, 34, 4, 22, 4, 100, 1, 4, 0, 22, ++ 4, 46, 4, 100, 1, 4, 0, 22, 4, 22, 4, 100, 1, 4, 0, 22, 4, 22, 4, 100, ++ 1, 4, 0, 22, 4, 22, 4, 100, 1, 4, 0, 58, 4, 22, 4, 100, 1, 4, 0, 0, ++ 0, 31, 0, 100, 1, 4, 0, 255, 3, 31, 0, 100, 1, 4, 0, 2, 0, 0, 0, 100, ++ 1, 4, 0, 2, 0, 0, 0, 96, 1, 4, 0, 152, 0, 1, 3, 100, 1, 4, 0, 0, 0, ++ 31, 0, 100, 1, 4, 0, 255, 3, 31, 0, 100, 1, 4, 0, 1, 0, 0, 0, 100, 1, ++ 4, 0, 1, 0, 0, 0, 96, 1, 4, 0, 160, 0, 1, 3, 100, 1, 4, 0, 0, 0, 31, ++ 0, 100, 1, 4, 0, 255, 3, 31, 0, 100, 1, 4, 0, 1, 0, 0, 0, 100, 1, 4, ++ 0, 1, 0, 0, 0, 96, 1, 4, 0, 168, 0, 1, 3, 100, 1, 4, 0, 0, 0, 31, 0, ++ 100, 1, 4, 0, 255, 3, 31, 0, 100, 1, 4, 0, 1, 0, 0, 0, 100, 1, 4, 0, ++ 1, 0, 0, 0, 96, 1, 4, 0, 192, 0, 1, 3, 100, 1, 4, 0, 55, 36, 55, 36, ++ 100, 1, 4, 0, 55, 36, 55, 36, 96, 1, 4, 0, 186, 1, 1, 3, 100, 1, 4, ++ 0, 1, 0, 7, 2, 100, 1, 4, 0, 7, 2, 7, 3, 100, 1, 4, 0, 7, 0, 0, 0, 96, ++ 1, 4, 0, 223, 1, 1, 3, 100, 1, 4, 0, 32, 0, 203, 1, 100, 1, 4, 0, 0, ++ 0, 84, 0, 100, 1, 4, 0, 0, 0, 171, 8, 100, 1, 4, 0, 0, 0, 16, 4, 100, ++ 1, 4, 0, 132, 0, 2, 0, 100, 1, 4, 0, 0, 0, 20, 0, 100, 1, 4, 0, 207, ++ 1, 2, 0, 100, 1, 4, 0, 68, 0, 0, 0, 100, 1, 4, 0, 175, 8, 2, 0, 100, ++ 1, 4, 0, 16, 4, 100, 0, 100, 1, 4, 0, 2, 2, 0, 0, 100, 1, 4, 0, 16, ++ 0, 202, 1, 100, 1, 4, 0, 2, 0, 60, 0, 100, 1, 4, 0, 0, 0, 170, 8, 100, ++ 1, 4, 0, 2, 0, 16, 4, 100, 1, 4, 0, 84, 0, 2, 8, 100, 1, 4, 0, 0, 0, ++ 8, 0, 100, 1, 4, 0, 206, 1, 0, 0, 100, 1, 4, 0, 52, 0, 0, 0, 100, 1, ++ 4, 0, 174, 8, 0, 0, 100, 1, 4, 0, 16, 4, 68, 0, 100, 1, 4, 0, 2, 10, ++ 0, 0, 100, 1, 4, 0, 8, 0, 201, 1, 100, 1, 4, 0, 2, 0, 48, 0, 100, 1, ++ 4, 0, 0, 0, 169, 8, 100, 1, 4, 0, 2, 0, 16, 4, 100, 1, 4, 0, 60, 0, ++ 2, 16, 100, 1, 4, 0, 0, 0, 4, 0, 100, 1, 4, 0, 205, 1, 0, 0, 100, 1, ++ 4, 0, 44, 0, 0, 0, 100, 1, 4, 0, 173, 8, 0, 0, 100, 1, 4, 0, 16, 4, ++ 52, 0, 100, 1, 4, 0, 2, 18, 0, 0, 100, 1, 4, 0, 4, 0, 200, 1, 100, 1, ++ 4, 0, 0, 0, 44, 0, 100, 1, 4, 0, 0, 0, 168, 8, 100, 1, 4, 0, 0, 0, 16, ++ 4, 100, 1, 4, 0, 48, 0, 2, 25, 100, 1, 4, 0, 0, 0, 0, 0, 100, 1, 4, ++ 0, 204, 1, 2, 0, 100, 1, 4, 0, 44, 0, 0, 0, 100, 1, 4, 0, 172, 8, 2, ++ 0, 100, 1, 4, 0, 16, 4, 48, 0, 100, 1, 4, 0, 2, 26, 0, 0, 100, 1, 4, ++ 0, 192, 0, 10, 4, 100, 1, 4, 0, 112, 0, 0, 0, 100, 1, 4, 0, 58, 1, 10, ++ 4, 100, 1, 4, 0, 40, 2, 44, 192, 100, 1, 4, 0, 242, 2, 10, 4, 100, 1, ++ 4, 0, 0, 0, 0, 1, 100, 1, 4, 0, 96, 0, 20, 4, 100, 1, 4, 0, 56, 0, 0, ++ 0, 100, 1, 4, 0, 2, 1, 20, 4, 100, 1, 4, 0, 20, 1, 44, 192, 100, 1, ++ 4, 0, 222, 1, 20, 4, 100, 1, 4, 0, 0, 0, 128, 0, 100, 1, 4, 0, 34, 0, ++ 55, 4, 100, 1, 4, 0, 21, 0, 0, 0, 100, 1, 4, 0, 223, 0, 55, 4, 100, ++ 1, 4, 0, 101, 0, 44, 192, 100, 1, 4, 0, 46, 1, 55, 4, 100, 1, 4, 0, ++ 0, 0, 47, 0, 100, 1, 4, 0, 17, 0, 110, 132, 100, 1, 4, 0, 11, 0, 0, ++ 0, 100, 1, 4, 0, 212, 0, 110, 132, 100, 1, 4, 0, 51, 0, 44, 192, 100, ++ 1, 4, 0, 252, 0, 110, 132, 100, 1, 4, 0, 0, 0, 24, 0, 100, 1, 4, 0, ++ 2, 0, 138, 157, 100, 1, 4, 0, 251, 0, 2, 8, 100, 1, 4, 0, 197, 78, 250, ++ 0, 100, 1, 4, 0, 2, 10, 131, 52, 100, 1, 4, 0, 254, 0, 2, 16, 100, 1, ++ 4, 0, 98, 39, 249, 0, 100, 1, 4, 0, 2, 18, 66, 26, 100, 1, 4, 0, 253, ++ 0, 2, 25, 100, 1, 4, 0, 177, 19, 248, 0, 100, 1, 4, 0, 2, 26, 129, 17, ++ 100, 1, 4, 0, 252, 0, 2, 28, 100, 1, 4, 0, 193, 15, 252, 0, 100, 1, ++ 4, 0, 0, 0, 193, 15, 100, 1, 4, 0, 252, 0, 0, 0, 100, 1, 4, 0, 193, ++ 15, 252, 0, 96, 1, 4, 0, 80, 2, 1, 3, 100, 1, 4, 0, 0, 0, 0, 0, 100, ++ 1, 4, 0, 1, 0, 113, 20, 100, 1, 4, 0, 4, 2, 0, 0, 96, 1, 4, 0, 84, 2, ++ 1, 3, 100, 1, 4, 0, 1, 0, 0, 0, 100, 1, 4, 0, 1, 0, 113, 20, 100, 1, ++ 4, 0, 4, 2, 0, 0, 96, 1, 4, 0, 88, 2, 1, 3, 100, 1, 4, 0, 2, 0, 0, 0, ++ 100, 1, 4, 0, 1, 0, 113, 20, 100, 1, 4, 0, 4, 2, 0, 0, 96, 1, 4, 0, ++ 92, 2, 1, 3, 100, 1, 4, 0, 3, 0, 0, 0, 100, 1, 4, 0, 1, 0, 113, 20, ++ 100, 1, 4, 0, 4, 2, 0, 0, 96, 1, 4, 0, 96, 2, 1, 3, 100, 1, 4, 0, 0, ++ 0, 1, 0, 96, 1, 4, 0, 108, 2, 1, 3, 100, 1, 4, 0, 32, 0, 0, 0, 96, 1, ++ 4, 0, 18, 4, 1, 3, 100, 1, 4, 0, 0, 0, 12, 0, 96, 1, 4, 0, 80, 5, 1, ++ 3, 100, 1, 4, 0, 24, 0, 0, 0, 100, 1, 4, 0, 152, 58, 152, 58, 100, 1, ++ 4, 0, 166, 14, 100, 0, 100, 1, 4, 0, 0, 0, 244, 1, 100, 1, 4, 0, 15, ++ 0, 0, 0, 100, 1, 4, 0, 200, 175, 168, 97, 100, 1, 4, 0, 32, 78, 30, ++ 0, 100, 1, 4, 0, 0, 0, 3, 0, 100, 1, 4, 0, 3, 0, 0, 0, 100, 1, 4, 0, ++ 80, 195, 0, 0, 96, 1, 4, 0, 91, 5, 1, 3, 100, 1, 4, 0, 0, 0, 20, 5, ++ 100, 1, 4, 0, 226, 4, 0, 0, 96, 1, 4, 0, 95, 5, 1, 3, 100, 1, 4, 0, ++ 32, 78, 0, 0, 100, 1, 4, 0, 0, 0, 15, 0, 100, 1, 4, 0, 244, 1, 3, 0, ++ 96, 1, 4, 0, 101, 5, 1, 3, 100, 1, 4, 0, 0, 0, 19, 0, 100, 1, 4, 0, ++ 0, 0, 3, 0, 100, 1, 4, 0, 1, 0, 7, 0, 100, 1, 4, 0, 200, 175, 0, 0, ++ 100, 1, 4, 0, 136, 19, 0, 0, 100, 1, 4, 0, 44, 23, 223, 64, 96, 1, 4, ++ 0, 108, 5, 1, 3, 100, 1, 4, 0, 0, 0, 44, 1, 100, 1, 4, 0, 0, 0, 160, ++ 15, 96, 1, 4, 0, 111, 5, 1, 3, 100, 1, 4, 0, 0, 0, 2, 0, 100, 1, 4, ++ 0, 0, 0, 44, 1, 100, 1, 4, 0, 192, 0, 0, 0, 100, 1, 4, 0, 192, 68, 0, ++ 0, 100, 1, 4, 0, 100, 0, 0, 0, 100, 1, 4, 0, 220, 5, 64, 31, 100, 1, ++ 4, 0, 0, 0, 70, 0, 100, 1, 4, 0, 80, 0, 80, 0, 100, 1, 4, 0, 2, 0, 0, ++ 0, 100, 1, 4, 0, 245, 10, 0, 0, 96, 1, 4, 0, 122, 5, 1, 3, 100, 1, 4, ++ 0, 32, 16, 64, 156, 100, 1, 4, 0, 32, 78, 0, 0, 100, 1, 4, 0, 184, 11, ++ 0, 0, 96, 1, 4, 0, 126, 5, 1, 3, 100, 1, 4, 0, 0, 0, 32, 78, 100, 1, ++ 4, 0, 0, 0, 5, 0, 100, 1, 4, 0, 220, 5, 63, 0, 100, 1, 4, 0, 113, 2, ++ 0, 0, 100, 1, 4, 0, 48, 117, 0, 0, 96, 1, 4, 0, 134, 5, 1, 3, 100, 1, ++ 4, 0, 196, 9, 160, 15, 96, 1, 4, 0, 137, 5, 1, 3, 100, 1, 4, 0, 0, 0, ++ 208, 7, 96, 1, 4, 0, 139, 5, 1, 3, 100, 1, 4, 0, 32, 78, 32, 78, 96, ++ 1, 4, 0, 142, 5, 1, 3, 100, 1, 4, 0, 32, 0, 128, 64, 100, 1, 4, 0, 0, ++ 0, 10, 0, 100, 1, 4, 0, 232, 3, 232, 28, 100, 1, 4, 0, 56, 74, 0, 0, ++ 96, 1, 4, 0, 147, 5, 1, 3, 100, 1, 4, 0, 0, 0, 100, 0, 96, 1, 4, 0, ++ 159, 5, 1, 3, 100, 1, 4, 0, 2, 0, 148, 2, 96, 1, 4, 0, 161, 5, 1, 3, ++ 100, 1, 4, 0, 225, 0, 0, 0, 96, 1, 4, 0, 164, 5, 1, 3, 100, 1, 4, 0, ++ 48, 117, 0, 0, 96, 1, 4, 0, 167, 5, 1, 3, 100, 1, 4, 0, 220, 5, 0, 0, ++ 100, 1, 4, 0, 88, 27, 0, 0, 96, 1, 4, 0, 175, 5, 1, 3, 100, 1, 4, 0, ++ 0, 0, 15, 0, 100, 1, 4, 0, 200, 0, 0, 0, 96, 1, 4, 0, 178, 5, 1, 3, ++ 100, 1, 4, 0, 0, 0, 2, 0, 100, 1, 4, 0, 0, 0, 100, 0, 96, 1, 4, 0, 191, ++ 5, 1, 3, 100, 1, 4, 0, 0, 0, 190, 0, 96, 1, 4, 0, 47, 12, 1, 0, 100, ++ 1, 2, 0, 0, 0, 0, 0, 96, 1, 4, 0, 3, 0, 2, 0, 100, 1, 4, 0, 31, 0, 0, ++ 0, 96, 1, 4, 0, 4, 0, 2, 0, 100, 1, 4, 0, 255, 3, 0, 0, 96, 1, 4, 0, ++ 5, 0, 2, 0, 100, 1, 4, 0, 31, 0, 0, 0, 96, 1, 4, 0, 6, 0, 2, 0, 100, ++ 1, 4, 0, 7, 0, 0, 0, 96, 1, 4, 0, 7, 0, 2, 0, 100, 1, 4, 0, 4, 0, 0, ++ 0, 96, 1, 4, 0, 8, 0, 2, 0, 100, 1, 4, 0, 255, 255, 0, 0, 96, 1, 4, ++ 0, 9, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, 10, 0, 2, 0, 100, ++ 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, 11, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, ++ 0, 96, 1, 4, 0, 12, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, ++ 13, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, 14, 0, 2, 0, 100, ++ 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, 15, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, ++ 0, 96, 1, 4, 0, 16, 0, 2, 0, 100, 1, 4, 0, 31, 0, 0, 0, 96, 1, 4, 0, ++ 17, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, 18, 0, 2, 0, 100, ++ 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, 19, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, ++ 0, 96, 1, 4, 0, 21, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, 0, 96, 1, 4, 0, ++ 22, 0, 2, 0, 100, 1, 4, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 134, ++ 6, 2, 0, 208, 9, 0, 0, 128, 6, 2, 0, 62, 62, 0, 0, 130, 6, 2, 0, 62, ++ 2, 0, 0, 0, 7, 2, 0, 60, 0, 0, 0, 132, 6, 2, 0, 18, 2, 0, 0, 96, 1, ++ 4, 0, 3, 0, 1, 0, 100, 1, 2, 0, 192, 0, 0, 0, 96, 1, 4, 0, 3, 0, 1, ++ 0, 102, 1, 2, 0, 10, 0, 0, 0, 96, 1, 4, 0, 4, 0, 1, 0, 100, 1, 2, 0, ++ 20, 0, 0, 0, 96, 1, 4, 0, 7, 0, 1, 0, 100, 1, 2, 0, 131, 1, 0, 0, 96, ++ 1, 4, 0, 37, 0, 1, 0, 100, 1, 2, 0, 244, 1, 0, 0, 96, 1, 4, 0, 193, ++ 5, 1, 0, 100, 1, 2, 0, 43, 4, 0, 0, 96, 1, 4, 0, 193, 5, 1, 0, 102, ++ 1, 2, 0, 0, 1, 0, 0, 96, 1, 4, 0, 225, 1, 1, 0, 100, 1, 2, 0, 60, 0, ++ 0, 0, 96, 1, 4, 0, 230, 1, 1, 0, 102, 1, 2, 0, 52, 0, 0, 0, 96, 1, 4, ++ 0, 236, 1, 1, 0, 100, 1, 2, 0, 48, 0, 0, 0, 96, 1, 4, 0, 241, 1, 1, ++ 0, 102, 1, 2, 0, 44, 0, 0, 0, 96, 1, 4, 0, 247, 1, 1, 0, 100, 1, 2, ++ 0, 44, 0, 0, 0, 96, 1, 4, 0, 252, 1, 1, 0, 102, 1, 2, 0, 40, 0, 0, 0, ++ 96, 1, 4, 0, 2, 2, 1, 0, 100, 1, 2, 0, 40, 0, 0, 0, 96, 1, 4, 0, 7, ++ 2, 1, 0, 102, 1, 2, 0, 40, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 121, ++ 113, 128, 0, 245, 117, 128, 0, 153, 118, 128, 0, 149, 117, 128, 0, 113, ++ 120, 128, 0, 33, 119, 128, 0, 133, 120, 128, 0, 153, 120, 128, 0, 165, ++ 117, 128, 0, 185, 117, 128, 0, 41, 159, 0, 0, 193, 120, 128, 0, 153, ++ 116, 128, 0, 93, 120, 128, 0, 247, 158, 0, 0, 173, 155, 0, 0, 47, 154, ++ 0, 0, 115, 154, 0, 0, 205, 115, 128, 0, 41, 116, 128, 0, 181, 115, 128, ++ 0, 53, 119, 128, 0, 157, 114, 128, 0, 73, 117, 128, 0, 41, 117, 128, ++ 0, 129, 117, 128, 0, 187, 153, 0, 0, 25, 117, 128, 0, 37, 158, 0, 0, ++ 81, 160, 0, 0, 215, 157, 0, 0, 201, 157, 0, 0, 29, 155, 0, 0, 33, 154, ++ 0, 0, 197, 113, 128, 0, 209, 113, 128, 0, 249, 112, 128, 0, 121, 155, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 155, 0, 0, 253, 115, 128, ++ 0, 213, 115, 128, 0, 117, 156, 0, 0, 49, 115, 128, 0, 237, 112, 128, ++ 0, 229, 112, 128, 0, 125, 156, 0, 0, 1, 114, 128, 0, 177, 112, 128, ++ 0, 40, 0, 0, 0, 119, 108, 48, 58, 100, 109, 97, 48, 0, 15, 0, 0, 0, ++ 4, 1, 0, 0, 8, 7, 0, 0, 0, 7, 7, 0, 0, 7, 4, 0, 0, 0, 4, 4, 0, 0, 4, ++ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 177, 8, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1, 4, 0, 226, ++ 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, ++ 0, 0, 221, 200, 141, 0, 4, 4, 4, 4, 4, 1, 4, 0, 226, 4, 0, 8, 10, 0, ++ 0, 0, 106, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 140, 46, 186, ++ 0, 4, 4, 4, 4, 4, 1, 4, 0, 226, 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, ++ 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 49, 25, 0, 0, 0, 0, 160, 0, 12, 12, 12, 12, 10, 3, ++ 4, 0, 226, 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 177, 18, 0, 0, 39, 118, 98, 0, 12, 12, 12, 12, 10, 3, 4, 0, 226, ++ 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 12, ++ 0, 0, 20, 67, 253, 0, 12, 12, 12, 12, 10, 3, 4, 0, 226, 4, 0, 8, 10, ++ 0, 0, 0, 106, 16, 0, 0, 224, 46, 1, 1, 1, 80, 0, 0, 0, 0, 0, 0, 200, ++ 50, 2, 1, 1, 73, 0, 0, 137, 157, 216, 0, 64, 56, 3, 1, 1, 66, 0, 0, ++ 170, 170, 170, 0, 0, 60, 4, 1, 1, 62, 0, 0, 0, 0, 128, 0, 72, 63, 5, ++ 1, 1, 59, 0, 0, 208, 94, 66, 0, 160, 65, 6, 1, 1, 57, 0, 0, 73, 146, ++ 36, 0, 0, 75, 7, 1, 1, 50, 0, 0, 0, 0, 0, 0, 88, 77, 8, 1, 1, 48, 0, ++ 0, 7, 31, 124, 0, 32, 78, 9, 1, 1, 48, 0, 0, 0, 0, 0, 0, 192, 93, 10, ++ 1, 1, 40, 0, 0, 0, 0, 0, 0, 168, 97, 11, 1, 1, 38, 0, 0, 102, 102, 102, ++ 0, 144, 101, 12, 1, 1, 36, 0, 0, 196, 78, 236, 0, 48, 117, 13, 1, 1, ++ 32, 0, 0, 0, 0, 0, 0, 64, 131, 14, 1, 1, 28, 0, 0, 36, 73, 146, 0, 24, ++ 146, 15, 2, 1, 51, 0, 0, 249, 62, 86, 0, 0, 150, 16, 2, 1, 50, 0, 0, ++ 0, 0, 0, 0, 64, 156, 17, 2, 1, 48, 0, 0, 0, 0, 0, 0, 128, 187, 18, 2, ++ 1, 40, 0, 0, 0, 0, 0, 0, 32, 203, 19, 2, 1, 36, 0, 0, 196, 78, 236, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 111, 97, 114, 100, 102, 108, ++ 97, 103, 115, 51, 0, 115, 112, 117, 114, 99, 111, 110, 102, 105, 103, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 25, 0, 0, 171, 170, 10, 0, 11, 12, ++ 12, 12, 10, 3, 4, 0, 226, 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 177, 18, 0, 0, 20, 59, 177, 0, 11, 12, 12, 12, 10, ++ 3, 4, 0, 226, 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 49, 13, 0, 0, 122, 5, 52, 0, 11, 12, 12, 12, 10, 3, 4, 0, 226, ++ 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 0, 18, 16, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 25, 0, 0, 0, 0, 64, 0, 12, 12, 12, ++ 12, 10, 3, 4, 0, 226, 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 177, 18, 0, 0, 255, 136, 216, 0, 12, 12, 12, 12, 10, ++ 3, 4, 0, 226, 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 177, 13, 0, 0, 240, 255, 78, 0, 12, 12, 12, 12, 10, 3, 4, 0, 226, ++ 4, 0, 8, 10, 0, 0, 0, 106, 16, 0, 0, 119, 100, 115, 37, 100, 46, 37, ++ 100, 0, 119, 108, 37, 100, 0, 37, 48, 52, 120, 0, 119, 108, 0, 119, ++ 108, 37, 100, 58, 32, 37, 115, 32, 37, 115, 32, 118, 101, 114, 115, ++ 105, 111, 110, 32, 37, 115, 32, 70, 87, 73, 68, 32, 48, 49, 45, 37, ++ 120, 10, 0, 74, 97, 110, 32, 51, 48, 32, 50, 48, 50, 48, 0, 50, 49, ++ 58, 52, 49, 58, 53, 51, 0, 170, 170, 3, 0, 0, 0, 116, 107, 111, 0, 72, ++ 50, 4, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, 255, 15, 2, 0, ++ 4, 0, 6, 0, 97, 112, 32, 0, 115, 116, 97, 32, 0, 119, 109, 101, 32, ++ 0, 56, 48, 50, 46, 49, 49, 100, 32, 0, 56, 48, 50, 46, 49, 49, 104, ++ 32, 0, 114, 109, 32, 0, 99, 97, 99, 32, 0, 97, 109, 112, 100, 117, 32, ++ 0, 97, 109, 112, 100, 117, 95, 116, 120, 32, 0, 97, 109, 112, 100, 117, ++ 95, 114, 120, 32, 0, 97, 109, 115, 100, 117, 114, 120, 32, 0, 97, 109, ++ 115, 100, 117, 116, 120, 32, 0, 114, 97, 100, 105, 111, 95, 112, 119, ++ 114, 115, 97, 118, 101, 32, 0, 112, 50, 112, 32, 0, 109, 99, 104, 97, ++ 110, 32, 0, 112, 50, 112, 111, 32, 0, 97, 110, 113, 112, 111, 32, 0, ++ 100, 102, 114, 116, 115, 32, 0, 116, 120, 112, 119, 114, 99, 97, 99, ++ 104, 101, 32, 0, 115, 116, 98, 99, 45, 116, 120, 32, 0, 115, 116, 98, ++ 99, 45, 114, 120, 45, 49, 115, 115, 32, 0, 119, 110, 109, 32, 0, 98, ++ 115, 115, 116, 114, 97, 110, 115, 32, 0, 109, 102, 112, 32, 0, 115, ++ 97, 101, 32, 0, 119, 108, 37, 100, 58, 32, 80, 83, 77, 32, 109, 105, ++ 99, 114, 111, 99, 111, 100, 101, 32, 119, 97, 116, 99, 104, 100, 111, ++ 103, 32, 102, 105, 114, 101, 100, 32, 40, 37, 100, 41, 32, 97, 116, ++ 32, 37, 100, 32, 40, 115, 101, 99, 111, 110, 100, 115, 41, 10, 0, 119, ++ 108, 37, 100, 58, 32, 80, 83, 77, 32, 75, 101, 101, 112, 32, 65, 108, ++ 105, 118, 101, 32, 40, 37, 100, 41, 32, 35, 32, 37, 100, 32, 10, 0, ++ 119, 108, 99, 0, 109, 105, 110, 95, 116, 120, 112, 111, 119, 101, 114, ++ 0, 98, 99, 110, 116, 114, 105, 109, 95, 115, 116, 97, 116, 115, 0, 98, ++ 99, 110, 116, 114, 105, 109, 0, 98, 99, 110, 95, 108, 111, 115, 115, ++ 95, 114, 111, 97, 109, 95, 115, 116, 97, 114, 116, 0, 98, 99, 110, 95, ++ 114, 101, 97, 113, 117, 105, 114, 101, 95, 115, 116, 97, 114, 116, 0, ++ 98, 99, 110, 95, 119, 97, 105, 116, 95, 112, 114, 100, 0, 99, 117, 115, ++ 116, 111, 109, 118, 97, 114, 50, 0, 108, 111, 103, 116, 114, 97, 99, ++ 101, 0, 112, 109, 95, 98, 99, 109, 99, 95, 109, 111, 114, 101, 100, ++ 97, 116, 97, 95, 119, 97, 105, 116, 0, 114, 111, 97, 109, 95, 98, 99, ++ 110, 108, 111, 115, 115, 95, 111, 102, 102, 0, 114, 111, 97, 109, 111, ++ 102, 102, 108, 95, 98, 115, 115, 105, 100, 95, 108, 105, 115, 116, 0, ++ 0, 166, 51, 4, 0, 28, 1, 0, 0, 8, 0, 44, 0, 180, 51, 4, 0, 27, 1, 0, ++ 0, 6, 0, 0, 0, 188, 51, 4, 0, 26, 1, 0, 0, 7, 0, 0, 0, 208, 51, 4, 0, ++ 25, 1, 0, 0, 7, 0, 0, 0, 227, 51, 4, 0, 24, 1, 0, 0, 3, 0, 0, 0, 240, ++ 51, 4, 0, 42, 0, 0, 128, 7, 0, 0, 0, 210, 82, 136, 0, 241, 0, 0, 0, ++ 8, 0, 188, 1, 76, 134, 136, 0, 2, 0, 0, 64, 6, 0, 0, 0, 201, 81, 136, ++ 0, 39, 0, 0, 64, 5, 0, 0, 0, 173, 101, 136, 0, 233, 0, 0, 64, 8, 0, ++ 4, 0, 11, 180, 136, 0, 20, 1, 0, 64, 8, 0, 176, 0, 251, 51, 4, 0, 23, ++ 1, 0, 0, 1, 0, 0, 0, 4, 52, 4, 0, 21, 1, 0, 0, 5, 0, 0, 0, 159, 90, ++ 136, 0, 9, 1, 0, 0, 5, 0, 0, 0, 60, 84, 136, 0, 136, 0, 1, 0, 5, 0, ++ 0, 0, 246, 81, 136, 0, 44, 0, 16, 64, 7, 0, 0, 0, 229, 88, 136, 0, 235, ++ 0, 0, 0, 7, 0, 0, 0, 130, 82, 136, 0, 73, 0, 0, 0, 0, 0, 0, 0, 26, 52, ++ 4, 0, 22, 1, 0, 0, 1, 0, 0, 0, 43, 52, 4, 0, 19, 1, 0, 0, 8, 0, 0, 0, ++ 5, 91, 136, 0, 17, 1, 0, 0, 1, 0, 0, 0, 82, 83, 136, 0, 80, 0, 0, 64, ++ 3, 0, 0, 0, 89, 83, 136, 0, 81, 0, 0, 64, 2, 0, 0, 0, 149, 44, 136, ++ 0, 28, 0, 0, 64, 8, 0, 4, 0, 37, 77, 136, 0, 46, 0, 0, 64, 6, 0, 0, ++ 0, 194, 76, 136, 0, 30, 0, 0, 64, 8, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 49, 49, 100, 0, 0, 0, 76, 93, 136, ++ 0, 0, 0, 0, 0, 8, 0, 0, 0, 96, 93, 136, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 104, 0, 49, 49, 117, 0, 221, ++ 22, 0, 80, 242, 1, 1, 0, 0, 80, 242, 255, 1, 0, 0, 80, 242, 255, 1, ++ 0, 0, 80, 242, 255, 119, 108, 99, 95, 100, 117, 109, 112, 95, 97, 103, ++ 103, 102, 105, 102, 111, 0, 0, 0, 0, 216, 54, 4, 0, 0, 0, 128, 0, 1, ++ 0, 0, 0, 123, 55, 4, 0, 1, 0, 0, 0, 8, 0, 2, 0, 133, 55, 4, 0, 2, 0, ++ 0, 0, 3, 0, 0, 0, 150, 55, 4, 0, 3, 0, 0, 0, 8, 0, 8, 0, 167, 55, 4, ++ 0, 4, 0, 0, 0, 8, 0, 8, 0, 184, 55, 4, 0, 5, 0, 128, 0, 1, 0, 0, 0, ++ 202, 55, 4, 0, 7, 0, 0, 0, 2, 0, 0, 0, 213, 55, 4, 0, 9, 0, 0, 0, 1, ++ 0, 0, 0, 223, 55, 4, 0, 11, 0, 0, 0, 3, 0, 0, 0, 241, 55, 4, 0, 23, ++ 0, 0, 0, 3, 0, 0, 0, 251, 55, 4, 0, 24, 0, 0, 0, 3, 0, 0, 0, 11, 56, ++ 4, 0, 25, 0, 0, 0, 3, 0, 0, 0, 20, 56, 4, 0, 26, 0, 128, 0, 2, 0, 0, ++ 0, 34, 56, 4, 0, 28, 0, 0, 0, 1, 0, 0, 0, 54, 56, 4, 0, 29, 0, 0, 0, ++ 0, 0, 0, 0, 75, 56, 4, 0, 30, 0, 0, 0, 0, 0, 0, 0, 95, 56, 4, 0, 31, ++ 0, 0, 0, 0, 0, 0, 0, 108, 56, 4, 0, 32, 0, 0, 0, 3, 0, 0, 0, 122, 56, ++ 4, 0, 37, 0, 4, 0, 8, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, ++ 109, 112, 100, 117, 95, 116, 120, 0, 37, 115, 58, 32, 99, 108, 107, ++ 32, 111, 102, 102, 10, 0, 102, 105, 102, 111, 32, 37, 100, 58, 32, 114, ++ 112, 116, 114, 32, 37, 120, 32, 119, 112, 116, 114, 32, 37, 120, 10, ++ 0, 9, 101, 110, 116, 114, 121, 32, 37, 100, 32, 97, 100, 100, 114, 32, ++ 48, 120, 37, 120, 58, 32, 48, 120, 37, 120, 10, 0, 100, 114, 105, 118, ++ 101, 114, 32, 115, 116, 97, 116, 105, 115, 116, 105, 99, 115, 58, 32, ++ 97, 103, 103, 102, 105, 102, 111, 32, 112, 101, 110, 100, 105, 110, ++ 103, 32, 37, 100, 32, 101, 110, 113, 117, 101, 47, 99, 111, 110, 115, ++ 32, 37, 100, 32, 37, 100, 10, 0, 84, 88, 32, 77, 67, 83, 32, 32, 58, ++ 0, 32, 32, 37, 100, 40, 37, 100, 37, 37, 41, 0, 10, 32, 32, 32, 32, ++ 32, 32, 32, 32, 58, 0, 97, 109, 112, 100, 117, 95, 116, 105, 100, 0, ++ 97, 109, 112, 100, 117, 95, 116, 120, 95, 100, 101, 110, 115, 105, 116, ++ 121, 0, 97, 109, 112, 100, 117, 95, 115, 101, 110, 100, 95, 97, 100, ++ 100, 98, 97, 0, 97, 109, 112, 100, 117, 95, 115, 101, 110, 100, 95, ++ 100, 101, 108, 98, 97, 0, 97, 109, 112, 100, 117, 95, 109, 97, 110, ++ 117, 97, 108, 95, 109, 111, 100, 101, 0, 97, 109, 112, 100, 117, 95, ++ 109, 112, 100, 117, 0, 97, 109, 112, 100, 117, 95, 114, 116, 115, 0, ++ 97, 109, 112, 100, 117, 95, 114, 101, 116, 114, 121, 95, 108, 105, 109, ++ 105, 116, 0, 97, 99, 107, 95, 114, 97, 116, 105, 111, 0, 97, 99, 107, ++ 95, 114, 97, 116, 105, 111, 95, 100, 101, 112, 116, 104, 0, 97, 109, ++ 112, 100, 117, 109, 97, 99, 0, 97, 109, 112, 100, 117, 95, 97, 103, ++ 103, 109, 111, 100, 101, 0, 102, 114, 97, 109, 101, 98, 117, 114, 115, ++ 116, 95, 111, 118, 101, 114, 114, 105, 100, 101, 0, 97, 109, 112, 100, ++ 117, 95, 116, 120, 113, 95, 112, 114, 111, 102, 95, 115, 116, 97, 114, ++ 116, 0, 97, 109, 112, 100, 117, 95, 116, 120, 113, 95, 112, 114, 111, ++ 102, 95, 100, 117, 109, 112, 0, 97, 109, 112, 100, 117, 95, 116, 120, ++ 113, 95, 115, 115, 0, 97, 109, 112, 100, 117, 95, 114, 101, 108, 101, ++ 97, 115, 101, 0, 97, 109, 112, 100, 117, 95, 116, 120, 97, 103, 103, ++ 114, 0, 0, 160, 56, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 97, 109, 112, 100, 117, 95, 99, 108, 101, 97, 114, ++ 95, 100, 117, 109, 112, 0, 82, 88, 32, 77, 67, 83, 32, 32, 58, 0, 0, ++ 148, 107, 136, 0, 4, 0, 0, 0, 7, 0, 0, 0, 136, 107, 136, 0, 3, 0, 0, ++ 0, 5, 0, 0, 0, 135, 106, 136, 0, 12, 0, 128, 0, 1, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 115, 136, 0, 6, 0, 0, 0, 6, 0, 0, 0, ++ 28, 57, 4, 0, 40, 0, 0, 0, 1, 0, 0, 0, 48, 57, 4, 0, 39, 0, 32, 0, 7, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 114, 111, 120, 121, ++ 95, 97, 114, 112, 95, 97, 100, 118, 101, 114, 116, 105, 115, 101, 0, ++ 115, 99, 98, 95, 109, 97, 120, 95, 112, 114, 111, 98, 101, 0, 97, 112, ++ 112, 115, 0, 97, 95, 119, 112, 97, 0, 97, 95, 119, 112, 97, 105, 0, ++ 37, 115, 58, 32, 104, 111, 115, 116, 95, 101, 110, 97, 98, 32, 37, 100, ++ 10, 0, 0, 0, 136, 57, 4, 0, 0, 0, 0, 64, 8, 0, 16, 0, 153, 57, 4, 0, ++ 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 110, ++ 116, 101, 114, 102, 97, 99, 101, 95, 99, 114, 101, 97, 116, 101, 0, ++ 105, 110, 116, 101, 114, 102, 97, 99, 101, 95, 114, 101, 109, 111, 118, ++ 101, 0, 98, 116, 99, 0, 0, 0, 220, 57, 4, 0, 3, 0, 0, 0, 7, 0, 0, 0, ++ 235, 57, 4, 0, 2, 0, 128, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 66, 76, 79, 66, 0, 95, 95, 0, 99, 108, 109, 108, 111, 97, 100, ++ 95, 115, 116, 97, 116, 117, 115, 0, 99, 108, 109, 108, 111, 97, 100, ++ 0, 88, 89, 0, 0, 88, 65, 0, 0, 88, 66, 0, 0, 88, 48, 0, 0, 88, 49, 0, ++ 0, 88, 50, 0, 0, 88, 51, 0, 0, 88, 83, 0, 0, 88, 86, 0, 0, 88, 84, 0, ++ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 24, 59, 4, 0, ++ 0, 0, 0, 0, 178, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, ++ 0, 0, 22, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 4, 0, 0, 0, ++ 0, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 26, 0, 0, 0, 8, 0, 0, ++ 0, 1, 0, 0, 0, 68, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 116, 0, 0, 0, 8, ++ 0, 0, 0, 1, 0, 0, 0, 142, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, ++ 0, 240, 58, 4, 0, 119, 119, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 1, 0, 16, 17, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, ++ 0, 12, 0, 0, 0, 3, 0, 0, 0, 38, 62, 8, 102, 142, 8, 151, 159, 8, 0, ++ 0, 0, 32, 60, 4, 0, 12, 60, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 218, ++ 135, 0, 0, 0, 0, 0, 6, 60, 4, 0, 0, 60, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 220, 59, 4, 0, 144, 60, 4, 0, 228, 59, 4, 0, 127, 178, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 59, 4, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 20, 60, 4, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 50, 48, 50, 48, 45, 48, 49, 45, 51, 48, 32, 50, 49, 58, ++ 51, 48, 58, 50, 48, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 35, 110, 0, 0, 0, 255, 255, 240, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 12, 0, 2, 0, ++ 57, 46, 49, 48, 46, 51, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, ++ 46, 50, 57, 46, 52, 0, 0, 0, 0, 40, 60, 4, 0, 36, 59, 4, 0, 67, 108, ++ 109, 73, 109, 112, 111, 114, 116, 58, 32, 49, 46, 51, 54, 46, 51, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 114, 111, 97, 100, 99, 111, ++ 109, 45, 48, 46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 63, 157, 136, 0, 3, 0, 0, 0, 8, 0, 188, 1, 100, 93, 136, 0, 0, ++ 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 110, 116, ++ 114, 121, 0, 100, 117, 109, 112, 95, 105, 110, 102, 111, 0, 10, 37, ++ 115, 58, 45, 45, 45, 45, 45, 45, 10, 0, 90, 56, 4, 0, 0, 0, 0, 64, 8, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 118, 101, 110, 116, ++ 113, 0, 102, 98, 116, 0, 0, 88, 232, 135, 0, 21, 0, 0, 0, 109, 232, ++ 135, 0, 23, 0, 0, 0, 0, 233, 135, 0, 26, 0, 0, 0, 26, 233, 135, 0, 27, ++ 0, 0, 0, 192, 232, 135, 0, 14, 0, 0, 0, 206, 232, 135, 0, 50, 0, 0, ++ 0, 206, 232, 135, 0, 50, 0, 0, 0, 139, 232, 135, 0, 51, 0, 0, 0, 139, ++ 232, 135, 0, 51, 0, 0, 0, 139, 232, 135, 0, 51, 0, 0, 0, 191, 232, 135, ++ 0, 1, 0, 0, 0, 132, 232, 135, 0, 7, 0, 0, 0, 190, 232, 135, 0, 1, 0, ++ 0, 0, 105, 101, 109, 0, 0, 144, 76, 4, 104, 0, 144, 76, 51, 80, 0, 144, ++ 76, 53, 88, 0, 144, 76, 54, 156, 0, 144, 76, 90, 200, 0, 80, 242, 1, ++ 160, 0, 80, 242, 4, 164, 80, 111, 154, 16, 190, 80, 111, 154, 9, 192, ++ 80, 111, 154, 18, 196, 0, 64, 150, 4, 170, 0, 64, 150, 8, 178, 0, 64, ++ 150, 3, 174, 0, 64, 150, 1, 173, 80, 111, 154, 19, 197, 105, 101, 114, ++ 0, 108, 113, 0, 110, 111, 105, 115, 101, 95, 108, 116, 101, 95, 114, ++ 101, 115, 101, 116, 0, 114, 115, 115, 105, 95, 109, 111, 110, 105, 116, ++ 111, 114, 0, 0, 186, 61, 4, 0, 3, 0, 0, 0, 6, 0, 0, 0, 71, 172, 136, ++ 0, 0, 0, 0, 0, 8, 0, 12, 0, 202, 61, 4, 0, 26, 0, 0, 0, 8, 0, 4, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 175, 136, 0, 14, 0, 0, 0, 7, ++ 0, 0, 0, 0, 176, 136, 0, 18, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 98, 105, 112, 0, 44, 62, 4, 0, 1, 0, 64, 0, 8, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 73, 82, 69, 67, 84, 45, ++ 0, 67, 50, 136, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 45, 0, 167, 144, 26, 0, 71, 9, 14, 0, 1, 32, 7, 0, 139, ++ 147, 3, 0, 56, 202, 1, 0, 42, 229, 0, 0, 151, 114, 0, 0, 76, 57, 0, ++ 0, 166, 28, 0, 0, 83, 14, 0, 0, 41, 7, 0, 0, 149, 3, 0, 0, 202, 1, 0, ++ 0, 229, 0, 0, 0, 115, 0, 0, 0, 57, 0, 0, 0, 29, 0, 0, 0, 1, 0, 108, ++ 9, 2, 0, 113, 9, 3, 0, 118, 9, 4, 0, 123, 9, 5, 0, 128, 9, 6, 0, 133, ++ 9, 7, 0, 138, 9, 8, 0, 143, 9, 9, 0, 148, 9, 10, 0, 153, 9, 11, 0, 158, ++ 9, 12, 0, 163, 9, 13, 0, 168, 9, 14, 0, 180, 9, 96, 48, 24, 12, 108, ++ 72, 36, 18, 4, 65, 4, 0, 247, 1, 0, 0, 7, 0, 0, 0, 15, 65, 4, 0, 55, ++ 1, 32, 0, 7, 0, 0, 0, 32, 65, 4, 0, 71, 1, 0, 0, 3, 0, 0, 0, 42, 65, ++ 4, 0, 119, 1, 128, 0, 8, 0, 64, 0, 49, 65, 4, 0, 245, 1, 128, 0, 3, ++ 0, 0, 0, 62, 65, 4, 0, 1, 2, 128, 0, 3, 0, 0, 0, 70, 65, 4, 0, 81, 1, ++ 8, 0, 3, 0, 0, 0, 86, 65, 4, 0, 82, 1, 8, 0, 3, 0, 0, 0, 99, 65, 4, ++ 0, 83, 1, 8, 0, 3, 0, 0, 0, 113, 65, 4, 0, 90, 1, 0, 0, 3, 0, 0, 0, ++ 124, 65, 4, 0, 91, 1, 0, 0, 5, 0, 0, 0, 141, 65, 4, 0, 187, 1, 64, 0, ++ 8, 0, 4, 0, 158, 65, 4, 0, 64, 1, 64, 0, 7, 0, 7, 0, 170, 65, 4, 0, ++ 213, 1, 64, 4, 8, 0, 6, 0, 194, 65, 4, 0, 214, 1, 64, 4, 8, 0, 6, 0, ++ 219, 65, 4, 0, 215, 1, 64, 4, 8, 0, 6, 0, 244, 65, 4, 0, 216, 1, 64, ++ 4, 8, 0, 6, 0, 12, 66, 4, 0, 159, 1, 0, 4, 7, 0, 0, 0, 26, 66, 4, 0, ++ 66, 1, 0, 0, 6, 0, 0, 0, 37, 66, 4, 0, 67, 1, 0, 0, 2, 0, 0, 0, 48, ++ 66, 4, 0, 161, 1, 0, 0, 2, 0, 0, 0, 154, 51, 4, 0, 69, 1, 0, 0, 7, 0, ++ 0, 0, 61, 66, 4, 0, 241, 1, 64, 4, 3, 0, 0, 0, 84, 66, 4, 0, 242, 1, ++ 64, 4, 3, 0, 0, 0, 107, 66, 4, 0, 107, 1, 0, 4, 4, 0, 0, 0, 121, 66, ++ 4, 0, 40, 0, 8, 0, 3, 0, 0, 0, 138, 66, 4, 0, 186, 1, 8, 0, 3, 0, 0, ++ 0, 145, 66, 4, 0, 41, 0, 0, 0, 3, 0, 0, 0, 158, 66, 4, 0, 166, 1, 0, ++ 0, 2, 0, 0, 0, 170, 66, 4, 0, 67, 1, 0, 0, 2, 0, 0, 0, 182, 66, 4, 0, ++ 190, 1, 136, 0, 8, 0, 18, 0, 233, 144, 136, 0, 191, 1, 64, 0, 7, 0, ++ 0, 0, 190, 66, 4, 0, 192, 1, 64, 0, 7, 0, 0, 0, 199, 66, 4, 0, 193, ++ 1, 64, 4, 6, 0, 0, 0, 213, 66, 4, 0, 237, 1, 0, 0, 2, 0, 0, 0, 229, ++ 66, 4, 0, 138, 1, 72, 4, 4, 0, 0, 0, 247, 66, 4, 0, 139, 1, 72, 4, 4, ++ 0, 0, 0, 0, 67, 4, 0, 140, 1, 72, 4, 4, 0, 0, 0, 13, 67, 4, 0, 141, ++ 1, 72, 4, 4, 0, 0, 0, 28, 67, 4, 0, 142, 1, 72, 4, 4, 0, 0, 0, 42, 67, ++ 4, 0, 143, 1, 72, 4, 4, 0, 0, 0, 51, 67, 4, 0, 144, 1, 72, 4, 4, 0, ++ 0, 0, 68, 67, 4, 0, 246, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 112, 104, 121, 0, 99, 97, 108, 95, 112, 101, 114, 105, 111, ++ 100, 0, 110, 111, 105, 115, 101, 95, 109, 101, 97, 115, 95, 116, 105, ++ 109, 101, 114, 0, 112, 104, 121, 95, 109, 117, 116, 101, 100, 0, 112, ++ 97, 118, 97, 114, 115, 0, 112, 97, 112, 97, 114, 97, 109, 98, 119, 118, ++ 101, 114, 0, 115, 114, 111, 109, 114, 101, 118, 0, 112, 104, 121, 95, ++ 103, 108, 105, 116, 99, 104, 116, 104, 114, 115, 104, 0, 112, 104, 121, ++ 95, 110, 111, 105, 115, 101, 95, 117, 112, 0, 112, 104, 121, 95, 110, ++ 111, 105, 115, 101, 95, 100, 119, 110, 0, 112, 104, 121, 95, 112, 101, ++ 114, 99, 97, 108, 0, 112, 104, 121, 95, 112, 101, 114, 99, 97, 108, ++ 95, 100, 101, 108, 97, 121, 0, 112, 104, 121, 95, 102, 111, 114, 99, ++ 101, 95, 99, 114, 115, 109, 105, 110, 0, 112, 104, 121, 95, 114, 120, ++ 105, 113, 101, 115, 116, 0, 112, 104, 121, 95, 114, 115, 115, 105, 95, ++ 103, 97, 105, 110, 95, 100, 101, 108, 116, 97, 95, 53, 103, 108, 0, ++ 112, 104, 121, 95, 114, 115, 115, 105, 95, 103, 97, 105, 110, 95, 100, ++ 101, 108, 116, 97, 95, 53, 103, 109, 108, 0, 112, 104, 121, 95, 114, ++ 115, 115, 105, 95, 103, 97, 105, 110, 95, 100, 101, 108, 116, 97, 95, ++ 53, 103, 109, 117, 0, 112, 104, 121, 95, 114, 115, 115, 105, 95, 103, ++ 97, 105, 110, 95, 100, 101, 108, 116, 97, 95, 53, 103, 104, 0, 112, ++ 104, 121, 110, 111, 105, 115, 101, 95, 115, 114, 111, 109, 0, 110, 117, ++ 109, 95, 115, 116, 114, 101, 97, 109, 0, 98, 97, 110, 100, 95, 114, ++ 97, 110, 103, 101, 0, 115, 117, 98, 98, 97, 110, 100, 53, 103, 118, ++ 101, 114, 0, 97, 110, 116, 95, 100, 105, 118, 101, 114, 115, 105, 116, ++ 121, 95, 115, 119, 95, 99, 111, 114, 101, 48, 0, 97, 110, 116, 95, 100, ++ 105, 118, 101, 114, 115, 105, 116, 121, 95, 115, 119, 95, 99, 111, 114, ++ 101, 49, 0, 112, 104, 121, 95, 116, 101, 109, 112, 115, 101, 110, 115, ++ 101, 0, 112, 104, 121, 95, 111, 99, 108, 115, 99, 100, 101, 110, 97, ++ 98, 108, 101, 0, 108, 110, 108, 100, 111, 50, 0, 112, 104, 121, 95, ++ 114, 120, 97, 110, 116, 115, 101, 108, 0, 112, 104, 121, 95, 99, 114, ++ 115, 95, 119, 97, 114, 0, 115, 117, 98, 98, 97, 110, 100, 95, 105, 100, ++ 120, 0, 112, 97, 118, 97, 114, 115, 50, 0, 112, 104, 121, 95, 100, 115, ++ 115, 102, 0, 112, 104, 121, 95, 101, 100, 95, 116, 104, 114, 101, 115, ++ 104, 0, 112, 104, 121, 95, 116, 120, 115, 119, 99, 116, 114, 108, 109, ++ 97, 112, 0, 112, 104, 121, 95, 115, 114, 111, 109, 116, 101, 109, 112, ++ 115, 101, 110, 115, 101, 0, 114, 120, 103, 95, 114, 115, 115, 105, 0, ++ 114, 115, 115, 105, 95, 99, 97, 108, 95, 114, 101, 118, 0, 114, 117, ++ 100, 95, 97, 103, 99, 95, 101, 110, 97, 98, 108, 101, 0, 103, 97, 105, ++ 110, 95, 99, 97, 108, 95, 116, 101, 109, 112, 0, 105, 110, 116, 95, ++ 111, 118, 114, 50, 0, 116, 101, 109, 112, 95, 99, 111, 109, 112, 95, ++ 116, 114, 108, 111, 115, 115, 0, 112, 104, 121, 95, 111, 99, 108, 95, ++ 102, 111, 114, 99, 101, 95, 99, 111, 114, 101, 48, 0, 164, 4, 247, 5, ++ 74, 7, 158, 8, 241, 9, 241, 9, 164, 4, 164, 4, 164, 4, 164, 4, 164, ++ 4, 164, 4, 164, 4, 164, 4, 164, 4, 228, 12, 146, 16, 65, 20, 240, 23, ++ 159, 27, 159, 27, 228, 12, 228, 12, 228, 12, 228, 12, 228, 12, 228, ++ 12, 228, 12, 228, 12, 228, 12, 187, 62, 187, 62, 187, 62, 142, 67, 97, ++ 72, 97, 72, 154, 38, 184, 7, 166, 9, 16, 12, 113, 15, 77, 19, 32, 24, ++ 226, 30, 65, 48, 24, 94, 24, 94, 85, 101, 12, 123, 195, 144, 195, 144, ++ 231, 57, 148, 11, 121, 14, 24, 18, 41, 23, 243, 28, 48, 36, 83, 46, ++ 97, 72, 207, 115, 118, 125, 29, 135, 17, 164, 4, 193, 4, 193, 53, 77, ++ 121, 14, 77, 19, 32, 24, 243, 28, 154, 38, 65, 48, 231, 57, 130, 96, ++ 173, 128, 140, 141, 106, 154, 72, 167, 38, 180, 4, 193, 53, 77, 21, ++ 16, 77, 19, 188, 25, 43, 32, 154, 38, 120, 51, 86, 64, 241, 102, 226, ++ 3, 203, 10, 65, 48, 97, 72, 62, 68, 253, 90, 90, 7, 130, 7, 74, 7, 216, ++ 6, 70, 6, 251, 4, 168, 11, 108, 58, 104, 46, 220, 36, 71, 29, 66, 23, ++ 121, 18, 172, 14, 66, 9, 110, 20, 221, 20, 65, 20, 4, 19, 109, 17, 216, ++ 13, 97, 32, 72, 162, 232, 128, 100, 102, 85, 81, 155, 64, 81, 51, 195, ++ 40, 184, 25, 40, 97, 45, 77, 77, 61, 112, 52, 161, 44, 115, 35, 194, ++ 94, 252, 94, 80, 94, 164, 93, 54, 95, 137, 94, 221, 93, 112, 95, 22, ++ 94, 189, 145, 195, 115, 7, 99, 132, 95, 66, 89, 231, 70, 36, 142, 122, ++ 142, 120, 141, 119, 140, 209, 142, 206, 141, 204, 140, 40, 143, 34, ++ 141, 72, 173, 28, 149, 142, 127, 8, 123, 249, 114, 83, 91, 22, 183, ++ 13, 172, 56, 182, 238, 180, 118, 172, 167, 182, 92, 181, 222, 172, 202, ++ 181, 136, 192, 58, 168, 199, 145, 113, 125, 79, 107, 83, 91, 22, 183, ++ 43, 191, 56, 182, 254, 192, 159, 191, 167, 182, 115, 193, 20, 192, 232, ++ 193, 255, 255, 255, 255, 192, 255, 255, 255, 183, 181, 151, 96, 229, ++ 0, 0, 0, 0, 0, 20, 29, 40, 52, 52, 52, 0, 29, 0, 0, 0, 0, 0, 32, 32, ++ 32, 32, 32, 32, 0, 32, 0, 0, 0, 0, 0, 64, 64, 64, 64, 91, 108, 0, 128, ++ 0, 74, 0, 0, 64, 4, 1, 0, 0, 0, 74, 100, 68, 0, 74, 68, 128, 0, 0, 74, ++ 255, 0, 64, 4, 1, 0, 1, 0, 24, 0, 48, 0, 96, 0, 96, 0, 128, 0, 128, ++ 0, 249, 5, 217, 5, 6, 6, 107, 6, 1, 7, 209, 8, 197, 3, 192, 0, 242, ++ 0, 49, 1, 128, 1, 227, 1, 97, 2, 254, 2, 191, 4, 153, 16, 64, 16, 189, ++ 16, 213, 17, 117, 19, 126, 24, 121, 10, 22, 2, 161, 2, 79, 3, 43, 4, ++ 63, 5, 155, 6, 81, 8, 47, 13, 247, 23, 43, 30, 251, 37, 103, 44, 44, ++ 52, 174, 65, 146, 24, 131, 24, 176, 24, 221, 24, 116, 24, 161, 24, 206, ++ 24, 101, 24, 191, 24, 242, 35, 65, 45, 231, 52, 217, 54, 177, 58, 228, ++ 73, 219, 36, 197, 36, 8, 37, 76, 37, 175, 36, 242, 36, 53, 37, 152, ++ 36, 31, 37, 192, 53, 118, 62, 5, 73, 180, 75, 2, 81, 252, 101, 223, ++ 50, 34, 54, 29, 51, 122, 51, 1, 54, 254, 50, 91, 51, 225, 53, 60, 51, ++ 0, 86, 109, 98, 150, 113, 255, 131, 78, 154, 79, 181, 112, 90, 157, ++ 86, 222, 90, 204, 85, 105, 86, 167, 90, 152, 85, 52, 86, 100, 85, 0, ++ 1, 2, 3, 4, 5, 254, 247, 248, 249, 250, 251, 252, 253, 255, 0, 62, 0, ++ 172, 0, 4, 3, 134, 4, 8, 6, 10, 8, 13, 4, 255, 3, 64, 0, 13, 4, 0, 112, ++ 0, 64, 162, 4, 255, 3, 64, 0, 162, 4, 0, 112, 0, 64, 12, 5, 255, 1, ++ 0, 0, 248, 9, 4, 0, 4, 0, 218, 6, 64, 0, 64, 0, 116, 5, 0, 32, 0, 32, ++ 117, 5, 0, 2, 0, 2, 164, 4, 0, 64, 0, 0, 164, 4, 0, 128, 0, 128, 208, ++ 4, 32, 0, 0, 0, 164, 4, 255, 1, 0, 0, 164, 4, 0, 4, 0, 4, 165, 4, 255, ++ 3, 44, 1, 165, 4, 0, 224, 0, 160, 165, 4, 0, 28, 0, 0, 13, 4, 255, 3, ++ 64, 0, 13, 4, 0, 112, 0, 64, 162, 4, 255, 3, 64, 0, 162, 4, 0, 112, ++ 0, 64, 168, 4, 255, 0, 1, 0, 208, 4, 192, 127, 0, 0, 12, 5, 255, 1, ++ 0, 0, 166, 4, 0, 128, 0, 128, 166, 4, 255, 1, 255, 0, 154, 4, 255, 1, ++ 255, 0, 244, 9, 0, 128, 0, 128, 244, 9, 0, 56, 0, 32, 244, 9, 255, 3, ++ 55, 0, 153, 4, 255, 3, 120, 0, 159, 4, 0, 192, 0, 64, 159, 4, 255, 3, ++ 144, 1, 215, 4, 8, 0, 8, 0, 215, 4, 0, 112, 0, 32, 172, 9, 60, 0, 20, ++ 0, 248, 9, 4, 0, 4, 0, 214, 70, 1, 0, 218, 6, 8, 0, 0, 0, 218, 6, 128, ++ 0, 0, 0, 218, 6, 0, 128, 0, 0, 218, 6, 0, 128, 0, 128, 211, 6, 0, 128, ++ 0, 128, 211, 6, 0, 128, 0, 0, 218, 6, 0, 128, 0, 0, 217, 4, 4, 0, 0, ++ 0, 217, 4, 8, 0, 8, 0, 3, 0, 4, 0, 6, 0, 9, 0, 13, 0, 18, 0, 25, 0, ++ 25, 1, 25, 2, 25, 3, 25, 4, 25, 5, 25, 6, 25, 7, 35, 7, 50, 7, 71, 7, ++ 100, 7, 64, 4, 1, 0, 1, 0, 74, 68, 0, 0, 85, 6, 0, 240, 0, 128, 218, ++ 10, 0, 64, 0, 64, 0, 1, 0, 1, 252, 0, 2, 0, 252, 0, 1, 0, 252, 0, 0, ++ 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, ++ 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, ++ 0, 0, 8, 0, 0, 0, 9, 0, 0, 217, 4, 4, 0, 4, 0, 217, 4, 8, 0, 0, 0, 217, ++ 4, 2, 0, 2, 0, 215, 4, 1, 0, 1, 0, 215, 4, 64, 0, 0, 0, 251, 227, 101, ++ 0, 5, 174, 101, 0, 73, 120, 101, 0, 197, 66, 101, 0, 121, 13, 101, 0, ++ 102, 216, 100, 0, 138, 163, 100, 0, 229, 110, 100, 0, 119, 58, 100, ++ 0, 64, 6, 100, 0, 64, 210, 99, 0, 117, 158, 99, 0, 224, 106, 99, 0, ++ 236, 239, 98, 0, 3, 0, 4, 0, 6, 0, 9, 0, 13, 0, 18, 0, 25, 0, 35, 0, ++ 50, 0, 71, 0, 100, 0, 100, 1, 100, 2, 100, 3, 100, 4, 100, 5, 100, 6, ++ 100, 7, 0, 1, 4, 0, 0, 0, 3, 0, 0, 1, 3, 0, 0, 2, 3, 0, 0, 3, 3, 0, ++ 0, 4, 3, 0, 0, 5, 3, 0, 0, 6, 3, 0, 0, 7, 3, 0, 0, 8, 3, 0, 0, 9, 3, ++ 0, 0, 10, 3, 0, 0, 10, 3, 1, 0, 10, 3, 2, 0, 10, 3, 3, 0, 10, 3, 4, ++ 208, 4, 1, 0, 0, 0, 211, 4, 255, 0, 0, 0, 211, 4, 0, 255, 0, 0, 208, ++ 4, 16, 0, 0, 0, 208, 4, 4, 0, 0, 0, 208, 4, 2, 0, 0, 0, 210, 4, 255, ++ 0, 0, 0, 210, 4, 0, 255, 0, 0, 208, 4, 8, 0, 0, 0, 217, 4, 1, 0, 1, ++ 0, 217, 4, 2, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, ++ 0, 128, 0, 90, 0, 64, 0, 45, 0, 32, 0, 0, 0, 0, 0, 0, 1, 181, 0, 128, ++ 0, 91, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 128, 0, 31, ++ 8, 224, 23, 255, 127, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 4, 1, 0, 0, 0, 216, ++ 4, 2, 0, 0, 0, 215, 4, 8, 0, 0, 0, 64, 4, 1, 0, 0, 0, 74, 68, 79, 0, ++ 58, 68, 0, 0, 117, 69, 0, 0, 76, 68, 0, 0, 176, 68, 0, 0, 249, 68, 0, ++ 0, 56, 73, 0, 0, 61, 69, 0, 0, 113, 69, 0, 0, 115, 69, 0, 0, 78, 68, ++ 0, 0, 52, 5, 255, 0, 18, 0, 228, 4, 0, 255, 0, 6, 77, 4, 0, 2, 0, 0, ++ 76, 4, 0, 2, 0, 2, 54, 5, 16, 0, 16, 0, 156, 74, 4, 0, 26, 0, 0, 0, ++ 17, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 224, 79, 4, 0, 96, 0, 0, 0, 18, ++ 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 216, 77, 4, 0, 76, 0, 0, 0, 13, 0, ++ 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 2, 3, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 125, 100, 12, 10, 125, 123, 1, ++ 7, 13, 19, 25, 0, 127, 126, 125, 123, 121, 119, 117, 115, 112, 109, ++ 107, 112, 109, 107, 26, 0, 52, 0, 78, 0, 104, 0, 156, 0, 208, 0, 234, ++ 0, 4, 1, 52, 0, 104, 0, 156, 0, 208, 0, 56, 1, 160, 1, 212, 1, 8, 2, ++ 78, 0, 156, 0, 234, 0, 56, 1, 212, 1, 112, 2, 190, 2, 12, 3, 104, 0, ++ 208, 0, 56, 1, 160, 1, 112, 2, 64, 3, 168, 3, 16, 4, 24, 0, 156, 0, ++ 208, 0, 4, 1, 234, 0, 56, 1, 134, 1, 208, 0, 4, 1, 4, 1, 56, 1, 108, ++ 1, 108, 1, 160, 1, 56, 1, 134, 1, 134, 1, 212, 1, 34, 2, 34, 2, 112, ++ 2, 4, 1, 56, 1, 108, 1, 56, 1, 108, 1, 160, 1, 212, 1, 160, 1, 212, ++ 1, 8, 2, 8, 2, 60, 2, 134, 1, 212, 1, 34, 2, 212, 1, 34, 2, 112, 2, ++ 190, 2, 112, 2, 190, 2, 12, 3, 12, 3, 90, 3, 54, 0, 108, 0, 162, 0, ++ 216, 0, 68, 1, 176, 1, 230, 1, 28, 2, 108, 0, 216, 0, 68, 1, 176, 1, ++ 136, 2, 96, 3, 204, 3, 56, 4, 162, 0, 68, 1, 230, 1, 136, 2, 204, 3, ++ 16, 5, 178, 5, 84, 6, 216, 0, 176, 1, 136, 2, 96, 3, 16, 5, 192, 6, ++ 152, 7, 112, 8, 24, 0, 68, 1, 176, 1, 28, 2, 230, 1, 136, 2, 42, 3, ++ 176, 1, 28, 2, 28, 2, 136, 2, 244, 2, 244, 2, 96, 3, 136, 2, 42, 3, ++ 42, 3, 204, 3, 110, 4, 110, 4, 16, 5, 28, 2, 136, 2, 244, 2, 136, 2, ++ 244, 2, 96, 3, 204, 3, 96, 3, 204, 3, 56, 4, 56, 4, 164, 4, 42, 3, 204, ++ 3, 110, 4, 204, 3, 110, 4, 16, 5, 178, 5, 16, 5, 178, 5, 84, 6, 84, ++ 6, 246, 6, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, ++ 1, 183, 1, 183, 1, 183, 1, 0, 0, 234, 75, 4, 0, 128, 0, 0, 0, 2, 0, ++ 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 88, 77, 4, 0, 64, 0, 0, 0, 1, 0, 0, 0, ++ 0, 0, 0, 0, 16, 0, 0, 0, 156, 73, 4, 0, 0, 1, 0, 0, 20, 0, 0, 0, 0, ++ 0, 0, 0, 8, 0, 0, 0, 182, 74, 4, 0, 154, 0, 0, 0, 23, 0, 0, 0, 0, 0, ++ 0, 0, 16, 0, 0, 0, 8, 79, 4, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 16, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 128, 48, 0, 0, 128, 48, 0, 0, 128, 48, 0, 0, 128, 48, 0, 0, ++ 128, 48, 0, 0, 128, 48, 0, 128, 128, 48, 0, 0, 129, 48, 0, 128, 129, ++ 48, 0, 0, 130, 48, 0, 128, 130, 48, 0, 0, 131, 48, 0, 128, 131, 48, ++ 0, 0, 132, 48, 0, 128, 132, 16, 0, 0, 133, 16, 0, 128, 197, 16, 0, 0, ++ 198, 16, 0, 128, 6, 17, 0, 0, 7, 17, 0, 128, 71, 17, 0, 0, 72, 17, 0, ++ 128, 72, 11, 0, 0, 73, 11, 0, 128, 73, 1, 0, 0, 74, 1, 0, 128, 74, 1, ++ 0, 0, 75, 1, 0, 128, 75, 1, 0, 0, 76, 1, 0, 128, 76, 1, 0, 0, 77, 1, ++ 0, 128, 77, 1, 0, 0, 78, 1, 0, 128, 78, 1, 0, 0, 79, 1, 0, 128, 79, ++ 1, 0, 0, 80, 1, 0, 0, 64, 49, 0, 0, 64, 49, 0, 0, 64, 49, 0, 0, 64, ++ 49, 0, 0, 64, 49, 0, 0, 64, 49, 0, 0, 64, 49, 0, 0, 64, 49, 0, 128, ++ 64, 49, 0, 128, 80, 49, 0, 0, 81, 49, 0, 128, 81, 49, 0, 0, 82, 49, ++ 0, 128, 82, 49, 0, 0, 83, 49, 0, 128, 83, 49, 0, 0, 84, 49, 0, 128, ++ 84, 49, 0, 0, 85, 49, 0, 128, 149, 16, 0, 0, 150, 16, 0, 128, 150, 16, ++ 0, 0, 151, 16, 0, 128, 215, 16, 0, 0, 216, 16, 0, 128, 216, 16, 0, 0, ++ 25, 17, 0, 128, 25, 17, 0, 0, 90, 17, 0, 128, 90, 17, 0, 0, 91, 11, ++ 0, 128, 91, 11, 0, 0, 92, 11, 0, 128, 92, 11, 0, 0, 93, 1, 0, 128, 93, ++ 1, 0, 0, 94, 1, 0, 128, 94, 1, 0, 0, 2, 0, 3, 0, 4, 0, 6, 0, 8, 0, 11, ++ 0, 16, 1, 16, 2, 16, 3, 16, 4, 16, 5, 16, 6, 16, 7, 16, 7, 23, 7, 32, ++ 7, 45, 7, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 4, 0, 6, 0, 8, 0, 11, 0, ++ 16, 1, 16, 2, 16, 3, 16, 4, 16, 5, 16, 6, 16, 7, 16, 7, 23, 7, 32, 7, ++ 45, 7, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 248, 3, 0, 0, 248, 11, 0, 128, 232, 11, 0, 0, 217, ++ 11, 0, 128, 209, 11, 0, 0, 194, 11, 0, 128, 186, 11, 0, 0, 179, 11, ++ 0, 129, 114, 11, 0, 129, 250, 10, 0, 1, 243, 10, 0, 129, 66, 10, 0, ++ 1, 59, 10, 0, 129, 146, 9, 0, 1, 139, 9, 0, 129, 234, 8, 0, 1, 235, ++ 8, 0, 129, 146, 8, 0, 1, 147, 8, 0, 129, 106, 8, 0, 1, 107, 8, 0, 131, ++ 98, 8, 0, 3, 99, 8, 0, 3, 99, 16, 0, 3, 99, 24, 0, 3, 99, 32, 0, 131, ++ 99, 32, 0, 3, 100, 32, 0, 131, 100, 32, 0, 3, 101, 32, 0, 3, 101, 40, ++ 0, 3, 101, 48, 0, 3, 101, 56, 0, 0, 248, 19, 0, 0, 248, 27, 0, 0, 248, ++ 35, 0, 0, 248, 43, 0, 0, 248, 51, 0, 0, 248, 59, 0, 128, 232, 59, 0, ++ 1, 176, 59, 0, 129, 152, 59, 0, 3, 56, 59, 0, 128, 53, 3, 0, 128, 53, ++ 11, 0, 129, 237, 2, 0, 129, 237, 10, 0, 129, 53, 2, 0, 129, 53, 10, ++ 0, 129, 53, 18, 0, 129, 141, 9, 0, 129, 141, 17, 0, 129, 229, 8, 0, ++ 129, 229, 16, 0, 129, 141, 8, 0, 129, 141, 16, 0, 129, 141, 24, 0, 129, ++ 141, 32, 0, 129, 109, 24, 0, 129, 109, 32, 0, 129, 109, 40, 0, 129, ++ 109, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 112, 107, 116, 95, 102, 105, 108, 116, 101, 114, 0, 97, 112, 102, ++ 95, 115, 105, 122, 101, 95, 108, 105, 109, 105, 116, 0, 97, 112, 102, ++ 95, 118, 101, 114, 0, 0, 0, 107, 81, 4, 0, 16, 0, 0, 0, 7, 0, 4, 0, ++ 122, 81, 4, 0, 15, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 49, 124, 3, 0, 1, 0, 0, 0, 59, 124, 3, 0, 2, 0, 0, ++ 0, 83, 124, 3, 0, 6, 0, 0, 0, 127, 124, 3, 0, 11, 0, 0, 0, 165, 124, ++ 3, 0, 12, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 22, 44, 66, 1, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 5, 112, 114, ++ 111, 116, 95, 103, 0, 112, 114, 111, 116, 95, 110, 0, 0, 0, 0, 12, 0, ++ 0, 0, 24, 0, 0, 0, 36, 0, 0, 0, 48, 0, 0, 0, 72, 0, 0, 0, 96, 0, 0, ++ 0, 108, 0, 0, 0, 108, 0, 0, 0, 108, 0, 0, 0, 108, 0, 0, 0, 1, 1, 2, ++ 2, 1, 2, 2, 3, 4, 4, 1, 2, 4, 3, 4, 6, 2, 3, 6, 3, 4, 6, 5, 6, 8, 3, ++ 4, 8, 5, 6, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 11, ++ 0, 0, 0, 16, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, ++ 0, 18, 0, 0, 0, 2, 0, 0, 0, 24, 0, 0, 0, 8, 0, 0, 0, 36, 0, 0, 0, 10, ++ 0, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 72, 0, 0, 0, 18, 0, 0, 0, 96, 0, ++ 0, 0, 25, 0, 0, 0, 108, 0, 0, 0, 26, 0, 0, 0, 160, 85, 4, 0, 0, 0, 128, ++ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, ++ 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, ++ 0, 36, 0, 0, 0, 48, 0, 0, 0, 72, 0, 0, 0, 96, 0, 0, 0, 108, 0, 0, 0, ++ 32, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 1, 3, 0, 0, 1, 4, 0, 0, ++ 1, 5, 0, 0, 1, 6, 0, 0, 1, 7, 0, 0, 1, 8, 0, 0, 1, 9, 0, 0, 1, 10, 0, ++ 0, 1, 11, 0, 0, 1, 12, 0, 0, 1, 13, 0, 0, 1, 14, 0, 0, 1, 15, 0, 0, ++ 1, 16, 0, 0, 1, 17, 0, 0, 1, 18, 0, 0, 1, 19, 0, 0, 1, 20, 0, 0, 1, ++ 21, 0, 0, 1, 22, 0, 0, 1, 23, 0, 0, 1, 87, 0, 0, 1, 88, 0, 0, 1, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 2, ++ 0, 0, 0, 17, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, ++ 0, 6, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 6, 0, 0, 0, 9, 0, ++ 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, 0, 2, 0, 0, 0, 18, ++ 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 2, 0, 0, 0, 19, 0, 0, 0, 6, 0, 0, ++ 0, 11, 0, 0, 0, 2, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 12, 0, 0, 0, 2, ++ 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 20, 0, 0, ++ 0, 6, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 6, 0, 0, 0, 3, 0, ++ 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 19, ++ 0, 0, 0, 7, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 20, 0, 0, 0, 7, 0, 0, 0, ++ 7, 0, 0, 0, 2, 0, 0, 0, 30, 0, 0, 0, 7, 0, 0, 0, 255, 255, 255, 255, ++ 2, 0, 0, 0, 40, 0, 0, 0, 7, 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, 0, ++ 100, 0, 0, 0, 7, 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, 0, 200, 0, 0, ++ 0, 7, 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, 0, 44, 1, 0, 0, 8, 0, 0, ++ 0, 255, 255, 255, 255, 2, 0, 0, 0, 44, 1, 0, 0, 8, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 44, 1, 0, 0, 8, 0, 0, 0, 255, 255, 255, 255, 2, ++ 0, 0, 0, 44, 1, 0, 0, 8, 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, 0, 44, ++ 1, 0, 0, 8, 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, 0, 44, 1, 0, 0, 8, ++ 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, 0, 44, 1, 0, 0, 8, 0, 0, 0, 255, ++ 255, 255, 255, 2, 0, 0, 0, 44, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 115, ++ 58, 32, 111, 110, 108, 121, 32, 115, 117, 112, 112, 111, 114, 116, 32, ++ 49, 45, 115, 116, 114, 101, 97, 109, 32, 49, 49, 110, 95, 50, 53, 54, ++ 81, 65, 77, 32, 102, 111, 114, 32, 110, 111, 110, 45, 49, 49, 97, 99, ++ 32, 99, 111, 109, 112, 105, 108, 101, 100, 32, 100, 101, 118, 105, 99, ++ 101, 33, 10, 0, 114, 97, 116, 101, 115, 101, 108, 95, 100, 117, 109, ++ 109, 121, 0, 87, 88, 99, 100, 101, 102, 255, 255, 255, 255, 255, 255, ++ 255, 255, 2, 0, 0, 0, 17, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 17, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 17, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 19, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 12, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 12, 0, 0, 0, 255, 255, ++ 255, 255, 2, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 16, 0, 0, ++ 0, 2, 0, 0, 0, 17, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 17, 0, 0, 0, 2, ++ 0, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, ++ 0, 19, 0, 0, 0, 7, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 20, ++ 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 19, 0, 0, 0, 2, 0, 0, 0, 30, 0, 0, ++ 0, 7, 0, 0, 0, 255, 255, 255, 255, 20, 0, 0, 0, 2, 0, 0, 0, 40, 0, 0, ++ 0, 7, 0, 0, 0, 255, 255, 255, 255, 20, 0, 0, 0, 2, 0, 0, 0, 50, 0, 0, ++ 0, 7, 0, 0, 0, 255, 255, 255, 255, 21, 0, 0, 0, 2, 0, 0, 0, 60, 0, 0, ++ 0, 7, 0, 0, 0, 255, 255, 255, 255, 9, 0, 0, 0, 2, 0, 0, 0, 19, 0, 0, ++ 0, 8, 0, 0, 0, 255, 255, 255, 255, 10, 0, 0, 0, 2, 0, 0, 0, 19, 0, 0, ++ 0, 8, 0, 0, 0, 255, 255, 255, 255, 11, 0, 0, 0, 2, 0, 0, 0, 23, 0, 0, ++ 0, 8, 0, 0, 0, 255, 255, 255, 255, 12, 0, 0, 0, 2, 0, 0, 0, 40, 0, 0, ++ 0, 8, 0, 0, 0, 255, 255, 255, 255, 14, 0, 0, 0, 2, 0, 0, 0, 50, 0, 0, ++ 0, 8, 0, 0, 0, 255, 255, 255, 255, 15, 0, 0, 0, 2, 0, 0, 0, 60, 0, 0, ++ 0, 8, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 2, 0, 0, 0, 21, ++ 0, 0, 0, 8, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 2, 0, 0, ++ 0, 21, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 108, 99, 95, 114, 97, ++ 116, 101, 115, 101, 108, 95, 102, 105, 108, 116, 101, 114, 95, 109, ++ 99, 115, 115, 101, 116, 0, 0, 0, 160, 88, 4, 0, 0, 0, 0, 0, 1, 0, 0, ++ 0, 188, 88, 4, 0, 2, 0, 0, 0, 7, 0, 0, 0, 210, 88, 4, 0, 3, 0, 0, 0, ++ 7, 0, 0, 0, 233, 88, 4, 0, 1, 0, 0, 0, 8, 0, 0, 0, 246, 88, 4, 0, 4, ++ 0, 0, 0, 1, 0, 0, 0, 4, 89, 4, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 83, 65, 69, 32, 75, 67, 75, 32, 97, 110, 100, ++ 32, 80, 77, 75, 0, 115, 97, 101, 0, 83, 65, 69, 32, 72, 117, 110, 116, ++ 105, 110, 103, 32, 97, 110, 100, 32, 80, 101, 99, 107, 105, 110, 103, ++ 0, 115, 97, 101, 95, 97, 117, 116, 104, 95, 114, 101, 116, 120, 95, ++ 116, 105, 109, 101, 111, 117, 116, 0, 115, 97, 101, 95, 112, 109, 107, ++ 95, 101, 120, 112, 105, 114, 121, 95, 116, 105, 109, 101, 111, 117, ++ 116, 0, 115, 97, 101, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, ++ 115, 97, 101, 95, 109, 102, 112, 95, 99, 104, 101, 99, 107, 0, 115, ++ 97, 101, 95, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, 109, ++ 111, 100, 101, 0, 251, 127, 136, 0, 4, 0, 16, 64, 5, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 3, 6, 3, ++ 7, 7, 4, 15, 15, 109, 105, 109, 111, 95, 112, 115, 0, 109, 105, 109, ++ 111, 95, 115, 115, 95, 115, 116, 102, 0, 115, 116, 102, 95, 115, 115, ++ 95, 97, 117, 116, 111, 0, 115, 116, 98, 99, 95, 114, 120, 0, 115, 116, ++ 98, 99, 95, 116, 120, 0, 115, 105, 115, 111, 95, 116, 120, 0, 116, 120, ++ 115, 116, 114, 101, 97, 109, 115, 0, 104, 119, 95, 116, 120, 99, 104, ++ 97, 105, 110, 0, 114, 120, 115, 116, 114, 101, 97, 109, 115, 0, 104, ++ 119, 95, 114, 120, 99, 104, 97, 105, 110, 0, 116, 120, 99, 111, 114, ++ 101, 0, 116, 120, 99, 111, 114, 101, 95, 111, 118, 101, 114, 114, 105, ++ 100, 101, 0, 116, 101, 109, 112, 115, 101, 110, 115, 101, 95, 100, 105, ++ 115, 97, 98, 108, 101, 0, 116, 120, 99, 104, 97, 105, 110, 95, 112, ++ 119, 114, 95, 111, 102, 102, 115, 101, 116, 0, 99, 117, 114, 112, 112, ++ 114, 0, 112, 119, 114, 116, 104, 114, 111, 116, 116, 108, 101, 95, 116, ++ 101, 115, 116, 0, 112, 119, 114, 116, 104, 114, 111, 116, 116, 108, ++ 101, 95, 109, 97, 115, 107, 0, 112, 119, 114, 116, 104, 114, 111, 116, ++ 116, 108, 101, 0, 112, 119, 114, 116, 104, 114, 111, 116, 116, 108, ++ 101, 95, 115, 116, 97, 116, 101, 0, 115, 112, 97, 116, 105, 97, 108, ++ 95, 112, 111, 108, 105, 99, 121, 0, 114, 115, 115, 105, 95, 112, 119, ++ 114, 100, 110, 95, 100, 105, 115, 97, 98, 108, 101, 0, 114, 97, 116, ++ 101, 116, 98, 108, 95, 112, 112, 114, 0, 111, 110, 101, 99, 104, 97, ++ 105, 110, 0, 100, 117, 116, 121, 99, 121, 99, 108, 101, 95, 99, 99, ++ 107, 0, 100, 117, 116, 121, 99, 121, 99, 108, 101, 95, 111, 102, 100, ++ 109, 0, 100, 117, 116, 121, 99, 121, 99, 108, 101, 95, 112, 119, 114, ++ 0, 100, 117, 116, 121, 99, 121, 99, 108, 101, 95, 116, 104, 101, 114, ++ 109, 97, 108, 0, 116, 120, 95, 110, 115, 115, 0, 99, 99, 107, 95, 116, ++ 120, 109, 111, 100, 101, 0, 115, 119, 100, 105, 118, 95, 115, 116, 97, ++ 116, 115, 0, 115, 119, 100, 105, 118, 95, 114, 101, 115, 101, 116, 95, ++ 115, 116, 97, 116, 115, 0, 115, 119, 100, 105, 118, 95, 116, 120, 95, ++ 119, 101, 105, 103, 104, 116, 0, 115, 119, 100, 105, 118, 95, 99, 101, ++ 108, 108, 95, 112, 111, 108, 105, 99, 121, 0, 115, 119, 100, 105, 118, ++ 95, 114, 120, 95, 112, 111, 108, 105, 99, 121, 0, 115, 119, 100, 105, ++ 118, 95, 116, 120, 95, 112, 111, 108, 105, 99, 121, 0, 115, 116, 102, ++ 95, 116, 104, 114, 111, 116, 116, 108, 101, 95, 101, 110, 0, 0, 0, 0, ++ 66, 89, 4, 0, 2, 0, 0, 64, 3, 0, 0, 0, 74, 89, 4, 0, 0, 0, 0, 64, 2, ++ 0, 0, 0, 86, 89, 4, 0, 1, 0, 0, 0, 2, 0, 0, 0, 98, 89, 4, 0, 3, 0, 0, ++ 64, 3, 0, 0, 0, 106, 89, 4, 0, 4, 0, 0, 64, 2, 0, 0, 0, 114, 89, 4, ++ 0, 7, 0, 0, 0, 1, 0, 0, 0, 122, 89, 4, 0, 5, 0, 0, 0, 3, 0, 0, 0, 135, ++ 89, 4, 0, 6, 0, 0, 0, 6, 0, 0, 0, 132, 89, 4, 0, 8, 0, 0, 0, 3, 0, 0, ++ 0, 143, 89, 4, 0, 9, 0, 0, 0, 3, 0, 0, 0, 153, 89, 4, 0, 11, 0, 0, 0, ++ 3, 0, 0, 0, 156, 89, 4, 0, 10, 0, 0, 0, 3, 0, 0, 0, 164, 89, 4, 0, 12, ++ 0, 0, 0, 8, 0, 8, 0, 171, 89, 4, 0, 13, 0, 0, 0, 8, 0, 8, 0, 187, 89, ++ 4, 0, 15, 0, 0, 0, 1, 0, 0, 0, 205, 89, 4, 0, 16, 0, 0, 0, 8, 0, 4, ++ 0, 224, 89, 4, 0, 18, 0, 0, 0, 8, 0, 0, 0, 231, 89, 4, 0, 19, 0, 0, ++ 0, 3, 0, 0, 0, 248, 89, 4, 0, 20, 0, 0, 0, 3, 0, 0, 0, 9, 90, 4, 0, ++ 21, 0, 0, 0, 6, 0, 0, 0, 21, 90, 4, 0, 22, 0, 0, 0, 6, 0, 0, 0, 39, ++ 90, 4, 0, 14, 0, 0, 0, 8, 0, 20, 0, 54, 90, 4, 0, 17, 0, 0, 0, 1, 0, ++ 0, 0, 73, 90, 4, 0, 23, 0, 0, 0, 8, 0, 48, 0, 85, 90, 4, 0, 24, 0, 0, ++ 0, 2, 0, 0, 0, 94, 90, 4, 0, 25, 0, 0, 0, 3, 0, 0, 0, 108, 90, 4, 0, ++ 26, 0, 0, 0, 3, 0, 0, 0, 123, 90, 4, 0, 27, 0, 0, 0, 3, 0, 0, 0, 137, ++ 90, 4, 0, 28, 0, 0, 0, 3, 0, 0, 0, 155, 90, 4, 0, 29, 0, 0, 0, 3, 0, ++ 0, 0, 162, 90, 4, 0, 30, 0, 64, 4, 6, 0, 0, 0, 173, 90, 4, 0, 33, 0, ++ 0, 64, 8, 0, 104, 0, 185, 90, 4, 0, 34, 0, 0, 0, 6, 0, 0, 0, 203, 90, ++ 4, 0, 35, 0, 0, 0, 6, 0, 0, 0, 219, 90, 4, 0, 36, 0, 0, 0, 7, 0, 0, ++ 0, 237, 90, 4, 0, 31, 0, 0, 0, 7, 0, 0, 0, 253, 90, 4, 0, 32, 0, 0, ++ 0, 7, 0, 0, 0, 13, 91, 4, 0, 37, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 105, 100, 115, 117, 112, 0, 116, 112, 99, 0, 116, ++ 120, 112, 119, 114, 95, 116, 97, 114, 103, 101, 116, 95, 109, 97, 120, ++ 0, 0, 51, 228, 136, 0, 4, 0, 0, 0, 3, 0, 0, 0, 254, 92, 4, 0, 6, 0, ++ 0, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 120, 99, ++ 0, 119, 97, 112, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 16, 22, 0, 0, 128, 56, 1, 0, 115, 100, 112, 99, 109, 100, 101, 118, ++ 0, 0, 0, 0, 0, 0, 0, 0, 172, 93, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 190, 128, 0, 233, 202, ++ 128, 0, 253, 202, 128, 0, 201, 63, 0, 0, 93, 190, 128, 0, 249, 63, 0, ++ 0, 37, 188, 128, 0, 0, 0, 0, 0, 249, 202, 128, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 57, 137, 4, 0, 21, 137, 4, 0, 255, 136, 4, 0, 51, 64, 0, 0, 0, ++ 0, 0, 0, 73, 203, 128, 0, 43, 64, 0, 0, 101, 203, 128, 0, 133, 203, ++ 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 253, 255, 255, 255, 2, ++ 0, 0, 0, 242, 209, 23, 107, 71, 66, 44, 225, 229, 230, 188, 248, 242, ++ 64, 164, 99, 129, 125, 3, 119, 160, 51, 235, 45, 69, 57, 161, 244, 150, ++ 194, 152, 216, 34, 202, 135, 170, 55, 5, 139, 190, 30, 199, 177, 142, ++ 116, 173, 32, 243, 98, 59, 29, 110, 152, 155, 167, 139, 224, 65, 247, ++ 89, 56, 42, 84, 130, 93, 242, 2, 85, 108, 41, 85, 191, 56, 94, 84, 58, ++ 183, 10, 118, 114, 74, 222, 23, 54, 111, 44, 38, 150, 191, 152, 158, ++ 93, 41, 220, 146, 146, 189, 29, 244, 248, 124, 20, 154, 40, 19, 49, ++ 218, 233, 192, 184, 240, 181, 206, 177, 96, 10, 157, 129, 126, 29, 124, ++ 29, 67, 122, 95, 14, 234, 144, 43, 131, 36, 128, 79, 193, 223, 11, 43, ++ 77, 0, 153, 61, 251, 215, 167, 47, 67, 24, 6, 173, 47, 228, 120, 196, ++ 238, 27, 39, 74, 14, 160, 176, 255, 255, 255, 255, 0, 0, 0, 0, 255, ++ 255, 255, 255, 255, 255, 255, 255, 188, 230, 250, 173, 167, 23, 158, ++ 132, 243, 185, 202, 194, 252, 99, 37, 81, 16, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 20, 222, 249, 222, 162, 247, 156, 214, 88, 18, ++ 99, 26, 92, 245, 211, 237, 0, 0, 0, 81, 149, 62, 185, 97, 142, 28, 154, ++ 31, 146, 154, 33, 160, 182, 133, 64, 238, 162, 218, 114, 91, 153, 179, ++ 21, 243, 184, 180, 137, 145, 142, 241, 9, 225, 86, 25, 57, 81, 236, ++ 126, 147, 123, 22, 82, 192, 189, 59, 177, 191, 7, 53, 115, 223, 136, ++ 61, 44, 52, 241, 239, 69, 31, 212, 107, 80, 63, 0, 226, 66, 227, 79, ++ 155, 127, 26, 254, 74, 235, 231, 142, 22, 158, 15, 124, 87, 51, 206, ++ 43, 206, 94, 49, 107, 104, 64, 182, 203, 245, 81, 191, 55, 3, 0, 0, ++ 0, 9, 2, 0, 0, 68, 1, 0, 0, 127, 115, 0, 0, 205, 118, 0, 0, 31, 118, ++ 0, 0, 27, 117, 0, 0, 163, 116, 0, 0, 20, 98, 4, 0, 144, 97, 4, 0, 76, ++ 96, 4, 0, 184, 95, 4, 0, 252, 96, 4, 0, 253, 255, 255, 255, 196, 94, ++ 4, 0, 128, 1, 0, 0, 128, 255, 255, 255, 160, 255, 255, 255, 32, 0, 0, ++ 0, 2, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 161, 25, 174, 32, 180, 134, 160, 184, 44, 221, 30, 224, 76, 209, ++ 72, 119, 126, 77, 61, 146, 178, 97, 124, 109, 162, 197, 233, 41, 217, ++ 211, 206, 126, 198, 0, 0, 0, 183, 6, 142, 133, 205, 233, 4, 4, 102, ++ 203, 62, 158, 66, 180, 149, 35, 57, 129, 100, 156, 33, 181, 63, 5, 96, ++ 175, 40, 248, 186, 61, 77, 107, 119, 94, 75, 161, 40, 89, 231, 239, ++ 39, 193, 29, 254, 222, 168, 255, 162, 193, 179, 72, 51, 155, 66, 106, ++ 133, 49, 126, 126, 249, 102, 189, 229, 194, 0, 1, 0, 0, 32, 255, 255, ++ 255, 192, 0, 0, 0, 96, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, ++ 32, 1, 0, 0, 41, 115, 0, 0, 233, 114, 0, 0, 143, 118, 0, 0, 165, 117, ++ 0, 0, 7, 116, 0, 0, 252, 95, 4, 0, 120, 95, 4, 0, 132, 94, 4, 0, 228, ++ 93, 4, 0, 8, 95, 4, 0, 253, 255, 255, 255, 244, 97, 4, 0, 0, 0, 1, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 250, 81, 134, 135, 131, 191, 47, 150, 107, 127, 204, ++ 1, 72, 247, 9, 165, 208, 59, 181, 201, 184, 137, 156, 71, 174, 187, ++ 111, 183, 30, 145, 56, 100, 9, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 4, 0, 0, 0, 255, 0, 0, 0, ++ 32, 8, 0, 0, 35, 109, 0, 0, 229, 108, 0, 0, 237, 117, 0, 0, 217, 116, ++ 0, 0, 91, 116, 0, 0, 216, 93, 4, 0, 112, 97, 4, 0, 164, 94, 4, 0, 212, ++ 97, 4, 0, 152, 95, 4, 0, 6, 109, 7, 0, 100, 94, 4, 0, 24, 1, 0, 0, 120, ++ 106, 41, 57, 4, 192, 59, 154, 180, 95, 138, 92, 217, 27, 125, 44, 73, ++ 68, 245, 152, 104, 68, 155, 87, 23, 189, 175, 23, 44, 102, 62, 39, 153, ++ 114, 238, 151, 64, 38, 244, 94, 1, 185, 80, 197, 97, 7, 173, 63, 134, ++ 112, 60, 53, 64, 194, 114, 162, 118, 148, 190, 136, 80, 102, 209, 159, ++ 179, 49, 47, 167, 226, 62, 231, 228, 152, 142, 5, 107, 227, 248, 45, ++ 25, 24, 29, 156, 110, 254, 129, 65, 18, 3, 20, 8, 143, 80, 19, 135, ++ 90, 198, 86, 57, 141, 138, 46, 209, 157, 42, 133, 200, 237, 211, 236, ++ 42, 239, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 237, 0, 0, 1, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 90, 198, 53, 216, 170, 58, ++ 147, 231, 179, 235, 189, 85, 118, 152, 134, 188, 101, 29, 6, 176, 204, ++ 83, 176, 246, 59, 206, 60, 62, 39, 210, 96, 75, 9, 2, 0, 0, 2, 0, 0, ++ 0, 2, 0, 0, 0, 128, 1, 0, 0, 48, 1, 0, 0, 153, 115, 0, 0, 231, 118, ++ 0, 0, 81, 118, 0, 0, 93, 117, 0, 0, 179, 115, 0, 0, 100, 95, 4, 0, 144, ++ 96, 4, 0, 88, 98, 4, 0, 4, 94, 4, 0, 52, 94, 4, 0, 253, 255, 255, 255, ++ 64, 97, 4, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ++ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 199, ++ 99, 77, 129, 244, 55, 45, 223, 88, 26, 13, 178, 72, 176, 167, 122, 236, ++ 236, 25, 106, 204, 197, 41, 115, 137, 148, 4, 0, 221, 148, 4, 0, 0, ++ 0, 0, 0, 133, 148, 4, 0, 153, 152, 4, 0, 105, 150, 4, 0, 205, 149, 4, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 150, ++ 4, 0, 0, 0, 0, 0, 29, 30, 28, 11, 119, 108, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 240, 98, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 238, 4, 0, 237, 154, 129, 0, ++ 177, 150, 129, 0, 49, 198, 0, 0, 0, 0, 0, 0, 133, 153, 129, 0, 0, 0, ++ 0, 0, 205, 154, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, ++ 0, 1, 0, 3, 0, 3, 0, 6, 0, 0, 0, 3, 0, 3, 0, 3, 0, 14, 0, 13, 0, 14, ++ 0, 14, 0, 14, 0, 2, 0, 9, 0, 12, 0, 10, 0, 8, 0, 13, 0, 1, 0, 9, 0, ++ 12, 0, 10, 0, 8, 0, 13, 0, 1, 0, 9, 0, 12, 0, 10, 0, 8, 0, 13, 0, 1, ++ 0, 9, 0, 12, 0, 10, 0, 8, 0, 13, 0, 1, 0, 10, 0, 13, 0, 11, 0, 9, 0, ++ 14, 0, 2, 0, 10, 0, 13, 0, 11, 0, 9, 0, 14, 0, 2, 0, 9, 0, 57, 0, 22, ++ 0, 14, 0, 14, 0, 5, 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, 0, 5, 0, 10, 0, ++ 13, 0, 11, 0, 9, 0, 14, 0, 4, 0, 10, 0, 13, 0, 11, 0, 9, 0, 14, 0, 2, ++ 0, 10, 0, 13, 0, 11, 0, 9, 0, 14, 0, 2, 0, 20, 0, 191, 0, 192, 0, 21, ++ 0, 17, 0, 5, 0, 20, 0, 191, 0, 192, 0, 21, 0, 17, 0, 5, 0, 20, 0, 191, ++ 0, 192, 0, 21, 0, 17, 0, 5, 0, 20, 0, 191, 0, 192, 0, 21, 0, 17, 0, ++ 5, 0, 20, 0, 191, 0, 192, 0, 21, 0, 17, 0, 5, 0, 9, 0, 57, 0, 22, 0, ++ 14, 0, 14, 0, 5, 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, 0, 5, 0, 20, 0, 191, ++ 0, 192, 0, 21, 0, 17, 0, 5, 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, 0, 5, ++ 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, 0, 5, 0, 150, 0, 222, 0, 223, 0, 21, ++ 0, 17, 0, 5, 0, 20, 0, 191, 0, 192, 0, 21, 0, 17, 0, 5, 0, 9, 0, 57, ++ 0, 22, 0, 14, 0, 14, 0, 5, 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, 0, 5, 0, ++ 9, 0, 97, 0, 22, 0, 14, 0, 14, 0, 5, 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, ++ 0, 5, 0, 12, 0, 182, 0, 25, 0, 17, 0, 17, 0, 8, 0, 9, 0, 57, 0, 22, ++ 0, 14, 0, 14, 0, 5, 0, 9, 0, 182, 0, 25, 0, 17, 0, 17, 0, 8, 0, 9, 0, ++ 182, 0, 25, 0, 17, 0, 17, 0, 8, 0, 9, 0, 182, 0, 25, 0, 17, 0, 17, 0, ++ 8, 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, 0, 5, 0, 9, 0, 182, 0, 25, 0, 17, ++ 0, 17, 0, 8, 0, 9, 0, 57, 0, 22, 0, 14, 0, 14, 0, 5, 0, 9, 0, 182, 0, ++ 25, 0, 17, 0, 17, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 35, 64, 31, 160, ++ 15, 184, 11, 24, 252, 48, 248, 144, 232, 168, 228, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 120, 5, 0, 0, 240, 241, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 35, 0, 0, 160, 15, 0, 0, ++ 24, 252, 0, 0, 144, 232, 0, 0, 0, 0, 112, 23, 0, 0, 232, 3, 0, 0, 96, ++ 240, 0, 0, 216, 220, 0, 25, 0, 0, 120, 5, 0, 0, 240, 241, 0, 0, 0, 0, ++ 0, 0, 57, 51, 45, 40, 36, 32, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1, ++ 0, 0, 0, 0, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1, 0, 0, ++ 0, 0, 9, 0, 1, 0, 0, 0, 164, 0, 0, 0, 45, 1, 45, 1, 0, 0, 226, 1, 227, ++ 254, 128, 0, 0, 1, 128, 0, 5, 1, 81, 254, 64, 0, 128, 0, 64, 0, 8, 0, ++ 2, 0, 0, 0, 119, 1, 22, 255, 37, 0, 76, 0, 37, 0, 31, 3, 116, 254, 32, ++ 0, 20, 0, 32, 0, 236, 2, 242, 254, 128, 0, 226, 255, 128, 0, 8, 0, 3, ++ 0, 0, 0, 119, 1, 22, 255, 37, 0, 76, 0, 37, 0, 31, 3, 116, 254, 32, ++ 0, 20, 0, 32, 0, 236, 2, 242, 254, 148, 0, 221, 255, 148, 0, 8, 0, 4, ++ 0, 0, 0, 51, 1, 174, 7, 53, 0, 106, 0, 53, 0, 11, 3, 133, 6, 53, 0, ++ 246, 7, 53, 0, 253, 2, 43, 6, 212, 0, 54, 7, 212, 0, 8, 0, 5, 0, 0, ++ 0, 197, 1, 29, 255, 32, 0, 64, 0, 32, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, ++ 0, 107, 3, 130, 254, 20, 0, 41, 0, 20, 0, 8, 0, 6, 0, 0, 0, 119, 1, ++ 22, 255, 37, 0, 76, 0, 37, 0, 31, 3, 116, 254, 32, 0, 20, 0, 32, 0, ++ 236, 2, 242, 254, 114, 0, 229, 255, 114, 0, 8, 0, 7, 0, 0, 0, 170, 0, ++ 0, 0, 211, 1, 210, 1, 0, 0, 153, 1, 201, 6, 128, 0, 0, 1, 128, 0, 98, ++ 0, 66, 6, 36, 0, 72, 0, 36, 0, 9, 0, 8, 0, 0, 0, 174, 0, 0, 0, 121, ++ 1, 120, 1, 0, 0, 194, 1, 196, 6, 128, 0, 0, 1, 128, 0, 158, 0, 65, 6, ++ 36, 0, 72, 0, 36, 0, 9, 0, 9, 0, 0, 0, 178, 0, 0, 0, 63, 1, 63, 1, 0, ++ 0, 223, 1, 192, 6, 128, 0, 0, 1, 128, 0, 202, 0, 65, 6, 36, 0, 72, 0, ++ 36, 0, 9, 0, 10, 0, 0, 0, 162, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, ++ 255, 1, 0, 0, 0, 0, 120, 2, 160, 254, 0, 1, 255, 1, 0, 1, 8, 0, 12, ++ 0, 0, 0, 138, 1, 22, 255, 29, 0, 58, 0, 29, 0, 32, 3, 118, 254, 24, ++ 0, 48, 0, 24, 0, 68, 3, 160, 254, 38, 0, 76, 0, 38, 0, 8, 0, 13, 0, ++ 0, 0, 174, 0, 0, 0, 211, 1, 210, 1, 0, 0, 183, 1, 192, 254, 120, 0, ++ 240, 0, 120, 0, 85, 0, 89, 254, 36, 0, 72, 0, 36, 0, 9, 0, 14, 0, 0, ++ 0, 177, 0, 0, 0, 182, 1, 181, 1, 0, 0, 201, 1, 188, 254, 120, 0, 240, ++ 0, 120, 0, 77, 0, 101, 254, 35, 0, 70, 0, 35, 0, 9, 0, 15, 0, 0, 0, ++ 186, 0, 0, 0, 63, 1, 63, 1, 0, 0, 11, 2, 185, 254, 120, 0, 240, 0, 120, ++ 0, 174, 0, 95, 254, 35, 0, 70, 0, 35, 0, 9, 0, 16, 0, 0, 0, 0, 0, 0, ++ 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 255, ++ 1, 0, 0, 0, 0, 9, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, ++ 0, 0, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 236, 1, 20, 0, 0, 0, 9, 0, 18, ++ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 255, 1, 0, 0, 0, ++ 0, 0, 0, 0, 0, 36, 1, 36, 1, 0, 0, 9, 0, 102, 0, 70, 11, 108, 0, 165, ++ 10, 115, 0, 12, 10, 122, 0, 124, 9, 129, 0, 244, 8, 137, 0, 116, 8, ++ 145, 0, 251, 7, 153, 0, 137, 7, 162, 0, 29, 7, 172, 0, 183, 6, 182, ++ 0, 87, 6, 193, 0, 252, 5, 204, 0, 166, 5, 216, 0, 86, 5, 229, 0, 9, ++ 5, 243, 0, 193, 4, 1, 1, 125, 4, 16, 1, 61, 4, 33, 1, 0, 4, 50, 1, 199, ++ 3, 68, 1, 145, 3, 87, 1, 94, 3, 107, 1, 45, 3, 129, 1, 0, 3, 152, 1, ++ 213, 2, 176, 1, 172, 2, 201, 1, 134, 2, 229, 1, 98, 2, 1, 2, 64, 2, ++ 32, 2, 32, 2, 64, 2, 1, 2, 98, 2, 229, 1, 134, 2, 201, 1, 172, 2, 176, ++ 1, 213, 2, 152, 1, 0, 3, 129, 1, 45, 3, 107, 1, 94, 3, 87, 1, 145, 3, ++ 68, 1, 199, 3, 50, 1, 0, 4, 33, 1, 61, 4, 16, 1, 125, 4, 1, 1, 193, ++ 4, 243, 0, 9, 5, 229, 0, 86, 5, 216, 0, 166, 5, 204, 0, 252, 5, 193, ++ 0, 87, 6, 182, 0, 183, 6, 172, 0, 29, 7, 162, 0, 137, 7, 153, 0, 251, ++ 7, 145, 0, 116, 8, 137, 0, 244, 8, 129, 0, 124, 9, 122, 0, 12, 10, 115, ++ 0, 165, 10, 108, 0, 70, 11, 102, 0, 241, 11, 97, 0, 166, 12, 91, 0, ++ 102, 13, 86, 0, 49, 14, 81, 0, 9, 15, 77, 0, 112, 23, 0, 0, 232, 3, ++ 0, 0, 96, 240, 64, 31, 216, 220, 184, 11, 0, 0, 48, 248, 88, 27, 168, ++ 228, 208, 7, 0, 0, 72, 244, 0, 0, 192, 224, 0, 0, 0, 0, 0, 0, 64, 31, ++ 0, 0, 184, 11, 0, 0, 48, 248, 0, 0, 0, 0, 0, 0, 59, 117, 117, 59, 117, ++ 117, 43, 43, 117, 59, 91, 117, 43, 43, 97, 59, 91, 97, 0, 0, 156, 230, ++ 0, 0, 0, 0, 40, 35, 0, 0, 160, 15, 0, 0, 24, 252, 0, 0, 144, 232, 0, ++ 0, 0, 0, 64, 31, 0, 0, 184, 11, 0, 0, 48, 248, 0, 0, 168, 228, 0, 25, ++ 0, 0, 120, 5, 0, 0, 240, 241, 0, 0, 0, 0, 0, 0, 32, 28, 156, 230, 152, ++ 8, 0, 0, 16, 245, 0, 0, 136, 225, 0, 0, 0, 25, 0, 0, 120, 5, 0, 0, 240, ++ 241, 64, 31, 104, 222, 184, 11, 224, 21, 48, 248, 88, 2, 168, 228, 208, ++ 238, 0, 0, 72, 219, 72, 38, 192, 18, 0, 0, 224, 227, 0, 0, 125, 0, 61, ++ 0, 38, 0, 250, 0, 54, 0, 46, 0, 44, 1, 51, 0, 49, 0, 25, 0, 64, 0, 32, ++ 0, 50, 0, 64, 0, 34, 0, 225, 0, 56, 0, 44, 0, 112, 23, 0, 0, 232, 3, ++ 0, 0, 96, 240, 0, 0, 216, 220, 0, 0, 0, 0, 0, 0, 88, 27, 0, 0, 208, ++ 7, 112, 23, 72, 244, 232, 3, 192, 224, 96, 240, 0, 0, 216, 220, 64, ++ 31, 0, 0, 184, 11, 0, 0, 48, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, ++ 0, 164, 255, 45, 1, 45, 1, 0, 0, 122, 1, 72, 255, 64, 0, 128, 0, 64, ++ 0, 248, 1, 128, 255, 64, 0, 128, 0, 64, 0, 8, 0, 1, 0, 0, 0, 165, 0, ++ 164, 255, 150, 0, 150, 0, 0, 0, 249, 1, 72, 255, 64, 0, 128, 0, 64, ++ 0, 252, 1, 128, 255, 64, 0, 128, 0, 64, 0, 8, 0, 2, 0, 1, 0, 159, 1, ++ 82, 7, 64, 0, 128, 0, 64, 0, 24, 3, 120, 6, 192, 0, 128, 1, 192, 0, ++ 10, 3, 46, 6, 64, 0, 128, 0, 64, 0, 8, 0, 3, 0, 1, 0, 46, 1, 49, 7, ++ 129, 0, 2, 1, 129, 0, 146, 2, 184, 6, 205, 0, 154, 1, 205, 0, 242, 2, ++ 224, 6, 170, 0, 84, 1, 170, 0, 8, 0, 20, 0, 1, 0, 104, 1, 92, 255, 242, ++ 0, 198, 254, 242, 0, 240, 2, 184, 254, 205, 0, 53, 255, 205, 0, 255, ++ 2, 224, 254, 253, 0, 183, 0, 253, 0, 8, 0, 21, 0, 1, 0, 104, 1, 92, ++ 7, 149, 0, 82, 7, 149, 0, 240, 2, 184, 6, 205, 0, 92, 7, 205, 0, 255, ++ 2, 224, 6, 0, 1, 17, 1, 0, 1, 8, 0, 22, 0, 1, 0, 104, 1, 92, 7, 98, ++ 0, 156, 7, 98, 0, 240, 2, 184, 6, 205, 0, 132, 7, 205, 0, 255, 2, 224, ++ 6, 0, 1, 96, 1, 0, 1, 8, 0, 23, 0, 1, 0, 94, 1, 92, 7, 116, 0, 174, ++ 7, 116, 0, 240, 2, 184, 6, 205, 0, 216, 7, 205, 0, 255, 2, 224, 6, 129, ++ 0, 235, 0, 129, 0, 8, 0, 24, 0, 1, 0, 69, 1, 92, 7, 32, 0, 40, 0, 32, ++ 0, 244, 2, 184, 6, 0, 1, 215, 1, 0, 1, 254, 2, 224, 6, 6, 1, 86, 7, ++ 6, 1, 8, 0, 25, 0, 1, 0, 43, 1, 92, 7, 51, 0, 64, 0, 51, 0, 224, 2, ++ 184, 6, 0, 1, 215, 1, 0, 1, 253, 2, 224, 6, 6, 1, 86, 7, 6, 1, 8, 0, ++ 26, 0, 1, 0, 21, 1, 151, 7, 39, 0, 117, 0, 88, 0, 125, 2, 46, 7, 64, ++ 0, 192, 0, 144, 0, 102, 2, 72, 7, 128, 0, 128, 1, 32, 1, 8, 0, 27, 0, ++ 1, 0, 245, 0, 151, 7, 49, 0, 147, 0, 110, 0, 114, 2, 46, 7, 162, 0, ++ 229, 1, 107, 1, 101, 2, 72, 7, 62, 0, 186, 0, 139, 0, 8, 0, 28, 0, 1, ++ 0, 104, 1, 92, 7, 149, 0, 82, 7, 149, 0, 240, 2, 184, 6, 205, 0, 92, ++ 7, 205, 0, 255, 2, 224, 6, 114, 0, 121, 0, 114, 0, 8, 0, 30, 0, 1, 0, ++ 46, 1, 49, 7, 61, 0, 122, 0, 61, 0, 146, 2, 184, 6, 205, 0, 154, 1, ++ 205, 0, 242, 2, 224, 6, 170, 0, 84, 1, 170, 0, 8, 0, 31, 0, 1, 0, 63, ++ 1, 25, 7, 234, 1, 0, 0, 234, 1, 187, 2, 142, 6, 68, 1, 0, 0, 68, 1, ++ 242, 2, 224, 6, 114, 0, 0, 0, 114, 0, 8, 0, 40, 0, 1, 0, 104, 1, 92, ++ 7, 242, 0, 198, 6, 242, 0, 240, 2, 184, 6, 205, 0, 53, 7, 205, 0, 255, ++ 2, 224, 6, 255, 1, 114, 1, 255, 1, 8, 0, 50, 0, 1, 0, 217, 1, 12, 255, ++ 32, 0, 64, 0, 32, 0, 162, 3, 65, 254, 16, 0, 32, 0, 16, 0, 161, 3, 88, ++ 254, 16, 0, 32, 0, 16, 0, 8, 0, 112, 23, 156, 230, 232, 3, 0, 0, 96, ++ 240, 0, 0, 216, 220, 0, 0, 0, 0, 0, 0, 88, 27, 0, 0, 208, 7, 64, 31, ++ 72, 244, 184, 11, 192, 224, 48, 248, 0, 0, 168, 228, 64, 31, 0, 0, 184, ++ 11, 0, 0, 48, 248, 0, 0, 0, 0, 0, 0, 32, 28, 0, 0, 152, 8, 0, 0, 16, ++ 245, 0, 0, 136, 225, 0, 0, 0, 25, 0, 0, 120, 5, 0, 0, 240, 241, 112, ++ 23, 104, 222, 232, 3, 224, 21, 96, 240, 88, 2, 216, 220, 208, 238, 0, ++ 0, 72, 219, 72, 38, 192, 18, 0, 0, 224, 227, 0, 0, 32, 28, 0, 0, 152, ++ 8, 0, 0, 16, 245, 64, 31, 136, 225, 184, 11, 0, 25, 48, 248, 120, 5, ++ 168, 228, 240, 241, 0, 0, 104, 222, 0, 0, 224, 21, 0, 0, 88, 2, 0, 0, ++ 208, 238, 0, 0, 72, 219, 72, 38, 192, 18, 0, 0, 224, 227, 0, 0, 0, 2, ++ 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 45, 233, 248, 67, 5, 70, 136, 70, 199, 243, 90, ++ 243, 0, 33, 40, 70, 199, 243, 98, 244, 4, 70, 40, 70, 110, 105, 175, ++ 105, 191, 243, 26, 246, 10, 46, 129, 70, 22, 217, 15, 46, 22, 208, 40, ++ 70, 199, 243, 114, 240, 20, 46, 5, 70, 3, 217, 163, 104, 35, 240, 8, ++ 3, 163, 96, 163, 104, 20, 46, 67, 240, 1, 3, 163, 96, 20, 217, 163, ++ 104, 67, 240, 8, 3, 163, 96, 15, 224, 2, 46, 15, 217, 40, 70, 199, 243, ++ 183, 240, 212, 248, 164, 48, 5, 70, 35, 240, 255, 3, 67, 240, 2, 3, ++ 196, 248, 164, 48, 2, 35, 3, 224, 1, 35, 1, 224, 16, 77, 48, 35, 162, ++ 104, 210, 7, 7, 212, 7, 240, 24, 2, 8, 42, 12, 191, 181, 251, 243, 245, ++ 79, 244, 225, 21, 7, 240, 3, 7, 0, 38, 11, 224, 4, 245, 64, 115, 184, ++ 241, 0, 15, 5, 208, 48, 2, 24, 24, 73, 70, 42, 70, 0, 35, 192, 71, 1, ++ 54, 190, 66, 241, 219, 189, 232, 248, 131, 0, 191, 0, 198, 62, 5, 45, ++ 233, 248, 67, 22, 70, 152, 70, 4, 70, 13, 70, 199, 243, 182, 240, 0, ++ 33, 7, 70, 32, 70, 199, 243, 255, 243, 0, 34, 129, 70, 19, 70, 19, 73, ++ 136, 24, 64, 104, 176, 185, 12, 34, 83, 67, 202, 24, 206, 80, 85, 96, ++ 194, 248, 8, 128, 32, 70, 199, 243, 226, 242, 217, 248, 36, 48, 12, ++ 77, 30, 67, 46, 96, 32, 70, 199, 243, 218, 242, 43, 104, 1, 37, 201, ++ 248, 36, 48, 4, 224, 1, 51, 12, 50, 5, 43, 224, 209, 0, 37, 32, 70, ++ 57, 70, 199, 243, 216, 243, 40, 70, 189, 232, 248, 131, 0, 191, 36, ++ 109, 4, 0, 28, 7, 0, 0, 56, 181, 18, 76, 0, 33, 72, 34, 32, 70, 188, ++ 243, 221, 242, 16, 74, 1, 35, 132, 232, 12, 0, 0, 37, 14, 73, 31, 34, ++ 4, 241, 12, 0, 188, 243, 178, 243, 132, 248, 43, 80, 193, 243, 8, 240, ++ 79, 244, 0, 35, 163, 99, 79, 244, 0, 3, 227, 99, 7, 75, 32, 99, 35, ++ 100, 7, 75, 101, 99, 219, 105, 101, 100, 163, 96, 56, 189, 0, 191, 128, ++ 109, 4, 0, 68, 69, 66, 71, 211, 22, 4, 0, 128, 20, 8, 0, 220, 109, 4, ++ 0, 67, 105, 20, 43, 1, 221, 196, 247, 7, 187, 112, 71, 67, 105, 16, ++ 181, 10, 43, 4, 70, 10, 221, 6, 73, 1, 34, 3, 70, 255, 247, 132, 255, ++ 32, 70, 1, 33, 189, 232, 16, 64, 7, 240, 238, 185, 16, 189, 0, 191, ++ 9, 37, 0, 0, 195, 105, 16, 181, 89, 7, 4, 70, 12, 213, 7, 75, 0, 34, ++ 25, 104, 199, 243, 210, 241, 5, 73, 32, 70, 16, 34, 35, 70, 189, 232, ++ 16, 64, 255, 247, 104, 191, 16, 189, 0, 191, 252, 109, 4, 0, 185, 121, ++ 128, 0, 19, 75, 19, 181, 19, 96, 19, 70, 1, 224, 17, 76, 28, 96, 4, ++ 51, 173, 241, 124, 4, 163, 66, 248, 211, 196, 28, 36, 240, 3, 4, 13, ++ 75, 9, 27, 13, 72, 25, 96, 0, 35, 3, 96, 12, 72, 8, 57, 3, 96, 11, 72, ++ 132, 232, 10, 0, 3, 96, 10, 72, 2, 96, 10, 72, 2, 245, 0, 82, 2, 96, ++ 9, 74, 19, 96, 186, 247, 64, 255, 68, 96, 28, 189, 75, 65, 84, 83, 44, ++ 7, 0, 0, 76, 7, 0, 0, 120, 7, 0, 0, 108, 109, 4, 0, 208, 109, 4, 0, ++ 120, 109, 4, 0, 40, 7, 0, 0, 8, 181, 0, 33, 20, 32, 186, 247, 65, 255, ++ 5, 75, 0, 33, 24, 96, 20, 34, 188, 243, 63, 242, 189, 232, 8, 64, 192, ++ 243, 227, 181, 0, 191, 100, 7, 0, 0, 45, 233, 240, 71, 77, 28, 41, 70, ++ 130, 70, 5, 240, 245, 250, 19, 76, 32, 96, 0, 179, 79, 234, 133, 9, ++ 72, 70, 0, 33, 186, 247, 36, 255, 15, 79, 128, 70, 56, 96, 15, 78, 104, ++ 177, 74, 70, 0, 33, 188, 243, 31, 242, 32, 104, 0, 33, 188, 243, 191, ++ 245, 59, 104, 0, 34, 26, 96, 53, 96, 189, 232, 240, 135, 80, 70, 33, ++ 104, 5, 240, 41, 251, 198, 248, 0, 128, 196, 248, 0, 128, 189, 232, ++ 240, 135, 0, 191, 48, 7, 0, 0, 32, 7, 0, 0, 60, 7, 0, 0, 240, 181, 24, ++ 79, 133, 176, 15, 33, 56, 104, 5, 240, 23, 250, 15, 40, 3, 144, 62, ++ 70, 36, 209, 132, 32, 0, 33, 186, 247, 241, 254, 18, 76, 32, 96, 208, ++ 177, 0, 33, 132, 34, 188, 243, 238, 241, 0, 37, 1, 35, 4, 170, 66, 248, ++ 4, 61, 0, 149, 1, 149, 56, 104, 33, 104, 79, 244, 240, 99, 5, 240, 41, ++ 250, 1, 48, 32, 104, 3, 208, 40, 33, 193, 247, 223, 253, 5, 224, 186, ++ 247, 92, 255, 37, 96, 48, 104, 5, 240, 12, 250, 5, 176, 240, 189, 252, ++ 109, 4, 0, 116, 7, 0, 0, 177, 245, 224, 111, 115, 181, 4, 70, 14, 70, ++ 21, 70, 6, 209, 3, 105, 0, 145, 0, 33, 1, 145, 30, 104, 10, 70, 12, ++ 224, 13, 75, 0, 34, 24, 104, 199, 243, 153, 242, 1, 70, 128, 177, 35, ++ 105, 0, 34, 0, 150, 1, 146, 30, 104, 32, 70, 43, 70, 176, 71, 56, 177, ++ 6, 75, 160, 97, 26, 104, 101, 97, 34, 98, 28, 96, 0, 32, 1, 224, 79, ++ 240, 255, 48, 124, 189, 0, 191, 56, 7, 0, 0, 96, 109, 4, 0, 45, 233, ++ 248, 67, 16, 32, 12, 70, 0, 33, 145, 70, 152, 70, 186, 247, 147, 254, ++ 5, 70, 32, 179, 20, 78, 48, 104, 198, 243, 47, 247, 9, 155, 7, 70, 35, ++ 185, 48, 104, 33, 70, 74, 70, 199, 243, 103, 242, 48, 104, 198, 243, ++ 238, 247, 1, 35, 131, 64, 8, 154, 235, 96, 170, 96, 11, 74, 197, 248, ++ 4, 128, 17, 104, 21, 96, 9, 74, 41, 96, 17, 104, 48, 104, 11, 67, 19, ++ 96, 57, 70, 199, 243, 95, 242, 0, 32, 189, 232, 248, 131, 111, 240, ++ 26, 0, 189, 232, 248, 131, 56, 7, 0, 0, 112, 7, 0, 0, 72, 7, 0, 0, 19, ++ 181, 0, 33, 4, 70, 199, 243, 77, 242, 23, 75, 24, 96, 23, 75, 0, 245, ++ 112, 96, 24, 96, 99, 105, 34, 43, 18, 221, 227, 105, 88, 6, 15, 213, ++ 64, 246, 39, 1, 0, 34, 32, 70, 198, 243, 163, 247, 1, 70, 32, 70, 199, ++ 243, 55, 242, 14, 75, 0, 33, 24, 96, 32, 70, 199, 243, 49, 242, 0, 32, ++ 79, 244, 0, 97, 2, 70, 10, 75, 0, 144, 1, 144, 255, 247, 156, 255, 40, ++ 177, 1, 32, 2, 176, 189, 232, 16, 64, 187, 247, 121, 187, 2, 176, 16, ++ 189, 0, 191, 92, 7, 0, 0, 4, 110, 4, 0, 104, 7, 0, 0, 165, 121, 128, ++ 0, 115, 181, 55, 75, 55, 76, 1, 147, 55, 75, 0, 33, 32, 34, 32, 70, ++ 29, 104, 38, 105, 188, 243, 30, 241, 1, 35, 35, 96, 51, 75, 38, 97, ++ 27, 104, 227, 97, 69, 248, 4, 76, 0, 240, 72, 252, 173, 245, 254, 81, ++ 60, 57, 10, 70, 46, 72, 255, 247, 139, 254, 192, 243, 95, 240, 192, ++ 243, 135, 244, 0, 240, 115, 248, 255, 247, 33, 254, 0, 32, 6, 240, 40, ++ 253, 40, 77, 41, 76, 40, 96, 7, 240, 103, 249, 32, 96, 255, 247, 148, ++ 255, 255, 247, 174, 254, 32, 104, 0, 240, 41, 251, 32, 104, 6, 240, ++ 60, 253, 34, 75, 32, 104, 26, 104, 2, 245, 128, 50, 26, 96, 32, 75, ++ 26, 104, 2, 245, 128, 50, 26, 96, 31, 75, 26, 104, 2, 245, 128, 50, ++ 26, 96, 0, 240, 192, 248, 0, 34, 28, 72, 28, 73, 192, 243, 211, 245, ++ 2, 34, 27, 72, 28, 73, 192, 243, 206, 245, 0, 34, 27, 72, 27, 73, 192, ++ 243, 201, 245, 0, 34, 26, 73, 27, 72, 192, 243, 196, 245, 32, 104, 255, ++ 247, 21, 254, 32, 104, 255, 247, 24, 254, 32, 104, 255, 247, 41, 254, ++ 40, 104, 64, 242, 143, 17, 255, 247, 134, 254, 255, 247, 184, 254, 32, ++ 104, 124, 189, 173, 222, 173, 222, 220, 109, 4, 0, 64, 93, 4, 0, 0, ++ 110, 4, 0, 180, 107, 6, 0, 252, 109, 4, 0, 56, 7, 0, 0, 44, 7, 0, 0, ++ 76, 7, 0, 0, 108, 109, 4, 0, 241, 65, 4, 0, 45, 41, 0, 0, 90, 56, 4, ++ 0, 229, 123, 128, 0, 42, 25, 4, 0, 233, 125, 128, 0, 217, 121, 128, ++ 0, 45, 25, 4, 0, 112, 71, 0, 0, 112, 181, 23, 77, 44, 104, 44, 187, ++ 176, 32, 33, 70, 186, 247, 136, 253, 40, 96, 16, 179, 33, 70, 176, 34, ++ 188, 243, 134, 240, 79, 244, 128, 96, 33, 70, 46, 104, 186, 247, 124, ++ 253, 176, 96, 40, 104, 134, 104, 30, 185, 186, 247, 254, 253, 46, 96, ++ 13, 224, 79, 244, 128, 98, 194, 96, 33, 70, 48, 70, 188, 243, 113, 240, ++ 43, 104, 6, 74, 32, 70, 19, 96, 6, 74, 83, 97, 112, 189, 79, 240, 255, ++ 48, 112, 189, 79, 240, 255, 48, 112, 189, 28, 110, 4, 0, 124, 7, 0, ++ 0, 220, 109, 4, 0, 112, 181, 24, 76, 5, 70, 35, 104, 51, 185, 23, 78, ++ 51, 104, 11, 185, 255, 247, 192, 255, 51, 104, 35, 96, 32, 104, 8, 179, ++ 0, 35, 3, 96, 192, 248, 156, 48, 67, 96, 1, 35, 128, 248, 164, 48, 107, ++ 108, 14, 59, 1, 43, 3, 217, 40, 70, 13, 73, 255, 247, 192, 252, 12, ++ 75, 154, 104, 18, 177, 34, 104, 194, 248, 156, 48, 32, 104, 1, 35, 192, ++ 248, 156, 48, 192, 243, 10, 245, 7, 72, 8, 73, 34, 104, 192, 243, 39, ++ 245, 32, 104, 112, 189, 0, 191, 124, 7, 0, 0, 28, 110, 4, 0, 233, 121, ++ 4, 0, 12, 110, 4, 0, 172, 185, 135, 0, 97, 133, 128, 0, 16, 181, 0, ++ 35, 4, 70, 16, 34, 10, 73, 255, 247, 249, 252, 0, 33, 32, 70, 196, 247, ++ 169, 249, 0, 34, 32, 70, 79, 244, 160, 81, 196, 247, 1, 249, 5, 75, ++ 0, 34, 32, 70, 154, 96, 189, 232, 16, 64, 255, 247, 169, 191, 0, 191, ++ 33, 132, 128, 0, 12, 110, 4, 0, 56, 181, 4, 70, 13, 70, 81, 177, 16, ++ 32, 192, 243, 7, 246, 4, 75, 24, 96, 32, 177, 128, 232, 48, 0, 79, 244, ++ 240, 99, 131, 96, 56, 189, 32, 110, 4, 0, 19, 75, 2, 70, 27, 104, 0, ++ 104, 16, 181, 0, 244, 112, 65, 220, 30, 9, 11, 4, 44, 8, 216, 0, 244, ++ 112, 96, 0, 10, 14, 48, 1, 35, 19, 250, 0, 240, 72, 67, 16, 189, 7, ++ 43, 12, 216, 0, 32, 16, 189, 67, 244, 128, 116, 20, 97, 20, 108, 1, ++ 51, 4, 240, 127, 4, 1, 52, 100, 3, 0, 25, 1, 224, 0, 35, 24, 70, 139, ++ 66, 240, 209, 16, 189, 216, 33, 0, 0, 3, 104, 64, 104, 24, 24, 35, 240, ++ 7, 3, 8, 51, 152, 66, 140, 191, 0, 32, 1, 32, 112, 71, 0, 0, 4, 75, ++ 5, 74, 24, 104, 144, 66, 26, 191, 0, 241, 8, 2, 26, 96, 0, 32, 112, ++ 71, 76, 93, 4, 0, 0, 24, 0, 0, 45, 233, 243, 65, 144, 232, 72, 0, 35, ++ 240, 7, 4, 8, 52, 19, 240, 7, 2, 2, 209, 157, 25, 172, 66, 74, 208, ++ 53, 70, 128, 104, 0, 34, 3, 224, 135, 92, 13, 248, 2, 112, 1, 50, 178, ++ 66, 249, 209, 158, 24, 166, 66, 4, 217, 0, 41, 61, 208, 54, 27, 149, ++ 27, 0, 224, 0, 38, 35, 240, 7, 7, 199, 235, 3, 12, 0, 34, 4, 224, 18, ++ 248, 7, 128, 0, 248, 2, 128, 1, 50, 98, 69, 248, 209, 130, 24, 0, 32, ++ 3, 224, 29, 248, 0, 112, 23, 84, 1, 48, 168, 66, 249, 209, 91, 25, 82, ++ 25, 231, 26, 0, 32, 4, 224, 19, 248, 0, 192, 2, 248, 0, 192, 1, 48, ++ 184, 66, 248, 209, 0, 46, 24, 221, 0, 171, 93, 25, 0, 35, 234, 92, 202, ++ 84, 1, 51, 179, 66, 250, 209, 201, 24, 228, 24, 0, 34, 195, 241, 8, ++ 3, 2, 224, 160, 92, 136, 84, 1, 50, 154, 66, 250, 209, 4, 224, 16, 70, ++ 3, 224, 79, 240, 255, 48, 0, 224, 0, 32, 189, 232, 252, 129, 45, 233, ++ 240, 71, 28, 75, 29, 76, 0, 38, 196, 235, 3, 8, 28, 75, 79, 234, 168, ++ 8, 3, 251, 8, 248, 71, 70, 41, 224, 35, 104, 212, 248, 8, 160, 35, 240, ++ 7, 9, 0, 37, 26, 248, 5, 32, 21, 248, 9, 48, 154, 66, 2, 208, 1, 32, ++ 187, 247, 115, 249, 1, 53, 8, 45, 243, 209, 32, 70, 255, 247, 99, 255, ++ 136, 185, 14, 75, 5, 70, 3, 235, 199, 10, 1, 55, 5, 235, 9, 3, 26, 248, ++ 5, 32, 27, 122, 154, 66, 2, 208, 1, 32, 187, 247, 93, 249, 1, 53, 8, ++ 45, 242, 209, 1, 54, 12, 52, 70, 69, 211, 219, 189, 232, 240, 135, 24, ++ 33, 0, 0, 0, 24, 0, 0, 171, 170, 170, 170, 0, 16, 0, 0, 20, 75, 45, ++ 233, 240, 71, 27, 104, 19, 77, 155, 104, 19, 79, 3, 240, 15, 9, 127, ++ 27, 1, 35, 18, 74, 3, 250, 9, 249, 187, 16, 2, 251, 3, 248, 0, 38, 68, ++ 70, 6, 224, 40, 70, 255, 247, 43, 255, 0, 185, 1, 52, 1, 54, 12, 53, ++ 70, 69, 246, 219, 34, 70, 187, 16, 79, 240, 85, 52, 4, 251, 3, 35, 7, ++ 72, 73, 70, 189, 232, 240, 71, 187, 243, 5, 183, 0, 191, 212, 33, 0, ++ 0, 0, 24, 0, 0, 24, 33, 0, 0, 171, 170, 170, 170, 63, 25, 4, 0, 65, ++ 244, 0, 49, 56, 181, 66, 99, 4, 70, 1, 99, 101, 37, 2, 224, 10, 32, ++ 192, 243, 55, 242, 35, 107, 0, 43, 1, 219, 1, 61, 247, 209, 56, 189, ++ 131, 106, 67, 240, 0, 67, 131, 98, 112, 71, 131, 106, 35, 240, 0, 67, ++ 131, 98, 112, 71, 248, 181, 134, 104, 5, 70, 1, 36, 15, 70, 6, 240, ++ 15, 6, 255, 247, 242, 255, 20, 250, 6, 246, 172, 98, 239, 98, 0, 36, ++ 5, 224, 161, 178, 40, 70, 0, 34, 255, 247, 209, 255, 1, 52, 180, 66, ++ 247, 219, 248, 189, 0, 0, 45, 233, 240, 65, 255, 247, 226, 254, 25, ++ 78, 26, 75, 223, 248, 112, 128, 25, 79, 246, 26, 25, 75, 200, 235, 7, ++ 7, 0, 40, 20, 191, 5, 70, 29, 70, 4, 70, 93, 27, 255, 247, 131, 255, ++ 71, 177, 0, 33, 64, 70, 58, 70, 187, 243, 133, 246, 64, 70, 57, 70, ++ 191, 243, 155, 246, 70, 177, 0, 33, 12, 72, 50, 70, 187, 243, 123, 246, ++ 10, 72, 49, 70, 191, 243, 145, 246, 85, 177, 0, 33, 32, 70, 42, 70, ++ 187, 243, 113, 246, 32, 70, 41, 70, 189, 232, 240, 65, 191, 243, 133, ++ 182, 189, 232, 240, 129, 0, 191, 24, 33, 0, 0, 0, 24, 0, 0, 0, 16, 0, ++ 0, 0, 24, 0, 0, 129, 8, 0, 0, 66, 75, 45, 233, 247, 79, 29, 104, 65, ++ 73, 40, 70, 255, 247, 157, 255, 64, 74, 65, 75, 169, 104, 211, 26, 64, ++ 74, 155, 16, 90, 67, 1, 146, 113, 208, 1, 32, 1, 240, 15, 1, 16, 250, ++ 1, 241, 138, 66, 1, 221, 187, 247, 136, 248, 40, 70, 255, 247, 81, 254, ++ 57, 75, 160, 241, 4, 11, 26, 104, 153, 70, 14, 42, 1, 216, 134, 16, ++ 0, 224, 1, 38, 79, 240, 0, 8, 49, 76, 76, 224, 99, 104, 1, 59, 7, 43, ++ 1, 216, 163, 104, 19, 185, 1, 32, 187, 247, 110, 248, 32, 70, 255, 247, ++ 97, 254, 56, 185, 255, 247, 106, 254, 7, 70, 32, 185, 1, 32, 187, 247, ++ 99, 248, 0, 224, 0, 39, 32, 70, 57, 70, 255, 247, 109, 254, 16, 177, ++ 1, 32, 187, 247, 89, 248, 223, 248, 124, 160, 161, 104, 34, 104, 217, ++ 248, 0, 48, 202, 235, 1, 1, 34, 240, 7, 2, 201, 16, 14, 43, 150, 191, ++ 2, 234, 11, 2, 50, 67, 70, 234, 146, 2, 137, 178, 40, 70, 255, 247, ++ 43, 255, 167, 177, 34, 104, 217, 248, 0, 48, 34, 240, 7, 2, 202, 235, ++ 7, 1, 8, 50, 201, 16, 14, 43, 152, 191, 2, 234, 11, 2, 137, 178, 140, ++ 191, 50, 67, 70, 234, 146, 2, 40, 70, 255, 247, 21, 255, 8, 241, 1, ++ 8, 12, 52, 1, 155, 152, 69, 175, 219, 40, 70, 255, 247, 29, 255, 3, ++ 176, 189, 232, 240, 79, 255, 247, 143, 190, 3, 176, 189, 232, 240, 143, ++ 212, 33, 0, 0, 0, 16, 0, 0, 24, 33, 0, 0, 0, 24, 0, 0, 171, 170, 170, ++ 170, 216, 33, 0, 0, 45, 233, 247, 67, 4, 70, 198, 243, 167, 245, 32, ++ 70, 0, 240, 136, 249, 107, 72, 186, 247, 37, 249, 32, 70, 191, 243, ++ 94, 240, 0, 245, 120, 112, 79, 244, 122, 115, 7, 48, 103, 79, 176, 251, ++ 243, 240, 56, 96, 32, 70, 191, 243, 82, 240, 100, 75, 101, 74, 195, ++ 24, 97, 105, 179, 251, 242, 243, 99, 74, 34, 41, 19, 96, 99, 78, 99, ++ 77, 4, 221, 227, 105, 88, 6, 1, 213, 51, 104, 0, 224, 43, 104, 3, 245, ++ 194, 99, 4, 51, 211, 248, 0, 224, 48, 104, 43, 104, 34, 41, 5, 221, ++ 226, 105, 82, 6, 2, 213, 0, 245, 194, 98, 1, 224, 3, 245, 194, 98, 4, ++ 50, 18, 104, 150, 69, 241, 208, 34, 41, 5, 221, 226, 105, 82, 6, 2, ++ 213, 0, 245, 194, 99, 1, 224, 3, 245, 194, 99, 4, 51, 211, 248, 0, 128, ++ 186, 247, 192, 248, 49, 104, 129, 70, 96, 105, 42, 104, 16, 37, 34, ++ 40, 5, 221, 227, 105, 91, 6, 2, 213, 1, 245, 194, 99, 1, 224, 2, 245, ++ 194, 99, 4, 51, 27, 104, 152, 69, 241, 208, 34, 40, 5, 221, 227, 105, ++ 94, 6, 2, 213, 1, 245, 194, 99, 1, 224, 2, 245, 194, 99, 4, 51, 1, 61, ++ 211, 248, 0, 128, 226, 209, 186, 247, 156, 248, 58, 104, 201, 235, 0, ++ 6, 178, 250, 130, 243, 154, 64, 25, 31, 178, 251, 246, 242, 56, 75, ++ 1, 50, 26, 96, 79, 244, 122, 115, 162, 251, 3, 35, 53, 72, 202, 64, ++ 1, 96, 193, 241, 32, 1, 19, 250, 1, 240, 128, 24, 194, 247, 96, 254, ++ 57, 104, 4, 35, 15, 224, 181, 250, 133, 242, 182, 250, 134, 240, 1, ++ 58, 130, 66, 168, 191, 2, 70, 150, 64, 149, 64, 155, 24, 182, 251, 241, ++ 242, 1, 251, 18, 102, 85, 25, 21, 240, 64, 79, 236, 208, 38, 74, 19, ++ 96, 38, 75, 64, 242, 255, 50, 29, 96, 35, 106, 0, 43, 36, 75, 200, 191, ++ 111, 240, 127, 66, 26, 96, 99, 105, 34, 43, 12, 221, 227, 105, 88, 6, ++ 9, 213, 0, 32, 64, 246, 39, 1, 2, 70, 30, 75, 0, 144, 1, 144, 255, 247, ++ 108, 251, 5, 224, 32, 70, 26, 73, 32, 34, 0, 35, 255, 247, 229, 249, ++ 0, 32, 24, 73, 188, 243, 85, 243, 24, 77, 40, 96, 120, 177, 1, 32, 191, ++ 243, 79, 247, 32, 70, 45, 104, 190, 243, 151, 247, 181, 251, 240, 240, ++ 79, 244, 122, 117, 69, 67, 17, 75, 165, 245, 250, 101, 29, 96, 189, ++ 232, 254, 131, 45, 49, 0, 0, 80, 93, 4, 0, 63, 66, 15, 0, 64, 66, 15, ++ 0, 216, 6, 0, 0, 104, 7, 0, 0, 92, 7, 0, 0, 204, 6, 0, 0, 208, 6, 0, ++ 0, 200, 6, 0, 0, 196, 6, 0, 0, 212, 6, 0, 0, 85, 128, 128, 0, 240, 136, ++ 5, 0, 180, 7, 0, 0, 176, 7, 0, 0, 13, 75, 0, 33, 26, 104, 66, 240, 16, ++ 2, 26, 96, 26, 104, 34, 244, 0, 114, 26, 96, 9, 74, 19, 104, 67, 240, ++ 128, 115, 67, 244, 128, 51, 19, 96, 7, 75, 7, 34, 26, 96, 67, 248, 4, ++ 28, 89, 104, 90, 96, 4, 75, 32, 34, 26, 96, 112, 71, 20, 237, 0, 224, ++ 252, 237, 0, 224, 36, 16, 0, 224, 0, 228, 0, 224, 112, 181, 4, 70, 14, ++ 70, 198, 243, 131, 244, 32, 70, 198, 243, 62, 242, 5, 70, 186, 247, ++ 193, 255, 64, 246, 42, 1, 2, 70, 32, 70, 198, 243, 117, 245, 130, 105, ++ 67, 105, 38, 177, 66, 240, 0, 66, 67, 240, 0, 67, 3, 224, 34, 240, 0, ++ 66, 35, 240, 0, 67, 130, 97, 41, 70, 67, 97, 32, 70, 189, 232, 112, ++ 64, 198, 243, 111, 181, 45, 233, 248, 67, 4, 70, 30, 70, 144, 70, 13, ++ 70, 198, 243, 91, 244, 32, 70, 198, 243, 22, 242, 65, 70, 50, 70, 7, ++ 70, 32, 70, 198, 243, 80, 245, 32, 70, 198, 243, 215, 242, 6, 70, 186, ++ 247, 144, 255, 64, 246, 42, 1, 2, 70, 32, 70, 198, 243, 68, 245, 79, ++ 240, 1, 8, 129, 70, 133, 177, 8, 250, 6, 245, 131, 105, 51, 234, 5, ++ 5, 2, 209, 64, 70, 185, 247, 143, 255, 1, 54, 1, 32, 176, 64, 185, 247, ++ 124, 255, 201, 248, 24, 80, 14, 224, 112, 28, 8, 250, 6, 246, 8, 250, ++ 0, 240, 185, 247, 128, 255, 64, 70, 185, 247, 111, 255, 217, 248, 24, ++ 48, 30, 67, 201, 248, 24, 96, 32, 70, 57, 70, 189, 232, 248, 67, 198, ++ 243, 40, 181, 45, 233, 248, 67, 4, 70, 198, 243, 23, 244, 32, 70, 64, ++ 246, 14, 1, 0, 34, 198, 243, 15, 245, 5, 70, 0, 40, 56, 208, 32, 70, ++ 198, 243, 7, 244, 1, 70, 24, 185, 32, 70, 10, 70, 198, 243, 183, 241, ++ 32, 70, 47, 104, 213, 248, 0, 128, 198, 243, 197, 241, 4, 40, 6, 70, ++ 5, 216, 37, 209, 8, 244, 224, 40, 184, 245, 64, 63, 32, 209, 0, 32, ++ 79, 73, 188, 243, 102, 242, 216, 185, 7, 240, 240, 7, 63, 9, 15, 224, ++ 1, 63, 7, 46, 47, 97, 8, 217, 12, 46, 6, 208, 43, 108, 3, 244, 64, 99, ++ 179, 245, 64, 111, 0, 208, 16, 177, 69, 75, 1, 32, 107, 97, 0, 47, 237, ++ 209, 213, 248, 232, 49, 35, 240, 16, 3, 197, 248, 232, 49, 186, 247, ++ 23, 255, 64, 246, 42, 1, 2, 70, 32, 70, 198, 243, 203, 244, 61, 77, ++ 6, 70, 40, 96, 186, 247, 12, 255, 49, 70, 2, 70, 58, 72, 187, 243, 9, ++ 244, 32, 70, 198, 243, 134, 241, 56, 75, 24, 96, 43, 104, 26, 104, 66, ++ 240, 128, 114, 26, 96, 26, 104, 66, 240, 2, 2, 26, 96, 0, 34, 195, 248, ++ 224, 33, 98, 105, 39, 42, 5, 221, 211, 248, 224, 33, 66, 240, 64, 2, ++ 195, 248, 224, 33, 64, 242, 221, 86, 2, 224, 10, 32, 191, 243, 49, 247, ++ 43, 104, 211, 248, 224, 49, 155, 3, 1, 212, 1, 62, 245, 209, 0, 33, ++ 11, 70, 32, 70, 79, 244, 0, 98, 255, 247, 50, 255, 0, 33, 11, 70, 32, ++ 70, 64, 246, 18, 2, 255, 247, 43, 255, 0, 33, 11, 70, 32, 70, 64, 246, ++ 41, 2, 255, 247, 36, 255, 32, 70, 1, 33, 255, 247, 251, 254, 0, 32, ++ 26, 73, 188, 243, 243, 241, 0, 179, 32, 70, 198, 243, 57, 241, 6, 70, ++ 186, 247, 188, 254, 64, 246, 42, 1, 2, 70, 32, 70, 198, 243, 112, 244, ++ 208, 248, 20, 144, 7, 70, 208, 248, 152, 128, 32, 70, 198, 243, 40, ++ 241, 1, 35, 131, 64, 67, 234, 9, 3, 123, 97, 72, 240, 1, 3, 199, 248, ++ 152, 48, 32, 70, 49, 70, 198, 243, 105, 244, 43, 104, 26, 106, 66, 240, ++ 3, 2, 26, 98, 189, 232, 248, 131, 251, 136, 5, 0, 255, 127, 1, 33, 36, ++ 110, 4, 0, 81, 26, 4, 0, 44, 110, 4, 0, 6, 137, 5, 0, 7, 33, 192, 248, ++ 164, 17, 64, 33, 192, 248, 168, 17, 79, 244, 240, 97, 192, 248, 200, ++ 17, 24, 33, 192, 248, 204, 17, 8, 33, 1, 34, 192, 248, 208, 17, 6, 33, ++ 10, 35, 192, 248, 156, 33, 192, 248, 176, 33, 192, 248, 220, 17, 200, ++ 34, 28, 33, 192, 248, 152, 49, 192, 248, 180, 33, 32, 35, 16, 34, 192, ++ 248, 224, 17, 12, 33, 192, 248, 160, 49, 192, 248, 188, 49, 192, 248, ++ 192, 49, 192, 248, 196, 33, 192, 248, 212, 49, 192, 248, 228, 17, 3, ++ 35, 192, 248, 232, 33, 4, 33, 192, 248, 240, 33, 0, 34, 192, 248, 216, ++ 49, 192, 248, 236, 17, 192, 248, 244, 33, 192, 248, 252, 33, 192, 248, ++ 0, 50, 112, 71, 65, 242, 228, 67, 152, 66, 6, 209, 68, 242, 244, 48, ++ 11, 26, 88, 66, 64, 235, 3, 0, 112, 71, 0, 32, 112, 71, 208, 248, 28, ++ 18, 56, 181, 4, 70, 89, 177, 128, 104, 4, 240, 166, 251, 5, 70, 212, ++ 248, 28, 2, 194, 247, 43, 255, 0, 35, 196, 248, 28, 50, 0, 224, 13, ++ 70, 40, 70, 56, 189, 127, 181, 4, 70, 6, 35, 132, 32, 3, 147, 194, 247, ++ 26, 255, 196, 248, 28, 2, 184, 177, 0, 33, 132, 34, 187, 243, 249, 242, ++ 0, 37, 28, 35, 160, 104, 212, 248, 28, 18, 3, 170, 0, 149, 1, 149, 4, ++ 240, 55, 251, 6, 70, 1, 48, 8, 209, 212, 248, 28, 2, 194, 247, 5, 255, ++ 196, 248, 28, 82, 1, 224, 79, 240, 255, 54, 48, 70, 4, 176, 112, 189, ++ 45, 233, 240, 65, 4, 70, 13, 70, 22, 70, 152, 70, 64, 242, 233, 55, ++ 2, 224, 10, 32, 191, 243, 66, 246, 99, 105, 26, 109, 0, 42, 4, 218, ++ 1, 63, 246, 209, 56, 70, 189, 232, 240, 129, 6, 154, 70, 68, 54, 2, ++ 178, 241, 128, 127, 70, 240, 0, 70, 3, 209, 42, 120, 66, 240, 128, 114, ++ 182, 24, 30, 101, 64, 242, 233, 54, 2, 224, 10, 32, 191, 243, 38, 246, ++ 99, 105, 27, 109, 0, 43, 3, 219, 43, 112, 1, 32, 189, 232, 240, 129, ++ 1, 62, 242, 209, 48, 70, 189, 232, 240, 129, 0, 0, 45, 233, 240, 67, ++ 139, 176, 29, 70, 221, 248, 72, 144, 159, 75, 8, 70, 195, 248, 0, 144, ++ 17, 70, 23, 70, 255, 247, 116, 255, 0, 40, 0, 240, 48, 129, 79, 244, ++ 11, 112, 194, 247, 175, 254, 4, 70, 0, 40, 0, 240, 41, 129, 0, 33, 79, ++ 244, 11, 114, 187, 243, 140, 242, 165, 96, 196, 248, 20, 144, 32, 70, ++ 255, 247, 28, 255, 145, 75, 30, 104, 196, 248, 24, 98, 30, 177, 54, ++ 120, 0, 54, 24, 191, 1, 38, 4, 241, 40, 8, 64, 70, 2, 33, 65, 34, 188, ++ 243, 138, 242, 0, 35, 0, 147, 1, 147, 2, 147, 56, 70, 41, 70, 74, 70, ++ 19, 155, 6, 240, 254, 250, 224, 96, 0, 40, 0, 240, 250, 128, 197, 243, ++ 252, 247, 32, 96, 224, 104, 198, 243, 8, 240, 103, 105, 128, 74, 123, ++ 104, 128, 73, 3, 240, 1, 3, 131, 240, 1, 3, 212, 248, 0, 192, 0, 43, ++ 24, 191, 17, 70, 132, 248, 122, 49, 64, 246, 41, 3, 156, 69, 96, 96, ++ 212, 248, 8, 224, 226, 104, 7, 245, 0, 115, 3, 209, 16, 177, 7, 245, ++ 8, 119, 1, 224, 7, 245, 4, 119, 0, 151, 212, 248, 188, 1, 1, 144, 212, ++ 248, 192, 1, 2, 144, 212, 248, 200, 1, 3, 144, 79, 240, 255, 48, 4, ++ 144, 212, 248, 196, 1, 5, 144, 8, 32, 6, 144, 0, 32, 7, 144, 112, 70, ++ 4, 240, 36, 252, 96, 98, 0, 40, 0, 240, 186, 128, 212, 248, 24, 18, ++ 100, 79, 185, 177, 11, 120, 171, 177, 215, 248, 176, 48, 152, 71, 98, ++ 73, 34, 70, 212, 248, 24, 2, 188, 243, 155, 241, 212, 248, 24, 2, 95, ++ 73, 34, 70, 4, 240, 199, 250, 46, 177, 32, 70, 255, 247, 8, 255, 0, ++ 40, 64, 240, 158, 128, 2, 33, 10, 70, 215, 248, 184, 48, 96, 106, 152, ++ 71, 32, 70, 0, 33, 226, 104, 43, 70, 0, 240, 110, 249, 32, 97, 0, 40, ++ 0, 240, 142, 128, 0, 33, 11, 70, 32, 70, 81, 74, 191, 243, 198, 242, ++ 0, 35, 196, 248, 148, 1, 132, 248, 125, 49, 78, 72, 194, 243, 74, 240, ++ 16, 179, 187, 243, 73, 244, 1, 35, 131, 64, 75, 72, 196, 248, 132, 49, ++ 194, 243, 64, 240, 16, 177, 187, 243, 63, 244, 8, 177, 212, 248, 132, ++ 1, 196, 248, 136, 1, 69, 73, 0, 32, 188, 243, 44, 240, 3, 12, 164, 248, ++ 140, 49, 164, 248, 142, 1, 59, 177, 0, 33, 32, 70, 64, 74, 11, 70, 191, ++ 243, 156, 242, 196, 248, 144, 1, 0, 32, 62, 73, 188, 243, 26, 240, 1, ++ 40, 8, 191, 132, 248, 34, 2, 32, 70, 186, 247, 233, 252, 0, 40, 53, ++ 208, 0, 32, 1, 37, 196, 248, 164, 1, 132, 248, 42, 82, 54, 73, 188, ++ 243, 8, 240, 32, 177, 132, 248, 5, 82, 52, 72, 187, 243, 212, 241, 0, ++ 32, 51, 73, 187, 243, 254, 247, 192, 178, 141, 248, 38, 0, 104, 177, ++ 0, 240, 15, 0, 79, 240, 128, 115, 10, 169, 1, 248, 2, 13, 79, 244, 64, ++ 114, 0, 147, 32, 70, 15, 35, 255, 247, 184, 254, 10, 169, 8, 35, 1, ++ 248, 1, 61, 99, 105, 0, 34, 29, 111, 26, 103, 79, 240, 128, 115, 0, ++ 147, 32, 70, 240, 35, 255, 247, 169, 254, 99, 105, 29, 103, 33, 73, ++ 34, 70, 33, 72, 191, 243, 122, 246, 32, 72, 191, 243, 15, 245, 32, 75, ++ 4, 245, 132, 114, 81, 28, 26, 96, 3, 50, 218, 96, 212, 248, 240, 32, ++ 89, 96, 4, 245, 133, 113, 153, 96, 195, 248, 16, 128, 90, 97, 5, 224, ++ 32, 70, 194, 247, 136, 253, 0, 36, 0, 224, 4, 70, 32, 70, 11, 176, 189, ++ 232, 240, 131, 184, 7, 0, 0, 116, 7, 0, 0, 29, 137, 5, 0, 47, 137, 5, ++ 0, 208, 134, 135, 0, 241, 57, 0, 0, 213, 49, 0, 0, 109, 58, 0, 0, 68, ++ 137, 5, 0, 110, 137, 5, 0, 102, 137, 5, 0, 165, 196, 128, 0, 57, 137, ++ 5, 0, 37, 137, 5, 0, 77, 137, 5, 0, 17, 137, 5, 0, 77, 196, 128, 0, ++ 118, 26, 4, 0, 77, 193, 128, 0, 48, 110, 4, 0, 56, 181, 0, 37, 4, 70, ++ 128, 248, 121, 81, 0, 105, 0, 240, 222, 248, 32, 70, 195, 243, 43, 246, ++ 224, 104, 41, 70, 197, 243, 189, 246, 212, 248, 148, 1, 40, 177, 185, ++ 247, 200, 255, 212, 248, 148, 1, 191, 243, 172, 241, 212, 248, 144, ++ 1, 40, 177, 185, 247, 191, 255, 212, 248, 144, 1, 191, 243, 163, 241, ++ 224, 104, 5, 240, 104, 255, 212, 248, 28, 50, 35, 177, 27, 120, 19, ++ 177, 32, 70, 255, 247, 245, 253, 32, 70, 189, 232, 56, 64, 194, 247, ++ 40, 189, 16, 181, 132, 105, 160, 104, 255, 247, 202, 255, 224, 104, ++ 5, 240, 55, 253, 0, 32, 16, 189, 0, 0, 16, 181, 132, 105, 0, 33, 52, ++ 34, 4, 241, 28, 0, 187, 243, 248, 240, 3, 75, 160, 104, 99, 98, 36, ++ 98, 195, 243, 26, 244, 0, 32, 16, 189, 53, 203, 128, 0, 45, 233, 243, ++ 71, 39, 77, 153, 70, 43, 104, 6, 70, 7, 43, 15, 70, 146, 70, 64, 220, ++ 5, 240, 8, 253, 128, 70, 80, 32, 194, 247, 248, 252, 4, 70, 0, 40, 58, ++ 208, 0, 33, 80, 34, 187, 243, 215, 240, 43, 104, 164, 248, 20, 144, ++ 132, 232, 72, 0, 39, 97, 196, 248, 12, 128, 32, 70, 65, 242, 228, 65, ++ 74, 70, 67, 70, 141, 232, 128, 4, 255, 247, 28, 254, 160, 96, 16, 179, ++ 0, 32, 10, 153, 11, 154, 19, 75, 141, 232, 64, 4, 254, 247, 28, 255, ++ 7, 70, 24, 177, 160, 104, 255, 247, 123, 255, 18, 224, 160, 104, 187, ++ 247, 185, 249, 43, 104, 160, 97, 15, 33, 11, 74, 48, 70, 187, 243, 18, ++ 241, 247, 115, 10, 72, 49, 70, 187, 243, 205, 240, 43, 104, 1, 51, 43, ++ 96, 2, 224, 0, 36, 0, 224, 4, 70, 32, 70, 189, 232, 252, 135, 0, 191, ++ 72, 110, 4, 0, 101, 203, 128, 0, 151, 137, 5, 0, 119, 137, 5, 0, 194, ++ 247, 175, 188, 45, 233, 240, 65, 27, 79, 152, 70, 59, 120, 5, 70, 7, ++ 43, 20, 70, 38, 216, 84, 32, 194, 247, 160, 252, 6, 70, 16, 179, 0, ++ 33, 84, 34, 187, 243, 128, 240, 59, 120, 0, 34, 134, 248, 68, 48, 1, ++ 51, 59, 112, 1, 35, 180, 96, 134, 232, 32, 1, 166, 248, 76, 32, 166, ++ 248, 80, 32, 166, 248, 78, 32, 166, 248, 82, 32, 179, 100, 4, 32, 194, ++ 247, 132, 252, 4, 70, 48, 100, 64, 177, 0, 33, 4, 34, 187, 243, 99, ++ 240, 0, 224, 0, 38, 48, 70, 189, 232, 240, 129, 48, 70, 194, 247, 120, ++ 252, 38, 70, 247, 231, 0, 191, 76, 110, 4, 0, 194, 107, 26, 177, 0, ++ 35, 83, 98, 130, 107, 83, 98, 192, 104, 255, 247, 185, 191, 0, 0, 5, ++ 74, 6, 75, 209, 126, 25, 112, 17, 127, 89, 112, 81, 127, 153, 112, 146, ++ 127, 218, 112, 112, 71, 0, 191, 180, 107, 6, 0, 0, 110, 4, 0, 45, 233, ++ 240, 79, 143, 176, 185, 247, 175, 254, 71, 78, 71, 77, 51, 104, 4, 144, ++ 5, 147, 43, 104, 179, 245, 128, 95, 0, 242, 129, 128, 68, 79, 68, 73, ++ 56, 104, 187, 243, 124, 246, 1, 40, 122, 208, 43, 104, 223, 248, 28, ++ 145, 3, 147, 217, 248, 0, 48, 0, 36, 6, 147, 223, 248, 16, 129, 35, ++ 104, 223, 248, 16, 161, 7, 147, 216, 248, 0, 48, 223, 248, 8, 177, 8, ++ 147, 218, 248, 0, 48, 56, 74, 9, 147, 219, 248, 0, 48, 215, 248, 0, ++ 192, 10, 147, 53, 75, 18, 104, 25, 104, 12, 146, 11, 145, 52, 73, 48, ++ 29, 9, 104, 3, 154, 13, 145, 97, 70, 205, 248, 8, 192, 1, 147, 185, ++ 247, 122, 252, 33, 70, 42, 104, 56, 104, 186, 243, 245, 247, 45, 74, ++ 1, 155, 202, 248, 0, 32, 40, 73, 41, 74, 4, 152, 28, 96, 20, 96, 12, ++ 96, 79, 240, 255, 50, 49, 26, 60, 96, 201, 248, 0, 64, 44, 96, 200, ++ 248, 0, 64, 203, 248, 0, 64, 187, 243, 98, 246, 5, 153, 1, 155, 202, ++ 67, 144, 66, 221, 248, 8, 192, 41, 209, 3, 154, 6, 153, 42, 96, 201, ++ 248, 0, 16, 33, 104, 28, 74, 199, 248, 0, 192, 17, 96, 7, 154, 8, 153, ++ 34, 96, 9, 154, 200, 248, 0, 16, 202, 248, 0, 32, 10, 153, 11, 154, ++ 203, 248, 0, 16, 26, 96, 15, 73, 12, 155, 3, 154, 11, 96, 13, 155, 15, ++ 73, 96, 70, 11, 96, 49, 29, 185, 247, 53, 252, 42, 104, 48, 29, 33, ++ 70, 15, 176, 189, 232, 240, 79, 186, 243, 173, 183, 254, 231, 254, 231, ++ 15, 176, 189, 232, 240, 143, 180, 107, 6, 0, 72, 93, 4, 0, 68, 93, 4, ++ 0, 230, 137, 5, 0, 212, 33, 0, 0, 208, 33, 0, 0, 216, 33, 0, 0, 221, ++ 186, 173, 187, 192, 33, 0, 0, 64, 93, 4, 0, 204, 33, 0, 0, 188, 33, ++ 0, 0, 200, 33, 0, 0, 112, 71, 0, 0, 119, 75, 45, 233, 240, 79, 27, 104, ++ 145, 176, 4, 59, 1, 43, 3, 216, 116, 75, 24, 104, 255, 247, 242, 255, ++ 254, 247, 84, 254, 0, 33, 4, 70, 198, 243, 150, 240, 32, 70, 0, 33, ++ 198, 243, 98, 240, 5, 70, 88, 177, 32, 70, 197, 243, 81, 247, 43, 106, ++ 0, 43, 5, 218, 32, 70, 197, 243, 75, 247, 79, 240, 0, 67, 43, 98, 187, ++ 247, 67, 254, 32, 70, 197, 243, 143, 244, 14, 169, 8, 34, 187, 243, ++ 243, 241, 2, 70, 32, 70, 212, 248, 64, 176, 11, 146, 197, 243, 98, 244, ++ 130, 70, 32, 70, 197, 243, 94, 244, 129, 70, 32, 70, 197, 243, 90, 244, ++ 128, 70, 32, 70, 197, 243, 178, 244, 7, 70, 32, 70, 197, 243, 174, 244, ++ 6, 70, 32, 70, 197, 243, 170, 244, 5, 70, 32, 70, 190, 243, 224, 241, ++ 1, 70, 32, 70, 12, 145, 190, 243, 219, 241, 132, 70, 32, 70, 205, 248, ++ 52, 192, 190, 243, 213, 241, 11, 154, 12, 153, 221, 248, 52, 192, 2, ++ 146, 8, 245, 66, 72, 74, 74, 5, 245, 66, 69, 0, 245, 66, 64, 10, 245, ++ 66, 74, 9, 245, 66, 73, 8, 245, 168, 120, 7, 245, 66, 71, 6, 245, 66, ++ 70, 5, 245, 168, 117, 1, 245, 66, 65, 12, 245, 66, 76, 0, 245, 168, ++ 112, 184, 251, 242, 248, 181, 251, 242, 245, 12, 245, 168, 124, 176, ++ 251, 242, 240, 10, 245, 168, 122, 9, 245, 168, 121, 7, 245, 168, 119, ++ 6, 245, 168, 118, 1, 245, 168, 113, 177, 251, 242, 241, 223, 248, 248, ++ 224, 186, 251, 242, 250, 2, 251, 24, 153, 183, 251, 242, 247, 2, 251, ++ 21, 102, 2, 251, 16, 194, 205, 248, 4, 224, 223, 248, 224, 224, 46, ++ 75, 178, 251, 254, 242, 185, 251, 254, 249, 182, 251, 254, 246, 8, 145, ++ 9, 146, 42, 73, 43, 74, 43, 72, 0, 147, 205, 248, 12, 176, 205, 248, ++ 16, 160, 205, 248, 20, 144, 6, 151, 7, 150, 186, 243, 2, 247, 38, 72, ++ 64, 246, 13, 1, 68, 242, 244, 50, 254, 247, 7, 253, 56, 177, 34, 72, ++ 64, 246, 41, 1, 68, 242, 244, 50, 254, 247, 255, 252, 32, 185, 31, 74, ++ 32, 75, 29, 77, 26, 96, 0, 224, 0, 37, 32, 70, 5, 240, 245, 253, 68, ++ 242, 24, 51, 79, 246, 255, 114, 144, 66, 20, 191, 2, 70, 26, 70, 64, ++ 246, 18, 1, 24, 72, 254, 247, 232, 252, 22, 73, 0, 40, 24, 191, 0, 33, ++ 77, 177, 65, 177, 18, 75, 40, 70, 27, 104, 91, 104, 152, 71, 43, 105, ++ 40, 70, 91, 104, 152, 71, 32, 70, 197, 243, 132, 246, 41, 70, 254, 247, ++ 159, 254, 32, 70, 17, 176, 189, 232, 240, 143, 0, 191, 216, 33, 0, 0, ++ 212, 33, 0, 0, 64, 66, 15, 0, 225, 137, 5, 0, 163, 137, 5, 0, 226, 137, ++ 5, 0, 168, 137, 5, 0, 84, 93, 4, 0, 128, 93, 4, 0, 188, 7, 0, 0, 196, ++ 98, 4, 0, 211, 22, 4, 0, 160, 134, 1, 0, 8, 70, 112, 71, 45, 233, 240, ++ 79, 209, 248, 252, 48, 145, 176, 11, 147, 3, 245, 96, 99, 4, 70, 9, ++ 147, 113, 225, 14, 34, 0, 35, 32, 70, 11, 169, 183, 243, 135, 247, 15, ++ 40, 7, 70, 32, 70, 2, 209, 183, 243, 31, 247, 108, 225, 0, 34, 11, 169, ++ 19, 70, 183, 243, 123, 247, 16, 240, 14, 15, 64, 240, 97, 129, 139, ++ 78, 58, 13, 62, 64, 64, 242, 59, 67, 54, 10, 0, 244, 248, 120, 154, ++ 66, 8, 146, 79, 234, 24, 24, 4, 209, 64, 246, 255, 115, 158, 66, 0, ++ 240, 74, 129, 0, 244, 120, 83, 79, 234, 83, 43, 0, 43, 0, 240, 67, 129, ++ 0, 244, 248, 42, 0, 244, 120, 3, 219, 12, 79, 234, 154, 58, 19, 235, ++ 10, 2, 7, 147, 37, 209, 64, 242, 103, 51, 158, 66, 20, 209, 12, 171, ++ 1, 147, 13, 171, 2, 147, 14, 171, 3, 147, 15, 171, 4, 147, 32, 70, 11, ++ 169, 19, 70, 0, 146, 183, 243, 225, 246, 0, 40, 0, 240, 35, 129, 12, ++ 155, 196, 248, 88, 51, 30, 225, 64, 242, 220, 83, 158, 66, 8, 208, 64, ++ 242, 11, 83, 158, 66, 4, 208, 64, 246, 39, 3, 158, 66, 64, 240, 18, ++ 129, 212, 248, 208, 80, 49, 70, 5, 241, 182, 3, 68, 248, 35, 112, 5, ++ 241, 198, 3, 68, 248, 35, 0, 32, 70, 255, 247, 133, 255, 4, 235, 133, ++ 3, 195, 248, 212, 0, 0, 39, 11, 224, 1, 34, 32, 70, 11, 169, 19, 70, ++ 183, 243, 19, 247, 0, 240, 14, 0, 2, 40, 64, 240, 248, 128, 1, 55, 71, ++ 69, 241, 209, 12, 171, 1, 147, 13, 171, 2, 147, 14, 171, 0, 39, 3, 147, ++ 15, 171, 4, 147, 32, 70, 11, 169, 58, 70, 59, 70, 0, 151, 183, 243, ++ 155, 246, 32, 177, 185, 70, 39, 224, 79, 240, 1, 9, 0, 224, 129, 70, ++ 64, 35, 0, 147, 12, 171, 1, 147, 13, 171, 2, 147, 14, 171, 3, 147, 0, ++ 34, 15, 171, 4, 147, 32, 70, 11, 169, 19, 70, 183, 243, 132, 246, 0, ++ 40, 233, 209, 185, 241, 1, 15, 14, 208, 13, 155, 0, 43, 64, 240, 197, ++ 128, 15, 155, 0, 43, 64, 240, 193, 128, 14, 154, 178, 245, 128, 95, ++ 64, 240, 188, 128, 153, 70, 219, 231, 12, 154, 4, 235, 133, 3, 195, ++ 248, 20, 33, 14, 154, 1, 39, 195, 248, 212, 33, 12, 171, 1, 147, 13, ++ 171, 2, 147, 14, 171, 3, 147, 15, 171, 0, 34, 4, 147, 32, 70, 11, 169, ++ 59, 70, 0, 146, 183, 243, 88, 246, 96, 177, 1, 47, 10, 209, 14, 155, ++ 179, 245, 128, 95, 6, 209, 12, 153, 4, 235, 133, 2, 194, 248, 148, 17, ++ 194, 248, 20, 50, 1, 55, 0, 40, 223, 209, 55, 70, 79, 240, 1, 8, 46, ++ 70, 23, 224, 0, 37, 0, 35, 0, 147, 12, 171, 1, 147, 13, 171, 2, 147, ++ 14, 171, 3, 147, 15, 171, 4, 147, 32, 70, 11, 169, 66, 70, 43, 70, 183, ++ 243, 49, 246, 8, 177, 1, 53, 236, 231, 0, 45, 117, 208, 8, 241, 1, 8, ++ 216, 69, 229, 209, 53, 70, 62, 70, 0, 39, 31, 224, 192, 35, 0, 147, ++ 12, 171, 1, 147, 13, 171, 2, 147, 14, 171, 3, 147, 15, 171, 4, 147, ++ 32, 70, 11, 169, 58, 70, 0, 35, 183, 243, 20, 246, 0, 40, 91, 208, 15, ++ 155, 0, 43, 88, 209, 14, 155, 179, 245, 128, 95, 84, 209, 39, 185, 12, ++ 154, 5, 241, 166, 3, 68, 248, 35, 32, 1, 55, 87, 69, 221, 209, 0, 39, ++ 57, 224, 0, 255, 15, 0, 128, 35, 0, 147, 12, 171, 1, 147, 13, 171, 2, ++ 147, 14, 171, 3, 147, 15, 171, 187, 241, 1, 15, 12, 191, 58, 70, 122, ++ 28, 4, 147, 32, 70, 0, 35, 11, 169, 183, 243, 234, 245, 8, 154, 64, ++ 242, 59, 67, 154, 66, 13, 209, 64, 242, 53, 19, 158, 66, 9, 209, 212, ++ 248, 112, 51, 12, 153, 4, 235, 131, 2, 1, 51, 194, 248, 116, 19, 196, ++ 248, 112, 51, 248, 177, 15, 155, 235, 185, 14, 155, 179, 245, 128, 95, ++ 25, 209, 186, 241, 0, 15, 5, 209, 39, 185, 12, 154, 5, 241, 166, 3, ++ 68, 248, 35, 32, 1, 55, 7, 155, 159, 66, 196, 209, 185, 241, 0, 15, ++ 4, 209, 212, 248, 208, 48, 1, 51, 196, 248, 208, 48, 11, 155, 9, 154, ++ 147, 66, 255, 244, 137, 174, 0, 35, 196, 248, 208, 48, 17, 176, 189, ++ 232, 240, 143, 16, 181, 208, 248, 112, 35, 0, 35, 6, 224, 208, 248, ++ 112, 19, 79, 244, 76, 116, 193, 248, 0, 73, 1, 51, 4, 48, 147, 66, 245, ++ 209, 16, 189, 45, 233, 248, 67, 0, 39, 4, 70, 21, 70, 153, 70, 14, 70, ++ 184, 70, 9, 224, 48, 70, 0, 33, 4, 34, 186, 243, 218, 244, 1, 55, 198, ++ 248, 0, 128, 176, 70, 118, 25, 79, 69, 243, 219, 196, 248, 0, 128, 189, ++ 232, 248, 131, 112, 181, 13, 70, 4, 70, 216, 177, 209, 177, 14, 104, ++ 198, 177, 179, 137, 203, 185, 115, 138, 3, 240, 3, 3, 1, 43, 3, 209, ++ 240, 105, 8, 177, 194, 247, 218, 248, 115, 138, 32, 29, 35, 240, 4, ++ 3, 115, 130, 49, 70, 185, 243, 69, 246, 35, 137, 0, 32, 1, 59, 35, 129, ++ 40, 96, 112, 189, 111, 240, 1, 0, 112, 189, 111, 240, 15, 0, 112, 189, ++ 45, 233, 247, 79, 12, 159, 1, 145, 22, 70, 154, 70, 221, 248, 52, 176, ++ 189, 248, 56, 144, 5, 70, 0, 40, 87, 208, 15, 155, 0, 43, 84, 208, 0, ++ 41, 82, 208, 0, 42, 80, 208, 187, 241, 0, 15, 77, 208, 155, 248, 0, ++ 48, 0, 43, 73, 208, 0, 241, 4, 8, 64, 70, 185, 243, 37, 246, 4, 70, ++ 0, 40, 68, 208, 185, 241, 1, 15, 11, 209, 87, 185, 6, 251, 10, 240, ++ 194, 247, 152, 248, 7, 70, 56, 185, 64, 70, 33, 70, 185, 243, 8, 246, ++ 53, 224, 79, 240, 0, 8, 0, 224, 128, 70, 0, 33, 36, 34, 32, 70, 186, ++ 243, 110, 244, 1, 155, 8, 34, 163, 96, 99, 138, 32, 70, 35, 240, 3, ++ 3, 73, 234, 3, 3, 67, 240, 4, 3, 99, 130, 89, 70, 186, 243, 63, 245, ++ 0, 35, 185, 241, 1, 15, 227, 113, 12, 209, 164, 248, 20, 160, 196, 248, ++ 28, 128, 166, 97, 4, 241, 32, 0, 57, 70, 50, 70, 83, 70, 255, 247, 102, ++ 255, 1, 224, 235, 104, 99, 97, 43, 137, 0, 32, 1, 51, 43, 129, 15, 155, ++ 28, 96, 4, 224, 111, 240, 1, 0, 1, 224, 111, 240, 26, 0, 189, 232, 254, ++ 143, 45, 233, 248, 67, 7, 70, 14, 70, 21, 70, 0, 42, 45, 208, 0, 40, ++ 43, 208, 0, 41, 41, 221, 16, 32, 194, 247, 73, 248, 4, 70, 64, 179, ++ 0, 33, 16, 34, 186, 243, 41, 244, 231, 96, 36, 39, 7, 251, 6, 249, 102, ++ 129, 72, 70, 194, 247, 59, 248, 128, 70, 48, 185, 32, 70, 194, 247, ++ 57, 248, 111, 240, 26, 0, 189, 232, 248, 131, 0, 33, 74, 70, 186, 243, ++ 20, 244, 32, 70, 64, 248, 4, 139, 65, 70, 58, 70, 51, 70, 255, 247, ++ 36, 255, 44, 96, 0, 32, 189, 232, 248, 131, 111, 240, 1, 0, 189, 232, ++ 248, 131, 111, 240, 26, 0, 189, 232, 248, 131, 112, 181, 6, 70, 96, ++ 177, 4, 104, 84, 177, 37, 137, 93, 185, 32, 104, 194, 247, 19, 248, ++ 32, 70, 194, 247, 16, 248, 53, 96, 40, 70, 112, 189, 111, 240, 1, 0, ++ 112, 189, 111, 240, 15, 0, 112, 189, 255, 247, 25, 191, 31, 181, 0, ++ 36, 1, 146, 3, 147, 10, 70, 35, 70, 0, 148, 2, 148, 255, 247, 53, 255, ++ 4, 176, 16, 189, 255, 247, 11, 191, 81, 177, 3, 41, 2, 216, 4, 35, 19, ++ 96, 3, 224, 3, 49, 33, 240, 3, 1, 17, 96, 0, 32, 112, 71, 111, 240, ++ 1, 0, 112, 71, 45, 233, 240, 65, 134, 176, 5, 70, 12, 70, 30, 70, 221, ++ 248, 48, 128, 23, 70, 18, 179, 27, 177, 184, 241, 0, 15, 3, 209, 29, ++ 224, 184, 241, 0, 15, 26, 209, 40, 70, 33, 70, 5, 170, 255, 247, 218, ++ 255, 176, 185, 46, 177, 5, 155, 123, 67, 152, 69, 15, 211, 179, 7, 13, ++ 209, 13, 155, 40, 70, 1, 147, 1, 35, 2, 147, 14, 155, 33, 70, 3, 147, ++ 5, 154, 59, 70, 0, 150, 255, 247, 246, 254, 1, 224, 111, 240, 1, 0, ++ 6, 176, 189, 232, 240, 129, 16, 181, 4, 70, 144, 177, 195, 104, 35, ++ 177, 64, 104, 4, 241, 12, 1, 255, 247, 165, 255, 163, 104, 35, 177, ++ 96, 104, 4, 241, 8, 1, 255, 247, 158, 255, 32, 70, 189, 232, 16, 64, ++ 193, 247, 160, 191, 16, 189, 45, 233, 255, 65, 7, 70, 16, 32, 13, 70, ++ 22, 70, 152, 70, 193, 247, 147, 255, 4, 70, 248, 177, 0, 33, 16, 34, ++ 186, 243, 115, 243, 18, 74, 39, 96, 101, 96, 1, 146, 4, 241, 8, 2, 0, ++ 35, 2, 146, 40, 70, 12, 33, 50, 70, 0, 147, 255, 247, 154, 255, 3, 70, ++ 88, 185, 11, 74, 0, 144, 1, 146, 4, 241, 12, 2, 2, 146, 40, 70, 12, ++ 33, 66, 70, 255, 247, 141, 255, 24, 177, 32, 70, 255, 247, 187, 255, ++ 0, 36, 32, 70, 4, 176, 189, 232, 240, 129, 0, 191, 244, 137, 5, 0, 236, ++ 137, 5, 0, 255, 247, 175, 191, 128, 105, 112, 71, 0, 138, 64, 0, 112, ++ 71, 0, 0, 128, 138, 203, 105, 178, 251, 240, 243, 0, 251, 19, 34, 210, ++ 178, 66, 240, 0, 66, 27, 6, 66, 234, 19, 67, 139, 97, 0, 35, 0, 224, ++ 1, 51, 136, 105, 9, 74, 0, 40, 2, 218, 147, 66, 248, 209, 6, 224, 147, ++ 66, 4, 208, 195, 0, 5, 212, 192, 243, 64, 112, 112, 71, 79, 246, 255, ++ 112, 112, 71, 79, 246, 255, 112, 112, 71, 128, 150, 152, 0, 16, 181, ++ 132, 104, 0, 35, 100, 105, 75, 97, 48, 44, 196, 191, 209, 248, 244, ++ 48, 3, 244, 126, 3, 193, 248, 244, 48, 189, 232, 16, 64, 255, 247, 201, ++ 191, 45, 233, 240, 65, 0, 36, 128, 70, 15, 70, 22, 1, 37, 70, 64, 70, ++ 57, 70, 170, 25, 255, 247, 227, 255, 79, 246, 255, 115, 152, 66, 6, ++ 208, 168, 64, 1, 53, 4, 67, 16, 45, 164, 178, 240, 209, 0, 224, 4, 70, ++ 32, 70, 189, 232, 240, 129, 191, 35, 11, 128, 255, 35, 19, 128, 112, ++ 71, 1, 57, 6, 41, 29, 216, 223, 232, 1, 240, 4, 10, 28, 28, 16, 28, ++ 23, 0, 32, 35, 67, 130, 64, 35, 131, 130, 128, 35, 16, 224, 64, 35, ++ 67, 130, 131, 130, 79, 244, 128, 115, 10, 224, 96, 35, 67, 130, 64, ++ 35, 131, 130, 79, 244, 192, 115, 3, 224, 16, 35, 67, 130, 64, 35, 131, ++ 130, 3, 130, 0, 32, 112, 71, 1, 57, 10, 41, 25, 216, 223, 232, 1, 240, ++ 6, 8, 10, 12, 14, 24, 16, 24, 24, 24, 19, 0, 64, 35, 12, 224, 96, 35, ++ 10, 224, 128, 35, 8, 224, 160, 35, 6, 224, 192, 35, 4, 224, 79, 244, ++ 128, 115, 1, 224, 79, 244, 192, 115, 67, 130, 32, 35, 131, 130, 131, ++ 138, 66, 138, 83, 67, 27, 17, 3, 130, 0, 32, 112, 71, 111, 240, 22, ++ 0, 112, 71, 112, 181, 4, 70, 5, 138, 128, 104, 197, 243, 57, 240, 0, ++ 33, 6, 70, 160, 104, 197, 243, 130, 243, 162, 104, 83, 105, 34, 43, ++ 5, 221, 195, 108, 155, 5, 155, 13, 7, 51, 219, 8, 163, 133, 16, 70, ++ 49, 70, 197, 243, 116, 243, 163, 141, 109, 0, 232, 26, 2, 56, 112, 189, ++ 112, 181, 4, 70, 128, 104, 13, 70, 22, 70, 197, 243, 50, 242, 48, 177, ++ 32, 70, 41, 70, 50, 70, 189, 232, 112, 64, 255, 247, 105, 191, 6, 245, ++ 128, 102, 53, 248, 22, 0, 128, 178, 112, 189, 248, 181, 4, 70, 128, ++ 104, 22, 70, 15, 70, 197, 243, 5, 240, 0, 33, 5, 70, 160, 104, 197, ++ 243, 78, 243, 58, 70, 1, 70, 32, 70, 255, 247, 218, 255, 41, 70, 48, ++ 128, 160, 104, 197, 243, 68, 243, 0, 32, 248, 189, 1, 57, 45, 233, 248, ++ 79, 4, 70, 145, 70, 30, 70, 14, 41, 113, 216, 223, 232, 1, 240, 8, 24, ++ 112, 40, 112, 112, 112, 52, 112, 112, 112, 112, 112, 112, 59, 0, 144, ++ 248, 46, 32, 131, 139, 10, 177, 197, 140, 0, 224, 197, 139, 237, 26, ++ 163, 105, 217, 5, 46, 213, 51, 104, 171, 66, 51, 211, 167, 139, 54, ++ 224, 144, 248, 46, 32, 3, 140, 10, 177, 197, 140, 0, 224, 69, 140, 237, ++ 26, 163, 105, 154, 5, 30, 213, 51, 104, 171, 66, 35, 211, 39, 140, 38, ++ 224, 131, 105, 79, 240, 2, 5, 19, 244, 128, 111, 19, 208, 51, 104, 1, ++ 43, 24, 217, 135, 106, 2, 55, 26, 224, 135, 140, 197, 140, 131, 105, ++ 237, 27, 19, 244, 0, 111, 5, 224, 135, 139, 197, 140, 131, 105, 237, ++ 27, 19, 244, 64, 127, 4, 209, 53, 96, 111, 240, 29, 0, 189, 232, 248, ++ 143, 51, 104, 171, 66, 4, 210, 53, 96, 111, 240, 13, 0, 189, 232, 248, ++ 143, 160, 104, 196, 243, 152, 247, 0, 33, 131, 70, 160, 104, 197, 243, ++ 225, 242, 79, 240, 0, 8, 130, 70, 9, 224, 8, 235, 7, 2, 32, 70, 81, ++ 70, 255, 247, 104, 255, 8, 241, 1, 8, 41, 248, 2, 11, 168, 69, 243, ++ 209, 160, 104, 89, 70, 197, 243, 205, 242, 198, 248, 0, 128, 0, 32, ++ 189, 232, 248, 143, 111, 240, 1, 0, 189, 232, 248, 143, 115, 181, 0, ++ 35, 173, 248, 4, 48, 173, 248, 6, 48, 131, 104, 4, 70, 91, 105, 13, ++ 70, 39, 43, 5, 221, 203, 105, 27, 5, 27, 13, 27, 17, 4, 59, 6, 224, ++ 27, 43, 6, 216, 79, 244, 146, 98, 154, 64, 2, 213, 12, 35, 131, 98, ++ 14, 224, 36, 43, 1, 208, 39, 43, 4, 209, 35, 138, 127, 43, 5, 216, 12, ++ 35, 4, 224, 23, 43, 1, 208, 24, 43, 1, 221, 20, 35, 163, 98, 235, 105, ++ 3, 244, 224, 35, 179, 245, 128, 63, 14, 208, 79, 240, 4, 67, 171, 97, ++ 0, 35, 0, 224, 1, 51, 170, 105, 0, 42, 46, 74, 2, 218, 147, 66, 248, ++ 209, 87, 224, 147, 66, 85, 208, 43, 105, 162, 106, 163, 97, 3, 50, 32, ++ 70, 41, 70, 255, 247, 14, 255, 40, 75, 162, 105, 0, 9, 3, 64, 19, 67, ++ 163, 97, 3, 244, 64, 115, 0, 34, 179, 245, 64, 127, 132, 248, 46, 32, ++ 2, 209, 1, 35, 132, 248, 46, 48, 163, 106, 13, 241, 6, 2, 4, 51, 163, ++ 131, 35, 138, 32, 70, 227, 131, 227, 132, 1, 169, 255, 247, 132, 254, ++ 189, 248, 6, 32, 189, 248, 4, 48, 214, 26, 182, 178, 22, 177, 227, 131, ++ 99, 132, 162, 132, 163, 105, 219, 5, 10, 213, 32, 70, 41, 70, 162, 106, ++ 255, 247, 223, 254, 0, 9, 128, 178, 0, 177, 224, 131, 227, 139, 0, 224, ++ 163, 139, 35, 132, 174, 185, 32, 70, 255, 247, 181, 254, 163, 105, 0, ++ 235, 208, 112, 64, 16, 96, 132, 152, 5, 9, 213, 162, 106, 32, 70, 41, ++ 70, 1, 50, 255, 247, 198, 254, 0, 9, 96, 132, 160, 132, 1, 224, 35, ++ 140, 163, 132, 124, 189, 128, 150, 152, 0, 0, 255, 255, 0, 248, 181, ++ 67, 105, 5, 70, 21, 43, 1, 208, 22, 43, 60, 221, 40, 70, 197, 243, 222, ++ 240, 6, 70, 0, 40, 54, 209, 40, 70, 197, 243, 218, 240, 0, 40, 51, 208, ++ 40, 70, 196, 243, 199, 246, 49, 70, 7, 70, 40, 70, 197, 243, 16, 242, ++ 6, 70, 191, 247, 27, 252, 107, 105, 4, 70, 48, 43, 4, 221, 241, 105, ++ 1, 244, 112, 65, 9, 11, 3, 224, 169, 105, 1, 244, 96, 17, 201, 12, 145, ++ 177, 243, 105, 3, 244, 224, 35, 27, 12, 1, 43, 3, 209, 32, 70, 255, ++ 247, 66, 254, 3, 224, 19, 185, 32, 70, 255, 247, 26, 254, 32, 70, 49, ++ 70, 255, 247, 41, 255, 0, 224, 12, 70, 40, 70, 57, 70, 197, 243, 231, ++ 241, 2, 224, 0, 36, 0, 224, 4, 70, 32, 70, 248, 189, 8, 181, 67, 104, ++ 219, 104, 152, 71, 8, 189, 8, 181, 67, 104, 27, 104, 152, 71, 8, 189, ++ 115, 181, 0, 38, 4, 70, 1, 150, 191, 247, 223, 251, 76, 34, 49, 70, ++ 5, 70, 186, 243, 224, 240, 99, 105, 21, 43, 43, 96, 1, 208, 22, 43, ++ 2, 217, 191, 247, 214, 251, 104, 96, 107, 104, 211, 177, 172, 96, 32, ++ 70, 197, 243, 177, 240, 232, 96, 32, 70, 197, 243, 121, 240, 6, 70, ++ 32, 185, 32, 70, 1, 33, 1, 170, 197, 243, 168, 240, 107, 104, 32, 70, ++ 27, 105, 152, 71, 5, 70, 54, 185, 32, 70, 49, 70, 1, 170, 197, 243, ++ 157, 240, 0, 224, 29, 70, 40, 70, 124, 189, 45, 233, 247, 67, 153, 70, ++ 0, 35, 4, 70, 15, 70, 144, 70, 1, 147, 197, 243, 89, 240, 5, 70, 32, ++ 185, 32, 70, 1, 33, 1, 170, 197, 243, 136, 240, 32, 70, 197, 243, 79, ++ 240, 120, 177, 32, 70, 197, 243, 73, 240, 88, 185, 32, 70, 255, 247, ++ 176, 255, 80, 177, 67, 104, 57, 70, 94, 105, 66, 70, 75, 70, 176, 71, ++ 6, 70, 4, 224, 111, 240, 24, 6, 1, 224, 79, 240, 255, 54, 37, 185, 32, ++ 70, 41, 70, 1, 170, 197, 243, 105, 240, 48, 70, 189, 232, 254, 131, ++ 130, 96, 65, 96, 1, 96, 112, 71, 45, 233, 240, 65, 84, 26, 1, 44, 15, ++ 70, 30, 70, 6, 157, 14, 221, 32, 70, 193, 247, 143, 252, 128, 70, 112, ++ 177, 57, 70, 34, 70, 184, 247, 239, 252, 198, 248, 0, 128, 0, 32, 44, ++ 96, 189, 232, 240, 129, 0, 32, 24, 96, 40, 96, 189, 232, 240, 129, 111, ++ 240, 26, 0, 189, 232, 240, 129, 14, 180, 243, 181, 129, 104, 4, 70, ++ 1, 41, 69, 217, 8, 171, 64, 104, 7, 154, 1, 147, 186, 243, 170, 241, ++ 67, 28, 6, 70, 3, 208, 163, 104, 2, 59, 152, 66, 2, 221, 0, 32, 160, ++ 96, 54, 224, 96, 104, 61, 33, 186, 243, 196, 240, 64, 179, 103, 104, ++ 37, 104, 199, 27, 33, 224, 40, 70, 58, 70, 184, 247, 170, 252, 176, ++ 185, 235, 93, 61, 43, 19, 209, 40, 70, 186, 243, 234, 240, 98, 104, ++ 71, 28, 115, 28, 219, 27, 82, 27, 233, 25, 210, 24, 40, 70, 186, 243, ++ 8, 240, 99, 104, 219, 27, 99, 96, 163, 104, 223, 25, 167, 96, 8, 224, ++ 43, 70, 19, 248, 1, 43, 29, 70, 0, 42, 250, 209, 97, 104, 141, 66, 218, ++ 211, 163, 104, 112, 28, 27, 26, 163, 96, 99, 104, 27, 24, 99, 96, 0, ++ 224, 0, 32, 189, 232, 252, 64, 3, 176, 112, 71, 0, 0, 45, 233, 240, ++ 79, 187, 176, 26, 144, 25, 145, 27, 146, 24, 147, 0, 43, 2, 240, 30, ++ 135, 79, 244, 128, 80, 193, 247, 26, 252, 18, 144, 0, 40, 2, 240, 22, ++ 135, 55, 168, 18, 153, 79, 244, 128, 82, 255, 247, 114, 255, 0, 33, ++ 79, 244, 128, 82, 18, 152, 185, 243, 240, 247, 24, 154, 17, 104, 217, ++ 177, 11, 120, 203, 177, 68, 154, 19, 104, 2, 43, 3, 216, 20, 224, 1, ++ 58, 2, 96, 0, 224, 68, 152, 2, 104, 139, 24, 19, 248, 1, 76, 28, 185, ++ 19, 248, 2, 60, 0, 43, 242, 208, 18, 152, 184, 247, 86, 252, 68, 153, ++ 56, 154, 11, 104, 211, 24, 56, 147, 0, 35, 141, 248, 156, 48, 79, 240, ++ 255, 50, 21, 147, 19, 147, 1, 35, 17, 146, 22, 147, 2, 240, 170, 190, ++ 25, 153, 1, 34, 81, 248, 4, 107, 0, 35, 25, 145, 23, 146, 20, 147, 23, ++ 153, 73, 177, 242, 92, 95, 28, 16, 146, 1, 58, 210, 178, 253, 42, 15, ++ 216, 245, 93, 159, 28, 13, 224, 241, 92, 74, 30, 210, 178, 253, 42, ++ 16, 145, 3, 216, 128, 34, 13, 70, 16, 146, 0, 224, 23, 157, 95, 28, ++ 0, 224, 0, 37, 123, 25, 179, 245, 96, 127, 130, 242, 128, 134, 16, 155, ++ 32, 43, 40, 208, 5, 216, 21, 43, 11, 208, 27, 43, 66, 240, 114, 134, ++ 100, 224, 16, 153, 34, 41, 53, 208, 48, 211, 128, 41, 66, 240, 106, ++ 134, 103, 224, 243, 25, 90, 120, 243, 93, 18, 2, 211, 24, 7, 43, 18, ++ 221, 188, 28, 52, 25, 34, 70, 219, 73, 55, 168, 255, 247, 30, 255, 32, ++ 70, 186, 243, 47, 240, 250, 28, 18, 24, 216, 73, 55, 168, 178, 24, 255, ++ 247, 20, 255, 2, 240, 79, 190, 244, 25, 98, 120, 243, 93, 18, 2, 210, ++ 24, 55, 168, 210, 73, 255, 247, 9, 255, 227, 120, 162, 120, 27, 2, 55, ++ 168, 208, 73, 154, 24, 255, 247, 1, 255, 2, 240, 60, 190, 242, 93, 20, ++ 146, 2, 240, 56, 190, 20, 155, 12, 43, 2, 240, 47, 134, 157, 248, 156, ++ 48, 0, 43, 66, 240, 47, 134, 243, 93, 4, 43, 66, 240, 43, 134, 7, 241, ++ 2, 8, 6, 235, 8, 4, 32, 70, 191, 247, 3, 252, 0, 40, 66, 240, 33, 134, ++ 22, 248, 8, 48, 219, 7, 2, 241, 28, 134, 39, 169, 32, 70, 186, 243, ++ 39, 242, 17, 153, 1, 49, 66, 240, 20, 134, 243, 25, 154, 121, 219, 121, ++ 18, 2, 211, 24, 17, 147, 2, 240, 12, 190, 243, 25, 218, 121, 155, 121, ++ 55, 168, 180, 73, 67, 234, 2, 34, 255, 247, 198, 254, 2, 240, 1, 190, ++ 243, 93, 244, 25, 143, 43, 2, 242, 252, 133, 1, 162, 82, 248, 35, 240, ++ 77, 159, 4, 0, 157, 159, 4, 0, 149, 160, 4, 0, 77, 165, 4, 0, 41, 167, ++ 4, 0, 13, 165, 4, 0, 139, 164, 4, 0, 169, 164, 4, 0, 187, 160, 4, 0, ++ 81, 167, 4, 0, 197, 167, 4, 0, 237, 167, 4, 0, 1, 168, 4, 0, 207, 200, ++ 4, 0, 115, 166, 4, 0, 243, 164, 4, 0, 47, 164, 4, 0, 153, 168, 4, 0, ++ 217, 168, 4, 0, 95, 159, 4, 0, 25, 169, 4, 0, 39, 169, 4, 0, 73, 169, ++ 4, 0, 87, 169, 4, 0, 31, 160, 4, 0, 101, 169, 4, 0, 207, 200, 4, 0, ++ 61, 161, 4, 0, 163, 169, 4, 0, 81, 161, 4, 0, 207, 200, 4, 0, 207, 200, ++ 4, 0, 207, 200, 4, 0, 185, 169, 4, 0, 253, 169, 4, 0, 17, 170, 4, 0, ++ 53, 171, 4, 0, 249, 172, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 157, ++ 174, 4, 0, 61, 159, 4, 0, 45, 159, 4, 0, 29, 159, 4, 0, 23, 176, 4, ++ 0, 43, 176, 4, 0, 63, 176, 4, 0, 83, 176, 4, 0, 207, 200, 4, 0, 33, ++ 168, 4, 0, 47, 161, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 45, 160, 4, ++ 0, 31, 179, 4, 0, 103, 176, 4, 0, 225, 169, 4, 0, 239, 169, 4, 0, 45, ++ 179, 4, 0, 149, 192, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, 200, ++ 4, 0, 207, 200, 4, 0, 93, 161, 4, 0, 191, 176, 4, 0, 233, 176, 4, 0, ++ 43, 177, 4, 0, 105, 177, 4, 0, 167, 177, 4, 0, 229, 177, 4, 0, 35, 178, ++ 4, 0, 97, 178, 4, 0, 117, 178, 4, 0, 207, 200, 4, 0, 5, 162, 4, 0, 207, ++ 200, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 15, 164, 4, 0, 113, 161, ++ 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, ++ 233, 192, 4, 0, 207, 200, 4, 0, 67, 164, 4, 0, 163, 179, 4, 0, 115, ++ 180, 4, 0, 201, 181, 4, 0, 179, 182, 4, 0, 157, 183, 4, 0, 215, 183, ++ 4, 0, 95, 184, 4, 0, 173, 184, 4, 0, 187, 185, 4, 0, 69, 187, 4, 0, ++ 241, 187, 4, 0, 157, 188, 4, 0, 7, 193, 4, 0, 179, 162, 4, 0, 115, 163, ++ 4, 0, 233, 188, 4, 0, 37, 190, 4, 0, 49, 191, 4, 0, 61, 192, 4, 0, 77, ++ 193, 4, 0, 39, 195, 4, 0, 95, 193, 4, 0, 125, 193, 4, 0, 155, 193, 4, ++ 0, 185, 193, 4, 0, 203, 193, 4, 0, 221, 193, 4, 0, 239, 193, 4, 0, 1, ++ 194, 4, 0, 107, 194, 4, 0, 119, 194, 4, 0, 131, 194, 4, 0, 167, 200, ++ 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, ++ 207, 200, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, ++ 200, 4, 0, 137, 178, 4, 0, 253, 178, 4, 0, 207, 200, 4, 0, 207, 200, ++ 4, 0, 121, 195, 4, 0, 225, 195, 4, 0, 103, 196, 4, 0, 237, 196, 4, 0, ++ 25, 198, 4, 0, 43, 198, 4, 0, 55, 198, 4, 0, 97, 198, 4, 0, 89, 199, ++ 4, 0, 81, 200, 4, 0, 79, 234, 149, 10, 95, 250, 138, 250, 79, 240, 0, ++ 8, 1, 240, 62, 184, 79, 234, 85, 9, 95, 250, 137, 249, 79, 240, 0, 8, ++ 1, 240, 7, 184, 79, 234, 85, 9, 95, 250, 137, 249, 79, 240, 0, 8, 0, ++ 240, 237, 191, 100, 120, 55, 168, 16, 73, 34, 70, 22, 148, 255, 247, ++ 125, 253, 2, 240, 184, 188, 227, 120, 34, 121, 27, 4, 67, 234, 2, 99, ++ 98, 120, 55, 168, 19, 67, 162, 120, 9, 73, 67, 234, 2, 34, 255, 247, ++ 109, 253, 2, 240, 168, 188, 0, 191, 66, 151, 5, 0, 105, 140, 5, 0, 155, ++ 146, 5, 0, 216, 141, 5, 0, 167, 149, 5, 0, 144, 151, 5, 0, 152, 147, ++ 5, 0, 162, 120, 99, 120, 18, 2, 210, 24, 155, 73, 55, 168, 255, 247, ++ 84, 253, 34, 121, 227, 120, 18, 2, 55, 168, 152, 73, 210, 24, 255, 247, ++ 76, 253, 6, 45, 66, 242, 134, 132, 162, 121, 99, 121, 18, 2, 55, 168, ++ 148, 73, 210, 24, 255, 247, 65, 253, 8, 45, 66, 242, 123, 132, 35, 122, ++ 226, 121, 27, 2, 55, 168, 143, 73, 154, 24, 255, 247, 54, 253, 10, 45, ++ 66, 242, 112, 132, 7, 241, 10, 8, 7, 241, 9, 4, 22, 248, 8, 32, 51, ++ 93, 18, 2, 210, 24, 55, 168, 136, 73, 255, 247, 38, 253, 22, 248, 8, ++ 48, 50, 93, 27, 2, 55, 168, 133, 73, 154, 24, 255, 247, 29, 253, 2, ++ 240, 88, 188, 163, 120, 98, 120, 27, 2, 154, 24, 17, 146, 2, 240, 81, ++ 188, 127, 75, 6, 34, 181, 251, 242, 242, 26, 112, 79, 240, 0, 8, 153, ++ 70, 36, 224, 67, 70, 16, 33, 123, 74, 29, 168, 185, 243, 203, 245, 67, ++ 70, 16, 33, 121, 74, 47, 168, 185, 243, 197, 245, 99, 120, 162, 120, ++ 29, 169, 67, 234, 2, 34, 55, 168, 255, 247, 247, 252, 99, 121, 162, ++ 121, 27, 4, 67, 234, 2, 99, 226, 120, 55, 168, 19, 67, 34, 121, 47, ++ 169, 67, 234, 2, 34, 255, 247, 233, 252, 8, 241, 1, 8, 6, 52, 153, 248, ++ 0, 48, 152, 69, 214, 219, 2, 240, 29, 188, 2, 45, 6, 209, 55, 168, 103, ++ 73, 98, 120, 255, 247, 217, 252, 2, 240, 20, 188, 163, 120, 98, 120, ++ 27, 2, 55, 168, 98, 73, 154, 24, 255, 247, 207, 252, 2, 240, 10, 188, ++ 162, 120, 99, 120, 18, 2, 4, 45, 26, 68, 5, 217, 35, 121, 225, 120, ++ 27, 6, 9, 4, 91, 24, 26, 67, 55, 168, 89, 73, 255, 247, 189, 252, 6, ++ 45, 66, 242, 247, 131, 243, 25, 154, 121, 89, 121, 18, 2, 8, 45, 10, ++ 68, 5, 217, 25, 122, 219, 121, 9, 6, 27, 4, 201, 24, 10, 67, 55, 168, ++ 80, 73, 255, 247, 169, 252, 10, 45, 66, 242, 227, 131, 243, 25, 154, ++ 122, 89, 122, 18, 2, 12, 45, 10, 68, 5, 217, 25, 123, 219, 122, 9, 6, ++ 27, 4, 201, 24, 10, 67, 55, 168, 71, 73, 255, 247, 149, 252, 2, 240, ++ 208, 187, 55, 168, 69, 73, 98, 120, 255, 247, 142, 252, 2, 240, 201, ++ 187, 163, 120, 98, 120, 27, 2, 55, 168, 56, 73, 154, 24, 255, 247, 132, ++ 252, 2, 240, 191, 187, 1, 53, 0, 35, 237, 178, 23, 147, 2, 240, 185, ++ 187, 163, 120, 98, 120, 55, 168, 58, 73, 66, 234, 3, 34, 255, 247, 116, ++ 252, 2, 240, 175, 187, 148, 248, 3, 160, 35, 121, 79, 234, 10, 74, 74, ++ 234, 3, 106, 99, 120, 181, 241, 5, 11, 74, 234, 3, 10, 72, 191, 165, ++ 241, 2, 11, 163, 120, 79, 234, 171, 11, 74, 234, 3, 42, 95, 250, 139, ++ 251, 79, 240, 0, 8, 36, 224, 67, 68, 16, 33, 34, 74, 47, 168, 185, 243, ++ 25, 245, 153, 248, 0, 48, 16, 33, 67, 68, 31, 74, 29, 168, 185, 243, ++ 17, 245, 82, 70, 47, 169, 55, 168, 255, 247, 70, 252, 227, 120, 34, ++ 121, 27, 4, 67, 234, 2, 99, 98, 120, 55, 168, 19, 67, 162, 120, 29, ++ 169, 67, 234, 2, 34, 255, 247, 56, 252, 10, 241, 4, 10, 8, 241, 1, 8, ++ 223, 248, 60, 144, 4, 52, 216, 69, 153, 248, 0, 48, 211, 219, 155, 68, ++ 137, 248, 0, 176, 2, 240, 101, 187, 9, 75, 234, 8, 26, 112, 79, 240, ++ 0, 8, 153, 70, 73, 224, 0, 191, 198, 144, 5, 0, 190, 151, 5, 0, 242, ++ 141, 5, 0, 241, 138, 5, 0, 236, 147, 5, 0, 99, 147, 5, 0, 156, 110, ++ 4, 0, 120, 27, 4, 0, 131, 27, 4, 0, 131, 150, 5, 0, 61, 145, 5, 0, 135, ++ 141, 5, 0, 152, 141, 5, 0, 141, 142, 5, 0, 19, 145, 5, 0, 67, 70, 16, ++ 33, 177, 74, 29, 168, 185, 243, 194, 244, 67, 70, 16, 33, 175, 74, 47, ++ 168, 185, 243, 188, 244, 227, 120, 34, 121, 27, 4, 67, 234, 2, 99, 98, ++ 120, 29, 169, 19, 67, 162, 120, 55, 168, 67, 234, 2, 34, 255, 247, 232, ++ 251, 227, 121, 34, 122, 27, 4, 67, 234, 2, 99, 98, 121, 55, 168, 19, ++ 67, 162, 121, 47, 169, 67, 234, 2, 34, 255, 247, 218, 251, 8, 241, 1, ++ 8, 8, 52, 153, 248, 0, 48, 152, 69, 208, 219, 2, 240, 14, 187, 148, ++ 248, 3, 160, 35, 121, 79, 234, 10, 74, 74, 234, 3, 106, 99, 120, 181, ++ 241, 5, 11, 74, 234, 3, 10, 72, 191, 5, 241, 2, 11, 163, 120, 79, 234, ++ 235, 11, 74, 234, 3, 42, 95, 250, 139, 251, 79, 240, 0, 8, 59, 224, ++ 67, 68, 16, 33, 140, 74, 47, 168, 185, 243, 120, 244, 153, 248, 0, 48, ++ 16, 33, 67, 68, 138, 74, 29, 168, 185, 243, 112, 244, 153, 248, 0, 48, ++ 16, 33, 67, 68, 135, 74, 51, 168, 185, 243, 104, 244, 82, 70, 47, 169, ++ 55, 168, 255, 247, 157, 251, 227, 121, 34, 122, 27, 4, 67, 234, 2, 99, ++ 98, 121, 51, 169, 19, 67, 162, 121, 55, 168, 67, 234, 2, 34, 255, 247, ++ 143, 251, 227, 122, 34, 123, 27, 4, 67, 234, 2, 99, 98, 122, 55, 168, ++ 19, 67, 162, 122, 29, 169, 67, 234, 2, 34, 255, 247, 129, 251, 10, 241, ++ 8, 10, 8, 241, 1, 8, 8, 52, 223, 248, 204, 145, 216, 69, 153, 248, 0, ++ 48, 189, 219, 155, 68, 137, 248, 0, 176, 2, 240, 174, 186, 110, 75, ++ 12, 34, 181, 251, 242, 242, 26, 112, 79, 240, 0, 8, 153, 70, 62, 224, ++ 67, 70, 16, 33, 100, 74, 51, 168, 185, 243, 40, 244, 67, 70, 16, 33, ++ 99, 74, 29, 168, 185, 243, 34, 244, 67, 70, 16, 33, 97, 74, 47, 168, ++ 185, 243, 28, 244, 227, 120, 34, 121, 27, 4, 67, 234, 2, 99, 98, 120, ++ 51, 169, 19, 67, 162, 120, 55, 168, 67, 234, 2, 34, 255, 247, 72, 251, ++ 227, 121, 34, 122, 27, 4, 67, 234, 2, 99, 98, 121, 47, 169, 19, 67, ++ 162, 121, 55, 168, 67, 234, 2, 34, 255, 247, 58, 251, 227, 122, 34, ++ 123, 27, 4, 67, 234, 2, 99, 98, 122, 55, 168, 19, 67, 162, 122, 29, ++ 169, 67, 234, 2, 34, 255, 247, 44, 251, 8, 241, 1, 8, 12, 52, 153, 248, ++ 0, 48, 152, 69, 188, 219, 2, 240, 96, 186, 227, 120, 34, 121, 27, 4, ++ 67, 234, 2, 99, 98, 120, 55, 168, 19, 67, 162, 120, 67, 73, 67, 234, ++ 2, 34, 255, 247, 21, 251, 2, 240, 80, 186, 163, 120, 98, 120, 55, 168, ++ 63, 73, 66, 234, 3, 34, 255, 247, 11, 251, 2, 240, 70, 186, 79, 240, ++ 5, 9, 181, 251, 249, 249, 95, 250, 137, 249, 79, 240, 0, 8, 22, 224, ++ 99, 120, 16, 33, 55, 74, 47, 168, 185, 243, 192, 243, 35, 121, 98, 121, ++ 27, 4, 67, 234, 2, 99, 162, 120, 55, 168, 19, 67, 226, 120, 47, 169, ++ 67, 234, 2, 34, 255, 247, 236, 250, 8, 241, 1, 8, 5, 52, 200, 69, 230, ++ 219, 2, 240, 34, 186, 55, 168, 43, 73, 98, 120, 255, 247, 224, 250, ++ 2, 45, 66, 242, 26, 130, 55, 168, 40, 73, 162, 120, 255, 247, 216, 250, ++ 2, 240, 19, 186, 0, 34, 55, 168, 37, 73, 99, 120, 255, 247, 208, 250, ++ 2, 45, 66, 242, 77, 130, 1, 34, 55, 168, 33, 73, 163, 120, 255, 247, ++ 199, 250, 3, 45, 2, 240, 68, 130, 2, 34, 55, 168, 28, 73, 227, 120, ++ 255, 247, 190, 250, 4, 45, 2, 240, 246, 129, 25, 73, 55, 168, 3, 34, ++ 35, 121, 255, 247, 181, 250, 1, 33, 19, 145, 2, 240, 238, 185, 98, 120, ++ 55, 168, 18, 73, 255, 247, 172, 250, 55, 168, 17, 73, 1, 34, 163, 120, ++ 255, 247, 166, 250, 2, 240, 225, 185, 55, 168, 14, 73, 98, 120, 255, ++ 247, 159, 250, 2, 240, 218, 185, 0, 191, 120, 27, 4, 0, 131, 27, 4, ++ 0, 142, 27, 4, 0, 154, 27, 4, 0, 156, 110, 4, 0, 169, 138, 5, 0, 141, ++ 147, 5, 0, 166, 27, 4, 0, 206, 141, 5, 0, 149, 148, 5, 0, 0, 139, 5, ++ 0, 190, 142, 5, 0, 171, 30, 14, 43, 2, 242, 189, 129, 1, 162, 82, 248, ++ 35, 240, 0, 191, 153, 165, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 207, ++ 200, 4, 0, 207, 200, 4, 0, 17, 166, 4, 0, 223, 165, 4, 0, 191, 165, ++ 4, 0, 167, 165, 4, 0, 207, 200, 4, 0, 207, 200, 4, 0, 17, 166, 4, 0, ++ 223, 165, 4, 0, 191, 165, 4, 0, 167, 165, 4, 0, 55, 168, 169, 73, 98, ++ 120, 255, 247, 89, 250, 2, 240, 148, 185, 55, 168, 166, 73, 98, 122, ++ 255, 247, 82, 250, 12, 45, 140, 191, 79, 240, 9, 8, 79, 240, 0, 8, 1, ++ 224, 79, 240, 0, 8, 243, 25, 55, 168, 158, 73, 26, 122, 255, 247, 67, ++ 250, 12, 45, 7, 217, 184, 241, 0, 15, 8, 191, 79, 240, 8, 8, 1, 224, ++ 79, 240, 0, 8, 7, 241, 7, 9, 152, 73, 22, 248, 9, 32, 55, 168, 255, ++ 247, 49, 250, 0, 34, 55, 168, 149, 73, 22, 248, 9, 48, 255, 247, 42, ++ 250, 12, 45, 7, 217, 184, 241, 0, 15, 8, 191, 79, 240, 7, 8, 1, 224, ++ 79, 240, 0, 8, 79, 240, 0, 9, 162, 120, 99, 120, 140, 73, 18, 2, 73, ++ 68, 55, 168, 210, 24, 9, 241, 9, 9, 255, 247, 19, 250, 2, 52, 185, 241, ++ 27, 15, 240, 209, 12, 45, 66, 242, 73, 129, 184, 241, 0, 15, 8, 191, ++ 79, 240, 6, 8, 131, 76, 184, 68, 176, 68, 4, 241, 36, 9, 152, 248, 2, ++ 32, 152, 248, 1, 48, 18, 2, 33, 70, 55, 168, 210, 24, 12, 52, 255, 247, ++ 247, 249, 76, 69, 8, 241, 2, 8, 240, 209, 2, 240, 46, 185, 20, 45, 25, ++ 208, 23, 45, 3, 208, 19, 45, 66, 240, 39, 129, 25, 224, 6, 235, 7, 8, ++ 116, 73, 152, 248, 22, 32, 55, 168, 255, 247, 225, 249, 114, 73, 152, ++ 248, 21, 32, 55, 168, 255, 247, 219, 249, 55, 168, 111, 73, 152, 248, ++ 20, 32, 255, 247, 213, 249, 243, 25, 55, 168, 109, 73, 218, 124, 255, ++ 247, 207, 249, 169, 70, 162, 70, 79, 240, 0, 8, 37, 70, 170, 120, 107, ++ 120, 104, 73, 18, 2, 65, 68, 55, 168, 210, 24, 8, 241, 9, 8, 255, 247, ++ 191, 249, 2, 53, 184, 241, 27, 15, 240, 209, 77, 70, 79, 240, 0, 8, ++ 34, 122, 227, 121, 96, 73, 18, 2, 65, 68, 55, 168, 210, 24, 8, 241, ++ 11, 8, 255, 247, 173, 249, 2, 52, 184, 241, 33, 15, 240, 209, 0, 36, ++ 154, 248, 14, 32, 154, 248, 13, 48, 88, 73, 18, 2, 9, 25, 55, 168, 210, ++ 24, 11, 52, 255, 247, 156, 249, 33, 44, 10, 241, 2, 10, 239, 209, 2, ++ 240, 211, 184, 225, 120, 98, 120, 163, 120, 0, 145, 33, 121, 55, 168, ++ 1, 145, 97, 121, 2, 145, 161, 121, 3, 145, 225, 121, 4, 145, 33, 122, ++ 5, 145, 75, 73, 255, 247, 132, 249, 2, 240, 191, 184, 169, 70, 79, 240, ++ 0, 8, 37, 70, 21, 248, 1, 63, 255, 43, 4, 208, 55, 168, 69, 73, 66, ++ 70, 255, 247, 117, 249, 8, 241, 1, 8, 184, 241, 4, 15, 241, 209, 185, ++ 241, 12, 15, 77, 70, 66, 242, 168, 128, 4, 235, 8, 3, 91, 120, 255, ++ 43, 4, 208, 55, 168, 59, 73, 66, 70, 255, 247, 97, 249, 8, 241, 1, 8, ++ 184, 241, 12, 15, 240, 209, 16, 45, 66, 242, 150, 128, 4, 235, 8, 3, ++ 91, 120, 255, 43, 4, 208, 55, 168, 50, 73, 66, 70, 255, 247, 79, 249, ++ 8, 241, 1, 8, 184, 241, 16, 15, 240, 209, 2, 240, 133, 184, 98, 120, ++ 55, 168, 10, 177, 163, 120, 27, 185, 43, 73, 255, 247, 64, 249, 2, 224, ++ 42, 73, 255, 247, 60, 249, 243, 25, 55, 168, 40, 73, 218, 120, 255, ++ 247, 54, 249, 2, 240, 113, 184, 163, 120, 98, 120, 55, 168, 37, 73, ++ 66, 234, 3, 34, 255, 247, 44, 249, 2, 240, 103, 184, 227, 120, 34, 121, ++ 27, 4, 67, 234, 2, 99, 98, 120, 55, 168, 19, 67, 162, 120, 30, 73, 67, ++ 234, 2, 34, 255, 247, 28, 249, 2, 240, 87, 184, 55, 168, 27, 73, 98, ++ 120, 255, 247, 21, 249, 2, 45, 66, 242, 79, 128, 55, 168, 24, 73, 162, ++ 120, 255, 247, 13, 249, 2, 240, 72, 184, 0, 191, 154, 145, 5, 0, 55, ++ 146, 5, 0, 255, 150, 5, 0, 174, 140, 5, 0, 55, 143, 5, 0, 23, 147, 5, ++ 0, 33, 145, 5, 0, 74, 148, 5, 0, 75, 138, 5, 0, 42, 143, 5, 0, 77, 145, ++ 5, 0, 250, 147, 5, 0, 27, 138, 5, 0, 10, 139, 5, 0, 169, 141, 5, 0, ++ 157, 149, 5, 0, 232, 152, 5, 0, 11, 144, 5, 0, 160, 144, 5, 0, 47, 139, ++ 5, 0, 11, 152, 5, 0, 76, 152, 5, 0, 124, 28, 50, 93, 55, 168, 134, 73, ++ 2, 240, 15, 2, 255, 247, 214, 248, 50, 93, 55, 168, 18, 9, 188, 28, ++ 130, 73, 255, 247, 207, 248, 50, 93, 55, 168, 129, 73, 2, 240, 7, 2, ++ 255, 247, 200, 248, 50, 93, 55, 168, 210, 8, 126, 73, 2, 240, 3, 2, ++ 255, 247, 192, 248, 1, 240, 251, 191, 124, 28, 50, 93, 55, 168, 122, ++ 73, 2, 240, 15, 2, 255, 247, 182, 248, 50, 93, 55, 168, 18, 9, 188, ++ 28, 118, 73, 255, 247, 175, 248, 50, 93, 55, 168, 117, 73, 2, 240, 7, ++ 2, 255, 247, 168, 248, 50, 93, 55, 168, 210, 8, 114, 73, 2, 240, 3, ++ 2, 255, 247, 160, 248, 1, 240, 219, 191, 55, 168, 111, 73, 98, 120, ++ 255, 247, 153, 248, 1, 240, 212, 191, 98, 120, 55, 168, 108, 73, 255, ++ 247, 146, 248, 162, 120, 55, 168, 106, 73, 255, 247, 141, 248, 55, 168, ++ 105, 73, 226, 120, 255, 247, 136, 248, 1, 240, 195, 191, 55, 168, 103, ++ 73, 98, 120, 255, 247, 129, 248, 1, 240, 188, 191, 55, 168, 100, 73, ++ 98, 120, 255, 247, 122, 248, 1, 240, 181, 191, 7, 241, 1, 8, 6, 235, ++ 8, 4, 32, 70, 190, 247, 141, 253, 0, 40, 65, 240, 171, 135, 22, 248, ++ 8, 48, 216, 7, 1, 241, 166, 135, 32, 70, 39, 169, 185, 243, 177, 243, ++ 17, 155, 1, 51, 65, 240, 158, 135, 243, 25, 90, 121, 155, 121, 18, 2, ++ 211, 24, 17, 147, 1, 240, 150, 191, 162, 120, 99, 120, 18, 6, 55, 168, ++ 81, 73, 66, 234, 3, 34, 255, 247, 80, 248, 1, 240, 139, 191, 98, 120, ++ 55, 168, 77, 73, 255, 247, 73, 248, 162, 120, 55, 168, 76, 73, 255, ++ 247, 68, 248, 35, 121, 226, 120, 27, 2, 55, 168, 73, 73, 154, 24, 255, ++ 247, 60, 248, 1, 240, 119, 191, 55, 168, 71, 73, 98, 120, 255, 247, ++ 53, 248, 1, 240, 112, 191, 55, 168, 68, 73, 98, 120, 255, 247, 46, 248, ++ 1, 240, 105, 191, 163, 120, 98, 120, 27, 2, 55, 168, 64, 73, 154, 24, ++ 255, 247, 36, 248, 1, 240, 95, 191, 148, 248, 2, 128, 99, 120, 79, 234, ++ 8, 40, 152, 68, 31, 250, 136, 248, 58, 73, 79, 234, 216, 34, 55, 168, ++ 255, 247, 20, 248, 8, 244, 224, 98, 18, 10, 55, 73, 55, 168, 255, 247, ++ 13, 248, 8, 240, 248, 2, 210, 8, 52, 73, 55, 168, 255, 247, 6, 248, ++ 8, 240, 6, 2, 82, 8, 50, 73, 55, 168, 254, 247, 255, 255, 55, 168, 48, ++ 73, 8, 240, 1, 2, 254, 247, 249, 255, 4, 45, 65, 242, 51, 135, 35, 121, ++ 228, 120, 27, 2, 28, 25, 164, 178, 226, 10, 55, 168, 42, 73, 254, 247, ++ 236, 255, 4, 244, 224, 98, 18, 10, 55, 168, 39, 73, 254, 247, 229, 255, ++ 4, 240, 248, 2, 210, 8, 55, 168, 37, 73, 254, 247, 222, 255, 4, 240, ++ 6, 2, 82, 8, 55, 168, 34, 73, 254, 247, 215, 255, 55, 168, 33, 73, 4, ++ 240, 1, 2, 254, 247, 209, 255, 1, 240, 12, 191, 0, 191, 88, 139, 5, ++ 0, 166, 139, 5, 0, 42, 146, 5, 0, 157, 139, 5, 0, 35, 152, 5, 0, 156, ++ 138, 5, 0, 185, 143, 5, 0, 167, 145, 5, 0, 247, 149, 5, 0, 74, 151, ++ 5, 0, 171, 144, 5, 0, 56, 151, 5, 0, 27, 151, 5, 0, 75, 146, 5, 0, 16, ++ 146, 5, 0, 104, 145, 5, 0, 48, 145, 5, 0, 114, 147, 5, 0, 167, 146, ++ 5, 0, 86, 152, 5, 0, 255, 143, 5, 0, 89, 140, 5, 0, 48, 152, 5, 0, 209, ++ 138, 5, 0, 72, 140, 5, 0, 61, 152, 5, 0, 218, 149, 5, 0, 236, 142, 5, ++ 0, 71, 141, 5, 0, 85, 146, 5, 0, 12, 151, 5, 0, 0, 34, 99, 120, 103, ++ 73, 55, 168, 254, 247, 138, 255, 79, 240, 0, 8, 101, 73, 162, 120, 55, ++ 168, 254, 247, 131, 255, 205, 248, 0, 128, 34, 121, 227, 120, 18, 2, ++ 211, 24, 1, 147, 2, 34, 96, 73, 67, 70, 55, 168, 254, 247, 118, 255, ++ 205, 248, 0, 128, 162, 121, 99, 121, 18, 2, 211, 24, 1, 147, 2, 34, ++ 1, 35, 89, 73, 55, 168, 254, 247, 105, 255, 205, 248, 0, 128, 34, 122, ++ 227, 121, 18, 2, 211, 24, 2, 34, 1, 147, 55, 168, 82, 73, 19, 70, 254, ++ 247, 92, 255, 30, 45, 65, 242, 150, 134, 98, 122, 55, 168, 79, 73, 254, ++ 247, 84, 255, 162, 122, 55, 168, 77, 73, 254, 247, 79, 255, 226, 122, ++ 55, 168, 76, 73, 254, 247, 74, 255, 34, 123, 55, 168, 74, 73, 254, 247, ++ 69, 255, 205, 248, 0, 128, 162, 123, 99, 123, 18, 2, 211, 24, 1, 147, ++ 5, 34, 67, 70, 55, 168, 64, 73, 254, 247, 56, 255, 205, 248, 0, 128, ++ 34, 124, 227, 123, 18, 2, 211, 24, 1, 147, 5, 34, 1, 35, 55, 168, 57, ++ 73, 254, 247, 43, 255, 205, 248, 0, 128, 162, 124, 99, 124, 18, 2, 211, ++ 24, 1, 147, 5, 34, 2, 35, 55, 168, 51, 73, 254, 247, 30, 255, 205, 248, ++ 0, 128, 205, 248, 4, 128, 34, 125, 227, 124, 18, 2, 211, 24, 2, 147, ++ 5, 34, 108, 35, 79, 240, 1, 9, 55, 168, 47, 73, 254, 247, 13, 255, 205, ++ 248, 0, 144, 205, 248, 4, 128, 162, 125, 99, 125, 18, 2, 211, 24, 2, ++ 147, 5, 34, 108, 35, 79, 240, 2, 10, 55, 168, 39, 73, 254, 247, 252, ++ 254, 205, 248, 0, 160, 205, 248, 4, 128, 34, 126, 227, 125, 18, 2, 211, ++ 24, 2, 147, 5, 34, 108, 35, 55, 168, 31, 73, 254, 247, 237, 254, 205, ++ 248, 0, 128, 205, 248, 4, 128, 162, 126, 99, 126, 18, 2, 211, 24, 2, ++ 147, 5, 34, 104, 35, 55, 168, 24, 73, 254, 247, 222, 254, 205, 248, ++ 0, 144, 205, 248, 4, 128, 34, 127, 227, 126, 18, 2, 211, 24, 2, 147, ++ 5, 34, 55, 168, 104, 35, 16, 73, 254, 247, 207, 254, 205, 248, 0, 160, ++ 205, 248, 4, 128, 163, 127, 98, 127, 27, 2, 155, 24, 2, 147, 55, 168, ++ 10, 73, 5, 34, 104, 35, 254, 247, 192, 254, 1, 240, 251, 189, 174, 140, ++ 5, 0, 144, 139, 5, 0, 10, 138, 5, 0, 72, 149, 5, 0, 38, 150, 5, 0, 164, ++ 147, 5, 0, 223, 151, 5, 0, 138, 149, 5, 0, 1, 34, 99, 120, 156, 73, ++ 55, 168, 254, 247, 168, 254, 79, 240, 1, 8, 154, 73, 162, 120, 55, 168, ++ 254, 247, 161, 254, 205, 248, 0, 128, 34, 121, 227, 120, 18, 2, 211, ++ 24, 1, 147, 2, 34, 0, 35, 148, 73, 55, 168, 254, 247, 148, 254, 205, ++ 248, 0, 128, 162, 121, 99, 121, 18, 2, 211, 24, 1, 147, 2, 34, 142, ++ 73, 67, 70, 55, 168, 254, 247, 135, 254, 205, 248, 0, 128, 34, 122, ++ 227, 121, 18, 2, 211, 24, 2, 34, 1, 147, 55, 168, 135, 73, 19, 70, 254, ++ 247, 122, 254, 30, 45, 65, 242, 180, 133, 98, 122, 55, 168, 132, 73, ++ 254, 247, 114, 254, 162, 122, 55, 168, 130, 73, 254, 247, 109, 254, ++ 226, 122, 55, 168, 129, 73, 254, 247, 104, 254, 34, 123, 55, 168, 127, ++ 73, 254, 247, 99, 254, 205, 248, 0, 128, 162, 123, 99, 123, 18, 2, 211, ++ 24, 1, 147, 5, 34, 0, 35, 55, 168, 117, 73, 254, 247, 86, 254, 205, ++ 248, 0, 128, 34, 124, 227, 123, 18, 2, 211, 24, 1, 147, 5, 34, 67, 70, ++ 55, 168, 110, 73, 254, 247, 73, 254, 205, 248, 0, 128, 162, 124, 99, ++ 124, 18, 2, 211, 24, 1, 147, 5, 34, 2, 35, 79, 240, 0, 9, 55, 168, 103, ++ 73, 254, 247, 58, 254, 205, 248, 0, 144, 205, 248, 4, 128, 34, 125, ++ 227, 124, 18, 2, 211, 24, 2, 147, 5, 34, 108, 35, 55, 168, 100, 73, ++ 254, 247, 43, 254, 205, 248, 0, 128, 205, 248, 4, 128, 162, 125, 99, ++ 125, 18, 2, 211, 24, 2, 147, 5, 34, 108, 35, 79, 240, 2, 10, 55, 168, ++ 92, 73, 254, 247, 26, 254, 205, 248, 0, 160, 205, 248, 4, 128, 34, 126, ++ 227, 125, 18, 2, 211, 24, 2, 147, 5, 34, 108, 35, 55, 168, 84, 73, 254, ++ 247, 11, 254, 205, 248, 0, 144, 205, 248, 4, 128, 162, 126, 99, 126, ++ 18, 2, 211, 24, 2, 147, 5, 34, 104, 35, 55, 168, 77, 73, 254, 247, 252, ++ 253, 205, 248, 0, 128, 205, 248, 4, 128, 34, 127, 227, 126, 18, 2, 211, ++ 24, 2, 147, 5, 34, 55, 168, 104, 35, 69, 73, 254, 247, 237, 253, 205, ++ 248, 0, 160, 205, 248, 4, 128, 163, 127, 98, 127, 27, 2, 155, 24, 2, ++ 147, 55, 168, 63, 73, 5, 34, 104, 35, 254, 247, 222, 253, 1, 240, 25, ++ 189, 162, 120, 99, 120, 18, 2, 210, 24, 58, 73, 55, 168, 254, 247, 212, ++ 253, 162, 121, 99, 121, 18, 6, 27, 4, 210, 24, 35, 121, 55, 168, 27, ++ 2, 210, 24, 227, 120, 52, 73, 210, 24, 254, 247, 198, 253, 18, 45, 65, ++ 242, 0, 133, 162, 122, 99, 122, 18, 6, 27, 4, 210, 24, 35, 122, 55, ++ 168, 27, 2, 210, 24, 227, 121, 45, 73, 210, 24, 254, 247, 181, 253, ++ 162, 123, 99, 123, 18, 6, 27, 4, 210, 24, 35, 123, 55, 168, 27, 2, 210, ++ 24, 227, 122, 39, 73, 210, 24, 254, 247, 167, 253, 162, 124, 99, 124, ++ 18, 6, 27, 4, 211, 24, 34, 124, 55, 168, 18, 2, 155, 24, 226, 123, 33, ++ 73, 154, 24, 254, 247, 153, 253, 1, 240, 212, 188, 162, 120, 99, 120, ++ 18, 2, 211, 24, 0, 147, 2, 34, 67, 70, 55, 168, 27, 73, 8, 241, 1, 8, ++ 254, 247, 138, 253, 2, 52, 200, 69, 239, 221, 1, 240, 194, 188, 162, ++ 120, 99, 120, 18, 2, 211, 24, 0, 147, 5, 34, 67, 70, 55, 168, 18, 73, ++ 8, 241, 1, 8, 254, 247, 120, 253, 2, 52, 200, 69, 239, 221, 1, 240, ++ 176, 188, 0, 191, 174, 140, 5, 0, 62, 146, 5, 0, 10, 138, 5, 0, 86, ++ 149, 5, 0, 51, 150, 5, 0, 175, 151, 5, 0, 238, 151, 5, 0, 138, 149, ++ 5, 0, 234, 149, 5, 0, 252, 137, 5, 0, 122, 148, 5, 0, 240, 150, 5, 0, ++ 102, 146, 5, 0, 119, 141, 5, 0, 205, 248, 0, 128, 162, 120, 99, 120, ++ 18, 2, 211, 24, 1, 147, 5, 34, 108, 35, 55, 168, 187, 73, 8, 241, 1, ++ 8, 254, 247, 71, 253, 2, 52, 208, 69, 237, 221, 79, 234, 85, 9, 95, ++ 250, 137, 249, 9, 241, 1, 11, 9, 241, 2, 9, 185, 68, 187, 68, 6, 235, ++ 9, 4, 79, 240, 0, 8, 205, 248, 0, 128, 34, 120, 201, 235, 4, 3, 19, ++ 248, 11, 48, 18, 2, 211, 24, 1, 147, 5, 34, 104, 35, 55, 168, 170, 73, ++ 8, 241, 1, 8, 254, 247, 36, 253, 2, 52, 208, 69, 234, 221, 1, 240, 92, ++ 188, 163, 120, 98, 120, 27, 2, 55, 168, 164, 73, 154, 24, 254, 247, ++ 23, 253, 1, 240, 82, 188, 163, 120, 98, 120, 27, 2, 55, 168, 160, 73, ++ 154, 24, 254, 247, 13, 253, 1, 240, 72, 188, 163, 120, 98, 120, 27, ++ 2, 55, 168, 156, 73, 154, 24, 254, 247, 3, 253, 1, 240, 62, 188, 163, ++ 120, 98, 120, 27, 2, 55, 168, 152, 73, 154, 24, 254, 247, 249, 252, ++ 1, 240, 52, 188, 34, 121, 227, 120, 18, 6, 27, 4, 210, 24, 163, 120, ++ 55, 168, 27, 2, 210, 24, 99, 120, 145, 73, 210, 24, 254, 247, 233, 252, ++ 34, 122, 227, 121, 18, 6, 27, 4, 210, 24, 163, 121, 55, 168, 27, 2, ++ 210, 24, 99, 121, 139, 73, 210, 24, 254, 247, 219, 252, 34, 123, 227, ++ 122, 18, 6, 27, 4, 211, 24, 162, 122, 55, 168, 18, 2, 155, 24, 98, 122, ++ 133, 73, 154, 24, 254, 247, 205, 252, 1, 240, 8, 188, 162, 120, 99, ++ 120, 18, 2, 55, 168, 129, 73, 210, 24, 254, 247, 195, 252, 4, 45, 65, ++ 242, 253, 131, 35, 121, 226, 120, 27, 2, 55, 168, 124, 73, 154, 24, ++ 254, 247, 184, 252, 1, 240, 243, 187, 34, 121, 227, 120, 18, 6, 27, ++ 4, 210, 24, 163, 120, 55, 168, 27, 2, 210, 24, 99, 120, 117, 73, 210, ++ 24, 254, 247, 168, 252, 6, 45, 65, 242, 226, 131, 34, 122, 227, 121, ++ 18, 6, 27, 4, 211, 24, 162, 121, 55, 168, 18, 2, 155, 24, 98, 121, 110, ++ 73, 154, 24, 254, 247, 151, 252, 1, 240, 210, 187, 223, 248, 188, 145, ++ 79, 240, 1, 8, 168, 69, 129, 242, 203, 131, 34, 121, 227, 120, 18, 6, ++ 27, 4, 210, 24, 163, 120, 73, 70, 27, 2, 210, 24, 99, 120, 55, 168, ++ 210, 24, 8, 241, 4, 8, 254, 247, 126, 252, 4, 52, 184, 241, 25, 15, ++ 9, 241, 24, 9, 230, 209, 1, 240, 179, 187, 223, 248, 128, 145, 79, 240, ++ 1, 8, 168, 69, 129, 242, 172, 131, 34, 121, 227, 120, 18, 6, 27, 4, ++ 210, 24, 163, 120, 73, 70, 27, 2, 210, 24, 99, 120, 55, 168, 210, 24, ++ 8, 241, 4, 8, 254, 247, 95, 252, 4, 52, 184, 241, 13, 15, 9, 241, 19, ++ 9, 230, 209, 1, 240, 148, 187, 223, 248, 72, 145, 79, 240, 1, 8, 168, ++ 69, 129, 242, 141, 131, 34, 121, 227, 120, 18, 6, 27, 4, 210, 24, 163, ++ 120, 73, 70, 27, 2, 210, 24, 99, 120, 55, 168, 210, 24, 8, 241, 4, 8, ++ 254, 247, 64, 252, 4, 52, 184, 241, 13, 15, 9, 241, 20, 9, 230, 209, ++ 1, 240, 117, 187, 223, 248, 12, 145, 79, 240, 1, 8, 168, 69, 129, 242, ++ 110, 131, 34, 121, 227, 120, 18, 6, 27, 4, 210, 24, 163, 120, 73, 70, ++ 27, 2, 210, 24, 99, 120, 55, 168, 210, 24, 8, 241, 4, 8, 254, 247, 33, ++ 252, 4, 52, 184, 241, 13, 15, 9, 241, 20, 9, 230, 209, 1, 240, 86, 187, ++ 223, 248, 212, 144, 79, 240, 1, 8, 168, 69, 129, 242, 79, 131, 34, 121, ++ 227, 120, 18, 6, 27, 4, 210, 24, 163, 120, 73, 70, 27, 2, 210, 24, 99, ++ 120, 55, 168, 210, 24, 8, 241, 4, 8, 254, 247, 2, 252, 4, 52, 184, 241, ++ 13, 15, 9, 241, 20, 9, 230, 209, 1, 240, 55, 187, 163, 120, 98, 120, ++ 27, 2, 55, 168, 28, 73, 154, 24, 254, 247, 242, 251, 1, 240, 45, 187, ++ 163, 120, 98, 120, 27, 2, 55, 168, 24, 73, 154, 24, 254, 247, 232, 251, ++ 1, 240, 35, 187, 34, 121, 227, 120, 18, 6, 27, 4, 211, 24, 162, 120, ++ 100, 120, 18, 2, 155, 24, 55, 168, 17, 73, 1, 34, 27, 25, 254, 247, ++ 215, 251, 1, 240, 18, 187, 0, 191, 100, 149, 5, 0, 88, 147, 5, 0, 27, ++ 148, 5, 0, 228, 140, 5, 0, 189, 140, 5, 0, 122, 148, 5, 0, 240, 150, ++ 5, 0, 102, 146, 5, 0, 0, 150, 5, 0, 19, 150, 5, 0, 13, 149, 5, 0, 36, ++ 149, 5, 0, 29, 146, 5, 0, 155, 151, 5, 0, 159, 148, 5, 0, 253, 141, ++ 5, 0, 198, 143, 5, 0, 251, 139, 5, 0, 172, 152, 5, 0, 84, 151, 5, 0, ++ 34, 121, 227, 120, 18, 6, 27, 4, 211, 24, 162, 120, 100, 120, 18, 2, ++ 155, 24, 55, 168, 151, 73, 2, 34, 27, 25, 254, 247, 157, 251, 1, 240, ++ 216, 186, 55, 168, 148, 73, 98, 120, 254, 247, 150, 251, 1, 240, 209, ++ 186, 146, 73, 98, 120, 7, 241, 2, 8, 55, 168, 254, 247, 141, 251, 22, ++ 248, 8, 32, 143, 73, 18, 9, 55, 168, 254, 247, 134, 251, 22, 248, 8, ++ 32, 55, 168, 140, 73, 2, 240, 15, 2, 254, 247, 126, 251, 3, 45, 65, ++ 242, 184, 130, 226, 120, 55, 168, 136, 73, 254, 247, 118, 251, 7, 241, ++ 5, 8, 34, 121, 55, 168, 133, 73, 254, 247, 111, 251, 22, 248, 8, 32, ++ 55, 168, 146, 8, 131, 73, 254, 247, 104, 251, 22, 248, 8, 32, 55, 168, ++ 129, 73, 2, 240, 3, 2, 254, 247, 96, 251, 55, 168, 127, 73, 162, 121, ++ 254, 247, 91, 251, 1, 240, 150, 186, 148, 248, 2, 128, 99, 120, 79, ++ 234, 8, 40, 152, 68, 31, 250, 136, 248, 79, 234, 216, 34, 55, 168, 119, ++ 73, 254, 247, 75, 251, 8, 244, 128, 99, 2, 34, 155, 10, 55, 168, 116, ++ 73, 254, 247, 67, 251, 8, 244, 0, 115, 2, 34, 91, 10, 55, 168, 113, ++ 73, 254, 247, 59, 251, 8, 244, 248, 115, 2, 34, 27, 9, 55, 168, 110, ++ 73, 254, 247, 51, 251, 8, 240, 14, 3, 2, 34, 91, 8, 55, 168, 107, 73, ++ 254, 247, 43, 251, 2, 34, 8, 240, 1, 3, 55, 168, 105, 73, 254, 247, ++ 36, 251, 35, 121, 228, 120, 27, 2, 28, 25, 164, 178, 226, 10, 55, 168, ++ 101, 73, 254, 247, 26, 251, 4, 244, 128, 99, 5, 34, 155, 10, 55, 168, ++ 92, 73, 254, 247, 18, 251, 4, 244, 0, 115, 5, 34, 91, 10, 55, 168, 89, ++ 73, 254, 247, 10, 251, 4, 244, 248, 115, 5, 34, 27, 9, 55, 168, 86, ++ 73, 254, 247, 2, 251, 4, 240, 14, 3, 5, 34, 91, 8, 55, 168, 83, 73, ++ 254, 247, 250, 250, 55, 168, 82, 73, 5, 34, 4, 240, 1, 3, 254, 247, ++ 243, 250, 1, 240, 46, 186, 162, 120, 99, 120, 18, 2, 210, 24, 55, 168, ++ 77, 73, 254, 247, 233, 250, 148, 248, 4, 224, 227, 120, 79, 234, 14, ++ 46, 0, 34, 115, 68, 55, 168, 73, 73, 254, 247, 222, 250, 33, 122, 226, ++ 121, 9, 2, 138, 24, 148, 248, 6, 224, 99, 121, 0, 146, 161, 122, 98, ++ 122, 9, 2, 79, 234, 14, 46, 138, 24, 115, 68, 1, 146, 55, 168, 0, 34, ++ 63, 73, 254, 247, 201, 250, 34, 123, 227, 122, 0, 146, 98, 123, 55, ++ 168, 1, 146, 162, 123, 59, 73, 2, 146, 0, 34, 254, 247, 189, 250, 161, ++ 124, 98, 124, 9, 2, 138, 24, 148, 248, 16, 224, 227, 123, 0, 146, 33, ++ 125, 226, 124, 9, 2, 138, 24, 1, 146, 161, 125, 98, 125, 9, 2, 138, ++ 24, 2, 146, 33, 126, 226, 125, 9, 2, 138, 24, 3, 146, 161, 126, 98, ++ 126, 9, 2, 138, 24, 4, 146, 33, 127, 226, 126, 9, 2, 138, 24, 5, 146, ++ 161, 127, 98, 127, 9, 2, 138, 24, 6, 146, 148, 248, 32, 16, 226, 127, ++ 9, 2, 138, 24, 7, 146, 148, 248, 34, 16, 148, 248, 33, 32, 9, 2, 138, ++ 24, 8, 146, 148, 248, 36, 16, 148, 248, 35, 32, 9, 2, 138, 24, 9, 146, ++ 148, 248, 38, 32, 148, 248, 37, 16, 18, 2, 82, 24, 79, 234, 14, 46, ++ 10, 146, 55, 168, 24, 73, 0, 34, 115, 68, 254, 247, 116, 250, 1, 240, ++ 175, 185, 159, 148, 5, 0, 180, 144, 5, 0, 228, 141, 5, 0, 150, 142, ++ 5, 0, 99, 141, 5, 0, 59, 139, 5, 0, 249, 142, 5, 0, 109, 148, 5, 0, ++ 235, 148, 5, 0, 118, 149, 5, 0, 210, 144, 5, 0, 255, 148, 5, 0, 117, ++ 146, 5, 0, 59, 149, 5, 0, 253, 151, 5, 0, 37, 151, 5, 0, 60, 138, 5, ++ 0, 169, 143, 5, 0, 174, 140, 5, 0, 133, 138, 5, 0, 12, 143, 5, 0, 82, ++ 143, 5, 0, 148, 248, 2, 224, 99, 120, 79, 234, 14, 46, 1, 34, 115, 68, ++ 55, 168, 170, 73, 254, 247, 59, 250, 161, 121, 98, 121, 9, 2, 138, 24, ++ 148, 248, 4, 224, 227, 120, 0, 146, 33, 122, 226, 121, 9, 2, 79, 234, ++ 14, 46, 138, 24, 115, 68, 1, 146, 55, 168, 1, 34, 161, 73, 254, 247, ++ 38, 250, 162, 122, 99, 122, 0, 146, 226, 122, 55, 168, 1, 146, 34, 123, ++ 157, 73, 2, 146, 1, 34, 254, 247, 26, 250, 33, 124, 226, 123, 9, 2, ++ 138, 24, 148, 248, 14, 224, 99, 123, 0, 146, 161, 124, 98, 124, 9, 2, ++ 138, 24, 1, 146, 33, 125, 226, 124, 9, 2, 138, 24, 2, 146, 161, 125, ++ 98, 125, 9, 2, 138, 24, 3, 146, 33, 126, 226, 125, 9, 2, 138, 24, 4, ++ 146, 161, 126, 98, 126, 9, 2, 138, 24, 5, 146, 33, 127, 226, 126, 9, ++ 2, 138, 24, 6, 146, 161, 127, 98, 127, 9, 2, 138, 24, 7, 146, 148, 248, ++ 32, 16, 226, 127, 9, 2, 138, 24, 8, 146, 148, 248, 34, 16, 148, 248, ++ 33, 32, 9, 2, 138, 24, 9, 146, 148, 248, 36, 32, 148, 248, 35, 16, 18, ++ 2, 82, 24, 79, 234, 14, 46, 10, 146, 55, 168, 122, 73, 1, 34, 115, 68, ++ 254, 247, 211, 249, 1, 240, 14, 185, 148, 248, 2, 224, 99, 120, 79, ++ 234, 14, 46, 2, 34, 115, 68, 55, 168, 112, 73, 254, 247, 198, 249, 161, ++ 121, 98, 121, 9, 2, 138, 24, 148, 248, 4, 224, 227, 120, 0, 146, 33, ++ 122, 226, 121, 9, 2, 79, 234, 14, 46, 138, 24, 115, 68, 1, 146, 55, ++ 168, 2, 34, 102, 73, 254, 247, 177, 249, 162, 122, 99, 122, 0, 146, ++ 226, 122, 55, 168, 1, 146, 34, 123, 98, 73, 2, 146, 2, 34, 254, 247, ++ 165, 249, 33, 124, 226, 123, 9, 2, 138, 24, 148, 248, 14, 224, 99, 123, ++ 0, 146, 161, 124, 98, 124, 9, 2, 138, 24, 1, 146, 33, 125, 226, 124, ++ 9, 2, 138, 24, 2, 146, 161, 125, 98, 125, 9, 2, 138, 24, 3, 146, 33, ++ 126, 226, 125, 9, 2, 138, 24, 4, 146, 161, 126, 98, 126, 9, 2, 138, ++ 24, 5, 146, 33, 127, 226, 126, 9, 2, 138, 24, 6, 146, 161, 127, 98, ++ 127, 9, 2, 138, 24, 7, 146, 148, 248, 32, 16, 226, 127, 9, 2, 138, 24, ++ 8, 146, 148, 248, 34, 16, 148, 248, 33, 32, 9, 2, 138, 24, 9, 146, 148, ++ 248, 36, 32, 148, 248, 35, 16, 18, 2, 82, 24, 79, 234, 14, 46, 10, 146, ++ 55, 168, 64, 73, 2, 34, 115, 68, 254, 247, 94, 249, 1, 240, 153, 184, ++ 98, 120, 55, 168, 60, 73, 254, 247, 87, 249, 1, 34, 163, 120, 55, 168, ++ 58, 73, 254, 247, 81, 249, 2, 34, 227, 120, 55, 168, 55, 73, 254, 247, ++ 75, 249, 99, 121, 34, 121, 3, 240, 1, 3, 27, 2, 55, 168, 52, 73, 154, ++ 24, 254, 247, 65, 249, 1, 240, 124, 184, 162, 120, 99, 120, 18, 2, 211, ++ 24, 0, 147, 40, 34, 0, 35, 55, 168, 46, 73, 254, 247, 52, 249, 34, 121, ++ 227, 120, 18, 2, 211, 24, 0, 147, 40, 34, 1, 35, 55, 168, 40, 73, 254, ++ 247, 41, 249, 162, 121, 99, 121, 18, 2, 211, 24, 0, 147, 40, 34, 2, ++ 35, 55, 168, 35, 73, 254, 247, 30, 249, 34, 122, 227, 121, 18, 2, 211, ++ 24, 0, 147, 80, 34, 0, 35, 55, 168, 29, 73, 254, 247, 19, 249, 162, ++ 122, 99, 122, 18, 2, 211, 24, 0, 147, 80, 34, 1, 35, 55, 168, 24, 73, ++ 254, 247, 8, 249, 35, 123, 226, 122, 27, 2, 155, 24, 0, 147, 55, 168, ++ 19, 73, 80, 34, 2, 35, 254, 247, 253, 248, 1, 240, 56, 184, 162, 120, ++ 99, 120, 18, 2, 210, 24, 55, 168, 14, 73, 254, 247, 243, 248, 35, 121, ++ 226, 120, 27, 2, 55, 168, 12, 73, 154, 24, 254, 247, 235, 248, 1, 240, ++ 38, 184, 0, 191, 174, 140, 5, 0, 133, 138, 5, 0, 12, 143, 5, 0, 82, ++ 143, 5, 0, 73, 139, 5, 0, 88, 138, 5, 0, 145, 150, 5, 0, 89, 148, 5, ++ 0, 117, 139, 5, 0, 182, 149, 5, 0, 148, 248, 4, 224, 227, 120, 79, 234, ++ 14, 110, 27, 4, 158, 68, 163, 120, 108, 34, 27, 2, 158, 68, 99, 120, ++ 55, 168, 115, 68, 151, 73, 254, 247, 195, 248, 148, 248, 8, 224, 227, ++ 121, 79, 234, 14, 110, 27, 4, 158, 68, 163, 121, 108, 34, 27, 2, 158, ++ 68, 99, 121, 55, 168, 115, 68, 144, 73, 254, 247, 178, 248, 148, 248, ++ 12, 224, 227, 122, 79, 234, 14, 110, 27, 4, 158, 68, 163, 122, 109, ++ 34, 27, 2, 158, 68, 99, 122, 55, 168, 115, 68, 134, 73, 254, 247, 161, ++ 248, 148, 248, 16, 224, 227, 123, 79, 234, 14, 110, 27, 4, 158, 68, ++ 163, 123, 109, 34, 27, 2, 158, 68, 99, 123, 55, 168, 115, 68, 127, 73, ++ 254, 247, 144, 248, 148, 248, 20, 224, 227, 124, 79, 234, 14, 110, 27, ++ 4, 158, 68, 163, 124, 104, 34, 27, 2, 158, 68, 99, 124, 55, 168, 115, ++ 68, 117, 73, 254, 247, 127, 248, 148, 248, 24, 224, 227, 125, 79, 234, ++ 14, 110, 27, 4, 158, 68, 163, 125, 104, 34, 27, 2, 158, 68, 99, 125, ++ 55, 168, 115, 68, 110, 73, 254, 247, 110, 248, 148, 248, 26, 224, 99, ++ 126, 79, 234, 14, 46, 108, 34, 115, 68, 55, 168, 105, 73, 254, 247, ++ 99, 248, 148, 248, 28, 224, 227, 126, 79, 234, 14, 46, 109, 34, 115, ++ 68, 55, 168, 100, 73, 254, 247, 88, 248, 163, 127, 100, 127, 27, 2, ++ 55, 168, 96, 73, 104, 34, 27, 25, 254, 247, 79, 248, 0, 240, 138, 191, ++ 148, 248, 2, 224, 99, 120, 79, 234, 14, 46, 115, 68, 104, 34, 55, 168, ++ 90, 73, 254, 247, 66, 248, 34, 121, 227, 120, 18, 2, 211, 24, 0, 147, ++ 104, 34, 108, 35, 55, 168, 85, 73, 254, 247, 55, 248, 162, 121, 99, ++ 121, 18, 2, 211, 24, 0, 147, 104, 34, 108, 35, 55, 168, 81, 73, 254, ++ 247, 44, 248, 34, 122, 227, 121, 18, 2, 211, 24, 0, 147, 104, 34, 109, ++ 35, 55, 168, 74, 73, 254, 247, 33, 248, 162, 122, 99, 122, 18, 2, 211, ++ 24, 0, 147, 104, 34, 109, 35, 55, 168, 70, 73, 254, 247, 22, 248, 34, ++ 123, 227, 122, 18, 2, 211, 24, 104, 34, 0, 147, 55, 168, 19, 70, 63, ++ 73, 254, 247, 11, 248, 162, 123, 99, 123, 18, 2, 211, 24, 104, 34, 0, ++ 147, 55, 168, 19, 70, 59, 73, 254, 247, 0, 248, 148, 248, 16, 224, 227, ++ 123, 79, 234, 14, 46, 115, 68, 108, 34, 55, 168, 51, 73, 253, 247, 245, ++ 255, 162, 124, 99, 124, 18, 2, 211, 24, 108, 34, 0, 147, 55, 168, 19, ++ 70, 47, 73, 253, 247, 234, 255, 34, 125, 227, 124, 18, 2, 211, 24, 108, ++ 34, 0, 147, 55, 168, 19, 70, 42, 73, 253, 247, 223, 255, 162, 125, 99, ++ 125, 18, 2, 211, 24, 0, 147, 108, 34, 7, 241, 24, 8, 109, 35, 55, 168, ++ 35, 73, 253, 247, 210, 255, 22, 248, 8, 32, 227, 125, 18, 2, 211, 24, ++ 0, 147, 108, 34, 109, 35, 7, 241, 26, 9, 55, 168, 29, 73, 253, 247, ++ 196, 255, 22, 248, 9, 32, 99, 126, 18, 2, 211, 24, 0, 147, 108, 34, ++ 104, 35, 55, 168, 22, 73, 253, 247, 184, 255, 34, 127, 227, 126, 18, ++ 2, 211, 24, 0, 147, 108, 34, 104, 35, 55, 168, 17, 73, 253, 247, 173, ++ 255, 163, 127, 22, 248, 8, 224, 27, 2, 104, 34, 115, 68, 55, 168, 13, ++ 73, 253, 247, 163, 255, 148, 248, 32, 48, 22, 248, 9, 64, 27, 2, 55, ++ 168, 9, 73, 108, 34, 27, 25, 253, 247, 152, 255, 0, 240, 211, 190, 150, ++ 143, 5, 0, 243, 152, 5, 0, 64, 150, 5, 0, 136, 146, 5, 0, 59, 147, 5, ++ 0, 166, 142, 5, 0, 204, 142, 5, 0, 99, 120, 0, 34, 55, 168, 170, 73, ++ 3, 240, 31, 3, 253, 247, 128, 255, 163, 120, 1, 34, 55, 168, 166, 73, ++ 3, 240, 31, 3, 253, 247, 120, 255, 227, 120, 2, 34, 55, 168, 162, 73, ++ 3, 240, 31, 3, 253, 247, 112, 255, 98, 121, 35, 121, 2, 240, 31, 2, ++ 0, 146, 162, 121, 55, 168, 2, 240, 31, 2, 1, 146, 226, 121, 155, 73, ++ 2, 240, 31, 2, 2, 146, 3, 240, 31, 3, 0, 34, 253, 247, 92, 255, 98, ++ 122, 35, 122, 2, 240, 31, 2, 0, 146, 162, 122, 55, 168, 2, 240, 31, ++ 2, 1, 146, 226, 122, 145, 73, 2, 240, 31, 2, 2, 146, 3, 240, 31, 3, ++ 1, 34, 253, 247, 72, 255, 98, 123, 35, 123, 2, 240, 31, 2, 0, 146, 162, ++ 123, 55, 168, 2, 240, 31, 2, 1, 146, 226, 123, 135, 73, 2, 240, 31, ++ 2, 2, 146, 3, 240, 31, 3, 2, 34, 253, 247, 52, 255, 0, 240, 111, 190, ++ 99, 120, 0, 34, 55, 168, 129, 73, 3, 240, 63, 3, 253, 247, 42, 255, ++ 163, 120, 1, 34, 55, 168, 125, 73, 3, 240, 31, 3, 253, 247, 34, 255, ++ 227, 120, 2, 34, 55, 168, 121, 73, 3, 240, 31, 3, 253, 247, 26, 255, ++ 98, 121, 35, 121, 2, 240, 63, 2, 0, 146, 162, 121, 55, 168, 2, 240, ++ 63, 2, 1, 146, 226, 121, 114, 73, 2, 240, 63, 2, 2, 146, 3, 240, 63, ++ 3, 0, 34, 253, 247, 6, 255, 98, 122, 35, 122, 2, 240, 31, 2, 0, 146, ++ 162, 122, 55, 168, 2, 240, 31, 2, 1, 146, 226, 122, 104, 73, 2, 240, ++ 31, 2, 2, 146, 3, 240, 31, 3, 1, 34, 253, 247, 242, 254, 98, 123, 35, ++ 123, 2, 240, 31, 2, 0, 146, 162, 123, 55, 168, 2, 240, 31, 2, 1, 146, ++ 226, 123, 94, 73, 2, 240, 31, 2, 2, 146, 3, 240, 31, 3, 2, 34, 253, ++ 247, 222, 254, 0, 240, 25, 190, 0, 34, 99, 120, 55, 168, 88, 73, 253, ++ 247, 214, 254, 1, 34, 163, 120, 55, 168, 85, 73, 253, 247, 208, 254, ++ 2, 34, 227, 120, 55, 168, 82, 73, 253, 247, 202, 254, 0, 34, 35, 121, ++ 55, 168, 80, 73, 253, 247, 196, 254, 1, 34, 99, 121, 55, 168, 77, 73, ++ 253, 247, 190, 254, 55, 168, 75, 73, 2, 34, 163, 121, 253, 247, 184, ++ 254, 0, 240, 243, 189, 148, 248, 2, 128, 99, 120, 79, 234, 8, 40, 152, ++ 68, 31, 250, 136, 248, 79, 234, 216, 51, 0, 147, 5, 34, 0, 35, 55, 168, ++ 65, 73, 253, 247, 165, 254, 8, 244, 240, 67, 219, 18, 0, 147, 5, 34, ++ 0, 35, 55, 168, 61, 73, 253, 247, 155, 254, 8, 244, 224, 99, 27, 18, ++ 0, 147, 5, 34, 0, 35, 55, 168, 57, 73, 253, 247, 145, 254, 8, 240, 128, ++ 3, 219, 17, 0, 147, 2, 34, 0, 35, 55, 168, 50, 73, 253, 247, 135, 254, ++ 8, 240, 120, 3, 219, 16, 0, 147, 2, 34, 0, 35, 55, 168, 46, 73, 253, ++ 247, 125, 254, 8, 240, 7, 3, 0, 147, 2, 34, 0, 35, 55, 168, 43, 73, ++ 253, 247, 116, 254, 35, 121, 228, 120, 27, 2, 28, 25, 164, 178, 79, ++ 240, 0, 8, 79, 234, 212, 57, 5, 34, 104, 35, 55, 168, 36, 73, 4, 244, ++ 240, 74, 79, 234, 234, 42, 141, 232, 0, 3, 4, 244, 224, 100, 253, 247, ++ 93, 254, 5, 34, 104, 35, 55, 168, 30, 73, 36, 18, 141, 232, 0, 5, 253, ++ 247, 84, 254, 104, 35, 55, 168, 27, 73, 5, 34, 205, 248, 0, 128, 1, ++ 148, 253, 247, 75, 254, 5, 34, 55, 168, 109, 35, 20, 73, 141, 232, 0, ++ 3, 253, 247, 67, 254, 5, 34, 109, 35, 55, 168, 17, 73, 141, 232, 0, ++ 5, 253, 247, 59, 254, 55, 168, 15, 73, 5, 34, 109, 35, 205, 248, 0, ++ 128, 1, 148, 253, 247, 50, 254, 0, 240, 109, 189, 21, 144, 5, 0, 202, ++ 140, 5, 0, 150, 140, 5, 0, 39, 148, 5, 0, 176, 145, 5, 0, 225, 142, ++ 5, 0, 105, 150, 5, 0, 201, 151, 5, 0, 179, 147, 5, 0, 105, 138, 5, 0, ++ 182, 141, 5, 0, 117, 145, 5, 0, 148, 248, 2, 128, 99, 120, 79, 234, ++ 8, 40, 152, 68, 31, 250, 136, 248, 79, 234, 216, 51, 0, 147, 5, 34, ++ 1, 35, 55, 168, 181, 73, 253, 247, 7, 254, 8, 244, 240, 67, 219, 18, ++ 0, 147, 5, 34, 1, 35, 55, 168, 177, 73, 253, 247, 253, 253, 8, 244, ++ 224, 99, 27, 18, 0, 147, 5, 34, 1, 35, 55, 168, 173, 73, 253, 247, 243, ++ 253, 8, 240, 128, 3, 219, 17, 0, 147, 2, 34, 1, 35, 55, 168, 166, 73, ++ 253, 247, 233, 253, 8, 240, 120, 3, 219, 16, 0, 147, 2, 34, 1, 35, 55, ++ 168, 162, 73, 253, 247, 223, 253, 8, 240, 7, 3, 0, 147, 2, 34, 1, 35, ++ 55, 168, 159, 73, 253, 247, 214, 253, 35, 121, 228, 120, 27, 2, 28, ++ 25, 164, 178, 79, 240, 1, 8, 79, 234, 212, 57, 5, 34, 104, 35, 55, 168, ++ 152, 73, 4, 244, 240, 74, 79, 234, 234, 42, 141, 232, 0, 3, 4, 244, ++ 224, 100, 253, 247, 191, 253, 5, 34, 104, 35, 55, 168, 146, 73, 36, ++ 18, 141, 232, 0, 5, 253, 247, 182, 253, 104, 35, 55, 168, 143, 73, 5, ++ 34, 205, 248, 0, 128, 1, 148, 253, 247, 173, 253, 5, 34, 55, 168, 109, ++ 35, 136, 73, 141, 232, 0, 3, 253, 247, 165, 253, 5, 34, 109, 35, 55, ++ 168, 133, 73, 141, 232, 0, 5, 253, 247, 157, 253, 55, 168, 131, 73, ++ 5, 34, 109, 35, 205, 248, 0, 128, 1, 148, 253, 247, 148, 253, 0, 240, ++ 207, 188, 148, 248, 2, 128, 99, 120, 79, 234, 8, 40, 152, 68, 31, 250, ++ 136, 248, 79, 234, 216, 51, 0, 147, 5, 34, 2, 35, 55, 168, 114, 73, ++ 253, 247, 129, 253, 8, 244, 240, 67, 219, 18, 0, 147, 5, 34, 2, 35, ++ 55, 168, 110, 73, 253, 247, 119, 253, 8, 244, 224, 99, 27, 18, 0, 147, ++ 5, 34, 2, 35, 55, 168, 106, 73, 253, 247, 109, 253, 8, 240, 128, 3, ++ 2, 34, 219, 17, 0, 147, 55, 168, 19, 70, 99, 73, 253, 247, 99, 253, ++ 8, 240, 120, 3, 2, 34, 219, 16, 0, 147, 55, 168, 19, 70, 95, 73, 253, ++ 247, 89, 253, 2, 34, 8, 240, 7, 3, 0, 147, 55, 168, 19, 70, 92, 73, ++ 253, 247, 80, 253, 35, 121, 228, 120, 27, 2, 28, 25, 164, 178, 79, 240, ++ 2, 8, 79, 234, 212, 57, 5, 34, 104, 35, 55, 168, 85, 73, 4, 244, 240, ++ 74, 79, 234, 234, 42, 141, 232, 0, 3, 4, 244, 224, 100, 253, 247, 57, ++ 253, 5, 34, 104, 35, 55, 168, 79, 73, 36, 18, 141, 232, 0, 5, 253, 247, ++ 48, 253, 5, 34, 104, 35, 55, 168, 76, 73, 205, 248, 0, 128, 1, 148, ++ 253, 247, 39, 253, 109, 35, 55, 168, 70, 73, 5, 34, 141, 232, 0, 3, ++ 253, 247, 31, 253, 5, 34, 55, 168, 109, 35, 66, 73, 141, 232, 0, 5, ++ 253, 247, 23, 253, 55, 168, 64, 73, 5, 34, 109, 35, 205, 248, 0, 128, ++ 1, 148, 253, 247, 14, 253, 0, 240, 73, 188, 148, 248, 2, 224, 99, 120, ++ 79, 234, 14, 46, 40, 34, 115, 68, 55, 168, 56, 73, 253, 247, 1, 253, ++ 148, 248, 4, 224, 227, 120, 79, 234, 14, 46, 40, 34, 115, 68, 55, 168, ++ 52, 73, 253, 247, 246, 252, 148, 248, 6, 224, 99, 121, 79, 234, 14, ++ 46, 80, 34, 115, 68, 55, 168, 45, 73, 253, 247, 235, 252, 35, 122, 228, ++ 121, 27, 2, 55, 168, 43, 73, 80, 34, 27, 25, 253, 247, 226, 252, 0, ++ 240, 29, 188, 162, 120, 99, 120, 0, 146, 226, 120, 37, 33, 1, 146, 34, ++ 121, 29, 168, 2, 146, 98, 121, 3, 146, 162, 121, 4, 146, 226, 121, 5, ++ 146, 34, 122, 6, 146, 98, 122, 7, 146, 162, 122, 8, 146, 226, 122, 9, ++ 146, 34, 123, 10, 146, 98, 123, 11, 146, 162, 123, 12, 146, 226, 123, ++ 13, 146, 34, 124, 14, 146, 24, 74, 183, 243, 130, 245, 55, 168, 23, ++ 73, 29, 170, 253, 247, 183, 252, 242, 227, 124, 28, 50, 93, 55, 168, ++ 20, 73, 2, 240, 127, 2, 253, 247, 174, 252, 50, 93, 55, 168, 17, 73, ++ 210, 9, 253, 247, 168, 252, 227, 227, 163, 120, 98, 120, 55, 168, 14, ++ 73, 66, 234, 3, 34, 253, 247, 159, 252, 218, 227, 105, 150, 5, 0, 201, ++ 151, 5, 0, 179, 147, 5, 0, 105, 138, 5, 0, 182, 141, 5, 0, 117, 145, ++ 5, 0, 176, 148, 5, 0, 120, 140, 5, 0, 178, 27, 4, 0, 204, 148, 5, 0, ++ 22, 152, 5, 0, 202, 149, 5, 0, 212, 148, 5, 0, 163, 120, 98, 120, 55, ++ 168, 148, 73, 66, 234, 3, 34, 253, 247, 124, 252, 183, 227, 227, 120, ++ 34, 121, 27, 4, 67, 234, 2, 99, 98, 120, 55, 168, 19, 67, 162, 120, ++ 141, 73, 67, 234, 2, 34, 253, 247, 109, 252, 168, 227, 227, 120, 34, ++ 121, 27, 4, 67, 234, 2, 99, 98, 120, 55, 168, 19, 67, 162, 120, 135, ++ 73, 67, 234, 2, 34, 253, 247, 94, 252, 153, 227, 227, 120, 34, 121, ++ 27, 4, 67, 234, 2, 99, 98, 120, 55, 168, 19, 67, 162, 120, 128, 73, ++ 67, 234, 2, 34, 253, 247, 79, 252, 138, 227, 163, 120, 98, 120, 55, ++ 168, 125, 73, 66, 234, 3, 34, 253, 247, 70, 252, 129, 227, 163, 120, ++ 98, 120, 55, 168, 121, 73, 66, 234, 3, 34, 253, 247, 61, 252, 120, 227, ++ 163, 120, 98, 120, 55, 168, 118, 73, 66, 234, 3, 34, 253, 247, 52, 252, ++ 111, 227, 163, 120, 98, 120, 55, 168, 114, 73, 66, 234, 3, 34, 253, ++ 247, 43, 252, 102, 227, 148, 248, 1, 144, 95, 234, 153, 9, 0, 240, 97, ++ 131, 79, 240, 0, 8, 161, 121, 226, 121, 9, 2, 148, 248, 3, 224, 65, ++ 234, 2, 65, 98, 121, 35, 121, 10, 67, 79, 234, 14, 46, 78, 234, 3, 78, ++ 163, 120, 0, 146, 97, 122, 162, 122, 9, 2, 65, 234, 2, 65, 34, 122, ++ 55, 168, 10, 67, 1, 146, 33, 123, 98, 123, 9, 2, 65, 234, 2, 65, 226, ++ 122, 78, 234, 3, 3, 10, 67, 2, 146, 91, 73, 66, 70, 8, 241, 1, 8, 253, ++ 247, 249, 251, 12, 52, 200, 69, 211, 219, 49, 227, 55, 168, 86, 73, ++ 98, 120, 253, 247, 240, 251, 43, 227, 55, 168, 84, 73, 98, 120, 253, ++ 247, 234, 251, 37, 227, 34, 122, 225, 121, 35, 121, 17, 67, 162, 121, ++ 148, 248, 3, 224, 17, 67, 98, 121, 78, 234, 3, 14, 163, 120, 10, 67, ++ 78, 234, 3, 14, 99, 120, 0, 146, 34, 123, 225, 122, 78, 234, 3, 3, 17, ++ 67, 162, 122, 55, 168, 17, 67, 98, 122, 10, 67, 1, 146, 34, 124, 225, ++ 123, 17, 67, 162, 123, 17, 67, 98, 123, 10, 67, 2, 146, 65, 73, 0, 34, ++ 253, 247, 193, 251, 34, 126, 225, 125, 35, 125, 17, 67, 162, 125, 148, ++ 248, 19, 224, 17, 67, 98, 125, 78, 234, 3, 14, 163, 124, 10, 67, 78, ++ 234, 3, 14, 99, 124, 0, 146, 34, 127, 225, 126, 55, 168, 17, 67, 162, ++ 126, 78, 234, 3, 3, 17, 67, 98, 126, 10, 67, 1, 146, 148, 248, 32, 32, ++ 225, 127, 17, 67, 162, 127, 10, 67, 97, 127, 10, 67, 2, 146, 44, 73, ++ 1, 34, 253, 247, 152, 251, 211, 226, 163, 120, 100, 120, 27, 2, 28, ++ 25, 164, 178, 4, 240, 15, 3, 0, 147, 40, 34, 0, 35, 55, 168, 37, 73, ++ 253, 247, 137, 251, 4, 240, 240, 3, 27, 17, 0, 147, 40, 34, 1, 35, 55, ++ 168, 32, 73, 253, 247, 127, 251, 4, 244, 112, 99, 27, 18, 0, 147, 40, ++ 34, 2, 35, 55, 168, 27, 73, 253, 247, 117, 251, 55, 168, 26, 73, 40, ++ 34, 227, 11, 253, 247, 111, 251, 170, 226, 33, 121, 226, 120, 9, 2, ++ 138, 24, 148, 248, 2, 224, 99, 120, 0, 146, 162, 121, 97, 121, 18, 2, ++ 82, 24, 79, 234, 14, 46, 1, 146, 55, 168, 16, 73, 0, 34, 115, 68, 253, ++ 247, 89, 251, 148, 226, 55, 140, 5, 0, 163, 150, 5, 0, 187, 150, 5, ++ 0, 211, 150, 5, 0, 188, 145, 5, 0, 209, 145, 5, 0, 230, 145, 5, 0, 251, ++ 145, 5, 0, 204, 147, 5, 0, 136, 148, 5, 0, 56, 141, 5, 0, 221, 144, ++ 5, 0, 253, 144, 5, 0, 81, 150, 5, 0, 183, 138, 5, 0, 33, 121, 226, 120, ++ 9, 2, 138, 24, 148, 248, 2, 224, 99, 120, 0, 146, 161, 121, 98, 121, ++ 9, 2, 138, 24, 1, 146, 33, 122, 226, 121, 9, 2, 138, 24, 2, 146, 161, ++ 122, 98, 122, 9, 2, 138, 24, 3, 146, 33, 123, 226, 122, 9, 2, 138, 24, ++ 4, 146, 161, 123, 98, 123, 9, 2, 138, 24, 5, 146, 33, 124, 226, 123, ++ 9, 2, 138, 24, 6, 146, 161, 124, 98, 124, 9, 2, 138, 24, 7, 146, 33, ++ 125, 226, 124, 9, 2, 138, 24, 8, 146, 161, 125, 98, 125, 9, 2, 138, ++ 24, 9, 146, 34, 126, 225, 125, 18, 2, 82, 24, 79, 234, 14, 46, 10, 146, ++ 55, 168, 123, 73, 0, 34, 115, 68, 253, 247, 248, 250, 51, 226, 33, 121, ++ 226, 120, 9, 2, 138, 24, 148, 248, 2, 224, 99, 120, 0, 146, 161, 121, ++ 98, 121, 9, 2, 138, 24, 1, 146, 33, 122, 226, 121, 9, 2, 138, 24, 2, ++ 146, 161, 122, 98, 122, 9, 2, 138, 24, 3, 146, 33, 123, 226, 122, 9, ++ 2, 138, 24, 4, 146, 161, 123, 98, 123, 9, 2, 138, 24, 5, 146, 33, 124, ++ 226, 123, 9, 2, 138, 24, 6, 146, 161, 124, 98, 124, 9, 2, 138, 24, 7, ++ 146, 33, 125, 226, 124, 9, 2, 138, 24, 8, 146, 161, 125, 98, 125, 9, ++ 2, 138, 24, 9, 146, 34, 126, 225, 125, 18, 2, 82, 24, 79, 234, 14, 46, ++ 10, 146, 55, 168, 90, 73, 0, 34, 115, 68, 253, 247, 181, 250, 240, 225, ++ 33, 121, 226, 120, 9, 2, 138, 24, 148, 248, 2, 224, 99, 120, 0, 146, ++ 161, 121, 98, 121, 9, 2, 138, 24, 1, 146, 33, 122, 226, 121, 9, 2, 138, ++ 24, 2, 146, 161, 122, 98, 122, 9, 2, 138, 24, 3, 146, 33, 123, 226, ++ 122, 9, 2, 138, 24, 4, 146, 161, 123, 98, 123, 9, 2, 138, 24, 5, 146, ++ 33, 124, 226, 123, 9, 2, 138, 24, 6, 146, 161, 124, 98, 124, 9, 2, 138, ++ 24, 7, 146, 33, 125, 226, 124, 9, 2, 138, 24, 8, 146, 161, 125, 98, ++ 125, 9, 2, 138, 24, 9, 146, 33, 126, 226, 125, 9, 2, 79, 234, 14, 46, ++ 138, 24, 10, 146, 115, 68, 0, 34, 55, 168, 57, 73, 253, 247, 114, 250, ++ 33, 127, 226, 126, 9, 2, 138, 24, 148, 248, 26, 224, 99, 126, 0, 146, ++ 161, 127, 98, 127, 9, 2, 138, 24, 1, 146, 148, 248, 32, 16, 226, 127, ++ 9, 2, 138, 24, 2, 146, 148, 248, 34, 16, 148, 248, 33, 32, 9, 2, 138, ++ 24, 3, 146, 148, 248, 36, 16, 148, 248, 35, 32, 9, 2, 138, 24, 4, 146, ++ 148, 248, 38, 16, 148, 248, 37, 32, 9, 2, 138, 24, 5, 146, 148, 248, ++ 40, 16, 148, 248, 39, 32, 9, 2, 138, 24, 6, 146, 148, 248, 42, 16, 148, ++ 248, 41, 32, 9, 2, 138, 24, 7, 146, 148, 248, 44, 16, 148, 248, 43, ++ 32, 9, 2, 138, 24, 8, 146, 148, 248, 46, 16, 148, 248, 45, 32, 9, 2, ++ 138, 24, 9, 146, 148, 248, 48, 32, 148, 248, 47, 16, 18, 2, 82, 24, ++ 79, 234, 14, 46, 10, 146, 55, 168, 16, 73, 1, 34, 115, 68, 253, 247, ++ 31, 250, 90, 225, 163, 120, 98, 120, 27, 2, 55, 168, 12, 73, 154, 24, ++ 253, 247, 22, 250, 81, 225, 55, 168, 10, 73, 98, 120, 253, 247, 16, ++ 250, 75, 225, 163, 120, 98, 120, 55, 168, 7, 73, 66, 234, 3, 34, 253, ++ 247, 7, 250, 66, 225, 179, 139, 5, 0, 240, 140, 5, 0, 98, 152, 5, 0, ++ 169, 143, 5, 0, 101, 139, 5, 0, 226, 138, 5, 0, 226, 120, 35, 121, 18, ++ 4, 66, 234, 3, 98, 99, 120, 33, 122, 26, 67, 227, 121, 32, 123, 27, ++ 4, 67, 234, 1, 99, 97, 121, 148, 248, 2, 192, 11, 67, 225, 122, 148, ++ 248, 6, 224, 9, 4, 65, 234, 0, 97, 96, 122, 66, 234, 12, 34, 1, 67, ++ 160, 122, 67, 234, 14, 35, 65, 234, 0, 33, 0, 145, 225, 123, 32, 124, ++ 9, 4, 65, 234, 0, 97, 96, 123, 1, 67, 160, 123, 65, 234, 0, 33, 1, 145, ++ 225, 124, 32, 125, 9, 4, 65, 234, 0, 97, 96, 124, 1, 67, 160, 124, 65, ++ 234, 0, 33, 2, 145, 225, 125, 32, 126, 9, 4, 65, 234, 0, 97, 96, 125, ++ 1, 67, 160, 125, 65, 234, 0, 33, 3, 145, 225, 126, 32, 127, 9, 4, 65, ++ 234, 0, 97, 96, 126, 1, 67, 160, 126, 65, 234, 0, 33, 4, 145, 225, 127, ++ 148, 248, 32, 0, 9, 4, 65, 234, 0, 97, 96, 127, 1, 67, 160, 127, 65, ++ 234, 0, 33, 5, 145, 148, 248, 35, 16, 148, 248, 36, 0, 9, 4, 65, 234, ++ 0, 97, 148, 248, 33, 0, 1, 67, 148, 248, 34, 0, 65, 234, 0, 33, 6, 145, ++ 148, 248, 39, 0, 148, 248, 40, 16, 0, 4, 64, 234, 1, 96, 148, 248, 37, ++ 16, 1, 67, 148, 248, 38, 0, 65, 234, 0, 33, 7, 145, 55, 168, 130, 73, ++ 253, 247, 127, 249, 186, 224, 226, 120, 35, 121, 18, 4, 66, 234, 3, ++ 98, 99, 120, 33, 122, 26, 67, 227, 121, 32, 123, 27, 4, 67, 234, 1, ++ 99, 97, 121, 148, 248, 2, 192, 11, 67, 225, 122, 148, 248, 6, 224, 9, ++ 4, 65, 234, 0, 97, 96, 122, 66, 234, 12, 34, 1, 67, 160, 122, 67, 234, ++ 14, 35, 65, 234, 0, 33, 0, 145, 225, 123, 32, 124, 9, 4, 65, 234, 0, ++ 97, 96, 123, 1, 67, 160, 123, 65, 234, 0, 33, 1, 145, 225, 124, 32, ++ 125, 9, 4, 65, 234, 0, 97, 96, 124, 1, 67, 160, 124, 65, 234, 0, 33, ++ 2, 145, 225, 125, 32, 126, 9, 4, 65, 234, 0, 97, 96, 125, 1, 67, 160, ++ 125, 65, 234, 0, 33, 3, 145, 225, 126, 32, 127, 9, 4, 65, 234, 0, 97, ++ 96, 126, 1, 67, 160, 126, 65, 234, 0, 33, 4, 145, 225, 127, 148, 248, ++ 32, 0, 9, 4, 65, 234, 0, 97, 96, 127, 1, 67, 160, 127, 65, 234, 0, 33, ++ 5, 145, 148, 248, 35, 16, 148, 248, 36, 0, 9, 4, 65, 234, 0, 97, 148, ++ 248, 33, 0, 1, 67, 148, 248, 34, 0, 65, 234, 0, 33, 6, 145, 148, 248, ++ 39, 0, 148, 248, 40, 16, 0, 4, 64, 234, 1, 96, 148, 248, 37, 16, 1, ++ 67, 148, 248, 38, 0, 65, 234, 0, 33, 7, 145, 55, 168, 69, 73, 253, 247, ++ 3, 249, 62, 224, 11, 45, 60, 209, 163, 120, 98, 120, 27, 2, 210, 24, ++ 55, 168, 65, 73, 253, 247, 248, 248, 35, 121, 226, 120, 27, 2, 210, ++ 24, 55, 168, 62, 73, 253, 247, 240, 248, 163, 121, 98, 121, 27, 2, 210, ++ 24, 55, 168, 59, 73, 253, 247, 232, 248, 35, 122, 226, 121, 27, 2, 210, ++ 24, 55, 168, 56, 73, 253, 247, 224, 248, 162, 122, 99, 122, 18, 2, 55, ++ 168, 53, 73, 154, 24, 253, 247, 216, 248, 19, 224, 227, 120, 34, 121, ++ 27, 4, 67, 234, 2, 99, 98, 120, 55, 168, 19, 67, 162, 120, 47, 73, 67, ++ 234, 2, 34, 253, 247, 201, 248, 4, 224, 0, 33, 20, 145, 1, 224, 1, 34, ++ 19, 146, 16, 153, 123, 25, 255, 41, 125, 244, 97, 169, 21, 154, 1, 50, ++ 21, 146, 21, 155, 27, 153, 139, 66, 125, 244, 81, 169, 17, 154, 81, ++ 28, 3, 208, 55, 168, 34, 73, 253, 247, 175, 248, 157, 248, 156, 48, ++ 35, 177, 55, 168, 32, 73, 39, 170, 253, 247, 167, 248, 22, 155, 10, ++ 43, 12, 216, 0, 32, 29, 73, 183, 243, 120, 247, 56, 185, 19, 153, 41, ++ 185, 55, 168, 26, 73, 19, 154, 255, 35, 253, 247, 151, 248, 56, 154, ++ 0, 35, 2, 248, 1, 59, 68, 155, 26, 152, 0, 147, 18, 153, 24, 155, 56, ++ 146, 253, 247, 107, 248, 4, 70, 18, 152, 190, 247, 4, 253, 1, 224, 111, ++ 240, 1, 4, 32, 70, 59, 176, 189, 232, 240, 143, 1, 33, 19, 145, 185, ++ 231, 0, 191, 38, 144, 5, 0, 99, 144, 5, 0, 179, 146, 5, 0, 199, 146, ++ 5, 0, 219, 146, 5, 0, 239, 146, 5, 0, 3, 147, 5, 0, 144, 145, 5, 0, ++ 129, 147, 5, 0, 88, 141, 5, 0, 170, 140, 5, 0, 0, 139, 5, 0, 45, 233, ++ 240, 79, 141, 176, 5, 146, 5, 70, 138, 70, 6, 168, 0, 33, 20, 34, 152, ++ 70, 11, 145, 183, 243, 183, 240, 89, 75, 28, 120, 0, 44, 64, 240, 163, ++ 128, 107, 105, 35, 43, 12, 221, 28, 34, 40, 70, 33, 70, 35, 70, 0, 148, ++ 193, 243, 74, 246, 0, 40, 6, 218, 1, 38, 2, 39, 177, 70, 5, 224, 4, ++ 39, 1, 38, 1, 224, 12, 39, 3, 38, 161, 70, 40, 70, 193, 243, 205, 245, ++ 1, 40, 131, 70, 2, 208, 2, 40, 19, 209, 5, 224, 40, 70, 81, 70, 183, ++ 243, 55, 240, 64, 0, 11, 224, 40, 70, 252, 247, 159, 255, 4, 70, 56, ++ 177, 252, 247, 145, 255, 194, 5, 3, 213, 32, 70, 252, 247, 145, 255, ++ 11, 144, 11, 152, 0, 40, 78, 208, 190, 247, 149, 252, 4, 70, 0, 40, ++ 110, 208, 187, 241, 1, 15, 3, 208, 187, 241, 2, 15, 27, 209, 11, 224, ++ 11, 155, 0, 33, 1, 147, 2, 144, 5, 154, 40, 70, 83, 70, 0, 145, 3, 145, ++ 183, 243, 12, 240, 12, 224, 11, 154, 12, 171, 82, 8, 67, 248, 4, 45, ++ 40, 70, 1, 33, 34, 70, 252, 247, 164, 255, 11, 155, 91, 0, 11, 147, ++ 0, 40, 64, 209, 34, 136, 79, 246, 253, 115, 1, 58, 146, 178, 154, 66, ++ 3, 217, 32, 70, 190, 247, 105, 252, 28, 224, 185, 241, 0, 15, 3, 208, ++ 4, 235, 71, 7, 6, 151, 25, 224, 227, 25, 98, 136, 6, 147, 163, 136, ++ 167, 245, 128, 87, 7, 235, 18, 34, 27, 6, 2, 235, 19, 67, 227, 24, 7, ++ 147, 227, 136, 219, 25, 227, 24, 8, 147, 35, 137, 223, 25, 231, 25, ++ 9, 151, 3, 224, 21, 75, 0, 36, 6, 147, 1, 38, 22, 154, 80, 70, 0, 146, ++ 6, 169, 50, 70, 67, 70, 253, 247, 20, 248, 80, 185, 22, 155, 40, 70, ++ 26, 104, 216, 248, 0, 16, 1, 240, 12, 253, 216, 248, 0, 32, 11, 75, ++ 26, 96, 20, 177, 32, 70, 190, 247, 47, 252, 6, 74, 1, 35, 19, 112, 22, ++ 155, 0, 32, 200, 248, 0, 0, 24, 96, 1, 224, 111, 240, 26, 0, 13, 176, ++ 189, 232, 240, 143, 157, 110, 4, 0, 196, 142, 5, 0, 236, 150, 5, 0, ++ 48, 181, 25, 70, 3, 155, 4, 156, 67, 177, 76, 177, 0, 37, 29, 96, 37, ++ 96, 3, 148, 189, 232, 48, 64, 255, 247, 44, 191, 24, 70, 48, 189, 32, ++ 70, 48, 189, 1, 75, 0, 34, 26, 112, 112, 71, 157, 110, 4, 0, 112, 181, ++ 12, 78, 13, 70, 48, 104, 128, 185, 11, 73, 188, 247, 224, 250, 1, 36, ++ 4, 224, 32, 70, 0, 33, 188, 247, 218, 250, 1, 52, 51, 104, 156, 66, ++ 247, 217, 3, 75, 40, 70, 29, 96, 112, 189, 79, 240, 255, 48, 112, 189, ++ 0, 191, 208, 7, 0, 0, 173, 222, 173, 222, 6, 75, 26, 104, 25, 70, 50, ++ 177, 1, 35, 0, 224, 1, 51, 147, 66, 252, 217, 0, 35, 11, 96, 0, 32, ++ 112, 71, 0, 191, 208, 7, 0, 0, 45, 233, 240, 71, 12, 70, 22, 104, 130, ++ 70, 21, 70, 8, 70, 132, 34, 0, 33, 152, 70, 157, 248, 36, 112, 182, ++ 243, 170, 247, 32, 70, 183, 243, 211, 245, 192, 178, 0, 40, 50, 208, ++ 1, 35, 35, 112, 157, 248, 32, 48, 160, 112, 0, 51, 24, 191, 1, 35, 227, ++ 112, 40, 35, 40, 46, 180, 191, 177, 70, 79, 240, 40, 9, 164, 248, 14, ++ 128, 103, 112, 163, 129, 0, 38, 21, 224, 80, 70, 65, 70, 58, 70, 187, ++ 243, 162, 245, 48, 185, 99, 104, 0, 43, 12, 191, 111, 240, 26, 0, 0, ++ 32, 11, 224, 163, 120, 1, 54, 195, 112, 99, 104, 67, 97, 35, 137, 96, ++ 96, 1, 51, 35, 129, 78, 69, 231, 219, 0, 32, 35, 137, 99, 129, 43, 96, ++ 189, 232, 240, 135, 79, 240, 255, 48, 189, 232, 240, 135, 248, 181, ++ 6, 70, 12, 70, 0, 37, 11, 224, 123, 105, 48, 70, 99, 96, 0, 35, 123, ++ 97, 251, 112, 57, 70, 226, 120, 190, 247, 174, 251, 1, 53, 173, 178, ++ 103, 104, 0, 47, 240, 209, 35, 137, 32, 70, 91, 27, 35, 129, 99, 137, ++ 93, 27, 101, 129, 183, 243, 108, 245, 167, 112, 39, 112, 56, 70, 248, ++ 189, 16, 181, 195, 124, 3, 43, 8, 208, 156, 29, 0, 235, 196, 4, 1, 51, ++ 97, 96, 162, 96, 195, 116, 0, 32, 16, 189, 79, 240, 255, 48, 16, 189, ++ 45, 233, 248, 67, 17, 240, 31, 6, 24, 191, 1, 38, 6, 235, 81, 23, 7, ++ 241, 7, 9, 79, 234, 137, 9, 72, 70, 13, 70, 1, 240, 31, 8, 190, 247, ++ 68, 251, 4, 70, 0, 40, 59, 208, 0, 33, 74, 70, 191, 178, 182, 243, 34, ++ 247, 103, 128, 165, 128, 229, 128, 164, 96, 33, 70, 34, 70, 0, 35, 3, ++ 224, 79, 240, 255, 48, 144, 97, 1, 51, 4, 50, 187, 66, 248, 211, 86, ++ 177, 79, 240, 255, 50, 2, 250, 8, 248, 123, 29, 4, 235, 131, 3, 90, ++ 104, 130, 234, 8, 2, 90, 96, 23, 240, 31, 3, 24, 191, 1, 35, 7, 240, ++ 31, 0, 3, 235, 87, 23, 39, 128, 0, 34, 3, 224, 79, 240, 255, 53, 141, ++ 96, 1, 50, 4, 49, 186, 66, 248, 211, 67, 177, 79, 240, 255, 51, 131, ++ 64, 1, 55, 4, 235, 135, 7, 122, 104, 83, 64, 123, 96, 32, 70, 189, 232, ++ 248, 131, 8, 70, 190, 247, 2, 187, 67, 107, 35, 177, 79, 244, 127, 98, ++ 154, 96, 67, 107, 5, 224, 131, 107, 75, 177, 79, 244, 127, 98, 154, ++ 96, 131, 107, 152, 104, 208, 241, 1, 0, 56, 191, 0, 32, 112, 71, 1, ++ 32, 112, 71, 3, 70, 0, 32, 1, 224, 1, 48, 192, 178, 91, 8, 251, 209, ++ 112, 71, 11, 104, 67, 244, 64, 51, 11, 96, 8, 104, 11, 104, 0, 244, ++ 64, 48, 35, 244, 64, 51, 11, 96, 160, 245, 64, 49, 72, 66, 64, 235, ++ 1, 0, 112, 71, 8, 181, 65, 107, 9, 185, 129, 107, 33, 177, 128, 106, ++ 255, 247, 231, 255, 1, 32, 8, 189, 8, 70, 8, 189, 45, 233, 240, 71, ++ 221, 248, 32, 128, 31, 136, 9, 157, 16, 70, 137, 70, 20, 70, 30, 70, ++ 57, 70, 66, 70, 43, 70, 187, 243, 28, 242, 130, 70, 232, 177, 1, 35, ++ 19, 250, 7, 247, 43, 104, 1, 59, 219, 25, 179, 251, 247, 243, 95, 67, ++ 99, 30, 219, 25, 95, 64, 23, 234, 9, 15, 14, 208, 32, 70, 255, 247, ++ 184, 255, 48, 128, 80, 70, 187, 243, 14, 242, 49, 136, 32, 70, 66, 70, ++ 43, 70, 189, 232, 240, 71, 187, 243, 252, 177, 80, 70, 189, 232, 240, ++ 135, 112, 181, 0, 35, 1, 41, 12, 191, 176, 248, 70, 32, 176, 248, 108, ++ 32, 134, 176, 4, 147, 176, 248, 68, 48, 18, 1, 1, 41, 4, 70, 173, 248, ++ 22, 48, 13, 70, 128, 106, 65, 246, 255, 115, 41, 209, 4, 174, 212, 248, ++ 196, 16, 0, 150, 4, 241, 92, 6, 1, 150, 153, 66, 20, 191, 79, 244, 128, ++ 49, 79, 244, 0, 81, 4, 241, 80, 6, 13, 241, 22, 3, 2, 150, 255, 247, ++ 164, 255, 0, 40, 64, 208, 189, 248, 22, 48, 226, 109, 21, 250, 3, 243, ++ 81, 30, 201, 24, 177, 251, 243, 241, 75, 67, 163, 101, 155, 26, 155, ++ 178, 192, 24, 164, 248, 96, 48, 4, 155, 224, 99, 99, 102, 43, 224, 4, ++ 173, 212, 248, 204, 16, 0, 149, 4, 241, 132, 5, 1, 149, 153, 66, 20, ++ 191, 79, 244, 128, 49, 79, 244, 0, 81, 4, 241, 120, 5, 13, 241, 22, ++ 3, 2, 149, 255, 247, 122, 255, 184, 177, 189, 248, 22, 48, 1, 37, 21, ++ 250, 3, 243, 212, 248, 132, 32, 81, 30, 201, 24, 177, 251, 243, 241, ++ 75, 67, 196, 248, 128, 48, 155, 26, 155, 178, 192, 24, 164, 248, 136, ++ 48, 4, 155, 32, 100, 196, 248, 140, 48, 40, 70, 6, 176, 112, 189, 255, ++ 247, 143, 191, 45, 233, 247, 79, 141, 232, 3, 0, 14, 174, 224, 32, 20, ++ 70, 154, 70, 13, 159, 150, 232, 64, 10, 221, 248, 76, 128, 190, 247, ++ 19, 250, 5, 70, 0, 40, 0, 240, 121, 129, 0, 33, 224, 34, 182, 243, 241, ++ 245, 154, 75, 0, 33, 184, 241, 0, 15, 8, 191, 152, 70, 10, 70, 197, ++ 248, 28, 128, 32, 70, 193, 243, 121, 243, 12, 155, 192, 243, 0, 48, ++ 171, 99, 147, 75, 3, 33, 43, 96, 0, 34, 133, 248, 48, 0, 197, 248, 52, ++ 160, 40, 70, 188, 247, 8, 254, 8, 34, 5, 241, 32, 0, 1, 153, 182, 243, ++ 176, 246, 0, 35, 133, 248, 39, 48, 0, 155, 236, 98, 171, 98, 187, 241, ++ 255, 63, 20, 191, 91, 70, 204, 35, 185, 241, 204, 15, 136, 191, 195, ++ 235, 9, 9, 197, 248, 152, 48, 189, 248, 68, 48, 165, 248, 70, 112, 197, ++ 248, 156, 48, 157, 248, 72, 48, 165, 248, 108, 96, 197, 248, 160, 48, ++ 12, 155, 165, 248, 148, 144, 0, 43, 69, 208, 170, 107, 19, 104, 217, ++ 7, 4, 213, 35, 240, 1, 3, 19, 96, 170, 107, 19, 96, 171, 107, 79, 240, ++ 255, 50, 154, 96, 32, 70, 193, 243, 51, 243, 64, 246, 60, 3, 152, 66, ++ 18, 209, 232, 106, 193, 243, 60, 243, 5, 40, 9, 208, 232, 106, 193, ++ 243, 55, 243, 8, 40, 4, 208, 232, 106, 193, 243, 50, 243, 12, 40, 3, ++ 209, 171, 107, 79, 240, 255, 50, 154, 96, 171, 107, 154, 104, 18, 5, ++ 18, 13, 26, 177, 90, 104, 66, 240, 15, 2, 1, 224, 65, 246, 255, 114, ++ 197, 248, 204, 32, 26, 104, 2, 244, 224, 18, 146, 12, 133, 248, 181, ++ 32, 26, 104, 2, 244, 96, 2, 82, 13, 133, 248, 186, 32, 27, 104, 3, 240, ++ 64, 115, 27, 14, 133, 248, 187, 48, 186, 241, 0, 15, 77, 208, 106, 107, ++ 19, 104, 216, 7, 4, 213, 35, 240, 1, 3, 19, 96, 106, 107, 19, 96, 107, ++ 107, 79, 240, 255, 50, 154, 96, 232, 106, 193, 243, 234, 242, 64, 246, ++ 60, 3, 152, 66, 18, 209, 232, 106, 193, 243, 243, 242, 5, 40, 9, 208, ++ 232, 106, 193, 243, 238, 242, 8, 40, 4, 208, 232, 106, 193, 243, 233, ++ 242, 12, 40, 3, 209, 107, 107, 79, 240, 255, 50, 154, 96, 107, 107, ++ 154, 104, 18, 5, 18, 13, 26, 177, 90, 104, 66, 240, 15, 2, 1, 224, 65, ++ 246, 255, 114, 197, 248, 196, 32, 197, 248, 200, 32, 26, 104, 2, 244, ++ 224, 18, 146, 12, 133, 248, 182, 32, 26, 104, 2, 244, 224, 114, 146, ++ 9, 133, 248, 183, 32, 26, 104, 2, 244, 96, 2, 82, 13, 133, 248, 184, ++ 32, 27, 104, 3, 240, 64, 115, 27, 14, 133, 248, 185, 48, 98, 104, 0, ++ 35, 1, 42, 197, 248, 164, 48, 197, 248, 172, 48, 24, 209, 162, 104, ++ 178, 245, 2, 111, 3, 208, 64, 246, 60, 1, 138, 66, 2, 209, 79, 240, ++ 0, 67, 3, 224, 79, 240, 128, 66, 197, 248, 164, 32, 197, 248, 168, 48, ++ 213, 248, 164, 48, 197, 248, 172, 48, 213, 248, 168, 48, 197, 248, 176, ++ 48, 32, 70, 193, 243, 136, 242, 64, 246, 41, 3, 152, 66, 8, 209, 32, ++ 70, 193, 243, 145, 242, 32, 177, 32, 70, 193, 243, 141, 242, 2, 40, ++ 15, 217, 32, 70, 193, 243, 120, 242, 64, 246, 52, 3, 152, 66, 12, 209, ++ 32, 70, 193, 243, 129, 242, 32, 177, 32, 70, 193, 243, 125, 242, 1, ++ 40, 3, 209, 0, 35, 133, 248, 49, 48, 4, 224, 40, 70, 255, 247, 23, 254, ++ 133, 248, 49, 0, 40, 70, 255, 247, 228, 253, 133, 248, 180, 0, 104, ++ 177, 13, 35, 255, 47, 165, 248, 68, 48, 12, 216, 255, 46, 9, 216, 12, ++ 35, 5, 224, 0, 191, 0, 111, 4, 0, 20, 46, 4, 0, 4, 35, 165, 248, 68, ++ 48, 79, 177, 188, 0, 32, 70, 190, 247, 202, 248, 232, 100, 104, 179, ++ 0, 33, 34, 70, 182, 243, 170, 244, 78, 177, 180, 0, 32, 70, 190, 247, ++ 191, 248, 104, 103, 16, 179, 0, 33, 34, 70, 182, 243, 159, 244, 39, ++ 177, 40, 70, 1, 33, 255, 247, 144, 254, 192, 177, 38, 177, 40, 70, 2, ++ 33, 255, 247, 138, 254, 144, 177, 213, 248, 164, 48, 91, 177, 149, 248, ++ 49, 48, 67, 185, 171, 109, 179, 241, 128, 79, 8, 216, 213, 248, 128, ++ 48, 179, 241, 128, 79, 3, 216, 1, 35, 133, 248, 221, 48, 3, 224, 40, ++ 70, 185, 243, 175, 247, 0, 37, 40, 70, 189, 232, 254, 143, 0, 191, 16, ++ 181, 4, 70, 193, 243, 84, 244, 0, 33, 32, 70, 10, 70, 193, 243, 3, 242, ++ 192, 4, 7, 213, 32, 70, 193, 243, 126, 241, 0, 40, 12, 191, 32, 32, ++ 64, 32, 16, 189, 32, 32, 16, 189, 45, 233, 240, 71, 4, 70, 38, 106, ++ 9, 169, 4, 46, 102, 106, 157, 248, 32, 0, 204, 191, 6, 244, 120, 22, ++ 6, 244, 240, 22, 145, 232, 34, 2, 118, 12, 79, 240, 0, 8, 75, 224, 49, ++ 248, 40, 160, 31, 250, 131, 252, 226, 69, 1, 235, 136, 7, 3, 209, 151, ++ 248, 2, 192, 132, 69, 4, 208, 8, 241, 1, 8, 95, 250, 136, 248, 58, 224, ++ 0, 42, 53, 208, 6, 251, 8, 248, 0, 37, 46, 224, 99, 105, 32, 70, 34, ++ 43, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 193, 243, ++ 128, 242, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 204, 98, 193, 243, ++ 200, 241, 5, 96, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 91, 6, ++ 7, 213, 64, 246, 39, 1, 0, 34, 193, 243, 107, 242, 1, 70, 32, 70, 0, ++ 224, 0, 33, 64, 242, 100, 98, 193, 243, 179, 241, 9, 235, 136, 3, 83, ++ 248, 37, 48, 1, 53, 3, 96, 235, 178, 179, 66, 205, 211, 248, 120, 189, ++ 232, 240, 135, 168, 69, 177, 211, 0, 32, 189, 232, 240, 135, 45, 233, ++ 248, 67, 4, 70, 30, 70, 0, 43, 0, 240, 180, 128, 67, 106, 2, 235, 6, ++ 21, 3, 244, 248, 89, 79, 234, 25, 41, 85, 248, 4, 60, 1, 62, 11, 185, ++ 0, 39, 159, 224, 32, 70, 152, 71, 0, 40, 0, 240, 158, 128, 247, 231, ++ 1, 34, 186, 64, 85, 248, 16, 60, 26, 66, 0, 240, 146, 128, 99, 105, ++ 32, 70, 34, 43, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, ++ 34, 193, 243, 37, 242, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 196, 98, ++ 193, 243, 109, 241, 7, 96, 21, 249, 12, 44, 34, 177, 1, 42, 25, 208, ++ 1, 50, 117, 209, 68, 224, 99, 105, 32, 70, 34, 43, 9, 221, 227, 105, ++ 91, 6, 6, 213, 64, 246, 39, 1, 193, 243, 9, 242, 1, 70, 32, 70, 0, 224, ++ 0, 33, 64, 242, 36, 98, 193, 243, 81, 241, 85, 248, 8, 60, 3, 96, 93, ++ 224, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 89, 6, 7, 213, 64, ++ 246, 39, 1, 0, 34, 193, 243, 241, 241, 1, 70, 32, 70, 0, 224, 0, 33, ++ 64, 242, 36, 98, 193, 243, 57, 241, 99, 105, 128, 70, 34, 43, 32, 70, ++ 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 193, 243, 220, ++ 241, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 36, 98, 193, 243, 36, 241, ++ 85, 248, 8, 60, 2, 104, 19, 67, 45, 224, 99, 105, 32, 70, 34, 43, 10, ++ 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 193, 243, 195, ++ 241, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 36, 98, 193, 243, 11, 241, ++ 99, 105, 128, 70, 34, 43, 32, 70, 10, 221, 227, 105, 89, 6, 7, 213, ++ 64, 246, 39, 1, 0, 34, 193, 243, 174, 241, 1, 70, 32, 70, 0, 224, 0, ++ 33, 64, 242, 36, 98, 193, 243, 246, 240, 85, 248, 8, 44, 3, 104, 35, ++ 234, 2, 3, 200, 248, 0, 48, 1, 55, 79, 69, 127, 244, 99, 175, 16, 61, ++ 0, 46, 127, 244, 83, 175, 189, 232, 248, 131, 0, 0, 112, 181, 157, 73, ++ 4, 70, 0, 32, 183, 243, 142, 241, 0, 40, 0, 240, 49, 129, 0, 32, 152, ++ 73, 183, 243, 135, 241, 151, 73, 5, 70, 0, 32, 183, 243, 130, 241, 148, ++ 73, 6, 70, 0, 32, 183, 243, 125, 241, 21, 240, 0, 101, 0, 240, 172, ++ 128, 79, 244, 0, 18, 0, 33, 19, 70, 32, 70, 189, 247, 11, 249, 2, 34, ++ 6, 33, 19, 70, 32, 70, 193, 243, 130, 241, 99, 105, 32, 70, 34, 43, ++ 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 193, 243, 96, ++ 241, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 193, 98, 193, 243, 168, ++ 240, 6, 104, 0, 37, 6, 244, 128, 118, 27, 224, 79, 244, 122, 112, 186, ++ 243, 105, 246, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 91, 6, 7, ++ 213, 64, 246, 39, 1, 50, 70, 193, 243, 67, 241, 1, 70, 32, 70, 0, 224, ++ 0, 33, 79, 244, 193, 98, 193, 243, 139, 240, 6, 104, 1, 53, 6, 244, ++ 128, 118, 30, 185, 181, 245, 122, 127, 223, 209, 112, 189, 181, 245, ++ 122, 127, 0, 240, 212, 128, 79, 244, 122, 112, 186, 243, 68, 246, 8, ++ 34, 6, 33, 19, 70, 32, 70, 193, 243, 58, 241, 0, 35, 6, 33, 4, 34, 32, ++ 70, 193, 243, 52, 241, 79, 244, 122, 112, 186, 243, 52, 246, 99, 105, ++ 32, 70, 34, 43, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, ++ 34, 193, 243, 14, 241, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 192, 98, ++ 193, 243, 86, 240, 5, 104, 0, 38, 5, 240, 1, 5, 27, 224, 79, 244, 122, ++ 112, 186, 243, 23, 246, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, ++ 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 193, 243, 241, 240, 1, 70, 32, ++ 70, 0, 224, 0, 33, 79, 244, 192, 98, 193, 243, 57, 240, 5, 104, 1, 54, ++ 5, 240, 1, 5, 29, 177, 182, 245, 122, 127, 223, 209, 2, 224, 182, 245, ++ 122, 127, 3, 209, 32, 70, 6, 33, 8, 34, 121, 224, 41, 70, 79, 244, 128, ++ 18, 43, 70, 32, 70, 189, 247, 107, 248, 32, 70, 6, 33, 1, 34, 43, 70, ++ 110, 224, 115, 1, 112, 213, 79, 244, 128, 18, 19, 70, 41, 70, 32, 70, ++ 189, 247, 93, 248, 1, 34, 6, 33, 19, 70, 32, 70, 193, 243, 212, 240, ++ 79, 244, 122, 112, 186, 243, 212, 245, 4, 34, 6, 33, 19, 70, 32, 70, ++ 193, 243, 202, 240, 6, 33, 8, 34, 43, 70, 32, 70, 193, 243, 196, 240, ++ 79, 244, 122, 112, 186, 243, 196, 245, 99, 105, 32, 70, 34, 43, 10, ++ 221, 227, 105, 94, 6, 7, 213, 64, 246, 39, 1, 42, 70, 193, 243, 158, ++ 240, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 192, 98, 192, 243, 230, ++ 247, 6, 104, 0, 37, 6, 240, 1, 6, 27, 224, 79, 244, 122, 112, 186, 243, ++ 167, 245, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 89, 6, 7, 213, ++ 64, 246, 39, 1, 50, 70, 193, 243, 129, 240, 1, 70, 32, 70, 0, 224, 0, ++ 33, 79, 244, 192, 98, 192, 243, 201, 247, 6, 104, 1, 53, 6, 240, 1, ++ 6, 30, 185, 181, 245, 122, 127, 223, 209, 2, 224, 181, 245, 122, 127, ++ 3, 209, 32, 70, 6, 33, 4, 34, 9, 224, 0, 33, 79, 244, 0, 18, 11, 70, ++ 32, 70, 188, 247, 251, 255, 32, 70, 6, 33, 2, 34, 0, 35, 189, 232, 112, ++ 64, 193, 243, 112, 176, 112, 189, 0, 191, 248, 48, 4, 0, 70, 242, 144, ++ 83, 153, 66, 16, 181, 4, 70, 9, 208, 73, 242, 24, 35, 153, 66, 7, 208, ++ 177, 245, 150, 79, 12, 191, 31, 35, 0, 35, 2, 224, 42, 35, 0, 224, 60, ++ 35, 5, 33, 255, 34, 32, 70, 189, 247, 67, 248, 79, 244, 0, 2, 6, 33, ++ 19, 70, 32, 70, 189, 247, 6, 248, 30, 32, 186, 243, 78, 245, 32, 70, ++ 6, 33, 79, 244, 0, 2, 0, 35, 189, 232, 16, 64, 188, 247, 250, 191, 0, ++ 0, 240, 181, 3, 106, 70, 106, 4, 43, 204, 191, 6, 244, 120, 22, 6, 244, ++ 240, 22, 133, 176, 4, 70, 118, 12, 0, 37, 59, 224, 16, 33, 104, 70, ++ 31, 74, 43, 70, 182, 243, 40, 242, 0, 32, 105, 70, 183, 243, 54, 240, ++ 0, 40, 46, 208, 0, 33, 10, 70, 187, 247, 6, 254, 99, 105, 7, 70, 34, ++ 43, 32, 70, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, ++ 192, 243, 255, 247, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 204, 98, ++ 192, 243, 71, 247, 5, 96, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, ++ 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 234, 247, 1, 70, 32, ++ 70, 0, 224, 0, 33, 64, 242, 100, 98, 192, 243, 50, 247, 7, 96, 1, 53, ++ 235, 178, 179, 66, 192, 211, 5, 176, 240, 189, 0, 191, 57, 153, 5, 0, ++ 240, 181, 3, 106, 133, 176, 4, 43, 4, 70, 70, 106, 3, 221, 6, 240, 248, ++ 102, 182, 13, 2, 224, 6, 240, 240, 118, 118, 13, 0, 37, 59, 224, 16, ++ 33, 104, 70, 31, 74, 43, 70, 182, 243, 212, 241, 0, 32, 105, 70, 182, ++ 243, 226, 247, 0, 40, 46, 208, 0, 33, 10, 70, 187, 247, 178, 253, 99, ++ 105, 7, 70, 34, 43, 32, 70, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, ++ 39, 1, 0, 34, 192, 243, 171, 247, 1, 70, 32, 70, 0, 224, 0, 33, 79, ++ 244, 203, 98, 192, 243, 243, 246, 5, 96, 99, 105, 32, 70, 34, 43, 10, ++ 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 150, ++ 247, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 92, 98, 192, 243, 222, 246, ++ 7, 96, 1, 53, 235, 178, 179, 66, 192, 211, 5, 176, 240, 189, 0, 191, ++ 112, 156, 5, 0, 240, 181, 3, 106, 133, 176, 4, 43, 4, 70, 70, 106, 1, ++ 221, 246, 14, 2, 224, 6, 240, 240, 86, 118, 14, 0, 37, 59, 224, 16, ++ 33, 104, 70, 30, 74, 43, 70, 182, 243, 130, 241, 0, 32, 105, 70, 182, ++ 243, 144, 247, 0, 40, 46, 208, 0, 33, 10, 70, 187, 247, 96, 253, 99, ++ 105, 7, 70, 34, 43, 32, 70, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, ++ 39, 1, 0, 34, 192, 243, 89, 247, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, ++ 202, 98, 192, 243, 161, 246, 5, 96, 99, 105, 32, 70, 34, 43, 10, 221, ++ 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 68, 247, 1, ++ 70, 32, 70, 0, 224, 0, 33, 64, 242, 84, 98, 192, 243, 140, 246, 7, 96, ++ 1, 53, 181, 66, 193, 209, 5, 176, 240, 189, 127, 156, 5, 0, 0, 72, 112, ++ 71, 192, 173, 58, 2, 45, 233, 240, 67, 4, 70, 15, 70, 133, 176, 0, 32, ++ 144, 73, 21, 70, 30, 70, 182, 243, 37, 247, 96, 185, 32, 70, 57, 70, ++ 21, 177, 255, 247, 235, 255, 7, 224, 255, 247, 232, 255, 79, 244, 122, ++ 117, 176, 251, 245, 245, 0, 224, 5, 70, 0, 32, 135, 73, 182, 243, 18, ++ 247, 0, 240, 15, 0, 1, 40, 8, 208, 2, 40, 9, 208, 131, 75, 132, 74, ++ 3, 40, 20, 191, 145, 70, 153, 70, 4, 224, 223, 248, 20, 146, 1, 224, ++ 223, 248, 16, 146, 41, 70, 32, 70, 255, 247, 166, 254, 32, 70, 192, ++ 243, 67, 246, 0, 33, 128, 70, 32, 70, 193, 243, 140, 241, 121, 75, 2, ++ 70, 0, 46, 75, 209, 1, 147, 3, 35, 2, 147, 57, 70, 32, 70, 50, 70, 43, ++ 70, 0, 150, 205, 248, 12, 144, 255, 247, 45, 252, 7, 70, 0, 40, 55, ++ 208, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 91, 6, 7, 213, 64, ++ 246, 39, 1, 50, 70, 192, 243, 213, 246, 1, 70, 32, 70, 0, 224, 0, 33, ++ 79, 244, 192, 98, 192, 243, 29, 246, 2, 104, 191, 0, 79, 246, 131, 115, ++ 19, 64, 7, 240, 124, 2, 5, 241, 127, 7, 255, 9, 1, 63, 66, 234, 7, 71, ++ 31, 67, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 89, 6, 7, 213, 64, ++ 246, 39, 1, 0, 34, 192, 243, 179, 246, 1, 70, 32, 70, 0, 224, 0, 33, ++ 79, 244, 192, 98, 192, 243, 251, 245, 7, 96, 150, 224, 41, 70, 84, 72, ++ 182, 243, 119, 240, 146, 224, 0, 33, 141, 232, 10, 0, 3, 35, 2, 147, ++ 32, 70, 57, 70, 43, 70, 205, 248, 12, 144, 255, 247, 225, 251, 0, 45, ++ 0, 240, 131, 128, 32, 70, 188, 247, 62, 252, 6, 70, 6, 224, 171, 66, ++ 3, 209, 99, 105, 34, 43, 7, 220, 18, 224, 12, 54, 0, 46, 116, 208, 51, ++ 136, 0, 43, 243, 209, 112, 224, 227, 105, 90, 6, 8, 213, 64, 246, 39, ++ 1, 32, 70, 0, 34, 192, 243, 122, 246, 1, 70, 32, 70, 1, 224, 32, 70, ++ 0, 33, 79, 244, 192, 98, 192, 243, 193, 245, 2, 104, 179, 120, 2, 240, ++ 124, 2, 179, 235, 146, 15, 87, 208, 53, 121, 243, 120, 45, 6, 27, 5, ++ 5, 240, 112, 101, 3, 244, 112, 3, 0, 33, 79, 240, 127, 98, 43, 67, 32, ++ 70, 188, 247, 96, 254, 115, 121, 2, 33, 27, 5, 45, 74, 67, 244, 0, 51, ++ 32, 70, 188, 247, 87, 254, 179, 104, 111, 240, 127, 66, 3, 33, 19, 64, ++ 32, 70, 188, 247, 79, 254, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, ++ 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 62, 246, 1, 70, 32, ++ 70, 0, 224, 0, 33, 79, 244, 192, 98, 192, 243, 134, 245, 2, 104, 79, ++ 246, 131, 115, 53, 136, 19, 64, 178, 120, 127, 53, 237, 17, 146, 0, ++ 1, 61, 2, 240, 124, 2, 66, 234, 5, 69, 29, 67, 99, 105, 32, 70, 34, ++ 43, 10, 221, 227, 105, 94, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, ++ 27, 246, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 192, 98, 192, 243, 99, ++ 245, 5, 96, 1, 38, 32, 70, 65, 70, 193, 243, 165, 240, 48, 70, 5, 176, ++ 189, 232, 240, 131, 0, 191, 80, 153, 5, 0, 4, 49, 4, 0, 28, 47, 4, 0, ++ 156, 47, 4, 0, 106, 154, 5, 0, 7, 153, 5, 0, 0, 0, 254, 31, 16, 49, ++ 4, 0, 136, 49, 4, 0, 45, 233, 240, 67, 153, 70, 139, 176, 0, 35, 7, ++ 147, 8, 147, 9, 147, 3, 106, 71, 106, 4, 43, 204, 191, 7, 244, 120, ++ 23, 7, 244, 240, 23, 4, 70, 13, 70, 144, 70, 127, 12, 0, 38, 12, 224, ++ 16, 33, 3, 168, 51, 74, 51, 70, 181, 243, 236, 247, 0, 32, 3, 169, 182, ++ 243, 250, 245, 32, 185, 1, 54, 246, 178, 190, 66, 240, 211, 78, 224, ++ 8, 171, 0, 147, 9, 171, 1, 147, 32, 70, 41, 70, 66, 70, 7, 171, 188, ++ 247, 138, 255, 1, 35, 41, 70, 74, 70, 32, 70, 255, 247, 144, 254, 32, ++ 70, 41, 70, 255, 247, 146, 253, 35, 106, 1, 43, 44, 221, 99, 105, 32, ++ 70, 34, 43, 10, 221, 227, 105, 94, 6, 7, 213, 64, 246, 39, 1, 0, 34, ++ 192, 243, 173, 245, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 192, 98, ++ 192, 243, 245, 244, 99, 105, 6, 70, 34, 43, 32, 70, 10, 221, 227, 105, ++ 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 152, 245, 1, 70, 32, ++ 70, 0, 224, 0, 33, 79, 244, 192, 98, 192, 243, 224, 244, 3, 104, 67, ++ 244, 128, 99, 51, 96, 8, 155, 32, 70, 0, 147, 9, 155, 41, 70, 1, 147, ++ 66, 70, 7, 155, 188, 247, 158, 252, 7, 224, 32, 70, 41, 70, 74, 70, ++ 0, 35, 255, 247, 75, 254, 0, 40, 168, 209, 11, 176, 189, 232, 240, 131, ++ 57, 153, 5, 0, 45, 233, 240, 79, 0, 37, 135, 176, 4, 70, 14, 70, 4, ++ 149, 5, 149, 192, 243, 180, 244, 41, 70, 131, 70, 32, 70, 192, 243, ++ 253, 247, 161, 73, 130, 70, 40, 70, 182, 243, 132, 245, 72, 177, 1, ++ 35, 132, 248, 96, 51, 41, 70, 42, 70, 187, 247, 82, 251, 196, 248, 92, ++ 3, 1, 224, 132, 248, 96, 3, 0, 32, 152, 73, 182, 243, 115, 245, 72, ++ 177, 1, 35, 0, 33, 132, 248, 104, 51, 10, 70, 187, 247, 65, 251, 196, ++ 248, 100, 3, 1, 224, 132, 248, 104, 3, 32, 70, 192, 243, 245, 243, 144, ++ 75, 103, 106, 152, 66, 143, 75, 148, 191, 32, 37, 33, 37, 163, 241, ++ 8, 8, 152, 191, 152, 70, 7, 244, 248, 87, 63, 10, 8, 235, 197, 8, 99, ++ 105, 32, 70, 34, 43, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, ++ 1, 0, 34, 192, 243, 35, 245, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, ++ 196, 98, 192, 243, 107, 244, 24, 248, 8, 60, 1, 61, 3, 96, 99, 105, ++ 32, 70, 34, 43, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, ++ 34, 192, 243, 11, 245, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 197, 98, ++ 192, 243, 83, 244, 88, 248, 4, 60, 168, 241, 8, 8, 3, 96, 0, 45, 204, ++ 209, 71, 224, 8, 33, 2, 168, 111, 74, 43, 70, 181, 243, 7, 247, 0, 32, ++ 2, 169, 182, 243, 21, 245, 0, 40, 58, 208, 0, 33, 10, 70, 187, 247, ++ 229, 250, 35, 106, 128, 70, 12, 43, 7, 221, 176, 245, 128, 63, 4, 210, ++ 195, 178, 79, 234, 16, 40, 67, 234, 8, 72, 99, 105, 32, 70, 34, 43, ++ 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 211, ++ 244, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 196, 98, 192, 243, 27, 244, ++ 5, 96, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 90, 6, 7, 213, 64, ++ 246, 39, 1, 0, 34, 192, 243, 190, 244, 1, 70, 32, 70, 0, 224, 0, 33, ++ 79, 244, 197, 98, 192, 243, 6, 244, 192, 248, 0, 128, 1, 53, 189, 66, ++ 181, 209, 32, 70, 49, 70, 75, 74, 31, 35, 255, 247, 89, 250, 0, 37, ++ 62, 224, 8, 33, 72, 74, 43, 70, 2, 168, 181, 243, 181, 246, 0, 32, 2, ++ 169, 182, 243, 195, 244, 129, 70, 0, 40, 48, 208, 99, 105, 32, 70, 34, ++ 43, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, ++ 144, 244, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 196, 98, 192, 243, ++ 216, 243, 5, 96, 99, 105, 32, 70, 34, 43, 10, 221, 227, 105, 89, 6, ++ 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 123, 244, 1, 70, 32, 70, 0, ++ 224, 0, 33, 64, 242, 36, 98, 192, 243, 195, 243, 0, 33, 128, 70, 10, ++ 70, 72, 70, 187, 247, 103, 250, 200, 248, 0, 0, 1, 53, 189, 66, 190, ++ 209, 32, 70, 4, 169, 5, 170, 188, 247, 217, 250, 4, 159, 82, 70, 59, ++ 70, 49, 70, 0, 37, 32, 70, 0, 149, 188, 247, 28, 250, 56, 67, 4, 144, ++ 32, 70, 190, 247, 144, 248, 5, 154, 4, 155, 0, 42, 60, 208, 26, 67, ++ 99, 105, 5, 146, 34, 43, 32, 70, 10, 221, 227, 105, 90, 6, 7, 213, 64, ++ 246, 39, 1, 42, 70, 192, 243, 67, 244, 1, 70, 32, 70, 0, 224, 0, 33, ++ 64, 242, 28, 98, 192, 243, 139, 243, 99, 105, 5, 70, 34, 43, 32, 70, ++ 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 46, ++ 244, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 28, 98, 192, 243, 118, 243, ++ 5, 155, 2, 104, 58, 224, 0, 191, 41, 153, 5, 0, 100, 154, 5, 0, 191, ++ 173, 58, 2, 100, 153, 5, 0, 75, 153, 5, 0, 128, 154, 5, 0, 70, 153, ++ 5, 0, 0, 43, 43, 208, 99, 105, 32, 70, 34, 43, 9, 221, 227, 105, 89, ++ 6, 6, 213, 64, 246, 39, 1, 192, 243, 7, 244, 1, 70, 32, 70, 0, 224, ++ 0, 33, 64, 242, 28, 98, 192, 243, 79, 243, 99, 105, 5, 70, 34, 43, 32, ++ 70, 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, ++ 242, 243, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 28, 98, 192, 243, 58, ++ 243, 4, 155, 2, 104, 19, 67, 43, 96, 4, 155, 171, 177, 99, 105, 32, ++ 70, 34, 43, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, 1, 0, 34, ++ 192, 243, 216, 243, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 195, 98, ++ 192, 243, 32, 243, 4, 155, 3, 96, 5, 155, 171, 177, 99, 105, 32, 70, ++ 34, 43, 10, 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, ++ 243, 192, 243, 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 28, 98, 192, 243, ++ 8, 243, 5, 155, 3, 96, 49, 70, 82, 70, 32, 70, 188, 247, 72, 253, 79, ++ 244, 250, 96, 186, 243, 199, 240, 32, 70, 89, 70, 192, 243, 65, 246, ++ 7, 176, 189, 232, 240, 143, 248, 181, 4, 70, 21, 70, 14, 70, 192, 243, ++ 234, 242, 0, 33, 7, 70, 32, 70, 192, 243, 51, 246, 49, 70, 2, 70, 43, ++ 70, 32, 70, 255, 247, 159, 253, 32, 70, 49, 70, 42, 70, 188, 247, 162, ++ 249, 32, 70, 57, 70, 189, 232, 248, 64, 192, 243, 34, 182, 56, 181, ++ 3, 106, 4, 70, 1, 43, 45, 209, 67, 105, 34, 43, 10, 221, 195, 105, 90, ++ 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 122, 243, 1, 70, 32, 70, ++ 1, 224, 32, 70, 0, 33, 79, 244, 192, 98, 192, 243, 193, 242, 99, 105, ++ 5, 70, 34, 43, 32, 70, 10, 221, 227, 105, 91, 6, 7, 213, 64, 246, 39, ++ 1, 0, 34, 192, 243, 100, 243, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, ++ 192, 98, 192, 243, 172, 242, 3, 104, 35, 244, 0, 115, 43, 96, 56, 189, ++ 44, 221, 67, 105, 34, 43, 10, 221, 195, 105, 89, 6, 7, 213, 64, 246, ++ 39, 1, 0, 34, 192, 243, 75, 243, 1, 70, 32, 70, 1, 224, 32, 70, 0, 33, ++ 79, 244, 192, 98, 192, 243, 146, 242, 99, 105, 5, 70, 34, 43, 32, 70, ++ 10, 221, 227, 105, 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 53, ++ 243, 1, 70, 32, 70, 0, 224, 0, 33, 79, 244, 192, 98, 192, 243, 125, ++ 242, 3, 104, 67, 244, 0, 115, 43, 96, 56, 189, 112, 71, 1, 32, 112, ++ 71, 56, 181, 5, 70, 12, 70, 255, 247, 156, 251, 40, 70, 33, 70, 0, 34, ++ 255, 247, 243, 255, 40, 70, 33, 70, 189, 232, 56, 64, 255, 247, 129, ++ 185, 0, 0, 56, 181, 4, 70, 13, 70, 0, 32, 49, 73, 182, 243, 49, 243, ++ 64, 177, 0, 33, 10, 70, 187, 247, 2, 249, 41, 70, 195, 178, 1, 34, 32, ++ 70, 3, 224, 32, 70, 41, 70, 1, 34, 5, 35, 188, 247, 85, 251, 0, 32, ++ 40, 73, 182, 243, 29, 243, 72, 177, 0, 33, 10, 70, 187, 247, 238, 248, ++ 41, 70, 195, 178, 9, 34, 32, 70, 188, 247, 70, 251, 0, 32, 34, 73, 182, ++ 243, 14, 243, 72, 177, 0, 33, 10, 70, 187, 247, 223, 248, 41, 70, 195, ++ 178, 5, 34, 32, 70, 188, 247, 55, 251, 0, 32, 27, 73, 182, 243, 255, ++ 242, 72, 177, 0, 33, 10, 70, 187, 247, 208, 248, 41, 70, 195, 178, 6, ++ 34, 32, 70, 188, 247, 40, 251, 0, 33, 32, 70, 79, 244, 120, 98, 79, ++ 244, 56, 99, 188, 247, 151, 250, 0, 33, 32, 70, 79, 244, 96, 66, 79, ++ 244, 32, 67, 188, 247, 143, 250, 79, 244, 192, 34, 0, 33, 19, 70, 32, ++ 70, 188, 247, 136, 250, 1, 34, 0, 33, 32, 70, 19, 70, 188, 247, 130, ++ 250, 32, 70, 41, 70, 189, 232, 56, 64, 255, 247, 213, 186, 0, 191, 118, ++ 154, 5, 0, 63, 153, 5, 0, 118, 156, 5, 0, 46, 153, 5, 0, 56, 181, 3, ++ 106, 4, 70, 9, 43, 105, 221, 67, 105, 34, 43, 10, 221, 195, 105, 91, ++ 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 148, 242, 1, 70, 32, 70, ++ 1, 224, 32, 70, 0, 33, 79, 244, 192, 98, 192, 243, 219, 241, 2, 104, ++ 18, 240, 1, 2, 83, 209, 99, 105, 32, 70, 34, 43, 9, 221, 227, 105, 93, ++ 6, 6, 213, 64, 246, 39, 1, 192, 243, 124, 242, 1, 70, 32, 70, 0, 224, ++ 0, 33, 64, 242, 108, 98, 192, 243, 196, 241, 79, 240, 0, 67, 3, 96, ++ 79, 244, 122, 112, 185, 243, 135, 247, 99, 105, 32, 70, 34, 43, 10, ++ 221, 227, 105, 89, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 97, 242, ++ 1, 70, 32, 70, 0, 224, 0, 33, 64, 242, 108, 98, 192, 243, 169, 241, ++ 5, 104, 99, 105, 237, 4, 237, 12, 34, 43, 32, 70, 10, 221, 227, 105, ++ 90, 6, 7, 213, 64, 246, 39, 1, 0, 34, 192, 243, 74, 242, 1, 70, 32, ++ 70, 0, 224, 0, 33, 64, 242, 108, 98, 192, 243, 146, 241, 109, 3, 0, ++ 35, 3, 96, 5, 245, 66, 69, 6, 72, 5, 245, 168, 117, 181, 251, 240, 245, ++ 100, 32, 104, 67, 56, 189, 0, 32, 56, 189, 0, 32, 56, 189, 0, 191, 160, ++ 134, 1, 0, 56, 181, 0, 33, 5, 70, 16, 32, 180, 247, 208, 248, 0, 33, ++ 4, 70, 16, 34, 181, 243, 207, 243, 101, 96, 32, 70, 56, 189, 8, 177, ++ 180, 247, 77, 185, 112, 71, 16, 181, 4, 70, 180, 247, 54, 250, 96, 96, ++ 224, 96, 32, 104, 189, 247, 194, 251, 99, 104, 160, 245, 0, 96, 32, ++ 97, 24, 24, 1, 35, 160, 96, 35, 118, 16, 189, 56, 181, 5, 70, 192, 243, ++ 146, 243, 28, 32, 188, 247, 201, 255, 8, 76, 0, 33, 28, 34, 32, 96, ++ 181, 243, 169, 243, 32, 104, 5, 96, 255, 247, 221, 255, 4, 73, 34, 104, ++ 40, 70, 189, 232, 56, 64, 0, 240, 122, 185, 16, 111, 4, 0, 85, 180, ++ 0, 0, 45, 233, 248, 79, 12, 70, 192, 243, 117, 243, 65, 242, 1, 0, 229, ++ 104, 188, 247, 170, 255, 0, 40, 124, 208, 0, 241, 1, 12, 6, 70, 32, ++ 224, 1, 50, 25, 112, 210, 178, 67, 70, 57, 120, 61, 70, 1, 55, 193, ++ 177, 61, 41, 3, 241, 1, 8, 243, 209, 50, 112, 41, 70, 70, 70, 0, 34, ++ 3, 224, 1, 50, 55, 112, 210, 178, 102, 70, 17, 248, 1, 127, 195, 235, ++ 5, 8, 176, 68, 6, 241, 1, 12, 0, 47, 242, 209, 26, 112, 8, 241, 1, 5, ++ 231, 104, 163, 104, 251, 24, 157, 66, 5, 210, 43, 120, 27, 177, 47, ++ 70, 99, 70, 0, 34, 215, 231, 37, 70, 1, 35, 226, 104, 131, 70, 186, ++ 26, 42, 130, 59, 224, 89, 70, 17, 248, 1, 43, 154, 66, 2, 209, 79, 240, ++ 0, 12, 10, 224, 16, 43, 42, 209, 15, 42, 248, 220, 39, 224, 27, 248, ++ 1, 143, 7, 248, 12, 128, 12, 241, 1, 12, 98, 69, 247, 209, 1, 235, 2, ++ 8, 137, 92, 7, 235, 2, 12, 79, 240, 61, 9, 7, 248, 2, 144, 8, 241, 1, ++ 11, 12, 241, 1, 7, 1, 241, 1, 9, 0, 34, 3, 224, 24, 248, 2, 160, 12, ++ 248, 2, 160, 1, 50, 74, 69, 248, 209, 122, 24, 79, 240, 0, 12, 7, 248, ++ 1, 192, 139, 68, 87, 28, 6, 224, 17, 248, 2, 176, 1, 235, 2, 12, 11, ++ 241, 1, 11, 227, 68, 179, 69, 193, 211, 1, 51, 2, 53, 17, 43, 184, 209, ++ 189, 232, 248, 79, 188, 247, 46, 191, 189, 232, 248, 143, 0, 0, 248, ++ 181, 14, 70, 23, 70, 4, 70, 192, 243, 232, 242, 48, 32, 188, 247, 31, ++ 255, 5, 70, 104, 177, 198, 96, 7, 78, 48, 35, 67, 96, 51, 104, 135, ++ 96, 3, 96, 41, 70, 32, 70, 255, 247, 94, 255, 53, 96, 0, 32, 248, 189, ++ 111, 240, 26, 0, 248, 189, 0, 8, 0, 0, 8, 181, 6, 75, 27, 104, 59, 185, ++ 5, 75, 25, 104, 33, 177, 5, 75, 26, 104, 10, 177, 255, 247, 214, 255, ++ 0, 32, 8, 189, 0, 8, 0, 0, 68, 93, 4, 0, 72, 93, 4, 0, 248, 181, 16, ++ 75, 7, 70, 28, 104, 30, 70, 188, 177, 227, 104, 155, 177, 13, 77, 42, ++ 104, 154, 66, 15, 209, 192, 243, 174, 242, 224, 104, 188, 247, 232, ++ 254, 0, 35, 43, 96, 7, 224, 56, 70, 37, 104, 192, 243, 164, 242, 32, ++ 70, 188, 247, 222, 254, 44, 70, 0, 44, 245, 209, 0, 35, 51, 96, 248, ++ 189, 0, 191, 0, 8, 0, 0, 236, 150, 5, 0, 115, 181, 133, 110, 4, 70, ++ 109, 177, 208, 248, 204, 48, 0, 235, 131, 3, 211, 248, 212, 32, 3, 110, ++ 154, 66, 3, 209, 64, 110, 168, 71, 5, 70, 0, 224, 0, 37, 32, 70, 192, ++ 243, 63, 240, 0, 35, 2, 169, 65, 248, 8, 61, 6, 70, 105, 70, 32, 70, ++ 1, 170, 13, 240, 7, 249, 157, 232, 6, 0, 79, 244, 255, 32, 179, 247, ++ 17, 255, 32, 70, 49, 70, 192, 243, 121, 243, 227, 110, 91, 177, 212, ++ 248, 204, 32, 4, 235, 130, 2, 210, 248, 212, 16, 34, 110, 145, 66, 2, ++ 209, 96, 110, 41, 70, 152, 71, 124, 189, 248, 181, 4, 70, 189, 247, ++ 22, 248, 0, 40, 79, 208, 165, 110, 109, 177, 212, 248, 204, 48, 4, 235, ++ 131, 3, 211, 248, 212, 32, 35, 110, 154, 66, 3, 209, 96, 110, 168, 71, ++ 5, 70, 0, 224, 0, 37, 32, 70, 192, 243, 3, 240, 0, 33, 7, 70, 32, 70, ++ 192, 243, 76, 243, 1, 33, 6, 70, 0, 34, 32, 70, 188, 247, 158, 255, ++ 79, 244, 128, 17, 10, 70, 32, 70, 188, 247, 134, 255, 64, 33, 10, 70, ++ 32, 70, 188, 247, 138, 255, 79, 240, 128, 113, 10, 70, 32, 70, 188, ++ 247, 123, 255, 32, 70, 255, 247, 144, 255, 15, 75, 1, 33, 198, 248, ++ 4, 53, 79, 244, 252, 115, 198, 248, 8, 53, 10, 70, 32, 70, 188, 247, ++ 126, 255, 32, 70, 57, 70, 192, 243, 34, 243, 227, 110, 91, 177, 212, ++ 248, 204, 32, 4, 235, 130, 2, 210, 248, 212, 16, 34, 110, 145, 66, 2, ++ 209, 96, 110, 41, 70, 152, 71, 248, 189, 0, 191, 242, 0, 57, 64, 112, ++ 181, 12, 70, 22, 70, 188, 247, 187, 255, 128, 177, 0, 37, 40, 70, 188, ++ 247, 250, 254, 3, 104, 27, 185, 128, 232, 80, 0, 24, 70, 112, 189, 1, ++ 53, 237, 178, 4, 45, 242, 209, 79, 240, 255, 48, 112, 189, 79, 240, ++ 255, 48, 112, 189, 1, 32, 112, 71, 195, 107, 68, 242, 88, 50, 147, 66, ++ 13, 208, 4, 216, 68, 242, 86, 50, 147, 66, 24, 209, 18, 224, 74, 246, ++ 46, 34, 147, 66, 8, 208, 74, 246, 47, 34, 147, 66, 15, 209, 192, 248, ++ 132, 51, 74, 246, 50, 35, 3, 224, 192, 248, 132, 51, 74, 246, 49, 35, ++ 195, 99, 112, 71, 192, 248, 132, 51, 68, 242, 84, 51, 195, 99, 112, ++ 71, 56, 181, 65, 242, 228, 67, 4, 70, 3, 99, 13, 70, 41, 177, 8, 70, ++ 15, 73, 182, 243, 45, 240, 160, 98, 64, 185, 40, 70, 13, 73, 182, 243, ++ 39, 240, 160, 98, 16, 185, 79, 246, 255, 115, 163, 98, 10, 73, 40, 70, ++ 182, 243, 30, 240, 9, 73, 224, 98, 40, 70, 182, 243, 25, 240, 8, 73, ++ 96, 99, 40, 70, 182, 243, 20, 240, 132, 248, 85, 0, 56, 189, 0, 191, ++ 145, 156, 5, 0, 135, 156, 5, 0, 206, 156, 5, 0, 167, 156, 5, 0, 178, ++ 156, 5, 0, 112, 71, 0, 0, 48, 181, 133, 176, 1, 144, 0, 36, 4, 168, ++ 64, 248, 4, 77, 1, 169, 4, 34, 179, 247, 37, 254, 1, 157, 181, 177, ++ 43, 70, 211, 248, 140, 32, 18, 177, 0, 34, 195, 248, 140, 32, 1, 52, ++ 4, 51, 16, 44, 245, 209, 3, 152, 254, 247, 169, 249, 3, 152, 255, 247, ++ 182, 254, 3, 75, 157, 66, 2, 208, 40, 70, 188, 247, 169, 253, 5, 176, ++ 48, 189, 96, 111, 4, 0, 3, 103, 208, 248, 204, 48, 16, 181, 0, 235, ++ 131, 3, 2, 156, 211, 248, 212, 48, 68, 102, 129, 102, 194, 102, 3, 102, ++ 16, 189, 0, 35, 131, 102, 195, 102, 3, 103, 112, 71, 45, 233, 248, 67, ++ 4, 70, 30, 70, 8, 157, 9, 159, 250, 247, 117, 252, 0, 33, 32, 70, 192, ++ 243, 85, 242, 128, 70, 32, 70, 191, 243, 11, 247, 10, 40, 200, 191, ++ 216, 248, 44, 48, 96, 97, 200, 191, 163, 100, 34, 40, 216, 248, 4, 48, ++ 200, 191, 216, 248, 172, 32, 163, 97, 200, 191, 226, 97, 219, 0, 28, ++ 213, 34, 40, 20, 221, 227, 105, 89, 6, 17, 213, 0, 34, 32, 70, 64, 246, ++ 39, 1, 191, 243, 156, 247, 1, 70, 32, 70, 192, 243, 48, 242, 208, 248, ++ 4, 54, 0, 33, 99, 98, 32, 70, 192, 243, 41, 242, 2, 224, 216, 248, 4, ++ 54, 99, 98, 148, 248, 36, 48, 35, 98, 79, 244, 224, 99, 163, 96, 79, ++ 240, 255, 51, 227, 96, 17, 35, 35, 97, 161, 70, 79, 240, 0, 8, 23, 224, ++ 65, 70, 192, 243, 19, 242, 32, 70, 191, 243, 186, 246, 32, 70, 191, ++ 243, 199, 246, 30, 177, 217, 248, 20, 49, 158, 66, 3, 208, 217, 248, ++ 140, 48, 159, 66, 1, 209, 197, 248, 0, 128, 8, 241, 1, 8, 9, 241, 4, ++ 9, 212, 248, 208, 48, 32, 70, 152, 69, 226, 211, 41, 104, 192, 243, ++ 246, 241, 1, 32, 189, 232, 248, 131, 247, 181, 0, 34, 19, 70, 13, 70, ++ 1, 33, 4, 70, 187, 247, 236, 254, 0, 33, 40, 34, 11, 70, 7, 70, 32, ++ 70, 0, 145, 191, 243, 153, 246, 41, 7, 6, 70, 9, 208, 32, 70, 1, 33, ++ 6, 34, 192, 243, 27, 240, 32, 70, 2, 33, 6, 34, 192, 243, 22, 240, 21, ++ 240, 240, 15, 4, 208, 32, 70, 0, 33, 2, 34, 192, 243, 14, 240, 1, 33, ++ 59, 70, 32, 70, 79, 240, 255, 50, 187, 247, 200, 254, 32, 70, 0, 33, ++ 40, 34, 79, 240, 255, 51, 0, 150, 191, 243, 117, 246, 254, 189, 0, 32, ++ 181, 243, 35, 183, 0, 0, 16, 181, 12, 73, 4, 70, 255, 247, 247, 255, ++ 128, 178, 136, 185, 212, 248, 128, 0, 8, 73, 181, 243, 22, 247, 128, ++ 178, 80, 185, 212, 248, 128, 0, 5, 73, 181, 243, 15, 247, 79, 246, 255, ++ 115, 128, 178, 0, 40, 8, 191, 24, 70, 16, 189, 200, 156, 5, 0, 8, 157, ++ 5, 0, 67, 105, 7, 181, 10, 43, 9, 221, 0, 49, 24, 191, 1, 33, 0, 145, ++ 36, 34, 0, 33, 1, 35, 191, 243, 69, 246, 1, 224, 79, 240, 255, 48, 14, ++ 189, 7, 181, 0, 33, 248, 34, 11, 70, 0, 145, 191, 243, 58, 246, 0, 240, ++ 15, 0, 14, 189, 0, 0, 45, 233, 255, 71, 221, 248, 48, 128, 146, 70, ++ 221, 248, 52, 144, 15, 70, 79, 244, 99, 114, 0, 33, 4, 70, 30, 70, 14, ++ 157, 184, 241, 1, 15, 8, 191, 79, 240, 0, 8, 181, 243, 127, 240, 17, ++ 35, 35, 97, 196, 248, 136, 96, 196, 248, 92, 144, 196, 248, 88, 160, ++ 196, 248, 4, 128, 184, 241, 0, 15, 64, 240, 197, 128, 32, 70, 65, 70, ++ 58, 70, 75, 70, 255, 247, 97, 254, 0, 40, 0, 240, 192, 128, 79, 240, ++ 192, 83, 26, 104, 19, 15, 2, 244, 112, 33, 35, 96, 147, 178, 2, 244, ++ 112, 2, 18, 13, 98, 100, 68, 242, 88, 50, 9, 12, 147, 66, 227, 99, 33, ++ 100, 10, 208, 4, 216, 68, 242, 86, 50, 147, 66, 8, 209, 4, 224, 163, ++ 245, 42, 67, 46, 59, 1, 43, 2, 216, 32, 70, 255, 247, 63, 254, 99, 108, ++ 32, 70, 14, 59, 1, 43, 140, 191, 0, 35, 1, 35, 132, 248, 76, 48, 79, ++ 240, 192, 81, 58, 70, 250, 247, 185, 249, 212, 248, 208, 48, 0, 43, ++ 0, 240, 138, 128, 0, 39, 4, 171, 67, 248, 4, 125, 141, 232, 72, 0, 32, ++ 70, 79, 240, 192, 81, 58, 70, 59, 70, 255, 247, 178, 254, 0, 40, 124, ++ 208, 32, 70, 255, 247, 50, 253, 15, 155, 0, 149, 1, 147, 32, 70, 57, ++ 70, 50, 70, 163, 109, 254, 247, 27, 248, 0, 40, 112, 209, 5, 177, 45, ++ 104, 58, 78, 32, 70, 41, 70, 255, 247, 44, 254, 50, 120, 0, 42, 66, ++ 209, 99, 105, 19, 43, 25, 221, 79, 244, 0, 97, 32, 70, 192, 243, 227, ++ 240, 51, 73, 7, 70, 40, 70, 181, 243, 120, 246, 56, 177, 40, 70, 47, ++ 73, 181, 243, 79, 246, 176, 241, 255, 63, 8, 191, 0, 32, 0, 35, 187, ++ 101, 3, 153, 248, 101, 32, 70, 192, 243, 220, 240, 32, 70, 161, 109, ++ 255, 247, 182, 250, 32, 70, 161, 109, 255, 247, 23, 251, 40, 70, 37, ++ 73, 181, 243, 56, 246, 2, 70, 32, 185, 32, 70, 161, 109, 255, 247, 142, ++ 251, 2, 70, 196, 248, 136, 35, 161, 109, 32, 70, 255, 247, 133, 250, ++ 32, 70, 255, 247, 86, 253, 32, 70, 161, 109, 255, 247, 176, 248, 32, ++ 70, 161, 109, 255, 247, 12, 251, 1, 35, 51, 112, 32, 70, 191, 243, 165, ++ 247, 40, 70, 21, 73, 181, 243, 59, 246, 56, 177, 19, 73, 40, 70, 181, ++ 243, 18, 246, 1, 70, 32, 70, 255, 247, 179, 254, 40, 70, 16, 73, 181, ++ 243, 46, 246, 120, 177, 40, 70, 13, 73, 181, 243, 5, 246, 1, 70, 32, ++ 70, 255, 247, 251, 253, 6, 224, 0, 36, 4, 224, 28, 70, 2, 224, 4, 70, ++ 0, 224, 60, 70, 32, 70, 4, 176, 189, 232, 240, 135, 0, 191, 92, 111, ++ 4, 0, 162, 156, 5, 0, 191, 156, 5, 0, 0, 157, 5, 0, 152, 156, 5, 0, ++ 31, 181, 15, 76, 2, 70, 35, 120, 187, 185, 16, 185, 3, 70, 1, 70, 1, ++ 224, 12, 75, 25, 29, 0, 32, 0, 144, 1, 144, 2, 147, 3, 145, 9, 72, 68, ++ 242, 16, 113, 79, 240, 192, 83, 255, 247, 235, 254, 40, 177, 6, 75, ++ 32, 34, 26, 96, 1, 35, 35, 112, 3, 72, 4, 176, 16, 189, 236, 114, 4, ++ 0, 224, 111, 4, 0, 96, 111, 4, 0, 12, 8, 0, 0, 45, 233, 255, 71, 7, ++ 70, 79, 244, 99, 112, 136, 70, 145, 70, 154, 70, 13, 158, 14, 157, 188, ++ 247, 124, 251, 4, 70, 200, 177, 12, 155, 57, 70, 1, 147, 66, 70, 75, ++ 70, 205, 248, 0, 160, 2, 150, 3, 149, 255, 247, 193, 254, 7, 70, 32, ++ 185, 32, 70, 188, 247, 109, 251, 60, 70, 7, 224, 6, 177, 54, 104, 196, ++ 248, 128, 96, 5, 177, 45, 104, 196, 248, 132, 80, 32, 70, 4, 176, 189, ++ 232, 240, 135, 112, 181, 6, 70, 134, 176, 79, 244, 188, 112, 188, 247, ++ 85, 251, 4, 70, 232, 177, 0, 33, 79, 244, 188, 114, 180, 243, 52, 247, ++ 13, 75, 38, 96, 0, 147, 13, 75, 0, 37, 1, 147, 48, 104, 12, 73, 12, ++ 74, 35, 70, 2, 149, 3, 149, 4, 149, 5, 149, 0, 240, 128, 254, 48, 185, ++ 79, 244, 150, 99, 196, 248, 96, 49, 132, 248, 100, 1, 0, 224, 44, 70, ++ 32, 70, 6, 176, 112, 189, 21, 49, 129, 0, 65, 54, 129, 0, 36, 179, 135, ++ 0, 163, 170, 136, 0, 16, 181, 4, 70, 80, 177, 3, 104, 5, 73, 24, 104, ++ 34, 70, 0, 240, 8, 254, 32, 70, 189, 232, 16, 64, 188, 247, 31, 187, ++ 16, 189, 0, 191, 163, 170, 136, 0, 56, 181, 5, 70, 24, 32, 188, 247, ++ 19, 251, 4, 70, 160, 177, 0, 33, 24, 34, 180, 243, 243, 246, 37, 96, ++ 168, 104, 8, 73, 34, 70, 0, 35, 202, 243, 214, 243, 5, 70, 32, 97, 32, ++ 185, 32, 70, 188, 247, 3, 251, 44, 70, 1, 224, 4, 35, 227, 96, 32, 70, ++ 56, 189, 201, 58, 129, 0, 16, 181, 4, 70, 40, 185, 16, 189, 203, 107, ++ 32, 70, 99, 96, 196, 243, 157, 246, 97, 104, 0, 41, 247, 209, 3, 224, ++ 3, 104, 99, 97, 188, 247, 234, 250, 96, 105, 0, 40, 248, 209, 35, 104, ++ 33, 105, 152, 104, 202, 243, 41, 243, 35, 104, 33, 105, 152, 104, 202, ++ 243, 156, 243, 32, 70, 189, 232, 16, 64, 188, 247, 216, 186, 0, 0, 45, ++ 233, 240, 65, 5, 70, 134, 176, 128, 32, 188, 247, 205, 250, 4, 70, 0, ++ 40, 68, 208, 0, 33, 128, 34, 180, 243, 172, 246, 4, 35, 99, 96, 180, ++ 35, 37, 96, 163, 129, 160, 70, 197, 248, 68, 71, 39, 70, 0, 38, 14, ++ 224, 28, 34, 2, 251, 6, 66, 60, 97, 168, 104, 27, 73, 16, 50, 0, 35, ++ 202, 243, 129, 243, 56, 98, 28, 55, 0, 40, 43, 208, 1, 54, 99, 104, ++ 158, 66, 237, 219, 22, 75, 22, 73, 0, 147, 0, 35, 1, 147, 2, 147, 3, ++ 147, 4, 147, 5, 147, 40, 104, 19, 74, 35, 70, 0, 240, 221, 253, 192, ++ 185, 19, 224, 216, 248, 32, 16, 49, 177, 35, 104, 152, 104, 202, 243, ++ 84, 243, 0, 35, 200, 248, 32, 48, 1, 53, 8, 241, 28, 8, 99, 104, 157, ++ 66, 239, 219, 32, 70, 188, 247, 137, 250, 0, 36, 32, 70, 6, 176, 189, ++ 232, 240, 129, 0, 37, 242, 231, 0, 191, 241, 63, 129, 0, 81, 62, 129, ++ 0, 200, 179, 135, 0, 235, 40, 136, 0, 112, 181, 4, 70, 0, 40, 30, 208, ++ 3, 104, 15, 73, 24, 104, 34, 70, 0, 240, 83, 253, 37, 70, 0, 38, 13, ++ 224, 41, 106, 41, 177, 35, 104, 152, 104, 202, 243, 37, 243, 0, 35, ++ 43, 98, 232, 105, 8, 177, 188, 247, 96, 250, 1, 54, 28, 53, 99, 104, ++ 158, 66, 238, 219, 32, 70, 189, 232, 112, 64, 188, 247, 86, 186, 112, ++ 189, 235, 40, 136, 0, 16, 181, 4, 70, 192, 111, 8, 177, 255, 247, 32, ++ 255, 212, 248, 132, 0, 8, 177, 7, 240, 219, 250, 212, 248, 128, 0, 8, ++ 177, 255, 247, 202, 255, 212, 248, 164, 0, 8, 177, 255, 247, 67, 255, ++ 212, 248, 180, 0, 8, 177, 0, 240, 26, 249, 160, 104, 8, 177, 1, 240, ++ 44, 249, 32, 70, 189, 232, 16, 64, 188, 247, 48, 186, 0, 0, 45, 233, ++ 240, 79, 7, 70, 141, 176, 188, 32, 138, 70, 144, 70, 29, 70, 23, 158, ++ 188, 247, 33, 250, 4, 70, 0, 40, 0, 240, 166, 128, 79, 240, 0, 11, 0, ++ 33, 188, 34, 180, 243, 253, 245, 38, 96, 132, 248, 140, 176, 56, 70, ++ 255, 247, 29, 250, 11, 171, 196, 248, 172, 176, 42, 70, 1, 144, 6, 147, ++ 129, 70, 65, 242, 228, 65, 32, 70, 51, 70, 205, 248, 0, 176, 205, 248, ++ 8, 160, 205, 248, 12, 128, 4, 148, 205, 248, 20, 176, 1, 240, 165, 249, ++ 5, 70, 0, 40, 123, 208, 160, 96, 221, 243, 141, 244, 43, 105, 16, 33, ++ 227, 96, 63, 75, 96, 96, 163, 100, 63, 74, 51, 70, 39, 97, 100, 100, ++ 56, 70, 180, 243, 52, 246, 43, 105, 216, 111, 191, 243, 246, 242, 73, ++ 246, 152, 19, 152, 66, 43, 105, 216, 111, 6, 216, 191, 243, 238, 242, ++ 8, 33, 3, 70, 53, 74, 9, 168, 5, 224, 191, 243, 231, 242, 52, 74, 3, ++ 70, 8, 33, 9, 168, 180, 243, 27, 246, 49, 70, 9, 170, 49, 75, 49, 72, ++ 180, 243, 213, 245, 50, 70, 0, 32, 22, 153, 47, 75, 141, 232, 128, 1, ++ 248, 247, 7, 252, 6, 70, 0, 40, 65, 209, 99, 104, 1, 39, 131, 248, 120, ++ 112, 8, 33, 10, 70, 40, 105, 246, 243, 11, 243, 54, 33, 58, 70, 213, ++ 248, 124, 2, 218, 247, 171, 254, 40, 70, 255, 247, 216, 254, 196, 248, ++ 128, 0, 96, 179, 40, 70, 255, 247, 142, 254, 196, 248, 164, 0, 48, 179, ++ 40, 70, 7, 240, 2, 250, 196, 248, 132, 0, 0, 179, 40, 70, 255, 247, ++ 62, 254, 224, 103, 216, 177, 99, 104, 25, 73, 131, 248, 228, 112, 24, ++ 75, 2, 150, 141, 232, 72, 0, 3, 150, 4, 150, 5, 150, 40, 104, 21, 74, ++ 35, 70, 0, 240, 202, 252, 80, 185, 40, 70, 0, 240, 50, 248, 196, 248, ++ 180, 0, 32, 177, 17, 72, 33, 70, 184, 243, 241, 246, 32, 177, 32, 70, ++ 73, 70, 255, 247, 40, 255, 0, 36, 32, 70, 13, 176, 189, 232, 240, 143, ++ 0, 191, 149, 149, 129, 0, 253, 49, 4, 0, 2, 50, 4, 0, 48, 184, 136, ++ 0, 211, 22, 4, 0, 14, 157, 5, 0, 205, 154, 129, 0, 20, 182, 135, 0, ++ 225, 150, 129, 0, 7, 50, 4, 0, 189, 150, 129, 0, 1, 32, 112, 71, 2, ++ 75, 1, 34, 26, 112, 179, 247, 63, 187, 0, 191, 52, 7, 0, 0, 112, 181, ++ 6, 70, 134, 176, 32, 32, 185, 243, 62, 243, 4, 70, 240, 177, 0, 33, ++ 32, 34, 180, 243, 44, 245, 79, 244, 225, 83, 227, 128, 75, 35, 35, 129, ++ 10, 35, 99, 129, 14, 75, 38, 96, 0, 37, 0, 147, 48, 104, 12, 73, 13, ++ 74, 35, 70, 1, 149, 2, 149, 3, 149, 4, 149, 5, 149, 0, 240, 114, 252, ++ 48, 185, 51, 104, 1, 34, 131, 248, 103, 33, 32, 70, 6, 176, 112, 189, ++ 32, 70, 188, 247, 40, 249, 44, 70, 247, 231, 0, 191, 81, 211, 0, 0, ++ 76, 50, 4, 0, 72, 50, 4, 0, 16, 181, 4, 70, 120, 177, 190, 247, 140, ++ 248, 35, 104, 34, 70, 24, 104, 5, 73, 0, 240, 248, 251, 32, 70, 188, ++ 247, 17, 249, 35, 104, 0, 34, 27, 104, 131, 248, 103, 33, 16, 189, 72, ++ 50, 4, 0, 3, 104, 211, 248, 216, 32, 65, 242, 107, 3, 17, 107, 153, ++ 66, 11, 209, 147, 106, 239, 43, 40, 208, 1, 216, 214, 43, 4, 224, 245, ++ 43, 35, 208, 64, 242, 15, 17, 139, 66, 31, 208, 147, 106, 64, 242, 198, ++ 82, 147, 66, 26, 208, 64, 242, 116, 82, 147, 66, 22, 208, 3, 106, 127, ++ 34, 16, 224, 72, 34, 131, 248, 5, 33, 6, 224, 2, 240, 192, 2, 146, 17, ++ 2, 235, 129, 1, 131, 248, 5, 17, 3, 106, 147, 249, 5, 33, 20, 42, 11, ++ 220, 72, 34, 131, 248, 5, 33, 112, 71, 3, 106, 147, 248, 5, 17, 74, ++ 178, 178, 241, 255, 63, 232, 209, 227, 231, 112, 71, 208, 248, 236, ++ 17, 16, 181, 4, 70, 41, 177, 128, 104, 202, 243, 131, 241, 0, 35, 196, ++ 248, 236, 49, 212, 248, 4, 18, 41, 177, 160, 104, 202, 243, 122, 241, ++ 0, 35, 196, 248, 4, 50, 212, 248, 116, 52, 211, 248, 48, 17, 57, 177, ++ 160, 104, 202, 243, 111, 241, 212, 248, 116, 52, 0, 34, 195, 248, 48, ++ 33, 212, 248, 52, 19, 41, 177, 160, 104, 202, 243, 100, 241, 0, 35, ++ 196, 248, 52, 51, 212, 248, 60, 21, 41, 177, 160, 104, 202, 243, 91, ++ 241, 0, 35, 196, 248, 60, 53, 212, 248, 220, 21, 41, 177, 160, 104, ++ 202, 243, 82, 241, 0, 35, 196, 248, 220, 53, 212, 248, 180, 23, 41, ++ 177, 160, 104, 202, 243, 73, 241, 0, 35, 196, 248, 180, 55, 16, 189, ++ 16, 181, 4, 70, 0, 104, 6, 240, 94, 253, 212, 248, 104, 6, 32, 177, ++ 5, 240, 215, 252, 0, 35, 196, 248, 104, 54, 212, 248, 100, 6, 32, 177, ++ 5, 240, 5, 255, 0, 35, 196, 248, 100, 54, 212, 248, 160, 1, 32, 177, ++ 8, 240, 75, 250, 0, 35, 196, 248, 160, 49, 212, 248, 144, 1, 32, 177, ++ 1, 240, 157, 253, 0, 35, 196, 248, 144, 49, 212, 248, 68, 1, 32, 177, ++ 2, 240, 217, 254, 0, 35, 196, 248, 68, 49, 212, 248, 88, 1, 32, 177, ++ 205, 243, 185, 244, 0, 35, 196, 248, 88, 49, 212, 248, 48, 1, 32, 177, ++ 2, 240, 125, 251, 0, 35, 196, 248, 48, 49, 212, 248, 52, 1, 32, 177, ++ 2, 240, 27, 249, 0, 35, 196, 248, 52, 49, 212, 248, 56, 1, 32, 177, ++ 2, 240, 123, 250, 0, 35, 196, 248, 56, 49, 32, 70, 2, 240, 47, 250, ++ 212, 248, 80, 1, 32, 177, 5, 240, 124, 255, 0, 35, 196, 248, 80, 49, ++ 212, 248, 76, 1, 32, 177, 8, 240, 58, 249, 0, 35, 196, 248, 76, 49, ++ 212, 248, 72, 1, 32, 177, 5, 240, 238, 253, 0, 35, 196, 248, 72, 49, ++ 212, 248, 96, 1, 32, 177, 7, 240, 250, 253, 0, 35, 196, 248, 96, 49, ++ 212, 248, 44, 49, 19, 177, 0, 35, 196, 248, 44, 49, 212, 248, 100, 1, ++ 32, 177, 3, 240, 34, 255, 0, 35, 196, 248, 100, 49, 32, 70, 7, 240, ++ 136, 254, 32, 70, 5, 240, 85, 252, 212, 248, 84, 1, 32, 177, 5, 240, ++ 176, 252, 0, 35, 196, 248, 84, 49, 212, 248, 116, 1, 32, 177, 1, 240, ++ 22, 252, 0, 35, 196, 248, 116, 49, 212, 248, 124, 1, 32, 177, 4, 240, ++ 34, 250, 0, 35, 196, 248, 124, 49, 212, 248, 128, 1, 32, 177, 7, 240, ++ 122, 250, 0, 35, 196, 248, 128, 49, 212, 248, 120, 1, 32, 177, 8, 240, ++ 52, 249, 0, 35, 196, 248, 120, 49, 212, 248, 136, 1, 32, 177, 1, 240, ++ 142, 251, 0, 35, 196, 248, 136, 49, 212, 248, 140, 1, 32, 177, 4, 240, ++ 92, 249, 0, 35, 196, 248, 140, 49, 212, 248, 104, 4, 32, 177, 7, 240, ++ 2, 249, 0, 35, 196, 248, 104, 52, 212, 248, 108, 4, 32, 177, 7, 240, ++ 60, 249, 0, 35, 196, 248, 108, 52, 212, 248, 112, 4, 32, 177, 7, 240, ++ 206, 249, 0, 35, 196, 248, 112, 52, 212, 248, 152, 1, 32, 177, 8, 240, ++ 100, 250, 0, 35, 196, 248, 152, 49, 212, 248, 228, 6, 32, 177, 7, 240, ++ 44, 253, 0, 35, 196, 248, 228, 54, 212, 248, 132, 6, 32, 177, 4, 240, ++ 96, 252, 0, 35, 196, 248, 132, 54, 212, 248, 136, 6, 32, 177, 1, 240, ++ 224, 252, 0, 35, 196, 248, 136, 54, 212, 248, 184, 6, 32, 177, 4, 240, ++ 56, 252, 0, 35, 196, 248, 184, 54, 212, 248, 192, 6, 32, 177, 4, 240, ++ 118, 250, 0, 35, 196, 248, 192, 54, 212, 248, 188, 6, 32, 177, 7, 240, ++ 106, 254, 0, 35, 196, 248, 188, 54, 212, 248, 80, 8, 32, 177, 7, 240, ++ 236, 250, 0, 35, 196, 248, 80, 56, 212, 248, 200, 6, 32, 177, 7, 240, ++ 20, 248, 0, 35, 196, 248, 200, 54, 212, 248, 156, 6, 8, 177, 5, 240, ++ 57, 250, 212, 248, 152, 6, 8, 177, 5, 240, 52, 250, 212, 248, 148, 6, ++ 8, 177, 5, 240, 47, 250, 212, 248, 144, 6, 8, 177, 5, 240, 42, 250, ++ 212, 248, 164, 6, 8, 177, 5, 240, 37, 250, 212, 248, 168, 6, 8, 177, ++ 5, 240, 32, 250, 212, 248, 164, 1, 32, 177, 3, 240, 188, 253, 0, 35, ++ 196, 248, 164, 49, 212, 248, 220, 6, 32, 177, 5, 240, 120, 254, 0, 35, ++ 196, 248, 220, 54, 212, 248, 28, 7, 32, 177, 187, 247, 55, 255, 0, 35, ++ 196, 248, 28, 55, 212, 248, 140, 6, 32, 177, 5, 240, 222, 249, 0, 35, ++ 196, 248, 140, 54, 212, 248, 124, 6, 32, 177, 4, 240, 218, 252, 0, 35, ++ 196, 248, 124, 54, 212, 248, 36, 1, 32, 177, 7, 240, 68, 252, 0, 35, ++ 196, 248, 36, 49, 212, 248, 40, 1, 32, 177, 3, 240, 170, 252, 0, 35, ++ 196, 248, 40, 49, 212, 248, 120, 4, 32, 177, 5, 240, 104, 255, 0, 35, ++ 196, 248, 120, 52, 212, 248, 208, 5, 32, 177, 4, 240, 88, 218, 0, 35, ++ 196, 248, 208, 53, 212, 248, 32, 6, 32, 177, 249, 247, 152, 255, 0, ++ 35, 196, 248, 32, 54, 32, 70, 189, 232, 16, 64, 4, 240, 66, 185, 247, ++ 181, 3, 106, 4, 70, 147, 249, 4, 1, 67, 28, 44, 208, 35, 104, 147, 248, ++ 124, 32, 10, 42, 2, 216, 205, 243, 70, 243, 37, 224, 211, 248, 220, ++ 80, 20, 73, 40, 70, 181, 243, 25, 241, 19, 73, 141, 248, 4, 0, 40, 70, ++ 181, 243, 19, 241, 17, 73, 141, 248, 5, 0, 40, 70, 181, 243, 13, 241, ++ 0, 37, 141, 248, 6, 0, 46, 70, 1, 175, 120, 87, 205, 243, 43, 243, 118, ++ 178, 232, 85, 1, 53, 176, 66, 168, 191, 6, 70, 3, 45, 246, 178, 242, ++ 209, 48, 70, 0, 224, 8, 32, 35, 106, 131, 248, 4, 1, 254, 189, 0, 191, ++ 66, 157, 5, 0, 72, 157, 5, 0, 78, 157, 5, 0, 3, 104, 208, 248, 116, ++ 36, 112, 181, 211, 248, 220, 80, 3, 35, 211, 113, 208, 248, 116, 36, ++ 4, 70, 19, 114, 208, 248, 116, 36, 65, 73, 130, 248, 173, 48, 208, 248, ++ 116, 36, 40, 70, 130, 248, 174, 48, 181, 243, 214, 240, 64, 178, 32, ++ 185, 40, 70, 60, 73, 181, 243, 208, 240, 64, 178, 67, 30, 14, 43, 14, ++ 216, 1, 40, 3, 209, 212, 248, 116, 36, 0, 35, 4, 224, 2, 40, 6, 209, ++ 212, 248, 116, 36, 1, 35, 211, 113, 212, 248, 116, 36, 19, 114, 50, ++ 73, 40, 70, 38, 106, 181, 243, 184, 240, 134, 248, 4, 1, 32, 70, 255, ++ 247, 133, 255, 46, 73, 40, 70, 38, 106, 181, 243, 174, 240, 134, 248, ++ 5, 1, 32, 70, 255, 247, 105, 253, 35, 106, 147, 248, 5, 33, 131, 248, ++ 6, 33, 33, 104, 65, 242, 107, 2, 209, 248, 216, 48, 24, 107, 144, 66, ++ 41, 209, 34, 106, 146, 249, 4, 1, 8, 40, 36, 220, 155, 106, 209, 43, ++ 18, 208, 233, 43, 16, 208, 144, 43, 14, 208, 139, 43, 12, 208, 141, ++ 43, 1, 209, 13, 35, 21, 224, 147, 43, 10, 209, 177, 248, 122, 48, 27, ++ 5, 27, 13, 179, 245, 130, 111, 1, 220, 24, 35, 10, 224, 27, 35, 8, 224, ++ 142, 43, 1, 209, 16, 35, 4, 224, 214, 43, 1, 208, 228, 43, 2, 209, 23, ++ 35, 130, 248, 4, 49, 35, 104, 64, 242, 116, 82, 211, 248, 216, 48, 155, ++ 106, 147, 66, 3, 208, 64, 242, 198, 82, 147, 66, 7, 209, 35, 106, 147, ++ 249, 4, 33, 8, 42, 2, 220, 23, 34, 131, 248, 4, 33, 1, 32, 112, 189, ++ 150, 158, 5, 0, 84, 157, 5, 0, 167, 158, 5, 0, 88, 157, 5, 0, 16, 181, ++ 4, 70, 28, 73, 128, 104, 34, 70, 0, 35, 201, 243, 226, 246, 196, 248, ++ 236, 1, 112, 179, 160, 104, 24, 73, 34, 70, 0, 35, 201, 243, 217, 246, ++ 196, 248, 4, 2, 40, 179, 160, 104, 21, 73, 34, 70, 0, 35, 201, 243, ++ 208, 246, 196, 248, 52, 3, 224, 177, 160, 104, 17, 73, 34, 70, 0, 35, ++ 201, 243, 199, 246, 196, 248, 60, 5, 152, 177, 160, 104, 14, 73, 34, ++ 70, 0, 35, 201, 243, 190, 246, 196, 248, 220, 5, 80, 177, 0, 35, 160, ++ 104, 10, 73, 34, 70, 201, 243, 181, 246, 196, 248, 180, 7, 0, 48, 24, ++ 191, 1, 32, 16, 189, 0, 191, 49, 56, 130, 0, 133, 255, 129, 0, 237, ++ 239, 129, 0, 241, 250, 129, 0, 129, 50, 130, 0, 151, 117, 1, 0, 112, ++ 181, 255, 34, 4, 70, 1, 35, 132, 248, 99, 36, 132, 248, 191, 34, 65, ++ 242, 1, 1, 212, 248, 116, 36, 0, 38, 3, 118, 164, 248, 72, 20, 100, ++ 32, 3, 33, 132, 248, 48, 5, 132, 248, 102, 52, 132, 248, 98, 100, 209, ++ 113, 212, 248, 116, 36, 64, 246, 42, 21, 17, 114, 164, 248, 74, 84, ++ 164, 248, 76, 84, 164, 248, 78, 84, 164, 248, 80, 84, 164, 248, 82, ++ 84, 164, 248, 84, 84, 164, 248, 86, 84, 164, 248, 94, 20, 64, 246, 43, ++ 21, 2, 33, 164, 248, 88, 84, 164, 248, 96, 20, 7, 37, 4, 33, 164, 248, ++ 90, 84, 164, 248, 92, 20, 164, 248, 22, 6, 164, 248, 88, 99, 132, 248, ++ 36, 98, 164, 248, 20, 102, 132, 248, 56, 98, 132, 248, 39, 98, 132, ++ 248, 37, 98, 132, 248, 226, 100, 132, 248, 148, 98, 132, 248, 23, 101, ++ 33, 104, 79, 240, 255, 48, 129, 248, 83, 48, 72, 99, 33, 104, 32, 70, ++ 129, 248, 66, 48, 33, 104, 129, 248, 67, 48, 33, 104, 129, 248, 213, ++ 96, 33, 104, 129, 248, 68, 96, 33, 104, 132, 248, 18, 98, 132, 248, ++ 19, 98, 196, 248, 56, 102, 129, 248, 57, 96, 34, 104, 130, 248, 148, ++ 48, 34, 104, 130, 248, 249, 48, 34, 104, 130, 248, 248, 48, 34, 104, ++ 130, 248, 160, 48, 34, 104, 130, 248, 54, 49, 34, 104, 150, 102, 132, ++ 248, 84, 51, 132, 248, 85, 51, 146, 248, 79, 16, 137, 7, 24, 191, 130, ++ 248, 82, 48, 3, 35, 0, 34, 1, 37, 132, 248, 58, 101, 164, 248, 56, 37, ++ 132, 248, 224, 49, 132, 248, 232, 49, 79, 244, 72, 115, 164, 248, 36, ++ 53, 132, 248, 197, 85, 212, 243, 175, 244, 5, 35, 132, 248, 8, 54, 35, ++ 104, 132, 248, 32, 97, 132, 248, 64, 86, 131, 248, 21, 81, 35, 104, ++ 79, 240, 255, 49, 164, 248, 92, 23, 164, 248, 68, 24, 132, 248, 95, ++ 103, 132, 248, 145, 87, 132, 248, 160, 87, 131, 248, 70, 81, 35, 104, ++ 131, 248, 71, 81, 35, 104, 131, 248, 96, 97, 112, 189, 45, 233, 240, ++ 71, 15, 70, 146, 70, 0, 40, 52, 208, 4, 104, 0, 44, 53, 208, 79, 240, ++ 0, 8, 193, 70, 40, 224, 212, 248, 168, 2, 57, 70, 64, 68, 180, 243, ++ 120, 241, 232, 185, 212, 248, 172, 50, 79, 234, 137, 6, 83, 248, 41, ++ 48, 83, 69, 21, 209, 212, 248, 168, 50, 67, 68, 93, 107, 1, 61, 93, ++ 99, 237, 185, 24, 70, 41, 70, 56, 34, 180, 243, 215, 240, 212, 248, ++ 172, 2, 41, 70, 128, 25, 4, 34, 180, 243, 208, 240, 40, 70, 189, 232, ++ 240, 135, 9, 241, 1, 9, 8, 241, 56, 8, 35, 104, 147, 248, 184, 48, 153, ++ 69, 209, 219, 111, 240, 29, 0, 189, 232, 240, 135, 111, 240, 29, 0, ++ 189, 232, 240, 135, 248, 181, 0, 37, 15, 70, 6, 104, 44, 70, 8, 224, ++ 214, 248, 168, 2, 57, 70, 64, 25, 180, 243, 60, 241, 56, 53, 56, 177, ++ 1, 52, 51, 104, 147, 248, 184, 48, 156, 66, 241, 219, 111, 240, 29, ++ 4, 32, 70, 248, 189, 45, 233, 240, 71, 138, 70, 17, 70, 152, 70, 145, ++ 70, 4, 104, 255, 247, 223, 255, 3, 30, 5, 218, 35, 104, 0, 38, 147, ++ 248, 184, 32, 53, 70, 59, 224, 212, 248, 172, 34, 56, 32, 66, 248, 35, ++ 128, 212, 248, 168, 34, 0, 251, 3, 32, 67, 107, 1, 51, 67, 99, 0, 32, ++ 189, 232, 240, 135, 212, 248, 168, 50, 6, 241, 56, 1, 159, 93, 152, ++ 25, 31, 187, 73, 70, 31, 34, 180, 243, 89, 241, 212, 248, 168, 50, 12, ++ 153, 158, 25, 8, 155, 198, 248, 32, 160, 179, 98, 9, 155, 56, 70, 115, ++ 98, 10, 155, 243, 98, 11, 155, 51, 99, 212, 248, 4, 55, 67, 248, 53, ++ 16, 3, 235, 197, 2, 13, 155, 83, 96, 115, 107, 1, 51, 115, 99, 212, ++ 248, 172, 50, 67, 248, 37, 128, 189, 232, 240, 135, 1, 53, 14, 70, 149, ++ 66, 208, 219, 111, 240, 21, 0, 189, 232, 240, 135, 45, 233, 240, 65, ++ 7, 104, 12, 70, 21, 70, 152, 70, 215, 248, 176, 2, 0, 38, 4, 224, 3, ++ 104, 156, 66, 11, 208, 6, 70, 0, 105, 0, 40, 248, 209, 17, 224, 0, 35, ++ 3, 97, 14, 177, 48, 97, 1, 224, 199, 248, 176, 2, 6, 155, 128, 232, ++ 48, 1, 195, 96, 0, 32, 189, 232, 240, 129, 111, 240, 21, 0, 189, 232, ++ 240, 129, 20, 32, 187, 247, 68, 252, 0, 40, 232, 209, 245, 231, 0, 0, ++ 19, 181, 0, 35, 4, 70, 0, 147, 33, 70, 0, 104, 25, 74, 255, 247, 204, ++ 255, 1, 70, 88, 187, 212, 248, 120, 4, 3, 34, 22, 75, 5, 240, 243, 252, ++ 1, 70, 24, 187, 212, 248, 120, 4, 2, 34, 19, 75, 5, 240, 235, 252, 1, ++ 70, 216, 185, 212, 248, 120, 4, 5, 34, 16, 75, 5, 240, 227, 252, 1, ++ 70, 152, 185, 212, 248, 120, 4, 6, 34, 13, 75, 5, 240, 219, 252, 1, ++ 70, 88, 185, 212, 248, 120, 4, 8, 34, 10, 75, 5, 240, 211, 252, 0, 40, ++ 20, 191, 79, 240, 255, 48, 0, 32, 1, 224, 79, 240, 255, 48, 28, 189, ++ 213, 162, 129, 0, 45, 202, 129, 0, 37, 45, 130, 0, 121, 47, 130, 0, ++ 193, 255, 129, 0, 253, 250, 129, 0, 2, 104, 16, 181, 210, 248, 176, ++ 2, 0, 35, 14, 224, 4, 104, 161, 66, 9, 209, 1, 105, 11, 177, 25, 97, ++ 1, 224, 194, 248, 176, 18, 187, 247, 236, 251, 0, 32, 16, 189, 3, 70, ++ 0, 105, 0, 40, 238, 209, 111, 240, 29, 0, 16, 189, 65, 242, 228, 67, ++ 152, 66, 8, 209, 0, 35, 6, 74, 154, 90, 138, 66, 5, 208, 2, 51, 179, ++ 245, 140, 127, 247, 209, 0, 32, 112, 71, 1, 32, 112, 71, 0, 191, 120, ++ 157, 5, 0, 45, 233, 240, 67, 208, 248, 56, 83, 0, 33, 135, 176, 4, 70, ++ 79, 244, 146, 114, 40, 70, 179, 243, 166, 247, 100, 35, 235, 133, 3, ++ 35, 133, 248, 96, 48, 0, 34, 1, 35, 212, 248, 92, 1, 79, 244, 128, 81, ++ 255, 243, 159, 247, 255, 40, 7, 70, 5, 209, 35, 106, 24, 105, 25, 104, ++ 222, 247, 111, 250, 7, 70, 35, 106, 111, 134, 0, 33, 164, 248, 70, 116, ++ 32, 70, 7, 244, 96, 87, 179, 248, 8, 128, 30, 104, 218, 243, 1, 243, ++ 183, 245, 32, 95, 5, 241, 56, 9, 8, 208, 183, 245, 192, 95, 7, 208, ++ 183, 245, 128, 95, 20, 191, 10, 39, 20, 39, 2, 224, 160, 39, 0, 224, ++ 40, 39, 0, 33, 255, 35, 141, 232, 10, 0, 212, 248, 116, 52, 2, 144, ++ 3, 151, 27, 121, 66, 70, 4, 147, 72, 70, 51, 70, 233, 247, 29, 249, ++ 35, 104, 147, 248, 79, 48, 154, 7, 3, 208, 235, 136, 67, 240, 32, 3, ++ 235, 128, 7, 176, 189, 232, 240, 131, 130, 176, 16, 181, 20, 36, 97, ++ 67, 208, 248, 184, 66, 3, 147, 99, 80, 5, 155, 96, 24, 67, 96, 6, 155, ++ 2, 97, 131, 96, 4, 155, 195, 96, 189, 232, 16, 64, 2, 176, 112, 71, ++ 0, 0, 48, 181, 3, 104, 4, 70, 219, 105, 133, 176, 154, 109, 64, 104, ++ 212, 248, 36, 22, 219, 109, 249, 247, 180, 251, 196, 248, 32, 6, 0, ++ 40, 0, 240, 198, 129, 32, 70, 3, 240, 132, 255, 196, 248, 208, 5, 0, ++ 40, 0, 240, 193, 129, 32, 70, 5, 240, 188, 251, 196, 248, 120, 4, 0, ++ 40, 0, 240, 188, 129, 32, 70, 3, 240, 254, 248, 196, 248, 40, 1, 0, ++ 40, 0, 240, 183, 129, 32, 70, 7, 240, 34, 248, 196, 248, 36, 1, 0, 40, ++ 0, 240, 178, 129, 32, 70, 4, 240, 134, 250, 196, 248, 124, 6, 0, 40, ++ 0, 240, 173, 129, 32, 70, 4, 240, 228, 253, 196, 248, 140, 6, 0, 40, ++ 0, 240, 168, 129, 32, 70, 4, 240, 72, 252, 0, 40, 64, 240, 165, 129, ++ 32, 70, 4, 240, 164, 252, 0, 40, 64, 240, 159, 129, 32, 70, 4, 240, ++ 204, 252, 0, 40, 64, 240, 153, 129, 32, 70, 4, 240, 42, 253, 0, 40, ++ 64, 240, 147, 129, 32, 70, 4, 240, 96, 253, 0, 40, 64, 240, 141, 129, ++ 32, 70, 4, 240, 118, 253, 5, 70, 0, 40, 64, 240, 134, 129, 3, 33, 212, ++ 248, 140, 6, 10, 70, 4, 240, 170, 254, 196, 248, 164, 6, 0, 40, 0, 240, ++ 126, 129, 212, 248, 140, 6, 2, 33, 42, 70, 4, 240, 159, 254, 196, 248, ++ 168, 6, 0, 40, 0, 240, 118, 129, 41, 70, 193, 74, 193, 75, 32, 70, 0, ++ 149, 1, 148, 7, 240, 14, 248, 191, 75, 26, 29, 7, 202, 27, 104, 141, ++ 232, 7, 0, 8, 33, 34, 70, 32, 70, 255, 247, 92, 255, 32, 104, 5, 240, ++ 142, 255, 32, 70, 6, 240, 25, 252, 196, 248, 104, 4, 0, 40, 0, 240, ++ 91, 129, 32, 70, 6, 240, 91, 252, 196, 248, 108, 4, 0, 40, 0, 240, 85, ++ 129, 32, 70, 6, 240, 233, 252, 196, 248, 112, 4, 0, 40, 0, 240, 79, ++ 129, 32, 70, 1, 240, 121, 254, 196, 248, 8, 5, 0, 40, 0, 240, 73, 129, ++ 169, 75, 32, 70, 196, 248, 88, 49, 1, 240, 242, 253, 196, 248, 48, 1, ++ 0, 40, 0, 240, 64, 129, 32, 70, 1, 240, 160, 251, 196, 248, 52, 1, 0, ++ 40, 0, 240, 71, 129, 32, 70, 1, 240, 10, 253, 196, 248, 56, 1, 0, 40, ++ 0, 240, 65, 129, 32, 70, 1, 240, 146, 252, 0, 40, 64, 240, 62, 129, ++ 32, 70, 7, 240, 28, 248, 196, 248, 96, 1, 0, 40, 0, 240, 57, 129, 32, ++ 70, 6, 240, 26, 254, 196, 248, 80, 8, 0, 40, 0, 240, 51, 129, 32, 104, ++ 33, 70, 162, 104, 144, 75, 3, 240, 235, 252, 196, 248, 124, 2, 0, 40, ++ 0, 240, 42, 129, 32, 70, 3, 240, 207, 249, 196, 248, 100, 1, 0, 40, ++ 0, 240, 36, 129, 137, 75, 32, 70, 196, 248, 44, 49, 5, 240, 98, 248, ++ 196, 248, 72, 1, 0, 40, 0, 240, 27, 129, 32, 70, 7, 240, 134, 251, 196, ++ 248, 76, 1, 0, 40, 0, 240, 21, 129, 32, 70, 5, 240, 224, 249, 196, 248, ++ 80, 1, 0, 40, 0, 240, 16, 129, 32, 70, 2, 240, 236, 248, 196, 248, 68, ++ 1, 0, 40, 0, 240, 10, 129, 35, 104, 1, 34, 131, 248, 164, 32, 32, 70, ++ 3, 240, 6, 255, 196, 248, 132, 6, 0, 40, 0, 240, 0, 129, 32, 70, 7, ++ 240, 40, 248, 0, 40, 64, 240, 252, 128, 32, 70, 4, 240, 64, 255, 196, ++ 248, 84, 1, 0, 40, 0, 240, 246, 128, 32, 70, 4, 240, 90, 254, 0, 40, ++ 64, 240, 242, 128, 32, 70, 0, 240, 90, 254, 196, 248, 116, 1, 0, 40, ++ 0, 240, 236, 128, 32, 70, 3, 240, 186, 251, 196, 248, 124, 1, 0, 40, ++ 0, 240, 230, 128, 32, 70, 6, 240, 196, 252, 196, 248, 128, 1, 0, 40, ++ 0, 240, 225, 128, 32, 70, 7, 240, 120, 251, 196, 248, 120, 1, 0, 40, ++ 0, 240, 220, 128, 32, 70, 0, 240, 210, 253, 196, 248, 136, 1, 0, 40, ++ 0, 240, 214, 128, 32, 70, 3, 240, 78, 251, 196, 248, 140, 1, 0, 40, ++ 0, 240, 208, 128, 32, 70, 7, 240, 38, 252, 196, 248, 152, 1, 0, 40, ++ 0, 240, 202, 128, 32, 70, 0, 240, 136, 254, 196, 248, 144, 1, 0, 40, ++ 0, 240, 196, 128, 32, 70, 7, 240, 216, 251, 196, 248, 160, 1, 0, 40, ++ 0, 240, 190, 128, 32, 70, 6, 240, 44, 255, 196, 248, 228, 6, 0, 40, ++ 0, 240, 184, 128, 32, 70, 5, 240, 120, 248, 196, 248, 100, 6, 0, 40, ++ 0, 240, 178, 128, 32, 70, 4, 240, 52, 254, 196, 248, 104, 6, 0, 40, ++ 0, 240, 172, 128, 32, 70, 7, 240, 214, 248, 196, 248, 188, 6, 0, 40, ++ 0, 240, 166, 128, 35, 104, 1, 34, 131, 248, 166, 32, 32, 70, 0, 240, ++ 20, 255, 196, 248, 136, 6, 0, 40, 0, 240, 156, 128, 32, 70, 3, 240, ++ 4, 254, 196, 248, 184, 6, 0, 40, 0, 240, 150, 128, 32, 70, 3, 240, 190, ++ 252, 196, 248, 192, 6, 0, 40, 0, 240, 144, 128, 32, 70, 6, 240, 86, ++ 250, 196, 248, 200, 6, 0, 40, 0, 240, 138, 128, 32, 70, 3, 240, 30, ++ 248, 196, 248, 164, 1, 0, 40, 0, 240, 132, 128, 32, 70, 5, 240, 162, ++ 248, 196, 248, 220, 6, 0, 40, 12, 191, 118, 32, 0, 32, 122, 224, 79, ++ 244, 150, 112, 119, 224, 64, 242, 45, 16, 116, 224, 79, 244, 151, 112, ++ 113, 224, 64, 242, 47, 16, 110, 224, 79, 244, 152, 112, 107, 224, 64, ++ 242, 49, 16, 104, 224, 79, 244, 153, 112, 101, 224, 64, 242, 65, 16, ++ 98, 224, 64, 242, 71, 16, 95, 224, 79, 244, 164, 112, 92, 224, 36, 32, ++ 90, 224, 37, 32, 88, 224, 38, 32, 86, 224, 42, 32, 84, 224, 49, 32, ++ 82, 224, 0, 191, 153, 48, 130, 0, 101, 48, 130, 0, 104, 157, 5, 0, 239, ++ 190, 173, 222, 69, 253, 129, 0, 239, 190, 173, 13, 50, 32, 67, 224, ++ 64, 242, 245, 16, 64, 224, 79, 244, 251, 112, 61, 224, 53, 32, 59, 224, ++ 189, 32, 57, 224, 57, 32, 55, 224, 60, 32, 53, 224, 62, 32, 51, 224, ++ 64, 242, 109, 32, 48, 224, 63, 32, 46, 224, 67, 32, 44, 224, 106, 32, ++ 42, 224, 71, 32, 40, 224, 73, 32, 38, 224, 72, 32, 36, 224, 74, 32, ++ 34, 224, 64, 242, 229, 32, 31, 224, 64, 242, 230, 32, 28, 224, 75, 32, ++ 26, 224, 90, 32, 24, 224, 91, 32, 22, 224, 94, 32, 20, 224, 95, 32, ++ 18, 224, 99, 32, 16, 224, 101, 32, 14, 224, 8, 72, 12, 224, 103, 32, ++ 10, 224, 108, 32, 8, 224, 110, 32, 6, 224, 111, 32, 4, 224, 112, 32, ++ 2, 224, 114, 32, 0, 224, 115, 32, 5, 176, 48, 189, 80, 70, 77, 0, 248, ++ 181, 4, 70, 0, 40, 0, 240, 166, 128, 220, 243, 91, 244, 212, 248, 220, ++ 21, 208, 241, 1, 6, 56, 191, 0, 38, 33, 177, 160, 104, 201, 243, 63, ++ 241, 0, 185, 1, 54, 32, 70, 212, 248, 16, 19, 212, 243, 50, 246, 32, ++ 70, 212, 248, 204, 20, 212, 243, 45, 246, 32, 70, 212, 248, 24, 19, ++ 212, 243, 40, 246, 212, 248, 36, 3, 8, 177, 187, 247, 226, 248, 212, ++ 248, 124, 2, 32, 177, 3, 240, 168, 251, 0, 35, 196, 248, 124, 50, 39, ++ 106, 185, 105, 17, 177, 32, 70, 26, 240, 177, 216, 0, 37, 189, 97, 212, ++ 248, 104, 50, 89, 89, 17, 177, 32, 70, 247, 243, 130, 244, 4, 53, 32, ++ 45, 245, 209, 212, 248, 92, 1, 3, 240, 223, 248, 32, 70, 254, 247, 245, ++ 255, 212, 248, 8, 5, 32, 177, 1, 240, 95, 252, 0, 35, 196, 248, 8, 53, ++ 32, 70, 255, 247, 48, 248, 32, 70, 2, 240, 142, 250, 35, 104, 134, 25, ++ 211, 248, 216, 16, 49, 177, 96, 104, 2, 240, 129, 250, 35, 104, 0, 34, ++ 195, 248, 216, 32, 35, 104, 211, 248, 220, 0, 40, 177, 187, 247, 161, ++ 248, 35, 104, 0, 34, 195, 248, 220, 32, 212, 248, 180, 82, 4, 224, 40, ++ 70, 239, 104, 187, 247, 150, 248, 61, 70, 0, 45, 248, 209, 33, 70, 196, ++ 248, 180, 82, 32, 104, 255, 247, 144, 252, 32, 104, 24, 73, 34, 70, ++ 255, 247, 108, 251, 212, 248, 104, 1, 24, 177, 6, 240, 64, 253, 196, ++ 248, 104, 81, 212, 248, 128, 2, 32, 177, 187, 247, 124, 248, 0, 35, ++ 196, 248, 128, 50, 212, 248, 232, 4, 72, 177, 187, 247, 116, 248, 0, ++ 35, 196, 248, 232, 52, 3, 224, 32, 70, 97, 104, 224, 243, 97, 241, 212, ++ 248, 120, 34, 0, 42, 247, 209, 4, 245, 196, 96, 4, 48, 249, 247, 70, ++ 248, 32, 70, 97, 104, 1, 240, 161, 248, 0, 224, 6, 70, 48, 70, 248, ++ 189, 150, 51, 4, 0, 45, 233, 240, 79, 145, 176, 0, 36, 145, 70, 27, ++ 158, 157, 248, 104, 32, 7, 144, 221, 248, 120, 160, 32, 70, 9, 145, ++ 152, 70, 8, 146, 221, 248, 128, 176, 12, 148, 13, 148, 14, 148, 185, ++ 247, 120, 249, 72, 70, 49, 70, 28, 154, 29, 155, 205, 248, 0, 160, 11, ++ 240, 225, 250, 5, 70, 8, 177, 1, 35, 165, 227, 254, 247, 216, 254, 13, ++ 171, 1, 147, 14, 171, 2, 147, 72, 70, 49, 70, 28, 154, 29, 155, 205, ++ 248, 0, 160, 2, 240, 250, 249, 7, 70, 24, 185, 1, 35, 12, 147, 4, 70, ++ 183, 227, 13, 152, 72, 177, 170, 73, 180, 243, 121, 242, 40, 177, 41, ++ 70, 42, 70, 185, 247, 74, 248, 31, 250, 128, 249, 31, 155, 48, 70, 0, ++ 147, 65, 70, 12, 170, 75, 70, 1, 240, 132, 248, 4, 70, 0, 40, 0, 240, ++ 184, 131, 5, 104, 14, 154, 70, 96, 13, 155, 197, 248, 224, 32, 208, ++ 248, 116, 36, 255, 33, 197, 248, 216, 112, 197, 248, 220, 48, 130, 248, ++ 96, 16, 66, 106, 0, 35, 194, 97, 7, 154, 13, 147, 130, 96, 150, 74, ++ 197, 248, 12, 128, 197, 248, 168, 32, 110, 97, 14, 147, 1, 34, 128, ++ 248, 42, 38, 208, 248, 196, 34, 192, 248, 168, 161, 99, 243, 23, 34, ++ 192, 248, 196, 34, 8, 154, 65, 70, 133, 248, 33, 32, 128, 248, 211, ++ 49, 3, 35, 128, 248, 49, 53, 255, 247, 4, 250, 35, 104, 4, 245, 196, ++ 98, 219, 105, 96, 104, 25, 110, 4, 50, 248, 247, 118, 255, 7, 70, 0, ++ 40, 64, 240, 97, 131, 32, 70, 57, 70, 211, 243, 75, 247, 32, 70, 7, ++ 153, 50, 70, 67, 70, 6, 240, 225, 251, 196, 248, 104, 1, 8, 185, 15, ++ 35, 43, 227, 122, 75, 40, 70, 141, 232, 136, 0, 121, 75, 122, 73, 4, ++ 147, 122, 75, 122, 74, 5, 147, 35, 70, 2, 151, 3, 151, 255, 247, 237, ++ 250, 8, 177, 16, 35, 25, 227, 8, 155, 28, 154, 141, 232, 72, 0, 29, ++ 155, 2, 146, 3, 147, 32, 70, 9, 153, 74, 70, 67, 70, 205, 248, 16, 160, ++ 2, 240, 99, 250, 12, 144, 0, 40, 64, 240, 45, 131, 35, 105, 216, 111, ++ 254, 247, 216, 250, 164, 248, 40, 6, 180, 248, 174, 1, 194, 247, 111, ++ 252, 0, 48, 24, 191, 1, 32, 10, 48, 84, 248, 32, 48, 10, 169, 35, 98, ++ 32, 105, 245, 243, 134, 246, 0, 40, 61, 209, 10, 155, 7, 70, 196, 248, ++ 180, 49, 57, 70, 15, 170, 32, 70, 211, 243, 23, 244, 57, 70, 32, 70, ++ 189, 248, 60, 32, 1, 55, 211, 243, 20, 244, 6, 47, 241, 209, 79, 244, ++ 0, 115, 197, 248, 236, 48, 42, 35, 197, 248, 188, 48, 50, 35, 197, 248, ++ 192, 48, 54, 35, 79, 244, 125, 98, 197, 248, 200, 48, 64, 242, 212, ++ 83, 165, 248, 206, 32, 165, 248, 196, 48, 79, 244, 93, 114, 0, 35, 133, ++ 248, 187, 112, 165, 248, 204, 32, 132, 248, 132, 55, 213, 248, 188, ++ 48, 132, 43, 2, 217, 132, 35, 197, 248, 188, 48, 79, 244, 4, 112, 186, ++ 247, 67, 255, 196, 248, 128, 2, 8, 185, 20, 35, 175, 226, 79, 244, 4, ++ 114, 0, 33, 179, 243, 31, 243, 34, 70, 0, 35, 210, 248, 132, 2, 212, ++ 248, 128, 18, 4, 50, 65, 248, 35, 0, 212, 248, 128, 18, 81, 248, 35, ++ 16, 139, 113, 1, 51, 4, 43, 240, 209, 1, 35, 133, 248, 147, 48, 35, ++ 106, 24, 105, 222, 247, 191, 250, 0, 240, 1, 0, 133, 248, 84, 0, 35, ++ 106, 24, 105, 222, 247, 183, 250, 192, 243, 192, 0, 133, 248, 85, 0, ++ 41, 70, 32, 70, 6, 240, 137, 254, 43, 73, 213, 248, 220, 0, 180, 243, ++ 70, 241, 213, 248, 216, 32, 64, 242, 110, 81, 147, 106, 7, 70, 139, ++ 66, 8, 208, 18, 107, 65, 242, 107, 1, 138, 66, 90, 209, 209, 43, 1, ++ 208, 233, 43, 18, 209, 212, 248, 116, 52, 25, 34, 131, 248, 73, 32, ++ 212, 248, 116, 52, 79, 240, 255, 50, 90, 100, 100, 34, 131, 248, 122, ++ 32, 212, 248, 116, 52, 1, 34, 131, 248, 48, 32, 89, 224, 179, 245, 137, ++ 127, 17, 216, 179, 245, 136, 127, 50, 216, 245, 43, 7, 216, 244, 43, ++ 46, 210, 228, 43, 44, 208, 239, 43, 42, 208, 214, 43, 39, 224, 163, ++ 245, 135, 115, 1, 43, 69, 216, 35, 224, 179, 245, 154, 127, 23, 210, ++ 179, 245, 152, 127, 29, 216, 64, 242, 23, 18, 147, 66, 24, 224, 0, 191, ++ 144, 158, 5, 0, 95, 98, 45, 7, 229, 91, 130, 0, 64, 52, 4, 0, 216, 182, ++ 135, 0, 117, 73, 1, 0, 150, 51, 4, 0, 155, 158, 5, 0, 179, 245, 154, ++ 127, 38, 217, 179, 245, 155, 127, 2, 217, 179, 245, 165, 127, 32, 209, ++ 212, 248, 116, 52, 50, 34, 131, 248, 122, 32, 212, 248, 116, 52, 100, ++ 34, 131, 248, 73, 32, 16, 224, 65, 242, 228, 65, 138, 66, 17, 209, 64, ++ 242, 218, 82, 147, 66, 13, 209, 212, 248, 116, 36, 100, 35, 130, 248, ++ 122, 48, 212, 248, 116, 36, 130, 248, 73, 48, 212, 248, 116, 52, 79, ++ 240, 255, 50, 90, 100, 212, 248, 116, 52, 100, 34, 163, 248, 74, 32, ++ 163, 248, 76, 32, 80, 34, 163, 248, 146, 32, 255, 34, 163, 248, 150, ++ 32, 163, 248, 154, 32, 40, 34, 163, 248, 148, 32, 100, 34, 163, 248, ++ 152, 32, 163, 248, 156, 32, 80, 34, 163, 248, 158, 32, 255, 34, 163, ++ 248, 162, 32, 163, 248, 166, 32, 40, 34, 163, 248, 160, 32, 100, 34, ++ 163, 248, 164, 32, 163, 248, 168, 32, 79, 240, 1, 9, 25, 34, 163, 248, ++ 170, 32, 163, 248, 144, 144, 32, 70, 6, 240, 245, 252, 212, 248, 116, ++ 52, 34, 106, 25, 120, 16, 105, 218, 120, 222, 247, 74, 252, 212, 248, ++ 96, 54, 131, 248, 52, 144, 225, 105, 32, 105, 4, 49, 3, 240, 231, 251, ++ 35, 106, 212, 248, 116, 164, 24, 105, 222, 247, 91, 252, 202, 248, 64, ++ 0, 4, 245, 230, 122, 32, 105, 81, 70, 245, 243, 46, 240, 6, 34, 40, ++ 29, 81, 70, 177, 247, 159, 254, 35, 106, 24, 105, 222, 247, 211, 249, ++ 195, 5, 4, 213, 35, 104, 195, 248, 64, 145, 131, 248, 61, 145, 180, ++ 248, 174, 1, 194, 247, 14, 251, 0, 48, 24, 191, 1, 32, 10, 48, 84, 248, ++ 32, 48, 32, 70, 35, 98, 254, 247, 108, 255, 8, 185, 24, 35, 142, 225, ++ 33, 106, 15, 35, 64, 242, 255, 50, 161, 248, 8, 49, 161, 248, 10, 33, ++ 1, 245, 128, 115, 1, 241, 252, 2, 32, 70, 1, 240, 34, 252, 35, 106, ++ 211, 248, 252, 32, 195, 248, 248, 32, 195, 248, 240, 32, 211, 248, 0, ++ 33, 195, 248, 244, 32, 26, 104, 2, 42, 1, 209, 1, 34, 90, 117, 7, 240, ++ 1, 3, 0, 43, 12, 191, 3, 35, 0, 35, 133, 248, 79, 48, 35, 106, 24, 105, ++ 222, 247, 144, 249, 16, 244, 0, 96, 35, 104, 6, 208, 147, 248, 79, 32, ++ 2, 177, 1, 34, 131, 248, 81, 32, 1, 224, 131, 248, 81, 0, 33, 106, 32, ++ 70, 28, 49, 213, 243, 4, 241, 0, 33, 32, 70, 212, 248, 32, 144, 217, ++ 243, 62, 245, 0, 34, 127, 35, 9, 241, 80, 1, 0, 147, 1, 144, 19, 70, ++ 9, 241, 28, 0, 232, 247, 241, 250, 32, 70, 238, 247, 241, 255, 64, 242, ++ 204, 99, 196, 248, 16, 54, 32, 70, 255, 247, 105, 250, 12, 144, 0, 40, ++ 64, 240, 89, 129, 212, 248, 112, 4, 2, 33, 157, 249, 44, 32, 21, 240, ++ 88, 217, 32, 70, 65, 70, 254, 247, 156, 255, 16, 185, 79, 244, 122, ++ 115, 35, 225, 32, 70, 2, 240, 241, 253, 196, 248, 92, 1, 16, 185, 64, ++ 242, 233, 51, 26, 225, 32, 70, 255, 247, 218, 249, 32, 70, 49, 70, 223, ++ 243, 122, 246, 16, 185, 64, 242, 235, 51, 15, 225, 196, 248, 164, 5, ++ 196, 248, 168, 5, 49, 70, 32, 70, 223, 243, 110, 246, 16, 185, 79, 244, ++ 123, 115, 3, 225, 1, 35, 196, 248, 172, 5, 133, 248, 172, 48, 32, 70, ++ 2, 240, 218, 251, 16, 177, 64, 242, 237, 51, 247, 224, 6, 35, 165, 248, ++ 96, 48, 165, 248, 98, 48, 149, 248, 156, 48, 1, 43, 4, 209, 64, 34, ++ 165, 248, 96, 32, 165, 248, 98, 32, 213, 248, 136, 48, 10, 34, 26, 128, ++ 79, 244, 84, 114, 90, 128, 213, 248, 140, 48, 1, 38, 196, 34, 30, 128, ++ 90, 128, 212, 248, 48, 1, 230, 243, 65, 243, 8, 177, 132, 248, 18, 98, ++ 180, 248, 197, 50, 67, 244, 192, 83, 67, 240, 30, 3, 164, 248, 197, ++ 50, 35, 106, 24, 105, 222, 247, 246, 248, 192, 6, 7, 213, 212, 248, ++ 116, 52, 1, 34, 154, 116, 212, 248, 116, 52, 255, 34, 218, 116, 180, ++ 248, 197, 34, 79, 242, 255, 115, 19, 64, 212, 248, 116, 36, 164, 248, ++ 197, 50, 210, 120, 1, 42, 7, 209, 35, 244, 0, 99, 35, 240, 12, 3, 27, ++ 4, 27, 12, 164, 248, 197, 50, 255, 38, 2, 33, 1, 34, 132, 248, 196, ++ 98, 132, 248, 195, 98, 132, 248, 194, 98, 32, 70, 210, 243, 18, 244, ++ 1, 33, 50, 70, 32, 70, 210, 243, 13, 244, 35, 106, 79, 240, 255, 56, ++ 196, 248, 24, 130, 24, 105, 222, 247, 191, 248, 16, 240, 4, 6, 32, 70, ++ 5, 208, 3, 33, 206, 243, 250, 240, 132, 248, 32, 130, 4, 224, 49, 70, ++ 206, 243, 244, 240, 132, 248, 32, 98, 35, 106, 24, 105, 222, 247, 172, ++ 248, 57, 7, 2, 213, 0, 35, 132, 248, 32, 50, 250, 6, 3, 213, 32, 70, ++ 0, 33, 206, 243, 227, 240, 187, 7, 14, 213, 162, 106, 0, 35, 130, 248, ++ 77, 48, 226, 106, 130, 248, 77, 48, 180, 248, 197, 50, 35, 240, 128, ++ 3, 27, 4, 27, 12, 164, 248, 197, 50, 126, 7, 3, 213, 32, 70, 0, 33, ++ 238, 247, 26, 248, 56, 6, 7, 213, 180, 248, 197, 50, 35, 240, 16, 3, ++ 27, 4, 27, 12, 164, 248, 197, 50, 149, 248, 66, 48, 163, 177, 149, 248, ++ 67, 48, 139, 177, 23, 240, 96, 15, 14, 208, 7, 240, 32, 1, 209, 241, ++ 1, 1, 7, 240, 64, 2, 56, 191, 0, 33, 210, 241, 1, 2, 32, 70, 56, 191, ++ 0, 34, 0, 240, 254, 254, 180, 248, 174, 1, 194, 247, 170, 249, 0, 48, ++ 24, 191, 1, 32, 0, 241, 10, 6, 84, 248, 38, 112, 212, 248, 108, 18, ++ 32, 70, 56, 74, 59, 70, 25, 240, 86, 220, 184, 97, 84, 248, 38, 16, ++ 136, 105, 16, 185, 64, 242, 76, 67, 33, 224, 80, 49, 40, 34, 76, 48, ++ 177, 247, 17, 253, 20, 32, 183, 243, 154, 246, 196, 248, 28, 7, 16, ++ 185, 64, 242, 77, 67, 19, 224, 171, 109, 32, 70, 67, 240, 4, 3, 171, ++ 101, 220, 243, 11, 240, 32, 70, 255, 247, 88, 248, 16, 177, 79, 244, ++ 250, 99, 5, 224, 32, 70, 2, 240, 231, 254, 24, 177, 64, 242, 209, 115, ++ 12, 147, 35, 224, 35, 104, 33, 73, 211, 248, 220, 0, 179, 243, 228, ++ 246, 112, 177, 3, 70, 24, 70, 19, 248, 1, 43, 26, 177, 28, 73, 138, ++ 92, 81, 7, 247, 213, 0, 33, 10, 34, 184, 247, 172, 252, 196, 248, 108, ++ 6, 160, 104, 0, 33, 200, 243, 62, 245, 1, 35, 132, 248, 152, 55, 187, ++ 241, 0, 15, 23, 208, 0, 35, 203, 248, 0, 48, 19, 224, 13, 152, 32, 177, ++ 186, 247, 103, 252, 0, 35, 13, 147, 14, 147, 20, 177, 32, 70, 255, 247, ++ 87, 251, 187, 241, 0, 15, 4, 208, 12, 155, 0, 36, 203, 248, 0, 48, 0, ++ 224, 92, 70, 32, 70, 17, 176, 189, 232, 240, 143, 48, 70, 57, 70, 1, ++ 240, 37, 254, 226, 231, 0, 191, 132, 53, 4, 0, 94, 157, 5, 0, 22, 119, ++ 135, 0, 56, 181, 4, 70, 112, 177, 5, 104, 33, 70, 40, 104, 255, 247, ++ 66, 248, 40, 104, 5, 73, 34, 70, 254, 247, 30, 255, 32, 70, 189, 232, ++ 56, 64, 186, 247, 53, 188, 56, 189, 0, 191, 138, 53, 4, 0, 112, 181, ++ 6, 106, 142, 176, 5, 70, 56, 32, 183, 243, 25, 246, 4, 70, 0, 40, 49, ++ 208, 28, 75, 5, 96, 0, 147, 0, 35, 1, 147, 2, 147, 3, 147, 26, 75, 26, ++ 73, 4, 147, 26, 75, 27, 74, 5, 147, 40, 104, 35, 70, 254, 247, 85, 255, ++ 248, 185, 24, 75, 33, 70, 0, 147, 40, 104, 23, 74, 2, 35, 254, 247, ++ 159, 255, 5, 70, 168, 185, 41, 70, 28, 34, 4, 241, 11, 0, 178, 243, ++ 232, 247, 48, 105, 49, 104, 7, 170, 221, 247, 153, 250, 35, 70, 7, 170, ++ 217, 122, 170, 92, 1, 53, 10, 67, 218, 114, 1, 51, 28, 45, 246, 209, ++ 3, 224, 32, 70, 255, 247, 171, 255, 0, 36, 32, 70, 14, 176, 112, 189, ++ 0, 191, 57, 12, 131, 0, 144, 53, 4, 0, 108, 194, 135, 0, 213, 148, 1, ++ 0, 138, 53, 4, 0, 92, 194, 135, 0, 241, 11, 131, 0, 56, 181, 4, 70, ++ 112, 177, 5, 104, 33, 70, 40, 104, 254, 247, 218, 255, 40, 104, 5, 73, ++ 34, 70, 254, 247, 182, 254, 32, 70, 189, 232, 56, 64, 186, 247, 205, ++ 187, 56, 189, 0, 191, 180, 53, 4, 0, 48, 181, 5, 70, 135, 176, 12, 32, ++ 183, 243, 178, 245, 4, 70, 0, 40, 63, 208, 0, 35, 5, 96, 1, 33, 0, 147, ++ 1, 144, 32, 74, 40, 70, 32, 75, 2, 240, 207, 249, 0, 40, 96, 96, 50, ++ 219, 30, 75, 213, 248, 124, 6, 141, 232, 24, 0, 5, 33, 33, 34, 28, 75, ++ 3, 240, 240, 249, 56, 187, 27, 75, 213, 248, 124, 6, 141, 232, 24, 0, ++ 5, 33, 36, 34, 24, 75, 3, 240, 229, 249, 224, 185, 23, 75, 1, 144, 0, ++ 147, 2, 144, 3, 144, 4, 144, 5, 144, 21, 73, 40, 104, 21, 74, 35, 70, ++ 254, 247, 207, 254, 112, 185, 19, 75, 40, 104, 0, 147, 33, 70, 18, 74, ++ 3, 35, 254, 247, 25, 255, 40, 185, 42, 104, 1, 35, 163, 96, 130, 248, ++ 173, 48, 3, 224, 32, 70, 255, 247, 158, 255, 0, 36, 32, 70, 7, 176, ++ 48, 189, 185, 16, 131, 0, 181, 16, 131, 0, 33, 150, 1, 0, 189, 16, 131, ++ 0, 125, 19, 131, 0, 221, 16, 131, 0, 221, 17, 131, 0, 168, 194, 135, ++ 0, 180, 53, 4, 0, 144, 194, 135, 0, 97, 17, 131, 0, 48, 181, 5, 70, ++ 135, 176, 0, 40, 109, 208, 8, 32, 183, 243, 74, 245, 4, 70, 0, 40, 104, ++ 208, 0, 35, 5, 96, 20, 33, 0, 147, 1, 144, 53, 74, 40, 70, 53, 75, 2, ++ 240, 103, 249, 0, 40, 96, 96, 94, 219, 51, 75, 79, 244, 152, 113, 141, ++ 232, 24, 0, 107, 34, 213, 248, 124, 6, 48, 75, 3, 240, 135, 249, 0, ++ 40, 81, 209, 47, 75, 5, 33, 141, 232, 24, 0, 107, 34, 213, 248, 124, ++ 6, 44, 75, 3, 240, 123, 249, 0, 40, 69, 209, 43, 75, 79, 244, 144, 113, ++ 141, 232, 24, 0, 108, 34, 213, 248, 124, 6, 40, 75, 3, 240, 110, 249, ++ 0, 40, 56, 209, 38, 75, 79, 244, 144, 113, 141, 232, 24, 0, 111, 34, ++ 213, 248, 124, 6, 35, 75, 3, 240, 97, 249, 0, 40, 43, 209, 34, 75, 10, ++ 33, 141, 232, 24, 0, 110, 34, 213, 248, 124, 6, 31, 75, 3, 240, 85, ++ 249, 0, 40, 31, 209, 0, 149, 213, 248, 124, 6, 10, 33, 110, 34, 27, ++ 75, 3, 240, 59, 251, 176, 185, 26, 75, 1, 144, 0, 147, 2, 144, 3, 144, ++ 4, 144, 5, 144, 40, 104, 23, 73, 24, 74, 35, 70, 254, 247, 53, 254, ++ 64, 185, 43, 104, 1, 34, 131, 248, 176, 32, 0, 224, 4, 70, 32, 70, 7, ++ 176, 48, 189, 32, 70, 186, 247, 233, 250, 0, 36, 247, 231, 15, 151, ++ 1, 0, 239, 150, 1, 0, 249, 26, 131, 0, 33, 151, 1, 0, 217, 26, 131, ++ 0, 5, 25, 131, 0, 25, 27, 131, 0, 65, 25, 131, 0, 133, 27, 131, 0, 129, ++ 25, 131, 0, 177, 27, 131, 0, 173, 25, 131, 0, 205, 24, 131, 0, 217, ++ 25, 131, 0, 192, 194, 135, 0, 184, 53, 4, 0, 16, 181, 4, 70, 80, 177, ++ 3, 104, 5, 73, 24, 104, 34, 70, 254, 247, 162, 253, 32, 70, 189, 232, ++ 16, 64, 186, 247, 185, 186, 16, 189, 0, 191, 184, 53, 4, 0, 16, 181, ++ 4, 70, 80, 177, 3, 104, 5, 73, 24, 104, 34, 70, 254, 247, 144, 253, ++ 32, 70, 189, 232, 16, 64, 186, 247, 167, 186, 16, 189, 0, 191, 171, ++ 158, 5, 0, 112, 181, 5, 70, 134, 176, 8, 32, 186, 247, 154, 250, 4, ++ 70, 0, 40, 0, 240, 161, 128, 83, 75, 5, 96, 79, 244, 144, 113, 0, 147, ++ 1, 144, 48, 34, 213, 248, 124, 6, 80, 75, 3, 240, 212, 248, 0, 40, 64, ++ 240, 146, 128, 78, 75, 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, 144, ++ 113, 160, 34, 75, 75, 3, 240, 82, 249, 0, 40, 64, 240, 132, 128, 73, ++ 75, 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, 144, 113, 196, 34, 70, ++ 75, 3, 240, 68, 249, 0, 40, 118, 209, 68, 75, 213, 248, 124, 6, 141, ++ 232, 24, 0, 5, 33, 48, 34, 66, 75, 3, 240, 172, 248, 0, 40, 106, 209, ++ 64, 75, 213, 248, 124, 6, 141, 232, 24, 0, 5, 33, 160, 34, 62, 75, 3, ++ 240, 44, 249, 0, 40, 94, 209, 60, 75, 213, 248, 124, 6, 141, 232, 24, ++ 0, 5, 33, 196, 34, 58, 75, 3, 240, 32, 249, 0, 40, 82, 209, 213, 248, ++ 124, 6, 5, 33, 48, 34, 54, 75, 0, 148, 3, 240, 122, 250, 0, 40, 72, ++ 209, 213, 248, 124, 6, 5, 33, 160, 34, 50, 75, 0, 148, 3, 240, 246, ++ 250, 0, 40, 62, 209, 213, 248, 124, 6, 5, 33, 196, 34, 46, 75, 0, 148, ++ 3, 240, 236, 250, 0, 40, 52, 209, 213, 248, 124, 6, 192, 33, 48, 34, ++ 42, 75, 0, 148, 3, 240, 92, 250, 88, 187, 213, 248, 124, 6, 192, 33, ++ 160, 34, 39, 75, 0, 148, 3, 240, 217, 250, 16, 187, 213, 248, 124, 6, ++ 128, 33, 48, 34, 35, 75, 0, 148, 3, 240, 6, 249, 6, 70, 192, 185, 141, ++ 232, 17, 0, 1, 33, 40, 70, 31, 74, 32, 75, 2, 240, 34, 248, 0, 40, 96, ++ 96, 13, 219, 30, 75, 40, 104, 141, 232, 72, 0, 29, 73, 29, 74, 35, 70, ++ 2, 150, 3, 150, 4, 150, 5, 150, 254, 247, 56, 253, 24, 177, 32, 70, ++ 255, 247, 64, 255, 0, 36, 32, 70, 6, 176, 112, 189, 209, 44, 131, 0, ++ 193, 43, 131, 0, 253, 44, 131, 0, 237, 43, 131, 0, 165, 44, 131, 0, ++ 161, 43, 131, 0, 189, 42, 131, 0, 253, 39, 131, 0, 233, 42, 131, 0, ++ 41, 40, 131, 0, 145, 42, 131, 0, 221, 39, 131, 0, 69, 41, 131, 0, 113, ++ 41, 131, 0, 225, 40, 131, 0, 249, 47, 131, 0, 17, 48, 131, 0, 81, 44, ++ 131, 0, 85, 45, 131, 0, 81, 45, 131, 0, 117, 46, 131, 0, 124, 195, 135, ++ 0, 171, 158, 5, 0, 79, 244, 240, 98, 130, 96, 16, 34, 194, 96, 66, 98, ++ 192, 248, 184, 32, 128, 34, 66, 99, 24, 34, 130, 99, 2, 100, 2, 101, ++ 29, 34, 45, 233, 240, 65, 194, 101, 11, 37, 5, 34, 64, 36, 10, 33, 69, ++ 97, 133, 97, 2, 102, 4, 37, 79, 244, 240, 114, 32, 35, 8, 38, 4, 96, ++ 192, 248, 176, 64, 1, 97, 193, 97, 133, 98, 1, 33, 79, 244, 128, 101, ++ 196, 98, 79, 240, 20, 12, 9, 36, 17, 39, 130, 102, 79, 240, 39, 8, 3, ++ 34, 67, 96, 192, 248, 180, 48, 1, 98, 65, 102, 193, 100, 67, 101, 132, ++ 103, 192, 248, 48, 192, 198, 99, 135, 101, 197, 102, 5, 103, 66, 103, ++ 192, 248, 124, 128, 192, 248, 164, 16, 176, 33, 192, 248, 192, 16, 72, ++ 33, 192, 248, 196, 16, 96, 33, 192, 248, 132, 64, 192, 248, 136, 64, ++ 192, 248, 200, 16, 2, 36, 48, 33, 192, 248, 224, 48, 192, 248, 240, ++ 48, 211, 35, 79, 240, 18, 8, 192, 248, 140, 64, 192, 248, 144, 64, 192, ++ 248, 156, 64, 192, 248, 160, 64, 192, 248, 204, 16, 79, 244, 250, 100, ++ 6, 33, 192, 248, 244, 48, 0, 35, 192, 248, 128, 128, 192, 248, 148, ++ 192, 192, 248, 152, 32, 192, 248, 168, 32, 192, 248, 172, 96, 192, 248, ++ 208, 16, 192, 248, 212, 112, 192, 248, 216, 64, 192, 248, 220, 96, 192, ++ 248, 232, 16, 192, 248, 228, 80, 192, 248, 252, 48, 192, 248, 248, 32, ++ 189, 232, 240, 129, 1, 32, 112, 71, 112, 71, 56, 181, 4, 70, 208, 248, ++ 16, 3, 32, 177, 186, 247, 52, 249, 0, 35, 196, 248, 16, 51, 212, 248, ++ 24, 3, 32, 177, 186, 247, 44, 249, 0, 35, 196, 248, 24, 51, 212, 248, ++ 4, 7, 48, 177, 35, 104, 35, 177, 186, 247, 34, 249, 0, 35, 196, 248, ++ 4, 55, 212, 248, 168, 2, 24, 177, 35, 104, 11, 177, 186, 247, 24, 249, ++ 212, 248, 172, 2, 0, 37, 196, 248, 168, 82, 40, 177, 35, 104, 27, 177, ++ 186, 247, 14, 249, 196, 248, 172, 82, 212, 248, 104, 2, 8, 177, 186, ++ 247, 7, 249, 212, 248, 56, 3, 0, 37, 196, 248, 104, 82, 24, 177, 186, ++ 247, 255, 248, 196, 248, 56, 83, 212, 248, 248, 2, 32, 177, 186, 247, ++ 248, 248, 0, 35, 196, 248, 248, 50, 212, 248, 184, 2, 8, 177, 186, 247, ++ 240, 248, 0, 37, 99, 25, 211, 248, 132, 50, 211, 248, 224, 0, 8, 177, ++ 186, 247, 231, 248, 4, 53, 16, 45, 244, 209, 212, 248, 132, 2, 8, 177, ++ 186, 247, 223, 248, 212, 248, 116, 4, 32, 177, 186, 247, 218, 248, 0, ++ 35, 196, 248, 116, 52, 212, 248, 204, 4, 32, 177, 186, 247, 210, 248, ++ 0, 35, 196, 248, 204, 52, 212, 248, 24, 5, 32, 177, 186, 247, 202, 248, ++ 0, 35, 196, 248, 24, 53, 56, 189, 16, 181, 12, 70, 209, 177, 200, 105, ++ 24, 177, 186, 247, 191, 248, 0, 35, 227, 97, 212, 248, 136, 0, 32, 177, ++ 186, 247, 184, 248, 0, 35, 196, 248, 136, 48, 212, 248, 140, 0, 32, ++ 177, 186, 247, 176, 248, 0, 35, 196, 248, 140, 48, 32, 70, 189, 232, ++ 16, 64, 186, 247, 168, 184, 16, 189, 112, 181, 4, 70, 79, 244, 182, ++ 112, 22, 70, 183, 243, 143, 242, 5, 70, 168, 177, 79, 244, 128, 112, ++ 183, 243, 137, 242, 232, 97, 120, 177, 49, 70, 255, 247, 210, 254, 79, ++ 244, 84, 112, 183, 243, 128, 242, 197, 248, 136, 0, 40, 177, 196, 32, ++ 183, 243, 122, 242, 197, 248, 140, 0, 32, 185, 41, 70, 32, 70, 255, ++ 247, 190, 255, 0, 37, 40, 70, 112, 189, 45, 233, 240, 65, 29, 70, 0, ++ 38, 3, 104, 192, 248, 168, 98, 147, 248, 184, 48, 4, 70, 56, 32, 88, ++ 67, 183, 243, 98, 242, 196, 248, 168, 2, 0, 40, 86, 208, 35, 104, 147, ++ 248, 184, 0, 128, 0, 183, 243, 88, 242, 196, 248, 172, 2, 16, 185, 64, ++ 242, 245, 51, 149, 224, 79, 244, 2, 112, 183, 243, 78, 242, 196, 248, ++ 4, 7, 0, 40, 0, 240, 150, 128, 196, 248, 104, 98, 32, 32, 183, 243, ++ 68, 242, 196, 248, 104, 2, 16, 185, 79, 244, 126, 115, 129, 224, 79, ++ 244, 146, 112, 183, 243, 58, 242, 196, 248, 56, 3, 16, 185, 64, 242, ++ 242, 51, 119, 224, 79, 244, 174, 112, 183, 243, 48, 242, 196, 248, 116, ++ 4, 16, 185, 64, 242, 249, 51, 109, 224, 128, 32, 102, 106, 183, 243, ++ 38, 242, 176, 98, 16, 185, 64, 242, 3, 67, 100, 224, 79, 244, 132, 112, ++ 183, 243, 29, 242, 196, 248, 16, 3, 16, 185, 64, 242, 239, 51, 90, 224, ++ 79, 244, 132, 112, 183, 243, 19, 242, 196, 248, 24, 3, 16, 185, 79, ++ 244, 124, 115, 80, 224, 18, 32, 183, 243, 10, 242, 196, 248, 248, 2, ++ 16, 185, 79, 244, 125, 115, 71, 224, 180, 32, 183, 243, 1, 242, 196, ++ 248, 184, 2, 16, 185, 64, 242, 246, 51, 62, 224, 79, 244, 100, 112, ++ 183, 243, 247, 241, 196, 248, 132, 2, 240, 177, 0, 241, 228, 3, 196, ++ 248, 136, 50, 0, 245, 228, 115, 0, 245, 43, 112, 196, 248, 140, 50, ++ 196, 248, 144, 2, 38, 70, 4, 241, 16, 7, 35, 104, 214, 248, 132, 130, ++ 219, 105, 211, 248, 212, 0, 64, 1, 183, 243, 220, 241, 200, 248, 224, ++ 0, 214, 248, 132, 50, 211, 248, 224, 0, 16, 185, 64, 242, 247, 51, 21, ++ 224, 4, 54, 190, 66, 233, 209, 79, 244, 132, 112, 183, 243, 203, 241, ++ 196, 248, 204, 4, 16, 185, 64, 242, 251, 51, 8, 224, 79, 244, 134, 112, ++ 183, 243, 193, 241, 196, 248, 24, 5, 32, 185, 64, 242, 255, 51, 43, ++ 96, 189, 232, 240, 129, 56, 32, 183, 243, 182, 241, 196, 248, 96, 6, ++ 16, 185, 79, 244, 129, 99, 243, 231, 1, 32, 189, 232, 240, 129, 56, ++ 181, 13, 70, 4, 70, 0, 40, 43, 208, 255, 247, 123, 254, 32, 70, 41, ++ 70, 255, 247, 120, 254, 160, 106, 8, 177, 185, 247, 175, 255, 99, 106, ++ 91, 177, 152, 106, 32, 177, 185, 247, 169, 255, 99, 106, 0, 34, 154, ++ 98, 96, 106, 185, 247, 163, 255, 0, 35, 99, 98, 212, 248, 96, 6, 32, ++ 177, 185, 247, 156, 255, 0, 35, 196, 248, 96, 54, 33, 104, 33, 177, ++ 40, 70, 255, 247, 206, 254, 0, 35, 35, 96, 32, 70, 189, 232, 56, 64, ++ 185, 247, 141, 191, 56, 189, 0, 0, 45, 233, 243, 65, 6, 70, 64, 246, ++ 100, 0, 136, 70, 21, 70, 31, 70, 183, 243, 112, 241, 4, 70, 16, 185, ++ 64, 242, 234, 51, 16, 224, 38, 35, 192, 248, 200, 53, 192, 248, 204, ++ 53, 8, 155, 65, 70, 192, 248, 8, 55, 58, 70, 48, 70, 255, 247, 200, ++ 254, 32, 96, 24, 185, 64, 242, 235, 51, 43, 96, 45, 224, 65, 35, 26, ++ 74, 128, 248, 184, 48, 35, 104, 18, 104, 4, 96, 195, 248, 152, 32, 79, ++ 244, 10, 112, 183, 243, 75, 241, 160, 98, 64, 177, 0, 245, 138, 112, ++ 224, 98, 44, 32, 183, 243, 67, 241, 96, 98, 48, 185, 2, 224, 64, 242, ++ 242, 51, 226, 231, 64, 242, 243, 51, 223, 231, 32, 70, 49, 70, 66, 70, ++ 43, 70, 0, 151, 255, 247, 195, 254, 56, 177, 32, 70, 49, 70, 66, 70, ++ 43, 70, 0, 151, 255, 247, 254, 253, 32, 185, 32, 70, 49, 70, 255, 247, ++ 121, 255, 0, 36, 32, 70, 189, 232, 252, 129, 116, 7, 0, 0, 3, 104, 11, ++ 34, 219, 105, 195, 248, 188, 32, 90, 97, 154, 97, 112, 71, 16, 181, ++ 4, 70, 248, 177, 208, 248, 80, 2, 8, 177, 185, 247, 33, 255, 212, 248, ++ 232, 2, 32, 177, 185, 247, 28, 255, 0, 35, 196, 248, 232, 50, 212, 248, ++ 252, 3, 32, 177, 185, 247, 20, 255, 0, 35, 196, 248, 252, 51, 35, 104, ++ 5, 73, 24, 104, 34, 70, 254, 247, 239, 249, 32, 70, 189, 232, 16, 64, ++ 185, 247, 6, 191, 16, 189, 216, 54, 4, 0, 128, 248, 192, 19, 112, 71, ++ 0, 0, 240, 181, 135, 176, 5, 70, 255, 247, 201, 255, 64, 242, 4, 64, ++ 185, 247, 243, 254, 4, 70, 0, 40, 0, 240, 212, 128, 0, 33, 64, 242, ++ 4, 66, 64, 38, 178, 243, 207, 242, 37, 96, 132, 248, 225, 99, 188, 32, ++ 185, 247, 227, 254, 196, 248, 80, 2, 0, 40, 0, 240, 186, 128, 0, 33, ++ 188, 34, 178, 243, 192, 242, 1, 35, 163, 114, 99, 115, 163, 115, 227, ++ 115, 163, 116, 148, 248, 225, 51, 0, 34, 63, 43, 230, 116, 152, 191, ++ 227, 116, 255, 35, 132, 248, 40, 48, 11, 35, 34, 116, 98, 116, 34, 115, ++ 226, 114, 5, 33, 2, 34, 132, 248, 222, 51, 0, 35, 132, 248, 39, 16, ++ 132, 248, 45, 32, 65, 242, 40, 80, 132, 248, 44, 48, 96, 133, 40, 104, ++ 144, 248, 156, 0, 33, 117, 1, 40, 12, 191, 1, 32, 16, 70, 132, 248, ++ 46, 0, 1, 32, 132, 248, 192, 3, 79, 244, 0, 96, 162, 117, 96, 99, 34, ++ 70, 33, 70, 5, 32, 208, 117, 2, 32, 208, 119, 35, 185, 79, 244, 128, ++ 112, 164, 248, 228, 3, 2, 224, 32, 32, 161, 248, 228, 3, 1, 51, 1, 50, ++ 2, 49, 8, 43, 237, 209, 0, 38, 1, 39, 32, 70, 65, 242, 40, 81, 132, ++ 248, 47, 96, 132, 248, 48, 112, 201, 247, 155, 250, 2, 33, 32, 70, 133, ++ 248, 190, 114, 200, 247, 141, 254, 132, 248, 216, 99, 4, 33, 40, 70, ++ 50, 74, 50, 75, 0, 150, 1, 148, 1, 240, 147, 252, 176, 66, 196, 248, ++ 0, 4, 78, 219, 4, 33, 40, 70, 46, 74, 46, 75, 0, 150, 1, 148, 5, 240, ++ 161, 251, 176, 66, 96, 96, 67, 219, 79, 244, 62, 112, 185, 247, 100, ++ 254, 196, 248, 232, 2, 0, 40, 59, 208, 49, 70, 79, 244, 62, 114, 178, ++ 243, 65, 242, 16, 32, 183, 243, 74, 240, 196, 248, 252, 3, 0, 40, 47, ++ 208, 33, 75, 40, 104, 0, 147, 33, 75, 33, 73, 1, 147, 33, 75, 34, 74, ++ 3, 147, 35, 70, 2, 150, 4, 150, 5, 150, 254, 247, 135, 249, 248, 185, ++ 30, 75, 132, 248, 84, 114, 26, 29, 7, 202, 141, 232, 7, 0, 34, 70, 27, ++ 104, 40, 70, 7, 33, 254, 247, 198, 250, 255, 35, 132, 248, 221, 51, ++ 43, 104, 32, 70, 147, 248, 66, 16, 204, 247, 209, 248, 200, 35, 196, ++ 248, 236, 50, 32, 70, 200, 247, 27, 254, 32, 35, 132, 248, 226, 51, ++ 8, 224, 212, 248, 80, 2, 8, 177, 185, 247, 34, 254, 32, 70, 185, 247, ++ 31, 254, 0, 36, 32, 70, 7, 176, 240, 189, 41, 175, 1, 0, 89, 167, 1, ++ 0, 197, 174, 1, 0, 113, 214, 1, 0, 249, 223, 1, 0, 201, 221, 1, 0, 232, ++ 53, 4, 0, 47, 214, 1, 0, 216, 54, 4, 0, 176, 158, 5, 0, 2, 70, 24, 177, ++ 0, 104, 2, 73, 254, 247, 229, 184, 112, 71, 0, 191, 118, 107, 136, 0, ++ 16, 181, 4, 70, 134, 176, 15, 73, 15, 74, 35, 70, 0, 104, 188, 247, ++ 239, 251, 14, 75, 32, 104, 0, 147, 0, 35, 1, 147, 2, 147, 3, 147, 11, ++ 75, 12, 73, 4, 147, 12, 75, 6, 74, 5, 147, 35, 70, 254, 247, 35, 249, ++ 32, 177, 32, 70, 255, 247, 217, 255, 79, 240, 255, 48, 6, 176, 16, 189, ++ 0, 191, 118, 107, 136, 0, 17, 228, 1, 0, 145, 67, 131, 0, 136, 56, 4, ++ 0, 160, 195, 135, 0, 217, 227, 1, 0, 56, 181, 4, 70, 208, 248, 52, 1, ++ 21, 70, 255, 247, 197, 254, 212, 248, 56, 1, 41, 70, 189, 232, 56, 64, ++ 0, 240, 48, 184, 16, 181, 4, 70, 0, 40, 40, 208, 65, 105, 105, 177, ++ 144, 248, 41, 48, 27, 177, 3, 104, 152, 104, 199, 243, 251, 245, 35, ++ 104, 97, 105, 152, 104, 199, 243, 110, 246, 0, 35, 99, 97, 160, 105, ++ 8, 177, 185, 247, 169, 253, 32, 107, 8, 177, 185, 247, 165, 253, 224, ++ 105, 24, 177, 185, 247, 161, 253, 0, 35, 227, 97, 35, 104, 5, 73, 24, ++ 104, 34, 70, 254, 247, 125, 248, 32, 70, 189, 232, 16, 64, 185, 247, ++ 148, 189, 16, 189, 186, 103, 136, 0, 128, 248, 40, 16, 112, 71, 0, 0, ++ 112, 181, 6, 70, 134, 176, 56, 32, 185, 247, 132, 253, 4, 70, 0, 40, ++ 0, 240, 148, 128, 0, 33, 56, 34, 178, 243, 98, 241, 64, 35, 38, 96, ++ 132, 248, 42, 48, 80, 32, 185, 247, 117, 253, 160, 97, 0, 40, 121, 208, ++ 0, 33, 80, 34, 178, 243, 84, 241, 1, 35, 132, 248, 32, 48, 132, 248, ++ 33, 48, 132, 248, 34, 48, 132, 248, 35, 48, 132, 248, 36, 48, 132, 248, ++ 37, 48, 132, 248, 38, 48, 132, 248, 39, 48, 35, 114, 16, 35, 99, 114, ++ 148, 248, 42, 48, 15, 43, 152, 191, 99, 114, 51, 106, 0, 37, 24, 105, ++ 221, 247, 238, 248, 79, 244, 122, 115, 227, 129, 200, 35, 35, 130, 0, ++ 240, 16, 0, 1, 35, 0, 40, 12, 191, 5, 32, 7, 32, 132, 248, 40, 48, 3, ++ 35, 32, 115, 227, 114, 32, 70, 165, 114, 228, 243, 235, 242, 4, 33, ++ 48, 70, 40, 74, 40, 75, 0, 149, 1, 148, 1, 240, 79, 251, 168, 66, 96, ++ 99, 55, 219, 4, 33, 48, 70, 36, 74, 37, 75, 0, 149, 1, 148, 5, 240, ++ 94, 250, 168, 66, 96, 96, 44, 219, 176, 104, 33, 73, 34, 70, 43, 70, ++ 199, 243, 239, 245, 96, 97, 32, 179, 79, 244, 186, 112, 185, 247, 25, ++ 253, 224, 97, 240, 177, 41, 70, 79, 244, 186, 114, 178, 243, 248, 240, ++ 25, 75, 48, 104, 0, 147, 25, 75, 25, 73, 1, 147, 25, 75, 26, 74, 3, ++ 147, 35, 70, 2, 149, 4, 149, 5, 149, 254, 247, 69, 248, 5, 70, 64, 185, ++ 51, 104, 32, 70, 147, 248, 67, 16, 228, 243, 93, 242, 132, 248, 41, ++ 80, 11, 224, 160, 105, 8, 177, 185, 247, 247, 252, 32, 107, 8, 177, ++ 185, 247, 243, 252, 32, 70, 185, 247, 240, 252, 0, 36, 32, 70, 6, 176, ++ 112, 189, 0, 191, 141, 85, 131, 0, 117, 85, 131, 0, 233, 85, 131, 0, ++ 201, 85, 131, 0, 73, 237, 1, 0, 101, 86, 131, 0, 177, 92, 131, 0, 208, ++ 195, 135, 0, 177, 87, 131, 0, 186, 103, 136, 0, 0, 32, 112, 71, 0, 35, ++ 3, 116, 64, 246, 251, 99, 195, 129, 112, 71, 16, 181, 4, 70, 144, 177, ++ 205, 247, 143, 251, 96, 104, 8, 73, 34, 70, 253, 247, 169, 255, 224, ++ 110, 8, 177, 185, 247, 193, 252, 32, 110, 185, 247, 190, 252, 32, 70, ++ 189, 232, 16, 64, 185, 247, 185, 188, 16, 189, 0, 191, 135, 106, 136, ++ 0, 48, 181, 5, 70, 135, 176, 112, 32, 185, 247, 172, 252, 4, 70, 0, ++ 40, 61, 208, 0, 33, 112, 34, 178, 243, 139, 240, 43, 104, 37, 96, 99, ++ 96, 24, 32, 185, 247, 159, 252, 32, 102, 0, 40, 44, 208, 0, 33, 24, ++ 34, 178, 243, 126, 240, 100, 32, 185, 247, 149, 252, 224, 102, 24, 179, ++ 0, 33, 100, 34, 178, 243, 117, 240, 19, 75, 19, 73, 0, 147, 0, 35, 1, ++ 147, 18, 75, 19, 74, 2, 147, 19, 75, 3, 147, 19, 75, 4, 147, 19, 75, ++ 5, 147, 96, 104, 35, 70, 253, 247, 191, 255, 96, 185, 1, 35, 99, 130, ++ 163, 130, 32, 70, 41, 70, 255, 247, 161, 255, 0, 40, 3, 219, 32, 70, ++ 255, 247, 158, 255, 3, 224, 32, 70, 255, 247, 160, 255, 0, 36, 32, 70, ++ 7, 176, 48, 189, 213, 100, 131, 0, 36, 196, 135, 0, 25, 104, 131, 0, ++ 135, 106, 136, 0, 217, 240, 1, 0, 188, 56, 4, 0, 239, 240, 1, 0, 112, ++ 181, 4, 70, 232, 177, 5, 106, 70, 106, 40, 70, 0, 240, 30, 249, 225, ++ 108, 65, 177, 168, 104, 199, 243, 151, 244, 168, 104, 225, 108, 199, ++ 243, 11, 245, 0, 35, 227, 100, 34, 70, 48, 70, 6, 73, 253, 247, 41, ++ 255, 40, 104, 33, 70, 254, 247, 68, 248, 32, 70, 189, 232, 112, 64, ++ 185, 247, 60, 188, 112, 189, 145, 83, 136, 0, 45, 233, 240, 65, 60, ++ 35, 192, 248, 244, 52, 10, 39, 5, 35, 208, 248, 0, 128, 192, 248, 248, ++ 52, 192, 248, 0, 117, 134, 176, 4, 70, 172, 32, 185, 247, 36, 252, 5, ++ 70, 0, 40, 0, 240, 181, 128, 0, 33, 172, 34, 0, 38, 178, 243, 1, 240, ++ 46, 112, 44, 98, 197, 248, 36, 128, 40, 70, 231, 243, 54, 244, 4, 33, ++ 40, 99, 87, 74, 32, 70, 51, 70, 0, 150, 1, 149, 1, 240, 39, 250, 176, ++ 66, 40, 103, 192, 242, 156, 128, 32, 70, 0, 240, 234, 248, 6, 70, 0, ++ 40, 64, 240, 149, 128, 160, 104, 79, 73, 42, 70, 51, 70, 199, 243, 202, ++ 244, 232, 100, 0, 40, 0, 240, 139, 128, 75, 75, 64, 70, 0, 147, 75, ++ 75, 75, 73, 1, 147, 75, 75, 76, 74, 2, 147, 76, 75, 3, 150, 4, 147, ++ 75, 75, 5, 147, 43, 70, 253, 247, 39, 255, 3, 70, 0, 40, 118, 209, 0, ++ 144, 41, 70, 32, 104, 71, 74, 253, 247, 113, 255, 6, 70, 0, 40, 109, ++ 209, 141, 232, 33, 0, 108, 33, 32, 70, 50, 70, 66, 75, 5, 240, 7, 249, ++ 0, 40, 168, 103, 98, 219, 212, 248, 120, 4, 49, 70, 1, 34, 62, 75, 3, ++ 240, 139, 252, 0, 40, 89, 209, 61, 75, 212, 248, 124, 6, 141, 232, 24, ++ 0, 57, 70, 1, 34, 58, 75, 2, 240, 5, 250, 0, 40, 77, 209, 57, 75, 212, ++ 248, 124, 6, 141, 232, 24, 0, 57, 70, 50, 34, 54, 75, 2, 240, 249, 249, ++ 0, 40, 65, 209, 212, 248, 124, 6, 5, 33, 0, 34, 51, 75, 0, 148, 2, 240, ++ 223, 251, 0, 40, 55, 209, 212, 248, 124, 6, 5, 33, 1, 34, 47, 75, 0, ++ 148, 2, 240, 213, 251, 112, 187, 212, 248, 124, 6, 5, 33, 50, 34, 43, ++ 75, 0, 148, 2, 240, 204, 251, 40, 187, 212, 248, 124, 6, 5, 33, 164, ++ 34, 40, 75, 0, 148, 2, 240, 73, 252, 224, 185, 212, 248, 124, 6, 192, ++ 33, 45, 34, 36, 75, 0, 148, 2, 240, 186, 251, 152, 185, 212, 248, 124, ++ 6, 144, 33, 45, 34, 33, 75, 0, 148, 2, 240, 109, 250, 80, 185, 216, ++ 248, 220, 0, 30, 73, 178, 243, 171, 245, 79, 244, 122, 115, 144, 251, ++ 243, 243, 43, 130, 3, 224, 40, 70, 255, 247, 14, 255, 0, 37, 40, 70, ++ 6, 176, 189, 232, 240, 129, 0, 191, 237, 112, 131, 0, 193, 139, 131, ++ 0, 245, 112, 131, 0, 141, 255, 1, 0, 240, 196, 135, 0, 149, 134, 131, ++ 0, 145, 83, 136, 0, 236, 56, 4, 0, 113, 249, 1, 0, 229, 120, 131, 0, ++ 177, 245, 1, 0, 1, 122, 131, 0, 149, 136, 131, 0, 177, 134, 131, 0, ++ 121, 136, 131, 0, 161, 134, 131, 0, 157, 135, 131, 0, 213, 135, 131, ++ 0, 97, 135, 131, 0, 25, 136, 131, 0, 45, 138, 131, 0, 101, 1, 2, 0, ++ 238, 102, 136, 0, 56, 181, 208, 248, 4, 85, 4, 70, 117, 177, 8, 73, ++ 2, 70, 25, 240, 251, 216, 7, 73, 34, 70, 32, 104, 253, 247, 13, 254, ++ 40, 70, 185, 247, 38, 251, 0, 35, 196, 248, 4, 53, 56, 189, 0, 191, ++ 65, 9, 2, 0, 62, 57, 4, 0, 240, 181, 4, 70, 135, 176, 79, 244, 10, 96, ++ 185, 247, 19, 251, 5, 70, 32, 185, 196, 248, 4, 5, 79, 240, 255, 48, ++ 5, 225, 0, 33, 79, 244, 10, 98, 177, 243, 237, 246, 34, 104, 5, 241, ++ 32, 3, 43, 96, 0, 38, 8, 35, 107, 97, 46, 97, 248, 33, 211, 101, 32, ++ 70, 123, 74, 124, 75, 0, 150, 1, 148, 5, 240, 44, 248, 176, 66, 168, ++ 97, 5, 218, 32, 70, 255, 247, 188, 255, 111, 240, 1, 0, 230, 224, 118, ++ 75, 0, 34, 67, 248, 4, 43, 242, 7, 31, 213, 116, 73, 1, 39, 10, 120, ++ 13, 42, 7, 250, 2, 254, 3, 220, 210, 25, 23, 250, 2, 240, 1, 224, 79, ++ 244, 0, 64, 202, 120, 1, 33, 17, 250, 2, 247, 13, 42, 71, 234, 14, 7, ++ 71, 234, 0, 0, 3, 220, 82, 24, 17, 250, 2, 242, 1, 224, 79, 244, 0, ++ 66, 2, 67, 67, 248, 4, 44, 176, 7, 35, 213, 99, 73, 1, 39, 74, 120, ++ 83, 248, 4, 236, 13, 42, 7, 250, 2, 252, 3, 220, 210, 25, 23, 250, 2, ++ 240, 1, 224, 79, 244, 0, 64, 138, 120, 1, 33, 17, 250, 2, 247, 13, 42, ++ 71, 234, 12, 7, 71, 234, 0, 0, 3, 220, 82, 24, 17, 250, 2, 242, 1, 224, ++ 79, 244, 0, 66, 2, 67, 66, 234, 14, 2, 67, 248, 4, 44, 113, 7, 35, 213, ++ 80, 73, 1, 39, 10, 121, 83, 248, 4, 236, 13, 42, 7, 250, 2, 252, 3, ++ 220, 210, 25, 23, 250, 2, 240, 1, 224, 79, 244, 0, 64, 74, 121, 1, 33, ++ 17, 250, 2, 247, 13, 42, 71, 234, 12, 7, 71, 234, 0, 0, 3, 220, 82, ++ 24, 17, 250, 2, 242, 1, 224, 79, 244, 0, 66, 2, 67, 66, 234, 14, 2, ++ 67, 248, 4, 44, 50, 7, 35, 213, 61, 73, 1, 39, 138, 121, 83, 248, 4, ++ 236, 13, 42, 7, 250, 2, 252, 3, 220, 210, 25, 23, 250, 2, 240, 1, 224, ++ 79, 244, 0, 64, 202, 121, 1, 33, 17, 250, 2, 247, 13, 42, 71, 234, 12, ++ 7, 71, 234, 0, 0, 3, 220, 82, 24, 17, 250, 2, 242, 1, 224, 79, 244, ++ 0, 66, 2, 67, 66, 234, 14, 2, 67, 248, 4, 44, 1, 54, 16, 46, 127, 244, ++ 101, 175, 42, 75, 0, 33, 3, 147, 32, 104, 41, 74, 35, 70, 0, 145, 1, ++ 145, 2, 145, 4, 145, 5, 145, 253, 247, 134, 253, 112, 187, 1, 33, 212, ++ 248, 120, 4, 10, 70, 35, 75, 3, 240, 0, 251, 72, 187, 212, 248, 120, ++ 4, 1, 33, 2, 34, 32, 75, 3, 240, 248, 250, 32, 187, 31, 75, 212, 248, ++ 124, 6, 141, 232, 24, 0, 128, 33, 5, 34, 28, 75, 1, 240, 241, 255, 224, ++ 185, 27, 75, 26, 29, 7, 202, 141, 232, 7, 0, 32, 70, 3, 33, 34, 70, ++ 27, 104, 253, 247, 172, 254, 32, 70, 22, 73, 34, 70, 24, 240, 226, 223, ++ 112, 185, 196, 248, 4, 85, 13, 224, 111, 240, 3, 0, 10, 224, 111, 240, ++ 4, 0, 7, 224, 111, 240, 5, 0, 4, 224, 111, 240, 6, 0, 1, 224, 111, 240, ++ 8, 0, 7, 176, 240, 189, 217, 170, 131, 0, 61, 170, 131, 0, 240, 114, ++ 4, 0, 72, 194, 135, 0, 245, 163, 131, 0, 62, 57, 4, 0, 89, 162, 131, ++ 0, 33, 168, 131, 0, 237, 171, 131, 0, 229, 163, 131, 0, 192, 158, 5, ++ 0, 65, 9, 2, 0, 112, 181, 30, 70, 139, 137, 21, 70, 66, 242, 86, 2, ++ 147, 66, 12, 70, 8, 216, 66, 242, 85, 2, 147, 66, 45, 210, 66, 242, ++ 80, 2, 147, 66, 41, 209, 8, 224, 66, 242, 96, 2, 147, 66, 26, 208, 78, ++ 242, 245, 66, 147, 66, 32, 209, 26, 224, 203, 137, 1, 43, 4, 209, 111, ++ 240, 59, 3, 43, 96, 15, 35, 3, 224, 111, 240, 69, 3, 43, 96, 20, 35, ++ 51, 96, 3, 104, 211, 248, 128, 48, 218, 4, 18, 213, 43, 104, 2, 59, ++ 43, 96, 14, 224, 111, 240, 74, 3, 43, 96, 15, 35, 8, 224, 111, 240, ++ 149, 3, 43, 96, 150, 35, 3, 224, 111, 240, 74, 3, 43, 96, 20, 35, 51, ++ 96, 212, 248, 16, 1, 48, 179, 0, 33, 64, 34, 177, 243, 139, 245, 212, ++ 248, 16, 33, 128, 35, 19, 112, 212, 248, 16, 33, 41, 104, 81, 112, 212, ++ 248, 16, 33, 147, 112, 212, 248, 16, 49, 50, 104, 218, 112, 212, 248, ++ 16, 49, 191, 34, 26, 113, 212, 248, 16, 49, 0, 34, 90, 113, 212, 248, ++ 16, 49, 3, 34, 218, 128, 70, 34, 26, 129, 10, 34, 90, 129, 1, 34, 154, ++ 129, 10, 34, 218, 129, 112, 189, 0, 0, 16, 181, 4, 70, 224, 177, 3, ++ 104, 14, 73, 24, 104, 34, 70, 253, 247, 94, 252, 227, 104, 51, 177, ++ 33, 70, 81, 248, 12, 59, 211, 248, 36, 6, 247, 247, 120, 249, 163, 104, ++ 51, 177, 33, 70, 81, 248, 8, 59, 211, 248, 36, 6, 247, 247, 111, 249, ++ 32, 70, 189, 232, 16, 64, 185, 247, 99, 185, 16, 189, 0, 191, 76, 134, ++ 136, 0, 112, 181, 5, 70, 134, 176, 16, 32, 185, 247, 86, 249, 4, 70, ++ 0, 40, 55, 208, 0, 33, 16, 34, 177, 243, 53, 245, 213, 248, 36, 6, 212, ++ 33, 25, 74, 4, 241, 8, 3, 247, 247, 69, 249, 48, 187, 213, 248, 36, ++ 6, 232, 33, 22, 74, 4, 241, 12, 3, 247, 247, 60, 249, 6, 70, 224, 185, ++ 141, 232, 17, 0, 4, 33, 40, 70, 17, 74, 18, 75, 4, 240, 106, 254, 0, ++ 40, 96, 96, 17, 219, 16, 75, 40, 104, 0, 147, 15, 75, 16, 73, 1, 147, ++ 16, 75, 16, 74, 3, 147, 35, 70, 2, 150, 4, 150, 5, 150, 253, 247, 100, ++ 252, 8, 185, 37, 96, 3, 224, 32, 70, 255, 247, 156, 255, 0, 36, 32, ++ 70, 6, 176, 112, 189, 67, 57, 4, 0, 73, 57, 4, 0, 21, 47, 132, 0, 213, ++ 46, 132, 0, 173, 39, 132, 0, 137, 47, 132, 0, 128, 198, 135, 0, 177, ++ 39, 132, 0, 76, 134, 136, 0, 1, 32, 112, 71, 1, 41, 112, 181, 14, 70, ++ 20, 70, 7, 209, 23, 75, 3, 33, 16, 70, 211, 248, 184, 48, 10, 70, 152, ++ 71, 112, 189, 25, 187, 18, 75, 211, 248, 192, 80, 255, 247, 235, 255, ++ 49, 70, 2, 70, 32, 70, 168, 71, 32, 70, 1, 33, 50, 70, 168, 71, 32, ++ 70, 2, 33, 50, 70, 168, 71, 32, 70, 3, 33, 1, 34, 168, 71, 32, 70, 79, ++ 244, 129, 113, 1, 34, 168, 71, 32, 70, 79, 244, 128, 113, 50, 70, 168, ++ 71, 32, 70, 64, 242, 1, 17, 50, 70, 168, 71, 112, 189, 0, 191, 208, ++ 134, 135, 0, 128, 108, 32, 56, 31, 40, 5, 216, 128, 35, 51, 250, 0, ++ 240, 0, 240, 1, 0, 112, 71, 0, 32, 112, 71, 193, 111, 176, 248, 78, ++ 48, 16, 181, 138, 106, 179, 177, 255, 43, 22, 217, 24, 11, 1, 56, 1, ++ 40, 20, 216, 3, 244, 112, 96, 0, 10, 9, 40, 15, 216, 120, 177, 3, 240, ++ 240, 0, 144, 40, 10, 216, 3, 240, 15, 0, 9, 40, 140, 191, 0, 32, 1, ++ 32, 4, 224, 24, 70, 2, 224, 1, 32, 0, 224, 0, 32, 12, 107, 65, 242, ++ 228, 65, 140, 66, 21, 209, 162, 245, 130, 97, 7, 57, 1, 41, 3, 216, ++ 63, 43, 152, 191, 0, 32, 16, 189, 64, 242, 12, 65, 138, 66, 7, 208, ++ 64, 242, 33, 65, 138, 66, 4, 209, 80, 43, 152, 191, 0, 32, 16, 189, ++ 0, 32, 16, 189, 144, 248, 118, 48, 16, 181, 4, 70, 59, 185, 4, 75, 4, ++ 73, 26, 104, 242, 243, 96, 243, 1, 35, 132, 248, 118, 48, 16, 189, 36, ++ 185, 5, 0, 40, 185, 5, 0, 112, 181, 12, 70, 5, 70, 22, 70, 8, 70, 10, ++ 34, 0, 33, 177, 243, 79, 244, 99, 136, 30, 67, 43, 109, 102, 128, 152, ++ 6, 3, 213, 35, 136, 67, 244, 128, 99, 35, 128, 213, 248, 148, 48, 66, ++ 242, 80, 2, 25, 140, 145, 66, 5, 209, 91, 140, 5, 43, 156, 191, 70, ++ 240, 4, 6, 102, 128, 112, 189, 0, 0, 208, 248, 128, 0, 1, 73, 178, 243, ++ 169, 178, 0, 191, 255, 158, 5, 0, 16, 181, 4, 70, 12, 32, 185, 247, ++ 67, 248, 196, 248, 12, 1, 56, 177, 12, 34, 0, 33, 177, 243, 34, 244, ++ 212, 248, 12, 49, 16, 34, 154, 114, 16, 189, 16, 181, 4, 70, 208, 248, ++ 12, 1, 32, 177, 185, 247, 51, 248, 0, 35, 196, 248, 12, 49, 16, 189, ++ 112, 181, 6, 70, 5, 70, 0, 36, 104, 105, 56, 177, 6, 75, 27, 104, 152, ++ 71, 48, 70, 33, 70, 0, 34, 1, 240, 196, 222, 1, 52, 4, 53, 6, 44, 241, ++ 209, 112, 189, 0, 191, 208, 134, 135, 0, 45, 233, 240, 67, 4, 105, 133, ++ 176, 5, 70, 236, 32, 166, 111, 185, 247, 13, 248, 48, 98, 0, 40, 115, ++ 208, 14, 32, 166, 111, 185, 247, 6, 248, 112, 98, 0, 40, 108, 208, 0, ++ 38, 55, 70, 15, 33, 104, 70, 55, 74, 51, 70, 177, 243, 71, 244, 212, ++ 248, 128, 0, 105, 70, 178, 243, 84, 242, 8, 177, 1, 55, 191, 178, 1, ++ 54, 182, 245, 124, 127, 237, 209, 55, 185, 212, 248, 128, 0, 46, 73, ++ 178, 243, 71, 242, 0, 40, 66, 208, 184, 0, 6, 48, 184, 247, 227, 255, ++ 197, 248, 68, 6, 0, 40, 72, 208, 0, 35, 131, 128, 0, 38, 15, 33, 104, ++ 70, 36, 74, 51, 70, 177, 243, 34, 244, 212, 248, 128, 0, 105, 70, 178, ++ 243, 47, 242, 152, 177, 213, 248, 68, 134, 105, 70, 212, 248, 128, 0, ++ 184, 248, 4, 144, 178, 243, 1, 242, 8, 235, 137, 3, 24, 129, 213, 248, ++ 68, 54, 154, 136, 3, 235, 130, 1, 1, 50, 206, 128, 154, 128, 1, 54, ++ 182, 245, 124, 127, 219, 209, 212, 248, 128, 0, 19, 73, 178, 243, 17, ++ 242, 213, 248, 68, 102, 80, 177, 212, 248, 128, 0, 15, 73, 178, 243, ++ 229, 241, 213, 248, 68, 54, 1, 34, 112, 128, 26, 112, 0, 224, 48, 112, ++ 163, 111, 88, 106, 96, 177, 1, 35, 3, 128, 131, 128, 195, 128, 3, 129, ++ 2, 35, 67, 129, 4, 35, 131, 129, 0, 32, 1, 224, 111, 240, 26, 0, 5, ++ 176, 189, 232, 240, 131, 0, 191, 36, 159, 5, 0, 73, 159, 5, 0, 45, 233, ++ 240, 79, 5, 104, 198, 104, 43, 104, 143, 176, 223, 105, 0, 35, 4, 70, ++ 0, 147, 136, 70, 11, 168, 9, 33, 164, 74, 51, 70, 177, 243, 199, 243, ++ 212, 248, 20, 144, 185, 241, 0, 15, 64, 240, 49, 129, 121, 104, 224, ++ 111, 9, 145, 212, 248, 136, 16, 212, 248, 8, 160, 1, 245, 0, 113, 215, ++ 248, 0, 176, 250, 247, 214, 254, 1, 70, 168, 104, 252, 247, 8, 254, ++ 0, 40, 0, 240, 38, 129, 9, 33, 148, 74, 11, 168, 51, 70, 205, 248, 0, ++ 144, 177, 243, 165, 243, 226, 111, 212, 248, 136, 16, 184, 241, 0, 15, ++ 2, 208, 1, 245, 0, 115, 0, 224, 67, 70, 1, 245, 8, 113, 0, 145, 9, 153, ++ 184, 241, 0, 15, 20, 191, 88, 70, 0, 32, 1, 144, 2, 145, 185, 104, 79, ++ 240, 255, 57, 3, 145, 205, 248, 16, 144, 249, 104, 223, 248, 28, 130, ++ 5, 145, 213, 248, 200, 21, 80, 70, 6, 145, 11, 169, 205, 248, 28, 128, ++ 250, 247, 15, 253, 5, 70, 0, 40, 0, 240, 242, 128, 42, 70, 123, 75, ++ 32, 70, 0, 33, 255, 247, 35, 254, 42, 70, 32, 70, 0, 33, 1, 240, 200, ++ 221, 1, 35, 0, 37, 0, 147, 9, 33, 115, 74, 51, 70, 11, 168, 177, 243, ++ 101, 243, 0, 149, 58, 104, 212, 248, 136, 48, 1, 146, 80, 70, 11, 169, ++ 226, 111, 3, 245, 16, 115, 2, 149, 3, 149, 205, 248, 16, 144, 5, 149, ++ 6, 149, 205, 248, 28, 128, 250, 247, 227, 252, 7, 70, 0, 40, 0, 240, ++ 199, 128, 58, 70, 101, 75, 32, 70, 41, 70, 255, 247, 247, 253, 58, 70, ++ 32, 70, 1, 33, 1, 240, 156, 221, 2, 33, 0, 145, 94, 74, 9, 33, 51, 70, ++ 11, 168, 177, 243, 58, 243, 212, 248, 136, 48, 80, 70, 11, 169, 226, ++ 111, 3, 245, 32, 115, 141, 232, 32, 8, 2, 149, 3, 149, 205, 248, 16, ++ 144, 5, 149, 6, 149, 205, 248, 28, 128, 250, 247, 185, 252, 7, 70, 0, ++ 40, 0, 240, 157, 128, 58, 70, 80, 75, 32, 70, 41, 70, 255, 247, 205, ++ 253, 58, 70, 32, 70, 2, 33, 1, 240, 114, 221, 3, 35, 0, 147, 9, 33, ++ 73, 74, 51, 70, 11, 168, 177, 243, 16, 243, 212, 248, 136, 48, 80, 70, ++ 11, 169, 226, 111, 3, 245, 48, 115, 141, 232, 32, 8, 2, 149, 3, 149, ++ 205, 248, 16, 144, 5, 149, 6, 149, 205, 248, 28, 128, 250, 247, 143, ++ 252, 7, 70, 0, 40, 115, 208, 58, 70, 60, 75, 32, 70, 41, 70, 255, 247, ++ 164, 253, 58, 70, 32, 70, 3, 33, 1, 240, 73, 221, 4, 33, 0, 145, 53, ++ 74, 9, 33, 51, 70, 11, 168, 177, 243, 231, 242, 212, 248, 136, 48, 80, ++ 70, 11, 169, 226, 111, 3, 245, 64, 115, 141, 232, 32, 8, 2, 149, 3, ++ 149, 205, 248, 16, 144, 5, 149, 6, 149, 205, 248, 28, 128, 250, 247, ++ 102, 252, 7, 70, 0, 40, 74, 208, 58, 70, 39, 75, 32, 70, 41, 70, 255, ++ 247, 123, 253, 58, 70, 32, 70, 4, 33, 1, 240, 32, 221, 5, 39, 51, 70, ++ 9, 33, 32, 74, 11, 168, 0, 151, 177, 243, 190, 242, 212, 248, 136, 48, ++ 80, 70, 11, 169, 226, 111, 3, 245, 80, 115, 141, 232, 32, 8, 2, 149, ++ 3, 149, 205, 248, 16, 144, 5, 149, 6, 149, 205, 248, 28, 128, 250, 247, ++ 61, 252, 6, 70, 8, 179, 50, 70, 32, 70, 41, 70, 18, 75, 255, 247, 83, ++ 253, 50, 70, 32, 70, 57, 70, 1, 240, 248, 220, 38, 70, 112, 105, 48, ++ 177, 14, 75, 14, 73, 211, 248, 140, 48, 152, 71, 198, 248, 192, 0, 1, ++ 53, 4, 54, 6, 45, 242, 209, 212, 248, 148, 16, 32, 70, 8, 49, 0, 34, ++ 255, 247, 203, 253, 1, 39, 0, 224, 7, 70, 56, 70, 15, 176, 189, 232, ++ 240, 143, 219, 158, 5, 0, 32, 99, 4, 0, 208, 134, 135, 0, 187, 25, 136, ++ 0, 8, 7, 0, 0, 16, 181, 189, 232, 16, 64, 252, 247, 159, 186, 17, 177, ++ 8, 70, 252, 247, 89, 184, 112, 71, 248, 181, 4, 105, 5, 70, 0, 44, 66, ++ 208, 224, 111, 8, 177, 252, 247, 133, 248, 32, 70, 255, 247, 234, 253, ++ 212, 248, 148, 96, 180, 248, 70, 0, 192, 247, 244, 250, 112, 106, 40, ++ 177, 3, 240, 69, 249, 0, 35, 7, 70, 115, 98, 0, 224, 7, 70, 212, 248, ++ 144, 0, 3, 240, 27, 249, 0, 38, 63, 24, 212, 248, 140, 0, 3, 240, 87, ++ 254, 32, 70, 196, 248, 128, 96, 230, 103, 255, 247, 192, 253, 213, 248, ++ 68, 6, 24, 177, 184, 247, 245, 253, 197, 248, 68, 102, 163, 111, 24, ++ 106, 32, 177, 184, 247, 238, 253, 163, 111, 0, 34, 26, 98, 163, 111, ++ 88, 106, 32, 177, 184, 247, 230, 253, 163, 111, 0, 34, 90, 98, 32, 70, ++ 1, 240, 35, 251, 0, 35, 43, 97, 0, 224, 39, 70, 56, 70, 248, 189, 0, ++ 0, 240, 181, 135, 176, 79, 244, 128, 53, 0, 33, 4, 35, 3, 170, 4, 70, ++ 208, 248, 136, 112, 0, 149, 242, 243, 17, 245, 35, 75, 6, 174, 70, 248, ++ 8, 61, 0, 33, 4, 35, 32, 70, 50, 70, 0, 149, 242, 243, 82, 245, 4, 35, ++ 0, 33, 5, 170, 32, 70, 0, 149, 242, 243, 255, 244, 4, 155, 5, 154, 154, ++ 66, 42, 209, 25, 75, 0, 33, 4, 147, 32, 70, 4, 35, 50, 70, 0, 149, 242, ++ 243, 62, 245, 4, 35, 0, 33, 5, 170, 32, 70, 0, 149, 242, 243, 235, 244, ++ 4, 155, 5, 154, 154, 66, 22, 209, 4, 35, 0, 33, 32, 70, 3, 170, 0, 149, ++ 242, 243, 44, 245, 0, 35, 199, 248, 140, 49, 215, 248, 32, 49, 179, ++ 241, 4, 47, 9, 208, 8, 72, 192, 235, 3, 12, 220, 241, 0, 0, 64, 235, ++ 12, 0, 2, 224, 0, 32, 0, 224, 1, 32, 7, 176, 240, 189, 0, 191, 170, ++ 85, 85, 170, 85, 170, 170, 85, 0, 4, 0, 132, 31, 75, 112, 181, 79, 240, ++ 0, 97, 0, 38, 3, 102, 10, 70, 70, 102, 4, 70, 5, 104, 243, 243, 4, 244, ++ 79, 240, 128, 115, 196, 248, 32, 49, 3, 35, 164, 248, 168, 48, 2, 35, ++ 164, 248, 170, 48, 7, 35, 164, 248, 164, 48, 4, 35, 164, 248, 166, 48, ++ 65, 242, 1, 3, 132, 248, 162, 96, 164, 248, 188, 48, 79, 244, 22, 115, ++ 165, 248, 248, 53, 43, 104, 13, 72, 147, 248, 156, 32, 12, 73, 1, 42, ++ 12, 191, 12, 34, 6, 34, 165, 248, 246, 37, 147, 248, 156, 32, 18, 241, ++ 255, 50, 24, 191, 1, 34, 177, 243, 79, 241, 255, 35, 132, 248, 52, 49, ++ 1, 35, 99, 116, 112, 189, 0, 191, 96, 168, 231, 184, 80, 57, 4, 0, 220, ++ 120, 5, 0, 45, 233, 240, 79, 151, 176, 155, 70, 79, 240, 0, 9, 22, 171, ++ 138, 70, 23, 70, 67, 248, 4, 157, 33, 153, 90, 70, 5, 70, 1, 240, 133, ++ 250, 4, 70, 0, 40, 0, 240, 165, 130, 157, 248, 128, 48, 40, 97, 3, 116, ++ 43, 104, 64, 246, 18, 1, 211, 248, 216, 0, 211, 248, 220, 96, 211, 248, ++ 224, 48, 74, 70, 196, 248, 132, 48, 224, 103, 196, 248, 128, 96, 188, ++ 243, 209, 241, 196, 248, 136, 0, 128, 70, 232, 96, 224, 111, 187, 243, ++ 146, 246, 160, 100, 32, 70, 255, 247, 134, 255, 48, 70, 164, 73, 177, ++ 243, 92, 247, 40, 177, 73, 70, 74, 70, 182, 247, 45, 253, 31, 250, 128, ++ 250, 48, 70, 159, 73, 177, 243, 81, 247, 72, 177, 0, 33, 10, 70, 182, ++ 247, 34, 253, 79, 246, 255, 115, 128, 178, 152, 66, 24, 191, 7, 70, ++ 80, 70, 57, 70, 253, 247, 4, 249, 8, 185, 12, 35, 98, 226, 150, 73, ++ 164, 248, 68, 160, 164, 248, 70, 112, 48, 70, 177, 243, 19, 247, 147, ++ 73, 196, 248, 92, 1, 48, 70, 177, 243, 13, 247, 196, 248, 96, 1, 180, ++ 248, 70, 0, 192, 247, 177, 249, 0, 48, 24, 191, 1, 32, 38, 48, 84, 248, ++ 32, 48, 180, 248, 70, 0, 196, 248, 148, 48, 192, 247, 165, 249, 0, 48, ++ 24, 191, 1, 32, 10, 48, 85, 248, 32, 48, 32, 70, 43, 98, 255, 247, 233, ++ 251, 8, 185, 13, 35, 53, 226, 224, 111, 187, 243, 247, 245, 224, 111, ++ 188, 243, 136, 240, 32, 70, 0, 33, 241, 243, 126, 245, 32, 70, 79, 240, ++ 255, 49, 242, 243, 221, 244, 32, 70, 255, 247, 204, 254, 8, 185, 14, ++ 35, 32, 226, 48, 70, 118, 73, 177, 243, 213, 246, 255, 40, 8, 191, 1, ++ 32, 164, 248, 78, 0, 32, 70, 255, 247, 209, 251, 8, 185, 15, 35, 17, ++ 226, 112, 73, 48, 70, 177, 243, 198, 246, 111, 73, 132, 248, 76, 0, ++ 48, 70, 177, 243, 192, 246, 109, 73, 32, 101, 48, 70, 177, 243, 187, ++ 246, 148, 248, 76, 48, 96, 101, 11, 43, 5, 217, 48, 70, 105, 73, 177, ++ 243, 178, 246, 196, 248, 80, 1, 103, 73, 48, 70, 177, 243, 172, 246, ++ 102, 73, 132, 248, 53, 1, 48, 70, 177, 243, 166, 246, 100, 73, 132, ++ 248, 54, 1, 48, 70, 177, 243, 160, 246, 98, 73, 196, 248, 84, 1, 48, ++ 70, 177, 243, 154, 246, 227, 111, 132, 248, 88, 1, 25, 107, 65, 242, ++ 107, 2, 145, 66, 32, 209, 155, 106, 78, 43, 8, 209, 180, 248, 78, 48, ++ 64, 43, 25, 217, 35, 109, 67, 240, 2, 3, 35, 101, 20, 224, 228, 43, ++ 4, 209, 180, 248, 78, 48, 179, 245, 168, 95, 6, 224, 239, 43, 11, 209, ++ 180, 248, 78, 32, 65, 242, 1, 35, 154, 66, 5, 216, 35, 109, 67, 244, ++ 128, 3, 35, 101, 0, 35, 99, 101, 48, 70, 75, 73, 167, 111, 177, 243, ++ 108, 246, 56, 118, 163, 111, 26, 126, 1, 42, 1, 208, 3, 34, 26, 118, ++ 35, 109, 152, 6, 4, 213, 1, 33, 32, 70, 10, 70, 242, 243, 111, 247, ++ 180, 248, 70, 32, 1, 35, 196, 248, 184, 48, 180, 248, 68, 0, 43, 104, ++ 165, 248, 174, 33, 226, 111, 165, 248, 172, 1, 195, 248, 216, 32, 162, ++ 108, 26, 97, 148, 248, 76, 32, 131, 248, 124, 32, 43, 104, 34, 109, ++ 180, 248, 78, 0, 195, 248, 128, 32, 98, 109, 163, 248, 122, 0, 195, ++ 248, 132, 32, 148, 248, 76, 32, 32, 70, 11, 42, 132, 191, 212, 248, ++ 80, 33, 195, 248, 76, 33, 212, 248, 184, 32, 1, 39, 131, 248, 62, 112, ++ 90, 98, 169, 104, 42, 70, 3, 240, 56, 252, 196, 248, 140, 0, 8, 185, ++ 25, 35, 108, 225, 33, 154, 227, 111, 2, 146, 162, 108, 4, 144, 6, 146, ++ 180, 248, 70, 32, 180, 248, 68, 0, 173, 248, 42, 32, 218, 107, 3, 147, ++ 11, 146, 26, 108, 173, 248, 40, 0, 12, 146, 90, 108, 2, 168, 13, 146, ++ 148, 248, 76, 32, 205, 248, 20, 176, 14, 146, 154, 106, 9, 150, 15, ++ 146, 180, 248, 78, 32, 16, 146, 26, 107, 17, 146, 34, 109, 18, 146, ++ 98, 109, 19, 146, 90, 104, 219, 104, 7, 146, 8, 147, 3, 240, 54, 248, ++ 196, 248, 144, 0, 240, 185, 16, 35, 58, 225, 0, 191, 7, 159, 5, 0, 116, ++ 159, 5, 0, 14, 159, 5, 0, 25, 159, 5, 0, 107, 159, 5, 0, 122, 159, 5, ++ 0, 244, 158, 5, 0, 83, 159, 5, 0, 95, 159, 5, 0, 49, 159, 5, 0, 130, ++ 159, 5, 0, 60, 159, 5, 0, 208, 158, 5, 0, 230, 158, 5, 0, 38, 35, 197, ++ 248, 200, 53, 197, 248, 204, 53, 79, 244, 255, 115, 196, 248, 56, 49, ++ 180, 248, 70, 0, 192, 247, 115, 248, 16, 241, 0, 9, 24, 191, 79, 240, ++ 1, 9, 73, 70, 32, 70, 243, 243, 32, 247, 185, 241, 0, 15, 212, 248, ++ 148, 48, 12, 191, 2, 34, 1, 34, 195, 248, 4, 144, 26, 96, 43, 106, 20, ++ 191, 1, 34, 2, 34, 195, 248, 4, 144, 26, 96, 224, 111, 213, 248, 28, ++ 144, 187, 243, 244, 244, 216, 248, 92, 49, 201, 248, 0, 0, 35, 240, ++ 0, 67, 120, 74, 227, 102, 35, 103, 163, 108, 12, 33, 1, 251, 3, 35, ++ 48, 59, 196, 248, 216, 48, 32, 70, 57, 70, 241, 243, 32, 247, 212, 248, ++ 148, 144, 212, 248, 144, 0, 65, 70, 217, 248, 0, 32, 51, 70, 2, 240, ++ 212, 254, 201, 248, 36, 0, 8, 185, 17, 35, 206, 224, 79, 240, 255, 49, ++ 32, 70, 243, 243, 254, 240, 212, 248, 148, 48, 225, 110, 88, 106, 2, ++ 240, 120, 254, 212, 248, 148, 48, 3, 241, 34, 2, 0, 146, 3, 241, 28, ++ 1, 3, 241, 30, 2, 88, 106, 32, 51, 2, 240, 88, 254, 212, 248, 148, 128, ++ 216, 248, 36, 0, 2, 240, 96, 254, 136, 248, 40, 0, 212, 248, 148, 48, ++ 213, 248, 32, 128, 88, 106, 2, 240, 87, 254, 136, 248, 20, 0, 212, 248, ++ 148, 128, 216, 248, 36, 0, 2, 240, 82, 254, 212, 248, 148, 48, 200, ++ 248, 24, 0, 218, 139, 55, 250, 2, 241, 201, 7, 1, 212, 18, 35, 148, ++ 224, 41, 106, 88, 106, 8, 97, 152, 139, 74, 129, 8, 129, 26, 140, 88, ++ 140, 138, 129, 200, 129, 15, 34, 64, 242, 255, 48, 216, 130, 154, 130, ++ 32, 70, 57, 70, 255, 247, 116, 251, 8, 185, 19, 35, 126, 224, 0, 33, ++ 32, 70, 242, 243, 73, 241, 48, 70, 64, 73, 167, 111, 177, 243, 46, 245, ++ 35, 109, 192, 178, 218, 7, 56, 96, 32, 213, 99, 109, 27, 6, 29, 212, ++ 227, 111, 154, 105, 144, 0, 2, 213, 218, 105, 209, 7, 4, 213, 219, 105, ++ 218, 7, 1, 212, 88, 7, 17, 213, 227, 110, 153, 0, 14, 213, 48, 70, 50, ++ 73, 177, 243, 55, 245, 48, 177, 48, 73, 48, 70, 177, 243, 14, 245, 193, ++ 178, 32, 70, 4, 224, 32, 70, 8, 33, 1, 224, 32, 70, 0, 33, 210, 247, ++ 132, 255, 224, 111, 184, 247, 73, 252, 32, 70, 210, 247, 206, 254, 0, ++ 148, 224, 111, 38, 73, 39, 74, 0, 35, 251, 247, 27, 253, 32, 70, 0, ++ 33, 243, 243, 37, 245, 32, 70, 255, 247, 102, 250, 8, 185, 21, 35, 52, ++ 224, 4, 241, 252, 6, 49, 70, 177, 243, 106, 241, 48, 70, 182, 247, 65, ++ 251, 24, 185, 48, 70, 182, 247, 73, 251, 8, 177, 22, 35, 37, 224, 32, ++ 70, 255, 247, 89, 250, 40, 70, 161, 108, 1, 240, 65, 248, 43, 104, 211, ++ 248, 152, 0, 168, 177, 3, 120, 155, 177, 19, 73, 34, 70, 177, 243, 251, ++ 245, 43, 104, 17, 73, 211, 248, 152, 0, 34, 70, 249, 247, 38, 255, 96, ++ 105, 48, 177, 43, 104, 211, 248, 152, 16, 13, 75, 211, 248, 176, 48, ++ 152, 71, 40, 70, 255, 247, 106, 250, 16, 177, 27, 35, 21, 147, 21, 152, ++ 23, 176, 189, 232, 240, 143, 0, 191, 48, 99, 4, 0, 235, 158, 5, 0, 233, ++ 73, 132, 0, 253, 73, 132, 0, 85, 78, 2, 0, 83, 78, 2, 0, 208, 134, 135, ++ 0, 16, 181, 4, 70, 0, 40, 40, 208, 3, 104, 20, 73, 24, 104, 34, 70, ++ 252, 247, 71, 253, 35, 106, 27, 177, 4, 241, 32, 0, 176, 243, 64, 240, ++ 227, 105, 27, 177, 4, 241, 28, 0, 176, 243, 58, 240, 163, 105, 27, 177, ++ 4, 241, 24, 0, 176, 243, 52, 240, 99, 105, 27, 177, 4, 241, 20, 0, 176, ++ 243, 46, 240, 35, 105, 27, 177, 4, 241, 16, 0, 176, 243, 40, 240, 32, ++ 70, 189, 232, 16, 64, 184, 247, 64, 186, 16, 189, 166, 179, 136, 0, ++ 3, 104, 48, 181, 219, 105, 5, 70, 88, 109, 135, 176, 0, 1, 36, 48, 181, ++ 243, 34, 244, 4, 70, 0, 40, 56, 208, 3, 70, 67, 248, 36, 91, 195, 96, ++ 4, 241, 16, 1, 213, 248, 32, 6, 175, 243, 243, 247, 104, 187, 213, 248, ++ 32, 6, 4, 241, 20, 1, 175, 243, 236, 247, 48, 187, 213, 248, 32, 6, ++ 4, 241, 24, 1, 175, 243, 229, 247, 248, 185, 213, 248, 32, 6, 4, 241, ++ 28, 1, 175, 243, 222, 247, 192, 185, 213, 248, 32, 6, 4, 241, 32, 1, ++ 175, 243, 215, 247, 136, 185, 79, 244, 130, 99, 99, 96, 11, 75, 1, 144, ++ 0, 147, 10, 75, 3, 144, 2, 147, 4, 144, 5, 144, 9, 73, 40, 104, 9, 74, ++ 35, 70, 252, 247, 55, 253, 24, 177, 32, 70, 255, 247, 135, 255, 0, 36, ++ 32, 70, 7, 176, 48, 189, 0, 191, 133, 106, 2, 0, 17, 118, 132, 0, 100, ++ 57, 4, 0, 166, 179, 136, 0, 240, 181, 208, 248, 40, 65, 0, 104, 165, ++ 104, 192, 105, 64, 109, 133, 66, 17, 210, 231, 104, 46, 1, 184, 25, ++ 67, 96, 5, 155, 1, 53, 131, 96, 6, 155, 186, 81, 195, 96, 96, 104, 165, ++ 96, 195, 28, 89, 24, 33, 240, 3, 1, 97, 96, 240, 189, 111, 240, 21, ++ 0, 240, 189, 208, 248, 40, 49, 24, 105, 175, 243, 109, 183, 208, 248, ++ 40, 1, 16, 177, 0, 105, 175, 243, 201, 183, 112, 71, 208, 248, 40, 49, ++ 216, 105, 175, 243, 97, 183, 208, 248, 40, 49, 216, 105, 175, 243, 190, ++ 183, 115, 181, 5, 70, 211, 247, 202, 250, 4, 70, 184, 177, 43, 104, ++ 79, 240, 0, 82, 197, 248, 108, 2, 0, 146, 147, 248, 47, 32, 40, 70, ++ 1, 146, 33, 70, 0, 34, 4, 51, 243, 243, 245, 246, 6, 70, 80, 185, 40, ++ 70, 33, 70, 211, 247, 45, 253, 6, 70, 32, 185, 1, 224, 111, 240, 26, ++ 6, 48, 70, 124, 189, 40, 70, 33, 70, 244, 243, 68, 245, 248, 231, 0, ++ 0, 16, 181, 4, 70, 80, 177, 3, 104, 5, 73, 24, 104, 34, 70, 252, 247, ++ 102, 252, 32, 70, 189, 232, 16, 64, 184, 247, 125, 185, 16, 189, 0, ++ 191, 170, 57, 4, 0, 240, 181, 6, 105, 135, 176, 5, 70, 116, 32, 181, ++ 243, 97, 243, 4, 70, 0, 40, 97, 208, 0, 35, 5, 96, 4, 33, 0, 147, 1, ++ 144, 50, 74, 40, 70, 50, 75, 3, 240, 152, 254, 0, 40, 32, 100, 84, 219, ++ 40, 70, 47, 73, 34, 70, 255, 247, 148, 255, 0, 40, 77, 209, 45, 75, ++ 4, 144, 0, 147, 45, 75, 5, 144, 1, 147, 44, 75, 40, 104, 2, 147, 44, ++ 75, 44, 73, 3, 147, 44, 74, 35, 70, 252, 247, 138, 252, 0, 40, 59, 209, ++ 42, 75, 213, 248, 124, 6, 141, 232, 24, 0, 128, 33, 200, 34, 40, 75, ++ 0, 240, 166, 255, 128, 187, 213, 248, 124, 6, 128, 33, 200, 34, 37, ++ 75, 0, 148, 1, 240, 139, 249, 7, 70, 48, 187, 132, 248, 44, 0, 43, 105, ++ 33, 73, 211, 248, 128, 0, 177, 243, 99, 243, 57, 70, 132, 248, 111, ++ 0, 8, 34, 4, 241, 45, 0, 176, 243, 7, 245, 132, 248, 56, 112, 132, 248, ++ 57, 112, 231, 134, 214, 248, 128, 0, 24, 73, 177, 243, 117, 243, 56, ++ 177, 214, 248, 128, 0, 21, 73, 177, 243, 75, 243, 132, 248, 63, 0, 7, ++ 224, 186, 35, 132, 248, 63, 48, 3, 224, 32, 70, 255, 247, 127, 255, ++ 0, 36, 32, 70, 7, 176, 240, 189, 0, 191, 139, 108, 2, 0, 163, 108, 2, ++ 0, 137, 108, 2, 0, 53, 134, 132, 0, 181, 112, 2, 0, 29, 114, 2, 0, 129, ++ 108, 2, 0, 176, 198, 135, 0, 170, 57, 4, 0, 147, 108, 2, 0, 143, 108, ++ 2, 0, 151, 108, 2, 0, 141, 159, 5, 0, 157, 159, 5, 0, 48, 181, 4, 70, ++ 133, 176, 0, 40, 64, 208, 208, 248, 32, 17, 49, 177, 3, 104, 152, 104, ++ 198, 243, 156, 241, 0, 35, 196, 248, 32, 49, 35, 104, 26, 104, 146, ++ 248, 47, 32, 34, 179, 211, 248, 36, 1, 1, 169, 0, 34, 23, 240, 30, 220, ++ 15, 224, 67, 104, 90, 6, 12, 213, 212, 248, 48, 81, 69, 25, 4, 224, ++ 3, 104, 197, 248, 16, 49, 184, 247, 194, 248, 213, 248, 16, 1, 0, 40, ++ 246, 209, 35, 104, 1, 169, 211, 248, 36, 1, 234, 247, 175, 248, 0, 40, ++ 231, 209, 4, 224, 3, 104, 196, 248, 68, 49, 184, 247, 176, 248, 212, ++ 248, 68, 1, 0, 40, 246, 209, 35, 104, 4, 73, 24, 104, 34, 70, 252, 247, ++ 138, 251, 32, 70, 184, 247, 163, 248, 5, 176, 48, 189, 95, 147, 136, ++ 0, 48, 181, 5, 70, 135, 176, 79, 244, 166, 112, 184, 247, 149, 248, ++ 4, 70, 0, 40, 117, 208, 0, 33, 79, 244, 166, 114, 176, 243, 115, 244, ++ 60, 75, 37, 96, 0, 147, 59, 75, 60, 74, 1, 147, 0, 35, 2, 147, 3, 146, ++ 4, 147, 5, 147, 40, 104, 57, 73, 57, 74, 35, 70, 252, 247, 190, 251, ++ 0, 40, 93, 209, 43, 106, 26, 104, 2, 42, 5, 209, 91, 125, 0, 43, 12, ++ 191, 22, 35, 48, 35, 0, 224, 48, 35, 34, 24, 68, 48, 176, 245, 136, ++ 127, 19, 116, 238, 209, 168, 104, 46, 73, 42, 70, 0, 35, 198, 243, 51, ++ 241, 196, 248, 32, 1, 0, 40, 66, 208, 79, 244, 122, 115, 69, 242, 115, ++ 82, 196, 248, 28, 49, 164, 248, 60, 33, 0, 35, 70, 34, 196, 248, 68, ++ 49, 164, 248, 62, 33, 40, 70, 141, 232, 40, 0, 79, 244, 138, 113, 33, ++ 74, 34, 75, 3, 240, 126, 253, 0, 40, 196, 248, 48, 1, 39, 219, 31, 75, ++ 213, 248, 124, 6, 141, 232, 24, 0, 5, 33, 176, 34, 29, 75, 0, 240, 16, ++ 255, 224, 185, 28, 75, 213, 248, 124, 6, 141, 232, 24, 0, 5, 33, 178, ++ 34, 25, 75, 0, 240, 5, 255, 136, 185, 213, 248, 124, 6, 10, 33, 176, ++ 34, 22, 75, 0, 148, 1, 240, 230, 248, 64, 185, 213, 248, 168, 6, 176, ++ 33, 19, 74, 20, 75, 0, 148, 1, 240, 71, 251, 24, 177, 32, 70, 255, 247, ++ 51, 255, 0, 36, 32, 70, 7, 176, 48, 189, 0, 191, 137, 167, 132, 0, 241, ++ 187, 132, 0, 93, 165, 132, 0, 244, 199, 135, 0, 95, 147, 136, 0, 77, ++ 160, 132, 0, 9, 173, 132, 0, 229, 172, 132, 0, 141, 180, 132, 0, 225, ++ 161, 132, 0, 201, 179, 132, 0, 73, 161, 132, 0, 141, 170, 132, 0, 125, ++ 165, 132, 0, 145, 165, 132, 0, 16, 181, 4, 70, 48, 177, 211, 247, 185, ++ 255, 32, 70, 189, 232, 16, 64, 183, 247, 239, 191, 16, 189, 16, 181, ++ 4, 70, 36, 32, 181, 243, 216, 241, 0, 177, 4, 96, 16, 189, 0, 0, 16, ++ 181, 4, 70, 224, 177, 67, 104, 14, 73, 24, 104, 34, 70, 252, 247, 192, ++ 250, 212, 248, 60, 1, 255, 247, 223, 255, 212, 248, 52, 1, 255, 247, ++ 219, 255, 212, 248, 156, 0, 8, 177, 183, 247, 207, 255, 212, 248, 148, ++ 0, 8, 177, 183, 247, 202, 255, 32, 70, 189, 232, 16, 64, 183, 247, 197, ++ 191, 16, 189, 0, 191, 218, 29, 134, 0, 45, 233, 240, 65, 117, 75, 0, ++ 39, 31, 96, 117, 75, 5, 104, 136, 176, 6, 70, 31, 96, 79, 244, 160, ++ 112, 183, 247, 176, 255, 4, 70, 0, 40, 0, 240, 216, 128, 57, 70, 79, ++ 244, 160, 114, 176, 243, 141, 243, 132, 232, 96, 0, 48, 70, 198, 248, ++ 92, 65, 255, 247, 181, 255, 128, 70, 196, 248, 52, 1, 48, 177, 48, 70, ++ 255, 247, 174, 255, 128, 70, 196, 248, 60, 1, 32, 185, 32, 70, 183, ++ 247, 149, 255, 68, 70, 187, 224, 127, 33, 4, 34, 4, 241, 68, 0, 176, ++ 243, 112, 243, 127, 33, 4, 34, 4, 241, 112, 0, 176, 243, 106, 243, 4, ++ 34, 7, 168, 57, 70, 176, 243, 101, 243, 51, 104, 147, 248, 124, 32, ++ 211, 248, 220, 0, 1, 42, 19, 217, 85, 73, 177, 243, 211, 241, 1, 70, ++ 88, 177, 7, 168, 3, 34, 176, 243, 53, 244, 7, 168, 4, 33, 252, 243, ++ 235, 247, 144, 177, 7, 168, 79, 73, 12, 224, 7, 168, 78, 73, 9, 224, ++ 78, 73, 177, 243, 155, 241, 9, 40, 3, 70, 6, 216, 76, 73, 7, 168, 1, ++ 235, 131, 1, 3, 34, 176, 243, 29, 244, 3, 34, 7, 169, 4, 241, 8, 0, ++ 176, 243, 23, 244, 51, 104, 70, 73, 211, 248, 220, 0, 177, 243, 133, ++ 241, 213, 248, 216, 48, 65, 242, 107, 2, 25, 107, 224, 96, 145, 66, ++ 14, 209, 155, 106, 139, 43, 1, 208, 144, 43, 9, 209, 2, 40, 7, 209, ++ 7, 168, 61, 73, 4, 34, 176, 243, 217, 243, 8, 185, 3, 35, 227, 96, 213, ++ 248, 216, 48, 65, 242, 107, 2, 25, 107, 145, 66, 13, 209, 155, 106, ++ 147, 43, 10, 209, 7, 168, 53, 73, 4, 34, 176, 243, 199, 243, 32, 185, ++ 227, 104, 4, 43, 1, 209, 6, 35, 227, 96, 213, 248, 216, 48, 65, 242, ++ 107, 2, 25, 107, 145, 66, 24, 209, 154, 106, 64, 242, 53, 19, 154, 66, ++ 19, 209, 7, 168, 42, 73, 4, 34, 176, 243, 176, 243, 88, 177, 7, 168, ++ 40, 73, 4, 34, 176, 243, 170, 243, 40, 177, 7, 168, 38, 73, 4, 34, 176, ++ 243, 164, 243, 8, 185, 19, 35, 227, 96, 0, 37, 35, 72, 213, 247, 29, ++ 249, 7, 169, 4, 34, 196, 248, 148, 80, 196, 248, 152, 80, 196, 248, ++ 156, 80, 196, 248, 160, 80, 196, 248, 164, 80, 132, 248, 244, 80, 32, ++ 70, 212, 247, 20, 251, 26, 75, 48, 104, 141, 232, 40, 0, 25, 75, 26, ++ 73, 4, 147, 26, 75, 26, 74, 5, 147, 35, 70, 2, 149, 3, 149, 252, 247, ++ 29, 250, 40, 177, 32, 70, 198, 248, 92, 81, 255, 247, 243, 254, 44, ++ 70, 32, 70, 8, 176, 189, 232, 240, 129, 116, 8, 0, 0, 124, 8, 0, 0, ++ 176, 159, 5, 0, 217, 57, 4, 0, 162, 153, 136, 0, 182, 159, 5, 0, 32, ++ 202, 135, 0, 185, 159, 5, 0, 103, 212, 135, 0, 159, 153, 136, 0, 8, ++ 202, 135, 0, 164, 217, 135, 0, 173, 217, 135, 0, 40, 60, 4, 0, 129, ++ 233, 132, 0, 176, 57, 4, 0, 228, 201, 135, 0, 17, 117, 2, 0, 218, 29, ++ 134, 0, 48, 181, 5, 70, 135, 176, 12, 32, 181, 243, 150, 240, 4, 70, ++ 224, 177, 18, 75, 5, 96, 79, 244, 144, 113, 0, 147, 1, 144, 7, 34, 213, ++ 248, 124, 6, 15, 75, 0, 240, 224, 252, 144, 185, 14, 75, 1, 144, 0, ++ 147, 13, 75, 2, 144, 4, 147, 13, 75, 3, 144, 5, 147, 40, 104, 12, 73, ++ 12, 74, 35, 70, 252, 247, 200, 249, 16, 185, 32, 70, 7, 176, 48, 189, ++ 32, 70, 183, 247, 130, 254, 0, 36, 247, 231, 0, 191, 205, 1, 133, 0, ++ 45, 255, 132, 0, 105, 255, 132, 0, 152, 60, 4, 0, 209, 147, 2, 0, 48, ++ 230, 135, 0, 188, 60, 4, 0, 3, 104, 16, 181, 4, 70, 5, 73, 24, 104, ++ 34, 70, 252, 247, 77, 249, 32, 70, 189, 232, 16, 64, 183, 247, 100, ++ 190, 0, 191, 188, 60, 4, 0, 112, 181, 5, 70, 134, 176, 12, 32, 181, ++ 243, 74, 240, 4, 70, 0, 40, 99, 208, 5, 96, 0, 38, 1, 144, 4, 33, 40, ++ 70, 51, 74, 52, 75, 0, 150, 255, 247, 103, 252, 176, 66, 96, 96, 89, ++ 219, 4, 33, 40, 70, 48, 74, 49, 75, 0, 150, 1, 148, 3, 240, 118, 251, ++ 176, 66, 160, 96, 78, 219, 40, 70, 45, 73, 34, 70, 255, 247, 114, 252, ++ 0, 40, 71, 209, 43, 75, 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, ++ 144, 113, 37, 34, 40, 75, 0, 240, 117, 252, 0, 40, 58, 209, 39, 75, ++ 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, 144, 113, 60, 34, 36, 75, ++ 0, 240, 104, 252, 0, 40, 45, 209, 213, 248, 124, 6, 5, 33, 156, 34, ++ 32, 75, 0, 149, 0, 240, 108, 254, 0, 40, 35, 209, 213, 248, 124, 6, ++ 128, 33, 37, 34, 28, 75, 0, 148, 0, 240, 0, 253, 208, 185, 213, 248, ++ 124, 6, 128, 33, 60, 34, 25, 75, 0, 148, 0, 240, 247, 252, 136, 185, ++ 23, 75, 1, 144, 0, 147, 23, 75, 3, 144, 2, 147, 4, 144, 5, 144, 21, ++ 73, 40, 104, 21, 74, 35, 70, 252, 247, 52, 249, 16, 185, 32, 70, 6, ++ 176, 112, 189, 32, 70, 183, 247, 238, 253, 0, 36, 247, 231, 0, 191, ++ 93, 7, 133, 0, 29, 7, 133, 0, 101, 11, 133, 0, 81, 11, 133, 0, 217, ++ 7, 133, 0, 233, 13, 133, 0, 253, 7, 133, 0, 25, 14, 133, 0, 37, 8, 133, ++ 0, 61, 6, 133, 0, 221, 6, 133, 0, 253, 6, 133, 0, 21, 9, 133, 0, 229, ++ 13, 133, 0, 108, 230, 135, 0, 58, 158, 136, 0, 56, 181, 5, 104, 4, 70, ++ 34, 70, 40, 104, 6, 73, 252, 247, 167, 248, 40, 70, 5, 73, 34, 70, 255, ++ 247, 250, 251, 32, 70, 189, 232, 56, 64, 183, 247, 185, 189, 58, 158, ++ 136, 0, 217, 7, 133, 0, 2, 70, 2, 73, 0, 104, 252, 247, 148, 184, 0, ++ 191, 194, 60, 4, 0, 48, 181, 13, 75, 135, 176, 0, 147, 0, 35, 4, 70, ++ 1, 147, 2, 147, 3, 147, 4, 147, 5, 147, 9, 73, 9, 74, 35, 70, 0, 104, ++ 252, 247, 219, 248, 0, 40, 20, 191, 79, 240, 255, 53, 0, 37, 32, 70, ++ 253, 243, 93, 246, 40, 70, 7, 176, 48, 189, 181, 154, 2, 0, 216, 60, ++ 4, 0, 194, 60, 4, 0, 45, 233, 240, 67, 6, 70, 135, 176, 56, 32, 15, ++ 70, 145, 70, 152, 70, 183, 247, 126, 253, 4, 70, 0, 40, 56, 208, 0, ++ 33, 56, 34, 176, 243, 93, 241, 215, 248, 36, 6, 64, 33, 26, 74, 4, 241, ++ 32, 3, 245, 247, 109, 253, 5, 70, 32, 177, 32, 70, 183, 247, 109, 253, ++ 0, 36, 37, 224, 21, 75, 196, 248, 28, 128, 167, 96, 196, 248, 12, 144, ++ 38, 97, 19, 73, 0, 147, 1, 144, 2, 144, 3, 144, 4, 144, 5, 144, 35, ++ 70, 48, 70, 15, 74, 252, 247, 151, 248, 3, 70, 96, 185, 224, 104, 13, ++ 73, 34, 70, 197, 243, 30, 246, 5, 70, 160, 97, 64, 185, 32, 105, 10, ++ 73, 34, 70, 252, 247, 45, 248, 32, 70, 183, 247, 70, 253, 44, 70, 32, ++ 70, 7, 176, 189, 232, 240, 131, 216, 91, 136, 0, 125, 23, 133, 0, 132, ++ 230, 135, 0, 192, 159, 5, 0, 221, 23, 133, 0, 240, 60, 4, 0, 16, 181, ++ 4, 70, 253, 243, 172, 247, 15, 73, 32, 105, 34, 70, 252, 247, 16, 248, ++ 161, 105, 97, 177, 35, 125, 35, 177, 224, 104, 197, 243, 108, 245, 0, ++ 35, 35, 117, 224, 104, 161, 105, 197, 243, 222, 245, 0, 35, 163, 97, ++ 163, 104, 4, 241, 32, 1, 211, 248, 36, 6, 245, 247, 29, 253, 32, 70, ++ 183, 247, 19, 253, 0, 32, 16, 189, 192, 159, 5, 0, 16, 181, 4, 70, 192, ++ 177, 34, 70, 12, 73, 64, 104, 243, 243, 4, 241, 34, 70, 96, 104, 10, ++ 73, 3, 240, 114, 252, 34, 70, 96, 104, 9, 73, 255, 247, 57, 251, 160, ++ 104, 8, 73, 34, 70, 251, 247, 220, 255, 32, 70, 189, 232, 16, 64, 183, ++ 247, 243, 188, 16, 189, 0, 191, 101, 33, 133, 0, 193, 39, 133, 0, 175, ++ 158, 2, 0, 247, 60, 4, 0, 112, 181, 5, 70, 134, 176, 24, 32, 183, 247, ++ 224, 252, 4, 70, 0, 40, 0, 240, 233, 128, 0, 33, 24, 34, 176, 243, 190, ++ 240, 43, 104, 0, 34, 163, 96, 171, 104, 101, 96, 227, 96, 107, 104, ++ 4, 33, 35, 97, 4, 35, 163, 130, 40, 70, 109, 75, 141, 232, 20, 0, 255, ++ 247, 227, 250, 0, 40, 32, 96, 192, 242, 204, 128, 40, 70, 105, 73, 34, ++ 70, 243, 243, 184, 240, 0, 40, 64, 240, 196, 128, 40, 70, 102, 73, 34, ++ 70, 255, 247, 240, 250, 0, 40, 64, 240, 188, 128, 40, 70, 99, 73, 34, ++ 70, 3, 240, 28, 252, 0, 40, 64, 240, 180, 128, 97, 75, 1, 144, 0, 147, ++ 2, 144, 3, 144, 4, 144, 5, 144, 94, 73, 40, 104, 94, 74, 35, 70, 251, ++ 247, 224, 255, 0, 40, 64, 240, 164, 128, 92, 73, 3, 34, 213, 248, 164, ++ 6, 2, 240, 157, 219, 90, 78, 90, 73, 2, 34, 213, 248, 168, 6, 2, 240, ++ 150, 219, 213, 248, 124, 6, 176, 33, 48, 34, 86, 75, 0, 150, 1, 148, ++ 0, 240, 77, 250, 0, 40, 64, 240, 139, 128, 83, 75, 213, 248, 124, 6, ++ 141, 232, 24, 0, 64, 246, 5, 1, 54, 34, 80, 75, 0, 240, 193, 250, 0, ++ 40, 125, 209, 79, 75, 213, 248, 124, 6, 141, 232, 24, 0, 64, 246, 4, ++ 1, 55, 34, 76, 75, 0, 240, 180, 250, 0, 40, 112, 209, 213, 248, 164, ++ 6, 48, 33, 68, 74, 51, 70, 0, 148, 0, 240, 63, 255, 0, 40, 102, 209, ++ 213, 248, 164, 6, 54, 33, 65, 74, 63, 75, 0, 148, 0, 240, 53, 255, 0, ++ 40, 92, 209, 213, 248, 164, 6, 55, 33, 62, 74, 60, 75, 0, 148, 0, 240, ++ 43, 255, 0, 40, 82, 209, 213, 248, 168, 6, 57, 33, 58, 74, 58, 75, 0, ++ 148, 0, 240, 33, 255, 0, 40, 72, 209, 213, 248, 124, 6, 192, 33, 54, ++ 34, 54, 75, 0, 148, 0, 240, 114, 252, 0, 40, 62, 209, 48, 33, 213, 248, ++ 124, 6, 10, 70, 50, 75, 0, 148, 0, 240, 36, 251, 0, 40, 52, 209, 213, ++ 248, 124, 6, 64, 246, 10, 1, 54, 34, 46, 75, 0, 148, 0, 240, 93, 252, ++ 80, 187, 213, 248, 124, 6, 64, 246, 10, 1, 55, 34, 42, 75, 0, 148, 0, ++ 240, 83, 252, 0, 187, 213, 248, 124, 6, 48, 33, 57, 34, 38, 75, 0, 148, ++ 0, 240, 74, 252, 184, 185, 213, 248, 164, 6, 48, 33, 31, 74, 35, 70, ++ 0, 240, 122, 255, 120, 185, 213, 248, 164, 6, 54, 33, 28, 74, 35, 70, ++ 0, 240, 114, 255, 56, 185, 213, 248, 164, 6, 55, 33, 25, 74, 35, 70, ++ 0, 240, 106, 255, 24, 177, 32, 70, 255, 247, 232, 254, 0, 36, 32, 70, ++ 6, 176, 112, 189, 205, 28, 133, 0, 101, 33, 133, 0, 175, 158, 2, 0, ++ 193, 39, 133, 0, 137, 30, 133, 0, 172, 230, 135, 0, 247, 60, 4, 0, 168, ++ 230, 135, 0, 69, 28, 133, 0, 208, 230, 135, 0, 1, 27, 133, 0, 185, 40, ++ 133, 0, 245, 29, 133, 0, 241, 39, 133, 0, 129, 29, 133, 0, 117, 30, ++ 133, 0, 21, 41, 133, 0, 21, 39, 133, 0, 81, 36, 133, 0, 17, 35, 133, ++ 0, 85, 34, 133, 0, 125, 35, 133, 0, 55, 181, 5, 70, 56, 32, 180, 243, ++ 177, 245, 4, 70, 80, 177, 79, 240, 255, 51, 5, 96, 5, 73, 1, 147, 5, ++ 74, 6, 75, 0, 149, 255, 243, 53, 247, 1, 224, 255, 243, 4, 247, 32, ++ 70, 62, 189, 169, 56, 133, 0, 177, 56, 133, 0, 161, 56, 133, 0, 112, ++ 181, 5, 70, 134, 176, 16, 32, 183, 247, 162, 251, 4, 70, 0, 40, 56, ++ 208, 0, 33, 16, 34, 175, 243, 129, 247, 0, 38, 37, 96, 1, 33, 197, 248, ++ 184, 70, 40, 70, 25, 74, 25, 75, 0, 150, 1, 148, 255, 247, 171, 249, ++ 176, 66, 224, 96, 33, 219, 22, 75, 40, 104, 141, 232, 72, 0, 21, 73, ++ 22, 74, 35, 70, 2, 150, 3, 150, 4, 150, 5, 150, 251, 247, 193, 254, ++ 152, 185, 18, 75, 213, 248, 124, 6, 141, 232, 40, 0, 5, 33, 190, 34, ++ 16, 75, 0, 240, 74, 250, 64, 185, 213, 248, 124, 6, 192, 33, 190, 34, ++ 13, 75, 0, 149, 0, 240, 43, 252, 24, 177, 32, 70, 183, 247, 106, 251, ++ 0, 36, 32, 70, 6, 176, 112, 189, 0, 191, 189, 59, 133, 0, 185, 59, 133, ++ 0, 169, 58, 133, 0, 204, 231, 135, 0, 199, 159, 5, 0, 141, 59, 133, ++ 0, 109, 59, 133, 0, 193, 59, 133, 0, 16, 181, 4, 70, 136, 177, 3, 121, ++ 35, 177, 128, 104, 183, 247, 77, 251, 0, 35, 35, 113, 35, 104, 5, 73, ++ 24, 104, 34, 70, 251, 247, 41, 254, 32, 70, 189, 232, 16, 64, 183, 247, ++ 64, 187, 16, 189, 199, 159, 5, 0, 8, 177, 183, 247, 58, 187, 112, 71, ++ 55, 181, 5, 70, 4, 32, 183, 247, 49, 251, 4, 70, 0, 40, 85, 208, 45, ++ 75, 5, 96, 64, 242, 63, 17, 0, 147, 1, 144, 45, 34, 213, 248, 124, 6, ++ 42, 75, 0, 240, 108, 249, 0, 40, 71, 209, 40, 75, 213, 248, 124, 6, ++ 141, 232, 24, 0, 79, 244, 149, 113, 61, 34, 37, 75, 0, 240, 95, 249, ++ 0, 40, 58, 209, 36, 75, 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, ++ 149, 113, 74, 34, 33, 75, 0, 240, 82, 249, 112, 187, 32, 75, 213, 248, ++ 124, 6, 141, 232, 24, 0, 21, 33, 80, 34, 29, 75, 0, 240, 211, 249, 24, ++ 187, 213, 248, 124, 6, 5, 33, 45, 34, 26, 75, 0, 148, 0, 240, 46, 251, ++ 208, 185, 213, 248, 124, 6, 192, 33, 45, 34, 23, 75, 0, 148, 0, 240, ++ 37, 251, 136, 185, 213, 248, 124, 6, 192, 33, 61, 34, 19, 75, 0, 148, ++ 0, 240, 28, 251, 64, 185, 213, 248, 124, 6, 192, 33, 80, 34, 16, 75, ++ 0, 148, 0, 240, 153, 251, 24, 177, 32, 70, 255, 247, 155, 255, 0, 36, ++ 32, 70, 62, 189, 69, 63, 133, 0, 21, 60, 133, 0, 205, 63, 133, 0, 61, ++ 60, 133, 0, 141, 63, 133, 0, 37, 60, 133, 0, 241, 62, 133, 0, 253, 59, ++ 133, 0, 157, 60, 133, 0, 93, 61, 133, 0, 125, 61, 133, 0, 217, 60, 133, ++ 0, 16, 181, 4, 70, 160, 177, 3, 104, 128, 111, 0, 34, 90, 97, 8, 177, ++ 183, 247, 179, 250, 212, 248, 152, 0, 8, 177, 183, 247, 174, 250, 96, ++ 104, 8, 177, 183, 247, 170, 250, 32, 70, 189, 232, 16, 64, 183, 247, ++ 165, 186, 16, 189, 45, 233, 240, 65, 4, 70, 79, 244, 178, 112, 13, 70, ++ 22, 70, 152, 70, 180, 243, 137, 244, 7, 70, 16, 185, 64, 242, 242, 51, ++ 30, 224, 4, 96, 133, 96, 198, 96, 40, 32, 180, 243, 126, 244, 184, 103, ++ 16, 185, 64, 242, 243, 51, 19, 224, 88, 32, 180, 243, 118, 244, 199, ++ 248, 152, 0, 64, 177, 44, 48, 199, 248, 156, 0, 48, 32, 180, 243, 109, ++ 244, 120, 96, 96, 185, 2, 224, 79, 244, 125, 115, 1, 224, 64, 242, 245, ++ 51, 56, 70, 200, 248, 0, 48, 255, 247, 180, 255, 0, 39, 3, 224, 0, 35, ++ 200, 248, 0, 48, 96, 97, 56, 70, 189, 232, 240, 129, 0, 35, 194, 24, ++ 210, 248, 192, 32, 202, 80, 4, 51, 24, 43, 248, 209, 112, 71, 79, 244, ++ 200, 99, 192, 248, 76, 54, 104, 35, 192, 248, 80, 54, 79, 244, 128, ++ 115, 192, 248, 84, 54, 2, 35, 192, 248, 88, 54, 192, 248, 92, 54, 112, ++ 71, 0, 0, 16, 181, 4, 70, 80, 177, 3, 104, 5, 73, 24, 104, 34, 70, 251, ++ 247, 40, 253, 32, 70, 189, 232, 16, 64, 183, 247, 63, 186, 16, 189, ++ 0, 191, 100, 61, 4, 0, 1, 240, 240, 1, 45, 233, 240, 79, 14, 17, 1, ++ 104, 176, 248, 16, 128, 9, 104, 137, 176, 201, 105, 148, 70, 209, 248, ++ 192, 16, 7, 147, 136, 69, 4, 70, 176, 248, 18, 160, 131, 138, 199, 138, ++ 178, 178, 92, 218, 129, 121, 0, 41, 92, 209, 50, 77, 5, 235, 194, 0, ++ 128, 136, 6, 224, 85, 248, 50, 144, 25, 248, 1, 144, 225, 69, 2, 208, ++ 1, 49, 129, 66, 246, 211, 129, 66, 79, 208, 231, 25, 55, 248, 18, 176, ++ 1, 50, 55, 248, 18, 80, 162, 68, 69, 69, 35, 68, 26, 210, 197, 235, ++ 8, 8, 5, 241, 1, 9, 10, 235, 5, 1, 66, 70, 10, 235, 9, 0, 205, 248, ++ 20, 192, 6, 147, 175, 243, 184, 245, 6, 155, 12, 34, 2, 251, 9, 48, ++ 2, 251, 5, 49, 2, 251, 8, 242, 175, 243, 174, 245, 221, 248, 20, 192, ++ 6, 155, 49, 70, 0, 34, 7, 224, 7, 235, 70, 0, 48, 248, 2, 224, 14, 241, ++ 1, 14, 32, 248, 2, 224, 1, 49, 2, 50, 13, 41, 243, 217, 18, 153, 203, ++ 235, 5, 2, 0, 145, 19, 153, 10, 235, 11, 0, 1, 145, 12, 33, 1, 251, ++ 11, 49, 146, 178, 7, 155, 205, 248, 8, 192, 0, 240, 219, 250, 35, 138, ++ 0, 32, 1, 51, 35, 130, 7, 224, 111, 240, 21, 0, 4, 224, 111, 240, 22, ++ 0, 1, 224, 111, 240, 29, 0, 9, 176, 189, 232, 240, 143, 0, 191, 252, ++ 60, 4, 0, 45, 233, 243, 71, 221, 248, 40, 144, 221, 248, 44, 160, 7, ++ 70, 14, 70, 21, 70, 152, 70, 0, 36, 86, 250, 4, 243, 219, 7, 10, 213, ++ 33, 1, 56, 70, 1, 240, 240, 1, 42, 70, 67, 70, 141, 232, 0, 6, 255, ++ 247, 101, 255, 24, 185, 1, 52, 13, 44, 237, 209, 0, 32, 189, 232, 252, ++ 135, 45, 233, 240, 79, 137, 176, 7, 146, 2, 104, 176, 248, 24, 128, ++ 18, 104, 156, 70, 210, 105, 4, 70, 210, 248, 196, 32, 176, 248, 26, ++ 160, 144, 69, 131, 139, 199, 139, 80, 218, 130, 121, 0, 42, 80, 209, ++ 1, 240, 240, 6, 54, 17, 199, 25, 178, 178, 55, 248, 18, 176, 1, 50, ++ 55, 248, 18, 80, 130, 68, 69, 69, 3, 68, 26, 210, 197, 235, 8, 8, 5, ++ 241, 1, 9, 10, 235, 5, 1, 66, 70, 10, 235, 9, 0, 205, 248, 20, 192, ++ 6, 147, 175, 243, 38, 245, 6, 155, 12, 34, 2, 251, 9, 48, 2, 251, 5, ++ 49, 2, 251, 8, 242, 175, 243, 28, 245, 221, 248, 20, 192, 6, 155, 49, ++ 70, 0, 34, 7, 224, 7, 235, 70, 0, 48, 248, 2, 224, 14, 241, 1, 14, 32, ++ 248, 2, 224, 1, 49, 2, 50, 13, 41, 243, 217, 18, 153, 203, 235, 5, 2, ++ 0, 145, 19, 153, 10, 235, 11, 0, 1, 145, 7, 153, 146, 178, 2, 145, 12, ++ 33, 1, 251, 11, 49, 99, 70, 0, 240, 73, 250, 35, 139, 0, 32, 1, 51, ++ 35, 131, 4, 224, 111, 240, 21, 0, 1, 224, 111, 240, 22, 0, 9, 176, 189, ++ 232, 240, 143, 45, 233, 243, 71, 221, 248, 40, 144, 221, 248, 44, 160, ++ 7, 70, 14, 70, 21, 70, 152, 70, 0, 36, 86, 250, 4, 243, 218, 7, 10, ++ 213, 33, 1, 56, 70, 1, 240, 240, 1, 42, 70, 67, 70, 141, 232, 0, 6, ++ 255, 247, 123, 255, 24, 185, 1, 52, 13, 44, 237, 209, 0, 32, 189, 232, ++ 252, 135, 45, 233, 240, 79, 135, 176, 5, 146, 2, 104, 176, 248, 32, ++ 128, 18, 104, 156, 70, 210, 105, 4, 70, 210, 248, 200, 32, 176, 248, ++ 34, 160, 144, 69, 131, 140, 199, 140, 76, 218, 130, 121, 0, 42, 76, ++ 209, 1, 240, 240, 6, 54, 17, 199, 25, 178, 178, 55, 248, 18, 176, 1, ++ 50, 55, 248, 18, 80, 130, 68, 69, 69, 3, 68, 25, 210, 197, 235, 8, 8, ++ 5, 241, 1, 9, 10, 235, 5, 1, 66, 70, 10, 235, 9, 0, 205, 248, 12, 192, ++ 4, 147, 175, 243, 154, 244, 4, 155, 79, 234, 200, 2, 3, 235, 201, 0, ++ 3, 235, 197, 1, 175, 243, 145, 244, 221, 248, 12, 192, 4, 155, 49, 70, ++ 0, 34, 7, 224, 7, 235, 70, 0, 48, 248, 2, 224, 14, 241, 1, 14, 32, 248, ++ 2, 224, 1, 49, 2, 50, 13, 41, 243, 217, 16, 153, 203, 235, 5, 2, 0, ++ 145, 5, 153, 10, 235, 11, 0, 1, 145, 146, 178, 3, 235, 203, 1, 99, 70, ++ 0, 240, 209, 249, 35, 140, 0, 32, 1, 51, 35, 132, 4, 224, 111, 240, ++ 21, 0, 1, 224, 111, 240, 22, 0, 7, 176, 189, 232, 240, 143, 3, 104, ++ 240, 181, 219, 105, 12, 37, 179, 248, 192, 32, 6, 70, 5, 251, 2, 244, ++ 51, 50, 34, 240, 3, 2, 1, 52, 164, 24, 179, 248, 196, 32, 79, 246, 254, ++ 113, 2, 241, 31, 0, 106, 67, 33, 64, 65, 24, 80, 28, 79, 246, 252, 114, ++ 10, 64, 130, 24, 179, 248, 200, 0, 79, 246, 254, 113, 0, 241, 31, 4, ++ 17, 64, 97, 24, 192, 0, 79, 246, 252, 114, 10, 64, 179, 248, 204, 48, ++ 1, 48, 128, 24, 79, 246, 254, 114, 3, 241, 31, 1, 2, 64, 219, 0, 138, ++ 24, 89, 28, 79, 246, 252, 115, 19, 64, 203, 24, 79, 246, 254, 119, 31, ++ 64, 28, 55, 191, 178, 135, 176, 56, 70, 183, 247, 97, 248, 4, 70, 0, ++ 40, 0, 240, 132, 128, 0, 33, 58, 70, 175, 243, 63, 244, 48, 35, 99, ++ 130, 51, 104, 79, 246, 252, 114, 219, 105, 38, 96, 179, 248, 192, 16, ++ 167, 128, 1, 241, 51, 0, 2, 64, 5, 251, 1, 33, 162, 130, 1, 49, 79, ++ 246, 254, 114, 10, 64, 179, 248, 196, 16, 226, 130, 28, 50, 146, 178, ++ 200, 28, 16, 24, 98, 131, 79, 246, 252, 114, 2, 64, 5, 251, 1, 33, 162, ++ 131, 1, 49, 79, 246, 254, 114, 10, 64, 179, 248, 200, 16, 226, 131, ++ 28, 50, 146, 178, 200, 28, 16, 24, 98, 132, 79, 246, 252, 114, 2, 64, ++ 2, 235, 193, 1, 1, 49, 162, 132, 79, 246, 254, 114, 10, 64, 179, 248, ++ 204, 16, 226, 132, 28, 50, 146, 178, 203, 28, 98, 133, 210, 24, 79, ++ 246, 252, 115, 19, 64, 163, 133, 3, 235, 193, 3, 1, 51, 79, 246, 254, ++ 114, 26, 64, 226, 133, 0, 37, 29, 79, 87, 248, 53, 48, 99, 177, 28, ++ 75, 41, 1, 141, 232, 24, 0, 221, 34, 32, 70, 1, 240, 240, 1, 25, 75, ++ 255, 247, 198, 253, 0, 40, 34, 219, 1, 53, 13, 45, 235, 209, 0, 37, ++ 87, 248, 53, 48, 83, 177, 41, 1, 221, 34, 32, 70, 1, 240, 240, 1, 17, ++ 75, 0, 148, 255, 247, 226, 254, 0, 40, 16, 219, 1, 53, 13, 45, 238, ++ 209, 14, 75, 0, 33, 2, 147, 48, 104, 13, 74, 35, 70, 0, 145, 1, 145, ++ 3, 145, 4, 145, 5, 145, 251, 247, 28, 251, 24, 177, 32, 70, 255, 247, ++ 140, 253, 0, 36, 32, 70, 7, 176, 240, 189, 252, 60, 4, 0, 145, 65, 133, ++ 0, 229, 65, 133, 0, 49, 66, 133, 0, 29, 65, 133, 0, 100, 61, 4, 0, 45, ++ 233, 247, 67, 221, 248, 40, 144, 7, 70, 14, 70, 21, 70, 152, 70, 0, ++ 36, 86, 250, 4, 243, 217, 7, 10, 213, 33, 1, 56, 70, 1, 240, 240, 1, ++ 42, 70, 67, 70, 205, 248, 0, 144, 255, 247, 165, 254, 24, 185, 1, 52, ++ 13, 44, 237, 209, 0, 32, 189, 232, 254, 131, 45, 233, 240, 79, 135, ++ 176, 5, 146, 2, 104, 176, 248, 40, 128, 18, 104, 156, 70, 210, 105, ++ 4, 70, 210, 248, 204, 32, 176, 248, 42, 160, 144, 69, 131, 141, 199, ++ 141, 76, 218, 130, 121, 0, 42, 76, 209, 1, 240, 240, 6, 54, 17, 199, ++ 25, 178, 178, 55, 248, 18, 176, 1, 50, 55, 248, 18, 80, 130, 68, 69, ++ 69, 3, 68, 25, 210, 197, 235, 8, 8, 5, 241, 1, 9, 10, 235, 5, 1, 66, ++ 70, 10, 235, 9, 0, 205, 248, 12, 192, 4, 147, 175, 243, 56, 243, 4, ++ 155, 79, 234, 200, 2, 3, 235, 201, 0, 3, 235, 197, 1, 175, 243, 47, ++ 243, 221, 248, 12, 192, 4, 155, 49, 70, 0, 34, 7, 224, 7, 235, 70, 0, ++ 48, 248, 2, 224, 14, 241, 1, 14, 32, 248, 2, 224, 1, 49, 2, 50, 13, ++ 41, 243, 217, 16, 153, 203, 235, 5, 2, 0, 145, 5, 153, 10, 235, 11, ++ 0, 1, 145, 146, 178, 3, 235, 203, 1, 99, 70, 0, 240, 111, 248, 35, 141, ++ 0, 32, 1, 51, 35, 133, 4, 224, 111, 240, 21, 0, 1, 224, 111, 240, 22, ++ 0, 7, 176, 189, 232, 240, 143, 45, 233, 247, 67, 221, 248, 40, 144, ++ 7, 70, 14, 70, 21, 70, 152, 70, 0, 36, 86, 250, 4, 243, 216, 7, 10, ++ 213, 33, 1, 56, 70, 1, 240, 240, 1, 42, 70, 67, 70, 205, 248, 0, 144, ++ 255, 247, 129, 255, 24, 185, 1, 52, 13, 44, 237, 209, 0, 32, 189, 232, ++ 254, 131, 45, 233, 240, 71, 8, 159, 154, 70, 4, 70, 157, 248, 36, 96, ++ 3, 70, 0, 37, 12, 224, 19, 248, 1, 11, 134, 66, 10, 208, 29, 177, 19, ++ 248, 2, 236, 182, 69, 1, 210, 134, 66, 3, 217, 1, 53, 173, 178, 149, ++ 66, 240, 209, 170, 66, 7, 251, 5, 24, 14, 217, 197, 235, 2, 9, 65, 70, ++ 7, 251, 9, 242, 8, 235, 7, 0, 175, 243, 190, 242, 104, 28, 32, 24, 97, ++ 25, 74, 70, 175, 243, 184, 242, 64, 70, 81, 70, 58, 70, 173, 247, 87, ++ 255, 102, 85, 189, 232, 240, 135, 127, 181, 3, 147, 8, 155, 4, 147, ++ 9, 155, 5, 147, 12, 35, 0, 147, 157, 248, 40, 48, 1, 147, 3, 171, 255, ++ 247, 190, 255, 7, 176, 0, 189, 31, 181, 2, 147, 6, 155, 3, 147, 8, 35, ++ 0, 147, 157, 248, 28, 48, 1, 147, 2, 171, 255, 247, 176, 255, 5, 176, ++ 0, 189, 55, 181, 37, 75, 208, 248, 124, 86, 4, 70, 0, 147, 1, 144, 64, ++ 242, 63, 17, 40, 70, 127, 34, 33, 75, 255, 247, 12, 253, 0, 40, 58, ++ 209, 31, 75, 40, 70, 141, 232, 24, 0, 65, 246, 63, 81, 64, 34, 29, 75, ++ 255, 247, 140, 253, 120, 187, 28, 75, 40, 70, 141, 232, 24, 0, 64, 246, ++ 63, 17, 152, 34, 25, 75, 255, 247, 129, 253, 32, 187, 24, 75, 40, 70, ++ 141, 232, 24, 0, 64, 242, 47, 17, 168, 34, 22, 75, 255, 247, 118, 253, ++ 200, 185, 40, 70, 64, 242, 15, 17, 127, 34, 19, 75, 0, 148, 255, 247, ++ 209, 254, 128, 185, 40, 70, 64, 242, 15, 17, 152, 34, 15, 75, 0, 148, ++ 255, 247, 78, 255, 56, 185, 40, 70, 64, 242, 15, 17, 168, 34, 12, 75, ++ 0, 148, 255, 247, 69, 255, 62, 189, 5, 165, 2, 0, 97, 165, 2, 0, 1, ++ 91, 133, 0, 169, 87, 133, 0, 181, 90, 133, 0, 137, 87, 133, 0, 121, ++ 91, 133, 0, 29, 88, 133, 0, 205, 88, 133, 0, 141, 88, 133, 0, 117, 161, ++ 2, 0, 55, 181, 16, 75, 208, 248, 124, 86, 4, 70, 0, 147, 1, 144, 5, ++ 33, 40, 70, 0, 34, 12, 75, 255, 247, 171, 252, 144, 185, 11, 75, 40, ++ 70, 141, 232, 24, 0, 5, 33, 1, 34, 9, 75, 255, 247, 161, 252, 64, 185, ++ 8, 75, 40, 70, 141, 232, 24, 0, 5, 33, 50, 34, 6, 75, 255, 247, 151, ++ 252, 62, 189, 113, 82, 133, 0, 57, 82, 133, 0, 141, 82, 133, 0, 69, ++ 82, 133, 0, 85, 82, 133, 0, 41, 82, 133, 0, 55, 181, 37, 75, 208, 248, ++ 124, 86, 4, 70, 0, 147, 1, 144, 79, 244, 144, 113, 40, 70, 0, 34, 33, ++ 75, 255, 247, 124, 252, 0, 40, 58, 209, 31, 75, 40, 70, 141, 232, 24, ++ 0, 79, 244, 144, 113, 1, 34, 29, 75, 255, 247, 112, 252, 120, 187, 28, ++ 75, 40, 70, 141, 232, 24, 0, 79, 244, 144, 113, 50, 34, 25, 75, 255, ++ 247, 101, 252, 32, 187, 24, 75, 40, 70, 141, 232, 24, 0, 79, 244, 144, ++ 113, 3, 34, 22, 75, 255, 247, 90, 252, 200, 185, 21, 75, 40, 70, 141, ++ 232, 24, 0, 79, 244, 144, 113, 6, 34, 18, 75, 255, 247, 79, 252, 112, ++ 185, 40, 70, 128, 33, 5, 34, 16, 75, 0, 148, 255, 247, 243, 252, 48, ++ 185, 40, 70, 128, 33, 5, 34, 13, 75, 0, 148, 255, 247, 235, 252, 62, ++ 189, 49, 87, 133, 0, 177, 84, 133, 0, 109, 87, 133, 0, 185, 84, 133, ++ 0, 213, 86, 133, 0, 109, 84, 133, 0, 169, 86, 133, 0, 89, 84, 133, 0, ++ 253, 86, 133, 0, 137, 84, 133, 0, 189, 165, 2, 0, 73, 86, 133, 0, 55, ++ 181, 21, 75, 208, 248, 124, 86, 4, 70, 0, 147, 1, 144, 64, 33, 40, 70, ++ 0, 34, 17, 75, 255, 247, 151, 251, 224, 185, 16, 75, 40, 70, 141, 232, ++ 24, 0, 64, 33, 1, 34, 14, 75, 255, 247, 141, 251, 144, 185, 13, 75, ++ 40, 70, 141, 232, 24, 0, 64, 33, 50, 34, 11, 75, 255, 247, 131, 251, ++ 64, 185, 10, 75, 40, 70, 141, 232, 24, 0, 64, 33, 3, 34, 8, 75, 255, ++ 247, 121, 251, 62, 189, 237, 92, 133, 0, 145, 92, 133, 0, 5, 93, 133, ++ 0, 157, 92, 133, 0, 209, 92, 133, 0, 129, 92, 133, 0, 169, 92, 133, ++ 0, 113, 92, 133, 0, 55, 181, 10, 75, 208, 248, 124, 86, 4, 70, 0, 147, ++ 1, 144, 176, 33, 40, 70, 16, 34, 6, 75, 255, 247, 91, 251, 48, 185, ++ 40, 70, 176, 33, 16, 34, 4, 75, 0, 148, 255, 247, 129, 252, 62, 189, ++ 141, 83, 133, 0, 169, 82, 133, 0, 213, 82, 133, 0, 55, 181, 208, 248, ++ 124, 86, 4, 70, 0, 144, 192, 33, 40, 70, 0, 34, 17, 75, 255, 247, 179, ++ 253, 240, 185, 40, 70, 192, 33, 1, 34, 15, 75, 0, 148, 255, 247, 171, ++ 253, 176, 185, 40, 70, 192, 33, 6, 34, 12, 75, 0, 148, 255, 247, 163, ++ 253, 112, 185, 40, 70, 192, 33, 168, 34, 9, 75, 0, 148, 255, 247, 33, ++ 254, 48, 185, 40, 70, 192, 33, 152, 34, 6, 75, 0, 148, 255, 247, 25, ++ 254, 62, 189, 89, 93, 133, 0, 129, 93, 133, 0, 57, 93, 133, 0, 157, ++ 93, 133, 0, 33, 93, 133, 0, 16, 181, 4, 70, 80, 177, 3, 104, 5, 73, ++ 24, 104, 34, 70, 251, 247, 44, 248, 32, 70, 189, 232, 16, 64, 182, 247, ++ 67, 189, 16, 189, 0, 191, 179, 61, 4, 0, 56, 181, 5, 70, 12, 32, 182, ++ 247, 55, 253, 4, 70, 56, 177, 0, 33, 12, 34, 175, 243, 23, 241, 12, ++ 35, 37, 96, 163, 128, 1, 224, 255, 247, 221, 255, 32, 70, 56, 189, 40, ++ 177, 131, 104, 218, 136, 1, 58, 218, 128, 182, 247, 37, 189, 112, 71, ++ 45, 233, 240, 79, 155, 70, 3, 139, 135, 176, 197, 24, 198, 90, 181, ++ 248, 4, 128, 67, 138, 198, 235, 8, 8, 152, 69, 5, 145, 148, 70, 135, ++ 138, 176, 248, 22, 160, 50, 218, 108, 136, 199, 25, 68, 69, 130, 68, ++ 22, 218, 196, 235, 8, 8, 4, 241, 1, 9, 57, 25, 66, 70, 7, 235, 9, 0, ++ 205, 248, 16, 192, 175, 243, 191, 240, 12, 34, 2, 251, 9, 160, 2, 251, ++ 4, 161, 2, 251, 8, 242, 175, 243, 182, 240, 221, 248, 16, 192, 107, ++ 136, 162, 27, 1, 51, 107, 128, 171, 136, 12, 33, 1, 51, 171, 128, 16, ++ 155, 184, 25, 1, 147, 5, 155, 1, 251, 6, 161, 2, 147, 146, 178, 99, ++ 70, 205, 248, 0, 176, 255, 247, 239, 253, 0, 32, 1, 224, 111, 240, 21, ++ 0, 7, 176, 189, 232, 240, 143, 45, 233, 240, 79, 155, 70, 3, 139, 148, ++ 70, 197, 24, 172, 136, 48, 248, 3, 128, 66, 138, 200, 235, 4, 3, 135, ++ 176, 147, 66, 5, 145, 135, 138, 176, 248, 22, 160, 47, 218, 156, 66, ++ 7, 68, 130, 68, 110, 136, 22, 218, 200, 241, 0, 8, 4, 241, 1, 9, 57, ++ 25, 66, 70, 7, 235, 9, 0, 205, 248, 16, 192, 175, 243, 116, 240, 12, ++ 34, 2, 251, 9, 160, 2, 251, 4, 161, 2, 251, 8, 242, 175, 243, 107, 240, ++ 221, 248, 16, 192, 171, 136, 162, 27, 1, 51, 171, 128, 16, 155, 12, ++ 33, 1, 147, 5, 155, 184, 25, 2, 147, 1, 251, 6, 161, 146, 178, 99, 70, ++ 205, 248, 0, 176, 255, 247, 167, 253, 0, 32, 1, 224, 111, 240, 21, 0, ++ 7, 176, 189, 232, 240, 143, 45, 233, 240, 79, 155, 70, 3, 140, 133, ++ 176, 197, 24, 198, 90, 181, 248, 4, 128, 67, 139, 198, 235, 8, 8, 152, ++ 69, 3, 145, 148, 70, 135, 139, 176, 248, 30, 160, 46, 218, 108, 136, ++ 199, 25, 68, 69, 130, 68, 21, 218, 196, 235, 8, 8, 4, 241, 1, 9, 57, ++ 25, 66, 70, 7, 235, 9, 0, 205, 248, 8, 192, 175, 243, 44, 240, 10, 235, ++ 201, 0, 10, 235, 196, 1, 79, 234, 200, 2, 175, 243, 36, 240, 221, 248, ++ 8, 192, 107, 136, 162, 27, 1, 51, 107, 128, 171, 136, 184, 25, 1, 51, ++ 171, 128, 3, 155, 10, 235, 198, 1, 1, 147, 146, 178, 99, 70, 205, 248, ++ 0, 176, 255, 247, 112, 253, 0, 32, 1, 224, 111, 240, 21, 0, 5, 176, ++ 189, 232, 240, 143, 0, 0, 45, 233, 240, 79, 3, 104, 133, 176, 3, 147, ++ 27, 104, 21, 70, 219, 105, 194, 136, 211, 248, 208, 48, 7, 70, 154, ++ 66, 14, 70, 91, 218, 9, 177, 78, 28, 182, 178, 13, 177, 1, 53, 173, ++ 178, 6, 241, 39, 3, 79, 246, 252, 122, 3, 234, 10, 10, 12, 35, 3, 251, ++ 6, 163, 79, 246, 254, 120, 1, 51, 3, 234, 8, 8, 8, 241, 9, 3, 235, 24, ++ 79, 246, 252, 123, 3, 234, 11, 11, 11, 235, 197, 2, 1, 50, 79, 246, ++ 254, 115, 19, 64, 3, 241, 6, 9, 31, 250, 137, 249, 72, 70, 2, 147, 182, ++ 247, 14, 252, 4, 70, 0, 40, 48, 208, 0, 33, 74, 70, 174, 243, 237, 247, ++ 2, 155, 3, 153, 35, 132, 251, 136, 164, 248, 24, 128, 36, 34, 8, 241, ++ 6, 8, 1, 51, 33, 96, 167, 96, 164, 248, 16, 144, 162, 130, 164, 248, ++ 22, 160, 164, 248, 28, 128, 164, 248, 30, 176, 102, 130, 101, 131, 251, ++ 128, 70, 177, 221, 33, 32, 70, 12, 74, 13, 75, 0, 148, 255, 247, 198, ++ 254, 0, 40, 10, 219, 109, 177, 221, 33, 32, 70, 9, 74, 35, 70, 255, ++ 247, 80, 255, 0, 40, 5, 218, 0, 224, 0, 36, 32, 70, 255, 247, 174, 254, ++ 0, 36, 32, 70, 5, 176, 189, 232, 240, 143, 9, 96, 133, 0, 197, 95, 133, ++ 0, 65, 96, 133, 0, 127, 181, 11, 74, 3, 70, 0, 146, 0, 34, 1, 146, 2, ++ 146, 3, 146, 8, 74, 9, 73, 4, 146, 9, 74, 5, 146, 0, 104, 8, 74, 250, ++ 247, 253, 254, 0, 40, 20, 191, 79, 240, 255, 48, 0, 32, 7, 176, 0, 189, ++ 81, 140, 133, 0, 216, 61, 4, 0, 60, 234, 135, 0, 199, 177, 2, 0, 183, ++ 61, 4, 0, 2, 70, 2, 73, 0, 104, 250, 247, 140, 190, 0, 191, 183, 61, ++ 4, 0, 16, 181, 4, 70, 72, 177, 3, 104, 33, 70, 24, 104, 250, 247, 160, ++ 255, 32, 70, 189, 232, 16, 64, 182, 247, 152, 187, 16, 189, 55, 181, ++ 5, 70, 8, 32, 179, 243, 129, 245, 4, 70, 160, 177, 5, 96, 0, 34, 1, ++ 144, 12, 33, 40, 70, 10, 75, 0, 146, 254, 247, 160, 249, 0, 40, 96, ++ 96, 8, 219, 8, 75, 40, 104, 0, 147, 33, 70, 7, 74, 4, 35, 250, 247, ++ 14, 255, 24, 177, 32, 70, 255, 247, 211, 255, 0, 36, 32, 70, 62, 189, ++ 221, 146, 133, 0, 216, 234, 135, 0, 241, 146, 133, 0, 16, 181, 4, 70, ++ 192, 104, 24, 177, 182, 247, 105, 251, 0, 35, 227, 96, 16, 189, 16, ++ 181, 4, 70, 160, 32, 182, 247, 94, 251, 112, 177, 224, 96, 160, 96, ++ 0, 241, 144, 2, 3, 70, 16, 51, 147, 66, 67, 248, 16, 60, 250, 209, 0, ++ 35, 192, 248, 144, 48, 24, 70, 16, 189, 111, 240, 26, 0, 16, 189, 0, ++ 0, 56, 181, 4, 70, 0, 40, 82, 208, 0, 33, 5, 104, 5, 240, 12, 221, 32, ++ 70, 5, 240, 233, 218, 99, 105, 51, 177, 32, 70, 0, 33, 214, 247, 121, ++ 253, 96, 105, 254, 243, 142, 246, 163, 105, 51, 177, 32, 70, 1, 33, ++ 214, 247, 112, 253, 160, 105, 254, 243, 133, 246, 35, 105, 51, 177, ++ 32, 70, 2, 33, 214, 247, 103, 253, 32, 105, 254, 243, 124, 246, 227, ++ 111, 51, 177, 32, 70, 3, 33, 214, 247, 94, 253, 224, 111, 254, 243, ++ 115, 246, 32, 70, 7, 240, 82, 219, 212, 248, 152, 0, 182, 247, 23, 251, ++ 1, 224, 214, 247, 15, 255, 225, 105, 32, 70, 0, 41, 249, 209, 255, 247, ++ 159, 255, 213, 248, 72, 1, 24, 177, 10, 73, 42, 70, 0, 240, 149, 249, ++ 40, 104, 9, 73, 34, 70, 250, 247, 230, 253, 212, 248, 168, 48, 27, 177, ++ 4, 241, 168, 0, 174, 243, 222, 240, 32, 70, 189, 232, 56, 64, 182, 247, ++ 246, 186, 56, 189, 201, 172, 133, 0, 203, 174, 136, 0, 48, 181, 5, 70, ++ 135, 176, 176, 32, 182, 247, 232, 250, 4, 70, 0, 40, 0, 240, 155, 128, ++ 0, 33, 176, 34, 174, 243, 198, 246, 10, 35, 132, 248, 67, 48, 1, 35, ++ 132, 248, 72, 48, 255, 35, 132, 248, 32, 48, 132, 248, 33, 48, 132, ++ 248, 34, 48, 132, 248, 35, 48, 37, 96, 196, 32, 182, 247, 205, 250, ++ 196, 248, 152, 0, 0, 40, 127, 208, 32, 70, 5, 240, 130, 220, 32, 70, ++ 5, 240, 137, 223, 43, 104, 65, 242, 107, 2, 211, 248, 216, 48, 32, 240, ++ 127, 0, 25, 107, 160, 135, 145, 66, 32, 70, 8, 209, 155, 106, 147, 43, ++ 5, 209, 5, 240, 120, 223, 192, 245, 132, 64, 104, 48, 1, 224, 5, 240, ++ 118, 223, 224, 135, 227, 143, 32, 70, 35, 240, 127, 3, 227, 135, 5, ++ 240, 110, 223, 0, 35, 227, 100, 65, 242, 136, 51, 35, 101, 46, 75, 32, ++ 240, 127, 0, 164, 248, 64, 0, 0, 147, 44, 75, 40, 104, 1, 147, 43, 75, ++ 44, 73, 2, 147, 44, 75, 44, 74, 3, 147, 44, 75, 4, 147, 44, 75, 5, 147, ++ 35, 70, 250, 247, 203, 253, 0, 40, 61, 209, 213, 248, 208, 5, 254, 243, ++ 173, 245, 96, 97, 0, 40, 54, 208, 213, 248, 208, 5, 254, 243, 166, 245, ++ 160, 97, 128, 179, 213, 248, 208, 5, 254, 243, 160, 245, 32, 97, 80, ++ 179, 32, 70, 255, 247, 14, 255, 48, 187, 213, 248, 208, 5, 254, 243, ++ 150, 245, 224, 103, 0, 179, 1, 35, 132, 248, 120, 48, 213, 248, 72, ++ 1, 65, 242, 112, 115, 164, 248, 122, 48, 32, 177, 22, 73, 42, 70, 0, ++ 240, 234, 248, 136, 185, 32, 70, 1, 33, 5, 240, 33, 220, 79, 244, 72, ++ 67, 163, 101, 0, 35, 227, 101, 50, 35, 35, 102, 213, 248, 32, 6, 4, ++ 241, 168, 1, 174, 243, 26, 240, 24, 177, 32, 70, 255, 247, 252, 254, ++ 0, 36, 32, 70, 7, 176, 48, 189, 181, 159, 133, 0, 73, 189, 133, 0, 17, ++ 189, 133, 0, 248, 234, 135, 0, 157, 162, 133, 0, 203, 174, 136, 0, 8, ++ 62, 4, 0, 207, 181, 2, 0, 201, 172, 133, 0, 56, 181, 4, 70, 0, 40, 39, ++ 208, 5, 104, 20, 73, 40, 104, 34, 70, 250, 247, 13, 253, 35, 106, 27, ++ 177, 4, 241, 32, 0, 174, 243, 6, 240, 227, 105, 27, 177, 4, 241, 28, ++ 0, 174, 243, 0, 240, 163, 105, 27, 177, 4, 241, 24, 0, 173, 243, 250, ++ 247, 99, 105, 27, 177, 4, 241, 20, 0, 173, 243, 244, 247, 40, 70, 6, ++ 73, 34, 70, 254, 247, 72, 248, 32, 70, 189, 232, 56, 64, 182, 247, 7, ++ 186, 56, 189, 0, 191, 105, 177, 136, 0, 25, 204, 133, 0, 112, 181, 5, ++ 70, 134, 176, 48, 32, 179, 243, 234, 243, 4, 70, 0, 40, 89, 208, 79, ++ 240, 255, 51, 3, 97, 4, 34, 255, 33, 5, 96, 10, 48, 174, 243, 210, 245, ++ 11, 33, 4, 241, 14, 0, 175, 243, 151, 247, 0, 35, 141, 232, 24, 0, 4, ++ 33, 40, 70, 38, 74, 39, 75, 253, 247, 250, 255, 0, 40, 96, 96, 63, 219, ++ 40, 70, 36, 73, 34, 70, 254, 247, 16, 248, 0, 40, 56, 209, 213, 248, ++ 32, 102, 4, 241, 20, 1, 48, 70, 173, 243, 157, 247, 0, 40, 47, 209, ++ 48, 70, 4, 241, 24, 1, 173, 243, 150, 247, 72, 187, 48, 70, 4, 241, ++ 28, 1, 173, 243, 144, 247, 24, 187, 48, 70, 4, 241, 32, 1, 173, 243, ++ 138, 247, 232, 185, 21, 75, 1, 144, 0, 147, 20, 75, 4, 144, 2, 147, ++ 20, 75, 5, 144, 3, 147, 40, 104, 19, 73, 19, 74, 35, 70, 250, 247, 236, ++ 252, 104, 185, 32, 70, 8, 240, 168, 217, 32, 177, 32, 70, 1, 33, 8, ++ 240, 215, 217, 32, 185, 50, 35, 163, 98, 38, 35, 99, 98, 3, 224, 32, ++ 70, 255, 247, 104, 255, 0, 36, 32, 70, 6, 176, 112, 189, 49, 205, 133, ++ 0, 233, 204, 133, 0, 25, 204, 133, 0, 149, 204, 133, 0, 61, 207, 133, ++ 0, 229, 204, 133, 0, 232, 235, 135, 0, 105, 177, 136, 0, 64, 105, 173, ++ 243, 45, 183, 64, 105, 173, 243, 140, 183, 128, 105, 173, 243, 39, 183, ++ 128, 105, 173, 243, 134, 183, 192, 105, 173, 243, 33, 183, 192, 105, ++ 173, 243, 128, 183, 0, 106, 173, 243, 27, 183, 0, 106, 173, 243, 122, ++ 183, 56, 181, 4, 70, 96, 177, 5, 104, 34, 70, 6, 73, 40, 104, 250, 247, ++ 74, 252, 32, 70, 182, 247, 99, 249, 43, 104, 0, 34, 131, 248, 78, 32, ++ 56, 189, 0, 191, 19, 178, 136, 0, 112, 181, 3, 104, 0, 38, 134, 176, ++ 5, 70, 131, 248, 78, 96, 12, 32, 179, 243, 64, 243, 4, 70, 0, 40, 69, ++ 208, 36, 75, 5, 96, 141, 232, 72, 0, 35, 75, 40, 104, 4, 147, 34, 75, ++ 35, 73, 5, 147, 35, 74, 35, 70, 2, 150, 3, 150, 250, 247, 125, 252, ++ 6, 70, 0, 40, 46, 209, 141, 232, 17, 0, 28, 33, 40, 70, 29, 74, 30, ++ 75, 253, 247, 76, 255, 0, 40, 96, 96, 35, 219, 12, 33, 40, 70, 27, 74, ++ 27, 75, 0, 150, 1, 148, 1, 240, 91, 254, 0, 40, 160, 96, 24, 219, 24, ++ 75, 213, 248, 124, 6, 141, 232, 24, 0, 10, 33, 56, 34, 22, 75, 254, ++ 247, 98, 255, 104, 185, 213, 248, 124, 6, 10, 33, 56, 34, 19, 75, 0, ++ 149, 255, 247, 73, 249, 32, 185, 43, 104, 1, 34, 131, 248, 78, 32, 3, ++ 224, 32, 70, 255, 247, 154, 255, 0, 36, 32, 70, 6, 176, 112, 189, 21, ++ 220, 133, 0, 48, 62, 4, 0, 73, 204, 2, 0, 0, 236, 135, 0, 19, 178, 136, ++ 0, 1, 220, 133, 0, 245, 219, 133, 0, 185, 224, 133, 0, 133, 224, 133, ++ 0, 113, 225, 133, 0, 65, 225, 133, 0, 129, 203, 2, 0, 112, 181, 6, 70, ++ 134, 176, 8, 32, 182, 247, 228, 248, 4, 70, 160, 177, 11, 75, 0, 37, ++ 6, 96, 69, 96, 10, 73, 141, 232, 40, 0, 48, 104, 9, 74, 35, 70, 2, 149, ++ 3, 149, 4, 149, 5, 149, 250, 247, 20, 252, 24, 177, 32, 70, 182, 247, ++ 209, 248, 44, 70, 32, 70, 6, 176, 112, 189, 213, 231, 133, 0, 56, 236, ++ 135, 0, 207, 61, 4, 0, 16, 181, 4, 70, 80, 177, 3, 104, 5, 73, 24, 104, ++ 34, 70, 250, 247, 162, 251, 32, 70, 189, 232, 16, 64, 182, 247, 185, ++ 184, 16, 189, 0, 191, 207, 61, 4, 0, 112, 181, 4, 70, 0, 40, 45, 208, ++ 6, 104, 34, 70, 22, 73, 48, 104, 214, 248, 72, 81, 250, 247, 141, 251, ++ 32, 70, 12, 240, 25, 222, 34, 70, 48, 70, 18, 73, 253, 247, 221, 254, ++ 34, 70, 48, 70, 16, 73, 253, 247, 228, 254, 34, 70, 40, 70, 15, 73, ++ 255, 247, 19, 255, 34, 70, 40, 70, 13, 73, 255, 247, 20, 255, 34, 70, ++ 40, 70, 12, 73, 255, 247, 21, 255, 40, 70, 11, 73, 34, 70, 255, 247, ++ 22, 255, 32, 70, 189, 232, 112, 64, 182, 247, 131, 184, 112, 189, 0, ++ 191, 160, 185, 136, 0, 61, 246, 133, 0, 229, 6, 134, 0, 221, 243, 133, ++ 0, 201, 245, 133, 0, 241, 27, 134, 0, 17, 2, 134, 0, 240, 181, 208, ++ 248, 72, 97, 135, 176, 5, 70, 88, 32, 182, 247, 104, 248, 4, 70, 0, ++ 40, 0, 240, 149, 128, 0, 33, 88, 34, 174, 243, 70, 244, 32, 70, 32, ++ 33, 74, 74, 64, 248, 32, 91, 174, 243, 165, 244, 1, 39, 79, 240, 255, ++ 51, 224, 97, 132, 248, 64, 112, 164, 248, 76, 48, 48, 70, 68, 73, 34, ++ 70, 255, 247, 200, 254, 0, 40, 122, 209, 48, 70, 66, 73, 34, 70, 255, ++ 247, 199, 254, 0, 40, 115, 209, 48, 70, 63, 73, 34, 70, 255, 247, 198, ++ 254, 0, 40, 108, 209, 48, 70, 61, 73, 34, 70, 255, 247, 197, 254, 0, ++ 40, 101, 209, 40, 70, 58, 73, 34, 70, 253, 247, 118, 254, 6, 70, 0, ++ 40, 93, 209, 141, 232, 17, 0, 4, 33, 40, 70, 54, 74, 54, 75, 253, 247, ++ 65, 254, 0, 40, 32, 97, 82, 219, 40, 70, 57, 70, 50, 70, 51, 70, 0, ++ 150, 1, 148, 253, 247, 54, 254, 0, 40, 96, 97, 71, 219, 4, 33, 40, 70, ++ 46, 74, 46, 75, 0, 150, 1, 148, 1, 240, 69, 253, 0, 40, 160, 97, 60, ++ 219, 40, 70, 43, 73, 34, 70, 253, 247, 65, 254, 0, 40, 53, 209, 41, ++ 75, 3, 235, 198, 2, 83, 248, 54, 48, 99, 177, 82, 104, 82, 177, 49, ++ 1, 141, 232, 20, 0, 213, 248, 124, 6, 1, 240, 240, 1, 192, 34, 254, ++ 247, 93, 254, 16, 187, 1, 54, 13, 46, 233, 209, 31, 75, 31, 74, 0, 147, ++ 0, 35, 1, 147, 3, 147, 30, 75, 2, 146, 4, 147, 29, 75, 40, 104, 5, 147, ++ 29, 73, 29, 74, 35, 70, 250, 247, 32, 251, 104, 185, 32, 70, 12, 240, ++ 66, 223, 32, 177, 32, 70, 1, 33, 10, 240, 77, 221, 32, 185, 99, 108, ++ 67, 240, 4, 3, 99, 100, 3, 224, 32, 70, 255, 247, 26, 255, 0, 36, 32, ++ 70, 7, 176, 240, 189, 72, 62, 4, 0, 221, 243, 133, 0, 201, 245, 133, ++ 0, 241, 27, 134, 0, 17, 2, 134, 0, 229, 6, 134, 0, 109, 1, 134, 0, 245, ++ 0, 134, 0, 49, 15, 134, 0, 29, 15, 134, 0, 61, 246, 133, 0, 204, 159, ++ 5, 0, 97, 249, 133, 0, 121, 28, 134, 0, 80, 62, 4, 0, 149, 206, 2, 0, ++ 88, 237, 135, 0, 160, 185, 136, 0, 56, 181, 4, 70, 208, 177, 128, 104, ++ 8, 177, 181, 247, 160, 255, 35, 105, 67, 185, 14, 224, 35, 105, 83, ++ 248, 53, 0, 8, 177, 181, 247, 151, 255, 1, 53, 0, 224, 0, 37, 227, 104, ++ 157, 66, 243, 219, 32, 105, 181, 247, 142, 255, 32, 70, 189, 232, 56, ++ 64, 181, 247, 137, 191, 56, 189, 0, 0, 45, 233, 240, 65, 5, 70, 24, ++ 32, 179, 243, 112, 241, 4, 70, 0, 40, 51, 208, 43, 104, 5, 96, 219, ++ 105, 12, 32, 219, 105, 1, 51, 88, 67, 179, 243, 100, 241, 160, 96, 64, ++ 179, 43, 104, 24, 32, 219, 105, 218, 105, 91, 111, 98, 96, 227, 96, ++ 181, 247, 103, 255, 32, 97, 232, 177, 18, 73, 24, 34, 0, 38, 172, 247, ++ 198, 255, 55, 70, 14, 224, 14, 75, 212, 248, 16, 128, 155, 25, 24, 121, ++ 128, 0, 179, 243, 72, 241, 35, 105, 72, 248, 6, 0, 155, 89, 8, 54, 67, ++ 177, 1, 55, 227, 104, 159, 66, 237, 219, 107, 104, 6, 74, 220, 96, 154, ++ 96, 3, 224, 32, 70, 255, 247, 160, 255, 0, 36, 32, 70, 189, 232, 240, ++ 129, 52, 160, 5, 0, 215, 209, 2, 0, 16, 181, 196, 104, 161, 66, 11, ++ 218, 0, 105, 0, 235, 193, 4, 36, 121, 162, 66, 8, 218, 80, 248, 49, ++ 16, 0, 32, 65, 248, 34, 48, 16, 189, 111, 240, 21, 0, 16, 189, 111, ++ 240, 21, 0, 16, 189, 215, 247, 186, 190, 16, 181, 4, 70, 255, 247, 250, ++ 255, 224, 132, 0, 12, 132, 248, 40, 0, 0, 32, 16, 189, 1, 33, 10, 35, ++ 128, 248, 4, 17, 129, 107, 3, 34, 128, 248, 66, 50, 0, 35, 128, 248, ++ 67, 34, 128, 248, 19, 52, 128, 248, 21, 52, 128, 248, 23, 52, 128, 248, ++ 25, 52, 128, 248, 27, 52, 128, 248, 94, 50, 129, 248, 138, 32, 192, ++ 248, 24, 51, 128, 248, 16, 49, 192, 248, 136, 52, 127, 35, 128, 248, ++ 31, 49, 79, 240, 255, 51, 160, 248, 60, 49, 0, 245, 36, 115, 192, 248, ++ 48, 50, 100, 35, 79, 246, 206, 114, 128, 248, 252, 48, 4, 35, 160, 248, ++ 28, 35, 128, 248, 120, 50, 128, 248, 122, 50, 112, 71, 208, 248, 148, ++ 52, 16, 181, 4, 70, 131, 177, 211, 248, 40, 8, 48, 177, 181, 247, 220, ++ 254, 212, 248, 148, 52, 0, 34, 195, 248, 40, 40, 212, 248, 148, 4, 181, ++ 247, 211, 254, 0, 35, 196, 248, 148, 52, 16, 189, 208, 248, 224, 48, ++ 16, 181, 4, 70, 147, 177, 131, 107, 91, 107, 11, 43, 7, 209, 208, 248, ++ 132, 4, 32, 177, 181, 247, 193, 254, 0, 35, 196, 248, 132, 52, 212, ++ 248, 224, 0, 181, 247, 186, 254, 0, 35, 196, 248, 224, 48, 16, 189, ++ 16, 181, 4, 70, 1, 32, 181, 247, 174, 254, 3, 70, 196, 248, 224, 0, ++ 168, 177, 0, 33, 1, 34, 174, 243, 140, 242, 163, 107, 91, 107, 11, 43, ++ 12, 209, 79, 244, 148, 112, 181, 247, 158, 254, 3, 70, 196, 248, 132, ++ 4, 40, 177, 0, 33, 79, 244, 148, 114, 174, 243, 123, 242, 1, 35, 24, ++ 70, 16, 189, 112, 181, 4, 70, 64, 246, 120, 16, 13, 70, 181, 247, 139, ++ 254, 196, 248, 148, 4, 0, 40, 49, 208, 0, 33, 64, 246, 120, 18, 174, ++ 243, 104, 242, 180, 248, 246, 32, 212, 248, 148, 52, 0, 38, 26, 112, ++ 212, 248, 148, 52, 32, 70, 131, 248, 182, 96, 195, 248, 176, 96, 212, ++ 248, 148, 52, 131, 248, 180, 96, 163, 107, 131, 248, 132, 96, 163, 107, ++ 30, 103, 158, 103, 60, 35, 196, 248, 96, 49, 16, 35, 196, 248, 100, ++ 49, 196, 248, 104, 97, 0, 240, 159, 254, 163, 107, 2, 45, 12, 191, 26, ++ 111, 154, 111, 0, 32, 218, 102, 132, 248, 103, 99, 132, 248, 102, 99, ++ 112, 189, 111, 240, 26, 0, 112, 189, 176, 248, 106, 51, 247, 181, 4, ++ 70, 14, 70, 3, 179, 8, 70, 174, 243, 227, 242, 7, 70, 20, 72, 174, 243, ++ 223, 242, 63, 24, 16, 55, 191, 178, 56, 70, 181, 247, 63, 254, 5, 70, ++ 200, 177, 180, 248, 106, 51, 57, 70, 0, 147, 14, 74, 51, 70, 174, 243, ++ 129, 242, 212, 248, 240, 0, 41, 70, 175, 243, 142, 240, 7, 70, 40, 70, ++ 181, 247, 47, 254, 71, 185, 212, 248, 240, 0, 49, 70, 3, 176, 189, 232, ++ 240, 64, 175, 243, 129, 176, 7, 70, 56, 70, 3, 176, 240, 189, 0, 191, ++ 140, 160, 5, 0, 119, 160, 5, 0, 45, 233, 243, 71, 28, 70, 176, 248, ++ 106, 51, 7, 70, 136, 70, 145, 70, 208, 248, 240, 96, 0, 43, 50, 208, ++ 8, 70, 174, 243, 165, 242, 130, 70, 34, 72, 174, 243, 161, 242, 130, ++ 68, 10, 241, 16, 10, 31, 250, 138, 250, 80, 70, 181, 247, 255, 253, ++ 5, 70, 0, 40, 47, 208, 183, 248, 106, 51, 81, 70, 0, 147, 26, 74, 67, ++ 70, 174, 243, 64, 242, 56, 70, 41, 70, 216, 247, 30, 248, 7, 70, 104, ++ 177, 48, 70, 41, 70, 175, 243, 60, 240, 64, 177, 72, 69, 6, 221, 48, ++ 70, 41, 70, 74, 70, 175, 243, 40, 240, 130, 70, 0, 224, 162, 70, 40, ++ 70, 181, 247, 223, 253, 143, 185, 48, 70, 65, 70, 175, 243, 41, 240, ++ 88, 177, 72, 69, 9, 221, 48, 70, 65, 70, 74, 70, 2, 176, 189, 232, 240, ++ 71, 175, 243, 18, 176, 130, 70, 0, 224, 162, 70, 80, 70, 2, 176, 189, ++ 232, 240, 135, 0, 191, 140, 160, 5, 0, 119, 160, 5, 0, 56, 181, 0, 34, ++ 13, 70, 8, 73, 4, 70, 215, 247, 243, 255, 192, 178, 40, 35, 168, 66, ++ 132, 248, 10, 4, 132, 248, 121, 50, 204, 191, 132, 248, 10, 52, 132, ++ 248, 121, 2, 56, 189, 211, 160, 5, 0, 16, 181, 23, 73, 4, 70, 215, 247, ++ 236, 255, 192, 178, 132, 248, 140, 4, 1, 56, 192, 178, 253, 40, 2, 217, ++ 115, 35, 132, 248, 140, 52, 148, 248, 140, 52, 32, 70, 132, 248, 141, ++ 52, 14, 73, 215, 247, 218, 255, 192, 178, 132, 248, 142, 4, 8, 177, ++ 15, 40, 2, 209, 5, 35, 132, 248, 142, 52, 148, 248, 140, 36, 148, 248, ++ 142, 52, 211, 26, 132, 248, 143, 52, 0, 35, 132, 248, 144, 52, 132, ++ 248, 146, 52, 17, 35, 132, 248, 145, 52, 16, 189, 129, 160, 5, 0, 228, ++ 160, 5, 0, 112, 181, 1, 34, 13, 70, 60, 73, 4, 70, 215, 247, 169, 255, ++ 59, 73, 132, 248, 12, 4, 0, 34, 32, 70, 215, 247, 162, 255, 56, 73, ++ 132, 248, 208, 3, 7, 34, 32, 70, 215, 247, 155, 255, 54, 73, 132, 248, ++ 209, 3, 32, 70, 215, 247, 137, 255, 136, 177, 50, 73, 32, 70, 166, 107, ++ 215, 247, 156, 255, 48, 73, 48, 103, 32, 70, 166, 107, 215, 247, 150, ++ 255, 163, 107, 176, 103, 2, 45, 12, 191, 26, 111, 154, 111, 218, 102, ++ 42, 73, 0, 34, 111, 240, 149, 3, 32, 70, 215, 247, 139, 255, 39, 73, ++ 132, 248, 216, 3, 1, 34, 32, 70, 111, 240, 149, 3, 215, 247, 130, 255, ++ 2, 37, 132, 248, 217, 3, 0, 35, 42, 70, 32, 70, 31, 73, 215, 247, 121, ++ 255, 99, 25, 1, 53, 5, 45, 131, 248, 216, 3, 243, 209, 0, 37, 42, 70, ++ 32, 70, 26, 73, 215, 247, 129, 255, 99, 25, 1, 53, 14, 45, 131, 248, ++ 251, 3, 244, 209, 1, 37, 6, 34, 132, 248, 11, 84, 32, 70, 20, 73, 215, ++ 247, 79, 255, 0, 34, 132, 248, 9, 4, 18, 73, 32, 70, 166, 107, 215, ++ 247, 71, 255, 17, 73, 134, 248, 44, 1, 42, 70, 32, 70, 215, 247, 64, ++ 255, 0, 35, 132, 248, 226, 3, 64, 33, 32, 70, 132, 248, 200, 51, 189, ++ 232, 112, 64, 255, 247, 59, 191, 0, 191, 107, 160, 5, 0, 76, 160, 5, ++ 0, 197, 160, 5, 0, 157, 160, 5, 0, 245, 160, 5, 0, 190, 160, 5, 0, 146, ++ 160, 5, 0, 170, 160, 5, 0, 102, 160, 5, 0, 16, 181, 4, 70, 40, 177, ++ 4, 104, 0, 52, 24, 191, 1, 36, 181, 247, 226, 252, 32, 70, 16, 189, ++ 16, 181, 132, 139, 12, 128, 1, 140, 17, 128, 64, 242, 218, 50, 26, 128, ++ 144, 248, 53, 32, 2, 155, 1, 32, 26, 128, 16, 189, 144, 248, 52, 0, ++ 112, 71, 192, 106, 112, 71, 131, 107, 153, 97, 112, 71, 56, 181, 4, ++ 70, 0, 40, 63, 208, 208, 248, 0, 81, 1, 61, 192, 248, 0, 81, 0, 45, ++ 56, 209, 255, 247, 215, 253, 32, 70, 255, 247, 235, 253, 212, 248, 36, ++ 19, 41, 177, 163, 107, 24, 105, 0, 240, 14, 253, 196, 248, 36, 83, 0, ++ 37, 132, 248, 57, 82, 32, 70, 217, 247, 92, 250, 162, 107, 19, 104, ++ 163, 66, 3, 209, 212, 248, 236, 48, 19, 96, 5, 224, 211, 248, 236, 32, ++ 162, 66, 26, 209, 195, 248, 236, 80, 212, 248, 136, 48, 11, 177, 32, ++ 70, 152, 71, 212, 248, 136, 52, 19, 177, 32, 70, 217, 247, 95, 252, ++ 212, 248, 156, 20, 25, 177, 163, 107, 152, 104, 226, 247, 115, 253, ++ 32, 70, 181, 247, 136, 252, 0, 32, 56, 189, 1, 32, 56, 189, 1, 32, 56, ++ 189, 0, 0, 45, 233, 240, 71, 138, 70, 0, 33, 4, 70, 21, 70, 192, 104, ++ 10, 70, 118, 70, 153, 70, 184, 243, 236, 245, 128, 70, 0, 7, 14, 213, ++ 39, 104, 103, 177, 187, 107, 199, 248, 240, 144, 24, 105, 249, 106, ++ 225, 247, 154, 253, 215, 248, 0, 49, 1, 51, 199, 248, 0, 49, 200, 224, ++ 64, 246, 232, 32, 181, 247, 92, 252, 7, 70, 40, 185, 111, 240, 26, 0, ++ 49, 70, 217, 247, 203, 253, 192, 224, 0, 33, 64, 246, 232, 34, 174, ++ 243, 53, 240, 215, 248, 0, 49, 199, 248, 232, 160, 1, 51, 199, 248, ++ 0, 49, 35, 104, 188, 99, 199, 248, 236, 48, 1, 35, 199, 248, 240, 144, ++ 39, 96, 135, 248, 253, 48, 226, 108, 65, 242, 107, 3, 154, 66, 5, 209, ++ 99, 108, 147, 43, 12, 191, 1, 35, 24, 35, 0, 224, 24, 35, 2, 45, 167, ++ 248, 46, 49, 5, 209, 24, 240, 1, 15, 28, 191, 79, 244, 0, 83, 251, 98, ++ 187, 107, 249, 106, 24, 105, 225, 247, 87, 253, 215, 248, 232, 48, 179, ++ 248, 224, 67, 164, 178, 4, 244, 112, 99, 27, 10, 251, 97, 227, 178, ++ 59, 98, 187, 107, 216, 104, 248, 247, 91, 255, 251, 105, 167, 248, 106, ++ 3, 9, 43, 4, 209, 4, 35, 251, 97, 59, 106, 16, 51, 59, 98, 1, 35, 36, ++ 11, 135, 248, 36, 48, 60, 99, 56, 70, 255, 247, 222, 252, 0, 40, 111, ++ 209, 79, 244, 128, 83, 167, 248, 250, 48, 77, 242, 36, 2, 65, 242, 1, ++ 3, 2, 45, 24, 191, 19, 70, 167, 248, 246, 48, 56, 70, 51, 73, 215, 247, ++ 29, 254, 40, 177, 56, 70, 49, 73, 188, 107, 215, 247, 48, 254, 160, ++ 102, 56, 70, 255, 247, 50, 253, 0, 40, 82, 208, 56, 70, 41, 70, 255, ++ 247, 105, 254, 56, 70, 255, 247, 194, 252, 56, 70, 0, 240, 99, 251, ++ 0, 40, 70, 208, 56, 70, 41, 70, 255, 247, 65, 253, 4, 70, 0, 40, 63, ++ 209, 56, 70, 255, 247, 35, 254, 56, 70, 215, 247, 129, 251, 56, 70, ++ 1, 33, 215, 247, 92, 255, 56, 70, 33, 70, 216, 247, 4, 250, 79, 240, ++ 255, 51, 199, 248, 120, 51, 199, 248, 124, 51, 199, 248, 128, 51, 199, ++ 248, 132, 51, 199, 248, 136, 51, 199, 248, 140, 51, 199, 248, 144, 51, ++ 199, 248, 148, 51, 7, 241, 28, 1, 28, 34, 56, 70, 172, 247, 16, 252, ++ 187, 107, 152, 104, 226, 247, 173, 252, 199, 248, 156, 4, 40, 185, 111, ++ 240, 26, 0, 49, 70, 217, 247, 20, 253, 12, 224, 56, 70, 33, 70, 217, ++ 247, 9, 253, 135, 248, 160, 74, 7, 241, 240, 3, 199, 248, 240, 48, 56, ++ 70, 189, 232, 240, 135, 56, 70, 255, 247, 198, 254, 0, 32, 189, 232, ++ 240, 135, 89, 160, 5, 0, 112, 181, 5, 70, 79, 244, 152, 112, 118, 70, ++ 181, 247, 129, 251, 4, 70, 40, 185, 111, 240, 26, 0, 49, 70, 217, 247, ++ 240, 252, 58, 224, 0, 33, 79, 244, 152, 114, 173, 243, 90, 247, 43, ++ 104, 163, 96, 107, 104, 227, 96, 171, 104, 35, 97, 235, 104, 99, 96, ++ 43, 105, 99, 97, 43, 140, 163, 132, 107, 140, 227, 132, 107, 106, 163, ++ 98, 171, 106, 227, 98, 235, 106, 35, 99, 43, 107, 99, 99, 107, 107, ++ 99, 100, 171, 107, 163, 100, 235, 107, 227, 100, 43, 108, 35, 101, 107, ++ 108, 99, 101, 171, 108, 196, 248, 28, 49, 107, 105, 163, 101, 171, 105, ++ 227, 101, 15, 35, 35, 102, 61, 35, 99, 102, 64, 246, 17, 99, 163, 102, ++ 1, 35, 196, 248, 24, 49, 3, 35, 227, 102, 0, 35, 132, 248, 139, 48, ++ 32, 70, 112, 189, 127, 181, 10, 75, 10, 73, 0, 147, 0, 35, 1, 147, 2, ++ 147, 3, 147, 4, 147, 5, 147, 7, 74, 3, 104, 249, 247, 112, 254, 0, 40, ++ 20, 191, 79, 240, 255, 48, 0, 32, 7, 176, 0, 189, 0, 191, 115, 246, ++ 2, 0, 240, 62, 4, 0, 0, 65, 4, 0, 1, 73, 2, 104, 249, 247, 3, 190, 0, ++ 65, 4, 0, 0, 35, 240, 181, 28, 70, 7, 224, 206, 24, 53, 104, 199, 24, ++ 197, 80, 117, 104, 1, 52, 125, 96, 8, 51, 148, 66, 245, 209, 240, 189, ++ 0, 0, 56, 181, 208, 248, 228, 64, 0, 35, 196, 248, 36, 54, 144, 248, ++ 17, 84, 9, 75, 10, 74, 79, 244, 128, 96, 0, 45, 12, 191, 21, 70, 29, ++ 70, 181, 247, 248, 250, 196, 248, 36, 6, 32, 177, 41, 70, 128, 34, 255, ++ 247, 215, 255, 1, 32, 56, 189, 0, 191, 65, 174, 5, 0, 65, 178, 5, 0, ++ 56, 181, 14, 73, 79, 240, 255, 50, 208, 248, 228, 64, 5, 70, 215, 247, ++ 27, 253, 11, 73, 196, 248, 80, 5, 23, 34, 40, 70, 215, 247, 20, 253, ++ 0, 35, 196, 248, 84, 5, 132, 248, 88, 53, 40, 70, 5, 73, 111, 240, 37, ++ 2, 215, 247, 9, 253, 164, 248, 72, 5, 56, 189, 26, 161, 5, 0, 49, 169, ++ 5, 0, 26, 169, 5, 0, 248, 181, 168, 73, 0, 34, 208, 248, 228, 80, 4, ++ 70, 215, 247, 28, 253, 164, 73, 133, 248, 188, 4, 1, 34, 32, 70, 215, ++ 247, 21, 253, 162, 73, 133, 248, 189, 4, 0, 34, 7, 35, 32, 70, 215, ++ 247, 249, 252, 146, 35, 133, 248, 190, 4, 156, 73, 1, 34, 32, 70, 215, ++ 247, 241, 252, 155, 73, 133, 248, 191, 4, 0, 34, 32, 70, 215, 247, 218, ++ 252, 152, 73, 197, 248, 196, 4, 0, 34, 32, 70, 215, 247, 211, 252, 0, ++ 38, 165, 248, 88, 4, 148, 73, 133, 248, 51, 100, 32, 70, 50, 70, 215, ++ 247, 201, 252, 146, 73, 165, 248, 10, 4, 32, 70, 215, 247, 208, 252, ++ 184, 177, 1, 35, 133, 248, 51, 52, 47, 70, 66, 35, 50, 70, 32, 70, 139, ++ 73, 215, 247, 200, 252, 171, 25, 192, 178, 131, 248, 38, 4, 181, 248, ++ 10, 52, 1, 54, 192, 24, 167, 248, 12, 4, 2, 55, 13, 46, 236, 209, 13, ++ 224, 131, 73, 66, 34, 32, 70, 215, 247, 165, 252, 194, 178, 133, 248, ++ 8, 36, 32, 70, 128, 73, 215, 247, 158, 252, 165, 248, 6, 4, 126, 73, ++ 0, 34, 32, 70, 215, 247, 151, 252, 125, 73, 133, 248, 56, 4, 79, 240, ++ 255, 50, 32, 70, 215, 247, 143, 252, 122, 73, 165, 248, 104, 5, 79, ++ 240, 255, 50, 32, 70, 215, 247, 135, 252, 119, 73, 165, 248, 106, 5, ++ 79, 240, 255, 50, 32, 70, 215, 247, 127, 252, 116, 73, 165, 248, 110, ++ 5, 79, 240, 255, 50, 32, 70, 215, 247, 119, 252, 113, 73, 133, 248, ++ 112, 5, 0, 34, 32, 70, 215, 247, 112, 252, 0, 38, 132, 248, 24, 1, 50, ++ 70, 32, 70, 108, 73, 215, 247, 140, 252, 171, 25, 1, 54, 14, 46, 131, ++ 248, 6, 6, 244, 209, 161, 34, 104, 73, 32, 70, 215, 247, 93, 252, 103, ++ 73, 197, 248, 192, 5, 70, 242, 15, 98, 32, 70, 215, 247, 85, 252, 8, ++ 34, 197, 248, 196, 5, 98, 73, 32, 70, 215, 247, 78, 252, 97, 73, 197, ++ 248, 200, 5, 111, 240, 8, 2, 32, 70, 215, 247, 70, 252, 94, 73, 197, ++ 248, 204, 5, 64, 246, 187, 114, 32, 70, 215, 247, 62, 252, 10, 34, 197, ++ 248, 208, 5, 90, 73, 32, 70, 215, 247, 55, 252, 89, 73, 197, 248, 212, ++ 5, 111, 240, 68, 2, 32, 70, 215, 247, 47, 252, 86, 73, 165, 248, 2, ++ 6, 111, 240, 74, 2, 32, 70, 215, 247, 39, 252, 1, 34, 165, 248, 4, 6, ++ 81, 73, 32, 70, 215, 247, 32, 252, 128, 178, 3, 28, 24, 191, 1, 35, ++ 0, 240, 2, 0, 133, 248, 74, 53, 63, 34, 133, 248, 75, 5, 75, 73, 32, ++ 70, 215, 247, 17, 252, 100, 34, 133, 248, 76, 5, 72, 73, 32, 70, 215, ++ 247, 10, 252, 71, 73, 197, 248, 92, 5, 79, 240, 255, 50, 32, 70, 215, ++ 247, 2, 252, 197, 248, 96, 5, 1, 48, 24, 191, 1, 32, 133, 248, 100, ++ 5, 65, 73, 0, 34, 32, 70, 215, 247, 246, 251, 192, 178, 0, 240, 15, ++ 3, 0, 9, 0, 240, 1, 0, 133, 248, 20, 54, 133, 248, 23, 6, 58, 73, 0, ++ 34, 38, 35, 32, 70, 215, 247, 246, 251, 55, 73, 165, 248, 24, 6, 1, ++ 34, 66, 35, 32, 70, 215, 247, 238, 251, 80, 35, 165, 248, 26, 6, 50, ++ 73, 2, 34, 32, 70, 215, 247, 230, 251, 48, 73, 165, 248, 28, 6, 6, 34, ++ 32, 70, 215, 247, 207, 251, 0, 34, 133, 248, 30, 6, 44, 73, 32, 70, ++ 215, 247, 200, 251, 133, 248, 40, 6, 32, 70, 221, 247, 73, 250, 148, ++ 248, 17, 36, 32, 70, 0, 42, 79, 209, 38, 73, 215, 247, 223, 251, 37, ++ 73, 164, 248, 38, 4, 1, 34, 32, 70, 215, 247, 216, 251, 33, 73, 164, ++ 248, 34, 4, 32, 70, 79, 224, 0, 191, 227, 173, 5, 0, 87, 169, 5, 0, ++ 232, 169, 5, 0, 181, 169, 5, 0, 99, 169, 5, 0, 213, 169, 5, 0, 166, ++ 173, 5, 0, 215, 173, 5, 0, 5, 161, 5, 0, 69, 161, 5, 0, 245, 173, 5, ++ 0, 69, 169, 5, 0, 7, 169, 5, 0, 175, 173, 5, 0, 39, 174, 5, 0, 16, 169, ++ 5, 0, 172, 169, 5, 0, 189, 173, 5, 0, 205, 173, 5, 0, 17, 161, 5, 0, ++ 58, 174, 5, 0, 5, 174, 5, 0, 200, 169, 5, 0, 202, 168, 5, 0, 136, 169, ++ 5, 0, 229, 168, 5, 0, 211, 168, 5, 0, 58, 161, 5, 0, 225, 169, 5, 0, ++ 193, 168, 5, 0, 147, 169, 5, 0, 32, 174, 5, 0, 37, 73, 0, 34, 215, 247, ++ 142, 251, 35, 73, 164, 248, 38, 4, 1, 34, 32, 70, 215, 247, 135, 251, ++ 32, 73, 164, 248, 34, 4, 32, 70, 2, 34, 215, 247, 128, 251, 0, 35, 164, ++ 248, 36, 4, 28, 73, 133, 248, 51, 54, 32, 70, 2, 34, 215, 247, 98, 251, ++ 16, 177, 1, 35, 133, 248, 51, 54, 149, 248, 51, 54, 43, 179, 21, 73, ++ 0, 34, 32, 70, 215, 247, 106, 251, 18, 73, 164, 248, 208, 10, 1, 34, ++ 32, 70, 215, 247, 99, 251, 15, 73, 164, 248, 204, 10, 2, 34, 32, 70, ++ 215, 247, 92, 251, 12, 73, 164, 248, 206, 10, 0, 34, 32, 70, 215, 247, ++ 49, 251, 10, 73, 133, 248, 49, 6, 40, 34, 32, 70, 215, 247, 42, 251, ++ 0, 35, 133, 248, 50, 6, 132, 248, 11, 52, 1, 32, 248, 189, 0, 191, 245, ++ 168, 5, 0, 154, 173, 5, 0, 53, 161, 5, 0, 53, 174, 5, 0, 56, 181, 14, ++ 73, 208, 248, 228, 64, 5, 70, 215, 247, 32, 251, 12, 73, 132, 248, 41, ++ 6, 40, 70, 215, 247, 26, 251, 255, 34, 132, 248, 42, 6, 8, 73, 40, 70, ++ 215, 247, 6, 251, 7, 73, 132, 248, 48, 6, 40, 70, 215, 247, 13, 251, ++ 196, 248, 44, 6, 1, 32, 56, 189, 191, 169, 5, 0, 113, 169, 5, 0, 40, ++ 161, 5, 0, 156, 169, 5, 0, 56, 181, 4, 70, 208, 248, 228, 80, 79, 244, ++ 103, 112, 181, 247, 178, 248, 197, 248, 32, 6, 212, 248, 228, 48, 211, ++ 248, 32, 6, 176, 177, 212, 248, 128, 49, 11, 74, 147, 66, 7, 208, 10, ++ 74, 147, 66, 6, 208, 10, 74, 147, 66, 10, 209, 9, 73, 2, 224, 9, 73, ++ 0, 224, 9, 73, 79, 244, 103, 114, 172, 247, 253, 248, 1, 32, 56, 189, ++ 0, 32, 56, 189, 0, 191, 192, 173, 58, 2, 128, 186, 140, 1, 0, 248, 36, ++ 1, 254, 169, 5, 0, 114, 161, 5, 0, 24, 165, 5, 0, 16, 181, 4, 70, 221, ++ 247, 166, 249, 212, 248, 228, 48, 211, 248, 32, 6, 181, 247, 127, 248, ++ 212, 248, 228, 0, 189, 232, 16, 64, 181, 247, 121, 184, 112, 181, 4, ++ 70, 64, 246, 4, 64, 181, 247, 112, 248, 5, 70, 196, 248, 228, 0, 0, ++ 40, 115, 208, 0, 33, 64, 246, 4, 66, 173, 243, 76, 244, 1, 37, 163, ++ 107, 132, 248, 38, 81, 132, 248, 148, 81, 216, 104, 184, 243, 77, 241, ++ 52, 75, 196, 248, 128, 1, 227, 99, 51, 75, 32, 70, 35, 100, 50, 75, ++ 99, 100, 50, 75, 163, 100, 50, 75, 196, 248, 148, 48, 50, 75, 35, 101, ++ 50, 75, 163, 101, 50, 75, 35, 102, 50, 75, 99, 102, 50, 75, 35, 103, ++ 50, 75, 196, 248, 168, 48, 49, 75, 196, 248, 164, 48, 49, 75, 196, 248, ++ 180, 48, 48, 75, 196, 248, 176, 48, 48, 75, 196, 248, 184, 48, 47, 75, ++ 196, 248, 188, 48, 47, 75, 196, 248, 192, 48, 46, 75, 196, 248, 136, ++ 48, 46, 75, 196, 248, 196, 48, 45, 75, 196, 248, 200, 48, 45, 75, 196, ++ 248, 204, 48, 44, 75, 196, 248, 208, 48, 44, 75, 196, 248, 212, 48, ++ 255, 247, 86, 253, 16, 179, 32, 70, 255, 247, 94, 255, 240, 177, 32, ++ 70, 255, 247, 10, 253, 208, 177, 32, 70, 255, 247, 38, 253, 212, 248, ++ 228, 48, 32, 70, 131, 248, 192, 84, 255, 247, 41, 255, 33, 73, 0, 34, ++ 32, 70, 212, 248, 228, 96, 215, 247, 60, 250, 30, 73, 134, 248, 0, 12, ++ 0, 34, 32, 70, 215, 247, 53, 250, 132, 248, 52, 3, 0, 224, 5, 70, 40, ++ 70, 112, 189, 0, 191, 57, 117, 3, 0, 187, 246, 2, 0, 43, 116, 3, 0, ++ 221, 48, 3, 0, 127, 47, 3, 0, 221, 35, 3, 0, 143, 39, 3, 0, 71, 31, ++ 3, 0, 183, 39, 3, 0, 189, 246, 2, 0, 231, 113, 3, 0, 223, 246, 2, 0, ++ 225, 246, 2, 0, 227, 246, 2, 0, 15, 36, 3, 0, 153, 30, 3, 0, 161, 112, ++ 3, 0, 61, 98, 5, 0, 229, 246, 2, 0, 235, 246, 2, 0, 237, 246, 2, 0, ++ 241, 246, 2, 0, 233, 246, 2, 0, 98, 161, 5, 0, 84, 161, 5, 0, 131, 107, ++ 147, 248, 44, 33, 10, 177, 4, 34, 0, 224, 3, 34, 26, 103, 218, 102, ++ 112, 71, 248, 181, 7, 70, 12, 32, 13, 70, 22, 70, 180, 247, 177, 255, ++ 4, 70, 48, 177, 0, 33, 12, 34, 173, 243, 145, 243, 39, 96, 102, 96, ++ 165, 96, 32, 70, 248, 189, 8, 177, 180, 247, 166, 191, 112, 71, 128, ++ 104, 195, 243, 97, 176, 0, 0, 112, 181, 6, 70, 134, 176, 108, 32, 180, ++ 247, 152, 255, 4, 70, 216, 177, 0, 33, 108, 34, 173, 243, 120, 243, ++ 22, 35, 163, 97, 14, 75, 38, 96, 0, 147, 14, 75, 0, 37, 4, 147, 48, ++ 104, 13, 73, 13, 74, 35, 70, 1, 149, 2, 149, 3, 149, 5, 149, 249, 247, ++ 194, 250, 56, 185, 50, 104, 1, 35, 130, 248, 146, 48, 35, 113, 32, 70, ++ 6, 176, 112, 189, 32, 70, 180, 247, 119, 255, 44, 70, 247, 231, 97, ++ 54, 134, 0, 132, 81, 4, 0, 36, 238, 135, 0, 96, 81, 4, 0, 16, 181, 4, ++ 70, 104, 177, 3, 104, 6, 73, 24, 104, 34, 70, 249, 247, 72, 250, 32, ++ 70, 13, 240, 44, 220, 32, 70, 189, 232, 16, 64, 180, 247, 92, 191, 16, ++ 189, 96, 81, 4, 0, 16, 181, 4, 70, 72, 177, 5, 73, 34, 70, 64, 104, ++ 249, 247, 53, 250, 32, 70, 189, 232, 16, 64, 180, 247, 76, 191, 16, ++ 189, 206, 204, 136, 0, 112, 181, 6, 70, 134, 176, 16, 32, 180, 247, ++ 64, 255, 4, 70, 48, 179, 0, 33, 16, 34, 173, 243, 32, 243, 51, 104, ++ 38, 96, 99, 96, 115, 104, 0, 37, 163, 96, 4, 33, 48, 70, 14, 74, 15, ++ 75, 0, 149, 1, 148, 252, 247, 72, 253, 168, 66, 224, 96, 13, 219, 12, ++ 75, 48, 104, 141, 232, 40, 0, 11, 73, 11, 74, 35, 70, 2, 149, 3, 149, ++ 4, 149, 5, 149, 249, 247, 94, 250, 24, 177, 32, 70, 255, 247, 194, 255, ++ 0, 36, 32, 70, 6, 176, 112, 189, 157, 64, 134, 0, 133, 64, 134, 0, 241, ++ 64, 134, 0, 228, 238, 135, 0, 206, 204, 136, 0, 48, 181, 5, 70, 135, ++ 176, 20, 32, 180, 247, 4, 255, 4, 70, 56, 179, 0, 33, 20, 34, 173, 243, ++ 228, 242, 107, 104, 40, 104, 163, 96, 18, 75, 37, 96, 96, 96, 0, 37, ++ 0, 147, 16, 73, 17, 74, 35, 70, 1, 149, 2, 149, 3, 149, 4, 149, 5, 149, ++ 249, 247, 46, 250, 96, 185, 10, 35, 35, 115, 15, 35, 99, 115, 100, 35, ++ 163, 115, 2, 35, 227, 115, 6, 35, 35, 116, 1, 35, 99, 116, 3, 224, 32, ++ 70, 180, 247, 222, 254, 44, 70, 32, 70, 7, 176, 48, 189, 0, 191, 225, ++ 70, 134, 0, 252, 238, 135, 0, 47, 190, 136, 0, 16, 181, 4, 70, 72, 177, ++ 5, 73, 34, 70, 64, 104, 249, 247, 175, 249, 32, 70, 189, 232, 16, 64, ++ 180, 247, 198, 190, 16, 189, 47, 190, 136, 0, 16, 181, 4, 70, 88, 177, ++ 6, 75, 33, 70, 27, 136, 195, 88, 24, 104, 249, 247, 188, 250, 32, 70, ++ 189, 232, 16, 64, 180, 247, 180, 190, 16, 189, 16, 7, 0, 0, 115, 181, ++ 5, 70, 12, 32, 178, 243, 155, 240, 4, 70, 200, 177, 16, 75, 4, 34, 26, ++ 128, 2, 33, 69, 96, 0, 35, 1, 144, 13, 74, 40, 70, 0, 147, 252, 247, ++ 183, 252, 0, 40, 32, 96, 10, 219, 1, 35, 35, 129, 9, 75, 40, 104, 0, ++ 147, 33, 70, 8, 74, 2, 35, 249, 247, 35, 250, 24, 177, 32, 70, 255, ++ 247, 202, 255, 0, 36, 32, 70, 124, 189, 0, 191, 16, 7, 0, 0, 147, 133, ++ 3, 0, 44, 239, 135, 0, 17, 72, 134, 0, 56, 181, 4, 70, 128, 177, 9, ++ 75, 33, 70, 27, 136, 197, 88, 40, 104, 249, 247, 122, 250, 40, 104, ++ 6, 73, 34, 70, 249, 247, 86, 249, 32, 70, 189, 232, 56, 64, 180, 247, ++ 109, 190, 56, 189, 0, 191, 18, 7, 0, 0, 239, 81, 4, 0, 240, 181, 5, ++ 70, 135, 176, 20, 32, 178, 243, 80, 240, 4, 70, 0, 40, 86, 208, 47, ++ 75, 4, 34, 26, 128, 69, 96, 0, 38, 1, 144, 4, 33, 40, 70, 44, 74, 44, ++ 75, 0, 150, 252, 247, 106, 252, 176, 66, 32, 96, 70, 219, 1, 35, 163, ++ 129, 12, 35, 35, 130, 40, 75, 7, 34, 226, 129, 0, 147, 39, 75, 40, 104, ++ 1, 147, 38, 73, 39, 74, 35, 70, 2, 150, 3, 150, 4, 150, 5, 150, 249, ++ 247, 121, 249, 0, 40, 48, 209, 35, 75, 40, 104, 0, 147, 33, 70, 34, ++ 74, 5, 35, 249, 247, 194, 249, 56, 187, 32, 75, 213, 248, 124, 6, 141, ++ 232, 24, 0, 79, 244, 144, 113, 42, 34, 29, 75, 253, 247, 107, 252, 216, ++ 185, 213, 248, 124, 6, 128, 33, 42, 34, 26, 75, 0, 148, 253, 247, 14, ++ 253, 144, 185, 181, 248, 174, 1, 188, 247, 247, 250, 128, 27, 24, 191, ++ 1, 32, 10, 48, 85, 248, 32, 48, 27, 104, 2, 43, 9, 209, 1, 33, 32, 70, ++ 10, 70, 14, 240, 109, 220, 3, 224, 32, 70, 255, 247, 131, 255, 0, 36, ++ 32, 70, 7, 176, 240, 189, 0, 191, 18, 7, 0, 0, 197, 75, 134, 0, 177, ++ 75, 134, 0, 69, 78, 134, 0, 93, 78, 134, 0, 100, 239, 135, 0, 239, 81, ++ 4, 0, 60, 239, 135, 0, 113, 77, 134, 0, 97, 79, 134, 0, 81, 76, 134, ++ 0, 97, 75, 134, 0, 8, 75, 16, 181, 27, 136, 4, 70, 80, 177, 195, 88, ++ 6, 73, 24, 104, 34, 70, 249, 247, 192, 248, 32, 70, 189, 232, 16, 64, ++ 180, 247, 215, 189, 16, 189, 0, 191, 20, 7, 0, 0, 246, 81, 4, 0, 112, ++ 181, 5, 70, 134, 176, 20, 32, 177, 243, 186, 247, 4, 70, 0, 40, 68, ++ 208, 38, 75, 8, 34, 26, 128, 0, 35, 133, 96, 4, 33, 0, 147, 1, 144, ++ 35, 74, 40, 70, 35, 75, 252, 247, 212, 251, 0, 40, 32, 96, 52, 219, ++ 2, 35, 163, 129, 5, 34, 12, 35, 226, 129, 35, 130, 213, 248, 124, 6, ++ 128, 33, 61, 34, 28, 75, 0, 148, 253, 247, 157, 252, 40, 187, 26, 75, ++ 2, 144, 0, 147, 26, 75, 3, 144, 1, 147, 4, 144, 5, 144, 24, 73, 40, ++ 104, 24, 74, 35, 70, 249, 247, 218, 248, 176, 185, 181, 248, 174, 1, ++ 188, 247, 119, 250, 43, 104, 147, 248, 79, 32, 26, 177, 3, 42, 20, 191, ++ 3, 34, 1, 34, 32, 70, 1, 33, 15, 240, 37, 217, 32, 70, 2, 33, 79, 240, ++ 255, 50, 15, 240, 31, 217, 3, 224, 32, 70, 255, 247, 153, 255, 0, 36, ++ 32, 70, 6, 176, 112, 189, 0, 191, 20, 7, 0, 0, 153, 84, 134, 0, 133, ++ 84, 134, 0, 81, 84, 134, 0, 1, 86, 134, 0, 105, 87, 134, 0, 112, 239, ++ 135, 0, 246, 81, 4, 0, 56, 181, 4, 70, 152, 177, 5, 104, 34, 70, 40, ++ 70, 8, 73, 252, 247, 158, 251, 33, 70, 40, 104, 249, 247, 97, 249, 40, ++ 104, 5, 73, 34, 70, 249, 247, 61, 248, 32, 70, 189, 232, 56, 64, 180, ++ 247, 84, 189, 56, 189, 161, 96, 134, 0, 237, 190, 136, 0, 48, 181, 5, ++ 70, 135, 176, 8, 32, 177, 243, 56, 247, 4, 70, 0, 40, 62, 208, 0, 35, ++ 5, 96, 4, 33, 0, 147, 1, 144, 32, 74, 40, 70, 32, 75, 252, 247, 85, ++ 251, 0, 40, 96, 96, 49, 219, 40, 70, 30, 73, 34, 70, 252, 247, 107, ++ 251, 88, 187, 28, 75, 1, 144, 0, 147, 2, 144, 3, 144, 4, 144, 5, 144, ++ 26, 73, 40, 104, 26, 74, 35, 70, 249, 247, 101, 248, 232, 185, 24, 75, ++ 40, 104, 0, 147, 33, 70, 23, 74, 1, 35, 249, 247, 175, 248, 160, 185, ++ 22, 75, 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, 144, 113, 40, 34, ++ 19, 75, 253, 247, 88, 251, 64, 185, 213, 248, 124, 6, 128, 33, 40, 34, ++ 16, 75, 0, 148, 253, 247, 251, 251, 24, 177, 32, 70, 255, 247, 153, ++ 255, 0, 36, 32, 70, 7, 176, 48, 189, 0, 191, 37, 96, 134, 0, 229, 95, ++ 134, 0, 161, 96, 134, 0, 69, 97, 134, 0, 204, 239, 135, 0, 237, 190, ++ 136, 0, 196, 239, 135, 0, 25, 97, 134, 0, 241, 133, 3, 0, 189, 133, ++ 3, 0, 201, 95, 134, 0, 112, 181, 6, 70, 134, 176, 156, 32, 177, 243, ++ 210, 246, 4, 70, 0, 40, 52, 208, 6, 96, 27, 75, 48, 104, 0, 37, 96, ++ 96, 26, 73, 0, 147, 26, 74, 35, 70, 1, 149, 2, 149, 3, 149, 4, 149, ++ 5, 149, 249, 247, 15, 248, 248, 185, 214, 248, 116, 52, 30, 34, 155, ++ 120, 34, 97, 4, 34, 226, 114, 2, 34, 35, 119, 34, 115, 1, 35, 10, 34, ++ 227, 118, 35, 114, 99, 97, 98, 115, 163, 118, 79, 246, 175, 114, 163, ++ 119, 132, 248, 153, 48, 16, 35, 160, 115, 96, 114, 160, 114, 34, 131, ++ 132, 248, 154, 48, 132, 248, 152, 48, 3, 224, 32, 70, 180, 247, 172, ++ 252, 44, 70, 32, 70, 6, 176, 112, 189, 0, 191, 1, 143, 3, 0, 168, 82, ++ 4, 0, 65, 182, 5, 0, 192, 248, 132, 16, 192, 248, 136, 32, 192, 248, ++ 140, 48, 112, 71, 0, 0, 16, 181, 4, 70, 72, 177, 5, 73, 34, 70, 64, ++ 104, 248, 247, 117, 255, 32, 70, 189, 232, 16, 64, 180, 247, 140, 188, ++ 16, 189, 65, 182, 5, 0, 56, 181, 4, 70, 216, 177, 80, 248, 20, 91, 174, ++ 247, 69, 253, 4, 241, 24, 0, 174, 247, 65, 253, 4, 241, 16, 0, 177, ++ 247, 70, 252, 4, 241, 36, 0, 174, 247, 217, 251, 34, 70, 5, 73, 40, ++ 104, 248, 247, 85, 255, 32, 70, 180, 247, 110, 252, 43, 104, 0, 34, ++ 131, 248, 102, 33, 56, 189, 160, 88, 4, 0, 45, 233, 240, 65, 6, 70, ++ 134, 176, 40, 32, 177, 243, 79, 246, 4, 70, 0, 40, 97, 208, 6, 96, 0, ++ 37, 1, 144, 4, 33, 48, 70, 50, 74, 50, 75, 0, 149, 252, 247, 108, 250, ++ 168, 66, 96, 96, 84, 219, 4, 33, 48, 70, 47, 74, 47, 75, 0, 149, 1, ++ 148, 0, 240, 123, 249, 168, 66, 160, 96, 73, 219, 1, 39, 231, 96, 56, ++ 70, 43, 73, 43, 74, 115, 104, 176, 247, 62, 254, 32, 97, 0, 40, 62, ++ 208, 6, 33, 42, 70, 214, 248, 4, 128, 177, 247, 19, 248, 37, 73, 3, ++ 70, 66, 70, 34, 72, 174, 247, 124, 251, 96, 98, 0, 40, 47, 208, 7, 33, ++ 42, 70, 32, 105, 177, 247, 5, 248, 57, 70, 3, 70, 224, 97, 42, 70, 96, ++ 106, 174, 247, 143, 251, 57, 70, 2, 70, 160, 97, 32, 105, 176, 247, ++ 248, 255, 227, 105, 57, 70, 42, 70, 96, 106, 174, 247, 131, 251, 2, ++ 33, 2, 70, 96, 97, 32, 105, 176, 247, 236, 255, 18, 75, 48, 104, 141, ++ 232, 40, 0, 17, 73, 18, 74, 35, 70, 2, 149, 3, 149, 4, 149, 5, 149, ++ 248, 247, 63, 255, 24, 185, 51, 104, 131, 248, 102, 113, 3, 224, 32, ++ 70, 255, 247, 111, 255, 0, 36, 32, 70, 6, 176, 189, 232, 240, 129, 209, ++ 191, 3, 0, 199, 190, 3, 0, 249, 190, 3, 0, 81, 190, 3, 0, 215, 183, ++ 3, 0, 129, 183, 3, 0, 53, 189, 3, 0, 60, 88, 4, 0, 160, 88, 4, 0, 45, ++ 233, 240, 67, 7, 70, 135, 176, 79, 244, 65, 112, 14, 70, 21, 70, 152, ++ 70, 180, 247, 211, 251, 4, 70, 0, 40, 122, 208, 0, 33, 79, 244, 65, ++ 114, 172, 243, 177, 247, 40, 32, 180, 247, 200, 251, 129, 70, 32, 96, ++ 32, 185, 32, 70, 180, 247, 197, 251, 72, 70, 106, 224, 0, 33, 40, 34, ++ 172, 243, 162, 247, 35, 104, 79, 244, 65, 114, 28, 96, 98, 97, 229, ++ 96, 79, 240, 255, 50, 0, 37, 162, 97, 167, 96, 196, 248, 4, 128, 157, ++ 113, 20, 35, 164, 248, 8, 50, 40, 35, 164, 248, 6, 50, 45, 35, 164, ++ 248, 4, 50, 110, 35, 164, 248, 10, 50, 2, 35, 132, 248, 12, 50, 100, ++ 35, 164, 248, 56, 50, 132, 248, 13, 82, 48, 70, 35, 73, 34, 70, 43, ++ 70, 194, 243, 100, 244, 196, 248, 248, 1, 64, 179, 4, 245, 20, 115, ++ 196, 248, 24, 50, 196, 248, 20, 50, 29, 75, 5, 38, 196, 248, 28, 98, ++ 0, 147, 27, 75, 2, 149, 1, 147, 27, 75, 27, 73, 3, 147, 27, 75, 28, ++ 74, 4, 147, 28, 75, 5, 147, 56, 104, 35, 70, 248, 247, 185, 254, 3, ++ 70, 96, 185, 0, 144, 56, 104, 33, 104, 23, 74, 248, 247, 4, 255, 40, ++ 185, 132, 248, 64, 98, 132, 248, 65, 98, 32, 104, 18, 224, 212, 248, ++ 248, 17, 25, 177, 163, 104, 152, 104, 194, 243, 35, 244, 32, 105, 8, ++ 177, 0, 240, 67, 248, 32, 104, 8, 177, 180, 247, 92, 251, 32, 70, 180, ++ 247, 89, 251, 0, 32, 7, 176, 189, 232, 240, 131, 93, 206, 3, 0, 105, ++ 140, 134, 0, 169, 147, 134, 0, 45, 157, 134, 0, 148, 250, 135, 0, 24, ++ 89, 4, 0, 51, 197, 136, 0, 175, 203, 3, 0, 89, 158, 134, 0, 56, 181, ++ 5, 70, 240, 177, 4, 104, 228, 177, 212, 248, 248, 17, 49, 177, 163, ++ 104, 152, 104, 194, 243, 246, 243, 0, 35, 196, 248, 248, 49, 163, 104, ++ 34, 70, 24, 104, 8, 73, 248, 247, 18, 254, 163, 104, 33, 104, 24, 104, ++ 248, 247, 44, 255, 40, 70, 180, 247, 38, 251, 32, 70, 189, 232, 56, ++ 64, 180, 247, 33, 187, 56, 189, 0, 191, 51, 197, 136, 0, 16, 181, 4, ++ 70, 48, 177, 230, 247, 92, 250, 32, 70, 189, 232, 16, 64, 180, 247, ++ 19, 187, 16, 189, 0, 0, 247, 181, 6, 104, 5, 70, 243, 105, 31, 109, ++ 2, 55, 63, 1, 56, 70, 180, 247, 4, 251, 4, 70, 16, 179, 0, 33, 58, 70, ++ 172, 243, 228, 246, 132, 232, 96, 0, 16, 33, 0, 38, 40, 70, 14, 74, ++ 14, 75, 0, 150, 1, 148, 252, 247, 15, 249, 176, 66, 160, 97, 12, 219, ++ 4, 241, 32, 3, 99, 97, 79, 244, 55, 115, 227, 96, 213, 248, 32, 6, 4, ++ 241, 28, 1, 172, 243, 180, 240, 24, 177, 32, 70, 180, 247, 227, 250, ++ 52, 70, 32, 70, 254, 189, 0, 191, 137, 163, 134, 0, 137, 211, 3, 0, ++ 16, 181, 4, 70, 72, 177, 195, 105, 19, 177, 28, 48, 172, 243, 182, 240, ++ 32, 70, 189, 232, 16, 64, 180, 247, 206, 186, 16, 189, 240, 181, 208, ++ 248, 36, 65, 0, 104, 37, 105, 192, 105, 0, 109, 133, 66, 17, 210, 103, ++ 105, 46, 1, 184, 25, 1, 53, 37, 97, 67, 96, 5, 155, 186, 81, 131, 96, ++ 6, 155, 195, 96, 224, 104, 195, 28, 89, 24, 33, 240, 3, 1, 225, 96, ++ 240, 189, 79, 240, 255, 48, 240, 189, 55, 181, 5, 70, 24, 32, 180, 247, ++ 167, 250, 4, 70, 56, 179, 0, 33, 24, 34, 172, 243, 135, 246, 43, 104, ++ 37, 96, 99, 96, 107, 104, 40, 70, 163, 96, 255, 247, 143, 251, 224, ++ 96, 136, 177, 20, 240, 73, 219, 0, 35, 1, 70, 141, 232, 24, 0, 40, 70, ++ 10, 74, 11, 75, 255, 247, 194, 255, 0, 40, 32, 97, 3, 219, 13, 240, ++ 229, 219, 96, 97, 7, 224, 224, 104, 8, 177, 255, 247, 177, 251, 32, ++ 70, 180, 247, 129, 250, 0, 36, 32, 70, 62, 189, 0, 191, 225, 180, 134, ++ 0, 189, 180, 134, 0, 16, 181, 4, 70, 56, 177, 192, 104, 255, 247, 160, ++ 251, 32, 70, 189, 232, 16, 64, 180, 247, 110, 186, 16, 189, 115, 181, ++ 5, 70, 24, 32, 180, 247, 101, 250, 4, 70, 0, 40, 56, 208, 0, 33, 24, ++ 34, 172, 243, 68, 246, 12, 32, 180, 247, 91, 250, 6, 70, 0, 40, 45, ++ 208, 0, 33, 12, 34, 172, 243, 58, 246, 43, 104, 102, 97, 37, 96, 99, ++ 96, 40, 70, 255, 247, 103, 253, 160, 96, 184, 177, 230, 247, 55, 251, ++ 0, 35, 1, 70, 141, 232, 40, 0, 40, 70, 14, 74, 15, 75, 255, 247, 118, ++ 255, 0, 40, 224, 96, 9, 219, 228, 247, 171, 250, 12, 73, 32, 97, 12, ++ 74, 160, 104, 12, 75, 255, 247, 150, 253, 9, 224, 160, 104, 8, 177, ++ 255, 247, 153, 253, 32, 70, 180, 247, 47, 250, 0, 36, 0, 224, 4, 70, ++ 32, 70, 124, 189, 0, 191, 117, 213, 3, 0, 83, 213, 3, 0, 41, 213, 3, ++ 0, 53, 213, 3, 0, 65, 213, 3, 0, 16, 181, 4, 70, 80, 177, 128, 104, ++ 255, 247, 128, 253, 96, 105, 180, 247, 22, 250, 32, 70, 189, 232, 16, ++ 64, 180, 247, 17, 186, 16, 189, 0, 0, 112, 181, 67, 75, 134, 176, 0, ++ 147, 0, 35, 1, 147, 2, 147, 3, 147, 4, 147, 5, 147, 4, 70, 63, 73, 0, ++ 104, 63, 74, 35, 70, 248, 247, 61, 253, 5, 70, 0, 40, 111, 209, 212, ++ 248, 116, 52, 20, 33, 163, 248, 100, 16, 163, 106, 1, 38, 131, 248, ++ 76, 0, 227, 106, 32, 70, 131, 248, 76, 96, 161, 106, 231, 247, 237, ++ 253, 225, 106, 32, 70, 231, 247, 233, 253, 32, 70, 41, 70, 231, 247, ++ 130, 251, 163, 106, 131, 248, 77, 80, 227, 106, 131, 248, 77, 80, 35, ++ 106, 24, 105, 215, 247, 116, 253, 131, 7, 7, 213, 212, 248, 116, 52, ++ 79, 240, 255, 50, 94, 115, 212, 248, 116, 52, 218, 129, 35, 104, 212, ++ 248, 116, 84, 94, 105, 224, 247, 159, 255, 1, 70, 48, 70, 224, 247, ++ 111, 255, 232, 98, 0, 40, 54, 208, 212, 248, 116, 52, 31, 34, 131, 248, ++ 120, 32, 212, 248, 116, 4, 5, 34, 87, 48, 79, 240, 255, 49, 172, 243, ++ 152, 245, 35, 104, 212, 248, 116, 36, 179, 248, 204, 16, 211, 248, 220, ++ 0, 81, 133, 10, 33, 81, 99, 20, 73, 173, 243, 223, 243, 67, 30, 13, ++ 43, 212, 248, 116, 84, 35, 104, 152, 191, 104, 99, 16, 73, 211, 248, ++ 220, 0, 173, 243, 211, 243, 133, 248, 138, 0, 212, 248, 116, 52, 1, ++ 34, 131, 248, 81, 32, 212, 248, 116, 52, 0, 32, 26, 120, 131, 248, 78, ++ 32, 212, 248, 116, 52, 88, 103, 1, 224, 79, 240, 255, 48, 6, 176, 112, ++ 189, 175, 239, 3, 0, 32, 91, 4, 0, 73, 182, 5, 0, 92, 182, 5, 0, 77, ++ 182, 5, 0, 208, 248, 116, 52, 16, 181, 217, 106, 4, 70, 17, 177, 64, ++ 104, 224, 247, 44, 255, 32, 104, 2, 73, 34, 70, 189, 232, 16, 64, 248, ++ 247, 81, 188, 73, 182, 5, 0, 56, 181, 3, 104, 4, 70, 208, 248, 116, ++ 84, 39, 73, 211, 248, 220, 0, 173, 243, 152, 243, 40, 112, 35, 104, ++ 36, 73, 211, 248, 220, 0, 212, 248, 116, 84, 173, 243, 143, 243, 232, ++ 112, 212, 248, 116, 52, 26, 120, 1, 58, 210, 178, 253, 42, 1, 217, 1, ++ 34, 26, 112, 212, 248, 116, 52, 26, 120, 90, 112, 0, 35, 212, 248, 116, ++ 36, 209, 24, 18, 120, 1, 51, 5, 43, 129, 248, 82, 32, 246, 209, 212, ++ 248, 116, 84, 1, 33, 40, 70, 172, 243, 133, 247, 168, 112, 212, 248, ++ 116, 52, 218, 120, 1, 58, 210, 178, 253, 42, 1, 217, 1, 34, 218, 112, ++ 212, 248, 116, 52, 1, 33, 218, 120, 90, 113, 212, 248, 116, 84, 232, ++ 28, 172, 243, 113, 247, 40, 113, 212, 248, 116, 52, 32, 70, 26, 121, ++ 154, 113, 230, 247, 203, 255, 180, 248, 72, 20, 32, 70, 189, 232, 56, ++ 64, 231, 247, 84, 188, 105, 182, 5, 0, 113, 182, 5, 0, 16, 181, 4, 70, ++ 216, 177, 64, 104, 13, 73, 34, 70, 239, 243, 8, 245, 35, 106, 27, 177, ++ 4, 241, 32, 0, 171, 243, 232, 246, 35, 127, 35, 177, 96, 104, 8, 73, ++ 34, 70, 251, 247, 58, 255, 160, 104, 6, 73, 34, 70, 248, 247, 221, 251, ++ 32, 70, 189, 232, 16, 64, 180, 247, 244, 184, 16, 189, 233, 206, 134, ++ 0, 173, 204, 134, 0, 244, 92, 4, 0, 48, 181, 5, 70, 135, 176, 36, 32, ++ 180, 247, 228, 248, 4, 70, 0, 40, 62, 208, 0, 33, 36, 34, 172, 243, ++ 195, 244, 43, 104, 0, 34, 163, 96, 171, 104, 101, 96, 227, 96, 107, ++ 104, 4, 33, 35, 97, 8, 35, 163, 130, 40, 70, 25, 75, 141, 232, 20, 0, ++ 251, 247, 232, 254, 0, 40, 32, 96, 34, 219, 40, 70, 21, 73, 34, 70, ++ 251, 247, 254, 254, 224, 185, 1, 35, 35, 119, 40, 70, 18, 73, 34, 70, ++ 239, 243, 182, 244, 160, 185, 213, 248, 32, 6, 4, 241, 32, 1, 171, 243, ++ 133, 246, 104, 185, 13, 75, 1, 144, 0, 147, 2, 144, 3, 144, 4, 144, ++ 5, 144, 11, 73, 40, 104, 11, 74, 35, 70, 248, 247, 233, 251, 24, 177, ++ 32, 70, 255, 247, 147, 255, 0, 36, 32, 70, 7, 176, 48, 189, 0, 191, ++ 249, 204, 134, 0, 173, 204, 134, 0, 233, 206, 134, 0, 109, 205, 134, ++ 0, 92, 251, 135, 0, 244, 92, 4, 0, 208, 248, 188, 54, 24, 106, 171, ++ 243, 57, 182, 208, 248, 188, 54, 24, 106, 171, 243, 150, 182, 248, 181, ++ 208, 248, 116, 100, 4, 70, 13, 70, 209, 248, 220, 0, 180, 73, 173, 243, ++ 184, 242, 134, 248, 28, 1, 178, 73, 213, 248, 220, 0, 212, 248, 116, ++ 100, 173, 243, 175, 242, 134, 248, 232, 0, 213, 248, 220, 0, 174, 73, ++ 173, 243, 204, 242, 212, 248, 116, 100, 56, 177, 213, 248, 220, 0, 170, ++ 73, 173, 243, 160, 242, 134, 248, 88, 1, 2, 224, 255, 35, 134, 248, ++ 88, 49, 166, 73, 213, 248, 220, 0, 212, 248, 116, 100, 173, 243, 147, ++ 242, 164, 73, 198, 248, 32, 1, 213, 248, 220, 0, 212, 248, 116, 100, ++ 173, 243, 138, 242, 160, 73, 166, 248, 42, 1, 213, 248, 220, 0, 212, ++ 248, 116, 100, 173, 243, 129, 242, 157, 73, 166, 248, 44, 1, 213, 248, ++ 220, 0, 212, 248, 116, 100, 173, 243, 120, 242, 153, 73, 166, 248, 46, ++ 1, 213, 248, 220, 0, 212, 248, 116, 100, 173, 243, 111, 242, 134, 248, ++ 233, 0, 212, 248, 116, 52, 147, 248, 233, 32, 18, 185, 2, 34, 131, 248, ++ 233, 32, 213, 248, 220, 0, 144, 73, 212, 248, 116, 100, 173, 243, 94, ++ 242, 166, 248, 198, 0, 212, 248, 116, 100, 182, 249, 198, 48, 19, 185, ++ 1, 35, 166, 248, 198, 48, 213, 248, 220, 0, 136, 73, 173, 243, 79, 242, ++ 198, 248, 216, 0, 212, 248, 116, 100, 214, 248, 216, 48, 27, 185, 76, ++ 242, 80, 51, 198, 248, 216, 48, 150, 248, 233, 48, 1, 34, 154, 64, 214, ++ 248, 216, 16, 213, 248, 220, 0, 138, 66, 136, 191, 198, 248, 216, 32, ++ 2, 34, 18, 250, 3, 243, 123, 73, 198, 248, 220, 48, 173, 243, 48, 242, ++ 198, 248, 228, 0, 212, 248, 116, 100, 214, 248, 228, 48, 27, 185, 79, ++ 244, 150, 115, 198, 248, 228, 48, 213, 248, 220, 0, 115, 73, 173, 243, ++ 32, 242, 166, 248, 196, 0, 212, 248, 116, 100, 182, 249, 196, 48, 19, ++ 185, 25, 35, 166, 248, 196, 48, 109, 73, 213, 248, 220, 0, 173, 243, ++ 17, 242, 212, 248, 116, 52, 166, 248, 240, 0, 147, 248, 28, 33, 105, ++ 73, 131, 248, 29, 33, 212, 248, 116, 52, 147, 248, 29, 33, 131, 248, ++ 72, 33, 212, 248, 116, 52, 218, 121, 131, 248, 172, 32, 212, 248, 116, ++ 52, 26, 122, 131, 248, 69, 33, 212, 248, 116, 100, 79, 246, 162, 115, ++ 166, 248, 234, 48, 166, 248, 236, 48, 166, 248, 238, 48, 213, 248, 220, ++ 0, 173, 243, 234, 241, 166, 248, 242, 0, 212, 248, 116, 100, 182, 249, ++ 242, 48, 27, 185, 79, 246, 162, 115, 166, 248, 242, 48, 150, 248, 233, ++ 48, 1, 34, 18, 250, 3, 243, 214, 248, 216, 32, 80, 73, 147, 66, 136, ++ 191, 198, 248, 216, 48, 0, 35, 166, 248, 178, 48, 166, 248, 180, 48, ++ 166, 248, 182, 48, 198, 248, 184, 48, 198, 248, 188, 48, 198, 248, 192, ++ 48, 213, 248, 220, 0, 31, 70, 173, 243, 193, 241, 134, 248, 68, 1, 69, ++ 73, 213, 248, 220, 0, 212, 248, 116, 100, 173, 243, 184, 241, 134, 248, ++ 75, 1, 213, 248, 220, 0, 64, 73, 212, 248, 116, 100, 173, 243, 175, ++ 241, 212, 248, 116, 52, 198, 248, 36, 1, 131, 248, 41, 113, 212, 248, ++ 116, 52, 211, 248, 36, 33, 26, 185, 79, 244, 155, 114, 195, 248, 36, ++ 33, 147, 248, 29, 33, 2, 177, 3, 34, 195, 248, 76, 33, 195, 248, 80, ++ 33, 0, 34, 195, 248, 84, 33, 213, 248, 220, 0, 49, 73, 173, 243, 180, ++ 241, 64, 177, 213, 248, 220, 0, 46, 73, 212, 248, 116, 100, 173, 243, ++ 136, 241, 198, 248, 84, 1, 213, 248, 220, 0, 42, 73, 173, 243, 165, ++ 241, 64, 177, 213, 248, 220, 0, 39, 73, 212, 248, 116, 100, 173, 243, ++ 121, 241, 198, 248, 76, 1, 213, 248, 220, 0, 36, 73, 173, 243, 150, ++ 241, 64, 177, 213, 248, 220, 0, 33, 73, 212, 248, 116, 100, 173, 243, ++ 106, 241, 198, 248, 80, 1, 30, 73, 34, 70, 0, 35, 160, 104, 212, 248, ++ 116, 84, 193, 243, 246, 247, 27, 73, 197, 248, 48, 1, 34, 70, 160, 104, ++ 0, 35, 212, 248, 116, 84, 193, 243, 236, 247, 197, 248, 52, 1, 248, ++ 189, 0, 191, 4, 183, 5, 0, 122, 183, 5, 0, 74, 183, 5, 0, 45, 183, 5, ++ 0, 166, 182, 5, 0, 198, 182, 5, 0, 216, 182, 5, 0, 108, 183, 5, 0, 121, ++ 182, 5, 0, 61, 183, 5, 0, 247, 182, 5, 0, 153, 182, 5, 0, 151, 183, ++ 5, 0, 87, 183, 5, 0, 234, 182, 5, 0, 137, 182, 5, 0, 184, 182, 5, 0, ++ 133, 183, 5, 0, 13, 183, 5, 0, 29, 183, 5, 0, 5, 12, 4, 0, 183, 16, ++ 4, 0, 56, 181, 4, 70, 128, 177, 5, 104, 34, 70, 213, 248, 72, 1, 7, ++ 73, 253, 247, 115, 253, 40, 70, 6, 73, 34, 70, 251, 247, 28, 253, 32, ++ 70, 189, 232, 56, 64, 179, 247, 219, 190, 56, 189, 0, 191, 45, 249, ++ 134, 0, 193, 247, 134, 0, 55, 181, 5, 70, 8, 32, 177, 243, 191, 240, ++ 4, 70, 192, 177, 5, 96, 0, 34, 1, 144, 4, 33, 40, 70, 12, 75, 0, 146, ++ 251, 247, 222, 252, 0, 40, 96, 96, 12, 219, 40, 70, 9, 73, 34, 70, 251, ++ 247, 244, 252, 48, 185, 213, 248, 72, 1, 7, 73, 34, 70, 253, 247, 65, ++ 253, 24, 177, 32, 70, 255, 247, 195, 255, 0, 36, 32, 70, 62, 189, 105, ++ 248, 134, 0, 193, 247, 134, 0, 45, 249, 134, 0, 56, 181, 4, 70, 112, ++ 177, 5, 104, 33, 70, 40, 104, 248, 247, 164, 250, 40, 104, 5, 73, 34, ++ 70, 248, 247, 128, 249, 32, 70, 189, 232, 56, 64, 179, 247, 151, 190, ++ 56, 189, 0, 191, 250, 92, 4, 0, 48, 181, 5, 70, 135, 176, 12, 32, 177, ++ 243, 124, 240, 4, 70, 0, 40, 70, 208, 39, 75, 5, 96, 79, 244, 144, 113, ++ 0, 147, 1, 144, 32, 34, 213, 248, 124, 6, 35, 75, 252, 247, 197, 252, ++ 0, 40, 56, 209, 34, 75, 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, ++ 144, 113, 35, 34, 31, 75, 252, 247, 184, 252, 0, 40, 43, 209, 29, 75, ++ 213, 248, 124, 6, 141, 232, 24, 0, 64, 33, 136, 34, 27, 75, 252, 247, ++ 204, 252, 0, 187, 213, 248, 124, 6, 128, 33, 32, 34, 24, 75, 0, 148, ++ 252, 247, 79, 253, 184, 185, 22, 75, 2, 144, 0, 147, 22, 75, 3, 144, ++ 1, 147, 4, 144, 5, 144, 20, 73, 40, 104, 20, 74, 35, 70, 248, 247, 140, ++ 249, 64, 185, 19, 75, 40, 104, 0, 147, 33, 70, 18, 74, 1, 35, 248, 247, ++ 214, 249, 24, 177, 32, 70, 255, 247, 151, 255, 0, 36, 32, 70, 7, 176, ++ 48, 189, 0, 191, 97, 93, 135, 0, 165, 91, 135, 0, 149, 93, 135, 0, 201, ++ 91, 135, 0, 1, 93, 135, 0, 145, 91, 135, 0, 121, 91, 135, 0, 181, 18, ++ 4, 0, 253, 92, 135, 0, 16, 93, 4, 0, 250, 92, 4, 0, 248, 252, 135, 0, ++ 237, 91, 135, 0, 16, 181, 4, 70, 96, 177, 7, 75, 7, 73, 27, 136, 34, ++ 70, 195, 88, 24, 104, 248, 247, 250, 248, 32, 70, 189, 232, 16, 64, ++ 179, 247, 17, 190, 16, 189, 0, 191, 22, 7, 0, 0, 52, 93, 4, 0, 240, ++ 181, 7, 70, 135, 176, 20, 32, 176, 243, 244, 247, 5, 70, 32, 179, 21, ++ 75, 6, 70, 0, 36, 4, 34, 6, 248, 4, 75, 26, 128, 1, 35, 71, 96, 51, ++ 114, 244, 96, 116, 114, 4, 33, 1, 144, 15, 74, 56, 70, 15, 75, 0, 148, ++ 255, 247, 34, 251, 160, 66, 112, 96, 13, 219, 13, 75, 0, 148, 1, 147, ++ 2, 148, 3, 148, 4, 148, 5, 148, 56, 104, 33, 70, 9, 74, 43, 70, 248, ++ 247, 30, 249, 24, 177, 40, 70, 255, 247, 186, 255, 0, 37, 40, 70, 7, ++ 176, 240, 189, 22, 7, 0, 0, 169, 94, 135, 0, 137, 94, 135, 0, 249, 94, ++ 135, 0, 52, 93, 4, 0, 112, 181, 5, 70, 134, 176, 24, 32, 176, 243, 182, ++ 247, 4, 70, 0, 40, 90, 208, 43, 104, 0, 38, 1, 34, 67, 96, 5, 96, 8, ++ 33, 131, 248, 177, 32, 1, 144, 50, 70, 40, 70, 51, 70, 0, 150, 255, ++ 247, 232, 250, 176, 66, 32, 97, 75, 219, 16, 33, 40, 70, 39, 74, 39, ++ 75, 0, 150, 1, 148, 251, 247, 195, 251, 176, 66, 197, 248, 156, 1, 63, ++ 219, 4, 35, 227, 96, 35, 75, 160, 96, 5, 33, 141, 232, 24, 0, 213, 248, ++ 124, 6, 68, 34, 32, 75, 252, 247, 224, 251, 0, 40, 48, 209, 30, 75, ++ 213, 248, 124, 6, 141, 232, 24, 0, 79, 244, 144, 113, 68, 34, 27, 75, ++ 252, 247, 211, 251, 0, 40, 35, 209, 213, 248, 124, 6, 5, 33, 68, 34, ++ 24, 75, 0, 148, 252, 247, 185, 253, 208, 185, 213, 248, 124, 6, 192, ++ 33, 68, 34, 20, 75, 0, 148, 252, 247, 176, 253, 136, 185, 19, 75, 1, ++ 144, 0, 147, 18, 75, 3, 144, 2, 147, 4, 144, 5, 144, 17, 73, 40, 104, ++ 17, 74, 35, 70, 248, 247, 169, 248, 16, 185, 32, 70, 6, 176, 112, 189, ++ 32, 70, 179, 247, 99, 253, 0, 36, 247, 231, 41, 104, 135, 0, 13, 104, ++ 135, 0, 137, 103, 135, 0, 217, 102, 135, 0, 229, 103, 135, 0, 177, 103, ++ 135, 0, 253, 102, 135, 0, 241, 107, 135, 0, 121, 105, 135, 0, 129, 108, ++ 135, 0, 68, 253, 135, 0, 56, 93, 4, 0, 16, 181, 4, 70, 72, 177, 5, 73, ++ 34, 70, 64, 104, 248, 247, 37, 248, 32, 70, 189, 232, 16, 64, 179, 247, ++ 60, 189, 16, 189, 56, 93, 4, 0, 119, 108, 99, 95, 98, 109, 97, 99, 95, ++ 105, 110, 102, 111, 95, 105, 110, 105, 116, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 101, 97, ++ 100, 109, 97, 110, 95, 116, 111, 0, 114, 97, 109, 115, 116, 98, 121, ++ 100, 105, 115, 0, 100, 101, 97, 100, 109, 97, 110, 95, 116, 111, 0, ++ 115, 112, 105, 95, 112, 117, 95, 101, 110, 97, 98, 0, 83, 68, 73, 79, ++ 68, 69, 86, 0, 103, 115, 112, 105, 100, 119, 111, 114, 100, 0, 80, 67, ++ 77, 67, 73, 65, 68, 69, 86, 0, 115, 100, 95, 111, 111, 98, 111, 110, ++ 108, 121, 0, 115, 100, 95, 103, 112, 111, 117, 116, 0, 71, 83, 80, 73, ++ 32, 68, 119, 111, 114, 100, 32, 77, 111, 100, 101, 32, 101, 110, 97, ++ 98, 108, 101, 100, 10, 0, 115, 100, 95, 103, 112, 100, 99, 0, 115, 100, ++ 95, 103, 112, 118, 97, 108, 0, 37, 115, 58, 32, 66, 114, 111, 97, 100, ++ 99, 111, 109, 32, 83, 68, 80, 67, 77, 68, 32, 67, 68, 67, 32, 100, 114, ++ 105, 118, 101, 114, 10, 0, 115, 100, 112, 99, 109, 100, 99, 100, 99, ++ 37, 100, 0, 83, 68, 73, 79, 0, 10, 82, 84, 69, 32, 40, 37, 115, 45, ++ 37, 115, 37, 115, 37, 115, 41, 32, 37, 115, 32, 111, 110, 32, 66, 67, ++ 77, 37, 115, 32, 114, 37, 100, 32, 64, 32, 37, 100, 46, 37, 100, 47, ++ 37, 100, 46, 37, 100, 47, 37, 100, 46, 37, 100, 77, 72, 122, 10, 0, ++ 0, 67, 68, 67, 0, 110, 111, 99, 114, 99, 0, 110, 111, 116, 105, 102, ++ 95, 99, 0, 110, 111, 116, 105, 102, 95, 115, 0, 111, 102, 100, 109, ++ 50, 103, 112, 111, 61, 48, 120, 37, 120, 0, 112, 97, 37, 100, 103, 119, ++ 37, 100, 97, 37, 100, 61, 48, 120, 37, 120, 0, 112, 97, 49, 104, 105, ++ 98, 48, 61, 37, 100, 0, 112, 97, 49, 104, 105, 98, 49, 61, 37, 100, ++ 0, 112, 97, 49, 104, 105, 98, 50, 61, 37, 100, 0, 103, 97, 105, 110, ++ 99, 116, 114, 108, 115, 112, 104, 61, 37, 100, 0, 112, 97, 49, 109, ++ 97, 120, 112, 119, 114, 61, 37, 100, 0, 109, 101, 97, 115, 112, 111, ++ 119, 101, 114, 37, 100, 61, 48, 120, 37, 120, 0, 114, 120, 103, 97, ++ 105, 110, 115, 37, 100, 103, 37, 99, 116, 114, 101, 108, 110, 97, 98, ++ 121, 112, 97, 37, 100, 61, 37, 100, 0, 112, 97, 50, 103, 97, 37, 100, ++ 61, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 0, ++ 114, 115, 115, 105, 115, 109, 99, 53, 103, 61, 37, 100, 0, 117, 115, ++ 98, 102, 108, 97, 103, 115, 61, 48, 120, 37, 120, 0, 112, 97, 50, 103, ++ 99, 99, 107, 97, 37, 100, 61, 48, 120, 37, 120, 44, 48, 120, 37, 120, ++ 44, 48, 120, 37, 120, 0, 112, 100, 101, 116, 114, 97, 110, 103, 101, ++ 50, 103, 61, 48, 120, 37, 120, 0, 117, 115, 98, 51, 48, 117, 49, 117, ++ 50, 61, 48, 120, 37, 120, 0, 115, 117, 98, 118, 101, 110, 100, 105, ++ 100, 61, 48, 120, 37, 120, 0, 97, 103, 37, 100, 61, 48, 120, 37, 120, ++ 0, 111, 101, 109, 61, 37, 48, 50, 120, 37, 48, 50, 120, 37, 48, 50, ++ 120, 37, 48, 50, 120, 37, 48, 50, 120, 37, 48, 50, 120, 37, 48, 50, ++ 120, 37, 48, 50, 120, 0, 111, 102, 100, 109, 112, 111, 61, 48, 120, ++ 37, 120, 0, 116, 101, 109, 112, 111, 102, 102, 115, 101, 116, 61, 37, ++ 100, 0, 109, 101, 97, 115, 112, 111, 119, 101, 114, 61, 48, 120, 37, ++ 120, 0, 114, 115, 115, 105, 115, 109, 102, 50, 103, 61, 37, 100, 0, ++ 112, 97, 112, 97, 114, 97, 109, 98, 119, 118, 101, 114, 61, 37, 100, ++ 0, 100, 111, 116, 49, 49, 97, 103, 111, 102, 100, 109, 104, 114, 98, ++ 119, 50, 48, 50, 103, 112, 111, 61, 48, 120, 37, 120, 0, 105, 116, 116, ++ 50, 103, 97, 48, 61, 48, 120, 37, 120, 0, 98, 120, 97, 50, 103, 61, ++ 37, 100, 0, 114, 115, 115, 105, 115, 109, 99, 50, 103, 61, 37, 100, ++ 0, 112, 97, 53, 103, 98, 119, 52, 48, 97, 37, 100, 61, 48, 120, 37, ++ 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, ++ 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, ++ 120, 37, 120, 44, 48, 120, 37, 120, 0, 109, 99, 115, 98, 119, 50, 48, ++ 53, 103, 108, 112, 111, 61, 48, 120, 37, 120, 0, 0, 0, 109, 99, 115, ++ 98, 119, 50, 48, 117, 108, 53, 103, 108, 112, 111, 61, 48, 120, 37, ++ 120, 0, 109, 99, 115, 98, 119, 52, 48, 53, 103, 108, 112, 111, 61, 48, ++ 120, 37, 120, 0, 0, 0, 117, 115, 98, 117, 116, 109, 105, 95, 99, 116, ++ 108, 61, 48, 120, 37, 120, 0, 101, 120, 116, 112, 97, 103, 97, 105, ++ 110, 50, 103, 61, 48, 120, 37, 120, 0, 97, 110, 116, 115, 119, 99, 116, ++ 108, 50, 103, 61, 48, 120, 37, 120, 0, 112, 114, 111, 100, 117, 99, ++ 116, 110, 97, 109, 101, 61, 37, 115, 0, 116, 120, 95, 100, 117, 116, ++ 121, 95, 99, 121, 99, 108, 101, 95, 116, 104, 114, 101, 115, 104, 95, ++ 37, 100, 95, 53, 103, 61, 37, 100, 0, 114, 120, 103, 97, 105, 110, 101, ++ 114, 114, 50, 103, 97, 37, 100, 61, 48, 120, 37, 120, 0, 97, 103, 48, ++ 0, 109, 97, 120, 112, 50, 103, 97, 37, 100, 61, 48, 120, 37, 120, 0, ++ 98, 119, 100, 117, 112, 112, 111, 61, 48, 120, 37, 120, 0, 110, 111, ++ 105, 115, 101, 108, 118, 108, 53, 103, 97, 37, 100, 61, 37, 100, 44, ++ 37, 100, 44, 37, 100, 44, 37, 100, 0, 98, 119, 52, 48, 112, 111, 61, ++ 48, 120, 37, 120, 0, 112, 97, 53, 103, 98, 119, 56, 48, 97, 37, 100, ++ 61, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, ++ 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, ++ 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 0, 117, 115, 98, ++ 51, 48, 117, 49, 117, 50, 61, 48, 120, 37, 120, 0, 112, 100, 101, 116, ++ 114, 97, 110, 103, 101, 53, 103, 61, 48, 120, 37, 120, 0, 109, 97, 99, ++ 97, 100, 100, 114, 61, 37, 115, 0, 116, 101, 109, 112, 115, 95, 104, ++ 121, 115, 116, 101, 114, 101, 115, 105, 115, 61, 37, 100, 0, 109, 99, ++ 115, 37, 100, 103, 112, 111, 37, 100, 61, 48, 120, 37, 120, 0, 98, 111, ++ 97, 114, 100, 102, 108, 97, 103, 115, 50, 61, 48, 120, 37, 120, 0, 98, ++ 111, 97, 114, 100, 102, 108, 97, 103, 115, 51, 61, 48, 120, 37, 120, ++ 0, 108, 101, 100, 98, 104, 37, 100, 61, 48, 120, 37, 120, 0, 114, 120, ++ 103, 97, 105, 110, 115, 37, 100, 103, 37, 99, 116, 114, 105, 115, 111, ++ 97, 37, 100, 61, 37, 100, 0, 97, 97, 50, 103, 61, 48, 120, 37, 120, ++ 0, 112, 114, 111, 100, 105, 100, 61, 48, 120, 37, 120, 0, 116, 101, ++ 109, 112, 116, 104, 114, 101, 115, 104, 61, 37, 100, 0, 99, 104, 105, ++ 112, 114, 101, 118, 61, 37, 100, 0, 108, 101, 103, 111, 102, 100, 109, ++ 98, 119, 50, 48, 53, 103, 108, 112, 111, 61, 48, 120, 37, 120, 0, 0, ++ 0, 108, 101, 103, 111, 102, 100, 109, 98, 119, 50, 48, 117, 108, 53, ++ 103, 108, 112, 111, 61, 48, 120, 37, 120, 0, 108, 101, 103, 111, 102, ++ 100, 109, 98, 119, 50, 48, 53, 103, 109, 112, 111, 61, 48, 120, 37, ++ 120, 0, 0, 0, 108, 101, 103, 111, 102, 100, 109, 98, 119, 50, 48, 117, ++ 108, 53, 103, 109, 112, 111, 61, 48, 120, 37, 120, 0, 108, 101, 103, ++ 111, 102, 100, 109, 98, 119, 50, 48, 53, 103, 104, 112, 111, 61, 48, ++ 120, 37, 120, 0, 0, 0, 108, 101, 103, 111, 102, 100, 109, 98, 119, 50, ++ 48, 117, 108, 53, 103, 104, 112, 111, 61, 48, 120, 37, 120, 0, 117, ++ 115, 98, 102, 115, 61, 37, 100, 0, 116, 101, 109, 112, 115, 95, 112, ++ 101, 114, 105, 111, 100, 61, 37, 100, 0, 115, 98, 52, 48, 97, 110, 100, ++ 56, 48, 37, 99, 114, 53, 103, 37, 99, 112, 111, 61, 48, 120, 37, 120, ++ 0, 99, 99, 61, 37, 100, 0, 32, 4, 208, 2, 166, 169, 255, 255, 100, 111, ++ 116, 49, 49, 97, 103, 100, 117, 112, 37, 99, 114, 112, 111, 61, 48, ++ 120, 37, 120, 0, 97, 103, 97, 37, 100, 61, 48, 120, 37, 120, 0, 116, ++ 114, 105, 115, 111, 53, 103, 61, 48, 120, 37, 120, 0, 116, 101, 109, ++ 112, 115, 101, 110, 115, 101, 95, 115, 108, 111, 112, 101, 61, 37, 100, ++ 0, 109, 97, 120, 112, 53, 103, 97, 37, 100, 61, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 0, 112, ++ 97, 49, 105, 116, 115, 115, 105, 116, 61, 37, 100, 0, 112, 97, 48, 98, ++ 48, 61, 37, 100, 0, 112, 97, 48, 98, 49, 61, 37, 100, 0, 112, 97, 48, ++ 98, 50, 61, 37, 100, 0, 112, 97, 53, 103, 97, 37, 100, 61, 48, 120, ++ 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, ++ 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, ++ 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 0, 109, 99, 115, 98, 119, 56, ++ 48, 53, 103, 37, 99, 112, 111, 61, 48, 120, 37, 120, 0, 115, 117, 98, ++ 98, 97, 110, 100, 53, 103, 118, 101, 114, 61, 37, 100, 0, 114, 115, ++ 115, 105, 115, 97, 118, 53, 103, 61, 37, 100, 0, 109, 99, 115, 98, 119, ++ 50, 48, 50, 103, 112, 111, 61, 48, 120, 37, 120, 0, 0, 0, 109, 99, 115, ++ 98, 119, 50, 48, 117, 108, 50, 103, 112, 111, 61, 48, 120, 37, 120, ++ 0, 109, 99, 115, 98, 119, 52, 48, 50, 103, 112, 111, 61, 48, 120, 37, ++ 120, 0, 0, 0, 114, 101, 103, 114, 101, 118, 61, 48, 120, 37, 120, 0, ++ 99, 99, 116, 108, 61, 48, 120, 37, 120, 0, 110, 111, 105, 115, 101, ++ 108, 118, 108, 50, 103, 97, 37, 100, 61, 37, 100, 0, 117, 115, 98, 51, ++ 48, 114, 101, 103, 115, 48, 61, 48, 120, 37, 120, 44, 48, 120, 37, 120, ++ 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, ++ 120, 37, 120, 44, 48, 120, 37, 120, 0, 117, 115, 98, 51, 48, 114, 101, ++ 103, 115, 49, 61, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, ++ 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, ++ 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, ++ 44, 48, 120, 37, 120, 0, 99, 99, 107, 112, 111, 61, 48, 120, 37, 120, ++ 0, 116, 114, 105, 53, 103, 61, 37, 100, 0, 99, 99, 107, 100, 105, 103, ++ 102, 105, 108, 116, 116, 121, 112, 101, 61, 37, 100, 0, 118, 101, 110, ++ 100, 105, 100, 61, 48, 120, 37, 120, 0, 102, 101, 109, 99, 116, 114, ++ 108, 61, 37, 100, 0, 117, 115, 98, 51, 48, 114, 101, 103, 115, 37, 100, ++ 61, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 0, 112, 100, 111, 102, 102, 115, 101, 116, 50, 103, ++ 37, 100, 109, 97, 37, 100, 61, 48, 120, 37, 120, 0, 117, 115, 98, 101, ++ 112, 110, 117, 109, 61, 48, 120, 37, 120, 0, 112, 97, 49, 104, 105, ++ 109, 97, 120, 112, 119, 114, 61, 37, 100, 0, 114, 120, 99, 104, 97, ++ 105, 110, 61, 48, 120, 37, 120, 0, 98, 111, 97, 114, 100, 102, 108, ++ 97, 103, 115, 61, 48, 120, 37, 120, 0, 112, 97, 49, 98, 48, 61, 37, ++ 100, 0, 112, 97, 49, 98, 49, 61, 37, 100, 0, 112, 97, 49, 98, 50, 61, ++ 37, 100, 0, 116, 120, 99, 104, 97, 105, 110, 61, 48, 120, 37, 120, 0, ++ 114, 120, 103, 97, 105, 110, 115, 37, 100, 103, 37, 99, 101, 108, 110, ++ 97, 103, 97, 105, 110, 97, 37, 100, 61, 37, 100, 0, 103, 112, 100, 110, ++ 61, 48, 120, 37, 120, 0, 112, 97, 48, 109, 97, 120, 112, 119, 114, 61, ++ 37, 100, 0, 98, 120, 97, 53, 103, 61, 37, 100, 0, 97, 103, 98, 103, ++ 37, 100, 61, 48, 120, 37, 120, 0, 117, 115, 98, 115, 115, 112, 104, ++ 121, 95, 115, 108, 101, 101, 112, 48, 61, 48, 120, 37, 120, 0, 117, ++ 115, 98, 115, 115, 112, 104, 121, 95, 115, 108, 101, 101, 112, 49, 61, ++ 48, 120, 37, 120, 0, 117, 115, 98, 115, 115, 112, 104, 121, 95, 115, ++ 108, 101, 101, 112, 50, 61, 48, 120, 37, 120, 0, 117, 115, 98, 115, ++ 115, 112, 104, 121, 95, 115, 108, 101, 101, 112, 51, 61, 48, 120, 37, ++ 120, 0, 108, 101, 100, 100, 99, 61, 48, 120, 37, 48, 52, 120, 0, 109, ++ 99, 115, 51, 50, 112, 111, 61, 48, 120, 37, 120, 0, 114, 115, 115, 105, ++ 115, 97, 118, 50, 103, 61, 37, 100, 0, 111, 112, 111, 61, 37, 100, 0, ++ 105, 116, 116, 50, 103, 97, 49, 61, 48, 120, 37, 120, 0, 114, 120, 112, ++ 111, 53, 103, 61, 37, 100, 0, 101, 120, 116, 112, 97, 103, 97, 105, ++ 110, 53, 103, 61, 48, 120, 37, 120, 0, 111, 102, 100, 109, 53, 103, ++ 104, 112, 111, 61, 48, 120, 37, 120, 0, 116, 119, 111, 114, 97, 110, ++ 103, 101, 116, 115, 115, 105, 37, 100, 103, 61, 37, 100, 0, 115, 98, ++ 50, 48, 105, 110, 52, 48, 37, 99, 114, 112, 111, 61, 48, 120, 37, 120, ++ 0, 109, 97, 110, 102, 105, 100, 61, 48, 120, 37, 120, 0, 101, 108, 110, ++ 97, 50, 103, 61, 48, 120, 37, 120, 0, 114, 112, 99, 97, 108, 50, 103, ++ 61, 48, 120, 37, 120, 0, 0, 0, 0, 0, 0, 0, 0, 114, 112, 99, 97, 108, ++ 53, 103, 98, 48, 61, 48, 120, 37, 120, 0, 0, 0, 0, 0, 0, 114, 112, 99, ++ 97, 108, 53, 103, 98, 49, 61, 48, 120, 37, 120, 0, 0, 0, 0, 0, 0, 114, ++ 112, 99, 97, 108, 53, 103, 98, 50, 61, 48, 120, 37, 120, 0, 0, 0, 0, ++ 0, 0, 114, 112, 99, 97, 108, 53, 103, 98, 51, 61, 48, 120, 37, 120, ++ 0, 0, 0, 0, 0, 0, 112, 97, 48, 98, 48, 95, 108, 111, 61, 37, 100, 0, ++ 112, 97, 48, 98, 49, 95, 108, 111, 61, 37, 100, 0, 112, 97, 48, 98, ++ 50, 95, 108, 111, 61, 37, 100, 0, 115, 98, 50, 48, 105, 110, 56, 48, ++ 97, 110, 100, 49, 54, 48, 37, 99, 114, 53, 103, 37, 99, 112, 111, 61, ++ 48, 120, 37, 120, 0, 99, 100, 100, 112, 111, 61, 48, 120, 37, 120, 0, ++ 98, 111, 97, 114, 100, 116, 121, 112, 101, 61, 48, 120, 37, 120, 0, ++ 97, 110, 116, 115, 119, 105, 116, 99, 104, 61, 48, 120, 37, 120, 0, ++ 98, 111, 97, 114, 100, 110, 117, 109, 61, 37, 100, 0, 114, 100, 108, ++ 105, 100, 61, 48, 120, 37, 120, 0, 120, 116, 97, 108, 102, 114, 101, ++ 113, 61, 37, 100, 0, 109, 97, 120, 112, 53, 103, 104, 97, 48, 61, 48, ++ 120, 37, 120, 0, 114, 120, 103, 97, 105, 110, 115, 37, 100, 103, 101, ++ 108, 110, 97, 103, 97, 105, 110, 97, 37, 100, 61, 37, 100, 0, 117, 115, ++ 98, 115, 115, 109, 100, 105, 111, 37, 100, 61, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 0, 115, ++ 117, 98, 100, 101, 118, 105, 100, 61, 48, 120, 37, 120, 0, 112, 97, ++ 49, 108, 111, 98, 48, 61, 37, 100, 0, 112, 97, 49, 108, 111, 98, 49, ++ 61, 37, 100, 0, 112, 97, 49, 108, 111, 98, 50, 61, 37, 100, 0, 115, ++ 116, 98, 99, 112, 111, 61, 48, 120, 37, 120, 0, 114, 120, 103, 97, 105, ++ 110, 101, 114, 114, 53, 103, 97, 37, 100, 61, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 0, 112, ++ 97, 49, 108, 111, 109, 97, 120, 112, 119, 114, 61, 37, 100, 0, 112, ++ 100, 111, 102, 102, 115, 101, 116, 37, 100, 109, 97, 37, 100, 61, 48, ++ 120, 37, 120, 0, 116, 101, 109, 112, 99, 111, 114, 114, 120, 61, 37, ++ 100, 0, 111, 102, 100, 109, 53, 103, 112, 111, 61, 48, 120, 37, 120, ++ 0, 117, 115, 98, 110, 111, 115, 115, 61, 48, 120, 37, 120, 0, 97, 97, ++ 53, 103, 61, 48, 120, 37, 120, 0, 99, 117, 115, 116, 111, 109, 118, ++ 97, 114, 37, 100, 61, 48, 120, 37, 120, 0, 116, 120, 95, 100, 117, 116, ++ 121, 95, 99, 121, 99, 108, 101, 95, 111, 102, 100, 109, 95, 37, 100, ++ 95, 53, 103, 61, 37, 100, 0, 117, 117, 105, 100, 61, 37, 115, 0, 117, ++ 115, 98, 100, 101, 115, 99, 95, 99, 111, 109, 112, 111, 115, 105, 116, ++ 101, 61, 48, 120, 37, 120, 0, 116, 101, 109, 112, 115, 101, 110, 115, ++ 101, 95, 111, 112, 116, 105, 111, 110, 61, 37, 100, 0, 112, 97, 112, ++ 100, 99, 97, 112, 37, 100, 103, 61, 37, 100, 0, 108, 101, 103, 111, ++ 102, 100, 109, 98, 119, 50, 48, 50, 103, 112, 111, 61, 48, 120, 37, ++ 120, 0, 0, 0, 108, 101, 103, 111, 102, 100, 109, 98, 119, 50, 48, 117, ++ 108, 50, 103, 112, 111, 61, 48, 120, 37, 120, 0, 112, 100, 103, 97, ++ 105, 110, 37, 100, 103, 61, 37, 100, 0, 109, 97, 120, 112, 53, 103, ++ 97, 48, 61, 48, 120, 37, 120, 0, 109, 97, 120, 112, 53, 103, 97, 49, ++ 61, 48, 120, 37, 120, 0, 109, 99, 115, 37, 100, 103, 37, 99, 112, 111, ++ 37, 100, 61, 48, 120, 37, 120, 0, 112, 104, 121, 99, 97, 108, 95, 116, ++ 101, 109, 112, 100, 101, 108, 116, 97, 61, 37, 100, 0, 112, 97, 37, ++ 100, 103, 37, 99, 119, 37, 100, 97, 37, 100, 61, 48, 120, 37, 120, 0, ++ 99, 99, 111, 100, 101, 61, 48, 120, 48, 0, 114, 101, 103, 119, 105, ++ 110, 100, 111, 119, 115, 122, 61, 37, 100, 0, 111, 102, 100, 109, 108, ++ 114, 98, 119, 50, 48, 50, 103, 112, 111, 61, 48, 120, 37, 120, 0, 119, ++ 111, 119, 108, 95, 103, 112, 105, 111, 112, 111, 108, 61, 37, 100, 0, ++ 97, 110, 116, 115, 119, 99, 116, 108, 53, 103, 61, 48, 120, 37, 120, ++ 0, 99, 99, 107, 50, 103, 112, 111, 61, 48, 120, 37, 120, 0, 116, 114, ++ 105, 50, 103, 61, 37, 100, 0, 99, 99, 107, 98, 119, 50, 48, 50, 103, ++ 112, 111, 61, 48, 120, 37, 120, 0, 0, 0, 99, 99, 107, 98, 119, 50, 48, ++ 117, 108, 50, 103, 112, 111, 61, 48, 120, 37, 120, 0, 105, 116, 116, ++ 53, 103, 97, 48, 61, 48, 120, 37, 120, 0, 105, 116, 116, 53, 103, 97, ++ 49, 61, 48, 120, 37, 120, 0, 109, 99, 115, 108, 114, 53, 103, 37, 99, ++ 112, 111, 61, 48, 120, 37, 120, 0, 112, 100, 111, 102, 102, 115, 101, ++ 116, 50, 103, 37, 100, 109, 118, 97, 108, 105, 100, 61, 48, 120, 37, ++ 120, 0, 114, 120, 103, 97, 105, 110, 115, 37, 100, 103, 116, 114, 101, ++ 108, 110, 97, 98, 121, 112, 97, 37, 100, 61, 37, 100, 0, 98, 111, 97, ++ 114, 100, 114, 101, 118, 61, 48, 120, 37, 120, 0, 114, 97, 119, 116, ++ 101, 109, 112, 115, 101, 110, 115, 101, 61, 48, 120, 37, 120, 0, 117, ++ 115, 98, 115, 115, 112, 104, 121, 95, 117, 116, 109, 105, 95, 99, 116, ++ 108, 48, 61, 48, 120, 37, 120, 0, 117, 115, 98, 115, 115, 112, 104, ++ 121, 95, 117, 116, 109, 105, 95, 99, 116, 108, 49, 61, 48, 120, 37, ++ 120, 0, 117, 115, 98, 115, 115, 112, 104, 121, 95, 117, 116, 109, 105, ++ 95, 99, 116, 108, 50, 61, 48, 120, 37, 120, 0, 0, 0, 0, 0, 0, 111, 102, ++ 100, 109, 53, 103, 108, 112, 111, 61, 48, 120, 37, 120, 0, 112, 97, ++ 48, 105, 116, 115, 115, 105, 116, 61, 37, 100, 0, 116, 115, 115, 105, ++ 112, 111, 115, 53, 103, 61, 48, 120, 37, 120, 0, 114, 120, 112, 111, ++ 50, 103, 61, 37, 100, 0, 116, 115, 115, 105, 112, 111, 115, 115, 108, ++ 111, 112, 101, 37, 100, 103, 61, 37, 100, 0, 116, 114, 105, 53, 103, ++ 104, 61, 37, 100, 0, 109, 97, 110, 102, 61, 37, 115, 0, 116, 114, 105, ++ 53, 103, 108, 61, 37, 100, 0, 109, 99, 115, 98, 119, 50, 48, 53, 103, ++ 104, 112, 111, 61, 48, 120, 37, 120, 0, 0, 0, 109, 99, 115, 98, 119, ++ 50, 48, 117, 108, 53, 103, 104, 112, 111, 61, 48, 120, 37, 120, 0, 109, ++ 99, 115, 98, 119, 52, 48, 53, 103, 104, 112, 111, 61, 48, 120, 37, 120, ++ 0, 0, 0, 115, 114, 111, 109, 114, 101, 118, 61, 37, 100, 0, 108, 101, ++ 103, 111, 102, 100, 109, 52, 48, 100, 117, 112, 112, 111, 61, 48, 120, ++ 37, 120, 0, 109, 97, 120, 112, 53, 103, 104, 97, 49, 61, 48, 120, 37, ++ 120, 0, 100, 101, 118, 105, 100, 61, 48, 120, 37, 120, 0, 114, 120, ++ 103, 97, 105, 110, 115, 37, 100, 103, 116, 114, 105, 115, 111, 97, 37, ++ 100, 61, 37, 100, 0, 109, 97, 120, 112, 53, 103, 108, 97, 48, 61, 48, ++ 120, 37, 120, 0, 109, 97, 120, 112, 53, 103, 108, 97, 49, 61, 48, 120, ++ 37, 120, 0, 101, 112, 97, 103, 97, 105, 110, 37, 100, 103, 61, 37, 100, ++ 0, 119, 112, 115, 103, 112, 105, 111, 61, 37, 100, 0, 119, 111, 119, ++ 108, 95, 103, 112, 105, 111, 61, 37, 100, 0, 114, 115, 115, 105, 115, ++ 109, 102, 53, 103, 61, 37, 100, 0, 116, 114, 105, 115, 111, 50, 103, ++ 61, 48, 120, 37, 120, 0, 116, 115, 115, 105, 112, 111, 115, 50, 103, ++ 61, 48, 120, 37, 120, 0, 119, 112, 115, 108, 101, 100, 61, 37, 100, ++ 0, 101, 108, 110, 97, 53, 103, 61, 48, 120, 37, 120, 0, 112, 97, 53, ++ 103, 98, 119, 52, 48, 56, 48, 97, 37, 100, 61, 48, 120, 37, 120, 44, ++ 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, ++ 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, ++ 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, 120, 44, 48, 120, 37, ++ 120, 44, 48, 120, 37, 120, 0, 109, 99, 115, 98, 119, 50, 48, 53, 103, ++ 109, 112, 111, 61, 48, 120, 37, 120, 0, 0, 0, 109, 99, 115, 98, 119, ++ 50, 48, 117, 108, 53, 103, 109, 112, 111, 61, 48, 120, 37, 120, 0, 109, ++ 99, 115, 98, 119, 52, 48, 53, 103, 109, 112, 111, 61, 48, 120, 37, 120, ++ 0, 0, 0, 99, 99, 111, 100, 101, 61, 37, 99, 37, 99, 0, 109, 99, 115, ++ 98, 119, 49, 54, 48, 53, 103, 37, 99, 112, 111, 61, 48, 120, 37, 120, ++ 0, 73, 110, 118, 97, 108, 105, 100, 47, 85, 110, 115, 117, 112, 112, ++ 111, 114, 116, 101, 100, 32, 120, 116, 97, 108, 32, 118, 97, 108, 117, ++ 101, 32, 37, 100, 0, 114, 109, 105, 110, 0, 99, 108, 100, 111, 95, 98, ++ 117, 114, 115, 116, 0, 112, 108, 108, 37, 100, 0, 108, 110, 108, 100, ++ 111, 49, 0, 114, 37, 100, 100, 0, 114, 37, 100, 116, 0, 120, 116, 97, ++ 108, 102, 114, 101, 113, 0, 0, 0, 0, 12, 0, 0, 0, 2, 0, 22, 0, 2, 0, ++ 0, 0, 4, 0, 13, 0, 7, 0, 0, 0, 1, 0, 10, 0, 8, 0, 0, 0, 4, 0, 13, 0, ++ 10, 0, 0, 0, 4, 0, 13, 0, 13, 0, 0, 0, 1, 0, 7, 0, 23, 0, 0, 0, 4, 0, ++ 4, 0, 27, 0, 0, 0, 4, 0, 1, 0, 28, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, ++ 2, 0, 2, 0, 1, 0, 0, 0, 1, 0, 1, 0, 3, 0, 0, 0, 2, 0, 2, 0, 4, 0, 0, ++ 0, 1, 0, 1, 0, 5, 0, 0, 0, 1, 0, 1, 0, 6, 0, 0, 0, 1, 0, 1, 0, 9, 0, ++ 0, 0, 1, 0, 5, 0, 11, 0, 0, 0, 1, 0, 1, 0, 12, 0, 0, 0, 2, 0, 48, 0, ++ 14, 0, 0, 0, 1, 0, 1, 0, 15, 0, 0, 0, 1, 0, 1, 0, 16, 0, 0, 0, 1, 0, ++ 1, 0, 17, 0, 0, 0, 1, 0, 1, 0, 18, 0, 0, 0, 3, 0, 3, 0, 19, 0, 0, 0, ++ 1, 0, 1, 0, 20, 0, 0, 0, 1, 0, 1, 0, 21, 0, 0, 0, 1, 0, 1, 0, 22, 0, ++ 0, 0, 1, 0, 1, 0, 24, 0, 0, 0, 2, 0, 19, 0, 25, 0, 0, 0, 2, 0, 19, 0, ++ 26, 0, 0, 0, 2, 0, 19, 0, 29, 0, 0, 0, 1, 0, 1, 0, 30, 0, 0, 0, 1, 0, ++ 1, 0, 12, 0, 0, 0, 2, 0, 48, 0, 114, 109, 97, 120, 0, 0, 0, 75, 0, 7, ++ 144, 101, 0, 12, 24, 146, 0, 15, 108, 112, 108, 100, 111, 49, 0, 0, ++ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, ++ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, ++ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, ++ 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 87, ++ 17, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 0, ++ 0, 128, 0, 0, 0, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, ++ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, ++ 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 87, ++ 1, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 215, 21, 0, 0, 0, 0, 0, ++ 0, 0, 64, 0, 0, 0, 0, 0, 0, 247, 189, 194, 14, 0, 0, 0, 0, 0, 128, 0, ++ 0, 0, 0, 0, 0, 247, 61, 194, 14, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 247, 61, 192, 14, 0, ++ 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 247, 61, 194, 14, 0, 0, 0, 0, 0, 0, ++ 8, 0, 0, 0, 0, 0, 247, 61, 194, 14, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, ++ 0, 247, 61, 192, 6, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 247, 61, 218, ++ 14, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 247, 61, 0, 6, 0, 0, 0, 0, ++ 0, 0, 128, 0, 0, 0, 0, 0, 247, 61, 64, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 215, 1, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 215, 13, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 8, 0, 0, 0, 0, 247, 61, 192, 6, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, ++ 0, 0, 247, 61, 202, 14, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 247, 61, ++ 202, 30, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 247, 61, 250, 62, 0, 0, ++ 0, 0, 114, 101, 103, 37, 100, 0, 99, 108, 100, 111, 95, 112, 119, 109, ++ 0, 99, 104, 105, 112, 99, 37, 100, 0, 98, 111, 97, 114, 100, 116, 121, ++ 112, 101, 0, 112, 114, 111, 100, 105, 100, 0, 115, 119, 100, 101, 110, ++ 97, 98, 108, 101, 0, 103, 112, 100, 110, 0, 98, 111, 97, 114, 100, 102, ++ 108, 97, 103, 115, 0, 98, 116, 99, 120, 119, 97, 114, 102, 108, 97, ++ 103, 115, 0, 120, 116, 97, 108, 102, 114, 101, 113, 0, 100, 101, 118, ++ 105, 100, 0, 98, 111, 97, 114, 100, 114, 101, 118, 0, 0, 128, 186, 140, ++ 1, 0, 194, 1, 0, 242, 0, 0, 0, 129, 0, 0, 0, 16, 0, 0, 0, 192, 173, ++ 58, 2, 0, 194, 1, 0, 236, 0, 0, 0, 129, 0, 0, 0, 34, 0, 0, 0, 109, 117, ++ 120, 101, 110, 97, 98, 0, 119, 108, 48, 105, 100, 0, 119, 108, 37, 100, ++ 58, 32, 66, 114, 111, 97, 100, 99, 111, 109, 32, 66, 67, 77, 37, 115, ++ 32, 56, 48, 50, 46, 49, 49, 32, 87, 105, 114, 101, 108, 101, 115, 115, ++ 32, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 32, 37, 115, 10, ++ 0, 97, 103, 98, 103, 48, 0, 97, 103, 98, 103, 49, 0, 97, 103, 98, 103, ++ 50, 0, 97, 97, 48, 0, 115, 97, 114, 50, 103, 0, 78, 86, 82, 65, 77, ++ 82, 101, 118, 0, 0, 97, 39, 1, 0, 25, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 32, 67, 37, 67, 3, 67, 33, 67, 36, 67, 24, 67, 25, 67, 26, 67, 17, ++ 67, 19, 67, 18, 67, 20, 67, 21, 67, 22, 67, 27, 67, 28, 67, 29, 67, ++ 40, 67, 41, 67, 42, 67, 43, 67, 44, 67, 45, 67, 65, 67, 64, 67, 80, ++ 67, 81, 67, 82, 67, 83, 67, 87, 67, 157, 169, 118, 5, 84, 67, 95, 67, ++ 63, 67, 79, 67, 47, 67, 52, 67, 53, 67, 54, 67, 55, 67, 56, 67, 57, ++ 67, 22, 71, 72, 71, 39, 71, 67, 67, 96, 67, 70, 67, 71, 67, 72, 67, ++ 49, 67, 50, 67, 51, 67, 170, 67, 88, 67, 89, 67, 90, 67, 169, 67, 85, ++ 67, 86, 67, 99, 67, 128, 67, 129, 67, 130, 67, 100, 67, 101, 67, 102, ++ 67, 116, 67, 103, 67, 160, 67, 161, 67, 162, 67, 174, 67, 175, 67, 176, ++ 67, 171, 67, 172, 67, 173, 67, 227, 67, 228, 67, 229, 67, 226, 67, 208, ++ 67, 209, 67, 210, 67, 186, 67, 187, 67, 188, 67, 177, 67, 178, 67, 179, ++ 67, 163, 67, 164, 67, 165, 67, 183, 67, 184, 67, 185, 67, 192, 67, 193, ++ 67, 194, 67, 211, 67, 212, 67, 213, 67, 214, 67, 215, 67, 216, 67, 217, ++ 67, 218, 67, 219, 67, 223, 67, 224, 67, 225, 67, 236, 67, 237, 67, 238, ++ 67, 233, 67, 234, 67, 235, 67, 34, 67, 214, 168, 103, 168, 104, 168, ++ 156, 169, 216, 168, 157, 169, 19, 67, 20, 67, 134, 168, 49, 67, 167, ++ 169, 219, 168, 209, 168, 220, 168, 164, 169, 82, 170, 198, 169, 2, 170, ++ 49, 170, 50, 170, 100, 101, 118, 105, 100, 0, 97, 97, 50, 103, 0, 49, ++ 49, 110, 95, 100, 105, 115, 97, 98, 108, 101, 0, 97, 103, 48, 0, 97, ++ 107, 109, 0, 0, 37, 194, 1, 0, 243, 164, 1, 0, 43, 214, 1, 0, 0, 0, ++ 0, 0, 101, 15, 2, 0, 209, 171, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 116, ++ 99, 120, 108, 101, 115, 99, 97, 110, 0, 119, 108, 37, 100, 58, 100, ++ 109, 97, 37, 100, 0, 97, 97, 50, 103, 0, 98, 116, 99, 95, 109, 111, ++ 100, 101, 0, 98, 111, 97, 114, 100, 102, 108, 97, 103, 115, 0, 109, ++ 97, 99, 97, 100, 100, 114, 0, 118, 101, 110, 100, 105, 100, 0, 99, 117, ++ 115, 116, 111, 109, 118, 97, 114, 49, 0, 99, 117, 115, 116, 111, 109, ++ 118, 97, 114, 50, 0, 98, 116, 99, 95, 112, 97, 114, 97, 109, 115, 37, ++ 100, 0, 97, 110, 116, 115, 119, 99, 116, 108, 50, 103, 0, 98, 116, 99, ++ 120, 119, 97, 114, 102, 108, 97, 103, 115, 0, 98, 116, 99, 95, 102, ++ 108, 97, 103, 115, 0, 98, 111, 97, 114, 100, 102, 108, 97, 103, 115, ++ 50, 0, 98, 111, 97, 114, 100, 102, 108, 97, 103, 115, 52, 0, 98, 111, ++ 97, 114, 100, 114, 101, 118, 0, 100, 101, 118, 105, 100, 0, 115, 114, ++ 111, 109, 114, 101, 118, 0, 97, 110, 116, 115, 119, 99, 116, 108, 53, ++ 103, 0, 115, 99, 111, 95, 114, 115, 115, 105, 95, 116, 104, 114, 101, ++ 115, 104, 0, 112, 114, 111, 116, 95, 98, 116, 114, 115, 115, 105, 95, ++ 116, 104, 114, 101, 115, 104, 0, 99, 99, 111, 100, 101, 0, 99, 99, 0, ++ 114, 101, 103, 114, 101, 118, 0, 101, 118, 101, 110, 116, 113, 0, 104, ++ 115, 50, 48, 0, 41, 6, 134, 0, 105, 6, 134, 0, 65, 243, 133, 0, 145, ++ 243, 133, 0, 41, 6, 134, 0, 105, 6, 134, 0, 65, 243, 133, 0, 145, 243, ++ 133, 0, 41, 6, 134, 0, 105, 6, 134, 0, 13, 244, 133, 0, 121, 245, 133, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 244, 133, 0, ++ 121, 245, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 6, 134, 0, 105, 6, 134, ++ 0, 41, 6, 134, 0, 105, 6, 134, 0, 41, 6, 134, 0, 105, 6, 134, 0, 0, ++ 0, 0, 0, 13, 6, 15, 0, 0, 0, 0, 0, 4, 6, 48, 4, 0, 0, 0, 0, 2, 6, 64, ++ 6, 114, 115, 115, 105, 99, 111, 114, 114, 110, 111, 114, 109, 0, 103, ++ 108, 97, 99, 105, 97, 108, 116, 105, 109, 101, 114, 0, 108, 100, 112, ++ 99, 0, 116, 115, 115, 105, 108, 105, 109, 117, 99, 111, 100, 0, 37, ++ 115, 46, 102, 97, 98, 46, 37, 100, 0, 116, 101, 109, 112, 116, 104, ++ 114, 101, 115, 104, 0, 46, 102, 97, 98, 46, 0, 116, 120, 112, 119, 114, ++ 98, 99, 107, 111, 102, 0, 105, 110, 116, 101, 114, 102, 101, 114, 101, ++ 110, 99, 101, 0, 103, 108, 105, 116, 99, 104, 95, 98, 97, 115, 101, ++ 100, 95, 99, 114, 115, 109, 105, 110, 0, 50, 103, 95, 99, 103, 97, 0, ++ 114, 115, 115, 105, 99, 111, 114, 114, 97, 116, 116, 101, 110, 0, 112, ++ 104, 121, 99, 97, 108, 95, 116, 101, 109, 112, 100, 101, 108, 116, 97, ++ 0, 116, 101, 109, 112, 115, 95, 104, 121, 115, 116, 101, 114, 101, 115, ++ 105, 115, 0, 114, 115, 115, 105, 99, 111, 114, 114, 112, 101, 114, 114, ++ 103, 50, 103, 0, 116, 115, 115, 105, 102, 108, 111, 111, 114, 50, 103, ++ 0, 118, 98, 97, 116, 95, 97, 100, 100, 0, 112, 97, 112, 100, 118, 97, ++ 108, 105, 100, 116, 101, 115, 116, 0, 115, 119, 100, 105, 118, 95, 103, ++ 112, 105, 111, 95, 49, 0, 112, 109, 105, 110, 0, 115, 112, 117, 114, ++ 99, 111, 110, 102, 105, 103, 0, 99, 99, 107, 100, 105, 103, 102, 105, ++ 108, 116, 116, 121, 112, 101, 0, 101, 117, 95, 101, 100, 116, 104, 114, ++ 101, 115, 104, 50, 103, 0, 114, 101, 100, 95, 114, 120, 98, 108, 111, ++ 99, 107, 105, 110, 103, 0, 0, 1, 0, 108, 9, 75, 0, 118, 1, 19, 0, 50, ++ 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 37, 0, 0, 0, 145, ++ 9, 0, 0, 108, 9, 0, 0, 0, 0, 5, 3, 91, 231, 8, 0, 63, 88, 18, 18, 47, ++ 20, 31, 31, 31, 31, 32, 81, 39, 97, 0, 0, 9, 96, 63, 112, 2, 0, 113, ++ 9, 75, 0, 118, 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, ++ 217, 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, 113, 9, 0, 0, 0, 0, 7, 3, ++ 13, 130, 8, 0, 63, 88, 18, 18, 47, 20, 31, 31, 31, 31, 32, 81, 39, 97, ++ 0, 0, 9, 96, 63, 112, 3, 0, 118, 9, 75, 0, 118, 1, 19, 0, 50, 48, 22, ++ 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, ++ 0, 118, 9, 0, 0, 0, 0, 9, 3, 191, 28, 8, 0, 63, 88, 18, 18, 47, 20, ++ 31, 31, 31, 31, 32, 81, 39, 97, 0, 0, 9, 96, 63, 112, 4, 0, 123, 9, ++ 75, 0, 118, 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, ++ 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, 123, 9, 0, 0, 0, 0, 10, 3, 113, ++ 183, 8, 0, 63, 88, 18, 18, 47, 20, 31, 31, 31, 31, 32, 81, 39, 97, 0, ++ 0, 9, 96, 63, 112, 5, 0, 128, 9, 75, 0, 118, 1, 19, 0, 50, 48, 22, 0, ++ 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, ++ 128, 9, 0, 0, 0, 0, 12, 3, 35, 82, 8, 0, 63, 88, 18, 18, 47, 20, 31, ++ 31, 31, 31, 33, 81, 39, 97, 0, 0, 9, 96, 63, 112, 6, 0, 133, 9, 75, ++ 0, 118, 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, ++ 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, 133, 9, 0, 0, 0, 0, 13, 3, 213, 236, ++ 8, 0, 63, 88, 18, 18, 47, 20, 31, 31, 31, 31, 33, 81, 39, 97, 0, 0, ++ 9, 96, 63, 112, 7, 0, 138, 9, 75, 0, 118, 1, 19, 0, 50, 48, 22, 0, 3, ++ 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, 138, ++ 9, 0, 0, 0, 0, 15, 3, 135, 135, 8, 0, 63, 88, 18, 18, 47, 20, 31, 31, ++ 31, 31, 33, 81, 39, 97, 0, 0, 8, 96, 63, 112, 8, 0, 143, 9, 75, 0, 118, ++ 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, ++ 37, 0, 0, 0, 145, 9, 0, 0, 143, 9, 0, 0, 0, 0, 17, 3, 57, 34, 8, 0, ++ 63, 88, 18, 18, 47, 20, 31, 31, 31, 31, 33, 81, 39, 97, 0, 0, 8, 96, ++ 63, 112, 9, 0, 148, 9, 75, 0, 118, 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, ++ 126, 0, 6, 0, 10, 217, 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, 148, 9, ++ 0, 0, 0, 0, 18, 3, 235, 188, 8, 0, 63, 88, 18, 18, 47, 20, 31, 31, 31, ++ 31, 33, 81, 39, 97, 0, 0, 8, 96, 63, 96, 10, 0, 153, 9, 75, 0, 118, ++ 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, ++ 37, 0, 0, 0, 145, 9, 0, 0, 153, 9, 0, 0, 0, 0, 20, 3, 157, 87, 8, 0, ++ 63, 88, 18, 18, 47, 20, 31, 31, 31, 31, 33, 81, 39, 97, 0, 0, 8, 96, ++ 63, 96, 11, 0, 158, 9, 75, 0, 118, 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, ++ 126, 0, 6, 0, 10, 217, 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, 158, 9, ++ 0, 0, 0, 0, 21, 3, 79, 242, 8, 0, 63, 88, 18, 18, 47, 20, 31, 31, 31, ++ 31, 33, 81, 39, 97, 0, 0, 7, 96, 63, 96, 12, 0, 163, 9, 75, 0, 118, ++ 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, ++ 37, 0, 0, 0, 145, 9, 0, 0, 163, 9, 0, 0, 0, 0, 23, 3, 1, 141, 8, 0, ++ 63, 88, 18, 18, 47, 20, 31, 31, 31, 31, 33, 81, 39, 97, 0, 0, 7, 96, ++ 63, 96, 13, 0, 168, 9, 75, 0, 118, 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, ++ 126, 0, 6, 0, 10, 217, 3, 39, 0, 37, 0, 0, 0, 145, 9, 0, 0, 168, 9, ++ 0, 0, 0, 0, 25, 3, 179, 39, 8, 0, 63, 88, 18, 18, 47, 20, 31, 31, 31, ++ 31, 33, 81, 40, 97, 0, 0, 7, 96, 63, 96, 14, 0, 180, 9, 75, 0, 118, ++ 1, 19, 0, 50, 48, 22, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, ++ 37, 0, 0, 0, 145, 9, 0, 0, 180, 9, 0, 0, 0, 0, 29, 3, 94, 1, 8, 0, 63, ++ 88, 18, 18, 47, 20, 31, 31, 31, 31, 33, 81, 40, 97, 0, 0, 7, 96, 63, ++ 96, 109, 97, 120, 112, 50, 103, 97, 48, 0, 0, 1, 0, 108, 9, 52, 0, 4, ++ 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, ++ 26, 0, 0, 0, 162, 9, 0, 0, 108, 9, 0, 0, 0, 0, 178, 8, 39, 118, 8, 0, ++ 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 59, 81, 25, 97, 0, 0, 9, 96, ++ 63, 112, 2, 0, 113, 9, 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, ++ 126, 0, 6, 0, 10, 217, 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, 113, 9, ++ 0, 0, 0, 0, 183, 8, 177, 19, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, ++ 31, 59, 81, 25, 97, 0, 0, 9, 96, 63, 112, 3, 0, 118, 9, 52, 0, 4, 1, ++ 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 26, ++ 0, 0, 0, 162, 9, 0, 0, 118, 9, 0, 0, 0, 0, 187, 8, 59, 177, 8, 0, 63, ++ 88, 23, 23, 60, 25, 31, 31, 31, 31, 60, 81, 25, 97, 0, 0, 9, 96, 63, ++ 112, 4, 0, 123, 9, 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, ++ 0, 6, 0, 10, 217, 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, 123, 9, 0, 0, ++ 0, 0, 192, 8, 196, 78, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, ++ 60, 81, 25, 97, 0, 0, 9, 96, 63, 112, 5, 0, 128, 9, 52, 0, 4, 1, 13, ++ 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 26, 0, ++ 0, 0, 162, 9, 0, 0, 128, 9, 0, 0, 0, 0, 196, 8, 78, 236, 8, 0, 63, 88, ++ 23, 23, 60, 25, 31, 31, 31, 31, 60, 81, 25, 97, 0, 0, 9, 96, 63, 112, ++ 6, 0, 133, 9, 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, ++ 0, 10, 217, 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, 133, 9, 0, 0, 0, 0, ++ 201, 8, 216, 137, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 60, ++ 81, 25, 97, 0, 0, 9, 96, 63, 112, 7, 0, 138, 9, 52, 0, 4, 1, 13, 0, ++ 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 26, 0, 0, ++ 0, 162, 9, 0, 0, 138, 9, 0, 0, 0, 0, 206, 8, 98, 39, 8, 0, 63, 88, 23, ++ 23, 60, 25, 31, 31, 31, 31, 60, 81, 25, 97, 0, 0, 8, 96, 63, 112, 8, ++ 0, 143, 9, 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, ++ 10, 217, 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, 143, 9, 0, 0, 0, 0, 210, ++ 8, 236, 196, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 60, 81, 25, ++ 97, 0, 0, 8, 96, 63, 112, 9, 0, 148, 9, 52, 0, 4, 1, 13, 0, 35, 48, ++ 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 26, 0, 0, 0, 162, ++ 9, 0, 0, 148, 9, 0, 0, 0, 0, 215, 8, 118, 98, 8, 0, 63, 88, 23, 23, ++ 60, 25, 31, 31, 31, 31, 60, 81, 25, 97, 0, 0, 8, 96, 63, 96, 10, 0, ++ 153, 9, 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, ++ 217, 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, 153, 9, 0, 0, 0, 0, 220, 8, ++ 0, 0, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 60, 81, 25, 97, ++ 0, 0, 8, 96, 63, 96, 11, 0, 158, 9, 52, 0, 4, 1, 13, 0, 35, 48, 79, ++ 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, ++ 0, 158, 9, 0, 0, 0, 0, 224, 8, 137, 157, 8, 0, 63, 88, 23, 23, 60, 25, ++ 31, 31, 31, 31, 61, 81, 25, 97, 0, 0, 7, 96, 63, 96, 12, 0, 163, 9, ++ 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, ++ 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, 163, 9, 0, 0, 0, 0, 229, 8, 19, ++ 59, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 61, 81, 25, 97, 0, ++ 0, 7, 96, 63, 96, 13, 0, 168, 9, 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, ++ 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, ++ 168, 9, 0, 0, 0, 0, 233, 8, 157, 216, 8, 0, 63, 88, 23, 23, 60, 25, ++ 31, 31, 31, 31, 61, 81, 25, 97, 0, 0, 7, 96, 63, 96, 14, 0, 180, 9, ++ 52, 0, 4, 1, 13, 0, 35, 48, 79, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, ++ 3, 39, 0, 26, 0, 0, 0, 162, 9, 0, 0, 180, 9, 0, 0, 0, 0, 244, 8, 78, ++ 236, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 61, 81, 25, 97, 0, ++ 0, 7, 96, 63, 96, 112, 114, 111, 112, 98, 119, 50, 48, 50, 103, 112, ++ 111, 0, 114, 99, 111, 114, 95, 97, 99, 105, 0, 112, 97, 112, 100, 109, ++ 111, 100, 101, 0, 99, 97, 108, 105, 100, 120, 101, 115, 116, 116, 97, ++ 114, 103, 101, 116, 50, 103, 0, 99, 97, 108, 105, 100, 120, 101, 115, ++ 116, 98, 97, 115, 101, 50, 103, 0, 112, 97, 50, 103, 97, 48, 95, 108, ++ 111, 0, 99, 99, 107, 50, 103, 112, 111, 0, 99, 99, 107, 115, 99, 97, ++ 108, 101, 0, 116, 101, 109, 112, 95, 109, 117, 108, 116, 0, 112, 97, ++ 112, 100, 101, 112, 115, 111, 102, 102, 115, 101, 116, 0, 109, 99, 115, ++ 50, 103, 112, 111, 48, 0, 112, 97, 99, 97, 108, 105, 100, 120, 50, 103, ++ 0, 111, 102, 100, 109, 50, 103, 112, 111, 0, 111, 102, 100, 109, 100, ++ 105, 103, 102, 105, 108, 116, 116, 121, 112, 101, 98, 101, 0, 65, 118, ++ 86, 109, 105, 100, 73, 81, 99, 97, 108, 0, 99, 99, 107, 105, 100, 120, ++ 112, 99, 104, 111, 102, 102, 115, 0, 115, 119, 100, 105, 118, 95, 103, ++ 112, 105, 111, 0, 109, 99, 115, 98, 119, 50, 48, 50, 103, 112, 111, ++ 0, 112, 97, 112, 100, 101, 110, 100, 105, 100, 120, 0, 113, 97, 109, ++ 50, 53, 54, 101, 110, 0, 115, 119, 100, 105, 118, 95, 115, 119, 99, ++ 116, 114, 108, 95, 101, 110, 0, 116, 101, 109, 112, 95, 97, 100, 100, ++ 0, 105, 116, 115, 115, 105, 99, 111, 114, 114, 0, 115, 119, 100, 105, ++ 118, 95, 101, 110, 0, 101, 100, 111, 102, 102, 116, 104, 100, 50, 48, ++ 117, 108, 0, 105, 110, 105, 116, 120, 105, 100, 120, 112, 99, 104, 0, ++ 100, 115, 115, 102, 116, 104, 0, 116, 115, 115, 105, 116, 105, 109, ++ 101, 0, 99, 99, 107, 98, 119, 50, 48, 50, 103, 112, 111, 0, 0, 1, 0, ++ 108, 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, 3, 0, 65, 126, 0, 6, 0, ++ 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, 108, 9, 0, 0, 0, 0, 199, ++ 11, 0, 0, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 80, 81, 25, ++ 97, 0, 0, 9, 96, 63, 112, 2, 0, 113, 9, 38, 0, 192, 0, 10, 0, 26, 48, ++ 128, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, ++ 9, 0, 0, 113, 9, 0, 0, 0, 0, 205, 11, 0, 64, 8, 0, 63, 88, 23, 23, 60, ++ 25, 31, 31, 31, 31, 81, 81, 25, 97, 0, 0, 9, 96, 63, 112, 3, 0, 118, ++ 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, 3, 0, 65, 126, 0, 6, 0, 10, ++ 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, 118, 9, 0, 0, 0, 0, 211, 11, ++ 0, 128, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 81, 81, 25, 97, ++ 0, 0, 9, 96, 63, 112, 4, 0, 123, 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, ++ 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, ++ 0, 123, 9, 0, 0, 0, 0, 217, 11, 0, 192, 8, 0, 63, 88, 23, 23, 60, 25, ++ 31, 31, 31, 31, 81, 81, 25, 97, 0, 0, 9, 96, 63, 112, 5, 0, 128, 9, ++ 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, ++ 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, 128, 9, 0, 0, 0, 0, 224, 11, 0, ++ 0, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 81, 81, 25, 97, 0, ++ 0, 9, 96, 63, 112, 6, 0, 133, 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, ++ 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, ++ 0, 133, 9, 0, 0, 0, 0, 230, 11, 0, 64, 8, 0, 63, 88, 23, 23, 60, 25, ++ 31, 31, 31, 31, 81, 81, 25, 97, 0, 0, 9, 96, 63, 112, 7, 0, 138, 9, ++ 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, ++ 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, 138, 9, 0, 0, 0, 0, 236, 11, 0, ++ 128, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 81, 81, 25, 97, 0, ++ 0, 8, 96, 63, 112, 8, 0, 143, 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, ++ 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, ++ 0, 143, 9, 0, 0, 0, 0, 242, 11, 0, 192, 8, 0, 63, 88, 23, 23, 60, 25, ++ 31, 31, 31, 31, 82, 81, 25, 97, 0, 0, 8, 96, 63, 112, 9, 0, 148, 9, ++ 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, ++ 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, 148, 9, 0, 0, 0, 0, 249, 11, 0, ++ 0, 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 82, 81, 25, 97, 0, ++ 0, 8, 96, 63, 96, 10, 0, 153, 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, ++ 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, ++ 0, 153, 9, 0, 0, 0, 0, 255, 11, 0, 64, 8, 0, 63, 88, 23, 23, 60, 25, ++ 31, 31, 31, 31, 82, 81, 25, 97, 0, 0, 8, 96, 63, 96, 11, 0, 158, 9, ++ 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, ++ 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, 158, 9, 0, 0, 0, 0, 5, 12, 0, 128, ++ 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 82, 81, 25, 97, 0, 0, ++ 7, 96, 63, 96, 12, 0, 163, 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, ++ 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, ++ 163, 9, 0, 0, 0, 0, 11, 12, 0, 192, 8, 0, 63, 88, 23, 23, 60, 25, 31, ++ 31, 31, 31, 82, 81, 25, 97, 0, 0, 7, 96, 63, 96, 13, 0, 168, 9, 38, ++ 0, 192, 0, 10, 0, 26, 48, 128, 0, 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, ++ 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, 168, 9, 0, 0, 0, 0, 18, 12, 0, 0, ++ 8, 0, 63, 88, 23, 23, 60, 25, 31, 31, 31, 31, 82, 81, 25, 97, 0, 0, ++ 7, 96, 63, 96, 14, 0, 180, 9, 38, 0, 192, 0, 10, 0, 26, 48, 128, 0, ++ 3, 0, 65, 126, 0, 6, 0, 10, 217, 3, 39, 0, 19, 0, 0, 0, 176, 9, 0, 0, ++ 180, 9, 0, 0, 0, 0, 33, 12, 0, 0, 8, 0, 63, 88, 23, 23, 60, 25, 31, ++ 31, 31, 31, 83, 81, 25, 97, 0, 0, 7, 96, 63, 96, 112, 97, 50, 103, 97, ++ 48, 95, 50, 112, 119, 114, 0, 105, 110, 105, 116, 120, 105, 100, 120, ++ 0, 99, 99, 107, 112, 119, 114, 111, 102, 102, 115, 101, 116, 48, 0, ++ 116, 101, 109, 112, 95, 113, 0, 109, 99, 115, 50, 103, 112, 111, 49, ++ 0, 118, 98, 97, 116, 95, 109, 117, 108, 116, 0, 99, 99, 107, 105, 110, ++ 105, 116, 120, 105, 100, 120, 0, 65, 118, 86, 109, 105, 100, 95, 99, ++ 48, 0, 115, 114, 111, 109, 114, 101, 118, 0, 111, 102, 100, 109, 100, ++ 105, 103, 102, 105, 108, 116, 116, 121, 112, 101, 0, 101, 100, 111, ++ 110, 116, 104, 100, 50, 48, 108, 0, 108, 101, 103, 111, 102, 100, 109, ++ 98, 119, 50, 48, 50, 103, 112, 111, 0, 112, 97, 50, 103, 97, 48, 0, ++ 116, 120, 112, 119, 114, 111, 102, 102, 115, 101, 116, 50, 103, 0, 112, ++ 109, 97, 120, 0, 118, 98, 97, 116, 95, 113, 0, 6, 7, 63, 3, 138, 0, ++ 0, 0, 6, 7, 63, 3, 132, 0, 0, 0, 6, 7, 63, 3, 128, 0, 0, 0, 6, 7, 63, ++ 3, 123, 0, 0, 0, 6, 7, 63, 3, 119, 0, 0, 0, 6, 7, 63, 3, 114, 0, 0, ++ 0, 6, 7, 63, 3, 110, 0, 0, 0, 6, 7, 63, 3, 106, 0, 0, 0, 6, 7, 63, 3, ++ 103, 0, 0, 0, 6, 7, 63, 3, 99, 0, 0, 0, 6, 7, 63, 3, 97, 0, 0, 0, 6, ++ 7, 63, 3, 92, 0, 0, 0, 6, 7, 63, 3, 90, 0, 0, 0, 6, 7, 63, 3, 87, 0, ++ 0, 0, 6, 7, 63, 3, 84, 0, 0, 0, 6, 7, 63, 3, 81, 0, 0, 0, 6, 7, 63, ++ 3, 79, 0, 0, 0, 6, 7, 63, 3, 77, 0, 0, 0, 6, 7, 63, 3, 75, 0, 0, 0, ++ 6, 7, 63, 3, 72, 0, 0, 0, 6, 7, 63, 3, 70, 0, 0, 0, 6, 7, 63, 3, 68, ++ 0, 0, 0, 6, 7, 63, 3, 66, 0, 0, 0, 6, 7, 63, 3, 64, 0, 0, 0, 6, 7, 63, ++ 3, 63, 0, 0, 0, 6, 7, 63, 3, 61, 0, 0, 0, 6, 7, 63, 3, 59, 0, 0, 0, ++ 6, 7, 63, 3, 58, 0, 0, 0, 6, 7, 63, 3, 56, 0, 0, 0, 6, 7, 63, 3, 54, ++ 0, 0, 0, 6, 7, 63, 3, 53, 0, 0, 0, 6, 7, 63, 3, 52, 0, 0, 0, 6, 7, 63, ++ 3, 50, 0, 0, 0, 6, 7, 63, 3, 49, 0, 0, 0, 6, 7, 63, 3, 48, 0, 0, 0, ++ 6, 7, 62, 3, 47, 0, 0, 0, 6, 7, 60, 3, 47, 0, 0, 0, 6, 7, 59, 3, 47, ++ 0, 0, 0, 6, 7, 59, 3, 45, 0, 0, 0, 6, 7, 58, 3, 45, 0, 0, 0, 6, 7, 58, ++ 3, 44, 0, 0, 0, 6, 7, 58, 3, 43, 0, 0, 0, 6, 7, 58, 3, 41, 0, 0, 0, ++ 6, 7, 57, 3, 41, 0, 0, 0, 6, 7, 56, 3, 40, 0, 0, 0, 6, 7, 56, 3, 39, ++ 0, 0, 0, 6, 7, 56, 3, 38, 0, 0, 0, 6, 7, 56, 3, 37, 0, 0, 0, 6, 7, 56, ++ 3, 36, 0, 0, 0, 6, 7, 55, 3, 36, 0, 0, 0, 6, 7, 55, 3, 35, 0, 0, 0, ++ 6, 7, 55, 3, 34, 0, 0, 0, 6, 7, 55, 3, 33, 0, 0, 0, 6, 7, 53, 3, 33, ++ 0, 0, 0, 6, 7, 53, 3, 32, 0, 0, 0, 6, 7, 52, 3, 32, 0, 0, 0, 6, 7, 52, ++ 3, 31, 0, 0, 0, 6, 7, 50, 3, 31, 0, 0, 0, 6, 7, 51, 3, 30, 0, 0, 0, ++ 6, 7, 51, 3, 29, 0, 0, 0, 6, 7, 49, 3, 29, 0, 0, 0, 6, 7, 50, 3, 28, ++ 0, 0, 0, 6, 7, 48, 3, 28, 0, 0, 0, 6, 7, 47, 3, 28, 0, 0, 0, 6, 7, 45, ++ 3, 28, 0, 0, 0, 6, 7, 43, 3, 28, 0, 0, 0, 6, 7, 42, 3, 28, 0, 0, 0, ++ 6, 7, 41, 3, 28, 0, 0, 0, 6, 7, 40, 3, 28, 0, 0, 0, 6, 7, 40, 3, 27, ++ 0, 0, 0, 6, 7, 39, 3, 27, 0, 0, 0, 6, 7, 39, 3, 26, 0, 0, 0, 6, 7, 38, ++ 3, 26, 0, 0, 0, 6, 7, 36, 3, 26, 0, 0, 0, 6, 7, 35, 3, 26, 0, 0, 0, ++ 6, 7, 34, 3, 26, 0, 0, 0, 6, 7, 33, 3, 26, 0, 0, 0, 6, 7, 33, 3, 25, ++ 0, 0, 0, 6, 7, 32, 3, 25, 0, 0, 0, 6, 7, 31, 3, 25, 0, 0, 0, 6, 7, 30, ++ 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, ++ 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, ++ 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, ++ 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, ++ 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, ++ 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, ++ 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, ++ 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, ++ 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, ++ 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, ++ 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, ++ 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, ++ 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, ++ 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, ++ 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, ++ 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, ++ 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, ++ 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 7, 30, 3, 25, 0, 0, 0, 6, 15, ++ 63, 255, 98, 0, 0, 0, 6, 15, 63, 255, 94, 0, 0, 0, 6, 15, 63, 255, 89, ++ 0, 0, 0, 6, 15, 63, 255, 85, 0, 0, 0, 6, 15, 63, 255, 81, 0, 0, 0, 6, ++ 15, 63, 255, 77, 0, 0, 0, 6, 15, 63, 255, 74, 0, 0, 0, 6, 15, 63, 255, ++ 71, 0, 0, 0, 6, 15, 63, 255, 68, 0, 0, 0, 6, 15, 63, 255, 65, 0, 0, ++ 0, 6, 15, 63, 255, 62, 0, 0, 0, 6, 15, 63, 255, 60, 0, 0, 0, 6, 15, ++ 63, 255, 58, 0, 0, 0, 6, 15, 63, 255, 55, 0, 0, 0, 6, 15, 63, 255, 53, ++ 0, 0, 0, 6, 15, 63, 255, 51, 0, 0, 0, 6, 15, 63, 255, 50, 0, 0, 0, 6, ++ 15, 63, 255, 48, 0, 0, 0, 6, 15, 63, 255, 46, 0, 0, 0, 6, 15, 61, 255, ++ 46, 0, 0, 0, 6, 15, 57, 255, 47, 0, 0, 0, 6, 15, 58, 255, 45, 0, 0, ++ 0, 6, 15, 57, 255, 44, 0, 0, 0, 6, 15, 55, 255, 44, 0, 0, 0, 6, 15, ++ 54, 255, 43, 0, 0, 0, 6, 15, 54, 255, 42, 0, 0, 0, 6, 15, 53, 255, 41, ++ 0, 0, 0, 6, 15, 53, 255, 40, 0, 0, 0, 6, 15, 51, 255, 40, 0, 0, 0, 6, ++ 15, 49, 255, 40, 0, 0, 0, 6, 15, 48, 255, 39, 0, 0, 0, 6, 15, 47, 255, ++ 39, 0, 0, 0, 6, 15, 45, 255, 39, 0, 0, 0, 6, 15, 46, 255, 37, 0, 0, ++ 0, 6, 15, 44, 255, 37, 0, 0, 0, 6, 15, 43, 255, 37, 0, 0, 0, 6, 15, ++ 41, 255, 37, 0, 0, 0, 6, 15, 40, 255, 36, 0, 0, 0, 6, 15, 38, 255, 37, ++ 0, 0, 0, 6, 15, 36, 255, 38, 0, 0, 0, 6, 15, 34, 255, 38, 0, 0, 0, 6, ++ 15, 33, 255, 38, 0, 0, 0, 6, 15, 33, 255, 37, 0, 0, 0, 6, 15, 34, 255, ++ 35, 0, 0, 0, 6, 15, 32, 255, 35, 0, 0, 0, 6, 15, 31, 255, 35, 0, 0, ++ 0, 6, 15, 31, 255, 34, 0, 0, 0, 6, 15, 31, 255, 33, 0, 0, 0, 6, 15, ++ 28, 255, 34, 0, 0, 0, 6, 15, 28, 255, 33, 0, 0, 0, 6, 15, 28, 255, 32, ++ 0, 0, 0, 6, 15, 28, 255, 31, 0, 0, 0, 6, 15, 28, 255, 30, 0, 0, 0, 6, ++ 15, 26, 255, 31, 0, 0, 0, 6, 15, 26, 255, 30, 0, 0, 0, 6, 15, 25, 255, ++ 30, 0, 0, 0, 6, 15, 25, 255, 29, 0, 0, 0, 6, 15, 24, 255, 29, 0, 0, ++ 0, 6, 15, 24, 255, 28, 0, 0, 0, 6, 15, 22, 255, 29, 0, 0, 0, 6, 15, ++ 22, 255, 28, 0, 0, 0, 6, 15, 23, 255, 27, 0, 0, 0, 6, 15, 23, 255, 26, ++ 0, 0, 0, 6, 15, 23, 255, 25, 0, 0, 0, 6, 15, 22, 255, 25, 0, 0, 0, 6, ++ 15, 21, 255, 25, 0, 0, 0, 6, 15, 20, 255, 25, 0, 0, 0, 6, 15, 22, 255, ++ 23, 0, 0, 0, 6, 15, 21, 255, 23, 0, 0, 0, 6, 15, 23, 255, 21, 0, 0, ++ 0, 6, 15, 22, 255, 21, 0, 0, 0, 6, 15, 21, 255, 21, 0, 0, 0, 6, 15, ++ 20, 255, 21, 0, 0, 0, 6, 15, 21, 255, 20, 0, 0, 0, 6, 15, 20, 255, 20, ++ 0, 0, 0, 6, 15, 20, 255, 19, 0, 0, 0, 6, 15, 21, 255, 18, 0, 0, 0, 6, ++ 15, 18, 255, 19, 0, 0, 0, 6, 15, 19, 255, 18, 0, 0, 0, 6, 15, 18, 255, ++ 18, 0, 0, 0, 6, 15, 17, 255, 18, 0, 0, 0, 6, 15, 16, 255, 18, 0, 0, ++ 0, 6, 15, 13, 255, 20, 0, 0, 0, 6, 15, 15, 255, 18, 0, 0, 0, 6, 15, ++ 14, 255, 18, 0, 0, 0, 6, 15, 12, 255, 19, 0, 0, 0, 6, 15, 13, 255, 18, ++ 0, 0, 0, 6, 15, 12, 255, 18, 0, 0, 0, 6, 15, 11, 255, 19, 0, 0, 0, 6, ++ 15, 12, 255, 17, 0, 0, 0, 6, 15, 8, 255, 20, 0, 0, 0, 6, 15, 9, 255, ++ 19, 0, 0, 0, 6, 15, 8, 255, 19, 0, 0, 0, 6, 15, 10, 255, 17, 0, 0, 0, ++ 6, 15, 8, 255, 18, 0, 0, 0, 6, 15, 7, 255, 19, 0, 0, 0, 6, 15, 8, 255, ++ 17, 0, 0, 0, 6, 15, 7, 255, 18, 0, 0, 0, 6, 15, 7, 255, 17, 0, 0, 0, ++ 6, 15, 5, 255, 19, 0, 0, 0, 6, 15, 8, 255, 15, 0, 0, 0, 6, 15, 9, 255, ++ 14, 0, 0, 0, 6, 15, 8, 255, 14, 0, 0, 0, 6, 15, 7, 255, 15, 0, 0, 0, ++ 6, 15, 4, 255, 17, 0, 0, 0, 6, 15, 5, 255, 16, 0, 0, 0, 6, 15, 3, 255, ++ 18, 0, 0, 0, 6, 15, 4, 255, 16, 0, 0, 0, 6, 15, 1, 255, 20, 0, 0, 0, ++ 6, 15, 2, 255, 18, 0, 0, 0, 6, 15, 1, 255, 19, 0, 0, 0, 6, 15, 2, 255, ++ 17, 0, 0, 0, 6, 15, 1, 255, 18, 0, 0, 0, 6, 15, 2, 255, 16, 0, 0, 0, ++ 6, 15, 1, 255, 17, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, 6, 15, 1, 255, ++ 16, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, ++ 6, 15, 1, 255, 16, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, 6, 15, 1, 255, ++ 16, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, ++ 6, 15, 1, 255, 16, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, 6, 15, 1, 255, ++ 16, 0, 0, 0, 6, 15, 1, 255, 16, 0, 0, 0, 114, 97, 116, 101, 115, 101, ++ 108, 0, 115, 116, 102, 0, 99, 99, 107, 95, 111, 110, 101, 99, 111, 114, ++ 101, 95, 116, 120, 0, 116, 101, 109, 112, 115, 95, 112, 101, 114, 105, ++ 111, 100, 0, 116, 120, 99, 104, 97, 105, 110, 0, 114, 120, 99, 104, ++ 97, 105, 110, 0, 115, 119, 100, 105, 118, 95, 115, 110, 114, 116, 104, ++ 114, 101, 115, 104, 0, 115, 119, 100, 105, 118, 95, 116, 120, 95, 119, ++ 101, 105, 103, 104, 116, 0, 115, 119, 100, 105, 118, 95, 115, 110, 114, ++ 108, 105, 109, 0, 115, 119, 100, 105, 118, 95, 115, 119, 99, 116, 114, ++ 108, 95, 109, 97, 115, 107, 0, 115, 119, 100, 105, 118, 95, 116, 105, ++ 109, 101, 111, 117, 116, 0, 115, 119, 100, 105, 118, 95, 115, 119, 99, ++ 116, 114, 108, 95, 97, 110, 116, 48, 0, 115, 119, 100, 105, 118, 95, ++ 115, 119, 99, 116, 114, 108, 95, 97, 110, 116, 49, 0, 115, 119, 100, ++ 105, 118, 95, 119, 101, 105, 103, 104, 116, 0, 115, 119, 100, 105, 118, ++ 95, 115, 101, 116, 116, 108, 101, 0, 115, 119, 100, 105, 118, 95, 101, ++ 110, 0, 115, 119, 100, 105, 118, 95, 114, 120, 95, 112, 111, 108, 105, ++ 99, 121, 0, 115, 119, 100, 105, 118, 95, 116, 120, 95, 112, 111, 108, ++ 105, 99, 121, 0, 115, 119, 100, 105, 118, 95, 115, 119, 99, 116, 114, ++ 108, 95, 101, 110, 0, 115, 119, 100, 105, 118, 95, 116, 104, 114, 101, ++ 115, 104, 0, 115, 119, 100, 105, 118, 95, 103, 112, 105, 111, 95, 49, ++ 0, 115, 119, 100, 105, 118, 95, 99, 99, 107, 110, 111, 105, 115, 101, ++ 101, 115, 116, 108, 105, 109, 0, 115, 119, 100, 105, 118, 95, 108, 111, ++ 103, 50, 97, 118, 103, 0, 115, 119, 100, 105, 118, 95, 103, 112, 105, ++ 111, 0, 115, 119, 100, 105, 118, 95, 99, 101, 108, 108, 95, 112, 111, ++ 108, 105, 99, 121, 0, 115, 119, 100, 105, 118, 95, 99, 99, 107, 115, ++ 110, 114, 99, 111, 114, 114, 0, 115, 181, 67, 105, 22, 70, 0, 34, 47, ++ 43, 4, 70, 13, 70, 1, 146, 8, 221, 51, 43, 6, 208, 19, 70, 1, 33, 175, ++ 247, 141, 254, 131, 5, 155, 13, 7, 224, 0, 33, 32, 70, 10, 70, 175, ++ 247, 200, 254, 6, 75, 3, 64, 27, 12, 27, 2, 32, 70, 51, 96, 1, 169, ++ 42, 70, 0, 240, 5, 248, 1, 152, 124, 189, 0, 191, 0, 0, 255, 3, 248, ++ 181, 4, 70, 14, 70, 21, 70, 178, 243, 40, 247, 64, 246, 18, 1, 0, 34, ++ 7, 70, 32, 70, 179, 243, 97, 242, 32, 70, 178, 243, 38, 247, 32, 70, ++ 57, 70, 179, 243, 104, 242, 2, 75, 51, 96, 79, 244, 200, 99, 43, 96, ++ 248, 189, 116, 101, 6, 0, 11, 70, 192, 111, 17, 70, 26, 70, 255, 247, ++ 184, 191, 16, 181, 1, 33, 4, 70, 192, 111, 175, 247, 250, 254, 224, ++ 111, 179, 243, 125, 242, 0, 32, 16, 189, 55, 181, 0, 36, 105, 70, 1, ++ 170, 5, 70, 0, 148, 1, 148, 255, 247, 230, 255, 157, 232, 6, 0, 3, 70, ++ 40, 70, 234, 243, 174, 247, 32, 70, 62, 189, 56, 181, 4, 70, 192, 111, ++ 175, 247, 233, 254, 72, 177, 32, 70, 255, 247, 230, 255, 5, 70, 56, ++ 185, 32, 70, 255, 247, 214, 255, 40, 70, 56, 189, 79, 240, 255, 48, ++ 56, 189, 0, 32, 56, 189, 45, 233, 255, 65, 7, 70, 79, 244, 178, 112, ++ 14, 70, 21, 70, 152, 70, 175, 247, 77, 253, 4, 70, 0, 40, 50, 208, 0, ++ 33, 79, 244, 178, 114, 168, 243, 43, 241, 10, 155, 56, 70, 0, 147, 4, ++ 241, 128, 3, 1, 147, 4, 241, 132, 3, 2, 147, 49, 70, 42, 70, 67, 70, ++ 243, 247, 175, 249, 224, 103, 192, 177, 1, 35, 99, 116, 64, 246, 18, ++ 1, 0, 34, 179, 243, 242, 241, 12, 33, 0, 34, 196, 248, 136, 0, 224, ++ 111, 178, 243, 159, 246, 32, 70, 246, 247, 160, 252, 32, 70, 255, 247, ++ 181, 255, 224, 111, 242, 247, 84, 255, 0, 37, 0, 224, 11, 37, 32, 70, ++ 175, 247, 27, 253, 0, 224, 30, 37, 40, 70, 4, 176, 189, 232, 240, 129, ++ 75, 172, 0, 0, 1, 188, 96, 3, 0, 16, 78, 3, 191, 222, 2, 240, 14, 85, ++ 2, 128, 193, 39, 0, 0, 4, 3, 191, 222, 2, 240, 16, 82, 3, 168, 94, 2, ++ 240, 0, 18, 3, 166, 94, 2, 240, 0, 18, 2, 130, 94, 83, 0, 0, 18, 2, ++ 133, 94, 175, 0, 0, 18, 2, 2, 0, 191, 0, 0, 15, 3, 168, 94, 2, 240, ++ 0, 18, 2, 130, 222, 187, 0, 0, 18, 2, 130, 222, 179, 0, 0, 18, 2, 132, ++ 94, 183, 0, 0, 18, 2, 132, 94, 179, 0, 0, 18, 2, 134, 0, 199, 0, 0, ++ 18, 2, 132, 128, 195, 0, 0, 18, 1, 188, 99, 255, 31, 240, 64, 0, 0, ++ 128, 0, 0, 0, 0, 3, 91, 94, 2, 240, 0, 20, 1, 188, 96, 19, 0, 16, 67, ++ 0, 1, 94, 2, 240, 0, 0, 0, 2, 94, 2, 240, 24, 62, 2, 2, 0, 191, 0, 0, ++ 180, 2, 4, 94, 255, 0, 0, 27, 0, 107, 68, 101, 86, 128, 27, 1, 132, ++ 96, 2, 247, 247, 191, 1, 188, 96, 3, 0, 10, 166, 0, 2, 94, 2, 240, 18, ++ 48, 2, 2, 222, 255, 0, 0, 32, 0, 107, 68, 101, 85, 32, 32, 1, 130, 224, ++ 2, 247, 247, 191, 3, 191, 222, 2, 240, 6, 196, 2, 1, 172, 123, 0, 0, ++ 37, 0, 232, 68, 101, 97, 119, 161, 1, 188, 96, 127, 8, 23, 162, 0, 109, ++ 94, 134, 244, 64, 37, 0, 168, 44, 123, 1, 11, 30, 0, 104, 43, 79, 0, ++ 0, 42, 2, 128, 222, 255, 0, 0, 180, 0, 107, 68, 101, 90, 96, 180, 1, ++ 132, 224, 6, 245, 119, 171, 0, 2, 94, 2, 240, 21, 155, 2, 4, 128, 199, ++ 0, 0, 44, 2, 129, 128, 199, 0, 0, 46, 1, 128, 96, 2, 247, 247, 191, ++ 1, 188, 96, 3, 0, 10, 218, 0, 144, 43, 227, 0, 215, 162, 0, 224, 43, ++ 222, 244, 87, 163, 0, 109, 68, 106, 244, 96, 50, 0, 176, 43, 215, 0, ++ 10, 240, 1, 135, 96, 2, 247, 247, 191, 0, 104, 43, 191, 0, 0, 58, 0, ++ 233, 68, 101, 93, 247, 163, 0, 232, 196, 105, 94, 119, 162, 0, 104, ++ 222, 139, 0, 0, 58, 0, 109, 222, 141, 94, 0, 58, 2, 134, 171, 211, 0, ++ 0, 58, 1, 135, 96, 6, 247, 247, 191, 2, 7, 222, 255, 0, 0, 63, 0, 232, ++ 68, 101, 90, 55, 162, 0, 109, 94, 137, 90, 0, 63, 1, 135, 224, 2, 247, ++ 247, 191, 1, 188, 96, 3, 0, 10, 209, 0, 104, 44, 111, 0, 0, 69, 1, 188, ++ 97, 247, 0, 23, 161, 0, 232, 68, 101, 99, 119, 162, 0, 109, 94, 138, ++ 244, 32, 69, 1, 188, 96, 3, 0, 11, 27, 0, 168, 44, 123, 0, 43, 30, 0, ++ 104, 42, 231, 0, 0, 81, 0, 232, 68, 101, 87, 55, 161, 0, 109, 222, 133, ++ 86, 64, 76, 0, 104, 43, 35, 0, 0, 81, 0, 232, 68, 101, 89, 23, 161, ++ 0, 109, 222, 133, 86, 64, 78, 3, 191, 222, 2, 240, 0, 81, 1, 188, 96, ++ 3, 0, 10, 186, 1, 188, 96, 3, 0, 10, 185, 1, 188, 96, 3, 0, 10, 200, ++ 1, 188, 96, 3, 0, 10, 192, 0, 168, 44, 123, 0, 75, 30, 2, 2, 222, 179, ++ 0, 0, 84, 2, 0, 66, 3, 0, 0, 84, 0, 2, 94, 2, 240, 13, 40, 2, 3, 197, ++ 115, 0, 0, 87, 2, 132, 94, 179, 0, 0, 180, 0, 104, 170, 239, 0, 0, 180, ++ 2, 132, 222, 183, 0, 0, 89, 2, 1, 128, 199, 0, 0, 121, 0, 176, 42, 171, ++ 0, 23, 162, 2, 128, 43, 211, 0, 0, 96, 0, 176, 43, 3, 0, 23, 161, 0, ++ 109, 222, 133, 91, 224, 171, 0, 104, 94, 135, 0, 0, 96, 0, 104, 43, ++ 231, 0, 0, 96, 0, 176, 43, 231, 0, 23, 162, 0, 104, 42, 235, 0, 0, 102, ++ 0, 232, 68, 101, 87, 87, 161, 1, 133, 96, 6, 245, 215, 174, 0, 109, ++ 222, 134, 244, 64, 171, 0, 224, 94, 133, 84, 247, 161, 0, 109, 222, ++ 134, 244, 64, 171, 1, 133, 96, 2, 245, 215, 174, 2, 2, 222, 187, 0, ++ 0, 121, 0, 104, 42, 155, 0, 0, 121, 0, 232, 68, 101, 85, 215, 161, 0, ++ 224, 42, 155, 1, 87, 162, 0, 110, 222, 134, 244, 64, 114, 1, 130, 224, ++ 2, 245, 215, 174, 1, 129, 96, 1, 99, 203, 30, 1, 188, 96, 3, 0, 10, ++ 234, 1, 188, 96, 3, 0, 10, 166, 1, 188, 96, 3, 0, 10, 229, 3, 191, 222, ++ 2, 240, 0, 121, 0, 110, 170, 154, 244, 32, 120, 0, 232, 42, 154, 244, ++ 55, 161, 0, 144, 42, 155, 0, 55, 162, 0, 110, 42, 158, 244, 64, 119, ++ 0, 176, 42, 159, 0, 23, 162, 0, 105, 222, 134, 244, 64, 121, 3, 191, ++ 222, 2, 240, 0, 171, 2, 132, 222, 183, 0, 0, 158, 2, 136, 129, 171, ++ 0, 0, 156, 2, 4, 94, 183, 0, 0, 180, 2, 4, 128, 199, 0, 0, 133, 0, 104, ++ 42, 247, 0, 32, 133, 0, 104, 42, 247, 0, 128, 133, 0, 104, 42, 223, ++ 0, 0, 132, 0, 104, 42, 247, 2, 224, 130, 0, 104, 170, 247, 8, 96, 132, ++ 0, 232, 68, 101, 86, 55, 161, 0, 109, 94, 133, 86, 224, 180, 2, 0, 94, ++ 255, 0, 0, 156, 2, 128, 128, 191, 0, 0, 156, 0, 104, 43, 35, 0, 0, 139, ++ 2, 128, 43, 211, 0, 0, 139, 0, 176, 43, 43, 0, 23, 187, 0, 110, 43, ++ 2, 247, 96, 180, 3, 191, 222, 2, 240, 0, 156, 2, 5, 222, 183, 0, 0, ++ 142, 0, 104, 42, 247, 8, 96, 180, 3, 191, 222, 2, 240, 0, 156, 2, 132, ++ 0, 199, 0, 0, 144, 2, 134, 0, 199, 0, 0, 146, 0, 104, 42, 235, 0, 0, ++ 156, 2, 129, 44, 39, 0, 0, 156, 0, 232, 68, 101, 86, 55, 161, 2, 6, ++ 171, 211, 0, 0, 150, 0, 232, 69, 201, 90, 247, 162, 3, 191, 222, 2, ++ 240, 0, 151, 0, 232, 69, 137, 90, 247, 162, 2, 134, 171, 211, 0, 0, ++ 154, 0, 232, 94, 134, 244, 87, 161, 0, 105, 222, 133, 87, 0, 156, 0, ++ 108, 196, 101, 86, 96, 180, 2, 133, 94, 183, 0, 0, 180, 0, 2, 94, 2, ++ 240, 21, 197, 3, 191, 222, 2, 240, 0, 180, 2, 133, 171, 211, 0, 0, 165, ++ 2, 6, 171, 211, 0, 0, 163, 1, 188, 99, 255, 31, 247, 161, 0, 104, 69, ++ 198, 244, 32, 156, 3, 191, 222, 2, 240, 0, 165, 1, 188, 99, 255, 31, ++ 247, 161, 0, 104, 69, 134, 244, 32, 156, 2, 3, 197, 115, 0, 0, 171, ++ 2, 133, 94, 183, 0, 0, 171, 2, 1, 0, 199, 0, 0, 180, 0, 107, 68, 101, ++ 86, 128, 180, 0, 32, 227, 254, 20, 96, 180, 2, 130, 222, 187, 0, 0, ++ 180, 2, 2, 44, 39, 0, 0, 174, 2, 130, 222, 187, 0, 0, 174, 3, 191, 222, ++ 2, 240, 0, 156, 2, 136, 129, 171, 0, 0, 180, 2, 130, 222, 179, 0, 0, ++ 180, 2, 128, 128, 191, 0, 0, 180, 2, 132, 222, 175, 0, 0, 180, 2, 130, ++ 94, 187, 0, 0, 180, 0, 2, 94, 2, 240, 21, 248, 1, 128, 96, 2, 13, 144, ++ 108, 3, 89, 94, 2, 240, 0, 182, 3, 216, 94, 2, 240, 0, 183, 3, 216, ++ 222, 2, 240, 0, 184, 1, 188, 97, 131, 0, 17, 41, 0, 176, 0, 123, 0, ++ 17, 43, 1, 188, 99, 3, 0, 17, 35, 3, 18, 94, 2, 240, 12, 171, 3, 151, ++ 94, 2, 240, 13, 60, 3, 208, 94, 2, 240, 3, 145, 3, 208, 222, 2, 240, ++ 6, 65, 3, 213, 222, 2, 240, 12, 93, 3, 145, 94, 2, 240, 6, 156, 3, 150, ++ 222, 2, 240, 12, 88, 2, 136, 193, 115, 0, 1, 35, 3, 196, 94, 2, 240, ++ 8, 17, 3, 199, 94, 2, 240, 8, 51, 3, 220, 222, 2, 240, 22, 63, 3, 170, ++ 94, 2, 240, 8, 163, 3, 134, 222, 2, 240, 12, 156, 2, 135, 192, 55, 0, ++ 12, 156, 3, 131, 94, 2, 240, 10, 79, 2, 6, 128, 199, 0, 0, 208, 2, 2, ++ 176, 195, 0, 0, 208, 0, 108, 48, 202, 35, 32, 208, 1, 130, 224, 1, 134, ++ 12, 48, 1, 188, 96, 127, 31, 247, 162, 1, 224, 94, 138, 16, 112, 131, ++ 3, 145, 222, 2, 240, 7, 33, 2, 6, 128, 199, 0, 1, 7, 2, 6, 1, 171, 0, ++ 0, 227, 2, 0, 48, 195, 0, 0, 227, 0, 104, 222, 75, 6, 32, 227, 2, 0, ++ 66, 3, 0, 0, 227, 2, 132, 69, 35, 0, 0, 227, 2, 128, 176, 195, 0, 0, ++ 227, 0, 110, 69, 23, 0, 32, 227, 1, 188, 96, 3, 0, 16, 128, 0, 168, ++ 65, 35, 0, 240, 72, 3, 208, 222, 2, 240, 0, 220, 3, 208, 94, 2, 240, ++ 0, 221, 3, 213, 222, 2, 240, 0, 222, 0, 224, 1, 223, 0, 32, 119, 1, ++ 128, 224, 5, 134, 12, 48, 1, 188, 96, 3, 0, 12, 49, 0, 2, 94, 2, 240, ++ 24, 25, 0, 2, 94, 2, 240, 24, 45, 2, 14, 1, 171, 0, 0, 240, 2, 132, ++ 69, 35, 0, 0, 240, 2, 1, 48, 195, 0, 0, 240, 0, 224, 1, 227, 0, 32, ++ 120, 1, 129, 96, 1, 134, 12, 48, 1, 128, 224, 1, 134, 12, 48, 1, 12, ++ 129, 67, 0, 23, 166, 0, 104, 222, 155, 0, 96, 237, 1, 188, 96, 3, 0, ++ 76, 49, 3, 191, 222, 2, 240, 0, 239, 0, 104, 222, 155, 0, 64, 239, 1, ++ 188, 96, 3, 0, 44, 49, 0, 2, 94, 2, 240, 24, 25, 2, 6, 129, 171, 0, ++ 1, 7, 2, 2, 48, 195, 0, 0, 251, 2, 128, 66, 3, 0, 0, 251, 2, 132, 69, ++ 35, 0, 0, 251, 3, 145, 94, 2, 240, 6, 156, 0, 224, 1, 235, 0, 32, 122, ++ 1, 128, 224, 5, 134, 12, 48, 1, 130, 96, 1, 134, 12, 48, 1, 188, 96, ++ 3, 0, 12, 49, 0, 2, 94, 2, 240, 24, 25, 0, 2, 94, 2, 240, 24, 45, 2, ++ 1, 176, 195, 0, 0, 254, 0, 108, 48, 206, 35, 32, 254, 1, 129, 224, 1, ++ 134, 12, 48, 2, 3, 48, 195, 0, 1, 7, 0, 108, 48, 210, 35, 33, 7, 1, ++ 131, 96, 1, 134, 12, 48, 2, 0, 66, 3, 0, 1, 7, 0, 104, 94, 75, 4, 65, ++ 5, 0, 104, 94, 75, 0, 65, 5, 3, 191, 222, 2, 240, 1, 7, 1, 130, 96, ++ 6, 9, 16, 72, 1, 188, 96, 3, 0, 17, 69, 3, 194, 222, 2, 240, 13, 3, ++ 0, 2, 94, 2, 240, 18, 47, 3, 212, 222, 2, 240, 7, 186, 3, 163, 222, ++ 2, 240, 0, 2, 3, 200, 94, 2, 240, 5, 255, 2, 4, 222, 179, 0, 1, 16, ++ 2, 1, 69, 35, 0, 1, 16, 1, 132, 224, 2, 245, 151, 172, 0, 2, 94, 2, ++ 240, 6, 59, 2, 1, 197, 35, 0, 1, 18, 1, 135, 224, 2, 245, 119, 171, ++ 0, 2, 94, 2, 240, 14, 168, 0, 2, 94, 2, 240, 17, 112, 2, 24, 46, 3, ++ 0, 1, 22, 0, 2, 94, 2, 240, 17, 131, 3, 162, 94, 2, 240, 1, 32, 3, 86, ++ 94, 2, 240, 1, 29, 1, 134, 96, 6, 9, 16, 72, 3, 31, 94, 2, 240, 1, 29, ++ 0, 106, 94, 35, 0, 1, 28, 0, 176, 0, 39, 0, 23, 136, 0, 232, 94, 35, ++ 0, 55, 136, 3, 166, 94, 2, 240, 1, 142, 0, 2, 94, 2, 240, 17, 241, 0, ++ 40, 96, 14, 8, 225, 180, 3, 196, 222, 2, 240, 13, 115, 0, 32, 194, 3, ++ 0, 33, 188, 3, 191, 222, 2, 240, 2, 13, 3, 129, 94, 2, 240, 1, 37, 3, ++ 0, 222, 2, 240, 0, 195, 1, 136, 224, 2, 11, 144, 92, 3, 191, 222, 2, ++ 240, 3, 142, 2, 135, 64, 99, 0, 1, 39, 1, 142, 224, 14, 244, 48, 24, ++ 2, 135, 64, 99, 0, 1, 41, 0, 2, 222, 2, 240, 0, 0, 2, 135, 64, 99, 0, ++ 1, 43, 0, 176, 94, 139, 0, 16, 25, 1, 142, 224, 10, 244, 48, 24, 0, ++ 2, 222, 2, 240, 0, 0, 1, 188, 96, 99, 0, 16, 123, 1, 188, 96, 27, 0, ++ 16, 122, 1, 172, 96, 126, 244, 112, 117, 2, 135, 65, 215, 0, 1, 50, ++ 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 99, 0, 16, 123, 1, 188, 96, 27, ++ 0, 16, 122, 1, 172, 96, 190, 244, 112, 117, 2, 135, 65, 215, 0, 1, 55, ++ 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 99, 0, 16, 123, 0, 176, 94, 139, ++ 0, 16, 122, 1, 172, 96, 126, 244, 48, 117, 2, 135, 65, 215, 0, 1, 60, ++ 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 99, 0, 16, 123, 0, 176, 94, 139, ++ 0, 16, 122, 1, 172, 96, 190, 244, 48, 117, 2, 135, 65, 215, 0, 1, 65, ++ 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 3, 2, 128, 6, 2, 128, 222, 7, 0, ++ 1, 77, 1, 218, 96, 2, 240, 23, 128, 2, 8, 94, 7, 0, 1, 97, 1, 188, 96, ++ 3, 30, 23, 161, 0, 224, 94, 2, 244, 48, 101, 1, 188, 96, 3, 28, 23, ++ 161, 0, 224, 94, 2, 244, 48, 100, 1, 188, 96, 3, 0, 40, 17, 3, 191, ++ 222, 2, 240, 1, 103, 1, 16, 94, 3, 0, 23, 161, 1, 3, 94, 3, 0, 23, 162, ++ 0, 224, 94, 134, 244, 87, 161, 0, 136, 94, 135, 0, 55, 162, 0, 224, ++ 94, 134, 244, 87, 161, 0, 224, 1, 90, 244, 48, 99, 2, 134, 0, 195, 0, ++ 1, 88, 0, 176, 86, 11, 0, 16, 98, 0, 176, 84, 3, 0, 16, 98, 1, 188, ++ 96, 3, 0, 40, 17, 3, 191, 222, 2, 240, 1, 105, 0, 176, 65, 143, 0, 16, ++ 98, 1, 9, 222, 3, 0, 23, 161, 0, 104, 222, 135, 0, 65, 92, 0, 224, 94, ++ 135, 0, 55, 161, 0, 136, 94, 135, 0, 87, 161, 0, 224, 94, 133, 4, 183, ++ 161, 0, 224, 94, 135, 3, 192, 6, 1, 188, 96, 3, 0, 72, 17, 3, 191, 222, ++ 2, 240, 1, 105, 1, 188, 96, 7, 2, 23, 161, 0, 224, 94, 2, 244, 48, 101, ++ 1, 188, 96, 7, 0, 23, 161, 0, 224, 94, 2, 244, 48, 100, 1, 188, 96, ++ 3, 24, 0, 6, 1, 188, 96, 3, 0, 8, 17, 0, 176, 90, 3, 0, 16, 98, 0, 176, ++ 88, 3, 0, 16, 99, 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 3, 6, 55, 146, ++ 1, 188, 99, 255, 31, 240, 195, 1, 188, 96, 3, 24, 144, 227, 1, 188, ++ 96, 251, 28, 16, 229, 1, 188, 96, 3, 0, 80, 16, 0, 176, 64, 67, 0, 24, ++ 0, 0, 176, 64, 71, 0, 16, 231, 0, 2, 222, 2, 240, 0, 0, 0, 232, 64, ++ 51, 0, 151, 161, 0, 176, 64, 11, 0, 23, 163, 0, 109, 94, 134, 244, 97, ++ 119, 0, 144, 94, 143, 0, 55, 163, 3, 191, 222, 2, 240, 1, 120, 0, 144, ++ 94, 135, 0, 55, 163, 1, 188, 96, 27, 4, 55, 161, 0, 224, 94, 142, 244, ++ 55, 163, 1, 240, 65, 151, 0, 23, 161, 0, 109, 222, 134, 244, 97, 140, ++ 2, 135, 193, 151, 0, 1, 128, 1, 56, 90, 3, 0, 23, 161, 1, 60, 90, 3, ++ 0, 23, 162, 3, 191, 222, 2, 240, 1, 130, 1, 60, 90, 3, 0, 23, 161, 1, ++ 56, 90, 7, 0, 23, 162, 0, 104, 94, 134, 244, 129, 135, 0, 216, 94, 139, ++ 0, 55, 162, 0, 225, 65, 150, 244, 80, 101, 0, 225, 193, 151, 0, 48, ++ 101, 3, 191, 222, 2, 240, 1, 122, 0, 216, 94, 139, 0, 55, 162, 0, 225, ++ 65, 150, 244, 87, 161, 0, 225, 222, 135, 0, 55, 161, 1, 240, 94, 135, ++ 0, 23, 161, 0, 110, 222, 134, 244, 97, 141, 1, 188, 99, 255, 31, 247, ++ 164, 0, 2, 222, 2, 240, 0, 0, 2, 6, 129, 171, 0, 1, 144, 1, 130, 96, ++ 1, 134, 12, 48, 0, 32, 227, 142, 9, 0, 2, 3, 30, 222, 2, 240, 1, 150, ++ 3, 159, 94, 2, 240, 1, 150, 1, 188, 96, 67, 1, 23, 161, 0, 168, 65, ++ 34, 244, 48, 72, 3, 191, 222, 2, 240, 0, 2, 2, 8, 65, 31, 0, 1, 147, ++ 1, 129, 96, 5, 97, 11, 8, 0, 2, 94, 2, 240, 13, 40, 0, 176, 0, 171, ++ 0, 16, 134, 0, 176, 1, 99, 0, 16, 138, 0, 2, 94, 2, 240, 16, 108, 1, ++ 188, 96, 3, 4, 23, 146, 0, 176, 0, 59, 0, 17, 29, 1, 144, 96, 6, 9, ++ 16, 72, 3, 161, 222, 2, 240, 1, 174, 1, 129, 224, 6, 9, 16, 72, 1, 188, ++ 96, 3, 0, 144, 66, 1, 188, 96, 3, 0, 17, 45, 3, 158, 222, 2, 240, 1, ++ 177, 1, 132, 96, 2, 242, 151, 148, 0, 176, 69, 23, 0, 23, 143, 0, 176, ++ 94, 23, 0, 23, 144, 2, 0, 68, 31, 0, 1, 170, 1, 133, 96, 2, 9, 16, 72, ++ 1, 129, 96, 7, 0, 16, 71, 1, 240, 222, 15, 0, 55, 161, 2, 4, 0, 191, ++ 0, 1, 173, 1, 240, 132, 199, 0, 55, 161, 0, 160, 68, 182, 244, 49, 69, ++ 3, 158, 222, 2, 240, 1, 177, 1, 188, 97, 55, 18, 176, 128, 3, 191, 222, ++ 2, 240, 0, 2, 0, 160, 68, 180, 42, 49, 69, 1, 188, 97, 39, 18, 112, ++ 128, 3, 191, 222, 2, 240, 0, 2, 0, 32, 224, 130, 9, 0, 2, 1, 12, 222, ++ 83, 0, 23, 161, 1, 136, 94, 135, 0, 16, 71, 1, 188, 96, 3, 0, 80, 66, ++ 1, 8, 65, 31, 0, 23, 161, 1, 140, 222, 134, 242, 151, 148, 3, 191, 222, ++ 2, 240, 0, 2, 0, 2, 222, 2, 240, 0, 0, 0, 32, 224, 126, 9, 0, 2, 0, ++ 2, 94, 2, 240, 17, 251, 2, 131, 194, 31, 0, 0, 2, 2, 2, 128, 243, 0, ++ 1, 198, 0, 176, 68, 103, 0, 23, 161, 1, 124, 94, 134, 35, 87, 163, 2, ++ 131, 94, 255, 0, 1, 197, 0, 224, 0, 250, 244, 104, 41, 1, 131, 96, 6, ++ 247, 247, 191, 0, 107, 222, 141, 5, 33, 202, 2, 6, 208, 3, 0, 1, 206, ++ 0, 233, 80, 134, 35, 55, 161, 0, 232, 208, 138, 35, 87, 162, 0, 105, ++ 222, 139, 0, 1, 206, 0, 2, 94, 2, 240, 13, 40, 1, 145, 96, 22, 132, ++ 244, 39, 0, 224, 32, 167, 0, 136, 41, 3, 191, 222, 2, 240, 3, 107, 0, ++ 2, 94, 2, 240, 3, 110, 2, 4, 0, 191, 0, 1, 214, 3, 148, 94, 2, 240, ++ 0, 2, 0, 32, 194, 143, 6, 0, 2, 0, 160, 66, 143, 1, 247, 128, 0, 104, ++ 94, 0, 45, 192, 2, 0, 2, 94, 2, 240, 13, 40, 3, 191, 222, 2, 240, 0, ++ 18, 2, 1, 194, 143, 0, 0, 2, 1, 20, 0, 99, 0, 23, 161, 0, 104, 94, 135, ++ 0, 96, 2, 0, 2, 94, 2, 240, 13, 40, 1, 148, 96, 15, 0, 0, 24, 0, 2, ++ 94, 2, 240, 1, 221, 3, 191, 222, 2, 240, 0, 18, 1, 20, 0, 99, 0, 23, ++ 161, 0, 176, 94, 135, 0, 16, 165, 1, 188, 96, 19, 27, 144, 96, 0, 104, ++ 94, 135, 0, 1, 228, 0, 224, 65, 131, 6, 208, 96, 0, 232, 94, 135, 0, ++ 55, 161, 3, 191, 222, 2, 240, 1, 224, 2, 128, 80, 195, 0, 1, 242, 1, ++ 135, 96, 4, 3, 16, 160, 0, 176, 0, 99, 0, 16, 180, 0, 176, 66, 211, ++ 0, 24, 0, 0, 136, 65, 131, 0, 48, 182, 1, 188, 96, 3, 11, 16, 181, 0, ++ 176, 0, 99, 0, 176, 180, 3, 23, 222, 2, 240, 1, 235, 3, 151, 222, 2, ++ 240, 1, 236, 1, 128, 96, 6, 134, 20, 48, 0, 104, 208, 211, 0, 1, 242, ++ 0, 104, 208, 215, 0, 1, 242, 0, 176, 68, 103, 0, 20, 52, 0, 176, 68, ++ 107, 0, 20, 53, 0, 2, 222, 2, 240, 0, 0, 0, 32, 224, 18, 128, 66, 12, ++ 1, 135, 96, 4, 3, 16, 160, 0, 176, 0, 99, 0, 16, 180, 1, 188, 96, 3, ++ 14, 16, 181, 0, 176, 0, 99, 0, 240, 180, 1, 188, 96, 87, 3, 16, 182, ++ 0, 176, 0, 99, 0, 16, 180, 1, 188, 96, 3, 2, 208, 181, 2, 7, 80, 11, ++ 0, 2, 9, 1, 188, 96, 3, 3, 208, 181, 1, 142, 96, 2, 242, 151, 148, 2, ++ 4, 80, 11, 0, 2, 2, 2, 4, 208, 11, 0, 2, 2, 1, 134, 96, 6, 242, 151, ++ 148, 0, 224, 66, 215, 0, 208, 181, 0, 160, 80, 11, 17, 23, 161, 0, 104, ++ 222, 135, 17, 2, 8, 1, 134, 224, 6, 242, 151, 148, 0, 224, 66, 215, ++ 0, 80, 181, 2, 7, 208, 11, 0, 2, 8, 0, 224, 66, 215, 0, 144, 181, 0, ++ 176, 66, 215, 0, 17, 225, 0, 176, 0, 99, 0, 176, 180, 3, 23, 222, 2, ++ 240, 2, 10, 3, 151, 222, 2, 240, 2, 11, 0, 2, 222, 2, 240, 0, 0, 0, ++ 104, 32, 195, 0, 2, 16, 0, 108, 196, 101, 6, 0, 18, 1, 188, 96, 3, 0, ++ 8, 48, 0, 104, 32, 187, 0, 2, 19, 0, 108, 196, 101, 5, 224, 18, 1, 188, ++ 96, 3, 0, 8, 46, 0, 32, 224, 190, 9, 0, 2, 2, 6, 129, 171, 0, 2, 23, ++ 2, 129, 176, 195, 0, 0, 2, 2, 128, 176, 195, 0, 0, 2, 3, 144, 94, 2, ++ 240, 0, 18, 3, 162, 94, 2, 240, 2, 41, 0, 2, 94, 2, 240, 17, 92, 2, ++ 2, 0, 191, 0, 2, 40, 2, 132, 222, 175, 0, 2, 32, 2, 4, 94, 183, 0, 2, ++ 40, 0, 2, 94, 2, 240, 21, 105, 2, 4, 94, 183, 0, 2, 40, 3, 191, 222, ++ 2, 240, 0, 2, 2, 4, 94, 183, 0, 2, 35, 2, 4, 128, 199, 0, 2, 40, 2, ++ 128, 94, 255, 0, 2, 40, 0, 2, 94, 2, 240, 21, 18, 2, 6, 171, 211, 0, ++ 2, 39, 2, 5, 44, 35, 0, 2, 39, 3, 191, 222, 2, 240, 2, 40, 3, 191, 222, ++ 2, 240, 0, 2, 0, 2, 94, 2, 240, 17, 251, 2, 0, 66, 31, 0, 2, 64, 0, ++ 104, 66, 243, 0, 2, 44, 0, 109, 66, 243, 0, 98, 64, 1, 20, 0, 99, 0, ++ 23, 161, 0, 176, 94, 135, 0, 23, 162, 3, 162, 94, 2, 240, 2, 52, 3, ++ 20, 94, 2, 240, 2, 66, 0, 110, 196, 86, 128, 98, 66, 2, 129, 69, 35, ++ 0, 2, 66, 0, 110, 94, 135, 0, 98, 64, 1, 188, 96, 3, 0, 119, 162, 0, ++ 136, 96, 6, 244, 87, 163, 0, 136, 94, 139, 1, 0, 24, 0, 232, 94, 139, ++ 0, 55, 162, 0, 32, 194, 142, 244, 98, 58, 0, 106, 222, 134, 244, 66, ++ 52, 3, 191, 222, 2, 240, 2, 64, 2, 4, 0, 191, 0, 2, 108, 0, 144, 0, ++ 99, 1, 1, 101, 0, 128, 133, 151, 2, 23, 161, 0, 224, 100, 130, 13, 161, ++ 102, 0, 2, 94, 2, 240, 17, 216, 3, 191, 222, 2, 240, 2, 108, 1, 130, ++ 96, 2, 9, 16, 72, 3, 191, 222, 2, 240, 0, 2, 1, 188, 96, 3, 0, 17, 21, ++ 0, 176, 1, 127, 0, 23, 166, 3, 31, 94, 2, 240, 2, 81, 2, 3, 0, 195, ++ 0, 2, 71, 0, 32, 194, 143, 2, 2, 75, 3, 37, 94, 2, 240, 2, 81, 0, 32, ++ 194, 143, 2, 2, 75, 0, 104, 129, 83, 255, 224, 18, 3, 191, 222, 2, 240, ++ 2, 77, 1, 148, 96, 19, 0, 0, 24, 3, 191, 222, 2, 240, 2, 108, 3, 158, ++ 222, 2, 240, 2, 80, 0, 104, 222, 152, 11, 194, 80, 2, 1, 65, 31, 0, ++ 15, 30, 1, 133, 96, 2, 9, 16, 72, 0, 104, 94, 152, 11, 194, 85, 0, 105, ++ 94, 159, 0, 98, 111, 2, 152, 66, 143, 0, 2, 85, 3, 191, 222, 2, 240, ++ 2, 111, 2, 1, 65, 31, 0, 15, 30, 2, 4, 0, 191, 0, 2, 92, 2, 24, 66, ++ 143, 0, 15, 30, 0, 2, 94, 2, 240, 17, 186, 0, 2, 94, 2, 240, 17, 216, ++ 1, 148, 5, 135, 0, 0, 24, 3, 191, 222, 2, 240, 2, 108, 2, 0, 21, 11, ++ 0, 2, 101, 2, 0, 22, 187, 0, 2, 104, 0, 176, 20, 151, 0, 23, 161, 0, ++ 104, 222, 132, 178, 34, 101, 0, 176, 20, 155, 0, 23, 161, 0, 104, 222, ++ 132, 178, 66, 101, 0, 176, 20, 159, 0, 23, 161, 0, 104, 222, 132, 178, ++ 98, 101, 2, 158, 20, 231, 0, 2, 104, 2, 1, 194, 143, 0, 2, 106, 1, 148, ++ 96, 15, 0, 0, 24, 3, 191, 222, 2, 240, 2, 108, 2, 1, 194, 143, 0, 2, ++ 106, 1, 128, 96, 6, 13, 144, 108, 2, 0, 194, 143, 0, 15, 30, 1, 148, ++ 96, 7, 0, 0, 24, 0, 2, 94, 2, 240, 1, 221, 2, 4, 0, 191, 0, 2, 158, ++ 3, 191, 222, 2, 240, 2, 158, 1, 188, 96, 3, 24, 16, 96, 1, 41, 80, 11, ++ 0, 23, 146, 0, 176, 1, 123, 0, 16, 101, 0, 104, 0, 235, 0, 2, 119, 0, ++ 136, 90, 19, 1, 23, 161, 0, 232, 68, 102, 244, 55, 161, 0, 110, 222, ++ 132, 7, 66, 119, 3, 191, 222, 2, 240, 7, 179, 1, 144, 96, 18, 9, 16, ++ 72, 1, 148, 96, 31, 0, 0, 24, 1, 8, 90, 15, 0, 23, 129, 1, 136, 94, ++ 6, 129, 84, 10, 1, 52, 90, 15, 0, 23, 128, 0, 2, 94, 2, 240, 1, 67, ++ 0, 176, 1, 123, 0, 16, 101, 0, 176, 86, 35, 0, 23, 161, 0, 224, 94, ++ 134, 160, 151, 161, 0, 232, 94, 132, 0, 244, 3, 0, 232, 94, 132, 0, ++ 244, 22, 0, 176, 90, 3, 0, 20, 19, 0, 176, 90, 7, 0, 20, 20, 0, 176, ++ 90, 11, 0, 20, 21, 0, 104, 222, 7, 0, 66, 143, 0, 232, 0, 151, 0, 87, ++ 161, 1, 188, 94, 134, 240, 20, 27, 1, 124, 94, 135, 0, 244, 28, 0, 176, ++ 32, 71, 0, 23, 129, 0, 2, 94, 2, 240, 16, 125, 0, 176, 1, 123, 0, 16, ++ 101, 1, 8, 90, 15, 0, 23, 129, 0, 176, 94, 135, 0, 20, 30, 3, 191, 222, ++ 2, 240, 2, 146, 0, 176, 86, 23, 0, 20, 27, 0, 176, 86, 27, 0, 20, 28, ++ 0, 176, 84, 19, 0, 20, 30, 0, 176, 80, 19, 0, 16, 134, 0, 109, 0, 167, ++ 0, 130, 152, 1, 144, 1, 99, 0, 16, 138, 0, 176, 65, 143, 0, 16, 98, ++ 0, 2, 94, 2, 240, 22, 12, 0, 176, 66, 43, 0, 20, 6, 1, 188, 96, 3, 24, ++ 23, 161, 0, 109, 193, 140, 32, 2, 155, 1, 188, 96, 3, 2, 151, 161, 0, ++ 224, 94, 132, 3, 119, 161, 0, 224, 94, 134, 176, 17, 29, 3, 191, 222, ++ 2, 240, 3, 52, 2, 3, 0, 199, 0, 2, 174, 2, 12, 208, 3, 0, 2, 174, 1, ++ 20, 0, 99, 0, 23, 161, 2, 133, 0, 99, 0, 2, 174, 0, 128, 222, 135, 1, ++ 247, 162, 1, 188, 96, 27, 24, 87, 162, 0, 224, 94, 138, 13, 176, 101, ++ 0, 176, 65, 151, 0, 20, 50, 0, 128, 222, 135, 0, 183, 162, 1, 188, 96, ++ 27, 21, 215, 162, 0, 224, 94, 138, 13, 176, 100, 0, 176, 65, 147, 0, ++ 20, 51, 0, 104, 216, 19, 0, 2, 188, 2, 0, 90, 27, 0, 2, 176, 1, 128, ++ 96, 6, 132, 244, 39, 3, 191, 222, 2, 240, 6, 196, 2, 1, 208, 3, 0, 2, ++ 176, 0, 176, 80, 155, 0, 20, 47, 2, 129, 208, 199, 0, 3, 104, 0, 2, ++ 94, 2, 240, 3, 110, 1, 11, 208, 3, 0, 23, 161, 1, 60, 80, 43, 0, 23, ++ 162, 1, 140, 94, 134, 244, 87, 161, 1, 72, 1, 67, 0, 23, 162, 1, 12, ++ 129, 67, 0, 23, 163, 0, 104, 94, 143, 0, 34, 185, 1, 140, 224, 0, 10, ++ 23, 162, 0, 104, 94, 134, 244, 66, 188, 1, 145, 96, 18, 132, 244, 39, ++ 3, 191, 222, 2, 240, 3, 107, 0, 2, 94, 2, 240, 1, 243, 0, 176, 80, 19, ++ 0, 16, 134, 0, 176, 80, 23, 0, 16, 138, 3, 162, 94, 2, 240, 3, 8, 2, ++ 12, 208, 3, 0, 2, 219, 2, 3, 0, 199, 0, 2, 218, 0, 176, 80, 203, 0, ++ 16, 101, 0, 2, 94, 2, 240, 22, 162, 2, 3, 80, 199, 0, 2, 200, 1, 188, ++ 96, 35, 0, 151, 161, 0, 168, 80, 2, 244, 52, 0, 3, 191, 222, 2, 240, ++ 2, 223, 2, 4, 129, 171, 0, 2, 202, 0, 109, 66, 70, 192, 128, 18, 0, ++ 176, 90, 19, 0, 23, 128, 0, 2, 94, 2, 240, 1, 77, 0, 176, 84, 15, 0, ++ 20, 30, 0, 176, 90, 7, 0, 23, 161, 0, 176, 90, 19, 0, 23, 128, 1, 135, ++ 90, 22, 240, 23, 128, 0, 176, 65, 143, 0, 16, 101, 0, 2, 94, 2, 240, ++ 22, 21, 0, 224, 94, 134, 160, 116, 3, 2, 135, 94, 3, 0, 2, 217, 1, 9, ++ 222, 3, 0, 23, 163, 0, 224, 94, 139, 0, 119, 162, 0, 224, 94, 138, 244, ++ 119, 162, 0, 136, 94, 139, 0, 55, 161, 0, 224, 94, 134, 244, 80, 137, ++ 3, 191, 222, 2, 240, 2, 223, 0, 109, 66, 74, 132, 128, 18, 1, 6, 80, ++ 7, 0, 23, 161, 2, 140, 208, 3, 0, 2, 222, 0, 104, 94, 135, 0, 2, 223, ++ 1, 130, 222, 134, 134, 52, 49, 1, 130, 96, 2, 134, 52, 49, 0, 32, 208, ++ 3, 4, 2, 229, 0, 176, 80, 79, 0, 17, 242, 0, 176, 80, 83, 0, 17, 243, ++ 0, 176, 80, 87, 0, 17, 244, 1, 188, 96, 3, 0, 145, 240, 2, 6, 1, 171, ++ 0, 3, 1, 2, 1, 80, 3, 0, 3, 1, 2, 6, 1, 171, 0, 3, 1, 3, 162, 94, 2, ++ 240, 3, 1, 2, 128, 48, 195, 0, 3, 1, 1, 128, 96, 5, 134, 12, 48, 0, ++ 224, 1, 231, 0, 32, 121, 1, 188, 96, 67, 8, 144, 230, 0, 2, 94, 2, 240, ++ 1, 106, 1, 188, 96, 3, 25, 16, 228, 1, 188, 96, 3, 0, 0, 6, 1, 188, ++ 96, 3, 1, 215, 130, 1, 210, 222, 8, 119, 240, 224, 0, 176, 15, 3, 0, ++ 16, 225, 0, 176, 0, 71, 0, 16, 134, 0, 176, 15, 31, 0, 16, 138, 1, 188, ++ 96, 3, 0, 55, 129, 0, 2, 94, 2, 240, 16, 105, 0, 176, 5, 155, 0, 16, ++ 100, 0, 232, 88, 26, 40, 241, 69, 0, 176, 5, 139, 0, 16, 100, 0, 106, ++ 69, 22, 192, 130, 252, 0, 2, 94, 2, 240, 16, 142, 0, 110, 69, 23, 0, ++ 66, 254, 1, 188, 96, 3, 0, 81, 69, 1, 188, 96, 3, 0, 16, 187, 1, 188, ++ 97, 3, 3, 176, 128, 3, 191, 222, 2, 240, 0, 18, 3, 148, 94, 2, 240, ++ 3, 8, 2, 6, 80, 3, 0, 3, 4, 2, 135, 222, 175, 0, 3, 8, 2, 129, 80, 3, ++ 0, 5, 224, 2, 2, 208, 199, 0, 3, 7, 2, 8, 80, 43, 0, 3, 8, 2, 133, 208, ++ 3, 0, 5, 247, 1, 144, 96, 18, 134, 52, 49, 1, 16, 80, 7, 0, 23, 166, ++ 0, 104, 222, 155, 0, 67, 20, 1, 58, 80, 7, 0, 23, 128, 0, 136, 94, 3, ++ 0, 119, 128, 0, 224, 0, 174, 240, 16, 100, 0, 176, 94, 7, 0, 8, 19, ++ 1, 188, 96, 35, 6, 215, 129, 0, 224, 65, 131, 1, 112, 99, 0, 224, 65, ++ 143, 0, 176, 101, 0, 2, 94, 2, 240, 16, 164, 0, 176, 32, 79, 0, 23, ++ 129, 3, 162, 94, 2, 240, 3, 32, 0, 176, 80, 15, 0, 17, 22, 2, 2, 208, ++ 199, 0, 3, 24, 0, 176, 80, 91, 0, 17, 22, 2, 130, 208, 3, 0, 3, 32, ++ 2, 129, 71, 195, 0, 3, 25, 2, 128, 80, 79, 0, 3, 30, 0, 32, 71, 199, ++ 63, 131, 32, 0, 32, 199, 219, 0, 195, 106, 3, 191, 222, 2, 240, 3, 32, ++ 3, 165, 94, 2, 240, 3, 32, 2, 128, 199, 223, 0, 3, 106, 2, 136, 80, ++ 199, 0, 3, 60, 1, 41, 80, 11, 0, 23, 146, 2, 3, 0, 199, 0, 3, 45, 2, ++ 12, 208, 3, 0, 3, 45, 2, 131, 80, 199, 0, 3, 45, 0, 176, 80, 203, 0, ++ 16, 101, 1, 56, 90, 19, 0, 23, 128, 1, 130, 90, 23, 0, 87, 129, 1, 14, ++ 90, 19, 0, 23, 161, 1, 142, 94, 134, 240, 55, 129, 2, 2, 208, 199, 0, ++ 3, 60, 0, 176, 80, 27, 0, 16, 138, 3, 191, 222, 2, 240, 3, 60, 2, 130, ++ 208, 199, 0, 3, 52, 1, 56, 80, 39, 0, 23, 128, 1, 8, 80, 19, 0, 23, ++ 129, 1, 2, 80, 19, 0, 23, 161, 1, 130, 94, 134, 240, 55, 129, 0, 176, ++ 80, 127, 0, 16, 137, 3, 191, 222, 2, 240, 3, 60, 1, 56, 80, 111, 0, ++ 23, 128, 1, 8, 80, 43, 0, 23, 129, 1, 6, 208, 7, 0, 23, 161, 1, 130, ++ 94, 134, 240, 55, 129, 0, 176, 80, 27, 0, 16, 138, 0, 176, 80, 131, ++ 0, 16, 137, 1, 14, 80, 115, 0, 23, 161, 1, 142, 94, 134, 240, 55, 129, ++ 0, 2, 94, 2, 240, 1, 67, 0, 2, 94, 2, 240, 16, 105, 1, 2, 66, 27, 0, ++ 23, 129, 1, 130, 94, 5, 2, 55, 129, 0, 2, 94, 2, 240, 16, 125, 2, 6, ++ 128, 199, 0, 3, 72, 1, 12, 129, 67, 0, 23, 166, 0, 104, 222, 155, 0, ++ 99, 70, 0, 136, 94, 135, 0, 87, 161, 3, 191, 222, 2, 240, 3, 72, 0, ++ 104, 222, 155, 0, 67, 72, 0, 136, 94, 135, 0, 55, 161, 0, 224, 94, 132, ++ 1, 23, 161, 1, 217, 222, 135, 0, 16, 131, 1, 188, 97, 55, 3, 183, 145, ++ 0, 104, 94, 75, 2, 131, 124, 2, 4, 0, 191, 0, 3, 79, 2, 135, 80, 3, ++ 0, 3, 79, 3, 148, 94, 2, 240, 3, 80, 3, 34, 94, 2, 240, 3, 93, 2, 6, ++ 129, 171, 0, 3, 91, 0, 104, 94, 75, 4, 67, 84, 0, 104, 94, 75, 0, 67, ++ 84, 3, 191, 222, 2, 240, 3, 91, 0, 224, 1, 239, 0, 32, 123, 1, 188, ++ 96, 3, 2, 145, 69, 1, 131, 96, 5, 134, 12, 48, 0, 224, 68, 103, 10, ++ 12, 52, 1, 140, 96, 14, 23, 112, 187, 1, 188, 97, 3, 2, 48, 128, 3, ++ 191, 222, 2, 240, 0, 2, 1, 188, 97, 3, 0, 48, 128, 3, 191, 222, 2, 240, ++ 0, 2, 1, 188, 97, 51, 3, 183, 145, 2, 133, 0, 99, 0, 3, 99, 0, 144, ++ 0, 99, 0, 151, 161, 0, 224, 100, 130, 244, 48, 101, 0, 110, 90, 19, ++ 0, 35, 99, 1, 136, 224, 6, 242, 55, 145, 2, 6, 1, 171, 0, 3, 103, 0, ++ 104, 222, 75, 5, 163, 103, 1, 188, 97, 3, 0, 48, 128, 3, 191, 222, 2, ++ 240, 0, 2, 3, 191, 222, 2, 240, 3, 124, 1, 145, 96, 14, 132, 244, 39, ++ 3, 191, 222, 2, 240, 3, 107, 1, 145, 96, 6, 132, 244, 39, 1, 188, 96, ++ 3, 0, 16, 180, 1, 129, 224, 6, 134, 52, 49, 3, 191, 222, 2, 240, 6, ++ 196, 1, 28, 80, 143, 0, 23, 161, 0, 128, 222, 135, 1, 151, 162, 0, 224, ++ 1, 94, 13, 176, 101, 2, 128, 90, 127, 0, 3, 123, 2, 129, 90, 127, 0, ++ 3, 119, 2, 3, 218, 127, 0, 3, 123, 0, 104, 90, 135, 0, 3, 123, 0, 136, ++ 96, 6, 244, 55, 161, 0, 32, 28, 186, 244, 35, 123, 0, 2, 94, 2, 240, ++ 13, 40, 1, 145, 96, 30, 132, 244, 39, 0, 1, 94, 2, 240, 0, 0, 3, 191, ++ 222, 2, 240, 3, 107, 0, 2, 222, 2, 240, 0, 0, 3, 196, 222, 2, 240, 13, ++ 115, 2, 6, 80, 3, 0, 3, 132, 2, 7, 222, 175, 0, 3, 132, 1, 188, 97, ++ 3, 0, 55, 145, 2, 7, 80, 3, 0, 3, 130, 1, 188, 98, 3, 0, 247, 145, 0, ++ 224, 1, 11, 0, 32, 66, 3, 191, 222, 2, 240, 3, 133, 1, 188, 96, 3, 0, ++ 32, 66, 0, 176, 94, 71, 0, 16, 128, 2, 4, 0, 191, 0, 3, 141, 0, 176, ++ 5, 139, 0, 16, 100, 0, 110, 69, 23, 0, 0, 2, 0, 104, 222, 75, 2, 131, ++ 140, 0, 160, 68, 180, 42, 49, 69, 3, 191, 222, 2, 240, 0, 2, 0, 2, 94, ++ 2, 240, 16, 142, 0, 104, 197, 23, 0, 0, 2, 3, 208, 94, 2, 240, 3, 145, ++ 0, 2, 94, 2, 240, 16, 142, 3, 191, 222, 2, 240, 0, 2, 2, 6, 1, 171, ++ 0, 3, 148, 0, 104, 222, 75, 5, 163, 148, 1, 128, 96, 1, 134, 12, 48, ++ 2, 14, 1, 171, 0, 3, 151, 2, 0, 176, 195, 0, 3, 151, 1, 129, 96, 5, ++ 134, 12, 48, 0, 225, 13, 178, 40, 227, 108, 0, 224, 141, 183, 0, 3, ++ 109, 1, 131, 96, 2, 247, 247, 191, 1, 188, 96, 3, 0, 144, 4, 0, 168, ++ 65, 35, 48, 16, 72, 1, 188, 98, 15, 0, 17, 224, 1, 129, 96, 2, 245, ++ 215, 174, 2, 2, 0, 191, 0, 3, 188, 0, 104, 222, 75, 2, 3, 161, 0, 2, ++ 94, 2, 240, 23, 200, 0, 104, 222, 75, 6, 35, 188, 2, 4, 94, 179, 0, ++ 3, 188, 2, 6, 171, 211, 0, 3, 166, 2, 4, 197, 175, 0, 3, 188, 3, 191, ++ 222, 2, 240, 3, 167, 2, 0, 69, 111, 0, 3, 188, 0, 232, 68, 101, 86, ++ 55, 161, 0, 232, 42, 150, 244, 55, 161, 0, 105, 94, 135, 8, 35, 188, ++ 2, 6, 171, 211, 0, 3, 175, 0, 107, 172, 66, 35, 35, 174, 0, 224, 68, ++ 103, 1, 75, 16, 1, 131, 224, 2, 43, 145, 92, 3, 191, 222, 2, 240, 3, ++ 188, 1, 131, 224, 2, 43, 145, 92, 2, 7, 1, 171, 0, 3, 178, 1, 128, 224, ++ 2, 9, 208, 78, 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, 0, ++ 1, 131, 96, 2, 47, 49, 121, 2, 7, 222, 179, 0, 3, 185, 1, 135, 224, ++ 2, 245, 151, 172, 0, 225, 14, 219, 0, 35, 182, 0, 224, 142, 223, 0, ++ 3, 183, 0, 104, 176, 55, 0, 3, 188, 0, 176, 68, 103, 0, 12, 13, 0, 176, ++ 68, 107, 0, 12, 14, 1, 135, 224, 2, 245, 119, 171, 0, 104, 129, 11, ++ 0, 35, 191, 0, 176, 68, 103, 0, 0, 67, 1, 130, 224, 6, 9, 16, 72, 0, ++ 168, 65, 179, 16, 144, 108, 1, 130, 96, 6, 40, 145, 68, 1, 136, 224, ++ 2, 11, 144, 92, 0, 2, 94, 2, 240, 18, 47, 1, 133, 224, 2, 247, 247, ++ 191, 2, 136, 66, 27, 0, 3, 199, 1, 133, 224, 6, 247, 247, 191, 3, 91, ++ 94, 2, 240, 3, 201, 1, 188, 96, 19, 0, 16, 67, 1, 188, 96, 3, 0, 16, ++ 133, 1, 188, 96, 3, 0, 16, 184, 0, 136, 80, 119, 0, 144, 185, 2, 8, ++ 80, 43, 0, 3, 208, 1, 56, 80, 115, 0, 23, 161, 1, 124, 80, 110, 244, ++ 55, 161, 0, 136, 94, 135, 0, 144, 185, 2, 0, 71, 163, 0, 3, 212, 1, ++ 188, 96, 3, 0, 17, 234, 0, 144, 66, 231, 0, 145, 235, 0, 176, 71, 163, ++ 0, 209, 232, 2, 0, 71, 179, 0, 3, 214, 1, 176, 224, 142, 61, 145, 236, ++ 1, 210, 224, 2, 16, 144, 132, 3, 169, 94, 2, 240, 5, 1, 1, 188, 96, ++ 3, 0, 16, 132, 0, 224, 1, 195, 0, 32, 112, 0, 176, 68, 103, 0, 12, 4, ++ 0, 176, 68, 107, 0, 12, 5, 3, 32, 222, 2, 240, 4, 79, 0, 104, 94, 75, ++ 24, 163, 231, 0, 104, 222, 75, 7, 131, 240, 1, 188, 99, 255, 31, 112, ++ 132, 1, 188, 96, 3, 0, 240, 133, 1, 56, 19, 99, 0, 16, 181, 0, 224, ++ 66, 215, 0, 208, 181, 1, 188, 96, 3, 0, 16, 166, 1, 188, 96, 35, 20, ++ 208, 180, 0, 224, 19, 87, 0, 36, 213, 3, 191, 222, 2, 240, 4, 151, 1, ++ 132, 224, 6, 245, 151, 172, 1, 188, 96, 255, 31, 240, 132, 0, 2, 94, ++ 2, 240, 4, 44, 1, 188, 96, 3, 0, 16, 180, 1, 188, 96, 3, 0, 16, 166, ++ 1, 188, 96, 3, 2, 208, 181, 1, 188, 96, 35, 4, 208, 180, 0, 224, 19, ++ 91, 0, 36, 214, 3, 191, 222, 2, 240, 4, 151, 1, 129, 96, 6, 245, 183, ++ 173, 0, 104, 222, 75, 4, 164, 3, 2, 3, 222, 187, 0, 3, 245, 0, 224, ++ 45, 231, 0, 16, 101, 3, 191, 222, 2, 240, 3, 246, 1, 188, 96, 35, 1, ++ 16, 101, 0, 160, 94, 127, 254, 16, 236, 0, 176, 90, 3, 0, 16, 237, 0, ++ 176, 90, 7, 0, 16, 238, 0, 176, 90, 11, 0, 16, 239, 0, 176, 90, 15, ++ 0, 16, 240, 1, 188, 99, 255, 30, 240, 132, 1, 188, 96, 3, 0, 48, 133, ++ 1, 188, 96, 3, 0, 16, 180, 1, 188, 96, 3, 1, 208, 166, 1, 188, 96, 3, ++ 4, 80, 181, 1, 188, 96, 35, 4, 208, 180, 0, 224, 2, 175, 0, 32, 171, ++ 3, 191, 222, 2, 240, 4, 151, 1, 188, 97, 255, 31, 240, 132, 1, 188, ++ 96, 3, 0, 16, 133, 0, 104, 222, 75, 5, 36, 11, 1, 188, 96, 3, 0, 16, ++ 180, 1, 188, 96, 7, 19, 80, 166, 1, 188, 96, 3, 2, 208, 181, 1, 188, ++ 96, 35, 4, 208, 180, 3, 191, 222, 2, 240, 4, 23, 0, 104, 222, 75, 2, ++ 68, 34, 0, 176, 48, 67, 0, 16, 132, 2, 133, 195, 143, 0, 4, 15, 0, 224, ++ 94, 39, 0, 55, 137, 1, 218, 94, 39, 0, 16, 238, 1, 188, 99, 255, 31, ++ 240, 206, 1, 188, 96, 3, 0, 16, 180, 0, 128, 224, 33, 129, 248, 0, 0, ++ 224, 102, 130, 13, 176, 166, 1, 188, 96, 3, 3, 208, 181, 1, 188, 96, ++ 35, 4, 208, 180, 0, 224, 1, 211, 0, 32, 116, 1, 132, 96, 7, 0, 17, 224, ++ 2, 130, 222, 179, 0, 5, 192, 2, 4, 94, 179, 0, 5, 192, 1, 129, 224, ++ 6, 245, 215, 174, 1, 131, 224, 6, 9, 16, 72, 0, 176, 65, 35, 0, 24, ++ 0, 1, 188, 96, 3, 6, 183, 142, 1, 136, 32, 70, 16, 215, 129, 0, 2, 94, ++ 2, 240, 16, 125, 0, 136, 94, 135, 0, 112, 131, 3, 191, 222, 2, 240, ++ 5, 192, 1, 188, 96, 3, 31, 240, 132, 1, 3, 222, 83, 0, 23, 162, 0, 104, ++ 14, 207, 0, 4, 39, 0, 176, 14, 207, 0, 23, 162, 0, 144, 28, 186, 244, ++ 87, 162, 2, 0, 94, 255, 0, 4, 41, 1, 188, 96, 3, 0, 55, 162, 0, 104, ++ 43, 79, 0, 4, 43, 1, 188, 96, 3, 0, 55, 162, 1, 134, 94, 138, 28, 112, ++ 227, 0, 106, 195, 147, 0, 4, 53, 0, 232, 67, 144, 0, 208, 228, 2, 2, ++ 66, 27, 0, 4, 51, 0, 144, 0, 27, 0, 55, 161, 0, 32, 66, 27, 0, 68, 50, ++ 0, 176, 32, 151, 0, 23, 161, 0, 224, 67, 146, 244, 48, 228, 0, 105, ++ 195, 147, 0, 4, 53, 1, 188, 96, 3, 0, 16, 228, 0, 104, 43, 79, 0, 4, ++ 55, 0, 224, 67, 145, 91, 48, 228, 1, 188, 96, 3, 0, 16, 180, 1, 188, ++ 96, 3, 0, 16, 166, 1, 188, 96, 3, 2, 16, 181, 1, 188, 96, 35, 4, 208, ++ 180, 0, 104, 94, 75, 6, 164, 77, 0, 224, 1, 203, 0, 32, 114, 2, 6, 129, ++ 171, 0, 4, 151, 2, 128, 176, 195, 0, 4, 151, 2, 3, 176, 195, 0, 4, 151, ++ 1, 188, 96, 7, 4, 247, 166, 2, 136, 66, 27, 0, 4, 69, 1, 188, 96, 15, ++ 0, 23, 166, 2, 130, 66, 27, 0, 4, 69, 1, 188, 96, 23, 0, 23, 166, 1, ++ 12, 129, 67, 0, 23, 165, 0, 104, 222, 151, 0, 100, 72, 0, 136, 94, 155, ++ 0, 55, 166, 0, 224, 68, 102, 244, 204, 51, 1, 129, 224, 5, 134, 12, ++ 48, 1, 130, 96, 5, 134, 12, 48, 1, 131, 224, 1, 134, 12, 48, 3, 191, ++ 222, 2, 240, 4, 151, 0, 224, 1, 207, 0, 32, 115, 3, 191, 222, 2, 240, ++ 4, 151, 3, 32, 94, 2, 240, 4, 158, 1, 129, 224, 2, 9, 16, 72, 0, 224, ++ 1, 215, 0, 32, 117, 3, 30, 222, 2, 240, 4, 126, 1, 188, 96, 3, 0, 23, ++ 162, 0, 106, 94, 35, 0, 4, 87, 1, 2, 66, 143, 0, 23, 162, 1, 133, 94, ++ 138, 9, 16, 72, 1, 128, 224, 6, 16, 48, 129, 2, 132, 222, 83, 0, 4, ++ 94, 0, 176, 0, 119, 0, 23, 161, 0, 224, 94, 132, 4, 55, 161, 0, 136, ++ 94, 135, 0, 87, 161, 0, 224, 94, 135, 13, 87, 161, 3, 191, 222, 2, 240, ++ 4, 95, 1, 188, 96, 3, 13, 87, 161, 0, 104, 0, 39, 0, 4, 126, 0, 224, ++ 94, 132, 1, 247, 161, 1, 188, 96, 35, 0, 144, 101, 0, 136, 65, 151, ++ 0, 48, 182, 1, 188, 96, 3, 0, 16, 180, 0, 144, 94, 135, 0, 80, 166, ++ 1, 188, 96, 3, 1, 16, 181, 1, 188, 96, 35, 0, 176, 180, 3, 23, 222, ++ 2, 240, 4, 103, 3, 151, 222, 2, 240, 4, 104, 0, 32, 222, 135, 0, 68, ++ 113, 0, 32, 222, 135, 0, 36, 110, 1, 184, 94, 34, 208, 22, 128, 1, 128, ++ 94, 138, 208, 54, 129, 3, 191, 222, 2, 240, 4, 119, 1, 188, 94, 34, ++ 208, 22, 128, 1, 132, 94, 138, 208, 54, 129, 3, 191, 222, 2, 240, 4, ++ 119, 0, 32, 222, 135, 0, 36, 117, 1, 184, 94, 34, 208, 54, 129, 1, 128, ++ 94, 138, 208, 86, 130, 3, 191, 222, 2, 240, 4, 119, 1, 188, 94, 34, ++ 208, 54, 129, 1, 132, 94, 138, 208, 86, 130, 1, 136, 96, 2, 244, 48, ++ 168, 0, 176, 90, 3, 0, 16, 176, 0, 176, 90, 7, 0, 16, 177, 2, 128, 66, ++ 163, 0, 4, 122, 0, 224, 66, 163, 0, 144, 168, 0, 176, 90, 11, 0, 16, ++ 176, 0, 176, 90, 15, 0, 16, 177, 1, 135, 96, 6, 16, 144, 132, 0, 224, ++ 94, 39, 0, 55, 137, 1, 218, 94, 39, 0, 16, 238, 1, 188, 96, 3, 0, 16, ++ 180, 1, 188, 96, 3, 3, 80, 166, 0, 176, 0, 51, 0, 16, 181, 2, 132, 222, ++ 83, 0, 4, 136, 0, 224, 96, 104, 3, 176, 166, 0, 224, 66, 152, 4, 48, ++ 166, 0, 176, 0, 55, 0, 16, 181, 1, 188, 96, 35, 4, 208, 180, 1, 132, ++ 96, 6, 242, 151, 148, 1, 134, 96, 2, 9, 16, 72, 3, 158, 222, 2, 240, ++ 4, 146, 2, 128, 68, 31, 0, 4, 149, 0, 176, 94, 63, 0, 17, 69, 1, 188, ++ 96, 3, 0, 23, 143, 0, 176, 94, 67, 0, 23, 133, 0, 176, 94, 15, 0, 23, ++ 144, 3, 191, 222, 2, 240, 4, 149, 0, 176, 94, 15, 0, 23, 133, 2, 128, ++ 68, 31, 0, 4, 149, 0, 160, 68, 182, 240, 177, 69, 1, 188, 96, 3, 1, ++ 16, 66, 1, 131, 96, 6, 242, 151, 148, 1, 132, 96, 7, 0, 17, 224, 3, ++ 160, 94, 2, 240, 5, 190, 2, 6, 94, 175, 0, 5, 192, 1, 134, 224, 6, 245, ++ 119, 171, 1, 188, 96, 3, 0, 16, 128, 0, 2, 94, 2, 240, 13, 48, 3, 191, ++ 222, 2, 240, 7, 33, 3, 161, 94, 2, 240, 5, 43, 1, 20, 0, 99, 0, 23, ++ 161, 0, 104, 222, 135, 0, 228, 163, 1, 129, 96, 6, 9, 16, 72, 3, 191, ++ 222, 2, 240, 5, 43, 2, 133, 0, 99, 0, 4, 165, 1, 131, 224, 6, 13, 144, ++ 108, 1, 129, 96, 6, 245, 215, 174, 1, 28, 80, 143, 0, 3, 189, 2, 6, ++ 80, 143, 0, 4, 173, 0, 176, 68, 103, 0, 16, 243, 0, 176, 68, 107, 0, ++ 16, 244, 1, 188, 99, 255, 31, 240, 211, 1, 188, 99, 255, 31, 240, 212, ++ 0, 176, 66, 23, 3, 16, 133, 0, 32, 96, 14, 134, 36, 212, 1, 135, 96, ++ 4, 3, 16, 160, 0, 176, 0, 99, 0, 16, 180, 1, 188, 96, 3, 11, 16, 181, ++ 0, 176, 0, 99, 0, 240, 180, 2, 3, 0, 199, 0, 4, 191, 2, 12, 208, 3, ++ 0, 4, 191, 2, 128, 80, 199, 0, 4, 183, 0, 176, 84, 19, 0, 23, 161, 0, ++ 224, 94, 134, 128, 116, 26, 0, 176, 80, 107, 0, 16, 228, 0, 176, 66, ++ 19, 2, 16, 132, 2, 9, 80, 43, 0, 4, 191, 0, 176, 66, 19, 0, 48, 132, ++ 1, 210, 224, 58, 160, 48, 224, 2, 128, 80, 199, 0, 4, 197, 1, 210, 224, ++ 82, 160, 48, 224, 3, 191, 222, 2, 240, 4, 197, 2, 2, 208, 199, 0, 4, ++ 197, 0, 176, 80, 95, 0, 16, 224, 0, 176, 80, 99, 0, 16, 225, 0, 176, ++ 80, 103, 0, 16, 226, 0, 176, 80, 107, 0, 16, 228, 0, 176, 66, 19, 2, ++ 240, 132, 2, 0, 80, 199, 0, 4, 207, 1, 138, 224, 14, 16, 144, 132, 1, ++ 188, 96, 251, 28, 16, 229, 1, 188, 96, 3, 8, 144, 230, 0, 176, 0, 99, ++ 0, 16, 180, 1, 188, 96, 3, 2, 16, 181, 0, 176, 0, 99, 4, 208, 180, 1, ++ 132, 96, 7, 0, 17, 224, 1, 188, 96, 3, 0, 23, 142, 3, 191, 222, 2, 240, ++ 5, 203, 0, 224, 1, 199, 0, 32, 113, 0, 176, 0, 99, 0, 16, 180, 1, 188, ++ 96, 3, 2, 208, 181, 0, 176, 0, 99, 4, 208, 180, 3, 191, 222, 2, 240, ++ 5, 88, 3, 34, 94, 2, 240, 4, 214, 0, 224, 2, 167, 0, 32, 169, 1, 3, ++ 80, 3, 0, 23, 161, 0, 184, 94, 135, 0, 55, 161, 1, 135, 94, 134, 16, ++ 16, 128, 2, 4, 0, 191, 0, 4, 228, 3, 43, 222, 2, 240, 4, 228, 2, 0, ++ 0, 243, 0, 4, 222, 0, 232, 0, 35, 0, 81, 66, 1, 188, 96, 10, 40, 81, ++ 66, 3, 148, 94, 2, 240, 4, 228, 0, 176, 5, 139, 0, 16, 100, 0, 224, ++ 88, 35, 0, 54, 8, 0, 104, 88, 3, 0, 4, 228, 0, 176, 68, 103, 0, 17, ++ 18, 0, 176, 88, 3, 0, 17, 21, 2, 12, 208, 3, 0, 5, 42, 2, 3, 0, 199, ++ 0, 4, 247, 0, 176, 80, 203, 0, 16, 101, 1, 188, 96, 3, 0, 22, 133, 0, ++ 224, 90, 51, 0, 54, 140, 2, 3, 80, 199, 0, 4, 236, 0, 224, 90, 39, 0, ++ 54, 137, 3, 191, 222, 2, 240, 5, 43, 1, 188, 96, 3, 0, 23, 178, 0, 176, ++ 90, 11, 0, 11, 122, 1, 56, 90, 19, 0, 23, 161, 1, 188, 90, 6, 244, 48, ++ 224, 1, 60, 90, 19, 0, 23, 161, 1, 124, 90, 6, 244, 48, 225, 1, 129, ++ 224, 6, 16, 144, 132, 1, 133, 224, 7, 0, 16, 227, 1, 133, 224, 7, 0, ++ 16, 195, 2, 130, 208, 199, 0, 4, 252, 3, 191, 222, 2, 240, 4, 255, 2, ++ 2, 208, 199, 0, 5, 1, 0, 176, 42, 51, 0, 23, 161, 1, 184, 80, 110, 244, ++ 48, 224, 0, 176, 80, 115, 0, 23, 161, 1, 184, 42, 54, 244, 48, 225, ++ 2, 130, 66, 19, 0, 4, 255, 0, 176, 80, 123, 0, 16, 228, 0, 176, 66, ++ 19, 2, 16, 132, 1, 133, 224, 6, 28, 48, 225, 0, 176, 66, 19, 0, 112, ++ 132, 1, 135, 96, 4, 3, 16, 160, 2, 3, 0, 199, 0, 5, 23, 0, 176, 80, ++ 203, 0, 16, 101, 0, 109, 94, 202, 209, 197, 7, 1, 133, 224, 2, 24, 112, ++ 195, 0, 224, 94, 203, 0, 54, 142, 1, 188, 96, 27, 31, 208, 101, 0, 224, ++ 65, 150, 246, 80, 101, 0, 176, 80, 151, 0, 22, 128, 0, 104, 222, 203, ++ 0, 5, 15, 1, 188, 96, 35, 1, 80, 184, 0, 224, 1, 243, 0, 32, 124, 0, ++ 104, 45, 235, 0, 37, 21, 3, 191, 222, 2, 240, 5, 34, 0, 176, 94, 203, ++ 0, 16, 181, 0, 176, 0, 99, 8, 112, 180, 2, 131, 66, 211, 0, 5, 17, 1, ++ 188, 96, 3, 1, 112, 184, 0, 104, 173, 235, 0, 37, 34, 1, 188, 96, 3, ++ 1, 112, 184, 2, 188, 80, 103, 0, 5, 33, 3, 191, 222, 2, 240, 5, 32, ++ 1, 12, 208, 3, 0, 23, 161, 3, 169, 94, 2, 240, 5, 29, 1, 188, 96, 35, ++ 1, 80, 184, 0, 224, 1, 243, 0, 32, 124, 0, 104, 94, 135, 0, 101, 32, ++ 3, 191, 222, 2, 240, 5, 34, 1, 188, 96, 3, 1, 112, 184, 0, 104, 94, ++ 135, 0, 69, 34, 1, 188, 96, 3, 1, 112, 184, 1, 129, 224, 2, 23, 16, ++ 184, 1, 188, 96, 3, 0, 240, 165, 1, 188, 96, 3, 14, 16, 181, 0, 224, ++ 1, 247, 0, 32, 125, 0, 176, 0, 99, 0, 16, 180, 0, 176, 0, 99, 0, 240, ++ 180, 0, 176, 66, 211, 0, 24, 0, 1, 136, 96, 8, 3, 16, 180, 1, 129, 96, ++ 6, 13, 144, 108, 3, 191, 222, 2, 240, 5, 88, 2, 2, 208, 199, 0, 5, 49, ++ 0, 176, 80, 111, 0, 16, 224, 0, 176, 80, 115, 0, 16, 225, 0, 176, 80, ++ 119, 0, 16, 226, 2, 130, 66, 19, 0, 5, 48, 0, 176, 80, 123, 0, 16, 228, ++ 0, 176, 66, 19, 2, 240, 132, 0, 224, 94, 159, 0, 55, 167, 3, 161, 94, ++ 2, 240, 5, 58, 1, 188, 96, 3, 0, 23, 167, 1, 135, 96, 4, 3, 16, 160, ++ 0, 176, 0, 99, 0, 16, 180, 1, 188, 96, 3, 14, 16, 181, 0, 176, 0, 99, ++ 0, 240, 180, 1, 136, 96, 8, 3, 16, 180, 3, 191, 222, 2, 240, 5, 77, ++ 0, 176, 1, 123, 0, 16, 101, 0, 176, 90, 3, 0, 16, 229, 0, 176, 90, 7, ++ 0, 16, 230, 0, 176, 90, 11, 0, 16, 231, 0, 104, 160, 75, 0, 5, 64, 0, ++ 224, 94, 39, 0, 55, 137, 0, 104, 32, 75, 0, 5, 68, 1, 133, 224, 7, 0, ++ 16, 227, 1, 133, 224, 7, 0, 16, 195, 0, 176, 66, 19, 1, 16, 132, 1, ++ 218, 94, 39, 0, 16, 238, 1, 135, 96, 6, 16, 144, 132, 0, 176, 66, 19, ++ 28, 16, 132, 1, 188, 96, 3, 0, 16, 180, 0, 224, 96, 104, 3, 176, 166, ++ 0, 176, 0, 151, 0, 16, 181, 1, 188, 96, 35, 4, 208, 180, 1, 132, 96, ++ 7, 0, 17, 224, 3, 191, 222, 2, 240, 5, 173, 1, 8, 94, 75, 0, 23, 161, ++ 0, 104, 94, 135, 0, 37, 88, 2, 2, 80, 3, 0, 5, 87, 2, 158, 80, 159, ++ 0, 5, 84, 2, 1, 208, 3, 0, 5, 84, 0, 224, 94, 39, 0, 55, 137, 1, 88, ++ 94, 39, 0, 20, 45, 1, 218, 80, 183, 0, 16, 238, 1, 135, 96, 6, 16, 144, ++ 132, 3, 191, 222, 2, 240, 5, 88, 1, 188, 96, 3, 0, 20, 45, 1, 4, 193, ++ 7, 0, 23, 161, 0, 104, 14, 247, 0, 5, 93, 0, 176, 14, 247, 0, 23, 161, ++ 0, 144, 28, 186, 244, 55, 161, 3, 191, 222, 2, 240, 5, 95, 3, 34, 94, ++ 2, 240, 5, 95, 1, 3, 222, 83, 0, 23, 161, 0, 176, 94, 135, 0, 23, 162, ++ 2, 0, 94, 255, 0, 5, 98, 1, 188, 96, 3, 0, 55, 162, 0, 104, 43, 79, ++ 0, 5, 100, 1, 188, 96, 3, 0, 55, 162, 2, 136, 94, 75, 0, 5, 103, 0, ++ 104, 94, 75, 6, 133, 103, 1, 188, 96, 3, 0, 23, 162, 0, 104, 142, 247, ++ 0, 5, 105, 1, 131, 222, 134, 242, 151, 148, 1, 131, 222, 134, 132, 244, ++ 39, 2, 129, 194, 19, 0, 5, 111, 1, 134, 94, 139, 0, 16, 227, 1, 134, ++ 96, 7, 0, 16, 195, 1, 129, 224, 6, 16, 144, 132, 3, 191, 222, 2, 240, ++ 5, 113, 1, 134, 94, 138, 28, 112, 227, 1, 134, 96, 6, 24, 112, 195, ++ 2, 184, 71, 167, 0, 5, 169, 2, 160, 71, 183, 0, 5, 171, 3, 169, 94, ++ 2, 240, 5, 121, 1, 8, 94, 75, 0, 23, 161, 0, 104, 94, 135, 0, 37, 170, ++ 2, 30, 80, 159, 0, 5, 121, 1, 133, 224, 6, 28, 112, 227, 1, 133, 224, ++ 6, 24, 112, 195, 1, 20, 0, 99, 0, 23, 161, 0, 104, 222, 135, 0, 133, ++ 130, 0, 176, 1, 83, 0, 23, 162, 0, 104, 222, 139, 255, 229, 126, 0, ++ 104, 66, 71, 0, 37, 127, 0, 104, 222, 138, 132, 197, 130, 1, 133, 96, ++ 2, 9, 16, 72, 1, 134, 224, 2, 28, 112, 227, 1, 134, 224, 6, 24, 112, ++ 195, 1, 16, 80, 7, 0, 23, 166, 0, 104, 94, 155, 0, 5, 170, 1, 188, 96, ++ 3, 0, 17, 228, 1, 58, 80, 7, 0, 23, 128, 0, 136, 94, 3, 0, 119, 128, ++ 0, 224, 0, 174, 240, 16, 100, 0, 104, 222, 155, 0, 69, 143, 2, 7, 208, ++ 3, 0, 5, 141, 1, 188, 96, 43, 17, 247, 162, 0, 224, 94, 0, 11, 55, 163, ++ 0, 2, 94, 2, 240, 16, 207, 1, 188, 96, 35, 6, 144, 100, 1, 188, 96, ++ 71, 0, 23, 162, 0, 2, 94, 2, 240, 16, 247, 0, 104, 94, 155, 0, 69, 171, ++ 1, 164, 96, 70, 244, 113, 224, 0, 104, 222, 155, 0, 197, 157, 1, 188, ++ 97, 19, 0, 183, 161, 2, 6, 0, 243, 0, 5, 150, 1, 188, 96, 19, 0, 183, ++ 161, 1, 146, 194, 26, 244, 55, 162, 3, 41, 94, 2, 240, 5, 155, 1, 188, ++ 96, 3, 0, 17, 238, 0, 144, 66, 231, 0, 145, 239, 1, 146, 224, 14, 244, ++ 55, 162, 0, 176, 94, 139, 0, 17, 236, 3, 191, 222, 2, 240, 5, 171, 0, ++ 104, 94, 155, 0, 101, 162, 0, 104, 94, 155, 0, 165, 162, 0, 176, 80, ++ 47, 0, 17, 226, 0, 176, 80, 51, 0, 17, 226, 3, 191, 222, 2, 240, 5, ++ 171, 1, 135, 96, 2, 61, 17, 232, 0, 104, 222, 155, 0, 165, 165, 1, 135, ++ 96, 6, 61, 17, 232, 1, 188, 96, 3, 0, 17, 234, 0, 144, 66, 231, 0, 145, ++ 235, 1, 146, 194, 27, 0, 183, 162, 1, 184, 94, 138, 61, 17, 232, 3, ++ 191, 222, 2, 240, 5, 171, 1, 132, 96, 7, 0, 17, 224, 1, 188, 96, 3, ++ 0, 17, 45, 0, 176, 68, 131, 0, 20, 44, 3, 163, 222, 2, 240, 5, 193, ++ 1, 188, 96, 3, 0, 23, 142, 0, 104, 94, 75, 5, 165, 177, 2, 0, 80, 3, ++ 0, 5, 187, 1, 131, 224, 6, 9, 16, 72, 0, 176, 65, 35, 0, 24, 0, 1, 188, ++ 96, 3, 6, 55, 142, 0, 104, 94, 75, 5, 165, 192, 0, 224, 2, 163, 0, 32, ++ 168, 1, 188, 96, 3, 4, 183, 142, 3, 169, 94, 2, 240, 5, 192, 0, 104, ++ 94, 75, 4, 37, 192, 1, 188, 96, 3, 6, 183, 142, 3, 191, 222, 2, 240, ++ 5, 192, 1, 129, 96, 6, 245, 119, 171, 0, 176, 94, 15, 0, 23, 133, 0, ++ 2, 94, 2, 240, 16, 142, 1, 188, 96, 3, 0, 23, 140, 1, 188, 96, 3, 0, ++ 23, 141, 3, 35, 222, 2, 240, 5, 203, 2, 6, 128, 199, 0, 5, 202, 1, 12, ++ 129, 67, 0, 23, 161, 0, 104, 222, 135, 0, 101, 202, 1, 8, 66, 27, 0, ++ 23, 161, 0, 104, 222, 135, 0, 5, 202, 1, 188, 96, 127, 31, 247, 161, ++ 1, 224, 94, 134, 16, 112, 131, 1, 130, 224, 5, 134, 12, 48, 0, 224, ++ 68, 103, 37, 140, 50, 1, 135, 224, 6, 16, 112, 131, 0, 109, 0, 167, ++ 0, 133, 221, 3, 41, 94, 2, 240, 5, 221, 2, 3, 0, 199, 0, 5, 218, 0, ++ 176, 80, 203, 0, 16, 101, 2, 130, 208, 199, 0, 5, 210, 0, 224, 90, 35, ++ 0, 54, 136, 3, 191, 222, 2, 240, 5, 211, 0, 224, 90, 39, 0, 54, 137, ++ 0, 104, 45, 235, 0, 37, 218, 0, 224, 94, 203, 0, 55, 178, 1, 10, 94, ++ 203, 0, 23, 161, 0, 224, 80, 202, 244, 48, 101, 0, 208, 96, 6, 246, ++ 87, 162, 0, 32, 90, 26, 244, 69, 218, 3, 191, 222, 2, 240, 5, 212, 0, ++ 2, 94, 2, 240, 18, 47, 3, 80, 222, 2, 240, 5, 218, 3, 191, 222, 2, 240, ++ 6, 65, 2, 5, 94, 175, 0, 5, 223, 1, 135, 224, 6, 38, 113, 51, 3, 191, ++ 222, 2, 240, 0, 2, 1, 144, 96, 10, 134, 52, 49, 2, 130, 208, 199, 0, ++ 5, 233, 1, 60, 80, 39, 0, 23, 128, 1, 9, 80, 43, 0, 23, 129, 1, 7, 80, ++ 7, 0, 23, 161, 1, 130, 94, 134, 240, 55, 129, 0, 176, 80, 31, 0, 16, ++ 138, 0, 176, 80, 15, 0, 17, 22, 3, 191, 222, 2, 240, 5, 239, 1, 56, ++ 80, 95, 0, 23, 128, 1, 10, 80, 43, 0, 23, 129, 1, 7, 208, 7, 0, 23, ++ 161, 1, 130, 94, 134, 240, 55, 129, 0, 176, 80, 35, 0, 16, 138, 0, 176, ++ 80, 91, 0, 17, 22, 2, 3, 0, 199, 0, 5, 244, 2, 12, 208, 3, 0, 5, 244, ++ 2, 8, 94, 7, 0, 5, 244, 1, 56, 84, 7, 0, 23, 128, 1, 144, 66, 42, 161, ++ 48, 138, 2, 128, 80, 199, 0, 5, 253, 1, 188, 96, 3, 5, 183, 146, 3, ++ 191, 222, 2, 240, 3, 24, 1, 144, 96, 6, 134, 52, 49, 2, 3, 0, 199, 0, ++ 5, 225, 2, 12, 208, 3, 0, 5, 225, 0, 176, 0, 31, 0, 23, 161, 0, 224, ++ 94, 134, 128, 116, 26, 3, 191, 222, 2, 240, 5, 225, 1, 188, 96, 3, 6, ++ 55, 146, 3, 191, 222, 2, 240, 3, 24, 0, 224, 19, 95, 0, 36, 215, 2, ++ 4, 222, 179, 0, 0, 2, 0, 176, 19, 11, 0, 16, 101, 1, 25, 152, 135, 0, ++ 23, 161, 1, 9, 90, 19, 0, 23, 162, 1, 137, 94, 134, 208, 150, 132, 0, ++ 176, 19, 7, 0, 23, 163, 0, 109, 222, 132, 152, 38, 8, 0, 176, 94, 135, ++ 0, 23, 163, 1, 136, 94, 142, 208, 150, 132, 0, 104, 222, 138, 244, 33, ++ 14, 1, 188, 99, 255, 31, 240, 208, 0, 176, 90, 19, 0, 16, 240, 1, 188, ++ 96, 3, 0, 23, 165, 1, 130, 94, 150, 30, 16, 240, 1, 188, 99, 255, 31, ++ 240, 207, 1, 188, 96, 27, 0, 240, 239, 1, 188, 99, 255, 31, 240, 209, ++ 0, 176, 68, 103, 0, 16, 241, 1, 188, 99, 255, 31, 240, 210, 0, 176, ++ 68, 107, 0, 16, 242, 1, 188, 96, 3, 4, 4, 216, 1, 188, 99, 255, 31, ++ 240, 195, 1, 188, 96, 3, 28, 16, 227, 1, 188, 99, 255, 31, 240, 196, ++ 0, 176, 82, 19, 0, 16, 228, 1, 188, 99, 255, 31, 240, 197, 0, 176, 82, ++ 47, 0, 16, 229, 1, 188, 99, 255, 31, 240, 198, 0, 176, 82, 51, 0, 16, ++ 230, 1, 188, 99, 255, 31, 240, 199, 0, 176, 82, 55, 0, 16, 231, 1, 188, ++ 99, 255, 31, 240, 200, 0, 176, 82, 23, 0, 16, 232, 1, 188, 99, 255, ++ 31, 240, 201, 0, 176, 82, 27, 0, 16, 233, 1, 188, 99, 255, 31, 240, ++ 202, 0, 176, 82, 31, 0, 16, 234, 1, 188, 99, 255, 31, 240, 203, 0, 176, ++ 19, 71, 0, 16, 235, 1, 188, 99, 255, 31, 240, 204, 0, 176, 19, 75, 0, ++ 16, 236, 1, 188, 99, 255, 31, 240, 205, 0, 176, 19, 79, 0, 16, 237, ++ 0, 176, 19, 103, 0, 16, 98, 1, 188, 96, 3, 0, 40, 17, 0, 2, 94, 2, 240, ++ 16, 109, 0, 2, 94, 2, 240, 13, 40, 1, 188, 96, 43, 24, 119, 161, 0, ++ 2, 94, 2, 240, 1, 39, 1, 96, 64, 103, 0, 17, 192, 0, 224, 64, 100, 155, ++ 23, 161, 0, 224, 94, 135, 0, 151, 161, 1, 188, 99, 255, 31, 240, 192, ++ 1, 188, 96, 3, 1, 85, 1, 1, 210, 222, 134, 160, 48, 224, 0, 144, 94, ++ 135, 1, 119, 161, 1, 188, 96, 3, 7, 151, 146, 1, 144, 96, 10, 9, 16, ++ 72, 3, 191, 222, 2, 240, 3, 80, 1, 188, 96, 7, 0, 17, 193, 1, 188, 96, ++ 43, 24, 23, 161, 1, 188, 96, 3, 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, ++ 1, 188, 96, 3, 0, 17, 193, 0, 2, 222, 2, 240, 0, 0, 2, 1, 194, 227, ++ 0, 6, 105, 2, 3, 0, 199, 0, 6, 70, 0, 104, 45, 235, 0, 38, 86, 0, 110, ++ 66, 70, 246, 70, 86, 3, 191, 222, 2, 240, 6, 72, 0, 110, 66, 71, 0, ++ 38, 86, 2, 3, 0, 199, 0, 6, 83, 3, 85, 222, 2, 240, 6, 72, 1, 128, 96, ++ 2, 134, 20, 48, 1, 56, 80, 131, 0, 23, 161, 0, 176, 80, 203, 0, 16, ++ 101, 0, 109, 218, 50, 244, 44, 93, 0, 168, 65, 35, 20, 16, 72, 1, 20, ++ 0, 99, 0, 16, 101, 0, 224, 65, 151, 14, 208, 101, 0, 224, 90, 3, 0, ++ 54, 128, 1, 188, 98, 31, 0, 17, 224, 3, 191, 222, 2, 240, 0, 18, 1, ++ 129, 224, 6, 134, 52, 49, 1, 145, 96, 14, 132, 244, 39, 3, 191, 222, ++ 2, 240, 6, 105, 1, 60, 80, 103, 0, 23, 161, 1, 172, 94, 134, 23, 80, ++ 186, 1, 188, 96, 3, 1, 144, 184, 2, 3, 0, 199, 0, 6, 99, 0, 104, 173, ++ 235, 0, 38, 94, 1, 129, 224, 2, 23, 16, 184, 3, 80, 222, 2, 240, 6, ++ 92, 3, 191, 222, 2, 240, 6, 105, 0, 232, 45, 235, 0, 43, 122, 0, 176, ++ 94, 203, 0, 16, 181, 0, 176, 0, 99, 8, 112, 180, 2, 131, 66, 211, 0, ++ 6, 97, 3, 191, 222, 2, 240, 6, 100, 1, 134, 224, 4, 3, 16, 160, 0, 2, ++ 94, 2, 240, 1, 230, 3, 213, 222, 2, 240, 12, 93, 3, 214, 222, 2, 240, ++ 12, 117, 3, 80, 222, 2, 240, 6, 101, 3, 191, 222, 2, 240, 3, 199, 1, ++ 188, 96, 3, 0, 240, 165, 1, 130, 224, 2, 9, 16, 72, 1, 188, 98, 31, ++ 0, 17, 224, 1, 188, 96, 3, 0, 17, 236, 1, 188, 96, 15, 0, 17, 232, 2, ++ 133, 80, 11, 0, 6, 112, 1, 130, 96, 2, 9, 16, 72, 3, 160, 222, 2, 240, ++ 6, 116, 3, 213, 222, 2, 240, 12, 93, 3, 214, 222, 2, 240, 12, 117, 3, ++ 32, 94, 2, 240, 6, 122, 1, 136, 96, 2, 9, 16, 72, 1, 188, 96, 3, 0, ++ 8, 49, 0, 104, 94, 75, 24, 160, 2, 0, 104, 222, 75, 7, 134, 121, 0, ++ 2, 94, 2, 240, 6, 59, 3, 191, 222, 2, 240, 0, 18, 1, 188, 96, 3, 0, ++ 55, 161, 0, 2, 94, 2, 240, 14, 143, 3, 163, 222, 2, 240, 0, 18, 2, 0, ++ 80, 199, 0, 6, 134, 1, 188, 96, 3, 0, 16, 128, 1, 130, 96, 6, 9, 16, ++ 72, 1, 128, 96, 2, 134, 52, 49, 0, 104, 142, 247, 0, 6, 132, 1, 4, 193, ++ 7, 0, 23, 161, 1, 131, 222, 134, 242, 151, 148, 0, 224, 1, 203, 0, 32, ++ 114, 3, 191, 222, 2, 240, 2, 13, 0, 176, 1, 11, 0, 23, 161, 0, 109, ++ 222, 132, 8, 6, 196, 0, 232, 68, 100, 8, 119, 161, 0, 110, 94, 132, ++ 8, 38, 196, 1, 135, 224, 6, 245, 119, 171, 2, 2, 0, 191, 0, 6, 155, ++ 2, 136, 129, 171, 0, 6, 155, 2, 132, 0, 199, 0, 6, 155, 1, 41, 80, 11, ++ 0, 23, 161, 0, 104, 222, 135, 2, 6, 155, 2, 130, 222, 187, 0, 6, 155, ++ 2, 3, 197, 115, 0, 6, 154, 2, 131, 222, 179, 0, 6, 154, 2, 134, 171, ++ 211, 0, 6, 150, 2, 130, 222, 187, 0, 6, 150, 0, 104, 42, 231, 0, 6, ++ 155, 0, 109, 222, 47, 1, 230, 155, 1, 130, 224, 6, 247, 247, 191, 1, ++ 188, 97, 59, 4, 23, 161, 0, 224, 68, 102, 244, 42, 169, 3, 191, 222, ++ 2, 240, 0, 18, 3, 191, 222, 2, 240, 6, 196, 1, 188, 96, 3, 0, 17, 73, ++ 2, 130, 94, 175, 0, 6, 180, 1, 130, 96, 6, 245, 119, 171, 0, 176, 68, ++ 103, 0, 8, 28, 2, 4, 0, 191, 0, 6, 167, 0, 104, 69, 31, 0, 6, 167, 1, ++ 133, 224, 2, 245, 119, 171, 3, 43, 222, 2, 240, 6, 165, 1, 133, 224, ++ 6, 245, 119, 171, 0, 176, 5, 139, 0, 16, 100, 0, 2, 94, 2, 240, 17, ++ 144, 0, 176, 1, 75, 0, 23, 162, 2, 8, 66, 27, 0, 6, 170, 0, 176, 1, ++ 107, 0, 23, 162, 0, 104, 94, 139, 0, 6, 176, 0, 144, 69, 43, 0, 151, ++ 161, 0, 128, 222, 134, 244, 87, 161, 0, 110, 32, 186, 13, 166, 176, ++ 0, 176, 65, 183, 0, 8, 46, 0, 224, 32, 186, 35, 40, 47, 2, 5, 94, 175, ++ 0, 6, 178, 1, 188, 97, 3, 0, 17, 51, 0, 225, 13, 130, 41, 67, 96, 0, ++ 224, 141, 135, 0, 3, 97, 0, 232, 68, 101, 3, 151, 165, 0, 109, 94, 151, ++ 1, 0, 193, 2, 2, 0, 191, 0, 6, 194, 0, 104, 222, 75, 6, 166, 185, 1, ++ 132, 224, 2, 247, 247, 191, 0, 104, 222, 75, 4, 6, 188, 2, 130, 222, ++ 179, 0, 6, 188, 1, 188, 96, 3, 0, 11, 10, 2, 4, 94, 179, 0, 6, 191, ++ 0, 104, 222, 75, 6, 38, 191, 0, 2, 94, 2, 240, 21, 143, 0, 2, 94, 2, ++ 240, 18, 48, 3, 163, 222, 2, 240, 6, 194, 1, 131, 224, 2, 245, 151, ++ 172, 1, 130, 96, 2, 245, 119, 171, 3, 209, 94, 2, 240, 0, 2, 2, 0, 80, ++ 195, 0, 7, 26, 3, 37, 222, 2, 240, 6, 200, 1, 131, 96, 6, 132, 244, ++ 39, 3, 191, 222, 2, 240, 6, 250, 2, 12, 208, 3, 0, 6, 248, 2, 3, 0, ++ 199, 0, 6, 231, 1, 20, 0, 99, 0, 23, 161, 0, 109, 222, 135, 0, 134, ++ 248, 1, 188, 96, 3, 0, 23, 128, 0, 176, 80, 203, 0, 16, 101, 0, 176, ++ 80, 207, 0, 16, 100, 1, 129, 96, 6, 13, 144, 108, 1, 130, 96, 6, 134, ++ 52, 49, 0, 176, 90, 35, 0, 23, 161, 1, 188, 96, 3, 0, 22, 136, 1, 188, ++ 90, 42, 244, 55, 161, 1, 188, 96, 3, 0, 22, 138, 0, 176, 94, 135, 0, ++ 20, 143, 0, 176, 90, 39, 0, 23, 161, 1, 188, 96, 3, 0, 22, 137, 1, 188, ++ 90, 46, 244, 55, 161, 1, 188, 96, 3, 0, 22, 139, 0, 176, 94, 135, 0, ++ 20, 144, 0, 176, 90, 27, 0, 20, 141, 0, 176, 90, 31, 0, 20, 142, 1, ++ 188, 96, 3, 0, 22, 4, 0, 104, 222, 3, 0, 6, 228, 2, 3, 80, 199, 0, 6, ++ 227, 1, 0, 80, 159, 0, 23, 128, 1, 128, 94, 2, 145, 180, 141, 1, 188, ++ 94, 2, 146, 20, 144, 1, 188, 96, 3, 0, 55, 128, 0, 2, 94, 2, 240, 22, ++ 238, 0, 176, 94, 3, 0, 20, 140, 3, 191, 222, 2, 240, 6, 243, 0, 104, ++ 194, 71, 0, 6, 236, 1, 129, 224, 6, 134, 52, 49, 1, 145, 96, 14, 132, ++ 244, 39, 1, 188, 96, 3, 0, 20, 48, 3, 191, 222, 2, 240, 0, 2, 0, 176, ++ 80, 159, 0, 23, 161, 0, 2, 94, 2, 240, 1, 229, 0, 176, 94, 135, 0, 20, ++ 39, 1, 134, 224, 4, 3, 16, 160, 0, 176, 66, 131, 0, 24, 0, 1, 12, 208, ++ 3, 0, 23, 161, 0, 104, 222, 135, 0, 102, 231, 1, 2, 80, 199, 0, 23, ++ 161, 1, 128, 94, 134, 132, 244, 39, 1, 138, 224, 14, 132, 244, 39, 0, ++ 176, 80, 191, 0, 20, 38, 3, 191, 222, 2, 240, 6, 250, 1, 134, 224, 4, ++ 3, 16, 160, 2, 0, 80, 159, 0, 6, 250, 2, 134, 193, 7, 0, 7, 21, 3, 41, ++ 94, 2, 240, 6, 255, 0, 176, 82, 51, 0, 20, 45, 0, 176, 82, 55, 0, 23, ++ 161, 1, 158, 94, 134, 132, 244, 39, 0, 176, 80, 159, 0, 23, 161, 1, ++ 128, 222, 134, 244, 55, 161, 2, 5, 128, 195, 0, 7, 6, 0, 176, 48, 23, ++ 0, 16, 143, 0, 176, 48, 19, 0, 16, 142, 0, 176, 80, 215, 0, 16, 141, ++ 0, 176, 80, 211, 0, 48, 140, 0, 176, 80, 187, 0, 16, 143, 0, 176, 80, ++ 183, 0, 16, 142, 0, 176, 80, 155, 0, 16, 141, 1, 128, 96, 6, 244, 48, ++ 140, 2, 2, 80, 199, 0, 7, 18, 0, 176, 82, 67, 0, 16, 143, 0, 176, 82, ++ 63, 0, 16, 142, 0, 176, 82, 59, 0, 16, 141, 1, 26, 82, 55, 0, 23, 161, ++ 1, 152, 222, 135, 4, 55, 161, 1, 184, 94, 134, 145, 176, 140, 1, 130, ++ 96, 2, 134, 52, 49, 1, 129, 96, 2, 13, 144, 108, 1, 188, 96, 3, 0, 20, ++ 52, 1, 188, 96, 3, 0, 20, 53, 3, 37, 222, 2, 240, 7, 24, 1, 156, 96, ++ 2, 132, 244, 39, 3, 191, 222, 2, 240, 7, 28, 2, 133, 80, 11, 0, 7, 26, ++ 0, 168, 80, 199, 13, 20, 49, 1, 188, 96, 3, 0, 20, 48, 1, 129, 96, 2, ++ 245, 215, 174, 1, 131, 96, 2, 132, 244, 39, 1, 133, 224, 2, 9, 16, 72, ++ 1, 188, 96, 3, 0, 20, 46, 3, 162, 94, 2, 240, 2, 13, 3, 191, 222, 2, ++ 240, 0, 18, 3, 35, 222, 2, 240, 7, 146, 3, 163, 94, 2, 240, 7, 146, ++ 3, 162, 222, 2, 240, 7, 146, 1, 129, 96, 6, 245, 119, 171, 3, 170, 94, ++ 2, 240, 7, 146, 1, 131, 224, 2, 9, 16, 72, 3, 81, 222, 2, 240, 7, 45, ++ 2, 6, 128, 199, 0, 7, 42, 1, 130, 224, 1, 134, 12, 48, 0, 224, 2, 107, ++ 0, 32, 154, 1, 128, 224, 6, 245, 119, 171, 3, 191, 222, 2, 240, 7, 50, ++ 3, 1, 222, 2, 240, 7, 48, 0, 104, 94, 79, 6, 39, 48, 1, 188, 96, 3, ++ 0, 23, 168, 3, 164, 94, 2, 240, 7, 50, 3, 193, 222, 2, 240, 7, 149, ++ 2, 4, 94, 179, 0, 7, 59, 1, 132, 96, 2, 245, 151, 172, 1, 131, 224, ++ 2, 9, 16, 72, 0, 176, 43, 63, 0, 23, 161, 0, 109, 42, 238, 244, 32, ++ 2, 0, 224, 2, 123, 0, 32, 158, 1, 188, 96, 3, 0, 10, 187, 0, 2, 94, ++ 2, 240, 21, 146, 3, 191, 222, 2, 240, 0, 2, 2, 3, 222, 179, 0, 7, 75, ++ 1, 131, 224, 2, 245, 151, 172, 0, 224, 32, 207, 0, 40, 51, 2, 1, 94, ++ 187, 0, 7, 75, 0, 176, 42, 131, 0, 23, 161, 0, 109, 32, 206, 244, 39, ++ 70, 1, 188, 96, 3, 0, 8, 51, 0, 224, 2, 127, 0, 32, 159, 3, 169, 94, ++ 2, 240, 7, 73, 1, 145, 96, 26, 132, 244, 39, 3, 191, 222, 2, 240, 3, ++ 107, 1, 188, 99, 255, 31, 247, 161, 0, 2, 94, 2, 240, 14, 143, 3, 41, ++ 94, 2, 240, 7, 75, 1, 145, 96, 26, 132, 244, 39, 3, 191, 222, 2, 240, ++ 7, 75, 1, 132, 96, 2, 9, 16, 72, 0, 225, 13, 194, 41, 67, 112, 0, 224, ++ 141, 199, 0, 3, 113, 2, 4, 0, 191, 0, 7, 82, 1, 188, 96, 3, 0, 17, 21, ++ 1, 20, 0, 99, 0, 23, 161, 0, 224, 102, 2, 244, 48, 101, 0, 2, 94, 2, ++ 240, 16, 147, 1, 130, 96, 2, 9, 16, 72, 0, 104, 94, 59, 24, 167, 86, ++ 0, 104, 222, 59, 7, 7, 87, 3, 191, 222, 2, 240, 0, 2, 3, 41, 94, 2, ++ 240, 7, 90, 2, 1, 80, 3, 0, 7, 90, 0, 104, 94, 59, 4, 167, 97, 1, 240, ++ 222, 23, 0, 55, 133, 0, 160, 94, 22, 240, 151, 133, 0, 104, 94, 59, ++ 6, 39, 97, 2, 1, 80, 3, 0, 7, 96, 2, 135, 128, 191, 0, 7, 96, 1, 133, ++ 224, 6, 9, 16, 72, 2, 128, 208, 3, 0, 7, 113, 0, 176, 94, 27, 0, 23, ++ 163, 0, 176, 0, 139, 0, 23, 164, 2, 4, 0, 191, 0, 7, 103, 0, 110, 65, ++ 151, 48, 103, 103, 1, 24, 90, 3, 0, 23, 163, 1, 26, 90, 3, 0, 23, 164, ++ 0, 104, 193, 131, 24, 7, 106, 0, 224, 2, 147, 0, 32, 164, 3, 191, 222, ++ 2, 240, 7, 108, 0, 109, 94, 46, 244, 135, 108, 1, 130, 224, 6, 134, ++ 52, 49, 0, 224, 94, 51, 0, 55, 140, 0, 104, 222, 50, 244, 103, 111, ++ 0, 176, 94, 15, 0, 23, 133, 0, 109, 222, 46, 244, 103, 125, 3, 191, ++ 222, 2, 240, 7, 141, 0, 176, 94, 31, 0, 23, 163, 0, 176, 0, 143, 0, ++ 23, 164, 2, 4, 0, 191, 0, 7, 119, 0, 110, 65, 151, 48, 103, 119, 1, ++ 28, 90, 3, 0, 23, 163, 1, 30, 90, 3, 0, 23, 164, 0, 109, 94, 46, 244, ++ 135, 121, 1, 130, 224, 6, 134, 52, 49, 0, 224, 94, 55, 0, 55, 141, 0, ++ 104, 222, 54, 244, 103, 124, 0, 176, 94, 15, 0, 23, 133, 0, 109, 94, ++ 46, 244, 103, 141, 1, 133, 224, 2, 9, 16, 72, 3, 209, 222, 2, 240, 7, ++ 127, 3, 41, 94, 2, 240, 7, 129, 2, 3, 0, 199, 0, 7, 130, 0, 176, 94, ++ 15, 0, 23, 133, 0, 2, 94, 2, 240, 16, 142, 0, 104, 65, 131, 24, 7, 179, ++ 2, 3, 0, 199, 0, 7, 137, 2, 12, 208, 3, 0, 7, 137, 2, 131, 80, 199, ++ 0, 7, 137, 0, 104, 222, 75, 5, 167, 137, 3, 191, 222, 2, 240, 22, 110, ++ 1, 129, 224, 6, 134, 52, 49, 0, 104, 222, 59, 6, 39, 140, 0, 224, 2, ++ 159, 0, 32, 167, 3, 191, 222, 2, 240, 6, 196, 0, 2, 94, 2, 240, 16, ++ 142, 1, 129, 96, 2, 9, 16, 72, 3, 41, 94, 2, 240, 7, 146, 2, 131, 0, ++ 199, 0, 22, 110, 3, 191, 222, 2, 240, 6, 196, 3, 209, 222, 2, 240, 7, ++ 147, 3, 165, 222, 2, 240, 6, 196, 3, 191, 222, 2, 240, 0, 18, 0, 225, ++ 13, 186, 41, 67, 110, 0, 224, 141, 191, 0, 3, 111, 2, 6, 80, 3, 0, 7, ++ 157, 0, 176, 1, 3, 0, 23, 161, 0, 109, 129, 10, 244, 39, 157, 0, 232, ++ 68, 100, 8, 119, 161, 0, 110, 94, 132, 8, 39, 157, 1, 135, 224, 6, 245, ++ 119, 171, 1, 8, 94, 75, 0, 23, 161, 0, 104, 94, 75, 5, 39, 160, 0, 104, ++ 94, 135, 0, 39, 161, 0, 176, 94, 15, 0, 23, 133, 0, 2, 94, 2, 240, 16, ++ 142, 0, 104, 94, 59, 6, 39, 167, 1, 188, 96, 3, 0, 23, 140, 2, 0, 208, ++ 3, 0, 7, 172, 1, 188, 96, 3, 0, 23, 141, 3, 191, 222, 2, 240, 7, 172, ++ 1, 188, 96, 3, 0, 23, 140, 2, 3, 0, 199, 0, 2, 13, 2, 12, 208, 3, 0, ++ 2, 13, 1, 156, 96, 2, 132, 244, 39, 3, 191, 222, 2, 240, 2, 13, 0, 104, ++ 65, 131, 24, 7, 178, 1, 128, 96, 6, 132, 244, 39, 3, 41, 94, 2, 240, ++ 6, 196, 1, 130, 96, 6, 134, 52, 49, 2, 131, 0, 199, 0, 22, 110, 3, 191, ++ 222, 2, 240, 6, 196, 0, 224, 2, 151, 0, 32, 165, 1, 129, 96, 2, 9, 16, ++ 72, 1, 188, 96, 3, 0, 8, 18, 0, 224, 1, 123, 0, 160, 94, 1, 188, 96, ++ 19, 20, 23, 161, 0, 109, 1, 122, 244, 32, 18, 1, 188, 96, 19, 12, 128, ++ 94, 3, 191, 222, 2, 240, 0, 18, 0, 2, 94, 2, 240, 13, 40, 3, 56, 222, ++ 2, 240, 0, 18, 3, 158, 222, 2, 240, 0, 18, 0, 232, 68, 76, 0, 247, 161, ++ 0, 232, 94, 132, 1, 23, 161, 0, 106, 222, 132, 1, 7, 195, 0, 232, 94, ++ 132, 1, 17, 135, 1, 188, 96, 3, 0, 17, 136, 1, 165, 224, 34, 48, 17, ++ 128, 1, 188, 96, 3, 0, 17, 19, 1, 188, 96, 3, 0, 17, 20, 0, 176, 68, ++ 103, 0, 23, 161, 0, 176, 68, 107, 0, 23, 162, 0, 176, 94, 135, 0, 17, ++ 4, 0, 176, 94, 139, 0, 17, 5, 3, 184, 222, 2, 240, 7, 197, 3, 191, 222, ++ 2, 240, 0, 18, 1, 188, 96, 3, 4, 183, 146, 1, 188, 96, 3, 4, 23, 161, ++ 1, 188, 99, 255, 31, 240, 206, 0, 176, 82, 23, 0, 16, 232, 0, 176, 82, ++ 27, 0, 16, 233, 0, 176, 82, 31, 0, 16, 234, 1, 188, 96, 3, 0, 16, 228, ++ 2, 134, 0, 195, 0, 7, 227, 0, 176, 84, 15, 0, 23, 162, 0, 105, 222, ++ 138, 144, 135, 214, 0, 232, 82, 18, 244, 80, 228, 0, 104, 160, 71, 0, ++ 7, 227, 1, 188, 96, 3, 0, 16, 228, 0, 176, 84, 39, 0, 16, 224, 0, 176, ++ 84, 47, 0, 16, 225, 3, 191, 222, 2, 240, 7, 236, 1, 188, 96, 3, 2, 151, ++ 161, 1, 188, 96, 3, 24, 144, 232, 1, 188, 96, 3, 0, 16, 233, 1, 188, ++ 96, 3, 0, 16, 234, 3, 191, 222, 2, 240, 7, 227, 3, 164, 222, 2, 240, ++ 10, 79, 3, 169, 222, 2, 240, 10, 79, 1, 188, 96, 3, 1, 215, 161, 2, ++ 6, 0, 195, 0, 7, 229, 2, 128, 222, 95, 0, 7, 234, 0, 176, 84, 7, 0, ++ 16, 224, 0, 104, 32, 71, 0, 7, 232, 1, 210, 222, 134, 160, 48, 224, ++ 0, 176, 84, 11, 0, 16, 225, 3, 191, 222, 2, 240, 7, 236, 1, 188, 94, ++ 134, 144, 16, 224, 1, 188, 96, 31, 0, 16, 225, 1, 188, 96, 3, 0, 16, ++ 226, 0, 176, 82, 35, 0, 16, 229, 0, 176, 82, 39, 0, 16, 230, 0, 176, ++ 82, 43, 0, 16, 231, 0, 2, 94, 2, 240, 16, 109, 3, 169, 222, 2, 240, ++ 10, 176, 0, 104, 94, 79, 4, 40, 8, 1, 188, 99, 255, 31, 240, 195, 0, ++ 104, 94, 79, 22, 167, 250, 0, 104, 94, 79, 5, 167, 253, 1, 188, 96, ++ 3, 26, 144, 227, 1, 188, 96, 3, 6, 183, 146, 0, 104, 94, 79, 5, 40, ++ 8, 3, 191, 222, 2, 240, 8, 2, 1, 188, 96, 3, 24, 183, 146, 1, 188, 96, ++ 3, 14, 144, 227, 3, 191, 222, 2, 240, 7, 255, 1, 188, 96, 3, 6, 55, ++ 146, 1, 188, 96, 3, 24, 144, 227, 2, 142, 1, 171, 0, 8, 2, 2, 152, 68, ++ 7, 0, 11, 176, 2, 128, 70, 7, 0, 11, 176, 0, 176, 32, 71, 0, 23, 129, ++ 0, 2, 94, 2, 240, 16, 125, 0, 232, 94, 132, 0, 215, 161, 0, 106, 94, ++ 134, 144, 136, 8, 0, 232, 82, 18, 244, 48, 228, 3, 191, 222, 2, 240, ++ 8, 11, 1, 188, 96, 3, 0, 16, 228, 3, 56, 222, 2, 240, 8, 11, 1, 135, ++ 224, 6, 28, 144, 228, 1, 144, 96, 10, 9, 16, 72, 1, 188, 97, 3, 4, 55, ++ 145, 0, 104, 94, 79, 22, 172, 59, 0, 104, 94, 79, 5, 171, 176, 3, 131, ++ 94, 2, 240, 10, 79, 3, 191, 222, 2, 240, 0, 2, 2, 4, 65, 99, 0, 8, 29, ++ 1, 188, 96, 3, 0, 17, 73, 1, 188, 96, 3, 1, 11, 128, 0, 225, 13, 178, ++ 40, 227, 108, 0, 224, 141, 183, 0, 3, 109, 1, 132, 96, 2, 11, 16, 88, ++ 2, 5, 94, 175, 0, 8, 25, 1, 135, 224, 6, 38, 113, 51, 2, 4, 0, 191, ++ 0, 8, 28, 1, 133, 224, 2, 245, 119, 171, 0, 2, 94, 2, 240, 17, 144, ++ 3, 191, 222, 2, 240, 0, 2, 3, 163, 94, 2, 240, 8, 31, 0, 2, 94, 2, 240, ++ 23, 206, 2, 133, 197, 35, 0, 0, 2, 1, 132, 96, 6, 11, 16, 88, 2, 0, ++ 222, 255, 0, 8, 37, 1, 128, 224, 2, 247, 247, 191, 0, 104, 43, 79, 0, ++ 8, 37, 0, 224, 68, 101, 90, 74, 211, 2, 5, 94, 175, 0, 8, 39, 1, 188, ++ 97, 3, 0, 17, 51, 2, 5, 128, 191, 0, 8, 45, 1, 188, 96, 19, 17, 87, ++ 161, 0, 2, 94, 2, 240, 1, 39, 1, 150, 96, 14, 3, 48, 25, 0, 176, 64, ++ 103, 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, 2, 3, 192, 55, 0, 8, 47, 3, ++ 191, 222, 2, 240, 0, 18, 0, 224, 2, 31, 0, 32, 135, 1, 130, 96, 6, 40, ++ 145, 68, 1, 188, 96, 3, 1, 11, 128, 3, 191, 222, 2, 240, 0, 18, 2, 6, ++ 1, 171, 0, 8, 53, 1, 128, 96, 1, 134, 12, 48, 2, 6, 129, 171, 0, 8, ++ 55, 1, 131, 224, 1, 134, 12, 48, 1, 131, 224, 2, 15, 16, 120, 2, 129, ++ 64, 19, 0, 0, 2, 2, 0, 66, 3, 0, 8, 60, 1, 132, 96, 2, 245, 151, 172, ++ 1, 188, 96, 3, 0, 10, 187, 1, 188, 96, 3, 0, 16, 128, 3, 163, 222, 2, ++ 240, 8, 63, 1, 144, 96, 2, 9, 16, 72, 0, 176, 68, 103, 0, 23, 158, 0, ++ 176, 68, 107, 0, 23, 157, 0, 176, 68, 111, 0, 23, 156, 0, 176, 68, 115, ++ 0, 23, 155, 0, 104, 222, 122, 35, 40, 63, 0, 224, 2, 35, 0, 32, 136, ++ 1, 21, 64, 59, 0, 23, 151, 0, 109, 128, 167, 0, 136, 74, 0, 160, 94, ++ 95, 0, 55, 151, 0, 104, 128, 167, 0, 8, 74, 1, 188, 96, 3, 0, 55, 151, ++ 0, 176, 1, 67, 0, 23, 161, 1, 12, 129, 67, 0, 23, 163, 0, 104, 94, 143, ++ 0, 40, 78, 1, 140, 224, 0, 10, 23, 161, 1, 201, 222, 132, 5, 39, 255, ++ 1, 188, 96, 3, 16, 119, 149, 1, 145, 224, 2, 13, 144, 108, 2, 134, 64, ++ 55, 0, 8, 84, 0, 224, 2, 187, 0, 32, 174, 3, 191, 222, 2, 240, 12, 159, ++ 1, 188, 96, 3, 0, 20, 128, 1, 188, 96, 3, 0, 20, 129, 1, 184, 96, 10, ++ 4, 144, 36, 1, 188, 96, 3, 4, 8, 36, 1, 188, 96, 3, 0, 72, 35, 1, 188, ++ 96, 3, 0, 208, 42, 1, 179, 96, 7, 0, 16, 4, 1, 188, 96, 3, 0, 8, 8, ++ 1, 188, 96, 3, 0, 8, 9, 1, 188, 96, 3, 0, 8, 10, 1, 188, 96, 3, 0, 8, ++ 11, 1, 131, 224, 2, 245, 215, 174, 0, 224, 68, 103, 31, 76, 46, 2, 135, ++ 192, 55, 0, 12, 153, 0, 2, 94, 2, 240, 18, 47, 2, 134, 64, 55, 0, 8, ++ 102, 3, 195, 94, 2, 240, 8, 120, 3, 191, 222, 2, 240, 12, 154, 0, 104, ++ 192, 51, 0, 72, 118, 0, 107, 68, 101, 133, 200, 118, 0, 176, 65, 39, ++ 0, 23, 161, 0, 176, 65, 39, 1, 208, 73, 0, 176, 94, 135, 0, 23, 161, ++ 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, ++ 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, ++ 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, ++ 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, ++ 16, 73, 3, 191, 222, 2, 240, 13, 12, 3, 67, 94, 2, 240, 8, 97, 2, 134, ++ 64, 55, 0, 8, 132, 0, 104, 94, 95, 0, 12, 154, 0, 104, 94, 95, 0, 76, ++ 154, 1, 82, 210, 3, 0, 23, 161, 1, 133, 210, 6, 244, 55, 162, 3, 191, ++ 222, 2, 240, 8, 127, 1, 60, 82, 3, 0, 23, 161, 1, 188, 82, 6, 244, 55, ++ 162, 3, 35, 222, 2, 240, 8, 130, 0, 104, 222, 139, 1, 204, 154, 3, 191, ++ 222, 2, 240, 8, 132, 0, 104, 94, 139, 2, 136, 132, 0, 104, 222, 139, ++ 3, 140, 154, 0, 109, 64, 51, 0, 204, 159, 0, 104, 94, 95, 0, 72, 151, ++ 0, 104, 94, 95, 0, 40, 148, 0, 104, 0, 167, 0, 200, 137, 0, 104, 128, ++ 167, 0, 168, 138, 0, 224, 68, 102, 144, 40, 48, 1, 188, 98, 195, 0, ++ 23, 161, 2, 128, 82, 3, 0, 8, 141, 1, 150, 82, 3, 0, 23, 161, 0, 128, ++ 222, 134, 144, 55, 154, 2, 3, 82, 3, 0, 8, 146, 0, 224, 94, 106, 144, ++ 55, 154, 2, 7, 210, 3, 0, 8, 146, 0, 232, 94, 107, 0, 55, 154, 2, 158, ++ 94, 107, 0, 12, 159, 3, 191, 222, 2, 240, 8, 155, 1, 82, 210, 3, 0, ++ 23, 161, 1, 133, 210, 6, 244, 55, 154, 3, 191, 222, 2, 240, 8, 155, ++ 1, 60, 82, 3, 0, 23, 161, 1, 188, 82, 6, 244, 55, 154, 0, 110, 94, 104, ++ 11, 172, 159, 0, 104, 94, 107, 0, 13, 12, 2, 4, 192, 59, 0, 8, 173, ++ 1, 129, 224, 6, 13, 144, 108, 2, 7, 192, 175, 0, 8, 163, 2, 7, 64, 55, ++ 0, 8, 161, 0, 224, 2, 115, 0, 32, 156, 3, 191, 222, 2, 240, 12, 159, ++ 0, 2, 94, 2, 240, 18, 47, 3, 191, 222, 2, 240, 8, 157, 0, 176, 32, 35, ++ 0, 12, 8, 0, 176, 32, 39, 0, 12, 9, 0, 176, 32, 43, 0, 12, 10, 0, 176, ++ 32, 47, 0, 12, 11, 0, 176, 94, 127, 0, 12, 12, 2, 135, 192, 175, 0, ++ 12, 153, 2, 130, 64, 59, 0, 12, 153, 1, 88, 64, 175, 0, 23, 154, 1, ++ 188, 96, 63, 30, 23, 161, 0, 109, 222, 106, 244, 44, 153, 3, 91, 94, ++ 2, 240, 8, 175, 1, 188, 96, 19, 0, 16, 67, 1, 188, 96, 255, 30, 23, ++ 161, 0, 110, 94, 106, 244, 44, 153, 0, 176, 65, 35, 40, 16, 72, 1, 128, ++ 96, 2, 242, 151, 148, 1, 132, 224, 2, 9, 16, 72, 1, 88, 64, 175, 0, ++ 16, 42, 0, 104, 64, 171, 0, 44, 153, 1, 187, 94, 86, 0, 144, 4, 2, 3, ++ 94, 87, 0, 8, 192, 2, 0, 71, 163, 0, 8, 189, 1, 188, 98, 30, 60, 17, ++ 224, 1, 188, 96, 3, 0, 17, 234, 0, 176, 94, 107, 0, 17, 235, 1, 152, ++ 96, 30, 61, 17, 232, 2, 0, 71, 179, 0, 8, 192, 0, 176, 94, 107, 0, 17, ++ 239, 1, 176, 224, 206, 61, 145, 236, 3, 131, 94, 2, 240, 8, 195, 0, ++ 2, 94, 2, 240, 18, 47, 0, 109, 64, 51, 4, 200, 192, 3, 170, 222, 2, ++ 240, 8, 223, 1, 188, 99, 255, 31, 227, 179, 1, 188, 96, 31, 16, 208, ++ 100, 1, 188, 96, 3, 0, 183, 161, 1, 188, 99, 255, 31, 231, 147, 0, 224, ++ 65, 134, 244, 48, 101, 1, 188, 99, 255, 31, 246, 0, 0, 224, 94, 135, ++ 0, 119, 161, 0, 2, 94, 2, 240, 15, 24, 2, 0, 192, 119, 0, 8, 213, 1, ++ 41, 64, 119, 0, 23, 162, 0, 109, 94, 139, 4, 200, 211, 0, 232, 94, 139, ++ 4, 214, 0, 1, 188, 96, 31, 5, 240, 99, 0, 224, 65, 142, 192, 16, 99, ++ 1, 12, 86, 3, 0, 3, 179, 0, 104, 222, 135, 1, 104, 213, 0, 176, 94, ++ 139, 0, 7, 147, 0, 109, 222, 135, 1, 200, 216, 0, 224, 65, 147, 0, 48, ++ 100, 3, 191, 222, 2, 240, 8, 200, 3, 176, 94, 2, 240, 8, 222, 1, 131, ++ 96, 2, 13, 144, 108, 0, 104, 30, 27, 255, 232, 223, 1, 188, 96, 31, ++ 5, 240, 101, 0, 224, 65, 148, 240, 208, 101, 2, 0, 90, 3, 0, 8, 223, ++ 1, 131, 96, 6, 13, 144, 108, 0, 32, 64, 47, 8, 168, 225, 1, 188, 96, ++ 3, 0, 3, 179, 1, 188, 96, 3, 0, 7, 252, 1, 136, 224, 15, 0, 7, 253, ++ 0, 109, 64, 51, 2, 10, 73, 1, 41, 82, 15, 0, 23, 147, 1, 9, 82, 15, ++ 0, 23, 170, 0, 104, 222, 79, 3, 168, 233, 1, 41, 82, 35, 0, 23, 147, ++ 1, 169, 94, 79, 0, 55, 147, 1, 150, 96, 2, 242, 151, 148, 0, 224, 65, ++ 135, 1, 240, 101, 1, 188, 96, 15, 0, 23, 161, 0, 40, 222, 134, 144, ++ 104, 240, 1, 134, 96, 6, 242, 151, 148, 0, 224, 65, 151, 0, 112, 101, ++ 0, 224, 32, 147, 0, 200, 36, 1, 6, 94, 83, 0, 23, 162, 0, 160, 94, 79, ++ 4, 119, 161, 0, 104, 222, 135, 4, 72, 254, 1, 134, 224, 6, 242, 151, ++ 148, 0, 184, 94, 139, 0, 55, 162, 0, 176, 90, 3, 0, 23, 160, 2, 10, ++ 218, 3, 0, 8, 248, 1, 135, 96, 6, 242, 151, 148, 2, 132, 192, 59, 0, ++ 8, 254, 2, 3, 218, 3, 0, 8, 254, 3, 171, 94, 2, 240, 8, 252, 2, 4, 65, ++ 7, 0, 8, 254, 1, 128, 96, 4, 255, 167, 253, 1, 6, 94, 83, 0, 23, 162, ++ 1, 130, 222, 138, 0, 144, 4, 3, 170, 222, 2, 240, 9, 68, 3, 171, 94, ++ 2, 240, 9, 22, 1, 132, 96, 2, 13, 144, 108, 1, 188, 99, 255, 31, 247, ++ 153, 0, 176, 30, 35, 0, 23, 162, 0, 104, 222, 171, 0, 41, 8, 0, 160, ++ 94, 79, 255, 119, 161, 0, 104, 222, 135, 7, 41, 20, 3, 191, 222, 2, ++ 240, 9, 10, 2, 132, 82, 15, 0, 9, 20, 2, 4, 210, 15, 0, 9, 13, 3, 177, ++ 94, 2, 240, 9, 19, 0, 176, 30, 31, 0, 23, 162, 3, 191, 222, 2, 240, ++ 9, 14, 3, 179, 94, 2, 240, 9, 19, 2, 0, 82, 23, 0, 9, 20, 0, 104, 94, ++ 139, 255, 233, 20, 0, 224, 1, 94, 244, 80, 101, 2, 1, 90, 71, 0, 9, ++ 20, 0, 176, 30, 79, 0, 23, 153, 1, 132, 96, 6, 13, 144, 108, 2, 0, 82, ++ 23, 0, 9, 66, 3, 49, 94, 2, 240, 9, 66, 2, 2, 0, 191, 0, 9, 66, 1, 128, ++ 224, 1, 97, 11, 8, 2, 0, 82, 23, 0, 9, 29, 0, 104, 222, 79, 4, 9, 28, ++ 0, 176, 42, 215, 0, 23, 162, 0, 109, 222, 137, 85, 9, 48, 2, 2, 171, ++ 47, 0, 9, 61, 2, 131, 43, 47, 0, 9, 31, 0, 104, 94, 95, 0, 9, 42, 1, ++ 188, 96, 3, 0, 23, 163, 1, 56, 82, 3, 0, 23, 163, 2, 131, 171, 47, 0, ++ 9, 38, 0, 104, 222, 95, 0, 41, 38, 1, 8, 94, 143, 0, 23, 163, 0, 105, ++ 94, 143, 0, 105, 61, 3, 191, 222, 2, 240, 9, 42, 0, 109, 222, 95, 0, ++ 73, 40, 3, 191, 222, 2, 240, 9, 61, 2, 132, 43, 47, 0, 9, 61, 0, 104, ++ 222, 143, 0, 9, 61, 0, 104, 42, 155, 0, 9, 61, 0, 176, 43, 147, 0, 23, ++ 162, 0, 109, 170, 154, 244, 73, 61, 0, 104, 94, 171, 0, 73, 48, 0, 104, ++ 94, 79, 6, 137, 48, 3, 191, 222, 2, 240, 9, 57, 0, 176, 43, 155, 0, ++ 23, 162, 0, 176, 42, 155, 0, 23, 161, 2, 131, 172, 39, 0, 9, 53, 0, ++ 104, 44, 135, 0, 9, 54, 0, 109, 94, 133, 100, 41, 54, 0, 176, 44, 127, ++ 0, 23, 162, 0, 109, 94, 137, 92, 169, 56, 0, 176, 44, 75, 0, 11, 17, ++ 1, 132, 224, 6, 247, 247, 191, 0, 104, 222, 79, 2, 137, 61, 0, 2, 94, ++ 2, 240, 23, 200, 2, 6, 222, 255, 0, 9, 61, 0, 224, 43, 199, 0, 42, 241, ++ 0, 104, 222, 95, 0, 9, 64, 0, 104, 222, 171, 0, 73, 64, 1, 128, 224, ++ 5, 97, 11, 8, 0, 104, 43, 79, 0, 9, 66, 1, 128, 224, 6, 247, 247, 191, ++ 1, 188, 99, 255, 31, 247, 165, 3, 43, 94, 2, 240, 9, 69, 0, 176, 30, ++ 79, 0, 23, 165, 2, 7, 82, 15, 0, 9, 193, 2, 128, 71, 163, 0, 9, 190, ++ 2, 128, 71, 179, 0, 9, 190, 0, 224, 32, 147, 0, 136, 36, 0, 232, 32, ++ 143, 0, 136, 35, 1, 188, 96, 3, 0, 17, 228, 1, 188, 96, 3, 3, 209, 225, ++ 2, 6, 94, 83, 0, 9, 78, 1, 188, 96, 3, 4, 145, 225, 2, 6, 222, 83, 0, ++ 9, 82, 0, 224, 71, 135, 0, 81, 225, 2, 7, 210, 15, 0, 9, 82, 0, 224, ++ 71, 135, 0, 145, 225, 0, 109, 64, 51, 2, 202, 73, 0, 104, 94, 79, 5, ++ 137, 85, 0, 104, 222, 171, 0, 73, 193, 3, 171, 94, 2, 240, 9, 88, 2, ++ 0, 82, 23, 0, 9, 193, 2, 5, 128, 243, 0, 9, 93, 0, 104, 94, 151, 255, ++ 233, 90, 0, 224, 94, 151, 0, 151, 165, 0, 104, 222, 151, 255, 233, 93, ++ 2, 128, 82, 23, 0, 9, 193, 2, 7, 0, 191, 0, 9, 193, 1, 188, 96, 27, ++ 4, 55, 162, 0, 144, 71, 135, 0, 48, 101, 0, 224, 65, 150, 244, 80, 101, ++ 0, 224, 71, 135, 1, 8, 26, 3, 131, 94, 2, 240, 9, 100, 0, 2, 94, 2, ++ 240, 18, 47, 0, 109, 64, 49, 3, 73, 97, 0, 109, 64, 49, 3, 74, 73, 1, ++ 188, 96, 11, 29, 87, 161, 0, 104, 222, 151, 255, 233, 116, 1, 15, 90, ++ 7, 0, 23, 165, 3, 30, 222, 2, 240, 9, 116, 2, 0, 82, 23, 0, 9, 116, ++ 3, 44, 94, 2, 240, 9, 193, 0, 104, 94, 103, 255, 233, 116, 0, 224, 94, ++ 103, 0, 151, 153, 0, 224, 94, 102, 244, 48, 100, 1, 42, 88, 3, 0, 23, ++ 153, 1, 0, 222, 151, 0, 23, 165, 0, 224, 94, 102, 244, 183, 153, 0, ++ 224, 94, 103, 0, 55, 153, 1, 21, 88, 3, 0, 23, 166, 3, 191, 222, 2, ++ 240, 9, 132, 0, 224, 94, 150, 244, 48, 100, 1, 42, 88, 3, 0, 23, 153, ++ 2, 5, 128, 243, 0, 9, 131, 1, 130, 224, 2, 243, 55, 153, 2, 0, 82, 23, ++ 0, 9, 131, 1, 22, 216, 3, 0, 23, 166, 1, 15, 90, 7, 0, 23, 164, 1, 12, ++ 216, 3, 0, 23, 161, 0, 104, 222, 146, 244, 41, 127, 0, 224, 94, 103, ++ 2, 23, 153, 3, 191, 222, 2, 240, 9, 136, 1, 13, 216, 3, 0, 23, 161, ++ 0, 104, 222, 146, 244, 41, 193, 0, 224, 94, 103, 4, 23, 153, 3, 191, ++ 222, 2, 240, 9, 136, 1, 16, 88, 3, 0, 23, 166, 0, 104, 222, 155, 0, ++ 201, 136, 1, 129, 218, 3, 0, 23, 161, 0, 184, 94, 134, 192, 23, 161, ++ 2, 129, 222, 135, 0, 9, 193, 0, 136, 94, 103, 0, 119, 128, 0, 224, 0, ++ 174, 240, 16, 100, 1, 170, 222, 100, 255, 135, 252, 0, 104, 222, 155, ++ 0, 73, 162, 2, 7, 129, 135, 0, 9, 149, 0, 109, 222, 3, 12, 9, 149, 2, ++ 133, 82, 15, 0, 9, 149, 2, 152, 82, 59, 0, 9, 149, 1, 129, 224, 4, 255, ++ 167, 253, 0, 224, 94, 0, 11, 55, 163, 0, 224, 94, 143, 0, 151, 163, ++ 0, 224, 65, 135, 0, 119, 162, 0, 2, 94, 2, 240, 16, 207, 0, 232, 32, ++ 143, 1, 8, 35, 1, 188, 96, 35, 6, 215, 129, 0, 136, 94, 151, 0, 119, ++ 161, 0, 232, 94, 134, 244, 176, 99, 1, 188, 96, 7, 14, 23, 161, 0, 224, ++ 65, 142, 244, 48, 99, 0, 176, 86, 23, 0, 23, 161, 0, 176, 86, 27, 0, ++ 23, 162, 0, 104, 222, 134, 208, 73, 193, 0, 104, 222, 138, 208, 105, ++ 193, 0, 2, 94, 2, 240, 16, 164, 1, 188, 96, 35, 6, 144, 100, 1, 188, ++ 98, 79, 0, 23, 162, 0, 2, 94, 2, 240, 16, 247, 0, 224, 71, 135, 2, 23, ++ 161, 3, 131, 94, 2, 240, 9, 166, 0, 110, 192, 50, 244, 41, 164, 0, 110, ++ 192, 50, 244, 44, 153, 0, 104, 94, 155, 0, 73, 190, 1, 188, 98, 30, ++ 244, 113, 224, 0, 104, 222, 155, 0, 201, 177, 1, 188, 97, 19, 0, 183, ++ 161, 2, 6, 0, 243, 0, 9, 173, 1, 188, 96, 19, 0, 183, 161, 1, 188, 96, ++ 3, 0, 17, 238, 0, 176, 94, 107, 0, 17, 239, 1, 146, 224, 14, 244, 49, ++ 236, 3, 191, 222, 2, 240, 9, 190, 0, 104, 94, 155, 0, 105, 179, 0, 104, ++ 222, 155, 0, 169, 190, 1, 152, 96, 6, 61, 17, 232, 0, 224, 32, 147, ++ 0, 136, 36, 0, 232, 32, 143, 0, 136, 35, 1, 188, 96, 3, 0, 17, 234, ++ 0, 104, 222, 95, 0, 73, 185, 0, 176, 94, 107, 0, 17, 235, 1, 146, 222, ++ 94, 61, 17, 232, 1, 135, 96, 2, 61, 17, 232, 0, 104, 222, 155, 0, 169, ++ 189, 1, 135, 96, 6, 61, 17, 232, 1, 152, 96, 22, 61, 17, 232, 1, 129, ++ 224, 4, 255, 135, 252, 1, 170, 222, 100, 255, 135, 252, 3, 191, 222, ++ 2, 240, 9, 198, 1, 188, 98, 15, 0, 17, 224, 1, 188, 96, 3, 0, 17, 228, ++ 1, 129, 224, 0, 255, 167, 253, 1, 188, 96, 15, 0, 17, 232, 1, 188, 96, ++ 3, 0, 17, 236, 2, 0, 31, 247, 0, 9, 205, 0, 224, 32, 142, 243, 72, 35, ++ 0, 176, 32, 147, 0, 16, 37, 0, 232, 32, 142, 4, 168, 35, 0, 106, 160, ++ 143, 1, 201, 205, 1, 184, 96, 6, 4, 144, 36, 1, 130, 224, 6, 242, 151, ++ 148, 1, 136, 96, 10, 0, 144, 4, 1, 188, 96, 3, 24, 119, 149, 3, 160, ++ 222, 2, 240, 9, 218, 0, 104, 94, 79, 6, 169, 223, 1, 56, 82, 3, 0, 23, ++ 128, 0, 176, 94, 95, 0, 23, 129, 2, 4, 222, 183, 0, 9, 217, 0, 104, ++ 94, 7, 0, 9, 216, 1, 188, 96, 3, 1, 119, 128, 1, 188, 96, 3, 0, 55, ++ 129, 3, 191, 222, 2, 240, 9, 217, 1, 188, 96, 3, 1, 87, 128, 0, 2, 94, ++ 2, 240, 1, 67, 0, 104, 222, 171, 0, 73, 223, 0, 160, 94, 79, 4, 119, ++ 161, 0, 104, 94, 135, 0, 76, 40, 0, 104, 94, 135, 4, 76, 40, 3, 191, ++ 222, 2, 240, 14, 46, 1, 128, 96, 1, 133, 172, 45, 0, 110, 176, 91, 0, ++ 42, 27, 0, 104, 222, 79, 4, 10, 27, 3, 51, 94, 2, 240, 10, 27, 1, 128, ++ 96, 1, 131, 108, 27, 0, 224, 48, 139, 0, 44, 34, 3, 146, 222, 2, 240, ++ 10, 27, 0, 224, 48, 107, 0, 44, 26, 0, 176, 48, 91, 0, 23, 161, 0, 109, ++ 48, 106, 244, 41, 234, 3, 191, 222, 2, 240, 10, 25, 1, 128, 96, 5, 131, ++ 108, 27, 1, 188, 96, 39, 8, 151, 161, 0, 2, 94, 2, 240, 1, 39, 1, 135, ++ 224, 6, 3, 44, 32, 0, 176, 1, 67, 0, 12, 33, 3, 131, 94, 2, 240, 10, ++ 23, 0, 109, 192, 51, 5, 201, 250, 0, 232, 96, 186, 1, 151, 166, 0, 128, ++ 222, 155, 1, 23, 165, 0, 104, 94, 95, 0, 9, 245, 0, 128, 222, 155, 0, ++ 87, 165, 0, 176, 65, 183, 0, 12, 44, 0, 128, 176, 179, 12, 140, 44, ++ 0, 176, 65, 183, 0, 12, 44, 0, 176, 48, 179, 0, 16, 64, 0, 0, 128, 0, ++ 0, 0, 0, 1, 188, 96, 27, 6, 208, 101, 1, 188, 96, 3, 0, 183, 164, 0, ++ 2, 94, 2, 240, 1, 114, 0, 104, 94, 147, 0, 170, 2, 3, 131, 94, 2, 240, ++ 10, 23, 0, 109, 192, 49, 130, 234, 23, 1, 188, 96, 3, 6, 76, 44, 3, ++ 191, 222, 2, 240, 9, 246, 2, 7, 193, 151, 0, 10, 5, 1, 56, 90, 7, 0, ++ 23, 187, 3, 191, 222, 2, 240, 10, 6, 1, 60, 90, 3, 0, 23, 187, 1, 188, ++ 96, 27, 4, 55, 166, 0, 232, 65, 150, 244, 215, 163, 0, 136, 94, 143, ++ 0, 55, 163, 0, 224, 94, 142, 247, 119, 165, 0, 224, 94, 151, 0, 87, ++ 165, 3, 131, 94, 2, 240, 10, 23, 0, 109, 192, 49, 130, 234, 23, 0, 109, ++ 192, 50, 244, 170, 23, 0, 232, 94, 150, 1, 151, 166, 0, 128, 222, 155, ++ 1, 23, 164, 0, 104, 94, 95, 0, 10, 18, 0, 128, 222, 155, 0, 87, 164, ++ 0, 176, 65, 183, 0, 23, 164, 0, 128, 222, 147, 12, 151, 164, 0, 176, ++ 65, 183, 0, 16, 64, 0, 0, 128, 0, 0, 0, 0, 3, 191, 222, 2, 240, 10, ++ 11, 3, 134, 222, 2, 240, 12, 156, 3, 191, 222, 2, 240, 13, 132, 1, 128, ++ 96, 1, 131, 108, 27, 1, 188, 96, 3, 0, 12, 26, 3, 134, 222, 2, 240, ++ 12, 156, 2, 135, 192, 55, 0, 12, 153, 0, 2, 94, 2, 240, 18, 47, 3, 3, ++ 94, 2, 240, 10, 27, 3, 169, 222, 2, 240, 10, 37, 0, 2, 94, 2, 240, 18, ++ 47, 2, 7, 64, 55, 0, 10, 32, 3, 134, 222, 2, 240, 12, 156, 2, 135, 192, ++ 55, 0, 12, 153, 0, 2, 94, 2, 240, 14, 156, 0, 110, 64, 48, 2, 10, 79, ++ 3, 1, 222, 2, 240, 10, 79, 0, 104, 222, 171, 0, 10, 54, 3, 43, 94, 2, ++ 240, 10, 43, 0, 224, 2, 43, 0, 32, 138, 3, 191, 222, 2, 240, 10, 47, ++ 2, 128, 82, 23, 0, 10, 46, 0, 224, 2, 67, 0, 32, 144, 3, 191, 222, 2, ++ 240, 10, 47, 0, 224, 2, 87, 0, 32, 149, 0, 104, 94, 79, 4, 13, 126, ++ 0, 104, 94, 79, 2, 141, 126, 0, 104, 94, 79, 2, 11, 188, 0, 104, 94, ++ 79, 5, 14, 30, 0, 104, 94, 79, 6, 14, 30, 0, 104, 94, 79, 6, 142, 40, ++ 3, 191, 222, 2, 240, 14, 46, 0, 104, 222, 171, 0, 42, 72, 3, 43, 94, ++ 2, 240, 10, 58, 0, 224, 2, 47, 0, 32, 139, 3, 191, 222, 2, 240, 10, ++ 62, 2, 128, 82, 23, 0, 10, 61, 0, 224, 2, 71, 0, 32, 145, 3, 191, 222, ++ 2, 240, 10, 62, 0, 224, 2, 91, 0, 32, 150, 0, 104, 94, 79, 6, 171, 137, ++ 0, 104, 94, 79, 4, 46, 70, 0, 104, 94, 79, 4, 174, 70, 0, 104, 94, 79, ++ 5, 172, 45, 0, 104, 94, 79, 6, 43, 137, 0, 104, 94, 79, 5, 46, 28, 0, ++ 160, 94, 79, 255, 119, 161, 0, 104, 94, 135, 7, 46, 57, 0, 104, 94, ++ 79, 22, 172, 56, 3, 191, 222, 2, 240, 11, 176, 3, 191, 222, 2, 240, ++ 11, 180, 0, 224, 2, 15, 0, 32, 131, 1, 188, 96, 3, 0, 17, 236, 1, 188, ++ 96, 15, 0, 17, 232, 2, 132, 192, 59, 0, 9, 193, 1, 132, 224, 6, 9, 16, ++ 72, 3, 191, 222, 2, 240, 9, 193, 2, 0, 192, 147, 0, 0, 2, 3, 163, 94, ++ 2, 240, 10, 83, 3, 195, 94, 2, 240, 10, 82, 3, 191, 222, 2, 240, 13, ++ 10, 0, 2, 94, 2, 240, 18, 47, 2, 7, 192, 175, 0, 10, 86, 2, 7, 64, 55, ++ 0, 10, 83, 1, 7, 192, 175, 0, 23, 161, 0, 184, 94, 135, 0, 55, 161, ++ 1, 130, 94, 134, 13, 144, 108, 0, 176, 68, 127, 0, 7, 254, 1, 131, 96, ++ 2, 9, 16, 72, 2, 135, 192, 55, 0, 12, 153, 3, 134, 222, 2, 240, 12, ++ 156, 0, 2, 94, 2, 240, 18, 47, 3, 67, 94, 2, 240, 10, 91, 2, 135, 192, ++ 55, 0, 12, 153, 3, 1, 222, 2, 240, 10, 122, 3, 48, 94, 2, 240, 10, 122, ++ 1, 188, 96, 31, 21, 80, 101, 0, 224, 65, 148, 245, 48, 101, 1, 56, 64, ++ 43, 0, 22, 128, 1, 45, 64, 107, 0, 23, 162, 0, 136, 94, 139, 1, 55, ++ 162, 2, 136, 64, 39, 0, 10, 105, 1, 132, 96, 6, 208, 22, 128, 0, 176, ++ 90, 2, 244, 86, 128, 2, 5, 192, 39, 0, 10, 108, 1, 135, 224, 6, 208, ++ 22, 128, 1, 188, 96, 27, 13, 215, 161, 0, 2, 94, 2, 240, 1, 39, 0, 176, ++ 64, 103, 0, 22, 129, 1, 188, 96, 27, 13, 247, 161, 0, 2, 94, 2, 240, ++ 1, 39, 0, 176, 64, 103, 0, 22, 130, 0, 176, 90, 11, 0, 23, 161, 0, 232, ++ 90, 6, 244, 55, 162, 0, 225, 94, 138, 244, 87, 161, 0, 224, 222, 134, ++ 244, 87, 161, 0, 152, 94, 135, 0, 183, 161, 0, 224, 30, 167, 0, 103, ++ 169, 0, 105, 30, 167, 1, 138, 122, 1, 188, 96, 3, 0, 7, 169, 2, 128, ++ 31, 247, 0, 10, 124, 0, 110, 64, 48, 2, 11, 132, 3, 129, 222, 2, 240, ++ 10, 137, 0, 224, 2, 23, 0, 32, 133, 3, 41, 222, 2, 240, 10, 128, 2, ++ 144, 46, 3, 0, 10, 129, 1, 188, 96, 3, 0, 43, 128, 3, 169, 222, 2, 240, ++ 10, 133, 1, 132, 224, 6, 9, 16, 72, 1, 128, 224, 2, 9, 16, 72, 1, 132, ++ 224, 2, 247, 247, 191, 3, 134, 222, 2, 240, 12, 156, 1, 128, 96, 4, ++ 255, 135, 252, 1, 128, 96, 6, 242, 151, 148, 3, 191, 222, 2, 240, 11, ++ 54, 0, 104, 222, 79, 4, 10, 140, 3, 51, 94, 2, 240, 10, 140, 1, 188, ++ 96, 3, 0, 12, 26, 1, 131, 96, 2, 247, 247, 191, 3, 41, 222, 2, 240, ++ 10, 144, 2, 136, 174, 3, 0, 10, 162, 1, 188, 96, 3, 0, 11, 128, 3, 171, ++ 94, 2, 240, 10, 157, 0, 104, 94, 171, 0, 42, 161, 0, 104, 94, 171, 0, ++ 10, 155, 1, 12, 82, 15, 0, 23, 161, 0, 104, 94, 135, 0, 42, 151, 0, ++ 104, 94, 135, 0, 74, 153, 3, 191, 222, 2, 240, 10, 161, 3, 176, 222, ++ 2, 240, 10, 157, 3, 191, 222, 2, 240, 10, 159, 3, 177, 94, 2, 240, 10, ++ 157, 3, 191, 222, 2, 240, 10, 159, 3, 179, 94, 2, 240, 10, 157, 3, 191, ++ 222, 2, 240, 10, 159, 1, 188, 96, 3, 0, 75, 128, 3, 191, 222, 2, 240, ++ 10, 162, 1, 188, 96, 3, 0, 139, 128, 3, 191, 222, 2, 240, 10, 162, 1, ++ 188, 96, 3, 0, 43, 128, 3, 134, 222, 2, 240, 12, 156, 3, 171, 94, 2, ++ 240, 10, 167, 1, 240, 82, 19, 0, 17, 134, 1, 165, 224, 10, 48, 17, 128, ++ 3, 191, 222, 2, 240, 10, 201, 3, 169, 222, 2, 240, 10, 173, 0, 104, ++ 222, 171, 0, 74, 201, 0, 176, 82, 59, 0, 23, 159, 0, 176, 82, 59, 0, ++ 23, 190, 1, 188, 96, 3, 0, 40, 8, 3, 191, 222, 2, 240, 10, 201, 2, 135, ++ 94, 83, 0, 10, 214, 3, 160, 222, 2, 240, 10, 184, 3, 191, 222, 2, 240, ++ 7, 203, 1, 144, 96, 10, 9, 16, 72, 0, 176, 82, 59, 0, 23, 159, 0, 176, ++ 82, 59, 0, 23, 190, 1, 158, 94, 131, 0, 176, 235, 1, 6, 82, 15, 0, 23, ++ 161, 0, 184, 94, 135, 0, 55, 161, 1, 130, 222, 134, 245, 119, 171, 1, ++ 188, 97, 3, 0, 48, 128, 0, 232, 82, 58, 243, 247, 162, 0, 107, 210, ++ 58, 243, 234, 187, 0, 232, 94, 126, 145, 215, 162, 0, 144, 94, 139, ++ 0, 151, 161, 1, 188, 96, 35, 1, 16, 100, 0, 107, 82, 58, 243, 234, 198, ++ 1, 24, 94, 135, 0, 23, 162, 1, 10, 94, 135, 0, 23, 163, 0, 136, 96, ++ 6, 244, 87, 162, 0, 224, 65, 146, 244, 112, 100, 0, 176, 88, 2, 244, ++ 86, 0, 0, 107, 222, 250, 145, 202, 201, 0, 176, 82, 59, 0, 23, 190, ++ 3, 191, 222, 2, 240, 10, 201, 0, 2, 94, 2, 240, 22, 89, 0, 176, 32, ++ 35, 0, 40, 8, 0, 176, 82, 59, 0, 23, 159, 3, 32, 222, 2, 240, 10, 214, ++ 2, 7, 94, 83, 0, 10, 205, 1, 128, 224, 2, 9, 16, 72, 3, 191, 222, 2, ++ 240, 10, 214, 0, 104, 222, 95, 0, 10, 211, 2, 26, 84, 7, 0, 10, 209, ++ 1, 3, 192, 39, 0, 23, 161, 1, 130, 94, 134, 16, 208, 134, 1, 2, 192, ++ 39, 0, 23, 161, 0, 224, 66, 42, 244, 48, 138, 1, 128, 224, 4, 255, 135, ++ 252, 3, 169, 222, 2, 240, 10, 214, 0, 176, 94, 71, 0, 16, 128, 1, 8, ++ 94, 79, 0, 23, 161, 0, 104, 94, 135, 0, 43, 4, 3, 171, 94, 2, 240, 11, ++ 8, 2, 0, 82, 23, 0, 10, 238, 0, 104, 222, 171, 0, 74, 220, 0, 224, 2, ++ 83, 0, 32, 148, 2, 134, 94, 83, 0, 11, 54, 2, 132, 82, 15, 0, 13, 12, ++ 2, 132, 210, 15, 0, 10, 225, 3, 172, 94, 2, 240, 10, 236, 3, 191, 222, ++ 2, 240, 10, 247, 3, 44, 94, 2, 240, 10, 247, 0, 104, 94, 79, 4, 10, ++ 236, 1, 6, 210, 15, 0, 23, 161, 0, 128, 142, 207, 1, 151, 162, 0, 224, ++ 1, 94, 13, 176, 100, 1, 129, 222, 134, 195, 246, 31, 1, 135, 222, 134, ++ 36, 145, 36, 0, 104, 48, 83, 255, 234, 236, 0, 176, 68, 103, 0, 12, ++ 21, 2, 0, 94, 135, 0, 10, 236, 0, 224, 68, 101, 130, 140, 21, 0, 104, ++ 94, 79, 2, 11, 54, 3, 191, 222, 2, 240, 11, 35, 3, 30, 222, 2, 240, ++ 10, 244, 3, 49, 94, 2, 240, 10, 244, 0, 104, 222, 171, 0, 74, 244, 0, ++ 128, 142, 207, 1, 151, 162, 0, 224, 1, 94, 13, 176, 100, 1, 129, 224, ++ 2, 195, 246, 31, 0, 104, 222, 171, 0, 74, 249, 0, 224, 2, 63, 0, 32, ++ 143, 3, 191, 222, 2, 240, 10, 252, 0, 104, 94, 171, 0, 74, 252, 2, 128, ++ 82, 47, 0, 11, 54, 2, 2, 65, 7, 0, 10, 252, 0, 104, 94, 79, 4, 11, 54, ++ 0, 104, 94, 79, 2, 139, 54, 2, 6, 222, 83, 0, 11, 1, 0, 40, 224, 30, ++ 244, 11, 1, 0, 160, 68, 183, 3, 225, 69, 0, 176, 5, 19, 0, 23, 161, ++ 0, 224, 94, 132, 40, 161, 70, 2, 132, 65, 7, 0, 11, 54, 1, 128, 96, ++ 6, 242, 151, 148, 3, 191, 222, 2, 240, 11, 54, 3, 43, 94, 2, 240, 11, ++ 54, 0, 104, 94, 79, 5, 171, 35, 0, 104, 94, 79, 5, 43, 35, 3, 191, 222, ++ 2, 240, 11, 54, 0, 104, 222, 171, 0, 75, 17, 0, 109, 142, 207, 0, 43, ++ 17, 1, 188, 96, 3, 0, 10, 181, 1, 130, 96, 2, 245, 215, 174, 2, 128, ++ 94, 255, 0, 11, 15, 0, 104, 43, 79, 0, 11, 17, 0, 224, 68, 101, 90, ++ 74, 211, 0, 104, 43, 107, 255, 203, 17, 0, 224, 43, 107, 0, 42, 218, ++ 2, 6, 94, 83, 0, 11, 20, 0, 224, 2, 99, 0, 32, 152, 3, 191, 222, 2, ++ 240, 11, 54, 3, 35, 222, 2, 240, 11, 30, 1, 41, 80, 11, 0, 23, 163, ++ 0, 104, 222, 143, 5, 43, 30, 2, 6, 128, 199, 0, 11, 25, 1, 130, 224, ++ 1, 134, 12, 48, 1, 135, 224, 2, 16, 112, 131, 1, 132, 96, 2, 9, 16, ++ 72, 0, 176, 94, 135, 0, 23, 161, 0, 110, 224, 3, 0, 43, 29, 3, 209, ++ 222, 2, 240, 11, 30, 0, 104, 222, 171, 0, 75, 32, 0, 224, 2, 39, 0, ++ 32, 137, 0, 104, 94, 79, 0, 11, 54, 0, 104, 94, 79, 1, 11, 54, 0, 104, ++ 94, 79, 5, 139, 54, 0, 128, 142, 207, 1, 151, 162, 0, 224, 1, 94, 13, ++ 176, 101, 0, 32, 218, 127, 20, 11, 54, 2, 128, 71, 199, 0, 11, 130, ++ 3, 41, 222, 2, 240, 11, 44, 1, 2, 222, 175, 0, 23, 161, 1, 6, 82, 15, ++ 0, 23, 162, 0, 56, 94, 134, 244, 75, 54, 1, 130, 222, 138, 245, 119, ++ 171, 0, 176, 82, 35, 0, 17, 242, 0, 176, 82, 39, 0, 17, 243, 0, 176, ++ 82, 43, 0, 17, 244, 1, 6, 82, 15, 0, 23, 161, 0, 224, 94, 135, 0, 49, ++ 245, 0, 176, 0, 91, 0, 17, 240, 0, 176, 71, 195, 0, 24, 0, 1, 52, 199, ++ 199, 0, 23, 161, 0, 110, 222, 132, 2, 171, 54, 1, 188, 96, 3, 8, 16, ++ 66, 2, 131, 193, 7, 0, 11, 58, 3, 1, 222, 2, 240, 11, 57, 3, 181, 94, ++ 2, 240, 11, 58, 2, 128, 94, 83, 0, 13, 12, 0, 176, 64, 51, 0, 23, 161, ++ 1, 8, 159, 247, 0, 23, 162, 0, 104, 94, 139, 0, 107, 66, 0, 232, 64, ++ 49, 4, 151, 161, 2, 129, 31, 247, 0, 11, 66, 0, 176, 32, 147, 0, 23, ++ 161, 2, 128, 159, 247, 0, 11, 66, 0, 176, 94, 99, 0, 23, 161, 0, 110, ++ 94, 132, 2, 11, 132, 0, 176, 94, 135, 0, 7, 244, 1, 129, 96, 0, 255, ++ 135, 252, 2, 2, 192, 19, 0, 11, 72, 0, 224, 94, 132, 3, 71, 244, 1, ++ 129, 96, 4, 255, 135, 252, 2, 1, 31, 247, 0, 11, 125, 1, 3, 94, 83, ++ 0, 23, 161, 1, 135, 222, 132, 255, 135, 252, 3, 134, 222, 2, 240, 12, ++ 156, 0, 2, 94, 2, 240, 18, 47, 3, 133, 94, 2, 240, 11, 75, 1, 142, 96, ++ 2, 61, 17, 232, 1, 7, 199, 131, 0, 23, 161, 1, 130, 94, 132, 255, 135, ++ 252, 2, 1, 159, 247, 0, 11, 84, 1, 3, 199, 151, 0, 23, 161, 1, 130, ++ 94, 132, 255, 167, 253, 0, 176, 32, 51, 0, 23, 161, 1, 142, 94, 132, ++ 255, 167, 253, 3, 42, 94, 2, 240, 11, 92, 0, 2, 94, 2, 240, 14, 128, ++ 3, 41, 222, 2, 240, 11, 91, 3, 1, 222, 2, 240, 11, 91, 1, 130, 224, ++ 6, 13, 144, 108, 3, 191, 222, 2, 240, 8, 163, 1, 188, 96, 3, 0, 17, ++ 236, 1, 188, 96, 15, 0, 17, 232, 1, 132, 96, 4, 255, 167, 253, 0, 176, ++ 64, 39, 0, 7, 246, 0, 176, 64, 107, 0, 7, 248, 0, 176, 64, 111, 0, 7, ++ 249, 0, 176, 64, 43, 0, 7, 247, 1, 188, 96, 27, 13, 215, 161, 0, 2, ++ 94, 2, 240, 1, 39, 0, 176, 64, 103, 0, 23, 162, 1, 188, 96, 27, 13, ++ 247, 161, 0, 2, 94, 2, 240, 1, 39, 0, 176, 64, 103, 0, 23, 161, 0, 232, ++ 94, 138, 244, 55, 162, 0, 225, 94, 138, 244, 87, 161, 0, 224, 222, 134, ++ 244, 87, 161, 0, 152, 94, 135, 0, 183, 161, 1, 188, 94, 134, 1, 71, ++ 247, 0, 104, 31, 51, 0, 11, 121, 1, 143, 96, 6, 1, 39, 246, 0, 104, ++ 31, 51, 0, 43, 118, 0, 176, 31, 199, 0, 23, 161, 0, 2, 94, 2, 240, 1, ++ 39, 0, 160, 64, 100, 249, 215, 162, 0, 184, 94, 136, 254, 23, 161, 3, ++ 191, 222, 2, 240, 11, 119, 0, 160, 65, 56, 254, 23, 161, 0, 104, 222, ++ 135, 0, 11, 121, 1, 143, 96, 2, 1, 39, 246, 1, 132, 96, 4, 255, 167, ++ 253, 0, 2, 94, 2, 240, 14, 156, 1, 188, 99, 255, 31, 215, 168, 0, 2, ++ 94, 2, 240, 16, 147, 0, 2, 94, 2, 240, 14, 128, 1, 168, 96, 10, 0, 144, ++ 4, 2, 1, 31, 247, 0, 22, 69, 0, 168, 64, 19, 0, 80, 4, 3, 191, 222, ++ 2, 240, 7, 33, 0, 224, 2, 135, 0, 32, 161, 3, 191, 222, 2, 240, 11, ++ 133, 0, 224, 2, 11, 0, 32, 130, 3, 169, 222, 2, 240, 13, 12, 1, 132, ++ 96, 6, 9, 16, 72, 1, 132, 224, 6, 9, 16, 72, 3, 191, 222, 2, 240, 13, ++ 12, 3, 43, 94, 2, 240, 11, 172, 0, 104, 222, 79, 6, 171, 141, 0, 224, ++ 2, 59, 0, 32, 142, 3, 191, 222, 2, 240, 11, 142, 0, 224, 2, 55, 0, 32, ++ 141, 3, 35, 222, 2, 240, 11, 176, 0, 104, 222, 78, 241, 203, 176, 2, ++ 6, 128, 199, 0, 11, 146, 1, 130, 224, 1, 134, 12, 48, 1, 135, 224, 2, ++ 16, 112, 131, 1, 132, 96, 2, 9, 16, 72, 0, 176, 94, 135, 0, 23, 161, ++ 0, 110, 224, 3, 0, 43, 150, 3, 209, 222, 2, 240, 11, 151, 0, 104, 94, ++ 79, 6, 43, 170, 1, 188, 96, 3, 0, 8, 51, 3, 41, 94, 2, 240, 11, 156, ++ 2, 3, 222, 179, 0, 11, 157, 1, 145, 96, 26, 132, 244, 39, 1, 131, 224, ++ 2, 245, 151, 172, 2, 2, 0, 191, 0, 11, 169, 2, 6, 171, 211, 0, 11, 162, ++ 2, 3, 69, 175, 0, 11, 164, 1, 133, 224, 6, 45, 113, 107, 3, 191, 222, ++ 2, 240, 11, 164, 2, 3, 69, 111, 0, 11, 164, 1, 133, 224, 6, 43, 113, ++ 91, 2, 4, 94, 179, 0, 11, 169, 1, 135, 224, 2, 16, 112, 131, 1, 131, ++ 224, 2, 9, 16, 72, 0, 2, 94, 2, 240, 21, 147, 3, 191, 222, 2, 240, 11, ++ 176, 2, 5, 80, 11, 0, 11, 176, 1, 130, 96, 6, 9, 16, 72, 3, 191, 222, ++ 2, 240, 11, 176, 0, 2, 94, 2, 240, 11, 183, 0, 104, 222, 79, 6, 43, ++ 176, 0, 224, 2, 79, 0, 32, 147, 3, 191, 222, 2, 240, 11, 176, 3, 171, ++ 94, 2, 240, 11, 178, 2, 4, 65, 7, 0, 11, 181, 2, 131, 65, 7, 0, 10, ++ 79, 3, 191, 222, 2, 240, 11, 181, 2, 132, 65, 7, 0, 10, 79, 1, 128, ++ 96, 6, 242, 151, 148, 3, 191, 222, 2, 240, 10, 79, 2, 135, 0, 195, 0, ++ 11, 187, 0, 104, 210, 19, 0, 11, 187, 1, 188, 96, 3, 0, 17, 131, 1, ++ 188, 96, 3, 0, 17, 130, 0, 2, 222, 2, 240, 0, 0, 3, 159, 94, 2, 240, ++ 11, 191, 3, 158, 222, 2, 240, 14, 46, 2, 3, 94, 83, 0, 14, 46, 1, 12, ++ 129, 67, 0, 23, 161, 0, 104, 222, 135, 0, 43, 196, 1, 0, 1, 99, 0, 23, ++ 161, 1, 2, 192, 39, 0, 23, 162, 0, 56, 222, 134, 244, 75, 180, 3, 171, ++ 94, 2, 240, 11, 198, 2, 0, 82, 23, 0, 11, 180, 2, 128, 82, 47, 0, 11, ++ 200, 3, 51, 94, 2, 240, 14, 46, 2, 24, 29, 243, 0, 11, 236, 1, 188, ++ 96, 27, 6, 16, 101, 1, 188, 96, 3, 27, 183, 164, 0, 2, 94, 2, 240, 1, ++ 114, 0, 176, 94, 143, 0, 23, 166, 0, 104, 222, 147, 27, 171, 232, 2, ++ 7, 193, 151, 0, 11, 213, 1, 56, 90, 7, 0, 23, 161, 1, 60, 90, 7, 0, ++ 23, 162, 1, 188, 90, 10, 244, 87, 162, 1, 60, 90, 11, 0, 23, 163, 1, ++ 188, 90, 14, 244, 119, 163, 3, 191, 222, 2, 240, 11, 216, 1, 60, 90, ++ 3, 0, 23, 161, 0, 176, 90, 7, 0, 23, 162, 0, 176, 90, 11, 0, 23, 163, ++ 0, 109, 94, 135, 0, 139, 226, 1, 188, 97, 191, 10, 23, 165, 0, 104, ++ 222, 138, 244, 171, 221, 1, 188, 96, 39, 19, 87, 165, 0, 104, 94, 142, ++ 244, 171, 225, 1, 188, 96, 95, 0, 23, 165, 0, 104, 222, 138, 244, 171, ++ 226, 1, 188, 96, 23, 30, 87, 165, 0, 104, 222, 142, 244, 171, 226, 3, ++ 191, 222, 2, 240, 12, 36, 0, 216, 94, 135, 0, 55, 161, 0, 225, 65, 150, ++ 244, 48, 101, 0, 225, 193, 151, 0, 48, 101, 1, 240, 65, 151, 0, 23, ++ 162, 0, 224, 94, 139, 0, 119, 162, 0, 109, 94, 138, 244, 203, 203, 0, ++ 232, 64, 51, 0, 151, 165, 0, 110, 94, 150, 0, 76, 36, 0, 176, 29, 239, ++ 0, 23, 161, 0, 104, 222, 132, 10, 14, 46, 2, 60, 82, 63, 0, 11, 253, ++ 1, 60, 82, 63, 0, 23, 161, 0, 104, 222, 132, 4, 140, 34, 1, 188, 96, ++ 3, 22, 16, 100, 1, 188, 96, 27, 6, 48, 101, 0, 104, 94, 135, 0, 43, ++ 249, 0, 176, 90, 3, 0, 23, 162, 0, 104, 222, 138, 192, 12, 34, 0, 224, ++ 65, 151, 0, 48, 101, 0, 224, 65, 147, 0, 48, 100, 0, 232, 94, 135, 0, ++ 87, 161, 0, 106, 94, 135, 0, 43, 242, 0, 104, 94, 135, 0, 11, 254, 1, ++ 56, 90, 3, 0, 23, 161, 1, 56, 88, 3, 0, 23, 162, 0, 104, 222, 134, 244, ++ 76, 34, 3, 191, 222, 2, 240, 11, 254, 2, 133, 193, 7, 0, 14, 46, 1, ++ 188, 96, 27, 6, 16, 101, 1, 188, 96, 3, 5, 183, 164, 0, 2, 94, 2, 240, ++ 1, 114, 2, 128, 0, 195, 0, 12, 34, 1, 188, 96, 19, 20, 23, 166, 0, 224, ++ 1, 127, 0, 183, 165, 0, 109, 94, 150, 244, 204, 6, 1, 188, 96, 19, 12, ++ 151, 165, 0, 104, 94, 148, 11, 204, 38, 0, 176, 1, 123, 0, 16, 101, ++ 0, 176, 82, 39, 0, 23, 162, 0, 176, 82, 43, 0, 23, 163, 0, 104, 65, ++ 148, 11, 236, 17, 0, 104, 222, 142, 208, 76, 13, 0, 104, 94, 138, 208, ++ 44, 34, 0, 224, 65, 151, 0, 176, 101, 0, 109, 65, 150, 244, 204, 10, ++ 1, 188, 96, 19, 12, 144, 101, 3, 191, 222, 2, 240, 12, 10, 0, 224, 2, ++ 139, 0, 32, 162, 0, 176, 1, 127, 0, 16, 101, 0, 176, 82, 35, 0, 22, ++ 128, 0, 176, 82, 39, 0, 22, 129, 0, 176, 82, 43, 0, 22, 130, 0, 128, ++ 142, 207, 1, 151, 162, 0, 224, 1, 94, 13, 176, 100, 2, 3, 88, 127, 0, ++ 12, 27, 1, 188, 96, 47, 0, 55, 161, 3, 191, 222, 2, 240, 12, 28, 1, ++ 188, 82, 2, 242, 247, 161, 1, 169, 94, 2, 244, 54, 131, 0, 144, 68, ++ 103, 1, 22, 132, 2, 2, 129, 171, 0, 12, 32, 0, 104, 222, 147, 5, 172, ++ 33, 1, 132, 96, 6, 208, 150, 132, 0, 176, 94, 151, 0, 0, 95, 2, 7, 129, ++ 171, 0, 12, 36, 1, 128, 96, 6, 242, 151, 148, 3, 171, 94, 2, 240, 7, ++ 224, 3, 191, 222, 2, 240, 10, 79, 0, 224, 2, 143, 0, 32, 163, 3, 191, ++ 222, 2, 240, 11, 180, 3, 131, 94, 2, 240, 12, 42, 0, 109, 64, 51, 3, ++ 140, 40, 0, 109, 64, 51, 3, 139, 180, 3, 43, 94, 2, 240, 14, 50, 3, ++ 191, 222, 2, 240, 7, 224, 3, 43, 94, 2, 240, 12, 50, 0, 224, 2, 51, ++ 0, 32, 140, 2, 6, 129, 171, 0, 12, 49, 1, 131, 224, 5, 134, 12, 48, ++ 3, 191, 222, 2, 240, 7, 226, 0, 224, 2, 75, 0, 32, 146, 0, 136, 0, 35, ++ 0, 55, 162, 0, 224, 94, 136, 0, 247, 162, 0, 224, 0, 26, 244, 81, 137, ++ 1, 134, 224, 6, 48, 17, 128, 3, 191, 222, 2, 240, 11, 176, 3, 43, 94, ++ 2, 240, 12, 51, 0, 224, 19, 83, 0, 36, 212, 3, 191, 222, 2, 240, 7, ++ 219, 2, 4, 82, 71, 0, 11, 176, 1, 188, 96, 31, 16, 240, 100, 1, 188, ++ 96, 3, 1, 119, 161, 1, 188, 99, 255, 31, 231, 147, 0, 224, 65, 134, ++ 244, 48, 101, 1, 188, 99, 255, 31, 246, 0, 0, 224, 94, 135, 0, 119, ++ 161, 0, 2, 94, 2, 240, 15, 24, 2, 0, 192, 119, 0, 11, 176, 1, 41, 64, ++ 119, 0, 23, 162, 0, 109, 94, 139, 4, 203, 176, 0, 232, 94, 139, 4, 214, ++ 0, 1, 188, 96, 31, 5, 240, 99, 0, 224, 65, 142, 192, 16, 99, 2, 0, 214, ++ 3, 0, 11, 176, 2, 6, 86, 3, 0, 11, 176, 1, 132, 224, 6, 245, 151, 172, ++ 1, 22, 214, 3, 0, 23, 162, 0, 136, 94, 139, 0, 119, 162, 0, 224, 1, ++ 158, 244, 80, 101, 0, 176, 65, 151, 0, 4, 194, 1, 188, 96, 43, 24, 23, ++ 161, 0, 176, 90, 15, 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, ++ 43, 24, 55, 161, 0, 176, 90, 19, 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, ++ 0, 176, 65, 139, 0, 4, 217, 3, 191, 222, 2, 240, 11, 176, 3, 162, 222, ++ 2, 240, 0, 194, 3, 163, 222, 2, 240, 12, 117, 0, 224, 1, 255, 0, 32, ++ 127, 1, 188, 96, 3, 0, 23, 163, 3, 191, 222, 2, 240, 12, 119, 1, 135, ++ 96, 4, 3, 16, 160, 1, 188, 96, 3, 0, 81, 228, 0, 176, 71, 147, 0, 24, ++ 0, 1, 188, 96, 3, 2, 144, 4, 1, 188, 98, 15, 0, 17, 224, 1, 188, 96, ++ 15, 1, 49, 232, 0, 176, 71, 163, 0, 24, 0, 1, 188, 96, 15, 0, 17, 232, ++ 1, 188, 96, 3, 1, 49, 236, 0, 176, 71, 179, 0, 24, 0, 1, 188, 96, 3, ++ 0, 17, 236, 1, 132, 96, 6, 9, 16, 72, 0, 32, 96, 30, 9, 12, 108, 0, ++ 224, 1, 251, 0, 32, 126, 3, 191, 222, 2, 240, 12, 128, 1, 188, 96, 3, ++ 14, 215, 161, 1, 20, 0, 99, 0, 23, 162, 0, 224, 94, 134, 244, 80, 101, ++ 0, 224, 90, 3, 0, 54, 128, 2, 3, 0, 199, 0, 12, 114, 3, 169, 94, 2, ++ 240, 12, 119, 2, 145, 80, 159, 0, 12, 118, 1, 145, 96, 26, 132, 244, ++ 39, 3, 191, 222, 2, 240, 12, 118, 0, 224, 1, 255, 0, 32, 127, 1, 188, ++ 96, 3, 0, 55, 163, 3, 35, 222, 2, 240, 12, 128, 1, 131, 224, 2, 9, 16, ++ 72, 1, 132, 96, 2, 245, 151, 172, 1, 188, 96, 3, 0, 10, 187, 1, 188, ++ 96, 3, 0, 23, 142, 2, 6, 128, 199, 0, 12, 126, 1, 130, 224, 1, 134, ++ 12, 48, 1, 135, 224, 2, 16, 112, 131, 1, 130, 96, 2, 9, 16, 72, 3, 208, ++ 222, 2, 240, 12, 129, 3, 208, 94, 2, 240, 12, 130, 1, 130, 224, 2, 9, ++ 16, 72, 3, 213, 222, 2, 240, 12, 132, 1, 188, 96, 3, 0, 16, 180, 1, ++ 188, 96, 3, 0, 247, 161, 0, 104, 0, 167, 0, 12, 136, 1, 133, 66, 26, ++ 244, 55, 161, 0, 2, 94, 2, 240, 1, 39, 0, 176, 64, 103, 0, 23, 165, ++ 1, 188, 99, 255, 31, 247, 162, 0, 2, 94, 2, 240, 1, 43, 0, 136, 96, ++ 7, 1, 87, 164, 0, 184, 94, 134, 244, 151, 161, 0, 2, 94, 2, 240, 1, ++ 43, 2, 131, 194, 31, 0, 12, 143, 0, 2, 94, 2, 240, 17, 69, 2, 132, 69, ++ 35, 0, 12, 145, 3, 208, 222, 2, 240, 12, 147, 0, 104, 94, 143, 0, 0, ++ 2, 0, 32, 224, 30, 9, 12, 151, 0, 176, 94, 151, 0, 20, 46, 3, 191, 222, ++ 2, 240, 3, 107, 0, 168, 65, 35, 0, 240, 72, 3, 191, 222, 2, 240, 0, ++ 2, 1, 131, 96, 2, 9, 16, 72, 0, 224, 2, 19, 0, 32, 132, 3, 191, 222, ++ 2, 240, 12, 159, 1, 188, 96, 7, 0, 16, 66, 0, 110, 64, 48, 2, 12, 159, ++ 0, 224, 2, 119, 0, 32, 157, 0, 2, 94, 2, 240, 23, 20, 3, 163, 94, 2, ++ 240, 10, 79, 3, 198, 222, 2, 240, 12, 162, 3, 42, 222, 2, 240, 12, 169, ++ 0, 176, 48, 35, 0, 8, 8, 0, 176, 48, 39, 0, 8, 9, 0, 176, 48, 43, 0, ++ 8, 10, 0, 176, 48, 47, 0, 8, 11, 0, 176, 48, 51, 0, 23, 159, 3, 191, ++ 222, 2, 240, 13, 12, 1, 132, 224, 6, 9, 16, 72, 3, 191, 222, 2, 240, ++ 13, 12, 2, 6, 129, 171, 0, 12, 174, 2, 129, 176, 195, 0, 0, 189, 2, ++ 131, 48, 195, 0, 0, 189, 2, 132, 69, 35, 0, 0, 189, 3, 32, 222, 2, 240, ++ 12, 182, 0, 104, 160, 199, 0, 12, 179, 1, 188, 96, 159, 2, 23, 161, ++ 0, 224, 68, 102, 244, 40, 49, 0, 107, 68, 101, 6, 44, 183, 0, 32, 225, ++ 2, 9, 0, 189, 0, 2, 94, 2, 240, 13, 40, 1, 188, 96, 3, 0, 8, 49, 0, ++ 32, 227, 138, 9, 0, 189, 2, 132, 69, 35, 0, 0, 189, 0, 176, 94, 135, ++ 0, 23, 161, 3, 145, 94, 2, 240, 0, 189, 3, 150, 222, 2, 240, 0, 189, ++ 3, 150, 94, 2, 240, 0, 189, 0, 2, 94, 2, 240, 13, 40, 0, 225, 13, 178, ++ 40, 227, 108, 0, 224, 141, 183, 0, 3, 109, 1, 188, 96, 3, 0, 17, 71, ++ 1, 188, 96, 3, 0, 96, 32, 0, 104, 1, 115, 0, 12, 210, 1, 188, 96, 19, ++ 8, 144, 230, 0, 2, 94, 2, 240, 1, 106, 0, 176, 1, 115, 0, 16, 228, 1, ++ 188, 96, 3, 0, 0, 6, 1, 188, 96, 3, 0, 0, 92, 1, 188, 96, 3, 1, 215, ++ 130, 1, 210, 222, 8, 119, 240, 224, 0, 176, 15, 3, 0, 16, 225, 0, 176, ++ 0, 71, 0, 16, 134, 0, 176, 15, 31, 0, 16, 138, 1, 188, 96, 3, 0, 55, ++ 129, 0, 2, 94, 2, 240, 16, 105, 1, 144, 96, 10, 9, 16, 72, 1, 188, 97, ++ 3, 0, 48, 128, 3, 191, 222, 2, 240, 0, 2, 1, 188, 96, 3, 0, 48, 66, ++ 1, 135, 224, 2, 36, 113, 35, 0, 2, 94, 2, 240, 20, 216, 3, 151, 94, ++ 2, 240, 13, 60, 3, 18, 94, 2, 240, 12, 213, 1, 188, 96, 3, 0, 64, 32, ++ 1, 188, 96, 3, 0, 11, 128, 1, 188, 96, 3, 0, 17, 73, 1, 188, 97, 131, ++ 0, 17, 37, 0, 176, 0, 123, 0, 17, 39, 1, 188, 96, 19, 12, 128, 94, 1, ++ 188, 96, 19, 12, 128, 95, 1, 128, 224, 6, 245, 215, 174, 1, 7, 193, ++ 7, 0, 23, 161, 1, 128, 94, 134, 245, 119, 171, 1, 188, 96, 15, 0, 17, ++ 232, 1, 188, 98, 15, 0, 17, 224, 0, 2, 94, 2, 240, 12, 240, 1, 188, ++ 97, 207, 12, 16, 92, 1, 188, 96, 3, 0, 16, 93, 1, 188, 97, 207, 1, 240, ++ 94, 1, 188, 96, 59, 10, 240, 95, 0, 2, 94, 2, 240, 20, 70, 1, 188, 96, ++ 3, 0, 8, 46, 2, 3, 0, 199, 0, 0, 18, 1, 188, 96, 3, 0, 6, 178, 1, 188, ++ 96, 3, 0, 6, 183, 1, 188, 96, 3, 0, 6, 188, 1, 188, 96, 3, 0, 6, 193, ++ 3, 191, 222, 2, 240, 0, 18, 1, 188, 96, 67, 0, 23, 187, 0, 160, 65, ++ 34, 247, 112, 72, 1, 188, 99, 255, 31, 240, 84, 1, 188, 99, 255, 31, ++ 240, 85, 1, 188, 99, 191, 31, 240, 86, 1, 188, 99, 255, 15, 240, 87, ++ 0, 2, 94, 2, 240, 23, 20, 1, 135, 224, 6, 36, 113, 35, 1, 188, 96, 3, ++ 0, 16, 84, 1, 188, 96, 3, 0, 16, 85, 1, 188, 96, 3, 0, 16, 86, 1, 188, ++ 96, 3, 0, 16, 87, 1, 188, 96, 15, 0, 32, 23, 1, 6, 193, 7, 0, 23, 161, ++ 1, 130, 94, 132, 2, 224, 23, 1, 7, 65, 7, 0, 23, 161, 0, 184, 94, 135, ++ 0, 55, 161, 1, 128, 222, 135, 0, 0, 22, 0, 2, 222, 2, 240, 0, 0, 2, ++ 133, 192, 55, 0, 0, 2, 0, 2, 94, 2, 240, 18, 47, 2, 134, 64, 55, 0, ++ 13, 3, 0, 224, 2, 27, 0, 32, 134, 1, 188, 96, 3, 1, 11, 128, 3, 134, ++ 222, 2, 240, 12, 156, 2, 135, 192, 55, 0, 12, 156, 0, 2, 94, 2, 240, ++ 23, 226, 3, 191, 222, 2, 240, 0, 18, 1, 184, 96, 10, 4, 144, 36, 3, ++ 170, 94, 2, 240, 13, 15, 1, 88, 96, 3, 0, 16, 42, 1, 188, 96, 3, 2, ++ 144, 4, 0, 176, 64, 19, 0, 24, 0, 1, 131, 96, 2, 9, 16, 72, 1, 128, ++ 96, 0, 255, 167, 253, 0, 2, 94, 2, 240, 18, 47, 3, 133, 94, 2, 240, ++ 13, 19, 1, 188, 98, 15, 0, 17, 224, 1, 188, 96, 15, 1, 49, 232, 0, 176, ++ 71, 163, 0, 24, 0, 1, 188, 96, 15, 0, 17, 232, 1, 188, 96, 3, 1, 87, ++ 161, 0, 232, 94, 135, 0, 55, 161, 0, 104, 222, 135, 0, 13, 26, 1, 188, ++ 96, 3, 2, 144, 4, 0, 176, 64, 19, 0, 24, 0, 1, 188, 96, 3, 1, 49, 236, ++ 0, 176, 71, 179, 0, 24, 0, 1, 188, 96, 3, 0, 17, 236, 3, 36, 222, 2, ++ 240, 7, 33, 1, 134, 96, 6, 245, 119, 171, 0, 2, 94, 2, 240, 13, 40, ++ 1, 128, 96, 6, 16, 48, 129, 0, 176, 94, 135, 0, 23, 161, 1, 128, 96, ++ 2, 16, 48, 129, 3, 191, 222, 2, 240, 7, 33, 2, 6, 1, 171, 0, 13, 42, ++ 1, 128, 96, 1, 134, 12, 48, 1, 188, 97, 3, 0, 16, 128, 0, 176, 66, 3, ++ 0, 24, 0, 0, 110, 224, 3, 0, 45, 45, 3, 80, 94, 2, 240, 13, 48, 0, 1, ++ 94, 2, 240, 0, 0, 3, 191, 222, 2, 240, 3, 145, 1, 132, 96, 2, 245, 151, ++ 172, 1, 188, 96, 3, 0, 10, 187, 0, 168, 65, 35, 4, 240, 72, 1, 130, ++ 96, 2, 9, 16, 72, 2, 6, 222, 175, 0, 13, 55, 3, 213, 222, 2, 240, 13, ++ 55, 3, 80, 222, 2, 240, 13, 53, 1, 188, 96, 3, 0, 16, 180, 2, 132, 199, ++ 131, 0, 13, 58, 1, 188, 96, 11, 0, 17, 224, 1, 142, 96, 2, 245, 119, ++ 171, 0, 2, 222, 2, 240, 0, 0, 3, 162, 222, 2, 240, 0, 189, 2, 188, 66, ++ 135, 0, 13, 67, 1, 188, 96, 3, 0, 55, 164, 1, 188, 96, 3, 31, 247, 163, ++ 1, 20, 0, 99, 0, 23, 162, 0, 136, 96, 6, 244, 87, 162, 3, 191, 222, ++ 2, 240, 13, 72, 0, 136, 96, 7, 1, 23, 164, 1, 188, 99, 255, 0, 23, 163, ++ 1, 20, 0, 99, 0, 23, 162, 0, 224, 94, 139, 1, 23, 162, 0, 136, 96, 6, ++ 244, 87, 162, 1, 188, 96, 19, 27, 144, 101, 1, 188, 96, 27, 24, 80, ++ 100, 1, 188, 96, 3, 0, 23, 165, 0, 32, 194, 134, 244, 141, 82, 0, 224, ++ 65, 151, 6, 208, 101, 0, 224, 65, 147, 1, 240, 100, 0, 224, 94, 151, ++ 0, 55, 165, 0, 136, 94, 147, 0, 55, 164, 0, 32, 94, 146, 244, 109, 113, ++ 3, 191, 222, 2, 240, 13, 75, 0, 104, 222, 146, 244, 77, 87, 0, 104, ++ 0, 131, 0, 109, 87, 3, 160, 222, 2, 240, 13, 87, 0, 32, 193, 35, 22, ++ 13, 76, 0, 2, 94, 2, 240, 13, 40, 0, 109, 222, 147, 32, 13, 109, 2, ++ 3, 0, 199, 0, 13, 97, 0, 109, 222, 151, 0, 141, 97, 1, 188, 96, 3, 0, ++ 22, 8, 1, 188, 96, 3, 0, 22, 9, 1, 188, 96, 3, 0, 22, 10, 1, 188, 96, ++ 3, 0, 22, 11, 1, 188, 96, 3, 0, 22, 12, 1, 188, 96, 3, 0, 22, 13, 1, ++ 188, 96, 3, 0, 22, 14, 2, 0, 90, 195, 0, 13, 108, 2, 60, 90, 159, 0, ++ 13, 108, 0, 104, 0, 131, 0, 109, 108, 3, 133, 222, 2, 240, 0, 189, 3, ++ 133, 94, 2, 240, 0, 189, 3, 162, 222, 2, 240, 0, 189, 3, 163, 222, 2, ++ 240, 0, 189, 3, 151, 222, 2, 240, 0, 189, 0, 176, 65, 151, 0, 16, 96, ++ 1, 145, 96, 10, 132, 244, 39, 3, 191, 222, 2, 240, 3, 107, 1, 128, 96, ++ 2, 214, 22, 176, 0, 176, 94, 147, 0, 16, 161, 1, 131, 96, 2, 247, 247, ++ 191, 1, 188, 96, 3, 0, 48, 67, 3, 191, 222, 2, 240, 13, 76, 0, 104, ++ 128, 131, 0, 96, 189, 3, 191, 222, 2, 240, 12, 214, 2, 131, 194, 31, ++ 0, 0, 2, 0, 176, 94, 135, 0, 23, 161, 3, 208, 222, 2, 240, 6, 65, 1, ++ 188, 96, 3, 4, 16, 66, 3, 158, 222, 2, 240, 0, 18, 0, 176, 94, 63, 0, ++ 17, 69, 1, 188, 96, 3, 0, 23, 143, 0, 176, 94, 67, 0, 23, 133, 0, 176, ++ 94, 15, 0, 23, 144, 0, 2, 94, 2, 240, 13, 40, 3, 191, 222, 2, 240, 0, ++ 18, 0, 109, 64, 51, 5, 139, 181, 3, 172, 94, 2, 240, 13, 131, 0, 104, ++ 94, 79, 2, 141, 228, 0, 224, 2, 103, 0, 32, 153, 3, 191, 222, 2, 240, ++ 13, 228, 0, 104, 94, 79, 2, 141, 228, 2, 128, 48, 183, 0, 13, 135, 0, ++ 224, 2, 95, 0, 32, 151, 1, 128, 96, 5, 133, 172, 45, 0, 2, 94, 2, 240, ++ 14, 168, 1, 134, 96, 2, 245, 183, 173, 1, 130, 96, 2, 245, 215, 174, ++ 1, 188, 96, 3, 0, 10, 181, 3, 158, 222, 2, 240, 13, 153, 3, 33, 222, ++ 2, 240, 13, 153, 0, 224, 2, 111, 0, 32, 155, 0, 2, 94, 2, 240, 13, 40, ++ 1, 134, 96, 2, 9, 16, 72, 0, 168, 65, 35, 1, 48, 72, 1, 188, 96, 3, ++ 2, 16, 66, 2, 128, 68, 31, 0, 13, 152, 0, 176, 94, 63, 0, 17, 69, 1, ++ 188, 96, 3, 0, 23, 143, 0, 176, 94, 67, 0, 23, 133, 0, 176, 94, 15, ++ 0, 23, 144, 3, 191, 222, 2, 240, 13, 153, 0, 160, 68, 182, 240, 113, ++ 69, 2, 130, 0, 195, 0, 13, 228, 0, 176, 0, 115, 0, 23, 161, 0, 224, ++ 94, 134, 176, 23, 161, 0, 225, 94, 122, 244, 55, 158, 0, 225, 222, 119, ++ 0, 23, 157, 0, 225, 222, 115, 0, 23, 156, 0, 224, 222, 111, 0, 23, 155, ++ 3, 158, 222, 2, 240, 13, 168, 0, 110, 94, 110, 146, 78, 26, 0, 109, ++ 94, 110, 146, 77, 168, 0, 110, 94, 114, 146, 46, 26, 0, 109, 94, 114, ++ 146, 45, 168, 0, 110, 94, 118, 146, 14, 26, 0, 109, 94, 118, 146, 13, ++ 168, 0, 109, 222, 122, 145, 238, 26, 2, 0, 48, 111, 0, 13, 173, 0, 176, ++ 94, 123, 0, 12, 40, 0, 176, 94, 119, 0, 12, 41, 0, 176, 94, 115, 0, ++ 12, 42, 0, 176, 94, 111, 0, 12, 43, 2, 130, 1, 171, 0, 13, 190, 0, 176, ++ 68, 103, 0, 8, 45, 0, 176, 68, 107, 0, 8, 44, 0, 176, 68, 111, 0, 8, ++ 43, 0, 176, 68, 115, 0, 8, 42, 0, 104, 160, 182, 35, 45, 168, 0, 233, ++ 32, 182, 243, 215, 158, 0, 233, 160, 178, 243, 183, 157, 0, 233, 160, ++ 174, 243, 151, 156, 0, 232, 160, 170, 243, 119, 155, 0, 225, 94, 122, ++ 145, 247, 161, 0, 176, 94, 135, 0, 17, 25, 0, 225, 222, 118, 146, 17, ++ 26, 0, 225, 222, 114, 146, 49, 27, 0, 224, 222, 110, 146, 81, 28, 0, ++ 104, 222, 134, 35, 45, 183, 3, 191, 222, 2, 240, 13, 228, 0, 233, 82, ++ 62, 243, 215, 161, 0, 233, 210, 66, 243, 183, 162, 0, 233, 210, 70, ++ 243, 151, 163, 0, 232, 210, 74, 243, 119, 164, 0, 136, 14, 207, 0, 87, ++ 165, 0, 224, 1, 94, 244, 176, 100, 0, 233, 94, 134, 201, 167, 129, 0, ++ 233, 222, 138, 201, 199, 130, 0, 233, 222, 142, 201, 231, 131, 0, 232, ++ 222, 146, 202, 7, 132, 0, 128, 142, 207, 1, 151, 165, 1, 188, 96, 31, ++ 7, 119, 128, 0, 224, 94, 2, 13, 176, 101, 0, 136, 90, 15, 0, 247, 165, ++ 0, 176, 94, 151, 8, 23, 165, 1, 52, 218, 15, 0, 23, 166, 0, 233, 94, ++ 148, 240, 55, 165, 0, 232, 222, 152, 240, 87, 166, 1, 123, 222, 150, ++ 244, 215, 165, 0, 104, 94, 150, 208, 109, 228, 0, 232, 94, 150, 208, ++ 119, 166, 0, 176, 94, 151, 0, 22, 131, 0, 104, 90, 19, 0, 13, 214, 0, ++ 224, 90, 22, 244, 214, 133, 0, 104, 90, 27, 0, 13, 216, 0, 224, 90, ++ 30, 244, 214, 135, 0, 136, 94, 155, 0, 247, 161, 1, 52, 222, 155, 0, ++ 23, 162, 1, 188, 96, 3, 0, 23, 163, 1, 188, 96, 3, 0, 23, 164, 0, 105, ++ 222, 155, 0, 13, 224, 1, 188, 99, 255, 31, 247, 163, 1, 188, 99, 255, ++ 31, 247, 164, 1, 195, 222, 142, 244, 87, 162, 0, 233, 89, 54, 244, 54, ++ 77, 0, 233, 217, 58, 244, 86, 78, 0, 233, 217, 62, 244, 118, 79, 0, ++ 232, 217, 66, 244, 150, 80, 3, 30, 222, 2, 240, 14, 26, 3, 159, 94, ++ 2, 240, 14, 26, 0, 104, 94, 79, 2, 142, 26, 3, 44, 94, 2, 240, 14, 26, ++ 1, 188, 96, 27, 6, 208, 101, 1, 188, 96, 3, 0, 183, 164, 0, 2, 94, 2, ++ 240, 1, 114, 2, 0, 48, 111, 0, 13, 239, 0, 104, 94, 147, 0, 173, 239, ++ 0, 224, 48, 159, 0, 44, 39, 3, 191, 222, 2, 240, 24, 150, 0, 104, 222, ++ 147, 0, 174, 26, 2, 7, 193, 151, 0, 13, 245, 1, 60, 90, 7, 0, 23, 187, ++ 1, 60, 90, 11, 0, 23, 161, 1, 56, 90, 7, 0, 12, 28, 3, 191, 222, 2, ++ 240, 13, 248, 1, 56, 90, 7, 0, 23, 187, 1, 56, 90, 11, 0, 23, 161, 1, ++ 60, 90, 3, 0, 12, 28, 0, 176, 94, 135, 0, 12, 29, 0, 128, 142, 207, ++ 1, 151, 162, 0, 224, 1, 94, 13, 176, 100, 0, 176, 94, 239, 0, 22, 40, ++ 1, 129, 222, 134, 195, 246, 31, 0, 104, 48, 79, 255, 238, 1, 2, 0, 94, ++ 135, 0, 14, 1, 0, 136, 48, 79, 0, 113, 38, 0, 144, 48, 79, 1, 177, 40, ++ 0, 104, 48, 83, 255, 238, 5, 0, 176, 68, 103, 0, 12, 21, 2, 0, 94, 135, ++ 0, 14, 5, 0, 224, 68, 101, 130, 140, 21, 1, 135, 222, 134, 36, 145, ++ 36, 2, 6, 128, 243, 0, 14, 9, 1, 129, 224, 2, 195, 246, 31, 1, 135, ++ 224, 2, 36, 145, 36, 2, 0, 48, 111, 0, 14, 26, 0, 224, 48, 143, 0, 44, ++ 35, 2, 134, 128, 243, 0, 14, 13, 2, 129, 216, 127, 0, 14, 24, 0, 176, ++ 48, 119, 0, 23, 161, 0, 2, 94, 2, 240, 15, 1, 2, 128, 94, 139, 0, 14, ++ 24, 0, 232, 94, 105, 131, 151, 161, 0, 104, 94, 133, 131, 46, 20, 0, ++ 224, 48, 151, 0, 44, 37, 3, 191, 222, 2, 240, 14, 24, 0, 224, 48, 147, ++ 0, 44, 36, 1, 188, 96, 3, 0, 12, 27, 1, 188, 96, 7, 0, 16, 67, 3, 191, ++ 222, 2, 240, 13, 12, 0, 232, 94, 105, 131, 140, 25, 3, 191, 222, 2, ++ 240, 24, 150, 3, 171, 94, 2, 240, 7, 224, 3, 191, 222, 2, 240, 10, 79, ++ 3, 43, 94, 2, 240, 11, 180, 3, 191, 222, 2, 240, 7, 224, 3, 171, 94, ++ 2, 240, 14, 33, 3, 44, 94, 2, 240, 11, 180, 3, 191, 222, 2, 240, 14, ++ 50, 0, 176, 82, 35, 0, 17, 242, 0, 176, 82, 39, 0, 17, 243, 0, 176, ++ 82, 43, 0, 17, 244, 1, 188, 96, 3, 0, 145, 245, 1, 188, 96, 3, 8, 16, ++ 66, 0, 176, 0, 91, 0, 17, 240, 3, 191, 222, 2, 240, 7, 224, 1, 56, 82, ++ 63, 0, 23, 161, 2, 6, 94, 83, 0, 14, 43, 1, 56, 82, 75, 0, 23, 161, ++ 0, 104, 222, 135, 0, 142, 46, 3, 171, 94, 2, 240, 7, 224, 3, 191, 222, ++ 2, 240, 10, 79, 0, 104, 222, 79, 2, 14, 49, 2, 7, 129, 171, 0, 14, 49, ++ 1, 128, 96, 6, 242, 151, 148, 3, 171, 94, 2, 240, 7, 224, 2, 0, 0, 243, ++ 0, 14, 55, 2, 6, 222, 83, 0, 14, 55, 1, 24, 94, 131, 0, 23, 161, 0, ++ 104, 222, 135, 0, 174, 55, 1, 188, 96, 11, 2, 81, 66, 2, 0, 82, 23, ++ 0, 11, 180, 3, 191, 222, 2, 240, 10, 79, 1, 188, 96, 3, 0, 17, 131, ++ 1, 188, 96, 3, 0, 17, 130, 3, 44, 94, 2, 240, 14, 62, 1, 153, 224, 6, ++ 32, 17, 0, 3, 191, 222, 2, 240, 14, 66, 1, 25, 64, 47, 0, 23, 161, 0, ++ 104, 94, 135, 0, 11, 176, 1, 153, 222, 134, 32, 17, 0, 3, 49, 94, 2, ++ 240, 11, 176, 0, 160, 94, 59, 0, 151, 162, 0, 32, 94, 78, 244, 75, 176, ++ 1, 132, 96, 2, 9, 16, 72, 3, 191, 222, 2, 240, 11, 176, 3, 171, 94, ++ 2, 240, 14, 73, 0, 2, 94, 2, 240, 11, 183, 3, 191, 222, 2, 240, 11, ++ 176, 0, 104, 222, 79, 4, 46, 77, 0, 176, 82, 51, 0, 23, 159, 0, 176, ++ 82, 47, 0, 16, 235, 2, 129, 82, 47, 0, 7, 203, 0, 224, 2, 171, 0, 32, ++ 170, 2, 129, 82, 47, 0, 11, 142, 3, 41, 94, 2, 240, 14, 83, 2, 3, 222, ++ 179, 0, 14, 83, 1, 145, 96, 26, 132, 244, 39, 1, 131, 224, 2, 245, 151, ++ 172, 2, 8, 82, 47, 0, 7, 224, 3, 191, 222, 2, 240, 10, 79, 1, 188, 96, ++ 3, 0, 16, 103, 1, 188, 96, 3, 0, 16, 70, 1, 128, 224, 6, 9, 48, 73, ++ 2, 130, 193, 31, 0, 14, 93, 1, 188, 96, 63, 31, 240, 101, 1, 188, 96, ++ 3, 0, 22, 128, 0, 232, 65, 151, 0, 48, 101, 0, 105, 193, 151, 0, 14, ++ 90, 1, 188, 96, 11, 0, 23, 148, 1, 188, 96, 3, 0, 23, 171, 1, 188, 96, ++ 3, 0, 23, 172, 1, 188, 96, 3, 0, 23, 173, 1, 188, 96, 3, 0, 23, 174, ++ 1, 188, 96, 3, 0, 23, 191, 1, 188, 99, 255, 31, 247, 181, 1, 188, 96, ++ 3, 0, 32, 32, 1, 188, 96, 3, 0, 23, 161, 0, 2, 94, 2, 240, 1, 39, 1, ++ 56, 64, 103, 0, 0, 40, 1, 28, 64, 103, 0, 0, 41, 1, 188, 96, 3, 0, 80, ++ 73, 1, 188, 96, 3, 0, 23, 167, 1, 188, 96, 3, 0, 23, 168, 1, 188, 96, ++ 3, 0, 23, 169, 1, 188, 96, 3, 0, 23, 172, 1, 188, 96, 3, 0, 23, 173, ++ 1, 130, 224, 6, 15, 16, 120, 2, 6, 193, 227, 0, 14, 112, 0, 104, 128, ++ 167, 0, 14, 115, 3, 191, 222, 2, 240, 14, 116, 0, 104, 128, 167, 0, ++ 142, 116, 1, 188, 96, 19, 2, 96, 0, 1, 188, 96, 35, 11, 32, 1, 1, 188, ++ 98, 55, 22, 128, 2, 1, 188, 96, 3, 0, 0, 3, 1, 188, 96, 3, 0, 0, 4, ++ 1, 188, 96, 67, 5, 32, 5, 1, 188, 96, 27, 4, 48, 97, 1, 188, 96, 23, ++ 2, 80, 96, 1, 188, 96, 3, 0, 8, 34, 0, 176, 94, 15, 0, 23, 133, 0, 160, ++ 68, 182, 240, 113, 69, 3, 191, 222, 2, 240, 12, 190, 1, 131, 224, 6, ++ 15, 16, 120, 1, 136, 94, 92, 254, 199, 246, 1, 188, 96, 31, 30, 144, ++ 7, 1, 188, 96, 3, 1, 144, 8, 1, 136, 96, 6, 0, 144, 4, 3, 134, 222, ++ 2, 240, 12, 156, 3, 5, 222, 2, 240, 14, 133, 3, 134, 222, 2, 240, 12, ++ 156, 3, 133, 222, 2, 240, 14, 135, 0, 176, 94, 135, 0, 23, 161, 0, 110, ++ 224, 3, 0, 46, 139, 3, 134, 222, 2, 240, 12, 156, 0, 110, 192, 20, 111, ++ 238, 142, 1, 188, 96, 7, 0, 16, 66, 0, 2, 222, 2, 240, 0, 0, 3, 33, ++ 94, 2, 240, 14, 147, 0, 224, 32, 74, 244, 40, 18, 0, 176, 32, 75, 0, ++ 23, 139, 3, 191, 222, 2, 240, 14, 155, 2, 129, 80, 199, 0, 14, 152, ++ 1, 28, 80, 159, 0, 23, 139, 0, 224, 94, 46, 244, 55, 139, 1, 156, 94, ++ 46, 132, 244, 39, 3, 191, 222, 2, 240, 14, 155, 1, 30, 80, 159, 0, 23, ++ 139, 0, 224, 94, 46, 244, 55, 139, 1, 158, 94, 46, 132, 244, 39, 0, ++ 2, 222, 2, 240, 0, 0, 0, 104, 0, 167, 0, 142, 161, 1, 2, 192, 39, 0, ++ 8, 33, 0, 104, 128, 167, 0, 174, 167, 0, 224, 32, 135, 0, 40, 33, 0, ++ 2, 222, 2, 240, 0, 0, 1, 188, 96, 3, 0, 40, 33, 1, 188, 64, 43, 0, 23, ++ 161, 0, 152, 94, 135, 1, 23, 161, 0, 152, 64, 43, 1, 23, 162, 0, 106, ++ 222, 138, 244, 46, 167, 1, 188, 96, 3, 0, 136, 33, 0, 2, 222, 2, 240, ++ 0, 0, 2, 130, 128, 191, 0, 15, 0, 0, 176, 65, 143, 0, 8, 19, 0, 176, ++ 65, 139, 0, 8, 20, 0, 176, 68, 103, 0, 23, 162, 1, 123, 222, 138, 35, ++ 87, 161, 1, 188, 96, 31, 7, 112, 101, 1, 188, 96, 3, 0, 23, 162, 1, ++ 188, 96, 31, 3, 208, 100, 1, 188, 96, 31, 17, 80, 99, 0, 104, 90, 3, ++ 0, 14, 247, 1, 188, 96, 31, 15, 176, 98, 0, 224, 65, 138, 244, 80, 98, ++ 0, 144, 84, 3, 0, 247, 166, 0, 107, 94, 134, 208, 110, 205, 0, 176, ++ 90, 3, 0, 23, 163, 0, 224, 90, 14, 244, 213, 128, 0, 224, 90, 14, 244, ++ 118, 131, 0, 232, 90, 47, 0, 54, 139, 0, 105, 218, 47, 0, 14, 188, 0, ++ 232, 90, 7, 0, 54, 139, 0, 108, 218, 14, 244, 46, 183, 0, 232, 90, 14, ++ 244, 55, 164, 0, 144, 90, 3, 0, 119, 165, 0, 110, 222, 146, 244, 174, ++ 195, 1, 188, 96, 3, 0, 54, 0, 1, 188, 96, 11, 0, 16, 67, 1, 188, 96, ++ 3, 0, 39, 137, 0, 32, 90, 11, 8, 14, 198, 1, 188, 96, 3, 0, 39, 146, ++ 3, 191, 222, 2, 240, 14, 205, 0, 32, 90, 11, 20, 14, 205, 0, 32, 44, ++ 39, 8, 14, 201, 0, 32, 90, 11, 4, 14, 205, 1, 134, 96, 6, 245, 183, ++ 173, 0, 136, 0, 155, 0, 209, 38, 0, 144, 0, 155, 1, 81, 40, 1, 188, ++ 99, 3, 0, 17, 36, 0, 107, 94, 134, 176, 14, 213, 0, 104, 90, 19, 0, ++ 14, 210, 1, 136, 96, 6, 208, 86, 130, 0, 176, 86, 3, 0, 23, 164, 0, ++ 224, 94, 146, 208, 150, 133, 0, 224, 90, 14, 244, 213, 128, 0, 32, 90, ++ 11, 8, 14, 213, 1, 188, 96, 3, 0, 7, 146, 0, 104, 90, 19, 0, 14, 221, ++ 0, 107, 94, 134, 208, 174, 221, 1, 136, 96, 10, 208, 86, 130, 0, 176, ++ 86, 3, 0, 23, 164, 0, 224, 94, 146, 208, 150, 133, 1, 188, 96, 3, 0, ++ 54, 1, 1, 188, 96, 11, 0, 16, 67, 1, 188, 96, 3, 0, 39, 137, 0, 104, ++ 90, 27, 0, 14, 247, 0, 107, 94, 134, 208, 238, 247, 2, 1, 90, 11, 0, ++ 14, 236, 0, 232, 90, 27, 0, 54, 134, 0, 176, 90, 39, 0, 23, 163, 0, ++ 224, 90, 30, 244, 118, 135, 1, 188, 96, 31, 17, 208, 98, 0, 224, 65, ++ 138, 244, 80, 98, 0, 176, 90, 43, 0, 23, 163, 0, 224, 84, 2, 244, 117, ++ 0, 2, 3, 212, 3, 0, 14, 234, 0, 224, 90, 31, 0, 54, 135, 1, 48, 84, ++ 3, 0, 21, 0, 1, 129, 96, 2, 208, 86, 130, 3, 191, 222, 2, 240, 14, 239, ++ 0, 176, 90, 35, 0, 23, 163, 0, 224, 90, 30, 244, 118, 135, 1, 129, 96, ++ 6, 208, 86, 130, 0, 104, 90, 27, 0, 14, 241, 0, 108, 218, 30, 244, 46, ++ 223, 2, 1, 90, 11, 0, 14, 244, 1, 188, 96, 3, 0, 54, 2, 3, 191, 222, ++ 2, 240, 14, 245, 1, 188, 96, 3, 0, 54, 3, 1, 188, 96, 11, 0, 16, 67, ++ 1, 188, 96, 3, 0, 39, 137, 0, 224, 65, 151, 1, 144, 101, 0, 224, 94, ++ 139, 0, 55, 162, 0, 224, 65, 147, 0, 144, 100, 0, 224, 65, 143, 0, 48, ++ 99, 0, 109, 94, 139, 0, 142, 177, 2, 152, 29, 243, 0, 14, 254, 1, 188, ++ 96, 3, 0, 7, 146, 0, 176, 32, 79, 0, 16, 99, 0, 176, 32, 83, 0, 16, ++ 98, 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 3, 0, 23, 162, 0, 104, 1, 139, ++ 0, 15, 23, 0, 144, 1, 139, 0, 119, 162, 1, 128, 96, 2, 244, 55, 161, ++ 0, 110, 94, 134, 244, 79, 23, 2, 7, 193, 151, 0, 15, 9, 1, 56, 90, 7, ++ 0, 23, 163, 3, 191, 222, 2, 240, 15, 10, 1, 60, 90, 3, 0, 23, 163, 0, ++ 232, 94, 143, 0, 151, 163, 0, 232, 94, 138, 244, 55, 162, 0, 106, 94, ++ 138, 244, 111, 23, 0, 208, 65, 151, 0, 48, 100, 0, 224, 94, 139, 0, ++ 183, 163, 0, 224, 65, 146, 244, 112, 100, 0, 216, 65, 147, 0, 48, 100, ++ 2, 7, 193, 147, 0, 15, 20, 1, 60, 88, 3, 0, 23, 161, 3, 191, 222, 2, ++ 240, 15, 21, 1, 56, 88, 3, 0, 23, 161, 0, 160, 1, 139, 0, 247, 162, ++ 0, 144, 94, 134, 244, 87, 162, 0, 2, 222, 2, 240, 0, 0, 0, 176, 90, ++ 3, 0, 16, 31, 0, 176, 90, 7, 0, 16, 32, 0, 176, 90, 11, 0, 16, 33, 1, ++ 128, 96, 7, 0, 16, 29, 2, 128, 64, 119, 0, 15, 28, 0, 2, 222, 2, 240, ++ 0, 0, 1, 135, 224, 2, 245, 119, 171, 3, 145, 94, 2, 240, 0, 2, 0, 32, ++ 227, 254, 9, 0, 2, 2, 0, 66, 31, 0, 0, 2, 0, 104, 194, 243, 0, 0, 2, ++ 2, 132, 69, 35, 0, 0, 2, 0, 104, 192, 23, 0, 0, 2, 0, 104, 171, 151, ++ 0, 0, 2, 0, 2, 94, 2, 240, 14, 168, 0, 104, 48, 79, 255, 239, 42, 2, ++ 7, 196, 147, 0, 15, 53, 0, 104, 48, 83, 255, 224, 2, 0, 104, 48, 83, ++ 255, 239, 46, 0, 104, 48, 87, 0, 15, 52, 0, 107, 196, 101, 130, 175, ++ 53, 3, 191, 222, 2, 240, 0, 2, 1, 188, 96, 31, 7, 112, 100, 0, 224, ++ 65, 147, 6, 23, 162, 0, 104, 216, 47, 0, 15, 50, 2, 129, 216, 11, 0, ++ 0, 2, 0, 224, 65, 147, 1, 144, 100, 0, 109, 65, 146, 244, 79, 48, 2, ++ 135, 196, 147, 0, 0, 2, 0, 104, 158, 75, 0, 0, 2, 2, 129, 94, 83, 0, ++ 15, 67, 2, 131, 65, 31, 0, 15, 57, 2, 129, 222, 83, 0, 15, 84, 1, 188, ++ 96, 3, 0, 17, 81, 1, 188, 96, 3, 0, 17, 82, 1, 188, 98, 3, 0, 17, 83, ++ 1, 188, 96, 3, 0, 81, 80, 1, 137, 96, 6, 242, 151, 148, 1, 188, 96, ++ 231, 0, 16, 119, 1, 188, 96, 3, 0, 16, 118, 1, 188, 96, 3, 17, 23, 163, ++ 0, 2, 94, 2, 240, 1, 52, 3, 191, 222, 2, 240, 0, 2, 2, 128, 197, 67, ++ 0, 0, 2, 1, 240, 197, 71, 0, 17, 86, 1, 7, 197, 71, 0, 23, 161, 1, 240, ++ 197, 74, 244, 49, 85, 0, 176, 69, 87, 0, 16, 119, 0, 176, 69, 91, 0, ++ 16, 118, 1, 188, 96, 3, 14, 151, 163, 0, 2, 94, 2, 240, 1, 52, 0, 176, ++ 69, 87, 0, 12, 7, 0, 176, 69, 91, 0, 12, 6, 1, 188, 96, 3, 0, 17, 85, ++ 1, 188, 96, 3, 0, 17, 86, 0, 144, 48, 27, 0, 204, 6, 0, 176, 48, 31, ++ 0, 23, 161, 1, 173, 94, 133, 128, 204, 6, 1, 137, 96, 10, 242, 151, ++ 148, 1, 188, 96, 3, 8, 16, 71, 3, 146, 222, 2, 240, 15, 168, 2, 4, 128, ++ 191, 0, 15, 89, 1, 188, 99, 255, 31, 231, 243, 1, 188, 97, 255, 31, ++ 232, 14, 3, 191, 222, 2, 240, 15, 170, 1, 134, 96, 2, 245, 151, 172, ++ 1, 188, 96, 31, 7, 112, 101, 1, 188, 96, 31, 15, 176, 100, 1, 188, 96, ++ 3, 0, 55, 161, 1, 188, 96, 3, 0, 23, 163, 0, 104, 90, 3, 0, 15, 150, ++ 1, 188, 96, 3, 0, 23, 165, 2, 3, 90, 11, 0, 15, 103, 2, 128, 90, 11, ++ 0, 15, 168, 0, 233, 68, 10, 192, 23, 187, 0, 232, 196, 15, 0, 23, 164, ++ 1, 123, 222, 238, 244, 151, 164, 0, 104, 90, 19, 0, 15, 117, 3, 191, ++ 222, 2, 240, 15, 114, 0, 104, 222, 135, 0, 47, 105, 2, 3, 222, 83, 0, ++ 15, 168, 2, 3, 218, 11, 0, 15, 125, 0, 176, 90, 15, 0, 23, 164, 0, 104, ++ 90, 7, 0, 47, 110, 0, 104, 90, 47, 0, 47, 110, 1, 188, 96, 3, 0, 55, ++ 165, 0, 104, 90, 19, 0, 15, 114, 0, 108, 222, 146, 208, 175, 114, 0, ++ 176, 90, 23, 0, 23, 164, 1, 188, 96, 3, 0, 55, 165, 0, 32, 28, 186, ++ 244, 47, 117, 0, 104, 90, 27, 0, 15, 144, 3, 191, 222, 2, 240, 15, 120, ++ 0, 136, 94, 135, 0, 151, 187, 0, 32, 28, 186, 247, 111, 168, 2, 1, 90, ++ 11, 0, 15, 168, 0, 108, 222, 146, 208, 239, 144, 0, 176, 90, 31, 0, ++ 23, 164, 0, 32, 28, 186, 244, 47, 124, 1, 188, 96, 3, 0, 55, 165, 3, ++ 191, 222, 2, 240, 15, 144, 2, 2, 218, 11, 0, 15, 150, 2, 4, 193, 7, ++ 0, 15, 168, 0, 176, 90, 15, 0, 23, 164, 0, 232, 90, 47, 0, 55, 187, ++ 0, 105, 222, 239, 0, 15, 131, 0, 232, 90, 7, 0, 55, 187, 1, 60, 1, 111, ++ 0, 23, 128, 0, 104, 222, 3, 0, 15, 137, 1, 56, 1, 111, 0, 23, 128, 0, ++ 104, 94, 3, 0, 15, 140, 0, 232, 94, 3, 0, 55, 187, 3, 191, 222, 2, 240, ++ 15, 140, 0, 232, 94, 3, 0, 55, 128, 0, 128, 222, 2, 208, 55, 128, 0, ++ 224, 94, 238, 13, 183, 187, 0, 104, 94, 239, 0, 15, 144, 0, 224, 94, ++ 146, 208, 23, 164, 0, 232, 94, 239, 0, 55, 187, 3, 191, 222, 2, 240, ++ 15, 140, 0, 104, 94, 143, 0, 15, 147, 0, 107, 94, 146, 244, 79, 148, ++ 3, 191, 222, 2, 240, 15, 150, 1, 188, 96, 3, 0, 55, 163, 0, 176, 94, ++ 147, 0, 23, 162, 0, 176, 94, 151, 0, 23, 166, 0, 136, 94, 135, 0, 55, ++ 161, 0, 224, 65, 151, 1, 144, 101, 0, 224, 65, 147, 0, 48, 100, 0, 109, ++ 94, 135, 2, 15, 94, 0, 104, 94, 143, 0, 15, 168, 0, 176, 68, 103, 0, ++ 23, 165, 1, 123, 222, 150, 35, 87, 165, 0, 232, 94, 138, 244, 183, 164, ++ 0, 136, 94, 147, 0, 228, 219, 0, 144, 94, 147, 1, 39, 29, 0, 176, 1, ++ 43, 0, 23, 163, 0, 104, 156, 119, 0, 15, 163, 0, 110, 147, 110, 244, ++ 111, 168, 3, 166, 94, 2, 240, 15, 168, 0, 176, 94, 155, 0, 7, 133, 0, ++ 233, 19, 110, 244, 103, 243, 0, 232, 156, 119, 0, 8, 14, 3, 191, 222, ++ 2, 240, 15, 170, 0, 104, 30, 23, 0, 0, 2, 3, 191, 222, 2, 240, 16, 82, ++ 1, 188, 97, 3, 0, 17, 35, 0, 105, 32, 59, 0, 15, 174, 1, 128, 224, 6, ++ 242, 151, 148, 3, 191, 222, 2, 240, 15, 176, 1, 128, 224, 2, 242, 151, ++ 148, 3, 191, 222, 2, 240, 0, 2, 0, 104, 65, 39, 0, 15, 191, 2, 132, ++ 69, 35, 0, 15, 177, 0, 104, 0, 167, 0, 175, 181, 0, 104, 0, 167, 0, ++ 207, 181, 0, 104, 128, 167, 1, 15, 184, 0, 176, 68, 103, 0, 23, 161, ++ 0, 232, 68, 102, 244, 55, 162, 0, 109, 94, 139, 0, 79, 182, 2, 128, ++ 193, 39, 0, 15, 186, 3, 146, 222, 2, 240, 16, 82, 3, 146, 222, 2, 240, ++ 12, 226, 0, 2, 94, 2, 240, 20, 228, 0, 2, 94, 2, 240, 17, 54, 0, 2, ++ 94, 2, 240, 17, 49, 0, 2, 94, 2, 240, 17, 65, 1, 188, 96, 15, 0, 17, ++ 232, 3, 30, 222, 2, 240, 15, 198, 1, 188, 96, 3, 0, 16, 92, 1, 188, ++ 96, 3, 0, 144, 93, 1, 188, 96, 83, 4, 16, 94, 1, 188, 96, 3, 0, 16, ++ 95, 3, 191, 222, 2, 240, 15, 202, 1, 188, 96, 11, 0, 16, 92, 1, 188, ++ 96, 3, 0, 144, 93, 1, 188, 96, 67, 4, 16, 94, 1, 188, 96, 3, 0, 16, ++ 95, 1, 188, 96, 3, 0, 12, 21, 1, 188, 96, 3, 0, 128, 32, 2, 133, 0, ++ 191, 0, 16, 89, 0, 176, 31, 207, 0, 17, 81, 0, 176, 32, 59, 0, 17, 82, ++ 0, 110, 31, 206, 42, 143, 211, 0, 104, 160, 59, 0, 15, 211, 0, 224, ++ 31, 206, 35, 40, 15, 3, 191, 222, 2, 240, 15, 244, 0, 176, 68, 103, ++ 0, 8, 15, 0, 233, 31, 206, 42, 145, 81, 0, 232, 160, 59, 0, 17, 82, ++ 1, 188, 97, 255, 31, 112, 119, 1, 188, 99, 255, 31, 240, 118, 1, 188, ++ 96, 3, 17, 151, 163, 0, 2, 94, 2, 240, 1, 52, 0, 176, 69, 75, 0, 16, ++ 119, 0, 176, 69, 71, 0, 16, 118, 1, 188, 96, 3, 15, 23, 163, 0, 2, 94, ++ 2, 240, 1, 52, 1, 188, 96, 47, 25, 144, 101, 0, 176, 69, 87, 0, 22, ++ 145, 0, 176, 69, 91, 0, 22, 146, 0, 176, 68, 11, 0, 22, 147, 0, 176, ++ 68, 15, 0, 22, 148, 1, 188, 99, 255, 31, 241, 82, 1, 188, 99, 255, 31, ++ 241, 81, 1, 188, 96, 3, 0, 17, 85, 1, 188, 96, 3, 0, 17, 86, 1, 172, ++ 96, 127, 2, 144, 117, 2, 135, 65, 215, 0, 15, 232, 0, 176, 65, 219, ++ 0, 3, 177, 0, 176, 65, 223, 0, 3, 178, 0, 176, 68, 103, 0, 8, 45, 0, ++ 176, 68, 107, 0, 8, 44, 0, 176, 68, 111, 0, 8, 43, 0, 176, 68, 115, ++ 0, 8, 42, 0, 225, 68, 100, 254, 108, 17, 0, 224, 196, 105, 1, 204, 18, ++ 1, 188, 96, 3, 2, 49, 80, 0, 176, 69, 67, 0, 24, 0, 0, 104, 96, 3, 0, ++ 15, 244, 1, 188, 96, 3, 0, 16, 64, 0, 0, 128, 0, 0, 0, 0, 2, 4, 128, ++ 191, 0, 15, 248, 3, 18, 222, 2, 240, 15, 244, 0, 104, 197, 87, 0, 16, ++ 0, 1, 188, 96, 47, 25, 144, 101, 0, 176, 90, 71, 0, 17, 85, 0, 176, ++ 90, 75, 0, 17, 86, 0, 176, 90, 79, 0, 17, 2, 0, 176, 90, 83, 0, 17, ++ 3, 1, 188, 96, 3, 0, 23, 167, 1, 188, 96, 3, 0, 23, 168, 1, 188, 96, ++ 3, 0, 0, 102, 1, 172, 96, 127, 15, 16, 117, 2, 135, 65, 215, 0, 16, ++ 2, 0, 176, 65, 219, 0, 17, 81, 0, 176, 65, 223, 0, 17, 82, 0, 104, 69, ++ 71, 0, 16, 9, 0, 233, 31, 206, 42, 135, 243, 0, 232, 160, 59, 0, 8, ++ 14, 1, 134, 96, 6, 245, 151, 172, 1, 188, 96, 3, 0, 16, 119, 1, 188, ++ 96, 3, 0, 16, 118, 1, 188, 96, 3, 15, 23, 163, 0, 2, 94, 2, 240, 1, ++ 52, 1, 188, 96, 3, 0, 17, 80, 2, 132, 69, 67, 0, 16, 14, 2, 7, 193, ++ 227, 0, 16, 15, 0, 176, 68, 103, 0, 23, 161, 0, 104, 94, 134, 35, 48, ++ 17, 1, 130, 224, 6, 15, 16, 120, 2, 6, 193, 227, 0, 16, 19, 1, 188, ++ 96, 3, 0, 64, 32, 1, 188, 96, 3, 0, 0, 102, 1, 134, 96, 6, 32, 17, 0, ++ 1, 188, 96, 99, 0, 16, 123, 1, 188, 96, 27, 0, 16, 122, 1, 172, 96, ++ 127, 2, 144, 117, 2, 135, 65, 215, 0, 16, 26, 0, 233, 65, 216, 118, ++ 55, 156, 0, 232, 193, 220, 118, 87, 155, 0, 176, 48, 27, 0, 23, 161, ++ 0, 128, 222, 114, 244, 55, 157, 0, 176, 65, 183, 0, 23, 158, 0, 128, ++ 222, 110, 244, 55, 156, 0, 225, 94, 118, 13, 183, 157, 0, 224, 222, ++ 115, 0, 23, 156, 1, 125, 94, 122, 243, 183, 161, 1, 125, 94, 118, 243, ++ 151, 162, 0, 144, 94, 115, 1, 87, 163, 0, 225, 32, 182, 244, 49, 25, ++ 0, 225, 160, 178, 244, 81, 26, 0, 225, 160, 174, 244, 113, 27, 0, 224, ++ 160, 171, 0, 17, 28, 0, 225, 13, 170, 244, 35, 106, 0, 224, 141, 174, ++ 244, 67, 107, 0, 176, 68, 31, 0, 24, 0, 0, 136, 68, 35, 1, 87, 163, ++ 0, 144, 68, 35, 0, 215, 164, 0, 176, 68, 11, 0, 23, 161, 0, 176, 68, ++ 15, 0, 23, 162, 0, 233, 94, 134, 35, 55, 161, 0, 232, 222, 138, 35, ++ 87, 162, 0, 105, 222, 139, 0, 16, 58, 0, 225, 68, 10, 244, 113, 2, 0, ++ 224, 196, 14, 244, 145, 3, 0, 232, 94, 35, 0, 55, 136, 0, 105, 222, ++ 35, 0, 16, 47, 0, 232, 0, 39, 0, 55, 136, 3, 191, 222, 2, 240, 16, 47, ++ 1, 134, 96, 2, 32, 17, 0, 1, 188, 96, 3, 0, 64, 32, 0, 233, 48, 70, ++ 35, 55, 161, 0, 232, 176, 74, 35, 87, 162, 0, 104, 222, 139, 0, 16, ++ 73, 1, 188, 96, 79, 17, 23, 163, 0, 109, 222, 134, 244, 112, 73, 1, ++ 188, 96, 3, 0, 16, 64, 1, 188, 96, 3, 0, 16, 93, 1, 130, 96, 6, 11, ++ 240, 95, 0, 208, 94, 135, 0, 113, 52, 1, 225, 222, 138, 38, 145, 53, ++ 1, 188, 99, 3, 0, 17, 51, 0, 0, 128, 0, 0, 0, 0, 1, 130, 96, 2, 11, ++ 240, 95, 2, 134, 94, 179, 0, 16, 82, 0, 104, 30, 23, 0, 16, 82, 1, 188, ++ 96, 67, 0, 23, 161, 0, 224, 68, 102, 244, 55, 128, 1, 188, 96, 3, 0, ++ 7, 137, 0, 2, 94, 2, 240, 14, 168, 0, 108, 68, 102, 240, 16, 82, 0, ++ 104, 30, 39, 0, 16, 78, 3, 191, 222, 2, 240, 15, 84, 2, 0, 222, 83, ++ 0, 16, 92, 1, 128, 224, 2, 242, 151, 148, 0, 2, 94, 2, 240, 17, 52, ++ 1, 188, 96, 3, 0, 16, 64, 3, 191, 222, 2, 240, 16, 87, 0, 224, 68, 100, ++ 9, 87, 161, 3, 191, 222, 2, 240, 16, 92, 1, 188, 96, 3, 0, 16, 64, 0, ++ 176, 1, 47, 0, 23, 161, 0, 224, 1, 42, 244, 49, 9, 0, 176, 1, 47, 0, ++ 17, 9, 1, 188, 97, 207, 12, 16, 92, 1, 188, 96, 3, 0, 16, 93, 1, 188, ++ 97, 207, 1, 240, 94, 1, 188, 96, 59, 10, 240, 95, 0, 2, 94, 2, 240, ++ 17, 61, 0, 2, 94, 2, 240, 17, 68, 0, 2, 94, 2, 240, 17, 58, 1, 188, ++ 96, 3, 0, 7, 133, 0, 109, 128, 167, 0, 140, 226, 0, 224, 68, 103, 4, ++ 119, 161, 0, 104, 222, 134, 35, 48, 103, 3, 191, 222, 2, 240, 12, 226, ++ 1, 136, 94, 6, 16, 208, 134, 1, 2, 94, 7, 0, 23, 161, 1, 130, 94, 134, ++ 16, 208, 134, 0, 2, 222, 2, 240, 0, 0, 0, 176, 0, 71, 0, 16, 134, 1, ++ 8, 32, 71, 0, 23, 129, 1, 56, 82, 3, 0, 23, 128, 1, 2, 192, 39, 0, 23, ++ 166, 0, 2, 94, 2, 240, 22, 2, 0, 104, 32, 71, 0, 80, 116, 0, 176, 84, ++ 7, 0, 23, 128, 0, 2, 94, 2, 240, 16, 105, 0, 104, 32, 71, 0, 48, 124, ++ 0, 104, 160, 71, 0, 16, 120, 2, 26, 84, 7, 0, 16, 124, 1, 3, 192, 39, ++ 0, 23, 161, 3, 191, 222, 2, 240, 16, 123, 1, 6, 192, 59, 0, 23, 161, ++ 1, 130, 94, 134, 16, 208, 134, 0, 2, 222, 2, 240, 0, 0, 0, 176, 84, ++ 19, 0, 23, 161, 0, 104, 222, 79, 22, 176, 128, 0, 176, 84, 19, 0, 23, ++ 161, 2, 0, 222, 7, 0, 16, 136, 0, 176, 65, 139, 0, 16, 101, 1, 188, ++ 96, 3, 1, 215, 161, 0, 104, 222, 79, 22, 176, 133, 1, 188, 96, 3, 2, ++ 151, 161, 0, 2, 94, 2, 240, 22, 21, 0, 224, 94, 132, 0, 247, 161, 3, ++ 191, 222, 2, 240, 16, 141, 2, 4, 128, 243, 0, 16, 141, 2, 2, 94, 7, ++ 0, 16, 141, 2, 128, 94, 7, 0, 16, 141, 0, 144, 0, 27, 0, 55, 162, 0, ++ 232, 84, 18, 244, 87, 161, 0, 2, 222, 2, 240, 0, 0, 2, 4, 0, 191, 0, ++ 16, 145, 0, 2, 94, 2, 240, 17, 226, 3, 191, 222, 2, 240, 16, 146, 0, ++ 160, 68, 182, 240, 177, 69, 0, 2, 222, 2, 240, 0, 0, 2, 0, 0, 191, 0, ++ 16, 163, 0, 104, 171, 239, 0, 16, 163, 0, 224, 94, 163, 0, 55, 168, ++ 0, 109, 94, 160, 5, 208, 163, 0, 176, 46, 11, 0, 23, 161, 0, 2, 94, ++ 2, 240, 1, 39, 0, 176, 64, 103, 0, 23, 162, 0, 104, 222, 163, 255, 240, ++ 160, 0, 176, 94, 137, 112, 119, 162, 0, 109, 0, 167, 0, 144, 159, 0, ++ 109, 160, 135, 0, 80, 161, 3, 191, 222, 2, 240, 16, 160, 0, 104, 160, ++ 135, 0, 16, 161, 0, 184, 94, 137, 112, 119, 162, 0, 2, 94, 2, 240, 1, ++ 43, 1, 188, 96, 3, 0, 23, 168, 0, 2, 222, 2, 240, 0, 0, 0, 216, 90, ++ 3, 1, 23, 162, 1, 184, 90, 6, 244, 87, 162, 0, 176, 86, 3, 0, 8, 54, ++ 0, 176, 86, 7, 0, 8, 55, 0, 176, 86, 11, 0, 8, 56, 0, 176, 86, 15, 0, ++ 8, 57, 0, 176, 86, 19, 0, 8, 58, 0, 224, 86, 18, 244, 72, 59, 0, 176, ++ 90, 3, 0, 8, 52, 1, 56, 94, 139, 0, 8, 53, 0, 176, 32, 239, 0, 23, 164, ++ 1, 188, 96, 3, 0, 23, 162, 0, 176, 65, 147, 0, 16, 101, 0, 184, 94, ++ 146, 208, 23, 164, 0, 224, 94, 6, 244, 80, 99, 0, 240, 94, 147, 0, 23, ++ 163, 0, 240, 94, 147, 0, 119, 164, 0, 224, 94, 139, 0, 55, 162, 0, 184, ++ 94, 146, 244, 119, 164, 0, 224, 65, 146, 244, 80, 101, 0, 224, 86, 2, ++ 244, 149, 128, 0, 176, 86, 3, 0, 23, 164, 0, 110, 222, 139, 0, 176, ++ 177, 0, 184, 94, 146, 192, 215, 162, 0, 216, 94, 139, 0, 55, 162, 0, ++ 224, 32, 218, 244, 72, 54, 0, 176, 32, 219, 0, 23, 164, 0, 184, 94, ++ 146, 192, 247, 162, 0, 216, 94, 139, 0, 55, 162, 0, 224, 32, 222, 244, ++ 72, 55, 0, 216, 32, 223, 0, 55, 162, 0, 224, 32, 226, 244, 72, 56, 0, ++ 216, 32, 227, 0, 55, 162, 0, 224, 32, 230, 244, 72, 57, 0, 216, 32, ++ 231, 0, 55, 162, 0, 224, 32, 234, 244, 72, 58, 0, 216, 32, 235, 0, 55, ++ 162, 0, 224, 32, 238, 244, 72, 59, 0, 176, 32, 239, 0, 23, 162, 0, 184, ++ 94, 138, 192, 23, 162, 0, 144, 94, 139, 0, 55, 162, 1, 188, 94, 137, ++ 6, 168, 53, 0, 2, 222, 2, 240, 0, 0, 1, 128, 96, 6, 60, 145, 228, 1, ++ 135, 96, 6, 60, 209, 230, 1, 168, 96, 2, 60, 209, 230, 1, 139, 96, 2, ++ 60, 209, 230, 0, 176, 94, 143, 0, 16, 99, 0, 176, 86, 3, 0, 17, 231, ++ 0, 176, 86, 7, 0, 17, 231, 0, 176, 86, 11, 0, 17, 231, 0, 176, 86, 15, ++ 0, 17, 231, 1, 169, 96, 66, 60, 145, 228, 1, 168, 96, 2, 60, 209, 230, ++ 1, 139, 96, 6, 60, 209, 230, 0, 176, 94, 139, 0, 16, 99, 1, 188, 96, ++ 3, 0, 87, 161, 2, 4, 86, 3, 0, 16, 223, 1, 188, 96, 3, 1, 23, 161, 0, ++ 224, 65, 142, 244, 48, 99, 0, 176, 86, 3, 0, 17, 231, 0, 176, 86, 7, ++ 0, 17, 231, 0, 176, 86, 11, 0, 17, 231, 0, 176, 94, 139, 0, 16, 99, ++ 1, 188, 96, 3, 0, 183, 161, 2, 4, 214, 3, 0, 16, 233, 1, 188, 96, 3, ++ 1, 23, 161, 2, 6, 94, 83, 0, 16, 233, 1, 188, 96, 3, 1, 151, 161, 0, ++ 224, 65, 142, 244, 48, 99, 0, 176, 86, 3, 0, 17, 231, 0, 176, 86, 7, ++ 0, 17, 231, 0, 176, 86, 11, 0, 17, 231, 1, 188, 96, 3, 0, 23, 161, 2, ++ 6, 222, 83, 0, 16, 244, 0, 176, 94, 139, 0, 16, 99, 2, 6, 94, 83, 0, ++ 16, 243, 0, 160, 86, 63, 1, 247, 161, 3, 191, 222, 2, 240, 16, 244, ++ 0, 160, 86, 51, 1, 247, 161, 0, 176, 94, 135, 0, 17, 231, 1, 188, 96, ++ 3, 0, 17, 231, 0, 2, 222, 2, 240, 0, 0, 0, 104, 94, 155, 0, 209, 17, ++ 1, 188, 96, 7, 2, 17, 227, 0, 104, 222, 155, 0, 81, 4, 0, 232, 71, 135, ++ 1, 17, 225, 1, 188, 96, 3, 0, 17, 226, 1, 188, 96, 3, 0, 17, 226, 1, ++ 188, 96, 3, 0, 17, 226, 1, 188, 96, 3, 0, 17, 226, 1, 188, 96, 3, 0, ++ 17, 226, 1, 188, 96, 3, 0, 17, 226, 1, 188, 96, 3, 0, 17, 226, 1, 188, ++ 96, 3, 0, 17, 226, 0, 176, 97, 66, 244, 81, 224, 0, 176, 88, 3, 0, 17, ++ 226, 0, 176, 88, 7, 0, 17, 226, 0, 176, 88, 11, 0, 17, 226, 0, 176, ++ 88, 15, 0, 17, 226, 0, 176, 88, 19, 0, 17, 226, 0, 176, 88, 23, 0, 17, ++ 226, 0, 176, 88, 27, 0, 17, 226, 0, 176, 88, 31, 0, 17, 226, 0, 176, ++ 94, 155, 0, 23, 164, 0, 104, 222, 155, 0, 177, 15, 1, 188, 96, 3, 0, ++ 119, 164, 1, 146, 222, 147, 2, 23, 163, 0, 2, 222, 2, 240, 0, 0, 1, ++ 188, 96, 7, 0, 17, 227, 0, 176, 88, 3, 0, 17, 226, 0, 176, 88, 7, 0, ++ 17, 226, 0, 176, 88, 11, 0, 17, 226, 0, 176, 88, 15, 0, 17, 226, 0, ++ 176, 88, 19, 0, 17, 226, 0, 176, 88, 23, 0, 17, 226, 0, 176, 88, 27, ++ 0, 17, 226, 0, 176, 88, 31, 0, 17, 226, 0, 224, 1, 70, 240, 16, 100, ++ 1, 188, 96, 7, 0, 49, 227, 0, 176, 88, 3, 0, 17, 226, 0, 176, 88, 7, ++ 0, 17, 226, 0, 176, 88, 11, 0, 17, 226, 0, 176, 88, 15, 0, 17, 226, ++ 0, 176, 88, 19, 0, 17, 226, 0, 176, 88, 23, 0, 17, 226, 0, 176, 88, ++ 27, 0, 17, 226, 0, 176, 88, 31, 0, 17, 226, 1, 146, 224, 27, 0, 23, ++ 163, 0, 2, 222, 2, 240, 0, 0, 2, 135, 64, 195, 0, 17, 38, 1, 134, 96, ++ 6, 240, 16, 48, 2, 134, 64, 195, 0, 17, 40, 0, 176, 64, 199, 0, 23, ++ 129, 0, 2, 222, 2, 240, 0, 0, 2, 135, 64, 195, 0, 17, 43, 0, 176, 94, ++ 7, 0, 16, 49, 1, 134, 224, 6, 240, 16, 48, 0, 2, 222, 2, 240, 0, 0, ++ 0, 104, 0, 167, 1, 151, 154, 3, 191, 222, 2, 240, 17, 67, 0, 2, 94, ++ 2, 240, 17, 52, 0, 2, 94, 2, 240, 17, 68, 0, 2, 222, 2, 240, 0, 0, 0, ++ 104, 0, 167, 1, 151, 25, 0, 2, 222, 2, 240, 0, 0, 1, 129, 96, 6, 9, ++ 48, 73, 0, 104, 0, 167, 0, 145, 57, 0, 2, 94, 2, 240, 17, 69, 0, 2, ++ 222, 2, 240, 0, 0, 0, 2, 94, 2, 240, 17, 69, 1, 129, 96, 2, 9, 48, 73, ++ 0, 2, 222, 2, 240, 0, 0, 1, 136, 224, 14, 9, 48, 73, 0, 176, 65, 39, ++ 0, 24, 0, 0, 176, 0, 43, 0, 16, 2, 0, 2, 222, 2, 240, 0, 0, 1, 188, ++ 96, 3, 0, 16, 2, 1, 130, 224, 2, 15, 16, 120, 0, 2, 222, 2, 240, 0, ++ 0, 0, 104, 0, 167, 1, 151, 153, 0, 176, 65, 39, 0, 23, 161, 0, 176, ++ 65, 39, 1, 208, 73, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, ++ 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, ++ 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, ++ 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 23, 161, ++ 0, 176, 94, 135, 0, 23, 161, 0, 176, 94, 135, 0, 16, 73, 0, 2, 222, ++ 2, 240, 0, 0, 1, 0, 222, 83, 0, 23, 166, 1, 188, 96, 3, 0, 55, 161, ++ 3, 191, 222, 2, 240, 17, 86, 0, 2, 94, 2, 240, 1, 39, 1, 135, 96, 6, ++ 3, 55, 162, 0, 104, 222, 155, 0, 17, 90, 1, 135, 96, 2, 3, 55, 162, ++ 0, 2, 94, 2, 240, 1, 43, 0, 2, 222, 2, 240, 0, 0, 2, 2, 65, 31, 0, 17, ++ 111, 2, 130, 94, 83, 0, 17, 97, 1, 130, 96, 6, 242, 151, 148, 0, 176, ++ 68, 103, 0, 24, 0, 0, 176, 68, 107, 0, 8, 27, 0, 176, 68, 103, 0, 24, ++ 0, 0, 232, 68, 105, 3, 119, 164, 0, 104, 0, 167, 0, 145, 100, 0, 109, ++ 222, 147, 0, 81, 105, 0, 224, 68, 103, 3, 23, 163, 3, 144, 94, 2, 240, ++ 17, 108, 2, 133, 197, 35, 0, 17, 108, 0, 104, 222, 142, 35, 49, 102, ++ 1, 188, 96, 3, 2, 16, 71, 1, 188, 96, 3, 0, 144, 67, 1, 130, 96, 2, ++ 242, 151, 148, 1, 130, 96, 2, 245, 183, 173, 0, 104, 0, 167, 0, 145, ++ 111, 0, 104, 0, 167, 0, 177, 111, 0, 2, 222, 2, 240, 0, 0, 2, 1, 193, ++ 31, 0, 17, 130, 2, 133, 94, 175, 0, 17, 117, 1, 133, 96, 6, 245, 119, ++ 171, 0, 176, 68, 103, 0, 8, 30, 0, 176, 68, 107, 0, 8, 31, 0, 233, 68, ++ 101, 3, 215, 161, 0, 232, 196, 105, 3, 247, 162, 0, 208, 94, 135, 0, ++ 119, 161, 1, 225, 222, 138, 244, 55, 162, 0, 233, 94, 134, 38, 151, ++ 161, 0, 232, 222, 138, 38, 183, 162, 0, 105, 94, 139, 0, 17, 130, 1, ++ 188, 97, 3, 0, 17, 51, 0, 225, 68, 218, 244, 49, 54, 0, 225, 68, 222, ++ 244, 81, 55, 1, 133, 96, 2, 245, 119, 171, 1, 188, 96, 3, 1, 16, 71, ++ 1, 188, 96, 3, 0, 80, 67, 0, 2, 222, 2, 240, 0, 0, 2, 1, 174, 3, 0, ++ 17, 133, 2, 132, 197, 35, 0, 17, 143, 1, 188, 96, 15, 12, 16, 101, 0, ++ 224, 65, 149, 112, 16, 101, 2, 0, 46, 3, 0, 17, 137, 0, 224, 65, 151, ++ 0, 176, 101, 1, 188, 96, 15, 13, 23, 161, 0, 110, 65, 150, 244, 49, ++ 141, 0, 225, 90, 2, 41, 54, 128, 0, 224, 218, 7, 0, 22, 129, 1, 188, ++ 96, 3, 0, 11, 128, 1, 188, 96, 3, 0, 17, 73, 0, 2, 222, 2, 240, 0, 0, ++ 0, 176, 69, 31, 0, 23, 129, 0, 176, 5, 183, 0, 23, 166, 1, 188, 96, ++ 7, 4, 16, 100, 1, 188, 96, 19, 27, 144, 101, 1, 188, 96, 3, 0, 23, 161, ++ 2, 5, 222, 175, 0, 17, 170, 0, 176, 88, 15, 0, 23, 128, 0, 104, 222, ++ 132, 44, 49, 154, 0, 224, 88, 35, 0, 54, 8, 3, 191, 222, 2, 240, 17, ++ 178, 2, 0, 94, 155, 0, 17, 170, 2, 128, 218, 3, 0, 17, 160, 1, 24, 88, ++ 31, 0, 23, 130, 0, 224, 94, 11, 0, 55, 130, 1, 152, 94, 10, 192, 246, ++ 7, 3, 191, 222, 2, 240, 17, 163, 1, 26, 88, 31, 0, 23, 130, 0, 224, ++ 94, 11, 0, 55, 130, 1, 154, 94, 10, 192, 246, 7, 1, 240, 222, 3, 0, ++ 55, 128, 0, 160, 94, 2, 192, 87, 128, 0, 176, 94, 3, 0, 22, 3, 0, 160, ++ 68, 182, 240, 23, 130, 0, 176, 94, 11, 0, 22, 5, 0, 224, 94, 10, 192, ++ 150, 6, 3, 191, 222, 2, 240, 17, 178, 0, 176, 88, 19, 0, 23, 130, 0, ++ 232, 94, 6, 240, 87, 165, 0, 106, 222, 151, 0, 17, 176, 0, 232, 88, ++ 22, 244, 182, 5, 0, 105, 216, 23, 0, 17, 176, 1, 188, 96, 3, 0, 22, ++ 5, 0, 176, 88, 23, 0, 23, 165, 0, 224, 88, 18, 244, 182, 6, 0, 224, ++ 65, 147, 2, 16, 100, 0, 224, 65, 151, 6, 208, 101, 0, 224, 94, 135, ++ 0, 55, 161, 0, 144, 94, 155, 0, 55, 166, 0, 104, 222, 135, 0, 145, 149, ++ 1, 188, 96, 3, 0, 17, 71, 1, 188, 96, 3, 0, 1, 109, 0, 2, 222, 2, 240, ++ 0, 0, 1, 188, 96, 3, 0, 1, 108, 1, 188, 96, 3, 0, 1, 109, 1, 188, 96, ++ 7, 10, 16, 100, 1, 188, 96, 3, 0, 119, 161, 0, 176, 66, 143, 0, 23, ++ 128, 0, 160, 94, 3, 1, 247, 128, 0, 176, 94, 3, 0, 1, 110, 1, 188, 99, ++ 255, 31, 247, 162, 0, 104, 222, 3, 0, 17, 196, 1, 188, 96, 3, 0, 23, ++ 162, 0, 136, 96, 6, 244, 55, 129, 0, 32, 5, 186, 240, 49, 201, 0, 104, ++ 222, 138, 192, 209, 201, 0, 224, 5, 179, 0, 33, 108, 0, 176, 5, 182, ++ 240, 33, 109, 0, 104, 94, 3, 0, 17, 205, 0, 32, 94, 6, 240, 17, 211, ++ 0, 110, 222, 138, 192, 209, 211, 3, 191, 222, 2, 240, 17, 206, 0, 109, ++ 222, 138, 192, 209, 211, 0, 176, 94, 135, 0, 23, 163, 0, 176, 65, 147, ++ 0, 1, 102, 0, 176, 88, 27, 0, 23, 162, 1, 188, 96, 3, 0, 1, 108, 1, ++ 188, 96, 3, 0, 1, 109, 0, 232, 65, 147, 2, 16, 100, 0, 232, 94, 135, ++ 0, 55, 161, 0, 105, 222, 135, 0, 17, 196, 0, 176, 94, 143, 0, 1, 101, ++ 0, 2, 222, 2, 240, 0, 0, 0, 176, 5, 155, 0, 16, 100, 0, 176, 88, 27, ++ 0, 17, 69, 0, 176, 5, 155, 0, 1, 98, 0, 176, 5, 151, 0, 1, 97, 0, 176, ++ 88, 15, 0, 23, 133, 0, 176, 88, 7, 0, 23, 131, 0, 176, 88, 11, 0, 23, ++ 132, 1, 24, 88, 31, 0, 23, 140, 1, 26, 88, 31, 0, 23, 141, 0, 2, 222, ++ 2, 240, 0, 0, 0, 176, 5, 139, 0, 16, 100, 0, 110, 65, 147, 42, 17, 239, ++ 0, 160, 68, 182, 240, 183, 161, 0, 176, 94, 135, 0, 22, 5, 0, 224, 88, ++ 18, 244, 54, 6, 0, 176, 88, 27, 0, 17, 69, 2, 0, 0, 243, 0, 17, 236, ++ 0, 109, 65, 147, 40, 17, 236, 2, 0, 222, 175, 0, 17, 236, 1, 188, 96, ++ 11, 2, 81, 66, 0, 176, 94, 135, 0, 1, 111, 2, 1, 94, 175, 0, 17, 239, ++ 0, 176, 94, 23, 0, 22, 3, 1, 129, 96, 2, 245, 119, 171, 0, 2, 222, 2, ++ 240, 0, 0, 2, 1, 69, 35, 0, 17, 250, 2, 135, 196, 147, 0, 17, 250, 1, ++ 130, 96, 2, 245, 215, 174, 2, 1, 44, 35, 0, 17, 247, 0, 224, 44, 43, ++ 0, 43, 10, 1, 129, 96, 1, 97, 11, 8, 2, 6, 94, 183, 0, 17, 250, 0, 224, ++ 42, 215, 0, 42, 181, 1, 134, 96, 2, 245, 183, 173, 0, 2, 222, 2, 240, ++ 0, 0, 2, 2, 0, 191, 0, 18, 8, 0, 2, 94, 2, 240, 18, 48, 2, 2, 222, 179, ++ 0, 18, 0, 0, 104, 66, 143, 0, 15, 30, 3, 191, 222, 2, 240, 0, 2, 2, ++ 136, 129, 171, 0, 18, 8, 2, 132, 94, 255, 0, 17, 254, 2, 132, 94, 179, ++ 0, 17, 254, 2, 130, 222, 255, 0, 17, 254, 2, 130, 43, 47, 0, 18, 6, ++ 0, 104, 42, 155, 0, 18, 8, 2, 132, 222, 175, 0, 17, 254, 2, 132, 94, ++ 183, 0, 17, 254, 0, 176, 94, 135, 0, 23, 161, 0, 2, 222, 2, 240, 0, ++ 0, 1, 130, 224, 2, 245, 151, 172, 2, 3, 222, 255, 0, 18, 18, 2, 132, ++ 69, 35, 0, 18, 18, 2, 1, 43, 47, 0, 18, 18, 1, 128, 224, 6, 242, 151, ++ 148, 0, 2, 94, 2, 240, 17, 69, 1, 128, 224, 2, 242, 151, 148, 0, 2, ++ 94, 2, 240, 17, 69, 1, 128, 224, 2, 242, 151, 148, 2, 1, 172, 35, 0, ++ 17, 47, 1, 129, 224, 1, 97, 11, 8, 3, 191, 222, 2, 240, 17, 49, 2, 4, ++ 0, 199, 0, 18, 32, 2, 6, 171, 211, 0, 18, 26, 2, 132, 197, 175, 0, 18, ++ 46, 3, 191, 222, 2, 240, 18, 27, 2, 132, 197, 111, 0, 18, 46, 2, 132, ++ 69, 35, 0, 18, 29, 2, 0, 66, 3, 0, 18, 46, 0, 104, 94, 75, 4, 178, 46, ++ 0, 104, 94, 75, 6, 178, 46, 0, 104, 94, 75, 6, 50, 46, 1, 130, 224, ++ 6, 245, 151, 172, 2, 132, 69, 35, 0, 18, 35, 3, 35, 222, 2, 240, 18, ++ 36, 1, 131, 224, 6, 245, 151, 172, 1, 128, 224, 6, 242, 151, 148, 2, ++ 132, 0, 199, 0, 17, 47, 0, 176, 42, 215, 0, 23, 162, 0, 109, 222, 137, ++ 85, 17, 47, 2, 135, 43, 47, 0, 18, 43, 2, 0, 94, 255, 0, 17, 47, 2, ++ 7, 171, 47, 0, 17, 47, 1, 129, 224, 5, 97, 11, 8, 3, 191, 222, 2, 240, ++ 17, 49, 3, 191, 222, 2, 240, 17, 47, 0, 2, 222, 2, 240, 0, 0, 2, 2, ++ 0, 191, 0, 20, 55, 2, 6, 171, 211, 0, 18, 61, 1, 4, 193, 7, 0, 23, 161, ++ 1, 133, 94, 133, 97, 11, 8, 2, 4, 44, 35, 0, 18, 61, 1, 132, 96, 1, ++ 97, 11, 8, 1, 188, 96, 55, 0, 23, 162, 1, 188, 96, 3, 20, 23, 161, 0, ++ 176, 69, 227, 0, 24, 0, 0, 176, 69, 227, 0, 24, 0, 0, 176, 69, 227, ++ 0, 24, 0, 1, 188, 98, 3, 0, 16, 119, 1, 188, 96, 3, 27, 80, 118, 0, ++ 2, 94, 2, 240, 1, 62, 0, 104, 42, 235, 0, 18, 66, 0, 232, 68, 101, 87, ++ 87, 161, 1, 188, 99, 247, 29, 23, 162, 0, 109, 94, 134, 244, 82, 66, ++ 0, 232, 68, 102, 244, 74, 186, 0, 108, 196, 101, 86, 114, 68, 0, 232, ++ 68, 103, 0, 42, 179, 2, 6, 171, 211, 0, 18, 73, 0, 109, 196, 103, 1, ++ 82, 71, 1, 188, 96, 3, 0, 11, 16, 2, 132, 197, 175, 0, 18, 172, 3, 191, ++ 222, 2, 240, 18, 74, 2, 128, 69, 111, 0, 18, 172, 2, 7, 1, 171, 0, 18, ++ 76, 1, 128, 96, 2, 9, 208, 78, 1, 135, 224, 2, 245, 151, 172, 2, 4, ++ 222, 183, 0, 20, 55, 1, 132, 224, 2, 245, 183, 173, 1, 132, 224, 1, ++ 97, 11, 8, 2, 2, 222, 179, 0, 18, 106, 2, 6, 171, 211, 0, 18, 92, 0, ++ 104, 170, 247, 0, 146, 84, 0, 104, 43, 3, 0, 18, 85, 3, 191, 222, 2, ++ 240, 18, 90, 1, 139, 96, 14, 43, 145, 92, 2, 135, 171, 211, 0, 18, 89, ++ 1, 130, 96, 2, 9, 208, 78, 3, 191, 222, 2, 240, 18, 90, 1, 130, 96, ++ 6, 9, 208, 78, 0, 2, 94, 2, 240, 18, 10, 3, 191, 222, 2, 240, 18, 94, ++ 1, 131, 96, 6, 43, 145, 92, 0, 2, 94, 2, 240, 18, 10, 2, 130, 222, 187, ++ 0, 18, 106, 0, 104, 170, 247, 0, 146, 98, 1, 6, 171, 23, 0, 23, 187, ++ 0, 104, 222, 239, 0, 18, 102, 2, 132, 128, 199, 0, 18, 106, 0, 104, ++ 170, 247, 0, 50, 101, 0, 108, 196, 101, 86, 114, 105, 0, 104, 170, 247, ++ 0, 146, 106, 0, 104, 43, 3, 0, 18, 106, 0, 232, 69, 137, 90, 247, 161, ++ 0, 109, 94, 133, 96, 82, 106, 1, 132, 96, 2, 245, 183, 173, 2, 131, ++ 94, 187, 0, 18, 112, 2, 6, 171, 211, 0, 18, 110, 0, 232, 69, 201, 90, ++ 247, 161, 3, 191, 222, 2, 240, 18, 111, 0, 232, 69, 137, 90, 247, 161, ++ 0, 110, 94, 133, 84, 178, 141, 2, 5, 222, 183, 0, 18, 137, 0, 224, 43, ++ 151, 0, 42, 229, 1, 188, 96, 3, 0, 10, 231, 0, 104, 44, 71, 0, 18, 117, ++ 0, 232, 44, 71, 0, 43, 17, 1, 134, 96, 2, 245, 183, 173, 2, 4, 222, ++ 255, 0, 18, 127, 0, 176, 43, 155, 0, 23, 162, 0, 176, 42, 155, 0, 23, ++ 161, 2, 131, 172, 39, 0, 18, 124, 0, 104, 44, 135, 0, 18, 125, 0, 109, ++ 94, 133, 100, 50, 125, 0, 176, 44, 127, 0, 23, 162, 0, 109, 43, 150, ++ 244, 82, 127, 1, 132, 224, 2, 247, 247, 191, 2, 6, 222, 255, 0, 18, ++ 137, 0, 224, 43, 199, 2, 10, 241, 0, 176, 68, 103, 0, 10, 252, 1, 24, ++ 43, 199, 0, 23, 161, 1, 26, 43, 199, 0, 23, 162, 0, 110, 94, 135, 0, ++ 18, 135, 0, 109, 222, 137, 94, 82, 135, 3, 191, 222, 2, 240, 18, 137, ++ 1, 188, 96, 3, 0, 10, 241, 1, 134, 224, 2, 247, 247, 191, 2, 2, 94, ++ 255, 0, 20, 55, 0, 104, 170, 235, 0, 20, 55, 0, 176, 42, 199, 0, 10, ++ 186, 3, 191, 222, 2, 240, 20, 55, 1, 130, 224, 2, 247, 247, 191, 2, ++ 2, 94, 255, 0, 18, 150, 2, 6, 0, 199, 0, 18, 147, 2, 128, 43, 211, 0, ++ 18, 147, 0, 176, 43, 43, 0, 23, 187, 0, 110, 43, 2, 247, 116, 55, 2, ++ 2, 94, 255, 0, 18, 150, 0, 176, 68, 103, 0, 10, 186, 3, 191, 222, 2, ++ 240, 20, 55, 2, 5, 222, 183, 0, 18, 164, 0, 104, 42, 247, 8, 114, 153, ++ 0, 232, 68, 101, 85, 202, 182, 0, 104, 44, 71, 0, 18, 155, 0, 232, 44, ++ 71, 0, 43, 17, 0, 224, 43, 159, 0, 42, 231, 0, 176, 43, 163, 0, 23, ++ 161, 0, 176, 42, 155, 0, 23, 162, 2, 131, 172, 39, 0, 18, 161, 0, 104, ++ 44, 135, 0, 18, 162, 0, 109, 94, 137, 100, 50, 162, 0, 176, 44, 131, ++ 0, 23, 161, 0, 109, 43, 158, 244, 50, 164, 1, 188, 96, 3, 0, 10, 229, ++ 0, 104, 170, 247, 0, 178, 167, 0, 176, 68, 103, 0, 10, 239, 0, 176, ++ 68, 107, 0, 10, 243, 0, 104, 170, 247, 1, 50, 171, 0, 176, 68, 103, ++ 0, 11, 11, 2, 6, 43, 211, 0, 18, 171, 0, 176, 44, 123, 1, 11, 30, 3, ++ 191, 222, 2, 240, 20, 55, 2, 7, 1, 171, 0, 18, 174, 1, 128, 96, 6, 9, ++ 208, 78, 2, 4, 222, 183, 0, 18, 181, 2, 130, 222, 179, 0, 20, 55, 2, ++ 3, 197, 115, 0, 19, 250, 0, 232, 68, 101, 86, 55, 161, 0, 109, 94, 133, ++ 85, 180, 55, 1, 131, 96, 6, 245, 215, 174, 3, 191, 222, 2, 240, 20, ++ 55, 1, 135, 224, 6, 245, 151, 172, 0, 225, 14, 211, 0, 35, 180, 0, 224, ++ 142, 215, 0, 3, 181, 2, 6, 171, 211, 0, 18, 191, 1, 188, 96, 3, 0, 10, ++ 215, 0, 109, 69, 199, 31, 82, 188, 0, 176, 69, 199, 0, 10, 215, 0, 224, ++ 68, 101, 90, 247, 187, 0, 232, 94, 238, 46, 42, 177, 3, 191, 222, 2, ++ 240, 18, 196, 1, 188, 96, 3, 0, 10, 215, 0, 109, 69, 135, 31, 82, 194, ++ 0, 176, 69, 135, 0, 10, 215, 0, 224, 68, 101, 90, 247, 187, 0, 232, ++ 94, 238, 44, 42, 177, 1, 131, 96, 2, 245, 215, 174, 1, 132, 224, 6, ++ 245, 183, 173, 1, 133, 224, 2, 245, 183, 173, 1, 130, 96, 2, 247, 247, ++ 191, 1, 133, 96, 2, 245, 183, 173, 2, 6, 171, 211, 0, 18, 204, 1, 1, ++ 69, 175, 0, 23, 161, 3, 191, 222, 2, 240, 18, 205, 1, 1, 69, 111, 0, ++ 23, 161, 1, 135, 94, 134, 245, 119, 171, 1, 188, 96, 3, 0, 11, 5, 0, ++ 232, 68, 101, 86, 55, 161, 0, 109, 94, 133, 93, 210, 207, 0, 109, 94, ++ 133, 85, 178, 211, 0, 224, 43, 99, 0, 42, 216, 0, 176, 42, 147, 0, 23, ++ 179, 2, 6, 171, 211, 0, 18, 226, 1, 188, 96, 3, 1, 145, 120, 0, 176, ++ 69, 227, 0, 24, 0, 0, 176, 69, 231, 0, 10, 196, 1, 188, 96, 3, 1, 177, ++ 120, 0, 176, 69, 227, 0, 24, 0, 0, 176, 69, 231, 0, 10, 197, 1, 188, ++ 96, 3, 1, 209, 120, 0, 176, 69, 227, 0, 24, 0, 0, 176, 69, 231, 0, 10, ++ 198, 1, 188, 96, 3, 1, 241, 120, 0, 176, 69, 227, 0, 24, 0, 0, 176, ++ 69, 231, 0, 10, 199, 3, 191, 222, 2, 240, 18, 238, 1, 188, 96, 3, 0, ++ 17, 120, 0, 176, 69, 227, 0, 24, 0, 0, 176, 69, 231, 0, 10, 196, 1, ++ 188, 96, 3, 0, 49, 120, 0, 176, 69, 227, 0, 24, 0, 0, 176, 69, 231, ++ 0, 10, 197, 1, 188, 96, 3, 0, 81, 120, 0, 176, 69, 227, 0, 24, 0, 0, ++ 176, 69, 231, 0, 10, 198, 1, 188, 96, 3, 0, 113, 120, 0, 176, 69, 227, ++ 0, 24, 0, 0, 176, 69, 231, 0, 10, 199, 1, 130, 224, 1, 97, 11, 8, 2, ++ 7, 171, 27, 0, 18, 241, 1, 130, 224, 5, 97, 11, 8, 0, 176, 43, 23, 0, ++ 23, 187, 1, 40, 94, 239, 0, 10, 189, 1, 188, 96, 19, 28, 87, 187, 2, ++ 24, 43, 27, 0, 18, 248, 1, 24, 43, 27, 0, 23, 166, 0, 128, 222, 154, ++ 247, 119, 187, 0, 176, 65, 183, 0, 23, 179, 2, 3, 43, 211, 0, 19, 0, ++ 0, 104, 42, 247, 2, 210, 251, 0, 104, 170, 247, 2, 179, 0, 1, 188, 96, ++ 19, 28, 87, 187, 2, 52, 171, 23, 0, 19, 0, 1, 52, 171, 23, 0, 23, 166, ++ 0, 128, 222, 154, 247, 119, 187, 0, 176, 65, 183, 0, 23, 179, 2, 2, ++ 44, 39, 0, 19, 2, 1, 134, 96, 5, 96, 171, 5, 0, 110, 42, 247, 1, 243, ++ 6, 0, 136, 96, 5, 87, 183, 187, 0, 32, 222, 237, 92, 83, 9, 3, 191, ++ 222, 2, 240, 19, 12, 0, 232, 42, 247, 2, 23, 187, 0, 136, 96, 6, 247, ++ 119, 187, 0, 32, 94, 237, 92, 115, 12, 1, 133, 96, 6, 245, 183, 173, ++ 2, 4, 128, 195, 0, 19, 12, 1, 132, 224, 5, 96, 171, 5, 0, 110, 42, 247, ++ 1, 243, 19, 0, 136, 96, 5, 87, 183, 187, 0, 32, 94, 239, 1, 147, 17, ++ 1, 134, 96, 1, 96, 171, 5, 0, 104, 172, 71, 0, 19, 23, 0, 32, 222, 237, ++ 90, 147, 22, 3, 191, 222, 2, 240, 19, 23, 0, 232, 42, 247, 2, 23, 187, ++ 0, 136, 96, 6, 247, 119, 187, 0, 32, 94, 237, 90, 179, 23, 1, 132, 96, ++ 5, 96, 171, 5, 0, 104, 170, 247, 2, 243, 32, 1, 13, 171, 23, 0, 23, ++ 161, 1, 14, 171, 23, 0, 23, 162, 0, 104, 94, 135, 0, 19, 32, 0, 224, ++ 94, 134, 244, 87, 161, 0, 224, 94, 135, 8, 10, 189, 1, 134, 96, 1, 96, ++ 171, 5, 0, 104, 44, 71, 0, 19, 32, 1, 132, 96, 1, 96, 171, 5, 2, 3, ++ 43, 211, 0, 19, 44, 1, 131, 96, 1, 90, 170, 213, 0, 104, 42, 247, 2, ++ 211, 39, 0, 104, 170, 247, 2, 179, 60, 0, 104, 170, 231, 0, 19, 42, ++ 0, 104, 171, 35, 0, 19, 42, 2, 130, 222, 187, 0, 19, 42, 2, 7, 43, 27, ++ 0, 19, 42, 1, 132, 96, 5, 96, 171, 5, 3, 191, 222, 2, 240, 19, 60, 2, ++ 131, 197, 115, 0, 19, 60, 0, 2, 94, 2, 240, 21, 197, 0, 104, 170, 247, ++ 2, 179, 60, 1, 131, 96, 5, 90, 170, 213, 0, 224, 44, 143, 0, 43, 35, ++ 1, 133, 96, 2, 245, 183, 173, 0, 104, 170, 231, 0, 19, 60, 0, 104, 171, ++ 35, 0, 19, 60, 2, 130, 222, 187, 0, 19, 60, 0, 176, 42, 195, 0, 23, ++ 162, 1, 52, 43, 27, 0, 23, 161, 0, 110, 222, 135, 6, 19, 55, 0, 176, ++ 42, 191, 0, 23, 162, 0, 110, 94, 137, 100, 115, 60, 1, 188, 96, 3, 0, ++ 11, 35, 1, 188, 96, 3, 0, 10, 218, 1, 133, 96, 6, 245, 183, 173, 1, ++ 132, 224, 5, 97, 11, 8, 0, 104, 170, 247, 0, 179, 70, 2, 7, 94, 255, ++ 0, 19, 70, 1, 52, 43, 27, 0, 23, 163, 0, 109, 222, 141, 96, 51, 70, ++ 0, 104, 94, 143, 0, 19, 70, 2, 131, 171, 23, 0, 19, 68, 1, 131, 96, ++ 5, 96, 171, 5, 3, 191, 222, 2, 240, 19, 70, 0, 176, 43, 219, 0, 10, ++ 240, 0, 176, 68, 107, 0, 10, 247, 0, 104, 170, 247, 1, 51, 85, 2, 2, ++ 172, 39, 0, 19, 73, 1, 134, 224, 5, 96, 171, 5, 2, 129, 171, 211, 0, ++ 19, 85, 1, 188, 96, 3, 0, 10, 218, 0, 104, 44, 47, 0, 19, 85, 0, 232, ++ 68, 101, 97, 119, 161, 0, 109, 94, 133, 97, 147, 82, 0, 176, 44, 51, ++ 0, 23, 162, 0, 224, 94, 137, 97, 183, 162, 0, 109, 222, 134, 244, 83, ++ 84, 2, 0, 172, 35, 0, 19, 85, 1, 133, 96, 5, 96, 171, 5, 3, 191, 222, ++ 2, 240, 19, 85, 1, 128, 224, 1, 97, 11, 8, 0, 104, 170, 247, 1, 19, ++ 88, 0, 176, 42, 199, 0, 10, 209, 1, 135, 224, 6, 247, 247, 191, 2, 7, ++ 222, 255, 0, 19, 90, 1, 129, 224, 5, 96, 171, 5, 0, 104, 42, 247, 0, ++ 51, 95, 0, 104, 42, 247, 1, 243, 95, 2, 133, 43, 211, 0, 19, 94, 0, ++ 104, 42, 247, 3, 19, 95, 0, 104, 170, 247, 0, 147, 112, 1, 130, 96, ++ 6, 247, 247, 191, 0, 176, 42, 199, 0, 10, 185, 0, 104, 170, 247, 3, ++ 19, 102, 0, 104, 43, 35, 0, 19, 102, 0, 176, 0, 19, 0, 10, 189, 0, 176, ++ 43, 127, 0, 10, 192, 3, 191, 222, 2, 240, 19, 111, 0, 104, 170, 247, ++ 0, 147, 112, 1, 28, 43, 23, 0, 10, 192, 1, 6, 171, 23, 0, 23, 187, 0, ++ 104, 94, 239, 0, 19, 109, 1, 188, 96, 3, 0, 106, 195, 0, 176, 44, 123, ++ 0, 75, 30, 3, 191, 222, 2, 240, 19, 111, 0, 168, 44, 123, 0, 75, 30, ++ 1, 188, 96, 3, 0, 138, 195, 0, 176, 42, 199, 0, 10, 200, 2, 2, 222, ++ 187, 0, 19, 125, 2, 132, 222, 255, 0, 19, 115, 2, 6, 222, 255, 0, 19, ++ 125, 0, 176, 42, 215, 0, 23, 162, 0, 109, 222, 137, 85, 19, 124, 0, ++ 176, 43, 155, 0, 23, 162, 0, 176, 42, 155, 0, 23, 161, 2, 131, 172, ++ 39, 0, 19, 122, 0, 104, 44, 135, 0, 19, 123, 0, 109, 94, 133, 100, 51, ++ 123, 0, 176, 44, 127, 0, 23, 162, 0, 109, 171, 150, 244, 83, 125, 1, ++ 130, 224, 5, 96, 171, 5, 2, 134, 171, 211, 0, 19, 139, 0, 136, 96, 5, ++ 87, 183, 161, 0, 32, 222, 133, 99, 147, 131, 0, 232, 42, 247, 2, 23, ++ 161, 0, 136, 96, 6, 244, 55, 161, 0, 32, 94, 133, 99, 179, 137, 0, 104, ++ 44, 111, 0, 19, 137, 1, 52, 43, 27, 0, 23, 162, 0, 110, 94, 139, 2, ++ 147, 136, 0, 176, 44, 123, 0, 43, 30, 3, 191, 222, 2, 240, 19, 137, ++ 0, 168, 44, 123, 0, 43, 30, 0, 104, 170, 247, 2, 243, 139, 0, 176, 68, ++ 103, 0, 11, 27, 0, 224, 94, 205, 84, 183, 179, 1, 130, 96, 2, 245, 215, ++ 174, 0, 176, 44, 43, 0, 23, 161, 0, 176, 42, 215, 0, 23, 162, 0, 109, ++ 94, 137, 85, 19, 146, 2, 134, 94, 183, 0, 19, 163, 3, 191, 222, 2, 240, ++ 19, 148, 0, 109, 94, 133, 95, 243, 168, 2, 129, 44, 35, 0, 19, 163, ++ 1, 188, 96, 31, 7, 112, 101, 1, 188, 96, 31, 17, 80, 100, 1, 188, 96, ++ 31, 17, 215, 164, 0, 104, 90, 3, 0, 19, 159, 0, 136, 88, 3, 0, 247, ++ 163, 1, 52, 216, 3, 0, 23, 162, 0, 233, 94, 142, 35, 55, 163, 1, 195, ++ 224, 2, 35, 87, 165, 0, 232, 222, 138, 244, 183, 162, 0, 104, 222, 139, ++ 0, 19, 159, 0, 110, 222, 142, 246, 115, 163, 0, 224, 65, 147, 0, 48, ++ 100, 0, 224, 65, 151, 1, 144, 101, 0, 109, 65, 146, 244, 147, 151, 3, ++ 191, 222, 2, 240, 19, 168, 0, 104, 42, 247, 0, 147, 168, 0, 104, 42, ++ 247, 0, 83, 168, 0, 104, 42, 247, 0, 115, 168, 1, 130, 96, 6, 245, 215, ++ 174, 0, 2, 94, 2, 240, 21, 197, 1, 188, 96, 19, 28, 87, 187, 1, 52, ++ 43, 27, 0, 23, 162, 0, 128, 222, 138, 247, 119, 187, 0, 176, 65, 183, ++ 0, 23, 162, 0, 104, 42, 247, 0, 83, 181, 0, 104, 42, 247, 2, 83, 181, ++ 0, 104, 42, 247, 2, 115, 181, 0, 104, 42, 247, 0, 115, 181, 0, 104, ++ 42, 247, 8, 83, 181, 0, 104, 42, 247, 8, 115, 181, 0, 104, 42, 247, ++ 8, 147, 181, 0, 104, 42, 247, 3, 211, 181, 3, 191, 222, 2, 240, 19, ++ 196, 1, 133, 224, 6, 245, 183, 173, 0, 104, 94, 139, 0, 19, 191, 0, ++ 176, 94, 139, 0, 10, 166, 1, 130, 224, 6, 245, 215, 174, 0, 104, 44, ++ 139, 0, 19, 188, 0, 110, 94, 137, 100, 83, 188, 1, 129, 96, 5, 99, 203, ++ 30, 0, 224, 43, 171, 0, 42, 234, 0, 110, 94, 137, 96, 19, 191, 1, 130, ++ 96, 5, 96, 171, 5, 0, 232, 68, 101, 86, 55, 161, 0, 176, 68, 103, 0, ++ 23, 163, 0, 104, 42, 247, 8, 147, 195, 0, 232, 94, 142, 244, 42, 174, ++ 1, 132, 96, 2, 247, 247, 191, 2, 130, 222, 179, 0, 20, 55, 2, 3, 197, ++ 115, 0, 19, 250, 0, 176, 42, 171, 0, 23, 162, 0, 176, 42, 179, 0, 23, ++ 163, 0, 104, 170, 247, 0, 147, 212, 2, 128, 43, 211, 0, 19, 212, 0, ++ 176, 43, 3, 0, 23, 161, 0, 109, 94, 133, 88, 115, 208, 1, 128, 224, ++ 5, 96, 171, 5, 0, 104, 43, 79, 0, 19, 208, 1, 188, 96, 3, 0, 10, 188, ++ 0, 2, 94, 2, 240, 21, 155, 0, 104, 94, 135, 0, 19, 212, 0, 104, 43, ++ 231, 0, 19, 212, 0, 176, 43, 231, 0, 23, 162, 0, 176, 43, 235, 0, 23, ++ 163, 0, 104, 94, 143, 0, 19, 221, 0, 104, 42, 235, 0, 19, 221, 0, 232, ++ 68, 101, 87, 87, 161, 0, 224, 94, 142, 244, 87, 162, 0, 109, 94, 134, ++ 244, 83, 221, 1, 129, 96, 5, 96, 171, 5, 0, 104, 43, 79, 0, 19, 221, ++ 1, 188, 96, 3, 0, 10, 188, 0, 2, 94, 2, 240, 21, 155, 2, 129, 171, 47, ++ 0, 19, 226, 2, 0, 94, 255, 0, 19, 226, 2, 4, 69, 35, 0, 19, 226, 3, ++ 160, 222, 2, 240, 19, 226, 1, 131, 224, 5, 96, 171, 5, 2, 129, 172, ++ 39, 0, 19, 250, 2, 134, 44, 23, 0, 20, 55, 2, 134, 172, 23, 0, 20, 55, ++ 2, 128, 128, 191, 0, 20, 55, 2, 130, 94, 187, 0, 20, 55, 2, 130, 43, ++ 211, 0, 19, 250, 2, 129, 172, 23, 0, 19, 250, 2, 128, 172, 23, 0, 19, ++ 250, 2, 129, 44, 23, 0, 19, 250, 2, 130, 44, 23, 0, 19, 250, 2, 136, ++ 129, 171, 0, 19, 250, 2, 130, 172, 23, 0, 19, 243, 2, 131, 43, 23, 0, ++ 19, 250, 2, 131, 44, 23, 0, 19, 243, 2, 133, 44, 23, 0, 19, 243, 2, ++ 132, 44, 23, 0, 19, 250, 2, 132, 172, 23, 0, 19, 250, 2, 131, 172, 23, ++ 0, 19, 250, 2, 132, 94, 183, 0, 19, 249, 2, 4, 222, 175, 0, 19, 249, ++ 2, 129, 222, 187, 0, 19, 249, 1, 132, 224, 2, 245, 119, 171, 0, 2, 94, ++ 2, 240, 21, 159, 3, 191, 222, 2, 240, 20, 55, 0, 232, 68, 101, 86, 55, ++ 161, 0, 109, 222, 133, 84, 180, 13, 2, 6, 171, 211, 0, 19, 255, 1, 131, ++ 224, 2, 43, 145, 92, 3, 191, 222, 2, 240, 20, 55, 1, 131, 224, 2, 43, ++ 145, 92, 2, 7, 1, 171, 0, 20, 2, 1, 128, 224, 2, 9, 208, 78, 1, 188, ++ 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, 0, 1, 131, 96, 2, 47, 49, ++ 121, 2, 7, 222, 179, 0, 20, 9, 1, 135, 224, 2, 245, 151, 172, 0, 225, ++ 14, 219, 0, 35, 182, 0, 224, 142, 223, 0, 3, 183, 0, 104, 176, 55, 0, ++ 20, 12, 0, 176, 68, 103, 0, 12, 13, 0, 176, 68, 107, 0, 12, 14, 3, 191, ++ 222, 2, 240, 20, 55, 2, 129, 1, 171, 0, 20, 17, 2, 0, 129, 171, 0, 20, ++ 28, 2, 132, 44, 23, 0, 20, 28, 2, 128, 172, 23, 0, 20, 28, 2, 6, 171, ++ 211, 0, 20, 26, 0, 107, 172, 66, 35, 52, 21, 0, 224, 68, 103, 1, 75, ++ 16, 1, 139, 96, 2, 43, 145, 92, 2, 135, 171, 211, 0, 20, 24, 1, 130, ++ 96, 6, 9, 208, 78, 3, 191, 222, 2, 240, 20, 25, 1, 130, 96, 2, 9, 208, ++ 78, 3, 191, 222, 2, 240, 20, 27, 1, 131, 96, 2, 43, 145, 92, 3, 191, ++ 222, 2, 240, 20, 55, 2, 6, 171, 211, 0, 20, 37, 0, 107, 172, 66, 35, ++ 52, 32, 0, 224, 68, 103, 1, 75, 16, 1, 139, 96, 2, 43, 145, 92, 2, 135, ++ 171, 211, 0, 20, 35, 1, 130, 96, 6, 9, 208, 78, 3, 191, 222, 2, 240, ++ 20, 36, 1, 130, 96, 2, 9, 208, 78, 3, 191, 222, 2, 240, 20, 48, 1, 139, ++ 96, 2, 43, 145, 92, 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, ++ 24, 0, 1, 131, 96, 2, 47, 49, 121, 2, 7, 222, 179, 0, 20, 45, 1, 135, ++ 224, 2, 245, 151, 172, 0, 225, 14, 219, 0, 35, 182, 0, 224, 142, 223, ++ 0, 3, 183, 0, 104, 176, 55, 0, 20, 48, 0, 176, 68, 103, 0, 12, 13, 0, ++ 176, 68, 107, 0, 12, 14, 0, 2, 94, 2, 240, 18, 22, 2, 132, 94, 183, ++ 0, 20, 55, 2, 131, 43, 211, 0, 20, 52, 0, 104, 42, 247, 2, 180, 55, ++ 1, 132, 224, 6, 245, 119, 171, 0, 224, 43, 39, 0, 42, 201, 3, 191, 222, ++ 2, 240, 21, 135, 0, 2, 222, 2, 240, 0, 0, 1, 133, 224, 2, 245, 183, ++ 173, 1, 131, 96, 2, 245, 215, 174, 1, 130, 224, 2, 245, 215, 174, 1, ++ 130, 224, 2, 247, 247, 191, 1, 132, 224, 2, 247, 247, 191, 1, 188, 96, ++ 3, 0, 10, 211, 1, 188, 96, 3, 0, 10, 200, 1, 188, 96, 3, 0, 10, 192, ++ 1, 188, 96, 3, 0, 10, 234, 1, 135, 96, 1, 95, 106, 251, 0, 176, 68, ++ 103, 0, 12, 13, 0, 176, 68, 107, 0, 12, 14, 1, 129, 96, 1, 99, 203, ++ 30, 0, 2, 222, 2, 240, 0, 0, 2, 2, 0, 191, 0, 20, 165, 2, 131, 222, ++ 255, 0, 20, 215, 1, 131, 224, 6, 247, 247, 191, 1, 133, 96, 6, 11, 112, ++ 91, 1, 133, 96, 6, 11, 240, 95, 2, 6, 171, 211, 0, 20, 80, 1, 188, 96, ++ 3, 2, 17, 109, 0, 176, 42, 151, 0, 17, 110, 2, 128, 69, 171, 0, 20, ++ 105, 3, 191, 222, 2, 240, 20, 83, 1, 188, 96, 3, 2, 17, 93, 0, 176, ++ 42, 151, 0, 17, 94, 2, 128, 69, 107, 0, 20, 105, 2, 6, 171, 211, 0, ++ 20, 93, 0, 107, 172, 66, 35, 52, 87, 0, 224, 68, 103, 1, 75, 16, 1, ++ 139, 96, 2, 43, 145, 92, 2, 135, 171, 211, 0, 20, 90, 1, 130, 96, 6, ++ 9, 208, 78, 3, 191, 222, 2, 240, 20, 91, 1, 130, 96, 2, 9, 208, 78, ++ 1, 136, 96, 14, 45, 81, 106, 3, 191, 222, 2, 240, 20, 105, 1, 139, 96, ++ 2, 43, 145, 92, 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, ++ 0, 1, 131, 96, 2, 47, 49, 121, 2, 7, 222, 179, 0, 20, 101, 1, 135, 224, ++ 2, 245, 151, 172, 0, 225, 14, 219, 0, 35, 182, 0, 224, 142, 223, 0, ++ 3, 183, 0, 104, 176, 55, 0, 20, 104, 0, 176, 68, 103, 0, 12, 13, 0, ++ 176, 68, 107, 0, 12, 14, 1, 136, 96, 14, 43, 81, 90, 0, 176, 65, 63, ++ 31, 240, 79, 0, 104, 42, 187, 0, 20, 111, 1, 132, 96, 6, 247, 247, 191, ++ 1, 188, 96, 47, 23, 23, 163, 0, 224, 68, 102, 244, 106, 180, 1, 188, ++ 96, 3, 0, 10, 174, 0, 2, 94, 2, 240, 20, 56, 0, 232, 68, 105, 95, 215, ++ 161, 0, 110, 222, 135, 0, 52, 121, 0, 176, 43, 215, 0, 10, 240, 1, 188, ++ 96, 3, 0, 10, 239, 0, 104, 42, 235, 0, 20, 121, 0, 176, 68, 103, 0, ++ 10, 185, 0, 232, 68, 101, 85, 74, 186, 0, 176, 42, 179, 0, 23, 161, ++ 0, 232, 42, 234, 244, 42, 186, 2, 128, 128, 191, 0, 20, 134, 2, 129, ++ 222, 187, 0, 20, 155, 2, 6, 171, 211, 0, 20, 126, 2, 4, 197, 175, 0, ++ 20, 134, 3, 191, 222, 2, 240, 20, 127, 2, 0, 69, 111, 0, 20, 134, 2, ++ 131, 197, 115, 0, 20, 134, 2, 6, 171, 211, 0, 20, 132, 1, 188, 99, 255, ++ 31, 247, 161, 0, 104, 197, 198, 244, 52, 155, 3, 191, 222, 2, 240, 20, ++ 134, 1, 188, 99, 255, 31, 247, 161, 0, 104, 197, 134, 244, 52, 155, ++ 2, 6, 171, 211, 0, 20, 141, 1, 139, 96, 14, 43, 145, 92, 2, 135, 171, ++ 211, 0, 20, 139, 1, 130, 96, 2, 9, 208, 78, 3, 191, 222, 2, 240, 20, ++ 140, 1, 130, 96, 6, 9, 208, 78, 3, 191, 222, 2, 240, 20, 151, 1, 139, ++ 96, 14, 43, 145, 92, 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, ++ 24, 0, 1, 139, 43, 46, 47, 49, 121, 0, 104, 48, 55, 0, 20, 151, 0, 233, ++ 68, 101, 129, 183, 166, 0, 232, 196, 105, 129, 215, 187, 0, 225, 14, ++ 226, 244, 195, 184, 0, 224, 142, 230, 247, 99, 185, 1, 188, 96, 3, 0, ++ 12, 13, 1, 132, 224, 2, 245, 183, 173, 1, 132, 224, 2, 245, 119, 171, ++ 1, 133, 224, 1, 97, 11, 8, 3, 191, 222, 2, 240, 21, 146, 2, 6, 171, ++ 211, 0, 20, 158, 0, 2, 94, 2, 240, 18, 22, 3, 191, 222, 2, 240, 20, ++ 160, 1, 131, 96, 2, 43, 145, 92, 0, 2, 94, 2, 240, 18, 22, 1, 132, 224, ++ 6, 245, 183, 173, 1, 132, 224, 6, 245, 119, 171, 2, 6, 171, 211, 0, ++ 20, 164, 1, 132, 96, 5, 97, 11, 8, 3, 191, 222, 2, 240, 21, 146, 1, ++ 141, 96, 2, 11, 240, 95, 2, 6, 171, 211, 0, 20, 169, 1, 136, 96, 14, ++ 45, 81, 106, 3, 191, 222, 2, 240, 20, 170, 1, 136, 96, 14, 43, 81, 90, ++ 2, 129, 129, 171, 0, 20, 192, 2, 6, 171, 211, 0, 20, 180, 0, 107, 172, ++ 66, 35, 52, 175, 0, 224, 68, 103, 1, 75, 16, 1, 139, 96, 6, 43, 145, ++ 92, 2, 135, 171, 211, 0, 20, 178, 1, 130, 96, 2, 9, 208, 78, 3, 191, ++ 222, 2, 240, 20, 179, 1, 130, 96, 6, 9, 208, 78, 3, 191, 222, 2, 240, ++ 20, 212, 1, 139, 96, 6, 43, 145, 92, 1, 188, 96, 3, 24, 81, 120, 0, ++ 176, 69, 227, 0, 24, 0, 1, 131, 96, 2, 47, 49, 121, 2, 7, 222, 179, ++ 0, 20, 188, 1, 135, 224, 2, 245, 151, 172, 0, 225, 14, 219, 0, 35, 182, ++ 0, 224, 142, 223, 0, 3, 183, 0, 104, 176, 55, 0, 20, 191, 0, 176, 68, ++ 103, 0, 12, 13, 0, 176, 68, 107, 0, 12, 14, 3, 191, 222, 2, 240, 20, ++ 212, 2, 6, 171, 211, 0, 20, 201, 0, 107, 172, 66, 35, 52, 196, 0, 224, ++ 68, 103, 1, 75, 16, 1, 139, 96, 2, 43, 145, 92, 2, 135, 171, 211, 0, ++ 20, 199, 1, 130, 96, 6, 9, 208, 78, 3, 191, 222, 2, 240, 20, 200, 1, ++ 130, 96, 2, 9, 208, 78, 3, 191, 222, 2, 240, 20, 212, 1, 139, 96, 2, ++ 43, 145, 92, 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, 0, ++ 1, 131, 96, 2, 47, 49, 121, 2, 7, 222, 179, 0, 20, 209, 1, 135, 224, ++ 2, 245, 151, 172, 0, 225, 14, 219, 0, 35, 182, 0, 224, 142, 223, 0, ++ 3, 183, 0, 104, 176, 55, 0, 20, 212, 0, 176, 68, 103, 0, 12, 13, 0, ++ 176, 68, 107, 0, 12, 14, 1, 132, 224, 2, 245, 183, 173, 1, 132, 224, ++ 2, 245, 119, 171, 0, 2, 94, 2, 240, 20, 56, 0, 2, 222, 2, 240, 0, 0, ++ 0, 176, 68, 107, 0, 10, 254, 2, 2, 222, 179, 0, 20, 228, 2, 6, 171, ++ 211, 0, 20, 226, 1, 131, 96, 6, 43, 145, 92, 2, 135, 171, 211, 0, 20, ++ 223, 1, 130, 96, 2, 9, 208, 78, 3, 191, 222, 2, 240, 20, 224, 1, 130, ++ 96, 6, 9, 208, 78, 0, 2, 94, 2, 240, 18, 10, 3, 191, 222, 2, 240, 20, ++ 228, 1, 131, 96, 6, 43, 145, 92, 0, 2, 94, 2, 240, 18, 10, 2, 2, 0, ++ 191, 0, 21, 17, 1, 131, 224, 2, 247, 247, 191, 2, 3, 197, 115, 0, 20, ++ 252, 2, 0, 128, 191, 0, 20, 252, 2, 6, 171, 211, 0, 20, 241, 0, 107, ++ 172, 66, 35, 52, 236, 0, 224, 68, 103, 1, 75, 16, 1, 139, 96, 14, 43, ++ 145, 92, 2, 135, 171, 211, 0, 20, 239, 1, 130, 96, 2, 9, 208, 78, 3, ++ 191, 222, 2, 240, 20, 240, 1, 130, 96, 6, 9, 208, 78, 3, 191, 222, 2, ++ 240, 21, 16, 1, 139, 96, 14, 43, 145, 92, 1, 188, 96, 3, 24, 81, 120, ++ 0, 176, 69, 227, 0, 24, 0, 1, 139, 43, 46, 47, 49, 121, 0, 104, 48, ++ 55, 0, 20, 251, 0, 233, 68, 101, 129, 183, 166, 0, 232, 196, 105, 129, ++ 215, 187, 0, 225, 14, 226, 244, 195, 184, 0, 224, 142, 230, 247, 99, ++ 185, 1, 188, 96, 3, 0, 12, 13, 3, 191, 222, 2, 240, 21, 16, 2, 6, 171, ++ 211, 0, 21, 5, 0, 224, 68, 103, 0, 183, 187, 0, 108, 196, 102, 247, ++ 116, 254, 1, 139, 96, 2, 43, 145, 92, 2, 135, 171, 211, 0, 21, 3, 1, ++ 130, 96, 6, 9, 208, 78, 3, 191, 222, 2, 240, 21, 4, 1, 130, 96, 2, 9, ++ 208, 78, 3, 191, 222, 2, 240, 21, 16, 1, 139, 96, 2, 43, 145, 92, 1, ++ 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, 0, 1, 131, 96, 2, 47, ++ 49, 121, 2, 7, 222, 179, 0, 21, 13, 1, 135, 224, 2, 245, 151, 172, 0, ++ 225, 14, 219, 0, 35, 182, 0, 224, 142, 223, 0, 3, 183, 0, 104, 176, ++ 55, 0, 21, 16, 0, 176, 68, 103, 0, 12, 13, 0, 176, 68, 107, 0, 12, 14, ++ 1, 130, 224, 2, 245, 151, 172, 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, ++ 3, 0, 55, 162, 0, 32, 227, 254, 9, 21, 104, 0, 32, 224, 66, 13, 149, ++ 104, 2, 132, 94, 179, 0, 21, 104, 2, 128, 66, 3, 0, 21, 104, 2, 132, ++ 69, 35, 0, 21, 104, 3, 145, 94, 2, 240, 21, 104, 0, 104, 171, 79, 0, ++ 21, 104, 2, 130, 222, 255, 0, 21, 104, 0, 104, 42, 187, 0, 21, 30, 0, ++ 232, 68, 101, 85, 215, 185, 0, 232, 42, 154, 247, 55, 185, 2, 128, 94, ++ 255, 0, 21, 155, 2, 1, 128, 199, 0, 21, 146, 0, 176, 42, 215, 0, 23, ++ 161, 0, 109, 222, 133, 85, 21, 146, 2, 130, 222, 179, 0, 21, 104, 2, ++ 4, 128, 199, 0, 21, 77, 2, 3, 197, 115, 0, 21, 77, 0, 104, 94, 139, ++ 0, 21, 50, 2, 2, 171, 211, 0, 21, 40, 2, 133, 94, 187, 0, 21, 41, 2, ++ 130, 222, 187, 0, 21, 77, 0, 176, 43, 131, 0, 23, 161, 0, 110, 171, ++ 106, 244, 53, 50, 2, 3, 197, 115, 0, 21, 77, 0, 104, 42, 155, 0, 21, ++ 48, 0, 104, 42, 187, 0, 21, 50, 0, 106, 222, 229, 84, 245, 77, 0, 106, ++ 222, 229, 90, 85, 77, 2, 132, 172, 35, 0, 21, 50, 0, 104, 42, 231, 0, ++ 21, 77, 2, 148, 29, 243, 0, 21, 53, 2, 3, 222, 83, 0, 21, 58, 3, 191, ++ 222, 2, 240, 21, 56, 1, 20, 29, 243, 0, 23, 166, 0, 144, 28, 186, 244, ++ 215, 166, 2, 0, 94, 155, 0, 21, 58, 0, 176, 43, 135, 0, 10, 167, 3, ++ 191, 222, 2, 240, 21, 146, 1, 188, 96, 3, 2, 87, 146, 1, 188, 99, 255, ++ 31, 240, 195, 1, 188, 96, 3, 9, 16, 227, 1, 134, 94, 138, 28, 112, 227, ++ 1, 132, 96, 6, 28, 112, 227, 0, 104, 42, 239, 0, 21, 65, 1, 133, 224, ++ 6, 28, 112, 227, 1, 188, 96, 3, 3, 151, 130, 0, 2, 94, 2, 240, 21, 114, ++ 0, 176, 84, 19, 0, 16, 228, 0, 224, 67, 145, 91, 48, 228, 1, 188, 96, ++ 3, 0, 16, 238, 1, 188, 99, 255, 31, 240, 206, 0, 224, 42, 239, 0, 42, ++ 187, 1, 188, 97, 3, 0, 119, 166, 1, 20, 29, 243, 0, 23, 162, 0, 176, ++ 94, 139, 0, 12, 15, 1, 188, 97, 3, 3, 236, 16, 3, 191, 222, 2, 240, ++ 21, 98, 2, 132, 94, 183, 0, 21, 104, 1, 188, 96, 35, 8, 144, 230, 0, ++ 2, 94, 2, 240, 1, 106, 0, 176, 94, 207, 0, 16, 228, 0, 104, 170, 247, ++ 0, 53, 86, 2, 5, 172, 35, 0, 21, 86, 0, 232, 42, 206, 35, 55, 163, 0, ++ 109, 222, 142, 28, 149, 86, 0, 176, 94, 143, 0, 16, 228, 0, 104, 42, ++ 155, 0, 21, 94, 0, 176, 42, 219, 0, 16, 228, 2, 6, 171, 211, 0, 21, ++ 91, 2, 132, 197, 175, 0, 21, 94, 3, 191, 222, 2, 240, 21, 92, 2, 128, ++ 69, 111, 0, 21, 94, 0, 105, 94, 231, 0, 21, 94, 0, 224, 94, 229, 86, ++ 208, 228, 1, 188, 96, 3, 1, 215, 130, 0, 2, 94, 2, 240, 21, 114, 1, ++ 188, 97, 3, 0, 119, 166, 3, 191, 222, 2, 240, 21, 98, 0, 176, 0, 71, ++ 0, 16, 134, 0, 2, 94, 2, 240, 22, 2, 0, 2, 94, 2, 240, 16, 105, 1, 144, ++ 96, 10, 9, 16, 72, 1, 132, 96, 6, 245, 151, 172, 0, 176, 94, 155, 0, ++ 16, 128, 0, 2, 222, 2, 240, 0, 0, 2, 128, 94, 255, 0, 21, 109, 2, 129, ++ 222, 187, 0, 21, 109, 2, 1, 128, 199, 0, 21, 146, 2, 4, 128, 199, 0, ++ 21, 146, 1, 128, 96, 2, 247, 247, 191, 2, 128, 194, 143, 0, 21, 147, ++ 2, 1, 222, 187, 0, 21, 147, 1, 188, 96, 3, 0, 23, 162, 3, 191, 222, ++ 2, 240, 21, 19, 0, 104, 94, 75, 6, 53, 121, 2, 133, 222, 255, 0, 21, ++ 128, 0, 176, 43, 55, 0, 23, 161, 0, 109, 170, 238, 244, 53, 128, 1, ++ 188, 96, 3, 1, 55, 128, 0, 176, 43, 59, 0, 23, 161, 0, 109, 42, 238, ++ 244, 53, 123, 2, 129, 43, 211, 0, 21, 123, 1, 188, 96, 3, 1, 119, 128, ++ 1, 188, 96, 3, 0, 55, 129, 0, 2, 94, 2, 240, 1, 67, 1, 210, 222, 10, ++ 160, 48, 224, 0, 176, 84, 11, 0, 16, 225, 3, 191, 222, 2, 240, 21, 134, ++ 2, 128, 171, 211, 0, 21, 121, 1, 188, 96, 3, 1, 87, 128, 1, 188, 96, ++ 3, 0, 23, 129, 0, 2, 94, 2, 240, 1, 67, 0, 176, 84, 7, 0, 16, 224, 0, ++ 136, 94, 11, 0, 112, 225, 0, 2, 222, 2, 240, 0, 0, 0, 104, 42, 243, ++ 0, 21, 146, 2, 4, 222, 175, 0, 21, 146, 0, 232, 68, 101, 87, 151, 164, ++ 0, 110, 94, 145, 84, 245, 146, 0, 136, 94, 147, 0, 55, 164, 0, 109, ++ 94, 145, 84, 245, 146, 0, 2, 94, 2, 240, 21, 237, 3, 191, 222, 2, 240, ++ 21, 159, 0, 232, 68, 101, 87, 151, 164, 0, 136, 94, 147, 0, 55, 164, ++ 0, 2, 94, 2, 240, 21, 237, 3, 191, 222, 2, 240, 21, 159, 2, 132, 222, ++ 175, 0, 21, 150, 1, 129, 224, 2, 245, 215, 174, 3, 191, 222, 2, 240, ++ 21, 159, 0, 104, 43, 103, 0, 21, 155, 0, 224, 68, 101, 91, 42, 211, ++ 0, 104, 43, 107, 0, 21, 154, 0, 224, 68, 101, 90, 74, 211, 0, 2, 222, ++ 2, 240, 0, 0, 1, 128, 96, 6, 247, 247, 191, 0, 104, 42, 243, 0, 21, ++ 159, 0, 232, 68, 101, 87, 151, 164, 0, 2, 94, 2, 240, 21, 237, 1, 132, ++ 96, 2, 245, 151, 172, 1, 188, 96, 3, 0, 10, 188, 1, 188, 96, 3, 0, 10, ++ 211, 1, 188, 96, 3, 0, 10, 187, 1, 4, 222, 175, 0, 23, 161, 1, 132, ++ 94, 134, 245, 183, 173, 2, 132, 222, 175, 0, 21, 168, 1, 128, 96, 6, ++ 13, 144, 108, 0, 2, 222, 2, 240, 0, 0, 2, 133, 172, 35, 0, 21, 196, ++ 2, 3, 197, 115, 0, 21, 196, 0, 176, 42, 143, 0, 23, 163, 2, 2, 172, ++ 35, 0, 21, 173, 0, 176, 42, 175, 0, 23, 163, 2, 2, 222, 187, 0, 21, ++ 175, 0, 176, 42, 139, 0, 23, 163, 0, 224, 68, 102, 244, 106, 179, 1, ++ 133, 224, 5, 97, 11, 8, 0, 176, 68, 103, 0, 11, 3, 2, 6, 171, 211, 0, ++ 21, 183, 0, 107, 172, 66, 35, 53, 182, 0, 224, 68, 103, 1, 75, 16, 1, ++ 131, 224, 2, 43, 145, 92, 3, 191, 222, 2, 240, 21, 196, 1, 131, 224, ++ 2, 43, 145, 92, 2, 7, 1, 171, 0, 21, 186, 1, 128, 224, 2, 9, 208, 78, ++ 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, 0, 1, 131, 96, 2, ++ 47, 49, 121, 2, 7, 222, 179, 0, 21, 193, 1, 135, 224, 2, 245, 151, 172, ++ 0, 225, 14, 219, 0, 35, 182, 0, 224, 142, 223, 0, 3, 183, 0, 104, 176, ++ 55, 0, 21, 196, 0, 176, 68, 103, 0, 12, 13, 0, 176, 68, 107, 0, 12, ++ 14, 0, 2, 222, 2, 240, 0, 0, 2, 2, 222, 179, 0, 21, 208, 2, 6, 171, ++ 211, 0, 21, 206, 1, 139, 96, 14, 43, 145, 92, 2, 135, 171, 211, 0, 21, ++ 203, 1, 130, 96, 2, 9, 208, 78, 3, 191, 222, 2, 240, 21, 204, 1, 130, ++ 96, 6, 9, 208, 78, 0, 2, 94, 2, 240, 18, 10, 3, 191, 222, 2, 240, 21, ++ 230, 1, 131, 96, 6, 43, 145, 92, 0, 2, 94, 2, 240, 18, 10, 2, 3, 197, ++ 115, 0, 21, 213, 2, 132, 222, 175, 0, 21, 213, 2, 129, 222, 187, 0, ++ 21, 213, 2, 128, 94, 255, 0, 21, 213, 2, 4, 94, 183, 0, 21, 236, 2, ++ 6, 171, 211, 0, 21, 220, 1, 139, 96, 14, 43, 145, 92, 2, 135, 171, 211, ++ 0, 21, 218, 1, 130, 96, 2, 9, 208, 78, 3, 191, 222, 2, 240, 21, 219, ++ 1, 130, 96, 6, 9, 208, 78, 3, 191, 222, 2, 240, 21, 230, 1, 139, 96, ++ 14, 43, 145, 92, 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, ++ 0, 1, 139, 43, 46, 47, 49, 121, 0, 104, 48, 55, 0, 21, 230, 0, 233, ++ 68, 101, 129, 183, 166, 0, 232, 196, 105, 129, 215, 187, 0, 225, 14, ++ 226, 244, 195, 184, 0, 224, 142, 230, 247, 99, 185, 1, 188, 96, 3, 0, ++ 12, 13, 1, 131, 224, 1, 97, 11, 8, 1, 132, 96, 6, 245, 183, 173, 1, ++ 132, 224, 2, 245, 119, 171, 1, 188, 96, 3, 0, 10, 187, 1, 132, 96, 2, ++ 245, 151, 172, 1, 133, 224, 1, 97, 11, 8, 0, 2, 222, 2, 240, 0, 0, 0, ++ 104, 43, 91, 0, 21, 239, 0, 176, 43, 91, 0, 23, 164, 0, 109, 94, 145, ++ 85, 85, 241, 0, 176, 42, 171, 0, 23, 164, 0, 136, 43, 7, 0, 55, 165, ++ 0, 232, 43, 10, 244, 170, 194, 0, 136, 94, 147, 0, 55, 164, 0, 224, ++ 43, 10, 244, 138, 194, 0, 144, 43, 11, 0, 170, 193, 0, 176, 43, 7, 0, ++ 10, 167, 0, 2, 222, 2, 240, 0, 0, 3, 160, 222, 2, 240, 21, 251, 2, 0, ++ 66, 3, 0, 21, 251, 0, 2, 94, 2, 240, 13, 40, 1, 131, 224, 5, 97, 11, ++ 8, 1, 132, 96, 2, 245, 183, 173, 1, 132, 224, 6, 245, 119, 171, 1, 188, ++ 96, 3, 0, 10, 187, 1, 132, 96, 2, 245, 151, 172, 0, 176, 68, 103, 0, ++ 10, 188, 0, 2, 222, 2, 240, 0, 0, 1, 12, 129, 67, 0, 23, 161, 1, 188, ++ 96, 3, 0, 80, 138, 0, 104, 94, 7, 0, 22, 12, 0, 104, 222, 135, 0, 54, ++ 12, 1, 188, 96, 3, 0, 176, 138, 0, 104, 94, 7, 0, 54, 12, 2, 130, 222, ++ 3, 0, 22, 12, 1, 188, 96, 3, 0, 144, 138, 2, 131, 222, 3, 0, 22, 12, ++ 0, 224, 96, 10, 244, 208, 138, 0, 104, 94, 7, 0, 22, 20, 1, 144, 66, ++ 42, 161, 48, 138, 0, 104, 94, 7, 0, 54, 20, 1, 144, 66, 42, 160, 16, ++ 138, 1, 9, 222, 3, 0, 23, 162, 1, 143, 94, 138, 17, 80, 138, 0, 104, ++ 94, 139, 0, 22, 20, 1, 145, 224, 14, 17, 80, 138, 0, 2, 222, 2, 240, ++ 0, 0, 1, 9, 222, 3, 0, 23, 164, 0, 224, 90, 6, 244, 151, 165, 0, 144, ++ 94, 150, 244, 151, 165, 2, 3, 222, 3, 0, 22, 28, 2, 130, 222, 3, 0, ++ 22, 28, 1, 188, 97, 239, 8, 87, 166, 0, 128, 222, 150, 244, 215, 165, ++ 1, 22, 222, 135, 0, 23, 163, 0, 136, 94, 135, 0, 119, 161, 0, 225, 94, ++ 135, 2, 215, 161, 0, 224, 222, 143, 0, 23, 163, 1, 188, 96, 3, 0, 23, ++ 162, 2, 14, 94, 3, 0, 22, 35, 1, 188, 96, 3, 0, 55, 162, 0, 144, 94, ++ 150, 244, 87, 165, 0, 128, 222, 150, 244, 55, 161, 0, 225, 65, 183, ++ 255, 247, 166, 0, 225, 222, 135, 1, 247, 161, 0, 128, 222, 150, 244, ++ 119, 163, 0, 225, 222, 134, 13, 183, 161, 0, 224, 222, 143, 0, 23, 163, ++ 1, 122, 94, 134, 244, 119, 161, 0, 136, 94, 134, 244, 87, 161, 0, 176, ++ 94, 135, 0, 23, 162, 2, 135, 222, 3, 0, 22, 48, 0, 136, 94, 135, 0, ++ 87, 161, 3, 191, 222, 2, 240, 22, 61, 2, 135, 94, 3, 0, 22, 55, 1, 188, ++ 99, 155, 12, 215, 165, 0, 128, 222, 134, 244, 183, 161, 0, 225, 65, ++ 183, 255, 247, 165, 0, 224, 222, 135, 0, 23, 161, 0, 136, 94, 135, 0, ++ 87, 161, 3, 191, 222, 2, 240, 22, 61, 0, 136, 94, 135, 0, 87, 161, 1, ++ 188, 99, 155, 12, 247, 165, 0, 128, 222, 134, 244, 183, 161, 1, 188, ++ 98, 3, 0, 23, 165, 0, 225, 65, 182, 244, 183, 165, 0, 224, 222, 135, ++ 0, 23, 161, 0, 224, 94, 132, 0, 215, 161, 0, 2, 222, 2, 240, 0, 0, 2, ++ 0, 31, 247, 0, 0, 18, 2, 130, 222, 83, 0, 22, 69, 1, 136, 96, 2, 4, ++ 144, 36, 0, 224, 32, 146, 243, 8, 36, 0, 232, 32, 142, 243, 8, 35, 3, ++ 191, 222, 2, 240, 11, 54, 1, 184, 96, 22, 4, 144, 36, 1, 188, 96, 3, ++ 1, 208, 37, 3, 5, 94, 2, 240, 22, 86, 2, 135, 192, 55, 0, 12, 153, 3, ++ 134, 222, 2, 240, 12, 156, 0, 2, 94, 2, 240, 18, 47, 3, 92, 222, 2, ++ 240, 22, 71, 0, 216, 64, 155, 1, 23, 161, 0, 224, 94, 135, 2, 55, 152, ++ 0, 168, 94, 99, 0, 119, 152, 1, 2, 222, 83, 0, 23, 161, 1, 130, 224, ++ 2, 242, 151, 148, 1, 136, 222, 132, 255, 167, 253, 0, 110, 160, 142, ++ 243, 22, 86, 0, 232, 94, 99, 1, 208, 37, 1, 184, 96, 6, 4, 144, 36, ++ 3, 191, 222, 2, 240, 0, 2, 1, 129, 96, 4, 255, 167, 253, 1, 184, 96, ++ 10, 4, 144, 36, 3, 191, 222, 2, 240, 0, 2, 2, 40, 94, 135, 0, 22, 108, ++ 0, 176, 65, 147, 0, 23, 164, 0, 224, 65, 147, 0, 112, 100, 1, 10, 94, ++ 135, 0, 23, 162, 0, 232, 65, 146, 244, 80, 99, 1, 24, 94, 135, 0, 23, ++ 161, 0, 232, 96, 66, 244, 55, 162, 0, 136, 86, 2, 244, 54, 0, 0, 104, ++ 65, 142, 244, 150, 104, 0, 232, 65, 143, 0, 48, 99, 0, 232, 65, 147, ++ 0, 48, 100, 0, 104, 94, 139, 2, 22, 96, 0, 144, 86, 2, 244, 87, 163, ++ 0, 176, 88, 6, 244, 118, 1, 3, 191, 222, 2, 240, 22, 96, 0, 104, 65, ++ 146, 244, 150, 108, 0, 232, 65, 147, 0, 48, 100, 1, 188, 96, 3, 0, 22, ++ 0, 3, 191, 222, 2, 240, 22, 104, 0, 176, 94, 135, 0, 23, 161, 0, 2, ++ 222, 2, 240, 0, 0, 1, 128, 96, 2, 134, 20, 48, 0, 176, 80, 203, 0, 16, ++ 101, 1, 56, 80, 131, 0, 23, 161, 0, 104, 222, 59, 6, 54, 116, 0, 224, ++ 90, 51, 0, 54, 140, 0, 110, 218, 50, 244, 32, 18, 0, 176, 90, 11, 0, ++ 23, 162, 1, 188, 99, 255, 31, 247, 163, 0, 176, 80, 207, 0, 16, 100, ++ 0, 110, 218, 50, 244, 54, 121, 0, 176, 90, 55, 0, 23, 163, 0, 176, 88, ++ 19, 0, 23, 130, 1, 188, 96, 3, 0, 22, 4, 1, 188, 96, 27, 31, 215, 182, ++ 1, 2, 208, 199, 0, 23, 161, 0, 224, 65, 150, 244, 48, 101, 0, 224, 80, ++ 203, 0, 208, 100, 1, 188, 96, 3, 0, 23, 180, 1, 188, 96, 3, 0, 23, 128, ++ 1, 188, 96, 3, 0, 55, 129, 1, 135, 96, 4, 3, 16, 160, 0, 144, 82, 51, ++ 0, 151, 164, 0, 224, 65, 135, 1, 183, 181, 0, 104, 94, 210, 240, 86, ++ 160, 0, 224, 94, 218, 246, 144, 99, 0, 32, 216, 2, 240, 54, 148, 2, ++ 2, 80, 199, 0, 22, 154, 0, 144, 86, 3, 0, 151, 161, 0, 232, 94, 134, ++ 244, 151, 161, 1, 158, 96, 2, 244, 55, 161, 0, 109, 222, 135, 8, 22, ++ 154, 1, 10, 94, 135, 0, 23, 162, 1, 218, 96, 2, 244, 55, 161, 0, 224, ++ 94, 214, 244, 80, 99, 0, 136, 96, 6, 244, 55, 161, 0, 32, 86, 2, 244, ++ 54, 154, 0, 176, 88, 2, 240, 54, 0, 0, 224, 90, 43, 0, 54, 138, 0, 106, ++ 222, 210, 244, 118, 150, 0, 104, 222, 210, 240, 22, 155, 0, 224, 94, ++ 3, 0, 55, 128, 0, 104, 94, 3, 0, 54, 155, 1, 134, 224, 4, 3, 16, 160, ++ 3, 191, 222, 2, 240, 22, 155, 0, 106, 222, 210, 244, 118, 150, 0, 224, ++ 94, 211, 0, 55, 180, 0, 208, 94, 7, 0, 55, 129, 2, 152, 94, 211, 0, ++ 22, 133, 0, 224, 65, 147, 0, 48, 100, 3, 191, 222, 2, 240, 22, 133, ++ 0, 104, 94, 3, 0, 0, 18, 3, 191, 222, 2, 240, 6, 205, 2, 130, 208, 199, ++ 0, 22, 170, 0, 176, 42, 55, 0, 23, 161, 1, 184, 42, 50, 244, 54, 132, ++ 1, 2, 80, 19, 0, 22, 133, 1, 60, 80, 131, 0, 23, 161, 0, 176, 80, 167, ++ 0, 23, 164, 0, 109, 90, 50, 244, 54, 179, 1, 130, 224, 6, 134, 52, 49, ++ 2, 136, 80, 43, 0, 22, 175, 0, 176, 90, 51, 0, 23, 161, 1, 158, 94, ++ 134, 132, 244, 39, 1, 131, 96, 6, 134, 52, 49, 0, 2, 222, 2, 240, 0, ++ 0, 0, 176, 80, 115, 0, 23, 161, 1, 184, 80, 110, 244, 54, 132, 1, 6, ++ 208, 7, 0, 22, 133, 0, 176, 80, 171, 0, 23, 164, 0, 208, 96, 6, 192, ++ 151, 128, 0, 224, 65, 151, 0, 215, 181, 1, 10, 88, 19, 0, 23, 161, 0, ++ 224, 94, 214, 244, 55, 181, 0, 176, 88, 15, 0, 16, 99, 1, 22, 86, 3, ++ 0, 23, 129, 0, 104, 216, 19, 0, 22, 200, 1, 20, 0, 99, 0, 23, 161, 0, ++ 104, 222, 135, 0, 22, 190, 0, 136, 1, 59, 1, 22, 128, 3, 191, 222, 2, ++ 240, 22, 195, 0, 104, 222, 135, 0, 118, 193, 0, 160, 1, 59, 224, 22, ++ 128, 3, 191, 222, 2, 240, 22, 195, 0, 224, 94, 135, 9, 112, 98, 0, 136, ++ 84, 3, 1, 22, 128, 0, 232, 90, 3, 48, 22, 128, 1, 188, 96, 3, 0, 22, ++ 129, 1, 188, 96, 3, 0, 22, 130, 1, 188, 96, 3, 0, 22, 131, 3, 191, 222, ++ 2, 240, 22, 205, 0, 224, 65, 142, 192, 144, 99, 0, 110, 193, 142, 192, ++ 54, 205, 0, 232, 65, 142, 192, 48, 99, 0, 232, 88, 3, 0, 55, 161, 0, ++ 224, 65, 142, 244, 48, 99, 1, 56, 80, 163, 0, 23, 165, 0, 104, 88, 19, ++ 3, 246, 232, 0, 104, 65, 142, 192, 86, 232, 0, 109, 218, 10, 244, 182, ++ 232, 1, 22, 86, 3, 0, 23, 161, 0, 104, 222, 134, 240, 54, 232, 1, 88, ++ 86, 3, 0, 23, 161, 0, 224, 94, 135, 13, 215, 162, 0, 176, 94, 215, 0, ++ 16, 98, 0, 32, 222, 2, 160, 22, 223, 0, 224, 94, 134, 208, 55, 163, ++ 0, 224, 94, 142, 208, 119, 163, 0, 109, 90, 2, 244, 86, 232, 0, 110, ++ 94, 142, 244, 150, 232, 0, 232, 96, 2, 244, 54, 131, 0, 176, 94, 143, ++ 0, 22, 129, 0, 160, 90, 15, 0, 118, 131, 0, 224, 90, 11, 0, 54, 130, ++ 0, 232, 90, 2, 244, 86, 128, 0, 208, 94, 3, 0, 55, 128, 0, 224, 88, ++ 19, 0, 54, 4, 0, 224, 65, 143, 0, 48, 99, 2, 152, 88, 19, 0, 22, 229, ++ 0, 224, 94, 215, 0, 55, 181, 0, 110, 193, 142, 192, 54, 206, 0, 176, ++ 88, 3, 0, 16, 99, 3, 191, 222, 2, 240, 22, 206, 0, 176, 88, 19, 0, 23, ++ 161, 0, 104, 218, 55, 0, 22, 235, 0, 176, 94, 135, 0, 22, 141, 0, 109, ++ 222, 134, 209, 182, 237, 0, 176, 94, 135, 0, 22, 141, 0, 2, 222, 2, ++ 240, 0, 0, 1, 188, 96, 3, 0, 23, 161, 1, 135, 96, 4, 3, 16, 160, 1, ++ 188, 96, 3, 9, 144, 181, 0, 176, 0, 99, 0, 240, 180, 1, 188, 96, 87, ++ 3, 16, 182, 1, 188, 96, 3, 0, 144, 181, 0, 176, 0, 99, 0, 176, 180, ++ 0, 176, 66, 211, 0, 24, 0, 3, 23, 222, 2, 240, 22, 246, 3, 151, 222, ++ 2, 240, 22, 247, 0, 176, 42, 51, 0, 20, 47, 1, 142, 224, 12, 3, 16, ++ 160, 0, 109, 222, 2, 209, 182, 253, 0, 232, 90, 54, 240, 22, 141, 3, ++ 191, 222, 2, 240, 22, 255, 1, 188, 96, 3, 0, 22, 140, 1, 188, 96, 3, ++ 0, 22, 141, 0, 110, 90, 58, 240, 23, 2, 1, 188, 96, 3, 0, 22, 142, 3, ++ 191, 222, 2, 240, 23, 3, 0, 232, 90, 58, 240, 22, 142, 0, 176, 88, 7, ++ 0, 23, 161, 0, 224, 88, 14, 240, 22, 3, 0, 110, 216, 14, 244, 55, 9, ++ 0, 232, 94, 134, 192, 23, 161, 0, 232, 88, 14, 244, 54, 3, 0, 232, 88, ++ 15, 0, 54, 3, 1, 24, 94, 3, 0, 23, 161, 0, 109, 222, 3, 2, 23, 17, 0, ++ 232, 96, 66, 244, 55, 162, 0, 144, 90, 26, 244, 54, 134, 0, 136, 90, ++ 30, 244, 87, 162, 0, 144, 90, 30, 244, 54, 135, 0, 176, 90, 26, 244, ++ 86, 134, 3, 191, 222, 2, 240, 23, 19, 0, 144, 90, 30, 244, 54, 134, ++ 1, 188, 96, 3, 0, 22, 135, 0, 2, 222, 2, 240, 0, 0, 1, 88, 96, 3, 0, ++ 16, 42, 1, 184, 96, 10, 4, 144, 36, 1, 188, 96, 3, 2, 144, 4, 1, 137, ++ 224, 2, 13, 144, 108, 0, 2, 222, 2, 240, 0, 0, 2, 0, 222, 83, 0, 23, ++ 35, 1, 188, 96, 23, 7, 119, 161, 0, 2, 94, 2, 240, 1, 39, 0, 176, 64, ++ 103, 0, 23, 162, 0, 176, 94, 139, 0, 87, 162, 0, 2, 94, 2, 240, 1, 43, ++ 1, 188, 96, 3, 3, 55, 128, 1, 188, 96, 3, 0, 23, 129, 0, 2, 94, 2, 240, ++ 17, 43, 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 3, 3, 55, 128, 0, 2, 94, ++ 2, 240, 17, 38, 1, 131, 224, 6, 240, 55, 129, 1, 129, 224, 6, 240, 55, ++ 129, 0, 2, 94, 2, 240, 17, 43, 0, 176, 94, 7, 0, 23, 162, 0, 224, 68, ++ 103, 11, 87, 161, 0, 107, 68, 102, 244, 55, 42, 1, 188, 96, 3, 17, 55, ++ 128, 0, 2, 94, 2, 240, 17, 38, 1, 128, 96, 6, 240, 55, 129, 0, 2, 94, ++ 2, 240, 17, 43, 1, 188, 96, 3, 0, 151, 128, 0, 2, 94, 2, 240, 17, 38, ++ 1, 128, 96, 6, 240, 55, 129, 0, 2, 94, 2, 240, 17, 43, 0, 224, 68, 103, ++ 1, 87, 161, 0, 107, 68, 102, 244, 55, 52, 1, 188, 96, 3, 3, 55, 128, ++ 1, 160, 96, 126, 244, 87, 129, 0, 2, 94, 2, 240, 17, 43, 0, 224, 68, ++ 103, 7, 151, 161, 0, 107, 68, 102, 244, 55, 57, 1, 188, 96, 3, 17, 87, ++ 128, 0, 2, 94, 2, 240, 17, 38, 1, 132, 96, 6, 240, 55, 129, 0, 2, 94, ++ 2, 240, 17, 43, 0, 176, 94, 7, 0, 23, 162, 1, 188, 96, 3, 10, 55, 128, ++ 0, 2, 94, 2, 240, 17, 38, 1, 128, 96, 2, 240, 55, 129, 0, 2, 94, 2, ++ 240, 17, 43, 0, 224, 68, 103, 0, 55, 161, 0, 107, 68, 102, 244, 55, ++ 68, 1, 128, 96, 6, 240, 55, 129, 0, 2, 94, 2, 240, 17, 43, 1, 188, 96, ++ 3, 8, 87, 128, 0, 2, 94, 2, 240, 17, 38, 1, 138, 96, 2, 240, 55, 129, ++ 0, 2, 94, 2, 240, 17, 43, 0, 224, 68, 103, 0, 55, 161, 0, 107, 68, 102, ++ 244, 55, 76, 1, 138, 96, 14, 240, 55, 129, 0, 2, 94, 2, 240, 17, 43, ++ 0, 224, 68, 103, 6, 87, 161, 0, 107, 68, 102, 244, 55, 80, 1, 188, 96, ++ 3, 12, 183, 128, 0, 2, 94, 2, 240, 17, 38, 2, 128, 222, 7, 0, 23, 58, ++ 1, 188, 96, 3, 17, 87, 128, 1, 132, 96, 2, 244, 87, 129, 0, 2, 94, 2, ++ 240, 17, 43, 1, 188, 96, 3, 0, 55, 163, 2, 6, 171, 211, 0, 23, 91, 2, ++ 132, 197, 175, 0, 23, 103, 3, 191, 222, 2, 240, 23, 92, 2, 128, 69, ++ 111, 0, 23, 103, 1, 188, 96, 3, 0, 23, 163, 1, 139, 96, 14, 43, 145, ++ 92, 1, 188, 96, 3, 24, 81, 120, 0, 176, 69, 227, 0, 24, 0, 1, 139, 43, ++ 46, 47, 49, 121, 0, 104, 48, 55, 0, 23, 103, 0, 233, 68, 101, 129, 183, ++ 166, 0, 232, 196, 105, 129, 215, 187, 0, 225, 14, 226, 244, 195, 184, ++ 0, 224, 142, 230, 247, 99, 185, 1, 188, 96, 3, 0, 12, 13, 1, 188, 96, ++ 23, 7, 119, 161, 0, 2, 94, 2, 240, 1, 39, 0, 176, 64, 103, 0, 23, 162, ++ 0, 168, 94, 139, 0, 87, 162, 0, 2, 94, 2, 240, 1, 43, 0, 224, 68, 103, ++ 1, 87, 161, 0, 107, 68, 102, 244, 55, 109, 1, 188, 96, 3, 1, 183, 161, ++ 1, 188, 96, 3, 4, 119, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 19, ++ 10, 247, 161, 1, 188, 96, 3, 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, 1, ++ 188, 96, 3, 1, 23, 164, 0, 232, 94, 147, 0, 55, 164, 1, 188, 96, 3, ++ 1, 215, 161, 0, 176, 94, 147, 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, 1, ++ 188, 96, 19, 10, 215, 161, 1, 188, 96, 3, 0, 23, 162, 0, 2, 94, 2, 240, ++ 1, 43, 0, 104, 222, 147, 0, 23, 117, 0, 104, 94, 143, 0, 23, 127, 0, ++ 2, 222, 2, 240, 0, 0, 1, 188, 96, 39, 12, 183, 161, 1, 188, 96, 3, 1, ++ 151, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 39, 14, 183, 161, 1, ++ 188, 96, 3, 1, 55, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 3, 6, 87, ++ 164, 1, 188, 96, 3, 0, 119, 163, 1, 188, 96, 19, 9, 87, 161, 0, 2, 94, ++ 2, 240, 1, 39, 1, 128, 96, 6, 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, 1, ++ 128, 96, 2, 244, 87, 162, 0, 2, 94, 2, 240, 1, 43, 0, 224, 68, 102, ++ 244, 151, 161, 0, 107, 68, 102, 244, 55, 142, 0, 232, 94, 143, 0, 55, ++ 163, 0, 104, 94, 143, 0, 23, 149, 1, 188, 96, 3, 3, 23, 164, 1, 188, ++ 96, 39, 15, 23, 161, 0, 2, 94, 2, 240, 1, 39, 0, 104, 192, 103, 31, ++ 247, 135, 1, 188, 96, 39, 14, 183, 161, 1, 188, 96, 3, 1, 247, 162, ++ 0, 2, 94, 2, 240, 1, 43, 0, 2, 222, 2, 240, 0, 0, 0, 2, 222, 2, 240, ++ 0, 0, 2, 0, 222, 83, 0, 23, 171, 1, 188, 96, 19, 14, 119, 161, 0, 2, ++ 94, 2, 240, 1, 39, 0, 160, 64, 103, 63, 236, 53, 1, 188, 96, 19, 20, ++ 151, 161, 0, 2, 94, 2, 240, 1, 39, 1, 150, 224, 2, 3, 55, 162, 0, 2, ++ 94, 2, 240, 1, 43, 1, 188, 96, 19, 9, 183, 161, 0, 2, 94, 2, 240, 1, ++ 39, 1, 135, 96, 2, 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, ++ 19, 9, 151, 161, 0, 2, 94, 2, 240, 1, 39, 1, 135, 96, 6, 3, 55, 162, ++ 0, 2, 94, 2, 240, 1, 43, 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 115, 0, ++ 23, 163, 1, 188, 96, 19, 20, 151, 161, 0, 2, 94, 2, 240, 1, 39, 0, 160, ++ 64, 102, 244, 119, 164, 1, 150, 224, 30, 244, 151, 163, 0, 176, 94, ++ 141, 134, 183, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 19, 9, 183, ++ 161, 0, 2, 94, 2, 240, 1, 39, 1, 135, 96, 6, 3, 55, 162, 0, 2, 94, 2, ++ 240, 1, 43, 1, 188, 96, 19, 9, 151, 161, 0, 2, 94, 2, 240, 1, 39, 1, ++ 135, 96, 6, 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, 0, 2, 222, 2, 240, ++ 0, 0, 0, 104, 222, 147, 0, 23, 191, 0, 224, 94, 3, 0, 87, 162, 1, 9, ++ 94, 139, 0, 23, 161, 3, 191, 222, 2, 240, 23, 199, 0, 104, 222, 147, ++ 0, 55, 195, 1, 16, 94, 3, 0, 23, 162, 0, 224, 94, 139, 0, 151, 161, ++ 3, 191, 222, 2, 240, 23, 199, 1, 48, 94, 3, 0, 23, 162, 0, 224, 94, ++ 139, 1, 151, 161, 0, 109, 94, 135, 5, 151, 199, 1, 188, 96, 3, 5, 151, ++ 161, 0, 2, 222, 2, 240, 0, 0, 0, 104, 43, 203, 0, 23, 205, 0, 176, 43, ++ 243, 0, 23, 161, 0, 224, 94, 133, 95, 183, 161, 0, 107, 222, 134, 35, ++ 55, 205, 1, 134, 224, 6, 247, 247, 191, 0, 2, 222, 2, 240, 0, 0, 0, ++ 104, 31, 51, 0, 23, 221, 2, 6, 171, 211, 0, 23, 210, 2, 132, 197, 175, ++ 0, 23, 221, 3, 191, 222, 2, 240, 23, 211, 2, 128, 69, 111, 0, 23, 221, ++ 2, 133, 197, 35, 0, 23, 221, 0, 104, 31, 51, 0, 55, 219, 0, 176, 31, ++ 199, 0, 23, 161, 0, 2, 94, 2, 240, 1, 39, 0, 168, 64, 100, 249, 215, ++ 162, 0, 176, 94, 136, 249, 183, 162, 0, 2, 94, 2, 240, 1, 43, 3, 191, ++ 222, 2, 240, 23, 221, 0, 168, 65, 56, 249, 215, 161, 0, 176, 94, 132, ++ 249, 176, 78, 0, 2, 222, 2, 240, 0, 0, 2, 6, 171, 211, 0, 23, 225, 2, ++ 132, 197, 175, 0, 23, 221, 3, 191, 222, 2, 240, 23, 226, 2, 128, 69, ++ 111, 0, 23, 221, 1, 88, 96, 3, 0, 16, 42, 1, 137, 224, 2, 13, 144, 108, ++ 1, 188, 96, 3, 0, 144, 4, 0, 176, 64, 19, 0, 23, 161, 0, 2, 222, 2, ++ 240, 0, 0, 1, 130, 96, 6, 15, 16, 120, 2, 7, 193, 227, 0, 23, 232, 1, ++ 188, 96, 3, 12, 23, 163, 1, 188, 96, 3, 0, 144, 118, 1, 188, 96, 3, ++ 0, 16, 119, 0, 2, 94, 2, 240, 1, 52, 1, 188, 96, 3, 12, 151, 163, 0, ++ 2, 94, 2, 240, 1, 47, 0, 136, 96, 17, 134, 55, 161, 1, 188, 94, 134, ++ 14, 240, 119, 0, 2, 94, 2, 240, 1, 52, 1, 188, 96, 3, 12, 23, 163, 1, ++ 188, 96, 3, 0, 176, 118, 1, 188, 96, 3, 0, 16, 119, 0, 2, 94, 2, 240, ++ 1, 52, 1, 188, 96, 3, 12, 151, 163, 0, 2, 94, 2, 240, 1, 47, 0, 136, ++ 96, 5, 134, 55, 161, 1, 188, 94, 134, 14, 208, 118, 0, 2, 94, 2, 240, ++ 1, 52, 1, 188, 96, 3, 0, 23, 163, 0, 2, 94, 2, 240, 1, 47, 1, 133, 96, ++ 6, 14, 208, 118, 0, 2, 94, 2, 240, 1, 52, 1, 188, 96, 3, 12, 23, 163, ++ 1, 188, 96, 3, 0, 48, 118, 1, 188, 96, 3, 0, 16, 119, 0, 2, 94, 2, 240, ++ 1, 52, 1, 188, 96, 3, 12, 151, 163, 0, 2, 94, 2, 240, 1, 47, 1, 172, ++ 96, 162, 14, 240, 119, 0, 2, 94, 2, 240, 1, 52, 1, 188, 96, 3, 0, 23, ++ 163, 0, 2, 94, 2, 240, 1, 47, 1, 133, 96, 6, 14, 208, 118, 0, 2, 94, ++ 2, 240, 1, 52, 1, 188, 96, 3, 12, 23, 163, 1, 188, 96, 3, 0, 48, 118, ++ 1, 188, 96, 3, 0, 16, 119, 0, 2, 94, 2, 240, 1, 52, 1, 188, 96, 3, 12, ++ 151, 163, 0, 2, 94, 2, 240, 1, 47, 1, 172, 96, 2, 14, 240, 119, 0, 2, ++ 94, 2, 240, 1, 52, 1, 188, 96, 3, 0, 23, 163, 0, 2, 94, 2, 240, 1, 47, ++ 1, 133, 96, 6, 14, 208, 118, 0, 2, 94, 2, 240, 1, 52, 1, 130, 96, 2, ++ 15, 16, 120, 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 19, 8, 23, 161, 0, ++ 2, 94, 2, 240, 1, 39, 1, 128, 96, 2, 3, 55, 162, 0, 2, 94, 2, 240, 1, ++ 43, 1, 188, 96, 3, 0, 55, 161, 0, 2, 94, 2, 240, 1, 39, 1, 136, 96, ++ 14, 3, 55, 162, 0, 104, 176, 199, 0, 24, 34, 1, 136, 96, 10, 3, 55, ++ 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 27, 6, 87, 161, 0, 2, 94, ++ 2, 240, 1, 39, 1, 136, 48, 198, 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, ++ 0, 2, 94, 2, 240, 23, 231, 1, 188, 96, 19, 8, 23, 161, 0, 2, 94, 2, ++ 240, 1, 39, 1, 128, 96, 6, 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, 0, 2, ++ 222, 2, 240, 0, 0, 1, 188, 96, 67, 8, 144, 230, 0, 2, 94, 2, 240, 1, ++ 106, 1, 188, 96, 79, 17, 16, 228, 1, 144, 96, 10, 9, 16, 72, 1, 188, ++ 96, 3, 0, 0, 6, 1, 188, 96, 3, 1, 215, 130, 1, 210, 222, 8, 119, 240, ++ 224, 0, 176, 15, 3, 0, 16, 225, 0, 176, 0, 71, 0, 16, 134, 0, 176, 15, ++ 31, 0, 16, 138, 1, 188, 96, 3, 0, 55, 129, 0, 2, 94, 2, 240, 16, 105, ++ 1, 188, 96, 3, 0, 16, 187, 1, 188, 97, 3, 0, 16, 128, 1, 130, 96, 6, ++ 16, 48, 129, 3, 208, 94, 2, 240, 3, 145, 0, 2, 222, 2, 240, 0, 0, 0, ++ 104, 31, 131, 0, 24, 148, 2, 128, 66, 3, 0, 24, 148, 2, 133, 197, 35, ++ 0, 24, 148, 0, 104, 31, 143, 0, 56, 148, 0, 104, 31, 139, 0, 56, 113, ++ 1, 188, 96, 19, 8, 23, 161, 0, 2, 94, 2, 240, 1, 39, 1, 128, 96, 2, ++ 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 27, 27, 87, 161, 0, ++ 2, 94, 2, 240, 1, 39, 0, 176, 64, 103, 0, 12, 54, 1, 130, 224, 6, 3, ++ 55, 162, 0, 2, 94, 2, 240, 1, 43, 1, 132, 96, 6, 244, 87, 162, 0, 2, ++ 94, 2, 240, 1, 43, 1, 188, 96, 39, 15, 55, 161, 0, 2, 94, 2, 240, 1, ++ 39, 0, 176, 64, 103, 0, 12, 55, 1, 136, 96, 6, 3, 55, 162, 0, 2, 94, ++ 2, 240, 1, 43, 1, 188, 96, 39, 21, 151, 161, 0, 2, 94, 2, 240, 1, 39, ++ 0, 176, 64, 103, 0, 12, 56, 1, 155, 96, 22, 3, 55, 162, 1, 128, 96, ++ 6, 244, 87, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 19, 16, 119, 161, ++ 1, 188, 96, 11, 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 19, ++ 16, 87, 161, 0, 2, 94, 2, 240, 1, 39, 1, 184, 96, 130, 3, 55, 162, 0, ++ 2, 94, 2, 240, 1, 43, 1, 188, 96, 19, 16, 55, 161, 0, 2, 94, 2, 240, ++ 1, 39, 1, 128, 224, 2, 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, ++ 96, 3, 0, 7, 226, 1, 188, 96, 3, 0, 7, 227, 0, 104, 48, 239, 0, 24, ++ 105, 0, 224, 68, 101, 135, 103, 225, 3, 191, 222, 2, 240, 24, 106, 0, ++ 224, 68, 103, 8, 7, 225, 1, 188, 96, 19, 16, 55, 161, 0, 2, 94, 2, 240, ++ 1, 39, 1, 128, 96, 6, 3, 55, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, ++ 3, 0, 39, 226, 0, 2, 94, 2, 240, 1, 39, 2, 0, 64, 103, 0, 24, 133, 2, ++ 128, 66, 3, 0, 24, 133, 2, 133, 197, 35, 0, 24, 133, 1, 188, 96, 19, ++ 16, 55, 161, 0, 2, 94, 2, 240, 1, 39, 2, 0, 64, 103, 0, 24, 120, 0, ++ 108, 196, 100, 252, 56, 113, 0, 224, 48, 231, 0, 44, 57, 0, 224, 48, ++ 235, 0, 44, 58, 1, 188, 96, 19, 16, 247, 161, 0, 2, 94, 2, 240, 1, 39, ++ 0, 176, 64, 103, 0, 1, 132, 1, 188, 96, 19, 16, 215, 161, 0, 2, 94, ++ 2, 240, 1, 39, 0, 176, 64, 103, 0, 1, 133, 1, 188, 96, 43, 19, 87, 161, ++ 0, 2, 94, 2, 240, 1, 39, 0, 176, 64, 103, 0, 1, 134, 1, 188, 96, 19, ++ 17, 23, 161, 0, 2, 94, 2, 240, 1, 39, 0, 176, 64, 103, 0, 1, 135, 1, ++ 188, 96, 39, 21, 151, 161, 0, 176, 48, 227, 0, 23, 162, 0, 2, 94, 2, ++ 240, 1, 43, 1, 188, 96, 39, 15, 55, 161, 0, 176, 48, 223, 0, 23, 162, ++ 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 27, 27, 87, 161, 0, 176, 48, 219, ++ 0, 23, 162, 0, 2, 94, 2, 240, 1, 43, 1, 188, 96, 19, 8, 23, 161, 0, ++ 2, 94, 2, 240, 1, 39, 1, 128, 96, 6, 3, 55, 162, 0, 2, 94, 2, 240, 1, ++ 43, 1, 188, 96, 3, 0, 7, 226, 1, 188, 96, 3, 0, 7, 224, 0, 176, 94, ++ 135, 0, 23, 161, 0, 2, 222, 2, 240, 0, 0, 1, 188, 96, 3, 0, 12, 27, ++ 0, 176, 48, 163, 0, 23, 158, 0, 176, 48, 167, 0, 23, 157, 0, 176, 48, ++ 171, 0, 23, 156, 0, 176, 48, 175, 0, 23, 155, 3, 191, 222, 2, 240, 10, ++ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 126, 192, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 126, 192, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 32, 0, 0, 0, 64, 17, 1, 0, 0, 0, 0, 0, 128, 22, 1, 0, ++ 128, 0, 0, 0, 128, 22, 1, 0, 128, 3, 0, 0, 128, 22, 0, 0, 0, 64, 0, ++ 0, 128, 26, 33, 0, 224, 3, 0, 0, 128, 22, 0, 2, 0, 64, 0, 0, 128, 26, ++ 16, 2, 0, 64, 0, 0, 128, 26, 16, 2, 2, 64, 0, 0, 128, 26, 97, 0, 224, ++ 3, 0, 0, 128, 22, 16, 2, 0, 64, 0, 0, 128, 26, 97, 1, 224, 19, 0, 0, ++ 128, 22, 48, 2, 0, 64, 0, 0, 128, 26, 16, 2, 0, 64, 0, 0, 128, 26, 28, ++ 2, 0, 64, 0, 0, 128, 26, 0, 2, 0, 0, 0, 0, 128, 26, 28, 10, 0, 64, 0, ++ 0, 128, 26, 28, 10, 32, 64, 0, 0, 128, 26, 31, 202, 32, 64, 0, 0, 128, ++ 26, 31, 202, 32, 64, 0, 0, 128, 26, 1, 0, 0, 0, 0, 0, 128, 30, 9, 0, ++ 0, 0, 0, 0, 128, 30, 0, 0, 0, 0, 0, 0, 128, 2, 0, 0, 0, 0, 0, 0, 128, ++ 2, 0, 0, 0, 0, 0, 0, 128, 2, 8, 0, 0, 0, 0, 0, 128, 30, 0, 0, 0, 0, ++ 0, 0, 128, 30, 1, 0, 0, 0, 0, 0, 128, 30, 17, 0, 0, 0, 0, 0, 128, 30, ++ 31, 202, 32, 192, 0, 0, 128, 26, 31, 202, 32, 192, 0, 0, 128, 26, 95, ++ 202, 32, 192, 0, 0, 128, 26, 176, 100, 0, 0, 0, 0, 128, 14, 0, 0, 40, ++ 0, 0, 0, 128, 18, 17, 0, 0, 0, 0, 0, 128, 30, 0, 0, 0, 0, 200, 37, 66, ++ 133, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, ++ 0, 64, 1, 95, 202, 32, 64, 0, 0, 64, 25, 31, 202, 32, 64, 0, 0, 64, ++ 25, 1, 0, 0, 0, 0, 0, 64, 29, 1, 0, 0, 0, 0, 0, 64, 29, 1, 0, 0, 0, ++ 0, 0, 64, 29, 9, 0, 0, 0, 0, 0, 64, 29, 31, 194, 32, 64, 0, 0, 64, 25, ++ 15, 0, 0, 0, 0, 0, 64, 29, 31, 194, 32, 192, 0, 0, 64, 25, 27, 194, ++ 32, 192, 0, 0, 64, 25, 32, 125, 0, 0, 0, 0, 64, 13, 0, 0, 32, 0, 0, ++ 0, 64, 17, 0, 0, 0, 0, 51, 4, 66, 137, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, ++ 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 27, 194, 32, 64, 0, 0, 64, ++ 25, 9, 0, 0, 0, 0, 0, 64, 29, 27, 194, 32, 64, 0, 0, 64, 25, 1, 0, 0, ++ 0, 0, 0, 64, 29, 0, 0, 0, 0, 0, 0, 64, 29, 31, 194, 32, 64, 0, 0, 64, ++ 25, 1, 0, 0, 0, 0, 0, 64, 29, 9, 0, 0, 0, 0, 0, 64, 29, 31, 194, 32, ++ 64, 0, 0, 64, 25, 11, 1, 0, 0, 0, 0, 64, 29, 31, 194, 32, 192, 0, 0, ++ 64, 25, 27, 194, 32, 192, 0, 0, 64, 25, 192, 119, 0, 0, 0, 0, 64, 13, ++ 0, 0, 40, 0, 0, 0, 64, 17, 0, 0, 0, 0, 51, 28, 66, 137, 0, 0, 0, 0, ++ 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 31, 194, ++ 32, 192, 0, 0, 64, 25, 31, 194, 32, 192, 0, 0, 64, 25, 97, 0, 224, 19, ++ 0, 0, 64, 21, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, ++ 0, 0, 0, 0, 64, 1, 97, 1, 224, 19, 0, 0, 64, 21, 19, 194, 32, 192, 0, ++ 0, 64, 25, 97, 1, 128, 19, 0, 0, 64, 21, 10, 1, 0, 0, 0, 0, 64, 29, ++ 19, 194, 32, 192, 0, 0, 64, 25, 8, 4, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, ++ 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, ++ 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 19, 194, 32, 64, 0, 0, 64, ++ 25, 11, 1, 0, 0, 0, 0, 64, 29, 19, 194, 32, 192, 0, 0, 64, 25, 0, 0, ++ 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 3, 1, 0, 0, 0, 0, 64, 29, ++ 19, 194, 32, 64, 0, 0, 64, 25, 0, 0, 8, 0, 0, 0, 64, 17, 97, 1, 128, ++ 19, 0, 0, 64, 21, 97, 1, 128, 19, 0, 0, 64, 21, 97, 1, 128, 19, 0, 0, ++ 64, 21, 31, 194, 32, 64, 0, 0, 64, 25, 31, 194, 32, 64, 0, 0, 64, 25, ++ 31, 194, 32, 64, 0, 0, 64, 25, 11, 1, 0, 0, 0, 0, 64, 29, 11, 1, 0, ++ 0, 0, 0, 64, 29, 31, 194, 32, 192, 0, 0, 64, 25, 27, 194, 32, 192, 0, ++ 0, 64, 25, 195, 119, 0, 0, 0, 0, 64, 13, 0, 0, 8, 0, 0, 0, 64, 17, 0, ++ 0, 0, 0, 19, 28, 66, 136, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, ++ 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 27, 194, 32, 64, 0, 0, 64, 25, 9, 0, ++ 0, 0, 0, 0, 64, 29, 27, 202, 32, 64, 0, 0, 64, 25, 31, 202, 32, 64, ++ 0, 0, 64, 25, 9, 0, 0, 0, 0, 0, 64, 29, 31, 194, 32, 64, 0, 0, 64, 25, ++ 15, 0, 0, 0, 0, 0, 64, 29, 31, 194, 32, 192, 0, 0, 64, 25, 27, 194, ++ 32, 192, 0, 0, 64, 25, 35, 125, 0, 0, 0, 0, 64, 13, 0, 0, 0, 0, 0, 0, ++ 64, 17, 0, 0, 0, 0, 19, 4, 66, 136, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, ++ 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 27, 194, 32, 64, 0, 0, 64, ++ 25, 9, 0, 0, 0, 0, 0, 64, 29, 27, 202, 32, 64, 0, 0, 64, 25, 1, 0, 0, ++ 0, 0, 0, 64, 29, 31, 202, 32, 64, 0, 0, 64, 25, 17, 0, 0, 0, 0, 0, 64, ++ 29, 31, 202, 32, 64, 0, 0, 64, 25, 31, 202, 32, 192, 0, 0, 64, 25, 31, ++ 202, 32, 192, 0, 0, 64, 25, 31, 202, 32, 192, 0, 0, 64, 25, 95, 202, ++ 32, 192, 0, 0, 64, 25, 176, 100, 0, 0, 0, 0, 64, 13, 0, 0, 8, 0, 0, ++ 0, 64, 17, 17, 0, 0, 0, 0, 0, 64, 29, 0, 0, 0, 0, 184, 37, 66, 132, ++ 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, ++ 64, 1, 95, 202, 32, 64, 0, 0, 64, 25, 1, 0, 0, 0, 0, 0, 64, 29, 31, ++ 202, 32, 64, 0, 0, 64, 25, 31, 202, 32, 64, 0, 0, 64, 25, 0, 0, 0, 0, ++ 0, 0, 64, 29, 28, 10, 32, 64, 0, 0, 0, 24, 28, 10, 32, 64, 0, 0, 0, ++ 24, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 28, 97, 1, 128, 19, ++ 0, 0, 0, 20, 28, 10, 32, 64, 0, 0, 0, 24, 97, 1, 128, 3, 0, 0, 0, 20, ++ 16, 10, 32, 64, 0, 0, 0, 24, 0, 10, 32, 64, 0, 0, 0, 24, 0, 10, 0, 64, ++ 0, 0, 0, 24, 65, 1, 128, 3, 0, 0, 0, 20, 0, 8, 0, 64, 0, 0, 0, 24, 0, ++ 0, 16, 0, 0, 0, 0, 16, 0, 8, 2, 64, 0, 0, 0, 24, 0, 8, 3, 64, 0, 0, ++ 0, 24, 0, 8, 2, 64, 0, 0, 0, 24, 0, 8, 0, 64, 0, 0, 0, 24, 0, 0, 0, ++ 0, 0, 0, 0, 16, 0, 8, 0, 64, 0, 0, 0, 24, 0, 8, 0, 64, 0, 0, 0, 24, ++ 65, 1, 128, 0, 0, 0, 0, 20, 65, 1, 0, 0, 0, 0, 0, 20, 64, 1, 0, 0, 0, ++ 0, 0, 20, 0, 8, 2, 64, 0, 0, 0, 24, 0, 1, 0, 0, 0, 0, 0, 20, 0, 8, 0, ++ 64, 0, 0, 0, 24, 0, 8, 0, 192, 0, 0, 0, 24, 8, 12, 0, 0, 0, 0, 0, 4, ++ 8, 8, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 109, 72, 25, 7, 45, 98, 95, 153, 190, ++ 51, 94, 0, 91, 35, 75, 69, 37, 36, 71, 40, 8, 0, 0, 0, 0, 0, 30, 140, ++ 252, 90, 19, 1, 189, 50, 8, 1, 0, 52, 51, 52, 51, 48, 97, 49, 45, 114, ++ 111, 109, 108, 47, 115, 100, 105, 111, 45, 103, 45, 112, 111, 111, 108, ++ 45, 112, 50, 112, 45, 105, 100, 115, 117, 112, 45, 105, 100, 97, 117, ++ 116, 104, 45, 112, 107, 116, 102, 105, 108, 116, 101, 114, 45, 107, ++ 101, 101, 112, 97, 108, 105, 118, 101, 45, 97, 111, 101, 45, 108, 112, ++ 99, 45, 115, 119, 100, 105, 118, 45, 115, 114, 102, 97, 115, 116, 45, ++ 102, 117, 97, 114, 116, 45, 98, 116, 99, 120, 104, 121, 98, 114, 105, ++ 100, 104, 119, 45, 110, 111, 99, 108, 109, 105, 110, 99, 45, 99, 108, ++ 109, 95, 109, 105, 110, 45, 102, 98, 116, 45, 109, 102, 112, 45, 115, ++ 97, 101, 45, 116, 107, 111, 32, 86, 101, 114, 115, 105, 111, 110, 58, ++ 32, 55, 46, 52, 53, 46, 57, 56, 46, 57, 53, 32, 40, 114, 55, 50, 52, ++ 51, 48, 51, 32, 67, 89, 41, 32, 67, 82, 67, 58, 32, 101, 54, 98, 55, ++ 57, 50, 97, 54, 32, 68, 97, 116, 101, 58, 32, 84, 104, 117, 32, 50, ++ 48, 50, 48, 45, 48, 49, 45, 51, 48, 32, 50, 49, 58, 52, 51, 58, 53, ++ 51, 32, 80, 83, 84, 32, 85, 99, 111, 100, 101, 32, 86, 101, 114, 58, ++ 32, 49, 48, 52, 51, 46, 50, 49, 51, 55, 32, 70, 87, 73, 68, 32, 48, ++ 49, 45, 53, 97, 102, 99, 56, 99, 49, 101, 0, 254, 0, 68, 86, 73, 68, ++ 32, 48, 49, 45, 101, 100, 48, 100, 55, 97, 53, 54 ++}; ++resource_hnd_t wifi_firmware_image = { RESOURCE_IN_EXTERNAL_STORAGE, 421098, {.fs = { 0, "/wlan/4343WA1.BIN" }}}; ++ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c +new file mode 100644 +index 0000000000..616bdedf2e +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c +@@ -0,0 +1,400 @@ ++/* ++ * Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved ++ * SPDX-License-Identifier: LicenseRef-PBL ++ * ++ * This file and the related binary are licensed under the ++ * Permissive Binary License, Version 1.0 (the "License"); ++ * you may not use these files except in compliance with the License. ++ * ++ * You may obtain a copy of the License here: ++ * LICENSE-permissive-binary-license-1.0.txt and at ++ * https://www.mbed.com/licenses/PBL-1.0 ++ * ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++#include "wiced_resource.h" ++ ++#if defined(CY_STORAGE_WIFI_DATA) ++CY_SECTION_WHD(CY_STORAGE_WIFI_DATA) __attribute__((used)) ++#endif ++const unsigned char wifi_firmware_clm_blob_image_data[7222] = { ++ 66, 76, 79, 66, 60, 0, 0, 0, 132, 159, 16, 216, 1, 0, 0, 0, 2, 0, 0, ++ 0, 0, 0, 0, 0, 60, 0, 0, 0, 246, 27, 0, 0, 183, 10, 32, 40, 0, 0, 0, ++ 0, 0, 0, 0, 0, 50, 28, 0, 0, 4, 0, 0, 0, 42, 255, 237, 159, 0, 0, 0, ++ 0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 12, 0, 2, 0, 57, 46, 49, 48, ++ 46, 51, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 46, 50, 57, 46, ++ 52, 0, 0, 0, 0, 0, 0, 0, 0, 184, 10, 0, 0, 67, 108, 109, 73, 109, 112, ++ 111, 114, 116, 58, 32, 49, 46, 51, 54, 46, 51, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 66, 114, 111, 97, 100, 99, 111, 109, 45, 48, 46, 48, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 49, 0, 81, 50, 0, 3, 3, 3, 9, 3, 11, ++ 4, 4, 4, 7, 4, 8, 4, 10, 4, 11, 5, 7, 8, 8, 9, 9, 9, 11, 11, 11, 38, ++ 38, 38, 46, 38, 62, 38, 110, 38, 118, 38, 134, 38, 142, 38, 159, 38, ++ 175, 46, 46, 54, 54, 54, 62, 54, 134, 62, 62, 102, 102, 102, 110, 102, ++ 134, 102, 142, 102, 159, 110, 126, 110, 134, 110, 142, 134, 134, 134, ++ 159, 142, 142, 151, 151, 151, 159, 151, 175, 159, 159, 65, 69, 1, 65, ++ 82, 1, 65, 84, 1, 65, 85, 2, 66, 69, 1, 66, 71, 1, 66, 78, 1, 67, 65, ++ 2, 67, 72, 1, 67, 89, 1, 67, 90, 1, 68, 69, 3, 68, 75, 1, 69, 69, 1, ++ 69, 83, 1, 70, 73, 1, 70, 82, 1, 71, 66, 1, 71, 82, 1, 72, 82, 1, 72, ++ 85, 1, 73, 68, 5, 73, 69, 1, 73, 83, 1, 73, 84, 1, 74, 80, 3, 75, 82, ++ 4, 75, 87, 1, 76, 73, 1, 76, 84, 1, 76, 85, 1, 76, 86, 1, 77, 65, 1, ++ 77, 84, 1, 77, 88, 1, 78, 76, 1, 78, 79, 1, 80, 76, 1, 80, 84, 1, 80, ++ 89, 1, 82, 79, 1, 82, 85, 5, 83, 69, 1, 83, 73, 1, 83, 75, 1, 84, 82, ++ 7, 84, 87, 2, 85, 83, 26, 1, 0, 255, 1, 30, 2, 0, 3, 76, 1, 3, 76, 2, ++ 1, 66, 12, 3, 1, 0, 255, 1, 30, 2, 0, 7, 72, 0, 1, 58, 0, 3, 68, 6, ++ 3, 74, 8, 1, 74, 10, 3, 68, 11, 3, 66, 12, 3, 1, 0, 255, 1, 30, 2, 0, ++ 2, 64, 2, 1, 56, 2, 3, 1, 0, 255, 1, 30, 2, 0, 5, 72, 0, 1, 76, 1, 3, ++ 76, 7, 1, 72, 12, 1, 66, 12, 3, 1, 0, 255, 1, 30, 2, 0, 4, 58, 0, 3, ++ 68, 2, 1, 66, 7, 3, 58, 12, 3, 1, 0, 255, 1, 30, 2, 0, 5, 92, 0, 1, ++ 86, 0, 3, 126, 7, 0, 92, 12, 1, 86, 12, 3, 1, 0, 255, 1, 30, 2, 0, 5, ++ 70, 0, 3, 80, 1, 1, 80, 7, 3, 76, 12, 1, 72, 12, 3, 2, 4, 255, 1, 20, ++ 4, 2, 1, 76, 4, 0, 2, 0, 3, 1, 20, 4, 2, 1, 76, 4, 1, 2, 0, 255, 1, ++ 20, 4, 0, 1, 76, 4, 0, 3, 0, 4, 1, 20, 5, 2, 5, 76, 1, 3, 76, 4, 1, ++ 70, 12, 3, 76, 14, 3, 54, 17, 1, 3, 0, 4, 1, 20, 5, 0, 6, 60, 0, 3, ++ 68, 2, 1, 64, 8, 3, 48, 14, 1, 44, 14, 3, 64, 17, 1, 3, 0, 4, 1, 20, ++ 5, 0, 3, 64, 3, 3, 64, 5, 1, 46, 16, 3, 2, 0, 3, 1, 20, 4, 0, 3, 64, ++ 2, 0, 48, 14, 1, 44, 14, 3, 3, 0, 4, 1, 20, 5, 0, 6, 62, 0, 3, 66, 4, ++ 1, 66, 7, 3, 62, 12, 3, 66, 14, 3, 42, 17, 1, 3, 0, 255, 1, 20, 5, 2, ++ 2, 84, 4, 3, 78, 5, 1, 1, 0, 255, 1, 20, 2, 0, 2, 69, 2, 1, 79, 2, 3, ++ 3, 0, 255, 1, 30, 5, 0, 1, 120, 5, 0, 0, 0, 255, 0, 0, 0, 2, 0, 255, ++ 1, 23, 4, 2, 1, 92, 4, 0, 2, 0, 255, 1, 36, 4, 2, 1, 100, 4, 0, 2, 4, ++ 3, 1, 20, 4, 2, 1, 76, 4, 0, 1, 0, 255, 1, 20, 2, 2, 1, 76, 2, 0, 2, ++ 0, 255, 1, 20, 4, 4, 3, 56, 0, 3, 64, 9, 3, 56, 16, 3, 2, 1, 76, 4, ++ 1, 74, 48, 0, 74, 49, 0, 74, 50, 0, 74, 51, 0, 74, 52, 0, 74, 53, 0, ++ 74, 54, 0, 74, 55, 0, 74, 56, 0, 74, 57, 0, 0, 0, 4, 0, 0, 0, 37, 4, ++ 0, 0, 12, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4, 0, 1, 2, 3, 8, 12, ++ 13, 14, 15, 16, 17, 18, 19, 8, 4, 5, 6, 7, 8, 9, 10, 11, 1, 1, 1, 10, ++ 1, 11, 1, 12, 1, 13, 1, 14, 2, 2, 2, 10, 2, 11, 2, 12, 3, 9, 10, 10, ++ 11, 11, 12, 12, 12, 13, 12, 14, 13, 13, 14, 14, 34, 46, 36, 48, 36, ++ 64, 36, 116, 36, 140, 36, 144, 36, 161, 36, 165, 36, 177, 52, 60, 52, ++ 64, 52, 124, 52, 140, 52, 144, 52, 165, 56, 64, 64, 64, 64, 100, 100, ++ 100, 100, 116, 100, 140, 100, 144, 100, 165, 104, 128, 104, 140, 104, ++ 165, 132, 140, 132, 144, 132, 165, 149, 149, 149, 161, 149, 165, 149, ++ 177, 153, 161, 165, 165, 0, 1, 2, 1, 4, 1, 5, 1, 18, 2, 18, 19, 4, 18, ++ 19, 29, 48, 2, 18, 20, 2, 18, 22, 1, 19, 3, 19, 28, 49, 3, 19, 30, 49, ++ 3, 19, 31, 50, 2, 19, 32, 2, 19, 49, 1, 20, 2, 20, 38, 2, 20, 40, 2, ++ 20, 44, 2, 20, 48, 2, 20, 49, 2, 21, 46, 1, 22, 2, 22, 49, 2, 23, 49, ++ 1, 24, 1, 25, 1, 26, 3, 28, 38, 49, 2, 28, 49, 3, 33, 38, 49, 2, 33, ++ 49, 1, 38, 1, 48, 1, 49, 69, 48, 0, 88, 65, 0, 88, 85, 0, 65, 85, 2, ++ 74, 80, 1, 0, 0, 3, 0, 0, 0, 124, 10, 0, 0, 16, 4, 5, 6, 7, 8, 9, 10, ++ 11, 12, 13, 14, 15, 16, 17, 18, 19, 34, 46, 4, 36, 64, 4, 100, 144, ++ 4, 149, 177, 4, 50, 48, 50, 48, 45, 48, 49, 45, 51, 48, 32, 50, 49, ++ 58, 51, 48, 58, 48, 53, 0, 4, 2, 64, 19, 0, 64, 49, 0, 1, 2, 40, 14, ++ 0, 40, 39, 0, 4, 4, 56, 19, 0, 58, 28, 0, 60, 39, 0, 70, 49, 0, 1, 3, ++ 52, 15, 0, 64, 30, 0, 72, 39, 0, 4, 3, 60, 20, 0, 60, 38, 0, 60, 49, ++ 0, 1, 3, 56, 14, 0, 60, 25, 0, 60, 39, 0, 6, 1, 84, 20, 0, 3, 1, 84, ++ 15, 0, 4, 1, 60, 20, 0, 1, 1, 56, 15, 0, 6, 1, 84, 20, 0, 3, 1, 88, ++ 15, 0, 6, 2, 84, 20, 0, 84, 49, 0, 3, 2, 84, 15, 0, 84, 39, 0, 0, 0, ++ 4, 2, 66, 20, 0, 66, 48, 0, 1, 2, 54, 15, 0, 54, 39, 0, 6, 2, 92, 20, ++ 0, 80, 49, 0, 3, 2, 88, 15, 0, 76, 39, 0, 4, 2, 66, 20, 0, 64, 49, 0, ++ 1, 2, 56, 15, 0, 56, 39, 0, 4, 1, 56, 19, 0, 1, 1, 48, 14, 0, 4, 1, ++ 60, 19, 0, 1, 1, 56, 14, 0, 4, 1, 60, 19, 0, 1, 1, 56, 14, 0, 6, 2, ++ 84, 23, 0, 112, 49, 0, 3, 2, 88, 19, 0, 116, 39, 0, 4, 5, 56, 19, 0, ++ 70, 27, 0, 58, 34, 0, 68, 38, 0, 70, 49, 0, 1, 7, 52, 13, 0, 66, 22, ++ 0, 68, 23, 0, 52, 26, 0, 62, 27, 0, 72, 33, 0, 74, 39, 0, 4, 4, 58, ++ 19, 0, 80, 47, 0, 80, 51, 0, 80, 52, 0, 1, 4, 58, 13, 0, 66, 22, 0, ++ 72, 38, 0, 80, 41, 0, 4, 6, 56, 19, 0, 68, 27, 0, 56, 34, 0, 68, 36, ++ 0, 68, 42, 0, 68, 49, 0, 1, 6, 48, 14, 0, 68, 23, 0, 48, 26, 0, 62, ++ 27, 0, 74, 33, 0, 72, 39, 0, 4, 5, 56, 19, 0, 78, 27, 0, 64, 34, 0, ++ 68, 36, 0, 78, 43, 0, 1, 10, 62, 13, 0, 62, 22, 0, 78, 23, 0, 50, 26, ++ 0, 56, 27, 0, 78, 32, 0, 78, 35, 0, 78, 37, 0, 60, 38, 0, 78, 41, 0, ++ 4, 1, 120, 26, 0, 1, 1, 120, 21, 0, 4, 1, 120, 25, 0, 1, 1, 120, 20, ++ 0, 4, 4, 56, 19, 0, 70, 27, 0, 58, 34, 0, 70, 49, 0, 1, 4, 48, 14, 0, ++ 62, 23, 0, 48, 26, 0, 60, 39, 0, 4, 4, 56, 19, 0, 66, 27, 0, 60, 34, ++ 0, 66, 49, 0, 1, 3, 56, 14, 0, 60, 24, 0, 60, 39, 0, 6, 2, 84, 20, 0, ++ 84, 49, 0, 3, 2, 88, 15, 0, 88, 39, 0, 4, 4, 56, 19, 0, 70, 27, 0, 58, ++ 34, 0, 70, 49, 0, 1, 4, 48, 14, 0, 62, 23, 0, 48, 26, 0, 60, 39, 0, ++ 4, 2, 60, 28, 0, 68, 49, 0, 1, 2, 56, 24, 0, 56, 39, 0, 6, 2, 112, 28, ++ 0, 112, 49, 0, 3, 2, 112, 24, 0, 112, 39, 0, 0, 2, 64, 18, 0, 64, 20, ++ 0, 4, 4, 48, 18, 0, 48, 19, 0, 60, 29, 0, 60, 48, 0, 1, 2, 48, 17, 0, ++ 48, 39, 0, 4, 2, 56, 19, 0, 68, 49, 0, 1, 2, 48, 14, 0, 60, 39, 0, 4, ++ 6, 62, 19, 0, 90, 27, 0, 80, 35, 0, 90, 41, 0, 86, 45, 0, 118, 50, 0, ++ 1, 6, 74, 14, 0, 98, 23, 0, 66, 26, 0, 74, 27, 0, 98, 34, 0, 118, 40, ++ 0, 6, 1, 84, 24, 0, 3, 1, 88, 20, 0, 6, 1, 84, 24, 0, 3, 1, 88, 20, ++ 0, 4, 2, 56, 19, 0, 60, 49, 0, 1, 2, 48, 14, 0, 60, 39, 0, 6, 2, 72, ++ 20, 0, 72, 44, 0, 3, 2, 76, 15, 0, 76, 35, 0, 4, 2, 60, 20, 0, 60, 38, ++ 0, 1, 2, 56, 15, 0, 64, 29, 0, 4, 2, 60, 20, 0, 60, 38, 0, 1, 1, 56, ++ 18, 0, 4, 2, 84, 20, 0, 84, 38, 0, 1, 1, 56, 18, 0, 6, 1, 84, 22, 0, ++ 3, 1, 88, 18, 0, 6, 1, 84, 22, 0, 3, 1, 88, 18, 0, 6, 2, 84, 20, 0, ++ 112, 38, 0, 3, 2, 68, 15, 0, 96, 29, 0, 4, 2, 66, 20, 0, 66, 38, 0, ++ 1, 2, 42, 15, 0, 64, 29, 0, 4, 2, 62, 20, 0, 66, 38, 0, 1, 2, 42, 15, ++ 0, 64, 29, 0, 4, 2, 60, 20, 0, 60, 38, 0, 1, 2, 56, 15, 0, 64, 29, 0, ++ 0, 0, 4, 4, 60, 20, 0, 60, 37, 0, 60, 44, 0, 60, 49, 0, 1, 4, 56, 15, ++ 0, 60, 28, 0, 60, 35, 0, 60, 39, 0, 6, 2, 84, 21, 0, 84, 46, 0, 3, 2, ++ 88, 16, 0, 88, 36, 0, 4, 2, 60, 20, 0, 60, 49, 0, 1, 2, 56, 15, 0, 60, ++ 39, 0, 0, 2, 60, 20, 0, 60, 49, 0, 6, 1, 84, 25, 0, 3, 1, 84, 20, 0, ++ 6, 1, 84, 25, 0, 3, 1, 88, 20, 0, 6, 2, 84, 20, 0, 112, 40, 0, 3, 2, ++ 88, 15, 0, 116, 31, 0, 4, 3, 60, 20, 0, 60, 38, 0, 60, 49, 0, 1, 3, ++ 56, 15, 0, 64, 29, 0, 60, 39, 0, 4, 1, 60, 49, 0, 1, 1, 52, 39, 0, 6, ++ 1, 80, 49, 0, 3, 1, 80, 39, 0, 6, 1, 80, 49, 0, 3, 1, 80, 39, 0, 6, ++ 2, 80, 19, 0, 80, 49, 0, 3, 2, 80, 14, 0, 80, 39, 0, 6, 1, 76, 49, 0, ++ 3, 1, 76, 39, 0, 6, 1, 76, 48, 0, 3, 1, 68, 39, 0, 4, 1, 60, 49, 0, ++ 1, 1, 60, 39, 0, 6, 1, 84, 49, 0, 3, 1, 88, 39, 0, 4, 1, 78, 49, 0, ++ 1, 1, 78, 39, 0, 4, 3, 56, 33, 0, 68, 38, 0, 68, 49, 0, 1, 4, 48, 26, ++ 0, 62, 27, 0, 74, 33, 0, 72, 39, 0, 4, 3, 56, 28, 0, 58, 38, 0, 62, ++ 49, 0, 1, 4, 46, 23, 0, 48, 26, 0, 56, 29, 0, 56, 39, 0, 4, 2, 68, 33, ++ 0, 68, 49, 0, 1, 2, 66, 26, 0, 60, 39, 0, 2, 1, 84, 48, 0, 65, 69, 1, ++ 65, 82, 1, 65, 84, 1, 65, 85, 2, 66, 69, 1, 66, 71, 1, 66, 78, 1, 67, ++ 65, 2, 67, 72, 1, 67, 89, 1, 67, 90, 1, 68, 69, 3, 68, 75, 1, 69, 69, ++ 1, 69, 83, 1, 70, 73, 1, 70, 82, 1, 71, 66, 1, 71, 82, 1, 72, 82, 1, ++ 72, 85, 1, 73, 68, 5, 73, 69, 1, 73, 83, 1, 73, 84, 1, 74, 80, 3, 75, ++ 82, 4, 75, 87, 1, 76, 73, 1, 76, 84, 1, 76, 85, 1, 76, 86, 1, 77, 65, ++ 1, 77, 84, 1, 77, 88, 1, 78, 76, 1, 78, 79, 1, 80, 76, 1, 80, 84, 1, ++ 80, 89, 1, 82, 79, 1, 82, 85, 5, 83, 69, 1, 83, 73, 1, 83, 75, 1, 84, ++ 87, 2, 85, 83, 25, 4, 5, 76, 0, 2, 76, 6, 2, 76, 10, 2, 76, 11, 2, 66, ++ 12, 2, 1, 4, 62, 0, 0, 66, 4, 0, 62, 9, 0, 58, 10, 0, 4, 3, 58, 0, 2, ++ 66, 7, 2, 58, 12, 2, 1, 5, 42, 0, 0, 50, 3, 0, 60, 8, 0, 54, 9, 0, 46, ++ 10, 0, 4, 1, 56, 2, 2, 1, 1, 32, 1, 0, 4, 5, 58, 0, 2, 68, 6, 2, 74, ++ 10, 2, 68, 11, 2, 66, 12, 2, 1, 5, 48, 0, 0, 58, 3, 0, 66, 8, 0, 58, ++ 9, 0, 54, 10, 0, 4, 3, 86, 0, 2, 126, 7, 2, 86, 12, 2, 1, 3, 78, 0, ++ 0, 126, 5, 0, 78, 10, 0, 4, 5, 70, 0, 2, 80, 6, 2, 80, 10, 2, 80, 11, ++ 2, 72, 12, 2, 1, 5, 58, 0, 0, 68, 3, 0, 80, 8, 0, 68, 9, 0, 60, 10, ++ 0, 4, 1, 64, 4, 2, 1, 1, 64, 2, 0, 4, 1, 76, 4, 2, 1, 1, 72, 2, 0, 0, ++ 1, 64, 4, 2, 4, 4, 60, 0, 2, 64, 8, 2, 44, 13, 2, 44, 16, 2, 1, 3, 40, ++ 0, 0, 52, 5, 0, 46, 11, 0, 0, 2, 64, 3, 2, 46, 16, 2, 4, 2, 64, 2, 2, ++ 44, 14, 2, 1, 3, 54, 0, 0, 64, 6, 0, 52, 12, 0, 6, 1, 76, 4, 2, 3, 1, ++ 76, 2, 0, 6, 1, 76, 4, 2, 3, 1, 76, 2, 0, 6, 1, 76, 4, 2, 3, 1, 76, ++ 2, 0, 6, 1, 76, 4, 2, 3, 1, 128, 2, 0, 4, 1, 64, 4, 2, 1, 1, 64, 2, ++ 0, 6, 1, 84, 4, 2, 3, 1, 72, 2, 0, 0, 1, 79, 2, 2, 4, 2, 120, 4, 2, ++ 120, 17, 2, 1, 1, 120, 2, 0, 0, 0, 0, 1, 64, 4, 2, 4, 1, 80, 4, 2, 1, ++ 1, 64, 2, 0, 4, 1, 88, 4, 2, 1, 1, 60, 2, 0, 6, 1, 100, 4, 2, 3, 1, ++ 88, 2, 0, 4, 1, 64, 2, 2, 1, 1, 52, 1, 0, 4, 3, 56, 0, 2, 64, 9, 2, ++ 56, 16, 2, 1, 2, 46, 0, 0, 52, 7, 0, 68, 69, 0, 0, 3, 0, 0, 0, 251, ++ 3, 0, 0, 74, 80, 0, 0, 10, 0, 0, 0, 228, 2, 0, 0, 85, 83, 0, 0, 2, 0, ++ 0, 0, 104, 0, 0, 0, 8, 12, 13, 14, 15, 16, 17, 18, 19, 8, 4, 5, 6, 7, ++ 8, 9, 10, 11, 1, 14, 1, 0, 0, 0, 112, 11, 0, 0, 4, 3, 0, 0, 48, 3, 0, ++ 0, 229, 27, 0, 0, 154, 3, 0, 0, 160, 10, 0, 0, 82, 1, 0, 0, 67, 24, ++ 0, 0, 0, 9, 0, 0, 69, 4, 0, 0, 156, 11, 0, 0, 12, 4, 0, 0, 204, 27, ++ 0, 0, 127, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 212, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 3, 0, 0, 20, ++ 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ++ 0, 0, 0, 178, 10, 0, 0, 88, 65, 0, 0, 2, 0, 0, 0, 4, 4, 0, 0, 88, 84, ++ 0, 0, 47, 0, 0, 0, 115, 8, 0, 0, 88, 86, 0, 0, 48, 0, 0, 0, 194, 0, ++ 0, 0, 103, 1, 0, 0, 164, 11, 0, 0, 35, 97, 0, 17, 18, 19, 19, 0, 0, ++ 35, 110, 0, 18, 8, 255, 255, 240, 0, 35, 114, 0, 17, 19, 19, 20, 0, ++ 0, 48, 65, 0, 7, 8, 255, 255, 240, 16, 48, 66, 0, 0, 14, 0, 17, 0, 16, ++ 48, 67, 0, 7, 6, 13, 5, 0, 16, 65, 67, 0, 18, 8, 255, 255, 240, 16, ++ 65, 68, 0, 7, 33, 14, 39, 0, 48, 65, 69, 0, 7, 8, 6, 7, 0, 32, 65, 69, ++ 1, 7, 33, 6, 43, 0, 32, 65, 70, 0, 7, 33, 14, 39, 0, 48, 65, 71, 0, ++ 7, 41, 6, 47, 0, 32, 65, 73, 0, 6, 15, 5, 18, 0, 16, 65, 76, 0, 7, 33, ++ 6, 43, 0, 32, 65, 77, 0, 7, 5, 13, 3, 0, 0, 65, 78, 0, 7, 14, 6, 17, ++ 0, 32, 65, 79, 0, 7, 8, 255, 255, 240, 16, 65, 81, 0, 18, 8, 255, 255, ++ 240, 16, 65, 82, 0, 7, 25, 6, 25, 0, 0, 65, 82, 1, 7, 14, 6, 17, 0, ++ 0, 65, 83, 0, 6, 15, 5, 18, 0, 16, 65, 84, 0, 7, 33, 6, 43, 0, 32, 65, ++ 84, 1, 7, 37, 6, 36, 0, 32, 65, 85, 0, 20, 42, 24, 46, 0, 0, 65, 85, ++ 2, 20, 42, 23, 45, 0, 0, 65, 87, 0, 7, 34, 6, 31, 0, 0, 65, 88, 0, 18, ++ 8, 255, 255, 240, 16, 65, 90, 0, 7, 14, 6, 17, 0, 32, 66, 65, 0, 7, ++ 33, 6, 43, 0, 32, 66, 66, 0, 7, 22, 13, 23, 0, 16, 66, 68, 0, 7, 46, ++ 6, 59, 0, 0, 66, 69, 0, 7, 33, 6, 43, 0, 32, 66, 69, 1, 7, 37, 6, 36, ++ 0, 32, 66, 70, 0, 7, 33, 14, 39, 0, 16, 66, 71, 0, 7, 33, 6, 43, 0, ++ 32, 66, 71, 1, 7, 37, 6, 36, 0, 32, 66, 72, 0, 7, 21, 6, 22, 0, 0, 66, ++ 73, 0, 7, 33, 14, 39, 0, 16, 66, 74, 0, 7, 33, 14, 39, 0, 48, 66, 76, ++ 0, 18, 8, 255, 255, 240, 16, 66, 77, 0, 6, 15, 5, 18, 0, 16, 66, 78, ++ 0, 7, 8, 255, 255, 240, 0, 66, 78, 1, 19, 41, 22, 47, 0, 0, 66, 79, ++ 0, 7, 15, 13, 18, 0, 32, 66, 81, 0, 18, 8, 255, 255, 240, 16, 66, 82, ++ 0, 7, 43, 6, 52, 0, 32, 66, 83, 0, 20, 21, 23, 22, 0, 0, 66, 84, 0, ++ 7, 8, 13, 7, 0, 48, 66, 86, 0, 18, 8, 255, 255, 240, 16, 66, 87, 0, ++ 7, 45, 13, 51, 0, 48, 66, 89, 0, 7, 33, 255, 255, 240, 0, 66, 90, 0, ++ 7, 15, 13, 18, 0, 16, 67, 65, 0, 0, 21, 0, 22, 0, 0, 67, 65, 2, 6, 15, ++ 5, 18, 0, 16, 67, 67, 0, 18, 8, 255, 255, 240, 16, 67, 68, 0, 7, 33, ++ 14, 39, 0, 48, 67, 70, 0, 7, 33, 14, 39, 0, 16, 67, 71, 0, 7, 33, 14, ++ 39, 0, 48, 67, 72, 0, 7, 33, 6, 43, 0, 32, 67, 72, 1, 7, 37, 6, 36, ++ 0, 32, 67, 73, 0, 7, 33, 14, 39, 0, 48, 67, 75, 0, 7, 44, 13, 50, 0, ++ 16, 67, 76, 0, 7, 7, 6, 6, 0, 0, 67, 77, 0, 7, 33, 14, 39, 0, 16, 67, ++ 78, 0, 23, 49, 26, 53, 0, 0, 67, 79, 0, 7, 13, 6, 11, 0, 32, 67, 80, ++ 0, 18, 8, 255, 255, 240, 16, 67, 82, 0, 7, 14, 6, 15, 0, 32, 67, 85, ++ 0, 7, 8, 14, 255, 192, 48, 67, 86, 0, 7, 33, 14, 39, 0, 16, 67, 87, ++ 0, 18, 8, 255, 255, 240, 16, 67, 88, 0, 20, 42, 23, 46, 0, 16, 67, 89, ++ 0, 7, 33, 6, 43, 0, 32, 67, 89, 1, 7, 37, 6, 36, 0, 32, 67, 90, 0, 7, ++ 33, 6, 43, 0, 32, 67, 90, 1, 7, 37, 6, 36, 0, 32, 68, 69, 0, 7, 33, ++ 6, 43, 0, 32, 68, 69, 3, 7, 37, 6, 36, 0, 32, 68, 74, 0, 7, 8, 255, ++ 255, 240, 16, 68, 75, 0, 7, 33, 6, 43, 0, 32, 68, 75, 1, 7, 37, 6, 36, ++ 0, 32, 68, 77, 0, 7, 15, 13, 18, 0, 16, 68, 79, 0, 7, 15, 13, 18, 0, ++ 16, 68, 90, 0, 7, 5, 6, 4, 0, 32, 69, 48, 0, 7, 12, 6, 13, 0, 32, 69, ++ 67, 0, 7, 14, 6, 17, 0, 32, 69, 69, 0, 7, 33, 6, 43, 0, 32, 69, 69, ++ 1, 7, 37, 6, 36, 0, 32, 69, 71, 0, 7, 41, 21, 48, 0, 0, 69, 72, 0, 7, ++ 6, 13, 5, 0, 16, 69, 82, 0, 7, 8, 255, 255, 240, 16, 69, 83, 0, 7, 33, ++ 6, 43, 0, 32, 69, 83, 1, 7, 37, 6, 36, 0, 32, 69, 84, 0, 7, 33, 6, 43, ++ 0, 0, 70, 73, 0, 7, 33, 6, 43, 0, 32, 70, 73, 1, 7, 37, 6, 36, 0, 32, ++ 70, 74, 0, 7, 42, 13, 46, 0, 16, 70, 75, 0, 7, 33, 14, 39, 0, 16, 70, ++ 77, 0, 6, 15, 5, 18, 0, 16, 70, 79, 0, 7, 33, 14, 39, 0, 48, 70, 82, ++ 0, 7, 33, 6, 43, 0, 32, 70, 82, 1, 7, 37, 6, 36, 0, 32, 71, 65, 0, 7, ++ 33, 14, 39, 0, 16, 71, 66, 0, 7, 33, 6, 43, 0, 32, 71, 66, 1, 7, 37, ++ 6, 36, 0, 32, 71, 68, 0, 7, 43, 6, 52, 0, 0, 71, 69, 0, 7, 33, 14, 39, ++ 0, 48, 71, 70, 0, 7, 33, 6, 43, 0, 0, 71, 71, 0, 7, 33, 14, 39, 0, 16, ++ 71, 72, 0, 7, 33, 14, 39, 0, 48, 71, 73, 0, 7, 33, 14, 39, 0, 16, 71, ++ 76, 0, 18, 8, 255, 255, 240, 16, 71, 77, 0, 7, 33, 14, 39, 0, 16, 71, ++ 78, 0, 7, 33, 14, 39, 0, 48, 71, 80, 0, 7, 33, 6, 43, 0, 0, 71, 81, ++ 0, 7, 33, 14, 39, 0, 16, 71, 82, 0, 7, 33, 6, 43, 0, 32, 71, 82, 1, ++ 7, 37, 6, 36, 0, 32, 71, 83, 0, 18, 8, 255, 255, 240, 16, 71, 84, 0, ++ 7, 14, 12, 17, 0, 16, 71, 85, 0, 0, 14, 0, 17, 0, 0, 71, 87, 0, 7, 33, ++ 14, 39, 0, 16, 71, 89, 0, 7, 46, 13, 54, 0, 16, 72, 75, 0, 20, 43, 24, ++ 52, 0, 0, 72, 77, 0, 18, 8, 255, 255, 240, 16, 72, 78, 0, 7, 47, 13, ++ 61, 0, 0, 72, 82, 0, 7, 33, 6, 43, 0, 32, 72, 82, 1, 7, 37, 6, 36, 0, ++ 32, 72, 84, 0, 7, 46, 13, 54, 0, 0, 72, 85, 0, 7, 33, 6, 43, 0, 32, ++ 72, 85, 1, 7, 37, 6, 36, 0, 32, 73, 68, 0, 7, 8, 6, 7, 0, 0, 73, 68, ++ 5, 7, 55, 14, 65, 0, 16, 73, 69, 0, 7, 33, 6, 43, 0, 32, 73, 69, 1, ++ 7, 37, 6, 36, 0, 32, 73, 76, 0, 7, 5, 6, 4, 0, 32, 73, 77, 0, 7, 33, ++ 14, 39, 0, 16, 73, 78, 0, 19, 41, 22, 47, 0, 32, 73, 79, 0, 7, 33, 14, ++ 39, 0, 16, 73, 81, 0, 7, 33, 14, 39, 0, 16, 73, 82, 0, 7, 8, 14, 255, ++ 192, 48, 73, 83, 0, 7, 33, 6, 43, 0, 32, 73, 83, 1, 7, 37, 6, 36, 0, ++ 32, 73, 84, 0, 7, 33, 6, 43, 0, 32, 73, 84, 1, 7, 37, 6, 36, 0, 32, ++ 74, 48, 0, 7, 38, 16, 42, 0, 0, 74, 49, 0, 15, 12, 255, 255, 240, 0, ++ 74, 50, 0, 15, 5, 255, 255, 240, 0, 74, 51, 0, 15, 38, 255, 255, 240, ++ 0, 74, 52, 0, 15, 24, 255, 255, 240, 0, 74, 53, 0, 15, 27, 255, 255, ++ 240, 0, 74, 54, 0, 15, 28, 255, 255, 240, 0, 74, 55, 0, 15, 29, 255, ++ 255, 240, 0, 74, 56, 0, 15, 40, 255, 255, 240, 0, 74, 57, 0, 7, 28, ++ 16, 27, 0, 0, 74, 69, 0, 7, 33, 14, 39, 0, 16, 74, 77, 0, 7, 46, 14, ++ 60, 0, 16, 74, 79, 0, 7, 1, 6, 0, 0, 32, 74, 80, 0, 15, 39, 17, 40, ++ 0, 0, 74, 80, 1, 15, 28, 16, 27, 0, 0, 74, 80, 3, 15, 39, 16, 41, 0, ++ 0, 74, 80, 88, 16, 8, 18, 7, 0, 0, 75, 65, 0, 22, 17, 25, 16, 0, 0, ++ 75, 67, 0, 22, 46, 25, 54, 0, 0, 75, 68, 0, 7, 51, 6, 58, 0, 0, 75, ++ 69, 0, 7, 33, 6, 38, 0, 32, 75, 71, 0, 7, 33, 14, 39, 0, 16, 75, 72, ++ 0, 7, 43, 6, 52, 0, 0, 75, 73, 0, 20, 42, 23, 46, 0, 16, 75, 75, 0, ++ 22, 8, 25, 7, 0, 0, 75, 77, 0, 7, 33, 14, 39, 0, 16, 75, 78, 0, 7, 15, ++ 13, 18, 0, 16, 75, 80, 0, 18, 8, 255, 255, 240, 16, 75, 82, 0, 18, 55, ++ 20, 44, 0, 0, 75, 82, 4, 23, 30, 26, 28, 0, 16, 75, 87, 0, 7, 8, 6, ++ 7, 0, 32, 75, 87, 1, 7, 5, 6, 4, 0, 32, 75, 88, 0, 7, 48, 6, 56, 0, ++ 0, 75, 89, 0, 8, 8, 8, 7, 0, 0, 75, 90, 0, 7, 36, 13, 34, 0, 0, 76, ++ 65, 0, 7, 34, 6, 31, 0, 0, 76, 66, 0, 7, 46, 6, 59, 0, 32, 76, 67, 0, ++ 7, 15, 13, 18, 0, 16, 76, 73, 0, 7, 33, 6, 43, 0, 0, 76, 73, 1, 7, 37, ++ 6, 36, 0, 0, 76, 75, 0, 19, 43, 22, 52, 0, 0, 76, 82, 0, 7, 43, 21, ++ 50, 0, 16, 76, 83, 0, 7, 33, 6, 43, 0, 0, 76, 84, 0, 7, 33, 6, 43, 0, ++ 32, 76, 84, 1, 7, 37, 6, 36, 0, 32, 76, 85, 0, 7, 33, 6, 43, 0, 32, ++ 76, 85, 1, 7, 37, 6, 36, 0, 32, 76, 86, 0, 7, 33, 6, 43, 0, 32, 76, ++ 86, 1, 7, 37, 6, 36, 0, 32, 76, 89, 0, 7, 8, 15, 255, 192, 16, 77, 65, ++ 0, 7, 12, 21, 12, 0, 32, 77, 65, 1, 7, 5, 21, 4, 0, 32, 77, 67, 0, 7, ++ 33, 6, 43, 0, 0, 77, 68, 0, 7, 33, 6, 43, 0, 32, 77, 69, 0, 7, 33, 6, ++ 43, 0, 32, 77, 70, 0, 7, 45, 13, 51, 0, 16, 77, 71, 0, 7, 33, 14, 39, ++ 0, 48, 77, 72, 0, 18, 8, 255, 255, 240, 16, 77, 75, 0, 7, 33, 6, 43, ++ 0, 32, 77, 76, 0, 7, 33, 14, 39, 0, 16, 77, 77, 0, 7, 33, 14, 39, 0, ++ 16, 77, 78, 0, 7, 14, 12, 17, 0, 32, 77, 79, 0, 7, 50, 6, 59, 0, 0, ++ 77, 80, 0, 6, 15, 5, 18, 0, 16, 77, 81, 0, 7, 33, 6, 43, 0, 0, 77, 82, ++ 0, 7, 33, 6, 43, 0, 0, 77, 83, 0, 7, 33, 14, 39, 0, 48, 77, 84, 0, 7, ++ 33, 6, 43, 0, 32, 77, 84, 1, 7, 37, 6, 36, 0, 32, 77, 85, 0, 7, 33, ++ 6, 43, 0, 32, 77, 86, 0, 7, 10, 6, 10, 0, 32, 77, 87, 0, 7, 46, 6, 59, ++ 0, 32, 77, 88, 0, 7, 5, 6, 4, 0, 0, 77, 88, 1, 7, 21, 6, 22, 0, 0, 77, ++ 89, 0, 19, 41, 22, 47, 0, 0, 77, 90, 0, 7, 16, 13, 14, 0, 16, 78, 65, ++ 0, 7, 16, 13, 14, 0, 16, 78, 67, 0, 7, 33, 14, 39, 0, 16, 78, 69, 0, ++ 7, 33, 14, 39, 0, 16, 78, 70, 0, 7, 42, 12, 45, 0, 0, 78, 71, 0, 7, ++ 26, 14, 26, 0, 48, 78, 73, 0, 7, 14, 6, 17, 0, 32, 78, 76, 0, 7, 33, ++ 6, 43, 0, 32, 78, 76, 1, 7, 37, 6, 36, 0, 32, 78, 79, 0, 7, 33, 6, 43, ++ 0, 32, 78, 79, 1, 7, 37, 6, 36, 0, 32, 78, 80, 0, 19, 9, 22, 8, 0, 0, ++ 78, 82, 0, 7, 33, 14, 39, 0, 16, 78, 85, 0, 7, 14, 255, 255, 240, 16, ++ 78, 90, 0, 7, 43, 6, 52, 0, 32, 79, 77, 0, 7, 33, 6, 43, 0, 32, 80, ++ 65, 0, 19, 0, 22, 24, 0, 32, 80, 69, 0, 7, 14, 6, 17, 0, 32, 80, 70, ++ 0, 7, 33, 14, 39, 0, 16, 80, 71, 0, 7, 2, 6, 0, 0, 0, 80, 72, 0, 7, ++ 43, 6, 52, 0, 32, 80, 75, 0, 7, 50, 12, 55, 0, 32, 80, 76, 0, 7, 33, ++ 6, 43, 0, 32, 80, 76, 1, 7, 37, 6, 36, 0, 32, 80, 77, 0, 7, 33, 14, ++ 39, 0, 16, 80, 78, 0, 18, 8, 255, 255, 240, 16, 80, 82, 0, 0, 14, 0, ++ 17, 0, 0, 80, 83, 0, 18, 8, 255, 255, 240, 0, 80, 84, 0, 7, 33, 6, 43, ++ 0, 32, 80, 84, 1, 7, 37, 6, 36, 0, 32, 80, 87, 0, 7, 15, 13, 18, 0, ++ 16, 80, 89, 0, 7, 46, 6, 59, 0, 0, 80, 89, 1, 7, 43, 6, 52, 0, 0, 81, ++ 49, 0, 2, 8, 2, 7, 0, 0, 81, 50, 0, 0, 31, 0, 29, 0, 0, 81, 65, 0, 7, ++ 50, 14, 57, 0, 48, 82, 69, 0, 7, 33, 6, 43, 0, 0, 82, 79, 0, 7, 33, ++ 6, 43, 0, 32, 82, 79, 1, 7, 37, 6, 36, 0, 32, 82, 83, 0, 7, 33, 6, 43, ++ 0, 32, 82, 85, 0, 7, 8, 255, 255, 240, 0, 82, 85, 5, 7, 11, 12, 9, 0, ++ 0, 82, 87, 0, 7, 33, 14, 39, 0, 48, 83, 65, 0, 7, 34, 6, 32, 0, 32, ++ 83, 66, 0, 7, 8, 255, 255, 240, 16, 83, 67, 0, 7, 45, 13, 51, 0, 16, ++ 83, 68, 0, 7, 8, 14, 255, 192, 48, 83, 69, 0, 7, 33, 6, 43, 0, 32, 83, ++ 69, 1, 7, 37, 6, 36, 0, 32, 83, 71, 0, 19, 44, 22, 50, 0, 32, 83, 72, ++ 0, 18, 8, 255, 255, 240, 16, 83, 73, 0, 7, 33, 6, 43, 0, 32, 83, 73, ++ 1, 7, 37, 6, 36, 0, 32, 83, 74, 0, 18, 8, 255, 255, 240, 16, 83, 75, ++ 0, 7, 33, 6, 43, 0, 32, 83, 75, 1, 7, 37, 6, 36, 0, 32, 83, 76, 0, 7, ++ 33, 14, 39, 0, 16, 83, 77, 0, 7, 33, 14, 39, 0, 16, 83, 78, 0, 7, 33, ++ 6, 43, 0, 32, 83, 79, 0, 7, 8, 255, 255, 240, 16, 83, 82, 0, 7, 33, ++ 14, 39, 0, 16, 83, 84, 0, 7, 33, 14, 39, 0, 16, 83, 86, 0, 7, 14, 12, ++ 17, 0, 32, 83, 88, 0, 18, 8, 255, 255, 240, 16, 83, 89, 0, 18, 8, 255, ++ 255, 240, 16, 83, 90, 0, 7, 33, 14, 39, 0, 16, 84, 65, 0, 18, 8, 255, ++ 255, 240, 16, 84, 67, 0, 7, 33, 14, 39, 0, 16, 84, 68, 0, 7, 33, 14, ++ 39, 0, 16, 84, 70, 0, 7, 33, 14, 39, 0, 16, 84, 71, 0, 7, 33, 14, 39, ++ 0, 16, 84, 72, 0, 7, 43, 6, 52, 0, 32, 84, 74, 0, 7, 33, 14, 39, 0, ++ 16, 84, 75, 0, 18, 8, 255, 255, 240, 16, 84, 76, 0, 7, 33, 14, 39, 0, ++ 48, 84, 77, 0, 7, 33, 14, 39, 0, 16, 84, 78, 0, 7, 5, 6, 4, 0, 32, 84, ++ 79, 0, 7, 8, 255, 255, 240, 16, 84, 82, 0, 7, 5, 6, 4, 0, 32, 84, 82, ++ 7, 7, 33, 14, 39, 0, 48, 84, 84, 0, 7, 43, 6, 52, 0, 32, 84, 86, 0, ++ 7, 8, 255, 255, 240, 16, 84, 87, 0, 0, 52, 0, 64, 0, 0, 84, 87, 2, 0, ++ 53, 0, 62, 0, 0, 84, 90, 0, 7, 33, 14, 39, 0, 16, 85, 65, 0, 7, 8, 255, ++ 255, 240, 0, 85, 71, 0, 7, 34, 6, 31, 0, 32, 85, 77, 0, 0, 14, 0, 17, ++ 0, 0, 85, 83, 0, 5, 32, 4, 30, 0, 0, 85, 83, 25, 12, 8, 10, 7, 0, 0, ++ 85, 83, 26, 4, 8, 1, 7, 0, 0, 85, 89, 0, 20, 43, 23, 52, 0, 0, 85, 90, ++ 0, 7, 33, 14, 39, 0, 16, 86, 65, 0, 7, 33, 6, 43, 0, 0, 86, 67, 0, 7, ++ 15, 13, 18, 0, 16, 86, 69, 0, 7, 41, 6, 47, 0, 0, 86, 71, 0, 7, 33, ++ 6, 43, 0, 0, 86, 73, 0, 0, 14, 0, 17, 0, 0, 86, 78, 0, 7, 5, 6, 4, 0, ++ 0, 86, 85, 0, 7, 43, 13, 49, 0, 16, 87, 70, 0, 7, 33, 13, 43, 0, 16, ++ 87, 83, 0, 7, 43, 12, 49, 0, 16, 88, 48, 0, 3, 20, 0, 21, 0, 0, 88, ++ 49, 0, 7, 41, 6, 47, 0, 0, 88, 50, 0, 21, 3, 6, 2, 0, 0, 88, 51, 0, ++ 7, 33, 6, 35, 0, 32, 88, 65, 0, 7, 3, 255, 255, 240, 0, 88, 66, 0, 0, ++ 23, 255, 255, 240, 0, 88, 82, 0, 1, 54, 3, 63, 0, 0, 88, 83, 0, 13, ++ 4, 11, 1, 0, 32, 88, 84, 0, 12, 8, 10, 7, 0, 32, 88, 85, 0, 9, 37, 7, ++ 37, 0, 32, 88, 86, 0, 11, 8, 9, 7, 0, 32, 88, 87, 0, 22, 35, 25, 33, ++ 0, 32, 88, 88, 0, 10, 33, 255, 255, 240, 32, 88, 89, 0, 7, 33, 6, 43, ++ 0, 32, 88, 90, 0, 14, 8, 255, 255, 240, 32, 89, 49, 0, 0, 14, 255, 255, ++ 240, 16, 89, 50, 0, 0, 14, 255, 255, 240, 16, 89, 51, 0, 0, 14, 255, ++ 255, 240, 16, 89, 52, 0, 0, 14, 255, 255, 240, 16, 89, 53, 0, 0, 14, ++ 255, 255, 240, 16, 89, 54, 0, 0, 14, 255, 255, 240, 16, 89, 55, 0, 0, ++ 14, 255, 255, 240, 16, 89, 69, 0, 7, 45, 13, 51, 0, 16, 89, 84, 0, 7, ++ 33, 6, 43, 0, 0, 89, 89, 0, 18, 8, 255, 255, 240, 0, 90, 49, 0, 18, ++ 8, 255, 255, 240, 16, 90, 50, 0, 18, 8, 255, 255, 240, 16, 90, 51, 0, ++ 18, 8, 255, 255, 240, 16, 90, 52, 0, 18, 8, 255, 255, 240, 16, 90, 53, ++ 0, 18, 8, 255, 255, 240, 16, 90, 54, 0, 18, 8, 255, 255, 240, 16, 90, ++ 55, 0, 18, 8, 255, 255, 240, 16, 90, 56, 0, 18, 8, 255, 255, 240, 16, ++ 90, 57, 0, 18, 8, 255, 255, 240, 16, 90, 65, 0, 7, 33, 6, 43, 0, 32, ++ 90, 77, 0, 19, 41, 22, 47, 0, 0, 90, 87, 0, 7, 33, 14, 39, 0, 48, 10, ++ 2, 255, 3, 17, 19, 24, 28, 30, 49, 0, 4, 56, 19, 1, 70, 27, 1, 58, 34, ++ 1, 70, 49, 1, 14, 0, 255, 2, 23, 19, 23, 49, 2, 2, 84, 19, 1, 84, 49, ++ 1, 14, 0, 255, 2, 23, 19, 23, 49, 0, 2, 66, 19, 1, 66, 49, 1, 23, 1, ++ 1, 4, 23, 19, 17, 28, 23, 38, 30, 49, 2, 2, 84, 22, 1, 84, 49, 1, 24, ++ 1, 5, 2, 23, 23, 30, 49, 0, 4, 56, 19, 1, 58, 28, 1, 60, 39, 1, 70, ++ 49, 1, 15, 1, 255, 1, 23, 20, 2, 1, 84, 20, 1, 15, 1, 255, 1, 23, 20, ++ 2, 1, 84, 20, 1, 20, 1, 255, 2, 21, 20, 21, 49, 2, 2, 84, 20, 1, 84, ++ 49, 1, 0, 0, 255, 0, 0, 0, 19, 1, 255, 2, 23, 20, 23, 48, 0, 2, 66, ++ 20, 1, 66, 48, 1, 20, 1, 255, 2, 23, 20, 20, 49, 0, 2, 66, 20, 1, 64, ++ 49, 1, 20, 1, 255, 2, 23, 20, 20, 49, 2, 2, 92, 20, 1, 80, 49, 1, 9, ++ 0, 255, 1, 23, 19, 2, 1, 84, 19, 1, 9, 0, 255, 1, 20, 19, 0, 1, 56, ++ 19, 1, 11, 2, 255, 3, 17, 19, 24, 30, 30, 49, 0, 5, 56, 19, 1, 70, 27, ++ 1, 58, 34, 1, 68, 38, 1, 70, 49, 1, 13, 2, 255, 3, 17, 19, 24, 31, 30, ++ 49, 0, 5, 56, 19, 1, 78, 27, 1, 64, 34, 1, 68, 36, 1, 78, 43, 1, 26, ++ 1, 255, 2, 23, 20, 30, 40, 2, 2, 84, 23, 1, 112, 49, 1, 14, 2, 255, ++ 2, 17, 19, 30, 49, 0, 2, 58, 19, 1, 80, 49, 1, 27, 0, 255, 1, 30, 26, ++ 0, 1, 120, 26, 1, 26, 2, 255, 1, 30, 25, 0, 1, 120, 25, 1, 10, 2, 2, ++ 3, 17, 19, 24, 28, 30, 49, 0, 4, 56, 19, 1, 70, 27, 1, 58, 34, 1, 70, ++ 49, 1, 10, 2, 255, 3, 17, 19, 24, 28, 30, 49, 0, 4, 56, 19, 1, 66, 27, ++ 1, 60, 34, 1, 66, 49, 1, 20, 2, 255, 2, 23, 20, 33, 49, 2, 2, 84, 20, ++ 1, 84, 49, 1, 10, 2, 1, 3, 17, 19, 24, 28, 30, 49, 0, 4, 56, 19, 1, ++ 70, 27, 1, 58, 34, 1, 70, 49, 1, 32, 2, 255, 1, 30, 38, 2, 1, 84, 38, ++ 1, 29, 2, 255, 2, 21, 28, 30, 49, 0, 2, 60, 28, 1, 68, 49, 1, 29, 1, ++ 255, 2, 30, 28, 30, 49, 2, 2, 112, 28, 1, 112, 49, 1, 5, 2, 0, 2, 23, ++ 18, 23, 19, 2, 2, 84, 18, 1, 84, 19, 1, 7, 2, 0, 2, 23, 18, 23, 20, ++ 2, 2, 84, 18, 1, 84, 20, 1, 8, 2, 0, 3, 23, 18, 23, 20, 30, 38, 2, 2, ++ 84, 18, 1, 84, 22, 1, 6, 1, 255, 4, 14, 18, 14, 19, 20, 29, 20, 48, ++ 0, 4, 48, 18, 1, 48, 19, 1, 60, 29, 1, 60, 48, 1, 14, 0, 255, 2, 17, ++ 19, 30, 49, 0, 2, 56, 19, 1, 68, 49, 1, 12, 2, 255, 3, 17, 19, 24, 31, ++ 30, 50, 0, 6, 62, 19, 1, 90, 27, 1, 80, 35, 1, 90, 41, 1, 86, 45, 1, ++ 118, 50, 1, 22, 1, 255, 2, 23, 20, 30, 38, 2, 1, 84, 22, 1, 25, 1, 255, ++ 1, 23, 24, 2, 1, 84, 24, 1, 14, 0, 6, 2, 17, 19, 20, 49, 0, 2, 56, 19, ++ 1, 60, 49, 1, 18, 1, 255, 2, 20, 20, 20, 44, 2, 2, 72, 20, 1, 72, 44, ++ 1, 22, 1, 255, 2, 23, 20, 30, 38, 2, 1, 84, 22, 1, 22, 2, 255, 1, 20, ++ 22, 0, 2, 62, 20, 1, 66, 38, 1, 16, 2, 255, 2, 20, 20, 28, 38, 2, 2, ++ 84, 20, 1, 112, 38, 1, 4, 0, 255, 1, 23, 18, 2, 1, 84, 18, 1, 20, 1, ++ 255, 2, 23, 20, 30, 49, 2, 2, 84, 20, 1, 84, 49, 1, 21, 1, 255, 3, 23, ++ 20, 30, 37, 30, 46, 2, 2, 84, 21, 1, 84, 46, 1, 26, 1, 255, 3, 23, 20, ++ 24, 39, 30, 49, 2, 1, 84, 25, 1, 26, 1, 255, 3, 23, 20, 24, 39, 30, ++ 49, 2, 1, 84, 25, 1, 17, 1, 255, 2, 23, 20, 30, 40, 2, 2, 84, 20, 1, ++ 112, 40, 1, 34, 0, 255, 1, 27, 49, 2, 1, 84, 49, 1, 34, 0, 255, 1, 30, ++ 49, 0, 1, 78, 49, 1, 14, 0, 255, 2, 27, 19, 27, 49, 2, 2, 84, 19, 1, ++ 84, 49, 1, 34, 0, 255, 1, 27, 49, 2, 1, 84, 49, 1, 34, 0, 255, 1, 20, ++ 49, 2, 1, 76, 49, 1, 33, 0, 255, 1, 20, 48, 2, 1, 76, 48, 1, 31, 2, ++ 255, 2, 17, 33, 30, 49, 0, 2, 68, 33, 1, 68, 49, 1, 30, 2, 255, 3, 17, ++ 33, 24, 38, 30, 49, 0, 3, 56, 33, 1, 68, 38, 1, 68, 49, 1, 28, 2, 255, ++ 3, 17, 28, 24, 38, 30, 49, 0, 3, 56, 28, 1, 58, 38, 1, 62, 49, 1, 33, ++ 0, 255, 1, 27, 48, 2, 1, 84, 48, 1, 0, 0, 3, 0, 0, 0, 120, 11, 0, 0, ++ 16, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1, 18, ++ 1, 255, 1, 52, 1, 14, 1, 15, 3, 28, 39, 49, 2, 19, 49, 166, 169, 0, ++ 0 ++}; ++const resource_hnd_t wifi_firmware_clm_blob = { RESOURCE_IN_MEMORY, 7222, {.mem = { (const char *) wifi_firmware_clm_blob_image_data }}}; ++ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h +new file mode 100644 +index 0000000000..01bad9226f +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h +@@ -0,0 +1,30 @@ ++/* ++ * Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved ++ * SPDX-License-Identifier: LicenseRef-PBL ++ * ++ * This file and the related binary are licensed under the ++ * Permissive Binary License, Version 1.0 (the "License"); ++ * you may not use these files except in compliance with the License. ++ * ++ * You may obtain a copy of the License here: ++ * LICENSE-permissive-binary-license-1.0.txt and at ++ * https://www.mbed.com/licenses/PBL-1.0 ++ * ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++/* Automatically generated file - this comment ensures resources.h file creation */ ++/* Auto-generated header file. Do not edit */ ++#ifndef INCLUDED_RESOURCES_H_ ++#define INCLUDED_RESOURCES_H_ ++#include "wiced_resource.h" ++#include "wiced_filesystem.h" ++ ++extern wiced_filesystem_t resource_fs_handle; ++ ++extern const resource_hnd_t wifi_firmware_image; ++extern const unsigned char wifi_firmware_image_data[421098]; ++extern const resource_hnd_t wifi_firmware_clm_blob; ++extern const unsigned char wifi_firmware_clm_blob_image_data[7222]; ++ ++#endif /* ifndef INCLUDED_RESOURCES_H_ */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h +new file mode 100644 +index 0000000000..3f2279c2be +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h +@@ -0,0 +1,87 @@ ++/* ++ * Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved ++ * SPDX-License-Identifier: LicenseRef-PBL ++ * ++ * This file and the related binary are licensed under the ++ * Permissive Binary License, Version 1.0 (the "License"); ++ * you may not use these files except in compliance with the License. ++ * ++ * You may obtain a copy of the License here: ++ * LICENSE-permissive-binary-license-1.0.txt and at ++ * https://www.mbed.com/licenses/PBL-1.0 ++ * ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using ++ * Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019 ++ * # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity ++ */ ++ ++#ifndef INCLUDED_NVRAM_IMAGE_H_ ++#define INCLUDED_NVRAM_IMAGE_H_ ++ ++#include ++#include ++#include "generated_mac_address.txt" ++ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * Character array of NVRAM image ++ * ++ * Generated from cyw94343cy8ckit-062-wifi-bt.txt ++ */ ++ ++static const char wifi_nvram_image[] = ++ "manfid=0x2d0" "\x00" ++ "prodid=0x0726" "\x00" ++ "vendid=0x14e4" "\x00" ++ "devid=0x43e2" "\x00" ++ "boardtype=0x0726" "\x00" ++ "boardrev=0x1202" "\x00" ++ "boardnum=22" "\x00" ++ NVRAM_GENERATED_MAC_ADDRESS "\x00" ++ "sromrev=11" "\x00" ++ "boardflags=0x00404201" "\x00" ++ "boardflags3=0x04000000" "\x00" ++ "xtalfreq=37400" "\x00" ++ "nocrc=1" "\x00" ++ "ag0=0" "\x00" ++ "aa2g=1" "\x00" ++ "ccode=ALL" "\x00" ++ "extpagain2g=0" "\x00" ++ "pa2ga0=-145,6667,-751" "\x00" ++ "AvVmid_c0=0x0,0xc8" "\x00" ++ "cckpwroffset0=2" "\x00" ++ "maxp2ga0=74" "\x00" ++ "cckbw202gpo=0" "\x00" ++ "legofdmbw202gpo=0x88888888" "\x00" ++ "mcsbw202gpo=0xaaaaaaaa" "\x00" ++ "propbw202gpo=0xdd" "\x00" ++ "ofdmdigfilttype=18" "\x00" ++ "ofdmdigfilttypebe=18" "\x00" ++ "papdmode=1" "\x00" ++ "papdvalidtest=1" "\x00" ++ "pacalidx2g=48" "\x00" ++ "papdepsoffset=-22" "\x00" ++ "papdendidx=58" "\x00" ++ "il0"NVRAM_GENERATED_MAC_ADDRESS "\x00" ++ "wl0id=0x431b" "\x00" ++ "muxenab=0x10" "\x00" ++ "\x00\x00"; ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */ ++ ++#error Wi-Fi NVRAM image included twice ++ ++#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */ +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/whd_config.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/whd_config.h +new file mode 100644 +index 0000000000..4b320b9dee +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/whd_config.h +@@ -0,0 +1,61 @@ ++/* ++ * Copyright 2020 Arduino SA ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++/** @file ++ * Provides configuration for WHD driver on Arduino Portenta H7 ++ */ ++ ++#ifndef __WHD_CONFIG__ ++#define __WHD_CONFIG__ ++ ++#include "whd_types.h" ++#include "stm32h7xx_hal.h" ++#include ++ ++/* disable WPRINT_MACRO */ ++#define WHD_PRINT_DISABLE ++ ++/* please define your configuration , either SDIO or SPI */ ++#define CY_WHD_CONFIG_USE_SDIO ++//#define CY_WHD_CONFIG_USE_SPI ++ ++/* select resource implementation */ ++#define USES_RESOURCE_GENERIC_FILESYSTEM ++ ++/* if not defined default value is 2 */ ++#define CY_WIFI_OOB_INTR_PRIORITY 0 ++ ++#define CYBSP_WIFI_HOST_WAKE_IRQ_EVENT CYHAL_GPIO_IRQ_FALL ++#define CYBSP_WIFI_HOST_WAKE CYBSP_SDIO_OOB_IRQ ++ ++#define BSP_LED1 {GPIOK,{.Pin= GPIO_PIN_5 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} ++#define BSP_LED2 {GPIOK,{.Pin= GPIO_PIN_6 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} ++#define BSP_LED3 {GPIOK,{.Pin= GPIO_PIN_7 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} ++ ++/* power pin */ ++#define WIFI_WL_REG_ON {GPIOB,{.Pin= GPIO_PIN_10, .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} ++//#define WIFI_32K_CLK {GPIOA,{.Pin= GPIO_PIN_8, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW , .Alternate = GPIO_AF0_MCO}} ++ ++#define WIFI_SDIO_CMD {GPIOD,{.Pin= GPIO_PIN_2 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} ++#define WIFI_SDIO_CLK {GPIOC,{.Pin= GPIO_PIN_12 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} ++#define WIFI_SDIO_D0 {GPIOC,{.Pin= GPIO_PIN_8, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} ++#define WIFI_SDIO_D1 {GPIOC,{.Pin= GPIO_PIN_9, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} ++#define WIFI_SDIO_D2 {GPIOC,{.Pin= GPIO_PIN_10, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} ++#define WIFI_SDIO_D3 {GPIOC,{.Pin= GPIO_PIN_11 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} ++#define WIFI_SDIO_OOB_IRQ {GPIOI,{.Pin= GPIO_PIN_8 , .Mode = GPIO_MODE_IT_FALLING , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH}} ++ ++#endif +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PeripheralPins.c +new file mode 100644 +index 0000000000..34b73f5f20 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PeripheralPins.c +@@ -0,0 +1,578 @@ ++/* mbed Microcontroller Library ++ * SPDX-License-Identifier: BSD-3-Clause ++ ****************************************************************************** ++ * ++ * Copyright (c) 2016-2020 STMicroelectronics. ++ * All rights reserved. ++ * ++ * This software component is licensed by ST under BSD 3-Clause license, ++ * the "License"; You may not use this file except in compliance with the ++ * License. You may obtain a copy of the License at: ++ * opensource.org/licenses/BSD-3-Clause ++ * ++ ****************************************************************************** ++ * ++ * Automatically generated from STM32CubeMX/db/mcu/STM32H747XIHx.xml ++ */ ++ ++#include "PeripheralPins.h" ++#include "mbed_toolchain.h" ++ ++//============================================================================== ++// Notes ++// ++// - The pins mentioned Px_y_ALTz are alternative possibilities which use other ++// HW peripheral instances. You can use them the same way as any other "normal" ++// pin (i.e. PwmOut pwm(PA_7_ALT0);). These pins are not displayed on the board ++// pinout image on mbed.org. ++// ++// - The pins which are connected to other components present on the board have ++// the comment "Connected to xxx". The pin function may not work properly in this ++// case. These pins may not be displayed on the board pinout image on mbed.org. ++// Please read the board reference manual and schematic for more information. ++// ++// - Warning: pins connected to the default STDIO_UART_TX and STDIO_UART_RX pins are commented ++// See https://os.mbed.com/teams/ST/wiki/STDIO for more information. ++// ++//============================================================================== ++ ++ ++//*** ADC *** ++ ++MBED_WEAK const PinMap PinMap_ADC[] = { ++ {PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_INP16 ++ {PA_0C, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_INP0 ++ {PA_0C_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC2_INP0 ++ {PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC1_INP17 ++ {PA_1C, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_INP1 ++ {PA_1C_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_INP1 ++ {PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_INP14 ++ {PA_2_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_INP14 ++ {PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_INP15 ++ {PA_3_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_INP15 ++ {PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_INP18 ++ {PA_4_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_INP18 ++ {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC1_INP19 ++ {PA_5_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC2_INP19 ++ {PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_INP3 ++ {PA_6_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_INP3 ++ {PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_INP7 ++ {PA_7_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC2_INP7 ++ {PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_INP9 ++ {PB_0_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC2_INP9 ++ {PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_INP5 ++ {PB_1_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_INP5 ++ {PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_INP10 ++ {PC_0_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_INP10 ++ {PC_0_ALT1, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC3_INP10 ++ {PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_INP11 ++ {PC_1_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_INP11 ++ {PC_1_ALT1, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC3_INP11 ++ {PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_INP12 ++ {PC_2_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_INP12 ++ {PC_2_ALT1, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC3_INP12 ++ {PC_2C, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC3_INP0 ++ {PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_INP13 ++ {PC_3_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC2_INP13 ++ {PC_3C, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC3_INP1 ++ {PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_INP4 ++ {PC_4_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_INP4 ++ {PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_INP8 ++ {PC_5_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC2_INP8 ++ {PF_3, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_INP5 ++ {PF_4, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC3_INP9 ++ {PF_5, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_INP4 ++ {PF_6, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC3_INP8 ++ {PF_7, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC3_INP3 ++ {PF_8, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC3_INP7 ++ {PF_9, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC3_INP2 ++ {PF_10, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_INP6 ++ {PF_11, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_INP2 ++ {PF_12, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_INP6 ++ {PF_13, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_INP2 ++ {PF_14, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC2_INP6 ++ {PH_2, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC3_INP13 ++ {PH_3, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC3_INP14 ++ {PH_4, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC3_INP15 ++ {PH_5, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC3_INP16 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_ADC_Internal[] = { ++ {ADC_TEMP, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC3_INP18 ++ {ADC_VREF, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC3_INP19 ++ {ADC_VBAT, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC3_INP17 ++ {NC, NC, 0} ++}; ++ ++//*** DAC *** ++ ++MBED_WEAK const PinMap PinMap_DAC[] = { ++ {PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1 ++ {PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2 ++ {NC, NC, 0} ++}; ++ ++//*** I2C *** ++ ++MBED_WEAK const PinMap PinMap_I2C_SDA[] = { ++ {PB_7, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_7_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_9, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_9_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_11, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PC_9, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PD_13, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PF_0, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PF_15, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PH_5, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PH_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PH_12, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_I2C_SCL[] = { ++ {PA_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PB_6, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_6_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_8, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_8_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_10, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PD_12, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PF_1, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PF_14, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PH_4, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PH_7, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PH_11, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {NC, NC, 0} ++}; ++ ++//*** PWM *** ++ ++// TIM5 cannot be used because already used by the us_ticker ++// TIM2 cannot be used because already used by the us_ticker (DUAL_CORE) ++MBED_WEAK const PinMap PinMap_PWM[] = { ++// {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 ++// {PA_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 ++// {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 ++// {PA_1, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 ++ {PA_1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 1)}, // TIM15_CH1N ++// {PA_2, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 ++// {PA_2, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 ++ {PA_2, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 0)}, // TIM15_CH1 ++// {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 ++// {PA_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 ++ {PA_3, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 2, 0)}, // TIM15_CH2 ++// {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 ++ {PA_5, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 ++ {PA_6_ALT0, PWM_13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 ++ {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PA_7_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 ++ {PA_7_ALT1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PA_7_ALT2, PWM_14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 ++// {PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 ++// {PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 ++// {PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 ++ {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 ++// {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 ++ {PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PB_0_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 ++ {PB_0_ALT1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PB_1_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 ++ {PB_1_ALT1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++// {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 ++ {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 ++ {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 ++ {PB_6, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 ++ {PB_6_ALT0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N ++ {PB_7, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 ++ {PB_7_ALT0, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N ++ {PB_8, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 ++ {PB_8_ALT0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1 ++ {PB_9, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 ++ {PB_9_ALT0, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1 ++// {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 ++// {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 ++ {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PB_14_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PB_14_ALT1, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 1, 0)}, // TIM12_CH1 ++ {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PB_15_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++ {PB_15_ALT1, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 2, 0)}, // TIM12_CH2 ++ {PC_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 ++ {PC_6_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 ++ {PC_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 ++ {PC_7_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PC_8, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 ++ {PC_8_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 ++ {PC_9, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 ++ {PC_9_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4 ++ {PD_12, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 ++ {PD_13, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 ++ {PD_14, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 ++ {PD_15, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 ++ {PE_4, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 1)}, // TIM15_CH1N ++ {PE_5, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 0)}, // TIM15_CH1 ++ {PE_6, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 2, 0)}, // TIM15_CH2 ++ {PE_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PE_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 ++ {PE_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PE_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 ++ {PE_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PE_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 ++ {PE_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 ++ {PF_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1 ++ {PF_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1 ++ {PF_8, PWM_13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 ++ {PF_8_ALT0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N ++ {PF_9, PWM_14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 ++ {PF_9_ALT0, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N ++ {PH_6, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 1, 0)}, // TIM12_CH1 ++ {PH_9, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 2, 0)}, // TIM12_CH2 ++// {PH_10, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 ++// {PH_11, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 ++// {PH_12, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 ++ {PH_13, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PH_14, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PH_15, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++// {PI_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 ++ {PI_2, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4 ++ {PI_5, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 ++ {PI_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PI_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 ++ {PJ_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PJ_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PJ_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PJ_8_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 ++ {PJ_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 ++ {PJ_9_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PJ_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PJ_10_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PJ_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 ++ {PJ_11_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PK_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PK_0_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 ++ {PK_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 ++ {PK_1_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++ {NC, NC, 0} ++}; ++//*** PWM_HRTIM *** ++ ++MBED_WEAK const PinMap PinMap_PWM_HRTIM[] = { ++ {PA_8, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHB, 1)}, // HRTIM_CHB2 ++ {PA_9, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHC, 0)}, // HRTIM_CHC1 ++ {PA_10, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHC, 1)}, // HRTIM_CHC2 ++ {PA_11, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHD, 0)}, // HRTIM_CHD1 ++ {PA_12, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHD, 1)}, // HRTIM_CHD2 ++ {PC_6, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_HRTIM1, CHA, 0)}, // HRTIM_CHA1 ++ {PC_7, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_HRTIM1, CHA, 1)}, // HRTIM_CHA2 ++ {PC_8, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_HRTIM1, CHB, 0)}, // HRTIM_CHB1 ++ {PG_6, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHE, 0)}, // HRTIM_CHE1 ++ {PG_7, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHE, 1)}, // HRTIM_CHE2 ++ {NC, NC, 0} ++}; ++ ++ ++//*** SERIAL *** ++ ++MBED_WEAK const PinMap PinMap_UART_TX[] = { ++ {PA_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PA_2, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_9, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_9_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PA_12, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_UART4)}, ++ {PA_15, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PB_4, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PB_6_ALT0, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_6_ALT1, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART)}, ++ {PB_9, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_13, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_14, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)}, ++ {PC_6, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PC_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PC_10_ALT0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PC_12, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_1, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PD_5, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_8, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PE_1, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_8, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_7, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_14, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PH_13, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PJ_8, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_UART_RX[] = { ++ {PA_1, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PA_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_8, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_10_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PA_11, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_UART4)}, ++ {PB_3, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PB_5, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PB_7_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART)}, ++ {PB_8, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_12, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_15, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)}, ++ {PC_7, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PC_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PC_11_ALT0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PD_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PD_2, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_6, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_9, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PE_0, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_7, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_6, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_9, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PH_14, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PI_9, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PJ_9, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_UART_RTS[] = { ++ {PA_1, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_12, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_12_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PA_15, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_14, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_14_ALT0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PC_8, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_4, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_12, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PD_15, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_9, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_8, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_8, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PG_12, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_UART_CTS[] = { ++ {PA_0, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_11, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_11_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PB_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_13, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_15, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PC_9, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PD_14, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_10, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_9, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_13, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PG_15, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {NC, NC, 0} ++}; ++ ++//*** SPI *** ++ ++MBED_WEAK const PinMap PinMap_SPI_MOSI[] = { ++ {PA_7, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_7_ALT0, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_2, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI3)}, ++ {PB_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PB_5_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI3)}, ++ {PB_5_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_15, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_1, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PD_6, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI3)}, ++ {PD_7, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PE_6, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_14, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_9, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PF_11, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_14, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PI_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PJ_10, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_SPI_MISO[] = { ++ {PA_6, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_6_ALT0, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PB_4_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PB_4_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_14, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_2, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_11, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PE_5, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_13, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_8, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_9, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PG_12, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PH_7, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PI_2, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PJ_11, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_SPI_SCLK[] = { ++ {PA_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_5_ALT0, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++// {PA_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PA_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PB_3, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PB_3_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PB_3_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PD_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PE_2, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_12, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_7, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_11, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PG_13, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PH_6, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PI_1, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PK_0, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_SPI_SSEL[] = { ++ {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_4_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PA_4_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PA_11, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_15_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PA_15_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI6)}, ++ {PB_4, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI2)}, ++ {PB_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PE_4, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_11, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_6, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_8, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PG_10, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PH_5, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PI_0, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PK_1, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++//*** CAN *** ++ ++MBED_WEAK const PinMap PinMap_CAN_RD[] = { ++ {PA_11, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_5, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PB_8, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_12, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PD_0, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PH_14, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PI_9, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_CAN_TD[] = { ++ {PA_12, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_6, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PB_9, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_13, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PD_1, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PH_13, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {NC, NC, 0} ++}; ++ ++//*** QUADSPI *** ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA0[] = { ++ {PC_9, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO0 ++ {PD_11, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO0 ++ {PF_8, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO0 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA1[] = { ++ {PC_10, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO1 ++ {PD_12, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO1 ++ {PF_9, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO1 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA2[] = { ++ {PE_2, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO2 ++ {PF_7, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO2 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA3[] = { ++ {PA_1, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO3 ++ {PD_13, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO3 ++ {PF_6, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO3 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_SCLK[] = { ++ {PB_2, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_CLK ++ {PF_10, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_CLK ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_SSEL[] = { ++ {PB_6, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_NCS ++ {PB_10, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_NCS ++ {PG_6, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_NCS ++ {NC, NC, 0} ++}; ++ ++//*** USBDEVICE *** ++ ++MBED_WEAK const PinMap PinMap_USB_FS[] = { ++// {PA_8, USB_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_SOF ++// {PA_9, USB_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_FS_VBUS ++// {PA_10, USB_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_ID ++ {PA_11, USB_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_DM ++ {PA_12, USB_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_DP ++ {NC, NC, 0} ++}; ++ ++//*** USBDEVICE *** ++ ++MBED_WEAK const PinMap PinMap_USB_HS[] = { ++#if (MBED_CONF_TARGET_USB_SPEED == USE_USB_HS_IN_FS) ++// {PA_4, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_SOF ++ {PB_12, USB_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_ID ++ {PB_13, USB_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS ++ {PB_14, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_DM ++ {PB_15, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_DP ++#else /* MBED_CONF_TARGET_USB_SPEED */ ++ {PA_3, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D0 ++ {PA_5, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_CK ++ {PB_0, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D1 ++ {PB_1, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D2 ++ {PB_5, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D7 ++ {PB_10, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D3 ++ {PB_11, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D4 ++ {PB_12, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D5 ++ {PB_13, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D6 ++ {PC_0, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_STP ++ {PH_4, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_NXT ++ {PI_11, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_DIR ++#endif /* MBED_CONF_TARGET_USB_SPEED */ ++ {NC, NC, 0} ++}; ++ ++ ++#if defined (CORE_CM4) ++void HSEM2_IRQHandler(void) ++{ ++ HAL_HSEM_IRQHandler(); ++} ++#endif +\ No newline at end of file +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h +new file mode 100644 +index 0000000000..97d48334d7 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h +@@ -0,0 +1,356 @@ ++/* mbed Microcontroller Library ++ ******************************************************************************* ++ * Copyright (c) 2018, STMicroelectronics ++ * Copyright (c) 2020, Arduino SA ++ * ++ * SPDX-License-Identifier: BSD-3-Clause ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, ++ * this list of conditions and the following disclaimer. ++ * 2. Redistributions in binary form must reproduce the above copyright notice, ++ * this list of conditions and the following disclaimer in the documentation ++ * and/or other materials provided with the distribution. ++ * 3. Neither the name of STMicroelectronics nor the names of its contributors ++ * may be used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE ++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ++ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ******************************************************************************* ++ */ ++ ++/* MBED TARGET LIST: GIGA */ ++ ++#ifndef MBED_PINNAMES_H ++#define MBED_PINNAMES_H ++ ++#include "cmsis.h" ++#include "PinNamesTypes.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define DUAL_PAD 0xF00 ++ ++typedef enum { ++ ALT0 = 0x100, ++ ALT1 = 0x200, ++ ALT2 = 0x300, ++ ALT3 = 0x400, ++ ALT4 = 0x500, ++} ALTx; ++ ++typedef enum { ++ PA_0 = 0x00, ++ PA_0C = PA_0 | DUAL_PAD, // dual pad ++ PA_0C_ALT0 = PA_0C | ALT0, // same pin used for alternate HW ++ PA_0C_ALT1 = PA_0C | ALT1, // same pin used for alternate HW ++ PA_0C_ALT2 = PA_0C | ALT2, // same pin used for alternate HW ++ PA_1 = 0x01, ++ PA_1C = PA_1 | DUAL_PAD, // dual pad ++ PA_1C_ALT0 = PA_1C | ALT0, // same pin used for alternate HW ++ PA_1_ALT0 = PA_1 | ALT0, // same pin used for alternate HW ++ PA_2 = 0x02, ++ PA_2_ALT0 = PA_2 | ALT0, // same pin used for alternate HW ++ PA_3 = 0x03, ++ PA_3_ALT0 = PA_3 | ALT0, // same pin used for alternate HW ++ PA_4 = 0x04, ++ PA_4_ALT0 = PA_4 | ALT0, // same pin used for alternate HW ++ PA_4_ALT1 = PA_4 | ALT1, // same pin used for alternate HW ++ PA_5 = 0x05, ++ PA_5_ALT0 = PA_5 | ALT0, // same pin used for alternate HW ++ PA_5_ALT1 = PA_5 | ALT1, // same pin used for alternate HW ++ PA_5_ALT2 = PA_5 | ALT2, // same pin used for alternate HW ++ PA_6 = 0x06, ++ PA_6_ALT0 = PA_6 | ALT0, // same pin used for alternate HW ++ PA_7 = 0x07, ++ PA_7_ALT0 = PA_7 | ALT0, // same pin used for alternate HW ++ PA_7_ALT1 = PA_7 | ALT1, // same pin used for alternate HW ++ PA_7_ALT2 = PA_7 | ALT2, // same pin used for alternate HW ++ PA_8 = 0x08, ++ PA_9 = 0x09, ++ PA_9_ALT0 = PA_9 | ALT0, // same pin used for alternate HW ++ PA_10 = 0x0A, ++ PA_10_ALT0 = PA_10 | ALT0, // same pin used for alternate HW ++ PA_11 = 0x0B, ++ PA_11_ALT0 = PA_11 | ALT0, // same pin used for alternate HW ++ PA_12 = 0x0C, ++ PA_12_ALT0 = PA_12 | ALT0, // same pin used for alternate HW ++ PA_13 = 0x0D, ++ PA_14 = 0x0E, ++ PA_15 = 0x0F, ++ PA_15_ALT0 = PA_15 | ALT0, // same pin used for alternate HW ++ PA_15_ALT1 = PA_15 | ALT1, // same pin used for alternate HW ++ PB_0 = 0x10, ++ PB_0_ALT0 = PB_0 | ALT0, // same pin used for alternate HW ++ PB_0_ALT1 = PB_0 | ALT1, // same pin used for alternate HW ++ PB_0_ALT2 = PB_0 | ALT2, // same pin used for alternate HW ++ PB_1 = 0x11, ++ PB_1_ALT0 = PB_1 | ALT0, // same pin used for alternate HW ++ PB_1_ALT1 = PB_1 | ALT1, // same pin used for alternate HW ++ PB_2 = 0x12, ++ PB_3 = 0x13, ++ PB_3_ALT0 = PB_3 | ALT0, // same pin used for alternate HW ++ PB_3_ALT1 = PB_3 | ALT1, // same pin used for alternate HW ++ PB_4 = 0x14, ++ PB_4_ALT0 = PB_4 | ALT0, // same pin used for alternate HW ++ PB_4_ALT1 = PB_4 | ALT1, // same pin used for alternate HW ++ PB_5 = 0x15, ++ PB_5_ALT0 = PB_5 | ALT0, // same pin used for alternate HW ++ PB_5_ALT1 = PB_5 | ALT1, // same pin used for alternate HW ++ PB_6 = 0x16, ++ PB_6_ALT0 = PB_6 | ALT0, // same pin used for alternate HW ++ PB_6_ALT1 = PB_6 | ALT1, // same pin used for alternate HW ++ PB_7 = 0x17, ++ PB_7_ALT0 = PB_7 | ALT0, // same pin used for alternate HW ++ PB_8 = 0x18, ++ PB_8_ALT0 = PB_8 | ALT0, // same pin used for alternate HW ++ PB_9 = 0x19, ++ PB_9_ALT0 = PB_9 | ALT0, // same pin used for alternate HW ++ PB_10 = 0x1A, ++ PB_11 = 0x1B, ++ PB_12 = 0x1C, ++ PB_13 = 0x1D, ++ PB_14 = 0x1E, ++ PB_14_ALT0 = PB_14 | ALT0, // same pin used for alternate HW ++ PB_14_ALT1 = PB_14 | ALT1, // same pin used for alternate HW ++ PB_15 = 0x1F, ++ PB_15_ALT0 = PB_15 | ALT0, // same pin used for alternate HW ++ PB_15_ALT1 = PB_15 | ALT1, // same pin used for alternate HW ++ PC_0 = 0x20, ++ PC_0_ALT0 = PC_0 | ALT0, // same pin used for alternate HW ++ PC_0_ALT1 = PC_0 | ALT1, // same pin used for alternate HW ++ PC_1 = 0x21, ++ PC_1_ALT0 = PC_1 | ALT0, // same pin used for alternate HW ++ PC_1_ALT1 = PC_1 | ALT1, // same pin used for alternate HW ++ PC_1_ALT2 = PC_1 | ALT2, // same pin used for alternate HW ++ PC_1_ALT3 = PC_1 | ALT3, // same pin used for alternate HW ++ PC_1_ALT4 = PC_1 | ALT4, // same pin used for alternate HW ++ PC_2 = 0x22, ++ PC_2C = PC_2 | DUAL_PAD, // dual pad ++ PC_2C_ALT0 = PC_2C | ALT0, // same pin used for alternate HW ++ PC_2_ALT0 = PC_2 | ALT0, // same pin used for alternate HW ++ PC_2_ALT1 = PC_2 | ALT1, // same pin used for alternate HW ++ PC_2_ALT2 = PC_2 | ALT2, // same pin used for alternate HW ++ PC_2_ALT3 = PC_2 | ALT3, // same pin used for alternate HW ++ PC_2_ALT4 = PC_2 | ALT4, // same pin used for alternate HW ++ PC_3 = 0x23, ++ PC_3C = PC_3 | DUAL_PAD, // dual pad ++ PC_3_ALT0 = PC_3 | ALT0, // same pin used for alternate HW ++ PC_3_ALT1 = PC_3 | ALT1, // same pin used for alternate HW ++ PC_3_ALT2 = PC_3 | ALT2, // same pin used for alternate HW ++ PC_4 = 0x24, ++ PC_4_ALT0 = PC_4 | ALT0, // same pin used for alternate HW ++ PC_5 = 0x25, ++ PC_5_ALT0 = PC_5 | ALT0, // same pin used for alternate HW ++ PC_5_ALT1 = PC_5 | ALT1, // same pin used for alternate HW ++ PC_5_ALT2 = PC_5 | ALT2, // same pin used for alternate HW ++ PC_6 = 0x26, ++ PC_6_ALT0 = PC_6 | ALT0, // same pin used for alternate HW ++ PC_7 = 0x27, ++ PC_7_ALT0 = PC_7 | ALT0, // same pin used for alternate HW ++ PC_8 = 0x28, ++ PC_8_ALT0 = PC_8 | ALT0, // same pin used for alternate HW ++ PC_9 = 0x29, ++ PC_9_ALT0 = PC_9 | ALT0, // same pin used for alternate HW ++ PC_10 = 0x2A, ++ PC_10_ALT0 = PC_10 | ALT0, // same pin used for alternate HW ++ PC_11 = 0x2B, ++ PC_11_ALT0 = PC_11 | ALT0, // same pin used for alternate HW ++ PC_12 = 0x2C, ++ PC_13 = 0x2D, ++ PC_14 = 0x2E, ++ PC_15 = 0x2F, ++ PD_0 = 0x30, ++ PD_1 = 0x31, ++ PD_2 = 0x32, ++ PD_3 = 0x33, ++ PD_4 = 0x34, ++ PD_5 = 0x35, ++ PD_6 = 0x36, ++ PD_7 = 0x37, ++ PD_8 = 0x38, ++ PD_9 = 0x39, ++ PD_10 = 0x3A, ++ PD_11 = 0x3B, ++ PD_12 = 0x3C, ++ PD_13 = 0x3D, ++ PD_14 = 0x3E, ++ PD_15 = 0x3F, ++ PE_0 = 0x40, ++ PE_1 = 0x41, ++ PE_2 = 0x42, ++ PE_3 = 0x43, ++ PE_4 = 0x44, ++ PE_5 = 0x45, ++ PE_6 = 0x46, ++ PE_7 = 0x47, ++ PE_8 = 0x48, ++ PE_9 = 0x49, ++ PE_10 = 0x4A, ++ PE_11 = 0x4B, ++ PE_12 = 0x4C, ++ PE_13 = 0x4D, ++ PE_14 = 0x4E, ++ PE_15 = 0x4F, ++ PF_0 = 0x50, ++ PF_1 = 0x51, ++ PF_2 = 0x52, ++ PF_3 = 0x53, ++ PF_4 = 0x54, ++ PF_4_ALT0 = PF_4 | ALT0, // same pin used for alternate HW ++ PF_5 = 0x55, ++ PF_6 = 0x56, ++ PF_6_ALT0 = PF_6 | ALT0, // same pin used for alternate HW ++ PF_7 = 0x57, ++ PF_8 = 0x58, ++ PF_8_ALT0 = PF_8 | ALT0, // same pin used for alternate HW ++ PF_9 = 0x59, ++ PF_9_ALT0 = PF_9 | ALT0, // same pin used for alternate HW ++ PF_10 = 0x5A, ++ PF_10_ALT0 = PF_10 | ALT0, // same pin used for alternate HW ++ PF_11 = 0x5B, ++ PF_12 = 0x5C, ++ PF_12_ALT0 = PF_12 | ALT0, // same pin used for alternate HW ++ PF_13 = 0x5D, ++ PF_14 = 0x5E, ++ PF_14_ALT0 = PF_14 | ALT0, // same pin used for alternate HW ++ PF_15 = 0x5F, ++ PG_0 = 0x60, ++ PG_1 = 0x61, ++ PG_2 = 0x62, ++ PG_3 = 0x63, ++ PG_4 = 0x64, ++ PG_5 = 0x65, ++ PG_6 = 0x66, ++ PG_7 = 0x67, ++ PG_8 = 0x68, ++ PG_9 = 0x69, ++ PG_10 = 0x6A, ++ PG_11 = 0x6B, ++ PG_12 = 0x6C, ++ PG_13 = 0x6D, ++ PG_14 = 0x6E, ++ PG_15 = 0x6F, ++ PH_0 = 0x70, ++ PH_1 = 0x71, ++ PH_2 = 0x72, ++ PH_3 = 0x73, ++ PH_3_ALT0 = PH_3 | ALT0, // same pin used for alternate HW ++ PH_4 = 0x74, ++ PH_4_ALT0 = PH_4 | ALT0, // same pin used for alternate HW ++ PH_5 = 0x75, ++ PH_5_ALT0 = PH_5 | ALT0, // same pin used for alternate HW ++ PH_6 = 0x76, ++ PH_7 = 0x77, ++ PH_8 = 0x78, ++ PH_9 = 0x79, ++ PH_10 = 0x7A, ++ PH_11 = 0x7B, ++ PH_12 = 0x7C, ++ PH_13 = 0x7D, ++ PH_14 = 0x7E, ++ PH_15 = 0x7F, ++ PI_0 = 0x80, ++ PI_1 = 0x81, ++ PI_2 = 0x82, ++ PI_3 = 0x83, ++ PI_4 = 0x84, ++ PI_5 = 0x85, ++ PI_6 = 0x86, ++ PI_7 = 0x87, ++ PI_8 = 0x88, ++ PI_9 = 0x89, ++ PI_10 = 0x8A, ++ PI_11 = 0x8B, ++ PI_12 = 0x8C, ++ PI_13 = 0x8D, ++ PI_14 = 0x8E, ++ PI_15 = 0x8F, ++ PJ_0 = 0x90, ++ PJ_1 = 0x91, ++ PJ_2 = 0x92, ++ PJ_3 = 0x93, ++ PJ_4 = 0x94, ++ PJ_5 = 0x95, ++ PJ_6 = 0x96, ++ PJ_7 = 0x97, ++ PJ_8 = 0x98, ++ PJ_8_ALT0 = PJ_8 | ALT0, // same pin used for alternate HW ++ PJ_9 = 0x99, ++ PJ_9_ALT0 = PJ_9 | ALT0, // same pin used for alternate HW ++ PJ_10 = 0x9A, ++ PJ_10_ALT0 = PJ_10 | ALT0, // same pin used for alternate HW ++ PJ_11 = 0x9B, ++ PJ_11_ALT0 = PJ_11 | ALT0, // same pin used for alternate HW ++ PJ_12 = 0x9C, ++ PJ_13 = 0x9D, ++ PJ_14 = 0x9E, ++ PJ_15 = 0x9F, ++ PK_0 = 0xA0, ++ PK_0_ALT0 = PK_0 | ALT0, // same pin used for alternate HW ++ PK_1 = 0xA1, ++ PK_1_ALT0 = PK_1 | ALT0, // same pin used for alternate HW ++ PK_2 = 0xA2, ++ PK_3 = 0xA3, ++ PK_4 = 0xA4, ++ PK_5 = 0xA5, ++ PK_6 = 0xA6, ++ PK_7 = 0xA7, ++ ++ ADC_TEMP = 0xF0, // Internal pin virtual value ++ ADC_VREF = 0xF1, // Internal pin virtual value ++ ADC_VBAT = 0xF2, // Internal pin virtual value ++ ++ // Not connected ++ NC = (int)0xFFFFFFFF, ++ ++ CONSOLE_TX = NC, ++ CONSOLE_RX = NC, ++ ++ WL_REG_ON = NC, ++ WL_HOST_WAKE = NC, ++ WL_SDIO_0 = NC, ++ WL_SDIO_1 = NC, ++ WL_SDIO_2 = NC, ++ WL_SDIO_3 = NC, ++ WL_SDIO_CMD = NC, ++ WL_SDIO_CLK = NC, ++ ++ CYBSP_BT_UART_RX = NC, ++ CYBSP_BT_UART_TX = NC, ++ CYBSP_BT_UART_RTS = NC, ++ CYBSP_BT_UART_CTS = NC, ++ ++ CYBSP_BT_POWER = NC, ++ CYBSP_BT_HOST_WAKE = NC, ++ CYBSP_BT_DEVICE_WAKE = NC, ++ ++ /**** QSPI FLASH pins ****/ ++ QSPI_FLASH1_IO0 = NC, ++ QSPI_FLASH1_IO1 = NC, ++ QSPI_FLASH1_IO2 = NC, ++ QSPI_FLASH1_IO3 = NC, ++ QSPI_FLASH1_SCK = NC, ++ QSPI_FLASH1_CSN = NC ++ ++} PinName; ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/targets/targets.json b/targets/targets.json +index dac2c94ddc..9a12422336 100644 +--- a/targets/targets.json ++++ b/targets/targets.json +@@ -3711,23 +3711,49 @@ + ], + "device_name": "STM32H747XIHx" + }, +- "PORTENTA_H7_M4": { +- "inherits": ["PORTENTA_H7"], +- "core": "Cortex-M4F", +- "mbed_rom_start": "0x08100000", +- "mbed_rom_size" : "0x100000", +- "mbed_ram_start": "0x10000000", +- "mbed_ram_size" : "0x48000", +- "extra_labels_add": [ +- "STM32H747xI_CM4" +- ], ++ "GENERIC_STM32H747_M4": { ++ "inherits": ["MCU_STM32H747xI_CM4"], ++ "config": { ++ "usb_speed": { ++ "help": "USE_USB_OTG_FS or USE_USB_OTG_HS or USE_USB_HS_IN_FS", ++ "value": "USE_USB_OTG_HS" ++ } ++ }, + "macros_add": [ ++ "MBEDTLS_FS_IO", ++ "MBEDTLS_SHA1_C", ++ "CM4_BOOT_BY_APPLICATION", + "CORE_CM4", +- "MBED_MPU_CUSTOM" ++ "MBED_MPU_CUSTOM", ++ "CYW43XXX_UNBUFFERED_UART" + ], + "device_has_remove": [ + "MPU" +- ] ++ ], ++ "components_add": [ ++ "QSPIF", ++ "WHD", ++ "4343W_FS", ++ "CYW43XXX" ++ ], ++ "device_has_add": [ ++ "USBDEVICE", ++ "QSPI" ++ ], ++ "extra_labels_add": [ ++ "CORDIO", ++ "GENERIC_STM32H747_M4" ++ ], ++ "features": [ ++ "BLE" ++ ], ++ "overrides": { ++ "system_power_supply": "PWR_LDO_SUPPLY", ++ "clock_source": "USE_PLL_HSI", ++ "lse_available": 0, ++ "lpticker_delay_ticks": 0, ++ "i2c_timing_value_algo": true ++ } + }, + "PORTENTA_X8": { + "inherits": ["MCU_STM32H747xI_CM4"], +-- +2.42.0 + diff --git a/patches/0214-stm32h7-adc-use-CLKP-as-clock-source.patch b/patches/0214-stm32h7-adc-use-CLKP-as-clock-source.patch new file mode 100644 index 000000000..9b327a7aa --- /dev/null +++ b/patches/0214-stm32h7-adc-use-CLKP-as-clock-source.patch @@ -0,0 +1,49 @@ +From 10ac121c7e63d7abb856ec795b124dedf8dd9f49 Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Thu, 2 Nov 2023 13:49:35 +0100 +Subject: [PATCH] stm32h7: adc: use CLKP as clock source + +Fixes analogRead() interferring with DSI/SDRAM +--- + .../TARGET_STM32H7/analogin_device.c | 25 +------------------ + 1 file changed, 1 insertion(+), 24 deletions(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c b/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c +index be16b16cda..8b617e307a 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c ++++ b/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c +@@ -36,30 +36,7 @@ void analogin_pll_configuration(void) + + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; +- if(__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI) { +- PeriphClkInitStruct.PLL2.PLL2M = 16; +- PeriphClkInitStruct.PLL2.PLL2N = 120; +- } else { +- #if HSE_VALUE==8000000 +- PeriphClkInitStruct.PLL2.PLL2M = 2; +- PeriphClkInitStruct.PLL2.PLL2N = 120; +- #elif HSE_VALUE==16000000 +- PeriphClkInitStruct.PLL2.PLL2M = 2; +- PeriphClkInitStruct.PLL2.PLL2N = 60; +- #elif HSE_VALUE==25000000 +- PeriphClkInitStruct.PLL2.PLL2M = 5; +- PeriphClkInitStruct.PLL2.PLL2N = 96; +- #else +- error("HSE not configured properly"); +- #endif +- } +- PeriphClkInitStruct.PLL2.PLL2P = 3; +- PeriphClkInitStruct.PLL2.PLL2Q = 4; +- PeriphClkInitStruct.PLL2.PLL2R = 2; +- PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_1; +- PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; +- PeriphClkInitStruct.PLL2.PLL2FRACN = 0; +- PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; ++ PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_CLKP; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + error("analogin_init HAL_RCCEx_PeriphCLKConfig"); + } +-- +2.42.0 + diff --git a/patches/0215-Gemalto-Cinterion-Cellular-Disable-urcs-while-readin.patch b/patches/0215-Gemalto-Cinterion-Cellular-Disable-urcs-while-readin.patch new file mode 100644 index 000000000..b0ba08c8e --- /dev/null +++ b/patches/0215-Gemalto-Cinterion-Cellular-Disable-urcs-while-readin.patch @@ -0,0 +1,109 @@ +From ae470a5d61a27ec11fea588fa53a1f4f1ddac1cb Mon Sep 17 00:00:00 2001 +From: pennam +Date: Tue, 7 Nov 2023 10:38:21 +0100 +Subject: [PATCH 215/221] Gemalto Cinterion Cellular: Disable urcs while + reading + +--- + .../GEMALTO_CINTERION_CellularStack.cpp | 23 +++++++++++-------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp +index 33a73bf9a3..fc2e8985d7 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp +@@ -524,6 +524,9 @@ sisw_retry: + return (_at.get_last_error() == NSAPI_ERROR_OK) ? accept_len : NSAPI_ERROR_DEVICE_ERROR; + } + ++#define DISABLE_URCs _at.at_cmd_discard("^SCFG", "=", "%s%s","Tcp/WithURCs","off") ++#define RESTORE_URCs_AND_RETURN(ret) do { _at.at_cmd_discard("^SCFG", "=", "%s%s","Tcp/WithURCs","on"); return ret; } while(0) ++ + nsapi_size_or_error_t GEMALTO_CINTERION_CellularStack::socket_recvfrom_impl(CellularSocket *socket, SocketAddress *address, + void *buffer, nsapi_size_t size) + { +@@ -531,13 +534,15 @@ nsapi_size_or_error_t GEMALTO_CINTERION_CellularStack::socket_recvfrom_impl(Cell + // open on the modem, assert here to catch a programming error + MBED_ASSERT(socket->id != -1); + ++ DISABLE_URCs; ++ + // we must use this flag, otherwise ^SISR URC can come while we are reading response and there is + // no way to detect if that is really an URC or response + if (!socket->pending_bytes) { + _at.process_oob(); // check for ^SISR URC + if (!socket->pending_bytes) { + tr_debug("Socket %d recv would block", socket->id); +- return NSAPI_ERROR_WOULD_BLOCK; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_WOULD_BLOCK); + } + } + +@@ -552,7 +557,7 @@ sisr_retry: + _at.resp_start("^SISR:"); + if (!_at.info_resp()) { + tr_error("Socket %d not responding", socket->id); +- return NSAPI_ERROR_DEVICE_ERROR; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_DEVICE_ERROR); + } + + int socket_id = _at.read_int(); +@@ -564,24 +569,24 @@ sisr_retry: + goto sisr_retry; + } + tr_error("Socket recvfrom id %d != %d", socket_id, socket->id); +- return NSAPI_ERROR_DEVICE_ERROR; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_DEVICE_ERROR); + } + + nsapi_size_or_error_t len = _at.read_int(); + if (len == 0) { + tr_warn("Socket %d no data", socket->id); + _at.resp_stop(); +- return NSAPI_ERROR_WOULD_BLOCK; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_WOULD_BLOCK); + } + if (len == -1) { + if (GEMALTO_CINTERION::get_module() == GEMALTO_CINTERION::ModuleTX62 && _at.get_last_read_error() == -2) { + _at.process_oob(); + tr_error("Socket %d recvfrom finished!", socket->id); + socket->pending_bytes = 0; +- return NSAPI_ERROR_OK; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_OK); + } + tr_error("Socket %d recvfrom failed!", socket->id); +- return NSAPI_ERROR_DEVICE_ERROR; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_DEVICE_ERROR); + } + if (len >= (nsapi_size_or_error_t)size) { + len = (nsapi_size_or_error_t)size; +@@ -606,7 +611,7 @@ sisr_retry: + int len = _at.read_bytes(at_buf + ip_len, 1); + if (len <= 0) { + tr_error("Socket %d recvfrom addr (len %d)", socket->id, ip_len); +- return NSAPI_ERROR_DEVICE_ERROR; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_DEVICE_ERROR); + } + ip_len += len; + } while (ip_len < ip_address_len && at_buf[ip_len - 2] != '\r' && at_buf[ip_len - 1] != '\n'); +@@ -629,7 +634,7 @@ sisr_retry: + int ip_len = _at.read_string(ip_address, sizeof(ip_address)); + if (ip_len <= 0) { + tr_error("Socket %d recvfrom addr (len %d)", socket->id, ip_len); +- return NSAPI_ERROR_DEVICE_ERROR; ++ RESTORE_URCs_AND_RETURN(NSAPI_ERROR_DEVICE_ERROR); + } + } + +@@ -671,7 +676,7 @@ sisr_retry: + + _at.resp_stop(); + +- return (_at.get_last_error() == NSAPI_ERROR_OK) ? (recv_len ? recv_len : NSAPI_ERROR_WOULD_BLOCK) : NSAPI_ERROR_DEVICE_ERROR; ++ RESTORE_URCs_AND_RETURN((_at.get_last_error() == NSAPI_ERROR_OK) ? (recv_len ? recv_len : NSAPI_ERROR_WOULD_BLOCK) : NSAPI_ERROR_DEVICE_ERROR); + } + + // setup internet connection profile for sockets +-- +2.42.0 + diff --git a/patches/0216-AT_CellularContext-Fix-SCFG-commands-to-configure-ba.patch b/patches/0216-AT_CellularContext-Fix-SCFG-commands-to-configure-ba.patch new file mode 100644 index 000000000..656fabd77 --- /dev/null +++ b/patches/0216-AT_CellularContext-Fix-SCFG-commands-to-configure-ba.patch @@ -0,0 +1,49 @@ +From 8dd642cb19e16ae9169fa52f26f4b1a6abc489d8 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Tue, 7 Nov 2023 14:10:31 +0100 +Subject: [PATCH 216/221] AT_CellularContext: Fix ^SCFG commands to configure + bands and URCs + +--- + .../source/framework/AT/AT_CellularContext.cpp | 15 +++++---------- + 1 file changed, 5 insertions(+), 10 deletions(-) + +diff --git a/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp b/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp +index 087846e9b5..e876e384c9 100644 +--- a/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp ++++ b/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp +@@ -452,26 +452,21 @@ void AT_CellularContext::enable_access_technology() + { + case CATM1: + _at.at_cmd_discard("^SXRAT", "=","%d", _rat); +- _at.cmd_start_stop("^SCFG", "=","%s%s", "Radio/Band/CatM",buffer); +- _at.resp_start("^SCFG"); +- _at.cmd_start_stop("^SCFG", "=","%s%d%d", "Radio/Band/CatNB",0,0); +- _at.resp_start("^SCFG"); ++ _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatM",buffer); ++ _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatNB",0,0); + break; + + case CATNB: + _at.at_cmd_discard("^SXRAT", "=","%d", _rat); +- _at.cmd_start_stop("^SCFG", "=","%s%s", "Radio/Band/CatNB",buffer); +- _at.resp_start("^SCFG"); +- _at.cmd_start_stop("^SCFG", "=","%s%d%d", "Radio/Band/CatM",0,0); +- _at.resp_start("^SCFG"); ++ _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatNB",buffer); ++ _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatM",0,0); + break; + + default: + break; + } + +- _at.cmd_start_stop("^SCFG", "=", "%s%s", "Tcp/withURCs", "on"); +- _at.resp_start("^SCFG"); ++ _at.at_cmd_discard("^SCFG", "=", "%s%s", "Tcp/withURCs", "on"); + free(buffer); + + } +-- +2.42.0 + diff --git a/patches/0217-AT_CellularContext-move-enable_access_technology-at-.patch b/patches/0217-AT_CellularContext-move-enable_access_technology-at-.patch new file mode 100644 index 000000000..233e71ddf --- /dev/null +++ b/patches/0217-AT_CellularContext-move-enable_access_technology-at-.patch @@ -0,0 +1,123 @@ +From 822f1b2b855afd1f332dc3c8e490c1f7b08923b5 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 10 Nov 2023 10:30:12 +0100 +Subject: [PATCH 217/221] AT_CellularContext: move enable_access_technology() + at commands into GEMALTO_CINTERION_CellularContext + +--- + .../framework/AT/AT_CellularContext.h | 4 +-- + .../framework/AT/AT_CellularContext.cpp | 25 +---------------- + .../GEMALTO_CINTERION_CellularContext.cpp | 28 +++++++++++++++++++ + .../GEMALTO_CINTERION_CellularContext.h | 1 + + 4 files changed, 32 insertions(+), 26 deletions(-) + +diff --git a/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h b/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h +index eb3bf5afdd..2f68f1f97b 100644 +--- a/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h ++++ b/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h +@@ -135,8 +135,6 @@ private: + + PinName _dcd_pin; + bool _active_high; +- RadioAccessTechnologyType _rat; +- FrequencyBand _band; + + protected: + char _found_apn[MAX_APN_LENGTH]; +@@ -144,6 +142,8 @@ protected: + bool _cp_req; + bool _is_connected; + ATHandler &_at; ++ RadioAccessTechnologyType _rat; ++ FrequencyBand _band; + }; + + } // namespace mbed +diff --git a/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp b/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp +index e876e384c9..c05fc386e0 100644 +--- a/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp ++++ b/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp +@@ -445,30 +445,7 @@ bool AT_CellularContext::set_new_context(int cid) + + void AT_CellularContext::enable_access_technology() + { +- char *buffer = new char [8]; +- memset(buffer, 0, 8); +- sprintf(buffer,"%08X", _band); +- switch (_rat) +- { +- case CATM1: +- _at.at_cmd_discard("^SXRAT", "=","%d", _rat); +- _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatM",buffer); +- _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatNB",0,0); +- break; +- +- case CATNB: +- _at.at_cmd_discard("^SXRAT", "=","%d", _rat); +- _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatNB",buffer); +- _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatM",0,0); +- break; +- +- default: +- break; +- } +- +- _at.at_cmd_discard("^SCFG", "=", "%s%s", "Tcp/withURCs", "on"); +- free(buffer); +- ++ enable_access_technology(); + } + + nsapi_error_t AT_CellularContext::do_activate_context() +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +index 7ee2c8e53c..bc2b1d514c 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +@@ -148,4 +148,32 @@ NetworkStack *GEMALTO_CINTERION_CellularContext::get_stack() + } + #endif // NSAPI_PPP_AVAILABLE + ++void GEMALTO_CINTERION_CellularContext::enable_access_technology() ++{ ++ char *buffer = new char [8]; ++ memset(buffer, 0, 8); ++ sprintf(buffer,"%08X", _band); ++ switch (_rat) ++ { ++ case CATM1: ++ _at.at_cmd_discard("^SXRAT", "=","%d", _rat); ++ _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatM",buffer); ++ _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatNB",0,0); ++ break; ++ ++ case CATNB: ++ _at.at_cmd_discard("^SXRAT", "=","%d", _rat); ++ _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatNB",buffer); ++ _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatM",0,0); ++ break; ++ ++ default: ++ break; ++ } ++ ++ _at.at_cmd_discard("^SCFG", "=", "%s%s", "Tcp/withURCs", "on"); ++ free(buffer); ++ ++} ++ + } /* namespace mbed */ +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h +index 0645b2b87c..cd9aef0222 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h +@@ -34,6 +34,7 @@ protected: + virtual NetworkStack *get_stack(); + #endif // NSAPI_PPP_AVAILABLE + virtual nsapi_error_t do_user_authentication(); ++ virtual void enable_access_technology(); + }; + + } /* namespace mbed */ +-- +2.42.0 + diff --git a/patches/0218-GEMALTO_CINTERION_CellularContext-do-not-disable-all.patch b/patches/0218-GEMALTO_CINTERION_CellularContext-do-not-disable-all.patch new file mode 100644 index 000000000..e0904957c --- /dev/null +++ b/patches/0218-GEMALTO_CINTERION_CellularContext-do-not-disable-all.patch @@ -0,0 +1,32 @@ +From 915ad28bd3e9d369128691e8558c4626bc65fb82 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 10 Nov 2023 10:30:54 +0100 +Subject: [PATCH 218/221] GEMALTO_CINTERION_CellularContext: do not disable all + bands + + * Switching rat AT command fails and should not be necessary to disable bands since we do not use a fallback rat +--- + .../GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +index bc2b1d514c..bf7522621b 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +@@ -158,13 +158,11 @@ void GEMALTO_CINTERION_CellularContext::enable_access_technology() + case CATM1: + _at.at_cmd_discard("^SXRAT", "=","%d", _rat); + _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatM",buffer); +- _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatNB",0,0); + break; + + case CATNB: + _at.at_cmd_discard("^SXRAT", "=","%d", _rat); + _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatNB",buffer); +- _at.at_cmd_discard("^SCFG", "=","%s%d%d", "Radio/Band/CatM",0,0); + break; + + default: +-- +2.42.0 + diff --git a/patches/0219-GEMALTO_CINTERION_CellularContext-add-return-value-t.patch b/patches/0219-GEMALTO_CINTERION_CellularContext-add-return-value-t.patch new file mode 100644 index 000000000..8c1ad17ab --- /dev/null +++ b/patches/0219-GEMALTO_CINTERION_CellularContext-add-return-value-t.patch @@ -0,0 +1,108 @@ +From 64e0c1f45702e5e2d11a667176c12582c3a36bdf Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 10 Nov 2023 10:58:37 +0100 +Subject: [PATCH 219/221] GEMALTO_CINTERION_CellularContext: add return value + to enable_access_technology() + +--- + .../framework/AT/AT_CellularContext.h | 2 +- + .../framework/AT/AT_CellularContext.cpp | 4 +-- + .../GEMALTO_CINTERION_CellularContext.cpp | 25 +++++++++++-------- + .../GEMALTO_CINTERION_CellularContext.h | 2 +- + 4 files changed, 19 insertions(+), 14 deletions(-) + +diff --git a/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h b/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h +index 2f68f1f97b..6291bb11d7 100644 +--- a/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h ++++ b/connectivity/cellular/include/cellular/framework/AT/AT_CellularContext.h +@@ -109,7 +109,7 @@ protected: + * @return NIDD context text, e.g. Non-IP or NONIP + */ + virtual const char *get_nonip_context_type_str(); +- virtual void enable_access_technology(); ++ virtual nsapi_error_t enable_access_technology(); + virtual void set_cid(int cid); + + private: +diff --git a/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp b/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp +index c05fc386e0..f5e69aac80 100644 +--- a/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp ++++ b/connectivity/cellular/source/framework/AT/AT_CellularContext.cpp +@@ -443,9 +443,9 @@ bool AT_CellularContext::set_new_context(int cid) + return success; + } + +-void AT_CellularContext::enable_access_technology() ++nsapi_error_t AT_CellularContext::enable_access_technology() + { +- enable_access_technology(); ++ return enable_access_technology(); + } + + nsapi_error_t AT_CellularContext::do_activate_context() +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +index bf7522621b..bbd5c4c4b5 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +@@ -148,30 +148,35 @@ NetworkStack *GEMALTO_CINTERION_CellularContext::get_stack() + } + #endif // NSAPI_PPP_AVAILABLE + +-void GEMALTO_CINTERION_CellularContext::enable_access_technology() ++nsapi_error_t GEMALTO_CINTERION_CellularContext::enable_access_technology() + { +- char *buffer = new char [8]; +- memset(buffer, 0, 8); +- sprintf(buffer,"%08X", _band); ++ nsapi_error_t error = NSAPI_ERROR_OK; ++ char buffer[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; ++ ++ snprintf(buffer, 9, "%08X", _band); + switch (_rat) + { + case CATM1: +- _at.at_cmd_discard("^SXRAT", "=","%d", _rat); +- _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatM",buffer); ++ error = _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatM", buffer); + break; + + case CATNB: +- _at.at_cmd_discard("^SXRAT", "=","%d", _rat); +- _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatNB",buffer); ++ error = _at.at_cmd_discard("^SCFG", "=","%s%s", "Radio/Band/CatNB", buffer); + break; + + default: + break; + } ++ if (error != NSAPI_ERROR_OK) { ++ return error; ++ } + +- _at.at_cmd_discard("^SCFG", "=", "%s%s", "Tcp/withURCs", "on"); +- free(buffer); ++ error = _at.at_cmd_discard("^SXRAT", "=","%d", _rat); ++ if (error != NSAPI_ERROR_OK) { ++ return error; ++ } + ++ return _at.at_cmd_discard("^SCFG", "=", "%s%s", "Tcp/withURCs", "on"); + } + + } /* namespace mbed */ +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h +index cd9aef0222..24ff87bc08 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.h +@@ -34,7 +34,7 @@ protected: + virtual NetworkStack *get_stack(); + #endif // NSAPI_PPP_AVAILABLE + virtual nsapi_error_t do_user_authentication(); +- virtual void enable_access_technology(); ++ virtual nsapi_error_t enable_access_technology(); + }; + + } /* namespace mbed */ +-- +2.42.0 + diff --git a/patches/0220-GEMALTO_CINTERION_CellularContext-connect-check-retu.patch b/patches/0220-GEMALTO_CINTERION_CellularContext-connect-check-retu.patch new file mode 100644 index 000000000..0b4784e27 --- /dev/null +++ b/patches/0220-GEMALTO_CINTERION_CellularContext-connect-check-retu.patch @@ -0,0 +1,64 @@ +From b5d44a4f3be3938045c185d5f1753cbade22a6f9 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 10 Nov 2023 17:06:53 +0100 +Subject: [PATCH 220/221] GEMALTO_CINTERION_CellularContext::connect check + return codes and print errors + +--- + .../GEMALTO_CINTERION_CellularContext.cpp | 29 +++++++++++++++---- + 1 file changed, 24 insertions(+), 5 deletions(-) + +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +index bbd5c4c4b5..0af08a786d 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +@@ -33,22 +33,41 @@ GEMALTO_CINTERION_CellularContext::~GEMALTO_CINTERION_CellularContext() + nsapi_error_t GEMALTO_CINTERION_CellularContext::connect(const char *sim_pin, const char *apn, const char *uname, + const char *pwd) + { ++ nsapi_error_t error = NSAPI_ERROR_OK; ++ + set_sim_pin(sim_pin); + set_credentials(apn, uname, pwd); + +- set_device_ready(); ++ error = set_device_ready(); ++ if ((error != NSAPI_ERROR_OK) && (error != NSAPI_ERROR_ALREADY)) { ++ tr_error("Failure connecting to GEMALTO CINTERION modem"); ++ return error; ++ } + + _at.lock(); + bool valid_context = get_context(); + _at.unlock(); + +- if(!valid_context) { +- set_new_context(_cid); ++ if (!valid_context) { ++ valid_context = set_new_context(_cid); ++ } ++ ++ if (!valid_context) { ++ tr_error("Invalid AT cellular context %d", _cid); ++ return NSAPI_ERROR_DEVICE_ERROR; + } + +- do_user_authentication(); ++ error = do_user_authentication(); ++ if (error != NSAPI_ERROR_OK) { ++ tr_error("Failure during user authentication"); ++ return error; ++ } + +- enable_access_technology(); ++ error = enable_access_technology(); ++ if (error != NSAPI_ERROR_OK) { ++ tr_error("Failure enabling access technology"); ++ return error; ++ } + + return AT_CellularContext::connect(); + } +-- +2.42.0 + diff --git a/patches/0221-TLSSocketWrapper-allow-appending-ca_cert-to-an-empty.patch b/patches/0221-TLSSocketWrapper-allow-appending-ca_cert-to-an-empty.patch new file mode 100644 index 000000000..d2655ce38 --- /dev/null +++ b/patches/0221-TLSSocketWrapper-allow-appending-ca_cert-to-an-empty.patch @@ -0,0 +1,31 @@ +From e69150d098a78a9f4d10f5f993dee29602cd076a Mon Sep 17 00:00:00 2001 +From: pennam +Date: Mon, 13 Nov 2023 16:22:14 +0100 +Subject: [PATCH 221/221] TLSSocketWrapper: allow appending ca_cert to an empty + chain + +--- + connectivity/netsocket/source/TLSSocketWrapper.cpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/connectivity/netsocket/source/TLSSocketWrapper.cpp b/connectivity/netsocket/source/TLSSocketWrapper.cpp +index 6665f64cc0..1fb9c21769 100644 +--- a/connectivity/netsocket/source/TLSSocketWrapper.cpp ++++ b/connectivity/netsocket/source/TLSSocketWrapper.cpp +@@ -145,10 +145,11 @@ nsapi_error_t TLSSocketWrapper::append_root_ca_cert(const void *root_ca, size_t + + crt = get_ca_chain(); + if (!crt) { +- return NSAPI_ERROR_NO_MEMORY; ++ /* In no chain is configured create a new one */ ++ return set_root_ca_cert(root_ca, len); + } + +- /* Parse CA certification */ ++ /* Append root_ca to the crt chain */ + int ret; + if ((ret = mbedtls_x509_crt_parse(crt, static_cast(root_ca), + len)) != 0) { +-- +2.42.0 + diff --git a/patches/0222-STM32H7-fix-DUAL_PAD-value-to-avoid-ALTx-conflict.patch b/patches/0222-STM32H7-fix-DUAL_PAD-value-to-avoid-ALTx-conflict.patch new file mode 100644 index 000000000..b975906fd --- /dev/null +++ b/patches/0222-STM32H7-fix-DUAL_PAD-value-to-avoid-ALTx-conflict.patch @@ -0,0 +1,123 @@ +From 2e1da01300f14f12b39c24434fe7fe5488258353 Mon Sep 17 00:00:00 2001 +From: Leonardo Cavagnis +Date: Mon, 13 Nov 2023 17:14:02 +0100 +Subject: [PATCH] STM32H7: fix DUAL_PAD value to avoid ALTx conflict + +--- + .../TARGET_STM32H723xG/TARGET_NUCLEO_H723ZG/PinNames.h | 2 +- + .../TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PinNames.h | 2 +- + .../TARGET_STM32H747xI/TARGET_DISCO_H747I/PinNames.h | 2 +- + .../TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h | 2 +- + .../TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h | 2 +- + .../TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h | 2 +- + .../TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h | 2 +- + .../TARGET_STM32H7A3xIQ/TARGET_NUCLEO_H7A3ZI_Q/PinNames.h | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H723xG/TARGET_NUCLEO_H723ZG/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H723xG/TARGET_NUCLEO_H723ZG/PinNames.h +index 9e4001b55a..01e4e1b98a 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H723xG/TARGET_NUCLEO_H723ZG/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H723xG/TARGET_NUCLEO_H723ZG/PinNames.h +@@ -27,7 +27,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PinNames.h +index 1fb109f69c..fbda341823 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PinNames.h +@@ -27,7 +27,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PinNames.h +index 1a6dccb193..d68ecb2c25 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PinNames.h +@@ -27,7 +27,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h +index e5463fe093..f7314dbace 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GIGA/PinNames.h +@@ -43,7 +43,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h +index 93baf9ee19..efe0f63b29 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_OPTA/PinNames.h +@@ -43,7 +43,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h +index 585fb0ea8f..0c088c81e6 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/PinNames.h +@@ -43,7 +43,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h +index 1cce05b2e2..96f611cde5 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h +@@ -43,7 +43,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H7A3xIQ/TARGET_NUCLEO_H7A3ZI_Q/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H7A3xIQ/TARGET_NUCLEO_H7A3ZI_Q/PinNames.h +index 94ccfc23fa..a44c8620cd 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H7A3xIQ/TARGET_NUCLEO_H7A3ZI_Q/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H7A3xIQ/TARGET_NUCLEO_H7A3ZI_Q/PinNames.h +@@ -27,7 +27,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +-- +2.42.0 + diff --git a/patches/0223-CellularDevice-avoid-callback-data-is-changed-before.patch b/patches/0223-CellularDevice-avoid-callback-data-is-changed-before.patch new file mode 100644 index 000000000..432846512 --- /dev/null +++ b/patches/0223-CellularDevice-avoid-callback-data-is-changed-before.patch @@ -0,0 +1,41 @@ +From 0611201dfb21fcc36e0d37e283a7e8bb44664ec8 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 17 Nov 2023 17:25:50 +0100 +Subject: [PATCH 223/226] CellularDevice: avoid callback data is changed before + attached callback is changed + +--- + .../source/framework/device/CellularDevice.cpp | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/connectivity/cellular/source/framework/device/CellularDevice.cpp b/connectivity/cellular/source/framework/device/CellularDevice.cpp +index 50d900e14a..1f53b33e61 100644 +--- a/connectivity/cellular/source/framework/device/CellularDevice.cpp ++++ b/connectivity/cellular/source/framework/device/CellularDevice.cpp +@@ -180,6 +180,11 @@ void CellularDevice::stm_callback(nsapi_event_t ev, intptr_t ptr) + + void CellularDevice::cellular_callback(nsapi_event_t ev, intptr_t ptr, CellularContext *ctx) + { ++ // forward to callback function if set by attach(...). ++ if (_status_cb) { ++ _status_cb(ev, ptr); ++ } ++ + if (ev >= NSAPI_EVENT_CELLULAR_STATUS_BASE && ev <= NSAPI_EVENT_CELLULAR_STATUS_END) { + cellular_connection_status_t cell_ev = (cellular_connection_status_t)ev; + cell_callback_data_t *ptr_data = (cell_callback_data_t *)ptr; +@@ -220,11 +225,6 @@ void CellularDevice::cellular_callback(nsapi_event_t ev, intptr_t ptr, CellularC + } + curr = curr->_next; + } +- +- // forward to callback function if set by attach(...). +- if (_status_cb) { +- _status_cb(ev, ptr); +- } + } + + nsapi_error_t CellularDevice::shutdown() +-- +2.42.0 + diff --git a/patches/0224-ATHandler-do-not-temporarily-change-debug-options-to.patch b/patches/0224-ATHandler-do-not-temporarily-change-debug-options-to.patch new file mode 100644 index 000000000..2cd99db2b --- /dev/null +++ b/patches/0224-ATHandler-do-not-temporarily-change-debug-options-to.patch @@ -0,0 +1,30 @@ +From 973a19b25200a2d11746ea8196a8403f189e13a7 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 17 Nov 2023 17:29:39 +0100 +Subject: [PATCH 224/226] ATHandler: do not temporarily change debug options to + partially trace AT commands + +--- + connectivity/cellular/source/framework/device/ATHandler.cpp | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/connectivity/cellular/source/framework/device/ATHandler.cpp b/connectivity/cellular/source/framework/device/ATHandler.cpp +index f305fd8af5..36d21243f8 100644 +--- a/connectivity/cellular/source/framework/device/ATHandler.cpp ++++ b/connectivity/cellular/source/framework/device/ATHandler.cpp +@@ -1244,12 +1244,7 @@ void ATHandler::handle_start(const char *cmd, const char *cmd_chr) + } + _cmd_buffer[len] = '\0'; + +- const bool temp_state = get_debug(); +- set_debug(true); +- + cmd_start(_cmd_buffer); +- +- set_debug(temp_state); + } + + void ATHandler::cmd_start_stop(const char *cmd, const char *cmd_chr, const char *format, ...) +-- +2.42.0 + diff --git a/patches/0225-CellularStateMachine-add-state-data-to-timeout-and-r.patch b/patches/0225-CellularStateMachine-add-state-data-to-timeout-and-r.patch new file mode 100644 index 000000000..813262e59 --- /dev/null +++ b/patches/0225-CellularStateMachine-add-state-data-to-timeout-and-r.patch @@ -0,0 +1,97 @@ +From 1e2795ce9a47146d8c87e4ff957ac3784482e075 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 17 Nov 2023 17:57:49 +0100 +Subject: [PATCH 225/226] CellularStateMachine: add state data to timeout and + retry callbacks + +--- + .../framework/common/CellularCommon.h | 20 +++++++++++++++++++ + .../framework/device/CellularStateMachine.h | 2 ++ + .../framework/device/CellularStateMachine.cpp | 11 +++++++--- + 3 files changed, 30 insertions(+), 3 deletions(-) + +diff --git a/connectivity/cellular/include/cellular/framework/common/CellularCommon.h b/connectivity/cellular/include/cellular/framework/common/CellularCommon.h +index f0466e88cf..96e25dc991 100644 +--- a/connectivity/cellular/include/cellular/framework/common/CellularCommon.h ++++ b/connectivity/cellular/include/cellular/framework/common/CellularCommon.h +@@ -47,6 +47,26 @@ struct cell_signal_quality_t { + } + }; + ++struct cell_timeout_cb_t { ++ int timeout; /* configured timeout */ ++ int state; /* cellular state */ ++ cell_timeout_cb_t() ++ { ++ timeout = -1; ++ state = -1; ++ } ++}; ++ ++struct cell_retry_cb_t { ++ int retry_count; /* retry count */ ++ int state; /* cellular state */ ++ cell_retry_cb_t() ++ { ++ retry_count = -1; ++ state = -1; ++ } ++}; ++ + /** + * Cellular specific event changes. + * Connect and disconnect are handled via NSAPI_EVENT_CONNECTION_STATUS_CHANGE +diff --git a/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h b/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h +index 67912e463c..aed9d615ce 100644 +--- a/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h ++++ b/connectivity/cellular/include/cellular/framework/device/CellularStateMachine.h +@@ -189,6 +189,8 @@ private: + bool _command_success; + bool _is_retry; + cell_callback_data_t _cb_data; ++ cell_timeout_cb_t _timeout_cb_data; ++ cell_retry_cb_t _retry_cb_data; + cellular_connection_status_t _current_event; + int _status; + PlatformMutex _mutex; +diff --git a/connectivity/cellular/source/framework/device/CellularStateMachine.cpp b/connectivity/cellular/source/framework/device/CellularStateMachine.cpp +index 833f1d2239..37416ca72e 100644 +--- a/connectivity/cellular/source/framework/device/CellularStateMachine.cpp ++++ b/connectivity/cellular/source/framework/device/CellularStateMachine.cpp +@@ -61,7 +61,7 @@ CellularStateMachine::CellularStateMachine(CellularDevice &device, events::Event + _start_time(rand() % (MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY)), + #endif // MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY + _event_timeout(-1s), _event_id(-1), _plmn(0), _command_success(false), +- _is_retry(false), _cb_data(), _current_event(CellularDeviceReady), _status(0) ++ _is_retry(false), _cb_data(), _timeout_cb_data(), _retry_cb_data(), _current_event(CellularDeviceReady), _status(0) + { + + // set initial retry values in seconds +@@ -289,8 +289,10 @@ void CellularStateMachine::retry_state_or_fail() + if (_retry_count < _retry_array_length) { + tr_debug("%s: retry %d/%d", get_state_string(_state), _retry_count, _retry_array_length); + // send info to application/driver about error logic so it can implement proper error logic ++ _retry_cb_data.retry_count = _retry_count; ++ _retry_cb_data.state = _state; + _cb_data.status_data = _current_event; +- _cb_data.data = &_retry_count; ++ _cb_data.data = &_retry_cb_data; + _cb_data.error = NSAPI_ERROR_OK; + send_event_cb(CellularStateRetryEvent); + +@@ -680,8 +682,11 @@ void CellularStateMachine::send_event_cb(cellular_connection_status_t status) + + void CellularStateMachine::change_timeout(const std::chrono::duration &timeout) + { ++ _timeout_cb_data.timeout = timeout.count(); ++ _timeout_cb_data.state = _state; ++ + _cb_data.status_data = _current_event; +- _cb_data.data = &timeout; ++ _cb_data.data = &_timeout_cb_data; + _cb_data.error = NSAPI_ERROR_OK; + // event callback is a preferred method to communicate to CellularDevice, + // for example calling CellularDevice::set_timeout would call back to this class +-- +2.42.0 + diff --git a/patches/0226-Gemalto-Cinterion-improve-trace-output.patch b/patches/0226-Gemalto-Cinterion-improve-trace-output.patch new file mode 100644 index 000000000..4bcc28293 --- /dev/null +++ b/patches/0226-Gemalto-Cinterion-improve-trace-output.patch @@ -0,0 +1,68 @@ +From aa22f048ae886adcc032ba2fefc7e1f90aa2b693 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Tue, 21 Nov 2023 14:50:08 +0100 +Subject: [PATCH 226/226] Gemalto Cinterion: improve trace output + + * Do not flood serial monitor with tr_info prints + * Align usage of "\n" +--- + .../CINTERION/GEMALTO_CINTERION_CellularContext.cpp | 2 +- + .../GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +index 7ee2c8e53c..d4ae578f09 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp +@@ -122,7 +122,7 @@ nsapi_error_t GEMALTO_CINTERION_CellularContext::do_user_authentication() + return NSAPI_ERROR_AUTH_FAILURE; + } + } else { +- tr_info("Empty pwd and username fields: no need for authentication\n"); ++ tr_info("Empty pwd and username fields: no need for authentication"); + } + + return NSAPI_ERROR_OK; +diff --git a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp +index fc2e8985d7..ac2a54282a 100644 +--- a/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp ++++ b/connectivity/drivers/cellular/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp +@@ -284,7 +284,7 @@ nsapi_error_t GEMALTO_CINTERION_CellularStack::gethostbyname(const char *host, S + _at.resp_stop(); + if (size > 0) { + //Valid string received +- tr_info("Read %d bytes. Valid string: %s\n", size, ipAddress); ++ tr_info("Read %d bytes. Valid string: %s", size, ipAddress); + // _at.restore_at_timeout(); + if (!address->set_ip_address(ipAddress)) { + _at.unlock(); +@@ -292,7 +292,7 @@ nsapi_error_t GEMALTO_CINTERION_CellularStack::gethostbyname(const char *host, S + } + } else { + //Null string received +- tr_info("Read %d bytes. Null string\n", size); ++ tr_info("Read %d bytes. Null string", size); + return NSAPI_ERROR_NO_ADDRESS; + } + } +@@ -550,7 +550,7 @@ nsapi_size_or_error_t GEMALTO_CINTERION_CellularStack::socket_recvfrom_impl(Cell + size = UDP_PACKET_SIZE; + } + +- tr_info("requesting %d bytes\n", size); ++ tr_debug("requesting %d bytes\n", size); + _at.cmd_start_stop("^SISR", "=", "%d%d", socket->id, size); + + sisr_retry: +@@ -574,7 +574,7 @@ sisr_retry: + + nsapi_size_or_error_t len = _at.read_int(); + if (len == 0) { +- tr_warn("Socket %d no data", socket->id); ++ tr_debug("Socket %d no data", socket->id); + _at.resp_stop(); + RESTORE_URCs_AND_RETURN(NSAPI_ERROR_WOULD_BLOCK); + } +-- +2.42.0 + diff --git a/patches/0227-stm32h747-cm4-set-VTOR-at-boot.patch b/patches/0227-stm32h747-cm4-set-VTOR-at-boot.patch new file mode 100644 index 000000000..f774d36cf --- /dev/null +++ b/patches/0227-stm32h747-cm4-set-VTOR-at-boot.patch @@ -0,0 +1,48 @@ +From 2d834973fc86b787535204b174303a0311e1f36f Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Fri, 19 Jan 2024 11:13:09 +0100 +Subject: [PATCH] stm32h747: cm4: set VTOR at boot + +--- + .../STM32Cube_FW/system_stm32h7xx_dualcore_boot_cm4_cm7.c | 2 +- + .../TOOLCHAIN_GCC_ARM/stm32h747xI_CM4.ld | 8 +++++++- + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/system_stm32h7xx_dualcore_boot_cm4_cm7.c b/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/system_stm32h7xx_dualcore_boot_cm4_cm7.c +index b4a4cc7826..8e0017de2a 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/system_stm32h7xx_dualcore_boot_cm4_cm7.c ++++ b/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/system_stm32h7xx_dualcore_boot_cm4_cm7.c +@@ -232,7 +232,7 @@ __weak void SystemInit (void) + /* Configure the Vector Table location add offset address ------------------*/ + #ifdef VECT_TAB_SRAM + SCB->VTOR = D2_AXISRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +-#elif !defined(NO_VTOR_RELOCATE) ++#else + #include "nvic_addr.h" // MBED + SCB->VTOR = NVIC_FLASH_VECTOR_ADDRESS; // MBED + #endif +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM4/TOOLCHAIN_GCC_ARM/stm32h747xI_CM4.ld b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM4/TOOLCHAIN_GCC_ARM/stm32h747xI_CM4.ld +index ea81a18b11..7d2651dcb4 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM4/TOOLCHAIN_GCC_ARM/stm32h747xI_CM4.ld ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM4/TOOLCHAIN_GCC_ARM/stm32h747xI_CM4.ld +@@ -38,10 +38,16 @@ + MEMORY + { + FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE +- RAM (rwx) : ORIGIN = MBED_RAM_START + VECTORS_SIZE, LENGTH = MBED_RAM_SIZE - VECTORS_SIZE ++ RAM_D2 (rwx) : ORIGIN = MBED_RAM_START + VECTORS_SIZE, LENGTH = MBED_RAM_SIZE - VECTORS_SIZE + RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K + } + ++#if (CM4_BINARY_START == 0x60000000) ++REGION_ALIAS("RAM", FLASH); ++#else ++REGION_ALIAS("RAM", RAM_D2); ++#endif ++ + /* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: +-- +2.43.0 + diff --git a/patches/0228-stm32h7-adc-DUAL_PAD-fix-definitions-for-GENERIC_M4-.patch b/patches/0228-stm32h7-adc-DUAL_PAD-fix-definitions-for-GENERIC_M4-.patch new file mode 100644 index 000000000..16061d42e --- /dev/null +++ b/patches/0228-stm32h7-adc-DUAL_PAD-fix-definitions-for-GENERIC_M4-.patch @@ -0,0 +1,40 @@ +From 992ed2cca5ebbce5f817d9fd25b2162ff8e77bbe Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Mon, 29 Apr 2024 10:41:37 +0200 +Subject: [PATCH] stm32h7: adc: DUAL_PAD: fix definitions for GENERIC_M4 target + +Completes 2e1da0130 and fixes https://github.com/arduino/ArduinoCore-mbed/issues/867 +--- + .../TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h | 2 +- + targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h +index 97d48334d7..04a34504a7 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/PinNames.h +@@ -43,7 +43,7 @@ + extern "C" { + #endif + +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + + typedef enum { + ALT0 = 0x100, +diff --git a/targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py b/targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py +index 44a95f9c02..903ce5f7e0 100644 +--- a/targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py ++++ b/targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py +@@ -491,7 +491,7 @@ extern "C" { + + if DUAL_PAD: + line_to_write = (""" +-#define DUAL_PAD 0xF00 ++#define DUAL_PAD 0x800 + """) + out_h_file.write(line_to_write) + +-- +2.44.0 + diff --git a/patches/0229-NiclaVision-enable-red-blink-on-mbed_die.patch b/patches/0229-NiclaVision-enable-red-blink-on-mbed_die.patch new file mode 100644 index 000000000..2da8e220e --- /dev/null +++ b/patches/0229-NiclaVision-enable-red-blink-on-mbed_die.patch @@ -0,0 +1,28 @@ +From a448ec473c706fd2b6bd2e99aa31d6c7e3d9debb Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Tue, 4 Jun 2024 14:29:00 +0200 +Subject: [PATCH] NiclaVision: enable red blink on mbed_die() + +--- + .../TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h +index 9f14a66d67..42d24cd79d 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/PinNames.h +@@ -467,6 +467,11 @@ typedef enum { + NC = (int)0xFFFFFFFF + } PinName; + ++// Standardized LED and button names ++#define LED1 LED_RED ++#define LED2 LED_GREEN ++#define LED3 LED_BLUE ++ + #ifdef __cplusplus + } + #endif +-- +2.45.0 + diff --git a/patches/0230-TLSSocketWrapper-do-not-force-close-to-block.patch b/patches/0230-TLSSocketWrapper-do-not-force-close-to-block.patch new file mode 100644 index 000000000..33981a691 --- /dev/null +++ b/patches/0230-TLSSocketWrapper-do-not-force-close-to-block.patch @@ -0,0 +1,24 @@ +From d0f5c17e3f7a3094c80b6b239c407f1cf7ba6df9 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Thu, 27 Jun 2024 13:36:31 +0200 +Subject: [PATCH] TLSSocketWrapper: do not force close() to block + +--- + connectivity/netsocket/source/TLSSocketWrapper.cpp | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/connectivity/netsocket/source/TLSSocketWrapper.cpp b/connectivity/netsocket/source/TLSSocketWrapper.cpp +index 1fb9c21769..c020cd9f59 100644 +--- a/connectivity/netsocket/source/TLSSocketWrapper.cpp ++++ b/connectivity/netsocket/source/TLSSocketWrapper.cpp +@@ -757,7 +757,6 @@ nsapi_error_t TLSSocketWrapper::close() + + int ret = 0; + if (_handshake_completed) { +- _transport->set_blocking(true); + ret = mbedtls_ssl_close_notify(&_ssl); + if (ret) { + print_mbedtls_error("mbedtls_ssl_close_notify", ret); +-- +2.43.0 + diff --git a/patches/0231-RP2040-add-pico_rand-support.patch b/patches/0231-RP2040-add-pico_rand-support.patch new file mode 100644 index 000000000..9afe7ca99 --- /dev/null +++ b/patches/0231-RP2040-add-pico_rand-support.patch @@ -0,0 +1,725 @@ +From ac5c21fad54214e10a3558f29195d7ea70b4ccec Mon Sep 17 00:00:00 2001 +From: pennam +Date: Mon, 17 Jun 2024 10:19:14 +0200 +Subject: [PATCH] RP2040: add pico_rand support + +--- + .../TARGET_RP2040/CMakeLists.txt | 2 + + .../TARGET_RP2040/objects.h | 7 + + .../pico-sdk/rp2_common/CMakeLists.txt | 1 + + .../hardware_sync/include/hardware/sync.h | 5 + + .../pico_platform/include/pico/platform.h | 6 +- + .../rp2_common/pico_rand/CMakeLists.txt | 13 + + .../rp2_common/pico_rand/include/pico/rand.h | 185 +++++++++++ + .../pico-sdk/rp2_common/pico_rand/rand.c | 305 ++++++++++++++++++ + .../TARGET_RP2040/trng_api.c | 64 ++++ + targets/targets.json | 3 +- + 10 files changed, 587 insertions(+), 4 deletions(-) + create mode 100644 targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/CMakeLists.txt + create mode 100644 targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico/rand.h + create mode 100644 targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/rand.c + create mode 100644 targets/TARGET_RASPBERRYPI/TARGET_RP2040/trng_api.c + +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/CMakeLists.txt b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/CMakeLists.txt +index 4fadf6091e..4e9bae47ce 100644 +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/CMakeLists.txt ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/CMakeLists.txt +@@ -36,6 +36,7 @@ target_include_directories(mbed-rp2040 + pico-sdk/common/pico_base/include + pico-sdk/common/pico_binary_info/include + pico-sdk/common/pico_util/include ++ pico-sdk/common/pico_rand/include + pico-sdk/boards/include + pico-sdk/generated + . +@@ -71,6 +72,7 @@ target_sources(mbed-rp2040 + pico-sdk/rp2_common/pico_bootrom/bootrom.c + pico-sdk/rp2_common/pico_runtime/runtime.c + pico-sdk/rp2_common/pico_platform/platform.c ++ pico-sdk/rp2_common/pico_rand/rand.c + pico-sdk/common/pico_sync/mutex.c + pico-sdk/common/pico_time/time.c + pico-sdk/common/pico_sync/lock_core.c +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h +index f5f44a58f4..0231968bb5 100644 +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h +@@ -33,6 +33,7 @@ extern "C" { + #include "pico/assert.h" + #include "pico/time.h" + #include "pico/types.h" ++#include "pico/rand.h" + #include "hardware/pwm.h" + #include "hardware/adc.h" + #include "hardware/resets.h" +@@ -122,6 +123,12 @@ struct flash_s { + uint32_t dummy; + }; + ++#if DEVICE_TRNG ++struct trng_s { ++ uint8_t not_used; ++}; ++#endif ++ + typedef struct gpio_s gpio_t; + typedef struct serial_s serial_t; + +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/CMakeLists.txt b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/CMakeLists.txt +index 4ca55becba..ec89c3ff71 100644 +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/CMakeLists.txt ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/CMakeLists.txt +@@ -49,6 +49,7 @@ if (NOT PICO_BARE_METAL) + pico_add_subdirectory(pico_mem_ops) + pico_add_subdirectory(pico_malloc) + pico_add_subdirectory(pico_printf) ++ pico_add_subdirectory(pico_rand) + + pico_add_subdirectory(pico_stdio) + pico_add_subdirectory(pico_stdio_semihosting) +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h +index 8f91d55955..4f076aba02 100644 +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardware_sync/include/hardware/sync.h +@@ -70,6 +70,11 @@ typedef volatile uint32_t spin_lock_t; + #define PICO_SPINLOCK_ID_HARDWARE_CLAIM 11 + #endif + ++// PICO_CONFIG: PICO_SPINLOCK_ID_RAND, Spinlock ID for Random Number Generator, min=0, max=31, default=12, group=hardware_sync ++#ifndef PICO_SPINLOCK_ID_RAND ++#define PICO_SPINLOCK_ID_RAND 12 ++#endif ++ + // PICO_CONFIG: PICO_SPINLOCK_ID_OS1, First Spinlock ID reserved for use by low level OS style software, min=0, max=31, default=14, group=hardware_sync + #ifndef PICO_SPINLOCK_ID_OS1 + #define PICO_SPINLOCK_ID_OS1 14 +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h +index ee1d360cee..ea16d9734e 100644 +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico/platform.h +@@ -151,14 +151,14 @@ extern "C" { + * + * For example a `uint32_t` foo that will retain its value if the program is restarted by reset. + * +- * uint32_t __uninitialized_ram("my_group_name") foo; ++ * uint32_t __uninitialized_ram(foo); + * +- * The section attribute is `.uninitialized_ram.` ++ * The section attribute is `.uninitialized_data.` + * + * \param group a string suffix to use in the section name to distinguish groups that can be linker + * garbage-collected independently + */ +-#define __uninitialized_ram(group) __attribute__((section(".uninitialized_ram." #group))) group ++#define __uninitialized_ram(group) __attribute__((section(".uninitialized_data." #group))) group + + /*! \brief Section attribute macro for placement in flash even in a COPY_TO_RAM binary + * \ingroup pico_platform +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/CMakeLists.txt b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/CMakeLists.txt +new file mode 100644 +index 0000000000..0e72bb5ab6 +--- /dev/null ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/CMakeLists.txt +@@ -0,0 +1,13 @@ ++pico_add_library(pico_rand) ++ ++target_sources(pico_rand INTERFACE ++ ${CMAKE_CURRENT_LIST_DIR}/rand.c ++) ++ ++target_include_directories(pico_rand_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) ++ ++pico_mirrored_target_link_libraries(pico_rand INTERFACE ++ pico_unique_id ++ hardware_clocks ++ hardware_timer ++ hardware_sync) +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico/rand.h b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico/rand.h +new file mode 100644 +index 0000000000..20fc6d6cb1 +--- /dev/null ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico/rand.h +@@ -0,0 +1,185 @@ ++/* ++ * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. ++ * ++ * SPDX-License-Identifier: BSD-3-Clause ++ */ ++ ++#ifndef _PICO_RAND_H ++#define _PICO_RAND_H ++ ++#include "pico.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** \file pico/rand.h ++ * \defgroup pico_rand pico_rand ++ * ++ * Random Number Generator API ++ * ++ * This module generates random numbers at runtime utilizing a number of possible entropy ++ * sources and uses those sources to modify the state of a 128-bit 'Pseudo ++ * Random Number Generator' implemented in software. ++ * ++ * The random numbers (32 to 128 bit) to be supplied are read from the PRNG which is used ++ * to help provide a large number space. ++ * ++ * The following (multiple) sources of entropy are available (of varying quality), each enabled by a #define: ++ * ++ * - The Ring Oscillator (ROSC) (\ref PICO_RAND_ENTROPY_SRC_ROSC == 1): ++ * \ref PICO_RAND_ROSC_BIT_SAMPLE_COUNT bits are gathered from the ring oscillator "random bit" and mixed in each ++ * time. This should not be used if the ROSC is off, or the processor is running from ++ * the ROSC. ++ * \note the maximum throughput of ROSC bit sampling is controlled by PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US which defaults ++ * to 10us, i.e. 100,000 bits per second. ++ * - Time (\ref PICO_RAND_ENTROPY_SRC_TIME == 1): The 64-bit microsecond timer is mixed in each time. ++ * - Bus Performance Counter (\ref PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER == 1): One of the bus fabric's performance ++ * counters is mixed in each time. ++ * ++ * \note All entropy sources are hashed before application to the PRNG state machine. ++ * ++ * The \em first time a random number is requested, the 128-bit PRNG state ++ * must be seeded. Multiple entropy sources are also available for the seeding operation: ++ * ++ * - The Ring Oscillator (ROSC) (\ref PICO_RAND_SEED_ENTROPY_SRC_ROSC == 1): ++ * 64 bits are gathered from the ring oscillator "random bit" and mixed into the seed. ++ * - Time (\ref PICO_RAND_SEED_ENTROPY_SRC_TIME == 1): The 64-bit microsecond timer is mixed into the seed. ++ * - Board Identifier (PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID == 1): The board id via \ref pico_get_unique_board_id ++ * is mixed into the seed. ++ * - RAM hash (\ref PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH (\ref PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH): The hashed contents of a ++ * subset of RAM are mixed in. Initial RAM contents are undefined on power up, so provide a reasonable source of entropy. ++ * By default the last 1K of RAM (which usually contains the core 0 stack) is hashed, which may also provide for differences ++ * after each warm reset. ++ * ++ * With default settings, the seed generation takes approximately 1 millisecond while ++ * subsequent random numbers generally take between 10 and 20 microseconds to generate. ++ * ++ * pico_rand methods may be safely called from either core or from an IRQ, but be careful in the latter case as ++ * the calls may block for a number of microseconds waiting on more entropy. ++ */ ++ ++// --------------- ++// ENTROPY SOURCES ++// --------------- ++ ++// PICO_CONFIG: PICO_RAND_ENTROPY_SRC_ROSC, Enable/disable use of ROSC as an entropy source, type=bool, default=1, group=pico_rand ++#ifndef PICO_RAND_ENTROPY_SRC_ROSC ++#define PICO_RAND_ENTROPY_SRC_ROSC 1 ++#endif ++ ++// PICO_CONFIG: PICO_RAND_ENTROPY_SRC_TIME, Enable/disable use of hardware timestamp as an entropy source, type=bool, default=1, group=pico_rand ++#ifndef PICO_RAND_ENTROPY_SRC_TIME ++#define PICO_RAND_ENTROPY_SRC_TIME 1 ++#endif ++ ++// PICO_CONFIG: PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER, Enable/disable use of a bus performance counter as an entropy source, type=bool, default=1, group=pico_rand ++#ifndef PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER ++#define PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER 1 ++#endif ++ ++// -------------------- ++// SEED ENTROPY SOURCES ++// -------------------- ++ ++// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_ROSC, Enable/disable use of ROSC as an entropy source for the random seed, type=bool, default=1, group=pico_rand ++#ifndef PICO_RAND_SEED_ENTROPY_SRC_ROSC ++#define PICO_RAND_SEED_ENTROPY_SRC_ROSC PICO_RAND_ENTROPY_SRC_ROSC ++#endif ++ ++// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_TIME, Enable/disable use of hardware timestamp as an entropy source for the random seed, type=bool, default=1, group=pico_rand ++#ifndef PICO_RAND_SEED_ENTROPY_SRC_TIME ++#define PICO_RAND_SEED_ENTROPY_SRC_TIME PICO_RAND_ENTROPY_SRC_TIME ++#endif ++ ++// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID, Enable/disable use of board id as part of the random seed, type=bool, default=1, group=pico_rand ++#ifndef PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID ++#define PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID 0 ++#endif ++ ++// PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH, Enable/disable use of a RAM hash as an entropy source for the random seed, type=bool, default=1, group=pico_rand ++#ifndef PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH ++#define PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH 1 ++#endif ++ ++// --------------------------------- ++// PICO_RAND_ENTROPY_SRC_ROSC CONFIG ++// --------------------------------- ++ ++// PICO_CONFIG: PICO_RAND_ROSC_BIT_SAMPLE_COUNT, Number of samples to take of the ROSC random bit per random number generation , min=1, max=64, default=1, group=pico_rand ++#ifndef PICO_RAND_ROSC_BIT_SAMPLE_COUNT ++#define PICO_RAND_ROSC_BIT_SAMPLE_COUNT 1 ++#endif ++ ++// PICO_CONFIG: PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US, Define a default minimum time between sampling the ROSC random bit, min=5, max=20, default=10, group=pico_rand ++#ifndef PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US ++// (Arbitrary / tested) minimum time between sampling the ROSC random bit ++#define PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US 10u ++#endif ++ ++// --------------------------------------------- ++// PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER CONFIG ++// --------------------------------------------- ++ ++// PICO_CONFIG: PICO_RAND_BUS_PERF_COUNTER_INDEX, Bus performance counter index to use for sourcing entropy, min=0, max=3, group=pico_rand ++// this is deliberately undefined by default, meaning the code will pick that appears unused ++//#define PICO_RAND_BUS_PERF_COUNTER_INDEX 0 ++ ++// PICO_CONFIG: PICO_RAND_BUS_PERF_COUNTER_EVENT, Bus performance counter event to use for sourcing entropy, default=arbiter_sram5_perf_event_access, group=pico_rand ++#ifndef PICO_RAND_BUS_PERF_COUNTER_EVENT ++#define PICO_RAND_BUS_PERF_COUNTER_EVENT arbiter_sram5_perf_event_access ++#endif ++ ++// ------------------------------------------ ++// PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH CONFIG ++// ------------------------------------------ ++ ++// PICO_CONFIG: PICO_RAND_RAM_HASH_END, end of address in RAM (non-inclusive) to hash during pico_rand seed initialization, default=SRAM_END, group=pico_rand ++#ifndef PICO_RAND_RAM_HASH_END ++#define PICO_RAND_RAM_HASH_END SRAM_END ++#endif ++// PICO_CONFIG: PICO_RAND_RAM_HASH_START, start of address in RAM (inclusive) to hash during pico_rand seed initialization, default=PICO_RAND_RAM_HASH_END - 1024, group=pico_rand ++#ifndef PICO_RAND_RAM_HASH_START ++#define PICO_RAND_RAM_HASH_START (PICO_RAND_RAM_HASH_END - 1024u) ++#endif ++ ++// We provide a maximum of 128 bits entropy in one go ++typedef struct rng_128 { ++ uint64_t r[2]; ++} rng_128_t; ++ ++/*! \brief Get 128-bit random number ++ * \ingroup pico_rand ++ * ++ * This method may be safely called from either core or from an IRQ, but be careful in the latter case as ++ * the call may block for a number of microseconds waiting on more entropy. ++ * ++ * \param rand128 Pointer to storage to accept a 128-bit random number ++ */ ++void get_rand_128(rng_128_t *rand128); ++ ++/*! \brief Get 64-bit random number ++ * \ingroup pico_rand ++ * ++ * This method may be safely called from either core or from an IRQ, but be careful in the latter case as ++ * the call may block for a number of microseconds waiting on more entropy. ++ * ++ * \return 64-bit random number ++ */ ++uint64_t get_rand_64(void); ++ ++/*! \brief Get 32-bit random number ++ * \ingroup pico_rand ++ * ++ * This method may be safely called from either core or from an IRQ, but be careful in the latter case as ++ * the call may block for a number of microseconds waiting on more entropy. ++ * ++ * \return 32-bit random number ++ */ ++uint32_t get_rand_32(void); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/rand.c b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/rand.c +new file mode 100644 +index 0000000000..c73b80321e +--- /dev/null ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/rand.c +@@ -0,0 +1,305 @@ ++/* ++ * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. ++ * ++ * SPDX-License-Identifier: BSD-3-Clause ++ */ ++ ++/* xoroshiro128ss(), rotl(): ++ ++ Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) ++ ++ To the extent possible under law, the author has dedicated all copyright ++ and related and neighboring rights to this software to the public domain ++ worldwide. This software is distributed without any warranty. ++ ++ See ++ ++ splitmix64() implementation: ++ ++ Written in 2015 by Sebastiano Vigna (vigna@acm.org) ++ To the extent possible under law, the author has dedicated all copyright ++ and related and neighboring rights to this software to the public domain ++ worldwide. This software is distributed without any warranty. ++ ++ See ++*/ ++ ++#include "pico/rand.h" ++#if PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID ++#include "pico/unique_id.h" ++#endif ++#include "pico/time.h" ++#include "hardware/clocks.h" ++#include "hardware/structs/rosc.h" ++#include "hardware/structs/bus_ctrl.h" ++#include "hardware/sync.h" ++ ++static bool rng_initialised = false; ++ ++// Note: By design, do not initialise any of the variables that hold entropy, ++// they may have useful junk in them, either from power-up or a previous boot. ++static rng_128_t __uninitialized_ram(rng_state); ++#if PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH ++static uint64_t __uninitialized_ram(ram_hash); ++#endif ++ ++#if PICO_RAND_ENTROPY_SRC_ROSC | PICO_RAND_SEED_ENTROPY_SRC_ROSC ++static uint64_t __uninitialized_ram(rosc_samples); ++#endif ++ ++#if PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER ++static uint8_t bus_counter_idx; ++#endif ++ ++/* From the original source: ++ ++ This is a fixed-increment version of Java 8's SplittableRandom generator ++ See http://dx.doi.org/10.1145/2714064.2660195 and ++ http://docs.oracle.com/javase/8/docs/api/java/util/SplittableRandom.html ++ ++ It is a very fast generator passing BigCrush, and it can be useful if ++ for some reason you absolutely want 64 bits of state; otherwise, we ++ rather suggest to use a xoroshiro128+ (for moderately parallel ++ computations) or xorshift1024* (for massively parallel computations) ++ generator. ++ ++ Note: This can be called with any value (i.e. including 0) ++*/ ++static __noinline uint64_t splitmix64(uint64_t x) { ++ uint64_t z = x + 0x9E3779B97F4A7C15ull; ++ z = (z ^ (z >> 30)) * 0xBF58476D1CE4E5B9ull; ++ z = (z ^ (z >> 27)) * 0x94D049BB133111EBull; ++ return z ^ (z >> 31); ++} ++ ++/* From the original source: ++ ++ This is xoroshiro128** 1.0, one of our all-purpose, rock-solid, ++ small-state generators. It is extremely (sub-ns) fast and it passes all ++ tests we are aware of, but its state space is large enough only for ++ mild parallelism. ++ ++ For generating just floating-point numbers, xoroshiro128+ is even ++ faster (but it has a very mild bias, see notes in the comments). ++ ++ The state must be seeded so that it is not everywhere zero. If you have ++ a 64-bit seed, we suggest to seed a splitmix64 generator and use its ++ output to fill s. ++*/ ++static inline uint64_t rotl(const uint64_t x, int k) { ++ return (x << k) | (x >> (64 - k)); ++} ++ ++static __noinline uint64_t xoroshiro128ss(rng_128_t *local_rng_state) { ++ const uint64_t s0 = local_rng_state->r[0]; ++ uint64_t s1 = local_rng_state->r[1]; ++ ++ // Because the state is *modified* outside of this function, there is a ++ // 1 in 2^128 chance that it could be all zeroes (which is not allowed). ++ while (s0 == 0 && s1 == 0) { ++ s1 = time_us_64(); // should not be 0, but loop anyway ++ } ++ ++ const uint64_t result = rotl(s0 * 5, 7) * 9; ++ ++ s1 ^= s0; ++ local_rng_state->r[0] = rotl(s0, 24) ^ s1 ^ (s1 << 16); // a, b ++ local_rng_state->r[1] = rotl(s1, 37); // c ++ ++ return result; ++} ++ ++#if PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH ++static uint64_t sdbm_hash64_sram(uint64_t hash) { ++ // save some time by hashing a word at a time ++ for (uint i = (PICO_RAND_RAM_HASH_START + 3) & ~3; i < PICO_RAND_RAM_HASH_END; i+=4) { ++ uint32_t c = *(uint32_t *) i; ++ hash = (uint64_t) c + (hash << 6) + (hash << 16) - hash; ++ } ++ return hash; ++} ++#endif ++ ++#if PICO_RAND_SEED_ENTROPY_SRC_ROSC | PICO_RAND_ENTROPY_SRC_ROSC ++/* gather an additional n bits of entropy, and shift them into the 64 bit entropy counter */ ++static uint64_t capture_additional_rosc_samples(uint n) { ++ static absolute_time_t next_sample_time; ++ ++ // provide an override if someone really wants it, but disabling ROSC as an entropy source makes more sense ++#if !PICO_RAND_DISABLE_ROSC_CHECK ++ // check that the ROSC is running but that the processors are NOT running from it ++ hard_assert((rosc_hw->status & ROSC_STATUS_ENABLED_BITS) && ++ ((clocks_hw->clk[clk_sys].ctrl & CLOCKS_CLK_SYS_CTRL_AUXSRC_BITS) != (CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_ROSC_CLKSRC << CLOCKS_CLK_SYS_CTRL_AUXSRC_LSB))); ++#endif ++ ++ bool in_exception = __get_current_exception(); ++ assert(n); // save us having to special case samples for this ++ uint64_t samples = 0; ++ for(uint i=0; irandombit & 1u; ++ // use of relative time to now, rather than offset from before makes things ++ // a bit less predictable at the cost of some speed. ++ next_sample_time = make_timeout_time_us(PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US); ++ bit_done = true; ++ if (i == n - 1) { ++ // samples has our random bits, so let's mix them in now ++ samples = rosc_samples = (rosc_samples << n) | samples; ++ } ++ } ++ spin_unlock(lock, save); ++ } while (!bit_done); ++ } ++ return samples; ++} ++#endif ++ ++static void initialise_rand(void) { ++ rng_128_t local_rng_state = local_rng_state; ++ uint which = 0; ++#if PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH ++ ram_hash = sdbm_hash64_sram(ram_hash); ++ local_rng_state.r[which] ^= splitmix64(ram_hash); ++ which ^= 1; ++#endif ++ ++#if PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID ++ static_assert(PICO_UNIQUE_BOARD_ID_SIZE_BYTES == sizeof(uint64_t), ++ "Code below requires that 'board_id' is 64-bits in size"); ++ ++ // Note! The safety of the length assumption here is protected by a 'static_assert' above ++ union unique_id_u { ++ pico_unique_board_id_t board_id_native; ++ uint64_t board_id_u64; ++ } unique_id; ++ // Note! The safety of the length assumption here is protected by a 'static_assert' above ++ pico_get_unique_board_id(&unique_id.board_id_native); ++ local_rng_state.r[which] ^= splitmix64(unique_id.board_id_u64); ++ which ^= 1; ++#endif ++ ++#if PICO_RAND_SEED_ENTROPY_SRC_ROSC ++ // this is really quite slow (10ms per iteration), and I'm not sure that it adds value over the 64 random bits ++// uint ref_khz = clock_get_hz(clk_ref) / 100; ++// for (int i = 0; i < 5; i++) { ++// // Apply hash of the rosc frequency, limited but still 'extra' entropy ++// uint measurement = frequency_count_raw(CLOCKS_FC0_SRC_VALUE_ROSC_CLKSRC, ref_khz); ++// local_rng_state.r[which] ^= splitmix64(measurement); ++// (void) xoroshiro128ss(&local_rng_state); //churn to mix seed sources ++// } ++ ++ // Gather a full ROSC sample array with sample bits ++ local_rng_state.r[which] ^= splitmix64(capture_additional_rosc_samples(8 * sizeof(rosc_samples))); ++ which ^= 1; ++#endif ++ ++#if PICO_RAND_SEED_ENTROPY_SRC_TIME ++ // Mix in hashed time. This is [possibly] predictable boot-to-boot ++ // but will vary application-to-application. ++ local_rng_state.r[which] ^= splitmix64(time_us_64()); ++ which ^= 1; ++#endif ++ ++ spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_RAND); ++ uint32_t save = spin_lock_blocking(lock); ++ if (!rng_initialised) { ++#if PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER ++#if !PICO_RAND_BUSCTRL_COUNTER_INDEX ++ int idx = -1; ++ for(uint i = 0; i < count_of(bus_ctrl_hw->counter); i++) { ++ if (bus_ctrl_hw->counter[i].sel == BUSCTRL_PERFSEL0_RESET) { ++ idx = (int)i; ++ break; ++ } ++ } ++ hard_assert(idx != -1); ++ bus_counter_idx = (uint8_t)idx; ++#else ++ bus_counter_idx = (uint8_t)PICO_RAND_BUSCTRL_COUNTER_INDEX; ++#endif ++ bus_ctrl_hw->counter[bus_counter_idx].sel = PICO_RAND_BUS_PERF_COUNTER_EVENT; ++#endif ++ (void) xoroshiro128ss(&local_rng_state); ++ rng_state = local_rng_state; ++ rng_initialised = true; ++ } ++ spin_unlock(lock, save); ++} ++ ++uint64_t get_rand_64(void) { ++ if (!rng_initialised) { ++ // Do not provide 'RNs' until the system has been initialised. Note: ++ // The first initialisation can be quite time-consuming depending on ++ // the amount of RAM hashed, see RAM_HASH_START and RAM_HASH_END ++ initialise_rand(); ++ } ++ ++ static volatile uint8_t check_byte; ++ rng_128_t local_rng_state = rng_state; ++ uint8_t local_check_byte = check_byte; ++ // Modify PRNG state with the run-time entropy sources, ++ // hashed to reduce correlation with previous modifications. ++ uint which = 0; ++#if PICO_RAND_ENTROPY_SRC_TIME ++ local_rng_state.r[which] ^= splitmix64(time_us_64()); ++ which ^= 1; ++#endif ++#if PICO_RAND_ENTROPY_SRC_ROSC ++ local_rng_state.r[which] ^= splitmix64(capture_additional_rosc_samples(PICO_RAND_ROSC_BIT_SAMPLE_COUNT)); ++ which ^= 1; ++#endif ++#if PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER ++ uint32_t bus_counter_value = bus_ctrl_hw->counter[bus_counter_idx].value; ++ // counter is saturating, so clear it if it has reached saturation ++ if (bus_counter_value == BUSCTRL_PERFCTR0_BITS) { ++ bus_ctrl_hw->counter[bus_counter_idx].value = 0; ++ } ++ local_rng_state.r[which] ^= splitmix64(bus_counter_value); ++ which ^= 1; ++#endif ++ ++ spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_RAND); ++ uint32_t save = spin_lock_blocking(lock); ++ if (local_check_byte != check_byte) { ++ // someone got a random number in the interim, so mix it in ++ local_rng_state.r[0] ^= rng_state.r[0]; ++ local_rng_state.r[1] ^= rng_state.r[1]; ++ } ++ // Generate a 64-bit RN from the modified PRNG state. ++ // Note: This also "churns" the 128-bit state for next time. ++ uint64_t rand64 = xoroshiro128ss(&local_rng_state); ++ rng_state = local_rng_state; ++ check_byte++; ++ spin_unlock(lock, save); ++ ++ return rand64; ++} ++ ++void get_rand_128(rng_128_t *ptr128) { ++ ptr128->r[0] = get_rand_64(); ++ ptr128->r[1] = get_rand_64(); ++} ++ ++uint32_t get_rand_32(void) { ++ return (uint32_t) get_rand_64(); ++} +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/trng_api.c b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/trng_api.c +new file mode 100644 +index 0000000000..b0886badcc +--- /dev/null ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/trng_api.c +@@ -0,0 +1,64 @@ ++/* mbed Microcontroller Library ++ * Copyright (c) 2018 GigaDevice Semiconductor Inc. ++ * ++ * SPDX-License-Identifier: Apache-2.0 ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++#if DEVICE_TRNG ++ ++#include "trng_api.h" ++ ++/** Initialize the TRNG peripheral ++ * ++ * @param obj The TRNG object ++ */ ++void trng_init(trng_t *obj) ++{ ++ (void)obj; ++} ++ ++/** Deinitialize the TRNG peripheral ++ * ++ * @param obj The TRNG object ++ */ ++void trng_free(trng_t *obj) ++{ ++ (void)obj; ++} ++ ++/** Get random data from TRNG peripheral ++ * ++ * @param obj The TRNG object ++ * @param output The pointer to an output array ++ * @param length The size of output data, to avoid buffer overwrite ++ * @param output_length The length of generated data ++ * @return 0 success, -1 fail ++ */ ++int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length) ++{ ++ (void)obj; ++ *output_length = 0; ++ uint32_t random[16]; ++ ++ while (*output_length < length) { ++ get_rand_128((rng_128_t*)random); ++ for (uint8_t i = 0; (i < 16) && (*output_length < length) ; i++) { ++ *output++ = random[i]; ++ *output_length += 1; ++ random[i] = 0; ++ } ++ } ++ return 0; ++} ++#endif /* DEVICE_TRNG */ +diff --git a/targets/targets.json b/targets/targets.json +index 9a12422336..83fa8c930a 100644 +--- a/targets/targets.json ++++ b/targets/targets.json +@@ -9700,7 +9700,8 @@ + "USTICKER", + "WATCHDOG", + "USBDEVICE", +- "RESET_REASON" ++ "RESET_REASON", ++ "TRNG" + ] + }, + "NANO_RP2040_CONNECT": { +-- +2.43.0 + diff --git a/patches/0232-emac_stm32-properly-invalidate-DCache-before-disabli.patch b/patches/0232-emac_stm32-properly-invalidate-DCache-before-disabli.patch new file mode 100644 index 000000000..0166cc9b0 --- /dev/null +++ b/patches/0232-emac_stm32-properly-invalidate-DCache-before-disabli.patch @@ -0,0 +1,40 @@ +From 717b63ce10981d1c3684e465f625e10b0b9efe96 Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Tue, 2 Jul 2024 16:30:07 +0200 +Subject: [PATCH] emac_stm32: properly invalidate DCache before disabling it + +--- + .../TARGET_STM/TARGET_STM32H7/TARGET_OPTA/stm32h7_eth_init.c | 3 +++ + .../TARGET_STM32H7/TARGET_PORTENTA_H7/stm32h7_eth_init.c | 1 + + 2 files changed, 4 insertions(+) + +diff --git a/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_OPTA/stm32h7_eth_init.c b/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_OPTA/stm32h7_eth_init.c +index 0572fae7a2..8b9cc8bcd0 100644 +--- a/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_OPTA/stm32h7_eth_init.c ++++ b/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_OPTA/stm32h7_eth_init.c +@@ -66,7 +66,10 @@ void HAL_ETH_MspInit(ETH_HandleTypeDef *heth) + + #if !(defined(DUAL_CORE) && defined(CORE_CM4)) + /* Disable DCache for STM32H7 family */ ++ core_util_critical_section_enter(); ++ SCB_CleanInvalidateDCache(); + SCB_DisableDCache(); ++ core_util_critical_section_exit(); + #endif + + /* GPIO Ports Clock Enable */ +diff --git a/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_PORTENTA_H7/stm32h7_eth_init.c b/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_PORTENTA_H7/stm32h7_eth_init.c +index 643fc5acd3..7f5b4206cb 100644 +--- a/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_PORTENTA_H7/stm32h7_eth_init.c ++++ b/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/TARGET_PORTENTA_H7/stm32h7_eth_init.c +@@ -68,6 +68,7 @@ void HAL_ETH_MspInit(ETH_HandleTypeDef *heth) + #if !(defined(DUAL_CORE) && defined(CORE_CM4)) + /* Disable DCache for STM32H7 family */ + core_util_critical_section_enter(); ++ SCB_CleanInvalidateDCache(); + SCB_DisableDCache(); + core_util_critical_section_exit(); + #endif +-- +2.45.2 + diff --git a/patches/0233-emac-stop-start-dhcp-on-interface-bringup.patch b/patches/0233-emac-stop-start-dhcp-on-interface-bringup.patch new file mode 100644 index 000000000..85dd4c9e0 --- /dev/null +++ b/patches/0233-emac-stop-start-dhcp-on-interface-bringup.patch @@ -0,0 +1,30 @@ +From 5114c7f56a82c37021cdd92f07bc1a2c62e85e64 Mon Sep 17 00:00:00 2001 +From: maidnl +Date: Mon, 8 Jul 2024 12:07:40 +0200 +Subject: [PATCH 233/234] emac: stop/start dhcp on interface bringup + +--- + connectivity/lwipstack/source/LWIPInterface.cpp | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/connectivity/lwipstack/source/LWIPInterface.cpp b/connectivity/lwipstack/source/LWIPInterface.cpp +index a1cfcf31c4..dfefebcb8b 100644 +--- a/connectivity/lwipstack/source/LWIPInterface.cpp ++++ b/connectivity/lwipstack/source/LWIPInterface.cpp +@@ -169,8 +169,12 @@ nsapi_error_t LWIP::Interface::set_dhcp() + + #if LWIP_DHCP + if (dhcp_has_to_be_set) { ++ if(dhcp_started) { ++ dhcp_stop(&netif); ++ dhcp_started = false; ++ } ++ + err_t err = dhcp_start(&netif); +- dhcp_has_to_be_set = false; + if (err) { + connected = NSAPI_STATUS_DISCONNECTED; + if (client_callback) { +-- +2.45.2 + diff --git a/patches/0234-emac-stm32-check-inteface-status-before-link_out.patch b/patches/0234-emac-stm32-check-inteface-status-before-link_out.patch new file mode 100644 index 000000000..16024188b --- /dev/null +++ b/patches/0234-emac-stm32-check-inteface-status-before-link_out.patch @@ -0,0 +1,147 @@ +From e0cad5c4277b3c5ee9cb01a9529df9333612bbeb Mon Sep 17 00:00:00 2001 +From: maidnl +Date: Mon, 8 Jul 2024 12:08:48 +0200 +Subject: [PATCH 234/234] emac: stm32: check inteface status before link_out() + +This allows handling of HAL_ETH_STATE_ERROR, usually on interface teardown/up with strict timings +--- + .../drivers/emac/TARGET_STM/stm32xx_emac.cpp | 27 +++++++++++++++++++ + .../drivers/emac/TARGET_STM/stm32xx_emac.h | 7 +++++ + .../lwipstack/source/LWIPInterfaceEMAC.cpp | 15 +++++++++-- + .../netsocket/include/netsocket/EMAC.h | 11 ++++++++ + .../STM32H7xx_HAL_Driver/stm32h7xx_hal_eth.c | 8 +----- + 5 files changed, 59 insertions(+), 9 deletions(-) + +diff --git a/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.cpp b/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.cpp +index 0230a90665..0e7d64ad34 100644 +--- a/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.cpp ++++ b/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.cpp +@@ -402,6 +402,33 @@ bool STM32_EMAC::low_level_init_successful() + } + #endif // ETH_IP_VERSION_V2 + ++/** ++ * This function get the state of emac interface ++ */ ++int STM32_EMAC::get_interface_status() { ++ return HAL_ETH_GetState(&EthHandle); ++} ++ ++/** ++ * This function returns true if the status of the interface is in the ++ * correct state for the trasmission ++ */ ++bool STM32_EMAC::is_ready_to_tx() { ++ return (HAL_ETH_GetState(&EthHandle) == HAL_ETH_STATE_READY); ++} ++ ++/** ++ * This function reset the emac interface in case the status is in error ++ * Apparently there was not anything to recover from an error state ++ */ ++void STM32_EMAC::restart() { ++ if(HAL_ETH_STATE_ERROR == HAL_ETH_GetState(&EthHandle)){ ++ HAL_ETH_Stop(&EthHandle); ++ HAL_ETH_Start(&EthHandle); ++ } ++} ++ ++ + /** + * This function should do the actual transmission of the packet. The packet is + * contained in the memory buffer chain that is passed to the function. +diff --git a/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h b/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h +index cfa6752177..ecc280b2f8 100644 +--- a/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h ++++ b/connectivity/drivers/emac/TARGET_STM/stm32xx_emac.h +@@ -148,6 +148,13 @@ public: + */ + virtual void set_memory_manager(EMACMemoryManager &mem_mngr); + ++ /* return the status of the interface as integer */ ++ int get_interface_status() override; ++ /* return true if the interface is in the correct state to transmit */ ++ bool is_ready_to_tx() override; ++ /* restart only if the interface is in error state */ ++ void restart() override; ++ + // Called from driver functions + ETH_HandleTypeDef EthHandle; + osThreadId_t thread; /**< Processing thread */ +diff --git a/connectivity/lwipstack/source/LWIPInterfaceEMAC.cpp b/connectivity/lwipstack/source/LWIPInterfaceEMAC.cpp +index 56fbcc0d90..ed4397879e 100644 +--- a/connectivity/lwipstack/source/LWIPInterfaceEMAC.cpp ++++ b/connectivity/lwipstack/source/LWIPInterfaceEMAC.cpp +@@ -27,15 +27,26 @@ + + #if LWIP_ETHERNET + ++ + err_t LWIP::Interface::emac_low_level_output(struct netif *netif, struct pbuf *p) + { ++ bool ret = false; + /* Increase reference counter since lwip stores handle to pbuf and frees + it after output */ + pbuf_ref(p); + + LWIP::Interface *mbed_if = static_cast(netif->state); +- bool ret = mbed_if->emac->link_out(p); +- return ret ? ERR_OK : ERR_IF; ++ ++ if(mbed_if->emac->is_ready_to_tx()) { ++ ret = mbed_if->emac->link_out(p); ++ } ++ else { ++ mbed_if->emac->restart(); ++ ret = mbed_if->emac->link_out(p); ++ } ++ ++ err_t rv = ret ? ERR_OK : ERR_IF; ++ return rv; + } + + void LWIP::Interface::emac_input(emac_mem_buf_t *buf) +diff --git a/connectivity/netsocket/include/netsocket/EMAC.h b/connectivity/netsocket/include/netsocket/EMAC.h +index 515629b5a6..885bc92c01 100644 +--- a/connectivity/netsocket/include/netsocket/EMAC.h ++++ b/connectivity/netsocket/include/netsocket/EMAC.h +@@ -176,6 +176,17 @@ public: + * @param mem_mngr Pointer to memory manager + */ + virtual void set_memory_manager(EMACMemoryManager &mem_mngr) = 0; ++ ++ virtual bool is_ready_to_tx() { ++ return true; ++ } ++ ++ virtual void restart() { ++ } ++ ++ virtual int get_interface_status() { ++ return -1; ++ } + }; + + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_eth.c b/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_eth.c +index decff79455..df797092fc 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_eth.c ++++ b/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/stm32h7xx_hal_eth.c +@@ -2341,13 +2341,7 @@ HAL_StatusTypeDef HAL_ETH_SetWakeUpFilter(ETH_HandleTypeDef *heth, uint32_t *pFi + */ + HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth) + { +- HAL_ETH_StateTypeDef ret; +- HAL_ETH_StateTypeDef gstate = heth->gState; +- HAL_ETH_StateTypeDef rxstate =heth->RxState; +- +- ret = gstate; +- ret |= rxstate; +- return ret; ++ return heth->gState; + } + + /** +-- +2.45.2 + diff --git a/patches/0235-RP2040-add-second_stage_ota-section-to-linker-script.patch b/patches/0235-RP2040-add-second_stage_ota-section-to-linker-script.patch new file mode 100644 index 000000000..875ba721b --- /dev/null +++ b/patches/0235-RP2040-add-second_stage_ota-section-to-linker-script.patch @@ -0,0 +1,28 @@ +From 9819fef4bdb417e3ff9aee08266264b6ec23e075 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Wed, 11 Sep 2024 12:24:01 +0200 +Subject: [PATCH 235/236] RP2040: add second_stage_ota section to linker script + + - This was previously done inside mbed-os-to-arduino script +--- + .../TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld +index ec8bac7e40..8295f3269d 100644 +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld +@@ -54,6 +54,10 @@ SECTIONS + __flash_binary_start = .; + } > FLASH + ++ .second_stage_ota : { ++ KEEP (*(.second_stage_ota)) ++ } > FLASH ++ + .boot2 : { + __boot2_start__ = .; + KEEP (*(.boot2)) +-- +2.45.2 + diff --git a/patches/0236-RP2040-add-simbols-to-linker-script-to-compute-.unin.patch b/patches/0236-RP2040-add-simbols-to-linker-script-to-compute-.unin.patch new file mode 100644 index 000000000..df9c8a642 --- /dev/null +++ b/patches/0236-RP2040-add-simbols-to-linker-script-to-compute-.unin.patch @@ -0,0 +1,27 @@ +From 35b0d95199cb5b9cda593ce4b4029c4306906ccd Mon Sep 17 00:00:00 2001 +From: pennam +Date: Wed, 11 Sep 2024 12:27:03 +0200 +Subject: [PATCH 236/236] RP2040: add simbols to linker script to compute + .uninitialized_data section size + +--- + .../TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld +index 8295f3269d..b748bab5fa 100644 +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld +@@ -183,7 +183,9 @@ SECTIONS + + .uninitialized_data (COPY): { + . = ALIGN(4); ++ __uninitialized_data_start__ = .; + *(.uninitialized_data*) ++ __uninitialized_data_end__ = .; + } > RAM + + /* Start and end symbols must be word-aligned */ +-- +2.45.2 + diff --git a/patches/0237-Watchdog-kick-only-if-watchdog-is-running.patch b/patches/0237-Watchdog-kick-only-if-watchdog-is-running.patch new file mode 100644 index 000000000..32071746a --- /dev/null +++ b/patches/0237-Watchdog-kick-only-if-watchdog-is-running.patch @@ -0,0 +1,31 @@ +From 81a7d47a15e76701b206bce907526b9d9d5888cc Mon Sep 17 00:00:00 2001 +From: pennam +Date: Wed, 2 Oct 2024 11:31:36 +0200 +Subject: [PATCH] Watchdog: kick only if watchdog is running + +--- + drivers/source/Watchdog.cpp | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/drivers/source/Watchdog.cpp b/drivers/source/Watchdog.cpp +index 3f21b94dfb..daca018148 100644 +--- a/drivers/source/Watchdog.cpp ++++ b/drivers/source/Watchdog.cpp +@@ -72,9 +72,11 @@ bool Watchdog::stop() + + void Watchdog::kick() + { +- core_util_critical_section_enter(); +- hal_watchdog_kick(); +- core_util_critical_section_exit(); ++ if (_running) { ++ core_util_critical_section_enter(); ++ hal_watchdog_kick(); ++ core_util_critical_section_exit(); ++ } + } + + bool Watchdog::is_running() const +-- +2.45.2 + diff --git a/patches/0238-WHD-reduce-the-number-of-join-retry.patch b/patches/0238-WHD-reduce-the-number-of-join-retry.patch new file mode 100644 index 000000000..ac90a76e7 --- /dev/null +++ b/patches/0238-WHD-reduce-the-number-of-join-retry.patch @@ -0,0 +1,25 @@ +From 42b018c12eb413383c6ae4f2432be9f0c2d9dbe9 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Mon, 17 Jun 2024 17:11:58 +0200 +Subject: [PATCH] WHD: reduce the number of join retry + +--- + .../drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +index 509a2c0981..c933203d36 100644 +--- a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp ++++ b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +@@ -260,7 +260,7 @@ nsapi_error_t WhdSTAInterface::connect() + { + ScopedMutexLock lock(_iface_shared.mutex); + +-#define MAX_RETRY_COUNT ( 5 ) ++#define MAX_RETRY_COUNT ( 1 ) + int i; + whd_result_t res; + +-- +2.43.0 + diff --git a/patches/0239-WHD-add-join-timeout-parameter-to-WiFiSTAInterface-a.patch b/patches/0239-WHD-add-join-timeout-parameter-to-WiFiSTAInterface-a.patch new file mode 100644 index 000000000..9c5b688a2 --- /dev/null +++ b/patches/0239-WHD-add-join-timeout-parameter-to-WiFiSTAInterface-a.patch @@ -0,0 +1,152 @@ +From efd54c8990ba5b437eb4eb8b786b7e48941b03f1 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Mon, 21 Oct 2024 11:27:36 +0200 +Subject: [PATCH] WHD: add join timeout parameter to WiFiSTAInterface and + drivers + +--- + .../emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp | 7 ++++--- + .../emac/COMPONENT_WHD/interface/WhdSTAInterface.h | 6 ++++++ + .../COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h | 2 +- + .../COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c | 9 ++++++--- + connectivity/netsocket/include/netsocket/WiFiInterface.h | 7 +++++++ + 5 files changed, 24 insertions(+), 7 deletions(-) + +diff --git a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +index c933203d36..f7631a0583 100644 +--- a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp ++++ b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +@@ -211,7 +211,8 @@ WhdSTAInterface::WhdSTAInterface(WHD_EMAC &emac, OnboardNetworkStack &stack, Olm + _security(NSAPI_SECURITY_NONE), + _whd_emac(emac), + _olm(&olm), +- _iface_shared(shared) ++ _iface_shared(shared), ++ _timeout(7000) + { + } + +@@ -334,7 +335,7 @@ nsapi_error_t WhdSTAInterface::connect() + res = (whd_result_t)whd_wifi_join(_whd_emac.ifp, + &ssid, + security, +- (const uint8_t *)_pass, strlen(_pass)); ++ (const uint8_t *)_pass, strlen(_pass), _timeout); + } + else + { +@@ -345,7 +346,7 @@ nsapi_error_t WhdSTAInterface::connect() + res = (whd_result_t)whd_wifi_join(_whd_emac.ifp, + &ssid, + security, +- (const uint8_t *)_pass, key_length); ++ (const uint8_t *)_pass, key_length, _timeout); + } + if (res == WHD_SUCCESS) { + break; +diff --git a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h +index 4dd1098947..bfe933bac7 100644 +--- a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h ++++ b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h +@@ -119,6 +119,11 @@ public: + return 0; + } + ++ nsapi_error_t set_timeout(uint32_t timeout) ++ { ++ _timeout = timeout; ++ } ++ + /** Set blocking status of interface. + * Nonblocking mode unsupported. + * +@@ -257,6 +262,7 @@ private: + nsapi_security_t _security; + WHD_EMAC &_whd_emac; + OlmInterface *_olm; ++ uint32_t _timeout; + whd_interface_shared_info_t &_iface_shared; + }; + +diff --git a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h +index f3b73214cb..291bd23de8 100755 +--- a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h ++++ b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h +@@ -281,7 +281,7 @@ extern uint32_t whd_wifi_stop_scan(whd_interface_t ifp); + * Error code if an error occurred + */ + extern uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type, +- const uint8_t *security_key, uint8_t key_length); ++ const uint8_t *security_key, uint8_t key_length, uint32_t timeout); + + /** Joins a specific Wi-Fi network + * +diff --git a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c +index 5294104ab4..8a8f411ef9 100755 +--- a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c ++++ b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c +@@ -294,6 +294,8 @@ static const uint16_t mcs_data_rate_lookup_table[32][2][2] = + }, + }; + ++static whd_wifi_join_timeout = DEFAULT_JOIN_ATTEMPT_TIMEOUT; ++ + + /****************************************************** + * Static Function prototypes +@@ -1334,7 +1336,7 @@ static uint32_t whd_wifi_join_wait_for_complete(whd_interface_t ifp, cy_semaphor + + while (!done) + { +- result = cy_rtos_get_semaphore(semaphore, DEFAULT_JOIN_ATTEMPT_TIMEOUT / 10, WHD_FALSE); ++ result = cy_rtos_get_semaphore(semaphore, whd_wifi_join_timeout / 10, WHD_FALSE); + whd_assert("Get semaphore failed", (result == CY_RSLT_SUCCESS) || (result == CY_RTOS_TIMEOUT) ); + REFERENCE_DEBUG_ONLY_VARIABLE(result); + +@@ -1345,7 +1347,7 @@ static uint32_t whd_wifi_join_wait_for_complete(whd_interface_t ifp, cy_semaphor + } + + cy_rtos_get_time(¤t_time); +- done = (whd_bool_t)( (current_time - start_time) >= DEFAULT_JOIN_ATTEMPT_TIMEOUT ); ++ done = (whd_bool_t)( (current_time - start_time) >= whd_wifi_join_timeout ); + } + + if (result != WHD_SUCCESS) +@@ -1574,7 +1576,7 @@ uint32_t whd_wifi_join_specific(whd_interface_t ifp, const whd_scan_result_t *ap + } + + uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type, +- const uint8_t *security_key, uint8_t key_length) ++ const uint8_t *security_key, uint8_t key_length, uint32_t timeout) + { + cy_semaphore_t join_sema; + whd_result_t result; +@@ -1616,6 +1618,7 @@ uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security + ssid_params->SSID_len = htod32(ssid->length); + memcpy(ssid_params->SSID, ssid->value, ssid_params->SSID_len); + result = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_SSID, buffer, 0); ++ whd_wifi_join_timeout = timeout; + + if (result == WHD_SUCCESS) + { +diff --git a/connectivity/netsocket/include/netsocket/WiFiInterface.h b/connectivity/netsocket/include/netsocket/WiFiInterface.h +index 4fd7fc6fb8..c13cab4312 100644 +--- a/connectivity/netsocket/include/netsocket/WiFiInterface.h ++++ b/connectivity/netsocket/include/netsocket/WiFiInterface.h +@@ -59,6 +59,13 @@ public: + */ + virtual nsapi_error_t set_channel(uint8_t channel) = 0; + ++ /** Set the Wi-Fi network join timeout. ++ * ++ * @param timeout joint timeout in milliseconds (Default: 7000). ++ * @return NSAPI_ERROR_OK on success, or error code on failure. ++ */ ++ virtual nsapi_error_t set_timeout(uint32_t timeout) = 0; ++ + /** Get the current radio signal strength for active connection. + * + * @return Connection strength in dBm (negative value), +-- +2.45.2 + diff --git a/patches/0240-TLSSocketWrapper-add-read-write-event-flags.patch b/patches/0240-TLSSocketWrapper-add-read-write-event-flags.patch new file mode 100644 index 000000000..bcdc702ce --- /dev/null +++ b/patches/0240-TLSSocketWrapper-add-read-write-event-flags.patch @@ -0,0 +1,69 @@ +From 4369443525c662ddb2ecb15dd9cdba0098e1f01d Mon Sep 17 00:00:00 2001 +From: pennam +Date: Mon, 28 Oct 2024 09:56:31 +0100 +Subject: [PATCH] TLSSocketWrapper: add read/write event flags + + This allows to properly handle timeouts during read write operations +--- + .../netsocket/include/netsocket/TLSSocketWrapper.h | 4 ++++ + connectivity/netsocket/source/TLSSocketWrapper.cpp | 8 ++++---- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h b/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h +index 2dc3b4b000..79fe5c564d 100644 +--- a/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h ++++ b/connectivity/netsocket/include/netsocket/TLSSocketWrapper.h +@@ -379,6 +379,10 @@ private: + Socket *_transport; + int _timeout = -1; + ++ // Event flags ++ static const int READ_FLAG = 0x1u; ++ static const int WRITE_FLAG = 0x2u; ++ + #ifdef MBEDTLS_X509_CRT_PARSE_C + mbedtls_x509_crt *_cacert = nullptr; + mbedtls_x509_crt *_clicert = nullptr; +diff --git a/connectivity/netsocket/source/TLSSocketWrapper.cpp b/connectivity/netsocket/source/TLSSocketWrapper.cpp +index c020cd9f59..3a66be2e5e 100644 +--- a/connectivity/netsocket/source/TLSSocketWrapper.cpp ++++ b/connectivity/netsocket/source/TLSSocketWrapper.cpp +@@ -381,7 +381,7 @@ nsapi_error_t TLSSocketWrapper::continue_handshake() + ret = mbedtls_ssl_handshake(&_ssl); + if (_timeout && (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE)) { + uint32_t flag; +- flag = _event_flag.wait_any(1, _timeout); ++ flag = _event_flag.wait_any(WRITE_FLAG | READ_FLAG, _timeout); + if (flag & osFlagsError) { + break; + } +@@ -461,7 +461,7 @@ nsapi_error_t TLSSocketWrapper::send(const void *data, nsapi_size_t size) + break; + } else if (ret == MBEDTLS_ERR_SSL_WANT_WRITE || ret == MBEDTLS_ERR_SSL_WANT_READ) { + uint32_t flag; +- flag = _event_flag.wait_any(1, _timeout); ++ flag = _event_flag.wait_any(WRITE_FLAG, _timeout); + if (flag & osFlagsError) { + // Timeout break + break; +@@ -522,7 +522,7 @@ nsapi_size_or_error_t TLSSocketWrapper::recv(void *data, nsapi_size_t size) + break; + } else if (ret == MBEDTLS_ERR_SSL_WANT_WRITE || ret == MBEDTLS_ERR_SSL_WANT_READ) { + uint32_t flag; +- flag = _event_flag.wait_any(1, _timeout); ++ flag = _event_flag.wait_any(READ_FLAG, _timeout); + if (flag & osFlagsError) { + // Timeout break + break; +@@ -855,7 +855,7 @@ nsapi_error_t TLSSocketWrapper::listen(int) + + void TLSSocketWrapper::event() + { +- _event_flag.set(1); ++ _event_flag.set(READ_FLAG | WRITE_FLAG); + if (_sigio) { + _sigio(); + } +-- +2.45.2 + diff --git a/patches/0241-Add-methods-for-setting-hostname.patch b/patches/0241-Add-methods-for-setting-hostname.patch new file mode 100644 index 000000000..21c301771 --- /dev/null +++ b/patches/0241-Add-methods-for-setting-hostname.patch @@ -0,0 +1,196 @@ +From 75b34cc20a33c05cbc01b3fbdabbfc40ae034bef Mon Sep 17 00:00:00 2001 +From: Guilherme Ricioli +Date: Mon, 15 Apr 2024 17:40:59 -0300 +Subject: [PATCH] Add methods for setting hostname + +In the same way it is done for setting MAC address, add methods for +setting hostname. The underlying network stack can then request this +to the local DNS through DHCP. +--- + .../include/netsocket/EMACInterface.h | 8 ++++++ + .../include/netsocket/NetworkInterface.h | 16 ++++++++++++ + .../netsocket/include/netsocket/nsapi_types.h | 10 +++++++ + .../netsocket/source/EMACInterface.cpp | 26 +++++++++++++++++++ + .../netsocket/source/NetworkInterface.cpp | 10 +++++++ + .../doubles/NetworkInterface_stub.cpp | 10 +++++++ + .../test_NetworkInterface.cpp | 11 ++++++++ + 7 files changed, 91 insertions(+) + +diff --git a/connectivity/netsocket/include/netsocket/EMACInterface.h b/connectivity/netsocket/include/netsocket/EMACInterface.h +index 8cf47cb703..c06aeb850e 100644 +--- a/connectivity/netsocket/include/netsocket/EMACInterface.h ++++ b/connectivity/netsocket/include/netsocket/EMACInterface.h +@@ -83,6 +83,12 @@ public: + /** @copydoc NetworkInterface::disconnect */ + nsapi_error_t disconnect() override; + ++ /** @copydoc NetworkInterface::get_hostname */ ++ const char *get_hostname() override; ++ ++ /** @copydoc NetworkInterface::set_hostname */ ++ nsapi_error_t set_hostname(const char *hostname) override; ++ + /** @copydoc NetworkInterface::get_mac_address */ + const char *get_mac_address() override; + +@@ -146,6 +152,8 @@ protected: + OnboardNetworkStack::Interface *_interface = nullptr; + bool _dhcp = true; + bool _blocking = true; ++ bool _hostname_set = false; ++ char _hostname[NSAPI_HOSTNAME_SIZE]; + bool _hw_mac_addr_set = false; + char _mac_address[NSAPI_MAC_SIZE]; + char _ip_address[NSAPI_IPv6_SIZE] {}; +diff --git a/connectivity/netsocket/include/netsocket/NetworkInterface.h b/connectivity/netsocket/include/netsocket/NetworkInterface.h +index 9071a1e40b..81f6011950 100644 +--- a/connectivity/netsocket/include/netsocket/NetworkInterface.h ++++ b/connectivity/netsocket/include/netsocket/NetworkInterface.h +@@ -90,6 +90,22 @@ public: + */ + virtual void set_as_default(); + ++ /** Get hostname. ++ * ++ * @return Hostname if configured, null otherwise ++ */ ++ virtual const char *get_hostname(); ++ ++ /** Set hostname. ++ * ++ * @param hostname Hostname string ++ * @retval NSAPI_ERROR_OK on success ++ * @retval NSAPI_ERROR_UNSUPPORTED if this feature is not supported ++ * @retval NSAPI_ERROR_PARAMETER if hostname is not valid ++ * @retval NSAPI_ERROR_BUSY if hostname couldn't be set ++ */ ++ virtual nsapi_error_t set_hostname(const char *hostname); ++ + /** Get the local MAC address. + * + * Provided MAC address is intended for info or debug purposes and +diff --git a/connectivity/netsocket/include/netsocket/nsapi_types.h b/connectivity/netsocket/include/netsocket/nsapi_types.h +index 3b496d5087..28dbcc9a38 100644 +--- a/connectivity/netsocket/include/netsocket/nsapi_types.h ++++ b/connectivity/netsocket/include/netsocket/nsapi_types.h +@@ -196,6 +196,16 @@ typedef enum nsapi_security { + */ + #define NSAPI_IP_BYTES NSAPI_IPv6_BYTES + ++/** Maximum size of hostname ++ * ++ * According to RFC 1034 [1], Section 3.1 "Name space specifications and ++ * terminology", 63 is the maximum size of a hostname. +1 for the string ++ * terminator. ++ * ++ * [1] https://www.rfc-editor.org/rfc/rfc1034 ++ */ ++#define NSAPI_HOSTNAME_SIZE 64 ++ + /** Maximum size of MAC address representation + */ + #define NSAPI_MAC_SIZE 18 +diff --git a/connectivity/netsocket/source/EMACInterface.cpp b/connectivity/netsocket/source/EMACInterface.cpp +index f48bc0a185..de8d9753d7 100644 +--- a/connectivity/netsocket/source/EMACInterface.cpp ++++ b/connectivity/netsocket/source/EMACInterface.cpp +@@ -88,6 +88,32 @@ nsapi_error_t EMACInterface::disconnect() + return NSAPI_ERROR_NO_CONNECTION; + } + ++const char *EMACInterface::get_hostname() ++{ ++ if (_hostname_set) { ++ return _hostname; ++ } ++ return nullptr; ++} ++ ++nsapi_error_t EMACInterface::set_hostname(const char *hostname) ++{ ++ if (!hostname || strlen(hostname) > NSAPI_HOSTNAME_SIZE - 1) { ++ return NSAPI_ERROR_PARAMETER; ++ } ++ ++ if (_interface) { ++ // can't set hostname once initialized ++ return NSAPI_ERROR_BUSY; ++ } ++ ++ memset(_hostname, 0, NSAPI_HOSTNAME_SIZE); ++ strncpy(_hostname, hostname, NSAPI_HOSTNAME_SIZE - 1); ++ _hostname_set = true; ++ ++ return NSAPI_ERROR_OK; ++} ++ + const char *EMACInterface::get_mac_address() + { + if (_interface && _interface->get_mac_address(_mac_address, sizeof(_mac_address))) { +diff --git a/connectivity/netsocket/source/NetworkInterface.cpp b/connectivity/netsocket/source/NetworkInterface.cpp +index 0f237f0e19..649df0f9b3 100644 +--- a/connectivity/netsocket/source/NetworkInterface.cpp ++++ b/connectivity/netsocket/source/NetworkInterface.cpp +@@ -29,6 +29,16 @@ void NetworkInterface::set_as_default() + + } + ++const char *NetworkInterface::get_hostname() ++{ ++ return 0; ++} ++ ++nsapi_error_t NetworkInterface::set_hostname(const char *hostname) ++{ ++ return NSAPI_ERROR_UNSUPPORTED; ++} ++ + const char *NetworkInterface::get_mac_address() + { + return 0; +diff --git a/connectivity/netsocket/tests/UNITTESTS/doubles/NetworkInterface_stub.cpp b/connectivity/netsocket/tests/UNITTESTS/doubles/NetworkInterface_stub.cpp +index 020a551ba9..c849704a35 100644 +--- a/connectivity/netsocket/tests/UNITTESTS/doubles/NetworkInterface_stub.cpp ++++ b/connectivity/netsocket/tests/UNITTESTS/doubles/NetworkInterface_stub.cpp +@@ -21,6 +21,16 @@ + + + // Default network-interface state ++const char *NetworkInterface::get_hostname() ++{ ++ return 0; ++} ++ ++nsapi_error_t NetworkInterface::set_hostname(const char *hostname) ++{ ++ return NSAPI_ERROR_UNSUPPORTED; ++} ++ + const char *NetworkInterface::get_mac_address() + { + return 0; +diff --git a/connectivity/netsocket/tests/UNITTESTS/netsocket/NetworkInterface/test_NetworkInterface.cpp b/connectivity/netsocket/tests/UNITTESTS/netsocket/NetworkInterface/test_NetworkInterface.cpp +index 1a928c36ee..27433ffaa1 100644 +--- a/connectivity/netsocket/tests/UNITTESTS/netsocket/NetworkInterface/test_NetworkInterface.cpp ++++ b/connectivity/netsocket/tests/UNITTESTS/netsocket/NetworkInterface/test_NetworkInterface.cpp +@@ -68,6 +68,17 @@ TEST_F(TestNetworkInterface, constructor) + } + + // get_default_instance is tested along with the implementations of NetworkInterface. ++TEST_F(TestNetworkInterface, get_hostname) ++{ ++ char *n = 0; ++ EXPECT_EQ(iface->get_hostname(), n); ++} ++ ++TEST_F(TestNetworkInterface, set_hostname) ++{ ++ char *hostname; ++ EXPECT_EQ(iface->set_hostname(hostname), NSAPI_ERROR_UNSUPPORTED); ++} + + TEST_F(TestNetworkInterface, get_mac_address) + { +-- +2.45.2 + diff --git a/patches/0242-Request-hostname-through-DHCP.patch b/patches/0242-Request-hostname-through-DHCP.patch new file mode 100644 index 000000000..e2a383900 --- /dev/null +++ b/patches/0242-Request-hostname-through-DHCP.patch @@ -0,0 +1,53 @@ +From 091ea74d6956d6684bcd88ed842a73218a7b8bd3 Mon Sep 17 00:00:00 2001 +From: Guilherme Ricioli +Date: Tue, 16 Apr 2024 10:50:48 -0300 +Subject: [PATCH] Request hostname through DHCP + +If hostname is provided, request it to local DNS through DHCP. +--- + connectivity/lwipstack/source/LWIPInterface.cpp | 6 ++++++ + connectivity/netsocket/include/netsocket/NetworkInterface.h | 4 +++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/connectivity/lwipstack/source/LWIPInterface.cpp b/connectivity/lwipstack/source/LWIPInterface.cpp +index dfefebcb8b..64869a3538 100644 +--- a/connectivity/lwipstack/source/LWIPInterface.cpp ++++ b/connectivity/lwipstack/source/LWIPInterface.cpp +@@ -437,6 +437,7 @@ LWIP::Interface::Interface() : + nsapi_error_t LWIP::add_ethernet_interface(EMAC &emac, bool default_if, OnboardNetworkStack::Interface **interface_out, NetworkInterface *user_network_interface) + { + #if LWIP_ETHERNET ++ const char *hostname; + Interface *interface = new (std::nothrow) Interface(); + if (!interface) { + return NSAPI_ERROR_NO_MEMORY; +@@ -445,6 +446,11 @@ nsapi_error_t LWIP::add_ethernet_interface(EMAC &emac, bool default_if, OnboardN + interface->memory_manager = &memory_manager; + interface->ppp_enabled = false; + ++ hostname = user_network_interface->get_hostname(); ++ if (hostname) { ++ netif_set_hostname(&interface->netif, hostname); ++ } ++ + #if (MBED_MAC_ADDRESS_SUM != MBED_MAC_ADDR_INTERFACE) + netif->interface.hwaddr[0] = MBED_MAC_ADDR_0; + netif->interface.hwaddr[1] = MBED_MAC_ADDR_1; +diff --git a/connectivity/netsocket/include/netsocket/NetworkInterface.h b/connectivity/netsocket/include/netsocket/NetworkInterface.h +index 81f6011950..22355767ce 100644 +--- a/connectivity/netsocket/include/netsocket/NetworkInterface.h ++++ b/connectivity/netsocket/include/netsocket/NetworkInterface.h +@@ -102,7 +102,9 @@ public: + * @retval NSAPI_ERROR_OK on success + * @retval NSAPI_ERROR_UNSUPPORTED if this feature is not supported + * @retval NSAPI_ERROR_PARAMETER if hostname is not valid +- * @retval NSAPI_ERROR_BUSY if hostname couldn't be set ++ * @retval NSAPI_ERROR_BUSY if hostname couldn't be set (e.g. for ++ * LwIP stack, hostname can only be set before calling ++ * \c EthernetInterface::connect method) + */ + virtual nsapi_error_t set_hostname(const char *hostname); + +-- +2.45.2 + diff --git a/patches/0243-WhdSTA-allow-hostname-configuration.patch b/patches/0243-WhdSTA-allow-hostname-configuration.patch new file mode 100644 index 000000000..9fea05c90 --- /dev/null +++ b/patches/0243-WhdSTA-allow-hostname-configuration.patch @@ -0,0 +1,25 @@ +From b6c62d169e750de6e5af3a47bc6c0c2a1fc81c88 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Thu, 3 Oct 2024 18:05:26 +0200 +Subject: [PATCH] WhdSTA allow hostname configuration + +--- + .../drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +index 509a2c0981..ba1fa7900a 100644 +--- a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp ++++ b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +@@ -280,7 +280,7 @@ nsapi_error_t WhdSTAInterface::connect() + _iface_shared.if_status_flags |= IF_STATUS_STA_UP; + _iface_shared.default_if_cfg = DEFAULT_IF_STA; + if (!_interface) { +- nsapi_error_t err = _stack.add_ethernet_interface(_emac, true, &_interface); ++ nsapi_error_t err = _stack.add_ethernet_interface(_emac, true, &_interface, this); + if (err != NSAPI_ERROR_OK) { + _interface = NULL; + return err; +-- +2.45.2 + diff --git a/patches/0244-Add-user-network-interface-check-before-reading-host.patch b/patches/0244-Add-user-network-interface-check-before-reading-host.patch new file mode 100644 index 000000000..52d3e79b9 --- /dev/null +++ b/patches/0244-Add-user-network-interface-check-before-reading-host.patch @@ -0,0 +1,31 @@ +From 4292f8b7c4aa38b68d22c413f91bdc95192cfad6 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Tue, 29 Oct 2024 11:30:00 +0100 +Subject: [PATCH] Add user network interface check before reading hostname + +--- + connectivity/lwipstack/source/LWIPInterface.cpp | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/connectivity/lwipstack/source/LWIPInterface.cpp b/connectivity/lwipstack/source/LWIPInterface.cpp +index 64869a3538..da964543c7 100644 +--- a/connectivity/lwipstack/source/LWIPInterface.cpp ++++ b/connectivity/lwipstack/source/LWIPInterface.cpp +@@ -446,9 +446,11 @@ nsapi_error_t LWIP::add_ethernet_interface(EMAC &emac, bool default_if, OnboardN + interface->memory_manager = &memory_manager; + interface->ppp_enabled = false; + +- hostname = user_network_interface->get_hostname(); +- if (hostname) { +- netif_set_hostname(&interface->netif, hostname); ++ if (user_network_interface) { ++ hostname = user_network_interface->get_hostname(); ++ if (hostname) { ++ netif_set_hostname(&interface->netif, hostname); ++ } + } + + #if (MBED_MAC_ADDRESS_SUM != MBED_MAC_ADDR_INTERFACE) +-- +2.45.2 + diff --git a/patches/0245-WHD-fix-WhdSTAInterface-add-return-value-to-set_time.patch b/patches/0245-WHD-fix-WhdSTAInterface-add-return-value-to-set_time.patch new file mode 100644 index 000000000..b96a94888 --- /dev/null +++ b/patches/0245-WHD-fix-WhdSTAInterface-add-return-value-to-set_time.patch @@ -0,0 +1,24 @@ +From 310f0dd40c5b070ea2077c8a580f777a5cf17951 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Tue, 7 Jan 2025 09:47:09 +0100 +Subject: [PATCH] WHD: fix WhdSTAInterface, add return value to set_timeout + +--- + .../drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h +index bfe933bac7..8d8f540759 100644 +--- a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h ++++ b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h +@@ -122,6 +122,7 @@ public: + nsapi_error_t set_timeout(uint32_t timeout) + { + _timeout = timeout; ++ return NSAPI_ERROR_OK; + } + + /** Set blocking status of interface. +-- +2.45.2 + diff --git a/patches/0246-WHD-remove-v-from-WHD_VERSION-define.patch b/patches/0246-WHD-remove-v-from-WHD_VERSION-define.patch new file mode 100644 index 000000000..8d0289263 --- /dev/null +++ b/patches/0246-WHD-remove-v-from-WHD_VERSION-define.patch @@ -0,0 +1,25 @@ +From fa1e9697ca3b74489bd2eb08ab9ab1ffeee2a298 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Fri, 31 Jan 2025 16:34:05 +0100 +Subject: [PATCH 246/247] WHD: remove v from WHD_VERSION define + +--- + .../wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h +index 1caef23b67..5f69d8c3e0 100755 +--- a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h ++++ b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_version.h +@@ -15,6 +15,7 @@ + * limitations under the License. + */ + +-#define WHD_VERSION "v1.94.0" ++/* This define is used by arduino::WiFiClass::firmwareVersion() do not prepend v */ ++#define WHD_VERSION "1.94.0" + #define WHD_BRANCH "v1.94.0" + #define WHD_DATE "2021-04-27 16:54:34 +0800" +-- +2.47.2 + diff --git a/patches/0247-ICMPSocket-add-ping.patch b/patches/0247-ICMPSocket-add-ping.patch new file mode 100644 index 000000000..2019bcb0c --- /dev/null +++ b/patches/0247-ICMPSocket-add-ping.patch @@ -0,0 +1,106 @@ +From 933694e0f35451d21eed77a93fa346570de20878 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Tue, 4 Feb 2025 14:31:59 +0100 +Subject: [PATCH] ICMPSocket: add ping + +--- + .../netsocket/include/netsocket/ICMPSocket.h | 4 ++ + connectivity/netsocket/source/ICMPSocket.cpp | 61 +++++++++++++++++++ + 2 files changed, 65 insertions(+) + +diff --git a/connectivity/netsocket/include/netsocket/ICMPSocket.h b/connectivity/netsocket/include/netsocket/ICMPSocket.h +index 1837bc8e09..5e1ee8fb03 100644 +--- a/connectivity/netsocket/include/netsocket/ICMPSocket.h ++++ b/connectivity/netsocket/include/netsocket/ICMPSocket.h +@@ -37,6 +37,10 @@ public: + */ + ICMPSocket(); + ++#if MBED_CONF_LWIP_RAW_SOCKET_ENABLED ++ int ping(SocketAddress &socketAddress, uint32_t timeout); ++#endif ++ + #if !defined(DOXYGEN_ONLY) + + protected: +diff --git a/connectivity/netsocket/source/ICMPSocket.cpp b/connectivity/netsocket/source/ICMPSocket.cpp +index f6c9b98de1..d8ea954835 100644 +--- a/connectivity/netsocket/source/ICMPSocket.cpp ++++ b/connectivity/netsocket/source/ICMPSocket.cpp +@@ -16,12 +16,73 @@ + */ + + #include "ICMPSocket.h" ++#if MBED_CONF_LWIP_RAW_SOCKET_ENABLED ++#include "drivers/Timer.h" ++#include "lwip/prot/icmp.h" ++#include "lwip/inet_chksum.h" ++#include "lwip/prot/ip4.h" ++#endif + + ICMPSocket::ICMPSocket() + { + _socket_stats.stats_update_proto(this, NSAPI_ICMP); + } + ++#if MBED_CONF_LWIP_RAW_SOCKET_ENABLED ++int ICMPSocket::ping(SocketAddress &socketAddress, uint32_t timeout) ++{ ++ struct __attribute__((__packed__)) { ++ struct icmp_echo_hdr header; ++ uint8_t data[32]; ++ } request; ++ ++ ICMPH_TYPE_SET(&request.header, ICMP_ECHO); ++ ICMPH_CODE_SET(&request.header, 0); ++ request.header.chksum = 0; ++ request.header.id = 0xAFAF; ++ request.header.seqno = random(); ++ ++ for (size_t i = 0; i < sizeof(request.data); i++) { ++ request.data[i] = i; ++ } ++ ++ request.header.chksum = inet_chksum(&request, sizeof(request)); ++ ++ int res = sendto(socketAddress, &request, sizeof(request)); ++ if (res <= 0){ ++ return -1; ++ } ++ ++ mbed::Timer timer; ++ timer.start(); ++ int elapsed = -1; ++ do { ++ struct __attribute__((__packed__)) { ++ struct ip_hdr ipHeader; ++ struct icmp_echo_hdr header; ++ } response; ++ ++ int rxSize = recvfrom(&socketAddress, &response, sizeof(response)); ++ if (rxSize < 0) { ++ // time out ++ break; ++ } ++ ++ if (rxSize < sizeof(response)) { ++ // too short ++ continue; ++ } ++ ++ if ((response.header.id == request.header.id) && (response.header.seqno == request.header.seqno)) { ++ elapsed = std::chrono::duration_cast(timer.elapsed_time()).count(); ++ timer.stop(); ++ } ++ } while (elapsed == -1 && std::chrono::duration_cast(timer.elapsed_time()).count() < timeout); ++ ++ return elapsed; ++} ++#endif ++ + nsapi_protocol_t ICMPSocket::get_proto() + { + return NSAPI_ICMP; +-- +2.47.2 + diff --git a/platform.txt b/platform.txt index 4ab18ab42..3ace82eab 100644 --- a/platform.txt +++ b/platform.txt @@ -4,8 +4,8 @@ # For more info: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification -name=Arduino Mbed OS Boards -version= +name=Arduino Mbed OS Boards +version=9.9.9 # Compile variables # ------------------------ @@ -125,11 +125,11 @@ tools.openocd.cmd.windows=bin/openocd.exe tools.openocd.upload.params.verbose=-d2 tools.openocd.upload.params.quiet=-d0 -tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" {bootloader.programmer} {upload.transport} {bootloader.config} -c "telnet_port disabled; init; reset init; halt; adapter speed 10000; program {{build.path}/{build.project_name}.elf}; reset run; shutdown" +tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f interface/{programmer.protocol}.cfg -f {programmer.transport_script} {bootloader.config} -c "telnet_port disabled; init; reset init; halt; adapter speed 10000; program {{build.path}/{build.project_name}.elf}; reset run; shutdown" tools.openocd.program.params.verbose=-d2 tools.openocd.program.params.quiet=-d0 -tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" {bootloader.programmer} {upload.transport} {bootloader.config} -c "telnet_port disabled; init; reset init; halt; adapter speed 10000; program {{build.path}/{build.project_name}.elf}; reset run; shutdown" +tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f interface/{programmer.protocol}.cfg -f {programmer.transport_script} {bootloader.config} -c "telnet_port disabled; init; reset init; halt; adapter speed 10000; program {{build.path}/{build.project_name}.elf}; reset run; shutdown" tools.openocd.erase.params.verbose=-d2 tools.openocd.erase.params.quiet=-d0 @@ -137,7 +137,7 @@ tools.openocd.erase.pattern= tools.openocd.bootloader.params.verbose=-d2 tools.openocd.bootloader.params.quiet=-d0 -tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" {bootloader.programmer} {upload.transport} {bootloader.config} -c "telnet_port disabled; init; reset init; halt; adapter speed 10000; {bootloader.extra_action.preflash}; program {{runtime.platform.path}/bootloaders/{bootloader.file}}; reset run; shutdown" +tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f interface/{programmer.protocol}.cfg -f {programmer.transport_script} {bootloader.config} -c "telnet_port disabled; init; reset init; halt; adapter speed 10000; {bootloader.extra_action.preflash}; program {{runtime.platform.path}/bootloaders/{bootloader.file}}; reset run; shutdown" # # BOSSA @@ -204,12 +204,25 @@ tools.adb.upload.params.quiet= tools.adb.upload.pattern="{path}/{cmd}" push "{build.path}/{build.project_name}.elf" "/tmp/arduino/m4-user-sketch.elf" # -# GDB (Debugger) +# Debugger # -# EXPERIMENTAL feature: debug.pattern -# - this is alpha and may be subject to change without notice tools.gdb.path={runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/ tools.gdb.cmd=arm-none-eabi-gdb tools.gdb.cmd.windows=arm-none-eabi-gdb.exe -tools.gdb.debug.pattern="{path}/{cmd}" --interpreter=mi2 -ex "set pagination off" --baud 115200 -ex "set target-charset ASCII" -ex "target remote {debug.port}" {build.path}/{build.project_name}.elf + +debug.executable={build.path}/{build.project_name}.elf +debug.toolchain=gcc +debug.toolchain.path={runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/ +debug.toolchain.prefix=arm-none-eabi +debug.server=openocd +debug.server.openocd.path={runtime.tools.openocd-0.11.0-arduino2.path}/bin/openocd +debug.server.openocd.scripts_dir={runtime.tools.openocd-0.11.0-arduino2.path}/share/openocd/scripts/ + +debug.cortex-debug.custom.postAttachCommands.0=set remote hardware-watchpoint-limit 2 +debug.cortex-debug.custom.postAttachCommands.1=monitor reset halt +debug.cortex-debug.custom.postAttachCommands.2=monitor gdb_sync +debug.cortex-debug.custom.postAttachCommands.3=c +debug.cortex-debug.custom.overrideRestartCommands.0=monitor reset halt +debug.cortex-debug.custom.overrideRestartCommands.1=monitor gdb_sync +debug.cortex-debug.custom.overrideRestartCommands.2=c diff --git a/portenta.variables b/portenta.variables index 8ae4b3f2b..2c07268fb 100644 --- a/portenta.variables +++ b/portenta.variables @@ -1,5 +1,5 @@ export FLAVOUR="portenta" -export VARIANTS=("PORTENTA_H7_M7 PORTENTA_H7_M4 PORTENTA_X8") +export VARIANTS=("PORTENTA_H7_M7 GENERIC_STM32H747_M4 PORTENTA_X8") export FQBNS=("envie_m7 portenta_x8") export LIBRARIES=("doom Ethernet MRI Portenta_SDRAM SPI WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug Himax_HM01B0 Himax_HM0360 PDM Arduino_H7_Video USBAudio KernelDebug Portenta_Audio RPC USBHID Wire Portenta_lvgl Camera rpclib USBHOST mbed-memory-status Portenta_SDCARD Scheduler USBMSD USBMIDI SocketWrapper GSM GPS MCUboot Arduino_CAN") export BOOTLOADERS=("PORTENTA_H7") diff --git a/post_install.sh b/post_install.sh index 336ffd4a6..66b668b1a 100755 --- a/post_install.sh +++ b/post_install.sh @@ -12,14 +12,31 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="0525", MODE:="0666" EOF } -if [ "$EUID" -ne 0 ] - then echo "Please run as root" - exit -fi +OS="$(uname -s)" +case "$OS" in +Linux*) + if [ "$EUID" -ne 0 ]; then + if [ -e "${PWD}/post_install.sh" ]; then + echo + echo "You might need to configure permissions for uploading." + echo "To do so, run the following command from the terminal:" + echo "sudo \"${PWD}/post_install.sh\"" + echo + else + # Script was executed from another path. It is assumed this will only occur when user is executing script directly. + # So it is not necessary to provide the command line. + echo "Please run as root" + fi -arduino_mbed_rules > /etc/udev/rules.d/60-arduino-mbed.rules + exit + fi -# reload udev rules -echo "Reload rules..." -udevadm trigger -udevadm control --reload-rules + arduino_mbed_rules > /etc/udev/rules.d/60-arduino-mbed.rules + + # reload udev rules + echo "Reload rules..." + udevadm trigger + udevadm control --reload-rules + + ;; +esac diff --git a/programmers.txt b/programmers.txt index d3f75cea1..91a0ce01d 100644 --- a/programmers.txt +++ b/programmers.txt @@ -5,6 +5,8 @@ cmsis-dap.program.protocol= cmsis-dap.program.tool=openocd cmsis-dap.program.tool.default=openocd cmsis-dap.program.extra_params= +cmsis-dap.programmer.protocol=cmsis-dap +cmsis-dap.programmer.transport_script={runtime.platform.path}/debugger/select_swd.cfg stlink.name=STMicroelectronics STLINK stlink.communication=USB @@ -12,4 +14,25 @@ stlink.protocol= stlink.program.protocol= stlink.program.tool=openocd stlink.program.tool.default=openocd -stlink.program.extra_params= \ No newline at end of file +stlink.program.extra_params= +stlink.programmer.protocol=stlink +stlink.programmer.transport_script={runtime.platform.path}/debugger/select_hla.cfg + +jlink.name=JLink +jlink.communication=USB +jlink.protocol= +jlink.program.protocol= +jlink.program.tool=openocd +jlink.program.tool.default=openocd +jlink.program.extra_params= +jlink.programmer.protocol=jlink +jlink.programmer.transport_script={runtime.platform.path}/debugger/select_swd.cfg + +blackmagic.name=BlackMagic +blackmagic.communication=USB +blackmagic.protocol= +blackmagic.program.protocol= +blackmagic.program.tool= +blackmagic.program.tool.default= +blackmagic.program.extra_params= +blackmagic.debug.server=bmp diff --git a/svd/STM32H747_CM4.svd b/svd/STM32H747_CM4.svd new file mode 100644 index 000000000..e65915289 --- /dev/null +++ b/svd/STM32H747_CM4.svd @@ -0,0 +1,109474 @@ + + + STM32H747_CM4 + 1.2 + STM32H747_CM4 + + CM4 + r0p1 + little + true + true + 4 + false + + + + 8 + + 32 + + 0x20 + 0x0 + 0xFFFFFFFF + + + COMP1 + COMP1 + COMP1 + 0x58003800 + + 0x0 + 0x400 + registers + + + COMP + COMP1 and COMP2 + 137 + + + + SR + SR + Comparator status register + 0x0 + 0x20 + read-only + 0x00000000 + + + C1VAL + COMP channel 1 output status + bit + 0 + 1 + + + C2VAL + COMP channel 2 output status + bit + 1 + 1 + + + C1IF + COMP channel 1 Interrupt + Flag + 16 + 1 + + + C2IF + COMP channel 2 Interrupt + Flag + 17 + 1 + + + + + ICFR + ICFR + Comparator interrupt clear flag + register + 0x4 + 0x20 + write-only + 0x00000000 + + + CC1IF + Clear COMP channel 1 Interrupt + Flag + 16 + 1 + + + CC2IF + Clear COMP channel 2 Interrupt + Flag + 17 + 1 + + + + + OR + OR + Comparator option register + 0x8 + 0x20 + read-write + 0x00000000 + + + AFOP + Selection of source for alternate + function of output ports + 0 + 11 + + + OR + Option Register + 11 + 21 + + + + + CFGR1 + CFGR1 + Comparator configuration register + 1 + 0xC + 0x20 + read-write + 0x00000000 + + + EN + COMP channel 1 enable bit + 0 + 1 + + + BRGEN + Scaler bridge enable + 1 + 1 + + + SCALEN + Voltage scaler enable bit + 2 + 1 + + + POLARITY + COMP channel 1 polarity selection + bit + 3 + 1 + + + ITEN + COMP channel 1 interrupt + enable + 6 + 1 + + + HYST + COMP channel 1 hysteresis selection + bits + 8 + 2 + + + PWRMODE + Power Mode of the COMP channel + 1 + 12 + 2 + + + INMSEL + COMP channel 1 inverting input selection + field + 16 + 3 + + + INPSEL + COMP channel 1 non-inverting input + selection bit + 20 + 1 + + + BLANKING + COMP channel 1 blanking source selection + bits + 24 + 4 + + + LOCK + Lock bit + 31 + 1 + + + + + CFGR2 + CFGR2 + Comparator configuration register + 2 + 0x10 + 0x20 + read-write + 0x00000000 + + + EN + COMP channel 1 enable bit + 0 + 1 + + + BRGEN + Scaler bridge enable + 1 + 1 + + + SCALEN + Voltage scaler enable bit + 2 + 1 + + + POLARITY + COMP channel 1 polarity selection + bit + 3 + 1 + + + WINMODE + Window comparator mode selection + bit + 4 + 1 + + + ITEN + COMP channel 1 interrupt + enable + 6 + 1 + + + HYST + COMP channel 1 hysteresis selection + bits + 8 + 2 + + + PWRMODE + Power Mode of the COMP channel + 1 + 12 + 2 + + + INMSEL + COMP channel 1 inverting input selection + field + 16 + 3 + + + INPSEL + COMP channel 1 non-inverting input + selection bit + 20 + 1 + + + BLANKING + COMP channel 1 blanking source selection + bits + 24 + 4 + + + LOCK + Lock bit + 31 + 1 + + + + + + + CRS + CRS + CRS + 0x40008400 + + 0x0 + 0x400 + registers + + + CRS + Clock Recovery System globa + 144 + + + + CR + CR + CRS control register + 0x0 + 0x20 + 0x00002000 + + + SYNCOKIE + SYNC event OK interrupt + enable + 0 + 1 + read-write + + + SYNCWARNIE + SYNC warning interrupt + enable + 1 + 1 + read-write + + + ERRIE + Synchronization or trimming error + interrupt enable + 2 + 1 + read-write + + + ESYNCIE + Expected SYNC interrupt + enable + 3 + 1 + read-write + + + CEN + Frequency error counter enable This bit + enables the oscillator clock for the frequency error + counter. When this bit is set, the CRS_CFGR register + is write-protected and cannot be + modified. + 5 + 1 + read-write + + + AUTOTRIMEN + Automatic trimming enable This bit + enables the automatic hardware adjustment of TRIM + bits according to the measured frequency error + between two SYNC events. If this bit is set, the TRIM + bits are read-only. The TRIM value can be adjusted by + hardware by one or two steps at a time, depending on + the measured frequency error value. Refer to + Section7.3.4: Frequency error evaluation and + automatic trimming for more details. + 6 + 1 + read-write + + + SWSYNC + Generate software SYNC event This bit is + set by software in order to generate a software SYNC + event. It is automatically cleared by + hardware. + 7 + 1 + read-only + + + TRIM + HSI48 oscillator smooth trimming These + bits provide a user-programmable trimming value to + the HSI48 oscillator. They can be programmed to + adjust to variations in voltage and temperature that + influence the frequency of the HSI48. The default + value is 32, which corresponds to the middle of the + trimming interval. The trimming step is around 67 kHz + between two consecutive TRIM steps. A higher TRIM + value corresponds to a higher output frequency. When + the AUTOTRIMEN bit is set, this field is controlled + by hardware and is read-only. + 8 + 6 + read-write + + + + + CFGR + CFGR + This register can be written only when the + frequency error counter is disabled (CEN bit is cleared + in CRS_CR). When the counter is enabled, this register is + write-protected. + 0x4 + 0x20 + read-write + 0x2022BB7F + + + RELOAD + Counter reload value RELOAD is the value + to be loaded in the frequency error counter with each + SYNC event. Refer to Section7.3.3: Frequency error + measurement for more details about counter + behavior. + 0 + 16 + + + FELIM + Frequency error limit FELIM contains the + value to be used to evaluate the captured frequency + error value latched in the FECAP[15:0] bits of the + CRS_ISR register. Refer to Section7.3.4: Frequency + error evaluation and automatic trimming for more + details about FECAP evaluation. + 16 + 8 + + + SYNCDIV + SYNC divider These bits are set and + cleared by software to control the division factor of + the SYNC signal. + 24 + 3 + + + SYNCSRC + SYNC signal source selection These bits + are set and cleared by software to select the SYNC + signal source. Note: When using USB LPM (Link Power + Management) and the device is in Sleep mode, the + periodic USB SOF will not be generated by the host. + No SYNC signal will therefore be provided to the CRS + to calibrate the HSI48 on the run. To guarantee the + required clock precision after waking up from Sleep + mode, the LSE or reference clock on the GPIOs should + be used as SYNC signal. + 28 + 2 + + + SYNCPOL + SYNC polarity selection This bit is set + and cleared by software to select the input polarity + for the SYNC signal source. + 31 + 1 + + + + + ISR + ISR + CRS interrupt and status + register + 0x8 + 0x20 + read-only + 0x00000000 + + + SYNCOKF + SYNC event OK flag This flag is set by + hardware when the measured frequency error is smaller + than FELIM * 3. This means that either no adjustment + of the TRIM value is needed or that an adjustment by + one trimming step is enough to compensate the + frequency error. An interrupt is generated if the + SYNCOKIE bit is set in the CRS_CR register. It is + cleared by software by setting the SYNCOKC bit in the + CRS_ICR register. + 0 + 1 + + + SYNCWARNF + SYNC warning flag This flag is set by + hardware when the measured frequency error is greater + than or equal to FELIM * 3, but smaller than FELIM * + 128. This means that to compensate the frequency + error, the TRIM value must be adjusted by two steps + or more. An interrupt is generated if the SYNCWARNIE + bit is set in the CRS_CR register. It is cleared by + software by setting the SYNCWARNC bit in the CRS_ICR + register. + 1 + 1 + + + ERRF + Error flag This flag is set by hardware + in case of any synchronization or trimming error. It + is the logical OR of the TRIMOVF, SYNCMISS and + SYNCERR bits. An interrupt is generated if the ERRIE + bit is set in the CRS_CR register. It is cleared by + software in reaction to setting the ERRC bit in the + CRS_ICR register, which clears the TRIMOVF, SYNCMISS + and SYNCERR bits. + 2 + 1 + + + ESYNCF + Expected SYNC flag This flag is set by + hardware when the frequency error counter reached a + zero value. An interrupt is generated if the ESYNCIE + bit is set in the CRS_CR register. It is cleared by + software by setting the ESYNCC bit in the CRS_ICR + register. + 3 + 1 + + + SYNCERR + SYNC error This flag is set by hardware + when the SYNC pulse arrives before the ESYNC event + and the measured frequency error is greater than or + equal to FELIM * 128. This means that the frequency + error is too big (internal frequency too low) to be + compensated by adjusting the TRIM value, and that + some other action should be taken. An interrupt is + generated if the ERRIE bit is set in the CRS_CR + register. It is cleared by software by setting the + ERRC bit in the CRS_ICR register. + 8 + 1 + + + SYNCMISS + SYNC missed This flag is set by hardware + when the frequency error counter reached value FELIM + * 128 and no SYNC was detected, meaning either that a + SYNC pulse was missed or that the frequency error is + too big (internal frequency too high) to be + compensated by adjusting the TRIM value, and that + some other action should be taken. At this point, the + frequency error counter is stopped (waiting for a + next SYNC) and an interrupt is generated if the ERRIE + bit is set in the CRS_CR register. It is cleared by + software by setting the ERRC bit in the CRS_ICR + register. + 9 + 1 + + + TRIMOVF + Trimming overflow or underflow This flag + is set by hardware when the automatic trimming tries + to over- or under-flow the TRIM value. An interrupt + is generated if the ERRIE bit is set in the CRS_CR + register. It is cleared by software by setting the + ERRC bit in the CRS_ICR register. + 10 + 1 + + + FEDIR + Frequency error direction FEDIR is the + counting direction of the frequency error counter + latched in the time of the last SYNC event. It shows + whether the actual frequency is below or above the + target. + 15 + 1 + + + FECAP + Frequency error capture FECAP is the + frequency error counter value latched in the time of + the last SYNC event. Refer to Section7.3.4: Frequency + error evaluation and automatic trimming for more + details about FECAP usage. + 16 + 16 + + + + + ICR + ICR + CRS interrupt flag clear + register + 0xC + 0x20 + read-write + 0x00000000 + + + SYNCOKC + SYNC event OK clear flag Writing 1 to + this bit clears the SYNCOKF flag in the CRS_ISR + register. + 0 + 1 + + + SYNCWARNC + SYNC warning clear flag Writing 1 to + this bit clears the SYNCWARNF flag in the CRS_ISR + register. + 1 + 1 + + + ERRC + Error clear flag Writing 1 to this bit + clears TRIMOVF, SYNCMISS and SYNCERR bits and + consequently also the ERRF flag in the CRS_ISR + register. + 2 + 1 + + + ESYNCC + Expected SYNC clear flag Writing 1 to + this bit clears the ESYNCF flag in the CRS_ISR + register. + 3 + 1 + + + + + + + DAC + DAC + DAC + 0x40007400 + + 0x0 + 0x400 + registers + + + + CR + CR + DAC control register + 0x0 + 0x20 + read-write + 0x00000000 + + + EN1 + DAC channel1 enable This bit is set and + cleared by software to enable/disable DAC + channel1. + 0 + 1 + + + TEN1 + DAC channel1 trigger + enable + 1 + 1 + + + TSEL1 + DAC channel1 trigger selection These + bits select the external event used to trigger DAC + channel1. Note: Only used if bit TEN1 = 1 (DAC + channel1 trigger enabled). + 2 + 3 + + + WAVE1 + DAC channel1 noise/triangle wave + generation enable These bits are set and cleared by + software. Note: Only used if bit TEN1 = 1 (DAC + channel1 trigger enabled). + 6 + 2 + + + MAMP1 + DAC channel1 mask/amplitude selector + These bits are written by software to select mask in + wave generation mode or amplitude in triangle + generation mode. = 1011: Unmask bits[11:0] of LFSR/ + triangle amplitude equal to 4095 + 8 + 4 + + + DMAEN1 + DAC channel1 DMA enable This bit is set + and cleared by software. + 12 + 1 + + + DMAUDRIE1 + DAC channel1 DMA Underrun Interrupt + enable This bit is set and cleared by + software. + 13 + 1 + + + CEN1 + DAC Channel 1 calibration enable This + bit is set and cleared by software to enable/disable + DAC channel 1 calibration, it can be written only if + bit EN1=0 into DAC_CR (the calibration mode can be + entered/exit only when the DAC channel is disabled) + Otherwise, the write operation is + ignored. + 14 + 1 + + + EN2 + DAC channel2 enable This bit is set and + cleared by software to enable/disable DAC + channel2. + 16 + 1 + + + TEN2 + DAC channel2 trigger + enable + 17 + 1 + + + TSEL2 + DAC channel2 trigger selection These + bits select the external event used to trigger DAC + channel2 Note: Only used if bit TEN2 = 1 (DAC + channel2 trigger enabled). + 18 + 3 + + + WAVE2 + DAC channel2 noise/triangle wave + generation enable These bits are set/reset by + software. 1x: Triangle wave generation enabled Note: + Only used if bit TEN2 = 1 (DAC channel2 trigger + enabled) + 22 + 2 + + + MAMP2 + DAC channel2 mask/amplitude selector + These bits are written by software to select mask in + wave generation mode or amplitude in triangle + generation mode. = 1011: Unmask bits[11:0] of LFSR/ + triangle amplitude equal to 4095 + 24 + 4 + + + DMAEN2 + DAC channel2 DMA enable This bit is set + and cleared by software. + 28 + 1 + + + DMAUDRIE2 + DAC channel2 DMA underrun interrupt + enable This bit is set and cleared by + software. + 29 + 1 + + + CEN2 + DAC Channel 2 calibration enable This + bit is set and cleared by software to enable/disable + DAC channel 2 calibration, it can be written only if + bit EN2=0 into DAC_CR (the calibration mode can be + entered/exit only when the DAC channel is disabled) + Otherwise, the write operation is + ignored. + 30 + 1 + + + + + SWTRGR + SWTRGR + DAC software trigger register + 0x4 + 0x20 + write-only + 0x00000000 + + + SWTRIG1 + DAC channel1 software trigger This bit + is set by software to trigger the DAC in software + trigger mode. Note: This bit is cleared by hardware + (one APB1 clock cycle later) once the DAC_DHR1 + register value has been loaded into the DAC_DOR1 + register. + 0 + 1 + + + SWTRIG2 + DAC channel2 software trigger This bit + is set by software to trigger the DAC in software + trigger mode. Note: This bit is cleared by hardware + (one APB1 clock cycle later) once the DAC_DHR2 + register value has been loaded into the DAC_DOR2 + register. + 1 + 1 + + + + + DHR12R1 + DHR12R1 + DAC channel1 12-bit right-aligned data + holding register + 0x8 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 0 + 12 + + + + + DHR12L1 + DHR12L1 + DAC channel1 12-bit left aligned data + holding register + 0xC + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit left-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 4 + 12 + + + + + DHR8R1 + DHR8R1 + DAC channel1 8-bit right aligned data + holding register + 0x10 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel1. + 0 + 8 + + + + + DHR12R2 + DHR12R2 + DAC channel2 12-bit right aligned data + holding register + 0x14 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel2. + 0 + 12 + + + + + DHR12L2 + DHR12L2 + DAC channel2 12-bit left aligned data + holding register + 0x18 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit left-aligned data + These bits are written by software which specify + 12-bit data for DAC channel2. + 4 + 12 + + + + + DHR8R2 + DHR8R2 + DAC channel2 8-bit right-aligned data + holding register + 0x1C + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel2. + 0 + 8 + + + + + DHR12RD + DHR12RD + Dual DAC 12-bit right-aligned data holding + register + 0x20 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 0 + 12 + + + DACC2DHR + DAC channel2 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel2. + 16 + 12 + + + + + DHR12LD + DHR12LD + DUAL DAC 12-bit left aligned data holding + register + 0x24 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit left-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 4 + 12 + + + DACC2DHR + DAC channel2 12-bit left-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel2. + 20 + 12 + + + + + DHR8RD + DHR8RD + DUAL DAC 8-bit right aligned data holding + register + 0x28 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel1. + 0 + 8 + + + DACC2DHR + DAC channel2 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel2. + 8 + 8 + + + + + DOR1 + DOR1 + DAC channel1 data output + register + 0x2C + 0x20 + read-only + 0x00000000 + + + DACC1DOR + DAC channel1 data output These bits are + read-only, they contain data output for DAC + channel1. + 0 + 12 + + + + + DOR2 + DOR2 + DAC channel2 data output + register + 0x30 + 0x20 + read-only + 0x00000000 + + + DACC2DOR + DAC channel2 data output These bits are + read-only, they contain data output for DAC + channel2. + 0 + 12 + + + + + SR + SR + DAC status register + 0x34 + 0x20 + 0x00000000 + + + DMAUDR1 + DAC channel1 DMA underrun flag This bit + is set by hardware and cleared by software (by + writing it to 1). + 13 + 1 + read-write + + + CAL_FLAG1 + DAC Channel 1 calibration offset status + This bit is set and cleared by hardware + 14 + 1 + read-only + + + BWST1 + DAC Channel 1 busy writing sample time + flag This bit is systematically set just after Sample + & Hold mode enable and is set each time the + software writes the register DAC_SHSR1, It is cleared + by hardware when the write operation of DAC_SHSR1 is + complete. (It takes about 3LSI periods of + synchronization). + 15 + 1 + read-only + + + DMAUDR2 + DAC channel2 DMA underrun flag This bit + is set by hardware and cleared by software (by + writing it to 1). + 29 + 1 + read-write + + + CAL_FLAG2 + DAC Channel 2 calibration offset status + This bit is set and cleared by hardware + 30 + 1 + read-only + + + BWST2 + DAC Channel 2 busy writing sample time + flag This bit is systematically set just after Sample + & Hold mode enable and is set each time the + software writes the register DAC_SHSR2, It is cleared + by hardware when the write operation of DAC_SHSR2 is + complete. (It takes about 3 LSI periods of + synchronization). + 31 + 1 + read-only + + + + + CCR + CCR + DAC calibration control + register + 0x38 + 0x20 + read-write + 0x00000000 + + + OTRIM1 + DAC Channel 1 offset trimming + value + 0 + 5 + + + OTRIM2 + DAC Channel 2 offset trimming + value + 16 + 5 + + + + + MCR + MCR + DAC mode control register + 0x3C + 0x20 + read-write + 0x00000000 + + + MODE1 + DAC Channel 1 mode These bits can be + written only when the DAC is disabled and not in the + calibration mode (when bit EN1=0 and bit CEN1 =0 in + the DAC_CR register). If EN1=1 or CEN1 =1 the write + operation is ignored. They can be set and cleared by + software to select the DAC Channel 1 mode: DAC + Channel 1 in normal Mode DAC Channel 1 in sample + &amp; hold mode + 0 + 3 + + + MODE2 + DAC Channel 2 mode These bits can be + written only when the DAC is disabled and not in the + calibration mode (when bit EN2=0 and bit CEN2 =0 in + the DAC_CR register). If EN2=1 or CEN2 =1 the write + operation is ignored. They can be set and cleared by + software to select the DAC Channel 2 mode: DAC + Channel 2 in normal Mode DAC Channel 2 in sample + &amp; hold mode + 16 + 3 + + + + + SHSR1 + SHSR1 + DAC Sample and Hold sample time register + 1 + 0x40 + 0x20 + read-write + 0x00000000 + + + TSAMPLE1 + DAC Channel 1 sample Time (only valid in + sample &amp; hold mode) These bits can be written + when the DAC channel1 is disabled or also during + normal operation. in the latter case, the write can + be done only when BWSTx of DAC_SR register is low, If + BWSTx=1, the write operation is + ignored. + 0 + 10 + + + + + SHSR2 + SHSR2 + DAC Sample and Hold sample time register + 2 + 0x44 + 0x20 + read-write + 0x00000000 + + + TSAMPLE2 + DAC Channel 2 sample Time (only valid in + sample &amp; hold mode) These bits can be written + when the DAC channel2 is disabled or also during + normal operation. in the latter case, the write can + be done only when BWSTx of DAC_SR register is low, if + BWSTx=1, the write operation is + ignored. + 0 + 10 + + + + + SHHR + SHHR + DAC Sample and Hold hold time + register + 0x48 + 0x20 + read-write + 0x00010001 + + + THOLD1 + DAC Channel 1 hold Time (only valid in + sample &amp; hold mode) Hold time= (THOLD[9:0]) x + T LSI + 0 + 10 + + + THOLD2 + DAC Channel 2 hold time (only valid in + sample &amp; hold mode). Hold time= (THOLD[9:0]) + x T LSI + 16 + 10 + + + + + SHRR + SHRR + DAC Sample and Hold refresh time + register + 0x4C + 0x20 + read-write + 0x00010001 + + + TREFRESH1 + DAC Channel 1 refresh Time (only valid + in sample &amp; hold mode) Refresh time= + (TREFRESH[7:0]) x T LSI + 0 + 8 + + + TREFRESH2 + DAC Channel 2 refresh Time (only valid + in sample &amp; hold mode) Refresh time= + (TREFRESH[7:0]) x T LSI + 16 + 8 + + + + + + + BDMA + BDMA + BDMA + 0x58025400 + + 0x0 + 0x400 + registers + + + BDMA_CH1 + BDMA channel 1 interrupt + 129 + + + BDMA_CH2 + BDMA channel 2 interrupt + 130 + + + BDMA_CH3 + BDMA channel 3 interrupt + 131 + + + BDMA_CH4 + BDMA channel 4 interrupt + 132 + + + BDMA_CH5 + BDMA channel 5 interrupt + 133 + + + BDMA_CH6 + BDMA channel 6 interrupt + 134 + + + BDMA_CH7 + BDMA channel 7 interrupt + 135 + + + BDMA_CH8 + BDMA channel 8 interrupt + 136 + + + + ISR + ISR + DMA interrupt status register + 0x0 + 0x20 + read-only + 0x00000000 + + + GIF1 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 0 + 1 + + + TCIF1 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 1 + 1 + + + HTIF1 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 2 + 1 + + + TEIF1 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 3 + 1 + + + GIF2 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 4 + 1 + + + TCIF2 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 5 + 1 + + + HTIF2 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 6 + 1 + + + TEIF2 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 7 + 1 + + + GIF3 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 8 + 1 + + + TCIF3 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 9 + 1 + + + HTIF3 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 10 + 1 + + + TEIF3 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 11 + 1 + + + GIF4 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 12 + 1 + + + TCIF4 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 13 + 1 + + + HTIF4 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 14 + 1 + + + TEIF4 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 15 + 1 + + + GIF5 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 16 + 1 + + + TCIF5 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 17 + 1 + + + HTIF5 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 18 + 1 + + + TEIF5 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 19 + 1 + + + GIF6 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 20 + 1 + + + TCIF6 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 21 + 1 + + + HTIF6 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 22 + 1 + + + TEIF6 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 23 + 1 + + + GIF7 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 24 + 1 + + + TCIF7 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 25 + 1 + + + HTIF7 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 26 + 1 + + + TEIF7 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 27 + 1 + + + GIF8 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 28 + 1 + + + TCIF8 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 29 + 1 + + + HTIF8 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 30 + 1 + + + TEIF8 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 31 + 1 + + + + + IFCR + IFCR + DMA interrupt flag clear + register + 0x4 + 0x20 + write-only + 0x00000000 + + + CGIF1 + Channel x global interrupt clear This + bit is set and cleared by software. + 0 + 1 + + + CTCIF1 + Channel x transfer complete clear This + bit is set and cleared by software. + 1 + 1 + + + CHTIF1 + Channel x half transfer clear This bit + is set and cleared by software. + 2 + 1 + + + CTEIF1 + Channel x transfer error clear This bit + is set and cleared by software. + 3 + 1 + + + CGIF2 + Channel x global interrupt clear This + bit is set and cleared by software. + 4 + 1 + + + CTCIF2 + Channel x transfer complete clear This + bit is set and cleared by software. + 5 + 1 + + + CHTIF2 + Channel x half transfer clear This bit + is set and cleared by software. + 6 + 1 + + + CTEIF2 + Channel x transfer error clear This bit + is set and cleared by software. + 7 + 1 + + + CGIF3 + Channel x global interrupt clear This + bit is set and cleared by software. + 8 + 1 + + + CTCIF3 + Channel x transfer complete clear This + bit is set and cleared by software. + 9 + 1 + + + CHTIF3 + Channel x half transfer clear This bit + is set and cleared by software. + 10 + 1 + + + CTEIF3 + Channel x transfer error clear This bit + is set and cleared by software. + 11 + 1 + + + CGIF4 + Channel x global interrupt clear This + bit is set and cleared by software. + 12 + 1 + + + CTCIF4 + Channel x transfer complete clear This + bit is set and cleared by software. + 13 + 1 + + + CHTIF4 + Channel x half transfer clear This bit + is set and cleared by software. + 14 + 1 + + + CTEIF4 + Channel x transfer error clear This bit + is set and cleared by software. + 15 + 1 + + + CGIF5 + Channel x global interrupt clear This + bit is set and cleared by software. + 16 + 1 + + + CTCIF5 + Channel x transfer complete clear This + bit is set and cleared by software. + 17 + 1 + + + CHTIF5 + Channel x half transfer clear This bit + is set and cleared by software. + 18 + 1 + + + CTEIF5 + Channel x transfer error clear This bit + is set and cleared by software. + 19 + 1 + + + CGIF6 + Channel x global interrupt clear This + bit is set and cleared by software. + 20 + 1 + + + CTCIF6 + Channel x transfer complete clear This + bit is set and cleared by software. + 21 + 1 + + + CHTIF6 + Channel x half transfer clear This bit + is set and cleared by software. + 22 + 1 + + + CTEIF6 + Channel x transfer error clear This bit + is set and cleared by software. + 23 + 1 + + + CGIF7 + Channel x global interrupt clear This + bit is set and cleared by software. + 24 + 1 + + + CTCIF7 + Channel x transfer complete clear This + bit is set and cleared by software. + 25 + 1 + + + CHTIF7 + Channel x half transfer clear This bit + is set and cleared by software. + 26 + 1 + + + CTEIF7 + Channel x transfer error clear This bit + is set and cleared by software. + 27 + 1 + + + CGIF8 + Channel x global interrupt clear This + bit is set and cleared by software. + 28 + 1 + + + CTCIF8 + Channel x transfer complete clear This + bit is set and cleared by software. + 29 + 1 + + + CHTIF8 + Channel x half transfer clear This bit + is set and cleared by software. + 30 + 1 + + + CTEIF8 + Channel x transfer error clear This bit + is set and cleared by software. + 31 + 1 + + + + + CCR1 + CCR1 + DMA channel x configuration + register + 0x8 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR1 + CNDTR1 + DMA channel x number of data + register + 0xC + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR1 + CPAR1 + This register must not be written when the + channel is enabled. + 0x10 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR1 + CMAR1 + This register must not be written when the + channel is enabled. + 0x14 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR2 + CCR2 + DMA channel x configuration + register + 0x1C + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR2 + CNDTR2 + DMA channel x number of data + register + 0x20 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR2 + CPAR2 + This register must not be written when the + channel is enabled. + 0x24 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR2 + CMAR2 + This register must not be written when the + channel is enabled. + 0x28 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR3 + CCR3 + DMA channel x configuration + register + 0x30 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR3 + CNDTR3 + DMA channel x number of data + register + 0x34 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR3 + CPAR3 + This register must not be written when the + channel is enabled. + 0x38 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR3 + CMAR3 + This register must not be written when the + channel is enabled. + 0x3C + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR4 + CCR4 + DMA channel x configuration + register + 0x44 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR4 + CNDTR4 + DMA channel x number of data + register + 0x48 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR4 + CPAR4 + This register must not be written when the + channel is enabled. + 0x4C + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR4 + CMAR4 + This register must not be written when the + channel is enabled. + 0x50 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR5 + CCR5 + DMA channel x configuration + register + 0x58 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR5 + CNDTR5 + DMA channel x number of data + register + 0x5C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR5 + CPAR5 + This register must not be written when the + channel is enabled. + 0x60 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR5 + CMAR5 + This register must not be written when the + channel is enabled. + 0x64 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR6 + CCR6 + DMA channel x configuration + register + 0x6C + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR6 + CNDTR6 + DMA channel x number of data + register + 0x70 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR6 + CPAR6 + This register must not be written when the + channel is enabled. + 0x74 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR6 + CMAR6 + This register must not be written when the + channel is enabled. + 0x78 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR7 + CCR7 + DMA channel x configuration + register + 0x80 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR7 + CNDTR7 + DMA channel x number of data + register + 0x84 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR7 + CPAR7 + This register must not be written when the + channel is enabled. + 0x88 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR7 + CMAR7 + This register must not be written when the + channel is enabled. + 0x8C + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR8 + CCR8 + DMA channel x configuration + register + 0x94 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR8 + CNDTR8 + DMA channel x number of data + register + 0x98 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR8 + CPAR8 + This register must not be written when the + channel is enabled. + 0x9C + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR8 + CMAR8 + This register must not be written when the + channel is enabled. + 0xA0 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + + + DMA2D + DMA2D + DMA2D + 0x52001000 + + 0x0 + 0x400 + registers + + + DMA2D + DMA2D global interrupt + 90 + + + + CR + CR + DMA2D control register + 0x0 + 0x20 + read-write + 0x00000000 + + + START + Start This bit can be used to launch the + DMA2D according to the parameters loaded in the + various configuration registers + 0 + 1 + + + SUSP + Suspend This bit can be used to suspend + the current transfer. This bit is set and reset by + software. It is automatically reset by hardware when + the START bit is reset. + 1 + 1 + + + ABORT + Abort This bit can be used to abort the + current transfer. This bit is set by software and is + automatically reset by hardware when the START bit is + reset. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 8 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 9 + 1 + + + TWIE + Transfer watermark interrupt enable This + bit is set and cleared by software. + 10 + 1 + + + CAEIE + CLUT access error interrupt enable This + bit is set and cleared by software. + 11 + 1 + + + CTCIE + CLUT transfer complete interrupt enable + This bit is set and cleared by + software. + 12 + 1 + + + CEIE + Configuration Error Interrupt Enable + This bit is set and cleared by + software. + 13 + 1 + + + MODE + DMA2D mode This bit is set and cleared + by software. It cannot be modified while a transfer + is ongoing. + 16 + 2 + + + + + ISR + ISR + DMA2D Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + TEIF + Transfer error interrupt flag This bit + is set when an error occurs during a DMA transfer + (data transfer or automatic CLUT + loading). + 0 + 1 + + + TCIF + Transfer complete interrupt flag This + bit is set when a DMA2D transfer operation is + complete (data transfer only). + 1 + 1 + + + TWIF + Transfer watermark interrupt flag This + bit is set when the last pixel of the watermarked + line has been transferred. + 2 + 1 + + + CAEIF + CLUT access error interrupt flag This + bit is set when the CPU accesses the CLUT while the + CLUT is being automatically copied from a system + memory to the internal DMA2D. + 3 + 1 + + + CTCIF + CLUT transfer complete interrupt flag + This bit is set when the CLUT copy from a system + memory area to the internal DMA2D memory is + complete. + 4 + 1 + + + CEIF + Configuration error interrupt flag This + bit is set when the START bit of DMA2D_CR, + DMA2DFGPFCCR or DMA2D_BGPFCCR is set and a wrong + configuration has been programmed. + 5 + 1 + + + + + IFCR + IFCR + DMA2D interrupt flag clear + register + 0x8 + 0x20 + read-write + 0x00000000 + + + CTEIF + Clear Transfer error interrupt flag + Programming this bit to 1 clears the TEIF flag in the + DMA2D_ISR register + 0 + 1 + + + CTCIF + Clear transfer complete interrupt flag + Programming this bit to 1 clears the TCIF flag in the + DMA2D_ISR register + 1 + 1 + + + CTWIF + Clear transfer watermark interrupt flag + Programming this bit to 1 clears the TWIF flag in the + DMA2D_ISR register + 2 + 1 + + + CAECIF + Clear CLUT access error interrupt flag + Programming this bit to 1 clears the CAEIF flag in + the DMA2D_ISR register + 3 + 1 + + + CCTCIF + Clear CLUT transfer complete interrupt + flag Programming this bit to 1 clears the CTCIF flag + in the DMA2D_ISR register + 4 + 1 + + + CCEIF + Clear configuration error interrupt flag + Programming this bit to 1 clears the CEIF flag in the + DMA2D_ISR register + 5 + 1 + + + + + FGMAR + FGMAR + DMA2D foreground memory address + register + 0xC + 0x20 + read-write + 0x00000000 + + + MA + Memory address Address of the data used + for the foreground image. This register can only be + written when data transfers are disabled. Once the + data transfer has started, this register is + read-only. The address alignment must match the image + format selected e.g. a 32-bit per pixel format must + be 32-bit aligned, a 16-bit per pixel format must be + 16-bit aligned and a 4-bit per pixel format must be + 8-bit aligned. + 0 + 32 + + + + + FGOR + FGOR + DMA2D foreground offset + register + 0x10 + 0x20 + read-write + 0x00000000 + + + LO + Line offset Line offset used for the + foreground expressed in pixel. This value is used to + generate the address. It is added at the end of each + line to determine the starting address of the next + line. These bits can only be written when data + transfers are disabled. Once a data transfer has + started, they become read-only. If the image format + is 4-bit per pixel, the line offset must be + even. + 0 + 14 + + + + + BGMAR + BGMAR + DMA2D background memory address + register + 0x14 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Address of the data used + for the background image. This register can only be + written when data transfers are disabled. Once a data + transfer has started, this register is read-only. The + address alignment must match the image format + selected e.g. a 32-bit per pixel format must be + 32-bit aligned, a 16-bit per pixel format must be + 16-bit aligned and a 4-bit per pixel format must be + 8-bit aligned. + 0 + 32 + + + + + BGOR + BGOR + DMA2D background offset + register + 0x18 + 0x20 + read-write + 0x00000000 + + + LO + Line offset Line offset used for the + background image (expressed in pixel). This value is + used for the address generation. It is added at the + end of each line to determine the starting address of + the next line. These bits can only be written when + data transfers are disabled. Once data transfer has + started, they become read-only. If the image format + is 4-bit per pixel, the line offset must be + even. + 0 + 14 + + + + + FGPFCCR + FGPFCCR + DMA2D foreground PFC control + register + 0x1C + 0x20 + read-write + 0x00000000 + + + CM + Color mode These bits defines the color + format of the foreground image. They can only be + written when data transfers are disabled. Once the + transfer has started, they are read-only. others: + meaningless + 0 + 4 + + + CCM + CLUT color mode This bit defines the + color format of the CLUT. It can only be written when + the transfer is disabled. Once the CLUT transfer has + started, this bit is read-only. + 4 + 1 + + + START + Start This bit can be set to start the + automatic loading of the CLUT. It is automatically + reset: ** at the end of the transfer ** when the + transfer is aborted by the user application by + setting the ABORT bit in DMA2D_CR ** when a transfer + error occurs ** when the transfer has not started due + to a configuration error or another transfer + operation already ongoing (data transfer or automatic + background CLUT transfer). + 5 + 1 + + + CS + CLUT size These bits define the size of + the CLUT used for the foreground image. Once the CLUT + transfer has started, this field is read-only. The + number of CLUT entries is equal to CS[7:0] + + 1. + 8 + 8 + + + AM + Alpha mode These bits select the alpha + channel value to be used for the foreground image. + They can only be written data the transfer are + disabled. Once the transfer has started, they become + read-only. other configurations are + meaningless + 16 + 2 + + + CSS + Chroma Sub-Sampling These bits define + the chroma sub-sampling mode for YCbCr color mode. + Once the transfer has started, these bits are + read-only. others: meaningless + 18 + 2 + + + AI + Alpha Inverted This bit inverts the + alpha value. Once the transfer has started, this bit + is read-only. + 20 + 1 + + + RBS + Red Blue Swap This bit allows to swap + the R &amp; B to support BGR or ABGR color + formats. Once the transfer has started, this bit is + read-only. + 21 + 1 + + + ALPHA + Alpha value These bits define a fixed + alpha channel value which can replace the original + alpha value or be multiplied by the original alpha + value according to the alpha mode selected through + the AM[1:0] bits. These bits can only be written when + data transfers are disabled. Once a transfer has + started, they become read-only. + 24 + 8 + + + + + FGCOLR + FGCOLR + DMA2D foreground color + register + 0x20 + 0x20 + read-write + 0x00000000 + + + BLUE + Blue Value These bits defines the blue + value for the A4 or A8 mode of the foreground image. + They can only be written when data transfers are + disabled. Once the transfer has started, They are + read-only. + 0 + 8 + + + GREEN + Green Value These bits defines the green + value for the A4 or A8 mode of the foreground image. + They can only be written when data transfers are + disabled. Once the transfer has started, They are + read-only. + 8 + 8 + + + RED + Red Value These bits defines the red + value for the A4 or A8 mode of the foreground image. + They can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 16 + 8 + + + + + BGPFCCR + BGPFCCR + DMA2D background PFC control + register + 0x24 + 0x20 + read-write + 0x00000000 + + + CM + Color mode These bits define the color + format of the foreground image. These bits can only + be written when data transfers are disabled. Once the + transfer has started, they are read-only. others: + meaningless + 0 + 4 + + + CCM + CLUT Color mode These bits define the + color format of the CLUT. This register can only be + written when the transfer is disabled. Once the CLUT + transfer has started, this bit is + read-only. + 4 + 1 + + + START + Start This bit is set to start the + automatic loading of the CLUT. This bit is + automatically reset: ** at the end of the transfer ** + when the transfer is aborted by the user application + by setting the ABORT bit in the DMA2D_CR ** when a + transfer error occurs ** when the transfer has not + started due to a configuration error or another + transfer operation already on going (data transfer or + automatic BackGround CLUT transfer). + 5 + 1 + + + CS + CLUT size These bits define the size of + the CLUT used for the BG. Once the CLUT transfer has + started, this field is read-only. The number of CLUT + entries is equal to CS[7:0] + 1. + 8 + 8 + + + AM + Alpha mode These bits define which alpha + channel value to be used for the background image. + These bits can only be written when data transfers + are disabled. Once the transfer has started, they are + read-only. others: meaningless + 16 + 2 + + + AI + Alpha Inverted This bit inverts the + alpha value. Once the transfer has started, this bit + is read-only. + 20 + 1 + + + RBS + Red Blue Swap This bit allows to swap + the R &amp; B to support BGR or ABGR color + formats. Once the transfer has started, this bit is + read-only. + 21 + 1 + + + ALPHA + Alpha value These bits define a fixed + alpha channel value which can replace the original + alpha value or be multiplied with the original alpha + value according to the alpha mode selected with bits + AM[1: 0]. These bits can only be written when data + transfers are disabled. Once the transfer has + started, they are read-only. + 24 + 8 + + + + + BGCOLR + BGCOLR + DMA2D background color + register + 0x28 + 0x20 + read-write + 0x00000000 + + + BLUE + Blue Value These bits define the blue + value for the A4 or A8 mode of the background. These + bits can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 0 + 8 + + + GREEN + Green Value These bits define the green + value for the A4 or A8 mode of the background. These + bits can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 8 + 8 + + + RED + Red Value These bits define the red + value for the A4 or A8 mode of the background. These + bits can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 16 + 8 + + + + + FGCMAR + FGCMAR + DMA2D foreground CLUT memory address + register + 0x2C + 0x20 + read-write + 0x00000000 + + + MA + Memory Address Address of the data used + for the CLUT address dedicated to the foreground + image. This register can only be written when no + transfer is ongoing. Once the CLUT transfer has + started, this register is read-only. If the + foreground CLUT format is 32-bit, the address must be + 32-bit aligned. + 0 + 32 + + + + + BGCMAR + BGCMAR + DMA2D background CLUT memory address + register + 0x30 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Address of the data used + for the CLUT address dedicated to the background + image. This register can only be written when no + transfer is on going. Once the CLUT transfer has + started, this register is read-only. If the + background CLUT format is 32-bit, the address must be + 32-bit aligned. + 0 + 32 + + + + + OPFCCR + OPFCCR + DMA2D output PFC control + register + 0x34 + 0x20 + read-write + 0x00000000 + + + CM + Color mode These bits define the color + format of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are read-only. others: + meaningless + 0 + 3 + + + AI + Alpha Inverted This bit inverts the + alpha value. Once the transfer has started, this bit + is read-only. + 20 + 1 + + + RBS + Red Blue Swap This bit allows to swap + the R &amp; B to support BGR or ABGR color + formats. Once the transfer has started, this bit is + read-only. + 21 + 1 + + + + + OCOLR + OCOLR + DMA2D output color register + 0x38 + 0x20 + read-write + 0x00000000 + + + BLUE + Blue Value These bits define the blue + value of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 0 + 8 + + + GREEN + Green Value These bits define the green + value of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 8 + 8 + + + RED + Red Value These bits define the red + value of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 16 + 8 + + + ALPHA + Alpha Channel Value These bits define + the alpha channel of the output color. These bits can + only be written when data transfers are disabled. + Once the transfer has started, they are + read-only. + 24 + 8 + + + + + OMAR + OMAR + DMA2D output memory address + register + 0x3C + 0x20 + read-write + 0x00000000 + + + MA + Memory Address Address of the data used + for the output FIFO. These bits can only be written + when data transfers are disabled. Once the transfer + has started, they are read-only. The address + alignment must match the image format selected e.g. a + 32-bit per pixel format must be 32-bit aligned and a + 16-bit per pixel format must be 16-bit + aligned. + 0 + 32 + + + + + OOR + OOR + DMA2D output offset register + 0x40 + 0x20 + read-write + 0x00000000 + + + LO + Line Offset Line offset used for the + output (expressed in pixels). This value is used for + the address generation. It is added at the end of + each line to determine the starting address of the + next line. These bits can only be written when data + transfers are disabled. Once the transfer has + started, they are read-only. + 0 + 14 + + + + + NLR + NLR + DMA2D number of line register + 0x44 + 0x20 + read-write + 0x00000000 + + + NL + Number of lines Number of lines of the + area to be transferred. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 0 + 16 + + + PL + Pixel per lines Number of pixels per + lines of the area to be transferred. These bits can + only be written when data transfers are disabled. + Once the transfer has started, they are read-only. If + any of the input image format is 4-bit per pixel, + pixel per lines must be even. + 16 + 14 + + + + + LWR + LWR + DMA2D line watermark register + 0x48 + 0x20 + read-write + 0x00000000 + + + LW + Line watermark These bits allow to + configure the line watermark for interrupt + generation. An interrupt is raised when the last + pixel of the watermarked line has been transferred. + These bits can only be written when data transfers + are disabled. Once the transfer has started, they are + read-only. + 0 + 16 + + + + + AMTCR + AMTCR + DMA2D AXI master timer configuration + register + 0x4C + 0x20 + read-write + 0x00000000 + + + EN + Enable Enables the dead time + functionality. + 0 + 1 + + + DT + Dead Time Dead time value in the AXI + clock cycle inserted between two consecutive accesses + on the AXI master port. These bits represent the + minimum guaranteed number of cycles between two + consecutive AXI accesses. + 8 + 8 + + + + + + + DMAMUX2 + DMAMUX + DMAMUX + 0x58025800 + + 0x0 + 0x400 + registers + + + DMAMUX2_OVR + DMAMUX2 overrun interrupt + 128 + + + + C0CR + C0CR + DMAMux - DMA request line multiplexer + channel x control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C1CR + C1CR + DMAMux - DMA request line multiplexer + channel x control register + 0x4 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C2CR + C2CR + DMAMux - DMA request line multiplexer + channel x control register + 0x8 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C3CR + C3CR + DMAMux - DMA request line multiplexer + channel x control register + 0xC + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C4CR + C4CR + DMAMux - DMA request line multiplexer + channel x control register + 0x10 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C5CR + C5CR + DMAMux - DMA request line multiplexer + channel x control register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C6CR + C6CR + DMAMux - DMA request line multiplexer + channel x control register + 0x18 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C7CR + C7CR + DMAMux - DMA request line multiplexer + channel x control register + 0x1C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + RG0CR + RG0CR + DMAMux - DMA request generator channel x + control register + 0x100 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG1CR + RG1CR + DMAMux - DMA request generator channel x + control register + 0x104 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG2CR + RG2CR + DMAMux - DMA request generator channel x + control register + 0x108 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG3CR + RG3CR + DMAMux - DMA request generator channel x + control register + 0x10C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG4CR + RG4CR + DMAMux - DMA request generator channel x + control register + 0x110 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG5CR + RG5CR + DMAMux - DMA request generator channel x + control register + 0x114 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG6CR + RG6CR + DMAMux - DMA request generator channel x + control register + 0x118 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG7CR + RG7CR + DMAMux - DMA request generator channel x + control register + 0x11C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RGSR + RGSR + DMAMux - DMA request generator status + register + 0x140 + 0x20 + read-only + 0x00000000 + + + OF + Trigger event overrun flag The flag is + set when a trigger event occurs on DMA request + generator channel x, while the DMA request generator + counter value is lower than GNBREQ. The flag is + cleared by writing 1 to the corresponding COFx bit in + DMAMUX_RGCFR register. + 0 + 8 + + + + + RGCFR + RGCFR + DMAMux - DMA request generator clear flag + register + 0x144 + 0x20 + write-only + 0x00000000 + + + COF + Clear trigger event overrun flag Upon + setting, this bit clears the corresponding overrun + flag OFx in the DMAMUX_RGCSR register. + 0 + 8 + + + + + CSR + CSR + DMAMUX request line multiplexer interrupt + channel status register + 0x80 + 0x20 + read-only + 0x00000000 + + + SOF + Synchronization overrun event + flag + 0 + 16 + + + + + CFR + CFR + DMAMUX request line multiplexer interrupt + clear flag register + 0x84 + 0x20 + write-only + 0x00000000 + + + CSOF + Clear synchronization overrun event + flag + 0 + 16 + + + + + + + FMC + FMC + FMC + 0x52004000 + + 0x0 + 0x400 + registers + + + FMC + FMC global interrupt + 48 + + + + BCR1 + BCR1 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x0 + 0x20 + read-write + 0x000030DB + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR1 + BTR1 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0x4 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD = 126. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BCR2 + BCR2 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x8 + 0x20 + read-write + 0x000030D2 + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR2 + BTR2 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0xC + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD = 1. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BCR3 + BCR3 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x10 + 0x20 + read-write + 0x000030D2 + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR3 + BTR3 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0x14 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD =1. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BCR4 + BCR4 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x18 + 0x20 + read-write + 0x000030D2 + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR4 + BTR4 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0x1C + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD =1. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + PCR + PCR + NAND Flash control registers + 0x80 + 0x20 + read-write + 0x00000018 + + + PWAITEN + Wait feature enable bit. This bit + enables the Wait feature for the NAND Flash memory + bank: + 1 + 1 + + + PBKEN + NAND Flash memory bank enable bit. This + bit enables the memory bank. Accessing a disabled + memory bank causes an ERROR on AXI bus + 2 + 1 + + + PWID + Data bus width. These bits define the + external memory device width. + 4 + 2 + + + ECCEN + ECC computation logic enable + bit + 6 + 1 + + + TCLR + CLE to RE delay. These bits set time + from CLE low to RE low in number of KCK_FMC clock + cycles. The time is give by the following formula: + t_clr = (TCLR + SET + 2) TKCK_FMC where TKCK_FMC is + the KCK_FMC clock period Note: Set is MEMSET or + ATTSET according to the addressed + space. + 9 + 4 + + + TAR + ALE to RE delay. These bits set time + from ALE low to RE low in number of KCK_FMC clock + cycles. Time is: t_ar = (TAR + SET + 2) TKCK_FMC + where TKCK_FMC is the FMC clock period Note: Set is + MEMSET or ATTSET according to the addressed + space. + 13 + 4 + + + ECCPS + ECC page size. These bits define the + page size for the extended ECC: + 17 + 3 + + + + + SR + SR + This register contains information about the + FIFO status and interrupt. The FMC features a FIFO that + is used when writing to memories to transfer up to 16 + words of data.This is used to quickly write to the FIFO + and free the AXI bus for transactions to peripherals + other than the FMC, while the FMC is draining its FIFO + into the memory. One of these register bits indicates the + status of the FIFO, for ECC purposes.The ECC is + calculated while the data are written to the memory. To + read the correct ECC, the software must consequently wait + until the FIFO is empty. + 0x84 + 0x20 + 0x00000040 + + + IRS + Interrupt rising edge status The flag is + set by hardware and reset by software. Note: If this + bit is written by software to 1 it will be + set. + 0 + 1 + read-write + + + ILS + Interrupt high-level status The flag is + set by hardware and reset by software. + 1 + 1 + read-write + + + IFS + Interrupt falling edge status The flag + is set by hardware and reset by software. Note: If + this bit is written by software to 1 it will be + set. + 2 + 1 + read-write + + + IREN + Interrupt rising edge detection enable + bit + 3 + 1 + read-write + + + ILEN + Interrupt high-level detection enable + bit + 4 + 1 + read-write + + + IFEN + Interrupt falling edge detection enable + bit + 5 + 1 + read-write + + + FEMPT + FIFO empty. Read-only bit that provides + the status of the FIFO + 6 + 1 + read-only + + + + + PMEM + PMEM + The FMC_PMEM read/write register contains + the timing information for NAND Flash memory bank. This + information is used to access either the common memory + space of the NAND Flash for command, address write access + and data read/write access. + 0x88 + 0x20 + read-write + 0xFCFCFCFC + + + MEMSET + Common memory x setup time These bits + define the number of KCK_FMC (+1) clock cycles to set + up the address before the command assertion (NWE, + NOE), for NAND Flash read or write access to common + memory space: + 0 + 8 + + + MEMWAIT + Common memory wait time These bits + define the minimum number of KCK_FMC (+1) clock + cycles to assert the command (NWE, NOE), for NAND + Flash read or write access to common memory space. + The duration of command assertion is extended if the + wait signal (NWAIT) is active (low) at the end of the + programmed value of KCK_FMC: + 8 + 8 + + + MEMHOLD + Common memory hold time These bits + define the number of KCK_FMC clock cycles for write + accesses and KCK_FMC+1 clock cycles for read accesses + during which the address is held (and data for write + accesses) after the command is de-asserted (NWE, + NOE), for NAND Flash read or write access to common + memory space: + 16 + 8 + + + MEMHIZ + Common memory x data bus Hi-Z time These + bits define the number of KCK_FMC clock cycles during + which the data bus is kept Hi-Z after the start of a + NAND Flash write access to common memory space. This + is only valid for write transactions: + 24 + 8 + + + + + PATT + PATT + The FMC_PATT read/write register contains + the timing information for NAND Flash memory bank. It is + used for 8-bit accesses to the attribute memory space of + the NAND Flash for the last address write access if the + timing must differ from that of previous accesses (for + Ready/Busy management, refer to Section20.8.5: NAND Flash + prewait feature). + 0x8C + 0x20 + read-write + 0xFCFCFCFC + + + ATTSET + Attribute memory setup time These bits + define the number of KCK_FMC (+1) clock cycles to set + up address before the command assertion (NWE, NOE), + for NAND Flash read or write access to attribute + memory space: + 0 + 8 + + + ATTWAIT + Attribute memory wait time These bits + define the minimum number of x KCK_FMC (+1) clock + cycles to assert the command (NWE, NOE), for NAND + Flash read or write access to attribute memory space. + The duration for command assertion is extended if the + wait signal (NWAIT) is active (low) at the end of the + programmed value of KCK_FMC: + 8 + 8 + + + ATTHOLD + Attribute memory hold time These bits + define the number of KCK_FMC clock cycles during + which the address is held (and data for write access) + after the command de-assertion (NWE, NOE), for NAND + Flash read or write access to attribute memory + space: + 16 + 8 + + + ATTHIZ + Attribute memory data bus Hi-Z time + These bits define the number of KCK_FMC clock cycles + during which the data bus is kept in Hi-Z after the + start of a NAND Flash write access to attribute + memory space on socket. Only valid for writ + transaction: + 24 + 8 + + + + + ECCR + ECCR + This register contain the current error + correction code value computed by the ECC computation + modules of the FMC NAND controller. When the CPU + reads/writes the data from a NAND Flash memory page at + the correct address (refer to Section20.8.6: Computation + of the error correction code (ECC) in NAND Flash memory), + the data read/written from/to the NAND Flash memory are + processed automatically by the ECC computation module. + When X bytes have been read (according to the ECCPS field + in the FMC_PCR registers), the CPU must read the computed + ECC value from the FMC_ECC registers. It then verifies if + these computed parity data are the same as the parity + value recorded in the spare area, to determine whether a + page is valid, and, to correct it otherwise. The FMC_ECCR + register should be cleared after being read by setting + the ECCEN bit to 0. To compute a new data block, the + ECCEN bit must be set to 1. + 0x94 + 0x20 + read-only + 0x00000000 + + + ECC + ECC result This field contains the value + computed by the ECC computation logic. Table167 + describes the contents of these bit + fields. + 0 + 32 + + + + + BWTR1 + BWTR1 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x104 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BWTR2 + BWTR2 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x10C + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BWTR3 + BWTR3 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x114 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BWTR4 + BWTR4 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x11C + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + SDCR1 + SDCR1 + This register contains the control + parameters for each SDRAM memory bank + 0x140 + 0x20 + read-write + 0x000002D0 + + + NC + Number of column address bits These bits + define the number of bits of a column + address. + 0 + 2 + + + NR + Number of row address bits These bits + define the number of bits of a row + address. + 2 + 2 + + + MWID + Memory data bus width. These bits define + the memory device width. + 4 + 2 + + + NB + Number of internal banks This bit sets + the number of internal banks. + 6 + 1 + + + CAS + CAS Latency This bits sets the SDRAM CAS + latency in number of memory clock + cycles + 7 + 2 + + + WP + Write protection This bit enables write + mode access to the SDRAM bank. + 9 + 1 + + + SDCLK + SDRAM clock configuration These bits + define the SDRAM clock period for both SDRAM banks + and allow disabling the clock before changing the + frequency. In this case the SDRAM must be + re-initialized. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 10 + 2 + + + RBURST + Burst read This bit enables burst read + mode. The SDRAM controller anticipates the next read + commands during the CAS latency and stores data in + the Read FIFO. Note: The corresponding bit in the + FMC_SDCR2 register is read only. + 12 + 1 + + + RPIPE + Read pipe These bits define the delay, + in KCK_FMC clock cycles, for reading data after CAS + latency. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 13 + 2 + + + + + SDCR2 + SDCR2 + This register contains the control + parameters for each SDRAM memory bank + 0x144 + 0x20 + read-write + 0x000002D0 + + + NC + Number of column address bits These bits + define the number of bits of a column + address. + 0 + 2 + + + NR + Number of row address bits These bits + define the number of bits of a row + address. + 2 + 2 + + + MWID + Memory data bus width. These bits define + the memory device width. + 4 + 2 + + + NB + Number of internal banks This bit sets + the number of internal banks. + 6 + 1 + + + CAS + CAS Latency This bits sets the SDRAM CAS + latency in number of memory clock + cycles + 7 + 2 + + + WP + Write protection This bit enables write + mode access to the SDRAM bank. + 9 + 1 + + + SDCLK + SDRAM clock configuration These bits + define the SDRAM clock period for both SDRAM banks + and allow disabling the clock before changing the + frequency. In this case the SDRAM must be + re-initialized. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 10 + 2 + + + RBURST + Burst read This bit enables burst read + mode. The SDRAM controller anticipates the next read + commands during the CAS latency and stores data in + the Read FIFO. Note: The corresponding bit in the + FMC_SDCR2 register is read only. + 12 + 1 + + + RPIPE + Read pipe These bits define the delay, + in KCK_FMC clock cycles, for reading data after CAS + latency. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 13 + 2 + + + + + SDTR1 + SDTR1 + This register contains the timing parameters + of each SDRAM bank + 0x148 + 0x20 + read-write + 0x0FFFFFFF + + + TMRD + Load Mode Register to Active These bits + define the delay between a Load Mode Register command + and an Active or Refresh command in number of memory + clock cycles. .... + 0 + 4 + + + TXSR + Exit Self-refresh delay These bits + define the delay from releasing the Self-refresh + command to issuing the Activate command in number of + memory clock cycles. .... Note: If two SDRAM devices + are used, the FMC_SDTR1 and FMC_SDTR2 must be + programmed with the same TXSR timing corresponding to + the slowest SDRAM device. + 4 + 4 + + + TRAS + Self refresh time These bits define the + minimum Self-refresh period in number of memory clock + cycles. .... + 8 + 4 + + + TRC + Row cycle delay These bits define the + delay between the Refresh command and the Activate + command, as well as the delay between two consecutive + Refresh commands. It is expressed in number of memory + clock cycles. The TRC timing is only configured in + the FMC_SDTR1 register. If two SDRAM devices are + used, the TRC must be programmed with the timings of + the slowest device. .... Note: TRC must match the TRC + and TRFC (Auto Refresh period) timings defined in the + SDRAM device datasheet. Note: The corresponding bits + in the FMC_SDTR2 register are dont + care. + 12 + 4 + + + TWR + Recovery delay These bits define the + delay between a Write and a Precharge command in + number of memory clock cycles. .... Note: TWR must be + programmed to match the write recovery time (tWR) + defined in the SDRAM datasheet, and to guarantee + that: TWR &#8805; TRAS - TRCD and TWR + &#8805;TRC - TRCD - TRP Example: TRAS= 4 cycles, + TRCD= 2 cycles. So, TWR &gt;= 2 cycles. TWR must + be programmed to 0x1. If two SDRAM devices are used, + the FMC_SDTR1 and FMC_SDTR2 must be programmed with + the same TWR timing corresponding to the slowest + SDRAM device. + 16 + 4 + + + TRP + Row precharge delay These bits define + the delay between a Precharge command and another + command in number of memory clock cycles. The TRP + timing is only configured in the FMC_SDTR1 register. + If two SDRAM devices are used, the TRP must be + programmed with the timing of the slowest device. + .... Note: The corresponding bits in the FMC_SDTR2 + register are dont care. + 20 + 4 + + + TRCD + Row to column delay These bits define + the delay between the Activate command and a + Read/Write command in number of memory clock cycles. + .... + 24 + 4 + + + + + SDTR2 + SDTR2 + This register contains the timing parameters + of each SDRAM bank + 0x14C + 0x20 + read-write + 0x0FFFFFFF + + + TMRD + Load Mode Register to Active These bits + define the delay between a Load Mode Register command + and an Active or Refresh command in number of memory + clock cycles. .... + 0 + 4 + + + TXSR + Exit Self-refresh delay These bits + define the delay from releasing the Self-refresh + command to issuing the Activate command in number of + memory clock cycles. .... Note: If two SDRAM devices + are used, the FMC_SDTR1 and FMC_SDTR2 must be + programmed with the same TXSR timing corresponding to + the slowest SDRAM device. + 4 + 4 + + + TRAS + Self refresh time These bits define the + minimum Self-refresh period in number of memory clock + cycles. .... + 8 + 4 + + + TRC + Row cycle delay These bits define the + delay between the Refresh command and the Activate + command, as well as the delay between two consecutive + Refresh commands. It is expressed in number of memory + clock cycles. The TRC timing is only configured in + the FMC_SDTR1 register. If two SDRAM devices are + used, the TRC must be programmed with the timings of + the slowest device. .... Note: TRC must match the TRC + and TRFC (Auto Refresh period) timings defined in the + SDRAM device datasheet. Note: The corresponding bits + in the FMC_SDTR2 register are dont + care. + 12 + 4 + + + TWR + Recovery delay These bits define the + delay between a Write and a Precharge command in + number of memory clock cycles. .... Note: TWR must be + programmed to match the write recovery time (tWR) + defined in the SDRAM datasheet, and to guarantee + that: TWR &#8805; TRAS - TRCD and TWR + &#8805;TRC - TRCD - TRP Example: TRAS= 4 cycles, + TRCD= 2 cycles. So, TWR &gt;= 2 cycles. TWR must + be programmed to 0x1. If two SDRAM devices are used, + the FMC_SDTR1 and FMC_SDTR2 must be programmed with + the same TWR timing corresponding to the slowest + SDRAM device. + 16 + 4 + + + TRP + Row precharge delay These bits define + the delay between a Precharge command and another + command in number of memory clock cycles. The TRP + timing is only configured in the FMC_SDTR1 register. + If two SDRAM devices are used, the TRP must be + programmed with the timing of the slowest device. + .... Note: The corresponding bits in the FMC_SDTR2 + register are dont care. + 20 + 4 + + + TRCD + Row to column delay These bits define + the delay between the Activate command and a + Read/Write command in number of memory clock cycles. + .... + 24 + 4 + + + + + SDCMR + SDCMR + This register contains the command issued + when the SDRAM device is accessed. This register is used + to initialize the SDRAM device, and to activate the + Self-refresh and the Power-down modes. As soon as the + MODE field is written, the command will be issued only to + one or to both SDRAM banks according to CTB1 and CTB2 + command bits. This register is the same for both SDRAM + banks. + 0x150 + 0x20 + read-write + 0x00000000 + + + MODE + Command mode These bits define the + command issued to the SDRAM device. Note: When a + command is issued, at least one Command Target Bank + bit ( CTB1 or CTB2) must be set otherwise the command + will be ignored. Note: If two SDRAM banks are used, + the Auto-refresh and PALL command must be issued + simultaneously to the two devices with CTB1 and CTB2 + bits set otherwise the command will be ignored. Note: + If only one SDRAM bank is used and a command is + issued with its associated CTB bit set, the other CTB + bit of the unused bank must be kept to + 0. + 0 + 3 + + + CTB2 + Command Target Bank 2 This bit indicates + whether the command will be issued to SDRAM Bank 2 or + not. + 3 + 1 + + + CTB1 + Command Target Bank 1 This bit indicates + whether the command will be issued to SDRAM Bank 1 or + not. + 4 + 1 + + + NRFS + Number of Auto-refresh These bits define + the number of consecutive Auto-refresh commands + issued when MODE = 011. .... + 5 + 4 + + + MRD + Mode Register definition This 14-bit + field defines the SDRAM Mode Register content. The + Mode Register is programmed using the Load Mode + Register command. The MRD[13:0] bits are also used to + program the extended mode register for mobile + SDRAM. + 9 + 14 + + + + + SDRTR + SDRTR + This register sets the refresh rate in + number of SDCLK clock cycles between the refresh cycles + by configuring the Refresh Timer Count value.Examplewhere + 64 ms is the SDRAM refresh period.The refresh rate must + be increased by 20 SDRAM clock cycles (as in the above + example) to obtain a safe margin if an internal refresh + request occurs when a read request has been accepted. It + corresponds to a COUNT value of 0000111000000 (448). This + 13-bit field is loaded into a timer which is decremented + using the SDRAM clock. This timer generates a refresh + pulse when zero is reached. The COUNT value must be set + at least to 41 SDRAM clock cycles.As soon as the + FMC_SDRTR register is programmed, the timer starts + counting. If the value programmed in the register is 0, + no refresh is carried out. This register must not be + reprogrammed after the initialization procedure to avoid + modifying the refresh rate.Each time a refresh pulse is + generated, this 13-bit COUNT field is reloaded into the + counter.If a memory access is in progress, the + Auto-refresh request is delayed. However, if the memory + access and Auto-refresh requests are generated + simultaneously, the Auto-refresh takes precedence. If the + memory access occurs during a refresh operation, the + request is buffered to be processed when the refresh is + complete.This register is common to SDRAM bank 1 and bank + 2. + 0x154 + 0x20 + 0x00000000 + + + CRE + Clear Refresh error flag This bit is + used to clear the Refresh Error Flag (RE) in the + Status Register. + 0 + 1 + write-only + + + COUNT + Refresh Timer Count This 13-bit field + defines the refresh rate of the SDRAM device. It is + expressed in number of memory clock cycles. It must + be set at least to 41 SDRAM clock cycles (0x29). + Refresh rate = (COUNT + 1) x SDRAM frequency clock + COUNT = (SDRAM refresh period / Number of rows) - + 20 + 1 + 13 + read-write + + + REIE + RES Interrupt Enable + 14 + 1 + read-write + + + + + SDSR + SDSR + SDRAM Status register + 0x158 + 0x20 + read-only + 0x00000000 + + + RE + Refresh error flag An interrupt is + generated if REIE = 1 and RE = 1 + 0 + 1 + + + MODES1 + Status Mode for Bank 1 These bits define + the Status Mode of SDRAM Bank 1. + 1 + 2 + + + MODES2 + Status Mode for Bank 2 These bits define + the Status Mode of SDRAM Bank 2. + 3 + 2 + + + + + + + CEC + CEC + CEC + 0x40006C00 + + 0x0 + 0x400 + registers + + + CEC + HDMI-CEC global interrupt + 94 + + + + CR + CR + CEC control register + 0x0 + 0x20 + read-write + 0x00000000 + + + CECEN + CEC Enable The CECEN bit is set and + cleared by software. CECEN=1 starts message reception + and enables the TXSOM control. CECEN=0 disables the + CEC peripheral, clears all bits of CEC_CR register + and aborts any on-going reception or + transmission. + 0 + 1 + + + TXSOM + Tx Start Of Message TXSOM is set by + software to command transmission of the first byte of + a CEC message. If the CEC message consists of only + one byte, TXEOM must be set before of TXSOM. + Start-Bit is effectively started on the CEC line + after SFT is counted. If TXSOM is set while a message + reception is ongoing, transmission will start after + the end of reception. TXSOM is cleared by hardware + after the last byte of the message is sent with a + positive acknowledge (TXEND=1), in case of + transmission underrun (TXUDR=1), negative acknowledge + (TXACKE=1), and transmission error (TXERR=1). It is + also cleared by CECEN=0. It is not cleared and + transmission is automatically retried in case of + arbitration lost (ARBLST=1). TXSOM can be also used + as a status bit informing application whether any + transmission request is pending or under execution. + The application can abort a transmission request at + any time by clearing the CECEN bit. Note: TXSOM must + be set when CECEN=1 TXSOM must be set when + transmission data is available into TXDR HEADERs + first four bits containing own peripheral address are + taken from TXDR[7:4], not from CEC_CFGR.OAR which is + used only for reception + 1 + 1 + + + TXEOM + Tx End Of Message The TXEOM bit is set + by software to command transmission of the last byte + of a CEC message. TXEOM is cleared by hardware at the + same time and under the same conditions as for TXSOM. + Note: TXEOM must be set when CECEN=1 TXEOM must be + set before writing transmission data to TXDR If TXEOM + is set when TXSOM=0, transmitted message will consist + of 1 byte (HEADER) only (PING message) + 2 + 1 + + + + + CFGR + CFGR + This register is used to configure the + HDMI-CEC controller. It is mandatory to write CEC_CFGR + only when CECEN=0. + 0x4 + 0x20 + read-write + 0x00000000 + + + SFT + Signal Free Time SFT bits are set by + software. In the SFT=0x0 configuration the number of + nominal data bit periods waited before transmission + is ruled by hardware according to the transmission + history. In all the other configurations the SFT + number is determined by software. * 0x0 ** 2.5 + Data-Bit periods if CEC is the last bus initiator + with unsuccessful transmission (ARBLST=1, TXERR=1, + TXUDR=1 or TXACKE= 1) ** 4 Data-Bit periods if CEC is + the new bus initiator ** 6 Data-Bit periods if CEC is + the last bus initiator with successful transmission + (TXEOM=1) * 0x1: 0.5 nominal data bit periods * 0x2: + 1.5 nominal data bit periods * 0x3: 2.5 nominal data + bit periods * 0x4: 3.5 nominal data bit periods * + 0x5: 4.5 nominal data bit periods * 0x6: 5.5 nominal + data bit periods * 0x7: 6.5 nominal data bit + periods + 0 + 3 + + + RXTOL + Rx-Tolerance The RXTOL bit is set and + cleared by software. ** Start-Bit, +/- 200 s rise, + +/- 200 s fall. ** Data-Bit: +/- 200 s rise. +/- 350 + s fall. ** Start-Bit: +/- 400 s rise, +/- 400 s fall + ** Data-Bit: +/-300 s rise, +/- 500 s + fall + 3 + 1 + + + BRESTP + Rx-Stop on Bit Rising Error The BRESTP + bit is set and cleared by software. + 4 + 1 + + + BREGEN + Generate Error-Bit on Bit Rising Error + The BREGEN bit is set and cleared by software. Note: + If BRDNOGEN=0, an Error-bit is generated upon BRE + detection with BRESTP=1 in broadcast even if + BREGEN=0 + 5 + 1 + + + LBPEGEN + Generate Error-Bit on Long Bit Period + Error The LBPEGEN bit is set and cleared by software. + Note: If BRDNOGEN=0, an Error-bit is generated upon + LBPE detection in broadcast even if + LBPEGEN=0 + 6 + 1 + + + BRDNOGEN + Avoid Error-Bit Generation in Broadcast + The BRDNOGEN bit is set and cleared by + software. + 7 + 1 + + + SFTOPT + SFT Option Bit The SFTOPT bit is set and + cleared by software. + 8 + 1 + + + OAR + Own addresses configuration The OAR bits + are set by software to select which destination + logical addresses has to be considered in receive + mode. Each bit, when set, enables the CEC logical + address identified by the given bit position. At the + end of HEADER reception, the received destination + address is compared with the enabled addresses. In + case of matching address, the incoming message is + acknowledged and received. In case of non-matching + address, the incoming message is received only in + listen mode (LSTN=1), but without acknowledge sent. + Broadcast messages are always received. Example: OAR + = 0b000 0000 0010 0001 means that CEC acknowledges + addresses 0x0 and 0x5. Consequently, each message + directed to one of these addresses is + received. + 16 + 15 + + + LSTN + Listen mode LSTN bit is set and cleared + by software. + 31 + 1 + + + + + TXDR + TXDR + CEC Tx data register + 0x8 + 0x20 + write-only + 0x00000000 + + + TXD + Tx Data register. TXD is a write-only + register containing the data byte to be transmitted. + Note: TXD must be written when + TXSTART=1 + 0 + 8 + + + + + RXDR + RXDR + CEC Rx Data Register + 0xC + 0x20 + read-only + 0x00000000 + + + RXD + Rx Data register. RXD is read-only and + contains the last data byte which has been received + from the CEC line. + 0 + 8 + + + + + ISR + ISR + CEC Interrupt and Status + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + RXBR + Rx-Byte Received The RXBR bit is set by + hardware to inform application that a new byte has + been received from the CEC line and stored into the + RXD buffer. RXBR is cleared by software write at + 1. + 0 + 1 + + + RXEND + End Of Reception RXEND is set by + hardware to inform application that the last byte of + a CEC message is received from the CEC line and + stored into the RXD buffer. RXEND is set at the same + time of RXBR. RXEND is cleared by software write at + 1. + 1 + 1 + + + RXOVR + Rx-Overrun RXOVR is set by hardware if + RXBR is not yet cleared at the time a new byte is + received on the CEC line and stored into RXD. RXOVR + assertion stops message reception so that no + acknowledge is sent. In case of broadcast, a negative + acknowledge is sent. RXOVR is cleared by software + write at 1. + 2 + 1 + + + BRE + Rx-Bit Rising Error BRE is set by + hardware in case a Data-Bit waveform is detected with + Bit Rising Error. BRE is set either at the time the + misplaced rising edge occurs, or at the end of the + maximum BRE tolerance allowed by RXTOL, in case + rising edge is still longing. BRE stops message + reception if BRESTP=1. BRE generates an Error-Bit on + the CEC line if BREGEN=1. BRE is cleared by software + write at 1. + 3 + 1 + + + SBPE + Rx-Short Bit Period Error SBPE is set by + hardware in case a Data-Bit waveform is detected with + Short Bit Period Error. SBPE is set at the time the + anticipated falling edge occurs. SBPE generates an + Error-Bit on the CEC line. SBPE is cleared by + software write at 1. + 4 + 1 + + + LBPE + Rx-Long Bit Period Error LBPE is set by + hardware in case a Data-Bit waveform is detected with + Long Bit Period Error. LBPE is set at the end of the + maximum bit-extension tolerance allowed by RXTOL, in + case falling edge is still longing. LBPE always stops + reception of the CEC message. LBPE generates an + Error-Bit on the CEC line if LBPEGEN=1. In case of + broadcast, Error-Bit is generated even in case of + LBPEGEN=0. LBPE is cleared by software write at + 1. + 5 + 1 + + + RXACKE + Rx-Missing Acknowledge In receive mode, + RXACKE is set by hardware to inform application that + no acknowledge was seen on the CEC line. RXACKE + applies only for broadcast messages and in listen + mode also for not directly addressed messages + (destination address not enabled in OAR). RXACKE + aborts message reception. RXACKE is cleared by + software write at 1. + 6 + 1 + + + ARBLST + Arbitration Lost ARBLST is set by + hardware to inform application that CEC device is + switching to reception due to arbitration lost event + following the TXSOM command. ARBLST can be due either + to a contending CEC device starting earlier or + starting at the same time but with higher HEADER + priority. After ARBLST assertion TXSOM bit keeps + pending for next transmission attempt. ARBLST is + cleared by software write at 1. + 7 + 1 + + + TXBR + Tx-Byte Request TXBR is set by hardware + to inform application that the next transmission data + has to be written to TXDR. TXBR is set when the 4th + bit of currently transmitted byte is sent. + Application must write the next byte to TXDR within 6 + nominal data-bit periods before transmission underrun + error occurs (TXUDR). TXBR is cleared by software + write at 1. + 8 + 1 + + + TXEND + End of Transmission TXEND is set by + hardware to inform application that the last byte of + the CEC message has been successfully transmitted. + TXEND clears the TXSOM and TXEOM control bits. TXEND + is cleared by software write at 1. + 9 + 1 + + + TXUDR + Tx-Buffer Underrun In transmission mode, + TXUDR is set by hardware if application was not in + time to load TXDR before of next byte transmission. + TXUDR aborts message transmission and clears TXSOM + and TXEOM control bits. TXUDR is cleared by software + write at 1 + 10 + 1 + + + TXERR + Tx-Error In transmission mode, TXERR is + set by hardware if the CEC initiator detects low + impedance on the CEC line while it is released. TXERR + aborts message transmission and clears TXSOM and + TXEOM controls. TXERR is cleared by software write at + 1. + 11 + 1 + + + TXACKE + Tx-Missing Acknowledge Error In + transmission mode, TXACKE is set by hardware to + inform application that no acknowledge was received. + In case of broadcast transmission, TXACKE informs + application that a negative acknowledge was received. + TXACKE aborts message transmission and clears TXSOM + and TXEOM controls. TXACKE is cleared by software + write at 1. + 12 + 1 + + + + + IER + IER + CEC interrupt enable register + 0x14 + 0x20 + read-write + 0x00000000 + + + RXBRIE + Rx-Byte Received Interrupt Enable The + RXBRIE bit is set and cleared by + software. + 0 + 1 + + + RXENDIE + End Of Reception Interrupt Enable The + RXENDIE bit is set and cleared by + software. + 1 + 1 + + + RXOVRIE + Rx-Buffer Overrun Interrupt Enable The + RXOVRIE bit is set and cleared by + software. + 2 + 1 + + + BREIE + Bit Rising Error Interrupt Enable The + BREIE bit is set and cleared by + software. + 3 + 1 + + + SBPEIE + Short Bit Period Error Interrupt Enable + The SBPEIE bit is set and cleared by + software. + 4 + 1 + + + LBPEIE + Long Bit Period Error Interrupt Enable + The LBPEIE bit is set and cleared by + software. + 5 + 1 + + + RXACKIE + Rx-Missing Acknowledge Error Interrupt + Enable The RXACKIE bit is set and cleared by + software. + 6 + 1 + + + ARBLSTIE + Arbitration Lost Interrupt Enable The + ARBLSTIE bit is set and cleared by + software. + 7 + 1 + + + TXBRIE + Tx-Byte Request Interrupt Enable The + TXBRIE bit is set and cleared by + software. + 8 + 1 + + + TXENDIE + Tx-End Of Message Interrupt Enable The + TXENDIE bit is set and cleared by + software. + 9 + 1 + + + TXUDRIE + Tx-Underrun Interrupt Enable The TXUDRIE + bit is set and cleared by software. + 10 + 1 + + + TXERRIE + Tx-Error Interrupt Enable The TXERRIE + bit is set and cleared by software. + 11 + 1 + + + TXACKIE + Tx-Missing Acknowledge Error Interrupt + Enable The TXACKEIE bit is set and cleared by + software. + 12 + 1 + + + + + + + HSEM + HSEM + HSEM + 0x58026400 + + 0x0 + 0x400 + registers + + + HSEM0 + HSEM global interrupt 1 + 125 + + + + HSEM_R0 + HSEM_R0 + HSEM register HSEM_R0 HSEM_R31 + 0x0 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R1 + HSEM_R1 + HSEM register HSEM_R0 HSEM_R31 + 0x4 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R2 + HSEM_R2 + HSEM register HSEM_R0 HSEM_R31 + 0x8 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R3 + HSEM_R3 + HSEM register HSEM_R0 HSEM_R31 + 0xC + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R4 + HSEM_R4 + HSEM register HSEM_R0 HSEM_R31 + 0x10 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R5 + HSEM_R5 + HSEM register HSEM_R0 HSEM_R31 + 0x14 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R6 + HSEM_R6 + HSEM register HSEM_R0 HSEM_R31 + 0x18 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R7 + HSEM_R7 + HSEM register HSEM_R0 HSEM_R31 + 0x1C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R8 + HSEM_R8 + HSEM register HSEM_R0 HSEM_R31 + 0x20 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R9 + HSEM_R9 + HSEM register HSEM_R0 HSEM_R31 + 0x24 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R10 + HSEM_R10 + HSEM register HSEM_R0 HSEM_R31 + 0x28 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R11 + HSEM_R11 + HSEM register HSEM_R0 HSEM_R31 + 0x2C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R12 + HSEM_R12 + HSEM register HSEM_R0 HSEM_R31 + 0x30 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R13 + HSEM_R13 + HSEM register HSEM_R0 HSEM_R31 + 0x34 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R14 + HSEM_R14 + HSEM register HSEM_R0 HSEM_R31 + 0x38 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R15 + HSEM_R15 + HSEM register HSEM_R0 HSEM_R31 + 0x3C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R16 + HSEM_R16 + HSEM register HSEM_R0 HSEM_R31 + 0x40 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R17 + HSEM_R17 + HSEM register HSEM_R0 HSEM_R31 + 0x44 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R18 + HSEM_R18 + HSEM register HSEM_R0 HSEM_R31 + 0x48 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R19 + HSEM_R19 + HSEM register HSEM_R0 HSEM_R31 + 0x4C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R20 + HSEM_R20 + HSEM register HSEM_R0 HSEM_R31 + 0x50 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R21 + HSEM_R21 + HSEM register HSEM_R0 HSEM_R31 + 0x54 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R22 + HSEM_R22 + HSEM register HSEM_R0 HSEM_R31 + 0x58 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R23 + HSEM_R23 + HSEM register HSEM_R0 HSEM_R31 + 0x5C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R24 + HSEM_R24 + HSEM register HSEM_R0 HSEM_R31 + 0x60 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R25 + HSEM_R25 + HSEM register HSEM_R0 HSEM_R31 + 0x64 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R26 + HSEM_R26 + HSEM register HSEM_R0 HSEM_R31 + 0x68 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R27 + HSEM_R27 + HSEM register HSEM_R0 HSEM_R31 + 0x6C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R28 + HSEM_R28 + HSEM register HSEM_R0 HSEM_R31 + 0x70 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R29 + HSEM_R29 + HSEM register HSEM_R0 HSEM_R31 + 0x74 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R30 + HSEM_R30 + HSEM register HSEM_R0 HSEM_R31 + 0x78 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R31 + HSEM_R31 + HSEM register HSEM_R0 HSEM_R31 + 0x7C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR0 + HSEM_RLR0 + HSEM Read lock register + 0x80 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR1 + HSEM_RLR1 + HSEM Read lock register + 0x84 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR2 + HSEM_RLR2 + HSEM Read lock register + 0x88 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR3 + HSEM_RLR3 + HSEM Read lock register + 0x8C + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR4 + HSEM_RLR4 + HSEM Read lock register + 0x90 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR5 + HSEM_RLR5 + HSEM Read lock register + 0x94 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR6 + HSEM_RLR6 + HSEM Read lock register + 0x98 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR7 + HSEM_RLR7 + HSEM Read lock register + 0x9C + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR8 + HSEM_RLR8 + HSEM Read lock register + 0xA0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR9 + HSEM_RLR9 + HSEM Read lock register + 0xA4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR10 + HSEM_RLR10 + HSEM Read lock register + 0xA8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR11 + HSEM_RLR11 + HSEM Read lock register + 0xAC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR12 + HSEM_RLR12 + HSEM Read lock register + 0xB0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR13 + HSEM_RLR13 + HSEM Read lock register + 0xB4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR14 + HSEM_RLR14 + HSEM Read lock register + 0xB8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR15 + HSEM_RLR15 + HSEM Read lock register + 0xBC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR16 + HSEM_RLR16 + HSEM Read lock register + 0xC0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR17 + HSEM_RLR17 + HSEM Read lock register + 0xC4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR18 + HSEM_RLR18 + HSEM Read lock register + 0xC8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR19 + HSEM_RLR19 + HSEM Read lock register + 0xCC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR20 + HSEM_RLR20 + HSEM Read lock register + 0xD0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR21 + HSEM_RLR21 + HSEM Read lock register + 0xD4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR22 + HSEM_RLR22 + HSEM Read lock register + 0xD8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR23 + HSEM_RLR23 + HSEM Read lock register + 0xDC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR24 + HSEM_RLR24 + HSEM Read lock register + 0xE0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR25 + HSEM_RLR25 + HSEM Read lock register + 0xE4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR26 + HSEM_RLR26 + HSEM Read lock register + 0xE8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR27 + HSEM_RLR27 + HSEM Read lock register + 0xEC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR28 + HSEM_RLR28 + HSEM Read lock register + 0xF0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR29 + HSEM_RLR29 + HSEM Read lock register + 0xF4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR30 + HSEM_RLR30 + HSEM Read lock register + 0xF8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR31 + HSEM_RLR31 + HSEM Read lock register + 0xFC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_IER + HSEM_IER + HSEM Interrupt enable register + 0x100 + 0x20 + read-write + 0x00000000 + + + ISEM0 + Interrupt semaphore n enable + bit + 0 + 1 + + + ISEM1 + Interrupt semaphore n enable + bit + 1 + 1 + + + ISEM2 + Interrupt semaphore n enable + bit + 2 + 1 + + + ISEM3 + Interrupt semaphore n enable + bit + 3 + 1 + + + ISEM4 + Interrupt semaphore n enable + bit + 4 + 1 + + + ISEM5 + Interrupt semaphore n enable + bit + 5 + 1 + + + ISEM6 + Interrupt semaphore n enable + bit + 6 + 1 + + + ISEM7 + Interrupt semaphore n enable + bit + 7 + 1 + + + ISEM8 + Interrupt semaphore n enable + bit + 8 + 1 + + + ISEM9 + Interrupt semaphore n enable + bit + 9 + 1 + + + ISEM10 + Interrupt semaphore n enable + bit + 10 + 1 + + + ISEM11 + Interrupt semaphore n enable + bit + 11 + 1 + + + ISEM12 + Interrupt semaphore n enable + bit + 12 + 1 + + + ISEM13 + Interrupt semaphore n enable + bit + 13 + 1 + + + ISEM14 + Interrupt semaphore n enable + bit + 14 + 1 + + + ISEM15 + Interrupt semaphore n enable + bit + 15 + 1 + + + ISEM16 + Interrupt semaphore n enable + bit + 16 + 1 + + + ISEM17 + Interrupt semaphore n enable + bit + 17 + 1 + + + ISEM18 + Interrupt semaphore n enable + bit + 18 + 1 + + + ISEM19 + Interrupt semaphore n enable + bit + 19 + 1 + + + ISEM20 + Interrupt semaphore n enable + bit + 20 + 1 + + + ISEM21 + Interrupt semaphore n enable + bit + 21 + 1 + + + ISEM22 + Interrupt semaphore n enable + bit + 22 + 1 + + + ISEM23 + Interrupt semaphore n enable + bit + 23 + 1 + + + ISEM24 + Interrupt semaphore n enable + bit + 24 + 1 + + + ISEM25 + Interrupt semaphore n enable + bit + 25 + 1 + + + ISEM26 + Interrupt semaphore n enable + bit + 26 + 1 + + + ISEM27 + Interrupt semaphore n enable + bit + 27 + 1 + + + ISEM28 + Interrupt semaphore n enable + bit + 28 + 1 + + + ISEM29 + Interrupt semaphore n enable + bit + 29 + 1 + + + ISEM30 + Interrupt semaphore n enable + bit + 30 + 1 + + + ISEM31 + Interrupt(N) semaphore n enable + bit. + 31 + 1 + + + + + HSEM_ICR + HSEM_ICR + HSEM Interrupt clear register + 0x104 + 0x20 + read-only + 0x00000000 + + + ISEM0 + Interrupt(N) semaphore n clear + bit + 0 + 1 + + + ISEM1 + Interrupt(N) semaphore n clear + bit + 1 + 1 + + + ISEM2 + Interrupt(N) semaphore n clear + bit + 2 + 1 + + + ISEM3 + Interrupt(N) semaphore n clear + bit + 3 + 1 + + + ISEM4 + Interrupt(N) semaphore n clear + bit + 4 + 1 + + + ISEM5 + Interrupt(N) semaphore n clear + bit + 5 + 1 + + + ISEM6 + Interrupt(N) semaphore n clear + bit + 6 + 1 + + + ISEM7 + Interrupt(N) semaphore n clear + bit + 7 + 1 + + + ISEM8 + Interrupt(N) semaphore n clear + bit + 8 + 1 + + + ISEM9 + Interrupt(N) semaphore n clear + bit + 9 + 1 + + + ISEM10 + Interrupt(N) semaphore n clear + bit + 10 + 1 + + + ISEM11 + Interrupt(N) semaphore n clear + bit + 11 + 1 + + + ISEM12 + Interrupt(N) semaphore n clear + bit + 12 + 1 + + + ISEM13 + Interrupt(N) semaphore n clear + bit + 13 + 1 + + + ISEM14 + Interrupt(N) semaphore n clear + bit + 14 + 1 + + + ISEM15 + Interrupt(N) semaphore n clear + bit + 15 + 1 + + + ISEM16 + Interrupt(N) semaphore n clear + bit + 16 + 1 + + + ISEM17 + Interrupt(N) semaphore n clear + bit + 17 + 1 + + + ISEM18 + Interrupt(N) semaphore n clear + bit + 18 + 1 + + + ISEM19 + Interrupt(N) semaphore n clear + bit + 19 + 1 + + + ISEM20 + Interrupt(N) semaphore n clear + bit + 20 + 1 + + + ISEM21 + Interrupt(N) semaphore n clear + bit + 21 + 1 + + + ISEM22 + Interrupt(N) semaphore n clear + bit + 22 + 1 + + + ISEM23 + Interrupt(N) semaphore n clear + bit + 23 + 1 + + + ISEM24 + Interrupt(N) semaphore n clear + bit + 24 + 1 + + + ISEM25 + Interrupt(N) semaphore n clear + bit + 25 + 1 + + + ISEM26 + Interrupt(N) semaphore n clear + bit + 26 + 1 + + + ISEM27 + Interrupt(N) semaphore n clear + bit + 27 + 1 + + + ISEM28 + Interrupt(N) semaphore n clear + bit + 28 + 1 + + + ISEM29 + Interrupt(N) semaphore n clear + bit + 29 + 1 + + + ISEM30 + Interrupt(N) semaphore n clear + bit + 30 + 1 + + + ISEM31 + Interrupt(N) semaphore n clear + bit + 31 + 1 + + + + + HSEM_ISR + HSEM_ISR + HSEM Interrupt status register + 0x108 + 0x20 + read-only + 0x00000000 + + + ISEM0 + Interrupt(N) semaphore n status bit + before enable (mask) + 0 + 1 + + + ISEM1 + Interrupt(N) semaphore n status bit + before enable (mask) + 1 + 1 + + + ISEM2 + Interrupt(N) semaphore n status bit + before enable (mask) + 2 + 1 + + + ISEM3 + Interrupt(N) semaphore n status bit + before enable (mask) + 3 + 1 + + + ISEM4 + Interrupt(N) semaphore n status bit + before enable (mask) + 4 + 1 + + + ISEM5 + Interrupt(N) semaphore n status bit + before enable (mask) + 5 + 1 + + + ISEM6 + Interrupt(N) semaphore n status bit + before enable (mask) + 6 + 1 + + + ISEM7 + Interrupt(N) semaphore n status bit + before enable (mask) + 7 + 1 + + + ISEM8 + Interrupt(N) semaphore n status bit + before enable (mask) + 8 + 1 + + + ISEM9 + Interrupt(N) semaphore n status bit + before enable (mask) + 9 + 1 + + + ISEM10 + Interrupt(N) semaphore n status bit + before enable (mask) + 10 + 1 + + + ISEM11 + Interrupt(N) semaphore n status bit + before enable (mask) + 11 + 1 + + + ISEM12 + Interrupt(N) semaphore n status bit + before enable (mask) + 12 + 1 + + + ISEM13 + Interrupt(N) semaphore n status bit + before enable (mask) + 13 + 1 + + + ISEM14 + Interrupt(N) semaphore n status bit + before enable (mask) + 14 + 1 + + + ISEM15 + Interrupt(N) semaphore n status bit + before enable (mask) + 15 + 1 + + + ISEM16 + Interrupt(N) semaphore n status bit + before enable (mask) + 16 + 1 + + + ISEM17 + Interrupt(N) semaphore n status bit + before enable (mask) + 17 + 1 + + + ISEM18 + Interrupt(N) semaphore n status bit + before enable (mask) + 18 + 1 + + + ISEM19 + Interrupt(N) semaphore n status bit + before enable (mask) + 19 + 1 + + + ISEM20 + Interrupt(N) semaphore n status bit + before enable (mask) + 20 + 1 + + + ISEM21 + Interrupt(N) semaphore n status bit + before enable (mask) + 21 + 1 + + + ISEM22 + Interrupt(N) semaphore n status bit + before enable (mask) + 22 + 1 + + + ISEM23 + Interrupt(N) semaphore n status bit + before enable (mask) + 23 + 1 + + + ISEM24 + Interrupt(N) semaphore n status bit + before enable (mask) + 24 + 1 + + + ISEM25 + Interrupt(N) semaphore n status bit + before enable (mask) + 25 + 1 + + + ISEM26 + Interrupt(N) semaphore n status bit + before enable (mask) + 26 + 1 + + + ISEM27 + Interrupt(N) semaphore n status bit + before enable (mask) + 27 + 1 + + + ISEM28 + Interrupt(N) semaphore n status bit + before enable (mask) + 28 + 1 + + + ISEM29 + Interrupt(N) semaphore n status bit + before enable (mask) + 29 + 1 + + + ISEM30 + Interrupt(N) semaphore n status bit + before enable (mask) + 30 + 1 + + + ISEM31 + Interrupt(N) semaphore n status bit + before enable (mask) + 31 + 1 + + + + + HSEM_MISR + HSEM_MISR + HSEM Masked interrupt status + register + 0x10C + 0x20 + read-only + 0x00000000 + + + ISEM0 + masked interrupt(N) semaphore n status + bit after enable (mask) + 0 + 1 + + + ISEM1 + masked interrupt(N) semaphore n status + bit after enable (mask) + 1 + 1 + + + ISEM2 + masked interrupt(N) semaphore n status + bit after enable (mask) + 2 + 1 + + + ISEM3 + masked interrupt(N) semaphore n status + bit after enable (mask) + 3 + 1 + + + ISEM4 + masked interrupt(N) semaphore n status + bit after enable (mask) + 4 + 1 + + + ISEM5 + masked interrupt(N) semaphore n status + bit after enable (mask) + 5 + 1 + + + ISEM6 + masked interrupt(N) semaphore n status + bit after enable (mask) + 6 + 1 + + + ISEM7 + masked interrupt(N) semaphore n status + bit after enable (mask) + 7 + 1 + + + ISEM8 + masked interrupt(N) semaphore n status + bit after enable (mask) + 8 + 1 + + + ISEM9 + masked interrupt(N) semaphore n status + bit after enable (mask) + 9 + 1 + + + ISEM10 + masked interrupt(N) semaphore n status + bit after enable (mask) + 10 + 1 + + + ISEM11 + masked interrupt(N) semaphore n status + bit after enable (mask) + 11 + 1 + + + ISEM12 + masked interrupt(N) semaphore n status + bit after enable (mask) + 12 + 1 + + + ISEM13 + masked interrupt(N) semaphore n status + bit after enable (mask) + 13 + 1 + + + ISEM14 + masked interrupt(N) semaphore n status + bit after enable (mask) + 14 + 1 + + + ISEM15 + masked interrupt(N) semaphore n status + bit after enable (mask) + 15 + 1 + + + ISEM16 + masked interrupt(N) semaphore n status + bit after enable (mask) + 16 + 1 + + + ISEM17 + masked interrupt(N) semaphore n status + bit after enable (mask) + 17 + 1 + + + ISEM18 + masked interrupt(N) semaphore n status + bit after enable (mask) + 18 + 1 + + + ISEM19 + masked interrupt(N) semaphore n status + bit after enable (mask) + 19 + 1 + + + ISEM20 + masked interrupt(N) semaphore n status + bit after enable (mask) + 20 + 1 + + + ISEM21 + masked interrupt(N) semaphore n status + bit after enable (mask) + 21 + 1 + + + ISEM22 + masked interrupt(N) semaphore n status + bit after enable (mask) + 22 + 1 + + + ISEM23 + masked interrupt(N) semaphore n status + bit after enable (mask) + 23 + 1 + + + ISEM24 + masked interrupt(N) semaphore n status + bit after enable (mask) + 24 + 1 + + + ISEM25 + masked interrupt(N) semaphore n status + bit after enable (mask) + 25 + 1 + + + ISEM26 + masked interrupt(N) semaphore n status + bit after enable (mask) + 26 + 1 + + + ISEM27 + masked interrupt(N) semaphore n status + bit after enable (mask) + 27 + 1 + + + ISEM28 + masked interrupt(N) semaphore n status + bit after enable (mask) + 28 + 1 + + + ISEM29 + masked interrupt(N) semaphore n status + bit after enable (mask) + 29 + 1 + + + ISEM30 + masked interrupt(N) semaphore n status + bit after enable (mask) + 30 + 1 + + + ISEM31 + masked interrupt(N) semaphore n status + bit after enable (mask) + 31 + 1 + + + + + HSEM_CR + HSEM_CR + HSEM Clear register + 0x140 + 0x20 + read-write + 0x00000000 + + + MASTERID + MasterID of semaphores to be + cleared + 8 + 8 + + + KEY + Semaphore clear Key + 16 + 16 + + + + + HSEM_KEYR + HSEM_KEYR + HSEM Interrupt clear register + 0x144 + 0x20 + read-write + 0x00000000 + + + KEY + Semaphore Clear Key + 16 + 16 + + + + + + + I2C1 + I2C + I2C + 0x40005400 + + 0x0 + 0x400 + registers + + + I2C1_EV + I2C1 event interrupt + 31 + + + I2C1_ER + I2C1 error interrupt + 32 + + + + CR1 + CR1 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x0 + 0x20 + read-write + 0x00000000 + + + PE + Peripheral enable Note: When PE=0, the + I2C SCL and SDA lines are released. Internal state + machines and status bits are put back to their reset + value. When cleared, PE must be kept low for at least + 3 APB clock cycles. + 0 + 1 + + + TXIE + TX Interrupt enable + 1 + 1 + + + RXIE + RX Interrupt enable + 2 + 1 + + + ADDRIE + Address match Interrupt enable (slave + only) + 3 + 1 + + + NACKIE + Not acknowledge received Interrupt + enable + 4 + 1 + + + STOPIE + STOP detection Interrupt + enable + 5 + 1 + + + TCIE + Transfer Complete interrupt enable Note: + Any of these events will generate an interrupt: + Transfer Complete (TC) Transfer Complete Reload + (TCR) + 6 + 1 + + + ERRIE + Error interrupts enable Note: Any of + these errors generate an interrupt: Arbitration Loss + (ARLO) Bus Error detection (BERR) Overrun/Underrun + (OVR) Timeout detection (TIMEOUT) PEC error detection + (PECERR) Alert pin event detection + (ALERT) + 7 + 1 + + + DNF + Digital noise filter These bits are used + to configure the digital noise filter on SDA and SCL + input. The digital filter will filter spikes with a + length of up to DNF[3:0] * tI2CCLK ... Note: If the + analog filter is also enabled, the digital filter is + added to the analog filter. This filter can only be + programmed when the I2C is disabled (PE = + 0). + 8 + 4 + + + ANFOFF + Analog noise filter OFF Note: This bit + can only be programmed when the I2C is disabled (PE = + 0). + 12 + 1 + + + TXDMAEN + DMA transmission requests + enable + 14 + 1 + + + RXDMAEN + DMA reception requests + enable + 15 + 1 + + + SBC + Slave byte control This bit is used to + enable hardware byte control in slave + mode. + 16 + 1 + + + NOSTRETCH + Clock stretching disable This bit is + used to disable clock stretching in slave mode. It + must be kept cleared in master mode. Note: This bit + can only be programmed when the I2C is disabled (PE = + 0). + 17 + 1 + + + WUPEN + Wakeup from Stop mode enable Note: If + the Wakeup from Stop mode feature is not supported, + this bit is reserved and forced by hardware to 0. + Please refer to Section25.3: I2C implementation. + Note: WUPEN can be set only when DNF = + 0000 + 18 + 1 + + + GCEN + General call enable + 19 + 1 + + + SMBHEN + SMBus Host address enable Note: If the + SMBus feature is not supported, this bit is reserved + and forced by hardware to 0. Please refer to + Section25.3: I2C implementation. + 20 + 1 + + + SMBDEN + SMBus Device Default address enable + Note: If the SMBus feature is not supported, this bit + is reserved and forced by hardware to 0. Please refer + to Section25.3: I2C implementation. + 21 + 1 + + + ALERTEN + SMBus alert enable Device mode + (SMBHEN=0): Host mode (SMBHEN=1): Note: When + ALERTEN=0, the SMBA pin can be used as a standard + GPIO. If the SMBus feature is not supported, this bit + is reserved and forced by hardware to 0. Please refer + to Section25.3: I2C implementation. + 22 + 1 + + + PECEN + PEC enable Note: If the SMBus feature is + not supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 23 + 1 + + + + + CR2 + CR2 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x4 + 0x20 + read-write + 0x00000000 + + + SADD0 + Slave address bit 0 (master mode) In + 7-bit addressing mode (ADD10 = 0): This bit is dont + care In 10-bit addressing mode (ADD10 = 1): This bit + should be written with bit 0 of the slave address to + be sent Note: Changing these bits when the START bit + is set is not allowed. + 0 + 1 + + + SADD1 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 1 + 1 + + + SADD2 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 2 + 1 + + + SADD3 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 3 + 1 + + + SADD4 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 4 + 1 + + + SADD5 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 5 + 1 + + + SADD6 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 6 + 1 + + + SADD7 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 7 + 1 + + + SADD8 + Slave address bit 9:8 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits are + dont care In 10-bit addressing mode (ADD10 = 1): + These bits should be written with bits 9:8 of the + slave address to be sent Note: Changing these bits + when the START bit is set is not + allowed. + 8 + 1 + + + SADD9 + Slave address bit 9:8 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits are + dont care In 10-bit addressing mode (ADD10 = 1): + These bits should be written with bits 9:8 of the + slave address to be sent Note: Changing these bits + when the START bit is set is not + allowed. + 9 + 1 + + + RD_WRN + Transfer direction (master mode) Note: + Changing this bit when the START bit is set is not + allowed. + 10 + 1 + + + ADD10 + 10-bit addressing mode (master mode) + Note: Changing this bit when the START bit is set is + not allowed. + 11 + 1 + + + HEAD10R + 10-bit address header only read + direction (master receiver mode) Note: Changing this + bit when the START bit is set is not + allowed. + 12 + 1 + + + START + Start generation This bit is set by + software, and cleared by hardware after the Start + followed by the address sequence is sent, by an + arbitration loss, by a timeout error detection, or + when PE = 0. It can also be cleared by software by + writing 1 to the ADDRCF bit in the I2C_ICR register. + If the I2C is already in master mode with AUTOEND = + 0, setting this bit generates a Repeated Start + condition when RELOAD=0, after the end of the NBYTES + transfer. Otherwise setting this bit will generate a + START condition once the bus is free. Note: Writing 0 + to this bit has no effect. The START bit can be set + even if the bus is BUSY or I2C is in slave mode. This + bit has no effect when RELOAD is set. + 13 + 1 + + + STOP + Stop generation (master mode) The bit is + set by software, cleared by hardware when a Stop + condition is detected, or when PE = 0. In Master + Mode: Note: Writing 0 to this bit has no + effect. + 14 + 1 + + + NACK + NACK generation (slave mode) The bit is + set by software, cleared by hardware when the NACK is + sent, or when a STOP condition or an Address matched + is received, or when PE=0. Note: Writing 0 to this + bit has no effect. This bit is used in slave mode + only: in master receiver mode, NACK is automatically + generated after last byte preceding STOP or RESTART + condition, whatever the NACK bit value. When an + overrun occurs in slave receiver NOSTRETCH mode, a + NACK is automatically generated whatever the NACK bit + value. When hardware PEC checking is enabled + (PECBYTE=1), the PEC acknowledge value does not + depend on the NACK value. + 15 + 1 + + + NBYTES + Number of bytes The number of bytes to + be transmitted/received is programmed there. This + field is dont care in slave mode with SBC=0. Note: + Changing these bits when the START bit is set is not + allowed. + 16 + 8 + + + RELOAD + NBYTES reload mode This bit is set and + cleared by software. + 24 + 1 + + + AUTOEND + Automatic end mode (master mode) This + bit is set and cleared by software. Note: This bit + has no effect in slave mode or when the RELOAD bit is + set. + 25 + 1 + + + PECBYTE + Packet error checking byte This bit is + set by software, and cleared by hardware when the PEC + is transferred, or when a STOP condition or an + Address matched is received, also when PE=0. Note: + Writing 0 to this bit has no effect. This bit has no + effect when RELOAD is set. This bit has no effect is + slave mode when SBC=0. If the SMBus feature is not + supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 26 + 1 + + + + + OAR1 + OAR1 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x8 + 0x20 + read-write + 0x00000000 + + + OA1 + Interface address 7-bit addressing mode: + dont care 10-bit addressing mode: bits 9:8 of address + Note: These bits can be written only when OA1EN=0. + OA1[7:1]: Interface address Bits 7:1 of address Note: + These bits can be written only when OA1EN=0. OA1[0]: + Interface address 7-bit addressing mode: dont care + 10-bit addressing mode: bit 0 of address Note: This + bit can be written only when OA1EN=0. + 0 + 10 + + + OA1MODE + Own Address 1 10-bit mode Note: This bit + can be written only when OA1EN=0. + 10 + 1 + + + OA1EN + Own Address 1 enable + 15 + 1 + + + + + OAR2 + OAR2 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0xC + 0x20 + read-write + 0x00000000 + + + OA2 + Interface address bits 7:1 of address + Note: These bits can be written only when + OA2EN=0. + 1 + 7 + + + OA2MSK + Own Address 2 masks Note: These bits can + be written only when OA2EN=0. As soon as OA2MSK is + not equal to 0, the reserved I2C addresses (0b0000xxx + and 0b1111xxx) are not acknowledged even if the + comparison matches. + 8 + 3 + + + OA2EN + Own Address 2 enable + 15 + 1 + + + + + TIMINGR + TIMINGR + Access: No wait states + 0x10 + 0x20 + read-write + 0x00000000 + + + SCLL + SCL low period (master mode) This field + is used to generate the SCL low period in master + mode. tSCLL = (SCLL+1) x tPRESC Note: SCLL is also + used to generate tBUF and tSU:STA + timings. + 0 + 8 + + + SCLH + SCL high period (master mode) This field + is used to generate the SCL high period in master + mode. tSCLH = (SCLH+1) x tPRESC Note: SCLH is also + used to generate tSU:STO and tHD:STA + timing. + 8 + 8 + + + SDADEL + Data hold time This field is used to + generate the delay tSDADEL between SCL falling edge + and SDA edge. In master mode and in slave mode with + NOSTRETCH = 0, the SCL line is stretched low during + tSDADEL. tSDADEL= SDADEL x tPRESC Note: SDADEL is + used to generate tHD:DAT timing. + 16 + 4 + + + SCLDEL + Data setup time This field is used to + generate a delay tSCLDEL between SDA edge and SCL + rising edge. In master mode and in slave mode with + NOSTRETCH = 0, the SCL line is stretched low during + tSCLDEL. tSCLDEL = (SCLDEL+1) x tPRESC Note: tSCLDEL + is used to generate tSU:DAT timing. + 20 + 4 + + + PRESC + Timing prescaler This field is used to + prescale I2CCLK in order to generate the clock period + tPRESC used for data setup and hold counters (refer + to I2C timings on page9) and for SCL high and low + level counters (refer to I2C master initialization on + page24). tPRESC = (PRESC+1) x tI2CCLK + 28 + 4 + + + + + TIMEOUTR + TIMEOUTR + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x14 + 0x20 + read-write + 0x00000000 + + + TIMEOUTA + Bus Timeout A This field is used to + configure: The SCL low timeout condition tTIMEOUT + when TIDLE=0 tTIMEOUT= (TIMEOUTA+1) x 2048 x tI2CCLK + The bus idle condition (both SCL and SDA high) when + TIDLE=1 tIDLE= (TIMEOUTA+1) x 4 x tI2CCLK Note: These + bits can be written only when + TIMOUTEN=0. + 0 + 12 + + + TIDLE + Idle clock timeout detection Note: This + bit can be written only when + TIMOUTEN=0. + 12 + 1 + + + TIMOUTEN + Clock timeout enable + 15 + 1 + + + TIMEOUTB + Bus timeout B This field is used to + configure the cumulative clock extension timeout: In + master mode, the master cumulative clock low extend + time (tLOW:MEXT) is detected In slave mode, the slave + cumulative clock low extend time (tLOW:SEXT) is + detected tLOW:EXT= (TIMEOUTB+1) x 2048 x tI2CCLK + Note: These bits can be written only when + TEXTEN=0. + 16 + 12 + + + TEXTEN + Extended clock timeout + enable + 31 + 1 + + + + + ISR + ISR + Access: No wait states + 0x18 + 0x20 + 0x00000001 + + + TXE + Transmit data register empty + (transmitters) This bit is set by hardware when the + I2C_TXDR register is empty. It is cleared when the + next data to be sent is written in the I2C_TXDR + register. This bit can be written to 1 by software in + order to flush the transmit data register I2C_TXDR. + Note: This bit is set by hardware when + PE=0. + 0 + 1 + read-write + + + TXIS + Transmit interrupt status (transmitters) + This bit is set by hardware when the I2C_TXDR + register is empty and the data to be transmitted must + be written in the I2C_TXDR register. It is cleared + when the next data to be sent is written in the + I2C_TXDR register. This bit can be written to 1 by + software when NOSTRETCH=1 only, in order to generate + a TXIS event (interrupt if TXIE=1 or DMA request if + TXDMAEN=1). Note: This bit is cleared by hardware + when PE=0. + 1 + 1 + read-write + + + RXNE + Receive data register not empty + (receivers) This bit is set by hardware when the + received data is copied into the I2C_RXDR register, + and is ready to be read. It is cleared when I2C_RXDR + is read. Note: This bit is cleared by hardware when + PE=0. + 2 + 1 + read-only + + + ADDR + Address matched (slave mode) This bit is + set by hardware as soon as the received slave address + matched with one of the enabled slave addresses. It + is cleared by software by setting ADDRCF bit. Note: + This bit is cleared by hardware when + PE=0. + 3 + 1 + read-only + + + NACKF + Not Acknowledge received flag This flag + is set by hardware when a NACK is received after a + byte transmission. It is cleared by software by + setting the NACKCF bit. Note: This bit is cleared by + hardware when PE=0. + 4 + 1 + read-only + + + STOPF + Stop detection flag This flag is set by + hardware when a Stop condition is detected on the bus + and the peripheral is involved in this transfer: + either as a master, provided that the STOP condition + is generated by the peripheral. or as a slave, + provided that the peripheral has been addressed + previously during this transfer. It is cleared by + software by setting the STOPCF bit. Note: This bit is + cleared by hardware when PE=0. + 5 + 1 + read-only + + + TC + Transfer Complete (master mode) This + flag is set by hardware when RELOAD=0, AUTOEND=0 and + NBYTES data have been transferred. It is cleared by + software when START bit or STOP bit is set. Note: + This bit is cleared by hardware when + PE=0. + 6 + 1 + read-only + + + TCR + Transfer Complete Reload This flag is + set by hardware when RELOAD=1 and NBYTES data have + been transferred. It is cleared by software when + NBYTES is written to a non-zero value. Note: This bit + is cleared by hardware when PE=0. This flag is only + for master mode, or for slave mode when the SBC bit + is set. + 7 + 1 + read-only + + + BERR + Bus error This flag is set by hardware + when a misplaced Start or Stop condition is detected + whereas the peripheral is involved in the transfer. + The flag is not set during the address phase in slave + mode. It is cleared by software by setting BERRCF + bit. Note: This bit is cleared by hardware when + PE=0. + 8 + 1 + read-only + + + ARLO + Arbitration lost This flag is set by + hardware in case of arbitration loss. It is cleared + by software by setting the ARLOCF bit. Note: This bit + is cleared by hardware when PE=0. + 9 + 1 + read-only + + + OVR + Overrun/Underrun (slave mode) This flag + is set by hardware in slave mode with NOSTRETCH=1, + when an overrun/underrun error occurs. It is cleared + by software by setting the OVRCF bit. Note: This bit + is cleared by hardware when PE=0. + 10 + 1 + read-only + + + PECERR + PEC Error in reception This flag is set + by hardware when the received PEC does not match with + the PEC register content. A NACK is automatically + sent after the wrong PEC reception. It is cleared by + software by setting the PECCF bit. Note: This bit is + cleared by hardware when PE=0. If the SMBus feature + is not supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 11 + 1 + read-only + + + TIMEOUT + Timeout or tLOW detection flag This flag + is set by hardware when a timeout or extended clock + timeout occurred. It is cleared by software by + setting the TIMEOUTCF bit. Note: This bit is cleared + by hardware when PE=0. If the SMBus feature is not + supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 12 + 1 + read-only + + + ALERT + SMBus alert This flag is set by hardware + when SMBHEN=1 (SMBus host configuration), ALERTEN=1 + and a SMBALERT event (falling edge) is detected on + SMBA pin. It is cleared by software by setting the + ALERTCF bit. Note: This bit is cleared by hardware + when PE=0. If the SMBus feature is not supported, + this bit is reserved and forced by hardware to 0. + Please refer to Section25.3: I2C + implementation. + 13 + 1 + read-only + + + BUSY + Bus busy This flag indicates that a + communication is in progress on the bus. It is set by + hardware when a START condition is detected. It is + cleared by hardware when a Stop condition is + detected, or when PE=0. + 15 + 1 + read-only + + + DIR + Transfer direction (Slave mode) This + flag is updated when an address match event occurs + (ADDR=1). + 16 + 1 + read-only + + + ADDCODE + Address match code (Slave mode) These + bits are updated with the received address when an + address match event occurs (ADDR = 1). In the case of + a 10-bit address, ADDCODE provides the 10-bit header + followed by the 2 MSBs of the address. + 17 + 7 + read-only + + + + + ICR + ICR + Access: No wait states + 0x1C + 0x20 + write-only + 0x00000000 + + + ADDRCF + Address matched flag clear Writing 1 to + this bit clears the ADDR flag in the I2C_ISR + register. Writing 1 to this bit also clears the START + bit in the I2C_CR2 register. + 3 + 1 + + + NACKCF + Not Acknowledge flag clear Writing 1 to + this bit clears the ACKF flag in I2C_ISR + register. + 4 + 1 + + + STOPCF + Stop detection flag clear Writing 1 to + this bit clears the STOPF flag in the I2C_ISR + register. + 5 + 1 + + + BERRCF + Bus error flag clear Writing 1 to this + bit clears the BERRF flag in the I2C_ISR + register. + 8 + 1 + + + ARLOCF + Arbitration Lost flag clear Writing 1 to + this bit clears the ARLO flag in the I2C_ISR + register. + 9 + 1 + + + OVRCF + Overrun/Underrun flag clear Writing 1 to + this bit clears the OVR flag in the I2C_ISR + register. + 10 + 1 + + + PECCF + PEC Error flag clear Writing 1 to this + bit clears the PECERR flag in the I2C_ISR register. + Note: If the SMBus feature is not supported, this bit + is reserved and forced by hardware to 0. Please refer + to Section25.3: I2C implementation. + 11 + 1 + + + TIMOUTCF + Timeout detection flag clear Writing 1 + to this bit clears the TIMEOUT flag in the I2C_ISR + register. Note: If the SMBus feature is not + supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 12 + 1 + + + ALERTCF + Alert flag clear Writing 1 to this bit + clears the ALERT flag in the I2C_ISR register. Note: + If the SMBus feature is not supported, this bit is + reserved and forced by hardware to 0. Please refer to + Section25.3: I2C implementation. + 13 + 1 + + + + + PECR + PECR + Access: No wait states + 0x20 + 0x20 + read-only + 0x00000000 + + + PEC + Packet error checking register This + field contains the internal PEC when PECEN=1. The PEC + is cleared by hardware when PE=0. + 0 + 8 + + + + + RXDR + RXDR + Access: No wait states + 0x24 + 0x20 + read-only + 0x00000000 + + + RXDATA + 8-bit receive data Data byte received + from the I2C bus. + 0 + 8 + + + + + TXDR + TXDR + Access: No wait states + 0x28 + 0x20 + read-write + 0x00000000 + + + TXDATA + 8-bit transmit data Data byte to be + transmitted to the I2C bus. Note: These bits can be + written only when TXE=1. + 0 + 8 + + + + + + + I2C2 + 0x40005800 + + I2C2_EV + I2C2 event interrupt + 33 + + + I2C2_ER + I2C2 error interrupt + 34 + + + + I2C3 + 0x40005C00 + + I2C3_EV + I2C3 event interrupt + 72 + + + I2C3_ER + I2C3 error interrupt + 73 + + + + I2C4 + 0x58001C00 + + I2C4_EV + I2C4 event interrupt + 95 + + + I2C4_ER + I2C4 error interrupt + 96 + + + + GPIOA + GPIO + GPIO + 0x58020000 + + 0x0 + 0x400 + registers + + + + MODER + MODER + GPIO port mode register + 0x0 + 0x20 + read-write + 0xABFFFFFF + + + MODE0 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 0 + 2 + + + MODE1 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 2 + 2 + + + MODE2 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 4 + 2 + + + MODE3 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 6 + 2 + + + MODE4 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 8 + 2 + + + MODE5 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 10 + 2 + + + MODE6 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 12 + 2 + + + MODE7 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 14 + 2 + + + MODE8 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 16 + 2 + + + MODE9 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 18 + 2 + + + MODE10 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 20 + 2 + + + MODE11 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 22 + 2 + + + MODE12 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 24 + 2 + + + MODE13 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 26 + 2 + + + MODE14 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 28 + 2 + + + MODE15 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 30 + 2 + + + + + OTYPER + OTYPER + GPIO port output type register + 0x4 + 0x20 + read-write + 0x00000000 + + + OT0 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 0 + 1 + + + OT1 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 1 + 1 + + + OT2 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 2 + 1 + + + OT3 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 3 + 1 + + + OT4 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 4 + 1 + + + OT5 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 5 + 1 + + + OT6 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 6 + 1 + + + OT7 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 7 + 1 + + + OT8 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 8 + 1 + + + OT9 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 9 + 1 + + + OT10 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 10 + 1 + + + OT11 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 11 + 1 + + + OT12 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 12 + 1 + + + OT13 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 13 + 1 + + + OT14 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 14 + 1 + + + OT15 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 15 + 1 + + + + + OSPEEDR + OSPEEDR + GPIO port output speed + register + 0x8 + 0x20 + read-write + 0x0C000000 + + + OSPEED0 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 0 + 2 + + + OSPEED1 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 2 + 2 + + + OSPEED2 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 4 + 2 + + + OSPEED3 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 6 + 2 + + + OSPEED4 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 8 + 2 + + + OSPEED5 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 10 + 2 + + + OSPEED6 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 12 + 2 + + + OSPEED7 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 14 + 2 + + + OSPEED8 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 16 + 2 + + + OSPEED9 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 18 + 2 + + + OSPEED10 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 20 + 2 + + + OSPEED11 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 22 + 2 + + + OSPEED12 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 24 + 2 + + + OSPEED13 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 26 + 2 + + + OSPEED14 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 28 + 2 + + + OSPEED15 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 30 + 2 + + + + + PUPDR + PUPDR + GPIO port pull-up/pull-down + register + 0xC + 0x20 + read-write + 0x12100000 + + + PUPD0 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 0 + 2 + + + PUPD1 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 2 + 2 + + + PUPD2 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 4 + 2 + + + PUPD3 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 6 + 2 + + + PUPD4 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 8 + 2 + + + PUPD5 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 10 + 2 + + + PUPD6 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 12 + 2 + + + PUPD7 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 14 + 2 + + + PUPD8 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 16 + 2 + + + PUPD9 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 18 + 2 + + + PUPD10 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 20 + 2 + + + PUPD11 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 22 + 2 + + + PUPD12 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 24 + 2 + + + PUPD13 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 26 + 2 + + + PUPD14 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 28 + 2 + + + PUPD15 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 30 + 2 + + + + + IDR + IDR + GPIO port input data register + 0x10 + 0x20 + read-only + 0x00000000 + + + ID0 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 0 + 1 + + + ID1 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 1 + 1 + + + ID2 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 2 + 1 + + + ID3 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 3 + 1 + + + ID4 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 4 + 1 + + + ID5 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 5 + 1 + + + ID6 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 6 + 1 + + + ID7 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 7 + 1 + + + ID8 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 8 + 1 + + + ID9 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 9 + 1 + + + ID10 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 10 + 1 + + + ID11 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 11 + 1 + + + ID12 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 12 + 1 + + + ID13 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 13 + 1 + + + ID14 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 14 + 1 + + + ID15 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 15 + 1 + + + + + ODR + ODR + GPIO port output data register + 0x14 + 0x20 + read-write + 0x00000000 + + + OD0 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 0 + 1 + + + OD1 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 1 + 1 + + + OD2 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 2 + 1 + + + OD3 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 3 + 1 + + + OD4 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 4 + 1 + + + OD5 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 5 + 1 + + + OD6 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 6 + 1 + + + OD7 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 7 + 1 + + + OD8 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 8 + 1 + + + OD9 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 9 + 1 + + + OD10 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 10 + 1 + + + OD11 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 11 + 1 + + + OD12 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 12 + 1 + + + OD13 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 13 + 1 + + + OD14 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 14 + 1 + + + OD15 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 15 + 1 + + + + + BSRR + BSRR + GPIO port bit set/reset + register + 0x18 + 0x20 + write-only + 0x00000000 + + + BS0 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 0 + 1 + + + BS1 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 1 + 1 + + + BS2 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 2 + 1 + + + BS3 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 3 + 1 + + + BS4 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 4 + 1 + + + BS5 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 5 + 1 + + + BS6 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 6 + 1 + + + BS7 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 7 + 1 + + + BS8 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 8 + 1 + + + BS9 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 9 + 1 + + + BS10 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 10 + 1 + + + BS11 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 11 + 1 + + + BS12 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 12 + 1 + + + BS13 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 13 + 1 + + + BS14 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 14 + 1 + + + BS15 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 15 + 1 + + + BR0 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 16 + 1 + + + BR1 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 17 + 1 + + + BR2 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 18 + 1 + + + BR3 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 19 + 1 + + + BR4 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 20 + 1 + + + BR5 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 21 + 1 + + + BR6 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 22 + 1 + + + BR7 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 23 + 1 + + + BR8 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 24 + 1 + + + BR9 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 25 + 1 + + + BR10 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 26 + 1 + + + BR11 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 27 + 1 + + + BR12 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 28 + 1 + + + BR13 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 29 + 1 + + + BR14 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 30 + 1 + + + BR15 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 31 + 1 + + + + + LCKR + LCKR + This register is used to lock the + configuration of the port bits when a correct write + sequence is applied to bit 16 (LCKK). The value of bits + [15:0] is used to lock the configuration of the GPIO. + During the write sequence, the value of LCKR[15:0] must + not change. When the LOCK sequence has been applied on a + port bit, the value of this port bit can no longer be + modified until the next MCU reset or peripheral reset.A + specific write sequence is used to write to the + GPIOx_LCKR register. Only word access (32-bit long) is + allowed during this locking sequence.Each lock bit + freezes a specific configuration register (control and + alternate function registers). + 0x1C + 0x20 + read-write + 0x00000000 + + + LCK0 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 0 + 1 + + + LCK1 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 1 + 1 + + + LCK2 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 2 + 1 + + + LCK3 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 3 + 1 + + + LCK4 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 4 + 1 + + + LCK5 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 5 + 1 + + + LCK6 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 6 + 1 + + + LCK7 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 7 + 1 + + + LCK8 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 8 + 1 + + + LCK9 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 9 + 1 + + + LCK10 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 10 + 1 + + + LCK11 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 11 + 1 + + + LCK12 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 12 + 1 + + + LCK13 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 13 + 1 + + + LCK14 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 14 + 1 + + + LCK15 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 15 + 1 + + + LCKK + Lock key This bit can be read any time. + It can only be modified using the lock key write + sequence. LOCK key write sequence: WR LCKR[16] = 1 + + LCKR[15:0] WR LCKR[16] = 0 + LCKR[15:0] WR LCKR[16] = + 1 + LCKR[15:0] RD LCKR RD LCKR[16] = 1 (this read + operation is optional but it confirms that the lock + is active) Note: During the LOCK key write sequence, + the value of LCK[15:0] must not change. Any error in + the lock sequence aborts the lock. After the first + lock sequence on any bit of the port, any read access + on the LCKK bit will return 1 until the next MCU + reset or peripheral reset. + 16 + 1 + + + + + AFRL + AFRL + GPIO alternate function low + register + 0x20 + 0x20 + read-write + 0x00000000 + + + AFSEL0 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 0 + 4 + + + AFSEL1 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 4 + 4 + + + AFSEL2 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 8 + 4 + + + AFSEL3 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 12 + 4 + + + AFSEL4 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 16 + 4 + + + AFSEL5 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 20 + 4 + + + AFSEL6 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 24 + 4 + + + AFSEL7 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 28 + 4 + + + + + AFRH + AFRH + GPIO alternate function high + register + 0x24 + 0x20 + read-write + 0x00000000 + + + AFSEL8 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 0 + 4 + + + AFSEL9 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 4 + 4 + + + AFSEL10 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 8 + 4 + + + AFSEL11 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 12 + 4 + + + AFSEL12 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 16 + 4 + + + AFSEL13 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 20 + 4 + + + AFSEL14 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 24 + 4 + + + AFSEL15 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 28 + 4 + + + + + + + GPIOB + 0x58020400 + + + GPIOC + 0x58020800 + + + GPIOD + 0x58020C00 + + + GPIOE + 0x58021000 + + + GPIOF + 0x58021400 + + + GPIOG + 0x58021800 + + + GPIOH + 0x58021C00 + + + GPIOI + 0x58022000 + + + GPIOJ + 0x58022400 + + + GPIOK + 0x58022800 + + + JPEG + JPEG + JPEG + 0x52003000 + + 0x0 + 0x400 + registers + + + JPEG + JPEG global interrupt + 121 + + + + CONFR0 + CONFR0 + JPEG codec control register + 0x0 + 0x20 + write-only + 0x00000000 + + + START + Start This bit start or stop the + encoding or decoding process. Read this register + always return 0. + 0 + 1 + + + + + CONFR1 + CONFR1 + JPEG codec configuration register + 1 + 0x4 + 0x20 + read-write + 0x00000000 + + + NF + Number of color components This field + defines the number of color components minus + 1. + 0 + 2 + + + DE + Decoding Enable This bit selects the + coding or decoding process + 3 + 1 + + + COLORSPACE + Color Space This filed defines the + number of quantization tables minus 1 to insert in + the output stream. + 4 + 2 + + + NS + Number of components for Scan This field + defines the number of components minus 1 for scan + header marker segment. + 6 + 2 + + + HDR + Header Processing This bit enable the + header processing (generation/parsing). + 8 + 1 + + + YSIZE + Y Size This field defines the number of + lines in source image. + 16 + 16 + + + + + CONFR2 + CONFR2 + JPEG codec configuration register + 2 + 0x8 + 0x20 + read-write + 0x00000000 + + + NMCU + Number of MCU For encoding: this field + defines the number of MCU units minus 1 to encode. + For decoding: this field indicates the number of + complete MCU units minus 1 to be decoded (this field + is updated after the JPEG header parsing). If the + decoded image size has not a X or Y size multiple of + 8 or 16 (depending on the sub-sampling process), the + resulting incomplete or empty MCU must be added to + this value to get the total number of MCU + generated. + 0 + 26 + + + + + CONFR3 + CONFR3 + JPEG codec configuration register + 3 + 0xC + 0x20 + read-write + 0x00000000 + + + XSIZE + X size This field defines the number of + pixels per line. + 16 + 16 + + + + + CONFRN1 + CONFRN1 + JPEG codec configuration register + 4-7 + 0x10 + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CONFRN2 + CONFRN2 + JPEG codec configuration register + 4-7 + 0x14 + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CONFRN3 + CONFRN3 + JPEG codec configuration register + 4-7 + 0x18 + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CONFRN4 + CONFRN4 + JPEG codec configuration register + 4-7 + 0x1C + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CR + CR + JPEG control register + 0x30 + 0x20 + read-write + 0x00000000 + + + JCEN + JPEG Core Enable Enable the JPEG codec + Core. + 0 + 1 + + + IFTIE + Input FIFO Threshold Interrupt Enable + This bit enables the interrupt generation when input + FIFO reach the threshold. + 1 + 1 + + + IFNFIE + Input FIFO Not Full Interrupt Enable + This bit enables the interrupt generation when input + FIFO is not empty. + 2 + 1 + + + OFTIE + Output FIFO Threshold Interrupt Enable + This bit enables the interrupt generation when output + FIFO reach the threshold. + 3 + 1 + + + OFNEIE + Output FIFO Not Empty Interrupt Enable + This bit enables the interrupt generation when output + FIFO is not empty. + 4 + 1 + + + EOCIE + End of Conversion Interrupt Enable This + bit enables the interrupt generation on the end of + conversion. + 5 + 1 + + + HPDIE + Header Parsing Done Interrupt Enable + This bit enables the interrupt generation on the + Header Parsing Operation. + 6 + 1 + + + IDMAEN + Input DMA Enable Enable the DMA request + generation for the input FIFO. + 11 + 1 + + + ODMAEN + Output DMA Enable Enable the DMA request + generation for the output FIFO. + 12 + 1 + + + IFF + Input FIFO Flush This bit flush the + input FIFO. This bit is always read as + 0. + 13 + 1 + + + OFF + Output FIFO Flush This bit flush the + output FIFO. This bit is always read as + 0. + 14 + 1 + + + + + SR + SR + JPEG status register + 0x34 + 0x20 + read-only + 0x00000006 + + + IFTF + Input FIFO Threshold Flag This bit is + set when the input FIFO is not full and is bellow its + threshold. + 1 + 1 + + + IFNFF + Input FIFO Not Full Flag This bit is set + when the input FIFO is not full (a data can be + written). + 2 + 1 + + + OFTF + Output FIFO Threshold Flag This bit is + set when the output FIFO is not empty and has reach + its threshold. + 3 + 1 + + + OFNEF + Output FIFO Not Empty Flag This bit is + set when the output FIFO is not empty (a data is + available). + 4 + 1 + + + EOCF + End of Conversion Flag This bit is set + when the JPEG codec core has finished the encoding or + the decoding process and than last data has been sent + to the output FIFO. + 5 + 1 + + + HPDF + Header Parsing Done Flag This bit is set + in decode mode when the JPEG codec has finished the + parsing of the headers and the internal registers + have been updated. + 6 + 1 + + + COF + Codec Operation Flag This bit is set + when when a JPEG codec operation is on going + (encoding or decoding). + 7 + 1 + + + + + CFR + CFR + JPEG clear flag register + 0x38 + 0x20 + read-write + 0x00000000 + + + CEOCF + Clear End of Conversion Flag Writing 1 + clears the End of Conversion Flag of the JPEG Status + Register. + 5 + 1 + + + CHPDF + Clear Header Parsing Done Flag Writing 1 + clears the Header Parsing Done Flag of the JPEG + Status Register. + 6 + 1 + + + + + DIR + DIR + JPEG data input register + 0x40 + 0x20 + write-only + 0x00000000 + + + DATAIN + Data Input FIFO Input FIFO data + register. + 0 + 32 + + + + + DOR + DOR + JPEG data output register + 0x44 + 0x20 + read-only + 0x00000000 + + + DATAOUT + Data Output FIFO Output FIFO data + register. + 0 + 32 + + + + + + + MDMA + MDMA + MDMA + 0x52000000 + + 0x0 + 0x1000 + registers + + + MDMA + MDMA + 122 + + + + MDMA_GISR0 + MDMA_GISR0 + MDMA Global Interrupt/Status + Register + 0x0 + 0x20 + read-only + 0x00000000 + + + GIF0 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 0 + 1 + + + GIF1 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 1 + 1 + + + GIF2 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 2 + 1 + + + GIF3 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 3 + 1 + + + GIF4 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 4 + 1 + + + GIF5 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 5 + 1 + + + GIF6 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 6 + 1 + + + GIF7 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 7 + 1 + + + GIF8 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 8 + 1 + + + GIF9 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 9 + 1 + + + GIF10 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 10 + 1 + + + GIF11 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 11 + 1 + + + GIF12 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 12 + 1 + + + GIF13 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 13 + 1 + + + GIF14 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 14 + 1 + + + GIF15 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 15 + 1 + + + + + MDMA_C0ISR + MDMA_C0ISR + MDMA channel x interrupt/status + register + 0x40 + 0x20 + read-only + 0x00000000 + + + TEIF0 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF0 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF0 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF0 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF0 + channel x buffer transfer + complete + 4 + 1 + + + CRQA0 + channel x request active + flag + 16 + 1 + + + + + MDMA_C0IFCR + MDMA_C0IFCR + MDMA channel x interrupt flag clear + register + 0x44 + 0x20 + write-only + 0x00000000 + + + CTEIF0 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF0 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF0 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF0 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF0 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C0ESR + MDMA_C0ESR + MDMA Channel x error status + register + 0x48 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C0CR + MDMA_C0CR + This register is used to control the + concerned channel. + 0x4C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C0TCR + MDMA_C0TCR + This register is used to configure the + concerned channel. + 0x50 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C0BNDTR + MDMA_C0BNDTR + MDMA Channel x block number of data + register + 0x54 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C0SAR + MDMA_C0SAR + MDMA channel x source address + register + 0x58 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C0DAR + MDMA_C0DAR + MDMA channel x destination address + register + 0x5C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C0BRUR + MDMA_C0BRUR + MDMA channel x Block Repeat address Update + register + 0x60 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C0LAR + MDMA_C0LAR + MDMA channel x Link Address + register + 0x64 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C0TBR + MDMA_C0TBR + MDMA channel x Trigger and Bus selection + Register + 0x68 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C0MAR + MDMA_C0MAR + MDMA channel x Mask address + register + 0x70 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C0MDR + MDMA_C0MDR + MDMA channel x Mask Data + register + 0x74 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C1ISR + MDMA_C1ISR + MDMA channel x interrupt/status + register + 0x80 + 0x20 + read-only + 0x00000000 + + + TEIF1 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF1 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF1 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF1 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF1 + channel x buffer transfer + complete + 4 + 1 + + + CRQA1 + channel x request active + flag + 16 + 1 + + + + + MDMA_C1IFCR + MDMA_C1IFCR + MDMA channel x interrupt flag clear + register + 0x84 + 0x20 + write-only + 0x00000000 + + + CTEIF1 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF1 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF1 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF1 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF1 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C1ESR + MDMA_C1ESR + MDMA Channel x error status + register + 0x88 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C1CR + MDMA_C1CR + This register is used to control the + concerned channel. + 0x8C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C1TCR + MDMA_C1TCR + This register is used to configure the + concerned channel. + 0x90 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C1BNDTR + MDMA_C1BNDTR + MDMA Channel x block number of data + register + 0x94 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C1SAR + MDMA_C1SAR + MDMA channel x source address + register + 0x98 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C1DAR + MDMA_C1DAR + MDMA channel x destination address + register + 0x9C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C1BRUR + MDMA_C1BRUR + MDMA channel x Block Repeat address Update + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C1LAR + MDMA_C1LAR + MDMA channel x Link Address + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C1TBR + MDMA_C1TBR + MDMA channel x Trigger and Bus selection + Register + 0xA8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C1MAR + MDMA_C1MAR + MDMA channel x Mask address + register + 0xB0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C1MDR + MDMA_C1MDR + MDMA channel x Mask Data + register + 0xB4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C2ISR + MDMA_C2ISR + MDMA channel x interrupt/status + register + 0xC0 + 0x20 + read-only + 0x00000000 + + + TEIF2 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF2 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF2 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF2 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF2 + channel x buffer transfer + complete + 4 + 1 + + + CRQA2 + channel x request active + flag + 16 + 1 + + + + + MDMA_C2IFCR + MDMA_C2IFCR + MDMA channel x interrupt flag clear + register + 0xC4 + 0x20 + write-only + 0x00000000 + + + CTEIF2 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF2 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF2 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF2 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF2 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C2ESR + MDMA_C2ESR + MDMA Channel x error status + register + 0xC8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C2CR + MDMA_C2CR + This register is used to control the + concerned channel. + 0xCC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C2TCR + MDMA_C2TCR + This register is used to configure the + concerned channel. + 0xD0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C2BNDTR + MDMA_C2BNDTR + MDMA Channel x block number of data + register + 0xD4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C2SAR + MDMA_C2SAR + MDMA channel x source address + register + 0xD8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C2DAR + MDMA_C2DAR + MDMA channel x destination address + register + 0xDC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C2BRUR + MDMA_C2BRUR + MDMA channel x Block Repeat address Update + register + 0xE0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C2LAR + MDMA_C2LAR + MDMA channel x Link Address + register + 0xE4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C2TBR + MDMA_C2TBR + MDMA channel x Trigger and Bus selection + Register + 0xE8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C2MAR + MDMA_C2MAR + MDMA channel x Mask address + register + 0xF0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C2MDR + MDMA_C2MDR + MDMA channel x Mask Data + register + 0xF4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C3ISR + MDMA_C3ISR + MDMA channel x interrupt/status + register + 0x100 + 0x20 + read-only + 0x00000000 + + + TEIF3 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF3 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF3 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF3 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF3 + channel x buffer transfer + complete + 4 + 1 + + + CRQA3 + channel x request active + flag + 16 + 1 + + + + + MDMA_C3IFCR + MDMA_C3IFCR + MDMA channel x interrupt flag clear + register + 0x104 + 0x20 + write-only + 0x00000000 + + + CTEIF3 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF3 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF3 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF3 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF3 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C3ESR + MDMA_C3ESR + MDMA Channel x error status + register + 0x108 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C3CR + MDMA_C3CR + This register is used to control the + concerned channel. + 0x10C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C3TCR + MDMA_C3TCR + This register is used to configure the + concerned channel. + 0x110 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C3BNDTR + MDMA_C3BNDTR + MDMA Channel x block number of data + register + 0x114 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C3SAR + MDMA_C3SAR + MDMA channel x source address + register + 0x118 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C3DAR + MDMA_C3DAR + MDMA channel x destination address + register + 0x11C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C3BRUR + MDMA_C3BRUR + MDMA channel x Block Repeat address Update + register + 0x120 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C3LAR + MDMA_C3LAR + MDMA channel x Link Address + register + 0x124 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C3TBR + MDMA_C3TBR + MDMA channel x Trigger and Bus selection + Register + 0x128 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C3MAR + MDMA_C3MAR + MDMA channel x Mask address + register + 0x130 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C3MDR + MDMA_C3MDR + MDMA channel x Mask Data + register + 0x134 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C4ISR + MDMA_C4ISR + MDMA channel x interrupt/status + register + 0x140 + 0x20 + read-only + 0x00000000 + + + TEIF4 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF4 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF4 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF4 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF4 + channel x buffer transfer + complete + 4 + 1 + + + CRQA4 + channel x request active + flag + 16 + 1 + + + + + MDMA_C4IFCR + MDMA_C4IFCR + MDMA channel x interrupt flag clear + register + 0x144 + 0x20 + write-only + 0x00000000 + + + CTEIF4 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF4 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF4 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF4 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF4 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C4ESR + MDMA_C4ESR + MDMA Channel x error status + register + 0x148 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C4CR + MDMA_C4CR + This register is used to control the + concerned channel. + 0x14C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C4TCR + MDMA_C4TCR + This register is used to configure the + concerned channel. + 0x150 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C4BNDTR + MDMA_C4BNDTR + MDMA Channel x block number of data + register + 0x154 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C4SAR + MDMA_C4SAR + MDMA channel x source address + register + 0x158 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C4DAR + MDMA_C4DAR + MDMA channel x destination address + register + 0x15C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C4BRUR + MDMA_C4BRUR + MDMA channel x Block Repeat address Update + register + 0x160 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C4LAR + MDMA_C4LAR + MDMA channel x Link Address + register + 0x164 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C4TBR + MDMA_C4TBR + MDMA channel x Trigger and Bus selection + Register + 0x168 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C4MAR + MDMA_C4MAR + MDMA channel x Mask address + register + 0x170 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C4MDR + MDMA_C4MDR + MDMA channel x Mask Data + register + 0x174 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C5ISR + MDMA_C5ISR + MDMA channel x interrupt/status + register + 0x180 + 0x20 + read-only + 0x00000000 + + + TEIF5 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF5 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF5 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF5 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF5 + channel x buffer transfer + complete + 4 + 1 + + + CRQA5 + channel x request active + flag + 16 + 1 + + + + + MDMA_C5IFCR + MDMA_C5IFCR + MDMA channel x interrupt flag clear + register + 0x184 + 0x20 + write-only + 0x00000000 + + + CTEIF5 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF5 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF5 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF5 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF5 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C5ESR + MDMA_C5ESR + MDMA Channel x error status + register + 0x188 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C5CR + MDMA_C5CR + This register is used to control the + concerned channel. + 0x18C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C5TCR + MDMA_C5TCR + This register is used to configure the + concerned channel. + 0x190 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C5BNDTR + MDMA_C5BNDTR + MDMA Channel x block number of data + register + 0x194 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C5SAR + MDMA_C5SAR + MDMA channel x source address + register + 0x198 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C5DAR + MDMA_C5DAR + MDMA channel x destination address + register + 0x19C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C5BRUR + MDMA_C5BRUR + MDMA channel x Block Repeat address Update + register + 0x1A0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C5LAR + MDMA_C5LAR + MDMA channel x Link Address + register + 0x1A4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C5TBR + MDMA_C5TBR + MDMA channel x Trigger and Bus selection + Register + 0x1A8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C5MAR + MDMA_C5MAR + MDMA channel x Mask address + register + 0x1B0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C5MDR + MDMA_C5MDR + MDMA channel x Mask Data + register + 0x1B4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C6ISR + MDMA_C6ISR + MDMA channel x interrupt/status + register + 0x1C0 + 0x20 + read-only + 0x00000000 + + + TEIF6 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF6 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF6 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF6 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF6 + channel x buffer transfer + complete + 4 + 1 + + + CRQA6 + channel x request active + flag + 16 + 1 + + + + + MDMA_C6IFCR + MDMA_C6IFCR + MDMA channel x interrupt flag clear + register + 0x1C4 + 0x20 + write-only + 0x00000000 + + + CTEIF6 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF6 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF6 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF6 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF6 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C6ESR + MDMA_C6ESR + MDMA Channel x error status + register + 0x1C8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C6CR + MDMA_C6CR + This register is used to control the + concerned channel. + 0x1CC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C6TCR + MDMA_C6TCR + This register is used to configure the + concerned channel. + 0x1D0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C6BNDTR + MDMA_C6BNDTR + MDMA Channel x block number of data + register + 0x1D4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0 + 20 + 12 + + + + + MDMA_C6SAR + MDMA_C6SAR + MDMA channel x source address + register + 0x1D8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C6DAR + MDMA_C6DAR + MDMA channel x destination address + register + 0x1DC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C6BRUR + MDMA_C6BRUR + MDMA channel x Block Repeat address Update + register + 0x1E0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C6LAR + MDMA_C6LAR + MDMA channel x Link Address + register + 0x1E4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C6TBR + MDMA_C6TBR + MDMA channel x Trigger and Bus selection + Register + 0x1E8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C6MAR + MDMA_C6MAR + MDMA channel x Mask address + register + 0x1F0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C6MDR + MDMA_C6MDR + MDMA channel x Mask Data + register + 0x1F4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C7ISR + MDMA_C7ISR + MDMA channel x interrupt/status + register + 0x200 + 0x20 + read-only + 0x00000000 + + + TEIF7 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF7 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF7 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF7 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF7 + channel x buffer transfer + complete + 4 + 1 + + + CRQA7 + channel x request active + flag + 16 + 1 + + + + + MDMA_C7IFCR + MDMA_C7IFCR + MDMA channel x interrupt flag clear + register + 0x204 + 0x20 + write-only + 0x00000000 + + + CTEIF7 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF7 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF7 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF7 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF7 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C7ESR + MDMA_C7ESR + MDMA Channel x error status + register + 0x208 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C7CR + MDMA_C7CR + This register is used to control the + concerned channel. + 0x20C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C7TCR + MDMA_C7TCR + This register is used to configure the + concerned channel. + 0x210 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C7BNDTR + MDMA_C7BNDTR + MDMA Channel x block number of data + register + 0x214 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C7SAR + MDMA_C7SAR + MDMA channel x source address + register + 0x218 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C7DAR + MDMA_C7DAR + MDMA channel x destination address + register + 0x21C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C7BRUR + MDMA_C7BRUR + MDMA channel x Block Repeat address Update + register + 0x220 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C7LAR + MDMA_C7LAR + MDMA channel x Link Address + register + 0x224 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C7TBR + MDMA_C7TBR + MDMA channel x Trigger and Bus selection + Register + 0x228 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C7MAR + MDMA_C7MAR + MDMA channel x Mask address + register + 0x230 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C7MDR + MDMA_C7MDR + MDMA channel x Mask Data + register + 0x234 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C8ISR + MDMA_C8ISR + MDMA channel x interrupt/status + register + 0x240 + 0x20 + read-only + 0x00000000 + + + TEIF8 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF8 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF8 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF8 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF8 + channel x buffer transfer + complete + 4 + 1 + + + CRQA8 + channel x request active + flag + 16 + 1 + + + + + MDMA_C8IFCR + MDMA_C8IFCR + MDMA channel x interrupt flag clear + register + 0x244 + 0x20 + write-only + 0x00000000 + + + CTEIF8 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF8 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF8 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF8 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF8 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C8ESR + MDMA_C8ESR + MDMA Channel x error status + register + 0x248 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C8CR + MDMA_C8CR + This register is used to control the + concerned channel. + 0x24C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C8TCR + MDMA_C8TCR + This register is used to configure the + concerned channel. + 0x250 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C8BNDTR + MDMA_C8BNDTR + MDMA Channel x block number of data + register + 0x254 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C8SAR + MDMA_C8SAR + MDMA channel x source address + register + 0x258 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C8DAR + MDMA_C8DAR + MDMA channel x destination address + register + 0x25C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C8BRUR + MDMA_C8BRUR + MDMA channel x Block Repeat address Update + register + 0x260 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C8LAR + MDMA_C8LAR + MDMA channel x Link Address + register + 0x264 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C8TBR + MDMA_C8TBR + MDMA channel x Trigger and Bus selection + Register + 0x268 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C8MAR + MDMA_C8MAR + MDMA channel x Mask address + register + 0x270 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C8MDR + MDMA_C8MDR + MDMA channel x Mask Data + register + 0x274 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C9ISR + MDMA_C9ISR + MDMA channel x interrupt/status + register + 0x280 + 0x20 + read-only + 0x00000000 + + + TEIF9 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF9 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF9 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF9 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF9 + channel x buffer transfer + complete + 4 + 1 + + + CRQA9 + channel x request active + flag + 16 + 1 + + + + + MDMA_C9IFCR + MDMA_C9IFCR + MDMA channel x interrupt flag clear + register + 0x284 + 0x20 + write-only + 0x00000000 + + + CTEIF9 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF9 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF9 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF9 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF9 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C9ESR + MDMA_C9ESR + MDMA Channel x error status + register + 0x288 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C9CR + MDMA_C9CR + This register is used to control the + concerned channel. + 0x28C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C9TCR + MDMA_C9TCR + This register is used to configure the + concerned channel. + 0x290 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C9BNDTR + MDMA_C9BNDTR + MDMA Channel x block number of data + register + 0x294 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C9SAR + MDMA_C9SAR + MDMA channel x source address + register + 0x298 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C9DAR + MDMA_C9DAR + MDMA channel x destination address + register + 0x29C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C9BRUR + MDMA_C9BRUR + MDMA channel x Block Repeat address Update + register + 0x2A0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C9LAR + MDMA_C9LAR + MDMA channel x Link Address + register + 0x2A4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C9TBR + MDMA_C9TBR + MDMA channel x Trigger and Bus selection + Register + 0x2A8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C9MAR + MDMA_C9MAR + MDMA channel x Mask address + register + 0x2B0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C9MDR + MDMA_C9MDR + MDMA channel x Mask Data + register + 0x2B4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C10ISR + MDMA_C10ISR + MDMA channel x interrupt/status + register + 0x2C0 + 0x20 + read-only + 0x00000000 + + + TEIF10 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF10 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF10 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF10 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF10 + channel x buffer transfer + complete + 4 + 1 + + + CRQA10 + channel x request active + flag + 16 + 1 + + + + + MDMA_C10IFCR + MDMA_C10IFCR + MDMA channel x interrupt flag clear + register + 0x2C4 + 0x20 + write-only + 0x00000000 + + + CTEIF10 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF10 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF10 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF10 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF10 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C10ESR + MDMA_C10ESR + MDMA Channel x error status + register + 0x2C8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C10CR + MDMA_C10CR + This register is used to control the + concerned channel. + 0x2CC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C10TCR + MDMA_C10TCR + This register is used to configure the + concerned channel. + 0x2D0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C10BNDTR + MDMA_C10BNDTR + MDMA Channel x block number of data + register + 0x2D4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C10SAR + MDMA_C10SAR + MDMA channel x source address + register + 0x2D8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C10DAR + MDMA_C10DAR + MDMA channel x destination address + register + 0x2DC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C10BRUR + MDMA_C10BRUR + MDMA channel x Block Repeat address Update + register + 0x2E0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C10LAR + MDMA_C10LAR + MDMA channel x Link Address + register + 0x2E4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C10TBR + MDMA_C10TBR + MDMA channel x Trigger and Bus selection + Register + 0x2E8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C10MAR + MDMA_C10MAR + MDMA channel x Mask address + register + 0x2F0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C10MDR + MDMA_C10MDR + MDMA channel x Mask Data + register + 0x2F4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C11ISR + MDMA_C11ISR + MDMA channel x interrupt/status + register + 0x300 + 0x20 + read-only + 0x00000000 + + + TEIF11 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF11 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF11 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF11 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF11 + channel x buffer transfer + complete + 4 + 1 + + + CRQA11 + channel x request active + flag + 16 + 1 + + + + + MDMA_C11IFCR + MDMA_C11IFCR + MDMA channel x interrupt flag clear + register + 0x304 + 0x20 + write-only + 0x00000000 + + + CTEIF11 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF11 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF11 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF11 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF11 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C11ESR + MDMA_C11ESR + MDMA Channel x error status + register + 0x308 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C11CR + MDMA_C11CR + This register is used to control the + concerned channel. + 0x30C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C11TCR + MDMA_C11TCR + This register is used to configure the + concerned channel. + 0x310 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C11BNDTR + MDMA_C11BNDTR + MDMA Channel x block number of data + register + 0x314 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C11SAR + MDMA_C11SAR + MDMA channel x source address + register + 0x318 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C11DAR + MDMA_C11DAR + MDMA channel x destination address + register + 0x31C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C11BRUR + MDMA_C11BRUR + MDMA channel x Block Repeat address Update + register + 0x320 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C11LAR + MDMA_C11LAR + MDMA channel x Link Address + register + 0x324 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C11TBR + MDMA_C11TBR + MDMA channel x Trigger and Bus selection + Register + 0x328 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C11MAR + MDMA_C11MAR + MDMA channel x Mask address + register + 0x330 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C11MDR + MDMA_C11MDR + MDMA channel x Mask Data + register + 0x334 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C12ISR + MDMA_C12ISR + MDMA channel x interrupt/status + register + 0x340 + 0x20 + read-only + 0x00000000 + + + TEIF12 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF12 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF12 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF12 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF12 + channel x buffer transfer + complete + 4 + 1 + + + CRQA12 + channel x request active + flag + 16 + 1 + + + + + MDMA_C12IFCR + MDMA_C12IFCR + MDMA channel x interrupt flag clear + register + 0x344 + 0x20 + write-only + 0x00000000 + + + CTEIF12 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF12 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF12 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF12 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF12 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C12ESR + MDMA_C12ESR + MDMA Channel x error status + register + 0x348 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C12CR + MDMA_C12CR + This register is used to control the + concerned channel. + 0x34C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C12TCR + MDMA_C12TCR + This register is used to configure the + concerned channel. + 0x350 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C12BNDTR + MDMA_C12BNDTR + MDMA Channel x block number of data + register + 0x354 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C12SAR + MDMA_C12SAR + MDMA channel x source address + register + 0x358 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C12DAR + MDMA_C12DAR + MDMA channel x destination address + register + 0x35C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C12BRUR + MDMA_C12BRUR + MDMA channel x Block Repeat address Update + register + 0x360 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C12LAR + MDMA_C12LAR + MDMA channel x Link Address + register + 0x364 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C12TBR + MDMA_C12TBR + MDMA channel x Trigger and Bus selection + Register + 0x368 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C12MAR + MDMA_C12MAR + MDMA channel x Mask address + register + 0x370 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C12MDR + MDMA_C12MDR + MDMA channel x Mask Data + register + 0x374 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C13ISR + MDMA_C13ISR + MDMA channel x interrupt/status + register + 0x380 + 0x20 + read-only + 0x00000000 + + + TEIF13 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF13 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF13 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF13 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF13 + channel x buffer transfer + complete + 4 + 1 + + + CRQA13 + channel x request active + flag + 16 + 1 + + + + + MDMA_C13IFCR + MDMA_C13IFCR + MDMA channel x interrupt flag clear + register + 0x384 + 0x20 + write-only + 0x00000000 + + + CTEIF13 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF13 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF13 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF13 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF13 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C13ESR + MDMA_C13ESR + MDMA Channel x error status + register + 0x388 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C13CR + MDMA_C13CR + This register is used to control the + concerned channel. + 0x38C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C13TCR + MDMA_C13TCR + This register is used to configure the + concerned channel. + 0x390 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C13BNDTR + MDMA_C13BNDTR + MDMA Channel x block number of data + register + 0x394 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C13SAR + MDMA_C13SAR + MDMA channel x source address + register + 0x398 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C13DAR + MDMA_C13DAR + MDMA channel x destination address + register + 0x39C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C13BRUR + MDMA_C13BRUR + MDMA channel x Block Repeat address Update + register + 0x3A0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C13LAR + MDMA_C13LAR + MDMA channel x Link Address + register + 0x3A4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C13TBR + MDMA_C13TBR + MDMA channel x Trigger and Bus selection + Register + 0x3A8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C13MAR + MDMA_C13MAR + MDMA channel x Mask address + register + 0x3B0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C13MDR + MDMA_C13MDR + MDMA channel x Mask Data + register + 0x3B4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C14ISR + MDMA_C14ISR + MDMA channel x interrupt/status + register + 0x3C0 + 0x20 + read-only + 0x00000000 + + + TEIF14 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF14 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF14 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF14 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF14 + channel x buffer transfer + complete + 4 + 1 + + + CRQA14 + channel x request active + flag + 16 + 1 + + + + + MDMA_C14IFCR + MDMA_C14IFCR + MDMA channel x interrupt flag clear + register + 0x3C4 + 0x20 + write-only + 0x00000000 + + + CTEIF14 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF14 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF14 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF14 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF14 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C14ESR + MDMA_C14ESR + MDMA Channel x error status + register + 0x3C8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C14CR + MDMA_C14CR + This register is used to control the + concerned channel. + 0x3CC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C14TCR + MDMA_C14TCR + This register is used to configure the + concerned channel. + 0x3D0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C14BNDTR + MDMA_C14BNDTR + MDMA Channel x block number of data + register + 0x3D4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C14SAR + MDMA_C14SAR + MDMA channel x source address + register + 0x3D8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C14DAR + MDMA_C14DAR + MDMA channel x destination address + register + 0x3DC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C14BRUR + MDMA_C14BRUR + MDMA channel x Block Repeat address Update + register + 0x3E0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C14LAR + MDMA_C14LAR + MDMA channel x Link Address + register + 0x3E4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C14TBR + MDMA_C14TBR + MDMA channel x Trigger and Bus selection + Register + 0x3E8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C14MAR + MDMA_C14MAR + MDMA channel x Mask address + register + 0x3F0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C14MDR + MDMA_C14MDR + MDMA channel x Mask Data + register + 0x3F4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C15ISR + MDMA_C15ISR + MDMA channel x interrupt/status + register + 0x400 + 0x20 + read-only + 0x00000000 + + + TEIF15 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF15 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF15 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF15 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF15 + channel x buffer transfer + complete + 4 + 1 + + + CRQA15 + channel x request active + flag + 16 + 1 + + + + + MDMA_C15IFCR + MDMA_C15IFCR + MDMA channel x interrupt flag clear + register + 0x404 + 0x20 + write-only + 0x00000000 + + + CTEIF15 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF15 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF15 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF15 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF15 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C15ESR + MDMA_C15ESR + MDMA Channel x error status + register + 0x408 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C15CR + MDMA_C15CR + This register is used to control the + concerned channel. + 0x40C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C15TCR + MDMA_C15TCR + This register is used to configure the + concerned channel. + 0x410 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C15BNDTR + MDMA_C15BNDTR + MDMA Channel x block number of data + register + 0x414 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C15SAR + MDMA_C15SAR + MDMA channel x source address + register + 0x418 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C15DAR + MDMA_C15DAR + MDMA channel x destination address + register + 0x41C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C15BRUR + MDMA_C15BRUR + MDMA channel x Block Repeat address Update + register + 0x420 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C15LAR + MDMA_C15LAR + MDMA channel x Link Address + register + 0x424 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C15TBR + MDMA_C15TBR + MDMA channel x Trigger and Bus selection + Register + 0x428 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C15MAR + MDMA_C15MAR + MDMA channel x Mask address + register + 0x430 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C15MDR + MDMA_C15MDR + MDMA channel x Mask Data + register + 0x434 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + + + QUADSPI + QUADSPI + QUADSPI + 0x52005000 + + 0x0 + 0x400 + registers + + + QUADSPI + QuadSPI global interrupt + 92 + + + + CR + CR + QUADSPI control register + 0x0 + 0x20 + read-write + 0x00000000 + + + EN + Enable Enable the QUADSPI. + 0 + 1 + + + ABORT + Abort request This bit aborts the + on-going command sequence. It is automatically reset + once the abort is complete. This bit stops the + current transfer. In polling mode or memory-mapped + mode, this bit also reset the APM bit or the DM + bit. + 1 + 1 + + + DMAEN + DMA enable In indirect mode, DMA can be + used to input or output data via the QUADSPI_DR + register. DMA transfers are initiated when the FIFO + threshold flag, FTF, is set. + 2 + 1 + + + TCEN + Timeout counter enable This bit is valid + only when memory-mapped mode (FMODE = 11) is + selected. Activating this bit causes the chip select + (nCS) to be released (and thus reduces consumption) + if there has not been an access after a certain + amount of time, where this time is defined by + TIMEOUT[15:0] (QUADSPI_LPTR). Enable the timeout + counter. By default, the QUADSPI never stops its + prefetch operation, keeping the previous read + operation active with nCS maintained low, even if no + access to the Flash memory occurs for a long time. + Since Flash memories tend to consume more when nCS is + held low, the application might want to activate the + timeout counter (TCEN = 1, QUADSPI_CR[3]) so that nCS + is released after a period of TIMEOUT[15:0] + (QUADSPI_LPTR) cycles have elapsed without an access + since when the FIFO becomes full with prefetch data. + This bit can be modified only when BUSY = + 0. + 3 + 1 + + + SSHIFT + Sample shift By default, the QUADSPI + samples data 1/2 of a CLK cycle after the data is + driven by the Flash memory. This bit allows the data + is to be sampled later in order to account for + external signal delays. Firmware must assure that + SSHIFT = 0 when in DDR mode (when DDRM = 1). This + field can be modified only when BUSY = + 0. + 4 + 1 + + + DFM + Dual-flash mode This bit activates + dual-flash mode, where two external Flash memories + are used simultaneously to double throughput and + capacity. This bit can be modified only when BUSY = + 0. + 6 + 1 + + + FSEL + Flash memory selection This bit selects + the Flash memory to be addressed in single flash mode + (when DFM = 0). This bit can be modified only when + BUSY = 0. This bit is ignored when DFM = + 1. + 7 + 1 + + + FTHRES + FIFO threshold level Defines, in + indirect mode, the threshold number of bytes in the + FIFO that will cause the FIFO threshold flag (FTF, + QUADSPI_SR[2]) to be set. In indirect write mode + (FMODE = 00): ... In indirect read mode (FMODE = 01): + ... If DMAEN = 1, then the DMA controller for the + corresponding channel must be disabled before + changing the FTHRES value. + 8 + 5 + + + TEIE + Transfer error interrupt enable This bit + enables the transfer error interrupt. + 16 + 1 + + + TCIE + Transfer complete interrupt enable This + bit enables the transfer complete + interrupt. + 17 + 1 + + + FTIE + FIFO threshold interrupt enable This bit + enables the FIFO threshold interrupt. + 18 + 1 + + + SMIE + Status match interrupt enable This bit + enables the status match interrupt. + 19 + 1 + + + TOIE + TimeOut interrupt enable This bit + enables the TimeOut interrupt. + 20 + 1 + + + APMS + Automatic poll mode stop This bit + determines if automatic polling is stopped after a + match. This bit can be modified only when BUSY = + 0. + 22 + 1 + + + PMM + Polling match mode This bit indicates + which method should be used for determining a match + during automatic polling mode. This bit can be + modified only when BUSY = 0. + 23 + 1 + + + PRESCALER + clock prescaler + 24 + 8 + + + + + DCR + DCR + QUADSPI device configuration + register + 0x4 + 0x20 + read-write + 0x00000000 + + + CKMODE + indicates the level that clk takes + between command + 0 + 1 + + + CSHT + Chip select high time CSHT+1 defines the + minimum number of CLK cycles which the chip select + (nCS) must remain high between commands issued to the + Flash memory. ... This field can be modified only + when BUSY = 0. + 8 + 3 + + + FSIZE + Flash memory size This field defines the + size of external memory using the following formula: + Number of bytes in Flash memory = 2[FSIZE+1] FSIZE+1 + is effectively the number of address bits required to + address the Flash memory. The Flash memory capacity + can be up to 4GB (addressed using 32 bits) in + indirect mode, but the addressable space in + memory-mapped mode is limited to 256MB. If DFM = 1, + FSIZE indicates the total capacity of the two Flash + memories together. This field can be modified only + when BUSY = 0. + 16 + 5 + + + + + SR + SR + QUADSPI status register + 0x8 + 0x20 + read-only + 0x00000000 + + + TEF + Transfer error flag This bit is set in + indirect mode when an invalid address is being + accessed in indirect mode. It is cleared by writing 1 + to CTEF. + 0 + 1 + + + TCF + Transfer complete flag This bit is set + in indirect mode when the programmed number of data + has been transferred or in any mode when the transfer + has been aborted.It is cleared by writing 1 to + CTCF. + 1 + 1 + + + FTF + FIFO threshold flag In indirect mode, + this bit is set when the FIFO threshold has been + reached, or if there is any data left in the FIFO + after reads from the Flash memory are complete. It is + cleared automatically as soon as threshold condition + is no longer true. In automatic polling mode this bit + is set every time the status register is read, and + the bit is cleared when the data register is + read. + 2 + 1 + + + SMF + Status match flag This bit is set in + automatic polling mode when the unmasked received + data matches the corresponding bits in the match + register (QUADSPI_PSMAR). It is cleared by writing 1 + to CSMF. + 3 + 1 + + + TOF + Timeout flag This bit is set when + timeout occurs. It is cleared by writing 1 to + CTOF. + 4 + 1 + + + BUSY + Busy This bit is set when an operation + is on going. This bit clears automatically when the + operation with the Flash memory is finished and the + FIFO is empty. + 5 + 1 + + + FLEVEL + FIFO level This field gives the number + of valid bytes which are being held in the FIFO. + FLEVEL = 0 when the FIFO is empty, and 16 when it is + full. In memory-mapped mode and in automatic status + polling mode, FLEVEL is zero. + 8 + 6 + + + + + FCR + FCR + QUADSPI flag clear register + 0xC + 0x20 + read-write + 0x00000000 + + + CTEF + Clear transfer error flag Writing 1 + clears the TEF flag in the QUADSPI_SR + register + 0 + 1 + + + CTCF + Clear transfer complete flag Writing 1 + clears the TCF flag in the QUADSPI_SR + register + 1 + 1 + + + CSMF + Clear status match flag Writing 1 clears + the SMF flag in the QUADSPI_SR register + 3 + 1 + + + CTOF + Clear timeout flag Writing 1 clears the + TOF flag in the QUADSPI_SR register + 4 + 1 + + + + + DLR + DLR + QUADSPI data length register + 0x10 + 0x20 + read-write + 0x00000000 + + + DL + Data length Number of data to be + retrieved (value+1) in indirect and status-polling + modes. A value no greater than 3 (indicating 4 bytes) + should be used for status-polling mode. All 1s in + indirect mode means undefined length, where QUADSPI + will continue until the end of memory, as defined by + FSIZE. 0x0000_0000: 1 byte is to be transferred + 0x0000_0001: 2 bytes are to be transferred + 0x0000_0002: 3 bytes are to be transferred + 0x0000_0003: 4 bytes are to be transferred ... + 0xFFFF_FFFD: 4,294,967,294 (4G-2) bytes are to be + transferred 0xFFFF_FFFE: 4,294,967,295 (4G-1) bytes + are to be transferred 0xFFFF_FFFF: undefined length + -- all bytes until the end of Flash memory (as + defined by FSIZE) are to be transferred. Continue + reading indefinitely if FSIZE = 0x1F. DL[0] is stuck + at 1 in dual-flash mode (DFM = 1) even when 0 is + written to this bit, thus assuring that each access + transfers an even number of bytes. This field has no + effect when in memory-mapped mode (FMODE = 10). This + field can be written only when BUSY = + 0. + 0 + 32 + + + + + CCR + CCR + QUADSPI communication configuration + register + 0x14 + 0x20 + read-write + 0x00000000 + + + INSTRUCTION + Instruction Instruction to be send to + the external SPI device. This field can be written + only when BUSY = 0. + 0 + 8 + + + IMODE + Instruction mode This field defines the + instruction phase mode of operation: This field can + be written only when BUSY = 0. + 8 + 2 + + + ADMODE + Address mode This field defines the + address phase mode of operation: This field can be + written only when BUSY = 0. + 10 + 2 + + + ADSIZE + Address size This bit defines address + size: This field can be written only when BUSY = + 0. + 12 + 2 + + + ABMODE + Alternate bytes mode This field defines + the alternate-bytes phase mode of operation: This + field can be written only when BUSY = + 0. + 14 + 2 + + + ABSIZE + Alternate bytes size This bit defines + alternate bytes size: This field can be written only + when BUSY = 0. + 16 + 2 + + + DCYC + Number of dummy cycles This field + defines the duration of the dummy phase. In both SDR + and DDR modes, it specifies a number of CLK cycles + (0-31). This field can be written only when BUSY = + 0. + 18 + 5 + + + DMODE + Data mode This field defines the data + phases mode of operation: This field also determines + the dummy phase mode of operation. This field can be + written only when BUSY = 0. + 24 + 2 + + + FMODE + Functional mode This field defines the + QUADSPI functional mode of operation. If DMAEN = 1 + already, then the DMA controller for the + corresponding channel must be disabled before + changing the FMODE value. This field can be written + only when BUSY = 0. + 26 + 2 + + + SIOO + Send instruction only once mode See + Section15.3.11: Sending the instruction only once on + page13. This bit has no effect when IMODE = 00. This + field can be written only when BUSY = + 0. + 28 + 1 + + + DHHC + DDR hold Delay the data output by 1/4 of + the QUADSPI output clock cycle in DDR mode: This + feature is only active in DDR mode. This field can be + written only when BUSY = 0. + 30 + 1 + + + DDRM + Double data rate mode This bit sets the + DDR mode for the address, alternate byte and data + phase: This field can be written only when BUSY = + 0. + 31 + 1 + + + + + AR + AR + QUADSPI address register + 0x18 + 0x20 + read-write + 0x00000000 + + + ADDRESS + [31 0]: Address Address to be send to + the external Flash memory Writes to this field are + ignored when BUSY = 0 or when FMODE = 11 + (memory-mapped mode). In dual flash mode, ADDRESS[0] + is automatically stuck to 0 as the address should + always be even + 0 + 32 + + + + + ABR + ABR + QUADSPI alternate bytes + registers + 0x1C + 0x20 + read-write + 0x00000000 + + + ALTERNATE + Alternate Bytes Optional data to be send + to the external SPI device right after the address. + This field can be written only when BUSY = + 0. + 0 + 32 + + + + + DR + DR + QUADSPI data register + 0x20 + 0x20 + read-write + 0x00000000 + + + DATA + Data Data to be sent/received to/from + the external SPI device. In indirect write mode, data + written to this register is stored on the FIFO before + it is sent to the Flash memory during the data phase. + If the FIFO is too full, a write operation is stalled + until the FIFO has enough space to accept the amount + of data being written. In indirect read mode, reading + this register gives (via the FIFO) the data which was + received from the Flash memory. If the FIFO does not + have as many bytes as requested by the read operation + and if BUSY=1, the read operation is stalled until + enough data is present or until the transfer is + complete, whichever happens first. In automatic + polling mode, this register contains the last data + read from the Flash memory (without masking). Word, + halfword, and byte accesses to this register are + supported. In indirect write mode, a byte write adds + 1 byte to the FIFO, a halfword write 2, and a word + write 4. Similarly, in indirect read mode, a byte + read removes 1 byte from the FIFO, a halfword read 2, + and a word read 4. Accesses in indirect mode must be + aligned to the bottom of this register: a byte read + must read DATA[7:0] and a halfword read must read + DATA[15:0]. + 0 + 32 + + + + + PSMKR + PSMKR + QUADSPI polling status mask + register + 0x24 + 0x20 + read-write + 0x00000000 + + + MASK + Status mask Mask to be applied to the + status bytes received in polling mode. For bit n: + This field can be written only when BUSY = + 0. + 0 + 32 + + + + + PSMAR + PSMAR + QUADSPI polling status match + register + 0x28 + 0x20 + read-write + 0x00000000 + + + MATCH + Status match Value to be compared with + the masked status register to get a match. This field + can be written only when BUSY = 0. + 0 + 32 + + + + + PIR + PIR + QUADSPI polling interval + register + 0x2C + 0x20 + read-write + 0x00000000 + + + INTERVAL + Polling interval Number of CLK cycles + between to read during automatic polling phases. This + field can be written only when BUSY = + 0. + 0 + 16 + + + + + LPTR + LPTR + QUADSPI low-power timeout + register + 0x30 + 0x20 + read-write + 0x00000000 + + + TIMEOUT + Timeout period After each access in + memory-mapped mode, the QUADSPI prefetches the + subsequent bytes and holds these bytes in the FIFO. + This field indicates how many CLK cycles the QUADSPI + waits after the FIFO becomes full until it raises + nCS, putting the Flash memory in a lower-consumption + state. This field can be written only when BUSY = + 0. + 0 + 16 + + + + + + + RNG + RNG + RNG + 0x48021800 + + 0x0 + 0x400 + registers + + + + CR + CR + RNG control register + 0x0 + 0x20 + read-write + 0x00000000 + + + RNGEN + Random number generator + enable + 2 + 1 + + + IE + Interrupt enable + 3 + 1 + + + CED + Clock error detection Note: The clock + error detection can be used only when ck_rc48 or + ck_pll1_q (ck_pll1_q = 48MHz) source is selected + otherwise, CED bit must be equal to 1. The clock + error detection cannot be enabled nor disabled on the + fly when RNG peripheral is enabled, to enable or + disable CED the RNG must be disabled. + 5 + 1 + + + + + SR + SR + RNG status register + 0x4 + 0x20 + 0x00000000 + + + DRDY + Data ready Note: If IE=1 in RNG_CR, an + interrupt is generated when DRDY=1. It can rise when + the peripheral is disabled. When the output buffer + becomes empty (after reading RNG_DR), this bit + returns to 0 until a new random value is + generated. + 0 + 1 + read-only + + + CECS + Clock error current status Note: This + bit is meaningless if CED (Clock error detection) bit + in RNG_CR is equal to 1. + 1 + 1 + read-only + + + SECS + Seed error current status ** More than + 64 consecutive bits at the same value (0 or 1) ** + More than 32 consecutive alternances of 0 and 1 + (0101010101...01) + 2 + 1 + read-only + + + CEIS + Clock error interrupt status This bit is + set at the same time as CECS. It is cleared by + writing it to 0. An interrupt is pending if IE = 1 in + the RNG_CR register. Note: This bit is meaningless if + CED (Clock error detection) bit in RNG_CR is equal to + 1. + 5 + 1 + read-write + + + SEIS + Seed error interrupt status This bit is + set at the same time as SECS. It is cleared by + writing it to 0. ** More than 64 consecutive bits at + the same value (0 or 1) ** More than 32 consecutive + alternances of 0 and 1 (0101010101...01) An interrupt + is pending if IE = 1 in the RNG_CR + register. + 6 + 1 + read-write + + + + + DR + DR + The RNG_DR register is a read-only register + that delivers a 32-bit random value when read. The + content of this register is valid when DRDY= 1, even if + RNGEN=0. + 0x8 + 0x20 + read-only + 0x00000000 + + + RNDATA + Random data 32-bit random data which are + valid when DRDY=1. + 0 + 32 + + + + + + + RTC + RTC + RTC + 0x58004000 + + 0x0 + 0x400 + registers + + + RTC_TAMP_STAMP_CSS_LSE + RTC tamper, timestamp + 2 + + + RTC_WKUP + RTC Wakeup interrupt + 3 + + + RTC_ALARM + RTC alarms (A and B) + 41 + + + + RTC_TR + RTC_TR + The RTC_TR is the calendar time shadow + register. This register must be written in initialization + mode only. Refer to Calendar initialization and + configuration on page9 and Reading the calendar on + page10.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x0 + 0x20 + read-write + 0x00000000 + + + SU + Second units in BCD format + 0 + 4 + + + ST + Second tens in BCD format + 4 + 3 + + + MNU + Minute units in BCD format + 8 + 4 + + + MNT + Minute tens in BCD format + 12 + 3 + + + HU + Hour units in BCD format + 16 + 4 + + + HT + Hour tens in BCD format + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + + + RTC_DR + RTC_DR + The RTC_DR is the calendar date shadow + register. This register must be written in initialization + mode only. Refer to Calendar initialization and + configuration on page9 and Reading the calendar on + page10.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x4 + 0x20 + read-write + 0x00002101 + + + DU + Date units in BCD format + 0 + 4 + + + DT + Date tens in BCD format + 4 + 2 + + + MU + Month units in BCD format + 8 + 4 + + + MT + Month tens in BCD format + 12 + 1 + + + WDU + Week day units + 13 + 3 + + + YU + Year units in BCD format + 16 + 4 + + + YT + Year tens in BCD format + 20 + 4 + + + + + RTC_CR + RTC_CR + RTC control register + 0x8 + 0x20 + 0x00000000 + + + WUCKSEL + Wakeup clock selection + 0 + 3 + read-write + + + TSEDGE + Time-stamp event active edge TSE must be + reset when TSEDGE is changed to avoid unwanted TSF + setting. + 3 + 1 + read-write + + + REFCKON + RTC_REFIN reference clock detection + enable (50 or 60Hz) Note: PREDIV_S must be + 0x00FF. + 4 + 1 + read-write + + + BYPSHAD + Bypass the shadow registers Note: If the + frequency of the APB clock is less than seven times + the frequency of RTCCLK, BYPSHAD must be set to + 1. + 5 + 1 + read-write + + + FMT + Hour format + 6 + 1 + read-write + + + ALRAE + Alarm A enable + 8 + 1 + read-write + + + ALRBE + Alarm B enable + 9 + 1 + read-write + + + WUTE + Wakeup timer enable + 10 + 1 + read-write + + + TSE + timestamp enable + 11 + 1 + read-write + + + ALRAIE + Alarm A interrupt enable + 12 + 1 + read-write + + + ALRBIE + Alarm B interrupt enable + 13 + 1 + read-write + + + WUTIE + Wakeup timer interrupt + enable + 14 + 1 + read-write + + + TSIE + Time-stamp interrupt + enable + 15 + 1 + read-write + + + ADD1H + Add 1 hour (summer time change) When + this bit is set outside initialization mode, 1 hour + is added to the calendar time. This bit is always + read as 0. + 16 + 1 + write-only + + + SUB1H + Subtract 1 hour (winter time change) + When this bit is set outside initialization mode, 1 + hour is subtracted to the calendar time if the + current hour is not 0. This bit is always read as 0. + Setting this bit has no effect when current hour is + 0. + 17 + 1 + write-only + + + BKP + Backup This bit can be written by the + user to memorize whether the daylight saving time + change has been performed or not. + 18 + 1 + read-write + + + COSEL + Calibration output selection When COE=1, + this bit selects which signal is output on RTC_CALIB. + These frequencies are valid for RTCCLK at 32.768 kHz + and prescalers at their default values (PREDIV_A=127 + and PREDIV_S=255). Refer to Section24.3.15: + Calibration clock output + 19 + 1 + read-write + + + POL + Output polarity This bit is used to + configure the polarity of RTC_ALARM + output + 20 + 1 + read-write + + + OSEL + Output selection These bits are used to + select the flag to be routed to RTC_ALARM + output + 21 + 2 + read-write + + + COE + Calibration output enable This bit + enables the RTC_CALIB output + 23 + 1 + read-write + + + ITSE + timestamp on internal event + enable + 24 + 1 + read-write + + + + + RTC_ISR + RTC_ISR + This register is write protected (except for + RTC_ISR[13:8] bits). The write access procedure is + described in RTC register write protection on + page9. + 0xC + 0x20 + 0x00000007 + + + ALRAWF + Alarm A write flag This bit is set by + hardware when Alarm A values can be changed, after + the ALRAE bit has been set to 0 in RTC_CR. It is + cleared by hardware in initialization + mode. + 0 + 1 + read-only + + + ALRBWF + Alarm B write flag This bit is set by + hardware when Alarm B values can be changed, after + the ALRBE bit has been set to 0 in RTC_CR. It is + cleared by hardware in initialization + mode. + 1 + 1 + read-only + + + WUTWF + Wakeup timer write flag This bit is set + by hardware up to 2 RTCCLK cycles after the WUTE bit + has been set to 0 in RTC_CR, and is cleared up to 2 + RTCCLK cycles after the WUTE bit has been set to 1. + The wakeup timer values can be changed when WUTE bit + is cleared and WUTWF is set. + 2 + 1 + read-only + + + SHPF + Shift operation pending This flag is set + by hardware as soon as a shift operation is initiated + by a write to the RTC_SHIFTR register. It is cleared + by hardware when the corresponding shift operation + has been executed. Writing to the SHPF bit has no + effect. + 3 + 1 + read-only + + + INITS + Initialization status flag This bit is + set by hardware when the calendar year field is + different from 0 (Backup domain reset + state). + 4 + 1 + read-only + + + RSF + Registers synchronization flag This bit + is set by hardware each time the calendar registers + are copied into the shadow registers (RTC_SSRx, + RTC_TRx and RTC_DRx). This bit is cleared by hardware + in initialization mode, while a shift operation is + pending (SHPF=1), or when in bypass shadow register + mode (BYPSHAD=1). This bit can also be cleared by + software. It is cleared either by software or by + hardware in initialization mode. + 5 + 1 + read-write + + + INITF + Initialization flag When this bit is set + to 1, the RTC is in initialization state, and the + time, date and prescaler registers can be + updated. + 6 + 1 + read-only + + + INIT + Initialization mode + 7 + 1 + read-write + + + ALRAF + Alarm A flag This flag is set by + hardware when the time/date registers (RTC_TR and + RTC_DR) match the Alarm A register (RTC_ALRMAR). This + flag is cleared by software by writing + 0. + 8 + 1 + read-write + + + ALRBF + Alarm B flag This flag is set by + hardware when the time/date registers (RTC_TR and + RTC_DR) match the Alarm B register (RTC_ALRMBR). This + flag is cleared by software by writing + 0. + 9 + 1 + read-write + + + WUTF + Wakeup timer flag This flag is set by + hardware when the wakeup auto-reload counter reaches + 0. This flag is cleared by software by writing 0. + This flag must be cleared by software at least 1.5 + RTCCLK periods before WUTF is set to 1 + again. + 10 + 1 + read-write + + + TSF + Time-stamp flag This flag is set by + hardware when a time-stamp event occurs. This flag is + cleared by software by writing 0. + 11 + 1 + read-write + + + TSOVF + Time-stamp overflow flag This flag is + set by hardware when a time-stamp event occurs while + TSF is already set. This flag is cleared by software + by writing 0. It is recommended to check and then + clear TSOVF only after clearing the TSF bit. + Otherwise, an overflow might not be noticed if a + time-stamp event occurs immediately before the TSF + bit is cleared. + 12 + 1 + read-write + + + TAMP1F + RTC_TAMP1 detection flag This flag is + set by hardware when a tamper detection event is + detected on the RTC_TAMP1 input. It is cleared by + software writing 0 + 13 + 1 + read-write + + + TAMP2F + RTC_TAMP2 detection flag This flag is + set by hardware when a tamper detection event is + detected on the RTC_TAMP2 input. It is cleared by + software writing 0 + 14 + 1 + read-write + + + TAMP3F + RTC_TAMP3 detection flag This flag is + set by hardware when a tamper detection event is + detected on the RTC_TAMP3 input. It is cleared by + software writing 0 + 15 + 1 + read-write + + + RECALPF + Recalibration pending Flag The RECALPF + status flag is automatically set to 1 when software + writes to the RTC_CALR register, indicating that the + RTC_CALR register is blocked. When the new + calibration settings are taken into account, this bit + returns to 0. Refer to Re-calibration + on-the-fly. + 16 + 1 + read-only + + + ITSF + Internal tTime-stamp flag + 17 + 1 + read-write + + + + + RTC_PRER + RTC_PRER + This register must be written in + initialization mode only. The initialization must be + performed in two separate write accesses. Refer to + Calendar initialization and configuration on page9.This + register is write protected. The write access procedure + is described in RTC register write protection on + page9. + 0x10 + 0x20 + read-write + 0x007F00FF + + + PREDIV_S + Synchronous prescaler factor This is the + synchronous division factor: ck_spre frequency = + ck_apre frequency/(PREDIV_S+1) + 0 + 15 + + + PREDIV_A + Asynchronous prescaler factor This is + the asynchronous division factor: ck_apre frequency = + RTCCLK frequency/(PREDIV_A+1) + 16 + 7 + + + + + RTC_WUTR + RTC_WUTR + This register can be written only when WUTWF + is set to 1 in RTC_ISR.This register is write protected. + The write access procedure is described in RTC register + write protection on page9. + 0x14 + 0x20 + read-write + 0x0000FFFF + + + WUT + Wakeup auto-reload value bits When the + wakeup timer is enabled (WUTE set to 1), the WUTF + flag is set every (WUT[15:0] + 1) ck_wut cycles. The + ck_wut period is selected through WUCKSEL[2:0] bits + of the RTC_CR register When WUCKSEL[2] = 1, the + wakeup timer becomes 17-bits and WUCKSEL[1] + effectively becomes WUT[16] the most-significant bit + to be reloaded into the timer. The first assertion of + WUTF occurs (WUT+1) ck_wut cycles after WUTE is set. + Setting WUT[15:0] to 0x0000 with WUCKSEL[2:0] =011 + (RTCCLK/2) is forbidden. + 0 + 16 + + + + + RTC_ALRMAR + RTC_ALRMAR + This register can be written only when + ALRAWF is set to 1 in RTC_ISR, or in initialization + mode.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x1C + 0x20 + read-write + 0x00000000 + + + SU + Second units in BCD + format. + 0 + 4 + + + ST + Second tens in BCD format. + 4 + 3 + + + MSK1 + Alarm A seconds mask + 7 + 1 + + + MNU + Minute units in BCD + format. + 8 + 4 + + + MNT + Minute tens in BCD format. + 12 + 3 + + + MSK2 + Alarm A minutes mask + 15 + 1 + + + HU + Hour units in BCD format. + 16 + 4 + + + HT + Hour tens in BCD format. + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + MSK3 + Alarm A hours mask + 23 + 1 + + + DU + Date units or day in BCD + format. + 24 + 4 + + + DT + Date tens in BCD format. + 28 + 2 + + + WDSEL + Week day selection + 30 + 1 + + + MSK4 + Alarm A date mask + 31 + 1 + + + + + RTC_ALRMBR + RTC_ALRMBR + This register can be written only when + ALRBWF is set to 1 in RTC_ISR, or in initialization + mode.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x20 + 0x20 + read-write + 0x00000000 + + + SU + Second units in BCD format + 0 + 4 + + + ST + Second tens in BCD format + 4 + 3 + + + MSK1 + Alarm B seconds mask + 7 + 1 + + + MNU + Minute units in BCD format + 8 + 4 + + + MNT + Minute tens in BCD format + 12 + 3 + + + MSK2 + Alarm B minutes mask + 15 + 1 + + + HU + Hour units in BCD format + 16 + 4 + + + HT + Hour tens in BCD format + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + MSK3 + Alarm B hours mask + 23 + 1 + + + DU + Date units or day in BCD + format + 24 + 4 + + + DT + Date tens in BCD format + 28 + 2 + + + WDSEL + Week day selection + 30 + 1 + + + MSK4 + Alarm B date mask + 31 + 1 + + + + + RTC_WPR + RTC_WPR + RTC write protection register + 0x24 + 0x20 + write-only + 0x00000000 + + + KEY + Write protection key This byte is + written by software. Reading this byte always returns + 0x00. Refer to RTC register write protection for a + description of how to unlock RTC register write + protection. + 0 + 8 + + + + + RTC_SSR + RTC_SSR + RTC sub second register + 0x28 + 0x20 + read-only + 0x00000000 + + + SS + Sub second value SS[15:0] is the value + in the synchronous prescaler counter. The fraction of + a second is given by the formula below: Second + fraction = (PREDIV_S - SS) / (PREDIV_S + 1) Note: SS + can be larger than PREDIV_S only after a shift + operation. In that case, the correct time/date is one + second less than as indicated by + RTC_TR/RTC_DR. + 0 + 16 + + + + + RTC_SHIFTR + RTC_SHIFTR + This register is write protected. The write + access procedure is described in RTC register write + protection on page9. + 0x2C + 0x20 + write-only + 0x00000000 + + + SUBFS + Subtract a fraction of a second These + bits are write only and is always read as zero. + Writing to this bit has no effect when a shift + operation is pending (when SHPF=1, in RTC_ISR). The + value which is written to SUBFS is added to the + synchronous prescaler counter. Since this counter + counts down, this operation effectively subtracts + from (delays) the clock by: Delay (seconds) = SUBFS / + (PREDIV_S + 1) A fraction of a second can effectively + be added to the clock (advancing the clock) when the + ADD1S function is used in conjunction with SUBFS, + effectively advancing the clock by: Advance (seconds) + = (1 - (SUBFS / (PREDIV_S + 1))). Note: Writing to + SUBFS causes RSF to be cleared. Software can then + wait until RSF=1 to be sure that the shadow registers + have been updated with the shifted + time. + 0 + 15 + + + ADD1S + Add one second This bit is write only + and is always read as zero. Writing to this bit has + no effect when a shift operation is pending (when + SHPF=1, in RTC_ISR). This function is intended to be + used with SUBFS (see description below) in order to + effectively add a fraction of a second to the clock + in an atomic operation. + 31 + 1 + + + + + RTC_TSTR + RTC_TSTR + The content of this register is valid only + when TSF is set to 1 in RTC_ISR. It is cleared when TSF + bit is reset. + 0x30 + 0x20 + read-only + 0x00000000 + + + SU + Second units in BCD + format. + 0 + 4 + + + ST + Second tens in BCD format. + 4 + 3 + + + MNU + Minute units in BCD + format. + 8 + 4 + + + MNT + Minute tens in BCD format. + 12 + 3 + + + HU + Hour units in BCD format. + 16 + 4 + + + HT + Hour tens in BCD format. + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + + + RTC_TSDR + RTC_TSDR + The content of this register is valid only + when TSF is set to 1 in RTC_ISR. It is cleared when TSF + bit is reset. + 0x34 + 0x20 + read-only + 0x00000000 + + + DU + Date units in BCD format + 0 + 4 + + + DT + Date tens in BCD format + 4 + 2 + + + MU + Month units in BCD format + 8 + 4 + + + MT + Month tens in BCD format + 12 + 1 + + + WDU + Week day units + 13 + 3 + + + + + RTC_TSSSR + RTC_TSSSR + The content of this register is valid only + when RTC_ISR/TSF is set. It is cleared when the + RTC_ISR/TSF bit is reset. + 0x38 + 0x20 + read-only + 0x00000000 + + + SS + Sub second value SS[15:0] is the value + of the synchronous prescaler counter when the + timestamp event occurred. + 0 + 16 + + + + + RTC_CALR + RTC_CALR + This register is write protected. The write + access procedure is described in RTC register write + protection on page9. + 0x3C + 0x20 + read-write + 0x00000000 + + + CALM + Calibration minus The frequency of the + calendar is reduced by masking CALM out of 220 RTCCLK + pulses (32 seconds if the input frequency is 32768 + Hz). This decreases the frequency of the calendar + with a resolution of 0.9537 ppm. To increase the + frequency of the calendar, this feature should be + used in conjunction with CALP. See Section24.3.12: + RTC smooth digital calibration on + page13. + 0 + 9 + + + CALW16 + Use a 16-second calibration cycle period + When CALW16 is set to 1, the 16-second calibration + cycle period is selected.This bit must not be set to + 1 if CALW8=1. Note: CALM[0] is stuck at 0 when + CALW16= 1. Refer to Section24.3.12: RTC smooth + digital calibration. + 13 + 1 + + + CALW8 + Use an 8-second calibration cycle period + When CALW8 is set to 1, the 8-second calibration + cycle period is selected. Note: CALM[1:0] are stuck + at 00; when CALW8= 1. Refer to Section24.3.12: RTC + smooth digital calibration. + 14 + 1 + + + CALP + Increase frequency of RTC by 488.5 ppm + This feature is intended to be used in conjunction + with CALM, which lowers the frequency of the calendar + with a fine resolution. if the input frequency is + 32768 Hz, the number of RTCCLK pulses added during a + 32-second window is calculated as follows: (512 * + CALP) - CALM. Refer to Section24.3.12: RTC smooth + digital calibration. + 15 + 1 + + + + + RTC_TAMPCR + RTC_TAMPCR + RTC tamper and alternate function + configuration register + 0x40 + 0x20 + read-write + 0x00000000 + + + TAMP1E + RTC_TAMP1 input detection + enable + 0 + 1 + + + TAMP1TRG + Active level for RTC_TAMP1 input If + TAMPFLT != 00 if TAMPFLT = 00: + 1 + 1 + + + TAMPIE + Tamper interrupt enable + 2 + 1 + + + TAMP2E + RTC_TAMP2 input detection + enable + 3 + 1 + + + TAMP2TRG + Active level for RTC_TAMP2 input if + TAMPFLT != 00: if TAMPFLT = 00: + 4 + 1 + + + TAMP3E + RTC_TAMP3 detection enable + 5 + 1 + + + TAMP3TRG + Active level for RTC_TAMP3 input if + TAMPFLT != 00: if TAMPFLT = 00: + 6 + 1 + + + TAMPTS + Activate timestamp on tamper detection + event TAMPTS is valid even if TSE=0 in the RTC_CR + register. + 7 + 1 + + + TAMPFREQ + Tamper sampling frequency Determines the + frequency at which each of the RTC_TAMPx inputs are + sampled. + 8 + 3 + + + TAMPFLT + RTC_TAMPx filter count These bits + determines the number of consecutive samples at the + specified level (TAMP*TRG) needed to activate a + Tamper event. TAMPFLT is valid for each of the + RTC_TAMPx inputs. + 11 + 2 + + + TAMPPRCH + RTC_TAMPx precharge duration These bit + determines the duration of time during which the + pull-up/is activated before each sample. TAMPPRCH is + valid for each of the RTC_TAMPx inputs. + 13 + 2 + + + TAMPPUDIS + RTC_TAMPx pull-up disable This bit + determines if each of the RTC_TAMPx pins are + pre-charged before each sample. + 15 + 1 + + + TAMP1IE + Tamper 1 interrupt enable + 16 + 1 + + + TAMP1NOERASE + Tamper 1 no erase + 17 + 1 + + + TAMP1MF + Tamper 1 mask flag + 18 + 1 + + + TAMP2IE + Tamper 2 interrupt enable + 19 + 1 + + + TAMP2NOERASE + Tamper 2 no erase + 20 + 1 + + + TAMP2MF + Tamper 2 mask flag + 21 + 1 + + + TAMP3IE + Tamper 3 interrupt enable + 22 + 1 + + + TAMP3NOERASE + Tamper 3 no erase + 23 + 1 + + + TAMP3MF + Tamper 3 mask flag + 24 + 1 + + + + + RTC_ALRMASSR + RTC_ALRMASSR + This register can be written only when ALRAE + is reset in RTC_CR register, or in initialization + mode.This register is write protected. The write access + procedure is described in RTC register write protection + on page9 + 0x44 + 0x20 + read-write + 0x00000000 + + + SS + Sub seconds value This value is compared + with the contents of the synchronous prescaler + counter to determine if Alarm A is to be activated. + Only bits 0 up MASKSS-1 are compared. + 0 + 15 + + + MASKSS + Mask the most-significant bits starting + at this bit ... The overflow bits of the synchronous + counter (bits 15) is never compared. This bit can be + different from 0 only after a shift + operation. + 24 + 4 + + + + + RTC_ALRMBSSR + RTC_ALRMBSSR + This register can be written only when ALRBE + is reset in RTC_CR register, or in initialization + mode.This register is write protected.The write access + procedure is described in Section: RTC register write + protection. + 0x48 + 0x20 + read-write + 0x00000000 + + + SS + Sub seconds value This value is compared + with the contents of the synchronous prescaler + counter to determine if Alarm B is to be activated. + Only bits 0 up to MASKSS-1 are + compared. + 0 + 15 + + + MASKSS + Mask the most-significant bits starting + at this bit ... The overflow bits of the synchronous + counter (bits 15) is never compared. This bit can be + different from 0 only after a shift + operation. + 24 + 4 + + + + + RTC_BKP0R + RTC_BKP0R + RTC backup registers + 0x50 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP1R + RTC_BKP1R + RTC backup registers + 0x54 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP2R + RTC_BKP2R + RTC backup registers + 0x58 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP3R + RTC_BKP3R + RTC backup registers + 0x5C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP4R + RTC_BKP4R + RTC backup registers + 0x60 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP5R + RTC_BKP5R + RTC backup registers + 0x64 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP6R + RTC_BKP6R + RTC backup registers + 0x68 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP7R + RTC_BKP7R + RTC backup registers + 0x6C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP8R + RTC_BKP8R + RTC backup registers + 0x70 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP9R + RTC_BKP9R + RTC backup registers + 0x74 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP10R + RTC_BKP10R + RTC backup registers + 0x78 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP11R + RTC_BKP11R + RTC backup registers + 0x7C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP12R + RTC_BKP12R + RTC backup registers + 0x80 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP13R + RTC_BKP13R + RTC backup registers + 0x84 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP14R + RTC_BKP14R + RTC backup registers + 0x88 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP15R + RTC_BKP15R + RTC backup registers + 0x8C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_OR + RTC_OR + RTC option register + 0x4C + 0x20 + read-write + 0x00000000 + + + RTC_ALARM_TYPE + RTC_ALARM output type on + PC13 + 0 + 1 + + + RTC_OUT_RMP + RTC_OUT remap + 1 + 1 + + + + + RTC_BKP16R + RTC_BKP16R + RTC backup registers + 0x90 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP17R + RTC_BKP17R + RTC backup registers + 0x94 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP18R + RTC_BKP18R + RTC backup registers + 0x98 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP19R + RTC_BKP19R + RTC backup registers + 0x9C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP20R + RTC_BKP20R + RTC backup registers + 0xA0 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP21R + RTC_BKP21R + RTC backup registers + 0xA4 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP22R + RTC_BKP22R + RTC backup registers + 0xA8 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP23R + RTC_BKP23R + RTC backup registers + 0xAC + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP24R + RTC_BKP24R + RTC backup registers + 0xB0 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP25R + RTC_BKP25R + RTC backup registers + 0xB4 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP26R + RTC_BKP26R + RTC backup registers + 0xB8 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP27R + RTC_BKP27R + RTC backup registers + 0xBC + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP28R + RTC_BKP28R + RTC backup registers + 0xC0 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP29R + RTC_BKP29R + RTC backup registers + 0xC4 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP30R + RTC_BKP30R + RTC backup registers + 0xC8 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP31R + RTC_BKP31R + RTC backup registers + 0xCC + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + + + SAI4 + SAI + SAI + 0x58005400 + + 0x0 + 0x400 + registers + + + SAI4 + SAI4 global interrupt + 146 + + + + SAI_GCR + SAI_GCR + Global configuration register + 0x0 + 0x20 + read-write + 0x00000000 + + + SYNCOUT + Synchronization outputs These bits are + set and cleared by software. + 4 + 2 + + + SYNCIN + Synchronization inputs + 0 + 2 + + + + + SAI_ACR1 + SAI_ACR1 + Configuration register 1 + 0x4 + 0x20 + read-write + 0x00000040 + + + MODE + SAIx audio block mode + immediately + 0 + 2 + + + PRTCFG + Protocol configuration. These bits are + set and cleared by software. These bits have to be + configured when the audio block is + disabled. + 2 + 2 + + + DS + Data size. These bits are set and + cleared by software. These bits are ignored when the + SPDIF protocols are selected (bit PRTCFG[1:0]), + because the frame and the data size are fixed in such + case. When the companding mode is selected through + COMP[1:0] bits, DS[1:0] are ignored since the data + size is fixed to 8 bits by the algorithm. These bits + must be configured when the audio block is + disabled. + 5 + 3 + + + LSBFIRST + Least significant bit first. This bit is + set and cleared by software. It must be configured + when the audio block is disabled. This bit has no + meaning in AC97 audio protocol since AC97 data are + always transferred with the MSB first. This bit has + no meaning in SPDIF audio protocol since in SPDIF + data are always transferred with LSB + first. + 8 + 1 + + + CKSTR + Clock strobing edge. This bit is set and + cleared by software. It must be configured when the + audio block is disabled. This bit has no meaning in + SPDIF audio protocol. + 9 + 1 + + + SYNCEN + Synchronization enable. These bits are + set and cleared by software. They must be configured + when the audio sub-block is disabled. Note: The audio + sub-block should be configured as asynchronous when + SPDIF mode is enabled. + 10 + 2 + + + MONO + Mono mode. This bit is set and cleared + by software. It is meaningful only when the number of + slots is equal to 2. When the mono mode is selected, + slot 0 data are duplicated on slot 1 when the audio + block operates as a transmitter. In reception mode, + the slot1 is discarded and only the data received + from slot 0 are stored. Refer to Section: Mono/stereo + mode for more details. + 12 + 1 + + + OUTDRIV + Output drive. This bit is set and + cleared by software. Note: This bit has to be set + before enabling the audio block and after the audio + block configuration. + 13 + 1 + + + SAIXEN + Audio block enable where x is A or B. + This bit is set by software. To switch off the audio + block, the application software must program this bit + to 0 and poll the bit till it reads back 0, meaning + that the block is completely disabled. Before setting + this bit to 1, check that it is set to 0, otherwise + the enable command will not be taken into account. + This bit allows to control the state of SAIx audio + block. If it is disabled when an audio frame transfer + is ongoing, the ongoing transfer completes and the + cell is fully disabled at the end of this audio frame + transfer. Note: When SAIx block is configured in + master mode, the clock must be present on the input + of SAIx before setting SAIXEN bit. + 16 + 1 + + + DMAEN + DMA enable. This bit is set and cleared + by software. Note: Since the audio block defaults to + operate as a transmitter after reset, the MODE[1:0] + bits must be configured before setting DMAEN to avoid + a DMA request in receiver mode. + 17 + 1 + + + NOMCK + No divider + 19 + 1 + + + MCKDIV + Master clock divider. These bits are set + and cleared by software. These bits are meaningless + when the audio block operates in slave mode. They + have to be configured when the audio block is + disabled. Others: the master clock frequency is + calculated accordingly to the following + formula: + 20 + 4 + + + OSR + Oversampling ratio for master + clock + 26 + 1 + + + + + SAI_ACR2 + SAI_ACR2 + Configuration register 2 + 0x8 + 0x20 + 0x00000000 + + + FTH + FIFO threshold. This bit is set and + cleared by software. + 0 + 3 + read-write + + + FFLUSH + FIFO flush. This bit is set by software. + It is always read as 0. This bit should be configured + when the SAI is disabled. + 3 + 1 + write-only + + + TRIS + Tristate management on data line. This + bit is set and cleared by software. It is meaningful + only if the audio block is configured as a + transmitter. This bit is not used when the audio + block is configured in SPDIF mode. It should be + configured when SAI is disabled. Refer to Section: + Output data line management on an inactive slot for + more details. + 4 + 1 + read-write + + + MUTE + Mute. This bit is set and cleared by + software. It is meaningful only when the audio block + operates as a transmitter. The MUTE value is linked + to value of MUTEVAL if the number of slots is lower + or equal to 2, or equal to 0 if it is greater than 2. + Refer to Section: Mute mode for more details. Note: + This bit is meaningless and should not be used for + SPDIF audio blocks. + 5 + 1 + read-write + + + MUTEVAL + Mute value. This bit is set and cleared + by software.It must be written before enabling the + audio block: SAIXEN. This bit is meaningful only when + the audio block operates as a transmitter, the number + of slots is lower or equal to 2 and the MUTE bit is + set. If more slots are declared, the bit value sent + during the transmission in mute mode is equal to 0, + whatever the value of MUTEVAL. if the number of slot + is lower or equal to 2 and MUTEVAL = 1, the MUTE + value transmitted for each slot is the one sent + during the previous frame. Refer to Section: Mute + mode for more details. Note: This bit is meaningless + and should not be used for SPDIF audio + blocks. + 6 + 1 + read-write + + + MUTECNT + Mute counter. These bits are set and + cleared by software. They are used only in reception + mode. The value set in these bits is compared to the + number of consecutive mute frames detected in + reception. When the number of mute frames is equal to + this value, the flag MUTEDET will be set and an + interrupt will be generated if bit MUTEDETIE is set. + Refer to Section: Mute mode for more + details. + 7 + 6 + read-write + + + CPL + Complement bit. This bit is set and + cleared by software. It defines the type of + complement to be used for companding mode Note: This + bit has effect only when the companding mode is -Law + algorithm or A-Law algorithm. + 13 + 1 + read-write + + + COMP + Companding mode. These bits are set and + cleared by software. The -Law and the A-Law log are a + part of the CCITT G.711 recommendation, the type of + complement that will be used depends on CPL bit. The + data expansion or data compression are determined by + the state of bit MODE[0]. The data compression is + applied if the audio block is configured as a + transmitter. The data expansion is automatically + applied when the audio block is configured as a + receiver. Refer to Section: Companding mode for more + details. Note: Companding mode is applicable only + when TDM is selected. + 14 + 2 + read-write + + + + + SAI_AFRCR + SAI_AFRCR + This register has no meaning in AC97 and + SPDIF audio protocol + 0xC + 0x20 + 0x00000007 + + + FRL + Frame length. These bits are set and + cleared by software. They define the audio frame + length expressed in number of SCK clock cycles: the + number of bits in the frame is equal to FRL[7:0] + 1. + The minimum number of bits to transfer in an audio + frame must be equal to 8, otherwise the audio block + will behaves in an unexpected way. This is the case + when the data size is 8 bits and only one slot 0 is + defined in NBSLOT[4:0] of SAI_xSLOTR register + (NBSLOT[3:0] = 0000). In master mode, if the master + clock (available on MCLK_x pin) is used, the frame + length should be aligned with a number equal to a + power of 2, ranging from 8 to 256. When the master + clock is not used (NODIV = 1), it is recommended to + program the frame length to an value ranging from 8 + to 256. These bits are meaningless and are not used + in AC97 or SPDIF audio block + configuration. + 0 + 8 + read-write + + + FSALL + Frame synchronization active level + length. These bits are set and cleared by software. + They specify the length in number of bit clock (SCK) + + 1 (FSALL[6:0] + 1) of the active level of the FS + signal in the audio frame These bits are meaningless + and are not used in AC97 or SPDIF audio block + configuration. They must be configured when the audio + block is disabled. + 8 + 7 + read-write + + + FSDEF + Frame synchronization definition. This + bit is set and cleared by software. When the bit is + set, the number of slots defined in the SAI_xSLOTR + register has to be even. It means that half of this + number of slots will be dedicated to the left channel + and the other slots for the right channel (e.g: this + bit has to be set for I2S or MSB/LSB-justified + protocols...). This bit is meaningless and is not + used in AC97 or SPDIF audio block configuration. It + must be configured when the audio block is + disabled. + 16 + 1 + read-only + + + FSPOL + Frame synchronization polarity. This bit + is set and cleared by software. It is used to + configure the level of the start of frame on the FS + signal. It is meaningless and is not used in AC97 or + SPDIF audio block configuration. This bit must be + configured when the audio block is + disabled. + 17 + 1 + read-write + + + FSOFF + Frame synchronization offset. This bit + is set and cleared by software. It is meaningless and + is not used in AC97 or SPDIF audio block + configuration. This bit must be configured when the + audio block is disabled. + 18 + 1 + read-write + + + + + SAI_ASLOTR + SAI_ASLOTR + This register has no meaning in AC97 and + SPDIF audio protocol + 0x10 + 0x20 + read-write + 0x00000000 + + + FBOFF + First bit offset These bits are set and + cleared by software. The value set in this bitfield + defines the position of the first data transfer bit + in the slot. It represents an offset value. In + transmission mode, the bits outside the data field + are forced to 0. In reception mode, the extra + received bits are discarded. These bits must be set + when the audio block is disabled. They are ignored in + AC97 or SPDIF mode. + 0 + 5 + + + SLOTSZ + Slot size This bits is set and cleared + by software. The slot size must be higher or equal to + the data size. If this condition is not respected, + the behavior of the SAI will be undetermined. Refer + to Section: Output data line management on an + inactive slot for information on how to drive SD + line. These bits must be set when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 6 + 2 + + + NBSLOT + Number of slots in an audio frame. These + bits are set and cleared by software. The value set + in this bitfield represents the number of slots + 1 + in the audio frame (including the number of inactive + slots). The maximum number of slots is 16. The number + of slots should be even if FSDEF bit in the SAI_xFRCR + register is set. The number of slots must be + configured when the audio block is disabled. They are + ignored in AC97 or SPDIF mode. + 8 + 4 + + + SLOTEN + Slot enable. These bits are set and + cleared by software. Each SLOTEN bit corresponds to a + slot position from 0 to 15 (maximum 16 slots). The + slot must be enabled when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 16 + 16 + + + + + SAI_AIM + SAI_AIM + Interrupt mask register 2 + 0x14 + 0x20 + read-write + 0x00000000 + + + OVRUDRIE + Overrun/underrun interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the OVRUDR bit in + the SAI_xSR register is set. + 0 + 1 + + + MUTEDETIE + Mute detection interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the MUTEDET bit in + the SAI_xSR register is set. This bit has a meaning + only if the audio block is configured in receiver + mode. + 1 + 1 + + + WCKCFGIE + Wrong clock configuration interrupt + enable. This bit is set and cleared by software. This + bit is taken into account only if the audio block is + configured as a master (MODE[1] = 0) and NODIV = 0. + It generates an interrupt if the WCKCFG flag in the + SAI_xSR register is set. Note: This bit is used only + in TDM mode and is meaningless in other + modes. + 2 + 1 + + + FREQIE + FIFO request interrupt enable. This bit + is set and cleared by software. When this bit is set, + an interrupt is generated if the FREQ bit in the + SAI_xSR register is set. Since the audio block + defaults to operate as a transmitter after reset, the + MODE bit must be configured before setting FREQIE to + avoid a parasitic interruption in receiver + mode, + 3 + 1 + + + CNRDYIE + Codec not ready interrupt enable (AC97). + This bit is set and cleared by software. When the + interrupt is enabled, the audio block detects in the + slot 0 (tag0) of the AC97 frame if the Codec + connected to this line is ready or not. If it is not + ready, the CNRDY flag in the SAI_xSR register is set + and an interruption i generated. This bit has a + meaning only if the AC97 mode is selected through + PRTCFG[1:0] bits and the audio block is operates as a + receiver. + 4 + 1 + + + AFSDETIE + Anticipated frame synchronization + detection interrupt enable. This bit is set and + cleared by software. When this bit is set, an + interrupt will be generated if the AFSDET bit in the + SAI_xSR register is set. This bit is meaningless in + AC97, SPDIF mode or when the audio block operates as + a master. + 5 + 1 + + + LFSDETIE + Late frame synchronization detection + interrupt enable. This bit is set and cleared by + software. When this bit is set, an interrupt will be + generated if the LFSDET bit is set in the SAI_xSR + register. This bit is meaningless in AC97, SPDIF mode + or when the audio block operates as a + master. + 6 + 1 + + + + + SAI_ASR + SAI_ASR + Status register + 0x18 + 0x20 + read-only + 0x00000008 + + + OVRUDR + Overrun / underrun. This bit is read + only. The overrun and underrun conditions can occur + only when the audio block is configured as a receiver + and a transmitter, respectively. It can generate an + interrupt if OVRUDRIE bit is set in SAI_xIM register. + This flag is cleared when the software sets COVRUDR + bit in SAI_xCLRFR register. + 0 + 1 + + + MUTEDET + Mute detection. This bit is read only. + This flag is set if consecutive 0 values are received + in each slot of a given audio frame and for a + consecutive number of audio frames (set in the + MUTECNT bit in the SAI_xCR2 register). It can + generate an interrupt if MUTEDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets bit CMUTEDET in the SAI_xCLRFR + register. + 1 + 1 + + + WCKCFG + Wrong clock configuration flag. This bit + is read only. This bit is used only when the audio + block operates in master mode (MODE[1] = 0) and NODIV + = 0. It can generate an interrupt if WCKCFGIE bit is + set in SAI_xIM register. This flag is cleared when + the software sets CWCKCFG bit in SAI_xCLRFR + register. + 2 + 1 + + + FREQ + FIFO request. This bit is read only. The + request depends on the audio block configuration: If + the block is configured in transmission mode, the + FIFO request is related to a write request operation + in the SAI_xDR. If the block configured in reception, + the FIFO request related to a read request operation + from the SAI_xDR. This flag can generate an interrupt + if FREQIE bit is set in SAI_xIM + register. + 3 + 1 + + + CNRDY + Codec not ready. This bit is read only. + This bit is used only when the AC97 audio protocol is + selected in the SAI_xCR1 register and configured in + receiver mode. It can generate an interrupt if + CNRDYIE bit is set in SAI_xIM register. This flag is + cleared when the software sets CCNRDY bit in + SAI_xCLRFR register. + 4 + 1 + + + AFSDET + Anticipated frame synchronization + detection. This bit is read only. This flag can be + set only if the audio block is configured in slave + mode. It is not used in AC97or SPDIF mode. It can + generate an interrupt if AFSDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets CAFSDET bit in SAI_xCLRFR + register. + 5 + 1 + + + LFSDET + Late frame synchronization detection. + This bit is read only. This flag can be set only if + the audio block is configured in slave mode. It is + not used in AC97 or SPDIF mode. It can generate an + interrupt if LFSDETIE bit is set in the SAI_xIM + register. This flag is cleared when the software sets + bit CLFSDET in SAI_xCLRFR register + 6 + 1 + + + FLVL + FIFO level threshold. This bit is read + only. The FIFO level threshold flag is managed only + by hardware and its setting depends on SAI block + configuration (transmitter or receiver mode). If the + SAI block is configured as transmitter: If SAI block + is configured as receiver: + 16 + 3 + + + + + SAI_ACLRFR + SAI_ACLRFR + Clear flag register + 0x1C + 0x20 + write-only + 0x00000000 + + + COVRUDR + Clear overrun / underrun. This bit is + write only. Programming this bit to 1 clears the + OVRUDR flag in the SAI_xSR register. Reading this bit + always returns the value 0. + 0 + 1 + + + CMUTEDET + Mute detection flag. This bit is write + only. Programming this bit to 1 clears the MUTEDET + flag in the SAI_xSR register. Reading this bit always + returns the value 0. + 1 + 1 + + + CWCKCFG + Clear wrong clock configuration flag. + This bit is write only. Programming this bit to 1 + clears the WCKCFG flag in the SAI_xSR register. This + bit is used only when the audio block is set as + master (MODE[1] = 0) and NODIV = 0 in the SAI_xCR1 + register. Reading this bit always returns the value + 0. + 2 + 1 + + + CCNRDY + Clear Codec not ready flag. This bit is + write only. Programming this bit to 1 clears the + CNRDY flag in the SAI_xSR register. This bit is used + only when the AC97 audio protocol is selected in the + SAI_xCR1 register. Reading this bit always returns + the value 0. + 4 + 1 + + + CAFSDET + Clear anticipated frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the AFSDET flag in the SAI_xSR + register. It is not used in AC97or SPDIF mode. + Reading this bit always returns the value + 0. + 5 + 1 + + + CLFSDET + Clear late frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the LFSDET flag in the SAI_xSR + register. This bit is not used in AC97or SPDIF mode + Reading this bit always returns the value + 0. + 6 + 1 + + + + + SAI_ADR + SAI_ADR + Data register + 0x20 + 0x20 + read-write + 0x00000000 + + + DATA + Data A write to this register loads the + FIFO provided the FIFO is not full. A read from this + register empties the FIFO if the FIFO is not + empty. + 0 + 32 + + + + + SAI_BCR1 + SAI_BCR1 + Configuration register 1 + 0x24 + 0x20 + read-write + 0x00000040 + + + MODE + SAIx audio block mode + immediately + 0 + 2 + + + PRTCFG + Protocol configuration. These bits are + set and cleared by software. These bits have to be + configured when the audio block is + disabled. + 2 + 2 + + + DS + Data size. These bits are set and + cleared by software. These bits are ignored when the + SPDIF protocols are selected (bit PRTCFG[1:0]), + because the frame and the data size are fixed in such + case. When the companding mode is selected through + COMP[1:0] bits, DS[1:0] are ignored since the data + size is fixed to 8 bits by the algorithm. These bits + must be configured when the audio block is + disabled. + 5 + 3 + + + LSBFIRST + Least significant bit first. This bit is + set and cleared by software. It must be configured + when the audio block is disabled. This bit has no + meaning in AC97 audio protocol since AC97 data are + always transferred with the MSB first. This bit has + no meaning in SPDIF audio protocol since in SPDIF + data are always transferred with LSB + first. + 8 + 1 + + + CKSTR + Clock strobing edge. This bit is set and + cleared by software. It must be configured when the + audio block is disabled. This bit has no meaning in + SPDIF audio protocol. + 9 + 1 + + + SYNCEN + Synchronization enable. These bits are + set and cleared by software. They must be configured + when the audio sub-block is disabled. Note: The audio + sub-block should be configured as asynchronous when + SPDIF mode is enabled. + 10 + 2 + + + MONO + Mono mode. This bit is set and cleared + by software. It is meaningful only when the number of + slots is equal to 2. When the mono mode is selected, + slot 0 data are duplicated on slot 1 when the audio + block operates as a transmitter. In reception mode, + the slot1 is discarded and only the data received + from slot 0 are stored. Refer to Section: Mono/stereo + mode for more details. + 12 + 1 + + + OUTDRIV + Output drive. This bit is set and + cleared by software. Note: This bit has to be set + before enabling the audio block and after the audio + block configuration. + 13 + 1 + + + SAIXEN + Audio block enable where x is A or B. + This bit is set by software. To switch off the audio + block, the application software must program this bit + to 0 and poll the bit till it reads back 0, meaning + that the block is completely disabled. Before setting + this bit to 1, check that it is set to 0, otherwise + the enable command will not be taken into account. + This bit allows to control the state of SAIx audio + block. If it is disabled when an audio frame transfer + is ongoing, the ongoing transfer completes and the + cell is fully disabled at the end of this audio frame + transfer. Note: When SAIx block is configured in + master mode, the clock must be present on the input + of SAIx before setting SAIXEN bit. + 16 + 1 + + + DMAEN + DMA enable. This bit is set and cleared + by software. Note: Since the audio block defaults to + operate as a transmitter after reset, the MODE[1:0] + bits must be configured before setting DMAEN to avoid + a DMA request in receiver mode. + 17 + 1 + + + NOMCK + No divider + 19 + 1 + + + MCKDIV + Master clock divider. These bits are set + and cleared by software. These bits are meaningless + when the audio block operates in slave mode. They + have to be configured when the audio block is + disabled. Others: the master clock frequency is + calculated accordingly to the following + formula: + 20 + 4 + + + OSR + Oversampling ratio for master + clock + 26 + 1 + + + + + SAI_BCR2 + SAI_BCR2 + Configuration register 2 + 0x28 + 0x20 + 0x00000000 + + + FTH + FIFO threshold. This bit is set and + cleared by software. + 0 + 3 + read-write + + + FFLUSH + FIFO flush. This bit is set by software. + It is always read as 0. This bit should be configured + when the SAI is disabled. + 3 + 1 + write-only + + + TRIS + Tristate management on data line. This + bit is set and cleared by software. It is meaningful + only if the audio block is configured as a + transmitter. This bit is not used when the audio + block is configured in SPDIF mode. It should be + configured when SAI is disabled. Refer to Section: + Output data line management on an inactive slot for + more details. + 4 + 1 + read-write + + + MUTE + Mute. This bit is set and cleared by + software. It is meaningful only when the audio block + operates as a transmitter. The MUTE value is linked + to value of MUTEVAL if the number of slots is lower + or equal to 2, or equal to 0 if it is greater than 2. + Refer to Section: Mute mode for more details. Note: + This bit is meaningless and should not be used for + SPDIF audio blocks. + 5 + 1 + read-write + + + MUTEVAL + Mute value. This bit is set and cleared + by software.It must be written before enabling the + audio block: SAIXEN. This bit is meaningful only when + the audio block operates as a transmitter, the number + of slots is lower or equal to 2 and the MUTE bit is + set. If more slots are declared, the bit value sent + during the transmission in mute mode is equal to 0, + whatever the value of MUTEVAL. if the number of slot + is lower or equal to 2 and MUTEVAL = 1, the MUTE + value transmitted for each slot is the one sent + during the previous frame. Refer to Section: Mute + mode for more details. Note: This bit is meaningless + and should not be used for SPDIF audio + blocks. + 6 + 1 + read-write + + + MUTECNT + Mute counter. These bits are set and + cleared by software. They are used only in reception + mode. The value set in these bits is compared to the + number of consecutive mute frames detected in + reception. When the number of mute frames is equal to + this value, the flag MUTEDET will be set and an + interrupt will be generated if bit MUTEDETIE is set. + Refer to Section: Mute mode for more + details. + 7 + 6 + read-write + + + CPL + Complement bit. This bit is set and + cleared by software. It defines the type of + complement to be used for companding mode Note: This + bit has effect only when the companding mode is -Law + algorithm or A-Law algorithm. + 13 + 1 + read-write + + + COMP + Companding mode. These bits are set and + cleared by software. The -Law and the A-Law log are a + part of the CCITT G.711 recommendation, the type of + complement that will be used depends on CPL bit. The + data expansion or data compression are determined by + the state of bit MODE[0]. The data compression is + applied if the audio block is configured as a + transmitter. The data expansion is automatically + applied when the audio block is configured as a + receiver. Refer to Section: Companding mode for more + details. Note: Companding mode is applicable only + when TDM is selected. + 14 + 2 + read-write + + + + + SAI_BFRCR + SAI_BFRCR + This register has no meaning in AC97 and + SPDIF audio protocol + 0x2C + 0x20 + 0x00000007 + + + FRL + Frame length. These bits are set and + cleared by software. They define the audio frame + length expressed in number of SCK clock cycles: the + number of bits in the frame is equal to FRL[7:0] + 1. + The minimum number of bits to transfer in an audio + frame must be equal to 8, otherwise the audio block + will behaves in an unexpected way. This is the case + when the data size is 8 bits and only one slot 0 is + defined in NBSLOT[4:0] of SAI_xSLOTR register + (NBSLOT[3:0] = 0000). In master mode, if the master + clock (available on MCLK_x pin) is used, the frame + length should be aligned with a number equal to a + power of 2, ranging from 8 to 256. When the master + clock is not used (NODIV = 1), it is recommended to + program the frame length to an value ranging from 8 + to 256. These bits are meaningless and are not used + in AC97 or SPDIF audio block + configuration. + 0 + 8 + read-write + + + FSALL + Frame synchronization active level + length. These bits are set and cleared by software. + They specify the length in number of bit clock (SCK) + + 1 (FSALL[6:0] + 1) of the active level of the FS + signal in the audio frame These bits are meaningless + and are not used in AC97 or SPDIF audio block + configuration. They must be configured when the audio + block is disabled. + 8 + 7 + read-write + + + FSDEF + Frame synchronization definition. This + bit is set and cleared by software. When the bit is + set, the number of slots defined in the SAI_xSLOTR + register has to be even. It means that half of this + number of slots will be dedicated to the left channel + and the other slots for the right channel (e.g: this + bit has to be set for I2S or MSB/LSB-justified + protocols...). This bit is meaningless and is not + used in AC97 or SPDIF audio block configuration. It + must be configured when the audio block is + disabled. + 16 + 1 + read-only + + + FSPOL + Frame synchronization polarity. This bit + is set and cleared by software. It is used to + configure the level of the start of frame on the FS + signal. It is meaningless and is not used in AC97 or + SPDIF audio block configuration. This bit must be + configured when the audio block is + disabled. + 17 + 1 + read-write + + + FSOFF + Frame synchronization offset. This bit + is set and cleared by software. It is meaningless and + is not used in AC97 or SPDIF audio block + configuration. This bit must be configured when the + audio block is disabled. + 18 + 1 + read-write + + + + + SAI_BSLOTR + SAI_BSLOTR + This register has no meaning in AC97 and + SPDIF audio protocol + 0x30 + 0x20 + read-write + 0x00000000 + + + FBOFF + First bit offset These bits are set and + cleared by software. The value set in this bitfield + defines the position of the first data transfer bit + in the slot. It represents an offset value. In + transmission mode, the bits outside the data field + are forced to 0. In reception mode, the extra + received bits are discarded. These bits must be set + when the audio block is disabled. They are ignored in + AC97 or SPDIF mode. + 0 + 5 + + + SLOTSZ + Slot size This bits is set and cleared + by software. The slot size must be higher or equal to + the data size. If this condition is not respected, + the behavior of the SAI will be undetermined. Refer + to Section: Output data line management on an + inactive slot for information on how to drive SD + line. These bits must be set when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 6 + 2 + + + NBSLOT + Number of slots in an audio frame. These + bits are set and cleared by software. The value set + in this bitfield represents the number of slots + 1 + in the audio frame (including the number of inactive + slots). The maximum number of slots is 16. The number + of slots should be even if FSDEF bit in the SAI_xFRCR + register is set. The number of slots must be + configured when the audio block is disabled. They are + ignored in AC97 or SPDIF mode. + 8 + 4 + + + SLOTEN + Slot enable. These bits are set and + cleared by software. Each SLOTEN bit corresponds to a + slot position from 0 to 15 (maximum 16 slots). The + slot must be enabled when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 16 + 16 + + + + + SAI_BIM + SAI_BIM + Interrupt mask register 2 + 0x34 + 0x20 + read-write + 0x00000000 + + + OVRUDRIE + Overrun/underrun interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the OVRUDR bit in + the SAI_xSR register is set. + 0 + 1 + + + MUTEDETIE + Mute detection interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the MUTEDET bit in + the SAI_xSR register is set. This bit has a meaning + only if the audio block is configured in receiver + mode. + 1 + 1 + + + WCKCFGIE + Wrong clock configuration interrupt + enable. This bit is set and cleared by software. This + bit is taken into account only if the audio block is + configured as a master (MODE[1] = 0) and NODIV = 0. + It generates an interrupt if the WCKCFG flag in the + SAI_xSR register is set. Note: This bit is used only + in TDM mode and is meaningless in other + modes. + 2 + 1 + + + FREQIE + FIFO request interrupt enable. This bit + is set and cleared by software. When this bit is set, + an interrupt is generated if the FREQ bit in the + SAI_xSR register is set. Since the audio block + defaults to operate as a transmitter after reset, the + MODE bit must be configured before setting FREQIE to + avoid a parasitic interruption in receiver + mode, + 3 + 1 + + + CNRDYIE + Codec not ready interrupt enable (AC97). + This bit is set and cleared by software. When the + interrupt is enabled, the audio block detects in the + slot 0 (tag0) of the AC97 frame if the Codec + connected to this line is ready or not. If it is not + ready, the CNRDY flag in the SAI_xSR register is set + and an interruption i generated. This bit has a + meaning only if the AC97 mode is selected through + PRTCFG[1:0] bits and the audio block is operates as a + receiver. + 4 + 1 + + + AFSDETIE + Anticipated frame synchronization + detection interrupt enable. This bit is set and + cleared by software. When this bit is set, an + interrupt will be generated if the AFSDET bit in the + SAI_xSR register is set. This bit is meaningless in + AC97, SPDIF mode or when the audio block operates as + a master. + 5 + 1 + + + LFSDETIE + Late frame synchronization detection + interrupt enable. This bit is set and cleared by + software. When this bit is set, an interrupt will be + generated if the LFSDET bit is set in the SAI_xSR + register. This bit is meaningless in AC97, SPDIF mode + or when the audio block operates as a + master. + 6 + 1 + + + + + SAI_BSR + SAI_BSR + Status register + 0x38 + 0x20 + read-only + 0x00000008 + + + OVRUDR + Overrun / underrun. This bit is read + only. The overrun and underrun conditions can occur + only when the audio block is configured as a receiver + and a transmitter, respectively. It can generate an + interrupt if OVRUDRIE bit is set in SAI_xIM register. + This flag is cleared when the software sets COVRUDR + bit in SAI_xCLRFR register. + 0 + 1 + + + MUTEDET + Mute detection. This bit is read only. + This flag is set if consecutive 0 values are received + in each slot of a given audio frame and for a + consecutive number of audio frames (set in the + MUTECNT bit in the SAI_xCR2 register). It can + generate an interrupt if MUTEDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets bit CMUTEDET in the SAI_xCLRFR + register. + 1 + 1 + + + WCKCFG + Wrong clock configuration flag. This bit + is read only. This bit is used only when the audio + block operates in master mode (MODE[1] = 0) and NODIV + = 0. It can generate an interrupt if WCKCFGIE bit is + set in SAI_xIM register. This flag is cleared when + the software sets CWCKCFG bit in SAI_xCLRFR + register. + 2 + 1 + + + FREQ + FIFO request. This bit is read only. The + request depends on the audio block configuration: If + the block is configured in transmission mode, the + FIFO request is related to a write request operation + in the SAI_xDR. If the block configured in reception, + the FIFO request related to a read request operation + from the SAI_xDR. This flag can generate an interrupt + if FREQIE bit is set in SAI_xIM + register. + 3 + 1 + + + CNRDY + Codec not ready. This bit is read only. + This bit is used only when the AC97 audio protocol is + selected in the SAI_xCR1 register and configured in + receiver mode. It can generate an interrupt if + CNRDYIE bit is set in SAI_xIM register. This flag is + cleared when the software sets CCNRDY bit in + SAI_xCLRFR register. + 4 + 1 + + + AFSDET + Anticipated frame synchronization + detection. This bit is read only. This flag can be + set only if the audio block is configured in slave + mode. It is not used in AC97or SPDIF mode. It can + generate an interrupt if AFSDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets CAFSDET bit in SAI_xCLRFR + register. + 5 + 1 + + + LFSDET + Late frame synchronization detection. + This bit is read only. This flag can be set only if + the audio block is configured in slave mode. It is + not used in AC97 or SPDIF mode. It can generate an + interrupt if LFSDETIE bit is set in the SAI_xIM + register. This flag is cleared when the software sets + bit CLFSDET in SAI_xCLRFR register + 6 + 1 + + + FLVL + FIFO level threshold. This bit is read + only. The FIFO level threshold flag is managed only + by hardware and its setting depends on SAI block + configuration (transmitter or receiver mode). If the + SAI block is configured as transmitter: If SAI block + is configured as receiver: + 16 + 3 + + + + + SAI_BCLRFR + SAI_BCLRFR + Clear flag register + 0x3C + 0x20 + write-only + 0x00000000 + + + COVRUDR + Clear overrun / underrun. This bit is + write only. Programming this bit to 1 clears the + OVRUDR flag in the SAI_xSR register. Reading this bit + always returns the value 0. + 0 + 1 + + + CMUTEDET + Mute detection flag. This bit is write + only. Programming this bit to 1 clears the MUTEDET + flag in the SAI_xSR register. Reading this bit always + returns the value 0. + 1 + 1 + + + CWCKCFG + Clear wrong clock configuration flag. + This bit is write only. Programming this bit to 1 + clears the WCKCFG flag in the SAI_xSR register. This + bit is used only when the audio block is set as + master (MODE[1] = 0) and NODIV = 0 in the SAI_xCR1 + register. Reading this bit always returns the value + 0. + 2 + 1 + + + CCNRDY + Clear Codec not ready flag. This bit is + write only. Programming this bit to 1 clears the + CNRDY flag in the SAI_xSR register. This bit is used + only when the AC97 audio protocol is selected in the + SAI_xCR1 register. Reading this bit always returns + the value 0. + 4 + 1 + + + CAFSDET + Clear anticipated frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the AFSDET flag in the SAI_xSR + register. It is not used in AC97or SPDIF mode. + Reading this bit always returns the value + 0. + 5 + 1 + + + CLFSDET + Clear late frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the LFSDET flag in the SAI_xSR + register. This bit is not used in AC97or SPDIF mode + Reading this bit always returns the value + 0. + 6 + 1 + + + + + SAI_BDR + SAI_BDR + Data register + 0x40 + 0x20 + read-write + 0x00000000 + + + DATA + Data A write to this register loads the + FIFO provided the FIFO is not full. A read from this + register empties the FIFO if the FIFO is not + empty. + 0 + 32 + + + + + SAI_PDMCR + SAI_PDMCR + PDM control register + 0x44 + 0x20 + read-write + 0x00000000 + + + PDMEN + PDM enable + 0 + 1 + + + MICNBR + Number of microphones + 4 + 2 + + + CKEN1 + Clock enable of bitstream clock number + 1 + 8 + 1 + + + CKEN2 + Clock enable of bitstream clock number + 2 + 9 + 1 + + + CKEN3 + Clock enable of bitstream clock number + 3 + 10 + 1 + + + CKEN4 + Clock enable of bitstream clock number + 4 + 11 + 1 + + + + + SAI_PDMDLY + SAI_PDMDLY + PDM delay register + 0x48 + 0x20 + read-write + 0x00000000 + + + DLYM1L + Delay line adjust for first microphone + of pair 1 + 0 + 3 + + + DLYM1R + Delay line adjust for second microphone + of pair 1 + 4 + 3 + + + DLYM2L + Delay line for first microphone of pair + 2 + 8 + 3 + + + DLYM2R + Delay line for second microphone of pair + 2 + 12 + 3 + + + DLYM3L + Delay line for first microphone of pair + 3 + 16 + 3 + + + DLYM3R + Delay line for second microphone of pair + 3 + 20 + 3 + + + DLYM4L + Delay line for first microphone of pair + 4 + 24 + 3 + + + DLYM4R + Delay line for second microphone of pair + 4 + 28 + 3 + + + + + + + SAI1 + 0x40015800 + + SAI1 + SAI1 global interrupt + 87 + + + + SAI2 + 0x40015C00 + + SAI2 + SAI2 global interrupt + 91 + + + + SAI3 + 0x40016000 + + SAI3 + SAI3 global interrupt + 114 + + + + SDMMC1 + SDMMC1 + SDMMC + 0x52007000 + + 0x0 + 0x100 + registers + + + SDMMC1 + SDMMC global interrupt + 49 + + + SDMMC + SDMMC global interrupt + 124 + + + + POWER + POWER + SDMMC power control register + 0x0 + 0x20 + read-write + 0x00000000 + + + PWRCTRL + SDMMC state control bits. These bits can + only be written when the SDMMC is not in the power-on + state (PWRCTRL?11). These bits are used to define the + functional state of the SDMMC signals: Any further + write will be ignored, PWRCTRL value will keep + 11. + 0 + 2 + + + VSWITCH + Voltage switch sequence start. This bit + is used to start the timing critical section of the + voltage switch sequence: + 2 + 1 + + + VSWITCHEN + Voltage switch procedure enable. This + bit can only be written by firmware when CPSM is + disabled (CPSMEN = 0). This bit is used to stop the + SDMMC_CK after the voltage switch command + response: + 3 + 1 + + + DIRPOL + Data and command direction signals + polarity selection. This bit can only be written when + the SDMMC is in the power-off state (PWRCTRL = + 00). + 4 + 1 + + + + + CLKCR + CLKCR + The SDMMC_CLKCR register controls the + SDMMC_CK output clock, the SDMMC_RX_CLK receive clock, + and the bus width. + 0x4 + 0x20 + read-write + 0x00000000 + + + CLKDIV + Clock divide factor This bit can only be + written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0). This field defines the + divide factor between the input clock (SDMMCCLK) and + the output clock (SDMMC_CK): SDMMC_CK frequency = + SDMMCCLK / [2 * CLKDIV]. 0xx: etc.. xxx: + etc.. + 0 + 10 + + + PWRSAV + Power saving configuration bit This bit + can only be written when the CPSM and DPSM are not + active (CPSMACT = 0 and DPSMACT = 0) For power + saving, the SDMMC_CK clock output can be disabled + when the bus is idle by setting PWRSAV: + 12 + 1 + + + WIDBUS + Wide bus mode enable bit This bit can + only be written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0) + 14 + 2 + + + NEGEDGE + SDMMC_CK dephasing selection bit for + data and Command. This bit can only be written when + the CPSM and DPSM are not active (CPSMACT = 0 and + DPSMACT = 0). When clock division = 1 (CLKDIV = 0), + this bit has no effect. Data and Command change on + SDMMC_CK falling edge. When clock division &gt;1 + (CLKDIV &gt; 0) &amp; DDR = 0: - SDMMC_CK + edge occurs on SDMMCCLK rising edge. When clock + division >1 (CLKDIV > 0) & DDR = 1: - Data + changed on the SDMMCCLK falling edge succeeding a + SDMMC_CK edge. - SDMMC_CK edge occurs on SDMMCCLK + rising edge. - Data changed on the SDMMC_CK falling + edge succeeding a SDMMC_CK edge. - SDMMC_CK edge + occurs on SDMMCCLK rising edge. + 16 + 1 + + + HWFC_EN + Hardware flow control enable This bit + can only be written when the CPSM and DPSM are not + active (CPSMACT = 0 and DPSMACT = 0) When Hardware + flow control is enabled, the meaning of the TXFIFOE + and RXFIFOF flags change, please see SDMMC status + register definition in Section56.8.11. + 17 + 1 + + + DDR + Data rate signaling selection This bit + can only be written when the CPSM and DPSM are not + active (CPSMACT = 0 and DPSMACT = 0) DDR rate shall + only be selected with 4-bit or 8-bit wide bus mode. + (WIDBUS &gt; 00). DDR = 1 has no effect when + WIDBUS = 00 (1-bit wide bus). DDR rate shall only be + selected with clock division &gt;1. (CLKDIV + &gt; 0) + 18 + 1 + + + BUSSPEED + Bus speed mode selection between DS, HS, + SDR12, SDR25 and SDR50, DDR50, SDR104. This bit can + only be written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0) + 19 + 1 + + + SELCLKRX + Receive clock selection. These bits can + only be written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0) + 20 + 2 + + + + + ARGR + ARGR + The SDMMC_ARGR register contains a 32-bit + command argument, which is sent to a card as part of a + command message. + 0x8 + 0x20 + read-write + 0x00000000 + + + CMDARG + Command argument. These bits can only be + written by firmware when CPSM is disabled (CPSMEN = + 0). Command argument sent to a card as part of a + command message. If a command contains an argument, + it must be loaded into this register before writing a + command to the command register. + 0 + 32 + + + + + CMDR + CMDR + The SDMMC_CMDR register contains the command + index and command type bits. The command index is sent to + a card as part of a command message. The command type + bits control the command path state machine + (CPSM). + 0xC + 0x20 + read-write + 0x00000000 + + + CMDINDEX + Command index. This bit can only be + written by firmware when CPSM is disabled (CPSMEN = + 0). The command index is sent to the card as part of + a command message. + 0 + 6 + + + CMDTRANS + The CPSM treats the command as a data + transfer command, stops the interrupt period, and + signals DataEnable to the DPSM This bit can only be + written by firmware when CPSM is disabled (CPSMEN = + 0). If this bit is set, the CPSM issues an end of + interrupt period and issues DataEnable signal to the + DPSM when the command is sent. + 6 + 1 + + + CMDSTOP + The CPSM treats the command as a Stop + Transmission command and signals Abort to the DPSM. + This bit can only be written by firmware when CPSM is + disabled (CPSMEN = 0). If this bit is set, the CPSM + issues the Abort signal to the DPSM when the command + is sent. + 7 + 1 + + + WAITRESP + Wait for response bits. This bit can + only be written by firmware when CPSM is disabled + (CPSMEN = 0). They are used to configure whether the + CPSM is to wait for a response, and if yes, which + kind of response. + 8 + 2 + + + WAITINT + CPSM waits for interrupt request. If + this bit is set, the CPSM disables command timeout + and waits for an card interrupt request (Response). + If this bit is cleared in the CPSM Wait state, will + cause the abort of the interrupt mode. + 10 + 1 + + + WAITPEND + CPSM Waits for end of data transfer + (CmdPend internal signal) from DPSM. This bit when + set, the CPSM waits for the end of data transfer + trigger before it starts sending a command. WAITPEND + is only taken into account when DTMODE = MMC stream + data transfer, WIDBUS = 1-bit wide bus mode, DPSMACT + = 1 and DTDIR = from host to card. + 11 + 1 + + + CPSMEN + Command path state machine (CPSM) Enable + bit This bit is written 1 by firmware, and cleared by + hardware when the CPSM enters the Idle state. If this + bit is set, the CPSM is enabled. When DTEN = 1, no + command will be transfered nor boot procedure will be + started. CPSMEN is cleared to 0. + 12 + 1 + + + DTHOLD + Hold new data block transmission and + reception in the DPSM. If this bit is set, the DPSM + will not move from the Wait_S state to the Send state + or from the Wait_R state to the Receive + state. + 13 + 1 + + + BOOTMODE + Select the boot mode procedure to be + used. This bit can only be written by firmware when + CPSM is disabled (CPSMEN = 0) + 14 + 1 + + + BOOTEN + Enable boot mode + procedure. + 15 + 1 + + + CMDSUSPEND + The CPSM treats the command as a Suspend + or Resume command and signals interrupt period + start/end. This bit can only be written by firmware + when CPSM is disabled (CPSMEN = 0). CMDSUSPEND = 1 + and CMDTRANS = 0 Suspend command, start interrupt + period when response bit BS=0. CMDSUSPEND = 1 and + CMDTRANS = 1 Resume command with data, end interrupt + period when response bit DF=1. + 16 + 1 + + + + + RESP1R + RESP1R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x14 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS1 + see Table 432 + 0 + 32 + + + + + RESP2R + RESP2R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x18 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS2 + see Table404. + 0 + 32 + + + + + RESP3R + RESP3R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x1C + 0x20 + read-only + 0x00000000 + + + CARDSTATUS3 + see Table404. + 0 + 32 + + + + + RESP4R + RESP4R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x20 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS4 + see Table404. + 0 + 32 + + + + + DTIMER + DTIMER + The SDMMC_DTIMER register contains the data + timeout period, in card bus clock periods. A counter + loads the value from the SDMMC_DTIMER register, and + starts decrementing when the data path state machine + (DPSM) enters the Wait_R or Busy state. If the timer + reaches 0 while the DPSM is in either of these states, + the timeout status flag is set. + 0x24 + 0x20 + read-write + 0x00000000 + + + DATATIME + Data and R1b busy timeout period This + bit can only be written when the CPSM and DPSM are + not active (CPSMACT = 0 and DPSMACT = 0). Data and + R1b busy timeout period expressed in card bus clock + periods. + 0 + 32 + + + + + DLENR + DLENR + The SDMMC_DLENR register contains the number + of data bytes to be transferred. The value is loaded into + the data counter when data transfer starts. + 0x28 + 0x20 + read-write + 0x00000000 + + + DATALENGTH + Data length value This register can only + be written by firmware when DPSM is inactive (DPSMACT + = 0). Number of data bytes to be transferred. When + DDR = 1 DATALENGTH is truncated to a multiple of 2. + (The last odd byte is not transfered) When DATALENGTH + = 0 no data will be transfered, when requested by a + CPSMEN and CMDTRANS = 1 also no command will be + transfered. DTEN and CPSMEN are cleared to + 0. + 0 + 25 + + + + + DCTRL + DCTRL + The SDMMC_DCTRL register control the data + path state machine (DPSM). + 0x2C + 0x20 + read-write + 0x00000000 + + + DTEN + Data transfer enable bit This bit can + only be written by firmware when DPSM is inactive + (DPSMACT = 0). This bit is cleared by Hardware when + data transfer completes. This bit shall only be used + to transfer data when no associated data transfer + command is used, i.e. shall not be used with SD or + eMMC cards. + 0 + 1 + + + DTDIR + Data transfer direction selection This + bit can only be written by firmware when DPSM is + inactive (DPSMACT = 0). + 1 + 1 + + + DTMODE + Data transfer mode selection. This bit + can only be written by firmware when DPSM is inactive + (DPSMACT = 0). + 2 + 2 + + + DBLOCKSIZE + Data block size This bit can only be + written by firmware when DPSM is inactive (DPSMACT = + 0). Define the data block length when the block data + transfer mode is selected: When DATALENGTH is not a + multiple of DBLOCKSIZE, the transfered data is + truncated at a multiple of DBLOCKSIZE. (Any remain + data will not be transfered.) When DDR = 1, + DBLOCKSIZE = 0000 shall not be used. (No data will be + transfered) + 4 + 4 + + + RWSTART + Read wait start. If this bit is set, + read wait operation starts. + 8 + 1 + + + RWSTOP + Read wait stop This bit is written by + firmware and auto cleared by hardware when the DPSM + moves from the READ_WAIT state to the WAIT_R or IDLE + state. + 9 + 1 + + + RWMOD + Read wait mode. This bit can only be + written by firmware when DPSM is inactive (DPSMACT = + 0). + 10 + 1 + + + SDIOEN + SD I/O interrupt enable functions This + bit can only be written by firmware when DPSM is + inactive (DPSMACT = 0). If this bit is set, the DPSM + enables the SD I/O card specific interrupt + operation. + 11 + 1 + + + BOOTACKEN + Enable the reception of the boot + acknowledgment. This bit can only be written by + firmware when DPSM is inactive (DPSMACT = + 0). + 12 + 1 + + + FIFORST + FIFO reset, will flush any remaining + data. This bit can only be written by firmware when + IDMAEN= 0 and DPSM is active (DPSMACT = 1). This bit + will only take effect when a transfer error or + transfer hold occurs. + 13 + 1 + + + + + DCNTR + DCNTR + The SDMMC_DCNTR register loads the value + from the data length register (see SDMMC_DLENR) when the + DPSM moves from the Idle state to the Wait_R or Wait_S + state. As data is transferred, the counter decrements the + value until it reaches 0. The DPSM then moves to the Idle + state and when there has been no error, the data status + end flag (DATAEND) is set. + 0x30 + 0x20 + read-only + 0x00000000 + + + DATACOUNT + Data count value When read, the number + of remaining data bytes to be transferred is + returned. Write has no effect. + 0 + 25 + + + + + STAR + STAR + The SDMMC_STAR register is a read-only + register. It contains two types of flag:Static flags + (bits [29,21,11:0]): these bits remain asserted until + they are cleared by writing to the SDMMC interrupt Clear + register (see SDMMC_ICR)Dynamic flags (bits [20:12]): + these bits change state depending on the state of the + underlying logic (for example, FIFO full and empty flags + are asserted and de-asserted as data while written to the + FIFO) + 0x34 + 0x20 + read-only + 0x00000000 + + + CCRCFAIL + Command response received (CRC check + failed). Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 0 + 1 + + + DCRCFAIL + Data block sent/received (CRC check + failed). Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 1 + 1 + + + CTIMEOUT + Command response timeout. Interrupt flag + is cleared by writing corresponding interrupt clear + bit in SDMMC_ICR. The Command Timeout period has a + fixed value of 64 SDMMC_CK clock + periods. + 2 + 1 + + + DTIMEOUT + Data timeout. Interrupt flag is cleared + by writing corresponding interrupt clear bit in + SDMMC_ICR. + 3 + 1 + + + TXUNDERR + Transmit FIFO underrun error or IDMA + read transfer error. Interrupt flag is cleared by + writing corresponding interrupt clear bit in + SDMMC_ICR. + 4 + 1 + + + RXOVERR + Received FIFO overrun error or IDMA + write transfer error. Interrupt flag is cleared by + writing corresponding interrupt clear bit in + SDMMC_ICR. + 5 + 1 + + + CMDREND + Command response received (CRC check + passed, or no CRC). Interrupt flag is cleared by + writing corresponding interrupt clear bit in + SDMMC_ICR. + 6 + 1 + + + CMDSENT + Command sent (no response required). + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 7 + 1 + + + DATAEND + Data transfer ended correctly. (data + counter, DATACOUNT is zero and no errors occur). + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 8 + 1 + + + DHOLD + Data transfer Hold. Interrupt flag is + cleared by writing corresponding interrupt clear bit + in SDMMC_ICR. + 9 + 1 + + + DBCKEND + Data block sent/received. (CRC check + passed) and DPSM moves to the READWAIT state. + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 10 + 1 + + + DABORT + Data transfer aborted by CMD12. + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 11 + 1 + + + DPSMACT + Data path state machine active, i.e. not + in Idle state. This is a hardware status flag only, + does not generate an interrupt. + 12 + 1 + + + CPSMACT + Command path state machine active, i.e. + not in Idle state. This is a hardware status flag + only, does not generate an interrupt. + 13 + 1 + + + TXFIFOHE + Transmit FIFO half empty At least half + the number of words can be written into the FIFO. + This bit is cleared when the FIFO becomes half+1 + full. + 14 + 1 + + + RXFIFOHF + Receive FIFO half full There are at + least half the number of words in the FIFO. This bit + is cleared when the FIFO becomes half+1 + empty. + 15 + 1 + + + TXFIFOF + Transmit FIFO full This is a hardware + status flag only, does not generate an interrupt. + This bit is cleared when one FIFO location becomes + empty. + 16 + 1 + + + RXFIFOF + Receive FIFO full This bit is cleared + when one FIFO location becomes empty. + 17 + 1 + + + TXFIFOE + Transmit FIFO empty This bit is cleared + when one FIFO location becomes full. + 18 + 1 + + + RXFIFOE + Receive FIFO empty This is a hardware + status flag only, does not generate an interrupt. + This bit is cleared when one FIFO location becomes + full. + 19 + 1 + + + BUSYD0 + Inverted value of SDMMC_D0 line (Busy), + sampled at the end of a CMD response and a second + time 2 SDMMC_CK cycles after the CMD response. This + bit is reset to not busy when the SDMMCD0 line + changes from busy to not busy. This bit does not + signal busy due to data transfer. This is a hardware + status flag only, it does not generate an + interrupt. + 20 + 1 + + + BUSYD0END + end of SDMMC_D0 Busy following a CMD + response detected. This indicates only end of busy + following a CMD response. This bit does not signal + busy due to data transfer. Interrupt flag is cleared + by writing corresponding interrupt clear bit in + SDMMC_ICR. + 21 + 1 + + + SDIOIT + SDIO interrupt received. Interrupt flag + is cleared by writing corresponding interrupt clear + bit in SDMMC_ICR. + 22 + 1 + + + ACKFAIL + Boot acknowledgment received (boot + acknowledgment check fail). Interrupt flag is cleared + by writing corresponding interrupt clear bit in + SDMMC_ICR. + 23 + 1 + + + ACKTIMEOUT + Boot acknowledgment timeout. Interrupt + flag is cleared by writing corresponding interrupt + clear bit in SDMMC_ICR. + 24 + 1 + + + VSWEND + Voltage switch critical timing section + completion. Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 25 + 1 + + + CKSTOP + SDMMC_CK stopped in Voltage switch + procedure. Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 26 + 1 + + + IDMATE + IDMA transfer error. Interrupt flag is + cleared by writing corresponding interrupt clear bit + in SDMMC_ICR. + 27 + 1 + + + IDMABTC + IDMA buffer transfer complete. interrupt + flag is cleared by writing corresponding interrupt + clear bit in SDMMC_ICR. + 28 + 1 + + + + + ICR + ICR + The SDMMC_ICR register is a write-only + register. Writing a bit with 1 clears the corresponding + bit in the SDMMC_STAR status register. + 0x38 + 0x20 + read-write + 0x00000000 + + + CCRCFAILC + CCRCFAIL flag clear bit Set by software + to clear the CCRCFAIL flag. + 0 + 1 + + + DCRCFAILC + DCRCFAIL flag clear bit Set by software + to clear the DCRCFAIL flag. + 1 + 1 + + + CTIMEOUTC + CTIMEOUT flag clear bit Set by software + to clear the CTIMEOUT flag. + 2 + 1 + + + DTIMEOUTC + DTIMEOUT flag clear bit Set by software + to clear the DTIMEOUT flag. + 3 + 1 + + + TXUNDERRC + TXUNDERR flag clear bit Set by software + to clear TXUNDERR flag. + 4 + 1 + + + RXOVERRC + RXOVERR flag clear bit Set by software + to clear the RXOVERR flag. + 5 + 1 + + + CMDRENDC + CMDREND flag clear bit Set by software + to clear the CMDREND flag. + 6 + 1 + + + CMDSENTC + CMDSENT flag clear bit Set by software + to clear the CMDSENT flag. + 7 + 1 + + + DATAENDC + DATAEND flag clear bit Set by software + to clear the DATAEND flag. + 8 + 1 + + + DHOLDC + DHOLD flag clear bit Set by software to + clear the DHOLD flag. + 9 + 1 + + + DBCKENDC + DBCKEND flag clear bit Set by software + to clear the DBCKEND flag. + 10 + 1 + + + DABORTC + DABORT flag clear bit Set by software to + clear the DABORT flag. + 11 + 1 + + + BUSYD0ENDC + BUSYD0END flag clear bit Set by software + to clear the BUSYD0END flag. + 21 + 1 + + + SDIOITC + SDIOIT flag clear bit Set by software to + clear the SDIOIT flag. + 22 + 1 + + + ACKFAILC + ACKFAIL flag clear bit Set by software + to clear the ACKFAIL flag. + 23 + 1 + + + ACKTIMEOUTC + ACKTIMEOUT flag clear bit Set by + software to clear the ACKTIMEOUT flag. + 24 + 1 + + + VSWENDC + VSWEND flag clear bit Set by software to + clear the VSWEND flag. + 25 + 1 + + + CKSTOPC + CKSTOP flag clear bit Set by software to + clear the CKSTOP flag. + 26 + 1 + + + IDMATEC + IDMA transfer error clear bit Set by + software to clear the IDMATE flag. + 27 + 1 + + + IDMABTCC + IDMA buffer transfer complete clear bit + Set by software to clear the IDMABTC + flag. + 28 + 1 + + + + + MASKR + MASKR + The interrupt mask register determines which + status flags generate an interrupt request by setting the + corresponding bit to 1. + 0x3C + 0x20 + read-write + 0x00000000 + + + CCRCFAILIE + Command CRC fail interrupt enable Set + and cleared by software to enable/disable interrupt + caused by command CRC failure. + 0 + 1 + + + DCRCFAILIE + Data CRC fail interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data CRC failure. + 1 + 1 + + + CTIMEOUTIE + Command timeout interrupt enable Set and + cleared by software to enable/disable interrupt + caused by command timeout. + 2 + 1 + + + DTIMEOUTIE + Data timeout interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data timeout. + 3 + 1 + + + TXUNDERRIE + Tx FIFO underrun error interrupt enable + Set and cleared by software to enable/disable + interrupt caused by Tx FIFO underrun + error. + 4 + 1 + + + RXOVERRIE + Rx FIFO overrun error interrupt enable + Set and cleared by software to enable/disable + interrupt caused by Rx FIFO overrun + error. + 5 + 1 + + + CMDRENDIE + Command response received interrupt + enable Set and cleared by software to enable/disable + interrupt caused by receiving command + response. + 6 + 1 + + + CMDSENTIE + Command sent interrupt enable Set and + cleared by software to enable/disable interrupt + caused by sending command. + 7 + 1 + + + DATAENDIE + Data end interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data end. + 8 + 1 + + + DHOLDIE + Data hold interrupt enable Set and + cleared by software to enable/disable the interrupt + generated when sending new data is hold in the DPSM + Wait_S state. + 9 + 1 + + + DBCKENDIE + Data block end interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data block end. + 10 + 1 + + + DABORTIE + Data transfer aborted interrupt enable + Set and cleared by software to enable/disable + interrupt caused by a data transfer being + aborted. + 11 + 1 + + + TXFIFOHEIE + Tx FIFO half empty interrupt enable Set + and cleared by software to enable/disable interrupt + caused by Tx FIFO half empty. + 14 + 1 + + + RXFIFOHFIE + Rx FIFO half full interrupt enable Set + and cleared by software to enable/disable interrupt + caused by Rx FIFO half full. + 15 + 1 + + + RXFIFOFIE + Rx FIFO full interrupt enable Set and + cleared by software to enable/disable interrupt + caused by Rx FIFO full. + 17 + 1 + + + TXFIFOEIE + Tx FIFO empty interrupt enable Set and + cleared by software to enable/disable interrupt + caused by Tx FIFO empty. + 18 + 1 + + + BUSYD0ENDIE + BUSYD0END interrupt enable Set and + cleared by software to enable/disable the interrupt + generated when SDMMC_D0 signal changes from busy to + NOT busy following a CMD response. + 21 + 1 + + + SDIOITIE + SDIO mode interrupt received interrupt + enable Set and cleared by software to enable/disable + the interrupt generated when receiving the SDIO mode + interrupt. + 22 + 1 + + + ACKFAILIE + Acknowledgment Fail interrupt enable Set + and cleared by software to enable/disable interrupt + caused by acknowledgment Fail. + 23 + 1 + + + ACKTIMEOUTIE + Acknowledgment timeout interrupt enable + Set and cleared by software to enable/disable + interrupt caused by acknowledgment + timeout. + 24 + 1 + + + VSWENDIE + Voltage switch critical timing section + completion interrupt enable Set and cleared by + software to enable/disable the interrupt generated + when voltage switch critical timing section + completion. + 25 + 1 + + + CKSTOPIE + Voltage Switch clock stopped interrupt + enable Set and cleared by software to enable/disable + interrupt caused by Voltage Switch clock + stopped. + 26 + 1 + + + IDMABTCIE + IDMA buffer transfer complete interrupt + enable Set and cleared by software to enable/disable + the interrupt generated when the IDMA has transferred + all data belonging to a memory buffer. + 28 + 1 + + + + + ACKTIMER + ACKTIMER + The SDMMC_ACKTIMER register contains the + acknowledgment timeout period, in SDMMC_CK bus clock + periods. A counter loads the value from the + SDMMC_ACKTIMER register, and starts decrementing when the + data path state machine (DPSM) enters the Wait_Ack state. + If the timer reaches 0 while the DPSM is in this states, + the acknowledgment timeout status flag is + set. + 0x40 + 0x20 + read-write + 0x00000000 + + + ACKTIME + Boot acknowledgment timeout period This + bit can only be written by firmware when CPSM is + disabled (CPSMEN = 0). Boot acknowledgment timeout + period expressed in card bus clock + periods. + 0 + 25 + + + + + IDMACTRLR + IDMACTRLR + The receive and transmit FIFOs can be read + or written as 32-bit wide registers. The FIFOs contain 32 + entries on 32 sequential addresses. This allows the CPU + to use its load and store multiple operands to read + from/write to the FIFO. + 0x50 + 0x20 + read-write + 0x00000000 + + + IDMAEN + IDMA enable This bit can only be written + by firmware when DPSM is inactive (DPSMACT = + 0). + 0 + 1 + + + IDMABMODE + Buffer mode selection. This bit can only + be written by firmware when DPSM is inactive (DPSMACT + = 0). + 1 + 1 + + + IDMABACT + Double buffer mode active buffer + indication This bit can only be written by firmware + when DPSM is inactive (DPSMACT = 0). When IDMA is + enabled this bit is toggled by + hardware. + 2 + 1 + + + + + IDMABSIZER + IDMABSIZER + The SDMMC_IDMABSIZER register contains the + buffers size when in double buffer + configuration. + 0x54 + 0x20 + read-write + 0x00000000 + + + IDMABNDT + Number of transfers per buffer. This + 8-bit value shall be multiplied by 8 to get the size + of the buffer in 32-bit words and by 32 to get the + size of the buffer in bytes. Example: IDMABNDT = + 0x01: buffer size = 8 words = 32 bytes. These bits + can only be written by firmware when DPSM is inactive + (DPSMACT = 0). + 5 + 8 + + + + + IDMABASE0R + IDMABASE0R + The SDMMC_IDMABASE0R register contains the + memory buffer base address in single buffer configuration + and the buffer 0 base address in double buffer + configuration. + 0x58 + 0x20 + read-write + 0x00000000 + + + IDMABASE0 + Buffer 0 memory base address bits + [31:2], shall be word aligned (bit [1:0] are always 0 + and read only). This register can be written by + firmware when DPSM is inactive (DPSMACT = 0), and can + dynamically be written by firmware when DPSM active + (DPSMACT = 1) and memory buffer 0 is inactive + (IDMABACT = 1). + 0 + 32 + + + + + IDMABASE1R + IDMABASE1R + The SDMMC_IDMABASE1R register contains the + double buffer configuration second buffer memory base + address. + 0x5C + 0x20 + read-write + 0x00000000 + + + IDMABASE1 + Buffer 1 memory base address, shall be + word aligned (bit [1:0] are always 0 and read only). + This register can be written by firmware when DPSM is + inactive (DPSMACT = 0), and can dynamically be + written by firmware when DPSM active (DPSMACT = 1) + and memory buffer 1 is inactive (IDMABACT = + 0). + 0 + 32 + + + + + FIFOR + FIFOR + The receive and transmit FIFOs can be only + read or written as word (32-bit) wide registers. The + FIFOs contain 16 entries on sequential addresses. This + allows the CPU to use its load and store multiple + operands to read from/write to the FIFO.When accessing + SDMMC_FIFOR with half word or byte access an AHB bus + fault is generated. + 0x80 + 0x20 + read-write + 0x00000000 + + + FIFODATA + Receive and transmit FIFO data This + register can only be read or written by firmware when + the DPSM is active (DPSMACT=1). The FIFO data + occupies 16 entries of 32-bit words. + 0 + 32 + + + + + RESPCMDR + RESPCMDR + SDMMC command response + register + 0x10 + 0x20 + read-only + 0xA3C5DD01 + + + RESPCMD + Response command index + 0 + 6 + + + + + + + SDMMC2 + 0x48022400 + + + VREFBUF + VREFBUF + VREFBUF + 0x58003C00 + + 0x0 + 0x400 + registers + + + + CSR + CSR + VREFBUF control and status + register + 0x0 + 0x20 + 0x00000002 + + + ENVR + Voltage reference buffer mode enable + This bit is used to enable the voltage reference + buffer mode. + 0 + 1 + read-write + + + HIZ + High impedance mode This bit controls + the analog switch to connect or not the VREF+ pin. + Refer to Table196: VREF buffer modes for the mode + descriptions depending on ENVR bit + configuration. + 1 + 1 + read-write + + + VRR + Voltage reference buffer + ready + 3 + 1 + read-only + + + VRS + Voltage reference scale These bits + select the value generated by the voltage reference + buffer. Other: Reserved + 4 + 3 + read-write + + + + + CCR + CCR + VREFBUF calibration control + register + 0x4 + 0x20 + read-write + 0x00000000 + + + TRIM + Trimming code These bits are + automatically initialized after reset with the + trimming value stored in the Flash memory during the + production test. Writing into these bits allows to + tune the internal reference buffer + voltage. + 0 + 6 + + + + + + + IWDG1 + IWDG + IWDG + 0x58004800 + + 0x0 + 0x400 + registers + + + + KR + KR + Key register + 0x0 + 0x20 + write-only + 0x00000000 + + + KEY + Key value (write only, read 0x0000) + These bits must be written by software at regular + intervals with the key value 0xAAAA, otherwise the + watchdog generates a reset when the counter reaches + 0. Writing the key value 0x5555 to enable access to + the IWDG_PR, IWDG_RLR and IWDG_WINR registers (see + Section23.3.6: Register access protection) Writing + the key value CCCCh starts the watchdog (except if + the hardware watchdog option is + selected) + 0 + 16 + + + + + PR + PR + Prescaler register + 0x4 + 0x20 + read-write + 0x00000000 + + + PR + Prescaler divider These bits are write + access protected see Section23.3.6: Register access + protection. They are written by software to select + the prescaler divider feeding the counter clock. PVU + bit of IWDG_SR must be reset in order to be able to + change the prescaler divider. Note: Reading this + register returns the prescaler value from the VDD + voltage domain. This value may not be up to + date/valid if a write operation to this register is + ongoing. For this reason the value read from this + register is valid only when the PVU bit in the + IWDG_SR register is reset. + 0 + 3 + + + + + RLR + RLR + Reload register + 0x8 + 0x20 + read-write + 0x00000FFF + + + RL + Watchdog counter reload value These bits + are write access protected see Section23.3.6. They + are written by software to define the value to be + loaded in the watchdog counter each time the value + 0xAAAA is written in the IWDG_KR register. The + watchdog counter counts down from this value. The + timeout period is a function of this value and the + clock prescaler. Refer to the datasheet for the + timeout information. The RVU bit in the IWDG_SR + register must be reset in order to be able to change + the reload value. Note: Reading this register returns + the reload value from the VDD voltage domain. This + value may not be up to date/valid if a write + operation to this register is ongoing on this + register. For this reason the value read from this + register is valid only when the RVU bit in the + IWDG_SR register is reset. + 0 + 12 + + + + + SR + SR + Status register + 0xC + 0x20 + read-only + 0x00000000 + + + PVU + Watchdog prescaler value update This bit + is set by hardware to indicate that an update of the + prescaler value is ongoing. It is reset by hardware + when the prescaler update operation is completed in + the VDD voltage domain (takes up to 5 RC 40 kHz + cycles). Prescaler value can be updated only when PVU + bit is reset. + 0 + 1 + + + RVU + Watchdog counter reload value update + This bit is set by hardware to indicate that an + update of the reload value is ongoing. It is reset by + hardware when the reload value update operation is + completed in the VDD voltage domain (takes up to 5 RC + 40 kHz cycles). Reload value can be updated only when + RVU bit is reset. + 1 + 1 + + + WVU + Watchdog counter window value update + This bit is set by hardware to indicate that an + update of the window value is ongoing. It is reset by + hardware when the reload value update operation is + completed in the VDD voltage domain (takes up to 5 RC + 40 kHz cycles). Window value can be updated only when + WVU bit is reset. This bit is generated only if + generic window = 1 + 2 + 1 + + + + + WINR + WINR + Window register + 0x10 + 0x20 + read-write + 0x00000FFF + + + WIN + Watchdog counter window value These bits + are write access protected see Section23.3.6. These + bits contain the high limit of the window value to be + compared to the downcounter. To prevent a reset, the + downcounter must be reloaded when its value is lower + than the window register value and greater than 0x0 + The WVU bit in the IWDG_SR register must be reset in + order to be able to change the reload value. Note: + Reading this register returns the reload value from + the VDD voltage domain. This value may not be valid + if a write operation to this register is ongoing. For + this reason the value read from this register is + valid only when the WVU bit in the IWDG_SR register + is reset. + 0 + 12 + + + + + + + IWDG2 + 0x58004C00 + + + WWDG1 + WWDG + WWDG + 0x50003000 + + 0x0 + 0x400 + registers + + + WWDG1_RST + Window Watchdog interrupt + 143 + + + + CR + CR + Control register + 0x0 + 0x20 + read-write + 0x0000007F + + + T + 7-bit counter (MSB to LSB) These bits + contain the value of the watchdog counter. It is + decremented every (4096 x 2WDGTB[1:0]) PCLK cycles. A + reset is produced when it is decremented from 0x40 to + 0x3F (T6 becomes cleared). + 0 + 7 + + + WDGA + Activation bit This bit is set by + software and only cleared by hardware after a reset. + When WDGA=1, the watchdog can generate a + reset. + 7 + 1 + + + + + CFR + CFR + Configuration register + 0x4 + 0x20 + read-write + 0x0000007F + + + W + 7-bit window value These bits contain + the window value to be compared to the + downcounter. + 0 + 7 + + + WDGTB + Timer base The time base of the + prescaler can be modified as follows: + 11 + 2 + + + EWI + Early wakeup interrupt When set, an + interrupt occurs whenever the counter reaches the + value 0x40. This interrupt is only cleared by + hardware after a reset. + 9 + 1 + + + + + SR + SR + Status register + 0x8 + 0x20 + read-write + 0x00000000 + + + EWIF + Early wakeup interrupt flag This bit is + set by hardware when the counter has reached the + value 0x40. It must be cleared by software by writing + 0. A write of 1 has no effect. This bit is also set + if the interrupt is not enabled. + 0 + 1 + + + + + + + WWDG2 + 0x40002C00 + + WWDG2 + Window Watchdog interrupt + 0 + + + + PWR + PWR + PWR + 0x58024800 + + 0x0 + 0x400 + registers + + + + CR1 + CR1 + PWR control register 1 + 0x0 + 0x20 + read-write + 0xF000C000 + + + LPDS + Low-power Deepsleep with SVOS3 (SVOS4 + and SVOS5 always use low-power, regardless of the + setting of this bit) + 0 + 1 + + + PVDE + Programmable voltage detector + enable + 4 + 1 + + + PLS + Programmable voltage detector level + selection These bits select the voltage threshold + detected by the PVD. Note: Refer to Section + Electrical characteristics of the product datasheet + for more details. + 5 + 3 + + + DBP + Disable backup domain write protection + In reset state, the RCC_BDCR register, the RTC + registers (including the backup registers), BREN and + MOEN bits in PWR_CR2 register, are protected against + parasitic write access. This bit must be set to + enable write access to these registers. + 8 + 1 + + + FLPS + Flash low-power mode in DStop mode This + bit allows to obtain the best trade-off between + low-power consumption and restart time when exiting + from DStop mode. When it is set, the Flash memory + enters low-power mode when D1 domain is in DStop + mode. + 9 + 1 + + + SVOS + System Stop mode voltage scaling + selection These bits control the VCORE voltage level + in system Stop mode, to obtain the best trade-off + between power consumption and + performance. + 14 + 2 + + + AVDEN + Peripheral voltage monitor on VDDA + enable + 16 + 1 + + + ALS + Analog voltage detector level selection + These bits select the voltage threshold detected by + the AVD. + 17 + 2 + + + + + CSR1 + CSR1 + PWR control status register 1 + 0x4 + 0x20 + read-only + 0x00004000 + + + PVDO + Programmable voltage detect output This + bit is set and cleared by hardware. It is valid only + if the PVD has been enabled by the PVDE bit. Note: + since the PVD is disabled in Standby mode, this bit + is equal to 0 after Standby or reset until the PVDE + bit is set. + 4 + 1 + + + ACTVOSRDY + Voltage levels ready bit for currently + used VOS and SDLEVEL This bit is set to 1 by hardware + when the voltage regulator and the SD converter are + both disabled and Bypass mode is selected in PWR + control register 3 (PWR_CR3). + 13 + 1 + + + ACTVOS + VOS currently applied for VCORE voltage + scaling selection. These bits reflect the last VOS + value applied to the PMU. + 14 + 2 + + + AVDO + Analog voltage detector output on VDDA + This bit is set and cleared by hardware. It is valid + only if AVD on VDDA is enabled by the AVDEN bit. + Note: Since the AVD is disabled in Standby mode, this + bit is equal to 0 after Standby or reset until the + AVDEN bit is set. + 16 + 1 + + + + + CR2 + CR2 + This register is not reset by wakeup from + Standby mode, RESET signal and VDD POR. It is only reset + by VSW POR and VSWRST reset. This register shall not be + accessed when VSWRST bit in RCC_BDCR register resets the + VSW domain.After reset, PWR_CR2 register is + write-protected. Prior to modifying its content, the DBP + bit in PWR_CR1 register must be set to disable the write + protection. + 0x8 + 0x20 + 0x00000000 + + + BREN + Backup regulator enable When set, the + Backup regulator (used to maintain the backup RAM + content in Standby and VBAT modes) is enabled. If + BREN is reset, the backup regulator is switched off. + The backup RAM can still be used in Run and Stop + modes. However, its content will be lost in Standby + and VBAT modes. If BREN is set, the application must + wait till the Backup Regulator Ready flag (BRRDY) is + set to indicate that the data written into the SRAM + will be maintained in Standby and VBAT + modes. + 0 + 1 + read-write + + + MONEN + VBAT and temperature monitoring enable + When set, the VBAT supply and temperature monitoring + is enabled. + 4 + 1 + read-write + + + BRRDY + Backup regulator ready This bit is set + by hardware to indicate that the Backup regulator is + ready. + 16 + 1 + read-only + + + VBATL + VBAT level monitoring versus low + threshold + 20 + 1 + read-only + + + VBATH + VBAT level monitoring versus high + threshold + 21 + 1 + read-only + + + TEMPL + Temperature level monitoring versus low + threshold + 22 + 1 + read-only + + + TEMPH + Temperature level monitoring versus high + threshold + 23 + 1 + read-only + + + + + CR3 + CR3 + Reset only by POR only, not reset by wakeup + from Standby mode and RESET pad. The lower byte of this + register is written once after POR and shall be written + before changing VOS level or ck_sys clock frequency. No + limitation applies to the upper bytes.Programming data + corresponding to an invalid combination of SDLEVEL, + SDEXTHP, SDEN, LDOEN and BYPASS bits (see Table9) will be + ignored: data will not be written, the written-once + mechanism will lock the register and any further write + access will be ignored. The default supply configuration + will be kept and the ACTVOSRDY bit in PWR control status + register 1 (PWR_CSR1) will go on indicating invalid + voltage levels. The system shall be power cycled before + writing a new value. + 0xC + 0x20 + 0x00000006 + + + BYPASS + Power management unit + bypass + 0 + 1 + read-write + + + LDOEN + Low drop-out regulator + enable + 1 + 1 + read-write + + + SDEN + SD converter Enable + 2 + 1 + read-write + + + VBE + VBAT charging enable + 8 + 1 + read-write + + + VBRS + VBAT charging resistor + selection + 9 + 1 + read-write + + + USB33DEN + VDD33USB voltage level detector + enable. + 24 + 1 + write-only + + + USBREGEN + USB regulator enable. + 25 + 1 + read-write + + + USB33RDY + USB supply ready. + 26 + 1 + read-only + + + + + CPUCR + CPUCR + This register allows controlling CPU1 + power. + 0x10 + 0x20 + 0x00000000 + + + PDDS_D1 + D1 domain Power Down Deepsleep + selection. This bit allows CPU1 to define the + Deepsleep mode for D1 domain. + 0 + 1 + read-write + + + PDDS_D2 + D2 domain Power Down Deepsleep. This bit + allows CPU1 to define the Deepsleep mode for D2 + domain. + 1 + 1 + read-write + + + PDDS_D3 + System D3 domain Power Down Deepsleep. + This bit allows CPU1 to define the Deepsleep mode for + System D3 domain. + 2 + 1 + read-write + + + STOPF + STOP flag This bit is set by hardware + and cleared only by any reset or by setting the CPU1 + CSSF bit. + 5 + 1 + read-only + + + SBF + System Standby flag This bit is set by + hardware and cleared only by a POR (Power-on Reset) + or by setting the CPU1 CSSF bit + 6 + 1 + read-only + + + SBF_D1 + D1 domain DStandby flag This bit is set + by hardware and cleared by any system reset or by + setting the CPU1 CSSF bit. Once set, this bit can be + cleared only when the D1 domain is no longer in + DStandby mode. + 7 + 1 + read-only + + + SBF_D2 + D2 domain DStandby flag This bit is set + by hardware and cleared by any system reset or by + setting the CPU1 CSSF bit. Once set, this bit can be + cleared only when the D2 domain is no longer in + DStandby mode. + 8 + 1 + read-only + + + CSSF + Clear D1 domain CPU1 Standby, Stop and + HOLD flags (always read as 0) This bit is cleared to + 0 by hardware. + 9 + 1 + read-write + + + RUN_D3 + Keep system D3 domain in Run mode + regardless of the CPU sub-systems modes + 11 + 1 + read-write + + + + + D3CR + D3CR + This register allows controlling D3 domain + power.Following reset VOSRDY will be read 1 by + software + 0x18 + 0x20 + 0x00004000 + + + VOSRDY + VOS Ready bit for VCORE voltage scaling + output selection. This bit is set to 1 by hardware + when Bypass mode is selected in PWR control register + 3 (PWR_CR3). + 13 + 1 + read-only + + + VOS + Voltage scaling selection according to + performance These bits control the VCORE voltage + level and allow to obtains the best trade-off between + power consumption and performance: When increasing + the performance, the voltage scaling shall be changed + before increasing the system frequency. When + decreasing performance, the system frequency shall + first be decreased before changing the voltage + scaling. + 14 + 2 + read-write + + + + + WKUPCR + WKUPCR + reset only by system reset, not reset by + wakeup from Standby mode5 wait states are required when + writing this register (when clearing a WKUPF bit in + PWR_WKUPFR, the AHB write access will complete after the + WKUPF has been cleared). + 0x20 + 0x20 + read-write + 0x00000000 + + + WKUPC + Clear Wakeup pin flag for WKUP. These + bits are always read as 0. + 0 + 6 + + + + + WKUPFR + WKUPFR + reset only by system reset, not reset by + wakeup from Standby mode + 0x24 + 0x20 + read-write + 0x00000000 + + + WKUPF1 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 0 + 1 + + + WKUPF2 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 1 + 1 + + + WKUPF3 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 2 + 1 + + + WKUPF4 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 3 + 1 + + + WKUPF5 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 4 + 1 + + + WKUPF6 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 5 + 1 + + + + + WKUPEPR + WKUPEPR + Reset only by system reset, not reset by + wakeup from Standby mode + 0x28 + 0x20 + read-write + 0x00000000 + + + WKUPEN1 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 0 + 1 + + + WKUPEN2 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 1 + 1 + + + WKUPEN3 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 2 + 1 + + + WKUPEN4 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 3 + 1 + + + WKUPEN5 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 4 + 1 + + + WKUPEN6 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 5 + 1 + + + WKUPP1 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 8 + 1 + + + WKUPP2 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 9 + 1 + + + WKUPP3 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 10 + 1 + + + WKUPP4 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 11 + 1 + + + WKUPP5 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 12 + 1 + + + WKUPP6 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 13 + 1 + + + WKUPPUPD1 + Wakeup pin pull + configuration + 16 + 2 + + + WKUPPUPD2 + Wakeup pin pull + configuration + 18 + 2 + + + WKUPPUPD3 + Wakeup pin pull + configuration + 20 + 2 + + + WKUPPUPD4 + Wakeup pin pull + configuration + 22 + 2 + + + WKUPPUPD5 + Wakeup pin pull + configuration + 24 + 2 + + + WKUPPUPD6 + Wakeup pin pull configuration for + WKUP(truncate(n/2)-7) These bits define the I/O pad + pull configuration used when WKUPEN(truncate(n/2)-7) + = 1. The associated GPIO port pull configuration + shall be set to the same value or to 00. The Wakeup + pin pull configuration is kept in Standby + mode. + 26 + 2 + + + + + + + SPI1 + Serial peripheral interface + SPI + 0x40013000 + + 0x0 + 0x400 + registers + + + SPI1 + SPI1 global interrupt + 35 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + 0x00000000 + + + IOLOCK + Locking the AF configuration of + associated IOs + 16 + 1 + read-only + + + TCRCI + CRC calculation initialization pattern + control for transmitter + 15 + 1 + read-write + + + RCRCI + CRC calculation initialization pattern + control for receiver + 14 + 1 + read-write + + + CRC33_17 + 32-bit CRC polynomial + configuration + 13 + 1 + read-write + + + SSI + Internal SS signal input + level + 12 + 1 + read-write + + + HDDIR + Rx/Tx direction at Half-duplex + mode + 11 + 1 + read-write + + + CSUSP + Master SUSPend request + 10 + 1 + write-only + + + CSTART + Master transfer start + 9 + 1 + read-only + + + MASRX + Master automatic SUSP in Receive + mode + 8 + 1 + read-write + + + SPE + Serial Peripheral Enable + 0 + 1 + read-write + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + 0x00000000 + + + TSER + Number of data transfer extension to be + reload into TSIZE just when a previous + 16 + 16 + read-only + + + TSIZE + Number of data at current + transfer + 0 + 16 + read-write + + + + + CFG1 + CFG1 + configuration register 1 + 0x8 + 0x20 + read-write + 0x00070007 + + + MBR + Master baud rate + 28 + 3 + + + CRCEN + Hardware CRC computation + enable + 22 + 1 + + + CRCSIZE + Length of CRC frame to be transacted and + compared + 16 + 5 + + + TXDMAEN + Tx DMA stream enable + 15 + 1 + + + RXDMAEN + Rx DMA stream enable + 14 + 1 + + + UDRDET + Detection of underrun condition at slave + transmitter + 11 + 2 + + + UDRCFG + Behavior of slave transmitter at + underrun condition + 9 + 2 + + + FTHVL + threshold level + 5 + 4 + + + DSIZE + Number of bits in at single SPI data + frame + 0 + 5 + + + + + CFG2 + CFG2 + configuration register 2 + 0xC + 0x20 + read-write + 0x00000000 + + + AFCNTR + Alternate function GPIOs + control + 31 + 1 + + + SSOM + SS output management in master + mode + 30 + 1 + + + SSOE + SS output enable + 29 + 1 + + + SSIOP + SS input/output polarity + 28 + 1 + + + SSM + Software management of SS signal + input + 26 + 1 + + + CPOL + Clock polarity + 25 + 1 + + + CPHA + Clock phase + 24 + 1 + + + LSBFRST + Data frame format + 23 + 1 + + + MASTER + SPI Master + 22 + 1 + + + SP + Serial Protocol + 19 + 3 + + + COMM + SPI Communication Mode + 17 + 2 + + + IOSWP + Swap functionality of MISO and MOSI + pins + 15 + 1 + + + MIDI + Master Inter-Data Idleness + 4 + 4 + + + MSSI + Master SS Idleness + 0 + 4 + + + + + IER + IER + Interrupt Enable Register + 0x10 + 0x20 + 0x00000000 + + + TSERFIE + Additional number of transactions reload + interrupt enable + 10 + 1 + read-write + + + MODFIE + Mode Fault interrupt + enable + 9 + 1 + read-write + + + TIFREIE + TIFRE interrupt enable + 8 + 1 + read-write + + + CRCEIE + CRC Interrupt enable + 7 + 1 + read-write + + + OVRIE + OVR interrupt enable + 6 + 1 + read-write + + + UDRIE + UDR interrupt enable + 5 + 1 + read-write + + + TXTFIE + TXTFIE interrupt enable + 4 + 1 + read-write + + + EOTIE + EOT, SUSP and TXC interrupt + enable + 3 + 1 + read-write + + + DPXPIE + DXP interrupt enabled + 2 + 1 + read-only + + + TXPIE + TXP interrupt enable + 1 + 1 + read-only + + + RXPIE + RXP Interrupt Enable + 0 + 1 + read-write + + + + + SR + SR + Status Register + 0x14 + 0x20 + read-only + 0x00001002 + + + CTSIZE + Number of data frames remaining in + current TSIZE session + 16 + 16 + + + RXWNE + RxFIFO Word Not Empty + 15 + 1 + + + RXPLVL + RxFIFO Packing LeVeL + 13 + 2 + + + TXC + TxFIFO transmission + complete + 12 + 1 + + + SUSP + SUSPend + 11 + 1 + + + TSERF + Additional number of SPI data to be + transacted was reload + 10 + 1 + + + MODF + Mode Fault + 9 + 1 + + + TIFRE + TI frame format error + 8 + 1 + + + CRCE + CRC Error + 7 + 1 + + + OVR + Overrun + 6 + 1 + + + UDR + Underrun at slave transmission + mode + 5 + 1 + + + TXTF + Transmission Transfer + Filled + 4 + 1 + + + EOT + End Of Transfer + 3 + 1 + + + DXP + Duplex Packet + 2 + 1 + + + TXP + Tx-Packet space available + 1 + 1 + + + RXP + Rx-Packet available + 0 + 1 + + + + + IFCR + IFCR + Interrupt/Status Flags Clear + Register + 0x18 + 0x20 + write-only + 0x00000000 + + + SUSPC + SUSPend flag clear + 11 + 1 + + + TSERFC + TSERFC flag clear + 10 + 1 + + + MODFC + Mode Fault flag clear + 9 + 1 + + + TIFREC + TI frame format error flag + clear + 8 + 1 + + + CRCEC + CRC Error flag clear + 7 + 1 + + + OVRC + Overrun flag clear + 6 + 1 + + + UDRC + Underrun flag clear + 5 + 1 + + + TXTFC + Transmission Transfer Filled flag + clear + 4 + 1 + + + EOTC + End Of Transfer flag clear + 3 + 1 + + + + + TXDR + TXDR + Transmit Data Register + 0x20 + 0x20 + write-only + 0x00000000 + + + TXDR + Transmit data register + 0 + 32 + + + + + RXDR + RXDR + Receive Data Register + 0x30 + 0x20 + read-only + 0x00000000 + + + RXDR + Receive data register + 0 + 32 + + + + + CRCPOLY + CRCPOLY + Polynomial Register + 0x40 + 0x20 + read-write + 0x00000107 + + + CRCPOLY + CRC polynomial register + 0 + 32 + + + + + TXCRC + TXCRC + Transmitter CRC Register + 0x44 + 0x20 + read-write + 0x00000000 + + + TXCRC + CRC register for + transmitter + 0 + 32 + + + + + RXCRC + RXCRC + Receiver CRC Register + 0x48 + 0x20 + read-write + 0x00000000 + + + RXCRC + CRC register for receiver + 0 + 32 + + + + + UDRDR + UDRDR + Underrun Data Register + 0x4C + 0x20 + read-write + 0x00000000 + + + UDRDR + Data at slave underrun + condition + 0 + 32 + + + + + CGFR + CGFR + configuration register + 0x50 + 0x20 + read-write + 0x00000000 + + + MCKOE + Master clock output enable + 25 + 1 + + + ODD + Odd factor for the + prescaler + 24 + 1 + + + I2SDIV + I2S linear prescaler + 16 + 8 + + + DATFMT + Data format + 14 + 1 + + + WSINV + Fixed channel length in + SLAVE + 13 + 1 + + + FIXCH + Word select inversion + 12 + 1 + + + CKPOL + Serial audio clock + polarity + 11 + 1 + + + CHLEN + Channel length (number of bits per audio + channel) + 10 + 1 + + + DATLEN + Data length to be + transferred + 8 + 2 + + + PCMSYNC + PCM frame synchronization + 7 + 1 + + + I2SSTD + I2S standard selection + 4 + 2 + + + I2SCFG + I2S configuration mode + 1 + 3 + + + I2SMOD + I2S mode selection + 0 + 1 + + + + + + + SPI2 + 0x40003800 + + SPI2 + SPI2 global interrupt + 36 + + + + SPI3 + 0x40003C00 + + SPI3 + SPI3 global interrupt + 51 + + + + SPI4 + 0x40013400 + + SPI4 + SPI4 global interrupt + 84 + + + + SPI5 + 0x40015000 + + SPI5 + SPI5 global interrupt + 85 + + + + SPI6 + 0x58001400 + + SPI6 + SPI6 global interrupt + 86 + + + + LTDC + LCD-TFT Controller + LTDC + 0x50001000 + + 0x0 + 0x1000 + registers + + + LTDC + LCD-TFT global interrupt + 88 + + + LTDC_ER + LCD-TFT error interrupt + 89 + + + + SSCR + SSCR + Synchronization Size Configuration + Register + 0x8 + 0x20 + read-write + 0x00000000 + + + HSW + Horizontal Synchronization Width (in + units of pixel clock period) + 16 + 10 + + + VSH + Vertical Synchronization Height (in + units of horizontal scan line) + 0 + 11 + + + + + BPCR + BPCR + Back Porch Configuration + Register + 0xC + 0x20 + read-write + 0x00000000 + + + AHBP + Accumulated Horizontal back porch (in + units of pixel clock period) + 16 + 12 + + + AVBP + Accumulated Vertical back porch (in + units of horizontal scan line) + 0 + 11 + + + + + AWCR + AWCR + Active Width Configuration + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + AAV + AAV + 16 + 12 + + + AAH + Accumulated Active Height (in units of + horizontal scan line) + 0 + 11 + + + + + TWCR + TWCR + Total Width Configuration + Register + 0x14 + 0x20 + read-write + 0x00000000 + + + TOTALW + Total Width (in units of pixel clock + period) + 16 + 12 + + + TOTALH + Total Height (in units of horizontal + scan line) + 0 + 11 + + + + + GCR + GCR + Global Control Register + 0x18 + 0x20 + 0x00002220 + + + HSPOL + Horizontal Synchronization + Polarity + 31 + 1 + read-write + + + VSPOL + Vertical Synchronization + Polarity + 30 + 1 + read-write + + + DEPOL + Data Enable Polarity + 29 + 1 + read-write + + + PCPOL + Pixel Clock Polarity + 28 + 1 + read-write + + + DEN + Dither Enable + 16 + 1 + read-write + + + DRW + Dither Red Width + 12 + 3 + read-only + + + DGW + Dither Green Width + 8 + 3 + read-only + + + DBW + Dither Blue Width + 4 + 3 + read-only + + + LTDCEN + LCD-TFT controller enable + bit + 0 + 1 + read-write + + + + + SRCR + SRCR + Shadow Reload Configuration + Register + 0x24 + 0x20 + read-write + 0x00000000 + + + VBR + Vertical Blanking Reload + 1 + 1 + + + IMR + Immediate Reload + 0 + 1 + + + + + BCCR + BCCR + Background Color Configuration + Register + 0x2C + 0x20 + read-write + 0x00000000 + + + BCBLUE + Background Color Blue + value + 0 + 8 + + + BCGREEN + Background Color Green + value + 8 + 8 + + + BCRED + Background Color Red value + 16 + 8 + + + + + IER + IER + Interrupt Enable Register + 0x34 + 0x20 + read-write + 0x00000000 + + + RRIE + Register Reload interrupt + enable + 3 + 1 + + + TERRIE + Transfer Error Interrupt + Enable + 2 + 1 + + + FUIE + FIFO Underrun Interrupt + Enable + 1 + 1 + + + LIE + Line Interrupt Enable + 0 + 1 + + + + + ISR + ISR + Interrupt Status Register + 0x38 + 0x20 + read-only + 0x00000000 + + + RRIF + Register Reload Interrupt + Flag + 3 + 1 + + + TERRIF + Transfer Error interrupt + flag + 2 + 1 + + + FUIF + FIFO Underrun Interrupt + flag + 1 + 1 + + + LIF + Line Interrupt flag + 0 + 1 + + + + + ICR + ICR + Interrupt Clear Register + 0x3C + 0x20 + write-only + 0x00000000 + + + CRRIF + Clears Register Reload Interrupt + Flag + 3 + 1 + + + CTERRIF + Clears the Transfer Error Interrupt + Flag + 2 + 1 + + + CFUIF + Clears the FIFO Underrun Interrupt + flag + 1 + 1 + + + CLIF + Clears the Line Interrupt + Flag + 0 + 1 + + + + + LIPCR + LIPCR + Line Interrupt Position Configuration + Register + 0x40 + 0x20 + read-write + 0x00000000 + + + LIPOS + Line Interrupt Position + 0 + 11 + + + + + CPSR + CPSR + Current Position Status + Register + 0x44 + 0x20 + read-only + 0x00000000 + + + CXPOS + Current X Position + 16 + 16 + + + CYPOS + Current Y Position + 0 + 16 + + + + + CDSR + CDSR + Current Display Status + Register + 0x48 + 0x20 + read-only + 0x0000000F + + + HSYNCS + Horizontal Synchronization display + Status + 3 + 1 + + + VSYNCS + Vertical Synchronization display + Status + 2 + 1 + + + HDES + Horizontal Data Enable display + Status + 1 + 1 + + + VDES + Vertical Data Enable display + Status + 0 + 1 + + + + + L1CR + L1CR + Layerx Control Register + 0x84 + 0x20 + read-write + 0x00000000 + + + CLUTEN + Color Look-Up Table Enable + 4 + 1 + + + COLKEN + Color Keying Enable + 1 + 1 + + + LEN + Layer Enable + 0 + 1 + + + + + L1WHPCR + L1WHPCR + Layerx Window Horizontal Position + Configuration Register + 0x88 + 0x20 + read-write + 0x00000000 + + + WHSPPOS + Window Horizontal Stop + Position + 16 + 12 + + + WHSTPOS + Window Horizontal Start + Position + 0 + 12 + + + + + L1WVPCR + L1WVPCR + Layerx Window Vertical Position + Configuration Register + 0x8C + 0x20 + read-write + 0x00000000 + + + WVSPPOS + Window Vertical Stop + Position + 16 + 11 + + + WVSTPOS + Window Vertical Start + Position + 0 + 11 + + + + + L1CKCR + L1CKCR + Layerx Color Keying Configuration + Register + 0x90 + 0x20 + read-write + 0x00000000 + + + CKRED + Color Key Red value + 16 + 8 + + + CKGREEN + Color Key Green value + 8 + 8 + + + CKBLUE + Color Key Blue value + 0 + 8 + + + + + L1PFCR + L1PFCR + Layerx Pixel Format Configuration + Register + 0x94 + 0x20 + read-write + 0x00000000 + + + PF + Pixel Format + 0 + 3 + + + + + L1CACR + L1CACR + Layerx Constant Alpha Configuration + Register + 0x98 + 0x20 + read-write + 0x00000000 + + + CONSTA + Constant Alpha + 0 + 8 + + + + + L1DCCR + L1DCCR + Layerx Default Color Configuration + Register + 0x9C + 0x20 + read-write + 0x00000000 + + + DCALPHA + Default Color Alpha + 24 + 8 + + + DCRED + Default Color Red + 16 + 8 + + + DCGREEN + Default Color Green + 8 + 8 + + + DCBLUE + Default Color Blue + 0 + 8 + + + + + L1BFCR + L1BFCR + Layerx Blending Factors Configuration + Register + 0xA0 + 0x20 + read-write + 0x00000607 + + + BF1 + Blending Factor 1 + 8 + 3 + + + BF2 + Blending Factor 2 + 0 + 3 + + + + + L1CFBAR + L1CFBAR + Layerx Color Frame Buffer Address + Register + 0xAC + 0x20 + read-write + 0x00000000 + + + CFBADD + Color Frame Buffer Start + Address + 0 + 32 + + + + + L1CFBLR + L1CFBLR + Layerx Color Frame Buffer Length + Register + 0xB0 + 0x20 + read-write + 0x00000000 + + + CFBP + Color Frame Buffer Pitch in + bytes + 16 + 13 + + + CFBLL + Color Frame Buffer Line + Length + 0 + 13 + + + + + L1CFBLNR + L1CFBLNR + Layerx ColorFrame Buffer Line Number + Register + 0xB4 + 0x20 + read-write + 0x00000000 + + + CFBLNBR + Frame Buffer Line Number + 0 + 11 + + + + + L1CLUTWR + L1CLUTWR + Layerx CLUT Write Register + 0xC4 + 0x20 + write-only + 0x00000000 + + + CLUTADD + CLUT Address + 24 + 8 + + + RED + Red value + 16 + 8 + + + GREEN + Green value + 8 + 8 + + + BLUE + Blue value + 0 + 8 + + + + + L2CR + L2CR + Layerx Control Register + 0x104 + 0x20 + read-write + 0x00000000 + + + CLUTEN + Color Look-Up Table Enable + 4 + 1 + + + COLKEN + Color Keying Enable + 1 + 1 + + + LEN + Layer Enable + 0 + 1 + + + + + L2WHPCR + L2WHPCR + Layerx Window Horizontal Position + Configuration Register + 0x108 + 0x20 + read-write + 0x00000000 + + + WHSPPOS + Window Horizontal Stop + Position + 16 + 12 + + + WHSTPOS + Window Horizontal Start + Position + 0 + 12 + + + + + L2WVPCR + L2WVPCR + Layerx Window Vertical Position + Configuration Register + 0x10C + 0x20 + read-write + 0x00000000 + + + WVSPPOS + Window Vertical Stop + Position + 16 + 11 + + + WVSTPOS + Window Vertical Start + Position + 0 + 11 + + + + + L2CKCR + L2CKCR + Layerx Color Keying Configuration + Register + 0x110 + 0x20 + read-write + 0x00000000 + + + CKRED + Color Key Red value + 16 + 8 + + + CKGREEN + Color Key Green value + 8 + 8 + + + CKBLUE + Color Key Blue value + 0 + 8 + + + + + L2PFCR + L2PFCR + Layerx Pixel Format Configuration + Register + 0x114 + 0x20 + read-write + 0x00000000 + + + PF + Pixel Format + 0 + 3 + + + + + L2CACR + L2CACR + Layerx Constant Alpha Configuration + Register + 0x118 + 0x20 + read-write + 0x00000000 + + + CONSTA + Constant Alpha + 0 + 8 + + + + + L2DCCR + L2DCCR + Layerx Default Color Configuration + Register + 0x11C + 0x20 + read-write + 0x00000000 + + + DCALPHA + Default Color Alpha + 24 + 8 + + + DCRED + Default Color Red + 16 + 8 + + + DCGREEN + Default Color Green + 8 + 8 + + + DCBLUE + Default Color Blue + 0 + 8 + + + + + L2BFCR + L2BFCR + Layerx Blending Factors Configuration + Register + 0x120 + 0x20 + read-write + 0x00000607 + + + BF1 + Blending Factor 1 + 8 + 3 + + + BF2 + Blending Factor 2 + 0 + 3 + + + + + L2CFBAR + L2CFBAR + Layerx Color Frame Buffer Address + Register + 0x12C + 0x20 + read-write + 0x00000000 + + + CFBADD + Color Frame Buffer Start + Address + 0 + 32 + + + + + L2CFBLR + L2CFBLR + Layerx Color Frame Buffer Length + Register + 0x130 + 0x20 + read-write + 0x00000000 + + + CFBP + Color Frame Buffer Pitch in + bytes + 16 + 13 + + + CFBLL + Color Frame Buffer Line + Length + 0 + 13 + + + + + L2CFBLNR + L2CFBLNR + Layerx ColorFrame Buffer Line Number + Register + 0x134 + 0x20 + read-write + 0x00000000 + + + CFBLNBR + Frame Buffer Line Number + 0 + 11 + + + + + L2CLUTWR + L2CLUTWR + Layerx CLUT Write Register + 0x144 + 0x20 + write-only + 0x00000000 + + + CLUTADD + CLUT Address + 24 + 8 + + + RED + Red value + 16 + 8 + + + GREEN + Green value + 8 + 8 + + + BLUE + Blue value + 0 + 8 + + + + + + + DSIHOST + DSIHOST + DSIHOST + 0x50000000 + + 0x0 + 0x800 + registers + + + + DSI_VR + DSI_VR + DSI Host version register + 0x0 + 0x20 + read-only + 0x3133302A + + + VERSION + VERSION + 0 + 32 + + + + + DSI_CR + DSI_CR + DSI Host control register + 0x4 + 0x20 + read-write + 0x00000000 + + + EN + EN + 0 + 1 + + + + + DSI_CCR + DSI_CCR + DSI Host clock control register + 0x8 + 0x20 + read-write + 0x00000000 + + + TXECKDIV + TXECKDIV + 0 + 8 + + + TOCKDIV + TOCKDIV + 8 + 8 + + + + + DSI_LVCIDR + DSI_LVCIDR + DSI Host LTDC VCID register + 0xC + 0x20 + read-write + 0x00000000 + + + VCID + VCID + 0 + 2 + + + + + DSI_LCOLCR + DSI_LCOLCR + DSI Host LTDC color coding register + 0x10 + 0x20 + read-write + 0x00000000 + + + COLC + COLC + 0 + 4 + + + LPE + LPE + 8 + 1 + + + + + DSI_LPCR + DSI_LPCR + DSI Host LTDC polarity configuration register + 0x14 + 0x20 + read-write + 0x00000000 + + + DEP + DEP + 0 + 1 + + + VSP + VSP + 1 + 1 + + + HSP + HSP + 2 + 1 + + + + + DSI_LPMCR + DSI_LPMCR + DSI Host low-power mode configuration register + 0x18 + 0x20 + read-write + 0x00000000 + + + VLPSIZE + VLPSIZE + 0 + 8 + + + LPSIZE + LPSIZE + 16 + 8 + + + + + DSI_PCR + DSI_PCR + DSI Host protocol configuration register + 0x2C + 0x20 + read-write + 0x00000000 + + + ETTXE + ETTXE + 0 + 1 + + + ETRXE + ETRXE + 1 + 1 + + + BTAE + BTAE + 2 + 1 + + + ECCRXE + ECCRXE + 3 + 1 + + + CRCRXE + CRCRXE + 4 + 1 + + + + + DSI_GVCIDR + DSI_GVCIDR + DSI Host generic VCID register + 0x30 + 0x20 + read-only + 0x00000000 + + + VCID + VCID + 0 + 2 + + + + + DSI_MCR + DSI_MCR + DSI Host mode configuration register + 0x34 + 0x20 + read-write + 0x00000001 + + + CMDM + CMDM + 0 + 1 + + + + + DSI_VMCR + DSI_VMCR + DSI Host video mode configuration register + 0x38 + 0x20 + read-write + 0x00000000 + + + VMT + VMT + 0 + 2 + + + LPVSAE + LPVSAE + 8 + 1 + + + LPVBPE + LPVBPE + 9 + 1 + + + LPVFPE + LPVFPE + 10 + 1 + + + LPVAE + LPVAE + 11 + 1 + + + LPHBPE + LPHBPE + 12 + 1 + + + LPHFPE + LPHFPE + 13 + 1 + + + FBTAAE + FBTAAE + 14 + 1 + + + LPCE + LPCE + 15 + 1 + + + PGE + PGE + 16 + 1 + + + PGM + PGM + 20 + 1 + + + PGO + PGO + 24 + 1 + + + + + DSI_VPCR + DSI_VPCR + DSI Host video packet configuration register + 0x3C + 0x20 + read-write + 0x00000000 + + + VPSIZE + VPSIZE + 0 + 14 + + + + + DSI_VCCR + DSI_VCCR + DSI Host video chunks configuration register + 0x40 + 0x20 + read-write + 0x00000000 + + + NUMC + NUMC + 0 + 13 + + + + + DSI_VNPCR + DSI_VNPCR + DSI Host video null packet configuration register + 0x44 + 0x20 + read-write + 0x00000000 + + + NPSIZE + NPSIZE + 0 + 13 + + + + + DSI_VHSACR + DSI_VHSACR + DSI Host video HSA configuration register + 0x48 + 0x20 + read-write + 0x00000000 + + + HSA + HSA + 0 + 12 + + + + + DSI_VHBPCR + DSI_VHBPCR + DSI Host video HBP configuration register + 0x4C + 0x20 + read-write + 0x00000000 + + + HBP + HBP + 0 + 12 + + + + + DSI_VLCR + DSI_VLCR + DSI Host video line configuration register + 0x50 + 0x20 + read-write + 0x00000000 + + + HLINE + HLINE + 0 + 15 + + + + + DSI_VVSACR + DSI_VVSACR + DSI Host video VSA configuration register + 0x54 + 0x20 + read-write + 0x00000000 + + + VSA + VSA + 0 + 10 + + + + + DSI_VVBPCR + DSI_VVBPCR + DSI Host video VBP configuration register + 0x58 + 0x20 + read-write + 0x00000000 + + + VBP + VBP + 0 + 10 + + + + + DSI_VVFPCR + DSI_VVFPCR + DSI Host video VFP configuration register + 0x5C + 0x20 + read-write + 0x00000000 + + + VFP + VFP + 0 + 10 + + + + + DSI_VVACR + DSI_VVACR + DSI Host video VA configuration register + 0x60 + 0x20 + read-write + 0x00000000 + + + VA + VA + 0 + 14 + + + + + DSI_LCCR + DSI_LCCR + DSI Host LTDC command configuration register + 0x64 + 0x20 + read-write + 0x00000000 + + + CMDSIZE + CMDSIZE + 0 + 16 + + + + + DSI_CMCR + DSI_CMCR + DSI Host command mode configuration register + 0x68 + 0x20 + read-write + 0x00000000 + + + TEARE + TEARE + 0 + 1 + + + ARE + ARE + 1 + 1 + + + GSW0TX + GSW0TX + 8 + 1 + + + GSW1TX + GSW1TX + 9 + 1 + + + GSW2TX + GSW2TX + 10 + 1 + + + GSR0TX + GSR0TX + 11 + 1 + + + GSR1TX + GSR1TX + 12 + 1 + + + GSR2TX + GSR2TX + 13 + 1 + + + GLWTX + GLWTX + 14 + 1 + + + DSW0TX + DSW0TX + 16 + 1 + + + DSW1TX + DSW1TX + 17 + 1 + + + DSR0TX + DSR0TX + 18 + 1 + + + DLWTX + DLWTX + 19 + 1 + + + MRDPS + MRDPS + 24 + 1 + + + + + DSI_GHCR + DSI_GHCR + DSI Host generic header configuration register + 0x6C + 0x20 + read-write + 0x00000000 + + + DT + DT + 0 + 6 + + + VCID + VCID + 6 + 2 + + + WCLSB + WCLSB + 8 + 8 + + + WCMSB + WCMSB + 16 + 8 + + + + + DSI_GPDR + DSI_GPDR + DSI Host generic payload data register + 0x70 + 0x20 + read-write + 0x00000000 + + + DATA1 + DATA1 + 0 + 8 + + + DATA2 + DATA2 + 8 + 8 + + + DATA3 + DATA3 + 16 + 8 + + + DATA4 + DATA4 + 24 + 8 + + + + + DSI_GPSR + DSI_GPSR + DSI Host generic packet status register + 0x74 + 0x20 + read-only + 0x00000015 + + + CMDFE + CMDFE + 0 + 1 + + + CMDFF + CMDFF + 1 + 1 + + + PWRFE + PWRFE + 2 + 1 + + + PWRFF + PWRFF + 3 + 1 + + + PRDFE + PRDFE + 4 + 1 + + + PRDFF + PRDFF + 5 + 1 + + + RCB + RCB + 6 + 1 + + + + + DSI_TCCR0 + DSI_TCCR0 + DSI Host timeout counter configuration register 0 + 0x78 + 0x20 + read-write + 0x00000000 + + + LPRX_TOCNT + LPRX_TOCNT + 0 + 16 + + + HSTX_TOCNT + HSTX_TOCNT + 16 + 16 + + + + + DSI_TCCR1 + DSI_TCCR1 + DSI Host timeout counter configuration register 1 + 0x7C + 0x20 + read-write + 0x00000000 + + + HSRD_TOCNT + HSRD_TOCNT + 0 + 16 + + + + + DSI_TCCR2 + DSI_TCCR2 + DSI Host timeout counter configuration register 2 + 0x80 + 0x20 + read-write + 0x00000000 + + + LPRD_TOCNT + LPRD_TOCNT + 0 + 16 + + + + + DSI_TCCR3 + DSI_TCCR3 + DSI Host timeout counter configuration register 3 + 0x84 + 0x20 + read-write + 0x00000000 + + + HSWR_TOCNT + HSWR_TOCNT + 0 + 16 + + + PM + PM + 24 + 1 + + + + + DSI_TCCR4 + DSI_TCCR4 + DSI Host timeout counter configuration register 4 + 0x88 + 0x20 + read-write + 0x00000000 + + + LPWR_TOCNT + LPWR_TOCNT + 0 + 16 + + + + + DSI_TCCR5 + DSI_TCCR5 + DSI Host timeout counter configuration register 5 + 0x8C + 0x20 + read-write + 0x00000000 + + + BTA_TOCNT + BTA_TOCNT + 0 + 16 + + + + + DSI_CLCR + DSI_CLCR + DSI Host clock lane configuration register + 0x94 + 0x20 + read-write + 0x00000000 + + + DPCC + DPCC + 0 + 1 + + + ACR + ACR + 1 + 1 + + + + + DSI_CLTCR + DSI_CLTCR + DSI Host clock lane timer configuration register + 0x98 + 0x20 + read-write + 0x00000000 + + + LP2HS_TIME + LP2HS_TIME + 0 + 10 + + + HS2LP_TIME + HS2LP_TIME + 16 + 10 + + + + + DSI_DLTCR + DSI_DLTCR + DSI Host data lane timer configuration register + 0x9C + 0x20 + read-write + 0x00000000 + + + MRD_TIME + Maximum read time + 0 + 15 + + + LP2HS_TIME + LP2HS_TIME + 16 + 8 + + + HS2LP_TIME + HS2LP_TIME + 24 + 8 + + + + + DSI_PCTLR + DSI_PCTLR + DSI Host PHY control register + 0xA0 + 0x20 + read-write + 0x00000000 + + + DEN + DEN + 1 + 1 + + + CKE + CKE + 2 + 1 + + + + + DSI_PCONFR + DSI_PCONFR + DSI Host PHY configuration register + 0xA4 + 0x20 + read-write + 0x00000001 + + + NL + NL + 0 + 2 + + + SW_TIME + SW_TIME + 8 + 8 + + + + + DSI_PUCR + DSI_PUCR + DSI Host PHY ULPS control register + 0xA8 + 0x20 + read-write + 0x00000000 + + + URCL + URCL + 0 + 1 + + + UECL + UECL + 1 + 1 + + + URDL + URDL + 2 + 1 + + + UEDL + UEDL + 3 + 1 + + + + + DSI_PTTCR + DSI_PTTCR + DSI Host PHY TX triggers configuration register + 0xAC + 0x20 + read-write + 0x00000000 + + + TX_TRIG + TX_TRIG + 0 + 4 + + + + + DSI_PSR + DSI_PSR + DSI Host PHY status register + 0xB0 + 0x20 + read-only + 0x00001528 + + + PD + PD + 1 + 1 + + + PSSC + PSSC + 2 + 1 + + + UANC + UANC + 3 + 1 + + + PSS0 + PSS0 + 4 + 1 + + + UAN0 + UAN0 + 5 + 1 + + + RUE0 + RUE0 + 6 + 1 + + + PSS1 + PSS1 + 7 + 1 + + + UAN1 + UAN1 + 8 + 1 + + + + + DSI_ISR0 + DSI_ISR0 + DSI Host interrupt and status register 0 + 0xBC + 0x20 + read-only + 0x00000000 + + + AE0 + AE0 + 0 + 1 + + + AE1 + AE1 + 1 + 1 + + + AE2 + AE2 + 2 + 1 + + + AE3 + AE3 + 3 + 1 + + + AE4 + AE4 + 4 + 1 + + + AE5 + AE5 + 5 + 1 + + + AE6 + AE6 + 6 + 1 + + + AE7 + AE7 + 7 + 1 + + + AE8 + AE8 + 8 + 1 + + + AE9 + AE9 + 9 + 1 + + + AE10 + AE10 + 10 + 1 + + + AE11 + AE11 + 11 + 1 + + + AE12 + AE12 + 12 + 1 + + + AE13 + AE13 + 13 + 1 + + + AE14 + AE14 + 14 + 1 + + + AE15 + AE15 + 15 + 1 + + + PE0 + PE0 + 16 + 1 + + + PE1 + PE1 + 17 + 1 + + + PE2 + PE2 + 18 + 1 + + + PE3 + PE3 + 19 + 1 + + + PE4 + PE4 + 20 + 1 + + + + + DSI_ISR1 + DSI_ISR1 + DSI Host interrupt and status register 1 + 0xC0 + 0x20 + read-only + 0x00000000 + + + TOHSTX + TOHSTX + 0 + 1 + + + TOLPRX + TOLPRX + 1 + 1 + + + ECCSE + ECCSE + 2 + 1 + + + ECCME + ECCME + 3 + 1 + + + CRCE + CRCE + 4 + 1 + + + PSE + PSE + 5 + 1 + + + EOTPE + EOTPE + 6 + 1 + + + LPWRE + LPWRE + 7 + 1 + + + GCWRE + GCWRE + 8 + 1 + + + GPWRE + GPWRE + 9 + 1 + + + GPTXE + GPTXE + 10 + 1 + + + GPRDE + GPRDE + 11 + 1 + + + GPRXE + GPRXE + 12 + 1 + + + + + DSI_IER0 + DSI_IER0 + DSI Host interrupt enable register 0 + 0xC4 + 0x20 + read-write + 0x00000000 + + + AE0IE + AE0IE + 0 + 1 + + + AE1IE + AE1IE + 1 + 1 + + + AE2IE + AE2IE + 2 + 1 + + + AE3IE + AE3IE + 3 + 1 + + + AE4IE + AE4IE + 4 + 1 + + + AE5IE + AE5IE + 5 + 1 + + + AE6IE + AE6IE + 6 + 1 + + + AE7IE + AE7IE + 7 + 1 + + + AE8IE + AE8IE + 8 + 1 + + + AE9IE + AE9IE + 9 + 1 + + + AE10IE + AE10IE + 10 + 1 + + + AE11IE + AE11IE + 11 + 1 + + + AE12IE + AE12IE + 12 + 1 + + + AE13IE + AE13IE + 13 + 1 + + + AE14IE + AE14IE + 14 + 1 + + + AE15IE + AE15IE + 15 + 1 + + + PE0IE + PE0IE + 16 + 1 + + + PE1IE + PE1IE + 17 + 1 + + + PE2IE + PE2IE + 18 + 1 + + + PE3IE + PE3IE + 19 + 1 + + + PE4IE + PE4IE + 20 + 1 + + + + + DSI_IER1 + DSI_IER1 + DSI Host interrupt enable register 1 + 0xC8 + 0x20 + read-write + 0x00000000 + + + TOHSTXIE + TOHSTXIE + 0 + 1 + + + TOLPRXIE + TOLPRXIE + 1 + 1 + + + ECCSEIE + ECCSEIE + 2 + 1 + + + ECCMEIE + ECCMEIE + 3 + 1 + + + CRCEIE + CRCEIE + 4 + 1 + + + PSEIE + PSEIE + 5 + 1 + + + EOTPEIE + EOTPEIE + 6 + 1 + + + LPWREIE + LPWREIE + 7 + 1 + + + GCWREIE + GCWREIE + 8 + 1 + + + GPWREIE + GPWREIE + 9 + 1 + + + GPTXEIE + GPTXEIE + 10 + 1 + + + GPRDEIE + GPRDEIE + 11 + 1 + + + GPRXEIE + GPRXEIE + 12 + 1 + + + + + DSI_FIR0 + DSI_FIR0 + DSI Host force interrupt register 0 + 0xD8 + 0x20 + write-only + 0x00000000 + + + FAE0 + FAE0 + 0 + 1 + + + FAE1 + FAE1 + 1 + 1 + + + FAE2 + FAE2 + 2 + 1 + + + FAE3 + FAE3 + 3 + 1 + + + FAE4 + FAE4 + 4 + 1 + + + FAE5 + FAE5 + 5 + 1 + + + FAE6 + FAE6 + 6 + 1 + + + FAE7 + FAE7 + 7 + 1 + + + FAE8 + FAE8 + 8 + 1 + + + FAE9 + FAE9 + 9 + 1 + + + FAE10 + FAE10 + 10 + 1 + + + FAE11 + FAE11 + 11 + 1 + + + FAE12 + FAE12 + 12 + 1 + + + FAE13 + FAE13 + 13 + 1 + + + FAE14 + FAE14 + 14 + 1 + + + FAE15 + FAE15 + 15 + 1 + + + FPE0 + FPE0 + 16 + 1 + + + FPE1 + FPE1 + 17 + 1 + + + FPE2 + FPE2 + 18 + 1 + + + FPE3 + FPE3 + 19 + 1 + + + FPE4 + FPE4 + 20 + 1 + + + + + DSI_FIR1 + DSI_FIR1 + DSI Host force interrupt register 1 + 0xDC + 0x20 + write-only + 0x00000000 + + + FTOHSTX + FTOHSTX + 0 + 1 + + + FTOLPRX + FTOLPRX + 1 + 1 + + + FECCSE + FECCSE + 2 + 1 + + + FECCME + FECCME + 3 + 1 + + + FCRCE + FCRCE + 4 + 1 + + + FPSE + FPSE + 5 + 1 + + + FEOTPE + FEOTPE + 6 + 1 + + + FLPWRE + FLPWRE + 7 + 1 + + + FGCWRE + FGCWRE + 8 + 1 + + + FGPWRE + FGPWRE + 9 + 1 + + + FGPTXE + FGPTXE + 10 + 1 + + + FGPRDE + FGPRDE + 11 + 1 + + + FGPRXE + FGPRXE + 12 + 1 + + + + + DSI_VSCR + DSI_VSCR + DSI Host video shadow control register + 0x100 + 0x20 + read-write + 0x00000000 + + + EN + EN + 0 + 1 + + + UR + UR + 8 + 1 + + + + + DSI_LCVCIDR + DSI_LCVCIDR + DSI Host LTDC current VCID register + 0x10C + 0x20 + read-write + 0x00000000 + + + VCID + VCID + 0 + 2 + + + + + DSI_LCCCR + DSI_LCCCR + DSI Host LTDC current color coding register + 0x110 + 0x20 + read-only + 0x00000000 + + + COLC + COLC + 0 + 4 + + + LPE + LPE + 8 + 1 + + + + + DSI_LPMCCR + DSI_LPMCCR + DSI Host low-power mode current configuration register + 0x118 + 0x20 + read-only + 0x00000000 + + + VLPSIZE + VLPSIZE + 0 + 8 + + + LPSIZE + LPSIZE + 16 + 8 + + + + + DSI_VMCCR + DSI_VMCCR + DSI Host video mode current configuration register + 0x138 + 0x20 + read-only + 0x00000000 + + + VMT + VMT + 0 + 2 + + + LPVSAE + LPVSAE + 2 + 1 + + + LPVBPE + LPVBPE + 3 + 1 + + + LPVFPE + LPVFPE + 4 + 1 + + + LPVAE + LPVAE + 5 + 1 + + + LPHBPE + LPHBPE + 6 + 1 + + + LPHFE + LPHFE + 7 + 1 + + + FBTAAE + FBTAAE + 8 + 1 + + + LPCE + LPCE + 9 + 1 + + + + + DSI_VPCCR + DSI_VPCCR + DSI Host video packet current configuration register + 0x13C + 0x20 + read-only + 0x00000000 + + + VPSIZE + VPSIZE + 0 + 14 + + + + + DSI_VCCCR + DSI_VCCCR + DSI Host video chunks current configuration register + 0x140 + 0x20 + read-only + 0x00000000 + + + NUMC + NUMC + 0 + 13 + + + + + DSI_VNPCCR + DSI_VNPCCR + DSI Host video null packet current configuration register + 0x144 + 0x20 + read-only + 0x00000000 + + + NPSIZE + NPSIZE + 0 + 13 + + + + + DSI_VHSACCR + DSI_VHSACCR + DSI Host video HSA current configuration register + 0x148 + 0x20 + read-only + 0x00000000 + + + HSA + HSA + 0 + 12 + + + + + DSI_VHBPCCR + DSI_VHBPCCR + DSI Host video HBP current configuration register + 0x14C + 0x20 + read-only + 0x00000000 + + + HBP + HBP + 0 + 12 + + + + + DSI_VLCCR + DSI_VLCCR + DSI Host video line current configuration register + 0x150 + 0x20 + read-only + 0x00000000 + + + HLINE + HLINE + 0 + 15 + + + + + DSI_VVSACCR + DSI_VVSACCR + DSI Host video VSA current configuration register + 0x154 + 0x20 + read-only + 0x00000000 + + + VSA + VSA + 0 + 10 + + + + + DSI_VVBPCCR + DSI_VVBPCCR + DSI Host video VBP current configuration register + 0x158 + 0x20 + read-only + 0x00000000 + + + VBP + VBP + 0 + 10 + + + + + DSI_VVFPCCR + DSI_VVFPCCR + DSI Host video VFP current configuration register + 0x15C + 0x20 + read-only + 0x00000000 + + + VFP + VFP + 0 + 10 + + + + + DSI_VVACCR + DSI_VVACCR + DSI Host video VA current configuration register + 0x160 + 0x20 + read-only + 0x00000000 + + + VA + VA + 0 + 14 + + + + + DSI_WCFGR + DSI_WCFGR + DSI wrapper configuration register + 0x400 + 0x20 + read-write + 0x00000000 + + + DSIM + DSIM + 0 + 1 + + + COLMUX + COLMUX + 1 + 3 + + + TESRC + TESRC + 4 + 1 + + + TEPOL + TEPOL + 5 + 1 + + + AR + AR + 6 + 1 + + + VSPOL + VSPOL + 7 + 1 + + + + + DSI_WCR + DSI_WCR + DSI wrapper control register + 0x404 + 0x20 + read-write + 0x00000000 + + + COLM + COLM + 0 + 1 + + + SHTDN + SHTDN + 1 + 1 + + + LTDCEN + LTDCEN + 2 + 1 + + + DSIEN + DSIEN + 3 + 1 + + + + + DSI_WIER + DSI_WIER + DSI wrapper interrupt enable register + 0x408 + 0x20 + read-write + 0x00000000 + + + TEIE + TEIE + 0 + 1 + + + ERIE + ERIE + 1 + 1 + + + PLLLIE + PLLLIE + 9 + 1 + + + PLLUIE + PLLUIE + 10 + 1 + + + RRIE + RRIE + 13 + 1 + + + + + DSI_WISR + DSI_WISR + DSI wrapper interrupt and status register + 0x40C + 0x20 + read-only + 0x00000000 + + + TEIF + TEIF + 0 + 1 + + + ERIF + ERIF + 1 + 1 + + + BUSY + BUSY + 2 + 1 + + + PLLLS + PLLLS + 8 + 1 + + + PLLLIF + PLLLIF + 9 + 1 + + + PLLUIF + PLLUIF + 10 + 1 + + + RRS + RRS + 12 + 1 + + + RRIF + RRIF + 13 + 1 + + + + + DSI_WIFCR + DSI_WIFCR + DSI wrapper interrupt flag clear register + 0x410 + 0x20 + write-only + 0x00000000 + + + CTEIF + CTEIF + 0 + 1 + + + CERIF + CERIF + 1 + 1 + + + CPLLLIF + CPLLLIF + 9 + 1 + + + CPLLUIF + CPLLUIF + 10 + 1 + + + CRRIF + CRRIF + 13 + 1 + + + + + DSI_WPCR0 + DSI_WPCR0 + DSI wrapper PHY configuration register 0 + 0x418 + 0x20 + read-write + 0x00000000 + + + UIX4 + UIX4 + 0 + 6 + + + SWCL + SWCL + 6 + 1 + + + SWDL0 + SWDL0 + 7 + 1 + + + SWDL1 + SWDL1 + 8 + 1 + + + HSICL + HSICL + 9 + 1 + + + HSIDL0 + HSIDL0 + 10 + 1 + + + HSIDL1 + HSIDL1 + 11 + 1 + + + FTXSMCL + FTXSMCL + 12 + 1 + + + FTXSMDL + FTXSMDL + 13 + 1 + + + CDOFFDL + CDOFFDL + 14 + 1 + + + TDDL + TDDL + 16 + 1 + + + PDEN + Pull-down enable + 18 + 1 + + + TCLKPREPEN + Custom time for tCLK-PREPARE enable + 19 + 1 + + + TCLKZEROEN + Custom time for tCLK-ZERO enable + 20 + 1 + + + THSPREPEN + Custom time for tHS-PREPARE enable + 21 + 1 + + + THSTRAILEN + Custom time for tHS-TRAIL enable + 22 + 1 + + + THSZEROEN + Custom time for tHS-ZERO enable + 23 + 1 + + + TLPXDEN + Custom time for tLPX for data lanes enable + 24 + 1 + + + THSEXITEN + Custom time for tHS-EXIT enable + 25 + 1 + + + TLPXCEN + Custom time for tLPX for clock lane enable + 26 + 1 + + + TCLKPOSTEN + Custom time for tCLK-POST enable + 27 + 1 + + + + + DSI_WPCR1 + DSI_WPCR1 + This register shall be programmed only when DSI is stopped (CR. DSIEN=0 and CR.EN = 0). + 0x41C + 0x20 + read-write + 0x00000000 + + + HSTXDCL + High-speed transmission delay on clock lane + 0 + 2 + + + HSTXDDL + High-speed transmission delay on data lanes + 2 + 2 + + + LPSRCCL + Low-power transmission slew-rate compensation on clock lane + 6 + 2 + + + LPSRCDL + Low-power transmission slew-rate compensation on data lanes + 8 + 2 + + + SDDC + SDD control + 12 + 1 + + + HSTXSRCCL + High-speed transmission slew-rate control on clock lane + 16 + 2 + + + HSTXSRCDL + High-speed transmission slew-rate control on data lanes + 18 + 2 + + + FLPRXLPM + Forces LP receiver in low-power mode + 22 + 1 + + + LPRXFT + Low-power RX low-pass filtering tuning + 25 + 2 + + + + + DSI_WPCR2 + DSI_WPCR2 + DSI wrapper PHY configuration register 2 + 0x420 + 0x20 + read-write + 0x00000000 + + + TCLKPREP + TCLKPREP + 0 + 8 + + + TCLKZERO + TCLKZERO + 8 + 8 + + + THSPREP + THSPREP + 16 + 8 + + + THSTRAIL + THSTRAIL + 24 + 8 + + + + + DSI_WPCR3 + DSI_WPCR3 + DSI wrapper PHY configuration register 3 + 0x424 + 0x20 + read-write + 0x00000000 + + + THSZERO + THSZERO + 0 + 8 + + + TLPXD + TLPXD + 8 + 8 + + + THSEXIT + THSEXIT + 16 + 8 + + + TLPXC + TLPXC + 24 + 8 + + + + + DSI_WPCR4 + DSI_WPCR4 + DSI wrapper PHY configuration register 4 + 0x428 + 0x20 + read-write + 0x00000000 + + + TCLKPOST + TCLKPOST + 0 + 8 + + + + + DSI_WRPCR + DSI_WRPCR + DSI wrapper regulator and PLL control register + 0x430 + 0x20 + read-write + 0x00000000 + + + PLLEN + PLLEN + 0 + 1 + + + NDIV + NDIV + 2 + 7 + + + IDF + IDF + 11 + 4 + + + ODF + ODF + 16 + 2 + + + REGEN + REGEN + 24 + 1 + + + + + + + SPDIFRX + Receiver Interface + SPDIFRX + 0x40004000 + + 0x0 + 0x400 + registers + + + SPDIF + SPDIFRX global interrupt + 97 + + + + CR + CR + Control register + 0x0 + 0x20 + read-write + 0x00000000 + + + SPDIFRXEN + Peripheral Block Enable + 0 + 2 + + + RXDMAEN + Receiver DMA ENable for data + flow + 2 + 1 + + + RXSTEO + STerEO Mode + 3 + 1 + + + DRFMT + RX Data format + 4 + 2 + + + PMSK + Mask Parity error bit + 6 + 1 + + + VMSK + Mask of Validity bit + 7 + 1 + + + CUMSK + Mask of channel status and user + bits + 8 + 1 + + + PTMSK + Mask of Preamble Type bits + 9 + 1 + + + CBDMAEN + Control Buffer DMA ENable for control + flow + 10 + 1 + + + CHSEL + Channel Selection + 11 + 1 + + + NBTR + Maximum allowed re-tries during + synchronization phase + 12 + 2 + + + WFA + Wait For Activity + 14 + 1 + + + INSEL + input selection + 16 + 3 + + + CKSEN + Symbol Clock Enable + 20 + 1 + + + CKSBKPEN + Backup Symbol Clock Enable + 21 + 1 + + + + + IMR + IMR + Interrupt mask register + 0x4 + 0x20 + read-write + 0x00000000 + + + RXNEIE + RXNE interrupt enable + 0 + 1 + + + CSRNEIE + Control Buffer Ready Interrupt + Enable + 1 + 1 + + + PERRIE + Parity error interrupt + enable + 2 + 1 + + + OVRIE + Overrun error Interrupt + Enable + 3 + 1 + + + SBLKIE + Synchronization Block Detected Interrupt + Enable + 4 + 1 + + + SYNCDIE + Synchronization Done + 5 + 1 + + + IFEIE + Serial Interface Error Interrupt + Enable + 6 + 1 + + + + + SR + SR + Status register + 0x8 + 0x20 + read-only + 0x00000000 + + + RXNE + Read data register not + empty + 0 + 1 + + + CSRNE + Control Buffer register is not + empty + 1 + 1 + + + PERR + Parity error + 2 + 1 + + + OVR + Overrun error + 3 + 1 + + + SBD + Synchronization Block + Detected + 4 + 1 + + + SYNCD + Synchronization Done + 5 + 1 + + + FERR + Framing error + 6 + 1 + + + SERR + Synchronization error + 7 + 1 + + + TERR + Time-out error + 8 + 1 + + + WIDTH5 + Duration of 5 symbols counted with + SPDIF_CLK + 16 + 15 + + + + + IFCR + IFCR + Interrupt Flag Clear register + 0xC + 0x20 + write-only + 0x00000000 + + + PERRCF + Clears the Parity error + flag + 2 + 1 + + + OVRCF + Clears the Overrun error + flag + 3 + 1 + + + SBDCF + Clears the Synchronization Block + Detected flag + 4 + 1 + + + SYNCDCF + Clears the Synchronization Done + flag + 5 + 1 + + + + + DR_00 + DR_00 + Data input register + 0x10 + 0x20 + read-only + 0x00000000 + + + DR + Parity Error bit + 0 + 24 + + + PE + Parity Error bit + 24 + 1 + + + V + Validity bit + 25 + 1 + + + U + User bit + 26 + 1 + + + C + Channel Status bit + 27 + 1 + + + PT + Preamble Type + 28 + 2 + + + + + CSR + CSR + Channel Status register + 0x14 + 0x20 + read-only + 0x00000000 + + + USR + User data information + 0 + 16 + + + CS + Channel A status + information + 16 + 8 + + + SOB + Start Of Block + 24 + 1 + + + + + DIR + DIR + Debug Information register + 0x18 + 0x20 + read-only + 0x00000000 + + + THI + Threshold HIGH + 0 + 13 + + + TLO + Threshold LOW + 16 + 13 + + + + + VERR + VERR + SPDIFRX version register + 0x3F4 + 0x20 + read-only + 0x00000012 + + + MINREV + Minor revision + 0 + 4 + + + MAJREV + Major revision + 4 + 4 + + + + + IDR + IDR + SPDIFRX identification + register + 0x3F8 + 0x20 + read-only + 0x00130041 + + + ID + SPDIFRX identifier + 0 + 32 + + + + + SIDR + SIDR + SPDIFRX size identification + register + 0x3FC + 0x20 + read-only + 0xA3C5DD01 + + + SID + Size identification + 0 + 32 + + + + + DR_01 + DR_01 + Data input register + DR_00 + 0x10 + 0x20 + read-only + 0x00000000 + + + PE + Parity Error bit + 0 + 1 + + + V + Validity bit + 1 + 1 + + + U + User bit + 2 + 1 + + + C + Channel Status bit + 3 + 1 + + + PT + Preamble Type + 4 + 2 + + + DR + Data value + 8 + 24 + + + + + DR_10 + DR_10 + Data input register + DR_00 + 0x10 + 0x20 + read-only + 0x00000000 + + + DRNL1 + Data value + 0 + 16 + + + DRNL2 + Data value + 16 + 16 + + + + + + + ADC3 + Analog to Digital Converter + ADC + 0x58026000 + + 0x0 + 0xD1 + registers + + + ADC3 + ADC3 global interrupt + 127 + + + + ISR + ISR + ADC interrupt and status + register + 0x0 + 0x20 + read-write + 0x00000000 + + + JQOVF + ADC group injected contexts queue + overflow flag + 10 + 1 + + + AWD3 + ADC analog watchdog 3 flag + 9 + 1 + + + AWD2 + ADC analog watchdog 2 flag + 8 + 1 + + + AWD1 + ADC analog watchdog 1 flag + 7 + 1 + + + JEOS + ADC group injected end of sequence + conversions flag + 6 + 1 + + + JEOC + ADC group injected end of unitary + conversion flag + 5 + 1 + + + OVR + ADC group regular overrun + flag + 4 + 1 + + + EOS + ADC group regular end of sequence + conversions flag + 3 + 1 + + + EOC + ADC group regular end of unitary + conversion flag + 2 + 1 + + + EOSMP + ADC group regular end of sampling + flag + 1 + 1 + + + ADRDY + ADC ready flag + 0 + 1 + + + + + IER + IER + ADC interrupt enable register + 0x4 + 0x20 + read-write + 0x00000000 + + + JQOVFIE + ADC group injected contexts queue + overflow interrupt + 10 + 1 + + + AWD3IE + ADC analog watchdog 3 + interrupt + 9 + 1 + + + AWD2IE + ADC analog watchdog 2 + interrupt + 8 + 1 + + + AWD1IE + ADC analog watchdog 1 + interrupt + 7 + 1 + + + JEOSIE + ADC group injected end of sequence + conversions interrupt + 6 + 1 + + + JEOCIE + ADC group injected end of unitary + conversion interrupt + 5 + 1 + + + OVRIE + ADC group regular overrun + interrupt + 4 + 1 + + + EOSIE + ADC group regular end of sequence + conversions interrupt + 3 + 1 + + + EOCIE + ADC group regular end of unitary + conversion interrupt + 2 + 1 + + + EOSMPIE + ADC group regular end of sampling + interrupt + 1 + 1 + + + ADRDYIE + ADC ready interrupt + 0 + 1 + + + + + CR + CR + ADC control register + 0x8 + 0x20 + read-write + 0x00000000 + + + ADCAL + ADC calibration + 31 + 1 + + + ADCALDIF + ADC differential mode for + calibration + 30 + 1 + + + DEEPPWD + ADC deep power down enable + 29 + 1 + + + ADVREGEN + ADC voltage regulator + enable + 28 + 1 + + + LINCALRDYW6 + Linearity calibration ready Word + 6 + 27 + 1 + + + LINCALRDYW5 + Linearity calibration ready Word + 5 + 26 + 1 + + + LINCALRDYW4 + Linearity calibration ready Word + 4 + 25 + 1 + + + LINCALRDYW3 + Linearity calibration ready Word + 3 + 24 + 1 + + + LINCALRDYW2 + Linearity calibration ready Word + 2 + 23 + 1 + + + LINCALRDYW1 + Linearity calibration ready Word + 1 + 22 + 1 + + + ADCALLIN + Linearity calibration + 16 + 1 + + + BOOST + Boost mode control + 8 + 2 + + + JADSTP + ADC group injected conversion + stop + 5 + 1 + + + ADSTP + ADC group regular conversion + stop + 4 + 1 + + + JADSTART + ADC group injected conversion + start + 3 + 1 + + + ADSTART + ADC group regular conversion + start + 2 + 1 + + + ADDIS + ADC disable + 1 + 1 + + + ADEN + ADC enable + 0 + 1 + + + + + CFGR + CFGR + ADC configuration register 1 + 0xC + 0x20 + read-write + 0x00000000 + + + JQDIS + ADC group injected contexts queue + disable + 31 + 1 + + + AWDCH1CH + ADC analog watchdog 1 monitored channel + selection + 26 + 5 + + + JAUTO + ADC group injected automatic trigger + mode + 25 + 1 + + + JAWD1EN + ADC analog watchdog 1 enable on scope + ADC group injected + 24 + 1 + + + AWD1EN + ADC analog watchdog 1 enable on scope + ADC group regular + 23 + 1 + + + AWD1SGL + ADC analog watchdog 1 monitoring a + single channel or all channels + 22 + 1 + + + JQM + ADC group injected contexts queue + mode + 21 + 1 + + + JDISCEN + ADC group injected sequencer + discontinuous mode + 20 + 1 + + + DISCNUM + ADC group regular sequencer + discontinuous number of ranks + 17 + 3 + + + DISCEN + ADC group regular sequencer + discontinuous mode + 16 + 1 + + + AUTDLY + ADC low power auto wait + 14 + 1 + + + CONT + ADC group regular continuous conversion + mode + 13 + 1 + + + OVRMOD + ADC group regular overrun + configuration + 12 + 1 + + + EXTEN + ADC group regular external trigger + polarity + 10 + 2 + + + EXTSEL + ADC group regular external trigger + source + 5 + 5 + + + RES + ADC data resolution + 2 + 3 + + + DMNGT + ADC DMA transfer enable + 0 + 2 + + + + + CFGR2 + CFGR2 + ADC configuration register 2 + 0x10 + 0x20 + read-write + 0x00000000 + + + ROVSE + ADC oversampler enable on scope ADC + group regular + 0 + 1 + + + JOVSE + ADC oversampler enable on scope ADC + group injected + 1 + 1 + + + OVSS + ADC oversampling shift + 5 + 4 + + + TROVS + ADC oversampling discontinuous mode + (triggered mode) for ADC group regular + 9 + 1 + + + ROVSM + Regular Oversampling mode + 10 + 1 + + + RSHIFT1 + Right-shift data after Offset 1 + correction + 11 + 1 + + + RSHIFT2 + Right-shift data after Offset 2 + correction + 12 + 1 + + + RSHIFT3 + Right-shift data after Offset 3 + correction + 13 + 1 + + + RSHIFT4 + Right-shift data after Offset 4 + correction + 14 + 1 + + + OSR + Oversampling ratio + 16 + 10 + + + LSHIFT + Left shift factor + 28 + 4 + + + + + SMPR1 + SMPR1 + ADC sampling time register 1 + 0x14 + 0x20 + read-write + 0x00000000 + + + SMP9 + ADC channel 9 sampling time + selection + 27 + 3 + + + SMP8 + ADC channel 8 sampling time + selection + 24 + 3 + + + SMP7 + ADC channel 7 sampling time + selection + 21 + 3 + + + SMP6 + ADC channel 6 sampling time + selection + 18 + 3 + + + SMP5 + ADC channel 5 sampling time + selection + 15 + 3 + + + SMP4 + ADC channel 4 sampling time + selection + 12 + 3 + + + SMP3 + ADC channel 3 sampling time + selection + 9 + 3 + + + SMP2 + ADC channel 2 sampling time + selection + 6 + 3 + + + SMP1 + ADC channel 1 sampling time + selection + 3 + 3 + + + + + SMPR2 + SMPR2 + ADC sampling time register 2 + 0x18 + 0x20 + read-write + 0x00000000 + + + SMP19 + ADC channel 18 sampling time + selection + 27 + 3 + + + SMP18 + ADC channel 18 sampling time + selection + 24 + 3 + + + SMP17 + ADC channel 17 sampling time + selection + 21 + 3 + + + SMP16 + ADC channel 16 sampling time + selection + 18 + 3 + + + SMP15 + ADC channel 15 sampling time + selection + 15 + 3 + + + SMP14 + ADC channel 14 sampling time + selection + 12 + 3 + + + SMP13 + ADC channel 13 sampling time + selection + 9 + 3 + + + SMP12 + ADC channel 12 sampling time + selection + 6 + 3 + + + SMP11 + ADC channel 11 sampling time + selection + 3 + 3 + + + SMP10 + ADC channel 10 sampling time + selection + 0 + 3 + + + + + LTR1 + LTR1 + ADC analog watchdog 1 threshold + register + 0x20 + 0x20 + read-write + 0x0FFF0000 + + + LTR1 + ADC analog watchdog 1 threshold + low + 0 + 26 + + + + + LHTR1 + LHTR1 + ADC analog watchdog 2 threshold + register + 0x24 + 0x20 + read-write + 0x0FFF0000 + + + LHTR1 + ADC analog watchdog 2 threshold + low + 0 + 26 + + + + + SQR1 + SQR1 + ADC group regular sequencer ranks register + 1 + 0x30 + 0x20 + read-write + 0x00000000 + + + SQ4 + ADC group regular sequencer rank + 4 + 24 + 5 + + + SQ3 + ADC group regular sequencer rank + 3 + 18 + 5 + + + SQ2 + ADC group regular sequencer rank + 2 + 12 + 5 + + + SQ1 + ADC group regular sequencer rank + 1 + 6 + 5 + + + L3 + L3 + 0 + 4 + + + + + SQR2 + SQR2 + ADC group regular sequencer ranks register + 2 + 0x34 + 0x20 + read-write + 0x00000000 + + + SQ9 + ADC group regular sequencer rank + 9 + 24 + 5 + + + SQ8 + ADC group regular sequencer rank + 8 + 18 + 5 + + + SQ7 + ADC group regular sequencer rank + 7 + 12 + 5 + + + SQ6 + ADC group regular sequencer rank + 6 + 6 + 5 + + + SQ5 + ADC group regular sequencer rank + 5 + 0 + 5 + + + + + SQR3 + SQR3 + ADC group regular sequencer ranks register + 3 + 0x38 + 0x20 + read-write + 0x00000000 + + + SQ14 + ADC group regular sequencer rank + 14 + 24 + 5 + + + SQ13 + ADC group regular sequencer rank + 13 + 18 + 5 + + + SQ12 + ADC group regular sequencer rank + 12 + 12 + 5 + + + SQ11 + ADC group regular sequencer rank + 11 + 6 + 5 + + + SQ10 + ADC group regular sequencer rank + 10 + 0 + 5 + + + + + SQR4 + SQR4 + ADC group regular sequencer ranks register + 4 + 0x3C + 0x20 + read-write + 0x00000000 + + + SQ16 + ADC group regular sequencer rank + 16 + 6 + 5 + + + SQ15 + ADC group regular sequencer rank + 15 + 0 + 5 + + + + + DR + DR + ADC group regular conversion data + register + 0x40 + 0x20 + read-only + 0x00000000 + + + RDATA + ADC group regular conversion + data + 0 + 16 + + + + + JSQR + JSQR + ADC group injected sequencer + register + 0x4C + 0x20 + read-write + 0x00000000 + + + JSQ4 + ADC group injected sequencer rank + 4 + 27 + 5 + + + JSQ3 + ADC group injected sequencer rank + 3 + 21 + 5 + + + JSQ2 + ADC group injected sequencer rank + 2 + 15 + 5 + + + JSQ1 + ADC group injected sequencer rank + 1 + 9 + 5 + + + JEXTEN + ADC group injected external trigger + polarity + 7 + 2 + + + JEXTSEL + ADC group injected external trigger + source + 2 + 5 + + + JL + ADC group injected sequencer scan + length + 0 + 2 + + + + + OFR1 + OFR1 + ADC offset number 1 register + 0x60 + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + OFR2 + OFR2 + ADC offset number 2 register + 0x64 + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + OFR3 + OFR3 + ADC offset number 3 register + 0x68 + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + OFR4 + OFR4 + ADC offset number 4 register + 0x6C + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + JDR1 + JDR1 + ADC group injected sequencer rank 1 + register + 0x80 + 0x20 + read-only + 0x00000000 + + + JDATA1 + ADC group injected sequencer rank 1 + conversion data + 0 + 32 + + + + + JDR2 + JDR2 + ADC group injected sequencer rank 2 + register + 0x84 + 0x20 + read-only + 0x00000000 + + + JDATA2 + ADC group injected sequencer rank 2 + conversion data + 0 + 32 + + + + + JDR3 + JDR3 + ADC group injected sequencer rank 3 + register + 0x88 + 0x20 + read-only + 0x00000000 + + + JDATA3 + ADC group injected sequencer rank 3 + conversion data + 0 + 32 + + + + + JDR4 + JDR4 + ADC group injected sequencer rank 4 + register + 0x8C + 0x20 + read-only + 0x00000000 + + + JDATA4 + ADC group injected sequencer rank 4 + conversion data + 0 + 32 + + + + + AWD2CR + AWD2CR + ADC analog watchdog 2 configuration + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + AWD2CH + ADC analog watchdog 2 monitored channel + selection + 0 + 20 + + + + + AWD3CR + AWD3CR + ADC analog watchdog 3 configuration + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + AWD3CH + ADC analog watchdog 3 monitored channel + selection + 1 + 20 + + + + + DIFSEL + DIFSEL + ADC channel differential or single-ended + mode selection register + 0xC0 + 0x20 + read-write + 0x00000000 + + + DIFSEL + ADC channel differential or single-ended + mode for channel + 0 + 20 + + + + + CALFACT + CALFACT + ADC calibration factors + register + 0xC4 + 0x20 + read-write + 0x00000000 + + + CALFACT_D + ADC calibration factor in differential + mode + 16 + 11 + + + CALFACT_S + ADC calibration factor in single-ended + mode + 0 + 11 + + + + + PCSEL + PCSEL + ADC pre channel selection + register + 0x1C + 0x20 + read-write + 0x00000000 + + + PCSEL + Channel x (VINP[i]) pre + selection + 0 + 20 + + + + + LTR2 + LTR2 + ADC watchdog lower threshold register + 2 + 0xB0 + 0x20 + read-write + 0x00000000 + + + LTR2 + Analog watchdog 2 lower + threshold + 0 + 26 + + + + + HTR2 + HTR2 + ADC watchdog higher threshold register + 2 + 0xB4 + 0x20 + read-write + 0x00000000 + + + HTR2 + Analog watchdog 2 higher + threshold + 0 + 26 + + + + + LTR3 + LTR3 + ADC watchdog lower threshold register + 3 + 0xB8 + 0x20 + read-write + 0x00000000 + + + LTR3 + Analog watchdog 3 lower + threshold + 0 + 26 + + + + + HTR3 + HTR3 + ADC watchdog higher threshold register + 3 + 0xBC + 0x20 + read-write + 0x00000000 + + + HTR3 + Analog watchdog 3 higher + threshold + 0 + 26 + + + + + CALFACT2 + CALFACT2 + ADC Calibration Factor register + 2 + 0xC8 + 0x20 + read-write + 0x00000000 + + + LINCALFACT + Linearity Calibration + Factor + 0 + 30 + + + + + + + ADC1 + 0x40022000 + + + ADC2 + 0x40022100 + + + ADC3_Common + Analog-to-Digital Converter + ADC + 0x58026300 + + 0x0 + 0x100 + registers + + + + CSR + CSR + ADC Common status register + 0x0 + 0x20 + read-only + 0x00000000 + + + ADRDY_MST + Master ADC ready + 0 + 1 + + + EOSMP_MST + End of Sampling phase flag of the master + ADC + 1 + 1 + + + EOC_MST + End of regular conversion of the master + ADC + 2 + 1 + + + EOS_MST + End of regular sequence flag of the + master ADC + 3 + 1 + + + OVR_MST + Overrun flag of the master + ADC + 4 + 1 + + + JEOC_MST + End of injected conversion flag of the + master ADC + 5 + 1 + + + JEOS_MST + End of injected sequence flag of the + master ADC + 6 + 1 + + + AWD1_MST + Analog watchdog 1 flag of the master + ADC + 7 + 1 + + + AWD2_MST + Analog watchdog 2 flag of the master + ADC + 8 + 1 + + + AWD3_MST + Analog watchdog 3 flag of the master + ADC + 9 + 1 + + + JQOVF_MST + Injected Context Queue Overflow flag of + the master ADC + 10 + 1 + + + ADRDY_SLV + Slave ADC ready + 16 + 1 + + + EOSMP_SLV + End of Sampling phase flag of the slave + ADC + 17 + 1 + + + EOC_SLV + End of regular conversion of the slave + ADC + 18 + 1 + + + EOS_SLV + End of regular sequence flag of the + slave ADC + 19 + 1 + + + OVR_SLV + Overrun flag of the slave + ADC + 20 + 1 + + + JEOC_SLV + End of injected conversion flag of the + slave ADC + 21 + 1 + + + JEOS_SLV + End of injected sequence flag of the + slave ADC + 22 + 1 + + + AWD1_SLV + Analog watchdog 1 flag of the slave + ADC + 23 + 1 + + + AWD2_SLV + Analog watchdog 2 flag of the slave + ADC + 24 + 1 + + + AWD3_SLV + Analog watchdog 3 flag of the slave + ADC + 25 + 1 + + + JQOVF_SLV + Injected Context Queue Overflow flag of + the slave ADC + 26 + 1 + + + + + CCR + CCR + ADC common control register + 0x8 + 0x20 + read-write + 0x00000000 + + + DUAL + Dual ADC mode selection + 0 + 5 + + + DELAY + Delay between 2 sampling + phases + 8 + 4 + + + DAMDF + Dual ADC Mode Data Format + 14 + 2 + + + CKMODE + ADC clock mode + 16 + 2 + + + PRESC + ADC prescaler + 18 + 4 + + + VREFEN + VREFINT enable + 22 + 1 + + + VSENSEEN + Temperature sensor enable + 23 + 1 + + + VBATEN + VBAT enable + 24 + 1 + + + + + CDR + CDR + ADC common regular data register for dual + and triple modes + 0xC + 0x20 + read-only + 0x00000000 + + + RDATA_SLV + Regular data of the slave + ADC + 16 + 16 + + + RDATA_MST + Regular data of the master + ADC + 0 + 16 + + + + + CDR2 + CDR2 + ADC x common regular data register for + 32-bit dual mode + 0x10 + 0x20 + read-only + 0x00000000 + + + RDATA_ALT + Regular data of the master/slave + alternated ADCs + 0 + 32 + + + + + + + ADC12_Common + 0x40022300 + + ADC1_2 + ADC1 and ADC2 + 18 + + + + DMAMUX1 + DMAMUX + DMAMUX + 0x40020800 + + 0x0 + 0x400 + registers + + + DMAMUX1_OV + DMAMUX1 overrun interrupt + 102 + + + + C0CR + C0CR + DMAMux - DMA request line multiplexer + channel x control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C1CR + C1CR + DMAMux - DMA request line multiplexer + channel x control register + 0x4 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C2CR + C2CR + DMAMux - DMA request line multiplexer + channel x control register + 0x8 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C3CR + C3CR + DMAMux - DMA request line multiplexer + channel x control register + 0xC + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C4CR + C4CR + DMAMux - DMA request line multiplexer + channel x control register + 0x10 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C5CR + C5CR + DMAMux - DMA request line multiplexer + channel x control register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C6CR + C6CR + DMAMux - DMA request line multiplexer + channel x control register + 0x18 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C7CR + C7CR + DMAMux - DMA request line multiplexer + channel x control register + 0x1C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C8CR + C8CR + DMAMux - DMA request line multiplexer + channel x control register + 0x20 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C9CR + C9CR + DMAMux - DMA request line multiplexer + channel x control register + 0x24 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C10CR + C10CR + DMAMux - DMA request line multiplexer + channel x control register + 0x28 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C11CR + C11CR + DMAMux - DMA request line multiplexer + channel x control register + 0x2C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C12CR + C12CR + DMAMux - DMA request line multiplexer + channel x control register + 0x30 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C13CR + C13CR + DMAMux - DMA request line multiplexer + channel x control register + 0x34 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C14CR + C14CR + DMAMux - DMA request line multiplexer + channel x control register + 0x38 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C15CR + C15CR + DMAMux - DMA request line multiplexer + channel x control register + 0x3C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + RG0CR + RG0CR + DMAMux - DMA request generator channel x + control register + 0x100 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG1CR + RG1CR + DMAMux - DMA request generator channel x + control register + 0x104 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG2CR + RG2CR + DMAMux - DMA request generator channel x + control register + 0x108 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG3CR + RG3CR + DMAMux - DMA request generator channel x + control register + 0x10C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG4CR + RG4CR + DMAMux - DMA request generator channel x + control register + 0x110 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG5CR + RG5CR + DMAMux - DMA request generator channel x + control register + 0x114 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG6CR + RG6CR + DMAMux - DMA request generator channel x + control register + 0x118 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG7CR + RG7CR + DMAMux - DMA request generator channel x + control register + 0x11C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RGSR + RGSR + DMAMux - DMA request generator status + register + 0x140 + 0x20 + read-only + 0x00000000 + + + OF + Trigger event overrun flag The flag is + set when a trigger event occurs on DMA request + generator channel x, while the DMA request generator + counter value is lower than GNBREQ. The flag is + cleared by writing 1 to the corresponding COFx bit in + DMAMUX_RGCFR register. + 0 + 8 + + + + + RGCFR + RGCFR + DMAMux - DMA request generator clear flag + register + 0x144 + 0x20 + write-only + 0x00000000 + + + COF + Clear trigger event overrun flag Upon + setting, this bit clears the corresponding overrun + flag OFx in the DMAMUX_RGCSR register. + 0 + 8 + + + + + CSR + CSR + DMAMUX request line multiplexer interrupt + channel status register + 0x80 + 0x20 + read-only + 0x00000000 + + + SOF + Synchronization overrun event + flag + 0 + 16 + + + + + CFR + CFR + DMAMUX request line multiplexer interrupt + clear flag register + 0x84 + 0x20 + write-only + 0x00000000 + + + CSOF + Clear synchronization overrun event + flag + 0 + 16 + + + + + + + CRC + Cryptographic processor + CRC + 0x58024C00 + + 0x0 + 0x400 + registers + + + + DR + DR + Data register + 0x0 + 0x20 + read-write + 0xFFFFFFFF + + + DR + Data Register + 0 + 32 + + + + + IDR + IDR + Independent Data register + 0x4 + 0x20 + read-write + 0x00000000 + + + IDR + Independent Data register + 0 + 32 + + + + + CR + CR + Control register + 0x8 + 0x20 + 0x00000000 + + + RESET + RESET bit + 0 + 1 + write-only + + + POLYSIZE + Polynomial size + 3 + 2 + read-write + + + REV_IN + Reverse input data + 5 + 2 + read-write + + + REV_OUT + Reverse output data + 7 + 1 + read-write + + + + + INIT + INIT + Initial CRC value + 0xC + 0x20 + read-write + 0x00000000 + + + CRC_INIT + Programmable initial CRC + value + 0 + 32 + + + + + POL + POL + CRC polynomial + 0x10 + 0x20 + read-write + 0x00000000 + + + POL + Programmable polynomial + 0 + 32 + + + + + + + RCC + Reset and clock control + RCC + 0x58024400 + + 0x0 + 0x400 + registers + + + RCC + RCC global interrupt + 5 + + + + CR + CR + clock control register + 0x0 + 0x20 + read-write + 0x00000083 + + + HSION + Internal high-speed clock + enable + 0 + 1 + + + HSIKERON + High Speed Internal clock enable in Stop + mode + 1 + 1 + + + HSIRDY + HSI clock ready flag + 2 + 1 + + + HSIDIV + HSI clock divider + 3 + 2 + + + HSIDIVF + HSI divider flag + 5 + 1 + + + CSION + CSI clock enable + 7 + 1 + + + CSIRDY + CSI clock ready flag + 8 + 1 + + + CSIKERON + CSI clock enable in Stop + mode + 9 + 1 + + + RC48ON + RC48 clock enable + 12 + 1 + + + RC48RDY + RC48 clock ready flag + 13 + 1 + + + D1CKRDY + D1 domain clocks ready + flag + 14 + 1 + + + D2CKRDY + D2 domain clocks ready + flag + 15 + 1 + + + HSEON + HSE clock enable + 16 + 1 + + + HSERDY + HSE clock ready flag + 17 + 1 + + + HSEBYP + HSE clock bypass + 18 + 1 + + + HSECSSON + HSE Clock Security System + enable + 19 + 1 + + + PLL1ON + PLL1 enable + 24 + 1 + + + PLL1RDY + PLL1 clock ready flag + 25 + 1 + + + PLL2ON + PLL2 enable + 26 + 1 + + + PLL2RDY + PLL2 clock ready flag + 27 + 1 + + + PLL3ON + PLL3 enable + 28 + 1 + + + PLL3RDY + PLL3 clock ready flag + 29 + 1 + + + + + ICSCR + ICSCR + RCC Internal Clock Source Calibration + Register + 0x4 + 0x20 + 0x40000000 + + + HSICAL + HSI clock calibration + 0 + 12 + read-only + + + HSITRIM + HSI clock trimming + 12 + 6 + read-write + + + CSICAL + CSI clock calibration + 18 + 8 + read-only + + + CSITRIM + CSI clock trimming + 26 + 5 + read-write + + + + + CRRCR + CRRCR + RCC Clock Recovery RC Register + 0x8 + 0x20 + read-only + 0x00000000 + + + RC48CAL + Internal RC 48 MHz clock + calibration + 0 + 10 + + + + + CFGR + CFGR + RCC Clock Configuration + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + SW + System clock switch + 0 + 3 + + + SWS + System clock switch status + 3 + 3 + + + STOPWUCK + System clock selection after a wake up + from system Stop + 6 + 1 + + + STOPKERWUCK + Kernel clock selection after a wake up + from system Stop + 7 + 1 + + + RTCPRE + HSE division factor for RTC + clock + 8 + 6 + + + HRTIMSEL + High Resolution Timer clock prescaler + selection + 14 + 1 + + + TIMPRE + Timers clocks prescaler + selection + 15 + 1 + + + MCO1PRE + MCO1 prescaler + 18 + 4 + + + MCO1SEL + Micro-controller clock output + 1 + 22 + 3 + + + MCO2PRE + MCO2 prescaler + 25 + 4 + + + MCO2SEL + Micro-controller clock output + 2 + 29 + 3 + + + + + D1CFGR + D1CFGR + RCC Domain 1 Clock Configuration + Register + 0x18 + 0x20 + read-write + 0x00000000 + + + HPRE + D1 domain AHB prescaler + 0 + 4 + + + D1PPRE + D1 domain APB3 prescaler + 4 + 3 + + + D1CPRE + D1 domain Core prescaler + 8 + 4 + + + + + D2CFGR + D2CFGR + RCC Domain 2 Clock Configuration + Register + 0x1C + 0x20 + read-write + 0x00000000 + + + D2PPRE1 + D2 domain APB1 prescaler + 4 + 3 + + + D2PPRE2 + D2 domain APB2 prescaler + 8 + 3 + + + + + D3CFGR + D3CFGR + RCC Domain 3 Clock Configuration + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + D3PPRE + D3 domain APB4 prescaler + 4 + 3 + + + + + PLLCKSELR + PLLCKSELR + RCC PLLs Clock Source Selection + Register + 0x28 + 0x20 + read-write + 0x02020200 + + + PLLSRC + DIVMx and PLLs clock source + selection + 0 + 2 + + + DIVM1 + Prescaler for PLL1 + 4 + 6 + + + DIVM2 + Prescaler for PLL2 + 12 + 6 + + + DIVM3 + Prescaler for PLL3 + 20 + 6 + + + + + PLLCFGR + PLLCFGR + RCC PLLs Configuration + Register + 0x2C + 0x20 + read-write + 0x01FF0000 + + + PLL1FRACEN + PLL1 fractional latch + enable + 0 + 1 + + + PLL1VCOSEL + PLL1 VCO selection + 1 + 1 + + + PLL1RGE + PLL1 input frequency range + 2 + 2 + + + PLL2FRACEN + PLL2 fractional latch + enable + 4 + 1 + + + PLL2VCOSEL + PLL2 VCO selection + 5 + 1 + + + PLL2RGE + PLL2 input frequency range + 6 + 2 + + + PLL3FRACEN + PLL3 fractional latch + enable + 8 + 1 + + + PLL3VCOSEL + PLL3 VCO selection + 9 + 1 + + + PLL3RGE + PLL3 input frequency range + 10 + 2 + + + DIVP1EN + PLL1 DIVP divider output + enable + 16 + 1 + + + DIVQ1EN + PLL1 DIVQ divider output + enable + 17 + 1 + + + DIVR1EN + PLL1 DIVR divider output + enable + 18 + 1 + + + DIVP2EN + PLL2 DIVP divider output + enable + 19 + 1 + + + DIVQ2EN + PLL2 DIVQ divider output + enable + 20 + 1 + + + DIVR2EN + PLL2 DIVR divider output + enable + 21 + 1 + + + DIVP3EN + PLL3 DIVP divider output + enable + 22 + 1 + + + DIVQ3EN + PLL3 DIVQ divider output + enable + 23 + 1 + + + DIVR3EN + PLL3 DIVR divider output + enable + 24 + 1 + + + + + PLL1DIVR + PLL1DIVR + RCC PLL1 Dividers Configuration + Register + 0x30 + 0x20 + read-write + 0x01010280 + + + DIVN1 + Multiplication factor for PLL1 + VCO + 0 + 9 + + + DIVP1 + PLL1 DIVP division factor + 9 + 7 + + + DIVQ1 + PLL1 DIVQ division factor + 16 + 7 + + + DIVR1 + PLL1 DIVR division factor + 24 + 7 + + + + + PLL1FRACR + PLL1FRACR + RCC PLL1 Fractional Divider + Register + 0x34 + 0x20 + read-write + 0x00000000 + + + FRACN1 + Fractional part of the multiplication + factor for PLL1 VCO + 3 + 13 + + + + + PLL2DIVR + PLL2DIVR + RCC PLL2 Dividers Configuration + Register + 0x38 + 0x20 + read-write + 0x01010280 + + + DIVN1 + Multiplication factor for PLL1 + VCO + 0 + 9 + + + DIVP1 + PLL1 DIVP division factor + 9 + 7 + + + DIVQ1 + PLL1 DIVQ division factor + 16 + 7 + + + DIVR1 + PLL1 DIVR division factor + 24 + 7 + + + + + PLL2FRACR + PLL2FRACR + RCC PLL2 Fractional Divider + Register + 0x3C + 0x20 + read-write + 0x00000000 + + + FRACN2 + Fractional part of the multiplication + factor for PLL VCO + 3 + 13 + + + + + PLL3DIVR + PLL3DIVR + RCC PLL3 Dividers Configuration + Register + 0x40 + 0x20 + read-write + 0x01010280 + + + DIVN3 + Multiplication factor for PLL1 + VCO + 0 + 9 + + + DIVP3 + PLL DIVP division factor + 9 + 7 + + + DIVQ3 + PLL DIVQ division factor + 16 + 7 + + + DIVR3 + PLL DIVR division factor + 24 + 7 + + + + + PLL3FRACR + PLL3FRACR + RCC PLL3 Fractional Divider + Register + 0x44 + 0x20 + read-write + 0x00000000 + + + FRACN3 + Fractional part of the multiplication + factor for PLL3 VCO + 3 + 13 + + + + + D1CCIPR + D1CCIPR + RCC Domain 1 Kernel Clock Configuration + Register + 0x4C + 0x20 + read-write + 0x00000000 + + + FMCSRC + FMC kernel clock source + selection + 0 + 2 + + + QSPISRC + QUADSPI kernel clock source + selection + 4 + 2 + + + SDMMCSRC + SDMMC kernel clock source + selection + 16 + 1 + + + CKPERSRC + per_ck clock source + selection + 28 + 2 + + + + + D2CCIP1R + D2CCIP1R + RCC Domain 2 Kernel Clock Configuration + Register + 0x50 + 0x20 + read-write + 0x00000000 + + + SAI1SRC + SAI1 and DFSDM1 kernel Aclk clock source + selection + 0 + 3 + + + SAI23SRC + SAI2 and SAI3 kernel clock source + selection + 6 + 3 + + + SPI123SRC + SPI/I2S1,2 and 3 kernel clock source + selection + 12 + 3 + + + SPI45SRC + SPI4 and 5 kernel clock source + selection + 16 + 3 + + + SPDIFSRC + SPDIFRX kernel clock source + selection + 20 + 2 + + + DFSDM1SRC + DFSDM1 kernel Clk clock source + selection + 24 + 1 + + + FDCANSRC + FDCAN kernel clock source + selection + 28 + 2 + + + SWPSRC + SWPMI kernel clock source + selection + 31 + 1 + + + + + D2CCIP2R + D2CCIP2R + RCC Domain 2 Kernel Clock Configuration + Register + 0x54 + 0x20 + read-write + 0x00000000 + + + USART234578SRC + USART2/3, UART4,5, 7/8 (APB1) kernel + clock source selection + 0 + 3 + + + USART16SRC + USART1 and 6 kernel clock source + selection + 3 + 3 + + + RNGSRC + RNG kernel clock source + selection + 8 + 2 + + + I2C123SRC + I2C1,2,3 kernel clock source + selection + 12 + 2 + + + USBSRC + USBOTG 1 and 2 kernel clock source + selection + 20 + 2 + + + CECSRC + HDMI-CEC kernel clock source + selection + 22 + 2 + + + LPTIM1SRC + LPTIM1 kernel clock source + selection + 28 + 3 + + + + + D3CCIPR + D3CCIPR + RCC Domain 3 Kernel Clock Configuration + Register + 0x58 + 0x20 + read-write + 0x00000000 + + + LPUART1SRC + LPUART1 kernel clock source + selection + 0 + 3 + + + I2C4SRC + I2C4 kernel clock source + selection + 8 + 2 + + + LPTIM2SRC + LPTIM2 kernel clock source + selection + 10 + 3 + + + LPTIM345SRC + LPTIM3,4,5 kernel clock source + selection + 13 + 3 + + + ADCSRC + SAR ADC kernel clock source + selection + 16 + 2 + + + SAI4ASRC + Sub-Block A of SAI4 kernel clock source + selection + 21 + 3 + + + SAI4BSRC + Sub-Block B of SAI4 kernel clock source + selection + 24 + 3 + + + SPI6SRC + SPI6 kernel clock source + selection + 28 + 3 + + + + + CIER + CIER + RCC Clock Source Interrupt Enable + Register + 0x60 + 0x20 + read-write + 0x00000000 + + + LSIRDYIE + LSI ready Interrupt Enable + 0 + 1 + + + LSERDYIE + LSE ready Interrupt Enable + 1 + 1 + + + HSIRDYIE + HSI ready Interrupt Enable + 2 + 1 + + + HSERDYIE + HSE ready Interrupt Enable + 3 + 1 + + + CSIRDYIE + CSI ready Interrupt Enable + 4 + 1 + + + RC48RDYIE + RC48 ready Interrupt + Enable + 5 + 1 + + + PLL1RDYIE + PLL1 ready Interrupt + Enable + 6 + 1 + + + PLL2RDYIE + PLL2 ready Interrupt + Enable + 7 + 1 + + + PLL3RDYIE + PLL3 ready Interrupt + Enable + 8 + 1 + + + LSECSSIE + LSE clock security system Interrupt + Enable + 9 + 1 + + + + + CIFR + CIFR + RCC Clock Source Interrupt Flag + Register + 0x64 + 0x20 + read-write + 0x00000000 + + + LSIRDYF + LSI ready Interrupt Flag + 0 + 1 + + + LSERDYF + LSE ready Interrupt Flag + 1 + 1 + + + HSIRDYF + HSI ready Interrupt Flag + 2 + 1 + + + HSERDYF + HSE ready Interrupt Flag + 3 + 1 + + + CSIRDY + CSI ready Interrupt Flag + 4 + 1 + + + RC48RDYF + RC48 ready Interrupt Flag + 5 + 1 + + + PLL1RDYF + PLL1 ready Interrupt Flag + 6 + 1 + + + PLL2RDYF + PLL2 ready Interrupt Flag + 7 + 1 + + + PLL3RDYF + PLL3 ready Interrupt Flag + 8 + 1 + + + LSECSSF + LSE clock security system Interrupt + Flag + 9 + 1 + + + HSECSSF + HSE clock security system Interrupt + Flag + 10 + 1 + + + + + CICR + CICR + RCC Clock Source Interrupt Clear + Register + 0x68 + 0x20 + read-write + 0x00000000 + + + LSIRDYC + LSI ready Interrupt Clear + 0 + 1 + + + LSERDYC + LSE ready Interrupt Clear + 1 + 1 + + + HSIRDYC + HSI ready Interrupt Clear + 2 + 1 + + + HSERDYC + HSE ready Interrupt Clear + 3 + 1 + + + HSE_ready_Interrupt_Clear + CSI ready Interrupt Clear + 4 + 1 + + + RC48RDYC + RC48 ready Interrupt Clear + 5 + 1 + + + PLL1RDYC + PLL1 ready Interrupt Clear + 6 + 1 + + + PLL2RDYC + PLL2 ready Interrupt Clear + 7 + 1 + + + PLL3RDYC + PLL3 ready Interrupt Clear + 8 + 1 + + + LSECSSC + LSE clock security system Interrupt + Clear + 9 + 1 + + + HSECSSC + HSE clock security system Interrupt + Clear + 10 + 1 + + + + + BDCR + BDCR + RCC Backup Domain Control + Register + 0x70 + 0x20 + read-write + 0x00000000 + + + LSEON + LSE oscillator enabled + 0 + 1 + + + LSERDY + LSE oscillator ready + 1 + 1 + + + LSEBYP + LSE oscillator bypass + 2 + 1 + + + LSEDRV + LSE oscillator driving + capability + 3 + 2 + + + LSECSSON + LSE clock security system + enable + 5 + 1 + + + LSECSSD + LSE clock security system failure + detection + 6 + 1 + + + RTCSRC + RTC clock source selection + 8 + 2 + + + RTCEN + RTC clock enable + 15 + 1 + + + VSWRST + VSwitch domain software + reset + 16 + 1 + + + + + CSR + CSR + RCC Clock Control and Status + Register + 0x74 + 0x20 + read-write + 0x00000000 + + + LSION + LSI oscillator enable + 0 + 1 + + + LSIRDY + LSI oscillator ready + 1 + 1 + + + + + AHB3RSTR + AHB3RSTR + RCC AHB3 Reset Register + 0x7C + 0x20 + read-write + 0x00000000 + + + MDMARST + MDMA block reset + 0 + 1 + + + DMA2DRST + DMA2D block reset + 4 + 1 + + + JPGDECRST + JPGDEC block reset + 5 + 1 + + + FMCRST + FMC block reset + 12 + 1 + + + QSPIRST + QUADSPI and QUADSPI delay block + reset + 14 + 1 + + + SDMMC1RST + SDMMC1 and SDMMC1 delay block + reset + 16 + 1 + + + CPURST + CPU reset + 31 + 1 + + + + + AHB1RSTR + AHB1RSTR + RCC AHB1 Peripheral Reset + Register + 0x80 + 0x20 + read-write + 0x00000000 + + + DMA1RST + DMA1 block reset + 0 + 1 + + + DMA2RST + DMA2 block reset + 1 + 1 + + + ADC12RST + ADC1&2 block reset + 5 + 1 + + + ETH1MACRST + ETH1MAC block reset + 15 + 1 + + + USB1OTGRST + USB1OTG block reset + 25 + 1 + + + USB2OTGRST + USB2OTG block reset + 27 + 1 + + + + + AHB2RSTR + AHB2RSTR + RCC AHB2 Peripheral Reset + Register + 0x84 + 0x20 + read-write + 0x00000000 + + + CAMITFRST + CAMITF block reset + 0 + 1 + + + CRYPTRST + Cryptography block reset + 4 + 1 + + + HASHRST + Hash block reset + 5 + 1 + + + RNGRST + Random Number Generator block + reset + 6 + 1 + + + SDMMC2RST + SDMMC2 and SDMMC2 Delay block + reset + 9 + 1 + + + + + AHB4RSTR + AHB4RSTR + RCC AHB4 Peripheral Reset + Register + 0x88 + 0x20 + read-write + 0x00000000 + + + GPIOARST + GPIO block reset + 0 + 1 + + + GPIOBRST + GPIO block reset + 1 + 1 + + + GPIOCRST + GPIO block reset + 2 + 1 + + + GPIODRST + GPIO block reset + 3 + 1 + + + GPIOERST + GPIO block reset + 4 + 1 + + + GPIOFRST + GPIO block reset + 5 + 1 + + + GPIOGRST + GPIO block reset + 6 + 1 + + + GPIOHRST + GPIO block reset + 7 + 1 + + + GPIOIRST + GPIO block reset + 8 + 1 + + + GPIOJRST + GPIO block reset + 9 + 1 + + + GPIOKRST + GPIO block reset + 10 + 1 + + + CRCRST + CRC block reset + 19 + 1 + + + BDMARST + BDMA block reset + 21 + 1 + + + ADC3RST + ADC3 block reset + 24 + 1 + + + HSEMRST + HSEM block reset + 25 + 1 + + + + + APB3RSTR + APB3RSTR + RCC APB3 Peripheral Reset + Register + 0x8C + 0x20 + read-write + 0x00000000 + + + LTDCRST + LTDC block reset + 3 + 1 + + + + + APB1LRSTR + APB1LRSTR + RCC APB1 Peripheral Reset + Register + 0x90 + 0x20 + read-write + 0x00000000 + + + TIM2RST + TIM block reset + 0 + 1 + + + TIM3RST + TIM block reset + 1 + 1 + + + TIM4RST + TIM block reset + 2 + 1 + + + TIM5RST + TIM block reset + 3 + 1 + + + TIM6RST + TIM block reset + 4 + 1 + + + TIM7RST + TIM block reset + 5 + 1 + + + TIM12RST + TIM block reset + 6 + 1 + + + TIM13RST + TIM block reset + 7 + 1 + + + TIM14RST + TIM block reset + 8 + 1 + + + LPTIM1RST + TIM block reset + 9 + 1 + + + SPI2RST + SPI2 block reset + 14 + 1 + + + SPI3RST + SPI3 block reset + 15 + 1 + + + SPDIFRXRST + SPDIFRX block reset + 16 + 1 + + + USART2RST + USART2 block reset + 17 + 1 + + + USART3RST + USART3 block reset + 18 + 1 + + + UART4RST + UART4 block reset + 19 + 1 + + + UART5RST + UART5 block reset + 20 + 1 + + + I2C1RST + I2C1 block reset + 21 + 1 + + + I2C2RST + I2C2 block reset + 22 + 1 + + + I2C3RST + I2C3 block reset + 23 + 1 + + + HDMICECRST + HDMI-CEC block reset + 27 + 1 + + + DAC12RST + DAC1 and 2 Blocks Reset + 29 + 1 + + + USART7RST + USART7 block reset + 30 + 1 + + + USART8RST + USART8 block reset + 31 + 1 + + + + + APB1HRSTR + APB1HRSTR + RCC APB1 Peripheral Reset + Register + 0x94 + 0x20 + read-write + 0x00000000 + + + CRSRST + Clock Recovery System + reset + 1 + 1 + + + SWPRST + SWPMI block reset + 2 + 1 + + + OPAMPRST + OPAMP block reset + 4 + 1 + + + MDIOSRST + MDIOS block reset + 5 + 1 + + + FDCANRST + FDCAN block reset + 8 + 1 + + + + + APB2RSTR + APB2RSTR + RCC APB2 Peripheral Reset + Register + 0x98 + 0x20 + read-write + 0x00000000 + + + TIM1RST + TIM1 block reset + 0 + 1 + + + TIM8RST + TIM8 block reset + 1 + 1 + + + USART1RST + USART1 block reset + 4 + 1 + + + USART6RST + USART6 block reset + 5 + 1 + + + SPI1RST + SPI1 block reset + 12 + 1 + + + SPI4RST + SPI4 block reset + 13 + 1 + + + TIM15RST + TIM15 block reset + 16 + 1 + + + TIM16RST + TIM16 block reset + 17 + 1 + + + TIM17RST + TIM17 block reset + 18 + 1 + + + SPI5RST + SPI5 block reset + 20 + 1 + + + SAI1RST + SAI1 block reset + 22 + 1 + + + SAI2RST + SAI2 block reset + 23 + 1 + + + SAI3RST + SAI3 block reset + 24 + 1 + + + DFSDM1RST + DFSDM1 block reset + 28 + 1 + + + HRTIMRST + HRTIM block reset + 29 + 1 + + + + + APB4RSTR + APB4RSTR + RCC APB4 Peripheral Reset + Register + 0x9C + 0x20 + read-write + 0x00000000 + + + SYSCFGRST + SYSCFG block reset + 1 + 1 + + + LPUART1RST + LPUART1 block reset + 3 + 1 + + + SPI6RST + SPI6 block reset + 5 + 1 + + + I2C4RST + I2C4 block reset + 7 + 1 + + + LPTIM2RST + LPTIM2 block reset + 9 + 1 + + + LPTIM3RST + LPTIM3 block reset + 10 + 1 + + + LPTIM4RST + LPTIM4 block reset + 11 + 1 + + + LPTIM5RST + LPTIM5 block reset + 12 + 1 + + + COMP12RST + COMP12 Blocks Reset + 14 + 1 + + + VREFRST + VREF block reset + 15 + 1 + + + SAI4RST + SAI4 block reset + 21 + 1 + + + + + GCR + GCR + RCC Global Control Register + 0xA0 + 0x20 + read-write + 0x00000000 + + + WW1RSC + WWDG1 reset scope control + 0 + 1 + + + + + D3AMR + D3AMR + RCC D3 Autonomous mode + Register + 0xA8 + 0x20 + read-write + 0x00000000 + + + BDMAAMEN + BDMA and DMAMUX Autonomous mode + enable + 0 + 1 + + + LPUART1AMEN + LPUART1 Autonomous mode + enable + 3 + 1 + + + SPI6AMEN + SPI6 Autonomous mode + enable + 5 + 1 + + + I2C4AMEN + I2C4 Autonomous mode + enable + 7 + 1 + + + LPTIM2AMEN + LPTIM2 Autonomous mode + enable + 9 + 1 + + + LPTIM3AMEN + LPTIM3 Autonomous mode + enable + 10 + 1 + + + LPTIM4AMEN + LPTIM4 Autonomous mode + enable + 11 + 1 + + + LPTIM5AMEN + LPTIM5 Autonomous mode + enable + 12 + 1 + + + COMP12AMEN + COMP12 Autonomous mode + enable + 14 + 1 + + + VREFAMEN + VREF Autonomous mode + enable + 15 + 1 + + + RTCAMEN + RTC Autonomous mode enable + 16 + 1 + + + CRCAMEN + CRC Autonomous mode enable + 19 + 1 + + + SAI4AMEN + SAI4 Autonomous mode + enable + 21 + 1 + + + ADC3AMEN + ADC3 Autonomous mode + enable + 24 + 1 + + + BKPSRAMAMEN + Backup RAM Autonomous mode + enable + 28 + 1 + + + SRAM4AMEN + SRAM4 Autonomous mode + enable + 29 + 1 + + + + + RSR + RSR + RCC Reset Status Register + 0xD0 + 0x20 + read-write + 0x00000000 + + + RMVF + Remove reset flag + 16 + 1 + + + CPURSTF + CPU reset flag + 17 + 1 + + + D1RSTF + D1 domain power switch reset + flag + 19 + 1 + + + D2RSTF + D2 domain power switch reset + flag + 20 + 1 + + + BORRSTF + BOR reset flag + 21 + 1 + + + PINRSTF + Pin reset flag (NRST) + 22 + 1 + + + PORRSTF + POR/PDR reset flag + 23 + 1 + + + SFTRSTF + System reset from CPU reset + flag + 24 + 1 + + + IWDG1RSTF + Independent Watchdog reset + flag + 26 + 1 + + + WWDG1RSTF + Window Watchdog reset flag + 28 + 1 + + + LPWRRSTF + Reset due to illegal D1 DStandby or CPU + CStop flag + 30 + 1 + + + + + C1_RSR + C1_RSR + RCC Reset Status Register + 0x130 + 0x20 + read-write + 0x00000000 + + + RMVF + Remove reset flag + 16 + 1 + + + CPURSTF + CPU reset flag + 17 + 1 + + + D1RSTF + D1 domain power switch reset + flag + 19 + 1 + + + D2RSTF + D2 domain power switch reset + flag + 20 + 1 + + + BORRSTF + BOR reset flag + 21 + 1 + + + PINRSTF + Pin reset flag (NRST) + 22 + 1 + + + PORRSTF + POR/PDR reset flag + 23 + 1 + + + SFTRSTF + System reset from CPU reset + flag + 24 + 1 + + + IWDG1RSTF + Independent Watchdog reset + flag + 26 + 1 + + + WWDG1RSTF + Window Watchdog reset flag + 28 + 1 + + + LPWRRSTF + Reset due to illegal D1 DStandby or CPU + CStop flag + 30 + 1 + + + + + C1_AHB3ENR + C1_AHB3ENR + RCC AHB3 Clock Register + 0x134 + 0x20 + read-write + 0x00000000 + + + MDMAEN + MDMA Peripheral Clock + Enable + 0 + 1 + + + DMA2DEN + DMA2D Peripheral Clock + Enable + 4 + 1 + + + JPGDECEN + JPGDEC Peripheral Clock + Enable + 5 + 1 + + + FMCEN + FMC Peripheral Clocks + Enable + 12 + 1 + + + QSPIEN + QUADSPI and QUADSPI Delay Clock + Enable + 14 + 1 + + + SDMMC1EN + SDMMC1 and SDMMC1 Delay Clock + Enable + 16 + 1 + + + + + AHB3ENR + AHB3ENR + RCC AHB3 Clock Register + 0xD4 + 0x20 + read-write + 0x00000000 + + + MDMAEN + MDMA Peripheral Clock + Enable + 0 + 1 + + + DMA2DEN + DMA2D Peripheral Clock + Enable + 4 + 1 + + + JPGDECEN + JPGDEC Peripheral Clock + Enable + 5 + 1 + + + FMCEN + FMC Peripheral Clocks + Enable + 12 + 1 + + + QSPIEN + QUADSPI and QUADSPI Delay Clock + Enable + 14 + 1 + + + SDMMC1EN + SDMMC1 and SDMMC1 Delay Clock + Enable + 16 + 1 + + + + + AHB1ENR + AHB1ENR + RCC AHB1 Clock Register + 0xD8 + 0x20 + read-write + 0x00000000 + + + DMA1EN + DMA1 Clock Enable + 0 + 1 + + + DMA2EN + DMA2 Clock Enable + 1 + 1 + + + ADC12EN + ADC1/2 Peripheral Clocks + Enable + 5 + 1 + + + ETH1MACEN + Ethernet MAC bus interface Clock + Enable + 15 + 1 + + + ETH1TXEN + Ethernet Transmission Clock + Enable + 16 + 1 + + + ETH1RXEN + Ethernet Reception Clock + Enable + 17 + 1 + + + USB1OTGEN + USB1OTG Peripheral Clocks + Enable + 25 + 1 + + + USB1ULPIEN + USB_PHY1 Clocks Enable + 26 + 1 + + + USB2OTGEN + USB2OTG Peripheral Clocks + Enable + 27 + 1 + + + USB2ULPIEN + USB_PHY2 Clocks Enable + 28 + 1 + + + + + C1_AHB1ENR + C1_AHB1ENR + RCC AHB1 Clock Register + 0x138 + 0x20 + read-write + 0x00000000 + + + DMA1EN + DMA1 Clock Enable + 0 + 1 + + + DMA2EN + DMA2 Clock Enable + 1 + 1 + + + ADC12EN + ADC1/2 Peripheral Clocks + Enable + 5 + 1 + + + ETH1MACEN + Ethernet MAC bus interface Clock + Enable + 15 + 1 + + + ETH1TXEN + Ethernet Transmission Clock + Enable + 16 + 1 + + + ETH1RXEN + Ethernet Reception Clock + Enable + 17 + 1 + + + USB1OTGEN + USB1OTG Peripheral Clocks + Enable + 25 + 1 + + + USB1ULPIEN + USB_PHY1 Clocks Enable + 26 + 1 + + + USB2OTGEN + USB2OTG Peripheral Clocks + Enable + 27 + 1 + + + USB2ULPIEN + USB_PHY2 Clocks Enable + 28 + 1 + + + + + C1_AHB2ENR + C1_AHB2ENR + RCC AHB2 Clock Register + 0x13C + 0x20 + read-write + 0x00000000 + + + CAMITFEN + CAMITF peripheral clock + enable + 0 + 1 + + + CRYPTEN + CRYPT peripheral clock + enable + 4 + 1 + + + HASHEN + HASH peripheral clock + enable + 5 + 1 + + + RNGEN + RNG peripheral clocks + enable + 6 + 1 + + + SDMMC2EN + SDMMC2 and SDMMC2 delay clock + enable + 9 + 1 + + + SRAM1EN + SRAM1 block enable + 29 + 1 + + + SRAM2EN + SRAM2 block enable + 30 + 1 + + + SRAM3EN + SRAM3 block enable + 31 + 1 + + + + + AHB2ENR + AHB2ENR + RCC AHB2 Clock Register + 0xDC + 0x20 + read-write + 0x00000000 + + + CAMITFEN + CAMITF peripheral clock + enable + 0 + 1 + + + CRYPTEN + CRYPT peripheral clock + enable + 4 + 1 + + + HASHEN + HASH peripheral clock + enable + 5 + 1 + + + RNGEN + RNG peripheral clocks + enable + 6 + 1 + + + SDMMC2EN + SDMMC2 and SDMMC2 delay clock + enable + 9 + 1 + + + SRAM1EN + SRAM1 block enable + 29 + 1 + + + SRAM2EN + SRAM2 block enable + 30 + 1 + + + SRAM3EN + SRAM3 block enable + 31 + 1 + + + + + AHB4ENR + AHB4ENR + RCC AHB4 Clock Register + 0xE0 + 0x20 + read-write + 0x00000000 + + + GPIOAEN + 0GPIO peripheral clock + enable + 0 + 1 + + + GPIOBEN + 0GPIO peripheral clock + enable + 1 + 1 + + + GPIOCEN + 0GPIO peripheral clock + enable + 2 + 1 + + + GPIODEN + 0GPIO peripheral clock + enable + 3 + 1 + + + GPIOEEN + 0GPIO peripheral clock + enable + 4 + 1 + + + GPIOFEN + 0GPIO peripheral clock + enable + 5 + 1 + + + GPIOGEN + 0GPIO peripheral clock + enable + 6 + 1 + + + GPIOHEN + 0GPIO peripheral clock + enable + 7 + 1 + + + GPIOIEN + 0GPIO peripheral clock + enable + 8 + 1 + + + GPIOJEN + 0GPIO peripheral clock + enable + 9 + 1 + + + GPIOKEN + 0GPIO peripheral clock + enable + 10 + 1 + + + CRCEN + CRC peripheral clock + enable + 19 + 1 + + + BDMAEN + BDMA and DMAMUX2 Clock + Enable + 21 + 1 + + + ADC3EN + ADC3 Peripheral Clocks + Enable + 24 + 1 + + + HSEMEN + HSEM peripheral clock + enable + 25 + 1 + + + BKPRAMEN + Backup RAM Clock Enable + 28 + 1 + + + + + C1_AHB4ENR + C1_AHB4ENR + RCC AHB4 Clock Register + 0x140 + 0x20 + read-write + 0x00000000 + + + GPIOAEN + 0GPIO peripheral clock + enable + 0 + 1 + + + GPIOBEN + 0GPIO peripheral clock + enable + 1 + 1 + + + GPIOCEN + 0GPIO peripheral clock + enable + 2 + 1 + + + GPIODEN + 0GPIO peripheral clock + enable + 3 + 1 + + + GPIOEEN + 0GPIO peripheral clock + enable + 4 + 1 + + + GPIOFEN + 0GPIO peripheral clock + enable + 5 + 1 + + + GPIOGEN + 0GPIO peripheral clock + enable + 6 + 1 + + + GPIOHEN + 0GPIO peripheral clock + enable + 7 + 1 + + + GPIOIEN + 0GPIO peripheral clock + enable + 8 + 1 + + + GPIOJEN + 0GPIO peripheral clock + enable + 9 + 1 + + + GPIOKEN + 0GPIO peripheral clock + enable + 10 + 1 + + + CRCEN + CRC peripheral clock + enable + 19 + 1 + + + BDMAEN + BDMA and DMAMUX2 Clock + Enable + 21 + 1 + + + ADC3EN + ADC3 Peripheral Clocks + Enable + 24 + 1 + + + HSEMEN + HSEM peripheral clock + enable + 25 + 1 + + + BKPRAMEN + Backup RAM Clock Enable + 28 + 1 + + + + + C1_APB3ENR + C1_APB3ENR + RCC APB3 Clock Register + 0x144 + 0x20 + read-write + 0x00000000 + + + LTDCEN + LTDC peripheral clock + enable + 3 + 1 + + + WWDG1EN + WWDG1 Clock Enable + 6 + 1 + + + + + APB3ENR + APB3ENR + RCC APB3 Clock Register + 0xE4 + 0x20 + read-write + 0x00000000 + + + LTDCEN + LTDC peripheral clock + enable + 3 + 1 + + + WWDG1EN + WWDG1 Clock Enable + 6 + 1 + + + + + APB1LENR + APB1LENR + RCC APB1 Clock Register + 0xE8 + 0x20 + read-write + 0x00000000 + + + TIM2EN + TIM peripheral clock + enable + 0 + 1 + + + TIM3EN + TIM peripheral clock + enable + 1 + 1 + + + TIM4EN + TIM peripheral clock + enable + 2 + 1 + + + TIM5EN + TIM peripheral clock + enable + 3 + 1 + + + TIM6EN + TIM peripheral clock + enable + 4 + 1 + + + TIM7EN + TIM peripheral clock + enable + 5 + 1 + + + TIM12EN + TIM peripheral clock + enable + 6 + 1 + + + TIM13EN + TIM peripheral clock + enable + 7 + 1 + + + TIM14EN + TIM peripheral clock + enable + 8 + 1 + + + LPTIM1EN + LPTIM1 Peripheral Clocks + Enable + 9 + 1 + + + SPI2EN + SPI2 Peripheral Clocks + Enable + 14 + 1 + + + SPI3EN + SPI3 Peripheral Clocks + Enable + 15 + 1 + + + SPDIFRXEN + SPDIFRX Peripheral Clocks + Enable + 16 + 1 + + + USART2EN + USART2 Peripheral Clocks + Enable + 17 + 1 + + + USART3EN + USART3 Peripheral Clocks + Enable + 18 + 1 + + + UART4EN + UART4 Peripheral Clocks + Enable + 19 + 1 + + + UART5EN + UART5 Peripheral Clocks + Enable + 20 + 1 + + + I2C1EN + I2C1 Peripheral Clocks + Enable + 21 + 1 + + + I2C2EN + I2C2 Peripheral Clocks + Enable + 22 + 1 + + + I2C3EN + I2C3 Peripheral Clocks + Enable + 23 + 1 + + + HDMICECEN + HDMI-CEC peripheral clock + enable + 27 + 1 + + + DAC12EN + DAC1&2 peripheral clock + enable + 29 + 1 + + + USART7EN + USART7 Peripheral Clocks + Enable + 30 + 1 + + + USART8EN + USART8 Peripheral Clocks + Enable + 31 + 1 + + + + + C1_APB1LENR + C1_APB1LENR + RCC APB1 Clock Register + 0x148 + 0x20 + read-write + 0x00000000 + + + TIM2EN + TIM peripheral clock + enable + 0 + 1 + + + TIM3EN + TIM peripheral clock + enable + 1 + 1 + + + TIM4EN + TIM peripheral clock + enable + 2 + 1 + + + TIM5EN + TIM peripheral clock + enable + 3 + 1 + + + TIM6EN + TIM peripheral clock + enable + 4 + 1 + + + TIM7EN + TIM peripheral clock + enable + 5 + 1 + + + TIM12EN + TIM peripheral clock + enable + 6 + 1 + + + TIM13EN + TIM peripheral clock + enable + 7 + 1 + + + TIM14EN + TIM peripheral clock + enable + 8 + 1 + + + LPTIM1EN + LPTIM1 Peripheral Clocks + Enable + 9 + 1 + + + SPI2EN + SPI2 Peripheral Clocks + Enable + 14 + 1 + + + SPI3EN + SPI3 Peripheral Clocks + Enable + 15 + 1 + + + SPDIFRXEN + SPDIFRX Peripheral Clocks + Enable + 16 + 1 + + + USART2EN + USART2 Peripheral Clocks + Enable + 17 + 1 + + + USART3EN + USART3 Peripheral Clocks + Enable + 18 + 1 + + + UART4EN + UART4 Peripheral Clocks + Enable + 19 + 1 + + + UART5EN + UART5 Peripheral Clocks + Enable + 20 + 1 + + + I2C1EN + I2C1 Peripheral Clocks + Enable + 21 + 1 + + + I2C2EN + I2C2 Peripheral Clocks + Enable + 22 + 1 + + + I2C3EN + I2C3 Peripheral Clocks + Enable + 23 + 1 + + + HDMICECEN + HDMI-CEC peripheral clock + enable + 27 + 1 + + + DAC12EN + DAC1&2 peripheral clock + enable + 29 + 1 + + + USART7EN + USART7 Peripheral Clocks + Enable + 30 + 1 + + + USART8EN + USART8 Peripheral Clocks + Enable + 31 + 1 + + + + + APB1HENR + APB1HENR + RCC APB1 Clock Register + 0xEC + 0x20 + read-write + 0x00000000 + + + CRSEN + Clock Recovery System peripheral clock + enable + 1 + 1 + + + SWPEN + SWPMI Peripheral Clocks + Enable + 2 + 1 + + + OPAMPEN + OPAMP peripheral clock + enable + 4 + 1 + + + MDIOSEN + MDIOS peripheral clock + enable + 5 + 1 + + + FDCANEN + FDCAN Peripheral Clocks + Enable + 8 + 1 + + + + + C1_APB1HENR + C1_APB1HENR + RCC APB1 Clock Register + 0x14C + 0x20 + read-write + 0x00000000 + + + CRSEN + Clock Recovery System peripheral clock + enable + 1 + 1 + + + SWPEN + SWPMI Peripheral Clocks + Enable + 2 + 1 + + + OPAMPEN + OPAMP peripheral clock + enable + 4 + 1 + + + MDIOSEN + MDIOS peripheral clock + enable + 5 + 1 + + + FDCANEN + FDCAN Peripheral Clocks + Enable + 8 + 1 + + + + + C1_APB2ENR + C1_APB2ENR + RCC APB2 Clock Register + 0x150 + 0x20 + read-write + 0x00000000 + + + TIM1EN + TIM1 peripheral clock + enable + 0 + 1 + + + TIM8EN + TIM8 peripheral clock + enable + 1 + 1 + + + USART1EN + USART1 Peripheral Clocks + Enable + 4 + 1 + + + USART6EN + USART6 Peripheral Clocks + Enable + 5 + 1 + + + SPI1EN + SPI1 Peripheral Clocks + Enable + 12 + 1 + + + SPI4EN + SPI4 Peripheral Clocks + Enable + 13 + 1 + + + TIM16EN + TIM16 peripheral clock + enable + 17 + 1 + + + TIM15EN + TIM15 peripheral clock + enable + 16 + 1 + + + TIM17EN + TIM17 peripheral clock + enable + 18 + 1 + + + SPI5EN + SPI5 Peripheral Clocks + Enable + 20 + 1 + + + SAI1EN + SAI1 Peripheral Clocks + Enable + 22 + 1 + + + SAI2EN + SAI2 Peripheral Clocks + Enable + 23 + 1 + + + SAI3EN + SAI3 Peripheral Clocks + Enable + 24 + 1 + + + DFSDM1EN + DFSDM1 Peripheral Clocks + Enable + 28 + 1 + + + HRTIMEN + HRTIM peripheral clock + enable + 29 + 1 + + + + + APB2ENR + APB2ENR + RCC APB2 Clock Register + 0xF0 + 0x20 + read-write + 0x00000000 + + + TIM1EN + TIM1 peripheral clock + enable + 0 + 1 + + + TIM8EN + TIM8 peripheral clock + enable + 1 + 1 + + + USART1EN + USART1 Peripheral Clocks + Enable + 4 + 1 + + + USART6EN + USART6 Peripheral Clocks + Enable + 5 + 1 + + + SPI1EN + SPI1 Peripheral Clocks + Enable + 12 + 1 + + + SPI4EN + SPI4 Peripheral Clocks + Enable + 13 + 1 + + + TIM16EN + TIM16 peripheral clock + enable + 17 + 1 + + + TIM15EN + TIM15 peripheral clock + enable + 16 + 1 + + + TIM17EN + TIM17 peripheral clock + enable + 18 + 1 + + + SPI5EN + SPI5 Peripheral Clocks + Enable + 20 + 1 + + + SAI1EN + SAI1 Peripheral Clocks + Enable + 22 + 1 + + + SAI2EN + SAI2 Peripheral Clocks + Enable + 23 + 1 + + + SAI3EN + SAI3 Peripheral Clocks + Enable + 24 + 1 + + + DFSDM1EN + DFSDM1 Peripheral Clocks + Enable + 28 + 1 + + + HRTIMEN + HRTIM peripheral clock + enable + 29 + 1 + + + + + APB4ENR + APB4ENR + RCC APB4 Clock Register + 0xF4 + 0x20 + read-write + 0x00000000 + + + SYSCFGEN + SYSCFG peripheral clock + enable + 1 + 1 + + + LPUART1EN + LPUART1 Peripheral Clocks + Enable + 3 + 1 + + + SPI6EN + SPI6 Peripheral Clocks + Enable + 5 + 1 + + + I2C4EN + I2C4 Peripheral Clocks + Enable + 7 + 1 + + + LPTIM2EN + LPTIM2 Peripheral Clocks + Enable + 9 + 1 + + + LPTIM3EN + LPTIM3 Peripheral Clocks + Enable + 10 + 1 + + + LPTIM4EN + LPTIM4 Peripheral Clocks + Enable + 11 + 1 + + + LPTIM5EN + LPTIM5 Peripheral Clocks + Enable + 12 + 1 + + + COMP12EN + COMP1/2 peripheral clock + enable + 14 + 1 + + + VREFEN + VREF peripheral clock + enable + 15 + 1 + + + RTCAPBEN + RTC APB Clock Enable + 16 + 1 + + + SAI4EN + SAI4 Peripheral Clocks + Enable + 21 + 1 + + + + + C1_APB4ENR + C1_APB4ENR + RCC APB4 Clock Register + 0x154 + 0x20 + read-write + 0x00000000 + + + SYSCFGEN + SYSCFG peripheral clock + enable + 1 + 1 + + + LPUART1EN + LPUART1 Peripheral Clocks + Enable + 3 + 1 + + + SPI6EN + SPI6 Peripheral Clocks + Enable + 5 + 1 + + + I2C4EN + I2C4 Peripheral Clocks + Enable + 7 + 1 + + + LPTIM2EN + LPTIM2 Peripheral Clocks + Enable + 9 + 1 + + + LPTIM3EN + LPTIM3 Peripheral Clocks + Enable + 10 + 1 + + + LPTIM4EN + LPTIM4 Peripheral Clocks + Enable + 11 + 1 + + + LPTIM5EN + LPTIM5 Peripheral Clocks + Enable + 12 + 1 + + + COMP12EN + COMP1/2 peripheral clock + enable + 14 + 1 + + + VREFEN + VREF peripheral clock + enable + 15 + 1 + + + RTCAPBEN + RTC APB Clock Enable + 16 + 1 + + + SAI4EN + SAI4 Peripheral Clocks + Enable + 21 + 1 + + + + + C1_AHB3LPENR + C1_AHB3LPENR + RCC AHB3 Sleep Clock Register + 0x15C + 0x20 + read-write + 0x00000000 + + + MDMALPEN + MDMA Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2DLPEN + DMA2D Clock Enable During CSleep + Mode + 4 + 1 + + + JPGDECLPEN + JPGDEC Clock Enable During CSleep + Mode + 5 + 1 + + + FLITFLPEN + FLITF Clock Enable During CSleep + Mode + 8 + 1 + + + FMCLPEN + FMC Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + QSPILPEN + QUADSPI and QUADSPI Delay Clock Enable + During CSleep Mode + 14 + 1 + + + SDMMC1LPEN + SDMMC1 and SDMMC1 Delay Clock Enable + During CSleep Mode + 16 + 1 + + + D1DTCM1LPEN + D1DTCM1 Block Clock Enable During CSleep + mode + 28 + 1 + + + DTCM2LPEN + D1 DTCM2 Block Clock Enable During + CSleep mode + 29 + 1 + + + ITCMLPEN + D1ITCM Block Clock Enable During CSleep + mode + 30 + 1 + + + AXISRAMLPEN + AXISRAM Block Clock Enable During CSleep + mode + 31 + 1 + + + + + AHB3LPENR + AHB3LPENR + RCC AHB3 Sleep Clock Register + 0xFC + 0x20 + read-write + 0x00000000 + + + MDMALPEN + MDMA Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2DLPEN + DMA2D Clock Enable During CSleep + Mode + 4 + 1 + + + JPGDECLPEN + JPGDEC Clock Enable During CSleep + Mode + 5 + 1 + + + FLITFLPEN + FLITF Clock Enable During CSleep + Mode + 8 + 1 + + + FMCLPEN + FMC Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + QSPILPEN + QUADSPI and QUADSPI Delay Clock Enable + During CSleep Mode + 14 + 1 + + + SDMMC1LPEN + SDMMC1 and SDMMC1 Delay Clock Enable + During CSleep Mode + 16 + 1 + + + D1DTCM1LPEN + D1DTCM1 Block Clock Enable During CSleep + mode + 28 + 1 + + + DTCM2LPEN + D1 DTCM2 Block Clock Enable During + CSleep mode + 29 + 1 + + + ITCMLPEN + D1ITCM Block Clock Enable During CSleep + mode + 30 + 1 + + + AXISRAMLPEN + AXISRAM Block Clock Enable During CSleep + mode + 31 + 1 + + + + + AHB1LPENR + AHB1LPENR + RCC AHB1 Sleep Clock Register + 0x100 + 0x20 + read-write + 0x00000000 + + + DMA1LPEN + DMA1 Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2LPEN + DMA2 Clock Enable During CSleep + Mode + 1 + 1 + + + ADC12LPEN + ADC1/2 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + ETH1MACLPEN + Ethernet MAC bus interface Clock Enable + During CSleep Mode + 15 + 1 + + + ETH1TXLPEN + Ethernet Transmission Clock Enable + During CSleep Mode + 16 + 1 + + + ETH1RXLPEN + Ethernet Reception Clock Enable During + CSleep Mode + 17 + 1 + + + USB1OTGLPEN + USB1OTG peripheral clock enable during + CSleep mode + 25 + 1 + + + USB1ULPILPEN + USB_PHY1 clock enable during CSleep + mode + 26 + 1 + + + USB2OTGLPEN + USB2OTG peripheral clock enable during + CSleep mode + 27 + 1 + + + USB2ULPILPEN + USB_PHY2 clocks enable during CSleep + mode + 28 + 1 + + + + + C1_AHB1LPENR + C1_AHB1LPENR + RCC AHB1 Sleep Clock Register + 0x160 + 0x20 + read-write + 0x00000000 + + + DMA1LPEN + DMA1 Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2LPEN + DMA2 Clock Enable During CSleep + Mode + 1 + 1 + + + ADC12LPEN + ADC1/2 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + ETH1MACLPEN + Ethernet MAC bus interface Clock Enable + During CSleep Mode + 15 + 1 + + + ETH1TXLPEN + Ethernet Transmission Clock Enable + During CSleep Mode + 16 + 1 + + + ETH1RXLPEN + Ethernet Reception Clock Enable During + CSleep Mode + 17 + 1 + + + USB1OTGLPEN + USB1OTG peripheral clock enable during + CSleep mode + 25 + 1 + + + USB1ULPILPEN + USB_PHY1 clock enable during CSleep + mode + 26 + 1 + + + USB2OTGLPEN + USB2OTG peripheral clock enable during + CSleep mode + 27 + 1 + + + USB2ULPILPEN + USB_PHY2 clocks enable during CSleep + mode + 28 + 1 + + + + + C1_AHB2LPENR + C1_AHB2LPENR + RCC AHB2 Sleep Clock Register + 0x164 + 0x20 + read-write + 0x00000000 + + + CAMITFLPEN + CAMITF peripheral clock enable during + CSleep mode + 0 + 1 + + + CRYPTLPEN + CRYPT peripheral clock enable during + CSleep mode + 4 + 1 + + + HASHLPEN + HASH peripheral clock enable during + CSleep mode + 5 + 1 + + + SDMMC2LPEN + SDMMC2 and SDMMC2 Delay Clock Enable + During CSleep Mode + 9 + 1 + + + RNGLPEN + RNG peripheral clock enable during + CSleep mode + 6 + 1 + + + SRAM1LPEN + SRAM1 Clock Enable During CSleep + Mode + 29 + 1 + + + SRAM2LPEN + SRAM2 Clock Enable During CSleep + Mode + 30 + 1 + + + SRAM3LPEN + SRAM3 Clock Enable During CSleep + Mode + 31 + 1 + + + + + AHB2LPENR + AHB2LPENR + RCC AHB2 Sleep Clock Register + 0x104 + 0x20 + read-write + 0x00000000 + + + CAMITFLPEN + CAMITF peripheral clock enable during + CSleep mode + 0 + 1 + + + CRYPTLPEN + CRYPT peripheral clock enable during + CSleep mode + 4 + 1 + + + HASHLPEN + HASH peripheral clock enable during + CSleep mode + 5 + 1 + + + SDMMC2LPEN + SDMMC2 and SDMMC2 Delay Clock Enable + During CSleep Mode + 9 + 1 + + + RNGLPEN + RNG peripheral clock enable during + CSleep mode + 6 + 1 + + + SRAM1LPEN + SRAM1 Clock Enable During CSleep + Mode + 29 + 1 + + + SRAM2LPEN + SRAM2 Clock Enable During CSleep + Mode + 30 + 1 + + + SRAM3LPEN + SRAM3 Clock Enable During CSleep + Mode + 31 + 1 + + + + + AHB4LPENR + AHB4LPENR + RCC AHB4 Sleep Clock Register + 0x108 + 0x20 + read-write + 0x00000000 + + + GPIOALPEN + GPIO peripheral clock enable during + CSleep mode + 0 + 1 + + + GPIOBLPEN + GPIO peripheral clock enable during + CSleep mode + 1 + 1 + + + GPIOCLPEN + GPIO peripheral clock enable during + CSleep mode + 2 + 1 + + + GPIODLPEN + GPIO peripheral clock enable during + CSleep mode + 3 + 1 + + + GPIOELPEN + GPIO peripheral clock enable during + CSleep mode + 4 + 1 + + + GPIOFLPEN + GPIO peripheral clock enable during + CSleep mode + 5 + 1 + + + GPIOGLPEN + GPIO peripheral clock enable during + CSleep mode + 6 + 1 + + + GPIOHLPEN + GPIO peripheral clock enable during + CSleep mode + 7 + 1 + + + GPIOILPEN + GPIO peripheral clock enable during + CSleep mode + 8 + 1 + + + GPIOJLPEN + GPIO peripheral clock enable during + CSleep mode + 9 + 1 + + + GPIOKLPEN + GPIO peripheral clock enable during + CSleep mode + 10 + 1 + + + CRCLPEN + CRC peripheral clock enable during + CSleep mode + 19 + 1 + + + BDMALPEN + BDMA Clock Enable During CSleep + Mode + 21 + 1 + + + ADC3LPEN + ADC3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + BKPRAMLPEN + Backup RAM Clock Enable During CSleep + Mode + 28 + 1 + + + SRAM4LPEN + SRAM4 Clock Enable During CSleep + Mode + 29 + 1 + + + + + C1_AHB4LPENR + C1_AHB4LPENR + RCC AHB4 Sleep Clock Register + 0x168 + 0x20 + read-write + 0x00000000 + + + GPIOALPEN + GPIO peripheral clock enable during + CSleep mode + 0 + 1 + + + GPIOBLPEN + GPIO peripheral clock enable during + CSleep mode + 1 + 1 + + + GPIOCLPEN + GPIO peripheral clock enable during + CSleep mode + 2 + 1 + + + GPIODLPEN + GPIO peripheral clock enable during + CSleep mode + 3 + 1 + + + GPIOELPEN + GPIO peripheral clock enable during + CSleep mode + 4 + 1 + + + GPIOFLPEN + GPIO peripheral clock enable during + CSleep mode + 5 + 1 + + + GPIOGLPEN + GPIO peripheral clock enable during + CSleep mode + 6 + 1 + + + GPIOHLPEN + GPIO peripheral clock enable during + CSleep mode + 7 + 1 + + + GPIOILPEN + GPIO peripheral clock enable during + CSleep mode + 8 + 1 + + + GPIOJLPEN + GPIO peripheral clock enable during + CSleep mode + 9 + 1 + + + GPIOKLPEN + GPIO peripheral clock enable during + CSleep mode + 10 + 1 + + + CRCLPEN + CRC peripheral clock enable during + CSleep mode + 19 + 1 + + + BDMALPEN + BDMA Clock Enable During CSleep + Mode + 21 + 1 + + + ADC3LPEN + ADC3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + BKPRAMLPEN + Backup RAM Clock Enable During CSleep + Mode + 28 + 1 + + + SRAM4LPEN + SRAM4 Clock Enable During CSleep + Mode + 29 + 1 + + + + + C1_APB3LPENR + C1_APB3LPENR + RCC APB3 Sleep Clock Register + 0x16C + 0x20 + read-write + 0x00000000 + + + LTDCLPEN + LTDC peripheral clock enable during + CSleep mode + 3 + 1 + + + WWDG1LPEN + WWDG1 Clock Enable During CSleep + Mode + 6 + 1 + + + + + APB3LPENR + APB3LPENR + RCC APB3 Sleep Clock Register + 0x10C + 0x20 + read-write + 0x00000000 + + + LTDCLPEN + LTDC peripheral clock enable during + CSleep mode + 3 + 1 + + + WWDG1LPEN + WWDG1 Clock Enable During CSleep + Mode + 6 + 1 + + + + + APB1LLPENR + APB1LLPENR + RCC APB1 Low Sleep Clock + Register + 0x110 + 0x20 + read-write + 0x00000000 + + + TIM2LPEN + TIM2 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM3LPEN + TIM3 peripheral clock enable during + CSleep mode + 1 + 1 + + + TIM4LPEN + TIM4 peripheral clock enable during + CSleep mode + 2 + 1 + + + TIM5LPEN + TIM5 peripheral clock enable during + CSleep mode + 3 + 1 + + + TIM6LPEN + TIM6 peripheral clock enable during + CSleep mode + 4 + 1 + + + TIM7LPEN + TIM7 peripheral clock enable during + CSleep mode + 5 + 1 + + + TIM12LPEN + TIM12 peripheral clock enable during + CSleep mode + 6 + 1 + + + TIM13LPEN + TIM13 peripheral clock enable during + CSleep mode + 7 + 1 + + + TIM14LPEN + TIM14 peripheral clock enable during + CSleep mode + 8 + 1 + + + LPTIM1LPEN + LPTIM1 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + SPI2LPEN + SPI2 Peripheral Clocks Enable During + CSleep Mode + 14 + 1 + + + SPI3LPEN + SPI3 Peripheral Clocks Enable During + CSleep Mode + 15 + 1 + + + SPDIFRXLPEN + SPDIFRX Peripheral Clocks Enable During + CSleep Mode + 16 + 1 + + + USART2LPEN + USART2 Peripheral Clocks Enable During + CSleep Mode + 17 + 1 + + + USART3LPEN + USART3 Peripheral Clocks Enable During + CSleep Mode + 18 + 1 + + + UART4LPEN + UART4 Peripheral Clocks Enable During + CSleep Mode + 19 + 1 + + + UART5LPEN + UART5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + I2C1LPEN + I2C1 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + I2C2LPEN + I2C2 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + I2C3LPEN + I2C3 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + HDMICECLPEN + HDMI-CEC Peripheral Clocks Enable During + CSleep Mode + 27 + 1 + + + DAC12LPEN + DAC1/2 peripheral clock enable during + CSleep mode + 29 + 1 + + + USART7LPEN + USART7 Peripheral Clocks Enable During + CSleep Mode + 30 + 1 + + + USART8LPEN + USART8 Peripheral Clocks Enable During + CSleep Mode + 31 + 1 + + + + + C1_APB1LLPENR + C1_APB1LLPENR + RCC APB1 Low Sleep Clock + Register + 0x170 + 0x20 + read-write + 0x00000000 + + + TIM2LPEN + TIM2 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM3LPEN + TIM3 peripheral clock enable during + CSleep mode + 1 + 1 + + + TIM4LPEN + TIM4 peripheral clock enable during + CSleep mode + 2 + 1 + + + TIM5LPEN + TIM5 peripheral clock enable during + CSleep mode + 3 + 1 + + + TIM6LPEN + TIM6 peripheral clock enable during + CSleep mode + 4 + 1 + + + TIM7LPEN + TIM7 peripheral clock enable during + CSleep mode + 5 + 1 + + + TIM12LPEN + TIM12 peripheral clock enable during + CSleep mode + 6 + 1 + + + TIM13LPEN + TIM13 peripheral clock enable during + CSleep mode + 7 + 1 + + + TIM14LPEN + TIM14 peripheral clock enable during + CSleep mode + 8 + 1 + + + LPTIM1LPEN + LPTIM1 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + SPI2LPEN + SPI2 Peripheral Clocks Enable During + CSleep Mode + 14 + 1 + + + SPI3LPEN + SPI3 Peripheral Clocks Enable During + CSleep Mode + 15 + 1 + + + SPDIFRXLPEN + SPDIFRX Peripheral Clocks Enable During + CSleep Mode + 16 + 1 + + + USART2LPEN + USART2 Peripheral Clocks Enable During + CSleep Mode + 17 + 1 + + + USART3LPEN + USART3 Peripheral Clocks Enable During + CSleep Mode + 18 + 1 + + + UART4LPEN + UART4 Peripheral Clocks Enable During + CSleep Mode + 19 + 1 + + + UART5LPEN + UART5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + I2C1LPEN + I2C1 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + I2C2LPEN + I2C2 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + I2C3LPEN + I2C3 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + HDMICECLPEN + HDMI-CEC Peripheral Clocks Enable During + CSleep Mode + 27 + 1 + + + DAC12LPEN + DAC1/2 peripheral clock enable during + CSleep mode + 29 + 1 + + + USART7LPEN + USART7 Peripheral Clocks Enable During + CSleep Mode + 30 + 1 + + + USART8LPEN + USART8 Peripheral Clocks Enable During + CSleep Mode + 31 + 1 + + + + + C1_APB1HLPENR + C1_APB1HLPENR + RCC APB1 High Sleep Clock + Register + 0x174 + 0x20 + read-write + 0x00000000 + + + CRSLPEN + Clock Recovery System peripheral clock + enable during CSleep mode + 1 + 1 + + + SWPLPEN + SWPMI Peripheral Clocks Enable During + CSleep Mode + 2 + 1 + + + OPAMPLPEN + OPAMP peripheral clock enable during + CSleep mode + 4 + 1 + + + MDIOSLPEN + MDIOS peripheral clock enable during + CSleep mode + 5 + 1 + + + FDCANLPEN + FDCAN Peripheral Clocks Enable During + CSleep Mode + 8 + 1 + + + + + APB1HLPENR + APB1HLPENR + RCC APB1 High Sleep Clock + Register + 0x114 + 0x20 + read-write + 0x00000000 + + + CRSLPEN + Clock Recovery System peripheral clock + enable during CSleep mode + 1 + 1 + + + SWPLPEN + SWPMI Peripheral Clocks Enable During + CSleep Mode + 2 + 1 + + + OPAMPLPEN + OPAMP peripheral clock enable during + CSleep mode + 4 + 1 + + + MDIOSLPEN + MDIOS peripheral clock enable during + CSleep mode + 5 + 1 + + + FDCANLPEN + FDCAN Peripheral Clocks Enable During + CSleep Mode + 8 + 1 + + + + + APB2LPENR + APB2LPENR + RCC APB2 Sleep Clock Register + 0x118 + 0x20 + read-write + 0x00000000 + + + TIM1LPEN + TIM1 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM8LPEN + TIM8 peripheral clock enable during + CSleep mode + 1 + 1 + + + USART1LPEN + USART1 Peripheral Clocks Enable During + CSleep Mode + 4 + 1 + + + USART6LPEN + USART6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + SPI1LPEN + SPI1 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + SPI4LPEN + SPI4 Peripheral Clocks Enable During + CSleep Mode + 13 + 1 + + + TIM15LPEN + TIM15 peripheral clock enable during + CSleep mode + 16 + 1 + + + TIM16LPEN + TIM16 peripheral clock enable during + CSleep mode + 17 + 1 + + + TIM17LPEN + TIM17 peripheral clock enable during + CSleep mode + 18 + 1 + + + SPI5LPEN + SPI5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + SAI1LPEN + SAI1 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + SAI2LPEN + SAI2 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + SAI3LPEN + SAI3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + DFSDM1LPEN + DFSDM1 Peripheral Clocks Enable During + CSleep Mode + 28 + 1 + + + HRTIMLPEN + HRTIM peripheral clock enable during + CSleep mode + 29 + 1 + + + + + C1_APB2LPENR + C1_APB2LPENR + RCC APB2 Sleep Clock Register + 0x178 + 0x20 + read-write + 0x00000000 + + + TIM1LPEN + TIM1 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM8LPEN + TIM8 peripheral clock enable during + CSleep mode + 1 + 1 + + + USART1LPEN + USART1 Peripheral Clocks Enable During + CSleep Mode + 4 + 1 + + + USART6LPEN + USART6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + SPI1LPEN + SPI1 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + SPI4LPEN + SPI4 Peripheral Clocks Enable During + CSleep Mode + 13 + 1 + + + TIM15LPEN + TIM15 peripheral clock enable during + CSleep mode + 16 + 1 + + + TIM16LPEN + TIM16 peripheral clock enable during + CSleep mode + 17 + 1 + + + TIM17LPEN + TIM17 peripheral clock enable during + CSleep mode + 18 + 1 + + + SPI5LPEN + SPI5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + SAI1LPEN + SAI1 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + SAI2LPEN + SAI2 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + SAI3LPEN + SAI3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + DFSDM1LPEN + DFSDM1 Peripheral Clocks Enable During + CSleep Mode + 28 + 1 + + + HRTIMLPEN + HRTIM peripheral clock enable during + CSleep mode + 29 + 1 + + + + + C1_APB4LPENR + C1_APB4LPENR + RCC APB4 Sleep Clock Register + 0x17C + 0x20 + read-write + 0x00000000 + + + SYSCFGLPEN + SYSCFG peripheral clock enable during + CSleep mode + 1 + 1 + + + LPUART1LPEN + LPUART1 Peripheral Clocks Enable During + CSleep Mode + 3 + 1 + + + SPI6LPEN + SPI6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + I2C4LPEN + I2C4 Peripheral Clocks Enable During + CSleep Mode + 7 + 1 + + + LPTIM2LPEN + LPTIM2 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + LPTIM3LPEN + LPTIM3 Peripheral Clocks Enable During + CSleep Mode + 10 + 1 + + + LPTIM4LPEN + LPTIM4 Peripheral Clocks Enable During + CSleep Mode + 11 + 1 + + + LPTIM5LPEN + LPTIM5 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + COMP12LPEN + COMP1/2 peripheral clock enable during + CSleep mode + 14 + 1 + + + VREFLPEN + VREF peripheral clock enable during + CSleep mode + 15 + 1 + + + RTCAPBLPEN + RTC APB Clock Enable During CSleep + Mode + 16 + 1 + + + SAI4LPEN + SAI4 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + + + APB4LPENR + APB4LPENR + RCC APB4 Sleep Clock Register + 0x11C + 0x20 + read-write + 0x00000000 + + + SYSCFGLPEN + SYSCFG peripheral clock enable during + CSleep mode + 1 + 1 + + + LPUART1LPEN + LPUART1 Peripheral Clocks Enable During + CSleep Mode + 3 + 1 + + + SPI6LPEN + SPI6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + I2C4LPEN + I2C4 Peripheral Clocks Enable During + CSleep Mode + 7 + 1 + + + LPTIM2LPEN + LPTIM2 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + LPTIM3LPEN + LPTIM3 Peripheral Clocks Enable During + CSleep Mode + 10 + 1 + + + LPTIM4LPEN + LPTIM4 Peripheral Clocks Enable During + CSleep Mode + 11 + 1 + + + LPTIM5LPEN + LPTIM5 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + COMP12LPEN + COMP1/2 peripheral clock enable during + CSleep mode + 14 + 1 + + + VREFLPEN + VREF peripheral clock enable during + CSleep mode + 15 + 1 + + + RTCAPBLPEN + RTC APB Clock Enable During CSleep + Mode + 16 + 1 + + + SAI4LPEN + SAI4 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + + + + + LPTIM1 + Low power timer + LPTIM + 0x40002400 + + 0x0 + 0x400 + registers + + + LPTIM1 + LPTIM1 global interrupt + 93 + + + + ISR + ISR + Interrupt and Status Register + 0x0 + 0x20 + read-only + 0x00000000 + + + DOWN + Counter direction change up to + down + 6 + 1 + + + UP + Counter direction change down to + up + 5 + 1 + + + ARROK + Autoreload register update + OK + 4 + 1 + + + CMPOK + Compare register update OK + 3 + 1 + + + EXTTRIG + External trigger edge + event + 2 + 1 + + + ARRM + Autoreload match + 1 + 1 + + + CMPM + Compare match + 0 + 1 + + + + + ICR + ICR + Interrupt Clear Register + 0x4 + 0x20 + write-only + 0x00000000 + + + DOWNCF + Direction change to down Clear + Flag + 6 + 1 + + + UPCF + Direction change to UP Clear + Flag + 5 + 1 + + + ARROKCF + Autoreload register update OK Clear + Flag + 4 + 1 + + + CMPOKCF + Compare register update OK Clear + Flag + 3 + 1 + + + EXTTRIGCF + External trigger valid edge Clear + Flag + 2 + 1 + + + ARRMCF + Autoreload match Clear + Flag + 1 + 1 + + + CMPMCF + compare match Clear Flag + 0 + 1 + + + + + IER + IER + Interrupt Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + DOWNIE + Direction change to down Interrupt + Enable + 6 + 1 + + + UPIE + Direction change to UP Interrupt + Enable + 5 + 1 + + + ARROKIE + Autoreload register update OK Interrupt + Enable + 4 + 1 + + + CMPOKIE + Compare register update OK Interrupt + Enable + 3 + 1 + + + EXTTRIGIE + External trigger valid edge Interrupt + Enable + 2 + 1 + + + ARRMIE + Autoreload match Interrupt + Enable + 1 + 1 + + + CMPMIE + Compare match Interrupt + Enable + 0 + 1 + + + + + CFGR + CFGR + Configuration Register + 0xC + 0x20 + read-write + 0x00000000 + + + ENC + Encoder mode enable + 24 + 1 + + + COUNTMODE + counter mode enabled + 23 + 1 + + + PRELOAD + Registers update mode + 22 + 1 + + + WAVPOL + Waveform shape polarity + 21 + 1 + + + WAVE + Waveform shape + 20 + 1 + + + TIMOUT + Timeout enable + 19 + 1 + + + TRIGEN + Trigger enable and + polarity + 17 + 2 + + + TRIGSEL + Trigger selector + 13 + 3 + + + PRESC + Clock prescaler + 9 + 3 + + + TRGFLT + Configurable digital filter for + trigger + 6 + 2 + + + CKFLT + Configurable digital filter for external + clock + 3 + 2 + + + CKPOL + Clock Polarity + 1 + 2 + + + CKSEL + Clock selector + 0 + 1 + + + + + CR + CR + Control Register + 0x10 + 0x20 + read-write + 0x00000000 + + + ENABLE + LPTIM Enable + 0 + 1 + + + SNGSTRT + LPTIM start in single mode + 1 + 1 + + + CNTSTRT + Timer start in continuous + mode + 2 + 1 + + + COUNTRST + Counter reset + 3 + 1 + + + RSTARE + Reset after read enable + 4 + 1 + + + + + CMP + CMP + Compare Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CMP + Compare value + 0 + 16 + + + + + ARR + ARR + Autoreload Register + 0x18 + 0x20 + read-write + 0x00000001 + + + ARR + Auto reload value + 0 + 16 + + + + + CNT + CNT + Counter Register + 0x1C + 0x20 + read-only + 0x00000000 + + + CNT + Counter value + 0 + 16 + + + + + CFGR2 + CFGR2 + LPTIM configuration register 2 + 0x24 + 0x20 + read-write + 0x00000000 + + + IN1SEL + LPTIM Input 1 selection + 0 + 2 + + + IN2SEL + LPTIM Input 2 selection + 4 + 2 + + + + + + + LPTIM2 + 0x58002400 + + LPTIM2 + LPTIM2 timer interrupt + 138 + + + + LPTIM3 + Low power timer + LPTIM + 0x58002800 + + 0x0 + 0x400 + registers + + + LPTIM3 + LPTIM2 timer interrupt + 139 + + + + ISR + ISR + Interrupt and Status Register + 0x0 + 0x20 + read-only + 0x00000000 + + + DOWN + Counter direction change up to + down + 6 + 1 + + + UP + Counter direction change down to + up + 5 + 1 + + + ARROK + Autoreload register update + OK + 4 + 1 + + + CMPOK + Compare register update OK + 3 + 1 + + + EXTTRIG + External trigger edge + event + 2 + 1 + + + ARRM + Autoreload match + 1 + 1 + + + CMPM + Compare match + 0 + 1 + + + + + ICR + ICR + Interrupt Clear Register + 0x4 + 0x20 + write-only + 0x00000000 + + + DOWNCF + Direction change to down Clear + Flag + 6 + 1 + + + UPCF + Direction change to UP Clear + Flag + 5 + 1 + + + ARROKCF + Autoreload register update OK Clear + Flag + 4 + 1 + + + CMPOKCF + Compare register update OK Clear + Flag + 3 + 1 + + + EXTTRIGCF + External trigger valid edge Clear + Flag + 2 + 1 + + + ARRMCF + Autoreload match Clear + Flag + 1 + 1 + + + CMPMCF + compare match Clear Flag + 0 + 1 + + + + + IER + IER + Interrupt Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + DOWNIE + Direction change to down Interrupt + Enable + 6 + 1 + + + UPIE + Direction change to UP Interrupt + Enable + 5 + 1 + + + ARROKIE + Autoreload register update OK Interrupt + Enable + 4 + 1 + + + CMPOKIE + Compare register update OK Interrupt + Enable + 3 + 1 + + + EXTTRIGIE + External trigger valid edge Interrupt + Enable + 2 + 1 + + + ARRMIE + Autoreload match Interrupt + Enable + 1 + 1 + + + CMPMIE + Compare match Interrupt + Enable + 0 + 1 + + + + + CFGR + CFGR + Configuration Register + 0xC + 0x20 + read-write + 0x00000000 + + + ENC + Encoder mode enable + 24 + 1 + + + COUNTMODE + counter mode enabled + 23 + 1 + + + PRELOAD + Registers update mode + 22 + 1 + + + WAVPOL + Waveform shape polarity + 21 + 1 + + + WAVE + Waveform shape + 20 + 1 + + + TIMOUT + Timeout enable + 19 + 1 + + + TRIGEN + Trigger enable and + polarity + 17 + 2 + + + TRIGSEL + Trigger selector + 13 + 3 + + + PRESC + Clock prescaler + 9 + 3 + + + TRGFLT + Configurable digital filter for + trigger + 6 + 2 + + + CKFLT + Configurable digital filter for external + clock + 3 + 2 + + + CKPOL + Clock Polarity + 1 + 2 + + + CKSEL + Clock selector + 0 + 1 + + + + + CR + CR + Control Register + 0x10 + 0x20 + read-write + 0x00000000 + + + ENABLE + LPTIM Enable + 0 + 1 + + + SNGSTRT + LPTIM start in single mode + 1 + 1 + + + CNTSTRT + Timer start in continuous + mode + 2 + 1 + + + COUNTRST + Counter reset + 3 + 1 + + + RSTARE + Reset after read enable + 4 + 1 + + + + + CMP + CMP + Compare Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CMP + Compare value + 0 + 16 + + + + + ARR + ARR + Autoreload Register + 0x18 + 0x20 + read-write + 0x00000001 + + + ARR + Auto reload value + 0 + 16 + + + + + CNT + CNT + Counter Register + 0x1C + 0x20 + read-only + 0x00000000 + + + CNT + Counter value + 0 + 16 + + + + + CFGR2 + CFGR2 + LPTIM configuration register 2 + 0x24 + 0x20 + read-write + 0x00000000 + + + IN1SEL + LPTIM Input 1 selection + 0 + 2 + + + + + + + LPTIM4 + 0x58002C00 + + LPTIM4 + LPTIM2 timer interrupt + 140 + + + + LPTIM5 + 0x58003000 + + LPTIM5 + LPTIM2 timer interrupt + 141 + + + + LPUART1 + LPUART1 + LPUART + 0x58000C00 + + 0x0 + 0x400 + registers + + + LPUART + LPUART global interrupt + 142 + + + + CR1 + CR1 + Control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + RXFFIE + RXFIFO Full interrupt + enable + 31 + 1 + + + TXFEIE + TXFIFO empty interrupt + enable + 30 + 1 + + + FIFOEN + FIFO mode enable + 29 + 1 + + + M1 + Word length + 28 + 1 + + + DEAT + Driver Enable assertion + time + 21 + 5 + + + DEDT + Driver Enable deassertion + time + 16 + 5 + + + CMIE + Character match interrupt + enable + 14 + 1 + + + MME + Mute mode enable + 13 + 1 + + + M0 + Word length + 12 + 1 + + + WAKE + Receiver wakeup method + 11 + 1 + + + PCE + Parity control enable + 10 + 1 + + + PS + Parity selection + 9 + 1 + + + PEIE + PE interrupt enable + 8 + 1 + + + TXEIE + interrupt enable + 7 + 1 + + + TCIE + Transmission complete interrupt + enable + 6 + 1 + + + RXNEIE + RXNE interrupt enable + 5 + 1 + + + IDLEIE + IDLE interrupt enable + 4 + 1 + + + TE + Transmitter enable + 3 + 1 + + + RE + Receiver enable + 2 + 1 + + + UESM + USART enable in Stop mode + 1 + 1 + + + UE + USART enable + 0 + 1 + + + + + CR2 + CR2 + Control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + ADD + Address of the USART node + 24 + 8 + + + MSBFIRST + Most significant bit first + 19 + 1 + + + DATAINV + Binary data inversion + 18 + 1 + + + TXINV + TX pin active level + inversion + 17 + 1 + + + RXINV + RX pin active level + inversion + 16 + 1 + + + SWAP + Swap TX/RX pins + 15 + 1 + + + STOP + STOP bits + 12 + 2 + + + ADDM7 + 7-bit Address Detection/4-bit Address + Detection + 4 + 1 + + + + + CR3 + CR3 + Control register 3 + 0x8 + 0x20 + read-write + 0x0000 + + + TXFTCFG + TXFIFO threshold + configuration + 29 + 3 + + + RXFTIE + RXFIFO threshold interrupt + enable + 28 + 1 + + + RXFTCFG + Receive FIFO threshold + configuration + 25 + 3 + + + TXFTIE + TXFIFO threshold interrupt + enable + 23 + 1 + + + WUFIE + Wakeup from Stop mode interrupt + enable + 22 + 1 + + + WUS + Wakeup from Stop mode interrupt flag + selection + 20 + 2 + + + DEP + Driver enable polarity + selection + 15 + 1 + + + DEM + Driver enable mode + 14 + 1 + + + DDRE + DMA Disable on Reception + Error + 13 + 1 + + + OVRDIS + Overrun Disable + 12 + 1 + + + CTSIE + CTS interrupt enable + 10 + 1 + + + CTSE + CTS enable + 9 + 1 + + + RTSE + RTS enable + 8 + 1 + + + DMAT + DMA enable transmitter + 7 + 1 + + + DMAR + DMA enable receiver + 6 + 1 + + + HDSEL + Half-duplex selection + 3 + 1 + + + EIE + Error interrupt enable + 0 + 1 + + + + + BRR + BRR + Baud rate register + 0xC + 0x20 + read-write + 0x0000 + + + BRR + BRR + 0 + 20 + + + + + GTPR + GTPR + Guard time and prescaler + register + 0x10 + 0x20 + read-write + 0x0000 + + + GT + Guard time value + 8 + 8 + + + PSC + Prescaler value + 0 + 8 + + + + + RTOR + RTOR + Receiver timeout register + 0x14 + 0x20 + read-write + 0x0000 + + + BLEN + Block Length + 24 + 8 + + + RTO + Receiver timeout value + 0 + 24 + + + + + RQR + RQR + Request register + 0x18 + 0x20 + write-only + 0x0000 + + + TXFRQ + Transmit data flush + request + 4 + 1 + + + RXFRQ + Receive data flush request + 3 + 1 + + + MMRQ + Mute mode request + 2 + 1 + + + SBKRQ + Send break request + 1 + 1 + + + ABRRQ + Auto baud rate request + 0 + 1 + + + + + ISR + ISR + Interrupt & status + register + 0x1C + 0x20 + read-only + 0x00C0 + + + TXFT + TXFIFO threshold flag + 27 + 1 + + + RXFT + RXFIFO threshold flag + 26 + 1 + + + RXFF + RXFIFO Full + 24 + 1 + + + TXFE + TXFIFO Empty + 23 + 1 + + + REACK + REACK + 22 + 1 + + + TEACK + TEACK + 21 + 1 + + + WUF + WUF + 20 + 1 + + + RWU + RWU + 19 + 1 + + + SBKF + SBKF + 18 + 1 + + + CMF + CMF + 17 + 1 + + + BUSY + BUSY + 16 + 1 + + + CTS + CTS + 10 + 1 + + + CTSIF + CTSIF + 9 + 1 + + + TXE + TXE + 7 + 1 + + + TC + TC + 6 + 1 + + + RXNE + RXNE + 5 + 1 + + + IDLE + IDLE + 4 + 1 + + + ORE + ORE + 3 + 1 + + + NE + NE + 2 + 1 + + + FE + FE + 1 + 1 + + + PE + PE + 0 + 1 + + + + + ICR + ICR + Interrupt flag clear register + 0x20 + 0x20 + write-only + 0x0000 + + + WUCF + Wakeup from Stop mode clear + flag + 20 + 1 + + + CMCF + Character match clear flag + 17 + 1 + + + CTSCF + CTS clear flag + 9 + 1 + + + TCCF + Transmission complete clear + flag + 6 + 1 + + + IDLECF + Idle line detected clear + flag + 4 + 1 + + + ORECF + Overrun error clear flag + 3 + 1 + + + NCF + Noise detected clear flag + 2 + 1 + + + FECF + Framing error clear flag + 1 + 1 + + + PECF + Parity error clear flag + 0 + 1 + + + + + RDR + RDR + Receive data register + 0x24 + 0x20 + read-only + 0x0000 + + + RDR + Receive data value + 0 + 9 + + + + + TDR + TDR + Transmit data register + 0x28 + 0x20 + read-write + 0x0000 + + + TDR + Transmit data value + 0 + 9 + + + + + PRESC + PRESC + Prescaler register + 0x2C + 0x20 + read-write + 0x0000 + + + PRESCALER + Clock prescaler + 0 + 4 + + + + + + + SYSCFG + System configuration controller + SYSCFG + 0x58000400 + + 0x0 + 0x400 + registers + + + + PMCR + PMCR + peripheral mode configuration + register + 0x4 + 0x20 + read-write + 0x00000000 + + + I2C1FMP + I2C1 Fm+ + 0 + 1 + + + I2C2FMP + I2C2 Fm+ + 1 + 1 + + + I2C3FMP + I2C3 Fm+ + 2 + 1 + + + I2C4FMP + I2C4 Fm+ + 3 + 1 + + + PB6FMP + PB(6) Fm+ + 4 + 1 + + + PB7FMP + PB(7) Fast Mode Plus + 5 + 1 + + + PB8FMP + PB(8) Fast Mode Plus + 6 + 1 + + + PB9FMP + PB(9) Fm+ + 7 + 1 + + + BOOSTE + Booster Enable + 8 + 1 + + + EPIS + Ethernet PHY Interface + Selection + 21 + 3 + + + PA0SO + PA0 Switch Open + 24 + 1 + + + PA1SO + PA1 Switch Open + 25 + 1 + + + PC2SO + PC2 Switch Open + 26 + 1 + + + PC3SO + PC3 Switch Open + 27 + 1 + + + + + EXTICR1 + EXTICR1 + external interrupt configuration register + 1 + 0x8 + 0x20 + read-write + 0x0000 + + + EXTI3 + EXTI x configuration (x = 0 to + 3) + 12 + 4 + + + EXTI2 + EXTI x configuration (x = 0 to + 3) + 8 + 4 + + + EXTI1 + EXTI x configuration (x = 0 to + 3) + 4 + 4 + + + EXTI0 + EXTI x configuration (x = 0 to + 3) + 0 + 4 + + + + + EXTICR2 + EXTICR2 + external interrupt configuration register + 2 + 0xC + 0x20 + read-write + 0x0000 + + + EXTI7 + EXTI x configuration (x = 4 to + 7) + 12 + 4 + + + EXTI6 + EXTI x configuration (x = 4 to + 7) + 8 + 4 + + + EXTI5 + EXTI x configuration (x = 4 to + 7) + 4 + 4 + + + EXTI4 + EXTI x configuration (x = 4 to + 7) + 0 + 4 + + + + + EXTICR3 + EXTICR3 + external interrupt configuration register + 3 + 0x10 + 0x20 + read-write + 0x0000 + + + EXTI11 + EXTI x configuration (x = 8 to + 11) + 12 + 4 + + + EXTI10 + EXTI10 + 8 + 4 + + + EXTI9 + EXTI x configuration (x = 8 to + 11) + 4 + 4 + + + EXTI8 + EXTI x configuration (x = 8 to + 11) + 0 + 4 + + + + + EXTICR4 + EXTICR4 + external interrupt configuration register + 4 + 0x14 + 0x20 + read-write + 0x0000 + + + EXTI15 + EXTI x configuration (x = 12 to + 15) + 12 + 4 + + + EXTI14 + EXTI x configuration (x = 12 to + 15) + 8 + 4 + + + EXTI13 + EXTI x configuration (x = 12 to + 15) + 4 + 4 + + + EXTI12 + EXTI x configuration (x = 12 to + 15) + 0 + 4 + + + + + CCCSR + CCCSR + compensation cell control/status + register + 0x20 + 0x20 + read-write + 0x00000000 + + + EN + enable + 0 + 1 + + + CS + Code selection + 1 + 1 + + + READY + Compensation cell ready + flag + 8 + 1 + + + HSLV + High-speed at low-voltage + 16 + 1 + + + + + CCVR + CCVR + SYSCFG compensation cell value + register + 0x24 + 0x20 + read-only + 0x00000000 + + + NCV + NMOS compensation value + 0 + 4 + + + PCV + PMOS compensation value + 4 + 4 + + + + + CCCR + CCCR + SYSCFG compensation cell code + register + 0x28 + 0x20 + read-write + 0x00000000 + + + NCC + NMOS compensation code + 0 + 4 + + + PCC + PMOS compensation code + 4 + 4 + + + + + PKGR + PKGR + SYSCFG package register + 0x124 + 0x20 + read-only + 0x00000000 + + + PKG + Package + 0 + 4 + + + + + UR0 + UR0 + SYSCFG user register 0 + 0x300 + 0x20 + read-only + 0x00000000 + + + BKS + Bank Swap + 0 + 1 + + + RDP + Readout protection + 16 + 8 + + + + + UR2 + UR2 + SYSCFG user register 2 + 0x308 + 0x20 + read-write + 0x00000000 + + + BORH + BOR_LVL Brownout Reset Threshold + Level + 0 + 2 + + + BOOT_ADD0 + Boot Address 0 + 16 + 16 + + + + + UR3 + UR3 + SYSCFG user register 3 + 0x30C + 0x20 + read-write + 0x00000000 + + + BOOT_ADD1 + Boot Address 1 + 16 + 16 + + + + + UR4 + UR4 + SYSCFG user register 4 + 0x310 + 0x20 + read-only + 0x00000000 + + + MEPAD_1 + Mass Erase Protected Area Disabled for + bank 1 + 16 + 1 + + + + + UR5 + UR5 + SYSCFG user register 5 + 0x314 + 0x20 + read-only + 0x00000000 + + + MESAD_1 + Mass erase secured area disabled for + bank 1 + 0 + 1 + + + WRPN_1 + Write protection for flash bank + 1 + 16 + 8 + + + + + UR6 + UR6 + SYSCFG user register 6 + 0x318 + 0x20 + read-only + 0x00000000 + + + PA_BEG_1 + Protected area start address for bank + 1 + 0 + 12 + + + PA_END_1 + Protected area end address for bank + 1 + 16 + 12 + + + + + UR7 + UR7 + SYSCFG user register 7 + 0x31C + 0x20 + read-only + 0x00000000 + + + SA_BEG_1 + Secured area start address for bank + 1 + 0 + 12 + + + SA_END_1 + Secured area end address for bank + 1 + 16 + 12 + + + + + UR8 + UR8 + SYSCFG user register 8 + 0x320 + 0x20 + read-only + 0x00000000 + + + MEPAD_2 + Mass erase protected area disabled for + bank 2 + 0 + 1 + + + MESAD_2 + Mass erase secured area disabled for + bank 2 + 16 + 1 + + + + + UR9 + UR9 + SYSCFG user register 9 + 0x324 + 0x20 + read-only + 0x00000000 + + + WRPN_2 + Write protection for flash bank + 2 + 0 + 8 + + + PA_BEG_2 + Protected area start address for bank + 2 + 16 + 12 + + + + + UR10 + UR10 + SYSCFG user register 10 + 0x328 + 0x20 + read-only + 0x00000000 + + + PA_END_2 + Protected area end address for bank + 2 + 0 + 12 + + + SA_BEG_2 + Secured area start address for bank + 2 + 16 + 12 + + + + + UR11 + UR11 + SYSCFG user register 11 + 0x32C + 0x20 + read-only + 0x00000000 + + + SA_END_2 + Secured area end address for bank + 2 + 0 + 12 + + + IWDG1M + Independent Watchdog 1 + mode + 16 + 1 + + + + + UR12 + UR12 + SYSCFG user register 12 + 0x330 + 0x20 + read-only + 0x00000000 + + + SECURE + Secure mode + 16 + 1 + + + + + UR13 + UR13 + SYSCFG user register 13 + 0x334 + 0x20 + read-only + 0x00000000 + + + SDRS + Secured DTCM RAM Size + 0 + 2 + + + D1SBRST + D1 Standby reset + 16 + 1 + + + + + UR14 + UR14 + SYSCFG user register 14 + 0x338 + 0x20 + read-write + 0x00000000 + + + D1STPRST + D1 Stop Reset + 0 + 1 + + + + + UR15 + UR15 + SYSCFG user register 15 + 0x33C + 0x20 + read-only + 0x00000000 + + + FZIWDGSTB + Freeze independent watchdog in Standby + mode + 16 + 1 + + + + + UR16 + UR16 + SYSCFG user register 16 + 0x340 + 0x20 + read-only + 0x00000000 + + + FZIWDGSTP + Freeze independent watchdog in Stop + mode + 0 + 1 + + + PKP + Private key programmed + 16 + 1 + + + + + UR17 + UR17 + SYSCFG user register 17 + 0x344 + 0x20 + read-only + 0x00000000 + + + IO_HSLV + I/O high speed / low + voltage + 0 + 1 + + + + + + + EXTI + External interrupt/event + controller + EXTI + 0x58000000 + + 0x0 + 0x400 + registers + + + PVD_PVM + PVD through EXTI line + 1 + + + EXTI0 + EXTI Line 0 interrupt + 6 + + + EXTI1 + EXTI Line 1 interrupt + 7 + + + EXTI2 + EXTI Line 2 interrupt + 8 + + + EXTI3 + EXTI Line 3interrupt + 9 + + + EXTI4 + EXTI Line 4interrupt + 10 + + + EXTI9_5 + EXTI Line[9:5] interrupts + 23 + + + EXTI15_10 + EXTI Line[15:10] interrupts + 40 + + + cm7_sev_it + Arm® + Cortex®-M7 Send + 64 + + + WKUP + WKUP1 to WKUP6 pins + 149 + + + HOLD_CORE + CPU2 hold + 148 + + + + RTSR1 + RTSR1 + EXTI rising trigger selection + register + 0x0 + 0x20 + read-write + 0x00000000 + + + TR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + TR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + TR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + TR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + TR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + TR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + TR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + TR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + TR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + TR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + TR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + TR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + TR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + TR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + TR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + TR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + TR16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + TR17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + TR18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + TR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + TR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + TR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + + + FTSR1 + FTSR1 + EXTI falling trigger selection + register + 0x4 + 0x20 + read-write + 0x00000000 + + + TR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + TR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + TR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + TR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + TR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + TR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + TR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + TR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + TR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + TR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + TR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + TR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + TR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + TR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + TR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + TR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + TR16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + TR17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + TR18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + TR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + TR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + TR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + + + SWIER1 + SWIER1 + EXTI software interrupt event + register + 0x8 + 0x20 + read-write + 0x00000000 + + + SWIER0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + SWIER1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + SWIER2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + SWIER3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + SWIER4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + SWIER5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + SWIER6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + SWIER7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + SWIER8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + SWIER9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + SWIER10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + SWIER11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + SWIER12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + SWIER13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + SWIER14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + SWIER15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + SWIER16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + SWIER17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + SWIER18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + SWIER19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + SWIER20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + SWIER21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + + + D3PMR1 + D3PMR1 + EXTI D3 pending mask register + 0xC + 0x20 + read-write + 0x00000000 + + + MR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + MR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + MR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + MR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + MR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + MR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + MR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + MR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + MR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + MR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + MR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + MR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + MR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + MR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + MR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + MR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + MR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + MR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + MR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + MR25 + Rising trigger event configuration bit + of Configurable Event input + 25 + 1 + + + + + D3PCR1L + D3PCR1L + EXTI D3 pending clear selection register + low + 0x10 + 0x20 + read-write + 0x00000000 + + + PCS0 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 0 + 2 + + + PCS1 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 2 + 2 + + + PCS2 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 4 + 2 + + + PCS3 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 6 + 2 + + + PCS4 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 8 + 2 + + + PCS5 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 10 + 2 + + + PCS6 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 12 + 2 + + + PCS7 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 14 + 2 + + + PCS8 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 16 + 2 + + + PCS9 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 18 + 2 + + + PCS10 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 20 + 2 + + + PCS11 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 22 + 2 + + + PCS12 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 24 + 2 + + + PCS13 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 26 + 2 + + + PCS14 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 28 + 2 + + + PCS15 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 30 + 2 + + + + + D3PCR1H + D3PCR1H + EXTI D3 pending clear selection register + high + 0x14 + 0x20 + read-write + 0x00000000 + + + PCS19 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 6 + 2 + + + PCS20 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 8 + 2 + + + PCS21 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 10 + 2 + + + PCS25 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 18 + 2 + + + + + RTSR2 + RTSR2 + EXTI rising trigger selection + register + 0x20 + 0x20 + read-write + 0x00000000 + + + TR49 + Rising trigger event configuration bit + of Configurable Event input x+32 + 17 + 1 + + + TR51 + Rising trigger event configuration bit + of Configurable Event input x+32 + 19 + 1 + + + + + FTSR2 + FTSR2 + EXTI falling trigger selection + register + 0x24 + 0x20 + read-write + 0x00000000 + + + TR49 + Falling trigger event configuration bit + of Configurable Event input x+32 + 17 + 1 + + + TR51 + Falling trigger event configuration bit + of Configurable Event input x+32 + 19 + 1 + + + + + SWIER2 + SWIER2 + EXTI software interrupt event + register + 0x28 + 0x20 + read-write + 0x00000000 + + + SWIER49 + Software interrupt on line + x+32 + 17 + 1 + + + SWIER51 + Software interrupt on line + x+32 + 19 + 1 + + + + + D3PMR2 + D3PMR2 + EXTI D3 pending mask register + 0x2C + 0x20 + read-write + 0x00000000 + + + MR34 + D3 Pending Mask on Event input + x+32 + 2 + 1 + + + MR35 + D3 Pending Mask on Event input + x+32 + 3 + 1 + + + MR41 + D3 Pending Mask on Event input + x+32 + 9 + 1 + + + MR48 + D3 Pending Mask on Event input + x+32 + 16 + 1 + + + MR49 + D3 Pending Mask on Event input + x+32 + 17 + 1 + + + MR50 + D3 Pending Mask on Event input + x+32 + 18 + 1 + + + MR51 + D3 Pending Mask on Event input + x+32 + 19 + 1 + + + MR52 + D3 Pending Mask on Event input + x+32 + 20 + 1 + + + MR53 + D3 Pending Mask on Event input + x+32 + 21 + 1 + + + + + D3PCR2L + D3PCR2L + EXTI D3 pending clear selection register + low + 0x30 + 0x20 + read-write + 0x00000000 + + + PCS35 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+64)/2) + 6 + 2 + + + PCS34 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+64)/2) + 4 + 2 + + + PCS41 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+64)/2) + 18 + 2 + + + + + D3PCR2H + D3PCR2H + EXTI D3 pending clear selection register + high + 0x34 + 0x20 + read-write + 0x00000000 + + + PCS48 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 0 + 2 + + + PCS49 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 2 + 2 + + + PCS50 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 4 + 2 + + + PCS51 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 6 + 2 + + + PCS52 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 8 + 2 + + + PCS53 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 10 + 2 + + + + + RTSR3 + RTSR3 + EXTI rising trigger selection + register + 0x40 + 0x20 + read-write + 0x00000000 + + + TR82 + Rising trigger event configuration bit + of Configurable Event input x+64 + 18 + 1 + + + TR84 + Rising trigger event configuration bit + of Configurable Event input x+64 + 20 + 1 + + + TR85 + Rising trigger event configuration bit + of Configurable Event input x+64 + 21 + 1 + + + TR86 + Rising trigger event configuration bit + of Configurable Event input x+64 + 22 + 1 + + + + + FTSR3 + FTSR3 + EXTI falling trigger selection + register + 0x44 + 0x20 + read-write + 0x00000000 + + + TR82 + Falling trigger event configuration bit + of Configurable Event input x+64 + 18 + 1 + + + TR84 + Falling trigger event configuration bit + of Configurable Event input x+64 + 20 + 1 + + + TR85 + Falling trigger event configuration bit + of Configurable Event input x+64 + 21 + 1 + + + TR86 + Falling trigger event configuration bit + of Configurable Event input x+64 + 22 + 1 + + + + + SWIER3 + SWIER3 + EXTI software interrupt event + register + 0x48 + 0x20 + read-write + 0x00000000 + + + SWIER82 + Software interrupt on line + x+64 + 18 + 1 + + + SWIER84 + Software interrupt on line + x+64 + 20 + 1 + + + SWIER85 + Software interrupt on line + x+64 + 21 + 1 + + + SWIER86 + Software interrupt on line + x+64 + 22 + 1 + + + + + D3PMR3 + D3PMR3 + EXTI D3 pending mask register + 0x4C + 0x20 + read-write + 0x00000000 + + + MR88 + D3 Pending Mask on Event input + x+64 + 24 + 1 + + + + + D3PCR3H + D3PCR3H + EXTI D3 pending clear selection register + high + 0x54 + 0x20 + read-write + 0x00000000 + + + PCS88 + D3 Pending request clear input signal + selection on Event input x= truncate + N+160/2 + 18 + 2 + + + + + CPUIMR1 + CPUIMR1 + EXTI interrupt mask register + 0x80 + 0x20 + read-write + 0xFFC00000 + + + MR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + MR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + MR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + MR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + MR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + MR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + MR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + MR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + MR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + MR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + MR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + MR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + MR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + MR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + MR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + MR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + MR16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + MR17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + MR18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + MR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + MR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + MR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + MR22 + Rising trigger event configuration bit + of Configurable Event input + 22 + 1 + + + MR23 + Rising trigger event configuration bit + of Configurable Event input + 23 + 1 + + + MR24 + Rising trigger event configuration bit + of Configurable Event input + 24 + 1 + + + MR25 + Rising trigger event configuration bit + of Configurable Event input + 25 + 1 + + + MR26 + Rising trigger event configuration bit + of Configurable Event input + 26 + 1 + + + MR27 + Rising trigger event configuration bit + of Configurable Event input + 27 + 1 + + + MR28 + Rising trigger event configuration bit + of Configurable Event input + 28 + 1 + + + MR29 + Rising trigger event configuration bit + of Configurable Event input + 29 + 1 + + + MR30 + Rising trigger event configuration bit + of Configurable Event input + 30 + 1 + + + MR31 + Rising trigger event configuration bit + of Configurable Event input + 31 + 1 + + + + + CPUEMR1 + CPUEMR1 + EXTI event mask register + 0x84 + 0x20 + read-write + 0x00000000 + + + MR0 + CPU Event mask on Event input + x + 0 + 1 + + + MR1 + CPU Event mask on Event input + x + 1 + 1 + + + MR2 + CPU Event mask on Event input + x + 2 + 1 + + + MR3 + CPU Event mask on Event input + x + 3 + 1 + + + MR4 + CPU Event mask on Event input + x + 4 + 1 + + + MR5 + CPU Event mask on Event input + x + 5 + 1 + + + MR6 + CPU Event mask on Event input + x + 6 + 1 + + + MR7 + CPU Event mask on Event input + x + 7 + 1 + + + MR8 + CPU Event mask on Event input + x + 8 + 1 + + + MR9 + CPU Event mask on Event input + x + 9 + 1 + + + MR10 + CPU Event mask on Event input + x + 10 + 1 + + + MR11 + CPU Event mask on Event input + x + 11 + 1 + + + MR12 + CPU Event mask on Event input + x + 12 + 1 + + + MR13 + CPU Event mask on Event input + x + 13 + 1 + + + MR14 + CPU Event mask on Event input + x + 14 + 1 + + + MR15 + CPU Event mask on Event input + x + 15 + 1 + + + MR16 + CPU Event mask on Event input + x + 16 + 1 + + + MR17 + CPU Event mask on Event input + x + 17 + 1 + + + MR18 + CPU Event mask on Event input + x + 18 + 1 + + + MR19 + CPU Event mask on Event input + x + 19 + 1 + + + MR20 + CPU Event mask on Event input + x + 20 + 1 + + + MR21 + CPU Event mask on Event input + x + 21 + 1 + + + MR22 + CPU Event mask on Event input + x + 22 + 1 + + + MR23 + CPU Event mask on Event input + x + 23 + 1 + + + MR24 + CPU Event mask on Event input + x + 24 + 1 + + + MR25 + CPU Event mask on Event input + x + 25 + 1 + + + MR26 + CPU Event mask on Event input + x + 26 + 1 + + + MR27 + CPU Event mask on Event input + x + 27 + 1 + + + MR28 + CPU Event mask on Event input + x + 28 + 1 + + + MR29 + CPU Event mask on Event input + x + 29 + 1 + + + MR30 + CPU Event mask on Event input + x + 30 + 1 + + + MR31 + CPU Event mask on Event input + x + 31 + 1 + + + + + CPUPR1 + CPUPR1 + EXTI pending register + 0x88 + 0x20 + read-write + 0x00000000 + + + PR0 + CPU Event mask on Event input + x + 0 + 1 + + + PR1 + CPU Event mask on Event input + x + 1 + 1 + + + PR2 + CPU Event mask on Event input + x + 2 + 1 + + + PR3 + CPU Event mask on Event input + x + 3 + 1 + + + PR4 + CPU Event mask on Event input + x + 4 + 1 + + + PR5 + CPU Event mask on Event input + x + 5 + 1 + + + PR6 + CPU Event mask on Event input + x + 6 + 1 + + + PR7 + CPU Event mask on Event input + x + 7 + 1 + + + PR8 + CPU Event mask on Event input + x + 8 + 1 + + + PR9 + CPU Event mask on Event input + x + 9 + 1 + + + PR10 + CPU Event mask on Event input + x + 10 + 1 + + + PR11 + CPU Event mask on Event input + x + 11 + 1 + + + PR12 + CPU Event mask on Event input + x + 12 + 1 + + + PR13 + CPU Event mask on Event input + x + 13 + 1 + + + PR14 + CPU Event mask on Event input + x + 14 + 1 + + + PR15 + CPU Event mask on Event input + x + 15 + 1 + + + PR16 + CPU Event mask on Event input + x + 16 + 1 + + + PR17 + CPU Event mask on Event input + x + 17 + 1 + + + PR18 + CPU Event mask on Event input + x + 18 + 1 + + + PR19 + CPU Event mask on Event input + x + 19 + 1 + + + PR20 + CPU Event mask on Event input + x + 20 + 1 + + + PR21 + CPU Event mask on Event input + x + 21 + 1 + + + + + CPUIMR2 + CPUIMR2 + EXTI interrupt mask register + 0x90 + 0x20 + read-write + 0x00000000 + + + MR0 + CPU Interrupt Mask on Direct Event input + x+32 + 0 + 1 + + + MR1 + CPU Interrupt Mask on Direct Event input + x+32 + 1 + 1 + + + MR2 + CPU Interrupt Mask on Direct Event input + x+32 + 2 + 1 + + + MR3 + CPU Interrupt Mask on Direct Event input + x+32 + 3 + 1 + + + MR4 + CPU Interrupt Mask on Direct Event input + x+32 + 4 + 1 + + + MR5 + CPU Interrupt Mask on Direct Event input + x+32 + 5 + 1 + + + MR6 + CPU Interrupt Mask on Direct Event input + x+32 + 6 + 1 + + + MR7 + CPU Interrupt Mask on Direct Event input + x+32 + 7 + 1 + + + MR8 + CPU Interrupt Mask on Direct Event input + x+32 + 8 + 1 + + + MR9 + CPU Interrupt Mask on Direct Event input + x+32 + 9 + 1 + + + MR10 + CPU Interrupt Mask on Direct Event input + x+32 + 10 + 1 + + + MR11 + CPU Interrupt Mask on Direct Event input + x+32 + 11 + 1 + + + MR12 + CPU Interrupt Mask on Direct Event input + x+32 + 12 + 1 + + + MR14 + CPU Interrupt Mask on Direct Event input + x+32 + 14 + 1 + + + MR15 + CPU Interrupt Mask on Direct Event input + x+32 + 15 + 1 + + + MR16 + CPU Interrupt Mask on Direct Event input + x+32 + 16 + 1 + + + MR17 + CPU Interrupt Mask on Direct Event input + x+32 + 17 + 1 + + + MR18 + CPU Interrupt Mask on Direct Event input + x+32 + 18 + 1 + + + MR19 + CPU Interrupt Mask on Direct Event input + x+32 + 19 + 1 + + + MR20 + CPU Interrupt Mask on Direct Event input + x+32 + 20 + 1 + + + MR21 + CPU Interrupt Mask on Direct Event input + x+32 + 21 + 1 + + + MR22 + CPU Interrupt Mask on Direct Event input + x+32 + 22 + 1 + + + MR23 + CPU Interrupt Mask on Direct Event input + x+32 + 23 + 1 + + + MR24 + CPU Interrupt Mask on Direct Event input + x+32 + 24 + 1 + + + MR25 + CPU Interrupt Mask on Direct Event input + x+32 + 25 + 1 + + + MR26 + CPU Interrupt Mask on Direct Event input + x+32 + 26 + 1 + + + MR27 + CPU Interrupt Mask on Direct Event input + x+32 + 27 + 1 + + + MR28 + CPU Interrupt Mask on Direct Event input + x+32 + 28 + 1 + + + MR29 + CPU Interrupt Mask on Direct Event input + x+32 + 29 + 1 + + + MR30 + CPU Interrupt Mask on Direct Event input + x+32 + 30 + 1 + + + MR31 + CPU Interrupt Mask on Direct Event input + x+32 + 31 + 1 + + + + + CPUEMR2 + CPUEMR2 + EXTI event mask register + 0x94 + 0x20 + read-write + 0x00000000 + + + MR32 + CPU Interrupt Mask on Direct Event input + x+32 + 0 + 1 + + + MR33 + CPU Interrupt Mask on Direct Event input + x+32 + 1 + 1 + + + MR34 + CPU Interrupt Mask on Direct Event input + x+32 + 2 + 1 + + + MR35 + CPU Interrupt Mask on Direct Event input + x+32 + 3 + 1 + + + MR36 + CPU Interrupt Mask on Direct Event input + x+32 + 4 + 1 + + + MR37 + CPU Interrupt Mask on Direct Event input + x+32 + 5 + 1 + + + MR38 + CPU Interrupt Mask on Direct Event input + x+32 + 6 + 1 + + + MR39 + CPU Interrupt Mask on Direct Event input + x+32 + 7 + 1 + + + MR40 + CPU Interrupt Mask on Direct Event input + x+32 + 8 + 1 + + + MR41 + CPU Interrupt Mask on Direct Event input + x+32 + 9 + 1 + + + MR42 + CPU Interrupt Mask on Direct Event input + x+32 + 10 + 1 + + + MR43 + CPU Interrupt Mask on Direct Event input + x+32 + 11 + 1 + + + MR44 + CPU Interrupt Mask on Direct Event input + x+32 + 12 + 1 + + + MR46 + CPU Interrupt Mask on Direct Event input + x+32 + 14 + 1 + + + MR47 + CPU Interrupt Mask on Direct Event input + x+32 + 15 + 1 + + + MR48 + CPU Interrupt Mask on Direct Event input + x+32 + 16 + 1 + + + MR49 + CPU Interrupt Mask on Direct Event input + x+32 + 17 + 1 + + + MR50 + CPU Interrupt Mask on Direct Event input + x+32 + 18 + 1 + + + MR51 + CPU Interrupt Mask on Direct Event input + x+32 + 19 + 1 + + + MR52 + CPU Interrupt Mask on Direct Event input + x+32 + 20 + 1 + + + MR53 + CPU Interrupt Mask on Direct Event input + x+32 + 21 + 1 + + + MR54 + CPU Interrupt Mask on Direct Event input + x+32 + 22 + 1 + + + MR55 + CPU Interrupt Mask on Direct Event input + x+32 + 23 + 1 + + + MR56 + CPU Interrupt Mask on Direct Event input + x+32 + 24 + 1 + + + MR57 + CPU Interrupt Mask on Direct Event input + x+32 + 25 + 1 + + + MR58 + CPU Interrupt Mask on Direct Event input + x+32 + 26 + 1 + + + MR59 + CPU Interrupt Mask on Direct Event input + x+32 + 27 + 1 + + + MR60 + CPU Interrupt Mask on Direct Event input + x+32 + 28 + 1 + + + MR61 + CPU Interrupt Mask on Direct Event input + x+32 + 29 + 1 + + + MR62 + CPU Interrupt Mask on Direct Event input + x+32 + 30 + 1 + + + MR63 + CPU Interrupt Mask on Direct Event input + x+32 + 31 + 1 + + + + + CPUPR2 + CPUPR2 + EXTI pending register + 0x98 + 0x20 + read-only + 0x00000000 + + + PR49 + Configurable event inputs x+32 Pending + bit + 17 + 1 + + + PR51 + Configurable event inputs x+32 Pending + bit + 19 + 1 + + + + + CPUIMR3 + CPUIMR3 + EXTI interrupt mask register + 0xA0 + 0x20 + read-only + 0x00000000 + + + MR64 + CPU Interrupt Mask on Direct Event input + x+64 + 0 + 1 + + + MR65 + CPU Interrupt Mask on Direct Event input + x+64 + 1 + 1 + + + MR66 + CPU Interrupt Mask on Direct Event input + x+64 + 2 + 1 + + + MR67 + CPU Interrupt Mask on Direct Event input + x+64 + 3 + 1 + + + MR68 + CPU Interrupt Mask on Direct Event input + x+64 + 4 + 1 + + + MR69 + CPU Interrupt Mask on Direct Event input + x+64 + 5 + 1 + + + MR70 + CPU Interrupt Mask on Direct Event input + x+64 + 6 + 1 + + + MR71 + CPU Interrupt Mask on Direct Event input + x+64 + 7 + 1 + + + MR72 + CPU Interrupt Mask on Direct Event input + x+64 + 8 + 1 + + + MR73 + CPU Interrupt Mask on Direct Event input + x+64 + 9 + 1 + + + MR74 + CPU Interrupt Mask on Direct Event input + x+64 + 10 + 1 + + + MR75 + CPU Interrupt Mask on Direct Event input + x+64 + 11 + 1 + + + MR76 + CPU Interrupt Mask on Direct Event input + x+64 + 12 + 1 + + + MR77 + CPU Interrupt Mask on Direct Event input + x+64 + 13 + 1 + + + MR78 + CPU Interrupt Mask on Direct Event input + x+64 + 14 + 1 + + + MR79 + CPU Interrupt Mask on Direct Event input + x+64 + 15 + 1 + + + MR80 + CPU Interrupt Mask on Direct Event input + x+64 + 16 + 1 + + + MR82 + CPU Interrupt Mask on Direct Event input + x+64 + 18 + 1 + + + MR84 + CPU Interrupt Mask on Direct Event input + x+64 + 20 + 1 + + + MR85 + CPU Interrupt Mask on Direct Event input + x+64 + 21 + 1 + + + MR86 + CPU Interrupt Mask on Direct Event input + x+64 + 22 + 1 + + + MR87 + CPU Interrupt Mask on Direct Event input + x+64 + 23 + 1 + + + MR88 + CPU Interrupt Mask on Direct Event input + x+64 + 24 + 1 + + + + + CPUEMR3 + CPUEMR3 + EXTI event mask register + 0xA4 + 0x20 + read-only + 0x00000000 + + + MR64 + CPU Event mask on Event input + x+64 + 0 + 1 + + + MR65 + CPU Event mask on Event input + x+64 + 1 + 1 + + + MR66 + CPU Event mask on Event input + x+64 + 2 + 1 + + + MR67 + CPU Event mask on Event input + x+64 + 3 + 1 + + + MR68 + CPU Event mask on Event input + x+64 + 4 + 1 + + + MR69 + CPU Event mask on Event input + x+64 + 5 + 1 + + + MR70 + CPU Event mask on Event input + x+64 + 6 + 1 + + + MR71 + CPU Event mask on Event input + x+64 + 7 + 1 + + + MR72 + CPU Event mask on Event input + x+64 + 8 + 1 + + + MR73 + CPU Event mask on Event input + x+64 + 9 + 1 + + + MR74 + CPU Event mask on Event input + x+64 + 10 + 1 + + + MR75 + CPU Event mask on Event input + x+64 + 11 + 1 + + + MR76 + CPU Event mask on Event input + x+64 + 12 + 1 + + + MR77 + CPU Event mask on Event input + x+64 + 13 + 1 + + + MR78 + CPU Event mask on Event input + x+64 + 14 + 1 + + + MR79 + CPU Event mask on Event input + x+64 + 15 + 1 + + + MR80 + CPU Event mask on Event input + x+64 + 16 + 1 + + + MR82 + CPU Event mask on Event input + x+64 + 18 + 1 + + + MR84 + CPU Event mask on Event input + x+64 + 20 + 1 + + + MR85 + CPU Event mask on Event input + x+64 + 21 + 1 + + + MR86 + CPU Event mask on Event input + x+64 + 22 + 1 + + + MR87 + CPU Event mask on Event input + x+64 + 23 + 1 + + + MR88 + CPU Event mask on Event input + x+64 + 24 + 1 + + + + + CPUPR3 + CPUPR3 + EXTI pending register + 0xA8 + 0x20 + read-only + 0x00000000 + + + PR82 + Configurable event inputs x+64 Pending + bit + 18 + 1 + + + PR84 + Configurable event inputs x+64 Pending + bit + 20 + 1 + + + PR85 + Configurable event inputs x+64 Pending + bit + 21 + 1 + + + PR86 + Configurable event inputs x+64 Pending + bit + 22 + 1 + + + + + + + DELAY_Block_SDMMC1 + DELAY_Block_SDMMC1 + DLYB + 0x52008000 + + 0x0 + 0x100 + registers + + + + CR + CR + DLYB control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DEN + Delay block enable bit + 0 + 1 + + + SEN + Sampler length enable bit + 1 + 1 + + + + + CFGR + CFGR + DLYB configuration register + 0x4 + 0x20 + read-write + 0x00000000 + + + SEL + Select the phase for the Output + clock + 0 + 4 + + + UNIT + Delay Defines the delay of a Unit delay + cell + 8 + 7 + + + LNG + Delay line length value + 16 + 12 + + + LNGF + Length valid flag + 31 + 1 + + + + + + + DELAY_Block_QUADSPI + 0x52006000 + + + DELAY_Block_SDMMC2 + 0x48022800 + + + Flash + Flash + Flash + 0x52002000 + + 0x0 + 0x1000 + registers + + + FLASH + Flash memory + 4 + + + + ACR + ACR + Access control register + 0x0 + 0x20 + read-write + 0x00000600 + + + LATENCY + Read latency + 0 + 3 + + + WRHIGHFREQ + Flash signal delay + 4 + 2 + + + + + ACR_ + ACR_ + Access control register + 0x100 + 0x20 + read-write + 0x00000000 + + + LATENCY + Read latency + 0 + 3 + + + WRHIGHFREQ + Flash signal delay + 4 + 2 + + + + + KEYR1 + KEYR1 + FLASH key register for bank 1 + 0x4 + 0x20 + read-write + 0x00000000 + + + KEYR1 + Bank 1 access configuration unlock + key + 0 + 32 + + + + + OPTKEYR + OPTKEYR + FLASH option key register + 0x8 + 0x20 + read-write + 0x00000000 + + + OPTKEYR + Unlock key option bytes + 0 + 32 + + + + + OPTKEYR_ + OPTKEYR_ + FLASH option key register + 0x108 + 0x20 + read-write + 0x00000000 + + + OPTKEYR + Unlock key option bytes + 0 + 32 + + + + + CR1 + CR1 + FLASH control register for bank + 1 + 0xC + 0x20 + read-write + 0x00000000 + + + LOCK1 + Bank 1 configuration lock + bit + 0 + 1 + + + PG1 + Bank 1 program enable bit + 1 + 1 + + + SER1 + Bank 1 sector erase + request + 2 + 1 + + + BER1 + Bank 1 erase request + 3 + 1 + + + PSIZE1 + Bank 1 program size + 4 + 2 + + + FW1 + Bank 1 write forcing control + bit + 6 + 1 + + + START1 + Bank 1 bank or sector erase start + control bit + 7 + 1 + + + SNB1 + Bank 1 sector erase selection + number + 8 + 3 + + + CRC_EN + Bank 1 CRC control bit + 15 + 1 + + + EOPIE1 + Bank 1 end-of-program interrupt control + bit + 16 + 1 + + + WRPERRIE1 + Bank 1 write protection error interrupt + enable bit + 17 + 1 + + + PGSERRIE1 + Bank 1 programming sequence error + interrupt enable bit + 18 + 1 + + + STRBERRIE1 + Bank 1 strobe error interrupt enable + bit + 19 + 1 + + + INCERRIE1 + Bank 1 inconsistency error interrupt + enable bit + 21 + 1 + + + OPERRIE1 + Bank 1 write/erase error interrupt + enable bit + 22 + 1 + + + RDPERRIE1 + Bank 1 read protection error interrupt + enable bit + 23 + 1 + + + RDSERRIE1 + Bank 1 secure error interrupt enable + bit + 24 + 1 + + + SNECCERRIE1 + Bank 1 ECC single correction error + interrupt enable bit + 25 + 1 + + + DBECCERRIE1 + Bank 1 ECC double detection error + interrupt enable bit + 26 + 1 + + + CRCENDIE1 + Bank 1 end of CRC calculation interrupt + enable bit + 27 + 1 + + + + + SR1 + SR1 + FLASH status register for bank + 1 + 0x10 + 0x20 + read-write + 0x00000000 + + + BSY1 + Bank 1 ongoing program + flag + 0 + 1 + + + WBNE1 + Bank 1 write buffer not empty + flag + 1 + 1 + + + QW1 + Bank 1 wait queue flag + 2 + 1 + + + CRC_BUSY1 + Bank 1 CRC busy flag + 3 + 1 + + + EOP1 + Bank 1 end-of-program flag + 16 + 1 + + + WRPERR1 + Bank 1 write protection error + flag + 17 + 1 + + + PGSERR1 + Bank 1 programming sequence error + flag + 18 + 1 + + + STRBERR1 + Bank 1 strobe error flag + 19 + 1 + + + INCERR1 + Bank 1 inconsistency error + flag + 21 + 1 + + + OPERR1 + Bank 1 write/erase error + flag + 22 + 1 + + + RDPERR1 + Bank 1 read protection error + flag + 23 + 1 + + + RDSERR1 + Bank 1 secure error flag + 24 + 1 + + + SNECCERR11 + Bank 1 single correction error + flag + 25 + 1 + + + DBECCERR1 + Bank 1 ECC double detection error + flag + 26 + 1 + + + CRCEND1 + Bank 1 CRC-complete flag + 27 + 1 + + + + + CCR1 + CCR1 + FLASH clear control register for bank + 1 + 0x14 + 0x20 + read-write + 0x00000000 + + + CLR_EOP1 + Bank 1 EOP1 flag clear bit + 16 + 1 + + + CLR_WRPERR1 + Bank 1 WRPERR1 flag clear + bit + 17 + 1 + + + CLR_PGSERR1 + Bank 1 PGSERR1 flag clear + bi + 18 + 1 + + + CLR_STRBERR1 + Bank 1 STRBERR1 flag clear + bit + 19 + 1 + + + CLR_INCERR1 + Bank 1 INCERR1 flag clear + bit + 21 + 1 + + + CLR_OPERR1 + Bank 1 OPERR1 flag clear + bit + 22 + 1 + + + CLR_RDPERR1 + Bank 1 RDPERR1 flag clear + bit + 23 + 1 + + + CLR_RDSERR1 + Bank 1 RDSERR1 flag clear + bit + 24 + 1 + + + CLR_SNECCERR1 + Bank 1 SNECCERR1 flag clear + bit + 25 + 1 + + + CLR_DBECCERR1 + Bank 1 DBECCERR1 flag clear + bit + 26 + 1 + + + CLR_CRCEND1 + Bank 1 CRCEND1 flag clear + bit + 27 + 1 + + + + + OPTCR + OPTCR + FLASH option control register + 0x18 + 0x20 + read-write + 0x00000000 + + + OPTLOCK + FLASH_OPTCR lock option configuration + bit + 0 + 1 + + + OPTSTART + Option byte start change option + configuration bit + 1 + 1 + + + MER + Flash mass erase enable + bit + 4 + 1 + + + OPTCHANGEERRIE + Option byte change error interrupt + enable bit + 30 + 1 + + + SWAP_BANK + Bank swapping configuration + bit + 31 + 1 + + + + + OPTCR_ + OPTCR_ + FLASH option control register + 0x118 + 0x20 + read-write + 0x00000000 + + + OPTLOCK + FLASH_OPTCR lock option configuration + bit + 0 + 1 + + + OPTSTART + Option byte start change option + configuration bit + 1 + 1 + + + MER + Flash mass erase enable + bit + 4 + 1 + + + OPTCHANGEERRIE + Option byte change error interrupt + enable bit + 30 + 1 + + + SWAP_BANK + Bank swapping configuration + bit + 31 + 1 + + + + + OPTSR_CUR_ + OPTSR_CUR_ + FLASH option status register + 0x11C + 0x20 + read-write + 0x00000000 + + + OPT_BUSY + Option byte change ongoing + flag + 0 + 1 + + + BOR_LEV + Brownout level option status + bit + 2 + 2 + + + IWDG1_HW + IWDG1 control option status + bit + 4 + 1 + + + nRST_STOP_D1 + D1 DStop entry reset option status + bit + 6 + 1 + + + nRST_STBY_D1 + D1 DStandby entry reset option status + bit + 7 + 1 + + + RDP + Readout protection level option status + byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option status + bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option status + bit + 18 + 1 + + + ST_RAM_SIZE + DTCM RAM size option + status + 19 + 2 + + + SECURITY + Security enable option status + bit + 21 + 1 + + + RSS1 + User option bit 1 + 26 + 1 + + + PERSO_OK + Device personalization status + bit + 28 + 1 + + + IO_HSLV + I/O high-speed at low-voltage status bit + (PRODUCT_BELOW_25V) + 29 + 1 + + + OPTCHANGEERR + Option byte change error + flag + 30 + 1 + + + SWAP_BANK_OPT + Bank swapping option status + bit + 31 + 1 + + + + + OPTSR_CUR + OPTSR_CUR + FLASH option status register + 0x1C + 0x20 + read-write + 0x00000000 + + + OPT_BUSY + Option byte change ongoing + flag + 0 + 1 + + + BOR_LEV + Brownout level option status + bit + 2 + 2 + + + IWDG1_HW + IWDG1 control option status + bit + 4 + 1 + + + nRST_STOP_D1 + D1 DStop entry reset option status + bit + 6 + 1 + + + nRST_STBY_D1 + D1 DStandby entry reset option status + bit + 7 + 1 + + + RDP + Readout protection level option status + byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option status + bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option status + bit + 18 + 1 + + + ST_RAM_SIZE + DTCM RAM size option + status + 19 + 2 + + + SECURITY + Security enable option status + bit + 21 + 1 + + + RSS1 + User option bit 1 + 26 + 1 + + + PERSO_OK + Device personalization status + bit + 28 + 1 + + + IO_HSLV + I/O high-speed at low-voltage status bit + (PRODUCT_BELOW_25V) + 29 + 1 + + + OPTCHANGEERR + Option byte change error + flag + 30 + 1 + + + SWAP_BANK_OPT + Bank swapping option status + bit + 31 + 1 + + + + + OPTSR_PRG + OPTSR_PRG + FLASH option status register + 0x20 + 0x20 + read-write + 0x00000000 + + + BOR_LEV + BOR reset level option configuration + bits + 2 + 2 + + + IWDG1_HW + IWDG1 option configuration + bit + 4 + 1 + + + nRST_STOP_D1 + Option byte erase after D1 DStop option + configuration bit + 6 + 1 + + + nRST_STBY_D1 + Option byte erase after D1 DStandby + option configuration bit + 7 + 1 + + + RDP + Readout protection level option + configuration byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option + configuration bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option + configuration bit + 18 + 1 + + + ST_RAM_SIZE + DTCM size select option configuration + bits + 19 + 2 + + + SECURITY + Security option configuration + bit + 21 + 1 + + + RSS1 + User option configuration bit + 1 + 26 + 1 + + + RSS2 + User option configuration bit + 2 + 27 + 1 + + + IO_HSLV + I/O high-speed at low-voltage + (PRODUCT_BELOW_25V) + 29 + 1 + + + SWAP_BANK_OPT + Bank swapping option configuration + bit + 31 + 1 + + + + + OPTSR_PRG_ + OPTSR_PRG_ + FLASH option status register + 0x120 + 0x20 + read-write + 0x00000000 + + + BOR_LEV + BOR reset level option configuration + bits + 2 + 2 + + + IWDG1_HW + IWDG1 option configuration + bit + 4 + 1 + + + nRST_STOP_D1 + Option byte erase after D1 DStop option + configuration bit + 6 + 1 + + + nRST_STBY_D1 + Option byte erase after D1 DStandby + option configuration bit + 7 + 1 + + + RDP + Readout protection level option + configuration byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option + configuration bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option + configuration bit + 18 + 1 + + + ST_RAM_SIZE + DTCM size select option configuration + bits + 19 + 2 + + + SECURITY + Security option configuration + bit + 21 + 1 + + + RSS1 + User option configuration bit + 1 + 26 + 1 + + + RSS2 + User option configuration bit + 2 + 27 + 1 + + + IO_HSLV + I/O high-speed at low-voltage + (PRODUCT_BELOW_25V) + 29 + 1 + + + SWAP_BANK_OPT + Bank swapping option configuration + bit + 31 + 1 + + + + + OPTCCR_ + OPTCCR_ + FLASH option clear control + register + 0x124 + 0x20 + write-only + 0x00000000 + + + CLR_OPTCHANGEERR + OPTCHANGEERR reset bit + 30 + 1 + + + + + OPTCCR + OPTCCR + FLASH option clear control + register + 0x24 + 0x20 + write-only + 0x00000000 + + + CLR_OPTCHANGEERR + OPTCHANGEERR reset bit + 30 + 1 + + + + + PRAR_CUR1 + PRAR_CUR1 + FLASH protection address for bank + 1 + 0x28 + 0x20 + read-only + 0x00000000 + + + PROT_AREA_START1 + Bank 1 lowest PCROP protected + address + 0 + 12 + + + PROT_AREA_END1 + Bank 1 highest PCROP protected + address + 16 + 12 + + + DMEP1 + Bank 1 PCROP protected erase enable + option status bit + 31 + 1 + + + + + PRAR_PRG1 + PRAR_PRG1 + FLASH protection address for bank + 1 + 0x2C + 0x20 + read-write + 0x00000000 + + + PROT_AREA_START1 + Bank 1 lowest PCROP protected address + configuration + 0 + 12 + + + PROT_AREA_END1 + Bank 1 highest PCROP protected address + configuration + 16 + 12 + + + DMEP1 + Bank 1 PCROP protected erase enable + option configuration bit + 31 + 1 + + + + + SCAR_CUR1 + SCAR_CUR1 + FLASH secure address for bank + 1 + 0x30 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START1 + Bank 1 lowest secure protected + address + 0 + 12 + + + SEC_AREA_END1 + Bank 1 highest secure protected + address + 16 + 12 + + + DMES1 + Bank 1 secure protected erase enable + option status bit + 31 + 1 + + + + + SCAR_PRG1 + SCAR_PRG1 + FLASH secure address for bank + 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START1 + Bank 1 lowest secure protected address + configuration + 0 + 12 + + + SEC_AREA_END1 + Bank 1 highest secure protected address + configuration + 16 + 12 + + + DMES1 + Bank 1 secure protected erase enable + option configuration bit + 31 + 1 + + + + + WPSN_CUR1R + WPSN_CUR1R + FLASH write sector protection for bank + 1 + 0x38 + 0x20 + read-only + 0x00000000 + + + WRPSn1 + Bank 1 sector write protection option + status byte + 0 + 8 + + + + + WPSN_PRG1R + WPSN_PRG1R + FLASH write sector protection for bank + 1 + 0x3C + 0x20 + read-write + 0x00000000 + + + WRPSn1 + Bank 1 sector write protection + configuration byte + 0 + 8 + + + + + BOOT_CURR + BOOT_CURR + FLASH register with boot + address + 0x40 + 0x20 + read-only + 0x00000000 + + + BOOT_ADD0 + Boot address 0 + 0 + 16 + + + BOOT_ADD1 + Boot address 1 + 16 + 16 + + + + + BOOT_PRGR + BOOT_PRGR + FLASH register with boot + address + 0x44 + 0x20 + read-only + 0x00000000 + + + BOOT_ADD0 + Boot address 0 + 0 + 16 + + + BOOT_ADD1 + Boot address 1 + 16 + 16 + + + + + CRCCR1 + CRCCR1 + FLASH CRC control register for bank + 1 + 0x50 + 0x20 + read-write + 0x00000000 + + + CRC_SECT + Bank 1 CRC sector number + 0 + 3 + + + ALL_BANK + Bank 1 CRC select bit + 7 + 1 + + + CRC_BY_SECT + Bank 1 CRC sector mode select + bit + 8 + 1 + + + ADD_SECT + Bank 1 CRC sector select + bit + 9 + 1 + + + CLEAN_SECT + Bank 1 CRC sector list clear + bit + 10 + 1 + + + START_CRC + Bank 1 CRC start bit + 16 + 1 + + + CLEAN_CRC + Bank 1 CRC clear bit + 17 + 1 + + + CRC_BURST + Bank 1 CRC burst size + 20 + 2 + + + + + CRCSADD1R + CRCSADD1R + FLASH CRC start address register for bank + 1 + 0x54 + 0x20 + read-write + 0x00000000 + + + CRC_START_ADDR + CRC start address on bank + 1 + 0 + 32 + + + + + CRCEADD1R + CRCEADD1R + FLASH CRC end address register for bank + 1 + 0x58 + 0x20 + read-write + 0x00000000 + + + CRC_END_ADDR + CRC end address on bank 1 + 0 + 32 + + + + + CRCDATAR + CRCDATAR + FLASH CRC data register + 0x5C + 0x20 + read-write + 0x00000000 + + + CRC_DATA + CRC result + 0 + 32 + + + + + ECC_FA1R + ECC_FA1R + FLASH ECC fail address for bank + 1 + 0x60 + 0x20 + read-only + 0x00000000 + + + FAIL_ECC_ADDR1 + Bank 1 ECC error address + 0 + 15 + + + + + KEYR2 + KEYR2 + FLASH key register for bank 2 + 0x104 + 0x20 + read-only + 0x00000000 + + + KEYR2 + Bank 2 access configuration unlock + key + 0 + 32 + + + + + CR2 + CR2 + FLASH control register for bank + 2 + 0x10C + 0x20 + read-write + 0x00000000 + + + LOCK2 + Bank 2 configuration lock + bit + 0 + 1 + + + PG2 + Bank 2 program enable bit + 1 + 1 + + + SER2 + Bank 2 sector erase + request + 2 + 1 + + + BER2 + Bank 2 erase request + 3 + 1 + + + PSIZE2 + Bank 2 program size + 4 + 2 + + + FW2 + Bank 2 write forcing control + bit + 6 + 1 + + + START2 + Bank 2 bank or sector erase start + control bit + 7 + 1 + + + SNB2 + Bank 2 sector erase selection + number + 8 + 3 + + + CRC_EN + Bank 2 CRC control bit + 15 + 1 + + + EOPIE2 + Bank 2 end-of-program interrupt control + bit + 16 + 1 + + + WRPERRIE2 + Bank 2 write protection error interrupt + enable bit + 17 + 1 + + + PGSERRIE2 + Bank 2 programming sequence error + interrupt enable bit + 18 + 1 + + + STRBERRIE2 + Bank 2 strobe error interrupt enable + bit + 19 + 1 + + + INCERRIE2 + Bank 2 inconsistency error interrupt + enable bit + 21 + 1 + + + OPERRIE2 + Bank 2 write/erase error interrupt + enable bit + 22 + 1 + + + RDPERRIE2 + Bank 2 read protection error interrupt + enable bit + 23 + 1 + + + RDSERRIE2 + Bank 2 secure error interrupt enable + bit + 24 + 1 + + + SNECCERRIE2 + Bank 2 ECC single correction error + interrupt enable bit + 25 + 1 + + + DBECCERRIE2 + Bank 2 ECC double detection error + interrupt enable bit + 26 + 1 + + + CRCENDIE2 + Bank 2 end of CRC calculation interrupt + enable bit + 27 + 1 + + + + + SR2 + SR2 + FLASH status register for bank + 2 + 0x110 + 0x20 + read-write + 0x00000000 + + + BSY2 + Bank 2 ongoing program + flag + 0 + 1 + + + WBNE2 + Bank 2 write buffer not empty + flag + 1 + 1 + + + QW2 + Bank 2 wait queue flag + 2 + 1 + + + CRC_BUSY2 + Bank 2 CRC busy flag + 3 + 1 + + + EOP2 + Bank 2 end-of-program flag + 16 + 1 + + + WRPERR2 + Bank 2 write protection error + flag + 17 + 1 + + + PGSERR2 + Bank 2 programming sequence error + flag + 18 + 1 + + + STRBERR2 + Bank 2 strobe error flag + 19 + 1 + + + INCERR2 + Bank 2 inconsistency error + flag + 21 + 1 + + + OPERR2 + Bank 2 write/erase error + flag + 22 + 1 + + + RDPERR2 + Bank 2 read protection error + flag + 23 + 1 + + + RDSERR2 + Bank 2 secure error flag + 24 + 1 + + + SNECCERR2 + Bank 2 single correction error + flag + 25 + 1 + + + DBECCERR2 + Bank 2 ECC double detection error + flag + 26 + 1 + + + CRCEND2 + Bank 2 CRC-complete flag + 27 + 1 + + + + + CCR2 + CCR2 + FLASH clear control register for bank + 2 + 0x114 + 0x20 + read-write + 0x00000000 + + + CLR_EOP2 + Bank 1 EOP1 flag clear bit + 16 + 1 + + + CLR_WRPERR2 + Bank 2 WRPERR1 flag clear + bit + 17 + 1 + + + CLR_PGSERR2 + Bank 2 PGSERR1 flag clear + bi + 18 + 1 + + + CLR_STRBERR2 + Bank 2 STRBERR1 flag clear + bit + 19 + 1 + + + CLR_INCERR2 + Bank 2 INCERR1 flag clear + bit + 21 + 1 + + + CLR_OPERR2 + Bank 2 OPERR1 flag clear + bit + 22 + 1 + + + CLR_RDPERR2 + Bank 2 RDPERR1 flag clear + bit + 23 + 1 + + + CLR_RDSERR1 + Bank 1 RDSERR1 flag clear + bit + 24 + 1 + + + CLR_SNECCERR2 + Bank 2 SNECCERR1 flag clear + bit + 25 + 1 + + + CLR_DBECCERR1 + Bank 1 DBECCERR1 flag clear + bit + 26 + 1 + + + CLR_CRCEND2 + Bank 2 CRCEND1 flag clear + bit + 27 + 1 + + + + + PRAR_CUR2 + PRAR_CUR2 + FLASH protection address for bank + 1 + 0x128 + 0x20 + read-only + 0x00000000 + + + PROT_AREA_START2 + Bank 2 lowest PCROP protected + address + 0 + 12 + + + PROT_AREA_END2 + Bank 2 highest PCROP protected + address + 16 + 12 + + + DMEP2 + Bank 2 PCROP protected erase enable + option status bit + 31 + 1 + + + + + PRAR_PRG2 + PRAR_PRG2 + FLASH protection address for bank + 2 + PRAR_PRG1 + 0x2C + 0x20 + read-write + 0x00000000 + + + PROT_AREA_START2 + Bank 2 lowest PCROP protected address + configuration + 0 + 12 + + + PROT_AREA_END2 + Bank 2 highest PCROP protected address + configuration + 16 + 12 + + + DMEP2 + Bank 2 PCROP protected erase enable + option configuration bit + 31 + 1 + + + + + SCAR_CUR2 + SCAR_CUR2 + FLASH secure address for bank + 2 + 0x130 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START2 + Bank 2 lowest secure protected + address + 0 + 12 + + + SEC_AREA_END2 + Bank 2 highest secure protected + address + 16 + 12 + + + DMES2 + Bank 2 secure protected erase enable + option status bit + 31 + 1 + + + + + SCAR_PRG2 + SCAR_PRG2 + FLASH secure address for bank + 2 + 0x134 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START2 + Bank 2 lowest secure protected address + configuration + 0 + 12 + + + SEC_AREA_END2 + Bank 2 highest secure protected address + configuration + 16 + 12 + + + DMES2 + Bank 2 secure protected erase enable + option configuration bit + 31 + 1 + + + + + WPSN_CUR2R + WPSN_CUR2R + FLASH write sector protection for bank + 2 + 0x138 + 0x20 + read-only + 0x00000000 + + + WRPSn2 + Bank 2 sector write protection option + status byte + 0 + 8 + + + + + WPSN_PRG2R + WPSN_PRG2R + FLASH write sector protection for bank + 2 + 0x13C + 0x20 + read-write + 0x00000000 + + + WRPSn2 + Bank 2 sector write protection + configuration byte + 0 + 8 + + + + + CRCCR2 + CRCCR2 + FLASH CRC control register for bank + 1 + 0x150 + 0x20 + read-write + 0x00000000 + + + CRC_SECT + Bank 2 CRC sector number + 0 + 3 + + + ALL_BANK + Bank 2 CRC select bit + 7 + 1 + + + CRC_BY_SECT + Bank 2 CRC sector mode select + bit + 8 + 1 + + + ADD_SECT + Bank 2 CRC sector select + bit + 9 + 1 + + + CLEAN_SECT + Bank 2 CRC sector list clear + bit + 10 + 1 + + + START_CRC + Bank 2 CRC start bit + 16 + 1 + + + CLEAN_CRC + Bank 2 CRC clear bit + 17 + 1 + + + CRC_BURST + Bank 2 CRC burst size + 20 + 2 + + + + + CRCSADD2R + CRCSADD2R + FLASH CRC start address register for bank + 2 + 0x154 + 0x20 + read-write + 0x00000000 + + + CRC_START_ADDR + CRC start address on bank + 2 + 0 + 32 + + + + + CRCEADD2R + CRCEADD2R + FLASH CRC end address register for bank + 2 + 0x158 + 0x20 + read-write + 0x00000000 + + + CRC_END_ADDR + CRC end address on bank 2 + 0 + 32 + + + + + ECC_FA2R + ECC_FA2R + FLASH ECC fail address for bank + 2 + 0x160 + 0x20 + read-only + 0x00000000 + + + FAIL_ECC_ADDR2 + Bank 2 ECC error address + 0 + 15 + + + + + + + AXI + AXI interconnect registers + AXI + 0x51000000 + + 0x0 + 0x100000 + registers + + + + AXI_PERIPH_ID_4 + AXI_PERIPH_ID_4 + AXI interconnect - peripheral ID4 + register + 0x1FD0 + 0x20 + read-only + 0x00000004 + + + JEP106CON + JEP106 continuation code + 0 + 4 + + + KCOUNT4 + Register file size + 4 + 4 + + + + + AXI_PERIPH_ID_0 + AXI_PERIPH_ID_0 + AXI interconnect - peripheral ID0 + register + 0x1FE0 + 0x20 + read-only + 0x00000004 + + + PARTNUM + Peripheral part number bits 0 to + 7 + 0 + 8 + + + + + AXI_PERIPH_ID_1 + AXI_PERIPH_ID_1 + AXI interconnect - peripheral ID1 + register + 0x1FE4 + 0x20 + read-only + 0x00000004 + + + PARTNUM + Peripheral part number bits 8 to + 11 + 0 + 4 + + + JEP106I + JEP106 identity bits 0 to + 3 + 4 + 4 + + + + + AXI_PERIPH_ID_2 + AXI_PERIPH_ID_2 + AXI interconnect - peripheral ID2 + register + 0x1FE8 + 0x20 + read-only + 0x00000004 + + + JEP106ID + JEP106 Identity bits 4 to + 6 + 0 + 3 + + + JEDEC + JEP106 code flag + 3 + 1 + + + REVISION + Peripheral revision number + 4 + 4 + + + + + AXI_PERIPH_ID_3 + AXI_PERIPH_ID_3 + AXI interconnect - peripheral ID3 + register + 0x1FEC + 0x20 + read-only + 0x00000004 + + + CUST_MOD_NUM + Customer modification + 0 + 4 + + + REV_AND + Customer version + 4 + 4 + + + + + AXI_COMP_ID_0 + AXI_COMP_ID_0 + AXI interconnect - component ID0 + register + 0x1FF0 + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 0 to 7 + 0 + 8 + + + + + AXI_COMP_ID_1 + AXI_COMP_ID_1 + AXI interconnect - component ID1 + register + 0x1FF4 + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 8 to 11 + 0 + 4 + + + CLASS + Component class + 4 + 4 + + + + + AXI_COMP_ID_2 + AXI_COMP_ID_2 + AXI interconnect - component ID2 + register + 0x1FF8 + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 12 to 19 + 0 + 8 + + + + + AXI_COMP_ID_3 + AXI_COMP_ID_3 + AXI interconnect - component ID3 + register + 0x1FFC + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 20 to 27 + 0 + 8 + + + + + AXI_TARG1_FN_MOD_ISS_BM + AXI_TARG1_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x2008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG2_FN_MOD_ISS_BM + AXI_TARG2_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x3008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG3_FN_MOD_ISS_BM + AXI_TARG3_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x4008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG4_FN_MOD_ISS_BM + AXI_TARG4_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x5008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG5_FN_MOD_ISS_BM + AXI_TARG5_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x6008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG6_FN_MOD_ISS_BM + AXI_TARG6_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x7008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG7_FN_MOD_ISS_BM + AXI_TARG7_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x800C + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG1_FN_MOD2 + AXI_TARG1_FN_MOD2 + AXI interconnect - TARG x bus matrix + functionality 2 register + 0x2024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disable packing of beats to match the + output data width + 0 + 1 + + + + + AXI_TARG2_FN_MOD2 + AXI_TARG2_FN_MOD2 + AXI interconnect - TARG x bus matrix + functionality 2 register + 0x3024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disable packing of beats to match the + output data width + 0 + 1 + + + + + AXI_TARG7_FN_MOD2 + AXI_TARG7_FN_MOD2 + AXI interconnect - TARG x bus matrix + functionality 2 register + 0x8024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disable packing of beats to match the + output data width + 0 + 1 + + + + + AXI_TARG1_FN_MOD_LB + AXI_TARG1_FN_MOD_LB + AXI interconnect - TARG x long burst + functionality modification + 0x202C + 0x20 + read-write + 0x00000004 + + + FN_MOD_LB + Controls burst breaking of long + bursts + 0 + 1 + + + + + AXI_TARG2_FN_MOD_LB + AXI_TARG2_FN_MOD_LB + AXI interconnect - TARG x long burst + functionality modification + 0x302C + 0x20 + read-write + 0x00000004 + + + FN_MOD_LB + Controls burst breaking of long + bursts + 0 + 1 + + + + + AXI_TARG1_FN_MOD + AXI_TARG1_FN_MOD + AXI interconnect - TARG x long burst + functionality modification + 0x2108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override AMIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override AMIB write issuing + capability + 1 + 1 + + + + + AXI_TARG2_FN_MOD + AXI_TARG2_FN_MOD + AXI interconnect - TARG x long burst + functionality modification + 0x3108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override AMIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override AMIB write issuing + capability + 1 + 1 + + + + + AXI_TARG7_FN_MOD + AXI_TARG7_FN_MOD + AXI interconnect - TARG x long burst + functionality modification + 0x8108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override AMIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override AMIB write issuing + capability + 1 + 1 + + + + + AXI_INI1_FN_MOD2 + AXI_INI1_FN_MOD2 + AXI interconnect - INI x functionality + modification 2 register + 0x42024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disables alteration of transactions by + the up-sizer unless required by the + protocol + 0 + 1 + + + + + AXI_INI3_FN_MOD2 + AXI_INI3_FN_MOD2 + AXI interconnect - INI x functionality + modification 2 register + 0x44024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disables alteration of transactions by + the up-sizer unless required by the + protocol + 0 + 1 + + + + + AXI_INI1_FN_MOD_AHB + AXI_INI1_FN_MOD_AHB + AXI interconnect - INI x AHB functionality + modification register + 0x42028 + 0x20 + read-write + 0x00000004 + + + RD_INC_OVERRIDE + Converts all AHB-Lite write transactions + to a series of single beat AXI + 0 + 1 + + + WR_INC_OVERRIDE + Converts all AHB-Lite read transactions + to a series of single beat AXI + 1 + 1 + + + + + AXI_INI3_FN_MOD_AHB + AXI_INI3_FN_MOD_AHB + AXI interconnect - INI x AHB functionality + modification register + 0x44028 + 0x20 + read-write + 0x00000004 + + + RD_INC_OVERRIDE + Converts all AHB-Lite write transactions + to a series of single beat AXI + 0 + 1 + + + WR_INC_OVERRIDE + Converts all AHB-Lite read transactions + to a series of single beat AXI + 1 + 1 + + + + + AXI_INI1_READ_QOS + AXI_INI1_READ_QOS + AXI interconnect - INI x read QoS + register + 0x42100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI2_READ_QOS + AXI_INI2_READ_QOS + AXI interconnect - INI x read QoS + register + 0x43100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI3_READ_QOS + AXI_INI3_READ_QOS + AXI interconnect - INI x read QoS + register + 0x44100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI4_READ_QOS + AXI_INI4_READ_QOS + AXI interconnect - INI x read QoS + register + 0x45100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI5_READ_QOS + AXI_INI5_READ_QOS + AXI interconnect - INI x read QoS + register + 0x46100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI6_READ_QOS + AXI_INI6_READ_QOS + AXI interconnect - INI x read QoS + register + 0x47100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI1_WRITE_QOS + AXI_INI1_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x42104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI2_WRITE_QOS + AXI_INI2_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x43104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI3_WRITE_QOS + AXI_INI3_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x44104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI4_WRITE_QOS + AXI_INI4_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x45104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI5_WRITE_QOS + AXI_INI5_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x46104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI6_WRITE_QOS + AXI_INI6_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x47104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI1_FN_MOD + AXI_INI1_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x42108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI2_FN_MOD + AXI_INI2_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x43108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI3_FN_MOD + AXI_INI3_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x44108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI4_FN_MOD + AXI_INI4_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x45108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI5_FN_MOD + AXI_INI5_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x46108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI6_FN_MOD + AXI_INI6_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x47108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + + + DCMI + Digital camera interface + DCMI + 0x48020000 + + 0x0 + 0x400 + registers + + + DCMI + DCMI global interrupt + 78 + + + + CR + CR + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + OELS + Odd/Even Line Select (Line Select + Start) + 20 + 1 + + + LSM + Line Select mode + 19 + 1 + + + OEBS + Odd/Even Byte Select (Byte Select + Start) + 18 + 1 + + + BSM + Byte Select mode + 16 + 2 + + + ENABLE + DCMI enable + 14 + 1 + + + EDM + Extended data mode + 10 + 2 + + + FCRC + Frame capture rate control + 8 + 2 + + + VSPOL + Vertical synchronization + polarity + 7 + 1 + + + HSPOL + Horizontal synchronization + polarity + 6 + 1 + + + PCKPOL + Pixel clock polarity + 5 + 1 + + + ESS + Embedded synchronization + select + 4 + 1 + + + JPEG + JPEG format + 3 + 1 + + + CROP + Crop feature + 2 + 1 + + + CM + Capture mode + 1 + 1 + + + CAPTURE + Capture enable + 0 + 1 + + + + + SR + SR + status register + 0x4 + 0x20 + read-only + 0x0000 + + + FNE + FIFO not empty + 2 + 1 + + + VSYNC + VSYNC + 1 + 1 + + + HSYNC + HSYNC + 0 + 1 + + + + + RIS + RIS + raw interrupt status register + 0x8 + 0x20 + read-only + 0x0000 + + + LINE_RIS + Line raw interrupt status + 4 + 1 + + + VSYNC_RIS + VSYNC raw interrupt status + 3 + 1 + + + ERR_RIS + Synchronization error raw interrupt + status + 2 + 1 + + + OVR_RIS + Overrun raw interrupt + status + 1 + 1 + + + FRAME_RIS + Capture complete raw interrupt + status + 0 + 1 + + + + + IER + IER + interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + LINE_IE + Line interrupt enable + 4 + 1 + + + VSYNC_IE + VSYNC interrupt enable + 3 + 1 + + + ERR_IE + Synchronization error interrupt + enable + 2 + 1 + + + OVR_IE + Overrun interrupt enable + 1 + 1 + + + FRAME_IE + Capture complete interrupt + enable + 0 + 1 + + + + + MIS + MIS + masked interrupt status + register + 0x10 + 0x20 + read-only + 0x0000 + + + LINE_MIS + Line masked interrupt + status + 4 + 1 + + + VSYNC_MIS + VSYNC masked interrupt + status + 3 + 1 + + + ERR_MIS + Synchronization error masked interrupt + status + 2 + 1 + + + OVR_MIS + Overrun masked interrupt + status + 1 + 1 + + + FRAME_MIS + Capture complete masked interrupt + status + 0 + 1 + + + + + ICR + ICR + interrupt clear register + 0x14 + 0x20 + write-only + 0x0000 + + + LINE_ISC + line interrupt status + clear + 4 + 1 + + + VSYNC_ISC + Vertical synch interrupt status + clear + 3 + 1 + + + ERR_ISC + Synchronization error interrupt status + clear + 2 + 1 + + + OVR_ISC + Overrun interrupt status + clear + 1 + 1 + + + FRAME_ISC + Capture complete interrupt status + clear + 0 + 1 + + + + + ESCR + ESCR + embedded synchronization code + register + 0x18 + 0x20 + read-write + 0x0000 + + + FEC + Frame end delimiter code + 24 + 8 + + + LEC + Line end delimiter code + 16 + 8 + + + LSC + Line start delimiter code + 8 + 8 + + + FSC + Frame start delimiter code + 0 + 8 + + + + + ESUR + ESUR + embedded synchronization unmask + register + 0x1C + 0x20 + read-write + 0x0000 + + + FEU + Frame end delimiter unmask + 24 + 8 + + + LEU + Line end delimiter unmask + 16 + 8 + + + LSU + Line start delimiter + unmask + 8 + 8 + + + FSU + Frame start delimiter + unmask + 0 + 8 + + + + + CWSTRT + CWSTRT + crop window start + 0x20 + 0x20 + read-write + 0x0000 + + + VST + Vertical start line count + 16 + 13 + + + HOFFCNT + Horizontal offset count + 0 + 14 + + + + + CWSIZE + CWSIZE + crop window size + 0x24 + 0x20 + read-write + 0x0000 + + + VLINE + Vertical line count + 16 + 14 + + + CAPCNT + Capture count + 0 + 14 + + + + + DR + DR + data register + 0x28 + 0x20 + read-only + 0x0000 + + + Byte3 + Data byte 3 + 24 + 8 + + + Byte2 + Data byte 2 + 16 + 8 + + + Byte1 + Data byte 1 + 8 + 8 + + + Byte0 + Data byte 0 + 0 + 8 + + + + + + + OTG1_HS_GLOBAL + USB 1 on the go high speed + USB_OTG_HS + 0x40040000 + + 0x0 + 0x400 + registers + + + OTG_FS_EP1_OUT + OTG_FS out global interrupt + 98 + + + OTG_FS_EP1_IN + OTG_FS in global interrupt + 99 + + + OTG_FS_WKUP + OTG_FS wakeup + 100 + + + OTG_FS + OTG_FS global interrupt + 101 + + + + OTG_HS_GOTGCTL + OTG_HS_GOTGCTL + OTG_HS control and status + register + 0x0 + 32 + 0x00000800 + + + SRQSCS + Session request success + 0 + 1 + read-only + + + SRQ + Session request + 1 + 1 + read-write + + + HNGSCS + Host negotiation success + 8 + 1 + read-only + + + HNPRQ + HNP request + 9 + 1 + read-write + + + HSHNPEN + Host set HNP enable + 10 + 1 + read-write + + + DHNPEN + Device HNP enabled + 11 + 1 + read-write + + + CIDSTS + Connector ID status + 16 + 1 + read-only + + + DBCT + Long/short debounce time + 17 + 1 + read-only + + + ASVLD + A-session valid + 18 + 1 + read-only + + + BSVLD + B-session valid + 19 + 1 + read-only + + + EHEN + Embedded host enable + 12 + 1 + read-write + + + + + OTG_HS_GOTGINT + OTG_HS_GOTGINT + OTG_HS interrupt register + 0x4 + 32 + read-write + 0x0 + + + SEDET + Session end detected + 2 + 1 + + + SRSSCHG + Session request success status + change + 8 + 1 + + + HNSSCHG + Host negotiation success status + change + 9 + 1 + + + HNGDET + Host negotiation detected + 17 + 1 + + + ADTOCHG + A-device timeout change + 18 + 1 + + + DBCDNE + Debounce done + 19 + 1 + + + IDCHNG + ID input pin changed + 20 + 1 + + + + + OTG_HS_GAHBCFG + OTG_HS_GAHBCFG + OTG_HS AHB configuration + register + 0x8 + 32 + read-write + 0x0 + + + GINT + Global interrupt mask + 0 + 1 + + + HBSTLEN + Burst length/type + 1 + 4 + + + DMAEN + DMA enable + 5 + 1 + + + TXFELVL + TxFIFO empty level + 7 + 1 + + + PTXFELVL + Periodic TxFIFO empty + level + 8 + 1 + + + + + OTG_HS_GUSBCFG + OTG_HS_GUSBCFG + OTG_HS USB configuration + register + 0xC + 32 + 0x00000A00 + + + TOCAL + FS timeout calibration + 0 + 3 + read-write + + + PHYSEL + USB 2.0 high-speed ULPI PHY or USB 1.1 + full-speed serial transceiver select + 6 + 1 + write-only + + + SRPCAP + SRP-capable + 8 + 1 + read-write + + + HNPCAP + HNP-capable + 9 + 1 + read-write + + + TRDT + USB turnaround time + 10 + 4 + read-write + + + PHYLPCS + PHY Low-power clock select + 15 + 1 + read-write + + + ULPIFSLS + ULPI FS/LS select + 17 + 1 + read-write + + + ULPIAR + ULPI Auto-resume + 18 + 1 + read-write + + + ULPICSM + ULPI Clock SuspendM + 19 + 1 + read-write + + + ULPIEVBUSD + ULPI External VBUS Drive + 20 + 1 + read-write + + + ULPIEVBUSI + ULPI external VBUS + indicator + 21 + 1 + read-write + + + TSDPS + TermSel DLine pulsing + selection + 22 + 1 + read-write + + + PCCI + Indicator complement + 23 + 1 + read-write + + + PTCI + Indicator pass through + 24 + 1 + read-write + + + ULPIIPD + ULPI interface protect + disable + 25 + 1 + read-write + + + FHMOD + Forced host mode + 29 + 1 + read-write + + + FDMOD + Forced peripheral mode + 30 + 1 + read-write + + + + + OTG_HS_GRSTCTL + OTG_HS_GRSTCTL + OTG_HS reset register + 0x10 + 32 + 0x20000000 + + + CSRST + Core soft reset + 0 + 1 + read-write + + + HSRST + HCLK soft reset + 1 + 1 + read-write + + + FCRST + Host frame counter reset + 2 + 1 + read-write + + + RXFFLSH + RxFIFO flush + 4 + 1 + read-write + + + TXFFLSH + TxFIFO flush + 5 + 1 + read-write + + + TXFNUM + TxFIFO number + 6 + 5 + read-write + + + AHBIDL + AHB master idle + 31 + 1 + read-only + + + DMAREQ + DMA request signal enabled for USB OTG + HS + 30 + 1 + read-only + + + + + OTG_HS_GINTSTS + OTG_HS_GINTSTS + OTG_HS core interrupt register + 0x14 + 32 + 0x04000020 + + + CMOD + Current mode of operation + 0 + 1 + read-only + + + MMIS + Mode mismatch interrupt + 1 + 1 + read-write + + + OTGINT + OTG interrupt + 2 + 1 + read-only + + + SOF + Start of frame + 3 + 1 + read-write + + + RXFLVL + RxFIFO nonempty + 4 + 1 + read-only + + + NPTXFE + Nonperiodic TxFIFO empty + 5 + 1 + read-only + + + GINAKEFF + Global IN nonperiodic NAK + effective + 6 + 1 + read-only + + + BOUTNAKEFF + Global OUT NAK effective + 7 + 1 + read-only + + + ESUSP + Early suspend + 10 + 1 + read-write + + + USBSUSP + USB suspend + 11 + 1 + read-write + + + USBRST + USB reset + 12 + 1 + read-write + + + ENUMDNE + Enumeration done + 13 + 1 + read-write + + + ISOODRP + Isochronous OUT packet dropped + interrupt + 14 + 1 + read-write + + + EOPF + End of periodic frame + interrupt + 15 + 1 + read-write + + + IEPINT + IN endpoint interrupt + 18 + 1 + read-only + + + OEPINT + OUT endpoint interrupt + 19 + 1 + read-only + + + IISOIXFR + Incomplete isochronous IN + transfer + 20 + 1 + read-write + + + PXFR_INCOMPISOOUT + Incomplete periodic + transfer + 21 + 1 + read-write + + + DATAFSUSP + Data fetch suspended + 22 + 1 + read-write + + + HPRTINT + Host port interrupt + 24 + 1 + read-only + + + HCINT + Host channels interrupt + 25 + 1 + read-only + + + PTXFE + Periodic TxFIFO empty + 26 + 1 + read-only + + + CIDSCHG + Connector ID status change + 28 + 1 + read-write + + + DISCINT + Disconnect detected + interrupt + 29 + 1 + read-write + + + SRQINT + Session request/new session detected + interrupt + 30 + 1 + read-write + + + WKUINT + Resume/remote wakeup detected + interrupt + 31 + 1 + read-write + + + + + OTG_HS_GINTMSK + OTG_HS_GINTMSK + OTG_HS interrupt mask register + 0x18 + 32 + 0x0 + + + MMISM + Mode mismatch interrupt + mask + 1 + 1 + read-write + + + OTGINT + OTG interrupt mask + 2 + 1 + read-write + + + SOFM + Start of frame mask + 3 + 1 + read-write + + + RXFLVLM + Receive FIFO nonempty mask + 4 + 1 + read-write + + + NPTXFEM + Nonperiodic TxFIFO empty + mask + 5 + 1 + read-write + + + GINAKEFFM + Global nonperiodic IN NAK effective + mask + 6 + 1 + read-write + + + GONAKEFFM + Global OUT NAK effective + mask + 7 + 1 + read-write + + + ESUSPM + Early suspend mask + 10 + 1 + read-write + + + USBSUSPM + USB suspend mask + 11 + 1 + read-write + + + USBRST + USB reset mask + 12 + 1 + read-write + + + ENUMDNEM + Enumeration done mask + 13 + 1 + read-write + + + ISOODRPM + Isochronous OUT packet dropped interrupt + mask + 14 + 1 + read-write + + + EOPFM + End of periodic frame interrupt + mask + 15 + 1 + read-write + + + IEPINT + IN endpoints interrupt + mask + 18 + 1 + read-write + + + OEPINT + OUT endpoints interrupt + mask + 19 + 1 + read-write + + + IISOIXFRM + Incomplete isochronous IN transfer + mask + 20 + 1 + read-write + + + PXFRM_IISOOXFRM + Incomplete periodic transfer + mask + 21 + 1 + read-write + + + FSUSPM + Data fetch suspended mask + 22 + 1 + read-write + + + PRTIM + Host port interrupt mask + 24 + 1 + read-only + + + HCIM + Host channels interrupt + mask + 25 + 1 + read-write + + + PTXFEM + Periodic TxFIFO empty mask + 26 + 1 + read-write + + + CIDSCHGM + Connector ID status change + mask + 28 + 1 + read-write + + + DISCINT + Disconnect detected interrupt + mask + 29 + 1 + read-write + + + SRQIM + Session request/new session detected + interrupt mask + 30 + 1 + read-write + + + WUIM + Resume/remote wakeup detected interrupt + mask + 31 + 1 + read-write + + + RSTDE + Reset detected interrupt + mask + 23 + 1 + read-write + + + LPMINTM + LPM interrupt mask + 27 + 1 + read-write + + + + + OTG_HS_GRXSTSR_Host + OTG_HS_GRXSTSR_Host + OTG_HS Receive status debug read register + (host mode) + 0x1C + 32 + read-only + 0x0 + + + CHNUM + Channel number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + + + OTG_HS_GRXSTSP_Host + OTG_HS_GRXSTSP_Host + OTG_HS status read and pop register (host + mode) + 0x20 + 32 + read-only + 0x0 + + + CHNUM + Channel number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + + + OTG_HS_GRXFSIZ + OTG_HS_GRXFSIZ + OTG_HS Receive FIFO size + register + 0x24 + 32 + read-write + 0x00000200 + + + RXFD + RxFIFO depth + 0 + 16 + + + + + OTG_HS_HNPTXFSIZ_Host + OTG_HS_HNPTXFSIZ_Host + OTG_HS nonperiodic transmit FIFO size + register (host mode) + 0x28 + 32 + read-write + 0x00000200 + + + NPTXFSA + Nonperiodic transmit RAM start + address + 0 + 16 + + + NPTXFD + Nonperiodic TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF0_Device + OTG_HS_DIEPTXF0_Device + Endpoint 0 transmit FIFO size (peripheral + mode) + OTG_HS_HNPTXFSIZ_Host + 0x28 + 32 + read-write + 0x00000200 + + + TX0FSA + Endpoint 0 transmit RAM start + address + 0 + 16 + + + TX0FD + Endpoint 0 TxFIFO depth + 16 + 16 + + + + + OTG_HS_GNPTXSTS + OTG_HS_GNPTXSTS + OTG_HS nonperiodic transmit FIFO/queue + status register + 0x2C + 32 + read-only + 0x00080200 + + + NPTXFSAV + Nonperiodic TxFIFO space + available + 0 + 16 + + + NPTQXSAV + Nonperiodic transmit request queue space + available + 16 + 8 + + + NPTXQTOP + Top of the nonperiodic transmit request + queue + 24 + 7 + + + + + OTG_HS_GCCFG + OTG_HS_GCCFG + OTG_HS general core configuration + register + 0x38 + 32 + read-write + 0x0 + + + PWRDWN + Power down + 16 + 1 + + + BCDEN + Battery charging detector (BCD) + enable + 17 + 1 + + + DCDEN + Data contact detection (DCD) mode + enable + 18 + 1 + + + PDEN + Primary detection (PD) mode + enable + 19 + 1 + + + SDEN + Secondary detection (SD) mode + enable + 20 + 1 + + + VBDEN + USB VBUS detection enable + 21 + 1 + + + DCDET + Data contact detection (DCD) + status + 0 + 1 + + + PDET + Primary detection (PD) + status + 1 + 1 + + + SDET + Secondary detection (SD) + status + 2 + 1 + + + PS2DET + DM pull-up detection + status + 3 + 1 + + + + + OTG_HS_CID + OTG_HS_CID + OTG_HS core ID register + 0x3C + 32 + read-write + 0x00001200 + + + PRODUCT_ID + Product ID field + 0 + 32 + + + + + OTG_HS_HPTXFSIZ + OTG_HS_HPTXFSIZ + OTG_HS Host periodic transmit FIFO size + register + 0x100 + 32 + read-write + 0x02000600 + + + PTXSA + Host periodic TxFIFO start + address + 0 + 16 + + + PTXFD + Host periodic TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF1 + OTG_HS_DIEPTXF1 + OTG_HS device IN endpoint transmit FIFO size + register + 0x104 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF2 + OTG_HS_DIEPTXF2 + OTG_HS device IN endpoint transmit FIFO size + register + 0x108 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF3 + OTG_HS_DIEPTXF3 + OTG_HS device IN endpoint transmit FIFO size + register + 0x11C + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF4 + OTG_HS_DIEPTXF4 + OTG_HS device IN endpoint transmit FIFO size + register + 0x120 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF5 + OTG_HS_DIEPTXF5 + OTG_HS device IN endpoint transmit FIFO size + register + 0x124 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF6 + OTG_HS_DIEPTXF6 + OTG_HS device IN endpoint transmit FIFO size + register + 0x128 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF7 + OTG_HS_DIEPTXF7 + OTG_HS device IN endpoint transmit FIFO size + register + 0x12C + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_GRXSTSR_Device + OTG_HS_GRXSTSR_Device + OTG_HS Receive status debug read register + (peripheral mode mode) + OTG_HS_GRXSTSR_Host + 0x1C + 32 + read-only + 0x0 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + OTG_HS_GRXSTSP_Device + OTG_HS_GRXSTSP_Device + OTG_HS status read and pop register + (peripheral mode) + OTG_HS_GRXSTSP_Host + 0x20 + 32 + read-only + 0x0 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + OTG_HS_GLPMCFG + OTG_HS_GLPMCFG + OTG core LPM configuration + register + 0x54 + 32 + 0x0 + + + LPMEN + LPM support enable + 0 + 1 + read-write + + + LPMACK + LPM token acknowledge + enable + 1 + 1 + read-write + + + BESL + Best effort service + latency + 2 + 4 + read-only + + + REMWAKE + bRemoteWake value + 6 + 1 + read-only + + + L1SSEN + L1 Shallow Sleep enable + 7 + 1 + read-write + + + BESLTHRS + BESL threshold + 8 + 4 + read-write + + + L1DSEN + L1 deep sleep enable + 12 + 1 + read-write + + + LPMRST + LPM response + 13 + 2 + read-only + + + SLPSTS + Port sleep status + 15 + 1 + read-only + + + L1RSMOK + Sleep State Resume OK + 16 + 1 + read-only + + + LPMCHIDX + LPM Channel Index + 17 + 4 + read-write + + + LPMRCNT + LPM retry count + 21 + 3 + read-write + + + SNDLPM + Send LPM transaction + 24 + 1 + read-write + + + LPMRCNTSTS + LPM retry count status + 25 + 3 + read-only + + + ENBESL + Enable best effort service + latency + 28 + 1 + read-write + + + + + + + OTG2_HS_GLOBAL + 0x40080000 + + OTG_HS_EP1_OUT + OTG_HS out global interrupt + 74 + + + OTG_HS_EP1_IN + OTG_HS in global interrupt + 75 + + + OTG_HS_WKUP + OTG_HS wakeup interrupt + 76 + + + OTG_HS + OTG_HS global interrupt + 77 + + + + OTG1_HS_HOST + USB 1 on the go high speed + USB_OTG_HS + 0x40040400 + + 0x0 + 0x400 + registers + + + + OTG_HS_HCFG + OTG_HS_HCFG + OTG_HS host configuration + register + 0x0 + 32 + 0x0 + + + FSLSPCS + FS/LS PHY clock select + 0 + 2 + read-write + + + FSLSS + FS- and LS-only support + 2 + 1 + read-only + + + + + OTG_HS_HFIR + OTG_HS_HFIR + OTG_HS Host frame interval + register + 0x4 + 32 + read-write + 0x0000EA60 + + + FRIVL + Frame interval + 0 + 16 + + + + + OTG_HS_HFNUM + OTG_HS_HFNUM + OTG_HS host frame number/frame time + remaining register + 0x8 + 32 + read-only + 0x00003FFF + + + FRNUM + Frame number + 0 + 16 + + + FTREM + Frame time remaining + 16 + 16 + + + + + OTG_HS_HPTXSTS + OTG_HS_HPTXSTS + OTG_HS_Host periodic transmit FIFO/queue + status register + 0x10 + 32 + 0x00080100 + + + PTXFSAVL + Periodic transmit data FIFO space + available + 0 + 16 + read-write + + + PTXQSAV + Periodic transmit request queue space + available + 16 + 8 + read-only + + + PTXQTOP + Top of the periodic transmit request + queue + 24 + 8 + read-only + + + + + OTG_HS_HAINT + OTG_HS_HAINT + OTG_HS Host all channels interrupt + register + 0x14 + 32 + read-only + 0x0 + + + HAINT + Channel interrupts + 0 + 16 + + + + + OTG_HS_HAINTMSK + OTG_HS_HAINTMSK + OTG_HS host all channels interrupt mask + register + 0x18 + 32 + read-write + 0x0 + + + HAINTM + Channel interrupt mask + 0 + 16 + + + + + OTG_HS_HPRT + OTG_HS_HPRT + OTG_HS host port control and status + register + 0x40 + 32 + 0x0 + + + PCSTS + Port connect status + 0 + 1 + read-only + + + PCDET + Port connect detected + 1 + 1 + read-write + + + PENA + Port enable + 2 + 1 + read-write + + + PENCHNG + Port enable/disable change + 3 + 1 + read-write + + + POCA + Port overcurrent active + 4 + 1 + read-only + + + POCCHNG + Port overcurrent change + 5 + 1 + read-write + + + PRES + Port resume + 6 + 1 + read-write + + + PSUSP + Port suspend + 7 + 1 + read-write + + + PRST + Port reset + 8 + 1 + read-write + + + PLSTS + Port line status + 10 + 2 + read-only + + + PPWR + Port power + 12 + 1 + read-write + + + PTCTL + Port test control + 13 + 4 + read-write + + + PSPD + Port speed + 17 + 2 + read-only + + + + + OTG_HS_HCCHAR0 + OTG_HS_HCCHAR0 + OTG_HS host channel-0 characteristics + register + 0x100 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR1 + OTG_HS_HCCHAR1 + OTG_HS host channel-1 characteristics + register + 0x120 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR2 + OTG_HS_HCCHAR2 + OTG_HS host channel-2 characteristics + register + 0x140 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR3 + OTG_HS_HCCHAR3 + OTG_HS host channel-3 characteristics + register + 0x160 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR4 + OTG_HS_HCCHAR4 + OTG_HS host channel-4 characteristics + register + 0x180 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR5 + OTG_HS_HCCHAR5 + OTG_HS host channel-5 characteristics + register + 0x1A0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR6 + OTG_HS_HCCHAR6 + OTG_HS host channel-6 characteristics + register + 0x1C0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR7 + OTG_HS_HCCHAR7 + OTG_HS host channel-7 characteristics + register + 0x1E0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR8 + OTG_HS_HCCHAR8 + OTG_HS host channel-8 characteristics + register + 0x200 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR9 + OTG_HS_HCCHAR9 + OTG_HS host channel-9 characteristics + register + 0x220 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR10 + OTG_HS_HCCHAR10 + OTG_HS host channel-10 characteristics + register + 0x240 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR11 + OTG_HS_HCCHAR11 + OTG_HS host channel-11 characteristics + register + 0x260 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT0 + OTG_HS_HCSPLT0 + OTG_HS host channel-0 split control + register + 0x104 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT1 + OTG_HS_HCSPLT1 + OTG_HS host channel-1 split control + register + 0x124 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT2 + OTG_HS_HCSPLT2 + OTG_HS host channel-2 split control + register + 0x144 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT3 + OTG_HS_HCSPLT3 + OTG_HS host channel-3 split control + register + 0x164 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT4 + OTG_HS_HCSPLT4 + OTG_HS host channel-4 split control + register + 0x184 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT5 + OTG_HS_HCSPLT5 + OTG_HS host channel-5 split control + register + 0x1A4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT6 + OTG_HS_HCSPLT6 + OTG_HS host channel-6 split control + register + 0x1C4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT7 + OTG_HS_HCSPLT7 + OTG_HS host channel-7 split control + register + 0x1E4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT8 + OTG_HS_HCSPLT8 + OTG_HS host channel-8 split control + register + 0x204 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT9 + OTG_HS_HCSPLT9 + OTG_HS host channel-9 split control + register + 0x224 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT10 + OTG_HS_HCSPLT10 + OTG_HS host channel-10 split control + register + 0x244 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT11 + OTG_HS_HCSPLT11 + OTG_HS host channel-11 split control + register + 0x264 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT0 + OTG_HS_HCINT0 + OTG_HS host channel-11 interrupt + register + 0x108 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT1 + OTG_HS_HCINT1 + OTG_HS host channel-1 interrupt + register + 0x128 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT2 + OTG_HS_HCINT2 + OTG_HS host channel-2 interrupt + register + 0x148 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT3 + OTG_HS_HCINT3 + OTG_HS host channel-3 interrupt + register + 0x168 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT4 + OTG_HS_HCINT4 + OTG_HS host channel-4 interrupt + register + 0x188 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT5 + OTG_HS_HCINT5 + OTG_HS host channel-5 interrupt + register + 0x1A8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT6 + OTG_HS_HCINT6 + OTG_HS host channel-6 interrupt + register + 0x1C8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT7 + OTG_HS_HCINT7 + OTG_HS host channel-7 interrupt + register + 0x1E8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT8 + OTG_HS_HCINT8 + OTG_HS host channel-8 interrupt + register + 0x208 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT9 + OTG_HS_HCINT9 + OTG_HS host channel-9 interrupt + register + 0x228 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT10 + OTG_HS_HCINT10 + OTG_HS host channel-10 interrupt + register + 0x248 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT11 + OTG_HS_HCINT11 + OTG_HS host channel-11 interrupt + register + 0x268 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK0 + OTG_HS_HCINTMSK0 + OTG_HS host channel-11 interrupt mask + register + 0x10C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK1 + OTG_HS_HCINTMSK1 + OTG_HS host channel-1 interrupt mask + register + 0x12C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK2 + OTG_HS_HCINTMSK2 + OTG_HS host channel-2 interrupt mask + register + 0x14C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK3 + OTG_HS_HCINTMSK3 + OTG_HS host channel-3 interrupt mask + register + 0x16C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK4 + OTG_HS_HCINTMSK4 + OTG_HS host channel-4 interrupt mask + register + 0x18C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK5 + OTG_HS_HCINTMSK5 + OTG_HS host channel-5 interrupt mask + register + 0x1AC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK6 + OTG_HS_HCINTMSK6 + OTG_HS host channel-6 interrupt mask + register + 0x1CC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK7 + OTG_HS_HCINTMSK7 + OTG_HS host channel-7 interrupt mask + register + 0x1EC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK8 + OTG_HS_HCINTMSK8 + OTG_HS host channel-8 interrupt mask + register + 0x20C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK9 + OTG_HS_HCINTMSK9 + OTG_HS host channel-9 interrupt mask + register + 0x22C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK10 + OTG_HS_HCINTMSK10 + OTG_HS host channel-10 interrupt mask + register + 0x24C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK11 + OTG_HS_HCINTMSK11 + OTG_HS host channel-11 interrupt mask + register + 0x26C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ0 + OTG_HS_HCTSIZ0 + OTG_HS host channel-11 transfer size + register + 0x110 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ1 + OTG_HS_HCTSIZ1 + OTG_HS host channel-1 transfer size + register + 0x130 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ2 + OTG_HS_HCTSIZ2 + OTG_HS host channel-2 transfer size + register + 0x150 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ3 + OTG_HS_HCTSIZ3 + OTG_HS host channel-3 transfer size + register + 0x170 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ4 + OTG_HS_HCTSIZ4 + OTG_HS host channel-4 transfer size + register + 0x190 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ5 + OTG_HS_HCTSIZ5 + OTG_HS host channel-5 transfer size + register + 0x1B0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ6 + OTG_HS_HCTSIZ6 + OTG_HS host channel-6 transfer size + register + 0x1D0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ7 + OTG_HS_HCTSIZ7 + OTG_HS host channel-7 transfer size + register + 0x1F0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ8 + OTG_HS_HCTSIZ8 + OTG_HS host channel-8 transfer size + register + 0x210 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ9 + OTG_HS_HCTSIZ9 + OTG_HS host channel-9 transfer size + register + 0x230 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ10 + OTG_HS_HCTSIZ10 + OTG_HS host channel-10 transfer size + register + 0x250 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ11 + OTG_HS_HCTSIZ11 + OTG_HS host channel-11 transfer size + register + 0x270 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA0 + OTG_HS_HCDMA0 + OTG_HS host channel-0 DMA address + register + 0x114 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA1 + OTG_HS_HCDMA1 + OTG_HS host channel-1 DMA address + register + 0x134 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA2 + OTG_HS_HCDMA2 + OTG_HS host channel-2 DMA address + register + 0x154 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA3 + OTG_HS_HCDMA3 + OTG_HS host channel-3 DMA address + register + 0x174 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA4 + OTG_HS_HCDMA4 + OTG_HS host channel-4 DMA address + register + 0x194 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA5 + OTG_HS_HCDMA5 + OTG_HS host channel-5 DMA address + register + 0x1B4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA6 + OTG_HS_HCDMA6 + OTG_HS host channel-6 DMA address + register + 0x1D4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA7 + OTG_HS_HCDMA7 + OTG_HS host channel-7 DMA address + register + 0x1F4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA8 + OTG_HS_HCDMA8 + OTG_HS host channel-8 DMA address + register + 0x214 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA9 + OTG_HS_HCDMA9 + OTG_HS host channel-9 DMA address + register + 0x234 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA10 + OTG_HS_HCDMA10 + OTG_HS host channel-10 DMA address + register + 0x254 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA11 + OTG_HS_HCDMA11 + OTG_HS host channel-11 DMA address + register + 0x274 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR12 + OTG_HS_HCCHAR12 + OTG_HS host channel-12 characteristics + register + 0x278 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT12 + OTG_HS_HCSPLT12 + OTG_HS host channel-12 split control + register + 0x27C + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT12 + OTG_HS_HCINT12 + OTG_HS host channel-12 interrupt + register + 0x280 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK12 + OTG_HS_HCINTMSK12 + OTG_HS host channel-12 interrupt mask + register + 0x284 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ12 + OTG_HS_HCTSIZ12 + OTG_HS host channel-12 transfer size + register + 0x288 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA12 + OTG_HS_HCDMA12 + OTG_HS host channel-12 DMA address + register + 0x28C + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR13 + OTG_HS_HCCHAR13 + OTG_HS host channel-13 characteristics + register + 0x290 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT13 + OTG_HS_HCSPLT13 + OTG_HS host channel-13 split control + register + 0x294 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT13 + OTG_HS_HCINT13 + OTG_HS host channel-13 interrupt + register + 0x298 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK13 + OTG_HS_HCINTMSK13 + OTG_HS host channel-13 interrupt mask + register + 0x29C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALLM response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ13 + OTG_HS_HCTSIZ13 + OTG_HS host channel-13 transfer size + register + 0x2A0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA13 + OTG_HS_HCDMA13 + OTG_HS host channel-13 DMA address + register + 0x2A4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR14 + OTG_HS_HCCHAR14 + OTG_HS host channel-14 characteristics + register + 0x2A8 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT14 + OTG_HS_HCSPLT14 + OTG_HS host channel-14 split control + register + 0x2AC + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT14 + OTG_HS_HCINT14 + OTG_HS host channel-14 interrupt + register + 0x2B0 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK14 + OTG_HS_HCINTMSK14 + OTG_HS host channel-14 interrupt mask + register + 0x2B4 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAKM response received interrupt + mask + 4 + 1 + + + ACKM + ACKM response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ14 + OTG_HS_HCTSIZ14 + OTG_HS host channel-14 transfer size + register + 0x2B8 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA14 + OTG_HS_HCDMA14 + OTG_HS host channel-14 DMA address + register + 0x2BC + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR15 + OTG_HS_HCCHAR15 + OTG_HS host channel-15 characteristics + register + 0x2C0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT15 + OTG_HS_HCSPLT15 + OTG_HS host channel-15 split control + register + 0x2C4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT15 + OTG_HS_HCINT15 + OTG_HS host channel-15 interrupt + register + 0x2C8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK15 + OTG_HS_HCINTMSK15 + OTG_HS host channel-15 interrupt mask + register + 0x2CC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ15 + OTG_HS_HCTSIZ15 + OTG_HS host channel-15 transfer size + register + 0x2D0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA15 + OTG_HS_HCDMA15 + OTG_HS host channel-15 DMA address + register + 0x2D4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + + + OTG2_HS_HOST + 0x40080400 + + + OTG1_HS_DEVICE + USB 1 on the go high speed + USB_OTG_HS + 0x40040800 + + 0x0 + 0x400 + registers + + + + OTG_HS_DCFG + OTG_HS_DCFG + OTG_HS device configuration + register + 0x0 + 32 + read-write + 0x02200000 + + + DSPD + Device speed + 0 + 2 + + + NZLSOHSK + Nonzero-length status OUT + handshake + 2 + 1 + + + DAD + Device address + 4 + 7 + + + PFIVL + Periodic (micro)frame + interval + 11 + 2 + + + PERSCHIVL + Periodic scheduling + interval + 24 + 2 + + + + + OTG_HS_DCTL + OTG_HS_DCTL + OTG_HS device control register + 0x4 + 32 + 0x0 + + + RWUSIG + Remote wakeup signaling + 0 + 1 + read-write + + + SDIS + Soft disconnect + 1 + 1 + read-write + + + GINSTS + Global IN NAK status + 2 + 1 + read-only + + + GONSTS + Global OUT NAK status + 3 + 1 + read-only + + + TCTL + Test control + 4 + 3 + read-write + + + SGINAK + Set global IN NAK + 7 + 1 + write-only + + + CGINAK + Clear global IN NAK + 8 + 1 + write-only + + + SGONAK + Set global OUT NAK + 9 + 1 + write-only + + + CGONAK + Clear global OUT NAK + 10 + 1 + write-only + + + POPRGDNE + Power-on programming done + 11 + 1 + read-write + + + + + OTG_HS_DSTS + OTG_HS_DSTS + OTG_HS device status register + 0x8 + 32 + read-only + 0x00000010 + + + SUSPSTS + Suspend status + 0 + 1 + + + ENUMSPD + Enumerated speed + 1 + 2 + + + EERR + Erratic error + 3 + 1 + + + FNSOF + Frame number of the received + SOF + 8 + 14 + + + + + OTG_HS_DIEPMSK + OTG_HS_DIEPMSK + OTG_HS device IN endpoint common interrupt + mask register + 0x10 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed interrupt + mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt + mask + 1 + 1 + + + TOM + Timeout condition mask (nonisochronous + endpoints) + 3 + 1 + + + ITTXFEMSK + IN token received when TxFIFO empty + mask + 4 + 1 + + + INEPNMM + IN token received with EP mismatch + mask + 5 + 1 + + + INEPNEM + IN endpoint NAK effective + mask + 6 + 1 + + + TXFURM + FIFO underrun mask + 8 + 1 + + + BIM + BNA interrupt mask + 9 + 1 + + + + + OTG_HS_DOEPMSK + OTG_HS_DOEPMSK + OTG_HS device OUT endpoint common interrupt + mask register + 0x14 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed interrupt + mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt + mask + 1 + 1 + + + STUPM + SETUP phase done mask + 3 + 1 + + + OTEPDM + OUT token received when endpoint + disabled mask + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets received + mask + 6 + 1 + + + OPEM + OUT packet error mask + 8 + 1 + + + BOIM + BNA interrupt mask + 9 + 1 + + + + + OTG_HS_DAINT + OTG_HS_DAINT + OTG_HS device all endpoints interrupt + register + 0x18 + 32 + read-only + 0x0 + + + IEPINT + IN endpoint interrupt bits + 0 + 16 + + + OEPINT + OUT endpoint interrupt + bits + 16 + 16 + + + + + OTG_HS_DAINTMSK + OTG_HS_DAINTMSK + OTG_HS all endpoints interrupt mask + register + 0x1C + 32 + read-write + 0x0 + + + IEPM + IN EP interrupt mask bits + 0 + 16 + + + OEPM + OUT EP interrupt mask bits + 16 + 16 + + + + + OTG_HS_DVBUSDIS + OTG_HS_DVBUSDIS + OTG_HS device VBUS discharge time + register + 0x28 + 32 + read-write + 0x000017D7 + + + VBUSDT + Device VBUS discharge time + 0 + 16 + + + + + OTG_HS_DVBUSPULSE + OTG_HS_DVBUSPULSE + OTG_HS device VBUS pulsing time + register + 0x2C + 32 + read-write + 0x000005B8 + + + DVBUSP + Device VBUS pulsing time + 0 + 12 + + + + + OTG_HS_DTHRCTL + OTG_HS_DTHRCTL + OTG_HS Device threshold control + register + 0x30 + 32 + read-write + 0x0 + + + NONISOTHREN + Nonisochronous IN endpoints threshold + enable + 0 + 1 + + + ISOTHREN + ISO IN endpoint threshold + enable + 1 + 1 + + + TXTHRLEN + Transmit threshold length + 2 + 9 + + + RXTHREN + Receive threshold enable + 16 + 1 + + + RXTHRLEN + Receive threshold length + 17 + 9 + + + ARPEN + Arbiter parking enable + 27 + 1 + + + + + OTG_HS_DIEPEMPMSK + OTG_HS_DIEPEMPMSK + OTG_HS device IN endpoint FIFO empty + interrupt mask register + 0x34 + 32 + read-write + 0x0 + + + INEPTXFEM + IN EP Tx FIFO empty interrupt mask + bits + 0 + 16 + + + + + OTG_HS_DEACHINT + OTG_HS_DEACHINT + OTG_HS device each endpoint interrupt + register + 0x38 + 32 + read-write + 0x0 + + + IEP1INT + IN endpoint 1interrupt bit + 1 + 1 + + + OEP1INT + OUT endpoint 1 interrupt + bit + 17 + 1 + + + + + OTG_HS_DEACHINTMSK + OTG_HS_DEACHINTMSK + OTG_HS device each endpoint interrupt + register mask + 0x3C + 32 + read-write + 0x0 + + + IEP1INTM + IN Endpoint 1 interrupt mask + bit + 1 + 1 + + + OEP1INTM + OUT Endpoint 1 interrupt mask + bit + 17 + 1 + + + + + OTG_HS_DIEPCTL0 + OTG_HS_DIEPCTL0 + OTG device endpoint-0 control + register + 0x100 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL1 + OTG_HS_DIEPCTL1 + OTG device endpoint-1 control + register + 0x120 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL2 + OTG_HS_DIEPCTL2 + OTG device endpoint-2 control + register + 0x140 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL3 + OTG_HS_DIEPCTL3 + OTG device endpoint-3 control + register + 0x160 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL4 + OTG_HS_DIEPCTL4 + OTG device endpoint-4 control + register + 0x180 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL5 + OTG_HS_DIEPCTL5 + OTG device endpoint-5 control + register + 0x1A0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL6 + OTG_HS_DIEPCTL6 + OTG device endpoint-6 control + register + 0x1C0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL7 + OTG_HS_DIEPCTL7 + OTG device endpoint-7 control + register + 0x1E0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPINT0 + OTG_HS_DIEPINT0 + OTG device endpoint-0 interrupt + register + 0x108 + 32 + 0x00000080 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT1 + OTG_HS_DIEPINT1 + OTG device endpoint-1 interrupt + register + 0x128 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT2 + OTG_HS_DIEPINT2 + OTG device endpoint-2 interrupt + register + 0x148 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT3 + OTG_HS_DIEPINT3 + OTG device endpoint-3 interrupt + register + 0x168 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT4 + OTG_HS_DIEPINT4 + OTG device endpoint-4 interrupt + register + 0x188 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT5 + OTG_HS_DIEPINT5 + OTG device endpoint-5 interrupt + register + 0x1A8 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT6 + OTG_HS_DIEPINT6 + OTG device endpoint-6 interrupt + register + 0x1C8 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT7 + OTG_HS_DIEPINT7 + OTG device endpoint-7 interrupt + register + 0x1E8 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPTSIZ0 + OTG_HS_DIEPTSIZ0 + OTG_HS device IN endpoint 0 transfer size + register + 0x110 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 7 + + + PKTCNT + Packet count + 19 + 2 + + + + + OTG_HS_DIEPDMA1 + OTG_HS_DIEPDMA1 + OTG_HS device endpoint-1 DMA address + register + 0x114 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA2 + OTG_HS_DIEPDMA2 + OTG_HS device endpoint-2 DMA address + register + 0x134 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA3 + OTG_HS_DIEPDMA3 + OTG_HS device endpoint-3 DMA address + register + 0x154 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA4 + OTG_HS_DIEPDMA4 + OTG_HS device endpoint-4 DMA address + register + 0x174 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA5 + OTG_HS_DIEPDMA5 + OTG_HS device endpoint-5 DMA address + register + 0x194 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DTXFSTS0 + OTG_HS_DTXFSTS0 + OTG_HS device IN endpoint transmit FIFO + status register + 0x118 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS1 + OTG_HS_DTXFSTS1 + OTG_HS device IN endpoint transmit FIFO + status register + 0x138 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS2 + OTG_HS_DTXFSTS2 + OTG_HS device IN endpoint transmit FIFO + status register + 0x158 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS3 + OTG_HS_DTXFSTS3 + OTG_HS device IN endpoint transmit FIFO + status register + 0x178 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS4 + OTG_HS_DTXFSTS4 + OTG_HS device IN endpoint transmit FIFO + status register + 0x198 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS5 + OTG_HS_DTXFSTS5 + OTG_HS device IN endpoint transmit FIFO + status register + 0x1B8 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DIEPTSIZ1 + OTG_HS_DIEPTSIZ1 + OTG_HS device endpoint transfer size + register + 0x130 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ2 + OTG_HS_DIEPTSIZ2 + OTG_HS device endpoint transfer size + register + 0x150 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ3 + OTG_HS_DIEPTSIZ3 + OTG_HS device endpoint transfer size + register + 0x170 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ4 + OTG_HS_DIEPTSIZ4 + OTG_HS device endpoint transfer size + register + 0x190 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ5 + OTG_HS_DIEPTSIZ5 + OTG_HS device endpoint transfer size + register + 0x1B0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DOEPCTL0 + OTG_HS_DOEPCTL0 + OTG_HS device control OUT endpoint 0 control + register + 0x300 + 32 + 0x00008000 + + + MPSIZ + Maximum packet size + 0 + 2 + read-only + + + USBAEP + USB active endpoint + 15 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-only + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-only + + + EPENA + Endpoint enable + 31 + 1 + write-only + + + + + OTG_HS_DOEPCTL1 + OTG_HS_DOEPCTL1 + OTG device endpoint-1 control + register + 0x320 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL2 + OTG_HS_DOEPCTL2 + OTG device endpoint-2 control + register + 0x340 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL3 + OTG_HS_DOEPCTL3 + OTG device endpoint-3 control + register + 0x360 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPINT0 + OTG_HS_DOEPINT0 + OTG_HS device endpoint-0 interrupt + register + 0x308 + 32 + read-write + 0x00000080 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT1 + OTG_HS_DOEPINT1 + OTG_HS device endpoint-1 interrupt + register + 0x328 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT2 + OTG_HS_DOEPINT2 + OTG_HS device endpoint-2 interrupt + register + 0x348 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT3 + OTG_HS_DOEPINT3 + OTG_HS device endpoint-3 interrupt + register + 0x368 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT4 + OTG_HS_DOEPINT4 + OTG_HS device endpoint-4 interrupt + register + 0x388 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT5 + OTG_HS_DOEPINT5 + OTG_HS device endpoint-5 interrupt + register + 0x3A8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT6 + OTG_HS_DOEPINT6 + OTG_HS device endpoint-6 interrupt + register + 0x3C8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT7 + OTG_HS_DOEPINT7 + OTG_HS device endpoint-7 interrupt + register + 0x3E8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPTSIZ0 + OTG_HS_DOEPTSIZ0 + OTG_HS device endpoint-0 transfer size + register + 0x310 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 7 + + + PKTCNT + Packet count + 19 + 1 + + + STUPCNT + SETUP packet count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ1 + OTG_HS_DOEPTSIZ1 + OTG_HS device endpoint-1 transfer size + register + 0x330 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ2 + OTG_HS_DOEPTSIZ2 + OTG_HS device endpoint-2 transfer size + register + 0x350 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ3 + OTG_HS_DOEPTSIZ3 + OTG_HS device endpoint-3 transfer size + register + 0x370 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ4 + OTG_HS_DOEPTSIZ4 + OTG_HS device endpoint-4 transfer size + register + 0x390 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ6 + OTG_HS_DIEPTSIZ6 + OTG_HS device endpoint transfer size + register + OTG_HS_DIEPCTL5 + 0x1A0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DTXFSTS6 + OTG_HS_DTXFSTS6 + OTG_HS device IN endpoint transmit FIFO + status register + 0x1A4 + 32 + read-write + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DIEPTSIZ7 + OTG_HS_DIEPTSIZ7 + OTG_HS device endpoint transfer size + register + OTG_HS_DIEPINT5 + 0x1A8 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DTXFSTS7 + OTG_HS_DTXFSTS7 + OTG_HS device IN endpoint transmit FIFO + status register + 0x1AC + 32 + read-write + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DOEPCTL4 + OTG_HS_DOEPCTL4 + OTG device endpoint-4 control + register + 0x380 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL5 + OTG_HS_DOEPCTL5 + OTG device endpoint-5 control + register + 0x3A0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL6 + OTG_HS_DOEPCTL6 + OTG device endpoint-6 control + register + 0x3C0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL7 + OTG_HS_DOEPCTL7 + OTG device endpoint-7 control + register + 0x3E0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPTSIZ5 + OTG_HS_DOEPTSIZ5 + OTG_HS device endpoint-5 transfer size + register + 0x3B0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ6 + OTG_HS_DOEPTSIZ6 + OTG_HS device endpoint-6 transfer size + register + 0x3D0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ7 + OTG_HS_DOEPTSIZ7 + OTG_HS device endpoint-7 transfer size + register + 0x3F0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + + + OTG2_HS_DEVICE + 0x40080800 + + + OTG1_HS_PWRCLK + USB 1 on the go high speed + USB_OTG_HS + 0x40040E00 + + 0x0 + 0x3F200 + registers + + + + OTG_HS_PCGCR + OTG_HS_PCGCR + Power and clock gating control + register + 0x0 + 32 + read-write + 0x0 + + + STPPCLK + Stop PHY clock + 0 + 1 + + + GATEHCLK + Gate HCLK + 1 + 1 + + + PHYSUSP + PHY suspended + 4 + 1 + + + + + + + OTG2_HS_PWRCLK + 0x40080E00 + + + Ethernet_MAC + Ethernet: media access control + (MAC) + Ethernet + 0x40028000 + + 0x0 + 0x1400 + registers + + + ETH + Ethernet global interrupt + 61 + + + ETH_WKUP + Ethernet wakeup through EXTI + 62 + + + + DMAMR + DMAMR + DMA mode register + 0x1000 + 0x20 + 0x00000000 + + + SWR + Software Reset + 0 + 1 + read-write + + + DA + DMA Tx or Rx Arbitration + Scheme + 1 + 1 + read-only + + + TXPR + Transmit priority + 11 + 1 + read-only + + + PR + Priority ratio + 12 + 3 + read-only + + + INTM + Interrupt Mode + 16 + 1 + read-write + + + + + DMASBMR + DMASBMR + System bus mode register + 0x1004 + 0x20 + 0x01010000 + + + FB + Fixed Burst Length + 0 + 1 + read-write + + + AAL + Address-Aligned Beats + 12 + 1 + read-write + + + MB + Mixed Burst + 14 + 1 + read-only + + + RB + Rebuild INCRx Burst + 15 + 1 + read-only + + + + + DMAISR + DMAISR + Interrupt status register + 0x1008 + 0x20 + read-only + 0x00000000 + + + DC0IS + DMA Channel Interrupt + Status + 0 + 1 + + + MTLIS + MTL Interrupt Status + 16 + 1 + + + MACIS + MAC Interrupt Status + 17 + 1 + + + + + DMADSR + DMADSR + Debug status register + 0x100C + 0x20 + read-only + 0x00000000 + + + AXWHSTS + AHB Master Write Channel + 0 + 1 + + + RPS0 + DMA Channel Receive Process + State + 8 + 4 + + + TPS0 + DMA Channel Transmit Process + State + 12 + 4 + + + + + DMACCR + DMACCR + Channel control register + 0x1100 + 0x20 + read-write + 0x00000000 + + + MSS + Maximum Segment Size + 0 + 14 + + + PBLX8 + 8xPBL mode + 16 + 1 + + + DSL + Descriptor Skip Length + 18 + 3 + + + + + DMACTxCR + DMACTxCR + Channel transmit control + register + 0x1104 + 0x20 + read-write + 0x00000000 + + + ST + Start or Stop Transmission + Command + 0 + 1 + + + OSF + Operate on Second Packet + 4 + 1 + + + TSE + TCP Segmentation Enabled + 12 + 1 + + + TXPBL + Transmit Programmable Burst + Length + 16 + 6 + + + + + DMACRxCR + DMACRxCR + Channel receive control + register + 0x1108 + 0x20 + read-write + 0x00000000 + + + SR + Start or Stop Receive + Command + 0 + 1 + + + RBSZ + Receive Buffer size + 1 + 14 + + + RXPBL + RXPBL + 16 + 6 + + + RPF + DMA Rx Channel Packet + Flush + 31 + 1 + + + + + DMACTxDLAR + DMACTxDLAR + Channel Tx descriptor list address + register + 0x1114 + 0x20 + read-write + 0x00000000 + + + TDESLA + Start of Transmit List + 2 + 30 + + + + + DMACRxDLAR + DMACRxDLAR + Channel Rx descriptor list address + register + 0x111C + 0x20 + read-write + 0x00000000 + + + RDESLA + Start of Receive List + 2 + 30 + + + + + DMACTxDTPR + DMACTxDTPR + Channel Tx descriptor tail pointer + register + 0x1120 + 0x20 + read-write + 0x00000000 + + + TDT + Transmit Descriptor Tail + Pointer + 2 + 30 + + + + + DMACRxDTPR + DMACRxDTPR + Channel Rx descriptor tail pointer + register + 0x1128 + 0x20 + read-write + 0x00000000 + + + RDT + Receive Descriptor Tail + Pointer + 2 + 30 + + + + + DMACTxRLR + DMACTxRLR + Channel Tx descriptor ring length + register + 0x112C + 0x20 + read-write + 0x00000000 + + + TDRL + Transmit Descriptor Ring + Length + 0 + 10 + + + + + DMACRxRLR + DMACRxRLR + Channel Rx descriptor ring length + register + 0x1130 + 0x20 + read-write + 0x00000000 + + + RDRL + Receive Descriptor Ring + Length + 0 + 10 + + + + + DMACIER + DMACIER + Channel interrupt enable + register + 0x1134 + 0x20 + read-write + 0x00000000 + + + TIE + Transmit Interrupt Enable + 0 + 1 + + + TXSE + Transmit Stopped Enable + 1 + 1 + + + TBUE + Transmit Buffer Unavailable + Enable + 2 + 1 + + + RIE + Receive Interrupt Enable + 6 + 1 + + + RBUE + Receive Buffer Unavailable + Enable + 7 + 1 + + + RSE + Receive Stopped Enable + 8 + 1 + + + RWTE + Receive Watchdog Timeout + Enable + 9 + 1 + + + ETIE + Early Transmit Interrupt + Enable + 10 + 1 + + + ERIE + Early Receive Interrupt + Enable + 11 + 1 + + + FBEE + Fatal Bus Error Enable + 12 + 1 + + + CDEE + Context Descriptor Error + Enable + 13 + 1 + + + AIE + Abnormal Interrupt Summary + Enable + 14 + 1 + + + NIE + Normal Interrupt Summary + Enable + 15 + 1 + + + + + DMACRxIWTR + DMACRxIWTR + Channel Rx interrupt watchdog timer + register + 0x1138 + 0x20 + read-write + 0x00000000 + + + RWT + Receive Interrupt Watchdog Timer + Count + 0 + 8 + + + + + DMACCATxDR + DMACCATxDR + Channel current application transmit + descriptor register + 0x1144 + 0x20 + read-only + 0x00000000 + + + CURTDESAPTR + Application Transmit Descriptor Address + Pointer + 0 + 32 + + + + + DMACCARxDR + DMACCARxDR + Channel current application receive + descriptor register + 0x114C + 0x20 + read-only + 0x00000000 + + + CURRDESAPTR + Application Receive Descriptor Address + Pointer + 0 + 32 + + + + + DMACCATxBR + DMACCATxBR + Channel current application transmit buffer + register + 0x1154 + 0x20 + read-only + 0x00000000 + + + CURTBUFAPTR + Application Transmit Buffer Address + Pointer + 0 + 32 + + + + + DMACCARxBR + DMACCARxBR + Channel current application receive buffer + register + 0x115C + 0x20 + read-only + 0x00000000 + + + CURRBUFAPTR + Application Receive Buffer Address + Pointer + 0 + 32 + + + + + DMACSR + DMACSR + Channel status register + 0x1160 + 0x20 + 0x00000000 + + + TI + Transmit Interrupt + 0 + 1 + read-write + + + TPS + Transmit Process Stopped + 1 + 1 + read-write + + + TBU + Transmit Buffer + Unavailable + 2 + 1 + read-write + + + RI + Receive Interrupt + 6 + 1 + read-write + + + RBU + Receive Buffer Unavailable + 7 + 1 + read-write + + + RPS + Receive Process Stopped + 8 + 1 + read-write + + + RWT + Receive Watchdog Timeout + 9 + 1 + read-write + + + ET + Early Transmit Interrupt + 10 + 1 + read-write + + + ER + Early Receive Interrupt + 11 + 1 + read-write + + + FBE + Fatal Bus Error + 12 + 1 + read-write + + + CDE + Context Descriptor Error + 13 + 1 + read-write + + + AIS + Abnormal Interrupt Summary + 14 + 1 + read-write + + + NIS + Normal Interrupt Summary + 15 + 1 + read-write + + + TEB + Tx DMA Error Bits + 16 + 3 + read-only + + + REB + Rx DMA Error Bits + 19 + 3 + read-only + + + + + DMACMFCR + DMACMFCR + Channel missed frame count + register + 0x116C + 0x20 + read-only + 0x00000000 + + + MFC + Dropped Packet Counters + 0 + 11 + + + MFCO + Overflow status of the MFC + Counter + 15 + 1 + + + + + MTLOMR + MTLOMR + Operating mode Register + 0xC00 + 0x20 + read-write + 0x00000000 + + + DTXSTS + DTXSTS + 1 + 1 + + + CNTPRST + CNTPRST + 8 + 1 + + + CNTCLR + CNTCLR + 9 + 1 + + + + + MTLISR + MTLISR + Interrupt status Register + 0xC20 + 0x20 + read-only + 0x00000000 + + + Q0IS + Queue interrupt status + 0 + 1 + + + + + MTLTxQOMR + MTLTxQOMR + Tx queue operating mode + Register + 0xD00 + 0x20 + 0x00070008 + + + FTQ + Flush Transmit Queue + 0 + 1 + read-write + + + TSF + Transmit Store and Forward + 1 + 1 + read-write + + + TXQEN + Transmit Queue Enable + 2 + 2 + read-only + + + TTC + Transmit Threshold Control + 4 + 3 + read-write + + + TQS + Transmit Queue Size + 16 + 9 + read-write + + + + + MTLTxQUR + MTLTxQUR + Tx queue underflow register + 0xD04 + 0x20 + read-only + 0x00000000 + + + UFFRMCNT + Underflow Packet Counter + 0 + 11 + + + UFCNTOVF + UFCNTOVF + 11 + 1 + + + + + MTLTxQDR + MTLTxQDR + Tx queue debug Register + 0xD08 + 0x20 + read-only + 0x00000000 + + + TXQPAUSED + TXQPAUSED + 0 + 1 + + + TRCSTS + TRCSTS + 1 + 2 + + + TWCSTS + TWCSTS + 3 + 1 + + + TXQSTS + TXQSTS + 4 + 1 + + + TXSTSFSTS + TXSTSFSTS + 5 + 1 + + + PTXQ + PTXQ + 16 + 3 + + + STXSTSF + STXSTSF + 20 + 3 + + + + + MTLQICSR + MTLQICSR + Queue interrupt control status + Register + 0xD2C + 0x20 + read-write + 0x00000000 + + + TXUNFIS + TXUNFIS + 0 + 1 + + + TXUIE + TXUIE + 8 + 1 + + + RXOVFIS + RXOVFIS + 16 + 1 + + + RXOIE + RXOIE + 24 + 1 + + + + + MTLRxQOMR + MTLRxQOMR + Rx queue operating mode + register + 0xD30 + 0x20 + 0x00700000 + + + RTC + RTC + 0 + 2 + read-write + + + FUP + FUP + 3 + 1 + read-write + + + FEP + FEP + 4 + 1 + read-write + + + RSF + RSF + 5 + 1 + read-write + + + DIS_TCP_EF + DIS_TCP_EF + 6 + 1 + read-write + + + EHFC + EHFC + 7 + 1 + read-write + + + RFA + RFA + 8 + 3 + read-write + + + RFD + RFD + 14 + 3 + read-write + + + RQS + RQS + 20 + 3 + read-only + + + + + MTLRxQMPOCR + MTLRxQMPOCR + Rx queue missed packet and overflow counter + register + 0xD34 + 0x20 + read-only + 0x00000000 + + + OVFPKTCNT + OVFPKTCNT + 0 + 11 + + + OVFCNTOVF + OVFCNTOVF + 11 + 1 + + + MISPKTCNT + MISPKTCNT + 16 + 11 + + + MISCNTOVF + MISCNTOVF + 27 + 1 + + + + + MTLRxQDR + MTLRxQDR + Rx queue debug register + 0xD38 + 0x20 + read-only + 0x00000000 + + + RWCSTS + RWCSTS + 0 + 1 + + + RRCSTS + RRCSTS + 1 + 2 + + + RXQSTS + RXQSTS + 4 + 2 + + + PRXQ + PRXQ + 16 + 14 + + + + + MACCR + MACCR + Operating mode configuration + register + 0x0 + 0x20 + read-write + 0x00000000 + + + RE + Receiver Enable + 0 + 1 + + + TE + TE + 1 + 1 + + + PRELEN + PRELEN + 2 + 2 + + + DC + DC + 4 + 1 + + + BL + BL + 5 + 2 + + + DR + DR + 8 + 1 + + + DCRS + DCRS + 9 + 1 + + + DO + DO + 10 + 1 + + + ECRSFD + ECRSFD + 11 + 1 + + + LM + LM + 12 + 1 + + + DM + DM + 13 + 1 + + + FES + FES + 14 + 1 + + + JE + JE + 16 + 1 + + + JD + JD + 17 + 1 + + + WD + WD + 19 + 1 + + + ACS + ACS + 20 + 1 + + + CST + CST + 21 + 1 + + + S2KP + S2KP + 22 + 1 + + + GPSLCE + GPSLCE + 23 + 1 + + + IPG + IPG + 24 + 3 + + + IPC + IPC + 27 + 1 + + + SARC + SARC + 28 + 3 + + + ARPEN + ARPEN + 31 + 1 + + + + + MACECR + MACECR + Extended operating mode configuration + register + 0x4 + 0x20 + read-write + 0x00000000 + + + GPSL + GPSL + 0 + 14 + + + DCRCC + DCRCC + 16 + 1 + + + SPEN + SPEN + 17 + 1 + + + USP + USP + 18 + 1 + + + EIPGEN + EIPGEN + 24 + 1 + + + EIPG + EIPG + 25 + 5 + + + + + MACPFR + MACPFR + Packet filtering control + register + 0x8 + 0x20 + read-write + 0x00000000 + + + PR + PR + 0 + 1 + + + HUC + HUC + 1 + 1 + + + HMC + HMC + 2 + 1 + + + DAIF + DAIF + 3 + 1 + + + PM + PM + 4 + 1 + + + DBF + DBF + 5 + 1 + + + PCF + PCF + 6 + 2 + + + SAIF + SAIF + 8 + 1 + + + SAF + SAF + 9 + 1 + + + HPF + HPF + 10 + 1 + + + VTFE + VTFE + 16 + 1 + + + IPFE + IPFE + 20 + 1 + + + DNTU + DNTU + 21 + 1 + + + RA + RA + 31 + 1 + + + + + MACWTR + MACWTR + Watchdog timeout register + 0xC + 0x20 + read-write + 0x00000000 + + + WTO + WTO + 0 + 4 + + + PWE + PWE + 8 + 1 + + + + + MACHT0R + MACHT0R + Hash Table 0 register + 0x10 + 0x20 + read-write + 0x00000000 + + + HT31T0 + HT31T0 + 0 + 32 + + + + + MACHT1R + MACHT1R + Hash Table 1 register + 0x14 + 0x20 + read-write + 0x00000000 + + + HT63T32 + HT63T32 + 0 + 32 + + + + + MACVTR + MACVTR + VLAN tag register + 0x50 + 0x20 + read-write + 0x00000000 + + + VL + VL + 0 + 16 + + + ETV + ETV + 16 + 1 + + + VTIM + VTIM + 17 + 1 + + + ESVL + ESVL + 18 + 1 + + + ERSVLM + ERSVLM + 19 + 1 + + + DOVLTC + DOVLTC + 20 + 1 + + + EVLS + EVLS + 21 + 2 + + + EVLRXS + EVLRXS + 24 + 1 + + + VTHM + VTHM + 25 + 1 + + + EDVLP + EDVLP + 26 + 1 + + + ERIVLT + ERIVLT + 27 + 1 + + + EIVLS + EIVLS + 28 + 2 + + + EIVLRXS + EIVLRXS + 31 + 1 + + + + + MACVHTR + MACVHTR + VLAN Hash table register + 0x58 + 0x20 + read-write + 0x00000000 + + + VLHT + VLHT + 0 + 16 + + + + + MACVIR + MACVIR + VLAN inclusion register + 0x60 + 0x20 + read-write + 0x00000000 + + + VLT + VLT + 0 + 16 + + + VLC + VLC + 16 + 2 + + + VLP + VLP + 18 + 1 + + + CSVL + CSVL + 19 + 1 + + + VLTI + VLTI + 20 + 1 + + + + + MACIVIR + MACIVIR + Inner VLAN inclusion register + 0x64 + 0x20 + read-write + 0x00000000 + + + VLT + VLT + 0 + 16 + + + VLC + VLC + 16 + 2 + + + VLP + VLP + 18 + 1 + + + CSVL + CSVL + 19 + 1 + + + VLTI + VLTI + 20 + 1 + + + + + MACQTxFCR + MACQTxFCR + Tx Queue flow control register + 0x70 + 0x20 + read-write + 0x00000000 + + + FCB_BPA + FCB_BPA + 0 + 1 + + + TFE + TFE + 1 + 1 + + + PLT + PLT + 4 + 3 + + + DZPQ + DZPQ + 7 + 1 + + + PT + PT + 16 + 16 + + + + + MACRxFCR + MACRxFCR + Rx flow control register + 0x90 + 0x20 + read-write + 0x00000000 + + + RFE + RFE + 0 + 1 + + + UP + UP + 1 + 1 + + + + + MACISR + MACISR + Interrupt status register + 0xB0 + 0x20 + read-only + 0x00000000 + + + PHYIS + PHYIS + 3 + 1 + + + PMTIS + PMTIS + 4 + 1 + + + LPIIS + LPIIS + 5 + 1 + + + MMCIS + MMCIS + 8 + 1 + + + MMCRXIS + MMCRXIS + 9 + 1 + + + MMCTXIS + MMCTXIS + 10 + 1 + + + TSIS + TSIS + 12 + 1 + + + TXSTSIS + TXSTSIS + 13 + 1 + + + RXSTSIS + RXSTSIS + 14 + 1 + + + + + MACIER + MACIER + Interrupt enable register + 0xB4 + 0x20 + read-write + 0x00000000 + + + PHYIE + PHYIE + 3 + 1 + + + PMTIE + PMTIE + 4 + 1 + + + LPIIE + LPIIE + 5 + 1 + + + TSIE + TSIE + 12 + 1 + + + TXSTSIE + TXSTSIE + 13 + 1 + + + RXSTSIE + RXSTSIE + 14 + 1 + + + + + MACRxTxSR + MACRxTxSR + Rx Tx status register + 0xB8 + 0x20 + read-only + 0x00000000 + + + TJT + TJT + 0 + 1 + + + NCARR + NCARR + 1 + 1 + + + LCARR + LCARR + 2 + 1 + + + EXDEF + EXDEF + 3 + 1 + + + LCOL + LCOL + 4 + 1 + + + EXCOL + LCOL + 5 + 1 + + + RWT + RWT + 8 + 1 + + + + + MACPCSR + MACPCSR + PMT control status register + 0xC0 + 0x20 + 0x00000000 + + + PWRDWN + PWRDWN + 0 + 1 + read-write + + + MGKPKTEN + MGKPKTEN + 1 + 1 + read-write + + + RWKPKTEN + RWKPKTEN + 2 + 1 + read-write + + + MGKPRCVD + MGKPRCVD + 5 + 1 + read-only + + + RWKPRCVD + RWKPRCVD + 6 + 1 + read-only + + + GLBLUCAST + GLBLUCAST + 9 + 1 + read-write + + + RWKPFE + RWKPFE + 10 + 1 + read-write + + + RWKPTR + RWKPTR + 24 + 5 + read-write + + + RWKFILTRST + RWKFILTRST + 31 + 1 + read-write + + + + + MACRWKPFR + MACRWKPFR + Remove wakeup packet filter + register + 0xC4 + 0x20 + read-write + 0x00000000 + + + WKUPFRMFTR + WKUPFRMFTR + 0 + 32 + + + + + MACLCSR + MACLCSR + LPI control status register + 0xD0 + 0x20 + 0x00000000 + + + TLPIEN + TLPIEN + 0 + 1 + read-only + + + TLPIEX + TLPIEX + 1 + 1 + read-only + + + RLPIEN + RLPIEN + 2 + 1 + read-only + + + RLPIEX + RLPIEX + 3 + 1 + read-only + + + TLPIST + TLPIST + 8 + 1 + read-only + + + RLPIST + RLPIST + 9 + 1 + read-only + + + LPIEN + LPIEN + 16 + 1 + read-write + + + PLS + PLS + 17 + 1 + read-write + + + PLSEN + PLSEN + 18 + 1 + read-write + + + LPITXA + LPITXA + 19 + 1 + read-write + + + LPITE + LPITE + 20 + 1 + read-write + + + LPITCSE + LPITCSE + 21 + 1 + read-write + + + + + MACLTCR + MACLTCR + LPI timers control register + 0xD4 + 0x20 + read-write + 0x03E80000 + + + TWT + TWT + 0 + 16 + + + LST + LST + 16 + 10 + + + + + MACLETR + MACLETR + LPI entry timer register + 0xD8 + 0x20 + read-write + 0x00000000 + + + LPIET + LPIET + 0 + 17 + + + + + MAC1USTCR + MAC1USTCR + 1-microsecond-tick counter + register + 0xDC + 0x20 + read-write + 0x00000000 + + + TIC_1US_CNTR + TIC_1US_CNTR + 0 + 12 + + + + + MACVR + MACVR + Version register + 0x110 + 0x20 + read-only + 0x00003041 + + + SNPSVER + SNPSVER + 0 + 8 + + + USERVER + USERVER + 8 + 8 + + + + + MACHWF1R + MACHWF1R + HW feature 1 register + 0x120 + 0x20 + read-only + 0x11841904 + + + RXFIFOSIZE + RXFIFOSIZE + 0 + 5 + + + TXFIFOSIZE + TXFIFOSIZE + 6 + 5 + + + OSTEN + OSTEN + 11 + 1 + + + PTOEN + PTOEN + 12 + 1 + + + ADVTHWORD + ADVTHWORD + 13 + 1 + + + DCBEN + DCBEN + 16 + 1 + + + SPHEN + SPHEN + 17 + 1 + + + TSOEN + TSOEN + 18 + 1 + + + DBGMEMA + DBGMEMA + 19 + 1 + + + AVSEL + AVSEL + 20 + 1 + + + HASHTBLSZ + HASHTBLSZ + 24 + 2 + + + L3L4FNUM + L3L4FNUM + 27 + 4 + + + + + MACHWF2R + MACHWF2R + HW feature 2 register + 0x124 + 0x20 + read-only + 0x41000000 + + + RXQCNT + RXQCNT + 0 + 4 + + + TXQCNT + TXQCNT + 6 + 4 + + + RXCHCNT + RXCHCNT + 12 + 4 + + + TXCHCNT + TXCHCNT + 18 + 4 + + + PPSOUTNUM + PPSOUTNUM + 24 + 3 + + + AUXSNAPNUM + AUXSNAPNUM + 28 + 3 + + + + + MACMDIOAR + MACMDIOAR + MDIO address register + 0x200 + 0x20 + read-write + 0x00000000 + + + MB + MB + 0 + 1 + + + C45E + C45E + 1 + 1 + + + GOC + GOC + 2 + 2 + + + SKAP + SKAP + 4 + 1 + + + CR + CR + 8 + 4 + + + NTC + NTC + 12 + 3 + + + RDA + RDA + 16 + 5 + + + PA + PA + 21 + 5 + + + BTB + BTB + 26 + 1 + + + PSE + PSE + 27 + 1 + + + + + MACMDIODR + MACMDIODR + MDIO data register + 0x204 + 0x20 + read-write + 0x00000000 + + + MD + MD + 0 + 16 + + + RA + RA + 16 + 16 + + + + + MACARPAR + MACARPAR + ARP address register + 0xAE0 + 0x20 + read-write + 0x00000000 + + + ARPPA + ARPPA + 0 + 32 + + + + + MACA0HR + MACA0HR + Address 0 high register + 0x300 + 0x20 + 0x8000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + read-write + + + AE + AE + 31 + 1 + read-only + + + + + MACA0LR + MACA0LR + Address 0 low register + 0x304 + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA1LR + MACA1LR + Address 1 low register + 0x30C + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA2LR + MACA2LR + Address 2 low register + 0x314 + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA3LR + MACA3LR + Address 3 low register + 0x31C + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA1HR + MACA1HR + Address 1 high register + 0x308 + 0x20 + read-write + 0x0000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + + + MBC + MBC + 24 + 6 + + + SA + SA + 30 + 1 + + + AE + AE + 31 + 1 + + + + + MACA2HR + MACA2HR + Address 2 high register + 0x310 + 0x20 + read-write + 0x0000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + + + MBC + MBC + 24 + 6 + + + SA + SA + 30 + 1 + + + AE + AE + 31 + 1 + + + + + MACA3HR + MACA3HR + Address 3 high register + 0x318 + 0x20 + read-write + 0x0000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + + + MBC + MBC + 24 + 6 + + + SA + SA + 30 + 1 + + + AE + AE + 31 + 1 + + + + + MMC_CONTROL + MMC_CONTROL + MMC control register + 0x700 + 0x20 + read-write + 0x00000000 + + + CNTRST + CNTRST + 0 + 1 + + + CNTSTOPRO + CNTSTOPRO + 1 + 1 + + + RSTONRD + RSTONRD + 2 + 1 + + + CNTFREEZ + CNTFREEZ + 3 + 1 + + + CNTPRST + CNTPRST + 4 + 1 + + + CNTPRSTLVL + CNTPRSTLVL + 5 + 1 + + + UCDBC + UCDBC + 8 + 1 + + + + + MMC_RX_INTERRUPT + MMC_RX_INTERRUPT + MMC Rx interrupt register + 0x704 + 0x20 + read-only + 0x00000000 + + + RXCRCERPIS + RXCRCERPIS + 5 + 1 + + + RXALGNERPIS + RXALGNERPIS + 6 + 1 + + + RXUCGPIS + RXUCGPIS + 17 + 1 + + + RXLPIUSCIS + RXLPIUSCIS + 26 + 1 + + + RXLPITRCIS + RXLPITRCIS + 27 + 1 + + + + + MMC_TX_INTERRUPT + MMC_TX_INTERRUPT + MMC Tx interrupt register + 0x708 + 0x20 + read-only + 0x00000000 + + + TXSCOLGPIS + TXSCOLGPIS + 14 + 1 + + + TXMCOLGPIS + TXMCOLGPIS + 15 + 1 + + + TXGPKTIS + TXGPKTIS + 21 + 1 + + + TXLPIUSCIS + TXLPIUSCIS + 26 + 1 + + + TXLPITRCIS + TXLPITRCIS + 27 + 1 + + + + + MMC_RX_INTERRUPT_MASK + MMC_RX_INTERRUPT_MASK + MMC Rx interrupt mask register + 0x70C + 0x20 + 0x00000000 + + + RXCRCERPIM + RXCRCERPIM + 5 + 1 + read-write + + + RXALGNERPIM + RXALGNERPIM + 6 + 1 + read-write + + + RXUCGPIM + RXUCGPIM + 17 + 1 + read-write + + + RXLPIUSCIM + RXLPIUSCIM + 26 + 1 + read-write + + + RXLPITRCIM + RXLPITRCIM + 27 + 1 + read-only + + + + + MMC_TX_INTERRUPT_MASK + MMC_TX_INTERRUPT_MASK + MMC Tx interrupt mask register + 0x710 + 0x20 + 0x00000000 + + + TXSCOLGPIM + TXSCOLGPIM + 14 + 1 + read-write + + + TXMCOLGPIM + TXMCOLGPIM + 15 + 1 + read-write + + + TXGPKTIM + TXGPKTIM + 21 + 1 + read-write + + + TXLPIUSCIM + TXLPIUSCIM + 26 + 1 + read-write + + + TXLPITRCIM + TXLPITRCIM + 27 + 1 + read-only + + + + + TX_SINGLE_COLLISION_GOOD_PACKETS + + TX_SINGLE_COLLISION_GOOD_PACKETS + Tx single collision good packets + register + 0x74C + 0x20 + read-only + 0x00000000 + + + TXSNGLCOLG + TXSNGLCOLG + 0 + 32 + + + + + TX_MULTIPLE_COLLISION_GOOD_PACKETS + + TX_MULTIPLE_COLLISION_GOOD_PACKETS + Tx multiple collision good packets + register + 0x750 + 0x20 + read-only + 0x00000000 + + + TXMULTCOLG + TXMULTCOLG + 0 + 32 + + + + + TX_PACKET_COUNT_GOOD + TX_PACKET_COUNT_GOOD + Tx packet count good register + 0x768 + 0x20 + read-only + 0x00000000 + + + TXPKTG + TXPKTG + 0 + 32 + + + + + RX_CRC_ERROR_PACKETS + RX_CRC_ERROR_PACKETS + Rx CRC error packets register + 0x794 + 0x20 + read-only + 0x00000000 + + + RXCRCERR + RXCRCERR + 0 + 32 + + + + + RX_ALIGNMENT_ERROR_PACKETS + RX_ALIGNMENT_ERROR_PACKETS + Rx alignment error packets + register + 0x798 + 0x20 + read-only + 0x00000000 + + + RXALGNERR + RXALGNERR + 0 + 32 + + + + + RX_UNICAST_PACKETS_GOOD + RX_UNICAST_PACKETS_GOOD + Rx unicast packets good + register + 0x7C4 + 0x20 + read-only + 0x00000000 + + + RXUCASTG + RXUCASTG + 0 + 32 + + + + + TX_LPI_USEC_CNTR + TX_LPI_USEC_CNTR + Tx LPI microsecond timer + register + 0x7EC + 0x20 + read-only + 0x00000000 + + + TXLPIUSC + TXLPIUSC + 0 + 32 + + + + + TX_LPI_TRAN_CNTR + TX_LPI_TRAN_CNTR + Tx LPI transition counter + register + 0x7F0 + 0x20 + read-only + 0x00000000 + + + TXLPITRC + TXLPITRC + 0 + 32 + + + + + RX_LPI_USEC_CNTR + RX_LPI_USEC_CNTR + Rx LPI microsecond counter + register + 0x7F4 + 0x20 + read-only + 0x00000000 + + + RXLPIUSC + RXLPIUSC + 0 + 32 + + + + + RX_LPI_TRAN_CNTR + RX_LPI_TRAN_CNTR + Rx LPI transition counter + register + 0x7F8 + 0x20 + read-only + 0x00000000 + + + RXLPITRC + RXLPITRC + 0 + 32 + + + + + MACL3L4C0R + MACL3L4C0R + L3 and L4 control 0 register + 0x900 + 0x20 + read-write + 0x00000000 + + + L3PEN0 + L3PEN0 + 0 + 1 + + + L3SAM0 + L3SAM0 + 2 + 1 + + + L3SAIM0 + L3SAIM0 + 3 + 1 + + + L3DAM0 + L3DAM0 + 4 + 1 + + + L3DAIM0 + L3DAIM0 + 5 + 1 + + + L3HSBM0 + L3HSBM0 + 6 + 5 + + + L3HDBM0 + L3HDBM0 + 11 + 5 + + + L4PEN0 + L4PEN0 + 16 + 1 + + + L4SPM0 + L4SPM0 + 18 + 1 + + + L4SPIM0 + L4SPIM0 + 19 + 1 + + + L4DPM0 + L4DPM0 + 20 + 1 + + + L4DPIM0 + L4DPIM0 + 21 + 1 + + + + + MACL4A0R + MACL4A0R + Layer4 address filter 0 + register + 0x904 + 0x20 + read-write + 0x00000000 + + + L4SP0 + L4SP0 + 0 + 16 + + + L4DP0 + L4DP0 + 16 + 16 + + + + + MACDR + MACDR + Debug register + 0x114 + 0x20 + read-only + 0x00000000 + + + RPESTS + RPESTS + 0 + 1 + + + RFCFCSTS + RFCFCSTS + 1 + 2 + + + TPESTS + TPESTS + 16 + 1 + + + TFCSTS + TFCSTS + 17 + 2 + + + + + MACL3A00R + MACL3A00R + MACL3A00R + 0x910 + 0x20 + read-write + 0x00000000 + + + L3A00 + L3A00 + 0 + 32 + + + + + MACL3A10R + MACL3A10R + Layer3 address 1 filter 0 + register + 0x914 + 0x20 + read-write + 0x00000000 + + + L3A10 + L3A10 + 0 + 32 + + + + + MACL3A20 + MACL3A20 + Layer3 Address 2 filter 0 + register + 0x918 + 0x20 + read-write + 0x00000000 + + + L3A20 + L3A20 + 0 + 32 + + + + + MACL3A30 + MACL3A30 + Layer3 Address 3 filter 0 + register + 0x91C + 0x20 + read-write + 0x00000000 + + + L3A30 + L3A30 + 0 + 32 + + + + + MACL3L4C1R + MACL3L4C1R + L3 and L4 control 1 register + 0x930 + 0x20 + read-write + 0x00000000 + + + L3PEN1 + L3PEN1 + 0 + 1 + + + L3SAM1 + L3SAM1 + 2 + 1 + + + L3SAIM1 + L3SAIM1 + 3 + 1 + + + L3DAM1 + L3DAM1 + 4 + 1 + + + L3DAIM1 + L3DAIM1 + 5 + 1 + + + L3HSBM1 + L3HSBM1 + 6 + 5 + + + L3HDBM1 + L3HDBM1 + 11 + 5 + + + L4PEN1 + L4PEN1 + 16 + 1 + + + L4SPM1 + L4SPM1 + 18 + 1 + + + L4SPIM1 + L4SPIM1 + 19 + 1 + + + L4DPM1 + L4DPM1 + 20 + 1 + + + L4DPIM1 + L4DPIM1 + 21 + 1 + + + + + MACL4A1R + MACL4A1R + Layer 4 address filter 1 + register + 0x934 + 0x20 + read-write + 0x00000000 + + + L4SP1 + L4SP1 + 0 + 16 + + + L4DP1 + L4DP1 + 16 + 16 + + + + + MACL3A01R + MACL3A01R + Layer3 address 0 filter 1 + Register + 0x940 + 0x20 + read-write + 0x00000000 + + + L3A01 + L3A01 + 0 + 32 + + + + + MACL3A11R + MACL3A11R + Layer3 address 1 filter 1 + register + 0x944 + 0x20 + read-write + 0x00000000 + + + L3A11 + L3A11 + 0 + 32 + + + + + MACL3A21R + MACL3A21R + Layer3 address 2 filter 1 + Register + 0x948 + 0x20 + read-write + 0x00000000 + + + L3A21 + L3A21 + 0 + 32 + + + + + MACL3A31R + MACL3A31R + Layer3 address 3 filter 1 + register + 0x94C + 0x20 + read-write + 0x00000000 + + + L3A31 + L3A31 + 0 + 32 + + + + + MACTSCR + MACTSCR + Timestamp control Register + 0xB00 + 0x20 + 0x00000200 + + + TSENA + TSENA + 0 + 1 + read-write + + + TSCFUPDT + TSCFUPDT + 1 + 1 + read-write + + + TSINIT + TSINIT + 2 + 1 + read-write + + + TSUPDT + TSUPDT + 3 + 1 + read-write + + + TSADDREG + TSADDREG + 5 + 1 + read-write + + + TSENALL + TSENALL + 8 + 1 + read-write + + + TSCTRLSSR + TSCTRLSSR + 9 + 1 + read-write + + + TSVER2ENA + TSVER2ENA + 10 + 1 + read-write + + + TSIPENA + TSIPENA + 11 + 1 + read-write + + + TSIPV6ENA + TSIPV6ENA + 12 + 1 + read-write + + + TSIPV4ENA + TSIPV4ENA + 13 + 1 + read-write + + + TSEVNTENA + TSEVNTENA + 14 + 1 + read-write + + + TSMSTRENA + TSMSTRENA + 15 + 1 + read-write + + + SNAPTYPSEL + SNAPTYPSEL + 16 + 2 + read-write + + + TSENMACADDR + TSENMACADDR + 18 + 1 + read-write + + + CSC + CSC + 19 + 1 + read-only + + + TXTSSTSM + TXTSSTSM + 24 + 1 + read-write + + + + + MACSSIR + MACSSIR + Sub-second increment register + 0xB04 + 0x20 + read-write + 0x00000000 + + + SNSINC + SNSINC + 8 + 8 + + + SSINC + SSINC + 16 + 8 + + + + + MACSTSR + MACSTSR + System time seconds register + 0xB08 + 0x20 + read-only + 0x00000000 + + + TSS + TSS + 0 + 32 + + + + + MACSTNR + MACSTNR + System time nanoseconds + register + 0xB0C + 0x20 + read-only + 0x00000000 + + + TSSS + TSSS + 0 + 31 + + + + + MACSTSUR + MACSTSUR + System time seconds update + register + 0xB10 + 0x20 + read-write + 0x00000000 + + + TSS + TSS + 0 + 32 + + + + + MACSTNUR + MACSTNUR + System time nanoseconds update + register + 0xB14 + 0x20 + read-write + 0x00000000 + + + TSSS + TSSS + 0 + 31 + + + ADDSUB + ADDSUB + 31 + 1 + + + + + MACTSAR + MACTSAR + Timestamp addend register + 0xB18 + 0x20 + read-write + 0x00000000 + + + TSAR + TSAR + 0 + 32 + + + + + MACTSSR + MACTSSR + Timestamp status register + 0xB20 + 0x20 + read-only + 0x00000000 + + + TSSOVF + TSSOVF + 0 + 1 + + + TSTARGT0 + TSTARGT0 + 1 + 1 + + + AUXTSTRIG + AUXTSTRIG + 2 + 1 + + + TSTRGTERR0 + TSTRGTERR0 + 3 + 1 + + + TXTSSIS + TXTSSIS + 15 + 1 + + + ATSSTN + ATSSTN + 16 + 4 + + + ATSSTM + ATSSTM + 24 + 1 + + + ATSNS + ATSNS + 25 + 5 + + + + + MACTxTSSNR + MACTxTSSNR + Tx timestamp status nanoseconds + register + 0xB30 + 0x20 + read-only + 0x00000000 + + + TXTSSLO + TXTSSLO + 0 + 31 + + + TXTSSMIS + TXTSSMIS + 31 + 1 + + + + + MACTxTSSSR + MACTxTSSSR + Tx timestamp status seconds + register + 0xB34 + 0x20 + read-only + 0x00000000 + + + TXTSSHI + TXTSSHI + 0 + 32 + + + + + MACACR + MACACR + Auxiliary control register + 0xB40 + 0x20 + read-write + 0x00000000 + + + ATSFC + ATSFC + 0 + 1 + + + ATSEN0 + ATSEN0 + 4 + 1 + + + ATSEN1 + ATSEN1 + 5 + 1 + + + ATSEN2 + ATSEN2 + 6 + 1 + + + ATSEN3 + ATSEN3 + 7 + 1 + + + + + MACATSNR + MACATSNR + Auxiliary timestamp nanoseconds + register + 0xB48 + 0x20 + read-only + 0x00000000 + + + AUXTSLO + AUXTSLO + 0 + 31 + + + + + MACATSSR + MACATSSR + Auxiliary timestamp seconds + register + 0xB4C + 0x20 + read-only + 0x00000000 + + + AUXTSHI + AUXTSHI + 0 + 32 + + + + + MACTSIACR + MACTSIACR + Timestamp Ingress asymmetric correction + register + 0xB50 + 0x20 + read-write + 0x00000000 + + + OSTIAC + OSTIAC + 0 + 32 + + + + + MACTSEACR + MACTSEACR + Timestamp Egress asymmetric correction + register + 0xB54 + 0x20 + read-write + 0x00000000 + + + OSTEAC + OSTEAC + 0 + 32 + + + + + MACTSICNR + MACTSICNR + Timestamp Ingress correction nanosecond + register + 0xB58 + 0x20 + read-write + 0x00000000 + + + TSIC + TSIC + 0 + 32 + + + + + MACTSECNR + MACTSECNR + Timestamp Egress correction nanosecond + register + 0xB5C + 0x20 + read-write + 0x00000000 + + + TSEC + TSEC + 0 + 32 + + + + + MACPPSCR + MACPPSCR + PPS control register + 0xB70 + 0x20 + read-write + 0x00000000 + + + PPSCTRL + PPSCTRL + 0 + 4 + + + PPSEN0 + PPSEN0 + 4 + 1 + + + TRGTMODSEL0 + TRGTMODSEL0 + 5 + 2 + + + + + MACPPSTTSR + MACPPSTTSR + PPS target time seconds + register + 0xB80 + 0x20 + read-write + 0x00000000 + + + TSTRH0 + TSTRH0 + 0 + 31 + + + + + MACPPSTTNR + MACPPSTTNR + PPS target time nanoseconds + register + 0xB84 + 0x20 + read-write + 0x00000000 + + + TTSL0 + TTSL0 + 0 + 31 + + + TRGTBUSY0 + TRGTBUSY0 + 31 + 1 + + + + + MACPPSIR + MACPPSIR + PPS interval register + 0xB88 + 0x20 + read-write + 0x00000000 + + + PPSINT0 + PPSINT0 + 0 + 32 + + + + + MACPPSWR + MACPPSWR + PPS width register + 0xB8C + 0x20 + read-write + 0x00000000 + + + PPSWIDTH0 + PPSWIDTH0 + 0 + 32 + + + + + MACPOCR + MACPOCR + PTP Offload control register + 0xBC0 + 0x20 + read-write + 0x00000000 + + + PTOEN + PTOEN + 0 + 1 + + + ASYNCEN + ASYNCEN + 1 + 1 + + + APDREQEN + APDREQEN + 2 + 1 + + + ASYNCTRIG + ASYNCTRIG + 4 + 1 + + + APDREQTRIG + APDREQTRIG + 5 + 1 + + + DRRDIS + DRRDIS + 6 + 1 + + + DN + DN + 8 + 8 + + + + + MACSPI0R + MACSPI0R + PTP Source Port Identity 0 + Register + 0xBC4 + 0x20 + read-write + 0x00000000 + + + SPI0 + SPI0 + 0 + 32 + + + + + MACSPI1R + MACSPI1R + PTP Source port identity 1 + register + 0xBC8 + 0x20 + read-write + 0x00000000 + + + SPI1 + SPI1 + 0 + 32 + + + + + MACSPI2R + MACSPI2R + PTP Source port identity 2 + register + 0xBCC + 0x20 + read-write + 0x00000000 + + + SPI2 + SPI2 + 0 + 16 + + + + + MACLMIR + MACLMIR + Log message interval register + 0xBD0 + 0x20 + read-write + 0x00000000 + + + LSI + LSI + 0 + 8 + + + DRSYNCR + DRSYNCR + 8 + 3 + + + LMPDRI + LMPDRI + 24 + 8 + + + + + + + DMA1 + DMA controller + DMA + 0x40020000 + + 0x0 + 0x400 + registers + + + DMA_STR0 + DMA1 Stream0 + 11 + + + DMA_STR1 + DMA1 Stream1 + 12 + + + DMA_STR2 + DMA1 Stream2 + 13 + + + DMA_STR3 + DMA1 Stream3 + 14 + + + DMA_STR4 + DMA1 Stream4 + 15 + + + DMA_STR5 + DMA1 Stream5 + 16 + + + DMA_STR6 + DMA1 Stream6 + 17 + + + DMA1_STR7 + DMA1 Stream7 + 47 + + + + LISR + LISR + low interrupt status register + 0x0 + 0x20 + read-only + 0x00000000 + + + TCIF3 + Stream x transfer complete interrupt + flag (x = 3..0) + 27 + 1 + + + HTIF3 + Stream x half transfer interrupt flag + (x=3..0) + 26 + 1 + + + TEIF3 + Stream x transfer error interrupt flag + (x=3..0) + 25 + 1 + + + DMEIF3 + Stream x direct mode error interrupt + flag (x=3..0) + 24 + 1 + + + FEIF3 + Stream x FIFO error interrupt flag + (x=3..0) + 22 + 1 + + + TCIF2 + Stream x transfer complete interrupt + flag (x = 3..0) + 21 + 1 + + + HTIF2 + Stream x half transfer interrupt flag + (x=3..0) + 20 + 1 + + + TEIF2 + Stream x transfer error interrupt flag + (x=3..0) + 19 + 1 + + + DMEIF2 + Stream x direct mode error interrupt + flag (x=3..0) + 18 + 1 + + + FEIF2 + Stream x FIFO error interrupt flag + (x=3..0) + 16 + 1 + + + TCIF1 + Stream x transfer complete interrupt + flag (x = 3..0) + 11 + 1 + + + HTIF1 + Stream x half transfer interrupt flag + (x=3..0) + 10 + 1 + + + TEIF1 + Stream x transfer error interrupt flag + (x=3..0) + 9 + 1 + + + DMEIF1 + Stream x direct mode error interrupt + flag (x=3..0) + 8 + 1 + + + FEIF1 + Stream x FIFO error interrupt flag + (x=3..0) + 6 + 1 + + + TCIF0 + Stream x transfer complete interrupt + flag (x = 3..0) + 5 + 1 + + + HTIF0 + Stream x half transfer interrupt flag + (x=3..0) + 4 + 1 + + + TEIF0 + Stream x transfer error interrupt flag + (x=3..0) + 3 + 1 + + + DMEIF0 + Stream x direct mode error interrupt + flag (x=3..0) + 2 + 1 + + + FEIF0 + Stream x FIFO error interrupt flag + (x=3..0) + 0 + 1 + + + + + HISR + HISR + high interrupt status register + 0x4 + 0x20 + read-only + 0x00000000 + + + TCIF7 + Stream x transfer complete interrupt + flag (x=7..4) + 27 + 1 + + + HTIF7 + Stream x half transfer interrupt flag + (x=7..4) + 26 + 1 + + + TEIF7 + Stream x transfer error interrupt flag + (x=7..4) + 25 + 1 + + + DMEIF7 + Stream x direct mode error interrupt + flag (x=7..4) + 24 + 1 + + + FEIF7 + Stream x FIFO error interrupt flag + (x=7..4) + 22 + 1 + + + TCIF6 + Stream x transfer complete interrupt + flag (x=7..4) + 21 + 1 + + + HTIF6 + Stream x half transfer interrupt flag + (x=7..4) + 20 + 1 + + + TEIF6 + Stream x transfer error interrupt flag + (x=7..4) + 19 + 1 + + + DMEIF6 + Stream x direct mode error interrupt + flag (x=7..4) + 18 + 1 + + + FEIF6 + Stream x FIFO error interrupt flag + (x=7..4) + 16 + 1 + + + TCIF5 + Stream x transfer complete interrupt + flag (x=7..4) + 11 + 1 + + + HTIF5 + Stream x half transfer interrupt flag + (x=7..4) + 10 + 1 + + + TEIF5 + Stream x transfer error interrupt flag + (x=7..4) + 9 + 1 + + + DMEIF5 + Stream x direct mode error interrupt + flag (x=7..4) + 8 + 1 + + + FEIF5 + Stream x FIFO error interrupt flag + (x=7..4) + 6 + 1 + + + TCIF4 + Stream x transfer complete interrupt + flag (x=7..4) + 5 + 1 + + + HTIF4 + Stream x half transfer interrupt flag + (x=7..4) + 4 + 1 + + + TEIF4 + Stream x transfer error interrupt flag + (x=7..4) + 3 + 1 + + + DMEIF4 + Stream x direct mode error interrupt + flag (x=7..4) + 2 + 1 + + + FEIF4 + Stream x FIFO error interrupt flag + (x=7..4) + 0 + 1 + + + + + LIFCR + LIFCR + low interrupt flag clear + register + 0x8 + 0x20 + read-write + 0x00000000 + + + CTCIF3 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 27 + 1 + + + CHTIF3 + Stream x clear half transfer interrupt + flag (x = 3..0) + 26 + 1 + + + CTEIF3 + Stream x clear transfer error interrupt + flag (x = 3..0) + 25 + 1 + + + CDMEIF3 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 24 + 1 + + + CFEIF3 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 22 + 1 + + + CTCIF2 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 21 + 1 + + + CHTIF2 + Stream x clear half transfer interrupt + flag (x = 3..0) + 20 + 1 + + + CTEIF2 + Stream x clear transfer error interrupt + flag (x = 3..0) + 19 + 1 + + + CDMEIF2 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 18 + 1 + + + CFEIF2 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 16 + 1 + + + CTCIF1 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 11 + 1 + + + CHTIF1 + Stream x clear half transfer interrupt + flag (x = 3..0) + 10 + 1 + + + CTEIF1 + Stream x clear transfer error interrupt + flag (x = 3..0) + 9 + 1 + + + CDMEIF1 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 8 + 1 + + + CFEIF1 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 6 + 1 + + + CTCIF0 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 5 + 1 + + + CHTIF0 + Stream x clear half transfer interrupt + flag (x = 3..0) + 4 + 1 + + + CTEIF0 + Stream x clear transfer error interrupt + flag (x = 3..0) + 3 + 1 + + + CDMEIF0 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 2 + 1 + + + CFEIF0 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 0 + 1 + + + + + HIFCR + HIFCR + high interrupt flag clear + register + 0xC + 0x20 + read-write + 0x00000000 + + + CTCIF7 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 27 + 1 + + + CHTIF7 + Stream x clear half transfer interrupt + flag (x = 7..4) + 26 + 1 + + + CTEIF7 + Stream x clear transfer error interrupt + flag (x = 7..4) + 25 + 1 + + + CDMEIF7 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 24 + 1 + + + CFEIF7 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 22 + 1 + + + CTCIF6 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 21 + 1 + + + CHTIF6 + Stream x clear half transfer interrupt + flag (x = 7..4) + 20 + 1 + + + CTEIF6 + Stream x clear transfer error interrupt + flag (x = 7..4) + 19 + 1 + + + CDMEIF6 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 18 + 1 + + + CFEIF6 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 16 + 1 + + + CTCIF5 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 11 + 1 + + + CHTIF5 + Stream x clear half transfer interrupt + flag (x = 7..4) + 10 + 1 + + + CTEIF5 + Stream x clear transfer error interrupt + flag (x = 7..4) + 9 + 1 + + + CDMEIF5 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 8 + 1 + + + CFEIF5 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 6 + 1 + + + CTCIF4 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 5 + 1 + + + CHTIF4 + Stream x clear half transfer interrupt + flag (x = 7..4) + 4 + 1 + + + CTEIF4 + Stream x clear transfer error interrupt + flag (x = 7..4) + 3 + 1 + + + CDMEIF4 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 2 + 1 + + + CFEIF4 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 0 + 1 + + + + + S0CR + S0CR + stream x configuration + register + 0x10 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S0NDTR + S0NDTR + stream x number of data + register + 0x14 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S0PAR + S0PAR + stream x peripheral address + register + 0x18 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S0M0AR + S0M0AR + stream x memory 0 address + register + 0x1C + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S0M1AR + S0M1AR + stream x memory 1 address + register + 0x20 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S0FCR + S0FCR + stream x FIFO control register + 0x24 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S1CR + S1CR + stream x configuration + register + 0x28 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S1NDTR + S1NDTR + stream x number of data + register + 0x2C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S1PAR + S1PAR + stream x peripheral address + register + 0x30 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S1M0AR + S1M0AR + stream x memory 0 address + register + 0x34 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S1M1AR + S1M1AR + stream x memory 1 address + register + 0x38 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S1FCR + S1FCR + stream x FIFO control register + 0x3C + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S2CR + S2CR + stream x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S2NDTR + S2NDTR + stream x number of data + register + 0x44 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S2PAR + S2PAR + stream x peripheral address + register + 0x48 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S2M0AR + S2M0AR + stream x memory 0 address + register + 0x4C + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S2M1AR + S2M1AR + stream x memory 1 address + register + 0x50 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S2FCR + S2FCR + stream x FIFO control register + 0x54 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S3CR + S3CR + stream x configuration + register + 0x58 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S3NDTR + S3NDTR + stream x number of data + register + 0x5C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S3PAR + S3PAR + stream x peripheral address + register + 0x60 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S3M0AR + S3M0AR + stream x memory 0 address + register + 0x64 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S3M1AR + S3M1AR + stream x memory 1 address + register + 0x68 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S3FCR + S3FCR + stream x FIFO control register + 0x6C + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S4CR + S4CR + stream x configuration + register + 0x70 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S4NDTR + S4NDTR + stream x number of data + register + 0x74 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S4PAR + S4PAR + stream x peripheral address + register + 0x78 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S4M0AR + S4M0AR + stream x memory 0 address + register + 0x7C + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S4M1AR + S4M1AR + stream x memory 1 address + register + 0x80 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S4FCR + S4FCR + stream x FIFO control register + 0x84 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S5CR + S5CR + stream x configuration + register + 0x88 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S5NDTR + S5NDTR + stream x number of data + register + 0x8C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S5PAR + S5PAR + stream x peripheral address + register + 0x90 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S5M0AR + S5M0AR + stream x memory 0 address + register + 0x94 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S5M1AR + S5M1AR + stream x memory 1 address + register + 0x98 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S5FCR + S5FCR + stream x FIFO control register + 0x9C + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S6CR + S6CR + stream x configuration + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S6NDTR + S6NDTR + stream x number of data + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S6PAR + S6PAR + stream x peripheral address + register + 0xA8 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S6M0AR + S6M0AR + stream x memory 0 address + register + 0xAC + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S6M1AR + S6M1AR + stream x memory 1 address + register + 0xB0 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S6FCR + S6FCR + stream x FIFO control register + 0xB4 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S7CR + S7CR + stream x configuration + register + 0xB8 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S7NDTR + S7NDTR + stream x number of data + register + 0xBC + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S7PAR + S7PAR + stream x peripheral address + register + 0xC0 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S7M0AR + S7M0AR + stream x memory 0 address + register + 0xC4 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S7M1AR + S7M1AR + stream x memory 1 address + register + 0xC8 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S7FCR + S7FCR + stream x FIFO control register + 0xCC + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + + + DMA2 + 0x40020400 + + DMA2_STR0 + DMA2 Stream0 interrupt + 56 + + + DMA2_STR1 + DMA2 Stream1 interrupt + 57 + + + DMA2_STR2 + DMA2 Stream2 interrupt + 58 + + + DMA2_STR3 + DMA2 Stream3 interrupt + 59 + + + DMA2_STR4 + DMA2 Stream4 interrupt + 60 + + + DMA2_STR5 + DMA2 Stream5 interrupt + 68 + + + DMA2_STR6 + DMA2 Stream6 interrupt + 69 + + + DMA2_STR7 + DMA2 Stream7 interrupt + 70 + + + + HRTIM_Master + High Resolution Timer: Master + Timers + HRTIM + 0x40017400 + + 0x0 + 0x80 + registers + + + + MCR + MCR + Master Timer Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + BRSTDMA + Burst DMA Update + 30 + 2 + + + MREPU + Master Timer Repetition + update + 29 + 1 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + TECEN + Timer E counter enable + 21 + 1 + + + TDCEN + Timer D counter enable + 20 + 1 + + + TCCEN + Timer C counter enable + 19 + 1 + + + TBCEN + Timer B counter enable + 18 + 1 + + + TACEN + Timer A counter enable + 17 + 1 + + + MCEN + Master Counter enable + 16 + 1 + + + SYNC_SRC + Synchronization source + 14 + 2 + + + SYNC_OUT + Synchronization output + 12 + 2 + + + SYNCSTRTM + Synchronization Starts + Master + 11 + 1 + + + SYNCRSTM + Synchronization Resets + Master + 10 + 1 + + + SYNC_IN + ynchronization input + 8 + 2 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Master Re-triggerable mode + 4 + 1 + + + CONT + Master Continuous mode + 3 + 1 + + + CK_PSC + HRTIM Master Clock + prescaler + 0 + 3 + + + + + MISR + MISR + Master Timer Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + MUPD + Master Update Interrupt + Flag + 6 + 1 + + + SYNC + Sync Input Interrupt Flag + 5 + 1 + + + MREP + Master Repetition Interrupt + Flag + 4 + 1 + + + MCMP4 + Master Compare 4 Interrupt + Flag + 3 + 1 + + + MCMP3 + Master Compare 3 Interrupt + Flag + 2 + 1 + + + MCMP2 + Master Compare 2 Interrupt + Flag + 1 + 1 + + + MCMP1 + Master Compare 1 Interrupt + Flag + 0 + 1 + + + + + MICR + MICR + Master Timer Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + MUPDC + Master update Interrupt flag + clear + 6 + 1 + + + SYNCC + Sync Input Interrupt flag + clear + 5 + 1 + + + MREPC + Repetition Interrupt flag + clear + 4 + 1 + + + MCMP4C + Master Compare 4 Interrupt flag + clear + 3 + 1 + + + MCMP3C + Master Compare 3 Interrupt flag + clear + 2 + 1 + + + MCMP2C + Master Compare 2 Interrupt flag + clear + 1 + 1 + + + MCMP1C + Master Compare 1 Interrupt flag + clear + 0 + 1 + + + + + MDIER4 + MDIER4 + MDIER4 + 0xC + 0x20 + read-write + 0x00000000 + + + MUPDDE + MUPDDE + 22 + 1 + + + SYNCDE + SYNCDE + 21 + 1 + + + MREPDE + MREPDE + 20 + 1 + + + MCMP4DE + MCMP4DE + 19 + 1 + + + MCMP3DE + MCMP3DE + 18 + 1 + + + MCMP2DE + MCMP2DE + 17 + 1 + + + MCMP1DE + MCMP1DE + 16 + 1 + + + MUPDIE + MUPDIE + 6 + 1 + + + SYNCIE + SYNCIE + 5 + 1 + + + MREPIE + MREPIE + 4 + 1 + + + MCMP4IE + MCMP4IE + 3 + 1 + + + MCMP3IE + MCMP3IE + 2 + 1 + + + MCMP2IE + MCMP2IE + 1 + 1 + + + MCMP1IE + MCMP1IE + 0 + 1 + + + + + MCNTR + MCNTR + Master Timer Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + MCNT + Counter value + 0 + 16 + + + + + MPER + MPER + Master Timer Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + MPER + Master Timer Period value + 0 + 16 + + + + + MREP + MREP + Master Timer Repetition + Register + 0x18 + 0x20 + read-write + 0x00000000 + + + MREP + Master Timer Repetition counter + value + 0 + 8 + + + + + MCMP1R + MCMP1R + Master Timer Compare 1 + Register + 0x1C + 0x20 + read-write + 0x00000000 + + + MCMP1 + Master Timer Compare 1 + value + 0 + 16 + + + + + MCMP2R + MCMP2R + Master Timer Compare 2 + Register + 0x24 + 0x20 + read-write + 0x00000000 + + + MCMP2 + Master Timer Compare 2 + value + 0 + 16 + + + + + MCMP3R + MCMP3R + Master Timer Compare 3 + Register + 0x28 + 0x20 + read-write + 0x00000000 + + + MCMP3 + Master Timer Compare 3 + value + 0 + 16 + + + + + MCMP4R + MCMP4R + Master Timer Compare 4 + Register + 0x2C + 0x20 + read-write + 0x00000000 + + + MCMP4 + Master Timer Compare 4 + value + 0 + 16 + + + + + + + HRTIM_TIMA + High Resolution Timer: TIMA + HRTIM + 0x40017480 + + 0x0 + 0x80 + registers + + + HRTIM1_MST + HRTIM1 master timer interrupt + 103 + + + HRTIM1_FLT + HRTIM1 fault interrupt + 109 + + + + TIMACR + TIMACR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMAISR + TIMAISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMAICR + TIMAICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMADIER5 + TIMADIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTAR + CNTAR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERAR + PERAR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPAR + REPAR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1AR + CMP1AR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CAR + CMP1CAR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2AR + CMP2AR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3AR + CMP3AR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4AR + CMP4AR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1AR + CPT1AR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2AR + CPT2AR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTAR + DTAR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETA1R + SETA1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTA1R + RSTA1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETA2R + SETA2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTA2R + RSTA2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFAR1 + EEFAR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFAR2 + EEFAR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTAR + RSTAR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMDCMP4 + Timer D Compare 4 + 27 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 26 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 25 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 24 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 23 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 22 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 21 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 20 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPAR + CHPAR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1ACR + CPT1ACR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2ACR + CPT2ACR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTAR + OUTAR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTAR + FLTAR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIMB + High Resolution Timer: TIMB + HRTIM + 0x40017500 + + 0x0 + 0x80 + registers + + + HRTIM1_TIMA + HRTIM1 timer A interrupt + 104 + + + + TIMBCR + TIMBCR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMBISR + TIMBISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMBICR + TIMBICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMBDIER5 + TIMBDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTR + CNTR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERBR + PERBR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPBR + REPBR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1BR + CMP1BR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CBR + CMP1CBR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2BR + CMP2BR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3BR + CMP3BR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4BR + CMP4BR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1BR + CPT1BR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2BR + CPT2BR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTBR + DTBR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETB1R + SETB1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTB1R + RSTB1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETB2R + SETB2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTB2R + RSTB2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFBR1 + EEFBR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFBR2 + EEFBR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTBR + RSTBR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMDCMP4 + Timer D Compare 4 + 27 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 26 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 25 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 24 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 23 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPBR + CHPBR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1BCR + CPT1BCR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2BCR + CPT2BCR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTBR + OUTBR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTBR + FLTBR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIMC + High Resolution Timer: TIMC + HRTIM + 0x40017580 + + 0x0 + 0x80 + registers + + + HRTIM_TIMB + HRTIM1 timer B interrupt + 105 + + + + TIMCCR + TIMCCR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMCISR + TIMCISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMCICR + TIMCICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMCDIER5 + TIMCDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTCR + CNTCR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERCR + PERCR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPCR + REPCR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1CR + CMP1CR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CCR + CMP1CCR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2CR + CMP2CR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3CR + CMP3CR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4CR + CMP4CR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1CR + CPT1CR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2CR + CPT2CR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTCR + DTCR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETC1R + SETC1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTC1R + RSTC1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETC2R + SETC2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTC2R + RSTC2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFCR1 + EEFCR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFCR2 + EEFCR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTCR + RSTCR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMDCMP4 + Timer D Compare 4 + 27 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 26 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 25 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 24 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 23 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPCR + CHPCR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1CCR + CPT1CCR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2CCR + CPT2CCR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTCR + OUTCR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTCR + FLTCR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIMD + High Resolution Timer: TIMD + HRTIM + 0x40017600 + + 0x0 + 0x80 + registers + + + HRTIM1_TIMC + HRTIM1 timer C interrupt + 106 + + + + TIMDCR + TIMDCR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMDISR + TIMDISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMDICR + TIMDICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMDDIER5 + TIMDDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTDR + CNTDR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERDR + PERDR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPDR + REPDR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1DR + CMP1DR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CDR + CMP1CDR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2DR + CMP2DR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3DR + CMP3DR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4DR + CMP4DR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1DR + CPT1DR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2DR + CPT2DR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTDR + DTDR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETD1R + SETD1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTD1R + RSTD1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETD2R + SETD2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTD2R + RSTD2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFDR1 + EEFDR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFDR2 + EEFDR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTDR + RSTDR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 27 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 26 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 25 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 24 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 23 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPDR + CHPDR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1DCR + CPT1DCR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2DCR + CPT2DCR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTDR + OUTDR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTDR + FLTDR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIME + High Resolution Timer: TIME + HRTIM + 0x40017680 + + 0x0 + 0x80 + registers + + + HRTIM1_TIMD + HRTIM1 timer D interrupt + 107 + + + + TIMECR + TIMECR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMEISR + TIMEISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMEICR + TIMEICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMEDIER5 + TIMEDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTER + CNTER + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERER + PERER + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPER + REPER + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1ER + CMP1ER + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CER + CMP1CER + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2ER + CMP2ER + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3ER + CMP3ER + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4ER + CMP4ER + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1ER + CPT1ER + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2ER + CPT2ER + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTER + DTER + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETE1R + SETE1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTE1R + RSTE1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETE2R + SETE2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTE2R + RSTE2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFER1 + EEFER1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFER2 + EEFER2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTER + RSTER + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMDCMP4 + Timer D Compare 4 + 30 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 29 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 28 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 27 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 26 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 25 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 24 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 23 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPER + CHPER + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1ECR + CPT1ECR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2ECR + CPT2ECR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTER + OUTER + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTER + FLTER + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_Common + High Resolution Timer: Common + functions + HRTIM + 0x40017780 + + 0x0 + 0x80 + registers + + + HRTIM_TIME + HRTIM1 timer E interrupt + 108 + + + + CR1 + CR1 + Control Register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + AD4USRC + ADC Trigger 4 Update + Source + 25 + 3 + + + AD3USRC + ADC Trigger 3 Update + Source + 22 + 3 + + + AD2USRC + ADC Trigger 2 Update + Source + 19 + 3 + + + AD1USRC + ADC Trigger 1 Update + Source + 16 + 3 + + + TEUDIS + Timer E Update Disable + 5 + 1 + + + TDUDIS + Timer D Update Disable + 4 + 1 + + + TCUDIS + Timer C Update Disable + 3 + 1 + + + TBUDIS + Timer B Update Disable + 2 + 1 + + + TAUDIS + Timer A Update Disable + 1 + 1 + + + MUDIS + Master Update Disable + 0 + 1 + + + + + CR2 + CR2 + Control Register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + TERST + Timer E counter software + reset + 13 + 1 + + + TDRST + Timer D counter software + reset + 12 + 1 + + + TCRST + Timer C counter software + reset + 11 + 1 + + + TBRST + Timer B counter software + reset + 10 + 1 + + + TARST + Timer A counter software + reset + 9 + 1 + + + MRST + Master Counter software + reset + 8 + 1 + + + TESWU + Timer E Software Update + 5 + 1 + + + TDSWU + Timer D Software Update + 4 + 1 + + + TCSWU + Timer C Software Update + 3 + 1 + + + TBSWU + Timer B Software Update + 2 + 1 + + + TASWU + Timer A Software update + 1 + 1 + + + MSWU + Master Timer Software + update + 0 + 1 + + + + + ISR + ISR + Interrupt Status Register + 0x8 + 0x20 + 0x00000000 + + + BMPER + Burst mode Period Interrupt + Flag + 17 + 1 + read-only + + + DLLRDY + DLL Ready Interrupt Flag + 16 + 1 + read-only + + + SYSFLT + System Fault Interrupt + Flag + 5 + 1 + read-write + + + FLT5 + Fault 5 Interrupt Flag + 4 + 1 + read-only + + + FLT4 + Fault 4 Interrupt Flag + 3 + 1 + read-only + + + FLT3 + Fault 3 Interrupt Flag + 2 + 1 + read-only + + + FLT2 + Fault 2 Interrupt Flag + 1 + 1 + read-only + + + FLT1 + Fault 1 Interrupt Flag + 0 + 1 + read-only + + + + + ICR + ICR + Interrupt Clear Register + 0xC + 0x20 + 0x00000000 + + + BMPERC + Burst mode period flag + Clear + 17 + 1 + write-only + + + DLLRDYC + DLL Ready Interrupt flag + Clear + 16 + 1 + write-only + + + SYSFLTC + System Fault Interrupt Flag + Clear + 5 + 1 + read-write + + + FLT5C + Fault 5 Interrupt Flag + Clear + 4 + 1 + write-only + + + FLT4C + Fault 4 Interrupt Flag + Clear + 3 + 1 + write-only + + + FLT3C + Fault 3 Interrupt Flag + Clear + 2 + 1 + write-only + + + FLT2C + Fault 2 Interrupt Flag + Clear + 1 + 1 + write-only + + + FLT1C + Fault 1 Interrupt Flag + Clear + 0 + 1 + write-only + + + + + IER + IER + Interrupt Enable Register + 0x10 + 0x20 + read-write + 0x00000000 + + + BMPERIE + Burst mode period Interrupt + Enable + 17 + 1 + + + DLLRDYIE + DLL Ready Interrupt Enable + 16 + 1 + + + SYSFLTE + System Fault Interrupt + Enable + 5 + 1 + + + FLT5IE + Fault 5 Interrupt Enable + 4 + 1 + + + FLT4IE + Fault 4 Interrupt Enable + 3 + 1 + + + FLT3IE + Fault 3 Interrupt Enable + 2 + 1 + + + FLT2IE + Fault 2 Interrupt Enable + 1 + 1 + + + FLT1IE + Fault 1 Interrupt Enable + 0 + 1 + + + + + OENR + OENR + Output Enable Register + 0x14 + 0x20 + write-only + 0x00000000 + + + TE2OEN + Timer E Output 2 Enable + 9 + 1 + + + TE1OEN + Timer E Output 1 Enable + 8 + 1 + + + TD2OEN + Timer D Output 2 Enable + 7 + 1 + + + TD1OEN + Timer D Output 1 Enable + 6 + 1 + + + TC2OEN + Timer C Output 2 Enable + 5 + 1 + + + TC1OEN + Timer C Output 1 Enable + 4 + 1 + + + TB2OEN + Timer B Output 2 Enable + 3 + 1 + + + TB1OEN + Timer B Output 1 Enable + 2 + 1 + + + TA2OEN + Timer A Output 2 Enable + 1 + 1 + + + TA1OEN + Timer A Output 1 Enable + 0 + 1 + + + + + DISR + DISR + DISR + 0x18 + 0x20 + read-write + 0x00000000 + + + TE2ODIS + TE2ODIS + 9 + 1 + + + TE1ODIS + TE1ODIS + 8 + 1 + + + TD2ODIS + TD2ODIS + 7 + 1 + + + TD1ODIS + TD1ODIS + 6 + 1 + + + TC2ODIS + TC2ODIS + 5 + 1 + + + TC1ODIS + TC1ODIS + 4 + 1 + + + TB2ODIS + TB2ODIS + 3 + 1 + + + TB1ODIS + TB1ODIS + 2 + 1 + + + TA2ODIS + TA2ODIS + 1 + 1 + + + TA1ODIS + TA1ODIS + 0 + 1 + + + + + ODSR + ODSR + Output Disable Status Register + 0x1C + 0x20 + read-only + 0x00000000 + + + TE2ODS + Timer E Output 2 disable + status + 9 + 1 + + + TE1ODS + Timer E Output 1 disable + status + 8 + 1 + + + TD2ODS + Timer D Output 2 disable + status + 7 + 1 + + + TD1ODS + Timer D Output 1 disable + status + 6 + 1 + + + TC2ODS + Timer C Output 2 disable + status + 5 + 1 + + + TC1ODS + Timer C Output 1 disable + status + 4 + 1 + + + TB2ODS + Timer B Output 2 disable + status + 3 + 1 + + + TB1ODS + Timer B Output 1 disable + status + 2 + 1 + + + TA2ODS + Timer A Output 2 disable + status + 1 + 1 + + + TA1ODS + Timer A Output 1 disable + status + 0 + 1 + + + + + BMCR + BMCR + Burst Mode Control Register + 0x20 + 0x20 + read-write + 0x00000000 + + + BMSTAT + Burst Mode Status + 31 + 1 + + + TEBM + Timer E Burst Mode + 21 + 1 + + + TDBM + Timer D Burst Mode + 20 + 1 + + + TCBM + Timer C Burst Mode + 19 + 1 + + + TBBM + Timer B Burst Mode + 18 + 1 + + + TABM + Timer A Burst Mode + 17 + 1 + + + MTBM + Master Timer Burst Mode + 16 + 1 + + + BMPREN + Burst Mode Preload Enable + 10 + 1 + + + BMPRSC + Burst Mode Prescaler + 6 + 4 + + + BMCLK + Burst Mode Clock source + 2 + 4 + + + BMOM + Burst Mode operating mode + 1 + 1 + + + BME + Burst Mode enable + 0 + 1 + + + + + BMTRG + BMTRG + BMTRG + 0x24 + 0x20 + read-write + 0x00000000 + + + OCHPEV + OCHPEV + 31 + 1 + + + TECMP2 + TECMP2 + 26 + 1 + + + TECMP1 + TECMP1 + 25 + 1 + + + TEREP + TEREP + 24 + 1 + + + TERST + TERST + 23 + 1 + + + TDCMP2 + TDCMP2 + 22 + 1 + + + TDCMP1 + TDCMP1 + 21 + 1 + + + TDREP + TDREP + 20 + 1 + + + TDRST + TDRST + 19 + 1 + + + TCCMP2 + TCCMP2 + 18 + 1 + + + TCCMP1 + TCCMP1 + 17 + 1 + + + TCREP + TCREP + 16 + 1 + + + TCRST + TCRST + 15 + 1 + + + TBCMP2 + TBCMP2 + 14 + 1 + + + TBCMP1 + TBCMP1 + 13 + 1 + + + TBREP + TBREP + 12 + 1 + + + TBRST + TBRST + 11 + 1 + + + TACMP2 + TACMP2 + 10 + 1 + + + TACMP1 + TACMP1 + 9 + 1 + + + TAREP + TAREP + 8 + 1 + + + TARST + TARST + 7 + 1 + + + MSTCMP4 + MSTCMP4 + 6 + 1 + + + MSTCMP3 + MSTCMP3 + 5 + 1 + + + MSTCMP2 + MSTCMP2 + 4 + 1 + + + MSTCMP1 + MSTCMP1 + 3 + 1 + + + MSTREP + MSTREP + 2 + 1 + + + MSTRST + MSTRST + 1 + 1 + + + SW + SW + 0 + 1 + + + + + BMCMPR6 + BMCMPR6 + BMCMPR6 + 0x28 + 0x20 + read-write + 0x00000000 + + + BMCMP + BMCMP + 0 + 16 + + + + + BMPER + BMPER + Burst Mode Period Register + 0x2C + 0x20 + read-write + 0x00000000 + + + BMPER + Burst mode Period + 0 + 16 + + + + + EECR1 + EECR1 + Timer External Event Control Register + 1 + 0x30 + 0x20 + read-write + 0x00000000 + + + EE5FAST + External Event 5 Fast mode + 29 + 1 + + + EE5SNS + External Event 5 + Sensitivity + 27 + 2 + + + EE5POL + External Event 5 Polarity + 26 + 1 + + + EE5SRC + External Event 5 Source + 24 + 2 + + + EE4FAST + External Event 4 Fast mode + 23 + 1 + + + EE4SNS + External Event 4 + Sensitivity + 21 + 2 + + + EE4POL + External Event 4 Polarity + 20 + 1 + + + EE4SRC + External Event 4 Source + 18 + 2 + + + EE3FAST + External Event 3 Fast mode + 17 + 1 + + + EE3SNS + External Event 3 + Sensitivity + 15 + 2 + + + EE3POL + External Event 3 Polarity + 14 + 1 + + + EE3SRC + External Event 3 Source + 12 + 2 + + + EE2FAST + External Event 2 Fast mode + 11 + 1 + + + EE2SNS + External Event 2 + Sensitivity + 9 + 2 + + + EE2POL + External Event 2 Polarity + 8 + 1 + + + EE2SRC + External Event 2 Source + 6 + 2 + + + EE1FAST + External Event 1 Fast mode + 5 + 1 + + + EE1SNS + External Event 1 + Sensitivity + 3 + 2 + + + EE1POL + External Event 1 Polarity + 2 + 1 + + + EE1SRC + External Event 1 Source + 0 + 2 + + + + + EECR2 + EECR2 + Timer External Event Control Register + 2 + 0x34 + 0x20 + read-write + 0x00000000 + + + EE10SNS + External Event 10 + Sensitivity + 27 + 2 + + + EE10POL + External Event 10 Polarity + 26 + 1 + + + EE10SRC + External Event 10 Source + 24 + 2 + + + EE9SNS + External Event 9 + Sensitivity + 21 + 2 + + + EE9POL + External Event 9 Polarity + 20 + 1 + + + EE9SRC + External Event 9 Source + 18 + 2 + + + EE8SNS + External Event 8 + Sensitivity + 15 + 2 + + + EE8POL + External Event 8 Polarity + 14 + 1 + + + EE8SRC + External Event 8 Source + 12 + 2 + + + EE7SNS + External Event 7 + Sensitivity + 9 + 2 + + + EE7POL + External Event 7 Polarity + 8 + 1 + + + EE7SRC + External Event 7 Source + 6 + 2 + + + EE6SNS + External Event 6 + Sensitivity + 3 + 2 + + + EE6POL + External Event 6 Polarity + 2 + 1 + + + EE6SRC + External Event 6 Source + 0 + 2 + + + + + EECR3 + EECR3 + Timer External Event Control Register + 3 + 0x38 + 0x20 + read-write + 0x00000000 + + + EE10SNS + EE10SNS + 27 + 2 + + + EE10POL + EE10POL + 26 + 1 + + + EE10SRC + EE10SRC + 24 + 2 + + + EE9SNS + EE9SNS + 21 + 2 + + + EE9POL + EE9POL + 20 + 1 + + + EE9SRC + EE9SRC + 18 + 2 + + + EE8SNS + EE8SNS + 15 + 2 + + + EE8POL + EE8POL + 14 + 1 + + + EE8SRC + EE8SRC + 12 + 2 + + + EE7SNS + EE7SNS + 9 + 2 + + + EE7POL + EE7POL + 8 + 1 + + + EE7SRC + EE7SRC + 6 + 2 + + + EE6SNS + EE6SNS + 3 + 2 + + + EE6POL + EE6POL + 2 + 1 + + + EE6SRC + EE6SRC + 0 + 2 + + + + + ADC1R + ADC1R + ADC Trigger 1 Register + 0x3C + 0x20 + read-write + 0x00000000 + + + AD1TEPER + ADC trigger 1 on Timer E + Period + 31 + 1 + + + AD1TEC4 + ADC trigger 1 on Timer E compare + 4 + 30 + 1 + + + AD1TEC3 + ADC trigger 1 on Timer E compare + 3 + 29 + 1 + + + AD1TEC2 + ADC trigger 1 on Timer E compare + 2 + 28 + 1 + + + AD1TDPER + ADC trigger 1 on Timer D + Period + 27 + 1 + + + AD1TDC4 + ADC trigger 1 on Timer D compare + 4 + 26 + 1 + + + AD1TDC3 + ADC trigger 1 on Timer D compare + 3 + 25 + 1 + + + AD1TDC2 + ADC trigger 1 on Timer D compare + 2 + 24 + 1 + + + AD1TCPER + ADC trigger 1 on Timer C + Period + 23 + 1 + + + AD1TCC4 + ADC trigger 1 on Timer C compare + 4 + 22 + 1 + + + AD1TCC3 + ADC trigger 1 on Timer C compare + 3 + 21 + 1 + + + AD1TCC2 + ADC trigger 1 on Timer C compare + 2 + 20 + 1 + + + AD1TBRST + ADC trigger 1 on Timer B + Reset + 19 + 1 + + + AD1TBPER + ADC trigger 1 on Timer B + Period + 18 + 1 + + + AD1TBC4 + ADC trigger 1 on Timer B compare + 4 + 17 + 1 + + + AD1TBC3 + ADC trigger 1 on Timer B compare + 3 + 16 + 1 + + + AD1TBC2 + ADC trigger 1 on Timer B compare + 2 + 15 + 1 + + + AD1TARST + ADC trigger 1 on Timer A + Reset + 14 + 1 + + + AD1TAPER + ADC trigger 1 on Timer A + Period + 13 + 1 + + + AD1TAC4 + ADC trigger 1 on Timer A compare + 4 + 12 + 1 + + + AD1TAC3 + ADC trigger 1 on Timer A compare + 3 + 11 + 1 + + + AD1TAC2 + ADC trigger 1 on Timer A compare + 2 + 10 + 1 + + + AD1EEV5 + ADC trigger 1 on External Event + 5 + 9 + 1 + + + AD1EEV4 + ADC trigger 1 on External Event + 4 + 8 + 1 + + + AD1EEV3 + ADC trigger 1 on External Event + 3 + 7 + 1 + + + AD1EEV2 + ADC trigger 1 on External Event + 2 + 6 + 1 + + + AD1EEV1 + ADC trigger 1 on External Event + 1 + 5 + 1 + + + AD1MPER + ADC trigger 1 on Master + Period + 4 + 1 + + + AD1MC4 + ADC trigger 1 on Master Compare + 4 + 3 + 1 + + + AD1MC3 + ADC trigger 1 on Master Compare + 3 + 2 + 1 + + + AD1MC2 + ADC trigger 1 on Master Compare + 2 + 1 + 1 + + + AD1MC1 + ADC trigger 1 on Master Compare + 1 + 0 + 1 + + + + + ADC2R + ADC2R + ADC Trigger 2 Register + 0x40 + 0x20 + read-write + 0x00000000 + + + AD2TERST + ADC trigger 2 on Timer E + Reset + 31 + 1 + + + AD2TEC4 + ADC trigger 2 on Timer E compare + 4 + 30 + 1 + + + AD2TEC3 + ADC trigger 2 on Timer E compare + 3 + 29 + 1 + + + AD2TEC2 + ADC trigger 2 on Timer E compare + 2 + 28 + 1 + + + AD2TDRST + ADC trigger 2 on Timer D + Reset + 27 + 1 + + + AD2TDPER + ADC trigger 2 on Timer D + Period + 26 + 1 + + + AD2TDC4 + ADC trigger 2 on Timer D compare + 4 + 25 + 1 + + + AD2TDC3 + ADC trigger 2 on Timer D compare + 3 + 24 + 1 + + + AD2TDC2 + ADC trigger 2 on Timer D compare + 2 + 23 + 1 + + + AD2TCRST + ADC trigger 2 on Timer C + Reset + 22 + 1 + + + AD2TCPER + ADC trigger 2 on Timer C + Period + 21 + 1 + + + AD2TCC4 + ADC trigger 2 on Timer C compare + 4 + 20 + 1 + + + AD2TCC3 + ADC trigger 2 on Timer C compare + 3 + 19 + 1 + + + AD2TCC2 + ADC trigger 2 on Timer C compare + 2 + 18 + 1 + + + AD2TBPER + ADC trigger 2 on Timer B + Period + 17 + 1 + + + AD2TBC4 + ADC trigger 2 on Timer B compare + 4 + 16 + 1 + + + AD2TBC3 + ADC trigger 2 on Timer B compare + 3 + 15 + 1 + + + AD2TBC2 + ADC trigger 2 on Timer B compare + 2 + 14 + 1 + + + AD2TAPER + ADC trigger 2 on Timer A + Period + 13 + 1 + + + AD2TAC4 + ADC trigger 2 on Timer A compare + 4 + 12 + 1 + + + AD2TAC3 + ADC trigger 2 on Timer A compare + 3 + 11 + 1 + + + AD2TAC2 + ADC trigger 2 on Timer A compare + 2 + 10 + 1 + + + AD2EEV10 + ADC trigger 2 on External Event + 10 + 9 + 1 + + + AD2EEV9 + ADC trigger 2 on External Event + 9 + 8 + 1 + + + AD2EEV8 + ADC trigger 2 on External Event + 8 + 7 + 1 + + + AD2EEV7 + ADC trigger 2 on External Event + 7 + 6 + 1 + + + AD2EEV6 + ADC trigger 2 on External Event + 6 + 5 + 1 + + + AD2MPER + ADC trigger 2 on Master + Period + 4 + 1 + + + AD2MC4 + ADC trigger 2 on Master Compare + 4 + 3 + 1 + + + AD2MC3 + ADC trigger 2 on Master Compare + 3 + 2 + 1 + + + AD2MC2 + ADC trigger 2 on Master Compare + 2 + 1 + 1 + + + AD2MC1 + ADC trigger 2 on Master Compare + 1 + 0 + 1 + + + + + ADC3R + ADC3R + ADC Trigger 3 Register + 0x44 + 0x20 + read-write + 0x00000000 + + + AD1TEPER + AD1TEPER + 31 + 1 + + + AD1TEC4 + AD1TEC4 + 30 + 1 + + + AD1TEC3 + AD1TEC3 + 29 + 1 + + + AD1TEC2 + AD1TEC2 + 28 + 1 + + + AD1TDPER + AD1TDPER + 27 + 1 + + + AD1TDC4 + AD1TDC4 + 26 + 1 + + + AD1TDC3 + AD1TDC3 + 25 + 1 + + + AD1TDC2 + AD1TDC2 + 24 + 1 + + + AD1TCPER + AD1TCPER + 23 + 1 + + + AD1TCC4 + AD1TCC4 + 22 + 1 + + + AD1TCC3 + AD1TCC3 + 21 + 1 + + + AD1TCC2 + AD1TCC2 + 20 + 1 + + + AD1TBRST + AD1TBRST + 19 + 1 + + + AD1TBPER + AD1TBPER + 18 + 1 + + + AD1TBC4 + AD1TBC4 + 17 + 1 + + + AD1TBC3 + AD1TBC3 + 16 + 1 + + + AD1TBC2 + AD1TBC2 + 15 + 1 + + + AD1TARST + AD1TARST + 14 + 1 + + + AD1TAPER + AD1TAPER + 13 + 1 + + + AD1TAC4 + AD1TAC4 + 12 + 1 + + + AD1TAC3 + AD1TAC3 + 11 + 1 + + + AD1TAC2 + AD1TAC2 + 10 + 1 + + + AD1EEV5 + AD1EEV5 + 9 + 1 + + + AD1EEV4 + AD1EEV4 + 8 + 1 + + + AD1EEV3 + AD1EEV3 + 7 + 1 + + + AD1EEV2 + AD1EEV2 + 6 + 1 + + + AD1EEV1 + AD1EEV1 + 5 + 1 + + + AD1MPER + AD1MPER + 4 + 1 + + + AD1MC4 + AD1MC4 + 3 + 1 + + + AD1MC3 + AD1MC3 + 2 + 1 + + + AD1MC2 + AD1MC2 + 1 + 1 + + + AD1MC1 + AD1MC1 + 0 + 1 + + + + + ADC4R + ADC4R + ADC Trigger 4 Register + 0x48 + 0x20 + read-write + 0x00000000 + + + AD2TERST + AD2TERST + 31 + 1 + + + AD2TEC4 + AD2TEC4 + 30 + 1 + + + AD2TEC3 + AD2TEC3 + 29 + 1 + + + AD2TEC2 + AD2TEC2 + 28 + 1 + + + AD2TDRST + AD2TDRST + 27 + 1 + + + AD2TDPER + AD2TDPER + 26 + 1 + + + AD2TDC4 + AD2TDC4 + 25 + 1 + + + AD2TDC3 + AD2TDC3 + 24 + 1 + + + AD2TDC2 + AD2TDC2 + 23 + 1 + + + AD2TCRST + AD2TCRST + 22 + 1 + + + AD2TCPER + AD2TCPER + 21 + 1 + + + AD2TCC4 + AD2TCC4 + 20 + 1 + + + AD2TCC3 + AD2TCC3 + 19 + 1 + + + AD2TCC2 + AD2TCC2 + 18 + 1 + + + AD2TBPER + AD2TBPER + 17 + 1 + + + AD2TBC4 + AD2TBC4 + 16 + 1 + + + AD2TBC3 + AD2TBC3 + 15 + 1 + + + AD2TBC2 + AD2TBC2 + 14 + 1 + + + AD2TAPER + AD2TAPER + 13 + 1 + + + AD2TAC4 + AD2TAC4 + 12 + 1 + + + AD2TAC3 + AD2TAC3 + 11 + 1 + + + AD2TAC2 + AD2TAC2 + 10 + 1 + + + AD2EEV10 + AD2EEV10 + 9 + 1 + + + AD2EEV9 + AD2EEV9 + 8 + 1 + + + AD2EEV8 + AD2EEV8 + 7 + 1 + + + AD2EEV7 + AD2EEV7 + 6 + 1 + + + AD2EEV6 + AD2EEV6 + 5 + 1 + + + AD2MPER + AD2MPER + 4 + 1 + + + AD2MC4 + AD2MC4 + 3 + 1 + + + AD2MC3 + AD2MC3 + 2 + 1 + + + AD2MC2 + AD2MC2 + 1 + 1 + + + AD2MC1 + AD2MC1 + 0 + 1 + + + + + DLLCR + DLLCR + DLL Control Register + 0x4C + 0x20 + read-write + 0x00000000 + + + CALRTE + DLL Calibration rate + 2 + 2 + + + CALEN + DLL Calibration Enable + 1 + 1 + + + CAL + DLL Calibration Start + 0 + 1 + + + + + FLTINR1 + FLTINR1 + HRTIM Fault Input Register 1 + 0x50 + 0x20 + read-write + 0x00000000 + + + FLT4LCK + FLT4LCK + 31 + 1 + + + FLT4F + FLT4F + 27 + 4 + + + FLT4SRC + FLT4SRC + 26 + 1 + + + FLT4P + FLT4P + 25 + 1 + + + FLT4E + FLT4E + 24 + 1 + + + FLT3LCK + FLT3LCK + 23 + 1 + + + FLT3F + FLT3F + 19 + 4 + + + FLT3SRC + FLT3SRC + 18 + 1 + + + FLT3P + FLT3P + 17 + 1 + + + FLT3E + FLT3E + 16 + 1 + + + FLT2LCK + FLT2LCK + 15 + 1 + + + FLT2F + FLT2F + 11 + 4 + + + FLT2SRC + FLT2SRC + 10 + 1 + + + FLT2P + FLT2P + 9 + 1 + + + FLT2E + FLT2E + 8 + 1 + + + FLT1LCK + FLT1LCK + 7 + 1 + + + FLT1F + FLT1F + 3 + 4 + + + FLT1SRC + FLT1SRC + 2 + 1 + + + FLT1P + FLT1P + 1 + 1 + + + FLT1E + FLT1E + 0 + 1 + + + + + FLTINR2 + FLTINR2 + HRTIM Fault Input Register 2 + 0x54 + 0x20 + read-write + 0x00000000 + + + FLTSD + FLTSD + 24 + 2 + + + FLT5LCK + FLT5LCK + 7 + 1 + + + FLT5F + FLT5F + 3 + 4 + + + FLT5SRC + FLT5SRC + 2 + 1 + + + FLT5P + FLT5P + 1 + 1 + + + FLT5E + FLT5E + 0 + 1 + + + + + BDMUPDR + BDMUPDR + BDMUPDR + 0x58 + 0x20 + read-write + 0x00000000 + + + MCMP4 + MCMP4 + 9 + 1 + + + MCMP3 + MCMP3 + 8 + 1 + + + MCMP2 + MCMP2 + 7 + 1 + + + MCMP1 + MCMP1 + 6 + 1 + + + MREP + MREP + 5 + 1 + + + MPER + MPER + 4 + 1 + + + MCNT + MCNT + 3 + 1 + + + MDIER + MDIER + 2 + 1 + + + MICR + MICR + 1 + 1 + + + MCR + MCR + 0 + 1 + + + + + BDTxUPR + BDTxUPR + Burst DMA Timerx update + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TIMxFLTR + HRTIM_FLTxR register update + enable + 20 + 1 + + + TIMxOUTR + HRTIM_OUTxR register update + enable + 19 + 1 + + + TIMxCHPR + HRTIM_CHPxR register update + enable + 18 + 1 + + + TIMxRSTR + HRTIM_RSTxR register update + enable + 17 + 1 + + + TIMxEEFR2 + HRTIM_EEFxR2 register update + enable + 16 + 1 + + + TIMxEEFR1 + HRTIM_EEFxR1 register update + enable + 15 + 1 + + + TIMxRST2R + HRTIM_RST2xR register update + enable + 14 + 1 + + + TIMxSET2R + HRTIM_SET2xR register update + enable + 13 + 1 + + + TIMxRST1R + HRTIM_RST1xR register update + enable + 12 + 1 + + + TIMxSET1R + HRTIM_SET1xR register update + enable + 11 + 1 + + + TIMx_DTxR + HRTIM_DTxR register update + enable + 10 + 1 + + + TIMxCMP4 + HRTIM_CMP4xR register update + enable + 9 + 1 + + + TIMxCMP3 + HRTIM_CMP3xR register update + enable + 8 + 1 + + + TIMxCMP2 + HRTIM_CMP2xR register update + enable + 7 + 1 + + + TIMxCMP1 + HRTIM_CMP1xR register update + enable + 6 + 1 + + + TIMxREP + HRTIM_REPxR register update + enable + 5 + 1 + + + TIMxPER + HRTIM_PERxR register update + enable + 4 + 1 + + + TIMxCNT + HRTIM_CNTxR register update + enable + 3 + 1 + + + TIMxDIER + HRTIM_TIMxDIER register update + enable + 2 + 1 + + + TIMxICR + HRTIM_TIMxICR register update + enable + 1 + 1 + + + TIMxCR + HRTIM_TIMxCR register update + enable + 0 + 1 + + + + + BDMADR + BDMADR + Burst DMA Data Register + 0x60 + 0x20 + read-write + 0x00000000 + + + BDMADR + Burst DMA Data register + 0 + 32 + + + + + + + DFSDM + Digital filter for sigma delta + modulators + DFSDM + 0x40017000 + + 0x0 + 0x400 + registers + + + DFSDM1_FLT0 + DFSDM1 filter 0 interrupt + 110 + + + DFSDM1_FLT1 + DFSDM1 filter 1 interrupt + 111 + + + DFSDM1_FLT2 + DFSDM1 filter 2 interrupt + 112 + + + DFSDM1_FLT3 + DFSDM1 filter 3 interrupt + 113 + + + + CH0CFGR1 + CH0CFGR1 + channel configuration y + register + 0x0 + 0x20 + read-write + 0x0 + + + DFSDMEN + DFSDMEN + 31 + 1 + + + CKOUTSRC + CKOUTSRC + 30 + 1 + + + CKOUTDIV + CKOUTDIV + 16 + 8 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH0CFGR2 + CH0CFGR2 + channel configuration y + register + 0x4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH0AWSCDR + CH0AWSCDR + analog watchdog and short-circuit detector + register + 0x8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH0WDATR + CH0WDATR + channel watchdog filter data + register + 0xC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH0DATINR + CH0DATINR + channel data input register + 0x10 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH0DLYR + CH0DLYR + channel y delay register + 0x14 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH1CFGR1 + CH1CFGR1 + CH1CFGR1 + 0x20 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH1CFGR2 + CH1CFGR2 + CH1CFGR2 + 0x24 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH1AWSCDR + CH1AWSCDR + CH1AWSCDR + 0x28 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH1WDATR + CH1WDATR + CH1WDATR + 0x2C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH1DATINR + CH1DATINR + CH1DATINR + 0x30 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH1DLYR + CH1DLYR + channel y delay register + 0x34 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH2CFGR1 + CH2CFGR1 + CH2CFGR1 + 0x40 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH2CFGR2 + CH2CFGR2 + CH2CFGR2 + 0x44 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH2AWSCDR + CH2AWSCDR + CH2AWSCDR + 0x48 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH2WDATR + CH2WDATR + CH2WDATR + 0x4C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH2DATINR + CH2DATINR + CH2DATINR + 0x50 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH2DLYR + CH2DLYR + channel y delay register + 0x54 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH3CFGR1 + CH3CFGR1 + CH3CFGR1 + 0x60 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH3CFGR2 + CH3CFGR2 + CH3CFGR2 + 0x64 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH3AWSCDR + CH3AWSCDR + CH3AWSCDR + 0x68 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH3WDATR + CH3WDATR + CH3WDATR + 0x6C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH3DATINR + CH3DATINR + CH3DATINR + 0x70 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH3DLYR + CH3DLYR + channel y delay register + 0x74 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH4CFGR1 + CH4CFGR1 + CH4CFGR1 + 0x80 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH4CFGR2 + CH4CFGR2 + CH4CFGR2 + 0x84 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH4AWSCDR + CH4AWSCDR + CH4AWSCDR + 0x88 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH4WDATR + CH4WDATR + CH4WDATR + 0x8C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH4DATINR + CH4DATINR + CH4DATINR + 0x90 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH4DLYR + CH4DLYR + channel y delay register + 0x94 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH5CFGR1 + CH5CFGR1 + CH5CFGR1 + 0xA0 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH5CFGR2 + CH5CFGR2 + CH5CFGR2 + 0xA4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH5AWSCDR + CH5AWSCDR + CH5AWSCDR + 0xA8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH5WDATR + CH5WDATR + CH5WDATR + 0xAC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH5DATINR + CH5DATINR + CH5DATINR + 0xB0 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH5DLYR + CH5DLYR + channel y delay register + 0xB4 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH6CFGR1 + CH6CFGR1 + CH6CFGR1 + 0xC0 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH6CFGR2 + CH6CFGR2 + CH6CFGR2 + 0xC4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH6AWSCDR + CH6AWSCDR + CH6AWSCDR + 0xC8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH6WDATR + CH6WDATR + CH6WDATR + 0xCC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH6DATINR + CH6DATINR + CH6DATINR + 0xD0 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH6DLYR + CH6DLYR + channel y delay register + 0xD4 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH7CFGR1 + CH7CFGR1 + CH7CFGR1 + 0xE0 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH7CFGR2 + CH7CFGR2 + CH7CFGR2 + 0xE4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH7AWSCDR + CH7AWSCDR + CH7AWSCDR + 0xE8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH7WDATR + CH7WDATR + CH7WDATR + 0xEC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH7DATINR + CH7DATINR + CH7DATINR + 0xF0 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH7DLYR + CH7DLYR + channel y delay register + 0xF4 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + DFSDM_FLT0CR1 + DFSDM_FLT0CR1 + control register 1 + 0x100 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT0CR2 + DFSDM_FLT0CR2 + control register 2 + 0x104 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT0ISR + DFSDM_FLT0ISR + interrupt and status register + 0x108 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT0ICR + DFSDM_FLT0ICR + interrupt flag clear register + 0x10C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT0JCHGR + DFSDM_FLT0JCHGR + injected channel group selection + register + 0x110 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT0FCR + DFSDM_FLT0FCR + filter control register + 0x114 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT0JDATAR + DFSDM_FLT0JDATAR + data register for injected + group + 0x118 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT0RDATAR + DFSDM_FLT0RDATAR + data register for the regular + channel + 0x11C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT0AWHTR + DFSDM_FLT0AWHTR + analog watchdog high threshold + register + 0x120 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT0AWLTR + DFSDM_FLT0AWLTR + analog watchdog low threshold + register + 0x124 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT0AWSR + DFSDM_FLT0AWSR + analog watchdog status + register + 0x128 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT0AWCFR + DFSDM_FLT0AWCFR + analog watchdog clear flag + register + 0x12C + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT0EXMAX + DFSDM_FLT0EXMAX + Extremes detector maximum + register + 0x130 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT0EXMIN + DFSDM_FLT0EXMIN + Extremes detector minimum + register + 0x134 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT0CNVTIMR + DFSDM_FLT0CNVTIMR + conversion timer register + 0x138 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + DFSDM_FLT1CR1 + DFSDM_FLT1CR1 + control register 1 + 0x180 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT1CR2 + DFSDM_FLT1CR2 + control register 2 + 0x184 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT1ISR + DFSDM_FLT1ISR + interrupt and status register + 0x188 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT1ICR + DFSDM1_ICR + interrupt flag clear register + 0x18C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT1CHGR + DFSDM_FLT1JCHGR + injected channel group selection + register + 0x190 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT1FCR + DFSDM1_FCR + filter control register + 0x194 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT1JDATAR + DFSDM_FLT1JDATAR + data register for injected + group + 0x198 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT1RDATAR + DFSDM_FLT1RDATAR + data register for the regular + channel + 0x19C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT1AWHTR + DFSDM_FLT1AWHTR + analog watchdog high threshold + register + 0x1A0 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT1AWLTR + DFSDM_FLT1AWLTR + analog watchdog low threshold + register + 0x1A4 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT1AWSR + DFSDM_FLT1AWSR + analog watchdog status + register + 0x1A8 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT1AWCFR + DFSDM_FLT1AWCFR + analog watchdog clear flag + register + 0x1AC + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT1EXMAX + DFSDM_FLT1EXMAX + Extremes detector maximum + register + 0x1B0 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT1EXMIN + DFSDM_FLT1EXMIN + Extremes detector minimum + register + 0x1B4 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT1CNVTIMR + DFSDM_FLT1CNVTIMR + conversion timer register + 0x1B8 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + DFSDM_FLT2CR1 + DFSDM_FLT2CR1 + control register 1 + 0x200 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT2CR2 + DFSDM_FLT2CR2 + control register 2 + 0x204 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT2ISR + DFSDM_FLT2ISR + interrupt and status register + 0x208 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT2ICR + DFSDM_FLT2ICR + interrupt flag clear register + 0x20C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT2JCHGR + DFSDM_FLT2JCHGR + injected channel group selection + register + 0x210 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT2FCR + DFSDM_FLT2FCR + filter control register + 0x214 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT2JDATAR + DFSDM_FLT2JDATAR + data register for injected + group + 0x218 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT2RDATAR + DFSDM_FLT2RDATAR + data register for the regular + channel + 0x21C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT2AWHTR + DFSDM_FLT2AWHTR + analog watchdog high threshold + register + 0x220 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT2AWLTR + DFSDM_FLT2AWLTR + analog watchdog low threshold + register + 0x224 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT2AWSR + DFSDM_FLT2AWSR + analog watchdog status + register + 0x228 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT2AWCFR + DFSDM_FLT2AWCFR + analog watchdog clear flag + register + 0x22C + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT2EXMAX + DFSDM_FLT2EXMAX + Extremes detector maximum + register + 0x230 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT2EXMIN + DFSDM_FLT2EXMIN + Extremes detector minimum + register + 0x234 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT2CNVTIMR + DFSDM_FLT2CNVTIMR + conversion timer register + 0x238 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + DFSDM_FLT3CR1 + DFSDM_FLT3CR1 + control register 1 + 0x280 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT3CR2 + DFSDM_FLT3CR2 + control register 2 + 0x284 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT3ISR + DFSDM_FLT3ISR + interrupt and status register + 0x288 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT3ICR + DFSDM_FLT3ICR + interrupt flag clear register + 0x28C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT3JCHGR + DFSDM_FLT3JCHGR + injected channel group selection + register + 0x290 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT3FCR + DFSDM_FLT3FCR + filter control register + 0x294 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT3JDATAR + DFSDM_FLT3JDATAR + data register for injected + group + 0x298 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT3RDATAR + DFSDM_FLT3RDATAR + data register for the regular + channel + 0x29C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT3AWHTR + DFSDM_FLT3AWHTR + analog watchdog high threshold + register + 0x2A0 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT3AWLTR + DFSDM_FLT3AWLTR + analog watchdog low threshold + register + 0x2A4 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT3AWSR + DFSDM_FLT3AWSR + analog watchdog status + register + 0x2A8 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT3AWCFR + DFSDM_FLT3AWCFR + analog watchdog clear flag + register + 0x2AC + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT3EXMAX + DFSDM_FLT3EXMAX + Extremes detector maximum + register + 0x2B0 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT3EXMIN + DFSDM_FLT3EXMIN + Extremes detector minimum + register + 0x2B4 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT3CNVTIMR + DFSDM_FLT3CNVTIMR + conversion timer register + 0x2B8 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + + + TIM16 + General-purpose-timers + TIMs + 0x40014400 + + 0x0 + 0x400 + registers + + + TIM16 + TIM16 global interrupt + 117 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UIE + Update interrupt enable + 0 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + BG + Break generation + 7 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + OC1M_3 + Output Compare 1 mode + 16 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC1F + Input capture 1 filter + 4 + 4 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF Copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + DTG + Dead-time generator setup + 0 + 8 + + + LOCK + Lock configuration + 8 + 2 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + BKE + Break enable + 12 + 1 + + + BKP + Break polarity + 13 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + MOE + Main output enable + 15 + 1 + + + BKF + Break filter + 16 + 4 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + TIM16_AF1 + TIM16_AF1 + TIM16 alternate function register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDFBK1E + BRK dfsdm1_break[1] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + + + TIM16_TISEL + TIM16_TISEL + TIM16 input selection register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + + + + + TIM17 + General-purpose-timers + TIMs + 0x40014800 + + 0x0 + 0x400 + registers + + + TIM17 + TIM17 global interrupt + 118 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UIE + Update interrupt enable + 0 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + BG + Break generation + 7 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + OC1M_3 + Output Compare 1 mode + 16 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC1F + Input capture 1 filter + 4 + 4 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF Copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + DTG + Dead-time generator setup + 0 + 8 + + + LOCK + Lock configuration + 8 + 2 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + BKE + Break enable + 12 + 1 + + + BKP + Break polarity + 13 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + MOE + Main output enable + 15 + 1 + + + BKF + Break filter + 16 + 4 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + TIM17_AF1 + TIM17_AF1 + TIM17 alternate function register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDFBK1E + BRK dfsdm1_break[1] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + + + TIM17_TISEL + TIM17_TISEL + TIM17 input selection register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + + + + + TIM15 + General purpose timers + TIMs + 0x40014000 + + 0x0 + 0x400 + registers + + + TIM15 + TIM15 global interrupt + 116 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + MMS + Master mode selection + 4 + 3 + + + TI1S + TI1 selection + 7 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS2 + Output Idle state 2 + 10 + 1 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x0000 + + + SMS + Slave mode selection + 0 + 3 + + + TS_2_0 + Trigger selection + 4 + 3 + + + MSM + Master/Slave mode + 7 + 1 + + + SMS_3 + Slave mode selection bit 3 + 16 + 1 + + + TS_4_3 + Trigger selection - bit + 4:3 + 20 + 2 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UIE + Update interrupt enable + 0 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + CC2IE + Capture/Compare 2 interrupt + enable + 2 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + TIE + Trigger interrupt enable + 6 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + CC2DE + Capture/Compare 2 DMA request + enable + 10 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + TDE + Trigger DMA request enable + 14 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC2OF + Capture/compare 2 overcapture + flag + 10 + 1 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC2IF + Capture/Compare 2 interrupt + flag + 2 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + BG + Break generation + 7 + 1 + + + TG + Trigger generation + 6 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + CC2G + Capture/compare 2 + generation + 2 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + OC2FE + Output Compare 2 fast + enable + 10 + 1 + + + OC2PE + Output Compare 2 preload + enable + 11 + 1 + + + OC2M + Output Compare 2 mode + 12 + 3 + + + OC1M_3 + Output Compare 1 mode bit + 3 + 16 + 1 + + + OC2M_3 + Output Compare 2 mode bit + 3 + 24 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + IC2PSC + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + IC1F + Input capture 1 filter + 4 + 4 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC2NP + Capture/Compare 2 output + Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output + Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output + enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + CCR2 + CCR2 + capture/compare register 2 + 0x38 + 0x20 + read-write + 0x00000000 + + + CCR2 + Capture/Compare 2 value + 0 + 16 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + MOE + Main output enable + 15 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + BKP + Break polarity + 13 + 1 + + + BKE + Break enable + 12 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + LOCK + Lock configuration + 8 + 2 + + + DTG + Dead-time generator setup + 0 + 8 + + + BKF + Break filter + 16 + 4 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + AF1 + AF1 + TIM15 alternate fdfsdm1_breakon register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDF1BK0E + BRK dfsdm1_break[0] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + + + TISEL + TISEL + TIM15 input selection register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + TI2SEL + selects TI2[0] to TI2[15] + input + 8 + 4 + + + + + + + USART1 + Universal synchronous asynchronous receiver + transmitter + USART + 0x40011000 + + 0x0 + 0x400 + registers + + + USART1 + USART1 global interrupt + 37 + + + + CR1 + CR1 + Control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + RXFFIE + RXFIFO Full interrupt + enable + 31 + 1 + + + TXFEIE + TXFIFO empty interrupt + enable + 30 + 1 + + + FIFOEN + FIFO mode enable + 29 + 1 + + + M1 + Word length + 28 + 1 + + + EOBIE + End of Block interrupt + enable + 27 + 1 + + + RTOIE + Receiver timeout interrupt + enable + 26 + 1 + + + DEAT4 + Driver Enable assertion + time + 25 + 1 + + + DEAT3 + DEAT3 + 24 + 1 + + + DEAT2 + DEAT2 + 23 + 1 + + + DEAT1 + DEAT1 + 22 + 1 + + + DEAT0 + DEAT0 + 21 + 1 + + + DEDT4 + Driver Enable de-assertion + time + 20 + 1 + + + DEDT3 + DEDT3 + 19 + 1 + + + DEDT2 + DEDT2 + 18 + 1 + + + DEDT1 + DEDT1 + 17 + 1 + + + DEDT0 + DEDT0 + 16 + 1 + + + OVER8 + Oversampling mode + 15 + 1 + + + CMIE + Character match interrupt + enable + 14 + 1 + + + MME + Mute mode enable + 13 + 1 + + + M0 + Word length + 12 + 1 + + + WAKE + Receiver wakeup method + 11 + 1 + + + PCE + Parity control enable + 10 + 1 + + + PS + Parity selection + 9 + 1 + + + PEIE + PE interrupt enable + 8 + 1 + + + TXEIE + interrupt enable + 7 + 1 + + + TCIE + Transmission complete interrupt + enable + 6 + 1 + + + RXNEIE + RXNE interrupt enable + 5 + 1 + + + IDLEIE + IDLE interrupt enable + 4 + 1 + + + TE + Transmitter enable + 3 + 1 + + + RE + Receiver enable + 2 + 1 + + + UESM + USART enable in Stop mode + 1 + 1 + + + UE + USART enable + 0 + 1 + + + + + CR2 + CR2 + Control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + ADD4_7 + Address of the USART node + 28 + 4 + + + ADD0_3 + Address of the USART node + 24 + 4 + + + RTOEN + Receiver timeout enable + 23 + 1 + + + ABRMOD1 + Auto baud rate mode + 22 + 1 + + + ABRMOD0 + ABRMOD0 + 21 + 1 + + + ABREN + Auto baud rate enable + 20 + 1 + + + MSBFIRST + Most significant bit first + 19 + 1 + + + TAINV + Binary data inversion + 18 + 1 + + + TXINV + TX pin active level + inversion + 17 + 1 + + + RXINV + RX pin active level + inversion + 16 + 1 + + + SWAP + Swap TX/RX pins + 15 + 1 + + + LINEN + LIN mode enable + 14 + 1 + + + STOP + STOP bits + 12 + 2 + + + CLKEN + Clock enable + 11 + 1 + + + CPOL + Clock polarity + 10 + 1 + + + CPHA + Clock phase + 9 + 1 + + + LBCL + Last bit clock pulse + 8 + 1 + + + LBDIE + LIN break detection interrupt + enable + 6 + 1 + + + LBDL + LIN break detection length + 5 + 1 + + + ADDM7 + 7-bit Address Detection/4-bit Address + Detection + 4 + 1 + + + DIS_NSS + When the DSI_NSS bit is set, the NSS pin + input is ignored + 3 + 1 + + + SLVEN + Synchronous Slave mode + enable + 0 + 1 + + + + + CR3 + CR3 + Control register 3 + 0x8 + 0x20 + read-write + 0x0000 + + + TXFTCFG + TXFIFO threshold + configuration + 29 + 3 + + + RXFTIE + RXFIFO threshold interrupt + enable + 28 + 1 + + + RXFTCFG + Receive FIFO threshold + configuration + 25 + 3 + + + TCBGTIE + Transmission Complete before guard time, + interrupt enable + 24 + 1 + + + TXFTIE + TXFIFO threshold interrupt + enable + 23 + 1 + + + WUFIE + Wakeup from Stop mode interrupt + enable + 22 + 1 + + + WUS + Wakeup from Stop mode interrupt flag + selection + 20 + 2 + + + SCARCNT + Smartcard auto-retry count + 17 + 3 + + + DEP + Driver enable polarity + selection + 15 + 1 + + + DEM + Driver enable mode + 14 + 1 + + + DDRE + DMA Disable on Reception + Error + 13 + 1 + + + OVRDIS + Overrun Disable + 12 + 1 + + + ONEBIT + One sample bit method + enable + 11 + 1 + + + CTSIE + CTS interrupt enable + 10 + 1 + + + CTSE + CTS enable + 9 + 1 + + + RTSE + RTS enable + 8 + 1 + + + DMAT + DMA enable transmitter + 7 + 1 + + + DMAR + DMA enable receiver + 6 + 1 + + + SCEN + Smartcard mode enable + 5 + 1 + + + NACK + Smartcard NACK enable + 4 + 1 + + + HDSEL + Half-duplex selection + 3 + 1 + + + IRLP + Ir low-power + 2 + 1 + + + IREN + Ir mode enable + 1 + 1 + + + EIE + Error interrupt enable + 0 + 1 + + + + + BRR + BRR + Baud rate register + 0xC + 0x20 + read-write + 0x0000 + + + BRR_4_15 + DIV_Mantissa + 4 + 12 + + + BRR_0_3 + DIV_Fraction + 0 + 4 + + + + + GTPR + GTPR + Guard time and prescaler + register + 0x10 + 0x20 + read-write + 0x0000 + + + GT + Guard time value + 8 + 8 + + + PSC + Prescaler value + 0 + 8 + + + + + RTOR + RTOR + Receiver timeout register + 0x14 + 0x20 + read-write + 0x0000 + + + BLEN + Block Length + 24 + 8 + + + RTO + Receiver timeout value + 0 + 24 + + + + + RQR + RQR + Request register + 0x18 + 0x20 + write-only + 0x0000 + + + TXFRQ + Transmit data flush + request + 4 + 1 + + + RXFRQ + Receive data flush request + 3 + 1 + + + MMRQ + Mute mode request + 2 + 1 + + + SBKRQ + Send break request + 1 + 1 + + + ABRRQ + Auto baud rate request + 0 + 1 + + + + + ISR + ISR + Interrupt & status + register + 0x1C + 0x20 + read-only + 0x00C0 + + + TXFT + TXFIFO threshold flag + 27 + 1 + + + RXFT + RXFIFO threshold flag + 26 + 1 + + + TCBGT + Transmission complete before guard time + flag + 25 + 1 + + + RXFF + RXFIFO Full + 24 + 1 + + + TXFE + TXFIFO Empty + 23 + 1 + + + REACK + REACK + 22 + 1 + + + TEACK + TEACK + 21 + 1 + + + WUF + WUF + 20 + 1 + + + RWU + RWU + 19 + 1 + + + SBKF + SBKF + 18 + 1 + + + CMF + CMF + 17 + 1 + + + BUSY + BUSY + 16 + 1 + + + ABRF + ABRF + 15 + 1 + + + ABRE + ABRE + 14 + 1 + + + UDR + SPI slave underrun error + flag + 13 + 1 + + + EOBF + EOBF + 12 + 1 + + + RTOF + RTOF + 11 + 1 + + + CTS + CTS + 10 + 1 + + + CTSIF + CTSIF + 9 + 1 + + + LBDF + LBDF + 8 + 1 + + + TXE + TXE + 7 + 1 + + + TC + TC + 6 + 1 + + + RXNE + RXNE + 5 + 1 + + + IDLE + IDLE + 4 + 1 + + + ORE + ORE + 3 + 1 + + + NF + NF + 2 + 1 + + + FE + FE + 1 + 1 + + + PE + PE + 0 + 1 + + + + + ICR + ICR + Interrupt flag clear register + 0x20 + 0x20 + write-only + 0x0000 + + + WUCF + Wakeup from Stop mode clear + flag + 20 + 1 + + + CMCF + Character match clear flag + 17 + 1 + + + UDRCF + SPI slave underrun clear + flag + 13 + 1 + + + EOBCF + End of block clear flag + 12 + 1 + + + RTOCF + Receiver timeout clear + flag + 11 + 1 + + + CTSCF + CTS clear flag + 9 + 1 + + + LBDCF + LIN break detection clear + flag + 8 + 1 + + + TCBGTC + Transmission complete before Guard time + clear flag + 7 + 1 + + + TCCF + Transmission complete clear + flag + 6 + 1 + + + TXFECF + TXFIFO empty clear flag + 5 + 1 + + + IDLECF + Idle line detected clear + flag + 4 + 1 + + + ORECF + Overrun error clear flag + 3 + 1 + + + NCF + Noise detected clear flag + 2 + 1 + + + FECF + Framing error clear flag + 1 + 1 + + + PECF + Parity error clear flag + 0 + 1 + + + + + RDR + RDR + Receive data register + 0x24 + 0x20 + read-only + 0x0000 + + + RDR + Receive data value + 0 + 9 + + + + + TDR + TDR + Transmit data register + 0x28 + 0x20 + read-write + 0x0000 + + + TDR + Transmit data value + 0 + 9 + + + + + PRESC + PRESC + USART prescaler register + 0x2C + 0x20 + read-write + 0x0000 + + + PRESCALER + Clock prescaler + 0 + 4 + + + + + + + USART2 + 0x40004400 + + USART2 + USART2 global interrupt + 38 + + + + USART3 + 0x40004800 + + USART3 + USART3 global interrupt + 39 + + + + UART4 + 0x40004C00 + + UART4 + UART4 global interrupt + 52 + + + + UART5 + 0x40005000 + + UART5 + UART5 global interrupt + 53 + + + + USART6 + 0x40011400 + + USART6 + USART6 global interrupt + 71 + + + + UART7 + 0x40007800 + + UART7 + UART7 global interrupt + 82 + + + + UART8 + 0x40007C00 + + UART8 + UART8 global interrupt + 83 + + + + TIM1 + Advanced-timers + TIM + 0x40010000 + + 0x0 + 0x400 + registers + + + TIM1_BRK + TIM1 break interrupt + 24 + + + TIM1_UP + TIM1 update interrupt + 25 + + + TIM1_TRG_COM + TIM1 trigger and commutation + 26 + + + TIM_CC + TIM1 capture / compare + 27 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + DIR + Direction + 4 + 1 + + + CMS + Center-aligned mode + selection + 5 + 2 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + MMS2 + Master mode selection 2 + 20 + 4 + + + OIS6 + Output Idle state 6 + 18 + 1 + + + OIS5 + Output Idle state 5 + 16 + 1 + + + OIS4 + Output Idle state 4 + 14 + 1 + + + OIS3N + Output Idle state 3 + 13 + 1 + + + OIS3 + Output Idle state 3 + 12 + 1 + + + OIS2N + Output Idle state 2 + 11 + 1 + + + OIS2 + Output Idle state 2 + 10 + 1 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + TI1S + TI1 selection + 7 + 1 + + + MMS + Master mode selection + 4 + 3 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x0000 + + + SMS + Slave mode selection + 0 + 3 + + + TS + Trigger selection + 4 + 3 + + + MSM + Master/Slave mode + 7 + 1 + + + ETF + External trigger filter + 8 + 4 + + + ETPS + External trigger prescaler + 12 + 2 + + + ECE + External clock enable + 14 + 1 + + + ETP + External trigger polarity + 15 + 1 + + + SMS_3 + Slave mode selection - bit + 3 + 16 + 1 + + + TS_4_3 + Trigger selection - bit + 4:3 + 20 + 2 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + TDE + Trigger DMA request enable + 14 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + CC4DE + Capture/Compare 4 DMA request + enable + 12 + 1 + + + CC3DE + Capture/Compare 3 DMA request + enable + 11 + 1 + + + CC2DE + Capture/Compare 2 DMA request + enable + 10 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + TIE + Trigger interrupt enable + 6 + 1 + + + CC4IE + Capture/Compare 4 interrupt + enable + 4 + 1 + + + CC3IE + Capture/Compare 3 interrupt + enable + 3 + 1 + + + CC2IE + Capture/Compare 2 interrupt + enable + 2 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC6IF + Compare 6 interrupt flag + 17 + 1 + + + CC5IF + Compare 5 interrupt flag + 16 + 1 + + + SBIF + System Break interrupt + flag + 13 + 1 + + + CC4OF + Capture/Compare 4 overcapture + flag + 12 + 1 + + + CC3OF + Capture/Compare 3 overcapture + flag + 11 + 1 + + + CC2OF + Capture/compare 2 overcapture + flag + 10 + 1 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + B2IF + Break 2 interrupt flag + 8 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC4IF + Capture/Compare 4 interrupt + flag + 4 + 1 + + + CC3IF + Capture/Compare 3 interrupt + flag + 3 + 1 + + + CC2IF + Capture/Compare 2 interrupt + flag + 2 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + UG + Update generation + 0 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + CC2G + Capture/compare 2 + generation + 2 + 1 + + + CC3G + Capture/compare 3 + generation + 3 + 1 + + + CC4G + Capture/compare 4 + generation + 4 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + TG + Trigger generation + 6 + 1 + + + BG + Break generation + 7 + 1 + + + B2G + Break 2 generation + 8 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + OC1CE + Output Compare 1 clear + enable + 7 + 1 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + OC2FE + Output Compare 2 fast + enable + 10 + 1 + + + OC2PE + Output Compare 2 preload + enable + 11 + 1 + + + OC2M + Output Compare 2 mode + 12 + 3 + + + OC2CE + Output Compare 2 clear + enable + 15 + 1 + + + OC1M_3 + Output Compare 1 mode - bit + 3 + 16 + 1 + + + OC2M_3 + Output Compare 2 mode - bit + 3 + 24 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + IC2PCS + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + IC1F + Input capture 1 filter + 4 + 4 + + + ICPCS + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output + mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + CC3S + Capture/Compare 3 + selection + 0 + 2 + + + OC3FE + Output compare 3 fast + enable + 2 + 1 + + + OC3PE + Output compare 3 preload + enable + 3 + 1 + + + OC3M + Output compare 3 mode + 4 + 3 + + + OC3CE + Output compare 3 clear + enable + 7 + 1 + + + CC4S + Capture/Compare 4 + selection + 8 + 2 + + + OC4FE + Output compare 4 fast + enable + 10 + 1 + + + OC4PE + Output compare 4 preload + enable + 11 + 1 + + + OC4M + Output compare 4 mode + 12 + 3 + + + OC4CE + Output compare 4 clear + enable + 15 + 1 + + + OC3M_3 + Output Compare 3 mode - bit + 3 + 16 + 1 + + + OC4M_4 + Output Compare 4 mode - bit + 3 + 24 + 1 + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input + mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + CC4S + Capture/Compare 4 + selection + 8 + 2 + + + IC3F + Input capture 3 filter + 4 + 4 + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + CC3S + Capture/compare 3 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC2E + Capture/Compare 2 output + enable + 4 + 1 + + + CC2P + Capture/Compare 2 output + Polarity + 5 + 1 + + + CC2NE + Capture/Compare 2 complementary output + enable + 6 + 1 + + + CC2NP + Capture/Compare 2 output + Polarity + 7 + 1 + + + CC3E + Capture/Compare 3 output + enable + 8 + 1 + + + CC3P + Capture/Compare 3 output + Polarity + 9 + 1 + + + CC3NE + Capture/Compare 3 complementary output + enable + 10 + 1 + + + CC3NP + Capture/Compare 3 output + Polarity + 11 + 1 + + + CC4E + Capture/Compare 4 output + enable + 12 + 1 + + + CC4P + Capture/Compare 3 output + Polarity + 13 + 1 + + + CC4NP + Capture/Compare 4 complementary output + polarity + 15 + 1 + + + CC5E + Capture/Compare 5 output + enable + 16 + 1 + + + CC5P + Capture/Compare 5 output + polarity + 17 + 1 + + + CC6E + Capture/Compare 6 output + enable + 20 + 1 + + + CC6P + Capture/Compare 6 output + polarity + 21 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + CCR2 + CCR2 + capture/compare register 2 + 0x38 + 0x20 + read-write + 0x00000000 + + + CCR2 + Capture/Compare 2 value + 0 + 16 + + + + + CCR3 + CCR3 + capture/compare register 3 + 0x3C + 0x20 + read-write + 0x00000000 + + + CCR3 + Capture/Compare value + 0 + 16 + + + + + CCR4 + CCR4 + capture/compare register 4 + 0x40 + 0x20 + read-write + 0x00000000 + + + CCR4 + Capture/Compare value + 0 + 16 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + DTG + Dead-time generator setup + 0 + 8 + + + LOCK + Lock configuration + 8 + 2 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + BKE + Break enable + 12 + 1 + + + BKP + Break polarity + 13 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + MOE + Main output enable + 15 + 1 + + + BKF + Break filter + 16 + 4 + + + BK2F + Break 2 filter + 20 + 4 + + + BK2E + Break 2 enable + 24 + 1 + + + BK2P + Break 2 polarity + 25 + 1 + + + + + CCMR3_Output + CCMR3_Output + capture/compare mode register 3 (output + mode) + 0x54 + 0x20 + read-write + 0x0000 + + + OC5FE + Output compare 5 fast + enable + 2 + 1 + + + OC5PE + Output compare 5 preload + enable + 3 + 1 + + + OC5M + Output compare 5 mode + 4 + 3 + + + OC5CE + Output compare 5 clear + enable + 7 + 1 + + + OC6FE + Output compare 6 fast + enable + 10 + 1 + + + OC6PE + Output compare 6 preload + enable + 11 + 1 + + + OC6M + Output compare 6 mode + 12 + 3 + + + OC6CE + Output compare 6 clear + enable + 15 + 1 + + + OC5M3 + Output Compare 5 mode + 16 + 1 + + + OC6M3 + Output Compare 6 mode + 24 + 1 + + + + + CCR5 + CCR5 + capture/compare register 5 + 0x58 + 0x20 + read-write + 0x0000 + + + CCR5 + Capture/Compare 5 value + 0 + 16 + + + GC5C1 + Group Channel 5 and Channel + 1 + 29 + 1 + + + GC5C2 + Group Channel 5 and Channel + 2 + 30 + 1 + + + GC5C3 + Group Channel 5 and Channel + 3 + 31 + 1 + + + + + CRR6 + CRR6 + capture/compare register 6 + 0x5C + 0x20 + read-write + 0x0000 + + + CCR6 + Capture/Compare 6 value + 0 + 16 + + + + + AF1 + AF1 + TIM1 alternate function option register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDF1BK0E + BRK dfsdm1_break[0] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + ETRSEL + ETR source selection + 14 + 4 + + + + + AF2 + AF2 + TIM1 Alternate function odfsdm1_breakster + 2 + 0x64 + 0x20 + read-write + 0x0000 + + + BK2INE + BRK2 BKIN input enable + 0 + 1 + + + BK2CMP1E + BRK2 COMP1 enable + 1 + 1 + + + BK2CMP2E + BRK2 COMP2 enable + 2 + 1 + + + BK2DF1BK1E + BRK2 dfsdm1_break[1] + enable + 8 + 1 + + + BK2INP + BRK2 BKIN2 input polarity + 9 + 1 + + + BK2CMP1P + BRK2 COMP1 input polarit + 10 + 1 + + + BK2CMP2P + BRK2 COMP2 input polarity + 11 + 1 + + + + + TISEL + TISEL + TIM1 timer input selection + register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + TI2SEL + selects TI2[0] to TI2[15] + input + 8 + 4 + + + TI3SEL + selects TI3[0] to TI3[15] + input + 16 + 4 + + + TI4SEL + selects TI4[0] to TI4[15] + input + 24 + 4 + + + + + + + TIM8 + 0x40010400 + + TIM8_BRK_TIM12 + TIM8 and 12 break global + 43 + + + TIM8_UP_TIM13 + TIM8 and 13 update global + 44 + + + TIM8_TRG_COM_TIM14 + TIM8 and 14 trigger /commutation and + global + 45 + + + TIM8_CC + TIM8 capture / compare + 46 + + + + FDCAN1 + FDCAN1 + FDCAN + 0x4000A000 + + 0x0 + 0x400 + registers + + + FDCAN1_IT0 + FDCAN1 Interrupt 0 + 19 + + + FDCAN1_IT1 + FDCAN1 Interrupt 1 + 21 + + + FDCAN_CAL + CAN2TX interrupts + 63 + + + + FDCAN_CREL + FDCAN_CREL + FDCAN Core Release Register + 0x0 + 0x20 + read-only + 0x00000000 + + + REL + Core release + 28 + 4 + + + STEP + Step of Core release + 24 + 4 + + + SUBSTEP + Sub-step of Core release + 20 + 4 + + + YEAR + Timestamp Year + 16 + 4 + + + MON + Timestamp Month + 8 + 8 + + + DAY + Timestamp Day + 0 + 8 + + + + + FDCAN_ENDN + FDCAN_ENDN + FDCAN Core Release Register + 0x4 + 0x20 + read-only + 0x00000000 + + + ETV + Endiannes Test Value + 0 + 32 + + + + + FDCAN_DBTP + FDCAN_DBTP + FDCAN Data Bit Timing and Prescaler + Register + 0xC + 0x20 + read-only + 0x00000000 + + + DSJW + Synchronization Jump Width + 0 + 4 + + + DTSEG2 + Data time segment after sample + point + 4 + 4 + + + DTSEG1 + Data time segment after sample + point + 8 + 5 + + + DBRP + Data BIt Rate Prescaler + 16 + 5 + + + TDC + Transceiver Delay + Compensation + 23 + 1 + + + + + FDCAN_TEST + FDCAN_TEST + FDCAN Test Register + 0x10 + 0x20 + read-only + 0x00000000 + + + LBCK + Loop Back mode + 4 + 1 + + + TX + Loop Back mode + 5 + 2 + + + RX + Control of Transmit Pin + 7 + 1 + + + + + FDCAN_RWD + FDCAN_RWD + FDCAN RAM Watchdog Register + 0x14 + 0x20 + read-only + 0x00000000 + + + WDV + Watchdog value + 8 + 8 + + + WDC + Watchdog configuration + 0 + 8 + + + + + FDCAN_CCCR + FDCAN_CCCR + FDCAN CC Control Register + 0x18 + 0x20 + read-write + 0x00000000 + + + INIT + Initialization + 0 + 1 + + + CCE + Configuration Change + Enable + 1 + 1 + + + ASM + ASM Restricted Operation + Mode + 2 + 1 + + + CSA + Clock Stop Acknowledge + 3 + 1 + + + CSR + Clock Stop Request + 4 + 1 + + + MON + Bus Monitoring Mode + 5 + 1 + + + DAR + Disable Automatic + Retransmission + 6 + 1 + + + TEST + Test Mode Enable + 7 + 1 + + + FDOE + FD Operation Enable + 8 + 1 + + + BSE + FDCAN Bit Rate Switching + 9 + 1 + + + PXHD + Protocol Exception Handling + Disable + 12 + 1 + + + EFBI + Edge Filtering during Bus + Integration + 13 + 1 + + + TXP + TXP + 14 + 1 + + + NISO + Non ISO Operation + 15 + 1 + + + + + FDCAN_NBTP + FDCAN_NBTP + FDCAN Nominal Bit Timing and Prescaler + Register + 0x1C + 0x20 + read-write + 0x00000000 + + + NSJW + NSJW: Nominal (Re)Synchronization Jump + Width + 25 + 7 + + + NBRP + Bit Rate Prescaler + 16 + 9 + + + NTSEG1 + Nominal Time segment before sample + point + 8 + 8 + + + TSEG2 + Nominal Time segment after sample + point + 0 + 7 + + + + + FDCAN_TSCC + FDCAN_TSCC + FDCAN Timestamp Counter Configuration + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + TCP + Timestamp Counter + Prescaler + 16 + 4 + + + TSS + Timestamp Select + 0 + 2 + + + + + FDCAN_TSCV + FDCAN_TSCV + FDCAN Timestamp Counter Value + Register + 0x24 + 0x20 + read-write + 0x00000000 + + + TSC + Timestamp Counter + 0 + 16 + + + + + FDCAN_TOCC + FDCAN_TOCC + FDCAN Timeout Counter Configuration + Register + 0x28 + 0x20 + read-write + 0x00000000 + + + ETOC + Enable Timeout Counter + 0 + 1 + + + TOS + Timeout Select + 1 + 2 + + + TOP + Timeout Period + 16 + 16 + + + + + FDCAN_TOCV + FDCAN_TOCV + FDCAN Timeout Counter Value + Register + 0x2C + 0x20 + read-write + 0x00000000 + + + TOC + Timeout Counter + 0 + 16 + + + + + FDCAN_ECR + FDCAN_ECR + FDCAN Error Counter Register + 0x40 + 0x20 + read-write + 0x00000000 + + + CEL + AN Error Logging + 16 + 8 + + + RP + Receive Error Passive + 15 + 1 + + + TREC + Receive Error Counter + 8 + 7 + + + TEC + Transmit Error Counter + 0 + 8 + + + + + FDCAN_PSR + FDCAN_PSR + FDCAN Protocol Status Register + 0x44 + 0x20 + read-write + 0x00000000 + + + LEC + Last Error Code + 0 + 3 + + + ACT + Activity + 3 + 2 + + + EP + Error Passive + 5 + 1 + + + EW + Warning Status + 6 + 1 + + + BO + Bus_Off Status + 7 + 1 + + + DLEC + Data Last Error Code + 8 + 3 + + + RESI + ESI flag of last received FDCAN + Message + 11 + 1 + + + RBRS + BRS flag of last received FDCAN + Message + 12 + 1 + + + REDL + Received FDCAN Message + 13 + 1 + + + PXE + Protocol Exception Event + 14 + 1 + + + TDCV + Transmitter Delay Compensation + Value + 16 + 7 + + + + + FDCAN_TDCR + FDCAN_TDCR + FDCAN Transmitter Delay Compensation + Register + 0x48 + 0x20 + read-only + 0x00000000 + + + TDCF + Transmitter Delay Compensation Filter + Window Length + 0 + 7 + + + TDCO + Transmitter Delay Compensation + Offset + 8 + 7 + + + + + FDCAN_IR + FDCAN_IR + FDCAN Interrupt Register + 0x50 + 0x20 + read-only + 0x00000000 + + + RF0N + Rx FIFO 0 New Message + 0 + 1 + + + RF0W + Rx FIFO 0 Full + 1 + 1 + + + RF0F + Rx FIFO 0 Full + 2 + 1 + + + RF0L + Rx FIFO 0 Message Lost + 3 + 1 + + + RF1N + Rx FIFO 1 New Message + 4 + 1 + + + RF1W + Rx FIFO 1 Watermark + Reached + 5 + 1 + + + RF1F + Rx FIFO 1 Watermark + Reached + 6 + 1 + + + RF1L + Rx FIFO 1 Message Lost + 7 + 1 + + + HPM + High Priority Message + 8 + 1 + + + TC + Transmission Completed + 9 + 1 + + + TCF + Transmission Cancellation + Finished + 10 + 1 + + + TEF + Tx FIFO Empty + 11 + 1 + + + TEFN + Tx Event FIFO New Entry + 12 + 1 + + + TEFW + Tx Event FIFO Watermark + Reached + 13 + 1 + + + TEFF + Tx Event FIFO Full + 14 + 1 + + + TEFL + Tx Event FIFO Element Lost + 15 + 1 + + + TSW + Timestamp Wraparound + 16 + 1 + + + MRAF + Message RAM Access Failure + 17 + 1 + + + TOO + Timeout Occurred + 18 + 1 + + + DRX + Message stored to Dedicated Rx + Buffer + 19 + 1 + + + ELO + Error Logging Overflow + 22 + 1 + + + EP + Error Passive + 23 + 1 + + + EW + Warning Status + 24 + 1 + + + BO + Bus_Off Status + 25 + 1 + + + WDI + Watchdog Interrupt + 26 + 1 + + + PEA + Protocol Error in Arbitration Phase + (Nominal Bit Time is used) + 27 + 1 + + + PED + Protocol Error in Data Phase (Data Bit + Time is used) + 28 + 1 + + + ARA + Access to Reserved Address + 29 + 1 + + + + + FDCAN_IE + FDCAN_IE + FDCAN Interrupt Enable + Register + 0x54 + 0x20 + read-only + 0x00000000 + + + RF0NE + Rx FIFO 0 New Message + Enable + 0 + 1 + + + RF0WE + Rx FIFO 0 Full Enable + 1 + 1 + + + RF0FE + Rx FIFO 0 Full Enable + 2 + 1 + + + RF0LE + Rx FIFO 0 Message Lost + Enable + 3 + 1 + + + RF1NE + Rx FIFO 1 New Message + Enable + 4 + 1 + + + RF1WE + Rx FIFO 1 Watermark Reached + Enable + 5 + 1 + + + RF1FE + Rx FIFO 1 Watermark Reached + Enable + 6 + 1 + + + RF1LE + Rx FIFO 1 Message Lost + Enable + 7 + 1 + + + HPME + High Priority Message + Enable + 8 + 1 + + + TCE + Transmission Completed + Enable + 9 + 1 + + + TCFE + Transmission Cancellation Finished + Enable + 10 + 1 + + + TEFE + Tx FIFO Empty Enable + 11 + 1 + + + TEFNE + Tx Event FIFO New Entry + Enable + 12 + 1 + + + TEFWE + Tx Event FIFO Watermark Reached + Enable + 13 + 1 + + + TEFFE + Tx Event FIFO Full Enable + 14 + 1 + + + TEFLE + Tx Event FIFO Element Lost + Enable + 15 + 1 + + + TSWE + Timestamp Wraparound + Enable + 16 + 1 + + + MRAFE + Message RAM Access Failure + Enable + 17 + 1 + + + TOOE + Timeout Occurred Enable + 18 + 1 + + + DRXE + Message stored to Dedicated Rx Buffer + Enable + 19 + 1 + + + BECE + Bit Error Corrected Interrupt + Enable + 20 + 1 + + + BEUE + Bit Error Uncorrected Interrupt + Enable + 21 + 1 + + + ELOE + Error Logging Overflow + Enable + 22 + 1 + + + EPE + Error Passive Enable + 23 + 1 + + + EWE + Warning Status Enable + 24 + 1 + + + BOE + Bus_Off Status Enable + 25 + 1 + + + WDIE + Watchdog Interrupt Enable + 26 + 1 + + + PEAE + Protocol Error in Arbitration Phase + Enable + 27 + 1 + + + PEDE + Protocol Error in Data Phase + Enable + 28 + 1 + + + ARAE + Access to Reserved Address + Enable + 29 + 1 + + + + + FDCAN_ILS + FDCAN_ILS + FDCAN Interrupt Line Select + Register + 0x58 + 0x20 + read-only + 0x00000000 + + + RF0NL + Rx FIFO 0 New Message Interrupt + Line + 0 + 1 + + + RF0WL + Rx FIFO 0 Watermark Reached Interrupt + Line + 1 + 1 + + + RF0FL + Rx FIFO 0 Full Interrupt + Line + 2 + 1 + + + RF0LL + Rx FIFO 0 Message Lost Interrupt + Line + 3 + 1 + + + RF1NL + Rx FIFO 1 New Message Interrupt + Line + 4 + 1 + + + RF1WL + Rx FIFO 1 Watermark Reached Interrupt + Line + 5 + 1 + + + RF1FL + Rx FIFO 1 Full Interrupt + Line + 6 + 1 + + + RF1LL + Rx FIFO 1 Message Lost Interrupt + Line + 7 + 1 + + + HPML + High Priority Message Interrupt + Line + 8 + 1 + + + TCL + Transmission Completed Interrupt + Line + 9 + 1 + + + TCFL + Transmission Cancellation Finished + Interrupt Line + 10 + 1 + + + TEFL + Tx FIFO Empty Interrupt + Line + 11 + 1 + + + TEFNL + Tx Event FIFO New Entry Interrupt + Line + 12 + 1 + + + TEFWL + Tx Event FIFO Watermark Reached + Interrupt Line + 13 + 1 + + + TEFFL + Tx Event FIFO Full Interrupt + Line + 14 + 1 + + + TEFLL + Tx Event FIFO Element Lost Interrupt + Line + 15 + 1 + + + TSWL + Timestamp Wraparound Interrupt + Line + 16 + 1 + + + MRAFL + Message RAM Access Failure Interrupt + Line + 17 + 1 + + + TOOL + Timeout Occurred Interrupt + Line + 18 + 1 + + + DRXL + Message stored to Dedicated Rx Buffer + Interrupt Line + 19 + 1 + + + BECL + Bit Error Corrected Interrupt + Line + 20 + 1 + + + BEUL + Bit Error Uncorrected Interrupt + Line + 21 + 1 + + + ELOL + Error Logging Overflow Interrupt + Line + 22 + 1 + + + EPL + Error Passive Interrupt + Line + 23 + 1 + + + EWL + Warning Status Interrupt + Line + 24 + 1 + + + BOL + Bus_Off Status + 25 + 1 + + + WDIL + Watchdog Interrupt Line + 26 + 1 + + + PEAL + Protocol Error in Arbitration Phase + Line + 27 + 1 + + + PEDL + Protocol Error in Data Phase + Line + 28 + 1 + + + ARAL + Access to Reserved Address + Line + 29 + 1 + + + + + FDCAN_ILE + FDCAN_ILE + FDCAN Interrupt Line Enable + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + EINT0 + Enable Interrupt Line 0 + 0 + 1 + + + EINT1 + Enable Interrupt Line 1 + 1 + 1 + + + + + FDCAN_GFC + FDCAN_GFC + FDCAN Global Filter Configuration + Register + 0x80 + 0x20 + read-write + 0x00000000 + + + RRFE + Reject Remote Frames + Extended + 0 + 1 + + + RRFS + Reject Remote Frames + Standard + 1 + 1 + + + ANFE + Accept Non-matching Frames + Extended + 2 + 2 + + + ANFS + Accept Non-matching Frames + Standard + 4 + 2 + + + + + FDCAN_SIDFC + FDCAN_SIDFC + FDCAN Standard ID Filter Configuration + Register + 0x84 + 0x20 + read-write + 0x00000000 + + + FLSSA + Filter List Standard Start + Address + 2 + 14 + + + LSS + List Size Standard + 16 + 8 + + + + + FDCAN_XIDFC + FDCAN_XIDFC + FDCAN Extended ID Filter Configuration + Register + 0x88 + 0x20 + read-write + 0x00000000 + + + FLESA + Filter List Standard Start + Address + 2 + 14 + + + LSE + List Size Extended + 16 + 8 + + + + + FDCAN_XIDAM + FDCAN_XIDAM + FDCAN Extended ID and Mask + Register + 0x90 + 0x20 + read-write + 0x00000000 + + + EIDM + Extended ID Mask + 0 + 29 + + + + + FDCAN_HPMS + FDCAN_HPMS + FDCAN High Priority Message Status + Register + 0x94 + 0x20 + read-only + 0x00000000 + + + BIDX + Buffer Index + 0 + 6 + + + MSI + Message Storage Indicator + 6 + 2 + + + FIDX + Filter Index + 8 + 7 + + + FLST + Filter List + 15 + 1 + + + + + FDCAN_NDAT1 + FDCAN_NDAT1 + FDCAN New Data 1 Register + 0x98 + 0x20 + read-only + 0x00000000 + + + ND0 + New data + 0 + 1 + + + ND1 + New data + 1 + 1 + + + ND2 + New data + 2 + 1 + + + ND3 + New data + 3 + 1 + + + ND4 + New data + 4 + 1 + + + ND5 + New data + 5 + 1 + + + ND6 + New data + 6 + 1 + + + ND7 + New data + 7 + 1 + + + ND8 + New data + 8 + 1 + + + ND9 + New data + 9 + 1 + + + ND10 + New data + 10 + 1 + + + ND11 + New data + 11 + 1 + + + ND12 + New data + 12 + 1 + + + ND13 + New data + 13 + 1 + + + ND14 + New data + 14 + 1 + + + ND15 + New data + 15 + 1 + + + ND16 + New data + 16 + 1 + + + ND17 + New data + 17 + 1 + + + ND18 + New data + 18 + 1 + + + ND19 + New data + 19 + 1 + + + ND20 + New data + 20 + 1 + + + ND21 + New data + 21 + 1 + + + ND22 + New data + 22 + 1 + + + ND23 + New data + 23 + 1 + + + ND24 + New data + 24 + 1 + + + ND25 + New data + 25 + 1 + + + ND26 + New data + 26 + 1 + + + ND27 + New data + 27 + 1 + + + ND28 + New data + 28 + 1 + + + ND29 + New data + 29 + 1 + + + ND30 + New data + 30 + 1 + + + ND31 + New data + 31 + 1 + + + + + FDCAN_NDAT2 + FDCAN_NDAT2 + FDCAN New Data 2 Register + 0x9C + 0x20 + read-only + 0x00000000 + + + ND32 + New data + 0 + 1 + + + ND33 + New data + 1 + 1 + + + ND34 + New data + 2 + 1 + + + ND35 + New data + 3 + 1 + + + ND36 + New data + 4 + 1 + + + ND37 + New data + 5 + 1 + + + ND38 + New data + 6 + 1 + + + ND39 + New data + 7 + 1 + + + ND40 + New data + 8 + 1 + + + ND41 + New data + 9 + 1 + + + ND42 + New data + 10 + 1 + + + ND43 + New data + 11 + 1 + + + ND44 + New data + 12 + 1 + + + ND45 + New data + 13 + 1 + + + ND46 + New data + 14 + 1 + + + ND47 + New data + 15 + 1 + + + ND48 + New data + 16 + 1 + + + ND49 + New data + 17 + 1 + + + ND50 + New data + 18 + 1 + + + ND51 + New data + 19 + 1 + + + ND52 + New data + 20 + 1 + + + ND53 + New data + 21 + 1 + + + ND54 + New data + 22 + 1 + + + ND55 + New data + 23 + 1 + + + ND56 + New data + 24 + 1 + + + ND57 + New data + 25 + 1 + + + ND58 + New data + 26 + 1 + + + ND59 + New data + 27 + 1 + + + ND60 + New data + 28 + 1 + + + ND61 + New data + 29 + 1 + + + ND62 + New data + 30 + 1 + + + ND63 + New data + 31 + 1 + + + + + FDCAN_RXF0C + FDCAN_RXF0C + FDCAN Rx FIFO 0 Configuration + Register + 0xA0 + 0x20 + read-write + 0x00000000 + + + F0SA + Rx FIFO 0 Start Address + 2 + 14 + + + F0S + Rx FIFO 0 Size + 16 + 8 + + + F0WM + FIFO 0 Watermark + 24 + 8 + + + + + FDCAN_RXF0S + FDCAN_RXF0S + FDCAN Rx FIFO 0 Status + Register + 0xA4 + 0x20 + read-write + 0x00000000 + + + F0FL + Rx FIFO 0 Fill Level + 0 + 7 + + + F0G + Rx FIFO 0 Get Index + 8 + 6 + + + F0P + Rx FIFO 0 Put Index + 16 + 6 + + + F0F + Rx FIFO 0 Full + 24 + 1 + + + RF0L + Rx FIFO 0 Message Lost + 25 + 1 + + + + + FDCAN_RXF0A + FDCAN_RXF0A + CAN Rx FIFO 0 Acknowledge + Register + 0xA8 + 0x20 + read-write + 0x00000000 + + + FA01 + Rx FIFO 0 Acknowledge + Index + 0 + 6 + + + + + FDCAN_RXBC + FDCAN_RXBC + FDCAN Rx Buffer Configuration + Register + 0xAC + 0x20 + read-write + 0x00000000 + + + RBSA + Rx Buffer Start Address + 2 + 14 + + + + + FDCAN_RXF1C + FDCAN_RXF1C + FDCAN Rx FIFO 1 Configuration + Register + 0xB0 + 0x20 + read-write + 0x00000000 + + + F1SA + Rx FIFO 1 Start Address + 2 + 14 + + + F1S + Rx FIFO 1 Size + 16 + 7 + + + F1WM + Rx FIFO 1 Watermark + 24 + 7 + + + + + FDCAN_RXF1S + FDCAN_RXF1S + FDCAN Rx FIFO 1 Status + Register + 0xB4 + 0x20 + read-write + 0x00000000 + + + F1FL + Rx FIFO 1 Fill Level + 0 + 7 + + + F1GI + Rx FIFO 1 Get Index + 8 + 7 + + + F1PI + Rx FIFO 1 Put Index + 16 + 7 + + + F1F + Rx FIFO 1 Full + 24 + 1 + + + RF1L + Rx FIFO 1 Message Lost + 25 + 1 + + + DMS + Debug Message Status + 30 + 2 + + + + + FDCAN_RXF1A + FDCAN_RXF1A + FDCAN Rx FIFO 1 Acknowledge + Register + 0xB8 + 0x20 + read-write + 0x00000000 + + + F1AI + Rx FIFO 1 Acknowledge + Index + 0 + 6 + + + + + FDCAN_RXESC + FDCAN_RXESC + FDCAN Rx Buffer Element Size Configuration + Register + 0xBC + 0x20 + read-write + 0x00000000 + + + F0DS + Rx FIFO 1 Data Field Size: + 0 + 3 + + + F1DS + Rx FIFO 0 Data Field Size: + 4 + 3 + + + RBDS + Rx Buffer Data Field Size: + 8 + 3 + + + + + FDCAN_TXBC + FDCAN_TXBC + FDCAN Tx Buffer Configuration + Register + 0xC0 + 0x20 + read-write + 0x00000000 + + + TBSA + Tx Buffers Start Address + 2 + 14 + + + NDTB + Number of Dedicated Transmit + Buffers + 16 + 6 + + + TFQS + Transmit FIFO/Queue Size + 24 + 6 + + + TFQM + Tx FIFO/Queue Mode + 30 + 1 + + + + + FDCAN_TXFQS + FDCAN_TXFQS + FDCAN Tx FIFO/Queue Status + Register + 0xC4 + 0x20 + read-only + 0x00000000 + + + TFFL + Tx FIFO Free Level + 0 + 6 + + + TFGI + TFGI + 8 + 5 + + + TFQPI + Tx FIFO/Queue Put Index + 16 + 5 + + + TFQF + Tx FIFO/Queue Full + 21 + 1 + + + + + FDCAN_TXESC + FDCAN_TXESC + FDCAN Tx Buffer Element Size Configuration + Register + 0xC8 + 0x20 + read-write + 0x00000000 + + + TBDS + Tx Buffer Data Field Size: + 0 + 3 + + + + + FDCAN_TXBRP + FDCAN_TXBRP + FDCAN Tx Buffer Request Pending + Register + 0xCC + 0x20 + read-only + 0x00000000 + + + TRP + Transmission Request + Pending + 0 + 32 + + + + + FDCAN_TXBAR + FDCAN_TXBAR + FDCAN Tx Buffer Add Request + Register + 0xD0 + 0x20 + read-write + 0x00000000 + + + AR + Add Request + 0 + 32 + + + + + FDCAN_TXBCR + FDCAN_TXBCR + FDCAN Tx Buffer Cancellation Request + Register + 0xD4 + 0x20 + read-write + 0x00000000 + + + CR + Cancellation Request + 0 + 32 + + + + + FDCAN_TXBTO + FDCAN_TXBTO + FDCAN Tx Buffer Transmission Occurred + Register + 0xD8 + 0x20 + read-write + 0x00000000 + + + TO + Transmission Occurred. + 0 + 32 + + + + + FDCAN_TXBCF + FDCAN_TXBCF + FDCAN Tx Buffer Cancellation Finished + Register + 0xDC + 0x20 + read-only + 0x00000000 + + + CF + Cancellation Finished + 0 + 32 + + + + + FDCAN_TXBTIE + FDCAN_TXBTIE + FDCAN Tx Buffer Transmission Interrupt + Enable Register + 0xE0 + 0x20 + read-write + 0x00000000 + + + TIE + Transmission Interrupt + Enable + 0 + 32 + + + + + FDCAN_TXBCIE + FDCAN_TXBCIE + FDCAN Tx Buffer Cancellation Finished + Interrupt Enable Register + 0xE4 + 0x20 + read-write + 0x00000000 + + + CF + Cancellation Finished Interrupt + Enable + 0 + 32 + + + + + FDCAN_TXEFC + FDCAN_TXEFC + FDCAN Tx Event FIFO Configuration + Register + 0xF0 + 0x20 + read-write + 0x00000000 + + + EFSA + Event FIFO Start Address + 2 + 14 + + + EFS + Event FIFO Size + 16 + 6 + + + EFWM + Event FIFO Watermark + 24 + 6 + + + + + FDCAN_TXEFS + FDCAN_TXEFS + FDCAN Tx Event FIFO Status + Register + 0xF4 + 0x20 + read-write + 0x00000000 + + + EFFL + Event FIFO Fill Level + 0 + 6 + + + EFGI + Event FIFO Get Index. + 8 + 5 + + + EFF + Event FIFO Full. + 24 + 1 + + + TEFL + Tx Event FIFO Element + Lost. + 25 + 1 + + + + + FDCAN_TXEFA + FDCAN_TXEFA + FDCAN Tx Event FIFO Acknowledge + Register + 0xF8 + 0x20 + read-write + 0x00000000 + + + EFAI + Event FIFO Acknowledge + Index + 0 + 5 + + + + + FDCAN_TTTMC + FDCAN_TTTMC + FDCAN TT Trigger Memory Configuration + Register + 0x100 + 0x20 + read-write + 0x00000000 + + + TMSA + Trigger Memory Start + Address + 2 + 14 + + + TME + Trigger Memory Elements + 16 + 7 + + + + + FDCAN_TTRMC + FDCAN_TTRMC + FDCAN TT Reference Message Configuration + Register + 0x104 + 0x20 + read-write + 0x00000000 + + + RID + Reference Identifier. + 0 + 29 + + + XTD + Extended Identifier + 30 + 1 + + + RMPS + Reference Message Payload + Select + 31 + 1 + + + + + FDCAN_TTOCF + FDCAN_TTOCF + FDCAN TT Operation Configuration + Register + 0x108 + 0x20 + read-write + 0x00000000 + + + OM + Operation Mode + 0 + 2 + + + GEN + Gap Enable + 3 + 1 + + + TM + Time Master + 4 + 1 + + + LDSDL + LD of Synchronization Deviation + Limit + 5 + 3 + + + IRTO + Initial Reference Trigger + Offset + 8 + 7 + + + EECS + Enable External Clock + Synchronization + 15 + 1 + + + AWL + Application Watchdog Limit + 16 + 8 + + + EGTF + Enable Global Time + Filtering + 24 + 1 + + + ECC + Enable Clock Calibration + 25 + 1 + + + EVTP + Event Trigger Polarity + 26 + 1 + + + + + FDCAN_TTMLM + FDCAN_TTMLM + FDCAN TT Matrix Limits + Register + 0x10C + 0x20 + read-write + 0x00000000 + + + CCM + Cycle Count Max + 0 + 6 + + + CSS + Cycle Start + Synchronization + 6 + 2 + + + TXEW + Tx Enable Window + 8 + 4 + + + ENTT + Expected Number of Tx + Triggers + 16 + 12 + + + + + FDCAN_TURCF + FDCAN_TURCF + FDCAN TUR Configuration + Register + 0x110 + 0x20 + read-write + 0x00000000 + + + NCL + Numerator Configuration + Low. + 0 + 16 + + + DC + Denominator Configuration. + 16 + 14 + + + ELT + Enable Local Time + 31 + 1 + + + + + FDCAN_TTOCN + FDCAN_TTOCN + FDCAN TT Operation Control + Register + 0x114 + 0x20 + read-write + 0x00000000 + + + SGT + Set Global time + 0 + 1 + + + ECS + External Clock + Synchronization + 1 + 1 + + + SWP + Stop Watch Polarity + 2 + 1 + + + SWS + Stop Watch Source. + 3 + 2 + + + RTIE + Register Time Mark Interrupt Pulse + Enable + 5 + 1 + + + TMC + Register Time Mark Compare + 6 + 2 + + + TTIE + Trigger Time Mark Interrupt Pulse + Enable + 8 + 1 + + + GCS + Gap Control Select + 9 + 1 + + + FGP + Finish Gap. + 10 + 1 + + + TMG + Time Mark Gap + 11 + 1 + + + NIG + Next is Gap + 12 + 1 + + + ESCN + External Synchronization + Control + 13 + 1 + + + LCKC + TT Operation Control Register + Locked + 15 + 1 + + + + + CAN_TTGTP + CAN_TTGTP + FDCAN TT Global Time Preset + Register + 0x118 + 0x20 + read-write + 0x00000000 + + + NCL + Time Preset + 0 + 16 + + + CTP + Cycle Time Target Phase + 16 + 16 + + + + + FDCAN_TTTMK + FDCAN_TTTMK + FDCAN TT Time Mark Register + 0x11C + 0x20 + read-write + 0x00000000 + + + TM + Time Mark + 0 + 16 + + + TICC + Time Mark Cycle Code + 16 + 7 + + + LCKM + TT Time Mark Register + Locked + 31 + 1 + + + + + FDCAN_TTIR + FDCAN_TTIR + FDCAN TT Interrupt Register + 0x120 + 0x20 + read-write + 0x00000000 + + + SBC + Start of Basic Cycle + 0 + 1 + + + SMC + Start of Matrix Cycle + 1 + 1 + + + CSM + Change of Synchronization + Mode + 2 + 1 + + + SOG + Start of Gap + 3 + 1 + + + RTMI + Register Time Mark + Interrupt. + 4 + 1 + + + TTMI + Trigger Time Mark Event + Internal + 5 + 1 + + + SWE + Stop Watch Event + 6 + 1 + + + GTW + Global Time Wrap + 7 + 1 + + + GTD + Global Time Discontinuity + 8 + 1 + + + GTE + Global Time Error + 9 + 1 + + + TXU + Tx Count Underflow + 10 + 1 + + + TXO + Tx Count Overflow + 11 + 1 + + + SE1 + Scheduling Error 1 + 12 + 1 + + + SE2 + Scheduling Error 2 + 13 + 1 + + + ELC + Error Level Changed. + 14 + 1 + + + IWTG + Initialization Watch + Trigger + 15 + 1 + + + WT + Watch Trigger + 16 + 1 + + + AW + Application Watchdog + 17 + 1 + + + CER + Configuration Error + 18 + 1 + + + + + FDCAN_TTIE + FDCAN_TTIE + FDCAN TT Interrupt Enable + Register + 0x124 + 0x20 + read-write + 0x00000000 + + + SBCE + Start of Basic Cycle Interrupt + Enable + 0 + 1 + + + SMCE + Start of Matrix Cycle Interrupt + Enable + 1 + 1 + + + CSME + Change of Synchronization Mode Interrupt + Enable + 2 + 1 + + + SOGE + Start of Gap Interrupt + Enable + 3 + 1 + + + RTMIE + Register Time Mark Interrupt + Enable + 4 + 1 + + + TTMIE + Trigger Time Mark Event Internal + Interrupt Enable + 5 + 1 + + + SWEE + Stop Watch Event Interrupt + Enable + 6 + 1 + + + GTWE + Global Time Wrap Interrupt + Enable + 7 + 1 + + + GTDE + Global Time Discontinuity Interrupt + Enable + 8 + 1 + + + GTEE + Global Time Error Interrupt + Enable + 9 + 1 + + + TXUE + Tx Count Underflow Interrupt + Enable + 10 + 1 + + + TXOE + Tx Count Overflow Interrupt + Enable + 11 + 1 + + + SE1E + Scheduling Error 1 Interrupt + Enable + 12 + 1 + + + SE2E + Scheduling Error 2 Interrupt + Enable + 13 + 1 + + + ELCE + Change Error Level Interrupt + Enable + 14 + 1 + + + IWTGE + Initialization Watch Trigger Interrupt + Enable + 15 + 1 + + + WTE + Watch Trigger Interrupt + Enable + 16 + 1 + + + AWE + Application Watchdog Interrupt + Enable + 17 + 1 + + + CERE + Configuration Error Interrupt + Enable + 18 + 1 + + + + + FDCAN_TTILS + FDCAN_TTILS + FDCAN TT Interrupt Line Select + Register + 0x128 + 0x20 + read-write + 0x00000000 + + + SBCL + Start of Basic Cycle Interrupt + Line + 0 + 1 + + + SMCL + Start of Matrix Cycle Interrupt + Line + 1 + 1 + + + CSML + Change of Synchronization Mode Interrupt + Line + 2 + 1 + + + SOGL + Start of Gap Interrupt + Line + 3 + 1 + + + RTMIL + Register Time Mark Interrupt + Line + 4 + 1 + + + TTMIL + Trigger Time Mark Event Internal + Interrupt Line + 5 + 1 + + + SWEL + Stop Watch Event Interrupt + Line + 6 + 1 + + + GTWL + Global Time Wrap Interrupt + Line + 7 + 1 + + + GTDL + Global Time Discontinuity Interrupt + Line + 8 + 1 + + + GTEL + Global Time Error Interrupt + Line + 9 + 1 + + + TXUL + Tx Count Underflow Interrupt + Line + 10 + 1 + + + TXOL + Tx Count Overflow Interrupt + Line + 11 + 1 + + + SE1L + Scheduling Error 1 Interrupt + Line + 12 + 1 + + + SE2L + Scheduling Error 2 Interrupt + Line + 13 + 1 + + + ELCL + Change Error Level Interrupt + Line + 14 + 1 + + + IWTGL + Initialization Watch Trigger Interrupt + Line + 15 + 1 + + + WTL + Watch Trigger Interrupt + Line + 16 + 1 + + + AWL + Application Watchdog Interrupt + Line + 17 + 1 + + + CERL + Configuration Error Interrupt + Line + 18 + 1 + + + + + FDCAN_TTOST + FDCAN_TTOST + FDCAN TT Operation Status + Register + 0x12C + 0x20 + read-write + 0x00000000 + + + EL + Error Level + 0 + 2 + + + MS + Master State. + 2 + 2 + + + SYS + Synchronization State + 4 + 2 + + + GTP + Quality of Global Time + Phase + 6 + 1 + + + QCS + Quality of Clock Speed + 7 + 1 + + + RTO + Reference Trigger Offset + 8 + 8 + + + WGTD + Wait for Global Time + Discontinuity + 22 + 1 + + + GFI + Gap Finished Indicator. + 23 + 1 + + + TMP + Time Master Priority + 24 + 3 + + + GSI + Gap Started Indicator. + 27 + 1 + + + WFE + Wait for Event + 28 + 1 + + + AWE + Application Watchdog Event + 29 + 1 + + + WECS + Wait for External Clock + Synchronization + 30 + 1 + + + SPL + Schedule Phase Lock + 31 + 1 + + + + + FDCAN_TURNA + FDCAN_TURNA + FDCAN TUR Numerator Actual + Register + 0x130 + 0x20 + read-only + 0x00000000 + + + NAV + Numerator Actual Value + 0 + 18 + + + + + FDCAN_TTLGT + FDCAN_TTLGT + FDCAN TT Local and Global Time + Register + 0x134 + 0x20 + read-only + 0x00000000 + + + LT + Local Time + 0 + 16 + + + GT + Global Time + 16 + 16 + + + + + FDCAN_TTCTC + FDCAN_TTCTC + FDCAN TT Cycle Time and Count + Register + 0x138 + 0x20 + read-only + 0x00000000 + + + CT + Cycle Time + 0 + 16 + + + CC + Cycle Count + 16 + 6 + + + + + FDCAN_TTCPT + FDCAN_TTCPT + FDCAN TT Capture Time Register + 0x13C + 0x20 + read-only + 0x00000000 + + + CT + Cycle Count Value + 0 + 6 + + + SWV + Stop Watch Value + 16 + 16 + + + + + FDCAN_TTCSM + FDCAN_TTCSM + FDCAN TT Cycle Sync Mark + Register + 0x140 + 0x20 + read-only + 0x00000000 + + + CSM + Cycle Sync Mark + 0 + 16 + + + + + FDCAN_TTTS + FDCAN_TTTS + FDCAN TT Trigger Select + Register + 0x300 + 0x20 + read-write + 0x00000000 + + + SWTDEL + Stop watch trigger input + selection + 0 + 2 + + + EVTSEL + Event trigger input + selection + 4 + 2 + + + + + + + FDCAN2 + 0x4000A400 + + FDCAN2_IT0 + FDCAN2 Interrupt 0 + 20 + + + FDCAN2_IT1 + FDCAN2 Interrupt 1 + 22 + + + + CAN_CCU + CCU registers + FDCAN + 0x4000A800 + + 0x0 + 0x400 + registers + + + + CREL + CREL + Clock Calibration Unit Core Release + Register + 0x0 + 0x20 + read-write + 0x00000000 + + + DAY + Time Stamp Day + 0 + 8 + + + MON + Time Stamp Month + 8 + 8 + + + YEAR + Time Stamp Year + 16 + 4 + + + SUBSTEP + Sub-step of Core Release + 20 + 4 + + + STEP + Step of Core Release + 24 + 4 + + + REL + Core Release + 28 + 4 + + + + + CCFG + CCFG + Calibration Configuration + Register + 0x4 + 0x20 + read-write + 0x00000000 + + + TQBT + Time Quanta per Bit Time + 0 + 5 + + + BCC + Bypass Clock Calibration + 6 + 1 + + + CFL + Calibration Field Length + 7 + 1 + + + OCPM + Oscillator Clock Periods + Minimum + 8 + 8 + + + CDIV + Clock Divider + 16 + 4 + + + SWR + Software Reset + 31 + 1 + + + + + CSTAT + CSTAT + Calibration Status Register + 0x8 + 0x20 + read-write + 0x00000000 + + + OCPC + Oscillator Clock Period + Counter + 0 + 18 + + + TQC + Time Quanta Counter + 18 + 11 + + + CALS + Calibration State + 30 + 2 + + + + + CWD + CWD + Calibration Watchdog Register + 0xC + 0x20 + read-write + 0x00000000 + + + WDC + WDC + 0 + 16 + + + WDV + WDV + 16 + 16 + + + + + IR + IR + Clock Calibration Unit Interrupt + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CWE + Calibration Watchdog Event + 0 + 1 + + + CSC + Calibration State Changed + 1 + 1 + + + + + IE + IE + Clock Calibration Unit Interrupt Enable + Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CWEE + Calibration Watchdog Event + Enable + 0 + 1 + + + CSCE + Calibration State Changed + Enable + 1 + 1 + + + + + + + MDIOS + Management data input/output slave + MDIOS + 0x40009400 + + 0x0 + 0x400 + registers + + + MDIOS_WKUP + MDIOS wakeup + 119 + + + MDIOS + MDIOS global interrupt + 120 + + + + MDIOS_CR + MDIOS_CR + MDIOS configuration register + 0x0 + 0x20 + read-write + 0x00000000 + + + EN + Peripheral enable + 0 + 1 + + + WRIE + Register write interrupt + enable + 1 + 1 + + + RDIE + Register Read Interrupt + Enable + 2 + 1 + + + EIE + Error interrupt enable + 3 + 1 + + + DPC + Disable Preamble Check + 7 + 1 + + + PORT_ADDRESS + Slaves's address + 8 + 5 + + + + + MDIOS_WRFR + MDIOS_WRFR + MDIOS write flag register + 0x4 + 0x20 + read-only + 0x00000000 + + + WRF + Write flags for MDIO registers 0 to + 31 + 0 + 32 + + + + + MDIOS_CWRFR + MDIOS_CWRFR + MDIOS clear write flag + register + 0x8 + 0x20 + read-write + 0x00000000 + + + CWRF + Clear the write flag + 0 + 32 + + + + + MDIOS_RDFR + MDIOS_RDFR + MDIOS read flag register + 0xC + 0x20 + read-only + 0x00000000 + + + RDF + Read flags for MDIO registers 0 to + 31 + 0 + 32 + + + + + MDIOS_CRDFR + MDIOS_CRDFR + MDIOS clear read flag register + 0x10 + 0x20 + read-write + 0x00000000 + + + CRDF + Clear the read flag + 0 + 32 + + + + + MDIOS_SR + MDIOS_SR + MDIOS status register + 0x14 + 0x20 + read-only + 0x00000000 + + + PERF + Preamble error flag + 0 + 1 + + + SERF + Start error flag + 1 + 1 + + + TERF + Turnaround error flag + 2 + 1 + + + + + MDIOS_CLRFR + MDIOS_CLRFR + MDIOS clear flag register + 0x18 + 0x20 + read-write + 0x00000000 + + + CPERF + Clear the preamble error + flag + 0 + 1 + + + CSERF + Clear the start error flag + 1 + 1 + + + CTERF + Clear the turnaround error + flag + 2 + 1 + + + + + MDIOS_DINR0 + MDIOS_DINR0 + MDIOS input data register 0 + 0x1C + 0x20 + read-only + 0x00000000 + + + DIN0 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR1 + MDIOS_DINR1 + MDIOS input data register 1 + 0x20 + 0x20 + read-only + 0x00000000 + + + DIN1 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR2 + MDIOS_DINR2 + MDIOS input data register 2 + 0x24 + 0x20 + read-only + 0x00000000 + + + DIN2 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR3 + MDIOS_DINR3 + MDIOS input data register 3 + 0x28 + 0x20 + read-only + 0x00000000 + + + DIN3 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR4 + MDIOS_DINR4 + MDIOS input data register 4 + 0x2C + 0x20 + read-only + 0x00000000 + + + DIN4 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR5 + MDIOS_DINR5 + MDIOS input data register 5 + 0x30 + 0x20 + read-only + 0x00000000 + + + DIN5 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR6 + MDIOS_DINR6 + MDIOS input data register 6 + 0x34 + 0x20 + read-only + 0x00000000 + + + DIN6 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR7 + MDIOS_DINR7 + MDIOS input data register 7 + 0x38 + 0x20 + read-only + 0x00000000 + + + DIN7 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR8 + MDIOS_DINR8 + MDIOS input data register 8 + 0x3C + 0x20 + read-only + 0x00000000 + + + DIN8 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR9 + MDIOS_DINR9 + MDIOS input data register 9 + 0x40 + 0x20 + read-only + 0x00000000 + + + DIN9 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR10 + MDIOS_DINR10 + MDIOS input data register 10 + 0x44 + 0x20 + read-only + 0x00000000 + + + DIN10 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR11 + MDIOS_DINR11 + MDIOS input data register 11 + 0x48 + 0x20 + read-only + 0x00000000 + + + DIN11 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR12 + MDIOS_DINR12 + MDIOS input data register 12 + 0x4C + 0x20 + read-only + 0x00000000 + + + DIN12 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR13 + MDIOS_DINR13 + MDIOS input data register 13 + 0x50 + 0x20 + read-only + 0x00000000 + + + DIN13 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR14 + MDIOS_DINR14 + MDIOS input data register 14 + 0x54 + 0x20 + read-only + 0x00000000 + + + DIN14 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR15 + MDIOS_DINR15 + MDIOS input data register 15 + 0x58 + 0x20 + read-only + 0x00000000 + + + DIN15 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR16 + MDIOS_DINR16 + MDIOS input data register 16 + 0x5C + 0x20 + read-only + 0x00000000 + + + DIN16 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR17 + MDIOS_DINR17 + MDIOS input data register 17 + 0x60 + 0x20 + read-only + 0x00000000 + + + DIN17 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR18 + MDIOS_DINR18 + MDIOS input data register 18 + 0x64 + 0x20 + read-only + 0x00000000 + + + DIN18 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR19 + MDIOS_DINR19 + MDIOS input data register 19 + 0x68 + 0x20 + read-only + 0x00000000 + + + DIN19 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR20 + MDIOS_DINR20 + MDIOS input data register 20 + 0x6C + 0x20 + read-only + 0x00000000 + + + DIN20 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR21 + MDIOS_DINR21 + MDIOS input data register 21 + 0x70 + 0x20 + read-only + 0x00000000 + + + DIN21 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR22 + MDIOS_DINR22 + MDIOS input data register 22 + 0x74 + 0x20 + read-only + 0x00000000 + + + DIN22 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR23 + MDIOS_DINR23 + MDIOS input data register 23 + 0x78 + 0x20 + read-only + 0x00000000 + + + DIN23 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR24 + MDIOS_DINR24 + MDIOS input data register 24 + 0x7C + 0x20 + read-only + 0x00000000 + + + DIN24 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR25 + MDIOS_DINR25 + MDIOS input data register 25 + 0x80 + 0x20 + read-only + 0x00000000 + + + DIN25 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR26 + MDIOS_DINR26 + MDIOS input data register 26 + 0x84 + 0x20 + read-only + 0x00000000 + + + DIN26 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR27 + MDIOS_DINR27 + MDIOS input data register 27 + 0x88 + 0x20 + read-only + 0x00000000 + + + DIN27 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR28 + MDIOS_DINR28 + MDIOS input data register 28 + 0x8C + 0x20 + read-only + 0x00000000 + + + DIN28 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR29 + MDIOS_DINR29 + MDIOS input data register 29 + 0x90 + 0x20 + read-only + 0x00000000 + + + DIN29 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR30 + MDIOS_DINR30 + MDIOS input data register 30 + 0x94 + 0x20 + read-only + 0x00000000 + + + DIN30 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR31 + MDIOS_DINR31 + MDIOS input data register 31 + 0x98 + 0x20 + read-only + 0x00000000 + + + DIN31 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DOUTR0 + MDIOS_DOUTR0 + MDIOS output data register 0 + 0x9C + 0x20 + read-write + 0x00000000 + + + DOUT0 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR1 + MDIOS_DOUTR1 + MDIOS output data register 1 + 0xA0 + 0x20 + read-write + 0x00000000 + + + DOUT1 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR2 + MDIOS_DOUTR2 + MDIOS output data register 2 + 0xA4 + 0x20 + read-write + 0x00000000 + + + DOUT2 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR3 + MDIOS_DOUTR3 + MDIOS output data register 3 + 0xA8 + 0x20 + read-write + 0x00000000 + + + DOUT3 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR4 + MDIOS_DOUTR4 + MDIOS output data register 4 + 0xAC + 0x20 + read-write + 0x00000000 + + + DOUT4 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR5 + MDIOS_DOUTR5 + MDIOS output data register 5 + 0xB0 + 0x20 + read-write + 0x00000000 + + + DOUT5 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR6 + MDIOS_DOUTR6 + MDIOS output data register 6 + 0xB4 + 0x20 + read-write + 0x00000000 + + + DOUT6 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR7 + MDIOS_DOUTR7 + MDIOS output data register 7 + 0xB8 + 0x20 + read-write + 0x00000000 + + + DOUT7 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR8 + MDIOS_DOUTR8 + MDIOS output data register 8 + 0xBC + 0x20 + read-write + 0x00000000 + + + DOUT8 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR9 + MDIOS_DOUTR9 + MDIOS output data register 9 + 0xC0 + 0x20 + read-write + 0x00000000 + + + DOUT9 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR10 + MDIOS_DOUTR10 + MDIOS output data register 10 + 0xC4 + 0x20 + read-write + 0x00000000 + + + DOUT10 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR11 + MDIOS_DOUTR11 + MDIOS output data register 11 + 0xC8 + 0x20 + read-write + 0x00000000 + + + DOUT11 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR12 + MDIOS_DOUTR12 + MDIOS output data register 12 + 0xCC + 0x20 + read-write + 0x00000000 + + + DOUT12 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR13 + MDIOS_DOUTR13 + MDIOS output data register 13 + 0xD0 + 0x20 + read-write + 0x00000000 + + + DOUT13 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR14 + MDIOS_DOUTR14 + MDIOS output data register 14 + 0xD4 + 0x20 + read-write + 0x00000000 + + + DOUT14 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR15 + MDIOS_DOUTR15 + MDIOS output data register 15 + 0xD8 + 0x20 + read-write + 0x00000000 + + + DOUT15 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR16 + MDIOS_DOUTR16 + MDIOS output data register 16 + 0xDC + 0x20 + read-write + 0x00000000 + + + DOUT16 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR17 + MDIOS_DOUTR17 + MDIOS output data register 17 + 0xE0 + 0x20 + read-write + 0x00000000 + + + DOUT17 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR18 + MDIOS_DOUTR18 + MDIOS output data register 18 + 0xE4 + 0x20 + read-write + 0x00000000 + + + DOUT18 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR19 + MDIOS_DOUTR19 + MDIOS output data register 19 + 0xE8 + 0x20 + read-write + 0x00000000 + + + DOUT19 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR20 + MDIOS_DOUTR20 + MDIOS output data register 20 + 0xEC + 0x20 + read-write + 0x00000000 + + + DOUT20 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR21 + MDIOS_DOUTR21 + MDIOS output data register 21 + 0xF0 + 0x20 + read-write + 0x00000000 + + + DOUT21 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR22 + MDIOS_DOUTR22 + MDIOS output data register 22 + 0xF4 + 0x20 + read-write + 0x00000000 + + + DOUT22 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR23 + MDIOS_DOUTR23 + MDIOS output data register 23 + 0xF8 + 0x20 + read-write + 0x00000000 + + + DOUT23 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR24 + MDIOS_DOUTR24 + MDIOS output data register 24 + 0xFC + 0x20 + read-write + 0x00000000 + + + DOUT24 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR25 + MDIOS_DOUTR25 + MDIOS output data register 25 + 0x100 + 0x20 + read-write + 0x00000000 + + + DOUT25 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR26 + MDIOS_DOUTR26 + MDIOS output data register 26 + 0x104 + 0x20 + read-write + 0x00000000 + + + DOUT26 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR27 + MDIOS_DOUTR27 + MDIOS output data register 27 + 0x108 + 0x20 + read-write + 0x00000000 + + + DOUT27 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR28 + MDIOS_DOUTR28 + MDIOS output data register 28 + 0x10C + 0x20 + read-write + 0x00000000 + + + DOUT28 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR29 + MDIOS_DOUTR29 + MDIOS output data register 29 + 0x110 + 0x20 + read-write + 0x00000000 + + + DOUT29 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR30 + MDIOS_DOUTR30 + MDIOS output data register 30 + 0x114 + 0x20 + read-write + 0x00000000 + + + DOUT30 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR31 + MDIOS_DOUTR31 + MDIOS output data register 31 + 0x118 + 0x20 + read-write + 0x00000000 + + + DOUT31 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + + + OPAMP + Operational amplifiers + OPAMP + 0x40009000 + + 0x0 + 0x400 + registers + + + + OPAMP1_CSR + OPAMP1_CSR + OPAMP1 control/status register + 0x0 + 0x20 + read-write + 0x00000000 + + + OPAEN + Operational amplifier + Enable + 0 + 1 + + + FORCE_VP + Force internal reference on VP (reserved + for test + 1 + 1 + + + VP_SEL + Operational amplifier PGA + mode + 2 + 2 + + + VM_SEL + Inverting input selection + 5 + 2 + + + OPAHSM + Operational amplifier high-speed + mode + 8 + 1 + + + CALON + Calibration mode enabled + 11 + 1 + + + CALSEL + Calibration selection + 12 + 2 + + + PGA_GAIN + allows to switch from AOP offset trimmed + values to AOP offset + 14 + 4 + + + USERTRIM + User trimming enable + 18 + 1 + + + TSTREF + OPAMP calibration reference voltage + output control (reserved for test) + 29 + 1 + + + CALOUT + Operational amplifier calibration + output + 30 + 1 + + + + + OPAMP1_OTR + OPAMP1_OTR + OPAMP1 offset trimming register in normal + mode + 0x4 + 0x20 + read-write + 0x00000000 + + + TRIMOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + OPAMP1_HSOTR + OPAMP1_HSOTR + OPAMP1 offset trimming register in low-power + mode + 0x8 + 0x20 + read-write + 0x00000000 + + + TRIMLPOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMLPOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + OPAMP2_CSR + OPAMP2_CSR + OPAMP2 control/status register + 0x10 + 0x20 + read-write + 0x00000000 + + + OPAEN + Operational amplifier + Enable + 0 + 1 + + + FORCE_VP + Force internal reference on VP (reserved + for test) + 1 + 1 + + + VM_SEL + Inverting input selection + 5 + 2 + + + OPAHSM + Operational amplifier high-speed + mode + 8 + 1 + + + CALON + Calibration mode enabled + 11 + 1 + + + CALSEL + Calibration selection + 12 + 2 + + + PGA_GAIN + Operational amplifier Programmable + amplifier gain value + 14 + 4 + + + USERTRIM + User trimming enable + 18 + 1 + + + TSTREF + OPAMP calibration reference voltage + output control (reserved for test) + 29 + 1 + + + CALOUT + Operational amplifier calibration + output + 30 + 1 + + + + + OPAMP2_OTR + OPAMP2_OTR + OPAMP2 offset trimming register in normal + mode + 0x14 + 0x20 + read-write + 0x00000000 + + + TRIMOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + OPAMP2_HSOTR + OPAMP2_HSOTR + OPAMP2 offset trimming register in low-power + mode + 0x18 + 0x20 + read-write + 0x00000000 + + + TRIMLPOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMLPOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + + + SWPMI + Single Wire Protocol Master + Interface + SWPMI + 0x40008800 + + 0x0 + 0x400 + registers + + + SWPMI1 + SWPMI global interrupt + 115 + + + + CR + CR + SWPMI Configuration/Control + register + 0x0 + 0x20 + read-write + 0x00000000 + + + RXDMA + Reception DMA enable + 0 + 1 + + + TXDMA + Transmission DMA enable + 1 + 1 + + + RXMODE + Reception buffering mode + 2 + 1 + + + TXMODE + Transmission buffering + mode + 3 + 1 + + + LPBK + Loopback mode enable + 4 + 1 + + + SWPACT + Single wire protocol master interface + activate + 5 + 1 + + + DEACT + Single wire protocol master interface + deactivate + 10 + 1 + + + SWPTEN + Single wire protocol master transceiver + enable + 11 + 1 + + + + + BRR + BRR + SWPMI Bitrate register + 0x4 + 0x20 + read-write + 0x00000001 + + + BR + Bitrate prescaler + 0 + 8 + + + + + ISR + ISR + SWPMI Interrupt and Status + register + 0xC + 0x20 + read-only + 0x000002C2 + + + RXBFF + Receive buffer full flag + 0 + 1 + + + TXBEF + Transmit buffer empty flag + 1 + 1 + + + RXBERF + Receive CRC error flag + 2 + 1 + + + RXOVRF + Receive overrun error flag + 3 + 1 + + + TXUNRF + Transmit underrun error + flag + 4 + 1 + + + RXNE + Receive data register not + empty + 5 + 1 + + + TXE + Transmit data register + empty + 6 + 1 + + + TCF + Transfer complete flag + 7 + 1 + + + SRF + Slave resume flag + 8 + 1 + + + SUSP + SUSPEND flag + 9 + 1 + + + DEACTF + DEACTIVATED flag + 10 + 1 + + + RDYF + transceiver ready flag + 11 + 1 + + + + + ICR + ICR + SWPMI Interrupt Flag Clear + register + 0x10 + 0x20 + write-only + 0x00000000 + + + CRXBFF + Clear receive buffer full + flag + 0 + 1 + + + CTXBEF + Clear transmit buffer empty + flag + 1 + 1 + + + CRXBERF + Clear receive CRC error + flag + 2 + 1 + + + CRXOVRF + Clear receive overrun error + flag + 3 + 1 + + + CTXUNRF + Clear transmit underrun error + flag + 4 + 1 + + + CTCF + Clear transfer complete + flag + 7 + 1 + + + CSRF + Clear slave resume flag + 8 + 1 + + + CRDYF + Clear transceiver ready + flag + 11 + 1 + + + + + IER + IER + SWPMI Interrupt Enable + register + 0x14 + 0x20 + read-write + 0x00000000 + + + RXBFIE + Receive buffer full interrupt + enable + 0 + 1 + + + TXBEIE + Transmit buffer empty interrupt + enable + 1 + 1 + + + RXBERIE + Receive CRC error interrupt + enable + 2 + 1 + + + RXOVRIE + Receive overrun error interrupt + enable + 3 + 1 + + + TXUNRIE + Transmit underrun error interrupt + enable + 4 + 1 + + + RIE + Receive interrupt enable + 5 + 1 + + + TIE + Transmit interrupt enable + 6 + 1 + + + TCIE + Transmit complete interrupt + enable + 7 + 1 + + + SRIE + Slave resume interrupt + enable + 8 + 1 + + + RDYIE + Transceiver ready interrupt + enable + 11 + 1 + + + + + RFL + RFL + SWPMI Receive Frame Length + register + 0x18 + 0x20 + read-only + 0x00000000 + + + RFL + Receive frame length + 0 + 5 + + + + + TDR + TDR + SWPMI Transmit data register + 0x1C + 0x20 + write-only + 0x00000000 + + + TD + Transmit data + 0 + 32 + + + + + RDR + RDR + SWPMI Receive data register + 0x20 + 0x20 + read-only + 0x00000000 + + + RD + received data + 0 + 32 + + + + + OR + OR + SWPMI Option register + 0x24 + 0x20 + read-write + 0x00000000 + + + SWP_TBYP + SWP transceiver bypass + 0 + 1 + + + SWP_CLASS + SWP class selection + 1 + 1 + + + + + + + TIM2 + General purpose timers + TIM + 0x40000000 + + 0x0 + 0x400 + registers + + + TIM2 + TIM2 global interrupt + 28 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + CKD + Clock division + 8 + 2 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CMS + Center-aligned mode + selection + 5 + 2 + + + DIR + Direction + 4 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + URS + Update request source + 2 + 1 + + + UDIS + Update disable + 1 + 1 + + + CEN + Counter enable + 0 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + TI1S + TI1 selection + 7 + 1 + + + MMS + Master mode selection + 4 + 3 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x0000 + + + TS_4_3 + Trigger selection + 20 + 2 + + + SMS_3 + Slave mode selection - bit + 3 + 16 + 1 + + + ETP + External trigger polarity + 15 + 1 + + + ECE + External clock enable + 14 + 1 + + + ETPS + External trigger prescaler + 12 + 2 + + + ETF + External trigger filter + 8 + 4 + + + MSM + Master/Slave mode + 7 + 1 + + + TS + Trigger selection + 4 + 3 + + + SMS + Slave mode selection + 0 + 3 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + TDE + Trigger DMA request enable + 14 + 1 + + + CC4DE + Capture/Compare 4 DMA request + enable + 12 + 1 + + + CC3DE + Capture/Compare 3 DMA request + enable + 11 + 1 + + + CC2DE + Capture/Compare 2 DMA request + enable + 10 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + TIE + Trigger interrupt enable + 6 + 1 + + + CC4IE + Capture/Compare 4 interrupt + enable + 4 + 1 + + + CC3IE + Capture/Compare 3 interrupt + enable + 3 + 1 + + + CC2IE + Capture/Compare 2 interrupt + enable + 2 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC4OF + Capture/Compare 4 overcapture + flag + 12 + 1 + + + CC3OF + Capture/Compare 3 overcapture + flag + 11 + 1 + + + CC2OF + Capture/compare 2 overcapture + flag + 10 + 1 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + + + CC4IF + Capture/Compare 4 interrupt + flag + 4 + 1 + + + CC3IF + Capture/Compare 3 interrupt + flag + 3 + 1 + + + CC2IF + Capture/Compare 2 interrupt + flag + 2 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + TG + Trigger generation + 6 + 1 + + + CC4G + Capture/compare 4 + generation + 4 + 1 + + + CC3G + Capture/compare 3 + generation + 3 + 1 + + + CC2G + Capture/compare 2 + generation + 2 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + CC1S + 0 + 2 + + + OC1FE + OC1FE + 2 + 1 + + + OC1PE + OC1PE + 3 + 1 + + + OC1M + OC1M + 4 + 3 + + + OC1CE + OC1CE + 7 + 1 + + + CC2S + CC2S + 8 + 2 + + + OC2FE + OC2FE + 10 + 1 + + + OC2PE + OC2PE + 11 + 1 + + + OC2M + OC2M + 12 + 3 + + + OC2CE + OC2CE + 15 + 1 + + + OC1M_3 + Output Compare 1 mode - bit + 3 + 16 + 1 + + + OC2M_3 + Output Compare 2 mode - bit + 3 + 24 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + IC2PCS + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + IC1F + Input capture 1 filter + 4 + 4 + + + ICPCS + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output + mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + OC4M_3 + Output Compare 2 mode - bit + 3 + 24 + 1 + + + OC3M_3 + Output Compare 1 mode - bit + 3 + 16 + 1 + + + OC4CE + OC4CE + 15 + 1 + + + OC4M + OC4M + 12 + 3 + + + OC4PE + OC4PE + 11 + 1 + + + OC4FE + OC4FE + 10 + 1 + + + CC4S + CC4S + 8 + 2 + + + OC3CE + OC3CE + 7 + 1 + + + OC3M + OC3M + 4 + 3 + + + OC3PE + OC3PE + 3 + 1 + + + OC3FE + OC3FE + 2 + 1 + + + CC3S + CC3S + 0 + 2 + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input + mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + CC4S + Capture/Compare 4 + selection + 8 + 2 + + + IC3F + Input capture 3 filter + 4 + 4 + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + CC3S + Capture/compare 3 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC4NP + Capture/Compare 4 output + Polarity + 15 + 1 + + + CC4P + Capture/Compare 3 output + Polarity + 13 + 1 + + + CC4E + Capture/Compare 4 output + enable + 12 + 1 + + + CC3NP + Capture/Compare 3 output + Polarity + 11 + 1 + + + CC3P + Capture/Compare 3 output + Polarity + 9 + 1 + + + CC3E + Capture/Compare 3 output + enable + 8 + 1 + + + CC2NP + Capture/Compare 2 output + Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output + Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output + enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT_L + low counter value + 0 + 16 + + + CNT_H + High counter value + 16 + 16 + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR_H + High Auto-reload value + 16 + 16 + + + ARR_L + Low Auto-reload value + 0 + 16 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1_H + High Capture/Compare 1 + value + 16 + 16 + + + CCR1_L + Low Capture/Compare 1 + value + 0 + 16 + + + + + CCR2 + CCR2 + capture/compare register 2 + 0x38 + 0x20 + read-write + 0x00000000 + + + CCR2_H + High Capture/Compare 2 + value + 16 + 16 + + + CCR2_L + Low Capture/Compare 2 + value + 0 + 16 + + + + + CCR3 + CCR3 + capture/compare register 3 + 0x3C + 0x20 + read-write + 0x00000000 + + + CCR3_H + High Capture/Compare value + 16 + 16 + + + CCR3_L + Low Capture/Compare value + 0 + 16 + + + + + CCR4 + CCR4 + capture/compare register 4 + 0x40 + 0x20 + read-write + 0x00000000 + + + CCR4_H + High Capture/Compare value + 16 + 16 + + + CCR4_L + Low Capture/Compare value + 0 + 16 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + AF1 + AF1 + TIM alternate function option register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + ETRSEL + ETR source selection + 14 + 4 + + + + + TISEL + TISEL + TIM timer input selection + register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + TI1[0] to TI1[15] input + selection + 0 + 4 + + + TI2SEL + TI2[0] to TI2[15] input + selection + 8 + 4 + + + TI3SEL + TI3[0] to TI3[15] input + selection + 16 + 4 + + + TI4SEL + TI4[0] to TI4[15] input + selection + 24 + 4 + + + + + + + TIM3 + 0x40000400 + + TIM3 + TIM3 global interrupt + 29 + + + + TIM4 + 0x40000800 + + TIM4 + TIM4 global interrupt + 30 + + + + TIM5 + 0x40000C00 + + TIM5 + TIM5 global interrupt + 50 + + + + TIM12 + 0x40001800 + + + TIM13 + 0x40001C00 + + + TIM14 + 0x40002000 + + + TIM6 + Basic timers + TIM + 0x40001000 + + 0x0 + 0x400 + registers + + + TIM6_DAC + TIM6 global interrupt + 54 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + URS + Update request source + 2 + 1 + + + UDIS + Update disable + 1 + 1 + + + CEN + Counter enable + 0 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + MMS + Master mode selection + 4 + 3 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UDE + Update DMA request enable + 8 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + UG + Update generation + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + Low counter value + 0 + 16 + + + UIFCPY + UIF Copy + 31 + 1 + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Low Auto-reload value + 0 + 16 + + + + + + + TIM7 + 0x40001400 + + TIM7 + TIM7 global interrupt + 55 + + + + NVIC + Nested Vectored Interrupt + Controller + NVIC + 0xE000E100 + + 0x0 + 0x401 + registers + + + + ISER0 + ISER0 + Interrupt Set-Enable Register + 0x0 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ISER1 + ISER1 + Interrupt Set-Enable Register + 0x4 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ISER2 + ISER2 + Interrupt Set-Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ICER0 + ICER0 + Interrupt Clear-Enable + Register + 0x80 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ICER1 + ICER1 + Interrupt Clear-Enable + Register + 0x84 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ICER2 + ICER2 + Interrupt Clear-Enable + Register + 0x88 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ISPR0 + ISPR0 + Interrupt Set-Pending Register + 0x100 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ISPR1 + ISPR1 + Interrupt Set-Pending Register + 0x104 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ISPR2 + ISPR2 + Interrupt Set-Pending Register + 0x108 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ICPR0 + ICPR0 + Interrupt Clear-Pending + Register + 0x180 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + ICPR1 + ICPR1 + Interrupt Clear-Pending + Register + 0x184 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + ICPR2 + ICPR2 + Interrupt Clear-Pending + Register + 0x188 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + IABR0 + IABR0 + Interrupt Active Bit Register + 0x200 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IABR1 + IABR1 + Interrupt Active Bit Register + 0x204 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IABR2 + IABR2 + Interrupt Active Bit Register + 0x208 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IPR0 + IPR0 + Interrupt Priority Register + 0x300 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR1 + IPR1 + Interrupt Priority Register + 0x304 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR2 + IPR2 + Interrupt Priority Register + 0x308 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR3 + IPR3 + Interrupt Priority Register + 0x30C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR4 + IPR4 + Interrupt Priority Register + 0x310 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR5 + IPR5 + Interrupt Priority Register + 0x314 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR6 + IPR6 + Interrupt Priority Register + 0x318 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR7 + IPR7 + Interrupt Priority Register + 0x31C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR8 + IPR8 + Interrupt Priority Register + 0x320 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR9 + IPR9 + Interrupt Priority Register + 0x324 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR10 + IPR10 + Interrupt Priority Register + 0x328 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR11 + IPR11 + Interrupt Priority Register + 0x32C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR12 + IPR12 + Interrupt Priority Register + 0x330 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR13 + IPR13 + Interrupt Priority Register + 0x334 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR14 + IPR14 + Interrupt Priority Register + 0x338 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR15 + IPR15 + Interrupt Priority Register + 0x33C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR16 + IPR16 + Interrupt Priority Register + 0x340 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR17 + IPR17 + Interrupt Priority Register + 0x344 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR18 + IPR18 + Interrupt Priority Register + 0x348 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR19 + IPR19 + Interrupt Priority Register + 0x34C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR20 + IPR20 + Interrupt Priority Register + 0x350 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR21 + IPR21 + Interrupt Priority Register + 0x354 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR22 + IPR22 + Interrupt Priority Register + 0x358 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR23 + IPR23 + Interrupt Priority Register + 0x35C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR24 + IPR24 + Interrupt Priority Register + 0x360 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR25 + IPR25 + Interrupt Priority Register + 0x364 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR26 + IPR26 + Interrupt Priority Register + 0x368 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR27 + IPR27 + Interrupt Priority Register + 0x36C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR28 + IPR28 + Interrupt Priority Register + 0x370 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR29 + IPR29 + Interrupt Priority Register + 0x374 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR30 + IPR30 + Interrupt Priority Register + 0x378 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR31 + IPR31 + Interrupt Priority Register + 0x37C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR32 + IPR32 + Interrupt Priority Register + 0x380 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR33 + IPR33 + Interrupt Priority Register + 0x384 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR34 + IPR34 + Interrupt Priority Register + 0x388 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR35 + IPR35 + Interrupt Priority Register + 0x38C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR36 + IPR36 + Interrupt Priority Register + 0x390 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR37 + IPR37 + Interrupt Priority Register + 0x394 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR38 + IPR38 + Interrupt Priority Register + 0x398 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + ISER3 + ISER3 + Interrupt Set-Enable Register + 0xC + 0x20 + read-write + 0x00000000 + + + ICER3 + ICER3 + Interrupt Clear-Enable + Register + 0x8C + 0x20 + read-write + 0x00000000 + + + ISPR3 + ISPR3 + Interrupt Set-Pending Register + 0x10C + 0x20 + read-write + 0x00000000 + + + ICPR3 + ICPR3 + Interrupt Clear-Pending + Register + 0x1C0 + 0x20 + read-write + 0x00000000 + + + IABR3 + IABR3 + Interrupt Active Bit Register + 0x20C + 0x20 + read-write + 0x00000000 + + + + + DBGMCU + Microcontroller Debug Unit + DBGMCU + 0x5C001000 + + 0x0 + 0x400 + registers + + + + IDC + IDC + DBGMCU Identity Code Register + 0x0 + 0x20 + read-only + 0x10006450 + + + DEV_ID + Device ID + 0 + 12 + + + REV_ID + Revision + 16 + 16 + + + + + CR + CR + DBGMCU Configuration Register + 0x4 + 0x20 + read-write + 0x00000000 + + + DBGSLPD1 + Allow D1 domain debug in Sleep mode + 0 + 1 + + + DBGSTPD1 + Allow D1 domain debug in Stop mode + 1 + 1 + + + DBGSTBD1 + Allow D1 domain debug in Standby mode + 2 + 1 + + + DBGSLPD2 + Allow D2 domain debug in Sleep mode + 3 + 1 + + + DBGSTPD2 + Allow D2 domain debug in Stop mode + 4 + 1 + + + DBGSTBD2 + Allow D2 domain debug in Standby mode + 5 + 1 + + + DBGSTPD3 + Allow debug in D3 Stop mode + 7 + 1 + + + DBGSTBD3 + Allow debug in D3 Standby mode + 8 + 1 + + + TRACECLKEN + Trace port clock enable + 20 + 1 + + + D1DBGCKEN + D1 debug clock enable + 21 + 1 + + + D3DBGCKEN + D3 debug clock enable + 22 + 1 + + + TRGOEN + External trigger output enable + 28 + 1 + + + + + APB3FZ1 + APB3FZ1 + DBGMCU APB3 peripheral freeze register CPU1 + 0x34 + 0x20 + read-write + 0x00000000 + + + WWDG1 + WWDG1 stop in debug + 6 + 1 + + + + + APB3FZ2 + APB3FZ2 + DBGMCU APB3 peripheral freeze register CPU2 + 0x38 + 0x20 + read-write + 0x00000000 + + + WWDG1 + WWDG1 stop in debug + 6 + 1 + + + + + APB1LFZ1 + APB1LFZ1 + DBGMCU APB1L peripheral freeze register + 0x3C + 0x20 + read-write + 0x00000000 + + + DBG_TIM2 + TIM2 stop in debug + 0 + 1 + + + DBG_TIM3 + TIM3 stop in debug + 1 + 1 + + + DBG_TIM4 + TIM4 stop in debug + 2 + 1 + + + DBG_TIM5 + TIM5 stop in debug + 3 + 1 + + + DBG_TIM6 + TIM6 stop in debug + 4 + 1 + + + DBG_TIM7 + TIM7 stop in debug + 5 + 1 + + + DBG_TIM12 + TIM12 stop in debug + 6 + 1 + + + DBG_TIM13 + TIM13 stop in debug + 7 + 1 + + + DBG_TIM14 + TIM14 stop in debug + 8 + 1 + + + DBG_LPTIM1 + LPTIM1 stop in debug + 9 + 1 + + + DBG_WWDG2 + WWDG2 stop in debug + 11 + 1 + + + DBG_I2C1 + I2C1 SMBUS timeout stop in debug + 21 + 1 + + + DBG_I2C2 + I2C2 SMBUS timeout stop in debug + 22 + 1 + + + DBG_I2C3 + I2C3 SMBUS timeout stop in debug + 23 + 1 + + + + + APB1LFZ2 + APB1LFZ2 + DBGMCU APB1L peripheral freeze register CPU2 + 0x40 + 0x20 + read-write + 0x00000000 + + + DBG_TIM2 + TIM2 stop in debug + 0 + 1 + + + DBG_TIM3 + TIM3 stop in debug + 1 + 1 + + + DBG_TIM4 + TIM4 stop in debug + 2 + 1 + + + DBG_TIM5 + TIM5 stop in debug + 3 + 1 + + + DBG_TIM6 + TIM6 stop in debug + 4 + 1 + + + DBG_TIM7 + TIM4 stop in debug + 5 + 1 + + + DBG_TIM12 + TIM12 stop in debug + 6 + 1 + + + DBG_TIM13 + TIM13 stop in debug + 7 + 1 + + + DBG_TIM14 + TIM14 stop in debug + 8 + 1 + + + DBG_LPTIM1 + LPTIM1 stop in debug + 9 + 1 + + + DBG_WWDG2 + WWDG2 stop in debug + 11 + 1 + + + DBG_I2C1 + I2C1 SMBUS timeout stop in debug + 21 + 1 + + + DBG_I2C2 + I2C2 SMBUS timeout stop in debug + 22 + 1 + + + DBG_I2C3 + I2C3 SMBUS timeout stop in debug + 23 + 1 + + + + + APB2FZ1 + APB2FZ1 + DBGMCU APB2 peripheral freeze register + 0x4C + 0x20 + read-write + 0x00000000 + + + DBG_TIM1 + TIM1 stop in debug + 0 + 1 + + + DBG_TIM8 + TIM8 stop in debug + 1 + 1 + + + DBG_TIM15 + TIM15 stop in debug + 16 + 1 + + + DBG_TIM16 + TIM16 stop in debug + 17 + 1 + + + DBG_TIM17 + TIM17 stop in debug + 18 + 1 + + + DBG_HRTIM + HRTIM stop in debug + 29 + 1 + + + + + APB2FZ2 + APB2FZ2 + DBGMCU APB2 peripheral freeze register CPU2 + 0x50 + 0x20 + read-write + 0x00000000 + + + DBG_TIM1 + TIM1 stop in debug + 0 + 1 + + + DBG_TIM8 + TIM8 stop in debug + 1 + 1 + + + DBG_TIM15 + TIM15 stop in debug + 16 + 1 + + + DBG_TIM16 + TIM16 stop in debug + 17 + 1 + + + DBG_TIM17 + TIM17 stop in debug + 18 + 1 + + + DBG_HRTIM + HRTIM stop in debug + 29 + 1 + + + + + APB4FZ1 + APB4FZ1 + DBGMCU APB4 peripheral freeze register + 0x54 + 0x20 + read-write + 0x00000000 + + + DBG_I2C4 + I2C4 SMBUS timeout stop in debug + 7 + 1 + + + DBG_LPTIM2 + LPTIM2 stop in debug + 9 + 1 + + + DBG_LPTIM3 + LPTIM2 stop in debug + 10 + 1 + + + DBG_LPTIM4 + LPTIM4 stop in debug + 11 + 1 + + + DBG_LPTIM5 + LPTIM5 stop in debug + 12 + 1 + + + DBG_RTC + RTC stop in debug + 16 + 1 + + + DBG_WDGLSD1 + Independent watchdog for D1 stop in debug + 18 + 1 + + + DBG_WDGLSD2 + Independent watchdog for D2 stop in debug + 19 + 1 + + + + + APB4FZ2 + APB4FZ2 + DBGMCU APB4 peripheral freeze register CPU2 + 0x58 + 0x20 + read-write + 0x00000000 + + + DBG_I2C4 + I2C4 SMBUS timeout stop in debug + 7 + 1 + + + DBG_LPTIM2 + LPTIM2 stop in debug + 9 + 1 + + + DBG_LPTIM3 + LPTIM2 stop in debug + 10 + 1 + + + DBG_LPTIM4 + LPTIM4 stop in debug + 11 + 1 + + + DBG_LPTIM5 + LPTIM5 stop in debug + 12 + 1 + + + DBG_RTC + RTC stop in debug + 16 + 1 + + + DBG_WDGLSD1 + LS watchdog for D1 stop in debug + 18 + 1 + + + DBG_WDGLSD2 + LS watchdog for D2 stop in debug + 19 + 1 + + + + + + + MPU + Memory protection unit + MPU + 0xE000ED90 + + 0x0 + 0x15 + registers + + + + MPU_TYPER + MPU_TYPER + MPU type register + 0x0 + 0x20 + read-only + 0X00000800 + + + SEPARATE + Separate flag + 0 + 1 + + + DREGION + Number of MPU data regions + 8 + 8 + + + IREGION + Number of MPU instruction + regions + 16 + 8 + + + + + MPU_CTRL + MPU_CTRL + MPU control register + 0x4 + 0x20 + read-write + 0X00000000 + + + ENABLE + Enables the MPU + 0 + 1 + + + HFNMIENA + Enables the operation of MPU during hard + fault + 1 + 1 + + + PRIVDEFENA + Enable priviliged software access to + default memory map + 2 + 1 + + + + + MPU_RNR + MPU_RNR + MPU region number register + 0x8 + 0x20 + read-write + 0X00000000 + + + REGION + MPU region + 0 + 8 + + + + + MPU_RBAR + MPU_RBAR + MPU region base address + register + 0xC + 0x20 + read-write + 0X00000000 + + + REGION + MPU region field + 0 + 4 + + + VALID + MPU region number valid + 4 + 1 + + + ADDR + Region base address field + 5 + 27 + + + + + MPU_RASR + MPU_RASR + MPU region attribute and size + register + 0x10 + 0x20 + read-write + 0X00000000 + + + ENABLE + Region enable bit. + 0 + 1 + + + SIZE + Size of the MPU protection + region + 1 + 5 + + + SRD + Subregion disable bits + 8 + 8 + + + B + memory attribute + 16 + 1 + + + C + memory attribute + 17 + 1 + + + S + Shareable memory attribute + 18 + 1 + + + TEX + memory attribute + 19 + 3 + + + AP + Access permission + 24 + 3 + + + XN + Instruction access disable + bit + 28 + 1 + + + + + + + STK + SysTick timer + STK + 0xE000E010 + + 0x0 + 0x11 + registers + + + + CSR + CSR + SysTick control and status + register + 0x0 + 0x20 + read-write + 0X00000000 + + + ENABLE + Counter enable + 0 + 1 + + + TICKINT + SysTick exception request + enable + 1 + 1 + + + CLKSOURCE + Clock source selection + 2 + 1 + + + COUNTFLAG + COUNTFLAG + 16 + 1 + + + + + RVR + RVR + SysTick reload value register + 0x4 + 0x20 + read-write + 0X00000000 + + + RELOAD + RELOAD value + 0 + 24 + + + + + CVR + CVR + SysTick current value register + 0x8 + 0x20 + read-write + 0X00000000 + + + CURRENT + Current counter value + 0 + 24 + + + + + CALIB + CALIB + SysTick calibration value + register + 0xC + 0x20 + read-write + 0X00000000 + + + TENMS + Calibration value + 0 + 24 + + + SKEW + SKEW flag: Indicates whether the TENMS + value is exact + 30 + 1 + + + NOREF + NOREF flag. Reads as zero + 31 + 1 + + + + + + + NVIC_STIR + Nested vectored interrupt + controller + NVIC + 0xE000EF00 + + 0x0 + 0x5 + registers + + + + STIR + STIR + Software trigger interrupt + register + 0x0 + 0x20 + read-write + 0x00000000 + + + INTID + Software generated interrupt + ID + 0 + 9 + + + + + + + FPU_CPACR + Floating point unit CPACR + FPU + 0xE000ED88 + + 0x0 + 0x5 + registers + + + + CPACR + CPACR + Coprocessor access control + register + 0x0 + 0x20 + read-write + 0x0000000 + + + CP + CP + 20 + 4 + + + + + + + SCB_ACTRL + System control block ACTLR + SCB + 0xE000E008 + + 0x0 + 0x5 + registers + + + + ACTRL + ACTRL + Auxiliary control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DISFOLD + DISFOLD + 2 + 1 + + + FPEXCODIS + FPEXCODIS + 10 + 1 + + + DISRAMODE + DISRAMODE + 11 + 1 + + + DISITMATBFLUSH + DISITMATBFLUSH + 12 + 1 + + + + + + + FPU + Floting point unit + FPU + 0xE000EF34 + + 0x0 + 0xD + registers + + + FPU + Floating point unit interrupt + 81 + + + + FPCCR + FPCCR + Floating-point context control + register + 0x0 + 0x20 + read-write + 0x00000000 + + + LSPACT + LSPACT + 0 + 1 + + + USER + USER + 1 + 1 + + + THREAD + THREAD + 3 + 1 + + + HFRDY + HFRDY + 4 + 1 + + + MMRDY + MMRDY + 5 + 1 + + + BFRDY + BFRDY + 6 + 1 + + + MONRDY + MONRDY + 8 + 1 + + + LSPEN + LSPEN + 30 + 1 + + + ASPEN + ASPEN + 31 + 1 + + + + + FPCAR + FPCAR + Floating-point context address + register + 0x4 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Location of unpopulated + floating-point + 3 + 29 + + + + + FPSCR + FPSCR + Floating-point status control + register + 0x8 + 0x20 + read-write + 0x00000000 + + + IOC + Invalid operation cumulative exception + bit + 0 + 1 + + + DZC + Division by zero cumulative exception + bit. + 1 + 1 + + + OFC + Overflow cumulative exception + bit + 2 + 1 + + + UFC + Underflow cumulative exception + bit + 3 + 1 + + + IXC + Inexact cumulative exception + bit + 4 + 1 + + + IDC + Input denormal cumulative exception + bit. + 7 + 1 + + + RMode + Rounding Mode control + field + 22 + 2 + + + FZ + Flush-to-zero mode control + bit: + 24 + 1 + + + DN + Default NaN mode control + bit + 25 + 1 + + + AHP + Alternative half-precision control + bit + 26 + 1 + + + V + Overflow condition code + flag + 28 + 1 + + + C + Carry condition code flag + 29 + 1 + + + Z + Zero condition code flag + 30 + 1 + + + N + Negative condition code + flag + 31 + 1 + + + + + + + SCB + System control block + SCB + 0xE000ED00 + + 0x0 + 0x41 + registers + + + + CPUID + CPUID + CPUID base register + 0x0 + 0x20 + read-only + 0x410FC241 + + + Revision + Revision number + 0 + 4 + + + PartNo + Part number of the + processor + 4 + 12 + + + Constant + Reads as 0xF + 16 + 4 + + + Variant + Variant number + 20 + 4 + + + Implementer + Implementer code + 24 + 8 + + + + + ICSR + ICSR + Interrupt control and state + register + 0x4 + 0x20 + read-write + 0x00000000 + + + VECTACTIVE + Active vector + 0 + 9 + + + RETTOBASE + Return to base level + 11 + 1 + + + VECTPENDING + Pending vector + 12 + 7 + + + ISRPENDING + Interrupt pending flag + 22 + 1 + + + PENDSTCLR + SysTick exception clear-pending + bit + 25 + 1 + + + PENDSTSET + SysTick exception set-pending + bit + 26 + 1 + + + PENDSVCLR + PendSV clear-pending bit + 27 + 1 + + + PENDSVSET + PendSV set-pending bit + 28 + 1 + + + NMIPENDSET + NMI set-pending bit. + 31 + 1 + + + + + VTOR + VTOR + Vector table offset register + 0x8 + 0x20 + read-write + 0x00000000 + + + TBLOFF + Vector table base offset + field + 9 + 21 + + + + + AIRCR + AIRCR + Application interrupt and reset control + register + 0xC + 0x20 + read-write + 0x00000000 + + + VECTRESET + VECTRESET + 0 + 1 + + + VECTCLRACTIVE + VECTCLRACTIVE + 1 + 1 + + + SYSRESETREQ + SYSRESETREQ + 2 + 1 + + + PRIGROUP + PRIGROUP + 8 + 3 + + + ENDIANESS + ENDIANESS + 15 + 1 + + + VECTKEYSTAT + Register key + 16 + 16 + + + + + SCR + SCR + System control register + 0x10 + 0x20 + read-write + 0x00000000 + + + SLEEPONEXIT + SLEEPONEXIT + 1 + 1 + + + SLEEPDEEP + SLEEPDEEP + 2 + 1 + + + SEVEONPEND + Send Event on Pending bit + 4 + 1 + + + + + CCR + CCR + Configuration and control + register + 0x14 + 0x20 + read-write + 0x00000000 + + + NONBASETHRDENA + Configures how the processor enters + Thread mode + 0 + 1 + + + USERSETMPEND + USERSETMPEND + 1 + 1 + + + UNALIGN__TRP + UNALIGN_ TRP + 3 + 1 + + + DIV_0_TRP + DIV_0_TRP + 4 + 1 + + + BFHFNMIGN + BFHFNMIGN + 8 + 1 + + + STKALIGN + STKALIGN + 9 + 1 + + + DC + DC + 16 + 1 + + + IC + IC + 17 + 1 + + + BP + BP + 18 + 1 + + + + + SHPR1 + SHPR1 + System handler priority + registers + 0x18 + 0x20 + read-write + 0x00000000 + + + PRI_4 + Priority of system handler + 4 + 0 + 8 + + + PRI_5 + Priority of system handler + 5 + 8 + 8 + + + PRI_6 + Priority of system handler + 6 + 16 + 8 + + + + + SHPR2 + SHPR2 + System handler priority + registers + 0x1C + 0x20 + read-write + 0x00000000 + + + PRI_11 + Priority of system handler + 11 + 24 + 8 + + + + + SHPR3 + SHPR3 + System handler priority + registers + 0x20 + 0x20 + read-write + 0x00000000 + + + PRI_14 + Priority of system handler + 14 + 16 + 8 + + + PRI_15 + Priority of system handler + 15 + 24 + 8 + + + + + SHCSR + SHCSR + System handler control and state + register + 0x24 + 0x20 + read-write + 0x00000000 + + + MEMFAULTACT + Memory management fault exception active + bit + 0 + 1 + + + BUSFAULTACT + Bus fault exception active + bit + 1 + 1 + + + USGFAULTACT + Usage fault exception active + bit + 3 + 1 + + + SVCALLACT + SVC call active bit + 7 + 1 + + + MONITORACT + Debug monitor active bit + 8 + 1 + + + PENDSVACT + PendSV exception active + bit + 10 + 1 + + + SYSTICKACT + SysTick exception active + bit + 11 + 1 + + + USGFAULTPENDED + Usage fault exception pending + bit + 12 + 1 + + + MEMFAULTPENDED + Memory management fault exception + pending bit + 13 + 1 + + + BUSFAULTPENDED + Bus fault exception pending + bit + 14 + 1 + + + SVCALLPENDED + SVC call pending bit + 15 + 1 + + + MEMFAULTENA + Memory management fault enable + bit + 16 + 1 + + + BUSFAULTENA + Bus fault enable bit + 17 + 1 + + + USGFAULTENA + Usage fault enable bit + 18 + 1 + + + + + CFSR_UFSR_BFSR_MMFSR + CFSR_UFSR_BFSR_MMFSR + Configurable fault status + register + 0x28 + 0x20 + read-write + 0x00000000 + + + IACCVIOL + IACCVIOL + 0 + 1 + + + DACCVIOL + DACCVIOL + 1 + 1 + + + MUNSTKERR + MUNSTKERR + 3 + 1 + + + MSTKERR + MSTKERR + 4 + 1 + + + MLSPERR + MLSPERR + 5 + 1 + + + MMARVALID + MMARVALID + 7 + 1 + + + IBUSERR + Instruction bus error + 8 + 1 + + + PRECISERR + Precise data bus error + 9 + 1 + + + IMPRECISERR + Imprecise data bus error + 10 + 1 + + + UNSTKERR + Bus fault on unstacking for a return + from exception + 11 + 1 + + + STKERR + Bus fault on stacking for exception + entry + 12 + 1 + + + LSPERR + Bus fault on floating-point lazy state + preservation + 13 + 1 + + + BFARVALID + Bus Fault Address Register (BFAR) valid + flag + 15 + 1 + + + UNDEFINSTR + Undefined instruction usage + fault + 16 + 1 + + + INVSTATE + Invalid state usage fault + 17 + 1 + + + INVPC + Invalid PC load usage + fault + 18 + 1 + + + NOCP + No coprocessor usage + fault. + 19 + 1 + + + UNALIGNED + Unaligned access usage + fault + 24 + 1 + + + DIVBYZERO + Divide by zero usage fault + 25 + 1 + + + + + HFSR + HFSR + Hard fault status register + 0x2C + 0x20 + read-write + 0x00000000 + + + VECTTBL + Vector table hard fault + 1 + 1 + + + FORCED + Forced hard fault + 30 + 1 + + + DEBUG_VT + Reserved for Debug use + 31 + 1 + + + + + MMFAR + MMFAR + Memory management fault address + register + 0x34 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Memory management fault + address + 0 + 32 + + + + + BFAR + BFAR + Bus fault address register + 0x38 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Bus fault address + 0 + 32 + + + + + + + PF + Processor features + PF + 0xE000ED78 + + 0x0 + 0xD + registers + + + + CLIDR + CLIDR + Cache Level ID register + 0x0 + 0x20 + read-only + 0x09000003 + + + CL1 + CL1 + 0 + 3 + + + CL2 + CL2 + 3 + 3 + + + CL3 + CL3 + 6 + 3 + + + CL4 + CL4 + 9 + 3 + + + CL5 + CL5 + 12 + 3 + + + CL6 + CL6 + 15 + 3 + + + CL7 + CL7 + 18 + 3 + + + LoUIS + LoUIS + 21 + 3 + + + LoC + LoC + 24 + 3 + + + LoU + LoU + 27 + 3 + + + + + CTR + CTR + Cache Type register + 0x4 + 0x20 + read-only + 0X8303C003 + + + _IminLine + IminLine + 0 + 4 + + + DMinLine + DMinLine + 16 + 4 + + + ERG + ERG + 20 + 4 + + + CWG + CWG + 24 + 4 + + + Format + Format + 29 + 3 + + + + + CCSIDR + CCSIDR + Cache Size ID register + 0x8 + 0x20 + read-only + 0X00000000 + + + LineSize + LineSize + 0 + 3 + + + Associativity + Associativity + 3 + 10 + + + NumSets + NumSets + 13 + 15 + + + WA + WA + 28 + 1 + + + RA + RA + 29 + 1 + + + WB + WB + 30 + 1 + + + WT + WT + 31 + 1 + + + + + + + AC + Access control + AC + 0xE000EF90 + + 0x0 + 0x1D + registers + + + + ITCMCR + ITCMCR + Instruction and Data Tightly-Coupled Memory + Control Registers + 0x0 + 0x20 + read-write + 0X00000000 + + + EN + EN + 0 + 1 + + + RMW + RMW + 1 + 1 + + + RETEN + RETEN + 2 + 1 + + + SZ + SZ + 3 + 4 + + + + + DTCMCR + DTCMCR + Instruction and Data Tightly-Coupled Memory + Control Registers + 0x4 + 0x20 + read-write + 0X00000000 + + + EN + EN + 0 + 1 + + + RMW + RMW + 1 + 1 + + + RETEN + RETEN + 2 + 1 + + + SZ + SZ + 3 + 4 + + + + + AHBPCR + AHBPCR + AHBP Control register + 0x8 + 0x20 + read-write + 0X00000000 + + + EN + EN + 0 + 1 + + + SZ + SZ + 1 + 3 + + + + + CACR + CACR + Auxiliary Cache Control + register + 0xC + 0x20 + read-write + 0X00000000 + + + SIWT + SIWT + 0 + 1 + + + ECCEN + ECCEN + 1 + 1 + + + FORCEWT + FORCEWT + 2 + 1 + + + + + AHBSCR + AHBSCR + AHB Slave Control register + 0x10 + 0x20 + read-write + 0X00000000 + + + CTL + CTL + 0 + 2 + + + TPRI + TPRI + 2 + 9 + + + INITCOUNT + INITCOUNT + 11 + 5 + + + + + ABFSR + ABFSR + Auxiliary Bus Fault Status + register + 0x18 + 0x20 + read-write + 0X00000000 + + + ITCM + ITCM + 0 + 1 + + + DTCM + DTCM + 1 + 1 + + + AHBP + AHBP + 2 + 1 + + + AXIM + AXIM + 3 + 1 + + + EPPB + EPPB + 4 + 1 + + + AXIMTYPE + AXIMTYPE + 8 + 2 + + + + + + + RAMECC1 + ECC controller is associated to each RAM + area + RAMECC + 0x52009000 + + 0x0 + 0x400 + registers + + + + IER + IER + RAMECC interrupt enable + register + 0x0 + 0x20 + read-write + 0x00000000 + + + GIE + Global interrupt enable + 0 + 1 + + + GECCSEIE_ + Global ECC single error interrupt + enable + 1 + 1 + + + GECCDEIE + Global ECC double error interrupt + enable + 2 + 1 + + + GECCDEBWIE + Global ECC double error on byte write + (BW) interrupt enable + 3 + 1 + + + + + M1CR + M1CR + RAMECC monitor x configuration + register + 0x20 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1SR + M1SR + RAMECC monitor x status + register + 0x24 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FAR + M1FAR + RAMECC monitor x failing address + register + 0x28 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FDRL + M1FDRL + RAMECC monitor x failing data low + register + 0x2C + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FDRH + M1FDRH + RAMECC monitor x failing data high + register + 0x30 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FECR + M1FECR + RAMECC monitor x failing ECC error code + register + 0x34 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2CR + M2CR + RAMECC monitor x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2SR + M2SR + RAMECC monitor x status + register + 0x44 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2FAR + M2FAR + RAMECC monitor x failing address + register + 0x48 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2FDRL + M2FDRL + RAMECC monitor x failing data low + register + 0x4C + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2FDRH + M2FDRH + RAMECC monitor x failing data high + register + 0x50 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M2FECR + M2FECR + RAMECC monitor x failing ECC error code + register + 0x58 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3CR + M3CR + RAMECC monitor x configuration + register + 0x60 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3SR + M3SR + RAMECC monitor x status + register + 0x64 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3FAR + M3FAR + RAMECC monitor x failing address + register + 0x68 + 0x20 + read-write + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3FDRL + M3FDRL + RAMECC monitor x failing data low + register + 0x6C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M3FDRH + M3FDRH + RAMECC monitor x failing data high + register + 0x70 + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M3FECR + M3FECR + RAMECC monitor x failing ECC error code + register + 0x7C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4CR + M4CR + RAMECC monitor x configuration + register + 0x80 + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4SR + M4SR + RAMECC monitor x status + register + 0x84 + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4FAR + M4FAR + RAMECC monitor x failing address + register + 0x88 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FDRL + M4FDRL + RAMECC monitor x failing data low + register + 0x8C + 0x20 + read-write + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FDRH + M4FDRH + RAMECC monitor x failing data high + register + 0x90 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FECR + M4FECR + RAMECC monitor x failing ECC error code + register + M4FDRH + 0x90 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M5CR + M5CR + RAMECC monitor x configuration + register + 0xA0 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5SR + M5SR + RAMECC monitor x status + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FAR + M5FAR + RAMECC monitor x failing address + register + 0xA8 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FDRL + M5FDRL + RAMECC monitor x failing data low + register + 0xAC + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FDRH + M5FDRH + RAMECC monitor x failing data high + register + 0xB0 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FECR + M5FECR + RAMECC monitor x failing ECC error code + register + 0xB4 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + + + RAMECC2 + ECC controller is associated to each RAM + area + RAMECC + 0x48023000 + + 0x0 + 0x400 + registers + + + + IER + IER + RAMECC interrupt enable + register + 0x0 + 0x20 + read-write + 0x00000000 + + + GIE + Global interrupt enable + 0 + 1 + + + GECCSEIE_ + Global ECC single error interrupt + enable + 1 + 1 + + + GECCDEIE + Global ECC double error interrupt + enable + 2 + 1 + + + GECCDEBWIE + Global ECC double error on byte write + (BW) interrupt enable + 3 + 1 + + + + + M1CR + M1CR + RAMECC monitor x configuration + register + 0x20 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M2CR + M2CR + RAMECC monitor x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M3CR + M3CR + RAMECC monitor x configuration + register + 0x60 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M4CR + M4CR + RAMECC monitor x configuration + register + 0x80 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M5CR + M5CR + RAMECC monitor x configuration + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1SR + M1SR + RAMECC monitor x status + register + 0x24 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2SR + M2SR + RAMECC monitor x status + register + 0x44 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M3SR + M3SR + RAMECC monitor x status + register + 0x64 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M4SR + M4SR + RAMECC monitor x status + register + 0x84 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M5SR + M5SR + RAMECC monitor x status + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M1FAR + M1FAR + RAMECC monitor x failing address + register + 0x28 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M2FAR + M2FAR + RAMECC monitor x failing address + register + 0x48 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3FAR + M3FAR + RAMECC monitor x failing address + register + 0x68 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M4FAR + M4FAR + RAMECC monitor x failing address + register + 0x88 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M5FAR + M5FAR + RAMECC monitor x failing address + register + 0xA8 + 0x20 + read-write + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M1FDRL + M1FDRL + RAMECC monitor x failing data low + register + 0x2C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M2FDRL + M2FDRL + RAMECC monitor x failing data low + register + 0x4C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M3FDRL + M3FDRL + RAMECC monitor x failing data low + register + 0x6C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4FDRL + M4FDRL + RAMECC monitor x failing data low + register + 0x8C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M5FDRL + M5FDRL + RAMECC monitor x failing data low + register + 0xAC + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M1FDRH + M1FDRH + RAMECC monitor x failing data high + register + 0x30 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M2FDRH + M2FDRH + RAMECC monitor x failing data high + register + 0x50 + 0x20 + read-write + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M3FDRH + M3FDRH + RAMECC monitor x failing data high + register + 0x70 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FDRH + M4FDRH + RAMECC monitor x failing data high + register + 0x90 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M5FDRH + M5FDRH + RAMECC monitor x failing data high + register + 0xB0 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M1FECR + M1FECR + RAMECC monitor x failing ECC error code + register + 0x34 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M2FECR + M2FECR + RAMECC monitor x failing ECC error code + register + 0x58 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M3FECR + M3FECR + RAMECC monitor x failing ECC error code + register + 0x7C + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M4FECR + M4FECR + RAMECC monitor x failing ECC error code + register + M4FDRH + 0x90 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FECR + M5FECR + RAMECC monitor x failing ECC error code + register + 0xB4 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + + + RAMECC3 + ECC controller is associated to each RAM + area + RAMECC + 0x58027000 + + 0x0 + 0x400 + registers + + + + IER + IER + RAMECC interrupt enable + register + 0x0 + 0x20 + read-write + 0x00000000 + + + GIE + Global interrupt enable + 0 + 1 + + + GECCSEIE_ + Global ECC single error interrupt + enable + 1 + 1 + + + GECCDEIE + Global ECC double error interrupt + enable + 2 + 1 + + + GECCDEBWIE + Global ECC double error on byte write + (BW) interrupt enable + 3 + 1 + + + + + M1CR + M1CR + RAMECC monitor x configuration + register + 0x20 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M2CR + M2CR + RAMECC monitor x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1SR + M1SR + RAMECC monitor x status + register + 0x24 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2SR + M2SR + RAMECC monitor x status + register + 0x44 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M1FAR + M1FAR + RAMECC monitor x failing address + register + 0x28 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M2FAR + M2FAR + RAMECC monitor x failing address + register + 0x48 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M1FDRL + M1FDRL + RAMECC monitor x failing data low + register + 0x2C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M2FDRL + M2FDRL + RAMECC monitor x failing data low + register + 0x4C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M1FDRH + M1FDRH + RAMECC monitor x failing data high + register + 0x30 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M2FDRH + M2FDRH + RAMECC monitor x failing data high + register + 0x50 + 0x20 + read-write + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M1FECR + M1FECR + RAMECC monitor x failing ECC error code + register + 0x34 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M2FECR + M2FECR + RAMECC monitor x failing ECC error code + register + 0x58 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + + + ART + accelerator - control register + (ART_CTR) + ART + 0x40024400 + + 0x0 + 0x400 + registers + + + + CTR + CTR + control register + 0x0 + 0x20 + read-write + 0x00000004 + + + EN + Cache enable + 0 + 1 + + + PCACHEADDR + Cacheable page index + 8 + 12 + + + + + + + diff --git a/svd/STM32H747_CM7.svd b/svd/STM32H747_CM7.svd new file mode 100644 index 000000000..ea03cfcc4 --- /dev/null +++ b/svd/STM32H747_CM7.svd @@ -0,0 +1,109474 @@ + + + STM32H747_CM7 + 1.2 + STM32H747_CM7 + + CM7 + r0p1 + little + true + true + 4 + false + + + + 8 + + 32 + + 0x20 + 0x0 + 0xFFFFFFFF + + + COMP1 + COMP1 + COMP1 + 0x58003800 + + 0x0 + 0x400 + registers + + + COMP + COMP1 and COMP2 + 137 + + + + SR + SR + Comparator status register + 0x0 + 0x20 + read-only + 0x00000000 + + + C1VAL + COMP channel 1 output status + bit + 0 + 1 + + + C2VAL + COMP channel 2 output status + bit + 1 + 1 + + + C1IF + COMP channel 1 Interrupt + Flag + 16 + 1 + + + C2IF + COMP channel 2 Interrupt + Flag + 17 + 1 + + + + + ICFR + ICFR + Comparator interrupt clear flag + register + 0x4 + 0x20 + write-only + 0x00000000 + + + CC1IF + Clear COMP channel 1 Interrupt + Flag + 16 + 1 + + + CC2IF + Clear COMP channel 2 Interrupt + Flag + 17 + 1 + + + + + OR + OR + Comparator option register + 0x8 + 0x20 + read-write + 0x00000000 + + + AFOP + Selection of source for alternate + function of output ports + 0 + 11 + + + OR + Option Register + 11 + 21 + + + + + CFGR1 + CFGR1 + Comparator configuration register + 1 + 0xC + 0x20 + read-write + 0x00000000 + + + EN + COMP channel 1 enable bit + 0 + 1 + + + BRGEN + Scaler bridge enable + 1 + 1 + + + SCALEN + Voltage scaler enable bit + 2 + 1 + + + POLARITY + COMP channel 1 polarity selection + bit + 3 + 1 + + + ITEN + COMP channel 1 interrupt + enable + 6 + 1 + + + HYST + COMP channel 1 hysteresis selection + bits + 8 + 2 + + + PWRMODE + Power Mode of the COMP channel + 1 + 12 + 2 + + + INMSEL + COMP channel 1 inverting input selection + field + 16 + 3 + + + INPSEL + COMP channel 1 non-inverting input + selection bit + 20 + 1 + + + BLANKING + COMP channel 1 blanking source selection + bits + 24 + 4 + + + LOCK + Lock bit + 31 + 1 + + + + + CFGR2 + CFGR2 + Comparator configuration register + 2 + 0x10 + 0x20 + read-write + 0x00000000 + + + EN + COMP channel 1 enable bit + 0 + 1 + + + BRGEN + Scaler bridge enable + 1 + 1 + + + SCALEN + Voltage scaler enable bit + 2 + 1 + + + POLARITY + COMP channel 1 polarity selection + bit + 3 + 1 + + + WINMODE + Window comparator mode selection + bit + 4 + 1 + + + ITEN + COMP channel 1 interrupt + enable + 6 + 1 + + + HYST + COMP channel 1 hysteresis selection + bits + 8 + 2 + + + PWRMODE + Power Mode of the COMP channel + 1 + 12 + 2 + + + INMSEL + COMP channel 1 inverting input selection + field + 16 + 3 + + + INPSEL + COMP channel 1 non-inverting input + selection bit + 20 + 1 + + + BLANKING + COMP channel 1 blanking source selection + bits + 24 + 4 + + + LOCK + Lock bit + 31 + 1 + + + + + + + CRS + CRS + CRS + 0x40008400 + + 0x0 + 0x400 + registers + + + CRS + Clock Recovery System globa + 144 + + + + CR + CR + CRS control register + 0x0 + 0x20 + 0x00002000 + + + SYNCOKIE + SYNC event OK interrupt + enable + 0 + 1 + read-write + + + SYNCWARNIE + SYNC warning interrupt + enable + 1 + 1 + read-write + + + ERRIE + Synchronization or trimming error + interrupt enable + 2 + 1 + read-write + + + ESYNCIE + Expected SYNC interrupt + enable + 3 + 1 + read-write + + + CEN + Frequency error counter enable This bit + enables the oscillator clock for the frequency error + counter. When this bit is set, the CRS_CFGR register + is write-protected and cannot be + modified. + 5 + 1 + read-write + + + AUTOTRIMEN + Automatic trimming enable This bit + enables the automatic hardware adjustment of TRIM + bits according to the measured frequency error + between two SYNC events. If this bit is set, the TRIM + bits are read-only. The TRIM value can be adjusted by + hardware by one or two steps at a time, depending on + the measured frequency error value. Refer to + Section7.3.4: Frequency error evaluation and + automatic trimming for more details. + 6 + 1 + read-write + + + SWSYNC + Generate software SYNC event This bit is + set by software in order to generate a software SYNC + event. It is automatically cleared by + hardware. + 7 + 1 + read-only + + + TRIM + HSI48 oscillator smooth trimming These + bits provide a user-programmable trimming value to + the HSI48 oscillator. They can be programmed to + adjust to variations in voltage and temperature that + influence the frequency of the HSI48. The default + value is 32, which corresponds to the middle of the + trimming interval. The trimming step is around 67 kHz + between two consecutive TRIM steps. A higher TRIM + value corresponds to a higher output frequency. When + the AUTOTRIMEN bit is set, this field is controlled + by hardware and is read-only. + 8 + 6 + read-write + + + + + CFGR + CFGR + This register can be written only when the + frequency error counter is disabled (CEN bit is cleared + in CRS_CR). When the counter is enabled, this register is + write-protected. + 0x4 + 0x20 + read-write + 0x2022BB7F + + + RELOAD + Counter reload value RELOAD is the value + to be loaded in the frequency error counter with each + SYNC event. Refer to Section7.3.3: Frequency error + measurement for more details about counter + behavior. + 0 + 16 + + + FELIM + Frequency error limit FELIM contains the + value to be used to evaluate the captured frequency + error value latched in the FECAP[15:0] bits of the + CRS_ISR register. Refer to Section7.3.4: Frequency + error evaluation and automatic trimming for more + details about FECAP evaluation. + 16 + 8 + + + SYNCDIV + SYNC divider These bits are set and + cleared by software to control the division factor of + the SYNC signal. + 24 + 3 + + + SYNCSRC + SYNC signal source selection These bits + are set and cleared by software to select the SYNC + signal source. Note: When using USB LPM (Link Power + Management) and the device is in Sleep mode, the + periodic USB SOF will not be generated by the host. + No SYNC signal will therefore be provided to the CRS + to calibrate the HSI48 on the run. To guarantee the + required clock precision after waking up from Sleep + mode, the LSE or reference clock on the GPIOs should + be used as SYNC signal. + 28 + 2 + + + SYNCPOL + SYNC polarity selection This bit is set + and cleared by software to select the input polarity + for the SYNC signal source. + 31 + 1 + + + + + ISR + ISR + CRS interrupt and status + register + 0x8 + 0x20 + read-only + 0x00000000 + + + SYNCOKF + SYNC event OK flag This flag is set by + hardware when the measured frequency error is smaller + than FELIM * 3. This means that either no adjustment + of the TRIM value is needed or that an adjustment by + one trimming step is enough to compensate the + frequency error. An interrupt is generated if the + SYNCOKIE bit is set in the CRS_CR register. It is + cleared by software by setting the SYNCOKC bit in the + CRS_ICR register. + 0 + 1 + + + SYNCWARNF + SYNC warning flag This flag is set by + hardware when the measured frequency error is greater + than or equal to FELIM * 3, but smaller than FELIM * + 128. This means that to compensate the frequency + error, the TRIM value must be adjusted by two steps + or more. An interrupt is generated if the SYNCWARNIE + bit is set in the CRS_CR register. It is cleared by + software by setting the SYNCWARNC bit in the CRS_ICR + register. + 1 + 1 + + + ERRF + Error flag This flag is set by hardware + in case of any synchronization or trimming error. It + is the logical OR of the TRIMOVF, SYNCMISS and + SYNCERR bits. An interrupt is generated if the ERRIE + bit is set in the CRS_CR register. It is cleared by + software in reaction to setting the ERRC bit in the + CRS_ICR register, which clears the TRIMOVF, SYNCMISS + and SYNCERR bits. + 2 + 1 + + + ESYNCF + Expected SYNC flag This flag is set by + hardware when the frequency error counter reached a + zero value. An interrupt is generated if the ESYNCIE + bit is set in the CRS_CR register. It is cleared by + software by setting the ESYNCC bit in the CRS_ICR + register. + 3 + 1 + + + SYNCERR + SYNC error This flag is set by hardware + when the SYNC pulse arrives before the ESYNC event + and the measured frequency error is greater than or + equal to FELIM * 128. This means that the frequency + error is too big (internal frequency too low) to be + compensated by adjusting the TRIM value, and that + some other action should be taken. An interrupt is + generated if the ERRIE bit is set in the CRS_CR + register. It is cleared by software by setting the + ERRC bit in the CRS_ICR register. + 8 + 1 + + + SYNCMISS + SYNC missed This flag is set by hardware + when the frequency error counter reached value FELIM + * 128 and no SYNC was detected, meaning either that a + SYNC pulse was missed or that the frequency error is + too big (internal frequency too high) to be + compensated by adjusting the TRIM value, and that + some other action should be taken. At this point, the + frequency error counter is stopped (waiting for a + next SYNC) and an interrupt is generated if the ERRIE + bit is set in the CRS_CR register. It is cleared by + software by setting the ERRC bit in the CRS_ICR + register. + 9 + 1 + + + TRIMOVF + Trimming overflow or underflow This flag + is set by hardware when the automatic trimming tries + to over- or under-flow the TRIM value. An interrupt + is generated if the ERRIE bit is set in the CRS_CR + register. It is cleared by software by setting the + ERRC bit in the CRS_ICR register. + 10 + 1 + + + FEDIR + Frequency error direction FEDIR is the + counting direction of the frequency error counter + latched in the time of the last SYNC event. It shows + whether the actual frequency is below or above the + target. + 15 + 1 + + + FECAP + Frequency error capture FECAP is the + frequency error counter value latched in the time of + the last SYNC event. Refer to Section7.3.4: Frequency + error evaluation and automatic trimming for more + details about FECAP usage. + 16 + 16 + + + + + ICR + ICR + CRS interrupt flag clear + register + 0xC + 0x20 + read-write + 0x00000000 + + + SYNCOKC + SYNC event OK clear flag Writing 1 to + this bit clears the SYNCOKF flag in the CRS_ISR + register. + 0 + 1 + + + SYNCWARNC + SYNC warning clear flag Writing 1 to + this bit clears the SYNCWARNF flag in the CRS_ISR + register. + 1 + 1 + + + ERRC + Error clear flag Writing 1 to this bit + clears TRIMOVF, SYNCMISS and SYNCERR bits and + consequently also the ERRF flag in the CRS_ISR + register. + 2 + 1 + + + ESYNCC + Expected SYNC clear flag Writing 1 to + this bit clears the ESYNCF flag in the CRS_ISR + register. + 3 + 1 + + + + + + + DAC + DAC + DAC + 0x40007400 + + 0x0 + 0x400 + registers + + + + CR + CR + DAC control register + 0x0 + 0x20 + read-write + 0x00000000 + + + EN1 + DAC channel1 enable This bit is set and + cleared by software to enable/disable DAC + channel1. + 0 + 1 + + + TEN1 + DAC channel1 trigger + enable + 1 + 1 + + + TSEL1 + DAC channel1 trigger selection These + bits select the external event used to trigger DAC + channel1. Note: Only used if bit TEN1 = 1 (DAC + channel1 trigger enabled). + 2 + 3 + + + WAVE1 + DAC channel1 noise/triangle wave + generation enable These bits are set and cleared by + software. Note: Only used if bit TEN1 = 1 (DAC + channel1 trigger enabled). + 6 + 2 + + + MAMP1 + DAC channel1 mask/amplitude selector + These bits are written by software to select mask in + wave generation mode or amplitude in triangle + generation mode. = 1011: Unmask bits[11:0] of LFSR/ + triangle amplitude equal to 4095 + 8 + 4 + + + DMAEN1 + DAC channel1 DMA enable This bit is set + and cleared by software. + 12 + 1 + + + DMAUDRIE1 + DAC channel1 DMA Underrun Interrupt + enable This bit is set and cleared by + software. + 13 + 1 + + + CEN1 + DAC Channel 1 calibration enable This + bit is set and cleared by software to enable/disable + DAC channel 1 calibration, it can be written only if + bit EN1=0 into DAC_CR (the calibration mode can be + entered/exit only when the DAC channel is disabled) + Otherwise, the write operation is + ignored. + 14 + 1 + + + EN2 + DAC channel2 enable This bit is set and + cleared by software to enable/disable DAC + channel2. + 16 + 1 + + + TEN2 + DAC channel2 trigger + enable + 17 + 1 + + + TSEL2 + DAC channel2 trigger selection These + bits select the external event used to trigger DAC + channel2 Note: Only used if bit TEN2 = 1 (DAC + channel2 trigger enabled). + 18 + 3 + + + WAVE2 + DAC channel2 noise/triangle wave + generation enable These bits are set/reset by + software. 1x: Triangle wave generation enabled Note: + Only used if bit TEN2 = 1 (DAC channel2 trigger + enabled) + 22 + 2 + + + MAMP2 + DAC channel2 mask/amplitude selector + These bits are written by software to select mask in + wave generation mode or amplitude in triangle + generation mode. = 1011: Unmask bits[11:0] of LFSR/ + triangle amplitude equal to 4095 + 24 + 4 + + + DMAEN2 + DAC channel2 DMA enable This bit is set + and cleared by software. + 28 + 1 + + + DMAUDRIE2 + DAC channel2 DMA underrun interrupt + enable This bit is set and cleared by + software. + 29 + 1 + + + CEN2 + DAC Channel 2 calibration enable This + bit is set and cleared by software to enable/disable + DAC channel 2 calibration, it can be written only if + bit EN2=0 into DAC_CR (the calibration mode can be + entered/exit only when the DAC channel is disabled) + Otherwise, the write operation is + ignored. + 30 + 1 + + + + + SWTRGR + SWTRGR + DAC software trigger register + 0x4 + 0x20 + write-only + 0x00000000 + + + SWTRIG1 + DAC channel1 software trigger This bit + is set by software to trigger the DAC in software + trigger mode. Note: This bit is cleared by hardware + (one APB1 clock cycle later) once the DAC_DHR1 + register value has been loaded into the DAC_DOR1 + register. + 0 + 1 + + + SWTRIG2 + DAC channel2 software trigger This bit + is set by software to trigger the DAC in software + trigger mode. Note: This bit is cleared by hardware + (one APB1 clock cycle later) once the DAC_DHR2 + register value has been loaded into the DAC_DOR2 + register. + 1 + 1 + + + + + DHR12R1 + DHR12R1 + DAC channel1 12-bit right-aligned data + holding register + 0x8 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 0 + 12 + + + + + DHR12L1 + DHR12L1 + DAC channel1 12-bit left aligned data + holding register + 0xC + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit left-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 4 + 12 + + + + + DHR8R1 + DHR8R1 + DAC channel1 8-bit right aligned data + holding register + 0x10 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel1. + 0 + 8 + + + + + DHR12R2 + DHR12R2 + DAC channel2 12-bit right aligned data + holding register + 0x14 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel2. + 0 + 12 + + + + + DHR12L2 + DHR12L2 + DAC channel2 12-bit left aligned data + holding register + 0x18 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit left-aligned data + These bits are written by software which specify + 12-bit data for DAC channel2. + 4 + 12 + + + + + DHR8R2 + DHR8R2 + DAC channel2 8-bit right-aligned data + holding register + 0x1C + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel2. + 0 + 8 + + + + + DHR12RD + DHR12RD + Dual DAC 12-bit right-aligned data holding + register + 0x20 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 0 + 12 + + + DACC2DHR + DAC channel2 12-bit right-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel2. + 16 + 12 + + + + + DHR12LD + DHR12LD + DUAL DAC 12-bit left aligned data holding + register + 0x24 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit left-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel1. + 4 + 12 + + + DACC2DHR + DAC channel2 12-bit left-aligned data + These bits are written by software which specifies + 12-bit data for DAC channel2. + 20 + 12 + + + + + DHR8RD + DHR8RD + DUAL DAC 8-bit right aligned data holding + register + 0x28 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel1. + 0 + 8 + + + DACC2DHR + DAC channel2 8-bit right-aligned data + These bits are written by software which specifies + 8-bit data for DAC channel2. + 8 + 8 + + + + + DOR1 + DOR1 + DAC channel1 data output + register + 0x2C + 0x20 + read-only + 0x00000000 + + + DACC1DOR + DAC channel1 data output These bits are + read-only, they contain data output for DAC + channel1. + 0 + 12 + + + + + DOR2 + DOR2 + DAC channel2 data output + register + 0x30 + 0x20 + read-only + 0x00000000 + + + DACC2DOR + DAC channel2 data output These bits are + read-only, they contain data output for DAC + channel2. + 0 + 12 + + + + + SR + SR + DAC status register + 0x34 + 0x20 + 0x00000000 + + + DMAUDR1 + DAC channel1 DMA underrun flag This bit + is set by hardware and cleared by software (by + writing it to 1). + 13 + 1 + read-write + + + CAL_FLAG1 + DAC Channel 1 calibration offset status + This bit is set and cleared by hardware + 14 + 1 + read-only + + + BWST1 + DAC Channel 1 busy writing sample time + flag This bit is systematically set just after Sample + & Hold mode enable and is set each time the + software writes the register DAC_SHSR1, It is cleared + by hardware when the write operation of DAC_SHSR1 is + complete. (It takes about 3LSI periods of + synchronization). + 15 + 1 + read-only + + + DMAUDR2 + DAC channel2 DMA underrun flag This bit + is set by hardware and cleared by software (by + writing it to 1). + 29 + 1 + read-write + + + CAL_FLAG2 + DAC Channel 2 calibration offset status + This bit is set and cleared by hardware + 30 + 1 + read-only + + + BWST2 + DAC Channel 2 busy writing sample time + flag This bit is systematically set just after Sample + & Hold mode enable and is set each time the + software writes the register DAC_SHSR2, It is cleared + by hardware when the write operation of DAC_SHSR2 is + complete. (It takes about 3 LSI periods of + synchronization). + 31 + 1 + read-only + + + + + CCR + CCR + DAC calibration control + register + 0x38 + 0x20 + read-write + 0x00000000 + + + OTRIM1 + DAC Channel 1 offset trimming + value + 0 + 5 + + + OTRIM2 + DAC Channel 2 offset trimming + value + 16 + 5 + + + + + MCR + MCR + DAC mode control register + 0x3C + 0x20 + read-write + 0x00000000 + + + MODE1 + DAC Channel 1 mode These bits can be + written only when the DAC is disabled and not in the + calibration mode (when bit EN1=0 and bit CEN1 =0 in + the DAC_CR register). If EN1=1 or CEN1 =1 the write + operation is ignored. They can be set and cleared by + software to select the DAC Channel 1 mode: DAC + Channel 1 in normal Mode DAC Channel 1 in sample + &amp; hold mode + 0 + 3 + + + MODE2 + DAC Channel 2 mode These bits can be + written only when the DAC is disabled and not in the + calibration mode (when bit EN2=0 and bit CEN2 =0 in + the DAC_CR register). If EN2=1 or CEN2 =1 the write + operation is ignored. They can be set and cleared by + software to select the DAC Channel 2 mode: DAC + Channel 2 in normal Mode DAC Channel 2 in sample + &amp; hold mode + 16 + 3 + + + + + SHSR1 + SHSR1 + DAC Sample and Hold sample time register + 1 + 0x40 + 0x20 + read-write + 0x00000000 + + + TSAMPLE1 + DAC Channel 1 sample Time (only valid in + sample &amp; hold mode) These bits can be written + when the DAC channel1 is disabled or also during + normal operation. in the latter case, the write can + be done only when BWSTx of DAC_SR register is low, If + BWSTx=1, the write operation is + ignored. + 0 + 10 + + + + + SHSR2 + SHSR2 + DAC Sample and Hold sample time register + 2 + 0x44 + 0x20 + read-write + 0x00000000 + + + TSAMPLE2 + DAC Channel 2 sample Time (only valid in + sample &amp; hold mode) These bits can be written + when the DAC channel2 is disabled or also during + normal operation. in the latter case, the write can + be done only when BWSTx of DAC_SR register is low, if + BWSTx=1, the write operation is + ignored. + 0 + 10 + + + + + SHHR + SHHR + DAC Sample and Hold hold time + register + 0x48 + 0x20 + read-write + 0x00010001 + + + THOLD1 + DAC Channel 1 hold Time (only valid in + sample &amp; hold mode) Hold time= (THOLD[9:0]) x + T LSI + 0 + 10 + + + THOLD2 + DAC Channel 2 hold time (only valid in + sample &amp; hold mode). Hold time= (THOLD[9:0]) + x T LSI + 16 + 10 + + + + + SHRR + SHRR + DAC Sample and Hold refresh time + register + 0x4C + 0x20 + read-write + 0x00010001 + + + TREFRESH1 + DAC Channel 1 refresh Time (only valid + in sample &amp; hold mode) Refresh time= + (TREFRESH[7:0]) x T LSI + 0 + 8 + + + TREFRESH2 + DAC Channel 2 refresh Time (only valid + in sample &amp; hold mode) Refresh time= + (TREFRESH[7:0]) x T LSI + 16 + 8 + + + + + + + BDMA + BDMA + BDMA + 0x58025400 + + 0x0 + 0x400 + registers + + + BDMA_CH1 + BDMA channel 1 interrupt + 129 + + + BDMA_CH2 + BDMA channel 2 interrupt + 130 + + + BDMA_CH3 + BDMA channel 3 interrupt + 131 + + + BDMA_CH4 + BDMA channel 4 interrupt + 132 + + + BDMA_CH5 + BDMA channel 5 interrupt + 133 + + + BDMA_CH6 + BDMA channel 6 interrupt + 134 + + + BDMA_CH7 + BDMA channel 7 interrupt + 135 + + + BDMA_CH8 + BDMA channel 8 interrupt + 136 + + + + ISR + ISR + DMA interrupt status register + 0x0 + 0x20 + read-only + 0x00000000 + + + GIF1 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 0 + 1 + + + TCIF1 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 1 + 1 + + + HTIF1 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 2 + 1 + + + TEIF1 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 3 + 1 + + + GIF2 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 4 + 1 + + + TCIF2 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 5 + 1 + + + HTIF2 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 6 + 1 + + + TEIF2 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 7 + 1 + + + GIF3 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 8 + 1 + + + TCIF3 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 9 + 1 + + + HTIF3 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 10 + 1 + + + TEIF3 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 11 + 1 + + + GIF4 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 12 + 1 + + + TCIF4 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 13 + 1 + + + HTIF4 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 14 + 1 + + + TEIF4 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 15 + 1 + + + GIF5 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 16 + 1 + + + TCIF5 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 17 + 1 + + + HTIF5 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 18 + 1 + + + TEIF5 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 19 + 1 + + + GIF6 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 20 + 1 + + + TCIF6 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 21 + 1 + + + HTIF6 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 22 + 1 + + + TEIF6 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 23 + 1 + + + GIF7 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 24 + 1 + + + TCIF7 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 25 + 1 + + + HTIF7 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 26 + 1 + + + TEIF7 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 27 + 1 + + + GIF8 + Channel x global interrupt flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 28 + 1 + + + TCIF8 + Channel x transfer complete flag (x = + 1..8) This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 29 + 1 + + + HTIF8 + Channel x half transfer flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 30 + 1 + + + TEIF8 + Channel x transfer error flag (x = 1..8) + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCR register. + 31 + 1 + + + + + IFCR + IFCR + DMA interrupt flag clear + register + 0x4 + 0x20 + write-only + 0x00000000 + + + CGIF1 + Channel x global interrupt clear This + bit is set and cleared by software. + 0 + 1 + + + CTCIF1 + Channel x transfer complete clear This + bit is set and cleared by software. + 1 + 1 + + + CHTIF1 + Channel x half transfer clear This bit + is set and cleared by software. + 2 + 1 + + + CTEIF1 + Channel x transfer error clear This bit + is set and cleared by software. + 3 + 1 + + + CGIF2 + Channel x global interrupt clear This + bit is set and cleared by software. + 4 + 1 + + + CTCIF2 + Channel x transfer complete clear This + bit is set and cleared by software. + 5 + 1 + + + CHTIF2 + Channel x half transfer clear This bit + is set and cleared by software. + 6 + 1 + + + CTEIF2 + Channel x transfer error clear This bit + is set and cleared by software. + 7 + 1 + + + CGIF3 + Channel x global interrupt clear This + bit is set and cleared by software. + 8 + 1 + + + CTCIF3 + Channel x transfer complete clear This + bit is set and cleared by software. + 9 + 1 + + + CHTIF3 + Channel x half transfer clear This bit + is set and cleared by software. + 10 + 1 + + + CTEIF3 + Channel x transfer error clear This bit + is set and cleared by software. + 11 + 1 + + + CGIF4 + Channel x global interrupt clear This + bit is set and cleared by software. + 12 + 1 + + + CTCIF4 + Channel x transfer complete clear This + bit is set and cleared by software. + 13 + 1 + + + CHTIF4 + Channel x half transfer clear This bit + is set and cleared by software. + 14 + 1 + + + CTEIF4 + Channel x transfer error clear This bit + is set and cleared by software. + 15 + 1 + + + CGIF5 + Channel x global interrupt clear This + bit is set and cleared by software. + 16 + 1 + + + CTCIF5 + Channel x transfer complete clear This + bit is set and cleared by software. + 17 + 1 + + + CHTIF5 + Channel x half transfer clear This bit + is set and cleared by software. + 18 + 1 + + + CTEIF5 + Channel x transfer error clear This bit + is set and cleared by software. + 19 + 1 + + + CGIF6 + Channel x global interrupt clear This + bit is set and cleared by software. + 20 + 1 + + + CTCIF6 + Channel x transfer complete clear This + bit is set and cleared by software. + 21 + 1 + + + CHTIF6 + Channel x half transfer clear This bit + is set and cleared by software. + 22 + 1 + + + CTEIF6 + Channel x transfer error clear This bit + is set and cleared by software. + 23 + 1 + + + CGIF7 + Channel x global interrupt clear This + bit is set and cleared by software. + 24 + 1 + + + CTCIF7 + Channel x transfer complete clear This + bit is set and cleared by software. + 25 + 1 + + + CHTIF7 + Channel x half transfer clear This bit + is set and cleared by software. + 26 + 1 + + + CTEIF7 + Channel x transfer error clear This bit + is set and cleared by software. + 27 + 1 + + + CGIF8 + Channel x global interrupt clear This + bit is set and cleared by software. + 28 + 1 + + + CTCIF8 + Channel x transfer complete clear This + bit is set and cleared by software. + 29 + 1 + + + CHTIF8 + Channel x half transfer clear This bit + is set and cleared by software. + 30 + 1 + + + CTEIF8 + Channel x transfer error clear This bit + is set and cleared by software. + 31 + 1 + + + + + CCR1 + CCR1 + DMA channel x configuration + register + 0x8 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR1 + CNDTR1 + DMA channel x number of data + register + 0xC + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR1 + CPAR1 + This register must not be written when the + channel is enabled. + 0x10 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR1 + CMAR1 + This register must not be written when the + channel is enabled. + 0x14 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR2 + CCR2 + DMA channel x configuration + register + 0x1C + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR2 + CNDTR2 + DMA channel x number of data + register + 0x20 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR2 + CPAR2 + This register must not be written when the + channel is enabled. + 0x24 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR2 + CMAR2 + This register must not be written when the + channel is enabled. + 0x28 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR3 + CCR3 + DMA channel x configuration + register + 0x30 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR3 + CNDTR3 + DMA channel x number of data + register + 0x34 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR3 + CPAR3 + This register must not be written when the + channel is enabled. + 0x38 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR3 + CMAR3 + This register must not be written when the + channel is enabled. + 0x3C + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR4 + CCR4 + DMA channel x configuration + register + 0x44 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR4 + CNDTR4 + DMA channel x number of data + register + 0x48 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR4 + CPAR4 + This register must not be written when the + channel is enabled. + 0x4C + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR4 + CMAR4 + This register must not be written when the + channel is enabled. + 0x50 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR5 + CCR5 + DMA channel x configuration + register + 0x58 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR5 + CNDTR5 + DMA channel x number of data + register + 0x5C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR5 + CPAR5 + This register must not be written when the + channel is enabled. + 0x60 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR5 + CMAR5 + This register must not be written when the + channel is enabled. + 0x64 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR6 + CCR6 + DMA channel x configuration + register + 0x6C + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR6 + CNDTR6 + DMA channel x number of data + register + 0x70 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR6 + CPAR6 + This register must not be written when the + channel is enabled. + 0x74 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR6 + CMAR6 + This register must not be written when the + channel is enabled. + 0x78 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR7 + CCR7 + DMA channel x configuration + register + 0x80 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR7 + CNDTR7 + DMA channel x number of data + register + 0x84 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR7 + CPAR7 + This register must not be written when the + channel is enabled. + 0x88 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR7 + CMAR7 + This register must not be written when the + channel is enabled. + 0x8C + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CCR8 + CCR8 + DMA channel x configuration + register + 0x94 + 0x20 + read-write + 0x00000000 + + + EN + Channel enable This bit is set and + cleared by software. + 0 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 1 + 1 + + + HTIE + Half transfer interrupt enable This bit + is set and cleared by software. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 3 + 1 + + + DIR + Data transfer direction This bit is set + and cleared by software. + 4 + 1 + + + CIRC + Circular mode This bit is set and + cleared by software. + 5 + 1 + + + PINC + Peripheral increment mode This bit is + set and cleared by software. + 6 + 1 + + + MINC + Memory increment mode This bit is set + and cleared by software. + 7 + 1 + + + PSIZE + Peripheral size These bits are set and + cleared by software. + 8 + 2 + + + MSIZE + Memory size These bits are set and + cleared by software. + 10 + 2 + + + PL + Channel priority level These bits are + set and cleared by software. + 12 + 2 + + + MEM2MEM + Memory to memory mode This bit is set + and cleared by software. + 14 + 1 + + + + + CNDTR8 + CNDTR8 + DMA channel x number of data + register + 0x98 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data to transfer Number of + data to be transferred (0 up to 65535). This register + can only be written when the channel is disabled. + Once the channel is enabled, this register is + read-only, indicating the remaining bytes to be + transmitted. This register decrements after each DMA + transfer. Once the transfer is completed, this + register can either stay at zero or be reloaded + automatically by the value previously programmed if + the channel is configured in auto-reload mode. If + this register is zero, no transaction can be served + whether the channel is enabled or not. + 0 + 16 + + + + + CPAR8 + CPAR8 + This register must not be written when the + channel is enabled. + 0x9C + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address Base address of the + peripheral data register from/to which the data will + be read/written. When PSIZE is 01 (16-bit), the PA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When PSIZE is 10 (32-bit), PA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + CMAR8 + CMAR8 + This register must not be written when the + channel is enabled. + 0xA0 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Base address of the + memory area from/to which the data will be + read/written. When MSIZE is 01 (16-bit), the MA[0] + bit is ignored. Access is automatically aligned to a + half-word address. When MSIZE is 10 (32-bit), MA[1:0] + are ignored. Access is automatically aligned to a + word address. + 0 + 32 + + + + + + + DMA2D + DMA2D + DMA2D + 0x52001000 + + 0x0 + 0x400 + registers + + + DMA2D + DMA2D global interrupt + 90 + + + + CR + CR + DMA2D control register + 0x0 + 0x20 + read-write + 0x00000000 + + + START + Start This bit can be used to launch the + DMA2D according to the parameters loaded in the + various configuration registers + 0 + 1 + + + SUSP + Suspend This bit can be used to suspend + the current transfer. This bit is set and reset by + software. It is automatically reset by hardware when + the START bit is reset. + 1 + 1 + + + ABORT + Abort This bit can be used to abort the + current transfer. This bit is set by software and is + automatically reset by hardware when the START bit is + reset. + 2 + 1 + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 8 + 1 + + + TCIE + Transfer complete interrupt enable This + bit is set and cleared by software. + 9 + 1 + + + TWIE + Transfer watermark interrupt enable This + bit is set and cleared by software. + 10 + 1 + + + CAEIE + CLUT access error interrupt enable This + bit is set and cleared by software. + 11 + 1 + + + CTCIE + CLUT transfer complete interrupt enable + This bit is set and cleared by + software. + 12 + 1 + + + CEIE + Configuration Error Interrupt Enable + This bit is set and cleared by + software. + 13 + 1 + + + MODE + DMA2D mode This bit is set and cleared + by software. It cannot be modified while a transfer + is ongoing. + 16 + 2 + + + + + ISR + ISR + DMA2D Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + TEIF + Transfer error interrupt flag This bit + is set when an error occurs during a DMA transfer + (data transfer or automatic CLUT + loading). + 0 + 1 + + + TCIF + Transfer complete interrupt flag This + bit is set when a DMA2D transfer operation is + complete (data transfer only). + 1 + 1 + + + TWIF + Transfer watermark interrupt flag This + bit is set when the last pixel of the watermarked + line has been transferred. + 2 + 1 + + + CAEIF + CLUT access error interrupt flag This + bit is set when the CPU accesses the CLUT while the + CLUT is being automatically copied from a system + memory to the internal DMA2D. + 3 + 1 + + + CTCIF + CLUT transfer complete interrupt flag + This bit is set when the CLUT copy from a system + memory area to the internal DMA2D memory is + complete. + 4 + 1 + + + CEIF + Configuration error interrupt flag This + bit is set when the START bit of DMA2D_CR, + DMA2DFGPFCCR or DMA2D_BGPFCCR is set and a wrong + configuration has been programmed. + 5 + 1 + + + + + IFCR + IFCR + DMA2D interrupt flag clear + register + 0x8 + 0x20 + read-write + 0x00000000 + + + CTEIF + Clear Transfer error interrupt flag + Programming this bit to 1 clears the TEIF flag in the + DMA2D_ISR register + 0 + 1 + + + CTCIF + Clear transfer complete interrupt flag + Programming this bit to 1 clears the TCIF flag in the + DMA2D_ISR register + 1 + 1 + + + CTWIF + Clear transfer watermark interrupt flag + Programming this bit to 1 clears the TWIF flag in the + DMA2D_ISR register + 2 + 1 + + + CAECIF + Clear CLUT access error interrupt flag + Programming this bit to 1 clears the CAEIF flag in + the DMA2D_ISR register + 3 + 1 + + + CCTCIF + Clear CLUT transfer complete interrupt + flag Programming this bit to 1 clears the CTCIF flag + in the DMA2D_ISR register + 4 + 1 + + + CCEIF + Clear configuration error interrupt flag + Programming this bit to 1 clears the CEIF flag in the + DMA2D_ISR register + 5 + 1 + + + + + FGMAR + FGMAR + DMA2D foreground memory address + register + 0xC + 0x20 + read-write + 0x00000000 + + + MA + Memory address Address of the data used + for the foreground image. This register can only be + written when data transfers are disabled. Once the + data transfer has started, this register is + read-only. The address alignment must match the image + format selected e.g. a 32-bit per pixel format must + be 32-bit aligned, a 16-bit per pixel format must be + 16-bit aligned and a 4-bit per pixel format must be + 8-bit aligned. + 0 + 32 + + + + + FGOR + FGOR + DMA2D foreground offset + register + 0x10 + 0x20 + read-write + 0x00000000 + + + LO + Line offset Line offset used for the + foreground expressed in pixel. This value is used to + generate the address. It is added at the end of each + line to determine the starting address of the next + line. These bits can only be written when data + transfers are disabled. Once a data transfer has + started, they become read-only. If the image format + is 4-bit per pixel, the line offset must be + even. + 0 + 14 + + + + + BGMAR + BGMAR + DMA2D background memory address + register + 0x14 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Address of the data used + for the background image. This register can only be + written when data transfers are disabled. Once a data + transfer has started, this register is read-only. The + address alignment must match the image format + selected e.g. a 32-bit per pixel format must be + 32-bit aligned, a 16-bit per pixel format must be + 16-bit aligned and a 4-bit per pixel format must be + 8-bit aligned. + 0 + 32 + + + + + BGOR + BGOR + DMA2D background offset + register + 0x18 + 0x20 + read-write + 0x00000000 + + + LO + Line offset Line offset used for the + background image (expressed in pixel). This value is + used for the address generation. It is added at the + end of each line to determine the starting address of + the next line. These bits can only be written when + data transfers are disabled. Once data transfer has + started, they become read-only. If the image format + is 4-bit per pixel, the line offset must be + even. + 0 + 14 + + + + + FGPFCCR + FGPFCCR + DMA2D foreground PFC control + register + 0x1C + 0x20 + read-write + 0x00000000 + + + CM + Color mode These bits defines the color + format of the foreground image. They can only be + written when data transfers are disabled. Once the + transfer has started, they are read-only. others: + meaningless + 0 + 4 + + + CCM + CLUT color mode This bit defines the + color format of the CLUT. It can only be written when + the transfer is disabled. Once the CLUT transfer has + started, this bit is read-only. + 4 + 1 + + + START + Start This bit can be set to start the + automatic loading of the CLUT. It is automatically + reset: ** at the end of the transfer ** when the + transfer is aborted by the user application by + setting the ABORT bit in DMA2D_CR ** when a transfer + error occurs ** when the transfer has not started due + to a configuration error or another transfer + operation already ongoing (data transfer or automatic + background CLUT transfer). + 5 + 1 + + + CS + CLUT size These bits define the size of + the CLUT used for the foreground image. Once the CLUT + transfer has started, this field is read-only. The + number of CLUT entries is equal to CS[7:0] + + 1. + 8 + 8 + + + AM + Alpha mode These bits select the alpha + channel value to be used for the foreground image. + They can only be written data the transfer are + disabled. Once the transfer has started, they become + read-only. other configurations are + meaningless + 16 + 2 + + + CSS + Chroma Sub-Sampling These bits define + the chroma sub-sampling mode for YCbCr color mode. + Once the transfer has started, these bits are + read-only. others: meaningless + 18 + 2 + + + AI + Alpha Inverted This bit inverts the + alpha value. Once the transfer has started, this bit + is read-only. + 20 + 1 + + + RBS + Red Blue Swap This bit allows to swap + the R &amp; B to support BGR or ABGR color + formats. Once the transfer has started, this bit is + read-only. + 21 + 1 + + + ALPHA + Alpha value These bits define a fixed + alpha channel value which can replace the original + alpha value or be multiplied by the original alpha + value according to the alpha mode selected through + the AM[1:0] bits. These bits can only be written when + data transfers are disabled. Once a transfer has + started, they become read-only. + 24 + 8 + + + + + FGCOLR + FGCOLR + DMA2D foreground color + register + 0x20 + 0x20 + read-write + 0x00000000 + + + BLUE + Blue Value These bits defines the blue + value for the A4 or A8 mode of the foreground image. + They can only be written when data transfers are + disabled. Once the transfer has started, They are + read-only. + 0 + 8 + + + GREEN + Green Value These bits defines the green + value for the A4 or A8 mode of the foreground image. + They can only be written when data transfers are + disabled. Once the transfer has started, They are + read-only. + 8 + 8 + + + RED + Red Value These bits defines the red + value for the A4 or A8 mode of the foreground image. + They can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 16 + 8 + + + + + BGPFCCR + BGPFCCR + DMA2D background PFC control + register + 0x24 + 0x20 + read-write + 0x00000000 + + + CM + Color mode These bits define the color + format of the foreground image. These bits can only + be written when data transfers are disabled. Once the + transfer has started, they are read-only. others: + meaningless + 0 + 4 + + + CCM + CLUT Color mode These bits define the + color format of the CLUT. This register can only be + written when the transfer is disabled. Once the CLUT + transfer has started, this bit is + read-only. + 4 + 1 + + + START + Start This bit is set to start the + automatic loading of the CLUT. This bit is + automatically reset: ** at the end of the transfer ** + when the transfer is aborted by the user application + by setting the ABORT bit in the DMA2D_CR ** when a + transfer error occurs ** when the transfer has not + started due to a configuration error or another + transfer operation already on going (data transfer or + automatic BackGround CLUT transfer). + 5 + 1 + + + CS + CLUT size These bits define the size of + the CLUT used for the BG. Once the CLUT transfer has + started, this field is read-only. The number of CLUT + entries is equal to CS[7:0] + 1. + 8 + 8 + + + AM + Alpha mode These bits define which alpha + channel value to be used for the background image. + These bits can only be written when data transfers + are disabled. Once the transfer has started, they are + read-only. others: meaningless + 16 + 2 + + + AI + Alpha Inverted This bit inverts the + alpha value. Once the transfer has started, this bit + is read-only. + 20 + 1 + + + RBS + Red Blue Swap This bit allows to swap + the R &amp; B to support BGR or ABGR color + formats. Once the transfer has started, this bit is + read-only. + 21 + 1 + + + ALPHA + Alpha value These bits define a fixed + alpha channel value which can replace the original + alpha value or be multiplied with the original alpha + value according to the alpha mode selected with bits + AM[1: 0]. These bits can only be written when data + transfers are disabled. Once the transfer has + started, they are read-only. + 24 + 8 + + + + + BGCOLR + BGCOLR + DMA2D background color + register + 0x28 + 0x20 + read-write + 0x00000000 + + + BLUE + Blue Value These bits define the blue + value for the A4 or A8 mode of the background. These + bits can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 0 + 8 + + + GREEN + Green Value These bits define the green + value for the A4 or A8 mode of the background. These + bits can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 8 + 8 + + + RED + Red Value These bits define the red + value for the A4 or A8 mode of the background. These + bits can only be written when data transfers are + disabled. Once the transfer has started, they are + read-only. + 16 + 8 + + + + + FGCMAR + FGCMAR + DMA2D foreground CLUT memory address + register + 0x2C + 0x20 + read-write + 0x00000000 + + + MA + Memory Address Address of the data used + for the CLUT address dedicated to the foreground + image. This register can only be written when no + transfer is ongoing. Once the CLUT transfer has + started, this register is read-only. If the + foreground CLUT format is 32-bit, the address must be + 32-bit aligned. + 0 + 32 + + + + + BGCMAR + BGCMAR + DMA2D background CLUT memory address + register + 0x30 + 0x20 + read-write + 0x00000000 + + + MA + Memory address Address of the data used + for the CLUT address dedicated to the background + image. This register can only be written when no + transfer is on going. Once the CLUT transfer has + started, this register is read-only. If the + background CLUT format is 32-bit, the address must be + 32-bit aligned. + 0 + 32 + + + + + OPFCCR + OPFCCR + DMA2D output PFC control + register + 0x34 + 0x20 + read-write + 0x00000000 + + + CM + Color mode These bits define the color + format of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are read-only. others: + meaningless + 0 + 3 + + + AI + Alpha Inverted This bit inverts the + alpha value. Once the transfer has started, this bit + is read-only. + 20 + 1 + + + RBS + Red Blue Swap This bit allows to swap + the R &amp; B to support BGR or ABGR color + formats. Once the transfer has started, this bit is + read-only. + 21 + 1 + + + + + OCOLR + OCOLR + DMA2D output color register + 0x38 + 0x20 + read-write + 0x00000000 + + + BLUE + Blue Value These bits define the blue + value of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 0 + 8 + + + GREEN + Green Value These bits define the green + value of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 8 + 8 + + + RED + Red Value These bits define the red + value of the output image. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 16 + 8 + + + ALPHA + Alpha Channel Value These bits define + the alpha channel of the output color. These bits can + only be written when data transfers are disabled. + Once the transfer has started, they are + read-only. + 24 + 8 + + + + + OMAR + OMAR + DMA2D output memory address + register + 0x3C + 0x20 + read-write + 0x00000000 + + + MA + Memory Address Address of the data used + for the output FIFO. These bits can only be written + when data transfers are disabled. Once the transfer + has started, they are read-only. The address + alignment must match the image format selected e.g. a + 32-bit per pixel format must be 32-bit aligned and a + 16-bit per pixel format must be 16-bit + aligned. + 0 + 32 + + + + + OOR + OOR + DMA2D output offset register + 0x40 + 0x20 + read-write + 0x00000000 + + + LO + Line Offset Line offset used for the + output (expressed in pixels). This value is used for + the address generation. It is added at the end of + each line to determine the starting address of the + next line. These bits can only be written when data + transfers are disabled. Once the transfer has + started, they are read-only. + 0 + 14 + + + + + NLR + NLR + DMA2D number of line register + 0x44 + 0x20 + read-write + 0x00000000 + + + NL + Number of lines Number of lines of the + area to be transferred. These bits can only be + written when data transfers are disabled. Once the + transfer has started, they are + read-only. + 0 + 16 + + + PL + Pixel per lines Number of pixels per + lines of the area to be transferred. These bits can + only be written when data transfers are disabled. + Once the transfer has started, they are read-only. If + any of the input image format is 4-bit per pixel, + pixel per lines must be even. + 16 + 14 + + + + + LWR + LWR + DMA2D line watermark register + 0x48 + 0x20 + read-write + 0x00000000 + + + LW + Line watermark These bits allow to + configure the line watermark for interrupt + generation. An interrupt is raised when the last + pixel of the watermarked line has been transferred. + These bits can only be written when data transfers + are disabled. Once the transfer has started, they are + read-only. + 0 + 16 + + + + + AMTCR + AMTCR + DMA2D AXI master timer configuration + register + 0x4C + 0x20 + read-write + 0x00000000 + + + EN + Enable Enables the dead time + functionality. + 0 + 1 + + + DT + Dead Time Dead time value in the AXI + clock cycle inserted between two consecutive accesses + on the AXI master port. These bits represent the + minimum guaranteed number of cycles between two + consecutive AXI accesses. + 8 + 8 + + + + + + + DMAMUX2 + DMAMUX + DMAMUX + 0x58025800 + + 0x0 + 0x400 + registers + + + DMAMUX2_OVR + DMAMUX2 overrun interrupt + 128 + + + + C0CR + C0CR + DMAMux - DMA request line multiplexer + channel x control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C1CR + C1CR + DMAMux - DMA request line multiplexer + channel x control register + 0x4 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C2CR + C2CR + DMAMux - DMA request line multiplexer + channel x control register + 0x8 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C3CR + C3CR + DMAMux - DMA request line multiplexer + channel x control register + 0xC + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C4CR + C4CR + DMAMux - DMA request line multiplexer + channel x control register + 0x10 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C5CR + C5CR + DMAMux - DMA request line multiplexer + channel x control register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C6CR + C6CR + DMAMux - DMA request line multiplexer + channel x control register + 0x18 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C7CR + C7CR + DMAMux - DMA request line multiplexer + channel x control register + 0x1C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + RG0CR + RG0CR + DMAMux - DMA request generator channel x + control register + 0x100 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG1CR + RG1CR + DMAMux - DMA request generator channel x + control register + 0x104 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG2CR + RG2CR + DMAMux - DMA request generator channel x + control register + 0x108 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG3CR + RG3CR + DMAMux - DMA request generator channel x + control register + 0x10C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG4CR + RG4CR + DMAMux - DMA request generator channel x + control register + 0x110 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG5CR + RG5CR + DMAMux - DMA request generator channel x + control register + 0x114 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG6CR + RG6CR + DMAMux - DMA request generator channel x + control register + 0x118 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG7CR + RG7CR + DMAMux - DMA request generator channel x + control register + 0x11C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RGSR + RGSR + DMAMux - DMA request generator status + register + 0x140 + 0x20 + read-only + 0x00000000 + + + OF + Trigger event overrun flag The flag is + set when a trigger event occurs on DMA request + generator channel x, while the DMA request generator + counter value is lower than GNBREQ. The flag is + cleared by writing 1 to the corresponding COFx bit in + DMAMUX_RGCFR register. + 0 + 8 + + + + + RGCFR + RGCFR + DMAMux - DMA request generator clear flag + register + 0x144 + 0x20 + write-only + 0x00000000 + + + COF + Clear trigger event overrun flag Upon + setting, this bit clears the corresponding overrun + flag OFx in the DMAMUX_RGCSR register. + 0 + 8 + + + + + CSR + CSR + DMAMUX request line multiplexer interrupt + channel status register + 0x80 + 0x20 + read-only + 0x00000000 + + + SOF + Synchronization overrun event + flag + 0 + 16 + + + + + CFR + CFR + DMAMUX request line multiplexer interrupt + clear flag register + 0x84 + 0x20 + write-only + 0x00000000 + + + CSOF + Clear synchronization overrun event + flag + 0 + 16 + + + + + + + FMC + FMC + FMC + 0x52004000 + + 0x0 + 0x400 + registers + + + FMC + FMC global interrupt + 48 + + + + BCR1 + BCR1 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x0 + 0x20 + read-write + 0x000030DB + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR1 + BTR1 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0x4 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD = 126. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BCR2 + BCR2 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x8 + 0x20 + read-write + 0x000030D2 + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR2 + BTR2 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0xC + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD = 1. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BCR3 + BCR3 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x10 + 0x20 + read-write + 0x000030D2 + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR3 + BTR3 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0x14 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD =1. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BCR4 + BCR4 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories. + 0x18 + 0x20 + read-write + 0x000030D2 + + + MBKEN + Memory bank enable bit This bit enables + the memory bank. After reset Bank1 is enabled, all + others are disabled. Accessing a disabled bank causes + an ERROR on AXI bus. + 0 + 1 + + + MUXEN + Address/data multiplexing enable bit + When this bit is set, the address and data values are + multiplexed on the data bus, valid only with NOR and + PSRAM memories: + 1 + 1 + + + MTYP + Memory type These bits define the type + of external memory attached to the corresponding + memory bank: + 2 + 2 + + + MWID + Memory data bus width Defines the + external memory device width, valid for all type of + memories. + 4 + 2 + + + FACCEN + Flash access enable This bit enables NOR + Flash memory access operations. + 6 + 1 + + + BURSTEN + Burst enable bit This bit + enables/disables synchronous accesses during read + operations. It is valid only for synchronous memories + operating in Burst mode: + 8 + 1 + + + WAITPOL + Wait signal polarity bit This bit + defines the polarity of the wait signal from memory + used for either in synchronous or asynchronous + mode: + 9 + 1 + + + WAITCFG + Wait timing configuration The NWAIT + signal indicates whether the data from the memory are + valid or if a wait state must be inserted when + accessing the memory in synchronous mode. This + configuration bit determines if NWAIT is asserted by + the memory one clock cycle before the wait state or + during the wait state: + 11 + 1 + + + WREN + Write enable bit This bit indicates + whether write operations are enabled/disabled in the + bank by the FMC: + 12 + 1 + + + WAITEN + Wait enable bit This bit + enables/disables wait-state insertion via the NWAIT + signal when accessing the memory in synchronous + mode. + 13 + 1 + + + EXTMOD + Extended mode enable. This bit enables + the FMC to program the write timings for asynchronous + accesses inside the FMC_BWTR register, thus resulting + in different timings for read and write operations. + Note: When the extended mode is disabled, the FMC can + operate in Mode1 or Mode2 as follows: ** Mode 1 is + the default mode when the SRAM/PSRAM memory type is + selected (MTYP =0x0 or 0x01) ** Mode 2 is the default + mode when the NOR memory type is selected (MTYP = + 0x10). + 14 + 1 + + + ASYNCWAIT + Wait signal during asynchronous + transfers This bit enables/disables the FMC to use + the wait signal even during an asynchronous + protocol. + 15 + 1 + + + CPSIZE + CRAM Page Size These are used for + Cellular RAM 1.5 which does not allow burst access to + cross the address boundaries between pages. When + these bits are configured, the FMC controller splits + automatically the burst access when the memory page + size is reached (refer to memory datasheet for page + size). Other configuration: reserved. + 16 + 3 + + + CBURSTRW + Write burst enable For PSRAM (CRAM) + operating in Burst mode, the bit enables synchronous + accesses during write operations. The enable bit for + synchronous read accesses is the BURSTEN bit in the + FMC_BCRx register. + 19 + 1 + + + CCLKEN + Continuous Clock Enable This bit enables + the FMC_CLK clock output to external memory devices. + Note: The CCLKEN bit of the FMC_BCR2..4 registers is + dont care. It is only enabled through the FMC_BCR1 + register. Bank 1 must be configured in synchronous + mode to generate the FMC_CLK continuous clock. If + CCLKEN bit is set, the FMC_CLK clock ratio is + specified by CLKDIV value in the FMC_BTR1 register. + CLKDIV in FMC_BWTR1 is dont care. If the synchronous + mode is used and CCLKEN bit is set, the synchronous + memories connected to other banks than Bank 1 are + clocked by the same clock (the CLKDIV value in the + FMC_BTR2..4 and FMC_BWTR2..4 registers for other + banks has no effect.) + 20 + 1 + + + WFDIS + Write FIFO Disable This bit disables the + Write FIFO used by the FMC controller. Note: The + WFDIS bit of the FMC_BCR2..4 registers is dont care. + It is only enabled through the FMC_BCR1 + register. + 21 + 1 + + + BMAP + FMC bank mapping These bits allows + different to remap SDRAM bank2 or swap the FMC + NOR/PSRAM and SDRAM banks.Refer to Table 10 for Note: + The BMAP bits of the FMC_BCR2..4 registers are dont + care. It is only enabled through the FMC_BCR1 + register. + 24 + 2 + + + FMCEN + FMC controller Enable This bit + enables/disables the FMC controller. Note: The FMCEN + bit of the FMC_BCR2..4 registers is dont care. It is + only enabled through the FMC_BCR1 + register. + 31 + 1 + + + + + BTR4 + BTR4 + This register contains the control + information of each memory bank, used for SRAMs, PSRAM + and NOR Flash memories.If the EXTMOD bit is set in the + FMC_BCRx register, then this register is partitioned for + write and read access, that is, 2 registers are + available: one to configure read accesses (this register) + and one to configure write accesses (FMC_BWTRx + registers). + 0x1C + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration These bits + are written by software to define the duration of the + address setup phase (refer to Figure81 to Figure93), + used in SRAMs, ROMs and asynchronous NOR Flash: For + each access mode address setup phase duration, please + refer to the respective figure (refer to Figure81 to + Figure93). Note: In synchronous accesses, this value + is dont care. In Muxed mode or Mode D, the minimum + value for ADDSET is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in mode D or multiplexed accesses: For each + access mode address-hold phase duration, please refer + to the respective figure (Figure81 to Figure93). + Note: In synchronous accesses, this value is not + used, the address hold phase is always 1 memory clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous accesses: For each memory type and + access mode data-phase duration, please refer to the + respective figure (Figure81 to Figure93). Example: + Mode1, write access, DATAST=1: Data-phase duration= + DATAST+1 = 2 KCK_FMC clock cycles. Note: In + synchronous accesses, this value is dont + care. + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write-to-read or read-to write transaction. The + programmed bus turnaround delay is inserted between + an asynchronous read (in muxed or mode D) or write + transaction and any other asynchronous /synchronous + read/write from/to a static bank. If a read operation + is performed, the bank can be the same or a different + one, whereas it must be different in case of write + operation to the bank, except in muxed mode or mode + D. In some cases, whatever the programmed BUSTRUN + values, the bus turnaround delay is fixed as follows: + The bus turnaround delay is not inserted between two + consecutive asynchronous write transfers to the same + static memory bank except in muxed mode and mode D. + There is a bus turnaround delay of 1 FMC clock cycle + between: Two consecutive asynchronous read transfers + to the same static memory bank except for modes muxed + and D. An asynchronous read to an asynchronous or + synchronous write to any static bank or dynamic bank + except in modes muxed and D mode. There is a bus + turnaround delay of 2 FMC clock cycle between: Two + consecutive synchronous write operations (in Burst or + Single mode) to the same bank. A synchronous write + (burst or single) access and an asynchronous write or + read transfer to or from static memory bank (the bank + can be the same or a different one in case of a read + operation. Two consecutive synchronous read + operations (in Burst or Single mode) followed by any + synchronous/asynchronous read or write from/to + another static memory bank. There is a bus turnaround + delay of 3 FMC clock cycle between: Two consecutive + synchronous write operations (in Burst or Single + mode) to different static banks. A synchronous write + access (in Burst or Single mode) and a synchronous + read from the same or a different bank. The bus + turnaround delay allows to match the minimum time + between consecutive transactions (tEHEL from NEx high + to NEx low) and the maximum time required by the + memory to free the data bus after a read access + (tEHQZ): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin and (BUSTRUN + 2)KCK_FMC period &#8805; + tEHQZmax if EXTMOD = 0 (BUSTRUN + 2)KCK_FMC period + &#8805; max (tEHELmin, tEHQZmax) if EXTMOD =1. + ... + 16 + 4 + + + CLKDIV + Clock divide ratio (for FMC_CLK signal) + These bits define the period of FMC_CLK clock output + signal, expressed in number of KCK_FMC cycles: In + asynchronous NOR Flash, SRAM or PSRAM accesses, this + value is dont care. Note: Refer to Section20.6.5: + Synchronous transactions for FMC_CLK divider ratio + formula) + 20 + 4 + + + DATLAT + Data latency for synchronous memory For + synchronous access with read write burst mode enabled + these bits define the number of memory clock + cycles + 24 + 4 + + + ACCMOD + Access mode These bits specify the + asynchronous access modes as shown in the timing + diagrams. They are taken into account only when the + EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + PCR + PCR + NAND Flash control registers + 0x80 + 0x20 + read-write + 0x00000018 + + + PWAITEN + Wait feature enable bit. This bit + enables the Wait feature for the NAND Flash memory + bank: + 1 + 1 + + + PBKEN + NAND Flash memory bank enable bit. This + bit enables the memory bank. Accessing a disabled + memory bank causes an ERROR on AXI bus + 2 + 1 + + + PWID + Data bus width. These bits define the + external memory device width. + 4 + 2 + + + ECCEN + ECC computation logic enable + bit + 6 + 1 + + + TCLR + CLE to RE delay. These bits set time + from CLE low to RE low in number of KCK_FMC clock + cycles. The time is give by the following formula: + t_clr = (TCLR + SET + 2) TKCK_FMC where TKCK_FMC is + the KCK_FMC clock period Note: Set is MEMSET or + ATTSET according to the addressed + space. + 9 + 4 + + + TAR + ALE to RE delay. These bits set time + from ALE low to RE low in number of KCK_FMC clock + cycles. Time is: t_ar = (TAR + SET + 2) TKCK_FMC + where TKCK_FMC is the FMC clock period Note: Set is + MEMSET or ATTSET according to the addressed + space. + 13 + 4 + + + ECCPS + ECC page size. These bits define the + page size for the extended ECC: + 17 + 3 + + + + + SR + SR + This register contains information about the + FIFO status and interrupt. The FMC features a FIFO that + is used when writing to memories to transfer up to 16 + words of data.This is used to quickly write to the FIFO + and free the AXI bus for transactions to peripherals + other than the FMC, while the FMC is draining its FIFO + into the memory. One of these register bits indicates the + status of the FIFO, for ECC purposes.The ECC is + calculated while the data are written to the memory. To + read the correct ECC, the software must consequently wait + until the FIFO is empty. + 0x84 + 0x20 + 0x00000040 + + + IRS + Interrupt rising edge status The flag is + set by hardware and reset by software. Note: If this + bit is written by software to 1 it will be + set. + 0 + 1 + read-write + + + ILS + Interrupt high-level status The flag is + set by hardware and reset by software. + 1 + 1 + read-write + + + IFS + Interrupt falling edge status The flag + is set by hardware and reset by software. Note: If + this bit is written by software to 1 it will be + set. + 2 + 1 + read-write + + + IREN + Interrupt rising edge detection enable + bit + 3 + 1 + read-write + + + ILEN + Interrupt high-level detection enable + bit + 4 + 1 + read-write + + + IFEN + Interrupt falling edge detection enable + bit + 5 + 1 + read-write + + + FEMPT + FIFO empty. Read-only bit that provides + the status of the FIFO + 6 + 1 + read-only + + + + + PMEM + PMEM + The FMC_PMEM read/write register contains + the timing information for NAND Flash memory bank. This + information is used to access either the common memory + space of the NAND Flash for command, address write access + and data read/write access. + 0x88 + 0x20 + read-write + 0xFCFCFCFC + + + MEMSET + Common memory x setup time These bits + define the number of KCK_FMC (+1) clock cycles to set + up the address before the command assertion (NWE, + NOE), for NAND Flash read or write access to common + memory space: + 0 + 8 + + + MEMWAIT + Common memory wait time These bits + define the minimum number of KCK_FMC (+1) clock + cycles to assert the command (NWE, NOE), for NAND + Flash read or write access to common memory space. + The duration of command assertion is extended if the + wait signal (NWAIT) is active (low) at the end of the + programmed value of KCK_FMC: + 8 + 8 + + + MEMHOLD + Common memory hold time These bits + define the number of KCK_FMC clock cycles for write + accesses and KCK_FMC+1 clock cycles for read accesses + during which the address is held (and data for write + accesses) after the command is de-asserted (NWE, + NOE), for NAND Flash read or write access to common + memory space: + 16 + 8 + + + MEMHIZ + Common memory x data bus Hi-Z time These + bits define the number of KCK_FMC clock cycles during + which the data bus is kept Hi-Z after the start of a + NAND Flash write access to common memory space. This + is only valid for write transactions: + 24 + 8 + + + + + PATT + PATT + The FMC_PATT read/write register contains + the timing information for NAND Flash memory bank. It is + used for 8-bit accesses to the attribute memory space of + the NAND Flash for the last address write access if the + timing must differ from that of previous accesses (for + Ready/Busy management, refer to Section20.8.5: NAND Flash + prewait feature). + 0x8C + 0x20 + read-write + 0xFCFCFCFC + + + ATTSET + Attribute memory setup time These bits + define the number of KCK_FMC (+1) clock cycles to set + up address before the command assertion (NWE, NOE), + for NAND Flash read or write access to attribute + memory space: + 0 + 8 + + + ATTWAIT + Attribute memory wait time These bits + define the minimum number of x KCK_FMC (+1) clock + cycles to assert the command (NWE, NOE), for NAND + Flash read or write access to attribute memory space. + The duration for command assertion is extended if the + wait signal (NWAIT) is active (low) at the end of the + programmed value of KCK_FMC: + 8 + 8 + + + ATTHOLD + Attribute memory hold time These bits + define the number of KCK_FMC clock cycles during + which the address is held (and data for write access) + after the command de-assertion (NWE, NOE), for NAND + Flash read or write access to attribute memory + space: + 16 + 8 + + + ATTHIZ + Attribute memory data bus Hi-Z time + These bits define the number of KCK_FMC clock cycles + during which the data bus is kept in Hi-Z after the + start of a NAND Flash write access to attribute + memory space on socket. Only valid for writ + transaction: + 24 + 8 + + + + + ECCR + ECCR + This register contain the current error + correction code value computed by the ECC computation + modules of the FMC NAND controller. When the CPU + reads/writes the data from a NAND Flash memory page at + the correct address (refer to Section20.8.6: Computation + of the error correction code (ECC) in NAND Flash memory), + the data read/written from/to the NAND Flash memory are + processed automatically by the ECC computation module. + When X bytes have been read (according to the ECCPS field + in the FMC_PCR registers), the CPU must read the computed + ECC value from the FMC_ECC registers. It then verifies if + these computed parity data are the same as the parity + value recorded in the spare area, to determine whether a + page is valid, and, to correct it otherwise. The FMC_ECCR + register should be cleared after being read by setting + the ECCEN bit to 0. To compute a new data block, the + ECCEN bit must be set to 1. + 0x94 + 0x20 + read-only + 0x00000000 + + + ECC + ECC result This field contains the value + computed by the ECC computation logic. Table167 + describes the contents of these bit + fields. + 0 + 32 + + + + + BWTR1 + BWTR1 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x104 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BWTR2 + BWTR2 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x10C + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BWTR3 + BWTR3 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x114 + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + BWTR4 + BWTR4 + This register contains the control + information of each memory bank. It is used for SRAMs, + PSRAMs and NOR Flash memories. When the EXTMOD bit is set + in the FMC_BCRx register, then this register is active + for write access. + 0x11C + 0x20 + read-write + 0x0FFFFFFF + + + ADDSET + Address setup phase duration. These bits + are written by software to define the duration of the + address setup phase in KCK_FMC cycles (refer to + Figure81 to Figure93), used in asynchronous accesses: + ... Note: In synchronous accesses, this value is not + used, the address setup phase is always 1 Flash clock + period duration. In muxed mode, the minimum ADDSET + value is 1. + 0 + 4 + + + ADDHLD + Address-hold phase duration. These bits + are written by software to define the duration of the + address hold phase (refer to Figure81 to Figure93), + used in asynchronous multiplexed accesses: ... Note: + In synchronous NOR Flash accesses, this value is not + used, the address hold phase is always 1 Flash clock + period duration. + 4 + 4 + + + DATAST + Data-phase duration. These bits are + written by software to define the duration of the + data phase (refer to Figure81 to Figure93), used in + asynchronous SRAM, PSRAM and NOR Flash memory + accesses: + 8 + 8 + + + BUSTURN + Bus turnaround phase duration These bits + are written by software to add a delay at the end of + a write transaction to match the minimum time between + consecutive transactions (tEHEL from ENx high to ENx + low): (BUSTRUN + 1) KCK_FMC period &#8805; + tEHELmin. The programmed bus turnaround delay is + inserted between a an asynchronous write transfer and + any other asynchronous /synchronous read or write + transfer to or from a static bank. If a read + operation is performed, the bank can be the same or a + different one, whereas it must be different in case + of write operation to the bank, except in muxed mode + or mode D. In some cases, whatever the programmed + BUSTRUN values, the bus turnaround delay is fixed as + follows: The bus turnaround delay is not inserted + between two consecutive asynchronous write transfers + to the same static memory bank except for muxed mode + and mode D. There is a bus turnaround delay of 2 FMC + clock cycle between: Two consecutive synchronous + write operations (in Burst or Single mode) to the + same bank A synchronous write transfer ((in Burst or + Single mode) and an asynchronous write or read + transfer to or from static memory bank. There is a + bus turnaround delay of 3 FMC clock cycle between: + Two consecutive synchronous write operations (in + Burst or Single mode) to different static banks. A + synchronous write transfer (in Burst or Single mode) + and a synchronous read from the same or a different + bank. ... + 16 + 4 + + + ACCMOD + Access mode. These bits specify the + asynchronous access modes as shown in the next timing + diagrams.These bits are taken into account only when + the EXTMOD bit in the FMC_BCRx register is + 1. + 28 + 2 + + + + + SDCR1 + SDCR1 + This register contains the control + parameters for each SDRAM memory bank + 0x140 + 0x20 + read-write + 0x000002D0 + + + NC + Number of column address bits These bits + define the number of bits of a column + address. + 0 + 2 + + + NR + Number of row address bits These bits + define the number of bits of a row + address. + 2 + 2 + + + MWID + Memory data bus width. These bits define + the memory device width. + 4 + 2 + + + NB + Number of internal banks This bit sets + the number of internal banks. + 6 + 1 + + + CAS + CAS Latency This bits sets the SDRAM CAS + latency in number of memory clock + cycles + 7 + 2 + + + WP + Write protection This bit enables write + mode access to the SDRAM bank. + 9 + 1 + + + SDCLK + SDRAM clock configuration These bits + define the SDRAM clock period for both SDRAM banks + and allow disabling the clock before changing the + frequency. In this case the SDRAM must be + re-initialized. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 10 + 2 + + + RBURST + Burst read This bit enables burst read + mode. The SDRAM controller anticipates the next read + commands during the CAS latency and stores data in + the Read FIFO. Note: The corresponding bit in the + FMC_SDCR2 register is read only. + 12 + 1 + + + RPIPE + Read pipe These bits define the delay, + in KCK_FMC clock cycles, for reading data after CAS + latency. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 13 + 2 + + + + + SDCR2 + SDCR2 + This register contains the control + parameters for each SDRAM memory bank + 0x144 + 0x20 + read-write + 0x000002D0 + + + NC + Number of column address bits These bits + define the number of bits of a column + address. + 0 + 2 + + + NR + Number of row address bits These bits + define the number of bits of a row + address. + 2 + 2 + + + MWID + Memory data bus width. These bits define + the memory device width. + 4 + 2 + + + NB + Number of internal banks This bit sets + the number of internal banks. + 6 + 1 + + + CAS + CAS Latency This bits sets the SDRAM CAS + latency in number of memory clock + cycles + 7 + 2 + + + WP + Write protection This bit enables write + mode access to the SDRAM bank. + 9 + 1 + + + SDCLK + SDRAM clock configuration These bits + define the SDRAM clock period for both SDRAM banks + and allow disabling the clock before changing the + frequency. In this case the SDRAM must be + re-initialized. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 10 + 2 + + + RBURST + Burst read This bit enables burst read + mode. The SDRAM controller anticipates the next read + commands during the CAS latency and stores data in + the Read FIFO. Note: The corresponding bit in the + FMC_SDCR2 register is read only. + 12 + 1 + + + RPIPE + Read pipe These bits define the delay, + in KCK_FMC clock cycles, for reading data after CAS + latency. Note: The corresponding bits in the + FMC_SDCR2 register is read only. + 13 + 2 + + + + + SDTR1 + SDTR1 + This register contains the timing parameters + of each SDRAM bank + 0x148 + 0x20 + read-write + 0x0FFFFFFF + + + TMRD + Load Mode Register to Active These bits + define the delay between a Load Mode Register command + and an Active or Refresh command in number of memory + clock cycles. .... + 0 + 4 + + + TXSR + Exit Self-refresh delay These bits + define the delay from releasing the Self-refresh + command to issuing the Activate command in number of + memory clock cycles. .... Note: If two SDRAM devices + are used, the FMC_SDTR1 and FMC_SDTR2 must be + programmed with the same TXSR timing corresponding to + the slowest SDRAM device. + 4 + 4 + + + TRAS + Self refresh time These bits define the + minimum Self-refresh period in number of memory clock + cycles. .... + 8 + 4 + + + TRC + Row cycle delay These bits define the + delay between the Refresh command and the Activate + command, as well as the delay between two consecutive + Refresh commands. It is expressed in number of memory + clock cycles. The TRC timing is only configured in + the FMC_SDTR1 register. If two SDRAM devices are + used, the TRC must be programmed with the timings of + the slowest device. .... Note: TRC must match the TRC + and TRFC (Auto Refresh period) timings defined in the + SDRAM device datasheet. Note: The corresponding bits + in the FMC_SDTR2 register are dont + care. + 12 + 4 + + + TWR + Recovery delay These bits define the + delay between a Write and a Precharge command in + number of memory clock cycles. .... Note: TWR must be + programmed to match the write recovery time (tWR) + defined in the SDRAM datasheet, and to guarantee + that: TWR &#8805; TRAS - TRCD and TWR + &#8805;TRC - TRCD - TRP Example: TRAS= 4 cycles, + TRCD= 2 cycles. So, TWR &gt;= 2 cycles. TWR must + be programmed to 0x1. If two SDRAM devices are used, + the FMC_SDTR1 and FMC_SDTR2 must be programmed with + the same TWR timing corresponding to the slowest + SDRAM device. + 16 + 4 + + + TRP + Row precharge delay These bits define + the delay between a Precharge command and another + command in number of memory clock cycles. The TRP + timing is only configured in the FMC_SDTR1 register. + If two SDRAM devices are used, the TRP must be + programmed with the timing of the slowest device. + .... Note: The corresponding bits in the FMC_SDTR2 + register are dont care. + 20 + 4 + + + TRCD + Row to column delay These bits define + the delay between the Activate command and a + Read/Write command in number of memory clock cycles. + .... + 24 + 4 + + + + + SDTR2 + SDTR2 + This register contains the timing parameters + of each SDRAM bank + 0x14C + 0x20 + read-write + 0x0FFFFFFF + + + TMRD + Load Mode Register to Active These bits + define the delay between a Load Mode Register command + and an Active or Refresh command in number of memory + clock cycles. .... + 0 + 4 + + + TXSR + Exit Self-refresh delay These bits + define the delay from releasing the Self-refresh + command to issuing the Activate command in number of + memory clock cycles. .... Note: If two SDRAM devices + are used, the FMC_SDTR1 and FMC_SDTR2 must be + programmed with the same TXSR timing corresponding to + the slowest SDRAM device. + 4 + 4 + + + TRAS + Self refresh time These bits define the + minimum Self-refresh period in number of memory clock + cycles. .... + 8 + 4 + + + TRC + Row cycle delay These bits define the + delay between the Refresh command and the Activate + command, as well as the delay between two consecutive + Refresh commands. It is expressed in number of memory + clock cycles. The TRC timing is only configured in + the FMC_SDTR1 register. If two SDRAM devices are + used, the TRC must be programmed with the timings of + the slowest device. .... Note: TRC must match the TRC + and TRFC (Auto Refresh period) timings defined in the + SDRAM device datasheet. Note: The corresponding bits + in the FMC_SDTR2 register are dont + care. + 12 + 4 + + + TWR + Recovery delay These bits define the + delay between a Write and a Precharge command in + number of memory clock cycles. .... Note: TWR must be + programmed to match the write recovery time (tWR) + defined in the SDRAM datasheet, and to guarantee + that: TWR &#8805; TRAS - TRCD and TWR + &#8805;TRC - TRCD - TRP Example: TRAS= 4 cycles, + TRCD= 2 cycles. So, TWR &gt;= 2 cycles. TWR must + be programmed to 0x1. If two SDRAM devices are used, + the FMC_SDTR1 and FMC_SDTR2 must be programmed with + the same TWR timing corresponding to the slowest + SDRAM device. + 16 + 4 + + + TRP + Row precharge delay These bits define + the delay between a Precharge command and another + command in number of memory clock cycles. The TRP + timing is only configured in the FMC_SDTR1 register. + If two SDRAM devices are used, the TRP must be + programmed with the timing of the slowest device. + .... Note: The corresponding bits in the FMC_SDTR2 + register are dont care. + 20 + 4 + + + TRCD + Row to column delay These bits define + the delay between the Activate command and a + Read/Write command in number of memory clock cycles. + .... + 24 + 4 + + + + + SDCMR + SDCMR + This register contains the command issued + when the SDRAM device is accessed. This register is used + to initialize the SDRAM device, and to activate the + Self-refresh and the Power-down modes. As soon as the + MODE field is written, the command will be issued only to + one or to both SDRAM banks according to CTB1 and CTB2 + command bits. This register is the same for both SDRAM + banks. + 0x150 + 0x20 + read-write + 0x00000000 + + + MODE + Command mode These bits define the + command issued to the SDRAM device. Note: When a + command is issued, at least one Command Target Bank + bit ( CTB1 or CTB2) must be set otherwise the command + will be ignored. Note: If two SDRAM banks are used, + the Auto-refresh and PALL command must be issued + simultaneously to the two devices with CTB1 and CTB2 + bits set otherwise the command will be ignored. Note: + If only one SDRAM bank is used and a command is + issued with its associated CTB bit set, the other CTB + bit of the unused bank must be kept to + 0. + 0 + 3 + + + CTB2 + Command Target Bank 2 This bit indicates + whether the command will be issued to SDRAM Bank 2 or + not. + 3 + 1 + + + CTB1 + Command Target Bank 1 This bit indicates + whether the command will be issued to SDRAM Bank 1 or + not. + 4 + 1 + + + NRFS + Number of Auto-refresh These bits define + the number of consecutive Auto-refresh commands + issued when MODE = 011. .... + 5 + 4 + + + MRD + Mode Register definition This 14-bit + field defines the SDRAM Mode Register content. The + Mode Register is programmed using the Load Mode + Register command. The MRD[13:0] bits are also used to + program the extended mode register for mobile + SDRAM. + 9 + 14 + + + + + SDRTR + SDRTR + This register sets the refresh rate in + number of SDCLK clock cycles between the refresh cycles + by configuring the Refresh Timer Count value.Examplewhere + 64 ms is the SDRAM refresh period.The refresh rate must + be increased by 20 SDRAM clock cycles (as in the above + example) to obtain a safe margin if an internal refresh + request occurs when a read request has been accepted. It + corresponds to a COUNT value of 0000111000000 (448). This + 13-bit field is loaded into a timer which is decremented + using the SDRAM clock. This timer generates a refresh + pulse when zero is reached. The COUNT value must be set + at least to 41 SDRAM clock cycles.As soon as the + FMC_SDRTR register is programmed, the timer starts + counting. If the value programmed in the register is 0, + no refresh is carried out. This register must not be + reprogrammed after the initialization procedure to avoid + modifying the refresh rate.Each time a refresh pulse is + generated, this 13-bit COUNT field is reloaded into the + counter.If a memory access is in progress, the + Auto-refresh request is delayed. However, if the memory + access and Auto-refresh requests are generated + simultaneously, the Auto-refresh takes precedence. If the + memory access occurs during a refresh operation, the + request is buffered to be processed when the refresh is + complete.This register is common to SDRAM bank 1 and bank + 2. + 0x154 + 0x20 + 0x00000000 + + + CRE + Clear Refresh error flag This bit is + used to clear the Refresh Error Flag (RE) in the + Status Register. + 0 + 1 + write-only + + + COUNT + Refresh Timer Count This 13-bit field + defines the refresh rate of the SDRAM device. It is + expressed in number of memory clock cycles. It must + be set at least to 41 SDRAM clock cycles (0x29). + Refresh rate = (COUNT + 1) x SDRAM frequency clock + COUNT = (SDRAM refresh period / Number of rows) - + 20 + 1 + 13 + read-write + + + REIE + RES Interrupt Enable + 14 + 1 + read-write + + + + + SDSR + SDSR + SDRAM Status register + 0x158 + 0x20 + read-only + 0x00000000 + + + RE + Refresh error flag An interrupt is + generated if REIE = 1 and RE = 1 + 0 + 1 + + + MODES1 + Status Mode for Bank 1 These bits define + the Status Mode of SDRAM Bank 1. + 1 + 2 + + + MODES2 + Status Mode for Bank 2 These bits define + the Status Mode of SDRAM Bank 2. + 3 + 2 + + + + + + + CEC + CEC + CEC + 0x40006C00 + + 0x0 + 0x400 + registers + + + CEC + HDMI-CEC global interrupt + 94 + + + + CR + CR + CEC control register + 0x0 + 0x20 + read-write + 0x00000000 + + + CECEN + CEC Enable The CECEN bit is set and + cleared by software. CECEN=1 starts message reception + and enables the TXSOM control. CECEN=0 disables the + CEC peripheral, clears all bits of CEC_CR register + and aborts any on-going reception or + transmission. + 0 + 1 + + + TXSOM + Tx Start Of Message TXSOM is set by + software to command transmission of the first byte of + a CEC message. If the CEC message consists of only + one byte, TXEOM must be set before of TXSOM. + Start-Bit is effectively started on the CEC line + after SFT is counted. If TXSOM is set while a message + reception is ongoing, transmission will start after + the end of reception. TXSOM is cleared by hardware + after the last byte of the message is sent with a + positive acknowledge (TXEND=1), in case of + transmission underrun (TXUDR=1), negative acknowledge + (TXACKE=1), and transmission error (TXERR=1). It is + also cleared by CECEN=0. It is not cleared and + transmission is automatically retried in case of + arbitration lost (ARBLST=1). TXSOM can be also used + as a status bit informing application whether any + transmission request is pending or under execution. + The application can abort a transmission request at + any time by clearing the CECEN bit. Note: TXSOM must + be set when CECEN=1 TXSOM must be set when + transmission data is available into TXDR HEADERs + first four bits containing own peripheral address are + taken from TXDR[7:4], not from CEC_CFGR.OAR which is + used only for reception + 1 + 1 + + + TXEOM + Tx End Of Message The TXEOM bit is set + by software to command transmission of the last byte + of a CEC message. TXEOM is cleared by hardware at the + same time and under the same conditions as for TXSOM. + Note: TXEOM must be set when CECEN=1 TXEOM must be + set before writing transmission data to TXDR If TXEOM + is set when TXSOM=0, transmitted message will consist + of 1 byte (HEADER) only (PING message) + 2 + 1 + + + + + CFGR + CFGR + This register is used to configure the + HDMI-CEC controller. It is mandatory to write CEC_CFGR + only when CECEN=0. + 0x4 + 0x20 + read-write + 0x00000000 + + + SFT + Signal Free Time SFT bits are set by + software. In the SFT=0x0 configuration the number of + nominal data bit periods waited before transmission + is ruled by hardware according to the transmission + history. In all the other configurations the SFT + number is determined by software. * 0x0 ** 2.5 + Data-Bit periods if CEC is the last bus initiator + with unsuccessful transmission (ARBLST=1, TXERR=1, + TXUDR=1 or TXACKE= 1) ** 4 Data-Bit periods if CEC is + the new bus initiator ** 6 Data-Bit periods if CEC is + the last bus initiator with successful transmission + (TXEOM=1) * 0x1: 0.5 nominal data bit periods * 0x2: + 1.5 nominal data bit periods * 0x3: 2.5 nominal data + bit periods * 0x4: 3.5 nominal data bit periods * + 0x5: 4.5 nominal data bit periods * 0x6: 5.5 nominal + data bit periods * 0x7: 6.5 nominal data bit + periods + 0 + 3 + + + RXTOL + Rx-Tolerance The RXTOL bit is set and + cleared by software. ** Start-Bit, +/- 200 s rise, + +/- 200 s fall. ** Data-Bit: +/- 200 s rise. +/- 350 + s fall. ** Start-Bit: +/- 400 s rise, +/- 400 s fall + ** Data-Bit: +/-300 s rise, +/- 500 s + fall + 3 + 1 + + + BRESTP + Rx-Stop on Bit Rising Error The BRESTP + bit is set and cleared by software. + 4 + 1 + + + BREGEN + Generate Error-Bit on Bit Rising Error + The BREGEN bit is set and cleared by software. Note: + If BRDNOGEN=0, an Error-bit is generated upon BRE + detection with BRESTP=1 in broadcast even if + BREGEN=0 + 5 + 1 + + + LBPEGEN + Generate Error-Bit on Long Bit Period + Error The LBPEGEN bit is set and cleared by software. + Note: If BRDNOGEN=0, an Error-bit is generated upon + LBPE detection in broadcast even if + LBPEGEN=0 + 6 + 1 + + + BRDNOGEN + Avoid Error-Bit Generation in Broadcast + The BRDNOGEN bit is set and cleared by + software. + 7 + 1 + + + SFTOPT + SFT Option Bit The SFTOPT bit is set and + cleared by software. + 8 + 1 + + + OAR + Own addresses configuration The OAR bits + are set by software to select which destination + logical addresses has to be considered in receive + mode. Each bit, when set, enables the CEC logical + address identified by the given bit position. At the + end of HEADER reception, the received destination + address is compared with the enabled addresses. In + case of matching address, the incoming message is + acknowledged and received. In case of non-matching + address, the incoming message is received only in + listen mode (LSTN=1), but without acknowledge sent. + Broadcast messages are always received. Example: OAR + = 0b000 0000 0010 0001 means that CEC acknowledges + addresses 0x0 and 0x5. Consequently, each message + directed to one of these addresses is + received. + 16 + 15 + + + LSTN + Listen mode LSTN bit is set and cleared + by software. + 31 + 1 + + + + + TXDR + TXDR + CEC Tx data register + 0x8 + 0x20 + write-only + 0x00000000 + + + TXD + Tx Data register. TXD is a write-only + register containing the data byte to be transmitted. + Note: TXD must be written when + TXSTART=1 + 0 + 8 + + + + + RXDR + RXDR + CEC Rx Data Register + 0xC + 0x20 + read-only + 0x00000000 + + + RXD + Rx Data register. RXD is read-only and + contains the last data byte which has been received + from the CEC line. + 0 + 8 + + + + + ISR + ISR + CEC Interrupt and Status + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + RXBR + Rx-Byte Received The RXBR bit is set by + hardware to inform application that a new byte has + been received from the CEC line and stored into the + RXD buffer. RXBR is cleared by software write at + 1. + 0 + 1 + + + RXEND + End Of Reception RXEND is set by + hardware to inform application that the last byte of + a CEC message is received from the CEC line and + stored into the RXD buffer. RXEND is set at the same + time of RXBR. RXEND is cleared by software write at + 1. + 1 + 1 + + + RXOVR + Rx-Overrun RXOVR is set by hardware if + RXBR is not yet cleared at the time a new byte is + received on the CEC line and stored into RXD. RXOVR + assertion stops message reception so that no + acknowledge is sent. In case of broadcast, a negative + acknowledge is sent. RXOVR is cleared by software + write at 1. + 2 + 1 + + + BRE + Rx-Bit Rising Error BRE is set by + hardware in case a Data-Bit waveform is detected with + Bit Rising Error. BRE is set either at the time the + misplaced rising edge occurs, or at the end of the + maximum BRE tolerance allowed by RXTOL, in case + rising edge is still longing. BRE stops message + reception if BRESTP=1. BRE generates an Error-Bit on + the CEC line if BREGEN=1. BRE is cleared by software + write at 1. + 3 + 1 + + + SBPE + Rx-Short Bit Period Error SBPE is set by + hardware in case a Data-Bit waveform is detected with + Short Bit Period Error. SBPE is set at the time the + anticipated falling edge occurs. SBPE generates an + Error-Bit on the CEC line. SBPE is cleared by + software write at 1. + 4 + 1 + + + LBPE + Rx-Long Bit Period Error LBPE is set by + hardware in case a Data-Bit waveform is detected with + Long Bit Period Error. LBPE is set at the end of the + maximum bit-extension tolerance allowed by RXTOL, in + case falling edge is still longing. LBPE always stops + reception of the CEC message. LBPE generates an + Error-Bit on the CEC line if LBPEGEN=1. In case of + broadcast, Error-Bit is generated even in case of + LBPEGEN=0. LBPE is cleared by software write at + 1. + 5 + 1 + + + RXACKE + Rx-Missing Acknowledge In receive mode, + RXACKE is set by hardware to inform application that + no acknowledge was seen on the CEC line. RXACKE + applies only for broadcast messages and in listen + mode also for not directly addressed messages + (destination address not enabled in OAR). RXACKE + aborts message reception. RXACKE is cleared by + software write at 1. + 6 + 1 + + + ARBLST + Arbitration Lost ARBLST is set by + hardware to inform application that CEC device is + switching to reception due to arbitration lost event + following the TXSOM command. ARBLST can be due either + to a contending CEC device starting earlier or + starting at the same time but with higher HEADER + priority. After ARBLST assertion TXSOM bit keeps + pending for next transmission attempt. ARBLST is + cleared by software write at 1. + 7 + 1 + + + TXBR + Tx-Byte Request TXBR is set by hardware + to inform application that the next transmission data + has to be written to TXDR. TXBR is set when the 4th + bit of currently transmitted byte is sent. + Application must write the next byte to TXDR within 6 + nominal data-bit periods before transmission underrun + error occurs (TXUDR). TXBR is cleared by software + write at 1. + 8 + 1 + + + TXEND + End of Transmission TXEND is set by + hardware to inform application that the last byte of + the CEC message has been successfully transmitted. + TXEND clears the TXSOM and TXEOM control bits. TXEND + is cleared by software write at 1. + 9 + 1 + + + TXUDR + Tx-Buffer Underrun In transmission mode, + TXUDR is set by hardware if application was not in + time to load TXDR before of next byte transmission. + TXUDR aborts message transmission and clears TXSOM + and TXEOM control bits. TXUDR is cleared by software + write at 1 + 10 + 1 + + + TXERR + Tx-Error In transmission mode, TXERR is + set by hardware if the CEC initiator detects low + impedance on the CEC line while it is released. TXERR + aborts message transmission and clears TXSOM and + TXEOM controls. TXERR is cleared by software write at + 1. + 11 + 1 + + + TXACKE + Tx-Missing Acknowledge Error In + transmission mode, TXACKE is set by hardware to + inform application that no acknowledge was received. + In case of broadcast transmission, TXACKE informs + application that a negative acknowledge was received. + TXACKE aborts message transmission and clears TXSOM + and TXEOM controls. TXACKE is cleared by software + write at 1. + 12 + 1 + + + + + IER + IER + CEC interrupt enable register + 0x14 + 0x20 + read-write + 0x00000000 + + + RXBRIE + Rx-Byte Received Interrupt Enable The + RXBRIE bit is set and cleared by + software. + 0 + 1 + + + RXENDIE + End Of Reception Interrupt Enable The + RXENDIE bit is set and cleared by + software. + 1 + 1 + + + RXOVRIE + Rx-Buffer Overrun Interrupt Enable The + RXOVRIE bit is set and cleared by + software. + 2 + 1 + + + BREIE + Bit Rising Error Interrupt Enable The + BREIE bit is set and cleared by + software. + 3 + 1 + + + SBPEIE + Short Bit Period Error Interrupt Enable + The SBPEIE bit is set and cleared by + software. + 4 + 1 + + + LBPEIE + Long Bit Period Error Interrupt Enable + The LBPEIE bit is set and cleared by + software. + 5 + 1 + + + RXACKIE + Rx-Missing Acknowledge Error Interrupt + Enable The RXACKIE bit is set and cleared by + software. + 6 + 1 + + + ARBLSTIE + Arbitration Lost Interrupt Enable The + ARBLSTIE bit is set and cleared by + software. + 7 + 1 + + + TXBRIE + Tx-Byte Request Interrupt Enable The + TXBRIE bit is set and cleared by + software. + 8 + 1 + + + TXENDIE + Tx-End Of Message Interrupt Enable The + TXENDIE bit is set and cleared by + software. + 9 + 1 + + + TXUDRIE + Tx-Underrun Interrupt Enable The TXUDRIE + bit is set and cleared by software. + 10 + 1 + + + TXERRIE + Tx-Error Interrupt Enable The TXERRIE + bit is set and cleared by software. + 11 + 1 + + + TXACKIE + Tx-Missing Acknowledge Error Interrupt + Enable The TXACKEIE bit is set and cleared by + software. + 12 + 1 + + + + + + + HSEM + HSEM + HSEM + 0x58026400 + + 0x0 + 0x400 + registers + + + HSEM0 + HSEM global interrupt 1 + 125 + + + + HSEM_R0 + HSEM_R0 + HSEM register HSEM_R0 HSEM_R31 + 0x0 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R1 + HSEM_R1 + HSEM register HSEM_R0 HSEM_R31 + 0x4 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R2 + HSEM_R2 + HSEM register HSEM_R0 HSEM_R31 + 0x8 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R3 + HSEM_R3 + HSEM register HSEM_R0 HSEM_R31 + 0xC + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R4 + HSEM_R4 + HSEM register HSEM_R0 HSEM_R31 + 0x10 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R5 + HSEM_R5 + HSEM register HSEM_R0 HSEM_R31 + 0x14 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R6 + HSEM_R6 + HSEM register HSEM_R0 HSEM_R31 + 0x18 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R7 + HSEM_R7 + HSEM register HSEM_R0 HSEM_R31 + 0x1C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R8 + HSEM_R8 + HSEM register HSEM_R0 HSEM_R31 + 0x20 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R9 + HSEM_R9 + HSEM register HSEM_R0 HSEM_R31 + 0x24 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R10 + HSEM_R10 + HSEM register HSEM_R0 HSEM_R31 + 0x28 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R11 + HSEM_R11 + HSEM register HSEM_R0 HSEM_R31 + 0x2C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R12 + HSEM_R12 + HSEM register HSEM_R0 HSEM_R31 + 0x30 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R13 + HSEM_R13 + HSEM register HSEM_R0 HSEM_R31 + 0x34 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R14 + HSEM_R14 + HSEM register HSEM_R0 HSEM_R31 + 0x38 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R15 + HSEM_R15 + HSEM register HSEM_R0 HSEM_R31 + 0x3C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R16 + HSEM_R16 + HSEM register HSEM_R0 HSEM_R31 + 0x40 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R17 + HSEM_R17 + HSEM register HSEM_R0 HSEM_R31 + 0x44 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R18 + HSEM_R18 + HSEM register HSEM_R0 HSEM_R31 + 0x48 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R19 + HSEM_R19 + HSEM register HSEM_R0 HSEM_R31 + 0x4C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R20 + HSEM_R20 + HSEM register HSEM_R0 HSEM_R31 + 0x50 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R21 + HSEM_R21 + HSEM register HSEM_R0 HSEM_R31 + 0x54 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R22 + HSEM_R22 + HSEM register HSEM_R0 HSEM_R31 + 0x58 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R23 + HSEM_R23 + HSEM register HSEM_R0 HSEM_R31 + 0x5C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R24 + HSEM_R24 + HSEM register HSEM_R0 HSEM_R31 + 0x60 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R25 + HSEM_R25 + HSEM register HSEM_R0 HSEM_R31 + 0x64 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R26 + HSEM_R26 + HSEM register HSEM_R0 HSEM_R31 + 0x68 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R27 + HSEM_R27 + HSEM register HSEM_R0 HSEM_R31 + 0x6C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R28 + HSEM_R28 + HSEM register HSEM_R0 HSEM_R31 + 0x70 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R29 + HSEM_R29 + HSEM register HSEM_R0 HSEM_R31 + 0x74 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R30 + HSEM_R30 + HSEM register HSEM_R0 HSEM_R31 + 0x78 + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_R31 + HSEM_R31 + HSEM register HSEM_R0 HSEM_R31 + 0x7C + 0x20 + read-write + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR0 + HSEM_RLR0 + HSEM Read lock register + 0x80 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR1 + HSEM_RLR1 + HSEM Read lock register + 0x84 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR2 + HSEM_RLR2 + HSEM Read lock register + 0x88 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR3 + HSEM_RLR3 + HSEM Read lock register + 0x8C + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR4 + HSEM_RLR4 + HSEM Read lock register + 0x90 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR5 + HSEM_RLR5 + HSEM Read lock register + 0x94 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR6 + HSEM_RLR6 + HSEM Read lock register + 0x98 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR7 + HSEM_RLR7 + HSEM Read lock register + 0x9C + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR8 + HSEM_RLR8 + HSEM Read lock register + 0xA0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR9 + HSEM_RLR9 + HSEM Read lock register + 0xA4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR10 + HSEM_RLR10 + HSEM Read lock register + 0xA8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR11 + HSEM_RLR11 + HSEM Read lock register + 0xAC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR12 + HSEM_RLR12 + HSEM Read lock register + 0xB0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR13 + HSEM_RLR13 + HSEM Read lock register + 0xB4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR14 + HSEM_RLR14 + HSEM Read lock register + 0xB8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR15 + HSEM_RLR15 + HSEM Read lock register + 0xBC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR16 + HSEM_RLR16 + HSEM Read lock register + 0xC0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR17 + HSEM_RLR17 + HSEM Read lock register + 0xC4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR18 + HSEM_RLR18 + HSEM Read lock register + 0xC8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR19 + HSEM_RLR19 + HSEM Read lock register + 0xCC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR20 + HSEM_RLR20 + HSEM Read lock register + 0xD0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR21 + HSEM_RLR21 + HSEM Read lock register + 0xD4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR22 + HSEM_RLR22 + HSEM Read lock register + 0xD8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR23 + HSEM_RLR23 + HSEM Read lock register + 0xDC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR24 + HSEM_RLR24 + HSEM Read lock register + 0xE0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR25 + HSEM_RLR25 + HSEM Read lock register + 0xE4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR26 + HSEM_RLR26 + HSEM Read lock register + 0xE8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR27 + HSEM_RLR27 + HSEM Read lock register + 0xEC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR28 + HSEM_RLR28 + HSEM Read lock register + 0xF0 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR29 + HSEM_RLR29 + HSEM Read lock register + 0xF4 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR30 + HSEM_RLR30 + HSEM Read lock register + 0xF8 + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_RLR31 + HSEM_RLR31 + HSEM Read lock register + 0xFC + 0x20 + read-only + 0x00000000 + + + PROCID + Semaphore ProcessID + 0 + 8 + + + MASTERID + Semaphore MasterID + 8 + 8 + + + LOCK + Lock indication + 31 + 1 + + + + + HSEM_IER + HSEM_IER + HSEM Interrupt enable register + 0x100 + 0x20 + read-write + 0x00000000 + + + ISEM0 + Interrupt semaphore n enable + bit + 0 + 1 + + + ISEM1 + Interrupt semaphore n enable + bit + 1 + 1 + + + ISEM2 + Interrupt semaphore n enable + bit + 2 + 1 + + + ISEM3 + Interrupt semaphore n enable + bit + 3 + 1 + + + ISEM4 + Interrupt semaphore n enable + bit + 4 + 1 + + + ISEM5 + Interrupt semaphore n enable + bit + 5 + 1 + + + ISEM6 + Interrupt semaphore n enable + bit + 6 + 1 + + + ISEM7 + Interrupt semaphore n enable + bit + 7 + 1 + + + ISEM8 + Interrupt semaphore n enable + bit + 8 + 1 + + + ISEM9 + Interrupt semaphore n enable + bit + 9 + 1 + + + ISEM10 + Interrupt semaphore n enable + bit + 10 + 1 + + + ISEM11 + Interrupt semaphore n enable + bit + 11 + 1 + + + ISEM12 + Interrupt semaphore n enable + bit + 12 + 1 + + + ISEM13 + Interrupt semaphore n enable + bit + 13 + 1 + + + ISEM14 + Interrupt semaphore n enable + bit + 14 + 1 + + + ISEM15 + Interrupt semaphore n enable + bit + 15 + 1 + + + ISEM16 + Interrupt semaphore n enable + bit + 16 + 1 + + + ISEM17 + Interrupt semaphore n enable + bit + 17 + 1 + + + ISEM18 + Interrupt semaphore n enable + bit + 18 + 1 + + + ISEM19 + Interrupt semaphore n enable + bit + 19 + 1 + + + ISEM20 + Interrupt semaphore n enable + bit + 20 + 1 + + + ISEM21 + Interrupt semaphore n enable + bit + 21 + 1 + + + ISEM22 + Interrupt semaphore n enable + bit + 22 + 1 + + + ISEM23 + Interrupt semaphore n enable + bit + 23 + 1 + + + ISEM24 + Interrupt semaphore n enable + bit + 24 + 1 + + + ISEM25 + Interrupt semaphore n enable + bit + 25 + 1 + + + ISEM26 + Interrupt semaphore n enable + bit + 26 + 1 + + + ISEM27 + Interrupt semaphore n enable + bit + 27 + 1 + + + ISEM28 + Interrupt semaphore n enable + bit + 28 + 1 + + + ISEM29 + Interrupt semaphore n enable + bit + 29 + 1 + + + ISEM30 + Interrupt semaphore n enable + bit + 30 + 1 + + + ISEM31 + Interrupt(N) semaphore n enable + bit. + 31 + 1 + + + + + HSEM_ICR + HSEM_ICR + HSEM Interrupt clear register + 0x104 + 0x20 + read-only + 0x00000000 + + + ISEM0 + Interrupt(N) semaphore n clear + bit + 0 + 1 + + + ISEM1 + Interrupt(N) semaphore n clear + bit + 1 + 1 + + + ISEM2 + Interrupt(N) semaphore n clear + bit + 2 + 1 + + + ISEM3 + Interrupt(N) semaphore n clear + bit + 3 + 1 + + + ISEM4 + Interrupt(N) semaphore n clear + bit + 4 + 1 + + + ISEM5 + Interrupt(N) semaphore n clear + bit + 5 + 1 + + + ISEM6 + Interrupt(N) semaphore n clear + bit + 6 + 1 + + + ISEM7 + Interrupt(N) semaphore n clear + bit + 7 + 1 + + + ISEM8 + Interrupt(N) semaphore n clear + bit + 8 + 1 + + + ISEM9 + Interrupt(N) semaphore n clear + bit + 9 + 1 + + + ISEM10 + Interrupt(N) semaphore n clear + bit + 10 + 1 + + + ISEM11 + Interrupt(N) semaphore n clear + bit + 11 + 1 + + + ISEM12 + Interrupt(N) semaphore n clear + bit + 12 + 1 + + + ISEM13 + Interrupt(N) semaphore n clear + bit + 13 + 1 + + + ISEM14 + Interrupt(N) semaphore n clear + bit + 14 + 1 + + + ISEM15 + Interrupt(N) semaphore n clear + bit + 15 + 1 + + + ISEM16 + Interrupt(N) semaphore n clear + bit + 16 + 1 + + + ISEM17 + Interrupt(N) semaphore n clear + bit + 17 + 1 + + + ISEM18 + Interrupt(N) semaphore n clear + bit + 18 + 1 + + + ISEM19 + Interrupt(N) semaphore n clear + bit + 19 + 1 + + + ISEM20 + Interrupt(N) semaphore n clear + bit + 20 + 1 + + + ISEM21 + Interrupt(N) semaphore n clear + bit + 21 + 1 + + + ISEM22 + Interrupt(N) semaphore n clear + bit + 22 + 1 + + + ISEM23 + Interrupt(N) semaphore n clear + bit + 23 + 1 + + + ISEM24 + Interrupt(N) semaphore n clear + bit + 24 + 1 + + + ISEM25 + Interrupt(N) semaphore n clear + bit + 25 + 1 + + + ISEM26 + Interrupt(N) semaphore n clear + bit + 26 + 1 + + + ISEM27 + Interrupt(N) semaphore n clear + bit + 27 + 1 + + + ISEM28 + Interrupt(N) semaphore n clear + bit + 28 + 1 + + + ISEM29 + Interrupt(N) semaphore n clear + bit + 29 + 1 + + + ISEM30 + Interrupt(N) semaphore n clear + bit + 30 + 1 + + + ISEM31 + Interrupt(N) semaphore n clear + bit + 31 + 1 + + + + + HSEM_ISR + HSEM_ISR + HSEM Interrupt status register + 0x108 + 0x20 + read-only + 0x00000000 + + + ISEM0 + Interrupt(N) semaphore n status bit + before enable (mask) + 0 + 1 + + + ISEM1 + Interrupt(N) semaphore n status bit + before enable (mask) + 1 + 1 + + + ISEM2 + Interrupt(N) semaphore n status bit + before enable (mask) + 2 + 1 + + + ISEM3 + Interrupt(N) semaphore n status bit + before enable (mask) + 3 + 1 + + + ISEM4 + Interrupt(N) semaphore n status bit + before enable (mask) + 4 + 1 + + + ISEM5 + Interrupt(N) semaphore n status bit + before enable (mask) + 5 + 1 + + + ISEM6 + Interrupt(N) semaphore n status bit + before enable (mask) + 6 + 1 + + + ISEM7 + Interrupt(N) semaphore n status bit + before enable (mask) + 7 + 1 + + + ISEM8 + Interrupt(N) semaphore n status bit + before enable (mask) + 8 + 1 + + + ISEM9 + Interrupt(N) semaphore n status bit + before enable (mask) + 9 + 1 + + + ISEM10 + Interrupt(N) semaphore n status bit + before enable (mask) + 10 + 1 + + + ISEM11 + Interrupt(N) semaphore n status bit + before enable (mask) + 11 + 1 + + + ISEM12 + Interrupt(N) semaphore n status bit + before enable (mask) + 12 + 1 + + + ISEM13 + Interrupt(N) semaphore n status bit + before enable (mask) + 13 + 1 + + + ISEM14 + Interrupt(N) semaphore n status bit + before enable (mask) + 14 + 1 + + + ISEM15 + Interrupt(N) semaphore n status bit + before enable (mask) + 15 + 1 + + + ISEM16 + Interrupt(N) semaphore n status bit + before enable (mask) + 16 + 1 + + + ISEM17 + Interrupt(N) semaphore n status bit + before enable (mask) + 17 + 1 + + + ISEM18 + Interrupt(N) semaphore n status bit + before enable (mask) + 18 + 1 + + + ISEM19 + Interrupt(N) semaphore n status bit + before enable (mask) + 19 + 1 + + + ISEM20 + Interrupt(N) semaphore n status bit + before enable (mask) + 20 + 1 + + + ISEM21 + Interrupt(N) semaphore n status bit + before enable (mask) + 21 + 1 + + + ISEM22 + Interrupt(N) semaphore n status bit + before enable (mask) + 22 + 1 + + + ISEM23 + Interrupt(N) semaphore n status bit + before enable (mask) + 23 + 1 + + + ISEM24 + Interrupt(N) semaphore n status bit + before enable (mask) + 24 + 1 + + + ISEM25 + Interrupt(N) semaphore n status bit + before enable (mask) + 25 + 1 + + + ISEM26 + Interrupt(N) semaphore n status bit + before enable (mask) + 26 + 1 + + + ISEM27 + Interrupt(N) semaphore n status bit + before enable (mask) + 27 + 1 + + + ISEM28 + Interrupt(N) semaphore n status bit + before enable (mask) + 28 + 1 + + + ISEM29 + Interrupt(N) semaphore n status bit + before enable (mask) + 29 + 1 + + + ISEM30 + Interrupt(N) semaphore n status bit + before enable (mask) + 30 + 1 + + + ISEM31 + Interrupt(N) semaphore n status bit + before enable (mask) + 31 + 1 + + + + + HSEM_MISR + HSEM_MISR + HSEM Masked interrupt status + register + 0x10C + 0x20 + read-only + 0x00000000 + + + ISEM0 + masked interrupt(N) semaphore n status + bit after enable (mask) + 0 + 1 + + + ISEM1 + masked interrupt(N) semaphore n status + bit after enable (mask) + 1 + 1 + + + ISEM2 + masked interrupt(N) semaphore n status + bit after enable (mask) + 2 + 1 + + + ISEM3 + masked interrupt(N) semaphore n status + bit after enable (mask) + 3 + 1 + + + ISEM4 + masked interrupt(N) semaphore n status + bit after enable (mask) + 4 + 1 + + + ISEM5 + masked interrupt(N) semaphore n status + bit after enable (mask) + 5 + 1 + + + ISEM6 + masked interrupt(N) semaphore n status + bit after enable (mask) + 6 + 1 + + + ISEM7 + masked interrupt(N) semaphore n status + bit after enable (mask) + 7 + 1 + + + ISEM8 + masked interrupt(N) semaphore n status + bit after enable (mask) + 8 + 1 + + + ISEM9 + masked interrupt(N) semaphore n status + bit after enable (mask) + 9 + 1 + + + ISEM10 + masked interrupt(N) semaphore n status + bit after enable (mask) + 10 + 1 + + + ISEM11 + masked interrupt(N) semaphore n status + bit after enable (mask) + 11 + 1 + + + ISEM12 + masked interrupt(N) semaphore n status + bit after enable (mask) + 12 + 1 + + + ISEM13 + masked interrupt(N) semaphore n status + bit after enable (mask) + 13 + 1 + + + ISEM14 + masked interrupt(N) semaphore n status + bit after enable (mask) + 14 + 1 + + + ISEM15 + masked interrupt(N) semaphore n status + bit after enable (mask) + 15 + 1 + + + ISEM16 + masked interrupt(N) semaphore n status + bit after enable (mask) + 16 + 1 + + + ISEM17 + masked interrupt(N) semaphore n status + bit after enable (mask) + 17 + 1 + + + ISEM18 + masked interrupt(N) semaphore n status + bit after enable (mask) + 18 + 1 + + + ISEM19 + masked interrupt(N) semaphore n status + bit after enable (mask) + 19 + 1 + + + ISEM20 + masked interrupt(N) semaphore n status + bit after enable (mask) + 20 + 1 + + + ISEM21 + masked interrupt(N) semaphore n status + bit after enable (mask) + 21 + 1 + + + ISEM22 + masked interrupt(N) semaphore n status + bit after enable (mask) + 22 + 1 + + + ISEM23 + masked interrupt(N) semaphore n status + bit after enable (mask) + 23 + 1 + + + ISEM24 + masked interrupt(N) semaphore n status + bit after enable (mask) + 24 + 1 + + + ISEM25 + masked interrupt(N) semaphore n status + bit after enable (mask) + 25 + 1 + + + ISEM26 + masked interrupt(N) semaphore n status + bit after enable (mask) + 26 + 1 + + + ISEM27 + masked interrupt(N) semaphore n status + bit after enable (mask) + 27 + 1 + + + ISEM28 + masked interrupt(N) semaphore n status + bit after enable (mask) + 28 + 1 + + + ISEM29 + masked interrupt(N) semaphore n status + bit after enable (mask) + 29 + 1 + + + ISEM30 + masked interrupt(N) semaphore n status + bit after enable (mask) + 30 + 1 + + + ISEM31 + masked interrupt(N) semaphore n status + bit after enable (mask) + 31 + 1 + + + + + HSEM_CR + HSEM_CR + HSEM Clear register + 0x140 + 0x20 + read-write + 0x00000000 + + + MASTERID + MasterID of semaphores to be + cleared + 8 + 8 + + + KEY + Semaphore clear Key + 16 + 16 + + + + + HSEM_KEYR + HSEM_KEYR + HSEM Interrupt clear register + 0x144 + 0x20 + read-write + 0x00000000 + + + KEY + Semaphore Clear Key + 16 + 16 + + + + + + + I2C1 + I2C + I2C + 0x40005400 + + 0x0 + 0x400 + registers + + + I2C1_EV + I2C1 event interrupt + 31 + + + I2C1_ER + I2C1 error interrupt + 32 + + + + CR1 + CR1 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x0 + 0x20 + read-write + 0x00000000 + + + PE + Peripheral enable Note: When PE=0, the + I2C SCL and SDA lines are released. Internal state + machines and status bits are put back to their reset + value. When cleared, PE must be kept low for at least + 3 APB clock cycles. + 0 + 1 + + + TXIE + TX Interrupt enable + 1 + 1 + + + RXIE + RX Interrupt enable + 2 + 1 + + + ADDRIE + Address match Interrupt enable (slave + only) + 3 + 1 + + + NACKIE + Not acknowledge received Interrupt + enable + 4 + 1 + + + STOPIE + STOP detection Interrupt + enable + 5 + 1 + + + TCIE + Transfer Complete interrupt enable Note: + Any of these events will generate an interrupt: + Transfer Complete (TC) Transfer Complete Reload + (TCR) + 6 + 1 + + + ERRIE + Error interrupts enable Note: Any of + these errors generate an interrupt: Arbitration Loss + (ARLO) Bus Error detection (BERR) Overrun/Underrun + (OVR) Timeout detection (TIMEOUT) PEC error detection + (PECERR) Alert pin event detection + (ALERT) + 7 + 1 + + + DNF + Digital noise filter These bits are used + to configure the digital noise filter on SDA and SCL + input. The digital filter will filter spikes with a + length of up to DNF[3:0] * tI2CCLK ... Note: If the + analog filter is also enabled, the digital filter is + added to the analog filter. This filter can only be + programmed when the I2C is disabled (PE = + 0). + 8 + 4 + + + ANFOFF + Analog noise filter OFF Note: This bit + can only be programmed when the I2C is disabled (PE = + 0). + 12 + 1 + + + TXDMAEN + DMA transmission requests + enable + 14 + 1 + + + RXDMAEN + DMA reception requests + enable + 15 + 1 + + + SBC + Slave byte control This bit is used to + enable hardware byte control in slave + mode. + 16 + 1 + + + NOSTRETCH + Clock stretching disable This bit is + used to disable clock stretching in slave mode. It + must be kept cleared in master mode. Note: This bit + can only be programmed when the I2C is disabled (PE = + 0). + 17 + 1 + + + WUPEN + Wakeup from Stop mode enable Note: If + the Wakeup from Stop mode feature is not supported, + this bit is reserved and forced by hardware to 0. + Please refer to Section25.3: I2C implementation. + Note: WUPEN can be set only when DNF = + 0000 + 18 + 1 + + + GCEN + General call enable + 19 + 1 + + + SMBHEN + SMBus Host address enable Note: If the + SMBus feature is not supported, this bit is reserved + and forced by hardware to 0. Please refer to + Section25.3: I2C implementation. + 20 + 1 + + + SMBDEN + SMBus Device Default address enable + Note: If the SMBus feature is not supported, this bit + is reserved and forced by hardware to 0. Please refer + to Section25.3: I2C implementation. + 21 + 1 + + + ALERTEN + SMBus alert enable Device mode + (SMBHEN=0): Host mode (SMBHEN=1): Note: When + ALERTEN=0, the SMBA pin can be used as a standard + GPIO. If the SMBus feature is not supported, this bit + is reserved and forced by hardware to 0. Please refer + to Section25.3: I2C implementation. + 22 + 1 + + + PECEN + PEC enable Note: If the SMBus feature is + not supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 23 + 1 + + + + + CR2 + CR2 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x4 + 0x20 + read-write + 0x00000000 + + + SADD0 + Slave address bit 0 (master mode) In + 7-bit addressing mode (ADD10 = 0): This bit is dont + care In 10-bit addressing mode (ADD10 = 1): This bit + should be written with bit 0 of the slave address to + be sent Note: Changing these bits when the START bit + is set is not allowed. + 0 + 1 + + + SADD1 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 1 + 1 + + + SADD2 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 2 + 1 + + + SADD3 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 3 + 1 + + + SADD4 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 4 + 1 + + + SADD5 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 5 + 1 + + + SADD6 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 6 + 1 + + + SADD7 + Slave address bit 7:1 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits should + be written with the 7-bit slave address to be sent In + 10-bit addressing mode (ADD10 = 1): These bits should + be written with bits 7:1 of the slave address to be + sent. Note: Changing these bits when the START bit is + set is not allowed. + 7 + 1 + + + SADD8 + Slave address bit 9:8 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits are + dont care In 10-bit addressing mode (ADD10 = 1): + These bits should be written with bits 9:8 of the + slave address to be sent Note: Changing these bits + when the START bit is set is not + allowed. + 8 + 1 + + + SADD9 + Slave address bit 9:8 (master mode) In + 7-bit addressing mode (ADD10 = 0): These bits are + dont care In 10-bit addressing mode (ADD10 = 1): + These bits should be written with bits 9:8 of the + slave address to be sent Note: Changing these bits + when the START bit is set is not + allowed. + 9 + 1 + + + RD_WRN + Transfer direction (master mode) Note: + Changing this bit when the START bit is set is not + allowed. + 10 + 1 + + + ADD10 + 10-bit addressing mode (master mode) + Note: Changing this bit when the START bit is set is + not allowed. + 11 + 1 + + + HEAD10R + 10-bit address header only read + direction (master receiver mode) Note: Changing this + bit when the START bit is set is not + allowed. + 12 + 1 + + + START + Start generation This bit is set by + software, and cleared by hardware after the Start + followed by the address sequence is sent, by an + arbitration loss, by a timeout error detection, or + when PE = 0. It can also be cleared by software by + writing 1 to the ADDRCF bit in the I2C_ICR register. + If the I2C is already in master mode with AUTOEND = + 0, setting this bit generates a Repeated Start + condition when RELOAD=0, after the end of the NBYTES + transfer. Otherwise setting this bit will generate a + START condition once the bus is free. Note: Writing 0 + to this bit has no effect. The START bit can be set + even if the bus is BUSY or I2C is in slave mode. This + bit has no effect when RELOAD is set. + 13 + 1 + + + STOP + Stop generation (master mode) The bit is + set by software, cleared by hardware when a Stop + condition is detected, or when PE = 0. In Master + Mode: Note: Writing 0 to this bit has no + effect. + 14 + 1 + + + NACK + NACK generation (slave mode) The bit is + set by software, cleared by hardware when the NACK is + sent, or when a STOP condition or an Address matched + is received, or when PE=0. Note: Writing 0 to this + bit has no effect. This bit is used in slave mode + only: in master receiver mode, NACK is automatically + generated after last byte preceding STOP or RESTART + condition, whatever the NACK bit value. When an + overrun occurs in slave receiver NOSTRETCH mode, a + NACK is automatically generated whatever the NACK bit + value. When hardware PEC checking is enabled + (PECBYTE=1), the PEC acknowledge value does not + depend on the NACK value. + 15 + 1 + + + NBYTES + Number of bytes The number of bytes to + be transmitted/received is programmed there. This + field is dont care in slave mode with SBC=0. Note: + Changing these bits when the START bit is set is not + allowed. + 16 + 8 + + + RELOAD + NBYTES reload mode This bit is set and + cleared by software. + 24 + 1 + + + AUTOEND + Automatic end mode (master mode) This + bit is set and cleared by software. Note: This bit + has no effect in slave mode or when the RELOAD bit is + set. + 25 + 1 + + + PECBYTE + Packet error checking byte This bit is + set by software, and cleared by hardware when the PEC + is transferred, or when a STOP condition or an + Address matched is received, also when PE=0. Note: + Writing 0 to this bit has no effect. This bit has no + effect when RELOAD is set. This bit has no effect is + slave mode when SBC=0. If the SMBus feature is not + supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 26 + 1 + + + + + OAR1 + OAR1 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x8 + 0x20 + read-write + 0x00000000 + + + OA1 + Interface address 7-bit addressing mode: + dont care 10-bit addressing mode: bits 9:8 of address + Note: These bits can be written only when OA1EN=0. + OA1[7:1]: Interface address Bits 7:1 of address Note: + These bits can be written only when OA1EN=0. OA1[0]: + Interface address 7-bit addressing mode: dont care + 10-bit addressing mode: bit 0 of address Note: This + bit can be written only when OA1EN=0. + 0 + 10 + + + OA1MODE + Own Address 1 10-bit mode Note: This bit + can be written only when OA1EN=0. + 10 + 1 + + + OA1EN + Own Address 1 enable + 15 + 1 + + + + + OAR2 + OAR2 + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0xC + 0x20 + read-write + 0x00000000 + + + OA2 + Interface address bits 7:1 of address + Note: These bits can be written only when + OA2EN=0. + 1 + 7 + + + OA2MSK + Own Address 2 masks Note: These bits can + be written only when OA2EN=0. As soon as OA2MSK is + not equal to 0, the reserved I2C addresses (0b0000xxx + and 0b1111xxx) are not acknowledged even if the + comparison matches. + 8 + 3 + + + OA2EN + Own Address 2 enable + 15 + 1 + + + + + TIMINGR + TIMINGR + Access: No wait states + 0x10 + 0x20 + read-write + 0x00000000 + + + SCLL + SCL low period (master mode) This field + is used to generate the SCL low period in master + mode. tSCLL = (SCLL+1) x tPRESC Note: SCLL is also + used to generate tBUF and tSU:STA + timings. + 0 + 8 + + + SCLH + SCL high period (master mode) This field + is used to generate the SCL high period in master + mode. tSCLH = (SCLH+1) x tPRESC Note: SCLH is also + used to generate tSU:STO and tHD:STA + timing. + 8 + 8 + + + SDADEL + Data hold time This field is used to + generate the delay tSDADEL between SCL falling edge + and SDA edge. In master mode and in slave mode with + NOSTRETCH = 0, the SCL line is stretched low during + tSDADEL. tSDADEL= SDADEL x tPRESC Note: SDADEL is + used to generate tHD:DAT timing. + 16 + 4 + + + SCLDEL + Data setup time This field is used to + generate a delay tSCLDEL between SDA edge and SCL + rising edge. In master mode and in slave mode with + NOSTRETCH = 0, the SCL line is stretched low during + tSCLDEL. tSCLDEL = (SCLDEL+1) x tPRESC Note: tSCLDEL + is used to generate tSU:DAT timing. + 20 + 4 + + + PRESC + Timing prescaler This field is used to + prescale I2CCLK in order to generate the clock period + tPRESC used for data setup and hold counters (refer + to I2C timings on page9) and for SCL high and low + level counters (refer to I2C master initialization on + page24). tPRESC = (PRESC+1) x tI2CCLK + 28 + 4 + + + + + TIMEOUTR + TIMEOUTR + Access: No wait states, except if a write + access occurs while a write access to this register is + ongoing. In this case, wait states are inserted in the + second write access until the previous one is completed. + The latency of the second write access can be up to 2 x + PCLK1 + 6 x I2CCLK. + 0x14 + 0x20 + read-write + 0x00000000 + + + TIMEOUTA + Bus Timeout A This field is used to + configure: The SCL low timeout condition tTIMEOUT + when TIDLE=0 tTIMEOUT= (TIMEOUTA+1) x 2048 x tI2CCLK + The bus idle condition (both SCL and SDA high) when + TIDLE=1 tIDLE= (TIMEOUTA+1) x 4 x tI2CCLK Note: These + bits can be written only when + TIMOUTEN=0. + 0 + 12 + + + TIDLE + Idle clock timeout detection Note: This + bit can be written only when + TIMOUTEN=0. + 12 + 1 + + + TIMOUTEN + Clock timeout enable + 15 + 1 + + + TIMEOUTB + Bus timeout B This field is used to + configure the cumulative clock extension timeout: In + master mode, the master cumulative clock low extend + time (tLOW:MEXT) is detected In slave mode, the slave + cumulative clock low extend time (tLOW:SEXT) is + detected tLOW:EXT= (TIMEOUTB+1) x 2048 x tI2CCLK + Note: These bits can be written only when + TEXTEN=0. + 16 + 12 + + + TEXTEN + Extended clock timeout + enable + 31 + 1 + + + + + ISR + ISR + Access: No wait states + 0x18 + 0x20 + 0x00000001 + + + TXE + Transmit data register empty + (transmitters) This bit is set by hardware when the + I2C_TXDR register is empty. It is cleared when the + next data to be sent is written in the I2C_TXDR + register. This bit can be written to 1 by software in + order to flush the transmit data register I2C_TXDR. + Note: This bit is set by hardware when + PE=0. + 0 + 1 + read-write + + + TXIS + Transmit interrupt status (transmitters) + This bit is set by hardware when the I2C_TXDR + register is empty and the data to be transmitted must + be written in the I2C_TXDR register. It is cleared + when the next data to be sent is written in the + I2C_TXDR register. This bit can be written to 1 by + software when NOSTRETCH=1 only, in order to generate + a TXIS event (interrupt if TXIE=1 or DMA request if + TXDMAEN=1). Note: This bit is cleared by hardware + when PE=0. + 1 + 1 + read-write + + + RXNE + Receive data register not empty + (receivers) This bit is set by hardware when the + received data is copied into the I2C_RXDR register, + and is ready to be read. It is cleared when I2C_RXDR + is read. Note: This bit is cleared by hardware when + PE=0. + 2 + 1 + read-only + + + ADDR + Address matched (slave mode) This bit is + set by hardware as soon as the received slave address + matched with one of the enabled slave addresses. It + is cleared by software by setting ADDRCF bit. Note: + This bit is cleared by hardware when + PE=0. + 3 + 1 + read-only + + + NACKF + Not Acknowledge received flag This flag + is set by hardware when a NACK is received after a + byte transmission. It is cleared by software by + setting the NACKCF bit. Note: This bit is cleared by + hardware when PE=0. + 4 + 1 + read-only + + + STOPF + Stop detection flag This flag is set by + hardware when a Stop condition is detected on the bus + and the peripheral is involved in this transfer: + either as a master, provided that the STOP condition + is generated by the peripheral. or as a slave, + provided that the peripheral has been addressed + previously during this transfer. It is cleared by + software by setting the STOPCF bit. Note: This bit is + cleared by hardware when PE=0. + 5 + 1 + read-only + + + TC + Transfer Complete (master mode) This + flag is set by hardware when RELOAD=0, AUTOEND=0 and + NBYTES data have been transferred. It is cleared by + software when START bit or STOP bit is set. Note: + This bit is cleared by hardware when + PE=0. + 6 + 1 + read-only + + + TCR + Transfer Complete Reload This flag is + set by hardware when RELOAD=1 and NBYTES data have + been transferred. It is cleared by software when + NBYTES is written to a non-zero value. Note: This bit + is cleared by hardware when PE=0. This flag is only + for master mode, or for slave mode when the SBC bit + is set. + 7 + 1 + read-only + + + BERR + Bus error This flag is set by hardware + when a misplaced Start or Stop condition is detected + whereas the peripheral is involved in the transfer. + The flag is not set during the address phase in slave + mode. It is cleared by software by setting BERRCF + bit. Note: This bit is cleared by hardware when + PE=0. + 8 + 1 + read-only + + + ARLO + Arbitration lost This flag is set by + hardware in case of arbitration loss. It is cleared + by software by setting the ARLOCF bit. Note: This bit + is cleared by hardware when PE=0. + 9 + 1 + read-only + + + OVR + Overrun/Underrun (slave mode) This flag + is set by hardware in slave mode with NOSTRETCH=1, + when an overrun/underrun error occurs. It is cleared + by software by setting the OVRCF bit. Note: This bit + is cleared by hardware when PE=0. + 10 + 1 + read-only + + + PECERR + PEC Error in reception This flag is set + by hardware when the received PEC does not match with + the PEC register content. A NACK is automatically + sent after the wrong PEC reception. It is cleared by + software by setting the PECCF bit. Note: This bit is + cleared by hardware when PE=0. If the SMBus feature + is not supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 11 + 1 + read-only + + + TIMEOUT + Timeout or tLOW detection flag This flag + is set by hardware when a timeout or extended clock + timeout occurred. It is cleared by software by + setting the TIMEOUTCF bit. Note: This bit is cleared + by hardware when PE=0. If the SMBus feature is not + supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 12 + 1 + read-only + + + ALERT + SMBus alert This flag is set by hardware + when SMBHEN=1 (SMBus host configuration), ALERTEN=1 + and a SMBALERT event (falling edge) is detected on + SMBA pin. It is cleared by software by setting the + ALERTCF bit. Note: This bit is cleared by hardware + when PE=0. If the SMBus feature is not supported, + this bit is reserved and forced by hardware to 0. + Please refer to Section25.3: I2C + implementation. + 13 + 1 + read-only + + + BUSY + Bus busy This flag indicates that a + communication is in progress on the bus. It is set by + hardware when a START condition is detected. It is + cleared by hardware when a Stop condition is + detected, or when PE=0. + 15 + 1 + read-only + + + DIR + Transfer direction (Slave mode) This + flag is updated when an address match event occurs + (ADDR=1). + 16 + 1 + read-only + + + ADDCODE + Address match code (Slave mode) These + bits are updated with the received address when an + address match event occurs (ADDR = 1). In the case of + a 10-bit address, ADDCODE provides the 10-bit header + followed by the 2 MSBs of the address. + 17 + 7 + read-only + + + + + ICR + ICR + Access: No wait states + 0x1C + 0x20 + write-only + 0x00000000 + + + ADDRCF + Address matched flag clear Writing 1 to + this bit clears the ADDR flag in the I2C_ISR + register. Writing 1 to this bit also clears the START + bit in the I2C_CR2 register. + 3 + 1 + + + NACKCF + Not Acknowledge flag clear Writing 1 to + this bit clears the ACKF flag in I2C_ISR + register. + 4 + 1 + + + STOPCF + Stop detection flag clear Writing 1 to + this bit clears the STOPF flag in the I2C_ISR + register. + 5 + 1 + + + BERRCF + Bus error flag clear Writing 1 to this + bit clears the BERRF flag in the I2C_ISR + register. + 8 + 1 + + + ARLOCF + Arbitration Lost flag clear Writing 1 to + this bit clears the ARLO flag in the I2C_ISR + register. + 9 + 1 + + + OVRCF + Overrun/Underrun flag clear Writing 1 to + this bit clears the OVR flag in the I2C_ISR + register. + 10 + 1 + + + PECCF + PEC Error flag clear Writing 1 to this + bit clears the PECERR flag in the I2C_ISR register. + Note: If the SMBus feature is not supported, this bit + is reserved and forced by hardware to 0. Please refer + to Section25.3: I2C implementation. + 11 + 1 + + + TIMOUTCF + Timeout detection flag clear Writing 1 + to this bit clears the TIMEOUT flag in the I2C_ISR + register. Note: If the SMBus feature is not + supported, this bit is reserved and forced by + hardware to 0. Please refer to Section25.3: I2C + implementation. + 12 + 1 + + + ALERTCF + Alert flag clear Writing 1 to this bit + clears the ALERT flag in the I2C_ISR register. Note: + If the SMBus feature is not supported, this bit is + reserved and forced by hardware to 0. Please refer to + Section25.3: I2C implementation. + 13 + 1 + + + + + PECR + PECR + Access: No wait states + 0x20 + 0x20 + read-only + 0x00000000 + + + PEC + Packet error checking register This + field contains the internal PEC when PECEN=1. The PEC + is cleared by hardware when PE=0. + 0 + 8 + + + + + RXDR + RXDR + Access: No wait states + 0x24 + 0x20 + read-only + 0x00000000 + + + RXDATA + 8-bit receive data Data byte received + from the I2C bus. + 0 + 8 + + + + + TXDR + TXDR + Access: No wait states + 0x28 + 0x20 + read-write + 0x00000000 + + + TXDATA + 8-bit transmit data Data byte to be + transmitted to the I2C bus. Note: These bits can be + written only when TXE=1. + 0 + 8 + + + + + + + I2C2 + 0x40005800 + + I2C2_EV + I2C2 event interrupt + 33 + + + I2C2_ER + I2C2 error interrupt + 34 + + + + I2C3 + 0x40005C00 + + I2C3_EV + I2C3 event interrupt + 72 + + + I2C3_ER + I2C3 error interrupt + 73 + + + + I2C4 + 0x58001C00 + + I2C4_EV + I2C4 event interrupt + 95 + + + I2C4_ER + I2C4 error interrupt + 96 + + + + GPIOA + GPIO + GPIO + 0x58020000 + + 0x0 + 0x400 + registers + + + + MODER + MODER + GPIO port mode register + 0x0 + 0x20 + read-write + 0xABFFFFFF + + + MODE0 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 0 + 2 + + + MODE1 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 2 + 2 + + + MODE2 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 4 + 2 + + + MODE3 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 6 + 2 + + + MODE4 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 8 + 2 + + + MODE5 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 10 + 2 + + + MODE6 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 12 + 2 + + + MODE7 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 14 + 2 + + + MODE8 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 16 + 2 + + + MODE9 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 18 + 2 + + + MODE10 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 20 + 2 + + + MODE11 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 22 + 2 + + + MODE12 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 24 + 2 + + + MODE13 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 26 + 2 + + + MODE14 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 28 + 2 + + + MODE15 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O mode. + 30 + 2 + + + + + OTYPER + OTYPER + GPIO port output type register + 0x4 + 0x20 + read-write + 0x00000000 + + + OT0 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 0 + 1 + + + OT1 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 1 + 1 + + + OT2 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 2 + 1 + + + OT3 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 3 + 1 + + + OT4 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 4 + 1 + + + OT5 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 5 + 1 + + + OT6 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 6 + 1 + + + OT7 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 7 + 1 + + + OT8 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 8 + 1 + + + OT9 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 9 + 1 + + + OT10 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 10 + 1 + + + OT11 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 11 + 1 + + + OT12 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 12 + 1 + + + OT13 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 13 + 1 + + + OT14 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 14 + 1 + + + OT15 + Port x configuration bits (y = 0..15) + These bits are written by software to configure the + I/O output type. + 15 + 1 + + + + + OSPEEDR + OSPEEDR + GPIO port output speed + register + 0x8 + 0x20 + read-write + 0x0C000000 + + + OSPEED0 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 0 + 2 + + + OSPEED1 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 2 + 2 + + + OSPEED2 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 4 + 2 + + + OSPEED3 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 6 + 2 + + + OSPEED4 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 8 + 2 + + + OSPEED5 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 10 + 2 + + + OSPEED6 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 12 + 2 + + + OSPEED7 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 14 + 2 + + + OSPEED8 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 16 + 2 + + + OSPEED9 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 18 + 2 + + + OSPEED10 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 20 + 2 + + + OSPEED11 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 22 + 2 + + + OSPEED12 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 24 + 2 + + + OSPEED13 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 26 + 2 + + + OSPEED14 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 28 + 2 + + + OSPEED15 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O output speed. Note: Refer to the + device datasheet for the frequency specifications and + the power supply and load conditions for each + speed. + 30 + 2 + + + + + PUPDR + PUPDR + GPIO port pull-up/pull-down + register + 0xC + 0x20 + read-write + 0x12100000 + + + PUPD0 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 0 + 2 + + + PUPD1 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 2 + 2 + + + PUPD2 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 4 + 2 + + + PUPD3 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 6 + 2 + + + PUPD4 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 8 + 2 + + + PUPD5 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 10 + 2 + + + PUPD6 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 12 + 2 + + + PUPD7 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 14 + 2 + + + PUPD8 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 16 + 2 + + + PUPD9 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 18 + 2 + + + PUPD10 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 20 + 2 + + + PUPD11 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 22 + 2 + + + PUPD12 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 24 + 2 + + + PUPD13 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 26 + 2 + + + PUPD14 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 28 + 2 + + + PUPD15 + [1:0]: Port x configuration bits (y = + 0..15) These bits are written by software to + configure the I/O pull-up or pull-down + 30 + 2 + + + + + IDR + IDR + GPIO port input data register + 0x10 + 0x20 + read-only + 0x00000000 + + + ID0 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 0 + 1 + + + ID1 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 1 + 1 + + + ID2 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 2 + 1 + + + ID3 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 3 + 1 + + + ID4 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 4 + 1 + + + ID5 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 5 + 1 + + + ID6 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 6 + 1 + + + ID7 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 7 + 1 + + + ID8 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 8 + 1 + + + ID9 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 9 + 1 + + + ID10 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 10 + 1 + + + ID11 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 11 + 1 + + + ID12 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 12 + 1 + + + ID13 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 13 + 1 + + + ID14 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 14 + 1 + + + ID15 + Port input data bit (y = 0..15) These + bits are read-only. They contain the input value of + the corresponding I/O port. + 15 + 1 + + + + + ODR + ODR + GPIO port output data register + 0x14 + 0x20 + read-write + 0x00000000 + + + OD0 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 0 + 1 + + + OD1 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 1 + 1 + + + OD2 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 2 + 1 + + + OD3 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 3 + 1 + + + OD4 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 4 + 1 + + + OD5 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 5 + 1 + + + OD6 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 6 + 1 + + + OD7 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 7 + 1 + + + OD8 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 8 + 1 + + + OD9 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 9 + 1 + + + OD10 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 10 + 1 + + + OD11 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 11 + 1 + + + OD12 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 12 + 1 + + + OD13 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 13 + 1 + + + OD14 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 14 + 1 + + + OD15 + Port output data bit These bits can be + read and written by software. Note: For atomic bit + set/reset, the OD bits can be individually set and/or + reset by writing to the GPIOx_BSRR or GPIOx_BRR + registers (x = A..F). + 15 + 1 + + + + + BSRR + BSRR + GPIO port bit set/reset + register + 0x18 + 0x20 + write-only + 0x00000000 + + + BS0 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 0 + 1 + + + BS1 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 1 + 1 + + + BS2 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 2 + 1 + + + BS3 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 3 + 1 + + + BS4 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 4 + 1 + + + BS5 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 5 + 1 + + + BS6 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 6 + 1 + + + BS7 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 7 + 1 + + + BS8 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 8 + 1 + + + BS9 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 9 + 1 + + + BS10 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 10 + 1 + + + BS11 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 11 + 1 + + + BS12 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 12 + 1 + + + BS13 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 13 + 1 + + + BS14 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 14 + 1 + + + BS15 + Port x set bit y (y= 0..15) These bits + are write-only. A read to these bits returns the + value 0x0000. + 15 + 1 + + + BR0 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 16 + 1 + + + BR1 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 17 + 1 + + + BR2 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 18 + 1 + + + BR3 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 19 + 1 + + + BR4 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 20 + 1 + + + BR5 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 21 + 1 + + + BR6 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 22 + 1 + + + BR7 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 23 + 1 + + + BR8 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 24 + 1 + + + BR9 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 25 + 1 + + + BR10 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 26 + 1 + + + BR11 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 27 + 1 + + + BR12 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 28 + 1 + + + BR13 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 29 + 1 + + + BR14 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 30 + 1 + + + BR15 + Port x reset bit y (y = 0..15) These + bits are write-only. A read to these bits returns the + value 0x0000. Note: If both BSx and BRx are set, BSx + has priority. + 31 + 1 + + + + + LCKR + LCKR + This register is used to lock the + configuration of the port bits when a correct write + sequence is applied to bit 16 (LCKK). The value of bits + [15:0] is used to lock the configuration of the GPIO. + During the write sequence, the value of LCKR[15:0] must + not change. When the LOCK sequence has been applied on a + port bit, the value of this port bit can no longer be + modified until the next MCU reset or peripheral reset.A + specific write sequence is used to write to the + GPIOx_LCKR register. Only word access (32-bit long) is + allowed during this locking sequence.Each lock bit + freezes a specific configuration register (control and + alternate function registers). + 0x1C + 0x20 + read-write + 0x00000000 + + + LCK0 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 0 + 1 + + + LCK1 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 1 + 1 + + + LCK2 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 2 + 1 + + + LCK3 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 3 + 1 + + + LCK4 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 4 + 1 + + + LCK5 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 5 + 1 + + + LCK6 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 6 + 1 + + + LCK7 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 7 + 1 + + + LCK8 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 8 + 1 + + + LCK9 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 9 + 1 + + + LCK10 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 10 + 1 + + + LCK11 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 11 + 1 + + + LCK12 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 12 + 1 + + + LCK13 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 13 + 1 + + + LCK14 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 14 + 1 + + + LCK15 + Port x lock bit y (y= 0..15) These bits + are read/write but can only be written when the LCKK + bit is 0. + 15 + 1 + + + LCKK + Lock key This bit can be read any time. + It can only be modified using the lock key write + sequence. LOCK key write sequence: WR LCKR[16] = 1 + + LCKR[15:0] WR LCKR[16] = 0 + LCKR[15:0] WR LCKR[16] = + 1 + LCKR[15:0] RD LCKR RD LCKR[16] = 1 (this read + operation is optional but it confirms that the lock + is active) Note: During the LOCK key write sequence, + the value of LCK[15:0] must not change. Any error in + the lock sequence aborts the lock. After the first + lock sequence on any bit of the port, any read access + on the LCKK bit will return 1 until the next MCU + reset or peripheral reset. + 16 + 1 + + + + + AFRL + AFRL + GPIO alternate function low + register + 0x20 + 0x20 + read-write + 0x00000000 + + + AFSEL0 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 0 + 4 + + + AFSEL1 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 4 + 4 + + + AFSEL2 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 8 + 4 + + + AFSEL3 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 12 + 4 + + + AFSEL4 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 16 + 4 + + + AFSEL5 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 20 + 4 + + + AFSEL6 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 24 + 4 + + + AFSEL7 + [3:0]: Alternate function selection for + port x pin y (y = 0..7) These bits are written by + software to configure alternate function I/Os AFSELy + selection: + 28 + 4 + + + + + AFRH + AFRH + GPIO alternate function high + register + 0x24 + 0x20 + read-write + 0x00000000 + + + AFSEL8 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 0 + 4 + + + AFSEL9 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 4 + 4 + + + AFSEL10 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 8 + 4 + + + AFSEL11 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 12 + 4 + + + AFSEL12 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 16 + 4 + + + AFSEL13 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 20 + 4 + + + AFSEL14 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 24 + 4 + + + AFSEL15 + [3:0]: Alternate function selection for + port x pin y (y = 8..15) These bits are written by + software to configure alternate function + I/Os + 28 + 4 + + + + + + + GPIOB + 0x58020400 + + + GPIOC + 0x58020800 + + + GPIOD + 0x58020C00 + + + GPIOE + 0x58021000 + + + GPIOF + 0x58021400 + + + GPIOG + 0x58021800 + + + GPIOH + 0x58021C00 + + + GPIOI + 0x58022000 + + + GPIOJ + 0x58022400 + + + GPIOK + 0x58022800 + + + JPEG + JPEG + JPEG + 0x52003000 + + 0x0 + 0x400 + registers + + + JPEG + JPEG global interrupt + 121 + + + + CONFR0 + CONFR0 + JPEG codec control register + 0x0 + 0x20 + write-only + 0x00000000 + + + START + Start This bit start or stop the + encoding or decoding process. Read this register + always return 0. + 0 + 1 + + + + + CONFR1 + CONFR1 + JPEG codec configuration register + 1 + 0x4 + 0x20 + read-write + 0x00000000 + + + NF + Number of color components This field + defines the number of color components minus + 1. + 0 + 2 + + + DE + Decoding Enable This bit selects the + coding or decoding process + 3 + 1 + + + COLORSPACE + Color Space This filed defines the + number of quantization tables minus 1 to insert in + the output stream. + 4 + 2 + + + NS + Number of components for Scan This field + defines the number of components minus 1 for scan + header marker segment. + 6 + 2 + + + HDR + Header Processing This bit enable the + header processing (generation/parsing). + 8 + 1 + + + YSIZE + Y Size This field defines the number of + lines in source image. + 16 + 16 + + + + + CONFR2 + CONFR2 + JPEG codec configuration register + 2 + 0x8 + 0x20 + read-write + 0x00000000 + + + NMCU + Number of MCU For encoding: this field + defines the number of MCU units minus 1 to encode. + For decoding: this field indicates the number of + complete MCU units minus 1 to be decoded (this field + is updated after the JPEG header parsing). If the + decoded image size has not a X or Y size multiple of + 8 or 16 (depending on the sub-sampling process), the + resulting incomplete or empty MCU must be added to + this value to get the total number of MCU + generated. + 0 + 26 + + + + + CONFR3 + CONFR3 + JPEG codec configuration register + 3 + 0xC + 0x20 + read-write + 0x00000000 + + + XSIZE + X size This field defines the number of + pixels per line. + 16 + 16 + + + + + CONFRN1 + CONFRN1 + JPEG codec configuration register + 4-7 + 0x10 + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CONFRN2 + CONFRN2 + JPEG codec configuration register + 4-7 + 0x14 + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CONFRN3 + CONFRN3 + JPEG codec configuration register + 4-7 + 0x18 + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CONFRN4 + CONFRN4 + JPEG codec configuration register + 4-7 + 0x1C + 0x20 + read-write + 0x00000000 + + + HD + Huffman DC Selects the Huffman table for + encoding the DC coefficients. + 0 + 1 + + + HA + Huffman AC Selects the Huffman table for + encoding the AC coefficients. + 1 + 1 + + + QT + Quantization Table Selects quantization + table associated with a color + component. + 2 + 2 + + + NB + Number of Block Number of data units + minus 1 that belong to a particular color in the + MCU. + 4 + 4 + + + VSF + Vertical Sampling Factor Vertical + sampling factor for component i. + 8 + 4 + + + HSF + Horizontal Sampling Factor Horizontal + sampling factor for component i. + 12 + 4 + + + + + CR + CR + JPEG control register + 0x30 + 0x20 + read-write + 0x00000000 + + + JCEN + JPEG Core Enable Enable the JPEG codec + Core. + 0 + 1 + + + IFTIE + Input FIFO Threshold Interrupt Enable + This bit enables the interrupt generation when input + FIFO reach the threshold. + 1 + 1 + + + IFNFIE + Input FIFO Not Full Interrupt Enable + This bit enables the interrupt generation when input + FIFO is not empty. + 2 + 1 + + + OFTIE + Output FIFO Threshold Interrupt Enable + This bit enables the interrupt generation when output + FIFO reach the threshold. + 3 + 1 + + + OFNEIE + Output FIFO Not Empty Interrupt Enable + This bit enables the interrupt generation when output + FIFO is not empty. + 4 + 1 + + + EOCIE + End of Conversion Interrupt Enable This + bit enables the interrupt generation on the end of + conversion. + 5 + 1 + + + HPDIE + Header Parsing Done Interrupt Enable + This bit enables the interrupt generation on the + Header Parsing Operation. + 6 + 1 + + + IDMAEN + Input DMA Enable Enable the DMA request + generation for the input FIFO. + 11 + 1 + + + ODMAEN + Output DMA Enable Enable the DMA request + generation for the output FIFO. + 12 + 1 + + + IFF + Input FIFO Flush This bit flush the + input FIFO. This bit is always read as + 0. + 13 + 1 + + + OFF + Output FIFO Flush This bit flush the + output FIFO. This bit is always read as + 0. + 14 + 1 + + + + + SR + SR + JPEG status register + 0x34 + 0x20 + read-only + 0x00000006 + + + IFTF + Input FIFO Threshold Flag This bit is + set when the input FIFO is not full and is bellow its + threshold. + 1 + 1 + + + IFNFF + Input FIFO Not Full Flag This bit is set + when the input FIFO is not full (a data can be + written). + 2 + 1 + + + OFTF + Output FIFO Threshold Flag This bit is + set when the output FIFO is not empty and has reach + its threshold. + 3 + 1 + + + OFNEF + Output FIFO Not Empty Flag This bit is + set when the output FIFO is not empty (a data is + available). + 4 + 1 + + + EOCF + End of Conversion Flag This bit is set + when the JPEG codec core has finished the encoding or + the decoding process and than last data has been sent + to the output FIFO. + 5 + 1 + + + HPDF + Header Parsing Done Flag This bit is set + in decode mode when the JPEG codec has finished the + parsing of the headers and the internal registers + have been updated. + 6 + 1 + + + COF + Codec Operation Flag This bit is set + when when a JPEG codec operation is on going + (encoding or decoding). + 7 + 1 + + + + + CFR + CFR + JPEG clear flag register + 0x38 + 0x20 + read-write + 0x00000000 + + + CEOCF + Clear End of Conversion Flag Writing 1 + clears the End of Conversion Flag of the JPEG Status + Register. + 5 + 1 + + + CHPDF + Clear Header Parsing Done Flag Writing 1 + clears the Header Parsing Done Flag of the JPEG + Status Register. + 6 + 1 + + + + + DIR + DIR + JPEG data input register + 0x40 + 0x20 + write-only + 0x00000000 + + + DATAIN + Data Input FIFO Input FIFO data + register. + 0 + 32 + + + + + DOR + DOR + JPEG data output register + 0x44 + 0x20 + read-only + 0x00000000 + + + DATAOUT + Data Output FIFO Output FIFO data + register. + 0 + 32 + + + + + + + MDMA + MDMA + MDMA + 0x52000000 + + 0x0 + 0x1000 + registers + + + MDMA + MDMA + 122 + + + + MDMA_GISR0 + MDMA_GISR0 + MDMA Global Interrupt/Status + Register + 0x0 + 0x20 + read-only + 0x00000000 + + + GIF0 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 0 + 1 + + + GIF1 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 1 + 1 + + + GIF2 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 2 + 1 + + + GIF3 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 3 + 1 + + + GIF4 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 4 + 1 + + + GIF5 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 5 + 1 + + + GIF6 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 6 + 1 + + + GIF7 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 7 + 1 + + + GIF8 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 8 + 1 + + + GIF9 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 9 + 1 + + + GIF10 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 10 + 1 + + + GIF11 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 11 + 1 + + + GIF12 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 12 + 1 + + + GIF13 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 13 + 1 + + + GIF14 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 14 + 1 + + + GIF15 + Channel x global interrupt flag (x=...) + This bit is set and reset by hardware. It is a + logical OR of all the Channel x interrupt flags + (CTCIFx, BTIFx, BRTIFx, TEIFx) which are enabled in + the interrupt mask register (CTCIEx, BTIEx, BRTIEx, + TEIEx) + 15 + 1 + + + + + MDMA_C0ISR + MDMA_C0ISR + MDMA channel x interrupt/status + register + 0x40 + 0x20 + read-only + 0x00000000 + + + TEIF0 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF0 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF0 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF0 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF0 + channel x buffer transfer + complete + 4 + 1 + + + CRQA0 + channel x request active + flag + 16 + 1 + + + + + MDMA_C0IFCR + MDMA_C0IFCR + MDMA channel x interrupt flag clear + register + 0x44 + 0x20 + write-only + 0x00000000 + + + CTEIF0 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF0 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF0 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF0 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF0 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C0ESR + MDMA_C0ESR + MDMA Channel x error status + register + 0x48 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C0CR + MDMA_C0CR + This register is used to control the + concerned channel. + 0x4C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C0TCR + MDMA_C0TCR + This register is used to configure the + concerned channel. + 0x50 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C0BNDTR + MDMA_C0BNDTR + MDMA Channel x block number of data + register + 0x54 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C0SAR + MDMA_C0SAR + MDMA channel x source address + register + 0x58 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C0DAR + MDMA_C0DAR + MDMA channel x destination address + register + 0x5C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C0BRUR + MDMA_C0BRUR + MDMA channel x Block Repeat address Update + register + 0x60 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C0LAR + MDMA_C0LAR + MDMA channel x Link Address + register + 0x64 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C0TBR + MDMA_C0TBR + MDMA channel x Trigger and Bus selection + Register + 0x68 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C0MAR + MDMA_C0MAR + MDMA channel x Mask address + register + 0x70 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C0MDR + MDMA_C0MDR + MDMA channel x Mask Data + register + 0x74 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C1ISR + MDMA_C1ISR + MDMA channel x interrupt/status + register + 0x80 + 0x20 + read-only + 0x00000000 + + + TEIF1 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF1 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF1 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF1 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF1 + channel x buffer transfer + complete + 4 + 1 + + + CRQA1 + channel x request active + flag + 16 + 1 + + + + + MDMA_C1IFCR + MDMA_C1IFCR + MDMA channel x interrupt flag clear + register + 0x84 + 0x20 + write-only + 0x00000000 + + + CTEIF1 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF1 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF1 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF1 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF1 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C1ESR + MDMA_C1ESR + MDMA Channel x error status + register + 0x88 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C1CR + MDMA_C1CR + This register is used to control the + concerned channel. + 0x8C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C1TCR + MDMA_C1TCR + This register is used to configure the + concerned channel. + 0x90 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C1BNDTR + MDMA_C1BNDTR + MDMA Channel x block number of data + register + 0x94 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C1SAR + MDMA_C1SAR + MDMA channel x source address + register + 0x98 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C1DAR + MDMA_C1DAR + MDMA channel x destination address + register + 0x9C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C1BRUR + MDMA_C1BRUR + MDMA channel x Block Repeat address Update + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C1LAR + MDMA_C1LAR + MDMA channel x Link Address + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C1TBR + MDMA_C1TBR + MDMA channel x Trigger and Bus selection + Register + 0xA8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C1MAR + MDMA_C1MAR + MDMA channel x Mask address + register + 0xB0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C1MDR + MDMA_C1MDR + MDMA channel x Mask Data + register + 0xB4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C2ISR + MDMA_C2ISR + MDMA channel x interrupt/status + register + 0xC0 + 0x20 + read-only + 0x00000000 + + + TEIF2 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF2 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF2 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF2 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF2 + channel x buffer transfer + complete + 4 + 1 + + + CRQA2 + channel x request active + flag + 16 + 1 + + + + + MDMA_C2IFCR + MDMA_C2IFCR + MDMA channel x interrupt flag clear + register + 0xC4 + 0x20 + write-only + 0x00000000 + + + CTEIF2 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF2 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF2 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF2 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF2 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C2ESR + MDMA_C2ESR + MDMA Channel x error status + register + 0xC8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C2CR + MDMA_C2CR + This register is used to control the + concerned channel. + 0xCC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C2TCR + MDMA_C2TCR + This register is used to configure the + concerned channel. + 0xD0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C2BNDTR + MDMA_C2BNDTR + MDMA Channel x block number of data + register + 0xD4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C2SAR + MDMA_C2SAR + MDMA channel x source address + register + 0xD8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C2DAR + MDMA_C2DAR + MDMA channel x destination address + register + 0xDC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C2BRUR + MDMA_C2BRUR + MDMA channel x Block Repeat address Update + register + 0xE0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C2LAR + MDMA_C2LAR + MDMA channel x Link Address + register + 0xE4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C2TBR + MDMA_C2TBR + MDMA channel x Trigger and Bus selection + Register + 0xE8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C2MAR + MDMA_C2MAR + MDMA channel x Mask address + register + 0xF0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C2MDR + MDMA_C2MDR + MDMA channel x Mask Data + register + 0xF4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C3ISR + MDMA_C3ISR + MDMA channel x interrupt/status + register + 0x100 + 0x20 + read-only + 0x00000000 + + + TEIF3 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF3 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF3 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF3 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF3 + channel x buffer transfer + complete + 4 + 1 + + + CRQA3 + channel x request active + flag + 16 + 1 + + + + + MDMA_C3IFCR + MDMA_C3IFCR + MDMA channel x interrupt flag clear + register + 0x104 + 0x20 + write-only + 0x00000000 + + + CTEIF3 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF3 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF3 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF3 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF3 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C3ESR + MDMA_C3ESR + MDMA Channel x error status + register + 0x108 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C3CR + MDMA_C3CR + This register is used to control the + concerned channel. + 0x10C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C3TCR + MDMA_C3TCR + This register is used to configure the + concerned channel. + 0x110 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C3BNDTR + MDMA_C3BNDTR + MDMA Channel x block number of data + register + 0x114 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C3SAR + MDMA_C3SAR + MDMA channel x source address + register + 0x118 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C3DAR + MDMA_C3DAR + MDMA channel x destination address + register + 0x11C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C3BRUR + MDMA_C3BRUR + MDMA channel x Block Repeat address Update + register + 0x120 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C3LAR + MDMA_C3LAR + MDMA channel x Link Address + register + 0x124 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C3TBR + MDMA_C3TBR + MDMA channel x Trigger and Bus selection + Register + 0x128 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C3MAR + MDMA_C3MAR + MDMA channel x Mask address + register + 0x130 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C3MDR + MDMA_C3MDR + MDMA channel x Mask Data + register + 0x134 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C4ISR + MDMA_C4ISR + MDMA channel x interrupt/status + register + 0x140 + 0x20 + read-only + 0x00000000 + + + TEIF4 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF4 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF4 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF4 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF4 + channel x buffer transfer + complete + 4 + 1 + + + CRQA4 + channel x request active + flag + 16 + 1 + + + + + MDMA_C4IFCR + MDMA_C4IFCR + MDMA channel x interrupt flag clear + register + 0x144 + 0x20 + write-only + 0x00000000 + + + CTEIF4 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF4 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF4 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF4 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF4 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C4ESR + MDMA_C4ESR + MDMA Channel x error status + register + 0x148 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C4CR + MDMA_C4CR + This register is used to control the + concerned channel. + 0x14C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C4TCR + MDMA_C4TCR + This register is used to configure the + concerned channel. + 0x150 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C4BNDTR + MDMA_C4BNDTR + MDMA Channel x block number of data + register + 0x154 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C4SAR + MDMA_C4SAR + MDMA channel x source address + register + 0x158 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C4DAR + MDMA_C4DAR + MDMA channel x destination address + register + 0x15C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C4BRUR + MDMA_C4BRUR + MDMA channel x Block Repeat address Update + register + 0x160 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C4LAR + MDMA_C4LAR + MDMA channel x Link Address + register + 0x164 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C4TBR + MDMA_C4TBR + MDMA channel x Trigger and Bus selection + Register + 0x168 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C4MAR + MDMA_C4MAR + MDMA channel x Mask address + register + 0x170 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C4MDR + MDMA_C4MDR + MDMA channel x Mask Data + register + 0x174 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C5ISR + MDMA_C5ISR + MDMA channel x interrupt/status + register + 0x180 + 0x20 + read-only + 0x00000000 + + + TEIF5 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF5 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF5 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF5 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF5 + channel x buffer transfer + complete + 4 + 1 + + + CRQA5 + channel x request active + flag + 16 + 1 + + + + + MDMA_C5IFCR + MDMA_C5IFCR + MDMA channel x interrupt flag clear + register + 0x184 + 0x20 + write-only + 0x00000000 + + + CTEIF5 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF5 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF5 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF5 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF5 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C5ESR + MDMA_C5ESR + MDMA Channel x error status + register + 0x188 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C5CR + MDMA_C5CR + This register is used to control the + concerned channel. + 0x18C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C5TCR + MDMA_C5TCR + This register is used to configure the + concerned channel. + 0x190 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C5BNDTR + MDMA_C5BNDTR + MDMA Channel x block number of data + register + 0x194 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C5SAR + MDMA_C5SAR + MDMA channel x source address + register + 0x198 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C5DAR + MDMA_C5DAR + MDMA channel x destination address + register + 0x19C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C5BRUR + MDMA_C5BRUR + MDMA channel x Block Repeat address Update + register + 0x1A0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C5LAR + MDMA_C5LAR + MDMA channel x Link Address + register + 0x1A4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C5TBR + MDMA_C5TBR + MDMA channel x Trigger and Bus selection + Register + 0x1A8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C5MAR + MDMA_C5MAR + MDMA channel x Mask address + register + 0x1B0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C5MDR + MDMA_C5MDR + MDMA channel x Mask Data + register + 0x1B4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C6ISR + MDMA_C6ISR + MDMA channel x interrupt/status + register + 0x1C0 + 0x20 + read-only + 0x00000000 + + + TEIF6 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF6 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF6 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF6 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF6 + channel x buffer transfer + complete + 4 + 1 + + + CRQA6 + channel x request active + flag + 16 + 1 + + + + + MDMA_C6IFCR + MDMA_C6IFCR + MDMA channel x interrupt flag clear + register + 0x1C4 + 0x20 + write-only + 0x00000000 + + + CTEIF6 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF6 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF6 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF6 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF6 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C6ESR + MDMA_C6ESR + MDMA Channel x error status + register + 0x1C8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C6CR + MDMA_C6CR + This register is used to control the + concerned channel. + 0x1CC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C6TCR + MDMA_C6TCR + This register is used to configure the + concerned channel. + 0x1D0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C6BNDTR + MDMA_C6BNDTR + MDMA Channel x block number of data + register + 0x1D4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0 + 20 + 12 + + + + + MDMA_C6SAR + MDMA_C6SAR + MDMA channel x source address + register + 0x1D8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C6DAR + MDMA_C6DAR + MDMA channel x destination address + register + 0x1DC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C6BRUR + MDMA_C6BRUR + MDMA channel x Block Repeat address Update + register + 0x1E0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C6LAR + MDMA_C6LAR + MDMA channel x Link Address + register + 0x1E4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C6TBR + MDMA_C6TBR + MDMA channel x Trigger and Bus selection + Register + 0x1E8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C6MAR + MDMA_C6MAR + MDMA channel x Mask address + register + 0x1F0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C6MDR + MDMA_C6MDR + MDMA channel x Mask Data + register + 0x1F4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C7ISR + MDMA_C7ISR + MDMA channel x interrupt/status + register + 0x200 + 0x20 + read-only + 0x00000000 + + + TEIF7 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF7 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF7 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF7 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF7 + channel x buffer transfer + complete + 4 + 1 + + + CRQA7 + channel x request active + flag + 16 + 1 + + + + + MDMA_C7IFCR + MDMA_C7IFCR + MDMA channel x interrupt flag clear + register + 0x204 + 0x20 + write-only + 0x00000000 + + + CTEIF7 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF7 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF7 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF7 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF7 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C7ESR + MDMA_C7ESR + MDMA Channel x error status + register + 0x208 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C7CR + MDMA_C7CR + This register is used to control the + concerned channel. + 0x20C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C7TCR + MDMA_C7TCR + This register is used to configure the + concerned channel. + 0x210 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C7BNDTR + MDMA_C7BNDTR + MDMA Channel x block number of data + register + 0x214 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C7SAR + MDMA_C7SAR + MDMA channel x source address + register + 0x218 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C7DAR + MDMA_C7DAR + MDMA channel x destination address + register + 0x21C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C7BRUR + MDMA_C7BRUR + MDMA channel x Block Repeat address Update + register + 0x220 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C7LAR + MDMA_C7LAR + MDMA channel x Link Address + register + 0x224 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C7TBR + MDMA_C7TBR + MDMA channel x Trigger and Bus selection + Register + 0x228 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C7MAR + MDMA_C7MAR + MDMA channel x Mask address + register + 0x230 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C7MDR + MDMA_C7MDR + MDMA channel x Mask Data + register + 0x234 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C8ISR + MDMA_C8ISR + MDMA channel x interrupt/status + register + 0x240 + 0x20 + read-only + 0x00000000 + + + TEIF8 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF8 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF8 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF8 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF8 + channel x buffer transfer + complete + 4 + 1 + + + CRQA8 + channel x request active + flag + 16 + 1 + + + + + MDMA_C8IFCR + MDMA_C8IFCR + MDMA channel x interrupt flag clear + register + 0x244 + 0x20 + write-only + 0x00000000 + + + CTEIF8 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF8 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF8 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF8 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF8 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C8ESR + MDMA_C8ESR + MDMA Channel x error status + register + 0x248 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C8CR + MDMA_C8CR + This register is used to control the + concerned channel. + 0x24C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C8TCR + MDMA_C8TCR + This register is used to configure the + concerned channel. + 0x250 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C8BNDTR + MDMA_C8BNDTR + MDMA Channel x block number of data + register + 0x254 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C8SAR + MDMA_C8SAR + MDMA channel x source address + register + 0x258 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C8DAR + MDMA_C8DAR + MDMA channel x destination address + register + 0x25C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C8BRUR + MDMA_C8BRUR + MDMA channel x Block Repeat address Update + register + 0x260 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C8LAR + MDMA_C8LAR + MDMA channel x Link Address + register + 0x264 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C8TBR + MDMA_C8TBR + MDMA channel x Trigger and Bus selection + Register + 0x268 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C8MAR + MDMA_C8MAR + MDMA channel x Mask address + register + 0x270 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C8MDR + MDMA_C8MDR + MDMA channel x Mask Data + register + 0x274 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C9ISR + MDMA_C9ISR + MDMA channel x interrupt/status + register + 0x280 + 0x20 + read-only + 0x00000000 + + + TEIF9 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF9 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF9 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF9 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF9 + channel x buffer transfer + complete + 4 + 1 + + + CRQA9 + channel x request active + flag + 16 + 1 + + + + + MDMA_C9IFCR + MDMA_C9IFCR + MDMA channel x interrupt flag clear + register + 0x284 + 0x20 + write-only + 0x00000000 + + + CTEIF9 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF9 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF9 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF9 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF9 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C9ESR + MDMA_C9ESR + MDMA Channel x error status + register + 0x288 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C9CR + MDMA_C9CR + This register is used to control the + concerned channel. + 0x28C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C9TCR + MDMA_C9TCR + This register is used to configure the + concerned channel. + 0x290 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C9BNDTR + MDMA_C9BNDTR + MDMA Channel x block number of data + register + 0x294 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C9SAR + MDMA_C9SAR + MDMA channel x source address + register + 0x298 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C9DAR + MDMA_C9DAR + MDMA channel x destination address + register + 0x29C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C9BRUR + MDMA_C9BRUR + MDMA channel x Block Repeat address Update + register + 0x2A0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C9LAR + MDMA_C9LAR + MDMA channel x Link Address + register + 0x2A4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C9TBR + MDMA_C9TBR + MDMA channel x Trigger and Bus selection + Register + 0x2A8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C9MAR + MDMA_C9MAR + MDMA channel x Mask address + register + 0x2B0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C9MDR + MDMA_C9MDR + MDMA channel x Mask Data + register + 0x2B4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C10ISR + MDMA_C10ISR + MDMA channel x interrupt/status + register + 0x2C0 + 0x20 + read-only + 0x00000000 + + + TEIF10 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF10 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF10 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF10 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF10 + channel x buffer transfer + complete + 4 + 1 + + + CRQA10 + channel x request active + flag + 16 + 1 + + + + + MDMA_C10IFCR + MDMA_C10IFCR + MDMA channel x interrupt flag clear + register + 0x2C4 + 0x20 + write-only + 0x00000000 + + + CTEIF10 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF10 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF10 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF10 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF10 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C10ESR + MDMA_C10ESR + MDMA Channel x error status + register + 0x2C8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C10CR + MDMA_C10CR + This register is used to control the + concerned channel. + 0x2CC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C10TCR + MDMA_C10TCR + This register is used to configure the + concerned channel. + 0x2D0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C10BNDTR + MDMA_C10BNDTR + MDMA Channel x block number of data + register + 0x2D4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C10SAR + MDMA_C10SAR + MDMA channel x source address + register + 0x2D8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C10DAR + MDMA_C10DAR + MDMA channel x destination address + register + 0x2DC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C10BRUR + MDMA_C10BRUR + MDMA channel x Block Repeat address Update + register + 0x2E0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C10LAR + MDMA_C10LAR + MDMA channel x Link Address + register + 0x2E4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C10TBR + MDMA_C10TBR + MDMA channel x Trigger and Bus selection + Register + 0x2E8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C10MAR + MDMA_C10MAR + MDMA channel x Mask address + register + 0x2F0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C10MDR + MDMA_C10MDR + MDMA channel x Mask Data + register + 0x2F4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C11ISR + MDMA_C11ISR + MDMA channel x interrupt/status + register + 0x300 + 0x20 + read-only + 0x00000000 + + + TEIF11 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF11 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF11 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF11 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF11 + channel x buffer transfer + complete + 4 + 1 + + + CRQA11 + channel x request active + flag + 16 + 1 + + + + + MDMA_C11IFCR + MDMA_C11IFCR + MDMA channel x interrupt flag clear + register + 0x304 + 0x20 + write-only + 0x00000000 + + + CTEIF11 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF11 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF11 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF11 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF11 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C11ESR + MDMA_C11ESR + MDMA Channel x error status + register + 0x308 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C11CR + MDMA_C11CR + This register is used to control the + concerned channel. + 0x30C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C11TCR + MDMA_C11TCR + This register is used to configure the + concerned channel. + 0x310 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C11BNDTR + MDMA_C11BNDTR + MDMA Channel x block number of data + register + 0x314 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C11SAR + MDMA_C11SAR + MDMA channel x source address + register + 0x318 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C11DAR + MDMA_C11DAR + MDMA channel x destination address + register + 0x31C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C11BRUR + MDMA_C11BRUR + MDMA channel x Block Repeat address Update + register + 0x320 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C11LAR + MDMA_C11LAR + MDMA channel x Link Address + register + 0x324 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C11TBR + MDMA_C11TBR + MDMA channel x Trigger and Bus selection + Register + 0x328 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C11MAR + MDMA_C11MAR + MDMA channel x Mask address + register + 0x330 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C11MDR + MDMA_C11MDR + MDMA channel x Mask Data + register + 0x334 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C12ISR + MDMA_C12ISR + MDMA channel x interrupt/status + register + 0x340 + 0x20 + read-only + 0x00000000 + + + TEIF12 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF12 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF12 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF12 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF12 + channel x buffer transfer + complete + 4 + 1 + + + CRQA12 + channel x request active + flag + 16 + 1 + + + + + MDMA_C12IFCR + MDMA_C12IFCR + MDMA channel x interrupt flag clear + register + 0x344 + 0x20 + write-only + 0x00000000 + + + CTEIF12 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF12 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF12 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF12 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF12 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C12ESR + MDMA_C12ESR + MDMA Channel x error status + register + 0x348 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C12CR + MDMA_C12CR + This register is used to control the + concerned channel. + 0x34C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C12TCR + MDMA_C12TCR + This register is used to configure the + concerned channel. + 0x350 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C12BNDTR + MDMA_C12BNDTR + MDMA Channel x block number of data + register + 0x354 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C12SAR + MDMA_C12SAR + MDMA channel x source address + register + 0x358 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C12DAR + MDMA_C12DAR + MDMA channel x destination address + register + 0x35C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C12BRUR + MDMA_C12BRUR + MDMA channel x Block Repeat address Update + register + 0x360 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C12LAR + MDMA_C12LAR + MDMA channel x Link Address + register + 0x364 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C12TBR + MDMA_C12TBR + MDMA channel x Trigger and Bus selection + Register + 0x368 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C12MAR + MDMA_C12MAR + MDMA channel x Mask address + register + 0x370 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C12MDR + MDMA_C12MDR + MDMA channel x Mask Data + register + 0x374 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C13ISR + MDMA_C13ISR + MDMA channel x interrupt/status + register + 0x380 + 0x20 + read-only + 0x00000000 + + + TEIF13 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF13 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF13 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF13 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF13 + channel x buffer transfer + complete + 4 + 1 + + + CRQA13 + channel x request active + flag + 16 + 1 + + + + + MDMA_C13IFCR + MDMA_C13IFCR + MDMA channel x interrupt flag clear + register + 0x384 + 0x20 + write-only + 0x00000000 + + + CTEIF13 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF13 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF13 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF13 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF13 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C13ESR + MDMA_C13ESR + MDMA Channel x error status + register + 0x388 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C13CR + MDMA_C13CR + This register is used to control the + concerned channel. + 0x38C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C13TCR + MDMA_C13TCR + This register is used to configure the + concerned channel. + 0x390 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C13BNDTR + MDMA_C13BNDTR + MDMA Channel x block number of data + register + 0x394 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C13SAR + MDMA_C13SAR + MDMA channel x source address + register + 0x398 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C13DAR + MDMA_C13DAR + MDMA channel x destination address + register + 0x39C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C13BRUR + MDMA_C13BRUR + MDMA channel x Block Repeat address Update + register + 0x3A0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C13LAR + MDMA_C13LAR + MDMA channel x Link Address + register + 0x3A4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C13TBR + MDMA_C13TBR + MDMA channel x Trigger and Bus selection + Register + 0x3A8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C13MAR + MDMA_C13MAR + MDMA channel x Mask address + register + 0x3B0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C13MDR + MDMA_C13MDR + MDMA channel x Mask Data + register + 0x3B4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C14ISR + MDMA_C14ISR + MDMA channel x interrupt/status + register + 0x3C0 + 0x20 + read-only + 0x00000000 + + + TEIF14 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF14 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF14 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF14 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF14 + channel x buffer transfer + complete + 4 + 1 + + + CRQA14 + channel x request active + flag + 16 + 1 + + + + + MDMA_C14IFCR + MDMA_C14IFCR + MDMA channel x interrupt flag clear + register + 0x3C4 + 0x20 + write-only + 0x00000000 + + + CTEIF14 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF14 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF14 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF14 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF14 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C14ESR + MDMA_C14ESR + MDMA Channel x error status + register + 0x3C8 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C14CR + MDMA_C14CR + This register is used to control the + concerned channel. + 0x3CC + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C14TCR + MDMA_C14TCR + This register is used to configure the + concerned channel. + 0x3D0 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C14BNDTR + MDMA_C14BNDTR + MDMA Channel x block number of data + register + 0x3D4 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C14SAR + MDMA_C14SAR + MDMA channel x source address + register + 0x3D8 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C14DAR + MDMA_C14DAR + MDMA channel x destination address + register + 0x3DC + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C14BRUR + MDMA_C14BRUR + MDMA channel x Block Repeat address Update + register + 0x3E0 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C14LAR + MDMA_C14LAR + MDMA channel x Link Address + register + 0x3E4 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C14TBR + MDMA_C14TBR + MDMA channel x Trigger and Bus selection + Register + 0x3E8 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C14MAR + MDMA_C14MAR + MDMA channel x Mask address + register + 0x3F0 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C14MDR + MDMA_C14MDR + MDMA channel x Mask Data + register + 0x3F4 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + MDMA_C15ISR + MDMA_C15ISR + MDMA channel x interrupt/status + register + 0x400 + 0x20 + read-only + 0x00000000 + + + TEIF15 + Channel x transfer error interrupt flag + This bit is set by hardware. It is cleared by + software writing 1 to the corresponding bit in the + DMA_IFCRy register. + 0 + 1 + + + CTCIF15 + Channel x Channel Transfer Complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. CTC is set when the + last block was transferred and the channel has been + automatically disabled. CTC is also set when the + channel is suspended, as a result of writing EN bit + to 0. + 1 + 1 + + + BRTIF15 + Channel x block repeat transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 2 + 1 + + + BTIF15 + Channel x block transfer complete + interrupt flag This bit is set by hardware. It is + cleared by software writing 1 to the corresponding + bit in the DMA_IFCRy register. + 3 + 1 + + + TCIF15 + channel x buffer transfer + complete + 4 + 1 + + + CRQA15 + channel x request active + flag + 16 + 1 + + + + + MDMA_C15IFCR + MDMA_C15IFCR + MDMA channel x interrupt flag clear + register + 0x404 + 0x20 + write-only + 0x00000000 + + + CTEIF15 + Channel x clear transfer error interrupt + flag Writing a 1 into this bit clears TEIFx in the + MDMA_ISRy register + 0 + 1 + + + CCTCIF15 + Clear Channel transfer complete + interrupt flag for channel x Writing a 1 into this + bit clears CTCIFx in the MDMA_ISRy + register + 1 + 1 + + + CBRTIF15 + Channel x clear block repeat transfer + complete interrupt flag Writing a 1 into this bit + clears BRTIFx in the MDMA_ISRy register + 2 + 1 + + + CBTIF15 + Channel x Clear block transfer complete + interrupt flag Writing a 1 into this bit clears BTIFx + in the MDMA_ISRy register + 3 + 1 + + + CLTCIF15 + CLear buffer Transfer Complete Interrupt + Flag for channel x Writing a 1 into this bit clears + TCIFx in the MDMA_ISRy register + 4 + 1 + + + + + MDMA_C15ESR + MDMA_C15ESR + MDMA Channel x error status + register + 0x408 + 0x20 + read-only + 0x00000000 + + + TEA + Transfer Error Address These bits are + set and cleared by HW, in case of an MDMA data + transfer error. It is used in conjunction with TED. + This field indicates the 7 LSBits of the address + which generated a transfer/access error. It may be + used by SW to retrieve the failing address, by adding + this value (truncated to the buffer transfer length + size) to the current SAR/DAR value. Note: The SAR/DAR + current value doesnt reflect this last address due to + the FIFO management system. The SAR/DAR are only + updated at the end of a (buffer) transfer (of TLEN+1 + bytes). Note: It is not set in case of a link data + error. + 0 + 7 + + + TED + Transfer Error Direction These bit is + set and cleared by HW, in case of an MDMA data + transfer error. + 7 + 1 + + + TELD + Transfer Error Link Data These bit is + set by HW, in case of a transfer error while reading + the block link data structure. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 8 + 1 + + + TEMD + Transfer Error Mask Data These bit is + set by HW, in case of a transfer error while writing + the Mask Data. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 9 + 1 + + + ASE + Address/Size Error These bit is set by + HW, when the programmed address is not aligned with + the data size. TED will indicate whether the problem + is on the source or destination. It is cleared by + software writing 1 to the CTEIFx bit in the DMA_IFCRy + register. + 10 + 1 + + + BSE + Block Size Error These bit is set by HW, + when the block size is not an integer multiple of the + data size either for source or destination. TED will + indicate whether the problem is on the source or + destination. It is cleared by software writing 1 to + the CTEIFx bit in the DMA_IFCRy + register. + 11 + 1 + + + + + MDMA_C15CR + MDMA_C15CR + This register is used to control the + concerned channel. + 0x40C + 0x20 + 0x00000000 + + + EN + channel enable + 0 + 1 + read-write + + + TEIE + Transfer error interrupt enable This bit + is set and cleared by software. + 1 + 1 + read-write + + + CTCIE + Channel Transfer Complete interrupt + enable This bit is set and cleared by + software. + 2 + 1 + read-write + + + BRTIE + Block Repeat transfer interrupt enable + This bit is set and cleared by + software. + 3 + 1 + read-write + + + BTIE + Block Transfer interrupt enable This bit + is set and cleared by software. + 4 + 1 + read-write + + + TCIE + buffer Transfer Complete interrupt + enable This bit is set and cleared by + software. + 5 + 1 + read-write + + + PL + Priority level These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0. + 6 + 2 + read-write + + + BEX + byte Endianness exchange + 12 + 1 + read-write + + + HEX + Half word Endianes + exchange + 13 + 1 + read-write + + + WEX + Word Endianness exchange + 14 + 1 + read-write + + + SWRQ + SW ReQuest Writing a 1 into this bit + sets the CRQAx in MDMA_ISRy register, activating the + request on Channel x Note: Either the whole CxCR + register or the 8-bit/16-bit register @ Address + offset: 0x4E + 0x40 chn may be used for SWRQ + activation. In case of a SW request, acknowledge is + not generated (neither HW signal, nor CxMAR write + access). + 16 + 1 + write-only + + + + + MDMA_C15TCR + MDMA_C15TCR + This register is used to configure the + concerned channel. + 0x410 + 0x20 + read-write + 0x00000000 + + + SINC + Source increment mode These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0 Note: When source is + AHB (SBUS=1), SINC = 00 is forbidden. In Linked List + Mode, at the end of a block (single or last block in + repeated block transfer mode), this register will be + loaded from memory (from address given by current + LAR[31:0] + 0x00). + 0 + 2 + + + DINC + Destination increment mode These bits + are set and cleared by software. These bits are + protected and can be written only if EN is 0 Note: + When destination is AHB (DBUS=1), DINC = 00 is + forbidden. + 2 + 2 + + + SSIZE + Source data size These bits are set and + cleared by software. These bits are protected and can + be written only if EN is 0 Note: If a value of 11 is + programmed for the TCM access/AHB port, a transfer + error will occur (TEIF bit set) If SINCOS &lt; + SSIZE and SINC &#8800; 00, the result will be + unpredictable. Note: SSIZE = 11 (double-word) is + forbidden when source is TCM/AHB bus + (SBUS=1). + 4 + 2 + + + DSIZE + Destination data size These bits are set + and cleared by software. These bits are protected and + can be written only if EN is 0. Note: If a value of + 11 is programmed for the TCM access/AHB port, a + transfer error will occur (TEIF bit set) If DINCOS + &lt; DSIZE and DINC &#8800; 00, the result + will be unpredictable. Note: DSIZE = 11 (double-word) + is forbidden when destination is TCM/AHB bus + (DBUS=1). + 6 + 2 + + + SINCOS + source increment offset + size + 8 + 2 + + + DINCOS + Destination increment + offset + 10 + 2 + + + SBURST + source burst transfer + configuration + 12 + 3 + + + DBURST + Destination burst transfer + configuration + 15 + 3 + + + TLEN + buffer transfer lengh + 18 + 7 + + + PKE + PacK Enable These bit is set and cleared + by software. If the Source Size is smaller than the + destination, it will be padded according to the PAM + value. If the Source data size is larger than the + destination one, it will be truncated. The alignment + will be done according to the PAM[0] value. This bit + is protected and can be written only if EN is + 0 + 25 + 1 + + + PAM + Padding/Alignement Mode These bits are + set and cleared by software. Case 1: Source data size + smaller than destination data size - 3 options are + valid. Case 2: Source data size larger than + destination data size. The remainder part is + discarded. When PKE = 1 or DSIZE=SSIZE, these bits + are ignored. These bits are protected and can be + written only if EN is 0 + 26 + 2 + + + TRGM + Trigger Mode These bits are set and + cleared by software. Note: If TRGM is 11 for the + current block, all the values loaded at the end of + the current block through the linked list mechanism + must keep the same value (TRGM=11) and the same SWRM + value, otherwise the result is undefined. These bits + are protected and can be written only if EN is + 0. + 28 + 2 + + + SWRM + SW Request Mode This bit is set and + cleared by software. If a HW or SW request is + currently active, the bit change will be delayed + until the current transfer is completed. If the CxMAR + contains a valid address, the CxMDR value will also + be written @ CxMAR address. This bit is protected and + can be written only if EN is 0. + 30 + 1 + + + BWM + Bufferable Write Mode This bit is set + and cleared by software. This bit is protected and + can be written only if EN is 0. Note: All MDMA + destination accesses are non-cacheable. + 31 + 1 + + + + + MDMA_C15BNDTR + MDMA_C15BNDTR + MDMA Channel x block number of data + register + 0x414 + 0x20 + read-write + 0x00000000 + + + BNDT + block number of data to + transfer + 0 + 17 + + + BRSUM + Block Repeat Source address Update Mode + These bits are protected and can be written only if + EN is 0. + 18 + 1 + + + BRDUM + Block Repeat Destination address Update + Mode These bits are protected and can be written only + if EN is 0. + 19 + 1 + + + BRC + Block Repeat Count This field contains + the number of repetitions of the current block (0 to + 4095). When the channel is enabled, this register is + read-only, indicating the remaining number of blocks, + excluding the current one. This register decrements + after each complete block transfer. Once the last + block transfer has completed, this register can + either stay at zero or be reloaded automatically from + memory (in Linked List mode - i.e. Link Address + valid). These bits are protected and can be written + only if EN is 0. + 20 + 12 + + + + + MDMA_C15SAR + MDMA_C15SAR + MDMA channel x source address + register + 0x418 + 0x20 + read-write + 0x00000000 + + + SAR + source adr base + 0 + 32 + + + + + MDMA_C15DAR + MDMA_C15DAR + MDMA channel x destination address + register + 0x41C + 0x20 + read-write + 0x00000000 + + + DAR + Destination adr base + 0 + 32 + + + + + MDMA_C15BRUR + MDMA_C15BRUR + MDMA channel x Block Repeat address Update + register + 0x420 + 0x20 + read-write + 0x00000000 + + + SUV + source adresse update + value + 0 + 16 + + + DUV + destination address update + 16 + 16 + + + + + MDMA_C15LAR + MDMA_C15LAR + MDMA channel x Link Address + register + 0x424 + 0x20 + read-write + 0x00000000 + + + LAR + Link address register + 0 + 32 + + + + + MDMA_C15TBR + MDMA_C15TBR + MDMA channel x Trigger and Bus selection + Register + 0x428 + 0x20 + read-write + 0x00000000 + + + TSEL + Trigger selection + 0 + 6 + + + SBUS + Source BUS select This bit is protected + and can be written only if EN is 0. + 16 + 1 + + + DBUS + Destination BUS slect This bit is + protected and can be written only if EN is + 0. + 17 + 1 + + + + + MDMA_C15MAR + MDMA_C15MAR + MDMA channel x Mask address + register + 0x430 + 0x20 + read-write + 0x00000000 + + + MAR + Mask address + 0 + 32 + + + + + MDMA_C15MDR + MDMA_C15MDR + MDMA channel x Mask Data + register + 0x434 + 0x20 + read-write + 0x00000000 + + + MDR + Mask data + 0 + 32 + + + + + + + QUADSPI + QUADSPI + QUADSPI + 0x52005000 + + 0x0 + 0x400 + registers + + + QUADSPI + QuadSPI global interrupt + 92 + + + + CR + CR + QUADSPI control register + 0x0 + 0x20 + read-write + 0x00000000 + + + EN + Enable Enable the QUADSPI. + 0 + 1 + + + ABORT + Abort request This bit aborts the + on-going command sequence. It is automatically reset + once the abort is complete. This bit stops the + current transfer. In polling mode or memory-mapped + mode, this bit also reset the APM bit or the DM + bit. + 1 + 1 + + + DMAEN + DMA enable In indirect mode, DMA can be + used to input or output data via the QUADSPI_DR + register. DMA transfers are initiated when the FIFO + threshold flag, FTF, is set. + 2 + 1 + + + TCEN + Timeout counter enable This bit is valid + only when memory-mapped mode (FMODE = 11) is + selected. Activating this bit causes the chip select + (nCS) to be released (and thus reduces consumption) + if there has not been an access after a certain + amount of time, where this time is defined by + TIMEOUT[15:0] (QUADSPI_LPTR). Enable the timeout + counter. By default, the QUADSPI never stops its + prefetch operation, keeping the previous read + operation active with nCS maintained low, even if no + access to the Flash memory occurs for a long time. + Since Flash memories tend to consume more when nCS is + held low, the application might want to activate the + timeout counter (TCEN = 1, QUADSPI_CR[3]) so that nCS + is released after a period of TIMEOUT[15:0] + (QUADSPI_LPTR) cycles have elapsed without an access + since when the FIFO becomes full with prefetch data. + This bit can be modified only when BUSY = + 0. + 3 + 1 + + + SSHIFT + Sample shift By default, the QUADSPI + samples data 1/2 of a CLK cycle after the data is + driven by the Flash memory. This bit allows the data + is to be sampled later in order to account for + external signal delays. Firmware must assure that + SSHIFT = 0 when in DDR mode (when DDRM = 1). This + field can be modified only when BUSY = + 0. + 4 + 1 + + + DFM + Dual-flash mode This bit activates + dual-flash mode, where two external Flash memories + are used simultaneously to double throughput and + capacity. This bit can be modified only when BUSY = + 0. + 6 + 1 + + + FSEL + Flash memory selection This bit selects + the Flash memory to be addressed in single flash mode + (when DFM = 0). This bit can be modified only when + BUSY = 0. This bit is ignored when DFM = + 1. + 7 + 1 + + + FTHRES + FIFO threshold level Defines, in + indirect mode, the threshold number of bytes in the + FIFO that will cause the FIFO threshold flag (FTF, + QUADSPI_SR[2]) to be set. In indirect write mode + (FMODE = 00): ... In indirect read mode (FMODE = 01): + ... If DMAEN = 1, then the DMA controller for the + corresponding channel must be disabled before + changing the FTHRES value. + 8 + 5 + + + TEIE + Transfer error interrupt enable This bit + enables the transfer error interrupt. + 16 + 1 + + + TCIE + Transfer complete interrupt enable This + bit enables the transfer complete + interrupt. + 17 + 1 + + + FTIE + FIFO threshold interrupt enable This bit + enables the FIFO threshold interrupt. + 18 + 1 + + + SMIE + Status match interrupt enable This bit + enables the status match interrupt. + 19 + 1 + + + TOIE + TimeOut interrupt enable This bit + enables the TimeOut interrupt. + 20 + 1 + + + APMS + Automatic poll mode stop This bit + determines if automatic polling is stopped after a + match. This bit can be modified only when BUSY = + 0. + 22 + 1 + + + PMM + Polling match mode This bit indicates + which method should be used for determining a match + during automatic polling mode. This bit can be + modified only when BUSY = 0. + 23 + 1 + + + PRESCALER + clock prescaler + 24 + 8 + + + + + DCR + DCR + QUADSPI device configuration + register + 0x4 + 0x20 + read-write + 0x00000000 + + + CKMODE + indicates the level that clk takes + between command + 0 + 1 + + + CSHT + Chip select high time CSHT+1 defines the + minimum number of CLK cycles which the chip select + (nCS) must remain high between commands issued to the + Flash memory. ... This field can be modified only + when BUSY = 0. + 8 + 3 + + + FSIZE + Flash memory size This field defines the + size of external memory using the following formula: + Number of bytes in Flash memory = 2[FSIZE+1] FSIZE+1 + is effectively the number of address bits required to + address the Flash memory. The Flash memory capacity + can be up to 4GB (addressed using 32 bits) in + indirect mode, but the addressable space in + memory-mapped mode is limited to 256MB. If DFM = 1, + FSIZE indicates the total capacity of the two Flash + memories together. This field can be modified only + when BUSY = 0. + 16 + 5 + + + + + SR + SR + QUADSPI status register + 0x8 + 0x20 + read-only + 0x00000000 + + + TEF + Transfer error flag This bit is set in + indirect mode when an invalid address is being + accessed in indirect mode. It is cleared by writing 1 + to CTEF. + 0 + 1 + + + TCF + Transfer complete flag This bit is set + in indirect mode when the programmed number of data + has been transferred or in any mode when the transfer + has been aborted.It is cleared by writing 1 to + CTCF. + 1 + 1 + + + FTF + FIFO threshold flag In indirect mode, + this bit is set when the FIFO threshold has been + reached, or if there is any data left in the FIFO + after reads from the Flash memory are complete. It is + cleared automatically as soon as threshold condition + is no longer true. In automatic polling mode this bit + is set every time the status register is read, and + the bit is cleared when the data register is + read. + 2 + 1 + + + SMF + Status match flag This bit is set in + automatic polling mode when the unmasked received + data matches the corresponding bits in the match + register (QUADSPI_PSMAR). It is cleared by writing 1 + to CSMF. + 3 + 1 + + + TOF + Timeout flag This bit is set when + timeout occurs. It is cleared by writing 1 to + CTOF. + 4 + 1 + + + BUSY + Busy This bit is set when an operation + is on going. This bit clears automatically when the + operation with the Flash memory is finished and the + FIFO is empty. + 5 + 1 + + + FLEVEL + FIFO level This field gives the number + of valid bytes which are being held in the FIFO. + FLEVEL = 0 when the FIFO is empty, and 16 when it is + full. In memory-mapped mode and in automatic status + polling mode, FLEVEL is zero. + 8 + 6 + + + + + FCR + FCR + QUADSPI flag clear register + 0xC + 0x20 + read-write + 0x00000000 + + + CTEF + Clear transfer error flag Writing 1 + clears the TEF flag in the QUADSPI_SR + register + 0 + 1 + + + CTCF + Clear transfer complete flag Writing 1 + clears the TCF flag in the QUADSPI_SR + register + 1 + 1 + + + CSMF + Clear status match flag Writing 1 clears + the SMF flag in the QUADSPI_SR register + 3 + 1 + + + CTOF + Clear timeout flag Writing 1 clears the + TOF flag in the QUADSPI_SR register + 4 + 1 + + + + + DLR + DLR + QUADSPI data length register + 0x10 + 0x20 + read-write + 0x00000000 + + + DL + Data length Number of data to be + retrieved (value+1) in indirect and status-polling + modes. A value no greater than 3 (indicating 4 bytes) + should be used for status-polling mode. All 1s in + indirect mode means undefined length, where QUADSPI + will continue until the end of memory, as defined by + FSIZE. 0x0000_0000: 1 byte is to be transferred + 0x0000_0001: 2 bytes are to be transferred + 0x0000_0002: 3 bytes are to be transferred + 0x0000_0003: 4 bytes are to be transferred ... + 0xFFFF_FFFD: 4,294,967,294 (4G-2) bytes are to be + transferred 0xFFFF_FFFE: 4,294,967,295 (4G-1) bytes + are to be transferred 0xFFFF_FFFF: undefined length + -- all bytes until the end of Flash memory (as + defined by FSIZE) are to be transferred. Continue + reading indefinitely if FSIZE = 0x1F. DL[0] is stuck + at 1 in dual-flash mode (DFM = 1) even when 0 is + written to this bit, thus assuring that each access + transfers an even number of bytes. This field has no + effect when in memory-mapped mode (FMODE = 10). This + field can be written only when BUSY = + 0. + 0 + 32 + + + + + CCR + CCR + QUADSPI communication configuration + register + 0x14 + 0x20 + read-write + 0x00000000 + + + INSTRUCTION + Instruction Instruction to be send to + the external SPI device. This field can be written + only when BUSY = 0. + 0 + 8 + + + IMODE + Instruction mode This field defines the + instruction phase mode of operation: This field can + be written only when BUSY = 0. + 8 + 2 + + + ADMODE + Address mode This field defines the + address phase mode of operation: This field can be + written only when BUSY = 0. + 10 + 2 + + + ADSIZE + Address size This bit defines address + size: This field can be written only when BUSY = + 0. + 12 + 2 + + + ABMODE + Alternate bytes mode This field defines + the alternate-bytes phase mode of operation: This + field can be written only when BUSY = + 0. + 14 + 2 + + + ABSIZE + Alternate bytes size This bit defines + alternate bytes size: This field can be written only + when BUSY = 0. + 16 + 2 + + + DCYC + Number of dummy cycles This field + defines the duration of the dummy phase. In both SDR + and DDR modes, it specifies a number of CLK cycles + (0-31). This field can be written only when BUSY = + 0. + 18 + 5 + + + DMODE + Data mode This field defines the data + phases mode of operation: This field also determines + the dummy phase mode of operation. This field can be + written only when BUSY = 0. + 24 + 2 + + + FMODE + Functional mode This field defines the + QUADSPI functional mode of operation. If DMAEN = 1 + already, then the DMA controller for the + corresponding channel must be disabled before + changing the FMODE value. This field can be written + only when BUSY = 0. + 26 + 2 + + + SIOO + Send instruction only once mode See + Section15.3.11: Sending the instruction only once on + page13. This bit has no effect when IMODE = 00. This + field can be written only when BUSY = + 0. + 28 + 1 + + + DHHC + DDR hold Delay the data output by 1/4 of + the QUADSPI output clock cycle in DDR mode: This + feature is only active in DDR mode. This field can be + written only when BUSY = 0. + 30 + 1 + + + DDRM + Double data rate mode This bit sets the + DDR mode for the address, alternate byte and data + phase: This field can be written only when BUSY = + 0. + 31 + 1 + + + + + AR + AR + QUADSPI address register + 0x18 + 0x20 + read-write + 0x00000000 + + + ADDRESS + [31 0]: Address Address to be send to + the external Flash memory Writes to this field are + ignored when BUSY = 0 or when FMODE = 11 + (memory-mapped mode). In dual flash mode, ADDRESS[0] + is automatically stuck to 0 as the address should + always be even + 0 + 32 + + + + + ABR + ABR + QUADSPI alternate bytes + registers + 0x1C + 0x20 + read-write + 0x00000000 + + + ALTERNATE + Alternate Bytes Optional data to be send + to the external SPI device right after the address. + This field can be written only when BUSY = + 0. + 0 + 32 + + + + + DR + DR + QUADSPI data register + 0x20 + 0x20 + read-write + 0x00000000 + + + DATA + Data Data to be sent/received to/from + the external SPI device. In indirect write mode, data + written to this register is stored on the FIFO before + it is sent to the Flash memory during the data phase. + If the FIFO is too full, a write operation is stalled + until the FIFO has enough space to accept the amount + of data being written. In indirect read mode, reading + this register gives (via the FIFO) the data which was + received from the Flash memory. If the FIFO does not + have as many bytes as requested by the read operation + and if BUSY=1, the read operation is stalled until + enough data is present or until the transfer is + complete, whichever happens first. In automatic + polling mode, this register contains the last data + read from the Flash memory (without masking). Word, + halfword, and byte accesses to this register are + supported. In indirect write mode, a byte write adds + 1 byte to the FIFO, a halfword write 2, and a word + write 4. Similarly, in indirect read mode, a byte + read removes 1 byte from the FIFO, a halfword read 2, + and a word read 4. Accesses in indirect mode must be + aligned to the bottom of this register: a byte read + must read DATA[7:0] and a halfword read must read + DATA[15:0]. + 0 + 32 + + + + + PSMKR + PSMKR + QUADSPI polling status mask + register + 0x24 + 0x20 + read-write + 0x00000000 + + + MASK + Status mask Mask to be applied to the + status bytes received in polling mode. For bit n: + This field can be written only when BUSY = + 0. + 0 + 32 + + + + + PSMAR + PSMAR + QUADSPI polling status match + register + 0x28 + 0x20 + read-write + 0x00000000 + + + MATCH + Status match Value to be compared with + the masked status register to get a match. This field + can be written only when BUSY = 0. + 0 + 32 + + + + + PIR + PIR + QUADSPI polling interval + register + 0x2C + 0x20 + read-write + 0x00000000 + + + INTERVAL + Polling interval Number of CLK cycles + between to read during automatic polling phases. This + field can be written only when BUSY = + 0. + 0 + 16 + + + + + LPTR + LPTR + QUADSPI low-power timeout + register + 0x30 + 0x20 + read-write + 0x00000000 + + + TIMEOUT + Timeout period After each access in + memory-mapped mode, the QUADSPI prefetches the + subsequent bytes and holds these bytes in the FIFO. + This field indicates how many CLK cycles the QUADSPI + waits after the FIFO becomes full until it raises + nCS, putting the Flash memory in a lower-consumption + state. This field can be written only when BUSY = + 0. + 0 + 16 + + + + + + + RNG + RNG + RNG + 0x48021800 + + 0x0 + 0x400 + registers + + + + CR + CR + RNG control register + 0x0 + 0x20 + read-write + 0x00000000 + + + RNGEN + Random number generator + enable + 2 + 1 + + + IE + Interrupt enable + 3 + 1 + + + CED + Clock error detection Note: The clock + error detection can be used only when ck_rc48 or + ck_pll1_q (ck_pll1_q = 48MHz) source is selected + otherwise, CED bit must be equal to 1. The clock + error detection cannot be enabled nor disabled on the + fly when RNG peripheral is enabled, to enable or + disable CED the RNG must be disabled. + 5 + 1 + + + + + SR + SR + RNG status register + 0x4 + 0x20 + 0x00000000 + + + DRDY + Data ready Note: If IE=1 in RNG_CR, an + interrupt is generated when DRDY=1. It can rise when + the peripheral is disabled. When the output buffer + becomes empty (after reading RNG_DR), this bit + returns to 0 until a new random value is + generated. + 0 + 1 + read-only + + + CECS + Clock error current status Note: This + bit is meaningless if CED (Clock error detection) bit + in RNG_CR is equal to 1. + 1 + 1 + read-only + + + SECS + Seed error current status ** More than + 64 consecutive bits at the same value (0 or 1) ** + More than 32 consecutive alternances of 0 and 1 + (0101010101...01) + 2 + 1 + read-only + + + CEIS + Clock error interrupt status This bit is + set at the same time as CECS. It is cleared by + writing it to 0. An interrupt is pending if IE = 1 in + the RNG_CR register. Note: This bit is meaningless if + CED (Clock error detection) bit in RNG_CR is equal to + 1. + 5 + 1 + read-write + + + SEIS + Seed error interrupt status This bit is + set at the same time as SECS. It is cleared by + writing it to 0. ** More than 64 consecutive bits at + the same value (0 or 1) ** More than 32 consecutive + alternances of 0 and 1 (0101010101...01) An interrupt + is pending if IE = 1 in the RNG_CR + register. + 6 + 1 + read-write + + + + + DR + DR + The RNG_DR register is a read-only register + that delivers a 32-bit random value when read. The + content of this register is valid when DRDY= 1, even if + RNGEN=0. + 0x8 + 0x20 + read-only + 0x00000000 + + + RNDATA + Random data 32-bit random data which are + valid when DRDY=1. + 0 + 32 + + + + + + + RTC + RTC + RTC + 0x58004000 + + 0x0 + 0x400 + registers + + + RTC_TAMP_STAMP_CSS_LSE + RTC tamper, timestamp + 2 + + + RTC_WKUP + RTC Wakeup interrupt + 3 + + + RTC_ALARM + RTC alarms (A and B) + 41 + + + + RTC_TR + RTC_TR + The RTC_TR is the calendar time shadow + register. This register must be written in initialization + mode only. Refer to Calendar initialization and + configuration on page9 and Reading the calendar on + page10.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x0 + 0x20 + read-write + 0x00000000 + + + SU + Second units in BCD format + 0 + 4 + + + ST + Second tens in BCD format + 4 + 3 + + + MNU + Minute units in BCD format + 8 + 4 + + + MNT + Minute tens in BCD format + 12 + 3 + + + HU + Hour units in BCD format + 16 + 4 + + + HT + Hour tens in BCD format + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + + + RTC_DR + RTC_DR + The RTC_DR is the calendar date shadow + register. This register must be written in initialization + mode only. Refer to Calendar initialization and + configuration on page9 and Reading the calendar on + page10.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x4 + 0x20 + read-write + 0x00002101 + + + DU + Date units in BCD format + 0 + 4 + + + DT + Date tens in BCD format + 4 + 2 + + + MU + Month units in BCD format + 8 + 4 + + + MT + Month tens in BCD format + 12 + 1 + + + WDU + Week day units + 13 + 3 + + + YU + Year units in BCD format + 16 + 4 + + + YT + Year tens in BCD format + 20 + 4 + + + + + RTC_CR + RTC_CR + RTC control register + 0x8 + 0x20 + 0x00000000 + + + WUCKSEL + Wakeup clock selection + 0 + 3 + read-write + + + TSEDGE + Time-stamp event active edge TSE must be + reset when TSEDGE is changed to avoid unwanted TSF + setting. + 3 + 1 + read-write + + + REFCKON + RTC_REFIN reference clock detection + enable (50 or 60Hz) Note: PREDIV_S must be + 0x00FF. + 4 + 1 + read-write + + + BYPSHAD + Bypass the shadow registers Note: If the + frequency of the APB clock is less than seven times + the frequency of RTCCLK, BYPSHAD must be set to + 1. + 5 + 1 + read-write + + + FMT + Hour format + 6 + 1 + read-write + + + ALRAE + Alarm A enable + 8 + 1 + read-write + + + ALRBE + Alarm B enable + 9 + 1 + read-write + + + WUTE + Wakeup timer enable + 10 + 1 + read-write + + + TSE + timestamp enable + 11 + 1 + read-write + + + ALRAIE + Alarm A interrupt enable + 12 + 1 + read-write + + + ALRBIE + Alarm B interrupt enable + 13 + 1 + read-write + + + WUTIE + Wakeup timer interrupt + enable + 14 + 1 + read-write + + + TSIE + Time-stamp interrupt + enable + 15 + 1 + read-write + + + ADD1H + Add 1 hour (summer time change) When + this bit is set outside initialization mode, 1 hour + is added to the calendar time. This bit is always + read as 0. + 16 + 1 + write-only + + + SUB1H + Subtract 1 hour (winter time change) + When this bit is set outside initialization mode, 1 + hour is subtracted to the calendar time if the + current hour is not 0. This bit is always read as 0. + Setting this bit has no effect when current hour is + 0. + 17 + 1 + write-only + + + BKP + Backup This bit can be written by the + user to memorize whether the daylight saving time + change has been performed or not. + 18 + 1 + read-write + + + COSEL + Calibration output selection When COE=1, + this bit selects which signal is output on RTC_CALIB. + These frequencies are valid for RTCCLK at 32.768 kHz + and prescalers at their default values (PREDIV_A=127 + and PREDIV_S=255). Refer to Section24.3.15: + Calibration clock output + 19 + 1 + read-write + + + POL + Output polarity This bit is used to + configure the polarity of RTC_ALARM + output + 20 + 1 + read-write + + + OSEL + Output selection These bits are used to + select the flag to be routed to RTC_ALARM + output + 21 + 2 + read-write + + + COE + Calibration output enable This bit + enables the RTC_CALIB output + 23 + 1 + read-write + + + ITSE + timestamp on internal event + enable + 24 + 1 + read-write + + + + + RTC_ISR + RTC_ISR + This register is write protected (except for + RTC_ISR[13:8] bits). The write access procedure is + described in RTC register write protection on + page9. + 0xC + 0x20 + 0x00000007 + + + ALRAWF + Alarm A write flag This bit is set by + hardware when Alarm A values can be changed, after + the ALRAE bit has been set to 0 in RTC_CR. It is + cleared by hardware in initialization + mode. + 0 + 1 + read-only + + + ALRBWF + Alarm B write flag This bit is set by + hardware when Alarm B values can be changed, after + the ALRBE bit has been set to 0 in RTC_CR. It is + cleared by hardware in initialization + mode. + 1 + 1 + read-only + + + WUTWF + Wakeup timer write flag This bit is set + by hardware up to 2 RTCCLK cycles after the WUTE bit + has been set to 0 in RTC_CR, and is cleared up to 2 + RTCCLK cycles after the WUTE bit has been set to 1. + The wakeup timer values can be changed when WUTE bit + is cleared and WUTWF is set. + 2 + 1 + read-only + + + SHPF + Shift operation pending This flag is set + by hardware as soon as a shift operation is initiated + by a write to the RTC_SHIFTR register. It is cleared + by hardware when the corresponding shift operation + has been executed. Writing to the SHPF bit has no + effect. + 3 + 1 + read-only + + + INITS + Initialization status flag This bit is + set by hardware when the calendar year field is + different from 0 (Backup domain reset + state). + 4 + 1 + read-only + + + RSF + Registers synchronization flag This bit + is set by hardware each time the calendar registers + are copied into the shadow registers (RTC_SSRx, + RTC_TRx and RTC_DRx). This bit is cleared by hardware + in initialization mode, while a shift operation is + pending (SHPF=1), or when in bypass shadow register + mode (BYPSHAD=1). This bit can also be cleared by + software. It is cleared either by software or by + hardware in initialization mode. + 5 + 1 + read-write + + + INITF + Initialization flag When this bit is set + to 1, the RTC is in initialization state, and the + time, date and prescaler registers can be + updated. + 6 + 1 + read-only + + + INIT + Initialization mode + 7 + 1 + read-write + + + ALRAF + Alarm A flag This flag is set by + hardware when the time/date registers (RTC_TR and + RTC_DR) match the Alarm A register (RTC_ALRMAR). This + flag is cleared by software by writing + 0. + 8 + 1 + read-write + + + ALRBF + Alarm B flag This flag is set by + hardware when the time/date registers (RTC_TR and + RTC_DR) match the Alarm B register (RTC_ALRMBR). This + flag is cleared by software by writing + 0. + 9 + 1 + read-write + + + WUTF + Wakeup timer flag This flag is set by + hardware when the wakeup auto-reload counter reaches + 0. This flag is cleared by software by writing 0. + This flag must be cleared by software at least 1.5 + RTCCLK periods before WUTF is set to 1 + again. + 10 + 1 + read-write + + + TSF + Time-stamp flag This flag is set by + hardware when a time-stamp event occurs. This flag is + cleared by software by writing 0. + 11 + 1 + read-write + + + TSOVF + Time-stamp overflow flag This flag is + set by hardware when a time-stamp event occurs while + TSF is already set. This flag is cleared by software + by writing 0. It is recommended to check and then + clear TSOVF only after clearing the TSF bit. + Otherwise, an overflow might not be noticed if a + time-stamp event occurs immediately before the TSF + bit is cleared. + 12 + 1 + read-write + + + TAMP1F + RTC_TAMP1 detection flag This flag is + set by hardware when a tamper detection event is + detected on the RTC_TAMP1 input. It is cleared by + software writing 0 + 13 + 1 + read-write + + + TAMP2F + RTC_TAMP2 detection flag This flag is + set by hardware when a tamper detection event is + detected on the RTC_TAMP2 input. It is cleared by + software writing 0 + 14 + 1 + read-write + + + TAMP3F + RTC_TAMP3 detection flag This flag is + set by hardware when a tamper detection event is + detected on the RTC_TAMP3 input. It is cleared by + software writing 0 + 15 + 1 + read-write + + + RECALPF + Recalibration pending Flag The RECALPF + status flag is automatically set to 1 when software + writes to the RTC_CALR register, indicating that the + RTC_CALR register is blocked. When the new + calibration settings are taken into account, this bit + returns to 0. Refer to Re-calibration + on-the-fly. + 16 + 1 + read-only + + + ITSF + Internal tTime-stamp flag + 17 + 1 + read-write + + + + + RTC_PRER + RTC_PRER + This register must be written in + initialization mode only. The initialization must be + performed in two separate write accesses. Refer to + Calendar initialization and configuration on page9.This + register is write protected. The write access procedure + is described in RTC register write protection on + page9. + 0x10 + 0x20 + read-write + 0x007F00FF + + + PREDIV_S + Synchronous prescaler factor This is the + synchronous division factor: ck_spre frequency = + ck_apre frequency/(PREDIV_S+1) + 0 + 15 + + + PREDIV_A + Asynchronous prescaler factor This is + the asynchronous division factor: ck_apre frequency = + RTCCLK frequency/(PREDIV_A+1) + 16 + 7 + + + + + RTC_WUTR + RTC_WUTR + This register can be written only when WUTWF + is set to 1 in RTC_ISR.This register is write protected. + The write access procedure is described in RTC register + write protection on page9. + 0x14 + 0x20 + read-write + 0x0000FFFF + + + WUT + Wakeup auto-reload value bits When the + wakeup timer is enabled (WUTE set to 1), the WUTF + flag is set every (WUT[15:0] + 1) ck_wut cycles. The + ck_wut period is selected through WUCKSEL[2:0] bits + of the RTC_CR register When WUCKSEL[2] = 1, the + wakeup timer becomes 17-bits and WUCKSEL[1] + effectively becomes WUT[16] the most-significant bit + to be reloaded into the timer. The first assertion of + WUTF occurs (WUT+1) ck_wut cycles after WUTE is set. + Setting WUT[15:0] to 0x0000 with WUCKSEL[2:0] =011 + (RTCCLK/2) is forbidden. + 0 + 16 + + + + + RTC_ALRMAR + RTC_ALRMAR + This register can be written only when + ALRAWF is set to 1 in RTC_ISR, or in initialization + mode.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x1C + 0x20 + read-write + 0x00000000 + + + SU + Second units in BCD + format. + 0 + 4 + + + ST + Second tens in BCD format. + 4 + 3 + + + MSK1 + Alarm A seconds mask + 7 + 1 + + + MNU + Minute units in BCD + format. + 8 + 4 + + + MNT + Minute tens in BCD format. + 12 + 3 + + + MSK2 + Alarm A minutes mask + 15 + 1 + + + HU + Hour units in BCD format. + 16 + 4 + + + HT + Hour tens in BCD format. + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + MSK3 + Alarm A hours mask + 23 + 1 + + + DU + Date units or day in BCD + format. + 24 + 4 + + + DT + Date tens in BCD format. + 28 + 2 + + + WDSEL + Week day selection + 30 + 1 + + + MSK4 + Alarm A date mask + 31 + 1 + + + + + RTC_ALRMBR + RTC_ALRMBR + This register can be written only when + ALRBWF is set to 1 in RTC_ISR, or in initialization + mode.This register is write protected. The write access + procedure is described in RTC register write protection + on page9. + 0x20 + 0x20 + read-write + 0x00000000 + + + SU + Second units in BCD format + 0 + 4 + + + ST + Second tens in BCD format + 4 + 3 + + + MSK1 + Alarm B seconds mask + 7 + 1 + + + MNU + Minute units in BCD format + 8 + 4 + + + MNT + Minute tens in BCD format + 12 + 3 + + + MSK2 + Alarm B minutes mask + 15 + 1 + + + HU + Hour units in BCD format + 16 + 4 + + + HT + Hour tens in BCD format + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + MSK3 + Alarm B hours mask + 23 + 1 + + + DU + Date units or day in BCD + format + 24 + 4 + + + DT + Date tens in BCD format + 28 + 2 + + + WDSEL + Week day selection + 30 + 1 + + + MSK4 + Alarm B date mask + 31 + 1 + + + + + RTC_WPR + RTC_WPR + RTC write protection register + 0x24 + 0x20 + write-only + 0x00000000 + + + KEY + Write protection key This byte is + written by software. Reading this byte always returns + 0x00. Refer to RTC register write protection for a + description of how to unlock RTC register write + protection. + 0 + 8 + + + + + RTC_SSR + RTC_SSR + RTC sub second register + 0x28 + 0x20 + read-only + 0x00000000 + + + SS + Sub second value SS[15:0] is the value + in the synchronous prescaler counter. The fraction of + a second is given by the formula below: Second + fraction = (PREDIV_S - SS) / (PREDIV_S + 1) Note: SS + can be larger than PREDIV_S only after a shift + operation. In that case, the correct time/date is one + second less than as indicated by + RTC_TR/RTC_DR. + 0 + 16 + + + + + RTC_SHIFTR + RTC_SHIFTR + This register is write protected. The write + access procedure is described in RTC register write + protection on page9. + 0x2C + 0x20 + write-only + 0x00000000 + + + SUBFS + Subtract a fraction of a second These + bits are write only and is always read as zero. + Writing to this bit has no effect when a shift + operation is pending (when SHPF=1, in RTC_ISR). The + value which is written to SUBFS is added to the + synchronous prescaler counter. Since this counter + counts down, this operation effectively subtracts + from (delays) the clock by: Delay (seconds) = SUBFS / + (PREDIV_S + 1) A fraction of a second can effectively + be added to the clock (advancing the clock) when the + ADD1S function is used in conjunction with SUBFS, + effectively advancing the clock by: Advance (seconds) + = (1 - (SUBFS / (PREDIV_S + 1))). Note: Writing to + SUBFS causes RSF to be cleared. Software can then + wait until RSF=1 to be sure that the shadow registers + have been updated with the shifted + time. + 0 + 15 + + + ADD1S + Add one second This bit is write only + and is always read as zero. Writing to this bit has + no effect when a shift operation is pending (when + SHPF=1, in RTC_ISR). This function is intended to be + used with SUBFS (see description below) in order to + effectively add a fraction of a second to the clock + in an atomic operation. + 31 + 1 + + + + + RTC_TSTR + RTC_TSTR + The content of this register is valid only + when TSF is set to 1 in RTC_ISR. It is cleared when TSF + bit is reset. + 0x30 + 0x20 + read-only + 0x00000000 + + + SU + Second units in BCD + format. + 0 + 4 + + + ST + Second tens in BCD format. + 4 + 3 + + + MNU + Minute units in BCD + format. + 8 + 4 + + + MNT + Minute tens in BCD format. + 12 + 3 + + + HU + Hour units in BCD format. + 16 + 4 + + + HT + Hour tens in BCD format. + 20 + 2 + + + PM + AM/PM notation + 22 + 1 + + + + + RTC_TSDR + RTC_TSDR + The content of this register is valid only + when TSF is set to 1 in RTC_ISR. It is cleared when TSF + bit is reset. + 0x34 + 0x20 + read-only + 0x00000000 + + + DU + Date units in BCD format + 0 + 4 + + + DT + Date tens in BCD format + 4 + 2 + + + MU + Month units in BCD format + 8 + 4 + + + MT + Month tens in BCD format + 12 + 1 + + + WDU + Week day units + 13 + 3 + + + + + RTC_TSSSR + RTC_TSSSR + The content of this register is valid only + when RTC_ISR/TSF is set. It is cleared when the + RTC_ISR/TSF bit is reset. + 0x38 + 0x20 + read-only + 0x00000000 + + + SS + Sub second value SS[15:0] is the value + of the synchronous prescaler counter when the + timestamp event occurred. + 0 + 16 + + + + + RTC_CALR + RTC_CALR + This register is write protected. The write + access procedure is described in RTC register write + protection on page9. + 0x3C + 0x20 + read-write + 0x00000000 + + + CALM + Calibration minus The frequency of the + calendar is reduced by masking CALM out of 220 RTCCLK + pulses (32 seconds if the input frequency is 32768 + Hz). This decreases the frequency of the calendar + with a resolution of 0.9537 ppm. To increase the + frequency of the calendar, this feature should be + used in conjunction with CALP. See Section24.3.12: + RTC smooth digital calibration on + page13. + 0 + 9 + + + CALW16 + Use a 16-second calibration cycle period + When CALW16 is set to 1, the 16-second calibration + cycle period is selected.This bit must not be set to + 1 if CALW8=1. Note: CALM[0] is stuck at 0 when + CALW16= 1. Refer to Section24.3.12: RTC smooth + digital calibration. + 13 + 1 + + + CALW8 + Use an 8-second calibration cycle period + When CALW8 is set to 1, the 8-second calibration + cycle period is selected. Note: CALM[1:0] are stuck + at 00; when CALW8= 1. Refer to Section24.3.12: RTC + smooth digital calibration. + 14 + 1 + + + CALP + Increase frequency of RTC by 488.5 ppm + This feature is intended to be used in conjunction + with CALM, which lowers the frequency of the calendar + with a fine resolution. if the input frequency is + 32768 Hz, the number of RTCCLK pulses added during a + 32-second window is calculated as follows: (512 * + CALP) - CALM. Refer to Section24.3.12: RTC smooth + digital calibration. + 15 + 1 + + + + + RTC_TAMPCR + RTC_TAMPCR + RTC tamper and alternate function + configuration register + 0x40 + 0x20 + read-write + 0x00000000 + + + TAMP1E + RTC_TAMP1 input detection + enable + 0 + 1 + + + TAMP1TRG + Active level for RTC_TAMP1 input If + TAMPFLT != 00 if TAMPFLT = 00: + 1 + 1 + + + TAMPIE + Tamper interrupt enable + 2 + 1 + + + TAMP2E + RTC_TAMP2 input detection + enable + 3 + 1 + + + TAMP2TRG + Active level for RTC_TAMP2 input if + TAMPFLT != 00: if TAMPFLT = 00: + 4 + 1 + + + TAMP3E + RTC_TAMP3 detection enable + 5 + 1 + + + TAMP3TRG + Active level for RTC_TAMP3 input if + TAMPFLT != 00: if TAMPFLT = 00: + 6 + 1 + + + TAMPTS + Activate timestamp on tamper detection + event TAMPTS is valid even if TSE=0 in the RTC_CR + register. + 7 + 1 + + + TAMPFREQ + Tamper sampling frequency Determines the + frequency at which each of the RTC_TAMPx inputs are + sampled. + 8 + 3 + + + TAMPFLT + RTC_TAMPx filter count These bits + determines the number of consecutive samples at the + specified level (TAMP*TRG) needed to activate a + Tamper event. TAMPFLT is valid for each of the + RTC_TAMPx inputs. + 11 + 2 + + + TAMPPRCH + RTC_TAMPx precharge duration These bit + determines the duration of time during which the + pull-up/is activated before each sample. TAMPPRCH is + valid for each of the RTC_TAMPx inputs. + 13 + 2 + + + TAMPPUDIS + RTC_TAMPx pull-up disable This bit + determines if each of the RTC_TAMPx pins are + pre-charged before each sample. + 15 + 1 + + + TAMP1IE + Tamper 1 interrupt enable + 16 + 1 + + + TAMP1NOERASE + Tamper 1 no erase + 17 + 1 + + + TAMP1MF + Tamper 1 mask flag + 18 + 1 + + + TAMP2IE + Tamper 2 interrupt enable + 19 + 1 + + + TAMP2NOERASE + Tamper 2 no erase + 20 + 1 + + + TAMP2MF + Tamper 2 mask flag + 21 + 1 + + + TAMP3IE + Tamper 3 interrupt enable + 22 + 1 + + + TAMP3NOERASE + Tamper 3 no erase + 23 + 1 + + + TAMP3MF + Tamper 3 mask flag + 24 + 1 + + + + + RTC_ALRMASSR + RTC_ALRMASSR + This register can be written only when ALRAE + is reset in RTC_CR register, or in initialization + mode.This register is write protected. The write access + procedure is described in RTC register write protection + on page9 + 0x44 + 0x20 + read-write + 0x00000000 + + + SS + Sub seconds value This value is compared + with the contents of the synchronous prescaler + counter to determine if Alarm A is to be activated. + Only bits 0 up MASKSS-1 are compared. + 0 + 15 + + + MASKSS + Mask the most-significant bits starting + at this bit ... The overflow bits of the synchronous + counter (bits 15) is never compared. This bit can be + different from 0 only after a shift + operation. + 24 + 4 + + + + + RTC_ALRMBSSR + RTC_ALRMBSSR + This register can be written only when ALRBE + is reset in RTC_CR register, or in initialization + mode.This register is write protected.The write access + procedure is described in Section: RTC register write + protection. + 0x48 + 0x20 + read-write + 0x00000000 + + + SS + Sub seconds value This value is compared + with the contents of the synchronous prescaler + counter to determine if Alarm B is to be activated. + Only bits 0 up to MASKSS-1 are + compared. + 0 + 15 + + + MASKSS + Mask the most-significant bits starting + at this bit ... The overflow bits of the synchronous + counter (bits 15) is never compared. This bit can be + different from 0 only after a shift + operation. + 24 + 4 + + + + + RTC_BKP0R + RTC_BKP0R + RTC backup registers + 0x50 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP1R + RTC_BKP1R + RTC backup registers + 0x54 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP2R + RTC_BKP2R + RTC backup registers + 0x58 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP3R + RTC_BKP3R + RTC backup registers + 0x5C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP4R + RTC_BKP4R + RTC backup registers + 0x60 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP5R + RTC_BKP5R + RTC backup registers + 0x64 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP6R + RTC_BKP6R + RTC backup registers + 0x68 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP7R + RTC_BKP7R + RTC backup registers + 0x6C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP8R + RTC_BKP8R + RTC backup registers + 0x70 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP9R + RTC_BKP9R + RTC backup registers + 0x74 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP10R + RTC_BKP10R + RTC backup registers + 0x78 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP11R + RTC_BKP11R + RTC backup registers + 0x7C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP12R + RTC_BKP12R + RTC backup registers + 0x80 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP13R + RTC_BKP13R + RTC backup registers + 0x84 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP14R + RTC_BKP14R + RTC backup registers + 0x88 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP15R + RTC_BKP15R + RTC backup registers + 0x8C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_OR + RTC_OR + RTC option register + 0x4C + 0x20 + read-write + 0x00000000 + + + RTC_ALARM_TYPE + RTC_ALARM output type on + PC13 + 0 + 1 + + + RTC_OUT_RMP + RTC_OUT remap + 1 + 1 + + + + + RTC_BKP16R + RTC_BKP16R + RTC backup registers + 0x90 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP17R + RTC_BKP17R + RTC backup registers + 0x94 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP18R + RTC_BKP18R + RTC backup registers + 0x98 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP19R + RTC_BKP19R + RTC backup registers + 0x9C + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP20R + RTC_BKP20R + RTC backup registers + 0xA0 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP21R + RTC_BKP21R + RTC backup registers + 0xA4 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP22R + RTC_BKP22R + RTC backup registers + 0xA8 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP23R + RTC_BKP23R + RTC backup registers + 0xAC + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP24R + RTC_BKP24R + RTC backup registers + 0xB0 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP25R + RTC_BKP25R + RTC backup registers + 0xB4 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP26R + RTC_BKP26R + RTC backup registers + 0xB8 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP27R + RTC_BKP27R + RTC backup registers + 0xBC + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP28R + RTC_BKP28R + RTC backup registers + 0xC0 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP29R + RTC_BKP29R + RTC backup registers + 0xC4 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP30R + RTC_BKP30R + RTC backup registers + 0xC8 + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + RTC_BKP31R + RTC_BKP31R + RTC backup registers + 0xCC + 0x20 + read-write + 0x00000000 + + + BKP + The application can write or read data + to and from these registers. They are powered-on by + VBAT when VDD is switched off, so that they are not + reset by System reset, and their contents remain + valid when the device operates in low-power mode. + This register is reset on a tamper detection event, + as long as TAMPxF=1. or when the Flash readout + protection is disabled. + 0 + 32 + + + + + + + SAI4 + SAI + SAI + 0x58005400 + + 0x0 + 0x400 + registers + + + SAI4 + SAI4 global interrupt + 146 + + + + SAI_GCR + SAI_GCR + Global configuration register + 0x0 + 0x20 + read-write + 0x00000000 + + + SYNCOUT + Synchronization outputs These bits are + set and cleared by software. + 4 + 2 + + + SYNCIN + Synchronization inputs + 0 + 2 + + + + + SAI_ACR1 + SAI_ACR1 + Configuration register 1 + 0x4 + 0x20 + read-write + 0x00000040 + + + MODE + SAIx audio block mode + immediately + 0 + 2 + + + PRTCFG + Protocol configuration. These bits are + set and cleared by software. These bits have to be + configured when the audio block is + disabled. + 2 + 2 + + + DS + Data size. These bits are set and + cleared by software. These bits are ignored when the + SPDIF protocols are selected (bit PRTCFG[1:0]), + because the frame and the data size are fixed in such + case. When the companding mode is selected through + COMP[1:0] bits, DS[1:0] are ignored since the data + size is fixed to 8 bits by the algorithm. These bits + must be configured when the audio block is + disabled. + 5 + 3 + + + LSBFIRST + Least significant bit first. This bit is + set and cleared by software. It must be configured + when the audio block is disabled. This bit has no + meaning in AC97 audio protocol since AC97 data are + always transferred with the MSB first. This bit has + no meaning in SPDIF audio protocol since in SPDIF + data are always transferred with LSB + first. + 8 + 1 + + + CKSTR + Clock strobing edge. This bit is set and + cleared by software. It must be configured when the + audio block is disabled. This bit has no meaning in + SPDIF audio protocol. + 9 + 1 + + + SYNCEN + Synchronization enable. These bits are + set and cleared by software. They must be configured + when the audio sub-block is disabled. Note: The audio + sub-block should be configured as asynchronous when + SPDIF mode is enabled. + 10 + 2 + + + MONO + Mono mode. This bit is set and cleared + by software. It is meaningful only when the number of + slots is equal to 2. When the mono mode is selected, + slot 0 data are duplicated on slot 1 when the audio + block operates as a transmitter. In reception mode, + the slot1 is discarded and only the data received + from slot 0 are stored. Refer to Section: Mono/stereo + mode for more details. + 12 + 1 + + + OUTDRIV + Output drive. This bit is set and + cleared by software. Note: This bit has to be set + before enabling the audio block and after the audio + block configuration. + 13 + 1 + + + SAIXEN + Audio block enable where x is A or B. + This bit is set by software. To switch off the audio + block, the application software must program this bit + to 0 and poll the bit till it reads back 0, meaning + that the block is completely disabled. Before setting + this bit to 1, check that it is set to 0, otherwise + the enable command will not be taken into account. + This bit allows to control the state of SAIx audio + block. If it is disabled when an audio frame transfer + is ongoing, the ongoing transfer completes and the + cell is fully disabled at the end of this audio frame + transfer. Note: When SAIx block is configured in + master mode, the clock must be present on the input + of SAIx before setting SAIXEN bit. + 16 + 1 + + + DMAEN + DMA enable. This bit is set and cleared + by software. Note: Since the audio block defaults to + operate as a transmitter after reset, the MODE[1:0] + bits must be configured before setting DMAEN to avoid + a DMA request in receiver mode. + 17 + 1 + + + NOMCK + No divider + 19 + 1 + + + MCKDIV + Master clock divider. These bits are set + and cleared by software. These bits are meaningless + when the audio block operates in slave mode. They + have to be configured when the audio block is + disabled. Others: the master clock frequency is + calculated accordingly to the following + formula: + 20 + 4 + + + OSR + Oversampling ratio for master + clock + 26 + 1 + + + + + SAI_ACR2 + SAI_ACR2 + Configuration register 2 + 0x8 + 0x20 + 0x00000000 + + + FTH + FIFO threshold. This bit is set and + cleared by software. + 0 + 3 + read-write + + + FFLUSH + FIFO flush. This bit is set by software. + It is always read as 0. This bit should be configured + when the SAI is disabled. + 3 + 1 + write-only + + + TRIS + Tristate management on data line. This + bit is set and cleared by software. It is meaningful + only if the audio block is configured as a + transmitter. This bit is not used when the audio + block is configured in SPDIF mode. It should be + configured when SAI is disabled. Refer to Section: + Output data line management on an inactive slot for + more details. + 4 + 1 + read-write + + + MUTE + Mute. This bit is set and cleared by + software. It is meaningful only when the audio block + operates as a transmitter. The MUTE value is linked + to value of MUTEVAL if the number of slots is lower + or equal to 2, or equal to 0 if it is greater than 2. + Refer to Section: Mute mode for more details. Note: + This bit is meaningless and should not be used for + SPDIF audio blocks. + 5 + 1 + read-write + + + MUTEVAL + Mute value. This bit is set and cleared + by software.It must be written before enabling the + audio block: SAIXEN. This bit is meaningful only when + the audio block operates as a transmitter, the number + of slots is lower or equal to 2 and the MUTE bit is + set. If more slots are declared, the bit value sent + during the transmission in mute mode is equal to 0, + whatever the value of MUTEVAL. if the number of slot + is lower or equal to 2 and MUTEVAL = 1, the MUTE + value transmitted for each slot is the one sent + during the previous frame. Refer to Section: Mute + mode for more details. Note: This bit is meaningless + and should not be used for SPDIF audio + blocks. + 6 + 1 + read-write + + + MUTECNT + Mute counter. These bits are set and + cleared by software. They are used only in reception + mode. The value set in these bits is compared to the + number of consecutive mute frames detected in + reception. When the number of mute frames is equal to + this value, the flag MUTEDET will be set and an + interrupt will be generated if bit MUTEDETIE is set. + Refer to Section: Mute mode for more + details. + 7 + 6 + read-write + + + CPL + Complement bit. This bit is set and + cleared by software. It defines the type of + complement to be used for companding mode Note: This + bit has effect only when the companding mode is -Law + algorithm or A-Law algorithm. + 13 + 1 + read-write + + + COMP + Companding mode. These bits are set and + cleared by software. The -Law and the A-Law log are a + part of the CCITT G.711 recommendation, the type of + complement that will be used depends on CPL bit. The + data expansion or data compression are determined by + the state of bit MODE[0]. The data compression is + applied if the audio block is configured as a + transmitter. The data expansion is automatically + applied when the audio block is configured as a + receiver. Refer to Section: Companding mode for more + details. Note: Companding mode is applicable only + when TDM is selected. + 14 + 2 + read-write + + + + + SAI_AFRCR + SAI_AFRCR + This register has no meaning in AC97 and + SPDIF audio protocol + 0xC + 0x20 + 0x00000007 + + + FRL + Frame length. These bits are set and + cleared by software. They define the audio frame + length expressed in number of SCK clock cycles: the + number of bits in the frame is equal to FRL[7:0] + 1. + The minimum number of bits to transfer in an audio + frame must be equal to 8, otherwise the audio block + will behaves in an unexpected way. This is the case + when the data size is 8 bits and only one slot 0 is + defined in NBSLOT[4:0] of SAI_xSLOTR register + (NBSLOT[3:0] = 0000). In master mode, if the master + clock (available on MCLK_x pin) is used, the frame + length should be aligned with a number equal to a + power of 2, ranging from 8 to 256. When the master + clock is not used (NODIV = 1), it is recommended to + program the frame length to an value ranging from 8 + to 256. These bits are meaningless and are not used + in AC97 or SPDIF audio block + configuration. + 0 + 8 + read-write + + + FSALL + Frame synchronization active level + length. These bits are set and cleared by software. + They specify the length in number of bit clock (SCK) + + 1 (FSALL[6:0] + 1) of the active level of the FS + signal in the audio frame These bits are meaningless + and are not used in AC97 or SPDIF audio block + configuration. They must be configured when the audio + block is disabled. + 8 + 7 + read-write + + + FSDEF + Frame synchronization definition. This + bit is set and cleared by software. When the bit is + set, the number of slots defined in the SAI_xSLOTR + register has to be even. It means that half of this + number of slots will be dedicated to the left channel + and the other slots for the right channel (e.g: this + bit has to be set for I2S or MSB/LSB-justified + protocols...). This bit is meaningless and is not + used in AC97 or SPDIF audio block configuration. It + must be configured when the audio block is + disabled. + 16 + 1 + read-only + + + FSPOL + Frame synchronization polarity. This bit + is set and cleared by software. It is used to + configure the level of the start of frame on the FS + signal. It is meaningless and is not used in AC97 or + SPDIF audio block configuration. This bit must be + configured when the audio block is + disabled. + 17 + 1 + read-write + + + FSOFF + Frame synchronization offset. This bit + is set and cleared by software. It is meaningless and + is not used in AC97 or SPDIF audio block + configuration. This bit must be configured when the + audio block is disabled. + 18 + 1 + read-write + + + + + SAI_ASLOTR + SAI_ASLOTR + This register has no meaning in AC97 and + SPDIF audio protocol + 0x10 + 0x20 + read-write + 0x00000000 + + + FBOFF + First bit offset These bits are set and + cleared by software. The value set in this bitfield + defines the position of the first data transfer bit + in the slot. It represents an offset value. In + transmission mode, the bits outside the data field + are forced to 0. In reception mode, the extra + received bits are discarded. These bits must be set + when the audio block is disabled. They are ignored in + AC97 or SPDIF mode. + 0 + 5 + + + SLOTSZ + Slot size This bits is set and cleared + by software. The slot size must be higher or equal to + the data size. If this condition is not respected, + the behavior of the SAI will be undetermined. Refer + to Section: Output data line management on an + inactive slot for information on how to drive SD + line. These bits must be set when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 6 + 2 + + + NBSLOT + Number of slots in an audio frame. These + bits are set and cleared by software. The value set + in this bitfield represents the number of slots + 1 + in the audio frame (including the number of inactive + slots). The maximum number of slots is 16. The number + of slots should be even if FSDEF bit in the SAI_xFRCR + register is set. The number of slots must be + configured when the audio block is disabled. They are + ignored in AC97 or SPDIF mode. + 8 + 4 + + + SLOTEN + Slot enable. These bits are set and + cleared by software. Each SLOTEN bit corresponds to a + slot position from 0 to 15 (maximum 16 slots). The + slot must be enabled when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 16 + 16 + + + + + SAI_AIM + SAI_AIM + Interrupt mask register 2 + 0x14 + 0x20 + read-write + 0x00000000 + + + OVRUDRIE + Overrun/underrun interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the OVRUDR bit in + the SAI_xSR register is set. + 0 + 1 + + + MUTEDETIE + Mute detection interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the MUTEDET bit in + the SAI_xSR register is set. This bit has a meaning + only if the audio block is configured in receiver + mode. + 1 + 1 + + + WCKCFGIE + Wrong clock configuration interrupt + enable. This bit is set and cleared by software. This + bit is taken into account only if the audio block is + configured as a master (MODE[1] = 0) and NODIV = 0. + It generates an interrupt if the WCKCFG flag in the + SAI_xSR register is set. Note: This bit is used only + in TDM mode and is meaningless in other + modes. + 2 + 1 + + + FREQIE + FIFO request interrupt enable. This bit + is set and cleared by software. When this bit is set, + an interrupt is generated if the FREQ bit in the + SAI_xSR register is set. Since the audio block + defaults to operate as a transmitter after reset, the + MODE bit must be configured before setting FREQIE to + avoid a parasitic interruption in receiver + mode, + 3 + 1 + + + CNRDYIE + Codec not ready interrupt enable (AC97). + This bit is set and cleared by software. When the + interrupt is enabled, the audio block detects in the + slot 0 (tag0) of the AC97 frame if the Codec + connected to this line is ready or not. If it is not + ready, the CNRDY flag in the SAI_xSR register is set + and an interruption i generated. This bit has a + meaning only if the AC97 mode is selected through + PRTCFG[1:0] bits and the audio block is operates as a + receiver. + 4 + 1 + + + AFSDETIE + Anticipated frame synchronization + detection interrupt enable. This bit is set and + cleared by software. When this bit is set, an + interrupt will be generated if the AFSDET bit in the + SAI_xSR register is set. This bit is meaningless in + AC97, SPDIF mode or when the audio block operates as + a master. + 5 + 1 + + + LFSDETIE + Late frame synchronization detection + interrupt enable. This bit is set and cleared by + software. When this bit is set, an interrupt will be + generated if the LFSDET bit is set in the SAI_xSR + register. This bit is meaningless in AC97, SPDIF mode + or when the audio block operates as a + master. + 6 + 1 + + + + + SAI_ASR + SAI_ASR + Status register + 0x18 + 0x20 + read-only + 0x00000008 + + + OVRUDR + Overrun / underrun. This bit is read + only. The overrun and underrun conditions can occur + only when the audio block is configured as a receiver + and a transmitter, respectively. It can generate an + interrupt if OVRUDRIE bit is set in SAI_xIM register. + This flag is cleared when the software sets COVRUDR + bit in SAI_xCLRFR register. + 0 + 1 + + + MUTEDET + Mute detection. This bit is read only. + This flag is set if consecutive 0 values are received + in each slot of a given audio frame and for a + consecutive number of audio frames (set in the + MUTECNT bit in the SAI_xCR2 register). It can + generate an interrupt if MUTEDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets bit CMUTEDET in the SAI_xCLRFR + register. + 1 + 1 + + + WCKCFG + Wrong clock configuration flag. This bit + is read only. This bit is used only when the audio + block operates in master mode (MODE[1] = 0) and NODIV + = 0. It can generate an interrupt if WCKCFGIE bit is + set in SAI_xIM register. This flag is cleared when + the software sets CWCKCFG bit in SAI_xCLRFR + register. + 2 + 1 + + + FREQ + FIFO request. This bit is read only. The + request depends on the audio block configuration: If + the block is configured in transmission mode, the + FIFO request is related to a write request operation + in the SAI_xDR. If the block configured in reception, + the FIFO request related to a read request operation + from the SAI_xDR. This flag can generate an interrupt + if FREQIE bit is set in SAI_xIM + register. + 3 + 1 + + + CNRDY + Codec not ready. This bit is read only. + This bit is used only when the AC97 audio protocol is + selected in the SAI_xCR1 register and configured in + receiver mode. It can generate an interrupt if + CNRDYIE bit is set in SAI_xIM register. This flag is + cleared when the software sets CCNRDY bit in + SAI_xCLRFR register. + 4 + 1 + + + AFSDET + Anticipated frame synchronization + detection. This bit is read only. This flag can be + set only if the audio block is configured in slave + mode. It is not used in AC97or SPDIF mode. It can + generate an interrupt if AFSDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets CAFSDET bit in SAI_xCLRFR + register. + 5 + 1 + + + LFSDET + Late frame synchronization detection. + This bit is read only. This flag can be set only if + the audio block is configured in slave mode. It is + not used in AC97 or SPDIF mode. It can generate an + interrupt if LFSDETIE bit is set in the SAI_xIM + register. This flag is cleared when the software sets + bit CLFSDET in SAI_xCLRFR register + 6 + 1 + + + FLVL + FIFO level threshold. This bit is read + only. The FIFO level threshold flag is managed only + by hardware and its setting depends on SAI block + configuration (transmitter or receiver mode). If the + SAI block is configured as transmitter: If SAI block + is configured as receiver: + 16 + 3 + + + + + SAI_ACLRFR + SAI_ACLRFR + Clear flag register + 0x1C + 0x20 + write-only + 0x00000000 + + + COVRUDR + Clear overrun / underrun. This bit is + write only. Programming this bit to 1 clears the + OVRUDR flag in the SAI_xSR register. Reading this bit + always returns the value 0. + 0 + 1 + + + CMUTEDET + Mute detection flag. This bit is write + only. Programming this bit to 1 clears the MUTEDET + flag in the SAI_xSR register. Reading this bit always + returns the value 0. + 1 + 1 + + + CWCKCFG + Clear wrong clock configuration flag. + This bit is write only. Programming this bit to 1 + clears the WCKCFG flag in the SAI_xSR register. This + bit is used only when the audio block is set as + master (MODE[1] = 0) and NODIV = 0 in the SAI_xCR1 + register. Reading this bit always returns the value + 0. + 2 + 1 + + + CCNRDY + Clear Codec not ready flag. This bit is + write only. Programming this bit to 1 clears the + CNRDY flag in the SAI_xSR register. This bit is used + only when the AC97 audio protocol is selected in the + SAI_xCR1 register. Reading this bit always returns + the value 0. + 4 + 1 + + + CAFSDET + Clear anticipated frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the AFSDET flag in the SAI_xSR + register. It is not used in AC97or SPDIF mode. + Reading this bit always returns the value + 0. + 5 + 1 + + + CLFSDET + Clear late frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the LFSDET flag in the SAI_xSR + register. This bit is not used in AC97or SPDIF mode + Reading this bit always returns the value + 0. + 6 + 1 + + + + + SAI_ADR + SAI_ADR + Data register + 0x20 + 0x20 + read-write + 0x00000000 + + + DATA + Data A write to this register loads the + FIFO provided the FIFO is not full. A read from this + register empties the FIFO if the FIFO is not + empty. + 0 + 32 + + + + + SAI_BCR1 + SAI_BCR1 + Configuration register 1 + 0x24 + 0x20 + read-write + 0x00000040 + + + MODE + SAIx audio block mode + immediately + 0 + 2 + + + PRTCFG + Protocol configuration. These bits are + set and cleared by software. These bits have to be + configured when the audio block is + disabled. + 2 + 2 + + + DS + Data size. These bits are set and + cleared by software. These bits are ignored when the + SPDIF protocols are selected (bit PRTCFG[1:0]), + because the frame and the data size are fixed in such + case. When the companding mode is selected through + COMP[1:0] bits, DS[1:0] are ignored since the data + size is fixed to 8 bits by the algorithm. These bits + must be configured when the audio block is + disabled. + 5 + 3 + + + LSBFIRST + Least significant bit first. This bit is + set and cleared by software. It must be configured + when the audio block is disabled. This bit has no + meaning in AC97 audio protocol since AC97 data are + always transferred with the MSB first. This bit has + no meaning in SPDIF audio protocol since in SPDIF + data are always transferred with LSB + first. + 8 + 1 + + + CKSTR + Clock strobing edge. This bit is set and + cleared by software. It must be configured when the + audio block is disabled. This bit has no meaning in + SPDIF audio protocol. + 9 + 1 + + + SYNCEN + Synchronization enable. These bits are + set and cleared by software. They must be configured + when the audio sub-block is disabled. Note: The audio + sub-block should be configured as asynchronous when + SPDIF mode is enabled. + 10 + 2 + + + MONO + Mono mode. This bit is set and cleared + by software. It is meaningful only when the number of + slots is equal to 2. When the mono mode is selected, + slot 0 data are duplicated on slot 1 when the audio + block operates as a transmitter. In reception mode, + the slot1 is discarded and only the data received + from slot 0 are stored. Refer to Section: Mono/stereo + mode for more details. + 12 + 1 + + + OUTDRIV + Output drive. This bit is set and + cleared by software. Note: This bit has to be set + before enabling the audio block and after the audio + block configuration. + 13 + 1 + + + SAIXEN + Audio block enable where x is A or B. + This bit is set by software. To switch off the audio + block, the application software must program this bit + to 0 and poll the bit till it reads back 0, meaning + that the block is completely disabled. Before setting + this bit to 1, check that it is set to 0, otherwise + the enable command will not be taken into account. + This bit allows to control the state of SAIx audio + block. If it is disabled when an audio frame transfer + is ongoing, the ongoing transfer completes and the + cell is fully disabled at the end of this audio frame + transfer. Note: When SAIx block is configured in + master mode, the clock must be present on the input + of SAIx before setting SAIXEN bit. + 16 + 1 + + + DMAEN + DMA enable. This bit is set and cleared + by software. Note: Since the audio block defaults to + operate as a transmitter after reset, the MODE[1:0] + bits must be configured before setting DMAEN to avoid + a DMA request in receiver mode. + 17 + 1 + + + NOMCK + No divider + 19 + 1 + + + MCKDIV + Master clock divider. These bits are set + and cleared by software. These bits are meaningless + when the audio block operates in slave mode. They + have to be configured when the audio block is + disabled. Others: the master clock frequency is + calculated accordingly to the following + formula: + 20 + 4 + + + OSR + Oversampling ratio for master + clock + 26 + 1 + + + + + SAI_BCR2 + SAI_BCR2 + Configuration register 2 + 0x28 + 0x20 + 0x00000000 + + + FTH + FIFO threshold. This bit is set and + cleared by software. + 0 + 3 + read-write + + + FFLUSH + FIFO flush. This bit is set by software. + It is always read as 0. This bit should be configured + when the SAI is disabled. + 3 + 1 + write-only + + + TRIS + Tristate management on data line. This + bit is set and cleared by software. It is meaningful + only if the audio block is configured as a + transmitter. This bit is not used when the audio + block is configured in SPDIF mode. It should be + configured when SAI is disabled. Refer to Section: + Output data line management on an inactive slot for + more details. + 4 + 1 + read-write + + + MUTE + Mute. This bit is set and cleared by + software. It is meaningful only when the audio block + operates as a transmitter. The MUTE value is linked + to value of MUTEVAL if the number of slots is lower + or equal to 2, or equal to 0 if it is greater than 2. + Refer to Section: Mute mode for more details. Note: + This bit is meaningless and should not be used for + SPDIF audio blocks. + 5 + 1 + read-write + + + MUTEVAL + Mute value. This bit is set and cleared + by software.It must be written before enabling the + audio block: SAIXEN. This bit is meaningful only when + the audio block operates as a transmitter, the number + of slots is lower or equal to 2 and the MUTE bit is + set. If more slots are declared, the bit value sent + during the transmission in mute mode is equal to 0, + whatever the value of MUTEVAL. if the number of slot + is lower or equal to 2 and MUTEVAL = 1, the MUTE + value transmitted for each slot is the one sent + during the previous frame. Refer to Section: Mute + mode for more details. Note: This bit is meaningless + and should not be used for SPDIF audio + blocks. + 6 + 1 + read-write + + + MUTECNT + Mute counter. These bits are set and + cleared by software. They are used only in reception + mode. The value set in these bits is compared to the + number of consecutive mute frames detected in + reception. When the number of mute frames is equal to + this value, the flag MUTEDET will be set and an + interrupt will be generated if bit MUTEDETIE is set. + Refer to Section: Mute mode for more + details. + 7 + 6 + read-write + + + CPL + Complement bit. This bit is set and + cleared by software. It defines the type of + complement to be used for companding mode Note: This + bit has effect only when the companding mode is -Law + algorithm or A-Law algorithm. + 13 + 1 + read-write + + + COMP + Companding mode. These bits are set and + cleared by software. The -Law and the A-Law log are a + part of the CCITT G.711 recommendation, the type of + complement that will be used depends on CPL bit. The + data expansion or data compression are determined by + the state of bit MODE[0]. The data compression is + applied if the audio block is configured as a + transmitter. The data expansion is automatically + applied when the audio block is configured as a + receiver. Refer to Section: Companding mode for more + details. Note: Companding mode is applicable only + when TDM is selected. + 14 + 2 + read-write + + + + + SAI_BFRCR + SAI_BFRCR + This register has no meaning in AC97 and + SPDIF audio protocol + 0x2C + 0x20 + 0x00000007 + + + FRL + Frame length. These bits are set and + cleared by software. They define the audio frame + length expressed in number of SCK clock cycles: the + number of bits in the frame is equal to FRL[7:0] + 1. + The minimum number of bits to transfer in an audio + frame must be equal to 8, otherwise the audio block + will behaves in an unexpected way. This is the case + when the data size is 8 bits and only one slot 0 is + defined in NBSLOT[4:0] of SAI_xSLOTR register + (NBSLOT[3:0] = 0000). In master mode, if the master + clock (available on MCLK_x pin) is used, the frame + length should be aligned with a number equal to a + power of 2, ranging from 8 to 256. When the master + clock is not used (NODIV = 1), it is recommended to + program the frame length to an value ranging from 8 + to 256. These bits are meaningless and are not used + in AC97 or SPDIF audio block + configuration. + 0 + 8 + read-write + + + FSALL + Frame synchronization active level + length. These bits are set and cleared by software. + They specify the length in number of bit clock (SCK) + + 1 (FSALL[6:0] + 1) of the active level of the FS + signal in the audio frame These bits are meaningless + and are not used in AC97 or SPDIF audio block + configuration. They must be configured when the audio + block is disabled. + 8 + 7 + read-write + + + FSDEF + Frame synchronization definition. This + bit is set and cleared by software. When the bit is + set, the number of slots defined in the SAI_xSLOTR + register has to be even. It means that half of this + number of slots will be dedicated to the left channel + and the other slots for the right channel (e.g: this + bit has to be set for I2S or MSB/LSB-justified + protocols...). This bit is meaningless and is not + used in AC97 or SPDIF audio block configuration. It + must be configured when the audio block is + disabled. + 16 + 1 + read-only + + + FSPOL + Frame synchronization polarity. This bit + is set and cleared by software. It is used to + configure the level of the start of frame on the FS + signal. It is meaningless and is not used in AC97 or + SPDIF audio block configuration. This bit must be + configured when the audio block is + disabled. + 17 + 1 + read-write + + + FSOFF + Frame synchronization offset. This bit + is set and cleared by software. It is meaningless and + is not used in AC97 or SPDIF audio block + configuration. This bit must be configured when the + audio block is disabled. + 18 + 1 + read-write + + + + + SAI_BSLOTR + SAI_BSLOTR + This register has no meaning in AC97 and + SPDIF audio protocol + 0x30 + 0x20 + read-write + 0x00000000 + + + FBOFF + First bit offset These bits are set and + cleared by software. The value set in this bitfield + defines the position of the first data transfer bit + in the slot. It represents an offset value. In + transmission mode, the bits outside the data field + are forced to 0. In reception mode, the extra + received bits are discarded. These bits must be set + when the audio block is disabled. They are ignored in + AC97 or SPDIF mode. + 0 + 5 + + + SLOTSZ + Slot size This bits is set and cleared + by software. The slot size must be higher or equal to + the data size. If this condition is not respected, + the behavior of the SAI will be undetermined. Refer + to Section: Output data line management on an + inactive slot for information on how to drive SD + line. These bits must be set when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 6 + 2 + + + NBSLOT + Number of slots in an audio frame. These + bits are set and cleared by software. The value set + in this bitfield represents the number of slots + 1 + in the audio frame (including the number of inactive + slots). The maximum number of slots is 16. The number + of slots should be even if FSDEF bit in the SAI_xFRCR + register is set. The number of slots must be + configured when the audio block is disabled. They are + ignored in AC97 or SPDIF mode. + 8 + 4 + + + SLOTEN + Slot enable. These bits are set and + cleared by software. Each SLOTEN bit corresponds to a + slot position from 0 to 15 (maximum 16 slots). The + slot must be enabled when the audio block is + disabled. They are ignored in AC97 or SPDIF + mode. + 16 + 16 + + + + + SAI_BIM + SAI_BIM + Interrupt mask register 2 + 0x34 + 0x20 + read-write + 0x00000000 + + + OVRUDRIE + Overrun/underrun interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the OVRUDR bit in + the SAI_xSR register is set. + 0 + 1 + + + MUTEDETIE + Mute detection interrupt enable. This + bit is set and cleared by software. When this bit is + set, an interrupt is generated if the MUTEDET bit in + the SAI_xSR register is set. This bit has a meaning + only if the audio block is configured in receiver + mode. + 1 + 1 + + + WCKCFGIE + Wrong clock configuration interrupt + enable. This bit is set and cleared by software. This + bit is taken into account only if the audio block is + configured as a master (MODE[1] = 0) and NODIV = 0. + It generates an interrupt if the WCKCFG flag in the + SAI_xSR register is set. Note: This bit is used only + in TDM mode and is meaningless in other + modes. + 2 + 1 + + + FREQIE + FIFO request interrupt enable. This bit + is set and cleared by software. When this bit is set, + an interrupt is generated if the FREQ bit in the + SAI_xSR register is set. Since the audio block + defaults to operate as a transmitter after reset, the + MODE bit must be configured before setting FREQIE to + avoid a parasitic interruption in receiver + mode, + 3 + 1 + + + CNRDYIE + Codec not ready interrupt enable (AC97). + This bit is set and cleared by software. When the + interrupt is enabled, the audio block detects in the + slot 0 (tag0) of the AC97 frame if the Codec + connected to this line is ready or not. If it is not + ready, the CNRDY flag in the SAI_xSR register is set + and an interruption i generated. This bit has a + meaning only if the AC97 mode is selected through + PRTCFG[1:0] bits and the audio block is operates as a + receiver. + 4 + 1 + + + AFSDETIE + Anticipated frame synchronization + detection interrupt enable. This bit is set and + cleared by software. When this bit is set, an + interrupt will be generated if the AFSDET bit in the + SAI_xSR register is set. This bit is meaningless in + AC97, SPDIF mode or when the audio block operates as + a master. + 5 + 1 + + + LFSDETIE + Late frame synchronization detection + interrupt enable. This bit is set and cleared by + software. When this bit is set, an interrupt will be + generated if the LFSDET bit is set in the SAI_xSR + register. This bit is meaningless in AC97, SPDIF mode + or when the audio block operates as a + master. + 6 + 1 + + + + + SAI_BSR + SAI_BSR + Status register + 0x38 + 0x20 + read-only + 0x00000008 + + + OVRUDR + Overrun / underrun. This bit is read + only. The overrun and underrun conditions can occur + only when the audio block is configured as a receiver + and a transmitter, respectively. It can generate an + interrupt if OVRUDRIE bit is set in SAI_xIM register. + This flag is cleared when the software sets COVRUDR + bit in SAI_xCLRFR register. + 0 + 1 + + + MUTEDET + Mute detection. This bit is read only. + This flag is set if consecutive 0 values are received + in each slot of a given audio frame and for a + consecutive number of audio frames (set in the + MUTECNT bit in the SAI_xCR2 register). It can + generate an interrupt if MUTEDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets bit CMUTEDET in the SAI_xCLRFR + register. + 1 + 1 + + + WCKCFG + Wrong clock configuration flag. This bit + is read only. This bit is used only when the audio + block operates in master mode (MODE[1] = 0) and NODIV + = 0. It can generate an interrupt if WCKCFGIE bit is + set in SAI_xIM register. This flag is cleared when + the software sets CWCKCFG bit in SAI_xCLRFR + register. + 2 + 1 + + + FREQ + FIFO request. This bit is read only. The + request depends on the audio block configuration: If + the block is configured in transmission mode, the + FIFO request is related to a write request operation + in the SAI_xDR. If the block configured in reception, + the FIFO request related to a read request operation + from the SAI_xDR. This flag can generate an interrupt + if FREQIE bit is set in SAI_xIM + register. + 3 + 1 + + + CNRDY + Codec not ready. This bit is read only. + This bit is used only when the AC97 audio protocol is + selected in the SAI_xCR1 register and configured in + receiver mode. It can generate an interrupt if + CNRDYIE bit is set in SAI_xIM register. This flag is + cleared when the software sets CCNRDY bit in + SAI_xCLRFR register. + 4 + 1 + + + AFSDET + Anticipated frame synchronization + detection. This bit is read only. This flag can be + set only if the audio block is configured in slave + mode. It is not used in AC97or SPDIF mode. It can + generate an interrupt if AFSDETIE bit is set in + SAI_xIM register. This flag is cleared when the + software sets CAFSDET bit in SAI_xCLRFR + register. + 5 + 1 + + + LFSDET + Late frame synchronization detection. + This bit is read only. This flag can be set only if + the audio block is configured in slave mode. It is + not used in AC97 or SPDIF mode. It can generate an + interrupt if LFSDETIE bit is set in the SAI_xIM + register. This flag is cleared when the software sets + bit CLFSDET in SAI_xCLRFR register + 6 + 1 + + + FLVL + FIFO level threshold. This bit is read + only. The FIFO level threshold flag is managed only + by hardware and its setting depends on SAI block + configuration (transmitter or receiver mode). If the + SAI block is configured as transmitter: If SAI block + is configured as receiver: + 16 + 3 + + + + + SAI_BCLRFR + SAI_BCLRFR + Clear flag register + 0x3C + 0x20 + write-only + 0x00000000 + + + COVRUDR + Clear overrun / underrun. This bit is + write only. Programming this bit to 1 clears the + OVRUDR flag in the SAI_xSR register. Reading this bit + always returns the value 0. + 0 + 1 + + + CMUTEDET + Mute detection flag. This bit is write + only. Programming this bit to 1 clears the MUTEDET + flag in the SAI_xSR register. Reading this bit always + returns the value 0. + 1 + 1 + + + CWCKCFG + Clear wrong clock configuration flag. + This bit is write only. Programming this bit to 1 + clears the WCKCFG flag in the SAI_xSR register. This + bit is used only when the audio block is set as + master (MODE[1] = 0) and NODIV = 0 in the SAI_xCR1 + register. Reading this bit always returns the value + 0. + 2 + 1 + + + CCNRDY + Clear Codec not ready flag. This bit is + write only. Programming this bit to 1 clears the + CNRDY flag in the SAI_xSR register. This bit is used + only when the AC97 audio protocol is selected in the + SAI_xCR1 register. Reading this bit always returns + the value 0. + 4 + 1 + + + CAFSDET + Clear anticipated frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the AFSDET flag in the SAI_xSR + register. It is not used in AC97or SPDIF mode. + Reading this bit always returns the value + 0. + 5 + 1 + + + CLFSDET + Clear late frame synchronization + detection flag. This bit is write only. Programming + this bit to 1 clears the LFSDET flag in the SAI_xSR + register. This bit is not used in AC97or SPDIF mode + Reading this bit always returns the value + 0. + 6 + 1 + + + + + SAI_BDR + SAI_BDR + Data register + 0x40 + 0x20 + read-write + 0x00000000 + + + DATA + Data A write to this register loads the + FIFO provided the FIFO is not full. A read from this + register empties the FIFO if the FIFO is not + empty. + 0 + 32 + + + + + SAI_PDMCR + SAI_PDMCR + PDM control register + 0x44 + 0x20 + read-write + 0x00000000 + + + PDMEN + PDM enable + 0 + 1 + + + MICNBR + Number of microphones + 4 + 2 + + + CKEN1 + Clock enable of bitstream clock number + 1 + 8 + 1 + + + CKEN2 + Clock enable of bitstream clock number + 2 + 9 + 1 + + + CKEN3 + Clock enable of bitstream clock number + 3 + 10 + 1 + + + CKEN4 + Clock enable of bitstream clock number + 4 + 11 + 1 + + + + + SAI_PDMDLY + SAI_PDMDLY + PDM delay register + 0x48 + 0x20 + read-write + 0x00000000 + + + DLYM1L + Delay line adjust for first microphone + of pair 1 + 0 + 3 + + + DLYM1R + Delay line adjust for second microphone + of pair 1 + 4 + 3 + + + DLYM2L + Delay line for first microphone of pair + 2 + 8 + 3 + + + DLYM2R + Delay line for second microphone of pair + 2 + 12 + 3 + + + DLYM3L + Delay line for first microphone of pair + 3 + 16 + 3 + + + DLYM3R + Delay line for second microphone of pair + 3 + 20 + 3 + + + DLYM4L + Delay line for first microphone of pair + 4 + 24 + 3 + + + DLYM4R + Delay line for second microphone of pair + 4 + 28 + 3 + + + + + + + SAI1 + 0x40015800 + + SAI1 + SAI1 global interrupt + 87 + + + + SAI2 + 0x40015C00 + + SAI2 + SAI2 global interrupt + 91 + + + + SAI3 + 0x40016000 + + SAI3 + SAI3 global interrupt + 114 + + + + SDMMC1 + SDMMC1 + SDMMC + 0x52007000 + + 0x0 + 0x100 + registers + + + SDMMC1 + SDMMC global interrupt + 49 + + + SDMMC + SDMMC global interrupt + 124 + + + + POWER + POWER + SDMMC power control register + 0x0 + 0x20 + read-write + 0x00000000 + + + PWRCTRL + SDMMC state control bits. These bits can + only be written when the SDMMC is not in the power-on + state (PWRCTRL?11). These bits are used to define the + functional state of the SDMMC signals: Any further + write will be ignored, PWRCTRL value will keep + 11. + 0 + 2 + + + VSWITCH + Voltage switch sequence start. This bit + is used to start the timing critical section of the + voltage switch sequence: + 2 + 1 + + + VSWITCHEN + Voltage switch procedure enable. This + bit can only be written by firmware when CPSM is + disabled (CPSMEN = 0). This bit is used to stop the + SDMMC_CK after the voltage switch command + response: + 3 + 1 + + + DIRPOL + Data and command direction signals + polarity selection. This bit can only be written when + the SDMMC is in the power-off state (PWRCTRL = + 00). + 4 + 1 + + + + + CLKCR + CLKCR + The SDMMC_CLKCR register controls the + SDMMC_CK output clock, the SDMMC_RX_CLK receive clock, + and the bus width. + 0x4 + 0x20 + read-write + 0x00000000 + + + CLKDIV + Clock divide factor This bit can only be + written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0). This field defines the + divide factor between the input clock (SDMMCCLK) and + the output clock (SDMMC_CK): SDMMC_CK frequency = + SDMMCCLK / [2 * CLKDIV]. 0xx: etc.. xxx: + etc.. + 0 + 10 + + + PWRSAV + Power saving configuration bit This bit + can only be written when the CPSM and DPSM are not + active (CPSMACT = 0 and DPSMACT = 0) For power + saving, the SDMMC_CK clock output can be disabled + when the bus is idle by setting PWRSAV: + 12 + 1 + + + WIDBUS + Wide bus mode enable bit This bit can + only be written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0) + 14 + 2 + + + NEGEDGE + SDMMC_CK dephasing selection bit for + data and Command. This bit can only be written when + the CPSM and DPSM are not active (CPSMACT = 0 and + DPSMACT = 0). When clock division = 1 (CLKDIV = 0), + this bit has no effect. Data and Command change on + SDMMC_CK falling edge. When clock division &gt;1 + (CLKDIV &gt; 0) &amp; DDR = 0: - SDMMC_CK + edge occurs on SDMMCCLK rising edge. When clock + division >1 (CLKDIV > 0) & DDR = 1: - Data + changed on the SDMMCCLK falling edge succeeding a + SDMMC_CK edge. - SDMMC_CK edge occurs on SDMMCCLK + rising edge. - Data changed on the SDMMC_CK falling + edge succeeding a SDMMC_CK edge. - SDMMC_CK edge + occurs on SDMMCCLK rising edge. + 16 + 1 + + + HWFC_EN + Hardware flow control enable This bit + can only be written when the CPSM and DPSM are not + active (CPSMACT = 0 and DPSMACT = 0) When Hardware + flow control is enabled, the meaning of the TXFIFOE + and RXFIFOF flags change, please see SDMMC status + register definition in Section56.8.11. + 17 + 1 + + + DDR + Data rate signaling selection This bit + can only be written when the CPSM and DPSM are not + active (CPSMACT = 0 and DPSMACT = 0) DDR rate shall + only be selected with 4-bit or 8-bit wide bus mode. + (WIDBUS &gt; 00). DDR = 1 has no effect when + WIDBUS = 00 (1-bit wide bus). DDR rate shall only be + selected with clock division &gt;1. (CLKDIV + &gt; 0) + 18 + 1 + + + BUSSPEED + Bus speed mode selection between DS, HS, + SDR12, SDR25 and SDR50, DDR50, SDR104. This bit can + only be written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0) + 19 + 1 + + + SELCLKRX + Receive clock selection. These bits can + only be written when the CPSM and DPSM are not active + (CPSMACT = 0 and DPSMACT = 0) + 20 + 2 + + + + + ARGR + ARGR + The SDMMC_ARGR register contains a 32-bit + command argument, which is sent to a card as part of a + command message. + 0x8 + 0x20 + read-write + 0x00000000 + + + CMDARG + Command argument. These bits can only be + written by firmware when CPSM is disabled (CPSMEN = + 0). Command argument sent to a card as part of a + command message. If a command contains an argument, + it must be loaded into this register before writing a + command to the command register. + 0 + 32 + + + + + CMDR + CMDR + The SDMMC_CMDR register contains the command + index and command type bits. The command index is sent to + a card as part of a command message. The command type + bits control the command path state machine + (CPSM). + 0xC + 0x20 + read-write + 0x00000000 + + + CMDINDEX + Command index. This bit can only be + written by firmware when CPSM is disabled (CPSMEN = + 0). The command index is sent to the card as part of + a command message. + 0 + 6 + + + CMDTRANS + The CPSM treats the command as a data + transfer command, stops the interrupt period, and + signals DataEnable to the DPSM This bit can only be + written by firmware when CPSM is disabled (CPSMEN = + 0). If this bit is set, the CPSM issues an end of + interrupt period and issues DataEnable signal to the + DPSM when the command is sent. + 6 + 1 + + + CMDSTOP + The CPSM treats the command as a Stop + Transmission command and signals Abort to the DPSM. + This bit can only be written by firmware when CPSM is + disabled (CPSMEN = 0). If this bit is set, the CPSM + issues the Abort signal to the DPSM when the command + is sent. + 7 + 1 + + + WAITRESP + Wait for response bits. This bit can + only be written by firmware when CPSM is disabled + (CPSMEN = 0). They are used to configure whether the + CPSM is to wait for a response, and if yes, which + kind of response. + 8 + 2 + + + WAITINT + CPSM waits for interrupt request. If + this bit is set, the CPSM disables command timeout + and waits for an card interrupt request (Response). + If this bit is cleared in the CPSM Wait state, will + cause the abort of the interrupt mode. + 10 + 1 + + + WAITPEND + CPSM Waits for end of data transfer + (CmdPend internal signal) from DPSM. This bit when + set, the CPSM waits for the end of data transfer + trigger before it starts sending a command. WAITPEND + is only taken into account when DTMODE = MMC stream + data transfer, WIDBUS = 1-bit wide bus mode, DPSMACT + = 1 and DTDIR = from host to card. + 11 + 1 + + + CPSMEN + Command path state machine (CPSM) Enable + bit This bit is written 1 by firmware, and cleared by + hardware when the CPSM enters the Idle state. If this + bit is set, the CPSM is enabled. When DTEN = 1, no + command will be transfered nor boot procedure will be + started. CPSMEN is cleared to 0. + 12 + 1 + + + DTHOLD + Hold new data block transmission and + reception in the DPSM. If this bit is set, the DPSM + will not move from the Wait_S state to the Send state + or from the Wait_R state to the Receive + state. + 13 + 1 + + + BOOTMODE + Select the boot mode procedure to be + used. This bit can only be written by firmware when + CPSM is disabled (CPSMEN = 0) + 14 + 1 + + + BOOTEN + Enable boot mode + procedure. + 15 + 1 + + + CMDSUSPEND + The CPSM treats the command as a Suspend + or Resume command and signals interrupt period + start/end. This bit can only be written by firmware + when CPSM is disabled (CPSMEN = 0). CMDSUSPEND = 1 + and CMDTRANS = 0 Suspend command, start interrupt + period when response bit BS=0. CMDSUSPEND = 1 and + CMDTRANS = 1 Resume command with data, end interrupt + period when response bit DF=1. + 16 + 1 + + + + + RESP1R + RESP1R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x14 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS1 + see Table 432 + 0 + 32 + + + + + RESP2R + RESP2R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x18 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS2 + see Table404. + 0 + 32 + + + + + RESP3R + RESP3R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x1C + 0x20 + read-only + 0x00000000 + + + CARDSTATUS3 + see Table404. + 0 + 32 + + + + + RESP4R + RESP4R + The SDMMC_RESP1/2/3/4R registers contain the + status of a card, which is part of the received + response. + 0x20 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS4 + see Table404. + 0 + 32 + + + + + DTIMER + DTIMER + The SDMMC_DTIMER register contains the data + timeout period, in card bus clock periods. A counter + loads the value from the SDMMC_DTIMER register, and + starts decrementing when the data path state machine + (DPSM) enters the Wait_R or Busy state. If the timer + reaches 0 while the DPSM is in either of these states, + the timeout status flag is set. + 0x24 + 0x20 + read-write + 0x00000000 + + + DATATIME + Data and R1b busy timeout period This + bit can only be written when the CPSM and DPSM are + not active (CPSMACT = 0 and DPSMACT = 0). Data and + R1b busy timeout period expressed in card bus clock + periods. + 0 + 32 + + + + + DLENR + DLENR + The SDMMC_DLENR register contains the number + of data bytes to be transferred. The value is loaded into + the data counter when data transfer starts. + 0x28 + 0x20 + read-write + 0x00000000 + + + DATALENGTH + Data length value This register can only + be written by firmware when DPSM is inactive (DPSMACT + = 0). Number of data bytes to be transferred. When + DDR = 1 DATALENGTH is truncated to a multiple of 2. + (The last odd byte is not transfered) When DATALENGTH + = 0 no data will be transfered, when requested by a + CPSMEN and CMDTRANS = 1 also no command will be + transfered. DTEN and CPSMEN are cleared to + 0. + 0 + 25 + + + + + DCTRL + DCTRL + The SDMMC_DCTRL register control the data + path state machine (DPSM). + 0x2C + 0x20 + read-write + 0x00000000 + + + DTEN + Data transfer enable bit This bit can + only be written by firmware when DPSM is inactive + (DPSMACT = 0). This bit is cleared by Hardware when + data transfer completes. This bit shall only be used + to transfer data when no associated data transfer + command is used, i.e. shall not be used with SD or + eMMC cards. + 0 + 1 + + + DTDIR + Data transfer direction selection This + bit can only be written by firmware when DPSM is + inactive (DPSMACT = 0). + 1 + 1 + + + DTMODE + Data transfer mode selection. This bit + can only be written by firmware when DPSM is inactive + (DPSMACT = 0). + 2 + 2 + + + DBLOCKSIZE + Data block size This bit can only be + written by firmware when DPSM is inactive (DPSMACT = + 0). Define the data block length when the block data + transfer mode is selected: When DATALENGTH is not a + multiple of DBLOCKSIZE, the transfered data is + truncated at a multiple of DBLOCKSIZE. (Any remain + data will not be transfered.) When DDR = 1, + DBLOCKSIZE = 0000 shall not be used. (No data will be + transfered) + 4 + 4 + + + RWSTART + Read wait start. If this bit is set, + read wait operation starts. + 8 + 1 + + + RWSTOP + Read wait stop This bit is written by + firmware and auto cleared by hardware when the DPSM + moves from the READ_WAIT state to the WAIT_R or IDLE + state. + 9 + 1 + + + RWMOD + Read wait mode. This bit can only be + written by firmware when DPSM is inactive (DPSMACT = + 0). + 10 + 1 + + + SDIOEN + SD I/O interrupt enable functions This + bit can only be written by firmware when DPSM is + inactive (DPSMACT = 0). If this bit is set, the DPSM + enables the SD I/O card specific interrupt + operation. + 11 + 1 + + + BOOTACKEN + Enable the reception of the boot + acknowledgment. This bit can only be written by + firmware when DPSM is inactive (DPSMACT = + 0). + 12 + 1 + + + FIFORST + FIFO reset, will flush any remaining + data. This bit can only be written by firmware when + IDMAEN= 0 and DPSM is active (DPSMACT = 1). This bit + will only take effect when a transfer error or + transfer hold occurs. + 13 + 1 + + + + + DCNTR + DCNTR + The SDMMC_DCNTR register loads the value + from the data length register (see SDMMC_DLENR) when the + DPSM moves from the Idle state to the Wait_R or Wait_S + state. As data is transferred, the counter decrements the + value until it reaches 0. The DPSM then moves to the Idle + state and when there has been no error, the data status + end flag (DATAEND) is set. + 0x30 + 0x20 + read-only + 0x00000000 + + + DATACOUNT + Data count value When read, the number + of remaining data bytes to be transferred is + returned. Write has no effect. + 0 + 25 + + + + + STAR + STAR + The SDMMC_STAR register is a read-only + register. It contains two types of flag:Static flags + (bits [29,21,11:0]): these bits remain asserted until + they are cleared by writing to the SDMMC interrupt Clear + register (see SDMMC_ICR)Dynamic flags (bits [20:12]): + these bits change state depending on the state of the + underlying logic (for example, FIFO full and empty flags + are asserted and de-asserted as data while written to the + FIFO) + 0x34 + 0x20 + read-only + 0x00000000 + + + CCRCFAIL + Command response received (CRC check + failed). Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 0 + 1 + + + DCRCFAIL + Data block sent/received (CRC check + failed). Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 1 + 1 + + + CTIMEOUT + Command response timeout. Interrupt flag + is cleared by writing corresponding interrupt clear + bit in SDMMC_ICR. The Command Timeout period has a + fixed value of 64 SDMMC_CK clock + periods. + 2 + 1 + + + DTIMEOUT + Data timeout. Interrupt flag is cleared + by writing corresponding interrupt clear bit in + SDMMC_ICR. + 3 + 1 + + + TXUNDERR + Transmit FIFO underrun error or IDMA + read transfer error. Interrupt flag is cleared by + writing corresponding interrupt clear bit in + SDMMC_ICR. + 4 + 1 + + + RXOVERR + Received FIFO overrun error or IDMA + write transfer error. Interrupt flag is cleared by + writing corresponding interrupt clear bit in + SDMMC_ICR. + 5 + 1 + + + CMDREND + Command response received (CRC check + passed, or no CRC). Interrupt flag is cleared by + writing corresponding interrupt clear bit in + SDMMC_ICR. + 6 + 1 + + + CMDSENT + Command sent (no response required). + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 7 + 1 + + + DATAEND + Data transfer ended correctly. (data + counter, DATACOUNT is zero and no errors occur). + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 8 + 1 + + + DHOLD + Data transfer Hold. Interrupt flag is + cleared by writing corresponding interrupt clear bit + in SDMMC_ICR. + 9 + 1 + + + DBCKEND + Data block sent/received. (CRC check + passed) and DPSM moves to the READWAIT state. + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 10 + 1 + + + DABORT + Data transfer aborted by CMD12. + Interrupt flag is cleared by writing corresponding + interrupt clear bit in SDMMC_ICR. + 11 + 1 + + + DPSMACT + Data path state machine active, i.e. not + in Idle state. This is a hardware status flag only, + does not generate an interrupt. + 12 + 1 + + + CPSMACT + Command path state machine active, i.e. + not in Idle state. This is a hardware status flag + only, does not generate an interrupt. + 13 + 1 + + + TXFIFOHE + Transmit FIFO half empty At least half + the number of words can be written into the FIFO. + This bit is cleared when the FIFO becomes half+1 + full. + 14 + 1 + + + RXFIFOHF + Receive FIFO half full There are at + least half the number of words in the FIFO. This bit + is cleared when the FIFO becomes half+1 + empty. + 15 + 1 + + + TXFIFOF + Transmit FIFO full This is a hardware + status flag only, does not generate an interrupt. + This bit is cleared when one FIFO location becomes + empty. + 16 + 1 + + + RXFIFOF + Receive FIFO full This bit is cleared + when one FIFO location becomes empty. + 17 + 1 + + + TXFIFOE + Transmit FIFO empty This bit is cleared + when one FIFO location becomes full. + 18 + 1 + + + RXFIFOE + Receive FIFO empty This is a hardware + status flag only, does not generate an interrupt. + This bit is cleared when one FIFO location becomes + full. + 19 + 1 + + + BUSYD0 + Inverted value of SDMMC_D0 line (Busy), + sampled at the end of a CMD response and a second + time 2 SDMMC_CK cycles after the CMD response. This + bit is reset to not busy when the SDMMCD0 line + changes from busy to not busy. This bit does not + signal busy due to data transfer. This is a hardware + status flag only, it does not generate an + interrupt. + 20 + 1 + + + BUSYD0END + end of SDMMC_D0 Busy following a CMD + response detected. This indicates only end of busy + following a CMD response. This bit does not signal + busy due to data transfer. Interrupt flag is cleared + by writing corresponding interrupt clear bit in + SDMMC_ICR. + 21 + 1 + + + SDIOIT + SDIO interrupt received. Interrupt flag + is cleared by writing corresponding interrupt clear + bit in SDMMC_ICR. + 22 + 1 + + + ACKFAIL + Boot acknowledgment received (boot + acknowledgment check fail). Interrupt flag is cleared + by writing corresponding interrupt clear bit in + SDMMC_ICR. + 23 + 1 + + + ACKTIMEOUT + Boot acknowledgment timeout. Interrupt + flag is cleared by writing corresponding interrupt + clear bit in SDMMC_ICR. + 24 + 1 + + + VSWEND + Voltage switch critical timing section + completion. Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 25 + 1 + + + CKSTOP + SDMMC_CK stopped in Voltage switch + procedure. Interrupt flag is cleared by writing + corresponding interrupt clear bit in + SDMMC_ICR. + 26 + 1 + + + IDMATE + IDMA transfer error. Interrupt flag is + cleared by writing corresponding interrupt clear bit + in SDMMC_ICR. + 27 + 1 + + + IDMABTC + IDMA buffer transfer complete. interrupt + flag is cleared by writing corresponding interrupt + clear bit in SDMMC_ICR. + 28 + 1 + + + + + ICR + ICR + The SDMMC_ICR register is a write-only + register. Writing a bit with 1 clears the corresponding + bit in the SDMMC_STAR status register. + 0x38 + 0x20 + read-write + 0x00000000 + + + CCRCFAILC + CCRCFAIL flag clear bit Set by software + to clear the CCRCFAIL flag. + 0 + 1 + + + DCRCFAILC + DCRCFAIL flag clear bit Set by software + to clear the DCRCFAIL flag. + 1 + 1 + + + CTIMEOUTC + CTIMEOUT flag clear bit Set by software + to clear the CTIMEOUT flag. + 2 + 1 + + + DTIMEOUTC + DTIMEOUT flag clear bit Set by software + to clear the DTIMEOUT flag. + 3 + 1 + + + TXUNDERRC + TXUNDERR flag clear bit Set by software + to clear TXUNDERR flag. + 4 + 1 + + + RXOVERRC + RXOVERR flag clear bit Set by software + to clear the RXOVERR flag. + 5 + 1 + + + CMDRENDC + CMDREND flag clear bit Set by software + to clear the CMDREND flag. + 6 + 1 + + + CMDSENTC + CMDSENT flag clear bit Set by software + to clear the CMDSENT flag. + 7 + 1 + + + DATAENDC + DATAEND flag clear bit Set by software + to clear the DATAEND flag. + 8 + 1 + + + DHOLDC + DHOLD flag clear bit Set by software to + clear the DHOLD flag. + 9 + 1 + + + DBCKENDC + DBCKEND flag clear bit Set by software + to clear the DBCKEND flag. + 10 + 1 + + + DABORTC + DABORT flag clear bit Set by software to + clear the DABORT flag. + 11 + 1 + + + BUSYD0ENDC + BUSYD0END flag clear bit Set by software + to clear the BUSYD0END flag. + 21 + 1 + + + SDIOITC + SDIOIT flag clear bit Set by software to + clear the SDIOIT flag. + 22 + 1 + + + ACKFAILC + ACKFAIL flag clear bit Set by software + to clear the ACKFAIL flag. + 23 + 1 + + + ACKTIMEOUTC + ACKTIMEOUT flag clear bit Set by + software to clear the ACKTIMEOUT flag. + 24 + 1 + + + VSWENDC + VSWEND flag clear bit Set by software to + clear the VSWEND flag. + 25 + 1 + + + CKSTOPC + CKSTOP flag clear bit Set by software to + clear the CKSTOP flag. + 26 + 1 + + + IDMATEC + IDMA transfer error clear bit Set by + software to clear the IDMATE flag. + 27 + 1 + + + IDMABTCC + IDMA buffer transfer complete clear bit + Set by software to clear the IDMABTC + flag. + 28 + 1 + + + + + MASKR + MASKR + The interrupt mask register determines which + status flags generate an interrupt request by setting the + corresponding bit to 1. + 0x3C + 0x20 + read-write + 0x00000000 + + + CCRCFAILIE + Command CRC fail interrupt enable Set + and cleared by software to enable/disable interrupt + caused by command CRC failure. + 0 + 1 + + + DCRCFAILIE + Data CRC fail interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data CRC failure. + 1 + 1 + + + CTIMEOUTIE + Command timeout interrupt enable Set and + cleared by software to enable/disable interrupt + caused by command timeout. + 2 + 1 + + + DTIMEOUTIE + Data timeout interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data timeout. + 3 + 1 + + + TXUNDERRIE + Tx FIFO underrun error interrupt enable + Set and cleared by software to enable/disable + interrupt caused by Tx FIFO underrun + error. + 4 + 1 + + + RXOVERRIE + Rx FIFO overrun error interrupt enable + Set and cleared by software to enable/disable + interrupt caused by Rx FIFO overrun + error. + 5 + 1 + + + CMDRENDIE + Command response received interrupt + enable Set and cleared by software to enable/disable + interrupt caused by receiving command + response. + 6 + 1 + + + CMDSENTIE + Command sent interrupt enable Set and + cleared by software to enable/disable interrupt + caused by sending command. + 7 + 1 + + + DATAENDIE + Data end interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data end. + 8 + 1 + + + DHOLDIE + Data hold interrupt enable Set and + cleared by software to enable/disable the interrupt + generated when sending new data is hold in the DPSM + Wait_S state. + 9 + 1 + + + DBCKENDIE + Data block end interrupt enable Set and + cleared by software to enable/disable interrupt + caused by data block end. + 10 + 1 + + + DABORTIE + Data transfer aborted interrupt enable + Set and cleared by software to enable/disable + interrupt caused by a data transfer being + aborted. + 11 + 1 + + + TXFIFOHEIE + Tx FIFO half empty interrupt enable Set + and cleared by software to enable/disable interrupt + caused by Tx FIFO half empty. + 14 + 1 + + + RXFIFOHFIE + Rx FIFO half full interrupt enable Set + and cleared by software to enable/disable interrupt + caused by Rx FIFO half full. + 15 + 1 + + + RXFIFOFIE + Rx FIFO full interrupt enable Set and + cleared by software to enable/disable interrupt + caused by Rx FIFO full. + 17 + 1 + + + TXFIFOEIE + Tx FIFO empty interrupt enable Set and + cleared by software to enable/disable interrupt + caused by Tx FIFO empty. + 18 + 1 + + + BUSYD0ENDIE + BUSYD0END interrupt enable Set and + cleared by software to enable/disable the interrupt + generated when SDMMC_D0 signal changes from busy to + NOT busy following a CMD response. + 21 + 1 + + + SDIOITIE + SDIO mode interrupt received interrupt + enable Set and cleared by software to enable/disable + the interrupt generated when receiving the SDIO mode + interrupt. + 22 + 1 + + + ACKFAILIE + Acknowledgment Fail interrupt enable Set + and cleared by software to enable/disable interrupt + caused by acknowledgment Fail. + 23 + 1 + + + ACKTIMEOUTIE + Acknowledgment timeout interrupt enable + Set and cleared by software to enable/disable + interrupt caused by acknowledgment + timeout. + 24 + 1 + + + VSWENDIE + Voltage switch critical timing section + completion interrupt enable Set and cleared by + software to enable/disable the interrupt generated + when voltage switch critical timing section + completion. + 25 + 1 + + + CKSTOPIE + Voltage Switch clock stopped interrupt + enable Set and cleared by software to enable/disable + interrupt caused by Voltage Switch clock + stopped. + 26 + 1 + + + IDMABTCIE + IDMA buffer transfer complete interrupt + enable Set and cleared by software to enable/disable + the interrupt generated when the IDMA has transferred + all data belonging to a memory buffer. + 28 + 1 + + + + + ACKTIMER + ACKTIMER + The SDMMC_ACKTIMER register contains the + acknowledgment timeout period, in SDMMC_CK bus clock + periods. A counter loads the value from the + SDMMC_ACKTIMER register, and starts decrementing when the + data path state machine (DPSM) enters the Wait_Ack state. + If the timer reaches 0 while the DPSM is in this states, + the acknowledgment timeout status flag is + set. + 0x40 + 0x20 + read-write + 0x00000000 + + + ACKTIME + Boot acknowledgment timeout period This + bit can only be written by firmware when CPSM is + disabled (CPSMEN = 0). Boot acknowledgment timeout + period expressed in card bus clock + periods. + 0 + 25 + + + + + IDMACTRLR + IDMACTRLR + The receive and transmit FIFOs can be read + or written as 32-bit wide registers. The FIFOs contain 32 + entries on 32 sequential addresses. This allows the CPU + to use its load and store multiple operands to read + from/write to the FIFO. + 0x50 + 0x20 + read-write + 0x00000000 + + + IDMAEN + IDMA enable This bit can only be written + by firmware when DPSM is inactive (DPSMACT = + 0). + 0 + 1 + + + IDMABMODE + Buffer mode selection. This bit can only + be written by firmware when DPSM is inactive (DPSMACT + = 0). + 1 + 1 + + + IDMABACT + Double buffer mode active buffer + indication This bit can only be written by firmware + when DPSM is inactive (DPSMACT = 0). When IDMA is + enabled this bit is toggled by + hardware. + 2 + 1 + + + + + IDMABSIZER + IDMABSIZER + The SDMMC_IDMABSIZER register contains the + buffers size when in double buffer + configuration. + 0x54 + 0x20 + read-write + 0x00000000 + + + IDMABNDT + Number of transfers per buffer. This + 8-bit value shall be multiplied by 8 to get the size + of the buffer in 32-bit words and by 32 to get the + size of the buffer in bytes. Example: IDMABNDT = + 0x01: buffer size = 8 words = 32 bytes. These bits + can only be written by firmware when DPSM is inactive + (DPSMACT = 0). + 5 + 8 + + + + + IDMABASE0R + IDMABASE0R + The SDMMC_IDMABASE0R register contains the + memory buffer base address in single buffer configuration + and the buffer 0 base address in double buffer + configuration. + 0x58 + 0x20 + read-write + 0x00000000 + + + IDMABASE0 + Buffer 0 memory base address bits + [31:2], shall be word aligned (bit [1:0] are always 0 + and read only). This register can be written by + firmware when DPSM is inactive (DPSMACT = 0), and can + dynamically be written by firmware when DPSM active + (DPSMACT = 1) and memory buffer 0 is inactive + (IDMABACT = 1). + 0 + 32 + + + + + IDMABASE1R + IDMABASE1R + The SDMMC_IDMABASE1R register contains the + double buffer configuration second buffer memory base + address. + 0x5C + 0x20 + read-write + 0x00000000 + + + IDMABASE1 + Buffer 1 memory base address, shall be + word aligned (bit [1:0] are always 0 and read only). + This register can be written by firmware when DPSM is + inactive (DPSMACT = 0), and can dynamically be + written by firmware when DPSM active (DPSMACT = 1) + and memory buffer 1 is inactive (IDMABACT = + 0). + 0 + 32 + + + + + FIFOR + FIFOR + The receive and transmit FIFOs can be only + read or written as word (32-bit) wide registers. The + FIFOs contain 16 entries on sequential addresses. This + allows the CPU to use its load and store multiple + operands to read from/write to the FIFO.When accessing + SDMMC_FIFOR with half word or byte access an AHB bus + fault is generated. + 0x80 + 0x20 + read-write + 0x00000000 + + + FIFODATA + Receive and transmit FIFO data This + register can only be read or written by firmware when + the DPSM is active (DPSMACT=1). The FIFO data + occupies 16 entries of 32-bit words. + 0 + 32 + + + + + RESPCMDR + RESPCMDR + SDMMC command response + register + 0x10 + 0x20 + read-only + 0xA3C5DD01 + + + RESPCMD + Response command index + 0 + 6 + + + + + + + SDMMC2 + 0x48022400 + + + VREFBUF + VREFBUF + VREFBUF + 0x58003C00 + + 0x0 + 0x400 + registers + + + + CSR + CSR + VREFBUF control and status + register + 0x0 + 0x20 + 0x00000002 + + + ENVR + Voltage reference buffer mode enable + This bit is used to enable the voltage reference + buffer mode. + 0 + 1 + read-write + + + HIZ + High impedance mode This bit controls + the analog switch to connect or not the VREF+ pin. + Refer to Table196: VREF buffer modes for the mode + descriptions depending on ENVR bit + configuration. + 1 + 1 + read-write + + + VRR + Voltage reference buffer + ready + 3 + 1 + read-only + + + VRS + Voltage reference scale These bits + select the value generated by the voltage reference + buffer. Other: Reserved + 4 + 3 + read-write + + + + + CCR + CCR + VREFBUF calibration control + register + 0x4 + 0x20 + read-write + 0x00000000 + + + TRIM + Trimming code These bits are + automatically initialized after reset with the + trimming value stored in the Flash memory during the + production test. Writing into these bits allows to + tune the internal reference buffer + voltage. + 0 + 6 + + + + + + + IWDG1 + IWDG + IWDG + 0x58004800 + + 0x0 + 0x400 + registers + + + + KR + KR + Key register + 0x0 + 0x20 + write-only + 0x00000000 + + + KEY + Key value (write only, read 0x0000) + These bits must be written by software at regular + intervals with the key value 0xAAAA, otherwise the + watchdog generates a reset when the counter reaches + 0. Writing the key value 0x5555 to enable access to + the IWDG_PR, IWDG_RLR and IWDG_WINR registers (see + Section23.3.6: Register access protection) Writing + the key value CCCCh starts the watchdog (except if + the hardware watchdog option is + selected) + 0 + 16 + + + + + PR + PR + Prescaler register + 0x4 + 0x20 + read-write + 0x00000000 + + + PR + Prescaler divider These bits are write + access protected see Section23.3.6: Register access + protection. They are written by software to select + the prescaler divider feeding the counter clock. PVU + bit of IWDG_SR must be reset in order to be able to + change the prescaler divider. Note: Reading this + register returns the prescaler value from the VDD + voltage domain. This value may not be up to + date/valid if a write operation to this register is + ongoing. For this reason the value read from this + register is valid only when the PVU bit in the + IWDG_SR register is reset. + 0 + 3 + + + + + RLR + RLR + Reload register + 0x8 + 0x20 + read-write + 0x00000FFF + + + RL + Watchdog counter reload value These bits + are write access protected see Section23.3.6. They + are written by software to define the value to be + loaded in the watchdog counter each time the value + 0xAAAA is written in the IWDG_KR register. The + watchdog counter counts down from this value. The + timeout period is a function of this value and the + clock prescaler. Refer to the datasheet for the + timeout information. The RVU bit in the IWDG_SR + register must be reset in order to be able to change + the reload value. Note: Reading this register returns + the reload value from the VDD voltage domain. This + value may not be up to date/valid if a write + operation to this register is ongoing on this + register. For this reason the value read from this + register is valid only when the RVU bit in the + IWDG_SR register is reset. + 0 + 12 + + + + + SR + SR + Status register + 0xC + 0x20 + read-only + 0x00000000 + + + PVU + Watchdog prescaler value update This bit + is set by hardware to indicate that an update of the + prescaler value is ongoing. It is reset by hardware + when the prescaler update operation is completed in + the VDD voltage domain (takes up to 5 RC 40 kHz + cycles). Prescaler value can be updated only when PVU + bit is reset. + 0 + 1 + + + RVU + Watchdog counter reload value update + This bit is set by hardware to indicate that an + update of the reload value is ongoing. It is reset by + hardware when the reload value update operation is + completed in the VDD voltage domain (takes up to 5 RC + 40 kHz cycles). Reload value can be updated only when + RVU bit is reset. + 1 + 1 + + + WVU + Watchdog counter window value update + This bit is set by hardware to indicate that an + update of the window value is ongoing. It is reset by + hardware when the reload value update operation is + completed in the VDD voltage domain (takes up to 5 RC + 40 kHz cycles). Window value can be updated only when + WVU bit is reset. This bit is generated only if + generic window = 1 + 2 + 1 + + + + + WINR + WINR + Window register + 0x10 + 0x20 + read-write + 0x00000FFF + + + WIN + Watchdog counter window value These bits + are write access protected see Section23.3.6. These + bits contain the high limit of the window value to be + compared to the downcounter. To prevent a reset, the + downcounter must be reloaded when its value is lower + than the window register value and greater than 0x0 + The WVU bit in the IWDG_SR register must be reset in + order to be able to change the reload value. Note: + Reading this register returns the reload value from + the VDD voltage domain. This value may not be valid + if a write operation to this register is ongoing. For + this reason the value read from this register is + valid only when the WVU bit in the IWDG_SR register + is reset. + 0 + 12 + + + + + + + IWDG2 + 0x58004C00 + + + WWDG1 + WWDG + WWDG + 0x50003000 + + 0x0 + 0x400 + registers + + + WWDG1 + Window Watchdog interrupt + 0 + + + + CR + CR + Control register + 0x0 + 0x20 + read-write + 0x0000007F + + + T + 7-bit counter (MSB to LSB) These bits + contain the value of the watchdog counter. It is + decremented every (4096 x 2WDGTB[1:0]) PCLK cycles. A + reset is produced when it is decremented from 0x40 to + 0x3F (T6 becomes cleared). + 0 + 7 + + + WDGA + Activation bit This bit is set by + software and only cleared by hardware after a reset. + When WDGA=1, the watchdog can generate a + reset. + 7 + 1 + + + + + CFR + CFR + Configuration register + 0x4 + 0x20 + read-write + 0x0000007F + + + W + 7-bit window value These bits contain + the window value to be compared to the + downcounter. + 0 + 7 + + + WDGTB + Timer base The time base of the + prescaler can be modified as follows: + 11 + 2 + + + EWI + Early wakeup interrupt When set, an + interrupt occurs whenever the counter reaches the + value 0x40. This interrupt is only cleared by + hardware after a reset. + 9 + 1 + + + + + SR + SR + Status register + 0x8 + 0x20 + read-write + 0x00000000 + + + EWIF + Early wakeup interrupt flag This bit is + set by hardware when the counter has reached the + value 0x40. It must be cleared by software by writing + 0. A write of 1 has no effect. This bit is also set + if the interrupt is not enabled. + 0 + 1 + + + + + + + WWDG2 + 0x40002C00 + + WWDG2_RST + Window Watchdog interrupt + 143 + + + + PWR + PWR + PWR + 0x58024800 + + 0x0 + 0x400 + registers + + + + CR1 + CR1 + PWR control register 1 + 0x0 + 0x20 + read-write + 0xF000C000 + + + LPDS + Low-power Deepsleep with SVOS3 (SVOS4 + and SVOS5 always use low-power, regardless of the + setting of this bit) + 0 + 1 + + + PVDE + Programmable voltage detector + enable + 4 + 1 + + + PLS + Programmable voltage detector level + selection These bits select the voltage threshold + detected by the PVD. Note: Refer to Section + Electrical characteristics of the product datasheet + for more details. + 5 + 3 + + + DBP + Disable backup domain write protection + In reset state, the RCC_BDCR register, the RTC + registers (including the backup registers), BREN and + MOEN bits in PWR_CR2 register, are protected against + parasitic write access. This bit must be set to + enable write access to these registers. + 8 + 1 + + + FLPS + Flash low-power mode in DStop mode This + bit allows to obtain the best trade-off between + low-power consumption and restart time when exiting + from DStop mode. When it is set, the Flash memory + enters low-power mode when D1 domain is in DStop + mode. + 9 + 1 + + + SVOS + System Stop mode voltage scaling + selection These bits control the VCORE voltage level + in system Stop mode, to obtain the best trade-off + between power consumption and + performance. + 14 + 2 + + + AVDEN + Peripheral voltage monitor on VDDA + enable + 16 + 1 + + + ALS + Analog voltage detector level selection + These bits select the voltage threshold detected by + the AVD. + 17 + 2 + + + + + CSR1 + CSR1 + PWR control status register 1 + 0x4 + 0x20 + read-only + 0x00004000 + + + PVDO + Programmable voltage detect output This + bit is set and cleared by hardware. It is valid only + if the PVD has been enabled by the PVDE bit. Note: + since the PVD is disabled in Standby mode, this bit + is equal to 0 after Standby or reset until the PVDE + bit is set. + 4 + 1 + + + ACTVOSRDY + Voltage levels ready bit for currently + used VOS and SDLEVEL This bit is set to 1 by hardware + when the voltage regulator and the SD converter are + both disabled and Bypass mode is selected in PWR + control register 3 (PWR_CR3). + 13 + 1 + + + ACTVOS + VOS currently applied for VCORE voltage + scaling selection. These bits reflect the last VOS + value applied to the PMU. + 14 + 2 + + + AVDO + Analog voltage detector output on VDDA + This bit is set and cleared by hardware. It is valid + only if AVD on VDDA is enabled by the AVDEN bit. + Note: Since the AVD is disabled in Standby mode, this + bit is equal to 0 after Standby or reset until the + AVDEN bit is set. + 16 + 1 + + + + + CR2 + CR2 + This register is not reset by wakeup from + Standby mode, RESET signal and VDD POR. It is only reset + by VSW POR and VSWRST reset. This register shall not be + accessed when VSWRST bit in RCC_BDCR register resets the + VSW domain.After reset, PWR_CR2 register is + write-protected. Prior to modifying its content, the DBP + bit in PWR_CR1 register must be set to disable the write + protection. + 0x8 + 0x20 + 0x00000000 + + + BREN + Backup regulator enable When set, the + Backup regulator (used to maintain the backup RAM + content in Standby and VBAT modes) is enabled. If + BREN is reset, the backup regulator is switched off. + The backup RAM can still be used in Run and Stop + modes. However, its content will be lost in Standby + and VBAT modes. If BREN is set, the application must + wait till the Backup Regulator Ready flag (BRRDY) is + set to indicate that the data written into the SRAM + will be maintained in Standby and VBAT + modes. + 0 + 1 + read-write + + + MONEN + VBAT and temperature monitoring enable + When set, the VBAT supply and temperature monitoring + is enabled. + 4 + 1 + read-write + + + BRRDY + Backup regulator ready This bit is set + by hardware to indicate that the Backup regulator is + ready. + 16 + 1 + read-only + + + VBATL + VBAT level monitoring versus low + threshold + 20 + 1 + read-only + + + VBATH + VBAT level monitoring versus high + threshold + 21 + 1 + read-only + + + TEMPL + Temperature level monitoring versus low + threshold + 22 + 1 + read-only + + + TEMPH + Temperature level monitoring versus high + threshold + 23 + 1 + read-only + + + + + CR3 + CR3 + Reset only by POR only, not reset by wakeup + from Standby mode and RESET pad. The lower byte of this + register is written once after POR and shall be written + before changing VOS level or ck_sys clock frequency. No + limitation applies to the upper bytes.Programming data + corresponding to an invalid combination of SDLEVEL, + SDEXTHP, SDEN, LDOEN and BYPASS bits (see Table9) will be + ignored: data will not be written, the written-once + mechanism will lock the register and any further write + access will be ignored. The default supply configuration + will be kept and the ACTVOSRDY bit in PWR control status + register 1 (PWR_CSR1) will go on indicating invalid + voltage levels. The system shall be power cycled before + writing a new value. + 0xC + 0x20 + 0x00000006 + + + BYPASS + Power management unit + bypass + 0 + 1 + read-write + + + LDOEN + Low drop-out regulator + enable + 1 + 1 + read-write + + + SDEN + SD converter Enable + 2 + 1 + read-write + + + VBE + VBAT charging enable + 8 + 1 + read-write + + + VBRS + VBAT charging resistor + selection + 9 + 1 + read-write + + + USB33DEN + VDD33USB voltage level detector + enable. + 24 + 1 + write-only + + + USBREGEN + USB regulator enable. + 25 + 1 + read-write + + + USB33RDY + USB supply ready. + 26 + 1 + read-only + + + + + CPUCR + CPUCR + This register allows controlling CPU1 + power. + 0x10 + 0x20 + 0x00000000 + + + PDDS_D1 + D1 domain Power Down Deepsleep + selection. This bit allows CPU1 to define the + Deepsleep mode for D1 domain. + 0 + 1 + read-write + + + PDDS_D2 + D2 domain Power Down Deepsleep. This bit + allows CPU1 to define the Deepsleep mode for D2 + domain. + 1 + 1 + read-write + + + PDDS_D3 + System D3 domain Power Down Deepsleep. + This bit allows CPU1 to define the Deepsleep mode for + System D3 domain. + 2 + 1 + read-write + + + STOPF + STOP flag This bit is set by hardware + and cleared only by any reset or by setting the CPU1 + CSSF bit. + 5 + 1 + read-only + + + SBF + System Standby flag This bit is set by + hardware and cleared only by a POR (Power-on Reset) + or by setting the CPU1 CSSF bit + 6 + 1 + read-only + + + SBF_D1 + D1 domain DStandby flag This bit is set + by hardware and cleared by any system reset or by + setting the CPU1 CSSF bit. Once set, this bit can be + cleared only when the D1 domain is no longer in + DStandby mode. + 7 + 1 + read-only + + + SBF_D2 + D2 domain DStandby flag This bit is set + by hardware and cleared by any system reset or by + setting the CPU1 CSSF bit. Once set, this bit can be + cleared only when the D2 domain is no longer in + DStandby mode. + 8 + 1 + read-only + + + CSSF + Clear D1 domain CPU1 Standby, Stop and + HOLD flags (always read as 0) This bit is cleared to + 0 by hardware. + 9 + 1 + read-write + + + RUN_D3 + Keep system D3 domain in Run mode + regardless of the CPU sub-systems modes + 11 + 1 + read-write + + + + + D3CR + D3CR + This register allows controlling D3 domain + power.Following reset VOSRDY will be read 1 by + software + 0x18 + 0x20 + 0x00004000 + + + VOSRDY + VOS Ready bit for VCORE voltage scaling + output selection. This bit is set to 1 by hardware + when Bypass mode is selected in PWR control register + 3 (PWR_CR3). + 13 + 1 + read-only + + + VOS + Voltage scaling selection according to + performance These bits control the VCORE voltage + level and allow to obtains the best trade-off between + power consumption and performance: When increasing + the performance, the voltage scaling shall be changed + before increasing the system frequency. When + decreasing performance, the system frequency shall + first be decreased before changing the voltage + scaling. + 14 + 2 + read-write + + + + + WKUPCR + WKUPCR + reset only by system reset, not reset by + wakeup from Standby mode5 wait states are required when + writing this register (when clearing a WKUPF bit in + PWR_WKUPFR, the AHB write access will complete after the + WKUPF has been cleared). + 0x20 + 0x20 + read-write + 0x00000000 + + + WKUPC + Clear Wakeup pin flag for WKUP. These + bits are always read as 0. + 0 + 6 + + + + + WKUPFR + WKUPFR + reset only by system reset, not reset by + wakeup from Standby mode + 0x24 + 0x20 + read-write + 0x00000000 + + + WKUPF1 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 0 + 1 + + + WKUPF2 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 1 + 1 + + + WKUPF3 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 2 + 1 + + + WKUPF4 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 3 + 1 + + + WKUPF5 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 4 + 1 + + + WKUPF6 + Wakeup pin WKUPF flag. This bit is set + by hardware and cleared only by a Reset pin or by + setting the WKUPCn+1 bit in the PWR wakeup clear + register (PWR_WKUPCR). + 5 + 1 + + + + + WKUPEPR + WKUPEPR + Reset only by system reset, not reset by + wakeup from Standby mode + 0x28 + 0x20 + read-write + 0x00000000 + + + WKUPEN1 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 0 + 1 + + + WKUPEN2 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 1 + 1 + + + WKUPEN3 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 2 + 1 + + + WKUPEN4 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 3 + 1 + + + WKUPEN5 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 4 + 1 + + + WKUPEN6 + Enable Wakeup Pin WKUPn+1 Each bit is + set and cleared by software. Note: An additional + wakeup event is detected if WKUPn+1 pin is enabled + (by setting the WKUPENn+1 bit) when WKUPn+1 pin level + is already high when WKUPPn+1 selects rising edge, or + low when WKUPPn+1 selects falling edge. + 5 + 1 + + + WKUPP1 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 8 + 1 + + + WKUPP2 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 9 + 1 + + + WKUPP3 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 10 + 1 + + + WKUPP4 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 11 + 1 + + + WKUPP5 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 12 + 1 + + + WKUPP6 + Wakeup pin polarity bit for WKUPn-7 + These bits define the polarity used for event + detection on WKUPn-7 external wakeup + pin. + 13 + 1 + + + WKUPPUPD1 + Wakeup pin pull + configuration + 16 + 2 + + + WKUPPUPD2 + Wakeup pin pull + configuration + 18 + 2 + + + WKUPPUPD3 + Wakeup pin pull + configuration + 20 + 2 + + + WKUPPUPD4 + Wakeup pin pull + configuration + 22 + 2 + + + WKUPPUPD5 + Wakeup pin pull + configuration + 24 + 2 + + + WKUPPUPD6 + Wakeup pin pull configuration for + WKUP(truncate(n/2)-7) These bits define the I/O pad + pull configuration used when WKUPEN(truncate(n/2)-7) + = 1. The associated GPIO port pull configuration + shall be set to the same value or to 00. The Wakeup + pin pull configuration is kept in Standby + mode. + 26 + 2 + + + + + + + SPI1 + Serial peripheral interface + SPI + 0x40013000 + + 0x0 + 0x400 + registers + + + SPI1 + SPI1 global interrupt + 35 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + 0x00000000 + + + IOLOCK + Locking the AF configuration of + associated IOs + 16 + 1 + read-only + + + TCRCI + CRC calculation initialization pattern + control for transmitter + 15 + 1 + read-write + + + RCRCI + CRC calculation initialization pattern + control for receiver + 14 + 1 + read-write + + + CRC33_17 + 32-bit CRC polynomial + configuration + 13 + 1 + read-write + + + SSI + Internal SS signal input + level + 12 + 1 + read-write + + + HDDIR + Rx/Tx direction at Half-duplex + mode + 11 + 1 + read-write + + + CSUSP + Master SUSPend request + 10 + 1 + write-only + + + CSTART + Master transfer start + 9 + 1 + read-only + + + MASRX + Master automatic SUSP in Receive + mode + 8 + 1 + read-write + + + SPE + Serial Peripheral Enable + 0 + 1 + read-write + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + 0x00000000 + + + TSER + Number of data transfer extension to be + reload into TSIZE just when a previous + 16 + 16 + read-only + + + TSIZE + Number of data at current + transfer + 0 + 16 + read-write + + + + + CFG1 + CFG1 + configuration register 1 + 0x8 + 0x20 + read-write + 0x00070007 + + + MBR + Master baud rate + 28 + 3 + + + CRCEN + Hardware CRC computation + enable + 22 + 1 + + + CRCSIZE + Length of CRC frame to be transacted and + compared + 16 + 5 + + + TXDMAEN + Tx DMA stream enable + 15 + 1 + + + RXDMAEN + Rx DMA stream enable + 14 + 1 + + + UDRDET + Detection of underrun condition at slave + transmitter + 11 + 2 + + + UDRCFG + Behavior of slave transmitter at + underrun condition + 9 + 2 + + + FTHVL + threshold level + 5 + 4 + + + DSIZE + Number of bits in at single SPI data + frame + 0 + 5 + + + + + CFG2 + CFG2 + configuration register 2 + 0xC + 0x20 + read-write + 0x00000000 + + + AFCNTR + Alternate function GPIOs + control + 31 + 1 + + + SSOM + SS output management in master + mode + 30 + 1 + + + SSOE + SS output enable + 29 + 1 + + + SSIOP + SS input/output polarity + 28 + 1 + + + SSM + Software management of SS signal + input + 26 + 1 + + + CPOL + Clock polarity + 25 + 1 + + + CPHA + Clock phase + 24 + 1 + + + LSBFRST + Data frame format + 23 + 1 + + + MASTER + SPI Master + 22 + 1 + + + SP + Serial Protocol + 19 + 3 + + + COMM + SPI Communication Mode + 17 + 2 + + + IOSWP + Swap functionality of MISO and MOSI + pins + 15 + 1 + + + MIDI + Master Inter-Data Idleness + 4 + 4 + + + MSSI + Master SS Idleness + 0 + 4 + + + + + IER + IER + Interrupt Enable Register + 0x10 + 0x20 + 0x00000000 + + + TSERFIE + Additional number of transactions reload + interrupt enable + 10 + 1 + read-write + + + MODFIE + Mode Fault interrupt + enable + 9 + 1 + read-write + + + TIFREIE + TIFRE interrupt enable + 8 + 1 + read-write + + + CRCEIE + CRC Interrupt enable + 7 + 1 + read-write + + + OVRIE + OVR interrupt enable + 6 + 1 + read-write + + + UDRIE + UDR interrupt enable + 5 + 1 + read-write + + + TXTFIE + TXTFIE interrupt enable + 4 + 1 + read-write + + + EOTIE + EOT, SUSP and TXC interrupt + enable + 3 + 1 + read-write + + + DPXPIE + DXP interrupt enabled + 2 + 1 + read-only + + + TXPIE + TXP interrupt enable + 1 + 1 + read-only + + + RXPIE + RXP Interrupt Enable + 0 + 1 + read-write + + + + + SR + SR + Status Register + 0x14 + 0x20 + read-only + 0x00001002 + + + CTSIZE + Number of data frames remaining in + current TSIZE session + 16 + 16 + + + RXWNE + RxFIFO Word Not Empty + 15 + 1 + + + RXPLVL + RxFIFO Packing LeVeL + 13 + 2 + + + TXC + TxFIFO transmission + complete + 12 + 1 + + + SUSP + SUSPend + 11 + 1 + + + TSERF + Additional number of SPI data to be + transacted was reload + 10 + 1 + + + MODF + Mode Fault + 9 + 1 + + + TIFRE + TI frame format error + 8 + 1 + + + CRCE + CRC Error + 7 + 1 + + + OVR + Overrun + 6 + 1 + + + UDR + Underrun at slave transmission + mode + 5 + 1 + + + TXTF + Transmission Transfer + Filled + 4 + 1 + + + EOT + End Of Transfer + 3 + 1 + + + DXP + Duplex Packet + 2 + 1 + + + TXP + Tx-Packet space available + 1 + 1 + + + RXP + Rx-Packet available + 0 + 1 + + + + + IFCR + IFCR + Interrupt/Status Flags Clear + Register + 0x18 + 0x20 + write-only + 0x00000000 + + + SUSPC + SUSPend flag clear + 11 + 1 + + + TSERFC + TSERFC flag clear + 10 + 1 + + + MODFC + Mode Fault flag clear + 9 + 1 + + + TIFREC + TI frame format error flag + clear + 8 + 1 + + + CRCEC + CRC Error flag clear + 7 + 1 + + + OVRC + Overrun flag clear + 6 + 1 + + + UDRC + Underrun flag clear + 5 + 1 + + + TXTFC + Transmission Transfer Filled flag + clear + 4 + 1 + + + EOTC + End Of Transfer flag clear + 3 + 1 + + + + + TXDR + TXDR + Transmit Data Register + 0x20 + 0x20 + write-only + 0x00000000 + + + TXDR + Transmit data register + 0 + 32 + + + + + RXDR + RXDR + Receive Data Register + 0x30 + 0x20 + read-only + 0x00000000 + + + RXDR + Receive data register + 0 + 32 + + + + + CRCPOLY + CRCPOLY + Polynomial Register + 0x40 + 0x20 + read-write + 0x00000107 + + + CRCPOLY + CRC polynomial register + 0 + 32 + + + + + TXCRC + TXCRC + Transmitter CRC Register + 0x44 + 0x20 + read-write + 0x00000000 + + + TXCRC + CRC register for + transmitter + 0 + 32 + + + + + RXCRC + RXCRC + Receiver CRC Register + 0x48 + 0x20 + read-write + 0x00000000 + + + RXCRC + CRC register for receiver + 0 + 32 + + + + + UDRDR + UDRDR + Underrun Data Register + 0x4C + 0x20 + read-write + 0x00000000 + + + UDRDR + Data at slave underrun + condition + 0 + 32 + + + + + CGFR + CGFR + configuration register + 0x50 + 0x20 + read-write + 0x00000000 + + + MCKOE + Master clock output enable + 25 + 1 + + + ODD + Odd factor for the + prescaler + 24 + 1 + + + I2SDIV + I2S linear prescaler + 16 + 8 + + + DATFMT + Data format + 14 + 1 + + + WSINV + Fixed channel length in + SLAVE + 13 + 1 + + + FIXCH + Word select inversion + 12 + 1 + + + CKPOL + Serial audio clock + polarity + 11 + 1 + + + CHLEN + Channel length (number of bits per audio + channel) + 10 + 1 + + + DATLEN + Data length to be + transferred + 8 + 2 + + + PCMSYNC + PCM frame synchronization + 7 + 1 + + + I2SSTD + I2S standard selection + 4 + 2 + + + I2SCFG + I2S configuration mode + 1 + 3 + + + I2SMOD + I2S mode selection + 0 + 1 + + + + + + + SPI2 + 0x40003800 + + SPI2 + SPI2 global interrupt + 36 + + + + SPI3 + 0x40003C00 + + SPI3 + SPI3 global interrupt + 51 + + + + SPI4 + 0x40013400 + + SPI4 + SPI4 global interrupt + 84 + + + + SPI5 + 0x40015000 + + SPI5 + SPI5 global interrupt + 85 + + + + SPI6 + 0x58001400 + + SPI6 + SPI6 global interrupt + 86 + + + + LTDC + LCD-TFT Controller + LTDC + 0x50001000 + + 0x0 + 0x1000 + registers + + + LTDC + LCD-TFT global interrupt + 88 + + + LTDC_ER + LCD-TFT error interrupt + 89 + + + + SSCR + SSCR + Synchronization Size Configuration + Register + 0x8 + 0x20 + read-write + 0x00000000 + + + HSW + Horizontal Synchronization Width (in + units of pixel clock period) + 16 + 10 + + + VSH + Vertical Synchronization Height (in + units of horizontal scan line) + 0 + 11 + + + + + BPCR + BPCR + Back Porch Configuration + Register + 0xC + 0x20 + read-write + 0x00000000 + + + AHBP + Accumulated Horizontal back porch (in + units of pixel clock period) + 16 + 12 + + + AVBP + Accumulated Vertical back porch (in + units of horizontal scan line) + 0 + 11 + + + + + AWCR + AWCR + Active Width Configuration + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + AAV + AAV + 16 + 12 + + + AAH + Accumulated Active Height (in units of + horizontal scan line) + 0 + 11 + + + + + TWCR + TWCR + Total Width Configuration + Register + 0x14 + 0x20 + read-write + 0x00000000 + + + TOTALW + Total Width (in units of pixel clock + period) + 16 + 12 + + + TOTALH + Total Height (in units of horizontal + scan line) + 0 + 11 + + + + + GCR + GCR + Global Control Register + 0x18 + 0x20 + 0x00002220 + + + HSPOL + Horizontal Synchronization + Polarity + 31 + 1 + read-write + + + VSPOL + Vertical Synchronization + Polarity + 30 + 1 + read-write + + + DEPOL + Data Enable Polarity + 29 + 1 + read-write + + + PCPOL + Pixel Clock Polarity + 28 + 1 + read-write + + + DEN + Dither Enable + 16 + 1 + read-write + + + DRW + Dither Red Width + 12 + 3 + read-only + + + DGW + Dither Green Width + 8 + 3 + read-only + + + DBW + Dither Blue Width + 4 + 3 + read-only + + + LTDCEN + LCD-TFT controller enable + bit + 0 + 1 + read-write + + + + + SRCR + SRCR + Shadow Reload Configuration + Register + 0x24 + 0x20 + read-write + 0x00000000 + + + VBR + Vertical Blanking Reload + 1 + 1 + + + IMR + Immediate Reload + 0 + 1 + + + + + BCCR + BCCR + Background Color Configuration + Register + 0x2C + 0x20 + read-write + 0x00000000 + + + BCBLUE + Background Color Blue + value + 0 + 8 + + + BCGREEN + Background Color Green + value + 8 + 8 + + + BCRED + Background Color Red value + 16 + 8 + + + + + IER + IER + Interrupt Enable Register + 0x34 + 0x20 + read-write + 0x00000000 + + + RRIE + Register Reload interrupt + enable + 3 + 1 + + + TERRIE + Transfer Error Interrupt + Enable + 2 + 1 + + + FUIE + FIFO Underrun Interrupt + Enable + 1 + 1 + + + LIE + Line Interrupt Enable + 0 + 1 + + + + + ISR + ISR + Interrupt Status Register + 0x38 + 0x20 + read-only + 0x00000000 + + + RRIF + Register Reload Interrupt + Flag + 3 + 1 + + + TERRIF + Transfer Error interrupt + flag + 2 + 1 + + + FUIF + FIFO Underrun Interrupt + flag + 1 + 1 + + + LIF + Line Interrupt flag + 0 + 1 + + + + + ICR + ICR + Interrupt Clear Register + 0x3C + 0x20 + write-only + 0x00000000 + + + CRRIF + Clears Register Reload Interrupt + Flag + 3 + 1 + + + CTERRIF + Clears the Transfer Error Interrupt + Flag + 2 + 1 + + + CFUIF + Clears the FIFO Underrun Interrupt + flag + 1 + 1 + + + CLIF + Clears the Line Interrupt + Flag + 0 + 1 + + + + + LIPCR + LIPCR + Line Interrupt Position Configuration + Register + 0x40 + 0x20 + read-write + 0x00000000 + + + LIPOS + Line Interrupt Position + 0 + 11 + + + + + CPSR + CPSR + Current Position Status + Register + 0x44 + 0x20 + read-only + 0x00000000 + + + CXPOS + Current X Position + 16 + 16 + + + CYPOS + Current Y Position + 0 + 16 + + + + + CDSR + CDSR + Current Display Status + Register + 0x48 + 0x20 + read-only + 0x0000000F + + + HSYNCS + Horizontal Synchronization display + Status + 3 + 1 + + + VSYNCS + Vertical Synchronization display + Status + 2 + 1 + + + HDES + Horizontal Data Enable display + Status + 1 + 1 + + + VDES + Vertical Data Enable display + Status + 0 + 1 + + + + + L1CR + L1CR + Layerx Control Register + 0x84 + 0x20 + read-write + 0x00000000 + + + CLUTEN + Color Look-Up Table Enable + 4 + 1 + + + COLKEN + Color Keying Enable + 1 + 1 + + + LEN + Layer Enable + 0 + 1 + + + + + L1WHPCR + L1WHPCR + Layerx Window Horizontal Position + Configuration Register + 0x88 + 0x20 + read-write + 0x00000000 + + + WHSPPOS + Window Horizontal Stop + Position + 16 + 12 + + + WHSTPOS + Window Horizontal Start + Position + 0 + 12 + + + + + L1WVPCR + L1WVPCR + Layerx Window Vertical Position + Configuration Register + 0x8C + 0x20 + read-write + 0x00000000 + + + WVSPPOS + Window Vertical Stop + Position + 16 + 11 + + + WVSTPOS + Window Vertical Start + Position + 0 + 11 + + + + + L1CKCR + L1CKCR + Layerx Color Keying Configuration + Register + 0x90 + 0x20 + read-write + 0x00000000 + + + CKRED + Color Key Red value + 16 + 8 + + + CKGREEN + Color Key Green value + 8 + 8 + + + CKBLUE + Color Key Blue value + 0 + 8 + + + + + L1PFCR + L1PFCR + Layerx Pixel Format Configuration + Register + 0x94 + 0x20 + read-write + 0x00000000 + + + PF + Pixel Format + 0 + 3 + + + + + L1CACR + L1CACR + Layerx Constant Alpha Configuration + Register + 0x98 + 0x20 + read-write + 0x00000000 + + + CONSTA + Constant Alpha + 0 + 8 + + + + + L1DCCR + L1DCCR + Layerx Default Color Configuration + Register + 0x9C + 0x20 + read-write + 0x00000000 + + + DCALPHA + Default Color Alpha + 24 + 8 + + + DCRED + Default Color Red + 16 + 8 + + + DCGREEN + Default Color Green + 8 + 8 + + + DCBLUE + Default Color Blue + 0 + 8 + + + + + L1BFCR + L1BFCR + Layerx Blending Factors Configuration + Register + 0xA0 + 0x20 + read-write + 0x00000607 + + + BF1 + Blending Factor 1 + 8 + 3 + + + BF2 + Blending Factor 2 + 0 + 3 + + + + + L1CFBAR + L1CFBAR + Layerx Color Frame Buffer Address + Register + 0xAC + 0x20 + read-write + 0x00000000 + + + CFBADD + Color Frame Buffer Start + Address + 0 + 32 + + + + + L1CFBLR + L1CFBLR + Layerx Color Frame Buffer Length + Register + 0xB0 + 0x20 + read-write + 0x00000000 + + + CFBP + Color Frame Buffer Pitch in + bytes + 16 + 13 + + + CFBLL + Color Frame Buffer Line + Length + 0 + 13 + + + + + L1CFBLNR + L1CFBLNR + Layerx ColorFrame Buffer Line Number + Register + 0xB4 + 0x20 + read-write + 0x00000000 + + + CFBLNBR + Frame Buffer Line Number + 0 + 11 + + + + + L1CLUTWR + L1CLUTWR + Layerx CLUT Write Register + 0xC4 + 0x20 + write-only + 0x00000000 + + + CLUTADD + CLUT Address + 24 + 8 + + + RED + Red value + 16 + 8 + + + GREEN + Green value + 8 + 8 + + + BLUE + Blue value + 0 + 8 + + + + + L2CR + L2CR + Layerx Control Register + 0x104 + 0x20 + read-write + 0x00000000 + + + CLUTEN + Color Look-Up Table Enable + 4 + 1 + + + COLKEN + Color Keying Enable + 1 + 1 + + + LEN + Layer Enable + 0 + 1 + + + + + L2WHPCR + L2WHPCR + Layerx Window Horizontal Position + Configuration Register + 0x108 + 0x20 + read-write + 0x00000000 + + + WHSPPOS + Window Horizontal Stop + Position + 16 + 12 + + + WHSTPOS + Window Horizontal Start + Position + 0 + 12 + + + + + L2WVPCR + L2WVPCR + Layerx Window Vertical Position + Configuration Register + 0x10C + 0x20 + read-write + 0x00000000 + + + WVSPPOS + Window Vertical Stop + Position + 16 + 11 + + + WVSTPOS + Window Vertical Start + Position + 0 + 11 + + + + + L2CKCR + L2CKCR + Layerx Color Keying Configuration + Register + 0x110 + 0x20 + read-write + 0x00000000 + + + CKRED + Color Key Red value + 16 + 8 + + + CKGREEN + Color Key Green value + 8 + 8 + + + CKBLUE + Color Key Blue value + 0 + 8 + + + + + L2PFCR + L2PFCR + Layerx Pixel Format Configuration + Register + 0x114 + 0x20 + read-write + 0x00000000 + + + PF + Pixel Format + 0 + 3 + + + + + L2CACR + L2CACR + Layerx Constant Alpha Configuration + Register + 0x118 + 0x20 + read-write + 0x00000000 + + + CONSTA + Constant Alpha + 0 + 8 + + + + + L2DCCR + L2DCCR + Layerx Default Color Configuration + Register + 0x11C + 0x20 + read-write + 0x00000000 + + + DCALPHA + Default Color Alpha + 24 + 8 + + + DCRED + Default Color Red + 16 + 8 + + + DCGREEN + Default Color Green + 8 + 8 + + + DCBLUE + Default Color Blue + 0 + 8 + + + + + L2BFCR + L2BFCR + Layerx Blending Factors Configuration + Register + 0x120 + 0x20 + read-write + 0x00000607 + + + BF1 + Blending Factor 1 + 8 + 3 + + + BF2 + Blending Factor 2 + 0 + 3 + + + + + L2CFBAR + L2CFBAR + Layerx Color Frame Buffer Address + Register + 0x12C + 0x20 + read-write + 0x00000000 + + + CFBADD + Color Frame Buffer Start + Address + 0 + 32 + + + + + L2CFBLR + L2CFBLR + Layerx Color Frame Buffer Length + Register + 0x130 + 0x20 + read-write + 0x00000000 + + + CFBP + Color Frame Buffer Pitch in + bytes + 16 + 13 + + + CFBLL + Color Frame Buffer Line + Length + 0 + 13 + + + + + L2CFBLNR + L2CFBLNR + Layerx ColorFrame Buffer Line Number + Register + 0x134 + 0x20 + read-write + 0x00000000 + + + CFBLNBR + Frame Buffer Line Number + 0 + 11 + + + + + L2CLUTWR + L2CLUTWR + Layerx CLUT Write Register + 0x144 + 0x20 + write-only + 0x00000000 + + + CLUTADD + CLUT Address + 24 + 8 + + + RED + Red value + 16 + 8 + + + GREEN + Green value + 8 + 8 + + + BLUE + Blue value + 0 + 8 + + + + + + + DSIHOST + DSIHOST + DSIHOST + 0x50000000 + + 0x0 + 0x800 + registers + + + + DSI_VR + DSI_VR + DSI Host version register + 0x0 + 0x20 + read-only + 0x3133302A + + + VERSION + VERSION + 0 + 32 + + + + + DSI_CR + DSI_CR + DSI Host control register + 0x4 + 0x20 + read-write + 0x00000000 + + + EN + EN + 0 + 1 + + + + + DSI_CCR + DSI_CCR + DSI Host clock control register + 0x8 + 0x20 + read-write + 0x00000000 + + + TXECKDIV + TXECKDIV + 0 + 8 + + + TOCKDIV + TOCKDIV + 8 + 8 + + + + + DSI_LVCIDR + DSI_LVCIDR + DSI Host LTDC VCID register + 0xC + 0x20 + read-write + 0x00000000 + + + VCID + VCID + 0 + 2 + + + + + DSI_LCOLCR + DSI_LCOLCR + DSI Host LTDC color coding register + 0x10 + 0x20 + read-write + 0x00000000 + + + COLC + COLC + 0 + 4 + + + LPE + LPE + 8 + 1 + + + + + DSI_LPCR + DSI_LPCR + DSI Host LTDC polarity configuration register + 0x14 + 0x20 + read-write + 0x00000000 + + + DEP + DEP + 0 + 1 + + + VSP + VSP + 1 + 1 + + + HSP + HSP + 2 + 1 + + + + + DSI_LPMCR + DSI_LPMCR + DSI Host low-power mode configuration register + 0x18 + 0x20 + read-write + 0x00000000 + + + VLPSIZE + VLPSIZE + 0 + 8 + + + LPSIZE + LPSIZE + 16 + 8 + + + + + DSI_PCR + DSI_PCR + DSI Host protocol configuration register + 0x2C + 0x20 + read-write + 0x00000000 + + + ETTXE + ETTXE + 0 + 1 + + + ETRXE + ETRXE + 1 + 1 + + + BTAE + BTAE + 2 + 1 + + + ECCRXE + ECCRXE + 3 + 1 + + + CRCRXE + CRCRXE + 4 + 1 + + + + + DSI_GVCIDR + DSI_GVCIDR + DSI Host generic VCID register + 0x30 + 0x20 + read-only + 0x00000000 + + + VCID + VCID + 0 + 2 + + + + + DSI_MCR + DSI_MCR + DSI Host mode configuration register + 0x34 + 0x20 + read-write + 0x00000001 + + + CMDM + CMDM + 0 + 1 + + + + + DSI_VMCR + DSI_VMCR + DSI Host video mode configuration register + 0x38 + 0x20 + read-write + 0x00000000 + + + VMT + VMT + 0 + 2 + + + LPVSAE + LPVSAE + 8 + 1 + + + LPVBPE + LPVBPE + 9 + 1 + + + LPVFPE + LPVFPE + 10 + 1 + + + LPVAE + LPVAE + 11 + 1 + + + LPHBPE + LPHBPE + 12 + 1 + + + LPHFPE + LPHFPE + 13 + 1 + + + FBTAAE + FBTAAE + 14 + 1 + + + LPCE + LPCE + 15 + 1 + + + PGE + PGE + 16 + 1 + + + PGM + PGM + 20 + 1 + + + PGO + PGO + 24 + 1 + + + + + DSI_VPCR + DSI_VPCR + DSI Host video packet configuration register + 0x3C + 0x20 + read-write + 0x00000000 + + + VPSIZE + VPSIZE + 0 + 14 + + + + + DSI_VCCR + DSI_VCCR + DSI Host video chunks configuration register + 0x40 + 0x20 + read-write + 0x00000000 + + + NUMC + NUMC + 0 + 13 + + + + + DSI_VNPCR + DSI_VNPCR + DSI Host video null packet configuration register + 0x44 + 0x20 + read-write + 0x00000000 + + + NPSIZE + NPSIZE + 0 + 13 + + + + + DSI_VHSACR + DSI_VHSACR + DSI Host video HSA configuration register + 0x48 + 0x20 + read-write + 0x00000000 + + + HSA + HSA + 0 + 12 + + + + + DSI_VHBPCR + DSI_VHBPCR + DSI Host video HBP configuration register + 0x4C + 0x20 + read-write + 0x00000000 + + + HBP + HBP + 0 + 12 + + + + + DSI_VLCR + DSI_VLCR + DSI Host video line configuration register + 0x50 + 0x20 + read-write + 0x00000000 + + + HLINE + HLINE + 0 + 15 + + + + + DSI_VVSACR + DSI_VVSACR + DSI Host video VSA configuration register + 0x54 + 0x20 + read-write + 0x00000000 + + + VSA + VSA + 0 + 10 + + + + + DSI_VVBPCR + DSI_VVBPCR + DSI Host video VBP configuration register + 0x58 + 0x20 + read-write + 0x00000000 + + + VBP + VBP + 0 + 10 + + + + + DSI_VVFPCR + DSI_VVFPCR + DSI Host video VFP configuration register + 0x5C + 0x20 + read-write + 0x00000000 + + + VFP + VFP + 0 + 10 + + + + + DSI_VVACR + DSI_VVACR + DSI Host video VA configuration register + 0x60 + 0x20 + read-write + 0x00000000 + + + VA + VA + 0 + 14 + + + + + DSI_LCCR + DSI_LCCR + DSI Host LTDC command configuration register + 0x64 + 0x20 + read-write + 0x00000000 + + + CMDSIZE + CMDSIZE + 0 + 16 + + + + + DSI_CMCR + DSI_CMCR + DSI Host command mode configuration register + 0x68 + 0x20 + read-write + 0x00000000 + + + TEARE + TEARE + 0 + 1 + + + ARE + ARE + 1 + 1 + + + GSW0TX + GSW0TX + 8 + 1 + + + GSW1TX + GSW1TX + 9 + 1 + + + GSW2TX + GSW2TX + 10 + 1 + + + GSR0TX + GSR0TX + 11 + 1 + + + GSR1TX + GSR1TX + 12 + 1 + + + GSR2TX + GSR2TX + 13 + 1 + + + GLWTX + GLWTX + 14 + 1 + + + DSW0TX + DSW0TX + 16 + 1 + + + DSW1TX + DSW1TX + 17 + 1 + + + DSR0TX + DSR0TX + 18 + 1 + + + DLWTX + DLWTX + 19 + 1 + + + MRDPS + MRDPS + 24 + 1 + + + + + DSI_GHCR + DSI_GHCR + DSI Host generic header configuration register + 0x6C + 0x20 + read-write + 0x00000000 + + + DT + DT + 0 + 6 + + + VCID + VCID + 6 + 2 + + + WCLSB + WCLSB + 8 + 8 + + + WCMSB + WCMSB + 16 + 8 + + + + + DSI_GPDR + DSI_GPDR + DSI Host generic payload data register + 0x70 + 0x20 + read-write + 0x00000000 + + + DATA1 + DATA1 + 0 + 8 + + + DATA2 + DATA2 + 8 + 8 + + + DATA3 + DATA3 + 16 + 8 + + + DATA4 + DATA4 + 24 + 8 + + + + + DSI_GPSR + DSI_GPSR + DSI Host generic packet status register + 0x74 + 0x20 + read-only + 0x00000015 + + + CMDFE + CMDFE + 0 + 1 + + + CMDFF + CMDFF + 1 + 1 + + + PWRFE + PWRFE + 2 + 1 + + + PWRFF + PWRFF + 3 + 1 + + + PRDFE + PRDFE + 4 + 1 + + + PRDFF + PRDFF + 5 + 1 + + + RCB + RCB + 6 + 1 + + + + + DSI_TCCR0 + DSI_TCCR0 + DSI Host timeout counter configuration register 0 + 0x78 + 0x20 + read-write + 0x00000000 + + + LPRX_TOCNT + LPRX_TOCNT + 0 + 16 + + + HSTX_TOCNT + HSTX_TOCNT + 16 + 16 + + + + + DSI_TCCR1 + DSI_TCCR1 + DSI Host timeout counter configuration register 1 + 0x7C + 0x20 + read-write + 0x00000000 + + + HSRD_TOCNT + HSRD_TOCNT + 0 + 16 + + + + + DSI_TCCR2 + DSI_TCCR2 + DSI Host timeout counter configuration register 2 + 0x80 + 0x20 + read-write + 0x00000000 + + + LPRD_TOCNT + LPRD_TOCNT + 0 + 16 + + + + + DSI_TCCR3 + DSI_TCCR3 + DSI Host timeout counter configuration register 3 + 0x84 + 0x20 + read-write + 0x00000000 + + + HSWR_TOCNT + HSWR_TOCNT + 0 + 16 + + + PM + PM + 24 + 1 + + + + + DSI_TCCR4 + DSI_TCCR4 + DSI Host timeout counter configuration register 4 + 0x88 + 0x20 + read-write + 0x00000000 + + + LPWR_TOCNT + LPWR_TOCNT + 0 + 16 + + + + + DSI_TCCR5 + DSI_TCCR5 + DSI Host timeout counter configuration register 5 + 0x8C + 0x20 + read-write + 0x00000000 + + + BTA_TOCNT + BTA_TOCNT + 0 + 16 + + + + + DSI_CLCR + DSI_CLCR + DSI Host clock lane configuration register + 0x94 + 0x20 + read-write + 0x00000000 + + + DPCC + DPCC + 0 + 1 + + + ACR + ACR + 1 + 1 + + + + + DSI_CLTCR + DSI_CLTCR + DSI Host clock lane timer configuration register + 0x98 + 0x20 + read-write + 0x00000000 + + + LP2HS_TIME + LP2HS_TIME + 0 + 10 + + + HS2LP_TIME + HS2LP_TIME + 16 + 10 + + + + + DSI_DLTCR + DSI_DLTCR + DSI Host data lane timer configuration register + 0x9C + 0x20 + read-write + 0x00000000 + + + MRD_TIME + Maximum read time + 0 + 15 + + + LP2HS_TIME + LP2HS_TIME + 16 + 8 + + + HS2LP_TIME + HS2LP_TIME + 24 + 8 + + + + + DSI_PCTLR + DSI_PCTLR + DSI Host PHY control register + 0xA0 + 0x20 + read-write + 0x00000000 + + + DEN + DEN + 1 + 1 + + + CKE + CKE + 2 + 1 + + + + + DSI_PCONFR + DSI_PCONFR + DSI Host PHY configuration register + 0xA4 + 0x20 + read-write + 0x00000001 + + + NL + NL + 0 + 2 + + + SW_TIME + SW_TIME + 8 + 8 + + + + + DSI_PUCR + DSI_PUCR + DSI Host PHY ULPS control register + 0xA8 + 0x20 + read-write + 0x00000000 + + + URCL + URCL + 0 + 1 + + + UECL + UECL + 1 + 1 + + + URDL + URDL + 2 + 1 + + + UEDL + UEDL + 3 + 1 + + + + + DSI_PTTCR + DSI_PTTCR + DSI Host PHY TX triggers configuration register + 0xAC + 0x20 + read-write + 0x00000000 + + + TX_TRIG + TX_TRIG + 0 + 4 + + + + + DSI_PSR + DSI_PSR + DSI Host PHY status register + 0xB0 + 0x20 + read-only + 0x00001528 + + + PD + PD + 1 + 1 + + + PSSC + PSSC + 2 + 1 + + + UANC + UANC + 3 + 1 + + + PSS0 + PSS0 + 4 + 1 + + + UAN0 + UAN0 + 5 + 1 + + + RUE0 + RUE0 + 6 + 1 + + + PSS1 + PSS1 + 7 + 1 + + + UAN1 + UAN1 + 8 + 1 + + + + + DSI_ISR0 + DSI_ISR0 + DSI Host interrupt and status register 0 + 0xBC + 0x20 + read-only + 0x00000000 + + + AE0 + AE0 + 0 + 1 + + + AE1 + AE1 + 1 + 1 + + + AE2 + AE2 + 2 + 1 + + + AE3 + AE3 + 3 + 1 + + + AE4 + AE4 + 4 + 1 + + + AE5 + AE5 + 5 + 1 + + + AE6 + AE6 + 6 + 1 + + + AE7 + AE7 + 7 + 1 + + + AE8 + AE8 + 8 + 1 + + + AE9 + AE9 + 9 + 1 + + + AE10 + AE10 + 10 + 1 + + + AE11 + AE11 + 11 + 1 + + + AE12 + AE12 + 12 + 1 + + + AE13 + AE13 + 13 + 1 + + + AE14 + AE14 + 14 + 1 + + + AE15 + AE15 + 15 + 1 + + + PE0 + PE0 + 16 + 1 + + + PE1 + PE1 + 17 + 1 + + + PE2 + PE2 + 18 + 1 + + + PE3 + PE3 + 19 + 1 + + + PE4 + PE4 + 20 + 1 + + + + + DSI_ISR1 + DSI_ISR1 + DSI Host interrupt and status register 1 + 0xC0 + 0x20 + read-only + 0x00000000 + + + TOHSTX + TOHSTX + 0 + 1 + + + TOLPRX + TOLPRX + 1 + 1 + + + ECCSE + ECCSE + 2 + 1 + + + ECCME + ECCME + 3 + 1 + + + CRCE + CRCE + 4 + 1 + + + PSE + PSE + 5 + 1 + + + EOTPE + EOTPE + 6 + 1 + + + LPWRE + LPWRE + 7 + 1 + + + GCWRE + GCWRE + 8 + 1 + + + GPWRE + GPWRE + 9 + 1 + + + GPTXE + GPTXE + 10 + 1 + + + GPRDE + GPRDE + 11 + 1 + + + GPRXE + GPRXE + 12 + 1 + + + + + DSI_IER0 + DSI_IER0 + DSI Host interrupt enable register 0 + 0xC4 + 0x20 + read-write + 0x00000000 + + + AE0IE + AE0IE + 0 + 1 + + + AE1IE + AE1IE + 1 + 1 + + + AE2IE + AE2IE + 2 + 1 + + + AE3IE + AE3IE + 3 + 1 + + + AE4IE + AE4IE + 4 + 1 + + + AE5IE + AE5IE + 5 + 1 + + + AE6IE + AE6IE + 6 + 1 + + + AE7IE + AE7IE + 7 + 1 + + + AE8IE + AE8IE + 8 + 1 + + + AE9IE + AE9IE + 9 + 1 + + + AE10IE + AE10IE + 10 + 1 + + + AE11IE + AE11IE + 11 + 1 + + + AE12IE + AE12IE + 12 + 1 + + + AE13IE + AE13IE + 13 + 1 + + + AE14IE + AE14IE + 14 + 1 + + + AE15IE + AE15IE + 15 + 1 + + + PE0IE + PE0IE + 16 + 1 + + + PE1IE + PE1IE + 17 + 1 + + + PE2IE + PE2IE + 18 + 1 + + + PE3IE + PE3IE + 19 + 1 + + + PE4IE + PE4IE + 20 + 1 + + + + + DSI_IER1 + DSI_IER1 + DSI Host interrupt enable register 1 + 0xC8 + 0x20 + read-write + 0x00000000 + + + TOHSTXIE + TOHSTXIE + 0 + 1 + + + TOLPRXIE + TOLPRXIE + 1 + 1 + + + ECCSEIE + ECCSEIE + 2 + 1 + + + ECCMEIE + ECCMEIE + 3 + 1 + + + CRCEIE + CRCEIE + 4 + 1 + + + PSEIE + PSEIE + 5 + 1 + + + EOTPEIE + EOTPEIE + 6 + 1 + + + LPWREIE + LPWREIE + 7 + 1 + + + GCWREIE + GCWREIE + 8 + 1 + + + GPWREIE + GPWREIE + 9 + 1 + + + GPTXEIE + GPTXEIE + 10 + 1 + + + GPRDEIE + GPRDEIE + 11 + 1 + + + GPRXEIE + GPRXEIE + 12 + 1 + + + + + DSI_FIR0 + DSI_FIR0 + DSI Host force interrupt register 0 + 0xD8 + 0x20 + write-only + 0x00000000 + + + FAE0 + FAE0 + 0 + 1 + + + FAE1 + FAE1 + 1 + 1 + + + FAE2 + FAE2 + 2 + 1 + + + FAE3 + FAE3 + 3 + 1 + + + FAE4 + FAE4 + 4 + 1 + + + FAE5 + FAE5 + 5 + 1 + + + FAE6 + FAE6 + 6 + 1 + + + FAE7 + FAE7 + 7 + 1 + + + FAE8 + FAE8 + 8 + 1 + + + FAE9 + FAE9 + 9 + 1 + + + FAE10 + FAE10 + 10 + 1 + + + FAE11 + FAE11 + 11 + 1 + + + FAE12 + FAE12 + 12 + 1 + + + FAE13 + FAE13 + 13 + 1 + + + FAE14 + FAE14 + 14 + 1 + + + FAE15 + FAE15 + 15 + 1 + + + FPE0 + FPE0 + 16 + 1 + + + FPE1 + FPE1 + 17 + 1 + + + FPE2 + FPE2 + 18 + 1 + + + FPE3 + FPE3 + 19 + 1 + + + FPE4 + FPE4 + 20 + 1 + + + + + DSI_FIR1 + DSI_FIR1 + DSI Host force interrupt register 1 + 0xDC + 0x20 + write-only + 0x00000000 + + + FTOHSTX + FTOHSTX + 0 + 1 + + + FTOLPRX + FTOLPRX + 1 + 1 + + + FECCSE + FECCSE + 2 + 1 + + + FECCME + FECCME + 3 + 1 + + + FCRCE + FCRCE + 4 + 1 + + + FPSE + FPSE + 5 + 1 + + + FEOTPE + FEOTPE + 6 + 1 + + + FLPWRE + FLPWRE + 7 + 1 + + + FGCWRE + FGCWRE + 8 + 1 + + + FGPWRE + FGPWRE + 9 + 1 + + + FGPTXE + FGPTXE + 10 + 1 + + + FGPRDE + FGPRDE + 11 + 1 + + + FGPRXE + FGPRXE + 12 + 1 + + + + + DSI_VSCR + DSI_VSCR + DSI Host video shadow control register + 0x100 + 0x20 + read-write + 0x00000000 + + + EN + EN + 0 + 1 + + + UR + UR + 8 + 1 + + + + + DSI_LCVCIDR + DSI_LCVCIDR + DSI Host LTDC current VCID register + 0x10C + 0x20 + read-write + 0x00000000 + + + VCID + VCID + 0 + 2 + + + + + DSI_LCCCR + DSI_LCCCR + DSI Host LTDC current color coding register + 0x110 + 0x20 + read-only + 0x00000000 + + + COLC + COLC + 0 + 4 + + + LPE + LPE + 8 + 1 + + + + + DSI_LPMCCR + DSI_LPMCCR + DSI Host low-power mode current configuration register + 0x118 + 0x20 + read-only + 0x00000000 + + + VLPSIZE + VLPSIZE + 0 + 8 + + + LPSIZE + LPSIZE + 16 + 8 + + + + + DSI_VMCCR + DSI_VMCCR + DSI Host video mode current configuration register + 0x138 + 0x20 + read-only + 0x00000000 + + + VMT + VMT + 0 + 2 + + + LPVSAE + LPVSAE + 2 + 1 + + + LPVBPE + LPVBPE + 3 + 1 + + + LPVFPE + LPVFPE + 4 + 1 + + + LPVAE + LPVAE + 5 + 1 + + + LPHBPE + LPHBPE + 6 + 1 + + + LPHFE + LPHFE + 7 + 1 + + + FBTAAE + FBTAAE + 8 + 1 + + + LPCE + LPCE + 9 + 1 + + + + + DSI_VPCCR + DSI_VPCCR + DSI Host video packet current configuration register + 0x13C + 0x20 + read-only + 0x00000000 + + + VPSIZE + VPSIZE + 0 + 14 + + + + + DSI_VCCCR + DSI_VCCCR + DSI Host video chunks current configuration register + 0x140 + 0x20 + read-only + 0x00000000 + + + NUMC + NUMC + 0 + 13 + + + + + DSI_VNPCCR + DSI_VNPCCR + DSI Host video null packet current configuration register + 0x144 + 0x20 + read-only + 0x00000000 + + + NPSIZE + NPSIZE + 0 + 13 + + + + + DSI_VHSACCR + DSI_VHSACCR + DSI Host video HSA current configuration register + 0x148 + 0x20 + read-only + 0x00000000 + + + HSA + HSA + 0 + 12 + + + + + DSI_VHBPCCR + DSI_VHBPCCR + DSI Host video HBP current configuration register + 0x14C + 0x20 + read-only + 0x00000000 + + + HBP + HBP + 0 + 12 + + + + + DSI_VLCCR + DSI_VLCCR + DSI Host video line current configuration register + 0x150 + 0x20 + read-only + 0x00000000 + + + HLINE + HLINE + 0 + 15 + + + + + DSI_VVSACCR + DSI_VVSACCR + DSI Host video VSA current configuration register + 0x154 + 0x20 + read-only + 0x00000000 + + + VSA + VSA + 0 + 10 + + + + + DSI_VVBPCCR + DSI_VVBPCCR + DSI Host video VBP current configuration register + 0x158 + 0x20 + read-only + 0x00000000 + + + VBP + VBP + 0 + 10 + + + + + DSI_VVFPCCR + DSI_VVFPCCR + DSI Host video VFP current configuration register + 0x15C + 0x20 + read-only + 0x00000000 + + + VFP + VFP + 0 + 10 + + + + + DSI_VVACCR + DSI_VVACCR + DSI Host video VA current configuration register + 0x160 + 0x20 + read-only + 0x00000000 + + + VA + VA + 0 + 14 + + + + + DSI_WCFGR + DSI_WCFGR + DSI wrapper configuration register + 0x400 + 0x20 + read-write + 0x00000000 + + + DSIM + DSIM + 0 + 1 + + + COLMUX + COLMUX + 1 + 3 + + + TESRC + TESRC + 4 + 1 + + + TEPOL + TEPOL + 5 + 1 + + + AR + AR + 6 + 1 + + + VSPOL + VSPOL + 7 + 1 + + + + + DSI_WCR + DSI_WCR + DSI wrapper control register + 0x404 + 0x20 + read-write + 0x00000000 + + + COLM + COLM + 0 + 1 + + + SHTDN + SHTDN + 1 + 1 + + + LTDCEN + LTDCEN + 2 + 1 + + + DSIEN + DSIEN + 3 + 1 + + + + + DSI_WIER + DSI_WIER + DSI wrapper interrupt enable register + 0x408 + 0x20 + read-write + 0x00000000 + + + TEIE + TEIE + 0 + 1 + + + ERIE + ERIE + 1 + 1 + + + PLLLIE + PLLLIE + 9 + 1 + + + PLLUIE + PLLUIE + 10 + 1 + + + RRIE + RRIE + 13 + 1 + + + + + DSI_WISR + DSI_WISR + DSI wrapper interrupt and status register + 0x40C + 0x20 + read-only + 0x00000000 + + + TEIF + TEIF + 0 + 1 + + + ERIF + ERIF + 1 + 1 + + + BUSY + BUSY + 2 + 1 + + + PLLLS + PLLLS + 8 + 1 + + + PLLLIF + PLLLIF + 9 + 1 + + + PLLUIF + PLLUIF + 10 + 1 + + + RRS + RRS + 12 + 1 + + + RRIF + RRIF + 13 + 1 + + + + + DSI_WIFCR + DSI_WIFCR + DSI wrapper interrupt flag clear register + 0x410 + 0x20 + write-only + 0x00000000 + + + CTEIF + CTEIF + 0 + 1 + + + CERIF + CERIF + 1 + 1 + + + CPLLLIF + CPLLLIF + 9 + 1 + + + CPLLUIF + CPLLUIF + 10 + 1 + + + CRRIF + CRRIF + 13 + 1 + + + + + DSI_WPCR0 + DSI_WPCR0 + DSI wrapper PHY configuration register 0 + 0x418 + 0x20 + read-write + 0x00000000 + + + UIX4 + UIX4 + 0 + 6 + + + SWCL + SWCL + 6 + 1 + + + SWDL0 + SWDL0 + 7 + 1 + + + SWDL1 + SWDL1 + 8 + 1 + + + HSICL + HSICL + 9 + 1 + + + HSIDL0 + HSIDL0 + 10 + 1 + + + HSIDL1 + HSIDL1 + 11 + 1 + + + FTXSMCL + FTXSMCL + 12 + 1 + + + FTXSMDL + FTXSMDL + 13 + 1 + + + CDOFFDL + CDOFFDL + 14 + 1 + + + TDDL + TDDL + 16 + 1 + + + PDEN + Pull-down enable + 18 + 1 + + + TCLKPREPEN + Custom time for tCLK-PREPARE enable + 19 + 1 + + + TCLKZEROEN + Custom time for tCLK-ZERO enable + 20 + 1 + + + THSPREPEN + Custom time for tHS-PREPARE enable + 21 + 1 + + + THSTRAILEN + Custom time for tHS-TRAIL enable + 22 + 1 + + + THSZEROEN + Custom time for tHS-ZERO enable + 23 + 1 + + + TLPXDEN + Custom time for tLPX for data lanes enable + 24 + 1 + + + THSEXITEN + Custom time for tHS-EXIT enable + 25 + 1 + + + TLPXCEN + Custom time for tLPX for clock lane enable + 26 + 1 + + + TCLKPOSTEN + Custom time for tCLK-POST enable + 27 + 1 + + + + + DSI_WPCR1 + DSI_WPCR1 + This register shall be programmed only when DSI is stopped (CR. DSIEN=0 and CR.EN = 0). + 0x41C + 0x20 + read-write + 0x00000000 + + + HSTXDCL + High-speed transmission delay on clock lane + 0 + 2 + + + HSTXDDL + High-speed transmission delay on data lanes + 2 + 2 + + + LPSRCCL + Low-power transmission slew-rate compensation on clock lane + 6 + 2 + + + LPSRCDL + Low-power transmission slew-rate compensation on data lanes + 8 + 2 + + + SDDC + SDD control + 12 + 1 + + + HSTXSRCCL + High-speed transmission slew-rate control on clock lane + 16 + 2 + + + HSTXSRCDL + High-speed transmission slew-rate control on data lanes + 18 + 2 + + + FLPRXLPM + Forces LP receiver in low-power mode + 22 + 1 + + + LPRXFT + Low-power RX low-pass filtering tuning + 25 + 2 + + + + + DSI_WPCR2 + DSI_WPCR2 + DSI wrapper PHY configuration register 2 + 0x420 + 0x20 + read-write + 0x00000000 + + + TCLKPREP + TCLKPREP + 0 + 8 + + + TCLKZERO + TCLKZERO + 8 + 8 + + + THSPREP + THSPREP + 16 + 8 + + + THSTRAIL + THSTRAIL + 24 + 8 + + + + + DSI_WPCR3 + DSI_WPCR3 + DSI wrapper PHY configuration register 3 + 0x424 + 0x20 + read-write + 0x00000000 + + + THSZERO + THSZERO + 0 + 8 + + + TLPXD + TLPXD + 8 + 8 + + + THSEXIT + THSEXIT + 16 + 8 + + + TLPXC + TLPXC + 24 + 8 + + + + + DSI_WPCR4 + DSI_WPCR4 + DSI wrapper PHY configuration register 4 + 0x428 + 0x20 + read-write + 0x00000000 + + + TCLKPOST + TCLKPOST + 0 + 8 + + + + + DSI_WRPCR + DSI_WRPCR + DSI wrapper regulator and PLL control register + 0x430 + 0x20 + read-write + 0x00000000 + + + PLLEN + PLLEN + 0 + 1 + + + NDIV + NDIV + 2 + 7 + + + IDF + IDF + 11 + 4 + + + ODF + ODF + 16 + 2 + + + REGEN + REGEN + 24 + 1 + + + + + + + SPDIFRX + Receiver Interface + SPDIFRX + 0x40004000 + + 0x0 + 0x400 + registers + + + SPDIF + SPDIFRX global interrupt + 97 + + + + CR + CR + Control register + 0x0 + 0x20 + read-write + 0x00000000 + + + SPDIFRXEN + Peripheral Block Enable + 0 + 2 + + + RXDMAEN + Receiver DMA ENable for data + flow + 2 + 1 + + + RXSTEO + STerEO Mode + 3 + 1 + + + DRFMT + RX Data format + 4 + 2 + + + PMSK + Mask Parity error bit + 6 + 1 + + + VMSK + Mask of Validity bit + 7 + 1 + + + CUMSK + Mask of channel status and user + bits + 8 + 1 + + + PTMSK + Mask of Preamble Type bits + 9 + 1 + + + CBDMAEN + Control Buffer DMA ENable for control + flow + 10 + 1 + + + CHSEL + Channel Selection + 11 + 1 + + + NBTR + Maximum allowed re-tries during + synchronization phase + 12 + 2 + + + WFA + Wait For Activity + 14 + 1 + + + INSEL + input selection + 16 + 3 + + + CKSEN + Symbol Clock Enable + 20 + 1 + + + CKSBKPEN + Backup Symbol Clock Enable + 21 + 1 + + + + + IMR + IMR + Interrupt mask register + 0x4 + 0x20 + read-write + 0x00000000 + + + RXNEIE + RXNE interrupt enable + 0 + 1 + + + CSRNEIE + Control Buffer Ready Interrupt + Enable + 1 + 1 + + + PERRIE + Parity error interrupt + enable + 2 + 1 + + + OVRIE + Overrun error Interrupt + Enable + 3 + 1 + + + SBLKIE + Synchronization Block Detected Interrupt + Enable + 4 + 1 + + + SYNCDIE + Synchronization Done + 5 + 1 + + + IFEIE + Serial Interface Error Interrupt + Enable + 6 + 1 + + + + + SR + SR + Status register + 0x8 + 0x20 + read-only + 0x00000000 + + + RXNE + Read data register not + empty + 0 + 1 + + + CSRNE + Control Buffer register is not + empty + 1 + 1 + + + PERR + Parity error + 2 + 1 + + + OVR + Overrun error + 3 + 1 + + + SBD + Synchronization Block + Detected + 4 + 1 + + + SYNCD + Synchronization Done + 5 + 1 + + + FERR + Framing error + 6 + 1 + + + SERR + Synchronization error + 7 + 1 + + + TERR + Time-out error + 8 + 1 + + + WIDTH5 + Duration of 5 symbols counted with + SPDIF_CLK + 16 + 15 + + + + + IFCR + IFCR + Interrupt Flag Clear register + 0xC + 0x20 + write-only + 0x00000000 + + + PERRCF + Clears the Parity error + flag + 2 + 1 + + + OVRCF + Clears the Overrun error + flag + 3 + 1 + + + SBDCF + Clears the Synchronization Block + Detected flag + 4 + 1 + + + SYNCDCF + Clears the Synchronization Done + flag + 5 + 1 + + + + + DR_00 + DR_00 + Data input register + 0x10 + 0x20 + read-only + 0x00000000 + + + DR + Parity Error bit + 0 + 24 + + + PE + Parity Error bit + 24 + 1 + + + V + Validity bit + 25 + 1 + + + U + User bit + 26 + 1 + + + C + Channel Status bit + 27 + 1 + + + PT + Preamble Type + 28 + 2 + + + + + CSR + CSR + Channel Status register + 0x14 + 0x20 + read-only + 0x00000000 + + + USR + User data information + 0 + 16 + + + CS + Channel A status + information + 16 + 8 + + + SOB + Start Of Block + 24 + 1 + + + + + DIR + DIR + Debug Information register + 0x18 + 0x20 + read-only + 0x00000000 + + + THI + Threshold HIGH + 0 + 13 + + + TLO + Threshold LOW + 16 + 13 + + + + + VERR + VERR + SPDIFRX version register + 0x3F4 + 0x20 + read-only + 0x00000012 + + + MINREV + Minor revision + 0 + 4 + + + MAJREV + Major revision + 4 + 4 + + + + + IDR + IDR + SPDIFRX identification + register + 0x3F8 + 0x20 + read-only + 0x00130041 + + + ID + SPDIFRX identifier + 0 + 32 + + + + + SIDR + SIDR + SPDIFRX size identification + register + 0x3FC + 0x20 + read-only + 0xA3C5DD01 + + + SID + Size identification + 0 + 32 + + + + + DR_01 + DR_01 + Data input register + DR_00 + 0x10 + 0x20 + read-only + 0x00000000 + + + PE + Parity Error bit + 0 + 1 + + + V + Validity bit + 1 + 1 + + + U + User bit + 2 + 1 + + + C + Channel Status bit + 3 + 1 + + + PT + Preamble Type + 4 + 2 + + + DR + Data value + 8 + 24 + + + + + DR_10 + DR_10 + Data input register + DR_00 + 0x10 + 0x20 + read-only + 0x00000000 + + + DRNL1 + Data value + 0 + 16 + + + DRNL2 + Data value + 16 + 16 + + + + + + + ADC3 + Analog to Digital Converter + ADC + 0x58026000 + + 0x0 + 0xD1 + registers + + + ADC3 + ADC3 global interrupt + 127 + + + + ISR + ISR + ADC interrupt and status + register + 0x0 + 0x20 + read-write + 0x00000000 + + + JQOVF + ADC group injected contexts queue + overflow flag + 10 + 1 + + + AWD3 + ADC analog watchdog 3 flag + 9 + 1 + + + AWD2 + ADC analog watchdog 2 flag + 8 + 1 + + + AWD1 + ADC analog watchdog 1 flag + 7 + 1 + + + JEOS + ADC group injected end of sequence + conversions flag + 6 + 1 + + + JEOC + ADC group injected end of unitary + conversion flag + 5 + 1 + + + OVR + ADC group regular overrun + flag + 4 + 1 + + + EOS + ADC group regular end of sequence + conversions flag + 3 + 1 + + + EOC + ADC group regular end of unitary + conversion flag + 2 + 1 + + + EOSMP + ADC group regular end of sampling + flag + 1 + 1 + + + ADRDY + ADC ready flag + 0 + 1 + + + + + IER + IER + ADC interrupt enable register + 0x4 + 0x20 + read-write + 0x00000000 + + + JQOVFIE + ADC group injected contexts queue + overflow interrupt + 10 + 1 + + + AWD3IE + ADC analog watchdog 3 + interrupt + 9 + 1 + + + AWD2IE + ADC analog watchdog 2 + interrupt + 8 + 1 + + + AWD1IE + ADC analog watchdog 1 + interrupt + 7 + 1 + + + JEOSIE + ADC group injected end of sequence + conversions interrupt + 6 + 1 + + + JEOCIE + ADC group injected end of unitary + conversion interrupt + 5 + 1 + + + OVRIE + ADC group regular overrun + interrupt + 4 + 1 + + + EOSIE + ADC group regular end of sequence + conversions interrupt + 3 + 1 + + + EOCIE + ADC group regular end of unitary + conversion interrupt + 2 + 1 + + + EOSMPIE + ADC group regular end of sampling + interrupt + 1 + 1 + + + ADRDYIE + ADC ready interrupt + 0 + 1 + + + + + CR + CR + ADC control register + 0x8 + 0x20 + read-write + 0x00000000 + + + ADCAL + ADC calibration + 31 + 1 + + + ADCALDIF + ADC differential mode for + calibration + 30 + 1 + + + DEEPPWD + ADC deep power down enable + 29 + 1 + + + ADVREGEN + ADC voltage regulator + enable + 28 + 1 + + + LINCALRDYW6 + Linearity calibration ready Word + 6 + 27 + 1 + + + LINCALRDYW5 + Linearity calibration ready Word + 5 + 26 + 1 + + + LINCALRDYW4 + Linearity calibration ready Word + 4 + 25 + 1 + + + LINCALRDYW3 + Linearity calibration ready Word + 3 + 24 + 1 + + + LINCALRDYW2 + Linearity calibration ready Word + 2 + 23 + 1 + + + LINCALRDYW1 + Linearity calibration ready Word + 1 + 22 + 1 + + + ADCALLIN + Linearity calibration + 16 + 1 + + + BOOST + Boost mode control + 8 + 2 + + + JADSTP + ADC group injected conversion + stop + 5 + 1 + + + ADSTP + ADC group regular conversion + stop + 4 + 1 + + + JADSTART + ADC group injected conversion + start + 3 + 1 + + + ADSTART + ADC group regular conversion + start + 2 + 1 + + + ADDIS + ADC disable + 1 + 1 + + + ADEN + ADC enable + 0 + 1 + + + + + CFGR + CFGR + ADC configuration register 1 + 0xC + 0x20 + read-write + 0x00000000 + + + JQDIS + ADC group injected contexts queue + disable + 31 + 1 + + + AWDCH1CH + ADC analog watchdog 1 monitored channel + selection + 26 + 5 + + + JAUTO + ADC group injected automatic trigger + mode + 25 + 1 + + + JAWD1EN + ADC analog watchdog 1 enable on scope + ADC group injected + 24 + 1 + + + AWD1EN + ADC analog watchdog 1 enable on scope + ADC group regular + 23 + 1 + + + AWD1SGL + ADC analog watchdog 1 monitoring a + single channel or all channels + 22 + 1 + + + JQM + ADC group injected contexts queue + mode + 21 + 1 + + + JDISCEN + ADC group injected sequencer + discontinuous mode + 20 + 1 + + + DISCNUM + ADC group regular sequencer + discontinuous number of ranks + 17 + 3 + + + DISCEN + ADC group regular sequencer + discontinuous mode + 16 + 1 + + + AUTDLY + ADC low power auto wait + 14 + 1 + + + CONT + ADC group regular continuous conversion + mode + 13 + 1 + + + OVRMOD + ADC group regular overrun + configuration + 12 + 1 + + + EXTEN + ADC group regular external trigger + polarity + 10 + 2 + + + EXTSEL + ADC group regular external trigger + source + 5 + 5 + + + RES + ADC data resolution + 2 + 3 + + + DMNGT + ADC DMA transfer enable + 0 + 2 + + + + + CFGR2 + CFGR2 + ADC configuration register 2 + 0x10 + 0x20 + read-write + 0x00000000 + + + ROVSE + ADC oversampler enable on scope ADC + group regular + 0 + 1 + + + JOVSE + ADC oversampler enable on scope ADC + group injected + 1 + 1 + + + OVSS + ADC oversampling shift + 5 + 4 + + + TROVS + ADC oversampling discontinuous mode + (triggered mode) for ADC group regular + 9 + 1 + + + ROVSM + Regular Oversampling mode + 10 + 1 + + + RSHIFT1 + Right-shift data after Offset 1 + correction + 11 + 1 + + + RSHIFT2 + Right-shift data after Offset 2 + correction + 12 + 1 + + + RSHIFT3 + Right-shift data after Offset 3 + correction + 13 + 1 + + + RSHIFT4 + Right-shift data after Offset 4 + correction + 14 + 1 + + + OSR + Oversampling ratio + 16 + 10 + + + LSHIFT + Left shift factor + 28 + 4 + + + + + SMPR1 + SMPR1 + ADC sampling time register 1 + 0x14 + 0x20 + read-write + 0x00000000 + + + SMP9 + ADC channel 9 sampling time + selection + 27 + 3 + + + SMP8 + ADC channel 8 sampling time + selection + 24 + 3 + + + SMP7 + ADC channel 7 sampling time + selection + 21 + 3 + + + SMP6 + ADC channel 6 sampling time + selection + 18 + 3 + + + SMP5 + ADC channel 5 sampling time + selection + 15 + 3 + + + SMP4 + ADC channel 4 sampling time + selection + 12 + 3 + + + SMP3 + ADC channel 3 sampling time + selection + 9 + 3 + + + SMP2 + ADC channel 2 sampling time + selection + 6 + 3 + + + SMP1 + ADC channel 1 sampling time + selection + 3 + 3 + + + + + SMPR2 + SMPR2 + ADC sampling time register 2 + 0x18 + 0x20 + read-write + 0x00000000 + + + SMP19 + ADC channel 18 sampling time + selection + 27 + 3 + + + SMP18 + ADC channel 18 sampling time + selection + 24 + 3 + + + SMP17 + ADC channel 17 sampling time + selection + 21 + 3 + + + SMP16 + ADC channel 16 sampling time + selection + 18 + 3 + + + SMP15 + ADC channel 15 sampling time + selection + 15 + 3 + + + SMP14 + ADC channel 14 sampling time + selection + 12 + 3 + + + SMP13 + ADC channel 13 sampling time + selection + 9 + 3 + + + SMP12 + ADC channel 12 sampling time + selection + 6 + 3 + + + SMP11 + ADC channel 11 sampling time + selection + 3 + 3 + + + SMP10 + ADC channel 10 sampling time + selection + 0 + 3 + + + + + LTR1 + LTR1 + ADC analog watchdog 1 threshold + register + 0x20 + 0x20 + read-write + 0x0FFF0000 + + + LTR1 + ADC analog watchdog 1 threshold + low + 0 + 26 + + + + + LHTR1 + LHTR1 + ADC analog watchdog 2 threshold + register + 0x24 + 0x20 + read-write + 0x0FFF0000 + + + LHTR1 + ADC analog watchdog 2 threshold + low + 0 + 26 + + + + + SQR1 + SQR1 + ADC group regular sequencer ranks register + 1 + 0x30 + 0x20 + read-write + 0x00000000 + + + SQ4 + ADC group regular sequencer rank + 4 + 24 + 5 + + + SQ3 + ADC group regular sequencer rank + 3 + 18 + 5 + + + SQ2 + ADC group regular sequencer rank + 2 + 12 + 5 + + + SQ1 + ADC group regular sequencer rank + 1 + 6 + 5 + + + L3 + L3 + 0 + 4 + + + + + SQR2 + SQR2 + ADC group regular sequencer ranks register + 2 + 0x34 + 0x20 + read-write + 0x00000000 + + + SQ9 + ADC group regular sequencer rank + 9 + 24 + 5 + + + SQ8 + ADC group regular sequencer rank + 8 + 18 + 5 + + + SQ7 + ADC group regular sequencer rank + 7 + 12 + 5 + + + SQ6 + ADC group regular sequencer rank + 6 + 6 + 5 + + + SQ5 + ADC group regular sequencer rank + 5 + 0 + 5 + + + + + SQR3 + SQR3 + ADC group regular sequencer ranks register + 3 + 0x38 + 0x20 + read-write + 0x00000000 + + + SQ14 + ADC group regular sequencer rank + 14 + 24 + 5 + + + SQ13 + ADC group regular sequencer rank + 13 + 18 + 5 + + + SQ12 + ADC group regular sequencer rank + 12 + 12 + 5 + + + SQ11 + ADC group regular sequencer rank + 11 + 6 + 5 + + + SQ10 + ADC group regular sequencer rank + 10 + 0 + 5 + + + + + SQR4 + SQR4 + ADC group regular sequencer ranks register + 4 + 0x3C + 0x20 + read-write + 0x00000000 + + + SQ16 + ADC group regular sequencer rank + 16 + 6 + 5 + + + SQ15 + ADC group regular sequencer rank + 15 + 0 + 5 + + + + + DR + DR + ADC group regular conversion data + register + 0x40 + 0x20 + read-only + 0x00000000 + + + RDATA + ADC group regular conversion + data + 0 + 16 + + + + + JSQR + JSQR + ADC group injected sequencer + register + 0x4C + 0x20 + read-write + 0x00000000 + + + JSQ4 + ADC group injected sequencer rank + 4 + 27 + 5 + + + JSQ3 + ADC group injected sequencer rank + 3 + 21 + 5 + + + JSQ2 + ADC group injected sequencer rank + 2 + 15 + 5 + + + JSQ1 + ADC group injected sequencer rank + 1 + 9 + 5 + + + JEXTEN + ADC group injected external trigger + polarity + 7 + 2 + + + JEXTSEL + ADC group injected external trigger + source + 2 + 5 + + + JL + ADC group injected sequencer scan + length + 0 + 2 + + + + + OFR1 + OFR1 + ADC offset number 1 register + 0x60 + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + OFR2 + OFR2 + ADC offset number 2 register + 0x64 + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + OFR3 + OFR3 + ADC offset number 3 register + 0x68 + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + OFR4 + OFR4 + ADC offset number 4 register + 0x6C + 0x20 + read-write + 0x00000000 + + + SSATE + ADC offset number 1 enable + 31 + 1 + + + OFFSET1_CH + ADC offset number 1 channel + selection + 26 + 5 + + + OFFSET1 + ADC offset number 1 offset + level + 0 + 26 + + + + + JDR1 + JDR1 + ADC group injected sequencer rank 1 + register + 0x80 + 0x20 + read-only + 0x00000000 + + + JDATA1 + ADC group injected sequencer rank 1 + conversion data + 0 + 32 + + + + + JDR2 + JDR2 + ADC group injected sequencer rank 2 + register + 0x84 + 0x20 + read-only + 0x00000000 + + + JDATA2 + ADC group injected sequencer rank 2 + conversion data + 0 + 32 + + + + + JDR3 + JDR3 + ADC group injected sequencer rank 3 + register + 0x88 + 0x20 + read-only + 0x00000000 + + + JDATA3 + ADC group injected sequencer rank 3 + conversion data + 0 + 32 + + + + + JDR4 + JDR4 + ADC group injected sequencer rank 4 + register + 0x8C + 0x20 + read-only + 0x00000000 + + + JDATA4 + ADC group injected sequencer rank 4 + conversion data + 0 + 32 + + + + + AWD2CR + AWD2CR + ADC analog watchdog 2 configuration + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + AWD2CH + ADC analog watchdog 2 monitored channel + selection + 0 + 20 + + + + + AWD3CR + AWD3CR + ADC analog watchdog 3 configuration + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + AWD3CH + ADC analog watchdog 3 monitored channel + selection + 1 + 20 + + + + + DIFSEL + DIFSEL + ADC channel differential or single-ended + mode selection register + 0xC0 + 0x20 + read-write + 0x00000000 + + + DIFSEL + ADC channel differential or single-ended + mode for channel + 0 + 20 + + + + + CALFACT + CALFACT + ADC calibration factors + register + 0xC4 + 0x20 + read-write + 0x00000000 + + + CALFACT_D + ADC calibration factor in differential + mode + 16 + 11 + + + CALFACT_S + ADC calibration factor in single-ended + mode + 0 + 11 + + + + + PCSEL + PCSEL + ADC pre channel selection + register + 0x1C + 0x20 + read-write + 0x00000000 + + + PCSEL + Channel x (VINP[i]) pre + selection + 0 + 20 + + + + + LTR2 + LTR2 + ADC watchdog lower threshold register + 2 + 0xB0 + 0x20 + read-write + 0x00000000 + + + LTR2 + Analog watchdog 2 lower + threshold + 0 + 26 + + + + + HTR2 + HTR2 + ADC watchdog higher threshold register + 2 + 0xB4 + 0x20 + read-write + 0x00000000 + + + HTR2 + Analog watchdog 2 higher + threshold + 0 + 26 + + + + + LTR3 + LTR3 + ADC watchdog lower threshold register + 3 + 0xB8 + 0x20 + read-write + 0x00000000 + + + LTR3 + Analog watchdog 3 lower + threshold + 0 + 26 + + + + + HTR3 + HTR3 + ADC watchdog higher threshold register + 3 + 0xBC + 0x20 + read-write + 0x00000000 + + + HTR3 + Analog watchdog 3 higher + threshold + 0 + 26 + + + + + CALFACT2 + CALFACT2 + ADC Calibration Factor register + 2 + 0xC8 + 0x20 + read-write + 0x00000000 + + + LINCALFACT + Linearity Calibration + Factor + 0 + 30 + + + + + + + ADC1 + 0x40022000 + + + ADC2 + 0x40022100 + + + ADC3_Common + Analog-to-Digital Converter + ADC + 0x58026300 + + 0x0 + 0x100 + registers + + + + CSR + CSR + ADC Common status register + 0x0 + 0x20 + read-only + 0x00000000 + + + ADRDY_MST + Master ADC ready + 0 + 1 + + + EOSMP_MST + End of Sampling phase flag of the master + ADC + 1 + 1 + + + EOC_MST + End of regular conversion of the master + ADC + 2 + 1 + + + EOS_MST + End of regular sequence flag of the + master ADC + 3 + 1 + + + OVR_MST + Overrun flag of the master + ADC + 4 + 1 + + + JEOC_MST + End of injected conversion flag of the + master ADC + 5 + 1 + + + JEOS_MST + End of injected sequence flag of the + master ADC + 6 + 1 + + + AWD1_MST + Analog watchdog 1 flag of the master + ADC + 7 + 1 + + + AWD2_MST + Analog watchdog 2 flag of the master + ADC + 8 + 1 + + + AWD3_MST + Analog watchdog 3 flag of the master + ADC + 9 + 1 + + + JQOVF_MST + Injected Context Queue Overflow flag of + the master ADC + 10 + 1 + + + ADRDY_SLV + Slave ADC ready + 16 + 1 + + + EOSMP_SLV + End of Sampling phase flag of the slave + ADC + 17 + 1 + + + EOC_SLV + End of regular conversion of the slave + ADC + 18 + 1 + + + EOS_SLV + End of regular sequence flag of the + slave ADC + 19 + 1 + + + OVR_SLV + Overrun flag of the slave + ADC + 20 + 1 + + + JEOC_SLV + End of injected conversion flag of the + slave ADC + 21 + 1 + + + JEOS_SLV + End of injected sequence flag of the + slave ADC + 22 + 1 + + + AWD1_SLV + Analog watchdog 1 flag of the slave + ADC + 23 + 1 + + + AWD2_SLV + Analog watchdog 2 flag of the slave + ADC + 24 + 1 + + + AWD3_SLV + Analog watchdog 3 flag of the slave + ADC + 25 + 1 + + + JQOVF_SLV + Injected Context Queue Overflow flag of + the slave ADC + 26 + 1 + + + + + CCR + CCR + ADC common control register + 0x8 + 0x20 + read-write + 0x00000000 + + + DUAL + Dual ADC mode selection + 0 + 5 + + + DELAY + Delay between 2 sampling + phases + 8 + 4 + + + DAMDF + Dual ADC Mode Data Format + 14 + 2 + + + CKMODE + ADC clock mode + 16 + 2 + + + PRESC + ADC prescaler + 18 + 4 + + + VREFEN + VREFINT enable + 22 + 1 + + + VSENSEEN + Temperature sensor enable + 23 + 1 + + + VBATEN + VBAT enable + 24 + 1 + + + + + CDR + CDR + ADC common regular data register for dual + and triple modes + 0xC + 0x20 + read-only + 0x00000000 + + + RDATA_SLV + Regular data of the slave + ADC + 16 + 16 + + + RDATA_MST + Regular data of the master + ADC + 0 + 16 + + + + + CDR2 + CDR2 + ADC x common regular data register for + 32-bit dual mode + 0x10 + 0x20 + read-only + 0x00000000 + + + RDATA_ALT + Regular data of the master/slave + alternated ADCs + 0 + 32 + + + + + + + ADC12_Common + 0x40022300 + + ADC1_2 + ADC1 and ADC2 + 18 + + + + DMAMUX1 + DMAMUX + DMAMUX + 0x40020800 + + 0x0 + 0x400 + registers + + + DMAMUX1_OV + DMAMUX1 overrun interrupt + 102 + + + + C0CR + C0CR + DMAMux - DMA request line multiplexer + channel x control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C1CR + C1CR + DMAMux - DMA request line multiplexer + channel x control register + 0x4 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C2CR + C2CR + DMAMux - DMA request line multiplexer + channel x control register + 0x8 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C3CR + C3CR + DMAMux - DMA request line multiplexer + channel x control register + 0xC + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C4CR + C4CR + DMAMux - DMA request line multiplexer + channel x control register + 0x10 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C5CR + C5CR + DMAMux - DMA request line multiplexer + channel x control register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C6CR + C6CR + DMAMux - DMA request line multiplexer + channel x control register + 0x18 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C7CR + C7CR + DMAMux - DMA request line multiplexer + channel x control register + 0x1C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C8CR + C8CR + DMAMux - DMA request line multiplexer + channel x control register + 0x20 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C9CR + C9CR + DMAMux - DMA request line multiplexer + channel x control register + 0x24 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C10CR + C10CR + DMAMux - DMA request line multiplexer + channel x control register + 0x28 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C11CR + C11CR + DMAMux - DMA request line multiplexer + channel x control register + 0x2C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C12CR + C12CR + DMAMux - DMA request line multiplexer + channel x control register + 0x30 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C13CR + C13CR + DMAMux - DMA request line multiplexer + channel x control register + 0x34 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C14CR + C14CR + DMAMux - DMA request line multiplexer + channel x control register + 0x38 + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + C15CR + C15CR + DMAMux - DMA request line multiplexer + channel x control register + 0x3C + 0x20 + read-write + 0x00000000 + + + DMAREQ_ID + Input DMA request line + selected + 0 + 8 + + + SOIE + Interrupt enable at synchronization + event overrun + 8 + 1 + + + EGE + Event generation + enable/disable + 9 + 1 + + + SE + Synchronous operating mode + enable/disable + 16 + 1 + + + SPOL + Synchronization event type selector + Defines the synchronization event on the selected + synchronization input: + 17 + 2 + + + NBREQ + Number of DMA requests to forward + Defines the number of DMA requests forwarded before + output event is generated. In synchronous mode, it + also defines the number of DMA requests to forward + after a synchronization event, then stop forwarding. + The actual number of DMA requests forwarded is + NBREQ+1. Note: This field can only be written when + both SE and EGE bits are reset. + 19 + 5 + + + SYNC_ID + Synchronization input + selected + 24 + 5 + + + + + RG0CR + RG0CR + DMAMux - DMA request generator channel x + control register + 0x100 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG1CR + RG1CR + DMAMux - DMA request generator channel x + control register + 0x104 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG2CR + RG2CR + DMAMux - DMA request generator channel x + control register + 0x108 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG3CR + RG3CR + DMAMux - DMA request generator channel x + control register + 0x10C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG4CR + RG4CR + DMAMux - DMA request generator channel x + control register + 0x110 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG5CR + RG5CR + DMAMux - DMA request generator channel x + control register + 0x114 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG6CR + RG6CR + DMAMux - DMA request generator channel x + control register + 0x118 + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RG7CR + RG7CR + DMAMux - DMA request generator channel x + control register + 0x11C + 0x20 + read-write + 0x00000000 + + + SIG_ID + DMA request trigger input + selected + 0 + 5 + + + OIE + Interrupt enable at trigger event + overrun + 8 + 1 + + + GE + DMA request generator channel + enable/disable + 16 + 1 + + + GPOL + DMA request generator trigger event type + selection Defines the trigger event on the selected + DMA request trigger input + 17 + 2 + + + GNBREQ + Number of DMA requests to generate + Defines the number of DMA requests generated after a + trigger event, then stop generating. The actual + number of generated DMA requests is GNBREQ+1. Note: + This field can only be written when GE bit is + reset. + 19 + 5 + + + + + RGSR + RGSR + DMAMux - DMA request generator status + register + 0x140 + 0x20 + read-only + 0x00000000 + + + OF + Trigger event overrun flag The flag is + set when a trigger event occurs on DMA request + generator channel x, while the DMA request generator + counter value is lower than GNBREQ. The flag is + cleared by writing 1 to the corresponding COFx bit in + DMAMUX_RGCFR register. + 0 + 8 + + + + + RGCFR + RGCFR + DMAMux - DMA request generator clear flag + register + 0x144 + 0x20 + write-only + 0x00000000 + + + COF + Clear trigger event overrun flag Upon + setting, this bit clears the corresponding overrun + flag OFx in the DMAMUX_RGCSR register. + 0 + 8 + + + + + CSR + CSR + DMAMUX request line multiplexer interrupt + channel status register + 0x80 + 0x20 + read-only + 0x00000000 + + + SOF + Synchronization overrun event + flag + 0 + 16 + + + + + CFR + CFR + DMAMUX request line multiplexer interrupt + clear flag register + 0x84 + 0x20 + write-only + 0x00000000 + + + CSOF + Clear synchronization overrun event + flag + 0 + 16 + + + + + + + CRC + Cryptographic processor + CRC + 0x58024C00 + + 0x0 + 0x400 + registers + + + + DR + DR + Data register + 0x0 + 0x20 + read-write + 0xFFFFFFFF + + + DR + Data Register + 0 + 32 + + + + + IDR + IDR + Independent Data register + 0x4 + 0x20 + read-write + 0x00000000 + + + IDR + Independent Data register + 0 + 32 + + + + + CR + CR + Control register + 0x8 + 0x20 + 0x00000000 + + + RESET + RESET bit + 0 + 1 + write-only + + + POLYSIZE + Polynomial size + 3 + 2 + read-write + + + REV_IN + Reverse input data + 5 + 2 + read-write + + + REV_OUT + Reverse output data + 7 + 1 + read-write + + + + + INIT + INIT + Initial CRC value + 0xC + 0x20 + read-write + 0x00000000 + + + CRC_INIT + Programmable initial CRC + value + 0 + 32 + + + + + POL + POL + CRC polynomial + 0x10 + 0x20 + read-write + 0x00000000 + + + POL + Programmable polynomial + 0 + 32 + + + + + + + RCC + Reset and clock control + RCC + 0x58024400 + + 0x0 + 0x400 + registers + + + RCC + RCC global interrupt + 5 + + + + CR + CR + clock control register + 0x0 + 0x20 + read-write + 0x00000083 + + + HSION + Internal high-speed clock + enable + 0 + 1 + + + HSIKERON + High Speed Internal clock enable in Stop + mode + 1 + 1 + + + HSIRDY + HSI clock ready flag + 2 + 1 + + + HSIDIV + HSI clock divider + 3 + 2 + + + HSIDIVF + HSI divider flag + 5 + 1 + + + CSION + CSI clock enable + 7 + 1 + + + CSIRDY + CSI clock ready flag + 8 + 1 + + + CSIKERON + CSI clock enable in Stop + mode + 9 + 1 + + + RC48ON + RC48 clock enable + 12 + 1 + + + RC48RDY + RC48 clock ready flag + 13 + 1 + + + D1CKRDY + D1 domain clocks ready + flag + 14 + 1 + + + D2CKRDY + D2 domain clocks ready + flag + 15 + 1 + + + HSEON + HSE clock enable + 16 + 1 + + + HSERDY + HSE clock ready flag + 17 + 1 + + + HSEBYP + HSE clock bypass + 18 + 1 + + + HSECSSON + HSE Clock Security System + enable + 19 + 1 + + + PLL1ON + PLL1 enable + 24 + 1 + + + PLL1RDY + PLL1 clock ready flag + 25 + 1 + + + PLL2ON + PLL2 enable + 26 + 1 + + + PLL2RDY + PLL2 clock ready flag + 27 + 1 + + + PLL3ON + PLL3 enable + 28 + 1 + + + PLL3RDY + PLL3 clock ready flag + 29 + 1 + + + + + ICSCR + ICSCR + RCC Internal Clock Source Calibration + Register + 0x4 + 0x20 + 0x40000000 + + + HSICAL + HSI clock calibration + 0 + 12 + read-only + + + HSITRIM + HSI clock trimming + 12 + 6 + read-write + + + CSICAL + CSI clock calibration + 18 + 8 + read-only + + + CSITRIM + CSI clock trimming + 26 + 5 + read-write + + + + + CRRCR + CRRCR + RCC Clock Recovery RC Register + 0x8 + 0x20 + read-only + 0x00000000 + + + RC48CAL + Internal RC 48 MHz clock + calibration + 0 + 10 + + + + + CFGR + CFGR + RCC Clock Configuration + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + SW + System clock switch + 0 + 3 + + + SWS + System clock switch status + 3 + 3 + + + STOPWUCK + System clock selection after a wake up + from system Stop + 6 + 1 + + + STOPKERWUCK + Kernel clock selection after a wake up + from system Stop + 7 + 1 + + + RTCPRE + HSE division factor for RTC + clock + 8 + 6 + + + HRTIMSEL + High Resolution Timer clock prescaler + selection + 14 + 1 + + + TIMPRE + Timers clocks prescaler + selection + 15 + 1 + + + MCO1PRE + MCO1 prescaler + 18 + 4 + + + MCO1SEL + Micro-controller clock output + 1 + 22 + 3 + + + MCO2PRE + MCO2 prescaler + 25 + 4 + + + MCO2SEL + Micro-controller clock output + 2 + 29 + 3 + + + + + D1CFGR + D1CFGR + RCC Domain 1 Clock Configuration + Register + 0x18 + 0x20 + read-write + 0x00000000 + + + HPRE + D1 domain AHB prescaler + 0 + 4 + + + D1PPRE + D1 domain APB3 prescaler + 4 + 3 + + + D1CPRE + D1 domain Core prescaler + 8 + 4 + + + + + D2CFGR + D2CFGR + RCC Domain 2 Clock Configuration + Register + 0x1C + 0x20 + read-write + 0x00000000 + + + D2PPRE1 + D2 domain APB1 prescaler + 4 + 3 + + + D2PPRE2 + D2 domain APB2 prescaler + 8 + 3 + + + + + D3CFGR + D3CFGR + RCC Domain 3 Clock Configuration + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + D3PPRE + D3 domain APB4 prescaler + 4 + 3 + + + + + PLLCKSELR + PLLCKSELR + RCC PLLs Clock Source Selection + Register + 0x28 + 0x20 + read-write + 0x02020200 + + + PLLSRC + DIVMx and PLLs clock source + selection + 0 + 2 + + + DIVM1 + Prescaler for PLL1 + 4 + 6 + + + DIVM2 + Prescaler for PLL2 + 12 + 6 + + + DIVM3 + Prescaler for PLL3 + 20 + 6 + + + + + PLLCFGR + PLLCFGR + RCC PLLs Configuration + Register + 0x2C + 0x20 + read-write + 0x01FF0000 + + + PLL1FRACEN + PLL1 fractional latch + enable + 0 + 1 + + + PLL1VCOSEL + PLL1 VCO selection + 1 + 1 + + + PLL1RGE + PLL1 input frequency range + 2 + 2 + + + PLL2FRACEN + PLL2 fractional latch + enable + 4 + 1 + + + PLL2VCOSEL + PLL2 VCO selection + 5 + 1 + + + PLL2RGE + PLL2 input frequency range + 6 + 2 + + + PLL3FRACEN + PLL3 fractional latch + enable + 8 + 1 + + + PLL3VCOSEL + PLL3 VCO selection + 9 + 1 + + + PLL3RGE + PLL3 input frequency range + 10 + 2 + + + DIVP1EN + PLL1 DIVP divider output + enable + 16 + 1 + + + DIVQ1EN + PLL1 DIVQ divider output + enable + 17 + 1 + + + DIVR1EN + PLL1 DIVR divider output + enable + 18 + 1 + + + DIVP2EN + PLL2 DIVP divider output + enable + 19 + 1 + + + DIVQ2EN + PLL2 DIVQ divider output + enable + 20 + 1 + + + DIVR2EN + PLL2 DIVR divider output + enable + 21 + 1 + + + DIVP3EN + PLL3 DIVP divider output + enable + 22 + 1 + + + DIVQ3EN + PLL3 DIVQ divider output + enable + 23 + 1 + + + DIVR3EN + PLL3 DIVR divider output + enable + 24 + 1 + + + + + PLL1DIVR + PLL1DIVR + RCC PLL1 Dividers Configuration + Register + 0x30 + 0x20 + read-write + 0x01010280 + + + DIVN1 + Multiplication factor for PLL1 + VCO + 0 + 9 + + + DIVP1 + PLL1 DIVP division factor + 9 + 7 + + + DIVQ1 + PLL1 DIVQ division factor + 16 + 7 + + + DIVR1 + PLL1 DIVR division factor + 24 + 7 + + + + + PLL1FRACR + PLL1FRACR + RCC PLL1 Fractional Divider + Register + 0x34 + 0x20 + read-write + 0x00000000 + + + FRACN1 + Fractional part of the multiplication + factor for PLL1 VCO + 3 + 13 + + + + + PLL2DIVR + PLL2DIVR + RCC PLL2 Dividers Configuration + Register + 0x38 + 0x20 + read-write + 0x01010280 + + + DIVN1 + Multiplication factor for PLL1 + VCO + 0 + 9 + + + DIVP1 + PLL1 DIVP division factor + 9 + 7 + + + DIVQ1 + PLL1 DIVQ division factor + 16 + 7 + + + DIVR1 + PLL1 DIVR division factor + 24 + 7 + + + + + PLL2FRACR + PLL2FRACR + RCC PLL2 Fractional Divider + Register + 0x3C + 0x20 + read-write + 0x00000000 + + + FRACN2 + Fractional part of the multiplication + factor for PLL VCO + 3 + 13 + + + + + PLL3DIVR + PLL3DIVR + RCC PLL3 Dividers Configuration + Register + 0x40 + 0x20 + read-write + 0x01010280 + + + DIVN3 + Multiplication factor for PLL1 + VCO + 0 + 9 + + + DIVP3 + PLL DIVP division factor + 9 + 7 + + + DIVQ3 + PLL DIVQ division factor + 16 + 7 + + + DIVR3 + PLL DIVR division factor + 24 + 7 + + + + + PLL3FRACR + PLL3FRACR + RCC PLL3 Fractional Divider + Register + 0x44 + 0x20 + read-write + 0x00000000 + + + FRACN3 + Fractional part of the multiplication + factor for PLL3 VCO + 3 + 13 + + + + + D1CCIPR + D1CCIPR + RCC Domain 1 Kernel Clock Configuration + Register + 0x4C + 0x20 + read-write + 0x00000000 + + + FMCSRC + FMC kernel clock source + selection + 0 + 2 + + + QSPISRC + QUADSPI kernel clock source + selection + 4 + 2 + + + SDMMCSRC + SDMMC kernel clock source + selection + 16 + 1 + + + CKPERSRC + per_ck clock source + selection + 28 + 2 + + + + + D2CCIP1R + D2CCIP1R + RCC Domain 2 Kernel Clock Configuration + Register + 0x50 + 0x20 + read-write + 0x00000000 + + + SAI1SRC + SAI1 and DFSDM1 kernel Aclk clock source + selection + 0 + 3 + + + SAI23SRC + SAI2 and SAI3 kernel clock source + selection + 6 + 3 + + + SPI123SRC + SPI/I2S1,2 and 3 kernel clock source + selection + 12 + 3 + + + SPI45SRC + SPI4 and 5 kernel clock source + selection + 16 + 3 + + + SPDIFSRC + SPDIFRX kernel clock source + selection + 20 + 2 + + + DFSDM1SRC + DFSDM1 kernel Clk clock source + selection + 24 + 1 + + + FDCANSRC + FDCAN kernel clock source + selection + 28 + 2 + + + SWPSRC + SWPMI kernel clock source + selection + 31 + 1 + + + + + D2CCIP2R + D2CCIP2R + RCC Domain 2 Kernel Clock Configuration + Register + 0x54 + 0x20 + read-write + 0x00000000 + + + USART234578SRC + USART2/3, UART4,5, 7/8 (APB1) kernel + clock source selection + 0 + 3 + + + USART16SRC + USART1 and 6 kernel clock source + selection + 3 + 3 + + + RNGSRC + RNG kernel clock source + selection + 8 + 2 + + + I2C123SRC + I2C1,2,3 kernel clock source + selection + 12 + 2 + + + USBSRC + USBOTG 1 and 2 kernel clock source + selection + 20 + 2 + + + CECSRC + HDMI-CEC kernel clock source + selection + 22 + 2 + + + LPTIM1SRC + LPTIM1 kernel clock source + selection + 28 + 3 + + + + + D3CCIPR + D3CCIPR + RCC Domain 3 Kernel Clock Configuration + Register + 0x58 + 0x20 + read-write + 0x00000000 + + + LPUART1SRC + LPUART1 kernel clock source + selection + 0 + 3 + + + I2C4SRC + I2C4 kernel clock source + selection + 8 + 2 + + + LPTIM2SRC + LPTIM2 kernel clock source + selection + 10 + 3 + + + LPTIM345SRC + LPTIM3,4,5 kernel clock source + selection + 13 + 3 + + + ADCSRC + SAR ADC kernel clock source + selection + 16 + 2 + + + SAI4ASRC + Sub-Block A of SAI4 kernel clock source + selection + 21 + 3 + + + SAI4BSRC + Sub-Block B of SAI4 kernel clock source + selection + 24 + 3 + + + SPI6SRC + SPI6 kernel clock source + selection + 28 + 3 + + + + + CIER + CIER + RCC Clock Source Interrupt Enable + Register + 0x60 + 0x20 + read-write + 0x00000000 + + + LSIRDYIE + LSI ready Interrupt Enable + 0 + 1 + + + LSERDYIE + LSE ready Interrupt Enable + 1 + 1 + + + HSIRDYIE + HSI ready Interrupt Enable + 2 + 1 + + + HSERDYIE + HSE ready Interrupt Enable + 3 + 1 + + + CSIRDYIE + CSI ready Interrupt Enable + 4 + 1 + + + RC48RDYIE + RC48 ready Interrupt + Enable + 5 + 1 + + + PLL1RDYIE + PLL1 ready Interrupt + Enable + 6 + 1 + + + PLL2RDYIE + PLL2 ready Interrupt + Enable + 7 + 1 + + + PLL3RDYIE + PLL3 ready Interrupt + Enable + 8 + 1 + + + LSECSSIE + LSE clock security system Interrupt + Enable + 9 + 1 + + + + + CIFR + CIFR + RCC Clock Source Interrupt Flag + Register + 0x64 + 0x20 + read-write + 0x00000000 + + + LSIRDYF + LSI ready Interrupt Flag + 0 + 1 + + + LSERDYF + LSE ready Interrupt Flag + 1 + 1 + + + HSIRDYF + HSI ready Interrupt Flag + 2 + 1 + + + HSERDYF + HSE ready Interrupt Flag + 3 + 1 + + + CSIRDY + CSI ready Interrupt Flag + 4 + 1 + + + RC48RDYF + RC48 ready Interrupt Flag + 5 + 1 + + + PLL1RDYF + PLL1 ready Interrupt Flag + 6 + 1 + + + PLL2RDYF + PLL2 ready Interrupt Flag + 7 + 1 + + + PLL3RDYF + PLL3 ready Interrupt Flag + 8 + 1 + + + LSECSSF + LSE clock security system Interrupt + Flag + 9 + 1 + + + HSECSSF + HSE clock security system Interrupt + Flag + 10 + 1 + + + + + CICR + CICR + RCC Clock Source Interrupt Clear + Register + 0x68 + 0x20 + read-write + 0x00000000 + + + LSIRDYC + LSI ready Interrupt Clear + 0 + 1 + + + LSERDYC + LSE ready Interrupt Clear + 1 + 1 + + + HSIRDYC + HSI ready Interrupt Clear + 2 + 1 + + + HSERDYC + HSE ready Interrupt Clear + 3 + 1 + + + HSE_ready_Interrupt_Clear + CSI ready Interrupt Clear + 4 + 1 + + + RC48RDYC + RC48 ready Interrupt Clear + 5 + 1 + + + PLL1RDYC + PLL1 ready Interrupt Clear + 6 + 1 + + + PLL2RDYC + PLL2 ready Interrupt Clear + 7 + 1 + + + PLL3RDYC + PLL3 ready Interrupt Clear + 8 + 1 + + + LSECSSC + LSE clock security system Interrupt + Clear + 9 + 1 + + + HSECSSC + HSE clock security system Interrupt + Clear + 10 + 1 + + + + + BDCR + BDCR + RCC Backup Domain Control + Register + 0x70 + 0x20 + read-write + 0x00000000 + + + LSEON + LSE oscillator enabled + 0 + 1 + + + LSERDY + LSE oscillator ready + 1 + 1 + + + LSEBYP + LSE oscillator bypass + 2 + 1 + + + LSEDRV + LSE oscillator driving + capability + 3 + 2 + + + LSECSSON + LSE clock security system + enable + 5 + 1 + + + LSECSSD + LSE clock security system failure + detection + 6 + 1 + + + RTCSRC + RTC clock source selection + 8 + 2 + + + RTCEN + RTC clock enable + 15 + 1 + + + VSWRST + VSwitch domain software + reset + 16 + 1 + + + + + CSR + CSR + RCC Clock Control and Status + Register + 0x74 + 0x20 + read-write + 0x00000000 + + + LSION + LSI oscillator enable + 0 + 1 + + + LSIRDY + LSI oscillator ready + 1 + 1 + + + + + AHB3RSTR + AHB3RSTR + RCC AHB3 Reset Register + 0x7C + 0x20 + read-write + 0x00000000 + + + MDMARST + MDMA block reset + 0 + 1 + + + DMA2DRST + DMA2D block reset + 4 + 1 + + + JPGDECRST + JPGDEC block reset + 5 + 1 + + + FMCRST + FMC block reset + 12 + 1 + + + QSPIRST + QUADSPI and QUADSPI delay block + reset + 14 + 1 + + + SDMMC1RST + SDMMC1 and SDMMC1 delay block + reset + 16 + 1 + + + CPURST + CPU reset + 31 + 1 + + + + + AHB1RSTR + AHB1RSTR + RCC AHB1 Peripheral Reset + Register + 0x80 + 0x20 + read-write + 0x00000000 + + + DMA1RST + DMA1 block reset + 0 + 1 + + + DMA2RST + DMA2 block reset + 1 + 1 + + + ADC12RST + ADC1&2 block reset + 5 + 1 + + + ETH1MACRST + ETH1MAC block reset + 15 + 1 + + + USB1OTGRST + USB1OTG block reset + 25 + 1 + + + USB2OTGRST + USB2OTG block reset + 27 + 1 + + + + + AHB2RSTR + AHB2RSTR + RCC AHB2 Peripheral Reset + Register + 0x84 + 0x20 + read-write + 0x00000000 + + + CAMITFRST + CAMITF block reset + 0 + 1 + + + CRYPTRST + Cryptography block reset + 4 + 1 + + + HASHRST + Hash block reset + 5 + 1 + + + RNGRST + Random Number Generator block + reset + 6 + 1 + + + SDMMC2RST + SDMMC2 and SDMMC2 Delay block + reset + 9 + 1 + + + + + AHB4RSTR + AHB4RSTR + RCC AHB4 Peripheral Reset + Register + 0x88 + 0x20 + read-write + 0x00000000 + + + GPIOARST + GPIO block reset + 0 + 1 + + + GPIOBRST + GPIO block reset + 1 + 1 + + + GPIOCRST + GPIO block reset + 2 + 1 + + + GPIODRST + GPIO block reset + 3 + 1 + + + GPIOERST + GPIO block reset + 4 + 1 + + + GPIOFRST + GPIO block reset + 5 + 1 + + + GPIOGRST + GPIO block reset + 6 + 1 + + + GPIOHRST + GPIO block reset + 7 + 1 + + + GPIOIRST + GPIO block reset + 8 + 1 + + + GPIOJRST + GPIO block reset + 9 + 1 + + + GPIOKRST + GPIO block reset + 10 + 1 + + + CRCRST + CRC block reset + 19 + 1 + + + BDMARST + BDMA block reset + 21 + 1 + + + ADC3RST + ADC3 block reset + 24 + 1 + + + HSEMRST + HSEM block reset + 25 + 1 + + + + + APB3RSTR + APB3RSTR + RCC APB3 Peripheral Reset + Register + 0x8C + 0x20 + read-write + 0x00000000 + + + LTDCRST + LTDC block reset + 3 + 1 + + + + + APB1LRSTR + APB1LRSTR + RCC APB1 Peripheral Reset + Register + 0x90 + 0x20 + read-write + 0x00000000 + + + TIM2RST + TIM block reset + 0 + 1 + + + TIM3RST + TIM block reset + 1 + 1 + + + TIM4RST + TIM block reset + 2 + 1 + + + TIM5RST + TIM block reset + 3 + 1 + + + TIM6RST + TIM block reset + 4 + 1 + + + TIM7RST + TIM block reset + 5 + 1 + + + TIM12RST + TIM block reset + 6 + 1 + + + TIM13RST + TIM block reset + 7 + 1 + + + TIM14RST + TIM block reset + 8 + 1 + + + LPTIM1RST + TIM block reset + 9 + 1 + + + SPI2RST + SPI2 block reset + 14 + 1 + + + SPI3RST + SPI3 block reset + 15 + 1 + + + SPDIFRXRST + SPDIFRX block reset + 16 + 1 + + + USART2RST + USART2 block reset + 17 + 1 + + + USART3RST + USART3 block reset + 18 + 1 + + + UART4RST + UART4 block reset + 19 + 1 + + + UART5RST + UART5 block reset + 20 + 1 + + + I2C1RST + I2C1 block reset + 21 + 1 + + + I2C2RST + I2C2 block reset + 22 + 1 + + + I2C3RST + I2C3 block reset + 23 + 1 + + + HDMICECRST + HDMI-CEC block reset + 27 + 1 + + + DAC12RST + DAC1 and 2 Blocks Reset + 29 + 1 + + + USART7RST + USART7 block reset + 30 + 1 + + + USART8RST + USART8 block reset + 31 + 1 + + + + + APB1HRSTR + APB1HRSTR + RCC APB1 Peripheral Reset + Register + 0x94 + 0x20 + read-write + 0x00000000 + + + CRSRST + Clock Recovery System + reset + 1 + 1 + + + SWPRST + SWPMI block reset + 2 + 1 + + + OPAMPRST + OPAMP block reset + 4 + 1 + + + MDIOSRST + MDIOS block reset + 5 + 1 + + + FDCANRST + FDCAN block reset + 8 + 1 + + + + + APB2RSTR + APB2RSTR + RCC APB2 Peripheral Reset + Register + 0x98 + 0x20 + read-write + 0x00000000 + + + TIM1RST + TIM1 block reset + 0 + 1 + + + TIM8RST + TIM8 block reset + 1 + 1 + + + USART1RST + USART1 block reset + 4 + 1 + + + USART6RST + USART6 block reset + 5 + 1 + + + SPI1RST + SPI1 block reset + 12 + 1 + + + SPI4RST + SPI4 block reset + 13 + 1 + + + TIM15RST + TIM15 block reset + 16 + 1 + + + TIM16RST + TIM16 block reset + 17 + 1 + + + TIM17RST + TIM17 block reset + 18 + 1 + + + SPI5RST + SPI5 block reset + 20 + 1 + + + SAI1RST + SAI1 block reset + 22 + 1 + + + SAI2RST + SAI2 block reset + 23 + 1 + + + SAI3RST + SAI3 block reset + 24 + 1 + + + DFSDM1RST + DFSDM1 block reset + 28 + 1 + + + HRTIMRST + HRTIM block reset + 29 + 1 + + + + + APB4RSTR + APB4RSTR + RCC APB4 Peripheral Reset + Register + 0x9C + 0x20 + read-write + 0x00000000 + + + SYSCFGRST + SYSCFG block reset + 1 + 1 + + + LPUART1RST + LPUART1 block reset + 3 + 1 + + + SPI6RST + SPI6 block reset + 5 + 1 + + + I2C4RST + I2C4 block reset + 7 + 1 + + + LPTIM2RST + LPTIM2 block reset + 9 + 1 + + + LPTIM3RST + LPTIM3 block reset + 10 + 1 + + + LPTIM4RST + LPTIM4 block reset + 11 + 1 + + + LPTIM5RST + LPTIM5 block reset + 12 + 1 + + + COMP12RST + COMP12 Blocks Reset + 14 + 1 + + + VREFRST + VREF block reset + 15 + 1 + + + SAI4RST + SAI4 block reset + 21 + 1 + + + + + GCR + GCR + RCC Global Control Register + 0xA0 + 0x20 + read-write + 0x00000000 + + + WW1RSC + WWDG1 reset scope control + 0 + 1 + + + + + D3AMR + D3AMR + RCC D3 Autonomous mode + Register + 0xA8 + 0x20 + read-write + 0x00000000 + + + BDMAAMEN + BDMA and DMAMUX Autonomous mode + enable + 0 + 1 + + + LPUART1AMEN + LPUART1 Autonomous mode + enable + 3 + 1 + + + SPI6AMEN + SPI6 Autonomous mode + enable + 5 + 1 + + + I2C4AMEN + I2C4 Autonomous mode + enable + 7 + 1 + + + LPTIM2AMEN + LPTIM2 Autonomous mode + enable + 9 + 1 + + + LPTIM3AMEN + LPTIM3 Autonomous mode + enable + 10 + 1 + + + LPTIM4AMEN + LPTIM4 Autonomous mode + enable + 11 + 1 + + + LPTIM5AMEN + LPTIM5 Autonomous mode + enable + 12 + 1 + + + COMP12AMEN + COMP12 Autonomous mode + enable + 14 + 1 + + + VREFAMEN + VREF Autonomous mode + enable + 15 + 1 + + + RTCAMEN + RTC Autonomous mode enable + 16 + 1 + + + CRCAMEN + CRC Autonomous mode enable + 19 + 1 + + + SAI4AMEN + SAI4 Autonomous mode + enable + 21 + 1 + + + ADC3AMEN + ADC3 Autonomous mode + enable + 24 + 1 + + + BKPSRAMAMEN + Backup RAM Autonomous mode + enable + 28 + 1 + + + SRAM4AMEN + SRAM4 Autonomous mode + enable + 29 + 1 + + + + + RSR + RSR + RCC Reset Status Register + 0xD0 + 0x20 + read-write + 0x00000000 + + + RMVF + Remove reset flag + 16 + 1 + + + CPURSTF + CPU reset flag + 17 + 1 + + + D1RSTF + D1 domain power switch reset + flag + 19 + 1 + + + D2RSTF + D2 domain power switch reset + flag + 20 + 1 + + + BORRSTF + BOR reset flag + 21 + 1 + + + PINRSTF + Pin reset flag (NRST) + 22 + 1 + + + PORRSTF + POR/PDR reset flag + 23 + 1 + + + SFTRSTF + System reset from CPU reset + flag + 24 + 1 + + + IWDG1RSTF + Independent Watchdog reset + flag + 26 + 1 + + + WWDG1RSTF + Window Watchdog reset flag + 28 + 1 + + + LPWRRSTF + Reset due to illegal D1 DStandby or CPU + CStop flag + 30 + 1 + + + + + C1_RSR + C1_RSR + RCC Reset Status Register + 0x130 + 0x20 + read-write + 0x00000000 + + + RMVF + Remove reset flag + 16 + 1 + + + CPURSTF + CPU reset flag + 17 + 1 + + + D1RSTF + D1 domain power switch reset + flag + 19 + 1 + + + D2RSTF + D2 domain power switch reset + flag + 20 + 1 + + + BORRSTF + BOR reset flag + 21 + 1 + + + PINRSTF + Pin reset flag (NRST) + 22 + 1 + + + PORRSTF + POR/PDR reset flag + 23 + 1 + + + SFTRSTF + System reset from CPU reset + flag + 24 + 1 + + + IWDG1RSTF + Independent Watchdog reset + flag + 26 + 1 + + + WWDG1RSTF + Window Watchdog reset flag + 28 + 1 + + + LPWRRSTF + Reset due to illegal D1 DStandby or CPU + CStop flag + 30 + 1 + + + + + C1_AHB3ENR + C1_AHB3ENR + RCC AHB3 Clock Register + 0x134 + 0x20 + read-write + 0x00000000 + + + MDMAEN + MDMA Peripheral Clock + Enable + 0 + 1 + + + DMA2DEN + DMA2D Peripheral Clock + Enable + 4 + 1 + + + JPGDECEN + JPGDEC Peripheral Clock + Enable + 5 + 1 + + + FMCEN + FMC Peripheral Clocks + Enable + 12 + 1 + + + QSPIEN + QUADSPI and QUADSPI Delay Clock + Enable + 14 + 1 + + + SDMMC1EN + SDMMC1 and SDMMC1 Delay Clock + Enable + 16 + 1 + + + + + AHB3ENR + AHB3ENR + RCC AHB3 Clock Register + 0xD4 + 0x20 + read-write + 0x00000000 + + + MDMAEN + MDMA Peripheral Clock + Enable + 0 + 1 + + + DMA2DEN + DMA2D Peripheral Clock + Enable + 4 + 1 + + + JPGDECEN + JPGDEC Peripheral Clock + Enable + 5 + 1 + + + FMCEN + FMC Peripheral Clocks + Enable + 12 + 1 + + + QSPIEN + QUADSPI and QUADSPI Delay Clock + Enable + 14 + 1 + + + SDMMC1EN + SDMMC1 and SDMMC1 Delay Clock + Enable + 16 + 1 + + + + + AHB1ENR + AHB1ENR + RCC AHB1 Clock Register + 0xD8 + 0x20 + read-write + 0x00000000 + + + DMA1EN + DMA1 Clock Enable + 0 + 1 + + + DMA2EN + DMA2 Clock Enable + 1 + 1 + + + ADC12EN + ADC1/2 Peripheral Clocks + Enable + 5 + 1 + + + ETH1MACEN + Ethernet MAC bus interface Clock + Enable + 15 + 1 + + + ETH1TXEN + Ethernet Transmission Clock + Enable + 16 + 1 + + + ETH1RXEN + Ethernet Reception Clock + Enable + 17 + 1 + + + USB1OTGEN + USB1OTG Peripheral Clocks + Enable + 25 + 1 + + + USB1ULPIEN + USB_PHY1 Clocks Enable + 26 + 1 + + + USB2OTGEN + USB2OTG Peripheral Clocks + Enable + 27 + 1 + + + USB2ULPIEN + USB_PHY2 Clocks Enable + 28 + 1 + + + + + C1_AHB1ENR + C1_AHB1ENR + RCC AHB1 Clock Register + 0x138 + 0x20 + read-write + 0x00000000 + + + DMA1EN + DMA1 Clock Enable + 0 + 1 + + + DMA2EN + DMA2 Clock Enable + 1 + 1 + + + ADC12EN + ADC1/2 Peripheral Clocks + Enable + 5 + 1 + + + ETH1MACEN + Ethernet MAC bus interface Clock + Enable + 15 + 1 + + + ETH1TXEN + Ethernet Transmission Clock + Enable + 16 + 1 + + + ETH1RXEN + Ethernet Reception Clock + Enable + 17 + 1 + + + USB1OTGEN + USB1OTG Peripheral Clocks + Enable + 25 + 1 + + + USB1ULPIEN + USB_PHY1 Clocks Enable + 26 + 1 + + + USB2OTGEN + USB2OTG Peripheral Clocks + Enable + 27 + 1 + + + USB2ULPIEN + USB_PHY2 Clocks Enable + 28 + 1 + + + + + C1_AHB2ENR + C1_AHB2ENR + RCC AHB2 Clock Register + 0x13C + 0x20 + read-write + 0x00000000 + + + CAMITFEN + CAMITF peripheral clock + enable + 0 + 1 + + + CRYPTEN + CRYPT peripheral clock + enable + 4 + 1 + + + HASHEN + HASH peripheral clock + enable + 5 + 1 + + + RNGEN + RNG peripheral clocks + enable + 6 + 1 + + + SDMMC2EN + SDMMC2 and SDMMC2 delay clock + enable + 9 + 1 + + + SRAM1EN + SRAM1 block enable + 29 + 1 + + + SRAM2EN + SRAM2 block enable + 30 + 1 + + + SRAM3EN + SRAM3 block enable + 31 + 1 + + + + + AHB2ENR + AHB2ENR + RCC AHB2 Clock Register + 0xDC + 0x20 + read-write + 0x00000000 + + + CAMITFEN + CAMITF peripheral clock + enable + 0 + 1 + + + CRYPTEN + CRYPT peripheral clock + enable + 4 + 1 + + + HASHEN + HASH peripheral clock + enable + 5 + 1 + + + RNGEN + RNG peripheral clocks + enable + 6 + 1 + + + SDMMC2EN + SDMMC2 and SDMMC2 delay clock + enable + 9 + 1 + + + SRAM1EN + SRAM1 block enable + 29 + 1 + + + SRAM2EN + SRAM2 block enable + 30 + 1 + + + SRAM3EN + SRAM3 block enable + 31 + 1 + + + + + AHB4ENR + AHB4ENR + RCC AHB4 Clock Register + 0xE0 + 0x20 + read-write + 0x00000000 + + + GPIOAEN + 0GPIO peripheral clock + enable + 0 + 1 + + + GPIOBEN + 0GPIO peripheral clock + enable + 1 + 1 + + + GPIOCEN + 0GPIO peripheral clock + enable + 2 + 1 + + + GPIODEN + 0GPIO peripheral clock + enable + 3 + 1 + + + GPIOEEN + 0GPIO peripheral clock + enable + 4 + 1 + + + GPIOFEN + 0GPIO peripheral clock + enable + 5 + 1 + + + GPIOGEN + 0GPIO peripheral clock + enable + 6 + 1 + + + GPIOHEN + 0GPIO peripheral clock + enable + 7 + 1 + + + GPIOIEN + 0GPIO peripheral clock + enable + 8 + 1 + + + GPIOJEN + 0GPIO peripheral clock + enable + 9 + 1 + + + GPIOKEN + 0GPIO peripheral clock + enable + 10 + 1 + + + CRCEN + CRC peripheral clock + enable + 19 + 1 + + + BDMAEN + BDMA and DMAMUX2 Clock + Enable + 21 + 1 + + + ADC3EN + ADC3 Peripheral Clocks + Enable + 24 + 1 + + + HSEMEN + HSEM peripheral clock + enable + 25 + 1 + + + BKPRAMEN + Backup RAM Clock Enable + 28 + 1 + + + + + C1_AHB4ENR + C1_AHB4ENR + RCC AHB4 Clock Register + 0x140 + 0x20 + read-write + 0x00000000 + + + GPIOAEN + 0GPIO peripheral clock + enable + 0 + 1 + + + GPIOBEN + 0GPIO peripheral clock + enable + 1 + 1 + + + GPIOCEN + 0GPIO peripheral clock + enable + 2 + 1 + + + GPIODEN + 0GPIO peripheral clock + enable + 3 + 1 + + + GPIOEEN + 0GPIO peripheral clock + enable + 4 + 1 + + + GPIOFEN + 0GPIO peripheral clock + enable + 5 + 1 + + + GPIOGEN + 0GPIO peripheral clock + enable + 6 + 1 + + + GPIOHEN + 0GPIO peripheral clock + enable + 7 + 1 + + + GPIOIEN + 0GPIO peripheral clock + enable + 8 + 1 + + + GPIOJEN + 0GPIO peripheral clock + enable + 9 + 1 + + + GPIOKEN + 0GPIO peripheral clock + enable + 10 + 1 + + + CRCEN + CRC peripheral clock + enable + 19 + 1 + + + BDMAEN + BDMA and DMAMUX2 Clock + Enable + 21 + 1 + + + ADC3EN + ADC3 Peripheral Clocks + Enable + 24 + 1 + + + HSEMEN + HSEM peripheral clock + enable + 25 + 1 + + + BKPRAMEN + Backup RAM Clock Enable + 28 + 1 + + + + + C1_APB3ENR + C1_APB3ENR + RCC APB3 Clock Register + 0x144 + 0x20 + read-write + 0x00000000 + + + LTDCEN + LTDC peripheral clock + enable + 3 + 1 + + + WWDG1EN + WWDG1 Clock Enable + 6 + 1 + + + + + APB3ENR + APB3ENR + RCC APB3 Clock Register + 0xE4 + 0x20 + read-write + 0x00000000 + + + LTDCEN + LTDC peripheral clock + enable + 3 + 1 + + + WWDG1EN + WWDG1 Clock Enable + 6 + 1 + + + + + APB1LENR + APB1LENR + RCC APB1 Clock Register + 0xE8 + 0x20 + read-write + 0x00000000 + + + TIM2EN + TIM peripheral clock + enable + 0 + 1 + + + TIM3EN + TIM peripheral clock + enable + 1 + 1 + + + TIM4EN + TIM peripheral clock + enable + 2 + 1 + + + TIM5EN + TIM peripheral clock + enable + 3 + 1 + + + TIM6EN + TIM peripheral clock + enable + 4 + 1 + + + TIM7EN + TIM peripheral clock + enable + 5 + 1 + + + TIM12EN + TIM peripheral clock + enable + 6 + 1 + + + TIM13EN + TIM peripheral clock + enable + 7 + 1 + + + TIM14EN + TIM peripheral clock + enable + 8 + 1 + + + LPTIM1EN + LPTIM1 Peripheral Clocks + Enable + 9 + 1 + + + SPI2EN + SPI2 Peripheral Clocks + Enable + 14 + 1 + + + SPI3EN + SPI3 Peripheral Clocks + Enable + 15 + 1 + + + SPDIFRXEN + SPDIFRX Peripheral Clocks + Enable + 16 + 1 + + + USART2EN + USART2 Peripheral Clocks + Enable + 17 + 1 + + + USART3EN + USART3 Peripheral Clocks + Enable + 18 + 1 + + + UART4EN + UART4 Peripheral Clocks + Enable + 19 + 1 + + + UART5EN + UART5 Peripheral Clocks + Enable + 20 + 1 + + + I2C1EN + I2C1 Peripheral Clocks + Enable + 21 + 1 + + + I2C2EN + I2C2 Peripheral Clocks + Enable + 22 + 1 + + + I2C3EN + I2C3 Peripheral Clocks + Enable + 23 + 1 + + + HDMICECEN + HDMI-CEC peripheral clock + enable + 27 + 1 + + + DAC12EN + DAC1&2 peripheral clock + enable + 29 + 1 + + + USART7EN + USART7 Peripheral Clocks + Enable + 30 + 1 + + + USART8EN + USART8 Peripheral Clocks + Enable + 31 + 1 + + + + + C1_APB1LENR + C1_APB1LENR + RCC APB1 Clock Register + 0x148 + 0x20 + read-write + 0x00000000 + + + TIM2EN + TIM peripheral clock + enable + 0 + 1 + + + TIM3EN + TIM peripheral clock + enable + 1 + 1 + + + TIM4EN + TIM peripheral clock + enable + 2 + 1 + + + TIM5EN + TIM peripheral clock + enable + 3 + 1 + + + TIM6EN + TIM peripheral clock + enable + 4 + 1 + + + TIM7EN + TIM peripheral clock + enable + 5 + 1 + + + TIM12EN + TIM peripheral clock + enable + 6 + 1 + + + TIM13EN + TIM peripheral clock + enable + 7 + 1 + + + TIM14EN + TIM peripheral clock + enable + 8 + 1 + + + LPTIM1EN + LPTIM1 Peripheral Clocks + Enable + 9 + 1 + + + SPI2EN + SPI2 Peripheral Clocks + Enable + 14 + 1 + + + SPI3EN + SPI3 Peripheral Clocks + Enable + 15 + 1 + + + SPDIFRXEN + SPDIFRX Peripheral Clocks + Enable + 16 + 1 + + + USART2EN + USART2 Peripheral Clocks + Enable + 17 + 1 + + + USART3EN + USART3 Peripheral Clocks + Enable + 18 + 1 + + + UART4EN + UART4 Peripheral Clocks + Enable + 19 + 1 + + + UART5EN + UART5 Peripheral Clocks + Enable + 20 + 1 + + + I2C1EN + I2C1 Peripheral Clocks + Enable + 21 + 1 + + + I2C2EN + I2C2 Peripheral Clocks + Enable + 22 + 1 + + + I2C3EN + I2C3 Peripheral Clocks + Enable + 23 + 1 + + + HDMICECEN + HDMI-CEC peripheral clock + enable + 27 + 1 + + + DAC12EN + DAC1&2 peripheral clock + enable + 29 + 1 + + + USART7EN + USART7 Peripheral Clocks + Enable + 30 + 1 + + + USART8EN + USART8 Peripheral Clocks + Enable + 31 + 1 + + + + + APB1HENR + APB1HENR + RCC APB1 Clock Register + 0xEC + 0x20 + read-write + 0x00000000 + + + CRSEN + Clock Recovery System peripheral clock + enable + 1 + 1 + + + SWPEN + SWPMI Peripheral Clocks + Enable + 2 + 1 + + + OPAMPEN + OPAMP peripheral clock + enable + 4 + 1 + + + MDIOSEN + MDIOS peripheral clock + enable + 5 + 1 + + + FDCANEN + FDCAN Peripheral Clocks + Enable + 8 + 1 + + + + + C1_APB1HENR + C1_APB1HENR + RCC APB1 Clock Register + 0x14C + 0x20 + read-write + 0x00000000 + + + CRSEN + Clock Recovery System peripheral clock + enable + 1 + 1 + + + SWPEN + SWPMI Peripheral Clocks + Enable + 2 + 1 + + + OPAMPEN + OPAMP peripheral clock + enable + 4 + 1 + + + MDIOSEN + MDIOS peripheral clock + enable + 5 + 1 + + + FDCANEN + FDCAN Peripheral Clocks + Enable + 8 + 1 + + + + + C1_APB2ENR + C1_APB2ENR + RCC APB2 Clock Register + 0x150 + 0x20 + read-write + 0x00000000 + + + TIM1EN + TIM1 peripheral clock + enable + 0 + 1 + + + TIM8EN + TIM8 peripheral clock + enable + 1 + 1 + + + USART1EN + USART1 Peripheral Clocks + Enable + 4 + 1 + + + USART6EN + USART6 Peripheral Clocks + Enable + 5 + 1 + + + SPI1EN + SPI1 Peripheral Clocks + Enable + 12 + 1 + + + SPI4EN + SPI4 Peripheral Clocks + Enable + 13 + 1 + + + TIM16EN + TIM16 peripheral clock + enable + 17 + 1 + + + TIM15EN + TIM15 peripheral clock + enable + 16 + 1 + + + TIM17EN + TIM17 peripheral clock + enable + 18 + 1 + + + SPI5EN + SPI5 Peripheral Clocks + Enable + 20 + 1 + + + SAI1EN + SAI1 Peripheral Clocks + Enable + 22 + 1 + + + SAI2EN + SAI2 Peripheral Clocks + Enable + 23 + 1 + + + SAI3EN + SAI3 Peripheral Clocks + Enable + 24 + 1 + + + DFSDM1EN + DFSDM1 Peripheral Clocks + Enable + 28 + 1 + + + HRTIMEN + HRTIM peripheral clock + enable + 29 + 1 + + + + + APB2ENR + APB2ENR + RCC APB2 Clock Register + 0xF0 + 0x20 + read-write + 0x00000000 + + + TIM1EN + TIM1 peripheral clock + enable + 0 + 1 + + + TIM8EN + TIM8 peripheral clock + enable + 1 + 1 + + + USART1EN + USART1 Peripheral Clocks + Enable + 4 + 1 + + + USART6EN + USART6 Peripheral Clocks + Enable + 5 + 1 + + + SPI1EN + SPI1 Peripheral Clocks + Enable + 12 + 1 + + + SPI4EN + SPI4 Peripheral Clocks + Enable + 13 + 1 + + + TIM16EN + TIM16 peripheral clock + enable + 17 + 1 + + + TIM15EN + TIM15 peripheral clock + enable + 16 + 1 + + + TIM17EN + TIM17 peripheral clock + enable + 18 + 1 + + + SPI5EN + SPI5 Peripheral Clocks + Enable + 20 + 1 + + + SAI1EN + SAI1 Peripheral Clocks + Enable + 22 + 1 + + + SAI2EN + SAI2 Peripheral Clocks + Enable + 23 + 1 + + + SAI3EN + SAI3 Peripheral Clocks + Enable + 24 + 1 + + + DFSDM1EN + DFSDM1 Peripheral Clocks + Enable + 28 + 1 + + + HRTIMEN + HRTIM peripheral clock + enable + 29 + 1 + + + + + APB4ENR + APB4ENR + RCC APB4 Clock Register + 0xF4 + 0x20 + read-write + 0x00000000 + + + SYSCFGEN + SYSCFG peripheral clock + enable + 1 + 1 + + + LPUART1EN + LPUART1 Peripheral Clocks + Enable + 3 + 1 + + + SPI6EN + SPI6 Peripheral Clocks + Enable + 5 + 1 + + + I2C4EN + I2C4 Peripheral Clocks + Enable + 7 + 1 + + + LPTIM2EN + LPTIM2 Peripheral Clocks + Enable + 9 + 1 + + + LPTIM3EN + LPTIM3 Peripheral Clocks + Enable + 10 + 1 + + + LPTIM4EN + LPTIM4 Peripheral Clocks + Enable + 11 + 1 + + + LPTIM5EN + LPTIM5 Peripheral Clocks + Enable + 12 + 1 + + + COMP12EN + COMP1/2 peripheral clock + enable + 14 + 1 + + + VREFEN + VREF peripheral clock + enable + 15 + 1 + + + RTCAPBEN + RTC APB Clock Enable + 16 + 1 + + + SAI4EN + SAI4 Peripheral Clocks + Enable + 21 + 1 + + + + + C1_APB4ENR + C1_APB4ENR + RCC APB4 Clock Register + 0x154 + 0x20 + read-write + 0x00000000 + + + SYSCFGEN + SYSCFG peripheral clock + enable + 1 + 1 + + + LPUART1EN + LPUART1 Peripheral Clocks + Enable + 3 + 1 + + + SPI6EN + SPI6 Peripheral Clocks + Enable + 5 + 1 + + + I2C4EN + I2C4 Peripheral Clocks + Enable + 7 + 1 + + + LPTIM2EN + LPTIM2 Peripheral Clocks + Enable + 9 + 1 + + + LPTIM3EN + LPTIM3 Peripheral Clocks + Enable + 10 + 1 + + + LPTIM4EN + LPTIM4 Peripheral Clocks + Enable + 11 + 1 + + + LPTIM5EN + LPTIM5 Peripheral Clocks + Enable + 12 + 1 + + + COMP12EN + COMP1/2 peripheral clock + enable + 14 + 1 + + + VREFEN + VREF peripheral clock + enable + 15 + 1 + + + RTCAPBEN + RTC APB Clock Enable + 16 + 1 + + + SAI4EN + SAI4 Peripheral Clocks + Enable + 21 + 1 + + + + + C1_AHB3LPENR + C1_AHB3LPENR + RCC AHB3 Sleep Clock Register + 0x15C + 0x20 + read-write + 0x00000000 + + + MDMALPEN + MDMA Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2DLPEN + DMA2D Clock Enable During CSleep + Mode + 4 + 1 + + + JPGDECLPEN + JPGDEC Clock Enable During CSleep + Mode + 5 + 1 + + + FLITFLPEN + FLITF Clock Enable During CSleep + Mode + 8 + 1 + + + FMCLPEN + FMC Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + QSPILPEN + QUADSPI and QUADSPI Delay Clock Enable + During CSleep Mode + 14 + 1 + + + SDMMC1LPEN + SDMMC1 and SDMMC1 Delay Clock Enable + During CSleep Mode + 16 + 1 + + + D1DTCM1LPEN + D1DTCM1 Block Clock Enable During CSleep + mode + 28 + 1 + + + DTCM2LPEN + D1 DTCM2 Block Clock Enable During + CSleep mode + 29 + 1 + + + ITCMLPEN + D1ITCM Block Clock Enable During CSleep + mode + 30 + 1 + + + AXISRAMLPEN + AXISRAM Block Clock Enable During CSleep + mode + 31 + 1 + + + + + AHB3LPENR + AHB3LPENR + RCC AHB3 Sleep Clock Register + 0xFC + 0x20 + read-write + 0x00000000 + + + MDMALPEN + MDMA Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2DLPEN + DMA2D Clock Enable During CSleep + Mode + 4 + 1 + + + JPGDECLPEN + JPGDEC Clock Enable During CSleep + Mode + 5 + 1 + + + FLITFLPEN + FLITF Clock Enable During CSleep + Mode + 8 + 1 + + + FMCLPEN + FMC Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + QSPILPEN + QUADSPI and QUADSPI Delay Clock Enable + During CSleep Mode + 14 + 1 + + + SDMMC1LPEN + SDMMC1 and SDMMC1 Delay Clock Enable + During CSleep Mode + 16 + 1 + + + D1DTCM1LPEN + D1DTCM1 Block Clock Enable During CSleep + mode + 28 + 1 + + + DTCM2LPEN + D1 DTCM2 Block Clock Enable During + CSleep mode + 29 + 1 + + + ITCMLPEN + D1ITCM Block Clock Enable During CSleep + mode + 30 + 1 + + + AXISRAMLPEN + AXISRAM Block Clock Enable During CSleep + mode + 31 + 1 + + + + + AHB1LPENR + AHB1LPENR + RCC AHB1 Sleep Clock Register + 0x100 + 0x20 + read-write + 0x00000000 + + + DMA1LPEN + DMA1 Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2LPEN + DMA2 Clock Enable During CSleep + Mode + 1 + 1 + + + ADC12LPEN + ADC1/2 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + ETH1MACLPEN + Ethernet MAC bus interface Clock Enable + During CSleep Mode + 15 + 1 + + + ETH1TXLPEN + Ethernet Transmission Clock Enable + During CSleep Mode + 16 + 1 + + + ETH1RXLPEN + Ethernet Reception Clock Enable During + CSleep Mode + 17 + 1 + + + USB1OTGLPEN + USB1OTG peripheral clock enable during + CSleep mode + 25 + 1 + + + USB1ULPILPEN + USB_PHY1 clock enable during CSleep + mode + 26 + 1 + + + USB2OTGLPEN + USB2OTG peripheral clock enable during + CSleep mode + 27 + 1 + + + USB2ULPILPEN + USB_PHY2 clocks enable during CSleep + mode + 28 + 1 + + + + + C1_AHB1LPENR + C1_AHB1LPENR + RCC AHB1 Sleep Clock Register + 0x160 + 0x20 + read-write + 0x00000000 + + + DMA1LPEN + DMA1 Clock Enable During CSleep + Mode + 0 + 1 + + + DMA2LPEN + DMA2 Clock Enable During CSleep + Mode + 1 + 1 + + + ADC12LPEN + ADC1/2 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + ETH1MACLPEN + Ethernet MAC bus interface Clock Enable + During CSleep Mode + 15 + 1 + + + ETH1TXLPEN + Ethernet Transmission Clock Enable + During CSleep Mode + 16 + 1 + + + ETH1RXLPEN + Ethernet Reception Clock Enable During + CSleep Mode + 17 + 1 + + + USB1OTGLPEN + USB1OTG peripheral clock enable during + CSleep mode + 25 + 1 + + + USB1ULPILPEN + USB_PHY1 clock enable during CSleep + mode + 26 + 1 + + + USB2OTGLPEN + USB2OTG peripheral clock enable during + CSleep mode + 27 + 1 + + + USB2ULPILPEN + USB_PHY2 clocks enable during CSleep + mode + 28 + 1 + + + + + C1_AHB2LPENR + C1_AHB2LPENR + RCC AHB2 Sleep Clock Register + 0x164 + 0x20 + read-write + 0x00000000 + + + CAMITFLPEN + CAMITF peripheral clock enable during + CSleep mode + 0 + 1 + + + CRYPTLPEN + CRYPT peripheral clock enable during + CSleep mode + 4 + 1 + + + HASHLPEN + HASH peripheral clock enable during + CSleep mode + 5 + 1 + + + SDMMC2LPEN + SDMMC2 and SDMMC2 Delay Clock Enable + During CSleep Mode + 9 + 1 + + + RNGLPEN + RNG peripheral clock enable during + CSleep mode + 6 + 1 + + + SRAM1LPEN + SRAM1 Clock Enable During CSleep + Mode + 29 + 1 + + + SRAM2LPEN + SRAM2 Clock Enable During CSleep + Mode + 30 + 1 + + + SRAM3LPEN + SRAM3 Clock Enable During CSleep + Mode + 31 + 1 + + + + + AHB2LPENR + AHB2LPENR + RCC AHB2 Sleep Clock Register + 0x104 + 0x20 + read-write + 0x00000000 + + + CAMITFLPEN + CAMITF peripheral clock enable during + CSleep mode + 0 + 1 + + + CRYPTLPEN + CRYPT peripheral clock enable during + CSleep mode + 4 + 1 + + + HASHLPEN + HASH peripheral clock enable during + CSleep mode + 5 + 1 + + + SDMMC2LPEN + SDMMC2 and SDMMC2 Delay Clock Enable + During CSleep Mode + 9 + 1 + + + RNGLPEN + RNG peripheral clock enable during + CSleep mode + 6 + 1 + + + SRAM1LPEN + SRAM1 Clock Enable During CSleep + Mode + 29 + 1 + + + SRAM2LPEN + SRAM2 Clock Enable During CSleep + Mode + 30 + 1 + + + SRAM3LPEN + SRAM3 Clock Enable During CSleep + Mode + 31 + 1 + + + + + AHB4LPENR + AHB4LPENR + RCC AHB4 Sleep Clock Register + 0x108 + 0x20 + read-write + 0x00000000 + + + GPIOALPEN + GPIO peripheral clock enable during + CSleep mode + 0 + 1 + + + GPIOBLPEN + GPIO peripheral clock enable during + CSleep mode + 1 + 1 + + + GPIOCLPEN + GPIO peripheral clock enable during + CSleep mode + 2 + 1 + + + GPIODLPEN + GPIO peripheral clock enable during + CSleep mode + 3 + 1 + + + GPIOELPEN + GPIO peripheral clock enable during + CSleep mode + 4 + 1 + + + GPIOFLPEN + GPIO peripheral clock enable during + CSleep mode + 5 + 1 + + + GPIOGLPEN + GPIO peripheral clock enable during + CSleep mode + 6 + 1 + + + GPIOHLPEN + GPIO peripheral clock enable during + CSleep mode + 7 + 1 + + + GPIOILPEN + GPIO peripheral clock enable during + CSleep mode + 8 + 1 + + + GPIOJLPEN + GPIO peripheral clock enable during + CSleep mode + 9 + 1 + + + GPIOKLPEN + GPIO peripheral clock enable during + CSleep mode + 10 + 1 + + + CRCLPEN + CRC peripheral clock enable during + CSleep mode + 19 + 1 + + + BDMALPEN + BDMA Clock Enable During CSleep + Mode + 21 + 1 + + + ADC3LPEN + ADC3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + BKPRAMLPEN + Backup RAM Clock Enable During CSleep + Mode + 28 + 1 + + + SRAM4LPEN + SRAM4 Clock Enable During CSleep + Mode + 29 + 1 + + + + + C1_AHB4LPENR + C1_AHB4LPENR + RCC AHB4 Sleep Clock Register + 0x168 + 0x20 + read-write + 0x00000000 + + + GPIOALPEN + GPIO peripheral clock enable during + CSleep mode + 0 + 1 + + + GPIOBLPEN + GPIO peripheral clock enable during + CSleep mode + 1 + 1 + + + GPIOCLPEN + GPIO peripheral clock enable during + CSleep mode + 2 + 1 + + + GPIODLPEN + GPIO peripheral clock enable during + CSleep mode + 3 + 1 + + + GPIOELPEN + GPIO peripheral clock enable during + CSleep mode + 4 + 1 + + + GPIOFLPEN + GPIO peripheral clock enable during + CSleep mode + 5 + 1 + + + GPIOGLPEN + GPIO peripheral clock enable during + CSleep mode + 6 + 1 + + + GPIOHLPEN + GPIO peripheral clock enable during + CSleep mode + 7 + 1 + + + GPIOILPEN + GPIO peripheral clock enable during + CSleep mode + 8 + 1 + + + GPIOJLPEN + GPIO peripheral clock enable during + CSleep mode + 9 + 1 + + + GPIOKLPEN + GPIO peripheral clock enable during + CSleep mode + 10 + 1 + + + CRCLPEN + CRC peripheral clock enable during + CSleep mode + 19 + 1 + + + BDMALPEN + BDMA Clock Enable During CSleep + Mode + 21 + 1 + + + ADC3LPEN + ADC3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + BKPRAMLPEN + Backup RAM Clock Enable During CSleep + Mode + 28 + 1 + + + SRAM4LPEN + SRAM4 Clock Enable During CSleep + Mode + 29 + 1 + + + + + C1_APB3LPENR + C1_APB3LPENR + RCC APB3 Sleep Clock Register + 0x16C + 0x20 + read-write + 0x00000000 + + + LTDCLPEN + LTDC peripheral clock enable during + CSleep mode + 3 + 1 + + + WWDG1LPEN + WWDG1 Clock Enable During CSleep + Mode + 6 + 1 + + + + + APB3LPENR + APB3LPENR + RCC APB3 Sleep Clock Register + 0x10C + 0x20 + read-write + 0x00000000 + + + LTDCLPEN + LTDC peripheral clock enable during + CSleep mode + 3 + 1 + + + WWDG1LPEN + WWDG1 Clock Enable During CSleep + Mode + 6 + 1 + + + + + APB1LLPENR + APB1LLPENR + RCC APB1 Low Sleep Clock + Register + 0x110 + 0x20 + read-write + 0x00000000 + + + TIM2LPEN + TIM2 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM3LPEN + TIM3 peripheral clock enable during + CSleep mode + 1 + 1 + + + TIM4LPEN + TIM4 peripheral clock enable during + CSleep mode + 2 + 1 + + + TIM5LPEN + TIM5 peripheral clock enable during + CSleep mode + 3 + 1 + + + TIM6LPEN + TIM6 peripheral clock enable during + CSleep mode + 4 + 1 + + + TIM7LPEN + TIM7 peripheral clock enable during + CSleep mode + 5 + 1 + + + TIM12LPEN + TIM12 peripheral clock enable during + CSleep mode + 6 + 1 + + + TIM13LPEN + TIM13 peripheral clock enable during + CSleep mode + 7 + 1 + + + TIM14LPEN + TIM14 peripheral clock enable during + CSleep mode + 8 + 1 + + + LPTIM1LPEN + LPTIM1 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + SPI2LPEN + SPI2 Peripheral Clocks Enable During + CSleep Mode + 14 + 1 + + + SPI3LPEN + SPI3 Peripheral Clocks Enable During + CSleep Mode + 15 + 1 + + + SPDIFRXLPEN + SPDIFRX Peripheral Clocks Enable During + CSleep Mode + 16 + 1 + + + USART2LPEN + USART2 Peripheral Clocks Enable During + CSleep Mode + 17 + 1 + + + USART3LPEN + USART3 Peripheral Clocks Enable During + CSleep Mode + 18 + 1 + + + UART4LPEN + UART4 Peripheral Clocks Enable During + CSleep Mode + 19 + 1 + + + UART5LPEN + UART5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + I2C1LPEN + I2C1 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + I2C2LPEN + I2C2 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + I2C3LPEN + I2C3 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + HDMICECLPEN + HDMI-CEC Peripheral Clocks Enable During + CSleep Mode + 27 + 1 + + + DAC12LPEN + DAC1/2 peripheral clock enable during + CSleep mode + 29 + 1 + + + USART7LPEN + USART7 Peripheral Clocks Enable During + CSleep Mode + 30 + 1 + + + USART8LPEN + USART8 Peripheral Clocks Enable During + CSleep Mode + 31 + 1 + + + + + C1_APB1LLPENR + C1_APB1LLPENR + RCC APB1 Low Sleep Clock + Register + 0x170 + 0x20 + read-write + 0x00000000 + + + TIM2LPEN + TIM2 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM3LPEN + TIM3 peripheral clock enable during + CSleep mode + 1 + 1 + + + TIM4LPEN + TIM4 peripheral clock enable during + CSleep mode + 2 + 1 + + + TIM5LPEN + TIM5 peripheral clock enable during + CSleep mode + 3 + 1 + + + TIM6LPEN + TIM6 peripheral clock enable during + CSleep mode + 4 + 1 + + + TIM7LPEN + TIM7 peripheral clock enable during + CSleep mode + 5 + 1 + + + TIM12LPEN + TIM12 peripheral clock enable during + CSleep mode + 6 + 1 + + + TIM13LPEN + TIM13 peripheral clock enable during + CSleep mode + 7 + 1 + + + TIM14LPEN + TIM14 peripheral clock enable during + CSleep mode + 8 + 1 + + + LPTIM1LPEN + LPTIM1 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + SPI2LPEN + SPI2 Peripheral Clocks Enable During + CSleep Mode + 14 + 1 + + + SPI3LPEN + SPI3 Peripheral Clocks Enable During + CSleep Mode + 15 + 1 + + + SPDIFRXLPEN + SPDIFRX Peripheral Clocks Enable During + CSleep Mode + 16 + 1 + + + USART2LPEN + USART2 Peripheral Clocks Enable During + CSleep Mode + 17 + 1 + + + USART3LPEN + USART3 Peripheral Clocks Enable During + CSleep Mode + 18 + 1 + + + UART4LPEN + UART4 Peripheral Clocks Enable During + CSleep Mode + 19 + 1 + + + UART5LPEN + UART5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + I2C1LPEN + I2C1 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + I2C2LPEN + I2C2 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + I2C3LPEN + I2C3 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + HDMICECLPEN + HDMI-CEC Peripheral Clocks Enable During + CSleep Mode + 27 + 1 + + + DAC12LPEN + DAC1/2 peripheral clock enable during + CSleep mode + 29 + 1 + + + USART7LPEN + USART7 Peripheral Clocks Enable During + CSleep Mode + 30 + 1 + + + USART8LPEN + USART8 Peripheral Clocks Enable During + CSleep Mode + 31 + 1 + + + + + C1_APB1HLPENR + C1_APB1HLPENR + RCC APB1 High Sleep Clock + Register + 0x174 + 0x20 + read-write + 0x00000000 + + + CRSLPEN + Clock Recovery System peripheral clock + enable during CSleep mode + 1 + 1 + + + SWPLPEN + SWPMI Peripheral Clocks Enable During + CSleep Mode + 2 + 1 + + + OPAMPLPEN + OPAMP peripheral clock enable during + CSleep mode + 4 + 1 + + + MDIOSLPEN + MDIOS peripheral clock enable during + CSleep mode + 5 + 1 + + + FDCANLPEN + FDCAN Peripheral Clocks Enable During + CSleep Mode + 8 + 1 + + + + + APB1HLPENR + APB1HLPENR + RCC APB1 High Sleep Clock + Register + 0x114 + 0x20 + read-write + 0x00000000 + + + CRSLPEN + Clock Recovery System peripheral clock + enable during CSleep mode + 1 + 1 + + + SWPLPEN + SWPMI Peripheral Clocks Enable During + CSleep Mode + 2 + 1 + + + OPAMPLPEN + OPAMP peripheral clock enable during + CSleep mode + 4 + 1 + + + MDIOSLPEN + MDIOS peripheral clock enable during + CSleep mode + 5 + 1 + + + FDCANLPEN + FDCAN Peripheral Clocks Enable During + CSleep Mode + 8 + 1 + + + + + APB2LPENR + APB2LPENR + RCC APB2 Sleep Clock Register + 0x118 + 0x20 + read-write + 0x00000000 + + + TIM1LPEN + TIM1 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM8LPEN + TIM8 peripheral clock enable during + CSleep mode + 1 + 1 + + + USART1LPEN + USART1 Peripheral Clocks Enable During + CSleep Mode + 4 + 1 + + + USART6LPEN + USART6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + SPI1LPEN + SPI1 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + SPI4LPEN + SPI4 Peripheral Clocks Enable During + CSleep Mode + 13 + 1 + + + TIM15LPEN + TIM15 peripheral clock enable during + CSleep mode + 16 + 1 + + + TIM16LPEN + TIM16 peripheral clock enable during + CSleep mode + 17 + 1 + + + TIM17LPEN + TIM17 peripheral clock enable during + CSleep mode + 18 + 1 + + + SPI5LPEN + SPI5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + SAI1LPEN + SAI1 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + SAI2LPEN + SAI2 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + SAI3LPEN + SAI3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + DFSDM1LPEN + DFSDM1 Peripheral Clocks Enable During + CSleep Mode + 28 + 1 + + + HRTIMLPEN + HRTIM peripheral clock enable during + CSleep mode + 29 + 1 + + + + + C1_APB2LPENR + C1_APB2LPENR + RCC APB2 Sleep Clock Register + 0x178 + 0x20 + read-write + 0x00000000 + + + TIM1LPEN + TIM1 peripheral clock enable during + CSleep mode + 0 + 1 + + + TIM8LPEN + TIM8 peripheral clock enable during + CSleep mode + 1 + 1 + + + USART1LPEN + USART1 Peripheral Clocks Enable During + CSleep Mode + 4 + 1 + + + USART6LPEN + USART6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + SPI1LPEN + SPI1 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + SPI4LPEN + SPI4 Peripheral Clocks Enable During + CSleep Mode + 13 + 1 + + + TIM15LPEN + TIM15 peripheral clock enable during + CSleep mode + 16 + 1 + + + TIM16LPEN + TIM16 peripheral clock enable during + CSleep mode + 17 + 1 + + + TIM17LPEN + TIM17 peripheral clock enable during + CSleep mode + 18 + 1 + + + SPI5LPEN + SPI5 Peripheral Clocks Enable During + CSleep Mode + 20 + 1 + + + SAI1LPEN + SAI1 Peripheral Clocks Enable During + CSleep Mode + 22 + 1 + + + SAI2LPEN + SAI2 Peripheral Clocks Enable During + CSleep Mode + 23 + 1 + + + SAI3LPEN + SAI3 Peripheral Clocks Enable During + CSleep Mode + 24 + 1 + + + DFSDM1LPEN + DFSDM1 Peripheral Clocks Enable During + CSleep Mode + 28 + 1 + + + HRTIMLPEN + HRTIM peripheral clock enable during + CSleep mode + 29 + 1 + + + + + C1_APB4LPENR + C1_APB4LPENR + RCC APB4 Sleep Clock Register + 0x17C + 0x20 + read-write + 0x00000000 + + + SYSCFGLPEN + SYSCFG peripheral clock enable during + CSleep mode + 1 + 1 + + + LPUART1LPEN + LPUART1 Peripheral Clocks Enable During + CSleep Mode + 3 + 1 + + + SPI6LPEN + SPI6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + I2C4LPEN + I2C4 Peripheral Clocks Enable During + CSleep Mode + 7 + 1 + + + LPTIM2LPEN + LPTIM2 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + LPTIM3LPEN + LPTIM3 Peripheral Clocks Enable During + CSleep Mode + 10 + 1 + + + LPTIM4LPEN + LPTIM4 Peripheral Clocks Enable During + CSleep Mode + 11 + 1 + + + LPTIM5LPEN + LPTIM5 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + COMP12LPEN + COMP1/2 peripheral clock enable during + CSleep mode + 14 + 1 + + + VREFLPEN + VREF peripheral clock enable during + CSleep mode + 15 + 1 + + + RTCAPBLPEN + RTC APB Clock Enable During CSleep + Mode + 16 + 1 + + + SAI4LPEN + SAI4 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + + + APB4LPENR + APB4LPENR + RCC APB4 Sleep Clock Register + 0x11C + 0x20 + read-write + 0x00000000 + + + SYSCFGLPEN + SYSCFG peripheral clock enable during + CSleep mode + 1 + 1 + + + LPUART1LPEN + LPUART1 Peripheral Clocks Enable During + CSleep Mode + 3 + 1 + + + SPI6LPEN + SPI6 Peripheral Clocks Enable During + CSleep Mode + 5 + 1 + + + I2C4LPEN + I2C4 Peripheral Clocks Enable During + CSleep Mode + 7 + 1 + + + LPTIM2LPEN + LPTIM2 Peripheral Clocks Enable During + CSleep Mode + 9 + 1 + + + LPTIM3LPEN + LPTIM3 Peripheral Clocks Enable During + CSleep Mode + 10 + 1 + + + LPTIM4LPEN + LPTIM4 Peripheral Clocks Enable During + CSleep Mode + 11 + 1 + + + LPTIM5LPEN + LPTIM5 Peripheral Clocks Enable During + CSleep Mode + 12 + 1 + + + COMP12LPEN + COMP1/2 peripheral clock enable during + CSleep mode + 14 + 1 + + + VREFLPEN + VREF peripheral clock enable during + CSleep mode + 15 + 1 + + + RTCAPBLPEN + RTC APB Clock Enable During CSleep + Mode + 16 + 1 + + + SAI4LPEN + SAI4 Peripheral Clocks Enable During + CSleep Mode + 21 + 1 + + + + + + + LPTIM1 + Low power timer + LPTIM + 0x40002400 + + 0x0 + 0x400 + registers + + + LPTIM1 + LPTIM1 global interrupt + 93 + + + + ISR + ISR + Interrupt and Status Register + 0x0 + 0x20 + read-only + 0x00000000 + + + DOWN + Counter direction change up to + down + 6 + 1 + + + UP + Counter direction change down to + up + 5 + 1 + + + ARROK + Autoreload register update + OK + 4 + 1 + + + CMPOK + Compare register update OK + 3 + 1 + + + EXTTRIG + External trigger edge + event + 2 + 1 + + + ARRM + Autoreload match + 1 + 1 + + + CMPM + Compare match + 0 + 1 + + + + + ICR + ICR + Interrupt Clear Register + 0x4 + 0x20 + write-only + 0x00000000 + + + DOWNCF + Direction change to down Clear + Flag + 6 + 1 + + + UPCF + Direction change to UP Clear + Flag + 5 + 1 + + + ARROKCF + Autoreload register update OK Clear + Flag + 4 + 1 + + + CMPOKCF + Compare register update OK Clear + Flag + 3 + 1 + + + EXTTRIGCF + External trigger valid edge Clear + Flag + 2 + 1 + + + ARRMCF + Autoreload match Clear + Flag + 1 + 1 + + + CMPMCF + compare match Clear Flag + 0 + 1 + + + + + IER + IER + Interrupt Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + DOWNIE + Direction change to down Interrupt + Enable + 6 + 1 + + + UPIE + Direction change to UP Interrupt + Enable + 5 + 1 + + + ARROKIE + Autoreload register update OK Interrupt + Enable + 4 + 1 + + + CMPOKIE + Compare register update OK Interrupt + Enable + 3 + 1 + + + EXTTRIGIE + External trigger valid edge Interrupt + Enable + 2 + 1 + + + ARRMIE + Autoreload match Interrupt + Enable + 1 + 1 + + + CMPMIE + Compare match Interrupt + Enable + 0 + 1 + + + + + CFGR + CFGR + Configuration Register + 0xC + 0x20 + read-write + 0x00000000 + + + ENC + Encoder mode enable + 24 + 1 + + + COUNTMODE + counter mode enabled + 23 + 1 + + + PRELOAD + Registers update mode + 22 + 1 + + + WAVPOL + Waveform shape polarity + 21 + 1 + + + WAVE + Waveform shape + 20 + 1 + + + TIMOUT + Timeout enable + 19 + 1 + + + TRIGEN + Trigger enable and + polarity + 17 + 2 + + + TRIGSEL + Trigger selector + 13 + 3 + + + PRESC + Clock prescaler + 9 + 3 + + + TRGFLT + Configurable digital filter for + trigger + 6 + 2 + + + CKFLT + Configurable digital filter for external + clock + 3 + 2 + + + CKPOL + Clock Polarity + 1 + 2 + + + CKSEL + Clock selector + 0 + 1 + + + + + CR + CR + Control Register + 0x10 + 0x20 + read-write + 0x00000000 + + + ENABLE + LPTIM Enable + 0 + 1 + + + SNGSTRT + LPTIM start in single mode + 1 + 1 + + + CNTSTRT + Timer start in continuous + mode + 2 + 1 + + + COUNTRST + Counter reset + 3 + 1 + + + RSTARE + Reset after read enable + 4 + 1 + + + + + CMP + CMP + Compare Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CMP + Compare value + 0 + 16 + + + + + ARR + ARR + Autoreload Register + 0x18 + 0x20 + read-write + 0x00000001 + + + ARR + Auto reload value + 0 + 16 + + + + + CNT + CNT + Counter Register + 0x1C + 0x20 + read-only + 0x00000000 + + + CNT + Counter value + 0 + 16 + + + + + CFGR2 + CFGR2 + LPTIM configuration register 2 + 0x24 + 0x20 + read-write + 0x00000000 + + + IN1SEL + LPTIM Input 1 selection + 0 + 2 + + + IN2SEL + LPTIM Input 2 selection + 4 + 2 + + + + + + + LPTIM2 + 0x58002400 + + LPTIM2 + LPTIM2 timer interrupt + 138 + + + + LPTIM3 + Low power timer + LPTIM + 0x58002800 + + 0x0 + 0x400 + registers + + + LPTIM3 + LPTIM2 timer interrupt + 139 + + + + ISR + ISR + Interrupt and Status Register + 0x0 + 0x20 + read-only + 0x00000000 + + + DOWN + Counter direction change up to + down + 6 + 1 + + + UP + Counter direction change down to + up + 5 + 1 + + + ARROK + Autoreload register update + OK + 4 + 1 + + + CMPOK + Compare register update OK + 3 + 1 + + + EXTTRIG + External trigger edge + event + 2 + 1 + + + ARRM + Autoreload match + 1 + 1 + + + CMPM + Compare match + 0 + 1 + + + + + ICR + ICR + Interrupt Clear Register + 0x4 + 0x20 + write-only + 0x00000000 + + + DOWNCF + Direction change to down Clear + Flag + 6 + 1 + + + UPCF + Direction change to UP Clear + Flag + 5 + 1 + + + ARROKCF + Autoreload register update OK Clear + Flag + 4 + 1 + + + CMPOKCF + Compare register update OK Clear + Flag + 3 + 1 + + + EXTTRIGCF + External trigger valid edge Clear + Flag + 2 + 1 + + + ARRMCF + Autoreload match Clear + Flag + 1 + 1 + + + CMPMCF + compare match Clear Flag + 0 + 1 + + + + + IER + IER + Interrupt Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + DOWNIE + Direction change to down Interrupt + Enable + 6 + 1 + + + UPIE + Direction change to UP Interrupt + Enable + 5 + 1 + + + ARROKIE + Autoreload register update OK Interrupt + Enable + 4 + 1 + + + CMPOKIE + Compare register update OK Interrupt + Enable + 3 + 1 + + + EXTTRIGIE + External trigger valid edge Interrupt + Enable + 2 + 1 + + + ARRMIE + Autoreload match Interrupt + Enable + 1 + 1 + + + CMPMIE + Compare match Interrupt + Enable + 0 + 1 + + + + + CFGR + CFGR + Configuration Register + 0xC + 0x20 + read-write + 0x00000000 + + + ENC + Encoder mode enable + 24 + 1 + + + COUNTMODE + counter mode enabled + 23 + 1 + + + PRELOAD + Registers update mode + 22 + 1 + + + WAVPOL + Waveform shape polarity + 21 + 1 + + + WAVE + Waveform shape + 20 + 1 + + + TIMOUT + Timeout enable + 19 + 1 + + + TRIGEN + Trigger enable and + polarity + 17 + 2 + + + TRIGSEL + Trigger selector + 13 + 3 + + + PRESC + Clock prescaler + 9 + 3 + + + TRGFLT + Configurable digital filter for + trigger + 6 + 2 + + + CKFLT + Configurable digital filter for external + clock + 3 + 2 + + + CKPOL + Clock Polarity + 1 + 2 + + + CKSEL + Clock selector + 0 + 1 + + + + + CR + CR + Control Register + 0x10 + 0x20 + read-write + 0x00000000 + + + ENABLE + LPTIM Enable + 0 + 1 + + + SNGSTRT + LPTIM start in single mode + 1 + 1 + + + CNTSTRT + Timer start in continuous + mode + 2 + 1 + + + COUNTRST + Counter reset + 3 + 1 + + + RSTARE + Reset after read enable + 4 + 1 + + + + + CMP + CMP + Compare Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CMP + Compare value + 0 + 16 + + + + + ARR + ARR + Autoreload Register + 0x18 + 0x20 + read-write + 0x00000001 + + + ARR + Auto reload value + 0 + 16 + + + + + CNT + CNT + Counter Register + 0x1C + 0x20 + read-only + 0x00000000 + + + CNT + Counter value + 0 + 16 + + + + + CFGR2 + CFGR2 + LPTIM configuration register 2 + 0x24 + 0x20 + read-write + 0x00000000 + + + IN1SEL + LPTIM Input 1 selection + 0 + 2 + + + + + + + LPTIM4 + 0x58002C00 + + LPTIM4 + LPTIM2 timer interrupt + 140 + + + + LPTIM5 + 0x58003000 + + LPTIM5 + LPTIM2 timer interrupt + 141 + + + + LPUART1 + LPUART1 + LPUART + 0x58000C00 + + 0x0 + 0x400 + registers + + + LPUART + LPUART global interrupt + 142 + + + + CR1 + CR1 + Control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + RXFFIE + RXFIFO Full interrupt + enable + 31 + 1 + + + TXFEIE + TXFIFO empty interrupt + enable + 30 + 1 + + + FIFOEN + FIFO mode enable + 29 + 1 + + + M1 + Word length + 28 + 1 + + + DEAT + Driver Enable assertion + time + 21 + 5 + + + DEDT + Driver Enable deassertion + time + 16 + 5 + + + CMIE + Character match interrupt + enable + 14 + 1 + + + MME + Mute mode enable + 13 + 1 + + + M0 + Word length + 12 + 1 + + + WAKE + Receiver wakeup method + 11 + 1 + + + PCE + Parity control enable + 10 + 1 + + + PS + Parity selection + 9 + 1 + + + PEIE + PE interrupt enable + 8 + 1 + + + TXEIE + interrupt enable + 7 + 1 + + + TCIE + Transmission complete interrupt + enable + 6 + 1 + + + RXNEIE + RXNE interrupt enable + 5 + 1 + + + IDLEIE + IDLE interrupt enable + 4 + 1 + + + TE + Transmitter enable + 3 + 1 + + + RE + Receiver enable + 2 + 1 + + + UESM + USART enable in Stop mode + 1 + 1 + + + UE + USART enable + 0 + 1 + + + + + CR2 + CR2 + Control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + ADD + Address of the USART node + 24 + 8 + + + MSBFIRST + Most significant bit first + 19 + 1 + + + DATAINV + Binary data inversion + 18 + 1 + + + TXINV + TX pin active level + inversion + 17 + 1 + + + RXINV + RX pin active level + inversion + 16 + 1 + + + SWAP + Swap TX/RX pins + 15 + 1 + + + STOP + STOP bits + 12 + 2 + + + ADDM7 + 7-bit Address Detection/4-bit Address + Detection + 4 + 1 + + + + + CR3 + CR3 + Control register 3 + 0x8 + 0x20 + read-write + 0x0000 + + + TXFTCFG + TXFIFO threshold + configuration + 29 + 3 + + + RXFTIE + RXFIFO threshold interrupt + enable + 28 + 1 + + + RXFTCFG + Receive FIFO threshold + configuration + 25 + 3 + + + TXFTIE + TXFIFO threshold interrupt + enable + 23 + 1 + + + WUFIE + Wakeup from Stop mode interrupt + enable + 22 + 1 + + + WUS + Wakeup from Stop mode interrupt flag + selection + 20 + 2 + + + DEP + Driver enable polarity + selection + 15 + 1 + + + DEM + Driver enable mode + 14 + 1 + + + DDRE + DMA Disable on Reception + Error + 13 + 1 + + + OVRDIS + Overrun Disable + 12 + 1 + + + CTSIE + CTS interrupt enable + 10 + 1 + + + CTSE + CTS enable + 9 + 1 + + + RTSE + RTS enable + 8 + 1 + + + DMAT + DMA enable transmitter + 7 + 1 + + + DMAR + DMA enable receiver + 6 + 1 + + + HDSEL + Half-duplex selection + 3 + 1 + + + EIE + Error interrupt enable + 0 + 1 + + + + + BRR + BRR + Baud rate register + 0xC + 0x20 + read-write + 0x0000 + + + BRR + BRR + 0 + 20 + + + + + GTPR + GTPR + Guard time and prescaler + register + 0x10 + 0x20 + read-write + 0x0000 + + + GT + Guard time value + 8 + 8 + + + PSC + Prescaler value + 0 + 8 + + + + + RTOR + RTOR + Receiver timeout register + 0x14 + 0x20 + read-write + 0x0000 + + + BLEN + Block Length + 24 + 8 + + + RTO + Receiver timeout value + 0 + 24 + + + + + RQR + RQR + Request register + 0x18 + 0x20 + write-only + 0x0000 + + + TXFRQ + Transmit data flush + request + 4 + 1 + + + RXFRQ + Receive data flush request + 3 + 1 + + + MMRQ + Mute mode request + 2 + 1 + + + SBKRQ + Send break request + 1 + 1 + + + ABRRQ + Auto baud rate request + 0 + 1 + + + + + ISR + ISR + Interrupt & status + register + 0x1C + 0x20 + read-only + 0x00C0 + + + TXFT + TXFIFO threshold flag + 27 + 1 + + + RXFT + RXFIFO threshold flag + 26 + 1 + + + RXFF + RXFIFO Full + 24 + 1 + + + TXFE + TXFIFO Empty + 23 + 1 + + + REACK + REACK + 22 + 1 + + + TEACK + TEACK + 21 + 1 + + + WUF + WUF + 20 + 1 + + + RWU + RWU + 19 + 1 + + + SBKF + SBKF + 18 + 1 + + + CMF + CMF + 17 + 1 + + + BUSY + BUSY + 16 + 1 + + + CTS + CTS + 10 + 1 + + + CTSIF + CTSIF + 9 + 1 + + + TXE + TXE + 7 + 1 + + + TC + TC + 6 + 1 + + + RXNE + RXNE + 5 + 1 + + + IDLE + IDLE + 4 + 1 + + + ORE + ORE + 3 + 1 + + + NE + NE + 2 + 1 + + + FE + FE + 1 + 1 + + + PE + PE + 0 + 1 + + + + + ICR + ICR + Interrupt flag clear register + 0x20 + 0x20 + write-only + 0x0000 + + + WUCF + Wakeup from Stop mode clear + flag + 20 + 1 + + + CMCF + Character match clear flag + 17 + 1 + + + CTSCF + CTS clear flag + 9 + 1 + + + TCCF + Transmission complete clear + flag + 6 + 1 + + + IDLECF + Idle line detected clear + flag + 4 + 1 + + + ORECF + Overrun error clear flag + 3 + 1 + + + NCF + Noise detected clear flag + 2 + 1 + + + FECF + Framing error clear flag + 1 + 1 + + + PECF + Parity error clear flag + 0 + 1 + + + + + RDR + RDR + Receive data register + 0x24 + 0x20 + read-only + 0x0000 + + + RDR + Receive data value + 0 + 9 + + + + + TDR + TDR + Transmit data register + 0x28 + 0x20 + read-write + 0x0000 + + + TDR + Transmit data value + 0 + 9 + + + + + PRESC + PRESC + Prescaler register + 0x2C + 0x20 + read-write + 0x0000 + + + PRESCALER + Clock prescaler + 0 + 4 + + + + + + + SYSCFG + System configuration controller + SYSCFG + 0x58000400 + + 0x0 + 0x400 + registers + + + + PMCR + PMCR + peripheral mode configuration + register + 0x4 + 0x20 + read-write + 0x00000000 + + + I2C1FMP + I2C1 Fm+ + 0 + 1 + + + I2C2FMP + I2C2 Fm+ + 1 + 1 + + + I2C3FMP + I2C3 Fm+ + 2 + 1 + + + I2C4FMP + I2C4 Fm+ + 3 + 1 + + + PB6FMP + PB(6) Fm+ + 4 + 1 + + + PB7FMP + PB(7) Fast Mode Plus + 5 + 1 + + + PB8FMP + PB(8) Fast Mode Plus + 6 + 1 + + + PB9FMP + PB(9) Fm+ + 7 + 1 + + + BOOSTE + Booster Enable + 8 + 1 + + + EPIS + Ethernet PHY Interface + Selection + 21 + 3 + + + PA0SO + PA0 Switch Open + 24 + 1 + + + PA1SO + PA1 Switch Open + 25 + 1 + + + PC2SO + PC2 Switch Open + 26 + 1 + + + PC3SO + PC3 Switch Open + 27 + 1 + + + + + EXTICR1 + EXTICR1 + external interrupt configuration register + 1 + 0x8 + 0x20 + read-write + 0x0000 + + + EXTI3 + EXTI x configuration (x = 0 to + 3) + 12 + 4 + + + EXTI2 + EXTI x configuration (x = 0 to + 3) + 8 + 4 + + + EXTI1 + EXTI x configuration (x = 0 to + 3) + 4 + 4 + + + EXTI0 + EXTI x configuration (x = 0 to + 3) + 0 + 4 + + + + + EXTICR2 + EXTICR2 + external interrupt configuration register + 2 + 0xC + 0x20 + read-write + 0x0000 + + + EXTI7 + EXTI x configuration (x = 4 to + 7) + 12 + 4 + + + EXTI6 + EXTI x configuration (x = 4 to + 7) + 8 + 4 + + + EXTI5 + EXTI x configuration (x = 4 to + 7) + 4 + 4 + + + EXTI4 + EXTI x configuration (x = 4 to + 7) + 0 + 4 + + + + + EXTICR3 + EXTICR3 + external interrupt configuration register + 3 + 0x10 + 0x20 + read-write + 0x0000 + + + EXTI11 + EXTI x configuration (x = 8 to + 11) + 12 + 4 + + + EXTI10 + EXTI10 + 8 + 4 + + + EXTI9 + EXTI x configuration (x = 8 to + 11) + 4 + 4 + + + EXTI8 + EXTI x configuration (x = 8 to + 11) + 0 + 4 + + + + + EXTICR4 + EXTICR4 + external interrupt configuration register + 4 + 0x14 + 0x20 + read-write + 0x0000 + + + EXTI15 + EXTI x configuration (x = 12 to + 15) + 12 + 4 + + + EXTI14 + EXTI x configuration (x = 12 to + 15) + 8 + 4 + + + EXTI13 + EXTI x configuration (x = 12 to + 15) + 4 + 4 + + + EXTI12 + EXTI x configuration (x = 12 to + 15) + 0 + 4 + + + + + CCCSR + CCCSR + compensation cell control/status + register + 0x20 + 0x20 + read-write + 0x00000000 + + + EN + enable + 0 + 1 + + + CS + Code selection + 1 + 1 + + + READY + Compensation cell ready + flag + 8 + 1 + + + HSLV + High-speed at low-voltage + 16 + 1 + + + + + CCVR + CCVR + SYSCFG compensation cell value + register + 0x24 + 0x20 + read-only + 0x00000000 + + + NCV + NMOS compensation value + 0 + 4 + + + PCV + PMOS compensation value + 4 + 4 + + + + + CCCR + CCCR + SYSCFG compensation cell code + register + 0x28 + 0x20 + read-write + 0x00000000 + + + NCC + NMOS compensation code + 0 + 4 + + + PCC + PMOS compensation code + 4 + 4 + + + + + PKGR + PKGR + SYSCFG package register + 0x124 + 0x20 + read-only + 0x00000000 + + + PKG + Package + 0 + 4 + + + + + UR0 + UR0 + SYSCFG user register 0 + 0x300 + 0x20 + read-only + 0x00000000 + + + BKS + Bank Swap + 0 + 1 + + + RDP + Readout protection + 16 + 8 + + + + + UR2 + UR2 + SYSCFG user register 2 + 0x308 + 0x20 + read-write + 0x00000000 + + + BORH + BOR_LVL Brownout Reset Threshold + Level + 0 + 2 + + + BOOT_ADD0 + Boot Address 0 + 16 + 16 + + + + + UR3 + UR3 + SYSCFG user register 3 + 0x30C + 0x20 + read-write + 0x00000000 + + + BOOT_ADD1 + Boot Address 1 + 16 + 16 + + + + + UR4 + UR4 + SYSCFG user register 4 + 0x310 + 0x20 + read-only + 0x00000000 + + + MEPAD_1 + Mass Erase Protected Area Disabled for + bank 1 + 16 + 1 + + + + + UR5 + UR5 + SYSCFG user register 5 + 0x314 + 0x20 + read-only + 0x00000000 + + + MESAD_1 + Mass erase secured area disabled for + bank 1 + 0 + 1 + + + WRPN_1 + Write protection for flash bank + 1 + 16 + 8 + + + + + UR6 + UR6 + SYSCFG user register 6 + 0x318 + 0x20 + read-only + 0x00000000 + + + PA_BEG_1 + Protected area start address for bank + 1 + 0 + 12 + + + PA_END_1 + Protected area end address for bank + 1 + 16 + 12 + + + + + UR7 + UR7 + SYSCFG user register 7 + 0x31C + 0x20 + read-only + 0x00000000 + + + SA_BEG_1 + Secured area start address for bank + 1 + 0 + 12 + + + SA_END_1 + Secured area end address for bank + 1 + 16 + 12 + + + + + UR8 + UR8 + SYSCFG user register 8 + 0x320 + 0x20 + read-only + 0x00000000 + + + MEPAD_2 + Mass erase protected area disabled for + bank 2 + 0 + 1 + + + MESAD_2 + Mass erase secured area disabled for + bank 2 + 16 + 1 + + + + + UR9 + UR9 + SYSCFG user register 9 + 0x324 + 0x20 + read-only + 0x00000000 + + + WRPN_2 + Write protection for flash bank + 2 + 0 + 8 + + + PA_BEG_2 + Protected area start address for bank + 2 + 16 + 12 + + + + + UR10 + UR10 + SYSCFG user register 10 + 0x328 + 0x20 + read-only + 0x00000000 + + + PA_END_2 + Protected area end address for bank + 2 + 0 + 12 + + + SA_BEG_2 + Secured area start address for bank + 2 + 16 + 12 + + + + + UR11 + UR11 + SYSCFG user register 11 + 0x32C + 0x20 + read-only + 0x00000000 + + + SA_END_2 + Secured area end address for bank + 2 + 0 + 12 + + + IWDG1M + Independent Watchdog 1 + mode + 16 + 1 + + + + + UR12 + UR12 + SYSCFG user register 12 + 0x330 + 0x20 + read-only + 0x00000000 + + + SECURE + Secure mode + 16 + 1 + + + + + UR13 + UR13 + SYSCFG user register 13 + 0x334 + 0x20 + read-only + 0x00000000 + + + SDRS + Secured DTCM RAM Size + 0 + 2 + + + D1SBRST + D1 Standby reset + 16 + 1 + + + + + UR14 + UR14 + SYSCFG user register 14 + 0x338 + 0x20 + read-write + 0x00000000 + + + D1STPRST + D1 Stop Reset + 0 + 1 + + + + + UR15 + UR15 + SYSCFG user register 15 + 0x33C + 0x20 + read-only + 0x00000000 + + + FZIWDGSTB + Freeze independent watchdog in Standby + mode + 16 + 1 + + + + + UR16 + UR16 + SYSCFG user register 16 + 0x340 + 0x20 + read-only + 0x00000000 + + + FZIWDGSTP + Freeze independent watchdog in Stop + mode + 0 + 1 + + + PKP + Private key programmed + 16 + 1 + + + + + UR17 + UR17 + SYSCFG user register 17 + 0x344 + 0x20 + read-only + 0x00000000 + + + IO_HSLV + I/O high speed / low + voltage + 0 + 1 + + + + + + + EXTI + External interrupt/event + controller + EXTI + 0x58000000 + + 0x0 + 0x400 + registers + + + PVD_PVM + PVD through EXTI line + 1 + + + EXTI0 + EXTI Line 0 interrupt + 6 + + + EXTI1 + EXTI Line 1 interrupt + 7 + + + EXTI2 + EXTI Line 2 interrupt + 8 + + + EXTI3 + EXTI Line 3interrupt + 9 + + + EXTI4 + EXTI Line 4interrupt + 10 + + + EXTI9_5 + EXTI Line[9:5] interrupts + 23 + + + EXTI15_10 + EXTI Line[15:10] interrupts + 40 + + + cm4_sev_it + Arm Cortex-M4 Send even + interrupt + 65 + + + WKUP + WKUP1 to WKUP6 pins + 149 + + + HOLD_CORE + CPU1 hold + 148 + + + + RTSR1 + RTSR1 + EXTI rising trigger selection + register + 0x0 + 0x20 + read-write + 0x00000000 + + + TR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + TR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + TR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + TR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + TR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + TR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + TR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + TR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + TR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + TR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + TR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + TR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + TR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + TR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + TR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + TR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + TR16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + TR17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + TR18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + TR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + TR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + TR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + + + FTSR1 + FTSR1 + EXTI falling trigger selection + register + 0x4 + 0x20 + read-write + 0x00000000 + + + TR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + TR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + TR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + TR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + TR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + TR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + TR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + TR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + TR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + TR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + TR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + TR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + TR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + TR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + TR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + TR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + TR16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + TR17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + TR18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + TR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + TR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + TR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + + + SWIER1 + SWIER1 + EXTI software interrupt event + register + 0x8 + 0x20 + read-write + 0x00000000 + + + SWIER0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + SWIER1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + SWIER2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + SWIER3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + SWIER4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + SWIER5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + SWIER6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + SWIER7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + SWIER8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + SWIER9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + SWIER10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + SWIER11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + SWIER12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + SWIER13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + SWIER14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + SWIER15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + SWIER16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + SWIER17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + SWIER18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + SWIER19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + SWIER20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + SWIER21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + + + D3PMR1 + D3PMR1 + EXTI D3 pending mask register + 0xC + 0x20 + read-write + 0x00000000 + + + MR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + MR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + MR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + MR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + MR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + MR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + MR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + MR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + MR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + MR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + MR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + MR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + MR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + MR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + MR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + MR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + MR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + MR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + MR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + MR25 + Rising trigger event configuration bit + of Configurable Event input + 25 + 1 + + + + + D3PCR1L + D3PCR1L + EXTI D3 pending clear selection register + low + 0x10 + 0x20 + read-write + 0x00000000 + + + PCS0 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 0 + 2 + + + PCS1 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 2 + 2 + + + PCS2 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 4 + 2 + + + PCS3 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 6 + 2 + + + PCS4 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 8 + 2 + + + PCS5 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 10 + 2 + + + PCS6 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 12 + 2 + + + PCS7 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 14 + 2 + + + PCS8 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 16 + 2 + + + PCS9 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 18 + 2 + + + PCS10 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 20 + 2 + + + PCS11 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 22 + 2 + + + PCS12 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 24 + 2 + + + PCS13 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 26 + 2 + + + PCS14 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 28 + 2 + + + PCS15 + D3 Pending request clear input signal + selection on Event input x = truncate + (n/2) + 30 + 2 + + + + + D3PCR1H + D3PCR1H + EXTI D3 pending clear selection register + high + 0x14 + 0x20 + read-write + 0x00000000 + + + PCS19 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 6 + 2 + + + PCS20 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 8 + 2 + + + PCS21 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 10 + 2 + + + PCS25 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+32)/2) + 18 + 2 + + + + + RTSR2 + RTSR2 + EXTI rising trigger selection + register + 0x20 + 0x20 + read-write + 0x00000000 + + + TR49 + Rising trigger event configuration bit + of Configurable Event input x+32 + 17 + 1 + + + TR51 + Rising trigger event configuration bit + of Configurable Event input x+32 + 19 + 1 + + + + + FTSR2 + FTSR2 + EXTI falling trigger selection + register + 0x24 + 0x20 + read-write + 0x00000000 + + + TR49 + Falling trigger event configuration bit + of Configurable Event input x+32 + 17 + 1 + + + TR51 + Falling trigger event configuration bit + of Configurable Event input x+32 + 19 + 1 + + + + + SWIER2 + SWIER2 + EXTI software interrupt event + register + 0x28 + 0x20 + read-write + 0x00000000 + + + SWIER49 + Software interrupt on line + x+32 + 17 + 1 + + + SWIER51 + Software interrupt on line + x+32 + 19 + 1 + + + + + D3PMR2 + D3PMR2 + EXTI D3 pending mask register + 0x2C + 0x20 + read-write + 0x00000000 + + + MR34 + D3 Pending Mask on Event input + x+32 + 2 + 1 + + + MR35 + D3 Pending Mask on Event input + x+32 + 3 + 1 + + + MR41 + D3 Pending Mask on Event input + x+32 + 9 + 1 + + + MR48 + D3 Pending Mask on Event input + x+32 + 16 + 1 + + + MR49 + D3 Pending Mask on Event input + x+32 + 17 + 1 + + + MR50 + D3 Pending Mask on Event input + x+32 + 18 + 1 + + + MR51 + D3 Pending Mask on Event input + x+32 + 19 + 1 + + + MR52 + D3 Pending Mask on Event input + x+32 + 20 + 1 + + + MR53 + D3 Pending Mask on Event input + x+32 + 21 + 1 + + + + + D3PCR2L + D3PCR2L + EXTI D3 pending clear selection register + low + 0x30 + 0x20 + read-write + 0x00000000 + + + PCS35 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+64)/2) + 6 + 2 + + + PCS34 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+64)/2) + 4 + 2 + + + PCS41 + D3 Pending request clear input signal + selection on Event input x = truncate + ((n+64)/2) + 18 + 2 + + + + + D3PCR2H + D3PCR2H + EXTI D3 pending clear selection register + high + 0x34 + 0x20 + read-write + 0x00000000 + + + PCS48 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 0 + 2 + + + PCS49 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 2 + 2 + + + PCS50 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 4 + 2 + + + PCS51 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 6 + 2 + + + PCS52 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 8 + 2 + + + PCS53 + Pending request clear input signal + selection on Event input x= truncate + ((n+96)/2) + 10 + 2 + + + + + RTSR3 + RTSR3 + EXTI rising trigger selection + register + 0x40 + 0x20 + read-write + 0x00000000 + + + TR82 + Rising trigger event configuration bit + of Configurable Event input x+64 + 18 + 1 + + + TR84 + Rising trigger event configuration bit + of Configurable Event input x+64 + 20 + 1 + + + TR85 + Rising trigger event configuration bit + of Configurable Event input x+64 + 21 + 1 + + + TR86 + Rising trigger event configuration bit + of Configurable Event input x+64 + 22 + 1 + + + + + FTSR3 + FTSR3 + EXTI falling trigger selection + register + 0x44 + 0x20 + read-write + 0x00000000 + + + TR82 + Falling trigger event configuration bit + of Configurable Event input x+64 + 18 + 1 + + + TR84 + Falling trigger event configuration bit + of Configurable Event input x+64 + 20 + 1 + + + TR85 + Falling trigger event configuration bit + of Configurable Event input x+64 + 21 + 1 + + + TR86 + Falling trigger event configuration bit + of Configurable Event input x+64 + 22 + 1 + + + + + SWIER3 + SWIER3 + EXTI software interrupt event + register + 0x48 + 0x20 + read-write + 0x00000000 + + + SWIER82 + Software interrupt on line + x+64 + 18 + 1 + + + SWIER84 + Software interrupt on line + x+64 + 20 + 1 + + + SWIER85 + Software interrupt on line + x+64 + 21 + 1 + + + SWIER86 + Software interrupt on line + x+64 + 22 + 1 + + + + + D3PMR3 + D3PMR3 + EXTI D3 pending mask register + 0x4C + 0x20 + read-write + 0x00000000 + + + MR88 + D3 Pending Mask on Event input + x+64 + 24 + 1 + + + + + D3PCR3H + D3PCR3H + EXTI D3 pending clear selection register + high + 0x54 + 0x20 + read-write + 0x00000000 + + + PCS88 + D3 Pending request clear input signal + selection on Event input x= truncate + N+160/2 + 18 + 2 + + + + + CPUIMR1 + CPUIMR1 + EXTI interrupt mask register + 0x80 + 0x20 + read-write + 0xFFC00000 + + + MR0 + Rising trigger event configuration bit + of Configurable Event input + 0 + 1 + + + MR1 + Rising trigger event configuration bit + of Configurable Event input + 1 + 1 + + + MR2 + Rising trigger event configuration bit + of Configurable Event input + 2 + 1 + + + MR3 + Rising trigger event configuration bit + of Configurable Event input + 3 + 1 + + + MR4 + Rising trigger event configuration bit + of Configurable Event input + 4 + 1 + + + MR5 + Rising trigger event configuration bit + of Configurable Event input + 5 + 1 + + + MR6 + Rising trigger event configuration bit + of Configurable Event input + 6 + 1 + + + MR7 + Rising trigger event configuration bit + of Configurable Event input + 7 + 1 + + + MR8 + Rising trigger event configuration bit + of Configurable Event input + 8 + 1 + + + MR9 + Rising trigger event configuration bit + of Configurable Event input + 9 + 1 + + + MR10 + Rising trigger event configuration bit + of Configurable Event input + 10 + 1 + + + MR11 + Rising trigger event configuration bit + of Configurable Event input + 11 + 1 + + + MR12 + Rising trigger event configuration bit + of Configurable Event input + 12 + 1 + + + MR13 + Rising trigger event configuration bit + of Configurable Event input + 13 + 1 + + + MR14 + Rising trigger event configuration bit + of Configurable Event input + 14 + 1 + + + MR15 + Rising trigger event configuration bit + of Configurable Event input + 15 + 1 + + + MR16 + Rising trigger event configuration bit + of Configurable Event input + 16 + 1 + + + MR17 + Rising trigger event configuration bit + of Configurable Event input + 17 + 1 + + + MR18 + Rising trigger event configuration bit + of Configurable Event input + 18 + 1 + + + MR19 + Rising trigger event configuration bit + of Configurable Event input + 19 + 1 + + + MR20 + Rising trigger event configuration bit + of Configurable Event input + 20 + 1 + + + MR21 + Rising trigger event configuration bit + of Configurable Event input + 21 + 1 + + + MR22 + Rising trigger event configuration bit + of Configurable Event input + 22 + 1 + + + MR23 + Rising trigger event configuration bit + of Configurable Event input + 23 + 1 + + + MR24 + Rising trigger event configuration bit + of Configurable Event input + 24 + 1 + + + MR25 + Rising trigger event configuration bit + of Configurable Event input + 25 + 1 + + + MR26 + Rising trigger event configuration bit + of Configurable Event input + 26 + 1 + + + MR27 + Rising trigger event configuration bit + of Configurable Event input + 27 + 1 + + + MR28 + Rising trigger event configuration bit + of Configurable Event input + 28 + 1 + + + MR29 + Rising trigger event configuration bit + of Configurable Event input + 29 + 1 + + + MR30 + Rising trigger event configuration bit + of Configurable Event input + 30 + 1 + + + MR31 + Rising trigger event configuration bit + of Configurable Event input + 31 + 1 + + + + + CPUEMR1 + CPUEMR1 + EXTI event mask register + 0x84 + 0x20 + read-write + 0x00000000 + + + MR0 + CPU Event mask on Event input + x + 0 + 1 + + + MR1 + CPU Event mask on Event input + x + 1 + 1 + + + MR2 + CPU Event mask on Event input + x + 2 + 1 + + + MR3 + CPU Event mask on Event input + x + 3 + 1 + + + MR4 + CPU Event mask on Event input + x + 4 + 1 + + + MR5 + CPU Event mask on Event input + x + 5 + 1 + + + MR6 + CPU Event mask on Event input + x + 6 + 1 + + + MR7 + CPU Event mask on Event input + x + 7 + 1 + + + MR8 + CPU Event mask on Event input + x + 8 + 1 + + + MR9 + CPU Event mask on Event input + x + 9 + 1 + + + MR10 + CPU Event mask on Event input + x + 10 + 1 + + + MR11 + CPU Event mask on Event input + x + 11 + 1 + + + MR12 + CPU Event mask on Event input + x + 12 + 1 + + + MR13 + CPU Event mask on Event input + x + 13 + 1 + + + MR14 + CPU Event mask on Event input + x + 14 + 1 + + + MR15 + CPU Event mask on Event input + x + 15 + 1 + + + MR16 + CPU Event mask on Event input + x + 16 + 1 + + + MR17 + CPU Event mask on Event input + x + 17 + 1 + + + MR18 + CPU Event mask on Event input + x + 18 + 1 + + + MR19 + CPU Event mask on Event input + x + 19 + 1 + + + MR20 + CPU Event mask on Event input + x + 20 + 1 + + + MR21 + CPU Event mask on Event input + x + 21 + 1 + + + MR22 + CPU Event mask on Event input + x + 22 + 1 + + + MR23 + CPU Event mask on Event input + x + 23 + 1 + + + MR24 + CPU Event mask on Event input + x + 24 + 1 + + + MR25 + CPU Event mask on Event input + x + 25 + 1 + + + MR26 + CPU Event mask on Event input + x + 26 + 1 + + + MR27 + CPU Event mask on Event input + x + 27 + 1 + + + MR28 + CPU Event mask on Event input + x + 28 + 1 + + + MR29 + CPU Event mask on Event input + x + 29 + 1 + + + MR30 + CPU Event mask on Event input + x + 30 + 1 + + + MR31 + CPU Event mask on Event input + x + 31 + 1 + + + + + CPUPR1 + CPUPR1 + EXTI pending register + 0x88 + 0x20 + read-write + 0x00000000 + + + PR0 + CPU Event mask on Event input + x + 0 + 1 + + + PR1 + CPU Event mask on Event input + x + 1 + 1 + + + PR2 + CPU Event mask on Event input + x + 2 + 1 + + + PR3 + CPU Event mask on Event input + x + 3 + 1 + + + PR4 + CPU Event mask on Event input + x + 4 + 1 + + + PR5 + CPU Event mask on Event input + x + 5 + 1 + + + PR6 + CPU Event mask on Event input + x + 6 + 1 + + + PR7 + CPU Event mask on Event input + x + 7 + 1 + + + PR8 + CPU Event mask on Event input + x + 8 + 1 + + + PR9 + CPU Event mask on Event input + x + 9 + 1 + + + PR10 + CPU Event mask on Event input + x + 10 + 1 + + + PR11 + CPU Event mask on Event input + x + 11 + 1 + + + PR12 + CPU Event mask on Event input + x + 12 + 1 + + + PR13 + CPU Event mask on Event input + x + 13 + 1 + + + PR14 + CPU Event mask on Event input + x + 14 + 1 + + + PR15 + CPU Event mask on Event input + x + 15 + 1 + + + PR16 + CPU Event mask on Event input + x + 16 + 1 + + + PR17 + CPU Event mask on Event input + x + 17 + 1 + + + PR18 + CPU Event mask on Event input + x + 18 + 1 + + + PR19 + CPU Event mask on Event input + x + 19 + 1 + + + PR20 + CPU Event mask on Event input + x + 20 + 1 + + + PR21 + CPU Event mask on Event input + x + 21 + 1 + + + + + CPUIMR2 + CPUIMR2 + EXTI interrupt mask register + 0x90 + 0x20 + read-write + 0x00000000 + + + MR0 + CPU Interrupt Mask on Direct Event input + x+32 + 0 + 1 + + + MR1 + CPU Interrupt Mask on Direct Event input + x+32 + 1 + 1 + + + MR2 + CPU Interrupt Mask on Direct Event input + x+32 + 2 + 1 + + + MR3 + CPU Interrupt Mask on Direct Event input + x+32 + 3 + 1 + + + MR4 + CPU Interrupt Mask on Direct Event input + x+32 + 4 + 1 + + + MR5 + CPU Interrupt Mask on Direct Event input + x+32 + 5 + 1 + + + MR6 + CPU Interrupt Mask on Direct Event input + x+32 + 6 + 1 + + + MR7 + CPU Interrupt Mask on Direct Event input + x+32 + 7 + 1 + + + MR8 + CPU Interrupt Mask on Direct Event input + x+32 + 8 + 1 + + + MR9 + CPU Interrupt Mask on Direct Event input + x+32 + 9 + 1 + + + MR10 + CPU Interrupt Mask on Direct Event input + x+32 + 10 + 1 + + + MR11 + CPU Interrupt Mask on Direct Event input + x+32 + 11 + 1 + + + MR12 + CPU Interrupt Mask on Direct Event input + x+32 + 12 + 1 + + + MR14 + CPU Interrupt Mask on Direct Event input + x+32 + 14 + 1 + + + MR15 + CPU Interrupt Mask on Direct Event input + x+32 + 15 + 1 + + + MR16 + CPU Interrupt Mask on Direct Event input + x+32 + 16 + 1 + + + MR17 + CPU Interrupt Mask on Direct Event input + x+32 + 17 + 1 + + + MR18 + CPU Interrupt Mask on Direct Event input + x+32 + 18 + 1 + + + MR19 + CPU Interrupt Mask on Direct Event input + x+32 + 19 + 1 + + + MR20 + CPU Interrupt Mask on Direct Event input + x+32 + 20 + 1 + + + MR21 + CPU Interrupt Mask on Direct Event input + x+32 + 21 + 1 + + + MR22 + CPU Interrupt Mask on Direct Event input + x+32 + 22 + 1 + + + MR23 + CPU Interrupt Mask on Direct Event input + x+32 + 23 + 1 + + + MR24 + CPU Interrupt Mask on Direct Event input + x+32 + 24 + 1 + + + MR25 + CPU Interrupt Mask on Direct Event input + x+32 + 25 + 1 + + + MR26 + CPU Interrupt Mask on Direct Event input + x+32 + 26 + 1 + + + MR27 + CPU Interrupt Mask on Direct Event input + x+32 + 27 + 1 + + + MR28 + CPU Interrupt Mask on Direct Event input + x+32 + 28 + 1 + + + MR29 + CPU Interrupt Mask on Direct Event input + x+32 + 29 + 1 + + + MR30 + CPU Interrupt Mask on Direct Event input + x+32 + 30 + 1 + + + MR31 + CPU Interrupt Mask on Direct Event input + x+32 + 31 + 1 + + + + + CPUEMR2 + CPUEMR2 + EXTI event mask register + 0x94 + 0x20 + read-write + 0x00000000 + + + MR32 + CPU Interrupt Mask on Direct Event input + x+32 + 0 + 1 + + + MR33 + CPU Interrupt Mask on Direct Event input + x+32 + 1 + 1 + + + MR34 + CPU Interrupt Mask on Direct Event input + x+32 + 2 + 1 + + + MR35 + CPU Interrupt Mask on Direct Event input + x+32 + 3 + 1 + + + MR36 + CPU Interrupt Mask on Direct Event input + x+32 + 4 + 1 + + + MR37 + CPU Interrupt Mask on Direct Event input + x+32 + 5 + 1 + + + MR38 + CPU Interrupt Mask on Direct Event input + x+32 + 6 + 1 + + + MR39 + CPU Interrupt Mask on Direct Event input + x+32 + 7 + 1 + + + MR40 + CPU Interrupt Mask on Direct Event input + x+32 + 8 + 1 + + + MR41 + CPU Interrupt Mask on Direct Event input + x+32 + 9 + 1 + + + MR42 + CPU Interrupt Mask on Direct Event input + x+32 + 10 + 1 + + + MR43 + CPU Interrupt Mask on Direct Event input + x+32 + 11 + 1 + + + MR44 + CPU Interrupt Mask on Direct Event input + x+32 + 12 + 1 + + + MR46 + CPU Interrupt Mask on Direct Event input + x+32 + 14 + 1 + + + MR47 + CPU Interrupt Mask on Direct Event input + x+32 + 15 + 1 + + + MR48 + CPU Interrupt Mask on Direct Event input + x+32 + 16 + 1 + + + MR49 + CPU Interrupt Mask on Direct Event input + x+32 + 17 + 1 + + + MR50 + CPU Interrupt Mask on Direct Event input + x+32 + 18 + 1 + + + MR51 + CPU Interrupt Mask on Direct Event input + x+32 + 19 + 1 + + + MR52 + CPU Interrupt Mask on Direct Event input + x+32 + 20 + 1 + + + MR53 + CPU Interrupt Mask on Direct Event input + x+32 + 21 + 1 + + + MR54 + CPU Interrupt Mask on Direct Event input + x+32 + 22 + 1 + + + MR55 + CPU Interrupt Mask on Direct Event input + x+32 + 23 + 1 + + + MR56 + CPU Interrupt Mask on Direct Event input + x+32 + 24 + 1 + + + MR57 + CPU Interrupt Mask on Direct Event input + x+32 + 25 + 1 + + + MR58 + CPU Interrupt Mask on Direct Event input + x+32 + 26 + 1 + + + MR59 + CPU Interrupt Mask on Direct Event input + x+32 + 27 + 1 + + + MR60 + CPU Interrupt Mask on Direct Event input + x+32 + 28 + 1 + + + MR61 + CPU Interrupt Mask on Direct Event input + x+32 + 29 + 1 + + + MR62 + CPU Interrupt Mask on Direct Event input + x+32 + 30 + 1 + + + MR63 + CPU Interrupt Mask on Direct Event input + x+32 + 31 + 1 + + + + + CPUPR2 + CPUPR2 + EXTI pending register + 0x98 + 0x20 + read-only + 0x00000000 + + + PR49 + Configurable event inputs x+32 Pending + bit + 17 + 1 + + + PR51 + Configurable event inputs x+32 Pending + bit + 19 + 1 + + + + + CPUIMR3 + CPUIMR3 + EXTI interrupt mask register + 0xA0 + 0x20 + read-only + 0x00000000 + + + MR64 + CPU Interrupt Mask on Direct Event input + x+64 + 0 + 1 + + + MR65 + CPU Interrupt Mask on Direct Event input + x+64 + 1 + 1 + + + MR66 + CPU Interrupt Mask on Direct Event input + x+64 + 2 + 1 + + + MR67 + CPU Interrupt Mask on Direct Event input + x+64 + 3 + 1 + + + MR68 + CPU Interrupt Mask on Direct Event input + x+64 + 4 + 1 + + + MR69 + CPU Interrupt Mask on Direct Event input + x+64 + 5 + 1 + + + MR70 + CPU Interrupt Mask on Direct Event input + x+64 + 6 + 1 + + + MR71 + CPU Interrupt Mask on Direct Event input + x+64 + 7 + 1 + + + MR72 + CPU Interrupt Mask on Direct Event input + x+64 + 8 + 1 + + + MR73 + CPU Interrupt Mask on Direct Event input + x+64 + 9 + 1 + + + MR74 + CPU Interrupt Mask on Direct Event input + x+64 + 10 + 1 + + + MR75 + CPU Interrupt Mask on Direct Event input + x+64 + 11 + 1 + + + MR76 + CPU Interrupt Mask on Direct Event input + x+64 + 12 + 1 + + + MR77 + CPU Interrupt Mask on Direct Event input + x+64 + 13 + 1 + + + MR78 + CPU Interrupt Mask on Direct Event input + x+64 + 14 + 1 + + + MR79 + CPU Interrupt Mask on Direct Event input + x+64 + 15 + 1 + + + MR80 + CPU Interrupt Mask on Direct Event input + x+64 + 16 + 1 + + + MR82 + CPU Interrupt Mask on Direct Event input + x+64 + 18 + 1 + + + MR84 + CPU Interrupt Mask on Direct Event input + x+64 + 20 + 1 + + + MR85 + CPU Interrupt Mask on Direct Event input + x+64 + 21 + 1 + + + MR86 + CPU Interrupt Mask on Direct Event input + x+64 + 22 + 1 + + + MR87 + CPU Interrupt Mask on Direct Event input + x+64 + 23 + 1 + + + MR88 + CPU Interrupt Mask on Direct Event input + x+64 + 24 + 1 + + + + + CPUEMR3 + CPUEMR3 + EXTI event mask register + 0xA4 + 0x20 + read-only + 0x00000000 + + + MR64 + CPU Event mask on Event input + x+64 + 0 + 1 + + + MR65 + CPU Event mask on Event input + x+64 + 1 + 1 + + + MR66 + CPU Event mask on Event input + x+64 + 2 + 1 + + + MR67 + CPU Event mask on Event input + x+64 + 3 + 1 + + + MR68 + CPU Event mask on Event input + x+64 + 4 + 1 + + + MR69 + CPU Event mask on Event input + x+64 + 5 + 1 + + + MR70 + CPU Event mask on Event input + x+64 + 6 + 1 + + + MR71 + CPU Event mask on Event input + x+64 + 7 + 1 + + + MR72 + CPU Event mask on Event input + x+64 + 8 + 1 + + + MR73 + CPU Event mask on Event input + x+64 + 9 + 1 + + + MR74 + CPU Event mask on Event input + x+64 + 10 + 1 + + + MR75 + CPU Event mask on Event input + x+64 + 11 + 1 + + + MR76 + CPU Event mask on Event input + x+64 + 12 + 1 + + + MR77 + CPU Event mask on Event input + x+64 + 13 + 1 + + + MR78 + CPU Event mask on Event input + x+64 + 14 + 1 + + + MR79 + CPU Event mask on Event input + x+64 + 15 + 1 + + + MR80 + CPU Event mask on Event input + x+64 + 16 + 1 + + + MR82 + CPU Event mask on Event input + x+64 + 18 + 1 + + + MR84 + CPU Event mask on Event input + x+64 + 20 + 1 + + + MR85 + CPU Event mask on Event input + x+64 + 21 + 1 + + + MR86 + CPU Event mask on Event input + x+64 + 22 + 1 + + + MR87 + CPU Event mask on Event input + x+64 + 23 + 1 + + + MR88 + CPU Event mask on Event input + x+64 + 24 + 1 + + + + + CPUPR3 + CPUPR3 + EXTI pending register + 0xA8 + 0x20 + read-only + 0x00000000 + + + PR82 + Configurable event inputs x+64 Pending + bit + 18 + 1 + + + PR84 + Configurable event inputs x+64 Pending + bit + 20 + 1 + + + PR85 + Configurable event inputs x+64 Pending + bit + 21 + 1 + + + PR86 + Configurable event inputs x+64 Pending + bit + 22 + 1 + + + + + + + DELAY_Block_SDMMC1 + DELAY_Block_SDMMC1 + DLYB + 0x52008000 + + 0x0 + 0x100 + registers + + + + CR + CR + DLYB control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DEN + Delay block enable bit + 0 + 1 + + + SEN + Sampler length enable bit + 1 + 1 + + + + + CFGR + CFGR + DLYB configuration register + 0x4 + 0x20 + read-write + 0x00000000 + + + SEL + Select the phase for the Output + clock + 0 + 4 + + + UNIT + Delay Defines the delay of a Unit delay + cell + 8 + 7 + + + LNG + Delay line length value + 16 + 12 + + + LNGF + Length valid flag + 31 + 1 + + + + + + + DELAY_Block_QUADSPI + 0x52006000 + + + DELAY_Block_SDMMC2 + 0x48022800 + + + Flash + Flash + Flash + 0x52002000 + + 0x0 + 0x1000 + registers + + + FLASH + Flash memory + 4 + + + + ACR + ACR + Access control register + 0x0 + 0x20 + read-write + 0x00000600 + + + LATENCY + Read latency + 0 + 3 + + + WRHIGHFREQ + Flash signal delay + 4 + 2 + + + + + ACR_ + ACR_ + Access control register + 0x100 + 0x20 + read-write + 0x00000000 + + + LATENCY + Read latency + 0 + 3 + + + WRHIGHFREQ + Flash signal delay + 4 + 2 + + + + + KEYR1 + KEYR1 + FLASH key register for bank 1 + 0x4 + 0x20 + read-write + 0x00000000 + + + KEYR1 + Bank 1 access configuration unlock + key + 0 + 32 + + + + + OPTKEYR + OPTKEYR + FLASH option key register + 0x8 + 0x20 + read-write + 0x00000000 + + + OPTKEYR + Unlock key option bytes + 0 + 32 + + + + + OPTKEYR_ + OPTKEYR_ + FLASH option key register + 0x108 + 0x20 + read-write + 0x00000000 + + + OPTKEYR + Unlock key option bytes + 0 + 32 + + + + + CR1 + CR1 + FLASH control register for bank + 1 + 0xC + 0x20 + read-write + 0x00000000 + + + LOCK1 + Bank 1 configuration lock + bit + 0 + 1 + + + PG1 + Bank 1 program enable bit + 1 + 1 + + + SER1 + Bank 1 sector erase + request + 2 + 1 + + + BER1 + Bank 1 erase request + 3 + 1 + + + PSIZE1 + Bank 1 program size + 4 + 2 + + + FW1 + Bank 1 write forcing control + bit + 6 + 1 + + + START1 + Bank 1 bank or sector erase start + control bit + 7 + 1 + + + SNB1 + Bank 1 sector erase selection + number + 8 + 3 + + + CRC_EN + Bank 1 CRC control bit + 15 + 1 + + + EOPIE1 + Bank 1 end-of-program interrupt control + bit + 16 + 1 + + + WRPERRIE1 + Bank 1 write protection error interrupt + enable bit + 17 + 1 + + + PGSERRIE1 + Bank 1 programming sequence error + interrupt enable bit + 18 + 1 + + + STRBERRIE1 + Bank 1 strobe error interrupt enable + bit + 19 + 1 + + + INCERRIE1 + Bank 1 inconsistency error interrupt + enable bit + 21 + 1 + + + OPERRIE1 + Bank 1 write/erase error interrupt + enable bit + 22 + 1 + + + RDPERRIE1 + Bank 1 read protection error interrupt + enable bit + 23 + 1 + + + RDSERRIE1 + Bank 1 secure error interrupt enable + bit + 24 + 1 + + + SNECCERRIE1 + Bank 1 ECC single correction error + interrupt enable bit + 25 + 1 + + + DBECCERRIE1 + Bank 1 ECC double detection error + interrupt enable bit + 26 + 1 + + + CRCENDIE1 + Bank 1 end of CRC calculation interrupt + enable bit + 27 + 1 + + + + + SR1 + SR1 + FLASH status register for bank + 1 + 0x10 + 0x20 + read-write + 0x00000000 + + + BSY1 + Bank 1 ongoing program + flag + 0 + 1 + + + WBNE1 + Bank 1 write buffer not empty + flag + 1 + 1 + + + QW1 + Bank 1 wait queue flag + 2 + 1 + + + CRC_BUSY1 + Bank 1 CRC busy flag + 3 + 1 + + + EOP1 + Bank 1 end-of-program flag + 16 + 1 + + + WRPERR1 + Bank 1 write protection error + flag + 17 + 1 + + + PGSERR1 + Bank 1 programming sequence error + flag + 18 + 1 + + + STRBERR1 + Bank 1 strobe error flag + 19 + 1 + + + INCERR1 + Bank 1 inconsistency error + flag + 21 + 1 + + + OPERR1 + Bank 1 write/erase error + flag + 22 + 1 + + + RDPERR1 + Bank 1 read protection error + flag + 23 + 1 + + + RDSERR1 + Bank 1 secure error flag + 24 + 1 + + + SNECCERR11 + Bank 1 single correction error + flag + 25 + 1 + + + DBECCERR1 + Bank 1 ECC double detection error + flag + 26 + 1 + + + CRCEND1 + Bank 1 CRC-complete flag + 27 + 1 + + + + + CCR1 + CCR1 + FLASH clear control register for bank + 1 + 0x14 + 0x20 + read-write + 0x00000000 + + + CLR_EOP1 + Bank 1 EOP1 flag clear bit + 16 + 1 + + + CLR_WRPERR1 + Bank 1 WRPERR1 flag clear + bit + 17 + 1 + + + CLR_PGSERR1 + Bank 1 PGSERR1 flag clear + bi + 18 + 1 + + + CLR_STRBERR1 + Bank 1 STRBERR1 flag clear + bit + 19 + 1 + + + CLR_INCERR1 + Bank 1 INCERR1 flag clear + bit + 21 + 1 + + + CLR_OPERR1 + Bank 1 OPERR1 flag clear + bit + 22 + 1 + + + CLR_RDPERR1 + Bank 1 RDPERR1 flag clear + bit + 23 + 1 + + + CLR_RDSERR1 + Bank 1 RDSERR1 flag clear + bit + 24 + 1 + + + CLR_SNECCERR1 + Bank 1 SNECCERR1 flag clear + bit + 25 + 1 + + + CLR_DBECCERR1 + Bank 1 DBECCERR1 flag clear + bit + 26 + 1 + + + CLR_CRCEND1 + Bank 1 CRCEND1 flag clear + bit + 27 + 1 + + + + + OPTCR + OPTCR + FLASH option control register + 0x18 + 0x20 + read-write + 0x00000000 + + + OPTLOCK + FLASH_OPTCR lock option configuration + bit + 0 + 1 + + + OPTSTART + Option byte start change option + configuration bit + 1 + 1 + + + MER + Flash mass erase enable + bit + 4 + 1 + + + OPTCHANGEERRIE + Option byte change error interrupt + enable bit + 30 + 1 + + + SWAP_BANK + Bank swapping configuration + bit + 31 + 1 + + + + + OPTCR_ + OPTCR_ + FLASH option control register + 0x118 + 0x20 + read-write + 0x00000000 + + + OPTLOCK + FLASH_OPTCR lock option configuration + bit + 0 + 1 + + + OPTSTART + Option byte start change option + configuration bit + 1 + 1 + + + MER + Flash mass erase enable + bit + 4 + 1 + + + OPTCHANGEERRIE + Option byte change error interrupt + enable bit + 30 + 1 + + + SWAP_BANK + Bank swapping configuration + bit + 31 + 1 + + + + + OPTSR_CUR_ + OPTSR_CUR_ + FLASH option status register + 0x11C + 0x20 + read-write + 0x00000000 + + + OPT_BUSY + Option byte change ongoing + flag + 0 + 1 + + + BOR_LEV + Brownout level option status + bit + 2 + 2 + + + IWDG1_HW + IWDG1 control option status + bit + 4 + 1 + + + nRST_STOP_D1 + D1 DStop entry reset option status + bit + 6 + 1 + + + nRST_STBY_D1 + D1 DStandby entry reset option status + bit + 7 + 1 + + + RDP + Readout protection level option status + byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option status + bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option status + bit + 18 + 1 + + + ST_RAM_SIZE + DTCM RAM size option + status + 19 + 2 + + + SECURITY + Security enable option status + bit + 21 + 1 + + + RSS1 + User option bit 1 + 26 + 1 + + + PERSO_OK + Device personalization status + bit + 28 + 1 + + + IO_HSLV + I/O high-speed at low-voltage status bit + (PRODUCT_BELOW_25V) + 29 + 1 + + + OPTCHANGEERR + Option byte change error + flag + 30 + 1 + + + SWAP_BANK_OPT + Bank swapping option status + bit + 31 + 1 + + + + + OPTSR_CUR + OPTSR_CUR + FLASH option status register + 0x1C + 0x20 + read-write + 0x00000000 + + + OPT_BUSY + Option byte change ongoing + flag + 0 + 1 + + + BOR_LEV + Brownout level option status + bit + 2 + 2 + + + IWDG1_HW + IWDG1 control option status + bit + 4 + 1 + + + nRST_STOP_D1 + D1 DStop entry reset option status + bit + 6 + 1 + + + nRST_STBY_D1 + D1 DStandby entry reset option status + bit + 7 + 1 + + + RDP + Readout protection level option status + byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option status + bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option status + bit + 18 + 1 + + + ST_RAM_SIZE + DTCM RAM size option + status + 19 + 2 + + + SECURITY + Security enable option status + bit + 21 + 1 + + + RSS1 + User option bit 1 + 26 + 1 + + + PERSO_OK + Device personalization status + bit + 28 + 1 + + + IO_HSLV + I/O high-speed at low-voltage status bit + (PRODUCT_BELOW_25V) + 29 + 1 + + + OPTCHANGEERR + Option byte change error + flag + 30 + 1 + + + SWAP_BANK_OPT + Bank swapping option status + bit + 31 + 1 + + + + + OPTSR_PRG + OPTSR_PRG + FLASH option status register + 0x20 + 0x20 + read-write + 0x00000000 + + + BOR_LEV + BOR reset level option configuration + bits + 2 + 2 + + + IWDG1_HW + IWDG1 option configuration + bit + 4 + 1 + + + nRST_STOP_D1 + Option byte erase after D1 DStop option + configuration bit + 6 + 1 + + + nRST_STBY_D1 + Option byte erase after D1 DStandby + option configuration bit + 7 + 1 + + + RDP + Readout protection level option + configuration byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option + configuration bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option + configuration bit + 18 + 1 + + + ST_RAM_SIZE + DTCM size select option configuration + bits + 19 + 2 + + + SECURITY + Security option configuration + bit + 21 + 1 + + + RSS1 + User option configuration bit + 1 + 26 + 1 + + + RSS2 + User option configuration bit + 2 + 27 + 1 + + + IO_HSLV + I/O high-speed at low-voltage + (PRODUCT_BELOW_25V) + 29 + 1 + + + SWAP_BANK_OPT + Bank swapping option configuration + bit + 31 + 1 + + + + + OPTSR_PRG_ + OPTSR_PRG_ + FLASH option status register + 0x120 + 0x20 + read-write + 0x00000000 + + + BOR_LEV + BOR reset level option configuration + bits + 2 + 2 + + + IWDG1_HW + IWDG1 option configuration + bit + 4 + 1 + + + nRST_STOP_D1 + Option byte erase after D1 DStop option + configuration bit + 6 + 1 + + + nRST_STBY_D1 + Option byte erase after D1 DStandby + option configuration bit + 7 + 1 + + + RDP + Readout protection level option + configuration byte + 8 + 8 + + + FZ_IWDG_STOP + IWDG Stop mode freeze option + configuration bit + 17 + 1 + + + FZ_IWDG_SDBY + IWDG Standby mode freeze option + configuration bit + 18 + 1 + + + ST_RAM_SIZE + DTCM size select option configuration + bits + 19 + 2 + + + SECURITY + Security option configuration + bit + 21 + 1 + + + RSS1 + User option configuration bit + 1 + 26 + 1 + + + RSS2 + User option configuration bit + 2 + 27 + 1 + + + IO_HSLV + I/O high-speed at low-voltage + (PRODUCT_BELOW_25V) + 29 + 1 + + + SWAP_BANK_OPT + Bank swapping option configuration + bit + 31 + 1 + + + + + OPTCCR_ + OPTCCR_ + FLASH option clear control + register + 0x124 + 0x20 + write-only + 0x00000000 + + + CLR_OPTCHANGEERR + OPTCHANGEERR reset bit + 30 + 1 + + + + + OPTCCR + OPTCCR + FLASH option clear control + register + 0x24 + 0x20 + write-only + 0x00000000 + + + CLR_OPTCHANGEERR + OPTCHANGEERR reset bit + 30 + 1 + + + + + PRAR_CUR1 + PRAR_CUR1 + FLASH protection address for bank + 1 + 0x28 + 0x20 + read-only + 0x00000000 + + + PROT_AREA_START1 + Bank 1 lowest PCROP protected + address + 0 + 12 + + + PROT_AREA_END1 + Bank 1 highest PCROP protected + address + 16 + 12 + + + DMEP1 + Bank 1 PCROP protected erase enable + option status bit + 31 + 1 + + + + + PRAR_PRG1 + PRAR_PRG1 + FLASH protection address for bank + 1 + 0x2C + 0x20 + read-write + 0x00000000 + + + PROT_AREA_START1 + Bank 1 lowest PCROP protected address + configuration + 0 + 12 + + + PROT_AREA_END1 + Bank 1 highest PCROP protected address + configuration + 16 + 12 + + + DMEP1 + Bank 1 PCROP protected erase enable + option configuration bit + 31 + 1 + + + + + SCAR_CUR1 + SCAR_CUR1 + FLASH secure address for bank + 1 + 0x30 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START1 + Bank 1 lowest secure protected + address + 0 + 12 + + + SEC_AREA_END1 + Bank 1 highest secure protected + address + 16 + 12 + + + DMES1 + Bank 1 secure protected erase enable + option status bit + 31 + 1 + + + + + SCAR_PRG1 + SCAR_PRG1 + FLASH secure address for bank + 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START1 + Bank 1 lowest secure protected address + configuration + 0 + 12 + + + SEC_AREA_END1 + Bank 1 highest secure protected address + configuration + 16 + 12 + + + DMES1 + Bank 1 secure protected erase enable + option configuration bit + 31 + 1 + + + + + WPSN_CUR1R + WPSN_CUR1R + FLASH write sector protection for bank + 1 + 0x38 + 0x20 + read-only + 0x00000000 + + + WRPSn1 + Bank 1 sector write protection option + status byte + 0 + 8 + + + + + WPSN_PRG1R + WPSN_PRG1R + FLASH write sector protection for bank + 1 + 0x3C + 0x20 + read-write + 0x00000000 + + + WRPSn1 + Bank 1 sector write protection + configuration byte + 0 + 8 + + + + + BOOT_CURR + BOOT_CURR + FLASH register with boot + address + 0x40 + 0x20 + read-only + 0x00000000 + + + BOOT_ADD0 + Boot address 0 + 0 + 16 + + + BOOT_ADD1 + Boot address 1 + 16 + 16 + + + + + BOOT_PRGR + BOOT_PRGR + FLASH register with boot + address + 0x44 + 0x20 + read-only + 0x00000000 + + + BOOT_ADD0 + Boot address 0 + 0 + 16 + + + BOOT_ADD1 + Boot address 1 + 16 + 16 + + + + + CRCCR1 + CRCCR1 + FLASH CRC control register for bank + 1 + 0x50 + 0x20 + read-write + 0x00000000 + + + CRC_SECT + Bank 1 CRC sector number + 0 + 3 + + + ALL_BANK + Bank 1 CRC select bit + 7 + 1 + + + CRC_BY_SECT + Bank 1 CRC sector mode select + bit + 8 + 1 + + + ADD_SECT + Bank 1 CRC sector select + bit + 9 + 1 + + + CLEAN_SECT + Bank 1 CRC sector list clear + bit + 10 + 1 + + + START_CRC + Bank 1 CRC start bit + 16 + 1 + + + CLEAN_CRC + Bank 1 CRC clear bit + 17 + 1 + + + CRC_BURST + Bank 1 CRC burst size + 20 + 2 + + + + + CRCSADD1R + CRCSADD1R + FLASH CRC start address register for bank + 1 + 0x54 + 0x20 + read-write + 0x00000000 + + + CRC_START_ADDR + CRC start address on bank + 1 + 0 + 32 + + + + + CRCEADD1R + CRCEADD1R + FLASH CRC end address register for bank + 1 + 0x58 + 0x20 + read-write + 0x00000000 + + + CRC_END_ADDR + CRC end address on bank 1 + 0 + 32 + + + + + CRCDATAR + CRCDATAR + FLASH CRC data register + 0x5C + 0x20 + read-write + 0x00000000 + + + CRC_DATA + CRC result + 0 + 32 + + + + + ECC_FA1R + ECC_FA1R + FLASH ECC fail address for bank + 1 + 0x60 + 0x20 + read-only + 0x00000000 + + + FAIL_ECC_ADDR1 + Bank 1 ECC error address + 0 + 15 + + + + + KEYR2 + KEYR2 + FLASH key register for bank 2 + 0x104 + 0x20 + read-only + 0x00000000 + + + KEYR2 + Bank 2 access configuration unlock + key + 0 + 32 + + + + + CR2 + CR2 + FLASH control register for bank + 2 + 0x10C + 0x20 + read-write + 0x00000000 + + + LOCK2 + Bank 2 configuration lock + bit + 0 + 1 + + + PG2 + Bank 2 program enable bit + 1 + 1 + + + SER2 + Bank 2 sector erase + request + 2 + 1 + + + BER2 + Bank 2 erase request + 3 + 1 + + + PSIZE2 + Bank 2 program size + 4 + 2 + + + FW2 + Bank 2 write forcing control + bit + 6 + 1 + + + START2 + Bank 2 bank or sector erase start + control bit + 7 + 1 + + + SNB2 + Bank 2 sector erase selection + number + 8 + 3 + + + CRC_EN + Bank 2 CRC control bit + 15 + 1 + + + EOPIE2 + Bank 2 end-of-program interrupt control + bit + 16 + 1 + + + WRPERRIE2 + Bank 2 write protection error interrupt + enable bit + 17 + 1 + + + PGSERRIE2 + Bank 2 programming sequence error + interrupt enable bit + 18 + 1 + + + STRBERRIE2 + Bank 2 strobe error interrupt enable + bit + 19 + 1 + + + INCERRIE2 + Bank 2 inconsistency error interrupt + enable bit + 21 + 1 + + + OPERRIE2 + Bank 2 write/erase error interrupt + enable bit + 22 + 1 + + + RDPERRIE2 + Bank 2 read protection error interrupt + enable bit + 23 + 1 + + + RDSERRIE2 + Bank 2 secure error interrupt enable + bit + 24 + 1 + + + SNECCERRIE2 + Bank 2 ECC single correction error + interrupt enable bit + 25 + 1 + + + DBECCERRIE2 + Bank 2 ECC double detection error + interrupt enable bit + 26 + 1 + + + CRCENDIE2 + Bank 2 end of CRC calculation interrupt + enable bit + 27 + 1 + + + + + SR2 + SR2 + FLASH status register for bank + 2 + 0x110 + 0x20 + read-write + 0x00000000 + + + BSY2 + Bank 2 ongoing program + flag + 0 + 1 + + + WBNE2 + Bank 2 write buffer not empty + flag + 1 + 1 + + + QW2 + Bank 2 wait queue flag + 2 + 1 + + + CRC_BUSY2 + Bank 2 CRC busy flag + 3 + 1 + + + EOP2 + Bank 2 end-of-program flag + 16 + 1 + + + WRPERR2 + Bank 2 write protection error + flag + 17 + 1 + + + PGSERR2 + Bank 2 programming sequence error + flag + 18 + 1 + + + STRBERR2 + Bank 2 strobe error flag + 19 + 1 + + + INCERR2 + Bank 2 inconsistency error + flag + 21 + 1 + + + OPERR2 + Bank 2 write/erase error + flag + 22 + 1 + + + RDPERR2 + Bank 2 read protection error + flag + 23 + 1 + + + RDSERR2 + Bank 2 secure error flag + 24 + 1 + + + SNECCERR2 + Bank 2 single correction error + flag + 25 + 1 + + + DBECCERR2 + Bank 2 ECC double detection error + flag + 26 + 1 + + + CRCEND2 + Bank 2 CRC-complete flag + 27 + 1 + + + + + CCR2 + CCR2 + FLASH clear control register for bank + 2 + 0x114 + 0x20 + read-write + 0x00000000 + + + CLR_EOP2 + Bank 1 EOP1 flag clear bit + 16 + 1 + + + CLR_WRPERR2 + Bank 2 WRPERR1 flag clear + bit + 17 + 1 + + + CLR_PGSERR2 + Bank 2 PGSERR1 flag clear + bi + 18 + 1 + + + CLR_STRBERR2 + Bank 2 STRBERR1 flag clear + bit + 19 + 1 + + + CLR_INCERR2 + Bank 2 INCERR1 flag clear + bit + 21 + 1 + + + CLR_OPERR2 + Bank 2 OPERR1 flag clear + bit + 22 + 1 + + + CLR_RDPERR2 + Bank 2 RDPERR1 flag clear + bit + 23 + 1 + + + CLR_RDSERR1 + Bank 1 RDSERR1 flag clear + bit + 24 + 1 + + + CLR_SNECCERR2 + Bank 2 SNECCERR1 flag clear + bit + 25 + 1 + + + CLR_DBECCERR1 + Bank 1 DBECCERR1 flag clear + bit + 26 + 1 + + + CLR_CRCEND2 + Bank 2 CRCEND1 flag clear + bit + 27 + 1 + + + + + PRAR_CUR2 + PRAR_CUR2 + FLASH protection address for bank + 1 + 0x128 + 0x20 + read-only + 0x00000000 + + + PROT_AREA_START2 + Bank 2 lowest PCROP protected + address + 0 + 12 + + + PROT_AREA_END2 + Bank 2 highest PCROP protected + address + 16 + 12 + + + DMEP2 + Bank 2 PCROP protected erase enable + option status bit + 31 + 1 + + + + + PRAR_PRG2 + PRAR_PRG2 + FLASH protection address for bank + 2 + PRAR_PRG1 + 0x2C + 0x20 + read-write + 0x00000000 + + + PROT_AREA_START2 + Bank 2 lowest PCROP protected address + configuration + 0 + 12 + + + PROT_AREA_END2 + Bank 2 highest PCROP protected address + configuration + 16 + 12 + + + DMEP2 + Bank 2 PCROP protected erase enable + option configuration bit + 31 + 1 + + + + + SCAR_CUR2 + SCAR_CUR2 + FLASH secure address for bank + 2 + 0x130 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START2 + Bank 2 lowest secure protected + address + 0 + 12 + + + SEC_AREA_END2 + Bank 2 highest secure protected + address + 16 + 12 + + + DMES2 + Bank 2 secure protected erase enable + option status bit + 31 + 1 + + + + + SCAR_PRG2 + SCAR_PRG2 + FLASH secure address for bank + 2 + 0x134 + 0x20 + read-write + 0x00000000 + + + SEC_AREA_START2 + Bank 2 lowest secure protected address + configuration + 0 + 12 + + + SEC_AREA_END2 + Bank 2 highest secure protected address + configuration + 16 + 12 + + + DMES2 + Bank 2 secure protected erase enable + option configuration bit + 31 + 1 + + + + + WPSN_CUR2R + WPSN_CUR2R + FLASH write sector protection for bank + 2 + 0x138 + 0x20 + read-only + 0x00000000 + + + WRPSn2 + Bank 2 sector write protection option + status byte + 0 + 8 + + + + + WPSN_PRG2R + WPSN_PRG2R + FLASH write sector protection for bank + 2 + 0x13C + 0x20 + read-write + 0x00000000 + + + WRPSn2 + Bank 2 sector write protection + configuration byte + 0 + 8 + + + + + CRCCR2 + CRCCR2 + FLASH CRC control register for bank + 1 + 0x150 + 0x20 + read-write + 0x00000000 + + + CRC_SECT + Bank 2 CRC sector number + 0 + 3 + + + ALL_BANK + Bank 2 CRC select bit + 7 + 1 + + + CRC_BY_SECT + Bank 2 CRC sector mode select + bit + 8 + 1 + + + ADD_SECT + Bank 2 CRC sector select + bit + 9 + 1 + + + CLEAN_SECT + Bank 2 CRC sector list clear + bit + 10 + 1 + + + START_CRC + Bank 2 CRC start bit + 16 + 1 + + + CLEAN_CRC + Bank 2 CRC clear bit + 17 + 1 + + + CRC_BURST + Bank 2 CRC burst size + 20 + 2 + + + + + CRCSADD2R + CRCSADD2R + FLASH CRC start address register for bank + 2 + 0x154 + 0x20 + read-write + 0x00000000 + + + CRC_START_ADDR + CRC start address on bank + 2 + 0 + 32 + + + + + CRCEADD2R + CRCEADD2R + FLASH CRC end address register for bank + 2 + 0x158 + 0x20 + read-write + 0x00000000 + + + CRC_END_ADDR + CRC end address on bank 2 + 0 + 32 + + + + + ECC_FA2R + ECC_FA2R + FLASH ECC fail address for bank + 2 + 0x160 + 0x20 + read-only + 0x00000000 + + + FAIL_ECC_ADDR2 + Bank 2 ECC error address + 0 + 15 + + + + + + + AXI + AXI interconnect registers + AXI + 0x51000000 + + 0x0 + 0x100000 + registers + + + + AXI_PERIPH_ID_4 + AXI_PERIPH_ID_4 + AXI interconnect - peripheral ID4 + register + 0x1FD0 + 0x20 + read-only + 0x00000004 + + + JEP106CON + JEP106 continuation code + 0 + 4 + + + KCOUNT4 + Register file size + 4 + 4 + + + + + AXI_PERIPH_ID_0 + AXI_PERIPH_ID_0 + AXI interconnect - peripheral ID0 + register + 0x1FE0 + 0x20 + read-only + 0x00000004 + + + PARTNUM + Peripheral part number bits 0 to + 7 + 0 + 8 + + + + + AXI_PERIPH_ID_1 + AXI_PERIPH_ID_1 + AXI interconnect - peripheral ID1 + register + 0x1FE4 + 0x20 + read-only + 0x00000004 + + + PARTNUM + Peripheral part number bits 8 to + 11 + 0 + 4 + + + JEP106I + JEP106 identity bits 0 to + 3 + 4 + 4 + + + + + AXI_PERIPH_ID_2 + AXI_PERIPH_ID_2 + AXI interconnect - peripheral ID2 + register + 0x1FE8 + 0x20 + read-only + 0x00000004 + + + JEP106ID + JEP106 Identity bits 4 to + 6 + 0 + 3 + + + JEDEC + JEP106 code flag + 3 + 1 + + + REVISION + Peripheral revision number + 4 + 4 + + + + + AXI_PERIPH_ID_3 + AXI_PERIPH_ID_3 + AXI interconnect - peripheral ID3 + register + 0x1FEC + 0x20 + read-only + 0x00000004 + + + CUST_MOD_NUM + Customer modification + 0 + 4 + + + REV_AND + Customer version + 4 + 4 + + + + + AXI_COMP_ID_0 + AXI_COMP_ID_0 + AXI interconnect - component ID0 + register + 0x1FF0 + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 0 to 7 + 0 + 8 + + + + + AXI_COMP_ID_1 + AXI_COMP_ID_1 + AXI interconnect - component ID1 + register + 0x1FF4 + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 8 to 11 + 0 + 4 + + + CLASS + Component class + 4 + 4 + + + + + AXI_COMP_ID_2 + AXI_COMP_ID_2 + AXI interconnect - component ID2 + register + 0x1FF8 + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 12 to 19 + 0 + 8 + + + + + AXI_COMP_ID_3 + AXI_COMP_ID_3 + AXI interconnect - component ID3 + register + 0x1FFC + 0x20 + read-only + 0x00000004 + + + PREAMBLE + Preamble bits 20 to 27 + 0 + 8 + + + + + AXI_TARG1_FN_MOD_ISS_BM + AXI_TARG1_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x2008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG2_FN_MOD_ISS_BM + AXI_TARG2_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x3008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG3_FN_MOD_ISS_BM + AXI_TARG3_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x4008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG4_FN_MOD_ISS_BM + AXI_TARG4_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x5008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG5_FN_MOD_ISS_BM + AXI_TARG5_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x6008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG6_FN_MOD_ISS_BM + AXI_TARG6_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x7008 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG7_FN_MOD_ISS_BM + AXI_TARG7_FN_MOD_ISS_BM + AXI interconnect - TARG x bus matrix issuing + functionality register + 0x800C + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + READ_ISS_OVERRIDE + 0 + 1 + + + WRITE_ISS_OVERRIDE + Switch matrix write issuing override for + target + 1 + 1 + + + + + AXI_TARG1_FN_MOD2 + AXI_TARG1_FN_MOD2 + AXI interconnect - TARG x bus matrix + functionality 2 register + 0x2024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disable packing of beats to match the + output data width + 0 + 1 + + + + + AXI_TARG2_FN_MOD2 + AXI_TARG2_FN_MOD2 + AXI interconnect - TARG x bus matrix + functionality 2 register + 0x3024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disable packing of beats to match the + output data width + 0 + 1 + + + + + AXI_TARG7_FN_MOD2 + AXI_TARG7_FN_MOD2 + AXI interconnect - TARG x bus matrix + functionality 2 register + 0x8024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disable packing of beats to match the + output data width + 0 + 1 + + + + + AXI_TARG1_FN_MOD_LB + AXI_TARG1_FN_MOD_LB + AXI interconnect - TARG x long burst + functionality modification + 0x202C + 0x20 + read-write + 0x00000004 + + + FN_MOD_LB + Controls burst breaking of long + bursts + 0 + 1 + + + + + AXI_TARG2_FN_MOD_LB + AXI_TARG2_FN_MOD_LB + AXI interconnect - TARG x long burst + functionality modification + 0x302C + 0x20 + read-write + 0x00000004 + + + FN_MOD_LB + Controls burst breaking of long + bursts + 0 + 1 + + + + + AXI_TARG1_FN_MOD + AXI_TARG1_FN_MOD + AXI interconnect - TARG x long burst + functionality modification + 0x2108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override AMIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override AMIB write issuing + capability + 1 + 1 + + + + + AXI_TARG2_FN_MOD + AXI_TARG2_FN_MOD + AXI interconnect - TARG x long burst + functionality modification + 0x3108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override AMIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override AMIB write issuing + capability + 1 + 1 + + + + + AXI_TARG7_FN_MOD + AXI_TARG7_FN_MOD + AXI interconnect - TARG x long burst + functionality modification + 0x8108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override AMIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override AMIB write issuing + capability + 1 + 1 + + + + + AXI_INI1_FN_MOD2 + AXI_INI1_FN_MOD2 + AXI interconnect - INI x functionality + modification 2 register + 0x42024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disables alteration of transactions by + the up-sizer unless required by the + protocol + 0 + 1 + + + + + AXI_INI3_FN_MOD2 + AXI_INI3_FN_MOD2 + AXI interconnect - INI x functionality + modification 2 register + 0x44024 + 0x20 + read-write + 0x00000004 + + + BYPASS_MERGE + Disables alteration of transactions by + the up-sizer unless required by the + protocol + 0 + 1 + + + + + AXI_INI1_FN_MOD_AHB + AXI_INI1_FN_MOD_AHB + AXI interconnect - INI x AHB functionality + modification register + 0x42028 + 0x20 + read-write + 0x00000004 + + + RD_INC_OVERRIDE + Converts all AHB-Lite write transactions + to a series of single beat AXI + 0 + 1 + + + WR_INC_OVERRIDE + Converts all AHB-Lite read transactions + to a series of single beat AXI + 1 + 1 + + + + + AXI_INI3_FN_MOD_AHB + AXI_INI3_FN_MOD_AHB + AXI interconnect - INI x AHB functionality + modification register + 0x44028 + 0x20 + read-write + 0x00000004 + + + RD_INC_OVERRIDE + Converts all AHB-Lite write transactions + to a series of single beat AXI + 0 + 1 + + + WR_INC_OVERRIDE + Converts all AHB-Lite read transactions + to a series of single beat AXI + 1 + 1 + + + + + AXI_INI1_READ_QOS + AXI_INI1_READ_QOS + AXI interconnect - INI x read QoS + register + 0x42100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI2_READ_QOS + AXI_INI2_READ_QOS + AXI interconnect - INI x read QoS + register + 0x43100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI3_READ_QOS + AXI_INI3_READ_QOS + AXI interconnect - INI x read QoS + register + 0x44100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI4_READ_QOS + AXI_INI4_READ_QOS + AXI interconnect - INI x read QoS + register + 0x45100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI5_READ_QOS + AXI_INI5_READ_QOS + AXI interconnect - INI x read QoS + register + 0x46100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI6_READ_QOS + AXI_INI6_READ_QOS + AXI interconnect - INI x read QoS + register + 0x47100 + 0x20 + read-write + 0x00000004 + + + AR_QOS + Read channel QoS setting + 0 + 4 + + + + + AXI_INI1_WRITE_QOS + AXI_INI1_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x42104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI2_WRITE_QOS + AXI_INI2_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x43104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI3_WRITE_QOS + AXI_INI3_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x44104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI4_WRITE_QOS + AXI_INI4_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x45104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI5_WRITE_QOS + AXI_INI5_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x46104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI6_WRITE_QOS + AXI_INI6_WRITE_QOS + AXI interconnect - INI x write QoS + register + 0x47104 + 0x20 + read-write + 0x00000004 + + + AW_QOS + Write channel QoS setting + 0 + 4 + + + + + AXI_INI1_FN_MOD + AXI_INI1_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x42108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI2_FN_MOD + AXI_INI2_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x43108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI3_FN_MOD + AXI_INI3_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x44108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI4_FN_MOD + AXI_INI4_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x45108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI5_FN_MOD + AXI_INI5_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x46108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + AXI_INI6_FN_MOD + AXI_INI6_FN_MOD + AXI interconnect - INI x issuing + functionality modification register + 0x47108 + 0x20 + read-write + 0x00000004 + + + READ_ISS_OVERRIDE + Override ASIB read issuing + capability + 0 + 1 + + + WRITE_ISS_OVERRIDE + Override ASIB write issuing + capability + 1 + 1 + + + + + + + DCMI + Digital camera interface + DCMI + 0x48020000 + + 0x0 + 0x400 + registers + + + DCMI + DCMI global interrupt + 78 + + + + CR + CR + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + OELS + Odd/Even Line Select (Line Select + Start) + 20 + 1 + + + LSM + Line Select mode + 19 + 1 + + + OEBS + Odd/Even Byte Select (Byte Select + Start) + 18 + 1 + + + BSM + Byte Select mode + 16 + 2 + + + ENABLE + DCMI enable + 14 + 1 + + + EDM + Extended data mode + 10 + 2 + + + FCRC + Frame capture rate control + 8 + 2 + + + VSPOL + Vertical synchronization + polarity + 7 + 1 + + + HSPOL + Horizontal synchronization + polarity + 6 + 1 + + + PCKPOL + Pixel clock polarity + 5 + 1 + + + ESS + Embedded synchronization + select + 4 + 1 + + + JPEG + JPEG format + 3 + 1 + + + CROP + Crop feature + 2 + 1 + + + CM + Capture mode + 1 + 1 + + + CAPTURE + Capture enable + 0 + 1 + + + + + SR + SR + status register + 0x4 + 0x20 + read-only + 0x0000 + + + FNE + FIFO not empty + 2 + 1 + + + VSYNC + VSYNC + 1 + 1 + + + HSYNC + HSYNC + 0 + 1 + + + + + RIS + RIS + raw interrupt status register + 0x8 + 0x20 + read-only + 0x0000 + + + LINE_RIS + Line raw interrupt status + 4 + 1 + + + VSYNC_RIS + VSYNC raw interrupt status + 3 + 1 + + + ERR_RIS + Synchronization error raw interrupt + status + 2 + 1 + + + OVR_RIS + Overrun raw interrupt + status + 1 + 1 + + + FRAME_RIS + Capture complete raw interrupt + status + 0 + 1 + + + + + IER + IER + interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + LINE_IE + Line interrupt enable + 4 + 1 + + + VSYNC_IE + VSYNC interrupt enable + 3 + 1 + + + ERR_IE + Synchronization error interrupt + enable + 2 + 1 + + + OVR_IE + Overrun interrupt enable + 1 + 1 + + + FRAME_IE + Capture complete interrupt + enable + 0 + 1 + + + + + MIS + MIS + masked interrupt status + register + 0x10 + 0x20 + read-only + 0x0000 + + + LINE_MIS + Line masked interrupt + status + 4 + 1 + + + VSYNC_MIS + VSYNC masked interrupt + status + 3 + 1 + + + ERR_MIS + Synchronization error masked interrupt + status + 2 + 1 + + + OVR_MIS + Overrun masked interrupt + status + 1 + 1 + + + FRAME_MIS + Capture complete masked interrupt + status + 0 + 1 + + + + + ICR + ICR + interrupt clear register + 0x14 + 0x20 + write-only + 0x0000 + + + LINE_ISC + line interrupt status + clear + 4 + 1 + + + VSYNC_ISC + Vertical synch interrupt status + clear + 3 + 1 + + + ERR_ISC + Synchronization error interrupt status + clear + 2 + 1 + + + OVR_ISC + Overrun interrupt status + clear + 1 + 1 + + + FRAME_ISC + Capture complete interrupt status + clear + 0 + 1 + + + + + ESCR + ESCR + embedded synchronization code + register + 0x18 + 0x20 + read-write + 0x0000 + + + FEC + Frame end delimiter code + 24 + 8 + + + LEC + Line end delimiter code + 16 + 8 + + + LSC + Line start delimiter code + 8 + 8 + + + FSC + Frame start delimiter code + 0 + 8 + + + + + ESUR + ESUR + embedded synchronization unmask + register + 0x1C + 0x20 + read-write + 0x0000 + + + FEU + Frame end delimiter unmask + 24 + 8 + + + LEU + Line end delimiter unmask + 16 + 8 + + + LSU + Line start delimiter + unmask + 8 + 8 + + + FSU + Frame start delimiter + unmask + 0 + 8 + + + + + CWSTRT + CWSTRT + crop window start + 0x20 + 0x20 + read-write + 0x0000 + + + VST + Vertical start line count + 16 + 13 + + + HOFFCNT + Horizontal offset count + 0 + 14 + + + + + CWSIZE + CWSIZE + crop window size + 0x24 + 0x20 + read-write + 0x0000 + + + VLINE + Vertical line count + 16 + 14 + + + CAPCNT + Capture count + 0 + 14 + + + + + DR + DR + data register + 0x28 + 0x20 + read-only + 0x0000 + + + Byte3 + Data byte 3 + 24 + 8 + + + Byte2 + Data byte 2 + 16 + 8 + + + Byte1 + Data byte 1 + 8 + 8 + + + Byte0 + Data byte 0 + 0 + 8 + + + + + + + OTG1_HS_GLOBAL + USB 1 on the go high speed + USB_OTG_HS + 0x40040000 + + 0x0 + 0x400 + registers + + + OTG_FS_EP1_OUT + OTG_FS out global interrupt + 98 + + + OTG_FS_EP1_IN + OTG_FS in global interrupt + 99 + + + OTG_FS_WKUP + OTG_FS wakeup + 100 + + + OTG_FS + OTG_FS global interrupt + 101 + + + + OTG_HS_GOTGCTL + OTG_HS_GOTGCTL + OTG_HS control and status + register + 0x0 + 32 + 0x00000800 + + + SRQSCS + Session request success + 0 + 1 + read-only + + + SRQ + Session request + 1 + 1 + read-write + + + HNGSCS + Host negotiation success + 8 + 1 + read-only + + + HNPRQ + HNP request + 9 + 1 + read-write + + + HSHNPEN + Host set HNP enable + 10 + 1 + read-write + + + DHNPEN + Device HNP enabled + 11 + 1 + read-write + + + CIDSTS + Connector ID status + 16 + 1 + read-only + + + DBCT + Long/short debounce time + 17 + 1 + read-only + + + ASVLD + A-session valid + 18 + 1 + read-only + + + BSVLD + B-session valid + 19 + 1 + read-only + + + EHEN + Embedded host enable + 12 + 1 + read-write + + + + + OTG_HS_GOTGINT + OTG_HS_GOTGINT + OTG_HS interrupt register + 0x4 + 32 + read-write + 0x0 + + + SEDET + Session end detected + 2 + 1 + + + SRSSCHG + Session request success status + change + 8 + 1 + + + HNSSCHG + Host negotiation success status + change + 9 + 1 + + + HNGDET + Host negotiation detected + 17 + 1 + + + ADTOCHG + A-device timeout change + 18 + 1 + + + DBCDNE + Debounce done + 19 + 1 + + + IDCHNG + ID input pin changed + 20 + 1 + + + + + OTG_HS_GAHBCFG + OTG_HS_GAHBCFG + OTG_HS AHB configuration + register + 0x8 + 32 + read-write + 0x0 + + + GINT + Global interrupt mask + 0 + 1 + + + HBSTLEN + Burst length/type + 1 + 4 + + + DMAEN + DMA enable + 5 + 1 + + + TXFELVL + TxFIFO empty level + 7 + 1 + + + PTXFELVL + Periodic TxFIFO empty + level + 8 + 1 + + + + + OTG_HS_GUSBCFG + OTG_HS_GUSBCFG + OTG_HS USB configuration + register + 0xC + 32 + 0x00000A00 + + + TOCAL + FS timeout calibration + 0 + 3 + read-write + + + PHYSEL + USB 2.0 high-speed ULPI PHY or USB 1.1 + full-speed serial transceiver select + 6 + 1 + write-only + + + SRPCAP + SRP-capable + 8 + 1 + read-write + + + HNPCAP + HNP-capable + 9 + 1 + read-write + + + TRDT + USB turnaround time + 10 + 4 + read-write + + + PHYLPCS + PHY Low-power clock select + 15 + 1 + read-write + + + ULPIFSLS + ULPI FS/LS select + 17 + 1 + read-write + + + ULPIAR + ULPI Auto-resume + 18 + 1 + read-write + + + ULPICSM + ULPI Clock SuspendM + 19 + 1 + read-write + + + ULPIEVBUSD + ULPI External VBUS Drive + 20 + 1 + read-write + + + ULPIEVBUSI + ULPI external VBUS + indicator + 21 + 1 + read-write + + + TSDPS + TermSel DLine pulsing + selection + 22 + 1 + read-write + + + PCCI + Indicator complement + 23 + 1 + read-write + + + PTCI + Indicator pass through + 24 + 1 + read-write + + + ULPIIPD + ULPI interface protect + disable + 25 + 1 + read-write + + + FHMOD + Forced host mode + 29 + 1 + read-write + + + FDMOD + Forced peripheral mode + 30 + 1 + read-write + + + + + OTG_HS_GRSTCTL + OTG_HS_GRSTCTL + OTG_HS reset register + 0x10 + 32 + 0x20000000 + + + CSRST + Core soft reset + 0 + 1 + read-write + + + HSRST + HCLK soft reset + 1 + 1 + read-write + + + FCRST + Host frame counter reset + 2 + 1 + read-write + + + RXFFLSH + RxFIFO flush + 4 + 1 + read-write + + + TXFFLSH + TxFIFO flush + 5 + 1 + read-write + + + TXFNUM + TxFIFO number + 6 + 5 + read-write + + + AHBIDL + AHB master idle + 31 + 1 + read-only + + + DMAREQ + DMA request signal enabled for USB OTG + HS + 30 + 1 + read-only + + + + + OTG_HS_GINTSTS + OTG_HS_GINTSTS + OTG_HS core interrupt register + 0x14 + 32 + 0x04000020 + + + CMOD + Current mode of operation + 0 + 1 + read-only + + + MMIS + Mode mismatch interrupt + 1 + 1 + read-write + + + OTGINT + OTG interrupt + 2 + 1 + read-only + + + SOF + Start of frame + 3 + 1 + read-write + + + RXFLVL + RxFIFO nonempty + 4 + 1 + read-only + + + NPTXFE + Nonperiodic TxFIFO empty + 5 + 1 + read-only + + + GINAKEFF + Global IN nonperiodic NAK + effective + 6 + 1 + read-only + + + BOUTNAKEFF + Global OUT NAK effective + 7 + 1 + read-only + + + ESUSP + Early suspend + 10 + 1 + read-write + + + USBSUSP + USB suspend + 11 + 1 + read-write + + + USBRST + USB reset + 12 + 1 + read-write + + + ENUMDNE + Enumeration done + 13 + 1 + read-write + + + ISOODRP + Isochronous OUT packet dropped + interrupt + 14 + 1 + read-write + + + EOPF + End of periodic frame + interrupt + 15 + 1 + read-write + + + IEPINT + IN endpoint interrupt + 18 + 1 + read-only + + + OEPINT + OUT endpoint interrupt + 19 + 1 + read-only + + + IISOIXFR + Incomplete isochronous IN + transfer + 20 + 1 + read-write + + + PXFR_INCOMPISOOUT + Incomplete periodic + transfer + 21 + 1 + read-write + + + DATAFSUSP + Data fetch suspended + 22 + 1 + read-write + + + HPRTINT + Host port interrupt + 24 + 1 + read-only + + + HCINT + Host channels interrupt + 25 + 1 + read-only + + + PTXFE + Periodic TxFIFO empty + 26 + 1 + read-only + + + CIDSCHG + Connector ID status change + 28 + 1 + read-write + + + DISCINT + Disconnect detected + interrupt + 29 + 1 + read-write + + + SRQINT + Session request/new session detected + interrupt + 30 + 1 + read-write + + + WKUINT + Resume/remote wakeup detected + interrupt + 31 + 1 + read-write + + + + + OTG_HS_GINTMSK + OTG_HS_GINTMSK + OTG_HS interrupt mask register + 0x18 + 32 + 0x0 + + + MMISM + Mode mismatch interrupt + mask + 1 + 1 + read-write + + + OTGINT + OTG interrupt mask + 2 + 1 + read-write + + + SOFM + Start of frame mask + 3 + 1 + read-write + + + RXFLVLM + Receive FIFO nonempty mask + 4 + 1 + read-write + + + NPTXFEM + Nonperiodic TxFIFO empty + mask + 5 + 1 + read-write + + + GINAKEFFM + Global nonperiodic IN NAK effective + mask + 6 + 1 + read-write + + + GONAKEFFM + Global OUT NAK effective + mask + 7 + 1 + read-write + + + ESUSPM + Early suspend mask + 10 + 1 + read-write + + + USBSUSPM + USB suspend mask + 11 + 1 + read-write + + + USBRST + USB reset mask + 12 + 1 + read-write + + + ENUMDNEM + Enumeration done mask + 13 + 1 + read-write + + + ISOODRPM + Isochronous OUT packet dropped interrupt + mask + 14 + 1 + read-write + + + EOPFM + End of periodic frame interrupt + mask + 15 + 1 + read-write + + + IEPINT + IN endpoints interrupt + mask + 18 + 1 + read-write + + + OEPINT + OUT endpoints interrupt + mask + 19 + 1 + read-write + + + IISOIXFRM + Incomplete isochronous IN transfer + mask + 20 + 1 + read-write + + + PXFRM_IISOOXFRM + Incomplete periodic transfer + mask + 21 + 1 + read-write + + + FSUSPM + Data fetch suspended mask + 22 + 1 + read-write + + + PRTIM + Host port interrupt mask + 24 + 1 + read-only + + + HCIM + Host channels interrupt + mask + 25 + 1 + read-write + + + PTXFEM + Periodic TxFIFO empty mask + 26 + 1 + read-write + + + CIDSCHGM + Connector ID status change + mask + 28 + 1 + read-write + + + DISCINT + Disconnect detected interrupt + mask + 29 + 1 + read-write + + + SRQIM + Session request/new session detected + interrupt mask + 30 + 1 + read-write + + + WUIM + Resume/remote wakeup detected interrupt + mask + 31 + 1 + read-write + + + RSTDE + Reset detected interrupt + mask + 23 + 1 + read-write + + + LPMINTM + LPM interrupt mask + 27 + 1 + read-write + + + + + OTG_HS_GRXSTSR_Host + OTG_HS_GRXSTSR_Host + OTG_HS Receive status debug read register + (host mode) + 0x1C + 32 + read-only + 0x0 + + + CHNUM + Channel number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + + + OTG_HS_GRXSTSP_Host + OTG_HS_GRXSTSP_Host + OTG_HS status read and pop register (host + mode) + 0x20 + 32 + read-only + 0x0 + + + CHNUM + Channel number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + + + OTG_HS_GRXFSIZ + OTG_HS_GRXFSIZ + OTG_HS Receive FIFO size + register + 0x24 + 32 + read-write + 0x00000200 + + + RXFD + RxFIFO depth + 0 + 16 + + + + + OTG_HS_HNPTXFSIZ_Host + OTG_HS_HNPTXFSIZ_Host + OTG_HS nonperiodic transmit FIFO size + register (host mode) + 0x28 + 32 + read-write + 0x00000200 + + + NPTXFSA + Nonperiodic transmit RAM start + address + 0 + 16 + + + NPTXFD + Nonperiodic TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF0_Device + OTG_HS_DIEPTXF0_Device + Endpoint 0 transmit FIFO size (peripheral + mode) + OTG_HS_HNPTXFSIZ_Host + 0x28 + 32 + read-write + 0x00000200 + + + TX0FSA + Endpoint 0 transmit RAM start + address + 0 + 16 + + + TX0FD + Endpoint 0 TxFIFO depth + 16 + 16 + + + + + OTG_HS_GNPTXSTS + OTG_HS_GNPTXSTS + OTG_HS nonperiodic transmit FIFO/queue + status register + 0x2C + 32 + read-only + 0x00080200 + + + NPTXFSAV + Nonperiodic TxFIFO space + available + 0 + 16 + + + NPTQXSAV + Nonperiodic transmit request queue space + available + 16 + 8 + + + NPTXQTOP + Top of the nonperiodic transmit request + queue + 24 + 7 + + + + + OTG_HS_GCCFG + OTG_HS_GCCFG + OTG_HS general core configuration + register + 0x38 + 32 + read-write + 0x0 + + + PWRDWN + Power down + 16 + 1 + + + BCDEN + Battery charging detector (BCD) + enable + 17 + 1 + + + DCDEN + Data contact detection (DCD) mode + enable + 18 + 1 + + + PDEN + Primary detection (PD) mode + enable + 19 + 1 + + + SDEN + Secondary detection (SD) mode + enable + 20 + 1 + + + VBDEN + USB VBUS detection enable + 21 + 1 + + + DCDET + Data contact detection (DCD) + status + 0 + 1 + + + PDET + Primary detection (PD) + status + 1 + 1 + + + SDET + Secondary detection (SD) + status + 2 + 1 + + + PS2DET + DM pull-up detection + status + 3 + 1 + + + + + OTG_HS_CID + OTG_HS_CID + OTG_HS core ID register + 0x3C + 32 + read-write + 0x00001200 + + + PRODUCT_ID + Product ID field + 0 + 32 + + + + + OTG_HS_HPTXFSIZ + OTG_HS_HPTXFSIZ + OTG_HS Host periodic transmit FIFO size + register + 0x100 + 32 + read-write + 0x02000600 + + + PTXSA + Host periodic TxFIFO start + address + 0 + 16 + + + PTXFD + Host periodic TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF1 + OTG_HS_DIEPTXF1 + OTG_HS device IN endpoint transmit FIFO size + register + 0x104 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF2 + OTG_HS_DIEPTXF2 + OTG_HS device IN endpoint transmit FIFO size + register + 0x108 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF3 + OTG_HS_DIEPTXF3 + OTG_HS device IN endpoint transmit FIFO size + register + 0x11C + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF4 + OTG_HS_DIEPTXF4 + OTG_HS device IN endpoint transmit FIFO size + register + 0x120 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF5 + OTG_HS_DIEPTXF5 + OTG_HS device IN endpoint transmit FIFO size + register + 0x124 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF6 + OTG_HS_DIEPTXF6 + OTG_HS device IN endpoint transmit FIFO size + register + 0x128 + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_DIEPTXF7 + OTG_HS_DIEPTXF7 + OTG_HS device IN endpoint transmit FIFO size + register + 0x12C + 32 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start + address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + OTG_HS_GRXSTSR_Device + OTG_HS_GRXSTSR_Device + OTG_HS Receive status debug read register + (peripheral mode mode) + OTG_HS_GRXSTSR_Host + 0x1C + 32 + read-only + 0x0 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + OTG_HS_GRXSTSP_Device + OTG_HS_GRXSTSP_Device + OTG_HS status read and pop register + (peripheral mode) + OTG_HS_GRXSTSP_Host + 0x20 + 32 + read-only + 0x0 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + OTG_HS_GLPMCFG + OTG_HS_GLPMCFG + OTG core LPM configuration + register + 0x54 + 32 + 0x0 + + + LPMEN + LPM support enable + 0 + 1 + read-write + + + LPMACK + LPM token acknowledge + enable + 1 + 1 + read-write + + + BESL + Best effort service + latency + 2 + 4 + read-only + + + REMWAKE + bRemoteWake value + 6 + 1 + read-only + + + L1SSEN + L1 Shallow Sleep enable + 7 + 1 + read-write + + + BESLTHRS + BESL threshold + 8 + 4 + read-write + + + L1DSEN + L1 deep sleep enable + 12 + 1 + read-write + + + LPMRST + LPM response + 13 + 2 + read-only + + + SLPSTS + Port sleep status + 15 + 1 + read-only + + + L1RSMOK + Sleep State Resume OK + 16 + 1 + read-only + + + LPMCHIDX + LPM Channel Index + 17 + 4 + read-write + + + LPMRCNT + LPM retry count + 21 + 3 + read-write + + + SNDLPM + Send LPM transaction + 24 + 1 + read-write + + + LPMRCNTSTS + LPM retry count status + 25 + 3 + read-only + + + ENBESL + Enable best effort service + latency + 28 + 1 + read-write + + + + + + + OTG2_HS_GLOBAL + 0x40080000 + + OTG_HS_EP1_OUT + OTG_HS out global interrupt + 74 + + + OTG_HS_EP1_IN + OTG_HS in global interrupt + 75 + + + OTG_HS_WKUP + OTG_HS wakeup interrupt + 76 + + + OTG_HS + OTG_HS global interrupt + 77 + + + + OTG1_HS_HOST + USB 1 on the go high speed + USB_OTG_HS + 0x40040400 + + 0x0 + 0x400 + registers + + + + OTG_HS_HCFG + OTG_HS_HCFG + OTG_HS host configuration + register + 0x0 + 32 + 0x0 + + + FSLSPCS + FS/LS PHY clock select + 0 + 2 + read-write + + + FSLSS + FS- and LS-only support + 2 + 1 + read-only + + + + + OTG_HS_HFIR + OTG_HS_HFIR + OTG_HS Host frame interval + register + 0x4 + 32 + read-write + 0x0000EA60 + + + FRIVL + Frame interval + 0 + 16 + + + + + OTG_HS_HFNUM + OTG_HS_HFNUM + OTG_HS host frame number/frame time + remaining register + 0x8 + 32 + read-only + 0x00003FFF + + + FRNUM + Frame number + 0 + 16 + + + FTREM + Frame time remaining + 16 + 16 + + + + + OTG_HS_HPTXSTS + OTG_HS_HPTXSTS + OTG_HS_Host periodic transmit FIFO/queue + status register + 0x10 + 32 + 0x00080100 + + + PTXFSAVL + Periodic transmit data FIFO space + available + 0 + 16 + read-write + + + PTXQSAV + Periodic transmit request queue space + available + 16 + 8 + read-only + + + PTXQTOP + Top of the periodic transmit request + queue + 24 + 8 + read-only + + + + + OTG_HS_HAINT + OTG_HS_HAINT + OTG_HS Host all channels interrupt + register + 0x14 + 32 + read-only + 0x0 + + + HAINT + Channel interrupts + 0 + 16 + + + + + OTG_HS_HAINTMSK + OTG_HS_HAINTMSK + OTG_HS host all channels interrupt mask + register + 0x18 + 32 + read-write + 0x0 + + + HAINTM + Channel interrupt mask + 0 + 16 + + + + + OTG_HS_HPRT + OTG_HS_HPRT + OTG_HS host port control and status + register + 0x40 + 32 + 0x0 + + + PCSTS + Port connect status + 0 + 1 + read-only + + + PCDET + Port connect detected + 1 + 1 + read-write + + + PENA + Port enable + 2 + 1 + read-write + + + PENCHNG + Port enable/disable change + 3 + 1 + read-write + + + POCA + Port overcurrent active + 4 + 1 + read-only + + + POCCHNG + Port overcurrent change + 5 + 1 + read-write + + + PRES + Port resume + 6 + 1 + read-write + + + PSUSP + Port suspend + 7 + 1 + read-write + + + PRST + Port reset + 8 + 1 + read-write + + + PLSTS + Port line status + 10 + 2 + read-only + + + PPWR + Port power + 12 + 1 + read-write + + + PTCTL + Port test control + 13 + 4 + read-write + + + PSPD + Port speed + 17 + 2 + read-only + + + + + OTG_HS_HCCHAR0 + OTG_HS_HCCHAR0 + OTG_HS host channel-0 characteristics + register + 0x100 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR1 + OTG_HS_HCCHAR1 + OTG_HS host channel-1 characteristics + register + 0x120 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR2 + OTG_HS_HCCHAR2 + OTG_HS host channel-2 characteristics + register + 0x140 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR3 + OTG_HS_HCCHAR3 + OTG_HS host channel-3 characteristics + register + 0x160 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR4 + OTG_HS_HCCHAR4 + OTG_HS host channel-4 characteristics + register + 0x180 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR5 + OTG_HS_HCCHAR5 + OTG_HS host channel-5 characteristics + register + 0x1A0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR6 + OTG_HS_HCCHAR6 + OTG_HS host channel-6 characteristics + register + 0x1C0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR7 + OTG_HS_HCCHAR7 + OTG_HS host channel-7 characteristics + register + 0x1E0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR8 + OTG_HS_HCCHAR8 + OTG_HS host channel-8 characteristics + register + 0x200 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR9 + OTG_HS_HCCHAR9 + OTG_HS host channel-9 characteristics + register + 0x220 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR10 + OTG_HS_HCCHAR10 + OTG_HS host channel-10 characteristics + register + 0x240 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCCHAR11 + OTG_HS_HCCHAR11 + OTG_HS host channel-11 characteristics + register + 0x260 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT0 + OTG_HS_HCSPLT0 + OTG_HS host channel-0 split control + register + 0x104 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT1 + OTG_HS_HCSPLT1 + OTG_HS host channel-1 split control + register + 0x124 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT2 + OTG_HS_HCSPLT2 + OTG_HS host channel-2 split control + register + 0x144 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT3 + OTG_HS_HCSPLT3 + OTG_HS host channel-3 split control + register + 0x164 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT4 + OTG_HS_HCSPLT4 + OTG_HS host channel-4 split control + register + 0x184 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT5 + OTG_HS_HCSPLT5 + OTG_HS host channel-5 split control + register + 0x1A4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT6 + OTG_HS_HCSPLT6 + OTG_HS host channel-6 split control + register + 0x1C4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT7 + OTG_HS_HCSPLT7 + OTG_HS host channel-7 split control + register + 0x1E4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT8 + OTG_HS_HCSPLT8 + OTG_HS host channel-8 split control + register + 0x204 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT9 + OTG_HS_HCSPLT9 + OTG_HS host channel-9 split control + register + 0x224 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT10 + OTG_HS_HCSPLT10 + OTG_HS host channel-10 split control + register + 0x244 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCSPLT11 + OTG_HS_HCSPLT11 + OTG_HS host channel-11 split control + register + 0x264 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT0 + OTG_HS_HCINT0 + OTG_HS host channel-11 interrupt + register + 0x108 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT1 + OTG_HS_HCINT1 + OTG_HS host channel-1 interrupt + register + 0x128 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT2 + OTG_HS_HCINT2 + OTG_HS host channel-2 interrupt + register + 0x148 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT3 + OTG_HS_HCINT3 + OTG_HS host channel-3 interrupt + register + 0x168 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT4 + OTG_HS_HCINT4 + OTG_HS host channel-4 interrupt + register + 0x188 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT5 + OTG_HS_HCINT5 + OTG_HS host channel-5 interrupt + register + 0x1A8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT6 + OTG_HS_HCINT6 + OTG_HS host channel-6 interrupt + register + 0x1C8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT7 + OTG_HS_HCINT7 + OTG_HS host channel-7 interrupt + register + 0x1E8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT8 + OTG_HS_HCINT8 + OTG_HS host channel-8 interrupt + register + 0x208 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT9 + OTG_HS_HCINT9 + OTG_HS host channel-9 interrupt + register + 0x228 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT10 + OTG_HS_HCINT10 + OTG_HS host channel-10 interrupt + register + 0x248 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINT11 + OTG_HS_HCINT11 + OTG_HS host channel-11 interrupt + register + 0x268 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK0 + OTG_HS_HCINTMSK0 + OTG_HS host channel-11 interrupt mask + register + 0x10C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK1 + OTG_HS_HCINTMSK1 + OTG_HS host channel-1 interrupt mask + register + 0x12C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK2 + OTG_HS_HCINTMSK2 + OTG_HS host channel-2 interrupt mask + register + 0x14C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK3 + OTG_HS_HCINTMSK3 + OTG_HS host channel-3 interrupt mask + register + 0x16C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK4 + OTG_HS_HCINTMSK4 + OTG_HS host channel-4 interrupt mask + register + 0x18C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK5 + OTG_HS_HCINTMSK5 + OTG_HS host channel-5 interrupt mask + register + 0x1AC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK6 + OTG_HS_HCINTMSK6 + OTG_HS host channel-6 interrupt mask + register + 0x1CC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK7 + OTG_HS_HCINTMSK7 + OTG_HS host channel-7 interrupt mask + register + 0x1EC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK8 + OTG_HS_HCINTMSK8 + OTG_HS host channel-8 interrupt mask + register + 0x20C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK9 + OTG_HS_HCINTMSK9 + OTG_HS host channel-9 interrupt mask + register + 0x22C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK10 + OTG_HS_HCINTMSK10 + OTG_HS host channel-10 interrupt mask + register + 0x24C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCINTMSK11 + OTG_HS_HCINTMSK11 + OTG_HS host channel-11 interrupt mask + register + 0x26C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + response received interrupt + mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ0 + OTG_HS_HCTSIZ0 + OTG_HS host channel-11 transfer size + register + 0x110 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ1 + OTG_HS_HCTSIZ1 + OTG_HS host channel-1 transfer size + register + 0x130 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ2 + OTG_HS_HCTSIZ2 + OTG_HS host channel-2 transfer size + register + 0x150 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ3 + OTG_HS_HCTSIZ3 + OTG_HS host channel-3 transfer size + register + 0x170 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ4 + OTG_HS_HCTSIZ4 + OTG_HS host channel-4 transfer size + register + 0x190 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ5 + OTG_HS_HCTSIZ5 + OTG_HS host channel-5 transfer size + register + 0x1B0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ6 + OTG_HS_HCTSIZ6 + OTG_HS host channel-6 transfer size + register + 0x1D0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ7 + OTG_HS_HCTSIZ7 + OTG_HS host channel-7 transfer size + register + 0x1F0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ8 + OTG_HS_HCTSIZ8 + OTG_HS host channel-8 transfer size + register + 0x210 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ9 + OTG_HS_HCTSIZ9 + OTG_HS host channel-9 transfer size + register + 0x230 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ10 + OTG_HS_HCTSIZ10 + OTG_HS host channel-10 transfer size + register + 0x250 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCTSIZ11 + OTG_HS_HCTSIZ11 + OTG_HS host channel-11 transfer size + register + 0x270 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA0 + OTG_HS_HCDMA0 + OTG_HS host channel-0 DMA address + register + 0x114 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA1 + OTG_HS_HCDMA1 + OTG_HS host channel-1 DMA address + register + 0x134 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA2 + OTG_HS_HCDMA2 + OTG_HS host channel-2 DMA address + register + 0x154 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA3 + OTG_HS_HCDMA3 + OTG_HS host channel-3 DMA address + register + 0x174 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA4 + OTG_HS_HCDMA4 + OTG_HS host channel-4 DMA address + register + 0x194 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA5 + OTG_HS_HCDMA5 + OTG_HS host channel-5 DMA address + register + 0x1B4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA6 + OTG_HS_HCDMA6 + OTG_HS host channel-6 DMA address + register + 0x1D4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA7 + OTG_HS_HCDMA7 + OTG_HS host channel-7 DMA address + register + 0x1F4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA8 + OTG_HS_HCDMA8 + OTG_HS host channel-8 DMA address + register + 0x214 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA9 + OTG_HS_HCDMA9 + OTG_HS host channel-9 DMA address + register + 0x234 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA10 + OTG_HS_HCDMA10 + OTG_HS host channel-10 DMA address + register + 0x254 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCDMA11 + OTG_HS_HCDMA11 + OTG_HS host channel-11 DMA address + register + 0x274 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR12 + OTG_HS_HCCHAR12 + OTG_HS host channel-12 characteristics + register + 0x278 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT12 + OTG_HS_HCSPLT12 + OTG_HS host channel-12 split control + register + 0x27C + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT12 + OTG_HS_HCINT12 + OTG_HS host channel-12 interrupt + register + 0x280 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK12 + OTG_HS_HCINTMSK12 + OTG_HS host channel-12 interrupt mask + register + 0x284 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ12 + OTG_HS_HCTSIZ12 + OTG_HS host channel-12 transfer size + register + 0x288 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA12 + OTG_HS_HCDMA12 + OTG_HS host channel-12 DMA address + register + 0x28C + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR13 + OTG_HS_HCCHAR13 + OTG_HS host channel-13 characteristics + register + 0x290 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT13 + OTG_HS_HCSPLT13 + OTG_HS host channel-13 split control + register + 0x294 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT13 + OTG_HS_HCINT13 + OTG_HS host channel-13 interrupt + register + 0x298 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK13 + OTG_HS_HCINTMSK13 + OTG_HS host channel-13 interrupt mask + register + 0x29C + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALLM response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ13 + OTG_HS_HCTSIZ13 + OTG_HS host channel-13 transfer size + register + 0x2A0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA13 + OTG_HS_HCDMA13 + OTG_HS host channel-13 DMA address + register + 0x2A4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR14 + OTG_HS_HCCHAR14 + OTG_HS host channel-14 characteristics + register + 0x2A8 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT14 + OTG_HS_HCSPLT14 + OTG_HS host channel-14 split control + register + 0x2AC + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT14 + OTG_HS_HCINT14 + OTG_HS host channel-14 interrupt + register + 0x2B0 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK14 + OTG_HS_HCINTMSK14 + OTG_HS host channel-14 interrupt mask + register + 0x2B4 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAKM response received interrupt + mask + 4 + 1 + + + ACKM + ACKM response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ14 + OTG_HS_HCTSIZ14 + OTG_HS host channel-14 transfer size + register + 0x2B8 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA14 + OTG_HS_HCDMA14 + OTG_HS host channel-14 DMA address + register + 0x2BC + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_HCCHAR15 + OTG_HS_HCCHAR15 + OTG_HS host channel-15 characteristics + register + 0x2C0 + 32 + read-write + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count + (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + OTG_HS_HCSPLT15 + OTG_HS_HCSPLT15 + OTG_HS host channel-15 split control + register + 0x2C4 + 32 + read-write + 0x0 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + OTG_HS_HCINT15 + OTG_HS_HCINT15 + OTG_HS host channel-15 interrupt + register + 0x2C8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received + interrupt + 3 + 1 + + + NAK + NAK response received + interrupt + 4 + 1 + + + ACK + ACK response received/transmitted + interrupt + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + OTG_HS_HCINTMSK15 + OTG_HS_HCINTMSK15 + OTG_HS host channel-15 interrupt mask + register + 0x2CC + 32 + read-write + 0x0 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received interrupt + mask + 3 + 1 + + + NAKM + NAK response received interrupt + mask + 4 + 1 + + + ACKM + ACK response received/transmitted + interrupt mask + 5 + 1 + + + NYET + Response received + interrupt + 6 + 1 + + + TXERRM + Transaction error + 7 + 1 + + + BBERRM + Babble error + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + OTG_HS_HCTSIZ15 + OTG_HS_HCTSIZ15 + OTG_HS host channel-15 transfer size + register + 0x2D0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + OTG_HS_HCDMA15 + OTG_HS_HCDMA15 + OTG_HS host channel-15 DMA address + register + 0x2D4 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + + + OTG2_HS_HOST + 0x40080400 + + + OTG1_HS_DEVICE + USB 1 on the go high speed + USB_OTG_HS + 0x40040800 + + 0x0 + 0x400 + registers + + + + OTG_HS_DCFG + OTG_HS_DCFG + OTG_HS device configuration + register + 0x0 + 32 + read-write + 0x02200000 + + + DSPD + Device speed + 0 + 2 + + + NZLSOHSK + Nonzero-length status OUT + handshake + 2 + 1 + + + DAD + Device address + 4 + 7 + + + PFIVL + Periodic (micro)frame + interval + 11 + 2 + + + PERSCHIVL + Periodic scheduling + interval + 24 + 2 + + + + + OTG_HS_DCTL + OTG_HS_DCTL + OTG_HS device control register + 0x4 + 32 + 0x0 + + + RWUSIG + Remote wakeup signaling + 0 + 1 + read-write + + + SDIS + Soft disconnect + 1 + 1 + read-write + + + GINSTS + Global IN NAK status + 2 + 1 + read-only + + + GONSTS + Global OUT NAK status + 3 + 1 + read-only + + + TCTL + Test control + 4 + 3 + read-write + + + SGINAK + Set global IN NAK + 7 + 1 + write-only + + + CGINAK + Clear global IN NAK + 8 + 1 + write-only + + + SGONAK + Set global OUT NAK + 9 + 1 + write-only + + + CGONAK + Clear global OUT NAK + 10 + 1 + write-only + + + POPRGDNE + Power-on programming done + 11 + 1 + read-write + + + + + OTG_HS_DSTS + OTG_HS_DSTS + OTG_HS device status register + 0x8 + 32 + read-only + 0x00000010 + + + SUSPSTS + Suspend status + 0 + 1 + + + ENUMSPD + Enumerated speed + 1 + 2 + + + EERR + Erratic error + 3 + 1 + + + FNSOF + Frame number of the received + SOF + 8 + 14 + + + + + OTG_HS_DIEPMSK + OTG_HS_DIEPMSK + OTG_HS device IN endpoint common interrupt + mask register + 0x10 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed interrupt + mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt + mask + 1 + 1 + + + TOM + Timeout condition mask (nonisochronous + endpoints) + 3 + 1 + + + ITTXFEMSK + IN token received when TxFIFO empty + mask + 4 + 1 + + + INEPNMM + IN token received with EP mismatch + mask + 5 + 1 + + + INEPNEM + IN endpoint NAK effective + mask + 6 + 1 + + + TXFURM + FIFO underrun mask + 8 + 1 + + + BIM + BNA interrupt mask + 9 + 1 + + + + + OTG_HS_DOEPMSK + OTG_HS_DOEPMSK + OTG_HS device OUT endpoint common interrupt + mask register + 0x14 + 32 + read-write + 0x0 + + + XFRCM + Transfer completed interrupt + mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt + mask + 1 + 1 + + + STUPM + SETUP phase done mask + 3 + 1 + + + OTEPDM + OUT token received when endpoint + disabled mask + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets received + mask + 6 + 1 + + + OPEM + OUT packet error mask + 8 + 1 + + + BOIM + BNA interrupt mask + 9 + 1 + + + + + OTG_HS_DAINT + OTG_HS_DAINT + OTG_HS device all endpoints interrupt + register + 0x18 + 32 + read-only + 0x0 + + + IEPINT + IN endpoint interrupt bits + 0 + 16 + + + OEPINT + OUT endpoint interrupt + bits + 16 + 16 + + + + + OTG_HS_DAINTMSK + OTG_HS_DAINTMSK + OTG_HS all endpoints interrupt mask + register + 0x1C + 32 + read-write + 0x0 + + + IEPM + IN EP interrupt mask bits + 0 + 16 + + + OEPM + OUT EP interrupt mask bits + 16 + 16 + + + + + OTG_HS_DVBUSDIS + OTG_HS_DVBUSDIS + OTG_HS device VBUS discharge time + register + 0x28 + 32 + read-write + 0x000017D7 + + + VBUSDT + Device VBUS discharge time + 0 + 16 + + + + + OTG_HS_DVBUSPULSE + OTG_HS_DVBUSPULSE + OTG_HS device VBUS pulsing time + register + 0x2C + 32 + read-write + 0x000005B8 + + + DVBUSP + Device VBUS pulsing time + 0 + 12 + + + + + OTG_HS_DTHRCTL + OTG_HS_DTHRCTL + OTG_HS Device threshold control + register + 0x30 + 32 + read-write + 0x0 + + + NONISOTHREN + Nonisochronous IN endpoints threshold + enable + 0 + 1 + + + ISOTHREN + ISO IN endpoint threshold + enable + 1 + 1 + + + TXTHRLEN + Transmit threshold length + 2 + 9 + + + RXTHREN + Receive threshold enable + 16 + 1 + + + RXTHRLEN + Receive threshold length + 17 + 9 + + + ARPEN + Arbiter parking enable + 27 + 1 + + + + + OTG_HS_DIEPEMPMSK + OTG_HS_DIEPEMPMSK + OTG_HS device IN endpoint FIFO empty + interrupt mask register + 0x34 + 32 + read-write + 0x0 + + + INEPTXFEM + IN EP Tx FIFO empty interrupt mask + bits + 0 + 16 + + + + + OTG_HS_DEACHINT + OTG_HS_DEACHINT + OTG_HS device each endpoint interrupt + register + 0x38 + 32 + read-write + 0x0 + + + IEP1INT + IN endpoint 1interrupt bit + 1 + 1 + + + OEP1INT + OUT endpoint 1 interrupt + bit + 17 + 1 + + + + + OTG_HS_DEACHINTMSK + OTG_HS_DEACHINTMSK + OTG_HS device each endpoint interrupt + register mask + 0x3C + 32 + read-write + 0x0 + + + IEP1INTM + IN Endpoint 1 interrupt mask + bit + 1 + 1 + + + OEP1INTM + OUT Endpoint 1 interrupt mask + bit + 17 + 1 + + + + + OTG_HS_DIEPCTL0 + OTG_HS_DIEPCTL0 + OTG device endpoint-0 control + register + 0x100 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL1 + OTG_HS_DIEPCTL1 + OTG device endpoint-1 control + register + 0x120 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL2 + OTG_HS_DIEPCTL2 + OTG device endpoint-2 control + register + 0x140 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL3 + OTG_HS_DIEPCTL3 + OTG device endpoint-3 control + register + 0x160 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL4 + OTG_HS_DIEPCTL4 + OTG device endpoint-4 control + register + 0x180 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL5 + OTG_HS_DIEPCTL5 + OTG device endpoint-5 control + register + 0x1A0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL6 + OTG_HS_DIEPCTL6 + OTG device endpoint-6 control + register + 0x1C0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPCTL7 + OTG_HS_DIEPCTL7 + OTG device endpoint-7 control + register + 0x1E0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DIEPINT0 + OTG_HS_DIEPINT0 + OTG device endpoint-0 interrupt + register + 0x108 + 32 + 0x00000080 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT1 + OTG_HS_DIEPINT1 + OTG device endpoint-1 interrupt + register + 0x128 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT2 + OTG_HS_DIEPINT2 + OTG device endpoint-2 interrupt + register + 0x148 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT3 + OTG_HS_DIEPINT3 + OTG device endpoint-3 interrupt + register + 0x168 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT4 + OTG_HS_DIEPINT4 + OTG device endpoint-4 interrupt + register + 0x188 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT5 + OTG_HS_DIEPINT5 + OTG device endpoint-5 interrupt + register + 0x1A8 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT6 + OTG_HS_DIEPINT6 + OTG device endpoint-6 interrupt + register + 0x1C8 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPINT7 + OTG_HS_DIEPINT7 + OTG device endpoint-7 interrupt + register + 0x1E8 + 32 + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is + empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available + interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + OTG_HS_DIEPTSIZ0 + OTG_HS_DIEPTSIZ0 + OTG_HS device IN endpoint 0 transfer size + register + 0x110 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 7 + + + PKTCNT + Packet count + 19 + 2 + + + + + OTG_HS_DIEPDMA1 + OTG_HS_DIEPDMA1 + OTG_HS device endpoint-1 DMA address + register + 0x114 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA2 + OTG_HS_DIEPDMA2 + OTG_HS device endpoint-2 DMA address + register + 0x134 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA3 + OTG_HS_DIEPDMA3 + OTG_HS device endpoint-3 DMA address + register + 0x154 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA4 + OTG_HS_DIEPDMA4 + OTG_HS device endpoint-4 DMA address + register + 0x174 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DIEPDMA5 + OTG_HS_DIEPDMA5 + OTG_HS device endpoint-5 DMA address + register + 0x194 + 32 + read-write + 0x0 + + + DMAADDR + DMA address + 0 + 32 + + + + + OTG_HS_DTXFSTS0 + OTG_HS_DTXFSTS0 + OTG_HS device IN endpoint transmit FIFO + status register + 0x118 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS1 + OTG_HS_DTXFSTS1 + OTG_HS device IN endpoint transmit FIFO + status register + 0x138 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS2 + OTG_HS_DTXFSTS2 + OTG_HS device IN endpoint transmit FIFO + status register + 0x158 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS3 + OTG_HS_DTXFSTS3 + OTG_HS device IN endpoint transmit FIFO + status register + 0x178 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS4 + OTG_HS_DTXFSTS4 + OTG_HS device IN endpoint transmit FIFO + status register + 0x198 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DTXFSTS5 + OTG_HS_DTXFSTS5 + OTG_HS device IN endpoint transmit FIFO + status register + 0x1B8 + 32 + read-only + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DIEPTSIZ1 + OTG_HS_DIEPTSIZ1 + OTG_HS device endpoint transfer size + register + 0x130 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ2 + OTG_HS_DIEPTSIZ2 + OTG_HS device endpoint transfer size + register + 0x150 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ3 + OTG_HS_DIEPTSIZ3 + OTG_HS device endpoint transfer size + register + 0x170 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ4 + OTG_HS_DIEPTSIZ4 + OTG_HS device endpoint transfer size + register + 0x190 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ5 + OTG_HS_DIEPTSIZ5 + OTG_HS device endpoint transfer size + register + 0x1B0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DOEPCTL0 + OTG_HS_DOEPCTL0 + OTG_HS device control OUT endpoint 0 control + register + 0x300 + 32 + 0x00008000 + + + MPSIZ + Maximum packet size + 0 + 2 + read-only + + + USBAEP + USB active endpoint + 15 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-only + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-only + + + EPENA + Endpoint enable + 31 + 1 + write-only + + + + + OTG_HS_DOEPCTL1 + OTG_HS_DOEPCTL1 + OTG device endpoint-1 control + register + 0x320 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL2 + OTG_HS_DOEPCTL2 + OTG device endpoint-2 control + register + 0x340 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL3 + OTG_HS_DOEPCTL3 + OTG device endpoint-3 control + register + 0x360 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPINT0 + OTG_HS_DOEPINT0 + OTG_HS device endpoint-0 interrupt + register + 0x308 + 32 + read-write + 0x00000080 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT1 + OTG_HS_DOEPINT1 + OTG_HS device endpoint-1 interrupt + register + 0x328 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT2 + OTG_HS_DOEPINT2 + OTG_HS device endpoint-2 interrupt + register + 0x348 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT3 + OTG_HS_DOEPINT3 + OTG_HS device endpoint-3 interrupt + register + 0x368 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT4 + OTG_HS_DOEPINT4 + OTG_HS device endpoint-4 interrupt + register + 0x388 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT5 + OTG_HS_DOEPINT5 + OTG_HS device endpoint-5 interrupt + register + 0x3A8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT6 + OTG_HS_DOEPINT6 + OTG_HS device endpoint-6 interrupt + register + 0x3C8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPINT7 + OTG_HS_DOEPINT7 + OTG_HS device endpoint-7 interrupt + register + 0x3E8 + 32 + read-write + 0x0 + + + XFRC + Transfer completed + interrupt + 0 + 1 + + + EPDISD + Endpoint disabled + interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint + disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets + received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + OTG_HS_DOEPTSIZ0 + OTG_HS_DOEPTSIZ0 + OTG_HS device endpoint-0 transfer size + register + 0x310 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 7 + + + PKTCNT + Packet count + 19 + 1 + + + STUPCNT + SETUP packet count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ1 + OTG_HS_DOEPTSIZ1 + OTG_HS device endpoint-1 transfer size + register + 0x330 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ2 + OTG_HS_DOEPTSIZ2 + OTG_HS device endpoint-2 transfer size + register + 0x350 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ3 + OTG_HS_DOEPTSIZ3 + OTG_HS device endpoint-3 transfer size + register + 0x370 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ4 + OTG_HS_DOEPTSIZ4 + OTG_HS device endpoint-4 transfer size + register + 0x390 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DIEPTSIZ6 + OTG_HS_DIEPTSIZ6 + OTG_HS device endpoint transfer size + register + OTG_HS_DIEPCTL5 + 0x1A0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DTXFSTS6 + OTG_HS_DTXFSTS6 + OTG_HS device IN endpoint transmit FIFO + status register + 0x1A4 + 32 + read-write + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DIEPTSIZ7 + OTG_HS_DIEPTSIZ7 + OTG_HS device endpoint transfer size + register + OTG_HS_DIEPINT5 + 0x1A8 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + OTG_HS_DTXFSTS7 + OTG_HS_DTXFSTS7 + OTG_HS device IN endpoint transmit FIFO + status register + 0x1AC + 32 + read-write + 0x0 + + + INEPTFSAV + IN endpoint TxFIFO space + avail + 0 + 16 + + + + + OTG_HS_DOEPCTL4 + OTG_HS_DOEPCTL4 + OTG device endpoint-4 control + register + 0x380 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL5 + OTG_HS_DOEPCTL5 + OTG device endpoint-5 control + register + 0x3A0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL6 + OTG_HS_DOEPCTL6 + OTG device endpoint-6 control + register + 0x3C0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPCTL7 + OTG_HS_DOEPCTL7 + OTG device endpoint-7 control + register + 0x3E0 + 32 + 0x0 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data + PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + Stall + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even + frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + OTG_HS_DOEPTSIZ5 + OTG_HS_DOEPTSIZ5 + OTG_HS device endpoint-5 transfer size + register + 0x3B0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ6 + OTG_HS_DOEPTSIZ6 + OTG_HS device endpoint-6 transfer size + register + 0x3D0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + OTG_HS_DOEPTSIZ7 + OTG_HS_DOEPTSIZ7 + OTG_HS device endpoint-7 transfer size + register + 0x3F0 + 32 + read-write + 0x0 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet + count + 29 + 2 + + + + + + + OTG2_HS_DEVICE + 0x40080800 + + + OTG1_HS_PWRCLK + USB 1 on the go high speed + USB_OTG_HS + 0x40040E00 + + 0x0 + 0x3F200 + registers + + + + OTG_HS_PCGCR + OTG_HS_PCGCR + Power and clock gating control + register + 0x0 + 32 + read-write + 0x0 + + + STPPCLK + Stop PHY clock + 0 + 1 + + + GATEHCLK + Gate HCLK + 1 + 1 + + + PHYSUSP + PHY suspended + 4 + 1 + + + + + + + OTG2_HS_PWRCLK + 0x40080E00 + + + Ethernet_MAC + Ethernet: media access control + (MAC) + Ethernet + 0x40028000 + + 0x0 + 0x1400 + registers + + + ETH + Ethernet global interrupt + 61 + + + ETH_WKUP + Ethernet wakeup through EXTI + 62 + + + + DMAMR + DMAMR + DMA mode register + 0x1000 + 0x20 + 0x00000000 + + + SWR + Software Reset + 0 + 1 + read-write + + + DA + DMA Tx or Rx Arbitration + Scheme + 1 + 1 + read-only + + + TXPR + Transmit priority + 11 + 1 + read-only + + + PR + Priority ratio + 12 + 3 + read-only + + + INTM + Interrupt Mode + 16 + 1 + read-write + + + + + DMASBMR + DMASBMR + System bus mode register + 0x1004 + 0x20 + 0x01010000 + + + FB + Fixed Burst Length + 0 + 1 + read-write + + + AAL + Address-Aligned Beats + 12 + 1 + read-write + + + MB + Mixed Burst + 14 + 1 + read-only + + + RB + Rebuild INCRx Burst + 15 + 1 + read-only + + + + + DMAISR + DMAISR + Interrupt status register + 0x1008 + 0x20 + read-only + 0x00000000 + + + DC0IS + DMA Channel Interrupt + Status + 0 + 1 + + + MTLIS + MTL Interrupt Status + 16 + 1 + + + MACIS + MAC Interrupt Status + 17 + 1 + + + + + DMADSR + DMADSR + Debug status register + 0x100C + 0x20 + read-only + 0x00000000 + + + AXWHSTS + AHB Master Write Channel + 0 + 1 + + + RPS0 + DMA Channel Receive Process + State + 8 + 4 + + + TPS0 + DMA Channel Transmit Process + State + 12 + 4 + + + + + DMACCR + DMACCR + Channel control register + 0x1100 + 0x20 + read-write + 0x00000000 + + + MSS + Maximum Segment Size + 0 + 14 + + + PBLX8 + 8xPBL mode + 16 + 1 + + + DSL + Descriptor Skip Length + 18 + 3 + + + + + DMACTxCR + DMACTxCR + Channel transmit control + register + 0x1104 + 0x20 + read-write + 0x00000000 + + + ST + Start or Stop Transmission + Command + 0 + 1 + + + OSF + Operate on Second Packet + 4 + 1 + + + TSE + TCP Segmentation Enabled + 12 + 1 + + + TXPBL + Transmit Programmable Burst + Length + 16 + 6 + + + + + DMACRxCR + DMACRxCR + Channel receive control + register + 0x1108 + 0x20 + read-write + 0x00000000 + + + SR + Start or Stop Receive + Command + 0 + 1 + + + RBSZ + Receive Buffer size + 1 + 14 + + + RXPBL + RXPBL + 16 + 6 + + + RPF + DMA Rx Channel Packet + Flush + 31 + 1 + + + + + DMACTxDLAR + DMACTxDLAR + Channel Tx descriptor list address + register + 0x1114 + 0x20 + read-write + 0x00000000 + + + TDESLA + Start of Transmit List + 2 + 30 + + + + + DMACRxDLAR + DMACRxDLAR + Channel Rx descriptor list address + register + 0x111C + 0x20 + read-write + 0x00000000 + + + RDESLA + Start of Receive List + 2 + 30 + + + + + DMACTxDTPR + DMACTxDTPR + Channel Tx descriptor tail pointer + register + 0x1120 + 0x20 + read-write + 0x00000000 + + + TDT + Transmit Descriptor Tail + Pointer + 2 + 30 + + + + + DMACRxDTPR + DMACRxDTPR + Channel Rx descriptor tail pointer + register + 0x1128 + 0x20 + read-write + 0x00000000 + + + RDT + Receive Descriptor Tail + Pointer + 2 + 30 + + + + + DMACTxRLR + DMACTxRLR + Channel Tx descriptor ring length + register + 0x112C + 0x20 + read-write + 0x00000000 + + + TDRL + Transmit Descriptor Ring + Length + 0 + 10 + + + + + DMACRxRLR + DMACRxRLR + Channel Rx descriptor ring length + register + 0x1130 + 0x20 + read-write + 0x00000000 + + + RDRL + Receive Descriptor Ring + Length + 0 + 10 + + + + + DMACIER + DMACIER + Channel interrupt enable + register + 0x1134 + 0x20 + read-write + 0x00000000 + + + TIE + Transmit Interrupt Enable + 0 + 1 + + + TXSE + Transmit Stopped Enable + 1 + 1 + + + TBUE + Transmit Buffer Unavailable + Enable + 2 + 1 + + + RIE + Receive Interrupt Enable + 6 + 1 + + + RBUE + Receive Buffer Unavailable + Enable + 7 + 1 + + + RSE + Receive Stopped Enable + 8 + 1 + + + RWTE + Receive Watchdog Timeout + Enable + 9 + 1 + + + ETIE + Early Transmit Interrupt + Enable + 10 + 1 + + + ERIE + Early Receive Interrupt + Enable + 11 + 1 + + + FBEE + Fatal Bus Error Enable + 12 + 1 + + + CDEE + Context Descriptor Error + Enable + 13 + 1 + + + AIE + Abnormal Interrupt Summary + Enable + 14 + 1 + + + NIE + Normal Interrupt Summary + Enable + 15 + 1 + + + + + DMACRxIWTR + DMACRxIWTR + Channel Rx interrupt watchdog timer + register + 0x1138 + 0x20 + read-write + 0x00000000 + + + RWT + Receive Interrupt Watchdog Timer + Count + 0 + 8 + + + + + DMACCATxDR + DMACCATxDR + Channel current application transmit + descriptor register + 0x1144 + 0x20 + read-only + 0x00000000 + + + CURTDESAPTR + Application Transmit Descriptor Address + Pointer + 0 + 32 + + + + + DMACCARxDR + DMACCARxDR + Channel current application receive + descriptor register + 0x114C + 0x20 + read-only + 0x00000000 + + + CURRDESAPTR + Application Receive Descriptor Address + Pointer + 0 + 32 + + + + + DMACCATxBR + DMACCATxBR + Channel current application transmit buffer + register + 0x1154 + 0x20 + read-only + 0x00000000 + + + CURTBUFAPTR + Application Transmit Buffer Address + Pointer + 0 + 32 + + + + + DMACCARxBR + DMACCARxBR + Channel current application receive buffer + register + 0x115C + 0x20 + read-only + 0x00000000 + + + CURRBUFAPTR + Application Receive Buffer Address + Pointer + 0 + 32 + + + + + DMACSR + DMACSR + Channel status register + 0x1160 + 0x20 + 0x00000000 + + + TI + Transmit Interrupt + 0 + 1 + read-write + + + TPS + Transmit Process Stopped + 1 + 1 + read-write + + + TBU + Transmit Buffer + Unavailable + 2 + 1 + read-write + + + RI + Receive Interrupt + 6 + 1 + read-write + + + RBU + Receive Buffer Unavailable + 7 + 1 + read-write + + + RPS + Receive Process Stopped + 8 + 1 + read-write + + + RWT + Receive Watchdog Timeout + 9 + 1 + read-write + + + ET + Early Transmit Interrupt + 10 + 1 + read-write + + + ER + Early Receive Interrupt + 11 + 1 + read-write + + + FBE + Fatal Bus Error + 12 + 1 + read-write + + + CDE + Context Descriptor Error + 13 + 1 + read-write + + + AIS + Abnormal Interrupt Summary + 14 + 1 + read-write + + + NIS + Normal Interrupt Summary + 15 + 1 + read-write + + + TEB + Tx DMA Error Bits + 16 + 3 + read-only + + + REB + Rx DMA Error Bits + 19 + 3 + read-only + + + + + DMACMFCR + DMACMFCR + Channel missed frame count + register + 0x116C + 0x20 + read-only + 0x00000000 + + + MFC + Dropped Packet Counters + 0 + 11 + + + MFCO + Overflow status of the MFC + Counter + 15 + 1 + + + + + MTLOMR + MTLOMR + Operating mode Register + 0xC00 + 0x20 + read-write + 0x00000000 + + + DTXSTS + DTXSTS + 1 + 1 + + + CNTPRST + CNTPRST + 8 + 1 + + + CNTCLR + CNTCLR + 9 + 1 + + + + + MTLISR + MTLISR + Interrupt status Register + 0xC20 + 0x20 + read-only + 0x00000000 + + + Q0IS + Queue interrupt status + 0 + 1 + + + + + MTLTxQOMR + MTLTxQOMR + Tx queue operating mode + Register + 0xD00 + 0x20 + 0x00070008 + + + FTQ + Flush Transmit Queue + 0 + 1 + read-write + + + TSF + Transmit Store and Forward + 1 + 1 + read-write + + + TXQEN + Transmit Queue Enable + 2 + 2 + read-only + + + TTC + Transmit Threshold Control + 4 + 3 + read-write + + + TQS + Transmit Queue Size + 16 + 9 + read-write + + + + + MTLTxQUR + MTLTxQUR + Tx queue underflow register + 0xD04 + 0x20 + read-only + 0x00000000 + + + UFFRMCNT + Underflow Packet Counter + 0 + 11 + + + UFCNTOVF + UFCNTOVF + 11 + 1 + + + + + MTLTxQDR + MTLTxQDR + Tx queue debug Register + 0xD08 + 0x20 + read-only + 0x00000000 + + + TXQPAUSED + TXQPAUSED + 0 + 1 + + + TRCSTS + TRCSTS + 1 + 2 + + + TWCSTS + TWCSTS + 3 + 1 + + + TXQSTS + TXQSTS + 4 + 1 + + + TXSTSFSTS + TXSTSFSTS + 5 + 1 + + + PTXQ + PTXQ + 16 + 3 + + + STXSTSF + STXSTSF + 20 + 3 + + + + + MTLQICSR + MTLQICSR + Queue interrupt control status + Register + 0xD2C + 0x20 + read-write + 0x00000000 + + + TXUNFIS + TXUNFIS + 0 + 1 + + + TXUIE + TXUIE + 8 + 1 + + + RXOVFIS + RXOVFIS + 16 + 1 + + + RXOIE + RXOIE + 24 + 1 + + + + + MTLRxQOMR + MTLRxQOMR + Rx queue operating mode + register + 0xD30 + 0x20 + 0x00700000 + + + RTC + RTC + 0 + 2 + read-write + + + FUP + FUP + 3 + 1 + read-write + + + FEP + FEP + 4 + 1 + read-write + + + RSF + RSF + 5 + 1 + read-write + + + DIS_TCP_EF + DIS_TCP_EF + 6 + 1 + read-write + + + EHFC + EHFC + 7 + 1 + read-write + + + RFA + RFA + 8 + 3 + read-write + + + RFD + RFD + 14 + 3 + read-write + + + RQS + RQS + 20 + 3 + read-only + + + + + MTLRxQMPOCR + MTLRxQMPOCR + Rx queue missed packet and overflow counter + register + 0xD34 + 0x20 + read-only + 0x00000000 + + + OVFPKTCNT + OVFPKTCNT + 0 + 11 + + + OVFCNTOVF + OVFCNTOVF + 11 + 1 + + + MISPKTCNT + MISPKTCNT + 16 + 11 + + + MISCNTOVF + MISCNTOVF + 27 + 1 + + + + + MTLRxQDR + MTLRxQDR + Rx queue debug register + 0xD38 + 0x20 + read-only + 0x00000000 + + + RWCSTS + RWCSTS + 0 + 1 + + + RRCSTS + RRCSTS + 1 + 2 + + + RXQSTS + RXQSTS + 4 + 2 + + + PRXQ + PRXQ + 16 + 14 + + + + + MACCR + MACCR + Operating mode configuration + register + 0x0 + 0x20 + read-write + 0x00000000 + + + RE + Receiver Enable + 0 + 1 + + + TE + TE + 1 + 1 + + + PRELEN + PRELEN + 2 + 2 + + + DC + DC + 4 + 1 + + + BL + BL + 5 + 2 + + + DR + DR + 8 + 1 + + + DCRS + DCRS + 9 + 1 + + + DO + DO + 10 + 1 + + + ECRSFD + ECRSFD + 11 + 1 + + + LM + LM + 12 + 1 + + + DM + DM + 13 + 1 + + + FES + FES + 14 + 1 + + + JE + JE + 16 + 1 + + + JD + JD + 17 + 1 + + + WD + WD + 19 + 1 + + + ACS + ACS + 20 + 1 + + + CST + CST + 21 + 1 + + + S2KP + S2KP + 22 + 1 + + + GPSLCE + GPSLCE + 23 + 1 + + + IPG + IPG + 24 + 3 + + + IPC + IPC + 27 + 1 + + + SARC + SARC + 28 + 3 + + + ARPEN + ARPEN + 31 + 1 + + + + + MACECR + MACECR + Extended operating mode configuration + register + 0x4 + 0x20 + read-write + 0x00000000 + + + GPSL + GPSL + 0 + 14 + + + DCRCC + DCRCC + 16 + 1 + + + SPEN + SPEN + 17 + 1 + + + USP + USP + 18 + 1 + + + EIPGEN + EIPGEN + 24 + 1 + + + EIPG + EIPG + 25 + 5 + + + + + MACPFR + MACPFR + Packet filtering control + register + 0x8 + 0x20 + read-write + 0x00000000 + + + PR + PR + 0 + 1 + + + HUC + HUC + 1 + 1 + + + HMC + HMC + 2 + 1 + + + DAIF + DAIF + 3 + 1 + + + PM + PM + 4 + 1 + + + DBF + DBF + 5 + 1 + + + PCF + PCF + 6 + 2 + + + SAIF + SAIF + 8 + 1 + + + SAF + SAF + 9 + 1 + + + HPF + HPF + 10 + 1 + + + VTFE + VTFE + 16 + 1 + + + IPFE + IPFE + 20 + 1 + + + DNTU + DNTU + 21 + 1 + + + RA + RA + 31 + 1 + + + + + MACWTR + MACWTR + Watchdog timeout register + 0xC + 0x20 + read-write + 0x00000000 + + + WTO + WTO + 0 + 4 + + + PWE + PWE + 8 + 1 + + + + + MACHT0R + MACHT0R + Hash Table 0 register + 0x10 + 0x20 + read-write + 0x00000000 + + + HT31T0 + HT31T0 + 0 + 32 + + + + + MACHT1R + MACHT1R + Hash Table 1 register + 0x14 + 0x20 + read-write + 0x00000000 + + + HT63T32 + HT63T32 + 0 + 32 + + + + + MACVTR + MACVTR + VLAN tag register + 0x50 + 0x20 + read-write + 0x00000000 + + + VL + VL + 0 + 16 + + + ETV + ETV + 16 + 1 + + + VTIM + VTIM + 17 + 1 + + + ESVL + ESVL + 18 + 1 + + + ERSVLM + ERSVLM + 19 + 1 + + + DOVLTC + DOVLTC + 20 + 1 + + + EVLS + EVLS + 21 + 2 + + + EVLRXS + EVLRXS + 24 + 1 + + + VTHM + VTHM + 25 + 1 + + + EDVLP + EDVLP + 26 + 1 + + + ERIVLT + ERIVLT + 27 + 1 + + + EIVLS + EIVLS + 28 + 2 + + + EIVLRXS + EIVLRXS + 31 + 1 + + + + + MACVHTR + MACVHTR + VLAN Hash table register + 0x58 + 0x20 + read-write + 0x00000000 + + + VLHT + VLHT + 0 + 16 + + + + + MACVIR + MACVIR + VLAN inclusion register + 0x60 + 0x20 + read-write + 0x00000000 + + + VLT + VLT + 0 + 16 + + + VLC + VLC + 16 + 2 + + + VLP + VLP + 18 + 1 + + + CSVL + CSVL + 19 + 1 + + + VLTI + VLTI + 20 + 1 + + + + + MACIVIR + MACIVIR + Inner VLAN inclusion register + 0x64 + 0x20 + read-write + 0x00000000 + + + VLT + VLT + 0 + 16 + + + VLC + VLC + 16 + 2 + + + VLP + VLP + 18 + 1 + + + CSVL + CSVL + 19 + 1 + + + VLTI + VLTI + 20 + 1 + + + + + MACQTxFCR + MACQTxFCR + Tx Queue flow control register + 0x70 + 0x20 + read-write + 0x00000000 + + + FCB_BPA + FCB_BPA + 0 + 1 + + + TFE + TFE + 1 + 1 + + + PLT + PLT + 4 + 3 + + + DZPQ + DZPQ + 7 + 1 + + + PT + PT + 16 + 16 + + + + + MACRxFCR + MACRxFCR + Rx flow control register + 0x90 + 0x20 + read-write + 0x00000000 + + + RFE + RFE + 0 + 1 + + + UP + UP + 1 + 1 + + + + + MACISR + MACISR + Interrupt status register + 0xB0 + 0x20 + read-only + 0x00000000 + + + PHYIS + PHYIS + 3 + 1 + + + PMTIS + PMTIS + 4 + 1 + + + LPIIS + LPIIS + 5 + 1 + + + MMCIS + MMCIS + 8 + 1 + + + MMCRXIS + MMCRXIS + 9 + 1 + + + MMCTXIS + MMCTXIS + 10 + 1 + + + TSIS + TSIS + 12 + 1 + + + TXSTSIS + TXSTSIS + 13 + 1 + + + RXSTSIS + RXSTSIS + 14 + 1 + + + + + MACIER + MACIER + Interrupt enable register + 0xB4 + 0x20 + read-write + 0x00000000 + + + PHYIE + PHYIE + 3 + 1 + + + PMTIE + PMTIE + 4 + 1 + + + LPIIE + LPIIE + 5 + 1 + + + TSIE + TSIE + 12 + 1 + + + TXSTSIE + TXSTSIE + 13 + 1 + + + RXSTSIE + RXSTSIE + 14 + 1 + + + + + MACRxTxSR + MACRxTxSR + Rx Tx status register + 0xB8 + 0x20 + read-only + 0x00000000 + + + TJT + TJT + 0 + 1 + + + NCARR + NCARR + 1 + 1 + + + LCARR + LCARR + 2 + 1 + + + EXDEF + EXDEF + 3 + 1 + + + LCOL + LCOL + 4 + 1 + + + EXCOL + LCOL + 5 + 1 + + + RWT + RWT + 8 + 1 + + + + + MACPCSR + MACPCSR + PMT control status register + 0xC0 + 0x20 + 0x00000000 + + + PWRDWN + PWRDWN + 0 + 1 + read-write + + + MGKPKTEN + MGKPKTEN + 1 + 1 + read-write + + + RWKPKTEN + RWKPKTEN + 2 + 1 + read-write + + + MGKPRCVD + MGKPRCVD + 5 + 1 + read-only + + + RWKPRCVD + RWKPRCVD + 6 + 1 + read-only + + + GLBLUCAST + GLBLUCAST + 9 + 1 + read-write + + + RWKPFE + RWKPFE + 10 + 1 + read-write + + + RWKPTR + RWKPTR + 24 + 5 + read-write + + + RWKFILTRST + RWKFILTRST + 31 + 1 + read-write + + + + + MACRWKPFR + MACRWKPFR + Remove wakeup packet filter + register + 0xC4 + 0x20 + read-write + 0x00000000 + + + WKUPFRMFTR + WKUPFRMFTR + 0 + 32 + + + + + MACLCSR + MACLCSR + LPI control status register + 0xD0 + 0x20 + 0x00000000 + + + TLPIEN + TLPIEN + 0 + 1 + read-only + + + TLPIEX + TLPIEX + 1 + 1 + read-only + + + RLPIEN + RLPIEN + 2 + 1 + read-only + + + RLPIEX + RLPIEX + 3 + 1 + read-only + + + TLPIST + TLPIST + 8 + 1 + read-only + + + RLPIST + RLPIST + 9 + 1 + read-only + + + LPIEN + LPIEN + 16 + 1 + read-write + + + PLS + PLS + 17 + 1 + read-write + + + PLSEN + PLSEN + 18 + 1 + read-write + + + LPITXA + LPITXA + 19 + 1 + read-write + + + LPITE + LPITE + 20 + 1 + read-write + + + LPITCSE + LPITCSE + 21 + 1 + read-write + + + + + MACLTCR + MACLTCR + LPI timers control register + 0xD4 + 0x20 + read-write + 0x03E80000 + + + TWT + TWT + 0 + 16 + + + LST + LST + 16 + 10 + + + + + MACLETR + MACLETR + LPI entry timer register + 0xD8 + 0x20 + read-write + 0x00000000 + + + LPIET + LPIET + 0 + 17 + + + + + MAC1USTCR + MAC1USTCR + 1-microsecond-tick counter + register + 0xDC + 0x20 + read-write + 0x00000000 + + + TIC_1US_CNTR + TIC_1US_CNTR + 0 + 12 + + + + + MACVR + MACVR + Version register + 0x110 + 0x20 + read-only + 0x00003041 + + + SNPSVER + SNPSVER + 0 + 8 + + + USERVER + USERVER + 8 + 8 + + + + + MACHWF1R + MACHWF1R + HW feature 1 register + 0x120 + 0x20 + read-only + 0x11841904 + + + RXFIFOSIZE + RXFIFOSIZE + 0 + 5 + + + TXFIFOSIZE + TXFIFOSIZE + 6 + 5 + + + OSTEN + OSTEN + 11 + 1 + + + PTOEN + PTOEN + 12 + 1 + + + ADVTHWORD + ADVTHWORD + 13 + 1 + + + DCBEN + DCBEN + 16 + 1 + + + SPHEN + SPHEN + 17 + 1 + + + TSOEN + TSOEN + 18 + 1 + + + DBGMEMA + DBGMEMA + 19 + 1 + + + AVSEL + AVSEL + 20 + 1 + + + HASHTBLSZ + HASHTBLSZ + 24 + 2 + + + L3L4FNUM + L3L4FNUM + 27 + 4 + + + + + MACHWF2R + MACHWF2R + HW feature 2 register + 0x124 + 0x20 + read-only + 0x41000000 + + + RXQCNT + RXQCNT + 0 + 4 + + + TXQCNT + TXQCNT + 6 + 4 + + + RXCHCNT + RXCHCNT + 12 + 4 + + + TXCHCNT + TXCHCNT + 18 + 4 + + + PPSOUTNUM + PPSOUTNUM + 24 + 3 + + + AUXSNAPNUM + AUXSNAPNUM + 28 + 3 + + + + + MACMDIOAR + MACMDIOAR + MDIO address register + 0x200 + 0x20 + read-write + 0x00000000 + + + MB + MB + 0 + 1 + + + C45E + C45E + 1 + 1 + + + GOC + GOC + 2 + 2 + + + SKAP + SKAP + 4 + 1 + + + CR + CR + 8 + 4 + + + NTC + NTC + 12 + 3 + + + RDA + RDA + 16 + 5 + + + PA + PA + 21 + 5 + + + BTB + BTB + 26 + 1 + + + PSE + PSE + 27 + 1 + + + + + MACMDIODR + MACMDIODR + MDIO data register + 0x204 + 0x20 + read-write + 0x00000000 + + + MD + MD + 0 + 16 + + + RA + RA + 16 + 16 + + + + + MACARPAR + MACARPAR + ARP address register + 0xAE0 + 0x20 + read-write + 0x00000000 + + + ARPPA + ARPPA + 0 + 32 + + + + + MACA0HR + MACA0HR + Address 0 high register + 0x300 + 0x20 + 0x8000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + read-write + + + AE + AE + 31 + 1 + read-only + + + + + MACA0LR + MACA0LR + Address 0 low register + 0x304 + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA1LR + MACA1LR + Address 1 low register + 0x30C + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA2LR + MACA2LR + Address 2 low register + 0x314 + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA3LR + MACA3LR + Address 3 low register + 0x31C + 0x20 + read-write + 0xFFFFFFFF + + + ADDRLO + ADDRLO + 0 + 32 + + + + + MACA1HR + MACA1HR + Address 1 high register + 0x308 + 0x20 + read-write + 0x0000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + + + MBC + MBC + 24 + 6 + + + SA + SA + 30 + 1 + + + AE + AE + 31 + 1 + + + + + MACA2HR + MACA2HR + Address 2 high register + 0x310 + 0x20 + read-write + 0x0000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + + + MBC + MBC + 24 + 6 + + + SA + SA + 30 + 1 + + + AE + AE + 31 + 1 + + + + + MACA3HR + MACA3HR + Address 3 high register + 0x318 + 0x20 + read-write + 0x0000FFFF + + + ADDRHI + ADDRHI + 0 + 16 + + + MBC + MBC + 24 + 6 + + + SA + SA + 30 + 1 + + + AE + AE + 31 + 1 + + + + + MMC_CONTROL + MMC_CONTROL + MMC control register + 0x700 + 0x20 + read-write + 0x00000000 + + + CNTRST + CNTRST + 0 + 1 + + + CNTSTOPRO + CNTSTOPRO + 1 + 1 + + + RSTONRD + RSTONRD + 2 + 1 + + + CNTFREEZ + CNTFREEZ + 3 + 1 + + + CNTPRST + CNTPRST + 4 + 1 + + + CNTPRSTLVL + CNTPRSTLVL + 5 + 1 + + + UCDBC + UCDBC + 8 + 1 + + + + + MMC_RX_INTERRUPT + MMC_RX_INTERRUPT + MMC Rx interrupt register + 0x704 + 0x20 + read-only + 0x00000000 + + + RXCRCERPIS + RXCRCERPIS + 5 + 1 + + + RXALGNERPIS + RXALGNERPIS + 6 + 1 + + + RXUCGPIS + RXUCGPIS + 17 + 1 + + + RXLPIUSCIS + RXLPIUSCIS + 26 + 1 + + + RXLPITRCIS + RXLPITRCIS + 27 + 1 + + + + + MMC_TX_INTERRUPT + MMC_TX_INTERRUPT + MMC Tx interrupt register + 0x708 + 0x20 + read-only + 0x00000000 + + + TXSCOLGPIS + TXSCOLGPIS + 14 + 1 + + + TXMCOLGPIS + TXMCOLGPIS + 15 + 1 + + + TXGPKTIS + TXGPKTIS + 21 + 1 + + + TXLPIUSCIS + TXLPIUSCIS + 26 + 1 + + + TXLPITRCIS + TXLPITRCIS + 27 + 1 + + + + + MMC_RX_INTERRUPT_MASK + MMC_RX_INTERRUPT_MASK + MMC Rx interrupt mask register + 0x70C + 0x20 + 0x00000000 + + + RXCRCERPIM + RXCRCERPIM + 5 + 1 + read-write + + + RXALGNERPIM + RXALGNERPIM + 6 + 1 + read-write + + + RXUCGPIM + RXUCGPIM + 17 + 1 + read-write + + + RXLPIUSCIM + RXLPIUSCIM + 26 + 1 + read-write + + + RXLPITRCIM + RXLPITRCIM + 27 + 1 + read-only + + + + + MMC_TX_INTERRUPT_MASK + MMC_TX_INTERRUPT_MASK + MMC Tx interrupt mask register + 0x710 + 0x20 + 0x00000000 + + + TXSCOLGPIM + TXSCOLGPIM + 14 + 1 + read-write + + + TXMCOLGPIM + TXMCOLGPIM + 15 + 1 + read-write + + + TXGPKTIM + TXGPKTIM + 21 + 1 + read-write + + + TXLPIUSCIM + TXLPIUSCIM + 26 + 1 + read-write + + + TXLPITRCIM + TXLPITRCIM + 27 + 1 + read-only + + + + + TX_SINGLE_COLLISION_GOOD_PACKETS + + TX_SINGLE_COLLISION_GOOD_PACKETS + Tx single collision good packets + register + 0x74C + 0x20 + read-only + 0x00000000 + + + TXSNGLCOLG + TXSNGLCOLG + 0 + 32 + + + + + TX_MULTIPLE_COLLISION_GOOD_PACKETS + + TX_MULTIPLE_COLLISION_GOOD_PACKETS + Tx multiple collision good packets + register + 0x750 + 0x20 + read-only + 0x00000000 + + + TXMULTCOLG + TXMULTCOLG + 0 + 32 + + + + + TX_PACKET_COUNT_GOOD + TX_PACKET_COUNT_GOOD + Tx packet count good register + 0x768 + 0x20 + read-only + 0x00000000 + + + TXPKTG + TXPKTG + 0 + 32 + + + + + RX_CRC_ERROR_PACKETS + RX_CRC_ERROR_PACKETS + Rx CRC error packets register + 0x794 + 0x20 + read-only + 0x00000000 + + + RXCRCERR + RXCRCERR + 0 + 32 + + + + + RX_ALIGNMENT_ERROR_PACKETS + RX_ALIGNMENT_ERROR_PACKETS + Rx alignment error packets + register + 0x798 + 0x20 + read-only + 0x00000000 + + + RXALGNERR + RXALGNERR + 0 + 32 + + + + + RX_UNICAST_PACKETS_GOOD + RX_UNICAST_PACKETS_GOOD + Rx unicast packets good + register + 0x7C4 + 0x20 + read-only + 0x00000000 + + + RXUCASTG + RXUCASTG + 0 + 32 + + + + + TX_LPI_USEC_CNTR + TX_LPI_USEC_CNTR + Tx LPI microsecond timer + register + 0x7EC + 0x20 + read-only + 0x00000000 + + + TXLPIUSC + TXLPIUSC + 0 + 32 + + + + + TX_LPI_TRAN_CNTR + TX_LPI_TRAN_CNTR + Tx LPI transition counter + register + 0x7F0 + 0x20 + read-only + 0x00000000 + + + TXLPITRC + TXLPITRC + 0 + 32 + + + + + RX_LPI_USEC_CNTR + RX_LPI_USEC_CNTR + Rx LPI microsecond counter + register + 0x7F4 + 0x20 + read-only + 0x00000000 + + + RXLPIUSC + RXLPIUSC + 0 + 32 + + + + + RX_LPI_TRAN_CNTR + RX_LPI_TRAN_CNTR + Rx LPI transition counter + register + 0x7F8 + 0x20 + read-only + 0x00000000 + + + RXLPITRC + RXLPITRC + 0 + 32 + + + + + MACL3L4C0R + MACL3L4C0R + L3 and L4 control 0 register + 0x900 + 0x20 + read-write + 0x00000000 + + + L3PEN0 + L3PEN0 + 0 + 1 + + + L3SAM0 + L3SAM0 + 2 + 1 + + + L3SAIM0 + L3SAIM0 + 3 + 1 + + + L3DAM0 + L3DAM0 + 4 + 1 + + + L3DAIM0 + L3DAIM0 + 5 + 1 + + + L3HSBM0 + L3HSBM0 + 6 + 5 + + + L3HDBM0 + L3HDBM0 + 11 + 5 + + + L4PEN0 + L4PEN0 + 16 + 1 + + + L4SPM0 + L4SPM0 + 18 + 1 + + + L4SPIM0 + L4SPIM0 + 19 + 1 + + + L4DPM0 + L4DPM0 + 20 + 1 + + + L4DPIM0 + L4DPIM0 + 21 + 1 + + + + + MACL4A0R + MACL4A0R + Layer4 address filter 0 + register + 0x904 + 0x20 + read-write + 0x00000000 + + + L4SP0 + L4SP0 + 0 + 16 + + + L4DP0 + L4DP0 + 16 + 16 + + + + + MACDR + MACDR + Debug register + 0x114 + 0x20 + read-only + 0x00000000 + + + RPESTS + RPESTS + 0 + 1 + + + RFCFCSTS + RFCFCSTS + 1 + 2 + + + TPESTS + TPESTS + 16 + 1 + + + TFCSTS + TFCSTS + 17 + 2 + + + + + MACL3A00R + MACL3A00R + MACL3A00R + 0x910 + 0x20 + read-write + 0x00000000 + + + L3A00 + L3A00 + 0 + 32 + + + + + MACL3A10R + MACL3A10R + Layer3 address 1 filter 0 + register + 0x914 + 0x20 + read-write + 0x00000000 + + + L3A10 + L3A10 + 0 + 32 + + + + + MACL3A20 + MACL3A20 + Layer3 Address 2 filter 0 + register + 0x918 + 0x20 + read-write + 0x00000000 + + + L3A20 + L3A20 + 0 + 32 + + + + + MACL3A30 + MACL3A30 + Layer3 Address 3 filter 0 + register + 0x91C + 0x20 + read-write + 0x00000000 + + + L3A30 + L3A30 + 0 + 32 + + + + + MACL3L4C1R + MACL3L4C1R + L3 and L4 control 1 register + 0x930 + 0x20 + read-write + 0x00000000 + + + L3PEN1 + L3PEN1 + 0 + 1 + + + L3SAM1 + L3SAM1 + 2 + 1 + + + L3SAIM1 + L3SAIM1 + 3 + 1 + + + L3DAM1 + L3DAM1 + 4 + 1 + + + L3DAIM1 + L3DAIM1 + 5 + 1 + + + L3HSBM1 + L3HSBM1 + 6 + 5 + + + L3HDBM1 + L3HDBM1 + 11 + 5 + + + L4PEN1 + L4PEN1 + 16 + 1 + + + L4SPM1 + L4SPM1 + 18 + 1 + + + L4SPIM1 + L4SPIM1 + 19 + 1 + + + L4DPM1 + L4DPM1 + 20 + 1 + + + L4DPIM1 + L4DPIM1 + 21 + 1 + + + + + MACL4A1R + MACL4A1R + Layer 4 address filter 1 + register + 0x934 + 0x20 + read-write + 0x00000000 + + + L4SP1 + L4SP1 + 0 + 16 + + + L4DP1 + L4DP1 + 16 + 16 + + + + + MACL3A01R + MACL3A01R + Layer3 address 0 filter 1 + Register + 0x940 + 0x20 + read-write + 0x00000000 + + + L3A01 + L3A01 + 0 + 32 + + + + + MACL3A11R + MACL3A11R + Layer3 address 1 filter 1 + register + 0x944 + 0x20 + read-write + 0x00000000 + + + L3A11 + L3A11 + 0 + 32 + + + + + MACL3A21R + MACL3A21R + Layer3 address 2 filter 1 + Register + 0x948 + 0x20 + read-write + 0x00000000 + + + L3A21 + L3A21 + 0 + 32 + + + + + MACL3A31R + MACL3A31R + Layer3 address 3 filter 1 + register + 0x94C + 0x20 + read-write + 0x00000000 + + + L3A31 + L3A31 + 0 + 32 + + + + + MACTSCR + MACTSCR + Timestamp control Register + 0xB00 + 0x20 + 0x00000200 + + + TSENA + TSENA + 0 + 1 + read-write + + + TSCFUPDT + TSCFUPDT + 1 + 1 + read-write + + + TSINIT + TSINIT + 2 + 1 + read-write + + + TSUPDT + TSUPDT + 3 + 1 + read-write + + + TSADDREG + TSADDREG + 5 + 1 + read-write + + + TSENALL + TSENALL + 8 + 1 + read-write + + + TSCTRLSSR + TSCTRLSSR + 9 + 1 + read-write + + + TSVER2ENA + TSVER2ENA + 10 + 1 + read-write + + + TSIPENA + TSIPENA + 11 + 1 + read-write + + + TSIPV6ENA + TSIPV6ENA + 12 + 1 + read-write + + + TSIPV4ENA + TSIPV4ENA + 13 + 1 + read-write + + + TSEVNTENA + TSEVNTENA + 14 + 1 + read-write + + + TSMSTRENA + TSMSTRENA + 15 + 1 + read-write + + + SNAPTYPSEL + SNAPTYPSEL + 16 + 2 + read-write + + + TSENMACADDR + TSENMACADDR + 18 + 1 + read-write + + + CSC + CSC + 19 + 1 + read-only + + + TXTSSTSM + TXTSSTSM + 24 + 1 + read-write + + + + + MACSSIR + MACSSIR + Sub-second increment register + 0xB04 + 0x20 + read-write + 0x00000000 + + + SNSINC + SNSINC + 8 + 8 + + + SSINC + SSINC + 16 + 8 + + + + + MACSTSR + MACSTSR + System time seconds register + 0xB08 + 0x20 + read-only + 0x00000000 + + + TSS + TSS + 0 + 32 + + + + + MACSTNR + MACSTNR + System time nanoseconds + register + 0xB0C + 0x20 + read-only + 0x00000000 + + + TSSS + TSSS + 0 + 31 + + + + + MACSTSUR + MACSTSUR + System time seconds update + register + 0xB10 + 0x20 + read-write + 0x00000000 + + + TSS + TSS + 0 + 32 + + + + + MACSTNUR + MACSTNUR + System time nanoseconds update + register + 0xB14 + 0x20 + read-write + 0x00000000 + + + TSSS + TSSS + 0 + 31 + + + ADDSUB + ADDSUB + 31 + 1 + + + + + MACTSAR + MACTSAR + Timestamp addend register + 0xB18 + 0x20 + read-write + 0x00000000 + + + TSAR + TSAR + 0 + 32 + + + + + MACTSSR + MACTSSR + Timestamp status register + 0xB20 + 0x20 + read-only + 0x00000000 + + + TSSOVF + TSSOVF + 0 + 1 + + + TSTARGT0 + TSTARGT0 + 1 + 1 + + + AUXTSTRIG + AUXTSTRIG + 2 + 1 + + + TSTRGTERR0 + TSTRGTERR0 + 3 + 1 + + + TXTSSIS + TXTSSIS + 15 + 1 + + + ATSSTN + ATSSTN + 16 + 4 + + + ATSSTM + ATSSTM + 24 + 1 + + + ATSNS + ATSNS + 25 + 5 + + + + + MACTxTSSNR + MACTxTSSNR + Tx timestamp status nanoseconds + register + 0xB30 + 0x20 + read-only + 0x00000000 + + + TXTSSLO + TXTSSLO + 0 + 31 + + + TXTSSMIS + TXTSSMIS + 31 + 1 + + + + + MACTxTSSSR + MACTxTSSSR + Tx timestamp status seconds + register + 0xB34 + 0x20 + read-only + 0x00000000 + + + TXTSSHI + TXTSSHI + 0 + 32 + + + + + MACACR + MACACR + Auxiliary control register + 0xB40 + 0x20 + read-write + 0x00000000 + + + ATSFC + ATSFC + 0 + 1 + + + ATSEN0 + ATSEN0 + 4 + 1 + + + ATSEN1 + ATSEN1 + 5 + 1 + + + ATSEN2 + ATSEN2 + 6 + 1 + + + ATSEN3 + ATSEN3 + 7 + 1 + + + + + MACATSNR + MACATSNR + Auxiliary timestamp nanoseconds + register + 0xB48 + 0x20 + read-only + 0x00000000 + + + AUXTSLO + AUXTSLO + 0 + 31 + + + + + MACATSSR + MACATSSR + Auxiliary timestamp seconds + register + 0xB4C + 0x20 + read-only + 0x00000000 + + + AUXTSHI + AUXTSHI + 0 + 32 + + + + + MACTSIACR + MACTSIACR + Timestamp Ingress asymmetric correction + register + 0xB50 + 0x20 + read-write + 0x00000000 + + + OSTIAC + OSTIAC + 0 + 32 + + + + + MACTSEACR + MACTSEACR + Timestamp Egress asymmetric correction + register + 0xB54 + 0x20 + read-write + 0x00000000 + + + OSTEAC + OSTEAC + 0 + 32 + + + + + MACTSICNR + MACTSICNR + Timestamp Ingress correction nanosecond + register + 0xB58 + 0x20 + read-write + 0x00000000 + + + TSIC + TSIC + 0 + 32 + + + + + MACTSECNR + MACTSECNR + Timestamp Egress correction nanosecond + register + 0xB5C + 0x20 + read-write + 0x00000000 + + + TSEC + TSEC + 0 + 32 + + + + + MACPPSCR + MACPPSCR + PPS control register + 0xB70 + 0x20 + read-write + 0x00000000 + + + PPSCTRL + PPSCTRL + 0 + 4 + + + PPSEN0 + PPSEN0 + 4 + 1 + + + TRGTMODSEL0 + TRGTMODSEL0 + 5 + 2 + + + + + MACPPSTTSR + MACPPSTTSR + PPS target time seconds + register + 0xB80 + 0x20 + read-write + 0x00000000 + + + TSTRH0 + TSTRH0 + 0 + 31 + + + + + MACPPSTTNR + MACPPSTTNR + PPS target time nanoseconds + register + 0xB84 + 0x20 + read-write + 0x00000000 + + + TTSL0 + TTSL0 + 0 + 31 + + + TRGTBUSY0 + TRGTBUSY0 + 31 + 1 + + + + + MACPPSIR + MACPPSIR + PPS interval register + 0xB88 + 0x20 + read-write + 0x00000000 + + + PPSINT0 + PPSINT0 + 0 + 32 + + + + + MACPPSWR + MACPPSWR + PPS width register + 0xB8C + 0x20 + read-write + 0x00000000 + + + PPSWIDTH0 + PPSWIDTH0 + 0 + 32 + + + + + MACPOCR + MACPOCR + PTP Offload control register + 0xBC0 + 0x20 + read-write + 0x00000000 + + + PTOEN + PTOEN + 0 + 1 + + + ASYNCEN + ASYNCEN + 1 + 1 + + + APDREQEN + APDREQEN + 2 + 1 + + + ASYNCTRIG + ASYNCTRIG + 4 + 1 + + + APDREQTRIG + APDREQTRIG + 5 + 1 + + + DRRDIS + DRRDIS + 6 + 1 + + + DN + DN + 8 + 8 + + + + + MACSPI0R + MACSPI0R + PTP Source Port Identity 0 + Register + 0xBC4 + 0x20 + read-write + 0x00000000 + + + SPI0 + SPI0 + 0 + 32 + + + + + MACSPI1R + MACSPI1R + PTP Source port identity 1 + register + 0xBC8 + 0x20 + read-write + 0x00000000 + + + SPI1 + SPI1 + 0 + 32 + + + + + MACSPI2R + MACSPI2R + PTP Source port identity 2 + register + 0xBCC + 0x20 + read-write + 0x00000000 + + + SPI2 + SPI2 + 0 + 16 + + + + + MACLMIR + MACLMIR + Log message interval register + 0xBD0 + 0x20 + read-write + 0x00000000 + + + LSI + LSI + 0 + 8 + + + DRSYNCR + DRSYNCR + 8 + 3 + + + LMPDRI + LMPDRI + 24 + 8 + + + + + + + DMA1 + DMA controller + DMA + 0x40020000 + + 0x0 + 0x400 + registers + + + DMA_STR0 + DMA1 Stream0 + 11 + + + DMA_STR1 + DMA1 Stream1 + 12 + + + DMA_STR2 + DMA1 Stream2 + 13 + + + DMA_STR3 + DMA1 Stream3 + 14 + + + DMA_STR4 + DMA1 Stream4 + 15 + + + DMA_STR5 + DMA1 Stream5 + 16 + + + DMA_STR6 + DMA1 Stream6 + 17 + + + DMA1_STR7 + DMA1 Stream7 + 47 + + + + LISR + LISR + low interrupt status register + 0x0 + 0x20 + read-only + 0x00000000 + + + TCIF3 + Stream x transfer complete interrupt + flag (x = 3..0) + 27 + 1 + + + HTIF3 + Stream x half transfer interrupt flag + (x=3..0) + 26 + 1 + + + TEIF3 + Stream x transfer error interrupt flag + (x=3..0) + 25 + 1 + + + DMEIF3 + Stream x direct mode error interrupt + flag (x=3..0) + 24 + 1 + + + FEIF3 + Stream x FIFO error interrupt flag + (x=3..0) + 22 + 1 + + + TCIF2 + Stream x transfer complete interrupt + flag (x = 3..0) + 21 + 1 + + + HTIF2 + Stream x half transfer interrupt flag + (x=3..0) + 20 + 1 + + + TEIF2 + Stream x transfer error interrupt flag + (x=3..0) + 19 + 1 + + + DMEIF2 + Stream x direct mode error interrupt + flag (x=3..0) + 18 + 1 + + + FEIF2 + Stream x FIFO error interrupt flag + (x=3..0) + 16 + 1 + + + TCIF1 + Stream x transfer complete interrupt + flag (x = 3..0) + 11 + 1 + + + HTIF1 + Stream x half transfer interrupt flag + (x=3..0) + 10 + 1 + + + TEIF1 + Stream x transfer error interrupt flag + (x=3..0) + 9 + 1 + + + DMEIF1 + Stream x direct mode error interrupt + flag (x=3..0) + 8 + 1 + + + FEIF1 + Stream x FIFO error interrupt flag + (x=3..0) + 6 + 1 + + + TCIF0 + Stream x transfer complete interrupt + flag (x = 3..0) + 5 + 1 + + + HTIF0 + Stream x half transfer interrupt flag + (x=3..0) + 4 + 1 + + + TEIF0 + Stream x transfer error interrupt flag + (x=3..0) + 3 + 1 + + + DMEIF0 + Stream x direct mode error interrupt + flag (x=3..0) + 2 + 1 + + + FEIF0 + Stream x FIFO error interrupt flag + (x=3..0) + 0 + 1 + + + + + HISR + HISR + high interrupt status register + 0x4 + 0x20 + read-only + 0x00000000 + + + TCIF7 + Stream x transfer complete interrupt + flag (x=7..4) + 27 + 1 + + + HTIF7 + Stream x half transfer interrupt flag + (x=7..4) + 26 + 1 + + + TEIF7 + Stream x transfer error interrupt flag + (x=7..4) + 25 + 1 + + + DMEIF7 + Stream x direct mode error interrupt + flag (x=7..4) + 24 + 1 + + + FEIF7 + Stream x FIFO error interrupt flag + (x=7..4) + 22 + 1 + + + TCIF6 + Stream x transfer complete interrupt + flag (x=7..4) + 21 + 1 + + + HTIF6 + Stream x half transfer interrupt flag + (x=7..4) + 20 + 1 + + + TEIF6 + Stream x transfer error interrupt flag + (x=7..4) + 19 + 1 + + + DMEIF6 + Stream x direct mode error interrupt + flag (x=7..4) + 18 + 1 + + + FEIF6 + Stream x FIFO error interrupt flag + (x=7..4) + 16 + 1 + + + TCIF5 + Stream x transfer complete interrupt + flag (x=7..4) + 11 + 1 + + + HTIF5 + Stream x half transfer interrupt flag + (x=7..4) + 10 + 1 + + + TEIF5 + Stream x transfer error interrupt flag + (x=7..4) + 9 + 1 + + + DMEIF5 + Stream x direct mode error interrupt + flag (x=7..4) + 8 + 1 + + + FEIF5 + Stream x FIFO error interrupt flag + (x=7..4) + 6 + 1 + + + TCIF4 + Stream x transfer complete interrupt + flag (x=7..4) + 5 + 1 + + + HTIF4 + Stream x half transfer interrupt flag + (x=7..4) + 4 + 1 + + + TEIF4 + Stream x transfer error interrupt flag + (x=7..4) + 3 + 1 + + + DMEIF4 + Stream x direct mode error interrupt + flag (x=7..4) + 2 + 1 + + + FEIF4 + Stream x FIFO error interrupt flag + (x=7..4) + 0 + 1 + + + + + LIFCR + LIFCR + low interrupt flag clear + register + 0x8 + 0x20 + read-write + 0x00000000 + + + CTCIF3 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 27 + 1 + + + CHTIF3 + Stream x clear half transfer interrupt + flag (x = 3..0) + 26 + 1 + + + CTEIF3 + Stream x clear transfer error interrupt + flag (x = 3..0) + 25 + 1 + + + CDMEIF3 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 24 + 1 + + + CFEIF3 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 22 + 1 + + + CTCIF2 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 21 + 1 + + + CHTIF2 + Stream x clear half transfer interrupt + flag (x = 3..0) + 20 + 1 + + + CTEIF2 + Stream x clear transfer error interrupt + flag (x = 3..0) + 19 + 1 + + + CDMEIF2 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 18 + 1 + + + CFEIF2 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 16 + 1 + + + CTCIF1 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 11 + 1 + + + CHTIF1 + Stream x clear half transfer interrupt + flag (x = 3..0) + 10 + 1 + + + CTEIF1 + Stream x clear transfer error interrupt + flag (x = 3..0) + 9 + 1 + + + CDMEIF1 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 8 + 1 + + + CFEIF1 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 6 + 1 + + + CTCIF0 + Stream x clear transfer complete + interrupt flag (x = 3..0) + 5 + 1 + + + CHTIF0 + Stream x clear half transfer interrupt + flag (x = 3..0) + 4 + 1 + + + CTEIF0 + Stream x clear transfer error interrupt + flag (x = 3..0) + 3 + 1 + + + CDMEIF0 + Stream x clear direct mode error + interrupt flag (x = 3..0) + 2 + 1 + + + CFEIF0 + Stream x clear FIFO error interrupt flag + (x = 3..0) + 0 + 1 + + + + + HIFCR + HIFCR + high interrupt flag clear + register + 0xC + 0x20 + read-write + 0x00000000 + + + CTCIF7 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 27 + 1 + + + CHTIF7 + Stream x clear half transfer interrupt + flag (x = 7..4) + 26 + 1 + + + CTEIF7 + Stream x clear transfer error interrupt + flag (x = 7..4) + 25 + 1 + + + CDMEIF7 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 24 + 1 + + + CFEIF7 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 22 + 1 + + + CTCIF6 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 21 + 1 + + + CHTIF6 + Stream x clear half transfer interrupt + flag (x = 7..4) + 20 + 1 + + + CTEIF6 + Stream x clear transfer error interrupt + flag (x = 7..4) + 19 + 1 + + + CDMEIF6 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 18 + 1 + + + CFEIF6 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 16 + 1 + + + CTCIF5 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 11 + 1 + + + CHTIF5 + Stream x clear half transfer interrupt + flag (x = 7..4) + 10 + 1 + + + CTEIF5 + Stream x clear transfer error interrupt + flag (x = 7..4) + 9 + 1 + + + CDMEIF5 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 8 + 1 + + + CFEIF5 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 6 + 1 + + + CTCIF4 + Stream x clear transfer complete + interrupt flag (x = 7..4) + 5 + 1 + + + CHTIF4 + Stream x clear half transfer interrupt + flag (x = 7..4) + 4 + 1 + + + CTEIF4 + Stream x clear transfer error interrupt + flag (x = 7..4) + 3 + 1 + + + CDMEIF4 + Stream x clear direct mode error + interrupt flag (x = 7..4) + 2 + 1 + + + CFEIF4 + Stream x clear FIFO error interrupt flag + (x = 7..4) + 0 + 1 + + + + + S0CR + S0CR + stream x configuration + register + 0x10 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S0NDTR + S0NDTR + stream x number of data + register + 0x14 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S0PAR + S0PAR + stream x peripheral address + register + 0x18 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S0M0AR + S0M0AR + stream x memory 0 address + register + 0x1C + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S0M1AR + S0M1AR + stream x memory 1 address + register + 0x20 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S0FCR + S0FCR + stream x FIFO control register + 0x24 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S1CR + S1CR + stream x configuration + register + 0x28 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S1NDTR + S1NDTR + stream x number of data + register + 0x2C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S1PAR + S1PAR + stream x peripheral address + register + 0x30 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S1M0AR + S1M0AR + stream x memory 0 address + register + 0x34 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S1M1AR + S1M1AR + stream x memory 1 address + register + 0x38 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S1FCR + S1FCR + stream x FIFO control register + 0x3C + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S2CR + S2CR + stream x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S2NDTR + S2NDTR + stream x number of data + register + 0x44 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S2PAR + S2PAR + stream x peripheral address + register + 0x48 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S2M0AR + S2M0AR + stream x memory 0 address + register + 0x4C + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S2M1AR + S2M1AR + stream x memory 1 address + register + 0x50 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S2FCR + S2FCR + stream x FIFO control register + 0x54 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S3CR + S3CR + stream x configuration + register + 0x58 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S3NDTR + S3NDTR + stream x number of data + register + 0x5C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S3PAR + S3PAR + stream x peripheral address + register + 0x60 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S3M0AR + S3M0AR + stream x memory 0 address + register + 0x64 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S3M1AR + S3M1AR + stream x memory 1 address + register + 0x68 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S3FCR + S3FCR + stream x FIFO control register + 0x6C + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S4CR + S4CR + stream x configuration + register + 0x70 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S4NDTR + S4NDTR + stream x number of data + register + 0x74 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S4PAR + S4PAR + stream x peripheral address + register + 0x78 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S4M0AR + S4M0AR + stream x memory 0 address + register + 0x7C + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S4M1AR + S4M1AR + stream x memory 1 address + register + 0x80 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S4FCR + S4FCR + stream x FIFO control register + 0x84 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S5CR + S5CR + stream x configuration + register + 0x88 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S5NDTR + S5NDTR + stream x number of data + register + 0x8C + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S5PAR + S5PAR + stream x peripheral address + register + 0x90 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S5M0AR + S5M0AR + stream x memory 0 address + register + 0x94 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S5M1AR + S5M1AR + stream x memory 1 address + register + 0x98 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S5FCR + S5FCR + stream x FIFO control register + 0x9C + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S6CR + S6CR + stream x configuration + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S6NDTR + S6NDTR + stream x number of data + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S6PAR + S6PAR + stream x peripheral address + register + 0xA8 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S6M0AR + S6M0AR + stream x memory 0 address + register + 0xAC + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S6M1AR + S6M1AR + stream x memory 1 address + register + 0xB0 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S6FCR + S6FCR + stream x FIFO control register + 0xB4 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + S7CR + S7CR + stream x configuration + register + 0xB8 + 0x20 + read-write + 0x00000000 + + + MBURST + Memory burst transfer + configuration + 23 + 2 + + + PBURST + Peripheral burst transfer + configuration + 21 + 2 + + + ACK + ACK + 20 + 1 + + + CT + Current target (only in double buffer + mode) + 19 + 1 + + + DBM + Double buffer mode + 18 + 1 + + + PL + Priority level + 16 + 2 + + + PINCOS + Peripheral increment offset + size + 15 + 1 + + + MSIZE + Memory data size + 13 + 2 + + + PSIZE + Peripheral data size + 11 + 2 + + + MINC + Memory increment mode + 10 + 1 + + + PINC + Peripheral increment mode + 9 + 1 + + + CIRC + Circular mode + 8 + 1 + + + DIR + Data transfer direction + 6 + 2 + + + PFCTRL + Peripheral flow controller + 5 + 1 + + + TCIE + Transfer complete interrupt + enable + 4 + 1 + + + HTIE + Half transfer interrupt + enable + 3 + 1 + + + TEIE + Transfer error interrupt + enable + 2 + 1 + + + DMEIE + Direct mode error interrupt + enable + 1 + 1 + + + EN + Stream enable / flag stream ready when + read low + 0 + 1 + + + + + S7NDTR + S7NDTR + stream x number of data + register + 0xBC + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to + transfer + 0 + 16 + + + + + S7PAR + S7PAR + stream x peripheral address + register + 0xC0 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + S7M0AR + S7M0AR + stream x memory 0 address + register + 0xC4 + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + S7M1AR + S7M1AR + stream x memory 1 address + register + 0xC8 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double + buffer mode) + 0 + 32 + + + + + S7FCR + S7FCR + stream x FIFO control register + 0xCC + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt + enable + 7 + 1 + read-write + + + FS + FIFO status + 3 + 3 + read-only + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + + + + + + DMA2 + 0x40020400 + + DMA2_STR0 + DMA2 Stream0 interrupt + 56 + + + DMA2_STR1 + DMA2 Stream1 interrupt + 57 + + + DMA2_STR2 + DMA2 Stream2 interrupt + 58 + + + DMA2_STR3 + DMA2 Stream3 interrupt + 59 + + + DMA2_STR4 + DMA2 Stream4 interrupt + 60 + + + DMA2_STR5 + DMA2 Stream5 interrupt + 68 + + + DMA2_STR6 + DMA2 Stream6 interrupt + 69 + + + DMA2_STR7 + DMA2 Stream7 interrupt + 70 + + + + HRTIM_Master + High Resolution Timer: Master + Timers + HRTIM + 0x40017400 + + 0x0 + 0x80 + registers + + + + MCR + MCR + Master Timer Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + BRSTDMA + Burst DMA Update + 30 + 2 + + + MREPU + Master Timer Repetition + update + 29 + 1 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + TECEN + Timer E counter enable + 21 + 1 + + + TDCEN + Timer D counter enable + 20 + 1 + + + TCCEN + Timer C counter enable + 19 + 1 + + + TBCEN + Timer B counter enable + 18 + 1 + + + TACEN + Timer A counter enable + 17 + 1 + + + MCEN + Master Counter enable + 16 + 1 + + + SYNC_SRC + Synchronization source + 14 + 2 + + + SYNC_OUT + Synchronization output + 12 + 2 + + + SYNCSTRTM + Synchronization Starts + Master + 11 + 1 + + + SYNCRSTM + Synchronization Resets + Master + 10 + 1 + + + SYNC_IN + ynchronization input + 8 + 2 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Master Re-triggerable mode + 4 + 1 + + + CONT + Master Continuous mode + 3 + 1 + + + CK_PSC + HRTIM Master Clock + prescaler + 0 + 3 + + + + + MISR + MISR + Master Timer Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + MUPD + Master Update Interrupt + Flag + 6 + 1 + + + SYNC + Sync Input Interrupt Flag + 5 + 1 + + + MREP + Master Repetition Interrupt + Flag + 4 + 1 + + + MCMP4 + Master Compare 4 Interrupt + Flag + 3 + 1 + + + MCMP3 + Master Compare 3 Interrupt + Flag + 2 + 1 + + + MCMP2 + Master Compare 2 Interrupt + Flag + 1 + 1 + + + MCMP1 + Master Compare 1 Interrupt + Flag + 0 + 1 + + + + + MICR + MICR + Master Timer Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + MUPDC + Master update Interrupt flag + clear + 6 + 1 + + + SYNCC + Sync Input Interrupt flag + clear + 5 + 1 + + + MREPC + Repetition Interrupt flag + clear + 4 + 1 + + + MCMP4C + Master Compare 4 Interrupt flag + clear + 3 + 1 + + + MCMP3C + Master Compare 3 Interrupt flag + clear + 2 + 1 + + + MCMP2C + Master Compare 2 Interrupt flag + clear + 1 + 1 + + + MCMP1C + Master Compare 1 Interrupt flag + clear + 0 + 1 + + + + + MDIER4 + MDIER4 + MDIER4 + 0xC + 0x20 + read-write + 0x00000000 + + + MUPDDE + MUPDDE + 22 + 1 + + + SYNCDE + SYNCDE + 21 + 1 + + + MREPDE + MREPDE + 20 + 1 + + + MCMP4DE + MCMP4DE + 19 + 1 + + + MCMP3DE + MCMP3DE + 18 + 1 + + + MCMP2DE + MCMP2DE + 17 + 1 + + + MCMP1DE + MCMP1DE + 16 + 1 + + + MUPDIE + MUPDIE + 6 + 1 + + + SYNCIE + SYNCIE + 5 + 1 + + + MREPIE + MREPIE + 4 + 1 + + + MCMP4IE + MCMP4IE + 3 + 1 + + + MCMP3IE + MCMP3IE + 2 + 1 + + + MCMP2IE + MCMP2IE + 1 + 1 + + + MCMP1IE + MCMP1IE + 0 + 1 + + + + + MCNTR + MCNTR + Master Timer Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + MCNT + Counter value + 0 + 16 + + + + + MPER + MPER + Master Timer Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + MPER + Master Timer Period value + 0 + 16 + + + + + MREP + MREP + Master Timer Repetition + Register + 0x18 + 0x20 + read-write + 0x00000000 + + + MREP + Master Timer Repetition counter + value + 0 + 8 + + + + + MCMP1R + MCMP1R + Master Timer Compare 1 + Register + 0x1C + 0x20 + read-write + 0x00000000 + + + MCMP1 + Master Timer Compare 1 + value + 0 + 16 + + + + + MCMP2R + MCMP2R + Master Timer Compare 2 + Register + 0x24 + 0x20 + read-write + 0x00000000 + + + MCMP2 + Master Timer Compare 2 + value + 0 + 16 + + + + + MCMP3R + MCMP3R + Master Timer Compare 3 + Register + 0x28 + 0x20 + read-write + 0x00000000 + + + MCMP3 + Master Timer Compare 3 + value + 0 + 16 + + + + + MCMP4R + MCMP4R + Master Timer Compare 4 + Register + 0x2C + 0x20 + read-write + 0x00000000 + + + MCMP4 + Master Timer Compare 4 + value + 0 + 16 + + + + + + + HRTIM_TIMA + High Resolution Timer: TIMA + HRTIM + 0x40017480 + + 0x0 + 0x80 + registers + + + HRTIM1_MST + HRTIM1 master timer interrupt + 103 + + + HRTIM1_FLT + HRTIM1 fault interrupt + 109 + + + + TIMACR + TIMACR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMAISR + TIMAISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMAICR + TIMAICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMADIER5 + TIMADIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTAR + CNTAR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERAR + PERAR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPAR + REPAR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1AR + CMP1AR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CAR + CMP1CAR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2AR + CMP2AR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3AR + CMP3AR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4AR + CMP4AR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1AR + CPT1AR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2AR + CPT2AR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTAR + DTAR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETA1R + SETA1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTA1R + RSTA1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETA2R + SETA2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTA2R + RSTA2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFAR1 + EEFAR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFAR2 + EEFAR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTAR + RSTAR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMDCMP4 + Timer D Compare 4 + 27 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 26 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 25 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 24 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 23 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 22 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 21 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 20 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPAR + CHPAR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1ACR + CPT1ACR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2ACR + CPT2ACR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTAR + OUTAR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTAR + FLTAR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIMB + High Resolution Timer: TIMB + HRTIM + 0x40017500 + + 0x0 + 0x80 + registers + + + HRTIM1_TIMA + HRTIM1 timer A interrupt + 104 + + + + TIMBCR + TIMBCR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMBISR + TIMBISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMBICR + TIMBICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMBDIER5 + TIMBDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTR + CNTR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERBR + PERBR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPBR + REPBR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1BR + CMP1BR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CBR + CMP1CBR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2BR + CMP2BR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3BR + CMP3BR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4BR + CMP4BR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1BR + CPT1BR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2BR + CPT2BR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTBR + DTBR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETB1R + SETB1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTB1R + RSTB1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETB2R + SETB2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTB2R + RSTB2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFBR1 + EEFBR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFBR2 + EEFBR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTBR + RSTBR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMDCMP4 + Timer D Compare 4 + 27 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 26 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 25 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 24 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 23 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPBR + CHPBR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1BCR + CPT1BCR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2BCR + CPT2BCR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTBR + OUTBR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTBR + FLTBR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIMC + High Resolution Timer: TIMC + HRTIM + 0x40017580 + + 0x0 + 0x80 + registers + + + HRTIM_TIMB + HRTIM1 timer B interrupt + 105 + + + + TIMCCR + TIMCCR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMCISR + TIMCISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMCICR + TIMCICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMCDIER5 + TIMCDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTCR + CNTCR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERCR + PERCR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPCR + REPCR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1CR + CMP1CR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CCR + CMP1CCR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2CR + CMP2CR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3CR + CMP3CR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4CR + CMP4CR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1CR + CPT1CR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2CR + CPT2CR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTCR + DTCR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETC1R + SETC1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTC1R + RSTC1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETC2R + SETC2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTC2R + RSTC2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFCR1 + EEFCR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFCR2 + EEFCR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTCR + RSTCR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMDCMP4 + Timer D Compare 4 + 27 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 26 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 25 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 24 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 23 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPCR + CHPCR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1CCR + CPT1CCR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2CCR + CPT2CCR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTCR + OUTCR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTCR + FLTCR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIMD + High Resolution Timer: TIMD + HRTIM + 0x40017600 + + 0x0 + 0x80 + registers + + + HRTIM1_TIMC + HRTIM1 timer C interrupt + 106 + + + + TIMDCR + TIMDCR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMDISR + TIMDISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMDICR + TIMDICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMDDIER5 + TIMDDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTDR + CNTDR + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERDR + PERDR + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPDR + REPDR + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1DR + CMP1DR + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CDR + CMP1CDR + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2DR + CMP2DR + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3DR + CMP3DR + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4DR + CMP4DR + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1DR + CPT1DR + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2DR + CPT2DR + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTDR + DTDR + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETD1R + SETD1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTD1R + RSTD1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETD2R + SETD2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTD2R + RSTD2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFDR1 + EEFDR1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFDR2 + EEFDR2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTDR + RSTDR + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMECMP4 + Timer E Compare 4 + 30 + 1 + + + TIMECMP2 + Timer E Compare 2 + 29 + 1 + + + TIMECMP1 + Timer E Compare 1 + 28 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 27 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 26 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 25 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 24 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 23 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPDR + CHPDR + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1DCR + CPT1DCR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2DCR + CPT2DCR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TECMP2 + Timer E Compare 2 + 31 + 1 + + + TECMP1 + Timer E Compare 1 + 30 + 1 + + + TE1RST + Timer E output 1 Reset + 29 + 1 + + + TE1SET + Timer E output 1 Set + 28 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTDR + OUTDR + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTDR + FLTDR + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_TIME + High Resolution Timer: TIME + HRTIM + 0x40017680 + + 0x0 + 0x80 + registers + + + HRTIM1_TIMD + HRTIM1 timer D interrupt + 107 + + + + TIMECR + TIMECR + Timerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + UPDGAT + Update Gating + 28 + 4 + + + PREEN + Preload enable + 27 + 1 + + + DACSYNC + AC Synchronization + 25 + 2 + + + MSTU + Master Timer update + 24 + 1 + + + TEU + TEU + 23 + 1 + + + TDU + TDU + 22 + 1 + + + TCU + TCU + 21 + 1 + + + TBU + TBU + 20 + 1 + + + TxRSTU + Timerx reset update + 18 + 1 + + + TxREPU + Timer x Repetition update + 17 + 1 + + + DELCMP4 + Delayed CMP4 mode + 14 + 2 + + + DELCMP2 + Delayed CMP2 mode + 12 + 2 + + + SYNCSTRTx + Synchronization Starts Timer + x + 11 + 1 + + + SYNCRSTx + Synchronization Resets Timer + x + 10 + 1 + + + PSHPLL + Push-Pull mode enable + 6 + 1 + + + HALF + Half mode enable + 5 + 1 + + + RETRIG + Re-triggerable mode + 4 + 1 + + + CONT + Continuous mode + 3 + 1 + + + CK_PSCx + HRTIM Timer x Clock + prescaler + 0 + 3 + + + + + TIMEISR + TIMEISR + Timerx Interrupt Status + Register + 0x4 + 0x20 + read-only + 0x00000000 + + + O2STAT + Output 2 State + 19 + 1 + + + O1STAT + Output 1 State + 18 + 1 + + + IPPSTAT + Idle Push Pull Status + 17 + 1 + + + CPPSTAT + Current Push Pull Status + 16 + 1 + + + DLYPRT + Delayed Protection Flag + 14 + 1 + + + RST + Reset Interrupt Flag + 13 + 1 + + + RSTx2 + Output 2 Reset Interrupt + Flag + 12 + 1 + + + SETx2 + Output 2 Set Interrupt + Flag + 11 + 1 + + + RSTx1 + Output 1 Reset Interrupt + Flag + 10 + 1 + + + SETx1 + Output 1 Set Interrupt + Flag + 9 + 1 + + + CPT2 + Capture2 Interrupt Flag + 8 + 1 + + + CPT1 + Capture1 Interrupt Flag + 7 + 1 + + + UPD + Update Interrupt Flag + 6 + 1 + + + REP + Repetition Interrupt Flag + 4 + 1 + + + CMP4 + Compare 4 Interrupt Flag + 3 + 1 + + + CMP3 + Compare 3 Interrupt Flag + 2 + 1 + + + CMP2 + Compare 2 Interrupt Flag + 1 + 1 + + + CMP1 + Compare 1 Interrupt Flag + 0 + 1 + + + + + TIMEICR + TIMEICR + Timerx Interrupt Clear + Register + 0x8 + 0x20 + write-only + 0x00000000 + + + DLYPRTC + Delayed Protection Flag + Clear + 14 + 1 + + + RSTC + Reset Interrupt flag Clear + 13 + 1 + + + RSTx2C + Output 2 Reset flag Clear + 12 + 1 + + + SET2xC + Output 2 Set flag Clear + 11 + 1 + + + RSTx1C + Output 1 Reset flag Clear + 10 + 1 + + + SET1xC + Output 1 Set flag Clear + 9 + 1 + + + CPT2C + Capture2 Interrupt flag + Clear + 8 + 1 + + + CPT1C + Capture1 Interrupt flag + Clear + 7 + 1 + + + UPDC + Update Interrupt flag + Clear + 6 + 1 + + + REPC + Repetition Interrupt flag + Clear + 4 + 1 + + + CMP4C + Compare 4 Interrupt flag + Clear + 3 + 1 + + + CMP3C + Compare 3 Interrupt flag + Clear + 2 + 1 + + + CMP2C + Compare 2 Interrupt flag + Clear + 1 + 1 + + + CMP1C + Compare 1 Interrupt flag + Clear + 0 + 1 + + + + + TIMEDIER5 + TIMEDIER5 + TIMxDIER5 + 0xC + 0x20 + read-write + 0x00000000 + + + DLYPRTDE + DLYPRTDE + 30 + 1 + + + RSTDE + RSTDE + 29 + 1 + + + RSTx2DE + RSTx2DE + 28 + 1 + + + SETx2DE + SETx2DE + 27 + 1 + + + RSTx1DE + RSTx1DE + 26 + 1 + + + SET1xDE + SET1xDE + 25 + 1 + + + CPT2DE + CPT2DE + 24 + 1 + + + CPT1DE + CPT1DE + 23 + 1 + + + UPDDE + UPDDE + 22 + 1 + + + REPDE + REPDE + 20 + 1 + + + CMP4DE + CMP4DE + 19 + 1 + + + CMP3DE + CMP3DE + 18 + 1 + + + CMP2DE + CMP2DE + 17 + 1 + + + CMP1DE + CMP1DE + 16 + 1 + + + DLYPRTIE + DLYPRTIE + 14 + 1 + + + RSTIE + RSTIE + 13 + 1 + + + RSTx2IE + RSTx2IE + 12 + 1 + + + SETx2IE + SETx2IE + 11 + 1 + + + RSTx1IE + RSTx1IE + 10 + 1 + + + SET1xIE + SET1xIE + 9 + 1 + + + CPT2IE + CPT2IE + 8 + 1 + + + CPT1IE + CPT1IE + 7 + 1 + + + UPDIE + UPDIE + 6 + 1 + + + REPIE + REPIE + 4 + 1 + + + CMP4IE + CMP4IE + 3 + 1 + + + CMP3IE + CMP3IE + 2 + 1 + + + CMP2IE + CMP2IE + 1 + 1 + + + CMP1IE + CMP1IE + 0 + 1 + + + + + CNTER + CNTER + Timerx Counter Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTx + Timerx Counter value + 0 + 16 + + + + + PERER + PERER + Timerx Period Register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + PERx + Timerx Period value + 0 + 16 + + + + + REPER + REPER + Timerx Repetition Register + 0x18 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition counter + value + 0 + 8 + + + + + CMP1ER + CMP1ER + Timerx Compare 1 Register + 0x1C + 0x20 + read-write + 0x00000000 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP1CER + CMP1CER + Timerx Compare 1 Compound + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + REPx + Timerx Repetition value (aliased from + HRTIM_REPx register) + 16 + 8 + + + CMP1x + Timerx Compare 1 value + 0 + 16 + + + + + CMP2ER + CMP2ER + Timerx Compare 2 Register + 0x24 + 0x20 + read-write + 0x00000000 + + + CMP2x + Timerx Compare 2 value + 0 + 16 + + + + + CMP3ER + CMP3ER + Timerx Compare 3 Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CMP3x + Timerx Compare 3 value + 0 + 16 + + + + + CMP4ER + CMP4ER + Timerx Compare 4 Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CMP4x + Timerx Compare 4 value + 0 + 16 + + + + + CPT1ER + CPT1ER + Timerx Capture 1 Register + 0x30 + 0x20 + read-only + 0x00000000 + + + CPT1x + Timerx Capture 1 value + 0 + 16 + + + + + CPT2ER + CPT2ER + Timerx Capture 2 Register + 0x34 + 0x20 + read-only + 0x00000000 + + + CPT2x + Timerx Capture 2 value + 0 + 16 + + + + + DTER + DTER + Timerx Deadtime Register + 0x38 + 0x20 + read-write + 0x00000000 + + + DTFLKx + Deadtime Falling Lock + 31 + 1 + + + DTFSLKx + Deadtime Falling Sign Lock + 30 + 1 + + + SDTFx + Sign Deadtime Falling + value + 25 + 1 + + + DTFx + Deadtime Falling value + 16 + 9 + + + DTRLKx + Deadtime Rising Lock + 15 + 1 + + + DTRSLKx + Deadtime Rising Sign Lock + 14 + 1 + + + DTPRSC + Deadtime Prescaler + 10 + 3 + + + SDTRx + Sign Deadtime Rising value + 9 + 1 + + + DTRx + Deadtime Rising value + 0 + 9 + + + + + SETE1R + SETE1R + Timerx Output1 Set Register + 0x3C + 0x20 + read-write + 0x00000000 + + + UPDATE + Registers update (transfer preload to + active) + 31 + 1 + + + EXTEVNT10 + External Event 10 + 30 + 1 + + + EXTEVNT9 + External Event 9 + 29 + 1 + + + EXTEVNT8 + External Event 8 + 28 + 1 + + + EXTEVNT7 + External Event 7 + 27 + 1 + + + EXTEVNT6 + External Event 6 + 26 + 1 + + + EXTEVNT5 + External Event 5 + 25 + 1 + + + EXTEVNT4 + External Event 4 + 24 + 1 + + + EXTEVNT3 + External Event 3 + 23 + 1 + + + EXTEVNT2 + External Event 2 + 22 + 1 + + + EXTEVNT1 + External Event 1 + 21 + 1 + + + TIMEVNT9 + Timer Event 9 + 20 + 1 + + + TIMEVNT8 + Timer Event 8 + 19 + 1 + + + TIMEVNT7 + Timer Event 7 + 18 + 1 + + + TIMEVNT6 + Timer Event 6 + 17 + 1 + + + TIMEVNT5 + Timer Event 5 + 16 + 1 + + + TIMEVNT4 + Timer Event 4 + 15 + 1 + + + TIMEVNT3 + Timer Event 3 + 14 + 1 + + + TIMEVNT2 + Timer Event 2 + 13 + 1 + + + TIMEVNT1 + Timer Event 1 + 12 + 1 + + + MSTCMP4 + Master Compare 4 + 11 + 1 + + + MSTCMP3 + Master Compare 3 + 10 + 1 + + + MSTCMP2 + Master Compare 2 + 9 + 1 + + + MSTCMP1 + Master Compare 1 + 8 + 1 + + + MSTPER + Master Period + 7 + 1 + + + CMP4 + Timer A compare 4 + 6 + 1 + + + CMP3 + Timer A compare 3 + 5 + 1 + + + CMP2 + Timer A compare 2 + 4 + 1 + + + CMP1 + Timer A compare 1 + 3 + 1 + + + PER + Timer A Period + 2 + 1 + + + RESYNC + Timer A resynchronizaton + 1 + 1 + + + SST + Software Set trigger + 0 + 1 + + + + + RSTE1R + RSTE1R + Timerx Output1 Reset Register + 0x40 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + SETE2R + SETE2R + Timerx Output2 Set Register + 0x44 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SST + SST + 0 + 1 + + + + + RSTE2R + RSTE2R + Timerx Output2 Reset Register + 0x48 + 0x20 + read-write + 0x00000000 + + + UPDATE + UPDATE + 31 + 1 + + + EXTEVNT10 + EXTEVNT10 + 30 + 1 + + + EXTEVNT9 + EXTEVNT9 + 29 + 1 + + + EXTEVNT8 + EXTEVNT8 + 28 + 1 + + + EXTEVNT7 + EXTEVNT7 + 27 + 1 + + + EXTEVNT6 + EXTEVNT6 + 26 + 1 + + + EXTEVNT5 + EXTEVNT5 + 25 + 1 + + + EXTEVNT4 + EXTEVNT4 + 24 + 1 + + + EXTEVNT3 + EXTEVNT3 + 23 + 1 + + + EXTEVNT2 + EXTEVNT2 + 22 + 1 + + + EXTEVNT1 + EXTEVNT1 + 21 + 1 + + + TIMEVNT9 + TIMEVNT9 + 20 + 1 + + + TIMEVNT8 + TIMEVNT8 + 19 + 1 + + + TIMEVNT7 + TIMEVNT7 + 18 + 1 + + + TIMEVNT6 + TIMEVNT6 + 17 + 1 + + + TIMEVNT5 + TIMEVNT5 + 16 + 1 + + + TIMEVNT4 + TIMEVNT4 + 15 + 1 + + + TIMEVNT3 + TIMEVNT3 + 14 + 1 + + + TIMEVNT2 + TIMEVNT2 + 13 + 1 + + + TIMEVNT1 + TIMEVNT1 + 12 + 1 + + + MSTCMP4 + MSTCMP4 + 11 + 1 + + + MSTCMP3 + MSTCMP3 + 10 + 1 + + + MSTCMP2 + MSTCMP2 + 9 + 1 + + + MSTCMP1 + MSTCMP1 + 8 + 1 + + + MSTPER + MSTPER + 7 + 1 + + + CMP4 + CMP4 + 6 + 1 + + + CMP3 + CMP3 + 5 + 1 + + + CMP2 + CMP2 + 4 + 1 + + + CMP1 + CMP1 + 3 + 1 + + + PER + PER + 2 + 1 + + + RESYNC + RESYNC + 1 + 1 + + + SRT + SRT + 0 + 1 + + + + + EEFER1 + EEFER1 + Timerx External Event Filtering Register + 1 + 0x4C + 0x20 + read-write + 0x00000000 + + + EE5FLTR + External Event 5 filter + 25 + 4 + + + EE5LTCH + External Event 5 latch + 24 + 1 + + + EE4FLTR + External Event 4 filter + 19 + 4 + + + EE4LTCH + External Event 4 latch + 18 + 1 + + + EE3FLTR + External Event 3 filter + 13 + 4 + + + EE3LTCH + External Event 3 latch + 12 + 1 + + + EE2FLTR + External Event 2 filter + 7 + 4 + + + EE2LTCH + External Event 2 latch + 6 + 1 + + + EE1FLTR + External Event 1 filter + 1 + 4 + + + EE1LTCH + External Event 1 latch + 0 + 1 + + + + + EEFER2 + EEFER2 + Timerx External Event Filtering Register + 2 + 0x50 + 0x20 + read-write + 0x00000000 + + + EE10FLTR + External Event 10 filter + 25 + 4 + + + EE10LTCH + External Event 10 latch + 24 + 1 + + + EE9FLTR + External Event 9 filter + 19 + 4 + + + EE9LTCH + External Event 9 latch + 18 + 1 + + + EE8FLTR + External Event 8 filter + 13 + 4 + + + EE8LTCH + External Event 8 latch + 12 + 1 + + + EE7FLTR + External Event 7 filter + 7 + 4 + + + EE7LTCH + External Event 7 latch + 6 + 1 + + + EE6FLTR + External Event 6 filter + 1 + 4 + + + EE6LTCH + External Event 6 latch + 0 + 1 + + + + + RSTER + RSTER + TimerA Reset Register + 0x54 + 0x20 + read-write + 0x00000000 + + + TIMDCMP4 + Timer D Compare 4 + 30 + 1 + + + TIMDCMP2 + Timer D Compare 2 + 29 + 1 + + + TIMDCMP1 + Timer D Compare 1 + 28 + 1 + + + TIMCCMP4 + Timer C Compare 4 + 27 + 1 + + + TIMCCMP2 + Timer C Compare 2 + 26 + 1 + + + TIMCCMP1 + Timer C Compare 1 + 25 + 1 + + + TIMBCMP4 + Timer B Compare 4 + 24 + 1 + + + TIMBCMP2 + Timer B Compare 2 + 23 + 1 + + + TIMBCMP1 + Timer B Compare 1 + 22 + 1 + + + TIMACMP4 + Timer A Compare 4 + 21 + 1 + + + TIMACMP2 + Timer A Compare 2 + 20 + 1 + + + TIMACMP1 + Timer A Compare 1 + 19 + 1 + + + EXTEVNT10 + External Event 10 + 18 + 1 + + + EXTEVNT9 + External Event 9 + 17 + 1 + + + EXTEVNT8 + External Event 8 + 16 + 1 + + + EXTEVNT7 + External Event 7 + 15 + 1 + + + EXTEVNT6 + External Event 6 + 14 + 1 + + + EXTEVNT5 + External Event 5 + 13 + 1 + + + EXTEVNT4 + External Event 4 + 12 + 1 + + + EXTEVNT3 + External Event 3 + 11 + 1 + + + EXTEVNT2 + External Event 2 + 10 + 1 + + + EXTEVNT1 + External Event 1 + 9 + 1 + + + MSTCMP4 + Master compare 4 + 8 + 1 + + + MSTCMP3 + Master compare 3 + 7 + 1 + + + MSTCMP2 + Master compare 2 + 6 + 1 + + + MSTCMP1 + Master compare 1 + 5 + 1 + + + MSTPER + Master timer Period + 4 + 1 + + + CMP4 + Timer A compare 4 reset + 3 + 1 + + + CMP2 + Timer A compare 2 reset + 2 + 1 + + + UPDT + Timer A Update reset + 1 + 1 + + + + + CHPER + CHPER + Timerx Chopper Register + 0x58 + 0x20 + read-write + 0x00000000 + + + STRTPW + STRTPW + 7 + 4 + + + CHPDTY + Timerx chopper duty cycle + value + 4 + 3 + + + CHPFRQ + Timerx carrier frequency + value + 0 + 4 + + + + + CPT1ECR + CPT1ECR + Timerx Capture 2 Control + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + CPT2ECR + CPT2ECR + CPT2xCR + 0x60 + 0x20 + read-write + 0x00000000 + + + TDCMP2 + Timer D Compare 2 + 27 + 1 + + + TDCMP1 + Timer D Compare 1 + 26 + 1 + + + TD1RST + Timer D output 1 Reset + 25 + 1 + + + TD1SET + Timer D output 1 Set + 24 + 1 + + + TCCMP2 + Timer C Compare 2 + 23 + 1 + + + TCCMP1 + Timer C Compare 1 + 22 + 1 + + + TC1RST + Timer C output 1 Reset + 21 + 1 + + + TC1SET + Timer C output 1 Set + 20 + 1 + + + TBCMP2 + Timer B Compare 2 + 19 + 1 + + + TBCMP1 + Timer B Compare 1 + 18 + 1 + + + TB1RST + Timer B output 1 Reset + 17 + 1 + + + TB1SET + Timer B output 1 Set + 16 + 1 + + + TACMP2 + Timer A Compare 2 + 15 + 1 + + + TACMP1 + Timer A Compare 1 + 14 + 1 + + + TA1RST + Timer A output 1 Reset + 13 + 1 + + + TA1SET + Timer A output 1 Set + 12 + 1 + + + EXEV10CPT + External Event 10 Capture + 11 + 1 + + + EXEV9CPT + External Event 9 Capture + 10 + 1 + + + EXEV8CPT + External Event 8 Capture + 9 + 1 + + + EXEV7CPT + External Event 7 Capture + 8 + 1 + + + EXEV6CPT + External Event 6 Capture + 7 + 1 + + + EXEV5CPT + External Event 5 Capture + 6 + 1 + + + EXEV4CPT + External Event 4 Capture + 5 + 1 + + + EXEV3CPT + External Event 3 Capture + 4 + 1 + + + EXEV2CPT + External Event 2 Capture + 3 + 1 + + + EXEV1CPT + External Event 1 Capture + 2 + 1 + + + UDPCPT + Update Capture + 1 + 1 + + + SWCPT + Software Capture + 0 + 1 + + + + + OUTER + OUTER + Timerx Output Register + 0x64 + 0x20 + read-write + 0x00000000 + + + DIDL2 + Output 2 Deadtime upon burst mode Idle + entry + 23 + 1 + + + CHP2 + Output 2 Chopper enable + 22 + 1 + + + FAULT2 + Output 2 Fault state + 20 + 2 + + + IDLES2 + Output 2 Idle State + 19 + 1 + + + IDLEM2 + Output 2 Idle mode + 18 + 1 + + + POL2 + Output 2 polarity + 17 + 1 + + + DLYPRT + Delayed Protection + 10 + 3 + + + DLYPRTEN + Delayed Protection Enable + 9 + 1 + + + DTEN + Deadtime enable + 8 + 1 + + + DIDL1 + Output 1 Deadtime upon burst mode Idle + entry + 7 + 1 + + + CHP1 + Output 1 Chopper enable + 6 + 1 + + + FAULT1 + Output 1 Fault state + 4 + 2 + + + IDLES1 + Output 1 Idle State + 3 + 1 + + + IDLEM1 + Output 1 Idle mode + 2 + 1 + + + POL1 + Output 1 polarity + 1 + 1 + + + + + FLTER + FLTER + Timerx Fault Register + 0x68 + 0x20 + read-write + 0x00000000 + + + FLTLCK + Fault sources Lock + 31 + 1 + + + FLT5EN + Fault 5 enable + 4 + 1 + + + FLT4EN + Fault 4 enable + 3 + 1 + + + FLT3EN + Fault 3 enable + 2 + 1 + + + FLT2EN + Fault 2 enable + 1 + 1 + + + FLT1EN + Fault 1 enable + 0 + 1 + + + + + + + HRTIM_Common + High Resolution Timer: Common + functions + HRTIM + 0x40017780 + + 0x0 + 0x80 + registers + + + HRTIM_TIME + HRTIM1 timer E interrupt + 108 + + + + CR1 + CR1 + Control Register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + AD4USRC + ADC Trigger 4 Update + Source + 25 + 3 + + + AD3USRC + ADC Trigger 3 Update + Source + 22 + 3 + + + AD2USRC + ADC Trigger 2 Update + Source + 19 + 3 + + + AD1USRC + ADC Trigger 1 Update + Source + 16 + 3 + + + TEUDIS + Timer E Update Disable + 5 + 1 + + + TDUDIS + Timer D Update Disable + 4 + 1 + + + TCUDIS + Timer C Update Disable + 3 + 1 + + + TBUDIS + Timer B Update Disable + 2 + 1 + + + TAUDIS + Timer A Update Disable + 1 + 1 + + + MUDIS + Master Update Disable + 0 + 1 + + + + + CR2 + CR2 + Control Register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + TERST + Timer E counter software + reset + 13 + 1 + + + TDRST + Timer D counter software + reset + 12 + 1 + + + TCRST + Timer C counter software + reset + 11 + 1 + + + TBRST + Timer B counter software + reset + 10 + 1 + + + TARST + Timer A counter software + reset + 9 + 1 + + + MRST + Master Counter software + reset + 8 + 1 + + + TESWU + Timer E Software Update + 5 + 1 + + + TDSWU + Timer D Software Update + 4 + 1 + + + TCSWU + Timer C Software Update + 3 + 1 + + + TBSWU + Timer B Software Update + 2 + 1 + + + TASWU + Timer A Software update + 1 + 1 + + + MSWU + Master Timer Software + update + 0 + 1 + + + + + ISR + ISR + Interrupt Status Register + 0x8 + 0x20 + 0x00000000 + + + BMPER + Burst mode Period Interrupt + Flag + 17 + 1 + read-only + + + DLLRDY + DLL Ready Interrupt Flag + 16 + 1 + read-only + + + SYSFLT + System Fault Interrupt + Flag + 5 + 1 + read-write + + + FLT5 + Fault 5 Interrupt Flag + 4 + 1 + read-only + + + FLT4 + Fault 4 Interrupt Flag + 3 + 1 + read-only + + + FLT3 + Fault 3 Interrupt Flag + 2 + 1 + read-only + + + FLT2 + Fault 2 Interrupt Flag + 1 + 1 + read-only + + + FLT1 + Fault 1 Interrupt Flag + 0 + 1 + read-only + + + + + ICR + ICR + Interrupt Clear Register + 0xC + 0x20 + 0x00000000 + + + BMPERC + Burst mode period flag + Clear + 17 + 1 + write-only + + + DLLRDYC + DLL Ready Interrupt flag + Clear + 16 + 1 + write-only + + + SYSFLTC + System Fault Interrupt Flag + Clear + 5 + 1 + read-write + + + FLT5C + Fault 5 Interrupt Flag + Clear + 4 + 1 + write-only + + + FLT4C + Fault 4 Interrupt Flag + Clear + 3 + 1 + write-only + + + FLT3C + Fault 3 Interrupt Flag + Clear + 2 + 1 + write-only + + + FLT2C + Fault 2 Interrupt Flag + Clear + 1 + 1 + write-only + + + FLT1C + Fault 1 Interrupt Flag + Clear + 0 + 1 + write-only + + + + + IER + IER + Interrupt Enable Register + 0x10 + 0x20 + read-write + 0x00000000 + + + BMPERIE + Burst mode period Interrupt + Enable + 17 + 1 + + + DLLRDYIE + DLL Ready Interrupt Enable + 16 + 1 + + + SYSFLTE + System Fault Interrupt + Enable + 5 + 1 + + + FLT5IE + Fault 5 Interrupt Enable + 4 + 1 + + + FLT4IE + Fault 4 Interrupt Enable + 3 + 1 + + + FLT3IE + Fault 3 Interrupt Enable + 2 + 1 + + + FLT2IE + Fault 2 Interrupt Enable + 1 + 1 + + + FLT1IE + Fault 1 Interrupt Enable + 0 + 1 + + + + + OENR + OENR + Output Enable Register + 0x14 + 0x20 + write-only + 0x00000000 + + + TE2OEN + Timer E Output 2 Enable + 9 + 1 + + + TE1OEN + Timer E Output 1 Enable + 8 + 1 + + + TD2OEN + Timer D Output 2 Enable + 7 + 1 + + + TD1OEN + Timer D Output 1 Enable + 6 + 1 + + + TC2OEN + Timer C Output 2 Enable + 5 + 1 + + + TC1OEN + Timer C Output 1 Enable + 4 + 1 + + + TB2OEN + Timer B Output 2 Enable + 3 + 1 + + + TB1OEN + Timer B Output 1 Enable + 2 + 1 + + + TA2OEN + Timer A Output 2 Enable + 1 + 1 + + + TA1OEN + Timer A Output 1 Enable + 0 + 1 + + + + + DISR + DISR + DISR + 0x18 + 0x20 + read-write + 0x00000000 + + + TE2ODIS + TE2ODIS + 9 + 1 + + + TE1ODIS + TE1ODIS + 8 + 1 + + + TD2ODIS + TD2ODIS + 7 + 1 + + + TD1ODIS + TD1ODIS + 6 + 1 + + + TC2ODIS + TC2ODIS + 5 + 1 + + + TC1ODIS + TC1ODIS + 4 + 1 + + + TB2ODIS + TB2ODIS + 3 + 1 + + + TB1ODIS + TB1ODIS + 2 + 1 + + + TA2ODIS + TA2ODIS + 1 + 1 + + + TA1ODIS + TA1ODIS + 0 + 1 + + + + + ODSR + ODSR + Output Disable Status Register + 0x1C + 0x20 + read-only + 0x00000000 + + + TE2ODS + Timer E Output 2 disable + status + 9 + 1 + + + TE1ODS + Timer E Output 1 disable + status + 8 + 1 + + + TD2ODS + Timer D Output 2 disable + status + 7 + 1 + + + TD1ODS + Timer D Output 1 disable + status + 6 + 1 + + + TC2ODS + Timer C Output 2 disable + status + 5 + 1 + + + TC1ODS + Timer C Output 1 disable + status + 4 + 1 + + + TB2ODS + Timer B Output 2 disable + status + 3 + 1 + + + TB1ODS + Timer B Output 1 disable + status + 2 + 1 + + + TA2ODS + Timer A Output 2 disable + status + 1 + 1 + + + TA1ODS + Timer A Output 1 disable + status + 0 + 1 + + + + + BMCR + BMCR + Burst Mode Control Register + 0x20 + 0x20 + read-write + 0x00000000 + + + BMSTAT + Burst Mode Status + 31 + 1 + + + TEBM + Timer E Burst Mode + 21 + 1 + + + TDBM + Timer D Burst Mode + 20 + 1 + + + TCBM + Timer C Burst Mode + 19 + 1 + + + TBBM + Timer B Burst Mode + 18 + 1 + + + TABM + Timer A Burst Mode + 17 + 1 + + + MTBM + Master Timer Burst Mode + 16 + 1 + + + BMPREN + Burst Mode Preload Enable + 10 + 1 + + + BMPRSC + Burst Mode Prescaler + 6 + 4 + + + BMCLK + Burst Mode Clock source + 2 + 4 + + + BMOM + Burst Mode operating mode + 1 + 1 + + + BME + Burst Mode enable + 0 + 1 + + + + + BMTRG + BMTRG + BMTRG + 0x24 + 0x20 + read-write + 0x00000000 + + + OCHPEV + OCHPEV + 31 + 1 + + + TECMP2 + TECMP2 + 26 + 1 + + + TECMP1 + TECMP1 + 25 + 1 + + + TEREP + TEREP + 24 + 1 + + + TERST + TERST + 23 + 1 + + + TDCMP2 + TDCMP2 + 22 + 1 + + + TDCMP1 + TDCMP1 + 21 + 1 + + + TDREP + TDREP + 20 + 1 + + + TDRST + TDRST + 19 + 1 + + + TCCMP2 + TCCMP2 + 18 + 1 + + + TCCMP1 + TCCMP1 + 17 + 1 + + + TCREP + TCREP + 16 + 1 + + + TCRST + TCRST + 15 + 1 + + + TBCMP2 + TBCMP2 + 14 + 1 + + + TBCMP1 + TBCMP1 + 13 + 1 + + + TBREP + TBREP + 12 + 1 + + + TBRST + TBRST + 11 + 1 + + + TACMP2 + TACMP2 + 10 + 1 + + + TACMP1 + TACMP1 + 9 + 1 + + + TAREP + TAREP + 8 + 1 + + + TARST + TARST + 7 + 1 + + + MSTCMP4 + MSTCMP4 + 6 + 1 + + + MSTCMP3 + MSTCMP3 + 5 + 1 + + + MSTCMP2 + MSTCMP2 + 4 + 1 + + + MSTCMP1 + MSTCMP1 + 3 + 1 + + + MSTREP + MSTREP + 2 + 1 + + + MSTRST + MSTRST + 1 + 1 + + + SW + SW + 0 + 1 + + + + + BMCMPR6 + BMCMPR6 + BMCMPR6 + 0x28 + 0x20 + read-write + 0x00000000 + + + BMCMP + BMCMP + 0 + 16 + + + + + BMPER + BMPER + Burst Mode Period Register + 0x2C + 0x20 + read-write + 0x00000000 + + + BMPER + Burst mode Period + 0 + 16 + + + + + EECR1 + EECR1 + Timer External Event Control Register + 1 + 0x30 + 0x20 + read-write + 0x00000000 + + + EE5FAST + External Event 5 Fast mode + 29 + 1 + + + EE5SNS + External Event 5 + Sensitivity + 27 + 2 + + + EE5POL + External Event 5 Polarity + 26 + 1 + + + EE5SRC + External Event 5 Source + 24 + 2 + + + EE4FAST + External Event 4 Fast mode + 23 + 1 + + + EE4SNS + External Event 4 + Sensitivity + 21 + 2 + + + EE4POL + External Event 4 Polarity + 20 + 1 + + + EE4SRC + External Event 4 Source + 18 + 2 + + + EE3FAST + External Event 3 Fast mode + 17 + 1 + + + EE3SNS + External Event 3 + Sensitivity + 15 + 2 + + + EE3POL + External Event 3 Polarity + 14 + 1 + + + EE3SRC + External Event 3 Source + 12 + 2 + + + EE2FAST + External Event 2 Fast mode + 11 + 1 + + + EE2SNS + External Event 2 + Sensitivity + 9 + 2 + + + EE2POL + External Event 2 Polarity + 8 + 1 + + + EE2SRC + External Event 2 Source + 6 + 2 + + + EE1FAST + External Event 1 Fast mode + 5 + 1 + + + EE1SNS + External Event 1 + Sensitivity + 3 + 2 + + + EE1POL + External Event 1 Polarity + 2 + 1 + + + EE1SRC + External Event 1 Source + 0 + 2 + + + + + EECR2 + EECR2 + Timer External Event Control Register + 2 + 0x34 + 0x20 + read-write + 0x00000000 + + + EE10SNS + External Event 10 + Sensitivity + 27 + 2 + + + EE10POL + External Event 10 Polarity + 26 + 1 + + + EE10SRC + External Event 10 Source + 24 + 2 + + + EE9SNS + External Event 9 + Sensitivity + 21 + 2 + + + EE9POL + External Event 9 Polarity + 20 + 1 + + + EE9SRC + External Event 9 Source + 18 + 2 + + + EE8SNS + External Event 8 + Sensitivity + 15 + 2 + + + EE8POL + External Event 8 Polarity + 14 + 1 + + + EE8SRC + External Event 8 Source + 12 + 2 + + + EE7SNS + External Event 7 + Sensitivity + 9 + 2 + + + EE7POL + External Event 7 Polarity + 8 + 1 + + + EE7SRC + External Event 7 Source + 6 + 2 + + + EE6SNS + External Event 6 + Sensitivity + 3 + 2 + + + EE6POL + External Event 6 Polarity + 2 + 1 + + + EE6SRC + External Event 6 Source + 0 + 2 + + + + + EECR3 + EECR3 + Timer External Event Control Register + 3 + 0x38 + 0x20 + read-write + 0x00000000 + + + EE10SNS + EE10SNS + 27 + 2 + + + EE10POL + EE10POL + 26 + 1 + + + EE10SRC + EE10SRC + 24 + 2 + + + EE9SNS + EE9SNS + 21 + 2 + + + EE9POL + EE9POL + 20 + 1 + + + EE9SRC + EE9SRC + 18 + 2 + + + EE8SNS + EE8SNS + 15 + 2 + + + EE8POL + EE8POL + 14 + 1 + + + EE8SRC + EE8SRC + 12 + 2 + + + EE7SNS + EE7SNS + 9 + 2 + + + EE7POL + EE7POL + 8 + 1 + + + EE7SRC + EE7SRC + 6 + 2 + + + EE6SNS + EE6SNS + 3 + 2 + + + EE6POL + EE6POL + 2 + 1 + + + EE6SRC + EE6SRC + 0 + 2 + + + + + ADC1R + ADC1R + ADC Trigger 1 Register + 0x3C + 0x20 + read-write + 0x00000000 + + + AD1TEPER + ADC trigger 1 on Timer E + Period + 31 + 1 + + + AD1TEC4 + ADC trigger 1 on Timer E compare + 4 + 30 + 1 + + + AD1TEC3 + ADC trigger 1 on Timer E compare + 3 + 29 + 1 + + + AD1TEC2 + ADC trigger 1 on Timer E compare + 2 + 28 + 1 + + + AD1TDPER + ADC trigger 1 on Timer D + Period + 27 + 1 + + + AD1TDC4 + ADC trigger 1 on Timer D compare + 4 + 26 + 1 + + + AD1TDC3 + ADC trigger 1 on Timer D compare + 3 + 25 + 1 + + + AD1TDC2 + ADC trigger 1 on Timer D compare + 2 + 24 + 1 + + + AD1TCPER + ADC trigger 1 on Timer C + Period + 23 + 1 + + + AD1TCC4 + ADC trigger 1 on Timer C compare + 4 + 22 + 1 + + + AD1TCC3 + ADC trigger 1 on Timer C compare + 3 + 21 + 1 + + + AD1TCC2 + ADC trigger 1 on Timer C compare + 2 + 20 + 1 + + + AD1TBRST + ADC trigger 1 on Timer B + Reset + 19 + 1 + + + AD1TBPER + ADC trigger 1 on Timer B + Period + 18 + 1 + + + AD1TBC4 + ADC trigger 1 on Timer B compare + 4 + 17 + 1 + + + AD1TBC3 + ADC trigger 1 on Timer B compare + 3 + 16 + 1 + + + AD1TBC2 + ADC trigger 1 on Timer B compare + 2 + 15 + 1 + + + AD1TARST + ADC trigger 1 on Timer A + Reset + 14 + 1 + + + AD1TAPER + ADC trigger 1 on Timer A + Period + 13 + 1 + + + AD1TAC4 + ADC trigger 1 on Timer A compare + 4 + 12 + 1 + + + AD1TAC3 + ADC trigger 1 on Timer A compare + 3 + 11 + 1 + + + AD1TAC2 + ADC trigger 1 on Timer A compare + 2 + 10 + 1 + + + AD1EEV5 + ADC trigger 1 on External Event + 5 + 9 + 1 + + + AD1EEV4 + ADC trigger 1 on External Event + 4 + 8 + 1 + + + AD1EEV3 + ADC trigger 1 on External Event + 3 + 7 + 1 + + + AD1EEV2 + ADC trigger 1 on External Event + 2 + 6 + 1 + + + AD1EEV1 + ADC trigger 1 on External Event + 1 + 5 + 1 + + + AD1MPER + ADC trigger 1 on Master + Period + 4 + 1 + + + AD1MC4 + ADC trigger 1 on Master Compare + 4 + 3 + 1 + + + AD1MC3 + ADC trigger 1 on Master Compare + 3 + 2 + 1 + + + AD1MC2 + ADC trigger 1 on Master Compare + 2 + 1 + 1 + + + AD1MC1 + ADC trigger 1 on Master Compare + 1 + 0 + 1 + + + + + ADC2R + ADC2R + ADC Trigger 2 Register + 0x40 + 0x20 + read-write + 0x00000000 + + + AD2TERST + ADC trigger 2 on Timer E + Reset + 31 + 1 + + + AD2TEC4 + ADC trigger 2 on Timer E compare + 4 + 30 + 1 + + + AD2TEC3 + ADC trigger 2 on Timer E compare + 3 + 29 + 1 + + + AD2TEC2 + ADC trigger 2 on Timer E compare + 2 + 28 + 1 + + + AD2TDRST + ADC trigger 2 on Timer D + Reset + 27 + 1 + + + AD2TDPER + ADC trigger 2 on Timer D + Period + 26 + 1 + + + AD2TDC4 + ADC trigger 2 on Timer D compare + 4 + 25 + 1 + + + AD2TDC3 + ADC trigger 2 on Timer D compare + 3 + 24 + 1 + + + AD2TDC2 + ADC trigger 2 on Timer D compare + 2 + 23 + 1 + + + AD2TCRST + ADC trigger 2 on Timer C + Reset + 22 + 1 + + + AD2TCPER + ADC trigger 2 on Timer C + Period + 21 + 1 + + + AD2TCC4 + ADC trigger 2 on Timer C compare + 4 + 20 + 1 + + + AD2TCC3 + ADC trigger 2 on Timer C compare + 3 + 19 + 1 + + + AD2TCC2 + ADC trigger 2 on Timer C compare + 2 + 18 + 1 + + + AD2TBPER + ADC trigger 2 on Timer B + Period + 17 + 1 + + + AD2TBC4 + ADC trigger 2 on Timer B compare + 4 + 16 + 1 + + + AD2TBC3 + ADC trigger 2 on Timer B compare + 3 + 15 + 1 + + + AD2TBC2 + ADC trigger 2 on Timer B compare + 2 + 14 + 1 + + + AD2TAPER + ADC trigger 2 on Timer A + Period + 13 + 1 + + + AD2TAC4 + ADC trigger 2 on Timer A compare + 4 + 12 + 1 + + + AD2TAC3 + ADC trigger 2 on Timer A compare + 3 + 11 + 1 + + + AD2TAC2 + ADC trigger 2 on Timer A compare + 2 + 10 + 1 + + + AD2EEV10 + ADC trigger 2 on External Event + 10 + 9 + 1 + + + AD2EEV9 + ADC trigger 2 on External Event + 9 + 8 + 1 + + + AD2EEV8 + ADC trigger 2 on External Event + 8 + 7 + 1 + + + AD2EEV7 + ADC trigger 2 on External Event + 7 + 6 + 1 + + + AD2EEV6 + ADC trigger 2 on External Event + 6 + 5 + 1 + + + AD2MPER + ADC trigger 2 on Master + Period + 4 + 1 + + + AD2MC4 + ADC trigger 2 on Master Compare + 4 + 3 + 1 + + + AD2MC3 + ADC trigger 2 on Master Compare + 3 + 2 + 1 + + + AD2MC2 + ADC trigger 2 on Master Compare + 2 + 1 + 1 + + + AD2MC1 + ADC trigger 2 on Master Compare + 1 + 0 + 1 + + + + + ADC3R + ADC3R + ADC Trigger 3 Register + 0x44 + 0x20 + read-write + 0x00000000 + + + AD1TEPER + AD1TEPER + 31 + 1 + + + AD1TEC4 + AD1TEC4 + 30 + 1 + + + AD1TEC3 + AD1TEC3 + 29 + 1 + + + AD1TEC2 + AD1TEC2 + 28 + 1 + + + AD1TDPER + AD1TDPER + 27 + 1 + + + AD1TDC4 + AD1TDC4 + 26 + 1 + + + AD1TDC3 + AD1TDC3 + 25 + 1 + + + AD1TDC2 + AD1TDC2 + 24 + 1 + + + AD1TCPER + AD1TCPER + 23 + 1 + + + AD1TCC4 + AD1TCC4 + 22 + 1 + + + AD1TCC3 + AD1TCC3 + 21 + 1 + + + AD1TCC2 + AD1TCC2 + 20 + 1 + + + AD1TBRST + AD1TBRST + 19 + 1 + + + AD1TBPER + AD1TBPER + 18 + 1 + + + AD1TBC4 + AD1TBC4 + 17 + 1 + + + AD1TBC3 + AD1TBC3 + 16 + 1 + + + AD1TBC2 + AD1TBC2 + 15 + 1 + + + AD1TARST + AD1TARST + 14 + 1 + + + AD1TAPER + AD1TAPER + 13 + 1 + + + AD1TAC4 + AD1TAC4 + 12 + 1 + + + AD1TAC3 + AD1TAC3 + 11 + 1 + + + AD1TAC2 + AD1TAC2 + 10 + 1 + + + AD1EEV5 + AD1EEV5 + 9 + 1 + + + AD1EEV4 + AD1EEV4 + 8 + 1 + + + AD1EEV3 + AD1EEV3 + 7 + 1 + + + AD1EEV2 + AD1EEV2 + 6 + 1 + + + AD1EEV1 + AD1EEV1 + 5 + 1 + + + AD1MPER + AD1MPER + 4 + 1 + + + AD1MC4 + AD1MC4 + 3 + 1 + + + AD1MC3 + AD1MC3 + 2 + 1 + + + AD1MC2 + AD1MC2 + 1 + 1 + + + AD1MC1 + AD1MC1 + 0 + 1 + + + + + ADC4R + ADC4R + ADC Trigger 4 Register + 0x48 + 0x20 + read-write + 0x00000000 + + + AD2TERST + AD2TERST + 31 + 1 + + + AD2TEC4 + AD2TEC4 + 30 + 1 + + + AD2TEC3 + AD2TEC3 + 29 + 1 + + + AD2TEC2 + AD2TEC2 + 28 + 1 + + + AD2TDRST + AD2TDRST + 27 + 1 + + + AD2TDPER + AD2TDPER + 26 + 1 + + + AD2TDC4 + AD2TDC4 + 25 + 1 + + + AD2TDC3 + AD2TDC3 + 24 + 1 + + + AD2TDC2 + AD2TDC2 + 23 + 1 + + + AD2TCRST + AD2TCRST + 22 + 1 + + + AD2TCPER + AD2TCPER + 21 + 1 + + + AD2TCC4 + AD2TCC4 + 20 + 1 + + + AD2TCC3 + AD2TCC3 + 19 + 1 + + + AD2TCC2 + AD2TCC2 + 18 + 1 + + + AD2TBPER + AD2TBPER + 17 + 1 + + + AD2TBC4 + AD2TBC4 + 16 + 1 + + + AD2TBC3 + AD2TBC3 + 15 + 1 + + + AD2TBC2 + AD2TBC2 + 14 + 1 + + + AD2TAPER + AD2TAPER + 13 + 1 + + + AD2TAC4 + AD2TAC4 + 12 + 1 + + + AD2TAC3 + AD2TAC3 + 11 + 1 + + + AD2TAC2 + AD2TAC2 + 10 + 1 + + + AD2EEV10 + AD2EEV10 + 9 + 1 + + + AD2EEV9 + AD2EEV9 + 8 + 1 + + + AD2EEV8 + AD2EEV8 + 7 + 1 + + + AD2EEV7 + AD2EEV7 + 6 + 1 + + + AD2EEV6 + AD2EEV6 + 5 + 1 + + + AD2MPER + AD2MPER + 4 + 1 + + + AD2MC4 + AD2MC4 + 3 + 1 + + + AD2MC3 + AD2MC3 + 2 + 1 + + + AD2MC2 + AD2MC2 + 1 + 1 + + + AD2MC1 + AD2MC1 + 0 + 1 + + + + + DLLCR + DLLCR + DLL Control Register + 0x4C + 0x20 + read-write + 0x00000000 + + + CALRTE + DLL Calibration rate + 2 + 2 + + + CALEN + DLL Calibration Enable + 1 + 1 + + + CAL + DLL Calibration Start + 0 + 1 + + + + + FLTINR1 + FLTINR1 + HRTIM Fault Input Register 1 + 0x50 + 0x20 + read-write + 0x00000000 + + + FLT4LCK + FLT4LCK + 31 + 1 + + + FLT4F + FLT4F + 27 + 4 + + + FLT4SRC + FLT4SRC + 26 + 1 + + + FLT4P + FLT4P + 25 + 1 + + + FLT4E + FLT4E + 24 + 1 + + + FLT3LCK + FLT3LCK + 23 + 1 + + + FLT3F + FLT3F + 19 + 4 + + + FLT3SRC + FLT3SRC + 18 + 1 + + + FLT3P + FLT3P + 17 + 1 + + + FLT3E + FLT3E + 16 + 1 + + + FLT2LCK + FLT2LCK + 15 + 1 + + + FLT2F + FLT2F + 11 + 4 + + + FLT2SRC + FLT2SRC + 10 + 1 + + + FLT2P + FLT2P + 9 + 1 + + + FLT2E + FLT2E + 8 + 1 + + + FLT1LCK + FLT1LCK + 7 + 1 + + + FLT1F + FLT1F + 3 + 4 + + + FLT1SRC + FLT1SRC + 2 + 1 + + + FLT1P + FLT1P + 1 + 1 + + + FLT1E + FLT1E + 0 + 1 + + + + + FLTINR2 + FLTINR2 + HRTIM Fault Input Register 2 + 0x54 + 0x20 + read-write + 0x00000000 + + + FLTSD + FLTSD + 24 + 2 + + + FLT5LCK + FLT5LCK + 7 + 1 + + + FLT5F + FLT5F + 3 + 4 + + + FLT5SRC + FLT5SRC + 2 + 1 + + + FLT5P + FLT5P + 1 + 1 + + + FLT5E + FLT5E + 0 + 1 + + + + + BDMUPDR + BDMUPDR + BDMUPDR + 0x58 + 0x20 + read-write + 0x00000000 + + + MCMP4 + MCMP4 + 9 + 1 + + + MCMP3 + MCMP3 + 8 + 1 + + + MCMP2 + MCMP2 + 7 + 1 + + + MCMP1 + MCMP1 + 6 + 1 + + + MREP + MREP + 5 + 1 + + + MPER + MPER + 4 + 1 + + + MCNT + MCNT + 3 + 1 + + + MDIER + MDIER + 2 + 1 + + + MICR + MICR + 1 + 1 + + + MCR + MCR + 0 + 1 + + + + + BDTxUPR + BDTxUPR + Burst DMA Timerx update + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + TIMxFLTR + HRTIM_FLTxR register update + enable + 20 + 1 + + + TIMxOUTR + HRTIM_OUTxR register update + enable + 19 + 1 + + + TIMxCHPR + HRTIM_CHPxR register update + enable + 18 + 1 + + + TIMxRSTR + HRTIM_RSTxR register update + enable + 17 + 1 + + + TIMxEEFR2 + HRTIM_EEFxR2 register update + enable + 16 + 1 + + + TIMxEEFR1 + HRTIM_EEFxR1 register update + enable + 15 + 1 + + + TIMxRST2R + HRTIM_RST2xR register update + enable + 14 + 1 + + + TIMxSET2R + HRTIM_SET2xR register update + enable + 13 + 1 + + + TIMxRST1R + HRTIM_RST1xR register update + enable + 12 + 1 + + + TIMxSET1R + HRTIM_SET1xR register update + enable + 11 + 1 + + + TIMx_DTxR + HRTIM_DTxR register update + enable + 10 + 1 + + + TIMxCMP4 + HRTIM_CMP4xR register update + enable + 9 + 1 + + + TIMxCMP3 + HRTIM_CMP3xR register update + enable + 8 + 1 + + + TIMxCMP2 + HRTIM_CMP2xR register update + enable + 7 + 1 + + + TIMxCMP1 + HRTIM_CMP1xR register update + enable + 6 + 1 + + + TIMxREP + HRTIM_REPxR register update + enable + 5 + 1 + + + TIMxPER + HRTIM_PERxR register update + enable + 4 + 1 + + + TIMxCNT + HRTIM_CNTxR register update + enable + 3 + 1 + + + TIMxDIER + HRTIM_TIMxDIER register update + enable + 2 + 1 + + + TIMxICR + HRTIM_TIMxICR register update + enable + 1 + 1 + + + TIMxCR + HRTIM_TIMxCR register update + enable + 0 + 1 + + + + + BDMADR + BDMADR + Burst DMA Data Register + 0x60 + 0x20 + read-write + 0x00000000 + + + BDMADR + Burst DMA Data register + 0 + 32 + + + + + + + DFSDM + Digital filter for sigma delta + modulators + DFSDM + 0x40017000 + + 0x0 + 0x400 + registers + + + DFSDM1_FLT0 + DFSDM1 filter 0 interrupt + 110 + + + DFSDM1_FLT1 + DFSDM1 filter 1 interrupt + 111 + + + DFSDM1_FLT2 + DFSDM1 filter 2 interrupt + 112 + + + DFSDM1_FLT3 + DFSDM1 filter 3 interrupt + 113 + + + + CH0CFGR1 + CH0CFGR1 + channel configuration y + register + 0x0 + 0x20 + read-write + 0x0 + + + DFSDMEN + DFSDMEN + 31 + 1 + + + CKOUTSRC + CKOUTSRC + 30 + 1 + + + CKOUTDIV + CKOUTDIV + 16 + 8 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH0CFGR2 + CH0CFGR2 + channel configuration y + register + 0x4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH0AWSCDR + CH0AWSCDR + analog watchdog and short-circuit detector + register + 0x8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH0WDATR + CH0WDATR + channel watchdog filter data + register + 0xC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH0DATINR + CH0DATINR + channel data input register + 0x10 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH0DLYR + CH0DLYR + channel y delay register + 0x14 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH1CFGR1 + CH1CFGR1 + CH1CFGR1 + 0x20 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH1CFGR2 + CH1CFGR2 + CH1CFGR2 + 0x24 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH1AWSCDR + CH1AWSCDR + CH1AWSCDR + 0x28 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH1WDATR + CH1WDATR + CH1WDATR + 0x2C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH1DATINR + CH1DATINR + CH1DATINR + 0x30 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH1DLYR + CH1DLYR + channel y delay register + 0x34 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH2CFGR1 + CH2CFGR1 + CH2CFGR1 + 0x40 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH2CFGR2 + CH2CFGR2 + CH2CFGR2 + 0x44 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH2AWSCDR + CH2AWSCDR + CH2AWSCDR + 0x48 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH2WDATR + CH2WDATR + CH2WDATR + 0x4C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH2DATINR + CH2DATINR + CH2DATINR + 0x50 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH2DLYR + CH2DLYR + channel y delay register + 0x54 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH3CFGR1 + CH3CFGR1 + CH3CFGR1 + 0x60 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH3CFGR2 + CH3CFGR2 + CH3CFGR2 + 0x64 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH3AWSCDR + CH3AWSCDR + CH3AWSCDR + 0x68 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH3WDATR + CH3WDATR + CH3WDATR + 0x6C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH3DATINR + CH3DATINR + CH3DATINR + 0x70 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH3DLYR + CH3DLYR + channel y delay register + 0x74 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH4CFGR1 + CH4CFGR1 + CH4CFGR1 + 0x80 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH4CFGR2 + CH4CFGR2 + CH4CFGR2 + 0x84 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH4AWSCDR + CH4AWSCDR + CH4AWSCDR + 0x88 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH4WDATR + CH4WDATR + CH4WDATR + 0x8C + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH4DATINR + CH4DATINR + CH4DATINR + 0x90 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH4DLYR + CH4DLYR + channel y delay register + 0x94 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH5CFGR1 + CH5CFGR1 + CH5CFGR1 + 0xA0 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH5CFGR2 + CH5CFGR2 + CH5CFGR2 + 0xA4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH5AWSCDR + CH5AWSCDR + CH5AWSCDR + 0xA8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH5WDATR + CH5WDATR + CH5WDATR + 0xAC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH5DATINR + CH5DATINR + CH5DATINR + 0xB0 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH5DLYR + CH5DLYR + channel y delay register + 0xB4 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH6CFGR1 + CH6CFGR1 + CH6CFGR1 + 0xC0 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH6CFGR2 + CH6CFGR2 + CH6CFGR2 + 0xC4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH6AWSCDR + CH6AWSCDR + CH6AWSCDR + 0xC8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH6WDATR + CH6WDATR + CH6WDATR + 0xCC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH6DATINR + CH6DATINR + CH6DATINR + 0xD0 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH6DLYR + CH6DLYR + channel y delay register + 0xD4 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + CH7CFGR1 + CH7CFGR1 + CH7CFGR1 + 0xE0 + 0x20 + read-write + 0x0 + + + DATPACK + DATPACK + 14 + 2 + + + DATMPX + DATMPX + 12 + 2 + + + CHINSEL + CHINSEL + 8 + 1 + + + CHEN + CHEN + 7 + 1 + + + CKABEN + CKABEN + 6 + 1 + + + SCDEN + SCDEN + 5 + 1 + + + SPICKSEL + SPICKSEL + 2 + 2 + + + SITP + SITP + 0 + 2 + + + + + CH7CFGR2 + CH7CFGR2 + CH7CFGR2 + 0xE4 + 0x20 + read-write + 0x0 + + + OFFSET + OFFSET + 8 + 24 + + + DTRBS + DTRBS + 3 + 5 + + + + + CH7AWSCDR + CH7AWSCDR + CH7AWSCDR + 0xE8 + 0x20 + read-write + 0x0 + + + AWFORD + AWFORD + 22 + 2 + + + AWFOSR + AWFOSR + 16 + 5 + + + BKSCD + BKSCD + 12 + 4 + + + SCDT + SCDT + 0 + 8 + + + + + CH7WDATR + CH7WDATR + CH7WDATR + 0xEC + 0x20 + read-write + 0x0 + + + WDATA + WDATA + 0 + 16 + + + + + CH7DATINR + CH7DATINR + CH7DATINR + 0xF0 + 0x20 + read-write + 0x0 + + + INDAT1 + INDAT1 + 16 + 16 + + + INDAT0 + INDAT0 + 0 + 16 + + + + + CH7DLYR + CH7DLYR + channel y delay register + 0xF4 + 0x20 + read-write + 0x0 + + + PLSSKP + PLSSKP + 0 + 6 + + + + + DFSDM_FLT0CR1 + DFSDM_FLT0CR1 + control register 1 + 0x100 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT0CR2 + DFSDM_FLT0CR2 + control register 2 + 0x104 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT0ISR + DFSDM_FLT0ISR + interrupt and status register + 0x108 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT0ICR + DFSDM_FLT0ICR + interrupt flag clear register + 0x10C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT0JCHGR + DFSDM_FLT0JCHGR + injected channel group selection + register + 0x110 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT0FCR + DFSDM_FLT0FCR + filter control register + 0x114 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT0JDATAR + DFSDM_FLT0JDATAR + data register for injected + group + 0x118 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT0RDATAR + DFSDM_FLT0RDATAR + data register for the regular + channel + 0x11C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT0AWHTR + DFSDM_FLT0AWHTR + analog watchdog high threshold + register + 0x120 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT0AWLTR + DFSDM_FLT0AWLTR + analog watchdog low threshold + register + 0x124 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT0AWSR + DFSDM_FLT0AWSR + analog watchdog status + register + 0x128 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT0AWCFR + DFSDM_FLT0AWCFR + analog watchdog clear flag + register + 0x12C + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT0EXMAX + DFSDM_FLT0EXMAX + Extremes detector maximum + register + 0x130 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT0EXMIN + DFSDM_FLT0EXMIN + Extremes detector minimum + register + 0x134 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT0CNVTIMR + DFSDM_FLT0CNVTIMR + conversion timer register + 0x138 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + DFSDM_FLT1CR1 + DFSDM_FLT1CR1 + control register 1 + 0x180 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT1CR2 + DFSDM_FLT1CR2 + control register 2 + 0x184 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT1ISR + DFSDM_FLT1ISR + interrupt and status register + 0x188 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT1ICR + DFSDM1_ICR + interrupt flag clear register + 0x18C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT1CHGR + DFSDM_FLT1JCHGR + injected channel group selection + register + 0x190 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT1FCR + DFSDM1_FCR + filter control register + 0x194 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT1JDATAR + DFSDM_FLT1JDATAR + data register for injected + group + 0x198 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT1RDATAR + DFSDM_FLT1RDATAR + data register for the regular + channel + 0x19C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT1AWHTR + DFSDM_FLT1AWHTR + analog watchdog high threshold + register + 0x1A0 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT1AWLTR + DFSDM_FLT1AWLTR + analog watchdog low threshold + register + 0x1A4 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT1AWSR + DFSDM_FLT1AWSR + analog watchdog status + register + 0x1A8 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT1AWCFR + DFSDM_FLT1AWCFR + analog watchdog clear flag + register + 0x1AC + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT1EXMAX + DFSDM_FLT1EXMAX + Extremes detector maximum + register + 0x1B0 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT1EXMIN + DFSDM_FLT1EXMIN + Extremes detector minimum + register + 0x1B4 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT1CNVTIMR + DFSDM_FLT1CNVTIMR + conversion timer register + 0x1B8 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + DFSDM_FLT2CR1 + DFSDM_FLT2CR1 + control register 1 + 0x200 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT2CR2 + DFSDM_FLT2CR2 + control register 2 + 0x204 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT2ISR + DFSDM_FLT2ISR + interrupt and status register + 0x208 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT2ICR + DFSDM_FLT2ICR + interrupt flag clear register + 0x20C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT2JCHGR + DFSDM_FLT2JCHGR + injected channel group selection + register + 0x210 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT2FCR + DFSDM_FLT2FCR + filter control register + 0x214 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT2JDATAR + DFSDM_FLT2JDATAR + data register for injected + group + 0x218 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT2RDATAR + DFSDM_FLT2RDATAR + data register for the regular + channel + 0x21C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT2AWHTR + DFSDM_FLT2AWHTR + analog watchdog high threshold + register + 0x220 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT2AWLTR + DFSDM_FLT2AWLTR + analog watchdog low threshold + register + 0x224 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT2AWSR + DFSDM_FLT2AWSR + analog watchdog status + register + 0x228 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT2AWCFR + DFSDM_FLT2AWCFR + analog watchdog clear flag + register + 0x22C + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT2EXMAX + DFSDM_FLT2EXMAX + Extremes detector maximum + register + 0x230 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT2EXMIN + DFSDM_FLT2EXMIN + Extremes detector minimum + register + 0x234 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT2CNVTIMR + DFSDM_FLT2CNVTIMR + conversion timer register + 0x238 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + DFSDM_FLT3CR1 + DFSDM_FLT3CR1 + control register 1 + 0x280 + 0x20 + read-write + 0x00000000 + + + AWFSEL + Analog watchdog fast mode + select + 30 + 1 + + + FAST + Fast conversion mode selection for + regular conversions + 29 + 1 + + + RCH + Regular channel selection + 24 + 3 + + + RDMAEN + DMA channel enabled to read data for the + regular conversion + 21 + 1 + + + RSYNC + Launch regular conversion synchronously + with DFSDM0 + 19 + 1 + + + RCONT + Continuous mode selection for regular + conversions + 18 + 1 + + + RSWSTART + Software start of a conversion on the + regular channel + 17 + 1 + + + JEXTEN + Trigger enable and trigger edge + selection for injected conversions + 13 + 2 + + + JEXTSEL + Trigger signal selection for launching + injected conversions + 8 + 3 + + + JDMAEN + DMA channel enabled to read data for the + injected channel group + 5 + 1 + + + JSCAN + Scanning conversion mode for injected + conversions + 4 + 1 + + + JSYNC + Launch an injected conversion + synchronously with the DFSDM0 JSWSTART + trigger + 3 + 1 + + + JSWSTART + Start a conversion of the injected group + of channels + 1 + 1 + + + DFEN + DFSDM enable + 0 + 1 + + + + + DFSDM_FLT3CR2 + DFSDM_FLT3CR2 + control register 2 + 0x284 + 0x20 + read-write + 0x00000000 + + + AWDCH + Analog watchdog channel + selection + 16 + 8 + + + EXCH + Extremes detector channel + selection + 8 + 8 + + + CKABIE + Clock absence interrupt + enable + 6 + 1 + + + SCDIE + Short-circuit detector interrupt + enable + 5 + 1 + + + AWDIE + Analog watchdog interrupt + enable + 4 + 1 + + + ROVRIE + Regular data overrun interrupt + enable + 3 + 1 + + + JOVRIE + Injected data overrun interrupt + enable + 2 + 1 + + + REOCIE + Regular end of conversion interrupt + enable + 1 + 1 + + + JEOCIE + Injected end of conversion interrupt + enable + 0 + 1 + + + + + DFSDM_FLT3ISR + DFSDM_FLT3ISR + interrupt and status register + 0x288 + 0x20 + read-only + 0x00FF0000 + + + SCDF + short-circuit detector + flag + 24 + 8 + + + CKABF + Clock absence flag + 16 + 8 + + + RCIP + Regular conversion in progress + status + 14 + 1 + + + JCIP + Injected conversion in progress + status + 13 + 1 + + + AWDF + Analog watchdog + 4 + 1 + + + ROVRF + Regular conversion overrun + flag + 3 + 1 + + + JOVRF + Injected conversion overrun + flag + 2 + 1 + + + REOCF + End of regular conversion + flag + 1 + 1 + + + JEOCF + End of injected conversion + flag + 0 + 1 + + + + + DFSDM_FLT3ICR + DFSDM_FLT3ICR + interrupt flag clear register + 0x28C + 0x20 + read-write + 0x00000000 + + + CLRSCDF + Clear the short-circuit detector + flag + 24 + 8 + + + CLRCKABF + Clear the clock absence + flag + 16 + 8 + + + CLRROVRF + Clear the regular conversion overrun + flag + 3 + 1 + + + CLRJOVRF + Clear the injected conversion overrun + flag + 2 + 1 + + + + + DFSDM_FLT3JCHGR + DFSDM_FLT3JCHGR + injected channel group selection + register + 0x290 + 0x20 + read-write + 0x00000001 + + + JCHG + Injected channel group + selection + 0 + 8 + + + + + DFSDM_FLT3FCR + DFSDM_FLT3FCR + filter control register + 0x294 + 0x20 + read-write + 0x00000000 + + + FORD + Sinc filter order + 29 + 3 + + + FOSR + Sinc filter oversampling ratio + (decimation rate) + 16 + 10 + + + IOSR + Integrator oversampling ratio (averaging + length) + 0 + 8 + + + + + DFSDM_FLT3JDATAR + DFSDM_FLT3JDATAR + data register for injected + group + 0x298 + 0x20 + read-only + 0x00000000 + + + JDATA + Injected group conversion + data + 8 + 24 + + + JDATACH + Injected channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT3RDATAR + DFSDM_FLT3RDATAR + data register for the regular + channel + 0x29C + 0x20 + read-only + 0x00000000 + + + RDATA + Regular channel conversion + data + 8 + 24 + + + RPEND + Regular channel pending + data + 4 + 1 + + + RDATACH + Regular channel most recently + converted + 0 + 3 + + + + + DFSDM_FLT3AWHTR + DFSDM_FLT3AWHTR + analog watchdog high threshold + register + 0x2A0 + 0x20 + read-write + 0x00000000 + + + AWHT + Analog watchdog high + threshold + 8 + 24 + + + BKAWH + Break signal assignment to analog + watchdog high threshold event + 0 + 4 + + + + + DFSDM_FLT3AWLTR + DFSDM_FLT3AWLTR + analog watchdog low threshold + register + 0x2A4 + 0x20 + read-write + 0x00000000 + + + AWLT + Analog watchdog low + threshold + 8 + 24 + + + BKAWL + Break signal assignment to analog + watchdog low threshold event + 0 + 4 + + + + + DFSDM_FLT3AWSR + DFSDM_FLT3AWSR + analog watchdog status + register + 0x2A8 + 0x20 + read-only + 0x00000000 + + + AWHTF + Analog watchdog high threshold + flag + 8 + 8 + + + AWLTF + Analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT3AWCFR + DFSDM_FLT3AWCFR + analog watchdog clear flag + register + 0x2AC + 0x20 + read-write + 0x00000000 + + + CLRAWHTF + Clear the analog watchdog high threshold + flag + 8 + 8 + + + CLRAWLTF + Clear the analog watchdog low threshold + flag + 0 + 8 + + + + + DFSDM_FLT3EXMAX + DFSDM_FLT3EXMAX + Extremes detector maximum + register + 0x2B0 + 0x20 + read-only + 0x80000000 + + + EXMAX + Extremes detector maximum + value + 8 + 24 + + + EXMAXCH + Extremes detector maximum data + channel + 0 + 3 + + + + + DFSDM_FLT3EXMIN + DFSDM_FLT3EXMIN + Extremes detector minimum + register + 0x2B4 + 0x20 + read-only + 0x7FFFFF00 + + + EXMIN + EXMIN + 8 + 24 + + + EXMINCH + Extremes detector minimum data + channel + 0 + 3 + + + + + DFSDM_FLT3CNVTIMR + DFSDM_FLT3CNVTIMR + conversion timer register + 0x2B8 + 0x20 + read-only + 0x00000000 + + + CNVCNT + 28-bit timer counting conversion time t + = CNVCNT[27:0] / fDFSDM_CKIN + 4 + 28 + + + + + + + TIM16 + General-purpose-timers + TIMs + 0x40014400 + + 0x0 + 0x400 + registers + + + TIM16 + TIM16 global interrupt + 117 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UIE + Update interrupt enable + 0 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + BG + Break generation + 7 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + OC1M_3 + Output Compare 1 mode + 16 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC1F + Input capture 1 filter + 4 + 4 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF Copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + DTG + Dead-time generator setup + 0 + 8 + + + LOCK + Lock configuration + 8 + 2 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + BKE + Break enable + 12 + 1 + + + BKP + Break polarity + 13 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + MOE + Main output enable + 15 + 1 + + + BKF + Break filter + 16 + 4 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + TIM16_AF1 + TIM16_AF1 + TIM16 alternate function register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDFBK1E + BRK dfsdm1_break[1] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + + + TIM16_TISEL + TIM16_TISEL + TIM16 input selection register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + + + + + TIM17 + General-purpose-timers + TIMs + 0x40014800 + + 0x0 + 0x400 + registers + + + TIM17 + TIM17 global interrupt + 118 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UIE + Update interrupt enable + 0 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + BG + Break generation + 7 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + OC1M_3 + Output Compare 1 mode + 16 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC1F + Input capture 1 filter + 4 + 4 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF Copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + DTG + Dead-time generator setup + 0 + 8 + + + LOCK + Lock configuration + 8 + 2 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + BKE + Break enable + 12 + 1 + + + BKP + Break polarity + 13 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + MOE + Main output enable + 15 + 1 + + + BKF + Break filter + 16 + 4 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + TIM17_AF1 + TIM17_AF1 + TIM17 alternate function register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDFBK1E + BRK dfsdm1_break[1] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + + + TIM17_TISEL + TIM17_TISEL + TIM17 input selection register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + + + + + TIM15 + General purpose timers + TIMs + 0x40014000 + + 0x0 + 0x400 + registers + + + TIM15 + TIM15 global interrupt + 116 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + MMS + Master mode selection + 4 + 3 + + + TI1S + TI1 selection + 7 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS2 + Output Idle state 2 + 10 + 1 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x0000 + + + SMS + Slave mode selection + 0 + 3 + + + TS_2_0 + Trigger selection + 4 + 3 + + + MSM + Master/Slave mode + 7 + 1 + + + SMS_3 + Slave mode selection bit 3 + 16 + 1 + + + TS_4_3 + Trigger selection - bit + 4:3 + 20 + 2 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UIE + Update interrupt enable + 0 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + CC2IE + Capture/Compare 2 interrupt + enable + 2 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + TIE + Trigger interrupt enable + 6 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + CC2DE + Capture/Compare 2 DMA request + enable + 10 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + TDE + Trigger DMA request enable + 14 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC2OF + Capture/compare 2 overcapture + flag + 10 + 1 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC2IF + Capture/Compare 2 interrupt + flag + 2 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + BG + Break generation + 7 + 1 + + + TG + Trigger generation + 6 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + CC2G + Capture/compare 2 + generation + 2 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + OC2FE + Output Compare 2 fast + enable + 10 + 1 + + + OC2PE + Output Compare 2 preload + enable + 11 + 1 + + + OC2M + Output Compare 2 mode + 12 + 3 + + + OC1M_3 + Output Compare 1 mode bit + 3 + 16 + 1 + + + OC2M_3 + Output Compare 2 mode bit + 3 + 24 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + IC2PSC + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + IC1F + Input capture 1 filter + 4 + 4 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC2NP + Capture/Compare 2 output + Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output + Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output + enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + CCR2 + CCR2 + capture/compare register 2 + 0x38 + 0x20 + read-write + 0x00000000 + + + CCR2 + Capture/Compare 2 value + 0 + 16 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + MOE + Main output enable + 15 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + BKP + Break polarity + 13 + 1 + + + BKE + Break enable + 12 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + LOCK + Lock configuration + 8 + 2 + + + DTG + Dead-time generator setup + 0 + 8 + + + BKF + Break filter + 16 + 4 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + AF1 + AF1 + TIM15 alternate fdfsdm1_breakon register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDF1BK0E + BRK dfsdm1_break[0] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + + + TISEL + TISEL + TIM15 input selection register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + TI2SEL + selects TI2[0] to TI2[15] + input + 8 + 4 + + + + + + + USART1 + Universal synchronous asynchronous receiver + transmitter + USART + 0x40011000 + + 0x0 + 0x400 + registers + + + USART1 + USART1 global interrupt + 37 + + + + CR1 + CR1 + Control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + RXFFIE + RXFIFO Full interrupt + enable + 31 + 1 + + + TXFEIE + TXFIFO empty interrupt + enable + 30 + 1 + + + FIFOEN + FIFO mode enable + 29 + 1 + + + M1 + Word length + 28 + 1 + + + EOBIE + End of Block interrupt + enable + 27 + 1 + + + RTOIE + Receiver timeout interrupt + enable + 26 + 1 + + + DEAT4 + Driver Enable assertion + time + 25 + 1 + + + DEAT3 + DEAT3 + 24 + 1 + + + DEAT2 + DEAT2 + 23 + 1 + + + DEAT1 + DEAT1 + 22 + 1 + + + DEAT0 + DEAT0 + 21 + 1 + + + DEDT4 + Driver Enable de-assertion + time + 20 + 1 + + + DEDT3 + DEDT3 + 19 + 1 + + + DEDT2 + DEDT2 + 18 + 1 + + + DEDT1 + DEDT1 + 17 + 1 + + + DEDT0 + DEDT0 + 16 + 1 + + + OVER8 + Oversampling mode + 15 + 1 + + + CMIE + Character match interrupt + enable + 14 + 1 + + + MME + Mute mode enable + 13 + 1 + + + M0 + Word length + 12 + 1 + + + WAKE + Receiver wakeup method + 11 + 1 + + + PCE + Parity control enable + 10 + 1 + + + PS + Parity selection + 9 + 1 + + + PEIE + PE interrupt enable + 8 + 1 + + + TXEIE + interrupt enable + 7 + 1 + + + TCIE + Transmission complete interrupt + enable + 6 + 1 + + + RXNEIE + RXNE interrupt enable + 5 + 1 + + + IDLEIE + IDLE interrupt enable + 4 + 1 + + + TE + Transmitter enable + 3 + 1 + + + RE + Receiver enable + 2 + 1 + + + UESM + USART enable in Stop mode + 1 + 1 + + + UE + USART enable + 0 + 1 + + + + + CR2 + CR2 + Control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + ADD4_7 + Address of the USART node + 28 + 4 + + + ADD0_3 + Address of the USART node + 24 + 4 + + + RTOEN + Receiver timeout enable + 23 + 1 + + + ABRMOD1 + Auto baud rate mode + 22 + 1 + + + ABRMOD0 + ABRMOD0 + 21 + 1 + + + ABREN + Auto baud rate enable + 20 + 1 + + + MSBFIRST + Most significant bit first + 19 + 1 + + + TAINV + Binary data inversion + 18 + 1 + + + TXINV + TX pin active level + inversion + 17 + 1 + + + RXINV + RX pin active level + inversion + 16 + 1 + + + SWAP + Swap TX/RX pins + 15 + 1 + + + LINEN + LIN mode enable + 14 + 1 + + + STOP + STOP bits + 12 + 2 + + + CLKEN + Clock enable + 11 + 1 + + + CPOL + Clock polarity + 10 + 1 + + + CPHA + Clock phase + 9 + 1 + + + LBCL + Last bit clock pulse + 8 + 1 + + + LBDIE + LIN break detection interrupt + enable + 6 + 1 + + + LBDL + LIN break detection length + 5 + 1 + + + ADDM7 + 7-bit Address Detection/4-bit Address + Detection + 4 + 1 + + + DIS_NSS + When the DSI_NSS bit is set, the NSS pin + input is ignored + 3 + 1 + + + SLVEN + Synchronous Slave mode + enable + 0 + 1 + + + + + CR3 + CR3 + Control register 3 + 0x8 + 0x20 + read-write + 0x0000 + + + TXFTCFG + TXFIFO threshold + configuration + 29 + 3 + + + RXFTIE + RXFIFO threshold interrupt + enable + 28 + 1 + + + RXFTCFG + Receive FIFO threshold + configuration + 25 + 3 + + + TCBGTIE + Transmission Complete before guard time, + interrupt enable + 24 + 1 + + + TXFTIE + TXFIFO threshold interrupt + enable + 23 + 1 + + + WUFIE + Wakeup from Stop mode interrupt + enable + 22 + 1 + + + WUS + Wakeup from Stop mode interrupt flag + selection + 20 + 2 + + + SCARCNT + Smartcard auto-retry count + 17 + 3 + + + DEP + Driver enable polarity + selection + 15 + 1 + + + DEM + Driver enable mode + 14 + 1 + + + DDRE + DMA Disable on Reception + Error + 13 + 1 + + + OVRDIS + Overrun Disable + 12 + 1 + + + ONEBIT + One sample bit method + enable + 11 + 1 + + + CTSIE + CTS interrupt enable + 10 + 1 + + + CTSE + CTS enable + 9 + 1 + + + RTSE + RTS enable + 8 + 1 + + + DMAT + DMA enable transmitter + 7 + 1 + + + DMAR + DMA enable receiver + 6 + 1 + + + SCEN + Smartcard mode enable + 5 + 1 + + + NACK + Smartcard NACK enable + 4 + 1 + + + HDSEL + Half-duplex selection + 3 + 1 + + + IRLP + Ir low-power + 2 + 1 + + + IREN + Ir mode enable + 1 + 1 + + + EIE + Error interrupt enable + 0 + 1 + + + + + BRR + BRR + Baud rate register + 0xC + 0x20 + read-write + 0x0000 + + + BRR_4_15 + DIV_Mantissa + 4 + 12 + + + BRR_0_3 + DIV_Fraction + 0 + 4 + + + + + GTPR + GTPR + Guard time and prescaler + register + 0x10 + 0x20 + read-write + 0x0000 + + + GT + Guard time value + 8 + 8 + + + PSC + Prescaler value + 0 + 8 + + + + + RTOR + RTOR + Receiver timeout register + 0x14 + 0x20 + read-write + 0x0000 + + + BLEN + Block Length + 24 + 8 + + + RTO + Receiver timeout value + 0 + 24 + + + + + RQR + RQR + Request register + 0x18 + 0x20 + write-only + 0x0000 + + + TXFRQ + Transmit data flush + request + 4 + 1 + + + RXFRQ + Receive data flush request + 3 + 1 + + + MMRQ + Mute mode request + 2 + 1 + + + SBKRQ + Send break request + 1 + 1 + + + ABRRQ + Auto baud rate request + 0 + 1 + + + + + ISR + ISR + Interrupt & status + register + 0x1C + 0x20 + read-only + 0x00C0 + + + TXFT + TXFIFO threshold flag + 27 + 1 + + + RXFT + RXFIFO threshold flag + 26 + 1 + + + TCBGT + Transmission complete before guard time + flag + 25 + 1 + + + RXFF + RXFIFO Full + 24 + 1 + + + TXFE + TXFIFO Empty + 23 + 1 + + + REACK + REACK + 22 + 1 + + + TEACK + TEACK + 21 + 1 + + + WUF + WUF + 20 + 1 + + + RWU + RWU + 19 + 1 + + + SBKF + SBKF + 18 + 1 + + + CMF + CMF + 17 + 1 + + + BUSY + BUSY + 16 + 1 + + + ABRF + ABRF + 15 + 1 + + + ABRE + ABRE + 14 + 1 + + + UDR + SPI slave underrun error + flag + 13 + 1 + + + EOBF + EOBF + 12 + 1 + + + RTOF + RTOF + 11 + 1 + + + CTS + CTS + 10 + 1 + + + CTSIF + CTSIF + 9 + 1 + + + LBDF + LBDF + 8 + 1 + + + TXE + TXE + 7 + 1 + + + TC + TC + 6 + 1 + + + RXNE + RXNE + 5 + 1 + + + IDLE + IDLE + 4 + 1 + + + ORE + ORE + 3 + 1 + + + NF + NF + 2 + 1 + + + FE + FE + 1 + 1 + + + PE + PE + 0 + 1 + + + + + ICR + ICR + Interrupt flag clear register + 0x20 + 0x20 + write-only + 0x0000 + + + WUCF + Wakeup from Stop mode clear + flag + 20 + 1 + + + CMCF + Character match clear flag + 17 + 1 + + + UDRCF + SPI slave underrun clear + flag + 13 + 1 + + + EOBCF + End of block clear flag + 12 + 1 + + + RTOCF + Receiver timeout clear + flag + 11 + 1 + + + CTSCF + CTS clear flag + 9 + 1 + + + LBDCF + LIN break detection clear + flag + 8 + 1 + + + TCBGTC + Transmission complete before Guard time + clear flag + 7 + 1 + + + TCCF + Transmission complete clear + flag + 6 + 1 + + + TXFECF + TXFIFO empty clear flag + 5 + 1 + + + IDLECF + Idle line detected clear + flag + 4 + 1 + + + ORECF + Overrun error clear flag + 3 + 1 + + + NCF + Noise detected clear flag + 2 + 1 + + + FECF + Framing error clear flag + 1 + 1 + + + PECF + Parity error clear flag + 0 + 1 + + + + + RDR + RDR + Receive data register + 0x24 + 0x20 + read-only + 0x0000 + + + RDR + Receive data value + 0 + 9 + + + + + TDR + TDR + Transmit data register + 0x28 + 0x20 + read-write + 0x0000 + + + TDR + Transmit data value + 0 + 9 + + + + + PRESC + PRESC + USART prescaler register + 0x2C + 0x20 + read-write + 0x0000 + + + PRESCALER + Clock prescaler + 0 + 4 + + + + + + + USART2 + 0x40004400 + + USART2 + USART2 global interrupt + 38 + + + + USART3 + 0x40004800 + + USART3 + USART3 global interrupt + 39 + + + + UART4 + 0x40004C00 + + UART4 + UART4 global interrupt + 52 + + + + UART5 + 0x40005000 + + UART5 + UART5 global interrupt + 53 + + + + USART6 + 0x40011400 + + USART6 + USART6 global interrupt + 71 + + + + UART7 + 0x40007800 + + UART7 + UART7 global interrupt + 82 + + + + UART8 + 0x40007C00 + + UART8 + UART8 global interrupt + 83 + + + + TIM1 + Advanced-timers + TIM + 0x40010000 + + 0x0 + 0x400 + registers + + + TIM1_BRK + TIM1 break interrupt + 24 + + + TIM1_UP + TIM1 update interrupt + 25 + + + TIM1_TRG_COM + TIM1 trigger and commutation + 26 + + + TIM_CC + TIM1 capture / compare + 27 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + CEN + Counter enable + 0 + 1 + + + UDIS + Update disable + 1 + 1 + + + URS + Update request source + 2 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + DIR + Direction + 4 + 1 + + + CMS + Center-aligned mode + selection + 5 + 2 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CKD + Clock division + 8 + 2 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + MMS2 + Master mode selection 2 + 20 + 4 + + + OIS6 + Output Idle state 6 + 18 + 1 + + + OIS5 + Output Idle state 5 + 16 + 1 + + + OIS4 + Output Idle state 4 + 14 + 1 + + + OIS3N + Output Idle state 3 + 13 + 1 + + + OIS3 + Output Idle state 3 + 12 + 1 + + + OIS2N + Output Idle state 2 + 11 + 1 + + + OIS2 + Output Idle state 2 + 10 + 1 + + + OIS1N + Output Idle state 1 + 9 + 1 + + + OIS1 + Output Idle state 1 + 8 + 1 + + + TI1S + TI1 selection + 7 + 1 + + + MMS + Master mode selection + 4 + 3 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + CCUS + Capture/compare control update + selection + 2 + 1 + + + CCPC + Capture/compare preloaded + control + 0 + 1 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x0000 + + + SMS + Slave mode selection + 0 + 3 + + + TS + Trigger selection + 4 + 3 + + + MSM + Master/Slave mode + 7 + 1 + + + ETF + External trigger filter + 8 + 4 + + + ETPS + External trigger prescaler + 12 + 2 + + + ECE + External clock enable + 14 + 1 + + + ETP + External trigger polarity + 15 + 1 + + + SMS_3 + Slave mode selection - bit + 3 + 16 + 1 + + + TS_4_3 + Trigger selection - bit + 4:3 + 20 + 2 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + TDE + Trigger DMA request enable + 14 + 1 + + + COMDE + COM DMA request enable + 13 + 1 + + + CC4DE + Capture/Compare 4 DMA request + enable + 12 + 1 + + + CC3DE + Capture/Compare 3 DMA request + enable + 11 + 1 + + + CC2DE + Capture/Compare 2 DMA request + enable + 10 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + TIE + Trigger interrupt enable + 6 + 1 + + + CC4IE + Capture/Compare 4 interrupt + enable + 4 + 1 + + + CC3IE + Capture/Compare 3 interrupt + enable + 3 + 1 + + + CC2IE + Capture/Compare 2 interrupt + enable + 2 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + + BIE + Break interrupt enable + 7 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC6IF + Compare 6 interrupt flag + 17 + 1 + + + CC5IF + Compare 5 interrupt flag + 16 + 1 + + + SBIF + System Break interrupt + flag + 13 + 1 + + + CC4OF + Capture/Compare 4 overcapture + flag + 12 + 1 + + + CC3OF + Capture/Compare 3 overcapture + flag + 11 + 1 + + + CC2OF + Capture/compare 2 overcapture + flag + 10 + 1 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + B2IF + Break 2 interrupt flag + 8 + 1 + + + BIF + Break interrupt flag + 7 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + + + COMIF + COM interrupt flag + 5 + 1 + + + CC4IF + Capture/Compare 4 interrupt + flag + 4 + 1 + + + CC3IF + Capture/Compare 3 interrupt + flag + 3 + 1 + + + CC2IF + Capture/Compare 2 interrupt + flag + 2 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + UG + Update generation + 0 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + CC2G + Capture/compare 2 + generation + 2 + 1 + + + CC3G + Capture/compare 3 + generation + 3 + 1 + + + CC4G + Capture/compare 4 + generation + 4 + 1 + + + COMG + Capture/Compare control update + generation + 5 + 1 + + + TG + Trigger generation + 6 + 1 + + + BG + Break generation + 7 + 1 + + + B2G + Break 2 generation + 8 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + OC1FE + Output Compare 1 fast + enable + 2 + 1 + + + OC1PE + Output Compare 1 preload + enable + 3 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + + OC1CE + Output Compare 1 clear + enable + 7 + 1 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + OC2FE + Output Compare 2 fast + enable + 10 + 1 + + + OC2PE + Output Compare 2 preload + enable + 11 + 1 + + + OC2M + Output Compare 2 mode + 12 + 3 + + + OC2CE + Output Compare 2 clear + enable + 15 + 1 + + + OC1M_3 + Output Compare 1 mode - bit + 3 + 16 + 1 + + + OC2M_3 + Output Compare 2 mode - bit + 3 + 24 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + IC2PCS + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + IC1F + Input capture 1 filter + 4 + 4 + + + ICPCS + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output + mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + CC3S + Capture/Compare 3 + selection + 0 + 2 + + + OC3FE + Output compare 3 fast + enable + 2 + 1 + + + OC3PE + Output compare 3 preload + enable + 3 + 1 + + + OC3M + Output compare 3 mode + 4 + 3 + + + OC3CE + Output compare 3 clear + enable + 7 + 1 + + + CC4S + Capture/Compare 4 + selection + 8 + 2 + + + OC4FE + Output compare 4 fast + enable + 10 + 1 + + + OC4PE + Output compare 4 preload + enable + 11 + 1 + + + OC4M + Output compare 4 mode + 12 + 3 + + + OC4CE + Output compare 4 clear + enable + 15 + 1 + + + OC3M_3 + Output Compare 3 mode - bit + 3 + 16 + 1 + + + OC4M_4 + Output Compare 4 mode - bit + 3 + 24 + 1 + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input + mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + CC4S + Capture/Compare 4 + selection + 8 + 2 + + + IC3F + Input capture 3 filter + 4 + 4 + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + CC3S + Capture/compare 3 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1NE + Capture/Compare 1 complementary output + enable + 2 + 1 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC2E + Capture/Compare 2 output + enable + 4 + 1 + + + CC2P + Capture/Compare 2 output + Polarity + 5 + 1 + + + CC2NE + Capture/Compare 2 complementary output + enable + 6 + 1 + + + CC2NP + Capture/Compare 2 output + Polarity + 7 + 1 + + + CC3E + Capture/Compare 3 output + enable + 8 + 1 + + + CC3P + Capture/Compare 3 output + Polarity + 9 + 1 + + + CC3NE + Capture/Compare 3 complementary output + enable + 10 + 1 + + + CC3NP + Capture/Compare 3 output + Polarity + 11 + 1 + + + CC4E + Capture/Compare 4 output + enable + 12 + 1 + + + CC4P + Capture/Compare 3 output + Polarity + 13 + 1 + + + CC4NP + Capture/Compare 4 complementary output + polarity + 15 + 1 + + + CC5E + Capture/Compare 5 output + enable + 16 + 1 + + + CC5P + Capture/Compare 5 output + polarity + 17 + 1 + + + CC6E + Capture/Compare 6 output + enable + 20 + 1 + + + CC6P + Capture/Compare 6 output + polarity + 21 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + 0x00000000 + + + CNT + counter value + 0 + 16 + read-write + + + UIFCPY + UIF copy + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1 + Capture/Compare 1 value + 0 + 16 + + + + + CCR2 + CCR2 + capture/compare register 2 + 0x38 + 0x20 + read-write + 0x00000000 + + + CCR2 + Capture/Compare 2 value + 0 + 16 + + + + + CCR3 + CCR3 + capture/compare register 3 + 0x3C + 0x20 + read-write + 0x00000000 + + + CCR3 + Capture/Compare value + 0 + 16 + + + + + CCR4 + CCR4 + capture/compare register 4 + 0x40 + 0x20 + read-write + 0x00000000 + + + CCR4 + Capture/Compare value + 0 + 16 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x0000 + + + REP + Repetition counter value + 0 + 8 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x0000 + + + DTG + Dead-time generator setup + 0 + 8 + + + LOCK + Lock configuration + 8 + 2 + + + OSSI + Off-state selection for Idle + mode + 10 + 1 + + + OSSR + Off-state selection for Run + mode + 11 + 1 + + + BKE + Break enable + 12 + 1 + + + BKP + Break polarity + 13 + 1 + + + AOE + Automatic output enable + 14 + 1 + + + MOE + Main output enable + 15 + 1 + + + BKF + Break filter + 16 + 4 + + + BK2F + Break 2 filter + 20 + 4 + + + BK2E + Break 2 enable + 24 + 1 + + + BK2P + Break 2 polarity + 25 + 1 + + + + + CCMR3_Output + CCMR3_Output + capture/compare mode register 3 (output + mode) + 0x54 + 0x20 + read-write + 0x0000 + + + OC5FE + Output compare 5 fast + enable + 2 + 1 + + + OC5PE + Output compare 5 preload + enable + 3 + 1 + + + OC5M + Output compare 5 mode + 4 + 3 + + + OC5CE + Output compare 5 clear + enable + 7 + 1 + + + OC6FE + Output compare 6 fast + enable + 10 + 1 + + + OC6PE + Output compare 6 preload + enable + 11 + 1 + + + OC6M + Output compare 6 mode + 12 + 3 + + + OC6CE + Output compare 6 clear + enable + 15 + 1 + + + OC5M3 + Output Compare 5 mode + 16 + 1 + + + OC6M3 + Output Compare 6 mode + 24 + 1 + + + + + CCR5 + CCR5 + capture/compare register 5 + 0x58 + 0x20 + read-write + 0x0000 + + + CCR5 + Capture/Compare 5 value + 0 + 16 + + + GC5C1 + Group Channel 5 and Channel + 1 + 29 + 1 + + + GC5C2 + Group Channel 5 and Channel + 2 + 30 + 1 + + + GC5C3 + Group Channel 5 and Channel + 3 + 31 + 1 + + + + + CRR6 + CRR6 + capture/compare register 6 + 0x5C + 0x20 + read-write + 0x0000 + + + CCR6 + Capture/Compare 6 value + 0 + 16 + + + + + AF1 + AF1 + TIM1 alternate function option register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKCMP1E + BRK COMP1 enable + 1 + 1 + + + BKCMP2E + BRK COMP2 enable + 2 + 1 + + + BKDF1BK0E + BRK dfsdm1_break[0] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + BKCMP1P + BRK COMP1 input polarity + 10 + 1 + + + BKCMP2P + BRK COMP2 input polarity + 11 + 1 + + + ETRSEL + ETR source selection + 14 + 4 + + + + + AF2 + AF2 + TIM1 Alternate function odfsdm1_breakster + 2 + 0x64 + 0x20 + read-write + 0x0000 + + + BK2INE + BRK2 BKIN input enable + 0 + 1 + + + BK2CMP1E + BRK2 COMP1 enable + 1 + 1 + + + BK2CMP2E + BRK2 COMP2 enable + 2 + 1 + + + BK2DF1BK1E + BRK2 dfsdm1_break[1] + enable + 8 + 1 + + + BK2INP + BRK2 BKIN2 input polarity + 9 + 1 + + + BK2CMP1P + BRK2 COMP1 input polarit + 10 + 1 + + + BK2CMP2P + BRK2 COMP2 input polarity + 11 + 1 + + + + + TISEL + TISEL + TIM1 timer input selection + register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + selects TI1[0] to TI1[15] + input + 0 + 4 + + + TI2SEL + selects TI2[0] to TI2[15] + input + 8 + 4 + + + TI3SEL + selects TI3[0] to TI3[15] + input + 16 + 4 + + + TI4SEL + selects TI4[0] to TI4[15] + input + 24 + 4 + + + + + + + TIM8 + 0x40010400 + + TIM8_BRK_TIM12 + TIM8 and 12 break global + 43 + + + TIM8_UP_TIM13 + TIM8 and 13 update global + 44 + + + TIM8_TRG_COM_TIM14 + TIM8 and 14 trigger /commutation and + global + 45 + + + TIM8_CC + TIM8 capture / compare + 46 + + + + FDCAN1 + FDCAN1 + FDCAN + 0x4000A000 + + 0x0 + 0x400 + registers + + + FDCAN1_IT0 + FDCAN1 Interrupt 0 + 19 + + + FDCAN1_IT1 + FDCAN1 Interrupt 1 + 21 + + + FDCAN_CAL + CAN2TX interrupts + 63 + + + + FDCAN_CREL + FDCAN_CREL + FDCAN Core Release Register + 0x0 + 0x20 + read-only + 0x00000000 + + + REL + Core release + 28 + 4 + + + STEP + Step of Core release + 24 + 4 + + + SUBSTEP + Sub-step of Core release + 20 + 4 + + + YEAR + Timestamp Year + 16 + 4 + + + MON + Timestamp Month + 8 + 8 + + + DAY + Timestamp Day + 0 + 8 + + + + + FDCAN_ENDN + FDCAN_ENDN + FDCAN Core Release Register + 0x4 + 0x20 + read-only + 0x00000000 + + + ETV + Endiannes Test Value + 0 + 32 + + + + + FDCAN_DBTP + FDCAN_DBTP + FDCAN Data Bit Timing and Prescaler + Register + 0xC + 0x20 + read-only + 0x00000000 + + + DSJW + Synchronization Jump Width + 0 + 4 + + + DTSEG2 + Data time segment after sample + point + 4 + 4 + + + DTSEG1 + Data time segment after sample + point + 8 + 5 + + + DBRP + Data BIt Rate Prescaler + 16 + 5 + + + TDC + Transceiver Delay + Compensation + 23 + 1 + + + + + FDCAN_TEST + FDCAN_TEST + FDCAN Test Register + 0x10 + 0x20 + read-only + 0x00000000 + + + LBCK + Loop Back mode + 4 + 1 + + + TX + Loop Back mode + 5 + 2 + + + RX + Control of Transmit Pin + 7 + 1 + + + + + FDCAN_RWD + FDCAN_RWD + FDCAN RAM Watchdog Register + 0x14 + 0x20 + read-only + 0x00000000 + + + WDV + Watchdog value + 8 + 8 + + + WDC + Watchdog configuration + 0 + 8 + + + + + FDCAN_CCCR + FDCAN_CCCR + FDCAN CC Control Register + 0x18 + 0x20 + read-write + 0x00000000 + + + INIT + Initialization + 0 + 1 + + + CCE + Configuration Change + Enable + 1 + 1 + + + ASM + ASM Restricted Operation + Mode + 2 + 1 + + + CSA + Clock Stop Acknowledge + 3 + 1 + + + CSR + Clock Stop Request + 4 + 1 + + + MON + Bus Monitoring Mode + 5 + 1 + + + DAR + Disable Automatic + Retransmission + 6 + 1 + + + TEST + Test Mode Enable + 7 + 1 + + + FDOE + FD Operation Enable + 8 + 1 + + + BSE + FDCAN Bit Rate Switching + 9 + 1 + + + PXHD + Protocol Exception Handling + Disable + 12 + 1 + + + EFBI + Edge Filtering during Bus + Integration + 13 + 1 + + + TXP + TXP + 14 + 1 + + + NISO + Non ISO Operation + 15 + 1 + + + + + FDCAN_NBTP + FDCAN_NBTP + FDCAN Nominal Bit Timing and Prescaler + Register + 0x1C + 0x20 + read-write + 0x00000000 + + + NSJW + NSJW: Nominal (Re)Synchronization Jump + Width + 25 + 7 + + + NBRP + Bit Rate Prescaler + 16 + 9 + + + NTSEG1 + Nominal Time segment before sample + point + 8 + 8 + + + TSEG2 + Nominal Time segment after sample + point + 0 + 7 + + + + + FDCAN_TSCC + FDCAN_TSCC + FDCAN Timestamp Counter Configuration + Register + 0x20 + 0x20 + read-write + 0x00000000 + + + TCP + Timestamp Counter + Prescaler + 16 + 4 + + + TSS + Timestamp Select + 0 + 2 + + + + + FDCAN_TSCV + FDCAN_TSCV + FDCAN Timestamp Counter Value + Register + 0x24 + 0x20 + read-write + 0x00000000 + + + TSC + Timestamp Counter + 0 + 16 + + + + + FDCAN_TOCC + FDCAN_TOCC + FDCAN Timeout Counter Configuration + Register + 0x28 + 0x20 + read-write + 0x00000000 + + + ETOC + Enable Timeout Counter + 0 + 1 + + + TOS + Timeout Select + 1 + 2 + + + TOP + Timeout Period + 16 + 16 + + + + + FDCAN_TOCV + FDCAN_TOCV + FDCAN Timeout Counter Value + Register + 0x2C + 0x20 + read-write + 0x00000000 + + + TOC + Timeout Counter + 0 + 16 + + + + + FDCAN_ECR + FDCAN_ECR + FDCAN Error Counter Register + 0x40 + 0x20 + read-write + 0x00000000 + + + CEL + AN Error Logging + 16 + 8 + + + RP + Receive Error Passive + 15 + 1 + + + TREC + Receive Error Counter + 8 + 7 + + + TEC + Transmit Error Counter + 0 + 8 + + + + + FDCAN_PSR + FDCAN_PSR + FDCAN Protocol Status Register + 0x44 + 0x20 + read-write + 0x00000000 + + + LEC + Last Error Code + 0 + 3 + + + ACT + Activity + 3 + 2 + + + EP + Error Passive + 5 + 1 + + + EW + Warning Status + 6 + 1 + + + BO + Bus_Off Status + 7 + 1 + + + DLEC + Data Last Error Code + 8 + 3 + + + RESI + ESI flag of last received FDCAN + Message + 11 + 1 + + + RBRS + BRS flag of last received FDCAN + Message + 12 + 1 + + + REDL + Received FDCAN Message + 13 + 1 + + + PXE + Protocol Exception Event + 14 + 1 + + + TDCV + Transmitter Delay Compensation + Value + 16 + 7 + + + + + FDCAN_TDCR + FDCAN_TDCR + FDCAN Transmitter Delay Compensation + Register + 0x48 + 0x20 + read-only + 0x00000000 + + + TDCF + Transmitter Delay Compensation Filter + Window Length + 0 + 7 + + + TDCO + Transmitter Delay Compensation + Offset + 8 + 7 + + + + + FDCAN_IR + FDCAN_IR + FDCAN Interrupt Register + 0x50 + 0x20 + read-only + 0x00000000 + + + RF0N + Rx FIFO 0 New Message + 0 + 1 + + + RF0W + Rx FIFO 0 Full + 1 + 1 + + + RF0F + Rx FIFO 0 Full + 2 + 1 + + + RF0L + Rx FIFO 0 Message Lost + 3 + 1 + + + RF1N + Rx FIFO 1 New Message + 4 + 1 + + + RF1W + Rx FIFO 1 Watermark + Reached + 5 + 1 + + + RF1F + Rx FIFO 1 Watermark + Reached + 6 + 1 + + + RF1L + Rx FIFO 1 Message Lost + 7 + 1 + + + HPM + High Priority Message + 8 + 1 + + + TC + Transmission Completed + 9 + 1 + + + TCF + Transmission Cancellation + Finished + 10 + 1 + + + TEF + Tx FIFO Empty + 11 + 1 + + + TEFN + Tx Event FIFO New Entry + 12 + 1 + + + TEFW + Tx Event FIFO Watermark + Reached + 13 + 1 + + + TEFF + Tx Event FIFO Full + 14 + 1 + + + TEFL + Tx Event FIFO Element Lost + 15 + 1 + + + TSW + Timestamp Wraparound + 16 + 1 + + + MRAF + Message RAM Access Failure + 17 + 1 + + + TOO + Timeout Occurred + 18 + 1 + + + DRX + Message stored to Dedicated Rx + Buffer + 19 + 1 + + + ELO + Error Logging Overflow + 22 + 1 + + + EP + Error Passive + 23 + 1 + + + EW + Warning Status + 24 + 1 + + + BO + Bus_Off Status + 25 + 1 + + + WDI + Watchdog Interrupt + 26 + 1 + + + PEA + Protocol Error in Arbitration Phase + (Nominal Bit Time is used) + 27 + 1 + + + PED + Protocol Error in Data Phase (Data Bit + Time is used) + 28 + 1 + + + ARA + Access to Reserved Address + 29 + 1 + + + + + FDCAN_IE + FDCAN_IE + FDCAN Interrupt Enable + Register + 0x54 + 0x20 + read-only + 0x00000000 + + + RF0NE + Rx FIFO 0 New Message + Enable + 0 + 1 + + + RF0WE + Rx FIFO 0 Full Enable + 1 + 1 + + + RF0FE + Rx FIFO 0 Full Enable + 2 + 1 + + + RF0LE + Rx FIFO 0 Message Lost + Enable + 3 + 1 + + + RF1NE + Rx FIFO 1 New Message + Enable + 4 + 1 + + + RF1WE + Rx FIFO 1 Watermark Reached + Enable + 5 + 1 + + + RF1FE + Rx FIFO 1 Watermark Reached + Enable + 6 + 1 + + + RF1LE + Rx FIFO 1 Message Lost + Enable + 7 + 1 + + + HPME + High Priority Message + Enable + 8 + 1 + + + TCE + Transmission Completed + Enable + 9 + 1 + + + TCFE + Transmission Cancellation Finished + Enable + 10 + 1 + + + TEFE + Tx FIFO Empty Enable + 11 + 1 + + + TEFNE + Tx Event FIFO New Entry + Enable + 12 + 1 + + + TEFWE + Tx Event FIFO Watermark Reached + Enable + 13 + 1 + + + TEFFE + Tx Event FIFO Full Enable + 14 + 1 + + + TEFLE + Tx Event FIFO Element Lost + Enable + 15 + 1 + + + TSWE + Timestamp Wraparound + Enable + 16 + 1 + + + MRAFE + Message RAM Access Failure + Enable + 17 + 1 + + + TOOE + Timeout Occurred Enable + 18 + 1 + + + DRXE + Message stored to Dedicated Rx Buffer + Enable + 19 + 1 + + + BECE + Bit Error Corrected Interrupt + Enable + 20 + 1 + + + BEUE + Bit Error Uncorrected Interrupt + Enable + 21 + 1 + + + ELOE + Error Logging Overflow + Enable + 22 + 1 + + + EPE + Error Passive Enable + 23 + 1 + + + EWE + Warning Status Enable + 24 + 1 + + + BOE + Bus_Off Status Enable + 25 + 1 + + + WDIE + Watchdog Interrupt Enable + 26 + 1 + + + PEAE + Protocol Error in Arbitration Phase + Enable + 27 + 1 + + + PEDE + Protocol Error in Data Phase + Enable + 28 + 1 + + + ARAE + Access to Reserved Address + Enable + 29 + 1 + + + + + FDCAN_ILS + FDCAN_ILS + FDCAN Interrupt Line Select + Register + 0x58 + 0x20 + read-only + 0x00000000 + + + RF0NL + Rx FIFO 0 New Message Interrupt + Line + 0 + 1 + + + RF0WL + Rx FIFO 0 Watermark Reached Interrupt + Line + 1 + 1 + + + RF0FL + Rx FIFO 0 Full Interrupt + Line + 2 + 1 + + + RF0LL + Rx FIFO 0 Message Lost Interrupt + Line + 3 + 1 + + + RF1NL + Rx FIFO 1 New Message Interrupt + Line + 4 + 1 + + + RF1WL + Rx FIFO 1 Watermark Reached Interrupt + Line + 5 + 1 + + + RF1FL + Rx FIFO 1 Full Interrupt + Line + 6 + 1 + + + RF1LL + Rx FIFO 1 Message Lost Interrupt + Line + 7 + 1 + + + HPML + High Priority Message Interrupt + Line + 8 + 1 + + + TCL + Transmission Completed Interrupt + Line + 9 + 1 + + + TCFL + Transmission Cancellation Finished + Interrupt Line + 10 + 1 + + + TEFL + Tx FIFO Empty Interrupt + Line + 11 + 1 + + + TEFNL + Tx Event FIFO New Entry Interrupt + Line + 12 + 1 + + + TEFWL + Tx Event FIFO Watermark Reached + Interrupt Line + 13 + 1 + + + TEFFL + Tx Event FIFO Full Interrupt + Line + 14 + 1 + + + TEFLL + Tx Event FIFO Element Lost Interrupt + Line + 15 + 1 + + + TSWL + Timestamp Wraparound Interrupt + Line + 16 + 1 + + + MRAFL + Message RAM Access Failure Interrupt + Line + 17 + 1 + + + TOOL + Timeout Occurred Interrupt + Line + 18 + 1 + + + DRXL + Message stored to Dedicated Rx Buffer + Interrupt Line + 19 + 1 + + + BECL + Bit Error Corrected Interrupt + Line + 20 + 1 + + + BEUL + Bit Error Uncorrected Interrupt + Line + 21 + 1 + + + ELOL + Error Logging Overflow Interrupt + Line + 22 + 1 + + + EPL + Error Passive Interrupt + Line + 23 + 1 + + + EWL + Warning Status Interrupt + Line + 24 + 1 + + + BOL + Bus_Off Status + 25 + 1 + + + WDIL + Watchdog Interrupt Line + 26 + 1 + + + PEAL + Protocol Error in Arbitration Phase + Line + 27 + 1 + + + PEDL + Protocol Error in Data Phase + Line + 28 + 1 + + + ARAL + Access to Reserved Address + Line + 29 + 1 + + + + + FDCAN_ILE + FDCAN_ILE + FDCAN Interrupt Line Enable + Register + 0x5C + 0x20 + read-write + 0x00000000 + + + EINT0 + Enable Interrupt Line 0 + 0 + 1 + + + EINT1 + Enable Interrupt Line 1 + 1 + 1 + + + + + FDCAN_GFC + FDCAN_GFC + FDCAN Global Filter Configuration + Register + 0x80 + 0x20 + read-write + 0x00000000 + + + RRFE + Reject Remote Frames + Extended + 0 + 1 + + + RRFS + Reject Remote Frames + Standard + 1 + 1 + + + ANFE + Accept Non-matching Frames + Extended + 2 + 2 + + + ANFS + Accept Non-matching Frames + Standard + 4 + 2 + + + + + FDCAN_SIDFC + FDCAN_SIDFC + FDCAN Standard ID Filter Configuration + Register + 0x84 + 0x20 + read-write + 0x00000000 + + + FLSSA + Filter List Standard Start + Address + 2 + 14 + + + LSS + List Size Standard + 16 + 8 + + + + + FDCAN_XIDFC + FDCAN_XIDFC + FDCAN Extended ID Filter Configuration + Register + 0x88 + 0x20 + read-write + 0x00000000 + + + FLESA + Filter List Standard Start + Address + 2 + 14 + + + LSE + List Size Extended + 16 + 8 + + + + + FDCAN_XIDAM + FDCAN_XIDAM + FDCAN Extended ID and Mask + Register + 0x90 + 0x20 + read-write + 0x00000000 + + + EIDM + Extended ID Mask + 0 + 29 + + + + + FDCAN_HPMS + FDCAN_HPMS + FDCAN High Priority Message Status + Register + 0x94 + 0x20 + read-only + 0x00000000 + + + BIDX + Buffer Index + 0 + 6 + + + MSI + Message Storage Indicator + 6 + 2 + + + FIDX + Filter Index + 8 + 7 + + + FLST + Filter List + 15 + 1 + + + + + FDCAN_NDAT1 + FDCAN_NDAT1 + FDCAN New Data 1 Register + 0x98 + 0x20 + read-only + 0x00000000 + + + ND0 + New data + 0 + 1 + + + ND1 + New data + 1 + 1 + + + ND2 + New data + 2 + 1 + + + ND3 + New data + 3 + 1 + + + ND4 + New data + 4 + 1 + + + ND5 + New data + 5 + 1 + + + ND6 + New data + 6 + 1 + + + ND7 + New data + 7 + 1 + + + ND8 + New data + 8 + 1 + + + ND9 + New data + 9 + 1 + + + ND10 + New data + 10 + 1 + + + ND11 + New data + 11 + 1 + + + ND12 + New data + 12 + 1 + + + ND13 + New data + 13 + 1 + + + ND14 + New data + 14 + 1 + + + ND15 + New data + 15 + 1 + + + ND16 + New data + 16 + 1 + + + ND17 + New data + 17 + 1 + + + ND18 + New data + 18 + 1 + + + ND19 + New data + 19 + 1 + + + ND20 + New data + 20 + 1 + + + ND21 + New data + 21 + 1 + + + ND22 + New data + 22 + 1 + + + ND23 + New data + 23 + 1 + + + ND24 + New data + 24 + 1 + + + ND25 + New data + 25 + 1 + + + ND26 + New data + 26 + 1 + + + ND27 + New data + 27 + 1 + + + ND28 + New data + 28 + 1 + + + ND29 + New data + 29 + 1 + + + ND30 + New data + 30 + 1 + + + ND31 + New data + 31 + 1 + + + + + FDCAN_NDAT2 + FDCAN_NDAT2 + FDCAN New Data 2 Register + 0x9C + 0x20 + read-only + 0x00000000 + + + ND32 + New data + 0 + 1 + + + ND33 + New data + 1 + 1 + + + ND34 + New data + 2 + 1 + + + ND35 + New data + 3 + 1 + + + ND36 + New data + 4 + 1 + + + ND37 + New data + 5 + 1 + + + ND38 + New data + 6 + 1 + + + ND39 + New data + 7 + 1 + + + ND40 + New data + 8 + 1 + + + ND41 + New data + 9 + 1 + + + ND42 + New data + 10 + 1 + + + ND43 + New data + 11 + 1 + + + ND44 + New data + 12 + 1 + + + ND45 + New data + 13 + 1 + + + ND46 + New data + 14 + 1 + + + ND47 + New data + 15 + 1 + + + ND48 + New data + 16 + 1 + + + ND49 + New data + 17 + 1 + + + ND50 + New data + 18 + 1 + + + ND51 + New data + 19 + 1 + + + ND52 + New data + 20 + 1 + + + ND53 + New data + 21 + 1 + + + ND54 + New data + 22 + 1 + + + ND55 + New data + 23 + 1 + + + ND56 + New data + 24 + 1 + + + ND57 + New data + 25 + 1 + + + ND58 + New data + 26 + 1 + + + ND59 + New data + 27 + 1 + + + ND60 + New data + 28 + 1 + + + ND61 + New data + 29 + 1 + + + ND62 + New data + 30 + 1 + + + ND63 + New data + 31 + 1 + + + + + FDCAN_RXF0C + FDCAN_RXF0C + FDCAN Rx FIFO 0 Configuration + Register + 0xA0 + 0x20 + read-write + 0x00000000 + + + F0SA + Rx FIFO 0 Start Address + 2 + 14 + + + F0S + Rx FIFO 0 Size + 16 + 8 + + + F0WM + FIFO 0 Watermark + 24 + 8 + + + + + FDCAN_RXF0S + FDCAN_RXF0S + FDCAN Rx FIFO 0 Status + Register + 0xA4 + 0x20 + read-write + 0x00000000 + + + F0FL + Rx FIFO 0 Fill Level + 0 + 7 + + + F0G + Rx FIFO 0 Get Index + 8 + 6 + + + F0P + Rx FIFO 0 Put Index + 16 + 6 + + + F0F + Rx FIFO 0 Full + 24 + 1 + + + RF0L + Rx FIFO 0 Message Lost + 25 + 1 + + + + + FDCAN_RXF0A + FDCAN_RXF0A + CAN Rx FIFO 0 Acknowledge + Register + 0xA8 + 0x20 + read-write + 0x00000000 + + + FA01 + Rx FIFO 0 Acknowledge + Index + 0 + 6 + + + + + FDCAN_RXBC + FDCAN_RXBC + FDCAN Rx Buffer Configuration + Register + 0xAC + 0x20 + read-write + 0x00000000 + + + RBSA + Rx Buffer Start Address + 2 + 14 + + + + + FDCAN_RXF1C + FDCAN_RXF1C + FDCAN Rx FIFO 1 Configuration + Register + 0xB0 + 0x20 + read-write + 0x00000000 + + + F1SA + Rx FIFO 1 Start Address + 2 + 14 + + + F1S + Rx FIFO 1 Size + 16 + 7 + + + F1WM + Rx FIFO 1 Watermark + 24 + 7 + + + + + FDCAN_RXF1S + FDCAN_RXF1S + FDCAN Rx FIFO 1 Status + Register + 0xB4 + 0x20 + read-write + 0x00000000 + + + F1FL + Rx FIFO 1 Fill Level + 0 + 7 + + + F1GI + Rx FIFO 1 Get Index + 8 + 7 + + + F1PI + Rx FIFO 1 Put Index + 16 + 7 + + + F1F + Rx FIFO 1 Full + 24 + 1 + + + RF1L + Rx FIFO 1 Message Lost + 25 + 1 + + + DMS + Debug Message Status + 30 + 2 + + + + + FDCAN_RXF1A + FDCAN_RXF1A + FDCAN Rx FIFO 1 Acknowledge + Register + 0xB8 + 0x20 + read-write + 0x00000000 + + + F1AI + Rx FIFO 1 Acknowledge + Index + 0 + 6 + + + + + FDCAN_RXESC + FDCAN_RXESC + FDCAN Rx Buffer Element Size Configuration + Register + 0xBC + 0x20 + read-write + 0x00000000 + + + F0DS + Rx FIFO 1 Data Field Size: + 0 + 3 + + + F1DS + Rx FIFO 0 Data Field Size: + 4 + 3 + + + RBDS + Rx Buffer Data Field Size: + 8 + 3 + + + + + FDCAN_TXBC + FDCAN_TXBC + FDCAN Tx Buffer Configuration + Register + 0xC0 + 0x20 + read-write + 0x00000000 + + + TBSA + Tx Buffers Start Address + 2 + 14 + + + NDTB + Number of Dedicated Transmit + Buffers + 16 + 6 + + + TFQS + Transmit FIFO/Queue Size + 24 + 6 + + + TFQM + Tx FIFO/Queue Mode + 30 + 1 + + + + + FDCAN_TXFQS + FDCAN_TXFQS + FDCAN Tx FIFO/Queue Status + Register + 0xC4 + 0x20 + read-only + 0x00000000 + + + TFFL + Tx FIFO Free Level + 0 + 6 + + + TFGI + TFGI + 8 + 5 + + + TFQPI + Tx FIFO/Queue Put Index + 16 + 5 + + + TFQF + Tx FIFO/Queue Full + 21 + 1 + + + + + FDCAN_TXESC + FDCAN_TXESC + FDCAN Tx Buffer Element Size Configuration + Register + 0xC8 + 0x20 + read-write + 0x00000000 + + + TBDS + Tx Buffer Data Field Size: + 0 + 3 + + + + + FDCAN_TXBRP + FDCAN_TXBRP + FDCAN Tx Buffer Request Pending + Register + 0xCC + 0x20 + read-only + 0x00000000 + + + TRP + Transmission Request + Pending + 0 + 32 + + + + + FDCAN_TXBAR + FDCAN_TXBAR + FDCAN Tx Buffer Add Request + Register + 0xD0 + 0x20 + read-write + 0x00000000 + + + AR + Add Request + 0 + 32 + + + + + FDCAN_TXBCR + FDCAN_TXBCR + FDCAN Tx Buffer Cancellation Request + Register + 0xD4 + 0x20 + read-write + 0x00000000 + + + CR + Cancellation Request + 0 + 32 + + + + + FDCAN_TXBTO + FDCAN_TXBTO + FDCAN Tx Buffer Transmission Occurred + Register + 0xD8 + 0x20 + read-write + 0x00000000 + + + TO + Transmission Occurred. + 0 + 32 + + + + + FDCAN_TXBCF + FDCAN_TXBCF + FDCAN Tx Buffer Cancellation Finished + Register + 0xDC + 0x20 + read-only + 0x00000000 + + + CF + Cancellation Finished + 0 + 32 + + + + + FDCAN_TXBTIE + FDCAN_TXBTIE + FDCAN Tx Buffer Transmission Interrupt + Enable Register + 0xE0 + 0x20 + read-write + 0x00000000 + + + TIE + Transmission Interrupt + Enable + 0 + 32 + + + + + FDCAN_TXBCIE + FDCAN_TXBCIE + FDCAN Tx Buffer Cancellation Finished + Interrupt Enable Register + 0xE4 + 0x20 + read-write + 0x00000000 + + + CF + Cancellation Finished Interrupt + Enable + 0 + 32 + + + + + FDCAN_TXEFC + FDCAN_TXEFC + FDCAN Tx Event FIFO Configuration + Register + 0xF0 + 0x20 + read-write + 0x00000000 + + + EFSA + Event FIFO Start Address + 2 + 14 + + + EFS + Event FIFO Size + 16 + 6 + + + EFWM + Event FIFO Watermark + 24 + 6 + + + + + FDCAN_TXEFS + FDCAN_TXEFS + FDCAN Tx Event FIFO Status + Register + 0xF4 + 0x20 + read-write + 0x00000000 + + + EFFL + Event FIFO Fill Level + 0 + 6 + + + EFGI + Event FIFO Get Index. + 8 + 5 + + + EFF + Event FIFO Full. + 24 + 1 + + + TEFL + Tx Event FIFO Element + Lost. + 25 + 1 + + + + + FDCAN_TXEFA + FDCAN_TXEFA + FDCAN Tx Event FIFO Acknowledge + Register + 0xF8 + 0x20 + read-write + 0x00000000 + + + EFAI + Event FIFO Acknowledge + Index + 0 + 5 + + + + + FDCAN_TTTMC + FDCAN_TTTMC + FDCAN TT Trigger Memory Configuration + Register + 0x100 + 0x20 + read-write + 0x00000000 + + + TMSA + Trigger Memory Start + Address + 2 + 14 + + + TME + Trigger Memory Elements + 16 + 7 + + + + + FDCAN_TTRMC + FDCAN_TTRMC + FDCAN TT Reference Message Configuration + Register + 0x104 + 0x20 + read-write + 0x00000000 + + + RID + Reference Identifier. + 0 + 29 + + + XTD + Extended Identifier + 30 + 1 + + + RMPS + Reference Message Payload + Select + 31 + 1 + + + + + FDCAN_TTOCF + FDCAN_TTOCF + FDCAN TT Operation Configuration + Register + 0x108 + 0x20 + read-write + 0x00000000 + + + OM + Operation Mode + 0 + 2 + + + GEN + Gap Enable + 3 + 1 + + + TM + Time Master + 4 + 1 + + + LDSDL + LD of Synchronization Deviation + Limit + 5 + 3 + + + IRTO + Initial Reference Trigger + Offset + 8 + 7 + + + EECS + Enable External Clock + Synchronization + 15 + 1 + + + AWL + Application Watchdog Limit + 16 + 8 + + + EGTF + Enable Global Time + Filtering + 24 + 1 + + + ECC + Enable Clock Calibration + 25 + 1 + + + EVTP + Event Trigger Polarity + 26 + 1 + + + + + FDCAN_TTMLM + FDCAN_TTMLM + FDCAN TT Matrix Limits + Register + 0x10C + 0x20 + read-write + 0x00000000 + + + CCM + Cycle Count Max + 0 + 6 + + + CSS + Cycle Start + Synchronization + 6 + 2 + + + TXEW + Tx Enable Window + 8 + 4 + + + ENTT + Expected Number of Tx + Triggers + 16 + 12 + + + + + FDCAN_TURCF + FDCAN_TURCF + FDCAN TUR Configuration + Register + 0x110 + 0x20 + read-write + 0x00000000 + + + NCL + Numerator Configuration + Low. + 0 + 16 + + + DC + Denominator Configuration. + 16 + 14 + + + ELT + Enable Local Time + 31 + 1 + + + + + FDCAN_TTOCN + FDCAN_TTOCN + FDCAN TT Operation Control + Register + 0x114 + 0x20 + read-write + 0x00000000 + + + SGT + Set Global time + 0 + 1 + + + ECS + External Clock + Synchronization + 1 + 1 + + + SWP + Stop Watch Polarity + 2 + 1 + + + SWS + Stop Watch Source. + 3 + 2 + + + RTIE + Register Time Mark Interrupt Pulse + Enable + 5 + 1 + + + TMC + Register Time Mark Compare + 6 + 2 + + + TTIE + Trigger Time Mark Interrupt Pulse + Enable + 8 + 1 + + + GCS + Gap Control Select + 9 + 1 + + + FGP + Finish Gap. + 10 + 1 + + + TMG + Time Mark Gap + 11 + 1 + + + NIG + Next is Gap + 12 + 1 + + + ESCN + External Synchronization + Control + 13 + 1 + + + LCKC + TT Operation Control Register + Locked + 15 + 1 + + + + + CAN_TTGTP + CAN_TTGTP + FDCAN TT Global Time Preset + Register + 0x118 + 0x20 + read-write + 0x00000000 + + + NCL + Time Preset + 0 + 16 + + + CTP + Cycle Time Target Phase + 16 + 16 + + + + + FDCAN_TTTMK + FDCAN_TTTMK + FDCAN TT Time Mark Register + 0x11C + 0x20 + read-write + 0x00000000 + + + TM + Time Mark + 0 + 16 + + + TICC + Time Mark Cycle Code + 16 + 7 + + + LCKM + TT Time Mark Register + Locked + 31 + 1 + + + + + FDCAN_TTIR + FDCAN_TTIR + FDCAN TT Interrupt Register + 0x120 + 0x20 + read-write + 0x00000000 + + + SBC + Start of Basic Cycle + 0 + 1 + + + SMC + Start of Matrix Cycle + 1 + 1 + + + CSM + Change of Synchronization + Mode + 2 + 1 + + + SOG + Start of Gap + 3 + 1 + + + RTMI + Register Time Mark + Interrupt. + 4 + 1 + + + TTMI + Trigger Time Mark Event + Internal + 5 + 1 + + + SWE + Stop Watch Event + 6 + 1 + + + GTW + Global Time Wrap + 7 + 1 + + + GTD + Global Time Discontinuity + 8 + 1 + + + GTE + Global Time Error + 9 + 1 + + + TXU + Tx Count Underflow + 10 + 1 + + + TXO + Tx Count Overflow + 11 + 1 + + + SE1 + Scheduling Error 1 + 12 + 1 + + + SE2 + Scheduling Error 2 + 13 + 1 + + + ELC + Error Level Changed. + 14 + 1 + + + IWTG + Initialization Watch + Trigger + 15 + 1 + + + WT + Watch Trigger + 16 + 1 + + + AW + Application Watchdog + 17 + 1 + + + CER + Configuration Error + 18 + 1 + + + + + FDCAN_TTIE + FDCAN_TTIE + FDCAN TT Interrupt Enable + Register + 0x124 + 0x20 + read-write + 0x00000000 + + + SBCE + Start of Basic Cycle Interrupt + Enable + 0 + 1 + + + SMCE + Start of Matrix Cycle Interrupt + Enable + 1 + 1 + + + CSME + Change of Synchronization Mode Interrupt + Enable + 2 + 1 + + + SOGE + Start of Gap Interrupt + Enable + 3 + 1 + + + RTMIE + Register Time Mark Interrupt + Enable + 4 + 1 + + + TTMIE + Trigger Time Mark Event Internal + Interrupt Enable + 5 + 1 + + + SWEE + Stop Watch Event Interrupt + Enable + 6 + 1 + + + GTWE + Global Time Wrap Interrupt + Enable + 7 + 1 + + + GTDE + Global Time Discontinuity Interrupt + Enable + 8 + 1 + + + GTEE + Global Time Error Interrupt + Enable + 9 + 1 + + + TXUE + Tx Count Underflow Interrupt + Enable + 10 + 1 + + + TXOE + Tx Count Overflow Interrupt + Enable + 11 + 1 + + + SE1E + Scheduling Error 1 Interrupt + Enable + 12 + 1 + + + SE2E + Scheduling Error 2 Interrupt + Enable + 13 + 1 + + + ELCE + Change Error Level Interrupt + Enable + 14 + 1 + + + IWTGE + Initialization Watch Trigger Interrupt + Enable + 15 + 1 + + + WTE + Watch Trigger Interrupt + Enable + 16 + 1 + + + AWE + Application Watchdog Interrupt + Enable + 17 + 1 + + + CERE + Configuration Error Interrupt + Enable + 18 + 1 + + + + + FDCAN_TTILS + FDCAN_TTILS + FDCAN TT Interrupt Line Select + Register + 0x128 + 0x20 + read-write + 0x00000000 + + + SBCL + Start of Basic Cycle Interrupt + Line + 0 + 1 + + + SMCL + Start of Matrix Cycle Interrupt + Line + 1 + 1 + + + CSML + Change of Synchronization Mode Interrupt + Line + 2 + 1 + + + SOGL + Start of Gap Interrupt + Line + 3 + 1 + + + RTMIL + Register Time Mark Interrupt + Line + 4 + 1 + + + TTMIL + Trigger Time Mark Event Internal + Interrupt Line + 5 + 1 + + + SWEL + Stop Watch Event Interrupt + Line + 6 + 1 + + + GTWL + Global Time Wrap Interrupt + Line + 7 + 1 + + + GTDL + Global Time Discontinuity Interrupt + Line + 8 + 1 + + + GTEL + Global Time Error Interrupt + Line + 9 + 1 + + + TXUL + Tx Count Underflow Interrupt + Line + 10 + 1 + + + TXOL + Tx Count Overflow Interrupt + Line + 11 + 1 + + + SE1L + Scheduling Error 1 Interrupt + Line + 12 + 1 + + + SE2L + Scheduling Error 2 Interrupt + Line + 13 + 1 + + + ELCL + Change Error Level Interrupt + Line + 14 + 1 + + + IWTGL + Initialization Watch Trigger Interrupt + Line + 15 + 1 + + + WTL + Watch Trigger Interrupt + Line + 16 + 1 + + + AWL + Application Watchdog Interrupt + Line + 17 + 1 + + + CERL + Configuration Error Interrupt + Line + 18 + 1 + + + + + FDCAN_TTOST + FDCAN_TTOST + FDCAN TT Operation Status + Register + 0x12C + 0x20 + read-write + 0x00000000 + + + EL + Error Level + 0 + 2 + + + MS + Master State. + 2 + 2 + + + SYS + Synchronization State + 4 + 2 + + + GTP + Quality of Global Time + Phase + 6 + 1 + + + QCS + Quality of Clock Speed + 7 + 1 + + + RTO + Reference Trigger Offset + 8 + 8 + + + WGTD + Wait for Global Time + Discontinuity + 22 + 1 + + + GFI + Gap Finished Indicator. + 23 + 1 + + + TMP + Time Master Priority + 24 + 3 + + + GSI + Gap Started Indicator. + 27 + 1 + + + WFE + Wait for Event + 28 + 1 + + + AWE + Application Watchdog Event + 29 + 1 + + + WECS + Wait for External Clock + Synchronization + 30 + 1 + + + SPL + Schedule Phase Lock + 31 + 1 + + + + + FDCAN_TURNA + FDCAN_TURNA + FDCAN TUR Numerator Actual + Register + 0x130 + 0x20 + read-only + 0x00000000 + + + NAV + Numerator Actual Value + 0 + 18 + + + + + FDCAN_TTLGT + FDCAN_TTLGT + FDCAN TT Local and Global Time + Register + 0x134 + 0x20 + read-only + 0x00000000 + + + LT + Local Time + 0 + 16 + + + GT + Global Time + 16 + 16 + + + + + FDCAN_TTCTC + FDCAN_TTCTC + FDCAN TT Cycle Time and Count + Register + 0x138 + 0x20 + read-only + 0x00000000 + + + CT + Cycle Time + 0 + 16 + + + CC + Cycle Count + 16 + 6 + + + + + FDCAN_TTCPT + FDCAN_TTCPT + FDCAN TT Capture Time Register + 0x13C + 0x20 + read-only + 0x00000000 + + + CT + Cycle Count Value + 0 + 6 + + + SWV + Stop Watch Value + 16 + 16 + + + + + FDCAN_TTCSM + FDCAN_TTCSM + FDCAN TT Cycle Sync Mark + Register + 0x140 + 0x20 + read-only + 0x00000000 + + + CSM + Cycle Sync Mark + 0 + 16 + + + + + FDCAN_TTTS + FDCAN_TTTS + FDCAN TT Trigger Select + Register + 0x300 + 0x20 + read-write + 0x00000000 + + + SWTDEL + Stop watch trigger input + selection + 0 + 2 + + + EVTSEL + Event trigger input + selection + 4 + 2 + + + + + + + FDCAN2 + 0x4000A400 + + FDCAN2_IT0 + FDCAN2 Interrupt 0 + 20 + + + FDCAN2_IT1 + FDCAN2 Interrupt 1 + 22 + + + + CAN_CCU + CCU registers + FDCAN + 0x4000A800 + + 0x0 + 0x400 + registers + + + + CREL + CREL + Clock Calibration Unit Core Release + Register + 0x0 + 0x20 + read-write + 0x00000000 + + + DAY + Time Stamp Day + 0 + 8 + + + MON + Time Stamp Month + 8 + 8 + + + YEAR + Time Stamp Year + 16 + 4 + + + SUBSTEP + Sub-step of Core Release + 20 + 4 + + + STEP + Step of Core Release + 24 + 4 + + + REL + Core Release + 28 + 4 + + + + + CCFG + CCFG + Calibration Configuration + Register + 0x4 + 0x20 + read-write + 0x00000000 + + + TQBT + Time Quanta per Bit Time + 0 + 5 + + + BCC + Bypass Clock Calibration + 6 + 1 + + + CFL + Calibration Field Length + 7 + 1 + + + OCPM + Oscillator Clock Periods + Minimum + 8 + 8 + + + CDIV + Clock Divider + 16 + 4 + + + SWR + Software Reset + 31 + 1 + + + + + CSTAT + CSTAT + Calibration Status Register + 0x8 + 0x20 + read-write + 0x00000000 + + + OCPC + Oscillator Clock Period + Counter + 0 + 18 + + + TQC + Time Quanta Counter + 18 + 11 + + + CALS + Calibration State + 30 + 2 + + + + + CWD + CWD + Calibration Watchdog Register + 0xC + 0x20 + read-write + 0x00000000 + + + WDC + WDC + 0 + 16 + + + WDV + WDV + 16 + 16 + + + + + IR + IR + Clock Calibration Unit Interrupt + Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CWE + Calibration Watchdog Event + 0 + 1 + + + CSC + Calibration State Changed + 1 + 1 + + + + + IE + IE + Clock Calibration Unit Interrupt Enable + Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CWEE + Calibration Watchdog Event + Enable + 0 + 1 + + + CSCE + Calibration State Changed + Enable + 1 + 1 + + + + + + + MDIOS + Management data input/output slave + MDIOS + 0x40009400 + + 0x0 + 0x400 + registers + + + MDIOS_WKUP + MDIOS wakeup + 119 + + + MDIOS + MDIOS global interrupt + 120 + + + + MDIOS_CR + MDIOS_CR + MDIOS configuration register + 0x0 + 0x20 + read-write + 0x00000000 + + + EN + Peripheral enable + 0 + 1 + + + WRIE + Register write interrupt + enable + 1 + 1 + + + RDIE + Register Read Interrupt + Enable + 2 + 1 + + + EIE + Error interrupt enable + 3 + 1 + + + DPC + Disable Preamble Check + 7 + 1 + + + PORT_ADDRESS + Slaves's address + 8 + 5 + + + + + MDIOS_WRFR + MDIOS_WRFR + MDIOS write flag register + 0x4 + 0x20 + read-only + 0x00000000 + + + WRF + Write flags for MDIO registers 0 to + 31 + 0 + 32 + + + + + MDIOS_CWRFR + MDIOS_CWRFR + MDIOS clear write flag + register + 0x8 + 0x20 + read-write + 0x00000000 + + + CWRF + Clear the write flag + 0 + 32 + + + + + MDIOS_RDFR + MDIOS_RDFR + MDIOS read flag register + 0xC + 0x20 + read-only + 0x00000000 + + + RDF + Read flags for MDIO registers 0 to + 31 + 0 + 32 + + + + + MDIOS_CRDFR + MDIOS_CRDFR + MDIOS clear read flag register + 0x10 + 0x20 + read-write + 0x00000000 + + + CRDF + Clear the read flag + 0 + 32 + + + + + MDIOS_SR + MDIOS_SR + MDIOS status register + 0x14 + 0x20 + read-only + 0x00000000 + + + PERF + Preamble error flag + 0 + 1 + + + SERF + Start error flag + 1 + 1 + + + TERF + Turnaround error flag + 2 + 1 + + + + + MDIOS_CLRFR + MDIOS_CLRFR + MDIOS clear flag register + 0x18 + 0x20 + read-write + 0x00000000 + + + CPERF + Clear the preamble error + flag + 0 + 1 + + + CSERF + Clear the start error flag + 1 + 1 + + + CTERF + Clear the turnaround error + flag + 2 + 1 + + + + + MDIOS_DINR0 + MDIOS_DINR0 + MDIOS input data register 0 + 0x1C + 0x20 + read-only + 0x00000000 + + + DIN0 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR1 + MDIOS_DINR1 + MDIOS input data register 1 + 0x20 + 0x20 + read-only + 0x00000000 + + + DIN1 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR2 + MDIOS_DINR2 + MDIOS input data register 2 + 0x24 + 0x20 + read-only + 0x00000000 + + + DIN2 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR3 + MDIOS_DINR3 + MDIOS input data register 3 + 0x28 + 0x20 + read-only + 0x00000000 + + + DIN3 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR4 + MDIOS_DINR4 + MDIOS input data register 4 + 0x2C + 0x20 + read-only + 0x00000000 + + + DIN4 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR5 + MDIOS_DINR5 + MDIOS input data register 5 + 0x30 + 0x20 + read-only + 0x00000000 + + + DIN5 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR6 + MDIOS_DINR6 + MDIOS input data register 6 + 0x34 + 0x20 + read-only + 0x00000000 + + + DIN6 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR7 + MDIOS_DINR7 + MDIOS input data register 7 + 0x38 + 0x20 + read-only + 0x00000000 + + + DIN7 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR8 + MDIOS_DINR8 + MDIOS input data register 8 + 0x3C + 0x20 + read-only + 0x00000000 + + + DIN8 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR9 + MDIOS_DINR9 + MDIOS input data register 9 + 0x40 + 0x20 + read-only + 0x00000000 + + + DIN9 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR10 + MDIOS_DINR10 + MDIOS input data register 10 + 0x44 + 0x20 + read-only + 0x00000000 + + + DIN10 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR11 + MDIOS_DINR11 + MDIOS input data register 11 + 0x48 + 0x20 + read-only + 0x00000000 + + + DIN11 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR12 + MDIOS_DINR12 + MDIOS input data register 12 + 0x4C + 0x20 + read-only + 0x00000000 + + + DIN12 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR13 + MDIOS_DINR13 + MDIOS input data register 13 + 0x50 + 0x20 + read-only + 0x00000000 + + + DIN13 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR14 + MDIOS_DINR14 + MDIOS input data register 14 + 0x54 + 0x20 + read-only + 0x00000000 + + + DIN14 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR15 + MDIOS_DINR15 + MDIOS input data register 15 + 0x58 + 0x20 + read-only + 0x00000000 + + + DIN15 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR16 + MDIOS_DINR16 + MDIOS input data register 16 + 0x5C + 0x20 + read-only + 0x00000000 + + + DIN16 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR17 + MDIOS_DINR17 + MDIOS input data register 17 + 0x60 + 0x20 + read-only + 0x00000000 + + + DIN17 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR18 + MDIOS_DINR18 + MDIOS input data register 18 + 0x64 + 0x20 + read-only + 0x00000000 + + + DIN18 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR19 + MDIOS_DINR19 + MDIOS input data register 19 + 0x68 + 0x20 + read-only + 0x00000000 + + + DIN19 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR20 + MDIOS_DINR20 + MDIOS input data register 20 + 0x6C + 0x20 + read-only + 0x00000000 + + + DIN20 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR21 + MDIOS_DINR21 + MDIOS input data register 21 + 0x70 + 0x20 + read-only + 0x00000000 + + + DIN21 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR22 + MDIOS_DINR22 + MDIOS input data register 22 + 0x74 + 0x20 + read-only + 0x00000000 + + + DIN22 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR23 + MDIOS_DINR23 + MDIOS input data register 23 + 0x78 + 0x20 + read-only + 0x00000000 + + + DIN23 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR24 + MDIOS_DINR24 + MDIOS input data register 24 + 0x7C + 0x20 + read-only + 0x00000000 + + + DIN24 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR25 + MDIOS_DINR25 + MDIOS input data register 25 + 0x80 + 0x20 + read-only + 0x00000000 + + + DIN25 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR26 + MDIOS_DINR26 + MDIOS input data register 26 + 0x84 + 0x20 + read-only + 0x00000000 + + + DIN26 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR27 + MDIOS_DINR27 + MDIOS input data register 27 + 0x88 + 0x20 + read-only + 0x00000000 + + + DIN27 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR28 + MDIOS_DINR28 + MDIOS input data register 28 + 0x8C + 0x20 + read-only + 0x00000000 + + + DIN28 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR29 + MDIOS_DINR29 + MDIOS input data register 29 + 0x90 + 0x20 + read-only + 0x00000000 + + + DIN29 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR30 + MDIOS_DINR30 + MDIOS input data register 30 + 0x94 + 0x20 + read-only + 0x00000000 + + + DIN30 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DINR31 + MDIOS_DINR31 + MDIOS input data register 31 + 0x98 + 0x20 + read-only + 0x00000000 + + + DIN31 + Input data received from MDIO Master + during write frames + 0 + 16 + + + + + MDIOS_DOUTR0 + MDIOS_DOUTR0 + MDIOS output data register 0 + 0x9C + 0x20 + read-write + 0x00000000 + + + DOUT0 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR1 + MDIOS_DOUTR1 + MDIOS output data register 1 + 0xA0 + 0x20 + read-write + 0x00000000 + + + DOUT1 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR2 + MDIOS_DOUTR2 + MDIOS output data register 2 + 0xA4 + 0x20 + read-write + 0x00000000 + + + DOUT2 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR3 + MDIOS_DOUTR3 + MDIOS output data register 3 + 0xA8 + 0x20 + read-write + 0x00000000 + + + DOUT3 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR4 + MDIOS_DOUTR4 + MDIOS output data register 4 + 0xAC + 0x20 + read-write + 0x00000000 + + + DOUT4 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR5 + MDIOS_DOUTR5 + MDIOS output data register 5 + 0xB0 + 0x20 + read-write + 0x00000000 + + + DOUT5 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR6 + MDIOS_DOUTR6 + MDIOS output data register 6 + 0xB4 + 0x20 + read-write + 0x00000000 + + + DOUT6 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR7 + MDIOS_DOUTR7 + MDIOS output data register 7 + 0xB8 + 0x20 + read-write + 0x00000000 + + + DOUT7 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR8 + MDIOS_DOUTR8 + MDIOS output data register 8 + 0xBC + 0x20 + read-write + 0x00000000 + + + DOUT8 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR9 + MDIOS_DOUTR9 + MDIOS output data register 9 + 0xC0 + 0x20 + read-write + 0x00000000 + + + DOUT9 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR10 + MDIOS_DOUTR10 + MDIOS output data register 10 + 0xC4 + 0x20 + read-write + 0x00000000 + + + DOUT10 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR11 + MDIOS_DOUTR11 + MDIOS output data register 11 + 0xC8 + 0x20 + read-write + 0x00000000 + + + DOUT11 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR12 + MDIOS_DOUTR12 + MDIOS output data register 12 + 0xCC + 0x20 + read-write + 0x00000000 + + + DOUT12 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR13 + MDIOS_DOUTR13 + MDIOS output data register 13 + 0xD0 + 0x20 + read-write + 0x00000000 + + + DOUT13 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR14 + MDIOS_DOUTR14 + MDIOS output data register 14 + 0xD4 + 0x20 + read-write + 0x00000000 + + + DOUT14 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR15 + MDIOS_DOUTR15 + MDIOS output data register 15 + 0xD8 + 0x20 + read-write + 0x00000000 + + + DOUT15 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR16 + MDIOS_DOUTR16 + MDIOS output data register 16 + 0xDC + 0x20 + read-write + 0x00000000 + + + DOUT16 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR17 + MDIOS_DOUTR17 + MDIOS output data register 17 + 0xE0 + 0x20 + read-write + 0x00000000 + + + DOUT17 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR18 + MDIOS_DOUTR18 + MDIOS output data register 18 + 0xE4 + 0x20 + read-write + 0x00000000 + + + DOUT18 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR19 + MDIOS_DOUTR19 + MDIOS output data register 19 + 0xE8 + 0x20 + read-write + 0x00000000 + + + DOUT19 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR20 + MDIOS_DOUTR20 + MDIOS output data register 20 + 0xEC + 0x20 + read-write + 0x00000000 + + + DOUT20 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR21 + MDIOS_DOUTR21 + MDIOS output data register 21 + 0xF0 + 0x20 + read-write + 0x00000000 + + + DOUT21 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR22 + MDIOS_DOUTR22 + MDIOS output data register 22 + 0xF4 + 0x20 + read-write + 0x00000000 + + + DOUT22 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR23 + MDIOS_DOUTR23 + MDIOS output data register 23 + 0xF8 + 0x20 + read-write + 0x00000000 + + + DOUT23 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR24 + MDIOS_DOUTR24 + MDIOS output data register 24 + 0xFC + 0x20 + read-write + 0x00000000 + + + DOUT24 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR25 + MDIOS_DOUTR25 + MDIOS output data register 25 + 0x100 + 0x20 + read-write + 0x00000000 + + + DOUT25 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR26 + MDIOS_DOUTR26 + MDIOS output data register 26 + 0x104 + 0x20 + read-write + 0x00000000 + + + DOUT26 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR27 + MDIOS_DOUTR27 + MDIOS output data register 27 + 0x108 + 0x20 + read-write + 0x00000000 + + + DOUT27 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR28 + MDIOS_DOUTR28 + MDIOS output data register 28 + 0x10C + 0x20 + read-write + 0x00000000 + + + DOUT28 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR29 + MDIOS_DOUTR29 + MDIOS output data register 29 + 0x110 + 0x20 + read-write + 0x00000000 + + + DOUT29 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR30 + MDIOS_DOUTR30 + MDIOS output data register 30 + 0x114 + 0x20 + read-write + 0x00000000 + + + DOUT30 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + MDIOS_DOUTR31 + MDIOS_DOUTR31 + MDIOS output data register 31 + 0x118 + 0x20 + read-write + 0x00000000 + + + DOUT31 + Output data sent to MDIO Master during + read frames + 0 + 16 + + + + + + + OPAMP + Operational amplifiers + OPAMP + 0x40009000 + + 0x0 + 0x400 + registers + + + + OPAMP1_CSR + OPAMP1_CSR + OPAMP1 control/status register + 0x0 + 0x20 + read-write + 0x00000000 + + + OPAEN + Operational amplifier + Enable + 0 + 1 + + + FORCE_VP + Force internal reference on VP (reserved + for test + 1 + 1 + + + VP_SEL + Operational amplifier PGA + mode + 2 + 2 + + + VM_SEL + Inverting input selection + 5 + 2 + + + OPAHSM + Operational amplifier high-speed + mode + 8 + 1 + + + CALON + Calibration mode enabled + 11 + 1 + + + CALSEL + Calibration selection + 12 + 2 + + + PGA_GAIN + allows to switch from AOP offset trimmed + values to AOP offset + 14 + 4 + + + USERTRIM + User trimming enable + 18 + 1 + + + TSTREF + OPAMP calibration reference voltage + output control (reserved for test) + 29 + 1 + + + CALOUT + Operational amplifier calibration + output + 30 + 1 + + + + + OPAMP1_OTR + OPAMP1_OTR + OPAMP1 offset trimming register in normal + mode + 0x4 + 0x20 + read-write + 0x00000000 + + + TRIMOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + OPAMP1_HSOTR + OPAMP1_HSOTR + OPAMP1 offset trimming register in low-power + mode + 0x8 + 0x20 + read-write + 0x00000000 + + + TRIMLPOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMLPOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + OPAMP2_CSR + OPAMP2_CSR + OPAMP2 control/status register + 0x10 + 0x20 + read-write + 0x00000000 + + + OPAEN + Operational amplifier + Enable + 0 + 1 + + + FORCE_VP + Force internal reference on VP (reserved + for test) + 1 + 1 + + + VM_SEL + Inverting input selection + 5 + 2 + + + OPAHSM + Operational amplifier high-speed + mode + 8 + 1 + + + CALON + Calibration mode enabled + 11 + 1 + + + CALSEL + Calibration selection + 12 + 2 + + + PGA_GAIN + Operational amplifier Programmable + amplifier gain value + 14 + 4 + + + USERTRIM + User trimming enable + 18 + 1 + + + TSTREF + OPAMP calibration reference voltage + output control (reserved for test) + 29 + 1 + + + CALOUT + Operational amplifier calibration + output + 30 + 1 + + + + + OPAMP2_OTR + OPAMP2_OTR + OPAMP2 offset trimming register in normal + mode + 0x14 + 0x20 + read-write + 0x00000000 + + + TRIMOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + OPAMP2_HSOTR + OPAMP2_HSOTR + OPAMP2 offset trimming register in low-power + mode + 0x18 + 0x20 + read-write + 0x00000000 + + + TRIMLPOFFSETN + Trim for NMOS differential + pairs + 0 + 5 + + + TRIMLPOFFSETP + Trim for PMOS differential + pairs + 8 + 5 + + + + + + + SWPMI + Single Wire Protocol Master + Interface + SWPMI + 0x40008800 + + 0x0 + 0x400 + registers + + + SWPMI1 + SWPMI global interrupt + 115 + + + + CR + CR + SWPMI Configuration/Control + register + 0x0 + 0x20 + read-write + 0x00000000 + + + RXDMA + Reception DMA enable + 0 + 1 + + + TXDMA + Transmission DMA enable + 1 + 1 + + + RXMODE + Reception buffering mode + 2 + 1 + + + TXMODE + Transmission buffering + mode + 3 + 1 + + + LPBK + Loopback mode enable + 4 + 1 + + + SWPACT + Single wire protocol master interface + activate + 5 + 1 + + + DEACT + Single wire protocol master interface + deactivate + 10 + 1 + + + SWPTEN + Single wire protocol master transceiver + enable + 11 + 1 + + + + + BRR + BRR + SWPMI Bitrate register + 0x4 + 0x20 + read-write + 0x00000001 + + + BR + Bitrate prescaler + 0 + 8 + + + + + ISR + ISR + SWPMI Interrupt and Status + register + 0xC + 0x20 + read-only + 0x000002C2 + + + RXBFF + Receive buffer full flag + 0 + 1 + + + TXBEF + Transmit buffer empty flag + 1 + 1 + + + RXBERF + Receive CRC error flag + 2 + 1 + + + RXOVRF + Receive overrun error flag + 3 + 1 + + + TXUNRF + Transmit underrun error + flag + 4 + 1 + + + RXNE + Receive data register not + empty + 5 + 1 + + + TXE + Transmit data register + empty + 6 + 1 + + + TCF + Transfer complete flag + 7 + 1 + + + SRF + Slave resume flag + 8 + 1 + + + SUSP + SUSPEND flag + 9 + 1 + + + DEACTF + DEACTIVATED flag + 10 + 1 + + + RDYF + transceiver ready flag + 11 + 1 + + + + + ICR + ICR + SWPMI Interrupt Flag Clear + register + 0x10 + 0x20 + write-only + 0x00000000 + + + CRXBFF + Clear receive buffer full + flag + 0 + 1 + + + CTXBEF + Clear transmit buffer empty + flag + 1 + 1 + + + CRXBERF + Clear receive CRC error + flag + 2 + 1 + + + CRXOVRF + Clear receive overrun error + flag + 3 + 1 + + + CTXUNRF + Clear transmit underrun error + flag + 4 + 1 + + + CTCF + Clear transfer complete + flag + 7 + 1 + + + CSRF + Clear slave resume flag + 8 + 1 + + + CRDYF + Clear transceiver ready + flag + 11 + 1 + + + + + IER + IER + SWPMI Interrupt Enable + register + 0x14 + 0x20 + read-write + 0x00000000 + + + RXBFIE + Receive buffer full interrupt + enable + 0 + 1 + + + TXBEIE + Transmit buffer empty interrupt + enable + 1 + 1 + + + RXBERIE + Receive CRC error interrupt + enable + 2 + 1 + + + RXOVRIE + Receive overrun error interrupt + enable + 3 + 1 + + + TXUNRIE + Transmit underrun error interrupt + enable + 4 + 1 + + + RIE + Receive interrupt enable + 5 + 1 + + + TIE + Transmit interrupt enable + 6 + 1 + + + TCIE + Transmit complete interrupt + enable + 7 + 1 + + + SRIE + Slave resume interrupt + enable + 8 + 1 + + + RDYIE + Transceiver ready interrupt + enable + 11 + 1 + + + + + RFL + RFL + SWPMI Receive Frame Length + register + 0x18 + 0x20 + read-only + 0x00000000 + + + RFL + Receive frame length + 0 + 5 + + + + + TDR + TDR + SWPMI Transmit data register + 0x1C + 0x20 + write-only + 0x00000000 + + + TD + Transmit data + 0 + 32 + + + + + RDR + RDR + SWPMI Receive data register + 0x20 + 0x20 + read-only + 0x00000000 + + + RD + received data + 0 + 32 + + + + + OR + OR + SWPMI Option register + 0x24 + 0x20 + read-write + 0x00000000 + + + SWP_TBYP + SWP transceiver bypass + 0 + 1 + + + SWP_CLASS + SWP class selection + 1 + 1 + + + + + + + TIM2 + General purpose timers + TIM + 0x40000000 + + 0x0 + 0x400 + registers + + + TIM2 + TIM2 global interrupt + 28 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + CKD + Clock division + 8 + 2 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + CMS + Center-aligned mode + selection + 5 + 2 + + + DIR + Direction + 4 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + URS + Update request source + 2 + 1 + + + UDIS + Update disable + 1 + 1 + + + CEN + Counter enable + 0 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + TI1S + TI1 selection + 7 + 1 + + + MMS + Master mode selection + 4 + 3 + + + CCDS + Capture/compare DMA + selection + 3 + 1 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x0000 + + + TS_4_3 + Trigger selection + 20 + 2 + + + SMS_3 + Slave mode selection - bit + 3 + 16 + 1 + + + ETP + External trigger polarity + 15 + 1 + + + ECE + External clock enable + 14 + 1 + + + ETPS + External trigger prescaler + 12 + 2 + + + ETF + External trigger filter + 8 + 4 + + + MSM + Master/Slave mode + 7 + 1 + + + TS + Trigger selection + 4 + 3 + + + SMS + Slave mode selection + 0 + 3 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + TDE + Trigger DMA request enable + 14 + 1 + + + CC4DE + Capture/Compare 4 DMA request + enable + 12 + 1 + + + CC3DE + Capture/Compare 3 DMA request + enable + 11 + 1 + + + CC2DE + Capture/Compare 2 DMA request + enable + 10 + 1 + + + CC1DE + Capture/Compare 1 DMA request + enable + 9 + 1 + + + UDE + Update DMA request enable + 8 + 1 + + + TIE + Trigger interrupt enable + 6 + 1 + + + CC4IE + Capture/Compare 4 interrupt + enable + 4 + 1 + + + CC3IE + Capture/Compare 3 interrupt + enable + 3 + 1 + + + CC2IE + Capture/Compare 2 interrupt + enable + 2 + 1 + + + CC1IE + Capture/Compare 1 interrupt + enable + 1 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + CC4OF + Capture/Compare 4 overcapture + flag + 12 + 1 + + + CC3OF + Capture/Compare 3 overcapture + flag + 11 + 1 + + + CC2OF + Capture/compare 2 overcapture + flag + 10 + 1 + + + CC1OF + Capture/Compare 1 overcapture + flag + 9 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + + + CC4IF + Capture/Compare 4 interrupt + flag + 4 + 1 + + + CC3IF + Capture/Compare 3 interrupt + flag + 3 + 1 + + + CC2IF + Capture/Compare 2 interrupt + flag + 2 + 1 + + + CC1IF + Capture/compare 1 interrupt + flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + TG + Trigger generation + 6 + 1 + + + CC4G + Capture/compare 4 + generation + 4 + 1 + + + CC3G + Capture/compare 3 + generation + 3 + 1 + + + CC2G + Capture/compare 2 + generation + 2 + 1 + + + CC1G + Capture/compare 1 + generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output + mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + CC1S + CC1S + 0 + 2 + + + OC1FE + OC1FE + 2 + 1 + + + OC1PE + OC1PE + 3 + 1 + + + OC1M + OC1M + 4 + 3 + + + OC1CE + OC1CE + 7 + 1 + + + CC2S + CC2S + 8 + 2 + + + OC2FE + OC2FE + 10 + 1 + + + OC2PE + OC2PE + 11 + 1 + + + OC2M + OC2M + 12 + 3 + + + OC2CE + OC2CE + 15 + 1 + + + OC1M_3 + Output Compare 1 mode - bit + 3 + 16 + 1 + + + OC2M_3 + Output Compare 2 mode - bit + 3 + 24 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input + mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + IC2PCS + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 + selection + 8 + 2 + + + IC1F + Input capture 1 filter + 4 + 4 + + + ICPCS + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 + selection + 0 + 2 + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output + mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + OC4M_3 + Output Compare 2 mode - bit + 3 + 24 + 1 + + + OC3M_3 + Output Compare 1 mode - bit + 3 + 16 + 1 + + + OC4CE + OC4CE + 15 + 1 + + + OC4M + OC4M + 12 + 3 + + + OC4PE + OC4PE + 11 + 1 + + + OC4FE + OC4FE + 10 + 1 + + + CC4S + CC4S + 8 + 2 + + + OC3CE + OC3CE + 7 + 1 + + + OC3M + OC3M + 4 + 3 + + + OC3PE + OC3PE + 3 + 1 + + + OC3FE + OC3FE + 2 + 1 + + + CC3S + CC3S + 0 + 2 + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input + mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + CC4S + Capture/Compare 4 + selection + 8 + 2 + + + IC3F + Input capture 3 filter + 4 + 4 + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + CC3S + Capture/compare 3 + selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable + register + 0x20 + 0x20 + read-write + 0x0000 + + + CC4NP + Capture/Compare 4 output + Polarity + 15 + 1 + + + CC4P + Capture/Compare 3 output + Polarity + 13 + 1 + + + CC4E + Capture/Compare 4 output + enable + 12 + 1 + + + CC3NP + Capture/Compare 3 output + Polarity + 11 + 1 + + + CC3P + Capture/Compare 3 output + Polarity + 9 + 1 + + + CC3E + Capture/Compare 3 output + enable + 8 + 1 + + + CC2NP + Capture/Compare 2 output + Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output + Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output + enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output + Polarity + 3 + 1 + + + CC1P + Capture/Compare 1 output + Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output + enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT_L + low counter value + 0 + 16 + + + CNT_H + High counter value + 16 + 16 + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR_H + High Auto-reload value + 16 + 16 + + + ARR_L + Low Auto-reload value + 0 + 16 + + + + + CCR1 + CCR1 + capture/compare register 1 + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR1_H + High Capture/Compare 1 + value + 16 + 16 + + + CCR1_L + Low Capture/Compare 1 + value + 0 + 16 + + + + + CCR2 + CCR2 + capture/compare register 2 + 0x38 + 0x20 + read-write + 0x00000000 + + + CCR2_H + High Capture/Compare 2 + value + 16 + 16 + + + CCR2_L + Low Capture/Compare 2 + value + 0 + 16 + + + + + CCR3 + CCR3 + capture/compare register 3 + 0x3C + 0x20 + read-write + 0x00000000 + + + CCR3_H + High Capture/Compare value + 16 + 16 + + + CCR3_L + Low Capture/Compare value + 0 + 16 + + + + + CCR4 + CCR4 + capture/compare register 4 + 0x40 + 0x20 + read-write + 0x00000000 + + + CCR4_H + High Capture/Compare value + 16 + 16 + + + CCR4_L + Low Capture/Compare value + 0 + 16 + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x0000 + + + DBL + DMA burst length + 8 + 5 + + + DBA + DMA base address + 0 + 5 + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x0000 + + + DMAB + DMA register for burst + accesses + 0 + 16 + + + + + AF1 + AF1 + TIM alternate function option register + 1 + 0x60 + 0x20 + read-write + 0x0000 + + + ETRSEL + ETR source selection + 14 + 4 + + + + + TISEL + TISEL + TIM timer input selection + register + 0x68 + 0x20 + read-write + 0x0000 + + + TI1SEL + TI1[0] to TI1[15] input + selection + 0 + 4 + + + TI2SEL + TI2[0] to TI2[15] input + selection + 8 + 4 + + + TI3SEL + TI3[0] to TI3[15] input + selection + 16 + 4 + + + TI4SEL + TI4[0] to TI4[15] input + selection + 24 + 4 + + + + + + + TIM3 + 0x40000400 + + TIM3 + TIM3 global interrupt + 29 + + + + TIM4 + 0x40000800 + + TIM4 + TIM4 global interrupt + 30 + + + + TIM5 + 0x40000C00 + + TIM5 + TIM5 global interrupt + 50 + + + + TIM12 + 0x40001800 + + + TIM13 + 0x40001C00 + + + TIM14 + 0x40002000 + + + TIM6 + Basic timers + TIM + 0x40001000 + + 0x0 + 0x400 + registers + + + TIM6_DAC + TIM6 global interrupt + 54 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x0000 + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + ARPE + Auto-reload preload enable + 7 + 1 + + + OPM + One-pulse mode + 3 + 1 + + + URS + Update request source + 2 + 1 + + + UDIS + Update disable + 1 + 1 + + + CEN + Counter enable + 0 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x0000 + + + MMS + Master mode selection + 4 + 3 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x0000 + + + UDE + Update DMA request enable + 8 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x0000 + + + UIF + Update interrupt flag + 0 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x0000 + + + UG + Update generation + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + Low counter value + 0 + 16 + + + UIFCPY + UIF Copy + 31 + 1 + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x0000 + + + PSC + Prescaler value + 0 + 16 + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Low Auto-reload value + 0 + 16 + + + + + + + TIM7 + 0x40001400 + + TIM7 + TIM7 global interrupt + 55 + + + + NVIC + Nested Vectored Interrupt + Controller + NVIC + 0xE000E100 + + 0x0 + 0x401 + registers + + + + ISER0 + ISER0 + Interrupt Set-Enable Register + 0x0 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ISER1 + ISER1 + Interrupt Set-Enable Register + 0x4 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ISER2 + ISER2 + Interrupt Set-Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ICER0 + ICER0 + Interrupt Clear-Enable + Register + 0x80 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ICER1 + ICER1 + Interrupt Clear-Enable + Register + 0x84 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ICER2 + ICER2 + Interrupt Clear-Enable + Register + 0x88 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ISPR0 + ISPR0 + Interrupt Set-Pending Register + 0x100 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ISPR1 + ISPR1 + Interrupt Set-Pending Register + 0x104 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ISPR2 + ISPR2 + Interrupt Set-Pending Register + 0x108 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ICPR0 + ICPR0 + Interrupt Clear-Pending + Register + 0x180 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + ICPR1 + ICPR1 + Interrupt Clear-Pending + Register + 0x184 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + ICPR2 + ICPR2 + Interrupt Clear-Pending + Register + 0x188 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + IABR0 + IABR0 + Interrupt Active Bit Register + 0x200 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IABR1 + IABR1 + Interrupt Active Bit Register + 0x204 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IABR2 + IABR2 + Interrupt Active Bit Register + 0x208 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IPR0 + IPR0 + Interrupt Priority Register + 0x300 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR1 + IPR1 + Interrupt Priority Register + 0x304 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR2 + IPR2 + Interrupt Priority Register + 0x308 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR3 + IPR3 + Interrupt Priority Register + 0x30C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR4 + IPR4 + Interrupt Priority Register + 0x310 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR5 + IPR5 + Interrupt Priority Register + 0x314 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR6 + IPR6 + Interrupt Priority Register + 0x318 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR7 + IPR7 + Interrupt Priority Register + 0x31C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR8 + IPR8 + Interrupt Priority Register + 0x320 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR9 + IPR9 + Interrupt Priority Register + 0x324 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR10 + IPR10 + Interrupt Priority Register + 0x328 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR11 + IPR11 + Interrupt Priority Register + 0x32C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR12 + IPR12 + Interrupt Priority Register + 0x330 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR13 + IPR13 + Interrupt Priority Register + 0x334 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR14 + IPR14 + Interrupt Priority Register + 0x338 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR15 + IPR15 + Interrupt Priority Register + 0x33C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR16 + IPR16 + Interrupt Priority Register + 0x340 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR17 + IPR17 + Interrupt Priority Register + 0x344 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR18 + IPR18 + Interrupt Priority Register + 0x348 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR19 + IPR19 + Interrupt Priority Register + 0x34C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR20 + IPR20 + Interrupt Priority Register + 0x350 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR21 + IPR21 + Interrupt Priority Register + 0x354 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR22 + IPR22 + Interrupt Priority Register + 0x358 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR23 + IPR23 + Interrupt Priority Register + 0x35C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR24 + IPR24 + Interrupt Priority Register + 0x360 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR25 + IPR25 + Interrupt Priority Register + 0x364 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR26 + IPR26 + Interrupt Priority Register + 0x368 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR27 + IPR27 + Interrupt Priority Register + 0x36C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR28 + IPR28 + Interrupt Priority Register + 0x370 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR29 + IPR29 + Interrupt Priority Register + 0x374 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR30 + IPR30 + Interrupt Priority Register + 0x378 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR31 + IPR31 + Interrupt Priority Register + 0x37C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR32 + IPR32 + Interrupt Priority Register + 0x380 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR33 + IPR33 + Interrupt Priority Register + 0x384 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR34 + IPR34 + Interrupt Priority Register + 0x388 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR35 + IPR35 + Interrupt Priority Register + 0x38C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR36 + IPR36 + Interrupt Priority Register + 0x390 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR37 + IPR37 + Interrupt Priority Register + 0x394 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR38 + IPR38 + Interrupt Priority Register + 0x398 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + ISER3 + ISER3 + Interrupt Set-Enable Register + 0xC + 0x20 + read-write + 0x00000000 + + + ICER3 + ICER3 + Interrupt Clear-Enable + Register + 0x8C + 0x20 + read-write + 0x00000000 + + + ISPR3 + ISPR3 + Interrupt Set-Pending Register + 0x10C + 0x20 + read-write + 0x00000000 + + + ICPR3 + ICPR3 + Interrupt Clear-Pending + Register + 0x1C0 + 0x20 + read-write + 0x00000000 + + + IABR3 + IABR3 + Interrupt Active Bit Register + 0x20C + 0x20 + read-write + 0x00000000 + + + + + DBGMCU + Microcontroller Debug Unit + DBGMCU + 0x5C001000 + + 0x0 + 0x400 + registers + + + + IDC + IDC + DBGMCU Identity Code Register + 0x0 + 0x20 + read-only + 0x10006450 + + + DEV_ID + Device ID + 0 + 12 + + + REV_ID + Revision + 16 + 16 + + + + + CR + CR + DBGMCU Configuration Register + 0x4 + 0x20 + read-write + 0x00000000 + + + DBGSLPD1 + Allow D1 domain debug in Sleep mode + 0 + 1 + + + DBGSTPD1 + Allow D1 domain debug in Stop mode + 1 + 1 + + + DBGSTBD1 + Allow D1 domain debug in Standby mode + 2 + 1 + + + DBGSLPD2 + Allow D2 domain debug in Sleep mode + 3 + 1 + + + DBGSTPD2 + Allow D2 domain debug in Stop mode + 4 + 1 + + + DBGSTBD2 + Allow D2 domain debug in Standby mode + 5 + 1 + + + DBGSTPD3 + Allow debug in D3 Stop mode + 7 + 1 + + + DBGSTBD3 + Allow debug in D3 Standby mode + 8 + 1 + + + TRACECLKEN + Trace port clock enable + 20 + 1 + + + D1DBGCKEN + D1 debug clock enable + 21 + 1 + + + D3DBGCKEN + D3 debug clock enable + 22 + 1 + + + TRGOEN + External trigger output enable + 28 + 1 + + + + + APB3FZ1 + APB3FZ1 + DBGMCU APB3 peripheral freeze register CPU1 + 0x34 + 0x20 + read-write + 0x00000000 + + + WWDG1 + WWDG1 stop in debug + 6 + 1 + + + + + APB3FZ2 + APB3FZ2 + DBGMCU APB3 peripheral freeze register CPU2 + 0x38 + 0x20 + read-write + 0x00000000 + + + WWDG1 + WWDG1 stop in debug + 6 + 1 + + + + + APB1LFZ1 + APB1LFZ1 + DBGMCU APB1L peripheral freeze register + 0x3C + 0x20 + read-write + 0x00000000 + + + DBG_TIM2 + TIM2 stop in debug + 0 + 1 + + + DBG_TIM3 + TIM3 stop in debug + 1 + 1 + + + DBG_TIM4 + TIM4 stop in debug + 2 + 1 + + + DBG_TIM5 + TIM5 stop in debug + 3 + 1 + + + DBG_TIM6 + TIM6 stop in debug + 4 + 1 + + + DBG_TIM7 + TIM7 stop in debug + 5 + 1 + + + DBG_TIM12 + TIM12 stop in debug + 6 + 1 + + + DBG_TIM13 + TIM13 stop in debug + 7 + 1 + + + DBG_TIM14 + TIM14 stop in debug + 8 + 1 + + + DBG_LPTIM1 + LPTIM1 stop in debug + 9 + 1 + + + DBG_WWDG2 + WWDG2 stop in debug + 11 + 1 + + + DBG_I2C1 + I2C1 SMBUS timeout stop in debug + 21 + 1 + + + DBG_I2C2 + I2C2 SMBUS timeout stop in debug + 22 + 1 + + + DBG_I2C3 + I2C3 SMBUS timeout stop in debug + 23 + 1 + + + + + APB1LFZ2 + APB1LFZ2 + DBGMCU APB1L peripheral freeze register CPU2 + 0x40 + 0x20 + read-write + 0x00000000 + + + DBG_TIM2 + TIM2 stop in debug + 0 + 1 + + + DBG_TIM3 + TIM3 stop in debug + 1 + 1 + + + DBG_TIM4 + TIM4 stop in debug + 2 + 1 + + + DBG_TIM5 + TIM5 stop in debug + 3 + 1 + + + DBG_TIM6 + TIM6 stop in debug + 4 + 1 + + + DBG_TIM7 + TIM4 stop in debug + 5 + 1 + + + DBG_TIM12 + TIM12 stop in debug + 6 + 1 + + + DBG_TIM13 + TIM13 stop in debug + 7 + 1 + + + DBG_TIM14 + TIM14 stop in debug + 8 + 1 + + + DBG_LPTIM1 + LPTIM1 stop in debug + 9 + 1 + + + DBG_WWDG2 + WWDG2 stop in debug + 11 + 1 + + + DBG_I2C1 + I2C1 SMBUS timeout stop in debug + 21 + 1 + + + DBG_I2C2 + I2C2 SMBUS timeout stop in debug + 22 + 1 + + + DBG_I2C3 + I2C3 SMBUS timeout stop in debug + 23 + 1 + + + + + APB2FZ1 + APB2FZ1 + DBGMCU APB2 peripheral freeze register + 0x4C + 0x20 + read-write + 0x00000000 + + + DBG_TIM1 + TIM1 stop in debug + 0 + 1 + + + DBG_TIM8 + TIM8 stop in debug + 1 + 1 + + + DBG_TIM15 + TIM15 stop in debug + 16 + 1 + + + DBG_TIM16 + TIM16 stop in debug + 17 + 1 + + + DBG_TIM17 + TIM17 stop in debug + 18 + 1 + + + DBG_HRTIM + HRTIM stop in debug + 29 + 1 + + + + + APB2FZ2 + APB2FZ2 + DBGMCU APB2 peripheral freeze register CPU2 + 0x50 + 0x20 + read-write + 0x00000000 + + + DBG_TIM1 + TIM1 stop in debug + 0 + 1 + + + DBG_TIM8 + TIM8 stop in debug + 1 + 1 + + + DBG_TIM15 + TIM15 stop in debug + 16 + 1 + + + DBG_TIM16 + TIM16 stop in debug + 17 + 1 + + + DBG_TIM17 + TIM17 stop in debug + 18 + 1 + + + DBG_HRTIM + HRTIM stop in debug + 29 + 1 + + + + + APB4FZ1 + APB4FZ1 + DBGMCU APB4 peripheral freeze register + 0x54 + 0x20 + read-write + 0x00000000 + + + DBG_I2C4 + I2C4 SMBUS timeout stop in debug + 7 + 1 + + + DBG_LPTIM2 + LPTIM2 stop in debug + 9 + 1 + + + DBG_LPTIM3 + LPTIM2 stop in debug + 10 + 1 + + + DBG_LPTIM4 + LPTIM4 stop in debug + 11 + 1 + + + DBG_LPTIM5 + LPTIM5 stop in debug + 12 + 1 + + + DBG_RTC + RTC stop in debug + 16 + 1 + + + DBG_WDGLSD1 + Independent watchdog for D1 stop in debug + 18 + 1 + + + DBG_WDGLSD2 + Independent watchdog for D2 stop in debug + 19 + 1 + + + + + APB4FZ2 + APB4FZ2 + DBGMCU APB4 peripheral freeze register CPU2 + 0x58 + 0x20 + read-write + 0x00000000 + + + DBG_I2C4 + I2C4 SMBUS timeout stop in debug + 7 + 1 + + + DBG_LPTIM2 + LPTIM2 stop in debug + 9 + 1 + + + DBG_LPTIM3 + LPTIM2 stop in debug + 10 + 1 + + + DBG_LPTIM4 + LPTIM4 stop in debug + 11 + 1 + + + DBG_LPTIM5 + LPTIM5 stop in debug + 12 + 1 + + + DBG_RTC + RTC stop in debug + 16 + 1 + + + DBG_WDGLSD1 + LS watchdog for D1 stop in debug + 18 + 1 + + + DBG_WDGLSD2 + LS watchdog for D2 stop in debug + 19 + 1 + + + + + + + MPU + Memory protection unit + MPU + 0xE000ED90 + + 0x0 + 0x15 + registers + + + + MPU_TYPER + MPU_TYPER + MPU type register + 0x0 + 0x20 + read-only + 0X00000800 + + + SEPARATE + Separate flag + 0 + 1 + + + DREGION + Number of MPU data regions + 8 + 8 + + + IREGION + Number of MPU instruction + regions + 16 + 8 + + + + + MPU_CTRL + MPU_CTRL + MPU control register + 0x4 + 0x20 + read-write + 0X00000000 + + + ENABLE + Enables the MPU + 0 + 1 + + + HFNMIENA + Enables the operation of MPU during hard + fault + 1 + 1 + + + PRIVDEFENA + Enable priviliged software access to + default memory map + 2 + 1 + + + + + MPU_RNR + MPU_RNR + MPU region number register + 0x8 + 0x20 + read-write + 0X00000000 + + + REGION + MPU region + 0 + 8 + + + + + MPU_RBAR + MPU_RBAR + MPU region base address + register + 0xC + 0x20 + read-write + 0X00000000 + + + REGION + MPU region field + 0 + 4 + + + VALID + MPU region number valid + 4 + 1 + + + ADDR + Region base address field + 5 + 27 + + + + + MPU_RASR + MPU_RASR + MPU region attribute and size + register + 0x10 + 0x20 + read-write + 0X00000000 + + + ENABLE + Region enable bit. + 0 + 1 + + + SIZE + Size of the MPU protection + region + 1 + 5 + + + SRD + Subregion disable bits + 8 + 8 + + + B + memory attribute + 16 + 1 + + + C + memory attribute + 17 + 1 + + + S + Shareable memory attribute + 18 + 1 + + + TEX + memory attribute + 19 + 3 + + + AP + Access permission + 24 + 3 + + + XN + Instruction access disable + bit + 28 + 1 + + + + + + + STK + SysTick timer + STK + 0xE000E010 + + 0x0 + 0x11 + registers + + + + CSR + CSR + SysTick control and status + register + 0x0 + 0x20 + read-write + 0X00000000 + + + ENABLE + Counter enable + 0 + 1 + + + TICKINT + SysTick exception request + enable + 1 + 1 + + + CLKSOURCE + Clock source selection + 2 + 1 + + + COUNTFLAG + COUNTFLAG + 16 + 1 + + + + + RVR + RVR + SysTick reload value register + 0x4 + 0x20 + read-write + 0X00000000 + + + RELOAD + RELOAD value + 0 + 24 + + + + + CVR + CVR + SysTick current value register + 0x8 + 0x20 + read-write + 0X00000000 + + + CURRENT + Current counter value + 0 + 24 + + + + + CALIB + CALIB + SysTick calibration value + register + 0xC + 0x20 + read-write + 0X00000000 + + + TENMS + Calibration value + 0 + 24 + + + SKEW + SKEW flag: Indicates whether the TENMS + value is exact + 30 + 1 + + + NOREF + NOREF flag. Reads as zero + 31 + 1 + + + + + + + NVIC_STIR + Nested vectored interrupt + controller + NVIC + 0xE000EF00 + + 0x0 + 0x5 + registers + + + + STIR + STIR + Software trigger interrupt + register + 0x0 + 0x20 + read-write + 0x00000000 + + + INTID + Software generated interrupt + ID + 0 + 9 + + + + + + + FPU_CPACR + Floating point unit CPACR + FPU + 0xE000ED88 + + 0x0 + 0x5 + registers + + + + CPACR + CPACR + Coprocessor access control + register + 0x0 + 0x20 + read-write + 0x0000000 + + + CP + CP + 20 + 4 + + + + + + + SCB_ACTRL + System control block ACTLR + SCB + 0xE000E008 + + 0x0 + 0x5 + registers + + + + ACTRL + ACTRL + Auxiliary control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DISFOLD + DISFOLD + 2 + 1 + + + FPEXCODIS + FPEXCODIS + 10 + 1 + + + DISRAMODE + DISRAMODE + 11 + 1 + + + DISITMATBFLUSH + DISITMATBFLUSH + 12 + 1 + + + + + + + FPU + Floting point unit + FPU + 0xE000EF34 + + 0x0 + 0xD + registers + + + FPU + Floating point unit interrupt + 81 + + + + FPCCR + FPCCR + Floating-point context control + register + 0x0 + 0x20 + read-write + 0x00000000 + + + LSPACT + LSPACT + 0 + 1 + + + USER + USER + 1 + 1 + + + THREAD + THREAD + 3 + 1 + + + HFRDY + HFRDY + 4 + 1 + + + MMRDY + MMRDY + 5 + 1 + + + BFRDY + BFRDY + 6 + 1 + + + MONRDY + MONRDY + 8 + 1 + + + LSPEN + LSPEN + 30 + 1 + + + ASPEN + ASPEN + 31 + 1 + + + + + FPCAR + FPCAR + Floating-point context address + register + 0x4 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Location of unpopulated + floating-point + 3 + 29 + + + + + FPSCR + FPSCR + Floating-point status control + register + 0x8 + 0x20 + read-write + 0x00000000 + + + IOC + Invalid operation cumulative exception + bit + 0 + 1 + + + DZC + Division by zero cumulative exception + bit. + 1 + 1 + + + OFC + Overflow cumulative exception + bit + 2 + 1 + + + UFC + Underflow cumulative exception + bit + 3 + 1 + + + IXC + Inexact cumulative exception + bit + 4 + 1 + + + IDC + Input denormal cumulative exception + bit. + 7 + 1 + + + RMode + Rounding Mode control + field + 22 + 2 + + + FZ + Flush-to-zero mode control + bit: + 24 + 1 + + + DN + Default NaN mode control + bit + 25 + 1 + + + AHP + Alternative half-precision control + bit + 26 + 1 + + + V + Overflow condition code + flag + 28 + 1 + + + C + Carry condition code flag + 29 + 1 + + + Z + Zero condition code flag + 30 + 1 + + + N + Negative condition code + flag + 31 + 1 + + + + + + + SCB + System control block + SCB + 0xE000ED00 + + 0x0 + 0x41 + registers + + + + CPUID + CPUID + CPUID base register + 0x0 + 0x20 + read-only + 0x410FC241 + + + Revision + Revision number + 0 + 4 + + + PartNo + Part number of the + processor + 4 + 12 + + + Constant + Reads as 0xF + 16 + 4 + + + Variant + Variant number + 20 + 4 + + + Implementer + Implementer code + 24 + 8 + + + + + ICSR + ICSR + Interrupt control and state + register + 0x4 + 0x20 + read-write + 0x00000000 + + + VECTACTIVE + Active vector + 0 + 9 + + + RETTOBASE + Return to base level + 11 + 1 + + + VECTPENDING + Pending vector + 12 + 7 + + + ISRPENDING + Interrupt pending flag + 22 + 1 + + + PENDSTCLR + SysTick exception clear-pending + bit + 25 + 1 + + + PENDSTSET + SysTick exception set-pending + bit + 26 + 1 + + + PENDSVCLR + PendSV clear-pending bit + 27 + 1 + + + PENDSVSET + PendSV set-pending bit + 28 + 1 + + + NMIPENDSET + NMI set-pending bit. + 31 + 1 + + + + + VTOR + VTOR + Vector table offset register + 0x8 + 0x20 + read-write + 0x00000000 + + + TBLOFF + Vector table base offset + field + 9 + 21 + + + + + AIRCR + AIRCR + Application interrupt and reset control + register + 0xC + 0x20 + read-write + 0x00000000 + + + VECTRESET + VECTRESET + 0 + 1 + + + VECTCLRACTIVE + VECTCLRACTIVE + 1 + 1 + + + SYSRESETREQ + SYSRESETREQ + 2 + 1 + + + PRIGROUP + PRIGROUP + 8 + 3 + + + ENDIANESS + ENDIANESS + 15 + 1 + + + VECTKEYSTAT + Register key + 16 + 16 + + + + + SCR + SCR + System control register + 0x10 + 0x20 + read-write + 0x00000000 + + + SLEEPONEXIT + SLEEPONEXIT + 1 + 1 + + + SLEEPDEEP + SLEEPDEEP + 2 + 1 + + + SEVEONPEND + Send Event on Pending bit + 4 + 1 + + + + + CCR + CCR + Configuration and control + register + 0x14 + 0x20 + read-write + 0x00000000 + + + NONBASETHRDENA + Configures how the processor enters + Thread mode + 0 + 1 + + + USERSETMPEND + USERSETMPEND + 1 + 1 + + + UNALIGN__TRP + UNALIGN_ TRP + 3 + 1 + + + DIV_0_TRP + DIV_0_TRP + 4 + 1 + + + BFHFNMIGN + BFHFNMIGN + 8 + 1 + + + STKALIGN + STKALIGN + 9 + 1 + + + DC + DC + 16 + 1 + + + IC + IC + 17 + 1 + + + BP + BP + 18 + 1 + + + + + SHPR1 + SHPR1 + System handler priority + registers + 0x18 + 0x20 + read-write + 0x00000000 + + + PRI_4 + Priority of system handler + 4 + 0 + 8 + + + PRI_5 + Priority of system handler + 5 + 8 + 8 + + + PRI_6 + Priority of system handler + 6 + 16 + 8 + + + + + SHPR2 + SHPR2 + System handler priority + registers + 0x1C + 0x20 + read-write + 0x00000000 + + + PRI_11 + Priority of system handler + 11 + 24 + 8 + + + + + SHPR3 + SHPR3 + System handler priority + registers + 0x20 + 0x20 + read-write + 0x00000000 + + + PRI_14 + Priority of system handler + 14 + 16 + 8 + + + PRI_15 + Priority of system handler + 15 + 24 + 8 + + + + + SHCSR + SHCSR + System handler control and state + register + 0x24 + 0x20 + read-write + 0x00000000 + + + MEMFAULTACT + Memory management fault exception active + bit + 0 + 1 + + + BUSFAULTACT + Bus fault exception active + bit + 1 + 1 + + + USGFAULTACT + Usage fault exception active + bit + 3 + 1 + + + SVCALLACT + SVC call active bit + 7 + 1 + + + MONITORACT + Debug monitor active bit + 8 + 1 + + + PENDSVACT + PendSV exception active + bit + 10 + 1 + + + SYSTICKACT + SysTick exception active + bit + 11 + 1 + + + USGFAULTPENDED + Usage fault exception pending + bit + 12 + 1 + + + MEMFAULTPENDED + Memory management fault exception + pending bit + 13 + 1 + + + BUSFAULTPENDED + Bus fault exception pending + bit + 14 + 1 + + + SVCALLPENDED + SVC call pending bit + 15 + 1 + + + MEMFAULTENA + Memory management fault enable + bit + 16 + 1 + + + BUSFAULTENA + Bus fault enable bit + 17 + 1 + + + USGFAULTENA + Usage fault enable bit + 18 + 1 + + + + + CFSR_UFSR_BFSR_MMFSR + CFSR_UFSR_BFSR_MMFSR + Configurable fault status + register + 0x28 + 0x20 + read-write + 0x00000000 + + + IACCVIOL + IACCVIOL + 0 + 1 + + + DACCVIOL + DACCVIOL + 1 + 1 + + + MUNSTKERR + MUNSTKERR + 3 + 1 + + + MSTKERR + MSTKERR + 4 + 1 + + + MLSPERR + MLSPERR + 5 + 1 + + + MMARVALID + MMARVALID + 7 + 1 + + + IBUSERR + Instruction bus error + 8 + 1 + + + PRECISERR + Precise data bus error + 9 + 1 + + + IMPRECISERR + Imprecise data bus error + 10 + 1 + + + UNSTKERR + Bus fault on unstacking for a return + from exception + 11 + 1 + + + STKERR + Bus fault on stacking for exception + entry + 12 + 1 + + + LSPERR + Bus fault on floating-point lazy state + preservation + 13 + 1 + + + BFARVALID + Bus Fault Address Register (BFAR) valid + flag + 15 + 1 + + + UNDEFINSTR + Undefined instruction usage + fault + 16 + 1 + + + INVSTATE + Invalid state usage fault + 17 + 1 + + + INVPC + Invalid PC load usage + fault + 18 + 1 + + + NOCP + No coprocessor usage + fault. + 19 + 1 + + + UNALIGNED + Unaligned access usage + fault + 24 + 1 + + + DIVBYZERO + Divide by zero usage fault + 25 + 1 + + + + + HFSR + HFSR + Hard fault status register + 0x2C + 0x20 + read-write + 0x00000000 + + + VECTTBL + Vector table hard fault + 1 + 1 + + + FORCED + Forced hard fault + 30 + 1 + + + DEBUG_VT + Reserved for Debug use + 31 + 1 + + + + + MMFAR + MMFAR + Memory management fault address + register + 0x34 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Memory management fault + address + 0 + 32 + + + + + BFAR + BFAR + Bus fault address register + 0x38 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Bus fault address + 0 + 32 + + + + + + + PF + Processor features + PF + 0xE000ED78 + + 0x0 + 0xD + registers + + + + CLIDR + CLIDR + Cache Level ID register + 0x0 + 0x20 + read-only + 0x09000003 + + + CL1 + CL1 + 0 + 3 + + + CL2 + CL2 + 3 + 3 + + + CL3 + CL3 + 6 + 3 + + + CL4 + CL4 + 9 + 3 + + + CL5 + CL5 + 12 + 3 + + + CL6 + CL6 + 15 + 3 + + + CL7 + CL7 + 18 + 3 + + + LoUIS + LoUIS + 21 + 3 + + + LoC + LoC + 24 + 3 + + + LoU + LoU + 27 + 3 + + + + + CTR + CTR + Cache Type register + 0x4 + 0x20 + read-only + 0X8303C003 + + + _IminLine + IminLine + 0 + 4 + + + DMinLine + DMinLine + 16 + 4 + + + ERG + ERG + 20 + 4 + + + CWG + CWG + 24 + 4 + + + Format + Format + 29 + 3 + + + + + CCSIDR + CCSIDR + Cache Size ID register + 0x8 + 0x20 + read-only + 0X00000000 + + + LineSize + LineSize + 0 + 3 + + + Associativity + Associativity + 3 + 10 + + + NumSets + NumSets + 13 + 15 + + + WA + WA + 28 + 1 + + + RA + RA + 29 + 1 + + + WB + WB + 30 + 1 + + + WT + WT + 31 + 1 + + + + + + + AC + Access control + AC + 0xE000EF90 + + 0x0 + 0x1D + registers + + + + ITCMCR + ITCMCR + Instruction and Data Tightly-Coupled Memory + Control Registers + 0x0 + 0x20 + read-write + 0X00000000 + + + EN + EN + 0 + 1 + + + RMW + RMW + 1 + 1 + + + RETEN + RETEN + 2 + 1 + + + SZ + SZ + 3 + 4 + + + + + DTCMCR + DTCMCR + Instruction and Data Tightly-Coupled Memory + Control Registers + 0x4 + 0x20 + read-write + 0X00000000 + + + EN + EN + 0 + 1 + + + RMW + RMW + 1 + 1 + + + RETEN + RETEN + 2 + 1 + + + SZ + SZ + 3 + 4 + + + + + AHBPCR + AHBPCR + AHBP Control register + 0x8 + 0x20 + read-write + 0X00000000 + + + EN + EN + 0 + 1 + + + SZ + SZ + 1 + 3 + + + + + CACR + CACR + Auxiliary Cache Control + register + 0xC + 0x20 + read-write + 0X00000000 + + + SIWT + SIWT + 0 + 1 + + + ECCEN + ECCEN + 1 + 1 + + + FORCEWT + FORCEWT + 2 + 1 + + + + + AHBSCR + AHBSCR + AHB Slave Control register + 0x10 + 0x20 + read-write + 0X00000000 + + + CTL + CTL + 0 + 2 + + + TPRI + TPRI + 2 + 9 + + + INITCOUNT + INITCOUNT + 11 + 5 + + + + + ABFSR + ABFSR + Auxiliary Bus Fault Status + register + 0x18 + 0x20 + read-write + 0X00000000 + + + ITCM + ITCM + 0 + 1 + + + DTCM + DTCM + 1 + 1 + + + AHBP + AHBP + 2 + 1 + + + AXIM + AXIM + 3 + 1 + + + EPPB + EPPB + 4 + 1 + + + AXIMTYPE + AXIMTYPE + 8 + 2 + + + + + + + RAMECC1 + ECC controller is associated to each RAM + area + RAMECC + 0x52009000 + + 0x0 + 0x400 + registers + + + + IER + IER + RAMECC interrupt enable + register + 0x0 + 0x20 + read-write + 0x00000000 + + + GIE + Global interrupt enable + 0 + 1 + + + GECCSEIE_ + Global ECC single error interrupt + enable + 1 + 1 + + + GECCDEIE + Global ECC double error interrupt + enable + 2 + 1 + + + GECCDEBWIE + Global ECC double error on byte write + (BW) interrupt enable + 3 + 1 + + + + + M1CR + M1CR + RAMECC monitor x configuration + register + 0x20 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1SR + M1SR + RAMECC monitor x status + register + 0x24 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FAR + M1FAR + RAMECC monitor x failing address + register + 0x28 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FDRL + M1FDRL + RAMECC monitor x failing data low + register + 0x2C + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FDRH + M1FDRH + RAMECC monitor x failing data high + register + 0x30 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1FECR + M1FECR + RAMECC monitor x failing ECC error code + register + 0x34 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2CR + M2CR + RAMECC monitor x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2SR + M2SR + RAMECC monitor x status + register + 0x44 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2FAR + M2FAR + RAMECC monitor x failing address + register + 0x48 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2FDRL + M2FDRL + RAMECC monitor x failing data low + register + 0x4C + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2FDRH + M2FDRH + RAMECC monitor x failing data high + register + 0x50 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M2FECR + M2FECR + RAMECC monitor x failing ECC error code + register + 0x58 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3CR + M3CR + RAMECC monitor x configuration + register + 0x60 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3SR + M3SR + RAMECC monitor x status + register + 0x64 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3FAR + M3FAR + RAMECC monitor x failing address + register + 0x68 + 0x20 + read-write + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3FDRL + M3FDRL + RAMECC monitor x failing data low + register + 0x6C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M3FDRH + M3FDRH + RAMECC monitor x failing data high + register + 0x70 + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M3FECR + M3FECR + RAMECC monitor x failing ECC error code + register + 0x7C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4CR + M4CR + RAMECC monitor x configuration + register + 0x80 + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4SR + M4SR + RAMECC monitor x status + register + 0x84 + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4FAR + M4FAR + RAMECC monitor x failing address + register + 0x88 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FDRL + M4FDRL + RAMECC monitor x failing data low + register + 0x8C + 0x20 + read-write + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FDRH + M4FDRH + RAMECC monitor x failing data high + register + 0x90 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FECR + M4FECR + RAMECC monitor x failing ECC error code + register + M4FDRH + 0x90 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M5CR + M5CR + RAMECC monitor x configuration + register + 0xA0 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5SR + M5SR + RAMECC monitor x status + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FAR + M5FAR + RAMECC monitor x failing address + register + 0xA8 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FDRL + M5FDRL + RAMECC monitor x failing data low + register + 0xAC + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FDRH + M5FDRH + RAMECC monitor x failing data high + register + 0xB0 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FECR + M5FECR + RAMECC monitor x failing ECC error code + register + 0xB4 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + + + RAMECC2 + ECC controller is associated to each RAM + area + RAMECC + 0x48023000 + + 0x0 + 0x400 + registers + + + + IER + IER + RAMECC interrupt enable + register + 0x0 + 0x20 + read-write + 0x00000000 + + + GIE + Global interrupt enable + 0 + 1 + + + GECCSEIE_ + Global ECC single error interrupt + enable + 1 + 1 + + + GECCDEIE + Global ECC double error interrupt + enable + 2 + 1 + + + GECCDEBWIE + Global ECC double error on byte write + (BW) interrupt enable + 3 + 1 + + + + + M1CR + M1CR + RAMECC monitor x configuration + register + 0x20 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M2CR + M2CR + RAMECC monitor x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M3CR + M3CR + RAMECC monitor x configuration + register + 0x60 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M4CR + M4CR + RAMECC monitor x configuration + register + 0x80 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M5CR + M5CR + RAMECC monitor x configuration + register + 0xA0 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1SR + M1SR + RAMECC monitor x status + register + 0x24 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2SR + M2SR + RAMECC monitor x status + register + 0x44 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M3SR + M3SR + RAMECC monitor x status + register + 0x64 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M4SR + M4SR + RAMECC monitor x status + register + 0x84 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M5SR + M5SR + RAMECC monitor x status + register + 0xA4 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M1FAR + M1FAR + RAMECC monitor x failing address + register + 0x28 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M2FAR + M2FAR + RAMECC monitor x failing address + register + 0x48 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M3FAR + M3FAR + RAMECC monitor x failing address + register + 0x68 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M4FAR + M4FAR + RAMECC monitor x failing address + register + 0x88 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M5FAR + M5FAR + RAMECC monitor x failing address + register + 0xA8 + 0x20 + read-write + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M1FDRL + M1FDRL + RAMECC monitor x failing data low + register + 0x2C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M2FDRL + M2FDRL + RAMECC monitor x failing data low + register + 0x4C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M3FDRL + M3FDRL + RAMECC monitor x failing data low + register + 0x6C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M4FDRL + M4FDRL + RAMECC monitor x failing data low + register + 0x8C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M5FDRL + M5FDRL + RAMECC monitor x failing data low + register + 0xAC + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M1FDRH + M1FDRH + RAMECC monitor x failing data high + register + 0x30 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M2FDRH + M2FDRH + RAMECC monitor x failing data high + register + 0x50 + 0x20 + read-write + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M3FDRH + M3FDRH + RAMECC monitor x failing data high + register + 0x70 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M4FDRH + M4FDRH + RAMECC monitor x failing data high + register + 0x90 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M5FDRH + M5FDRH + RAMECC monitor x failing data high + register + 0xB0 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M1FECR + M1FECR + RAMECC monitor x failing ECC error code + register + 0x34 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M2FECR + M2FECR + RAMECC monitor x failing ECC error code + register + 0x58 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M3FECR + M3FECR + RAMECC monitor x failing ECC error code + register + 0x7C + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M4FECR + M4FECR + RAMECC monitor x failing ECC error code + register + M4FDRH + 0x90 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M5FECR + M5FECR + RAMECC monitor x failing ECC error code + register + 0xB4 + 0x20 + read-only + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + + + RAMECC3 + ECC controller is associated to each RAM + area + RAMECC + 0x58027000 + + 0x0 + 0x400 + registers + + + + IER + IER + RAMECC interrupt enable + register + 0x0 + 0x20 + read-write + 0x00000000 + + + GIE + Global interrupt enable + 0 + 1 + + + GECCSEIE_ + Global ECC single error interrupt + enable + 1 + 1 + + + GECCDEIE + Global ECC double error interrupt + enable + 2 + 1 + + + GECCDEBWIE + Global ECC double error on byte write + (BW) interrupt enable + 3 + 1 + + + + + M1CR + M1CR + RAMECC monitor x configuration + register + 0x20 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M2CR + M2CR + RAMECC monitor x configuration + register + 0x40 + 0x20 + read-write + 0x00000000 + + + ECCSEIE + ECC single error interrupt + enable + 2 + 1 + + + ECCDEIE + ECC double error interrupt + enable + 3 + 1 + + + ECCDEBWIE + ECC double error on byte write (BW) + interrupt enable + 4 + 1 + + + ECCELEN + ECC error latching enable + 5 + 1 + + + + + M1SR + M1SR + RAMECC monitor x status + register + 0x24 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M2SR + M2SR + RAMECC monitor x status + register + 0x44 + 0x20 + read-write + 0x00000000 + + + SEDCF + ECC single error detected and corrected + flag + 0 + 1 + + + DEDF + ECC double error detected + flag + 1 + 1 + + + DEBWDF + ECC double error on byte write (BW) + detected flag + 2 + 1 + + + + + M1FAR + M1FAR + RAMECC monitor x failing address + register + 0x28 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M2FAR + M2FAR + RAMECC monitor x failing address + register + 0x48 + 0x20 + read-only + 0x00000000 + + + FADD + ECC error failing address + 0 + 32 + + + + + M1FDRL + M1FDRL + RAMECC monitor x failing data low + register + 0x2C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M2FDRL + M2FDRL + RAMECC monitor x failing data low + register + 0x4C + 0x20 + read-only + 0x00000000 + + + FDATAL + Failing data low + 0 + 32 + + + + + M1FDRH + M1FDRH + RAMECC monitor x failing data high + register + 0x30 + 0x20 + read-only + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M2FDRH + M2FDRH + RAMECC monitor x failing data high + register + 0x50 + 0x20 + read-write + 0x00000000 + + + FDATAH + Failing data high (64-bit + memory) + 0 + 32 + + + + + M1FECR + M1FECR + RAMECC monitor x failing ECC error code + register + 0x34 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + M2FECR + M2FECR + RAMECC monitor x failing ECC error code + register + 0x58 + 0x20 + read-write + 0x00000000 + + + FEC + Failing error code + 0 + 32 + + + + + + + ART + accelerator - control register + (ART_CTR) + ART + 0x40024400 + + 0x0 + 0x400 + registers + + + + CTR + CTR + control register + 0x0 + 0x20 + read-write + 0x00000004 + + + EN + Cache enable + 0 + 1 + + + PCACHEADDR + Cacheable page index + 8 + 12 + + + + + + + diff --git a/svd/nrf52833.svd b/svd/nrf52833.svd new file mode 100644 index 000000000..6b217ca14 --- /dev/null +++ b/svd/nrf52833.svd @@ -0,0 +1,54114 @@ + + + + Nordic Semiconductor + Nordic + nrf52833 + nrf52 + 1 + nRF52833 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller + +Copyright (c) 2010 - 2021, Nordic Semiconductor ASA\n +\n +All rights reserved.\n +\n +Redistribution and use in source and binary forms, with or without modification,\n +are permitted provided that the following conditions are met:\n +\n +1. Redistributions of source code must retain the above copyright notice, this\n + list of conditions and the following disclaimer.\n +\n +2. Redistributions in binary form, except as embedded into a Nordic\n + Semiconductor ASA integrated circuit in a product or a software update for\n + such product, must reproduce the above copyright notice, this list of\n + conditions and the following disclaimer in the documentation and/or other\n + materials provided with the distribution.\n +\n +3. Neither the name of Nordic Semiconductor ASA nor the names of its\n + contributors may be used to endorse or promote products derived from this\n + software without specific prior written permission.\n +\n +4. This software, with or without modification, must only be used with a\n + Nordic Semiconductor ASA integrated circuit.\n +\n +5. Any software provided in binary form under this license must not be reverse\n + engineered, decompiled, modified and/or disassembled.\n +\n +THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS\n +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n +OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE\n +DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\n +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + + 8 + 32 + 32 + 0x00000000 + 0xFFFFFFFF + + CM4 + r0p1 + little + 1 + 1 + 3 + 0 + + system_nrf52833 + NRF_ + + 2048 + 2048 + 112 + + + + FICR + Factory information configuration registers + 0x10000000 + + 0 + 0x1000 + registers + + FICR + 0x20 + + + CODEPAGESIZE + Code memory page size + 0x010 + read-only + 0xFFFFFFFF + + + CODEPAGESIZE + Code memory page size + 0 + 31 + + + + + CODESIZE + Code memory size + 0x014 + read-only + 0xFFFFFFFF + + + CODESIZE + Code memory size in number of pages + 0 + 31 + + + + + 0x2 + 0x4 + DEVICEID[%s] + Description collection: Device identifier + 0x060 + read-only + 0xFFFFFFFF + + + DEVICEID + 64 bit unique device identifier + 0 + 31 + + + + + 0x4 + 0x4 + ER[%s] + Description collection: Encryption root, word n + 0x080 + read-only + 0xFFFFFFFF + + + ER + Encryption root, word n + 0 + 31 + + + + + 0x4 + 0x4 + IR[%s] + Description collection: Identity Root, word n + 0x090 + read-only + 0xFFFFFFFF + + + IR + Identity Root, word n + 0 + 31 + + + + + DEVICEADDRTYPE + Device address type + 0x0A0 + read-only + 0xFFFFFFFF + + + DEVICEADDRTYPE + Device address type + 0 + 0 + + + Public + Public address + 0 + + + Random + Random address + 1 + + + + + + + 0x2 + 0x4 + DEVICEADDR[%s] + Description collection: Device address n + 0x0A4 + read-only + 0xFFFFFFFF + + + DEVICEADDR + 48 bit device address + 0 + 31 + + + + + INFO + Device info + FICR_INFO + read-only + 0x100 + + PART + Part code + 0x000 + read-only + 0x00052833 + + + PART + Part code + 0 + 31 + + + N52820 + nRF52820 + 0x52820 + + + N52833 + nRF52833 + 0x52833 + + + N52840 + nRF52840 + 0x52840 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + VARIANT + Build code (hardware version and production configuration) + 0x004 + read-only + 0xFFFFFFFF + + + VARIANT + Build code (hardware version and production configuration). Encoded as ASCII. + 0 + 31 + + + AAAA + AAAA + 0x41414141 + + + AAAB + AAAB + 0x41414142 + + + AAA0 + AAA0 + 0x41414130 + + + AAA1 + AAA1 + 0x41414131 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + PACKAGE + Package option + 0x008 + read-only + 0xFFFFFFFF + + + PACKAGE + Package option + 0 + 31 + + + QD + QDxx - 5x5 40-pin QFN + 0x2007 + + + QI + QIxx - 7x7 73-pin aQFN + 0x2004 + + + CJ + CJxx - 3.175 x 3.175 WLCSP + 0x2008 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + RAM + RAM variant + 0x00C + read-only + 0xFFFFFFFF + + + RAM + RAM variant + 0 + 31 + + + K16 + 16 kByte RAM + 0x10 + + + K32 + 32 kByte RAM + 0x20 + + + K64 + 64 kByte RAM + 0x40 + + + K128 + 128 kByte RAM + 0x80 + + + K256 + 256 kByte RAM + 0x100 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + FLASH + Flash variant + 0x010 + read-only + 0xFFFFFFFF + + + FLASH + Flash variant + 0 + 31 + + + K128 + 128 kByte FLASH + 0x80 + + + K256 + 256 kByte FLASH + 0x100 + + + K512 + 512 kByte FLASH + 0x200 + + + K1024 + 1 MByte FLASH + 0x400 + + + K2048 + 2 MByte FLASH + 0x800 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + + 0x3 + 0x4 + PRODTEST[%s] + Description collection: Production test signature n + 0x350 + read-only + 0xFFFFFFFF + + + PRODTEST + Production test signature n + 0 + 31 + + + Done + Production tests done + 0xBB42319F + + + NotDone + Production tests not done + 0xFFFFFFFF + + + + + + + TEMP + Registers storing factory TEMP module linearization coefficients + FICR_TEMP + read-only + 0x404 + + A0 + Slope definition A0 + 0x000 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A1 + Slope definition A1 + 0x004 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A2 + Slope definition A2 + 0x008 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A3 + Slope definition A3 + 0x00C + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A4 + Slope definition A4 + 0x010 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A5 + Slope definition A5 + 0x014 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + B0 + Y-intercept B0 + 0x018 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B1 + Y-intercept B1 + 0x01C + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B2 + Y-intercept B2 + 0x020 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B3 + Y-intercept B3 + 0x024 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B4 + Y-intercept B4 + 0x028 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B5 + Y-intercept B5 + 0x02C + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + T0 + Segment end T0 + 0x030 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T1 + Segment end T1 + 0x034 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T2 + Segment end T2 + 0x038 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T3 + Segment end T3 + 0x03C + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T4 + Segment end T4 + 0x040 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + + NFC + Unspecified + FICR_NFC + read-write + 0x450 + + TAGHEADER0 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x000 + read-only + 0xFFFFFF5F + + + MFGID + Default Manufacturer ID: Nordic Semiconductor ASA has ICM 0x5F + 0 + 7 + + + UD1 + Unique identifier byte 1 + 8 + 15 + + + UD2 + Unique identifier byte 2 + 16 + 23 + + + UD3 + Unique identifier byte 3 + 24 + 31 + + + + + TAGHEADER1 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x004 + read-only + 0xFFFFFFFF + + + UD4 + Unique identifier byte 4 + 0 + 7 + + + UD5 + Unique identifier byte 5 + 8 + 15 + + + UD6 + Unique identifier byte 6 + 16 + 23 + + + UD7 + Unique identifier byte 7 + 24 + 31 + + + + + TAGHEADER2 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x008 + read-only + 0xFFFFFFFF + + + UD8 + Unique identifier byte 8 + 0 + 7 + + + UD9 + Unique identifier byte 9 + 8 + 15 + + + UD10 + Unique identifier byte 10 + 16 + 23 + + + UD11 + Unique identifier byte 11 + 24 + 31 + + + + + TAGHEADER3 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x00C + read-only + 0xFFFFFFFF + + + UD12 + Unique identifier byte 12 + 0 + 7 + + + UD13 + Unique identifier byte 13 + 8 + 15 + + + UD14 + Unique identifier byte 14 + 16 + 23 + + + UD15 + Unique identifier byte 15 + 24 + 31 + + + + + + + + UICR + User information configuration registers + 0x10001000 + + 0 + 0x1000 + registers + + UICR + 0x20 + + + 0xD + 0x4 + NRFFW[%s] + Description collection: Reserved for Nordic firmware design + 0x014 + read-write + 0xFFFFFFFF + + + NRFFW + Reserved for Nordic firmware design + 0 + 31 + + + + + 0xC + 0x4 + NRFHW[%s] + Description collection: Reserved for Nordic hardware design + 0x050 + read-write + 0xFFFFFFFF + + + NRFHW + Reserved for Nordic hardware design + 0 + 31 + + + + + 0x20 + 0x4 + CUSTOMER[%s] + Description collection: Reserved for customer + 0x080 + read-write + 0xFFFFFFFF + + + CUSTOMER + Reserved for customer + 0 + 31 + + + + + 0x2 + 0x4 + PSELRESET[%s] + Description collection: Mapping of the nRESET function (see POWER chapter for details) + 0x200 + read-write + 0xFFFFFFFF + + + PIN + GPIO pin number onto which nRESET is exposed + 0 + 4 + + + PORT + Port number onto which nRESET is exposed + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + APPROTECT + Access port protection + 0x208 + read-write + 0xFFFFFFFF + + + PALL + Enable or disable access port protection. + 0 + 7 + + + Disabled + Hardware disable of access port protection for devices where access port protection is controlled by hardware + 0xFF + + + HwDisabled + Hardware disable of access port protection for devices where access port protection is controlled by hardware and software + 0x5A + + + Enabled + Enable + 0x00 + + + + + + + NFCPINS + Setting of pins dedicated to NFC functionality: NFC antenna or GPIO + 0x20C + read-write + 0xFFFFFFFF + + + PROTECT + Setting of pins dedicated to NFC functionality + 0 + 0 + + + Disabled + Operation as GPIO pins. Same protection as normal GPIO pins. + 0 + + + NFC + Operation as NFC antenna pins. Configures the protection for NFC operation. + 1 + + + + + + + DEBUGCTRL + Processor debug control + 0x210 + read-write + 0xFFFFFFFF + + + CPUNIDEN + Configure CPU non-intrusive debug features + 0 + 7 + + + Enabled + Enable CPU ITM and ETM functionality (default behavior) + 0xFF + + + Disabled + Disable CPU ITM and ETM functionality + 0x00 + + + + + CPUFPBEN + Configure CPU flash patch and breakpoint (FPB) unit behavior + 8 + 15 + + + Enabled + Enable CPU FPB unit (default behavior) + 0xFF + + + Disabled + Disable CPU FPB unit. Writes into the FPB registers will be ignored. + 0x00 + + + + + + + REGOUT0 + Output voltage from REG0 regulator stage. The maximum output voltage from this stage is given as VDDH - V_VDDH-VDD. + 0x304 + read-write + 0xFFFFFFFF + + + VOUT + Output voltage from REG0 regulator stage. + 0 + 2 + + + 1V8 + 1.8 V + 0 + + + 2V1 + 2.1 V + 1 + + + 2V4 + 2.4 V + 2 + + + 2V7 + 2.7 V + 3 + + + 3V0 + 3.0 V + 4 + + + 3V3 + 3.3 V + 5 + + + DEFAULT + Default voltage: 1.8 V + 7 + + + + + + + + + APPROTECT + Access Port Protection + 0x40000000 + + 0 + 0x1000 + registers + + APPROTECT + 0x20 + + + FORCEPROTECT + Software force enable APPROTECT mechanism until next reset. + 0x550 + read-writeonce + 0xFFFFFFFF + + + FORCEPROTECT + Write 0x0 to force enable APPROTECT mechanism + 0 + 7 + + write + + Force + Software force enable APPROTECT mechanism + 0x0 + + + + + + + DISABLE + Software disable APPROTECT mechanism + 0x558 + read-write + 0x00000000 + + + DISABLE + Software disable APPROTECT mechanism + 0 + 7 + + + SwDisable + Software disable APPROTECT mechanism + 0x5A + + + + + + + + + CLOCK + Clock control + 0x40000000 + APPROTECT + + 0 + 0x1000 + registers + + + POWER_CLOCK + 0 + + CLOCK + 0x20 + + + TASKS_HFCLKSTART + Start HFXO crystal oscillator + 0x000 + write-only + + + TASKS_HFCLKSTART + Start HFXO crystal oscillator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_HFCLKSTOP + Stop HFXO crystal oscillator + 0x004 + write-only + + + TASKS_HFCLKSTOP + Stop HFXO crystal oscillator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_LFCLKSTART + Start LFCLK + 0x008 + write-only + + + TASKS_LFCLKSTART + Start LFCLK + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_LFCLKSTOP + Stop LFCLK + 0x00C + write-only + + + TASKS_LFCLKSTOP + Stop LFCLK + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CAL + Start calibration of LFRC + 0x010 + write-only + + + TASKS_CAL + Start calibration of LFRC + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CTSTART + Start calibration timer + 0x014 + write-only + + + TASKS_CTSTART + Start calibration timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CTSTOP + Stop calibration timer + 0x018 + write-only + + + TASKS_CTSTOP + Stop calibration timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_HFCLKSTARTED + HFXO crystal oscillator started + 0x100 + read-write + + + EVENTS_HFCLKSTARTED + HFXO crystal oscillator started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LFCLKSTARTED + LFCLK started + 0x104 + read-write + + + EVENTS_LFCLKSTARTED + LFCLK started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DONE + Calibration of LFRC completed + 0x10C + read-write + + + EVENTS_DONE + Calibration of LFRC completed + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CTTO + Calibration timer timeout + 0x110 + read-write + + + EVENTS_CTTO + Calibration timer timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CTSTARTED + Calibration timer has been started and is ready to process new tasks + 0x128 + read-write + + + EVENTS_CTSTARTED + Calibration timer has been started and is ready to process new tasks + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CTSTOPPED + Calibration timer has been stopped and is ready to process new tasks + 0x12C + read-write + + + EVENTS_CTSTOPPED + Calibration timer has been stopped and is ready to process new tasks + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + HFCLKSTARTED + Write '1' to enable interrupt for event HFCLKSTARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LFCLKSTARTED + Write '1' to enable interrupt for event LFCLKSTARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DONE + Write '1' to enable interrupt for event DONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CTTO + Write '1' to enable interrupt for event CTTO + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CTSTARTED + Write '1' to enable interrupt for event CTSTARTED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CTSTOPPED + Write '1' to enable interrupt for event CTSTOPPED + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + HFCLKSTARTED + Write '1' to disable interrupt for event HFCLKSTARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LFCLKSTARTED + Write '1' to disable interrupt for event LFCLKSTARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DONE + Write '1' to disable interrupt for event DONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CTTO + Write '1' to disable interrupt for event CTTO + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CTSTARTED + Write '1' to disable interrupt for event CTSTARTED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CTSTOPPED + Write '1' to disable interrupt for event CTSTOPPED + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + HFCLKRUN + Status indicating that HFCLKSTART task has been triggered + 0x408 + read-only + + + STATUS + HFCLKSTART task triggered or not + 0 + 0 + + + NotTriggered + Task not triggered + 0 + + + Triggered + Task triggered + 1 + + + + + + + HFCLKSTAT + HFCLK status + 0x40C + read-only + + + SRC + Source of HFCLK + 0 + 0 + + + RC + 64 MHz internal oscillator (HFINT) + 0 + + + Xtal + 64 MHz crystal oscillator (HFXO) + 1 + + + + + STATE + HFCLK state + 16 + 16 + + + NotRunning + HFCLK not running + 0 + + + Running + HFCLK running + 1 + + + + + + + LFCLKRUN + Status indicating that LFCLKSTART task has been triggered + 0x414 + read-only + + + STATUS + LFCLKSTART task triggered or not + 0 + 0 + + + NotTriggered + Task not triggered + 0 + + + Triggered + Task triggered + 1 + + + + + + + LFCLKSTAT + LFCLK status + 0x418 + read-only + + + SRC + Source of LFCLK + 0 + 1 + + + RC + 32.768 kHz RC oscillator (LFRC) + 0 + + + Xtal + 32.768 kHz crystal oscillator (LFXO) + 1 + + + Synth + 32.768 kHz synthesized from HFCLK (LFSYNT) + 2 + + + + + STATE + LFCLK state + 16 + 16 + + + NotRunning + LFCLK not running + 0 + + + Running + LFCLK running + 1 + + + + + + + LFCLKSRCCOPY + Copy of LFCLKSRC register, set when LFCLKSTART task was triggered + 0x41C + read-only + + + SRC + Clock source + 0 + 1 + + + RC + 32.768 kHz RC oscillator (LFRC) + 0 + + + Xtal + 32.768 kHz crystal oscillator (LFXO) + 1 + + + Synth + 32.768 kHz synthesized from HFCLK (LFSYNT) + 2 + + + + + + + LFCLKSRC + Clock source for the LFCLK + 0x518 + read-write + + + SRC + Clock source + 0 + 1 + + + RC + 32.768 kHz RC oscillator (LFRC) + 0 + + + Xtal + 32.768 kHz crystal oscillator (LFXO) + 1 + + + Synth + 32.768 kHz synthesized from HFCLK (LFSYNT) + 2 + + + + + BYPASS + Enable or disable bypass of LFCLK crystal oscillator with external clock source + 16 + 16 + + + Disabled + Disable (use with Xtal or low-swing external source) + 0 + + + Enabled + Enable (use with rail-to-rail external source) + 1 + + + + + EXTERNAL + Enable or disable external source for LFCLK + 17 + 17 + + + Disabled + Disable external source (use with Xtal) + 0 + + + Enabled + Enable use of external source instead of Xtal (SRC needs to be set to Xtal) + 1 + + + + + + + HFXODEBOUNCE + HFXO debounce time. The HFXO is started by triggering the TASKS_HFCLKSTART task. + 0x528 + read-write + 0x00000010 + + + HFXODEBOUNCE + HFXO debounce time. Debounce time = HFXODEBOUNCE * 16 us. + 0 + 7 + + + Db256us + 256 us debounce time. Recommended for 1.6 mm x 2.0 mm crystals and larger. + 0x10 + + + Db1024us + 1024 us debounce time. Recommended for 1.6 mm x 1.2 mm crystals and smaller. + 0x40 + + + + + + + LFXODEBOUNCE + LFXO debounce time. The LFXO is started by triggering the TASKS_LFCLKSTART task when the LFCLKSRC register is configured for Xtal. + 0x52C + read-write + 0x00000000 + + + LFXODEBOUNCE + LFXO debounce time. + 0 + 0 + + + Normal + 8192 32.768 kHz periods, or 0.25 s. Recommended for normal Operating Temperature conditions. + 0 + + + Extended + 16384 32.768 kHz periods, or 0.5 s. Recommended for Extended Operating Temperature conditions. + 1 + + + + + + + CTIV + Calibration timer interval + 0x538 + read-write + + + CTIV + Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds. + 0 + 6 + + + + + TRACECONFIG + Clocking options for the trace port debug interface + 0x55C + read-write + 0x00000000 + + + TRACEPORTSPEED + Speed of trace port clock. Note that the TRACECLK pin will output this clock divided by two. + 0 + 1 + + + 32MHz + 32 MHz trace port clock (TRACECLK = 16 MHz) + 0 + + + 16MHz + 16 MHz trace port clock (TRACECLK = 8 MHz) + 1 + + + 8MHz + 8 MHz trace port clock (TRACECLK = 4 MHz) + 2 + + + 4MHz + 4 MHz trace port clock (TRACECLK = 2 MHz) + 3 + + + + + TRACEMUX + Pin multiplexing of trace signals. See pin assignment chapter for more details. + 16 + 17 + + + GPIO + No trace signals routed to pins. All pins can be used as regular GPIOs. + 0 + + + Serial + SWO trace signal routed to pin. Remaining pins can be used as regular GPIOs. + 1 + + + Parallel + All trace signals (TRACECLK and TRACEDATA[n]) routed to pins. + 2 + + + + + + + + + POWER + Power control + 0x40000000 + APPROTECT + + 0 + 0x1000 + registers + + + POWER_CLOCK + 0 + + POWER + 0x20 + + + TASKS_CONSTLAT + Enable Constant Latency mode + 0x78 + write-only + + + TASKS_CONSTLAT + Enable Constant Latency mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_LOWPWR + Enable Low-power mode (variable latency) + 0x7C + write-only + + + TASKS_LOWPWR + Enable Low-power mode (variable latency) + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_POFWARN + Power failure warning + 0x108 + read-write + + + EVENTS_POFWARN + Power failure warning + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SLEEPENTER + CPU entered WFI/WFE sleep + 0x114 + read-write + + + EVENTS_SLEEPENTER + CPU entered WFI/WFE sleep + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SLEEPEXIT + CPU exited WFI/WFE sleep + 0x118 + read-write + + + EVENTS_SLEEPEXIT + CPU exited WFI/WFE sleep + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBDETECTED + Voltage supply detected on VBUS + 0x11C + read-write + + + EVENTS_USBDETECTED + Voltage supply detected on VBUS + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBREMOVED + Voltage supply removed from VBUS + 0x120 + read-write + + + EVENTS_USBREMOVED + Voltage supply removed from VBUS + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBPWRRDY + USB 3.3 V supply ready + 0x124 + read-write + + + EVENTS_USBPWRRDY + USB 3.3 V supply ready + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + POFWARN + Write '1' to enable interrupt for event POFWARN + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SLEEPENTER + Write '1' to enable interrupt for event SLEEPENTER + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SLEEPEXIT + Write '1' to enable interrupt for event SLEEPEXIT + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBDETECTED + Write '1' to enable interrupt for event USBDETECTED + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBREMOVED + Write '1' to enable interrupt for event USBREMOVED + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBPWRRDY + Write '1' to enable interrupt for event USBPWRRDY + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + POFWARN + Write '1' to disable interrupt for event POFWARN + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SLEEPENTER + Write '1' to disable interrupt for event SLEEPENTER + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SLEEPEXIT + Write '1' to disable interrupt for event SLEEPEXIT + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBDETECTED + Write '1' to disable interrupt for event USBDETECTED + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBREMOVED + Write '1' to disable interrupt for event USBREMOVED + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBPWRRDY + Write '1' to disable interrupt for event USBPWRRDY + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RESETREAS + Reset reason + 0x400 + read-write + + + RESETPIN + Reset from pin-reset detected + 0 + 0 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + DOG + Reset from watchdog detected + 1 + 1 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + SREQ + Reset from soft reset detected + 2 + 2 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + LOCKUP + Reset from CPU lock-up detected + 3 + 3 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + OFF + Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO + 16 + 16 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + LPCOMP + Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP + 17 + 17 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + DIF + Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode + 18 + 18 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + NFC + Reset due to wake up from System OFF mode by NFC field detect + 19 + 19 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + VBUS + Reset due to wake up from System OFF mode by VBUS rising into valid range + 20 + 20 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + + + RAMSTATUS + Deprecated register - RAM status register + 0x428 + read-only + 0x00000000 + + + RAMBLOCK0 + RAM block 0 is on or off/powering up + 0 + 0 + + + Off + Off + 0 + + + On + On + 1 + + + + + RAMBLOCK1 + RAM block 1 is on or off/powering up + 1 + 1 + + + Off + Off + 0 + + + On + On + 1 + + + + + RAMBLOCK2 + RAM block 2 is on or off/powering up + 2 + 2 + + + Off + Off + 0 + + + On + On + 1 + + + + + RAMBLOCK3 + RAM block 3 is on or off/powering up + 3 + 3 + + + Off + Off + 0 + + + On + On + 1 + + + + + + + USBREGSTATUS + USB supply status + 0x438 + read-only + 0x00000000 + + + VBUSDETECT + VBUS input detection status (USBDETECTED and USBREMOVED events are derived from this information) + 0 + 0 + + + NoVbus + VBUS voltage below valid threshold + 0 + + + VbusPresent + VBUS voltage above valid threshold + 1 + + + + + OUTPUTRDY + USB supply output settling time elapsed + 1 + 1 + + + NotReady + USBREG output settling time not elapsed + 0 + + + Ready + USBREG output settling time elapsed (same information as USBPWRRDY event) + 1 + + + + + + + SYSTEMOFF + System OFF register + 0x500 + write-only + + + SYSTEMOFF + Enable System OFF mode + 0 + 0 + + + Enter + Enable System OFF mode + 1 + + + + + + + POFCON + Power-fail comparator configuration + 0x510 + read-write + + + POF + Enable or disable power failure warning + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + THRESHOLD + Power-fail comparator threshold setting. This setting applies both for normal voltage mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to VDDH only). Values 0-3 set threshold below 1.7 V and should not be used as brown out detection will be activated before power failure warning on such low voltages. + 1 + 4 + + + V17 + Set threshold to 1.7 V + 4 + + + V18 + Set threshold to 1.8 V + 5 + + + V19 + Set threshold to 1.9 V + 6 + + + V20 + Set threshold to 2.0 V + 7 + + + V21 + Set threshold to 2.1 V + 8 + + + V22 + Set threshold to 2.2 V + 9 + + + V23 + Set threshold to 2.3 V + 10 + + + V24 + Set threshold to 2.4 V + 11 + + + V25 + Set threshold to 2.5 V + 12 + + + V26 + Set threshold to 2.6 V + 13 + + + V27 + Set threshold to 2.7 V + 14 + + + V28 + Set threshold to 2.8 V + 15 + + + + + THRESHOLDVDDH + Power-fail comparator threshold setting for high voltage mode (supply connected to VDDH only). This setting does not apply for normal voltage mode (supply connected to both VDD and VDDH). + 8 + 11 + + + V27 + Set threshold to 2.7 V + 0 + + + V28 + Set threshold to 2.8 V + 1 + + + V29 + Set threshold to 2.9 V + 2 + + + V30 + Set threshold to 3.0 V + 3 + + + V31 + Set threshold to 3.1 V + 4 + + + V32 + Set threshold to 3.2 V + 5 + + + V33 + Set threshold to 3.3 V + 6 + + + V34 + Set threshold to 3.4 V + 7 + + + V35 + Set threshold to 3.5 V + 8 + + + V36 + Set threshold to 3.6 V + 9 + + + V37 + Set threshold to 3.7 V + 10 + + + V38 + Set threshold to 3.8 V + 11 + + + V39 + Set threshold to 3.9 V + 12 + + + V40 + Set threshold to 4.0 V + 13 + + + V41 + Set threshold to 4.1 V + 14 + + + V42 + Set threshold to 4.2 V + 15 + + + + + + + GPREGRET + General purpose retention register + 0x51C + read-write + + + GPREGRET + General purpose retention register + 0 + 7 + + + + + GPREGRET2 + General purpose retention register + 0x520 + read-write + + + GPREGRET + General purpose retention register + 0 + 7 + + + + + DCDCEN + Enable DC/DC converter for REG1 stage + 0x578 + read-write + + + DCDCEN + Enable DC/DC converter for REG1 stage. + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + MAINREGSTATUS + Main supply status + 0x640 + read-only + 0x00000000 + + + MAINREGSTATUS + Main supply status + 0 + 0 + + + Normal + Normal voltage mode. Voltage supplied on VDD. + 0 + + + High + High voltage mode. Voltage supplied on VDDH. + 1 + + + + + + + 9 + 0x010 + RAM[%s] + Unspecified + POWER_RAM + read-write + 0x900 + + POWER + Description cluster: RAMn power control register + 0x000 + read-write + 0x0000FFFF + + + S0POWER + Keep RAM section S0 on or off in System ON mode. + 0 + 0 + + + Off + Off + 0 + + + On + On + 1 + + + + + S1POWER + Keep RAM section S1 on or off in System ON mode. + 1 + 1 + + + Off + Off + 0 + + + On + On + 1 + + + + + S2POWER + Keep RAM section S2 on or off in System ON mode. + 2 + 2 + + + Off + Off + 0 + + + On + On + 1 + + + + + S3POWER + Keep RAM section S3 on or off in System ON mode. + 3 + 3 + + + Off + Off + 0 + + + On + On + 1 + + + + + S4POWER + Keep RAM section S4 on or off in System ON mode. + 4 + 4 + + + Off + Off + 0 + + + On + On + 1 + + + + + S5POWER + Keep RAM section S5 on or off in System ON mode. + 5 + 5 + + + Off + Off + 0 + + + On + On + 1 + + + + + S6POWER + Keep RAM section S6 on or off in System ON mode. + 6 + 6 + + + Off + Off + 0 + + + On + On + 1 + + + + + S7POWER + Keep RAM section S7 on or off in System ON mode. + 7 + 7 + + + Off + Off + 0 + + + On + On + 1 + + + + + S8POWER + Keep RAM section S8 on or off in System ON mode. + 8 + 8 + + + Off + Off + 0 + + + On + On + 1 + + + + + S9POWER + Keep RAM section S9 on or off in System ON mode. + 9 + 9 + + + Off + Off + 0 + + + On + On + 1 + + + + + S10POWER + Keep RAM section S10 on or off in System ON mode. + 10 + 10 + + + Off + Off + 0 + + + On + On + 1 + + + + + S11POWER + Keep RAM section S11 on or off in System ON mode. + 11 + 11 + + + Off + Off + 0 + + + On + On + 1 + + + + + S12POWER + Keep RAM section S12 on or off in System ON mode. + 12 + 12 + + + Off + Off + 0 + + + On + On + 1 + + + + + S13POWER + Keep RAM section S13 on or off in System ON mode. + 13 + 13 + + + Off + Off + 0 + + + On + On + 1 + + + + + S14POWER + Keep RAM section S14 on or off in System ON mode. + 14 + 14 + + + Off + Off + 0 + + + On + On + 1 + + + + + S15POWER + Keep RAM section S15 on or off in System ON mode. + 15 + 15 + + + Off + Off + 0 + + + On + On + 1 + + + + + S0RETENTION + Keep retention on RAM section S0 when RAM section is off + 16 + 16 + + + Off + Off + 0 + + + On + On + 1 + + + + + S1RETENTION + Keep retention on RAM section S1 when RAM section is off + 17 + 17 + + + Off + Off + 0 + + + On + On + 1 + + + + + S2RETENTION + Keep retention on RAM section S2 when RAM section is off + 18 + 18 + + + Off + Off + 0 + + + On + On + 1 + + + + + S3RETENTION + Keep retention on RAM section S3 when RAM section is off + 19 + 19 + + + Off + Off + 0 + + + On + On + 1 + + + + + S4RETENTION + Keep retention on RAM section S4 when RAM section is off + 20 + 20 + + + Off + Off + 0 + + + On + On + 1 + + + + + S5RETENTION + Keep retention on RAM section S5 when RAM section is off + 21 + 21 + + + Off + Off + 0 + + + On + On + 1 + + + + + S6RETENTION + Keep retention on RAM section S6 when RAM section is off + 22 + 22 + + + Off + Off + 0 + + + On + On + 1 + + + + + S7RETENTION + Keep retention on RAM section S7 when RAM section is off + 23 + 23 + + + Off + Off + 0 + + + On + On + 1 + + + + + S8RETENTION + Keep retention on RAM section S8 when RAM section is off + 24 + 24 + + + Off + Off + 0 + + + On + On + 1 + + + + + S9RETENTION + Keep retention on RAM section S9 when RAM section is off + 25 + 25 + + + Off + Off + 0 + + + On + On + 1 + + + + + S10RETENTION + Keep retention on RAM section S10 when RAM section is off + 26 + 26 + + + Off + Off + 0 + + + On + On + 1 + + + + + S11RETENTION + Keep retention on RAM section S11 when RAM section is off + 27 + 27 + + + Off + Off + 0 + + + On + On + 1 + + + + + S12RETENTION + Keep retention on RAM section S12 when RAM section is off + 28 + 28 + + + Off + Off + 0 + + + On + On + 1 + + + + + S13RETENTION + Keep retention on RAM section S13 when RAM section is off + 29 + 29 + + + Off + Off + 0 + + + On + On + 1 + + + + + S14RETENTION + Keep retention on RAM section S14 when RAM section is off + 30 + 30 + + + Off + Off + 0 + + + On + On + 1 + + + + + S15RETENTION + Keep retention on RAM section S15 when RAM section is off + 31 + 31 + + + Off + Off + 0 + + + On + On + 1 + + + + + + + POWERSET + Description cluster: RAMn power control set register + 0x004 + write-only + 0x0000FFFF + + + S0POWER + Keep RAM section S0 of RAMn on or off in System ON mode + 0 + 0 + + + On + On + 1 + + + + + S1POWER + Keep RAM section S1 of RAMn on or off in System ON mode + 1 + 1 + + + On + On + 1 + + + + + S2POWER + Keep RAM section S2 of RAMn on or off in System ON mode + 2 + 2 + + + On + On + 1 + + + + + S3POWER + Keep RAM section S3 of RAMn on or off in System ON mode + 3 + 3 + + + On + On + 1 + + + + + S4POWER + Keep RAM section S4 of RAMn on or off in System ON mode + 4 + 4 + + + On + On + 1 + + + + + S5POWER + Keep RAM section S5 of RAMn on or off in System ON mode + 5 + 5 + + + On + On + 1 + + + + + S6POWER + Keep RAM section S6 of RAMn on or off in System ON mode + 6 + 6 + + + On + On + 1 + + + + + S7POWER + Keep RAM section S7 of RAMn on or off in System ON mode + 7 + 7 + + + On + On + 1 + + + + + S8POWER + Keep RAM section S8 of RAMn on or off in System ON mode + 8 + 8 + + + On + On + 1 + + + + + S9POWER + Keep RAM section S9 of RAMn on or off in System ON mode + 9 + 9 + + + On + On + 1 + + + + + S10POWER + Keep RAM section S10 of RAMn on or off in System ON mode + 10 + 10 + + + On + On + 1 + + + + + S11POWER + Keep RAM section S11 of RAMn on or off in System ON mode + 11 + 11 + + + On + On + 1 + + + + + S12POWER + Keep RAM section S12 of RAMn on or off in System ON mode + 12 + 12 + + + On + On + 1 + + + + + S13POWER + Keep RAM section S13 of RAMn on or off in System ON mode + 13 + 13 + + + On + On + 1 + + + + + S14POWER + Keep RAM section S14 of RAMn on or off in System ON mode + 14 + 14 + + + On + On + 1 + + + + + S15POWER + Keep RAM section S15 of RAMn on or off in System ON mode + 15 + 15 + + + On + On + 1 + + + + + S0RETENTION + Keep retention on RAM section S0 when RAM section is switched off + 16 + 16 + + + On + On + 1 + + + + + S1RETENTION + Keep retention on RAM section S1 when RAM section is switched off + 17 + 17 + + + On + On + 1 + + + + + S2RETENTION + Keep retention on RAM section S2 when RAM section is switched off + 18 + 18 + + + On + On + 1 + + + + + S3RETENTION + Keep retention on RAM section S3 when RAM section is switched off + 19 + 19 + + + On + On + 1 + + + + + S4RETENTION + Keep retention on RAM section S4 when RAM section is switched off + 20 + 20 + + + On + On + 1 + + + + + S5RETENTION + Keep retention on RAM section S5 when RAM section is switched off + 21 + 21 + + + On + On + 1 + + + + + S6RETENTION + Keep retention on RAM section S6 when RAM section is switched off + 22 + 22 + + + On + On + 1 + + + + + S7RETENTION + Keep retention on RAM section S7 when RAM section is switched off + 23 + 23 + + + On + On + 1 + + + + + S8RETENTION + Keep retention on RAM section S8 when RAM section is switched off + 24 + 24 + + + On + On + 1 + + + + + S9RETENTION + Keep retention on RAM section S9 when RAM section is switched off + 25 + 25 + + + On + On + 1 + + + + + S10RETENTION + Keep retention on RAM section S10 when RAM section is switched off + 26 + 26 + + + On + On + 1 + + + + + S11RETENTION + Keep retention on RAM section S11 when RAM section is switched off + 27 + 27 + + + On + On + 1 + + + + + S12RETENTION + Keep retention on RAM section S12 when RAM section is switched off + 28 + 28 + + + On + On + 1 + + + + + S13RETENTION + Keep retention on RAM section S13 when RAM section is switched off + 29 + 29 + + + On + On + 1 + + + + + S14RETENTION + Keep retention on RAM section S14 when RAM section is switched off + 30 + 30 + + + On + On + 1 + + + + + S15RETENTION + Keep retention on RAM section S15 when RAM section is switched off + 31 + 31 + + + On + On + 1 + + + + + + + POWERCLR + Description cluster: RAMn power control clear register + 0x008 + write-only + 0x0000FFFF + + + S0POWER + Keep RAM section S0 of RAMn on or off in System ON mode + 0 + 0 + + + Off + Off + 1 + + + + + S1POWER + Keep RAM section S1 of RAMn on or off in System ON mode + 1 + 1 + + + Off + Off + 1 + + + + + S2POWER + Keep RAM section S2 of RAMn on or off in System ON mode + 2 + 2 + + + Off + Off + 1 + + + + + S3POWER + Keep RAM section S3 of RAMn on or off in System ON mode + 3 + 3 + + + Off + Off + 1 + + + + + S4POWER + Keep RAM section S4 of RAMn on or off in System ON mode + 4 + 4 + + + Off + Off + 1 + + + + + S5POWER + Keep RAM section S5 of RAMn on or off in System ON mode + 5 + 5 + + + Off + Off + 1 + + + + + S6POWER + Keep RAM section S6 of RAMn on or off in System ON mode + 6 + 6 + + + Off + Off + 1 + + + + + S7POWER + Keep RAM section S7 of RAMn on or off in System ON mode + 7 + 7 + + + Off + Off + 1 + + + + + S8POWER + Keep RAM section S8 of RAMn on or off in System ON mode + 8 + 8 + + + Off + Off + 1 + + + + + S9POWER + Keep RAM section S9 of RAMn on or off in System ON mode + 9 + 9 + + + Off + Off + 1 + + + + + S10POWER + Keep RAM section S10 of RAMn on or off in System ON mode + 10 + 10 + + + Off + Off + 1 + + + + + S11POWER + Keep RAM section S11 of RAMn on or off in System ON mode + 11 + 11 + + + Off + Off + 1 + + + + + S12POWER + Keep RAM section S12 of RAMn on or off in System ON mode + 12 + 12 + + + Off + Off + 1 + + + + + S13POWER + Keep RAM section S13 of RAMn on or off in System ON mode + 13 + 13 + + + Off + Off + 1 + + + + + S14POWER + Keep RAM section S14 of RAMn on or off in System ON mode + 14 + 14 + + + Off + Off + 1 + + + + + S15POWER + Keep RAM section S15 of RAMn on or off in System ON mode + 15 + 15 + + + Off + Off + 1 + + + + + S0RETENTION + Keep retention on RAM section S0 when RAM section is switched off + 16 + 16 + + + Off + Off + 1 + + + + + S1RETENTION + Keep retention on RAM section S1 when RAM section is switched off + 17 + 17 + + + Off + Off + 1 + + + + + S2RETENTION + Keep retention on RAM section S2 when RAM section is switched off + 18 + 18 + + + Off + Off + 1 + + + + + S3RETENTION + Keep retention on RAM section S3 when RAM section is switched off + 19 + 19 + + + Off + Off + 1 + + + + + S4RETENTION + Keep retention on RAM section S4 when RAM section is switched off + 20 + 20 + + + Off + Off + 1 + + + + + S5RETENTION + Keep retention on RAM section S5 when RAM section is switched off + 21 + 21 + + + Off + Off + 1 + + + + + S6RETENTION + Keep retention on RAM section S6 when RAM section is switched off + 22 + 22 + + + Off + Off + 1 + + + + + S7RETENTION + Keep retention on RAM section S7 when RAM section is switched off + 23 + 23 + + + Off + Off + 1 + + + + + S8RETENTION + Keep retention on RAM section S8 when RAM section is switched off + 24 + 24 + + + Off + Off + 1 + + + + + S9RETENTION + Keep retention on RAM section S9 when RAM section is switched off + 25 + 25 + + + Off + Off + 1 + + + + + S10RETENTION + Keep retention on RAM section S10 when RAM section is switched off + 26 + 26 + + + Off + Off + 1 + + + + + S11RETENTION + Keep retention on RAM section S11 when RAM section is switched off + 27 + 27 + + + Off + Off + 1 + + + + + S12RETENTION + Keep retention on RAM section S12 when RAM section is switched off + 28 + 28 + + + Off + Off + 1 + + + + + S13RETENTION + Keep retention on RAM section S13 when RAM section is switched off + 29 + 29 + + + Off + Off + 1 + + + + + S14RETENTION + Keep retention on RAM section S14 when RAM section is switched off + 30 + 30 + + + Off + Off + 1 + + + + + S15RETENTION + Keep retention on RAM section S15 when RAM section is switched off + 31 + 31 + + + Off + Off + 1 + + + + + + + + + + P0 + GPIO Port 1 + 0x50000000 + GPIO + + 0 + 0x1000 + registers + + GPIO + 0x20 + + + OUT + Write GPIO port + 0x504 + read-write + + + PIN0 + Pin 0 + 0 + 0 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + + + OUTSET + Set individual bits in GPIO port + 0x508 + read-write + oneToSet + + + PIN0 + Pin 0 + 0 + 0 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + + + OUTCLR + Clear individual bits in GPIO port + 0x50C + read-write + oneToClear + + + PIN0 + Pin 0 + 0 + 0 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + + + IN + Read GPIO port + 0x510 + read-only + + + PIN0 + Pin 0 + 0 + 0 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + + + DIR + Direction of GPIO pins + 0x514 + read-write + + + PIN0 + Pin 0 + 0 + 0 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + + + DIRSET + DIR set register + 0x518 + read-write + oneToSet + + + PIN0 + Set as output pin 0 + 0 + 0 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN1 + Set as output pin 1 + 1 + 1 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN2 + Set as output pin 2 + 2 + 2 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN3 + Set as output pin 3 + 3 + 3 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN4 + Set as output pin 4 + 4 + 4 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN5 + Set as output pin 5 + 5 + 5 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN6 + Set as output pin 6 + 6 + 6 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN7 + Set as output pin 7 + 7 + 7 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN8 + Set as output pin 8 + 8 + 8 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN9 + Set as output pin 9 + 9 + 9 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN10 + Set as output pin 10 + 10 + 10 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN11 + Set as output pin 11 + 11 + 11 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN12 + Set as output pin 12 + 12 + 12 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN13 + Set as output pin 13 + 13 + 13 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN14 + Set as output pin 14 + 14 + 14 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN15 + Set as output pin 15 + 15 + 15 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN16 + Set as output pin 16 + 16 + 16 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN17 + Set as output pin 17 + 17 + 17 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN18 + Set as output pin 18 + 18 + 18 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN19 + Set as output pin 19 + 19 + 19 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN20 + Set as output pin 20 + 20 + 20 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN21 + Set as output pin 21 + 21 + 21 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN22 + Set as output pin 22 + 22 + 22 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN23 + Set as output pin 23 + 23 + 23 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN24 + Set as output pin 24 + 24 + 24 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN25 + Set as output pin 25 + 25 + 25 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN26 + Set as output pin 26 + 26 + 26 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN27 + Set as output pin 27 + 27 + 27 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN28 + Set as output pin 28 + 28 + 28 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN29 + Set as output pin 29 + 29 + 29 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN30 + Set as output pin 30 + 30 + 30 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN31 + Set as output pin 31 + 31 + 31 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + + + DIRCLR + DIR clear register + 0x51C + read-write + oneToClear + + + PIN0 + Set as input pin 0 + 0 + 0 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN1 + Set as input pin 1 + 1 + 1 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN2 + Set as input pin 2 + 2 + 2 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN3 + Set as input pin 3 + 3 + 3 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN4 + Set as input pin 4 + 4 + 4 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN5 + Set as input pin 5 + 5 + 5 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN6 + Set as input pin 6 + 6 + 6 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN7 + Set as input pin 7 + 7 + 7 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN8 + Set as input pin 8 + 8 + 8 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN9 + Set as input pin 9 + 9 + 9 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN10 + Set as input pin 10 + 10 + 10 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN11 + Set as input pin 11 + 11 + 11 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN12 + Set as input pin 12 + 12 + 12 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN13 + Set as input pin 13 + 13 + 13 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN14 + Set as input pin 14 + 14 + 14 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN15 + Set as input pin 15 + 15 + 15 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN16 + Set as input pin 16 + 16 + 16 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN17 + Set as input pin 17 + 17 + 17 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN18 + Set as input pin 18 + 18 + 18 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN19 + Set as input pin 19 + 19 + 19 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN20 + Set as input pin 20 + 20 + 20 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN21 + Set as input pin 21 + 21 + 21 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN22 + Set as input pin 22 + 22 + 22 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN23 + Set as input pin 23 + 23 + 23 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN24 + Set as input pin 24 + 24 + 24 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN25 + Set as input pin 25 + 25 + 25 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN26 + Set as input pin 26 + 26 + 26 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN27 + Set as input pin 27 + 27 + 27 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN28 + Set as input pin 28 + 28 + 28 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN29 + Set as input pin 29 + 29 + 29 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN30 + Set as input pin 30 + 30 + 30 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN31 + Set as input pin 31 + 31 + 31 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + + + LATCH + Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers + 0x520 + read-write + + + PIN0 + Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear. + 0 + 0 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN1 + Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear. + 1 + 1 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN2 + Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear. + 2 + 2 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN3 + Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear. + 3 + 3 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN4 + Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear. + 4 + 4 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN5 + Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear. + 5 + 5 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN6 + Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear. + 6 + 6 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN7 + Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear. + 7 + 7 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN8 + Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear. + 8 + 8 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN9 + Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear. + 9 + 9 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN10 + Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear. + 10 + 10 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN11 + Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear. + 11 + 11 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN12 + Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear. + 12 + 12 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN13 + Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear. + 13 + 13 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN14 + Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear. + 14 + 14 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN15 + Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear. + 15 + 15 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN16 + Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear. + 16 + 16 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN17 + Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear. + 17 + 17 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN18 + Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear. + 18 + 18 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN19 + Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear. + 19 + 19 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN20 + Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear. + 20 + 20 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN21 + Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear. + 21 + 21 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN22 + Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear. + 22 + 22 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN23 + Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear. + 23 + 23 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN24 + Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear. + 24 + 24 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN25 + Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear. + 25 + 25 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN26 + Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear. + 26 + 26 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN27 + Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear. + 27 + 27 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN28 + Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear. + 28 + 28 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN29 + Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear. + 29 + 29 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN30 + Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear. + 30 + 30 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN31 + Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear. + 31 + 31 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + + + DETECTMODE + Select between default DETECT signal behavior and LDETECT mode + 0x524 + read-write + + + DETECTMODE + Select between default DETECT signal behavior and LDETECT mode + 0 + 0 + + + Default + DETECT directly connected to PIN DETECT signals + 0 + + + LDETECT + Use the latched LDETECT behavior + 1 + + + + + + + 0x20 + 0x4 + PIN_CNF[%s] + Description collection: Configuration of GPIO pins + 0x700 + read-write + 0x00000002 + + + DIR + Pin direction. Same physical register as DIR register + 0 + 0 + + + Input + Configure pin as an input pin + 0 + + + Output + Configure pin as an output pin + 1 + + + + + INPUT + Connect or disconnect input buffer + 1 + 1 + + + Connect + Connect input buffer + 0 + + + Disconnect + Disconnect input buffer + 1 + + + + + PULL + Pull configuration + 2 + 3 + + + Disabled + No pull + 0 + + + Pulldown + Pull down on pin + 1 + + + Pullup + Pull up on pin + 3 + + + + + DRIVE + Drive configuration + 8 + 10 + + + S0S1 + Standard '0', standard '1' + 0 + + + H0S1 + High drive '0', standard '1' + 1 + + + S0H1 + Standard '0', high drive '1' + 2 + + + H0H1 + High drive '0', high 'drive '1'' + 3 + + + D0S1 + Disconnect '0' standard '1' (normally used for wired-or connections) + 4 + + + D0H1 + Disconnect '0', high drive '1' (normally used for wired-or connections) + 5 + + + S0D1 + Standard '0'. disconnect '1' (normally used for wired-and connections) + 6 + + + H0D1 + High drive '0', disconnect '1' (normally used for wired-and connections) + 7 + + + + + SENSE + Pin sensing mechanism + 16 + 17 + + + Disabled + Disabled + 0 + + + High + Sense for high level + 2 + + + Low + Sense for low level + 3 + + + + + + + + + P1 + GPIO Port 2 + 0x50000300 + P0 + + + RADIO + 2.4 GHz radio + 0x40001000 + + 0 + 0x1000 + registers + + + RADIO + 1 + + RADIO + 0x20 + + + TASKS_TXEN + Enable RADIO in TX mode + 0x000 + write-only + + + TASKS_TXEN + Enable RADIO in TX mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RXEN + Enable RADIO in RX mode + 0x004 + write-only + + + TASKS_RXEN + Enable RADIO in RX mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_START + Start RADIO + 0x008 + write-only + + + TASKS_START + Start RADIO + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop RADIO + 0x00C + write-only + + + TASKS_STOP + Stop RADIO + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DISABLE + Disable RADIO + 0x010 + write-only + + + TASKS_DISABLE + Disable RADIO + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RSSISTART + Start the RSSI and take one single sample of the receive signal strength + 0x014 + write-only + + + TASKS_RSSISTART + Start the RSSI and take one single sample of the receive signal strength + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RSSISTOP + Stop the RSSI measurement + 0x018 + write-only + + + TASKS_RSSISTOP + Stop the RSSI measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_BCSTART + Start the bit counter + 0x01C + write-only + + + TASKS_BCSTART + Start the bit counter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_BCSTOP + Stop the bit counter + 0x020 + write-only + + + TASKS_BCSTOP + Stop the bit counter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EDSTART + Start the energy detect measurement used in IEEE 802.15.4 mode + 0x024 + write-only + + + TASKS_EDSTART + Start the energy detect measurement used in IEEE 802.15.4 mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EDSTOP + Stop the energy detect measurement + 0x028 + write-only + + + TASKS_EDSTOP + Stop the energy detect measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CCASTART + Start the clear channel assessment used in IEEE 802.15.4 mode + 0x02C + write-only + + + TASKS_CCASTART + Start the clear channel assessment used in IEEE 802.15.4 mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CCASTOP + Stop the clear channel assessment + 0x030 + write-only + + + TASKS_CCASTOP + Stop the clear channel assessment + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + RADIO has ramped up and is ready to be started + 0x100 + read-write + + + EVENTS_READY + RADIO has ramped up and is ready to be started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ADDRESS + Address sent or received + 0x104 + read-write + + + EVENTS_ADDRESS + Address sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PAYLOAD + Packet payload sent or received + 0x108 + read-write + + + EVENTS_PAYLOAD + Packet payload sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + Packet sent or received + 0x10C + read-write + + + EVENTS_END + Packet sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DISABLED + RADIO has been disabled + 0x110 + read-write + + + EVENTS_DISABLED + RADIO has been disabled + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DEVMATCH + A device address match occurred on the last received packet + 0x114 + read-write + + + EVENTS_DEVMATCH + A device address match occurred on the last received packet + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DEVMISS + No device address match occurred on the last received packet + 0x118 + read-write + + + EVENTS_DEVMISS + No device address match occurred on the last received packet + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RSSIEND + Sampling of receive signal strength complete + 0x11C + read-write + + + EVENTS_RSSIEND + Sampling of receive signal strength complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_BCMATCH + Bit counter reached bit count value + 0x128 + read-write + + + EVENTS_BCMATCH + Bit counter reached bit count value + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CRCOK + Packet received with CRC ok + 0x130 + read-write + + + EVENTS_CRCOK + Packet received with CRC ok + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CRCERROR + Packet received with CRC error + 0x134 + read-write + + + EVENTS_CRCERROR + Packet received with CRC error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_FRAMESTART + IEEE 802.15.4 length field received + 0x138 + read-write + + + EVENTS_FRAMESTART + IEEE 802.15.4 length field received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EDEND + Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register. + 0x13C + read-write + + + EVENTS_EDEND + Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EDSTOPPED + The sampling of energy detection has stopped + 0x140 + read-write + + + EVENTS_EDSTOPPED + The sampling of energy detection has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CCAIDLE + Wireless medium in idle - clear to send + 0x144 + read-write + + + EVENTS_CCAIDLE + Wireless medium in idle - clear to send + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CCABUSY + Wireless medium busy - do not send + 0x148 + read-write + + + EVENTS_CCABUSY + Wireless medium busy - do not send + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CCASTOPPED + The CCA has stopped + 0x14C + read-write + + + EVENTS_CCASTOPPED + The CCA has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RATEBOOST + Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit. + 0x150 + read-write + + + EVENTS_RATEBOOST + Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXREADY + RADIO has ramped up and is ready to be started TX path + 0x154 + read-write + + + EVENTS_TXREADY + RADIO has ramped up and is ready to be started TX path + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXREADY + RADIO has ramped up and is ready to be started RX path + 0x158 + read-write + + + EVENTS_RXREADY + RADIO has ramped up and is ready to be started RX path + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_MHRMATCH + MAC header match found + 0x15C + read-write + + + EVENTS_MHRMATCH + MAC header match found + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SYNC + Preamble indicator + 0x168 + read-write + + + EVENTS_SYNC + Preamble indicator + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PHYEND + Generated when last bit is sent on air, or received from air + 0x16C + read-write + + + EVENTS_PHYEND + Generated when last bit is sent on air, or received from air + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CTEPRESENT + CTE is present (early warning right after receiving CTEInfo byte) + 0x170 + read-write + + + EVENTS_CTEPRESENT + CTE is present (early warning right after receiving CTEInfo byte) + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + READY_START + Shortcut between event READY and task START + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + END_DISABLE + Shortcut between event END and task DISABLE + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DISABLED_TXEN + Shortcut between event DISABLED and task TXEN + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DISABLED_RXEN + Shortcut between event DISABLED and task RXEN + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ADDRESS_RSSISTART + Shortcut between event ADDRESS and task RSSISTART + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + END_START + Shortcut between event END and task START + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ADDRESS_BCSTART + Shortcut between event ADDRESS and task BCSTART + 6 + 6 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DISABLED_RSSISTOP + Shortcut between event DISABLED and task RSSISTOP + 8 + 8 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + RXREADY_CCASTART + Shortcut between event RXREADY and task CCASTART + 11 + 11 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CCAIDLE_TXEN + Shortcut between event CCAIDLE and task TXEN + 12 + 12 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CCABUSY_DISABLE + Shortcut between event CCABUSY and task DISABLE + 13 + 13 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + FRAMESTART_BCSTART + Shortcut between event FRAMESTART and task BCSTART + 14 + 14 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READY_EDSTART + Shortcut between event READY and task EDSTART + 15 + 15 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + EDEND_DISABLE + Shortcut between event EDEND and task DISABLE + 16 + 16 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CCAIDLE_STOP + Shortcut between event CCAIDLE and task STOP + 17 + 17 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + TXREADY_START + Shortcut between event TXREADY and task START + 18 + 18 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + RXREADY_START + Shortcut between event RXREADY and task START + 19 + 19 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + PHYEND_DISABLE + Shortcut between event PHYEND and task DISABLE + 20 + 20 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + PHYEND_START + Shortcut between event PHYEND and task START + 21 + 21 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ADDRESS + Write '1' to enable interrupt for event ADDRESS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PAYLOAD + Write '1' to enable interrupt for event PAYLOAD + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DISABLED + Write '1' to enable interrupt for event DISABLED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DEVMATCH + Write '1' to enable interrupt for event DEVMATCH + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DEVMISS + Write '1' to enable interrupt for event DEVMISS + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RSSIEND + Write '1' to enable interrupt for event RSSIEND + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + BCMATCH + Write '1' to enable interrupt for event BCMATCH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CRCOK + Write '1' to enable interrupt for event CRCOK + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CRCERROR + Write '1' to enable interrupt for event CRCERROR + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + FRAMESTART + Write '1' to enable interrupt for event FRAMESTART + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EDEND + Write '1' to enable interrupt for event EDEND + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EDSTOPPED + Write '1' to enable interrupt for event EDSTOPPED + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CCAIDLE + Write '1' to enable interrupt for event CCAIDLE + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CCABUSY + Write '1' to enable interrupt for event CCABUSY + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CCASTOPPED + Write '1' to enable interrupt for event CCASTOPPED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RATEBOOST + Write '1' to enable interrupt for event RATEBOOST + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXREADY + Write '1' to enable interrupt for event TXREADY + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXREADY + Write '1' to enable interrupt for event RXREADY + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + MHRMATCH + Write '1' to enable interrupt for event MHRMATCH + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SYNC + Write '1' to enable interrupt for event SYNC + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PHYEND + Write '1' to enable interrupt for event PHYEND + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CTEPRESENT + Write '1' to enable interrupt for event CTEPRESENT + 28 + 28 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ADDRESS + Write '1' to disable interrupt for event ADDRESS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PAYLOAD + Write '1' to disable interrupt for event PAYLOAD + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DISABLED + Write '1' to disable interrupt for event DISABLED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DEVMATCH + Write '1' to disable interrupt for event DEVMATCH + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DEVMISS + Write '1' to disable interrupt for event DEVMISS + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RSSIEND + Write '1' to disable interrupt for event RSSIEND + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + BCMATCH + Write '1' to disable interrupt for event BCMATCH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CRCOK + Write '1' to disable interrupt for event CRCOK + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CRCERROR + Write '1' to disable interrupt for event CRCERROR + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + FRAMESTART + Write '1' to disable interrupt for event FRAMESTART + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EDEND + Write '1' to disable interrupt for event EDEND + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EDSTOPPED + Write '1' to disable interrupt for event EDSTOPPED + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CCAIDLE + Write '1' to disable interrupt for event CCAIDLE + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CCABUSY + Write '1' to disable interrupt for event CCABUSY + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CCASTOPPED + Write '1' to disable interrupt for event CCASTOPPED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RATEBOOST + Write '1' to disable interrupt for event RATEBOOST + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXREADY + Write '1' to disable interrupt for event TXREADY + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXREADY + Write '1' to disable interrupt for event RXREADY + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + MHRMATCH + Write '1' to disable interrupt for event MHRMATCH + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SYNC + Write '1' to disable interrupt for event SYNC + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PHYEND + Write '1' to disable interrupt for event PHYEND + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CTEPRESENT + Write '1' to disable interrupt for event CTEPRESENT + 28 + 28 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + CRCSTATUS + CRC status + 0x400 + read-only + + + CRCSTATUS + CRC status of packet received + 0 + 0 + + + CRCError + Packet received with CRC error + 0 + + + CRCOk + Packet received with CRC ok + 1 + + + + + + + RXMATCH + Received address + 0x408 + read-only + + + RXMATCH + Received address + 0 + 2 + + + + + RXCRC + CRC field of previously received packet + 0x40C + read-only + + + RXCRC + CRC field of previously received packet + 0 + 23 + + + + + DAI + Device address match index + 0x410 + read-only + + + DAI + Device address match index + 0 + 2 + + + + + PDUSTAT + Payload status + 0x414 + read-only + + + PDUSTAT + Status on payload length vs. PCNF1.MAXLEN + 0 + 0 + + + LessThan + Payload less than PCNF1.MAXLEN + 0 + + + GreaterThan + Payload greater than PCNF1.MAXLEN + 1 + + + + + CISTAT + Status on what rate packet is received with in Long Range + 1 + 2 + + + LR125kbit + Frame is received at 125 kbps + 0 + + + LR500kbit + Frame is received at 500 kbps + 1 + + + + + + + CTESTATUS + CTEInfo parsed from received packet + 0x44C + read-only + + + CTETIME + CTETime parsed from packet + 0 + 4 + + + RFU + RFU parsed from packet + 5 + 5 + + + CTETYPE + CTEType parsed from packet + 6 + 7 + + + + + DFESTATUS + DFE status information + 0x458 + read-only + + + SWITCHINGSTATE + Internal state of switching state machine + 0 + 2 + + + Idle + Switching state Idle + 0 + + + Offset + Switching state Offset + 1 + + + Guard + Switching state Guard + 2 + + + Ref + Switching state Ref + 3 + + + Switching + Switching state Switching + 4 + + + Ending + Switching state Ending + 5 + + + + + SAMPLINGSTATE + Internal state of sampling state machine + 4 + 4 + + + Idle + Sampling state Idle + 0 + + + Sampling + Sampling state Sampling + 1 + + + + + + + PACKETPTR + Packet pointer + 0x504 + read-write + 0x00000000 + + + PACKETPTR + Packet pointer + 0 + 31 + + + + + FREQUENCY + Frequency + 0x508 + read-write + 0x00000002 + + + FREQUENCY + Radio channel frequency + 0 + 6 + + + MAP + Channel map selection + 8 + 8 + + + Default + Channel map between 2400 MHZ .. 2500 MHz + 0 + + + Low + Channel map between 2360 MHZ .. 2460 MHz + 1 + + + + + + + TXPOWER + Output power + 0x50C + read-write + + + TXPOWER + RADIO output power + 0 + 7 + + + Pos8dBm + +8 dBm + 0x8 + + + Pos7dBm + +7 dBm + 0x7 + + + Pos6dBm + +6 dBm + 0x6 + + + Pos5dBm + +5 dBm + 0x5 + + + Pos4dBm + +4 dBm + 0x4 + + + Pos3dBm + +3 dBm + 0x3 + + + Pos2dBm + +2 dBm + 0x2 + + + 0dBm + 0 dBm + 0x0 + + + Neg4dBm + -4 dBm + 0xFC + + + Neg8dBm + -8 dBm + 0xF8 + + + Neg12dBm + -12 dBm + 0xF4 + + + Neg16dBm + -16 dBm + 0xF0 + + + Neg20dBm + -20 dBm + 0xEC + + + Neg30dBm + Deprecated enumerator - -40 dBm + 0xE2 + + + Neg40dBm + -40 dBm + 0xD8 + + + + + + + MODE + Data rate and modulation + 0x510 + read-write + + + MODE + Radio data rate and modulation setting. The radio supports frequency-shift keying (FSK) modulation. + 0 + 3 + + + Nrf_1Mbit + 1 Mbps Nordic proprietary radio mode + 0 + + + Nrf_2Mbit + 2 Mbps Nordic proprietary radio mode + 1 + + + Ble_1Mbit + 1 Mbps BLE + 3 + + + Ble_2Mbit + 2 Mbps BLE + 4 + + + Ble_LR125Kbit + Long range 125 kbps TX, 125 kbps and 500 kbps RX + 5 + + + Ble_LR500Kbit + Long range 500 kbps TX, 125 kbps and 500 kbps RX + 6 + + + Ieee802154_250Kbit + IEEE 802.15.4-2006 250 kbps + 15 + + + + + + + PCNF0 + Packet configuration register 0 + 0x514 + read-write + + + LFLEN + Length on air of LENGTH field in number of bits + 0 + 3 + + + S0LEN + Length on air of S0 field in number of bytes + 8 + 8 + + + S1LEN + Length on air of S1 field in number of bits + 16 + 19 + + + S1INCL + Include or exclude S1 field in RAM + 20 + 20 + + + Automatic + Include S1 field in RAM only if S1LEN &gt; 0 + 0 + + + Include + Always include S1 field in RAM independent of S1LEN + 1 + + + + + CILEN + Length of code indicator - long range + 22 + 23 + + + PLEN + Length of preamble on air. Decision point: TASKS_START task + 24 + 25 + + + 8bit + 8-bit preamble + 0 + + + 16bit + 16-bit preamble + 1 + + + 32bitZero + 32-bit zero preamble - used for IEEE 802.15.4 + 2 + + + LongRange + Preamble - used for BLE long range + 3 + + + + + CRCINC + Indicates if LENGTH field contains CRC or not + 26 + 26 + + + Exclude + LENGTH does not contain CRC + 0 + + + Include + LENGTH includes CRC + 1 + + + + + TERMLEN + Length of TERM field in Long Range operation + 29 + 30 + + + + + PCNF1 + Packet configuration register 1 + 0x518 + read-write + + + MAXLEN + Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN. + 0 + 7 + + + STATLEN + Static length in number of bytes + 8 + 15 + + + BALEN + Base address length in number of bytes + 16 + 18 + + + ENDIAN + On-air endianness of packet, this applies to the S0, LENGTH, S1, and the PAYLOAD fields. + 24 + 24 + + + Little + Least significant bit on air first + 0 + + + Big + Most significant bit on air first + 1 + + + + + WHITEEN + Enable or disable packet whitening + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + BASE0 + Base address 0 + 0x51C + read-write + + + BASE0 + Base address 0 + 0 + 31 + + + + + BASE1 + Base address 1 + 0x520 + read-write + + + BASE1 + Base address 1 + 0 + 31 + + + + + PREFIX0 + Prefixes bytes for logical addresses 0-3 + 0x524 + read-write + + + AP0 + Address prefix 0. + 0 + 7 + + + AP1 + Address prefix 1. + 8 + 15 + + + AP2 + Address prefix 2. + 16 + 23 + + + AP3 + Address prefix 3. + 24 + 31 + + + + + PREFIX1 + Prefixes bytes for logical addresses 4-7 + 0x528 + read-write + + + AP4 + Address prefix 4. + 0 + 7 + + + AP5 + Address prefix 5. + 8 + 15 + + + AP6 + Address prefix 6. + 16 + 23 + + + AP7 + Address prefix 7. + 24 + 31 + + + + + TXADDRESS + Transmit address select + 0x52C + read-write + + + TXADDRESS + Transmit address select + 0 + 2 + + + + + RXADDRESSES + Receive address select + 0x530 + read-write + + + ADDR0 + Enable or disable reception on logical address 0. + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR1 + Enable or disable reception on logical address 1. + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR2 + Enable or disable reception on logical address 2. + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR3 + Enable or disable reception on logical address 3. + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR4 + Enable or disable reception on logical address 4. + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR5 + Enable or disable reception on logical address 5. + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR6 + Enable or disable reception on logical address 6. + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR7 + Enable or disable reception on logical address 7. + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + CRCCNF + CRC configuration + 0x534 + read-write + + + LEN + CRC length in number of bytes For MODE Ble_LR125Kbit and Ble_LR500Kbit, only LEN set to 3 is supported + 0 + 1 + + + Disabled + CRC length is zero and CRC calculation is disabled + 0 + + + One + CRC length is one byte and CRC calculation is enabled + 1 + + + Two + CRC length is two bytes and CRC calculation is enabled + 2 + + + Three + CRC length is three bytes and CRC calculation is enabled + 3 + + + + + SKIPADDR + Include or exclude packet address field out of CRC calculation. + 8 + 9 + + + Include + CRC calculation includes address field + 0 + + + Skip + CRC calculation does not include address field. The CRC calculation will start at the first byte after the address. + 1 + + + Ieee802154 + CRC calculation as per 802.15.4 standard. Starting at first byte after length field. + 2 + + + + + + + CRCPOLY + CRC polynomial + 0x538 + read-write + 0x00000000 + + + CRCPOLY + CRC polynomial + 0 + 23 + + + + + CRCINIT + CRC initial value + 0x53C + read-write + + + CRCINIT + CRC initial value + 0 + 23 + + + + + TIFS + Interframe spacing in us + 0x544 + read-write + + + TIFS + Interframe spacing in us. + 0 + 9 + + + + + RSSISAMPLE + RSSI sample + 0x548 + read-only + + + RSSISAMPLE + RSSI sample. + 0 + 6 + + + + + STATE + Current radio state + 0x550 + read-only + + + STATE + Current radio state + 0 + 3 + + + Disabled + RADIO is in the Disabled state + 0 + + + RxRu + RADIO is in the RXRU state + 1 + + + RxIdle + RADIO is in the RXIDLE state + 2 + + + Rx + RADIO is in the RX state + 3 + + + RxDisable + RADIO is in the RXDISABLED state + 4 + + + TxRu + RADIO is in the TXRU state + 9 + + + TxIdle + RADIO is in the TXIDLE state + 10 + + + Tx + RADIO is in the TX state + 11 + + + TxDisable + RADIO is in the TXDISABLED state + 12 + + + + + + + DATAWHITEIV + Data whitening initial value + 0x554 + read-write + 0x00000040 + + + DATAWHITEIV + Data whitening initial value. Bit 6 is hardwired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'. + 0 + 6 + + + + + BCC + Bit counter compare + 0x560 + read-write + + + BCC + Bit counter compare + 0 + 31 + + + + + 0x8 + 0x4 + DAB[%s] + Description collection: Device address base segment n + 0x600 + read-write + + + DAB + Device address base segment n + 0 + 31 + + + + + 0x8 + 0x4 + DAP[%s] + Description collection: Device address prefix n + 0x620 + read-write + + + DAP + Device address prefix n + 0 + 15 + + + + + DACNF + Device address match configuration + 0x640 + read-write + + + ENA0 + Enable or disable device address matching using device address 0 + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA1 + Enable or disable device address matching using device address 1 + 1 + 1 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA2 + Enable or disable device address matching using device address 2 + 2 + 2 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA3 + Enable or disable device address matching using device address 3 + 3 + 3 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA4 + Enable or disable device address matching using device address 4 + 4 + 4 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA5 + Enable or disable device address matching using device address 5 + 5 + 5 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA6 + Enable or disable device address matching using device address 6 + 6 + 6 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA7 + Enable or disable device address matching using device address 7 + 7 + 7 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + TXADD0 + TxAdd for device address 0 + 8 + 8 + + + TXADD1 + TxAdd for device address 1 + 9 + 9 + + + TXADD2 + TxAdd for device address 2 + 10 + 10 + + + TXADD3 + TxAdd for device address 3 + 11 + 11 + + + TXADD4 + TxAdd for device address 4 + 12 + 12 + + + TXADD5 + TxAdd for device address 5 + 13 + 13 + + + TXADD6 + TxAdd for device address 6 + 14 + 14 + + + TXADD7 + TxAdd for device address 7 + 15 + 15 + + + + + MHRMATCHCONF + Search pattern configuration + 0x644 + read-write + + + MHRMATCHCONF + Search pattern configuration + 0 + 31 + + + + + MHRMATCHMAS + Pattern mask + 0x648 + read-write + + + MHRMATCHMAS + Pattern mask + 0 + 31 + + + + + MODECNF0 + Radio mode configuration register 0 + 0x650 + read-write + 0x00000200 + + + RU + Radio ramp-up time + 0 + 0 + + + Default + Default ramp-up time (tRXEN and tTXEN), compatible with firmware written for nRF51 + 0 + + + Fast + Fast ramp-up (tRXEN,FAST and tTXEN,FAST), see electrical specifications for more information + 1 + + + + + DTX + Default TX value + 8 + 9 + + + B1 + Transmit '1' + 0 + + + B0 + Transmit '0' + 1 + + + Center + Transmit center frequency + 2 + + + + + + + SFD + IEEE 802.15.4 start of frame delimiter + 0x660 + read-write + 0x000000A7 + + + SFD + IEEE 802.15.4 start of frame delimiter + 0 + 7 + + + + + EDCNT + IEEE 802.15.4 energy detect loop count + 0x664 + read-write + 0x00000000 + + + EDCNT + IEEE 802.15.4 energy detect loop count + 0 + 20 + + + + + EDSAMPLE + IEEE 802.15.4 energy detect level + 0x668 + read-only + 0x00000000 + + + EDLVL + IEEE 802.15.4 energy detect level + 0 + 7 + + + + + CCACTRL + IEEE 802.15.4 clear channel assessment control + 0x66C + read-write + 0x052D0000 + + + CCAMODE + CCA mode of operation + 0 + 2 + + + EdMode + Energy above threshold + 0 + + + CarrierMode + Carrier seen + 1 + + + CarrierAndEdMode + Energy above threshold AND carrier seen + 2 + + + CarrierOrEdMode + Energy above threshold OR carrier seen + 3 + + + EdModeTest1 + Energy above threshold test mode that will abort when first ED measurement over threshold is seen. No averaging. + 4 + + + + + CCAEDTHRES + CCA energy busy threshold. Used in all the CCA modes except CarrierMode. + 8 + 15 + + + CCACORRTHRES + CCA correlator busy threshold. Only relevant to CarrierMode, CarrierAndEdMode, and CarrierOrEdMode. + 16 + 23 + + + CCACORRCNT + Limit for occurances above CCACORRTHRES. When not equal to zero the corrolator based signal detect is enabled. + 24 + 31 + + + + + DFEMODE + Whether to use Angle-of-Arrival (AOA) or Angle-of-Departure (AOD) + 0x900 + read-write + 0x00000000 + + + DFEOPMODE + Direction finding operation mode + 0 + 1 + + + Disabled + Direction finding mode disabled + 0 + + + AoD + Direction finding mode set to AoD + 2 + + + AoA + Direction finding mode set to AoA + 3 + + + + + + + CTEINLINECONF + Configuration for CTE inline mode + 0x904 + read-write + 0x00002800 + + + CTEINLINECTRLEN + Enable parsing of CTEInfo from received packet in BLE modes + 0 + 0 + + + Enabled + Parsing of CTEInfo is enabled + 1 + + + Disabled + Parsing of CTEInfo is disabled + 0 + + + + + CTEINFOINS1 + CTEInfo is S1 byte or not + 3 + 3 + + + InS1 + CTEInfo is in S1 byte (data PDU) + 1 + + + NotInS1 + CTEInfo is NOT in S1 byte (advertising PDU) + 0 + + + + + CTEERRORHANDLING + Sampling/switching if CRC is not OK + 4 + 4 + + + Yes + Sampling and antenna switching also when CRC is not OK + 1 + + + No + No sampling and antenna switching when CRC is not OK + 0 + + + + + CTETIMEVALIDRANGE + Max range of CTETime + 6 + 7 + + + 20 + 20 in 8 us unit (default) Set to 20 if parsed CTETime is larger than 20 + 0 + + + 31 + 31 in 8 us unit + 1 + + + 63 + 63 in 8 us unit + 2 + + + + + CTEINLINERXMODE1US + Spacing between samples for the samples in the SWITCHING period when CTEINLINEMODE is set. + 10 + 12 + + + 4us + 4 us + 1 + + + 2us + 2 us + 2 + + + 1us + 1 us + 3 + + + 500ns + 0.5 us + 4 + + + 250ns + 0.25 us + 5 + + + 125ns + 0.125 us + 6 + + + + + CTEINLINERXMODE2US + Spacing between samples for the samples in the SWITCHING period when CTEINLINEMODE is set. + 13 + 15 + + + 4us + 4 us + 1 + + + 2us + 2 us + 2 + + + 1us + 1 us + 3 + + + 500ns + 0.5 us + 4 + + + 250ns + 0.25 us + 5 + + + 125ns + 0.125 us + 6 + + + + + S0CONF + S0 bit pattern to match + 16 + 23 + + + S0MASK + S0 bit mask to set which bit to match + 24 + 31 + + + + + DFECTRL1 + Various configuration for Direction finding + 0x910 + read-write + 0x00023282 + + + NUMBEROF8US + Length of the AoA/AoD procedure in number of 8 us units + 0 + 5 + + + DFEINEXTENSION + Add CTE extension and do antenna switching/sampling in this extension + 7 + 7 + + + CRC + AoA/AoD procedure triggered at end of CRC + 1 + + + Payload + Antenna switching/sampling is done in the packet payload + 0 + + + + + TSWITCHSPACING + Interval between every time the antenna is changed in the SWITCHING state + 8 + 10 + + + 4us + 4 us + 1 + + + 2us + 2 us + 2 + + + 1us + 1 us + 3 + + + + + TSAMPLESPACINGREF + Interval between samples in the REFERENCE period + 12 + 14 + + + 4us + 4 us + 1 + + + 2us + 2 us + 2 + + + 1us + 1 us + 3 + + + 500ns + 0.5 us + 4 + + + 250ns + 0.25 us + 5 + + + 125ns + 0.125 us + 6 + + + + + SAMPLETYPE + Whether to sample I/Q or magnitude/phase + 15 + 15 + + + IQ + Complex samples in I and Q + 0 + + + MagPhase + Complex samples as magnitude and phase + 1 + + + + + TSAMPLESPACING + Interval between samples in the SWITCHING period when CTEINLINECTRLEN is 0 + 16 + 18 + + + 4us + 4 us + 1 + + + 2us + 2 us + 2 + + + 1us + 1 us + 3 + + + 500ns + 0.5 us + 4 + + + 250ns + 0.25 us + 5 + + + 125ns + 0.125 us + 6 + + + + + REPEATPATTERN + Repeat each individual antenna pattern N times sequentially, i.e. P0, P0, P1, P1, P2, P2, P3, P3, etc. + 20 + 23 + + + NoRepeat + Do not repeat (1 time in total) + 0 + + + + + AGCBACKOFFGAIN + Gain will be lowered by the specified number of gain steps at the start of CTE + 24 + 27 + + + + + DFECTRL2 + Start offset for Direction finding + 0x914 + read-write + 0x00000000 + + + TSWITCHOFFSET + Signed value offset after the end of the CRC before starting switching in number of 16M cycles + 0 + 12 + + + TSAMPLEOFFSET + Signed value offset before starting sampling in number of 16M cycles relative to the beginning of the REFERENCE state - 12 us after switching start + 16 + 27 + + + + + SWITCHPATTERN + GPIO patterns to be used for each antenna + 0x928 + read-write + 0x00000000 + + + SWITCHPATTERN + Fill array of GPIO patterns for antenna control. + 0 + 7 + + + + + CLEARPATTERN + Clear the GPIO pattern array for antenna control + 0x92C + read-write + + + CLEARPATTERN + Clears GPIO pattern array for antenna control + 0 + 0 + oneToClear + + + Clear + Clear the GPIO pattern + 1 + + + + + + + PSEL + Unspecified + RADIO_PSEL + read-write + 0x930 + + 0x8 + 0x4 + DFEGPIO[%s] + Description collection: Pin select for DFE pin n + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + DFEPACKET + DFE packet EasyDMA channel + RADIO_DFEPACKET + read-write + 0x950 + + PTR + Data pointer + 0x000 + read-write + 0x00000000 + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of buffer words to transfer + 0x004 + read-write + 0x00001000 + + + MAXCNT + Maximum number of buffer words to transfer + 0 + 13 + + + + + AMOUNT + Number of samples transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of samples transferred in the last transaction + 0 + 15 + + + + + + POWER + Peripheral power control + 0xFFC + read-write + 0x00000001 + + + POWER + Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again. + 0 + 0 + + + Disabled + Peripheral is powered off + 0 + + + Enabled + Peripheral is powered on + 1 + + + + + + + + + UART0 + Universal Asynchronous Receiver/Transmitter + 0x40002000 + UART + + 0 + 0x1000 + registers + + + UARTE0_UART0 + 2 + + UART + 0x20 + + + TASKS_STARTRX + Start UART receiver + 0x000 + write-only + + + TASKS_STARTRX + Start UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPRX + Stop UART receiver + 0x004 + write-only + + + TASKS_STOPRX + Stop UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start UART transmitter + 0x008 + write-only + + + TASKS_STARTTX + Start UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPTX + Stop UART transmitter + 0x00C + write-only + + + TASKS_STOPTX + Stop UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend UART + 0x01C + write-only + + + TASKS_SUSPEND + Suspend UART + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0x100 + read-write + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0x104 + read-write + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXDRDY + Data received in RXD + 0x108 + read-write + + + EVENTS_RXDRDY + Data received in RXD + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXDRDY + Data sent from TXD + 0x11C + read-write + + + EVENTS_TXDRDY + Data sent from TXD + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + Error detected + 0x124 + read-write + + + EVENTS_ERROR + Error detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXTO + Receiver timeout + 0x144 + read-write + + + EVENTS_RXTO + Receiver timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + CTS_STARTRX + Shortcut between event CTS and task STARTRX + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + NCTS_STOPRX + Shortcut between event NCTS and task STOPRX + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + CTS + Write '1' to enable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + NCTS + Write '1' to enable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXDRDY + Write '1' to enable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXDRDY + Write '1' to enable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXTO + Write '1' to enable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + CTS + Write '1' to disable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + NCTS + Write '1' to disable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXDRDY + Write '1' to disable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXDRDY + Write '1' to disable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXTO + Write '1' to disable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x480 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + PARITY + Parity error + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + FRAMING + Framing error occurred + 2 + 2 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + BREAK + Break condition + 3 + 3 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + + + ENABLE + Enable UART + 0x500 + read-write + + + ENABLE + Enable or disable UART + 0 + 3 + + + Disabled + Disable UART + 0 + + + Enabled + Enable UART + 4 + + + + + + + PSEL + Unspecified + UART_PSEL + read-write + 0x508 + + RTS + Pin select for RTS + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + TXD + Pin select for TXD + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CTS + Pin select for CTS + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + RXD + Pin select for RXD + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD register + 0x518 + read-only + modifyExternal + + + RXD + RX data received in previous transfers, double buffered + 0 + 7 + + + + + TXD + TXD register + 0x51C + write-only + + + TXD + TX data to be transferred + 0 + 7 + + + + + BAUDRATE + Baud rate. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + BAUDRATE + Baud rate + 0 + 31 + + + Baud1200 + 1200 baud (actual rate: 1205) + 0x0004F000 + + + Baud2400 + 2400 baud (actual rate: 2396) + 0x0009D000 + + + Baud4800 + 4800 baud (actual rate: 4808) + 0x0013B000 + + + Baud9600 + 9600 baud (actual rate: 9598) + 0x00275000 + + + Baud14400 + 14400 baud (actual rate: 14414) + 0x003B0000 + + + Baud19200 + 19200 baud (actual rate: 19208) + 0x004EA000 + + + Baud28800 + 28800 baud (actual rate: 28829) + 0x0075F000 + + + Baud31250 + 31250 baud + 0x00800000 + + + Baud38400 + 38400 baud (actual rate: 38462) + 0x009D5000 + + + Baud56000 + 56000 baud (actual rate: 55944) + 0x00E50000 + + + Baud57600 + 57600 baud (actual rate: 57762) + 0x00EBF000 + + + Baud76800 + 76800 baud (actual rate: 76923) + 0x013A9000 + + + Baud115200 + 115200 baud (actual rate: 115942) + 0x01D7E000 + + + Baud230400 + 230400 baud (actual rate: 231884) + 0x03AFB000 + + + Baud250000 + 250000 baud + 0x04000000 + + + Baud460800 + 460800 baud (actual rate: 470588) + 0x075F7000 + + + Baud921600 + 921600 baud (actual rate: 941176) + 0x0EBED000 + + + Baud1M + 1Mega baud + 0x10000000 + + + + + + + CONFIG + Configuration of parity and hardware flow control + 0x56C + read-write + + + HWFC + Hardware flow control + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + PARITY + Parity + 1 + 3 + + + Excluded + Exclude parity bit + 0x0 + + + Included + Include parity bit + 0x7 + + + + + STOP + Stop bits + 4 + 4 + + + One + One stop bit + 0 + + + Two + Two stop bits + 1 + + + + + PARITYTYPE + Even or odd parity type + 8 + 8 + + + Even + Even parity + 0 + + + Odd + Odd parity + 1 + + + + + + + + + UARTE0 + UART with EasyDMA 0 + 0x40002000 + UART0 + UARTE + + 0 + 0x1000 + registers + + + UARTE0_UART0 + 2 + + UARTE + 0x20 + + + TASKS_STARTRX + Start UART receiver + 0x000 + write-only + + + TASKS_STARTRX + Start UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPRX + Stop UART receiver + 0x004 + write-only + + + TASKS_STOPRX + Stop UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start UART transmitter + 0x008 + write-only + + + TASKS_STARTTX + Start UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPTX + Stop UART transmitter + 0x00C + write-only + + + TASKS_STOPTX + Stop UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_FLUSHRX + Flush RX FIFO into RX buffer + 0x02C + write-only + + + TASKS_FLUSHRX + Flush RX FIFO into RX buffer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0x100 + read-write + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0x104 + read-write + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXDRDY + Data received in RXD (but potentially not yet transferred to Data RAM) + 0x108 + read-write + + + EVENTS_RXDRDY + Data received in RXD (but potentially not yet transferred to Data RAM) + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + Receive buffer is filled up + 0x110 + read-write + + + EVENTS_ENDRX + Receive buffer is filled up + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXDRDY + Data sent from TXD + 0x11C + read-write + + + EVENTS_TXDRDY + Data sent from TXD + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDTX + Last TX byte transmitted + 0x120 + read-write + + + EVENTS_ENDTX + Last TX byte transmitted + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + Error detected + 0x124 + read-write + + + EVENTS_ERROR + Error detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXTO + Receiver timeout + 0x144 + read-write + + + EVENTS_RXTO + Receiver timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXSTARTED + UART receiver has started + 0x14C + read-write + + + EVENTS_RXSTARTED + UART receiver has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTARTED + UART transmitter has started + 0x150 + read-write + + + EVENTS_TXSTARTED + UART transmitter has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTOPPED + Transmitter stopped + 0x158 + read-write + + + EVENTS_TXSTOPPED + Transmitter stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + ENDRX_STARTRX + Shortcut between event ENDRX and task STARTRX + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ENDRX_STOPRX + Shortcut between event ENDRX and task STOPRX + 6 + 6 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + CTS + Enable or disable interrupt for event CTS + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + NCTS + Enable or disable interrupt for event NCTS + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXDRDY + Enable or disable interrupt for event RXDRDY + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDRX + Enable or disable interrupt for event ENDRX + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXDRDY + Enable or disable interrupt for event TXDRDY + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDTX + Enable or disable interrupt for event ENDTX + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXTO + Enable or disable interrupt for event RXTO + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXSTARTED + Enable or disable interrupt for event RXSTARTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTARTED + Enable or disable interrupt for event TXSTARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTOPPED + Enable or disable interrupt for event TXSTOPPED + 22 + 22 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + CTS + Write '1' to enable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + NCTS + Write '1' to enable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXDRDY + Write '1' to enable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXDRDY + Write '1' to enable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDTX + Write '1' to enable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXTO + Write '1' to enable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXSTARTED + Write '1' to enable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTARTED + Write '1' to enable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTOPPED + Write '1' to enable interrupt for event TXSTOPPED + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + CTS + Write '1' to disable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + NCTS + Write '1' to disable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXDRDY + Write '1' to disable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXDRDY + Write '1' to disable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDTX + Write '1' to disable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXTO + Write '1' to disable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXSTARTED + Write '1' to disable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTARTED + Write '1' to disable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTOPPED + Write '1' to disable interrupt for event TXSTOPPED + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source This register is read/write one to clear. + 0x480 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + PARITY + Parity error + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + FRAMING + Framing error occurred + 2 + 2 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + BREAK + Break condition + 3 + 3 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + + + ENABLE + Enable UART + 0x500 + read-write + + + ENABLE + Enable or disable UARTE + 0 + 3 + + + Disabled + Disable UARTE + 0 + + + Enabled + Enable UARTE + 8 + + + + + + + PSEL + Unspecified + UARTE_PSEL + read-write + 0x508 + + RTS + Pin select for RTS signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + TXD + Pin select for TXD signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CTS + Pin select for CTS signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + RXD + Pin select for RXD signal + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + BAUDRATE + Baud rate. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + BAUDRATE + Baud rate + 0 + 31 + + + Baud1200 + 1200 baud (actual rate: 1205) + 0x0004F000 + + + Baud2400 + 2400 baud (actual rate: 2396) + 0x0009D000 + + + Baud4800 + 4800 baud (actual rate: 4808) + 0x0013B000 + + + Baud9600 + 9600 baud (actual rate: 9598) + 0x00275000 + + + Baud14400 + 14400 baud (actual rate: 14401) + 0x003AF000 + + + Baud19200 + 19200 baud (actual rate: 19208) + 0x004EA000 + + + Baud28800 + 28800 baud (actual rate: 28777) + 0x0075C000 + + + Baud31250 + 31250 baud + 0x00800000 + + + Baud38400 + 38400 baud (actual rate: 38369) + 0x009D0000 + + + Baud56000 + 56000 baud (actual rate: 55944) + 0x00E50000 + + + Baud57600 + 57600 baud (actual rate: 57554) + 0x00EB0000 + + + Baud76800 + 76800 baud (actual rate: 76923) + 0x013A9000 + + + Baud115200 + 115200 baud (actual rate: 115108) + 0x01D60000 + + + Baud230400 + 230400 baud (actual rate: 231884) + 0x03B00000 + + + Baud250000 + 250000 baud + 0x04000000 + + + Baud460800 + 460800 baud (actual rate: 457143) + 0x07400000 + + + Baud921600 + 921600 baud (actual rate: 941176) + 0x0F000000 + + + Baud1M + 1 megabaud + 0x10000000 + + + + + + + RXD + RXD EasyDMA channel + UARTE_RXD + read-write + 0x534 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + + TXD + TXD EasyDMA channel + UARTE_TXD + read-write + 0x544 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + + CONFIG + Configuration of parity and hardware flow control + 0x56C + read-write + + + HWFC + Hardware flow control + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + PARITY + Parity + 1 + 3 + + + Excluded + Exclude parity bit + 0x0 + + + Included + Include even parity bit + 0x7 + + + + + STOP + Stop bits + 4 + 4 + + + One + One stop bit + 0 + + + Two + Two stop bits + 1 + + + + + PARITYTYPE + Even or odd parity type + 8 + 8 + + + Even + Even parity + 0 + + + Odd + Odd parity + 1 + + + + + + + + + SPI0 + Serial Peripheral Interface 0 + 0x40003000 + SPI + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + SPI + 0x20 + + + EVENTS_READY + TXD byte sent and RXD byte received + 0x108 + read-write + + + EVENTS_READY + TXD byte sent and RXD byte received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + Enable SPI + 0x500 + read-write + + + ENABLE + Enable or disable SPI + 0 + 3 + + + Disabled + Disable SPI + 0 + + + Enabled + Enable SPI + 1 + + + + + + + PSEL + Unspecified + SPI_PSEL + read-write + 0x508 + + SCK + Pin select for SCK + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MOSI + Pin select for MOSI signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MISO + Pin select for MISO signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD register + 0x518 + read-only + modifyExternal + + + RXD + RX data received. Double buffered + 0 + 7 + + + + + TXD + TXD register + 0x51C + read-write + + + TXD + TX data to send. Double buffered. + 0 + 7 + + + + + FREQUENCY + SPI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + SPI master data rate + 0 + 31 + + + K125 + 125 kbps + 0x02000000 + + + K250 + 250 kbps + 0x04000000 + + + K500 + 500 kbps + 0x08000000 + + + M1 + 1 Mbps + 0x10000000 + + + M2 + 2 Mbps + 0x20000000 + + + M4 + 4 Mbps + 0x40000000 + + + M8 + 8 Mbps + 0x80000000 + + + + + + + CONFIG + Configuration register + 0x554 + read-write + + + ORDER + Bit order + 0 + 0 + + + MsbFirst + Most significant bit shifted out first + 0 + + + LsbFirst + Least significant bit shifted out first + 1 + + + + + CPHA + Serial clock (SCK) phase + 1 + 1 + + + Leading + Sample on leading edge of clock, shift serial data on trailing edge + 0 + + + Trailing + Sample on trailing edge of clock, shift serial data on leading edge + 1 + + + + + CPOL + Serial clock (SCK) polarity + 2 + 2 + + + ActiveHigh + Active high + 0 + + + ActiveLow + Active low + 1 + + + + + + + + + SPIM0 + Serial Peripheral Interface Master with EasyDMA 0 + 0x40003000 + SPI0 + SPIM + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + SPIM + 0x20 + + + TASKS_START + Start SPI transaction + 0x010 + write-only + + + TASKS_START + Start SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop SPI transaction + 0x014 + write-only + + + TASKS_STOP + Stop SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend SPI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume SPI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + SPI transaction has stopped + 0x104 + read-write + + + EVENTS_STOPPED + SPI transaction has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + End of RXD buffer reached + 0x110 + read-write + + + EVENTS_ENDRX + End of RXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + End of RXD buffer and TXD buffer reached + 0x118 + read-write + + + EVENTS_END + End of RXD buffer and TXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDTX + End of TXD buffer reached + 0x120 + read-write + + + EVENTS_ENDTX + End of TXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STARTED + Transaction started + 0x14C + read-write + + + EVENTS_STARTED + Transaction started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + END_START + Shortcut between event END and task START + 17 + 17 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDTX + Write '1' to enable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STARTED + Write '1' to enable interrupt for event STARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDTX + Write '1' to disable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STARTED + Write '1' to disable interrupt for event STARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + STALLSTAT + Stall status for EasyDMA RAM accesses. The fields in this register are set to STALL by hardware whenever a stall occurs and can be cleared (set to NOSTALL) by the CPU. + 0x400 + read-write + 0x00000000 + + + TX + Stall status for EasyDMA RAM reads + 0 + 0 + + + NOSTALL + No stall + 0 + + + STALL + A stall has occurred + 1 + + + + + RX + Stall status for EasyDMA RAM writes + 1 + 1 + + + NOSTALL + No stall + 0 + + + STALL + A stall has occurred + 1 + + + + + + + ENABLE + Enable SPIM + 0x500 + read-write + + + ENABLE + Enable or disable SPIM + 0 + 3 + + + Disabled + Disable SPIM + 0 + + + Enabled + Enable SPIM + 7 + + + + + + + PSEL + Unspecified + SPIM_PSEL + read-write + 0x508 + + SCK + Pin select for SCK + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MOSI + Pin select for MOSI signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MISO + Pin select for MISO signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CSN + Pin select for CSN + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + FREQUENCY + SPI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + SPI master data rate + 0 + 31 + + + K125 + 125 kbps + 0x02000000 + + + K250 + 250 kbps + 0x04000000 + + + K500 + 500 kbps + 0x08000000 + + + M1 + 1 Mbps + 0x10000000 + + + M2 + 2 Mbps + 0x20000000 + + + M4 + 4 Mbps + 0x40000000 + + + M8 + 8 Mbps + 0x80000000 + + + M16 + 16 Mbps + 0x0A000000 + + + M32 + 32 Mbps + 0x14000000 + + + + + + + RXD + RXD EasyDMA channel + SPIM_RXD + read-write + 0x534 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + TXD EasyDMA channel + SPIM_TXD + read-write + 0x544 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + CONFIG + Configuration register + 0x554 + read-write + + + ORDER + Bit order + 0 + 0 + + + MsbFirst + Most significant bit shifted out first + 0 + + + LsbFirst + Least significant bit shifted out first + 1 + + + + + CPHA + Serial clock (SCK) phase + 1 + 1 + + + Leading + Sample on leading edge of clock, shift serial data on trailing edge + 0 + + + Trailing + Sample on trailing edge of clock, shift serial data on leading edge + 1 + + + + + CPOL + Serial clock (SCK) polarity + 2 + 2 + + + ActiveHigh + Active high + 0 + + + ActiveLow + Active low + 1 + + + + + + + IFTIMING + Unspecified + SPIM_IFTIMING + read-write + 0x560 + + RXDELAY + Sample delay for input serial data on MISO + 0x000 + read-write + 0x00000002 + + + RXDELAY + Sample delay for input serial data on MISO. The value specifies the number of 64 MHz clock cycles (15.625 ns) delay from the the sampling edge of SCK (leading edge for CONFIG.CPHA = 0, trailing edge for CONFIG.CPHA = 1) until the input serial data is sampled. As en example, if RXDELAY = 0 and CONFIG.CPHA = 0, the input serial data is sampled on the rising edge of SCK. + 0 + 2 + + + + + CSNDUR + Minimum duration between edge of CSN and edge of SCK and minimum duration CSN must stay high between transactions + 0x004 + read-write + 0x00000002 + + + CSNDUR + Minimum duration between edge of CSN and edge of SCK and minimum duration CSN must stay high between transactions. The value is specified in number of 64 MHz clock cycles (15.625 ns). + 0 + 7 + + + + + + CSNPOL + Polarity of CSN output + 0x568 + read-write + 0x00000000 + + + CSNPOL + Polarity of CSN output + 0 + 0 + + + LOW + Active low (idle state high) + 0 + + + HIGH + Active high (idle state low) + 1 + + + + + + + PSELDCX + Pin select for DCX signal + 0x56C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + DCXCNT + DCX configuration + 0x570 + read-write + + + DCXCNT + This register specifies the number of command bytes preceding the data bytes. The PSEL.DCX line will be low during transmission of command bytes and high during transmission of data bytes. Value 0xF indicates that all bytes are command bytes. + 0 + 3 + + + + + ORC + Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT + 0x5C0 + read-write + + + ORC + Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT. + 0 + 7 + + + + + + + SPIS0 + SPI Slave 0 + 0x40003000 + SPI0 + SPIS + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + SPIS + 0x20 + + + TASKS_ACQUIRE + Acquire SPI semaphore + 0x024 + write-only + + + TASKS_ACQUIRE + Acquire SPI semaphore + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RELEASE + Release SPI semaphore, enabling the SPI slave to acquire it + 0x028 + write-only + + + TASKS_RELEASE + Release SPI semaphore, enabling the SPI slave to acquire it + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_END + Granted transaction completed + 0x104 + read-write + + + EVENTS_END + Granted transaction completed + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + End of RXD buffer reached + 0x110 + read-write + + + EVENTS_ENDRX + End of RXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ACQUIRED + Semaphore acquired + 0x128 + read-write + + + EVENTS_ACQUIRED + Semaphore acquired + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + END_ACQUIRE + Shortcut between event END and task ACQUIRE + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + END + Write '1' to enable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ACQUIRED + Write '1' to enable interrupt for event ACQUIRED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + END + Write '1' to disable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ACQUIRED + Write '1' to disable interrupt for event ACQUIRED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + SEMSTAT + Semaphore status register + 0x400 + read-only + 0x00000001 + + + SEMSTAT + Semaphore status + 0 + 1 + + + Free + Semaphore is free + 0 + + + CPU + Semaphore is assigned to CPU + 1 + + + SPIS + Semaphore is assigned to SPI slave + 2 + + + CPUPending + Semaphore is assigned to SPI but a handover to the CPU is pending + 3 + + + + + + + STATUS + Status from last transaction + 0x440 + read-write + + + OVERREAD + TX buffer over-read detected, and prevented + 0 + 0 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + write + + Clear + Write: clear error on writing '1' + 1 + + + + + OVERFLOW + RX buffer overflow detected, and prevented + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + write + + Clear + Write: clear error on writing '1' + 1 + + + + + + + ENABLE + Enable SPI slave + 0x500 + read-write + + + ENABLE + Enable or disable SPI slave + 0 + 3 + + + Disabled + Disable SPI slave + 0 + + + Enabled + Enable SPI slave + 2 + + + + + + + PSEL + Unspecified + SPIS_PSEL + read-write + 0x508 + + SCK + Pin select for SCK + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MISO + Pin select for MISO signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MOSI + Pin select for MOSI signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CSN + Pin select for CSN signal + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + Unspecified + SPIS_RXD + read-write + 0x534 + + PTR + RXD data pointer + 0x000 + read-write + + + PTR + RXD data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes received in last granted transaction + 0x008 + read-only + + + AMOUNT + Number of bytes received in the last granted transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + Unspecified + SPIS_TXD + read-write + 0x544 + + PTR + TXD data pointer + 0x000 + read-write + + + PTR + TXD data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transmitted in last granted transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transmitted in last granted transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + CONFIG + Configuration register + 0x554 + read-write + + + ORDER + Bit order + 0 + 0 + + + MsbFirst + Most significant bit shifted out first + 0 + + + LsbFirst + Least significant bit shifted out first + 1 + + + + + CPHA + Serial clock (SCK) phase + 1 + 1 + + + Leading + Sample on leading edge of clock, shift serial data on trailing edge + 0 + + + Trailing + Sample on trailing edge of clock, shift serial data on leading edge + 1 + + + + + CPOL + Serial clock (SCK) polarity + 2 + 2 + + + ActiveHigh + Active high + 0 + + + ActiveLow + Active low + 1 + + + + + + + DEF + Default character. Character clocked out in case of an ignored transaction. + 0x55C + read-write + + + DEF + Default character. Character clocked out in case of an ignored transaction. + 0 + 7 + + + + + ORC + Over-read character + 0x5C0 + read-write + + + ORC + Over-read character. Character clocked out after an over-read of the transmit buffer. + 0 + 7 + + + + + + + TWI0 + I2C compatible Two-Wire Interface 0 + 0x40003000 + SPI0 + TWI + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + TWI + 0x20 + + + TASKS_STARTRX + Start TWI receive sequence + 0x000 + write-only + + + TASKS_STARTRX + Start TWI receive sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start TWI transmit sequence + 0x008 + write-only + + + TASKS_STARTTX + Start TWI transmit sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop TWI transaction + 0x014 + write-only + + + TASKS_STOP + Stop TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend TWI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume TWI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + TWI stopped + 0x104 + read-write + + + EVENTS_STOPPED + TWI stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXDREADY + TWI RXD byte received + 0x108 + read-write + + + EVENTS_RXDREADY + TWI RXD byte received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXDSENT + TWI TXD byte sent + 0x11C + read-write + + + EVENTS_TXDSENT + TWI TXD byte sent + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + TWI error + 0x124 + read-write + + + EVENTS_ERROR + TWI error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_BB + TWI byte boundary, generated before each byte that is sent or received + 0x138 + read-write + + + EVENTS_BB + TWI byte boundary, generated before each byte that is sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SUSPENDED + TWI entered the suspended state + 0x148 + read-write + + + EVENTS_SUSPENDED + TWI entered the suspended state + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + BB_SUSPEND + Shortcut between event BB and task SUSPEND + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + BB_STOP + Shortcut between event BB and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXDREADY + Write '1' to enable interrupt for event RXDREADY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXDSENT + Write '1' to enable interrupt for event TXDSENT + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + BB + Write '1' to enable interrupt for event BB + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SUSPENDED + Write '1' to enable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXDREADY + Write '1' to disable interrupt for event RXDREADY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXDSENT + Write '1' to disable interrupt for event TXDSENT + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + BB + Write '1' to disable interrupt for event BB + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SUSPENDED + Write '1' to disable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x4C4 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + read + + NotPresent + Read: no overrun occured + 0 + + + Present + Read: overrun occured + 1 + + + + + ANACK + NACK received after sending the address (write '1' to clear) + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + DNACK + NACK received after sending a data byte (write '1' to clear) + 2 + 2 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + + + ENABLE + Enable TWI + 0x500 + read-write + + + ENABLE + Enable or disable TWI + 0 + 3 + + + Disabled + Disable TWI + 0 + + + Enabled + Enable TWI + 5 + + + + + + + PSEL + Unspecified + TWI_PSEL + read-write + 0x508 + + SCL + Pin select for SCL + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDA + Pin select for SDA + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD register + 0x518 + read-only + modifyExternal + + + RXD + RXD register + 0 + 7 + + + + + TXD + TXD register + 0x51C + read-write + + + TXD + TXD register + 0 + 7 + + + + + FREQUENCY + TWI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + TWI master clock frequency + 0 + 31 + + + K100 + 100 kbps + 0x01980000 + + + K250 + 250 kbps + 0x04000000 + + + K400 + 400 kbps (actual rate 410.256 kbps) + 0x06680000 + + + + + + + ADDRESS + Address used in the TWI transfer + 0x588 + read-write + + + ADDRESS + Address used in the TWI transfer + 0 + 6 + + + + + + + TWIM0 + I2C compatible Two-Wire Master Interface with EasyDMA 0 + 0x40003000 + SPI0 + TWIM + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + TWIM + 0x20 + + + TASKS_STARTRX + Start TWI receive sequence + 0x000 + write-only + + + TASKS_STARTRX + Start TWI receive sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start TWI transmit sequence + 0x008 + write-only + + + TASKS_STARTTX + Start TWI transmit sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop TWI transaction. Must be issued while the TWI master is not suspended. + 0x014 + write-only + + + TASKS_STOP + Stop TWI transaction. Must be issued while the TWI master is not suspended. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend TWI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume TWI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + TWI stopped + 0x104 + read-write + + + EVENTS_STOPPED + TWI stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + TWI error + 0x124 + read-write + + + EVENTS_ERROR + TWI error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SUSPENDED + SUSPEND task has been issued, TWI traffic is now suspended. + 0x148 + read-write + + + EVENTS_SUSPENDED + SUSPEND task has been issued, TWI traffic is now suspended. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXSTARTED + Receive sequence started + 0x14C + read-write + + + EVENTS_RXSTARTED + Receive sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTARTED + Transmit sequence started + 0x150 + read-write + + + EVENTS_TXSTARTED + Transmit sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LASTRX + Byte boundary, starting to receive the last byte + 0x15C + read-write + + + EVENTS_LASTRX + Byte boundary, starting to receive the last byte + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LASTTX + Byte boundary, starting to transmit the last byte + 0x160 + read-write + + + EVENTS_LASTTX + Byte boundary, starting to transmit the last byte + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + LASTTX_STARTRX + Shortcut between event LASTTX and task STARTRX + 7 + 7 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTTX_SUSPEND + Shortcut between event LASTTX and task SUSPEND + 8 + 8 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTTX_STOP + Shortcut between event LASTTX and task STOP + 9 + 9 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTRX_STARTTX + Shortcut between event LASTRX and task STARTTX + 10 + 10 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTRX_SUSPEND + Shortcut between event LASTRX and task SUSPEND + 11 + 11 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTRX_STOP + Shortcut between event LASTRX and task STOP + 12 + 12 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SUSPENDED + Enable or disable interrupt for event SUSPENDED + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXSTARTED + Enable or disable interrupt for event RXSTARTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTARTED + Enable or disable interrupt for event TXSTARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + LASTRX + Enable or disable interrupt for event LASTRX + 23 + 23 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + LASTTX + Enable or disable interrupt for event LASTTX + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SUSPENDED + Write '1' to enable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXSTARTED + Write '1' to enable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTARTED + Write '1' to enable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LASTRX + Write '1' to enable interrupt for event LASTRX + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LASTTX + Write '1' to enable interrupt for event LASTTX + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SUSPENDED + Write '1' to disable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXSTARTED + Write '1' to disable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTARTED + Write '1' to disable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LASTRX + Write '1' to disable interrupt for event LASTRX + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LASTTX + Write '1' to disable interrupt for event LASTTX + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x4C4 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + ANACK + NACK received after sending the address (write '1' to clear) + 1 + 1 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + DNACK + NACK received after sending a data byte (write '1' to clear) + 2 + 2 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + + + ENABLE + Enable TWIM + 0x500 + read-write + + + ENABLE + Enable or disable TWIM + 0 + 3 + + + Disabled + Disable TWIM + 0 + + + Enabled + Enable TWIM + 6 + + + + + + + PSEL + Unspecified + TWIM_PSEL + read-write + 0x508 + + SCL + Pin select for SCL signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDA + Pin select for SDA signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + FREQUENCY + TWI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + TWI master clock frequency + 0 + 31 + + + K100 + 100 kbps + 0x01980000 + + + K250 + 250 kbps + 0x04000000 + + + K400 + 400 kbps + 0x06400000 + + + + + + + RXD + RXD EasyDMA channel + TWIM_RXD + read-write + 0x534 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction. In case of NACK error, includes the NACK'ed byte. + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 2 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + TXD EasyDMA channel + TWIM_TXD + read-write + 0x544 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction. In case of NACK error, includes the NACK'ed byte. + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 2 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + ADDRESS + Address used in the TWI transfer + 0x588 + read-write + + + ADDRESS + Address used in the TWI transfer + 0 + 6 + + + + + + + TWIS0 + I2C compatible Two-Wire Slave Interface with EasyDMA 0 + 0x40003000 + SPI0 + TWIS + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + TWIS + 0x20 + + + TASKS_STOP + Stop TWI transaction + 0x014 + write-only + + + TASKS_STOP + Stop TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend TWI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume TWI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_PREPARERX + Prepare the TWI slave to respond to a write command + 0x030 + write-only + + + TASKS_PREPARERX + Prepare the TWI slave to respond to a write command + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_PREPARETX + Prepare the TWI slave to respond to a read command + 0x034 + write-only + + + TASKS_PREPARETX + Prepare the TWI slave to respond to a read command + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + TWI stopped + 0x104 + read-write + + + EVENTS_STOPPED + TWI stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + TWI error + 0x124 + read-write + + + EVENTS_ERROR + TWI error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXSTARTED + Receive sequence started + 0x14C + read-write + + + EVENTS_RXSTARTED + Receive sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTARTED + Transmit sequence started + 0x150 + read-write + + + EVENTS_TXSTARTED + Transmit sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_WRITE + Write command received + 0x164 + read-write + + + EVENTS_WRITE + Write command received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_READ + Read command received + 0x168 + read-write + + + EVENTS_READ + Read command received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + WRITE_SUSPEND + Shortcut between event WRITE and task SUSPEND + 13 + 13 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READ_SUSPEND + Shortcut between event READ and task SUSPEND + 14 + 14 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXSTARTED + Enable or disable interrupt for event RXSTARTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTARTED + Enable or disable interrupt for event TXSTARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + WRITE + Enable or disable interrupt for event WRITE + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + READ + Enable or disable interrupt for event READ + 26 + 26 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXSTARTED + Write '1' to enable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTARTED + Write '1' to enable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + WRITE + Write '1' to enable interrupt for event WRITE + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + READ + Write '1' to enable interrupt for event READ + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXSTARTED + Write '1' to disable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTARTED + Write '1' to disable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + WRITE + Write '1' to disable interrupt for event WRITE + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + READ + Write '1' to disable interrupt for event READ + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x4D0 + read-write + oneToClear + + + OVERFLOW + RX buffer overflow detected, and prevented + 0 + 0 + + + NotDetected + Error did not occur + 0 + + + Detected + Error occurred + 1 + + + + + DNACK + NACK sent after receiving a data byte + 2 + 2 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + OVERREAD + TX buffer over-read detected, and prevented + 3 + 3 + + + NotDetected + Error did not occur + 0 + + + Detected + Error occurred + 1 + + + + + + + MATCH + Status register indicating which address had a match + 0x4D4 + read-only + + + MATCH + Indication of which address in {ADDRESS} that matched the incoming address + 0 + 0 + + + + + ENABLE + Enable TWIS + 0x500 + read-write + + + ENABLE + Enable or disable TWIS + 0 + 3 + + + Disabled + Disable TWIS + 0 + + + Enabled + Enable TWIS + 9 + + + + + + + PSEL + Unspecified + TWIS_PSEL + read-write + 0x508 + + SCL + Pin select for SCL signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDA + Pin select for SDA signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD EasyDMA channel + TWIS_RXD + read-write + 0x534 + + PTR + RXD Data pointer + 0x000 + read-write + + + PTR + RXD Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in RXD buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in RXD buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last RXD transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last RXD transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + TXD EasyDMA channel + TWIS_TXD + read-write + 0x544 + + PTR + TXD Data pointer + 0x000 + read-write + + + PTR + TXD Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in TXD buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in TXD buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last TXD transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last TXD transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + 0x2 + 0x4 + ADDRESS[%s] + Description collection: TWI slave address n + 0x588 + read-write + + + ADDRESS + TWI slave address + 0 + 6 + + + + + CONFIG + Configuration register for the address match mechanism + 0x594 + read-write + 0x00000001 + + + ADDRESS0 + Enable or disable address matching on ADDRESS[0] + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ADDRESS1 + Enable or disable address matching on ADDRESS[1] + 1 + 1 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + + + ORC + Over-read character. Character sent out in case of an over-read of the transmit buffer. + 0x5C0 + read-write + + + ORC + Over-read character. Character sent out in case of an over-read of the transmit buffer. + 0 + 7 + + + + + + + SPI1 + Serial Peripheral Interface 1 + 0x40004000 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + SPIM1 + Serial Peripheral Interface Master with EasyDMA 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + SPIS1 + SPI Slave 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + TWI1 + I2C compatible Two-Wire Interface 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + TWIM1 + I2C compatible Two-Wire Master Interface with EasyDMA 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + TWIS1 + I2C compatible Two-Wire Slave Interface with EasyDMA 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + NFCT + NFC-A compatible radio + 0x40005000 + + 0 + 0x1000 + registers + + + NFCT + 5 + + NFCT + 0x20 + + + TASKS_ACTIVATE + Activate NFCT peripheral for incoming and outgoing frames, change state to activated + 0x000 + write-only + + + TASKS_ACTIVATE + Activate NFCT peripheral for incoming and outgoing frames, change state to activated + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DISABLE + Disable NFCT peripheral + 0x004 + write-only + + + TASKS_DISABLE + Disable NFCT peripheral + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SENSE + Enable NFC sense field mode, change state to sense mode + 0x008 + write-only + + + TASKS_SENSE + Enable NFC sense field mode, change state to sense mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start transmission of an outgoing frame, change state to transmit + 0x00C + write-only + + + TASKS_STARTTX + Start transmission of an outgoing frame, change state to transmit + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_ENABLERXDATA + Initializes the EasyDMA for receive. + 0x01C + write-only + + + TASKS_ENABLERXDATA + Initializes the EasyDMA for receive. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_GOIDLE + Force state machine to IDLE state + 0x024 + write-only + + + TASKS_GOIDLE + Force state machine to IDLE state + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_GOSLEEP + Force state machine to SLEEP_A state + 0x028 + write-only + + + TASKS_GOSLEEP + Force state machine to SLEEP_A state + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + The NFCT peripheral is ready to receive and send frames + 0x100 + read-write + + + EVENTS_READY + The NFCT peripheral is ready to receive and send frames + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_FIELDDETECTED + Remote NFC field detected + 0x104 + read-write + + + EVENTS_FIELDDETECTED + Remote NFC field detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_FIELDLOST + Remote NFC field lost + 0x108 + read-write + + + EVENTS_FIELDLOST + Remote NFC field lost + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXFRAMESTART + Marks the start of the first symbol of a transmitted frame + 0x10C + read-write + + + EVENTS_TXFRAMESTART + Marks the start of the first symbol of a transmitted frame + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXFRAMEEND + Marks the end of the last transmitted on-air symbol of a frame + 0x110 + read-write + + + EVENTS_TXFRAMEEND + Marks the end of the last transmitted on-air symbol of a frame + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXFRAMESTART + Marks the end of the first symbol of a received frame + 0x114 + read-write + + + EVENTS_RXFRAMESTART + Marks the end of the first symbol of a received frame + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXFRAMEEND + Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer + 0x118 + read-write + + + EVENTS_RXFRAMEEND + Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + NFC error reported. The ERRORSTATUS register contains details on the source of the error. + 0x11C + read-write + + + EVENTS_ERROR + NFC error reported. The ERRORSTATUS register contains details on the source of the error. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXERROR + NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error. + 0x128 + read-write + + + EVENTS_RXERROR + NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full. + 0x12C + read-write + + + EVENTS_ENDRX + RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDTX + Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer + 0x130 + read-write + + + EVENTS_ENDTX + Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_AUTOCOLRESSTARTED + Auto collision resolution process has started + 0x138 + read-write + + + EVENTS_AUTOCOLRESSTARTED + Auto collision resolution process has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_COLLISION + NFC auto collision resolution error reported. + 0x148 + read-write + + + EVENTS_COLLISION + NFC auto collision resolution error reported. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SELECTED + NFC auto collision resolution successfully completed + 0x14C + read-write + + + EVENTS_SELECTED + NFC auto collision resolution successfully completed + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STARTED + EasyDMA is ready to receive or send frames. + 0x150 + read-write + + + EVENTS_STARTED + EasyDMA is ready to receive or send frames. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + FIELDDETECTED_ACTIVATE + Shortcut between event FIELDDETECTED and task ACTIVATE + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + FIELDLOST_SENSE + Shortcut between event FIELDLOST and task SENSE + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + TXFRAMEEND_ENABLERXDATA + Shortcut between event TXFRAMEEND and task ENABLERXDATA + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + READY + Enable or disable interrupt for event READY + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + FIELDDETECTED + Enable or disable interrupt for event FIELDDETECTED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + FIELDLOST + Enable or disable interrupt for event FIELDLOST + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXFRAMESTART + Enable or disable interrupt for event TXFRAMESTART + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXFRAMEEND + Enable or disable interrupt for event TXFRAMEEND + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXFRAMESTART + Enable or disable interrupt for event RXFRAMESTART + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXFRAMEEND + Enable or disable interrupt for event RXFRAMEEND + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXERROR + Enable or disable interrupt for event RXERROR + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDRX + Enable or disable interrupt for event ENDRX + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDTX + Enable or disable interrupt for event ENDTX + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + AUTOCOLRESSTARTED + Enable or disable interrupt for event AUTOCOLRESSTARTED + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + COLLISION + Enable or disable interrupt for event COLLISION + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SELECTED + Enable or disable interrupt for event SELECTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STARTED + Enable or disable interrupt for event STARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + FIELDDETECTED + Write '1' to enable interrupt for event FIELDDETECTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + FIELDLOST + Write '1' to enable interrupt for event FIELDLOST + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXFRAMESTART + Write '1' to enable interrupt for event TXFRAMESTART + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXFRAMEEND + Write '1' to enable interrupt for event TXFRAMEEND + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXFRAMESTART + Write '1' to enable interrupt for event RXFRAMESTART + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXFRAMEEND + Write '1' to enable interrupt for event RXFRAMEEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXERROR + Write '1' to enable interrupt for event RXERROR + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDTX + Write '1' to enable interrupt for event ENDTX + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + AUTOCOLRESSTARTED + Write '1' to enable interrupt for event AUTOCOLRESSTARTED + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COLLISION + Write '1' to enable interrupt for event COLLISION + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SELECTED + Write '1' to enable interrupt for event SELECTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STARTED + Write '1' to enable interrupt for event STARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + FIELDDETECTED + Write '1' to disable interrupt for event FIELDDETECTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + FIELDLOST + Write '1' to disable interrupt for event FIELDLOST + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXFRAMESTART + Write '1' to disable interrupt for event TXFRAMESTART + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXFRAMEEND + Write '1' to disable interrupt for event TXFRAMEEND + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXFRAMESTART + Write '1' to disable interrupt for event RXFRAMESTART + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXFRAMEEND + Write '1' to disable interrupt for event RXFRAMEEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXERROR + Write '1' to disable interrupt for event RXERROR + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDTX + Write '1' to disable interrupt for event ENDTX + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + AUTOCOLRESSTARTED + Write '1' to disable interrupt for event AUTOCOLRESSTARTED + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COLLISION + Write '1' to disable interrupt for event COLLISION + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SELECTED + Write '1' to disable interrupt for event SELECTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STARTED + Write '1' to disable interrupt for event STARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSTATUS + NFC Error Status register + 0x404 + read-write + oneToClear + + + FRAMEDELAYTIMEOUT + No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX + 0 + 0 + + + + + FRAMESTATUS + Unspecified + NFCT_FRAMESTATUS + read-write + 0x40C + + RX + Result of last incoming frame + 0x000 + read-write + oneToClear + + + CRCERROR + No valid end of frame (EoF) detected + 0 + 0 + + + CRCCorrect + Valid CRC detected + 0 + + + CRCError + CRC received does not match local check + 1 + + + + + PARITYSTATUS + Parity status of received frame + 2 + 2 + + + ParityOK + Frame received with parity OK + 0 + + + ParityError + Frame received with parity error + 1 + + + + + OVERRUN + Overrun detected + 3 + 3 + + + NoOverrun + No overrun detected + 0 + + + Overrun + Overrun error + 1 + + + + + + + + NFCTAGSTATE + NfcTag state register + 0x410 + read-only + + + NFCTAGSTATE + NfcTag state + 0 + 2 + + + Disabled + Disabled or sense + 0 + + + RampUp + RampUp + 2 + + + Idle + Idle + 3 + + + Receive + Receive + 4 + + + FrameDelay + FrameDelay + 5 + + + Transmit + Transmit + 6 + + + + + + + SLEEPSTATE + Sleep state during automatic collision resolution + 0x420 + read-only + 0x00000000 + + + SLEEPSTATE + Reflects the sleep state during automatic collision resolution. Set to IDLE + by a GOIDLE task. Set to SLEEP_A when a valid SLEEP_REQ frame is received or by a + GOSLEEP task. + 0 + 0 + + + Idle + State is IDLE. + 0 + + + SleepA + State is SLEEP_A. + 1 + + + + + + + FIELDPRESENT + Indicates the presence or not of a valid field + 0x43C + read-only + + + FIELDPRESENT + Indicates if a valid field is present. Available only in the activated state. + 0 + 0 + + + NoField + No valid field detected + 0 + + + FieldPresent + Valid field detected + 1 + + + + + LOCKDETECT + Indicates if the low level has locked to the field + 1 + 1 + + + NotLocked + Not locked to field + 0 + + + Locked + Locked to field + 1 + + + + + + + FRAMEDELAYMIN + Minimum frame delay + 0x504 + read-write + 0x00000480 + + + FRAMEDELAYMIN + Minimum frame delay in number of 13.56 MHz clocks + 0 + 15 + + + + + FRAMEDELAYMAX + Maximum frame delay + 0x508 + read-write + 0x00001000 + + + FRAMEDELAYMAX + Maximum frame delay in number of 13.56 MHz clocks + 0 + 19 + + + + + FRAMEDELAYMODE + Configuration register for the Frame Delay Timer + 0x50C + read-write + 0x00000001 + + + FRAMEDELAYMODE + Configuration register for the Frame Delay Timer + 0 + 1 + + + FreeRun + Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout. + 0 + + + Window + Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX + 1 + + + ExactVal + Frame is transmitted exactly at FRAMEDELAYMAX + 2 + + + WindowGrid + Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX + 3 + + + + + + + PACKETPTR + Packet pointer for TXD and RXD data storage in Data RAM + 0x510 + read-write + 0x00000000 + + + PTR + Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte-aligned RAM address. + 0 + 31 + + + + + MAXLEN + Size of the RAM buffer allocated to TXD and RXD data storage each + 0x514 + read-write + + + MAXLEN + Size of the RAM buffer allocated to TXD and RXD data storage each + 0 + 8 + + + + + TXD + Unspecified + NFCT_TXD + read-write + 0x518 + + FRAMECONFIG + Configuration of outgoing frames + 0x000 + read-write + 0x00000017 + + + PARITY + Indicates if parity is added to the frame + 0 + 0 + + + NoParity + Parity is not added to TX frames + 0 + + + Parity + Parity is added to TX frames + 1 + + + + + DISCARDMODE + Discarding unused bits at start or end of a frame + 1 + 1 + + + DiscardEnd + Unused bits are discarded at end of frame (EoF) + 0 + + + DiscardStart + Unused bits are discarded at start of frame (SoF) + 1 + + + + + SOF + Adding SoF or not in TX frames + 2 + 2 + + + NoSoF + SoF symbol not added + 0 + + + SoF + SoF symbol added + 1 + + + + + CRCMODETX + CRC mode for outgoing frames + 4 + 4 + + + NoCRCTX + CRC is not added to the frame + 0 + + + CRC16TX + 16 bit CRC added to the frame based on all the data read from RAM that is used in the frame + 1 + + + + + + + AMOUNT + Size of outgoing frame + 0x004 + read-write + + + TXDATABITS + Number of bits in the last or first byte read from RAM that shall be included in the frame (excluding parity bit). + 0 + 2 + + + TXDATABYTES + Number of complete bytes that shall be included in the frame, excluding CRC, parity and framing + 3 + 11 + + + + + + RXD + Unspecified + NFCT_RXD + read-write + 0x520 + + FRAMECONFIG + Configuration of incoming frames + 0x000 + read-write + 0x00000015 + + + PARITY + Indicates if parity expected in RX frame + 0 + 0 + + + NoParity + Parity is not expected in RX frames + 0 + + + Parity + Parity is expected in RX frames + 1 + + + + + SOF + SoF expected or not in RX frames + 2 + 2 + + + NoSoF + SoF symbol is not expected in RX frames + 0 + + + SoF + SoF symbol is expected in RX frames + 1 + + + + + CRCMODERX + CRC mode for incoming frames + 4 + 4 + + + NoCRCRX + CRC is not expected in RX frames + 0 + + + CRC16RX + Last 16 bits in RX frame is CRC, CRC is checked and CRCSTATUS updated + 1 + + + + + + + AMOUNT + Size of last incoming frame + 0x004 + read-only + + + RXDATABITS + Number of bits in the last byte in the frame, if less than 8 (including CRC, but excluding parity and SoF/EoF framing). + 0 + 2 + + + RXDATABYTES + Number of complete bytes received in the frame (including CRC, but excluding parity and SoF/EoF framing) + 3 + 11 + + + + + + MODULATIONCTRL + Enables the modulation output to a GPIO pin which can be connected to a second external antenna. + 0x52C + read-write + 0x00000001 + + + MODULATIONCTRL + Configuration of modulation control. + 0 + 1 + + + Invalid + Invalid, defaults to same behaviour as for Internal + 0x0 + + + Internal + Use internal modulator only + 0x1 + + + ModToGpio + Output digital modulation signal to a GPIO pin. + 0x2 + + + InternalAndModToGpio + Use internal modulator and output digital modulation signal to a GPIO pin. + 0x3 + + + + + + + MODULATIONPSEL + Pin select for Modulation control. + 0x538 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + NFCID1_LAST + Last NFCID1 part (4, 7 or 10 bytes ID) + 0x590 + read-write + 0x00006363 + + + NFCID1_Z + NFCID1 byte Z (very last byte sent) + 0 + 7 + + + NFCID1_Y + NFCID1 byte Y + 8 + 15 + + + NFCID1_X + NFCID1 byte X + 16 + 23 + + + NFCID1_W + NFCID1 byte W + 24 + 31 + + + + + NFCID1_2ND_LAST + Second last NFCID1 part (7 or 10 bytes ID) + 0x594 + read-write + + + NFCID1_V + NFCID1 byte V + 0 + 7 + + + NFCID1_U + NFCID1 byte U + 8 + 15 + + + NFCID1_T + NFCID1 byte T + 16 + 23 + + + + + NFCID1_3RD_LAST + Third last NFCID1 part (10 bytes ID) + 0x598 + read-write + + + NFCID1_S + NFCID1 byte S + 0 + 7 + + + NFCID1_R + NFCID1 byte R + 8 + 15 + + + NFCID1_Q + NFCID1 byte Q + 16 + 23 + + + + + AUTOCOLRESCONFIG + Controls the auto collision resolution function. This setting must be done before the NFCT peripheral is activated. + 0x59C + read-write + 0x00000002 + + + MODE + Enables/disables auto collision resolution + 0 + 0 + + + Enabled + Auto collision resolution enabled + 0 + + + Disabled + Auto collision resolution disabled + 1 + + + + + + + SENSRES + NFC-A SENS_RES auto-response settings + 0x5A0 + read-write + 0x00000001 + + + BITFRAMESDD + Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification + 0 + 4 + + + SDD00000 + SDD pattern 00000 + 0 + + + SDD00001 + SDD pattern 00001 + 1 + + + SDD00010 + SDD pattern 00010 + 2 + + + SDD00100 + SDD pattern 00100 + 4 + + + SDD01000 + SDD pattern 01000 + 8 + + + SDD10000 + SDD pattern 10000 + 16 + + + + + RFU5 + Reserved for future use. Shall be 0. + 5 + 5 + + + NFCIDSIZE + NFCID1 size. This value is used by the auto collision resolution engine. + 6 + 7 + + + NFCID1Single + NFCID1 size: single (4 bytes) + 0 + + + NFCID1Double + NFCID1 size: double (7 bytes) + 1 + + + NFCID1Triple + NFCID1 size: triple (10 bytes) + 2 + + + + + PLATFCONFIG + Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification + 8 + 11 + + + RFU74 + Reserved for future use. Shall be 0. + 12 + 15 + + + + + SELRES + NFC-A SEL_RES auto-response settings + 0x5A4 + read-write + + + RFU10 + Reserved for future use. Shall be 0. + 0 + 1 + + + CASCADE + Cascade as defined by the b3 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification (controlled by hardware, shall be 0) + 2 + 2 + + + RFU43 + Reserved for future use. Shall be 0. + 3 + 4 + + + PROTOCOL + Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification + 5 + 6 + + + RFU7 + Reserved for future use. Shall be 0. + 7 + 7 + + + + + + + GPIOTE + GPIO Tasks and Events + 0x40006000 + + 0 + 0x1000 + registers + + + GPIOTE + 6 + + GPIOTE + 0x20 + + + 0x8 + 0x4 + TASKS_OUT[%s] + Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY. + 0x000 + write-only + + + TASKS_OUT + Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + TASKS_SET[%s] + Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high. + 0x030 + write-only + + + TASKS_SET + Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + TASKS_CLR[%s] + Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low. + 0x060 + write-only + + + TASKS_CLR + Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + EVENTS_IN[%s] + Description collection: Event generated from pin specified in CONFIG[n].PSEL + 0x100 + read-write + + + EVENTS_IN + Event generated from pin specified in CONFIG[n].PSEL + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PORT + Event generated from multiple input GPIO pins with SENSE mechanism enabled + 0x17C + read-write + + + EVENTS_PORT + Event generated from multiple input GPIO pins with SENSE mechanism enabled + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + IN0 + Write '1' to enable interrupt for event IN[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN1 + Write '1' to enable interrupt for event IN[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN2 + Write '1' to enable interrupt for event IN[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN3 + Write '1' to enable interrupt for event IN[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN4 + Write '1' to enable interrupt for event IN[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN5 + Write '1' to enable interrupt for event IN[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN6 + Write '1' to enable interrupt for event IN[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN7 + Write '1' to enable interrupt for event IN[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PORT + Write '1' to enable interrupt for event PORT + 31 + 31 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + IN0 + Write '1' to disable interrupt for event IN[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN1 + Write '1' to disable interrupt for event IN[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN2 + Write '1' to disable interrupt for event IN[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN3 + Write '1' to disable interrupt for event IN[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN4 + Write '1' to disable interrupt for event IN[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN5 + Write '1' to disable interrupt for event IN[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN6 + Write '1' to disable interrupt for event IN[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN7 + Write '1' to disable interrupt for event IN[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PORT + Write '1' to disable interrupt for event PORT + 31 + 31 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + 0x8 + 0x4 + CONFIG[%s] + Description collection: Configuration for OUT[n], SET[n], and CLR[n] tasks and IN[n] event + 0x510 + read-write + + + MODE + Mode + 0 + 1 + + + Disabled + Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module. + 0 + + + Event + Event mode + 1 + + + Task + Task mode + 3 + + + + + PSEL + GPIO number associated with SET[n], CLR[n], and OUT[n] tasks and IN[n] event + 8 + 12 + + + PORT + Port number + 13 + 13 + + + POLARITY + When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event. + 16 + 17 + + + None + Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity. + 0 + + + LoToHi + Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin. + 1 + + + HiToLo + Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin. + 2 + + + Toggle + Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin. + 3 + + + + + OUTINIT + When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect. + 20 + 20 + + + Low + Task mode: Initial value of pin before task triggering is low + 0 + + + High + Task mode: Initial value of pin before task triggering is high + 1 + + + + + + + + + SAADC + Successive approximation register (SAR) analog-to-digital converter + 0x40007000 + + 0 + 0x1000 + registers + + + SAADC + 7 + + SAADC + 0x20 + + + TASKS_START + Starts the SAADC and prepares the result buffer in RAM + 0x000 + write-only + + + TASKS_START + Starts the SAADC and prepares the result buffer in RAM + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SAMPLE + Takes one SAADC sample + 0x004 + write-only + + + TASKS_SAMPLE + Takes one SAADC sample + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stops the SAADC and terminates all on-going conversions + 0x008 + write-only + + + TASKS_STOP + Stops the SAADC and terminates all on-going conversions + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CALIBRATEOFFSET + Starts offset auto-calibration + 0x00C + write-only + + + TASKS_CALIBRATEOFFSET + Starts offset auto-calibration + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STARTED + The SAADC has started + 0x100 + read-write + + + EVENTS_STARTED + The SAADC has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + The SAADC has filled up the result buffer + 0x104 + read-write + + + EVENTS_END + The SAADC has filled up the result buffer + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DONE + A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM. + 0x108 + read-write + + + EVENTS_DONE + A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RESULTDONE + Result ready for transfer to RAM + 0x10C + read-write + + + EVENTS_RESULTDONE + Result ready for transfer to RAM + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CALIBRATEDONE + Calibration is complete + 0x110 + read-write + + + EVENTS_CALIBRATEDONE + Calibration is complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + The SAADC has stopped + 0x114 + read-write + + + EVENTS_STOPPED + The SAADC has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 8 + 0x008 + EVENTS_CH[%s] + Peripheral events. + SAADC_EVENTS_CH + read-write + 0x118 + + LIMITH + Description cluster: Last result is equal or above CH[n].LIMIT.HIGH + 0x000 + read-write + + + LIMITH + Last result is equal or above CH[n].LIMIT.HIGH + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + LIMITL + Description cluster: Last result is equal or below CH[n].LIMIT.LOW + 0x004 + read-write + + + LIMITL + Last result is equal or below CH[n].LIMIT.LOW + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STARTED + Enable or disable interrupt for event STARTED + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + END + Enable or disable interrupt for event END + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + DONE + Enable or disable interrupt for event DONE + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RESULTDONE + Enable or disable interrupt for event RESULTDONE + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CALIBRATEDONE + Enable or disable interrupt for event CALIBRATEDONE + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STOPPED + Enable or disable interrupt for event STOPPED + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH0LIMITH + Enable or disable interrupt for event CH0LIMITH + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH0LIMITL + Enable or disable interrupt for event CH0LIMITL + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH1LIMITH + Enable or disable interrupt for event CH1LIMITH + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH1LIMITL + Enable or disable interrupt for event CH1LIMITL + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH2LIMITH + Enable or disable interrupt for event CH2LIMITH + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH2LIMITL + Enable or disable interrupt for event CH2LIMITL + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH3LIMITH + Enable or disable interrupt for event CH3LIMITH + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH3LIMITL + Enable or disable interrupt for event CH3LIMITL + 13 + 13 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH4LIMITH + Enable or disable interrupt for event CH4LIMITH + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH4LIMITL + Enable or disable interrupt for event CH4LIMITL + 15 + 15 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH5LIMITH + Enable or disable interrupt for event CH5LIMITH + 16 + 16 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH5LIMITL + Enable or disable interrupt for event CH5LIMITL + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH6LIMITH + Enable or disable interrupt for event CH6LIMITH + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH6LIMITL + Enable or disable interrupt for event CH6LIMITL + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH7LIMITH + Enable or disable interrupt for event CH7LIMITH + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH7LIMITL + Enable or disable interrupt for event CH7LIMITL + 21 + 21 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STARTED + Write '1' to enable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DONE + Write '1' to enable interrupt for event DONE + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RESULTDONE + Write '1' to enable interrupt for event RESULTDONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CALIBRATEDONE + Write '1' to enable interrupt for event CALIBRATEDONE + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH0LIMITH + Write '1' to enable interrupt for event CH0LIMITH + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH0LIMITL + Write '1' to enable interrupt for event CH0LIMITL + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH1LIMITH + Write '1' to enable interrupt for event CH1LIMITH + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH1LIMITL + Write '1' to enable interrupt for event CH1LIMITL + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH2LIMITH + Write '1' to enable interrupt for event CH2LIMITH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH2LIMITL + Write '1' to enable interrupt for event CH2LIMITL + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH3LIMITH + Write '1' to enable interrupt for event CH3LIMITH + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH3LIMITL + Write '1' to enable interrupt for event CH3LIMITL + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH4LIMITH + Write '1' to enable interrupt for event CH4LIMITH + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH4LIMITL + Write '1' to enable interrupt for event CH4LIMITL + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH5LIMITH + Write '1' to enable interrupt for event CH5LIMITH + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH5LIMITL + Write '1' to enable interrupt for event CH5LIMITL + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH6LIMITH + Write '1' to enable interrupt for event CH6LIMITH + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH6LIMITL + Write '1' to enable interrupt for event CH6LIMITL + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH7LIMITH + Write '1' to enable interrupt for event CH7LIMITH + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH7LIMITL + Write '1' to enable interrupt for event CH7LIMITL + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STARTED + Write '1' to disable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DONE + Write '1' to disable interrupt for event DONE + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RESULTDONE + Write '1' to disable interrupt for event RESULTDONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CALIBRATEDONE + Write '1' to disable interrupt for event CALIBRATEDONE + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH0LIMITH + Write '1' to disable interrupt for event CH0LIMITH + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH0LIMITL + Write '1' to disable interrupt for event CH0LIMITL + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH1LIMITH + Write '1' to disable interrupt for event CH1LIMITH + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH1LIMITL + Write '1' to disable interrupt for event CH1LIMITL + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH2LIMITH + Write '1' to disable interrupt for event CH2LIMITH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH2LIMITL + Write '1' to disable interrupt for event CH2LIMITL + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH3LIMITH + Write '1' to disable interrupt for event CH3LIMITH + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH3LIMITL + Write '1' to disable interrupt for event CH3LIMITL + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH4LIMITH + Write '1' to disable interrupt for event CH4LIMITH + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH4LIMITL + Write '1' to disable interrupt for event CH4LIMITL + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH5LIMITH + Write '1' to disable interrupt for event CH5LIMITH + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH5LIMITL + Write '1' to disable interrupt for event CH5LIMITL + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH6LIMITH + Write '1' to disable interrupt for event CH6LIMITH + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH6LIMITL + Write '1' to disable interrupt for event CH6LIMITL + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH7LIMITH + Write '1' to disable interrupt for event CH7LIMITH + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH7LIMITL + Write '1' to disable interrupt for event CH7LIMITL + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + STATUS + Status + 0x400 + read-only + + + STATUS + Status + 0 + 0 + + + Ready + SAADC is ready. No on-going conversions. + 0 + + + Busy + SAADC is busy. Conversion in progress. + 1 + + + + + + + ENABLE + Enable or disable SAADC + 0x500 + read-write + + + ENABLE + Enable or disable SAADC + 0 + 0 + + + Disabled + Disable SAADC + 0 + + + Enabled + Enable SAADC + 1 + + + + + + + 8 + 0x010 + CH[%s] + Unspecified + SAADC_CH + read-write + 0x510 + + PSELP + Description cluster: Input positive pin selection for CH[n] + 0x000 + read-write + 0x00000000 + + + PSELP + Analog positive input channel + 0 + 4 + + + NC + Not connected + 0 + + + AnalogInput0 + AIN0 + 1 + + + AnalogInput1 + AIN1 + 2 + + + AnalogInput2 + AIN2 + 3 + + + AnalogInput3 + AIN3 + 4 + + + AnalogInput4 + AIN4 + 5 + + + AnalogInput5 + AIN5 + 6 + + + AnalogInput6 + AIN6 + 7 + + + AnalogInput7 + AIN7 + 8 + + + VDD + VDD + 9 + + + VDDHDIV5 + VDDH/5 + 0x0D + + + + + + + PSELN + Description cluster: Input negative pin selection for CH[n] + 0x004 + read-write + 0x00000000 + + + PSELN + Analog negative input, enables differential channel + 0 + 4 + + + NC + Not connected + 0 + + + AnalogInput0 + AIN0 + 1 + + + AnalogInput1 + AIN1 + 2 + + + AnalogInput2 + AIN2 + 3 + + + AnalogInput3 + AIN3 + 4 + + + AnalogInput4 + AIN4 + 5 + + + AnalogInput5 + AIN5 + 6 + + + AnalogInput6 + AIN6 + 7 + + + AnalogInput7 + AIN7 + 8 + + + VDD + VDD + 9 + + + VDDHDIV5 + VDDH/5 + 0x0D + + + + + + + CONFIG + Description cluster: Input configuration for CH[n] + 0x008 + read-write + 0x00020000 + + + RESP + Positive channel resistor control + 0 + 1 + + + Bypass + Bypass resistor ladder + 0 + + + Pulldown + Pull-down to GND + 1 + + + Pullup + Pull-up to VDD + 2 + + + VDD1_2 + Set input at VDD/2 + 3 + + + + + RESN + Negative channel resistor control + 4 + 5 + + + Bypass + Bypass resistor ladder + 0 + + + Pulldown + Pull-down to GND + 1 + + + Pullup + Pull-up to VDD + 2 + + + VDD1_2 + Set input at VDD/2 + 3 + + + + + GAIN + Gain control + 8 + 10 + + + Gain1_6 + 1/6 + 0 + + + Gain1_5 + 1/5 + 1 + + + Gain1_4 + 1/4 + 2 + + + Gain1_3 + 1/3 + 3 + + + Gain1_2 + 1/2 + 4 + + + Gain1 + 1 + 5 + + + Gain2 + 2 + 6 + + + Gain4 + 4 + 7 + + + + + REFSEL + Reference control + 12 + 12 + + + Internal + Internal reference (0.6 V) + 0 + + + VDD1_4 + VDD/4 as reference + 1 + + + + + TACQ + Acquisition time, the time the SAADC uses to sample the input voltage + 16 + 18 + + + 3us + 3 us + 0 + + + 5us + 5 us + 1 + + + 10us + 10 us + 2 + + + 15us + 15 us + 3 + + + 20us + 20 us + 4 + + + 40us + 40 us + 5 + + + + + MODE + Enable differential mode + 20 + 20 + + + SE + Single-ended, PSELN will be ignored, negative input to SAADC shorted to GND + 0 + + + Diff + Differential + 1 + + + + + BURST + Enable burst mode + 24 + 24 + + + Disabled + Burst mode is disabled (normal operation) + 0 + + + Enabled + Burst mode is enabled. SAADC takes 2^OVERSAMPLE number of samples as fast as it can, and sends the average to Data RAM. + 1 + + + + + + + LIMIT + Description cluster: High/low limits for event monitoring of a channel + 0x00C + read-write + 0x7FFF8000 + + + LOW + Low level limit + 0 + 15 + + + HIGH + High level limit + 16 + 31 + + + + + + RESOLUTION + Resolution configuration + 0x5F0 + read-write + 0x00000001 + + + VAL + Set the resolution + 0 + 2 + + + 8bit + 8 bits + 0 + + + 10bit + 10 bits + 1 + + + 12bit + 12 bits + 2 + + + 14bit + 14 bits + 3 + + + + + + + OVERSAMPLE + Oversampling configuration. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used. + 0x5F4 + read-write + + + OVERSAMPLE + Oversample control + 0 + 3 + + + Bypass + Bypass oversampling + 0 + + + Over2x + Oversample 2x + 1 + + + Over4x + Oversample 4x + 2 + + + Over8x + Oversample 8x + 3 + + + Over16x + Oversample 16x + 4 + + + Over32x + Oversample 32x + 5 + + + Over64x + Oversample 64x + 6 + + + Over128x + Oversample 128x + 7 + + + Over256x + Oversample 256x + 8 + + + + + + + SAMPLERATE + Controls normal or continuous sample rate + 0x5F8 + read-write + + + CC + Capture and compare value. Sample rate is 16 MHz/CC + 0 + 10 + + + MODE + Select mode for sample rate control + 12 + 12 + + + Task + Rate is controlled from SAMPLE task + 0 + + + Timers + Rate is controlled from local timer (use CC to control the rate) + 1 + + + + + + + RESULT + RESULT EasyDMA channel + SAADC_RESULT + read-write + 0x62C + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of 16-bit samples to be written to output RAM buffer + 0x004 + read-write + + + MAXCNT + Maximum number of 16-bit samples to be written to output RAM buffer + 0 + 14 + + + + + AMOUNT + Number of 16-bit samples written to output RAM buffer since the previous START task + 0x008 + read-only + + + AMOUNT + Number of 16-bit samples written to output RAM buffer since the previous START task. This register can be read after an END or STOPPED event. + 0 + 14 + + + + + + + + TIMER0 + Timer/Counter 0 + 0x40008000 + TIMER + + 0 + 0x1000 + registers + + + TIMER0 + 8 + + TIMER + 0x20 + + + TASKS_START + Start Timer + 0x000 + write-only + + + TASKS_START + Start Timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop Timer + 0x004 + write-only + + + TASKS_STOP + Stop Timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_COUNT + Increment Timer (Counter mode only) + 0x008 + write-only + + + TASKS_COUNT + Increment Timer (Counter mode only) + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CLEAR + Clear time + 0x00C + write-only + + + TASKS_CLEAR + Clear time + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SHUTDOWN + Deprecated register - Shut down timer + 0x010 + write-only + + + TASKS_SHUTDOWN + Deprecated field - Shut down timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x6 + 0x4 + TASKS_CAPTURE[%s] + Description collection: Capture Timer value to CC[n] register + 0x040 + write-only + + + TASKS_CAPTURE + Capture Timer value to CC[n] register + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x6 + 0x4 + EVENTS_COMPARE[%s] + Description collection: Compare event on CC[n] match + 0x140 + read-write + + + EVENTS_COMPARE + Compare event on CC[n] match + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + COMPARE0_CLEAR + Shortcut between event COMPARE[0] and task CLEAR + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE1_CLEAR + Shortcut between event COMPARE[1] and task CLEAR + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE2_CLEAR + Shortcut between event COMPARE[2] and task CLEAR + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE3_CLEAR + Shortcut between event COMPARE[3] and task CLEAR + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE4_CLEAR + Shortcut between event COMPARE[4] and task CLEAR + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE5_CLEAR + Shortcut between event COMPARE[5] and task CLEAR + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE0_STOP + Shortcut between event COMPARE[0] and task STOP + 8 + 8 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE1_STOP + Shortcut between event COMPARE[1] and task STOP + 9 + 9 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE2_STOP + Shortcut between event COMPARE[2] and task STOP + 10 + 10 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE3_STOP + Shortcut between event COMPARE[3] and task STOP + 11 + 11 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE4_STOP + Shortcut between event COMPARE[4] and task STOP + 12 + 12 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE5_STOP + Shortcut between event COMPARE[5] and task STOP + 13 + 13 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + COMPARE0 + Write '1' to enable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE1 + Write '1' to enable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE2 + Write '1' to enable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE3 + Write '1' to enable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE4 + Write '1' to enable interrupt for event COMPARE[4] + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE5 + Write '1' to enable interrupt for event COMPARE[5] + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + COMPARE0 + Write '1' to disable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE1 + Write '1' to disable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE2 + Write '1' to disable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE3 + Write '1' to disable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE4 + Write '1' to disable interrupt for event COMPARE[4] + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE5 + Write '1' to disable interrupt for event COMPARE[5] + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + MODE + Timer mode selection + 0x504 + read-write + + + MODE + Timer mode + 0 + 1 + + + Timer + Select Timer mode + 0 + + + Counter + Deprecated enumerator - Select Counter mode + 1 + + + LowPowerCounter + Select Low Power Counter mode + 2 + + + + + + + BITMODE + Configure the number of bits used by the TIMER + 0x508 + read-write + + + BITMODE + Timer bit width + 0 + 1 + + + 16Bit + 16 bit timer bit width + 0 + + + 08Bit + 8 bit timer bit width + 1 + + + 24Bit + 24 bit timer bit width + 2 + + + 32Bit + 32 bit timer bit width + 3 + + + + + + + PRESCALER + Timer prescaler register + 0x510 + read-write + 0x00000004 + + + PRESCALER + Prescaler value + 0 + 3 + + + + + 0x6 + 0x4 + CC[%s] + Description collection: Capture/Compare register n + 0x540 + read-write + + + CC + Capture/Compare value + 0 + 31 + + + + + + + TIMER1 + Timer/Counter 1 + 0x40009000 + + TIMER1 + 9 + + + + TIMER2 + Timer/Counter 2 + 0x4000A000 + + TIMER2 + 10 + + + + RTC0 + Real time counter 0 + 0x4000B000 + RTC + + 0 + 0x1000 + registers + + + RTC0 + 11 + + RTC + 0x20 + + + TASKS_START + Start RTC COUNTER + 0x000 + write-only + + + TASKS_START + Start RTC COUNTER + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop RTC COUNTER + 0x004 + write-only + + + TASKS_STOP + Stop RTC COUNTER + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CLEAR + Clear RTC COUNTER + 0x008 + write-only + + + TASKS_CLEAR + Clear RTC COUNTER + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_TRIGOVRFLW + Set COUNTER to 0xFFFFF0 + 0x00C + write-only + + + TASKS_TRIGOVRFLW + Set COUNTER to 0xFFFFF0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_TICK + Event on COUNTER increment + 0x100 + read-write + + + EVENTS_TICK + Event on COUNTER increment + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_OVRFLW + Event on COUNTER overflow + 0x104 + read-write + + + EVENTS_OVRFLW + Event on COUNTER overflow + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x4 + 0x4 + EVENTS_COMPARE[%s] + Description collection: Compare event on CC[n] match + 0x140 + read-write + + + EVENTS_COMPARE + Compare event on CC[n] match + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + TICK + Write '1' to enable interrupt for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + OVRFLW + Write '1' to enable interrupt for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE0 + Write '1' to enable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE1 + Write '1' to enable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE2 + Write '1' to enable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE3 + Write '1' to enable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + TICK + Write '1' to disable interrupt for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + OVRFLW + Write '1' to disable interrupt for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE0 + Write '1' to disable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE1 + Write '1' to disable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE2 + Write '1' to disable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE3 + Write '1' to disable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + EVTEN + Enable or disable event routing + 0x340 + read-write + + + TICK + Enable or disable event routing for event TICK + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + OVRFLW + Enable or disable event routing for event OVRFLW + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE0 + Enable or disable event routing for event COMPARE[0] + 16 + 16 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE1 + Enable or disable event routing for event COMPARE[1] + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE2 + Enable or disable event routing for event COMPARE[2] + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE3 + Enable or disable event routing for event COMPARE[3] + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + + + EVTENSET + Enable event routing + 0x344 + read-write + + + TICK + Write '1' to enable event routing for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + OVRFLW + Write '1' to enable event routing for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE0 + Write '1' to enable event routing for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE1 + Write '1' to enable event routing for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE2 + Write '1' to enable event routing for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE3 + Write '1' to enable event routing for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + EVTENCLR + Disable event routing + 0x348 + read-write + + + TICK + Write '1' to disable event routing for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + OVRFLW + Write '1' to disable event routing for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE0 + Write '1' to disable event routing for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE1 + Write '1' to disable event routing for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE2 + Write '1' to disable event routing for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE3 + Write '1' to disable event routing for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + COUNTER + Current COUNTER value + 0x504 + read-only + + + COUNTER + Counter value + 0 + 23 + + + + + PRESCALER + 12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)). Must be written when RTC is stopped. + 0x508 + read-write + + + PRESCALER + Prescaler value + 0 + 11 + + + + + 0x4 + 0x4 + CC[%s] + Description collection: Compare register n + 0x540 + read-write + + + COMPARE + Compare value + 0 + 23 + + + + + + + TEMP + Temperature Sensor + 0x4000C000 + + 0 + 0x1000 + registers + + + TEMP + 12 + + TEMP + 0x20 + + + TASKS_START + Start temperature measurement + 0x000 + write-only + + + TASKS_START + Start temperature measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop temperature measurement + 0x004 + write-only + + + TASKS_STOP + Stop temperature measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_DATARDY + Temperature measurement complete, data ready + 0x100 + read-write + + + EVENTS_DATARDY + Temperature measurement complete, data ready + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + DATARDY + Write '1' to enable interrupt for event DATARDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + DATARDY + Write '1' to disable interrupt for event DATARDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + TEMP + Temperature in degC (0.25deg steps) + 0x508 + read-only + int32_t + + + TEMP + Temperature in degC (0.25deg steps) + 0 + 31 + + + + + A0 + Slope of first piecewise linear function + 0x520 + read-write + 0x00000326 + + + A0 + Slope of first piecewise linear function + 0 + 11 + + + + + A1 + Slope of second piecewise linear function + 0x524 + read-write + 0x00000348 + + + A1 + Slope of second piecewise linear function + 0 + 11 + + + + + A2 + Slope of third piecewise linear function + 0x528 + read-write + 0x000003AA + + + A2 + Slope of third piecewise linear function + 0 + 11 + + + + + A3 + Slope of fourth piecewise linear function + 0x52C + read-write + 0x0000040E + + + A3 + Slope of fourth piecewise linear function + 0 + 11 + + + + + A4 + Slope of fifth piecewise linear function + 0x530 + read-write + 0x000004BD + + + A4 + Slope of fifth piecewise linear function + 0 + 11 + + + + + A5 + Slope of sixth piecewise linear function + 0x534 + read-write + 0x000005A3 + + + A5 + Slope of sixth piecewise linear function + 0 + 11 + + + + + B0 + y-intercept of first piecewise linear function + 0x540 + read-write + 0x00003FEF + + + B0 + y-intercept of first piecewise linear function + 0 + 13 + + + + + B1 + y-intercept of second piecewise linear function + 0x544 + read-write + 0x00003FBE + + + B1 + y-intercept of second piecewise linear function + 0 + 13 + + + + + B2 + y-intercept of third piecewise linear function + 0x548 + read-write + 0x00003FBE + + + B2 + y-intercept of third piecewise linear function + 0 + 13 + + + + + B3 + y-intercept of fourth piecewise linear function + 0x54C + read-write + 0x00000012 + + + B3 + y-intercept of fourth piecewise linear function + 0 + 13 + + + + + B4 + y-intercept of fifth piecewise linear function + 0x550 + read-write + 0x00000124 + + + B4 + y-intercept of fifth piecewise linear function + 0 + 13 + + + + + B5 + y-intercept of sixth piecewise linear function + 0x554 + read-write + 0x0000027C + + + B5 + y-intercept of sixth piecewise linear function + 0 + 13 + + + + + T0 + End point of first piecewise linear function + 0x560 + read-write + 0x000000E2 + + + T0 + End point of first piecewise linear function + 0 + 7 + + + + + T1 + End point of second piecewise linear function + 0x564 + read-write + 0x00000000 + + + T1 + End point of second piecewise linear function + 0 + 7 + + + + + T2 + End point of third piecewise linear function + 0x568 + read-write + 0x00000019 + + + T2 + End point of third piecewise linear function + 0 + 7 + + + + + T3 + End point of fourth piecewise linear function + 0x56C + read-write + 0x0000003C + + + T3 + End point of fourth piecewise linear function + 0 + 7 + + + + + T4 + End point of fifth piecewise linear function + 0x570 + read-write + 0x00000050 + + + T4 + End point of fifth piecewise linear function + 0 + 7 + + + + + + + RNG + Random Number Generator + 0x4000D000 + + 0 + 0x1000 + registers + + + RNG + 13 + + RNG + 0x20 + + + TASKS_START + Task starting the random number generator + 0x000 + write-only + + + TASKS_START + Task starting the random number generator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Task stopping the random number generator + 0x004 + write-only + + + TASKS_STOP + Task stopping the random number generator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_VALRDY + Event being generated for every new random number written to the VALUE register + 0x100 + read-write + + + EVENTS_VALRDY + Event being generated for every new random number written to the VALUE register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + VALRDY_STOP + Shortcut between event VALRDY and task STOP + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + VALRDY + Write '1' to enable interrupt for event VALRDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + VALRDY + Write '1' to disable interrupt for event VALRDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + CONFIG + Configuration register + 0x504 + read-write + + + DERCEN + Bias correction + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + + + VALUE + Output random number + 0x508 + read-only + + + VALUE + Generated random number + 0 + 7 + + + + + + + ECB + AES ECB Mode Encryption + 0x4000E000 + + 0 + 0x1000 + registers + + + ECB + 14 + + ECB + 0x20 + + + TASKS_STARTECB + Start ECB block encrypt + 0x000 + write-only + + + TASKS_STARTECB + Start ECB block encrypt + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPECB + Abort a possible executing ECB operation + 0x004 + write-only + + + TASKS_STOPECB + Abort a possible executing ECB operation + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_ENDECB + ECB block encrypt complete + 0x100 + read-write + + + EVENTS_ENDECB + ECB block encrypt complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERRORECB + ECB block encrypt aborted because of a STOPECB task or due to an error + 0x104 + read-write + + + EVENTS_ERRORECB + ECB block encrypt aborted because of a STOPECB task or due to an error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + ENDECB + Write '1' to enable interrupt for event ENDECB + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERRORECB + Write '1' to enable interrupt for event ERRORECB + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + ENDECB + Write '1' to disable interrupt for event ENDECB + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERRORECB + Write '1' to disable interrupt for event ERRORECB + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ECBDATAPTR + ECB block encrypt memory pointers + 0x504 + read-write + + + ECBDATAPTR + Pointer to the ECB data structure (see Table 1 ECB data structure overview) + 0 + 31 + + + + + + + AAR + Accelerated Address Resolver + 0x4000F000 + + 0 + 0x1000 + registers + + + CCM_AAR + 15 + + AAR + 0x20 + + + TASKS_START + Start resolving addresses based on IRKs specified in the IRK data structure + 0x000 + write-only + + + TASKS_START + Start resolving addresses based on IRKs specified in the IRK data structure + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop resolving addresses + 0x008 + write-only + + + TASKS_STOP + Stop resolving addresses + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_END + Address resolution procedure complete + 0x100 + read-write + + + EVENTS_END + Address resolution procedure complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RESOLVED + Address resolved + 0x104 + read-write + + + EVENTS_RESOLVED + Address resolved + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_NOTRESOLVED + Address not resolved + 0x108 + read-write + + + EVENTS_NOTRESOLVED + Address not resolved + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + END + Write '1' to enable interrupt for event END + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RESOLVED + Write '1' to enable interrupt for event RESOLVED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + NOTRESOLVED + Write '1' to enable interrupt for event NOTRESOLVED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + END + Write '1' to disable interrupt for event END + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RESOLVED + Write '1' to disable interrupt for event RESOLVED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + NOTRESOLVED + Write '1' to disable interrupt for event NOTRESOLVED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + STATUS + Resolution status + 0x400 + read-only + + + STATUS + The IRK that was used last time an address was resolved + 0 + 3 + + + + + ENABLE + Enable AAR + 0x500 + read-write + + + ENABLE + Enable or disable AAR + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 3 + + + + + + + NIRK + Number of IRKs + 0x504 + read-write + 0x00000001 + + + NIRK + Number of Identity Root Keys available in the IRK data structure + 0 + 4 + + + + + IRKPTR + Pointer to IRK data structure + 0x508 + read-write + + + IRKPTR + Pointer to the IRK data structure + 0 + 31 + + + + + ADDRPTR + Pointer to the resolvable address + 0x510 + read-write + + + ADDRPTR + Pointer to the resolvable address (6-bytes) + 0 + 31 + + + + + SCRATCHPTR + Pointer to data area used for temporary storage + 0x514 + read-write + + + SCRATCHPTR + Pointer to a scratch data area used for temporary storage during resolution. A space of minimum 3 bytes must be reserved. + 0 + 31 + + + + + + + CCM + AES CCM Mode Encryption + 0x4000F000 + AAR + + 0 + 0x1000 + registers + + + CCM_AAR + 15 + + CCM + 0x20 + + + TASKS_KSGEN + Start generation of keystream. This operation will stop by itself when completed. + 0x000 + write-only + + + TASKS_KSGEN + Start generation of keystream. This operation will stop by itself when completed. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CRYPT + Start encryption/decryption. This operation will stop by itself when completed. + 0x004 + write-only + + + TASKS_CRYPT + Start encryption/decryption. This operation will stop by itself when completed. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop encryption/decryption + 0x008 + write-only + + + TASKS_STOP + Stop encryption/decryption + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RATEOVERRIDE + Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption + 0x00C + write-only + + + TASKS_RATEOVERRIDE + Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_ENDKSGEN + Keystream generation complete + 0x100 + read-write + + + EVENTS_ENDKSGEN + Keystream generation complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDCRYPT + Encrypt/decrypt complete + 0x104 + read-write + + + EVENTS_ENDCRYPT + Encrypt/decrypt complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + Deprecated register - CCM error event + 0x108 + read-write + + + EVENTS_ERROR + Deprecated field - CCM error event + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + ENDKSGEN_CRYPT + Shortcut between event ENDKSGEN and task CRYPT + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + ENDKSGEN + Write '1' to enable interrupt for event ENDKSGEN + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDCRYPT + Write '1' to enable interrupt for event ENDCRYPT + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Deprecated intsetfield - Write '1' to enable interrupt for event ERROR + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + ENDKSGEN + Write '1' to disable interrupt for event ENDKSGEN + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDCRYPT + Write '1' to disable interrupt for event ENDCRYPT + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Deprecated intclrfield - Write '1' to disable interrupt for event ERROR + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + MICSTATUS + MIC check result + 0x400 + read-only + + + MICSTATUS + The result of the MIC check performed during the previous decryption operation + 0 + 0 + + + CheckFailed + MIC check failed + 0 + + + CheckPassed + MIC check passed + 1 + + + + + + + ENABLE + Enable + 0x500 + read-write + + + ENABLE + Enable or disable CCM + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 2 + + + + + + + MODE + Operation mode + 0x504 + read-write + 0x00000001 + + + MODE + The mode of operation to be used. The settings in this register apply whenever either the KSGEN or CRYPT tasks are triggered. + 0 + 0 + + + Encryption + AES CCM packet encryption mode + 0 + + + Decryption + AES CCM packet decryption mode + 1 + + + + + DATARATE + Radio data rate that the CCM shall run synchronous with + 16 + 17 + + + 1Mbit + 1 Mbps + 0 + + + 2Mbit + 2 Mbps + 1 + + + 125Kbps + 125 Kbps + 2 + + + 500Kbps + 500 Kbps + 3 + + + + + LENGTH + Packet length configuration + 24 + 24 + + + Default + Default length. Effective length of LENGTH field in encrypted/decrypted packet is 5 bits. A keystream for packet payloads up to 27 bytes will be generated. + 0 + + + Extended + Extended length. Effective length of LENGTH field in encrypted/decrypted packet is 8 bits. A keystream for packet payloads up to MAXPACKETSIZE bytes will be generated. + 1 + + + + + + + CNFPTR + Pointer to data structure holding AES key and NONCE vector + 0x508 + read-write + + + CNFPTR + Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview) + 0 + 31 + + + + + INPTR + Input pointer + 0x50C + read-write + + + INPTR + Input pointer + 0 + 31 + + + + + OUTPTR + Output pointer + 0x510 + read-write + + + OUTPTR + Output pointer + 0 + 31 + + + + + SCRATCHPTR + Pointer to data area used for temporary storage + 0x514 + read-write + + + SCRATCHPTR + Pointer to a scratch data area used for temporary storage during keystream generation, + MIC generation and encryption/decryption. + 0 + 31 + + + + + MAXPACKETSIZE + Length of keystream generated when MODE.LENGTH = Extended. + 0x518 + read-write + 0x000000FB + + + MAXPACKETSIZE + Length of keystream generated when MODE.LENGTH = Extended. This value must be greater or equal to the subsequent packet payload to be encrypted/decrypted. + 0 + 7 + + + + + RATEOVERRIDE + Data rate override setting. + 0x51C + read-write + 0x00000000 + + + RATEOVERRIDE + Data rate override setting. + 0 + 1 + + + 1Mbit + 1 Mbps + 0 + + + 2Mbit + 2 Mbps + 1 + + + 125Kbps + 125 Kbps + 2 + + + 500Kbps + 500 Kbps + 3 + + + + + + + + + WDT + Watchdog Timer + 0x40010000 + + 0 + 0x1000 + registers + + + WDT + 16 + + WDT + 0x20 + + + TASKS_START + Start the watchdog + 0x000 + write-only + + + TASKS_START + Start the watchdog + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_TIMEOUT + Watchdog timeout + 0x100 + read-write + + + EVENTS_TIMEOUT + Watchdog timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + TIMEOUT + Write '1' to enable interrupt for event TIMEOUT + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + TIMEOUT + Write '1' to disable interrupt for event TIMEOUT + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RUNSTATUS + Run status + 0x400 + read-only + + + RUNSTATUS + Indicates whether or not the watchdog is running + 0 + 0 + + + NotRunning + Watchdog not running + 0 + + + Running + Watchdog is running + 1 + + + + + + + REQSTATUS + Request status + 0x404 + read-only + 0x00000001 + + + RR0 + Request status for RR[0] register + 0 + 0 + + + DisabledOrRequested + RR[0] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[0] register is enabled, and are not yet requesting reload + 1 + + + + + RR1 + Request status for RR[1] register + 1 + 1 + + + DisabledOrRequested + RR[1] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[1] register is enabled, and are not yet requesting reload + 1 + + + + + RR2 + Request status for RR[2] register + 2 + 2 + + + DisabledOrRequested + RR[2] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[2] register is enabled, and are not yet requesting reload + 1 + + + + + RR3 + Request status for RR[3] register + 3 + 3 + + + DisabledOrRequested + RR[3] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[3] register is enabled, and are not yet requesting reload + 1 + + + + + RR4 + Request status for RR[4] register + 4 + 4 + + + DisabledOrRequested + RR[4] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[4] register is enabled, and are not yet requesting reload + 1 + + + + + RR5 + Request status for RR[5] register + 5 + 5 + + + DisabledOrRequested + RR[5] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[5] register is enabled, and are not yet requesting reload + 1 + + + + + RR6 + Request status for RR[6] register + 6 + 6 + + + DisabledOrRequested + RR[6] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[6] register is enabled, and are not yet requesting reload + 1 + + + + + RR7 + Request status for RR[7] register + 7 + 7 + + + DisabledOrRequested + RR[7] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[7] register is enabled, and are not yet requesting reload + 1 + + + + + + + CRV + Counter reload value + 0x504 + read-write + 0xFFFFFFFF + + + CRV + Counter reload value in number of cycles of the 32.768 kHz clock + 0 + 31 + + + + + RREN + Enable register for reload request registers + 0x508 + read-write + 0x00000001 + + + RR0 + Enable or disable RR[0] register + 0 + 0 + + + Disabled + Disable RR[0] register + 0 + + + Enabled + Enable RR[0] register + 1 + + + + + RR1 + Enable or disable RR[1] register + 1 + 1 + + + Disabled + Disable RR[1] register + 0 + + + Enabled + Enable RR[1] register + 1 + + + + + RR2 + Enable or disable RR[2] register + 2 + 2 + + + Disabled + Disable RR[2] register + 0 + + + Enabled + Enable RR[2] register + 1 + + + + + RR3 + Enable or disable RR[3] register + 3 + 3 + + + Disabled + Disable RR[3] register + 0 + + + Enabled + Enable RR[3] register + 1 + + + + + RR4 + Enable or disable RR[4] register + 4 + 4 + + + Disabled + Disable RR[4] register + 0 + + + Enabled + Enable RR[4] register + 1 + + + + + RR5 + Enable or disable RR[5] register + 5 + 5 + + + Disabled + Disable RR[5] register + 0 + + + Enabled + Enable RR[5] register + 1 + + + + + RR6 + Enable or disable RR[6] register + 6 + 6 + + + Disabled + Disable RR[6] register + 0 + + + Enabled + Enable RR[6] register + 1 + + + + + RR7 + Enable or disable RR[7] register + 7 + 7 + + + Disabled + Disable RR[7] register + 0 + + + Enabled + Enable RR[7] register + 1 + + + + + + + CONFIG + Configuration register + 0x50C + read-write + 0x00000001 + + + SLEEP + Configure the watchdog to either be paused, or kept running, while the CPU is sleeping + 0 + 0 + + + Pause + Pause watchdog while the CPU is sleeping + 0 + + + Run + Keep the watchdog running while the CPU is sleeping + 1 + + + + + HALT + Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger + 3 + 3 + + + Pause + Pause watchdog while the CPU is halted by the debugger + 0 + + + Run + Keep the watchdog running while the CPU is halted by the debugger + 1 + + + + + + + 0x8 + 0x4 + RR[%s] + Description collection: Reload request n + 0x600 + write-only + + + RR + Reload request register + 0 + 31 + + + Reload + Value to request a reload of the watchdog timer + 0x6E524635 + + + + + + + + + RTC1 + Real time counter 1 + 0x40011000 + + RTC1 + 17 + + + + QDEC + Quadrature Decoder + 0x40012000 + + 0 + 0x1000 + registers + + + QDEC + 18 + + QDEC + 0x20 + + + TASKS_START + Task starting the quadrature decoder + 0x000 + write-only + + + TASKS_START + Task starting the quadrature decoder + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Task stopping the quadrature decoder + 0x004 + write-only + + + TASKS_STOP + Task stopping the quadrature decoder + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_READCLRACC + Read and clear ACC and ACCDBL + 0x008 + write-only + + + TASKS_READCLRACC + Read and clear ACC and ACCDBL + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RDCLRACC + Read and clear ACC + 0x00C + write-only + + + TASKS_RDCLRACC + Read and clear ACC + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RDCLRDBL + Read and clear ACCDBL + 0x010 + write-only + + + TASKS_RDCLRDBL + Read and clear ACCDBL + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_SAMPLERDY + Event being generated for every new sample value written to the SAMPLE register + 0x100 + read-write + + + EVENTS_SAMPLERDY + Event being generated for every new sample value written to the SAMPLE register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_REPORTRDY + Non-null report ready + 0x104 + read-write + + + EVENTS_REPORTRDY + Non-null report ready + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ACCOF + ACC or ACCDBL register overflow + 0x108 + read-write + + + EVENTS_ACCOF + ACC or ACCDBL register overflow + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DBLRDY + Double displacement(s) detected + 0x10C + read-write + + + EVENTS_DBLRDY + Double displacement(s) detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + QDEC has been stopped + 0x110 + read-write + + + EVENTS_STOPPED + QDEC has been stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + REPORTRDY_READCLRACC + Shortcut between event REPORTRDY and task READCLRACC + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + SAMPLERDY_STOP + Shortcut between event SAMPLERDY and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + REPORTRDY_RDCLRACC + Shortcut between event REPORTRDY and task RDCLRACC + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + REPORTRDY_STOP + Shortcut between event REPORTRDY and task STOP + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DBLRDY_RDCLRDBL + Shortcut between event DBLRDY and task RDCLRDBL + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DBLRDY_STOP + Shortcut between event DBLRDY and task STOP + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + SAMPLERDY_READCLRACC + Shortcut between event SAMPLERDY and task READCLRACC + 6 + 6 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + SAMPLERDY + Write '1' to enable interrupt for event SAMPLERDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REPORTRDY + Write '1' to enable interrupt for event REPORTRDY + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ACCOF + Write '1' to enable interrupt for event ACCOF + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DBLRDY + Write '1' to enable interrupt for event DBLRDY + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + SAMPLERDY + Write '1' to disable interrupt for event SAMPLERDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REPORTRDY + Write '1' to disable interrupt for event REPORTRDY + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ACCOF + Write '1' to disable interrupt for event ACCOF + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DBLRDY + Write '1' to disable interrupt for event DBLRDY + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + Enable the quadrature decoder + 0x500 + read-write + + + ENABLE + Enable or disable the quadrature decoder + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + LEDPOL + LED output pin polarity + 0x504 + read-write + + + LEDPOL + LED output pin polarity + 0 + 0 + + + ActiveLow + Led active on output pin low + 0 + + + ActiveHigh + Led active on output pin high + 1 + + + + + + + SAMPLEPER + Sample period + 0x508 + read-write + + + SAMPLEPER + Sample period. The SAMPLE register will be updated for every new sample + 0 + 3 + + + 128us + 128 us + 0 + + + 256us + 256 us + 1 + + + 512us + 512 us + 2 + + + 1024us + 1024 us + 3 + + + 2048us + 2048 us + 4 + + + 4096us + 4096 us + 5 + + + 8192us + 8192 us + 6 + + + 16384us + 16384 us + 7 + + + 32ms + 32768 us + 8 + + + 65ms + 65536 us + 9 + + + 131ms + 131072 us + 10 + + + + + + + SAMPLE + Motion sample value + 0x50C + read-only + int32_t + + + SAMPLE + Last motion sample + 0 + 31 + + + + + REPORTPER + Number of samples to be taken before REPORTRDY and DBLRDY events can be generated + 0x510 + read-write + + + REPORTPER + Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated. + 0 + 3 + + + 10Smpl + 10 samples/report + 0 + + + 40Smpl + 40 samples/report + 1 + + + 80Smpl + 80 samples/report + 2 + + + 120Smpl + 120 samples/report + 3 + + + 160Smpl + 160 samples/report + 4 + + + 200Smpl + 200 samples/report + 5 + + + 240Smpl + 240 samples/report + 6 + + + 280Smpl + 280 samples/report + 7 + + + 1Smpl + 1 sample/report + 8 + + + + + + + ACC + Register accumulating the valid transitions + 0x514 + read-only + int32_t + + + ACC + Register accumulating all valid samples (not double transition) read from the SAMPLE register. + 0 + 31 + + + + + ACCREAD + Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task + 0x518 + read-only + int32_t + + + ACCREAD + Snapshot of the ACC register. + 0 + 31 + + + + + PSEL + Unspecified + QDEC_PSEL + read-write + 0x51C + + LED + Pin select for LED signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + A + Pin select for A signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + B + Pin select for B signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + DBFEN + Enable input debounce filters + 0x528 + read-write + + + DBFEN + Enable input debounce filters + 0 + 0 + + + Disabled + Debounce input filters disabled + 0 + + + Enabled + Debounce input filters enabled + 1 + + + + + + + LEDPRE + Time period the LED is switched ON prior to sampling + 0x540 + read-write + 0x00000010 + + + LEDPRE + Period in us the LED is switched on prior to sampling + 0 + 8 + + + + + ACCDBL + Register accumulating the number of detected double transitions + 0x544 + read-only + + + ACCDBL + Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ). + 0 + 3 + + + + + ACCDBLREAD + Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task + 0x548 + read-only + + + ACCDBLREAD + Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered. + 0 + 3 + + + + + + + COMP + Comparator + 0x40013000 + + 0 + 0x1000 + registers + + + COMP_LPCOMP + 19 + + COMP + 0x20 + + + TASKS_START + Start comparator + 0x000 + write-only + + + TASKS_START + Start comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop comparator + 0x004 + write-only + + + TASKS_STOP + Stop comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SAMPLE + Sample comparator value + 0x008 + write-only + + + TASKS_SAMPLE + Sample comparator value + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + COMP is ready and output is valid + 0x100 + read-write + + + EVENTS_READY + COMP is ready and output is valid + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DOWN + Downward crossing + 0x104 + read-write + + + EVENTS_DOWN + Downward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_UP + Upward crossing + 0x108 + read-write + + + EVENTS_UP + Upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CROSS + Downward or upward crossing + 0x10C + read-write + + + EVENTS_CROSS + Downward or upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + READY_SAMPLE + Shortcut between event READY and task SAMPLE + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READY_STOP + Shortcut between event READY and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DOWN_STOP + Shortcut between event DOWN and task STOP + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + UP_STOP + Shortcut between event UP and task STOP + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CROSS_STOP + Shortcut between event CROSS and task STOP + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + READY + Enable or disable interrupt for event READY + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + DOWN + Enable or disable interrupt for event DOWN + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + UP + Enable or disable interrupt for event UP + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CROSS + Enable or disable interrupt for event CROSS + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DOWN + Write '1' to enable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + UP + Write '1' to enable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CROSS + Write '1' to enable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DOWN + Write '1' to disable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + UP + Write '1' to disable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CROSS + Write '1' to disable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RESULT + Compare result + 0x400 + read-only + + + RESULT + Result of last compare. Decision point SAMPLE task. + 0 + 0 + + + Below + Input voltage is below the threshold (VIN+ &lt; VIN-) + 0 + + + Above + Input voltage is above the threshold (VIN+ &gt; VIN-) + 1 + + + + + + + ENABLE + COMP enable + 0x500 + read-write + + + ENABLE + Enable or disable COMP + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 2 + + + + + + + PSEL + Pin select + 0x504 + read-write + + + PSEL + Analog pin select + 0 + 2 + + + AnalogInput0 + AIN0 selected as analog input + 0 + + + AnalogInput1 + AIN1 selected as analog input + 1 + + + AnalogInput2 + AIN2 selected as analog input + 2 + + + AnalogInput3 + AIN3 selected as analog input + 3 + + + AnalogInput4 + AIN4 selected as analog input + 4 + + + AnalogInput5 + AIN5 selected as analog input + 5 + + + AnalogInput6 + AIN6 selected as analog input + 6 + + + AnalogInput7 + AIN7 selected as analog input + 7 + + + + + + + REFSEL + Reference source select for single-ended mode + 0x508 + read-write + 0x00000004 + + + REFSEL + Reference select + 0 + 2 + + + Int1V2 + VREF = internal 1.2 V reference (VDD &gt;= 1.7 V) + 0 + + + Int1V8 + VREF = internal 1.8 V reference (VDD &gt;= VREF + 0.2 V) + 1 + + + Int2V4 + VREF = internal 2.4 V reference (VDD &gt;= VREF + 0.2 V) + 2 + + + VDD + VREF = VDD + 4 + + + ARef + VREF = AREF + 5 + + + + + + + EXTREFSEL + External reference select + 0x50C + read-write + + + EXTREFSEL + External analog reference select + 0 + 2 + + + AnalogReference0 + Use AIN0 as external analog reference + 0 + + + AnalogReference1 + Use AIN1 as external analog reference + 1 + + + AnalogReference2 + Use AIN2 as external analog reference + 2 + + + AnalogReference3 + Use AIN3 as external analog reference + 3 + + + AnalogReference4 + Use AIN4 as external analog reference + 4 + + + AnalogReference5 + Use AIN5 as external analog reference + 5 + + + AnalogReference6 + Use AIN6 as external analog reference + 6 + + + AnalogReference7 + Use AIN7 as external analog reference + 7 + + + + + + + TH + Threshold configuration for hysteresis unit + 0x530 + read-write + 0x00000000 + + + THDOWN + VDOWN = (THDOWN+1)/64*VREF + 0 + 5 + + + THUP + VUP = (THUP+1)/64*VREF + 8 + 13 + + + + + MODE + Mode configuration + 0x534 + read-write + + + SP + Speed and power modes + 0 + 1 + + + Low + Low-power mode + 0 + + + Normal + Normal mode + 1 + + + High + High-speed mode + 2 + + + + + MAIN + Main operation modes + 8 + 8 + + + SE + Single-ended mode + 0 + + + Diff + Differential mode + 1 + + + + + + + HYST + Comparator hysteresis enable + 0x538 + read-write + + + HYST + Comparator hysteresis + 0 + 0 + + + NoHyst + Comparator hysteresis disabled + 0 + + + Hyst50mV + Comparator hysteresis enabled + 1 + + + + + + + + + LPCOMP + Low-power comparator + 0x40013000 + COMP + + 0 + 0x1000 + registers + + + COMP_LPCOMP + 19 + + LPCOMP + 0x20 + + + TASKS_START + Start comparator + 0x000 + write-only + + + TASKS_START + Start comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop comparator + 0x004 + write-only + + + TASKS_STOP + Stop comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SAMPLE + Sample comparator value + 0x008 + write-only + + + TASKS_SAMPLE + Sample comparator value + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + LPCOMP is ready and output is valid + 0x100 + read-write + + + EVENTS_READY + LPCOMP is ready and output is valid + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DOWN + Downward crossing + 0x104 + read-write + + + EVENTS_DOWN + Downward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_UP + Upward crossing + 0x108 + read-write + + + EVENTS_UP + Upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CROSS + Downward or upward crossing + 0x10C + read-write + + + EVENTS_CROSS + Downward or upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + READY_SAMPLE + Shortcut between event READY and task SAMPLE + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READY_STOP + Shortcut between event READY and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DOWN_STOP + Shortcut between event DOWN and task STOP + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + UP_STOP + Shortcut between event UP and task STOP + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CROSS_STOP + Shortcut between event CROSS and task STOP + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DOWN + Write '1' to enable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + UP + Write '1' to enable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CROSS + Write '1' to enable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DOWN + Write '1' to disable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + UP + Write '1' to disable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CROSS + Write '1' to disable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RESULT + Compare result + 0x400 + read-only + + + RESULT + Result of last compare. Decision point SAMPLE task. + 0 + 0 + + + Below + Input voltage is below the reference threshold (VIN+ &lt; VIN-) + 0 + + + Above + Input voltage is above the reference threshold (VIN+ &gt; VIN-) + 1 + + + + + + + ENABLE + Enable LPCOMP + 0x500 + read-write + + + ENABLE + Enable or disable LPCOMP + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + PSEL + Input pin select + 0x504 + read-write + + + PSEL + Analog pin select + 0 + 2 + + + AnalogInput0 + AIN0 selected as analog input + 0 + + + AnalogInput1 + AIN1 selected as analog input + 1 + + + AnalogInput2 + AIN2 selected as analog input + 2 + + + AnalogInput3 + AIN3 selected as analog input + 3 + + + AnalogInput4 + AIN4 selected as analog input + 4 + + + AnalogInput5 + AIN5 selected as analog input + 5 + + + AnalogInput6 + AIN6 selected as analog input + 6 + + + AnalogInput7 + AIN7 selected as analog input + 7 + + + + + + + REFSEL + Reference select + 0x508 + read-write + 0x00000004 + + + REFSEL + Reference select + 0 + 3 + + + Ref1_8Vdd + VDD * 1/8 selected as reference + 0 + + + Ref2_8Vdd + VDD * 2/8 selected as reference + 1 + + + Ref3_8Vdd + VDD * 3/8 selected as reference + 2 + + + Ref4_8Vdd + VDD * 4/8 selected as reference + 3 + + + Ref5_8Vdd + VDD * 5/8 selected as reference + 4 + + + Ref6_8Vdd + VDD * 6/8 selected as reference + 5 + + + Ref7_8Vdd + VDD * 7/8 selected as reference + 6 + + + ARef + External analog reference selected + 7 + + + Ref1_16Vdd + VDD * 1/16 selected as reference + 8 + + + Ref3_16Vdd + VDD * 3/16 selected as reference + 9 + + + Ref5_16Vdd + VDD * 5/16 selected as reference + 10 + + + Ref7_16Vdd + VDD * 7/16 selected as reference + 11 + + + Ref9_16Vdd + VDD * 9/16 selected as reference + 12 + + + Ref11_16Vdd + VDD * 11/16 selected as reference + 13 + + + Ref13_16Vdd + VDD * 13/16 selected as reference + 14 + + + Ref15_16Vdd + VDD * 15/16 selected as reference + 15 + + + + + + + EXTREFSEL + External reference select + 0x50C + read-write + + + EXTREFSEL + External analog reference select + 0 + 0 + + + AnalogReference0 + Use AIN0 as external analog reference + 0 + + + AnalogReference1 + Use AIN1 as external analog reference + 1 + + + + + + + ANADETECT + Analog detect configuration + 0x520 + read-write + + + ANADETECT + Analog detect configuration + 0 + 1 + + + Cross + Generate ANADETECT on crossing, both upward crossing and downward crossing + 0 + + + Up + Generate ANADETECT on upward crossing only + 1 + + + Down + Generate ANADETECT on downward crossing only + 2 + + + + + + + HYST + Comparator hysteresis enable + 0x538 + read-write + + + HYST + Comparator hysteresis enable + 0 + 0 + + + Disabled + Comparator hysteresis disabled + 0 + + + Enabled + Comparator hysteresis enabled + 1 + + + + + + + + + EGU0 + Event generator unit 0 + 0x40014000 + EGU + + 0 + 0x1000 + registers + + + SWI0_EGU0 + 20 + + EGU + 0x20 + + + 0x10 + 0x4 + TASKS_TRIGGER[%s] + Description collection: Trigger n for triggering the corresponding TRIGGERED[n] event + 0x000 + write-only + + + TASKS_TRIGGER + Trigger n for triggering the corresponding TRIGGERED[n] event + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x10 + 0x4 + EVENTS_TRIGGERED[%s] + Description collection: Event number n generated by triggering the corresponding TRIGGER[n] task + 0x100 + read-write + + + EVENTS_TRIGGERED + Event number n generated by triggering the corresponding TRIGGER[n] task + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + TRIGGERED0 + Enable or disable interrupt for event TRIGGERED[0] + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED1 + Enable or disable interrupt for event TRIGGERED[1] + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED2 + Enable or disable interrupt for event TRIGGERED[2] + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED3 + Enable or disable interrupt for event TRIGGERED[3] + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED4 + Enable or disable interrupt for event TRIGGERED[4] + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED5 + Enable or disable interrupt for event TRIGGERED[5] + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED6 + Enable or disable interrupt for event TRIGGERED[6] + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED7 + Enable or disable interrupt for event TRIGGERED[7] + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED8 + Enable or disable interrupt for event TRIGGERED[8] + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED9 + Enable or disable interrupt for event TRIGGERED[9] + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED10 + Enable or disable interrupt for event TRIGGERED[10] + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED11 + Enable or disable interrupt for event TRIGGERED[11] + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED12 + Enable or disable interrupt for event TRIGGERED[12] + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED13 + Enable or disable interrupt for event TRIGGERED[13] + 13 + 13 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED14 + Enable or disable interrupt for event TRIGGERED[14] + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED15 + Enable or disable interrupt for event TRIGGERED[15] + 15 + 15 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + TRIGGERED0 + Write '1' to enable interrupt for event TRIGGERED[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED1 + Write '1' to enable interrupt for event TRIGGERED[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED2 + Write '1' to enable interrupt for event TRIGGERED[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED3 + Write '1' to enable interrupt for event TRIGGERED[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED4 + Write '1' to enable interrupt for event TRIGGERED[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED5 + Write '1' to enable interrupt for event TRIGGERED[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED6 + Write '1' to enable interrupt for event TRIGGERED[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED7 + Write '1' to enable interrupt for event TRIGGERED[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED8 + Write '1' to enable interrupt for event TRIGGERED[8] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED9 + Write '1' to enable interrupt for event TRIGGERED[9] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED10 + Write '1' to enable interrupt for event TRIGGERED[10] + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED11 + Write '1' to enable interrupt for event TRIGGERED[11] + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED12 + Write '1' to enable interrupt for event TRIGGERED[12] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED13 + Write '1' to enable interrupt for event TRIGGERED[13] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED14 + Write '1' to enable interrupt for event TRIGGERED[14] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED15 + Write '1' to enable interrupt for event TRIGGERED[15] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + TRIGGERED0 + Write '1' to disable interrupt for event TRIGGERED[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED1 + Write '1' to disable interrupt for event TRIGGERED[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED2 + Write '1' to disable interrupt for event TRIGGERED[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED3 + Write '1' to disable interrupt for event TRIGGERED[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED4 + Write '1' to disable interrupt for event TRIGGERED[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED5 + Write '1' to disable interrupt for event TRIGGERED[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED6 + Write '1' to disable interrupt for event TRIGGERED[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED7 + Write '1' to disable interrupt for event TRIGGERED[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED8 + Write '1' to disable interrupt for event TRIGGERED[8] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED9 + Write '1' to disable interrupt for event TRIGGERED[9] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED10 + Write '1' to disable interrupt for event TRIGGERED[10] + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED11 + Write '1' to disable interrupt for event TRIGGERED[11] + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED12 + Write '1' to disable interrupt for event TRIGGERED[12] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED13 + Write '1' to disable interrupt for event TRIGGERED[13] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED14 + Write '1' to disable interrupt for event TRIGGERED[14] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED15 + Write '1' to disable interrupt for event TRIGGERED[15] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + + + SWI0 + Software interrupt 0 + 0x40014000 + EGU0 + SWI + + 0 + 0x1000 + registers + + + SWI0_EGU0 + 20 + + SWI + 0x20 + + + UNUSED + Unused. + 0x000 + 0x00000000 + read-only + + + + + EGU1 + Event generator unit 1 + 0x40015000 + + SWI1_EGU1 + 21 + + + + SWI1 + Software interrupt 1 + 0x40015000 + EGU1 + + SWI1_EGU1 + 21 + + + + EGU2 + Event generator unit 2 + 0x40016000 + + SWI2_EGU2 + 22 + + + + SWI2 + Software interrupt 2 + 0x40016000 + EGU2 + + SWI2_EGU2 + 22 + + + + EGU3 + Event generator unit 3 + 0x40017000 + + SWI3_EGU3 + 23 + + + + SWI3 + Software interrupt 3 + 0x40017000 + EGU3 + + SWI3_EGU3 + 23 + + + + EGU4 + Event generator unit 4 + 0x40018000 + + SWI4_EGU4 + 24 + + + + SWI4 + Software interrupt 4 + 0x40018000 + EGU4 + + SWI4_EGU4 + 24 + + + + EGU5 + Event generator unit 5 + 0x40019000 + + SWI5_EGU5 + 25 + + + + SWI5 + Software interrupt 5 + 0x40019000 + EGU5 + + SWI5_EGU5 + 25 + + + + TIMER3 + Timer/Counter 3 + 0x4001A000 + + TIMER3 + 26 + + + + TIMER4 + Timer/Counter 4 + 0x4001B000 + + TIMER4 + 27 + + + + PWM0 + Pulse width modulation unit 0 + 0x4001C000 + PWM + + 0 + 0x1000 + registers + + + PWM0 + 28 + + PWM + 0x20 + + + TASKS_STOP + Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback + 0x004 + write-only + + + TASKS_STOP + Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x2 + 0x4 + TASKS_SEQSTART[%s] + Description collection: Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running. + 0x008 + write-only + + + TASKS_SEQSTART + Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_NEXTSTEP + Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running. + 0x010 + write-only + + + TASKS_NEXTSTEP + Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + Response to STOP task, emitted when PWM pulses are no longer generated + 0x104 + read-write + + + EVENTS_STOPPED + Response to STOP task, emitted when PWM pulses are no longer generated + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x2 + 0x4 + EVENTS_SEQSTARTED[%s] + Description collection: First PWM period started on sequence n + 0x108 + read-write + + + EVENTS_SEQSTARTED + First PWM period started on sequence n + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x2 + 0x4 + EVENTS_SEQEND[%s] + Description collection: Emitted at end of every sequence n, when last value from RAM has been applied to wave counter + 0x110 + read-write + + + EVENTS_SEQEND + Emitted at end of every sequence n, when last value from RAM has been applied to wave counter + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PWMPERIODEND + Emitted at the end of each PWM period + 0x118 + read-write + + + EVENTS_PWMPERIODEND + Emitted at the end of each PWM period + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LOOPSDONE + Concatenated sequences have been played the amount of times defined in LOOP.CNT + 0x11C + read-write + + + EVENTS_LOOPSDONE + Concatenated sequences have been played the amount of times defined in LOOP.CNT + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + SEQEND0_STOP + Shortcut between event SEQEND[0] and task STOP + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + SEQEND1_STOP + Shortcut between event SEQEND[1] and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LOOPSDONE_SEQSTART0 + Shortcut between event LOOPSDONE and task SEQSTART[0] + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LOOPSDONE_SEQSTART1 + Shortcut between event LOOPSDONE and task SEQSTART[1] + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LOOPSDONE_STOP + Shortcut between event LOOPSDONE and task STOP + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQSTARTED0 + Enable or disable interrupt for event SEQSTARTED[0] + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQSTARTED1 + Enable or disable interrupt for event SEQSTARTED[1] + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQEND0 + Enable or disable interrupt for event SEQEND[0] + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQEND1 + Enable or disable interrupt for event SEQEND[1] + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PWMPERIODEND + Enable or disable interrupt for event PWMPERIODEND + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + LOOPSDONE + Enable or disable interrupt for event LOOPSDONE + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQSTARTED0 + Write '1' to enable interrupt for event SEQSTARTED[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQSTARTED1 + Write '1' to enable interrupt for event SEQSTARTED[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQEND0 + Write '1' to enable interrupt for event SEQEND[0] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQEND1 + Write '1' to enable interrupt for event SEQEND[1] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PWMPERIODEND + Write '1' to enable interrupt for event PWMPERIODEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LOOPSDONE + Write '1' to enable interrupt for event LOOPSDONE + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQSTARTED0 + Write '1' to disable interrupt for event SEQSTARTED[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQSTARTED1 + Write '1' to disable interrupt for event SEQSTARTED[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQEND0 + Write '1' to disable interrupt for event SEQEND[0] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQEND1 + Write '1' to disable interrupt for event SEQEND[1] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PWMPERIODEND + Write '1' to disable interrupt for event PWMPERIODEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LOOPSDONE + Write '1' to disable interrupt for event LOOPSDONE + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + PWM module enable register + 0x500 + read-write + 0x00000000 + + + ENABLE + Enable or disable PWM module + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enable + 1 + + + + + + + MODE + Selects operating mode of the wave counter + 0x504 + read-write + 0x00000000 + + + UPDOWN + Selects up mode or up-and-down mode for the counter + 0 + 0 + + + Up + Up counter, edge-aligned PWM duty cycle + 0 + + + UpAndDown + Up and down counter, center-aligned PWM duty cycle + 1 + + + + + + + COUNTERTOP + Value up to which the pulse generator counter counts + 0x508 + read-write + 0x000003FF + + + COUNTERTOP + Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM are used. + 0 + 14 + + + + + PRESCALER + Configuration for PWM_CLK + 0x50C + read-write + 0x00000000 + + + PRESCALER + Prescaler of PWM_CLK + 0 + 2 + + + DIV_1 + Divide by 1 (16 MHz) + 0 + + + DIV_2 + Divide by 2 (8 MHz) + 1 + + + DIV_4 + Divide by 4 (4 MHz) + 2 + + + DIV_8 + Divide by 8 (2 MHz) + 3 + + + DIV_16 + Divide by 16 (1 MHz) + 4 + + + DIV_32 + Divide by 32 (500 kHz) + 5 + + + DIV_64 + Divide by 64 (250 kHz) + 6 + + + DIV_128 + Divide by 128 (125 kHz) + 7 + + + + + + + DECODER + Configuration of the decoder + 0x510 + read-write + 0x00000000 + + + LOAD + How a sequence is read from RAM and spread to the compare register + 0 + 1 + + + Common + 1st half word (16-bit) used in all PWM channels 0..3 + 0 + + + Grouped + 1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3 + 1 + + + Individual + 1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3 + 2 + + + WaveForm + 1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP + 3 + + + + + MODE + Selects source for advancing the active sequence + 8 + 8 + + + RefreshCount + SEQ[n].REFRESH is used to determine loading internal compare registers + 0 + + + NextStep + NEXTSTEP task causes a new value to be loaded to internal compare registers + 1 + + + + + + + LOOP + Number of playbacks of a loop + 0x514 + read-write + 0x00000000 + + + CNT + Number of playbacks of pattern cycles + 0 + 15 + + + Disabled + Looping disabled (stop at the end of the sequence) + 0 + + + + + + + 2 + 0x020 + SEQ[%s] + Unspecified + PWM_SEQ + read-write + 0x520 + + PTR + Description cluster: Beginning address in RAM of this sequence + 0x000 + read-write + 0x00000000 + + + PTR + Beginning address in RAM of this sequence + 0 + 31 + + + + + CNT + Description cluster: Number of values (duty cycles) in this sequence + 0x004 + read-write + 0x00000000 + + + CNT + Number of values (duty cycles) in this sequence + 0 + 14 + + + Disabled + Sequence is disabled, and shall not be started as it is empty + 0 + + + + + + + REFRESH + Description cluster: Number of additional PWM periods between samples loaded into compare register + 0x008 + read-write + 0x00000001 + + + CNT + Number of additional PWM periods between samples loaded into compare register (load every REFRESH.CNT+1 PWM periods) + 0 + 23 + + + Continuous + Update every PWM period + 0 + + + + + + + ENDDELAY + Description cluster: Time added after the sequence + 0x00C + read-write + 0x00000000 + + + CNT + Time added after the sequence in PWM periods + 0 + 23 + + + + + + PSEL + Unspecified + PWM_PSEL + read-write + 0x560 + + 0x4 + 0x4 + OUT[%s] + Description collection: Output pin select for PWM channel n + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + + + PDM + Pulse Density Modulation (Digital Microphone) Interface + 0x4001D000 + + 0 + 0x1000 + registers + + + PDM + 29 + + PDM + 0x20 + + + TASKS_START + Starts continuous PDM transfer + 0x000 + write-only + + + TASKS_START + Starts continuous PDM transfer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stops PDM transfer + 0x004 + write-only + + + TASKS_STOP + Stops PDM transfer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STARTED + PDM transfer has started + 0x100 + read-write + + + EVENTS_STARTED + PDM transfer has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + PDM transfer has finished + 0x104 + read-write + + + EVENTS_STOPPED + PDM transfer has finished + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM + 0x108 + read-write + + + EVENTS_END + The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STARTED + Enable or disable interrupt for event STARTED + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + END + Enable or disable interrupt for event END + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STARTED + Write '1' to enable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STARTED + Write '1' to disable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + PDM module enable register + 0x500 + read-write + 0x00000000 + + + ENABLE + Enable or disable PDM module + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + PDMCLKCTRL + PDM clock generator control + 0x504 + read-write + 0x08400000 + + + FREQ + PDM_CLK frequency configuration + 0 + 31 + + + 1000K + PDM_CLK = 32 MHz / 32 = 1.000 MHz + 0x08000000 + + + Default + PDM_CLK = 32 MHz / 31 = 1.032 MHz. Nominal clock for RATIO=Ratio64. + 0x08400000 + + + 1067K + PDM_CLK = 32 MHz / 30 = 1.067 MHz + 0x08800000 + + + 1231K + PDM_CLK = 32 MHz / 26 = 1.231 MHz + 0x09800000 + + + 1280K + PDM_CLK = 32 MHz / 25 = 1.280 MHz. Nominal clock for RATIO=Ratio80. + 0x0A000000 + + + 1333K + PDM_CLK = 32 MHz / 24 = 1.333 MHz + 0x0A800000 + + + + + + + MODE + Defines the routing of the connected PDM microphones' signals + 0x508 + read-write + 0x00000000 + + + OPERATION + Mono or stereo operation + 0 + 0 + + + Stereo + Sample and store one pair (left + right) of 16-bit samples per RAM word R=[31:16]; L=[15:0] + 0 + + + Mono + Sample and store two successive left samples (16 bits each) per RAM word L1=[31:16]; L0=[15:0] + 1 + + + + + EDGE + Defines on which PDM_CLK edge left (or mono) is sampled + 1 + 1 + + + LeftFalling + Left (or mono) is sampled on falling edge of PDM_CLK + 0 + + + LeftRising + Left (or mono) is sampled on rising edge of PDM_CLK + 1 + + + + + + + GAINL + Left output gain adjustment + 0x518 + read-write + 0x00000028 + + + GAINL + Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00 -20 dB gain adjust 0x01 -19.5 dB gain adjust (...) 0x27 -0.5 dB gain adjust 0x28 0 dB gain adjust 0x29 +0.5 dB gain adjust (...) 0x4F +19.5 dB gain adjust 0x50 +20 dB gain adjust + 0 + 6 + + + MinGain + -20 dB gain adjustment (minimum) + 0x00 + + + DefaultGain + 0 dB gain adjustment + 0x28 + + + MaxGain + +20 dB gain adjustment (maximum) + 0x50 + + + + + + + GAINR + Right output gain adjustment + 0x51C + read-write + 0x00000028 + + + GAINR + Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) + 0 + 6 + + + MinGain + -20 dB gain adjustment (minimum) + 0x00 + + + DefaultGain + 0 dB gain adjustment + 0x28 + + + MaxGain + +20 dB gain adjustment (maximum) + 0x50 + + + + + + + RATIO + Selects the ratio between PDM_CLK and output sample rate. Change PDMCLKCTRL accordingly. + 0x520 + read-write + 0x00000000 + + + RATIO + Selects the ratio between PDM_CLK and output sample rate + 0 + 0 + + + Ratio64 + Ratio of 64 + 0 + + + Ratio80 + Ratio of 80 + 1 + + + + + + + PSEL + Unspecified + PDM_PSEL + read-write + 0x540 + + CLK + Pin number configuration for PDM CLK signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + DIN + Pin number configuration for PDM DIN signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + SAMPLE + Unspecified + PDM_SAMPLE + read-write + 0x560 + + PTR + RAM address pointer to write samples to with EasyDMA + 0x000 + read-write + + + SAMPLEPTR + Address to write PDM samples to over DMA + 0 + 31 + + + + + MAXCNT + Number of samples to allocate memory for in EasyDMA mode + 0x004 + read-write + + + BUFFSIZE + Length of DMA RAM allocation in number of samples + 0 + 14 + + + + + + + + ACL + Access control lists + 0x4001E000 + + 0 + 0x1000 + registers + + ACL + 0x20 + + + 8 + 0x010 + ACL[%s] + Unspecified + ACL_ACL + read-write + 0x800 + + ADDR + Description cluster: Start address of region to protect. The start address must be word-aligned. + 0x000 + read-writeonce + 0x00000000 + + + ADDR + Start address of flash region n. The start address must point to a flash page boundary. + 0 + 31 + + + + + SIZE + Description cluster: Size of region to protect counting from address ACL[n].ADDR. Write '0' as no effect. + 0x004 + read-writeonce + 0x00000000 + + + SIZE + Size of flash region n in bytes. Must be a multiple of the flash page size. + 0 + 31 + + + + + PERM + Description cluster: Access permissions for region n as defined by start address ACL[n].ADDR and size ACL[n].SIZE + 0x008 + read-writeonce + 0x00000000 + + + WRITE + Configure write and erase permissions for region n. Write '0' has no effect. + 1 + 1 + + + Enable + Allow write and erase instructions to region n + 0 + + + Disable + Block write and erase instructions to region n + 1 + + + + + READ + Configure read permissions for region n. Write '0' has no effect. + 2 + 2 + + + Enable + Allow read instructions to region n + 0 + + + Disable + Block read instructions to region n + 1 + + + + + + + + + + NVMC + Non Volatile Memory Controller + 0x4001E000 + ACL + + 0 + 0x1000 + registers + + NVMC + 0x20 + + + READY + Ready flag + 0x400 + read-only + 0x00000001 + + + READY + NVMC is ready or busy + 0 + 0 + + + Busy + NVMC is busy (on-going write or erase operation) + 0 + + + Ready + NVMC is ready + 1 + + + + + + + READYNEXT + Ready flag + 0x408 + read-only + 0x00000001 + + + READYNEXT + NVMC can accept a new write operation + 0 + 0 + + + Busy + NVMC cannot accept any write operation + 0 + + + Ready + NVMC is ready + 1 + + + + + + + CONFIG + Configuration register + 0x504 + read-write + + + WEN + Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated. + 0 + 1 + + + Ren + Read only access + 0 + + + Wen + Write enabled + 1 + + + Een + Erase enabled + 2 + + + + + + + ERASEPAGE + Register for erasing a page in code area + 0x508 + write-only + + + ERASEPAGE + Register for starting erase of a page in code area + 0 + 31 + + + + + ERASEPCR1 + Deprecated register - Register for erasing a page in code area, equivalent to ERASEPAGE + 0x508 + write-only + ERASEPAGE + + + ERASEPCR1 + Register for erasing a page in code area, equivalent to ERASEPAGE + 0 + 31 + + + + + ERASEALL + Register for erasing all non-volatile user memory + 0x50C + write-only + + + ERASEALL + Erase all non-volatile memory including UICR registers. The erase must be enabled using CONFIG.WEN before the non-volatile memory can be erased. + 0 + 0 + + + NoOperation + No operation + 0 + + + Erase + Start chip erase + 1 + + + + + + + ERASEPCR0 + Deprecated register - Register for erasing a page in code area, equivalent to ERASEPAGE + 0x510 + write-only + + + ERASEPCR0 + Register for starting erase of a page in code area, equivalent to ERASEPAGE + 0 + 31 + + + + + ERASEUICR + Register for erasing user information configuration registers + 0x514 + write-only + + + ERASEUICR + Register starting erase of all user information configuration registers. The erase must be enabled using CONFIG.WEN before the UICR can be erased. + 0 + 0 + + + NoOperation + No operation + 0 + + + Erase + Start erase of UICR + 1 + + + + + + + ERASEPAGEPARTIAL + Register for partial erase of a page in code area + 0x518 + write-only + + + ERASEPAGEPARTIAL + Register for starting partial erase of a page in code area + 0 + 31 + + + + + ERASEPAGEPARTIALCFG + Register for partial erase configuration + 0x51C + read-write + 0x0000000A + + + DURATION + Duration of the partial erase in milliseconds + 0 + 6 + + + + + ICACHECNF + I-code cache configuration register + 0x540 + read-write + 0x00000000 + + + CACHEEN + Cache enable + 0 + 0 + + + Disabled + Disable cache. Invalidates all cache entries. + 0 + + + Enabled + Enable cache + 1 + + + + + CACHEPROFEN + Cache profiling enable + 8 + 8 + + + Disabled + Disable cache profiling + 0 + + + Enabled + Enable cache profiling + 1 + + + + + + + IHIT + I-code cache hit counter + 0x548 + read-write + + + HITS + Number of cache hits. Register is writable, but only to '0'. + 0 + 31 + + + + + IMISS + I-code cache miss counter + 0x54C + read-write + + + MISSES + Number of cache misses. Register is writable, but only to '0'. + 0 + 31 + + + + + + + PPI + Programmable Peripheral Interconnect + 0x4001F000 + + 0 + 0x1000 + registers + + PPI + 0x20 + + + 6 + 0x008 + TASKS_CHG[%s] + Channel group tasks + PPI_TASKS_CHG + write-only + 0x000 + + EN + Description cluster: Enable channel group n + 0x000 + write-only + + + EN + Enable channel group n + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + DIS + Description cluster: Disable channel group n + 0x004 + write-only + + + DIS + Disable channel group n + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + + CHEN + Channel enable register + 0x500 + read-write + + + CH0 + Enable or disable channel 0 + 0 + 0 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH1 + Enable or disable channel 1 + 1 + 1 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH2 + Enable or disable channel 2 + 2 + 2 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH3 + Enable or disable channel 3 + 3 + 3 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH4 + Enable or disable channel 4 + 4 + 4 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH5 + Enable or disable channel 5 + 5 + 5 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH6 + Enable or disable channel 6 + 6 + 6 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH7 + Enable or disable channel 7 + 7 + 7 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH8 + Enable or disable channel 8 + 8 + 8 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH9 + Enable or disable channel 9 + 9 + 9 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH10 + Enable or disable channel 10 + 10 + 10 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH11 + Enable or disable channel 11 + 11 + 11 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH12 + Enable or disable channel 12 + 12 + 12 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH13 + Enable or disable channel 13 + 13 + 13 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH14 + Enable or disable channel 14 + 14 + 14 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH15 + Enable or disable channel 15 + 15 + 15 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH16 + Enable or disable channel 16 + 16 + 16 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH17 + Enable or disable channel 17 + 17 + 17 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH18 + Enable or disable channel 18 + 18 + 18 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH19 + Enable or disable channel 19 + 19 + 19 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH20 + Enable or disable channel 20 + 20 + 20 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH21 + Enable or disable channel 21 + 21 + 21 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH22 + Enable or disable channel 22 + 22 + 22 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH23 + Enable or disable channel 23 + 23 + 23 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH24 + Enable or disable channel 24 + 24 + 24 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH25 + Enable or disable channel 25 + 25 + 25 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH26 + Enable or disable channel 26 + 26 + 26 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH27 + Enable or disable channel 27 + 27 + 27 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH28 + Enable or disable channel 28 + 28 + 28 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH29 + Enable or disable channel 29 + 29 + 29 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH30 + Enable or disable channel 30 + 30 + 30 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH31 + Enable or disable channel 31 + 31 + 31 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + + + CHENSET + Channel enable set register + 0x504 + read-write + oneToSet + + + CH0 + Channel 0 enable set register. Writing '0' has no effect. + 0 + 0 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH1 + Channel 1 enable set register. Writing '0' has no effect. + 1 + 1 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH2 + Channel 2 enable set register. Writing '0' has no effect. + 2 + 2 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH3 + Channel 3 enable set register. Writing '0' has no effect. + 3 + 3 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH4 + Channel 4 enable set register. Writing '0' has no effect. + 4 + 4 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH5 + Channel 5 enable set register. Writing '0' has no effect. + 5 + 5 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH6 + Channel 6 enable set register. Writing '0' has no effect. + 6 + 6 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH7 + Channel 7 enable set register. Writing '0' has no effect. + 7 + 7 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH8 + Channel 8 enable set register. Writing '0' has no effect. + 8 + 8 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH9 + Channel 9 enable set register. Writing '0' has no effect. + 9 + 9 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH10 + Channel 10 enable set register. Writing '0' has no effect. + 10 + 10 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH11 + Channel 11 enable set register. Writing '0' has no effect. + 11 + 11 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH12 + Channel 12 enable set register. Writing '0' has no effect. + 12 + 12 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH13 + Channel 13 enable set register. Writing '0' has no effect. + 13 + 13 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH14 + Channel 14 enable set register. Writing '0' has no effect. + 14 + 14 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH15 + Channel 15 enable set register. Writing '0' has no effect. + 15 + 15 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH16 + Channel 16 enable set register. Writing '0' has no effect. + 16 + 16 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH17 + Channel 17 enable set register. Writing '0' has no effect. + 17 + 17 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH18 + Channel 18 enable set register. Writing '0' has no effect. + 18 + 18 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH19 + Channel 19 enable set register. Writing '0' has no effect. + 19 + 19 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH20 + Channel 20 enable set register. Writing '0' has no effect. + 20 + 20 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH21 + Channel 21 enable set register. Writing '0' has no effect. + 21 + 21 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH22 + Channel 22 enable set register. Writing '0' has no effect. + 22 + 22 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH23 + Channel 23 enable set register. Writing '0' has no effect. + 23 + 23 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH24 + Channel 24 enable set register. Writing '0' has no effect. + 24 + 24 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH25 + Channel 25 enable set register. Writing '0' has no effect. + 25 + 25 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH26 + Channel 26 enable set register. Writing '0' has no effect. + 26 + 26 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH27 + Channel 27 enable set register. Writing '0' has no effect. + 27 + 27 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH28 + Channel 28 enable set register. Writing '0' has no effect. + 28 + 28 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH29 + Channel 29 enable set register. Writing '0' has no effect. + 29 + 29 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH30 + Channel 30 enable set register. Writing '0' has no effect. + 30 + 30 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH31 + Channel 31 enable set register. Writing '0' has no effect. + 31 + 31 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + + + CHENCLR + Channel enable clear register + 0x508 + read-write + oneToClear + + + CH0 + Channel 0 enable clear register. Writing '0' has no effect. + 0 + 0 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH1 + Channel 1 enable clear register. Writing '0' has no effect. + 1 + 1 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH2 + Channel 2 enable clear register. Writing '0' has no effect. + 2 + 2 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH3 + Channel 3 enable clear register. Writing '0' has no effect. + 3 + 3 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH4 + Channel 4 enable clear register. Writing '0' has no effect. + 4 + 4 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH5 + Channel 5 enable clear register. Writing '0' has no effect. + 5 + 5 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH6 + Channel 6 enable clear register. Writing '0' has no effect. + 6 + 6 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH7 + Channel 7 enable clear register. Writing '0' has no effect. + 7 + 7 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH8 + Channel 8 enable clear register. Writing '0' has no effect. + 8 + 8 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH9 + Channel 9 enable clear register. Writing '0' has no effect. + 9 + 9 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH10 + Channel 10 enable clear register. Writing '0' has no effect. + 10 + 10 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH11 + Channel 11 enable clear register. Writing '0' has no effect. + 11 + 11 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH12 + Channel 12 enable clear register. Writing '0' has no effect. + 12 + 12 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH13 + Channel 13 enable clear register. Writing '0' has no effect. + 13 + 13 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH14 + Channel 14 enable clear register. Writing '0' has no effect. + 14 + 14 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH15 + Channel 15 enable clear register. Writing '0' has no effect. + 15 + 15 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH16 + Channel 16 enable clear register. Writing '0' has no effect. + 16 + 16 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH17 + Channel 17 enable clear register. Writing '0' has no effect. + 17 + 17 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH18 + Channel 18 enable clear register. Writing '0' has no effect. + 18 + 18 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH19 + Channel 19 enable clear register. Writing '0' has no effect. + 19 + 19 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH20 + Channel 20 enable clear register. Writing '0' has no effect. + 20 + 20 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH21 + Channel 21 enable clear register. Writing '0' has no effect. + 21 + 21 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH22 + Channel 22 enable clear register. Writing '0' has no effect. + 22 + 22 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH23 + Channel 23 enable clear register. Writing '0' has no effect. + 23 + 23 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH24 + Channel 24 enable clear register. Writing '0' has no effect. + 24 + 24 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH25 + Channel 25 enable clear register. Writing '0' has no effect. + 25 + 25 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH26 + Channel 26 enable clear register. Writing '0' has no effect. + 26 + 26 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH27 + Channel 27 enable clear register. Writing '0' has no effect. + 27 + 27 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH28 + Channel 28 enable clear register. Writing '0' has no effect. + 28 + 28 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH29 + Channel 29 enable clear register. Writing '0' has no effect. + 29 + 29 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH30 + Channel 30 enable clear register. Writing '0' has no effect. + 30 + 30 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH31 + Channel 31 enable clear register. Writing '0' has no effect. + 31 + 31 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + + + 20 + 0x008 + CH[%s] + PPI Channel + PPI_CH + read-write + 0x510 + + EEP + Description cluster: Channel n event endpoint + 0x000 + read-write + + + EEP + Pointer to event register. Accepts only addresses to registers from the Event group. + 0 + 31 + + + + + TEP + Description cluster: Channel n task endpoint + 0x004 + read-write + + + TEP + Pointer to task register. Accepts only addresses to registers from the Task group. + 0 + 31 + + + + + + 0x6 + 0x4 + CHG[%s] + Description collection: Channel group n + 0x800 + read-write + + + CH0 + Include or exclude channel 0 + 0 + 0 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH1 + Include or exclude channel 1 + 1 + 1 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH2 + Include or exclude channel 2 + 2 + 2 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH3 + Include or exclude channel 3 + 3 + 3 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH4 + Include or exclude channel 4 + 4 + 4 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH5 + Include or exclude channel 5 + 5 + 5 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH6 + Include or exclude channel 6 + 6 + 6 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH7 + Include or exclude channel 7 + 7 + 7 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH8 + Include or exclude channel 8 + 8 + 8 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH9 + Include or exclude channel 9 + 9 + 9 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH10 + Include or exclude channel 10 + 10 + 10 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH11 + Include or exclude channel 11 + 11 + 11 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH12 + Include or exclude channel 12 + 12 + 12 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH13 + Include or exclude channel 13 + 13 + 13 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH14 + Include or exclude channel 14 + 14 + 14 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH15 + Include or exclude channel 15 + 15 + 15 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH16 + Include or exclude channel 16 + 16 + 16 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH17 + Include or exclude channel 17 + 17 + 17 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH18 + Include or exclude channel 18 + 18 + 18 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH19 + Include or exclude channel 19 + 19 + 19 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH20 + Include or exclude channel 20 + 20 + 20 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH21 + Include or exclude channel 21 + 21 + 21 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH22 + Include or exclude channel 22 + 22 + 22 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH23 + Include or exclude channel 23 + 23 + 23 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH24 + Include or exclude channel 24 + 24 + 24 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH25 + Include or exclude channel 25 + 25 + 25 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH26 + Include or exclude channel 26 + 26 + 26 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH27 + Include or exclude channel 27 + 27 + 27 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH28 + Include or exclude channel 28 + 28 + 28 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH29 + Include or exclude channel 29 + 29 + 29 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH30 + Include or exclude channel 30 + 30 + 30 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH31 + Include or exclude channel 31 + 31 + 31 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + + + 32 + 0x004 + FORK[%s] + Fork + PPI_FORK + read-write + 0x910 + + TEP + Description cluster: Channel n task endpoint + 0x000 + read-write + + + TEP + Pointer to task register + 0 + 31 + + + + + + + + MWU + Memory Watch Unit + 0x40020000 + + 0 + 0x1000 + registers + + + MWU + 32 + + MWU + 0x20 + + + 4 + 0x008 + EVENTS_REGION[%s] + Peripheral events. + MWU_EVENTS_REGION + read-write + 0x100 + + WA + Description cluster: Write access to region n detected + 0x000 + read-write + + + WA + Write access to region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + RA + Description cluster: Read access to region n detected + 0x004 + read-write + + + RA + Read access to region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + + 2 + 0x008 + EVENTS_PREGION[%s] + Peripheral events. + MWU_EVENTS_PREGION + read-write + 0x160 + + WA + Description cluster: Write access to peripheral region n detected + 0x000 + read-write + + + WA + Write access to peripheral region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + RA + Description cluster: Read access to peripheral region n detected + 0x004 + read-write + + + RA + Read access to peripheral region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + REGION0WA + Enable or disable interrupt for event REGION0WA + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION0RA + Enable or disable interrupt for event REGION0RA + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1WA + Enable or disable interrupt for event REGION1WA + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1RA + Enable or disable interrupt for event REGION1RA + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2WA + Enable or disable interrupt for event REGION2WA + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2RA + Enable or disable interrupt for event REGION2RA + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3WA + Enable or disable interrupt for event REGION3WA + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3RA + Enable or disable interrupt for event REGION3RA + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0WA + Enable or disable interrupt for event PREGION0WA + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0RA + Enable or disable interrupt for event PREGION0RA + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1WA + Enable or disable interrupt for event PREGION1WA + 26 + 26 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1RA + Enable or disable interrupt for event PREGION1RA + 27 + 27 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + REGION0WA + Write '1' to enable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION0RA + Write '1' to enable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1WA + Write '1' to enable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1RA + Write '1' to enable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2WA + Write '1' to enable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2RA + Write '1' to enable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3WA + Write '1' to enable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3RA + Write '1' to enable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0WA + Write '1' to enable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0RA + Write '1' to enable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1WA + Write '1' to enable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1RA + Write '1' to enable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + REGION0WA + Write '1' to disable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION0RA + Write '1' to disable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1WA + Write '1' to disable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1RA + Write '1' to disable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2WA + Write '1' to disable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2RA + Write '1' to disable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3WA + Write '1' to disable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3RA + Write '1' to disable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0WA + Write '1' to disable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0RA + Write '1' to disable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1WA + Write '1' to disable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1RA + Write '1' to disable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + NMIEN + Enable or disable interrupt + 0x320 + read-write + + + REGION0WA + Enable or disable interrupt for event REGION0WA + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION0RA + Enable or disable interrupt for event REGION0RA + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1WA + Enable or disable interrupt for event REGION1WA + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1RA + Enable or disable interrupt for event REGION1RA + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2WA + Enable or disable interrupt for event REGION2WA + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2RA + Enable or disable interrupt for event REGION2RA + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3WA + Enable or disable interrupt for event REGION3WA + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3RA + Enable or disable interrupt for event REGION3RA + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0WA + Enable or disable interrupt for event PREGION0WA + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0RA + Enable or disable interrupt for event PREGION0RA + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1WA + Enable or disable interrupt for event PREGION1WA + 26 + 26 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1RA + Enable or disable interrupt for event PREGION1RA + 27 + 27 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + NMIENSET + Enable interrupt + 0x324 + read-write + + + REGION0WA + Write '1' to enable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION0RA + Write '1' to enable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1WA + Write '1' to enable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1RA + Write '1' to enable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2WA + Write '1' to enable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2RA + Write '1' to enable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3WA + Write '1' to enable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3RA + Write '1' to enable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0WA + Write '1' to enable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0RA + Write '1' to enable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1WA + Write '1' to enable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1RA + Write '1' to enable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + NMIENCLR + Disable interrupt + 0x328 + read-write + + + REGION0WA + Write '1' to disable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION0RA + Write '1' to disable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1WA + Write '1' to disable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1RA + Write '1' to disable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2WA + Write '1' to disable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2RA + Write '1' to disable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3WA + Write '1' to disable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3RA + Write '1' to disable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0WA + Write '1' to disable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0RA + Write '1' to disable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1WA + Write '1' to disable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1RA + Write '1' to disable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + 2 + 0x008 + PERREGION[%s] + Unspecified + MWU_PERREGION + read-write + 0x400 + + SUBSTATWA + Description cluster: Source of event/interrupt in region n, write access detected while corresponding subregion was enabled for watching + 0x000 + read-write + oneToClear + + + SR0 + Subregion 0 in region n (write '1' to clear) + 0 + 0 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR1 + Subregion 1 in region n (write '1' to clear) + 1 + 1 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR2 + Subregion 2 in region n (write '1' to clear) + 2 + 2 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR3 + Subregion 3 in region n (write '1' to clear) + 3 + 3 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR4 + Subregion 4 in region n (write '1' to clear) + 4 + 4 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR5 + Subregion 5 in region n (write '1' to clear) + 5 + 5 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR6 + Subregion 6 in region n (write '1' to clear) + 6 + 6 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR7 + Subregion 7 in region n (write '1' to clear) + 7 + 7 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR8 + Subregion 8 in region n (write '1' to clear) + 8 + 8 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR9 + Subregion 9 in region n (write '1' to clear) + 9 + 9 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR10 + Subregion 10 in region n (write '1' to clear) + 10 + 10 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR11 + Subregion 11 in region n (write '1' to clear) + 11 + 11 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR12 + Subregion 12 in region n (write '1' to clear) + 12 + 12 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR13 + Subregion 13 in region n (write '1' to clear) + 13 + 13 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR14 + Subregion 14 in region n (write '1' to clear) + 14 + 14 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR15 + Subregion 15 in region n (write '1' to clear) + 15 + 15 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR16 + Subregion 16 in region n (write '1' to clear) + 16 + 16 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR17 + Subregion 17 in region n (write '1' to clear) + 17 + 17 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR18 + Subregion 18 in region n (write '1' to clear) + 18 + 18 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR19 + Subregion 19 in region n (write '1' to clear) + 19 + 19 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR20 + Subregion 20 in region n (write '1' to clear) + 20 + 20 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR21 + Subregion 21 in region n (write '1' to clear) + 21 + 21 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR22 + Subregion 22 in region n (write '1' to clear) + 22 + 22 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR23 + Subregion 23 in region n (write '1' to clear) + 23 + 23 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR24 + Subregion 24 in region n (write '1' to clear) + 24 + 24 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR25 + Subregion 25 in region n (write '1' to clear) + 25 + 25 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR26 + Subregion 26 in region n (write '1' to clear) + 26 + 26 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR27 + Subregion 27 in region n (write '1' to clear) + 27 + 27 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR28 + Subregion 28 in region n (write '1' to clear) + 28 + 28 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR29 + Subregion 29 in region n (write '1' to clear) + 29 + 29 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR30 + Subregion 30 in region n (write '1' to clear) + 30 + 30 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR31 + Subregion 31 in region n (write '1' to clear) + 31 + 31 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + + + SUBSTATRA + Description cluster: Source of event/interrupt in region n, read access detected while corresponding subregion was enabled for watching + 0x004 + read-write + oneToClear + + + SR0 + Subregion 0 in region n (write '1' to clear) + 0 + 0 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR1 + Subregion 1 in region n (write '1' to clear) + 1 + 1 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR2 + Subregion 2 in region n (write '1' to clear) + 2 + 2 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR3 + Subregion 3 in region n (write '1' to clear) + 3 + 3 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR4 + Subregion 4 in region n (write '1' to clear) + 4 + 4 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR5 + Subregion 5 in region n (write '1' to clear) + 5 + 5 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR6 + Subregion 6 in region n (write '1' to clear) + 6 + 6 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR7 + Subregion 7 in region n (write '1' to clear) + 7 + 7 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR8 + Subregion 8 in region n (write '1' to clear) + 8 + 8 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR9 + Subregion 9 in region n (write '1' to clear) + 9 + 9 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR10 + Subregion 10 in region n (write '1' to clear) + 10 + 10 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR11 + Subregion 11 in region n (write '1' to clear) + 11 + 11 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR12 + Subregion 12 in region n (write '1' to clear) + 12 + 12 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR13 + Subregion 13 in region n (write '1' to clear) + 13 + 13 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR14 + Subregion 14 in region n (write '1' to clear) + 14 + 14 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR15 + Subregion 15 in region n (write '1' to clear) + 15 + 15 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR16 + Subregion 16 in region n (write '1' to clear) + 16 + 16 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR17 + Subregion 17 in region n (write '1' to clear) + 17 + 17 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR18 + Subregion 18 in region n (write '1' to clear) + 18 + 18 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR19 + Subregion 19 in region n (write '1' to clear) + 19 + 19 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR20 + Subregion 20 in region n (write '1' to clear) + 20 + 20 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR21 + Subregion 21 in region n (write '1' to clear) + 21 + 21 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR22 + Subregion 22 in region n (write '1' to clear) + 22 + 22 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR23 + Subregion 23 in region n (write '1' to clear) + 23 + 23 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR24 + Subregion 24 in region n (write '1' to clear) + 24 + 24 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR25 + Subregion 25 in region n (write '1' to clear) + 25 + 25 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR26 + Subregion 26 in region n (write '1' to clear) + 26 + 26 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR27 + Subregion 27 in region n (write '1' to clear) + 27 + 27 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR28 + Subregion 28 in region n (write '1' to clear) + 28 + 28 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR29 + Subregion 29 in region n (write '1' to clear) + 29 + 29 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR30 + Subregion 30 in region n (write '1' to clear) + 30 + 30 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR31 + Subregion 31 in region n (write '1' to clear) + 31 + 31 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + + + + REGIONEN + Enable/disable regions watch + 0x510 + read-write + + + RGN0WA + Enable/disable write access watch in region[0] + 0 + 0 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN0RA + Enable/disable read access watch in region[0] + 1 + 1 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + RGN1WA + Enable/disable write access watch in region[1] + 2 + 2 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN1RA + Enable/disable read access watch in region[1] + 3 + 3 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + RGN2WA + Enable/disable write access watch in region[2] + 4 + 4 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN2RA + Enable/disable read access watch in region[2] + 5 + 5 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + RGN3WA + Enable/disable write access watch in region[3] + 6 + 6 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN3RA + Enable/disable read access watch in region[3] + 7 + 7 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + PRGN0WA + Enable/disable write access watch in PREGION[0] + 24 + 24 + + + Disable + Disable write access watch in this PREGION + 0 + + + Enable + Enable write access watch in this PREGION + 1 + + + + + PRGN0RA + Enable/disable read access watch in PREGION[0] + 25 + 25 + + + Disable + Disable read access watch in this PREGION + 0 + + + Enable + Enable read access watch in this PREGION + 1 + + + + + PRGN1WA + Enable/disable write access watch in PREGION[1] + 26 + 26 + + + Disable + Disable write access watch in this PREGION + 0 + + + Enable + Enable write access watch in this PREGION + 1 + + + + + PRGN1RA + Enable/disable read access watch in PREGION[1] + 27 + 27 + + + Disable + Disable read access watch in this PREGION + 0 + + + Enable + Enable read access watch in this PREGION + 1 + + + + + + + REGIONENSET + Enable regions watch + 0x514 + read-write + + + RGN0WA + Enable write access watch in region[0] + 0 + 0 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN0RA + Enable read access watch in region[0] + 1 + 1 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + RGN1WA + Enable write access watch in region[1] + 2 + 2 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN1RA + Enable read access watch in region[1] + 3 + 3 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + RGN2WA + Enable write access watch in region[2] + 4 + 4 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN2RA + Enable read access watch in region[2] + 5 + 5 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + RGN3WA + Enable write access watch in region[3] + 6 + 6 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN3RA + Enable read access watch in region[3] + 7 + 7 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + PRGN0WA + Enable write access watch in PREGION[0] + 24 + 24 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable write access watch in this PREGION + 1 + + + + + PRGN0RA + Enable read access watch in PREGION[0] + 25 + 25 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable read access watch in this PREGION + 1 + + + + + PRGN1WA + Enable write access watch in PREGION[1] + 26 + 26 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable write access watch in this PREGION + 1 + + + + + PRGN1RA + Enable read access watch in PREGION[1] + 27 + 27 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable read access watch in this PREGION + 1 + + + + + + + REGIONENCLR + Disable regions watch + 0x518 + read-write + + + RGN0WA + Disable write access watch in region[0] + 0 + 0 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN0RA + Disable read access watch in region[0] + 1 + 1 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + RGN1WA + Disable write access watch in region[1] + 2 + 2 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN1RA + Disable read access watch in region[1] + 3 + 3 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + RGN2WA + Disable write access watch in region[2] + 4 + 4 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN2RA + Disable read access watch in region[2] + 5 + 5 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + RGN3WA + Disable write access watch in region[3] + 6 + 6 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN3RA + Disable read access watch in region[3] + 7 + 7 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + PRGN0WA + Disable write access watch in PREGION[0] + 24 + 24 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable write access watch in this PREGION + 1 + + + + + PRGN0RA + Disable read access watch in PREGION[0] + 25 + 25 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable read access watch in this PREGION + 1 + + + + + PRGN1WA + Disable write access watch in PREGION[1] + 26 + 26 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable write access watch in this PREGION + 1 + + + + + PRGN1RA + Disable read access watch in PREGION[1] + 27 + 27 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable read access watch in this PREGION + 1 + + + + + + + 4 + 0x010 + REGION[%s] + Unspecified + MWU_REGION + read-write + 0x600 + + START + Description cluster: Start address for region n + 0x000 + read-write + 0x00000000 + + + START + Start address for region + 0 + 31 + + + + + END + Description cluster: End address of region n + 0x004 + read-write + + + END + End address of region. + 0 + 31 + + + + + + 2 + 0x010 + PREGION[%s] + Unspecified + MWU_PREGION + read-write + 0x6C0 + + START + Description cluster: Reserved for future use + 0x000 + read-only + + + START + Reserved for future use + 0 + 31 + + + + + END + Description cluster: Reserved for future use + 0x004 + read-only + + + END + Reserved for future use + 0 + 31 + + + + + SUBS + Description cluster: Subregions of region n + 0x008 + read-write + 0x00000000 + + + SR0 + Include or exclude subregion 0 in region + 0 + 0 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR1 + Include or exclude subregion 1 in region + 1 + 1 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR2 + Include or exclude subregion 2 in region + 2 + 2 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR3 + Include or exclude subregion 3 in region + 3 + 3 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR4 + Include or exclude subregion 4 in region + 4 + 4 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR5 + Include or exclude subregion 5 in region + 5 + 5 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR6 + Include or exclude subregion 6 in region + 6 + 6 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR7 + Include or exclude subregion 7 in region + 7 + 7 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR8 + Include or exclude subregion 8 in region + 8 + 8 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR9 + Include or exclude subregion 9 in region + 9 + 9 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR10 + Include or exclude subregion 10 in region + 10 + 10 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR11 + Include or exclude subregion 11 in region + 11 + 11 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR12 + Include or exclude subregion 12 in region + 12 + 12 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR13 + Include or exclude subregion 13 in region + 13 + 13 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR14 + Include or exclude subregion 14 in region + 14 + 14 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR15 + Include or exclude subregion 15 in region + 15 + 15 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR16 + Include or exclude subregion 16 in region + 16 + 16 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR17 + Include or exclude subregion 17 in region + 17 + 17 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR18 + Include or exclude subregion 18 in region + 18 + 18 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR19 + Include or exclude subregion 19 in region + 19 + 19 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR20 + Include or exclude subregion 20 in region + 20 + 20 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR21 + Include or exclude subregion 21 in region + 21 + 21 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR22 + Include or exclude subregion 22 in region + 22 + 22 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR23 + Include or exclude subregion 23 in region + 23 + 23 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR24 + Include or exclude subregion 24 in region + 24 + 24 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR25 + Include or exclude subregion 25 in region + 25 + 25 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR26 + Include or exclude subregion 26 in region + 26 + 26 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR27 + Include or exclude subregion 27 in region + 27 + 27 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR28 + Include or exclude subregion 28 in region + 28 + 28 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR29 + Include or exclude subregion 29 in region + 29 + 29 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR30 + Include or exclude subregion 30 in region + 30 + 30 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR31 + Include or exclude subregion 31 in region + 31 + 31 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + + + + + + PWM1 + Pulse width modulation unit 1 + 0x40021000 + + PWM1 + 33 + + + + PWM2 + Pulse width modulation unit 2 + 0x40022000 + + PWM2 + 34 + + + + SPI2 + Serial Peripheral Interface 2 + 0x40023000 + + SPIM2_SPIS2_SPI2 + 35 + + + + SPIM2 + Serial Peripheral Interface Master with EasyDMA 2 + 0x40023000 + SPI2 + + SPIM2_SPIS2_SPI2 + 35 + + + + SPIS2 + SPI Slave 2 + 0x40023000 + SPI2 + + SPIM2_SPIS2_SPI2 + 35 + + + + RTC2 + Real time counter 2 + 0x40024000 + + RTC2 + 36 + + + + I2S + Inter-IC Sound + 0x40025000 + + 0 + 0x1000 + registers + + + I2S + 37 + + I2S + 0x20 + + + TASKS_START + Starts continuous I2S transfer. Also starts MCK generator when this is enabled. + 0x000 + write-only + + + TASKS_START + Starts continuous I2S transfer. Also starts MCK generator when this is enabled. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated. + 0x004 + write-only + + + TASKS_STOP + Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_RXPTRUPD + The RXD.PTR register has been copied to internal double-buffers. + When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin. + 0x104 + read-write + + + EVENTS_RXPTRUPD + The RXD.PTR register has been copied to internal double-buffers. + When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + I2S transfer stopped. + 0x108 + read-write + + + EVENTS_STOPPED + I2S transfer stopped. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXPTRUPD + The TDX.PTR register has been copied to internal double-buffers. + When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin. + 0x114 + read-write + + + EVENTS_TXPTRUPD + The TDX.PTR register has been copied to internal double-buffers. + When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + RXPTRUPD + Enable or disable interrupt for event RXPTRUPD + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STOPPED + Enable or disable interrupt for event STOPPED + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXPTRUPD + Enable or disable interrupt for event TXPTRUPD + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + RXPTRUPD + Write '1' to enable interrupt for event RXPTRUPD + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXPTRUPD + Write '1' to enable interrupt for event TXPTRUPD + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + RXPTRUPD + Write '1' to disable interrupt for event RXPTRUPD + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXPTRUPD + Write '1' to disable interrupt for event TXPTRUPD + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + Enable I2S module. + 0x500 + read-write + 0x00000000 + + + ENABLE + Enable I2S module. + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + CONFIG + Unspecified + I2S_CONFIG + read-write + 0x504 + + MODE + I2S mode. + 0x000 + read-write + 0x00000000 + + + MODE + I2S mode. + 0 + 0 + + + Master + Master mode. SCK and LRCK generated from internal master clcok (MCK) and output on pins defined by PSEL.xxx. + 0 + + + Slave + Slave mode. SCK and LRCK generated by external master and received on pins defined by PSEL.xxx + 1 + + + + + + + RXEN + Reception (RX) enable. + 0x004 + read-write + 0x00000000 + + + RXEN + Reception (RX) enable. + 0 + 0 + + + Disabled + Reception disabled and now data will be written to the RXD.PTR address. + 0 + + + Enabled + Reception enabled. + 1 + + + + + + + TXEN + Transmission (TX) enable. + 0x008 + read-write + 0x00000001 + + + TXEN + Transmission (TX) enable. + 0 + 0 + + + Disabled + Transmission disabled and now data will be read from the RXD.TXD address. + 0 + + + Enabled + Transmission enabled. + 1 + + + + + + + MCKEN + Master clock generator enable. + 0x00C + read-write + 0x00000001 + + + MCKEN + Master clock generator enable. + 0 + 0 + + + Disabled + Master clock generator disabled and PSEL.MCK not connected(available as GPIO). + 0 + + + Enabled + Master clock generator running and MCK output on PSEL.MCK. + 1 + + + + + + + MCKFREQ + Master clock generator frequency. + 0x010 + read-write + 0x20000000 + + + MCKFREQ + Master clock generator frequency. + 0 + 31 + + + 32MDIV8 + 32 MHz / 8 = 4.0 MHz + 0x20000000 + + + 32MDIV10 + 32 MHz / 10 = 3.2 MHz + 0x18000000 + + + 32MDIV11 + 32 MHz / 11 = 2.9090909 MHz + 0x16000000 + + + 32MDIV15 + 32 MHz / 15 = 2.1333333 MHz + 0x11000000 + + + 32MDIV16 + 32 MHz / 16 = 2.0 MHz + 0x10000000 + + + 32MDIV21 + 32 MHz / 21 = 1.5238095 + 0x0C000000 + + + 32MDIV23 + 32 MHz / 23 = 1.3913043 MHz + 0x0B000000 + + + 32MDIV30 + 32 MHz / 30 = 1.0666667 MHz + 0x08800000 + + + 32MDIV31 + 32 MHz / 31 = 1.0322581 MHz + 0x08400000 + + + 32MDIV32 + 32 MHz / 32 = 1.0 MHz + 0x08000000 + + + 32MDIV42 + 32 MHz / 42 = 0.7619048 MHz + 0x06000000 + + + 32MDIV63 + 32 MHz / 63 = 0.5079365 MHz + 0x04100000 + + + 32MDIV125 + 32 MHz / 125 = 0.256 MHz + 0x020C0000 + + + + + + + RATIO + MCK / LRCK ratio. + 0x014 + read-write + 0x00000006 + + + RATIO + MCK / LRCK ratio. + 0 + 3 + + + 32X + LRCK = MCK / 32 + 0 + + + 48X + LRCK = MCK / 48 + 1 + + + 64X + LRCK = MCK / 64 + 2 + + + 96X + LRCK = MCK / 96 + 3 + + + 128X + LRCK = MCK / 128 + 4 + + + 192X + LRCK = MCK / 192 + 5 + + + 256X + LRCK = MCK / 256 + 6 + + + 384X + LRCK = MCK / 384 + 7 + + + 512X + LRCK = MCK / 512 + 8 + + + + + + + SWIDTH + Sample width. + 0x018 + read-write + 0x00000001 + + + SWIDTH + Sample width. + 0 + 1 + + + 8Bit + 8 bit. + 0 + + + 16Bit + 16 bit. + 1 + + + 24Bit + 24 bit. + 2 + + + + + + + ALIGN + Alignment of sample within a frame. + 0x01C + read-write + 0x00000000 + + + ALIGN + Alignment of sample within a frame. + 0 + 0 + + + Left + Left-aligned. + 0 + + + Right + Right-aligned. + 1 + + + + + + + FORMAT + Frame format. + 0x020 + read-write + 0x00000000 + + + FORMAT + Frame format. + 0 + 0 + + + I2S + Original I2S format. + 0 + + + Aligned + Alternate (left- or right-aligned) format. + 1 + + + + + + + CHANNELS + Enable channels. + 0x024 + read-write + 0x00000000 + + + CHANNELS + Enable channels. + 0 + 1 + + + Stereo + Stereo. + 0 + + + Left + Left only. + 1 + + + Right + Right only. + 2 + + + + + + + + RXD + Unspecified + I2S_RXD + read-write + 0x538 + + PTR + Receive buffer RAM start address. + 0x000 + read-write + 0x00000000 + + + PTR + Receive buffer Data RAM start address. When receiving, words containing samples will be written to this address. This address is a word aligned Data RAM address. + 0 + 31 + + + + + + TXD + Unspecified + I2S_TXD + read-write + 0x540 + + PTR + Transmit buffer RAM start address. + 0x000 + read-write + 0x00000000 + + + PTR + Transmit buffer Data RAM start address. When transmitting, words containing samples will be fetched from this address. This address is a word aligned Data RAM address. + 0 + 31 + + + + + + RXTXD + Unspecified + I2S_RXTXD + read-write + 0x550 + + MAXCNT + Size of RXD and TXD buffers. + 0x000 + read-write + 0x00000000 + + + MAXCNT + Size of RXD and TXD buffers in number of 32 bit words. + 0 + 13 + + + + + + PSEL + Unspecified + I2S_PSEL + read-write + 0x560 + + MCK + Pin select for MCK signal. + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SCK + Pin select for SCK signal. + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + LRCK + Pin select for LRCK signal. + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDIN + Pin select for SDIN signal. + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDOUT + Pin select for SDOUT signal. + 0x010 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + + + FPU + FPU + 0x40026000 + + 0 + 0x1000 + registers + + + FPU + 38 + + FPU + 0x20 + + + UNUSED + Unused. + 0x000 + 0x00000000 + read-only + + + + + USBD + Universal serial bus device + 0x40027000 + + 0 + 0x1000 + registers + + + USBD + 39 + + USBD + 0x20 + + + 0x8 + 0x4 + TASKS_STARTEPIN[%s] + Description collection: Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host + 0x004 + write-only + + + TASKS_STARTEPIN + Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTISOIN + Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint + 0x024 + write-only + + + TASKS_STARTISOIN + Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + TASKS_STARTEPOUT[%s] + Description collection: Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host + 0x028 + write-only + + + TASKS_STARTEPOUT + Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTISOOUT + Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint + 0x048 + write-only + + + TASKS_STARTISOOUT + Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EP0RCVOUT + Allows OUT data stage on control endpoint 0 + 0x04C + write-only + + + TASKS_EP0RCVOUT + Allows OUT data stage on control endpoint 0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EP0STATUS + Allows status stage on control endpoint 0 + 0x050 + write-only + + + TASKS_EP0STATUS + Allows status stage on control endpoint 0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EP0STALL + Stalls data and status stage on control endpoint 0 + 0x054 + write-only + + + TASKS_EP0STALL + Stalls data and status stage on control endpoint 0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DPDMDRIVE + Forces D+ and D- lines into the state defined in the DPDMVALUE register + 0x058 + write-only + + + TASKS_DPDMDRIVE + Forces D+ and D- lines into the state defined in the DPDMVALUE register + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DPDMNODRIVE + Stops forcing D+ and D- lines into any state (USB engine takes control) + 0x05C + write-only + + + TASKS_DPDMNODRIVE + Stops forcing D+ and D- lines into any state (USB engine takes control) + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_USBRESET + Signals that a USB reset condition has been detected on USB lines + 0x100 + read-write + + + EVENTS_USBRESET + Signals that a USB reset condition has been detected on USB lines + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STARTED + Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register + 0x104 + read-write + + + EVENTS_STARTED + Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x8 + 0x4 + EVENTS_ENDEPIN[%s] + Description collection: The whole EPIN[n] buffer has been consumed. The buffer can be accessed safely by software. + 0x108 + read-write + + + EVENTS_ENDEPIN + The whole EPIN[n] buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EP0DATADONE + An acknowledged data transfer has taken place on the control endpoint + 0x128 + read-write + + + EVENTS_EP0DATADONE + An acknowledged data transfer has taken place on the control endpoint + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDISOIN + The whole ISOIN buffer has been consumed. The buffer can be accessed safely by software. + 0x12C + read-write + + + EVENTS_ENDISOIN + The whole ISOIN buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x8 + 0x4 + EVENTS_ENDEPOUT[%s] + Description collection: The whole EPOUT[n] buffer has been consumed. The buffer can be accessed safely by software. + 0x130 + read-write + + + EVENTS_ENDEPOUT + The whole EPOUT[n] buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDISOOUT + The whole ISOOUT buffer has been consumed. The buffer can be accessed safely by software. + 0x150 + read-write + + + EVENTS_ENDISOOUT + The whole ISOOUT buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SOF + Signals that a SOF (start of frame) condition has been detected on USB lines + 0x154 + read-write + + + EVENTS_SOF + Signals that a SOF (start of frame) condition has been detected on USB lines + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBEVENT + An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause. + 0x158 + read-write + + + EVENTS_USBEVENT + An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EP0SETUP + A valid SETUP token has been received (and acknowledged) on the control endpoint + 0x15C + read-write + + + EVENTS_EP0SETUP + A valid SETUP token has been received (and acknowledged) on the control endpoint + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EPDATA + A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register + 0x160 + read-write + + + EVENTS_EPDATA + A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + EP0DATADONE_STARTEPIN0 + Shortcut between event EP0DATADONE and task STARTEPIN[0] + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + EP0DATADONE_STARTEPOUT0 + Shortcut between event EP0DATADONE and task STARTEPOUT[0] + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + EP0DATADONE_EP0STATUS + Shortcut between event EP0DATADONE and task EP0STATUS + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ENDEPOUT0_EP0STATUS + Shortcut between event ENDEPOUT[0] and task EP0STATUS + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ENDEPOUT0_EP0RCVOUT + Shortcut between event ENDEPOUT[0] and task EP0RCVOUT + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + USBRESET + Enable or disable interrupt for event USBRESET + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STARTED + Enable or disable interrupt for event STARTED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN0 + Enable or disable interrupt for event ENDEPIN[0] + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN1 + Enable or disable interrupt for event ENDEPIN[1] + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN2 + Enable or disable interrupt for event ENDEPIN[2] + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN3 + Enable or disable interrupt for event ENDEPIN[3] + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN4 + Enable or disable interrupt for event ENDEPIN[4] + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN5 + Enable or disable interrupt for event ENDEPIN[5] + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN6 + Enable or disable interrupt for event ENDEPIN[6] + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN7 + Enable or disable interrupt for event ENDEPIN[7] + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + EP0DATADONE + Enable or disable interrupt for event EP0DATADONE + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDISOIN + Enable or disable interrupt for event ENDISOIN + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT0 + Enable or disable interrupt for event ENDEPOUT[0] + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT1 + Enable or disable interrupt for event ENDEPOUT[1] + 13 + 13 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT2 + Enable or disable interrupt for event ENDEPOUT[2] + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT3 + Enable or disable interrupt for event ENDEPOUT[3] + 15 + 15 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT4 + Enable or disable interrupt for event ENDEPOUT[4] + 16 + 16 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT5 + Enable or disable interrupt for event ENDEPOUT[5] + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT6 + Enable or disable interrupt for event ENDEPOUT[6] + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT7 + Enable or disable interrupt for event ENDEPOUT[7] + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDISOOUT + Enable or disable interrupt for event ENDISOOUT + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SOF + Enable or disable interrupt for event SOF + 21 + 21 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + USBEVENT + Enable or disable interrupt for event USBEVENT + 22 + 22 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + EP0SETUP + Enable or disable interrupt for event EP0SETUP + 23 + 23 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + EPDATA + Enable or disable interrupt for event EPDATA + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + USBRESET + Write '1' to enable interrupt for event USBRESET + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STARTED + Write '1' to enable interrupt for event STARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN0 + Write '1' to enable interrupt for event ENDEPIN[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN1 + Write '1' to enable interrupt for event ENDEPIN[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN2 + Write '1' to enable interrupt for event ENDEPIN[2] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN3 + Write '1' to enable interrupt for event ENDEPIN[3] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN4 + Write '1' to enable interrupt for event ENDEPIN[4] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN5 + Write '1' to enable interrupt for event ENDEPIN[5] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN6 + Write '1' to enable interrupt for event ENDEPIN[6] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN7 + Write '1' to enable interrupt for event ENDEPIN[7] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EP0DATADONE + Write '1' to enable interrupt for event EP0DATADONE + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDISOIN + Write '1' to enable interrupt for event ENDISOIN + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT0 + Write '1' to enable interrupt for event ENDEPOUT[0] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT1 + Write '1' to enable interrupt for event ENDEPOUT[1] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT2 + Write '1' to enable interrupt for event ENDEPOUT[2] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT3 + Write '1' to enable interrupt for event ENDEPOUT[3] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT4 + Write '1' to enable interrupt for event ENDEPOUT[4] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT5 + Write '1' to enable interrupt for event ENDEPOUT[5] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT6 + Write '1' to enable interrupt for event ENDEPOUT[6] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT7 + Write '1' to enable interrupt for event ENDEPOUT[7] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDISOOUT + Write '1' to enable interrupt for event ENDISOOUT + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SOF + Write '1' to enable interrupt for event SOF + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBEVENT + Write '1' to enable interrupt for event USBEVENT + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EP0SETUP + Write '1' to enable interrupt for event EP0SETUP + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EPDATA + Write '1' to enable interrupt for event EPDATA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + USBRESET + Write '1' to disable interrupt for event USBRESET + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STARTED + Write '1' to disable interrupt for event STARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN0 + Write '1' to disable interrupt for event ENDEPIN[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN1 + Write '1' to disable interrupt for event ENDEPIN[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN2 + Write '1' to disable interrupt for event ENDEPIN[2] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN3 + Write '1' to disable interrupt for event ENDEPIN[3] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN4 + Write '1' to disable interrupt for event ENDEPIN[4] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN5 + Write '1' to disable interrupt for event ENDEPIN[5] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN6 + Write '1' to disable interrupt for event ENDEPIN[6] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN7 + Write '1' to disable interrupt for event ENDEPIN[7] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EP0DATADONE + Write '1' to disable interrupt for event EP0DATADONE + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDISOIN + Write '1' to disable interrupt for event ENDISOIN + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT0 + Write '1' to disable interrupt for event ENDEPOUT[0] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT1 + Write '1' to disable interrupt for event ENDEPOUT[1] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT2 + Write '1' to disable interrupt for event ENDEPOUT[2] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT3 + Write '1' to disable interrupt for event ENDEPOUT[3] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT4 + Write '1' to disable interrupt for event ENDEPOUT[4] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT5 + Write '1' to disable interrupt for event ENDEPOUT[5] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT6 + Write '1' to disable interrupt for event ENDEPOUT[6] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT7 + Write '1' to disable interrupt for event ENDEPOUT[7] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDISOOUT + Write '1' to disable interrupt for event ENDISOOUT + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SOF + Write '1' to disable interrupt for event SOF + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBEVENT + Write '1' to disable interrupt for event USBEVENT + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EP0SETUP + Write '1' to disable interrupt for event EP0SETUP + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EPDATA + Write '1' to disable interrupt for event EPDATA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + EVENTCAUSE + Details on what caused the USBEVENT event + 0x400 + read-write + oneToClear + + + ISOOUTCRC + CRC error was detected on isochronous OUT endpoint 8. Write '1' to clear. + 0 + 0 + + + NotDetected + No error detected + 0 + + + Detected + Error detected + 1 + + + + + SUSPEND + Signals that USB lines have been idle long enough for the device to enter suspend. Write '1' to clear. + 8 + 8 + + + NotDetected + Suspend not detected + 0 + + + Detected + Suspend detected + 1 + + + + + RESUME + Signals that a RESUME condition (K state or activity restart) has been detected on USB lines. Write '1' to clear. + 9 + 9 + + + NotDetected + Resume not detected + 0 + + + Detected + Resume detected + 1 + + + + + USBWUALLOWED + USB MAC has been woken up and operational. Write '1' to clear. + 10 + 10 + + + NotAllowed + Wake up not allowed + 0 + + + Allowed + Wake up allowed + 1 + + + + + READY + USB device is ready for normal operation. Write '1' to clear. + 11 + 11 + + + NotDetected + USBEVENT was not issued due to USBD peripheral ready + 0 + + + Ready + USBD peripheral is ready + 1 + + + + + + + HALTED + Unspecified + USBD_HALTED + read-write + 0x420 + + 0x8 + 0x4 + EPIN[%s] + Description collection: IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0x000 + read-only + + + GETSTATUS + IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0 + 15 + + + NotHalted + Endpoint is not halted + 0 + + + Halted + Endpoint is halted + 1 + + + + + + + 0x8 + 0x4 + EPOUT[%s] + Description collection: OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0x024 + read-only + + + GETSTATUS + OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0 + 15 + + + NotHalted + Endpoint is not halted + 0 + + + Halted + Endpoint is halted + 1 + + + + + + + + EPSTATUS + Provides information on which endpoint's EasyDMA registers have been captured + 0x468 + read-write + oneToClear + + + EPIN0 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 0 + 0 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN1 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 1 + 1 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN2 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 2 + 2 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN3 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 3 + 3 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN4 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 4 + 4 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN5 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 5 + 5 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN6 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 6 + 6 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN7 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 7 + 7 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN8 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 8 + 8 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT0 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 16 + 16 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT1 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 17 + 17 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT2 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 18 + 18 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT3 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 19 + 19 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT4 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 20 + 20 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT5 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 21 + 21 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT6 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 22 + 22 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT7 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 23 + 23 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT8 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 24 + 24 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + + + EPDATASTATUS + Provides information on which endpoint(s) an acknowledged data transfer has occurred (EPDATA event) + 0x46C + read-write + oneToClear + + + EPIN1 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 1 + 1 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN2 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 2 + 2 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN3 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 3 + 3 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN4 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 4 + 4 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN5 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 5 + 5 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN6 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 6 + 6 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN7 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 7 + 7 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT1 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 17 + 17 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT2 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 18 + 18 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT3 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 19 + 19 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT4 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 20 + 20 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT5 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 21 + 21 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT6 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 22 + 22 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT7 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 23 + 23 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + + + USBADDR + Device USB address + 0x470 + read-only + + + ADDR + Device USB address + 0 + 6 + + + + + BMREQUESTTYPE + SETUP data, byte 0, bmRequestType + 0x480 + read-only + 0x00000000 + + + RECIPIENT + Data transfer type + 0 + 4 + + + Device + Device + 0 + + + Interface + Interface + 1 + + + Endpoint + Endpoint + 2 + + + Other + Other + 3 + + + + + TYPE + Data transfer type + 5 + 6 + + + Standard + Standard + 0 + + + Class + Class + 1 + + + Vendor + Vendor + 2 + + + + + DIRECTION + Data transfer direction + 7 + 7 + + + HostToDevice + Host-to-device + 0 + + + DeviceToHost + Device-to-host + 1 + + + + + + + BREQUEST + SETUP data, byte 1, bRequest + 0x484 + read-only + 0x00000000 + + + BREQUEST + SETUP data, byte 1, bRequest. Values provided for standard requests only, user must implement class and vendor values. + 0 + 7 + + + STD_GET_STATUS + Standard request GET_STATUS + 0 + + + STD_CLEAR_FEATURE + Standard request CLEAR_FEATURE + 1 + + + STD_SET_FEATURE + Standard request SET_FEATURE + 3 + + + STD_SET_ADDRESS + Standard request SET_ADDRESS + 5 + + + STD_GET_DESCRIPTOR + Standard request GET_DESCRIPTOR + 6 + + + STD_SET_DESCRIPTOR + Standard request SET_DESCRIPTOR + 7 + + + STD_GET_CONFIGURATION + Standard request GET_CONFIGURATION + 8 + + + STD_SET_CONFIGURATION + Standard request SET_CONFIGURATION + 9 + + + STD_GET_INTERFACE + Standard request GET_INTERFACE + 10 + + + STD_SET_INTERFACE + Standard request SET_INTERFACE + 11 + + + STD_SYNCH_FRAME + Standard request SYNCH_FRAME + 12 + + + + + + + WVALUEL + SETUP data, byte 2, LSB of wValue + 0x488 + read-only + 0x00000000 + + + WVALUEL + SETUP data, byte 2, LSB of wValue + 0 + 7 + + + + + WVALUEH + SETUP data, byte 3, MSB of wValue + 0x48C + read-only + 0x00000000 + + + WVALUEH + SETUP data, byte 3, MSB of wValue + 0 + 7 + + + + + WINDEXL + SETUP data, byte 4, LSB of wIndex + 0x490 + read-only + 0x00000000 + + + WINDEXL + SETUP data, byte 4, LSB of wIndex + 0 + 7 + + + + + WINDEXH + SETUP data, byte 5, MSB of wIndex + 0x494 + read-only + 0x00000000 + + + WINDEXH + SETUP data, byte 5, MSB of wIndex + 0 + 7 + + + + + WLENGTHL + SETUP data, byte 6, LSB of wLength + 0x498 + read-only + 0x00000000 + + + WLENGTHL + SETUP data, byte 6, LSB of wLength + 0 + 7 + + + + + WLENGTHH + SETUP data, byte 7, MSB of wLength + 0x49C + read-only + 0x00000000 + + + WLENGTHH + SETUP data, byte 7, MSB of wLength + 0 + 7 + + + + + SIZE + Unspecified + USBD_SIZE + read-write + 0x4A0 + + 0x8 + 0x4 + EPOUT[%s] + Description collection: Number of bytes received last in the data stage of this OUT endpoint + 0x000 + read-write + + + SIZE + Number of bytes received last in the data stage of this OUT endpoint + 0 + 6 + + + + + ISOOUT + Number of bytes received last on this ISO OUT data endpoint + 0x020 + read-only + 0x00010000 + + + SIZE + Number of bytes received last on this ISO OUT data endpoint + 0 + 9 + + + ZERO + Zero-length data packet received + 16 + 16 + + + Normal + No zero-length data received, use value in SIZE + 0 + + + ZeroData + Zero-length data received, ignore value in SIZE + 1 + + + + + + + + ENABLE + Enable USB + 0x500 + read-write + + + ENABLE + Enable USB + 0 + 0 + + + Disabled + USB peripheral is disabled + 0 + + + Enabled + USB peripheral is enabled + 1 + + + + + + + USBPULLUP + Control of the USB pull-up + 0x504 + read-write + + + CONNECT + Control of the USB pull-up on the D+ line + 0 + 0 + + + Disabled + Pull-up is disconnected + 0 + + + Enabled + Pull-up is connected to D+ + 1 + + + + + + + DPDMVALUE + State D+ and D- lines will be forced into by the DPDMDRIVE task. The DPDMNODRIVE task reverts the control of the lines to MAC IP (no forcing). + 0x508 + read-write + + + STATE + State D+ and D- lines will be forced into by the DPDMDRIVE task + 0 + 4 + + + Resume + D+ forced low, D- forced high (K state) for a timing preset in hardware (50 us or 5 ms, depending on bus state) + 1 + + + J + D+ forced high, D- forced low (J state) + 2 + + + K + D+ forced low, D- forced high (K state) + 4 + + + + + + + DTOGGLE + Data toggle control and status + 0x50C + read-write + 0x00000100 + + + EP + Select bulk endpoint number + 0 + 2 + + + IO + Selects IN or OUT endpoint + 7 + 7 + + + Out + Selects OUT endpoint + 0 + + + In + Selects IN endpoint + 1 + + + + + VALUE + Data toggle value + 8 + 9 + + + Nop + No action on data toggle when writing the register with this value + 0 + + + Data0 + Data toggle is DATA0 on endpoint set by EP and IO + 1 + + + Data1 + Data toggle is DATA1 on endpoint set by EP and IO + 2 + + + + + + + EPINEN + Endpoint IN enable + 0x510 + read-write + 0x00000001 + + + IN0 + Enable IN endpoint 0 + 0 + 0 + + + Disable + Disable endpoint IN 0 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 0 (response to IN tokens) + 1 + + + + + IN1 + Enable IN endpoint 1 + 1 + 1 + + + Disable + Disable endpoint IN 1 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 1 (response to IN tokens) + 1 + + + + + IN2 + Enable IN endpoint 2 + 2 + 2 + + + Disable + Disable endpoint IN 2 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 2 (response to IN tokens) + 1 + + + + + IN3 + Enable IN endpoint 3 + 3 + 3 + + + Disable + Disable endpoint IN 3 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 3 (response to IN tokens) + 1 + + + + + IN4 + Enable IN endpoint 4 + 4 + 4 + + + Disable + Disable endpoint IN 4 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 4 (response to IN tokens) + 1 + + + + + IN5 + Enable IN endpoint 5 + 5 + 5 + + + Disable + Disable endpoint IN 5 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 5 (response to IN tokens) + 1 + + + + + IN6 + Enable IN endpoint 6 + 6 + 6 + + + Disable + Disable endpoint IN 6 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 6 (response to IN tokens) + 1 + + + + + IN7 + Enable IN endpoint 7 + 7 + 7 + + + Disable + Disable endpoint IN 7 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 7 (response to IN tokens) + 1 + + + + + ISOIN + Enable ISO IN endpoint + 8 + 8 + + + Disable + Disable ISO IN endpoint 8 + 0 + + + Enable + Enable ISO IN endpoint 8 + 1 + + + + + + + EPOUTEN + Endpoint OUT enable + 0x514 + read-write + 0x00000001 + + + OUT0 + Enable OUT endpoint 0 + 0 + 0 + + + Disable + Disable endpoint OUT 0 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 0 (response to OUT tokens) + 1 + + + + + OUT1 + Enable OUT endpoint 1 + 1 + 1 + + + Disable + Disable endpoint OUT 1 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 1 (response to OUT tokens) + 1 + + + + + OUT2 + Enable OUT endpoint 2 + 2 + 2 + + + Disable + Disable endpoint OUT 2 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 2 (response to OUT tokens) + 1 + + + + + OUT3 + Enable OUT endpoint 3 + 3 + 3 + + + Disable + Disable endpoint OUT 3 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 3 (response to OUT tokens) + 1 + + + + + OUT4 + Enable OUT endpoint 4 + 4 + 4 + + + Disable + Disable endpoint OUT 4 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 4 (response to OUT tokens) + 1 + + + + + OUT5 + Enable OUT endpoint 5 + 5 + 5 + + + Disable + Disable endpoint OUT 5 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 5 (response to OUT tokens) + 1 + + + + + OUT6 + Enable OUT endpoint 6 + 6 + 6 + + + Disable + Disable endpoint OUT 6 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 6 (response to OUT tokens) + 1 + + + + + OUT7 + Enable OUT endpoint 7 + 7 + 7 + + + Disable + Disable endpoint OUT 7 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 7 (response to OUT tokens) + 1 + + + + + ISOOUT + Enable ISO OUT endpoint 8 + 8 + 8 + + + Disable + Disable ISO OUT endpoint 8 + 0 + + + Enable + Enable ISO OUT endpoint 8 + 1 + + + + + + + EPSTALL + STALL endpoints + 0x518 + write-only + 0x00000000 + modifyExternal + + + EP + Select endpoint number + 0 + 2 + + + IO + Selects IN or OUT endpoint + 7 + 7 + + + Out + Selects OUT endpoint + 0 + + + In + Selects IN endpoint + 1 + + + + + STALL + Stall selected endpoint + 8 + 8 + + + UnStall + Don't stall selected endpoint + 0 + + + Stall + Stall selected endpoint + 1 + + + + + + + ISOSPLIT + Controls the split of ISO buffers + 0x51C + read-write + + + SPLIT + Controls the split of ISO buffers + 0 + 15 + + + OneDir + Full buffer dedicated to either ISO IN or OUT + 0x0000 + + + HalfIN + Lower half for IN, upper half for OUT + 0x0080 + + + + + + + FRAMECNTR + Returns the current value of the start of frame counter + 0x520 + read-only + + + FRAMECNTR + Returns the current value of the start of frame counter + 0 + 10 + + + + + LOWPOWER + Controls USBD peripheral low power mode during USB suspend + 0x52C + read-write + 0x00000000 + + + LOWPOWER + Controls USBD peripheral low-power mode during USB suspend + 0 + 0 + + + ForceNormal + Software must write this value to exit low power mode and before performing a remote wake-up + 0 + + + LowPower + Software must write this value to enter low power mode after DMA and software have finished interacting with the USB peripheral + 1 + + + + + + + ISOINCONFIG + Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent + 0x530 + read-write + + + RESPONSE + Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent + 0 + 0 + + + NoResp + Endpoint does not respond in that case + 0 + + + ZeroData + Endpoint responds with a zero-length data packet in that case + 1 + + + + + + + 8 + 0x014 + EPIN[%s] + Unspecified + USBD_EPIN + read-write + 0x600 + + PTR + Description cluster: Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Description cluster: Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 6 + + + + + AMOUNT + Description cluster: Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 6 + + + + + + ISOIN + Unspecified + USBD_ISOIN + read-write + 0x6A0 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 9 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 9 + + + + + + 8 + 0x014 + EPOUT[%s] + Unspecified + USBD_EPOUT + read-write + 0x700 + + PTR + Description cluster: Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Description cluster: Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 6 + + + + + AMOUNT + Description cluster: Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 6 + + + + + + ISOOUT + Unspecified + USBD_ISOOUT + read-write + 0x7A0 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 9 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 9 + + + + + + + + UARTE1 + UART with EasyDMA 1 + 0x40028000 + + UARTE1 + 40 + + + + PWM3 + Pulse width modulation unit 3 + 0x4002D000 + + PWM3 + 45 + + + + SPIM3 + Serial Peripheral Interface Master with EasyDMA 3 + 0x4002F000 + + SPIM3 + 47 + + + + \ No newline at end of file diff --git a/svd/nrf52840.svd b/svd/nrf52840.svd new file mode 100644 index 000000000..a1e623408 --- /dev/null +++ b/svd/nrf52840.svd @@ -0,0 +1,54973 @@ + + + + Nordic Semiconductor + Nordic + nrf52840 + nrf52 + 1 + nRF52840 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller + +Copyright (c) 2010 - 2021, Nordic Semiconductor ASA\n +\n +All rights reserved.\n +\n +Redistribution and use in source and binary forms, with or without modification,\n +are permitted provided that the following conditions are met:\n +\n +1. Redistributions of source code must retain the above copyright notice, this\n + list of conditions and the following disclaimer.\n +\n +2. Redistributions in binary form, except as embedded into a Nordic\n + Semiconductor ASA integrated circuit in a product or a software update for\n + such product, must reproduce the above copyright notice, this list of\n + conditions and the following disclaimer in the documentation and/or other\n + materials provided with the distribution.\n +\n +3. Neither the name of Nordic Semiconductor ASA nor the names of its\n + contributors may be used to endorse or promote products derived from this\n + software without specific prior written permission.\n +\n +4. This software, with or without modification, must only be used with a\n + Nordic Semiconductor ASA integrated circuit.\n +\n +5. Any software provided in binary form under this license must not be reverse\n + engineered, decompiled, modified and/or disassembled.\n +\n +THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS\n +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n +OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE\n +DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\n +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + + 8 + 32 + 32 + 0x00000000 + 0xFFFFFFFF + + CM4 + r0p1 + little + 1 + 1 + 3 + 0 + + system_nrf52840 + NRF_ + + 2048 + 2048 + 112 + + + + FICR + Factory information configuration registers + 0x10000000 + + 0 + 0x1000 + registers + + FICR + 0x20 + + + CODEPAGESIZE + Code memory page size + 0x010 + read-only + 0xFFFFFFFF + + + CODEPAGESIZE + Code memory page size + 0 + 31 + + + + + CODESIZE + Code memory size + 0x014 + read-only + 0xFFFFFFFF + + + CODESIZE + Code memory size in number of pages + 0 + 31 + + + + + 0x2 + 0x4 + DEVICEID[%s] + Description collection: Device identifier + 0x060 + read-only + 0xFFFFFFFF + + + DEVICEID + 64 bit unique device identifier + 0 + 31 + + + + + 0x4 + 0x4 + ER[%s] + Description collection: Encryption root, word n + 0x080 + read-only + 0xFFFFFFFF + + + ER + Encryption root, word n + 0 + 31 + + + + + 0x4 + 0x4 + IR[%s] + Description collection: Identity Root, word n + 0x090 + read-only + 0xFFFFFFFF + + + IR + Identity Root, word n + 0 + 31 + + + + + DEVICEADDRTYPE + Device address type + 0x0A0 + read-only + 0xFFFFFFFF + + + DEVICEADDRTYPE + Device address type + 0 + 0 + + + Public + Public address + 0 + + + Random + Random address + 1 + + + + + + + 0x2 + 0x4 + DEVICEADDR[%s] + Description collection: Device address n + 0x0A4 + read-only + 0xFFFFFFFF + + + DEVICEADDR + 48 bit device address + 0 + 31 + + + + + INFO + Device info + FICR_INFO + read-only + 0x100 + + PART + Part code + 0x000 + read-only + 0x00052840 + + + PART + Part code + 0 + 31 + + + N52820 + nRF52820 + 0x52820 + + + N52833 + nRF52833 + 0x52833 + + + N52840 + nRF52840 + 0x52840 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + VARIANT + Build code (hardware version and production configuration) + 0x004 + read-only + 0xFFFFFFFF + + + VARIANT + Build code (hardware version and production configuration). Encoded as ASCII. + 0 + 31 + + + AAAA + AAAA + 0x41414141 + + + BAAA + BAAA + 0x42414141 + + + CAAA + CAAA + 0x43414141 + + + AABA + AABA + 0x41414241 + + + AABB + AABB + 0x41414242 + + + AACA + AACA + 0x41414341 + + + AAAB + AAAB + 0x41414142 + + + AAC0 + AAC0 + 0x41414330 + + + AADA + AADA + 0x41414441 + + + AAD0 + AAD0 + 0x41414430 + + + AAD1 + AAD1 + 0x41414431 + + + AAEA + AAEA + 0x41414541 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + PACKAGE + Package option + 0x008 + read-only + 0xFFFFFFFF + + + PACKAGE + Package option + 0 + 31 + + + QI + QIxx - 7x7 73-pin aQFN + 0x2004 + + + CK + CKxx - 3.544 x 3.607 WLCSP + 0x2005 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + RAM + RAM variant + 0x00C + read-only + 0xFFFFFFFF + + + RAM + RAM variant + 0 + 31 + + + K16 + 16 kByte RAM + 0x10 + + + K32 + 32 kByte RAM + 0x20 + + + K64 + 64 kByte RAM + 0x40 + + + K128 + 128 kByte RAM + 0x80 + + + K256 + 256 kByte RAM + 0x100 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + FLASH + Flash variant + 0x010 + read-only + 0xFFFFFFFF + + + FLASH + Flash variant + 0 + 31 + + + K128 + 128 kByte FLASH + 0x80 + + + K256 + 256 kByte FLASH + 0x100 + + + K512 + 512 kByte FLASH + 0x200 + + + K1024 + 1 MByte FLASH + 0x400 + + + K2048 + 2 MByte FLASH + 0x800 + + + Unspecified + Unspecified + 0xFFFFFFFF + + + + + + + + 0x3 + 0x4 + PRODTEST[%s] + Description collection: Production test signature n + 0x350 + read-only + 0xFFFFFFFF + + + PRODTEST + Production test signature n + 0 + 31 + + + Done + Production tests done + 0xBB42319F + + + NotDone + Production tests not done + 0xFFFFFFFF + + + + + + + TEMP + Registers storing factory TEMP module linearization coefficients + FICR_TEMP + read-only + 0x404 + + A0 + Slope definition A0 + 0x000 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A1 + Slope definition A1 + 0x004 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A2 + Slope definition A2 + 0x008 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A3 + Slope definition A3 + 0x00C + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A4 + Slope definition A4 + 0x010 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + A5 + Slope definition A5 + 0x014 + read-only + 0xFFFFFFFF + + + A + A (slope definition) register. + 0 + 11 + + + + + B0 + Y-intercept B0 + 0x018 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B1 + Y-intercept B1 + 0x01C + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B2 + Y-intercept B2 + 0x020 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B3 + Y-intercept B3 + 0x024 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B4 + Y-intercept B4 + 0x028 + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + B5 + Y-intercept B5 + 0x02C + read-only + 0xFFFFFFFF + + + B + B (y-intercept) + 0 + 13 + + + + + T0 + Segment end T0 + 0x030 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T1 + Segment end T1 + 0x034 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T2 + Segment end T2 + 0x038 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T3 + Segment end T3 + 0x03C + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + T4 + Segment end T4 + 0x040 + read-only + 0xFFFFFFFF + + + T + T (segment end) register + 0 + 7 + + + + + + NFC + Unspecified + FICR_NFC + read-write + 0x450 + + TAGHEADER0 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x000 + read-only + 0xFFFFFF5F + + + MFGID + Default Manufacturer ID: Nordic Semiconductor ASA has ICM 0x5F + 0 + 7 + + + UD1 + Unique identifier byte 1 + 8 + 15 + + + UD2 + Unique identifier byte 2 + 16 + 23 + + + UD3 + Unique identifier byte 3 + 24 + 31 + + + + + TAGHEADER1 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x004 + read-only + 0xFFFFFFFF + + + UD4 + Unique identifier byte 4 + 0 + 7 + + + UD5 + Unique identifier byte 5 + 8 + 15 + + + UD6 + Unique identifier byte 6 + 16 + 23 + + + UD7 + Unique identifier byte 7 + 24 + 31 + + + + + TAGHEADER2 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x008 + read-only + 0xFFFFFFFF + + + UD8 + Unique identifier byte 8 + 0 + 7 + + + UD9 + Unique identifier byte 9 + 8 + 15 + + + UD10 + Unique identifier byte 10 + 16 + 23 + + + UD11 + Unique identifier byte 11 + 24 + 31 + + + + + TAGHEADER3 + Default header for NFC tag. Software can read these values to populate NFCID1_3RD_LAST, NFCID1_2ND_LAST, and NFCID1_LAST. + 0x00C + read-only + 0xFFFFFFFF + + + UD12 + Unique identifier byte 12 + 0 + 7 + + + UD13 + Unique identifier byte 13 + 8 + 15 + + + UD14 + Unique identifier byte 14 + 16 + 23 + + + UD15 + Unique identifier byte 15 + 24 + 31 + + + + + + TRNG90B + NIST800-90B RNG calibration data + FICR_TRNG90B + read-write + 0xC00 + + BYTES + Amount of bytes for the required entropy bits + 0x000 + read-only + 0xFFFFFFFF + + + BYTES + Amount of bytes for the required entropy bits + 0 + 31 + + + + + RCCUTOFF + Repetition counter cutoff + 0x004 + read-only + 0xFFFFFFFF + + + RCCUTOFF + Repetition counter cutoff + 0 + 31 + + + + + APCUTOFF + Adaptive proportion cutoff + 0x008 + read-only + 0xFFFFFFFF + + + APCUTOFF + Adaptive proportion cutoff + 0 + 31 + + + + + STARTUP + Amount of bytes for the startup tests + 0x00C + read-only + 0xFFFFFFFF + + + STARTUP + Amount of bytes for the startup tests + 0 + 31 + + + + + ROSC1 + Sample count for ring oscillator 1 + 0x010 + read-only + 0xFFFFFFFF + + + ROSC1 + Sample count for ring oscillator 1 + 0 + 31 + + + + + ROSC2 + Sample count for ring oscillator 2 + 0x014 + read-only + 0xFFFFFFFF + + + ROSC2 + Sample count for ring oscillator 2 + 0 + 31 + + + + + ROSC3 + Sample count for ring oscillator 3 + 0x018 + read-only + 0xFFFFFFFF + + + ROSC3 + Sample count for ring oscillator 3 + 0 + 31 + + + + + ROSC4 + Sample count for ring oscillator 4 + 0x01C + read-only + 0xFFFFFFFF + + + ROSC4 + Sample count for ring oscillator 4 + 0 + 31 + + + + + + + + UICR + User information configuration registers + 0x10001000 + + 0 + 0x1000 + registers + + UICR + 0x20 + + + 0xD + 0x4 + NRFFW[%s] + Description collection: Reserved for Nordic firmware design + 0x014 + read-write + 0xFFFFFFFF + + + NRFFW + Reserved for Nordic firmware design + 0 + 31 + + + + + 0xC + 0x4 + NRFHW[%s] + Description collection: Reserved for Nordic hardware design + 0x050 + read-write + 0xFFFFFFFF + + + NRFHW + Reserved for Nordic hardware design + 0 + 31 + + + + + 0x20 + 0x4 + CUSTOMER[%s] + Description collection: Reserved for customer + 0x080 + read-write + 0xFFFFFFFF + + + CUSTOMER + Reserved for customer + 0 + 31 + + + + + 0x2 + 0x4 + PSELRESET[%s] + Description collection: Mapping of the nRESET function (see POWER chapter for details) + 0x200 + read-write + 0xFFFFFFFF + + + PIN + GPIO pin number onto which nRESET is exposed + 0 + 4 + + + PORT + Port number onto which nRESET is exposed + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + APPROTECT + Access port protection + 0x208 + read-write + 0xFFFFFFFF + + + PALL + Enable or disable access port protection. + 0 + 7 + + + Disabled + Hardware disable of access port protection for devices where access port protection is controlled by hardware + 0xFF + + + HwDisabled + Hardware disable of access port protection for devices where access port protection is controlled by hardware and software + 0x5A + + + Enabled + Enable + 0x00 + + + + + + + NFCPINS + Setting of pins dedicated to NFC functionality: NFC antenna or GPIO + 0x20C + read-write + 0xFFFFFFFF + + + PROTECT + Setting of pins dedicated to NFC functionality + 0 + 0 + + + Disabled + Operation as GPIO pins. Same protection as normal GPIO pins. + 0 + + + NFC + Operation as NFC antenna pins. Configures the protection for NFC operation. + 1 + + + + + + + DEBUGCTRL + Processor debug control + 0x210 + read-write + 0xFFFFFFFF + + + CPUNIDEN + Configure CPU non-intrusive debug features + 0 + 7 + + + Enabled + Enable CPU ITM and ETM functionality (default behavior) + 0xFF + + + Disabled + Disable CPU ITM and ETM functionality + 0x00 + + + + + CPUFPBEN + Configure CPU flash patch and breakpoint (FPB) unit behavior + 8 + 15 + + + Enabled + Enable CPU FPB unit (default behavior) + 0xFF + + + Disabled + Disable CPU FPB unit. Writes into the FPB registers will be ignored. + 0x00 + + + + + + + REGOUT0 + Output voltage from REG0 regulator stage. The maximum output voltage from this stage is given as VDDH - V_VDDH-VDD. + 0x304 + read-write + 0xFFFFFFFF + + + VOUT + Output voltage from REG0 regulator stage. + 0 + 2 + + + 1V8 + 1.8 V + 0 + + + 2V1 + 2.1 V + 1 + + + 2V4 + 2.4 V + 2 + + + 2V7 + 2.7 V + 3 + + + 3V0 + 3.0 V + 4 + + + 3V3 + 3.3 V + 5 + + + DEFAULT + Default voltage: 1.8 V + 7 + + + + + + + + + APPROTECT + Access Port Protection + 0x40000000 + + 0 + 0x1000 + registers + + APPROTECT + 0x20 + + + FORCEPROTECT + Software force enable APPROTECT mechanism until next reset. + 0x550 + read-writeonce + 0xFFFFFFFF + + + FORCEPROTECT + Write 0x0 to force enable APPROTECT mechanism + 0 + 7 + + write + + Force + Software force enable APPROTECT mechanism + 0x0 + + + + + + + DISABLE + Software disable APPROTECT mechanism + 0x558 + read-write + 0x00000000 + + + DISABLE + Software disable APPROTECT mechanism + 0 + 7 + + + SwDisable + Software disable APPROTECT mechanism + 0x5A + + + + + + + + + CLOCK + Clock control + 0x40000000 + APPROTECT + + 0 + 0x1000 + registers + + + POWER_CLOCK + 0 + + CLOCK + 0x20 + + + TASKS_HFCLKSTART + Start HFXO crystal oscillator + 0x000 + write-only + + + TASKS_HFCLKSTART + Start HFXO crystal oscillator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_HFCLKSTOP + Stop HFXO crystal oscillator + 0x004 + write-only + + + TASKS_HFCLKSTOP + Stop HFXO crystal oscillator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_LFCLKSTART + Start LFCLK + 0x008 + write-only + + + TASKS_LFCLKSTART + Start LFCLK + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_LFCLKSTOP + Stop LFCLK + 0x00C + write-only + + + TASKS_LFCLKSTOP + Stop LFCLK + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CAL + Start calibration of LFRC + 0x010 + write-only + + + TASKS_CAL + Start calibration of LFRC + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CTSTART + Start calibration timer + 0x014 + write-only + + + TASKS_CTSTART + Start calibration timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CTSTOP + Stop calibration timer + 0x018 + write-only + + + TASKS_CTSTOP + Stop calibration timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_HFCLKSTARTED + HFXO crystal oscillator started + 0x100 + read-write + + + EVENTS_HFCLKSTARTED + HFXO crystal oscillator started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LFCLKSTARTED + LFCLK started + 0x104 + read-write + + + EVENTS_LFCLKSTARTED + LFCLK started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DONE + Calibration of LFRC completed + 0x10C + read-write + + + EVENTS_DONE + Calibration of LFRC completed + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CTTO + Calibration timer timeout + 0x110 + read-write + + + EVENTS_CTTO + Calibration timer timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CTSTARTED + Calibration timer has been started and is ready to process new tasks + 0x128 + read-write + + + EVENTS_CTSTARTED + Calibration timer has been started and is ready to process new tasks + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CTSTOPPED + Calibration timer has been stopped and is ready to process new tasks + 0x12C + read-write + + + EVENTS_CTSTOPPED + Calibration timer has been stopped and is ready to process new tasks + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + HFCLKSTARTED + Write '1' to enable interrupt for event HFCLKSTARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LFCLKSTARTED + Write '1' to enable interrupt for event LFCLKSTARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DONE + Write '1' to enable interrupt for event DONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CTTO + Write '1' to enable interrupt for event CTTO + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CTSTARTED + Write '1' to enable interrupt for event CTSTARTED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CTSTOPPED + Write '1' to enable interrupt for event CTSTOPPED + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + HFCLKSTARTED + Write '1' to disable interrupt for event HFCLKSTARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LFCLKSTARTED + Write '1' to disable interrupt for event LFCLKSTARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DONE + Write '1' to disable interrupt for event DONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CTTO + Write '1' to disable interrupt for event CTTO + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CTSTARTED + Write '1' to disable interrupt for event CTSTARTED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CTSTOPPED + Write '1' to disable interrupt for event CTSTOPPED + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + HFCLKRUN + Status indicating that HFCLKSTART task has been triggered + 0x408 + read-only + + + STATUS + HFCLKSTART task triggered or not + 0 + 0 + + + NotTriggered + Task not triggered + 0 + + + Triggered + Task triggered + 1 + + + + + + + HFCLKSTAT + HFCLK status + 0x40C + read-only + + + SRC + Source of HFCLK + 0 + 0 + + + RC + 64 MHz internal oscillator (HFINT) + 0 + + + Xtal + 64 MHz crystal oscillator (HFXO) + 1 + + + + + STATE + HFCLK state + 16 + 16 + + + NotRunning + HFCLK not running + 0 + + + Running + HFCLK running + 1 + + + + + + + LFCLKRUN + Status indicating that LFCLKSTART task has been triggered + 0x414 + read-only + + + STATUS + LFCLKSTART task triggered or not + 0 + 0 + + + NotTriggered + Task not triggered + 0 + + + Triggered + Task triggered + 1 + + + + + + + LFCLKSTAT + LFCLK status + 0x418 + read-only + + + SRC + Source of LFCLK + 0 + 1 + + + RC + 32.768 kHz RC oscillator (LFRC) + 0 + + + Xtal + 32.768 kHz crystal oscillator (LFXO) + 1 + + + Synth + 32.768 kHz synthesized from HFCLK (LFSYNT) + 2 + + + + + STATE + LFCLK state + 16 + 16 + + + NotRunning + LFCLK not running + 0 + + + Running + LFCLK running + 1 + + + + + + + LFCLKSRCCOPY + Copy of LFCLKSRC register, set when LFCLKSTART task was triggered + 0x41C + read-only + + + SRC + Clock source + 0 + 1 + + + RC + 32.768 kHz RC oscillator (LFRC) + 0 + + + Xtal + 32.768 kHz crystal oscillator (LFXO) + 1 + + + Synth + 32.768 kHz synthesized from HFCLK (LFSYNT) + 2 + + + + + + + LFCLKSRC + Clock source for the LFCLK + 0x518 + read-write + + + SRC + Clock source + 0 + 1 + + + RC + 32.768 kHz RC oscillator (LFRC) + 0 + + + Xtal + 32.768 kHz crystal oscillator (LFXO) + 1 + + + Synth + 32.768 kHz synthesized from HFCLK (LFSYNT) + 2 + + + + + BYPASS + Enable or disable bypass of LFCLK crystal oscillator with external clock source + 16 + 16 + + + Disabled + Disable (use with Xtal or low-swing external source) + 0 + + + Enabled + Enable (use with rail-to-rail external source) + 1 + + + + + EXTERNAL + Enable or disable external source for LFCLK + 17 + 17 + + + Disabled + Disable external source (use with Xtal) + 0 + + + Enabled + Enable use of external source instead of Xtal (SRC needs to be set to Xtal) + 1 + + + + + + + HFXODEBOUNCE + HFXO debounce time. The HFXO is started by triggering the TASKS_HFCLKSTART task. + 0x528 + read-write + 0x00000010 + + + HFXODEBOUNCE + HFXO debounce time. Debounce time = HFXODEBOUNCE * 16 us. + 0 + 7 + + + Db256us + 256 us debounce time. Recommended for TSX-3225, FA-20H and FA-128 crystals. + 0x10 + + + Db1024us + 1024 us debounce time. Recommended for NX1612AA and NX1210AB crystals. + 0x40 + + + + + + + CTIV + Calibration timer interval + 0x538 + read-write + + + CTIV + Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds. + 0 + 6 + + + + + TRACECONFIG + Clocking options for the trace port debug interface + 0x55C + read-write + 0x00000000 + + + TRACEPORTSPEED + Speed of trace port clock. Note that the TRACECLK pin will output this clock divided by two. + 0 + 1 + + + 32MHz + 32 MHz trace port clock (TRACECLK = 16 MHz) + 0 + + + 16MHz + 16 MHz trace port clock (TRACECLK = 8 MHz) + 1 + + + 8MHz + 8 MHz trace port clock (TRACECLK = 4 MHz) + 2 + + + 4MHz + 4 MHz trace port clock (TRACECLK = 2 MHz) + 3 + + + + + TRACEMUX + Pin multiplexing of trace signals. See pin assignment chapter for more details. + 16 + 17 + + + GPIO + No trace signals routed to pins. All pins can be used as regular GPIOs. + 0 + + + Serial + SWO trace signal routed to pin. Remaining pins can be used as regular GPIOs. + 1 + + + Parallel + All trace signals (TRACECLK and TRACEDATA[n]) routed to pins. + 2 + + + + + + + LFRCMODE + LFRC mode configuration + 0x5B4 + read-write + 0x00000000 + + + MODE + Set LFRC mode + 0 + 0 + + + Normal + Normal mode + 0 + + + ULP + Ultra-low power mode (ULP) + 1 + + + + + STATUS + Active LFRC mode. This field is read only. + 16 + 16 + + + Normal + Normal mode + 0 + + + ULP + Ultra-low power mode (ULP) + 1 + + + + + + + + + POWER + Power control + 0x40000000 + APPROTECT + + 0 + 0x1000 + registers + + + POWER_CLOCK + 0 + + POWER + 0x20 + + + TASKS_CONSTLAT + Enable Constant Latency mode + 0x78 + write-only + + + TASKS_CONSTLAT + Enable Constant Latency mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_LOWPWR + Enable Low-power mode (variable latency) + 0x7C + write-only + + + TASKS_LOWPWR + Enable Low-power mode (variable latency) + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_POFWARN + Power failure warning + 0x108 + read-write + + + EVENTS_POFWARN + Power failure warning + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SLEEPENTER + CPU entered WFI/WFE sleep + 0x114 + read-write + + + EVENTS_SLEEPENTER + CPU entered WFI/WFE sleep + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SLEEPEXIT + CPU exited WFI/WFE sleep + 0x118 + read-write + + + EVENTS_SLEEPEXIT + CPU exited WFI/WFE sleep + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBDETECTED + Voltage supply detected on VBUS + 0x11C + read-write + + + EVENTS_USBDETECTED + Voltage supply detected on VBUS + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBREMOVED + Voltage supply removed from VBUS + 0x120 + read-write + + + EVENTS_USBREMOVED + Voltage supply removed from VBUS + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBPWRRDY + USB 3.3 V supply ready + 0x124 + read-write + + + EVENTS_USBPWRRDY + USB 3.3 V supply ready + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + POFWARN + Write '1' to enable interrupt for event POFWARN + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SLEEPENTER + Write '1' to enable interrupt for event SLEEPENTER + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SLEEPEXIT + Write '1' to enable interrupt for event SLEEPEXIT + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBDETECTED + Write '1' to enable interrupt for event USBDETECTED + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBREMOVED + Write '1' to enable interrupt for event USBREMOVED + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBPWRRDY + Write '1' to enable interrupt for event USBPWRRDY + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + POFWARN + Write '1' to disable interrupt for event POFWARN + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SLEEPENTER + Write '1' to disable interrupt for event SLEEPENTER + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SLEEPEXIT + Write '1' to disable interrupt for event SLEEPEXIT + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBDETECTED + Write '1' to disable interrupt for event USBDETECTED + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBREMOVED + Write '1' to disable interrupt for event USBREMOVED + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBPWRRDY + Write '1' to disable interrupt for event USBPWRRDY + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RESETREAS + Reset reason + 0x400 + read-write + + + RESETPIN + Reset from pin-reset detected + 0 + 0 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + DOG + Reset from watchdog detected + 1 + 1 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + SREQ + Reset from soft reset detected + 2 + 2 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + LOCKUP + Reset from CPU lock-up detected + 3 + 3 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + OFF + Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO + 16 + 16 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + LPCOMP + Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP + 17 + 17 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + DIF + Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode + 18 + 18 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + NFC + Reset due to wake up from System OFF mode by NFC field detect + 19 + 19 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + VBUS + Reset due to wake up from System OFF mode by VBUS rising into valid range + 20 + 20 + + + NotDetected + Not detected + 0 + + + Detected + Detected + 1 + + + + + + + RAMSTATUS + Deprecated register - RAM status register + 0x428 + read-only + 0x00000000 + + + RAMBLOCK0 + RAM block 0 is on or off/powering up + 0 + 0 + + + Off + Off + 0 + + + On + On + 1 + + + + + RAMBLOCK1 + RAM block 1 is on or off/powering up + 1 + 1 + + + Off + Off + 0 + + + On + On + 1 + + + + + RAMBLOCK2 + RAM block 2 is on or off/powering up + 2 + 2 + + + Off + Off + 0 + + + On + On + 1 + + + + + RAMBLOCK3 + RAM block 3 is on or off/powering up + 3 + 3 + + + Off + Off + 0 + + + On + On + 1 + + + + + + + USBREGSTATUS + USB supply status + 0x438 + read-only + 0x00000000 + + + VBUSDETECT + VBUS input detection status (USBDETECTED and USBREMOVED events are derived from this information) + 0 + 0 + + + NoVbus + VBUS voltage below valid threshold + 0 + + + VbusPresent + VBUS voltage above valid threshold + 1 + + + + + OUTPUTRDY + USB supply output settling time elapsed + 1 + 1 + + + NotReady + USBREG output settling time not elapsed + 0 + + + Ready + USBREG output settling time elapsed (same information as USBPWRRDY event) + 1 + + + + + + + SYSTEMOFF + System OFF register + 0x500 + write-only + + + SYSTEMOFF + Enable System OFF mode + 0 + 0 + + + Enter + Enable System OFF mode + 1 + + + + + + + POFCON + Power-fail comparator configuration + 0x510 + read-write + + + POF + Enable or disable power failure warning + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + THRESHOLD + Power-fail comparator threshold setting. This setting applies both for normal voltage mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to VDDH only). Values 0-3 set threshold below 1.7 V and should not be used as brown out detection will be activated before power failure warning on such low voltages. + 1 + 4 + + + V17 + Set threshold to 1.7 V + 4 + + + V18 + Set threshold to 1.8 V + 5 + + + V19 + Set threshold to 1.9 V + 6 + + + V20 + Set threshold to 2.0 V + 7 + + + V21 + Set threshold to 2.1 V + 8 + + + V22 + Set threshold to 2.2 V + 9 + + + V23 + Set threshold to 2.3 V + 10 + + + V24 + Set threshold to 2.4 V + 11 + + + V25 + Set threshold to 2.5 V + 12 + + + V26 + Set threshold to 2.6 V + 13 + + + V27 + Set threshold to 2.7 V + 14 + + + V28 + Set threshold to 2.8 V + 15 + + + + + THRESHOLDVDDH + Power-fail comparator threshold setting for high voltage mode (supply connected to VDDH only). This setting does not apply for normal voltage mode (supply connected to both VDD and VDDH). + 8 + 11 + + + V27 + Set threshold to 2.7 V + 0 + + + V28 + Set threshold to 2.8 V + 1 + + + V29 + Set threshold to 2.9 V + 2 + + + V30 + Set threshold to 3.0 V + 3 + + + V31 + Set threshold to 3.1 V + 4 + + + V32 + Set threshold to 3.2 V + 5 + + + V33 + Set threshold to 3.3 V + 6 + + + V34 + Set threshold to 3.4 V + 7 + + + V35 + Set threshold to 3.5 V + 8 + + + V36 + Set threshold to 3.6 V + 9 + + + V37 + Set threshold to 3.7 V + 10 + + + V38 + Set threshold to 3.8 V + 11 + + + V39 + Set threshold to 3.9 V + 12 + + + V40 + Set threshold to 4.0 V + 13 + + + V41 + Set threshold to 4.1 V + 14 + + + V42 + Set threshold to 4.2 V + 15 + + + + + + + GPREGRET + General purpose retention register + 0x51C + read-write + + + GPREGRET + General purpose retention register + 0 + 7 + + + + + GPREGRET2 + General purpose retention register + 0x520 + read-write + + + GPREGRET + General purpose retention register + 0 + 7 + + + + + DCDCEN + Enable DC/DC converter for REG1 stage + 0x578 + read-write + + + DCDCEN + Enable DC/DC converter for REG1 stage. + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + DCDCEN0 + Enable DC/DC converter for REG0 stage + 0x580 + read-write + + + DCDCEN + Enable DC/DC converter for REG0 stage. + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + MAINREGSTATUS + Main supply status + 0x640 + read-only + 0x00000000 + + + MAINREGSTATUS + Main supply status + 0 + 0 + + + Normal + Normal voltage mode. Voltage supplied on VDD. + 0 + + + High + High voltage mode. Voltage supplied on VDDH. + 1 + + + + + + + 9 + 0x010 + RAM[%s] + Unspecified + POWER_RAM + read-write + 0x900 + + POWER + Description cluster: RAMn power control register + 0x000 + read-write + 0x0000FFFF + + + S0POWER + Keep RAM section S0 on or off in System ON mode. + 0 + 0 + + + Off + Off + 0 + + + On + On + 1 + + + + + S1POWER + Keep RAM section S1 on or off in System ON mode. + 1 + 1 + + + Off + Off + 0 + + + On + On + 1 + + + + + S2POWER + Keep RAM section S2 on or off in System ON mode. + 2 + 2 + + + Off + Off + 0 + + + On + On + 1 + + + + + S3POWER + Keep RAM section S3 on or off in System ON mode. + 3 + 3 + + + Off + Off + 0 + + + On + On + 1 + + + + + S4POWER + Keep RAM section S4 on or off in System ON mode. + 4 + 4 + + + Off + Off + 0 + + + On + On + 1 + + + + + S5POWER + Keep RAM section S5 on or off in System ON mode. + 5 + 5 + + + Off + Off + 0 + + + On + On + 1 + + + + + S6POWER + Keep RAM section S6 on or off in System ON mode. + 6 + 6 + + + Off + Off + 0 + + + On + On + 1 + + + + + S7POWER + Keep RAM section S7 on or off in System ON mode. + 7 + 7 + + + Off + Off + 0 + + + On + On + 1 + + + + + S8POWER + Keep RAM section S8 on or off in System ON mode. + 8 + 8 + + + Off + Off + 0 + + + On + On + 1 + + + + + S9POWER + Keep RAM section S9 on or off in System ON mode. + 9 + 9 + + + Off + Off + 0 + + + On + On + 1 + + + + + S10POWER + Keep RAM section S10 on or off in System ON mode. + 10 + 10 + + + Off + Off + 0 + + + On + On + 1 + + + + + S11POWER + Keep RAM section S11 on or off in System ON mode. + 11 + 11 + + + Off + Off + 0 + + + On + On + 1 + + + + + S12POWER + Keep RAM section S12 on or off in System ON mode. + 12 + 12 + + + Off + Off + 0 + + + On + On + 1 + + + + + S13POWER + Keep RAM section S13 on or off in System ON mode. + 13 + 13 + + + Off + Off + 0 + + + On + On + 1 + + + + + S14POWER + Keep RAM section S14 on or off in System ON mode. + 14 + 14 + + + Off + Off + 0 + + + On + On + 1 + + + + + S15POWER + Keep RAM section S15 on or off in System ON mode. + 15 + 15 + + + Off + Off + 0 + + + On + On + 1 + + + + + S0RETENTION + Keep retention on RAM section S0 when RAM section is off + 16 + 16 + + + Off + Off + 0 + + + On + On + 1 + + + + + S1RETENTION + Keep retention on RAM section S1 when RAM section is off + 17 + 17 + + + Off + Off + 0 + + + On + On + 1 + + + + + S2RETENTION + Keep retention on RAM section S2 when RAM section is off + 18 + 18 + + + Off + Off + 0 + + + On + On + 1 + + + + + S3RETENTION + Keep retention on RAM section S3 when RAM section is off + 19 + 19 + + + Off + Off + 0 + + + On + On + 1 + + + + + S4RETENTION + Keep retention on RAM section S4 when RAM section is off + 20 + 20 + + + Off + Off + 0 + + + On + On + 1 + + + + + S5RETENTION + Keep retention on RAM section S5 when RAM section is off + 21 + 21 + + + Off + Off + 0 + + + On + On + 1 + + + + + S6RETENTION + Keep retention on RAM section S6 when RAM section is off + 22 + 22 + + + Off + Off + 0 + + + On + On + 1 + + + + + S7RETENTION + Keep retention on RAM section S7 when RAM section is off + 23 + 23 + + + Off + Off + 0 + + + On + On + 1 + + + + + S8RETENTION + Keep retention on RAM section S8 when RAM section is off + 24 + 24 + + + Off + Off + 0 + + + On + On + 1 + + + + + S9RETENTION + Keep retention on RAM section S9 when RAM section is off + 25 + 25 + + + Off + Off + 0 + + + On + On + 1 + + + + + S10RETENTION + Keep retention on RAM section S10 when RAM section is off + 26 + 26 + + + Off + Off + 0 + + + On + On + 1 + + + + + S11RETENTION + Keep retention on RAM section S11 when RAM section is off + 27 + 27 + + + Off + Off + 0 + + + On + On + 1 + + + + + S12RETENTION + Keep retention on RAM section S12 when RAM section is off + 28 + 28 + + + Off + Off + 0 + + + On + On + 1 + + + + + S13RETENTION + Keep retention on RAM section S13 when RAM section is off + 29 + 29 + + + Off + Off + 0 + + + On + On + 1 + + + + + S14RETENTION + Keep retention on RAM section S14 when RAM section is off + 30 + 30 + + + Off + Off + 0 + + + On + On + 1 + + + + + S15RETENTION + Keep retention on RAM section S15 when RAM section is off + 31 + 31 + + + Off + Off + 0 + + + On + On + 1 + + + + + + + POWERSET + Description cluster: RAMn power control set register + 0x004 + write-only + 0x0000FFFF + + + S0POWER + Keep RAM section S0 of RAMn on or off in System ON mode + 0 + 0 + + + On + On + 1 + + + + + S1POWER + Keep RAM section S1 of RAMn on or off in System ON mode + 1 + 1 + + + On + On + 1 + + + + + S2POWER + Keep RAM section S2 of RAMn on or off in System ON mode + 2 + 2 + + + On + On + 1 + + + + + S3POWER + Keep RAM section S3 of RAMn on or off in System ON mode + 3 + 3 + + + On + On + 1 + + + + + S4POWER + Keep RAM section S4 of RAMn on or off in System ON mode + 4 + 4 + + + On + On + 1 + + + + + S5POWER + Keep RAM section S5 of RAMn on or off in System ON mode + 5 + 5 + + + On + On + 1 + + + + + S6POWER + Keep RAM section S6 of RAMn on or off in System ON mode + 6 + 6 + + + On + On + 1 + + + + + S7POWER + Keep RAM section S7 of RAMn on or off in System ON mode + 7 + 7 + + + On + On + 1 + + + + + S8POWER + Keep RAM section S8 of RAMn on or off in System ON mode + 8 + 8 + + + On + On + 1 + + + + + S9POWER + Keep RAM section S9 of RAMn on or off in System ON mode + 9 + 9 + + + On + On + 1 + + + + + S10POWER + Keep RAM section S10 of RAMn on or off in System ON mode + 10 + 10 + + + On + On + 1 + + + + + S11POWER + Keep RAM section S11 of RAMn on or off in System ON mode + 11 + 11 + + + On + On + 1 + + + + + S12POWER + Keep RAM section S12 of RAMn on or off in System ON mode + 12 + 12 + + + On + On + 1 + + + + + S13POWER + Keep RAM section S13 of RAMn on or off in System ON mode + 13 + 13 + + + On + On + 1 + + + + + S14POWER + Keep RAM section S14 of RAMn on or off in System ON mode + 14 + 14 + + + On + On + 1 + + + + + S15POWER + Keep RAM section S15 of RAMn on or off in System ON mode + 15 + 15 + + + On + On + 1 + + + + + S0RETENTION + Keep retention on RAM section S0 when RAM section is switched off + 16 + 16 + + + On + On + 1 + + + + + S1RETENTION + Keep retention on RAM section S1 when RAM section is switched off + 17 + 17 + + + On + On + 1 + + + + + S2RETENTION + Keep retention on RAM section S2 when RAM section is switched off + 18 + 18 + + + On + On + 1 + + + + + S3RETENTION + Keep retention on RAM section S3 when RAM section is switched off + 19 + 19 + + + On + On + 1 + + + + + S4RETENTION + Keep retention on RAM section S4 when RAM section is switched off + 20 + 20 + + + On + On + 1 + + + + + S5RETENTION + Keep retention on RAM section S5 when RAM section is switched off + 21 + 21 + + + On + On + 1 + + + + + S6RETENTION + Keep retention on RAM section S6 when RAM section is switched off + 22 + 22 + + + On + On + 1 + + + + + S7RETENTION + Keep retention on RAM section S7 when RAM section is switched off + 23 + 23 + + + On + On + 1 + + + + + S8RETENTION + Keep retention on RAM section S8 when RAM section is switched off + 24 + 24 + + + On + On + 1 + + + + + S9RETENTION + Keep retention on RAM section S9 when RAM section is switched off + 25 + 25 + + + On + On + 1 + + + + + S10RETENTION + Keep retention on RAM section S10 when RAM section is switched off + 26 + 26 + + + On + On + 1 + + + + + S11RETENTION + Keep retention on RAM section S11 when RAM section is switched off + 27 + 27 + + + On + On + 1 + + + + + S12RETENTION + Keep retention on RAM section S12 when RAM section is switched off + 28 + 28 + + + On + On + 1 + + + + + S13RETENTION + Keep retention on RAM section S13 when RAM section is switched off + 29 + 29 + + + On + On + 1 + + + + + S14RETENTION + Keep retention on RAM section S14 when RAM section is switched off + 30 + 30 + + + On + On + 1 + + + + + S15RETENTION + Keep retention on RAM section S15 when RAM section is switched off + 31 + 31 + + + On + On + 1 + + + + + + + POWERCLR + Description cluster: RAMn power control clear register + 0x008 + write-only + 0x0000FFFF + + + S0POWER + Keep RAM section S0 of RAMn on or off in System ON mode + 0 + 0 + + + Off + Off + 1 + + + + + S1POWER + Keep RAM section S1 of RAMn on or off in System ON mode + 1 + 1 + + + Off + Off + 1 + + + + + S2POWER + Keep RAM section S2 of RAMn on or off in System ON mode + 2 + 2 + + + Off + Off + 1 + + + + + S3POWER + Keep RAM section S3 of RAMn on or off in System ON mode + 3 + 3 + + + Off + Off + 1 + + + + + S4POWER + Keep RAM section S4 of RAMn on or off in System ON mode + 4 + 4 + + + Off + Off + 1 + + + + + S5POWER + Keep RAM section S5 of RAMn on or off in System ON mode + 5 + 5 + + + Off + Off + 1 + + + + + S6POWER + Keep RAM section S6 of RAMn on or off in System ON mode + 6 + 6 + + + Off + Off + 1 + + + + + S7POWER + Keep RAM section S7 of RAMn on or off in System ON mode + 7 + 7 + + + Off + Off + 1 + + + + + S8POWER + Keep RAM section S8 of RAMn on or off in System ON mode + 8 + 8 + + + Off + Off + 1 + + + + + S9POWER + Keep RAM section S9 of RAMn on or off in System ON mode + 9 + 9 + + + Off + Off + 1 + + + + + S10POWER + Keep RAM section S10 of RAMn on or off in System ON mode + 10 + 10 + + + Off + Off + 1 + + + + + S11POWER + Keep RAM section S11 of RAMn on or off in System ON mode + 11 + 11 + + + Off + Off + 1 + + + + + S12POWER + Keep RAM section S12 of RAMn on or off in System ON mode + 12 + 12 + + + Off + Off + 1 + + + + + S13POWER + Keep RAM section S13 of RAMn on or off in System ON mode + 13 + 13 + + + Off + Off + 1 + + + + + S14POWER + Keep RAM section S14 of RAMn on or off in System ON mode + 14 + 14 + + + Off + Off + 1 + + + + + S15POWER + Keep RAM section S15 of RAMn on or off in System ON mode + 15 + 15 + + + Off + Off + 1 + + + + + S0RETENTION + Keep retention on RAM section S0 when RAM section is switched off + 16 + 16 + + + Off + Off + 1 + + + + + S1RETENTION + Keep retention on RAM section S1 when RAM section is switched off + 17 + 17 + + + Off + Off + 1 + + + + + S2RETENTION + Keep retention on RAM section S2 when RAM section is switched off + 18 + 18 + + + Off + Off + 1 + + + + + S3RETENTION + Keep retention on RAM section S3 when RAM section is switched off + 19 + 19 + + + Off + Off + 1 + + + + + S4RETENTION + Keep retention on RAM section S4 when RAM section is switched off + 20 + 20 + + + Off + Off + 1 + + + + + S5RETENTION + Keep retention on RAM section S5 when RAM section is switched off + 21 + 21 + + + Off + Off + 1 + + + + + S6RETENTION + Keep retention on RAM section S6 when RAM section is switched off + 22 + 22 + + + Off + Off + 1 + + + + + S7RETENTION + Keep retention on RAM section S7 when RAM section is switched off + 23 + 23 + + + Off + Off + 1 + + + + + S8RETENTION + Keep retention on RAM section S8 when RAM section is switched off + 24 + 24 + + + Off + Off + 1 + + + + + S9RETENTION + Keep retention on RAM section S9 when RAM section is switched off + 25 + 25 + + + Off + Off + 1 + + + + + S10RETENTION + Keep retention on RAM section S10 when RAM section is switched off + 26 + 26 + + + Off + Off + 1 + + + + + S11RETENTION + Keep retention on RAM section S11 when RAM section is switched off + 27 + 27 + + + Off + Off + 1 + + + + + S12RETENTION + Keep retention on RAM section S12 when RAM section is switched off + 28 + 28 + + + Off + Off + 1 + + + + + S13RETENTION + Keep retention on RAM section S13 when RAM section is switched off + 29 + 29 + + + Off + Off + 1 + + + + + S14RETENTION + Keep retention on RAM section S14 when RAM section is switched off + 30 + 30 + + + Off + Off + 1 + + + + + S15RETENTION + Keep retention on RAM section S15 when RAM section is switched off + 31 + 31 + + + Off + Off + 1 + + + + + + + + + + P0 + GPIO Port 1 + 0x50000000 + GPIO + + 0 + 0x1000 + registers + + GPIO + 0x20 + + + OUT + Write GPIO port + 0x504 + read-write + + + PIN0 + Pin 0 + 0 + 0 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + + Low + Pin driver is low + 0 + + + High + Pin driver is high + 1 + + + + + + + OUTSET + Set individual bits in GPIO port + 0x508 + read-write + oneToSet + + + PIN0 + Pin 0 + 0 + 0 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + 1 + Write: a '1' sets the pin high; a '0' has no effect + + + + + PIN1 + Pin 1 + 1 + 1 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Set + Write: a '1' sets the pin high; a '0' has no effect + 1 + + + + + + + OUTCLR + Clear individual bits in GPIO port + 0x50C + read-write + oneToClear + + + PIN0 + Pin 0 + 0 + 0 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + read + + Low + Read: pin driver is low + 0 + + + High + Read: pin driver is high + 1 + + + + write + + Clear + Write: a '1' sets the pin low; a '0' has no effect + 1 + + + + + + + IN + Read GPIO port + 0x510 + read-only + + + PIN0 + Pin 0 + 0 + 0 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + + Low + Pin input is low + 0 + + + High + Pin input is high + 1 + + + + + + + DIR + Direction of GPIO pins + 0x514 + read-write + + + PIN0 + Pin 0 + 0 + 0 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN1 + Pin 1 + 1 + 1 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN2 + Pin 2 + 2 + 2 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN3 + Pin 3 + 3 + 3 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN4 + Pin 4 + 4 + 4 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN5 + Pin 5 + 5 + 5 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN6 + Pin 6 + 6 + 6 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN7 + Pin 7 + 7 + 7 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN8 + Pin 8 + 8 + 8 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN9 + Pin 9 + 9 + 9 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN10 + Pin 10 + 10 + 10 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN11 + Pin 11 + 11 + 11 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN12 + Pin 12 + 12 + 12 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN13 + Pin 13 + 13 + 13 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN14 + Pin 14 + 14 + 14 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN15 + Pin 15 + 15 + 15 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN16 + Pin 16 + 16 + 16 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN17 + Pin 17 + 17 + 17 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN18 + Pin 18 + 18 + 18 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN19 + Pin 19 + 19 + 19 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN20 + Pin 20 + 20 + 20 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN21 + Pin 21 + 21 + 21 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN22 + Pin 22 + 22 + 22 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN23 + Pin 23 + 23 + 23 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN24 + Pin 24 + 24 + 24 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN25 + Pin 25 + 25 + 25 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN26 + Pin 26 + 26 + 26 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN27 + Pin 27 + 27 + 27 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN28 + Pin 28 + 28 + 28 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN29 + Pin 29 + 29 + 29 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN30 + Pin 30 + 30 + 30 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + PIN31 + Pin 31 + 31 + 31 + + + Input + Pin set as input + 0 + + + Output + Pin set as output + 1 + + + + + + + DIRSET + DIR set register + 0x518 + read-write + oneToSet + + + PIN0 + Set as output pin 0 + 0 + 0 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN1 + Set as output pin 1 + 1 + 1 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN2 + Set as output pin 2 + 2 + 2 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN3 + Set as output pin 3 + 3 + 3 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN4 + Set as output pin 4 + 4 + 4 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN5 + Set as output pin 5 + 5 + 5 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN6 + Set as output pin 6 + 6 + 6 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN7 + Set as output pin 7 + 7 + 7 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN8 + Set as output pin 8 + 8 + 8 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN9 + Set as output pin 9 + 9 + 9 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN10 + Set as output pin 10 + 10 + 10 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN11 + Set as output pin 11 + 11 + 11 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN12 + Set as output pin 12 + 12 + 12 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN13 + Set as output pin 13 + 13 + 13 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN14 + Set as output pin 14 + 14 + 14 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN15 + Set as output pin 15 + 15 + 15 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN16 + Set as output pin 16 + 16 + 16 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN17 + Set as output pin 17 + 17 + 17 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN18 + Set as output pin 18 + 18 + 18 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN19 + Set as output pin 19 + 19 + 19 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN20 + Set as output pin 20 + 20 + 20 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN21 + Set as output pin 21 + 21 + 21 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN22 + Set as output pin 22 + 22 + 22 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN23 + Set as output pin 23 + 23 + 23 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN24 + Set as output pin 24 + 24 + 24 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN25 + Set as output pin 25 + 25 + 25 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN26 + Set as output pin 26 + 26 + 26 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN27 + Set as output pin 27 + 27 + 27 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN28 + Set as output pin 28 + 28 + 28 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN29 + Set as output pin 29 + 29 + 29 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN30 + Set as output pin 30 + 30 + 30 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + PIN31 + Set as output pin 31 + 31 + 31 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Set + Write: a '1' sets pin to output; a '0' has no effect + 1 + + + + + + + DIRCLR + DIR clear register + 0x51C + read-write + oneToClear + + + PIN0 + Set as input pin 0 + 0 + 0 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN1 + Set as input pin 1 + 1 + 1 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN2 + Set as input pin 2 + 2 + 2 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN3 + Set as input pin 3 + 3 + 3 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN4 + Set as input pin 4 + 4 + 4 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN5 + Set as input pin 5 + 5 + 5 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN6 + Set as input pin 6 + 6 + 6 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN7 + Set as input pin 7 + 7 + 7 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN8 + Set as input pin 8 + 8 + 8 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN9 + Set as input pin 9 + 9 + 9 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN10 + Set as input pin 10 + 10 + 10 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN11 + Set as input pin 11 + 11 + 11 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN12 + Set as input pin 12 + 12 + 12 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN13 + Set as input pin 13 + 13 + 13 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN14 + Set as input pin 14 + 14 + 14 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN15 + Set as input pin 15 + 15 + 15 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN16 + Set as input pin 16 + 16 + 16 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN17 + Set as input pin 17 + 17 + 17 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN18 + Set as input pin 18 + 18 + 18 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN19 + Set as input pin 19 + 19 + 19 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN20 + Set as input pin 20 + 20 + 20 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN21 + Set as input pin 21 + 21 + 21 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN22 + Set as input pin 22 + 22 + 22 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN23 + Set as input pin 23 + 23 + 23 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN24 + Set as input pin 24 + 24 + 24 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN25 + Set as input pin 25 + 25 + 25 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN26 + Set as input pin 26 + 26 + 26 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN27 + Set as input pin 27 + 27 + 27 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN28 + Set as input pin 28 + 28 + 28 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN29 + Set as input pin 29 + 29 + 29 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN30 + Set as input pin 30 + 30 + 30 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + PIN31 + Set as input pin 31 + 31 + 31 + + read + + Input + Read: pin set as input + 0 + + + Output + Read: pin set as output + 1 + + + + write + + Clear + Write: a '1' sets pin to input; a '0' has no effect + 1 + + + + + + + LATCH + Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers + 0x520 + read-write + + + PIN0 + Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear. + 0 + 0 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN1 + Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear. + 1 + 1 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN2 + Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear. + 2 + 2 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN3 + Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear. + 3 + 3 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN4 + Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear. + 4 + 4 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN5 + Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear. + 5 + 5 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN6 + Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear. + 6 + 6 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN7 + Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear. + 7 + 7 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN8 + Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear. + 8 + 8 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN9 + Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear. + 9 + 9 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN10 + Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear. + 10 + 10 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN11 + Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear. + 11 + 11 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN12 + Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear. + 12 + 12 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN13 + Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear. + 13 + 13 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN14 + Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear. + 14 + 14 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN15 + Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear. + 15 + 15 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN16 + Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear. + 16 + 16 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN17 + Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear. + 17 + 17 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN18 + Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear. + 18 + 18 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN19 + Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear. + 19 + 19 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN20 + Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear. + 20 + 20 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN21 + Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear. + 21 + 21 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN22 + Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear. + 22 + 22 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN23 + Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear. + 23 + 23 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN24 + Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear. + 24 + 24 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN25 + Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear. + 25 + 25 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN26 + Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear. + 26 + 26 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN27 + Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear. + 27 + 27 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN28 + Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear. + 28 + 28 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN29 + Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear. + 29 + 29 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN30 + Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear. + 30 + 30 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + PIN31 + Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear. + 31 + 31 + + + NotLatched + Criteria has not been met + 0 + + + Latched + Criteria has been met + 1 + + + + + + + DETECTMODE + Select between default DETECT signal behavior and LDETECT mode + 0x524 + read-write + + + DETECTMODE + Select between default DETECT signal behavior and LDETECT mode + 0 + 0 + + + Default + DETECT directly connected to PIN DETECT signals + 0 + + + LDETECT + Use the latched LDETECT behavior + 1 + + + + + + + 0x20 + 0x4 + PIN_CNF[%s] + Description collection: Configuration of GPIO pins + 0x700 + read-write + 0x00000002 + + + DIR + Pin direction. Same physical register as DIR register + 0 + 0 + + + Input + Configure pin as an input pin + 0 + + + Output + Configure pin as an output pin + 1 + + + + + INPUT + Connect or disconnect input buffer + 1 + 1 + + + Connect + Connect input buffer + 0 + + + Disconnect + Disconnect input buffer + 1 + + + + + PULL + Pull configuration + 2 + 3 + + + Disabled + No pull + 0 + + + Pulldown + Pull down on pin + 1 + + + Pullup + Pull up on pin + 3 + + + + + DRIVE + Drive configuration + 8 + 10 + + + S0S1 + Standard '0', standard '1' + 0 + + + H0S1 + High drive '0', standard '1' + 1 + + + S0H1 + Standard '0', high drive '1' + 2 + + + H0H1 + High drive '0', high 'drive '1'' + 3 + + + D0S1 + Disconnect '0' standard '1' (normally used for wired-or connections) + 4 + + + D0H1 + Disconnect '0', high drive '1' (normally used for wired-or connections) + 5 + + + S0D1 + Standard '0'. disconnect '1' (normally used for wired-and connections) + 6 + + + H0D1 + High drive '0', disconnect '1' (normally used for wired-and connections) + 7 + + + + + SENSE + Pin sensing mechanism + 16 + 17 + + + Disabled + Disabled + 0 + + + High + Sense for high level + 2 + + + Low + Sense for low level + 3 + + + + + + + + + P1 + GPIO Port 2 + 0x50000300 + P0 + + + RADIO + 2.4 GHz radio + 0x40001000 + + 0 + 0x1000 + registers + + + RADIO + 1 + + RADIO + 0x20 + + + TASKS_TXEN + Enable RADIO in TX mode + 0x000 + write-only + + + TASKS_TXEN + Enable RADIO in TX mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RXEN + Enable RADIO in RX mode + 0x004 + write-only + + + TASKS_RXEN + Enable RADIO in RX mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_START + Start RADIO + 0x008 + write-only + + + TASKS_START + Start RADIO + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop RADIO + 0x00C + write-only + + + TASKS_STOP + Stop RADIO + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DISABLE + Disable RADIO + 0x010 + write-only + + + TASKS_DISABLE + Disable RADIO + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RSSISTART + Start the RSSI and take one single sample of the receive signal strength + 0x014 + write-only + + + TASKS_RSSISTART + Start the RSSI and take one single sample of the receive signal strength + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RSSISTOP + Stop the RSSI measurement + 0x018 + write-only + + + TASKS_RSSISTOP + Stop the RSSI measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_BCSTART + Start the bit counter + 0x01C + write-only + + + TASKS_BCSTART + Start the bit counter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_BCSTOP + Stop the bit counter + 0x020 + write-only + + + TASKS_BCSTOP + Stop the bit counter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EDSTART + Start the energy detect measurement used in IEEE 802.15.4 mode + 0x024 + write-only + + + TASKS_EDSTART + Start the energy detect measurement used in IEEE 802.15.4 mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EDSTOP + Stop the energy detect measurement + 0x028 + write-only + + + TASKS_EDSTOP + Stop the energy detect measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CCASTART + Start the clear channel assessment used in IEEE 802.15.4 mode + 0x02C + write-only + + + TASKS_CCASTART + Start the clear channel assessment used in IEEE 802.15.4 mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CCASTOP + Stop the clear channel assessment + 0x030 + write-only + + + TASKS_CCASTOP + Stop the clear channel assessment + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + RADIO has ramped up and is ready to be started + 0x100 + read-write + + + EVENTS_READY + RADIO has ramped up and is ready to be started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ADDRESS + Address sent or received + 0x104 + read-write + + + EVENTS_ADDRESS + Address sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PAYLOAD + Packet payload sent or received + 0x108 + read-write + + + EVENTS_PAYLOAD + Packet payload sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + Packet sent or received + 0x10C + read-write + + + EVENTS_END + Packet sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DISABLED + RADIO has been disabled + 0x110 + read-write + + + EVENTS_DISABLED + RADIO has been disabled + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DEVMATCH + A device address match occurred on the last received packet + 0x114 + read-write + + + EVENTS_DEVMATCH + A device address match occurred on the last received packet + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DEVMISS + No device address match occurred on the last received packet + 0x118 + read-write + + + EVENTS_DEVMISS + No device address match occurred on the last received packet + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RSSIEND + Sampling of receive signal strength complete + 0x11C + read-write + + + EVENTS_RSSIEND + Sampling of receive signal strength complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_BCMATCH + Bit counter reached bit count value + 0x128 + read-write + + + EVENTS_BCMATCH + Bit counter reached bit count value + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CRCOK + Packet received with CRC ok + 0x130 + read-write + + + EVENTS_CRCOK + Packet received with CRC ok + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CRCERROR + Packet received with CRC error + 0x134 + read-write + + + EVENTS_CRCERROR + Packet received with CRC error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_FRAMESTART + IEEE 802.15.4 length field received + 0x138 + read-write + + + EVENTS_FRAMESTART + IEEE 802.15.4 length field received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EDEND + Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register. + 0x13C + read-write + + + EVENTS_EDEND + Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EDSTOPPED + The sampling of energy detection has stopped + 0x140 + read-write + + + EVENTS_EDSTOPPED + The sampling of energy detection has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CCAIDLE + Wireless medium in idle - clear to send + 0x144 + read-write + + + EVENTS_CCAIDLE + Wireless medium in idle - clear to send + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CCABUSY + Wireless medium busy - do not send + 0x148 + read-write + + + EVENTS_CCABUSY + Wireless medium busy - do not send + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CCASTOPPED + The CCA has stopped + 0x14C + read-write + + + EVENTS_CCASTOPPED + The CCA has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RATEBOOST + Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit. + 0x150 + read-write + + + EVENTS_RATEBOOST + Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXREADY + RADIO has ramped up and is ready to be started TX path + 0x154 + read-write + + + EVENTS_TXREADY + RADIO has ramped up and is ready to be started TX path + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXREADY + RADIO has ramped up and is ready to be started RX path + 0x158 + read-write + + + EVENTS_RXREADY + RADIO has ramped up and is ready to be started RX path + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_MHRMATCH + MAC header match found + 0x15C + read-write + + + EVENTS_MHRMATCH + MAC header match found + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SYNC + Preamble indicator. + 0x168 + read-write + + + EVENTS_SYNC + Preamble indicator. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PHYEND + Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air. + 0x16C + read-write + + + EVENTS_PHYEND + Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + READY_START + Shortcut between event READY and task START + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + END_DISABLE + Shortcut between event END and task DISABLE + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DISABLED_TXEN + Shortcut between event DISABLED and task TXEN + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DISABLED_RXEN + Shortcut between event DISABLED and task RXEN + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ADDRESS_RSSISTART + Shortcut between event ADDRESS and task RSSISTART + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + END_START + Shortcut between event END and task START + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ADDRESS_BCSTART + Shortcut between event ADDRESS and task BCSTART + 6 + 6 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DISABLED_RSSISTOP + Shortcut between event DISABLED and task RSSISTOP + 8 + 8 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + RXREADY_CCASTART + Shortcut between event RXREADY and task CCASTART + 11 + 11 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CCAIDLE_TXEN + Shortcut between event CCAIDLE and task TXEN + 12 + 12 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CCABUSY_DISABLE + Shortcut between event CCABUSY and task DISABLE + 13 + 13 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + FRAMESTART_BCSTART + Shortcut between event FRAMESTART and task BCSTART + 14 + 14 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READY_EDSTART + Shortcut between event READY and task EDSTART + 15 + 15 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + EDEND_DISABLE + Shortcut between event EDEND and task DISABLE + 16 + 16 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CCAIDLE_STOP + Shortcut between event CCAIDLE and task STOP + 17 + 17 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + TXREADY_START + Shortcut between event TXREADY and task START + 18 + 18 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + RXREADY_START + Shortcut between event RXREADY and task START + 19 + 19 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + PHYEND_DISABLE + Shortcut between event PHYEND and task DISABLE + 20 + 20 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + PHYEND_START + Shortcut between event PHYEND and task START + 21 + 21 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ADDRESS + Write '1' to enable interrupt for event ADDRESS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PAYLOAD + Write '1' to enable interrupt for event PAYLOAD + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DISABLED + Write '1' to enable interrupt for event DISABLED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DEVMATCH + Write '1' to enable interrupt for event DEVMATCH + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DEVMISS + Write '1' to enable interrupt for event DEVMISS + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RSSIEND + Write '1' to enable interrupt for event RSSIEND + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + BCMATCH + Write '1' to enable interrupt for event BCMATCH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CRCOK + Write '1' to enable interrupt for event CRCOK + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CRCERROR + Write '1' to enable interrupt for event CRCERROR + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + FRAMESTART + Write '1' to enable interrupt for event FRAMESTART + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EDEND + Write '1' to enable interrupt for event EDEND + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EDSTOPPED + Write '1' to enable interrupt for event EDSTOPPED + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CCAIDLE + Write '1' to enable interrupt for event CCAIDLE + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CCABUSY + Write '1' to enable interrupt for event CCABUSY + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CCASTOPPED + Write '1' to enable interrupt for event CCASTOPPED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RATEBOOST + Write '1' to enable interrupt for event RATEBOOST + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXREADY + Write '1' to enable interrupt for event TXREADY + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXREADY + Write '1' to enable interrupt for event RXREADY + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + MHRMATCH + Write '1' to enable interrupt for event MHRMATCH + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SYNC + Write '1' to enable interrupt for event SYNC + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PHYEND + Write '1' to enable interrupt for event PHYEND + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ADDRESS + Write '1' to disable interrupt for event ADDRESS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PAYLOAD + Write '1' to disable interrupt for event PAYLOAD + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DISABLED + Write '1' to disable interrupt for event DISABLED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DEVMATCH + Write '1' to disable interrupt for event DEVMATCH + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DEVMISS + Write '1' to disable interrupt for event DEVMISS + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RSSIEND + Write '1' to disable interrupt for event RSSIEND + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + BCMATCH + Write '1' to disable interrupt for event BCMATCH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CRCOK + Write '1' to disable interrupt for event CRCOK + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CRCERROR + Write '1' to disable interrupt for event CRCERROR + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + FRAMESTART + Write '1' to disable interrupt for event FRAMESTART + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EDEND + Write '1' to disable interrupt for event EDEND + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EDSTOPPED + Write '1' to disable interrupt for event EDSTOPPED + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CCAIDLE + Write '1' to disable interrupt for event CCAIDLE + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CCABUSY + Write '1' to disable interrupt for event CCABUSY + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CCASTOPPED + Write '1' to disable interrupt for event CCASTOPPED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RATEBOOST + Write '1' to disable interrupt for event RATEBOOST + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXREADY + Write '1' to disable interrupt for event TXREADY + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXREADY + Write '1' to disable interrupt for event RXREADY + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + MHRMATCH + Write '1' to disable interrupt for event MHRMATCH + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SYNC + Write '1' to disable interrupt for event SYNC + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PHYEND + Write '1' to disable interrupt for event PHYEND + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + CRCSTATUS + CRC status + 0x400 + read-only + + + CRCSTATUS + CRC status of packet received + 0 + 0 + + + CRCError + Packet received with CRC error + 0 + + + CRCOk + Packet received with CRC ok + 1 + + + + + + + RXMATCH + Received address + 0x408 + read-only + + + RXMATCH + Received address + 0 + 2 + + + + + RXCRC + CRC field of previously received packet + 0x40C + read-only + + + RXCRC + CRC field of previously received packet + 0 + 23 + + + + + DAI + Device address match index + 0x410 + read-only + + + DAI + Device address match index + 0 + 2 + + + + + PDUSTAT + Payload status + 0x414 + read-only + + + PDUSTAT + Status on payload length vs. PCNF1.MAXLEN + 0 + 0 + + + LessThan + Payload less than PCNF1.MAXLEN + 0 + + + GreaterThan + Payload greater than PCNF1.MAXLEN + 1 + + + + + CISTAT + Status on what rate packet is received with in Long Range + 1 + 2 + + + LR125kbit + Frame is received at 125kbps + 0 + + + LR500kbit + Frame is received at 500kbps + 1 + + + + + + + PACKETPTR + Packet pointer + 0x504 + read-write + + + PACKETPTR + Packet pointer + 0 + 31 + + + + + FREQUENCY + Frequency + 0x508 + read-write + 0x00000002 + + + FREQUENCY + Radio channel frequency + 0 + 6 + + + MAP + Channel map selection. + 8 + 8 + + + Default + Channel map between 2400 MHZ .. 2500 MHz + 0 + + + Low + Channel map between 2360 MHZ .. 2460 MHz + 1 + + + + + + + TXPOWER + Output power + 0x50C + read-write + + + TXPOWER + RADIO output power + 0 + 7 + + + Pos8dBm + +8 dBm + 0x8 + + + Pos7dBm + +7 dBm + 0x7 + + + Pos6dBm + +6 dBm + 0x6 + + + Pos5dBm + +5 dBm + 0x5 + + + Pos4dBm + +4 dBm + 0x4 + + + Pos3dBm + +3 dBm + 0x3 + + + Pos2dBm + +2 dBm + 0x2 + + + 0dBm + 0 dBm + 0x0 + + + Neg4dBm + -4 dBm + 0xFC + + + Neg8dBm + -8 dBm + 0xF8 + + + Neg12dBm + -12 dBm + 0xF4 + + + Neg16dBm + -16 dBm + 0xF0 + + + Neg20dBm + -20 dBm + 0xEC + + + Neg30dBm + Deprecated enumerator - -40 dBm + 0xE2 + + + Neg40dBm + -40 dBm + 0xD8 + + + + + + + MODE + Data rate and modulation + 0x510 + read-write + + + MODE + Radio data rate and modulation setting. The radio supports frequency-shift keying (FSK) modulation. + 0 + 3 + + + Nrf_1Mbit + 1 Mbit/s Nordic proprietary radio mode + 0 + + + Nrf_2Mbit + 2 Mbit/s Nordic proprietary radio mode + 1 + + + Ble_1Mbit + 1 Mbit/s BLE + 3 + + + Ble_2Mbit + 2 Mbit/s BLE + 4 + + + Ble_LR125Kbit + Long range 125 kbit/s TX, 125 kbit/s and 500 kbit/s RX + 5 + + + Ble_LR500Kbit + Long range 500 kbit/s TX, 125 kbit/s and 500 kbit/s RX + 6 + + + Ieee802154_250Kbit + IEEE 802.15.4-2006 250 kbit/s + 15 + + + + + + + PCNF0 + Packet configuration register 0 + 0x514 + read-write + + + LFLEN + Length on air of LENGTH field in number of bits. + 0 + 3 + + + S0LEN + Length on air of S0 field in number of bytes. + 8 + 8 + + + S1LEN + Length on air of S1 field in number of bits. + 16 + 19 + + + S1INCL + Include or exclude S1 field in RAM + 20 + 20 + + + Automatic + Include S1 field in RAM only if S1LEN &gt; 0 + 0 + + + Include + Always include S1 field in RAM independent of S1LEN + 1 + + + + + CILEN + Length of code indicator - long range + 22 + 23 + + + PLEN + Length of preamble on air. Decision point: TASKS_START task + 24 + 25 + + + 8bit + 8-bit preamble + 0 + + + 16bit + 16-bit preamble + 1 + + + 32bitZero + 32-bit zero preamble - used for IEEE 802.15.4 + 2 + + + LongRange + Preamble - used for BLE long range + 3 + + + + + CRCINC + Indicates if LENGTH field contains CRC or not + 26 + 26 + + + Exclude + LENGTH does not contain CRC + 0 + + + Include + LENGTH includes CRC + 1 + + + + + TERMLEN + Length of TERM field in Long Range operation + 29 + 30 + + + + + PCNF1 + Packet configuration register 1 + 0x518 + read-write + + + MAXLEN + Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN. + 0 + 7 + + + STATLEN + Static length in number of bytes + 8 + 15 + + + BALEN + Base address length in number of bytes + 16 + 18 + + + ENDIAN + On air endianness of packet, this applies to the S0, LENGTH, S1 and the PAYLOAD fields. + 24 + 24 + + + Little + Least significant bit on air first + 0 + + + Big + Most significant bit on air first + 1 + + + + + WHITEEN + Enable or disable packet whitening + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + BASE0 + Base address 0 + 0x51C + read-write + + + BASE0 + Base address 0 + 0 + 31 + + + + + BASE1 + Base address 1 + 0x520 + read-write + + + BASE1 + Base address 1 + 0 + 31 + + + + + PREFIX0 + Prefixes bytes for logical addresses 0-3 + 0x524 + read-write + + + AP0 + Address prefix 0. + 0 + 7 + + + AP1 + Address prefix 1. + 8 + 15 + + + AP2 + Address prefix 2. + 16 + 23 + + + AP3 + Address prefix 3. + 24 + 31 + + + + + PREFIX1 + Prefixes bytes for logical addresses 4-7 + 0x528 + read-write + + + AP4 + Address prefix 4. + 0 + 7 + + + AP5 + Address prefix 5. + 8 + 15 + + + AP6 + Address prefix 6. + 16 + 23 + + + AP7 + Address prefix 7. + 24 + 31 + + + + + TXADDRESS + Transmit address select + 0x52C + read-write + + + TXADDRESS + Transmit address select + 0 + 2 + + + + + RXADDRESSES + Receive address select + 0x530 + read-write + + + ADDR0 + Enable or disable reception on logical address 0. + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR1 + Enable or disable reception on logical address 1. + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR2 + Enable or disable reception on logical address 2. + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR3 + Enable or disable reception on logical address 3. + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR4 + Enable or disable reception on logical address 4. + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR5 + Enable or disable reception on logical address 5. + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR6 + Enable or disable reception on logical address 6. + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ADDR7 + Enable or disable reception on logical address 7. + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + CRCCNF + CRC configuration + 0x534 + read-write + + + LEN + CRC length in number of bytes. + 0 + 1 + + + Disabled + CRC length is zero and CRC calculation is disabled + 0 + + + One + CRC length is one byte and CRC calculation is enabled + 1 + + + Two + CRC length is two bytes and CRC calculation is enabled + 2 + + + Three + CRC length is three bytes and CRC calculation is enabled + 3 + + + + + SKIPADDR + Include or exclude packet address field out of CRC calculation. + 8 + 9 + + + Include + CRC calculation includes address field + 0 + + + Skip + CRC calculation does not include address field. The CRC calculation will start at the first byte after the address. + 1 + + + Ieee802154 + CRC calculation as per 802.15.4 standard. Starting at first byte after length field. + 2 + + + + + + + CRCPOLY + CRC polynomial + 0x538 + read-write + 0x00000000 + + + CRCPOLY + CRC polynomial + 0 + 23 + + + + + CRCINIT + CRC initial value + 0x53C + read-write + + + CRCINIT + CRC initial value + 0 + 23 + + + + + TIFS + Interframe spacing in us + 0x544 + read-write + + + TIFS + Interframe spacing in us + 0 + 9 + + + + + RSSISAMPLE + RSSI sample + 0x548 + read-only + + + RSSISAMPLE + RSSI sample + 0 + 6 + + + + + STATE + Current radio state + 0x550 + read-only + + + STATE + Current radio state + 0 + 3 + + + Disabled + RADIO is in the Disabled state + 0 + + + RxRu + RADIO is in the RXRU state + 1 + + + RxIdle + RADIO is in the RXIDLE state + 2 + + + Rx + RADIO is in the RX state + 3 + + + RxDisable + RADIO is in the RXDISABLED state + 4 + + + TxRu + RADIO is in the TXRU state + 9 + + + TxIdle + RADIO is in the TXIDLE state + 10 + + + Tx + RADIO is in the TX state + 11 + + + TxDisable + RADIO is in the TXDISABLED state + 12 + + + + + + + DATAWHITEIV + Data whitening initial value + 0x554 + read-write + 0x00000040 + + + DATAWHITEIV + Data whitening initial value. Bit 6 is hard-wired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'. + 0 + 6 + + + + + BCC + Bit counter compare + 0x560 + read-write + + + BCC + Bit counter compare + 0 + 31 + + + + + 0x8 + 0x4 + DAB[%s] + Description collection: Device address base segment n + 0x600 + read-write + + + DAB + Device address base segment n + 0 + 31 + + + + + 0x8 + 0x4 + DAP[%s] + Description collection: Device address prefix n + 0x620 + read-write + + + DAP + Device address prefix n + 0 + 15 + + + + + DACNF + Device address match configuration + 0x640 + read-write + + + ENA0 + Enable or disable device address matching using device address 0 + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA1 + Enable or disable device address matching using device address 1 + 1 + 1 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA2 + Enable or disable device address matching using device address 2 + 2 + 2 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA3 + Enable or disable device address matching using device address 3 + 3 + 3 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA4 + Enable or disable device address matching using device address 4 + 4 + 4 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA5 + Enable or disable device address matching using device address 5 + 5 + 5 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA6 + Enable or disable device address matching using device address 6 + 6 + 6 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ENA7 + Enable or disable device address matching using device address 7 + 7 + 7 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + TXADD0 + TxAdd for device address 0 + 8 + 8 + + + TXADD1 + TxAdd for device address 1 + 9 + 9 + + + TXADD2 + TxAdd for device address 2 + 10 + 10 + + + TXADD3 + TxAdd for device address 3 + 11 + 11 + + + TXADD4 + TxAdd for device address 4 + 12 + 12 + + + TXADD5 + TxAdd for device address 5 + 13 + 13 + + + TXADD6 + TxAdd for device address 6 + 14 + 14 + + + TXADD7 + TxAdd for device address 7 + 15 + 15 + + + + + MHRMATCHCONF + Search pattern configuration + 0x644 + read-write + + + MHRMATCHCONF + Search pattern configuration + 0 + 31 + + + + + MHRMATCHMAS + Pattern mask + 0x648 + read-write + + + MHRMATCHMAS + Pattern mask + 0 + 31 + + + + + MODECNF0 + Radio mode configuration register 0 + 0x650 + read-write + 0x00000200 + + + RU + Radio ramp-up time + 0 + 0 + + + Default + Default ramp-up time (tRXEN and tTXEN), compatible with firmware written for nRF51 + 0 + + + Fast + Fast ramp-up (tRXEN,FAST and tTXEN,FAST), see electrical specification for more information + 1 + + + + + DTX + Default TX value + 8 + 9 + + + B1 + Transmit '1' + 0 + + + B0 + Transmit '0' + 1 + + + Center + Transmit center frequency + 2 + + + + + + + SFD + IEEE 802.15.4 start of frame delimiter + 0x660 + read-write + 0x000000A7 + + + SFD + IEEE 802.15.4 start of frame delimiter + 0 + 7 + + + + + EDCNT + IEEE 802.15.4 energy detect loop count + 0x664 + read-write + 0x00000000 + + + EDCNT + IEEE 802.15.4 energy detect loop count + 0 + 20 + + + + + EDSAMPLE + IEEE 802.15.4 energy detect level + 0x668 + read-write + 0x00000000 + + + EDLVL + IEEE 802.15.4 energy detect level + 0 + 7 + + + + + CCACTRL + IEEE 802.15.4 clear channel assessment control + 0x66C + read-write + 0x052D0000 + + + CCAMODE + CCA mode of operation + 0 + 2 + + + EdMode + Energy above threshold + 0 + + + CarrierMode + Carrier seen + 1 + + + CarrierAndEdMode + Energy above threshold AND carrier seen + 2 + + + CarrierOrEdMode + Energy above threshold OR carrier seen + 3 + + + EdModeTest1 + Energy above threshold test mode that will abort when first ED measurement over threshold is seen. No averaging. + 4 + + + + + CCAEDTHRES + CCA energy busy threshold. Used in all the CCA modes except CarrierMode. + 8 + 15 + + + CCACORRTHRES + CCA correlator busy threshold. Only relevant to CarrierMode, CarrierAndEdMode and CarrierOrEdMode. + 16 + 23 + + + CCACORRCNT + Limit for occurances above CCACORRTHRES. When not equal to zero the corrolator based signal detect is enabled. + 24 + 31 + + + + + POWER + Peripheral power control + 0xFFC + read-write + 0x00000001 + + + POWER + Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again. + 0 + 0 + + + Disabled + Peripheral is powered off + 0 + + + Enabled + Peripheral is powered on + 1 + + + + + + + + + UART0 + Universal Asynchronous Receiver/Transmitter + 0x40002000 + UART + + 0 + 0x1000 + registers + + + UARTE0_UART0 + 2 + + UART + 0x20 + + + TASKS_STARTRX + Start UART receiver + 0x000 + write-only + + + TASKS_STARTRX + Start UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPRX + Stop UART receiver + 0x004 + write-only + + + TASKS_STOPRX + Stop UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start UART transmitter + 0x008 + write-only + + + TASKS_STARTTX + Start UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPTX + Stop UART transmitter + 0x00C + write-only + + + TASKS_STOPTX + Stop UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend UART + 0x01C + write-only + + + TASKS_SUSPEND + Suspend UART + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0x100 + read-write + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0x104 + read-write + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXDRDY + Data received in RXD + 0x108 + read-write + + + EVENTS_RXDRDY + Data received in RXD + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXDRDY + Data sent from TXD + 0x11C + read-write + + + EVENTS_TXDRDY + Data sent from TXD + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + Error detected + 0x124 + read-write + + + EVENTS_ERROR + Error detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXTO + Receiver timeout + 0x144 + read-write + + + EVENTS_RXTO + Receiver timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + CTS_STARTRX + Shortcut between event CTS and task STARTRX + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + NCTS_STOPRX + Shortcut between event NCTS and task STOPRX + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + CTS + Write '1' to enable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + NCTS + Write '1' to enable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXDRDY + Write '1' to enable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXDRDY + Write '1' to enable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXTO + Write '1' to enable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + CTS + Write '1' to disable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + NCTS + Write '1' to disable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXDRDY + Write '1' to disable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXDRDY + Write '1' to disable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXTO + Write '1' to disable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x480 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + PARITY + Parity error + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + FRAMING + Framing error occurred + 2 + 2 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + BREAK + Break condition + 3 + 3 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + + + ENABLE + Enable UART + 0x500 + read-write + + + ENABLE + Enable or disable UART + 0 + 3 + + + Disabled + Disable UART + 0 + + + Enabled + Enable UART + 4 + + + + + + + PSEL + Unspecified + UART_PSEL + read-write + 0x508 + + RTS + Pin select for RTS + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + TXD + Pin select for TXD + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CTS + Pin select for CTS + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + RXD + Pin select for RXD + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD register + 0x518 + read-only + modifyExternal + + + RXD + RX data received in previous transfers, double buffered + 0 + 7 + + + + + TXD + TXD register + 0x51C + write-only + + + TXD + TX data to be transferred + 0 + 7 + + + + + BAUDRATE + Baud rate. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + BAUDRATE + Baud rate + 0 + 31 + + + Baud1200 + 1200 baud (actual rate: 1205) + 0x0004F000 + + + Baud2400 + 2400 baud (actual rate: 2396) + 0x0009D000 + + + Baud4800 + 4800 baud (actual rate: 4808) + 0x0013B000 + + + Baud9600 + 9600 baud (actual rate: 9598) + 0x00275000 + + + Baud14400 + 14400 baud (actual rate: 14414) + 0x003B0000 + + + Baud19200 + 19200 baud (actual rate: 19208) + 0x004EA000 + + + Baud28800 + 28800 baud (actual rate: 28829) + 0x0075F000 + + + Baud31250 + 31250 baud + 0x00800000 + + + Baud38400 + 38400 baud (actual rate: 38462) + 0x009D5000 + + + Baud56000 + 56000 baud (actual rate: 55944) + 0x00E50000 + + + Baud57600 + 57600 baud (actual rate: 57762) + 0x00EBF000 + + + Baud76800 + 76800 baud (actual rate: 76923) + 0x013A9000 + + + Baud115200 + 115200 baud (actual rate: 115942) + 0x01D7E000 + + + Baud230400 + 230400 baud (actual rate: 231884) + 0x03AFB000 + + + Baud250000 + 250000 baud + 0x04000000 + + + Baud460800 + 460800 baud (actual rate: 470588) + 0x075F7000 + + + Baud921600 + 921600 baud (actual rate: 941176) + 0x0EBED000 + + + Baud1M + 1Mega baud + 0x10000000 + + + + + + + CONFIG + Configuration of parity and hardware flow control + 0x56C + read-write + + + HWFC + Hardware flow control + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + PARITY + Parity + 1 + 3 + + + Excluded + Exclude parity bit + 0x0 + + + Included + Include parity bit + 0x7 + + + + + STOP + Stop bits + 4 + 4 + + + One + One stop bit + 0 + + + Two + Two stop bits + 1 + + + + + + + + + UARTE0 + UART with EasyDMA 0 + 0x40002000 + UART0 + UARTE + + 0 + 0x1000 + registers + + + UARTE0_UART0 + 2 + + UARTE + 0x20 + + + TASKS_STARTRX + Start UART receiver + 0x000 + write-only + + + TASKS_STARTRX + Start UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPRX + Stop UART receiver + 0x004 + write-only + + + TASKS_STOPRX + Stop UART receiver + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start UART transmitter + 0x008 + write-only + + + TASKS_STARTTX + Start UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPTX + Stop UART transmitter + 0x00C + write-only + + + TASKS_STOPTX + Stop UART transmitter + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_FLUSHRX + Flush RX FIFO into RX buffer + 0x02C + write-only + + + TASKS_FLUSHRX + Flush RX FIFO into RX buffer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0x100 + read-write + + + EVENTS_CTS + CTS is activated (set low). Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0x104 + read-write + + + EVENTS_NCTS + CTS is deactivated (set high). Not Clear To Send. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXDRDY + Data received in RXD (but potentially not yet transferred to Data RAM) + 0x108 + read-write + + + EVENTS_RXDRDY + Data received in RXD (but potentially not yet transferred to Data RAM) + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + Receive buffer is filled up + 0x110 + read-write + + + EVENTS_ENDRX + Receive buffer is filled up + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXDRDY + Data sent from TXD + 0x11C + read-write + + + EVENTS_TXDRDY + Data sent from TXD + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDTX + Last TX byte transmitted + 0x120 + read-write + + + EVENTS_ENDTX + Last TX byte transmitted + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + Error detected + 0x124 + read-write + + + EVENTS_ERROR + Error detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXTO + Receiver timeout + 0x144 + read-write + + + EVENTS_RXTO + Receiver timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXSTARTED + UART receiver has started + 0x14C + read-write + + + EVENTS_RXSTARTED + UART receiver has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTARTED + UART transmitter has started + 0x150 + read-write + + + EVENTS_TXSTARTED + UART transmitter has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTOPPED + Transmitter stopped + 0x158 + read-write + + + EVENTS_TXSTOPPED + Transmitter stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + ENDRX_STARTRX + Shortcut between event ENDRX and task STARTRX + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ENDRX_STOPRX + Shortcut between event ENDRX and task STOPRX + 6 + 6 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + CTS + Enable or disable interrupt for event CTS + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + NCTS + Enable or disable interrupt for event NCTS + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXDRDY + Enable or disable interrupt for event RXDRDY + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDRX + Enable or disable interrupt for event ENDRX + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXDRDY + Enable or disable interrupt for event TXDRDY + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDTX + Enable or disable interrupt for event ENDTX + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXTO + Enable or disable interrupt for event RXTO + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXSTARTED + Enable or disable interrupt for event RXSTARTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTARTED + Enable or disable interrupt for event TXSTARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTOPPED + Enable or disable interrupt for event TXSTOPPED + 22 + 22 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + CTS + Write '1' to enable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + NCTS + Write '1' to enable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXDRDY + Write '1' to enable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXDRDY + Write '1' to enable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDTX + Write '1' to enable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXTO + Write '1' to enable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXSTARTED + Write '1' to enable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTARTED + Write '1' to enable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTOPPED + Write '1' to enable interrupt for event TXSTOPPED + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + CTS + Write '1' to disable interrupt for event CTS + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + NCTS + Write '1' to disable interrupt for event NCTS + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXDRDY + Write '1' to disable interrupt for event RXDRDY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXDRDY + Write '1' to disable interrupt for event TXDRDY + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDTX + Write '1' to disable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXTO + Write '1' to disable interrupt for event RXTO + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXSTARTED + Write '1' to disable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTARTED + Write '1' to disable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTOPPED + Write '1' to disable interrupt for event TXSTOPPED + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source This register is read/write one to clear. + 0x480 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + PARITY + Parity error + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + FRAMING + Framing error occurred + 2 + 2 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + BREAK + Break condition + 3 + 3 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + + + ENABLE + Enable UART + 0x500 + read-write + + + ENABLE + Enable or disable UARTE + 0 + 3 + + + Disabled + Disable UARTE + 0 + + + Enabled + Enable UARTE + 8 + + + + + + + PSEL + Unspecified + UARTE_PSEL + read-write + 0x508 + + RTS + Pin select for RTS signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + TXD + Pin select for TXD signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CTS + Pin select for CTS signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + RXD + Pin select for RXD signal + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + BAUDRATE + Baud rate. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + BAUDRATE + Baud rate + 0 + 31 + + + Baud1200 + 1200 baud (actual rate: 1205) + 0x0004F000 + + + Baud2400 + 2400 baud (actual rate: 2396) + 0x0009D000 + + + Baud4800 + 4800 baud (actual rate: 4808) + 0x0013B000 + + + Baud9600 + 9600 baud (actual rate: 9598) + 0x00275000 + + + Baud14400 + 14400 baud (actual rate: 14401) + 0x003AF000 + + + Baud19200 + 19200 baud (actual rate: 19208) + 0x004EA000 + + + Baud28800 + 28800 baud (actual rate: 28777) + 0x0075C000 + + + Baud31250 + 31250 baud + 0x00800000 + + + Baud38400 + 38400 baud (actual rate: 38369) + 0x009D0000 + + + Baud56000 + 56000 baud (actual rate: 55944) + 0x00E50000 + + + Baud57600 + 57600 baud (actual rate: 57554) + 0x00EB0000 + + + Baud76800 + 76800 baud (actual rate: 76923) + 0x013A9000 + + + Baud115200 + 115200 baud (actual rate: 115108) + 0x01D60000 + + + Baud230400 + 230400 baud (actual rate: 231884) + 0x03B00000 + + + Baud250000 + 250000 baud + 0x04000000 + + + Baud460800 + 460800 baud (actual rate: 457143) + 0x07400000 + + + Baud921600 + 921600 baud (actual rate: 941176) + 0x0F000000 + + + Baud1M + 1 megabaud + 0x10000000 + + + + + + + RXD + RXD EasyDMA channel + UARTE_RXD + read-write + 0x534 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + + TXD + TXD EasyDMA channel + UARTE_TXD + read-write + 0x544 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + + CONFIG + Configuration of parity and hardware flow control + 0x56C + read-write + + + HWFC + Hardware flow control + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + PARITY + Parity + 1 + 3 + + + Excluded + Exclude parity bit + 0x0 + + + Included + Include even parity bit + 0x7 + + + + + STOP + Stop bits + 4 + 4 + + + One + One stop bit + 0 + + + Two + Two stop bits + 1 + + + + + + + + + SPI0 + Serial Peripheral Interface 0 + 0x40003000 + SPI + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + SPI + 0x20 + + + EVENTS_READY + TXD byte sent and RXD byte received + 0x108 + read-write + + + EVENTS_READY + TXD byte sent and RXD byte received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + Enable SPI + 0x500 + read-write + + + ENABLE + Enable or disable SPI + 0 + 3 + + + Disabled + Disable SPI + 0 + + + Enabled + Enable SPI + 1 + + + + + + + PSEL + Unspecified + SPI_PSEL + read-write + 0x508 + + SCK + Pin select for SCK + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MOSI + Pin select for MOSI signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MISO + Pin select for MISO signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD register + 0x518 + read-only + modifyExternal + + + RXD + RX data received. Double buffered + 0 + 7 + + + + + TXD + TXD register + 0x51C + read-write + + + TXD + TX data to send. Double buffered. + 0 + 7 + + + + + FREQUENCY + SPI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + SPI master data rate + 0 + 31 + + + K125 + 125 kbps + 0x02000000 + + + K250 + 250 kbps + 0x04000000 + + + K500 + 500 kbps + 0x08000000 + + + M1 + 1 Mbps + 0x10000000 + + + M2 + 2 Mbps + 0x20000000 + + + M4 + 4 Mbps + 0x40000000 + + + M8 + 8 Mbps + 0x80000000 + + + + + + + CONFIG + Configuration register + 0x554 + read-write + + + ORDER + Bit order + 0 + 0 + + + MsbFirst + Most significant bit shifted out first + 0 + + + LsbFirst + Least significant bit shifted out first + 1 + + + + + CPHA + Serial clock (SCK) phase + 1 + 1 + + + Leading + Sample on leading edge of clock, shift serial data on trailing edge + 0 + + + Trailing + Sample on trailing edge of clock, shift serial data on leading edge + 1 + + + + + CPOL + Serial clock (SCK) polarity + 2 + 2 + + + ActiveHigh + Active high + 0 + + + ActiveLow + Active low + 1 + + + + + + + + + SPIM0 + Serial Peripheral Interface Master with EasyDMA 0 + 0x40003000 + SPI0 + SPIM + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + SPIM + 0x20 + + + TASKS_START + Start SPI transaction + 0x010 + write-only + + + TASKS_START + Start SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop SPI transaction + 0x014 + write-only + + + TASKS_STOP + Stop SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend SPI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume SPI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume SPI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + SPI transaction has stopped + 0x104 + read-write + + + EVENTS_STOPPED + SPI transaction has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + End of RXD buffer reached + 0x110 + read-write + + + EVENTS_ENDRX + End of RXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + End of RXD buffer and TXD buffer reached + 0x118 + read-write + + + EVENTS_END + End of RXD buffer and TXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDTX + End of TXD buffer reached + 0x120 + read-write + + + EVENTS_ENDTX + End of TXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STARTED + Transaction started + 0x14C + read-write + + + EVENTS_STARTED + Transaction started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + END_START + Shortcut between event END and task START + 17 + 17 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDTX + Write '1' to enable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STARTED + Write '1' to enable interrupt for event STARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDTX + Write '1' to disable interrupt for event ENDTX + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STARTED + Write '1' to disable interrupt for event STARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + STALLSTAT + Stall status for EasyDMA RAM accesses. The fields in this register are set to STALL by hardware whenever a stall occurs and can be cleared (set to NOSTALL) by the CPU. + 0x400 + read-write + 0x00000000 + + + TX + Stall status for EasyDMA RAM reads + 0 + 0 + + + NOSTALL + No stall + 0 + + + STALL + A stall has occurred + 1 + + + + + RX + Stall status for EasyDMA RAM writes + 1 + 1 + + + NOSTALL + No stall + 0 + + + STALL + A stall has occurred + 1 + + + + + + + ENABLE + Enable SPIM + 0x500 + read-write + + + ENABLE + Enable or disable SPIM + 0 + 3 + + + Disabled + Disable SPIM + 0 + + + Enabled + Enable SPIM + 7 + + + + + + + PSEL + Unspecified + SPIM_PSEL + read-write + 0x508 + + SCK + Pin select for SCK + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MOSI + Pin select for MOSI signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MISO + Pin select for MISO signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CSN + Pin select for CSN + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + FREQUENCY + SPI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + SPI master data rate + 0 + 31 + + + K125 + 125 kbps + 0x02000000 + + + K250 + 250 kbps + 0x04000000 + + + K500 + 500 kbps + 0x08000000 + + + M1 + 1 Mbps + 0x10000000 + + + M2 + 2 Mbps + 0x20000000 + + + M4 + 4 Mbps + 0x40000000 + + + M8 + 8 Mbps + 0x80000000 + + + M16 + 16 Mbps + 0x0A000000 + + + M32 + 32 Mbps + 0x14000000 + + + + + + + RXD + RXD EasyDMA channel + SPIM_RXD + read-write + 0x534 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + TXD EasyDMA channel + SPIM_TXD + read-write + 0x544 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + CONFIG + Configuration register + 0x554 + read-write + + + ORDER + Bit order + 0 + 0 + + + MsbFirst + Most significant bit shifted out first + 0 + + + LsbFirst + Least significant bit shifted out first + 1 + + + + + CPHA + Serial clock (SCK) phase + 1 + 1 + + + Leading + Sample on leading edge of clock, shift serial data on trailing edge + 0 + + + Trailing + Sample on trailing edge of clock, shift serial data on leading edge + 1 + + + + + CPOL + Serial clock (SCK) polarity + 2 + 2 + + + ActiveHigh + Active high + 0 + + + ActiveLow + Active low + 1 + + + + + + + IFTIMING + Unspecified + SPIM_IFTIMING + read-write + 0x560 + + RXDELAY + Sample delay for input serial data on MISO + 0x000 + read-write + 0x00000002 + + + RXDELAY + Sample delay for input serial data on MISO. The value specifies the number of 64 MHz clock cycles (15.625 ns) delay from the the sampling edge of SCK (leading edge for CONFIG.CPHA = 0, trailing edge for CONFIG.CPHA = 1) until the input serial data is sampled. As en example, if RXDELAY = 0 and CONFIG.CPHA = 0, the input serial data is sampled on the rising edge of SCK. + 0 + 2 + + + + + CSNDUR + Minimum duration between edge of CSN and edge of SCK and minimum duration CSN must stay high between transactions + 0x004 + read-write + 0x00000002 + + + CSNDUR + Minimum duration between edge of CSN and edge of SCK and minimum duration CSN must stay high between transactions. The value is specified in number of 64 MHz clock cycles (15.625 ns). + 0 + 7 + + + + + + CSNPOL + Polarity of CSN output + 0x568 + read-write + 0x00000000 + + + CSNPOL + Polarity of CSN output + 0 + 0 + + + LOW + Active low (idle state high) + 0 + + + HIGH + Active high (idle state low) + 1 + + + + + + + PSELDCX + Pin select for DCX signal + 0x56C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + DCXCNT + DCX configuration + 0x570 + read-write + + + DCXCNT + This register specifies the number of command bytes preceding the data bytes. The PSEL.DCX line will be low during transmission of command bytes and high during transmission of data bytes. Value 0xF indicates that all bytes are command bytes. + 0 + 3 + + + + + ORC + Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT + 0x5C0 + read-write + + + ORC + Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT. + 0 + 7 + + + + + + + SPIS0 + SPI Slave 0 + 0x40003000 + SPI0 + SPIS + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + SPIS + 0x20 + + + TASKS_ACQUIRE + Acquire SPI semaphore + 0x024 + write-only + + + TASKS_ACQUIRE + Acquire SPI semaphore + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RELEASE + Release SPI semaphore, enabling the SPI slave to acquire it + 0x028 + write-only + + + TASKS_RELEASE + Release SPI semaphore, enabling the SPI slave to acquire it + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_END + Granted transaction completed + 0x104 + read-write + + + EVENTS_END + Granted transaction completed + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + End of RXD buffer reached + 0x110 + read-write + + + EVENTS_ENDRX + End of RXD buffer reached + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ACQUIRED + Semaphore acquired + 0x128 + read-write + + + EVENTS_ACQUIRED + Semaphore acquired + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + END_ACQUIRE + Shortcut between event END and task ACQUIRE + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + END + Write '1' to enable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ACQUIRED + Write '1' to enable interrupt for event ACQUIRED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + END + Write '1' to disable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ACQUIRED + Write '1' to disable interrupt for event ACQUIRED + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + SEMSTAT + Semaphore status register + 0x400 + read-only + 0x00000001 + + + SEMSTAT + Semaphore status + 0 + 1 + + + Free + Semaphore is free + 0 + + + CPU + Semaphore is assigned to CPU + 1 + + + SPIS + Semaphore is assigned to SPI slave + 2 + + + CPUPending + Semaphore is assigned to SPI but a handover to the CPU is pending + 3 + + + + + + + STATUS + Status from last transaction + 0x440 + read-write + + + OVERREAD + TX buffer over-read detected, and prevented + 0 + 0 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + write + + Clear + Write: clear error on writing '1' + 1 + + + + + OVERFLOW + RX buffer overflow detected, and prevented + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + write + + Clear + Write: clear error on writing '1' + 1 + + + + + + + ENABLE + Enable SPI slave + 0x500 + read-write + + + ENABLE + Enable or disable SPI slave + 0 + 3 + + + Disabled + Disable SPI slave + 0 + + + Enabled + Enable SPI slave + 2 + + + + + + + PSEL + Unspecified + SPIS_PSEL + read-write + 0x508 + + SCK + Pin select for SCK + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MISO + Pin select for MISO signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + MOSI + Pin select for MOSI signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CSN + Pin select for CSN signal + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + Unspecified + SPIS_RXD + read-write + 0x534 + + PTR + RXD data pointer + 0x000 + read-write + + + PTR + RXD data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes received in last granted transaction + 0x008 + read-only + + + AMOUNT + Number of bytes received in the last granted transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + Unspecified + SPIS_TXD + read-write + 0x544 + + PTR + TXD data pointer + 0x000 + read-write + + + PTR + TXD data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transmitted in last granted transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transmitted in last granted transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + CONFIG + Configuration register + 0x554 + read-write + + + ORDER + Bit order + 0 + 0 + + + MsbFirst + Most significant bit shifted out first + 0 + + + LsbFirst + Least significant bit shifted out first + 1 + + + + + CPHA + Serial clock (SCK) phase + 1 + 1 + + + Leading + Sample on leading edge of clock, shift serial data on trailing edge + 0 + + + Trailing + Sample on trailing edge of clock, shift serial data on leading edge + 1 + + + + + CPOL + Serial clock (SCK) polarity + 2 + 2 + + + ActiveHigh + Active high + 0 + + + ActiveLow + Active low + 1 + + + + + + + DEF + Default character. Character clocked out in case of an ignored transaction. + 0x55C + read-write + + + DEF + Default character. Character clocked out in case of an ignored transaction. + 0 + 7 + + + + + ORC + Over-read character + 0x5C0 + read-write + + + ORC + Over-read character. Character clocked out after an over-read of the transmit buffer. + 0 + 7 + + + + + + + TWI0 + I2C compatible Two-Wire Interface 0 + 0x40003000 + SPI0 + TWI + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + TWI + 0x20 + + + TASKS_STARTRX + Start TWI receive sequence + 0x000 + write-only + + + TASKS_STARTRX + Start TWI receive sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start TWI transmit sequence + 0x008 + write-only + + + TASKS_STARTTX + Start TWI transmit sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop TWI transaction + 0x014 + write-only + + + TASKS_STOP + Stop TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend TWI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume TWI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + TWI stopped + 0x104 + read-write + + + EVENTS_STOPPED + TWI stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXDREADY + TWI RXD byte received + 0x108 + read-write + + + EVENTS_RXDREADY + TWI RXD byte received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXDSENT + TWI TXD byte sent + 0x11C + read-write + + + EVENTS_TXDSENT + TWI TXD byte sent + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + TWI error + 0x124 + read-write + + + EVENTS_ERROR + TWI error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_BB + TWI byte boundary, generated before each byte that is sent or received + 0x138 + read-write + + + EVENTS_BB + TWI byte boundary, generated before each byte that is sent or received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SUSPENDED + TWI entered the suspended state + 0x148 + read-write + + + EVENTS_SUSPENDED + TWI entered the suspended state + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + BB_SUSPEND + Shortcut between event BB and task SUSPEND + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + BB_STOP + Shortcut between event BB and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXDREADY + Write '1' to enable interrupt for event RXDREADY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXDSENT + Write '1' to enable interrupt for event TXDSENT + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + BB + Write '1' to enable interrupt for event BB + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SUSPENDED + Write '1' to enable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXDREADY + Write '1' to disable interrupt for event RXDREADY + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXDSENT + Write '1' to disable interrupt for event TXDSENT + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + BB + Write '1' to disable interrupt for event BB + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SUSPENDED + Write '1' to disable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x4C4 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + read + + NotPresent + Read: no overrun occured + 0 + + + Present + Read: overrun occured + 1 + + + + + ANACK + NACK received after sending the address (write '1' to clear) + 1 + 1 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + DNACK + NACK received after sending a data byte (write '1' to clear) + 2 + 2 + + read + + NotPresent + Read: error not present + 0 + + + Present + Read: error present + 1 + + + + + + + ENABLE + Enable TWI + 0x500 + read-write + + + ENABLE + Enable or disable TWI + 0 + 3 + + + Disabled + Disable TWI + 0 + + + Enabled + Enable TWI + 5 + + + + + + + PSEL + Unspecified + TWI_PSEL + read-write + 0x508 + + SCL + Pin select for SCL + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDA + Pin select for SDA + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD register + 0x518 + read-only + modifyExternal + + + RXD + RXD register + 0 + 7 + + + + + TXD + TXD register + 0x51C + read-write + + + TXD + TXD register + 0 + 7 + + + + + FREQUENCY + TWI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + TWI master clock frequency + 0 + 31 + + + K100 + 100 kbps + 0x01980000 + + + K250 + 250 kbps + 0x04000000 + + + K400 + 400 kbps (actual rate 410.256 kbps) + 0x06680000 + + + + + + + ADDRESS + Address used in the TWI transfer + 0x588 + read-write + + + ADDRESS + Address used in the TWI transfer + 0 + 6 + + + + + + + TWIM0 + I2C compatible Two-Wire Master Interface with EasyDMA 0 + 0x40003000 + SPI0 + TWIM + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + TWIM + 0x20 + + + TASKS_STARTRX + Start TWI receive sequence + 0x000 + write-only + + + TASKS_STARTRX + Start TWI receive sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start TWI transmit sequence + 0x008 + write-only + + + TASKS_STARTTX + Start TWI transmit sequence + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop TWI transaction. Must be issued while the TWI master is not suspended. + 0x014 + write-only + + + TASKS_STOP + Stop TWI transaction. Must be issued while the TWI master is not suspended. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend TWI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume TWI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + TWI stopped + 0x104 + read-write + + + EVENTS_STOPPED + TWI stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + TWI error + 0x124 + read-write + + + EVENTS_ERROR + TWI error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SUSPENDED + SUSPEND task has been issued, TWI traffic is now suspended. + 0x148 + read-write + + + EVENTS_SUSPENDED + SUSPEND task has been issued, TWI traffic is now suspended. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXSTARTED + Receive sequence started + 0x14C + read-write + + + EVENTS_RXSTARTED + Receive sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTARTED + Transmit sequence started + 0x150 + read-write + + + EVENTS_TXSTARTED + Transmit sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LASTRX + Byte boundary, starting to receive the last byte + 0x15C + read-write + + + EVENTS_LASTRX + Byte boundary, starting to receive the last byte + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LASTTX + Byte boundary, starting to transmit the last byte + 0x160 + read-write + + + EVENTS_LASTTX + Byte boundary, starting to transmit the last byte + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + LASTTX_STARTRX + Shortcut between event LASTTX and task STARTRX + 7 + 7 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTTX_SUSPEND + Shortcut between event LASTTX and task SUSPEND + 8 + 8 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTTX_STOP + Shortcut between event LASTTX and task STOP + 9 + 9 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTRX_STARTTX + Shortcut between event LASTRX and task STARTTX + 10 + 10 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTRX_SUSPEND + Shortcut between event LASTRX and task SUSPEND + 11 + 11 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LASTRX_STOP + Shortcut between event LASTRX and task STOP + 12 + 12 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SUSPENDED + Enable or disable interrupt for event SUSPENDED + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXSTARTED + Enable or disable interrupt for event RXSTARTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTARTED + Enable or disable interrupt for event TXSTARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + LASTRX + Enable or disable interrupt for event LASTRX + 23 + 23 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + LASTTX + Enable or disable interrupt for event LASTTX + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SUSPENDED + Write '1' to enable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXSTARTED + Write '1' to enable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTARTED + Write '1' to enable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LASTRX + Write '1' to enable interrupt for event LASTRX + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LASTTX + Write '1' to enable interrupt for event LASTTX + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SUSPENDED + Write '1' to disable interrupt for event SUSPENDED + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXSTARTED + Write '1' to disable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTARTED + Write '1' to disable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LASTRX + Write '1' to disable interrupt for event LASTRX + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LASTTX + Write '1' to disable interrupt for event LASTTX + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x4C4 + read-write + oneToClear + + + OVERRUN + Overrun error + 0 + 0 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + ANACK + NACK received after sending the address (write '1' to clear) + 1 + 1 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + DNACK + NACK received after sending a data byte (write '1' to clear) + 2 + 2 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + + + ENABLE + Enable TWIM + 0x500 + read-write + + + ENABLE + Enable or disable TWIM + 0 + 3 + + + Disabled + Disable TWIM + 0 + + + Enabled + Enable TWIM + 6 + + + + + + + PSEL + Unspecified + TWIM_PSEL + read-write + 0x508 + + SCL + Pin select for SCL signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDA + Pin select for SDA signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + FREQUENCY + TWI frequency. Accuracy depends on the HFCLK source selected. + 0x524 + read-write + 0x04000000 + + + FREQUENCY + TWI master clock frequency + 0 + 31 + + + K100 + 100 kbps + 0x01980000 + + + K250 + 250 kbps + 0x04000000 + + + K400 + 400 kbps + 0x06400000 + + + + + + + RXD + RXD EasyDMA channel + TWIM_RXD + read-write + 0x534 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in receive buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in receive buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction. In case of NACK error, includes the NACK'ed byte. + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 2 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + TXD EasyDMA channel + TWIM_TXD + read-write + 0x544 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in transmit buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in transmit buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction. In case of NACK error, includes the NACK'ed byte. + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 2 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + ADDRESS + Address used in the TWI transfer + 0x588 + read-write + + + ADDRESS + Address used in the TWI transfer + 0 + 6 + + + + + + + TWIS0 + I2C compatible Two-Wire Slave Interface with EasyDMA 0 + 0x40003000 + SPI0 + TWIS + + 0 + 0x1000 + registers + + + SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 + 3 + + TWIS + 0x20 + + + TASKS_STOP + Stop TWI transaction + 0x014 + write-only + + + TASKS_STOP + Stop TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SUSPEND + Suspend TWI transaction + 0x01C + write-only + + + TASKS_SUSPEND + Suspend TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RESUME + Resume TWI transaction + 0x020 + write-only + + + TASKS_RESUME + Resume TWI transaction + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_PREPARERX + Prepare the TWI slave to respond to a write command + 0x030 + write-only + + + TASKS_PREPARERX + Prepare the TWI slave to respond to a write command + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_PREPARETX + Prepare the TWI slave to respond to a read command + 0x034 + write-only + + + TASKS_PREPARETX + Prepare the TWI slave to respond to a read command + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + TWI stopped + 0x104 + read-write + + + EVENTS_STOPPED + TWI stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + TWI error + 0x124 + read-write + + + EVENTS_ERROR + TWI error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXSTARTED + Receive sequence started + 0x14C + read-write + + + EVENTS_RXSTARTED + Receive sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXSTARTED + Transmit sequence started + 0x150 + read-write + + + EVENTS_TXSTARTED + Transmit sequence started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_WRITE + Write command received + 0x164 + read-write + + + EVENTS_WRITE + Write command received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_READ + Read command received + 0x168 + read-write + + + EVENTS_READ + Read command received + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + WRITE_SUSPEND + Shortcut between event WRITE and task SUSPEND + 13 + 13 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READ_SUSPEND + Shortcut between event READ and task SUSPEND + 14 + 14 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXSTARTED + Enable or disable interrupt for event RXSTARTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXSTARTED + Enable or disable interrupt for event TXSTARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + WRITE + Enable or disable interrupt for event WRITE + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + READ + Enable or disable interrupt for event READ + 26 + 26 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXSTARTED + Write '1' to enable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXSTARTED + Write '1' to enable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + WRITE + Write '1' to enable interrupt for event WRITE + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + READ + Write '1' to enable interrupt for event READ + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXSTARTED + Write '1' to disable interrupt for event RXSTARTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXSTARTED + Write '1' to disable interrupt for event TXSTARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + WRITE + Write '1' to disable interrupt for event WRITE + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + READ + Write '1' to disable interrupt for event READ + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSRC + Error source + 0x4D0 + read-write + oneToClear + + + OVERFLOW + RX buffer overflow detected, and prevented + 0 + 0 + + + NotDetected + Error did not occur + 0 + + + Detected + Error occurred + 1 + + + + + DNACK + NACK sent after receiving a data byte + 2 + 2 + + + NotReceived + Error did not occur + 0 + + + Received + Error occurred + 1 + + + + + OVERREAD + TX buffer over-read detected, and prevented + 3 + 3 + + + NotDetected + Error did not occur + 0 + + + Detected + Error occurred + 1 + + + + + + + MATCH + Status register indicating which address had a match + 0x4D4 + read-only + + + MATCH + Indication of which address in {ADDRESS} that matched the incoming address + 0 + 0 + + + + + ENABLE + Enable TWIS + 0x500 + read-write + + + ENABLE + Enable or disable TWIS + 0 + 3 + + + Disabled + Disable TWIS + 0 + + + Enabled + Enable TWIS + 9 + + + + + + + PSEL + Unspecified + TWIS_PSEL + read-write + 0x508 + + SCL + Pin select for SCL signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDA + Pin select for SDA signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + RXD + RXD EasyDMA channel + TWIS_RXD + read-write + 0x534 + + PTR + RXD Data pointer + 0x000 + read-write + + + PTR + RXD Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in RXD buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in RXD buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last RXD transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last RXD transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + TXD + TXD EasyDMA channel + TWIS_TXD + read-write + 0x544 + + PTR + TXD Data pointer + 0x000 + read-write + + + PTR + TXD Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes in TXD buffer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes in TXD buffer + 0 + 15 + + + + + AMOUNT + Number of bytes transferred in the last TXD transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last TXD transaction + 0 + 15 + + + + + LIST + EasyDMA list type + 0x00C + read-write + + + LIST + List type + 0 + 1 + + + Disabled + Disable EasyDMA list + 0 + + + ArrayList + Use array list + 1 + + + + + + + + 0x2 + 0x4 + ADDRESS[%s] + Description collection: TWI slave address n + 0x588 + read-write + + + ADDRESS + TWI slave address + 0 + 6 + + + + + CONFIG + Configuration register for the address match mechanism + 0x594 + read-write + 0x00000001 + + + ADDRESS0 + Enable or disable address matching on ADDRESS[0] + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + ADDRESS1 + Enable or disable address matching on ADDRESS[1] + 1 + 1 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + + + ORC + Over-read character. Character sent out in case of an over-read of the transmit buffer. + 0x5C0 + read-write + + + ORC + Over-read character. Character sent out in case of an over-read of the transmit buffer. + 0 + 7 + + + + + + + SPI1 + Serial Peripheral Interface 1 + 0x40004000 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + SPIM1 + Serial Peripheral Interface Master with EasyDMA 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + SPIS1 + SPI Slave 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + TWI1 + I2C compatible Two-Wire Interface 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + TWIM1 + I2C compatible Two-Wire Master Interface with EasyDMA 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + TWIS1 + I2C compatible Two-Wire Slave Interface with EasyDMA 1 + 0x40004000 + SPI1 + + SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1 + 4 + + + + NFCT + NFC-A compatible radio + 0x40005000 + + 0 + 0x1000 + registers + + + NFCT + 5 + + NFCT + 0x20 + + + TASKS_ACTIVATE + Activate NFCT peripheral for incoming and outgoing frames, change state to activated + 0x000 + write-only + + + TASKS_ACTIVATE + Activate NFCT peripheral for incoming and outgoing frames, change state to activated + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DISABLE + Disable NFCT peripheral + 0x004 + write-only + + + TASKS_DISABLE + Disable NFCT peripheral + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SENSE + Enable NFC sense field mode, change state to sense mode + 0x008 + write-only + + + TASKS_SENSE + Enable NFC sense field mode, change state to sense mode + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTTX + Start transmission of an outgoing frame, change state to transmit + 0x00C + write-only + + + TASKS_STARTTX + Start transmission of an outgoing frame, change state to transmit + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_ENABLERXDATA + Initializes the EasyDMA for receive. + 0x01C + write-only + + + TASKS_ENABLERXDATA + Initializes the EasyDMA for receive. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_GOIDLE + Force state machine to IDLE state + 0x024 + write-only + + + TASKS_GOIDLE + Force state machine to IDLE state + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_GOSLEEP + Force state machine to SLEEP_A state + 0x028 + write-only + + + TASKS_GOSLEEP + Force state machine to SLEEP_A state + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + The NFCT peripheral is ready to receive and send frames + 0x100 + read-write + + + EVENTS_READY + The NFCT peripheral is ready to receive and send frames + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_FIELDDETECTED + Remote NFC field detected + 0x104 + read-write + + + EVENTS_FIELDDETECTED + Remote NFC field detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_FIELDLOST + Remote NFC field lost + 0x108 + read-write + + + EVENTS_FIELDLOST + Remote NFC field lost + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXFRAMESTART + Marks the start of the first symbol of a transmitted frame + 0x10C + read-write + + + EVENTS_TXFRAMESTART + Marks the start of the first symbol of a transmitted frame + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXFRAMEEND + Marks the end of the last transmitted on-air symbol of a frame + 0x110 + read-write + + + EVENTS_TXFRAMEEND + Marks the end of the last transmitted on-air symbol of a frame + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXFRAMESTART + Marks the end of the first symbol of a received frame + 0x114 + read-write + + + EVENTS_RXFRAMESTART + Marks the end of the first symbol of a received frame + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXFRAMEEND + Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer + 0x118 + read-write + + + EVENTS_RXFRAMEEND + Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + NFC error reported. The ERRORSTATUS register contains details on the source of the error. + 0x11C + read-write + + + EVENTS_ERROR + NFC error reported. The ERRORSTATUS register contains details on the source of the error. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RXERROR + NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error. + 0x128 + read-write + + + EVENTS_RXERROR + NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDRX + RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full. + 0x12C + read-write + + + EVENTS_ENDRX + RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDTX + Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer + 0x130 + read-write + + + EVENTS_ENDTX + Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_AUTOCOLRESSTARTED + Auto collision resolution process has started + 0x138 + read-write + + + EVENTS_AUTOCOLRESSTARTED + Auto collision resolution process has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_COLLISION + NFC auto collision resolution error reported. + 0x148 + read-write + + + EVENTS_COLLISION + NFC auto collision resolution error reported. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SELECTED + NFC auto collision resolution successfully completed + 0x14C + read-write + + + EVENTS_SELECTED + NFC auto collision resolution successfully completed + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STARTED + EasyDMA is ready to receive or send frames. + 0x150 + read-write + + + EVENTS_STARTED + EasyDMA is ready to receive or send frames. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + FIELDDETECTED_ACTIVATE + Shortcut between event FIELDDETECTED and task ACTIVATE + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + FIELDLOST_SENSE + Shortcut between event FIELDLOST and task SENSE + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + TXFRAMEEND_ENABLERXDATA + Shortcut between event TXFRAMEEND and task ENABLERXDATA + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + READY + Enable or disable interrupt for event READY + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + FIELDDETECTED + Enable or disable interrupt for event FIELDDETECTED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + FIELDLOST + Enable or disable interrupt for event FIELDLOST + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXFRAMESTART + Enable or disable interrupt for event TXFRAMESTART + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXFRAMEEND + Enable or disable interrupt for event TXFRAMEEND + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXFRAMESTART + Enable or disable interrupt for event RXFRAMESTART + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXFRAMEEND + Enable or disable interrupt for event RXFRAMEEND + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ERROR + Enable or disable interrupt for event ERROR + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RXERROR + Enable or disable interrupt for event RXERROR + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDRX + Enable or disable interrupt for event ENDRX + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDTX + Enable or disable interrupt for event ENDTX + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + AUTOCOLRESSTARTED + Enable or disable interrupt for event AUTOCOLRESSTARTED + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + COLLISION + Enable or disable interrupt for event COLLISION + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SELECTED + Enable or disable interrupt for event SELECTED + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STARTED + Enable or disable interrupt for event STARTED + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + FIELDDETECTED + Write '1' to enable interrupt for event FIELDDETECTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + FIELDLOST + Write '1' to enable interrupt for event FIELDLOST + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXFRAMESTART + Write '1' to enable interrupt for event TXFRAMESTART + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXFRAMEEND + Write '1' to enable interrupt for event TXFRAMEEND + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXFRAMESTART + Write '1' to enable interrupt for event RXFRAMESTART + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXFRAMEEND + Write '1' to enable interrupt for event RXFRAMEEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Write '1' to enable interrupt for event ERROR + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RXERROR + Write '1' to enable interrupt for event RXERROR + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDRX + Write '1' to enable interrupt for event ENDRX + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDTX + Write '1' to enable interrupt for event ENDTX + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + AUTOCOLRESSTARTED + Write '1' to enable interrupt for event AUTOCOLRESSTARTED + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COLLISION + Write '1' to enable interrupt for event COLLISION + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SELECTED + Write '1' to enable interrupt for event SELECTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STARTED + Write '1' to enable interrupt for event STARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + FIELDDETECTED + Write '1' to disable interrupt for event FIELDDETECTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + FIELDLOST + Write '1' to disable interrupt for event FIELDLOST + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXFRAMESTART + Write '1' to disable interrupt for event TXFRAMESTART + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXFRAMEEND + Write '1' to disable interrupt for event TXFRAMEEND + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXFRAMESTART + Write '1' to disable interrupt for event RXFRAMESTART + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXFRAMEEND + Write '1' to disable interrupt for event RXFRAMEEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Write '1' to disable interrupt for event ERROR + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RXERROR + Write '1' to disable interrupt for event RXERROR + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDRX + Write '1' to disable interrupt for event ENDRX + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDTX + Write '1' to disable interrupt for event ENDTX + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + AUTOCOLRESSTARTED + Write '1' to disable interrupt for event AUTOCOLRESSTARTED + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COLLISION + Write '1' to disable interrupt for event COLLISION + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SELECTED + Write '1' to disable interrupt for event SELECTED + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STARTED + Write '1' to disable interrupt for event STARTED + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ERRORSTATUS + NFC Error Status register + 0x404 + read-write + oneToClear + + + FRAMEDELAYTIMEOUT + No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX + 0 + 0 + + + + + FRAMESTATUS + Unspecified + NFCT_FRAMESTATUS + read-write + 0x40C + + RX + Result of last incoming frame + 0x000 + read-write + oneToClear + + + CRCERROR + No valid end of frame (EoF) detected + 0 + 0 + + + CRCCorrect + Valid CRC detected + 0 + + + CRCError + CRC received does not match local check + 1 + + + + + PARITYSTATUS + Parity status of received frame + 2 + 2 + + + ParityOK + Frame received with parity OK + 0 + + + ParityError + Frame received with parity error + 1 + + + + + OVERRUN + Overrun detected + 3 + 3 + + + NoOverrun + No overrun detected + 0 + + + Overrun + Overrun error + 1 + + + + + + + + NFCTAGSTATE + NfcTag state register + 0x410 + read-only + + + NFCTAGSTATE + NfcTag state + 0 + 2 + + + Disabled + Disabled or sense + 0 + + + RampUp + RampUp + 2 + + + Idle + Idle + 3 + + + Receive + Receive + 4 + + + FrameDelay + FrameDelay + 5 + + + Transmit + Transmit + 6 + + + + + + + SLEEPSTATE + Sleep state during automatic collision resolution + 0x420 + read-only + 0x00000000 + + + SLEEPSTATE + Reflects the sleep state during automatic collision resolution. Set to IDLE + by a GOIDLE task. Set to SLEEP_A when a valid SLEEP_REQ frame is received or by a + GOSLEEP task. + 0 + 0 + + + Idle + State is IDLE. + 0 + + + SleepA + State is SLEEP_A. + 1 + + + + + + + FIELDPRESENT + Indicates the presence or not of a valid field + 0x43C + read-only + + + FIELDPRESENT + Indicates if a valid field is present. Available only in the activated state. + 0 + 0 + + + NoField + No valid field detected + 0 + + + FieldPresent + Valid field detected + 1 + + + + + LOCKDETECT + Indicates if the low level has locked to the field + 1 + 1 + + + NotLocked + Not locked to field + 0 + + + Locked + Locked to field + 1 + + + + + + + FRAMEDELAYMIN + Minimum frame delay + 0x504 + read-write + 0x00000480 + + + FRAMEDELAYMIN + Minimum frame delay in number of 13.56 MHz clocks + 0 + 15 + + + + + FRAMEDELAYMAX + Maximum frame delay + 0x508 + read-write + 0x00001000 + + + FRAMEDELAYMAX + Maximum frame delay in number of 13.56 MHz clocks + 0 + 19 + + + + + FRAMEDELAYMODE + Configuration register for the Frame Delay Timer + 0x50C + read-write + 0x00000001 + + + FRAMEDELAYMODE + Configuration register for the Frame Delay Timer + 0 + 1 + + + FreeRun + Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout. + 0 + + + Window + Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX + 1 + + + ExactVal + Frame is transmitted exactly at FRAMEDELAYMAX + 2 + + + WindowGrid + Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX + 3 + + + + + + + PACKETPTR + Packet pointer for TXD and RXD data storage in Data RAM + 0x510 + read-write + 0x00000000 + + + PTR + Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte-aligned RAM address. + 0 + 31 + + + + + MAXLEN + Size of the RAM buffer allocated to TXD and RXD data storage each + 0x514 + read-write + + + MAXLEN + Size of the RAM buffer allocated to TXD and RXD data storage each + 0 + 8 + + + + + TXD + Unspecified + NFCT_TXD + read-write + 0x518 + + FRAMECONFIG + Configuration of outgoing frames + 0x000 + read-write + 0x00000017 + + + PARITY + Indicates if parity is added to the frame + 0 + 0 + + + NoParity + Parity is not added to TX frames + 0 + + + Parity + Parity is added to TX frames + 1 + + + + + DISCARDMODE + Discarding unused bits at start or end of a frame + 1 + 1 + + + DiscardEnd + Unused bits are discarded at end of frame (EoF) + 0 + + + DiscardStart + Unused bits are discarded at start of frame (SoF) + 1 + + + + + SOF + Adding SoF or not in TX frames + 2 + 2 + + + NoSoF + SoF symbol not added + 0 + + + SoF + SoF symbol added + 1 + + + + + CRCMODETX + CRC mode for outgoing frames + 4 + 4 + + + NoCRCTX + CRC is not added to the frame + 0 + + + CRC16TX + 16 bit CRC added to the frame based on all the data read from RAM that is used in the frame + 1 + + + + + + + AMOUNT + Size of outgoing frame + 0x004 + read-write + + + TXDATABITS + Number of bits in the last or first byte read from RAM that shall be included in the frame (excluding parity bit). + 0 + 2 + + + TXDATABYTES + Number of complete bytes that shall be included in the frame, excluding CRC, parity and framing + 3 + 11 + + + + + + RXD + Unspecified + NFCT_RXD + read-write + 0x520 + + FRAMECONFIG + Configuration of incoming frames + 0x000 + read-write + 0x00000015 + + + PARITY + Indicates if parity expected in RX frame + 0 + 0 + + + NoParity + Parity is not expected in RX frames + 0 + + + Parity + Parity is expected in RX frames + 1 + + + + + SOF + SoF expected or not in RX frames + 2 + 2 + + + NoSoF + SoF symbol is not expected in RX frames + 0 + + + SoF + SoF symbol is expected in RX frames + 1 + + + + + CRCMODERX + CRC mode for incoming frames + 4 + 4 + + + NoCRCRX + CRC is not expected in RX frames + 0 + + + CRC16RX + Last 16 bits in RX frame is CRC, CRC is checked and CRCSTATUS updated + 1 + + + + + + + AMOUNT + Size of last incoming frame + 0x004 + read-only + + + RXDATABITS + Number of bits in the last byte in the frame, if less than 8 (including CRC, but excluding parity and SoF/EoF framing). + 0 + 2 + + + RXDATABYTES + Number of complete bytes received in the frame (including CRC, but excluding parity and SoF/EoF framing) + 3 + 11 + + + + + + NFCID1_LAST + Last NFCID1 part (4, 7 or 10 bytes ID) + 0x590 + read-write + 0x00006363 + + + NFCID1_Z + NFCID1 byte Z (very last byte sent) + 0 + 7 + + + NFCID1_Y + NFCID1 byte Y + 8 + 15 + + + NFCID1_X + NFCID1 byte X + 16 + 23 + + + NFCID1_W + NFCID1 byte W + 24 + 31 + + + + + NFCID1_2ND_LAST + Second last NFCID1 part (7 or 10 bytes ID) + 0x594 + read-write + + + NFCID1_V + NFCID1 byte V + 0 + 7 + + + NFCID1_U + NFCID1 byte U + 8 + 15 + + + NFCID1_T + NFCID1 byte T + 16 + 23 + + + + + NFCID1_3RD_LAST + Third last NFCID1 part (10 bytes ID) + 0x598 + read-write + + + NFCID1_S + NFCID1 byte S + 0 + 7 + + + NFCID1_R + NFCID1 byte R + 8 + 15 + + + NFCID1_Q + NFCID1 byte Q + 16 + 23 + + + + + AUTOCOLRESCONFIG + Controls the auto collision resolution function. This setting must be done before the NFCT peripheral is activated. + 0x59C + read-write + 0x00000002 + + + MODE + Enables/disables auto collision resolution + 0 + 0 + + + Enabled + Auto collision resolution enabled + 0 + + + Disabled + Auto collision resolution disabled + 1 + + + + + + + SENSRES + NFC-A SENS_RES auto-response settings + 0x5A0 + read-write + 0x00000001 + + + BITFRAMESDD + Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification + 0 + 4 + + + SDD00000 + SDD pattern 00000 + 0 + + + SDD00001 + SDD pattern 00001 + 1 + + + SDD00010 + SDD pattern 00010 + 2 + + + SDD00100 + SDD pattern 00100 + 4 + + + SDD01000 + SDD pattern 01000 + 8 + + + SDD10000 + SDD pattern 10000 + 16 + + + + + RFU5 + Reserved for future use. Shall be 0. + 5 + 5 + + + NFCIDSIZE + NFCID1 size. This value is used by the auto collision resolution engine. + 6 + 7 + + + NFCID1Single + NFCID1 size: single (4 bytes) + 0 + + + NFCID1Double + NFCID1 size: double (7 bytes) + 1 + + + NFCID1Triple + NFCID1 size: triple (10 bytes) + 2 + + + + + PLATFCONFIG + Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification + 8 + 11 + + + RFU74 + Reserved for future use. Shall be 0. + 12 + 15 + + + + + SELRES + NFC-A SEL_RES auto-response settings + 0x5A4 + read-write + + + RFU10 + Reserved for future use. Shall be 0. + 0 + 1 + + + CASCADE + Cascade as defined by the b3 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification (controlled by hardware, shall be 0) + 2 + 2 + + + RFU43 + Reserved for future use. Shall be 0. + 3 + 4 + + + PROTOCOL + Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification + 5 + 6 + + + RFU7 + Reserved for future use. Shall be 0. + 7 + 7 + + + + + + + GPIOTE + GPIO Tasks and Events + 0x40006000 + + 0 + 0x1000 + registers + + + GPIOTE + 6 + + GPIOTE + 0x20 + + + 0x8 + 0x4 + TASKS_OUT[%s] + Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY. + 0x000 + write-only + + + TASKS_OUT + Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + TASKS_SET[%s] + Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high. + 0x030 + write-only + + + TASKS_SET + Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + TASKS_CLR[%s] + Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low. + 0x060 + write-only + + + TASKS_CLR + Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + EVENTS_IN[%s] + Description collection: Event generated from pin specified in CONFIG[n].PSEL + 0x100 + read-write + + + EVENTS_IN + Event generated from pin specified in CONFIG[n].PSEL + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PORT + Event generated from multiple input GPIO pins with SENSE mechanism enabled + 0x17C + read-write + + + EVENTS_PORT + Event generated from multiple input GPIO pins with SENSE mechanism enabled + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + IN0 + Write '1' to enable interrupt for event IN[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN1 + Write '1' to enable interrupt for event IN[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN2 + Write '1' to enable interrupt for event IN[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN3 + Write '1' to enable interrupt for event IN[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN4 + Write '1' to enable interrupt for event IN[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN5 + Write '1' to enable interrupt for event IN[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN6 + Write '1' to enable interrupt for event IN[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + IN7 + Write '1' to enable interrupt for event IN[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PORT + Write '1' to enable interrupt for event PORT + 31 + 31 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + IN0 + Write '1' to disable interrupt for event IN[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN1 + Write '1' to disable interrupt for event IN[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN2 + Write '1' to disable interrupt for event IN[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN3 + Write '1' to disable interrupt for event IN[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN4 + Write '1' to disable interrupt for event IN[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN5 + Write '1' to disable interrupt for event IN[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN6 + Write '1' to disable interrupt for event IN[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + IN7 + Write '1' to disable interrupt for event IN[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PORT + Write '1' to disable interrupt for event PORT + 31 + 31 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + 0x8 + 0x4 + CONFIG[%s] + Description collection: Configuration for OUT[n], SET[n], and CLR[n] tasks and IN[n] event + 0x510 + read-write + + + MODE + Mode + 0 + 1 + + + Disabled + Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module. + 0 + + + Event + Event mode + 1 + + + Task + Task mode + 3 + + + + + PSEL + GPIO number associated with SET[n], CLR[n], and OUT[n] tasks and IN[n] event + 8 + 12 + + + PORT + Port number + 13 + 13 + + + POLARITY + When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event. + 16 + 17 + + + None + Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity. + 0 + + + LoToHi + Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin. + 1 + + + HiToLo + Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin. + 2 + + + Toggle + Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin. + 3 + + + + + OUTINIT + When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect. + 20 + 20 + + + Low + Task mode: Initial value of pin before task triggering is low + 0 + + + High + Task mode: Initial value of pin before task triggering is high + 1 + + + + + + + + + SAADC + Successive approximation register (SAR) analog-to-digital converter + 0x40007000 + + 0 + 0x1000 + registers + + + SAADC + 7 + + SAADC + 0x20 + + + TASKS_START + Starts the SAADC and prepares the result buffer in RAM + 0x000 + write-only + + + TASKS_START + Starts the SAADC and prepares the result buffer in RAM + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SAMPLE + Takes one SAADC sample + 0x004 + write-only + + + TASKS_SAMPLE + Takes one SAADC sample + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stops the SAADC and terminates all on-going conversions + 0x008 + write-only + + + TASKS_STOP + Stops the SAADC and terminates all on-going conversions + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CALIBRATEOFFSET + Starts offset auto-calibration + 0x00C + write-only + + + TASKS_CALIBRATEOFFSET + Starts offset auto-calibration + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STARTED + The SAADC has started + 0x100 + read-write + + + EVENTS_STARTED + The SAADC has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + The SAADC has filled up the result buffer + 0x104 + read-write + + + EVENTS_END + The SAADC has filled up the result buffer + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DONE + A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM. + 0x108 + read-write + + + EVENTS_DONE + A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RESULTDONE + Result ready for transfer to RAM + 0x10C + read-write + + + EVENTS_RESULTDONE + Result ready for transfer to RAM + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CALIBRATEDONE + Calibration is complete + 0x110 + read-write + + + EVENTS_CALIBRATEDONE + Calibration is complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + The SAADC has stopped + 0x114 + read-write + + + EVENTS_STOPPED + The SAADC has stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 8 + 0x008 + EVENTS_CH[%s] + Peripheral events. + SAADC_EVENTS_CH + read-write + 0x118 + + LIMITH + Description cluster: Last result is equal or above CH[n].LIMIT.HIGH + 0x000 + read-write + + + LIMITH + Last result is equal or above CH[n].LIMIT.HIGH + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + LIMITL + Description cluster: Last result is equal or below CH[n].LIMIT.LOW + 0x004 + read-write + + + LIMITL + Last result is equal or below CH[n].LIMIT.LOW + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STARTED + Enable or disable interrupt for event STARTED + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + END + Enable or disable interrupt for event END + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + DONE + Enable or disable interrupt for event DONE + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + RESULTDONE + Enable or disable interrupt for event RESULTDONE + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CALIBRATEDONE + Enable or disable interrupt for event CALIBRATEDONE + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STOPPED + Enable or disable interrupt for event STOPPED + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH0LIMITH + Enable or disable interrupt for event CH0LIMITH + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH0LIMITL + Enable or disable interrupt for event CH0LIMITL + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH1LIMITH + Enable or disable interrupt for event CH1LIMITH + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH1LIMITL + Enable or disable interrupt for event CH1LIMITL + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH2LIMITH + Enable or disable interrupt for event CH2LIMITH + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH2LIMITL + Enable or disable interrupt for event CH2LIMITL + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH3LIMITH + Enable or disable interrupt for event CH3LIMITH + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH3LIMITL + Enable or disable interrupt for event CH3LIMITL + 13 + 13 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH4LIMITH + Enable or disable interrupt for event CH4LIMITH + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH4LIMITL + Enable or disable interrupt for event CH4LIMITL + 15 + 15 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH5LIMITH + Enable or disable interrupt for event CH5LIMITH + 16 + 16 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH5LIMITL + Enable or disable interrupt for event CH5LIMITL + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH6LIMITH + Enable or disable interrupt for event CH6LIMITH + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH6LIMITL + Enable or disable interrupt for event CH6LIMITL + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH7LIMITH + Enable or disable interrupt for event CH7LIMITH + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CH7LIMITL + Enable or disable interrupt for event CH7LIMITL + 21 + 21 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STARTED + Write '1' to enable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DONE + Write '1' to enable interrupt for event DONE + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RESULTDONE + Write '1' to enable interrupt for event RESULTDONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CALIBRATEDONE + Write '1' to enable interrupt for event CALIBRATEDONE + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH0LIMITH + Write '1' to enable interrupt for event CH0LIMITH + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH0LIMITL + Write '1' to enable interrupt for event CH0LIMITL + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH1LIMITH + Write '1' to enable interrupt for event CH1LIMITH + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH1LIMITL + Write '1' to enable interrupt for event CH1LIMITL + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH2LIMITH + Write '1' to enable interrupt for event CH2LIMITH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH2LIMITL + Write '1' to enable interrupt for event CH2LIMITL + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH3LIMITH + Write '1' to enable interrupt for event CH3LIMITH + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH3LIMITL + Write '1' to enable interrupt for event CH3LIMITL + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH4LIMITH + Write '1' to enable interrupt for event CH4LIMITH + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH4LIMITL + Write '1' to enable interrupt for event CH4LIMITL + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH5LIMITH + Write '1' to enable interrupt for event CH5LIMITH + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH5LIMITL + Write '1' to enable interrupt for event CH5LIMITL + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH6LIMITH + Write '1' to enable interrupt for event CH6LIMITH + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH6LIMITL + Write '1' to enable interrupt for event CH6LIMITL + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH7LIMITH + Write '1' to enable interrupt for event CH7LIMITH + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CH7LIMITL + Write '1' to enable interrupt for event CH7LIMITL + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STARTED + Write '1' to disable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DONE + Write '1' to disable interrupt for event DONE + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RESULTDONE + Write '1' to disable interrupt for event RESULTDONE + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CALIBRATEDONE + Write '1' to disable interrupt for event CALIBRATEDONE + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH0LIMITH + Write '1' to disable interrupt for event CH0LIMITH + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH0LIMITL + Write '1' to disable interrupt for event CH0LIMITL + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH1LIMITH + Write '1' to disable interrupt for event CH1LIMITH + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH1LIMITL + Write '1' to disable interrupt for event CH1LIMITL + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH2LIMITH + Write '1' to disable interrupt for event CH2LIMITH + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH2LIMITL + Write '1' to disable interrupt for event CH2LIMITL + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH3LIMITH + Write '1' to disable interrupt for event CH3LIMITH + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH3LIMITL + Write '1' to disable interrupt for event CH3LIMITL + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH4LIMITH + Write '1' to disable interrupt for event CH4LIMITH + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH4LIMITL + Write '1' to disable interrupt for event CH4LIMITL + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH5LIMITH + Write '1' to disable interrupt for event CH5LIMITH + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH5LIMITL + Write '1' to disable interrupt for event CH5LIMITL + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH6LIMITH + Write '1' to disable interrupt for event CH6LIMITH + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH6LIMITL + Write '1' to disable interrupt for event CH6LIMITL + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH7LIMITH + Write '1' to disable interrupt for event CH7LIMITH + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CH7LIMITL + Write '1' to disable interrupt for event CH7LIMITL + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + STATUS + Status + 0x400 + read-only + + + STATUS + Status + 0 + 0 + + + Ready + SAADC is ready. No on-going conversions. + 0 + + + Busy + SAADC is busy. Conversion in progress. + 1 + + + + + + + ENABLE + Enable or disable SAADC + 0x500 + read-write + + + ENABLE + Enable or disable SAADC + 0 + 0 + + + Disabled + Disable SAADC + 0 + + + Enabled + Enable SAADC + 1 + + + + + + + 8 + 0x010 + CH[%s] + Unspecified + SAADC_CH + read-write + 0x510 + + PSELP + Description cluster: Input positive pin selection for CH[n] + 0x000 + read-write + 0x00000000 + + + PSELP + Analog positive input channel + 0 + 4 + + + NC + Not connected + 0 + + + AnalogInput0 + AIN0 + 1 + + + AnalogInput1 + AIN1 + 2 + + + AnalogInput2 + AIN2 + 3 + + + AnalogInput3 + AIN3 + 4 + + + AnalogInput4 + AIN4 + 5 + + + AnalogInput5 + AIN5 + 6 + + + AnalogInput6 + AIN6 + 7 + + + AnalogInput7 + AIN7 + 8 + + + VDD + VDD + 9 + + + VDDHDIV5 + VDDH/5 + 0x0D + + + + + + + PSELN + Description cluster: Input negative pin selection for CH[n] + 0x004 + read-write + 0x00000000 + + + PSELN + Analog negative input, enables differential channel + 0 + 4 + + + NC + Not connected + 0 + + + AnalogInput0 + AIN0 + 1 + + + AnalogInput1 + AIN1 + 2 + + + AnalogInput2 + AIN2 + 3 + + + AnalogInput3 + AIN3 + 4 + + + AnalogInput4 + AIN4 + 5 + + + AnalogInput5 + AIN5 + 6 + + + AnalogInput6 + AIN6 + 7 + + + AnalogInput7 + AIN7 + 8 + + + VDD + VDD + 9 + + + VDDHDIV5 + VDDH/5 + 0x0D + + + + + + + CONFIG + Description cluster: Input configuration for CH[n] + 0x008 + read-write + 0x00020000 + + + RESP + Positive channel resistor control + 0 + 1 + + + Bypass + Bypass resistor ladder + 0 + + + Pulldown + Pull-down to GND + 1 + + + Pullup + Pull-up to VDD + 2 + + + VDD1_2 + Set input at VDD/2 + 3 + + + + + RESN + Negative channel resistor control + 4 + 5 + + + Bypass + Bypass resistor ladder + 0 + + + Pulldown + Pull-down to GND + 1 + + + Pullup + Pull-up to VDD + 2 + + + VDD1_2 + Set input at VDD/2 + 3 + + + + + GAIN + Gain control + 8 + 10 + + + Gain1_6 + 1/6 + 0 + + + Gain1_5 + 1/5 + 1 + + + Gain1_4 + 1/4 + 2 + + + Gain1_3 + 1/3 + 3 + + + Gain1_2 + 1/2 + 4 + + + Gain1 + 1 + 5 + + + Gain2 + 2 + 6 + + + Gain4 + 4 + 7 + + + + + REFSEL + Reference control + 12 + 12 + + + Internal + Internal reference (0.6 V) + 0 + + + VDD1_4 + VDD/4 as reference + 1 + + + + + TACQ + Acquisition time, the time the SAADC uses to sample the input voltage + 16 + 18 + + + 3us + 3 us + 0 + + + 5us + 5 us + 1 + + + 10us + 10 us + 2 + + + 15us + 15 us + 3 + + + 20us + 20 us + 4 + + + 40us + 40 us + 5 + + + + + MODE + Enable differential mode + 20 + 20 + + + SE + Single-ended, PSELN will be ignored, negative input to SAADC shorted to GND + 0 + + + Diff + Differential + 1 + + + + + BURST + Enable burst mode + 24 + 24 + + + Disabled + Burst mode is disabled (normal operation) + 0 + + + Enabled + Burst mode is enabled. SAADC takes 2^OVERSAMPLE number of samples as fast as it can, and sends the average to Data RAM. + 1 + + + + + + + LIMIT + Description cluster: High/low limits for event monitoring of a channel + 0x00C + read-write + 0x7FFF8000 + + + LOW + Low level limit + 0 + 15 + + + HIGH + High level limit + 16 + 31 + + + + + + RESOLUTION + Resolution configuration + 0x5F0 + read-write + 0x00000001 + + + VAL + Set the resolution + 0 + 2 + + + 8bit + 8 bits + 0 + + + 10bit + 10 bits + 1 + + + 12bit + 12 bits + 2 + + + 14bit + 14 bits + 3 + + + + + + + OVERSAMPLE + Oversampling configuration. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used. + 0x5F4 + read-write + + + OVERSAMPLE + Oversample control + 0 + 3 + + + Bypass + Bypass oversampling + 0 + + + Over2x + Oversample 2x + 1 + + + Over4x + Oversample 4x + 2 + + + Over8x + Oversample 8x + 3 + + + Over16x + Oversample 16x + 4 + + + Over32x + Oversample 32x + 5 + + + Over64x + Oversample 64x + 6 + + + Over128x + Oversample 128x + 7 + + + Over256x + Oversample 256x + 8 + + + + + + + SAMPLERATE + Controls normal or continuous sample rate + 0x5F8 + read-write + + + CC + Capture and compare value. Sample rate is 16 MHz/CC + 0 + 10 + + + MODE + Select mode for sample rate control + 12 + 12 + + + Task + Rate is controlled from SAMPLE task + 0 + + + Timers + Rate is controlled from local timer (use CC to control the rate) + 1 + + + + + + + RESULT + RESULT EasyDMA channel + SAADC_RESULT + read-write + 0x62C + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of 16-bit samples to be written to output RAM buffer + 0x004 + read-write + + + MAXCNT + Maximum number of 16-bit samples to be written to output RAM buffer + 0 + 14 + + + + + AMOUNT + Number of 16-bit samples written to output RAM buffer since the previous START task + 0x008 + read-only + + + AMOUNT + Number of 16-bit samples written to output RAM buffer since the previous START task. This register can be read after an END or STOPPED event. + 0 + 14 + + + + + + + + TIMER0 + Timer/Counter 0 + 0x40008000 + TIMER + + 0 + 0x1000 + registers + + + TIMER0 + 8 + + TIMER + 0x20 + + + TASKS_START + Start Timer + 0x000 + write-only + + + TASKS_START + Start Timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop Timer + 0x004 + write-only + + + TASKS_STOP + Stop Timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_COUNT + Increment Timer (Counter mode only) + 0x008 + write-only + + + TASKS_COUNT + Increment Timer (Counter mode only) + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CLEAR + Clear time + 0x00C + write-only + + + TASKS_CLEAR + Clear time + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SHUTDOWN + Deprecated register - Shut down timer + 0x010 + write-only + + + TASKS_SHUTDOWN + Deprecated field - Shut down timer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x6 + 0x4 + TASKS_CAPTURE[%s] + Description collection: Capture Timer value to CC[n] register + 0x040 + write-only + + + TASKS_CAPTURE + Capture Timer value to CC[n] register + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x6 + 0x4 + EVENTS_COMPARE[%s] + Description collection: Compare event on CC[n] match + 0x140 + read-write + + + EVENTS_COMPARE + Compare event on CC[n] match + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + COMPARE0_CLEAR + Shortcut between event COMPARE[0] and task CLEAR + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE1_CLEAR + Shortcut between event COMPARE[1] and task CLEAR + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE2_CLEAR + Shortcut between event COMPARE[2] and task CLEAR + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE3_CLEAR + Shortcut between event COMPARE[3] and task CLEAR + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE4_CLEAR + Shortcut between event COMPARE[4] and task CLEAR + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE5_CLEAR + Shortcut between event COMPARE[5] and task CLEAR + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE0_STOP + Shortcut between event COMPARE[0] and task STOP + 8 + 8 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE1_STOP + Shortcut between event COMPARE[1] and task STOP + 9 + 9 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE2_STOP + Shortcut between event COMPARE[2] and task STOP + 10 + 10 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE3_STOP + Shortcut between event COMPARE[3] and task STOP + 11 + 11 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE4_STOP + Shortcut between event COMPARE[4] and task STOP + 12 + 12 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + COMPARE5_STOP + Shortcut between event COMPARE[5] and task STOP + 13 + 13 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + COMPARE0 + Write '1' to enable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE1 + Write '1' to enable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE2 + Write '1' to enable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE3 + Write '1' to enable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE4 + Write '1' to enable interrupt for event COMPARE[4] + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE5 + Write '1' to enable interrupt for event COMPARE[5] + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + COMPARE0 + Write '1' to disable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE1 + Write '1' to disable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE2 + Write '1' to disable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE3 + Write '1' to disable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE4 + Write '1' to disable interrupt for event COMPARE[4] + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE5 + Write '1' to disable interrupt for event COMPARE[5] + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + MODE + Timer mode selection + 0x504 + read-write + + + MODE + Timer mode + 0 + 1 + + + Timer + Select Timer mode + 0 + + + Counter + Deprecated enumerator - Select Counter mode + 1 + + + LowPowerCounter + Select Low Power Counter mode + 2 + + + + + + + BITMODE + Configure the number of bits used by the TIMER + 0x508 + read-write + + + BITMODE + Timer bit width + 0 + 1 + + + 16Bit + 16 bit timer bit width + 0 + + + 08Bit + 8 bit timer bit width + 1 + + + 24Bit + 24 bit timer bit width + 2 + + + 32Bit + 32 bit timer bit width + 3 + + + + + + + PRESCALER + Timer prescaler register + 0x510 + read-write + 0x00000004 + + + PRESCALER + Prescaler value + 0 + 3 + + + + + 0x6 + 0x4 + CC[%s] + Description collection: Capture/Compare register n + 0x540 + read-write + + + CC + Capture/Compare value + 0 + 31 + + + + + + + TIMER1 + Timer/Counter 1 + 0x40009000 + + TIMER1 + 9 + + + + TIMER2 + Timer/Counter 2 + 0x4000A000 + + TIMER2 + 10 + + + + RTC0 + Real time counter 0 + 0x4000B000 + RTC + + 0 + 0x1000 + registers + + + RTC0 + 11 + + RTC + 0x20 + + + TASKS_START + Start RTC COUNTER + 0x000 + write-only + + + TASKS_START + Start RTC COUNTER + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop RTC COUNTER + 0x004 + write-only + + + TASKS_STOP + Stop RTC COUNTER + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CLEAR + Clear RTC COUNTER + 0x008 + write-only + + + TASKS_CLEAR + Clear RTC COUNTER + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_TRIGOVRFLW + Set COUNTER to 0xFFFFF0 + 0x00C + write-only + + + TASKS_TRIGOVRFLW + Set COUNTER to 0xFFFFF0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_TICK + Event on COUNTER increment + 0x100 + read-write + + + EVENTS_TICK + Event on COUNTER increment + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_OVRFLW + Event on COUNTER overflow + 0x104 + read-write + + + EVENTS_OVRFLW + Event on COUNTER overflow + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x4 + 0x4 + EVENTS_COMPARE[%s] + Description collection: Compare event on CC[n] match + 0x140 + read-write + + + EVENTS_COMPARE + Compare event on CC[n] match + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + TICK + Write '1' to enable interrupt for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + OVRFLW + Write '1' to enable interrupt for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE0 + Write '1' to enable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE1 + Write '1' to enable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE2 + Write '1' to enable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE3 + Write '1' to enable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + TICK + Write '1' to disable interrupt for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + OVRFLW + Write '1' to disable interrupt for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE0 + Write '1' to disable interrupt for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE1 + Write '1' to disable interrupt for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE2 + Write '1' to disable interrupt for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE3 + Write '1' to disable interrupt for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + EVTEN + Enable or disable event routing + 0x340 + read-write + + + TICK + Enable or disable event routing for event TICK + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + OVRFLW + Enable or disable event routing for event OVRFLW + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE0 + Enable or disable event routing for event COMPARE[0] + 16 + 16 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE1 + Enable or disable event routing for event COMPARE[1] + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE2 + Enable or disable event routing for event COMPARE[2] + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + COMPARE3 + Enable or disable event routing for event COMPARE[3] + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Disable + 1 + + + + + + + EVTENSET + Enable event routing + 0x344 + read-write + + + TICK + Write '1' to enable event routing for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + OVRFLW + Write '1' to enable event routing for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE0 + Write '1' to enable event routing for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE1 + Write '1' to enable event routing for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE2 + Write '1' to enable event routing for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + COMPARE3 + Write '1' to enable event routing for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + EVTENCLR + Disable event routing + 0x348 + read-write + + + TICK + Write '1' to disable event routing for event TICK + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + OVRFLW + Write '1' to disable event routing for event OVRFLW + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE0 + Write '1' to disable event routing for event COMPARE[0] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE1 + Write '1' to disable event routing for event COMPARE[1] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE2 + Write '1' to disable event routing for event COMPARE[2] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + COMPARE3 + Write '1' to disable event routing for event COMPARE[3] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + COUNTER + Current COUNTER value + 0x504 + read-only + + + COUNTER + Counter value + 0 + 23 + + + + + PRESCALER + 12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)). Must be written when RTC is stopped. + 0x508 + read-write + + + PRESCALER + Prescaler value + 0 + 11 + + + + + 0x4 + 0x4 + CC[%s] + Description collection: Compare register n + 0x540 + read-write + + + COMPARE + Compare value + 0 + 23 + + + + + + + TEMP + Temperature Sensor + 0x4000C000 + + 0 + 0x1000 + registers + + + TEMP + 12 + + TEMP + 0x20 + + + TASKS_START + Start temperature measurement + 0x000 + write-only + + + TASKS_START + Start temperature measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop temperature measurement + 0x004 + write-only + + + TASKS_STOP + Stop temperature measurement + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_DATARDY + Temperature measurement complete, data ready + 0x100 + read-write + + + EVENTS_DATARDY + Temperature measurement complete, data ready + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + DATARDY + Write '1' to enable interrupt for event DATARDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + DATARDY + Write '1' to disable interrupt for event DATARDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + TEMP + Temperature in degC (0.25deg steps) + 0x508 + read-only + int32_t + + + TEMP + Temperature in degC (0.25deg steps) + 0 + 31 + + + + + A0 + Slope of first piecewise linear function + 0x520 + read-write + 0x00000326 + + + A0 + Slope of first piecewise linear function + 0 + 11 + + + + + A1 + Slope of second piecewise linear function + 0x524 + read-write + 0x00000348 + + + A1 + Slope of second piecewise linear function + 0 + 11 + + + + + A2 + Slope of third piecewise linear function + 0x528 + read-write + 0x000003AA + + + A2 + Slope of third piecewise linear function + 0 + 11 + + + + + A3 + Slope of fourth piecewise linear function + 0x52C + read-write + 0x0000040E + + + A3 + Slope of fourth piecewise linear function + 0 + 11 + + + + + A4 + Slope of fifth piecewise linear function + 0x530 + read-write + 0x000004BD + + + A4 + Slope of fifth piecewise linear function + 0 + 11 + + + + + A5 + Slope of sixth piecewise linear function + 0x534 + read-write + 0x000005A3 + + + A5 + Slope of sixth piecewise linear function + 0 + 11 + + + + + B0 + y-intercept of first piecewise linear function + 0x540 + read-write + 0x00003FEF + + + B0 + y-intercept of first piecewise linear function + 0 + 13 + + + + + B1 + y-intercept of second piecewise linear function + 0x544 + read-write + 0x00003FBE + + + B1 + y-intercept of second piecewise linear function + 0 + 13 + + + + + B2 + y-intercept of third piecewise linear function + 0x548 + read-write + 0x00003FBE + + + B2 + y-intercept of third piecewise linear function + 0 + 13 + + + + + B3 + y-intercept of fourth piecewise linear function + 0x54C + read-write + 0x00000012 + + + B3 + y-intercept of fourth piecewise linear function + 0 + 13 + + + + + B4 + y-intercept of fifth piecewise linear function + 0x550 + read-write + 0x00000124 + + + B4 + y-intercept of fifth piecewise linear function + 0 + 13 + + + + + B5 + y-intercept of sixth piecewise linear function + 0x554 + read-write + 0x0000027C + + + B5 + y-intercept of sixth piecewise linear function + 0 + 13 + + + + + T0 + End point of first piecewise linear function + 0x560 + read-write + 0x000000E2 + + + T0 + End point of first piecewise linear function + 0 + 7 + + + + + T1 + End point of second piecewise linear function + 0x564 + read-write + 0x00000000 + + + T1 + End point of second piecewise linear function + 0 + 7 + + + + + T2 + End point of third piecewise linear function + 0x568 + read-write + 0x00000019 + + + T2 + End point of third piecewise linear function + 0 + 7 + + + + + T3 + End point of fourth piecewise linear function + 0x56C + read-write + 0x0000003C + + + T3 + End point of fourth piecewise linear function + 0 + 7 + + + + + T4 + End point of fifth piecewise linear function + 0x570 + read-write + 0x00000050 + + + T4 + End point of fifth piecewise linear function + 0 + 7 + + + + + + + RNG + Random Number Generator + 0x4000D000 + + 0 + 0x1000 + registers + + + RNG + 13 + + RNG + 0x20 + + + TASKS_START + Task starting the random number generator + 0x000 + write-only + + + TASKS_START + Task starting the random number generator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Task stopping the random number generator + 0x004 + write-only + + + TASKS_STOP + Task stopping the random number generator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_VALRDY + Event being generated for every new random number written to the VALUE register + 0x100 + read-write + + + EVENTS_VALRDY + Event being generated for every new random number written to the VALUE register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + VALRDY_STOP + Shortcut between event VALRDY and task STOP + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + VALRDY + Write '1' to enable interrupt for event VALRDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + VALRDY + Write '1' to disable interrupt for event VALRDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + CONFIG + Configuration register + 0x504 + read-write + + + DERCEN + Bias correction + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + + + + VALUE + Output random number + 0x508 + read-only + + + VALUE + Generated random number + 0 + 7 + + + + + + + ECB + AES ECB Mode Encryption + 0x4000E000 + + 0 + 0x1000 + registers + + + ECB + 14 + + ECB + 0x20 + + + TASKS_STARTECB + Start ECB block encrypt + 0x000 + write-only + + + TASKS_STARTECB + Start ECB block encrypt + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOPECB + Abort a possible executing ECB operation + 0x004 + write-only + + + TASKS_STOPECB + Abort a possible executing ECB operation + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_ENDECB + ECB block encrypt complete + 0x100 + read-write + + + EVENTS_ENDECB + ECB block encrypt complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERRORECB + ECB block encrypt aborted because of a STOPECB task or due to an error + 0x104 + read-write + + + EVENTS_ERRORECB + ECB block encrypt aborted because of a STOPECB task or due to an error + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + ENDECB + Write '1' to enable interrupt for event ENDECB + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERRORECB + Write '1' to enable interrupt for event ERRORECB + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + ENDECB + Write '1' to disable interrupt for event ENDECB + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERRORECB + Write '1' to disable interrupt for event ERRORECB + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ECBDATAPTR + ECB block encrypt memory pointers + 0x504 + read-write + + + ECBDATAPTR + Pointer to the ECB data structure (see Table 1 ECB data structure overview) + 0 + 31 + + + + + + + AAR + Accelerated Address Resolver + 0x4000F000 + + 0 + 0x1000 + registers + + + CCM_AAR + 15 + + AAR + 0x20 + + + TASKS_START + Start resolving addresses based on IRKs specified in the IRK data structure + 0x000 + write-only + + + TASKS_START + Start resolving addresses based on IRKs specified in the IRK data structure + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop resolving addresses + 0x008 + write-only + + + TASKS_STOP + Stop resolving addresses + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_END + Address resolution procedure complete + 0x100 + read-write + + + EVENTS_END + Address resolution procedure complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_RESOLVED + Address resolved + 0x104 + read-write + + + EVENTS_RESOLVED + Address resolved + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_NOTRESOLVED + Address not resolved + 0x108 + read-write + + + EVENTS_NOTRESOLVED + Address not resolved + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + END + Write '1' to enable interrupt for event END + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + RESOLVED + Write '1' to enable interrupt for event RESOLVED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + NOTRESOLVED + Write '1' to enable interrupt for event NOTRESOLVED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + END + Write '1' to disable interrupt for event END + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + RESOLVED + Write '1' to disable interrupt for event RESOLVED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + NOTRESOLVED + Write '1' to disable interrupt for event NOTRESOLVED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + STATUS + Resolution status + 0x400 + read-only + + + STATUS + The IRK that was used last time an address was resolved + 0 + 3 + + + + + ENABLE + Enable AAR + 0x500 + read-write + + + ENABLE + Enable or disable AAR + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 3 + + + + + + + NIRK + Number of IRKs + 0x504 + read-write + 0x00000001 + + + NIRK + Number of Identity Root Keys available in the IRK data structure + 0 + 4 + + + + + IRKPTR + Pointer to IRK data structure + 0x508 + read-write + + + IRKPTR + Pointer to the IRK data structure + 0 + 31 + + + + + ADDRPTR + Pointer to the resolvable address + 0x510 + read-write + + + ADDRPTR + Pointer to the resolvable address (6-bytes) + 0 + 31 + + + + + SCRATCHPTR + Pointer to data area used for temporary storage + 0x514 + read-write + + + SCRATCHPTR + Pointer to a scratch data area used for temporary storage during resolution. A space of minimum 3 bytes must be reserved. + 0 + 31 + + + + + + + CCM + AES CCM Mode Encryption + 0x4000F000 + AAR + + 0 + 0x1000 + registers + + + CCM_AAR + 15 + + CCM + 0x20 + + + TASKS_KSGEN + Start generation of keystream. This operation will stop by itself when completed. + 0x000 + write-only + + + TASKS_KSGEN + Start generation of keystream. This operation will stop by itself when completed. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_CRYPT + Start encryption/decryption. This operation will stop by itself when completed. + 0x004 + write-only + + + TASKS_CRYPT + Start encryption/decryption. This operation will stop by itself when completed. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop encryption/decryption + 0x008 + write-only + + + TASKS_STOP + Stop encryption/decryption + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RATEOVERRIDE + Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption + 0x00C + write-only + + + TASKS_RATEOVERRIDE + Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_ENDKSGEN + Keystream generation complete + 0x100 + read-write + + + EVENTS_ENDKSGEN + Keystream generation complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDCRYPT + Encrypt/decrypt complete + 0x104 + read-write + + + EVENTS_ENDCRYPT + Encrypt/decrypt complete + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ERROR + Deprecated register - CCM error event + 0x108 + read-write + + + EVENTS_ERROR + Deprecated field - CCM error event + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + ENDKSGEN_CRYPT + Shortcut between event ENDKSGEN and task CRYPT + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + ENDKSGEN + Write '1' to enable interrupt for event ENDKSGEN + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDCRYPT + Write '1' to enable interrupt for event ENDCRYPT + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ERROR + Deprecated intsetfield - Write '1' to enable interrupt for event ERROR + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + ENDKSGEN + Write '1' to disable interrupt for event ENDKSGEN + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDCRYPT + Write '1' to disable interrupt for event ENDCRYPT + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ERROR + Deprecated intclrfield - Write '1' to disable interrupt for event ERROR + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + MICSTATUS + MIC check result + 0x400 + read-only + + + MICSTATUS + The result of the MIC check performed during the previous decryption operation + 0 + 0 + + + CheckFailed + MIC check failed + 0 + + + CheckPassed + MIC check passed + 1 + + + + + + + ENABLE + Enable + 0x500 + read-write + + + ENABLE + Enable or disable CCM + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 2 + + + + + + + MODE + Operation mode + 0x504 + read-write + 0x00000001 + + + MODE + The mode of operation to be used. The settings in this register apply whenever either the KSGEN or CRYPT tasks are triggered. + 0 + 0 + + + Encryption + AES CCM packet encryption mode + 0 + + + Decryption + AES CCM packet decryption mode + 1 + + + + + DATARATE + Radio data rate that the CCM shall run synchronous with + 16 + 17 + + + 1Mbit + 1 Mbps + 0 + + + 2Mbit + 2 Mbps + 1 + + + 125Kbps + 125 Kbps + 2 + + + 500Kbps + 500 Kbps + 3 + + + + + LENGTH + Packet length configuration + 24 + 24 + + + Default + Default length. Effective length of LENGTH field in encrypted/decrypted packet is 5 bits. A keystream for packet payloads up to 27 bytes will be generated. + 0 + + + Extended + Extended length. Effective length of LENGTH field in encrypted/decrypted packet is 8 bits. A keystream for packet payloads up to MAXPACKETSIZE bytes will be generated. + 1 + + + + + + + CNFPTR + Pointer to data structure holding AES key and NONCE vector + 0x508 + read-write + + + CNFPTR + Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview) + 0 + 31 + + + + + INPTR + Input pointer + 0x50C + read-write + + + INPTR + Input pointer + 0 + 31 + + + + + OUTPTR + Output pointer + 0x510 + read-write + + + OUTPTR + Output pointer + 0 + 31 + + + + + SCRATCHPTR + Pointer to data area used for temporary storage + 0x514 + read-write + + + SCRATCHPTR + Pointer to a scratch data area used for temporary storage during keystream generation, + MIC generation and encryption/decryption. + 0 + 31 + + + + + MAXPACKETSIZE + Length of keystream generated when MODE.LENGTH = Extended. + 0x518 + read-write + 0x000000FB + + + MAXPACKETSIZE + Length of keystream generated when MODE.LENGTH = Extended. This value must be greater or equal to the subsequent packet payload to be encrypted/decrypted. + 0 + 7 + + + + + RATEOVERRIDE + Data rate override setting. + 0x51C + read-write + 0x00000000 + + + RATEOVERRIDE + Data rate override setting. + 0 + 1 + + + 1Mbit + 1 Mbps + 0 + + + 2Mbit + 2 Mbps + 1 + + + 125Kbps + 125 Kbps + 2 + + + 500Kbps + 500 Kbps + 3 + + + + + + + + + WDT + Watchdog Timer + 0x40010000 + + 0 + 0x1000 + registers + + + WDT + 16 + + WDT + 0x20 + + + TASKS_START + Start the watchdog + 0x000 + write-only + + + TASKS_START + Start the watchdog + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_TIMEOUT + Watchdog timeout + 0x100 + read-write + + + EVENTS_TIMEOUT + Watchdog timeout + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + TIMEOUT + Write '1' to enable interrupt for event TIMEOUT + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + TIMEOUT + Write '1' to disable interrupt for event TIMEOUT + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RUNSTATUS + Run status + 0x400 + read-only + + + RUNSTATUS + Indicates whether or not the watchdog is running + 0 + 0 + + + NotRunning + Watchdog not running + 0 + + + Running + Watchdog is running + 1 + + + + + + + REQSTATUS + Request status + 0x404 + read-only + 0x00000001 + + + RR0 + Request status for RR[0] register + 0 + 0 + + + DisabledOrRequested + RR[0] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[0] register is enabled, and are not yet requesting reload + 1 + + + + + RR1 + Request status for RR[1] register + 1 + 1 + + + DisabledOrRequested + RR[1] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[1] register is enabled, and are not yet requesting reload + 1 + + + + + RR2 + Request status for RR[2] register + 2 + 2 + + + DisabledOrRequested + RR[2] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[2] register is enabled, and are not yet requesting reload + 1 + + + + + RR3 + Request status for RR[3] register + 3 + 3 + + + DisabledOrRequested + RR[3] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[3] register is enabled, and are not yet requesting reload + 1 + + + + + RR4 + Request status for RR[4] register + 4 + 4 + + + DisabledOrRequested + RR[4] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[4] register is enabled, and are not yet requesting reload + 1 + + + + + RR5 + Request status for RR[5] register + 5 + 5 + + + DisabledOrRequested + RR[5] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[5] register is enabled, and are not yet requesting reload + 1 + + + + + RR6 + Request status for RR[6] register + 6 + 6 + + + DisabledOrRequested + RR[6] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[6] register is enabled, and are not yet requesting reload + 1 + + + + + RR7 + Request status for RR[7] register + 7 + 7 + + + DisabledOrRequested + RR[7] register is not enabled, or are already requesting reload + 0 + + + EnabledAndUnrequested + RR[7] register is enabled, and are not yet requesting reload + 1 + + + + + + + CRV + Counter reload value + 0x504 + read-write + 0xFFFFFFFF + + + CRV + Counter reload value in number of cycles of the 32.768 kHz clock + 0 + 31 + + + + + RREN + Enable register for reload request registers + 0x508 + read-write + 0x00000001 + + + RR0 + Enable or disable RR[0] register + 0 + 0 + + + Disabled + Disable RR[0] register + 0 + + + Enabled + Enable RR[0] register + 1 + + + + + RR1 + Enable or disable RR[1] register + 1 + 1 + + + Disabled + Disable RR[1] register + 0 + + + Enabled + Enable RR[1] register + 1 + + + + + RR2 + Enable or disable RR[2] register + 2 + 2 + + + Disabled + Disable RR[2] register + 0 + + + Enabled + Enable RR[2] register + 1 + + + + + RR3 + Enable or disable RR[3] register + 3 + 3 + + + Disabled + Disable RR[3] register + 0 + + + Enabled + Enable RR[3] register + 1 + + + + + RR4 + Enable or disable RR[4] register + 4 + 4 + + + Disabled + Disable RR[4] register + 0 + + + Enabled + Enable RR[4] register + 1 + + + + + RR5 + Enable or disable RR[5] register + 5 + 5 + + + Disabled + Disable RR[5] register + 0 + + + Enabled + Enable RR[5] register + 1 + + + + + RR6 + Enable or disable RR[6] register + 6 + 6 + + + Disabled + Disable RR[6] register + 0 + + + Enabled + Enable RR[6] register + 1 + + + + + RR7 + Enable or disable RR[7] register + 7 + 7 + + + Disabled + Disable RR[7] register + 0 + + + Enabled + Enable RR[7] register + 1 + + + + + + + CONFIG + Configuration register + 0x50C + read-write + 0x00000001 + + + SLEEP + Configure the watchdog to either be paused, or kept running, while the CPU is sleeping + 0 + 0 + + + Pause + Pause watchdog while the CPU is sleeping + 0 + + + Run + Keep the watchdog running while the CPU is sleeping + 1 + + + + + HALT + Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger + 3 + 3 + + + Pause + Pause watchdog while the CPU is halted by the debugger + 0 + + + Run + Keep the watchdog running while the CPU is halted by the debugger + 1 + + + + + + + 0x8 + 0x4 + RR[%s] + Description collection: Reload request n + 0x600 + write-only + + + RR + Reload request register + 0 + 31 + + + Reload + Value to request a reload of the watchdog timer + 0x6E524635 + + + + + + + + + RTC1 + Real time counter 1 + 0x40011000 + + RTC1 + 17 + + + + QDEC + Quadrature Decoder + 0x40012000 + + 0 + 0x1000 + registers + + + QDEC + 18 + + QDEC + 0x20 + + + TASKS_START + Task starting the quadrature decoder + 0x000 + write-only + + + TASKS_START + Task starting the quadrature decoder + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Task stopping the quadrature decoder + 0x004 + write-only + + + TASKS_STOP + Task stopping the quadrature decoder + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_READCLRACC + Read and clear ACC and ACCDBL + 0x008 + write-only + + + TASKS_READCLRACC + Read and clear ACC and ACCDBL + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RDCLRACC + Read and clear ACC + 0x00C + write-only + + + TASKS_RDCLRACC + Read and clear ACC + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_RDCLRDBL + Read and clear ACCDBL + 0x010 + write-only + + + TASKS_RDCLRDBL + Read and clear ACCDBL + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_SAMPLERDY + Event being generated for every new sample value written to the SAMPLE register + 0x100 + read-write + + + EVENTS_SAMPLERDY + Event being generated for every new sample value written to the SAMPLE register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_REPORTRDY + Non-null report ready + 0x104 + read-write + + + EVENTS_REPORTRDY + Non-null report ready + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ACCOF + ACC or ACCDBL register overflow + 0x108 + read-write + + + EVENTS_ACCOF + ACC or ACCDBL register overflow + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DBLRDY + Double displacement(s) detected + 0x10C + read-write + + + EVENTS_DBLRDY + Double displacement(s) detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + QDEC has been stopped + 0x110 + read-write + + + EVENTS_STOPPED + QDEC has been stopped + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + REPORTRDY_READCLRACC + Shortcut between event REPORTRDY and task READCLRACC + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + SAMPLERDY_STOP + Shortcut between event SAMPLERDY and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + REPORTRDY_RDCLRACC + Shortcut between event REPORTRDY and task RDCLRACC + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + REPORTRDY_STOP + Shortcut between event REPORTRDY and task STOP + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DBLRDY_RDCLRDBL + Shortcut between event DBLRDY and task RDCLRDBL + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DBLRDY_STOP + Shortcut between event DBLRDY and task STOP + 5 + 5 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + SAMPLERDY_READCLRACC + Shortcut between event SAMPLERDY and task READCLRACC + 6 + 6 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + SAMPLERDY + Write '1' to enable interrupt for event SAMPLERDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REPORTRDY + Write '1' to enable interrupt for event REPORTRDY + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ACCOF + Write '1' to enable interrupt for event ACCOF + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DBLRDY + Write '1' to enable interrupt for event DBLRDY + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + SAMPLERDY + Write '1' to disable interrupt for event SAMPLERDY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REPORTRDY + Write '1' to disable interrupt for event REPORTRDY + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ACCOF + Write '1' to disable interrupt for event ACCOF + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DBLRDY + Write '1' to disable interrupt for event DBLRDY + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + Enable the quadrature decoder + 0x500 + read-write + + + ENABLE + Enable or disable the quadrature decoder + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + LEDPOL + LED output pin polarity + 0x504 + read-write + + + LEDPOL + LED output pin polarity + 0 + 0 + + + ActiveLow + Led active on output pin low + 0 + + + ActiveHigh + Led active on output pin high + 1 + + + + + + + SAMPLEPER + Sample period + 0x508 + read-write + + + SAMPLEPER + Sample period. The SAMPLE register will be updated for every new sample + 0 + 3 + + + 128us + 128 us + 0 + + + 256us + 256 us + 1 + + + 512us + 512 us + 2 + + + 1024us + 1024 us + 3 + + + 2048us + 2048 us + 4 + + + 4096us + 4096 us + 5 + + + 8192us + 8192 us + 6 + + + 16384us + 16384 us + 7 + + + 32ms + 32768 us + 8 + + + 65ms + 65536 us + 9 + + + 131ms + 131072 us + 10 + + + + + + + SAMPLE + Motion sample value + 0x50C + read-only + int32_t + + + SAMPLE + Last motion sample + 0 + 31 + + + + + REPORTPER + Number of samples to be taken before REPORTRDY and DBLRDY events can be generated + 0x510 + read-write + + + REPORTPER + Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated. + 0 + 3 + + + 10Smpl + 10 samples/report + 0 + + + 40Smpl + 40 samples/report + 1 + + + 80Smpl + 80 samples/report + 2 + + + 120Smpl + 120 samples/report + 3 + + + 160Smpl + 160 samples/report + 4 + + + 200Smpl + 200 samples/report + 5 + + + 240Smpl + 240 samples/report + 6 + + + 280Smpl + 280 samples/report + 7 + + + 1Smpl + 1 sample/report + 8 + + + + + + + ACC + Register accumulating the valid transitions + 0x514 + read-only + int32_t + + + ACC + Register accumulating all valid samples (not double transition) read from the SAMPLE register. + 0 + 31 + + + + + ACCREAD + Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task + 0x518 + read-only + int32_t + + + ACCREAD + Snapshot of the ACC register. + 0 + 31 + + + + + PSEL + Unspecified + QDEC_PSEL + read-write + 0x51C + + LED + Pin select for LED signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + A + Pin select for A signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + B + Pin select for B signal + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + DBFEN + Enable input debounce filters + 0x528 + read-write + + + DBFEN + Enable input debounce filters + 0 + 0 + + + Disabled + Debounce input filters disabled + 0 + + + Enabled + Debounce input filters enabled + 1 + + + + + + + LEDPRE + Time period the LED is switched ON prior to sampling + 0x540 + read-write + 0x00000010 + + + LEDPRE + Period in us the LED is switched on prior to sampling + 0 + 8 + + + + + ACCDBL + Register accumulating the number of detected double transitions + 0x544 + read-only + + + ACCDBL + Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ). + 0 + 3 + + + + + ACCDBLREAD + Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task + 0x548 + read-only + + + ACCDBLREAD + Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered. + 0 + 3 + + + + + + + COMP + Comparator + 0x40013000 + + 0 + 0x1000 + registers + + + COMP_LPCOMP + 19 + + COMP + 0x20 + + + TASKS_START + Start comparator + 0x000 + write-only + + + TASKS_START + Start comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop comparator + 0x004 + write-only + + + TASKS_STOP + Stop comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SAMPLE + Sample comparator value + 0x008 + write-only + + + TASKS_SAMPLE + Sample comparator value + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + COMP is ready and output is valid + 0x100 + read-write + + + EVENTS_READY + COMP is ready and output is valid + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DOWN + Downward crossing + 0x104 + read-write + + + EVENTS_DOWN + Downward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_UP + Upward crossing + 0x108 + read-write + + + EVENTS_UP + Upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CROSS + Downward or upward crossing + 0x10C + read-write + + + EVENTS_CROSS + Downward or upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + READY_SAMPLE + Shortcut between event READY and task SAMPLE + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READY_STOP + Shortcut between event READY and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DOWN_STOP + Shortcut between event DOWN and task STOP + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + UP_STOP + Shortcut between event UP and task STOP + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CROSS_STOP + Shortcut between event CROSS and task STOP + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + READY + Enable or disable interrupt for event READY + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + DOWN + Enable or disable interrupt for event DOWN + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + UP + Enable or disable interrupt for event UP + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + CROSS + Enable or disable interrupt for event CROSS + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DOWN + Write '1' to enable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + UP + Write '1' to enable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CROSS + Write '1' to enable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DOWN + Write '1' to disable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + UP + Write '1' to disable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CROSS + Write '1' to disable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RESULT + Compare result + 0x400 + read-only + + + RESULT + Result of last compare. Decision point SAMPLE task. + 0 + 0 + + + Below + Input voltage is below the threshold (VIN+ &lt; VIN-) + 0 + + + Above + Input voltage is above the threshold (VIN+ &gt; VIN-) + 1 + + + + + + + ENABLE + COMP enable + 0x500 + read-write + + + ENABLE + Enable or disable COMP + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 2 + + + + + + + PSEL + Pin select + 0x504 + read-write + + + PSEL + Analog pin select + 0 + 2 + + + AnalogInput0 + AIN0 selected as analog input + 0 + + + AnalogInput1 + AIN1 selected as analog input + 1 + + + AnalogInput2 + AIN2 selected as analog input + 2 + + + AnalogInput3 + AIN3 selected as analog input + 3 + + + AnalogInput4 + AIN4 selected as analog input + 4 + + + AnalogInput5 + AIN5 selected as analog input + 5 + + + AnalogInput6 + AIN6 selected as analog input + 6 + + + AnalogInput7 + AIN7 selected as analog input + 7 + + + + + + + REFSEL + Reference source select for single-ended mode + 0x508 + read-write + 0x00000004 + + + REFSEL + Reference select + 0 + 2 + + + Int1V2 + VREF = internal 1.2 V reference (VDD &gt;= 1.7 V) + 0 + + + Int1V8 + VREF = internal 1.8 V reference (VDD &gt;= VREF + 0.2 V) + 1 + + + Int2V4 + VREF = internal 2.4 V reference (VDD &gt;= VREF + 0.2 V) + 2 + + + VDD + VREF = VDD + 4 + + + ARef + VREF = AREF + 5 + + + + + + + EXTREFSEL + External reference select + 0x50C + read-write + + + EXTREFSEL + External analog reference select + 0 + 2 + + + AnalogReference0 + Use AIN0 as external analog reference + 0 + + + AnalogReference1 + Use AIN1 as external analog reference + 1 + + + AnalogReference2 + Use AIN2 as external analog reference + 2 + + + AnalogReference3 + Use AIN3 as external analog reference + 3 + + + AnalogReference4 + Use AIN4 as external analog reference + 4 + + + AnalogReference5 + Use AIN5 as external analog reference + 5 + + + AnalogReference6 + Use AIN6 as external analog reference + 6 + + + AnalogReference7 + Use AIN7 as external analog reference + 7 + + + + + + + TH + Threshold configuration for hysteresis unit + 0x530 + read-write + 0x00000000 + + + THDOWN + VDOWN = (THDOWN+1)/64*VREF + 0 + 5 + + + THUP + VUP = (THUP+1)/64*VREF + 8 + 13 + + + + + MODE + Mode configuration + 0x534 + read-write + + + SP + Speed and power modes + 0 + 1 + + + Low + Low-power mode + 0 + + + Normal + Normal mode + 1 + + + High + High-speed mode + 2 + + + + + MAIN + Main operation modes + 8 + 8 + + + SE + Single-ended mode + 0 + + + Diff + Differential mode + 1 + + + + + + + HYST + Comparator hysteresis enable + 0x538 + read-write + + + HYST + Comparator hysteresis + 0 + 0 + + + NoHyst + Comparator hysteresis disabled + 0 + + + Hyst50mV + Comparator hysteresis enabled + 1 + + + + + + + + + LPCOMP + Low-power comparator + 0x40013000 + COMP + + 0 + 0x1000 + registers + + + COMP_LPCOMP + 19 + + LPCOMP + 0x20 + + + TASKS_START + Start comparator + 0x000 + write-only + + + TASKS_START + Start comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stop comparator + 0x004 + write-only + + + TASKS_STOP + Stop comparator + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_SAMPLE + Sample comparator value + 0x008 + write-only + + + TASKS_SAMPLE + Sample comparator value + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + LPCOMP is ready and output is valid + 0x100 + read-write + + + EVENTS_READY + LPCOMP is ready and output is valid + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_DOWN + Downward crossing + 0x104 + read-write + + + EVENTS_DOWN + Downward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_UP + Upward crossing + 0x108 + read-write + + + EVENTS_UP + Upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_CROSS + Downward or upward crossing + 0x10C + read-write + + + EVENTS_CROSS + Downward or upward crossing + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + READY_SAMPLE + Shortcut between event READY and task SAMPLE + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + READY_STOP + Shortcut between event READY and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + DOWN_STOP + Shortcut between event DOWN and task STOP + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + UP_STOP + Shortcut between event UP and task STOP + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + CROSS_STOP + Shortcut between event CROSS and task STOP + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + DOWN + Write '1' to enable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + UP + Write '1' to enable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + CROSS + Write '1' to enable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + DOWN + Write '1' to disable interrupt for event DOWN + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + UP + Write '1' to disable interrupt for event UP + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + CROSS + Write '1' to disable interrupt for event CROSS + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + RESULT + Compare result + 0x400 + read-only + + + RESULT + Result of last compare. Decision point SAMPLE task. + 0 + 0 + + + Below + Input voltage is below the reference threshold (VIN+ &lt; VIN-) + 0 + + + Above + Input voltage is above the reference threshold (VIN+ &gt; VIN-) + 1 + + + + + + + ENABLE + Enable LPCOMP + 0x500 + read-write + + + ENABLE + Enable or disable LPCOMP + 0 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + PSEL + Input pin select + 0x504 + read-write + + + PSEL + Analog pin select + 0 + 2 + + + AnalogInput0 + AIN0 selected as analog input + 0 + + + AnalogInput1 + AIN1 selected as analog input + 1 + + + AnalogInput2 + AIN2 selected as analog input + 2 + + + AnalogInput3 + AIN3 selected as analog input + 3 + + + AnalogInput4 + AIN4 selected as analog input + 4 + + + AnalogInput5 + AIN5 selected as analog input + 5 + + + AnalogInput6 + AIN6 selected as analog input + 6 + + + AnalogInput7 + AIN7 selected as analog input + 7 + + + + + + + REFSEL + Reference select + 0x508 + read-write + 0x00000004 + + + REFSEL + Reference select + 0 + 3 + + + Ref1_8Vdd + VDD * 1/8 selected as reference + 0 + + + Ref2_8Vdd + VDD * 2/8 selected as reference + 1 + + + Ref3_8Vdd + VDD * 3/8 selected as reference + 2 + + + Ref4_8Vdd + VDD * 4/8 selected as reference + 3 + + + Ref5_8Vdd + VDD * 5/8 selected as reference + 4 + + + Ref6_8Vdd + VDD * 6/8 selected as reference + 5 + + + Ref7_8Vdd + VDD * 7/8 selected as reference + 6 + + + ARef + External analog reference selected + 7 + + + Ref1_16Vdd + VDD * 1/16 selected as reference + 8 + + + Ref3_16Vdd + VDD * 3/16 selected as reference + 9 + + + Ref5_16Vdd + VDD * 5/16 selected as reference + 10 + + + Ref7_16Vdd + VDD * 7/16 selected as reference + 11 + + + Ref9_16Vdd + VDD * 9/16 selected as reference + 12 + + + Ref11_16Vdd + VDD * 11/16 selected as reference + 13 + + + Ref13_16Vdd + VDD * 13/16 selected as reference + 14 + + + Ref15_16Vdd + VDD * 15/16 selected as reference + 15 + + + + + + + EXTREFSEL + External reference select + 0x50C + read-write + + + EXTREFSEL + External analog reference select + 0 + 0 + + + AnalogReference0 + Use AIN0 as external analog reference + 0 + + + AnalogReference1 + Use AIN1 as external analog reference + 1 + + + + + + + ANADETECT + Analog detect configuration + 0x520 + read-write + + + ANADETECT + Analog detect configuration + 0 + 1 + + + Cross + Generate ANADETECT on crossing, both upward crossing and downward crossing + 0 + + + Up + Generate ANADETECT on upward crossing only + 1 + + + Down + Generate ANADETECT on downward crossing only + 2 + + + + + + + HYST + Comparator hysteresis enable + 0x538 + read-write + + + HYST + Comparator hysteresis enable + 0 + 0 + + + Disabled + Comparator hysteresis disabled + 0 + + + Enabled + Comparator hysteresis enabled + 1 + + + + + + + + + EGU0 + Event generator unit 0 + 0x40014000 + EGU + + 0 + 0x1000 + registers + + + SWI0_EGU0 + 20 + + EGU + 0x20 + + + 0x10 + 0x4 + TASKS_TRIGGER[%s] + Description collection: Trigger n for triggering the corresponding TRIGGERED[n] event + 0x000 + write-only + + + TASKS_TRIGGER + Trigger n for triggering the corresponding TRIGGERED[n] event + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x10 + 0x4 + EVENTS_TRIGGERED[%s] + Description collection: Event number n generated by triggering the corresponding TRIGGER[n] task + 0x100 + read-write + + + EVENTS_TRIGGERED + Event number n generated by triggering the corresponding TRIGGER[n] task + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + TRIGGERED0 + Enable or disable interrupt for event TRIGGERED[0] + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED1 + Enable or disable interrupt for event TRIGGERED[1] + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED2 + Enable or disable interrupt for event TRIGGERED[2] + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED3 + Enable or disable interrupt for event TRIGGERED[3] + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED4 + Enable or disable interrupt for event TRIGGERED[4] + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED5 + Enable or disable interrupt for event TRIGGERED[5] + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED6 + Enable or disable interrupt for event TRIGGERED[6] + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED7 + Enable or disable interrupt for event TRIGGERED[7] + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED8 + Enable or disable interrupt for event TRIGGERED[8] + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED9 + Enable or disable interrupt for event TRIGGERED[9] + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED10 + Enable or disable interrupt for event TRIGGERED[10] + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED11 + Enable or disable interrupt for event TRIGGERED[11] + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED12 + Enable or disable interrupt for event TRIGGERED[12] + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED13 + Enable or disable interrupt for event TRIGGERED[13] + 13 + 13 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED14 + Enable or disable interrupt for event TRIGGERED[14] + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TRIGGERED15 + Enable or disable interrupt for event TRIGGERED[15] + 15 + 15 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + TRIGGERED0 + Write '1' to enable interrupt for event TRIGGERED[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED1 + Write '1' to enable interrupt for event TRIGGERED[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED2 + Write '1' to enable interrupt for event TRIGGERED[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED3 + Write '1' to enable interrupt for event TRIGGERED[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED4 + Write '1' to enable interrupt for event TRIGGERED[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED5 + Write '1' to enable interrupt for event TRIGGERED[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED6 + Write '1' to enable interrupt for event TRIGGERED[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED7 + Write '1' to enable interrupt for event TRIGGERED[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED8 + Write '1' to enable interrupt for event TRIGGERED[8] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED9 + Write '1' to enable interrupt for event TRIGGERED[9] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED10 + Write '1' to enable interrupt for event TRIGGERED[10] + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED11 + Write '1' to enable interrupt for event TRIGGERED[11] + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED12 + Write '1' to enable interrupt for event TRIGGERED[12] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED13 + Write '1' to enable interrupt for event TRIGGERED[13] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED14 + Write '1' to enable interrupt for event TRIGGERED[14] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TRIGGERED15 + Write '1' to enable interrupt for event TRIGGERED[15] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + TRIGGERED0 + Write '1' to disable interrupt for event TRIGGERED[0] + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED1 + Write '1' to disable interrupt for event TRIGGERED[1] + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED2 + Write '1' to disable interrupt for event TRIGGERED[2] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED3 + Write '1' to disable interrupt for event TRIGGERED[3] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED4 + Write '1' to disable interrupt for event TRIGGERED[4] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED5 + Write '1' to disable interrupt for event TRIGGERED[5] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED6 + Write '1' to disable interrupt for event TRIGGERED[6] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED7 + Write '1' to disable interrupt for event TRIGGERED[7] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED8 + Write '1' to disable interrupt for event TRIGGERED[8] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED9 + Write '1' to disable interrupt for event TRIGGERED[9] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED10 + Write '1' to disable interrupt for event TRIGGERED[10] + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED11 + Write '1' to disable interrupt for event TRIGGERED[11] + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED12 + Write '1' to disable interrupt for event TRIGGERED[12] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED13 + Write '1' to disable interrupt for event TRIGGERED[13] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED14 + Write '1' to disable interrupt for event TRIGGERED[14] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TRIGGERED15 + Write '1' to disable interrupt for event TRIGGERED[15] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + + + SWI0 + Software interrupt 0 + 0x40014000 + EGU0 + SWI + + 0 + 0x1000 + registers + + + SWI0_EGU0 + 20 + + SWI + 0x20 + + + UNUSED + Unused. + 0x000 + 0x00000000 + read-only + + + + + EGU1 + Event generator unit 1 + 0x40015000 + + SWI1_EGU1 + 21 + + + + SWI1 + Software interrupt 1 + 0x40015000 + EGU1 + + SWI1_EGU1 + 21 + + + + EGU2 + Event generator unit 2 + 0x40016000 + + SWI2_EGU2 + 22 + + + + SWI2 + Software interrupt 2 + 0x40016000 + EGU2 + + SWI2_EGU2 + 22 + + + + EGU3 + Event generator unit 3 + 0x40017000 + + SWI3_EGU3 + 23 + + + + SWI3 + Software interrupt 3 + 0x40017000 + EGU3 + + SWI3_EGU3 + 23 + + + + EGU4 + Event generator unit 4 + 0x40018000 + + SWI4_EGU4 + 24 + + + + SWI4 + Software interrupt 4 + 0x40018000 + EGU4 + + SWI4_EGU4 + 24 + + + + EGU5 + Event generator unit 5 + 0x40019000 + + SWI5_EGU5 + 25 + + + + SWI5 + Software interrupt 5 + 0x40019000 + EGU5 + + SWI5_EGU5 + 25 + + + + TIMER3 + Timer/Counter 3 + 0x4001A000 + + TIMER3 + 26 + + + + TIMER4 + Timer/Counter 4 + 0x4001B000 + + TIMER4 + 27 + + + + PWM0 + Pulse width modulation unit 0 + 0x4001C000 + PWM + + 0 + 0x1000 + registers + + + PWM0 + 28 + + PWM + 0x20 + + + TASKS_STOP + Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback + 0x004 + write-only + + + TASKS_STOP + Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x2 + 0x4 + TASKS_SEQSTART[%s] + Description collection: Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running. + 0x008 + write-only + + + TASKS_SEQSTART + Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_NEXTSTEP + Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running. + 0x010 + write-only + + + TASKS_NEXTSTEP + Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STOPPED + Response to STOP task, emitted when PWM pulses are no longer generated + 0x104 + read-write + + + EVENTS_STOPPED + Response to STOP task, emitted when PWM pulses are no longer generated + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x2 + 0x4 + EVENTS_SEQSTARTED[%s] + Description collection: First PWM period started on sequence n + 0x108 + read-write + + + EVENTS_SEQSTARTED + First PWM period started on sequence n + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x2 + 0x4 + EVENTS_SEQEND[%s] + Description collection: Emitted at end of every sequence n, when last value from RAM has been applied to wave counter + 0x110 + read-write + + + EVENTS_SEQEND + Emitted at end of every sequence n, when last value from RAM has been applied to wave counter + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_PWMPERIODEND + Emitted at the end of each PWM period + 0x118 + read-write + + + EVENTS_PWMPERIODEND + Emitted at the end of each PWM period + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_LOOPSDONE + Concatenated sequences have been played the amount of times defined in LOOP.CNT + 0x11C + read-write + + + EVENTS_LOOPSDONE + Concatenated sequences have been played the amount of times defined in LOOP.CNT + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + SEQEND0_STOP + Shortcut between event SEQEND[0] and task STOP + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + SEQEND1_STOP + Shortcut between event SEQEND[1] and task STOP + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LOOPSDONE_SEQSTART0 + Shortcut between event LOOPSDONE and task SEQSTART[0] + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LOOPSDONE_SEQSTART1 + Shortcut between event LOOPSDONE and task SEQSTART[1] + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + LOOPSDONE_STOP + Shortcut between event LOOPSDONE and task STOP + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQSTARTED0 + Enable or disable interrupt for event SEQSTARTED[0] + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQSTARTED1 + Enable or disable interrupt for event SEQSTARTED[1] + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQEND0 + Enable or disable interrupt for event SEQEND[0] + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SEQEND1 + Enable or disable interrupt for event SEQEND[1] + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PWMPERIODEND + Enable or disable interrupt for event PWMPERIODEND + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + LOOPSDONE + Enable or disable interrupt for event LOOPSDONE + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQSTARTED0 + Write '1' to enable interrupt for event SEQSTARTED[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQSTARTED1 + Write '1' to enable interrupt for event SEQSTARTED[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQEND0 + Write '1' to enable interrupt for event SEQEND[0] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SEQEND1 + Write '1' to enable interrupt for event SEQEND[1] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PWMPERIODEND + Write '1' to enable interrupt for event PWMPERIODEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + LOOPSDONE + Write '1' to enable interrupt for event LOOPSDONE + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQSTARTED0 + Write '1' to disable interrupt for event SEQSTARTED[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQSTARTED1 + Write '1' to disable interrupt for event SEQSTARTED[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQEND0 + Write '1' to disable interrupt for event SEQEND[0] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SEQEND1 + Write '1' to disable interrupt for event SEQEND[1] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PWMPERIODEND + Write '1' to disable interrupt for event PWMPERIODEND + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + LOOPSDONE + Write '1' to disable interrupt for event LOOPSDONE + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + PWM module enable register + 0x500 + read-write + 0x00000000 + + + ENABLE + Enable or disable PWM module + 0 + 0 + + + Disabled + Disabled + 0 + + + Enabled + Enable + 1 + + + + + + + MODE + Selects operating mode of the wave counter + 0x504 + read-write + 0x00000000 + + + UPDOWN + Selects up mode or up-and-down mode for the counter + 0 + 0 + + + Up + Up counter, edge-aligned PWM duty cycle + 0 + + + UpAndDown + Up and down counter, center-aligned PWM duty cycle + 1 + + + + + + + COUNTERTOP + Value up to which the pulse generator counter counts + 0x508 + read-write + 0x000003FF + + + COUNTERTOP + Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM are used. + 0 + 14 + + + + + PRESCALER + Configuration for PWM_CLK + 0x50C + read-write + 0x00000000 + + + PRESCALER + Prescaler of PWM_CLK + 0 + 2 + + + DIV_1 + Divide by 1 (16 MHz) + 0 + + + DIV_2 + Divide by 2 (8 MHz) + 1 + + + DIV_4 + Divide by 4 (4 MHz) + 2 + + + DIV_8 + Divide by 8 (2 MHz) + 3 + + + DIV_16 + Divide by 16 (1 MHz) + 4 + + + DIV_32 + Divide by 32 (500 kHz) + 5 + + + DIV_64 + Divide by 64 (250 kHz) + 6 + + + DIV_128 + Divide by 128 (125 kHz) + 7 + + + + + + + DECODER + Configuration of the decoder + 0x510 + read-write + 0x00000000 + + + LOAD + How a sequence is read from RAM and spread to the compare register + 0 + 1 + + + Common + 1st half word (16-bit) used in all PWM channels 0..3 + 0 + + + Grouped + 1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3 + 1 + + + Individual + 1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3 + 2 + + + WaveForm + 1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP + 3 + + + + + MODE + Selects source for advancing the active sequence + 8 + 8 + + + RefreshCount + SEQ[n].REFRESH is used to determine loading internal compare registers + 0 + + + NextStep + NEXTSTEP task causes a new value to be loaded to internal compare registers + 1 + + + + + + + LOOP + Number of playbacks of a loop + 0x514 + read-write + 0x00000000 + + + CNT + Number of playbacks of pattern cycles + 0 + 15 + + + Disabled + Looping disabled (stop at the end of the sequence) + 0 + + + + + + + 2 + 0x020 + SEQ[%s] + Unspecified + PWM_SEQ + read-write + 0x520 + + PTR + Description cluster: Beginning address in RAM of this sequence + 0x000 + read-write + 0x00000000 + + + PTR + Beginning address in RAM of this sequence + 0 + 31 + + + + + CNT + Description cluster: Number of values (duty cycles) in this sequence + 0x004 + read-write + 0x00000000 + + + CNT + Number of values (duty cycles) in this sequence + 0 + 14 + + + Disabled + Sequence is disabled, and shall not be started as it is empty + 0 + + + + + + + REFRESH + Description cluster: Number of additional PWM periods between samples loaded into compare register + 0x008 + read-write + 0x00000001 + + + CNT + Number of additional PWM periods between samples loaded into compare register (load every REFRESH.CNT+1 PWM periods) + 0 + 23 + + + Continuous + Update every PWM period + 0 + + + + + + + ENDDELAY + Description cluster: Time added after the sequence + 0x00C + read-write + 0x00000000 + + + CNT + Time added after the sequence in PWM periods + 0 + 23 + + + + + + PSEL + Unspecified + PWM_PSEL + read-write + 0x560 + + 0x4 + 0x4 + OUT[%s] + Description collection: Output pin select for PWM channel n + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + + + PDM + Pulse Density Modulation (Digital Microphone) Interface + 0x4001D000 + + 0 + 0x1000 + registers + + + PDM + 29 + + PDM + 0x20 + + + TASKS_START + Starts continuous PDM transfer + 0x000 + write-only + + + TASKS_START + Starts continuous PDM transfer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stops PDM transfer + 0x004 + write-only + + + TASKS_STOP + Stops PDM transfer + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_STARTED + PDM transfer has started + 0x100 + read-write + + + EVENTS_STARTED + PDM transfer has started + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + PDM transfer has finished + 0x104 + read-write + + + EVENTS_STOPPED + PDM transfer has finished + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_END + The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM + 0x108 + read-write + + + EVENTS_END + The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + STARTED + Enable or disable interrupt for event STARTED + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STOPPED + Enable or disable interrupt for event STOPPED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + END + Enable or disable interrupt for event END + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + STARTED + Write '1' to enable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + END + Write '1' to enable interrupt for event END + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + STARTED + Write '1' to disable interrupt for event STARTED + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + END + Write '1' to disable interrupt for event END + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + PDM module enable register + 0x500 + read-write + 0x00000000 + + + ENABLE + Enable or disable PDM module + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + PDMCLKCTRL + PDM clock generator control + 0x504 + read-write + 0x08400000 + + + FREQ + PDM_CLK frequency configuration + 0 + 31 + + + 1000K + PDM_CLK = 32 MHz / 32 = 1.000 MHz + 0x08000000 + + + Default + PDM_CLK = 32 MHz / 31 = 1.032 MHz. Nominal clock for RATIO=Ratio64. + 0x08400000 + + + 1067K + PDM_CLK = 32 MHz / 30 = 1.067 MHz + 0x08800000 + + + 1231K + PDM_CLK = 32 MHz / 26 = 1.231 MHz + 0x09800000 + + + 1280K + PDM_CLK = 32 MHz / 25 = 1.280 MHz. Nominal clock for RATIO=Ratio80. + 0x0A000000 + + + 1333K + PDM_CLK = 32 MHz / 24 = 1.333 MHz + 0x0A800000 + + + + + + + MODE + Defines the routing of the connected PDM microphones' signals + 0x508 + read-write + 0x00000000 + + + OPERATION + Mono or stereo operation + 0 + 0 + + + Stereo + Sample and store one pair (left + right) of 16-bit samples per RAM word R=[31:16]; L=[15:0] + 0 + + + Mono + Sample and store two successive left samples (16 bits each) per RAM word L1=[31:16]; L0=[15:0] + 1 + + + + + EDGE + Defines on which PDM_CLK edge left (or mono) is sampled + 1 + 1 + + + LeftFalling + Left (or mono) is sampled on falling edge of PDM_CLK + 0 + + + LeftRising + Left (or mono) is sampled on rising edge of PDM_CLK + 1 + + + + + + + GAINL + Left output gain adjustment + 0x518 + read-write + 0x00000028 + + + GAINL + Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00 -20 dB gain adjust 0x01 -19.5 dB gain adjust (...) 0x27 -0.5 dB gain adjust 0x28 0 dB gain adjust 0x29 +0.5 dB gain adjust (...) 0x4F +19.5 dB gain adjust 0x50 +20 dB gain adjust + 0 + 6 + + + MinGain + -20 dB gain adjustment (minimum) + 0x00 + + + DefaultGain + 0 dB gain adjustment + 0x28 + + + MaxGain + +20 dB gain adjustment (maximum) + 0x50 + + + + + + + GAINR + Right output gain adjustment + 0x51C + read-write + 0x00000028 + + + GAINR + Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) + 0 + 6 + + + MinGain + -20 dB gain adjustment (minimum) + 0x00 + + + DefaultGain + 0 dB gain adjustment + 0x28 + + + MaxGain + +20 dB gain adjustment (maximum) + 0x50 + + + + + + + RATIO + Selects the ratio between PDM_CLK and output sample rate. Change PDMCLKCTRL accordingly. + 0x520 + read-write + 0x00000000 + + + RATIO + Selects the ratio between PDM_CLK and output sample rate + 0 + 0 + + + Ratio64 + Ratio of 64 + 0 + + + Ratio80 + Ratio of 80 + 1 + + + + + + + PSEL + Unspecified + PDM_PSEL + read-write + 0x540 + + CLK + Pin number configuration for PDM CLK signal + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + DIN + Pin number configuration for PDM DIN signal + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + SAMPLE + Unspecified + PDM_SAMPLE + read-write + 0x560 + + PTR + RAM address pointer to write samples to with EasyDMA + 0x000 + read-write + + + SAMPLEPTR + Address to write PDM samples to over DMA + 0 + 31 + + + + + MAXCNT + Number of samples to allocate memory for in EasyDMA mode + 0x004 + read-write + + + BUFFSIZE + Length of DMA RAM allocation in number of samples + 0 + 14 + + + + + + + + ACL + Access control lists + 0x4001E000 + + 0 + 0x1000 + registers + + ACL + 0x20 + + + 8 + 0x010 + ACL[%s] + Unspecified + ACL_ACL + read-write + 0x800 + + ADDR + Description cluster: Start address of region to protect. The start address must be word-aligned. + 0x000 + read-writeonce + 0x00000000 + + + ADDR + Start address of flash region n. The start address must point to a flash page boundary. + 0 + 31 + + + + + SIZE + Description cluster: Size of region to protect counting from address ACL[n].ADDR. Write '0' as no effect. + 0x004 + read-writeonce + 0x00000000 + + + SIZE + Size of flash region n in bytes. Must be a multiple of the flash page size. + 0 + 31 + + + + + PERM + Description cluster: Access permissions for region n as defined by start address ACL[n].ADDR and size ACL[n].SIZE + 0x008 + read-writeonce + 0x00000000 + + + WRITE + Configure write and erase permissions for region n. Write '0' has no effect. + 1 + 1 + + + Enable + Allow write and erase instructions to region n + 0 + + + Disable + Block write and erase instructions to region n + 1 + + + + + READ + Configure read permissions for region n. Write '0' has no effect. + 2 + 2 + + + Enable + Allow read instructions to region n + 0 + + + Disable + Block read instructions to region n + 1 + + + + + + + + + + NVMC + Non Volatile Memory Controller + 0x4001E000 + ACL + + 0 + 0x1000 + registers + + NVMC + 0x20 + + + READY + Ready flag + 0x400 + read-only + 0x00000001 + + + READY + NVMC is ready or busy + 0 + 0 + + + Busy + NVMC is busy (on-going write or erase operation) + 0 + + + Ready + NVMC is ready + 1 + + + + + + + READYNEXT + Ready flag + 0x408 + read-only + 0x00000001 + + + READYNEXT + NVMC can accept a new write operation + 0 + 0 + + + Busy + NVMC cannot accept any write operation + 0 + + + Ready + NVMC is ready + 1 + + + + + + + CONFIG + Configuration register + 0x504 + read-write + + + WEN + Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated. + 0 + 1 + + + Ren + Read only access + 0 + + + Wen + Write enabled + 1 + + + Een + Erase enabled + 2 + + + + + + + ERASEPAGE + Register for erasing a page in code area + 0x508 + write-only + + + ERASEPAGE + Register for starting erase of a page in code area + 0 + 31 + + + + + ERASEPCR1 + Deprecated register - Register for erasing a page in code area, equivalent to ERASEPAGE + 0x508 + write-only + ERASEPAGE + + + ERASEPCR1 + Register for erasing a page in code area, equivalent to ERASEPAGE + 0 + 31 + + + + + ERASEALL + Register for erasing all non-volatile user memory + 0x50C + write-only + + + ERASEALL + Erase all non-volatile memory including UICR registers. The erase must be enabled using CONFIG.WEN before the non-volatile memory can be erased. + 0 + 0 + + + NoOperation + No operation + 0 + + + Erase + Start chip erase + 1 + + + + + + + ERASEPCR0 + Deprecated register - Register for erasing a page in code area, equivalent to ERASEPAGE + 0x510 + write-only + + + ERASEPCR0 + Register for starting erase of a page in code area, equivalent to ERASEPAGE + 0 + 31 + + + + + ERASEUICR + Register for erasing user information configuration registers + 0x514 + write-only + + + ERASEUICR + Register starting erase of all user information configuration registers. The erase must be enabled using CONFIG.WEN before the UICR can be erased. + 0 + 0 + + + NoOperation + No operation + 0 + + + Erase + Start erase of UICR + 1 + + + + + + + ERASEPAGEPARTIAL + Register for partial erase of a page in code area + 0x518 + write-only + + + ERASEPAGEPARTIAL + Register for starting partial erase of a page in code area + 0 + 31 + + + + + ERASEPAGEPARTIALCFG + Register for partial erase configuration + 0x51C + read-write + 0x0000000A + + + DURATION + Duration of the partial erase in milliseconds + 0 + 6 + + + + + ICACHECNF + I-code cache configuration register + 0x540 + read-write + 0x00000000 + + + CACHEEN + Cache enable + 0 + 0 + + + Disabled + Disable cache. Invalidates all cache entries. + 0 + + + Enabled + Enable cache + 1 + + + + + CACHEPROFEN + Cache profiling enable + 8 + 8 + + + Disabled + Disable cache profiling + 0 + + + Enabled + Enable cache profiling + 1 + + + + + + + IHIT + I-code cache hit counter + 0x548 + read-write + + + HITS + Number of cache hits. Register is writable, but only to '0'. + 0 + 31 + + + + + IMISS + I-code cache miss counter + 0x54C + read-write + + + MISSES + Number of cache misses. Register is writable, but only to '0'. + 0 + 31 + + + + + + + PPI + Programmable Peripheral Interconnect + 0x4001F000 + + 0 + 0x1000 + registers + + PPI + 0x20 + + + 6 + 0x008 + TASKS_CHG[%s] + Channel group tasks + PPI_TASKS_CHG + write-only + 0x000 + + EN + Description cluster: Enable channel group n + 0x000 + write-only + + + EN + Enable channel group n + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + DIS + Description cluster: Disable channel group n + 0x004 + write-only + + + DIS + Disable channel group n + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + + CHEN + Channel enable register + 0x500 + read-write + + + CH0 + Enable or disable channel 0 + 0 + 0 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH1 + Enable or disable channel 1 + 1 + 1 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH2 + Enable or disable channel 2 + 2 + 2 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH3 + Enable or disable channel 3 + 3 + 3 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH4 + Enable or disable channel 4 + 4 + 4 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH5 + Enable or disable channel 5 + 5 + 5 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH6 + Enable or disable channel 6 + 6 + 6 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH7 + Enable or disable channel 7 + 7 + 7 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH8 + Enable or disable channel 8 + 8 + 8 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH9 + Enable or disable channel 9 + 9 + 9 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH10 + Enable or disable channel 10 + 10 + 10 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH11 + Enable or disable channel 11 + 11 + 11 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH12 + Enable or disable channel 12 + 12 + 12 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH13 + Enable or disable channel 13 + 13 + 13 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH14 + Enable or disable channel 14 + 14 + 14 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH15 + Enable or disable channel 15 + 15 + 15 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH16 + Enable or disable channel 16 + 16 + 16 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH17 + Enable or disable channel 17 + 17 + 17 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH18 + Enable or disable channel 18 + 18 + 18 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH19 + Enable or disable channel 19 + 19 + 19 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH20 + Enable or disable channel 20 + 20 + 20 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH21 + Enable or disable channel 21 + 21 + 21 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH22 + Enable or disable channel 22 + 22 + 22 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH23 + Enable or disable channel 23 + 23 + 23 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH24 + Enable or disable channel 24 + 24 + 24 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH25 + Enable or disable channel 25 + 25 + 25 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH26 + Enable or disable channel 26 + 26 + 26 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH27 + Enable or disable channel 27 + 27 + 27 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH28 + Enable or disable channel 28 + 28 + 28 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH29 + Enable or disable channel 29 + 29 + 29 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH30 + Enable or disable channel 30 + 30 + 30 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + CH31 + Enable or disable channel 31 + 31 + 31 + + + Disabled + Disable channel + 0 + + + Enabled + Enable channel + 1 + + + + + + + CHENSET + Channel enable set register + 0x504 + read-write + oneToSet + + + CH0 + Channel 0 enable set register. Writing '0' has no effect. + 0 + 0 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH1 + Channel 1 enable set register. Writing '0' has no effect. + 1 + 1 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH2 + Channel 2 enable set register. Writing '0' has no effect. + 2 + 2 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH3 + Channel 3 enable set register. Writing '0' has no effect. + 3 + 3 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH4 + Channel 4 enable set register. Writing '0' has no effect. + 4 + 4 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH5 + Channel 5 enable set register. Writing '0' has no effect. + 5 + 5 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH6 + Channel 6 enable set register. Writing '0' has no effect. + 6 + 6 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH7 + Channel 7 enable set register. Writing '0' has no effect. + 7 + 7 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH8 + Channel 8 enable set register. Writing '0' has no effect. + 8 + 8 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH9 + Channel 9 enable set register. Writing '0' has no effect. + 9 + 9 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH10 + Channel 10 enable set register. Writing '0' has no effect. + 10 + 10 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH11 + Channel 11 enable set register. Writing '0' has no effect. + 11 + 11 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH12 + Channel 12 enable set register. Writing '0' has no effect. + 12 + 12 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH13 + Channel 13 enable set register. Writing '0' has no effect. + 13 + 13 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH14 + Channel 14 enable set register. Writing '0' has no effect. + 14 + 14 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH15 + Channel 15 enable set register. Writing '0' has no effect. + 15 + 15 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH16 + Channel 16 enable set register. Writing '0' has no effect. + 16 + 16 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH17 + Channel 17 enable set register. Writing '0' has no effect. + 17 + 17 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH18 + Channel 18 enable set register. Writing '0' has no effect. + 18 + 18 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH19 + Channel 19 enable set register. Writing '0' has no effect. + 19 + 19 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH20 + Channel 20 enable set register. Writing '0' has no effect. + 20 + 20 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH21 + Channel 21 enable set register. Writing '0' has no effect. + 21 + 21 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH22 + Channel 22 enable set register. Writing '0' has no effect. + 22 + 22 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH23 + Channel 23 enable set register. Writing '0' has no effect. + 23 + 23 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH24 + Channel 24 enable set register. Writing '0' has no effect. + 24 + 24 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH25 + Channel 25 enable set register. Writing '0' has no effect. + 25 + 25 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH26 + Channel 26 enable set register. Writing '0' has no effect. + 26 + 26 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH27 + Channel 27 enable set register. Writing '0' has no effect. + 27 + 27 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH28 + Channel 28 enable set register. Writing '0' has no effect. + 28 + 28 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH29 + Channel 29 enable set register. Writing '0' has no effect. + 29 + 29 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH30 + Channel 30 enable set register. Writing '0' has no effect. + 30 + 30 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + CH31 + Channel 31 enable set register. Writing '0' has no effect. + 31 + 31 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Set + Write: Enable channel + 1 + + + + + + + CHENCLR + Channel enable clear register + 0x508 + read-write + oneToClear + + + CH0 + Channel 0 enable clear register. Writing '0' has no effect. + 0 + 0 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH1 + Channel 1 enable clear register. Writing '0' has no effect. + 1 + 1 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH2 + Channel 2 enable clear register. Writing '0' has no effect. + 2 + 2 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH3 + Channel 3 enable clear register. Writing '0' has no effect. + 3 + 3 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH4 + Channel 4 enable clear register. Writing '0' has no effect. + 4 + 4 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH5 + Channel 5 enable clear register. Writing '0' has no effect. + 5 + 5 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH6 + Channel 6 enable clear register. Writing '0' has no effect. + 6 + 6 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH7 + Channel 7 enable clear register. Writing '0' has no effect. + 7 + 7 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH8 + Channel 8 enable clear register. Writing '0' has no effect. + 8 + 8 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH9 + Channel 9 enable clear register. Writing '0' has no effect. + 9 + 9 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH10 + Channel 10 enable clear register. Writing '0' has no effect. + 10 + 10 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH11 + Channel 11 enable clear register. Writing '0' has no effect. + 11 + 11 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH12 + Channel 12 enable clear register. Writing '0' has no effect. + 12 + 12 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH13 + Channel 13 enable clear register. Writing '0' has no effect. + 13 + 13 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH14 + Channel 14 enable clear register. Writing '0' has no effect. + 14 + 14 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH15 + Channel 15 enable clear register. Writing '0' has no effect. + 15 + 15 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH16 + Channel 16 enable clear register. Writing '0' has no effect. + 16 + 16 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH17 + Channel 17 enable clear register. Writing '0' has no effect. + 17 + 17 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH18 + Channel 18 enable clear register. Writing '0' has no effect. + 18 + 18 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH19 + Channel 19 enable clear register. Writing '0' has no effect. + 19 + 19 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH20 + Channel 20 enable clear register. Writing '0' has no effect. + 20 + 20 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH21 + Channel 21 enable clear register. Writing '0' has no effect. + 21 + 21 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH22 + Channel 22 enable clear register. Writing '0' has no effect. + 22 + 22 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH23 + Channel 23 enable clear register. Writing '0' has no effect. + 23 + 23 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH24 + Channel 24 enable clear register. Writing '0' has no effect. + 24 + 24 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH25 + Channel 25 enable clear register. Writing '0' has no effect. + 25 + 25 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH26 + Channel 26 enable clear register. Writing '0' has no effect. + 26 + 26 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH27 + Channel 27 enable clear register. Writing '0' has no effect. + 27 + 27 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH28 + Channel 28 enable clear register. Writing '0' has no effect. + 28 + 28 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH29 + Channel 29 enable clear register. Writing '0' has no effect. + 29 + 29 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH30 + Channel 30 enable clear register. Writing '0' has no effect. + 30 + 30 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + CH31 + Channel 31 enable clear register. Writing '0' has no effect. + 31 + 31 + + read + + Disabled + Read: channel disabled + 0 + + + Enabled + Read: channel enabled + 1 + + + + write + + Clear + Write: disable channel + 1 + + + + + + + 20 + 0x008 + CH[%s] + PPI Channel + PPI_CH + read-write + 0x510 + + EEP + Description cluster: Channel n event endpoint + 0x000 + read-write + + + EEP + Pointer to event register. Accepts only addresses to registers from the Event group. + 0 + 31 + + + + + TEP + Description cluster: Channel n task endpoint + 0x004 + read-write + + + TEP + Pointer to task register. Accepts only addresses to registers from the Task group. + 0 + 31 + + + + + + 0x6 + 0x4 + CHG[%s] + Description collection: Channel group n + 0x800 + read-write + + + CH0 + Include or exclude channel 0 + 0 + 0 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH1 + Include or exclude channel 1 + 1 + 1 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH2 + Include or exclude channel 2 + 2 + 2 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH3 + Include or exclude channel 3 + 3 + 3 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH4 + Include or exclude channel 4 + 4 + 4 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH5 + Include or exclude channel 5 + 5 + 5 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH6 + Include or exclude channel 6 + 6 + 6 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH7 + Include or exclude channel 7 + 7 + 7 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH8 + Include or exclude channel 8 + 8 + 8 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH9 + Include or exclude channel 9 + 9 + 9 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH10 + Include or exclude channel 10 + 10 + 10 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH11 + Include or exclude channel 11 + 11 + 11 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH12 + Include or exclude channel 12 + 12 + 12 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH13 + Include or exclude channel 13 + 13 + 13 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH14 + Include or exclude channel 14 + 14 + 14 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH15 + Include or exclude channel 15 + 15 + 15 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH16 + Include or exclude channel 16 + 16 + 16 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH17 + Include or exclude channel 17 + 17 + 17 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH18 + Include or exclude channel 18 + 18 + 18 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH19 + Include or exclude channel 19 + 19 + 19 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH20 + Include or exclude channel 20 + 20 + 20 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH21 + Include or exclude channel 21 + 21 + 21 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH22 + Include or exclude channel 22 + 22 + 22 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH23 + Include or exclude channel 23 + 23 + 23 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH24 + Include or exclude channel 24 + 24 + 24 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH25 + Include or exclude channel 25 + 25 + 25 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH26 + Include or exclude channel 26 + 26 + 26 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH27 + Include or exclude channel 27 + 27 + 27 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH28 + Include or exclude channel 28 + 28 + 28 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH29 + Include or exclude channel 29 + 29 + 29 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH30 + Include or exclude channel 30 + 30 + 30 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + CH31 + Include or exclude channel 31 + 31 + 31 + + + Excluded + Exclude + 0 + + + Included + Include + 1 + + + + + + + 32 + 0x004 + FORK[%s] + Fork + PPI_FORK + read-write + 0x910 + + TEP + Description cluster: Channel n task endpoint + 0x000 + read-write + + + TEP + Pointer to task register + 0 + 31 + + + + + + + + MWU + Memory Watch Unit + 0x40020000 + + 0 + 0x1000 + registers + + + MWU + 32 + + MWU + 0x20 + + + 4 + 0x008 + EVENTS_REGION[%s] + Peripheral events. + MWU_EVENTS_REGION + read-write + 0x100 + + WA + Description cluster: Write access to region n detected + 0x000 + read-write + + + WA + Write access to region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + RA + Description cluster: Read access to region n detected + 0x004 + read-write + + + RA + Read access to region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + + 2 + 0x008 + EVENTS_PREGION[%s] + Peripheral events. + MWU_EVENTS_PREGION + read-write + 0x160 + + WA + Description cluster: Write access to peripheral region n detected + 0x000 + read-write + + + WA + Write access to peripheral region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + RA + Description cluster: Read access to peripheral region n detected + 0x004 + read-write + + + RA + Read access to peripheral region n detected + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + REGION0WA + Enable or disable interrupt for event REGION0WA + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION0RA + Enable or disable interrupt for event REGION0RA + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1WA + Enable or disable interrupt for event REGION1WA + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1RA + Enable or disable interrupt for event REGION1RA + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2WA + Enable or disable interrupt for event REGION2WA + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2RA + Enable or disable interrupt for event REGION2RA + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3WA + Enable or disable interrupt for event REGION3WA + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3RA + Enable or disable interrupt for event REGION3RA + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0WA + Enable or disable interrupt for event PREGION0WA + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0RA + Enable or disable interrupt for event PREGION0RA + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1WA + Enable or disable interrupt for event PREGION1WA + 26 + 26 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1RA + Enable or disable interrupt for event PREGION1RA + 27 + 27 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + REGION0WA + Write '1' to enable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION0RA + Write '1' to enable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1WA + Write '1' to enable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1RA + Write '1' to enable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2WA + Write '1' to enable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2RA + Write '1' to enable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3WA + Write '1' to enable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3RA + Write '1' to enable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0WA + Write '1' to enable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0RA + Write '1' to enable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1WA + Write '1' to enable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1RA + Write '1' to enable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + REGION0WA + Write '1' to disable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION0RA + Write '1' to disable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1WA + Write '1' to disable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1RA + Write '1' to disable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2WA + Write '1' to disable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2RA + Write '1' to disable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3WA + Write '1' to disable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3RA + Write '1' to disable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0WA + Write '1' to disable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0RA + Write '1' to disable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1WA + Write '1' to disable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1RA + Write '1' to disable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + NMIEN + Enable or disable interrupt + 0x320 + read-write + + + REGION0WA + Enable or disable interrupt for event REGION0WA + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION0RA + Enable or disable interrupt for event REGION0RA + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1WA + Enable or disable interrupt for event REGION1WA + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION1RA + Enable or disable interrupt for event REGION1RA + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2WA + Enable or disable interrupt for event REGION2WA + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION2RA + Enable or disable interrupt for event REGION2RA + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3WA + Enable or disable interrupt for event REGION3WA + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + REGION3RA + Enable or disable interrupt for event REGION3RA + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0WA + Enable or disable interrupt for event PREGION0WA + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION0RA + Enable or disable interrupt for event PREGION0RA + 25 + 25 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1WA + Enable or disable interrupt for event PREGION1WA + 26 + 26 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + PREGION1RA + Enable or disable interrupt for event PREGION1RA + 27 + 27 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + NMIENSET + Enable interrupt + 0x324 + read-write + + + REGION0WA + Write '1' to enable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION0RA + Write '1' to enable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1WA + Write '1' to enable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION1RA + Write '1' to enable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2WA + Write '1' to enable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION2RA + Write '1' to enable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3WA + Write '1' to enable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + REGION3RA + Write '1' to enable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0WA + Write '1' to enable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION0RA + Write '1' to enable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1WA + Write '1' to enable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + PREGION1RA + Write '1' to enable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + NMIENCLR + Disable interrupt + 0x328 + read-write + + + REGION0WA + Write '1' to disable interrupt for event REGION0WA + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION0RA + Write '1' to disable interrupt for event REGION0RA + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1WA + Write '1' to disable interrupt for event REGION1WA + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION1RA + Write '1' to disable interrupt for event REGION1RA + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2WA + Write '1' to disable interrupt for event REGION2WA + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION2RA + Write '1' to disable interrupt for event REGION2RA + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3WA + Write '1' to disable interrupt for event REGION3WA + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + REGION3RA + Write '1' to disable interrupt for event REGION3RA + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0WA + Write '1' to disable interrupt for event PREGION0WA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION0RA + Write '1' to disable interrupt for event PREGION0RA + 25 + 25 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1WA + Write '1' to disable interrupt for event PREGION1WA + 26 + 26 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + PREGION1RA + Write '1' to disable interrupt for event PREGION1RA + 27 + 27 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + 2 + 0x008 + PERREGION[%s] + Unspecified + MWU_PERREGION + read-write + 0x400 + + SUBSTATWA + Description cluster: Source of event/interrupt in region n, write access detected while corresponding subregion was enabled for watching + 0x000 + read-write + oneToClear + + + SR0 + Subregion 0 in region n (write '1' to clear) + 0 + 0 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR1 + Subregion 1 in region n (write '1' to clear) + 1 + 1 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR2 + Subregion 2 in region n (write '1' to clear) + 2 + 2 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR3 + Subregion 3 in region n (write '1' to clear) + 3 + 3 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR4 + Subregion 4 in region n (write '1' to clear) + 4 + 4 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR5 + Subregion 5 in region n (write '1' to clear) + 5 + 5 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR6 + Subregion 6 in region n (write '1' to clear) + 6 + 6 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR7 + Subregion 7 in region n (write '1' to clear) + 7 + 7 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR8 + Subregion 8 in region n (write '1' to clear) + 8 + 8 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR9 + Subregion 9 in region n (write '1' to clear) + 9 + 9 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR10 + Subregion 10 in region n (write '1' to clear) + 10 + 10 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR11 + Subregion 11 in region n (write '1' to clear) + 11 + 11 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR12 + Subregion 12 in region n (write '1' to clear) + 12 + 12 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR13 + Subregion 13 in region n (write '1' to clear) + 13 + 13 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR14 + Subregion 14 in region n (write '1' to clear) + 14 + 14 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR15 + Subregion 15 in region n (write '1' to clear) + 15 + 15 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR16 + Subregion 16 in region n (write '1' to clear) + 16 + 16 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR17 + Subregion 17 in region n (write '1' to clear) + 17 + 17 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR18 + Subregion 18 in region n (write '1' to clear) + 18 + 18 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR19 + Subregion 19 in region n (write '1' to clear) + 19 + 19 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR20 + Subregion 20 in region n (write '1' to clear) + 20 + 20 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR21 + Subregion 21 in region n (write '1' to clear) + 21 + 21 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR22 + Subregion 22 in region n (write '1' to clear) + 22 + 22 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR23 + Subregion 23 in region n (write '1' to clear) + 23 + 23 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR24 + Subregion 24 in region n (write '1' to clear) + 24 + 24 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR25 + Subregion 25 in region n (write '1' to clear) + 25 + 25 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR26 + Subregion 26 in region n (write '1' to clear) + 26 + 26 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR27 + Subregion 27 in region n (write '1' to clear) + 27 + 27 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR28 + Subregion 28 in region n (write '1' to clear) + 28 + 28 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR29 + Subregion 29 in region n (write '1' to clear) + 29 + 29 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR30 + Subregion 30 in region n (write '1' to clear) + 30 + 30 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + SR31 + Subregion 31 in region n (write '1' to clear) + 31 + 31 + + + NoAccess + No write access occurred in this subregion + 0 + + + Access + Write access(es) occurred in this subregion + 1 + + + + + + + SUBSTATRA + Description cluster: Source of event/interrupt in region n, read access detected while corresponding subregion was enabled for watching + 0x004 + read-write + oneToClear + + + SR0 + Subregion 0 in region n (write '1' to clear) + 0 + 0 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR1 + Subregion 1 in region n (write '1' to clear) + 1 + 1 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR2 + Subregion 2 in region n (write '1' to clear) + 2 + 2 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR3 + Subregion 3 in region n (write '1' to clear) + 3 + 3 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR4 + Subregion 4 in region n (write '1' to clear) + 4 + 4 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR5 + Subregion 5 in region n (write '1' to clear) + 5 + 5 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR6 + Subregion 6 in region n (write '1' to clear) + 6 + 6 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR7 + Subregion 7 in region n (write '1' to clear) + 7 + 7 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR8 + Subregion 8 in region n (write '1' to clear) + 8 + 8 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR9 + Subregion 9 in region n (write '1' to clear) + 9 + 9 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR10 + Subregion 10 in region n (write '1' to clear) + 10 + 10 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR11 + Subregion 11 in region n (write '1' to clear) + 11 + 11 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR12 + Subregion 12 in region n (write '1' to clear) + 12 + 12 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR13 + Subregion 13 in region n (write '1' to clear) + 13 + 13 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR14 + Subregion 14 in region n (write '1' to clear) + 14 + 14 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR15 + Subregion 15 in region n (write '1' to clear) + 15 + 15 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR16 + Subregion 16 in region n (write '1' to clear) + 16 + 16 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR17 + Subregion 17 in region n (write '1' to clear) + 17 + 17 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR18 + Subregion 18 in region n (write '1' to clear) + 18 + 18 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR19 + Subregion 19 in region n (write '1' to clear) + 19 + 19 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR20 + Subregion 20 in region n (write '1' to clear) + 20 + 20 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR21 + Subregion 21 in region n (write '1' to clear) + 21 + 21 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR22 + Subregion 22 in region n (write '1' to clear) + 22 + 22 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR23 + Subregion 23 in region n (write '1' to clear) + 23 + 23 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR24 + Subregion 24 in region n (write '1' to clear) + 24 + 24 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR25 + Subregion 25 in region n (write '1' to clear) + 25 + 25 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR26 + Subregion 26 in region n (write '1' to clear) + 26 + 26 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR27 + Subregion 27 in region n (write '1' to clear) + 27 + 27 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR28 + Subregion 28 in region n (write '1' to clear) + 28 + 28 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR29 + Subregion 29 in region n (write '1' to clear) + 29 + 29 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR30 + Subregion 30 in region n (write '1' to clear) + 30 + 30 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + SR31 + Subregion 31 in region n (write '1' to clear) + 31 + 31 + + + NoAccess + No read access occurred in this subregion + 0 + + + Access + Read access(es) occurred in this subregion + 1 + + + + + + + + REGIONEN + Enable/disable regions watch + 0x510 + read-write + + + RGN0WA + Enable/disable write access watch in region[0] + 0 + 0 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN0RA + Enable/disable read access watch in region[0] + 1 + 1 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + RGN1WA + Enable/disable write access watch in region[1] + 2 + 2 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN1RA + Enable/disable read access watch in region[1] + 3 + 3 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + RGN2WA + Enable/disable write access watch in region[2] + 4 + 4 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN2RA + Enable/disable read access watch in region[2] + 5 + 5 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + RGN3WA + Enable/disable write access watch in region[3] + 6 + 6 + + + Disable + Disable write access watch in this region + 0 + + + Enable + Enable write access watch in this region + 1 + + + + + RGN3RA + Enable/disable read access watch in region[3] + 7 + 7 + + + Disable + Disable read access watch in this region + 0 + + + Enable + Enable read access watch in this region + 1 + + + + + PRGN0WA + Enable/disable write access watch in PREGION[0] + 24 + 24 + + + Disable + Disable write access watch in this PREGION + 0 + + + Enable + Enable write access watch in this PREGION + 1 + + + + + PRGN0RA + Enable/disable read access watch in PREGION[0] + 25 + 25 + + + Disable + Disable read access watch in this PREGION + 0 + + + Enable + Enable read access watch in this PREGION + 1 + + + + + PRGN1WA + Enable/disable write access watch in PREGION[1] + 26 + 26 + + + Disable + Disable write access watch in this PREGION + 0 + + + Enable + Enable write access watch in this PREGION + 1 + + + + + PRGN1RA + Enable/disable read access watch in PREGION[1] + 27 + 27 + + + Disable + Disable read access watch in this PREGION + 0 + + + Enable + Enable read access watch in this PREGION + 1 + + + + + + + REGIONENSET + Enable regions watch + 0x514 + read-write + + + RGN0WA + Enable write access watch in region[0] + 0 + 0 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN0RA + Enable read access watch in region[0] + 1 + 1 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + RGN1WA + Enable write access watch in region[1] + 2 + 2 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN1RA + Enable read access watch in region[1] + 3 + 3 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + RGN2WA + Enable write access watch in region[2] + 4 + 4 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN2RA + Enable read access watch in region[2] + 5 + 5 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + RGN3WA + Enable write access watch in region[3] + 6 + 6 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Set + Enable write access watch in this region + 1 + + + + + RGN3RA + Enable read access watch in region[3] + 7 + 7 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Set + Enable read access watch in this region + 1 + + + + + PRGN0WA + Enable write access watch in PREGION[0] + 24 + 24 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable write access watch in this PREGION + 1 + + + + + PRGN0RA + Enable read access watch in PREGION[0] + 25 + 25 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable read access watch in this PREGION + 1 + + + + + PRGN1WA + Enable write access watch in PREGION[1] + 26 + 26 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable write access watch in this PREGION + 1 + + + + + PRGN1RA + Enable read access watch in PREGION[1] + 27 + 27 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Set + Enable read access watch in this PREGION + 1 + + + + + + + REGIONENCLR + Disable regions watch + 0x518 + read-write + + + RGN0WA + Disable write access watch in region[0] + 0 + 0 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN0RA + Disable read access watch in region[0] + 1 + 1 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + RGN1WA + Disable write access watch in region[1] + 2 + 2 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN1RA + Disable read access watch in region[1] + 3 + 3 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + RGN2WA + Disable write access watch in region[2] + 4 + 4 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN2RA + Disable read access watch in region[2] + 5 + 5 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + RGN3WA + Disable write access watch in region[3] + 6 + 6 + + read + + Disabled + Write access watch in this region is disabled + 0 + + + Enabled + Write access watch in this region is enabled + 1 + + + + write + + Clear + Disable write access watch in this region + 1 + + + + + RGN3RA + Disable read access watch in region[3] + 7 + 7 + + read + + Disabled + Read access watch in this region is disabled + 0 + + + Enabled + Read access watch in this region is enabled + 1 + + + + write + + Clear + Disable read access watch in this region + 1 + + + + + PRGN0WA + Disable write access watch in PREGION[0] + 24 + 24 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable write access watch in this PREGION + 1 + + + + + PRGN0RA + Disable read access watch in PREGION[0] + 25 + 25 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable read access watch in this PREGION + 1 + + + + + PRGN1WA + Disable write access watch in PREGION[1] + 26 + 26 + + read + + Disabled + Write access watch in this PREGION is disabled + 0 + + + Enabled + Write access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable write access watch in this PREGION + 1 + + + + + PRGN1RA + Disable read access watch in PREGION[1] + 27 + 27 + + read + + Disabled + Read access watch in this PREGION is disabled + 0 + + + Enabled + Read access watch in this PREGION is enabled + 1 + + + + write + + Clear + Disable read access watch in this PREGION + 1 + + + + + + + 4 + 0x010 + REGION[%s] + Unspecified + MWU_REGION + read-write + 0x600 + + START + Description cluster: Start address for region n + 0x000 + read-write + 0x00000000 + + + START + Start address for region + 0 + 31 + + + + + END + Description cluster: End address of region n + 0x004 + read-write + + + END + End address of region. + 0 + 31 + + + + + + 2 + 0x010 + PREGION[%s] + Unspecified + MWU_PREGION + read-write + 0x6C0 + + START + Description cluster: Reserved for future use + 0x000 + read-only + + + START + Reserved for future use + 0 + 31 + + + + + END + Description cluster: Reserved for future use + 0x004 + read-only + + + END + Reserved for future use + 0 + 31 + + + + + SUBS + Description cluster: Subregions of region n + 0x008 + read-write + 0x00000000 + + + SR0 + Include or exclude subregion 0 in region + 0 + 0 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR1 + Include or exclude subregion 1 in region + 1 + 1 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR2 + Include or exclude subregion 2 in region + 2 + 2 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR3 + Include or exclude subregion 3 in region + 3 + 3 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR4 + Include or exclude subregion 4 in region + 4 + 4 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR5 + Include or exclude subregion 5 in region + 5 + 5 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR6 + Include or exclude subregion 6 in region + 6 + 6 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR7 + Include or exclude subregion 7 in region + 7 + 7 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR8 + Include or exclude subregion 8 in region + 8 + 8 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR9 + Include or exclude subregion 9 in region + 9 + 9 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR10 + Include or exclude subregion 10 in region + 10 + 10 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR11 + Include or exclude subregion 11 in region + 11 + 11 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR12 + Include or exclude subregion 12 in region + 12 + 12 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR13 + Include or exclude subregion 13 in region + 13 + 13 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR14 + Include or exclude subregion 14 in region + 14 + 14 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR15 + Include or exclude subregion 15 in region + 15 + 15 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR16 + Include or exclude subregion 16 in region + 16 + 16 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR17 + Include or exclude subregion 17 in region + 17 + 17 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR18 + Include or exclude subregion 18 in region + 18 + 18 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR19 + Include or exclude subregion 19 in region + 19 + 19 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR20 + Include or exclude subregion 20 in region + 20 + 20 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR21 + Include or exclude subregion 21 in region + 21 + 21 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR22 + Include or exclude subregion 22 in region + 22 + 22 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR23 + Include or exclude subregion 23 in region + 23 + 23 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR24 + Include or exclude subregion 24 in region + 24 + 24 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR25 + Include or exclude subregion 25 in region + 25 + 25 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR26 + Include or exclude subregion 26 in region + 26 + 26 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR27 + Include or exclude subregion 27 in region + 27 + 27 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR28 + Include or exclude subregion 28 in region + 28 + 28 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR29 + Include or exclude subregion 29 in region + 29 + 29 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR30 + Include or exclude subregion 30 in region + 30 + 30 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + SR31 + Include or exclude subregion 31 in region + 31 + 31 + + + Exclude + Exclude + 0 + + + Include + Include + 1 + + + + + + + + + + PWM1 + Pulse width modulation unit 1 + 0x40021000 + + PWM1 + 33 + + + + PWM2 + Pulse width modulation unit 2 + 0x40022000 + + PWM2 + 34 + + + + SPI2 + Serial Peripheral Interface 2 + 0x40023000 + + SPIM2_SPIS2_SPI2 + 35 + + + + SPIM2 + Serial Peripheral Interface Master with EasyDMA 2 + 0x40023000 + SPI2 + + SPIM2_SPIS2_SPI2 + 35 + + + + SPIS2 + SPI Slave 2 + 0x40023000 + SPI2 + + SPIM2_SPIS2_SPI2 + 35 + + + + RTC2 + Real time counter 2 + 0x40024000 + + RTC2 + 36 + + + + I2S + Inter-IC Sound + 0x40025000 + + 0 + 0x1000 + registers + + + I2S + 37 + + I2S + 0x20 + + + TASKS_START + Starts continuous I2S transfer. Also starts MCK generator when this is enabled. + 0x000 + write-only + + + TASKS_START + Starts continuous I2S transfer. Also starts MCK generator when this is enabled. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STOP + Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated. + 0x004 + write-only + + + TASKS_STOP + Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated. + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_RXPTRUPD + The RXD.PTR register has been copied to internal double-buffers. + When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin. + 0x104 + read-write + + + EVENTS_RXPTRUPD + The RXD.PTR register has been copied to internal double-buffers. + When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STOPPED + I2S transfer stopped. + 0x108 + read-write + + + EVENTS_STOPPED + I2S transfer stopped. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_TXPTRUPD + The TDX.PTR register has been copied to internal double-buffers. + When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin. + 0x114 + read-write + + + EVENTS_TXPTRUPD + The TDX.PTR register has been copied to internal double-buffers. + When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + RXPTRUPD + Enable or disable interrupt for event RXPTRUPD + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STOPPED + Enable or disable interrupt for event STOPPED + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + TXPTRUPD + Enable or disable interrupt for event TXPTRUPD + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + RXPTRUPD + Write '1' to enable interrupt for event RXPTRUPD + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STOPPED + Write '1' to enable interrupt for event STOPPED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + TXPTRUPD + Write '1' to enable interrupt for event TXPTRUPD + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + RXPTRUPD + Write '1' to disable interrupt for event RXPTRUPD + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STOPPED + Write '1' to disable interrupt for event STOPPED + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + TXPTRUPD + Write '1' to disable interrupt for event TXPTRUPD + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + Enable I2S module. + 0x500 + read-write + 0x00000000 + + + ENABLE + Enable I2S module. + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + CONFIG + Unspecified + I2S_CONFIG + read-write + 0x504 + + MODE + I2S mode. + 0x000 + read-write + 0x00000000 + + + MODE + I2S mode. + 0 + 0 + + + Master + Master mode. SCK and LRCK generated from internal master clcok (MCK) and output on pins defined by PSEL.xxx. + 0 + + + Slave + Slave mode. SCK and LRCK generated by external master and received on pins defined by PSEL.xxx + 1 + + + + + + + RXEN + Reception (RX) enable. + 0x004 + read-write + 0x00000000 + + + RXEN + Reception (RX) enable. + 0 + 0 + + + Disabled + Reception disabled and now data will be written to the RXD.PTR address. + 0 + + + Enabled + Reception enabled. + 1 + + + + + + + TXEN + Transmission (TX) enable. + 0x008 + read-write + 0x00000001 + + + TXEN + Transmission (TX) enable. + 0 + 0 + + + Disabled + Transmission disabled and now data will be read from the RXD.TXD address. + 0 + + + Enabled + Transmission enabled. + 1 + + + + + + + MCKEN + Master clock generator enable. + 0x00C + read-write + 0x00000001 + + + MCKEN + Master clock generator enable. + 0 + 0 + + + Disabled + Master clock generator disabled and PSEL.MCK not connected(available as GPIO). + 0 + + + Enabled + Master clock generator running and MCK output on PSEL.MCK. + 1 + + + + + + + MCKFREQ + Master clock generator frequency. + 0x010 + read-write + 0x20000000 + + + MCKFREQ + Master clock generator frequency. + 0 + 31 + + + 32MDIV8 + 32 MHz / 8 = 4.0 MHz + 0x20000000 + + + 32MDIV10 + 32 MHz / 10 = 3.2 MHz + 0x18000000 + + + 32MDIV11 + 32 MHz / 11 = 2.9090909 MHz + 0x16000000 + + + 32MDIV15 + 32 MHz / 15 = 2.1333333 MHz + 0x11000000 + + + 32MDIV16 + 32 MHz / 16 = 2.0 MHz + 0x10000000 + + + 32MDIV21 + 32 MHz / 21 = 1.5238095 + 0x0C000000 + + + 32MDIV23 + 32 MHz / 23 = 1.3913043 MHz + 0x0B000000 + + + 32MDIV30 + 32 MHz / 30 = 1.0666667 MHz + 0x08800000 + + + 32MDIV31 + 32 MHz / 31 = 1.0322581 MHz + 0x08400000 + + + 32MDIV32 + 32 MHz / 32 = 1.0 MHz + 0x08000000 + + + 32MDIV42 + 32 MHz / 42 = 0.7619048 MHz + 0x06000000 + + + 32MDIV63 + 32 MHz / 63 = 0.5079365 MHz + 0x04100000 + + + 32MDIV125 + 32 MHz / 125 = 0.256 MHz + 0x020C0000 + + + + + + + RATIO + MCK / LRCK ratio. + 0x014 + read-write + 0x00000006 + + + RATIO + MCK / LRCK ratio. + 0 + 3 + + + 32X + LRCK = MCK / 32 + 0 + + + 48X + LRCK = MCK / 48 + 1 + + + 64X + LRCK = MCK / 64 + 2 + + + 96X + LRCK = MCK / 96 + 3 + + + 128X + LRCK = MCK / 128 + 4 + + + 192X + LRCK = MCK / 192 + 5 + + + 256X + LRCK = MCK / 256 + 6 + + + 384X + LRCK = MCK / 384 + 7 + + + 512X + LRCK = MCK / 512 + 8 + + + + + + + SWIDTH + Sample width. + 0x018 + read-write + 0x00000001 + + + SWIDTH + Sample width. + 0 + 1 + + + 8Bit + 8 bit. + 0 + + + 16Bit + 16 bit. + 1 + + + 24Bit + 24 bit. + 2 + + + + + + + ALIGN + Alignment of sample within a frame. + 0x01C + read-write + 0x00000000 + + + ALIGN + Alignment of sample within a frame. + 0 + 0 + + + Left + Left-aligned. + 0 + + + Right + Right-aligned. + 1 + + + + + + + FORMAT + Frame format. + 0x020 + read-write + 0x00000000 + + + FORMAT + Frame format. + 0 + 0 + + + I2S + Original I2S format. + 0 + + + Aligned + Alternate (left- or right-aligned) format. + 1 + + + + + + + CHANNELS + Enable channels. + 0x024 + read-write + 0x00000000 + + + CHANNELS + Enable channels. + 0 + 1 + + + Stereo + Stereo. + 0 + + + Left + Left only. + 1 + + + Right + Right only. + 2 + + + + + + + + RXD + Unspecified + I2S_RXD + read-write + 0x538 + + PTR + Receive buffer RAM start address. + 0x000 + read-write + 0x00000000 + + + PTR + Receive buffer Data RAM start address. When receiving, words containing samples will be written to this address. This address is a word aligned Data RAM address. + 0 + 31 + + + + + + TXD + Unspecified + I2S_TXD + read-write + 0x540 + + PTR + Transmit buffer RAM start address. + 0x000 + read-write + 0x00000000 + + + PTR + Transmit buffer Data RAM start address. When transmitting, words containing samples will be fetched from this address. This address is a word aligned Data RAM address. + 0 + 31 + + + + + + RXTXD + Unspecified + I2S_RXTXD + read-write + 0x550 + + MAXCNT + Size of RXD and TXD buffers. + 0x000 + read-write + 0x00000000 + + + MAXCNT + Size of RXD and TXD buffers in number of 32 bit words. + 0 + 13 + + + + + + PSEL + Unspecified + I2S_PSEL + read-write + 0x560 + + MCK + Pin select for MCK signal. + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SCK + Pin select for SCK signal. + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + LRCK + Pin select for LRCK signal. + 0x008 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDIN + Pin select for SDIN signal. + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + SDOUT + Pin select for SDOUT signal. + 0x010 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + + + FPU + FPU + 0x40026000 + + 0 + 0x1000 + registers + + + FPU + 38 + + FPU + 0x20 + + + UNUSED + Unused. + 0x000 + 0x00000000 + read-only + + + + + USBD + Universal serial bus device + 0x40027000 + + 0 + 0x1000 + registers + + + USBD + 39 + + USBD + 0x20 + + + 0x8 + 0x4 + TASKS_STARTEPIN[%s] + Description collection: Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host + 0x004 + write-only + + + TASKS_STARTEPIN + Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTISOIN + Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint + 0x024 + write-only + + + TASKS_STARTISOIN + Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + 0x8 + 0x4 + TASKS_STARTEPOUT[%s] + Description collection: Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host + 0x028 + write-only + + + TASKS_STARTEPOUT + Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_STARTISOOUT + Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint + 0x048 + write-only + + + TASKS_STARTISOOUT + Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EP0RCVOUT + Allows OUT data stage on control endpoint 0 + 0x04C + write-only + + + TASKS_EP0RCVOUT + Allows OUT data stage on control endpoint 0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EP0STATUS + Allows status stage on control endpoint 0 + 0x050 + write-only + + + TASKS_EP0STATUS + Allows status stage on control endpoint 0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_EP0STALL + Stalls data and status stage on control endpoint 0 + 0x054 + write-only + + + TASKS_EP0STALL + Stalls data and status stage on control endpoint 0 + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DPDMDRIVE + Forces D+ and D- lines into the state defined in the DPDMVALUE register + 0x058 + write-only + + + TASKS_DPDMDRIVE + Forces D+ and D- lines into the state defined in the DPDMVALUE register + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DPDMNODRIVE + Stops forcing D+ and D- lines into any state (USB engine takes control) + 0x05C + write-only + + + TASKS_DPDMNODRIVE + Stops forcing D+ and D- lines into any state (USB engine takes control) + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_USBRESET + Signals that a USB reset condition has been detected on USB lines + 0x100 + read-write + + + EVENTS_USBRESET + Signals that a USB reset condition has been detected on USB lines + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_STARTED + Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register + 0x104 + read-write + + + EVENTS_STARTED + Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x8 + 0x4 + EVENTS_ENDEPIN[%s] + Description collection: The whole EPIN[n] buffer has been consumed. The buffer can be accessed safely by software. + 0x108 + read-write + + + EVENTS_ENDEPIN + The whole EPIN[n] buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EP0DATADONE + An acknowledged data transfer has taken place on the control endpoint + 0x128 + read-write + + + EVENTS_EP0DATADONE + An acknowledged data transfer has taken place on the control endpoint + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDISOIN + The whole ISOIN buffer has been consumed. The buffer can be accessed safely by software. + 0x12C + read-write + + + EVENTS_ENDISOIN + The whole ISOIN buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + 0x8 + 0x4 + EVENTS_ENDEPOUT[%s] + Description collection: The whole EPOUT[n] buffer has been consumed. The buffer can be accessed safely by software. + 0x130 + read-write + + + EVENTS_ENDEPOUT + The whole EPOUT[n] buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_ENDISOOUT + The whole ISOOUT buffer has been consumed. The buffer can be accessed safely by software. + 0x150 + read-write + + + EVENTS_ENDISOOUT + The whole ISOOUT buffer has been consumed. The buffer can be accessed safely by software. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_SOF + Signals that a SOF (start of frame) condition has been detected on USB lines + 0x154 + read-write + + + EVENTS_SOF + Signals that a SOF (start of frame) condition has been detected on USB lines + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_USBEVENT + An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause. + 0x158 + read-write + + + EVENTS_USBEVENT + An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EP0SETUP + A valid SETUP token has been received (and acknowledged) on the control endpoint + 0x15C + read-write + + + EVENTS_EP0SETUP + A valid SETUP token has been received (and acknowledged) on the control endpoint + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + EVENTS_EPDATA + A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register + 0x160 + read-write + + + EVENTS_EPDATA + A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + SHORTS + Shortcuts between local events and tasks + 0x200 + read-write + + + EP0DATADONE_STARTEPIN0 + Shortcut between event EP0DATADONE and task STARTEPIN[0] + 0 + 0 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + EP0DATADONE_STARTEPOUT0 + Shortcut between event EP0DATADONE and task STARTEPOUT[0] + 1 + 1 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + EP0DATADONE_EP0STATUS + Shortcut between event EP0DATADONE and task EP0STATUS + 2 + 2 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ENDEPOUT0_EP0STATUS + Shortcut between event ENDEPOUT[0] and task EP0STATUS + 3 + 3 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + ENDEPOUT0_EP0RCVOUT + Shortcut between event ENDEPOUT[0] and task EP0RCVOUT + 4 + 4 + + + Disabled + Disable shortcut + 0 + + + Enabled + Enable shortcut + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + USBRESET + Enable or disable interrupt for event USBRESET + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + STARTED + Enable or disable interrupt for event STARTED + 1 + 1 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN0 + Enable or disable interrupt for event ENDEPIN[0] + 2 + 2 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN1 + Enable or disable interrupt for event ENDEPIN[1] + 3 + 3 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN2 + Enable or disable interrupt for event ENDEPIN[2] + 4 + 4 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN3 + Enable or disable interrupt for event ENDEPIN[3] + 5 + 5 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN4 + Enable or disable interrupt for event ENDEPIN[4] + 6 + 6 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN5 + Enable or disable interrupt for event ENDEPIN[5] + 7 + 7 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN6 + Enable or disable interrupt for event ENDEPIN[6] + 8 + 8 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPIN7 + Enable or disable interrupt for event ENDEPIN[7] + 9 + 9 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + EP0DATADONE + Enable or disable interrupt for event EP0DATADONE + 10 + 10 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDISOIN + Enable or disable interrupt for event ENDISOIN + 11 + 11 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT0 + Enable or disable interrupt for event ENDEPOUT[0] + 12 + 12 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT1 + Enable or disable interrupt for event ENDEPOUT[1] + 13 + 13 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT2 + Enable or disable interrupt for event ENDEPOUT[2] + 14 + 14 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT3 + Enable or disable interrupt for event ENDEPOUT[3] + 15 + 15 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT4 + Enable or disable interrupt for event ENDEPOUT[4] + 16 + 16 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT5 + Enable or disable interrupt for event ENDEPOUT[5] + 17 + 17 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT6 + Enable or disable interrupt for event ENDEPOUT[6] + 18 + 18 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDEPOUT7 + Enable or disable interrupt for event ENDEPOUT[7] + 19 + 19 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + ENDISOOUT + Enable or disable interrupt for event ENDISOOUT + 20 + 20 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + SOF + Enable or disable interrupt for event SOF + 21 + 21 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + USBEVENT + Enable or disable interrupt for event USBEVENT + 22 + 22 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + EP0SETUP + Enable or disable interrupt for event EP0SETUP + 23 + 23 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + EPDATA + Enable or disable interrupt for event EPDATA + 24 + 24 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + USBRESET + Write '1' to enable interrupt for event USBRESET + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + STARTED + Write '1' to enable interrupt for event STARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN0 + Write '1' to enable interrupt for event ENDEPIN[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN1 + Write '1' to enable interrupt for event ENDEPIN[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN2 + Write '1' to enable interrupt for event ENDEPIN[2] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN3 + Write '1' to enable interrupt for event ENDEPIN[3] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN4 + Write '1' to enable interrupt for event ENDEPIN[4] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN5 + Write '1' to enable interrupt for event ENDEPIN[5] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN6 + Write '1' to enable interrupt for event ENDEPIN[6] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPIN7 + Write '1' to enable interrupt for event ENDEPIN[7] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EP0DATADONE + Write '1' to enable interrupt for event EP0DATADONE + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDISOIN + Write '1' to enable interrupt for event ENDISOIN + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT0 + Write '1' to enable interrupt for event ENDEPOUT[0] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT1 + Write '1' to enable interrupt for event ENDEPOUT[1] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT2 + Write '1' to enable interrupt for event ENDEPOUT[2] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT3 + Write '1' to enable interrupt for event ENDEPOUT[3] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT4 + Write '1' to enable interrupt for event ENDEPOUT[4] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT5 + Write '1' to enable interrupt for event ENDEPOUT[5] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT6 + Write '1' to enable interrupt for event ENDEPOUT[6] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDEPOUT7 + Write '1' to enable interrupt for event ENDEPOUT[7] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + ENDISOOUT + Write '1' to enable interrupt for event ENDISOOUT + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + SOF + Write '1' to enable interrupt for event SOF + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + USBEVENT + Write '1' to enable interrupt for event USBEVENT + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EP0SETUP + Write '1' to enable interrupt for event EP0SETUP + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + EPDATA + Write '1' to enable interrupt for event EPDATA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + USBRESET + Write '1' to disable interrupt for event USBRESET + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + STARTED + Write '1' to disable interrupt for event STARTED + 1 + 1 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN0 + Write '1' to disable interrupt for event ENDEPIN[0] + 2 + 2 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN1 + Write '1' to disable interrupt for event ENDEPIN[1] + 3 + 3 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN2 + Write '1' to disable interrupt for event ENDEPIN[2] + 4 + 4 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN3 + Write '1' to disable interrupt for event ENDEPIN[3] + 5 + 5 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN4 + Write '1' to disable interrupt for event ENDEPIN[4] + 6 + 6 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN5 + Write '1' to disable interrupt for event ENDEPIN[5] + 7 + 7 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN6 + Write '1' to disable interrupt for event ENDEPIN[6] + 8 + 8 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPIN7 + Write '1' to disable interrupt for event ENDEPIN[7] + 9 + 9 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EP0DATADONE + Write '1' to disable interrupt for event EP0DATADONE + 10 + 10 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDISOIN + Write '1' to disable interrupt for event ENDISOIN + 11 + 11 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT0 + Write '1' to disable interrupt for event ENDEPOUT[0] + 12 + 12 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT1 + Write '1' to disable interrupt for event ENDEPOUT[1] + 13 + 13 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT2 + Write '1' to disable interrupt for event ENDEPOUT[2] + 14 + 14 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT3 + Write '1' to disable interrupt for event ENDEPOUT[3] + 15 + 15 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT4 + Write '1' to disable interrupt for event ENDEPOUT[4] + 16 + 16 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT5 + Write '1' to disable interrupt for event ENDEPOUT[5] + 17 + 17 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT6 + Write '1' to disable interrupt for event ENDEPOUT[6] + 18 + 18 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDEPOUT7 + Write '1' to disable interrupt for event ENDEPOUT[7] + 19 + 19 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + ENDISOOUT + Write '1' to disable interrupt for event ENDISOOUT + 20 + 20 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + SOF + Write '1' to disable interrupt for event SOF + 21 + 21 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + USBEVENT + Write '1' to disable interrupt for event USBEVENT + 22 + 22 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EP0SETUP + Write '1' to disable interrupt for event EP0SETUP + 23 + 23 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + EPDATA + Write '1' to disable interrupt for event EPDATA + 24 + 24 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + EVENTCAUSE + Details on what caused the USBEVENT event + 0x400 + read-write + oneToClear + + + ISOOUTCRC + CRC error was detected on isochronous OUT endpoint 8. Write '1' to clear. + 0 + 0 + + + NotDetected + No error detected + 0 + + + Detected + Error detected + 1 + + + + + SUSPEND + Signals that USB lines have been idle long enough for the device to enter suspend. Write '1' to clear. + 8 + 8 + + + NotDetected + Suspend not detected + 0 + + + Detected + Suspend detected + 1 + + + + + RESUME + Signals that a RESUME condition (K state or activity restart) has been detected on USB lines. Write '1' to clear. + 9 + 9 + + + NotDetected + Resume not detected + 0 + + + Detected + Resume detected + 1 + + + + + USBWUALLOWED + USB MAC has been woken up and operational. Write '1' to clear. + 10 + 10 + + + NotAllowed + Wake up not allowed + 0 + + + Allowed + Wake up allowed + 1 + + + + + READY + USB device is ready for normal operation. Write '1' to clear. + 11 + 11 + + + NotDetected + USBEVENT was not issued due to USBD peripheral ready + 0 + + + Ready + USBD peripheral is ready + 1 + + + + + + + HALTED + Unspecified + USBD_HALTED + read-write + 0x420 + + 0x8 + 0x4 + EPIN[%s] + Description collection: IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0x000 + read-only + + + GETSTATUS + IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0 + 15 + + + NotHalted + Endpoint is not halted + 0 + + + Halted + Endpoint is halted + 1 + + + + + + + 0x8 + 0x4 + EPOUT[%s] + Description collection: OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0x024 + read-only + + + GETSTATUS + OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint. + 0 + 15 + + + NotHalted + Endpoint is not halted + 0 + + + Halted + Endpoint is halted + 1 + + + + + + + + EPSTATUS + Provides information on which endpoint's EasyDMA registers have been captured + 0x468 + read-write + oneToClear + + + EPIN0 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 0 + 0 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN1 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 1 + 1 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN2 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 2 + 2 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN3 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 3 + 3 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN4 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 4 + 4 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN5 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 5 + 5 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN6 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 6 + 6 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN7 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 7 + 7 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPIN8 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 8 + 8 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT0 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 16 + 16 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT1 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 17 + 17 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT2 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 18 + 18 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT3 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 19 + 19 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT4 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 20 + 20 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT5 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 21 + 21 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT6 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 22 + 22 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT7 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 23 + 23 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + EPOUT8 + Captured state of endpoint's EasyDMA registers. Write '1' to clear. + 24 + 24 + + + NoData + EasyDMA registers have not been captured for this endpoint + 0 + + + DataDone + EasyDMA registers have been captured for this endpoint + 1 + + + + + + + EPDATASTATUS + Provides information on which endpoint(s) an acknowledged data transfer has occurred (EPDATA event) + 0x46C + read-write + oneToClear + + + EPIN1 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 1 + 1 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN2 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 2 + 2 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN3 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 3 + 3 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN4 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 4 + 4 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN5 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 5 + 5 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN6 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 6 + 6 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPIN7 + Acknowledged data transfer on this IN endpoint. Write '1' to clear. + 7 + 7 + + + NotDone + No acknowledged data transfer on this endpoint + 0 + + + DataDone + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT1 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 17 + 17 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT2 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 18 + 18 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT3 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 19 + 19 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT4 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 20 + 20 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT5 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 21 + 21 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT6 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 22 + 22 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + EPOUT7 + Acknowledged data transfer on this OUT endpoint. Write '1' to clear. + 23 + 23 + + + NotStarted + No acknowledged data transfer on this endpoint + 0 + + + Started + Acknowledged data transfer on this endpoint has occurred + 1 + + + + + + + USBADDR + Device USB address + 0x470 + read-only + + + ADDR + Device USB address + 0 + 6 + + + + + BMREQUESTTYPE + SETUP data, byte 0, bmRequestType + 0x480 + read-only + 0x00000000 + + + RECIPIENT + Data transfer type + 0 + 4 + + + Device + Device + 0 + + + Interface + Interface + 1 + + + Endpoint + Endpoint + 2 + + + Other + Other + 3 + + + + + TYPE + Data transfer type + 5 + 6 + + + Standard + Standard + 0 + + + Class + Class + 1 + + + Vendor + Vendor + 2 + + + + + DIRECTION + Data transfer direction + 7 + 7 + + + HostToDevice + Host-to-device + 0 + + + DeviceToHost + Device-to-host + 1 + + + + + + + BREQUEST + SETUP data, byte 1, bRequest + 0x484 + read-only + 0x00000000 + + + BREQUEST + SETUP data, byte 1, bRequest. Values provided for standard requests only, user must implement class and vendor values. + 0 + 7 + + + STD_GET_STATUS + Standard request GET_STATUS + 0 + + + STD_CLEAR_FEATURE + Standard request CLEAR_FEATURE + 1 + + + STD_SET_FEATURE + Standard request SET_FEATURE + 3 + + + STD_SET_ADDRESS + Standard request SET_ADDRESS + 5 + + + STD_GET_DESCRIPTOR + Standard request GET_DESCRIPTOR + 6 + + + STD_SET_DESCRIPTOR + Standard request SET_DESCRIPTOR + 7 + + + STD_GET_CONFIGURATION + Standard request GET_CONFIGURATION + 8 + + + STD_SET_CONFIGURATION + Standard request SET_CONFIGURATION + 9 + + + STD_GET_INTERFACE + Standard request GET_INTERFACE + 10 + + + STD_SET_INTERFACE + Standard request SET_INTERFACE + 11 + + + STD_SYNCH_FRAME + Standard request SYNCH_FRAME + 12 + + + + + + + WVALUEL + SETUP data, byte 2, LSB of wValue + 0x488 + read-only + 0x00000000 + + + WVALUEL + SETUP data, byte 2, LSB of wValue + 0 + 7 + + + + + WVALUEH + SETUP data, byte 3, MSB of wValue + 0x48C + read-only + 0x00000000 + + + WVALUEH + SETUP data, byte 3, MSB of wValue + 0 + 7 + + + + + WINDEXL + SETUP data, byte 4, LSB of wIndex + 0x490 + read-only + 0x00000000 + + + WINDEXL + SETUP data, byte 4, LSB of wIndex + 0 + 7 + + + + + WINDEXH + SETUP data, byte 5, MSB of wIndex + 0x494 + read-only + 0x00000000 + + + WINDEXH + SETUP data, byte 5, MSB of wIndex + 0 + 7 + + + + + WLENGTHL + SETUP data, byte 6, LSB of wLength + 0x498 + read-only + 0x00000000 + + + WLENGTHL + SETUP data, byte 6, LSB of wLength + 0 + 7 + + + + + WLENGTHH + SETUP data, byte 7, MSB of wLength + 0x49C + read-only + 0x00000000 + + + WLENGTHH + SETUP data, byte 7, MSB of wLength + 0 + 7 + + + + + SIZE + Unspecified + USBD_SIZE + read-write + 0x4A0 + + 0x8 + 0x4 + EPOUT[%s] + Description collection: Number of bytes received last in the data stage of this OUT endpoint + 0x000 + read-write + + + SIZE + Number of bytes received last in the data stage of this OUT endpoint + 0 + 6 + + + + + ISOOUT + Number of bytes received last on this ISO OUT data endpoint + 0x020 + read-only + 0x00010000 + + + SIZE + Number of bytes received last on this ISO OUT data endpoint + 0 + 9 + + + ZERO + Zero-length data packet received + 16 + 16 + + + Normal + No zero-length data received, use value in SIZE + 0 + + + ZeroData + Zero-length data received, ignore value in SIZE + 1 + + + + + + + + ENABLE + Enable USB + 0x500 + read-write + + + ENABLE + Enable USB + 0 + 0 + + + Disabled + USB peripheral is disabled + 0 + + + Enabled + USB peripheral is enabled + 1 + + + + + + + USBPULLUP + Control of the USB pull-up + 0x504 + read-write + + + CONNECT + Control of the USB pull-up on the D+ line + 0 + 0 + + + Disabled + Pull-up is disconnected + 0 + + + Enabled + Pull-up is connected to D+ + 1 + + + + + + + DPDMVALUE + State D+ and D- lines will be forced into by the DPDMDRIVE task. The DPDMNODRIVE task reverts the control of the lines to MAC IP (no forcing). + 0x508 + read-write + + + STATE + State D+ and D- lines will be forced into by the DPDMDRIVE task + 0 + 4 + + + Resume + D+ forced low, D- forced high (K state) for a timing preset in hardware (50 us or 5 ms, depending on bus state) + 1 + + + J + D+ forced high, D- forced low (J state) + 2 + + + K + D+ forced low, D- forced high (K state) + 4 + + + + + + + DTOGGLE + Data toggle control and status + 0x50C + read-write + 0x00000100 + + + EP + Select bulk endpoint number + 0 + 2 + + + IO + Selects IN or OUT endpoint + 7 + 7 + + + Out + Selects OUT endpoint + 0 + + + In + Selects IN endpoint + 1 + + + + + VALUE + Data toggle value + 8 + 9 + + + Nop + No action on data toggle when writing the register with this value + 0 + + + Data0 + Data toggle is DATA0 on endpoint set by EP and IO + 1 + + + Data1 + Data toggle is DATA1 on endpoint set by EP and IO + 2 + + + + + + + EPINEN + Endpoint IN enable + 0x510 + read-write + 0x00000001 + + + IN0 + Enable IN endpoint 0 + 0 + 0 + + + Disable + Disable endpoint IN 0 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 0 (response to IN tokens) + 1 + + + + + IN1 + Enable IN endpoint 1 + 1 + 1 + + + Disable + Disable endpoint IN 1 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 1 (response to IN tokens) + 1 + + + + + IN2 + Enable IN endpoint 2 + 2 + 2 + + + Disable + Disable endpoint IN 2 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 2 (response to IN tokens) + 1 + + + + + IN3 + Enable IN endpoint 3 + 3 + 3 + + + Disable + Disable endpoint IN 3 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 3 (response to IN tokens) + 1 + + + + + IN4 + Enable IN endpoint 4 + 4 + 4 + + + Disable + Disable endpoint IN 4 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 4 (response to IN tokens) + 1 + + + + + IN5 + Enable IN endpoint 5 + 5 + 5 + + + Disable + Disable endpoint IN 5 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 5 (response to IN tokens) + 1 + + + + + IN6 + Enable IN endpoint 6 + 6 + 6 + + + Disable + Disable endpoint IN 6 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 6 (response to IN tokens) + 1 + + + + + IN7 + Enable IN endpoint 7 + 7 + 7 + + + Disable + Disable endpoint IN 7 (no response to IN tokens) + 0 + + + Enable + Enable endpoint IN 7 (response to IN tokens) + 1 + + + + + ISOIN + Enable ISO IN endpoint + 8 + 8 + + + Disable + Disable ISO IN endpoint 8 + 0 + + + Enable + Enable ISO IN endpoint 8 + 1 + + + + + + + EPOUTEN + Endpoint OUT enable + 0x514 + read-write + 0x00000001 + + + OUT0 + Enable OUT endpoint 0 + 0 + 0 + + + Disable + Disable endpoint OUT 0 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 0 (response to OUT tokens) + 1 + + + + + OUT1 + Enable OUT endpoint 1 + 1 + 1 + + + Disable + Disable endpoint OUT 1 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 1 (response to OUT tokens) + 1 + + + + + OUT2 + Enable OUT endpoint 2 + 2 + 2 + + + Disable + Disable endpoint OUT 2 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 2 (response to OUT tokens) + 1 + + + + + OUT3 + Enable OUT endpoint 3 + 3 + 3 + + + Disable + Disable endpoint OUT 3 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 3 (response to OUT tokens) + 1 + + + + + OUT4 + Enable OUT endpoint 4 + 4 + 4 + + + Disable + Disable endpoint OUT 4 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 4 (response to OUT tokens) + 1 + + + + + OUT5 + Enable OUT endpoint 5 + 5 + 5 + + + Disable + Disable endpoint OUT 5 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 5 (response to OUT tokens) + 1 + + + + + OUT6 + Enable OUT endpoint 6 + 6 + 6 + + + Disable + Disable endpoint OUT 6 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 6 (response to OUT tokens) + 1 + + + + + OUT7 + Enable OUT endpoint 7 + 7 + 7 + + + Disable + Disable endpoint OUT 7 (no response to OUT tokens) + 0 + + + Enable + Enable endpoint OUT 7 (response to OUT tokens) + 1 + + + + + ISOOUT + Enable ISO OUT endpoint 8 + 8 + 8 + + + Disable + Disable ISO OUT endpoint 8 + 0 + + + Enable + Enable ISO OUT endpoint 8 + 1 + + + + + + + EPSTALL + STALL endpoints + 0x518 + write-only + 0x00000000 + modifyExternal + + + EP + Select endpoint number + 0 + 2 + + + IO + Selects IN or OUT endpoint + 7 + 7 + + + Out + Selects OUT endpoint + 0 + + + In + Selects IN endpoint + 1 + + + + + STALL + Stall selected endpoint + 8 + 8 + + + UnStall + Don't stall selected endpoint + 0 + + + Stall + Stall selected endpoint + 1 + + + + + + + ISOSPLIT + Controls the split of ISO buffers + 0x51C + read-write + + + SPLIT + Controls the split of ISO buffers + 0 + 15 + + + OneDir + Full buffer dedicated to either ISO IN or OUT + 0x0000 + + + HalfIN + Lower half for IN, upper half for OUT + 0x0080 + + + + + + + FRAMECNTR + Returns the current value of the start of frame counter + 0x520 + read-only + + + FRAMECNTR + Returns the current value of the start of frame counter + 0 + 10 + + + + + LOWPOWER + Controls USBD peripheral low power mode during USB suspend + 0x52C + read-write + 0x00000000 + + + LOWPOWER + Controls USBD peripheral low-power mode during USB suspend + 0 + 0 + + + ForceNormal + Software must write this value to exit low power mode and before performing a remote wake-up + 0 + + + LowPower + Software must write this value to enter low power mode after DMA and software have finished interacting with the USB peripheral + 1 + + + + + + + ISOINCONFIG + Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent + 0x530 + read-write + + + RESPONSE + Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent + 0 + 0 + + + NoResp + Endpoint does not respond in that case + 0 + + + ZeroData + Endpoint responds with a zero-length data packet in that case + 1 + + + + + + + 8 + 0x014 + EPIN[%s] + Unspecified + USBD_EPIN + read-write + 0x600 + + PTR + Description cluster: Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Description cluster: Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 6 + + + + + AMOUNT + Description cluster: Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 6 + + + + + + ISOIN + Unspecified + USBD_ISOIN + read-write + 0x6A0 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 9 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 9 + + + + + + 8 + 0x014 + EPOUT[%s] + Unspecified + USBD_EPOUT + read-write + 0x700 + + PTR + Description cluster: Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Description cluster: Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 6 + + + + + AMOUNT + Description cluster: Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 6 + + + + + + ISOOUT + Unspecified + USBD_ISOOUT + read-write + 0x7A0 + + PTR + Data pointer + 0x000 + read-write + + + PTR + Data pointer + 0 + 31 + + + + + MAXCNT + Maximum number of bytes to transfer + 0x004 + read-write + + + MAXCNT + Maximum number of bytes to transfer + 0 + 9 + + + + + AMOUNT + Number of bytes transferred in the last transaction + 0x008 + read-only + + + AMOUNT + Number of bytes transferred in the last transaction + 0 + 9 + + + + + + + + UARTE1 + UART with EasyDMA 1 + 0x40028000 + + UARTE1 + 40 + + + + QSPI + External flash interface + 0x40029000 + + 0 + 0x1000 + registers + + + QSPI + 41 + + QSPI + 0x20 + + + TASKS_ACTIVATE + Activate QSPI interface + 0x000 + write-only + + + TASKS_ACTIVATE + Activate QSPI interface + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_READSTART + Start transfer from external flash memory to internal RAM + 0x004 + write-only + + + TASKS_READSTART + Start transfer from external flash memory to internal RAM + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_WRITESTART + Start transfer from internal RAM to external flash memory + 0x008 + write-only + + + TASKS_WRITESTART + Start transfer from internal RAM to external flash memory + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_ERASESTART + Start external flash memory erase operation + 0x00C + write-only + + + TASKS_ERASESTART + Start external flash memory erase operation + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + TASKS_DEACTIVATE + Deactivate QSPI interface + 0x010 + write-only + + + TASKS_DEACTIVATE + Deactivate QSPI interface + 0 + 0 + + + Trigger + Trigger task + 1 + + + + + + + EVENTS_READY + QSPI peripheral is ready. This event will be generated as a response to any QSPI task. + 0x100 + read-write + + + EVENTS_READY + QSPI peripheral is ready. This event will be generated as a response to any QSPI task. + 0 + 0 + + + NotGenerated + Event not generated + 0 + + + Generated + Event generated + 1 + + + + + + + INTEN + Enable or disable interrupt + 0x300 + read-write + + + READY + Enable or disable interrupt for event READY + 0 + 0 + + + Disabled + Disable + 0 + + + Enabled + Enable + 1 + + + + + + + INTENSET + Enable interrupt + 0x304 + read-write + + + READY + Write '1' to enable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Set + Enable + 1 + + + + + + + INTENCLR + Disable interrupt + 0x308 + read-write + + + READY + Write '1' to disable interrupt for event READY + 0 + 0 + + read + + Disabled + Read: Disabled + 0 + + + Enabled + Read: Enabled + 1 + + + + write + + Clear + Disable + 1 + + + + + + + ENABLE + Enable QSPI peripheral and acquire the pins selected in PSELn registers + 0x500 + read-write + + + ENABLE + Enable or disable QSPI + 0 + 0 + + + Disabled + Disable QSPI + 0 + + + Enabled + Enable QSPI + 1 + + + + + + + READ + Unspecified + QSPI_READ + read-write + 0x504 + + SRC + Flash memory source address + 0x000 + read-write + + + SRC + Word-aligned flash memory source address. + 0 + 31 + + + + + DST + RAM destination address + 0x004 + read-write + + + DST + Word-aligned RAM destination address. + 0 + 31 + + + + + CNT + Read transfer length + 0x008 + read-write + + + CNT + Read transfer length in number of bytes. The length must be a multiple of 4 bytes. + 0 + 17 + + + + + + WRITE + Unspecified + QSPI_WRITE + read-write + 0x510 + + DST + Flash destination address + 0x000 + read-write + + + DST + Word-aligned flash destination address. + 0 + 31 + + + + + SRC + RAM source address + 0x004 + read-write + + + SRC + Word-aligned RAM source address. + 0 + 31 + + + + + CNT + Write transfer length + 0x008 + read-write + + + CNT + Write transfer length in number of bytes. The length must be a multiple of 4 bytes. + 0 + 17 + + + + + + ERASE + Unspecified + QSPI_ERASE + read-write + 0x51C + + PTR + Start address of flash block to be erased + 0x000 + read-write + + + PTR + Word-aligned start address of block to be erased. + 0 + 31 + + + + + LEN + Size of block to be erased. + 0x004 + read-write + + + LEN + LEN + 0 + 1 + + + 4KB + Erase 4 kB block (flash command 0x20) + 0 + + + 64KB + Erase 64 kB block (flash command 0xD8) + 1 + + + All + Erase all (flash command 0xC7) + 2 + + + + + + + + PSEL + Unspecified + QSPI_PSEL + read-write + 0x524 + + SCK + Pin select for serial clock SCK + 0x000 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + CSN + Pin select for chip select signal CSN. + 0x004 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + IO0 + Pin select for serial data MOSI/IO0. + 0x00C + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + IO1 + Pin select for serial data MISO/IO1. + 0x010 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + IO2 + Pin select for serial data IO2. + 0x014 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + IO3 + Pin select for serial data IO3. + 0x018 + read-write + 0xFFFFFFFF + + + PIN + Pin number + 0 + 4 + + + PORT + Port number + 5 + 5 + + + CONNECT + Connection + 31 + 31 + + + Disconnected + Disconnect + 1 + + + Connected + Connect + 0 + + + + + + + + XIPOFFSET + Address offset into the external memory for Execute in Place operation. + 0x540 + read-write + + + XIPOFFSET + Address offset into the external memory for Execute in Place operation. Value must be a multiple of 4. + 0 + 31 + + + + + IFCONFIG0 + Interface configuration. + 0x544 + read-write + + + READOC + Configure number of data lines and opcode used for reading. + 0 + 2 + + + FASTREAD + Single data line SPI. FAST_READ (opcode 0x0B). + 0 + + + READ2O + Dual data line SPI. READ2O (opcode 0x3B). + 1 + + + READ2IO + Dual data line SPI. READ2IO (opcode 0xBB). + 2 + + + READ4O + Quad data line SPI. READ4O (opcode 0x6B). + 3 + + + READ4IO + Quad data line SPI. READ4IO (opcode 0xEB). + 4 + + + + + WRITEOC + Configure number of data lines and opcode used for writing. + 3 + 5 + + + PP + Single data line SPI. PP (opcode 0x02). + 0 + + + PP2O + Dual data line SPI. PP2O (opcode 0xA2). + 1 + + + PP4O + Quad data line SPI. PP4O (opcode 0x32). + 2 + + + PP4IO + Quad data line SPI. PP4IO (opcode 0x38). + 3 + + + + + ADDRMODE + Addressing mode. + 6 + 6 + + + 24BIT + 24-bit addressing. + 0 + + + 32BIT + 32-bit addressing. + 1 + + + + + DPMENABLE + Enable deep power-down mode (DPM) feature. + 7 + 7 + + + Disable + Disable DPM feature. + 0 + + + Enable + Enable DPM feature. + 1 + + + + + PPSIZE + Page size for commands PP, PP2O, PP4O and PP4IO. + 12 + 12 + + + 256Bytes + 256 bytes. + 0 + + + 512Bytes + 512 bytes. + 1 + + + + + + + IFCONFIG1 + Interface configuration. + 0x600 + read-write + 0x00040480 + + + SCKDELAY + Minimum amount of time that the CSN pin must stay high before it can go low again. Value is specified in number of 16 MHz periods (62.5 ns). + 0 + 7 + + + DPMEN + Enter/exit deep power-down mode (DPM) for external flash memory. + 24 + 24 + + + Exit + Exit DPM. + 0 + + + Enter + Enter DPM. + 1 + + + + + SPIMODE + Select SPI mode. + 25 + 25 + + + MODE0 + Mode 0: Data are captured on the clock rising edge and data is output on a falling edge. Base level of clock is 0 (CPOL=0, CPHA=0). + 0 + + + MODE3 + Mode 3: Data are captured on the clock falling edge and data is output on a rising edge. Base level of clock is 1 (CPOL=1, CPHA=1). + 1 + + + + + SCKFREQ + SCK frequency is given as 32 MHz / (SCKFREQ + 1). + 28 + 31 + + + + + STATUS + Status register. + 0x604 + read-only + + + DPM + Deep power-down mode (DPM) status of external flash. + 2 + 2 + + + Disabled + External flash is not in DPM. + 0 + + + Enabled + External flash is in DPM. + 1 + + + + + READY + Ready status. + 3 + 3 + + + READY + QSPI peripheral is ready. It is allowed to trigger new tasks, writing custom instructions or enter/exit DPM. + 1 + + + BUSY + QSPI peripheral is busy. It is not allowed to trigger any new tasks, writing custom instructions or enter/exit DPM. + 0 + + + + + SREG + Value of external flash device Status Register. When the external flash has two bytes status register this field includes the value of the low byte. + 24 + 31 + + + + + DPMDUR + Set the duration required to enter/exit deep power-down mode (DPM). + 0x614 + read-write + 0xFFFFFFFF + + + ENTER + Duration needed by external flash to enter DPM. Duration is given as ENTER * 256 * 62.5 ns. + 0 + 15 + + + EXIT + Duration needed by external flash to exit DPM. Duration is given as EXIT * 256 * 62.5 ns. + 16 + 31 + + + + + ADDRCONF + Extended address configuration. + 0x624 + read-write + 0x000000B7 + + + OPCODE + Opcode that enters the 32-bit addressing mode. + 0 + 7 + + + BYTE0 + Byte 0 following opcode. + 8 + 15 + + + BYTE1 + Byte 1 following byte 0. + 16 + 23 + + + MODE + Extended addressing mode. + 24 + 25 + + + NoInstr + Do not send any instruction. + 0 + + + Opcode + Send opcode. + 1 + + + OpByte0 + Send opcode, byte0. + 2 + + + All + Send opcode, byte0, byte1. + 3 + + + + + WIPWAIT + Wait for write complete before sending command. + 26 + 26 + + + Disable + No wait. + 0 + + + Enable + Wait. + 1 + + + + + WREN + Send WREN (write enable opcode 0x06) before instruction. + 27 + 27 + + + Disable + Do not send WREN. + 0 + + + Enable + Send WREN. + 1 + + + + + + + CINSTRCONF + Custom instruction configuration register. + 0x634 + read-write + 0x00002000 + + + OPCODE + Opcode of Custom instruction. + 0 + 7 + + + LENGTH + Length of custom instruction in number of bytes. + 8 + 11 + + + 1B + Send opcode only. + 1 + + + 2B + Send opcode, CINSTRDAT0.BYTE0. + 2 + + + 3B + Send opcode, CINSTRDAT0.BYTE0 -&gt; CINSTRDAT0.BYTE1. + 3 + + + 4B + Send opcode, CINSTRDAT0.BYTE0 -&gt; CINSTRDAT0.BYTE2. + 4 + + + 5B + Send opcode, CINSTRDAT0.BYTE0 -&gt; CINSTRDAT0.BYTE3. + 5 + + + 6B + Send opcode, CINSTRDAT0.BYTE0 -&gt; CINSTRDAT1.BYTE4. + 6 + + + 7B + Send opcode, CINSTRDAT0.BYTE0 -&gt; CINSTRDAT1.BYTE5. + 7 + + + 8B + Send opcode, CINSTRDAT0.BYTE0 -&gt; CINSTRDAT1.BYTE6. + 8 + + + 9B + Send opcode, CINSTRDAT0.BYTE0 -&gt; CINSTRDAT1.BYTE7. + 9 + + + + + LIO2 + Level of the IO2 pin (if connected) during transmission of custom instruction. + 12 + 12 + + + LIO3 + Level of the IO3 pin (if connected) during transmission of custom instruction. + 13 + 13 + + + WIPWAIT + Wait for write complete before sending command. + 14 + 14 + + + Disable + No wait. + 0 + + + Enable + Wait. + 1 + + + + + WREN + Send WREN (write enable opcode 0x06) before instruction. + 15 + 15 + + + Disable + Do not send WREN. + 0 + + + Enable + Send WREN. + 1 + + + + + LFEN + Enable long frame mode. When enabled, a custom instruction transaction has to be ended by writing the LFSTOP field. + 16 + 16 + + + Disable + Long frame mode disabled + 0 + + + Enable + Long frame mode enabled + 1 + + + + + LFSTOP + Stop (finalize) long frame transaction + 17 + 17 + + + Stop + Stop + 1 + + + + + + + CINSTRDAT0 + Custom instruction data register 0. + 0x638 + read-write + + + BYTE0 + Data byte 0 + 0 + 7 + + + BYTE1 + Data byte 1 + 8 + 15 + + + BYTE2 + Data byte 2 + 16 + 23 + + + BYTE3 + Data byte 3 + 24 + 31 + + + + + CINSTRDAT1 + Custom instruction data register 1. + 0x63C + read-write + + + BYTE4 + Data byte 4 + 0 + 7 + + + BYTE5 + Data byte 5 + 8 + 15 + + + BYTE6 + Data byte 6 + 16 + 23 + + + BYTE7 + Data byte 7 + 24 + 31 + + + + + IFTIMING + SPI interface timing. + 0x640 + read-write + 0x00000200 + + + RXDELAY + Timing related to sampling of the input serial data. The value of RXDELAY specifies the number of 64 MHz cycles (15.625 ns) delay from the the rising edge of the SPI Clock (SCK) until the input serial data is sampled. As en example, if set to 0 the input serial data is sampled on the rising edge of SCK. + 8 + 10 + + + + + + + CC_HOST_RGF + CRYPTOCELL HOST_RGF interface + 0x5002A000 + + 0 + 0x2000 + registers + + CC_HOST_RGF + 0x20 + + + HOST_CRYPTOKEY_SEL + AES hardware key select + 0x1A38 + read-write + 0x00000000 + + + HOST_CRYPTOKEY_SEL + Select the source of the HW key that is used by the AES engine + 0 + 1 + + + K_DR + Use device root key K_DR from CRYPTOCELL AO power domain + 0 + + + K_PRTL + Use hard-coded RTL key K_PRTL + 1 + + + Session + Use provided session key + 2 + + + + + + + HOST_IOT_KPRTL_LOCK + This write-once register is the K_PRTL lock register. When this register is set, K_PRTL cannot be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain. + 0x1A4C + read-write + 0x00000000 + + + HOST_IOT_KPRTL_LOCK + This register is the K_PRTL lock register. When this register is set, K_PRTL cannot be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain. + 0 + 0 + + + Disabled + K_PRTL can be selected for use from register HOST_CRYPTOKEY_SEL + 0 + + + Enabled + K_PRTL has been locked until next power-on reset (POR). If K_PRTL is selected anyway, a zeroed key will be used instead. + 1 + + + + + + + HOST_IOT_KDR0 + This register holds bits 31:0 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain. Reading from this address returns the K_DR valid status indicating if K_DR is successfully retained. + 0x1A50 + read-write + 0x00000000 + + + HOST_IOT_KDR0 + Write: K_DR bits 31:0. Read: 0x00000000 when 128-bit K_DR key value is not yet retained in the CRYPTOCELL AO power domain. Read: 0x00000001 when 128-bit K_DR key value is successfully retained in the CRYPTOCELL AO power domain. + 0 + 31 + + + + + HOST_IOT_KDR1 + This register holds bits 63:32 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain. + 0x1A54 + write-only + 0x00000000 + + + HOST_IOT_KDR1 + K_DR bits 63:32 + 0 + 31 + + + + + HOST_IOT_KDR2 + This register holds bits 95:64 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain. + 0x1A58 + write-only + 0x00000000 + + + HOST_IOT_KDR2 + K_DR bits 95:64 + 0 + 31 + + + + + HOST_IOT_KDR3 + This register holds bits 127:96 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain. + 0x1A5C + write-only + 0x00000000 + + + HOST_IOT_KDR3 + K_DR bits 127:96 + 0 + 31 + + + + + HOST_IOT_LCS + Controls lifecycle state (LCS) for CRYPTOCELL subsystem + 0x1A60 + read-write + 0x00000002 + + + LCS + Lifecycle state value. This field is write-once per reset. + 0 + 2 + + + Debug + CC310 operates in debug mode + 0 + + + Secure + CC310 operates in secure mode + 2 + + + + + LCS_IS_VALID + Read-only field. Indicates if CRYPTOCELL LCS has been successfully configured since last reset. + 8 + 8 + + + Invalid + Valid LCS not yet retained in the CRYPTOCELL AO power domain + 0 + + + Valid + Valid LCS successfully retained in the CRYPTOCELL AO power domain + 1 + + + + + + + + + CRYPTOCELL + ARM TrustZone CryptoCell register interface + 0x5002A000 + CC_HOST_RGF + + 0 + 0x2000 + registers + + + CRYPTOCELL + 42 + + CRYPTOCELL + 0x20 + + + ENABLE + Enable CRYPTOCELL subsystem + 0x500 + read-write + 0x00000000 + + + ENABLE + Enable or disable the CRYPTOCELL subsystem + 0 + 0 + + + Disabled + CRYPTOCELL subsystem disabled + 0 + + + Enabled + CRYPTOCELL subsystem enabled. + 1 + + + + + + + + + PWM3 + Pulse width modulation unit 3 + 0x4002D000 + + PWM3 + 45 + + + + SPIM3 + Serial Peripheral Interface Master with EasyDMA 3 + 0x4002F000 + + SPIM3 + 47 + + + + \ No newline at end of file diff --git a/svd/rp2040.svd b/svd/rp2040.svd new file mode 100644 index 000000000..afbc2aaab --- /dev/null +++ b/svd/rp2040.svd @@ -0,0 +1,46401 @@ + + + + Raspberry Pi + RP2040 + 0.1 + + Dual-core Arm Cortex-M0+ processor, flexible clock running up to 133 MHz\n + 264KB on-chip SRAM\n + 2 x UART, 2 x SPI controllers, 2 x I2C controllers, 16 x PWM channels\n + 1 x USB 1.1 controller and PHY, with host and device support\n + 8 x Programmable I/O (PIO) state machines for custom peripheral support\n + Supported input power 1.8-5.5V DC\n + Operating temperature -20C to +85C\n + Drag-and-drop programming using mass storage over USB\n + Low-power sleep and dormant modes\n + Accurate on-chip clock\n + Temperature sensor\n + Accelerated integer and floating-point libraries on-chip + + + Copyright (c) 2020 Raspberry Pi (Trading) Ltd.\n + \n + SPDX-License-Identifier: BSD-3-Clause + + + CM0PLUS + r0p1 + little + true + false + 1 + 2 + false + 26 + + 8 + 32 + + + XIP_CTRL + 1 + QSPI flash execute-in-place block + 0x14000000 + 32 + + 0 + 0x0020 + registers + + + XIP_IRQ + 6 + + + + CTRL + Cache control + 0x0000 + 0x00000003 + + + POWER_DOWN + When 1, the cache memories are powered down. They retain state,\n + but can not be accessed. This reduces static power dissipation.\n + Writing 1 to this bit forces CTRL_EN to 0, i.e. the cache cannot\n + be enabled when powered down.\n + Cache-as-SRAM accesses will produce a bus error response when\n + the cache is powered down. + [3:3] + read-write + + + ERR_BADWRITE + When 1, writes to any alias other than 0x0 (caching, allocating)\n + will produce a bus fault. When 0, these writes are silently ignored.\n + In either case, writes to the 0x0 alias will deallocate on tag match,\n + as usual. + [1:1] + read-write + + + EN + When 1, enable the cache. When the cache is disabled, all XIP accesses\n + will go straight to the flash, without querying the cache. When enabled,\n + cacheable XIP accesses will query the cache, and the flash will\n + not be accessed if the tag matches and the valid bit is set.\n\n + If the cache is enabled, cache-as-SRAM accesses have no effect on the\n + cache data RAM, and will produce a bus error response. + [0:0] + read-write + + + + + FLUSH + Cache Flush control + 0x0004 + 0x00000000 + + + FLUSH + Write 1 to flush the cache. This clears the tag memory, but\n + the data memory retains its contents. (This means cache-as-SRAM\n + contents is not affected by flush or reset.)\n + Reading will hold the bus (stall the processor) until the flush\n + completes. Alternatively STAT can be polled until completion. + [0:0] + read-write + clear + + + + + STAT + Cache Status + 0x0008 + 0x00000002 + + + FIFO_FULL + When 1, indicates the XIP streaming FIFO is completely full.\n + The streaming FIFO is 2 entries deep, so the full and empty\n + flag allow its level to be ascertained. + [2:2] + read-only + + + FIFO_EMPTY + When 1, indicates the XIP streaming FIFO is completely empty. + [1:1] + read-only + + + FLUSH_READY + Reads as 0 while a cache flush is in progress, and 1 otherwise.\n + The cache is flushed whenever the XIP block is reset, and also\n + when requested via the FLUSH register. + [0:0] + read-only + + + + + CTR_HIT + Cache Hit counter\n + A 32 bit saturating counter that increments upon each cache hit,\n + i.e. when an XIP access is serviced directly from cached data.\n + Write any value to clear. + 0x000c + read-write + 0x00000000 + oneToClear + + + CTR_ACC + Cache Access counter\n + A 32 bit saturating counter that increments upon each XIP access,\n + whether the cache is hit or not. This includes noncacheable accesses.\n + Write any value to clear. + 0x0010 + read-write + 0x00000000 + oneToClear + + + STREAM_ADDR + FIFO stream address + 0x0014 + 0x00000000 + + + STREAM_ADDR + The address of the next word to be streamed from flash to the streaming FIFO.\n + Increments automatically after each flash access.\n + Write the initial access address here before starting a streaming read. + [31:2] + read-write + + + + + STREAM_CTR + FIFO stream control + 0x0018 + 0x00000000 + + + STREAM_CTR + Write a nonzero value to start a streaming read. This will then\n + progress in the background, using flash idle cycles to transfer\n + a linear data block from flash to the streaming FIFO.\n + Decrements automatically (1 at a time) as the stream\n + progresses, and halts on reaching 0.\n + Write 0 to halt an in-progress stream, and discard any in-flight\n + read, so that a new stream can immediately be started (after\n + draining the FIFO and reinitialising STREAM_ADDR) + [21:0] + read-write + + + + + STREAM_FIFO + FIFO stream data\n + Streamed data is buffered here, for retrieval by the system DMA.\n + This FIFO can also be accessed via the XIP_AUX slave, to avoid exposing\n + the DMA to bus stalls caused by other XIP traffic. + 0x001c + read-only + 0x00000000 + + + + + XIP_SSI + 1 + DW_apb_ssi has the following features:\n + * APB interface - Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.\n + * APB3 and APB4 protocol support.\n + * Scalable APB data bus width - Supports APB data bus widths of 8, 16, and 32 bits.\n + * Serial-master or serial-slave operation - Enables serial communication with serial-master or serial-slave peripheral devices.\n + * Programmable Dual/Quad/Octal SPI support in Master Mode.\n + * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the DW_apb_ssi master to perform operations with the device in DDR and RDS modes when working in Dual/Quad/Octal mode of operation.\n + * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in the device. This feature is applicable only in enhanced SPI modes.\n + * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a memory mapped I/O and fetches the data from the device based on the APB read request. This feature is applicable only in enhanced SPI modes.\n + * DMA Controller Interface - Enables the DW_apb_ssi to interface to a DMA controller over the bus using a handshaking interface for transfer requests.\n + * Independent masking of interrupts - Master collision, transmit FIFO overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and receive FIFO overflow interrupts can all be masked independently.\n + * Multi-master contention detection - Informs the processor of multiple serial-master accesses on the serial bus.\n + * Bypass of meta-stability flip-flops for synchronous clocks - When the APB clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, meta-stable flip-flops are not used when transferring control signals across these clock domains.\n + * Programmable delay on the sample time of the received serial data bit (rxd); enables programmable control of routing delays resulting in higher serial data-bit rates.\n + * Programmable features:\n + - Serial interface operation - Choice of Motorola SPI, Texas Instruments Synchronous Serial Protocol or National Semiconductor Microwire.\n + - Clock bit-rate - Dynamic control of the serial bit rate of the data transfer; used in only serial-master mode of operation.\n + - Data Item size (4 to 32 bits) - Item size of each data transfer under the control of the programmer.\n + * Configured features:\n + - FIFO depth - 16 words deep. The FIFO width is fixed at 32 bits.\n + - 1 slave select output.\n + - Hardware slave-select - Dedicated hardware slave-select line.\n + - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to the interrupt controller.\n + - Interrupt polarity - active high interrupt lines.\n + - Serial clock polarity - low serial-clock polarity directly after reset.\n + - Serial clock phase - capture on first edge of serial-clock directly after reset. + 0x18000000 + 32 + + 0 + 0x0100 + registers + + + + CTRLR0 + Control register 0 + 0x0000 + 0x00000000 + + + SSTE + Slave select toggle enable + [24:24] + read-write + + + SPI_FRF + SPI frame format + [22:21] + read-write + + + STD + Standard 1-bit SPI frame format; 1 bit per SCK, full-duplex + 0 + + + DUAL + Dual-SPI frame format; two bits per SCK, half-duplex + 1 + + + QUAD + Quad-SPI frame format; four bits per SCK, half-duplex + 2 + + + + + DFS_32 + Data frame size in 32b transfer mode\n + Value of n -> n+1 clocks per frame. + [20:16] + read-write + + + CFS + Control frame size\n + Value of n -> n+1 clocks per frame. + [15:12] + read-write + + + SRL + Shift register loop (test mode) + [11:11] + read-write + + + SLV_OE + Slave output enable + [10:10] + read-write + + + TMOD + Transfer mode + [9:8] + read-write + + + TX_AND_RX + Both transmit and receive + 0 + + + TX_ONLY + Transmit only (not for FRF == 0, standard SPI mode) + 1 + + + RX_ONLY + Receive only (not for FRF == 0, standard SPI mode) + 2 + + + EEPROM_READ + EEPROM read mode (TX then RX; RX starts after control data TX'd) + 3 + + + + + SCPOL + Serial clock polarity + [7:7] + read-write + + + SCPH + Serial clock phase + [6:6] + read-write + + + FRF + Frame format + [5:4] + read-write + + + DFS + Data frame size + [3:0] + read-write + + + + + CTRLR1 + Master Control register 1 + 0x0004 + 0x00000000 + + + NDF + Number of data frames + [15:0] + read-write + + + + + SSIENR + SSI Enable + 0x0008 + 0x00000000 + + + SSI_EN + SSI enable + [0:0] + read-write + + + + + MWCR + Microwire Control + 0x000c + 0x00000000 + + + MHS + Microwire handshaking + [2:2] + read-write + + + MDD + Microwire control + [1:1] + read-write + + + MWMOD + Microwire transfer mode + [0:0] + read-write + + + + + SER + Slave enable + 0x0010 + 0x00000000 + + + SER + For each bit:\n + 0 -> slave not selected\n + 1 -> slave selected + [0:0] + read-write + + + + + BAUDR + Baud rate + 0x0014 + 0x00000000 + + + SCKDV + SSI clock divider + [15:0] + read-write + + + + + TXFTLR + TX FIFO threshold level + 0x0018 + 0x00000000 + + + TFT + Transmit FIFO threshold + [7:0] + read-write + + + + + RXFTLR + RX FIFO threshold level + 0x001c + 0x00000000 + + + RFT + Receive FIFO threshold + [7:0] + read-write + + + + + TXFLR + TX FIFO level + 0x0020 + 0x00000000 + + + TFTFL + Transmit FIFO level + [7:0] + read-only + + + + + RXFLR + RX FIFO level + 0x0024 + 0x00000000 + + + RXTFL + Receive FIFO level + [7:0] + read-only + + + + + SR + Status register + 0x0028 + 0x00000000 + + + DCOL + Data collision error + [6:6] + read-only + + + TXE + Transmission error + [5:5] + read-only + + + RFF + Receive FIFO full + [4:4] + read-only + + + RFNE + Receive FIFO not empty + [3:3] + read-only + + + TFE + Transmit FIFO empty + [2:2] + read-only + + + TFNF + Transmit FIFO not full + [1:1] + read-only + + + BUSY + SSI busy flag + [0:0] + read-only + + + + + IMR + Interrupt mask + 0x002c + 0x00000000 + + + MSTIM + Multi-master contention interrupt mask + [5:5] + read-write + + + RXFIM + Receive FIFO full interrupt mask + [4:4] + read-write + + + RXOIM + Receive FIFO overflow interrupt mask + [3:3] + read-write + + + RXUIM + Receive FIFO underflow interrupt mask + [2:2] + read-write + + + TXOIM + Transmit FIFO overflow interrupt mask + [1:1] + read-write + + + TXEIM + Transmit FIFO empty interrupt mask + [0:0] + read-write + + + + + ISR + Interrupt status + 0x0030 + 0x00000000 + + + MSTIS + Multi-master contention interrupt status + [5:5] + read-only + + + RXFIS + Receive FIFO full interrupt status + [4:4] + read-only + + + RXOIS + Receive FIFO overflow interrupt status + [3:3] + read-only + + + RXUIS + Receive FIFO underflow interrupt status + [2:2] + read-only + + + TXOIS + Transmit FIFO overflow interrupt status + [1:1] + read-only + + + TXEIS + Transmit FIFO empty interrupt status + [0:0] + read-only + + + + + RISR + Raw interrupt status + 0x0034 + 0x00000000 + + + MSTIR + Multi-master contention raw interrupt status + [5:5] + read-only + + + RXFIR + Receive FIFO full raw interrupt status + [4:4] + read-only + + + RXOIR + Receive FIFO overflow raw interrupt status + [3:3] + read-only + + + RXUIR + Receive FIFO underflow raw interrupt status + [2:2] + read-only + + + TXOIR + Transmit FIFO overflow raw interrupt status + [1:1] + read-only + + + TXEIR + Transmit FIFO empty raw interrupt status + [0:0] + read-only + + + + + TXOICR + TX FIFO overflow interrupt clear + 0x0038 + 0x00000000 + + + TXOICR + Clear-on-read transmit FIFO overflow interrupt + [0:0] + read-only + + + + + RXOICR + RX FIFO overflow interrupt clear + 0x003c + 0x00000000 + + + RXOICR + Clear-on-read receive FIFO overflow interrupt + [0:0] + read-only + + + + + RXUICR + RX FIFO underflow interrupt clear + 0x0040 + 0x00000000 + + + RXUICR + Clear-on-read receive FIFO underflow interrupt + [0:0] + read-only + + + + + MSTICR + Multi-master interrupt clear + 0x0044 + 0x00000000 + + + MSTICR + Clear-on-read multi-master contention interrupt + [0:0] + read-only + + + + + ICR + Interrupt clear + 0x0048 + 0x00000000 + + + ICR + Clear-on-read all active interrupts + [0:0] + read-only + + + + + DMACR + DMA control + 0x004c + 0x00000000 + + + TDMAE + Transmit DMA enable + [1:1] + read-write + + + RDMAE + Receive DMA enable + [0:0] + read-write + + + + + DMATDLR + DMA TX data level + 0x0050 + 0x00000000 + + + DMATDL + Transmit data watermark level + [7:0] + read-write + + + + + DMARDLR + DMA RX data level + 0x0054 + 0x00000000 + + + DMARDL + Receive data watermark level (DMARDLR+1) + [7:0] + read-write + + + + + IDR + Identification register + 0x0058 + 0x51535049 + + + IDCODE + Peripheral dentification code + [31:0] + read-only + + + + + SSI_VERSION_ID + Version ID + 0x005c + 0x3430312a + + + SSI_COMP_VERSION + SNPS component version (format X.YY) + [31:0] + read-only + + + + + DR0 + Data Register 0 (of 36) + 0x0060 + 0x00000000 + + + DR + First data register of 36 + [31:0] + read-write + + + + + RX_SAMPLE_DLY + RX sample delay + 0x00f0 + 0x00000000 + + + RSD + RXD sample delay (in SCLK cycles) + [7:0] + read-write + + + + + SPI_CTRLR0 + SPI control + 0x00f4 + 0x03000000 + + + XIP_CMD + SPI Command to send in XIP mode (INST_L = 8-bit) or to append to Address (INST_L = 0-bit) + [31:24] + read-write + + + SPI_RXDS_EN + Read data strobe enable + [18:18] + read-write + + + INST_DDR_EN + Instruction DDR transfer enable + [17:17] + read-write + + + SPI_DDR_EN + SPI DDR transfer enable + [16:16] + read-write + + + WAIT_CYCLES + Wait cycles between control frame transmit and data reception (in SCLK cycles) + [15:11] + read-write + + + INST_L + Instruction length (0/4/8/16b) + [9:8] + read-write + + + NONE + No instruction + 0 + + + 4B + 4-bit instruction + 1 + + + 8B + 8-bit instruction + 2 + + + 16B + 16-bit instruction + 3 + + + + + ADDR_L + Address length (0b-60b in 4b increments) + [5:2] + read-write + + + TRANS_TYPE + Address and instruction transfer format + [1:0] + read-write + + + 1C1A + Command and address both in standard SPI frame format + 0 + + + 1C2A + Command in standard SPI format, address in format specified by FRF + 1 + + + 2C2A + Command and address both in format specified by FRF (e.g. Dual-SPI) + 2 + + + + + + + TXD_DRIVE_EDGE + TX drive edge + 0x00f8 + 0x00000000 + + + TDE + TXD drive edge + [7:0] + read-write + + + + + + + SYSINFO + 1 + 0x40000000 + 32 + + 0 + 0x1000 + registers + + + + CHIP_ID + JEDEC JEP-106 compliant chip identifier. + 0x0000 + 0x00000000 + + + REVISION + [31:28] + read-only + + + PART + [27:12] + read-only + + + MANUFACTURER + [11:0] + read-only + + + + + PLATFORM + Platform register. Allows software to know what environment it is running in. + 0x0004 + 0x00000000 + + + ASIC + [1:1] + read-only + + + FPGA + [0:0] + read-only + + + + + GITREF_RP2040 + Git hash of the chip source. Used to identify chip version. + 0x0040 + read-only + 0x00000000 + + + + + SYSCFG + 1 + Register block for various chip control signals + 0x40004000 + 32 + + 0 + 0x1000 + registers + + + + PROC0_NMI_MASK + Processor core 0 NMI source mask\n + Set a bit high to enable NMI from that IRQ + 0x0000 + read-write + 0x00000000 + + + PROC1_NMI_MASK + Processor core 1 NMI source mask\n + Set a bit high to enable NMI from that IRQ + 0x0004 + read-write + 0x00000000 + + + PROC_CONFIG + Configuration for processors + 0x0008 + 0x10000000 + + + PROC1_DAP_INSTID + Configure proc1 DAP instance ID.\n + Recommend that this is NOT changed until you require debug access in multi-chip environment\n + WARNING: do not set to 15 as this is reserved for RescueDP + [31:28] + read-write + + + PROC0_DAP_INSTID + Configure proc0 DAP instance ID.\n + Recommend that this is NOT changed until you require debug access in multi-chip environment\n + WARNING: do not set to 15 as this is reserved for RescueDP + [27:24] + read-write + + + PROC1_HALTED + Indication that proc1 has halted + [1:1] + read-only + + + PROC0_HALTED + Indication that proc0 has halted + [0:0] + read-only + + + + + PROC_IN_SYNC_BYPASS + For each bit, if 1, bypass the input synchronizer between that GPIO\n + and the GPIO input register in the SIO. The input synchronizers should\n + generally be unbypassed, to avoid injecting metastabilities into processors.\n + If you're feeling brave, you can bypass to save two cycles of input\n + latency. This register applies to GPIO 0...29. + 0x000c + 0x00000000 + + + PROC_IN_SYNC_BYPASS + [29:0] + read-write + + + + + PROC_IN_SYNC_BYPASS_HI + For each bit, if 1, bypass the input synchronizer between that GPIO\n + and the GPIO input register in the SIO. The input synchronizers should\n + generally be unbypassed, to avoid injecting metastabilities into processors.\n + If you're feeling brave, you can bypass to save two cycles of input\n + latency. This register applies to GPIO 30...35 (the QSPI IOs). + 0x0010 + 0x00000000 + + + PROC_IN_SYNC_BYPASS_HI + [5:0] + read-write + + + + + DBGFORCE + Directly control the SWD debug port of either processor + 0x0014 + 0x00000066 + + + PROC1_ATTACH + Attach processor 1 debug port to syscfg controls, and disconnect it from external SWD pads. + [7:7] + read-write + + + PROC1_SWCLK + Directly drive processor 1 SWCLK, if PROC1_ATTACH is set + [6:6] + read-write + + + PROC1_SWDI + Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set + [5:5] + read-write + + + PROC1_SWDO + Observe the value of processor 1 SWDIO output. + [4:4] + read-only + + + PROC0_ATTACH + Attach processor 0 debug port to syscfg controls, and disconnect it from external SWD pads. + [3:3] + read-write + + + PROC0_SWCLK + Directly drive processor 0 SWCLK, if PROC0_ATTACH is set + [2:2] + read-write + + + PROC0_SWDI + Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set + [1:1] + read-write + + + PROC0_SWDO + Observe the value of processor 0 SWDIO output. + [0:0] + read-only + + + + + MEMPOWERDOWN + Control power downs to memories. Set high to power down memories.\n + Use with extreme caution + 0x0018 + 0x00000000 + + + ROM + [7:7] + read-write + + + USB + [6:6] + read-write + + + SRAM5 + [5:5] + read-write + + + SRAM4 + [4:4] + read-write + + + SRAM3 + [3:3] + read-write + + + SRAM2 + [2:2] + read-write + + + SRAM1 + [1:1] + read-write + + + SRAM0 + [0:0] + read-write + + + + + + + CLOCKS + 1 + 0x40008000 + 32 + + 0 + 0x1000 + registers + + + CLOCKS_IRQ + 17 + + + + CLK_GPOUT0_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x0000 + 0x00000000 + + + NUDGE + An edge on this signal shifts the phase of the output by 1 cycle of the input clock\n + This can be done at any time + [20:20] + read-write + + + PHASE + This delays the enable signal by up to 3 cycles of the input clock\n + This must be set before the clock is enabled to have any effect + [17:16] + read-write + + + DC50 + Enables duty cycle correction for odd divisors + [12:12] + read-write + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [8:5] + read-write + + + clksrc_pll_sys + 0 + + + clksrc_gpin0 + 1 + + + clksrc_gpin1 + 2 + + + clksrc_pll_usb + 3 + + + rosc_clksrc + 4 + + + xosc_clksrc + 5 + + + clk_sys + 6 + + + clk_usb + 7 + + + clk_adc + 8 + + + clk_rtc + 9 + + + clk_ref + 10 + + + + + + + CLK_GPOUT0_DIV + Clock divisor, can be changed on-the-fly + 0x0004 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [31:8] + read-write + + + FRAC + Fractional component of the divisor + [7:0] + read-write + + + + + CLK_GPOUT0_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x0008 + read-only + 0x00000001 + + + CLK_GPOUT1_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x000c + 0x00000000 + + + NUDGE + An edge on this signal shifts the phase of the output by 1 cycle of the input clock\n + This can be done at any time + [20:20] + read-write + + + PHASE + This delays the enable signal by up to 3 cycles of the input clock\n + This must be set before the clock is enabled to have any effect + [17:16] + read-write + + + DC50 + Enables duty cycle correction for odd divisors + [12:12] + read-write + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [8:5] + read-write + + + clksrc_pll_sys + 0 + + + clksrc_gpin0 + 1 + + + clksrc_gpin1 + 2 + + + clksrc_pll_usb + 3 + + + rosc_clksrc + 4 + + + xosc_clksrc + 5 + + + clk_sys + 6 + + + clk_usb + 7 + + + clk_adc + 8 + + + clk_rtc + 9 + + + clk_ref + 10 + + + + + + + CLK_GPOUT1_DIV + Clock divisor, can be changed on-the-fly + 0x0010 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [31:8] + read-write + + + FRAC + Fractional component of the divisor + [7:0] + read-write + + + + + CLK_GPOUT1_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x0014 + read-only + 0x00000001 + + + CLK_GPOUT2_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x0018 + 0x00000000 + + + NUDGE + An edge on this signal shifts the phase of the output by 1 cycle of the input clock\n + This can be done at any time + [20:20] + read-write + + + PHASE + This delays the enable signal by up to 3 cycles of the input clock\n + This must be set before the clock is enabled to have any effect + [17:16] + read-write + + + DC50 + Enables duty cycle correction for odd divisors + [12:12] + read-write + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [8:5] + read-write + + + clksrc_pll_sys + 0 + + + clksrc_gpin0 + 1 + + + clksrc_gpin1 + 2 + + + clksrc_pll_usb + 3 + + + rosc_clksrc_ph + 4 + + + xosc_clksrc + 5 + + + clk_sys + 6 + + + clk_usb + 7 + + + clk_adc + 8 + + + clk_rtc + 9 + + + clk_ref + 10 + + + + + + + CLK_GPOUT2_DIV + Clock divisor, can be changed on-the-fly + 0x001c + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [31:8] + read-write + + + FRAC + Fractional component of the divisor + [7:0] + read-write + + + + + CLK_GPOUT2_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x0020 + read-only + 0x00000001 + + + CLK_GPOUT3_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x0024 + 0x00000000 + + + NUDGE + An edge on this signal shifts the phase of the output by 1 cycle of the input clock\n + This can be done at any time + [20:20] + read-write + + + PHASE + This delays the enable signal by up to 3 cycles of the input clock\n + This must be set before the clock is enabled to have any effect + [17:16] + read-write + + + DC50 + Enables duty cycle correction for odd divisors + [12:12] + read-write + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [8:5] + read-write + + + clksrc_pll_sys + 0 + + + clksrc_gpin0 + 1 + + + clksrc_gpin1 + 2 + + + clksrc_pll_usb + 3 + + + rosc_clksrc_ph + 4 + + + xosc_clksrc + 5 + + + clk_sys + 6 + + + clk_usb + 7 + + + clk_adc + 8 + + + clk_rtc + 9 + + + clk_ref + 10 + + + + + + + CLK_GPOUT3_DIV + Clock divisor, can be changed on-the-fly + 0x0028 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [31:8] + read-write + + + FRAC + Fractional component of the divisor + [7:0] + read-write + + + + + CLK_GPOUT3_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x002c + read-only + 0x00000001 + + + CLK_REF_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x0030 + 0x00000000 + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [6:5] + read-write + + + clksrc_pll_usb + 0 + + + clksrc_gpin0 + 1 + + + clksrc_gpin1 + 2 + + + + + SRC + Selects the clock source glitchlessly, can be changed on-the-fly + [1:0] + read-write + + + rosc_clksrc_ph + 0 + + + clksrc_clk_ref_aux + 1 + + + xosc_clksrc + 2 + + + + + + + CLK_REF_DIV + Clock divisor, can be changed on-the-fly + 0x0034 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [9:8] + read-write + + + + + CLK_REF_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s. + 0x0038 + read-only + 0x00000001 + + + CLK_SYS_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x003c + 0x00000000 + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [7:5] + read-write + + + clksrc_pll_sys + 0 + + + clksrc_pll_usb + 1 + + + rosc_clksrc + 2 + + + xosc_clksrc + 3 + + + clksrc_gpin0 + 4 + + + clksrc_gpin1 + 5 + + + + + SRC + Selects the clock source glitchlessly, can be changed on-the-fly + [0:0] + read-write + + + clk_ref + 0 + + + clksrc_clk_sys_aux + 1 + + + + + + + CLK_SYS_DIV + Clock divisor, can be changed on-the-fly + 0x0040 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [31:8] + read-write + + + FRAC + Fractional component of the divisor + [7:0] + read-write + + + + + CLK_SYS_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s. + 0x0044 + read-only + 0x00000001 + + + CLK_PERI_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x0048 + 0x00000000 + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [7:5] + read-write + + + clk_sys + 0 + + + clksrc_pll_sys + 1 + + + clksrc_pll_usb + 2 + + + rosc_clksrc_ph + 3 + + + xosc_clksrc + 4 + + + clksrc_gpin0 + 5 + + + clksrc_gpin1 + 6 + + + + + + + CLK_PERI_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x0050 + read-only + 0x00000001 + + + CLK_USB_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x0054 + 0x00000000 + + + NUDGE + An edge on this signal shifts the phase of the output by 1 cycle of the input clock\n + This can be done at any time + [20:20] + read-write + + + PHASE + This delays the enable signal by up to 3 cycles of the input clock\n + This must be set before the clock is enabled to have any effect + [17:16] + read-write + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [7:5] + read-write + + + clksrc_pll_usb + 0 + + + clksrc_pll_sys + 1 + + + rosc_clksrc_ph + 2 + + + xosc_clksrc + 3 + + + clksrc_gpin0 + 4 + + + clksrc_gpin1 + 5 + + + + + + + CLK_USB_DIV + Clock divisor, can be changed on-the-fly + 0x0058 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [9:8] + read-write + + + + + CLK_USB_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x005c + read-only + 0x00000001 + + + CLK_ADC_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x0060 + 0x00000000 + + + NUDGE + An edge on this signal shifts the phase of the output by 1 cycle of the input clock\n + This can be done at any time + [20:20] + read-write + + + PHASE + This delays the enable signal by up to 3 cycles of the input clock\n + This must be set before the clock is enabled to have any effect + [17:16] + read-write + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [7:5] + read-write + + + clksrc_pll_usb + 0 + + + clksrc_pll_sys + 1 + + + rosc_clksrc_ph + 2 + + + xosc_clksrc + 3 + + + clksrc_gpin0 + 4 + + + clksrc_gpin1 + 5 + + + + + + + CLK_ADC_DIV + Clock divisor, can be changed on-the-fly + 0x0064 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [9:8] + read-write + + + + + CLK_ADC_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x0068 + read-only + 0x00000001 + + + CLK_RTC_CTRL + Clock control, can be changed on-the-fly (except for auxsrc) + 0x006c + 0x00000000 + + + NUDGE + An edge on this signal shifts the phase of the output by 1 cycle of the input clock\n + This can be done at any time + [20:20] + read-write + + + PHASE + This delays the enable signal by up to 3 cycles of the input clock\n + This must be set before the clock is enabled to have any effect + [17:16] + read-write + + + ENABLE + Starts and stops the clock generator cleanly + [11:11] + read-write + + + KILL + Asynchronously kills the clock generator + [10:10] + read-write + + + AUXSRC + Selects the auxiliary clock source, will glitch when switching + [7:5] + read-write + + + clksrc_pll_usb + 0 + + + clksrc_pll_sys + 1 + + + rosc_clksrc_ph + 2 + + + xosc_clksrc + 3 + + + clksrc_gpin0 + 4 + + + clksrc_gpin1 + 5 + + + + + + + CLK_RTC_DIV + Clock divisor, can be changed on-the-fly + 0x0070 + 0x00000100 + + + INT + Integer component of the divisor, 0 -> divide by 2^16 + [31:8] + read-write + + + FRAC + Fractional component of the divisor + [7:0] + read-write + + + + + CLK_RTC_SELECTED + Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1. + 0x0074 + read-only + 0x00000001 + + + CLK_SYS_RESUS_CTRL + 0x0078 + 0x000000ff + + + CLEAR + For clearing the resus after the fault that triggered it has been corrected + [16:16] + read-write + + + FRCE + Force a resus, for test purposes only + [12:12] + read-write + + + ENABLE + Enable resus + [8:8] + read-write + + + TIMEOUT + This is expressed as a number of clk_ref cycles\n + and must be >= 2x clk_ref_freq/min_clk_tst_freq + [7:0] + read-write + + + + + CLK_SYS_RESUS_STATUS + 0x007c + 0x00000000 + + + RESUSSED + Clock has been resuscitated, correct the error then send ctrl_clear=1 + [0:0] + read-only + + + + + FC0_REF_KHZ + Reference clock frequency in kHz + 0x0080 + 0x00000000 + + + FC0_REF_KHZ + [19:0] + read-write + + + + + FC0_MIN_KHZ + Minimum pass frequency in kHz. This is optional. Set to 0 if you are not using the pass/fail flags + 0x0084 + 0x00000000 + + + FC0_MIN_KHZ + [24:0] + read-write + + + + + FC0_MAX_KHZ + Maximum pass frequency in kHz. This is optional. Set to 0x1ffffff if you are not using the pass/fail flags + 0x0088 + 0x01ffffff + + + FC0_MAX_KHZ + [24:0] + read-write + + + + + FC0_DELAY + Delays the start of frequency counting to allow the mux to settle\n + Delay is measured in multiples of the reference clock period + 0x008c + 0x00000001 + + + FC0_DELAY + [2:0] + read-write + + + + + FC0_INTERVAL + The test interval is 0.98us * 2**interval, but let's call it 1us * 2**interval\n + The default gives a test interval of 250us + 0x0090 + 0x00000008 + + + FC0_INTERVAL + [3:0] + read-write + + + + + FC0_SRC + Clock sent to frequency counter, set to 0 when not required\n + Writing to this register initiates the frequency count + 0x0094 + 0x00000000 + + + FC0_SRC + [7:0] + read-write + + + NULL + 0 + + + pll_sys_clksrc_primary + 1 + + + pll_usb_clksrc_primary + 2 + + + rosc_clksrc + 3 + + + rosc_clksrc_ph + 4 + + + xosc_clksrc + 5 + + + clksrc_gpin0 + 6 + + + clksrc_gpin1 + 7 + + + clk_ref + 8 + + + clk_sys + 9 + + + clk_peri + 10 + + + clk_usb + 11 + + + clk_adc + 12 + + + clk_rtc + 13 + + + + + + + FC0_STATUS + Frequency counter status + 0x0098 + 0x00000000 + + + DIED + Test clock stopped during test + [28:28] + read-only + + + FAST + Test clock faster than expected, only valid when status_done=1 + [24:24] + read-only + + + SLOW + Test clock slower than expected, only valid when status_done=1 + [20:20] + read-only + + + FAIL + Test failed + [16:16] + read-only + + + WAITING + Waiting for test clock to start + [12:12] + read-only + + + RUNNING + Test running + [8:8] + read-only + + + DONE + Test complete + [4:4] + read-only + + + PASS + Test passed + [0:0] + read-only + + + + + FC0_RESULT + Result of frequency measurement, only valid when status_done=1 + 0x009c + 0x00000000 + + + KHZ + [29:5] + read-only + + + FRAC + [4:0] + read-only + + + + + WAKE_EN0 + enable clock in wake mode + 0x00a0 + 0xffffffff + + + clk_sys_sram3 + [31:31] + read-write + + + clk_sys_sram2 + [30:30] + read-write + + + clk_sys_sram1 + [29:29] + read-write + + + clk_sys_sram0 + [28:28] + read-write + + + clk_sys_spi1 + [27:27] + read-write + + + clk_peri_spi1 + [26:26] + read-write + + + clk_sys_spi0 + [25:25] + read-write + + + clk_peri_spi0 + [24:24] + read-write + + + clk_sys_sio + [23:23] + read-write + + + clk_sys_rtc + [22:22] + read-write + + + clk_rtc_rtc + [21:21] + read-write + + + clk_sys_rosc + [20:20] + read-write + + + clk_sys_rom + [19:19] + read-write + + + clk_sys_resets + [18:18] + read-write + + + clk_sys_pwm + [17:17] + read-write + + + clk_sys_psm + [16:16] + read-write + + + clk_sys_pll_usb + [15:15] + read-write + + + clk_sys_pll_sys + [14:14] + read-write + + + clk_sys_pio1 + [13:13] + read-write + + + clk_sys_pio0 + [12:12] + read-write + + + clk_sys_pads + [11:11] + read-write + + + clk_sys_vreg_and_chip_reset + [10:10] + read-write + + + clk_sys_jtag + [9:9] + read-write + + + clk_sys_io + [8:8] + read-write + + + clk_sys_i2c1 + [7:7] + read-write + + + clk_sys_i2c0 + [6:6] + read-write + + + clk_sys_dma + [5:5] + read-write + + + clk_sys_busfabric + [4:4] + read-write + + + clk_sys_busctrl + [3:3] + read-write + + + clk_sys_adc + [2:2] + read-write + + + clk_adc_adc + [1:1] + read-write + + + clk_sys_clocks + [0:0] + read-write + + + + + WAKE_EN1 + enable clock in wake mode + 0x00a4 + 0x00007fff + + + clk_sys_xosc + [14:14] + read-write + + + clk_sys_xip + [13:13] + read-write + + + clk_sys_watchdog + [12:12] + read-write + + + clk_usb_usbctrl + [11:11] + read-write + + + clk_sys_usbctrl + [10:10] + read-write + + + clk_sys_uart1 + [9:9] + read-write + + + clk_peri_uart1 + [8:8] + read-write + + + clk_sys_uart0 + [7:7] + read-write + + + clk_peri_uart0 + [6:6] + read-write + + + clk_sys_timer + [5:5] + read-write + + + clk_sys_tbman + [4:4] + read-write + + + clk_sys_sysinfo + [3:3] + read-write + + + clk_sys_syscfg + [2:2] + read-write + + + clk_sys_sram5 + [1:1] + read-write + + + clk_sys_sram4 + [0:0] + read-write + + + + + SLEEP_EN0 + enable clock in sleep mode + 0x00a8 + 0xffffffff + + + clk_sys_sram3 + [31:31] + read-write + + + clk_sys_sram2 + [30:30] + read-write + + + clk_sys_sram1 + [29:29] + read-write + + + clk_sys_sram0 + [28:28] + read-write + + + clk_sys_spi1 + [27:27] + read-write + + + clk_peri_spi1 + [26:26] + read-write + + + clk_sys_spi0 + [25:25] + read-write + + + clk_peri_spi0 + [24:24] + read-write + + + clk_sys_sio + [23:23] + read-write + + + clk_sys_rtc + [22:22] + read-write + + + clk_rtc_rtc + [21:21] + read-write + + + clk_sys_rosc + [20:20] + read-write + + + clk_sys_rom + [19:19] + read-write + + + clk_sys_resets + [18:18] + read-write + + + clk_sys_pwm + [17:17] + read-write + + + clk_sys_psm + [16:16] + read-write + + + clk_sys_pll_usb + [15:15] + read-write + + + clk_sys_pll_sys + [14:14] + read-write + + + clk_sys_pio1 + [13:13] + read-write + + + clk_sys_pio0 + [12:12] + read-write + + + clk_sys_pads + [11:11] + read-write + + + clk_sys_vreg_and_chip_reset + [10:10] + read-write + + + clk_sys_jtag + [9:9] + read-write + + + clk_sys_io + [8:8] + read-write + + + clk_sys_i2c1 + [7:7] + read-write + + + clk_sys_i2c0 + [6:6] + read-write + + + clk_sys_dma + [5:5] + read-write + + + clk_sys_busfabric + [4:4] + read-write + + + clk_sys_busctrl + [3:3] + read-write + + + clk_sys_adc + [2:2] + read-write + + + clk_adc_adc + [1:1] + read-write + + + clk_sys_clocks + [0:0] + read-write + + + + + SLEEP_EN1 + enable clock in sleep mode + 0x00ac + 0x00007fff + + + clk_sys_xosc + [14:14] + read-write + + + clk_sys_xip + [13:13] + read-write + + + clk_sys_watchdog + [12:12] + read-write + + + clk_usb_usbctrl + [11:11] + read-write + + + clk_sys_usbctrl + [10:10] + read-write + + + clk_sys_uart1 + [9:9] + read-write + + + clk_peri_uart1 + [8:8] + read-write + + + clk_sys_uart0 + [7:7] + read-write + + + clk_peri_uart0 + [6:6] + read-write + + + clk_sys_timer + [5:5] + read-write + + + clk_sys_tbman + [4:4] + read-write + + + clk_sys_sysinfo + [3:3] + read-write + + + clk_sys_syscfg + [2:2] + read-write + + + clk_sys_sram5 + [1:1] + read-write + + + clk_sys_sram4 + [0:0] + read-write + + + + + ENABLED0 + indicates the state of the clock enable + 0x00b0 + 0x00000000 + + + clk_sys_sram3 + [31:31] + read-only + + + clk_sys_sram2 + [30:30] + read-only + + + clk_sys_sram1 + [29:29] + read-only + + + clk_sys_sram0 + [28:28] + read-only + + + clk_sys_spi1 + [27:27] + read-only + + + clk_peri_spi1 + [26:26] + read-only + + + clk_sys_spi0 + [25:25] + read-only + + + clk_peri_spi0 + [24:24] + read-only + + + clk_sys_sio + [23:23] + read-only + + + clk_sys_rtc + [22:22] + read-only + + + clk_rtc_rtc + [21:21] + read-only + + + clk_sys_rosc + [20:20] + read-only + + + clk_sys_rom + [19:19] + read-only + + + clk_sys_resets + [18:18] + read-only + + + clk_sys_pwm + [17:17] + read-only + + + clk_sys_psm + [16:16] + read-only + + + clk_sys_pll_usb + [15:15] + read-only + + + clk_sys_pll_sys + [14:14] + read-only + + + clk_sys_pio1 + [13:13] + read-only + + + clk_sys_pio0 + [12:12] + read-only + + + clk_sys_pads + [11:11] + read-only + + + clk_sys_vreg_and_chip_reset + [10:10] + read-only + + + clk_sys_jtag + [9:9] + read-only + + + clk_sys_io + [8:8] + read-only + + + clk_sys_i2c1 + [7:7] + read-only + + + clk_sys_i2c0 + [6:6] + read-only + + + clk_sys_dma + [5:5] + read-only + + + clk_sys_busfabric + [4:4] + read-only + + + clk_sys_busctrl + [3:3] + read-only + + + clk_sys_adc + [2:2] + read-only + + + clk_adc_adc + [1:1] + read-only + + + clk_sys_clocks + [0:0] + read-only + + + + + ENABLED1 + indicates the state of the clock enable + 0x00b4 + 0x00000000 + + + clk_sys_xosc + [14:14] + read-only + + + clk_sys_xip + [13:13] + read-only + + + clk_sys_watchdog + [12:12] + read-only + + + clk_usb_usbctrl + [11:11] + read-only + + + clk_sys_usbctrl + [10:10] + read-only + + + clk_sys_uart1 + [9:9] + read-only + + + clk_peri_uart1 + [8:8] + read-only + + + clk_sys_uart0 + [7:7] + read-only + + + clk_peri_uart0 + [6:6] + read-only + + + clk_sys_timer + [5:5] + read-only + + + clk_sys_tbman + [4:4] + read-only + + + clk_sys_sysinfo + [3:3] + read-only + + + clk_sys_syscfg + [2:2] + read-only + + + clk_sys_sram5 + [1:1] + read-only + + + clk_sys_sram4 + [0:0] + read-only + + + + + INTR + Raw Interrupts + 0x00b8 + 0x00000000 + + + CLK_SYS_RESUS + [0:0] + read-only + + + + + INTE + Interrupt Enable + 0x00bc + 0x00000000 + + + CLK_SYS_RESUS + [0:0] + read-write + + + + + INTF + Interrupt Force + 0x00c0 + 0x00000000 + + + CLK_SYS_RESUS + [0:0] + read-write + + + + + INTS + Interrupt status after masking & forcing + 0x00c4 + 0x00000000 + + + CLK_SYS_RESUS + [0:0] + read-only + + + + + + + RESETS + 1 + 0x4000c000 + 32 + + 0 + 0x1000 + registers + + + + RESET + Reset control. If a bit is set it means the peripheral is in reset. 0 means the peripheral's reset is deasserted. + 0x0000 + 0x01ffffff + + + usbctrl + [24:24] + read-write + + + uart1 + [23:23] + read-write + + + uart0 + [22:22] + read-write + + + timer + [21:21] + read-write + + + tbman + [20:20] + read-write + + + sysinfo + [19:19] + read-write + + + syscfg + [18:18] + read-write + + + spi1 + [17:17] + read-write + + + spi0 + [16:16] + read-write + + + rtc + [15:15] + read-write + + + pwm + [14:14] + read-write + + + pll_usb + [13:13] + read-write + + + pll_sys + [12:12] + read-write + + + pio1 + [11:11] + read-write + + + pio0 + [10:10] + read-write + + + pads_qspi + [9:9] + read-write + + + pads_bank0 + [8:8] + read-write + + + jtag + [7:7] + read-write + + + io_qspi + [6:6] + read-write + + + io_bank0 + [5:5] + read-write + + + i2c1 + [4:4] + read-write + + + i2c0 + [3:3] + read-write + + + dma + [2:2] + read-write + + + busctrl + [1:1] + read-write + + + adc + [0:0] + read-write + + + + + WDSEL + Watchdog select. If a bit is set then the watchdog will reset this peripheral when the watchdog fires. + 0x0004 + 0x00000000 + + + usbctrl + [24:24] + read-write + + + uart1 + [23:23] + read-write + + + uart0 + [22:22] + read-write + + + timer + [21:21] + read-write + + + tbman + [20:20] + read-write + + + sysinfo + [19:19] + read-write + + + syscfg + [18:18] + read-write + + + spi1 + [17:17] + read-write + + + spi0 + [16:16] + read-write + + + rtc + [15:15] + read-write + + + pwm + [14:14] + read-write + + + pll_usb + [13:13] + read-write + + + pll_sys + [12:12] + read-write + + + pio1 + [11:11] + read-write + + + pio0 + [10:10] + read-write + + + pads_qspi + [9:9] + read-write + + + pads_bank0 + [8:8] + read-write + + + jtag + [7:7] + read-write + + + io_qspi + [6:6] + read-write + + + io_bank0 + [5:5] + read-write + + + i2c1 + [4:4] + read-write + + + i2c0 + [3:3] + read-write + + + dma + [2:2] + read-write + + + busctrl + [1:1] + read-write + + + adc + [0:0] + read-write + + + + + RESET_DONE + Reset done. If a bit is set then a reset done signal has been returned by the peripheral. This indicates that the peripheral's registers are ready to be accessed. + 0x0008 + 0x00000000 + + + usbctrl + [24:24] + read-only + + + uart1 + [23:23] + read-only + + + uart0 + [22:22] + read-only + + + timer + [21:21] + read-only + + + tbman + [20:20] + read-only + + + sysinfo + [19:19] + read-only + + + syscfg + [18:18] + read-only + + + spi1 + [17:17] + read-only + + + spi0 + [16:16] + read-only + + + rtc + [15:15] + read-only + + + pwm + [14:14] + read-only + + + pll_usb + [13:13] + read-only + + + pll_sys + [12:12] + read-only + + + pio1 + [11:11] + read-only + + + pio0 + [10:10] + read-only + + + pads_qspi + [9:9] + read-only + + + pads_bank0 + [8:8] + read-only + + + jtag + [7:7] + read-only + + + io_qspi + [6:6] + read-only + + + io_bank0 + [5:5] + read-only + + + i2c1 + [4:4] + read-only + + + i2c0 + [3:3] + read-only + + + dma + [2:2] + read-only + + + busctrl + [1:1] + read-only + + + adc + [0:0] + read-only + + + + + + + PSM + 1 + 0x40010000 + 32 + + 0 + 0x1000 + registers + + + + FRCE_ON + Force block out of reset (i.e. power it on) + 0x0000 + 0x00000000 + + + proc1 + [16:16] + read-write + + + proc0 + [15:15] + read-write + + + sio + [14:14] + read-write + + + vreg_and_chip_reset + [13:13] + read-write + + + xip + [12:12] + read-write + + + sram5 + [11:11] + read-write + + + sram4 + [10:10] + read-write + + + sram3 + [9:9] + read-write + + + sram2 + [8:8] + read-write + + + sram1 + [7:7] + read-write + + + sram0 + [6:6] + read-write + + + rom + [5:5] + read-write + + + busfabric + [4:4] + read-write + + + resets + [3:3] + read-write + + + clocks + [2:2] + read-write + + + xosc + [1:1] + read-write + + + rosc + [0:0] + read-write + + + + + FRCE_OFF + Force into reset (i.e. power it off) + 0x0004 + 0x00000000 + + + proc1 + [16:16] + read-write + + + proc0 + [15:15] + read-write + + + sio + [14:14] + read-write + + + vreg_and_chip_reset + [13:13] + read-write + + + xip + [12:12] + read-write + + + sram5 + [11:11] + read-write + + + sram4 + [10:10] + read-write + + + sram3 + [9:9] + read-write + + + sram2 + [8:8] + read-write + + + sram1 + [7:7] + read-write + + + sram0 + [6:6] + read-write + + + rom + [5:5] + read-write + + + busfabric + [4:4] + read-write + + + resets + [3:3] + read-write + + + clocks + [2:2] + read-write + + + xosc + [1:1] + read-write + + + rosc + [0:0] + read-write + + + + + WDSEL + Set to 1 if this peripheral should be reset when the watchdog fires. + 0x0008 + 0x00000000 + + + proc1 + [16:16] + read-write + + + proc0 + [15:15] + read-write + + + sio + [14:14] + read-write + + + vreg_and_chip_reset + [13:13] + read-write + + + xip + [12:12] + read-write + + + sram5 + [11:11] + read-write + + + sram4 + [10:10] + read-write + + + sram3 + [9:9] + read-write + + + sram2 + [8:8] + read-write + + + sram1 + [7:7] + read-write + + + sram0 + [6:6] + read-write + + + rom + [5:5] + read-write + + + busfabric + [4:4] + read-write + + + resets + [3:3] + read-write + + + clocks + [2:2] + read-write + + + xosc + [1:1] + read-write + + + rosc + [0:0] + read-write + + + + + DONE + Indicates the peripheral's registers are ready to access. + 0x000c + 0x00000000 + + + proc1 + [16:16] + read-only + + + proc0 + [15:15] + read-only + + + sio + [14:14] + read-only + + + vreg_and_chip_reset + [13:13] + read-only + + + xip + [12:12] + read-only + + + sram5 + [11:11] + read-only + + + sram4 + [10:10] + read-only + + + sram3 + [9:9] + read-only + + + sram2 + [8:8] + read-only + + + sram1 + [7:7] + read-only + + + sram0 + [6:6] + read-only + + + rom + [5:5] + read-only + + + busfabric + [4:4] + read-only + + + resets + [3:3] + read-only + + + clocks + [2:2] + read-only + + + xosc + [1:1] + read-only + + + rosc + [0:0] + read-only + + + + + + + IO_BANK0 + 1 + 0x40014000 + 32 + + 0 + 0x1000 + registers + + + IO_IRQ_BANK0 + 13 + + + + GPIO0_STATUS + GPIO status + 0x0000 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO0_CTRL + GPIO control including function select and overrides. + 0x0004 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + jtag_tck + 0 + + + spi0_rx + 1 + + + uart0_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_0 + 4 + + + sio_0 + 5 + + + pio0_0 + 6 + + + pio1_0 + 7 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO1_STATUS + GPIO status + 0x0008 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO1_CTRL + GPIO control including function select and overrides. + 0x000c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + jtag_tms + 0 + + + spi0_ss_n + 1 + + + uart0_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_0 + 4 + + + sio_1 + 5 + + + pio0_1 + 6 + + + pio1_1 + 7 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO2_STATUS + GPIO status + 0x0010 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO2_CTRL + GPIO control including function select and overrides. + 0x0014 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + jtag_tdi + 0 + + + spi0_sclk + 1 + + + uart0_cts + 2 + + + i2c1_sda + 3 + + + pwm_a_1 + 4 + + + sio_2 + 5 + + + pio0_2 + 6 + + + pio1_2 + 7 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO3_STATUS + GPIO status + 0x0018 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO3_CTRL + GPIO control including function select and overrides. + 0x001c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + jtag_tdo + 0 + + + spi0_tx + 1 + + + uart0_rts + 2 + + + i2c1_scl + 3 + + + pwm_b_1 + 4 + + + sio_3 + 5 + + + pio0_3 + 6 + + + pio1_3 + 7 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO4_STATUS + GPIO status + 0x0020 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO4_CTRL + GPIO control including function select and overrides. + 0x0024 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_rx + 1 + + + uart1_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_2 + 4 + + + sio_4 + 5 + + + pio0_4 + 6 + + + pio1_4 + 7 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO5_STATUS + GPIO status + 0x0028 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO5_CTRL + GPIO control including function select and overrides. + 0x002c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_ss_n + 1 + + + uart1_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_2 + 4 + + + sio_5 + 5 + + + pio0_5 + 6 + + + pio1_5 + 7 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO6_STATUS + GPIO status + 0x0030 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO6_CTRL + GPIO control including function select and overrides. + 0x0034 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_sclk + 1 + + + uart1_cts + 2 + + + i2c1_sda + 3 + + + pwm_a_3 + 4 + + + sio_6 + 5 + + + pio0_6 + 6 + + + pio1_6 + 7 + + + usb_muxing_extphy_softcon + 8 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO7_STATUS + GPIO status + 0x0038 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO7_CTRL + GPIO control including function select and overrides. + 0x003c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_tx + 1 + + + uart1_rts + 2 + + + i2c1_scl + 3 + + + pwm_b_3 + 4 + + + sio_7 + 5 + + + pio0_7 + 6 + + + pio1_7 + 7 + + + usb_muxing_extphy_oe_n + 8 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO8_STATUS + GPIO status + 0x0040 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO8_CTRL + GPIO control including function select and overrides. + 0x0044 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_rx + 1 + + + uart1_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_4 + 4 + + + sio_8 + 5 + + + pio0_8 + 6 + + + pio1_8 + 7 + + + usb_muxing_extphy_rcv + 8 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO9_STATUS + GPIO status + 0x0048 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO9_CTRL + GPIO control including function select and overrides. + 0x004c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_ss_n + 1 + + + uart1_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_4 + 4 + + + sio_9 + 5 + + + pio0_9 + 6 + + + pio1_9 + 7 + + + usb_muxing_extphy_vp + 8 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO10_STATUS + GPIO status + 0x0050 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO10_CTRL + GPIO control including function select and overrides. + 0x0054 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_sclk + 1 + + + uart1_cts + 2 + + + i2c1_sda + 3 + + + pwm_a_5 + 4 + + + sio_10 + 5 + + + pio0_10 + 6 + + + pio1_10 + 7 + + + usb_muxing_extphy_vm + 8 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO11_STATUS + GPIO status + 0x0058 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO11_CTRL + GPIO control including function select and overrides. + 0x005c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_tx + 1 + + + uart1_rts + 2 + + + i2c1_scl + 3 + + + pwm_b_5 + 4 + + + sio_11 + 5 + + + pio0_11 + 6 + + + pio1_11 + 7 + + + usb_muxing_extphy_suspnd + 8 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO12_STATUS + GPIO status + 0x0060 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO12_CTRL + GPIO control including function select and overrides. + 0x0064 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_rx + 1 + + + uart0_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_6 + 4 + + + sio_12 + 5 + + + pio0_12 + 6 + + + pio1_12 + 7 + + + usb_muxing_extphy_speed + 8 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO13_STATUS + GPIO status + 0x0068 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO13_CTRL + GPIO control including function select and overrides. + 0x006c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_ss_n + 1 + + + uart0_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_6 + 4 + + + sio_13 + 5 + + + pio0_13 + 6 + + + pio1_13 + 7 + + + usb_muxing_extphy_vpo + 8 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO14_STATUS + GPIO status + 0x0070 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO14_CTRL + GPIO control including function select and overrides. + 0x0074 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_sclk + 1 + + + uart0_cts + 2 + + + i2c1_sda + 3 + + + pwm_a_7 + 4 + + + sio_14 + 5 + + + pio0_14 + 6 + + + pio1_14 + 7 + + + usb_muxing_extphy_vmo + 8 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO15_STATUS + GPIO status + 0x0078 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO15_CTRL + GPIO control including function select and overrides. + 0x007c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_tx + 1 + + + uart0_rts + 2 + + + i2c1_scl + 3 + + + pwm_b_7 + 4 + + + sio_15 + 5 + + + pio0_15 + 6 + + + pio1_15 + 7 + + + usb_muxing_digital_dp + 8 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO16_STATUS + GPIO status + 0x0080 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO16_CTRL + GPIO control including function select and overrides. + 0x0084 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_rx + 1 + + + uart0_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_0 + 4 + + + sio_16 + 5 + + + pio0_16 + 6 + + + pio1_16 + 7 + + + usb_muxing_digital_dm + 8 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO17_STATUS + GPIO status + 0x0088 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO17_CTRL + GPIO control including function select and overrides. + 0x008c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_ss_n + 1 + + + uart0_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_0 + 4 + + + sio_17 + 5 + + + pio0_17 + 6 + + + pio1_17 + 7 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO18_STATUS + GPIO status + 0x0090 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO18_CTRL + GPIO control including function select and overrides. + 0x0094 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_sclk + 1 + + + uart0_cts + 2 + + + i2c1_sda + 3 + + + pwm_a_1 + 4 + + + sio_18 + 5 + + + pio0_18 + 6 + + + pio1_18 + 7 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO19_STATUS + GPIO status + 0x0098 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO19_CTRL + GPIO control including function select and overrides. + 0x009c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_tx + 1 + + + uart0_rts + 2 + + + i2c1_scl + 3 + + + pwm_b_1 + 4 + + + sio_19 + 5 + + + pio0_19 + 6 + + + pio1_19 + 7 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO20_STATUS + GPIO status + 0x00a0 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO20_CTRL + GPIO control including function select and overrides. + 0x00a4 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_rx + 1 + + + uart1_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_2 + 4 + + + sio_20 + 5 + + + pio0_20 + 6 + + + pio1_20 + 7 + + + clocks_gpin_0 + 8 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO21_STATUS + GPIO status + 0x00a8 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO21_CTRL + GPIO control including function select and overrides. + 0x00ac + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_ss_n + 1 + + + uart1_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_2 + 4 + + + sio_21 + 5 + + + pio0_21 + 6 + + + pio1_21 + 7 + + + clocks_gpout_0 + 8 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO22_STATUS + GPIO status + 0x00b0 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO22_CTRL + GPIO control including function select and overrides. + 0x00b4 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_sclk + 1 + + + uart1_cts + 2 + + + i2c1_sda + 3 + + + pwm_a_3 + 4 + + + sio_22 + 5 + + + pio0_22 + 6 + + + pio1_22 + 7 + + + clocks_gpin_1 + 8 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO23_STATUS + GPIO status + 0x00b8 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO23_CTRL + GPIO control including function select and overrides. + 0x00bc + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi0_tx + 1 + + + uart1_rts + 2 + + + i2c1_scl + 3 + + + pwm_b_3 + 4 + + + sio_23 + 5 + + + pio0_23 + 6 + + + pio1_23 + 7 + + + clocks_gpout_1 + 8 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO24_STATUS + GPIO status + 0x00c0 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO24_CTRL + GPIO control including function select and overrides. + 0x00c4 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_rx + 1 + + + uart1_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_4 + 4 + + + sio_24 + 5 + + + pio0_24 + 6 + + + pio1_24 + 7 + + + clocks_gpout_2 + 8 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO25_STATUS + GPIO status + 0x00c8 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO25_CTRL + GPIO control including function select and overrides. + 0x00cc + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_ss_n + 1 + + + uart1_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_4 + 4 + + + sio_25 + 5 + + + pio0_25 + 6 + + + pio1_25 + 7 + + + clocks_gpout_3 + 8 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO26_STATUS + GPIO status + 0x00d0 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO26_CTRL + GPIO control including function select and overrides. + 0x00d4 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_sclk + 1 + + + uart1_cts + 2 + + + i2c1_sda + 3 + + + pwm_a_5 + 4 + + + sio_26 + 5 + + + pio0_26 + 6 + + + pio1_26 + 7 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + GPIO27_STATUS + GPIO status + 0x00d8 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO27_CTRL + GPIO control including function select and overrides. + 0x00dc + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_tx + 1 + + + uart1_rts + 2 + + + i2c1_scl + 3 + + + pwm_b_5 + 4 + + + sio_27 + 5 + + + pio0_27 + 6 + + + pio1_27 + 7 + + + usb_muxing_overcurr_detect + 9 + + + null + 31 + + + + + + + GPIO28_STATUS + GPIO status + 0x00e0 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO28_CTRL + GPIO control including function select and overrides. + 0x00e4 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_rx + 1 + + + uart0_tx + 2 + + + i2c0_sda + 3 + + + pwm_a_6 + 4 + + + sio_28 + 5 + + + pio0_28 + 6 + + + pio1_28 + 7 + + + usb_muxing_vbus_detect + 9 + + + null + 31 + + + + + + + GPIO29_STATUS + GPIO status + 0x00e8 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO29_CTRL + GPIO control including function select and overrides. + 0x00ec + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + spi1_ss_n + 1 + + + uart0_rx + 2 + + + i2c0_scl + 3 + + + pwm_b_6 + 4 + + + sio_29 + 5 + + + pio0_29 + 6 + + + pio1_29 + 7 + + + usb_muxing_vbus_en + 9 + + + null + 31 + + + + + + + INTR0 + Raw Interrupts + 0x00f0 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-write + oneToClear + + + GPIO7_EDGE_LOW + [30:30] + read-write + oneToClear + + + GPIO7_LEVEL_HIGH + [29:29] + read-only + + + GPIO7_LEVEL_LOW + [28:28] + read-only + + + GPIO6_EDGE_HIGH + [27:27] + read-write + oneToClear + + + GPIO6_EDGE_LOW + [26:26] + read-write + oneToClear + + + GPIO6_LEVEL_HIGH + [25:25] + read-only + + + GPIO6_LEVEL_LOW + [24:24] + read-only + + + GPIO5_EDGE_HIGH + [23:23] + read-write + oneToClear + + + GPIO5_EDGE_LOW + [22:22] + read-write + oneToClear + + + GPIO5_LEVEL_HIGH + [21:21] + read-only + + + GPIO5_LEVEL_LOW + [20:20] + read-only + + + GPIO4_EDGE_HIGH + [19:19] + read-write + oneToClear + + + GPIO4_EDGE_LOW + [18:18] + read-write + oneToClear + + + GPIO4_LEVEL_HIGH + [17:17] + read-only + + + GPIO4_LEVEL_LOW + [16:16] + read-only + + + GPIO3_EDGE_HIGH + [15:15] + read-write + oneToClear + + + GPIO3_EDGE_LOW + [14:14] + read-write + oneToClear + + + GPIO3_LEVEL_HIGH + [13:13] + read-only + + + GPIO3_LEVEL_LOW + [12:12] + read-only + + + GPIO2_EDGE_HIGH + [11:11] + read-write + oneToClear + + + GPIO2_EDGE_LOW + [10:10] + read-write + oneToClear + + + GPIO2_LEVEL_HIGH + [9:9] + read-only + + + GPIO2_LEVEL_LOW + [8:8] + read-only + + + GPIO1_EDGE_HIGH + [7:7] + read-write + oneToClear + + + GPIO1_EDGE_LOW + [6:6] + read-write + oneToClear + + + GPIO1_LEVEL_HIGH + [5:5] + read-only + + + GPIO1_LEVEL_LOW + [4:4] + read-only + + + GPIO0_EDGE_HIGH + [3:3] + read-write + oneToClear + + + GPIO0_EDGE_LOW + [2:2] + read-write + oneToClear + + + GPIO0_LEVEL_HIGH + [1:1] + read-only + + + GPIO0_LEVEL_LOW + [0:0] + read-only + + + + + INTR1 + Raw Interrupts + 0x00f4 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-write + oneToClear + + + GPIO15_EDGE_LOW + [30:30] + read-write + oneToClear + + + GPIO15_LEVEL_HIGH + [29:29] + read-only + + + GPIO15_LEVEL_LOW + [28:28] + read-only + + + GPIO14_EDGE_HIGH + [27:27] + read-write + oneToClear + + + GPIO14_EDGE_LOW + [26:26] + read-write + oneToClear + + + GPIO14_LEVEL_HIGH + [25:25] + read-only + + + GPIO14_LEVEL_LOW + [24:24] + read-only + + + GPIO13_EDGE_HIGH + [23:23] + read-write + oneToClear + + + GPIO13_EDGE_LOW + [22:22] + read-write + oneToClear + + + GPIO13_LEVEL_HIGH + [21:21] + read-only + + + GPIO13_LEVEL_LOW + [20:20] + read-only + + + GPIO12_EDGE_HIGH + [19:19] + read-write + oneToClear + + + GPIO12_EDGE_LOW + [18:18] + read-write + oneToClear + + + GPIO12_LEVEL_HIGH + [17:17] + read-only + + + GPIO12_LEVEL_LOW + [16:16] + read-only + + + GPIO11_EDGE_HIGH + [15:15] + read-write + oneToClear + + + GPIO11_EDGE_LOW + [14:14] + read-write + oneToClear + + + GPIO11_LEVEL_HIGH + [13:13] + read-only + + + GPIO11_LEVEL_LOW + [12:12] + read-only + + + GPIO10_EDGE_HIGH + [11:11] + read-write + oneToClear + + + GPIO10_EDGE_LOW + [10:10] + read-write + oneToClear + + + GPIO10_LEVEL_HIGH + [9:9] + read-only + + + GPIO10_LEVEL_LOW + [8:8] + read-only + + + GPIO9_EDGE_HIGH + [7:7] + read-write + oneToClear + + + GPIO9_EDGE_LOW + [6:6] + read-write + oneToClear + + + GPIO9_LEVEL_HIGH + [5:5] + read-only + + + GPIO9_LEVEL_LOW + [4:4] + read-only + + + GPIO8_EDGE_HIGH + [3:3] + read-write + oneToClear + + + GPIO8_EDGE_LOW + [2:2] + read-write + oneToClear + + + GPIO8_LEVEL_HIGH + [1:1] + read-only + + + GPIO8_LEVEL_LOW + [0:0] + read-only + + + + + INTR2 + Raw Interrupts + 0x00f8 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-write + oneToClear + + + GPIO23_EDGE_LOW + [30:30] + read-write + oneToClear + + + GPIO23_LEVEL_HIGH + [29:29] + read-only + + + GPIO23_LEVEL_LOW + [28:28] + read-only + + + GPIO22_EDGE_HIGH + [27:27] + read-write + oneToClear + + + GPIO22_EDGE_LOW + [26:26] + read-write + oneToClear + + + GPIO22_LEVEL_HIGH + [25:25] + read-only + + + GPIO22_LEVEL_LOW + [24:24] + read-only + + + GPIO21_EDGE_HIGH + [23:23] + read-write + oneToClear + + + GPIO21_EDGE_LOW + [22:22] + read-write + oneToClear + + + GPIO21_LEVEL_HIGH + [21:21] + read-only + + + GPIO21_LEVEL_LOW + [20:20] + read-only + + + GPIO20_EDGE_HIGH + [19:19] + read-write + oneToClear + + + GPIO20_EDGE_LOW + [18:18] + read-write + oneToClear + + + GPIO20_LEVEL_HIGH + [17:17] + read-only + + + GPIO20_LEVEL_LOW + [16:16] + read-only + + + GPIO19_EDGE_HIGH + [15:15] + read-write + oneToClear + + + GPIO19_EDGE_LOW + [14:14] + read-write + oneToClear + + + GPIO19_LEVEL_HIGH + [13:13] + read-only + + + GPIO19_LEVEL_LOW + [12:12] + read-only + + + GPIO18_EDGE_HIGH + [11:11] + read-write + oneToClear + + + GPIO18_EDGE_LOW + [10:10] + read-write + oneToClear + + + GPIO18_LEVEL_HIGH + [9:9] + read-only + + + GPIO18_LEVEL_LOW + [8:8] + read-only + + + GPIO17_EDGE_HIGH + [7:7] + read-write + oneToClear + + + GPIO17_EDGE_LOW + [6:6] + read-write + oneToClear + + + GPIO17_LEVEL_HIGH + [5:5] + read-only + + + GPIO17_LEVEL_LOW + [4:4] + read-only + + + GPIO16_EDGE_HIGH + [3:3] + read-write + oneToClear + + + GPIO16_EDGE_LOW + [2:2] + read-write + oneToClear + + + GPIO16_LEVEL_HIGH + [1:1] + read-only + + + GPIO16_LEVEL_LOW + [0:0] + read-only + + + + + INTR3 + Raw Interrupts + 0x00fc + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-write + oneToClear + + + GPIO29_EDGE_LOW + [22:22] + read-write + oneToClear + + + GPIO29_LEVEL_HIGH + [21:21] + read-only + + + GPIO29_LEVEL_LOW + [20:20] + read-only + + + GPIO28_EDGE_HIGH + [19:19] + read-write + oneToClear + + + GPIO28_EDGE_LOW + [18:18] + read-write + oneToClear + + + GPIO28_LEVEL_HIGH + [17:17] + read-only + + + GPIO28_LEVEL_LOW + [16:16] + read-only + + + GPIO27_EDGE_HIGH + [15:15] + read-write + oneToClear + + + GPIO27_EDGE_LOW + [14:14] + read-write + oneToClear + + + GPIO27_LEVEL_HIGH + [13:13] + read-only + + + GPIO27_LEVEL_LOW + [12:12] + read-only + + + GPIO26_EDGE_HIGH + [11:11] + read-write + oneToClear + + + GPIO26_EDGE_LOW + [10:10] + read-write + oneToClear + + + GPIO26_LEVEL_HIGH + [9:9] + read-only + + + GPIO26_LEVEL_LOW + [8:8] + read-only + + + GPIO25_EDGE_HIGH + [7:7] + read-write + oneToClear + + + GPIO25_EDGE_LOW + [6:6] + read-write + oneToClear + + + GPIO25_LEVEL_HIGH + [5:5] + read-only + + + GPIO25_LEVEL_LOW + [4:4] + read-only + + + GPIO24_EDGE_HIGH + [3:3] + read-write + oneToClear + + + GPIO24_EDGE_LOW + [2:2] + read-write + oneToClear + + + GPIO24_LEVEL_HIGH + [1:1] + read-only + + + GPIO24_LEVEL_LOW + [0:0] + read-only + + + + + PROC0_INTE0 + Interrupt Enable for proc0 + 0x0100 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-write + + + GPIO7_EDGE_LOW + [30:30] + read-write + + + GPIO7_LEVEL_HIGH + [29:29] + read-write + + + GPIO7_LEVEL_LOW + [28:28] + read-write + + + GPIO6_EDGE_HIGH + [27:27] + read-write + + + GPIO6_EDGE_LOW + [26:26] + read-write + + + GPIO6_LEVEL_HIGH + [25:25] + read-write + + + GPIO6_LEVEL_LOW + [24:24] + read-write + + + GPIO5_EDGE_HIGH + [23:23] + read-write + + + GPIO5_EDGE_LOW + [22:22] + read-write + + + GPIO5_LEVEL_HIGH + [21:21] + read-write + + + GPIO5_LEVEL_LOW + [20:20] + read-write + + + GPIO4_EDGE_HIGH + [19:19] + read-write + + + GPIO4_EDGE_LOW + [18:18] + read-write + + + GPIO4_LEVEL_HIGH + [17:17] + read-write + + + GPIO4_LEVEL_LOW + [16:16] + read-write + + + GPIO3_EDGE_HIGH + [15:15] + read-write + + + GPIO3_EDGE_LOW + [14:14] + read-write + + + GPIO3_LEVEL_HIGH + [13:13] + read-write + + + GPIO3_LEVEL_LOW + [12:12] + read-write + + + GPIO2_EDGE_HIGH + [11:11] + read-write + + + GPIO2_EDGE_LOW + [10:10] + read-write + + + GPIO2_LEVEL_HIGH + [9:9] + read-write + + + GPIO2_LEVEL_LOW + [8:8] + read-write + + + GPIO1_EDGE_HIGH + [7:7] + read-write + + + GPIO1_EDGE_LOW + [6:6] + read-write + + + GPIO1_LEVEL_HIGH + [5:5] + read-write + + + GPIO1_LEVEL_LOW + [4:4] + read-write + + + GPIO0_EDGE_HIGH + [3:3] + read-write + + + GPIO0_EDGE_LOW + [2:2] + read-write + + + GPIO0_LEVEL_HIGH + [1:1] + read-write + + + GPIO0_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTE1 + Interrupt Enable for proc0 + 0x0104 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-write + + + GPIO15_EDGE_LOW + [30:30] + read-write + + + GPIO15_LEVEL_HIGH + [29:29] + read-write + + + GPIO15_LEVEL_LOW + [28:28] + read-write + + + GPIO14_EDGE_HIGH + [27:27] + read-write + + + GPIO14_EDGE_LOW + [26:26] + read-write + + + GPIO14_LEVEL_HIGH + [25:25] + read-write + + + GPIO14_LEVEL_LOW + [24:24] + read-write + + + GPIO13_EDGE_HIGH + [23:23] + read-write + + + GPIO13_EDGE_LOW + [22:22] + read-write + + + GPIO13_LEVEL_HIGH + [21:21] + read-write + + + GPIO13_LEVEL_LOW + [20:20] + read-write + + + GPIO12_EDGE_HIGH + [19:19] + read-write + + + GPIO12_EDGE_LOW + [18:18] + read-write + + + GPIO12_LEVEL_HIGH + [17:17] + read-write + + + GPIO12_LEVEL_LOW + [16:16] + read-write + + + GPIO11_EDGE_HIGH + [15:15] + read-write + + + GPIO11_EDGE_LOW + [14:14] + read-write + + + GPIO11_LEVEL_HIGH + [13:13] + read-write + + + GPIO11_LEVEL_LOW + [12:12] + read-write + + + GPIO10_EDGE_HIGH + [11:11] + read-write + + + GPIO10_EDGE_LOW + [10:10] + read-write + + + GPIO10_LEVEL_HIGH + [9:9] + read-write + + + GPIO10_LEVEL_LOW + [8:8] + read-write + + + GPIO9_EDGE_HIGH + [7:7] + read-write + + + GPIO9_EDGE_LOW + [6:6] + read-write + + + GPIO9_LEVEL_HIGH + [5:5] + read-write + + + GPIO9_LEVEL_LOW + [4:4] + read-write + + + GPIO8_EDGE_HIGH + [3:3] + read-write + + + GPIO8_EDGE_LOW + [2:2] + read-write + + + GPIO8_LEVEL_HIGH + [1:1] + read-write + + + GPIO8_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTE2 + Interrupt Enable for proc0 + 0x0108 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-write + + + GPIO23_EDGE_LOW + [30:30] + read-write + + + GPIO23_LEVEL_HIGH + [29:29] + read-write + + + GPIO23_LEVEL_LOW + [28:28] + read-write + + + GPIO22_EDGE_HIGH + [27:27] + read-write + + + GPIO22_EDGE_LOW + [26:26] + read-write + + + GPIO22_LEVEL_HIGH + [25:25] + read-write + + + GPIO22_LEVEL_LOW + [24:24] + read-write + + + GPIO21_EDGE_HIGH + [23:23] + read-write + + + GPIO21_EDGE_LOW + [22:22] + read-write + + + GPIO21_LEVEL_HIGH + [21:21] + read-write + + + GPIO21_LEVEL_LOW + [20:20] + read-write + + + GPIO20_EDGE_HIGH + [19:19] + read-write + + + GPIO20_EDGE_LOW + [18:18] + read-write + + + GPIO20_LEVEL_HIGH + [17:17] + read-write + + + GPIO20_LEVEL_LOW + [16:16] + read-write + + + GPIO19_EDGE_HIGH + [15:15] + read-write + + + GPIO19_EDGE_LOW + [14:14] + read-write + + + GPIO19_LEVEL_HIGH + [13:13] + read-write + + + GPIO19_LEVEL_LOW + [12:12] + read-write + + + GPIO18_EDGE_HIGH + [11:11] + read-write + + + GPIO18_EDGE_LOW + [10:10] + read-write + + + GPIO18_LEVEL_HIGH + [9:9] + read-write + + + GPIO18_LEVEL_LOW + [8:8] + read-write + + + GPIO17_EDGE_HIGH + [7:7] + read-write + + + GPIO17_EDGE_LOW + [6:6] + read-write + + + GPIO17_LEVEL_HIGH + [5:5] + read-write + + + GPIO17_LEVEL_LOW + [4:4] + read-write + + + GPIO16_EDGE_HIGH + [3:3] + read-write + + + GPIO16_EDGE_LOW + [2:2] + read-write + + + GPIO16_LEVEL_HIGH + [1:1] + read-write + + + GPIO16_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTE3 + Interrupt Enable for proc0 + 0x010c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-write + + + GPIO29_EDGE_LOW + [22:22] + read-write + + + GPIO29_LEVEL_HIGH + [21:21] + read-write + + + GPIO29_LEVEL_LOW + [20:20] + read-write + + + GPIO28_EDGE_HIGH + [19:19] + read-write + + + GPIO28_EDGE_LOW + [18:18] + read-write + + + GPIO28_LEVEL_HIGH + [17:17] + read-write + + + GPIO28_LEVEL_LOW + [16:16] + read-write + + + GPIO27_EDGE_HIGH + [15:15] + read-write + + + GPIO27_EDGE_LOW + [14:14] + read-write + + + GPIO27_LEVEL_HIGH + [13:13] + read-write + + + GPIO27_LEVEL_LOW + [12:12] + read-write + + + GPIO26_EDGE_HIGH + [11:11] + read-write + + + GPIO26_EDGE_LOW + [10:10] + read-write + + + GPIO26_LEVEL_HIGH + [9:9] + read-write + + + GPIO26_LEVEL_LOW + [8:8] + read-write + + + GPIO25_EDGE_HIGH + [7:7] + read-write + + + GPIO25_EDGE_LOW + [6:6] + read-write + + + GPIO25_LEVEL_HIGH + [5:5] + read-write + + + GPIO25_LEVEL_LOW + [4:4] + read-write + + + GPIO24_EDGE_HIGH + [3:3] + read-write + + + GPIO24_EDGE_LOW + [2:2] + read-write + + + GPIO24_LEVEL_HIGH + [1:1] + read-write + + + GPIO24_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTF0 + Interrupt Force for proc0 + 0x0110 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-write + + + GPIO7_EDGE_LOW + [30:30] + read-write + + + GPIO7_LEVEL_HIGH + [29:29] + read-write + + + GPIO7_LEVEL_LOW + [28:28] + read-write + + + GPIO6_EDGE_HIGH + [27:27] + read-write + + + GPIO6_EDGE_LOW + [26:26] + read-write + + + GPIO6_LEVEL_HIGH + [25:25] + read-write + + + GPIO6_LEVEL_LOW + [24:24] + read-write + + + GPIO5_EDGE_HIGH + [23:23] + read-write + + + GPIO5_EDGE_LOW + [22:22] + read-write + + + GPIO5_LEVEL_HIGH + [21:21] + read-write + + + GPIO5_LEVEL_LOW + [20:20] + read-write + + + GPIO4_EDGE_HIGH + [19:19] + read-write + + + GPIO4_EDGE_LOW + [18:18] + read-write + + + GPIO4_LEVEL_HIGH + [17:17] + read-write + + + GPIO4_LEVEL_LOW + [16:16] + read-write + + + GPIO3_EDGE_HIGH + [15:15] + read-write + + + GPIO3_EDGE_LOW + [14:14] + read-write + + + GPIO3_LEVEL_HIGH + [13:13] + read-write + + + GPIO3_LEVEL_LOW + [12:12] + read-write + + + GPIO2_EDGE_HIGH + [11:11] + read-write + + + GPIO2_EDGE_LOW + [10:10] + read-write + + + GPIO2_LEVEL_HIGH + [9:9] + read-write + + + GPIO2_LEVEL_LOW + [8:8] + read-write + + + GPIO1_EDGE_HIGH + [7:7] + read-write + + + GPIO1_EDGE_LOW + [6:6] + read-write + + + GPIO1_LEVEL_HIGH + [5:5] + read-write + + + GPIO1_LEVEL_LOW + [4:4] + read-write + + + GPIO0_EDGE_HIGH + [3:3] + read-write + + + GPIO0_EDGE_LOW + [2:2] + read-write + + + GPIO0_LEVEL_HIGH + [1:1] + read-write + + + GPIO0_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTF1 + Interrupt Force for proc0 + 0x0114 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-write + + + GPIO15_EDGE_LOW + [30:30] + read-write + + + GPIO15_LEVEL_HIGH + [29:29] + read-write + + + GPIO15_LEVEL_LOW + [28:28] + read-write + + + GPIO14_EDGE_HIGH + [27:27] + read-write + + + GPIO14_EDGE_LOW + [26:26] + read-write + + + GPIO14_LEVEL_HIGH + [25:25] + read-write + + + GPIO14_LEVEL_LOW + [24:24] + read-write + + + GPIO13_EDGE_HIGH + [23:23] + read-write + + + GPIO13_EDGE_LOW + [22:22] + read-write + + + GPIO13_LEVEL_HIGH + [21:21] + read-write + + + GPIO13_LEVEL_LOW + [20:20] + read-write + + + GPIO12_EDGE_HIGH + [19:19] + read-write + + + GPIO12_EDGE_LOW + [18:18] + read-write + + + GPIO12_LEVEL_HIGH + [17:17] + read-write + + + GPIO12_LEVEL_LOW + [16:16] + read-write + + + GPIO11_EDGE_HIGH + [15:15] + read-write + + + GPIO11_EDGE_LOW + [14:14] + read-write + + + GPIO11_LEVEL_HIGH + [13:13] + read-write + + + GPIO11_LEVEL_LOW + [12:12] + read-write + + + GPIO10_EDGE_HIGH + [11:11] + read-write + + + GPIO10_EDGE_LOW + [10:10] + read-write + + + GPIO10_LEVEL_HIGH + [9:9] + read-write + + + GPIO10_LEVEL_LOW + [8:8] + read-write + + + GPIO9_EDGE_HIGH + [7:7] + read-write + + + GPIO9_EDGE_LOW + [6:6] + read-write + + + GPIO9_LEVEL_HIGH + [5:5] + read-write + + + GPIO9_LEVEL_LOW + [4:4] + read-write + + + GPIO8_EDGE_HIGH + [3:3] + read-write + + + GPIO8_EDGE_LOW + [2:2] + read-write + + + GPIO8_LEVEL_HIGH + [1:1] + read-write + + + GPIO8_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTF2 + Interrupt Force for proc0 + 0x0118 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-write + + + GPIO23_EDGE_LOW + [30:30] + read-write + + + GPIO23_LEVEL_HIGH + [29:29] + read-write + + + GPIO23_LEVEL_LOW + [28:28] + read-write + + + GPIO22_EDGE_HIGH + [27:27] + read-write + + + GPIO22_EDGE_LOW + [26:26] + read-write + + + GPIO22_LEVEL_HIGH + [25:25] + read-write + + + GPIO22_LEVEL_LOW + [24:24] + read-write + + + GPIO21_EDGE_HIGH + [23:23] + read-write + + + GPIO21_EDGE_LOW + [22:22] + read-write + + + GPIO21_LEVEL_HIGH + [21:21] + read-write + + + GPIO21_LEVEL_LOW + [20:20] + read-write + + + GPIO20_EDGE_HIGH + [19:19] + read-write + + + GPIO20_EDGE_LOW + [18:18] + read-write + + + GPIO20_LEVEL_HIGH + [17:17] + read-write + + + GPIO20_LEVEL_LOW + [16:16] + read-write + + + GPIO19_EDGE_HIGH + [15:15] + read-write + + + GPIO19_EDGE_LOW + [14:14] + read-write + + + GPIO19_LEVEL_HIGH + [13:13] + read-write + + + GPIO19_LEVEL_LOW + [12:12] + read-write + + + GPIO18_EDGE_HIGH + [11:11] + read-write + + + GPIO18_EDGE_LOW + [10:10] + read-write + + + GPIO18_LEVEL_HIGH + [9:9] + read-write + + + GPIO18_LEVEL_LOW + [8:8] + read-write + + + GPIO17_EDGE_HIGH + [7:7] + read-write + + + GPIO17_EDGE_LOW + [6:6] + read-write + + + GPIO17_LEVEL_HIGH + [5:5] + read-write + + + GPIO17_LEVEL_LOW + [4:4] + read-write + + + GPIO16_EDGE_HIGH + [3:3] + read-write + + + GPIO16_EDGE_LOW + [2:2] + read-write + + + GPIO16_LEVEL_HIGH + [1:1] + read-write + + + GPIO16_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTF3 + Interrupt Force for proc0 + 0x011c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-write + + + GPIO29_EDGE_LOW + [22:22] + read-write + + + GPIO29_LEVEL_HIGH + [21:21] + read-write + + + GPIO29_LEVEL_LOW + [20:20] + read-write + + + GPIO28_EDGE_HIGH + [19:19] + read-write + + + GPIO28_EDGE_LOW + [18:18] + read-write + + + GPIO28_LEVEL_HIGH + [17:17] + read-write + + + GPIO28_LEVEL_LOW + [16:16] + read-write + + + GPIO27_EDGE_HIGH + [15:15] + read-write + + + GPIO27_EDGE_LOW + [14:14] + read-write + + + GPIO27_LEVEL_HIGH + [13:13] + read-write + + + GPIO27_LEVEL_LOW + [12:12] + read-write + + + GPIO26_EDGE_HIGH + [11:11] + read-write + + + GPIO26_EDGE_LOW + [10:10] + read-write + + + GPIO26_LEVEL_HIGH + [9:9] + read-write + + + GPIO26_LEVEL_LOW + [8:8] + read-write + + + GPIO25_EDGE_HIGH + [7:7] + read-write + + + GPIO25_EDGE_LOW + [6:6] + read-write + + + GPIO25_LEVEL_HIGH + [5:5] + read-write + + + GPIO25_LEVEL_LOW + [4:4] + read-write + + + GPIO24_EDGE_HIGH + [3:3] + read-write + + + GPIO24_EDGE_LOW + [2:2] + read-write + + + GPIO24_LEVEL_HIGH + [1:1] + read-write + + + GPIO24_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTS0 + Interrupt status after masking & forcing for proc0 + 0x0120 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-only + + + GPIO7_EDGE_LOW + [30:30] + read-only + + + GPIO7_LEVEL_HIGH + [29:29] + read-only + + + GPIO7_LEVEL_LOW + [28:28] + read-only + + + GPIO6_EDGE_HIGH + [27:27] + read-only + + + GPIO6_EDGE_LOW + [26:26] + read-only + + + GPIO6_LEVEL_HIGH + [25:25] + read-only + + + GPIO6_LEVEL_LOW + [24:24] + read-only + + + GPIO5_EDGE_HIGH + [23:23] + read-only + + + GPIO5_EDGE_LOW + [22:22] + read-only + + + GPIO5_LEVEL_HIGH + [21:21] + read-only + + + GPIO5_LEVEL_LOW + [20:20] + read-only + + + GPIO4_EDGE_HIGH + [19:19] + read-only + + + GPIO4_EDGE_LOW + [18:18] + read-only + + + GPIO4_LEVEL_HIGH + [17:17] + read-only + + + GPIO4_LEVEL_LOW + [16:16] + read-only + + + GPIO3_EDGE_HIGH + [15:15] + read-only + + + GPIO3_EDGE_LOW + [14:14] + read-only + + + GPIO3_LEVEL_HIGH + [13:13] + read-only + + + GPIO3_LEVEL_LOW + [12:12] + read-only + + + GPIO2_EDGE_HIGH + [11:11] + read-only + + + GPIO2_EDGE_LOW + [10:10] + read-only + + + GPIO2_LEVEL_HIGH + [9:9] + read-only + + + GPIO2_LEVEL_LOW + [8:8] + read-only + + + GPIO1_EDGE_HIGH + [7:7] + read-only + + + GPIO1_EDGE_LOW + [6:6] + read-only + + + GPIO1_LEVEL_HIGH + [5:5] + read-only + + + GPIO1_LEVEL_LOW + [4:4] + read-only + + + GPIO0_EDGE_HIGH + [3:3] + read-only + + + GPIO0_EDGE_LOW + [2:2] + read-only + + + GPIO0_LEVEL_HIGH + [1:1] + read-only + + + GPIO0_LEVEL_LOW + [0:0] + read-only + + + + + PROC0_INTS1 + Interrupt status after masking & forcing for proc0 + 0x0124 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-only + + + GPIO15_EDGE_LOW + [30:30] + read-only + + + GPIO15_LEVEL_HIGH + [29:29] + read-only + + + GPIO15_LEVEL_LOW + [28:28] + read-only + + + GPIO14_EDGE_HIGH + [27:27] + read-only + + + GPIO14_EDGE_LOW + [26:26] + read-only + + + GPIO14_LEVEL_HIGH + [25:25] + read-only + + + GPIO14_LEVEL_LOW + [24:24] + read-only + + + GPIO13_EDGE_HIGH + [23:23] + read-only + + + GPIO13_EDGE_LOW + [22:22] + read-only + + + GPIO13_LEVEL_HIGH + [21:21] + read-only + + + GPIO13_LEVEL_LOW + [20:20] + read-only + + + GPIO12_EDGE_HIGH + [19:19] + read-only + + + GPIO12_EDGE_LOW + [18:18] + read-only + + + GPIO12_LEVEL_HIGH + [17:17] + read-only + + + GPIO12_LEVEL_LOW + [16:16] + read-only + + + GPIO11_EDGE_HIGH + [15:15] + read-only + + + GPIO11_EDGE_LOW + [14:14] + read-only + + + GPIO11_LEVEL_HIGH + [13:13] + read-only + + + GPIO11_LEVEL_LOW + [12:12] + read-only + + + GPIO10_EDGE_HIGH + [11:11] + read-only + + + GPIO10_EDGE_LOW + [10:10] + read-only + + + GPIO10_LEVEL_HIGH + [9:9] + read-only + + + GPIO10_LEVEL_LOW + [8:8] + read-only + + + GPIO9_EDGE_HIGH + [7:7] + read-only + + + GPIO9_EDGE_LOW + [6:6] + read-only + + + GPIO9_LEVEL_HIGH + [5:5] + read-only + + + GPIO9_LEVEL_LOW + [4:4] + read-only + + + GPIO8_EDGE_HIGH + [3:3] + read-only + + + GPIO8_EDGE_LOW + [2:2] + read-only + + + GPIO8_LEVEL_HIGH + [1:1] + read-only + + + GPIO8_LEVEL_LOW + [0:0] + read-only + + + + + PROC0_INTS2 + Interrupt status after masking & forcing for proc0 + 0x0128 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-only + + + GPIO23_EDGE_LOW + [30:30] + read-only + + + GPIO23_LEVEL_HIGH + [29:29] + read-only + + + GPIO23_LEVEL_LOW + [28:28] + read-only + + + GPIO22_EDGE_HIGH + [27:27] + read-only + + + GPIO22_EDGE_LOW + [26:26] + read-only + + + GPIO22_LEVEL_HIGH + [25:25] + read-only + + + GPIO22_LEVEL_LOW + [24:24] + read-only + + + GPIO21_EDGE_HIGH + [23:23] + read-only + + + GPIO21_EDGE_LOW + [22:22] + read-only + + + GPIO21_LEVEL_HIGH + [21:21] + read-only + + + GPIO21_LEVEL_LOW + [20:20] + read-only + + + GPIO20_EDGE_HIGH + [19:19] + read-only + + + GPIO20_EDGE_LOW + [18:18] + read-only + + + GPIO20_LEVEL_HIGH + [17:17] + read-only + + + GPIO20_LEVEL_LOW + [16:16] + read-only + + + GPIO19_EDGE_HIGH + [15:15] + read-only + + + GPIO19_EDGE_LOW + [14:14] + read-only + + + GPIO19_LEVEL_HIGH + [13:13] + read-only + + + GPIO19_LEVEL_LOW + [12:12] + read-only + + + GPIO18_EDGE_HIGH + [11:11] + read-only + + + GPIO18_EDGE_LOW + [10:10] + read-only + + + GPIO18_LEVEL_HIGH + [9:9] + read-only + + + GPIO18_LEVEL_LOW + [8:8] + read-only + + + GPIO17_EDGE_HIGH + [7:7] + read-only + + + GPIO17_EDGE_LOW + [6:6] + read-only + + + GPIO17_LEVEL_HIGH + [5:5] + read-only + + + GPIO17_LEVEL_LOW + [4:4] + read-only + + + GPIO16_EDGE_HIGH + [3:3] + read-only + + + GPIO16_EDGE_LOW + [2:2] + read-only + + + GPIO16_LEVEL_HIGH + [1:1] + read-only + + + GPIO16_LEVEL_LOW + [0:0] + read-only + + + + + PROC0_INTS3 + Interrupt status after masking & forcing for proc0 + 0x012c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-only + + + GPIO29_EDGE_LOW + [22:22] + read-only + + + GPIO29_LEVEL_HIGH + [21:21] + read-only + + + GPIO29_LEVEL_LOW + [20:20] + read-only + + + GPIO28_EDGE_HIGH + [19:19] + read-only + + + GPIO28_EDGE_LOW + [18:18] + read-only + + + GPIO28_LEVEL_HIGH + [17:17] + read-only + + + GPIO28_LEVEL_LOW + [16:16] + read-only + + + GPIO27_EDGE_HIGH + [15:15] + read-only + + + GPIO27_EDGE_LOW + [14:14] + read-only + + + GPIO27_LEVEL_HIGH + [13:13] + read-only + + + GPIO27_LEVEL_LOW + [12:12] + read-only + + + GPIO26_EDGE_HIGH + [11:11] + read-only + + + GPIO26_EDGE_LOW + [10:10] + read-only + + + GPIO26_LEVEL_HIGH + [9:9] + read-only + + + GPIO26_LEVEL_LOW + [8:8] + read-only + + + GPIO25_EDGE_HIGH + [7:7] + read-only + + + GPIO25_EDGE_LOW + [6:6] + read-only + + + GPIO25_LEVEL_HIGH + [5:5] + read-only + + + GPIO25_LEVEL_LOW + [4:4] + read-only + + + GPIO24_EDGE_HIGH + [3:3] + read-only + + + GPIO24_EDGE_LOW + [2:2] + read-only + + + GPIO24_LEVEL_HIGH + [1:1] + read-only + + + GPIO24_LEVEL_LOW + [0:0] + read-only + + + + + PROC1_INTE0 + Interrupt Enable for proc1 + 0x0130 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-write + + + GPIO7_EDGE_LOW + [30:30] + read-write + + + GPIO7_LEVEL_HIGH + [29:29] + read-write + + + GPIO7_LEVEL_LOW + [28:28] + read-write + + + GPIO6_EDGE_HIGH + [27:27] + read-write + + + GPIO6_EDGE_LOW + [26:26] + read-write + + + GPIO6_LEVEL_HIGH + [25:25] + read-write + + + GPIO6_LEVEL_LOW + [24:24] + read-write + + + GPIO5_EDGE_HIGH + [23:23] + read-write + + + GPIO5_EDGE_LOW + [22:22] + read-write + + + GPIO5_LEVEL_HIGH + [21:21] + read-write + + + GPIO5_LEVEL_LOW + [20:20] + read-write + + + GPIO4_EDGE_HIGH + [19:19] + read-write + + + GPIO4_EDGE_LOW + [18:18] + read-write + + + GPIO4_LEVEL_HIGH + [17:17] + read-write + + + GPIO4_LEVEL_LOW + [16:16] + read-write + + + GPIO3_EDGE_HIGH + [15:15] + read-write + + + GPIO3_EDGE_LOW + [14:14] + read-write + + + GPIO3_LEVEL_HIGH + [13:13] + read-write + + + GPIO3_LEVEL_LOW + [12:12] + read-write + + + GPIO2_EDGE_HIGH + [11:11] + read-write + + + GPIO2_EDGE_LOW + [10:10] + read-write + + + GPIO2_LEVEL_HIGH + [9:9] + read-write + + + GPIO2_LEVEL_LOW + [8:8] + read-write + + + GPIO1_EDGE_HIGH + [7:7] + read-write + + + GPIO1_EDGE_LOW + [6:6] + read-write + + + GPIO1_LEVEL_HIGH + [5:5] + read-write + + + GPIO1_LEVEL_LOW + [4:4] + read-write + + + GPIO0_EDGE_HIGH + [3:3] + read-write + + + GPIO0_EDGE_LOW + [2:2] + read-write + + + GPIO0_LEVEL_HIGH + [1:1] + read-write + + + GPIO0_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTE1 + Interrupt Enable for proc1 + 0x0134 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-write + + + GPIO15_EDGE_LOW + [30:30] + read-write + + + GPIO15_LEVEL_HIGH + [29:29] + read-write + + + GPIO15_LEVEL_LOW + [28:28] + read-write + + + GPIO14_EDGE_HIGH + [27:27] + read-write + + + GPIO14_EDGE_LOW + [26:26] + read-write + + + GPIO14_LEVEL_HIGH + [25:25] + read-write + + + GPIO14_LEVEL_LOW + [24:24] + read-write + + + GPIO13_EDGE_HIGH + [23:23] + read-write + + + GPIO13_EDGE_LOW + [22:22] + read-write + + + GPIO13_LEVEL_HIGH + [21:21] + read-write + + + GPIO13_LEVEL_LOW + [20:20] + read-write + + + GPIO12_EDGE_HIGH + [19:19] + read-write + + + GPIO12_EDGE_LOW + [18:18] + read-write + + + GPIO12_LEVEL_HIGH + [17:17] + read-write + + + GPIO12_LEVEL_LOW + [16:16] + read-write + + + GPIO11_EDGE_HIGH + [15:15] + read-write + + + GPIO11_EDGE_LOW + [14:14] + read-write + + + GPIO11_LEVEL_HIGH + [13:13] + read-write + + + GPIO11_LEVEL_LOW + [12:12] + read-write + + + GPIO10_EDGE_HIGH + [11:11] + read-write + + + GPIO10_EDGE_LOW + [10:10] + read-write + + + GPIO10_LEVEL_HIGH + [9:9] + read-write + + + GPIO10_LEVEL_LOW + [8:8] + read-write + + + GPIO9_EDGE_HIGH + [7:7] + read-write + + + GPIO9_EDGE_LOW + [6:6] + read-write + + + GPIO9_LEVEL_HIGH + [5:5] + read-write + + + GPIO9_LEVEL_LOW + [4:4] + read-write + + + GPIO8_EDGE_HIGH + [3:3] + read-write + + + GPIO8_EDGE_LOW + [2:2] + read-write + + + GPIO8_LEVEL_HIGH + [1:1] + read-write + + + GPIO8_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTE2 + Interrupt Enable for proc1 + 0x0138 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-write + + + GPIO23_EDGE_LOW + [30:30] + read-write + + + GPIO23_LEVEL_HIGH + [29:29] + read-write + + + GPIO23_LEVEL_LOW + [28:28] + read-write + + + GPIO22_EDGE_HIGH + [27:27] + read-write + + + GPIO22_EDGE_LOW + [26:26] + read-write + + + GPIO22_LEVEL_HIGH + [25:25] + read-write + + + GPIO22_LEVEL_LOW + [24:24] + read-write + + + GPIO21_EDGE_HIGH + [23:23] + read-write + + + GPIO21_EDGE_LOW + [22:22] + read-write + + + GPIO21_LEVEL_HIGH + [21:21] + read-write + + + GPIO21_LEVEL_LOW + [20:20] + read-write + + + GPIO20_EDGE_HIGH + [19:19] + read-write + + + GPIO20_EDGE_LOW + [18:18] + read-write + + + GPIO20_LEVEL_HIGH + [17:17] + read-write + + + GPIO20_LEVEL_LOW + [16:16] + read-write + + + GPIO19_EDGE_HIGH + [15:15] + read-write + + + GPIO19_EDGE_LOW + [14:14] + read-write + + + GPIO19_LEVEL_HIGH + [13:13] + read-write + + + GPIO19_LEVEL_LOW + [12:12] + read-write + + + GPIO18_EDGE_HIGH + [11:11] + read-write + + + GPIO18_EDGE_LOW + [10:10] + read-write + + + GPIO18_LEVEL_HIGH + [9:9] + read-write + + + GPIO18_LEVEL_LOW + [8:8] + read-write + + + GPIO17_EDGE_HIGH + [7:7] + read-write + + + GPIO17_EDGE_LOW + [6:6] + read-write + + + GPIO17_LEVEL_HIGH + [5:5] + read-write + + + GPIO17_LEVEL_LOW + [4:4] + read-write + + + GPIO16_EDGE_HIGH + [3:3] + read-write + + + GPIO16_EDGE_LOW + [2:2] + read-write + + + GPIO16_LEVEL_HIGH + [1:1] + read-write + + + GPIO16_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTE3 + Interrupt Enable for proc1 + 0x013c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-write + + + GPIO29_EDGE_LOW + [22:22] + read-write + + + GPIO29_LEVEL_HIGH + [21:21] + read-write + + + GPIO29_LEVEL_LOW + [20:20] + read-write + + + GPIO28_EDGE_HIGH + [19:19] + read-write + + + GPIO28_EDGE_LOW + [18:18] + read-write + + + GPIO28_LEVEL_HIGH + [17:17] + read-write + + + GPIO28_LEVEL_LOW + [16:16] + read-write + + + GPIO27_EDGE_HIGH + [15:15] + read-write + + + GPIO27_EDGE_LOW + [14:14] + read-write + + + GPIO27_LEVEL_HIGH + [13:13] + read-write + + + GPIO27_LEVEL_LOW + [12:12] + read-write + + + GPIO26_EDGE_HIGH + [11:11] + read-write + + + GPIO26_EDGE_LOW + [10:10] + read-write + + + GPIO26_LEVEL_HIGH + [9:9] + read-write + + + GPIO26_LEVEL_LOW + [8:8] + read-write + + + GPIO25_EDGE_HIGH + [7:7] + read-write + + + GPIO25_EDGE_LOW + [6:6] + read-write + + + GPIO25_LEVEL_HIGH + [5:5] + read-write + + + GPIO25_LEVEL_LOW + [4:4] + read-write + + + GPIO24_EDGE_HIGH + [3:3] + read-write + + + GPIO24_EDGE_LOW + [2:2] + read-write + + + GPIO24_LEVEL_HIGH + [1:1] + read-write + + + GPIO24_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTF0 + Interrupt Force for proc1 + 0x0140 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-write + + + GPIO7_EDGE_LOW + [30:30] + read-write + + + GPIO7_LEVEL_HIGH + [29:29] + read-write + + + GPIO7_LEVEL_LOW + [28:28] + read-write + + + GPIO6_EDGE_HIGH + [27:27] + read-write + + + GPIO6_EDGE_LOW + [26:26] + read-write + + + GPIO6_LEVEL_HIGH + [25:25] + read-write + + + GPIO6_LEVEL_LOW + [24:24] + read-write + + + GPIO5_EDGE_HIGH + [23:23] + read-write + + + GPIO5_EDGE_LOW + [22:22] + read-write + + + GPIO5_LEVEL_HIGH + [21:21] + read-write + + + GPIO5_LEVEL_LOW + [20:20] + read-write + + + GPIO4_EDGE_HIGH + [19:19] + read-write + + + GPIO4_EDGE_LOW + [18:18] + read-write + + + GPIO4_LEVEL_HIGH + [17:17] + read-write + + + GPIO4_LEVEL_LOW + [16:16] + read-write + + + GPIO3_EDGE_HIGH + [15:15] + read-write + + + GPIO3_EDGE_LOW + [14:14] + read-write + + + GPIO3_LEVEL_HIGH + [13:13] + read-write + + + GPIO3_LEVEL_LOW + [12:12] + read-write + + + GPIO2_EDGE_HIGH + [11:11] + read-write + + + GPIO2_EDGE_LOW + [10:10] + read-write + + + GPIO2_LEVEL_HIGH + [9:9] + read-write + + + GPIO2_LEVEL_LOW + [8:8] + read-write + + + GPIO1_EDGE_HIGH + [7:7] + read-write + + + GPIO1_EDGE_LOW + [6:6] + read-write + + + GPIO1_LEVEL_HIGH + [5:5] + read-write + + + GPIO1_LEVEL_LOW + [4:4] + read-write + + + GPIO0_EDGE_HIGH + [3:3] + read-write + + + GPIO0_EDGE_LOW + [2:2] + read-write + + + GPIO0_LEVEL_HIGH + [1:1] + read-write + + + GPIO0_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTF1 + Interrupt Force for proc1 + 0x0144 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-write + + + GPIO15_EDGE_LOW + [30:30] + read-write + + + GPIO15_LEVEL_HIGH + [29:29] + read-write + + + GPIO15_LEVEL_LOW + [28:28] + read-write + + + GPIO14_EDGE_HIGH + [27:27] + read-write + + + GPIO14_EDGE_LOW + [26:26] + read-write + + + GPIO14_LEVEL_HIGH + [25:25] + read-write + + + GPIO14_LEVEL_LOW + [24:24] + read-write + + + GPIO13_EDGE_HIGH + [23:23] + read-write + + + GPIO13_EDGE_LOW + [22:22] + read-write + + + GPIO13_LEVEL_HIGH + [21:21] + read-write + + + GPIO13_LEVEL_LOW + [20:20] + read-write + + + GPIO12_EDGE_HIGH + [19:19] + read-write + + + GPIO12_EDGE_LOW + [18:18] + read-write + + + GPIO12_LEVEL_HIGH + [17:17] + read-write + + + GPIO12_LEVEL_LOW + [16:16] + read-write + + + GPIO11_EDGE_HIGH + [15:15] + read-write + + + GPIO11_EDGE_LOW + [14:14] + read-write + + + GPIO11_LEVEL_HIGH + [13:13] + read-write + + + GPIO11_LEVEL_LOW + [12:12] + read-write + + + GPIO10_EDGE_HIGH + [11:11] + read-write + + + GPIO10_EDGE_LOW + [10:10] + read-write + + + GPIO10_LEVEL_HIGH + [9:9] + read-write + + + GPIO10_LEVEL_LOW + [8:8] + read-write + + + GPIO9_EDGE_HIGH + [7:7] + read-write + + + GPIO9_EDGE_LOW + [6:6] + read-write + + + GPIO9_LEVEL_HIGH + [5:5] + read-write + + + GPIO9_LEVEL_LOW + [4:4] + read-write + + + GPIO8_EDGE_HIGH + [3:3] + read-write + + + GPIO8_EDGE_LOW + [2:2] + read-write + + + GPIO8_LEVEL_HIGH + [1:1] + read-write + + + GPIO8_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTF2 + Interrupt Force for proc1 + 0x0148 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-write + + + GPIO23_EDGE_LOW + [30:30] + read-write + + + GPIO23_LEVEL_HIGH + [29:29] + read-write + + + GPIO23_LEVEL_LOW + [28:28] + read-write + + + GPIO22_EDGE_HIGH + [27:27] + read-write + + + GPIO22_EDGE_LOW + [26:26] + read-write + + + GPIO22_LEVEL_HIGH + [25:25] + read-write + + + GPIO22_LEVEL_LOW + [24:24] + read-write + + + GPIO21_EDGE_HIGH + [23:23] + read-write + + + GPIO21_EDGE_LOW + [22:22] + read-write + + + GPIO21_LEVEL_HIGH + [21:21] + read-write + + + GPIO21_LEVEL_LOW + [20:20] + read-write + + + GPIO20_EDGE_HIGH + [19:19] + read-write + + + GPIO20_EDGE_LOW + [18:18] + read-write + + + GPIO20_LEVEL_HIGH + [17:17] + read-write + + + GPIO20_LEVEL_LOW + [16:16] + read-write + + + GPIO19_EDGE_HIGH + [15:15] + read-write + + + GPIO19_EDGE_LOW + [14:14] + read-write + + + GPIO19_LEVEL_HIGH + [13:13] + read-write + + + GPIO19_LEVEL_LOW + [12:12] + read-write + + + GPIO18_EDGE_HIGH + [11:11] + read-write + + + GPIO18_EDGE_LOW + [10:10] + read-write + + + GPIO18_LEVEL_HIGH + [9:9] + read-write + + + GPIO18_LEVEL_LOW + [8:8] + read-write + + + GPIO17_EDGE_HIGH + [7:7] + read-write + + + GPIO17_EDGE_LOW + [6:6] + read-write + + + GPIO17_LEVEL_HIGH + [5:5] + read-write + + + GPIO17_LEVEL_LOW + [4:4] + read-write + + + GPIO16_EDGE_HIGH + [3:3] + read-write + + + GPIO16_EDGE_LOW + [2:2] + read-write + + + GPIO16_LEVEL_HIGH + [1:1] + read-write + + + GPIO16_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTF3 + Interrupt Force for proc1 + 0x014c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-write + + + GPIO29_EDGE_LOW + [22:22] + read-write + + + GPIO29_LEVEL_HIGH + [21:21] + read-write + + + GPIO29_LEVEL_LOW + [20:20] + read-write + + + GPIO28_EDGE_HIGH + [19:19] + read-write + + + GPIO28_EDGE_LOW + [18:18] + read-write + + + GPIO28_LEVEL_HIGH + [17:17] + read-write + + + GPIO28_LEVEL_LOW + [16:16] + read-write + + + GPIO27_EDGE_HIGH + [15:15] + read-write + + + GPIO27_EDGE_LOW + [14:14] + read-write + + + GPIO27_LEVEL_HIGH + [13:13] + read-write + + + GPIO27_LEVEL_LOW + [12:12] + read-write + + + GPIO26_EDGE_HIGH + [11:11] + read-write + + + GPIO26_EDGE_LOW + [10:10] + read-write + + + GPIO26_LEVEL_HIGH + [9:9] + read-write + + + GPIO26_LEVEL_LOW + [8:8] + read-write + + + GPIO25_EDGE_HIGH + [7:7] + read-write + + + GPIO25_EDGE_LOW + [6:6] + read-write + + + GPIO25_LEVEL_HIGH + [5:5] + read-write + + + GPIO25_LEVEL_LOW + [4:4] + read-write + + + GPIO24_EDGE_HIGH + [3:3] + read-write + + + GPIO24_EDGE_LOW + [2:2] + read-write + + + GPIO24_LEVEL_HIGH + [1:1] + read-write + + + GPIO24_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTS0 + Interrupt status after masking & forcing for proc1 + 0x0150 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-only + + + GPIO7_EDGE_LOW + [30:30] + read-only + + + GPIO7_LEVEL_HIGH + [29:29] + read-only + + + GPIO7_LEVEL_LOW + [28:28] + read-only + + + GPIO6_EDGE_HIGH + [27:27] + read-only + + + GPIO6_EDGE_LOW + [26:26] + read-only + + + GPIO6_LEVEL_HIGH + [25:25] + read-only + + + GPIO6_LEVEL_LOW + [24:24] + read-only + + + GPIO5_EDGE_HIGH + [23:23] + read-only + + + GPIO5_EDGE_LOW + [22:22] + read-only + + + GPIO5_LEVEL_HIGH + [21:21] + read-only + + + GPIO5_LEVEL_LOW + [20:20] + read-only + + + GPIO4_EDGE_HIGH + [19:19] + read-only + + + GPIO4_EDGE_LOW + [18:18] + read-only + + + GPIO4_LEVEL_HIGH + [17:17] + read-only + + + GPIO4_LEVEL_LOW + [16:16] + read-only + + + GPIO3_EDGE_HIGH + [15:15] + read-only + + + GPIO3_EDGE_LOW + [14:14] + read-only + + + GPIO3_LEVEL_HIGH + [13:13] + read-only + + + GPIO3_LEVEL_LOW + [12:12] + read-only + + + GPIO2_EDGE_HIGH + [11:11] + read-only + + + GPIO2_EDGE_LOW + [10:10] + read-only + + + GPIO2_LEVEL_HIGH + [9:9] + read-only + + + GPIO2_LEVEL_LOW + [8:8] + read-only + + + GPIO1_EDGE_HIGH + [7:7] + read-only + + + GPIO1_EDGE_LOW + [6:6] + read-only + + + GPIO1_LEVEL_HIGH + [5:5] + read-only + + + GPIO1_LEVEL_LOW + [4:4] + read-only + + + GPIO0_EDGE_HIGH + [3:3] + read-only + + + GPIO0_EDGE_LOW + [2:2] + read-only + + + GPIO0_LEVEL_HIGH + [1:1] + read-only + + + GPIO0_LEVEL_LOW + [0:0] + read-only + + + + + PROC1_INTS1 + Interrupt status after masking & forcing for proc1 + 0x0154 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-only + + + GPIO15_EDGE_LOW + [30:30] + read-only + + + GPIO15_LEVEL_HIGH + [29:29] + read-only + + + GPIO15_LEVEL_LOW + [28:28] + read-only + + + GPIO14_EDGE_HIGH + [27:27] + read-only + + + GPIO14_EDGE_LOW + [26:26] + read-only + + + GPIO14_LEVEL_HIGH + [25:25] + read-only + + + GPIO14_LEVEL_LOW + [24:24] + read-only + + + GPIO13_EDGE_HIGH + [23:23] + read-only + + + GPIO13_EDGE_LOW + [22:22] + read-only + + + GPIO13_LEVEL_HIGH + [21:21] + read-only + + + GPIO13_LEVEL_LOW + [20:20] + read-only + + + GPIO12_EDGE_HIGH + [19:19] + read-only + + + GPIO12_EDGE_LOW + [18:18] + read-only + + + GPIO12_LEVEL_HIGH + [17:17] + read-only + + + GPIO12_LEVEL_LOW + [16:16] + read-only + + + GPIO11_EDGE_HIGH + [15:15] + read-only + + + GPIO11_EDGE_LOW + [14:14] + read-only + + + GPIO11_LEVEL_HIGH + [13:13] + read-only + + + GPIO11_LEVEL_LOW + [12:12] + read-only + + + GPIO10_EDGE_HIGH + [11:11] + read-only + + + GPIO10_EDGE_LOW + [10:10] + read-only + + + GPIO10_LEVEL_HIGH + [9:9] + read-only + + + GPIO10_LEVEL_LOW + [8:8] + read-only + + + GPIO9_EDGE_HIGH + [7:7] + read-only + + + GPIO9_EDGE_LOW + [6:6] + read-only + + + GPIO9_LEVEL_HIGH + [5:5] + read-only + + + GPIO9_LEVEL_LOW + [4:4] + read-only + + + GPIO8_EDGE_HIGH + [3:3] + read-only + + + GPIO8_EDGE_LOW + [2:2] + read-only + + + GPIO8_LEVEL_HIGH + [1:1] + read-only + + + GPIO8_LEVEL_LOW + [0:0] + read-only + + + + + PROC1_INTS2 + Interrupt status after masking & forcing for proc1 + 0x0158 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-only + + + GPIO23_EDGE_LOW + [30:30] + read-only + + + GPIO23_LEVEL_HIGH + [29:29] + read-only + + + GPIO23_LEVEL_LOW + [28:28] + read-only + + + GPIO22_EDGE_HIGH + [27:27] + read-only + + + GPIO22_EDGE_LOW + [26:26] + read-only + + + GPIO22_LEVEL_HIGH + [25:25] + read-only + + + GPIO22_LEVEL_LOW + [24:24] + read-only + + + GPIO21_EDGE_HIGH + [23:23] + read-only + + + GPIO21_EDGE_LOW + [22:22] + read-only + + + GPIO21_LEVEL_HIGH + [21:21] + read-only + + + GPIO21_LEVEL_LOW + [20:20] + read-only + + + GPIO20_EDGE_HIGH + [19:19] + read-only + + + GPIO20_EDGE_LOW + [18:18] + read-only + + + GPIO20_LEVEL_HIGH + [17:17] + read-only + + + GPIO20_LEVEL_LOW + [16:16] + read-only + + + GPIO19_EDGE_HIGH + [15:15] + read-only + + + GPIO19_EDGE_LOW + [14:14] + read-only + + + GPIO19_LEVEL_HIGH + [13:13] + read-only + + + GPIO19_LEVEL_LOW + [12:12] + read-only + + + GPIO18_EDGE_HIGH + [11:11] + read-only + + + GPIO18_EDGE_LOW + [10:10] + read-only + + + GPIO18_LEVEL_HIGH + [9:9] + read-only + + + GPIO18_LEVEL_LOW + [8:8] + read-only + + + GPIO17_EDGE_HIGH + [7:7] + read-only + + + GPIO17_EDGE_LOW + [6:6] + read-only + + + GPIO17_LEVEL_HIGH + [5:5] + read-only + + + GPIO17_LEVEL_LOW + [4:4] + read-only + + + GPIO16_EDGE_HIGH + [3:3] + read-only + + + GPIO16_EDGE_LOW + [2:2] + read-only + + + GPIO16_LEVEL_HIGH + [1:1] + read-only + + + GPIO16_LEVEL_LOW + [0:0] + read-only + + + + + PROC1_INTS3 + Interrupt status after masking & forcing for proc1 + 0x015c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-only + + + GPIO29_EDGE_LOW + [22:22] + read-only + + + GPIO29_LEVEL_HIGH + [21:21] + read-only + + + GPIO29_LEVEL_LOW + [20:20] + read-only + + + GPIO28_EDGE_HIGH + [19:19] + read-only + + + GPIO28_EDGE_LOW + [18:18] + read-only + + + GPIO28_LEVEL_HIGH + [17:17] + read-only + + + GPIO28_LEVEL_LOW + [16:16] + read-only + + + GPIO27_EDGE_HIGH + [15:15] + read-only + + + GPIO27_EDGE_LOW + [14:14] + read-only + + + GPIO27_LEVEL_HIGH + [13:13] + read-only + + + GPIO27_LEVEL_LOW + [12:12] + read-only + + + GPIO26_EDGE_HIGH + [11:11] + read-only + + + GPIO26_EDGE_LOW + [10:10] + read-only + + + GPIO26_LEVEL_HIGH + [9:9] + read-only + + + GPIO26_LEVEL_LOW + [8:8] + read-only + + + GPIO25_EDGE_HIGH + [7:7] + read-only + + + GPIO25_EDGE_LOW + [6:6] + read-only + + + GPIO25_LEVEL_HIGH + [5:5] + read-only + + + GPIO25_LEVEL_LOW + [4:4] + read-only + + + GPIO24_EDGE_HIGH + [3:3] + read-only + + + GPIO24_EDGE_LOW + [2:2] + read-only + + + GPIO24_LEVEL_HIGH + [1:1] + read-only + + + GPIO24_LEVEL_LOW + [0:0] + read-only + + + + + DORMANT_WAKE_INTE0 + Interrupt Enable for dormant_wake + 0x0160 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-write + + + GPIO7_EDGE_LOW + [30:30] + read-write + + + GPIO7_LEVEL_HIGH + [29:29] + read-write + + + GPIO7_LEVEL_LOW + [28:28] + read-write + + + GPIO6_EDGE_HIGH + [27:27] + read-write + + + GPIO6_EDGE_LOW + [26:26] + read-write + + + GPIO6_LEVEL_HIGH + [25:25] + read-write + + + GPIO6_LEVEL_LOW + [24:24] + read-write + + + GPIO5_EDGE_HIGH + [23:23] + read-write + + + GPIO5_EDGE_LOW + [22:22] + read-write + + + GPIO5_LEVEL_HIGH + [21:21] + read-write + + + GPIO5_LEVEL_LOW + [20:20] + read-write + + + GPIO4_EDGE_HIGH + [19:19] + read-write + + + GPIO4_EDGE_LOW + [18:18] + read-write + + + GPIO4_LEVEL_HIGH + [17:17] + read-write + + + GPIO4_LEVEL_LOW + [16:16] + read-write + + + GPIO3_EDGE_HIGH + [15:15] + read-write + + + GPIO3_EDGE_LOW + [14:14] + read-write + + + GPIO3_LEVEL_HIGH + [13:13] + read-write + + + GPIO3_LEVEL_LOW + [12:12] + read-write + + + GPIO2_EDGE_HIGH + [11:11] + read-write + + + GPIO2_EDGE_LOW + [10:10] + read-write + + + GPIO2_LEVEL_HIGH + [9:9] + read-write + + + GPIO2_LEVEL_LOW + [8:8] + read-write + + + GPIO1_EDGE_HIGH + [7:7] + read-write + + + GPIO1_EDGE_LOW + [6:6] + read-write + + + GPIO1_LEVEL_HIGH + [5:5] + read-write + + + GPIO1_LEVEL_LOW + [4:4] + read-write + + + GPIO0_EDGE_HIGH + [3:3] + read-write + + + GPIO0_EDGE_LOW + [2:2] + read-write + + + GPIO0_LEVEL_HIGH + [1:1] + read-write + + + GPIO0_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTE1 + Interrupt Enable for dormant_wake + 0x0164 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-write + + + GPIO15_EDGE_LOW + [30:30] + read-write + + + GPIO15_LEVEL_HIGH + [29:29] + read-write + + + GPIO15_LEVEL_LOW + [28:28] + read-write + + + GPIO14_EDGE_HIGH + [27:27] + read-write + + + GPIO14_EDGE_LOW + [26:26] + read-write + + + GPIO14_LEVEL_HIGH + [25:25] + read-write + + + GPIO14_LEVEL_LOW + [24:24] + read-write + + + GPIO13_EDGE_HIGH + [23:23] + read-write + + + GPIO13_EDGE_LOW + [22:22] + read-write + + + GPIO13_LEVEL_HIGH + [21:21] + read-write + + + GPIO13_LEVEL_LOW + [20:20] + read-write + + + GPIO12_EDGE_HIGH + [19:19] + read-write + + + GPIO12_EDGE_LOW + [18:18] + read-write + + + GPIO12_LEVEL_HIGH + [17:17] + read-write + + + GPIO12_LEVEL_LOW + [16:16] + read-write + + + GPIO11_EDGE_HIGH + [15:15] + read-write + + + GPIO11_EDGE_LOW + [14:14] + read-write + + + GPIO11_LEVEL_HIGH + [13:13] + read-write + + + GPIO11_LEVEL_LOW + [12:12] + read-write + + + GPIO10_EDGE_HIGH + [11:11] + read-write + + + GPIO10_EDGE_LOW + [10:10] + read-write + + + GPIO10_LEVEL_HIGH + [9:9] + read-write + + + GPIO10_LEVEL_LOW + [8:8] + read-write + + + GPIO9_EDGE_HIGH + [7:7] + read-write + + + GPIO9_EDGE_LOW + [6:6] + read-write + + + GPIO9_LEVEL_HIGH + [5:5] + read-write + + + GPIO9_LEVEL_LOW + [4:4] + read-write + + + GPIO8_EDGE_HIGH + [3:3] + read-write + + + GPIO8_EDGE_LOW + [2:2] + read-write + + + GPIO8_LEVEL_HIGH + [1:1] + read-write + + + GPIO8_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTE2 + Interrupt Enable for dormant_wake + 0x0168 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-write + + + GPIO23_EDGE_LOW + [30:30] + read-write + + + GPIO23_LEVEL_HIGH + [29:29] + read-write + + + GPIO23_LEVEL_LOW + [28:28] + read-write + + + GPIO22_EDGE_HIGH + [27:27] + read-write + + + GPIO22_EDGE_LOW + [26:26] + read-write + + + GPIO22_LEVEL_HIGH + [25:25] + read-write + + + GPIO22_LEVEL_LOW + [24:24] + read-write + + + GPIO21_EDGE_HIGH + [23:23] + read-write + + + GPIO21_EDGE_LOW + [22:22] + read-write + + + GPIO21_LEVEL_HIGH + [21:21] + read-write + + + GPIO21_LEVEL_LOW + [20:20] + read-write + + + GPIO20_EDGE_HIGH + [19:19] + read-write + + + GPIO20_EDGE_LOW + [18:18] + read-write + + + GPIO20_LEVEL_HIGH + [17:17] + read-write + + + GPIO20_LEVEL_LOW + [16:16] + read-write + + + GPIO19_EDGE_HIGH + [15:15] + read-write + + + GPIO19_EDGE_LOW + [14:14] + read-write + + + GPIO19_LEVEL_HIGH + [13:13] + read-write + + + GPIO19_LEVEL_LOW + [12:12] + read-write + + + GPIO18_EDGE_HIGH + [11:11] + read-write + + + GPIO18_EDGE_LOW + [10:10] + read-write + + + GPIO18_LEVEL_HIGH + [9:9] + read-write + + + GPIO18_LEVEL_LOW + [8:8] + read-write + + + GPIO17_EDGE_HIGH + [7:7] + read-write + + + GPIO17_EDGE_LOW + [6:6] + read-write + + + GPIO17_LEVEL_HIGH + [5:5] + read-write + + + GPIO17_LEVEL_LOW + [4:4] + read-write + + + GPIO16_EDGE_HIGH + [3:3] + read-write + + + GPIO16_EDGE_LOW + [2:2] + read-write + + + GPIO16_LEVEL_HIGH + [1:1] + read-write + + + GPIO16_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTE3 + Interrupt Enable for dormant_wake + 0x016c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-write + + + GPIO29_EDGE_LOW + [22:22] + read-write + + + GPIO29_LEVEL_HIGH + [21:21] + read-write + + + GPIO29_LEVEL_LOW + [20:20] + read-write + + + GPIO28_EDGE_HIGH + [19:19] + read-write + + + GPIO28_EDGE_LOW + [18:18] + read-write + + + GPIO28_LEVEL_HIGH + [17:17] + read-write + + + GPIO28_LEVEL_LOW + [16:16] + read-write + + + GPIO27_EDGE_HIGH + [15:15] + read-write + + + GPIO27_EDGE_LOW + [14:14] + read-write + + + GPIO27_LEVEL_HIGH + [13:13] + read-write + + + GPIO27_LEVEL_LOW + [12:12] + read-write + + + GPIO26_EDGE_HIGH + [11:11] + read-write + + + GPIO26_EDGE_LOW + [10:10] + read-write + + + GPIO26_LEVEL_HIGH + [9:9] + read-write + + + GPIO26_LEVEL_LOW + [8:8] + read-write + + + GPIO25_EDGE_HIGH + [7:7] + read-write + + + GPIO25_EDGE_LOW + [6:6] + read-write + + + GPIO25_LEVEL_HIGH + [5:5] + read-write + + + GPIO25_LEVEL_LOW + [4:4] + read-write + + + GPIO24_EDGE_HIGH + [3:3] + read-write + + + GPIO24_EDGE_LOW + [2:2] + read-write + + + GPIO24_LEVEL_HIGH + [1:1] + read-write + + + GPIO24_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTF0 + Interrupt Force for dormant_wake + 0x0170 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-write + + + GPIO7_EDGE_LOW + [30:30] + read-write + + + GPIO7_LEVEL_HIGH + [29:29] + read-write + + + GPIO7_LEVEL_LOW + [28:28] + read-write + + + GPIO6_EDGE_HIGH + [27:27] + read-write + + + GPIO6_EDGE_LOW + [26:26] + read-write + + + GPIO6_LEVEL_HIGH + [25:25] + read-write + + + GPIO6_LEVEL_LOW + [24:24] + read-write + + + GPIO5_EDGE_HIGH + [23:23] + read-write + + + GPIO5_EDGE_LOW + [22:22] + read-write + + + GPIO5_LEVEL_HIGH + [21:21] + read-write + + + GPIO5_LEVEL_LOW + [20:20] + read-write + + + GPIO4_EDGE_HIGH + [19:19] + read-write + + + GPIO4_EDGE_LOW + [18:18] + read-write + + + GPIO4_LEVEL_HIGH + [17:17] + read-write + + + GPIO4_LEVEL_LOW + [16:16] + read-write + + + GPIO3_EDGE_HIGH + [15:15] + read-write + + + GPIO3_EDGE_LOW + [14:14] + read-write + + + GPIO3_LEVEL_HIGH + [13:13] + read-write + + + GPIO3_LEVEL_LOW + [12:12] + read-write + + + GPIO2_EDGE_HIGH + [11:11] + read-write + + + GPIO2_EDGE_LOW + [10:10] + read-write + + + GPIO2_LEVEL_HIGH + [9:9] + read-write + + + GPIO2_LEVEL_LOW + [8:8] + read-write + + + GPIO1_EDGE_HIGH + [7:7] + read-write + + + GPIO1_EDGE_LOW + [6:6] + read-write + + + GPIO1_LEVEL_HIGH + [5:5] + read-write + + + GPIO1_LEVEL_LOW + [4:4] + read-write + + + GPIO0_EDGE_HIGH + [3:3] + read-write + + + GPIO0_EDGE_LOW + [2:2] + read-write + + + GPIO0_LEVEL_HIGH + [1:1] + read-write + + + GPIO0_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTF1 + Interrupt Force for dormant_wake + 0x0174 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-write + + + GPIO15_EDGE_LOW + [30:30] + read-write + + + GPIO15_LEVEL_HIGH + [29:29] + read-write + + + GPIO15_LEVEL_LOW + [28:28] + read-write + + + GPIO14_EDGE_HIGH + [27:27] + read-write + + + GPIO14_EDGE_LOW + [26:26] + read-write + + + GPIO14_LEVEL_HIGH + [25:25] + read-write + + + GPIO14_LEVEL_LOW + [24:24] + read-write + + + GPIO13_EDGE_HIGH + [23:23] + read-write + + + GPIO13_EDGE_LOW + [22:22] + read-write + + + GPIO13_LEVEL_HIGH + [21:21] + read-write + + + GPIO13_LEVEL_LOW + [20:20] + read-write + + + GPIO12_EDGE_HIGH + [19:19] + read-write + + + GPIO12_EDGE_LOW + [18:18] + read-write + + + GPIO12_LEVEL_HIGH + [17:17] + read-write + + + GPIO12_LEVEL_LOW + [16:16] + read-write + + + GPIO11_EDGE_HIGH + [15:15] + read-write + + + GPIO11_EDGE_LOW + [14:14] + read-write + + + GPIO11_LEVEL_HIGH + [13:13] + read-write + + + GPIO11_LEVEL_LOW + [12:12] + read-write + + + GPIO10_EDGE_HIGH + [11:11] + read-write + + + GPIO10_EDGE_LOW + [10:10] + read-write + + + GPIO10_LEVEL_HIGH + [9:9] + read-write + + + GPIO10_LEVEL_LOW + [8:8] + read-write + + + GPIO9_EDGE_HIGH + [7:7] + read-write + + + GPIO9_EDGE_LOW + [6:6] + read-write + + + GPIO9_LEVEL_HIGH + [5:5] + read-write + + + GPIO9_LEVEL_LOW + [4:4] + read-write + + + GPIO8_EDGE_HIGH + [3:3] + read-write + + + GPIO8_EDGE_LOW + [2:2] + read-write + + + GPIO8_LEVEL_HIGH + [1:1] + read-write + + + GPIO8_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTF2 + Interrupt Force for dormant_wake + 0x0178 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-write + + + GPIO23_EDGE_LOW + [30:30] + read-write + + + GPIO23_LEVEL_HIGH + [29:29] + read-write + + + GPIO23_LEVEL_LOW + [28:28] + read-write + + + GPIO22_EDGE_HIGH + [27:27] + read-write + + + GPIO22_EDGE_LOW + [26:26] + read-write + + + GPIO22_LEVEL_HIGH + [25:25] + read-write + + + GPIO22_LEVEL_LOW + [24:24] + read-write + + + GPIO21_EDGE_HIGH + [23:23] + read-write + + + GPIO21_EDGE_LOW + [22:22] + read-write + + + GPIO21_LEVEL_HIGH + [21:21] + read-write + + + GPIO21_LEVEL_LOW + [20:20] + read-write + + + GPIO20_EDGE_HIGH + [19:19] + read-write + + + GPIO20_EDGE_LOW + [18:18] + read-write + + + GPIO20_LEVEL_HIGH + [17:17] + read-write + + + GPIO20_LEVEL_LOW + [16:16] + read-write + + + GPIO19_EDGE_HIGH + [15:15] + read-write + + + GPIO19_EDGE_LOW + [14:14] + read-write + + + GPIO19_LEVEL_HIGH + [13:13] + read-write + + + GPIO19_LEVEL_LOW + [12:12] + read-write + + + GPIO18_EDGE_HIGH + [11:11] + read-write + + + GPIO18_EDGE_LOW + [10:10] + read-write + + + GPIO18_LEVEL_HIGH + [9:9] + read-write + + + GPIO18_LEVEL_LOW + [8:8] + read-write + + + GPIO17_EDGE_HIGH + [7:7] + read-write + + + GPIO17_EDGE_LOW + [6:6] + read-write + + + GPIO17_LEVEL_HIGH + [5:5] + read-write + + + GPIO17_LEVEL_LOW + [4:4] + read-write + + + GPIO16_EDGE_HIGH + [3:3] + read-write + + + GPIO16_EDGE_LOW + [2:2] + read-write + + + GPIO16_LEVEL_HIGH + [1:1] + read-write + + + GPIO16_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTF3 + Interrupt Force for dormant_wake + 0x017c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-write + + + GPIO29_EDGE_LOW + [22:22] + read-write + + + GPIO29_LEVEL_HIGH + [21:21] + read-write + + + GPIO29_LEVEL_LOW + [20:20] + read-write + + + GPIO28_EDGE_HIGH + [19:19] + read-write + + + GPIO28_EDGE_LOW + [18:18] + read-write + + + GPIO28_LEVEL_HIGH + [17:17] + read-write + + + GPIO28_LEVEL_LOW + [16:16] + read-write + + + GPIO27_EDGE_HIGH + [15:15] + read-write + + + GPIO27_EDGE_LOW + [14:14] + read-write + + + GPIO27_LEVEL_HIGH + [13:13] + read-write + + + GPIO27_LEVEL_LOW + [12:12] + read-write + + + GPIO26_EDGE_HIGH + [11:11] + read-write + + + GPIO26_EDGE_LOW + [10:10] + read-write + + + GPIO26_LEVEL_HIGH + [9:9] + read-write + + + GPIO26_LEVEL_LOW + [8:8] + read-write + + + GPIO25_EDGE_HIGH + [7:7] + read-write + + + GPIO25_EDGE_LOW + [6:6] + read-write + + + GPIO25_LEVEL_HIGH + [5:5] + read-write + + + GPIO25_LEVEL_LOW + [4:4] + read-write + + + GPIO24_EDGE_HIGH + [3:3] + read-write + + + GPIO24_EDGE_LOW + [2:2] + read-write + + + GPIO24_LEVEL_HIGH + [1:1] + read-write + + + GPIO24_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTS0 + Interrupt status after masking & forcing for dormant_wake + 0x0180 + 0x00000000 + + + GPIO7_EDGE_HIGH + [31:31] + read-only + + + GPIO7_EDGE_LOW + [30:30] + read-only + + + GPIO7_LEVEL_HIGH + [29:29] + read-only + + + GPIO7_LEVEL_LOW + [28:28] + read-only + + + GPIO6_EDGE_HIGH + [27:27] + read-only + + + GPIO6_EDGE_LOW + [26:26] + read-only + + + GPIO6_LEVEL_HIGH + [25:25] + read-only + + + GPIO6_LEVEL_LOW + [24:24] + read-only + + + GPIO5_EDGE_HIGH + [23:23] + read-only + + + GPIO5_EDGE_LOW + [22:22] + read-only + + + GPIO5_LEVEL_HIGH + [21:21] + read-only + + + GPIO5_LEVEL_LOW + [20:20] + read-only + + + GPIO4_EDGE_HIGH + [19:19] + read-only + + + GPIO4_EDGE_LOW + [18:18] + read-only + + + GPIO4_LEVEL_HIGH + [17:17] + read-only + + + GPIO4_LEVEL_LOW + [16:16] + read-only + + + GPIO3_EDGE_HIGH + [15:15] + read-only + + + GPIO3_EDGE_LOW + [14:14] + read-only + + + GPIO3_LEVEL_HIGH + [13:13] + read-only + + + GPIO3_LEVEL_LOW + [12:12] + read-only + + + GPIO2_EDGE_HIGH + [11:11] + read-only + + + GPIO2_EDGE_LOW + [10:10] + read-only + + + GPIO2_LEVEL_HIGH + [9:9] + read-only + + + GPIO2_LEVEL_LOW + [8:8] + read-only + + + GPIO1_EDGE_HIGH + [7:7] + read-only + + + GPIO1_EDGE_LOW + [6:6] + read-only + + + GPIO1_LEVEL_HIGH + [5:5] + read-only + + + GPIO1_LEVEL_LOW + [4:4] + read-only + + + GPIO0_EDGE_HIGH + [3:3] + read-only + + + GPIO0_EDGE_LOW + [2:2] + read-only + + + GPIO0_LEVEL_HIGH + [1:1] + read-only + + + GPIO0_LEVEL_LOW + [0:0] + read-only + + + + + DORMANT_WAKE_INTS1 + Interrupt status after masking & forcing for dormant_wake + 0x0184 + 0x00000000 + + + GPIO15_EDGE_HIGH + [31:31] + read-only + + + GPIO15_EDGE_LOW + [30:30] + read-only + + + GPIO15_LEVEL_HIGH + [29:29] + read-only + + + GPIO15_LEVEL_LOW + [28:28] + read-only + + + GPIO14_EDGE_HIGH + [27:27] + read-only + + + GPIO14_EDGE_LOW + [26:26] + read-only + + + GPIO14_LEVEL_HIGH + [25:25] + read-only + + + GPIO14_LEVEL_LOW + [24:24] + read-only + + + GPIO13_EDGE_HIGH + [23:23] + read-only + + + GPIO13_EDGE_LOW + [22:22] + read-only + + + GPIO13_LEVEL_HIGH + [21:21] + read-only + + + GPIO13_LEVEL_LOW + [20:20] + read-only + + + GPIO12_EDGE_HIGH + [19:19] + read-only + + + GPIO12_EDGE_LOW + [18:18] + read-only + + + GPIO12_LEVEL_HIGH + [17:17] + read-only + + + GPIO12_LEVEL_LOW + [16:16] + read-only + + + GPIO11_EDGE_HIGH + [15:15] + read-only + + + GPIO11_EDGE_LOW + [14:14] + read-only + + + GPIO11_LEVEL_HIGH + [13:13] + read-only + + + GPIO11_LEVEL_LOW + [12:12] + read-only + + + GPIO10_EDGE_HIGH + [11:11] + read-only + + + GPIO10_EDGE_LOW + [10:10] + read-only + + + GPIO10_LEVEL_HIGH + [9:9] + read-only + + + GPIO10_LEVEL_LOW + [8:8] + read-only + + + GPIO9_EDGE_HIGH + [7:7] + read-only + + + GPIO9_EDGE_LOW + [6:6] + read-only + + + GPIO9_LEVEL_HIGH + [5:5] + read-only + + + GPIO9_LEVEL_LOW + [4:4] + read-only + + + GPIO8_EDGE_HIGH + [3:3] + read-only + + + GPIO8_EDGE_LOW + [2:2] + read-only + + + GPIO8_LEVEL_HIGH + [1:1] + read-only + + + GPIO8_LEVEL_LOW + [0:0] + read-only + + + + + DORMANT_WAKE_INTS2 + Interrupt status after masking & forcing for dormant_wake + 0x0188 + 0x00000000 + + + GPIO23_EDGE_HIGH + [31:31] + read-only + + + GPIO23_EDGE_LOW + [30:30] + read-only + + + GPIO23_LEVEL_HIGH + [29:29] + read-only + + + GPIO23_LEVEL_LOW + [28:28] + read-only + + + GPIO22_EDGE_HIGH + [27:27] + read-only + + + GPIO22_EDGE_LOW + [26:26] + read-only + + + GPIO22_LEVEL_HIGH + [25:25] + read-only + + + GPIO22_LEVEL_LOW + [24:24] + read-only + + + GPIO21_EDGE_HIGH + [23:23] + read-only + + + GPIO21_EDGE_LOW + [22:22] + read-only + + + GPIO21_LEVEL_HIGH + [21:21] + read-only + + + GPIO21_LEVEL_LOW + [20:20] + read-only + + + GPIO20_EDGE_HIGH + [19:19] + read-only + + + GPIO20_EDGE_LOW + [18:18] + read-only + + + GPIO20_LEVEL_HIGH + [17:17] + read-only + + + GPIO20_LEVEL_LOW + [16:16] + read-only + + + GPIO19_EDGE_HIGH + [15:15] + read-only + + + GPIO19_EDGE_LOW + [14:14] + read-only + + + GPIO19_LEVEL_HIGH + [13:13] + read-only + + + GPIO19_LEVEL_LOW + [12:12] + read-only + + + GPIO18_EDGE_HIGH + [11:11] + read-only + + + GPIO18_EDGE_LOW + [10:10] + read-only + + + GPIO18_LEVEL_HIGH + [9:9] + read-only + + + GPIO18_LEVEL_LOW + [8:8] + read-only + + + GPIO17_EDGE_HIGH + [7:7] + read-only + + + GPIO17_EDGE_LOW + [6:6] + read-only + + + GPIO17_LEVEL_HIGH + [5:5] + read-only + + + GPIO17_LEVEL_LOW + [4:4] + read-only + + + GPIO16_EDGE_HIGH + [3:3] + read-only + + + GPIO16_EDGE_LOW + [2:2] + read-only + + + GPIO16_LEVEL_HIGH + [1:1] + read-only + + + GPIO16_LEVEL_LOW + [0:0] + read-only + + + + + DORMANT_WAKE_INTS3 + Interrupt status after masking & forcing for dormant_wake + 0x018c + 0x00000000 + + + GPIO29_EDGE_HIGH + [23:23] + read-only + + + GPIO29_EDGE_LOW + [22:22] + read-only + + + GPIO29_LEVEL_HIGH + [21:21] + read-only + + + GPIO29_LEVEL_LOW + [20:20] + read-only + + + GPIO28_EDGE_HIGH + [19:19] + read-only + + + GPIO28_EDGE_LOW + [18:18] + read-only + + + GPIO28_LEVEL_HIGH + [17:17] + read-only + + + GPIO28_LEVEL_LOW + [16:16] + read-only + + + GPIO27_EDGE_HIGH + [15:15] + read-only + + + GPIO27_EDGE_LOW + [14:14] + read-only + + + GPIO27_LEVEL_HIGH + [13:13] + read-only + + + GPIO27_LEVEL_LOW + [12:12] + read-only + + + GPIO26_EDGE_HIGH + [11:11] + read-only + + + GPIO26_EDGE_LOW + [10:10] + read-only + + + GPIO26_LEVEL_HIGH + [9:9] + read-only + + + GPIO26_LEVEL_LOW + [8:8] + read-only + + + GPIO25_EDGE_HIGH + [7:7] + read-only + + + GPIO25_EDGE_LOW + [6:6] + read-only + + + GPIO25_LEVEL_HIGH + [5:5] + read-only + + + GPIO25_LEVEL_LOW + [4:4] + read-only + + + GPIO24_EDGE_HIGH + [3:3] + read-only + + + GPIO24_EDGE_LOW + [2:2] + read-only + + + GPIO24_LEVEL_HIGH + [1:1] + read-only + + + GPIO24_LEVEL_LOW + [0:0] + read-only + + + + + + + IO_QSPI + 1 + 0x40018000 + 32 + + 0 + 0x1000 + registers + + + IO_IRQ_QSPI + 14 + + + + GPIO_QSPI_SCLK_STATUS + GPIO status + 0x0000 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO_QSPI_SCLK_CTRL + GPIO control including function select and overrides. + 0x0004 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + xip_sclk + 0 + + + sio_30 + 5 + + + null + 31 + + + + + + + GPIO_QSPI_SS_STATUS + GPIO status + 0x0008 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO_QSPI_SS_CTRL + GPIO control including function select and overrides. + 0x000c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + xip_ss_n + 0 + + + sio_31 + 5 + + + null + 31 + + + + + + + GPIO_QSPI_SD0_STATUS + GPIO status + 0x0010 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO_QSPI_SD0_CTRL + GPIO control including function select and overrides. + 0x0014 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + xip_sd0 + 0 + + + sio_32 + 5 + + + null + 31 + + + + + + + GPIO_QSPI_SD1_STATUS + GPIO status + 0x0018 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO_QSPI_SD1_CTRL + GPIO control including function select and overrides. + 0x001c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + xip_sd1 + 0 + + + sio_33 + 5 + + + null + 31 + + + + + + + GPIO_QSPI_SD2_STATUS + GPIO status + 0x0020 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO_QSPI_SD2_CTRL + GPIO control including function select and overrides. + 0x0024 + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + xip_sd2 + 0 + + + sio_34 + 5 + + + null + 31 + + + + + + + GPIO_QSPI_SD3_STATUS + GPIO status + 0x0028 + 0x00000000 + + + IRQTOPROC + interrupt to processors, after override is applied + [26:26] + read-only + + + IRQFROMPAD + interrupt from pad before override is applied + [24:24] + read-only + + + INTOPERI + input signal to peripheral, after override is applied + [19:19] + read-only + + + INFROMPAD + input signal from pad, before override is applied + [17:17] + read-only + + + OETOPAD + output enable to pad after register override is applied + [13:13] + read-only + + + OEFROMPERI + output enable from selected peripheral, before register override is applied + [12:12] + read-only + + + OUTTOPAD + output signal to pad after register override is applied + [9:9] + read-only + + + OUTFROMPERI + output signal from selected peripheral, before register override is applied + [8:8] + read-only + + + + + GPIO_QSPI_SD3_CTRL + GPIO control including function select and overrides. + 0x002c + 0x0000001f + + + IRQOVER + [29:28] + read-write + + + NORMAL + don't invert the interrupt + 0 + + + INVERT + invert the interrupt + 1 + + + LOW + drive interrupt low + 2 + + + HIGH + drive interrupt high + 3 + + + + + INOVER + [17:16] + read-write + + + NORMAL + don't invert the peri input + 0 + + + INVERT + invert the peri input + 1 + + + LOW + drive peri input low + 2 + + + HIGH + drive peri input high + 3 + + + + + OEOVER + [13:12] + read-write + + + NORMAL + drive output enable from peripheral signal selected by funcsel + 0 + + + INVERT + drive output enable from inverse of peripheral signal selected by funcsel + 1 + + + DISABLE + disable output + 2 + + + ENABLE + enable output + 3 + + + + + OUTOVER + [9:8] + read-write + + + NORMAL + drive output from peripheral signal selected by funcsel + 0 + + + INVERT + drive output from inverse of peripheral signal selected by funcsel + 1 + + + LOW + drive output low + 2 + + + HIGH + drive output high + 3 + + + + + FUNCSEL + 0-31 -> selects pin function according to the gpio table\n + 31 == NULL + [4:0] + read-write + + + xip_sd3 + 0 + + + sio_35 + 5 + + + null + 31 + + + + + + + INTR + Raw Interrupts + 0x0030 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-write + oneToClear + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-write + oneToClear + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-only + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-only + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-write + oneToClear + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-write + oneToClear + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-only + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-only + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-write + oneToClear + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-write + oneToClear + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-only + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-only + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-write + oneToClear + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-write + oneToClear + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-only + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-only + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-write + oneToClear + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-write + oneToClear + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-only + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-only + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-write + oneToClear + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-write + oneToClear + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-only + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-only + + + + + PROC0_INTE + Interrupt Enable for proc0 + 0x0034 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-write + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-write + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-write + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-write + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-write + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-write + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-write + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-write + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-write + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-write + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-write + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-write + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-write + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-write + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-write + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-write + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-write + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-write + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-write + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-write + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-write + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-write + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-write + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTF + Interrupt Force for proc0 + 0x0038 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-write + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-write + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-write + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-write + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-write + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-write + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-write + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-write + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-write + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-write + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-write + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-write + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-write + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-write + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-write + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-write + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-write + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-write + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-write + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-write + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-write + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-write + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-write + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-write + + + + + PROC0_INTS + Interrupt status after masking & forcing for proc0 + 0x003c + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-only + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-only + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-only + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-only + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-only + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-only + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-only + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-only + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-only + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-only + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-only + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-only + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-only + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-only + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-only + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-only + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-only + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-only + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-only + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-only + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-only + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-only + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-only + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-only + + + + + PROC1_INTE + Interrupt Enable for proc1 + 0x0040 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-write + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-write + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-write + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-write + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-write + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-write + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-write + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-write + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-write + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-write + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-write + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-write + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-write + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-write + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-write + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-write + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-write + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-write + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-write + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-write + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-write + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-write + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-write + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTF + Interrupt Force for proc1 + 0x0044 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-write + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-write + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-write + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-write + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-write + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-write + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-write + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-write + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-write + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-write + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-write + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-write + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-write + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-write + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-write + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-write + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-write + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-write + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-write + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-write + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-write + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-write + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-write + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-write + + + + + PROC1_INTS + Interrupt status after masking & forcing for proc1 + 0x0048 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-only + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-only + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-only + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-only + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-only + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-only + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-only + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-only + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-only + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-only + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-only + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-only + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-only + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-only + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-only + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-only + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-only + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-only + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-only + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-only + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-only + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-only + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-only + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-only + + + + + DORMANT_WAKE_INTE + Interrupt Enable for dormant_wake + 0x004c + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-write + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-write + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-write + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-write + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-write + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-write + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-write + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-write + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-write + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-write + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-write + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-write + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-write + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-write + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-write + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-write + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-write + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-write + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-write + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-write + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-write + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-write + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-write + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTF + Interrupt Force for dormant_wake + 0x0050 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-write + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-write + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-write + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-write + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-write + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-write + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-write + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-write + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-write + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-write + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-write + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-write + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-write + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-write + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-write + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-write + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-write + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-write + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-write + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-write + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-write + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-write + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-write + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-write + + + + + DORMANT_WAKE_INTS + Interrupt status after masking & forcing for dormant_wake + 0x0054 + 0x00000000 + + + GPIO_QSPI_SD3_EDGE_HIGH + [23:23] + read-only + + + GPIO_QSPI_SD3_EDGE_LOW + [22:22] + read-only + + + GPIO_QSPI_SD3_LEVEL_HIGH + [21:21] + read-only + + + GPIO_QSPI_SD3_LEVEL_LOW + [20:20] + read-only + + + GPIO_QSPI_SD2_EDGE_HIGH + [19:19] + read-only + + + GPIO_QSPI_SD2_EDGE_LOW + [18:18] + read-only + + + GPIO_QSPI_SD2_LEVEL_HIGH + [17:17] + read-only + + + GPIO_QSPI_SD2_LEVEL_LOW + [16:16] + read-only + + + GPIO_QSPI_SD1_EDGE_HIGH + [15:15] + read-only + + + GPIO_QSPI_SD1_EDGE_LOW + [14:14] + read-only + + + GPIO_QSPI_SD1_LEVEL_HIGH + [13:13] + read-only + + + GPIO_QSPI_SD1_LEVEL_LOW + [12:12] + read-only + + + GPIO_QSPI_SD0_EDGE_HIGH + [11:11] + read-only + + + GPIO_QSPI_SD0_EDGE_LOW + [10:10] + read-only + + + GPIO_QSPI_SD0_LEVEL_HIGH + [9:9] + read-only + + + GPIO_QSPI_SD0_LEVEL_LOW + [8:8] + read-only + + + GPIO_QSPI_SS_EDGE_HIGH + [7:7] + read-only + + + GPIO_QSPI_SS_EDGE_LOW + [6:6] + read-only + + + GPIO_QSPI_SS_LEVEL_HIGH + [5:5] + read-only + + + GPIO_QSPI_SS_LEVEL_LOW + [4:4] + read-only + + + GPIO_QSPI_SCLK_EDGE_HIGH + [3:3] + read-only + + + GPIO_QSPI_SCLK_EDGE_LOW + [2:2] + read-only + + + GPIO_QSPI_SCLK_LEVEL_HIGH + [1:1] + read-only + + + GPIO_QSPI_SCLK_LEVEL_LOW + [0:0] + read-only + + + + + + + PADS_BANK0 + 1 + 0x4001c000 + 32 + + 0 + 0x1000 + registers + + + + VOLTAGE_SELECT + Voltage select. Per bank control + 0x0000 + 0x00000000 + + + VOLTAGE_SELECT + [0:0] + read-write + + + 3v3 + Set voltage to 3.3V (DVDD >= 2V5) + 0 + + + 1v8 + Set voltage to 1.8V (DVDD <= 1V8) + 1 + + + + + + + GPIO0 + Pad control register + 0x0004 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO1 + Pad control register + 0x0008 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO2 + Pad control register + 0x000c + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO3 + Pad control register + 0x0010 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO4 + Pad control register + 0x0014 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO5 + Pad control register + 0x0018 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO6 + Pad control register + 0x001c + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO7 + Pad control register + 0x0020 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO8 + Pad control register + 0x0024 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO9 + Pad control register + 0x0028 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO10 + Pad control register + 0x002c + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO11 + Pad control register + 0x0030 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO12 + Pad control register + 0x0034 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO13 + Pad control register + 0x0038 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO14 + Pad control register + 0x003c + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO15 + Pad control register + 0x0040 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO16 + Pad control register + 0x0044 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO17 + Pad control register + 0x0048 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO18 + Pad control register + 0x004c + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO19 + Pad control register + 0x0050 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO20 + Pad control register + 0x0054 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO21 + Pad control register + 0x0058 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO22 + Pad control register + 0x005c + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO23 + Pad control register + 0x0060 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO24 + Pad control register + 0x0064 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO25 + Pad control register + 0x0068 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO26 + Pad control register + 0x006c + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO27 + Pad control register + 0x0070 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO28 + Pad control register + 0x0074 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO29 + Pad control register + 0x0078 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + SWCLK + Pad control register + 0x007c + 0x000000da + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + SWD + Pad control register + 0x0080 + 0x0000005a + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + + + PADS_QSPI + 1 + 0x40020000 + 32 + + 0 + 0x1000 + registers + + + + VOLTAGE_SELECT + Voltage select. Per bank control + 0x0000 + 0x00000000 + + + VOLTAGE_SELECT + [0:0] + read-write + + + 3v3 + Set voltage to 3.3V (DVDD >= 2V5) + 0 + + + 1v8 + Set voltage to 1.8V (DVDD <= 1V8) + 1 + + + + + + + GPIO_QSPI_SCLK + Pad control register + 0x0004 + 0x00000056 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO_QSPI_SD0 + Pad control register + 0x0008 + 0x00000052 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO_QSPI_SD1 + Pad control register + 0x000c + 0x00000052 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO_QSPI_SD2 + Pad control register + 0x0010 + 0x00000052 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO_QSPI_SD3 + Pad control register + 0x0014 + 0x00000052 + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + GPIO_QSPI_SS + Pad control register + 0x0018 + 0x0000005a + + + OD + Output disable. Has priority over output enable from peripherals + [7:7] + read-write + + + IE + Input enable + [6:6] + read-write + + + DRIVE + Drive strength. + [5:4] + read-write + + + 2mA + 0 + + + 4mA + 1 + + + 8mA + 2 + + + 12mA + 3 + + + + + PUE + Pull up enable + [3:3] + read-write + + + PDE + Pull down enable + [2:2] + read-write + + + SCHMITT + Enable schmitt trigger + [1:1] + read-write + + + SLEWFAST + Slew rate control. 1 = Fast, 0 = Slow + [0:0] + read-write + + + + + + + XOSC + 1 + Controls the crystal oscillator + 0x40024000 + 32 + + 0 + 0x1000 + registers + + + + CTRL + Crystal Oscillator Control + 0x0000 + 0x00000000 + + + ENABLE + On power-up this field is initialised to DISABLE and the chip runs from the ROSC.\n + If the chip has subsequently been programmed to run from the XOSC then setting this field to DISABLE may lock-up the chip. If this is a concern then run the clk_ref from the ROSC and enable the clk_sys RESUS feature.\n + The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator. + [23:12] + read-write + + + DISABLE + 3358 + + + ENABLE + 4011 + + + + + FREQ_RANGE + Frequency range. This resets to 0xAA0 and cannot be changed. + [11:0] + read-write + + + 1_15MHZ + 2720 + + + RESERVED_1 + 2721 + + + RESERVED_2 + 2722 + + + RESERVED_3 + 2723 + + + + + + + STATUS + Crystal Oscillator Status + 0x0004 + 0x00000000 + + + STABLE + Oscillator is running and stable + [31:31] + read-only + + + BADWRITE + An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or DORMANT + [24:24] + read-write + oneToClear + + + ENABLED + Oscillator is enabled but not necessarily running and stable, resets to 0 + [12:12] + read-only + + + FREQ_RANGE + The current frequency range setting, always reads 0 + [1:0] + read-only + + + 1_15MHZ + 0 + + + RESERVED_1 + 1 + + + RESERVED_2 + 2 + + + RESERVED_3 + 3 + + + + + + + DORMANT + Crystal Oscillator pause control\n + This is used to save power by pausing the XOSC\n + On power-up this field is initialised to WAKE\n + An invalid write will also select WAKE\n + WARNING: stop the PLLs before selecting dormant mode\n + WARNING: setup the irq before selecting dormant mode + 0x0008 + read-write + 0x00000000 + + + STARTUP + Controls the startup delay + 0x000c + 0x000000c4 + + + X4 + Multiplies the startup_delay by 4. This is of little value to the user given that the delay can be programmed directly. + [20:20] + read-write + + + DELAY + in multiples of 256*xtal_period. The reset value of 0xc4 corresponds to approx 50 000 cycles. + [13:0] + read-write + + + + + COUNT + A down counter running at the xosc frequency which counts to zero and stops.\n + To start the counter write a non-zero value.\n + Can be used for short software pauses when setting up time sensitive hardware. + 0x001c + 0x00000000 + + + COUNT + [7:0] + read-write + + + + + + + PLL_SYS + 1 + 0x40028000 + 32 + + 0 + 0x1000 + registers + + + + CS + Control and Status\n + GENERAL CONSTRAINTS:\n + Reference clock frequency min=5MHz, max=800MHz\n + Feedback divider min=16, max=320\n + VCO frequency min=750MHz, max=1600MHz + 0x0000 + 0x00000001 + + + LOCK + PLL is locked + [31:31] + read-only + + + BYPASS + Passes the reference clock to the output instead of the divided VCO. The VCO continues to run so the user can switch between the reference clock and the divided VCO but the output will glitch when doing so. + [8:8] + read-write + + + REFDIV + Divides the PLL input reference clock.\n + Behaviour is undefined for div=0.\n + PLL output will be unpredictable during refdiv changes, wait for lock=1 before using it. + [5:0] + read-write + + + + + PWR + Controls the PLL power modes. + 0x0004 + 0x0000002d + + + VCOPD + PLL VCO powerdown\n + To save power set high when PLL output not required or bypass=1. + [5:5] + read-write + + + POSTDIVPD + PLL post divider powerdown\n + To save power set high when PLL output not required or bypass=1. + [3:3] + read-write + + + DSMPD + PLL DSM powerdown\n + Nothing is achieved by setting this low. + [2:2] + read-write + + + PD + PLL powerdown\n + To save power set high when PLL output not required. + [0:0] + read-write + + + + + FBDIV_INT + Feedback divisor\n + (note: this PLL does not support fractional division) + 0x0008 + 0x00000000 + + + FBDIV_INT + see ctrl reg description for constraints + [11:0] + read-write + + + + + PRIM + Controls the PLL post dividers for the primary output\n + (note: this PLL does not have a secondary output)\n + the primary output is driven from VCO divided by postdiv1*postdiv2 + 0x000c + 0x00077000 + + + POSTDIV1 + divide by 1-7 + [18:16] + read-write + + + POSTDIV2 + divide by 1-7 + [14:12] + read-write + + + + + + + PLL_USB + 0x4002c000 + + + BUSCTRL + 1 + Register block for busfabric control signals and performance counters + 0x40030000 + 32 + + 0 + 0x1000 + registers + + + + BUS_PRIORITY + Set the priority of each master for bus arbitration. + 0x0000 + 0x00000000 + + + DMA_W + 0 - low priority, 1 - high priority + [12:12] + read-write + + + DMA_R + 0 - low priority, 1 - high priority + [8:8] + read-write + + + PROC1 + 0 - low priority, 1 - high priority + [4:4] + read-write + + + PROC0 + 0 - low priority, 1 - high priority + [0:0] + read-write + + + + + BUS_PRIORITY_ACK + Bus priority acknowledge + 0x0004 + 0x00000000 + + + BUS_PRIORITY_ACK + Goes to 1 once all arbiters have registered the new global priority levels.\n + Arbiters update their local priority when servicing a new nonsequential access.\n + In normal circumstances this will happen almost immediately. + [0:0] + read-only + + + + + PERFCTR0 + Bus fabric performance counter 0 + 0x0008 + 0x00000000 + + + PERFCTR0 + Busfabric saturating performance counter 0\n + Count some event signal from the busfabric arbiters.\n + Write any value to clear. Select an event to count using PERFSEL0 + [23:0] + read-write + oneToClear + + + + + PERFSEL0 + Bus fabric performance event select for PERFCTR0 + 0x000c + 0x0000001f + + + PERFSEL0 + Select an event for PERFCTR0. Count either contested accesses, or all accesses, on a downstream port of the main crossbar. + [4:0] + read-write + + + apb_contested + 0 + + + apb + 1 + + + fastperi_contested + 2 + + + fastperi + 3 + + + sram5_contested + 4 + + + sram5 + 5 + + + sram4_contested + 6 + + + sram4 + 7 + + + sram3_contested + 8 + + + sram3 + 9 + + + sram2_contested + 10 + + + sram2 + 11 + + + sram1_contested + 12 + + + sram1 + 13 + + + sram0_contested + 14 + + + sram0 + 15 + + + xip_main_contested + 16 + + + xip_main + 17 + + + rom_contested + 18 + + + rom + 19 + + + + + + + PERFCTR1 + Bus fabric performance counter 1 + 0x0010 + 0x00000000 + + + PERFCTR1 + Busfabric saturating performance counter 1\n + Count some event signal from the busfabric arbiters.\n + Write any value to clear. Select an event to count using PERFSEL1 + [23:0] + read-write + oneToClear + + + + + PERFSEL1 + Bus fabric performance event select for PERFCTR1 + 0x0014 + 0x0000001f + + + PERFSEL1 + Select an event for PERFCTR1. Count either contested accesses, or all accesses, on a downstream port of the main crossbar. + [4:0] + read-write + + + apb_contested + 0 + + + apb + 1 + + + fastperi_contested + 2 + + + fastperi + 3 + + + sram5_contested + 4 + + + sram5 + 5 + + + sram4_contested + 6 + + + sram4 + 7 + + + sram3_contested + 8 + + + sram3 + 9 + + + sram2_contested + 10 + + + sram2 + 11 + + + sram1_contested + 12 + + + sram1 + 13 + + + sram0_contested + 14 + + + sram0 + 15 + + + xip_main_contested + 16 + + + xip_main + 17 + + + rom_contested + 18 + + + rom + 19 + + + + + + + PERFCTR2 + Bus fabric performance counter 2 + 0x0018 + 0x00000000 + + + PERFCTR2 + Busfabric saturating performance counter 2\n + Count some event signal from the busfabric arbiters.\n + Write any value to clear. Select an event to count using PERFSEL2 + [23:0] + read-write + oneToClear + + + + + PERFSEL2 + Bus fabric performance event select for PERFCTR2 + 0x001c + 0x0000001f + + + PERFSEL2 + Select an event for PERFCTR2. Count either contested accesses, or all accesses, on a downstream port of the main crossbar. + [4:0] + read-write + + + apb_contested + 0 + + + apb + 1 + + + fastperi_contested + 2 + + + fastperi + 3 + + + sram5_contested + 4 + + + sram5 + 5 + + + sram4_contested + 6 + + + sram4 + 7 + + + sram3_contested + 8 + + + sram3 + 9 + + + sram2_contested + 10 + + + sram2 + 11 + + + sram1_contested + 12 + + + sram1 + 13 + + + sram0_contested + 14 + + + sram0 + 15 + + + xip_main_contested + 16 + + + xip_main + 17 + + + rom_contested + 18 + + + rom + 19 + + + + + + + PERFCTR3 + Bus fabric performance counter 3 + 0x0020 + 0x00000000 + + + PERFCTR3 + Busfabric saturating performance counter 3\n + Count some event signal from the busfabric arbiters.\n + Write any value to clear. Select an event to count using PERFSEL3 + [23:0] + read-write + oneToClear + + + + + PERFSEL3 + Bus fabric performance event select for PERFCTR3 + 0x0024 + 0x0000001f + + + PERFSEL3 + Select an event for PERFCTR3. Count either contested accesses, or all accesses, on a downstream port of the main crossbar. + [4:0] + read-write + + + apb_contested + 0 + + + apb + 1 + + + fastperi_contested + 2 + + + fastperi + 3 + + + sram5_contested + 4 + + + sram5 + 5 + + + sram4_contested + 6 + + + sram4 + 7 + + + sram3_contested + 8 + + + sram3 + 9 + + + sram2_contested + 10 + + + sram2 + 11 + + + sram1_contested + 12 + + + sram1 + 13 + + + sram0_contested + 14 + + + sram0 + 15 + + + xip_main_contested + 16 + + + xip_main + 17 + + + rom_contested + 18 + + + rom + 19 + + + + + + + + + UART0 + 1 + 0x40034000 + 32 + + 0 + 0x1000 + registers + + + UART0_IRQ + 20 + + + + UARTDR + Data Register, UARTDR + 0x0000 + 0x00000000 + + + OE + Overrun error. This bit is set to 1 if data is received and the receive FIFO is already full. This is cleared to 0 once there is an empty space in the FIFO and a new character can be written to it. + [11:11] + read-only + + + BE + Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity and stop bits). In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state), and the next valid start bit is received. + [10:10] + read-only + + + PE + Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. In FIFO mode, this error is associated with the character at the top of the FIFO. + [9:9] + read-only + + + FE + Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is associated with the character at the top of the FIFO. + [8:8] + read-only + + + DATA + Receive (read) data character. Transmit (write) data character. + [7:0] + read-write + + + + + UARTRSR + Receive Status Register/Error Clear Register, UARTRSR/UARTECR + 0x0004 + 0x00000000 + + + OE + Overrun error. This bit is set to 1 if data is received and the FIFO is already full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain valid because no more data is written when the FIFO is full, only the contents of the shift register are overwritten. The CPU must now read the data, to empty the FIFO. + [3:3] + read-write + oneToClear + + + BE + Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity, and stop bits). This bit is cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state) and the next valid start bit is received. + [2:2] + read-write + oneToClear + + + PE + Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO. + [1:1] + read-write + oneToClear + + + FE + Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO. + [0:0] + read-write + oneToClear + + + + + UARTFR + Flag Register, UARTFR + 0x0018 + 0x00000090 + + + RI + Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI, modem status input. That is, the bit is 1 when nUARTRI is LOW. + [8:8] + read-only + + + TXFE + Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is set when the transmit holding register is empty. If the FIFO is enabled, the TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if there is data in the transmit shift register. + [7:7] + read-only + + + RXFF + Receive FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is full. If the FIFO is enabled, the RXFF bit is set when the receive FIFO is full. + [6:6] + read-only + + + TXFF + Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the transmit holding register is full. If the FIFO is enabled, the TXFF bit is set when the transmit FIFO is full. + [5:5] + read-only + + + RXFE + Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is empty. If the FIFO is enabled, the RXFE bit is set when the receive FIFO is empty. + [4:4] + read-only + + + BUSY + UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit remains set until the complete byte, including all the stop bits, has been sent from the shift register. This bit is set as soon as the transmit FIFO becomes non-empty, regardless of whether the UART is enabled or not. + [3:3] + read-only + + + DCD + Data carrier detect. This bit is the complement of the UART data carrier detect, nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW. + [2:2] + read-only + + + DSR + Data set ready. This bit is the complement of the UART data set ready, nUARTDSR, modem status input. That is, the bit is 1 when nUARTDSR is LOW. + [1:1] + read-only + + + CTS + Clear to send. This bit is the complement of the UART clear to send, nUARTCTS, modem status input. That is, the bit is 1 when nUARTCTS is LOW. + [0:0] + read-only + + + + + UARTILPR + IrDA Low-Power Counter Register, UARTILPR + 0x0020 + 0x00000000 + + + ILPDVSR + 8-bit low-power divisor value. These bits are cleared to 0 at reset. + [7:0] + read-write + + + + + UARTIBRD + Integer Baud Rate Register, UARTIBRD + 0x0024 + 0x00000000 + + + BAUD_DIVINT + The integer baud rate divisor. These bits are cleared to 0 on reset. + [15:0] + read-write + + + + + UARTFBRD + Fractional Baud Rate Register, UARTFBRD + 0x0028 + 0x00000000 + + + BAUD_DIVFRAC + The fractional baud rate divisor. These bits are cleared to 0 on reset. + [5:0] + read-write + + + + + UARTLCR_H + Line Control Register, UARTLCR_H + 0x002c + 0x00000000 + + + SPS + Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1 then the parity bit is transmitted and checked as a 0. This bit has no effect when the PEN bit disables parity checking and generation. + [7:7] + read-write + + + WLEN + Word length. These bits indicate the number of data bits transmitted or received in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits. + [6:5] + read-write + + + FEN + Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled (FIFO mode). + [4:4] + read-write + + + STP2 + Two stop bits select. If this bit is set to 1, two stop bits are transmitted at the end of the frame. The receive logic does not check for two stop bits being received. + [3:3] + read-write + + + EPS + Even parity select. Controls the type of parity the UART uses during transmission and reception: 0 = odd parity. The UART generates or checks for an odd number of 1s in the data and parity bits. 1 = even parity. The UART generates or checks for an even number of 1s in the data and parity bits. This bit has no effect when the PEN bit disables parity checking and generation. + [2:2] + read-write + + + PEN + Parity enable: 0 = parity is disabled and no parity bit added to the data frame 1 = parity checking and generation is enabled. + [1:1] + read-write + + + BRK + Send break. If this bit is set to 1, a low-level is continually output on the UARTTXD output, after completing transmission of the current character. For the proper execution of the break command, the software must set this bit for at least two complete frames. For normal use, this bit must be cleared to 0. + [0:0] + read-write + + + + + UARTCR + Control Register, UARTCR + 0x0030 + 0x00000300 + + + CTSEN + CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow control is enabled. Data is only transmitted when the nUARTCTS signal is asserted. + [15:15] + read-write + + + RTSEN + RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow control is enabled. Data is only requested when there is space in the receive FIFO for it to be received. + [14:14] + read-write + + + OUT2 + This bit is the complement of the UART Out2 (nUARTOut2) modem status output. That is, when the bit is programmed to a 1, the output is 0. For DTE this can be used as Ring Indicator (RI). + [13:13] + read-write + + + OUT1 + This bit is the complement of the UART Out1 (nUARTOut1) modem status output. That is, when the bit is programmed to a 1 the output is 0. For DTE this can be used as Data Carrier Detect (DCD). + [12:12] + read-write + + + RTS + Request to send. This bit is the complement of the UART request to send, nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then nUARTRTS is LOW. + [11:11] + read-write + + + DTR + Data transmit ready. This bit is the complement of the UART data transmit ready, nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then nUARTDTR is LOW. + [10:10] + read-write + + + RXE + Receive enable. If this bit is set to 1, the receive section of the UART is enabled. Data reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of reception, it completes the current character before stopping. + [9:9] + read-write + + + TXE + Transmit enable. If this bit is set to 1, the transmit section of the UART is enabled. Data transmission occurs for either UART signals, or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of transmission, it completes the current character before stopping. + [8:8] + read-write + + + LBE + Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test register must be set to 1 to override the normal half-duplex SIR operation. This must be the requirement for accessing the test registers during normal operation, and SIRTEST must be cleared to 0 when loopback testing is finished. This feature reduces the amount of external coupling required during system test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path is fed through to the UARTRXD path. In either SIR mode or UART mode, when this bit is set, the modem outputs are also fed through to the modem inputs. This bit is cleared to 0 on reset, to disable loopback. + [7:7] + read-write + + + SIRLP + SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is cleared to 0, low-level bits are transmitted as an active high pulse with a width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are transmitted with a pulse width that is 3 times the period of the IrLPBaud16 input signal, regardless of the selected bit rate. Setting this bit uses less power, but might reduce transmission distances. + [2:2] + read-write + + + SIREN + SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD remains HIGH, in the marking state. Signal transitions on UARTRXD or modem status inputs have no effect. This bit has no effect if the UARTEN bit disables the UART. + [1:1] + read-write + + + UARTEN + UART enable: 0 = UART is disabled. If the UART is disabled in the middle of transmission or reception, it completes the current character before stopping. 1 = the UART is enabled. Data transmission and reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit. + [0:0] + read-write + + + + + UARTIFLS + Interrupt FIFO Level Select Register, UARTIFLS + 0x0034 + 0x00000012 + + + RXIFLSEL + Receive interrupt FIFO level select. The trigger points for the receive interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 = Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8 full b101-b111 = reserved. + [5:3] + read-write + + + TXIFLSEL + Transmit interrupt FIFO level select. The trigger points for the transmit interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 = Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8 full b101-b111 = reserved. + [2:0] + read-write + + + + + UARTIMSC + Interrupt Mask Set/Clear Register, UARTIMSC + 0x0038 + 0x00000000 + + + OEIM + Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write of 0 clears the mask. + [10:10] + read-write + + + BEIM + Break error interrupt mask. A read returns the current mask for the UARTBEINTR interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write of 0 clears the mask. + [9:9] + read-write + + + PEIM + Parity error interrupt mask. A read returns the current mask for the UARTPEINTR interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write of 0 clears the mask. + [8:8] + read-write + + + FEIM + Framing error interrupt mask. A read returns the current mask for the UARTFEINTR interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write of 0 clears the mask. + [7:7] + read-write + + + RTIM + Receive timeout interrupt mask. A read returns the current mask for the UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is set. A write of 0 clears the mask. + [6:6] + read-write + + + TXIM + Transmit interrupt mask. A read returns the current mask for the UARTTXINTR interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write of 0 clears the mask. + [5:5] + read-write + + + RXIM + Receive interrupt mask. A read returns the current mask for the UARTRXINTR interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write of 0 clears the mask. + [4:4] + read-write + + + DSRMIM + nUARTDSR modem interrupt mask. A read returns the current mask for the UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is set. A write of 0 clears the mask. + [3:3] + read-write + + + DCDMIM + nUARTDCD modem interrupt mask. A read returns the current mask for the UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is set. A write of 0 clears the mask. + [2:2] + read-write + + + CTSMIM + nUARTCTS modem interrupt mask. A read returns the current mask for the UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is set. A write of 0 clears the mask. + [1:1] + read-write + + + RIMIM + nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write of 0 clears the mask. + [0:0] + read-write + + + + + UARTRIS + Raw Interrupt Status Register, UARTRIS + 0x003c + 0x00000000 + + + OERIS + Overrun error interrupt status. Returns the raw interrupt state of the UARTOEINTR interrupt. + [10:10] + read-only + + + BERIS + Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR interrupt. + [9:9] + read-only + + + PERIS + Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR interrupt. + [8:8] + read-only + + + FERIS + Framing error interrupt status. Returns the raw interrupt state of the UARTFEINTR interrupt. + [7:7] + read-only + + + RTRIS + Receive timeout interrupt status. Returns the raw interrupt state of the UARTRTINTR interrupt. a + [6:6] + read-only + + + TXRIS + Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR interrupt. + [5:5] + read-only + + + RXRIS + Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR interrupt. + [4:4] + read-only + + + DSRRMIS + nUARTDSR modem interrupt status. Returns the raw interrupt state of the UARTDSRINTR interrupt. + [3:3] + read-only + + + DCDRMIS + nUARTDCD modem interrupt status. Returns the raw interrupt state of the UARTDCDINTR interrupt. + [2:2] + read-only + + + CTSRMIS + nUARTCTS modem interrupt status. Returns the raw interrupt state of the UARTCTSINTR interrupt. + [1:1] + read-only + + + RIRMIS + nUARTRI modem interrupt status. Returns the raw interrupt state of the UARTRIINTR interrupt. + [0:0] + read-only + + + + + UARTMIS + Masked Interrupt Status Register, UARTMIS + 0x0040 + 0x00000000 + + + OEMIS + Overrun error masked interrupt status. Returns the masked interrupt state of the UARTOEINTR interrupt. + [10:10] + read-only + + + BEMIS + Break error masked interrupt status. Returns the masked interrupt state of the UARTBEINTR interrupt. + [9:9] + read-only + + + PEMIS + Parity error masked interrupt status. Returns the masked interrupt state of the UARTPEINTR interrupt. + [8:8] + read-only + + + FEMIS + Framing error masked interrupt status. Returns the masked interrupt state of the UARTFEINTR interrupt. + [7:7] + read-only + + + RTMIS + Receive timeout masked interrupt status. Returns the masked interrupt state of the UARTRTINTR interrupt. + [6:6] + read-only + + + TXMIS + Transmit masked interrupt status. Returns the masked interrupt state of the UARTTXINTR interrupt. + [5:5] + read-only + + + RXMIS + Receive masked interrupt status. Returns the masked interrupt state of the UARTRXINTR interrupt. + [4:4] + read-only + + + DSRMMIS + nUARTDSR modem masked interrupt status. Returns the masked interrupt state of the UARTDSRINTR interrupt. + [3:3] + read-only + + + DCDMMIS + nUARTDCD modem masked interrupt status. Returns the masked interrupt state of the UARTDCDINTR interrupt. + [2:2] + read-only + + + CTSMMIS + nUARTCTS modem masked interrupt status. Returns the masked interrupt state of the UARTCTSINTR interrupt. + [1:1] + read-only + + + RIMMIS + nUARTRI modem masked interrupt status. Returns the masked interrupt state of the UARTRIINTR interrupt. + [0:0] + read-only + + + + + UARTICR + Interrupt Clear Register, UARTICR + 0x0044 + 0x00000000 + + + OEIC + Overrun error interrupt clear. Clears the UARTOEINTR interrupt. + [10:10] + read-write + oneToClear + + + BEIC + Break error interrupt clear. Clears the UARTBEINTR interrupt. + [9:9] + read-write + oneToClear + + + PEIC + Parity error interrupt clear. Clears the UARTPEINTR interrupt. + [8:8] + read-write + oneToClear + + + FEIC + Framing error interrupt clear. Clears the UARTFEINTR interrupt. + [7:7] + read-write + oneToClear + + + RTIC + Receive timeout interrupt clear. Clears the UARTRTINTR interrupt. + [6:6] + read-write + oneToClear + + + TXIC + Transmit interrupt clear. Clears the UARTTXINTR interrupt. + [5:5] + read-write + oneToClear + + + RXIC + Receive interrupt clear. Clears the UARTRXINTR interrupt. + [4:4] + read-write + oneToClear + + + DSRMIC + nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt. + [3:3] + read-write + oneToClear + + + DCDMIC + nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt. + [2:2] + read-write + oneToClear + + + CTSMIC + nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt. + [1:1] + read-write + oneToClear + + + RIMIC + nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt. + [0:0] + read-write + oneToClear + + + + + UARTDMACR + DMA Control Register, UARTDMACR + 0x0048 + 0x00000000 + + + DMAONERR + DMA on error. If this bit is set to 1, the DMA receive request outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is asserted. + [2:2] + read-write + + + TXDMAE + Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is enabled. + [1:1] + read-write + + + RXDMAE + Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is enabled. + [0:0] + read-write + + + + + UARTPERIPHID0 + UARTPeriphID0 Register + 0x0fe0 + 0x00000011 + + + PARTNUMBER0 + These bits read back as 0x11 + [7:0] + read-only + + + + + UARTPERIPHID1 + UARTPeriphID1 Register + 0x0fe4 + 0x00000010 + + + DESIGNER0 + These bits read back as 0x1 + [7:4] + read-only + + + PARTNUMBER1 + These bits read back as 0x0 + [3:0] + read-only + + + + + UARTPERIPHID2 + UARTPeriphID2 Register + 0x0fe8 + 0x00000034 + + + REVISION + This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4 0x2 r1p5 0x3 + [7:4] + read-only + + + DESIGNER1 + These bits read back as 0x4 + [3:0] + read-only + + + + + UARTPERIPHID3 + UARTPeriphID3 Register + 0x0fec + 0x00000000 + + + CONFIGURATION + These bits read back as 0x00 + [7:0] + read-only + + + + + UARTPCELLID0 + UARTPCellID0 Register + 0x0ff0 + 0x0000000d + + + UARTPCELLID0 + These bits read back as 0x0D + [7:0] + read-only + + + + + UARTPCELLID1 + UARTPCellID1 Register + 0x0ff4 + 0x000000f0 + + + UARTPCELLID1 + These bits read back as 0xF0 + [7:0] + read-only + + + + + UARTPCELLID2 + UARTPCellID2 Register + 0x0ff8 + 0x00000005 + + + UARTPCELLID2 + These bits read back as 0x05 + [7:0] + read-only + + + + + UARTPCELLID3 + UARTPCellID3 Register + 0x0ffc + 0x000000b1 + + + UARTPCELLID3 + These bits read back as 0xB1 + [7:0] + read-only + + + + + + + UART1 + 0x40038000 + + UART1_IRQ + 21 + + + + SPI0 + 1 + 0x4003c000 + 32 + + 0 + 0x1000 + registers + + + SPI0_IRQ + 18 + + + + SSPCR0 + Control register 0, SSPCR0 on page 3-4 + 0x0000 + 0x00000000 + + + SCR + Serial clock rate. The value SCR is used to generate the transmit and receive bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and SCR is a value from 0-255. + [15:8] + read-write + + + SPH + SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10. + [7:7] + read-write + + + SPO + SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10. + [6:6] + read-write + + + FRF + Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame format. 10 National Microwire frame format. 11 Reserved, undefined operation. + [5:4] + read-write + + + DSS + Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data. 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data. 1110 15-bit data. 1111 16-bit data. + [3:0] + read-write + + + + + SSPCR1 + Control register 1, SSPCR1 on page 3-5 + 0x0004 + 0x00000000 + + + SOD + Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast a message to all slaves in the system while ensuring that only one slave drives data onto its serial output line. In such systems the RXD lines from multiple slaves could be tied together. To operate in such systems, the SOD bit can be set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD output in slave mode. + [3:3] + read-write + + + MS + Master or slave mode select. This bit can be modified only when the PrimeCell SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device configured as slave. + [2:2] + read-write + + + SSE + Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation enabled. + [1:1] + read-write + + + LBM + Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit serial shifter is connected to input of receive serial shifter internally. + [0:0] + read-write + + + + + SSPDR + Data register, SSPDR on page 3-6 + 0x0008 + 0x00000000 + + + DATA + Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must right-justify data when the PrimeCell SSP is programmed for a data size that is less than 16 bits. Unused bits at the top are ignored by transmit logic. The receive logic automatically right-justifies. + [15:0] + read-write + + + + + SSPSR + Status register, SSPSR on page 3-7 + 0x000c + 0x00000003 + + + BSY + PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting and/or receiving a frame or the transmit FIFO is not empty. + [4:4] + read-only + + + RFF + Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full. + [3:3] + read-only + + + RNE + Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not empty. + [2:2] + read-only + + + TNF + Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not full. + [1:1] + read-only + + + TFE + Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty. + [0:0] + read-only + + + + + SSPCPSR + Clock prescale register, SSPCPSR on page 3-8 + 0x0010 + 0x00000000 + + + CPSDVSR + Clock prescale divisor. Must be an even number from 2-254, depending on the frequency of SSPCLK. The least significant bit always returns zero on reads. + [7:0] + read-write + + + + + SSPIMSC + Interrupt mask set or clear register, SSPIMSC on page 3-9 + 0x0014 + 0x00000000 + + + TXIM + Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is not masked. + [3:3] + read-write + + + RXIM + Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not masked. + [2:2] + read-write + + + RTIM + Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior to timeout period interrupt is not masked. + [1:1] + read-write + + + RORIM + Receive overrun interrupt mask: 0 Receive FIFO written to while full condition interrupt is masked. 1 Receive FIFO written to while full condition interrupt is not masked. + [0:0] + read-write + + + + + SSPRIS + Raw interrupt status register, SSPRIS on page 3-10 + 0x0018 + 0x00000008 + + + TXRIS + Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt + [3:3] + read-only + + + RXRIS + Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt + [2:2] + read-only + + + RTRIS + Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt + [1:1] + read-only + + + RORRIS + Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt + [0:0] + read-only + + + + + SSPMIS + Masked interrupt status register, SSPMIS on page 3-11 + 0x001c + 0x00000000 + + + TXMIS + Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt + [3:3] + read-only + + + RXMIS + Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt + [2:2] + read-only + + + RTMIS + Gives the receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt + [1:1] + read-only + + + RORMIS + Gives the receive over run masked interrupt status, after masking, of the SSPRORINTR interrupt + [0:0] + read-only + + + + + SSPICR + Interrupt clear register, SSPICR on page 3-11 + 0x0020 + 0x00000000 + + + RTIC + Clears the SSPRTINTR interrupt + [1:1] + read-write + oneToClear + + + RORIC + Clears the SSPRORINTR interrupt + [0:0] + read-write + oneToClear + + + + + SSPDMACR + DMA control register, SSPDMACR on page 3-12 + 0x0024 + 0x00000000 + + + TXDMAE + Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is enabled. + [1:1] + read-write + + + RXDMAE + Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is enabled. + [0:0] + read-write + + + + + SSPPERIPHID0 + Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + 0x0fe0 + 0x00000022 + + + PARTNUMBER0 + These bits read back as 0x22 + [7:0] + read-only + + + + + SSPPERIPHID1 + Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + 0x0fe4 + 0x00000010 + + + DESIGNER0 + These bits read back as 0x1 + [7:4] + read-only + + + PARTNUMBER1 + These bits read back as 0x0 + [3:0] + read-only + + + + + SSPPERIPHID2 + Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + 0x0fe8 + 0x00000034 + + + REVISION + These bits return the peripheral revision + [7:4] + read-only + + + DESIGNER1 + These bits read back as 0x4 + [3:0] + read-only + + + + + SSPPERIPHID3 + Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + 0x0fec + 0x00000000 + + + CONFIGURATION + These bits read back as 0x00 + [7:0] + read-only + + + + + SSPPCELLID0 + PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + 0x0ff0 + 0x0000000d + + + SSPPCELLID0 + These bits read back as 0x0D + [7:0] + read-only + + + + + SSPPCELLID1 + PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + 0x0ff4 + 0x000000f0 + + + SSPPCELLID1 + These bits read back as 0xF0 + [7:0] + read-only + + + + + SSPPCELLID2 + PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + 0x0ff8 + 0x00000005 + + + SSPPCELLID2 + These bits read back as 0x05 + [7:0] + read-only + + + + + SSPPCELLID3 + PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + 0x0ffc + 0x000000b1 + + + SSPPCELLID3 + These bits read back as 0xB1 + [7:0] + read-only + + + + + + + SPI1 + 0x40040000 + + SPI1_IRQ + 19 + + + + I2C0 + 1 + DW_apb_i2c address block\n\n + List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):\n\n + IC_ULTRA_FAST_MODE ................ 0x0\n + IC_UFM_TBUF_CNT_DEFAULT ........... 0x8\n + IC_UFM_SCL_LOW_COUNT .............. 0x0008\n + IC_UFM_SCL_HIGH_COUNT ............. 0x0006\n + IC_TX_TL .......................... 0x0\n + IC_TX_CMD_BLOCK ................... 0x1\n + IC_HAS_DMA ........................ 0x1\n + IC_HAS_ASYNC_FIFO ................. 0x0\n + IC_SMBUS_ARP ...................... 0x0\n + IC_FIRST_DATA_BYTE_STATUS ......... 0x1\n + IC_INTR_IO ........................ 0x1\n + IC_MASTER_MODE .................... 0x1\n + IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1\n + IC_INTR_POL ....................... 0x1\n + IC_OPTIONAL_SAR ................... 0x0\n + IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055\n + IC_DEFAULT_SLAVE_ADDR ............. 0x055\n + IC_DEFAULT_HS_SPKLEN .............. 0x1\n + IC_FS_SCL_HIGH_COUNT .............. 0x0006\n + IC_HS_SCL_LOW_COUNT ............... 0x0008\n + IC_DEVICE_ID_VALUE ................ 0x0\n + IC_10BITADDR_MASTER ............... 0x0\n + IC_CLK_FREQ_OPTIMIZATION .......... 0x0\n + IC_DEFAULT_FS_SPKLEN .............. 0x7\n + IC_ADD_ENCODED_PARAMS ............. 0x0\n + IC_DEFAULT_SDA_HOLD ............... 0x000001\n + IC_DEFAULT_SDA_SETUP .............. 0x64\n + IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0\n + IC_CLOCK_PERIOD ................... 100\n + IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1\n + IC_RESTART_EN ..................... 0x1\n + IC_TX_CMD_BLOCK_DEFAULT ........... 0x0\n + IC_BUS_CLEAR_FEATURE .............. 0x0\n + IC_CAP_LOADING .................... 100\n + IC_FS_SCL_LOW_COUNT ............... 0x000d\n + APB_DATA_WIDTH .................... 32\n + IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\n + IC_SLV_DATA_NACK_ONLY ............. 0x1\n + IC_10BITADDR_SLAVE ................ 0x0\n + IC_CLK_TYPE ....................... 0x0\n + IC_SMBUS_UDID_MSB ................. 0x0\n + IC_SMBUS_SUSPEND_ALERT ............ 0x0\n + IC_HS_SCL_HIGH_COUNT .............. 0x0006\n + IC_SLV_RESTART_DET_EN ............. 0x1\n + IC_SMBUS .......................... 0x0\n + IC_OPTIONAL_SAR_DEFAULT ........... 0x0\n + IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0\n + IC_USE_COUNTS ..................... 0x0\n + IC_RX_BUFFER_DEPTH ................ 16\n + IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\n + IC_RX_FULL_HLD_BUS_EN ............. 0x1\n + IC_SLAVE_DISABLE .................. 0x1\n + IC_RX_TL .......................... 0x0\n + IC_DEVICE_ID ...................... 0x0\n + IC_HC_COUNT_VALUES ................ 0x0\n + I2C_DYNAMIC_TAR_UPDATE ............ 0\n + IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff\n + IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff\n + IC_HS_MASTER_CODE ................. 0x1\n + IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff\n + IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff\n + IC_SS_SCL_HIGH_COUNT .............. 0x0028\n + IC_SS_SCL_LOW_COUNT ............... 0x002f\n + IC_MAX_SPEED_MODE ................. 0x2\n + IC_STAT_FOR_CLK_STRETCH ........... 0x0\n + IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0\n + IC_DEFAULT_UFM_SPKLEN ............. 0x1\n + IC_TX_BUFFER_DEPTH ................ 16 + 0x40044000 + 32 + + 0 + 0x0100 + registers + + + I2C0_IRQ + 23 + + + + IC_CON + I2C Control Register. This register can be written only when the DW_apb_i2c is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\n\n + Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read only - bit 17 is read only - bits 18 and 19 are read only. + 0x0000 + 0x00000065 + + + STOP_DET_IF_MASTER_ACTIVE + Master issues the STOP_DET interrupt irrespective of whether master is active or not + [10:10] + read-only + + + RX_FIFO_FULL_HLD_CTRL + This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is physically full to its RX_BUFFER_DEPTH, as described in the IC_RX_FULL_HLD_BUS_EN parameter.\n\n + Reset value: 0x0. + [9:9] + read-write + + + DISABLED + Overflow when RX_FIFO is full + 0 + + + ENABLED + Hold bus when RX_FIFO is full + 1 + + + + + TX_EMPTY_CTRL + This bit controls the generation of the TX_EMPTY interrupt, as described in the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0. + [8:8] + read-write + + + DISABLED + Default behaviour of TX_EMPTY interrupt + 0 + + + ENABLED + Controlled generation of TX_EMPTY interrupt + 1 + + + + + STOP_DET_IFADDRESSED + In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is addressed. - 1'b0: issues the STOP_DET irrespective of whether it's addressed or not. Reset value: 0x0\n\n + NOTE: During a general call address, this slave does not issue the STOP_DET interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR). + [7:7] + read-write + + + DISABLED + slave issues STOP_DET intr always + 0 + + + ENABLED + slave issues STOP_DET intr only if addressed + 1 + + + + + IC_SLAVE_DISABLE + This bit controls whether I2C has its slave disabled, which means once the presetn signal is applied, then this bit is set and the slave is disabled.\n\n + If this bit is set (slave is disabled), DW_apb_i2c functions only as a master and does not perform any action that requires a slave.\n\n + NOTE: Software should ensure that if this bit is written with 0, then bit 0 should also be written with a 0. + [6:6] + read-write + + + SLAVE_ENABLED + Slave mode is enabled + 0 + + + SLAVE_DISABLED + Slave mode is disabled + 1 + + + + + IC_RESTART_EN + Determines whether RESTART conditions may be sent when acting as a master. Some older slaves do not support handling RESTART conditions; however, RESTART conditions are used in several DW_apb_i2c operations. When RESTART is disabled, the master is prohibited from performing the following functions: - Sending a START BYTE - Performing any high-speed mode operation - High-speed mode operation - Performing direction changes in combined format mode - Performing a read operation with a 10-bit address By replacing RESTART condition followed by a STOP and a subsequent START condition, split operations are broken down into multiple DW_apb_i2c transfers. If the above operations are performed, it will result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.\n\n + Reset value: ENABLED + [5:5] + read-write + + + DISABLED + Master restart disabled + 0 + + + ENABLED + Master restart enabled + 1 + + + + + IC_10BITADDR_MASTER + Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing + [4:4] + read-write + + + ADDR_7BITS + Master 7Bit addressing mode + 0 + + + ADDR_10BITS + Master 10Bit addressing mode + 1 + + + + + IC_10BITADDR_SLAVE + When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7- or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c responds to only 10-bit addressing transfers that match the full 10 bits of the IC_SAR register. + [3:3] + read-write + + + ADDR_7BITS + Slave 7Bit addressing + 0 + + + ADDR_10BITS + Slave 10Bit addressing + 1 + + + + + SPEED + These bits control at which speed the DW_apb_i2c operates; its setting is relevant only if one is operating the DW_apb_i2c in master mode. Hardware protects against illegal values being programmed by software. These bits must be programmed appropriately for slave mode also, as it is used to capture correct value of spike filter as per the speed mode.\n\n + This register should be programmed only with a value in the range of 1 to IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of IC_MAX_SPEED_MODE.\n\n + 1: standard mode (100 kbit/s)\n\n + 2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)\n\n + 3: high speed mode (3.4 Mbit/s)\n\n + Note: This field is not applicable when IC_ULTRA_FAST_MODE=1 + [2:1] + read-write + + + STANDARD + Standard Speed mode of operation + 1 + + + FAST + Fast or Fast Plus mode of operation + 2 + + + HIGH + High Speed mode of operation + 3 + + + + + MASTER_MODE + This bit controls whether the DW_apb_i2c master is enabled.\n\n + NOTE: Software should ensure that if this bit is written with '1' then bit 6 should also be written with a '1'. + [0:0] + read-write + + + DISABLED + Master mode is disabled + 0 + + + ENABLED + Master mode is enabled + 1 + + + + + + + IC_TAR + I2C Target Address Register\n\n + This register is 12 bits wide, and bits 31:12 are reserved. This register can be written to only when IC_ENABLE[0] is set to 0.\n\n + Note: If the software or application is aware that the DW_apb_i2c is not using the TAR address for the pending commands in the Tx FIFO, then it is possible to update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). - It is not necessary to perform any write to this register if DW_apb_i2c is enabled as an I2C slave only. + 0x0004 + 0x00000055 + + + SPECIAL + This bit indicates whether software performs a Device-ID or General Call or START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1: perform special I2C command as specified in Device_ID or GC_OR_START bit Reset value: 0x0 + [11:11] + read-write + + + DISABLED + Disables programming of GENERAL_CALL or START_BYTE transmission + 0 + + + ENABLED + Enables programming of GENERAL_CALL or START_BYTE transmission + 1 + + + + + GC_OR_START + If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit indicates whether a General Call or START byte command is to be performed by the DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only writes may be performed. Attempting to issue a read command results in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START BYTE Reset value: 0x0 + [10:10] + read-write + + + GENERAL_CALL + GENERAL_CALL byte transmission + 0 + + + START_BYTE + START byte transmission + 1 + + + + + IC_TAR + This is the target address for any master transaction. When transmitting a General Call, these bits are ignored. To generate a START BYTE, the CPU needs to write only once into these bits.\n\n + If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared between master and slave, so full loopback is not feasible. Only one direction loopback mode is supported (simplex), not duplex. A master cannot transmit to itself; it can transmit to only a slave. + [9:0] + read-write + + + + + IC_SAR + I2C Slave Address Register + 0x0008 + 0x00000055 + + + IC_SAR + The IC_SAR holds the slave address when the I2C is operating as a slave. For 7-bit addressing, only IC_SAR[6:0] is used.\n\n + This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\n\n + Note: The default values cannot be any of the reserved address locations: that is, 0x00 to 0x07, or 0x78 to 0x7f. The correct operation of the device is not guaranteed if you program the IC_SAR or IC_TAR to a reserved value. Refer to <<table_I2C_firstbyte_bit_defs>> for a complete list of these reserved values. + [9:0] + read-write + + + + + IC_DATA_CMD + I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX FIFO.\n\n + The size of the register changes as follows:\n\n + Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1 - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to continue acknowledging reads, a read command should be written for every byte that is to be received; otherwise the DW_apb_i2c will stop acknowledging. + 0x0010 + 0x00000000 + + + FIRST_DATA_BYTE + Indicates the first data byte received after the address phase for receive transfer in Master receiver or Slave receiver mode.\n\n + Reset value : 0x0\n\n + NOTE: In case of APB_DATA_WIDTH=8,\n\n + 1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status on 11 bit.\n\n + 2. In order to read the 11 bit, the user has to perform the first data byte read [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in order to know the status of 11 bit (whether the data received in previous read is a first data byte or not).\n\n + 3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8] (offset 0x11) if not interested in FIRST_DATA_BYTE status. + [11:11] + read-only + + + INACTIVE + Sequential data byte received + 0 + + + ACTIVE + Non sequential data byte received + 1 + + + + + RESTART + This bit controls whether a RESTART is issued before the byte is sent or received.\n\n + 1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received (according to the value of CMD), regardless of whether or not the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.\n\n + 0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.\n\n + Reset value: 0x0 + [10:10] + read-write + clear + + + DISABLE + Don't Issue RESTART before this command + 0 + + + ENABLE + Issue RESTART before this command + 1 + + + + + STOP + This bit controls whether a STOP is issued after the byte is sent or received.\n\n + - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master immediately tries to start a new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master continues the current transfer by sending/receiving data bytes according to the value of the CMD bit. If the Tx FIFO is empty, the master holds the SCL line low and stalls the bus until a new command is available in the Tx FIFO. Reset value: 0x0 + [9:9] + read-write + clear + + + DISABLE + Don't Issue STOP after this command + 0 + + + ENABLE + Issue STOP after this command + 1 + + + + + CMD + This bit controls whether a read or a write is performed. This bit does not control the direction when the DW_apb_i2con acts as a slave. It controls only the direction when it acts as a master.\n\n + When a command is entered in the TX FIFO, this bit distinguishes the write and read commands. In slave-receiver mode, this bit is a 'don't care' because writes to this register are not required. In slave-transmitter mode, a '0' indicates that the data in IC_DATA_CMD is to be transmitted.\n\n + When programming this bit, you should remember the following: attempting to perform a read operation after a General Call command has been sent results in a TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11 (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.\n\n + Reset value: 0x0 + [8:8] + read-write + clear + + + WRITE + Master Write Command + 0 + + + READ + Master Read Command + 1 + + + + + DAT + This register contains the data to be transmitted or received on the I2C bus. If you are writing to this register and want to perform a read, bits 7:0 (DAT) are ignored by the DW_apb_i2c. However, when you read this register, these bits return the value of data received on the DW_apb_i2c interface.\n\n + Reset value: 0x0 + [7:0] + read-write + + + + + IC_SS_SCL_HCNT + Standard Speed I2C Clock SCL High Count Register + 0x0014 + 0x00000028 + + + IC_SS_SCL_HCNT + This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'.\n\n + This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\n\n + The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed.\n\n + NOTE: This register must not be programmed to a value higher than 65525, because DW_apb_i2c uses a 16-bit counter to flag an I2C bus idle condition when this counter reaches a value of IC_SS_SCL_HCNT + 10. + [15:0] + read-write + + + + + IC_SS_SCL_LCNT + Standard Speed I2C Clock SCL Low Count Register + 0x0018 + 0x0000002f + + + IC_SS_SCL_LCNT + This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'\n\n + This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\n\n + The minimum valid value is 8; hardware prevents values less than this being written, and if attempted, results in 8 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of DW_apb_i2c. The lower byte must be programmed first, and then the upper byte is programmed. + [15:0] + read-write + + + + + IC_FS_SCL_HCNT + Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register + 0x001c + 0x00000006 + + + IC_FS_SCL_HCNT + This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for fast mode or fast mode plus. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.\n\n + This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard. This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\n\n + The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH == 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed. + [15:0] + read-write + + + + + IC_FS_SCL_LCNT + Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register + 0x0020 + 0x0000000d + + + IC_FS_SCL_LCNT + This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for fast speed. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.\n\n + This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard.\n\n + This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\n\n + The minimum valid value is 8; hardware prevents values less than this being written, and if attempted results in 8 being set. For designs with APB_DATA_WIDTH = 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed. If the value is less than 8 then the count value gets changed to 8. + [15:0] + read-write + + + + + IC_INTR_STAT + I2C Interrupt Status Register\n\n + Each bit in this register has a corresponding mask bit in the IC_INTR_MASK register. These bits are cleared by reading the matching interrupt clear register. The unmasked raw versions of these bits are available in the IC_RAW_INTR_STAT register. + 0x002c + 0x00000000 + + + R_RESTART_DET + See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.\n\n + Reset value: 0x0 + [12:12] + read-only + + + INACTIVE + R_RESTART_DET interrupt is inactive + 0 + + + ACTIVE + R_RESTART_DET interrupt is active + 1 + + + + + R_GEN_CALL + See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.\n\n + Reset value: 0x0 + [11:11] + read-only + + + INACTIVE + R_GEN_CALL interrupt is inactive + 0 + + + ACTIVE + R_GEN_CALL interrupt is active + 1 + + + + + R_START_DET + See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.\n\n + Reset value: 0x0 + [10:10] + read-only + + + INACTIVE + R_START_DET interrupt is inactive + 0 + + + ACTIVE + R_START_DET interrupt is active + 1 + + + + + R_STOP_DET + See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.\n\n + Reset value: 0x0 + [9:9] + read-only + + + INACTIVE + R_STOP_DET interrupt is inactive + 0 + + + ACTIVE + R_STOP_DET interrupt is active + 1 + + + + + R_ACTIVITY + See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.\n\n + Reset value: 0x0 + [8:8] + read-only + + + INACTIVE + R_ACTIVITY interrupt is inactive + 0 + + + ACTIVE + R_ACTIVITY interrupt is active + 1 + + + + + R_RX_DONE + See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.\n\n + Reset value: 0x0 + [7:7] + read-only + + + INACTIVE + R_RX_DONE interrupt is inactive + 0 + + + ACTIVE + R_RX_DONE interrupt is active + 1 + + + + + R_TX_ABRT + See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.\n\n + Reset value: 0x0 + [6:6] + read-only + + + INACTIVE + R_TX_ABRT interrupt is inactive + 0 + + + ACTIVE + R_TX_ABRT interrupt is active + 1 + + + + + R_RD_REQ + See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.\n\n + Reset value: 0x0 + [5:5] + read-only + + + INACTIVE + R_RD_REQ interrupt is inactive + 0 + + + ACTIVE + R_RD_REQ interrupt is active + 1 + + + + + R_TX_EMPTY + See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.\n\n + Reset value: 0x0 + [4:4] + read-only + + + INACTIVE + R_TX_EMPTY interrupt is inactive + 0 + + + ACTIVE + R_TX_EMPTY interrupt is active + 1 + + + + + R_TX_OVER + See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.\n\n + Reset value: 0x0 + [3:3] + read-only + + + INACTIVE + R_TX_OVER interrupt is inactive + 0 + + + ACTIVE + R_TX_OVER interrupt is active + 1 + + + + + R_RX_FULL + See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.\n\n + Reset value: 0x0 + [2:2] + read-only + + + INACTIVE + R_RX_FULL interrupt is inactive + 0 + + + ACTIVE + R_RX_FULL interrupt is active + 1 + + + + + R_RX_OVER + See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.\n\n + Reset value: 0x0 + [1:1] + read-only + + + INACTIVE + R_RX_OVER interrupt is inactive + 0 + + + ACTIVE + R_RX_OVER interrupt is active + 1 + + + + + R_RX_UNDER + See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.\n\n + Reset value: 0x0 + [0:0] + read-only + + + INACTIVE + RX_UNDER interrupt is inactive + 0 + + + ACTIVE + RX_UNDER interrupt is active + 1 + + + + + + + IC_INTR_MASK + I2C Interrupt Mask Register.\n\n + These bits mask their corresponding interrupt status bits. This register is active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the interrupt. + 0x0030 + 0x000008ff + + + M_RESTART_DET + This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x0 + [12:12] + read-write + + + ENABLED + RESTART_DET interrupt is masked + 0 + + + DISABLED + RESTART_DET interrupt is unmasked + 1 + + + + + M_GEN_CALL + This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [11:11] + read-write + + + ENABLED + GEN_CALL interrupt is masked + 0 + + + DISABLED + GEN_CALL interrupt is unmasked + 1 + + + + + M_START_DET + This bit masks the R_START_DET interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x0 + [10:10] + read-write + + + ENABLED + START_DET interrupt is masked + 0 + + + DISABLED + START_DET interrupt is unmasked + 1 + + + + + M_STOP_DET + This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x0 + [9:9] + read-write + + + ENABLED + STOP_DET interrupt is masked + 0 + + + DISABLED + STOP_DET interrupt is unmasked + 1 + + + + + M_ACTIVITY + This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x0 + [8:8] + read-write + + + ENABLED + ACTIVITY interrupt is masked + 0 + + + DISABLED + ACTIVITY interrupt is unmasked + 1 + + + + + M_RX_DONE + This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [7:7] + read-write + + + ENABLED + RX_DONE interrupt is masked + 0 + + + DISABLED + RX_DONE interrupt is unmasked + 1 + + + + + M_TX_ABRT + This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [6:6] + read-write + + + ENABLED + TX_ABORT interrupt is masked + 0 + + + DISABLED + TX_ABORT interrupt is unmasked + 1 + + + + + M_RD_REQ + This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [5:5] + read-write + + + ENABLED + RD_REQ interrupt is masked + 0 + + + DISABLED + RD_REQ interrupt is unmasked + 1 + + + + + M_TX_EMPTY + This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [4:4] + read-write + + + ENABLED + TX_EMPTY interrupt is masked + 0 + + + DISABLED + TX_EMPTY interrupt is unmasked + 1 + + + + + M_TX_OVER + This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [3:3] + read-write + + + ENABLED + TX_OVER interrupt is masked + 0 + + + DISABLED + TX_OVER interrupt is unmasked + 1 + + + + + M_RX_FULL + This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [2:2] + read-write + + + ENABLED + RX_FULL interrupt is masked + 0 + + + DISABLED + RX_FULL interrupt is unmasked + 1 + + + + + M_RX_OVER + This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [1:1] + read-write + + + ENABLED + RX_OVER interrupt is masked + 0 + + + DISABLED + RX_OVER interrupt is unmasked + 1 + + + + + M_RX_UNDER + This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.\n\n + Reset value: 0x1 + [0:0] + read-write + + + ENABLED + RX_UNDER interrupt is masked + 0 + + + DISABLED + RX_UNDER interrupt is unmasked + 1 + + + + + + + IC_RAW_INTR_STAT + I2C Raw Interrupt Status Register\n\n + Unlike the IC_INTR_STAT register, these bits are not masked so they always show the true status of the DW_apb_i2c. + 0x0034 + 0x00000000 + + + RESTART_DET + Indicates whether a RESTART condition has occurred on the I2C interface when DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled only when IC_SLV_RESTART_DET_EN=1.\n\n + Note: However, in high-speed mode or during a START BYTE transfer, the RESTART comes before the address field as per the I2C protocol. In this case, the slave is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does not generate the RESTART_DET interrupt.\n\n + Reset value: 0x0 + [12:12] + read-only + + + INACTIVE + RESTART_DET interrupt is inactive + 0 + + + ACTIVE + RESTART_DET interrupt is active + 1 + + + + + GEN_CALL + Set only when a General Call address is received and it is acknowledged. It stays set until it is cleared either by disabling DW_apb_i2c or when the CPU reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data in the Rx buffer.\n\n + Reset value: 0x0 + [11:11] + read-only + + + INACTIVE + GEN_CALL interrupt is inactive + 0 + + + ACTIVE + GEN_CALL interrupt is active + 1 + + + + + START_DET + Indicates whether a START or RESTART condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.\n\n + Reset value: 0x0 + [10:10] + read-only + + + INACTIVE + START_DET interrupt is inactive + 0 + + + ACTIVE + START_DET interrupt is active + 1 + + + + + STOP_DET + Indicates whether a STOP condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.\n\n + In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the STOP_DET interrupt will be issued only if slave is addressed. Note: During a general call address, this slave does not issue a STOP_DET interrupt if STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0 (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether it is being addressed. In Master Mode: - If IC_CON[10]=1'b1 (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master is active. - If IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt will be issued irrespective of whether master is active or not. Reset value: 0x0 + [9:9] + read-only + + + INACTIVE + STOP_DET interrupt is inactive + 0 + + + ACTIVE + STOP_DET interrupt is active + 1 + + + + + ACTIVITY + This bit captures DW_apb_i2c activity and stays set until it is cleared. There are four ways to clear it: - Disabling the DW_apb_i2c - Reading the IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once this bit is set, it stays set unless one of the four methods is used to clear it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared, indicating that there was activity on the bus.\n\n + Reset value: 0x0 + [8:8] + read-only + + + INACTIVE + RAW_INTR_ACTIVITY interrupt is inactive + 0 + + + ACTIVE + RAW_INTR_ACTIVITY interrupt is active + 1 + + + + + RX_DONE + When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if the master does not acknowledge a transmitted byte. This occurs on the last byte of the transmission, indicating that the transmission is done.\n\n + Reset value: 0x0 + [7:7] + read-only + + + INACTIVE + RX_DONE interrupt is inactive + 0 + + + ACTIVE + RX_DONE interrupt is active + 1 + + + + + TX_ABRT + This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete the intended actions on the contents of the transmit FIFO. This situation can occur both as an I2C master or an I2C slave, and is referred to as a 'transmit abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the reason why the transmit abort takes places.\n\n + Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever there is a transmit abort caused by any of the events tracked by the IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is then ready to accept more data bytes from the APB interface.\n\n + Reset value: 0x0 + [6:6] + read-only + + + INACTIVE + TX_ABRT interrupt is inactive + 0 + + + ACTIVE + TX_ABRT interrupt is active + 1 + + + + + RD_REQ + This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in a wait state (SCL=0) until this interrupt is serviced, which means that the slave has been addressed by a remote master that is asking for data to be transferred. The processor must respond to this interrupt and then write the requested data to the IC_DATA_CMD register. This bit is set to 0 just after the processor reads the IC_CLR_RD_REQ register.\n\n + Reset value: 0x0 + [5:5] + read-only + + + INACTIVE + RD_REQ interrupt is inactive + 0 + + + ACTIVE + RD_REQ interrupt is active + 1 + + + + + TX_EMPTY + The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register and the transmission of the address/data from the internal shift register for the most recently popped command is completed. It is automatically cleared by hardware when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0, the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no data within it, so this bit is set to 1, provided there is activity in the master or slave state machines. When there is no longer any activity, then with ic_en=0, this bit is set to 0.\n\n + Reset value: 0x0. + [4:4] + read-only + + + INACTIVE + TX_EMPTY interrupt is inactive + 0 + + + ACTIVE + TX_EMPTY interrupt is active + 1 + + + + + TX_OVER + Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and the processor attempts to issue another I2C command by writing to the IC_DATA_CMD register. When the module is disabled, this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\n\n + Reset value: 0x0 + [3:3] + read-only + + + INACTIVE + TX_OVER interrupt is inactive + 0 + + + ACTIVE + TX_OVER interrupt is active + 1 + + + + + RX_FULL + Set when the receive buffer reaches or goes above the RX_TL threshold in the IC_RX_TL register. It is automatically cleared by hardware when buffer level goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of the activity that continues.\n\n + Reset value: 0x0 + [2:2] + read-only + + + INACTIVE + RX_FULL interrupt is inactive + 0 + + + ACTIVE + RX_FULL interrupt is active + 1 + + + + + RX_OVER + Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an additional byte is received from an external I2C device. The DW_apb_i2c acknowledges this, but any data bytes received after the FIFO is full are lost. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\n\n + Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never overflows.\n\n + Reset value: 0x0 + [1:1] + read-only + + + INACTIVE + RX_OVER interrupt is inactive + 0 + + + ACTIVE + RX_OVER interrupt is active + 1 + + + + + RX_UNDER + Set if the processor attempts to read the receive buffer when it is empty by reading from the IC_DATA_CMD register. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\n\n + Reset value: 0x0 + [0:0] + read-only + + + INACTIVE + RX_UNDER interrupt is inactive + 0 + + + ACTIVE + RX_UNDER interrupt is active + 1 + + + + + + + IC_RX_TL + I2C Receive FIFO Threshold Register + 0x0038 + 0x00000000 + + + RX_TL + Receive FIFO Threshold Level.\n\n + Controls the level of entries (or above) that triggers the RX_FULL interrupt (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that hardware does not allow this value to be set to a value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 1 entry, and a value of 255 sets the threshold for 256 entries. + [7:0] + read-write + + + + + IC_TX_TL + I2C Transmit FIFO Threshold Register + 0x003c + 0x00000000 + + + TX_TL + Transmit FIFO Threshold Level.\n\n + Controls the level of entries (or below) that trigger the TX_EMPTY interrupt (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that it may not be set to value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and a value of 255 sets the threshold for 255 entries. + [7:0] + read-write + + + + + IC_CLR_INTR + Clear Combined and Individual Interrupt Register + 0x0040 + 0x00000000 + + + CLR_INTR + Read this register to clear the combined interrupt, all individual interrupts, and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable interrupts but software clearable interrupts. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_RX_UNDER + Clear RX_UNDER Interrupt Register + 0x0044 + 0x00000000 + + + CLR_RX_UNDER + Read this register to clear the RX_UNDER interrupt (bit 0) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_RX_OVER + Clear RX_OVER Interrupt Register + 0x0048 + 0x00000000 + + + CLR_RX_OVER + Read this register to clear the RX_OVER interrupt (bit 1) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_TX_OVER + Clear TX_OVER Interrupt Register + 0x004c + 0x00000000 + + + CLR_TX_OVER + Read this register to clear the TX_OVER interrupt (bit 3) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_RD_REQ + Clear RD_REQ Interrupt Register + 0x0050 + 0x00000000 + + + CLR_RD_REQ + Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_TX_ABRT + Clear TX_ABRT Interrupt Register + 0x0054 + 0x00000000 + + + CLR_TX_ABRT + Read this register to clear the TX_ABRT interrupt (bit 6) of the IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also releases the TX FIFO from the flushed/reset state, allowing more writes to the TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_RX_DONE + Clear RX_DONE Interrupt Register + 0x0058 + 0x00000000 + + + CLR_RX_DONE + Read this register to clear the RX_DONE interrupt (bit 7) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_ACTIVITY + Clear ACTIVITY Interrupt Register + 0x005c + 0x00000000 + + + CLR_ACTIVITY + Reading this register clears the ACTIVITY interrupt if the I2C is not active anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt bit continues to be set. It is automatically cleared by hardware if the module is disabled and if there is no further activity on the bus. The value read from this register to get status of the ACTIVITY interrupt (bit 8) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_STOP_DET + Clear STOP_DET Interrupt Register + 0x0060 + 0x00000000 + + + CLR_STOP_DET + Read this register to clear the STOP_DET interrupt (bit 9) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_START_DET + Clear START_DET Interrupt Register + 0x0064 + 0x00000000 + + + CLR_START_DET + Read this register to clear the START_DET interrupt (bit 10) of the IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_CLR_GEN_CALL + Clear GEN_CALL Interrupt Register + 0x0068 + 0x00000000 + + + CLR_GEN_CALL + Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_ENABLE + I2C Enable Register + 0x006c + 0x00000000 + + + TX_CMD_BLOCK + In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus automatically, as soon as the first data is available in the Tx FIFO. Note: To block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0). Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit is unset. Reset value: IC_TX_CMD_BLOCK_DEFAULT + [2:2] + read-write + + + NOT_BLOCKED + Tx Command execution not blocked + 0 + + + BLOCKED + Tx Command execution blocked + 1 + + + + + ABORT + When set, the controller initiates the transfer abort. - 0: ABORT not initiated or ABORT done - 1: ABORT operation in progress The software can abort the I2C transfer in master mode by setting this bit. The software can set this bit only when ENABLE is already set; otherwise, the controller ignores any write to ABORT bit. The software cannot clear the ABORT bit once set. In response to an ABORT, the controller issues a STOP and flushes the Tx FIFO after completing the current transfer, then sets the TX_ABORT interrupt after the abort operation. The ABORT bit is cleared automatically after the abort operation.\n\n + For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C Transfers'.\n\n + Reset value: 0x0 + [1:1] + read-write + + + DISABLE + ABORT operation not in progress + 0 + + + ENABLED + ABORT operation in progress + 1 + + + + + ENABLE + Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable DW_apb_i2c while it is active. However, it is important that care be taken to ensure that DW_apb_i2c is disabled properly. A recommended procedure is described in 'Disabling DW_apb_i2c'.\n\n + When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get flushed. - Status bits in the IC_INTR_STAT register are still active until DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well as deletes the contents of the transmit buffer after the current transfer is complete. If the module is receiving, the DW_apb_i2c stops the current transfer at the end of the current byte and does not acknowledge the transfer.\n\n + In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to asynchronous (1), there is a two ic_clk delay when enabling or disabling the DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to 'Disabling DW_apb_i2c'\n\n + Reset value: 0x0 + [0:0] + read-write + + + DISABLED + I2C is disabled + 0 + + + ENABLED + I2C is enabled + 1 + + + + + + + IC_STATUS + I2C Status Register\n\n + This is a read-only register used to indicate the current transfer status and FIFO status. The status register may be read at any time. None of the bits in this register request an interrupt.\n\n + When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0 + 0x0070 + 0x00000006 + + + SLV_ACTIVITY + Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the Slave part of DW_apb_i2c is Active Reset value: 0x0 + [6:6] + read-only + + + IDLE + Slave is idle + 0 + + + ACTIVE + Slave not idle + 1 + + + + + MST_ACTIVITY + Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is the OR of SLV_ACTIVITY and MST_ACTIVITY bits.\n\n + Reset value: 0x0 + [5:5] + read-only + + + IDLE + Master is idle + 0 + + + ACTIVE + Master not idle + 1 + + + + + RFF + Receive FIFO Completely Full. When the receive FIFO is completely full, this bit is set. When the receive FIFO contains one or more empty location, this bit is cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value: 0x0 + [4:4] + read-only + + + NOT_FULL + Rx FIFO not full + 0 + + + FULL + Rx FIFO is full + 1 + + + + + RFNE + Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is empty - 1: Receive FIFO is not empty Reset value: 0x0 + [3:3] + read-only + + + EMPTY + Rx FIFO is empty + 0 + + + NOT_EMPTY + Rx FIFO not empty + 1 + + + + + TFE + Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this bit is set. When it contains one or more valid entries, this bit is cleared. This bit field does not request an interrupt. - 0: Transmit FIFO is not empty - 1: Transmit FIFO is empty Reset value: 0x1 + [2:2] + read-only + + + NON_EMPTY + Tx FIFO not empty + 0 + + + EMPTY + Tx FIFO is empty + 1 + + + + + TFNF + Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1: Transmit FIFO is not full Reset value: 0x1 + [1:1] + read-only + + + FULL + Tx FIFO is full + 0 + + + NOT_FULL + Tx FIFO not full + 1 + + + + + ACTIVITY + I2C Activity Status. Reset value: 0x0 + [0:0] + read-only + + + INACTIVE + I2C is idle + 0 + + + ACTIVE + I2C is active + 1 + + + + + + + IC_TXFLR + I2C Transmit FIFO Level Register This register contains the number of valid data entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is disabled - There is a transmit abort - that is, TX_ABRT bit is set in the IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register increments whenever data is placed into the transmit FIFO and decrements when data is taken from the transmit FIFO. + 0x0074 + 0x00000000 + + + TXFLR + Transmit FIFO Level. Contains the number of valid data entries in the transmit FIFO.\n\n + Reset value: 0x0 + [4:0] + read-only + + + + + IC_RXFLR + I2C Receive FIFO Level Register This register contains the number of valid data entries in the receive FIFO buffer. It is cleared whenever: - The I2C is disabled - Whenever there is a transmit abort caused by any of the events tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed into the receive FIFO and decrements when data is taken from the receive FIFO. + 0x0078 + 0x00000000 + + + RXFLR + Receive FIFO Level. Contains the number of valid data entries in the receive FIFO.\n\n + Reset value: 0x0 + [4:0] + read-only + + + + + IC_SDA_HOLD + I2C SDA Hold Time Length Register\n\n + The bits [15:0] of this register are used to control the hold time of SDA during transmit in both slave and master mode (after SCL goes from HIGH to LOW).\n\n + The bits [23:16] of this register are used to extend the SDA transition (if any) whenever SCL is HIGH in the receiver in either master or slave mode.\n\n + Writes to this register succeed only when IC_ENABLE[0]=0.\n\n + The values in this register are in units of ic_clk period. The value programmed in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one cycle in master mode, seven cycles in slave mode) for the value to be implemented.\n\n + The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at any time the duration of the low part of scl. Therefore the programmed value cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low part of the scl period measured in ic_clk cycles. + 0x007c + 0x00000001 + + + IC_SDA_RX_HOLD + Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a receiver.\n\n + Reset value: IC_DEFAULT_SDA_HOLD[23:16]. + [23:16] + read-write + + + IC_SDA_TX_HOLD + Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a transmitter.\n\n + Reset value: IC_DEFAULT_SDA_HOLD[15:0]. + [15:0] + read-write + + + + + IC_TX_ABRT_SOURCE + I2C Transmit Abort Source Register\n\n + This register has 32 bits that indicate the source of the TX_ABRT bit. Except for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the IC_CLR_INTR register is read. To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]).\n\n + Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9 clears for one cycle and is then re-asserted. + 0x0080 + 0x00000000 + + + TX_FLUSH_CNT + This field indicates the number of Tx FIFO Data Commands which are flushed due to TX_ABRT interrupt. It is cleared whenever I2C is disabled.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter + [31:23] + read-only + + + ABRT_USER_ABRT + This is a master-mode-only bit. Master has detected the transfer abort (IC_ENABLE[1])\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter + [16:16] + read-only + + + ABRT_USER_ABRT_VOID + Transfer abort detected by master- scenario not present + 0 + + + ABRT_USER_ABRT_GENERATED + Transfer abort detected by master + 1 + + + + + ABRT_SLVRD_INTX + 1: When the processor side responds to a slave mode request for data to be transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD register.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Slave-Transmitter + [15:15] + read-only + + + ABRT_SLVRD_INTX_VOID + Slave trying to transmit to remote master in read mode- scenario not present + 0 + + + ABRT_SLVRD_INTX_GENERATED + Slave trying to transmit to remote master in read mode + 1 + + + + + ABRT_SLV_ARBLOST + This field indicates that a Slave has lost the bus while transmitting data to a remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note: Even though the slave never 'owns' the bus, something could go wrong on the bus. This is a fail safe check. For instance, during a data transmission at the low-to-high transition of SCL, if what is on the data bus is not what is supposed to be transmitted, then DW_apb_i2c no longer own the bus.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Slave-Transmitter + [14:14] + read-only + + + ABRT_SLV_ARBLOST_VOID + Slave lost arbitration to remote master- scenario not present + 0 + + + ABRT_SLV_ARBLOST_GENERATED + Slave lost arbitration to remote master + 1 + + + + + ABRT_SLVFLUSH_TXFIFO + This field specifies that the Slave has received a read command and some data exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data in TX FIFO.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Slave-Transmitter + [13:13] + read-only + + + ABRT_SLVFLUSH_TXFIFO_VOID + Slave flushes existing data in TX-FIFO upon getting read command- scenario not present + 0 + + + ABRT_SLVFLUSH_TXFIFO_GENERATED + Slave flushes existing data in TX-FIFO upon getting read command + 1 + + + + + ARB_LOST + This field specifies that the Master has lost arbitration, or if IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost arbitration.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter + [12:12] + read-only + + + ABRT_LOST_VOID + Master or Slave-Transmitter lost arbitration- scenario not present + 0 + + + ABRT_LOST_GENERATED + Master or Slave-Transmitter lost arbitration + 1 + + + + + ABRT_MASTER_DIS + This field indicates that the User tries to initiate a Master operation with the Master mode disabled.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + [11:11] + read-only + + + ABRT_MASTER_DIS_VOID + User initiating master operation when MASTER disabled- scenario not present + 0 + + + ABRT_MASTER_DIS_GENERATED + User initiating master operation when MASTER disabled + 1 + + + + + ABRT_10B_RD_NORSTRT + This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the master sends a read command in 10-bit addressing mode.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Receiver + [10:10] + read-only + + + ABRT_10B_RD_VOID + Master not trying to read in 10Bit addressing mode when RESTART disabled + 0 + + + ABRT_10B_RD_GENERATED + Master trying to read in 10Bit addressing mode when RESTART disabled + 1 + + + + + ABRT_SBYTE_NORSTRT + To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9 clears for one cycle and then gets reasserted. When this field is set to 1, the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to send a START Byte.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master + [9:9] + read-only + + + ABRT_SBYTE_NORSTRT_VOID + User trying to send START byte when RESTART disabled- scenario not present + 0 + + + ABRT_SBYTE_NORSTRT_GENERATED + User trying to send START byte when RESTART disabled + 1 + + + + + ABRT_HS_NORSTRT + This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to use the master to transfer data in High Speed mode.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + [8:8] + read-only + + + ABRT_HS_NORSTRT_VOID + User trying to switch Master to HS mode when RESTART disabled- scenario not present + 0 + + + ABRT_HS_NORSTRT_GENERATED + User trying to switch Master to HS mode when RESTART disabled + 1 + + + + + ABRT_SBYTE_ACKDET + This field indicates that the Master has sent a START Byte and the START Byte was acknowledged (wrong behavior).\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master + [7:7] + read-only + + + ABRT_SBYTE_ACKDET_VOID + ACK detected for START byte- scenario not present + 0 + + + ABRT_SBYTE_ACKDET_GENERATED + ACK detected for START byte + 1 + + + + + ABRT_HS_ACKDET + This field indicates that the Master is in High Speed mode and the High Speed Master code was acknowledged (wrong behavior).\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master + [6:6] + read-only + + + ABRT_HS_ACK_VOID + HS Master code ACKed in HS Mode- scenario not present + 0 + + + ABRT_HS_ACK_GENERATED + HS Master code ACKed in HS Mode + 1 + + + + + ABRT_GCALL_READ + This field indicates that DW_apb_i2c in the master mode has sent a General Call but the user programmed the byte following the General Call to be a read from the bus (IC_DATA_CMD[9] is set to 1).\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter + [5:5] + read-only + + + ABRT_GCALL_READ_VOID + GCALL is followed by read from bus-scenario not present + 0 + + + ABRT_GCALL_READ_GENERATED + GCALL is followed by read from bus + 1 + + + + + ABRT_GCALL_NOACK + This field indicates that DW_apb_i2c in master mode has sent a General Call and no slave on the bus acknowledged the General Call.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter + [4:4] + read-only + + + ABRT_GCALL_NOACK_VOID + GCALL not ACKed by any slave-scenario not present + 0 + + + ABRT_GCALL_NOACK_GENERATED + GCALL not ACKed by any slave + 1 + + + + + ABRT_TXDATA_NOACK + This field indicates the master-mode only bit. When the master receives an acknowledgement for the address, but when it sends data byte(s) following the address, it did not receive an acknowledge from the remote slave(s).\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter + [3:3] + read-only + + + ABRT_TXDATA_NOACK_VOID + Transmitted data non-ACKed by addressed slave-scenario not present + 0 + + + ABRT_TXDATA_NOACK_GENERATED + Transmitted data not ACKed by addressed slave + 1 + + + + + ABRT_10ADDR2_NOACK + This field indicates that the Master is in 10-bit address mode and that the second address byte of the 10-bit address was not acknowledged by any slave.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + [2:2] + read-only + + + INACTIVE + This abort is not generated + 0 + + + ACTIVE + Byte 2 of 10Bit Address not ACKed by any slave + 1 + + + + + ABRT_10ADDR1_NOACK + This field indicates that the Master is in 10-bit address mode and the first 10-bit address byte was not acknowledged by any slave.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + [1:1] + read-only + + + INACTIVE + This abort is not generated + 0 + + + ACTIVE + Byte 1 of 10Bit Address not ACKed by any slave + 1 + + + + + ABRT_7B_ADDR_NOACK + This field indicates that the Master is in 7-bit addressing mode and the address sent was not acknowledged by any slave.\n\n + Reset value: 0x0\n\n + Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + [0:0] + read-only + + + INACTIVE + This abort is not generated + 0 + + + ACTIVE + This abort is generated because of NOACK for 7-bit address + 1 + + + + + + + IC_SLV_DATA_NACK_ONLY + Generate Slave Data NACK Register\n\n + The register is used to generate a NACK for the data part of a transfer when DW_apb_i2c is acting as a slave-receiver. This register only exists when the IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this register does not exist and writing to the register's address has no effect.\n\n + A write can occur on this register if both of the following conditions are met: - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for the internal slv_activity signal; the user should poll this before writing the ic_slv_data_nack_only bit. + 0x0084 + 0x00000000 + + + NACK + Generate NACK. This NACK generation only occurs when DW_apb_i2c is a slave-receiver. If this register is set to a value of 1, it can only generate a NACK after a data byte is received; hence, the data transfer is aborted and the data received is not pushed to the receive buffer.\n\n + When the register is set to a value of 0, it generates NACK/ACK, depending on normal criteria. - 1: generate NACK after data byte received - 0: generate NACK/ACK normally Reset value: 0x0 + [0:0] + read-write + + + DISABLED + Slave receiver generates NACK normally + 0 + + + ENABLED + Slave receiver generates NACK upon data reception only + 1 + + + + + + + IC_DMA_CR + DMA Control Register\n\n + The register is used to enable the DMA Controller interface operation. There is a separate bit for transmit and receive. This can be programmed regardless of the state of IC_ENABLE. + 0x0088 + 0x00000000 + + + TDMAE + Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel. Reset value: 0x0 + [1:1] + read-write + + + DISABLED + transmit FIFO DMA channel disabled + 0 + + + ENABLED + Transmit FIFO DMA channel enabled + 1 + + + + + RDMAE + Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel. Reset value: 0x0 + [0:0] + read-write + + + DISABLED + Receive FIFO DMA channel disabled + 0 + + + ENABLED + Receive FIFO DMA channel enabled + 1 + + + + + + + IC_DMA_TDLR + DMA Transmit Data Level Register + 0x008c + 0x00000000 + + + DMATDL + Transmit Data Level. This bit field controls the level at which a DMA request is made by the transmit logic. It is equal to the watermark level; that is, the dma_tx_req signal is generated when the number of valid data entries in the transmit FIFO is equal to or below this field value, and TDMAE = 1.\n\n + Reset value: 0x0 + [3:0] + read-write + + + + + IC_DMA_RDLR + I2C Receive Data Level Register + 0x0090 + 0x00000000 + + + DMARDL + Receive Data Level. This bit field controls the level at which a DMA request is made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req is generated when the number of valid data entries in the receive FIFO is equal to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is 0, then dma_rx_req is asserted when 1 or more data entries are present in the receive FIFO.\n\n + Reset value: 0x0 + [3:0] + read-write + + + + + IC_SDA_SETUP + I2C SDA Setup Register\n\n + This register controls the amount of time delay (in terms of number of ic_clk clock periods) introduced in the rising edge of SCL - relative to SDA changing - when DW_apb_i2c services a read request in a slave-transmitter operation. The relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus Specification. This register must be programmed with a value equal to or greater than 2.\n\n + Writes to this register succeed only when IC_ENABLE[0] = 0.\n\n + Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) * (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they should program a value of 11. The IC_SDA_SETUP register is only used by the DW_apb_i2c when operating as a slave transmitter. + 0x0094 + 0x00000064 + + + SDA_SETUP + SDA Setup. It is recommended that if the required delay is 1000ns, then for an ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11. IC_SDA_SETUP must be programmed with a minimum value of 2. + [7:0] + read-write + + + + + IC_ACK_GENERAL_CALL + I2C ACK General Call Register\n\n + The register controls whether DW_apb_i2c responds with a ACK or NACK when it receives an I2C General Call address.\n\n + This register is applicable only when the DW_apb_i2c is in slave mode. + 0x0098 + 0x00000001 + + + ACK_GEN_CALL + ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with a NACK (by negating ic_data_oe). + [0:0] + read-write + + + DISABLED + Generate NACK for a General Call + 0 + + + ENABLED + Generate ACK for a General Call + 1 + + + + + + + IC_ENABLE_STATUS + I2C Enable Status Register\n\n + The register is used to report the DW_apb_i2c hardware status when the IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is disabled.\n\n + If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced to 1.\n\n + If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is read as '0'.\n\n + Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read as 0 because disabling the DW_apb_i2c depends on I2C bus activities. + 0x009c + 0x00000000 + + + SLV_RX_DATA_LOST + Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has been aborted with at least one data byte received from an I2C transfer due to the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed to have been actively engaged in an aborted I2C transfer (with matching address) and the data phase of the I2C transfer has been entered, even though a data byte has been responded with a NACK.\n\n + Note: If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit is also set to 1.\n\n + When read as 0, DW_apb_i2c is deemed to have been disabled without being actively involved in the data phase of a Slave-Receiver transfer.\n\n + Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n + Reset value: 0x0 + [2:2] + read-only + + + INACTIVE + Slave RX Data is not lost + 0 + + + ACTIVE + Slave RX Data is lost + 1 + + + + + SLV_DISABLED_WHILE_BUSY + Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential or active Slave operation has been aborted due to the setting bit 0 of the IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the IC_ENABLE register while:\n\n + (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation from a remote master;\n\n + OR,\n\n + (b) address and data bytes of the Slave-Receiver operation from a remote master.\n\n + When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an I2C transfer, irrespective of whether the I2C address matches the slave address set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before IC_ENABLE is set to 0 but has not taken effect.\n\n + Note: If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit will also be set to 1.\n\n + When read as 0, DW_apb_i2c is deemed to have been disabled when there is master activity, or when the I2C bus is idle.\n\n + Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n + Reset value: 0x0 + [1:1] + read-only + + + INACTIVE + Slave is disabled when it is idle + 0 + + + ACTIVE + Slave is disabled when it is active + 1 + + + + + IC_EN + ic_en Status. This bit always reflects the value driven on the output port ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When read as 0, DW_apb_i2c is deemed completely inactive. Note: The CPU can safely read this bit anytime. When this bit is read as 0, the CPU can safely read SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).\n\n + Reset value: 0x0 + [0:0] + read-only + + + DISABLED + I2C disabled + 0 + + + ENABLED + I2C enabled + 1 + + + + + + + IC_FS_SPKLEN + I2C SS, FS or FM+ spike suppression limit\n\n + This register is used to store the duration, measured in ic_clk cycles, of the longest spike that is filtered out by the spike suppression logic when the component is operating in SS, FS or FM+ modes. The relevant I2C requirement is tSP (table 4) as detailed in the I2C Bus Specification. This register must be programmed with a minimum value of 1. + 0x00a0 + 0x00000007 + + + IC_FS_SPKLEN + This register must be set before any I2C bus transaction can take place to ensure stable operation. This register sets the duration, measured in ic_clk cycles, of the longest spike in the SCL or SDA lines that will be filtered out by the spike suppression logic. This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect. The minimum valid value is 1; hardware prevents values less than this being written, and if attempted results in 1 being set. or more information, refer to 'Spike Suppression'. + [7:0] + read-write + + + + + IC_CLR_RESTART_DET + Clear RESTART_DET Interrupt Register + 0x00a8 + 0x00000000 + + + CLR_RESTART_DET + Read this register to clear the RESTART_DET interrupt (bit 12) of IC_RAW_INTR_STAT register.\n\n + Reset value: 0x0 + [0:0] + read-only + + + + + IC_COMP_PARAM_1 + Component Parameter Register 1\n\n + Note This register is not implemented and therefore reads as 0. If it was implemented it would be a constant read-only register that contains encoded information about the component's parameter settings. Fields shown below are the settings for those parameters + 0x00f4 + 0x00000000 + + + TX_BUFFER_DEPTH + TX Buffer Depth = 16 + [23:16] + read-only + + + RX_BUFFER_DEPTH + RX Buffer Depth = 16 + [15:8] + read-only + + + ADD_ENCODED_PARAMS + Encoded parameters not visible + [7:7] + read-only + + + HAS_DMA + DMA handshaking signals are enabled + [6:6] + read-only + + + INTR_IO + COMBINED Interrupt outputs + [5:5] + read-only + + + HC_COUNT_VALUES + Programmable count values for each mode. + [4:4] + read-only + + + MAX_SPEED_MODE + MAX SPEED MODE = FAST MODE + [3:2] + read-only + + + APB_DATA_WIDTH + APB data bus width is 32 bits + [1:0] + read-only + + + + + IC_COMP_VERSION + I2C Component Version Register + 0x00f8 + 0x3230312a + + + IC_COMP_VERSION + [31:0] + read-only + + + + + IC_COMP_TYPE + I2C Component Type Register + 0x00fc + 0x44570140 + + + IC_COMP_TYPE + Designware Component Type number = 0x44_57_01_40. This assigned unique hex value is constant and is derived from the two ASCII letters 'DW' followed by a 16-bit unsigned number. + [31:0] + read-only + + + + + + + I2C1 + 0x40048000 + + I2C1_IRQ + 24 + + + + ADC + 2 + Control and data interface to SAR ADC + 0x4004c000 + 32 + + 0 + 0x1000 + registers + + + ADC_IRQ_FIFO + 22 + + + + CS + ADC Control and Status + 0x0000 + 0x00000000 + + + RROBIN + Round-robin sampling. 1 bit per channel. Set all bits to 0 to disable.\n + Otherwise, the ADC will cycle through each enabled channel in a round-robin fashion.\n + The first channel to be sampled will be the one currently indicated by AINSEL.\n + AINSEL will be updated after each conversion with the newly-selected channel. + [20:16] + read-write + + + AINSEL + Select analog mux input. Updated automatically in round-robin mode. + [14:12] + read-write + + + ERR_STICKY + Some past ADC conversion encountered an error. Write 1 to clear. + [10:10] + read-write + oneToClear + + + ERR + The most recent ADC conversion encountered an error; result is undefined or noisy. + [9:9] + read-only + + + READY + 1 if the ADC is ready to start a new conversion. Implies any previous conversion has completed.\n + 0 whilst conversion in progress. + [8:8] + read-only + + + START_MANY + Continuously perform conversions whilst this bit is 1. A new conversion will start immediately after the previous finishes. + [3:3] + read-write + + + START_ONCE + Start a single conversion. Self-clearing. Ignored if start_many is asserted. + [2:2] + read-write + clear + + + TS_EN + Power on temperature sensor. 1 - enabled. 0 - disabled. + [1:1] + read-write + + + EN + Power on ADC and enable its clock.\n + 1 - enabled. 0 - disabled. + [0:0] + read-write + + + + + RESULT + Result of most recent ADC conversion + 0x0004 + 0x00000000 + + + RESULT + [11:0] + read-only + + + + + FCS + FIFO control and status + 0x0008 + 0x00000000 + + + THRESH + DREQ/IRQ asserted when level >= threshold + [27:24] + read-write + + + LEVEL + The number of conversion results currently waiting in the FIFO + [19:16] + read-only + + + OVER + 1 if the FIFO has been overflowed. Write 1 to clear. + [11:11] + read-write + oneToClear + + + UNDER + 1 if the FIFO has been underflowed. Write 1 to clear. + [10:10] + read-write + oneToClear + + + FULL + [9:9] + read-only + + + EMPTY + [8:8] + read-only + + + DREQ_EN + If 1: assert DMA requests when FIFO contains data + [3:3] + read-write + + + ERR + If 1: conversion error bit appears in the FIFO alongside the result + [2:2] + read-write + + + SHIFT + If 1: FIFO results are right-shifted to be one byte in size. Enables DMA to byte buffers. + [1:1] + read-write + + + EN + If 1: write result to the FIFO after each conversion. + [0:0] + read-write + + + + + FIFO + Conversion result FIFO + 0x000c + 0x00000000 + + + ERR + 1 if this particular sample experienced a conversion error. Remains in the same location if the sample is shifted. + [15:15] + read-only + + + VAL + [11:0] + read-only + + + + + DIV + Clock divider. If non-zero, CS_START_MANY will start conversions\n + at regular intervals rather than back-to-back.\n + The divider is reset when either of these fields are written.\n + Total period is 1 + INT + FRAC / 256 + 0x0010 + 0x00000000 + + + INT + Integer part of clock divisor. + [23:8] + read-write + + + FRAC + Fractional part of clock divisor. First-order delta-sigma. + [7:0] + read-write + + + + + INTR + Raw Interrupts + 0x0014 + 0x00000000 + + + FIFO + Triggered when the sample FIFO reaches a certain level.\n + This level can be programmed via the FCS_THRESH field. + [0:0] + read-only + + + + + INTE + Interrupt Enable + 0x0018 + 0x00000000 + + + FIFO + Triggered when the sample FIFO reaches a certain level.\n + This level can be programmed via the FCS_THRESH field. + [0:0] + read-write + + + + + INTF + Interrupt Force + 0x001c + 0x00000000 + + + FIFO + Triggered when the sample FIFO reaches a certain level.\n + This level can be programmed via the FCS_THRESH field. + [0:0] + read-write + + + + + INTS + Interrupt status after masking & forcing + 0x0020 + 0x00000000 + + + FIFO + Triggered when the sample FIFO reaches a certain level.\n + This level can be programmed via the FCS_THRESH field. + [0:0] + read-only + + + + + + + PWM + 1 + Simple PWM + 0x40050000 + 32 + + 0 + 0x1000 + registers + + + PWM_IRQ_WRAP + 4 + + + + CH0_CSR + Control and status register + 0x0000 + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH0_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x0004 + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH0_CTR + Direct access to the PWM counter + 0x0008 + 0x00000000 + + + CH0_CTR + [15:0] + read-write + + + + + CH0_CC + Counter compare values + 0x000c + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH0_TOP + Counter wrap value + 0x0010 + 0x0000ffff + + + CH0_TOP + [15:0] + read-write + + + + + CH1_CSR + Control and status register + 0x0014 + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH1_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x0018 + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH1_CTR + Direct access to the PWM counter + 0x001c + 0x00000000 + + + CH1_CTR + [15:0] + read-write + + + + + CH1_CC + Counter compare values + 0x0020 + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH1_TOP + Counter wrap value + 0x0024 + 0x0000ffff + + + CH1_TOP + [15:0] + read-write + + + + + CH2_CSR + Control and status register + 0x0028 + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH2_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x002c + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH2_CTR + Direct access to the PWM counter + 0x0030 + 0x00000000 + + + CH2_CTR + [15:0] + read-write + + + + + CH2_CC + Counter compare values + 0x0034 + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH2_TOP + Counter wrap value + 0x0038 + 0x0000ffff + + + CH2_TOP + [15:0] + read-write + + + + + CH3_CSR + Control and status register + 0x003c + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH3_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x0040 + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH3_CTR + Direct access to the PWM counter + 0x0044 + 0x00000000 + + + CH3_CTR + [15:0] + read-write + + + + + CH3_CC + Counter compare values + 0x0048 + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH3_TOP + Counter wrap value + 0x004c + 0x0000ffff + + + CH3_TOP + [15:0] + read-write + + + + + CH4_CSR + Control and status register + 0x0050 + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH4_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x0054 + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH4_CTR + Direct access to the PWM counter + 0x0058 + 0x00000000 + + + CH4_CTR + [15:0] + read-write + + + + + CH4_CC + Counter compare values + 0x005c + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH4_TOP + Counter wrap value + 0x0060 + 0x0000ffff + + + CH4_TOP + [15:0] + read-write + + + + + CH5_CSR + Control and status register + 0x0064 + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH5_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x0068 + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH5_CTR + Direct access to the PWM counter + 0x006c + 0x00000000 + + + CH5_CTR + [15:0] + read-write + + + + + CH5_CC + Counter compare values + 0x0070 + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH5_TOP + Counter wrap value + 0x0074 + 0x0000ffff + + + CH5_TOP + [15:0] + read-write + + + + + CH6_CSR + Control and status register + 0x0078 + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH6_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x007c + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH6_CTR + Direct access to the PWM counter + 0x0080 + 0x00000000 + + + CH6_CTR + [15:0] + read-write + + + + + CH6_CC + Counter compare values + 0x0084 + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH6_TOP + Counter wrap value + 0x0088 + 0x0000ffff + + + CH6_TOP + [15:0] + read-write + + + + + CH7_CSR + Control and status register + 0x008c + 0x00000000 + + + PH_ADV + Advance the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running\n + at less than full speed (div_int + div_frac / 16 > 1) + [7:7] + read-write + clear + + + PH_RET + Retard the phase of the counter by 1 count, while it is running.\n + Self-clearing. Write a 1, and poll until low. Counter must be running. + [6:6] + read-write + clear + + + DIVMODE + [5:4] + read-write + + + div + Free-running counting at rate dictated by fractional divider + 0 + + + level + Fractional divider operation is gated by the PWM B pin. + 1 + + + rise + Counter advances with each rising edge of the PWM B pin. + 2 + + + fall + Counter advances with each falling edge of the PWM B pin. + 3 + + + + + B_INV + Invert output B + [3:3] + read-write + + + A_INV + Invert output A + [2:2] + read-write + + + PH_CORRECT + 1: Enable phase-correct modulation. 0: Trailing-edge + [1:1] + read-write + + + EN + Enable the PWM channel. + [0:0] + read-write + + + + + CH7_DIV + INT and FRAC form a fixed-point fractional number.\n + Counting rate is system clock frequency divided by this number.\n + Fractional division uses simple 1st-order sigma-delta. + 0x0090 + 0x00000010 + + + INT + [11:4] + read-write + + + FRAC + [3:0] + read-write + + + + + CH7_CTR + Direct access to the PWM counter + 0x0094 + 0x00000000 + + + CH7_CTR + [15:0] + read-write + + + + + CH7_CC + Counter compare values + 0x0098 + 0x00000000 + + + B + [31:16] + read-write + + + A + [15:0] + read-write + + + + + CH7_TOP + Counter wrap value + 0x009c + 0x0000ffff + + + CH7_TOP + [15:0] + read-write + + + + + EN + This register aliases the CSR_EN bits for all channels.\n + Writing to this register allows multiple channels to be enabled\n + or disabled simultaneously, so they can run in perfect sync.\n + For each channel, there is only one physical EN register bit,\n + which can be accessed through here or CHx_CSR. + 0x00a0 + 0x00000000 + + + CH7 + [7:7] + read-write + + + CH6 + [6:6] + read-write + + + CH5 + [5:5] + read-write + + + CH4 + [4:4] + read-write + + + CH3 + [3:3] + read-write + + + CH2 + [2:2] + read-write + + + CH1 + [1:1] + read-write + + + CH0 + [0:0] + read-write + + + + + INTR + Raw Interrupts + 0x00a4 + 0x00000000 + + + CH7 + [7:7] + read-write + oneToClear + + + CH6 + [6:6] + read-write + oneToClear + + + CH5 + [5:5] + read-write + oneToClear + + + CH4 + [4:4] + read-write + oneToClear + + + CH3 + [3:3] + read-write + oneToClear + + + CH2 + [2:2] + read-write + oneToClear + + + CH1 + [1:1] + read-write + oneToClear + + + CH0 + [0:0] + read-write + oneToClear + + + + + INTE + Interrupt Enable + 0x00a8 + 0x00000000 + + + CH7 + [7:7] + read-write + + + CH6 + [6:6] + read-write + + + CH5 + [5:5] + read-write + + + CH4 + [4:4] + read-write + + + CH3 + [3:3] + read-write + + + CH2 + [2:2] + read-write + + + CH1 + [1:1] + read-write + + + CH0 + [0:0] + read-write + + + + + INTF + Interrupt Force + 0x00ac + 0x00000000 + + + CH7 + [7:7] + read-write + + + CH6 + [6:6] + read-write + + + CH5 + [5:5] + read-write + + + CH4 + [4:4] + read-write + + + CH3 + [3:3] + read-write + + + CH2 + [2:2] + read-write + + + CH1 + [1:1] + read-write + + + CH0 + [0:0] + read-write + + + + + INTS + Interrupt status after masking & forcing + 0x00b0 + 0x00000000 + + + CH7 + [7:7] + read-only + + + CH6 + [6:6] + read-only + + + CH5 + [5:5] + read-only + + + CH4 + [4:4] + read-only + + + CH3 + [3:3] + read-only + + + CH2 + [2:2] + read-only + + + CH1 + [1:1] + read-only + + + CH0 + [0:0] + read-only + + + + + + + TIMER + 1 + Controls time and alarms\n + time is a 64 bit value indicating the time in usec since power-on\n + timeh is the top 32 bits of time & timel is the bottom 32 bits\n + to change time write to timelw before timehw\n + to read time read from timelr before timehr\n + An alarm is set by setting alarm_enable and writing to the corresponding alarm register\n + When an alarm is pending, the corresponding alarm_running signal will be high\n + An alarm can be cancelled before it has finished by clearing the alarm_enable\n + When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared\n + To clear the interrupt write a 1 to the corresponding alarm_irq + 0x40054000 + 32 + + 0 + 0x1000 + registers + + + TIMER_IRQ_0 + 0 + + + TIMER_IRQ_1 + 1 + + + TIMER_IRQ_2 + 2 + + + TIMER_IRQ_3 + 3 + + + + TIMEHW + Write to bits 63:32 of time\n + always write timelw before timehw + 0x0000 + write-only + 0x00000000 + + + TIMELW + Write to bits 31:0 of time\n + writes do not get copied to time until timehw is written + 0x0004 + write-only + 0x00000000 + + + TIMEHR + Read from bits 63:32 of time\n + always read timelr before timehr + 0x0008 + read-only + 0x00000000 + + + TIMELR + Read from bits 31:0 of time + 0x000c + read-only + 0x00000000 + + + ALARM0 + Arm alarm 0, and configure the time it will fire.\n + Once armed, the alarm fires when TIMER_ALARM0 == TIMELR.\n + The alarm will disarm itself once it fires, and can\n + be disarmed early using the ARMED status register. + 0x0010 + read-write + 0x00000000 + + + ALARM1 + Arm alarm 1, and configure the time it will fire.\n + Once armed, the alarm fires when TIMER_ALARM1 == TIMELR.\n + The alarm will disarm itself once it fires, and can\n + be disarmed early using the ARMED status register. + 0x0014 + read-write + 0x00000000 + + + ALARM2 + Arm alarm 2, and configure the time it will fire.\n + Once armed, the alarm fires when TIMER_ALARM2 == TIMELR.\n + The alarm will disarm itself once it fires, and can\n + be disarmed early using the ARMED status register. + 0x0018 + read-write + 0x00000000 + + + ALARM3 + Arm alarm 3, and configure the time it will fire.\n + Once armed, the alarm fires when TIMER_ALARM3 == TIMELR.\n + The alarm will disarm itself once it fires, and can\n + be disarmed early using the ARMED status register. + 0x001c + read-write + 0x00000000 + + + ARMED + Indicates the armed/disarmed status of each alarm.\n + A write to the corresponding ALARMx register arms the alarm.\n + Alarms automatically disarm upon firing, but writing ones here\n + will disarm immediately without waiting to fire. + 0x0020 + 0x00000000 + + + ARMED + [3:0] + read-write + oneToClear + + + + + TIMERAWH + Raw read from bits 63:32 of time (no side effects) + 0x0024 + read-only + 0x00000000 + + + TIMERAWL + Raw read from bits 31:0 of time (no side effects) + 0x0028 + read-only + 0x00000000 + + + DBGPAUSE + Set bits high to enable pause when the corresponding debug ports are active + 0x002c + 0x00000007 + + + DBG1 + Pause when processor 1 is in debug mode + [2:2] + read-write + + + DBG0 + Pause when processor 0 is in debug mode + [1:1] + read-write + + + + + PAUSE + Set high to pause the timer + 0x0030 + 0x00000000 + + + PAUSE + [0:0] + read-write + + + + + INTR + Raw Interrupts + 0x0034 + 0x00000000 + + + ALARM_3 + [3:3] + read-write + oneToClear + + + ALARM_2 + [2:2] + read-write + oneToClear + + + ALARM_1 + [1:1] + read-write + oneToClear + + + ALARM_0 + [0:0] + read-write + oneToClear + + + + + INTE + Interrupt Enable + 0x0038 + 0x00000000 + + + ALARM_3 + [3:3] + read-write + + + ALARM_2 + [2:2] + read-write + + + ALARM_1 + [1:1] + read-write + + + ALARM_0 + [0:0] + read-write + + + + + INTF + Interrupt Force + 0x003c + 0x00000000 + + + ALARM_3 + [3:3] + read-write + + + ALARM_2 + [2:2] + read-write + + + ALARM_1 + [1:1] + read-write + + + ALARM_0 + [0:0] + read-write + + + + + INTS + Interrupt status after masking & forcing + 0x0040 + 0x00000000 + + + ALARM_3 + [3:3] + read-only + + + ALARM_2 + [2:2] + read-only + + + ALARM_1 + [1:1] + read-only + + + ALARM_0 + [0:0] + read-only + + + + + + + WATCHDOG + 1 + 0x40058000 + 32 + + 0 + 0x1000 + registers + + + + CTRL + Watchdog control\n + The rst_wdsel register determines which subsystems are reset when the watchdog is triggered.\n + The watchdog can be triggered in software. + 0x0000 + 0x07000000 + + + TRIGGER + Trigger a watchdog reset + [31:31] + read-write + clear + + + ENABLE + When not enabled the watchdog timer is paused + [30:30] + read-write + + + PAUSE_DBG1 + Pause the watchdog timer when processor 1 is in debug mode + [26:26] + read-write + + + PAUSE_DBG0 + Pause the watchdog timer when processor 0 is in debug mode + [25:25] + read-write + + + PAUSE_JTAG + Pause the watchdog timer when JTAG is accessing the bus fabric + [24:24] + read-write + + + TIME + Indicates the number of ticks / 2 (see errata RP2040-E1) before a watchdog reset will be triggered + [23:0] + read-only + + + + + LOAD + Load the watchdog timer. The maximum setting is 0xffffff which corresponds to 0xffffff / 2 ticks before triggering a watchdog reset (see errata RP2040-E1). + 0x0004 + 0x00000000 + + + LOAD + [23:0] + write-only + + + + + REASON + Logs the reason for the last reset. Both bits are zero for the case of a hardware reset. + 0x0008 + 0x00000000 + + + FORCE + [1:1] + read-only + + + TIMER + [0:0] + read-only + + + + + SCRATCH0 + Scratch register. Information persists through soft reset of the chip. + 0x000c + read-write + 0x00000000 + + + SCRATCH1 + Scratch register. Information persists through soft reset of the chip. + 0x0010 + read-write + 0x00000000 + + + SCRATCH2 + Scratch register. Information persists through soft reset of the chip. + 0x0014 + read-write + 0x00000000 + + + SCRATCH3 + Scratch register. Information persists through soft reset of the chip. + 0x0018 + read-write + 0x00000000 + + + SCRATCH4 + Scratch register. Information persists through soft reset of the chip. + 0x001c + read-write + 0x00000000 + + + SCRATCH5 + Scratch register. Information persists through soft reset of the chip. + 0x0020 + read-write + 0x00000000 + + + SCRATCH6 + Scratch register. Information persists through soft reset of the chip. + 0x0024 + read-write + 0x00000000 + + + SCRATCH7 + Scratch register. Information persists through soft reset of the chip. + 0x0028 + read-write + 0x00000000 + + + TICK + Controls the tick generator + 0x002c + 0x00000200 + + + COUNT + Count down timer: the remaining number clk_tick cycles before the next tick is generated. + [19:11] + read-only + + + RUNNING + Is the tick generator running? + [10:10] + read-only + + + ENABLE + start / stop tick generation + [9:9] + read-write + + + CYCLES + Total number of clk_tick cycles before the next tick. + [8:0] + read-write + + + + + + + RTC + 1 + Register block to control RTC + 0x4005c000 + 32 + + 0 + 0x1000 + registers + + + RTC_IRQ + 25 + + + + CLKDIV_M1 + Divider minus 1 for the 1 second counter. Safe to change the value when RTC is not enabled. + 0x0000 + 0x00000000 + + + CLKDIV_M1 + [15:0] + read-write + + + + + SETUP_0 + RTC setup register 0 + 0x0004 + 0x00000000 + + + YEAR + Year + [23:12] + read-write + + + MONTH + Month (1..12) + [11:8] + read-write + + + DAY + Day of the month (1..31) + [4:0] + read-write + + + + + SETUP_1 + RTC setup register 1 + 0x0008 + 0x00000000 + + + DOTW + Day of the week: 1-Monday...0-Sunday ISO 8601 mod 7 + [26:24] + read-write + + + HOUR + Hours + [20:16] + read-write + + + MIN + Minutes + [13:8] + read-write + + + SEC + Seconds + [5:0] + read-write + + + + + CTRL + RTC Control and status + 0x000c + 0x00000000 + + + FORCE_NOTLEAPYEAR + If set, leapyear is forced off.\n + Useful for years divisible by 100 but not by 400 + [8:8] + read-write + + + LOAD + Load RTC + [4:4] + read-write + clear + + + RTC_ACTIVE + RTC enabled (running) + [1:1] + read-only + + + RTC_ENABLE + Enable RTC + [0:0] + read-write + + + + + IRQ_SETUP_0 + Interrupt setup register 0 + 0x0010 + 0x00000000 + + + MATCH_ACTIVE + [29:29] + read-only + + + MATCH_ENA + Global match enable. Don't change any other value while this one is enabled + [28:28] + read-write + + + YEAR_ENA + Enable year matching + [26:26] + read-write + + + MONTH_ENA + Enable month matching + [25:25] + read-write + + + DAY_ENA + Enable day matching + [24:24] + read-write + + + YEAR + Year + [23:12] + read-write + + + MONTH + Month (1..12) + [11:8] + read-write + + + DAY + Day of the month (1..31) + [4:0] + read-write + + + + + IRQ_SETUP_1 + Interrupt setup register 1 + 0x0014 + 0x00000000 + + + DOTW_ENA + Enable day of the week matching + [31:31] + read-write + + + HOUR_ENA + Enable hour matching + [30:30] + read-write + + + MIN_ENA + Enable minute matching + [29:29] + read-write + + + SEC_ENA + Enable second matching + [28:28] + read-write + + + DOTW + Day of the week + [26:24] + read-write + + + HOUR + Hours + [20:16] + read-write + + + MIN + Minutes + [13:8] + read-write + + + SEC + Seconds + [5:0] + read-write + + + + + RTC_1 + RTC register 1. + 0x0018 + 0x00000000 + + + YEAR + Year + [23:12] + read-only + + + MONTH + Month (1..12) + [11:8] + read-only + + + DAY + Day of the month (1..31) + [4:0] + read-only + + + + + RTC_0 + RTC register 0\n + Read this before RTC 1! + 0x001c + 0x00000000 + + + DOTW + Day of the week + [26:24] + read-only + + + HOUR + Hours + [20:16] + read-only + + + MIN + Minutes + [13:8] + read-only + + + SEC + Seconds + [5:0] + read-only + + + + + INTR + Raw Interrupts + 0x0020 + 0x00000000 + + + RTC + [0:0] + read-only + + + + + INTE + Interrupt Enable + 0x0024 + 0x00000000 + + + RTC + [0:0] + read-write + + + + + INTF + Interrupt Force + 0x0028 + 0x00000000 + + + RTC + [0:0] + read-write + + + + + INTS + Interrupt status after masking & forcing + 0x002c + 0x00000000 + + + RTC + [0:0] + read-only + + + + + + + ROSC + 1 + 0x40060000 + 32 + + 0 + 0x1000 + registers + + + + CTRL + Ring Oscillator control + 0x0000 + 0x00000aa0 + + + ENABLE + On power-up this field is initialised to ENABLE\n + The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up\n + The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator. + [23:12] + read-write + + + DISABLE + 3358 + + + ENABLE + 4011 + + + + + FREQ_RANGE + Controls the number of delay stages in the ROSC ring\n + LOW uses stages 0 to 7\n + MEDIUM uses stages 0 to 5\n + HIGH uses stages 0 to 3\n + TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications\n + The clock output will not glitch when changing the range up one step at a time\n + The clock output will glitch when changing the range down\n + Note: the values here are gray coded which is why HIGH comes before TOOHIGH + [11:0] + read-write + + + LOW + 4004 + + + MEDIUM + 4005 + + + HIGH + 4007 + + + TOOHIGH + 4006 + + + + + + + FREQA + The FREQA & FREQB registers control the frequency by controlling the drive strength of each stage\n + The drive strength has 4 levels determined by the number of bits set\n + Increasing the number of bits set increases the drive strength and increases the oscillation frequency\n + 0 bits set is the default drive strength\n + 1 bit set doubles the drive strength\n + 2 bits set triples drive strength\n + 3 bits set quadruples drive strength + 0x0004 + 0x00000000 + + + PASSWD + Set to 0x9696 to apply the settings\n + Any other value in this field will set all drive strengths to 0 + [31:16] + read-write + + + PASS + 38550 + + + + + DS3 + Stage 3 drive strength + [14:12] + read-write + + + DS2 + Stage 2 drive strength + [10:8] + read-write + + + DS1 + Stage 1 drive strength + [6:4] + read-write + + + DS0 + Stage 0 drive strength + [2:0] + read-write + + + + + FREQB + For a detailed description see freqa register + 0x0008 + 0x00000000 + + + PASSWD + Set to 0x9696 to apply the settings\n + Any other value in this field will set all drive strengths to 0 + [31:16] + read-write + + + PASS + 38550 + + + + + DS7 + Stage 7 drive strength + [14:12] + read-write + + + DS6 + Stage 6 drive strength + [10:8] + read-write + + + DS5 + Stage 5 drive strength + [6:4] + read-write + + + DS4 + Stage 4 drive strength + [2:0] + read-write + + + + + DORMANT + Ring Oscillator pause control\n + This is used to save power by pausing the ROSC\n + On power-up this field is initialised to WAKE\n + An invalid write will also select WAKE\n + Warning: setup the irq before selecting dormant mode + 0x000c + read-write + 0x00000000 + + + DIV + Controls the output divider + 0x0010 + 0x00000000 + + + DIV + set to 0xaa0 + div where\n + div = 0 divides by 32\n + div = 1-31 divides by div\n + any other value sets div=31\n + this register resets to div=16 + [11:0] + read-write + + + PASS + 2720 + + + + + + + PHASE + Controls the phase shifted output + 0x0014 + 0x00000008 + + + PASSWD + set to 0xaa\n + any other value enables the output with shift=0 + [11:4] + read-write + + + ENABLE + enable the phase-shifted output\n + this can be changed on-the-fly + [3:3] + read-write + + + FLIP + invert the phase-shifted output\n + this is ignored when div=1 + [2:2] + read-write + + + SHIFT + phase shift the phase-shifted output by SHIFT input clocks\n + this can be changed on-the-fly\n + must be set to 0 before setting div=1 + [1:0] + read-write + + + + + STATUS + Ring Oscillator Status + 0x0018 + 0x00000000 + + + STABLE + Oscillator is running and stable + [31:31] + read-only + + + BADWRITE + An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or FREQA or FREQB or DIV or PHASE or DORMANT + [24:24] + read-write + oneToClear + + + DIV_RUNNING + post-divider is running\n + this resets to 0 but transitions to 1 during chip startup + [16:16] + read-only + + + ENABLED + Oscillator is enabled but not necessarily running and stable\n + this resets to 0 but transitions to 1 during chip startup + [12:12] + read-only + + + + + RANDOMBIT + This just reads the state of the oscillator output so randomness is compromised if the ring oscillator is stopped or run at a harmonic of the bus frequency + 0x001c + 0x00000001 + + + RANDOMBIT + [0:0] + read-only + + + + + COUNT + A down counter running at the ROSC frequency which counts to zero and stops.\n + To start the counter write a non-zero value.\n + Can be used for short software pauses when setting up time sensitive hardware. + 0x0020 + 0x00000000 + + + COUNT + [7:0] + read-write + + + + + + + VREG_AND_CHIP_RESET + 1 + control and status for on-chip voltage regulator and chip level reset subsystem + 0x40064000 + 32 + + 0 + 0x1000 + registers + + + + VREG + Voltage regulator control and status + 0x0000 + 0x000000b1 + + + ROK + regulation status\n + 0=not in regulation, 1=in regulation + [12:12] + read-only + + + VSEL + output voltage select\n + 0000 to 0101 - 0.80V\n + 0110 - 0.85V\n + 0111 - 0.90V\n + 1000 - 0.95V\n + 1001 - 1.00V\n + 1010 - 1.05V\n + 1011 - 1.10V (default)\n + 1100 - 1.15V\n + 1101 - 1.20V\n + 1110 - 1.25V\n + 1111 - 1.30V + [7:4] + read-write + + + HIZ + high impedance mode select\n + 0=not in high impedance mode, 1=in high impedance mode + [1:1] + read-write + + + EN + enable\n + 0=not enabled, 1=enabled + [0:0] + read-write + + + + + BOD + brown-out detection control + 0x0004 + 0x00000091 + + + VSEL + threshold select\n + 0000 - 0.473V\n + 0001 - 0.516V\n + 0010 - 0.559V\n + 0011 - 0.602V\n + 0100 - 0.645V\n + 0101 - 0.688V\n + 0110 - 0.731V\n + 0111 - 0.774V\n + 1000 - 0.817V\n + 1001 - 0.860V (default)\n + 1010 - 0.903V\n + 1011 - 0.946V\n + 1100 - 0.989V\n + 1101 - 1.032V\n + 1110 - 1.075V\n + 1111 - 1.118V + [7:4] + read-write + + + EN + enable\n + 0=not enabled, 1=enabled + [0:0] + read-write + + + + + CHIP_RESET + Chip reset control and status + 0x0008 + 0x00000000 + + + PSM_RESTART_FLAG + This is set by psm_restart from the debugger.\n + Its purpose is to branch bootcode to a safe mode when the debugger has issued a psm_restart in order to recover from a boot lock-up.\n + In the safe mode the debugger can repair the boot code, clear this flag then reboot the processor. + [24:24] + read-write + oneToClear + + + HAD_PSM_RESTART + Last reset was from the debug port + [20:20] + read-only + + + HAD_RUN + Last reset was from the RUN pin + [16:16] + read-only + + + HAD_POR + Last reset was from the power-on reset or brown-out detection blocks + [8:8] + read-only + + + + + + + TBMAN + 1 + Testbench manager. Allows the programmer to know what platform their software is running on. + 0x4006c000 + 32 + + 0 + 0x1000 + registers + + + + PLATFORM + Indicates the type of platform in use + 0x0000 + 0x00000005 + + + FPGA + Indicates the platform is an FPGA + [1:1] + read-only + + + ASIC + Indicates the platform is an ASIC + [0:0] + read-only + + + + + + + DMA + 1 + DMA with separate read and write masters + 0x50000000 + 32 + + 0 + 0x1000 + registers + + + DMA_IRQ_0 + 11 + + + DMA_IRQ_1 + 12 + + + + CH0_READ_ADDR + DMA Channel 0 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0000 + read-write + 0x00000000 + + + CH0_WRITE_ADDR + DMA Channel 0 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0004 + read-write + 0x00000000 + + + CH0_TRANS_COUNT + DMA Channel 0 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0008 + read-write + 0x00000000 + + + CH0_CTRL_TRIG + DMA Channel 0 Control and Status + 0x000c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH0_AL1_CTRL + Alias for channel 0 CTRL register + 0x0010 + read-write + 0x00000000 + + + CH0_AL1_READ_ADDR + Alias for channel 0 READ_ADDR register + 0x0014 + read-write + 0x00000000 + + + CH0_AL1_WRITE_ADDR + Alias for channel 0 WRITE_ADDR register + 0x0018 + read-write + 0x00000000 + + + CH0_AL1_TRANS_COUNT_TRIG + Alias for channel 0 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x001c + read-write + 0x00000000 + + + CH0_AL2_CTRL + Alias for channel 0 CTRL register + 0x0020 + read-write + 0x00000000 + + + CH0_AL2_TRANS_COUNT + Alias for channel 0 TRANS_COUNT register + 0x0024 + read-write + 0x00000000 + + + CH0_AL2_READ_ADDR + Alias for channel 0 READ_ADDR register + 0x0028 + read-write + 0x00000000 + + + CH0_AL2_WRITE_ADDR_TRIG + Alias for channel 0 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x002c + read-write + 0x00000000 + + + CH0_AL3_CTRL + Alias for channel 0 CTRL register + 0x0030 + read-write + 0x00000000 + + + CH0_AL3_WRITE_ADDR + Alias for channel 0 WRITE_ADDR register + 0x0034 + read-write + 0x00000000 + + + CH0_AL3_TRANS_COUNT + Alias for channel 0 TRANS_COUNT register + 0x0038 + read-write + 0x00000000 + + + CH0_AL3_READ_ADDR_TRIG + Alias for channel 0 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x003c + read-write + 0x00000000 + + + CH1_READ_ADDR + DMA Channel 1 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0040 + read-write + 0x00000000 + + + CH1_WRITE_ADDR + DMA Channel 1 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0044 + read-write + 0x00000000 + + + CH1_TRANS_COUNT + DMA Channel 1 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0048 + read-write + 0x00000000 + + + CH1_CTRL_TRIG + DMA Channel 1 Control and Status + 0x004c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH1_AL1_CTRL + Alias for channel 1 CTRL register + 0x0050 + read-write + 0x00000000 + + + CH1_AL1_READ_ADDR + Alias for channel 1 READ_ADDR register + 0x0054 + read-write + 0x00000000 + + + CH1_AL1_WRITE_ADDR + Alias for channel 1 WRITE_ADDR register + 0x0058 + read-write + 0x00000000 + + + CH1_AL1_TRANS_COUNT_TRIG + Alias for channel 1 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x005c + read-write + 0x00000000 + + + CH1_AL2_CTRL + Alias for channel 1 CTRL register + 0x0060 + read-write + 0x00000000 + + + CH1_AL2_TRANS_COUNT + Alias for channel 1 TRANS_COUNT register + 0x0064 + read-write + 0x00000000 + + + CH1_AL2_READ_ADDR + Alias for channel 1 READ_ADDR register + 0x0068 + read-write + 0x00000000 + + + CH1_AL2_WRITE_ADDR_TRIG + Alias for channel 1 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x006c + read-write + 0x00000000 + + + CH1_AL3_CTRL + Alias for channel 1 CTRL register + 0x0070 + read-write + 0x00000000 + + + CH1_AL3_WRITE_ADDR + Alias for channel 1 WRITE_ADDR register + 0x0074 + read-write + 0x00000000 + + + CH1_AL3_TRANS_COUNT + Alias for channel 1 TRANS_COUNT register + 0x0078 + read-write + 0x00000000 + + + CH1_AL3_READ_ADDR_TRIG + Alias for channel 1 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x007c + read-write + 0x00000000 + + + CH2_READ_ADDR + DMA Channel 2 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0080 + read-write + 0x00000000 + + + CH2_WRITE_ADDR + DMA Channel 2 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0084 + read-write + 0x00000000 + + + CH2_TRANS_COUNT + DMA Channel 2 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0088 + read-write + 0x00000000 + + + CH2_CTRL_TRIG + DMA Channel 2 Control and Status + 0x008c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH2_AL1_CTRL + Alias for channel 2 CTRL register + 0x0090 + read-write + 0x00000000 + + + CH2_AL1_READ_ADDR + Alias for channel 2 READ_ADDR register + 0x0094 + read-write + 0x00000000 + + + CH2_AL1_WRITE_ADDR + Alias for channel 2 WRITE_ADDR register + 0x0098 + read-write + 0x00000000 + + + CH2_AL1_TRANS_COUNT_TRIG + Alias for channel 2 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x009c + read-write + 0x00000000 + + + CH2_AL2_CTRL + Alias for channel 2 CTRL register + 0x00a0 + read-write + 0x00000000 + + + CH2_AL2_TRANS_COUNT + Alias for channel 2 TRANS_COUNT register + 0x00a4 + read-write + 0x00000000 + + + CH2_AL2_READ_ADDR + Alias for channel 2 READ_ADDR register + 0x00a8 + read-write + 0x00000000 + + + CH2_AL2_WRITE_ADDR_TRIG + Alias for channel 2 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x00ac + read-write + 0x00000000 + + + CH2_AL3_CTRL + Alias for channel 2 CTRL register + 0x00b0 + read-write + 0x00000000 + + + CH2_AL3_WRITE_ADDR + Alias for channel 2 WRITE_ADDR register + 0x00b4 + read-write + 0x00000000 + + + CH2_AL3_TRANS_COUNT + Alias for channel 2 TRANS_COUNT register + 0x00b8 + read-write + 0x00000000 + + + CH2_AL3_READ_ADDR_TRIG + Alias for channel 2 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x00bc + read-write + 0x00000000 + + + CH3_READ_ADDR + DMA Channel 3 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x00c0 + read-write + 0x00000000 + + + CH3_WRITE_ADDR + DMA Channel 3 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x00c4 + read-write + 0x00000000 + + + CH3_TRANS_COUNT + DMA Channel 3 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x00c8 + read-write + 0x00000000 + + + CH3_CTRL_TRIG + DMA Channel 3 Control and Status + 0x00cc + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH3_AL1_CTRL + Alias for channel 3 CTRL register + 0x00d0 + read-write + 0x00000000 + + + CH3_AL1_READ_ADDR + Alias for channel 3 READ_ADDR register + 0x00d4 + read-write + 0x00000000 + + + CH3_AL1_WRITE_ADDR + Alias for channel 3 WRITE_ADDR register + 0x00d8 + read-write + 0x00000000 + + + CH3_AL1_TRANS_COUNT_TRIG + Alias for channel 3 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x00dc + read-write + 0x00000000 + + + CH3_AL2_CTRL + Alias for channel 3 CTRL register + 0x00e0 + read-write + 0x00000000 + + + CH3_AL2_TRANS_COUNT + Alias for channel 3 TRANS_COUNT register + 0x00e4 + read-write + 0x00000000 + + + CH3_AL2_READ_ADDR + Alias for channel 3 READ_ADDR register + 0x00e8 + read-write + 0x00000000 + + + CH3_AL2_WRITE_ADDR_TRIG + Alias for channel 3 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x00ec + read-write + 0x00000000 + + + CH3_AL3_CTRL + Alias for channel 3 CTRL register + 0x00f0 + read-write + 0x00000000 + + + CH3_AL3_WRITE_ADDR + Alias for channel 3 WRITE_ADDR register + 0x00f4 + read-write + 0x00000000 + + + CH3_AL3_TRANS_COUNT + Alias for channel 3 TRANS_COUNT register + 0x00f8 + read-write + 0x00000000 + + + CH3_AL3_READ_ADDR_TRIG + Alias for channel 3 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x00fc + read-write + 0x00000000 + + + CH4_READ_ADDR + DMA Channel 4 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0100 + read-write + 0x00000000 + + + CH4_WRITE_ADDR + DMA Channel 4 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0104 + read-write + 0x00000000 + + + CH4_TRANS_COUNT + DMA Channel 4 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0108 + read-write + 0x00000000 + + + CH4_CTRL_TRIG + DMA Channel 4 Control and Status + 0x010c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH4_AL1_CTRL + Alias for channel 4 CTRL register + 0x0110 + read-write + 0x00000000 + + + CH4_AL1_READ_ADDR + Alias for channel 4 READ_ADDR register + 0x0114 + read-write + 0x00000000 + + + CH4_AL1_WRITE_ADDR + Alias for channel 4 WRITE_ADDR register + 0x0118 + read-write + 0x00000000 + + + CH4_AL1_TRANS_COUNT_TRIG + Alias for channel 4 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x011c + read-write + 0x00000000 + + + CH4_AL2_CTRL + Alias for channel 4 CTRL register + 0x0120 + read-write + 0x00000000 + + + CH4_AL2_TRANS_COUNT + Alias for channel 4 TRANS_COUNT register + 0x0124 + read-write + 0x00000000 + + + CH4_AL2_READ_ADDR + Alias for channel 4 READ_ADDR register + 0x0128 + read-write + 0x00000000 + + + CH4_AL2_WRITE_ADDR_TRIG + Alias for channel 4 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x012c + read-write + 0x00000000 + + + CH4_AL3_CTRL + Alias for channel 4 CTRL register + 0x0130 + read-write + 0x00000000 + + + CH4_AL3_WRITE_ADDR + Alias for channel 4 WRITE_ADDR register + 0x0134 + read-write + 0x00000000 + + + CH4_AL3_TRANS_COUNT + Alias for channel 4 TRANS_COUNT register + 0x0138 + read-write + 0x00000000 + + + CH4_AL3_READ_ADDR_TRIG + Alias for channel 4 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x013c + read-write + 0x00000000 + + + CH5_READ_ADDR + DMA Channel 5 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0140 + read-write + 0x00000000 + + + CH5_WRITE_ADDR + DMA Channel 5 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0144 + read-write + 0x00000000 + + + CH5_TRANS_COUNT + DMA Channel 5 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0148 + read-write + 0x00000000 + + + CH5_CTRL_TRIG + DMA Channel 5 Control and Status + 0x014c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH5_AL1_CTRL + Alias for channel 5 CTRL register + 0x0150 + read-write + 0x00000000 + + + CH5_AL1_READ_ADDR + Alias for channel 5 READ_ADDR register + 0x0154 + read-write + 0x00000000 + + + CH5_AL1_WRITE_ADDR + Alias for channel 5 WRITE_ADDR register + 0x0158 + read-write + 0x00000000 + + + CH5_AL1_TRANS_COUNT_TRIG + Alias for channel 5 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x015c + read-write + 0x00000000 + + + CH5_AL2_CTRL + Alias for channel 5 CTRL register + 0x0160 + read-write + 0x00000000 + + + CH5_AL2_TRANS_COUNT + Alias for channel 5 TRANS_COUNT register + 0x0164 + read-write + 0x00000000 + + + CH5_AL2_READ_ADDR + Alias for channel 5 READ_ADDR register + 0x0168 + read-write + 0x00000000 + + + CH5_AL2_WRITE_ADDR_TRIG + Alias for channel 5 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x016c + read-write + 0x00000000 + + + CH5_AL3_CTRL + Alias for channel 5 CTRL register + 0x0170 + read-write + 0x00000000 + + + CH5_AL3_WRITE_ADDR + Alias for channel 5 WRITE_ADDR register + 0x0174 + read-write + 0x00000000 + + + CH5_AL3_TRANS_COUNT + Alias for channel 5 TRANS_COUNT register + 0x0178 + read-write + 0x00000000 + + + CH5_AL3_READ_ADDR_TRIG + Alias for channel 5 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x017c + read-write + 0x00000000 + + + CH6_READ_ADDR + DMA Channel 6 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0180 + read-write + 0x00000000 + + + CH6_WRITE_ADDR + DMA Channel 6 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0184 + read-write + 0x00000000 + + + CH6_TRANS_COUNT + DMA Channel 6 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0188 + read-write + 0x00000000 + + + CH6_CTRL_TRIG + DMA Channel 6 Control and Status + 0x018c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH6_AL1_CTRL + Alias for channel 6 CTRL register + 0x0190 + read-write + 0x00000000 + + + CH6_AL1_READ_ADDR + Alias for channel 6 READ_ADDR register + 0x0194 + read-write + 0x00000000 + + + CH6_AL1_WRITE_ADDR + Alias for channel 6 WRITE_ADDR register + 0x0198 + read-write + 0x00000000 + + + CH6_AL1_TRANS_COUNT_TRIG + Alias for channel 6 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x019c + read-write + 0x00000000 + + + CH6_AL2_CTRL + Alias for channel 6 CTRL register + 0x01a0 + read-write + 0x00000000 + + + CH6_AL2_TRANS_COUNT + Alias for channel 6 TRANS_COUNT register + 0x01a4 + read-write + 0x00000000 + + + CH6_AL2_READ_ADDR + Alias for channel 6 READ_ADDR register + 0x01a8 + read-write + 0x00000000 + + + CH6_AL2_WRITE_ADDR_TRIG + Alias for channel 6 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x01ac + read-write + 0x00000000 + + + CH6_AL3_CTRL + Alias for channel 6 CTRL register + 0x01b0 + read-write + 0x00000000 + + + CH6_AL3_WRITE_ADDR + Alias for channel 6 WRITE_ADDR register + 0x01b4 + read-write + 0x00000000 + + + CH6_AL3_TRANS_COUNT + Alias for channel 6 TRANS_COUNT register + 0x01b8 + read-write + 0x00000000 + + + CH6_AL3_READ_ADDR_TRIG + Alias for channel 6 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x01bc + read-write + 0x00000000 + + + CH7_READ_ADDR + DMA Channel 7 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x01c0 + read-write + 0x00000000 + + + CH7_WRITE_ADDR + DMA Channel 7 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x01c4 + read-write + 0x00000000 + + + CH7_TRANS_COUNT + DMA Channel 7 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x01c8 + read-write + 0x00000000 + + + CH7_CTRL_TRIG + DMA Channel 7 Control and Status + 0x01cc + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH7_AL1_CTRL + Alias for channel 7 CTRL register + 0x01d0 + read-write + 0x00000000 + + + CH7_AL1_READ_ADDR + Alias for channel 7 READ_ADDR register + 0x01d4 + read-write + 0x00000000 + + + CH7_AL1_WRITE_ADDR + Alias for channel 7 WRITE_ADDR register + 0x01d8 + read-write + 0x00000000 + + + CH7_AL1_TRANS_COUNT_TRIG + Alias for channel 7 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x01dc + read-write + 0x00000000 + + + CH7_AL2_CTRL + Alias for channel 7 CTRL register + 0x01e0 + read-write + 0x00000000 + + + CH7_AL2_TRANS_COUNT + Alias for channel 7 TRANS_COUNT register + 0x01e4 + read-write + 0x00000000 + + + CH7_AL2_READ_ADDR + Alias for channel 7 READ_ADDR register + 0x01e8 + read-write + 0x00000000 + + + CH7_AL2_WRITE_ADDR_TRIG + Alias for channel 7 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x01ec + read-write + 0x00000000 + + + CH7_AL3_CTRL + Alias for channel 7 CTRL register + 0x01f0 + read-write + 0x00000000 + + + CH7_AL3_WRITE_ADDR + Alias for channel 7 WRITE_ADDR register + 0x01f4 + read-write + 0x00000000 + + + CH7_AL3_TRANS_COUNT + Alias for channel 7 TRANS_COUNT register + 0x01f8 + read-write + 0x00000000 + + + CH7_AL3_READ_ADDR_TRIG + Alias for channel 7 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x01fc + read-write + 0x00000000 + + + CH8_READ_ADDR + DMA Channel 8 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0200 + read-write + 0x00000000 + + + CH8_WRITE_ADDR + DMA Channel 8 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0204 + read-write + 0x00000000 + + + CH8_TRANS_COUNT + DMA Channel 8 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0208 + read-write + 0x00000000 + + + CH8_CTRL_TRIG + DMA Channel 8 Control and Status + 0x020c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH8_AL1_CTRL + Alias for channel 8 CTRL register + 0x0210 + read-write + 0x00000000 + + + CH8_AL1_READ_ADDR + Alias for channel 8 READ_ADDR register + 0x0214 + read-write + 0x00000000 + + + CH8_AL1_WRITE_ADDR + Alias for channel 8 WRITE_ADDR register + 0x0218 + read-write + 0x00000000 + + + CH8_AL1_TRANS_COUNT_TRIG + Alias for channel 8 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x021c + read-write + 0x00000000 + + + CH8_AL2_CTRL + Alias for channel 8 CTRL register + 0x0220 + read-write + 0x00000000 + + + CH8_AL2_TRANS_COUNT + Alias for channel 8 TRANS_COUNT register + 0x0224 + read-write + 0x00000000 + + + CH8_AL2_READ_ADDR + Alias for channel 8 READ_ADDR register + 0x0228 + read-write + 0x00000000 + + + CH8_AL2_WRITE_ADDR_TRIG + Alias for channel 8 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x022c + read-write + 0x00000000 + + + CH8_AL3_CTRL + Alias for channel 8 CTRL register + 0x0230 + read-write + 0x00000000 + + + CH8_AL3_WRITE_ADDR + Alias for channel 8 WRITE_ADDR register + 0x0234 + read-write + 0x00000000 + + + CH8_AL3_TRANS_COUNT + Alias for channel 8 TRANS_COUNT register + 0x0238 + read-write + 0x00000000 + + + CH8_AL3_READ_ADDR_TRIG + Alias for channel 8 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x023c + read-write + 0x00000000 + + + CH9_READ_ADDR + DMA Channel 9 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0240 + read-write + 0x00000000 + + + CH9_WRITE_ADDR + DMA Channel 9 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0244 + read-write + 0x00000000 + + + CH9_TRANS_COUNT + DMA Channel 9 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0248 + read-write + 0x00000000 + + + CH9_CTRL_TRIG + DMA Channel 9 Control and Status + 0x024c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH9_AL1_CTRL + Alias for channel 9 CTRL register + 0x0250 + read-write + 0x00000000 + + + CH9_AL1_READ_ADDR + Alias for channel 9 READ_ADDR register + 0x0254 + read-write + 0x00000000 + + + CH9_AL1_WRITE_ADDR + Alias for channel 9 WRITE_ADDR register + 0x0258 + read-write + 0x00000000 + + + CH9_AL1_TRANS_COUNT_TRIG + Alias for channel 9 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x025c + read-write + 0x00000000 + + + CH9_AL2_CTRL + Alias for channel 9 CTRL register + 0x0260 + read-write + 0x00000000 + + + CH9_AL2_TRANS_COUNT + Alias for channel 9 TRANS_COUNT register + 0x0264 + read-write + 0x00000000 + + + CH9_AL2_READ_ADDR + Alias for channel 9 READ_ADDR register + 0x0268 + read-write + 0x00000000 + + + CH9_AL2_WRITE_ADDR_TRIG + Alias for channel 9 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x026c + read-write + 0x00000000 + + + CH9_AL3_CTRL + Alias for channel 9 CTRL register + 0x0270 + read-write + 0x00000000 + + + CH9_AL3_WRITE_ADDR + Alias for channel 9 WRITE_ADDR register + 0x0274 + read-write + 0x00000000 + + + CH9_AL3_TRANS_COUNT + Alias for channel 9 TRANS_COUNT register + 0x0278 + read-write + 0x00000000 + + + CH9_AL3_READ_ADDR_TRIG + Alias for channel 9 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x027c + read-write + 0x00000000 + + + CH10_READ_ADDR + DMA Channel 10 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x0280 + read-write + 0x00000000 + + + CH10_WRITE_ADDR + DMA Channel 10 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x0284 + read-write + 0x00000000 + + + CH10_TRANS_COUNT + DMA Channel 10 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x0288 + read-write + 0x00000000 + + + CH10_CTRL_TRIG + DMA Channel 10 Control and Status + 0x028c + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH10_AL1_CTRL + Alias for channel 10 CTRL register + 0x0290 + read-write + 0x00000000 + + + CH10_AL1_READ_ADDR + Alias for channel 10 READ_ADDR register + 0x0294 + read-write + 0x00000000 + + + CH10_AL1_WRITE_ADDR + Alias for channel 10 WRITE_ADDR register + 0x0298 + read-write + 0x00000000 + + + CH10_AL1_TRANS_COUNT_TRIG + Alias for channel 10 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x029c + read-write + 0x00000000 + + + CH10_AL2_CTRL + Alias for channel 10 CTRL register + 0x02a0 + read-write + 0x00000000 + + + CH10_AL2_TRANS_COUNT + Alias for channel 10 TRANS_COUNT register + 0x02a4 + read-write + 0x00000000 + + + CH10_AL2_READ_ADDR + Alias for channel 10 READ_ADDR register + 0x02a8 + read-write + 0x00000000 + + + CH10_AL2_WRITE_ADDR_TRIG + Alias for channel 10 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x02ac + read-write + 0x00000000 + + + CH10_AL3_CTRL + Alias for channel 10 CTRL register + 0x02b0 + read-write + 0x00000000 + + + CH10_AL3_WRITE_ADDR + Alias for channel 10 WRITE_ADDR register + 0x02b4 + read-write + 0x00000000 + + + CH10_AL3_TRANS_COUNT + Alias for channel 10 TRANS_COUNT register + 0x02b8 + read-write + 0x00000000 + + + CH10_AL3_READ_ADDR_TRIG + Alias for channel 10 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x02bc + read-write + 0x00000000 + + + CH11_READ_ADDR + DMA Channel 11 Read Address pointer\n + This register updates automatically each time a read completes. The current value is the next address to be read by this channel. + 0x02c0 + read-write + 0x00000000 + + + CH11_WRITE_ADDR + DMA Channel 11 Write Address pointer\n + This register updates automatically each time a write completes. The current value is the next address to be written by this channel. + 0x02c4 + read-write + 0x00000000 + + + CH11_TRANS_COUNT + DMA Channel 11 Transfer Count\n + Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\n\n + When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\n\n + Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\n\n + The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD. + 0x02c8 + read-write + 0x00000000 + + + CH11_CTRL_TRIG + DMA Channel 11 Control and Status + 0x02cc + 0x00000000 + + + AHB_ERROR + Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag. + [31:31] + read-only + + + READ_ERROR + If 1, the channel received a read bus error. Write one to clear.\n + READ_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 3 transfers later) + [30:30] + read-write + oneToClear + + + WRITE_ERROR + If 1, the channel received a write bus error. Write one to clear.\n + WRITE_ADDR shows the approximate address where the bus error was encountered (will not be earlier, or more than 5 transfers later) + [29:29] + read-write + oneToClear + + + BUSY + This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\n\n + To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + [24:24] + read-only + + + SNIFF_EN + If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\n\n + This allows checksum to be enabled or disabled on a per-control- block basis. + [23:23] + read-write + + + BSWAP + Apply byte-swap transformation to DMA data.\n + For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order. + [22:22] + read-write + + + IRQ_QUIET + In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\n\n + This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks. + [21:21] + read-write + + + TREQ_SEL + Select a Transfer Request signal.\n + The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\n + 0x0 to 0x3a -> select DREQ n as TREQ + [20:15] + read-write + + + TIMER0 + Select Timer 0 as TREQ + 59 + + + TIMER1 + Select Timer 1 as TREQ + 60 + + + TIMER2 + Select Timer 2 as TREQ (Optional) + 61 + + + TIMER3 + Select Timer 3 as TREQ (Optional) + 62 + + + PERMANENT + Permanent request, for unpaced transfers. + 63 + + + + + CHAIN_TO + When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_. + [14:11] + read-write + + + RING_SEL + Select whether RING_SIZE applies to read or write addresses.\n + If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped. + [10:10] + read-write + + + RING_SIZE + Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\n\n + Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL. + [9:6] + read-write + + + RING_NONE + 0 + + + + + INCR_WRITE + If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\n\n + Generally this should be disabled for memory-to-peripheral transfers. + [5:5] + read-write + + + INCR_READ + If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\n\n + Generally this should be disabled for peripheral-to-memory transfers. + [4:4] + read-write + + + DATA_SIZE + Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer. + [3:2] + read-write + + + SIZE_BYTE + 0 + + + SIZE_HALFWORD + 1 + + + SIZE_WORD + 2 + + + + + HIGH_PRIORITY + HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\n\n + This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput. + [1:1] + read-write + + + EN + DMA Channel Enable.\n + When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high) + [0:0] + read-write + + + + + CH11_AL1_CTRL + Alias for channel 11 CTRL register + 0x02d0 + read-write + 0x00000000 + + + CH11_AL1_READ_ADDR + Alias for channel 11 READ_ADDR register + 0x02d4 + read-write + 0x00000000 + + + CH11_AL1_WRITE_ADDR + Alias for channel 11 WRITE_ADDR register + 0x02d8 + read-write + 0x00000000 + + + CH11_AL1_TRANS_COUNT_TRIG + Alias for channel 11 TRANS_COUNT register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x02dc + read-write + 0x00000000 + + + CH11_AL2_CTRL + Alias for channel 11 CTRL register + 0x02e0 + read-write + 0x00000000 + + + CH11_AL2_TRANS_COUNT + Alias for channel 11 TRANS_COUNT register + 0x02e4 + read-write + 0x00000000 + + + CH11_AL2_READ_ADDR + Alias for channel 11 READ_ADDR register + 0x02e8 + read-write + 0x00000000 + + + CH11_AL2_WRITE_ADDR_TRIG + Alias for channel 11 WRITE_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x02ec + read-write + 0x00000000 + + + CH11_AL3_CTRL + Alias for channel 11 CTRL register + 0x02f0 + read-write + 0x00000000 + + + CH11_AL3_WRITE_ADDR + Alias for channel 11 WRITE_ADDR register + 0x02f4 + read-write + 0x00000000 + + + CH11_AL3_TRANS_COUNT + Alias for channel 11 TRANS_COUNT register + 0x02f8 + read-write + 0x00000000 + + + CH11_AL3_READ_ADDR_TRIG + Alias for channel 11 READ_ADDR register\n + This is a trigger register (0xc). Writing a nonzero value will\n + reload the channel counter and start the channel. + 0x02fc + read-write + 0x00000000 + + + INTR + Interrupt Status (raw) + 0x0400 + 0x00000000 + + + INTR + Raw interrupt status for DMA Channels 0..15. Bit n corresponds to channel n. Ignores any masking or forcing. Channel interrupts can be cleared by writing a bit mask to INTR, INTS0 or INTS1.\n\n + Channel interrupts can be routed to either of two system-level IRQs based on INTE0 and INTE1.\n\n + This can be used vector different channel interrupts to different ISRs: this might be done to allow NVIC IRQ preemption for more time-critical channels, or to spread IRQ load across different cores.\n\n + It is also valid to ignore this behaviour and just use INTE0/INTS0/IRQ 0. + [15:0] + read-write + oneToClear + + + + + INTE0 + Interrupt Enables for IRQ 0 + 0x0404 + 0x00000000 + + + INTE0 + Set bit n to pass interrupts from channel n to DMA IRQ 0. + [15:0] + read-write + + + + + INTF0 + Force Interrupts + 0x0408 + 0x00000000 + + + INTF0 + Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared. + [15:0] + read-write + + + + + INTS0 + Interrupt Status for IRQ 0 + 0x040c + 0x00000000 + + + INTS0 + Indicates active channel interrupt requests which are currently causing IRQ 0 to be asserted.\n + Channel interrupts can be cleared by writing a bit mask here. + [15:0] + read-write + oneToClear + + + + + INTE1 + Interrupt Enables for IRQ 1 + 0x0414 + 0x00000000 + + + INTE1 + Set bit n to pass interrupts from channel n to DMA IRQ 1. + [15:0] + read-write + + + + + INTF1 + Force Interrupts for IRQ 1 + 0x0418 + 0x00000000 + + + INTF1 + Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared. + [15:0] + read-write + + + + + INTS1 + Interrupt Status (masked) for IRQ 1 + 0x041c + 0x00000000 + + + INTS1 + Indicates active channel interrupt requests which are currently causing IRQ 1 to be asserted.\n + Channel interrupts can be cleared by writing a bit mask here. + [15:0] + read-write + oneToClear + + + + + TIMER0 + Pacing (X/Y) Fractional Timer\n + The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + 0x0420 + 0x00000000 + + + X + Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + [31:16] + read-write + + + Y + Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + [15:0] + read-write + + + + + TIMER1 + Pacing (X/Y) Fractional Timer\n + The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + 0x0424 + 0x00000000 + + + X + Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + [31:16] + read-write + + + Y + Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + [15:0] + read-write + + + + + TIMER2 + Pacing (X/Y) Fractional Timer\n + The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + 0x0428 + 0x00000000 + + + X + Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + [31:16] + read-write + + + Y + Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + [15:0] + read-write + + + + + TIMER3 + Pacing (X/Y) Fractional Timer\n + The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + 0x042c + 0x00000000 + + + X + Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + [31:16] + read-write + + + Y + Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + [15:0] + read-write + + + + + MULTI_CHAN_TRIGGER + Trigger one or more channels simultaneously + 0x0430 + 0x00000000 + + + MULTI_CHAN_TRIGGER + Each bit in this register corresponds to a DMA channel. Writing a 1 to the relevant bit is the same as writing to that channel's trigger register; the channel will start if it is currently enabled and not already busy. + [15:0] + read-write + clear + + + + + SNIFF_CTRL + Sniffer Control + 0x0434 + 0x00000000 + + + OUT_INV + If set, the result appears inverted (bitwise complement) when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus. + [11:11] + read-write + + + OUT_REV + If set, the result appears bit-reversed when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus. + [10:10] + read-write + + + BSWAP + Locally perform a byte reverse on the sniffed data, before feeding into checksum.\n\n + Note that the sniff hardware is downstream of the DMA channel byteswap performed in the read master: if channel CTRL_BSWAP and SNIFF_CTRL_BSWAP are both enabled, their effects cancel from the sniffer's point of view. + [9:9] + read-write + + + CALC + [8:5] + read-write + + + CRC32 + Calculate a CRC-32 (IEEE802.3 polynomial) + 0 + + + CRC32R + Calculate a CRC-32 (IEEE802.3 polynomial) with bit reversed data + 1 + + + CRC16 + Calculate a CRC-16-CCITT + 2 + + + CRC16R + Calculate a CRC-16-CCITT with bit reversed data + 3 + + + EVEN + XOR reduction over all data. == 1 if the total 1 population count is odd. + 14 + + + SUM + Calculate a simple 32-bit checksum (addition with a 32 bit accumulator) + 15 + + + + + DMACH + DMA channel for Sniffer to observe + [4:1] + read-write + + + EN + Enable sniffer + [0:0] + read-write + + + + + SNIFF_DATA + Data accumulator for sniff hardware\n + Write an initial seed value here before starting a DMA transfer on the channel indicated by SNIFF_CTRL_DMACH. The hardware will update this register each time it observes a read from the indicated channel. Once the channel completes, the final result can be read from this register. + 0x0438 + read-write + 0x00000000 + + + FIFO_LEVELS + Debug RAF, WAF, TDF levels + 0x0440 + 0x00000000 + + + RAF_LVL + Current Read-Address-FIFO fill level + [23:16] + read-only + + + WAF_LVL + Current Write-Address-FIFO fill level + [15:8] + read-only + + + TDF_LVL + Current Transfer-Data-FIFO fill level + [7:0] + read-only + + + + + CHAN_ABORT + Abort an in-progress transfer sequence on one or more channels + 0x0444 + 0x00000000 + + + CHAN_ABORT + Each bit corresponds to a channel. Writing a 1 aborts whatever transfer sequence is in progress on that channel. The bit will remain high until any in-flight transfers have been flushed through the address and data FIFOs.\n\n + After writing, this register must be polled until it returns all-zero. Until this point, it is unsafe to restart the channel. + [15:0] + read-write + clear + + + + + N_CHANNELS + The number of channels this DMA instance is equipped with. This DMA supports up to 16 hardware channels, but can be configured with as few as one, to minimise silicon area. + 0x0448 + 0x00000000 + + + N_CHANNELS + [4:0] + read-only + + + + + CH0_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0800 + 0x00000000 + + + CH0_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH0_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0804 + read-only + 0x00000000 + + + CH1_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0840 + 0x00000000 + + + CH1_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH1_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0844 + read-only + 0x00000000 + + + CH2_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0880 + 0x00000000 + + + CH2_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH2_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0884 + read-only + 0x00000000 + + + CH3_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x08c0 + 0x00000000 + + + CH3_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH3_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x08c4 + read-only + 0x00000000 + + + CH4_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0900 + 0x00000000 + + + CH4_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH4_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0904 + read-only + 0x00000000 + + + CH5_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0940 + 0x00000000 + + + CH5_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH5_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0944 + read-only + 0x00000000 + + + CH6_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0980 + 0x00000000 + + + CH6_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH6_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0984 + read-only + 0x00000000 + + + CH7_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x09c0 + 0x00000000 + + + CH7_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH7_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x09c4 + read-only + 0x00000000 + + + CH8_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0a00 + 0x00000000 + + + CH8_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH8_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0a04 + read-only + 0x00000000 + + + CH9_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0a40 + 0x00000000 + + + CH9_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH9_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0a44 + read-only + 0x00000000 + + + CH10_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0a80 + 0x00000000 + + + CH10_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH10_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0a84 + read-only + 0x00000000 + + + CH11_DBG_CTDREQ + Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake. + 0x0ac0 + 0x00000000 + + + CH11_DBG_CTDREQ + [5:0] + read-write + oneToClear + + + + + CH11_DBG_TCR + Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer + 0x0ac4 + read-only + 0x00000000 + + + + + USBCTRL_DPRAM + 1 + DPRAM layout for USB device. + 0x50100000 + 32 + + 0 + 0x0100 + registers + + + + SETUP_PACKET_LOW + Bytes 0-3 of the SETUP packet from the host. + 0x0000 + 0x00000000 + + + WVALUE + [31:16] + read-write + + + BREQUEST + [15:8] + read-write + + + BMREQUESTTYPE + [7:0] + read-write + + + + + SETUP_PACKET_HIGH + Bytes 4-7 of the setup packet from the host. + 0x0004 + 0x00000000 + + + WLENGTH + [31:16] + read-write + + + WINDEX + [15:0] + read-write + + + + + EP1_IN_CONTROL + 0x0008 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP1_OUT_CONTROL + 0x000c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP2_IN_CONTROL + 0x0010 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP2_OUT_CONTROL + 0x0014 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP3_IN_CONTROL + 0x0018 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP3_OUT_CONTROL + 0x001c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP4_IN_CONTROL + 0x0020 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP4_OUT_CONTROL + 0x0024 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP5_IN_CONTROL + 0x0028 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP5_OUT_CONTROL + 0x002c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP6_IN_CONTROL + 0x0030 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP6_OUT_CONTROL + 0x0034 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP7_IN_CONTROL + 0x0038 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP7_OUT_CONTROL + 0x003c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP8_IN_CONTROL + 0x0040 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP8_OUT_CONTROL + 0x0044 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP9_IN_CONTROL + 0x0048 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP9_OUT_CONTROL + 0x004c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP10_IN_CONTROL + 0x0050 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP10_OUT_CONTROL + 0x0054 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP11_IN_CONTROL + 0x0058 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP11_OUT_CONTROL + 0x005c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP12_IN_CONTROL + 0x0060 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP12_OUT_CONTROL + 0x0064 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP13_IN_CONTROL + 0x0068 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP13_OUT_CONTROL + 0x006c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP14_IN_CONTROL + 0x0070 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP14_OUT_CONTROL + 0x0074 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP15_IN_CONTROL + 0x0078 + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP15_OUT_CONTROL + 0x007c + 0x00000000 + + + ENABLE + Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set. + [31:31] + read-write + + + DOUBLE_BUFFERED + This endpoint is double buffered. + [30:30] + read-write + + + INTERRUPT_PER_BUFF + Trigger an interrupt each time a buffer is done. + [29:29] + read-write + + + INTERRUPT_PER_DOUBLE_BUFF + Trigger an interrupt each time both buffers are done. Only valid in double buffered mode. + [28:28] + read-write + + + ENDPOINT_TYPE + [27:26] + read-write + + + Control + 0 + + + Isochronous + 1 + + + Bulk + 2 + + + Interrupt + 3 + + + + + INTERRUPT_ON_STALL + Trigger an interrupt if a STALL is sent. Intended for debug only. + [17:17] + read-write + + + INTERRUPT_ON_NAK + Trigger an interrupt if a NAK is sent. Intended for debug only. + [16:16] + read-write + + + BUFFER_ADDRESS + 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM. + [15:0] + read-write + + + + + EP0_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x0080 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP0_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x0084 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP1_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x0088 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP1_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x008c + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP2_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x0090 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP2_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x0094 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP3_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x0098 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP3_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x009c + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP4_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00a0 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP4_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00a4 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP5_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00a8 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP5_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00ac + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP6_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00b0 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP6_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00b4 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP7_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00b8 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP7_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00bc + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP8_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00c0 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP8_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00c4 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP9_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00c8 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP9_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00cc + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP10_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00d0 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP10_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00d4 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP11_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00d8 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP11_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00dc + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP12_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00e0 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP12_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00e4 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP13_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00e8 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP13_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00ec + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP14_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00f0 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP14_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00f4 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP15_IN_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00f8 + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + EP15_OUT_BUFFER_CONTROL + Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\n + Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode. + 0x00fc + 0x00000000 + + + FULL_1 + Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [31:31] + read-write + + + LAST_1 + Buffer 1 is the last buffer of the transfer. + [30:30] + read-write + + + PID_1 + The data pid of buffer 1. + [29:29] + read-write + + + DOUBLE_BUFFER_ISO_OFFSET + The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\n + For a non Isochronous endpoint the offset is always 64 bytes. + [28:27] + read-write + + + 128 + 0 + + + 256 + 1 + + + 512 + 2 + + + 1024 + 3 + + + + + AVAILABLE_1 + Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [26:26] + read-write + + + LENGTH_1 + The length of the data in buffer 1. + [25:16] + read-write + + + FULL_0 + Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data. + [15:15] + read-write + + + LAST_0 + Buffer 0 is the last buffer of the transfer. + [14:14] + read-write + + + PID_0 + The data pid of buffer 0. + [13:13] + read-write + + + RESET + Reset the buffer selector to buffer 0. + [12:12] + read-write + + + STALL + Reply with a stall (valid for both buffers). + [11:11] + read-write + + + AVAILABLE_0 + Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back. + [10:10] + read-write + + + LENGTH_0 + The length of the data in buffer 0. + [9:0] + read-write + + + + + + + USBCTRL_REGS + 1 + USB FS/LS controller device registers + 0x50110000 + 32 + + 0 + 0x1000 + registers + + + USBCTRL_IRQ + 5 + + + + ADDR_ENDP + Device address and endpoint control + 0x0000 + 0x00000000 + + + ENDPOINT + Device endpoint to send data to. Only valid for HOST mode. + [19:16] + read-write + + + ADDRESS + In device mode, the address that the device should respond to. Set in response to a SET_ADDR setup packet from the host. In host mode set to the address of the device to communicate with. + [6:0] + read-write + + + + + ADDR_ENDP1 + Interrupt endpoint 1. Only valid for HOST mode. + 0x0004 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP2 + Interrupt endpoint 2. Only valid for HOST mode. + 0x0008 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP3 + Interrupt endpoint 3. Only valid for HOST mode. + 0x000c + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP4 + Interrupt endpoint 4. Only valid for HOST mode. + 0x0010 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP5 + Interrupt endpoint 5. Only valid for HOST mode. + 0x0014 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP6 + Interrupt endpoint 6. Only valid for HOST mode. + 0x0018 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP7 + Interrupt endpoint 7. Only valid for HOST mode. + 0x001c + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP8 + Interrupt endpoint 8. Only valid for HOST mode. + 0x0020 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP9 + Interrupt endpoint 9. Only valid for HOST mode. + 0x0024 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP10 + Interrupt endpoint 10. Only valid for HOST mode. + 0x0028 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP11 + Interrupt endpoint 11. Only valid for HOST mode. + 0x002c + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP12 + Interrupt endpoint 12. Only valid for HOST mode. + 0x0030 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP13 + Interrupt endpoint 13. Only valid for HOST mode. + 0x0034 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP14 + Interrupt endpoint 14. Only valid for HOST mode. + 0x0038 + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + ADDR_ENDP15 + Interrupt endpoint 15. Only valid for HOST mode. + 0x003c + 0x00000000 + + + INTEP_PREAMBLE + Interrupt EP requires preamble (is a low speed device on a full speed hub) + [26:26] + read-write + + + INTEP_DIR + Direction of the interrupt endpoint. In=0, Out=1 + [25:25] + read-write + + + ENDPOINT + Endpoint number of the interrupt endpoint + [19:16] + read-write + + + ADDRESS + Device address + [6:0] + read-write + + + + + MAIN_CTRL + Main control register + 0x0040 + 0x00000000 + + + SIM_TIMING + Reduced timings for simulation + [31:31] + read-write + + + HOST_NDEVICE + Device mode = 0, Host mode = 1 + [1:1] + read-write + + + CONTROLLER_EN + Enable controller + [0:0] + read-write + + + + + SOF_WR + Set the SOF (Start of Frame) frame number in the host controller. The SOF packet is sent every 1ms and the host will increment the frame number by 1 each time. + 0x0044 + 0x00000000 + + + COUNT + [10:0] + write-only + + + + + SOF_RD + Read the last SOF (Start of Frame) frame number seen. In device mode the last SOF received from the host. In host mode the last SOF sent by the host. + 0x0048 + 0x00000000 + + + COUNT + [10:0] + read-only + + + + + SIE_CTRL + SIE control register + 0x004c + 0x00000000 + + + EP0_INT_STALL + Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL + [31:31] + read-write + + + EP0_DOUBLE_BUF + Device: EP0 single buffered = 0, double buffered = 1 + [30:30] + read-write + + + EP0_INT_1BUF + Device: Set bit in BUFF_STATUS for every buffer completed on EP0 + [29:29] + read-write + + + EP0_INT_2BUF + Device: Set bit in BUFF_STATUS for every 2 buffers completed on EP0 + [28:28] + read-write + + + EP0_INT_NAK + Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK + [27:27] + read-write + + + DIRECT_EN + Direct bus drive enable + [26:26] + read-write + + + DIRECT_DP + Direct control of DP + [25:25] + read-write + + + DIRECT_DM + Direct control of DM + [24:24] + read-write + + + TRANSCEIVER_PD + Power down bus transceiver + [18:18] + read-write + + + RPU_OPT + Device: Pull-up strength (0=1K2, 1=2k3) + [17:17] + read-write + + + PULLUP_EN + Device: Enable pull up resistor + [16:16] + read-write + + + PULLDOWN_EN + Host: Enable pull down resistors + [15:15] + read-write + + + RESET_BUS + Host: Reset bus + [13:13] + read-write + clear + + + RESUME + Device: Remote wakeup. Device can initiate its own resume after suspend. + [12:12] + read-write + clear + + + VBUS_EN + Host: Enable VBUS + [11:11] + read-write + + + KEEP_ALIVE_EN + Host: Enable keep alive packet (for low speed bus) + [10:10] + read-write + + + SOF_EN + Host: Enable SOF generation (for full speed bus) + [9:9] + read-write + + + SOF_SYNC + Host: Delay packet(s) until after SOF + [8:8] + read-write + + + PREAMBLE_EN + Host: Preable enable for LS device on FS hub + [6:6] + read-write + + + STOP_TRANS + Host: Stop transaction + [4:4] + read-write + clear + + + RECEIVE_DATA + Host: Receive transaction (IN to host) + [3:3] + read-write + + + SEND_DATA + Host: Send transaction (OUT from host) + [2:2] + read-write + + + SEND_SETUP + Host: Send Setup packet + [1:1] + read-write + + + START_TRANS + Host: Start transaction + [0:0] + read-write + clear + + + + + SIE_STATUS + SIE status register + 0x0050 + 0x00000000 + + + DATA_SEQ_ERROR + Data Sequence Error.\n\n + The device can raise a sequence error in the following conditions:\n\n + * A SETUP packet is received followed by a DATA1 packet (data phase should always be DATA0) * An OUT packet is received from the host but doesn't match the data pid in the buffer control register read from DPSRAM\n\n + The host can raise a data sequence error in the following conditions:\n\n + * An IN packet from the device has the wrong data PID + [31:31] + read-write + oneToClear + + + ACK_REC + ACK received. Raised by both host and device. + [30:30] + read-write + oneToClear + + + STALL_REC + Host: STALL received + [29:29] + read-write + oneToClear + + + NAK_REC + Host: NAK received + [28:28] + read-write + oneToClear + + + RX_TIMEOUT + RX timeout is raised by both the host and device if an ACK is not received in the maximum time specified by the USB spec. + [27:27] + read-write + oneToClear + + + RX_OVERFLOW + RX overflow is raised by the Serial RX engine if the incoming data is too fast. + [26:26] + read-write + oneToClear + + + BIT_STUFF_ERROR + Bit Stuff Error. Raised by the Serial RX engine. + [25:25] + read-write + oneToClear + + + CRC_ERROR + CRC Error. Raised by the Serial RX engine. + [24:24] + read-write + oneToClear + + + BUS_RESET + Device: bus reset received + [19:19] + read-write + oneToClear + + + TRANS_COMPLETE + Transaction complete.\n\n + Raised by device if:\n\n + * An IN or OUT packet is sent with the `LAST_BUFF` bit set in the buffer control register\n\n + Raised by host if:\n\n + * A setup packet is sent when no data in or data out transaction follows * An IN packet is received and the `LAST_BUFF` bit is set in the buffer control register * An IN packet is received with zero length * An OUT packet is sent and the `LAST_BUFF` bit is set + [18:18] + read-write + oneToClear + + + SETUP_REC + Device: Setup packet received + [17:17] + read-write + oneToClear + + + CONNECTED + Device: connected + [16:16] + read-write + oneToClear + + + RESUME + Host: Device has initiated a remote resume. Device: host has initiated a resume. + [11:11] + read-write + oneToClear + + + VBUS_OVER_CURR + VBUS over current detected + [10:10] + read-only + + + SPEED + Host: device speed. Disconnected = 00, LS = 01, FS = 10 + [9:8] + read-write + oneToClear + + + SUSPENDED + Bus in suspended state. Valid for device and host. Host and device will go into suspend if neither Keep Alive / SOF frames are enabled. + [4:4] + read-write + oneToClear + + + LINE_STATE + USB bus line state + [3:2] + read-only + + + VBUS_DETECTED + Device: VBUS Detected + [0:0] + read-only + + + + + INT_EP_CTRL + interrupt endpoint control register + 0x0054 + 0x00000000 + + + INT_EP_ACTIVE + Host: Enable interrupt endpoint 1 -> 15 + [15:1] + read-write + + + + + BUFF_STATUS + Buffer status register. A bit set here indicates that a buffer has completed on the endpoint (if the buffer interrupt is enabled). It is possible for 2 buffers to be completed, so clearing the buffer status bit may instantly re set it on the next clock cycle. + 0x0058 + 0x00000000 + + + EP15_OUT + [31:31] + read-write + oneToClear + + + EP15_IN + [30:30] + read-write + oneToClear + + + EP14_OUT + [29:29] + read-write + oneToClear + + + EP14_IN + [28:28] + read-write + oneToClear + + + EP13_OUT + [27:27] + read-write + oneToClear + + + EP13_IN + [26:26] + read-write + oneToClear + + + EP12_OUT + [25:25] + read-write + oneToClear + + + EP12_IN + [24:24] + read-write + oneToClear + + + EP11_OUT + [23:23] + read-write + oneToClear + + + EP11_IN + [22:22] + read-write + oneToClear + + + EP10_OUT + [21:21] + read-write + oneToClear + + + EP10_IN + [20:20] + read-write + oneToClear + + + EP9_OUT + [19:19] + read-write + oneToClear + + + EP9_IN + [18:18] + read-write + oneToClear + + + EP8_OUT + [17:17] + read-write + oneToClear + + + EP8_IN + [16:16] + read-write + oneToClear + + + EP7_OUT + [15:15] + read-write + oneToClear + + + EP7_IN + [14:14] + read-write + oneToClear + + + EP6_OUT + [13:13] + read-write + oneToClear + + + EP6_IN + [12:12] + read-write + oneToClear + + + EP5_OUT + [11:11] + read-write + oneToClear + + + EP5_IN + [10:10] + read-write + oneToClear + + + EP4_OUT + [9:9] + read-write + oneToClear + + + EP4_IN + [8:8] + read-write + oneToClear + + + EP3_OUT + [7:7] + read-write + oneToClear + + + EP3_IN + [6:6] + read-write + oneToClear + + + EP2_OUT + [5:5] + read-write + oneToClear + + + EP2_IN + [4:4] + read-write + oneToClear + + + EP1_OUT + [3:3] + read-write + oneToClear + + + EP1_IN + [2:2] + read-write + oneToClear + + + EP0_OUT + [1:1] + read-write + oneToClear + + + EP0_IN + [0:0] + read-write + oneToClear + + + + + BUFF_CPU_SHOULD_HANDLE + Which of the double buffers should be handled. Only valid if using an interrupt per buffer (i.e. not per 2 buffers). Not valid for host interrupt endpoint polling because they are only single buffered. + 0x005c + 0x00000000 + + + EP15_OUT + [31:31] + read-only + + + EP15_IN + [30:30] + read-only + + + EP14_OUT + [29:29] + read-only + + + EP14_IN + [28:28] + read-only + + + EP13_OUT + [27:27] + read-only + + + EP13_IN + [26:26] + read-only + + + EP12_OUT + [25:25] + read-only + + + EP12_IN + [24:24] + read-only + + + EP11_OUT + [23:23] + read-only + + + EP11_IN + [22:22] + read-only + + + EP10_OUT + [21:21] + read-only + + + EP10_IN + [20:20] + read-only + + + EP9_OUT + [19:19] + read-only + + + EP9_IN + [18:18] + read-only + + + EP8_OUT + [17:17] + read-only + + + EP8_IN + [16:16] + read-only + + + EP7_OUT + [15:15] + read-only + + + EP7_IN + [14:14] + read-only + + + EP6_OUT + [13:13] + read-only + + + EP6_IN + [12:12] + read-only + + + EP5_OUT + [11:11] + read-only + + + EP5_IN + [10:10] + read-only + + + EP4_OUT + [9:9] + read-only + + + EP4_IN + [8:8] + read-only + + + EP3_OUT + [7:7] + read-only + + + EP3_IN + [6:6] + read-only + + + EP2_OUT + [5:5] + read-only + + + EP2_IN + [4:4] + read-only + + + EP1_OUT + [3:3] + read-only + + + EP1_IN + [2:2] + read-only + + + EP0_OUT + [1:1] + read-only + + + EP0_IN + [0:0] + read-only + + + + + EP_ABORT + Device only: Can be set to ignore the buffer control register for this endpoint in case you would like to revoke a buffer. A NAK will be sent for every access to the endpoint until this bit is cleared. A corresponding bit in `EP_ABORT_DONE` is set when it is safe to modify the buffer control register. + 0x0060 + 0x00000000 + + + EP15_OUT + [31:31] + read-write + + + EP15_IN + [30:30] + read-write + + + EP14_OUT + [29:29] + read-write + + + EP14_IN + [28:28] + read-write + + + EP13_OUT + [27:27] + read-write + + + EP13_IN + [26:26] + read-write + + + EP12_OUT + [25:25] + read-write + + + EP12_IN + [24:24] + read-write + + + EP11_OUT + [23:23] + read-write + + + EP11_IN + [22:22] + read-write + + + EP10_OUT + [21:21] + read-write + + + EP10_IN + [20:20] + read-write + + + EP9_OUT + [19:19] + read-write + + + EP9_IN + [18:18] + read-write + + + EP8_OUT + [17:17] + read-write + + + EP8_IN + [16:16] + read-write + + + EP7_OUT + [15:15] + read-write + + + EP7_IN + [14:14] + read-write + + + EP6_OUT + [13:13] + read-write + + + EP6_IN + [12:12] + read-write + + + EP5_OUT + [11:11] + read-write + + + EP5_IN + [10:10] + read-write + + + EP4_OUT + [9:9] + read-write + + + EP4_IN + [8:8] + read-write + + + EP3_OUT + [7:7] + read-write + + + EP3_IN + [6:6] + read-write + + + EP2_OUT + [5:5] + read-write + + + EP2_IN + [4:4] + read-write + + + EP1_OUT + [3:3] + read-write + + + EP1_IN + [2:2] + read-write + + + EP0_OUT + [1:1] + read-write + + + EP0_IN + [0:0] + read-write + + + + + EP_ABORT_DONE + Device only: Used in conjunction with `EP_ABORT`. Set once an endpoint is idle so the programmer knows it is safe to modify the buffer control register. + 0x0064 + 0x00000000 + + + EP15_OUT + [31:31] + read-write + oneToClear + + + EP15_IN + [30:30] + read-write + oneToClear + + + EP14_OUT + [29:29] + read-write + oneToClear + + + EP14_IN + [28:28] + read-write + oneToClear + + + EP13_OUT + [27:27] + read-write + oneToClear + + + EP13_IN + [26:26] + read-write + oneToClear + + + EP12_OUT + [25:25] + read-write + oneToClear + + + EP12_IN + [24:24] + read-write + oneToClear + + + EP11_OUT + [23:23] + read-write + oneToClear + + + EP11_IN + [22:22] + read-write + oneToClear + + + EP10_OUT + [21:21] + read-write + oneToClear + + + EP10_IN + [20:20] + read-write + oneToClear + + + EP9_OUT + [19:19] + read-write + oneToClear + + + EP9_IN + [18:18] + read-write + oneToClear + + + EP8_OUT + [17:17] + read-write + oneToClear + + + EP8_IN + [16:16] + read-write + oneToClear + + + EP7_OUT + [15:15] + read-write + oneToClear + + + EP7_IN + [14:14] + read-write + oneToClear + + + EP6_OUT + [13:13] + read-write + oneToClear + + + EP6_IN + [12:12] + read-write + oneToClear + + + EP5_OUT + [11:11] + read-write + oneToClear + + + EP5_IN + [10:10] + read-write + oneToClear + + + EP4_OUT + [9:9] + read-write + oneToClear + + + EP4_IN + [8:8] + read-write + oneToClear + + + EP3_OUT + [7:7] + read-write + oneToClear + + + EP3_IN + [6:6] + read-write + oneToClear + + + EP2_OUT + [5:5] + read-write + oneToClear + + + EP2_IN + [4:4] + read-write + oneToClear + + + EP1_OUT + [3:3] + read-write + oneToClear + + + EP1_IN + [2:2] + read-write + oneToClear + + + EP0_OUT + [1:1] + read-write + oneToClear + + + EP0_IN + [0:0] + read-write + oneToClear + + + + + EP_STALL_ARM + Device: this bit must be set in conjunction with the `STALL` bit in the buffer control register to send a STALL on EP0. The device controller clears these bits when a SETUP packet is received because the USB spec requires that a STALL condition is cleared when a SETUP packet is received. + 0x0068 + 0x00000000 + + + EP0_OUT + [1:1] + read-write + + + EP0_IN + [0:0] + read-write + + + + + NAK_POLL + Used by the host controller. Sets the wait time in microseconds before trying again if the device replies with a NAK. + 0x006c + 0x00100010 + + + DELAY_FS + NAK polling interval for a full speed device + [25:16] + read-write + + + DELAY_LS + NAK polling interval for a low speed device + [9:0] + read-write + + + + + EP_STATUS_STALL_NAK + Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set. For EP0 this comes from `SIE_CTRL`. For all other endpoints it comes from the endpoint control register. + 0x0070 + 0x00000000 + + + EP15_OUT + [31:31] + read-write + oneToClear + + + EP15_IN + [30:30] + read-write + oneToClear + + + EP14_OUT + [29:29] + read-write + oneToClear + + + EP14_IN + [28:28] + read-write + oneToClear + + + EP13_OUT + [27:27] + read-write + oneToClear + + + EP13_IN + [26:26] + read-write + oneToClear + + + EP12_OUT + [25:25] + read-write + oneToClear + + + EP12_IN + [24:24] + read-write + oneToClear + + + EP11_OUT + [23:23] + read-write + oneToClear + + + EP11_IN + [22:22] + read-write + oneToClear + + + EP10_OUT + [21:21] + read-write + oneToClear + + + EP10_IN + [20:20] + read-write + oneToClear + + + EP9_OUT + [19:19] + read-write + oneToClear + + + EP9_IN + [18:18] + read-write + oneToClear + + + EP8_OUT + [17:17] + read-write + oneToClear + + + EP8_IN + [16:16] + read-write + oneToClear + + + EP7_OUT + [15:15] + read-write + oneToClear + + + EP7_IN + [14:14] + read-write + oneToClear + + + EP6_OUT + [13:13] + read-write + oneToClear + + + EP6_IN + [12:12] + read-write + oneToClear + + + EP5_OUT + [11:11] + read-write + oneToClear + + + EP5_IN + [10:10] + read-write + oneToClear + + + EP4_OUT + [9:9] + read-write + oneToClear + + + EP4_IN + [8:8] + read-write + oneToClear + + + EP3_OUT + [7:7] + read-write + oneToClear + + + EP3_IN + [6:6] + read-write + oneToClear + + + EP2_OUT + [5:5] + read-write + oneToClear + + + EP2_IN + [4:4] + read-write + oneToClear + + + EP1_OUT + [3:3] + read-write + oneToClear + + + EP1_IN + [2:2] + read-write + oneToClear + + + EP0_OUT + [1:1] + read-write + oneToClear + + + EP0_IN + [0:0] + read-write + oneToClear + + + + + USB_MUXING + Where to connect the USB controller. Should be to_phy by default. + 0x0074 + 0x00000000 + + + SOFTCON + [3:3] + read-write + + + TO_DIGITAL_PAD + [2:2] + read-write + + + TO_EXTPHY + [1:1] + read-write + + + TO_PHY + [0:0] + read-write + + + + + USB_PWR + Overrides for the power signals in the event that the VBUS signals are not hooked up to GPIO. Set the value of the override and then the override enable to switch over to the override value. + 0x0078 + 0x00000000 + + + OVERCURR_DETECT_EN + [5:5] + read-write + + + OVERCURR_DETECT + [4:4] + read-write + + + VBUS_DETECT_OVERRIDE_EN + [3:3] + read-write + + + VBUS_DETECT + [2:2] + read-write + + + VBUS_EN_OVERRIDE_EN + [1:1] + read-write + + + VBUS_EN + [0:0] + read-write + + + + + USBPHY_DIRECT + This register allows for direct control of the USB phy. Use in conjunction with usbphy_direct_override register to enable each override bit. + 0x007c + 0x00000000 + + + DM_OVV + DM over voltage + [22:22] + read-only + + + DP_OVV + DP over voltage + [21:21] + read-only + + + DM_OVCN + DM overcurrent + [20:20] + read-only + + + DP_OVCN + DP overcurrent + [19:19] + read-only + + + RX_DM + DPM pin state + [18:18] + read-only + + + RX_DP + DPP pin state + [17:17] + read-only + + + RX_DD + Differential RX + [16:16] + read-only + + + TX_DIFFMODE + TX_DIFFMODE=0: Single ended mode\n + TX_DIFFMODE=1: Differential drive mode (TX_DM, TX_DM_OE ignored) + [15:15] + read-write + + + TX_FSSLEW + TX_FSSLEW=0: Low speed slew rate\n + TX_FSSLEW=1: Full speed slew rate + [14:14] + read-write + + + TX_PD + TX power down override (if override enable is set). 1 = powered down. + [13:13] + read-write + + + RX_PD + RX power down override (if override enable is set). 1 = powered down. + [12:12] + read-write + + + TX_DM + Output data. TX_DIFFMODE=1, Ignored\n + TX_DIFFMODE=0, Drives DPM only. TX_DM_OE=1 to enable drive. DPM=TX_DM + [11:11] + read-write + + + TX_DP + Output data. If TX_DIFFMODE=1, Drives DPP/DPM diff pair. TX_DP_OE=1 to enable drive. DPP=TX_DP, DPM=~TX_DP\n + If TX_DIFFMODE=0, Drives DPP only. TX_DP_OE=1 to enable drive. DPP=TX_DP + [10:10] + read-write + + + TX_DM_OE + Output enable. If TX_DIFFMODE=1, Ignored.\n + If TX_DIFFMODE=0, OE for DPM only. 0 - DPM in Hi-Z state; 1 - DPM driving + [9:9] + read-write + + + TX_DP_OE + Output enable. If TX_DIFFMODE=1, OE for DPP/DPM diff pair. 0 - DPP/DPM in Hi-Z state; 1 - DPP/DPM driving\n + If TX_DIFFMODE=0, OE for DPP only. 0 - DPP in Hi-Z state; 1 - DPP driving + [8:8] + read-write + + + DM_PULLDN_EN + DM pull down enable + [6:6] + read-write + + + DM_PULLUP_EN + DM pull up enable + [5:5] + read-write + + + DM_PULLUP_HISEL + Enable the second DM pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2 + [4:4] + read-write + + + DP_PULLDN_EN + DP pull down enable + [2:2] + read-write + + + DP_PULLUP_EN + DP pull up enable + [1:1] + read-write + + + DP_PULLUP_HISEL + Enable the second DP pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2 + [0:0] + read-write + + + + + USBPHY_DIRECT_OVERRIDE + Override enable for each control in usbphy_direct + 0x0080 + 0x00000000 + + + TX_DIFFMODE_OVERRIDE_EN + [15:15] + read-write + + + DM_PULLUP_OVERRIDE_EN + [12:12] + read-write + + + TX_FSSLEW_OVERRIDE_EN + [11:11] + read-write + + + TX_PD_OVERRIDE_EN + [10:10] + read-write + + + RX_PD_OVERRIDE_EN + [9:9] + read-write + + + TX_DM_OVERRIDE_EN + [8:8] + read-write + + + TX_DP_OVERRIDE_EN + [7:7] + read-write + + + TX_DM_OE_OVERRIDE_EN + [6:6] + read-write + + + TX_DP_OE_OVERRIDE_EN + [5:5] + read-write + + + DM_PULLDN_EN_OVERRIDE_EN + [4:4] + read-write + + + DP_PULLDN_EN_OVERRIDE_EN + [3:3] + read-write + + + DP_PULLUP_EN_OVERRIDE_EN + [2:2] + read-write + + + DM_PULLUP_HISEL_OVERRIDE_EN + [1:1] + read-write + + + DP_PULLUP_HISEL_OVERRIDE_EN + [0:0] + read-write + + + + + USBPHY_TRIM + Used to adjust trim values of USB phy pull down resistors. + 0x0084 + 0x00001f1f + + + DM_PULLDN_TRIM + Value to drive to USB PHY\n + DM pulldown resistor trim control\n + Experimental data suggests that the reset value will work, but this register allows adjustment if required + [12:8] + read-write + + + DP_PULLDN_TRIM + Value to drive to USB PHY\n + DP pulldown resistor trim control\n + Experimental data suggests that the reset value will work, but this register allows adjustment if required + [4:0] + read-write + + + + + INTR + Raw Interrupts + 0x008c + 0x00000000 + + + EP_STALL_NAK + Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK. + [19:19] + read-only + + + ABORT_DONE + Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE. + [18:18] + read-only + + + DEV_SOF + Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD + [17:17] + read-only + + + SETUP_REQ + Device. Source: SIE_STATUS.SETUP_REC + [16:16] + read-only + + + DEV_RESUME_FROM_HOST + Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME + [15:15] + read-only + + + DEV_SUSPEND + Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED + [14:14] + read-only + + + DEV_CONN_DIS + Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED + [13:13] + read-only + + + BUS_RESET + Source: SIE_STATUS.BUS_RESET + [12:12] + read-only + + + VBUS_DETECT + Source: SIE_STATUS.VBUS_DETECTED + [11:11] + read-only + + + STALL + Source: SIE_STATUS.STALL_REC + [10:10] + read-only + + + ERROR_CRC + Source: SIE_STATUS.CRC_ERROR + [9:9] + read-only + + + ERROR_BIT_STUFF + Source: SIE_STATUS.BIT_STUFF_ERROR + [8:8] + read-only + + + ERROR_RX_OVERFLOW + Source: SIE_STATUS.RX_OVERFLOW + [7:7] + read-only + + + ERROR_RX_TIMEOUT + Source: SIE_STATUS.RX_TIMEOUT + [6:6] + read-only + + + ERROR_DATA_SEQ + Source: SIE_STATUS.DATA_SEQ_ERROR + [5:5] + read-only + + + BUFF_STATUS + Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS. + [4:4] + read-only + + + TRANS_COMPLETE + Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit. + [3:3] + read-only + + + HOST_SOF + Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD + [2:2] + read-only + + + HOST_RESUME + Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME + [1:1] + read-only + + + HOST_CONN_DIS + Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + [0:0] + read-only + + + + + INTE + Interrupt Enable + 0x0090 + 0x00000000 + + + EP_STALL_NAK + Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK. + [19:19] + read-write + + + ABORT_DONE + Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE. + [18:18] + read-write + + + DEV_SOF + Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD + [17:17] + read-write + + + SETUP_REQ + Device. Source: SIE_STATUS.SETUP_REC + [16:16] + read-write + + + DEV_RESUME_FROM_HOST + Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME + [15:15] + read-write + + + DEV_SUSPEND + Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED + [14:14] + read-write + + + DEV_CONN_DIS + Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED + [13:13] + read-write + + + BUS_RESET + Source: SIE_STATUS.BUS_RESET + [12:12] + read-write + + + VBUS_DETECT + Source: SIE_STATUS.VBUS_DETECTED + [11:11] + read-write + + + STALL + Source: SIE_STATUS.STALL_REC + [10:10] + read-write + + + ERROR_CRC + Source: SIE_STATUS.CRC_ERROR + [9:9] + read-write + + + ERROR_BIT_STUFF + Source: SIE_STATUS.BIT_STUFF_ERROR + [8:8] + read-write + + + ERROR_RX_OVERFLOW + Source: SIE_STATUS.RX_OVERFLOW + [7:7] + read-write + + + ERROR_RX_TIMEOUT + Source: SIE_STATUS.RX_TIMEOUT + [6:6] + read-write + + + ERROR_DATA_SEQ + Source: SIE_STATUS.DATA_SEQ_ERROR + [5:5] + read-write + + + BUFF_STATUS + Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS. + [4:4] + read-write + + + TRANS_COMPLETE + Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit. + [3:3] + read-write + + + HOST_SOF + Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD + [2:2] + read-write + + + HOST_RESUME + Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME + [1:1] + read-write + + + HOST_CONN_DIS + Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + [0:0] + read-write + + + + + INTF + Interrupt Force + 0x0094 + 0x00000000 + + + EP_STALL_NAK + Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK. + [19:19] + read-write + + + ABORT_DONE + Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE. + [18:18] + read-write + + + DEV_SOF + Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD + [17:17] + read-write + + + SETUP_REQ + Device. Source: SIE_STATUS.SETUP_REC + [16:16] + read-write + + + DEV_RESUME_FROM_HOST + Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME + [15:15] + read-write + + + DEV_SUSPEND + Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED + [14:14] + read-write + + + DEV_CONN_DIS + Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED + [13:13] + read-write + + + BUS_RESET + Source: SIE_STATUS.BUS_RESET + [12:12] + read-write + + + VBUS_DETECT + Source: SIE_STATUS.VBUS_DETECTED + [11:11] + read-write + + + STALL + Source: SIE_STATUS.STALL_REC + [10:10] + read-write + + + ERROR_CRC + Source: SIE_STATUS.CRC_ERROR + [9:9] + read-write + + + ERROR_BIT_STUFF + Source: SIE_STATUS.BIT_STUFF_ERROR + [8:8] + read-write + + + ERROR_RX_OVERFLOW + Source: SIE_STATUS.RX_OVERFLOW + [7:7] + read-write + + + ERROR_RX_TIMEOUT + Source: SIE_STATUS.RX_TIMEOUT + [6:6] + read-write + + + ERROR_DATA_SEQ + Source: SIE_STATUS.DATA_SEQ_ERROR + [5:5] + read-write + + + BUFF_STATUS + Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS. + [4:4] + read-write + + + TRANS_COMPLETE + Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit. + [3:3] + read-write + + + HOST_SOF + Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD + [2:2] + read-write + + + HOST_RESUME + Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME + [1:1] + read-write + + + HOST_CONN_DIS + Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + [0:0] + read-write + + + + + INTS + Interrupt status after masking & forcing + 0x0098 + 0x00000000 + + + EP_STALL_NAK + Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK. + [19:19] + read-only + + + ABORT_DONE + Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE. + [18:18] + read-only + + + DEV_SOF + Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD + [17:17] + read-only + + + SETUP_REQ + Device. Source: SIE_STATUS.SETUP_REC + [16:16] + read-only + + + DEV_RESUME_FROM_HOST + Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME + [15:15] + read-only + + + DEV_SUSPEND + Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED + [14:14] + read-only + + + DEV_CONN_DIS + Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED + [13:13] + read-only + + + BUS_RESET + Source: SIE_STATUS.BUS_RESET + [12:12] + read-only + + + VBUS_DETECT + Source: SIE_STATUS.VBUS_DETECTED + [11:11] + read-only + + + STALL + Source: SIE_STATUS.STALL_REC + [10:10] + read-only + + + ERROR_CRC + Source: SIE_STATUS.CRC_ERROR + [9:9] + read-only + + + ERROR_BIT_STUFF + Source: SIE_STATUS.BIT_STUFF_ERROR + [8:8] + read-only + + + ERROR_RX_OVERFLOW + Source: SIE_STATUS.RX_OVERFLOW + [7:7] + read-only + + + ERROR_RX_TIMEOUT + Source: SIE_STATUS.RX_TIMEOUT + [6:6] + read-only + + + ERROR_DATA_SEQ + Source: SIE_STATUS.DATA_SEQ_ERROR + [5:5] + read-only + + + BUFF_STATUS + Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS. + [4:4] + read-only + + + TRANS_COMPLETE + Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit. + [3:3] + read-only + + + HOST_SOF + Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD + [2:2] + read-only + + + HOST_RESUME + Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME + [1:1] + read-only + + + HOST_CONN_DIS + Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + [0:0] + read-only + + + + + + + PIO0 + 1 + Programmable IO block + 0x50200000 + 32 + + 0 + 0x1000 + registers + + + PIO0_IRQ_0 + 7 + + + PIO0_IRQ_1 + 8 + + + + CTRL + PIO control register + 0x0000 + 0x00000000 + + + CLKDIV_RESTART + Restart a state machine's clock divider from an initial phase of 0. Clock dividers are free-running, so once started, their output (including fractional jitter) is completely determined by the integer/fractional divisor configured in SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor are restarted simultaneously, by writing multiple 1 bits to this field, the execution clocks of those state machines will run in precise lockstep.\n\n + Note that setting/clearing SM_ENABLE does not stop the clock divider from running, so once multiple state machines' clocks are synchronised, it is safe to disable/reenable a state machine, whilst keeping the clock dividers in sync.\n\n + Note also that CLKDIV_RESTART can be written to whilst the state machine is running, and this is useful to resynchronise clock dividers after the divisors (SMx_CLKDIV) have been changed on-the-fly. + [11:8] + read-write + clear + + + SM_RESTART + Write 1 to instantly clear internal SM state which may be otherwise difficult to access and will affect future execution.\n\n + Specifically, the following are cleared: input and output shift counters; the contents of the input shift register; the delay counter; the waiting-on-IRQ state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any pin write left asserted due to OUT_STICKY.\n\n + The program counter, the contents of the output shift register and the X/Y scratch registers are not affected. + [7:4] + read-write + clear + + + SM_ENABLE + Enable/disable each of the four state machines by writing 1/0 to each of these four bits. When disabled, a state machine will cease executing instructions, except those written directly to SMx_INSTR by the system. Multiple bits can be set/cleared at once to run/halt multiple state machines simultaneously. + [3:0] + read-write + + + + + FSTAT + FIFO status register + 0x0004 + 0x0f000f00 + + + TXEMPTY + State machine TX FIFO is empty + [27:24] + read-only + + + TXFULL + State machine TX FIFO is full + [19:16] + read-only + + + RXEMPTY + State machine RX FIFO is empty + [11:8] + read-only + + + RXFULL + State machine RX FIFO is full + [3:0] + read-only + + + + + FDEBUG + FIFO debug register + 0x0008 + 0x00000000 + + + TXSTALL + State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT with autopull enabled. Write 1 to clear. + [27:24] + read-write + oneToClear + + + TXOVER + TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to clear. Note that write-on-full does not alter the state or contents of the FIFO in any way, but the data that the system attempted to write is dropped, so if this flag is set, your software has quite likely dropped some data on the floor. + [19:16] + read-write + oneToClear + + + RXUNDER + RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to clear. Note that read-on-empty does not perturb the state of the FIFO in any way, but the data returned by reading from an empty FIFO is undefined, so this flag generally only becomes set due to some kind of software error. + [11:8] + read-write + oneToClear + + + RXSTALL + State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO took place, in which case the state machine has dropped data. Write 1 to clear. + [3:0] + read-write + oneToClear + + + + + FLEVEL + FIFO levels + 0x000c + 0x00000000 + + + RX3 + [31:28] + read-only + + + TX3 + [27:24] + read-only + + + RX2 + [23:20] + read-only + + + TX2 + [19:16] + read-only + + + RX1 + [15:12] + read-only + + + TX1 + [11:8] + read-only + + + RX0 + [7:4] + read-only + + + TX0 + [3:0] + read-only + + + + + TXF0 + Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + 0x0010 + write-only + 0x00000000 + + + TXF1 + Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + 0x0014 + write-only + 0x00000000 + + + TXF2 + Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + 0x0018 + write-only + 0x00000000 + + + TXF3 + Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + 0x001c + write-only + 0x00000000 + + + RXF0 + Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined. + 0x0020 + read-only + 0x00000000 + + + RXF1 + Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined. + 0x0024 + read-only + 0x00000000 + + + RXF2 + Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined. + 0x0028 + read-only + 0x00000000 + + + RXF3 + Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined. + 0x002c + read-only + 0x00000000 + + + IRQ + State machine IRQ flags register. Write 1 to clear. There are 8 state machine IRQ flags, which can be set, cleared, and waited on by the state machines. There's no fixed association between flags and state machines -- any state machine can use any flag.\n\n + Any of the 8 flags can be used for timing synchronisation between state machines, using IRQ and WAIT instructions. The lower four of these flags are also routed out to system-level interrupt requests, alongside FIFO status interrupts -- see e.g. IRQ0_INTE. + 0x0030 + 0x00000000 + + + IRQ + [7:0] + read-write + oneToClear + + + + + IRQ_FORCE + Writing a 1 to each of these bits will forcibly assert the corresponding IRQ. Note this is different to the INTF register: writing here affects PIO internal state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and is not visible to the state machines. + 0x0034 + 0x00000000 + + + IRQ_FORCE + [7:0] + write-only + + + + + INPUT_SYNC_BYPASS + There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic from metastabilities. This increases input delay, and for fast synchronous IO (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this register corresponds to one GPIO.\n + 0 -> input is synchronized (default)\n + 1 -> synchronizer is bypassed\n + If in doubt, leave this register as all zeroes. + 0x0038 + read-write + 0x00000000 + + + DBG_PADOUT + Read to sample the pad output values PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0. + 0x003c + read-only + 0x00000000 + + + DBG_PADOE + Read to sample the pad output enables (direction) PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0. + 0x0040 + read-only + 0x00000000 + + + DBG_CFGINFO + The PIO hardware has some free parameters that may vary between chip products.\n + These should be provided in the chip datasheet, but are also exposed here. + 0x0044 + 0x00000000 + + + IMEM_SIZE + The size of the instruction memory, measured in units of one instruction + [21:16] + read-only + + + SM_COUNT + The number of state machines this PIO instance is equipped with. + [11:8] + read-only + + + FIFO_DEPTH + The depth of the state machine TX/RX FIFOs, measured in words.\n + Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double\n + this depth. + [5:0] + read-only + + + + + INSTR_MEM0 + Write-only access to instruction memory location 0 + 0x0048 + 0x00000000 + + + INSTR_MEM0 + [15:0] + write-only + + + + + INSTR_MEM1 + Write-only access to instruction memory location 1 + 0x004c + 0x00000000 + + + INSTR_MEM1 + [15:0] + write-only + + + + + INSTR_MEM2 + Write-only access to instruction memory location 2 + 0x0050 + 0x00000000 + + + INSTR_MEM2 + [15:0] + write-only + + + + + INSTR_MEM3 + Write-only access to instruction memory location 3 + 0x0054 + 0x00000000 + + + INSTR_MEM3 + [15:0] + write-only + + + + + INSTR_MEM4 + Write-only access to instruction memory location 4 + 0x0058 + 0x00000000 + + + INSTR_MEM4 + [15:0] + write-only + + + + + INSTR_MEM5 + Write-only access to instruction memory location 5 + 0x005c + 0x00000000 + + + INSTR_MEM5 + [15:0] + write-only + + + + + INSTR_MEM6 + Write-only access to instruction memory location 6 + 0x0060 + 0x00000000 + + + INSTR_MEM6 + [15:0] + write-only + + + + + INSTR_MEM7 + Write-only access to instruction memory location 7 + 0x0064 + 0x00000000 + + + INSTR_MEM7 + [15:0] + write-only + + + + + INSTR_MEM8 + Write-only access to instruction memory location 8 + 0x0068 + 0x00000000 + + + INSTR_MEM8 + [15:0] + write-only + + + + + INSTR_MEM9 + Write-only access to instruction memory location 9 + 0x006c + 0x00000000 + + + INSTR_MEM9 + [15:0] + write-only + + + + + INSTR_MEM10 + Write-only access to instruction memory location 10 + 0x0070 + 0x00000000 + + + INSTR_MEM10 + [15:0] + write-only + + + + + INSTR_MEM11 + Write-only access to instruction memory location 11 + 0x0074 + 0x00000000 + + + INSTR_MEM11 + [15:0] + write-only + + + + + INSTR_MEM12 + Write-only access to instruction memory location 12 + 0x0078 + 0x00000000 + + + INSTR_MEM12 + [15:0] + write-only + + + + + INSTR_MEM13 + Write-only access to instruction memory location 13 + 0x007c + 0x00000000 + + + INSTR_MEM13 + [15:0] + write-only + + + + + INSTR_MEM14 + Write-only access to instruction memory location 14 + 0x0080 + 0x00000000 + + + INSTR_MEM14 + [15:0] + write-only + + + + + INSTR_MEM15 + Write-only access to instruction memory location 15 + 0x0084 + 0x00000000 + + + INSTR_MEM15 + [15:0] + write-only + + + + + INSTR_MEM16 + Write-only access to instruction memory location 16 + 0x0088 + 0x00000000 + + + INSTR_MEM16 + [15:0] + write-only + + + + + INSTR_MEM17 + Write-only access to instruction memory location 17 + 0x008c + 0x00000000 + + + INSTR_MEM17 + [15:0] + write-only + + + + + INSTR_MEM18 + Write-only access to instruction memory location 18 + 0x0090 + 0x00000000 + + + INSTR_MEM18 + [15:0] + write-only + + + + + INSTR_MEM19 + Write-only access to instruction memory location 19 + 0x0094 + 0x00000000 + + + INSTR_MEM19 + [15:0] + write-only + + + + + INSTR_MEM20 + Write-only access to instruction memory location 20 + 0x0098 + 0x00000000 + + + INSTR_MEM20 + [15:0] + write-only + + + + + INSTR_MEM21 + Write-only access to instruction memory location 21 + 0x009c + 0x00000000 + + + INSTR_MEM21 + [15:0] + write-only + + + + + INSTR_MEM22 + Write-only access to instruction memory location 22 + 0x00a0 + 0x00000000 + + + INSTR_MEM22 + [15:0] + write-only + + + + + INSTR_MEM23 + Write-only access to instruction memory location 23 + 0x00a4 + 0x00000000 + + + INSTR_MEM23 + [15:0] + write-only + + + + + INSTR_MEM24 + Write-only access to instruction memory location 24 + 0x00a8 + 0x00000000 + + + INSTR_MEM24 + [15:0] + write-only + + + + + INSTR_MEM25 + Write-only access to instruction memory location 25 + 0x00ac + 0x00000000 + + + INSTR_MEM25 + [15:0] + write-only + + + + + INSTR_MEM26 + Write-only access to instruction memory location 26 + 0x00b0 + 0x00000000 + + + INSTR_MEM26 + [15:0] + write-only + + + + + INSTR_MEM27 + Write-only access to instruction memory location 27 + 0x00b4 + 0x00000000 + + + INSTR_MEM27 + [15:0] + write-only + + + + + INSTR_MEM28 + Write-only access to instruction memory location 28 + 0x00b8 + 0x00000000 + + + INSTR_MEM28 + [15:0] + write-only + + + + + INSTR_MEM29 + Write-only access to instruction memory location 29 + 0x00bc + 0x00000000 + + + INSTR_MEM29 + [15:0] + write-only + + + + + INSTR_MEM30 + Write-only access to instruction memory location 30 + 0x00c0 + 0x00000000 + + + INSTR_MEM30 + [15:0] + write-only + + + + + INSTR_MEM31 + Write-only access to instruction memory location 31 + 0x00c4 + 0x00000000 + + + INSTR_MEM31 + [15:0] + write-only + + + + + SM0_CLKDIV + Clock divisor register for state machine 0\n + Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + 0x00c8 + 0x00010000 + + + INT + Effective frequency is sysclk/(int + frac/256).\n + Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + [31:16] + read-write + + + FRAC + Fractional part of clock divisor + [15:8] + read-write + + + + + SM0_EXECCTRL + Execution/behavioural settings for state machine 0 + 0x00cc + 0x0001f000 + + + EXEC_STALLED + If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes. + [31:31] + read-only + + + SIDE_EN + If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + [30:30] + read-write + + + SIDE_PINDIR + If 1, side-set data is asserted to pin directions, instead of pin values + [29:29] + read-write + + + JMP_PIN + The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + [28:24] + read-write + + + OUT_EN_SEL + Which data bit to use for inline OUT enable + [23:19] + read-write + + + INLINE_OUT_EN + If 1, use a bit of OUT data as an auxiliary write enable\n + When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + deassert the latest pin write. This can create useful masking/override behaviour\n + due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + [18:18] + read-write + + + OUT_STICKY + Continuously assert the most recent OUT/SET to the pins + [17:17] + read-write + + + WRAP_TOP + After reaching this address, execution is wrapped to wrap_bottom.\n + If the instruction is a jump, and the jump condition is true, the jump takes priority. + [16:12] + read-write + + + WRAP_BOTTOM + After reaching wrap_top, execution is wrapped to this address. + [11:7] + read-write + + + STATUS_SEL + Comparison used for the MOV x, STATUS instruction. + [4:4] + read-write + + + TXLEVEL + All-ones if TX FIFO level < N, otherwise all-zeroes + 0 + + + RXLEVEL + All-ones if RX FIFO level < N, otherwise all-zeroes + 1 + + + + + STATUS_N + Comparison level for the MOV x, STATUS instruction + [3:0] + read-write + + + + + SM0_SHIFTCTRL + Control behaviour of the input/output shift registers for state machine 0 + 0x00d0 + 0x000c0000 + + + FJOIN_RX + When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + TX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [31:31] + read-write + + + FJOIN_TX + When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + RX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [30:30] + read-write + + + PULL_THRESH + Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\n + Write 0 for value of 32. + [29:25] + read-write + + + PUSH_THRESH + Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\n + Write 0 for value of 32. + [24:20] + read-write + + + OUT_SHIFTDIR + 1 = shift out of output shift register to right. 0 = to left. + [19:19] + read-write + + + IN_SHIFTDIR + 1 = shift input shift register to right (data enters from left). 0 = to left. + [18:18] + read-write + + + AUTOPULL + Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH. + [17:17] + read-write + + + AUTOPUSH + Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + [16:16] + read-write + + + + + SM0_ADDR + Current instruction address of state machine 0 + 0x00d4 + 0x00000000 + + + SM0_ADDR + [4:0] + read-only + + + + + SM0_INSTR + Read to see the instruction currently addressed by state machine 0's program counter\n + Write to execute an instruction immediately (including jumps) and then resume execution. + 0x00d8 + 0x00000000 + + + SM0_INSTR + [15:0] + read-write + + + + + SM0_PINCTRL + State machine pin control + 0x00dc + 0x14000000 + + + SIDESET_COUNT + The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay). + [31:29] + read-write + + + SET_COUNT + The number of pins asserted by a SET. In the range 0 to 5 inclusive. + [28:26] + read-write + + + OUT_COUNT + The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive. + [25:20] + read-write + + + IN_BASE + The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number. + [19:15] + read-write + + + SIDESET_BASE + The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins. + [14:10] + read-write + + + SET_BASE + The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data. + [9:5] + read-write + + + OUT_BASE + The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data. + [4:0] + read-write + + + + + SM1_CLKDIV + Clock divisor register for state machine 1\n + Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + 0x00e0 + 0x00010000 + + + INT + Effective frequency is sysclk/(int + frac/256).\n + Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + [31:16] + read-write + + + FRAC + Fractional part of clock divisor + [15:8] + read-write + + + + + SM1_EXECCTRL + Execution/behavioural settings for state machine 1 + 0x00e4 + 0x0001f000 + + + EXEC_STALLED + If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes. + [31:31] + read-only + + + SIDE_EN + If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + [30:30] + read-write + + + SIDE_PINDIR + If 1, side-set data is asserted to pin directions, instead of pin values + [29:29] + read-write + + + JMP_PIN + The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + [28:24] + read-write + + + OUT_EN_SEL + Which data bit to use for inline OUT enable + [23:19] + read-write + + + INLINE_OUT_EN + If 1, use a bit of OUT data as an auxiliary write enable\n + When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + deassert the latest pin write. This can create useful masking/override behaviour\n + due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + [18:18] + read-write + + + OUT_STICKY + Continuously assert the most recent OUT/SET to the pins + [17:17] + read-write + + + WRAP_TOP + After reaching this address, execution is wrapped to wrap_bottom.\n + If the instruction is a jump, and the jump condition is true, the jump takes priority. + [16:12] + read-write + + + WRAP_BOTTOM + After reaching wrap_top, execution is wrapped to this address. + [11:7] + read-write + + + STATUS_SEL + Comparison used for the MOV x, STATUS instruction. + [4:4] + read-write + + + TXLEVEL + All-ones if TX FIFO level < N, otherwise all-zeroes + 0 + + + RXLEVEL + All-ones if RX FIFO level < N, otherwise all-zeroes + 1 + + + + + STATUS_N + Comparison level for the MOV x, STATUS instruction + [3:0] + read-write + + + + + SM1_SHIFTCTRL + Control behaviour of the input/output shift registers for state machine 1 + 0x00e8 + 0x000c0000 + + + FJOIN_RX + When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + TX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [31:31] + read-write + + + FJOIN_TX + When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + RX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [30:30] + read-write + + + PULL_THRESH + Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\n + Write 0 for value of 32. + [29:25] + read-write + + + PUSH_THRESH + Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\n + Write 0 for value of 32. + [24:20] + read-write + + + OUT_SHIFTDIR + 1 = shift out of output shift register to right. 0 = to left. + [19:19] + read-write + + + IN_SHIFTDIR + 1 = shift input shift register to right (data enters from left). 0 = to left. + [18:18] + read-write + + + AUTOPULL + Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH. + [17:17] + read-write + + + AUTOPUSH + Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + [16:16] + read-write + + + + + SM1_ADDR + Current instruction address of state machine 1 + 0x00ec + 0x00000000 + + + SM1_ADDR + [4:0] + read-only + + + + + SM1_INSTR + Read to see the instruction currently addressed by state machine 1's program counter\n + Write to execute an instruction immediately (including jumps) and then resume execution. + 0x00f0 + 0x00000000 + + + SM1_INSTR + [15:0] + read-write + + + + + SM1_PINCTRL + State machine pin control + 0x00f4 + 0x14000000 + + + SIDESET_COUNT + The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay). + [31:29] + read-write + + + SET_COUNT + The number of pins asserted by a SET. In the range 0 to 5 inclusive. + [28:26] + read-write + + + OUT_COUNT + The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive. + [25:20] + read-write + + + IN_BASE + The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number. + [19:15] + read-write + + + SIDESET_BASE + The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins. + [14:10] + read-write + + + SET_BASE + The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data. + [9:5] + read-write + + + OUT_BASE + The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data. + [4:0] + read-write + + + + + SM2_CLKDIV + Clock divisor register for state machine 2\n + Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + 0x00f8 + 0x00010000 + + + INT + Effective frequency is sysclk/(int + frac/256).\n + Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + [31:16] + read-write + + + FRAC + Fractional part of clock divisor + [15:8] + read-write + + + + + SM2_EXECCTRL + Execution/behavioural settings for state machine 2 + 0x00fc + 0x0001f000 + + + EXEC_STALLED + If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes. + [31:31] + read-only + + + SIDE_EN + If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + [30:30] + read-write + + + SIDE_PINDIR + If 1, side-set data is asserted to pin directions, instead of pin values + [29:29] + read-write + + + JMP_PIN + The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + [28:24] + read-write + + + OUT_EN_SEL + Which data bit to use for inline OUT enable + [23:19] + read-write + + + INLINE_OUT_EN + If 1, use a bit of OUT data as an auxiliary write enable\n + When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + deassert the latest pin write. This can create useful masking/override behaviour\n + due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + [18:18] + read-write + + + OUT_STICKY + Continuously assert the most recent OUT/SET to the pins + [17:17] + read-write + + + WRAP_TOP + After reaching this address, execution is wrapped to wrap_bottom.\n + If the instruction is a jump, and the jump condition is true, the jump takes priority. + [16:12] + read-write + + + WRAP_BOTTOM + After reaching wrap_top, execution is wrapped to this address. + [11:7] + read-write + + + STATUS_SEL + Comparison used for the MOV x, STATUS instruction. + [4:4] + read-write + + + TXLEVEL + All-ones if TX FIFO level < N, otherwise all-zeroes + 0 + + + RXLEVEL + All-ones if RX FIFO level < N, otherwise all-zeroes + 1 + + + + + STATUS_N + Comparison level for the MOV x, STATUS instruction + [3:0] + read-write + + + + + SM2_SHIFTCTRL + Control behaviour of the input/output shift registers for state machine 2 + 0x0100 + 0x000c0000 + + + FJOIN_RX + When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + TX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [31:31] + read-write + + + FJOIN_TX + When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + RX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [30:30] + read-write + + + PULL_THRESH + Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\n + Write 0 for value of 32. + [29:25] + read-write + + + PUSH_THRESH + Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\n + Write 0 for value of 32. + [24:20] + read-write + + + OUT_SHIFTDIR + 1 = shift out of output shift register to right. 0 = to left. + [19:19] + read-write + + + IN_SHIFTDIR + 1 = shift input shift register to right (data enters from left). 0 = to left. + [18:18] + read-write + + + AUTOPULL + Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH. + [17:17] + read-write + + + AUTOPUSH + Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + [16:16] + read-write + + + + + SM2_ADDR + Current instruction address of state machine 2 + 0x0104 + 0x00000000 + + + SM2_ADDR + [4:0] + read-only + + + + + SM2_INSTR + Read to see the instruction currently addressed by state machine 2's program counter\n + Write to execute an instruction immediately (including jumps) and then resume execution. + 0x0108 + 0x00000000 + + + SM2_INSTR + [15:0] + read-write + + + + + SM2_PINCTRL + State machine pin control + 0x010c + 0x14000000 + + + SIDESET_COUNT + The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay). + [31:29] + read-write + + + SET_COUNT + The number of pins asserted by a SET. In the range 0 to 5 inclusive. + [28:26] + read-write + + + OUT_COUNT + The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive. + [25:20] + read-write + + + IN_BASE + The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number. + [19:15] + read-write + + + SIDESET_BASE + The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins. + [14:10] + read-write + + + SET_BASE + The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data. + [9:5] + read-write + + + OUT_BASE + The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data. + [4:0] + read-write + + + + + SM3_CLKDIV + Clock divisor register for state machine 3\n + Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + 0x0110 + 0x00010000 + + + INT + Effective frequency is sysclk/(int + frac/256).\n + Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + [31:16] + read-write + + + FRAC + Fractional part of clock divisor + [15:8] + read-write + + + + + SM3_EXECCTRL + Execution/behavioural settings for state machine 3 + 0x0114 + 0x0001f000 + + + EXEC_STALLED + If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes. + [31:31] + read-only + + + SIDE_EN + If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + [30:30] + read-write + + + SIDE_PINDIR + If 1, side-set data is asserted to pin directions, instead of pin values + [29:29] + read-write + + + JMP_PIN + The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + [28:24] + read-write + + + OUT_EN_SEL + Which data bit to use for inline OUT enable + [23:19] + read-write + + + INLINE_OUT_EN + If 1, use a bit of OUT data as an auxiliary write enable\n + When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + deassert the latest pin write. This can create useful masking/override behaviour\n + due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + [18:18] + read-write + + + OUT_STICKY + Continuously assert the most recent OUT/SET to the pins + [17:17] + read-write + + + WRAP_TOP + After reaching this address, execution is wrapped to wrap_bottom.\n + If the instruction is a jump, and the jump condition is true, the jump takes priority. + [16:12] + read-write + + + WRAP_BOTTOM + After reaching wrap_top, execution is wrapped to this address. + [11:7] + read-write + + + STATUS_SEL + Comparison used for the MOV x, STATUS instruction. + [4:4] + read-write + + + TXLEVEL + All-ones if TX FIFO level < N, otherwise all-zeroes + 0 + + + RXLEVEL + All-ones if RX FIFO level < N, otherwise all-zeroes + 1 + + + + + STATUS_N + Comparison level for the MOV x, STATUS instruction + [3:0] + read-write + + + + + SM3_SHIFTCTRL + Control behaviour of the input/output shift registers for state machine 3 + 0x0118 + 0x000c0000 + + + FJOIN_RX + When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + TX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [31:31] + read-write + + + FJOIN_TX + When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + RX FIFO is disabled as a result (always reads as both full and empty).\n + FIFOs are flushed when this bit is changed. + [30:30] + read-write + + + PULL_THRESH + Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\n + Write 0 for value of 32. + [29:25] + read-write + + + PUSH_THRESH + Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\n + Write 0 for value of 32. + [24:20] + read-write + + + OUT_SHIFTDIR + 1 = shift out of output shift register to right. 0 = to left. + [19:19] + read-write + + + IN_SHIFTDIR + 1 = shift input shift register to right (data enters from left). 0 = to left. + [18:18] + read-write + + + AUTOPULL + Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH. + [17:17] + read-write + + + AUTOPUSH + Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + [16:16] + read-write + + + + + SM3_ADDR + Current instruction address of state machine 3 + 0x011c + 0x00000000 + + + SM3_ADDR + [4:0] + read-only + + + + + SM3_INSTR + Read to see the instruction currently addressed by state machine 3's program counter\n + Write to execute an instruction immediately (including jumps) and then resume execution. + 0x0120 + 0x00000000 + + + SM3_INSTR + [15:0] + read-write + + + + + SM3_PINCTRL + State machine pin control + 0x0124 + 0x14000000 + + + SIDESET_COUNT + The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay). + [31:29] + read-write + + + SET_COUNT + The number of pins asserted by a SET. In the range 0 to 5 inclusive. + [28:26] + read-write + + + OUT_COUNT + The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive. + [25:20] + read-write + + + IN_BASE + The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number. + [19:15] + read-write + + + SIDESET_BASE + The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins. + [14:10] + read-write + + + SET_BASE + The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data. + [9:5] + read-write + + + OUT_BASE + The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data. + [4:0] + read-write + + + + + INTR + Raw Interrupts + 0x0128 + 0x00000000 + + + SM3 + [11:11] + read-only + + + SM2 + [10:10] + read-only + + + SM1 + [9:9] + read-only + + + SM0 + [8:8] + read-only + + + SM3_TXNFULL + [7:7] + read-only + + + SM2_TXNFULL + [6:6] + read-only + + + SM1_TXNFULL + [5:5] + read-only + + + SM0_TXNFULL + [4:4] + read-only + + + SM3_RXNEMPTY + [3:3] + read-only + + + SM2_RXNEMPTY + [2:2] + read-only + + + SM1_RXNEMPTY + [1:1] + read-only + + + SM0_RXNEMPTY + [0:0] + read-only + + + + + IRQ0_INTE + Interrupt Enable for irq0 + 0x012c + 0x00000000 + + + SM3 + [11:11] + read-write + + + SM2 + [10:10] + read-write + + + SM1 + [9:9] + read-write + + + SM0 + [8:8] + read-write + + + SM3_TXNFULL + [7:7] + read-write + + + SM2_TXNFULL + [6:6] + read-write + + + SM1_TXNFULL + [5:5] + read-write + + + SM0_TXNFULL + [4:4] + read-write + + + SM3_RXNEMPTY + [3:3] + read-write + + + SM2_RXNEMPTY + [2:2] + read-write + + + SM1_RXNEMPTY + [1:1] + read-write + + + SM0_RXNEMPTY + [0:0] + read-write + + + + + IRQ0_INTF + Interrupt Force for irq0 + 0x0130 + 0x00000000 + + + SM3 + [11:11] + read-write + + + SM2 + [10:10] + read-write + + + SM1 + [9:9] + read-write + + + SM0 + [8:8] + read-write + + + SM3_TXNFULL + [7:7] + read-write + + + SM2_TXNFULL + [6:6] + read-write + + + SM1_TXNFULL + [5:5] + read-write + + + SM0_TXNFULL + [4:4] + read-write + + + SM3_RXNEMPTY + [3:3] + read-write + + + SM2_RXNEMPTY + [2:2] + read-write + + + SM1_RXNEMPTY + [1:1] + read-write + + + SM0_RXNEMPTY + [0:0] + read-write + + + + + IRQ0_INTS + Interrupt status after masking & forcing for irq0 + 0x0134 + 0x00000000 + + + SM3 + [11:11] + read-only + + + SM2 + [10:10] + read-only + + + SM1 + [9:9] + read-only + + + SM0 + [8:8] + read-only + + + SM3_TXNFULL + [7:7] + read-only + + + SM2_TXNFULL + [6:6] + read-only + + + SM1_TXNFULL + [5:5] + read-only + + + SM0_TXNFULL + [4:4] + read-only + + + SM3_RXNEMPTY + [3:3] + read-only + + + SM2_RXNEMPTY + [2:2] + read-only + + + SM1_RXNEMPTY + [1:1] + read-only + + + SM0_RXNEMPTY + [0:0] + read-only + + + + + IRQ1_INTE + Interrupt Enable for irq1 + 0x0138 + 0x00000000 + + + SM3 + [11:11] + read-write + + + SM2 + [10:10] + read-write + + + SM1 + [9:9] + read-write + + + SM0 + [8:8] + read-write + + + SM3_TXNFULL + [7:7] + read-write + + + SM2_TXNFULL + [6:6] + read-write + + + SM1_TXNFULL + [5:5] + read-write + + + SM0_TXNFULL + [4:4] + read-write + + + SM3_RXNEMPTY + [3:3] + read-write + + + SM2_RXNEMPTY + [2:2] + read-write + + + SM1_RXNEMPTY + [1:1] + read-write + + + SM0_RXNEMPTY + [0:0] + read-write + + + + + IRQ1_INTF + Interrupt Force for irq1 + 0x013c + 0x00000000 + + + SM3 + [11:11] + read-write + + + SM2 + [10:10] + read-write + + + SM1 + [9:9] + read-write + + + SM0 + [8:8] + read-write + + + SM3_TXNFULL + [7:7] + read-write + + + SM2_TXNFULL + [6:6] + read-write + + + SM1_TXNFULL + [5:5] + read-write + + + SM0_TXNFULL + [4:4] + read-write + + + SM3_RXNEMPTY + [3:3] + read-write + + + SM2_RXNEMPTY + [2:2] + read-write + + + SM1_RXNEMPTY + [1:1] + read-write + + + SM0_RXNEMPTY + [0:0] + read-write + + + + + IRQ1_INTS + Interrupt status after masking & forcing for irq1 + 0x0140 + 0x00000000 + + + SM3 + [11:11] + read-only + + + SM2 + [10:10] + read-only + + + SM1 + [9:9] + read-only + + + SM0 + [8:8] + read-only + + + SM3_TXNFULL + [7:7] + read-only + + + SM2_TXNFULL + [6:6] + read-only + + + SM1_TXNFULL + [5:5] + read-only + + + SM0_TXNFULL + [4:4] + read-only + + + SM3_RXNEMPTY + [3:3] + read-only + + + SM2_RXNEMPTY + [2:2] + read-only + + + SM1_RXNEMPTY + [1:1] + read-only + + + SM0_RXNEMPTY + [0:0] + read-only + + + + + + + PIO1 + 0x50300000 + + PIO1_IRQ_0 + 9 + + + PIO1_IRQ_1 + 10 + + + + SIO + 1 + Single-cycle IO block\n + Provides core-local and inter-core hardware for the two processors, with single-cycle access. + 0xd0000000 + 32 + + 0 + 0x0200 + registers + + + SIO_IRQ_PROC0 + 15 + + + SIO_IRQ_PROC1 + 16 + + + + CPUID + Processor core identifier\n + Value is 0 when read from processor core 0, and 1 when read from processor core 1. + 0x0000 + read-only + 0x00000000 + + + GPIO_IN + Input value for GPIO pins + 0x0004 + 0x00000000 + + + GPIO_IN + Input value for GPIO0...29 + [29:0] + read-only + + + + + GPIO_HI_IN + Input value for QSPI pins + 0x0008 + 0x00000000 + + + GPIO_HI_IN + Input value on QSPI IO in order 0..5: SCLK, SSn, SD0, SD1, SD2, SD3 + [5:0] + read-only + + + + + GPIO_OUT + GPIO output value + 0x0010 + 0x00000000 + + + GPIO_OUT + Set output level (1/0 -> high/low) for GPIO0...29.\n + Reading back gives the last value written, NOT the input value from the pins.\n + If core 0 and core 1 both write to GPIO_OUT simultaneously (or to a SET/CLR/XOR alias),\n + the result is as though the write from core 0 took place first,\n + and the write from core 1 was then applied to that intermediate result. + [29:0] + read-write + + + + + GPIO_OUT_SET + GPIO output value set + 0x0014 + 0x00000000 + + + GPIO_OUT_SET + Perform an atomic bit-set on GPIO_OUT, i.e. `GPIO_OUT |= wdata` + [29:0] + write-only + + + + + GPIO_OUT_CLR + GPIO output value clear + 0x0018 + 0x00000000 + + + GPIO_OUT_CLR + Perform an atomic bit-clear on GPIO_OUT, i.e. `GPIO_OUT &= ~wdata` + [29:0] + write-only + + + + + GPIO_OUT_XOR + GPIO output value XOR + 0x001c + 0x00000000 + + + GPIO_OUT_XOR + Perform an atomic bitwise XOR on GPIO_OUT, i.e. `GPIO_OUT ^= wdata` + [29:0] + write-only + + + + + GPIO_OE + GPIO output enable + 0x0020 + 0x00000000 + + + GPIO_OE + Set output enable (1/0 -> output/input) for GPIO0...29.\n + Reading back gives the last value written.\n + If core 0 and core 1 both write to GPIO_OE simultaneously (or to a SET/CLR/XOR alias),\n + the result is as though the write from core 0 took place first,\n + and the write from core 1 was then applied to that intermediate result. + [29:0] + read-write + + + + + GPIO_OE_SET + GPIO output enable set + 0x0024 + 0x00000000 + + + GPIO_OE_SET + Perform an atomic bit-set on GPIO_OE, i.e. `GPIO_OE |= wdata` + [29:0] + write-only + + + + + GPIO_OE_CLR + GPIO output enable clear + 0x0028 + 0x00000000 + + + GPIO_OE_CLR + Perform an atomic bit-clear on GPIO_OE, i.e. `GPIO_OE &= ~wdata` + [29:0] + write-only + + + + + GPIO_OE_XOR + GPIO output enable XOR + 0x002c + 0x00000000 + + + GPIO_OE_XOR + Perform an atomic bitwise XOR on GPIO_OE, i.e. `GPIO_OE ^= wdata` + [29:0] + write-only + + + + + GPIO_HI_OUT + QSPI output value + 0x0030 + 0x00000000 + + + GPIO_HI_OUT + Set output level (1/0 -> high/low) for QSPI IO0...5.\n + Reading back gives the last value written, NOT the input value from the pins.\n + If core 0 and core 1 both write to GPIO_HI_OUT simultaneously (or to a SET/CLR/XOR alias),\n + the result is as though the write from core 0 took place first,\n + and the write from core 1 was then applied to that intermediate result. + [5:0] + read-write + + + + + GPIO_HI_OUT_SET + QSPI output value set + 0x0034 + 0x00000000 + + + GPIO_HI_OUT_SET + Perform an atomic bit-set on GPIO_HI_OUT, i.e. `GPIO_HI_OUT |= wdata` + [5:0] + write-only + + + + + GPIO_HI_OUT_CLR + QSPI output value clear + 0x0038 + 0x00000000 + + + GPIO_HI_OUT_CLR + Perform an atomic bit-clear on GPIO_HI_OUT, i.e. `GPIO_HI_OUT &= ~wdata` + [5:0] + write-only + + + + + GPIO_HI_OUT_XOR + QSPI output value XOR + 0x003c + 0x00000000 + + + GPIO_HI_OUT_XOR + Perform an atomic bitwise XOR on GPIO_HI_OUT, i.e. `GPIO_HI_OUT ^= wdata` + [5:0] + write-only + + + + + GPIO_HI_OE + QSPI output enable + 0x0040 + 0x00000000 + + + GPIO_HI_OE + Set output enable (1/0 -> output/input) for QSPI IO0...5.\n + Reading back gives the last value written.\n + If core 0 and core 1 both write to GPIO_HI_OE simultaneously (or to a SET/CLR/XOR alias),\n + the result is as though the write from core 0 took place first,\n + and the write from core 1 was then applied to that intermediate result. + [5:0] + read-write + + + + + GPIO_HI_OE_SET + QSPI output enable set + 0x0044 + 0x00000000 + + + GPIO_HI_OE_SET + Perform an atomic bit-set on GPIO_HI_OE, i.e. `GPIO_HI_OE |= wdata` + [5:0] + write-only + + + + + GPIO_HI_OE_CLR + QSPI output enable clear + 0x0048 + 0x00000000 + + + GPIO_HI_OE_CLR + Perform an atomic bit-clear on GPIO_HI_OE, i.e. `GPIO_HI_OE &= ~wdata` + [5:0] + write-only + + + + + GPIO_HI_OE_XOR + QSPI output enable XOR + 0x004c + 0x00000000 + + + GPIO_HI_OE_XOR + Perform an atomic bitwise XOR on GPIO_HI_OE, i.e. `GPIO_HI_OE ^= wdata` + [5:0] + write-only + + + + + FIFO_ST + Status register for inter-core FIFOs (mailboxes).\n + There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0. Both are 32 bits wide and 8 words deep.\n + Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1 FIFO (TX).\n + Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0 FIFO (TX).\n + The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of its FIFO_ST register. + 0x0050 + 0x00000002 + + + ROE + Sticky flag indicating the RX FIFO was read when empty. This read was ignored by the FIFO. + [3:3] + read-write + oneToClear + + + WOF + Sticky flag indicating the TX FIFO was written when full. This write was ignored by the FIFO. + [2:2] + read-write + oneToClear + + + RDY + Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR is ready for more data) + [1:1] + read-only + + + VLD + Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD is valid) + [0:0] + read-only + + + + + FIFO_WR + Write access to this core's TX FIFO + 0x0054 + write-only + 0x00000000 + + + FIFO_RD + Read access to this core's RX FIFO + 0x0058 + read-only + 0x00000000 + + + SPINLOCK_ST + Spinlock state\n + A bitmap containing the state of all 32 spinlocks (1=locked).\n + Mainly intended for debugging. + 0x005c + read-only + 0x00000000 + + + DIV_UDIVIDEND + Divider unsigned dividend\n + Write to the DIVIDEND operand of the divider, i.e. the p in `p / q`.\n + Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.\n + UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias starts an\n + unsigned calculation, and the S alias starts a signed calculation. + 0x0060 + read-write + 0x00000000 + + + DIV_UDIVISOR + Divider unsigned divisor\n + Write to the DIVISOR operand of the divider, i.e. the q in `p / q`.\n + Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.\n + UDIVISOR/SDIVISOR are aliases of the same internal register. The U alias starts an\n + unsigned calculation, and the S alias starts a signed calculation. + 0x0064 + read-write + 0x00000000 + + + DIV_SDIVIDEND + Divider signed dividend\n + The same as UDIVIDEND, but starts a signed calculation, rather than unsigned. + 0x0068 + read-write + 0x00000000 + + + DIV_SDIVISOR + Divider signed divisor\n + The same as UDIVISOR, but starts a signed calculation, rather than unsigned. + 0x006c + read-write + 0x00000000 + + + DIV_QUOTIENT + Divider result quotient\n + The result of `DIVIDEND / DIVISOR` (division). Contents undefined while CSR_READY is low.\n + For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and DIVISOR differ.\n + This register can be written to directly, for context save/restore purposes. This halts any\n + in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.\n + Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the order\n + REMAINDER, QUOTIENT if CSR_DIRTY is used. + 0x0070 + read-write + 0x00000000 + + + DIV_REMAINDER + Divider result remainder\n + The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined while CSR_READY is low.\n + For signed calculations, REMAINDER is negative only when DIVIDEND is negative.\n + This register can be written to directly, for context save/restore purposes. This halts any\n + in-progress calculation and sets the CSR_READY and CSR_DIRTY flags. + 0x0074 + read-write + 0x00000000 + + + DIV_CSR + Control and status register for divider. + 0x0078 + 0x00000001 + + + DIRTY + Changes to 1 when any register is written, and back to 0 when QUOTIENT is read.\n + Software can use this flag to make save/restore more efficient (skip if not DIRTY).\n + If the flag is used in this way, it's recommended to either read QUOTIENT only,\n + or REMAINDER and then QUOTIENT, to prevent data loss on context switch. + [1:1] + read-only + + + READY + Reads as 0 when a calculation is in progress, 1 otherwise.\n + Writing an operand (xDIVIDEND, xDIVISOR) will immediately start a new calculation, no\n + matter if one is already in progress.\n + Writing to a result register will immediately terminate any in-progress calculation\n + and set the READY and DIRTY flags. + [0:0] + read-only + + + + + INTERP0_ACCUM0 + Read/write access to accumulator 0 + 0x0080 + read-write + 0x00000000 + + + INTERP0_ACCUM1 + Read/write access to accumulator 1 + 0x0084 + read-write + 0x00000000 + + + INTERP0_BASE0 + Read/write access to BASE0 register. + 0x0088 + read-write + 0x00000000 + + + INTERP0_BASE1 + Read/write access to BASE1 register. + 0x008c + read-write + 0x00000000 + + + INTERP0_BASE2 + Read/write access to BASE2 register. + 0x0090 + read-write + 0x00000000 + + + INTERP0_POP_LANE0 + Read LANE0 result, and simultaneously write lane results to both accumulators (POP). + 0x0094 + read-only + 0x00000000 + + + INTERP0_POP_LANE1 + Read LANE1 result, and simultaneously write lane results to both accumulators (POP). + 0x0098 + read-only + 0x00000000 + + + INTERP0_POP_FULL + Read FULL result, and simultaneously write lane results to both accumulators (POP). + 0x009c + read-only + 0x00000000 + + + INTERP0_PEEK_LANE0 + Read LANE0 result, without altering any internal state (PEEK). + 0x00a0 + read-only + 0x00000000 + + + INTERP0_PEEK_LANE1 + Read LANE1 result, without altering any internal state (PEEK). + 0x00a4 + read-only + 0x00000000 + + + INTERP0_PEEK_FULL + Read FULL result, without altering any internal state (PEEK). + 0x00a8 + read-only + 0x00000000 + + + INTERP0_CTRL_LANE0 + Control register for lane 0 + 0x00ac + 0x00000000 + + + OVERF + Set if either OVERF0 or OVERF1 is set. + [25:25] + read-only + + + OVERF1 + Indicates if any masked-off MSBs in ACCUM1 are set. + [24:24] + read-only + + + OVERF0 + Indicates if any masked-off MSBs in ACCUM0 are set. + [23:23] + read-only + + + BLEND + Only present on INTERP0 on each core. If BLEND mode is enabled:\n + - LANE1 result is a linear interpolation between BASE0 and BASE1, controlled\n + by the 8 LSBs of lane 1 shift and mask value (a fractional number between\n + 0 and 255/256ths)\n + - LANE0 result does not have BASE0 added (yields only the 8 LSBs of lane 1 shift+mask value)\n + - FULL result does not have lane 1 shift+mask value added (BASE2 + lane 0 shift+mask)\n + LANE1 SIGNED flag controls whether the interpolation is signed or unsigned. + [21:21] + read-write + + + FORCE_MSB + ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\n + of pointers into flash or SRAM. + [20:19] + read-write + + + ADD_RAW + If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result. + [18:18] + read-write + + + CROSS_RESULT + If 1, feed the opposite lane's result into this lane's accumulator on POP. + [17:17] + read-write + + + CROSS_INPUT + If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\n + Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass) + [16:16] + read-write + + + SIGNED + If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\n + before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor. + [15:15] + read-write + + + MASK_MSB + The most-significant bit allowed to pass by the mask (inclusive)\n + Setting MSB < LSB may cause chip to turn inside-out + [14:10] + read-write + + + MASK_LSB + The least-significant bit allowed to pass by the mask (inclusive) + [9:5] + read-write + + + SHIFT + Logical right-shift applied to accumulator before masking + [4:0] + read-write + + + + + INTERP0_CTRL_LANE1 + Control register for lane 1 + 0x00b0 + 0x00000000 + + + FORCE_MSB + ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\n + of pointers into flash or SRAM. + [20:19] + read-write + + + ADD_RAW + If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result. + [18:18] + read-write + + + CROSS_RESULT + If 1, feed the opposite lane's result into this lane's accumulator on POP. + [17:17] + read-write + + + CROSS_INPUT + If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\n + Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass) + [16:16] + read-write + + + SIGNED + If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\n + before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor. + [15:15] + read-write + + + MASK_MSB + The most-significant bit allowed to pass by the mask (inclusive)\n + Setting MSB < LSB may cause chip to turn inside-out + [14:10] + read-write + + + MASK_LSB + The least-significant bit allowed to pass by the mask (inclusive) + [9:5] + read-write + + + SHIFT + Logical right-shift applied to accumulator before masking + [4:0] + read-write + + + + + INTERP0_ACCUM0_ADD + Values written here are atomically added to ACCUM0\n + Reading yields lane 0's raw shift and mask value (BASE0 not added). + 0x00b4 + 0x00000000 + + + INTERP0_ACCUM0_ADD + [23:0] + read-write + + + + + INTERP0_ACCUM1_ADD + Values written here are atomically added to ACCUM1\n + Reading yields lane 1's raw shift and mask value (BASE1 not added). + 0x00b8 + 0x00000000 + + + INTERP0_ACCUM1_ADD + [23:0] + read-write + + + + + INTERP0_BASE_1AND0 + On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\n + Each half is sign-extended to 32 bits if that lane's SIGNED flag is set. + 0x00bc + write-only + 0x00000000 + + + INTERP1_ACCUM0 + Read/write access to accumulator 0 + 0x00c0 + read-write + 0x00000000 + + + INTERP1_ACCUM1 + Read/write access to accumulator 1 + 0x00c4 + read-write + 0x00000000 + + + INTERP1_BASE0 + Read/write access to BASE0 register. + 0x00c8 + read-write + 0x00000000 + + + INTERP1_BASE1 + Read/write access to BASE1 register. + 0x00cc + read-write + 0x00000000 + + + INTERP1_BASE2 + Read/write access to BASE2 register. + 0x00d0 + read-write + 0x00000000 + + + INTERP1_POP_LANE0 + Read LANE0 result, and simultaneously write lane results to both accumulators (POP). + 0x00d4 + read-only + 0x00000000 + + + INTERP1_POP_LANE1 + Read LANE1 result, and simultaneously write lane results to both accumulators (POP). + 0x00d8 + read-only + 0x00000000 + + + INTERP1_POP_FULL + Read FULL result, and simultaneously write lane results to both accumulators (POP). + 0x00dc + read-only + 0x00000000 + + + INTERP1_PEEK_LANE0 + Read LANE0 result, without altering any internal state (PEEK). + 0x00e0 + read-only + 0x00000000 + + + INTERP1_PEEK_LANE1 + Read LANE1 result, without altering any internal state (PEEK). + 0x00e4 + read-only + 0x00000000 + + + INTERP1_PEEK_FULL + Read FULL result, without altering any internal state (PEEK). + 0x00e8 + read-only + 0x00000000 + + + INTERP1_CTRL_LANE0 + Control register for lane 0 + 0x00ec + 0x00000000 + + + OVERF + Set if either OVERF0 or OVERF1 is set. + [25:25] + read-only + + + OVERF1 + Indicates if any masked-off MSBs in ACCUM1 are set. + [24:24] + read-only + + + OVERF0 + Indicates if any masked-off MSBs in ACCUM0 are set. + [23:23] + read-only + + + CLAMP + Only present on INTERP1 on each core. If CLAMP mode is enabled:\n + - LANE0 result is shifted and masked ACCUM0, clamped by a lower bound of\n + BASE0 and an upper bound of BASE1.\n + - Signedness of these comparisons is determined by LANE0_CTRL_SIGNED + [22:22] + read-write + + + FORCE_MSB + ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\n + of pointers into flash or SRAM. + [20:19] + read-write + + + ADD_RAW + If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result. + [18:18] + read-write + + + CROSS_RESULT + If 1, feed the opposite lane's result into this lane's accumulator on POP. + [17:17] + read-write + + + CROSS_INPUT + If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\n + Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass) + [16:16] + read-write + + + SIGNED + If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\n + before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor. + [15:15] + read-write + + + MASK_MSB + The most-significant bit allowed to pass by the mask (inclusive)\n + Setting MSB < LSB may cause chip to turn inside-out + [14:10] + read-write + + + MASK_LSB + The least-significant bit allowed to pass by the mask (inclusive) + [9:5] + read-write + + + SHIFT + Logical right-shift applied to accumulator before masking + [4:0] + read-write + + + + + INTERP1_CTRL_LANE1 + Control register for lane 1 + 0x00f0 + 0x00000000 + + + FORCE_MSB + ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\n + of pointers into flash or SRAM. + [20:19] + read-write + + + ADD_RAW + If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result. + [18:18] + read-write + + + CROSS_RESULT + If 1, feed the opposite lane's result into this lane's accumulator on POP. + [17:17] + read-write + + + CROSS_INPUT + If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\n + Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass) + [16:16] + read-write + + + SIGNED + If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\n + before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor. + [15:15] + read-write + + + MASK_MSB + The most-significant bit allowed to pass by the mask (inclusive)\n + Setting MSB < LSB may cause chip to turn inside-out + [14:10] + read-write + + + MASK_LSB + The least-significant bit allowed to pass by the mask (inclusive) + [9:5] + read-write + + + SHIFT + Logical right-shift applied to accumulator before masking + [4:0] + read-write + + + + + INTERP1_ACCUM0_ADD + Values written here are atomically added to ACCUM0\n + Reading yields lane 0's raw shift and mask value (BASE0 not added). + 0x00f4 + 0x00000000 + + + INTERP1_ACCUM0_ADD + [23:0] + read-write + + + + + INTERP1_ACCUM1_ADD + Values written here are atomically added to ACCUM1\n + Reading yields lane 1's raw shift and mask value (BASE1 not added). + 0x00f8 + 0x00000000 + + + INTERP1_ACCUM1_ADD + [23:0] + read-write + + + + + INTERP1_BASE_1AND0 + On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\n + Each half is sign-extended to 32 bits if that lane's SIGNED flag is set. + 0x00fc + write-only + 0x00000000 + + + SPINLOCK0 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0100 + read-write + 0x00000000 + + + SPINLOCK1 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0104 + read-write + 0x00000000 + + + SPINLOCK2 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0108 + read-write + 0x00000000 + + + SPINLOCK3 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x010c + read-write + 0x00000000 + + + SPINLOCK4 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0110 + read-write + 0x00000000 + + + SPINLOCK5 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0114 + read-write + 0x00000000 + + + SPINLOCK6 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0118 + read-write + 0x00000000 + + + SPINLOCK7 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x011c + read-write + 0x00000000 + + + SPINLOCK8 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0120 + read-write + 0x00000000 + + + SPINLOCK9 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0124 + read-write + 0x00000000 + + + SPINLOCK10 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0128 + read-write + 0x00000000 + + + SPINLOCK11 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x012c + read-write + 0x00000000 + + + SPINLOCK12 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0130 + read-write + 0x00000000 + + + SPINLOCK13 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0134 + read-write + 0x00000000 + + + SPINLOCK14 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0138 + read-write + 0x00000000 + + + SPINLOCK15 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x013c + read-write + 0x00000000 + + + SPINLOCK16 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0140 + read-write + 0x00000000 + + + SPINLOCK17 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0144 + read-write + 0x00000000 + + + SPINLOCK18 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0148 + read-write + 0x00000000 + + + SPINLOCK19 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x014c + read-write + 0x00000000 + + + SPINLOCK20 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0150 + read-write + 0x00000000 + + + SPINLOCK21 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0154 + read-write + 0x00000000 + + + SPINLOCK22 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0158 + read-write + 0x00000000 + + + SPINLOCK23 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x015c + read-write + 0x00000000 + + + SPINLOCK24 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0160 + read-write + 0x00000000 + + + SPINLOCK25 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0164 + read-write + 0x00000000 + + + SPINLOCK26 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0168 + read-write + 0x00000000 + + + SPINLOCK27 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x016c + read-write + 0x00000000 + + + SPINLOCK28 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0170 + read-write + 0x00000000 + + + SPINLOCK29 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0174 + read-write + 0x00000000 + + + SPINLOCK30 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x0178 + read-write + 0x00000000 + + + SPINLOCK31 + Reading from a spinlock address will:\n + - Return 0 if lock is already locked\n + - Otherwise return nonzero, and simultaneously claim the lock\n\n + Writing (any value) releases the lock.\n + If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\n + The value returned on success is 0x1 << lock number. + 0x017c + read-write + 0x00000000 + + + + + PPB + 1 + 0xe0000000 + 32 + + 0 + 0x10000 + registers + + + + SYST_CSR + Use the SysTick Control and Status Register to enable the SysTick features. + 0xe010 + 0x00000000 + + + COUNTFLAG + Returns 1 if timer counted to 0 since last time this was read. Clears on read by application or debugger. + [16:16] + read-only + + + CLKSOURCE + SysTick clock source. Always reads as one if SYST_CALIB reports NOREF.\n + Selects the SysTick timer clock source:\n + 0 = External reference clock.\n + 1 = Processor clock. + [2:2] + read-write + + + TICKINT + Enables SysTick exception request:\n + 0 = Counting down to zero does not assert the SysTick exception request.\n + 1 = Counting down to zero to asserts the SysTick exception request. + [1:1] + read-write + + + ENABLE + Enable SysTick counter:\n + 0 = Counter disabled.\n + 1 = Counter enabled. + [0:0] + read-write + + + + + SYST_RVR + Use the SysTick Reload Value Register to specify the start value to load into the current value register when the counter reaches 0. It can be any value between 0 and 0x00FFFFFF. A start value of 0 is possible, but has no effect because the SysTick interrupt and COUNTFLAG are activated when counting from 1 to 0. The reset value of this register is UNKNOWN.\n + To generate a multi-shot timer with a period of N processor clock cycles, use a RELOAD value of N-1. For example, if the SysTick interrupt is required every 100 clock pulses, set RELOAD to 99. + 0xe014 + 0x00000000 + + + RELOAD + Value to load into the SysTick Current Value Register when the counter reaches 0. + [23:0] + read-write + + + + + SYST_CVR + Use the SysTick Current Value Register to find the current value in the register. The reset value of this register is UNKNOWN. + 0xe018 + 0x00000000 + + + CURRENT + Reads return the current value of the SysTick counter. This register is write-clear. Writing to it with any value clears the register to 0. Clearing this register also clears the COUNTFLAG bit of the SysTick Control and Status Register. + [23:0] + read-write + + + + + SYST_CALIB + Use the SysTick Calibration Value Register to enable software to scale to any required speed using divide and multiply. + 0xe01c + 0x00000000 + + + NOREF + If reads as 1, the Reference clock is not provided - the CLKSOURCE bit of the SysTick Control and Status register will be forced to 1 and cannot be cleared to 0. + [31:31] + read-only + + + SKEW + If reads as 1, the calibration value for 10ms is inexact (due to clock frequency). + [30:30] + read-only + + + TENMS + An optional Reload value to be used for 10ms (100Hz) timing, subject to system clock skew errors. If the value reads as 0, the calibration value is not known. + [23:0] + read-only + + + + + NVIC_ISER + Use the Interrupt Set-Enable Register to enable interrupts and determine which interrupts are currently enabled.\n + If a pending interrupt is enabled, the NVIC activates the interrupt based on its priority. If an interrupt is not enabled, asserting its interrupt signal changes the interrupt state to pending, but the NVIC never activates the interrupt, regardless of its priority. + 0xe100 + 0x00000000 + + + SETENA + Interrupt set-enable bits.\n + Write:\n + 0 = No effect.\n + 1 = Enable interrupt.\n + Read:\n + 0 = Interrupt disabled.\n + 1 = Interrupt enabled. + [31:0] + read-write + + + + + NVIC_ICER + Use the Interrupt Clear-Enable Registers to disable interrupts and determine which interrupts are currently enabled. + 0xe180 + 0x00000000 + + + CLRENA + Interrupt clear-enable bits.\n + Write:\n + 0 = No effect.\n + 1 = Disable interrupt.\n + Read:\n + 0 = Interrupt disabled.\n + 1 = Interrupt enabled. + [31:0] + read-write + + + + + NVIC_ISPR + The NVIC_ISPR forces interrupts into the pending state, and shows which interrupts are pending. + 0xe200 + 0x00000000 + + + SETPEND + Interrupt set-pending bits.\n + Write:\n + 0 = No effect.\n + 1 = Changes interrupt state to pending.\n + Read:\n + 0 = Interrupt is not pending.\n + 1 = Interrupt is pending.\n + Note: Writing 1 to the NVIC_ISPR bit corresponding to:\n + An interrupt that is pending has no effect.\n + A disabled interrupt sets the state of that interrupt to pending. + [31:0] + read-write + + + + + NVIC_ICPR + Use the Interrupt Clear-Pending Register to clear pending interrupts and determine which interrupts are currently pending. + 0xe280 + 0x00000000 + + + CLRPEND + Interrupt clear-pending bits.\n + Write:\n + 0 = No effect.\n + 1 = Removes pending state and interrupt.\n + Read:\n + 0 = Interrupt is not pending.\n + 1 = Interrupt is pending. + [31:0] + read-write + + + + + NVIC_IPR0 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.\n + Note: Writing 1 to an NVIC_ICPR bit does not affect the active state of the corresponding interrupt.\n + These registers are only word-accessible + 0xe400 + 0x00000000 + + + IP_3 + Priority of interrupt 3 + [31:30] + read-write + + + IP_2 + Priority of interrupt 2 + [23:22] + read-write + + + IP_1 + Priority of interrupt 1 + [15:14] + read-write + + + IP_0 + Priority of interrupt 0 + [7:6] + read-write + + + + + NVIC_IPR1 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest. + 0xe404 + 0x00000000 + + + IP_7 + Priority of interrupt 7 + [31:30] + read-write + + + IP_6 + Priority of interrupt 6 + [23:22] + read-write + + + IP_5 + Priority of interrupt 5 + [15:14] + read-write + + + IP_4 + Priority of interrupt 4 + [7:6] + read-write + + + + + NVIC_IPR2 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest. + 0xe408 + 0x00000000 + + + IP_11 + Priority of interrupt 11 + [31:30] + read-write + + + IP_10 + Priority of interrupt 10 + [23:22] + read-write + + + IP_9 + Priority of interrupt 9 + [15:14] + read-write + + + IP_8 + Priority of interrupt 8 + [7:6] + read-write + + + + + NVIC_IPR3 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest. + 0xe40c + 0x00000000 + + + IP_15 + Priority of interrupt 15 + [31:30] + read-write + + + IP_14 + Priority of interrupt 14 + [23:22] + read-write + + + IP_13 + Priority of interrupt 13 + [15:14] + read-write + + + IP_12 + Priority of interrupt 12 + [7:6] + read-write + + + + + NVIC_IPR4 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest. + 0xe410 + 0x00000000 + + + IP_19 + Priority of interrupt 19 + [31:30] + read-write + + + IP_18 + Priority of interrupt 18 + [23:22] + read-write + + + IP_17 + Priority of interrupt 17 + [15:14] + read-write + + + IP_16 + Priority of interrupt 16 + [7:6] + read-write + + + + + NVIC_IPR5 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest. + 0xe414 + 0x00000000 + + + IP_23 + Priority of interrupt 23 + [31:30] + read-write + + + IP_22 + Priority of interrupt 22 + [23:22] + read-write + + + IP_21 + Priority of interrupt 21 + [15:14] + read-write + + + IP_20 + Priority of interrupt 20 + [7:6] + read-write + + + + + NVIC_IPR6 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest. + 0xe418 + 0x00000000 + + + IP_27 + Priority of interrupt 27 + [31:30] + read-write + + + IP_26 + Priority of interrupt 26 + [23:22] + read-write + + + IP_25 + Priority of interrupt 25 + [15:14] + read-write + + + IP_24 + Priority of interrupt 24 + [7:6] + read-write + + + + + NVIC_IPR7 + Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest. + 0xe41c + 0x00000000 + + + IP_31 + Priority of interrupt 31 + [31:30] + read-write + + + IP_30 + Priority of interrupt 30 + [23:22] + read-write + + + IP_29 + Priority of interrupt 29 + [15:14] + read-write + + + IP_28 + Priority of interrupt 28 + [7:6] + read-write + + + + + CPUID + Read the CPU ID Base Register to determine: the ID number of the processor core, the version number of the processor core, the implementation details of the processor core. + 0xed00 + 0x410cc601 + + + IMPLEMENTER + Implementor code: 0x41 = ARM + [31:24] + read-only + + + VARIANT + Major revision number n in the rnpm revision status:\n + 0x0 = Revision 0. + [23:20] + read-only + + + ARCHITECTURE + Constant that defines the architecture of the processor:\n + 0xC = ARMv6-M architecture. + [19:16] + read-only + + + PARTNO + Number of processor within family: 0xC60 = Cortex-M0+ + [15:4] + read-only + + + REVISION + Minor revision number m in the rnpm revision status:\n + 0x1 = Patch 1. + [3:0] + read-only + + + + + ICSR + Use the Interrupt Control State Register to set a pending Non-Maskable Interrupt (NMI), set or clear a pending PendSV, set or clear a pending SysTick, check for pending exceptions, check the vector number of the highest priority pended exception, check the vector number of the active exception. + 0xed04 + 0x00000000 + + + NMIPENDSET + Setting this bit will activate an NMI. Since NMI is the highest priority exception, it will activate as soon as it is registered.\n + NMI set-pending bit.\n + Write:\n + 0 = No effect.\n + 1 = Changes NMI exception state to pending.\n + Read:\n + 0 = NMI exception is not pending.\n + 1 = NMI exception is pending.\n + Because NMI is the highest-priority exception, normally the processor enters the NMI\n + exception handler as soon as it detects a write of 1 to this bit. Entering the handler then clears\n + this bit to 0. This means a read of this bit by the NMI exception handler returns 1 only if the\n + NMI signal is reasserted while the processor is executing that handler. + [31:31] + read-write + + + PENDSVSET + PendSV set-pending bit.\n + Write:\n + 0 = No effect.\n + 1 = Changes PendSV exception state to pending.\n + Read:\n + 0 = PendSV exception is not pending.\n + 1 = PendSV exception is pending.\n + Writing 1 to this bit is the only way to set the PendSV exception state to pending. + [28:28] + read-write + + + PENDSVCLR + PendSV clear-pending bit.\n + Write:\n + 0 = No effect.\n + 1 = Removes the pending state from the PendSV exception. + [27:27] + read-write + + + PENDSTSET + SysTick exception set-pending bit.\n + Write:\n + 0 = No effect.\n + 1 = Changes SysTick exception state to pending.\n + Read:\n + 0 = SysTick exception is not pending.\n + 1 = SysTick exception is pending. + [26:26] + read-write + + + PENDSTCLR + SysTick exception clear-pending bit.\n + Write:\n + 0 = No effect.\n + 1 = Removes the pending state from the SysTick exception.\n + This bit is WO. On a register read its value is Unknown. + [25:25] + read-write + + + ISRPREEMPT + The system can only access this bit when the core is halted. It indicates that a pending interrupt is to be taken in the next running cycle. If C_MASKINTS is clear in the Debug Halting Control and Status Register, the interrupt is serviced. + [23:23] + read-only + + + ISRPENDING + External interrupt pending flag + [22:22] + read-only + + + VECTPENDING + Indicates the exception number for the highest priority pending exception: 0 = no pending exceptions. Non zero = The pending state includes the effect of memory-mapped enable and mask registers. It does not include the PRIMASK special-purpose register qualifier. + [20:12] + read-only + + + VECTACTIVE + Active exception number field. Reset clears the VECTACTIVE field. + [8:0] + read-only + + + + + VTOR + The VTOR holds the vector table offset address. + 0xed08 + 0x00000000 + + + TBLOFF + Bits [31:8] of the indicate the vector table offset address. + [31:8] + read-write + + + + + AIRCR + Use the Application Interrupt and Reset Control Register to: determine data endianness, clear all active state information from debug halt mode, request a system reset. + 0xed0c + 0x00000000 + + + VECTKEY + Register key:\n + Reads as Unknown\n + On writes, write 0x05FA to VECTKEY, otherwise the write is ignored. + [31:16] + read-write + + + ENDIANESS + Data endianness implemented:\n + 0 = Little-endian. + [15:15] + read-only + + + SYSRESETREQ + Writing 1 to this bit causes the SYSRESETREQ signal to the outer system to be asserted to request a reset. The intention is to force a large system reset of all major components except for debug. The C_HALT bit in the DHCSR is cleared as a result of the system reset requested. The debugger does not lose contact with the device. + [2:2] + read-write + + + VECTCLRACTIVE + Clears all active state information for fixed and configurable exceptions. This bit: is self-clearing, can only be set by the DAP when the core is halted. When set: clears all active exception status of the processor, forces a return to Thread mode, forces an IPSR of 0. A debugger must re-initialize the stack. + [1:1] + read-write + + + + + SCR + System Control Register. Use the System Control Register for power-management functions: signal to the system when the processor can enter a low power state, control how the processor enters and exits low power states. + 0xed10 + 0x00000000 + + + SEVONPEND + Send Event on Pending bit:\n + 0 = Only enabled interrupts or events can wakeup the processor, disabled interrupts are excluded.\n + 1 = Enabled events and all interrupts, including disabled interrupts, can wakeup the processor.\n + When an event or interrupt becomes pending, the event signal wakes up the processor from WFE. If the\n + processor is not waiting for an event, the event is registered and affects the next WFE.\n + The processor also wakes up on execution of an SEV instruction or an external event. + [4:4] + read-write + + + SLEEPDEEP + Controls whether the processor uses sleep or deep sleep as its low power mode:\n + 0 = Sleep.\n + 1 = Deep sleep. + [2:2] + read-write + + + SLEEPONEXIT + Indicates sleep-on-exit when returning from Handler mode to Thread mode:\n + 0 = Do not sleep when returning to Thread mode.\n + 1 = Enter sleep, or deep sleep, on return from an ISR to Thread mode.\n + Setting this bit to 1 enables an interrupt driven application to avoid returning to an empty main application. + [1:1] + read-write + + + + + CCR + The Configuration and Control Register permanently enables stack alignment and causes unaligned accesses to result in a Hard Fault. + 0xed14 + 0x00000000 + + + STKALIGN + Always reads as one, indicates 8-byte stack alignment on exception entry. On exception entry, the processor uses bit[9] of the stacked PSR to indicate the stack alignment. On return from the exception it uses this stacked bit to restore the correct stack alignment. + [9:9] + read-only + + + UNALIGN_TRP + Always reads as one, indicates that all unaligned accesses generate a HardFault. + [3:3] + read-only + + + + + SHPR2 + System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 2 to set the priority of SVCall. + 0xed1c + 0x00000000 + + + PRI_11 + Priority of system handler 11, SVCall + [31:30] + read-write + + + + + SHPR3 + System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 3 to set the priority of PendSV and SysTick. + 0xed20 + 0x00000000 + + + PRI_15 + Priority of system handler 15, SysTick + [31:30] + read-write + + + PRI_14 + Priority of system handler 14, PendSV + [23:22] + read-write + + + + + SHCSR + Use the System Handler Control and State Register to determine or clear the pending status of SVCall. + 0xed24 + 0x00000000 + + + SVCALLPENDED + Reads as 1 if SVCall is Pending. Write 1 to set pending SVCall, write 0 to clear pending SVCall. + [15:15] + read-write + + + + + MPU_TYPE + Read the MPU Type Register to determine if the processor implements an MPU, and how many regions the MPU supports. + 0xed90 + 0x00000800 + + + IREGION + Instruction region. Reads as zero as ARMv6-M only supports a unified MPU. + [23:16] + read-only + + + DREGION + Number of regions supported by the MPU. + [15:8] + read-only + + + SEPARATE + Indicates support for separate instruction and data address maps. Reads as 0 as ARMv6-M only supports a unified MPU. + [0:0] + read-only + + + + + MPU_CTRL + Use the MPU Control Register to enable and disable the MPU, and to control whether the default memory map is enabled as a background region for privileged accesses, and whether the MPU is enabled for HardFaults and NMIs. + 0xed94 + 0x00000000 + + + PRIVDEFENA + Controls whether the default memory map is enabled as a background region for privileged accesses. This bit is ignored when ENABLE is clear.\n + 0 = If the MPU is enabled, disables use of the default memory map. Any memory access to a location not\n + covered by any enabled region causes a fault.\n + 1 = If the MPU is enabled, enables use of the default memory map as a background region for privileged software accesses.\n + When enabled, the background region acts as if it is region number -1. Any region that is defined and enabled has priority over this default map. + [2:2] + read-write + + + HFNMIENA + Controls the use of the MPU for HardFaults and NMIs. Setting this bit when ENABLE is clear results in UNPREDICTABLE behaviour.\n + When the MPU is enabled:\n + 0 = MPU is disabled during HardFault and NMI handlers, regardless of the value of the ENABLE bit.\n + 1 = the MPU is enabled during HardFault and NMI handlers. + [1:1] + read-write + + + ENABLE + Enables the MPU. If the MPU is disabled, privileged and unprivileged accesses use the default memory map.\n + 0 = MPU disabled.\n + 1 = MPU enabled. + [0:0] + read-write + + + + + MPU_RNR + Use the MPU Region Number Register to select the region currently accessed by MPU_RBAR and MPU_RASR. + 0xed98 + 0x00000000 + + + REGION + Indicates the MPU region referenced by the MPU_RBAR and MPU_RASR registers.\n + The MPU supports 8 memory regions, so the permitted values of this field are 0-7. + [3:0] + read-write + + + + + MPU_RBAR + Read the MPU Region Base Address Register to determine the base address of the region identified by MPU_RNR. Write to update the base address of said region or that of a specified region, with whose number MPU_RNR will also be updated. + 0xed9c + 0x00000000 + + + ADDR + Base address of the region. + [31:8] + read-write + + + VALID + On writes, indicates whether the write must update the base address of the region identified by the REGION field, updating the MPU_RNR to indicate this new region.\n + Write:\n + 0 = MPU_RNR not changed, and the processor:\n + Updates the base address for the region specified in the MPU_RNR.\n + Ignores the value of the REGION field.\n + 1 = The processor:\n + Updates the value of the MPU_RNR to the value of the REGION field.\n + Updates the base address for the region specified in the REGION field.\n + Always reads as zero. + [4:4] + read-write + + + REGION + On writes, specifies the number of the region whose base address to update provided VALID is set written as 1. On reads, returns bits [3:0] of MPU_RNR. + [3:0] + read-write + + + + + MPU_RASR + Use the MPU Region Attribute and Size Register to define the size, access behaviour and memory type of the region identified by MPU_RNR, and enable that region. + 0xeda0 + 0x00000000 + + + ATTRS + The MPU Region Attribute field. Use to define the region attribute control.\n + 28 = XN: Instruction access disable bit:\n + 0 = Instruction fetches enabled.\n + 1 = Instruction fetches disabled.\n + 26:24 = AP: Access permission field\n + 18 = S: Shareable bit\n + 17 = C: Cacheable bit\n + 16 = B: Bufferable bit + [31:16] + read-write + + + SRD + Subregion Disable. For regions of 256 bytes or larger, each bit of this field controls whether one of the eight equal subregions is enabled. + [15:8] + read-write + + + SIZE + Indicates the region size. Region size in bytes = 2^(SIZE+1). The minimum permitted value is 7 (b00111) = 256Bytes + [5:1] + read-write + + + ENABLE + Enables the region. + [0:0] + read-write + + + + + + + \ No newline at end of file diff --git a/variants/ARDUINO_NANO33BLE/defines.txt b/variants/ARDUINO_NANO33BLE/defines.txt index 0a9037a60..8bf9cde35 100644 --- a/variants/ARDUINO_NANO33BLE/defines.txt +++ b/variants/ARDUINO_NANO33BLE/defines.txt @@ -34,7 +34,7 @@ -DFEATURE_STORAGE=1 -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690446991.0429106 +-DMBED_BUILD_TIMESTAMP=1738678457.278008 -D__MBED_CMSIS_RTOS_CM -DMBED_MPU_CUSTOM -DMBED_TICKLESS diff --git a/variants/ARDUINO_NANO33BLE/libs/libmbed.a b/variants/ARDUINO_NANO33BLE/libs/libmbed.a index 915858f44..729832d39 100644 Binary files a/variants/ARDUINO_NANO33BLE/libs/libmbed.a and b/variants/ARDUINO_NANO33BLE/libs/libmbed.a differ diff --git a/variants/ARDUINO_NANO33BLE/variant.cpp b/variants/ARDUINO_NANO33BLE/variant.cpp index c92e42eda..cbeb7fc76 100644 --- a/variants/ARDUINO_NANO33BLE/variant.cpp +++ b/variants/ARDUINO_NANO33BLE/variant.cpp @@ -156,8 +156,18 @@ void initVariant() { pinMode(PIN_ENABLE_I2C_PULLUP, OUTPUT); digitalWrite(PIN_ENABLE_SENSORS_3V3, HIGH); + delay(10); digitalWrite(PIN_ENABLE_I2C_PULLUP, HIGH); + // Set high drive pin to properly power the bmi150 + nrf_gpio_cfg( + digitalPinToPinName(PIN_ENABLE_SENSORS_3V3), + NRF_GPIO_PIN_DIR_OUTPUT, + NRF_GPIO_PIN_INPUT_DISCONNECT, + NRF_GPIO_PIN_NOPULL, + NRF_GPIO_PIN_H0H1, + NRF_GPIO_PIN_NOSENSE); + // Disable UARTE0 which is initially enabled by the bootloader nrf_uarte_task_trigger(NRF_UARTE0, NRF_UARTE_TASK_STOPRX); while (!nrf_uarte_event_check(NRF_UARTE0, NRF_UARTE_EVENT_RXTO)) ; diff --git a/variants/EDGE_CONTROL/conf/.mbedignore b/variants/EDGE_CONTROL/conf/.mbedignore index 3562a46dc..d10167ba6 100644 --- a/variants/EDGE_CONTROL/conf/.mbedignore +++ b/variants/EDGE_CONTROL/conf/.mbedignore @@ -1,2 +1 @@ -mbed-os/connectivity/drivers/cellular/* mbed-os/connectivity/nanostack/* \ No newline at end of file diff --git a/variants/EDGE_CONTROL/conf/mbed_app.json b/variants/EDGE_CONTROL/conf/mbed_app.json index 065dece92..93d202c0d 100644 --- a/variants/EDGE_CONTROL/conf/mbed_app.json +++ b/variants/EDGE_CONTROL/conf/mbed_app.json @@ -4,6 +4,7 @@ "MBED_STACK_STATS_ENABLED=1", "MBED_MEM_TRACING_ENABLED=1", "NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS=8", + "MBEDTLS_SHA1_C=1", "NRFX_WDT_ENABLED=1" ], "target_overrides": { @@ -13,8 +14,13 @@ "platform.stdio-baud-rate": 115200, "platform.default-serial-baud-rate": 115200, "platform.callback-nontrivial": true, - "rtos.main-thread-stack-size": 32768, - "target.mbed_app_start": "0x10000" + "rtos.main-thread-stack-size": 4096, + "cellular.debug-at": true, + "cellular.offload-dns-queries": true, + "cellular.at-handler-buffer-size": 1024, + "mbed-trace.enable": true, + "target.mbed_app_start": "0x10000", + "lwip.raw-socket-enabled": true }, "EDGE_CONTROL": { "sd.SPI_MOSI": "P0_20", diff --git a/variants/EDGE_CONTROL/defines.txt b/variants/EDGE_CONTROL/defines.txt index 0198e4a12..4fd396229 100644 --- a/variants/EDGE_CONTROL/defines.txt +++ b/variants/EDGE_CONTROL/defines.txt @@ -38,7 +38,7 @@ -DFEATURE_STORAGE=1 -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447154.5646534 +-DMBED_BUILD_TIMESTAMP=1738678638.4581091 -D__MBED_CMSIS_RTOS_CM -DMBED_MPU_CUSTOM -DMBED_TICKLESS diff --git a/variants/EDGE_CONTROL/includes.txt b/variants/EDGE_CONTROL/includes.txt index 238ddb925..cbd9ed0fd 100644 --- a/variants/EDGE_CONTROL/includes.txt +++ b/variants/EDGE_CONTROL/includes.txt @@ -94,6 +94,33 @@ -iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/stm-s2lp-rf-driver/source -iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/stm-s2lp-rf-driver/stm-s2lp-rf-driver -iwithprefixbefore/mbed/connectivity/drivers/ble/FEATURE_BLE/TARGET_NORDIC/TARGET_NORDIC_CORDIO/TARGET_NRF5x +-iwithprefixbefore/mbed/connectivity/drivers/cellular +-iwithprefixbefore/mbed/connectivity/drivers/cellular/Altair +-iwithprefixbefore/mbed/connectivity/drivers/cellular/Altair/ALT1250 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/Altair/ALT1250/PPP +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GEMALTO +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GEMALTO/CINTERION +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GENERIC +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GENERIC/GENERIC_AT3GPP +-iwithprefixbefore/mbed/connectivity/drivers/cellular/MultiTech +-iwithprefixbefore/mbed/connectivity/drivers/cellular/MultiTech/DragonflyNano +-iwithprefixbefore/mbed/connectivity/drivers/cellular/MultiTech/DragonflyNano/PPP +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/BC95 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/BG96 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/EC2X +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/M26 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/UG96 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/RiotMicro +-iwithprefixbefore/mbed/connectivity/drivers/cellular/RiotMicro/AT +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT/HE910 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT/ME310 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT/ME910 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX/AT +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX/N2XX +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX/PPP -iwithprefixbefore/mbed/connectivity/drivers/mbedtls/FEATURE_CRYPTOCELL310 -iwithprefixbefore/mbed/connectivity/drivers/mbedtls/FEATURE_CRYPTOCELL310/TARGET_MCU_NRF52840 -iwithprefixbefore/mbed/connectivity/drivers/mbedtls/FEATURE_CRYPTOCELL310/include diff --git a/variants/EDGE_CONTROL/libs/libmbed.a b/variants/EDGE_CONTROL/libs/libmbed.a index 69085f107..d42e1137e 100644 Binary files a/variants/EDGE_CONTROL/libs/libmbed.a and b/variants/EDGE_CONTROL/libs/libmbed.a differ diff --git a/variants/EDGE_CONTROL/mbed_config.h b/variants/EDGE_CONTROL/mbed_config.h index 83a45d8be..31fa1228d 100644 --- a/variants/EDGE_CONTROL/mbed_config.h +++ b/variants/EDGE_CONTROL/mbed_config.h @@ -58,6 +58,8 @@ #define L2C_COC_CHAN_MAX 1 // set by library:cordio #define L2C_COC_REG_MAX 1 // set by library:cordio #define LHCI_ENABLE_VS 0 // set by library:cordio-ll +#define MBED_CONF_ALT1250_PPP_BAUDRATE 115200 // set by library:ALT1250_PPP +#define MBED_CONF_ALT1250_PPP_PROVIDE_DEFAULT 0 // set by library:ALT1250_PPP #define MBED_CONF_ATMEL_RF_ASSUME_SPACED_SPI 0 // set by library:atmel-rf #define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED 7500000 // set by library:atmel-rf #define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED_BYTE_SPACING 250 // set by library:atmel-rf @@ -69,10 +71,11 @@ #define MBED_CONF_BLE_API_IMPLEMENTATION_MAX_CHARACTERISTIC_AUTHORISATION_COUNT 20 // set by library:ble-api-implementation #define MBED_CONF_BLE_PRESENT 1 // set by library:ble #define MBED_CONF_BLE_TRACE_HUMAN_READABLE_ENUMS 0 // set by library:ble -#define MBED_CONF_CELLULAR_AT_HANDLER_BUFFER_SIZE 32 // set by library:cellular +#define MBED_CONF_CELLULAR_AT_HANDLER_BUFFER_SIZE 1024 // set by application[*] #define MBED_CONF_CELLULAR_CONTROL_PLANE_OPT 0 // set by library:cellular -#define MBED_CONF_CELLULAR_DEBUG_AT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_DEBUG_AT 1 // set by application[*] #define MBED_CONF_CELLULAR_MAX_CP_DATA_RECV_LEN 1358 // set by library:cellular +#define MBED_CONF_CELLULAR_OFFLOAD_DNS_QUERIES 1 // set by application[*] #define MBED_CONF_CELLULAR_PRESENT 1 // set by library:cellular #define MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY 0 // set by library:cellular #define MBED_CONF_CELLULAR_USE_APN_LOOKUP 0 // set by library:cellular @@ -182,6 +185,10 @@ #define MBED_CONF_FILESYSTEM_PRESENT 1 // set by library:filesystem #define MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS 0xFFFFFFFF // set by library:flashiap-block-device #define MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE 0 // set by library:flashiap-block-device +#define MBED_CONF_GEMALTO_CINTERION_BAUDRATE 115200 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GEMALTO_CINTERION_PROVIDE_DEFAULT 0 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GENERIC_AT3GPP_BAUDRATE 115200 // set by library:GENERIC_AT3GPP +#define MBED_CONF_GENERIC_AT3GPP_PROVIDE_DEFAULT 0 // set by library:GENERIC_AT3GPP #define MBED_CONF_LORA_ADR_ON 1 // set by library:lora #define MBED_CONF_LORA_APPLICATION_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora #define MBED_CONF_LORA_APPLICATION_KEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora @@ -232,7 +239,7 @@ #define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip #define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip #define MBED_CONF_LWIP_PRESENT 1 // set by library:lwip -#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 1 // set by application[*] #define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip @@ -247,6 +254,7 @@ #define MBED_CONF_LWIP_TCP_WND (4 * TCP_MSS) // set by library:lwip #define MBED_CONF_LWIP_UDP_SOCKET_MAX 4 // set by library:lwip #define MBED_CONF_LWIP_USE_MBED_TRACE 0 // set by library:lwip +#define MBED_CONF_MBED_TRACE_ENABLE 1 // set by application[*] #define MBED_CONF_MCR20A_PROVIDE_DEFAULT 0 // set by library:mcr20a #define MBED_CONF_NANOSTACK_LIBSERVICE_NSDYNMEM_TRACKER_ENABLED 0 // set by library:nanostack-libservice #define MBED_CONF_NANOSTACK_LIBSERVICE_PRESENT 1 // set by library:nanostack-libservice @@ -307,13 +315,26 @@ #define MBED_CONF_QSPIF_QSPI_MIN_READ_SIZE 4 // set by library:qspif[MCU_NRF52840] #define MBED_CONF_QSPIF_QSPI_POLARITY_MODE 0 // set by library:qspif #define MBED_CONF_QSPIF_QSPI_SCK MBED_CONF_DRIVERS_QSPI_SCK // set by library:qspif +#define MBED_CONF_QUECTEL_BC95_BAUDRATE 9600 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BC95_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BG96_BAUDRATE 115200 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_BG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_EC2X_BAUDRATE 115200 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_EC2X_PROVIDE_DEFAULT 0 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_EC2X_START_TIMEOUT 15000 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_M26_BAUDRATE 115200 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_M26_PROVIDE_DEFAULT 0 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_UG96_BAUDRATE 115200 // set by library:QUECTEL_UG96 +#define MBED_CONF_QUECTEL_UG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_UG96 +#define MBED_CONF_RM1000_AT_BAUDRATE 230400 // set by library:RM1000_AT +#define MBED_CONF_RM1000_AT_PROVIDE_DEFAULT 0 // set by library:RM1000_AT #define MBED_CONF_RTOS_API_PRESENT 1 // set by library:rtos-api #define MBED_CONF_RTOS_ENABLE_ALL_RTX_EVENTS 0 // set by library:rtos #define MBED_CONF_RTOS_EVFLAGS_NUM 0 // set by library:rtos #define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE 512 // set by library:rtos #define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_DEBUG_EXTRA 0 // set by library:rtos #define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_TICKLESS_EXTRA 256 // set by library:rtos -#define MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE 32768 // set by application[*] +#define MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE 4096 // set by application[*] #define MBED_CONF_RTOS_MSGQUEUE_DATA_SIZE 0 // set by library:rtos #define MBED_CONF_RTOS_MSGQUEUE_NUM 0 // set by library:rtos #define MBED_CONF_RTOS_MUTEX_NUM 0 // set by library:rtos @@ -325,6 +346,8 @@ #define MBED_CONF_RTOS_TIMER_NUM 0 // set by library:rtos #define MBED_CONF_RTOS_TIMER_THREAD_STACK_SIZE 768 // set by library:rtos #define MBED_CONF_S2LP_PROVIDE_DEFAULT 0 // set by library:s2lp +#define MBED_CONF_SARA4_PPP_BAUDRATE 115200 // set by library:SARA4_PPP +#define MBED_CONF_SARA4_PPP_PROVIDE_DEFAULT 0 // set by library:SARA4_PPP #define MBED_CONF_SD_CMD0_IDLE_STATE_RETRIES 5 // set by library:sd #define MBED_CONF_SD_CMD_TIMEOUT 10000 // set by library:sd #define MBED_CONF_SD_CRC_ENABLED 0 // set by library:sd @@ -380,6 +403,18 @@ #define MBED_CONF_TARGET_UART_0_FIFO_SIZE 32 // set by target:MCU_NRF52840 #define MBED_CONF_TARGET_UART_1_FIFO_SIZE 32 // set by target:MCU_NRF52840 #define MBED_CONF_TARGET_XIP_ENABLE 0 // set by target:Target +#define MBED_CONF_TELIT_HE910_BAUDRATE 115200 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_HE910_PROVIDE_DEFAULT 0 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_ME310_BAUDRATE 115200 // set by library:TELIT_ME310 +#define MBED_CONF_TELIT_ME310_PROVIDE_DEFAULT 0 // set by library:TELIT_ME310 +#define MBED_CONF_TELIT_ME910_BAUDRATE 115200 // set by library:TELIT_ME910 +#define MBED_CONF_TELIT_ME910_PROVIDE_DEFAULT 0 // set by library:TELIT_ME910 +#define MBED_CONF_UBLOX_AT_BAUDRATE 115200 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_AT_PROVIDE_DEFAULT 0 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_N2XX_BAUDRATE 9600 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_N2XX_PROVIDE_DEFAULT 0 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_PPP_BAUDRATE 115200 // set by library:UBLOX_PPP +#define MBED_CONF_UBLOX_PPP_PROVIDE_DEFAULT 0 // set by library:UBLOX_PPP #define MBED_CRC_TABLE_SIZE 16 // set by library:drivers #define MBED_LFS2_BLOCK_CYCLES 1024 // set by library:littlefs2 #define MBED_LFS2_BLOCK_SIZE 512 // set by library:littlefs2 @@ -412,6 +447,7 @@ #define LHCI_ENABLE_VS 0 // defined by library:cordio-nordic-ll #define LL_MAX_PER_SCAN 3 // defined by library:cordio-nordic-ll #define MBEDTLS_CIPHER_MODE_CTR // defined by library:SecureStore +#define MBEDTLS_SHA1_C 1 // defined by application #define MBED_HEAP_STATS_ENABLED 1 // defined by application #define MBED_MEM_TRACING_ENABLED 1 // defined by application #define MBED_STACK_STATS_ENABLED 1 // defined by application diff --git a/variants/PORTENTA_H7_M4/cflags.txt b/variants/GENERIC_STM32H747_M4/cflags.txt similarity index 78% rename from variants/PORTENTA_H7_M4/cflags.txt rename to variants/GENERIC_STM32H747_M4/cflags.txt index 5ea7d6111..846011196 100644 --- a/variants/PORTENTA_H7_M4/cflags.txt +++ b/variants/GENERIC_STM32H747_M4/cflags.txt @@ -1,11 +1,7 @@ -c -std=gnu11 -DAPPLICATION_ADDR=0x8100000 --DAPPLICATION_RAM_ADDR=0x10000000 --DAPPLICATION_RAM_SIZE=0x48000 -DAPPLICATION_SIZE=0x100000 --DMBED_RAM1_SIZE=0x80000 --DMBED_RAM1_START=0x24000000 -DMBED_RAM_SIZE=0x48000 -DMBED_RAM_START=0x10000000 -DMBED_ROM_SIZE=0x100000 diff --git a/variants/GENERIC_STM32H747_M4/clock_override.cpp b/variants/GENERIC_STM32H747_M4/clock_override.cpp new file mode 100644 index 000000000..dc41f3334 --- /dev/null +++ b/variants/GENERIC_STM32H747_M4/clock_override.cpp @@ -0,0 +1,93 @@ +#include "Arduino.h" + +#if defined(ARDUINO_GIGA) +#undef HSE_VALUE +#define HSE_VALUE 16000000 +#endif + +extern "C" uint32_t HAL_RCC_GetSysClockFreq(void) +{ + uint32_t pllp, pllsource, pllm, pllfracen, hsivalue; + float_t fracn1, pllvco; + uint32_t sysclockfreq; + + /* Get SYSCLK source -------------------------------------------------------*/ + + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U) + { + sysclockfreq = (uint32_t) (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER()>> 3)); + } + else + { + sysclockfreq = (uint32_t) HSI_VALUE; + } + + break; + + case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */ + sysclockfreq = CSI_VALUE; + break; + + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + sysclockfreq = HSE_VALUE; + break; + + case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC); + pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ; + pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN)>>RCC_PLLCFGR_PLL1FRACEN_Pos); + fracn1 = (float_t)(uint32_t)(pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3)); + + if (pllm != 0U) + { + switch (pllsource) + { + case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */ + + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U) + { + hsivalue= (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER()>> 3)); + pllvco = ( (float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + } + else + { + pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + } + break; + + case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */ + pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */ + pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + default: + pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + } + pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1U ) ; + sysclockfreq = (uint32_t)(float_t)(pllvco/(float_t)pllp); + } + else + { + sysclockfreq = 0U; + } + break; + + default: + sysclockfreq = CSI_VALUE; + break; + } + + return sysclockfreq; +} \ No newline at end of file diff --git a/variants/PORTENTA_H7_M4/conf/.mbedignore b/variants/GENERIC_STM32H747_M4/conf/.mbedignore similarity index 100% rename from variants/PORTENTA_H7_M4/conf/.mbedignore rename to variants/GENERIC_STM32H747_M4/conf/.mbedignore diff --git a/variants/PORTENTA_H7_M4/conf/mbed_app.json b/variants/GENERIC_STM32H747_M4/conf/mbed_app.json similarity index 92% rename from variants/PORTENTA_H7_M4/conf/mbed_app.json rename to variants/GENERIC_STM32H747_M4/conf/mbed_app.json index 16b28e07a..f93a5464a 100644 --- a/variants/PORTENTA_H7_M4/conf/mbed_app.json +++ b/variants/GENERIC_STM32H747_M4/conf/mbed_app.json @@ -19,11 +19,11 @@ "BT_UART_NO_3M_SUPPORT", "NO_VTOR_RELOCATE", "METAL_INTERNAL", - "VIRTIO_SLAVE_ONLY", + "VIRTIO_DEVICE_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048" + "RPMSG_BUFFER_SIZE=512" ] } } -} \ No newline at end of file +} diff --git a/variants/PORTENTA_H7_M4/cxxflags.txt b/variants/GENERIC_STM32H747_M4/cxxflags.txt similarity index 78% rename from variants/PORTENTA_H7_M4/cxxflags.txt rename to variants/GENERIC_STM32H747_M4/cxxflags.txt index 0787fe177..fd71297d0 100644 --- a/variants/PORTENTA_H7_M4/cxxflags.txt +++ b/variants/GENERIC_STM32H747_M4/cxxflags.txt @@ -3,11 +3,7 @@ -fno-rtti -std=gnu++14 -DAPPLICATION_ADDR=0x8100000 --DAPPLICATION_RAM_ADDR=0x10000000 --DAPPLICATION_RAM_SIZE=0x48000 -DAPPLICATION_SIZE=0x100000 --DMBED_RAM1_SIZE=0x80000 --DMBED_RAM1_START=0x24000000 -DMBED_RAM_SIZE=0x48000 -DMBED_RAM_START=0x10000000 -DMBED_ROM_SIZE=0x100000 diff --git a/variants/PORTENTA_H7_M4/defines.txt b/variants/GENERIC_STM32H747_M4/defines.txt similarity index 89% rename from variants/PORTENTA_H7_M4/defines.txt rename to variants/GENERIC_STM32H747_M4/defines.txt index 90277e8fe..b44c062da 100644 --- a/variants/PORTENTA_H7_M4/defines.txt +++ b/variants/GENERIC_STM32H747_M4/defines.txt @@ -42,7 +42,7 @@ -DFEATURE_BLE=1 -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447099.1347957 +-DMBED_BUILD_TIMESTAMP=1738678579.8515525 -D__MBED_CMSIS_RTOS_CM -DMBED_MPU_CUSTOM -DMBED_TICKLESS @@ -52,21 +52,20 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DNO_VTOR_RELOCATE --DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX -DTARGET_CORTEX_M +-DTARGET_GENERIC_STM32H747_M4 -DTARGET_LIKE_CORTEX_M4 -DTARGET_LIKE_MBED -DTARGET_M4 -DTARGET_MCU_STM32 -DTARGET_MCU_STM32H7 -DTARGET_MCU_STM32H747xI --DTARGET_NAME=PORTENTA_H7_M4 --DTARGET_PORTENTA_H7 --DTARGET_PORTENTA_H7_M4 +-DTARGET_MCU_STM32H747xI_CM4 +-DTARGET_NAME=GENERIC_STM32H747_M4 -DTARGET_RELEASE -DTARGET_RTOS_M4_M7 -DTARGET_STM @@ -78,7 +77,7 @@ -DTRANSACTION_QUEUE_SIZE_SPI=2 -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER --DVIRTIO_SLAVE_ONLY +-DVIRTIO_DEVICE_ONLY -DMBED_NO_GLOBAL_USING_DIRECTIVE=1 -DCORE_MAJOR= -DCORE_MINOR= diff --git a/variants/PORTENTA_H7_M4/includes.txt b/variants/GENERIC_STM32H747_M4/includes.txt similarity index 97% rename from variants/PORTENTA_H7_M4/includes.txt rename to variants/GENERIC_STM32H747_M4/includes.txt index 14ff31f31..f8f811f04 100644 --- a/variants/PORTENTA_H7_M4/includes.txt +++ b/variants/GENERIC_STM32H747_M4/includes.txt @@ -276,11 +276,11 @@ -iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/CMSIS -iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver -iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/Legacy --iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7 --iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD --iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/interface --iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/port --iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/resources --iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS --iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/resources/nvram +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4 +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/interface +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/port +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_GENERIC_STM32H747_M4/COMPONENT_WHD/resources/nvram -iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM4 diff --git a/variants/PORTENTA_H7_M4/ldflags.txt b/variants/GENERIC_STM32H747_M4/ldflags.txt similarity index 89% rename from variants/PORTENTA_H7_M4/ldflags.txt rename to variants/GENERIC_STM32H747_M4/ldflags.txt index e3666931b..914e1deff 100644 --- a/variants/PORTENTA_H7_M4/ldflags.txt +++ b/variants/GENERIC_STM32H747_M4/ldflags.txt @@ -1,8 +1,6 @@ -DMBED_APP_SIZE=0x100000 -DMBED_APP_START=0x8100000 -DMBED_BOOT_STACK_SIZE=1024 --DMBED_RAM1_SIZE=0x80000 --DMBED_RAM1_START=0x24000000 -DMBED_RAM_SIZE=0x48000 -DMBED_RAM_START=0x10000000 -DMBED_ROM_SIZE=0x100000 diff --git a/variants/PORTENTA_H7_M4/libs/libmbed.a b/variants/GENERIC_STM32H747_M4/libs/libmbed.a similarity index 52% rename from variants/PORTENTA_H7_M4/libs/libmbed.a rename to variants/GENERIC_STM32H747_M4/libs/libmbed.a index 297d3dfdd..72951f8a2 100644 Binary files a/variants/PORTENTA_H7_M4/libs/libmbed.a and b/variants/GENERIC_STM32H747_M4/libs/libmbed.a differ diff --git a/variants/PORTENTA_H7_M4/linker_script.ld b/variants/GENERIC_STM32H747_M4/linker_script.ld similarity index 87% rename from variants/PORTENTA_H7_M4/linker_script.ld rename to variants/GENERIC_STM32H747_M4/linker_script.ld index 4b66e7e26..207a6f162 100644 --- a/variants/PORTENTA_H7_M4/linker_script.ld +++ b/variants/GENERIC_STM32H747_M4/linker_script.ld @@ -1,9 +1,15 @@ MEMORY { FLASH (rx) : ORIGIN = CM4_BINARY_START, LENGTH = 0x100000 - RAM (rwx) : ORIGIN = 0x10000000 + (((166 * 4) + 7) & 0xFFFFFFF8), LENGTH = 0x48000 - (((166 * 4) + 7) & 0xFFFFFFF8) + RAM_D2 (rwx) : ORIGIN = 0x10000000 + (((166 * 4) + 7) & 0xFFFFFFF8), LENGTH = 0x48000 - (((166 * 4) + 7) & 0xFFFFFFF8) RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K } +#if (CM4_BINARY_START == 0x60000000) + REGION_ALIAS("RAM", FLASH); + #else + REGION_ALIAS("RAM", RAM_D2); + #endif + __OPENAMP_region_start__ = 0x38000400; __OPENAMP_region_end__ = 0x38000400 + LENGTH(RAM_D3) - 1K; ENTRY(Reset_Handler) @@ -85,16 +91,11 @@ SECTIONS __bss_end__ = .; _ebss = .; } > RAM - .openamp_section (NOLOAD) : { - . = ABSOLUTE(0x38000000); - *(.resource_table) - } >RAM_D3 AT > FLASH - .pdm_section (NOLOAD) : { - . = ABSOLUTE(0x3800FC00); + .pdm_section 0x3800FC00 (NOLOAD): { *(.pdm_buffer) } > RAM_D3 - .heap (COPY): + .heap (NOLOAD): { __end__ = .; PROVIDE(end = .); @@ -102,7 +103,7 @@ SECTIONS . = ORIGIN(RAM) + LENGTH(RAM) - 0x400; __HeapLimit = .; } > RAM - .stack_dummy (COPY): + .stack_dummy (NOLOAD): { *(.stack*) } > RAM diff --git a/variants/PORTENTA_H7_M4/mbed_config.h b/variants/GENERIC_STM32H747_M4/mbed_config.h similarity index 98% rename from variants/PORTENTA_H7_M4/mbed_config.h rename to variants/GENERIC_STM32H747_M4/mbed_config.h index 20f47ae62..7b2806692 100644 --- a/variants/PORTENTA_H7_M4/mbed_config.h +++ b/variants/GENERIC_STM32H747_M4/mbed_config.h @@ -47,16 +47,15 @@ #define BLE_SECURITY_DATABASE_FILESYSTEM 1 // set by library:ble #define BLE_SECURITY_DATABASE_KVSTORE 0 // set by library:ble #define BLE_SECURITY_DATABASE_MAX_ENTRIES 5 // set by library:ble -#define CLOCK_SOURCE USE_PLL_HSE_EXTC // set by target:PORTENTA_H7 +#define CLOCK_SOURCE USE_PLL_HSI // set by target:GENERIC_STM32H747_M4 #define DM_CONN_MAX 5 // set by application[*] #define DM_NUM_ADV_SETS 3 // set by library:cordio #define DM_NUM_PHYS 3 // set by library:cordio #define DM_SYNC_MAX 1 // set by library:cordio #define EATT_CONN_CHAN_MAX 1 // set by library:cordio -#define HSE_VALUE 25000000 // set by target:PORTENTA_H7 #define L2C_COC_CHAN_MAX 1 // set by library:cordio #define L2C_COC_REG_MAX 1 // set by library:cordio -#define LPTICKER_DELAY_TICKS 0 // set by target:PORTENTA_H7 +#define LPTICKER_DELAY_TICKS 0 // set by target:GENERIC_STM32H747_M4 #define MBED_ALL_STATS_ENABLED 1 // set by application[*] #define MBED_CONF_ALT1250_PPP_BAUDRATE 115200 // set by library:ALT1250_PPP #define MBED_CONF_ALT1250_PPP_PROVIDE_DEFAULT 0 // set by library:ALT1250_PPP @@ -214,7 +213,7 @@ #define MBED_CONF_LWIP_MBOX_SIZE 8 // set by library:lwip #define MBED_CONF_LWIP_MEMP_NUM_TCPIP_MSG_INPKT 8 // set by library:lwip #define MBED_CONF_LWIP_MEMP_NUM_TCP_SEG 16 // set by library:lwip -#define MBED_CONF_LWIP_MEM_SIZE 16000 // set by library:lwip[PORTENTA_H7] +#define MBED_CONF_LWIP_MEM_SIZE 2310 // set by library:lwip[STM] #define MBED_CONF_LWIP_ND6_QUEUEING 0 // set by library:lwip #define MBED_CONF_LWIP_ND6_RDNSS_MAX_DNS_SERVERS 0 // set by library:lwip #define MBED_CONF_LWIP_NETBUF_RECVINFO_ENABLED 0 // set by library:lwip @@ -375,19 +374,17 @@ #define MBED_CONF_TARGET_DEEP_SLEEP_LATENCY 4 // set by target:MCU_STM32 #define MBED_CONF_TARGET_DEFAULT_ADC_VREF NAN // set by target:Target #define MBED_CONF_TARGET_GPIO_RESET_AT_INIT 0 // set by target:MCU_STM32 -#define MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO 1 // set by target:PORTENTA_H7 +#define MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO 1 // set by target:GENERIC_STM32H747_M4 #define MBED_CONF_TARGET_INIT_US_TICKER_AT_BOOT 1 // set by target:MCU_STM32 #define MBED_CONF_TARGET_INTERNAL_FLASH_UNIFORM_SECTORS 1 // set by target:Target #define MBED_CONF_TARGET_LPTICKER_LPTIM 1 // set by target:MCU_STM32H7 #define MBED_CONF_TARGET_LPTICKER_LPTIM_CLOCK 1 // set by target:MCU_STM32 #define MBED_CONF_TARGET_LPUART_CLOCK_SOURCE USE_LPUART_CLK_LSE|USE_LPUART_CLK_PCLK1|USE_LPUART_CLK_PCLK3 // set by target:MCU_STM32 #define MBED_CONF_TARGET_LSE_AVAILABLE 0 // set by application[*] -#define MBED_CONF_TARGET_LSE_BYPASS 1 // set by target:PORTENTA_H7 #define MBED_CONF_TARGET_LSE_DRIVE_LOAD_LEVEL RCC_LSEDRIVE_LOW // set by target:MCU_STM32H7 #define MBED_CONF_TARGET_MPU_ROM_END 0x0fffffff // set by target:Target -#define MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE ETHERNET // set by target:PORTENTA_H7 #define MBED_CONF_TARGET_RTC_CLOCK_SOURCE USE_RTC_CLK_LSE_OR_LSI // set by target:MCU_STM32 -#define MBED_CONF_TARGET_SYSTEM_POWER_SUPPLY PWR_SMPS_1V8_SUPPLIES_LDO // set by target:PORTENTA_H7 +#define MBED_CONF_TARGET_SYSTEM_POWER_SUPPLY PWR_LDO_SUPPLY // set by target:GENERIC_STM32H747_M4 #define MBED_CONF_TARGET_TICKLESS_FROM_US_TICKER 0 // set by target:Target #define MBED_CONF_TARGET_USB_SPEED USE_USB_OTG_FS // set by application[*] #define MBED_CONF_TARGET_XIP_ENABLE 0 // set by target:Target diff --git a/variants/PORTENTA_H7_M4/pinmode_arduino.h b/variants/GENERIC_STM32H747_M4/pinmode_arduino.h similarity index 100% rename from variants/PORTENTA_H7_M4/pinmode_arduino.h rename to variants/GENERIC_STM32H747_M4/pinmode_arduino.h diff --git a/variants/PORTENTA_H7_M4/pins_arduino.h b/variants/GENERIC_STM32H747_M4/pins_arduino.h similarity index 100% rename from variants/PORTENTA_H7_M4/pins_arduino.h rename to variants/GENERIC_STM32H747_M4/pins_arduino.h diff --git a/variants/PORTENTA_H7_M4/variant.cpp b/variants/GENERIC_STM32H747_M4/variant.cpp similarity index 100% rename from variants/PORTENTA_H7_M4/variant.cpp rename to variants/GENERIC_STM32H747_M4/variant.cpp diff --git a/variants/GIGA/conf/mbed_app.json b/variants/GIGA/conf/mbed_app.json index 603807837..361a0ab94 100644 --- a/variants/GIGA/conf/mbed_app.json +++ b/variants/GIGA/conf/mbed_app.json @@ -11,12 +11,15 @@ "rtos.main-thread-stack-size": 32768, "cordio.max-connections": 5, "target.mbed_app_start": "0x8040000", + "nsapi.dns-response-wait-time": 5000, + "nsapi.dns-total-attempts": 3, + "lwip.raw-socket-enabled": true, "target.macros_add": [ "METAL_INTERNAL", - "VIRTIO_MASTER_ONLY", + "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=100" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/GIGA/defines.txt b/variants/GIGA/defines.txt index 53a08c42f..20ad512ab 100644 --- a/variants/GIGA/defines.txt +++ b/variants/GIGA/defines.txt @@ -44,7 +44,7 @@ -DFEATURE_BLE=1 -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447383.8050008 +-DMBED_BUILD_TIMESTAMP=1738678847.5982425 -D__MBED_CMSIS_RTOS_CM -DMBED_TICKLESS -DMBEDTLS_FS_IO @@ -53,7 +53,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=100 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX @@ -78,7 +78,7 @@ -DTRANSACTION_QUEUE_SIZE_SPI=2 -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER --DVIRTIO_MASTER_ONLY +-DVIRTIO_DRIVER_ONLY -DMBED_NO_GLOBAL_USING_DIRECTIVE=1 -DCORE_MAJOR= -DCORE_MINOR= diff --git a/variants/GIGA/libs/libmbed.a b/variants/GIGA/libs/libmbed.a index 7b1e6bb8f..589bc11d9 100644 Binary files a/variants/GIGA/libs/libmbed.a and b/variants/GIGA/libs/libmbed.a differ diff --git a/variants/GIGA/linker_script.ld b/variants/GIGA/linker_script.ld index 8941b72a6..a0fdb9fcd 100644 --- a/variants/GIGA/linker_script.ld +++ b/variants/GIGA/linker_script.ld @@ -94,12 +94,7 @@ SECTIONS __bss_end__ = .; _ebss = .; } > RAM - .openamp_section (NOLOAD) : { - . = ABSOLUTE(0x38000000); - *(.resource_table) - } >RAM_D3 AT > FLASH - .pdm_section (NOLOAD) : { - . = ABSOLUTE(0x3800FC00); + .pdm_section 0x3800FC00 (NOLOAD): { *(.pdm_buffer) } > RAM_D3 _dtcm_lma = __etext + SIZEOF(.data); diff --git a/variants/GIGA/mbed_config.h b/variants/GIGA/mbed_config.h index 460ac941c..3133aa110 100644 --- a/variants/GIGA/mbed_config.h +++ b/variants/GIGA/mbed_config.h @@ -226,7 +226,7 @@ #define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip #define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip #define MBED_CONF_LWIP_PRESENT 1 // set by library:lwip -#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 1 // set by application[*] #define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip @@ -250,9 +250,9 @@ #define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi #define MBED_CONF_NSAPI_DNS_ADDRESSES_LIMIT 10 // set by library:nsapi #define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 5000 // set by application[*] #define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 3 // set by application[*] #define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi diff --git a/variants/GIGA/pins_arduino.h b/variants/GIGA/pins_arduino.h index 231eb2c14..0a841debf 100644 --- a/variants/GIGA/pins_arduino.h +++ b/variants/GIGA/pins_arduino.h @@ -20,7 +20,7 @@ extern PinName digitalPinToPinName(pin_size_t P); // ---- #define PINS_COUNT (PINCOUNT_fn()) #define NUM_DIGITAL_PINS (103u) -#define NUM_ANALOG_INPUTS (14u) +#define NUM_ANALOG_INPUTS (10u) // these are analog pins that can also be used as digital #define NUM_ANALOG_OUTPUTS (2u) // LEDs @@ -266,7 +266,7 @@ void _ontouch1200bps_(); #define CAN_HOWMANY 2 #define PIN_CAN0_TX (PB_13) -#define PIN_CAN0_RX (PB_12) +#define PIN_CAN0_RX (PB_5) #define PIN_CAN1_TX (PH_13) #define PIN_CAN1_RX (PB_8) diff --git a/variants/GIGA/pure_analog_pins.cpp b/variants/GIGA/pure_analog_pins.cpp index 5d17ddd75..40fc38db9 100644 --- a/variants/GIGA/pure_analog_pins.cpp +++ b/variants/GIGA/pure_analog_pins.cpp @@ -2,19 +2,20 @@ #include "AnalogIn.h" #include "pinDefinitions.h" -PureAnalogPin A8(8); -PureAnalogPin A9(9); -PureAnalogPin A10(10); -PureAnalogPin A11(11); +PureAnalogPin A8(0); +PureAnalogPin A9(1); +PureAnalogPin A10(2); +PureAnalogPin A11(3); + int getAnalogReadResolution(); int analogRead(PureAnalogPin pin) { - mbed::AnalogIn* adc = g_AAnalogPinDescription[pin.get()].adc; - auto name = g_AAnalogPinDescription[pin.get()].name; + mbed::AnalogIn* adc = g_pureAAnalogPinDescription[pin.get()].adc; + auto name = g_pureAAnalogPinDescription[pin.get()].name; if (adc == NULL) { adc = new mbed::AnalogIn(name); - g_AAnalogPinDescription[pin.get()].adc = adc; + g_pureAAnalogPinDescription[pin.get()].adc = adc; } return (adc->read_u16() >> (16 - getAnalogReadResolution())); } diff --git a/variants/GIGA/variant.cpp b/variants/GIGA/variant.cpp index f2c9836d5..ae8cae2d9 100644 --- a/variants/GIGA/variant.cpp +++ b/variants/GIGA/variant.cpp @@ -12,12 +12,15 @@ AnalogPinDescription g_AAnalogPinDescription[] = { { PC_2, NULL }, // A5 ADC1_INP12 { PC_0, NULL }, // A6 ADC1_INP10 { PA_0, NULL }, // A7 ADC1_INP16 + { PA_4, NULL }, // A12 DAC1_OUT1 + { PA_5, NULL }, // A13 DAC1_OUT2 +}; + +AnalogPinDescription g_pureAAnalogPinDescription[] = { { PC_2C, NULL }, // A8 ADC3_INP0 { PC_3C, NULL }, // A9 ADC3_INP1 { PA_1C, NULL }, // A10 ADC2_INP1 { PA_0C, NULL }, // A11 ADC2_INP0 - { PA_4, NULL }, // A12 DAC1_OUT1 - { PA_5, NULL }, // A13 DAC1_OUT2 }; AnalogPinDescription g_AAnalogOutPinDescription[] = { @@ -162,16 +165,6 @@ extern "C" { } } -#include "drivers/I2C.h" - -void fixup3V1Rail() { - mbed::I2C i2c(PB_7, PB_6); - char data[2]; - data[0]=0x42; - data[1]=(1); - i2c.write(8 << 1, data, sizeof(data)); -} - void initVariant() { RTCHandle.Instance = RTC; // Turn off LED from bootloader diff --git a/variants/NANO_RP2040_CONNECT/conf/mbed_app.json b/variants/NANO_RP2040_CONNECT/conf/mbed_app.json index 839285b81..8cd4676b8 100644 --- a/variants/NANO_RP2040_CONNECT/conf/mbed_app.json +++ b/variants/NANO_RP2040_CONNECT/conf/mbed_app.json @@ -2,7 +2,7 @@ "target_overrides": { "*": { "target.printf_lib": "std", - "target.macros_add": [ "MBEDTLS_ENTROPY_NV_SEED" ], + "target.macros_add": [ "MBEDTLS_ENTROPY_NV_SEED", "UNINITIALIZED_DATA_SECTION=1" ], "platform.stdio-buffered-serial": false, "platform.stdio-baud-rate": 115200, "platform.default-serial-baud-rate": 115200, diff --git a/variants/NANO_RP2040_CONNECT/defines.txt b/variants/NANO_RP2040_CONNECT/defines.txt index 85f8bdb41..e4f955eb0 100644 --- a/variants/NANO_RP2040_CONNECT/defines.txt +++ b/variants/NANO_RP2040_CONNECT/defines.txt @@ -16,11 +16,12 @@ -DDEVICE_SERIAL=1 -DDEVICE_SERIAL_FC=1 -DDEVICE_SPI=1 +-DDEVICE_TRNG=1 -DDEVICE_USBDEVICE=1 -DDEVICE_USTICKER=1 -DDEVICE_WATCHDOG=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690446969.4415529 +-DMBED_BUILD_TIMESTAMP=1738678431.5907538 -D__MBED_CMSIS_RTOS_CM -DMBED_MPU_CUSTOM -DMBEDTLS_ENTROPY_NV_SEED @@ -43,6 +44,7 @@ -DTARGET_RP2040 -DTOOLCHAIN_GCC -DTOOLCHAIN_GCC_ARM +-DUNINITIALIZED_DATA_SECTION=1 -DMBED_NO_GLOBAL_USING_DIRECTIVE=1 -DCORE_MAJOR= -DCORE_MINOR= diff --git a/variants/NANO_RP2040_CONNECT/includes.txt b/variants/NANO_RP2040_CONNECT/includes.txt index d84e91a12..dbd89c569 100644 --- a/variants/NANO_RP2040_CONNECT/includes.txt +++ b/variants/NANO_RP2040_CONNECT/includes.txt @@ -325,6 +325,9 @@ -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico +-iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand +-iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include +-iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_runtime -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_runtime/include -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_runtime/include/pico diff --git a/variants/NANO_RP2040_CONNECT/libs/libmbed.a b/variants/NANO_RP2040_CONNECT/libs/libmbed.a index 276e5d120..475e6e096 100644 Binary files a/variants/NANO_RP2040_CONNECT/libs/libmbed.a and b/variants/NANO_RP2040_CONNECT/libs/libmbed.a differ diff --git a/variants/NANO_RP2040_CONNECT/linker_script.ld b/variants/NANO_RP2040_CONNECT/linker_script.ld index 02fc23730..a96cf5167 100644 --- a/variants/NANO_RP2040_CONNECT/linker_script.ld +++ b/variants/NANO_RP2040_CONNECT/linker_script.ld @@ -8,12 +8,12 @@ MEMORY ENTRY(_entry_point) SECTIONS { - .second_stage_ota : { - KEEP (*(.second_stage_ota)) - } > FLASH .flash_begin : { __flash_binary_start = .; } > FLASH + .second_stage_ota : { + KEEP (*(.second_stage_ota)) + } > FLASH .boot2 : { __boot2_start__ = .; KEEP (*(.boot2)) @@ -104,7 +104,9 @@ SECTIONS } > RAM AT> FLASH .uninitialized_data (COPY): { . = ALIGN(4); + __uninitialized_data_start__ = .; *(.uninitialized_data*) + __uninitialized_data_end__ = .; } > RAM .scratch_x : { __scratch_x_start__ = .; diff --git a/variants/NICLA/defines.txt b/variants/NICLA/defines.txt index 954f8bbbe..2c2321141 100644 --- a/variants/NICLA/defines.txt +++ b/variants/NICLA/defines.txt @@ -33,7 +33,7 @@ -DFEATURE_BLE=1 -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447190.2057042 +-DMBED_BUILD_TIMESTAMP=1738678686.654947 -D__MBED_CMSIS_RTOS_CM -DMBED_MPU_CUSTOM -DMBED_TICKLESS diff --git a/variants/NICLA/libs/libmbed.a b/variants/NICLA/libs/libmbed.a index 3033bd740..3cd144aff 100644 Binary files a/variants/NICLA/libs/libmbed.a and b/variants/NICLA/libs/libmbed.a differ diff --git a/variants/NICLA_VISION/conf/custom_mbedtls_config.h b/variants/NICLA_VISION/conf/custom_mbedtls_config.h index cfea49137..c2a399cc2 100644 --- a/variants/NICLA_VISION/conf/custom_mbedtls_config.h +++ b/variants/NICLA_VISION/conf/custom_mbedtls_config.h @@ -186,7 +186,7 @@ void * tstDoTraceAndCalloc( * mbedtls_platform_gmtime_r() at compile-time by using the macro * MBEDTLS_PLATFORM_GMTIME_R_ALT. */ -#define MBEDTLS_HAVE_TIME_DATE +//#define MBEDTLS_HAVE_TIME_DATE /** * \def MBEDTLS_PLATFORM_MEMORY @@ -1163,7 +1163,7 @@ void * tstDoTraceAndCalloc( * * Enable functions that use the filesystem. */ -#define MBEDTLS_FS_IO +//#define MBEDTLS_FS_IO /** * \def MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES @@ -2770,7 +2770,7 @@ void * tstDoTraceAndCalloc( * on it, and considering stronger message digests instead. * */ -#define MBEDTLS_SHA1_C +//#define MBEDTLS_SHA1_C /** * \def MBEDTLS_SHA256_C diff --git a/variants/NICLA_VISION/conf/mbed_app.json b/variants/NICLA_VISION/conf/mbed_app.json index 405307426..f3227a71f 100644 --- a/variants/NICLA_VISION/conf/mbed_app.json +++ b/variants/NICLA_VISION/conf/mbed_app.json @@ -12,12 +12,15 @@ "rtos.main-thread-stack-size": 32768, "cordio.max-connections": 5, "target.mbed_app_start": "0x8040000", + "nsapi.dns-response-wait-time": 5000, + "nsapi.dns-total-attempts": 3, + "lwip.raw-socket-enabled": true, "target.macros_add": [ "METAL_INTERNAL", - "VIRTIO_MASTER_ONLY", + "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=100" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/NICLA_VISION/defines.txt b/variants/NICLA_VISION/defines.txt index 8e73def76..6e2d9a947 100644 --- a/variants/NICLA_VISION/defines.txt +++ b/variants/NICLA_VISION/defines.txt @@ -45,7 +45,7 @@ -DFLOW_SILENT -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447224.0712476 +-DMBED_BUILD_TIMESTAMP=1738678724.8386328 -D__MBED_CMSIS_RTOS_CM -DMBED_TICKLESS -DMBEDTLS_FS_IO @@ -54,7 +54,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=100 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DT1oI2C -DT1oI2C_UM11225 @@ -81,7 +81,7 @@ -DTRANSACTION_QUEUE_SIZE_SPI=2 -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER --DVIRTIO_MASTER_ONLY +-DVIRTIO_DRIVER_ONLY -DMBED_NO_GLOBAL_USING_DIRECTIVE=1 -DCORE_MAJOR= -DCORE_MINOR= diff --git a/variants/NICLA_VISION/libs/libmbed.a b/variants/NICLA_VISION/libs/libmbed.a index 66947671c..c6991a257 100644 Binary files a/variants/NICLA_VISION/libs/libmbed.a and b/variants/NICLA_VISION/libs/libmbed.a differ diff --git a/variants/NICLA_VISION/linker_script.ld b/variants/NICLA_VISION/linker_script.ld index 0b00d41d9..c681810c5 100644 --- a/variants/NICLA_VISION/linker_script.ld +++ b/variants/NICLA_VISION/linker_script.ld @@ -94,12 +94,7 @@ SECTIONS __bss_end__ = .; _ebss = .; } > RAM - .openamp_section (NOLOAD) : { - . = ABSOLUTE(0x38000000); - *(.resource_table) - } >RAM_D3 AT > FLASH - .pdm_section (NOLOAD) : { - . = ABSOLUTE(0x3800FC00); + .pdm_section 0x3800FC00 (NOLOAD): { *(.pdm_buffer) } > RAM_D3 diff --git a/variants/NICLA_VISION/mbed_config.h b/variants/NICLA_VISION/mbed_config.h index ed8376f00..d4ec859a3 100644 --- a/variants/NICLA_VISION/mbed_config.h +++ b/variants/NICLA_VISION/mbed_config.h @@ -226,7 +226,7 @@ #define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip #define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip #define MBED_CONF_LWIP_PRESENT 1 // set by library:lwip -#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 1 // set by application[*] #define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip @@ -250,9 +250,9 @@ #define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi #define MBED_CONF_NSAPI_DNS_ADDRESSES_LIMIT 10 // set by library:nsapi #define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 5000 // set by application[*] #define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 3 // set by application[*] #define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi diff --git a/variants/NICLA_VISION/pins_arduino.h b/variants/NICLA_VISION/pins_arduino.h index 8046d39a1..b6aac6221 100644 --- a/variants/NICLA_VISION/pins_arduino.h +++ b/variants/NICLA_VISION/pins_arduino.h @@ -60,12 +60,12 @@ static const uint8_t A2 = PIN_A2; #define D13 (13u) #define D14 (14u) #define D15 (15u) -#define D16 (u16) -#define D17 (u17) -#define D18 (u18) -#define D19 (u19) -#define D20 (u20) -#define D21 (u21) +#define D16 (16u) +#define D17 (17u) +#define D18 (18u) +#define D19 (19u) +#define D20 (20u) +#define D21 (21u) // Serial #define PIN_SERIAL_RX (2ul) diff --git a/variants/OPTA/conf/mbed_app.json b/variants/OPTA/conf/mbed_app.json index 603807837..361a0ab94 100644 --- a/variants/OPTA/conf/mbed_app.json +++ b/variants/OPTA/conf/mbed_app.json @@ -11,12 +11,15 @@ "rtos.main-thread-stack-size": 32768, "cordio.max-connections": 5, "target.mbed_app_start": "0x8040000", + "nsapi.dns-response-wait-time": 5000, + "nsapi.dns-total-attempts": 3, + "lwip.raw-socket-enabled": true, "target.macros_add": [ "METAL_INTERNAL", - "VIRTIO_MASTER_ONLY", + "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=100" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/OPTA/defines.txt b/variants/OPTA/defines.txt index 970b3bc5d..76b04861f 100644 --- a/variants/OPTA/defines.txt +++ b/variants/OPTA/defines.txt @@ -44,7 +44,7 @@ -DFEATURE_BLE=1 -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447327.7181125 +-DMBED_BUILD_TIMESTAMP=1738678787.2016976 -D__MBED_CMSIS_RTOS_CM -DMBED_TICKLESS -DMBEDTLS_FS_IO @@ -53,7 +53,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=100 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX @@ -78,7 +78,7 @@ -DTRANSACTION_QUEUE_SIZE_SPI=2 -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER --DVIRTIO_MASTER_ONLY +-DVIRTIO_DRIVER_ONLY -DMBED_NO_GLOBAL_USING_DIRECTIVE=1 -DCORE_MAJOR= -DCORE_MINOR= diff --git a/variants/OPTA/libs/libmbed.a b/variants/OPTA/libs/libmbed.a index aec91ccba..0dd368bf8 100644 Binary files a/variants/OPTA/libs/libmbed.a and b/variants/OPTA/libs/libmbed.a differ diff --git a/variants/OPTA/linker_script.ld b/variants/OPTA/linker_script.ld index 8941b72a6..a0fdb9fcd 100644 --- a/variants/OPTA/linker_script.ld +++ b/variants/OPTA/linker_script.ld @@ -94,12 +94,7 @@ SECTIONS __bss_end__ = .; _ebss = .; } > RAM - .openamp_section (NOLOAD) : { - . = ABSOLUTE(0x38000000); - *(.resource_table) - } >RAM_D3 AT > FLASH - .pdm_section (NOLOAD) : { - . = ABSOLUTE(0x3800FC00); + .pdm_section 0x3800FC00 (NOLOAD): { *(.pdm_buffer) } > RAM_D3 _dtcm_lma = __etext + SIZEOF(.data); diff --git a/variants/OPTA/mbed_config.h b/variants/OPTA/mbed_config.h index c0485cbf8..4b6d57eaa 100644 --- a/variants/OPTA/mbed_config.h +++ b/variants/OPTA/mbed_config.h @@ -226,7 +226,7 @@ #define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip #define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip #define MBED_CONF_LWIP_PRESENT 1 // set by library:lwip -#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 1 // set by application[*] #define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip @@ -250,9 +250,9 @@ #define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi #define MBED_CONF_NSAPI_DNS_ADDRESSES_LIMIT 10 // set by library:nsapi #define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 5000 // set by application[*] #define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 3 // set by application[*] #define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi diff --git a/variants/OPTA/pins_arduino.h b/variants/OPTA/pins_arduino.h index 25d6e8c06..107190dc8 100644 --- a/variants/OPTA/pins_arduino.h +++ b/variants/OPTA/pins_arduino.h @@ -68,6 +68,16 @@ static const uint8_t A6 = PIN_A6; static const uint8_t A7 = PIN_A7; #define ADC_RESOLUTION 12 +// Pin mapping to match serigraphy +static const uint8_t I1 = PIN_A0; +static const uint8_t I2 = PIN_A1; +static const uint8_t I3 = PIN_A2; +static const uint8_t I4 = PIN_A3; +static const uint8_t I5 = PIN_A4; +static const uint8_t I6 = PIN_A5; +static const uint8_t I7 = PIN_A6; +static const uint8_t I8 = PIN_A7; + // Digital pins // ----------- #define D0 (0u) @@ -148,6 +158,7 @@ static const uint8_t SCK = PIN_SPI_SCK; // Use these only if bootloader data is not available / valid #define _BOARD_VENDORID 0x2341 #define _BOARD_PRODUCTID 0x0264 + uint16_t _getVid_(); uint16_t _getPid_(); diff --git a/variants/OPTA/variant.cpp b/variants/OPTA/variant.cpp index db175d0af..93b796e88 100644 --- a/variants/OPTA/variant.cpp +++ b/variants/OPTA/variant.cpp @@ -253,7 +253,7 @@ class SecureQSPIFBlockDevice: public QSPIFBlockDevice { #if 1 // 256byte secure OTP area (on AT25SF128A) -// TODO: could be imcomplete, to be tested +// TODO: could be incomplete, to be tested class SecureQSPIFBlockDevice: public QSPIFBlockDevice { public: virtual int readSecure(void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size) { @@ -263,9 +263,15 @@ class SecureQSPIFBlockDevice: public QSPIFBlockDevice { } virtual int programSecure(void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size) { // like normal program with 42h + + // avoid warning: no return statement in function returning non-void [-Wreturn-type] + return 0; } virtual int eraseSecure(void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size) { // like normal program with 44h + + // avoid: warning: no return statement in function returning non-void [-Wreturn-type] + return 0; } }; #endif @@ -277,21 +283,28 @@ static bool has_otp_info = false; bool getSecureFlashData() { static OptaBoardInfo info; - uint8_t temp_buf[sizeof(OptaBoardInfo) + 1]; - int ret = 0; - static SecureQSPIFBlockDevice secure_root; - secure_root.init(); - // read secure sector 2 ( address 1 << 13 ) - ret = secure_root.readSecure(temp_buf, (1 << 13), sizeof(temp_buf)); + char temp_buf[sizeof(OptaBoardInfo) + 1]; + int ret = QSPI_STATUS_OK; + mbed::QSPI _qspi(QSPI_FLASH1_IO0, QSPI_FLASH1_IO1, QSPI_FLASH1_IO2, QSPI_FLASH1_IO3, QSPI_FLASH1_SCK, QSPI_FLASH1_CSN, QSPIF_POLARITY_MODE_0); + auto rxlen = sizeof(temp_buf); + ret = _qspi.read(0x48, -1, 1 << 13, temp_buf, &rxlen); memcpy(&info, &temp_buf[1], sizeof(OptaBoardInfo)); if (info.magic == OTP_QSPI_MAGIC) { _boardInfo = (uint8_t*)&info; has_otp_info = true; } - secure_root.deinit(); - return ret == 0; + return ret == QSPI_STATUS_OK; } +class SecureQSPIReader { +public: + SecureQSPIReader() { + getSecureFlashData(); + } +}; + +SecureQSPIReader __reader __attribute__ ((init_priority (101))); + uint8_t* boardInfo() { return _boardInfo; } @@ -300,26 +313,19 @@ uint16_t boardRevision() { return (((OptaBoardInfo*)_boardInfo)->revision); } +#ifndef FIRST_PROGRAMMING uint16_t _getVid_() { -#ifdef FIRST_PROGRAMMING - return _BOARD_VENDORID; -#else if (!has_otp_info) { getSecureFlashData(); } return ((OptaBoardInfo*)_boardInfo)->vid; -#endif } uint16_t _getPid_() { -#ifdef FIRST_PROGRAMMING - return _BOARD_PRODUCTID; -#else if (!has_otp_info) { getSecureFlashData(); } return ((OptaBoardInfo*)_boardInfo)->pid; -#endif } uint8_t _getSecureEthMac_(uint8_t *mac_address) { @@ -336,6 +342,7 @@ uint8_t mbed_otp_mac_address(char *mac) auto ret = _getSecureEthMac_(reinterpret_cast(mac)); return ret; } +#endif #define BOARD_REVISION(x,y) (x << 8 | y) diff --git a/variants/PORTENTA_H7_M7/conf/mbed_app.json b/variants/PORTENTA_H7_M7/conf/mbed_app.json index 5ac9c9bb7..fbf702dd2 100644 --- a/variants/PORTENTA_H7_M7/conf/mbed_app.json +++ b/variants/PORTENTA_H7_M7/conf/mbed_app.json @@ -15,14 +15,17 @@ "cellular.at-handler-buffer-size": 512, "mbed-trace.enable": true, "target.mbed_app_start": "0x8040000", + "nsapi.dns-response-wait-time": 5000, + "nsapi.dns-total-attempts": 3, + "lwip.raw-socket-enabled": true, "target.macros_add": [ "BT_UART_NO_3M_SUPPORT", "USB_DYNAMIC_CONFIGURATION", "METAL_INTERNAL", - "VIRTIO_MASTER_ONLY", + "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048", + "RPMSG_BUFFER_SIZE=512", "LSE_STARTUP_TIMEOUT=200" ] } diff --git a/variants/PORTENTA_H7_M7/defines.txt b/variants/PORTENTA_H7_M7/defines.txt index d4eec2164..24f4526bd 100644 --- a/variants/PORTENTA_H7_M7/defines.txt +++ b/variants/PORTENTA_H7_M7/defines.txt @@ -46,7 +46,7 @@ -D__FPU_PRESENT=1 -DLSE_STARTUP_TIMEOUT=200 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447044.864524 +-DMBED_BUILD_TIMESTAMP=1738678521.1974137 -D__MBED_CMSIS_RTOS_CM -DMBED_TICKLESS -DMBEDTLS_FS_IO @@ -55,7 +55,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX @@ -81,7 +81,7 @@ -DUSB_DYNAMIC_CONFIGURATION -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER --DVIRTIO_MASTER_ONLY +-DVIRTIO_DRIVER_ONLY -DMBED_NO_GLOBAL_USING_DIRECTIVE=1 -DCORE_MAJOR= -DCORE_MINOR= diff --git a/variants/PORTENTA_H7_M7/libs/libmbed.a b/variants/PORTENTA_H7_M7/libs/libmbed.a index d262766d7..286f51da4 100644 Binary files a/variants/PORTENTA_H7_M7/libs/libmbed.a and b/variants/PORTENTA_H7_M7/libs/libmbed.a differ diff --git a/variants/PORTENTA_H7_M7/linker_script.ld b/variants/PORTENTA_H7_M7/linker_script.ld index 8941b72a6..a0fdb9fcd 100644 --- a/variants/PORTENTA_H7_M7/linker_script.ld +++ b/variants/PORTENTA_H7_M7/linker_script.ld @@ -94,12 +94,7 @@ SECTIONS __bss_end__ = .; _ebss = .; } > RAM - .openamp_section (NOLOAD) : { - . = ABSOLUTE(0x38000000); - *(.resource_table) - } >RAM_D3 AT > FLASH - .pdm_section (NOLOAD) : { - . = ABSOLUTE(0x3800FC00); + .pdm_section 0x3800FC00 (NOLOAD): { *(.pdm_buffer) } > RAM_D3 _dtcm_lma = __etext + SIZEOF(.data); diff --git a/variants/PORTENTA_H7_M7/mbed_config.h b/variants/PORTENTA_H7_M7/mbed_config.h index a6f5ffd53..0bdce3566 100644 --- a/variants/PORTENTA_H7_M7/mbed_config.h +++ b/variants/PORTENTA_H7_M7/mbed_config.h @@ -227,7 +227,7 @@ #define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip #define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip #define MBED_CONF_LWIP_PRESENT 1 // set by library:lwip -#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 1 // set by application[*] #define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip #define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip @@ -252,9 +252,9 @@ #define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi #define MBED_CONF_NSAPI_DNS_ADDRESSES_LIMIT 10 // set by library:nsapi #define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 5000 // set by application[*] #define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi -#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 3 // set by application[*] #define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi #define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi diff --git a/variants/PORTENTA_H7_M7/variant.cpp b/variants/PORTENTA_H7_M7/variant.cpp index 83e800c49..f5c2d7127 100644 --- a/variants/PORTENTA_H7_M7/variant.cpp +++ b/variants/PORTENTA_H7_M7/variant.cpp @@ -10,7 +10,7 @@ AnalogPinDescription g_AAnalogPinDescription[] = { { PC_2C, NULL }, // A2 ADC3_INP0 { PC_3C, NULL }, // A3 ADC3_INP1 { PC_2_ALT0, NULL }, // A4 ADC1_INP12 - { PC_3_ALT2, NULL }, // A5 ADC2_INP13 + { PC_3_ALT0, NULL }, // A5 ADC2_INP13 { PA_4, NULL }, // A6 ADC1_INP18 { PA_6, NULL } // A7 ADC1_INP7 }; diff --git a/variants/PORTENTA_X8/conf/mbed_app.json b/variants/PORTENTA_X8/conf/mbed_app.json index 08b653062..ca2ce1071 100644 --- a/variants/PORTENTA_X8/conf/mbed_app.json +++ b/variants/PORTENTA_X8/conf/mbed_app.json @@ -13,11 +13,11 @@ "target.macros_add": [ "NO_VTOR_RELOCATE", "METAL_INTERNAL", - "VIRTIO_SLAVE_ONLY", + "VIRTIO_DEVICE_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048" + "RPMSG_BUFFER_SIZE=512" ] } } -} \ No newline at end of file +} diff --git a/variants/PORTENTA_X8/defines.txt b/variants/PORTENTA_X8/defines.txt index 7541674f7..84f8e1a24 100644 --- a/variants/PORTENTA_X8/defines.txt +++ b/variants/PORTENTA_X8/defines.txt @@ -34,7 +34,7 @@ -DEXTRA_IDLE_STACK_REQUIRED -D__FPU_PRESENT=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447283.7087135 +-DMBED_BUILD_TIMESTAMP=1738678907.604638 -D__MBED_CMSIS_RTOS_CM -DMBED_MPU_CUSTOM -DMBED_TICKLESS @@ -44,7 +44,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DNO_VTOR_RELOCATE --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORTEX -DTARGET_CORTEX_M @@ -68,7 +68,7 @@ -DTRANSACTION_QUEUE_SIZE_SPI=2 -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER --DVIRTIO_SLAVE_ONLY +-DVIRTIO_DEVICE_ONLY -DMBED_NO_GLOBAL_USING_DIRECTIVE=1 -DCORE_MAJOR= -DCORE_MINOR= diff --git a/variants/PORTENTA_X8/libs/libmbed.a b/variants/PORTENTA_X8/libs/libmbed.a index 7d9dd3a47..f97d15a42 100644 Binary files a/variants/PORTENTA_X8/libs/libmbed.a and b/variants/PORTENTA_X8/libs/libmbed.a differ diff --git a/variants/PORTENTA_X8/linker_script.ld b/variants/PORTENTA_X8/linker_script.ld index 4b66e7e26..e38e2df60 100644 --- a/variants/PORTENTA_X8/linker_script.ld +++ b/variants/PORTENTA_X8/linker_script.ld @@ -1,9 +1,10 @@ MEMORY { FLASH (rx) : ORIGIN = CM4_BINARY_START, LENGTH = 0x100000 - RAM (rwx) : ORIGIN = 0x10000000 + (((166 * 4) + 7) & 0xFFFFFFF8), LENGTH = 0x48000 - (((166 * 4) + 7) & 0xFFFFFFF8) + RAM_D2 (rwx) : ORIGIN = 0x10000000 + (((166 * 4) + 7) & 0xFFFFFFF8), LENGTH = 0x48000 - (((166 * 4) + 7) & 0xFFFFFFF8) RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K } +REGION_ALIAS("RAM", RAM_D2); __OPENAMP_region_start__ = 0x38000400; __OPENAMP_region_end__ = 0x38000400 + LENGTH(RAM_D3) - 1K; ENTRY(Reset_Handler) @@ -85,12 +86,7 @@ SECTIONS __bss_end__ = .; _ebss = .; } > RAM - .openamp_section (NOLOAD) : { - . = ABSOLUTE(0x38000000); - *(.resource_table) - } >RAM_D3 AT > FLASH - .pdm_section (NOLOAD) : { - . = ABSOLUTE(0x3800FC00); + .pdm_section 0x3800FC00 (NOLOAD): { *(.pdm_buffer) } > RAM_D3 diff --git a/variants/RASPBERRY_PI_PICO/defines.txt b/variants/RASPBERRY_PI_PICO/defines.txt index 15fb053eb..145819bb8 100644 --- a/variants/RASPBERRY_PI_PICO/defines.txt +++ b/variants/RASPBERRY_PI_PICO/defines.txt @@ -16,11 +16,12 @@ -DDEVICE_SERIAL=1 -DDEVICE_SERIAL_FC=1 -DDEVICE_SPI=1 +-DDEVICE_TRNG=1 -DDEVICE_USBDEVICE=1 -DDEVICE_USTICKER=1 -DDEVICE_WATCHDOG=1 -D__MBED__=1 --DMBED_BUILD_TIMESTAMP=1690447021.82633 +-DMBED_BUILD_TIMESTAMP=1738678494.5493546 -D__MBED_CMSIS_RTOS_CM -DMBED_MPU_CUSTOM -DMBEDTLS_ENTROPY_NV_SEED diff --git a/variants/RASPBERRY_PI_PICO/includes.txt b/variants/RASPBERRY_PI_PICO/includes.txt index ec0bfda37..3e7ea4eca 100644 --- a/variants/RASPBERRY_PI_PICO/includes.txt +++ b/variants/RASPBERRY_PI_PICO/includes.txt @@ -325,6 +325,9 @@ -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_platform/include/pico +-iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand +-iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include +-iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_rand/include/pico -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_runtime -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_runtime/include -iwithprefixbefore/mbed/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_runtime/include/pico diff --git a/variants/RASPBERRY_PI_PICO/libs/libmbed.a b/variants/RASPBERRY_PI_PICO/libs/libmbed.a index 78edaa82d..1075eec8e 100644 Binary files a/variants/RASPBERRY_PI_PICO/libs/libmbed.a and b/variants/RASPBERRY_PI_PICO/libs/libmbed.a differ diff --git a/variants/RASPBERRY_PI_PICO/linker_script.ld b/variants/RASPBERRY_PI_PICO/linker_script.ld index 6aad4a2ab..38608120e 100644 --- a/variants/RASPBERRY_PI_PICO/linker_script.ld +++ b/variants/RASPBERRY_PI_PICO/linker_script.ld @@ -11,6 +11,9 @@ SECTIONS .flash_begin : { __flash_binary_start = .; } > FLASH + .second_stage_ota : { + KEEP (*(.second_stage_ota)) + } > FLASH .boot2 : { __boot2_start__ = .; KEEP (*(.boot2)) @@ -101,7 +104,9 @@ SECTIONS } > RAM AT> FLASH .uninitialized_data (COPY): { . = ALIGN(4); + __uninitialized_data_start__ = .; *(.uninitialized_data*) + __uninitialized_data_end__ = .; } > RAM .scratch_x : { __scratch_x_start__ = .;